亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mipsnet.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
#include "hw.h"#include "mips.h"#include "net.h"#include "isa.h"//#define DEBUG_MIPSNET_SEND//#define DEBUG_MIPSNET_RECEIVE//#define DEBUG_MIPSNET_DATA//#define DEBUG_MIPSNET_IRQ/* MIPSnet register offsets */#define MIPSNET_DEV_ID		0x00# define MIPSNET_DEV_ID_STRING	"MIPSNET0"#define MIPSNET_BUSY		0x08#define MIPSNET_RX_DATA_COUNT	0x0c#define MIPSNET_TX_DATA_COUNT	0x10#define MIPSNET_INT_CTL		0x14# define MIPSNET_INTCTL_TXDONE		0x00000001# define MIPSNET_INTCTL_RXDONE		0x00000002# define MIPSNET_INTCTL_TESTBIT		0x80000000#define MIPSNET_INTERRUPT_INFO	0x18#define MIPSNET_RX_DATA_BUFFER	0x1c#define MIPSNET_TX_DATA_BUFFER	0x20#define MAX_ETH_FRAME_SIZE	1514typedef struct MIPSnetState {    uint32_t busy;    uint32_t rx_count;    uint32_t rx_read;    uint32_t tx_count;    uint32_t tx_written;    uint32_t intctl;    uint8_t rx_buffer[MAX_ETH_FRAME_SIZE];    uint8_t tx_buffer[MAX_ETH_FRAME_SIZE];    qemu_irq irq;    VLANClientState *vc;    NICInfo *nd;} MIPSnetState;static void mipsnet_reset(MIPSnetState *s){    s->busy = 1;    s->rx_count = 0;    s->rx_read = 0;    s->tx_count = 0;    s->tx_written = 0;    s->intctl = 0;    memset(s->rx_buffer, 0, MAX_ETH_FRAME_SIZE);    memset(s->tx_buffer, 0, MAX_ETH_FRAME_SIZE);}static void mipsnet_update_irq(MIPSnetState *s){    int isr = !!s->intctl;#ifdef DEBUG_MIPSNET_IRQ    printf("mipsnet: Set IRQ to %d (%02x)\n", isr, s->intctl);#endif    qemu_set_irq(s->irq, isr);}static int mipsnet_buffer_full(MIPSnetState *s){    if (s->rx_count >= MAX_ETH_FRAME_SIZE)        return 1;    return 0;}static int mipsnet_can_receive(void *opaque){    MIPSnetState *s = opaque;    if (s->busy)        return 0;    return !mipsnet_buffer_full(s);}static void mipsnet_receive(void *opaque, const uint8_t *buf, int size){    MIPSnetState *s = opaque;#ifdef DEBUG_MIPSNET_RECEIVE    printf("mipsnet: receiving len=%d\n", size);#endif    if (!mipsnet_can_receive(opaque))        return;    s->busy = 1;    /* Just accept everything. */    /* Write packet data. */    memcpy(s->rx_buffer, buf, size);    s->rx_count = size;    s->rx_read = 0;    /* Now we can signal we have received something. */    s->intctl |= MIPSNET_INTCTL_RXDONE;    mipsnet_update_irq(s);}static uint32_t mipsnet_ioport_read(void *opaque, uint32_t addr){    MIPSnetState *s = opaque;    int ret = 0;    const char *devid = MIPSNET_DEV_ID_STRING;    addr &= 0x3f;    switch (addr) {    case MIPSNET_DEV_ID:	ret = *((uint32_t *)&devid);        break;    case MIPSNET_DEV_ID + 4:	ret = *((uint32_t *)(&devid + 4));        break;    case MIPSNET_BUSY:	ret = s->busy;        break;    case MIPSNET_RX_DATA_COUNT:	ret = s->rx_count;        break;    case MIPSNET_TX_DATA_COUNT:	ret = s->tx_count;        break;    case MIPSNET_INT_CTL:	ret = s->intctl;        s->intctl &= ~MIPSNET_INTCTL_TESTBIT;        break;    case MIPSNET_INTERRUPT_INFO:        /* XXX: This seems to be a per-VPE interrupt number. */	ret = 0;        break;    case MIPSNET_RX_DATA_BUFFER:        if (s->rx_count) {            s->rx_count--;            ret = s->rx_buffer[s->rx_read++];        }        break;    /* Reads as zero. */    case MIPSNET_TX_DATA_BUFFER:    default:        break;    }#ifdef DEBUG_MIPSNET_DATA    printf("mipsnet: read addr=0x%02x val=0x%02x\n", addr, ret);#endif    return ret;}static void mipsnet_ioport_write(void *opaque, uint32_t addr, uint32_t val){    MIPSnetState *s = opaque;    addr &= 0x3f;#ifdef DEBUG_MIPSNET_DATA    printf("mipsnet: write addr=0x%02x val=0x%02x\n", addr, val);#endif    switch (addr) {    case MIPSNET_TX_DATA_COUNT:	s->tx_count = (val <= MAX_ETH_FRAME_SIZE) ? val : 0;        s->tx_written = 0;        break;    case MIPSNET_INT_CTL:        if (val & MIPSNET_INTCTL_TXDONE) {            s->intctl &= ~MIPSNET_INTCTL_TXDONE;        } else if (val & MIPSNET_INTCTL_RXDONE) {            s->intctl &= ~MIPSNET_INTCTL_RXDONE;        } else if (val & MIPSNET_INTCTL_TESTBIT) {            mipsnet_reset(s);            s->intctl |= MIPSNET_INTCTL_TESTBIT;        } else if (!val) {            /* ACK testbit interrupt, flag was cleared on read. */        }        s->busy = !!s->intctl;        mipsnet_update_irq(s);        break;    case MIPSNET_TX_DATA_BUFFER:        s->tx_buffer[s->tx_written++] = val;        if (s->tx_written == s->tx_count) {            /* Send buffer. */#ifdef DEBUG_MIPSNET_SEND            printf("mipsnet: sending len=%d\n", s->tx_count);#endif            qemu_send_packet(s->vc, s->tx_buffer, s->tx_count);            s->tx_count = s->tx_written = 0;            s->intctl |= MIPSNET_INTCTL_TXDONE;            s->busy = 1;            mipsnet_update_irq(s);        }        break;    /* Read-only registers */    case MIPSNET_DEV_ID:    case MIPSNET_BUSY:    case MIPSNET_RX_DATA_COUNT:    case MIPSNET_INTERRUPT_INFO:    case MIPSNET_RX_DATA_BUFFER:    default:        break;    }}static void mipsnet_save(QEMUFile *f, void *opaque){    MIPSnetState *s = opaque;    qemu_put_be32s(f, &s->busy);    qemu_put_be32s(f, &s->rx_count);    qemu_put_be32s(f, &s->rx_read);    qemu_put_be32s(f, &s->tx_count);    qemu_put_be32s(f, &s->tx_written);    qemu_put_be32s(f, &s->intctl);    qemu_put_buffer(f, s->rx_buffer, MAX_ETH_FRAME_SIZE);    qemu_put_buffer(f, s->tx_buffer, MAX_ETH_FRAME_SIZE);}static int mipsnet_load(QEMUFile *f, void *opaque, int version_id){    MIPSnetState *s = opaque;    if (version_id > 0)        return -EINVAL;    qemu_get_be32s(f, &s->busy);    qemu_get_be32s(f, &s->rx_count);    qemu_get_be32s(f, &s->rx_read);    qemu_get_be32s(f, &s->tx_count);    qemu_get_be32s(f, &s->tx_written);    qemu_get_be32s(f, &s->intctl);    qemu_get_buffer(f, s->rx_buffer, MAX_ETH_FRAME_SIZE);    qemu_get_buffer(f, s->tx_buffer, MAX_ETH_FRAME_SIZE);    return 0;}void mipsnet_init (int base, qemu_irq irq, NICInfo *nd){    MIPSnetState *s;    s = qemu_mallocz(sizeof(MIPSnetState));    if (!s)        return;    register_ioport_write(base, 36, 1, mipsnet_ioport_write, s);    register_ioport_read(base, 36, 1, mipsnet_ioport_read, s);    register_ioport_write(base, 36, 2, mipsnet_ioport_write, s);    register_ioport_read(base, 36, 2, mipsnet_ioport_read, s);    register_ioport_write(base, 36, 4, mipsnet_ioport_write, s);    register_ioport_read(base, 36, 4, mipsnet_ioport_read, s);    s->irq = irq;    s->nd = nd;    if (nd && nd->vlan) {        s->vc = qemu_new_vlan_client(nd->vlan, mipsnet_receive,                                     mipsnet_can_receive, s);    } else {        s->vc = NULL;    }    snprintf(s->vc->info_str, sizeof(s->vc->info_str),             "mipsnet macaddr=%02x:%02x:%02x:%02x:%02x:%02x",              s->nd->macaddr[0],              s->nd->macaddr[1],              s->nd->macaddr[2],              s->nd->macaddr[3],              s->nd->macaddr[4],              s->nd->macaddr[5]);    mipsnet_reset(s);    register_savevm("mipsnet", 0, 0, mipsnet_save, mipsnet_load, s);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区三区鸳鸯浴 | 日韩精品亚洲专区| 国产亚洲欧美日韩日本| 精品国产a毛片| 日韩午夜激情视频| 欧美大片免费久久精品三p| 91精品国产乱| 欧美一级理论片| 日韩一级高清毛片| 日韩欧美国产高清| 国产日韩精品一区二区三区| 国产日韩综合av| 国产精品久久久久久久久晋中| 国产精品你懂的| 亚洲精选在线视频| 午夜精品久久久久久不卡8050| 日韩精品欧美精品| 国产精品综合av一区二区国产馆| 国产一区三区三区| jvid福利写真一区二区三区| 在线观看av一区| 精品人在线二区三区| 亚洲国产成人午夜在线一区| 亚洲视频在线观看一区| 日韩国产精品久久| 国产高清精品在线| 91久久精品一区二区三区| 欧美无人高清视频在线观看| 精品va天堂亚洲国产| 成人免费在线播放视频| 亚洲国产aⅴ成人精品无吗| 免费人成精品欧美精品| 成人午夜免费视频| 91精品国产一区二区| 欧美激情综合五月色丁香| 樱桃视频在线观看一区| 精彩视频一区二区| 色94色欧美sute亚洲线路一ni | 91精品国产综合久久久久久久久久 | 国产精品污污网站在线观看| 亚洲男帅同性gay1069| 久久国产精品99久久人人澡| 97se亚洲国产综合自在线| 日韩一级免费观看| 亚洲综合色噜噜狠狠| 国精产品一区一区三区mba桃花 | 成人av在线观| 91精品国产入口在线| 国产精品久久久久久亚洲伦| 奇米影视一区二区三区| 99精品国产99久久久久久白柏| 日韩一二三四区| 亚洲成av人综合在线观看| 不卡大黄网站免费看| 久久综合色综合88| 蜜臀av性久久久久蜜臀av麻豆| 91成人在线精品| 中文字幕不卡在线观看| 精品夜夜嗨av一区二区三区| 欧美日韩一区二区在线视频| 中文字幕一区二区三区在线播放 | 国产精品人成在线观看免费| 免费在线观看视频一区| 欧美网站一区二区| 一区二区三区高清在线| av在线不卡免费看| 亚洲国产经典视频| 成人黄色小视频| 中文字幕va一区二区三区| 国内精品写真在线观看| 欧美va日韩va| 国产一区二区三区四| 亚洲精品一区二区三区福利| 奇米一区二区三区av| 日韩视频国产视频| 精品一区二区三区在线视频| 欧美一区二区三区视频免费播放 | 国产精品久久久久一区二区三区| 极品瑜伽女神91| 久久久精品日韩欧美| 国产一区 二区| 日本一区二区不卡视频| 成人午夜免费av| 自拍偷拍亚洲综合| 欧美无乱码久久久免费午夜一区 | 色综合色狠狠天天综合色| 国产精品久久久久aaaa樱花| 99免费精品视频| 亚洲自拍偷拍av| 日韩一区二区电影在线| 激情久久五月天| 国产精品午夜在线观看| 96av麻豆蜜桃一区二区| 亚洲精品ww久久久久久p站| 欧美羞羞免费网站| 久久成人精品无人区| 中文字幕欧美区| 91福利在线播放| 日韩激情视频网站| 日韩欧美的一区| 播五月开心婷婷综合| 午夜在线电影亚洲一区| 久久青草国产手机看片福利盒子| 99热在这里有精品免费| 天天av天天翘天天综合网| 精品欧美一区二区久久| 不卡av在线网| 日本最新不卡在线| 国产精品日韩成人| 日韩免费视频一区| 91在线一区二区三区| 视频一区二区欧美| 国产精品家庭影院| 日韩欧美中文一区二区| 不卡区在线中文字幕| 老司机免费视频一区二区| 国产精品亲子伦对白| 制服丝袜国产精品| 色综合天天综合网国产成人综合天| 亚洲国产成人精品视频| 欧美高清在线视频| 日韩欧美国产一区在线观看| 色偷偷成人一区二区三区91| 国内不卡的二区三区中文字幕| 亚洲精品免费在线播放| 日韩视频免费直播| 欧美日韩成人综合| 99九九99九九九视频精品| 国产一区免费电影| 蜜桃视频一区二区三区| 一区二区久久久久| 国产精品毛片a∨一区二区三区| 制服丝袜中文字幕一区| 色菇凉天天综合网| 99久久免费视频.com| 国产成人亚洲综合a∨婷婷| 日本视频免费一区| 午夜不卡av免费| 一区二区三区视频在线观看| 国产精品美女久久久久久久久久久| 日韩欧美一二三区| 欧美一区二区在线不卡| 欧美日韩一区精品| 欧美在线一二三| 91久久精品一区二区二区| 99re热视频这里只精品| av影院午夜一区| 99视频在线观看一区三区| 不卡视频一二三四| 色综合天天综合在线视频| 色天使色偷偷av一区二区| 一道本成人在线| 欧美视频在线观看一区| 欧美影视一区在线| 欧美日韩国产a| 欧美日韩高清一区二区| 欧美一区二区三区免费在线看| 欧美日韩久久久| 91麻豆精品国产91久久久资源速度 | 91网站最新网址| av电影在线观看不卡| av成人动漫在线观看| 日本精品一区二区三区四区的功能| av中文字幕亚洲| 在线观看一区二区视频| 7777女厕盗摄久久久| 日韩一区二区在线看片| 久久精品人人做人人综合| 欧美激情综合网| 亚洲一二三区不卡| 久久成人免费日本黄色| 成人永久aaa| 91麻豆免费看片| 91精品国产综合久久香蕉麻豆| 精品99久久久久久| 国产清纯在线一区二区www| 亚洲老司机在线| 日本系列欧美系列| 国产成人午夜片在线观看高清观看| 99这里只有精品| 日韩一区二区在线观看视频播放| 国产欧美一区二区精品性色超碰| 国产精品网站一区| 亚洲午夜日本在线观看| 激情伊人五月天久久综合| av一区二区三区黑人| 91精品国产入口在线| 国产精品欧美一区二区三区| 亚洲成av人片在线观看无码| 精品一区二区三区免费播放| 99久久夜色精品国产网站| 欧美日本在线播放| 亚洲国产成人私人影院tom| 亚洲va欧美va人人爽午夜| 国产99久久久国产精品潘金 | 国产麻豆精品一区二区| 欧美无人高清视频在线观看| 国产欧美日本一区二区三区| 视频一区视频二区在线观看| 国产成人三级在线观看|