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

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

?? rtl8139.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
    uint32_t RxMissed;    uint16_t CSCR;    uint8_t  Cfg9346;    uint8_t  Config0;    uint8_t  Config1;    uint8_t  Config3;    uint8_t  Config4;    uint8_t  Config5;    uint8_t  clock_enabled;    uint8_t  bChipCmdState;    uint16_t MultiIntr;    uint16_t BasicModeCtrl;    uint16_t BasicModeStatus;    uint16_t NWayAdvert;    uint16_t NWayLPAR;    uint16_t NWayExpansion;    uint16_t CpCmd;    uint8_t  TxThresh;    PCIDevice *pci_dev;    VLANClientState *vc;    uint8_t macaddr[6];    int rtl8139_mmio_io_addr;    /* C ring mode */    uint32_t   currTxDesc;    /* C+ mode */    uint32_t   currCPlusRxDesc;    uint32_t   currCPlusTxDesc;    uint32_t   RxRingAddrLO;    uint32_t   RxRingAddrHI;    EEprom9346 eeprom;    uint32_t   TCTR;    uint32_t   TimerInt;    int64_t    TCTR_base;    /* Tally counters */    RTL8139TallyCounters tally_counters;    /* Non-persistent data */    uint8_t   *cplus_txbuffer;    int        cplus_txbuffer_len;    int        cplus_txbuffer_offset;    /* PCI interrupt timer */    QEMUTimer *timer;} RTL8139State;static void prom9346_decode_command(EEprom9346 *eeprom, uint8_t command){    DEBUG_PRINT(("RTL8139: eeprom command 0x%02x\n", command));    switch (command & Chip9346_op_mask)    {        case Chip9346_op_read:        {            eeprom->address = command & EEPROM_9346_ADDR_MASK;            eeprom->output = eeprom->contents[eeprom->address];            eeprom->eedo = 0;            eeprom->tick = 0;            eeprom->mode = Chip9346_data_read;            DEBUG_PRINT(("RTL8139: eeprom read from address 0x%02x data=0x%04x\n",                   eeprom->address, eeprom->output));        }        break;        case Chip9346_op_write:        {            eeprom->address = command & EEPROM_9346_ADDR_MASK;            eeprom->input = 0;            eeprom->tick = 0;            eeprom->mode = Chip9346_none; /* Chip9346_data_write */            DEBUG_PRINT(("RTL8139: eeprom begin write to address 0x%02x\n",                   eeprom->address));        }        break;        default:            eeprom->mode = Chip9346_none;            switch (command & Chip9346_op_ext_mask)            {                case Chip9346_op_write_enable:                    DEBUG_PRINT(("RTL8139: eeprom write enabled\n"));                    break;                case Chip9346_op_write_all:                    DEBUG_PRINT(("RTL8139: eeprom begin write all\n"));                    break;                case Chip9346_op_write_disable:                    DEBUG_PRINT(("RTL8139: eeprom write disabled\n"));                    break;            }            break;    }}static void prom9346_shift_clock(EEprom9346 *eeprom){    int bit = eeprom->eedi?1:0;    ++ eeprom->tick;    DEBUG_PRINT(("eeprom: tick %d eedi=%d eedo=%d\n", eeprom->tick, eeprom->eedi, eeprom->eedo));    switch (eeprom->mode)    {        case Chip9346_enter_command_mode:            if (bit)            {                eeprom->mode = Chip9346_read_command;                eeprom->tick = 0;                eeprom->input = 0;                DEBUG_PRINT(("eeprom: +++ synchronized, begin command read\n"));            }            break;        case Chip9346_read_command:            eeprom->input = (eeprom->input << 1) | (bit & 1);            if (eeprom->tick == 8)            {                prom9346_decode_command(eeprom, eeprom->input & 0xff);            }            break;        case Chip9346_data_read:            eeprom->eedo = (eeprom->output & 0x8000)?1:0;            eeprom->output <<= 1;            if (eeprom->tick == 16)            {#if 1        // the FreeBSD drivers (rl and re) don't explicitly toggle        // CS between reads (or does setting Cfg9346 to 0 count too?),        // so we need to enter wait-for-command state here                eeprom->mode = Chip9346_enter_command_mode;                eeprom->input = 0;                eeprom->tick = 0;                DEBUG_PRINT(("eeprom: +++ end of read, awaiting next command\n"));#else        // original behaviour                ++eeprom->address;                eeprom->address &= EEPROM_9346_ADDR_MASK;                eeprom->output = eeprom->contents[eeprom->address];                eeprom->tick = 0;                DEBUG_PRINT(("eeprom: +++ read next address 0x%02x data=0x%04x\n",                       eeprom->address, eeprom->output));#endif            }            break;        case Chip9346_data_write:            eeprom->input = (eeprom->input << 1) | (bit & 1);            if (eeprom->tick == 16)            {                DEBUG_PRINT(("RTL8139: eeprom write to address 0x%02x data=0x%04x\n",                       eeprom->address, eeprom->input));                eeprom->contents[eeprom->address] = eeprom->input;                eeprom->mode = Chip9346_none; /* waiting for next command after CS cycle */                eeprom->tick = 0;                eeprom->input = 0;            }            break;        case Chip9346_data_write_all:            eeprom->input = (eeprom->input << 1) | (bit & 1);            if (eeprom->tick == 16)            {                int i;                for (i = 0; i < EEPROM_9346_SIZE; i++)                {                    eeprom->contents[i] = eeprom->input;                }                DEBUG_PRINT(("RTL8139: eeprom filled with data=0x%04x\n",                       eeprom->input));                eeprom->mode = Chip9346_enter_command_mode;                eeprom->tick = 0;                eeprom->input = 0;            }            break;        default:            break;    }}static int prom9346_get_wire(RTL8139State *s){    EEprom9346 *eeprom = &s->eeprom;    if (!eeprom->eecs)        return 0;    return eeprom->eedo;}/* FIXME: This should be merged into/replaced by eeprom93xx.c.  */static void prom9346_set_wire(RTL8139State *s, int eecs, int eesk, int eedi){    EEprom9346 *eeprom = &s->eeprom;    uint8_t old_eecs = eeprom->eecs;    uint8_t old_eesk = eeprom->eesk;    eeprom->eecs = eecs;    eeprom->eesk = eesk;    eeprom->eedi = eedi;    DEBUG_PRINT(("eeprom: +++ wires CS=%d SK=%d DI=%d DO=%d\n",                 eeprom->eecs, eeprom->eesk, eeprom->eedi, eeprom->eedo));    if (!old_eecs && eecs)    {        /* Synchronize start */        eeprom->tick = 0;        eeprom->input = 0;        eeprom->output = 0;        eeprom->mode = Chip9346_enter_command_mode;        DEBUG_PRINT(("=== eeprom: begin access, enter command mode\n"));    }    if (!eecs)    {        DEBUG_PRINT(("=== eeprom: end access\n"));        return;    }    if (!old_eesk && eesk)    {        /* SK front rules */        prom9346_shift_clock(eeprom);    }}static void rtl8139_update_irq(RTL8139State *s){    int isr;    isr = (s->IntrStatus & s->IntrMask) & 0xffff;    DEBUG_PRINT(("RTL8139: Set IRQ to %d (%04x %04x)\n",       isr ? 1 : 0, s->IntrStatus, s->IntrMask));    qemu_set_irq(s->pci_dev->irq[0], (isr != 0));}#define POLYNOMIAL 0x04c11db6/* From FreeBSD *//* XXX: optimize */static int compute_mcast_idx(const uint8_t *ep){    uint32_t crc;    int carry, i, j;    uint8_t b;    crc = 0xffffffff;    for (i = 0; i < 6; i++) {        b = *ep++;        for (j = 0; j < 8; j++) {            carry = ((crc & 0x80000000L) ? 1 : 0) ^ (b & 0x01);            crc <<= 1;            b >>= 1;            if (carry)                crc = ((crc ^ POLYNOMIAL) | carry);        }    }    return (crc >> 26);}static int rtl8139_RxWrap(RTL8139State *s){    /* wrapping enabled; assume 1.5k more buffer space if size < 65536 */    return (s->RxConfig & (1 << 7));}static int rtl8139_receiver_enabled(RTL8139State *s){    return s->bChipCmdState & CmdRxEnb;}static int rtl8139_transmitter_enabled(RTL8139State *s){    return s->bChipCmdState & CmdTxEnb;}static int rtl8139_cp_receiver_enabled(RTL8139State *s){    return s->CpCmd & CPlusRxEnb;}static int rtl8139_cp_transmitter_enabled(RTL8139State *s){    return s->CpCmd & CPlusTxEnb;}static void rtl8139_write_buffer(RTL8139State *s, const void *buf, int size){    if (s->RxBufAddr + size > s->RxBufferSize)    {        int wrapped = MOD2(s->RxBufAddr + size, s->RxBufferSize);        /* write packet data */        if (wrapped && !(s->RxBufferSize < 65536 && rtl8139_RxWrap(s)))        {            DEBUG_PRINT((">>> RTL8139: rx packet wrapped in buffer at %d\n", size-wrapped));            if (size > wrapped)            {                cpu_physical_memory_write( s->RxBuf + s->RxBufAddr,                                           buf, size-wrapped );            }            /* reset buffer pointer */            s->RxBufAddr = 0;            cpu_physical_memory_write( s->RxBuf + s->RxBufAddr,                                       buf + (size-wrapped), wrapped );            s->RxBufAddr = wrapped;            return;        }    }    /* non-wrapping path or overwrapping enabled */    cpu_physical_memory_write( s->RxBuf + s->RxBufAddr, buf, size );    s->RxBufAddr += size;}#define MIN_BUF_SIZE 60static inline target_phys_addr_t rtl8139_addr64(uint32_t low, uint32_t high){#if TARGET_PHYS_ADDR_BITS > 32    return low | ((target_phys_addr_t)high << 32);#else    return low;#endif}static int rtl8139_can_receive(void *opaque){    RTL8139State *s = opaque;    int avail;    /* Receive (drop) packets if card is disabled.  */    if (!s->clock_enabled)      return 1;    if (!rtl8139_receiver_enabled(s))      return 1;    if (rtl8139_cp_receiver_enabled(s)) {        /* ??? Flow control not implemented in c+ mode.           This is a hack to work around slirp deficiencies anyway.  */        return 1;    } else {        avail = MOD2(s->RxBufferSize + s->RxBufPtr - s->RxBufAddr,                     s->RxBufferSize);        return (avail == 0 || avail >= 1514);    }}static void rtl8139_do_receive(void *opaque, const uint8_t *buf, int size, int do_interrupt){    RTL8139State *s = opaque;    uint32_t packet_header = 0;    uint8_t buf1[60];    static const uint8_t broadcast_macaddr[6] =        { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };    DEBUG_PRINT((">>> RTL8139: received len=%d\n", size));    /* test if board clock is stopped */    if (!s->clock_enabled)    {        DEBUG_PRINT(("RTL8139: stopped ==========================\n"));        return;    }    /* first check if receiver is enabled */    if (!rtl8139_receiver_enabled(s))    {        DEBUG_PRINT(("RTL8139: receiver disabled ================\n"));        return;    }    /* XXX: check this */    if (s->RxConfig & AcceptAllPhys) {        /* promiscuous: receive all */        DEBUG_PRINT((">>> RTL8139: packet received in promiscuous mode\n"));    } else {        if (!memcmp(buf,  broadcast_macaddr, 6)) {            /* broadcast address */            if (!(s->RxConfig & AcceptBroadcast))            {                DEBUG_PRINT((">>> RTL8139: broadcast packet rejected\n"));                /* update tally counter */                ++s->tally_counters.RxERR;                return;            }            packet_header |= RxBroadcast;            DEBUG_PRINT((">>> RTL8139: broadcast packet received\n"));            /* update tally counter */            ++s->tally_counters.RxOkBrd;        } else if (buf[0] & 0x01) {            /* multicast */            if (!(s->RxConfig & AcceptMulticast))            {                DEBUG_PRINT((">>> RTL8139: multicast packet rejected\n"));                /* update tally counter */                ++s->tally_counters.RxERR;                return;            }            int mcast_idx = compute_mcast_idx(buf);            if (!(s->mult[mcast_idx >> 3] & (1 << (mcast_idx & 7))))            {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一级精品在线| 欧美精品乱码久久久久久按摩| 日韩视频在线你懂得| 天天综合色天天综合色h| 欧美剧情片在线观看| 日韩激情在线观看| 2024国产精品| 国产成人精品www牛牛影视| 国产无人区一区二区三区| 成人午夜电影久久影院| 日韩一区日韩二区| 欧美日韩国产综合草草| 看电影不卡的网站| 国产日产亚洲精品系列| 91蝌蚪porny| 日欧美一区二区| 久久精品夜色噜噜亚洲aⅴ| 成人丝袜视频网| 夜夜亚洲天天久久| 日韩欧美123| 93久久精品日日躁夜夜躁欧美| 一二三四社区欧美黄| 欧美mv日韩mv国产网站app| 从欧美一区二区三区| 午夜亚洲国产au精品一区二区| 精品捆绑美女sm三区| 不卡一区在线观看| 日韩国产欧美在线播放| 国产精品欧美一区二区三区| 精品成人免费观看| 国产激情视频一区二区三区欧美| 尤物在线观看一区| 精品国产精品一区二区夜夜嗨| www..com久久爱| 蜜桃一区二区三区在线| 亚洲欧洲av在线| 日韩欧美色电影| 日本黄色一区二区| 国产高清不卡一区二区| 亚洲图片欧美色图| 韩国v欧美v日本v亚洲v| 中文字幕一区av| 国产综合一区二区| 亚洲国产精品影院| 国产精品欧美一区喷水| 欧美日本在线播放| 高清免费成人av| 蜜臀av在线播放一区二区三区| 国产精品护士白丝一区av| 日韩欧美在线综合网| 99热精品国产| 国产福利一区二区三区视频在线 | 毛片av中文字幕一区二区| 欧美国产日韩精品免费观看| 欧美欧美午夜aⅴ在线观看| 95精品视频在线| 高清久久久久久| 国产一区二区三区四区五区入口| 亚洲超碰精品一区二区| 一区二区三区免费网站| 国产精品久久久久久久久动漫 | 国产欧美日产一区| 日韩一本二本av| 欧美精品v国产精品v日韩精品| 91久久精品一区二区三区| 成人国产精品免费| 欧美日韩一区二区在线观看 | 日本精品裸体写真集在线观看 | 中文字幕av资源一区| 精品国精品自拍自在线| 日韩免费视频一区二区| 这里只有精品视频在线观看| 欧美色国产精品| 欧美视频中文字幕| 欧美日韩成人综合| 欧美日韩大陆在线| 欧美色涩在线第一页| 欧美色图一区二区三区| 欧美三级电影在线看| 欧美亚洲一区二区在线| 欧美少妇bbb| 欧美亚洲另类激情小说| 欧美另类z0zxhd电影| 欧美日精品一区视频| 欧美日韩精品电影| 欧美妇女性影城| 日韩欧美精品在线视频| 欧美va日韩va| 久久综合九色综合97婷婷| 欧美电视剧在线观看完整版| 欧美电影免费提供在线观看| 久久青草国产手机看片福利盒子| 久久综合久久综合久久| 亚洲国产精品99久久久久久久久| 国产精品视频在线看| 亚洲精品ww久久久久久p站| 亚洲国产欧美日韩另类综合| 热久久免费视频| 国产精品66部| 色琪琪一区二区三区亚洲区| 欧美日韩精品欧美日韩精品一| 日韩精品一区二区三区四区| 国产欧美精品日韩区二区麻豆天美| 奇米色777欧美一区二区| 国产一区美女在线| 99久久精品免费看国产| 在线观看不卡视频| 欧美大白屁股肥臀xxxxxx| 国产精品色呦呦| 亚洲国产精品综合小说图片区| 久久99精品国产麻豆婷婷| 成人精品免费看| 欧美日韩美少妇| 久久久久国产精品免费免费搜索| 18成人在线视频| 日日夜夜精品视频天天综合网| 国产精品一区不卡| 色94色欧美sute亚洲线路一ni | 久久蜜臀中文字幕| 日韩码欧中文字| 久久99久久久欧美国产| 91丨九色丨尤物| 日韩视频一区二区三区在线播放| 国产精品免费久久| 免费在线观看不卡| 91啪九色porn原创视频在线观看| 日韩亚洲欧美一区二区三区| 亚洲欧美综合色| 精品一区二区三区在线观看国产| 99久久99久久久精品齐齐| 日韩亚洲电影在线| 亚洲欧美日韩精品久久久久| 紧缚奴在线一区二区三区| 91福利视频久久久久| 久久精品人人做人人综合| 日本不卡不码高清免费观看| 日本黄色一区二区| 国产亚洲va综合人人澡精品| 日韩高清不卡在线| 91污片在线观看| 欧美国产乱子伦| 韩国av一区二区三区在线观看 | 精品久久久影院| 亚洲123区在线观看| 欧美一卡在线观看| 亚洲综合视频网| 91首页免费视频| 国产蜜臀97一区二区三区| 麻豆精品新av中文字幕| 一本久久a久久精品亚洲| 国产精品久久久久婷婷二区次| 国内精品免费**视频| 欧美一区二区在线观看| 亚洲一二三区在线观看| 日本道免费精品一区二区三区| 国产欧美精品一区aⅴ影院| 韩国欧美国产一区| 欧美精品一区二| 经典一区二区三区| 久久久久97国产精华液好用吗| 捆绑紧缚一区二区三区视频| 制服丝袜中文字幕亚洲| 五月天视频一区| 欧美高清www午色夜在线视频| 亚洲成人动漫精品| 欧美精品国产精品| 日本一不卡视频| 欧美一区二区视频免费观看| 免费在线看成人av| 日韩视频一区在线观看| 久久99精品国产.久久久久久| 欧美一级欧美三级| 久久精品国产亚洲高清剧情介绍 | 色av一区二区| 亚洲综合在线视频| 欧美视频在线一区| 日韩精品91亚洲二区在线观看| 欧美一区二区视频免费观看| 日韩成人av影视| 欧美电影免费观看高清完整版在线 | 欧美挠脚心视频网站| 亚洲综合在线视频| 日韩一区二区在线看| 美女任你摸久久| 久久嫩草精品久久久精品一| 国产成人欧美日韩在线电影| 国产蜜臀av在线一区二区三区| av电影天堂一区二区在线| 亚洲美女电影在线| 欧美日本高清视频在线观看| 日本视频在线一区| 久久久精品免费观看| www.日韩av| 亚洲国产成人91porn| 欧美本精品男人aⅴ天堂| 国产不卡在线视频| 一区二区三区欧美| 337p粉嫩大胆色噜噜噜噜亚洲| 成人免费高清在线观看| 五月天欧美精品|