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

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

?? smc91c111.c

?? xen 3.2.2 源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
        case 3: case 4: case 5:            /* Should be readonly, but linux writes to them anyway. Ignore.  */            return;        case 6: /* Pointer */            SET_LOW(ptr, value);            return;        case 7:            SET_HIGH(ptr, value);            return;        case 8: case 9: case 10: case 11: /* Data */            {                int p;                int n;                if (s->ptr & 0x8000)                    n = s->rx_fifo[0];                else                    n = s->packet_num;                p = s->ptr & 0x07ff;                if (s->ptr & 0x4000) {                    s->ptr = (s->ptr & 0xf800) | ((s->ptr + 1) & 0x7ff);                } else {                    p += (offset & 3);                }                s->data[n][p] = value;            }            return;        case 12: /* Interrupt ACK.  */            s->int_level &= ~(value & 0xd6);            if (value & INT_TX)                smc91c111_pop_tx_fifo_done(s);            smc91c111_update(s);            return;        case 13: /* Interrupt mask.  */            s->int_mask = value;            smc91c111_update(s);            return;        }        break;;    case 3:        switch (offset) {        case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:            /* Multicast table.  */            /* Not implemented.  */            return;        case 8: case 9: /* Management Interface.  */            /* Not implemented.  */            return;        case 12: /* Early receive.  */            s->ercv = value & 0x1f;        case 13:            /* Ignore.  */            return;        }        break;    }    cpu_abort (cpu_single_env, "smc91c111_write: Bad reg %d:%x\n",               s->bank, offset);}static uint32_t smc91c111_readb(void *opaque, target_phys_addr_t offset){    smc91c111_state *s = (smc91c111_state *)opaque;    offset -= s->base;    if (offset == 14) {        return s->bank;    }    if (offset == 15)        return 0x33;    switch (s->bank) {    case 0:        switch (offset) {        case 0: /* TCR */            return s->tcr & 0xff;        case 1:            return s->tcr >> 8;        case 2: /* EPH Status */            return 0;        case 3:            return 0x40;        case 4: /* RCR */            return s->rcr & 0xff;        case 5:            return s->rcr >> 8;        case 6: /* Counter */        case 7:            /* Not implemented.  */            return 0;        case 8: /* Free memory available.  */            {                int i;                int n;                n = 0;                for (i = 0; i < NUM_PACKETS; i++) {                    if (s->allocated & (1 << i))                        n++;                }                return n;            }        case 9: /* Memory size.  */            return NUM_PACKETS;        case 10: case 11: /* RPCR */            /* Not implemented.  */            return 0;        }        break;    case 1:        switch (offset) {        case 0: /* CONFIG */            return s->cr & 0xff;        case 1:            return s->cr >> 8;        case 2: case 3: /* BASE */            /* Not implemented.  */            return 0;        case 4: case 5: case 6: case 7: case 8: case 9: /* IA */            return s->macaddr[offset - 4];        case 10: /* General Purpose */            return s->gpr & 0xff;        case 11:            return s->gpr >> 8;        case 12: /* Control */            return s->ctr & 0xff;        case 13:            return s->ctr >> 8;        }        break;    case 2:        switch (offset) {        case 0: case 1: /* MMUCR Busy bit.  */            return 0;        case 2: /* Packet Number.  */            return s->packet_num;        case 3: /* Allocation Result.  */            return s->tx_alloc;        case 4: /* TX FIFO */            if (s->tx_fifo_done_len == 0)                return 0x80;            else                return s->tx_fifo_done[0];        case 5: /* RX FIFO */            if (s->rx_fifo_len == 0)                return 0x80;            else                return s->rx_fifo[0];        case 6: /* Pointer */            return s->ptr & 0xff;        case 7:            return (s->ptr >> 8) & 0xf7;        case 8: case 9: case 10: case 11: /* Data */            {                int p;                int n;                if (s->ptr & 0x8000)                    n = s->rx_fifo[0];                else                    n = s->packet_num;                p = s->ptr & 0x07ff;                if (s->ptr & 0x4000) {                    s->ptr = (s->ptr & 0xf800) | ((s->ptr + 1) & 0x07ff);                } else {                    p += (offset & 3);                }                return s->data[n][p];            }        case 12: /* Interrupt status.  */            return s->int_level;        case 13: /* Interrupt mask.  */            return s->int_mask;        }        break;    case 3:        switch (offset) {        case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:            /* Multicast table.  */            /* Not implemented.  */            return 0;        case 8: /* Management Interface.  */            /* Not implemented.  */            return 0x30;        case 9:            return 0x33;        case 10: /* Revision.  */            return 0x91;        case 11:            return 0x33;        case 12:            return s->ercv;        case 13:            return 0;        }        break;    }    cpu_abort (cpu_single_env, "smc91c111_read: Bad reg %d:%x\n",               s->bank, offset);    return 0;}static void smc91c111_writew(void *opaque, target_phys_addr_t offset,                             uint32_t value){    smc91c111_writeb(opaque, offset, value & 0xff);    smc91c111_writeb(opaque, offset + 1, value >> 8);}static void smc91c111_writel(void *opaque, target_phys_addr_t offset,                             uint32_t value){    smc91c111_state *s = (smc91c111_state *)opaque;    /* 32-bit writes to offset 0xc only actually write to the bank select       register (offset 0xe)  */    if (offset != s->base + 0xc)        smc91c111_writew(opaque, offset, value & 0xffff);    smc91c111_writew(opaque, offset + 2, value >> 16);}static uint32_t smc91c111_readw(void *opaque, target_phys_addr_t offset){    uint32_t val;    val = smc91c111_readb(opaque, offset);    val |= smc91c111_readb(opaque, offset + 1) << 8;    return val;}static uint32_t smc91c111_readl(void *opaque, target_phys_addr_t offset){    uint32_t val;    val = smc91c111_readw(opaque, offset);    val |= smc91c111_readw(opaque, offset + 2) << 16;    return val;}static int smc91c111_can_receive(void *opaque){    smc91c111_state *s = (smc91c111_state *)opaque;    if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST))        return 1;    if (s->allocated == (1 << NUM_PACKETS) - 1)        return 0;    return 1;}static void smc91c111_receive(void *opaque, const uint8_t *buf, int size){    smc91c111_state *s = (smc91c111_state *)opaque;    int status;    int packetsize;    uint32_t crc;    int packetnum;    uint8_t *p;    if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST))        return;    /* Short packets are padded with zeros.  Receiving a packet       < 64 bytes long is considered an error condition.  */    if (size < 64)        packetsize = 64;    else        packetsize = (size & ~1);    packetsize += 6;    crc = (s->rcr & RCR_STRIP_CRC) == 0;    if (crc)        packetsize += 4;    /* TODO: Flag overrun and receive errors.  */    if (packetsize > 2048)        return;    packetnum = smc91c111_allocate_packet(s);    if (packetnum == 0x80)        return;    s->rx_fifo[s->rx_fifo_len++] = packetnum;    p = &s->data[packetnum][0];    /* ??? Multicast packets?  */    status = 0;    if (size > 1518)        status |= RS_TOOLONG;    if (size & 1)        status |= RS_ODDFRAME;    *(p++) = status & 0xff;    *(p++) = status >> 8;    *(p++) = packetsize & 0xff;    *(p++) = packetsize >> 8;    memcpy(p, buf, size & ~1);    p += (size & ~1);    /* Pad short packets.  */    if (size < 64) {        int pad;                if (size & 1)            *(p++) = buf[size - 1];        pad = 64 - size;        memset(p, 0, pad);        p += pad;        size = 64;    }    /* It's not clear if the CRC should go before or after the last byte in       odd sized packets.  Linux disables the CRC, so that's no help.       The pictures in the documentation show the CRC aligned on a 16-bit       boundary before the last odd byte, so that's what we do.  */    if (crc) {        crc = crc32(~0, buf, size);        *(p++) = crc & 0xff; crc >>= 8;        *(p++) = crc & 0xff; crc >>= 8;        *(p++) = crc & 0xff; crc >>= 8;        *(p++) = crc & 0xff; crc >>= 8;    }    if (size & 1) {        *(p++) = buf[size - 1];        *(p++) = 0x60;    } else {        *(p++) = 0;        *(p++) = 0x40;    }    /* TODO: Raise early RX interrupt?  */    s->int_level |= INT_RCV;    smc91c111_update(s);}static CPUReadMemoryFunc *smc91c111_readfn[] = {    smc91c111_readb,    smc91c111_readw,    smc91c111_readl};static CPUWriteMemoryFunc *smc91c111_writefn[] = {    smc91c111_writeb,    smc91c111_writew,    smc91c111_writel};void smc91c111_init(NICInfo *nd, uint32_t base, void *pic, int irq){    smc91c111_state *s;    int iomemtype;    s = (smc91c111_state *)qemu_mallocz(sizeof(smc91c111_state));    iomemtype = cpu_register_io_memory(0, smc91c111_readfn,                                       smc91c111_writefn, s);    cpu_register_physical_memory(base, 16, iomemtype);    s->base = base;    s->pic = pic;    s->irq = irq;    memcpy(s->macaddr, nd->macaddr, 6);    smc91c111_reset(s);    s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive,                                 smc91c111_can_receive, s);    /* ??? Save/restore.  */}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂av在线一区| eeuss国产一区二区三区| 亚洲午夜电影在线观看| 亚洲欧洲国产专区| 国产精品久久福利| 亚洲国产精品av| 国产精品色噜噜| 国产精品久久久久久久久久免费看 | 日韩国产高清在线| 亚洲成人激情综合网| 亚洲一区二区欧美激情| 亚洲国产另类精品专区| 午夜精品久久久久久久| 蜜桃视频一区二区三区在线观看| 欧美96一区二区免费视频| 精品一区二区三区的国产在线播放| 日韩电影免费在线观看网站| 免费看黄色91| 韩日精品视频一区| 国产成人免费在线观看| 成人教育av在线| 色综合咪咪久久| 欧美日韩精品一区二区三区| 欧美一级高清片| 精品国产凹凸成av人网站| 国产亚洲精品aa| ...av二区三区久久精品| 夜夜夜精品看看| 日韩高清电影一区| 国产福利一区二区三区视频| 成人动漫一区二区三区| 色老综合老女人久久久| 欧美日韩国产综合一区二区三区 | 欧美视频一区二区三区在线观看| 欧美视频一区二区三区四区 | 亚洲亚洲精品在线观看| 青椒成人免费视频| 国产成人综合网站| 色综合久久久久综合体桃花网| 欧美日韩视频一区二区| 精品久久久久一区二区国产| 国产精品水嫩水嫩| 午夜精品久久久久久久久久 | 99精品视频一区| 欧美日韩国产精选| 久久久亚洲精品石原莉奈| 亚洲婷婷在线视频| 天堂久久久久va久久久久| 国产一区999| 在线免费视频一区二区| 精品理论电影在线| 综合中文字幕亚洲| 久久国产乱子精品免费女| 99热精品国产| 日韩一区二区三区精品视频| 亚洲欧洲成人精品av97| 奇米精品一区二区三区四区| 成人午夜视频在线| 91精品综合久久久久久| 日韩一区在线看| 久久精品999| 色先锋久久av资源部| 精品国产一区二区三区四区四 | 人人狠狠综合久久亚洲| eeuss国产一区二区三区| 日韩精品一区二区在线观看| 亚洲免费在线观看| 国产乱码精品一区二区三区忘忧草| 在线中文字幕一区| 国产精品久久福利| 久久成人免费电影| 欧美日韩成人综合天天影院 | 久久久久久99精品| 天堂蜜桃一区二区三区| 色偷偷一区二区三区| 国产欧美精品一区| 蜜臀久久久久久久| 99国产精品国产精品毛片| 日韩欧美黄色影院| 亚洲色图欧美在线| 六月丁香婷婷久久| 欧美肥妇free| 亚洲日本在线观看| 国产精品综合视频| 91精品国产色综合久久不卡电影 | 国产不卡视频在线播放| 91麻豆精品国产91久久久资源速度 | 亚洲国产欧美在线人成| 国产成人综合亚洲网站| 欧美另类变人与禽xxxxx| 亚洲美女精品一区| 成人一道本在线| 欧美电影免费观看高清完整版在线观看| 亚洲丝袜自拍清纯另类| 国产一区二区在线视频| 欧美疯狂做受xxxx富婆| 自拍偷拍亚洲激情| 99国产精品99久久久久久| 久久久久久久精| 精品一区二区三区影院在线午夜 | 精品福利在线导航| 日韩福利电影在线观看| 欧美色老头old∨ideo| 精品av久久707| 热久久久久久久| 欧美日韩激情在线| 日韩综合一区二区| 欧美午夜影院一区| 樱桃视频在线观看一区| 99亚偷拍自图区亚洲| 国产欧美日韩在线视频| 激情综合色综合久久综合| 日韩欧美视频在线| 久久国产日韩欧美精品| 欧美日韩精品一区二区三区蜜桃 | 久久久精品日韩欧美| 精品综合免费视频观看| 精品乱人伦小说| 精品伊人久久久久7777人| 日韩一级在线观看| 性做久久久久久久免费看| 日本精品免费观看高清观看| 亚洲国产中文字幕| 欧美美女bb生活片| 午夜精品福利视频网站| 欧美精品自拍偷拍动漫精品| 五月天精品一区二区三区| 欧美另类高清zo欧美| 捆绑调教美女网站视频一区| 日韩你懂的在线播放| 狠狠色丁香久久婷婷综| 久久久久久久久免费| 国产成人亚洲综合a∨猫咪| 国产日韩在线不卡| 97精品久久久久中文字幕 | 一区二区三区四区中文字幕| 99国产一区二区三精品乱码| 亚洲r级在线视频| 欧美一区二区网站| 九色综合国产一区二区三区| 久久综合久久综合久久综合| 大陆成人av片| 一区二区理论电影在线观看| 91网站最新地址| 亚洲高清免费观看| 日韩午夜中文字幕| 国产剧情av麻豆香蕉精品| 国产精品美日韩| 91在线观看视频| 亚欧色一区w666天堂| 欧美tickling挠脚心丨vk| 国产一区二区三区免费看| 亚洲欧洲日本在线| 欧美日韩不卡一区| 激情小说欧美图片| 中文字幕在线不卡一区| 日韩欧美一二三| a级精品国产片在线观看| 亚洲综合精品久久| 欧美成人免费网站| av中文字幕亚洲| 亚洲午夜一区二区| 欧美国产精品v| 精品污污网站免费看| 免费观看30秒视频久久| 国产亚洲va综合人人澡精品 | 国产成人在线电影| 亚洲情趣在线观看| 日韩欧美一区在线| 99视频精品全部免费在线| 性久久久久久久久久久久| 中文字幕va一区二区三区| 欧美三日本三级三级在线播放| 久久99国内精品| 一区二区三区欧美| 精品日韩成人av| 欧美日韩国产天堂| 高清成人免费视频| 日本va欧美va欧美va精品| 中文字幕精品综合| 日韩一区二区免费在线观看| 国产成人免费视频一区| 婷婷综合久久一区二区三区| 亚洲国产激情av| 日韩三级av在线播放| 欧美自拍偷拍午夜视频| 国产精品99久久久久久久女警 | 欧美大片一区二区三区| 91免费观看国产| 国产精品一区二区在线观看不卡 | 成人av电影在线| 精一区二区三区| 亚洲电影在线播放| 成人免费在线观看入口| 欧美mv和日韩mv国产网站| 欧美日韩久久一区二区| 色综合中文字幕国产| 久久66热偷产精品| 日韩国产欧美在线播放| 一区二区在线看|