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

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

?? smc91c111.c

?? xen 3.2.2 源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*  * SMSC 91C111 Ethernet interface emulation * * Copyright (c) 2005 CodeSourcery, LLC. * Written by Paul Brook * * This code is licenced under the GPL */#include "vl.h"/* For crc32 */#include <zlib.h>/* Number of 2k memory pages available.  */#define NUM_PACKETS 4typedef struct {    uint32_t base;    VLANClientState *vc;    uint16_t tcr;    uint16_t rcr;    uint16_t cr;    uint16_t ctr;    uint16_t gpr;    uint16_t ptr;    uint16_t ercv;    void *pic;    int irq;    int bank;    int packet_num;    int tx_alloc;    /* Bitmask of allocated packets.  */    int allocated;    int tx_fifo_len;    int tx_fifo[NUM_PACKETS];    int rx_fifo_len;    int rx_fifo[NUM_PACKETS];    int tx_fifo_done_len;    int tx_fifo_done[NUM_PACKETS];    /* Packet buffer memory.  */    uint8_t data[NUM_PACKETS][2048];    uint8_t int_level;    uint8_t int_mask;    uint8_t macaddr[6];} smc91c111_state;#define RCR_SOFT_RST  0x8000#define RCR_STRIP_CRC 0x0200#define RCR_RXEN      0x0100#define TCR_EPH_LOOP  0x2000#define TCR_NOCRC     0x0100#define TCR_PAD_EN    0x0080#define TCR_FORCOL    0x0004#define TCR_LOOP      0x0002#define TCR_TXEN      0x0001#define INT_MD        0x80#define INT_ERCV      0x40#define INT_EPH       0x20#define INT_RX_OVRN   0x10#define INT_ALLOC     0x08#define INT_TX_EMPTY  0x04#define INT_TX        0x02#define INT_RCV       0x01#define CTR_AUTO_RELEASE  0x0800#define CTR_RELOAD        0x0002#define CTR_STORE         0x0001#define RS_ALGNERR      0x8000#define RS_BRODCAST     0x4000#define RS_BADCRC       0x2000#define RS_ODDFRAME     0x1000#define RS_TOOLONG      0x0800#define RS_TOOSHORT     0x0400#define RS_MULTICAST    0x0001/* Update interrupt status.  */static void smc91c111_update(smc91c111_state *s){    int level;    if (s->tx_fifo_len == 0)        s->int_level |= INT_TX_EMPTY;    if (s->tx_fifo_done_len != 0)        s->int_level |= INT_TX;    level = (s->int_level & s->int_mask) != 0;    pic_set_irq_new(s->pic, s->irq, level);}/* Try to allocate a packet.  Returns 0x80 on failure.  */static int smc91c111_allocate_packet(smc91c111_state *s){    int i;    if (s->allocated == (1 << NUM_PACKETS) - 1) {        return 0x80;    }    for (i = 0; i < NUM_PACKETS; i++) {        if ((s->allocated & (1 << i)) == 0)            break;    }    s->allocated |= 1 << i;    return i;}/* Process a pending TX allocate.  */static void smc91c111_tx_alloc(smc91c111_state *s){    s->tx_alloc = smc91c111_allocate_packet(s);    if (s->tx_alloc == 0x80)        return;    s->int_level |= INT_ALLOC;    smc91c111_update(s);}/* Remove and item from the RX FIFO.  */static void smc91c111_pop_rx_fifo(smc91c111_state *s){    int i;    s->rx_fifo_len--;    if (s->rx_fifo_len) {        for (i = 0; i < s->rx_fifo_len; i++)            s->rx_fifo[i] = s->rx_fifo[i + 1];        s->int_level |= INT_RCV;    } else {        s->int_level &= ~INT_RCV;    }    smc91c111_update(s);}/* Remove an item from the TX completion FIFO.  */static void smc91c111_pop_tx_fifo_done(smc91c111_state *s){    int i;    if (s->tx_fifo_done_len == 0)        return;    s->tx_fifo_done_len--;    for (i = 0; i < s->tx_fifo_done_len; i++)        s->tx_fifo_done[i] = s->tx_fifo_done[i + 1];}/* Release the memory allocated to a packet.  */static void smc91c111_release_packet(smc91c111_state *s, int packet){    s->allocated &= ~(1 << packet);    if (s->tx_alloc == 0x80)        smc91c111_tx_alloc(s);}/* Flush the TX FIFO.  */static void smc91c111_do_tx(smc91c111_state *s){    int i;    int len;    int control;    int add_crc;    int packetnum;    uint8_t *p;    if ((s->tcr & TCR_TXEN) == 0)        return;    if (s->tx_fifo_len == 0)        return;    for (i = 0; i < s->tx_fifo_len; i++) {        packetnum = s->tx_fifo[i];        p = &s->data[packetnum][0];        /* Set status word.  */        *(p++) = 0x01;        *(p++) = 0x40;        len = *(p++);        len |= ((int)*(p++)) << 8;        len -= 6;        control = p[len + 1];        if (control & 0x20)            len++;        /* ??? This overwrites the data following the buffer.           Don't know what real hardware does.  */        if (len < 64 && (s->tcr & TCR_PAD_EN)) {            memset(p + len, 0, 64 - len);            len = 64;        }#if 0        /* The card is supposed to append the CRC to the frame.  However           none of the other network traffic has the CRC appended.           Suspect this is low level ethernet detail we don't need to worry           about.  */        add_crc = (control & 0x10) || (s->tcr & TCR_NOCRC) == 0;        if (add_crc) {            uint32_t crc;            crc = crc32(~0, p, len);            memcpy(p + len, &crc, 4);            len += 4;        }#else        add_crc = 0;#endif        if (s->ctr & CTR_AUTO_RELEASE)            /* Race?  */            smc91c111_release_packet(s, packetnum);        else if (s->tx_fifo_done_len < NUM_PACKETS)            s->tx_fifo_done[s->tx_fifo_done_len++] = packetnum;        qemu_send_packet(s->vc, p, len);    }    s->tx_fifo_len = 0;    smc91c111_update(s);}/* Add a packet to the TX FIFO.  */static void smc91c111_queue_tx(smc91c111_state *s, int packet){    if (s->tx_fifo_len == NUM_PACKETS)        return;    s->tx_fifo[s->tx_fifo_len++] = packet;    smc91c111_do_tx(s);}static void smc91c111_reset(smc91c111_state *s){    s->bank = 0;    s->tx_fifo_len = 0;    s->tx_fifo_done_len = 0;    s->rx_fifo_len = 0;    s->allocated = 0;    s->packet_num = 0;    s->tx_alloc = 0;    s->tcr = 0;    s->rcr = 0;    s->cr = 0xa0b1;    s->ctr = 0x1210;    s->ptr = 0;    s->ercv = 0x1f;    s->int_level = INT_TX_EMPTY;    s->int_mask = 0;    smc91c111_update(s);}#define SET_LOW(name, val) s->name = (s->name & 0xff00) | val#define SET_HIGH(name, val) s->name = (s->name & 0xff) | (val << 8)static void smc91c111_writeb(void *opaque, target_phys_addr_t offset,                             uint32_t value){    smc91c111_state *s = (smc91c111_state *)opaque;    offset -= s->base;    if (offset == 14) {        s->bank = value;        return;    }    if (offset == 15)        return;    switch (s->bank) {    case 0:        switch (offset) {        case 0: /* TCR */            SET_LOW(tcr, value);            return;        case 1:            SET_HIGH(tcr, value);            return;        case 4: /* RCR */            SET_LOW(rcr, value);            return;        case 5:            SET_HIGH(rcr, value);            if (s->rcr & RCR_SOFT_RST)                smc91c111_reset(s);            return;        case 10: case 11: /* RPCR */            /* Ignored */            return;        }        break;    case 1:        switch (offset) {        case 0: /* CONFIG */            SET_LOW(cr, value);            return;        case 1:            SET_HIGH(cr,value);            return;        case 2: case 3: /* BASE */        case 4: case 5: case 6: case 7: case 8: case 9: /* IA */            /* Not implemented.  */            return;        case 10: /* Genral Purpose */            SET_LOW(gpr, value);            return;        case 11:            SET_HIGH(gpr, value);            return;        case 12: /* Control */            if (value & 1)                fprintf(stderr, "smc91c111:EEPROM store not implemented\n");            if (value & 2)                fprintf(stderr, "smc91c111:EEPROM reload not implemented\n");            value &= ~3;            SET_LOW(ctr, value);            return;        case 13:            SET_HIGH(ctr, value);            return;        }        break;    case 2:        switch (offset) {        case 0: /* MMU Command */            switch (value >> 5) {            case 0: /* no-op */                break;            case 1: /* Allocate for TX.  */                s->tx_alloc = 0x80;                s->int_level &= ~INT_ALLOC;                smc91c111_update(s);                smc91c111_tx_alloc(s);                break;            case 2: /* Reset MMU.  */                s->allocated = 0;                s->tx_fifo_len = 0;                s->tx_fifo_done_len = 0;                s->rx_fifo_len = 0;                s->tx_alloc = 0;                break;            case 3: /* Remove from RX FIFO.  */                smc91c111_pop_rx_fifo(s);                break;            case 4: /* Remove from RX FIFO and release.  */                if (s->rx_fifo_len > 0) {                    smc91c111_release_packet(s, s->rx_fifo[0]);                }                smc91c111_pop_rx_fifo(s);                break;            case 5: /* Release.  */                smc91c111_release_packet(s, s->packet_num);                break;            case 6: /* Add to TX FIFO.  */                smc91c111_queue_tx(s, s->packet_num);                break;            case 7: /* Reset TX FIFO.  */                s->tx_fifo_len = 0;                s->tx_fifo_done_len = 0;                break;            }            return;        case 1:            /* Ignore.  */            return;        case 2: /* Packet Number Register */            s->packet_num = value;            return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www成人在线观看| 中文字幕色av一区二区三区| 亚洲成av人片在线| 欧美三级一区二区| 午夜精品一区二区三区免费视频 | 中文字幕免费不卡在线| 国产麻豆精品在线观看| 久久久久久久久久久久电影| 国产高清久久久久| 国产精品对白交换视频| 色婷婷精品大视频在线蜜桃视频| 亚洲制服丝袜在线| 日韩一区二区三区电影 | 欧美日韩国产免费一区二区| 国产精品久线在线观看| 成人sese在线| 亚洲一区在线观看网站| 欧美一二三区在线观看| 国产成人综合亚洲91猫咪| 日韩美女视频一区二区| 538在线一区二区精品国产| 麻豆国产91在线播放| 欧美国产欧美亚州国产日韩mv天天看完整| 波多野结衣中文一区| 亚洲高清一区二区三区| 久久久影视传媒| 色欧美88888久久久久久影院| 天天色综合成人网| 欧美高清在线一区二区| 欧美日韩视频专区在线播放| 国产精品影音先锋| 亚洲激情成人在线| 久久奇米777| 在线观看国产日韩| 国产综合一区二区| 亚洲国产成人高清精品| 久久精品亚洲一区二区三区浴池 | www.亚洲精品| 亚洲午夜精品网| 久久综合久久99| 日本高清不卡视频| 激情另类小说区图片区视频区| ㊣最新国产の精品bt伙计久久| 欧美一区二区播放| 97久久精品人人做人人爽50路| 美女mm1313爽爽久久久蜜臀| 一区二区三区四区在线免费观看 | 奇米色777欧美一区二区| 国产精品美女久久久久久久久| 7777精品伊人久久久大香线蕉的 | 国产精品乱码久久久久久| 91国产视频在线观看| 国产成人av电影在线播放| 午夜精品在线视频一区| 国产精品成人一区二区艾草| 精品美女被调教视频大全网站| 在线中文字幕一区| jlzzjlzz国产精品久久| 国产精品一区三区| 免费观看在线综合| 丝袜亚洲另类欧美| 一区二区三区在线观看国产| 国产精品麻豆欧美日韩ww| 久久综合九色综合97婷婷女人| 欧美裸体一区二区三区| 在线日韩一区二区| 色综合色综合色综合色综合色综合 | 日韩女优电影在线观看| 欧美精品日韩一本| 色婷婷亚洲综合| 日本高清无吗v一区| caoporen国产精品视频| 成人综合在线网站| 国产精品 欧美精品| 国产精品主播直播| 国产麻豆精品在线观看| 国产美女一区二区三区| 国产在线精品一区二区夜色| 国内不卡的二区三区中文字幕 | 欧美电影免费观看高清完整版在| 欧美日本免费一区二区三区| 91.麻豆视频| 51久久夜色精品国产麻豆| 欧美另类高清zo欧美| 777xxx欧美| 欧美一激情一区二区三区| 欧美一卡在线观看| 欧美va亚洲va国产综合| 久久综合色鬼综合色| 久久久夜色精品亚洲| 国产亚洲一本大道中文在线| 国产精品系列在线| 一区二区中文字幕在线| 亚洲一区在线观看免费观看电影高清| 亚洲影视在线播放| 蜜臀久久99精品久久久久宅男| 久久精品国产久精国产| 国产精品一区二区果冻传媒| 成人aa视频在线观看| 色综合天天综合在线视频| 欧美羞羞免费网站| 精品久久久久久亚洲综合网| 日本一区二区三区四区| 亚洲精品国产精品乱码不99| 亚洲bdsm女犯bdsm网站| 国产在线一区二区| 91小视频免费观看| 欧美日韩精品久久久| 精品sm捆绑视频| 综合久久久久久| 首页亚洲欧美制服丝腿| 国产99精品视频| 在线亚洲免费视频| 精品捆绑美女sm三区| 亚洲欧美中日韩| 蜜臀精品一区二区三区在线观看| 国产v日产∨综合v精品视频| 一本久道中文字幕精品亚洲嫩| 91精品国产色综合久久不卡蜜臀 | 国产69精品久久久久777| 欧洲一区在线电影| 久久久久久久久久看片| 一区二区三区电影在线播| 激情文学综合丁香| 精品国产123| 国产呦精品一区二区三区网站| 精品一区二区三区在线播放| av一区二区三区四区| 欧美一区二区三区系列电影| 国产欧美视频在线观看| 五月天一区二区| 波多野结衣欧美| 日韩精品一区二区三区视频播放 | 中文字幕日韩一区二区| 麻豆91精品视频| 91伊人久久大香线蕉| 欧美大胆一级视频| 一级女性全黄久久生活片免费| 国产大陆亚洲精品国产| 欧美一区二区三区在线观看视频| 中文字幕一区日韩精品欧美| 久久99国产精品免费| 欧美喷潮久久久xxxxx| 国产精品久久久久久久久搜平片| 麻豆成人久久精品二区三区红| 一本到高清视频免费精品| 久久久久国产免费免费| 日韩不卡一区二区三区| 日本久久一区二区三区| 国产精品久久久久久久浪潮网站 | 欧美在线不卡一区| 国产精品久久久久天堂| 国产一区二区视频在线| 日韩欧美三级在线| 婷婷综合另类小说色区| 一本色道久久加勒比精品| 国产精品久久久久久久岛一牛影视| 久久99久久精品欧美| 91精品欧美久久久久久动漫 | 日本亚洲最大的色成网站www| 色哟哟国产精品| 樱桃国产成人精品视频| av在线播放成人| 中文字幕亚洲在| 91香蕉国产在线观看软件| 国产精品日产欧美久久久久| 国产激情精品久久久第一区二区 | 91福利小视频| 一区二区三区四区在线播放| 亚洲精品乱码久久久久久| 欧美三级电影在线观看| 成人免费小视频| 成人免费视频播放| 中文成人av在线| hitomi一区二区三区精品| 欧美国产日韩a欧美在线观看| 国产一区二区在线免费观看| 久久综合九色综合97婷婷女人| 久久99精品久久久久| 日韩欧美国产成人一区二区| 九色porny丨国产精品| 久久综合色8888| 成人午夜电影网站| 亚洲人快播电影网| 在线免费观看日本欧美| 亚洲成av人**亚洲成av**| 91精品综合久久久久久| 美女在线视频一区| 国产性做久久久久久| 成人h动漫精品一区二区| 中文字幕亚洲电影| 欧美日韩激情在线| 精品在线一区二区| 国产精品福利av | 欧美一区二区网站| 久久国产夜色精品鲁鲁99| 精品福利av导航| 岛国精品一区二区| 亚洲激情在线激情| 欧美一级夜夜爽|