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

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

?? smc91c111.c

?? xen虛擬機源代碼安裝包
?? 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一区二区三区免费野_久草精品视频
国产传媒日韩欧美成人| 午夜精品久久久久久久久久| 欧洲av在线精品| 色综合天天做天天爱| 国产精品18久久久久久久久久久久 | 91精品国产麻豆国产自产在线| 99精品国产一区二区三区不卡| 韩国成人福利片在线播放| 美女视频免费一区| 免费一级欧美片在线观看| 日韩经典一区二区| 日本午夜精品视频在线观看| 日韩高清一区二区| 六月丁香婷婷色狠狠久久| 美国毛片一区二区三区| 久久99精品久久只有精品| 国产一区二区调教| 成人av免费在线观看| 91亚洲精品久久久蜜桃网站| 91国产福利在线| 在线成人免费观看| 精品国产1区二区| 国产精品五月天| 亚洲欧美区自拍先锋| 午夜电影一区二区| 精品一区二区国语对白| 盗摄精品av一区二区三区| 91丝袜美腿高跟国产极品老师 | 欧美精品自拍偷拍动漫精品| 日韩亚洲欧美一区二区三区| 2017欧美狠狠色| 中文字幕一区二区三区在线不卡| 亚洲人精品午夜| 天天影视色香欲综合网老头| 伦理电影国产精品| 色综合天天性综合| 91精品国产综合久久精品| 国产网红主播福利一区二区| 亚洲精品乱码久久久久久日本蜜臀| 丝袜诱惑制服诱惑色一区在线观看| 狠狠色丁香九九婷婷综合五月| av一区二区三区| 欧美一区二区观看视频| 欧美国产精品v| 日韩—二三区免费观看av| 国产高清精品网站| 欧美欧美欧美欧美首页| 国产偷v国产偷v亚洲高清| 五月天激情综合| www.久久精品| 精品国产伦一区二区三区观看体验| 国产精品对白交换视频| 麻豆国产精品一区二区三区| 色婷婷久久综合| 国产亚洲欧美日韩俺去了| 日韩高清不卡一区| 在线视频国内自拍亚洲视频| 国产欧美一区二区精品婷婷| 视频一区二区三区中文字幕| 91蝌蚪国产九色| 久久久久久久久蜜桃| 人禽交欧美网站| 欧美亚洲动漫另类| 一区二区在线免费观看| 成人sese在线| 国产欧美日韩在线| 国内成人自拍视频| 日韩免费高清视频| 日韩成人伦理电影在线观看| 欧美三级乱人伦电影| 亚洲欧洲一区二区在线播放| 国产成人午夜视频| 久久久久久久久久久电影| 日本欧美一区二区三区| 宅男噜噜噜66一区二区66| 午夜精品一区二区三区三上悠亚| 91毛片在线观看| 亚洲乱码国产乱码精品精98午夜 | 欧美色视频在线| 亚洲精品菠萝久久久久久久| 99国产精品久久| 亚洲欧洲精品一区二区精品久久久| 国产成人一级电影| 国产欧美日韩亚州综合| 成人av先锋影音| 亚洲日本一区二区| 在线视频一区二区三| 亚洲国产视频直播| 日韩欧美色电影| 国产精品一区二区久久精品爱涩| 久久亚洲捆绑美女| 高清不卡在线观看av| 国产精品污网站| 一本一本久久a久久精品综合麻豆| 亚洲美女精品一区| 欧美三级中文字| 蜜臀精品一区二区三区在线观看| 欧美一区二区三区男人的天堂| 久久国产日韩欧美精品| 久久免费视频色| 91视频免费播放| 日韩国产欧美视频| 国产日韩欧美精品在线| 不卡在线视频中文字幕| 亚洲在线中文字幕| 日韩美一区二区三区| 成人精品小蝌蚪| 亚洲.国产.中文慕字在线| 一区二区三区在线免费| 欧美日韩免费观看一区二区三区| 久久精品国产在热久久| 国产亚洲欧美在线| 91成人在线观看喷潮| 国产麻豆视频一区| 亚洲激情图片小说视频| 欧美一区二区三区在线电影| 福利电影一区二区| 三级成人在线视频| 亚洲日本一区二区三区| 欧美一区二区三区在线看| 成人18视频日本| 免费不卡在线视频| 日韩美女久久久| 久久久久久久久岛国免费| 91国产精品成人| 国产91色综合久久免费分享| 日本中文字幕不卡| 亚洲美女偷拍久久| 国产午夜亚洲精品理论片色戒 | 亚洲高清在线精品| 中文字幕第一区综合| 日韩一区国产二区欧美三区| 91小视频在线免费看| 国产成人免费高清| 秋霞午夜鲁丝一区二区老狼| 亚洲精品自拍动漫在线| 久久精品人人做人人爽人人| 日韩一级黄色片| 欧美精品日韩精品| 欧洲一区二区三区免费视频| 成人国产在线观看| 国产99精品国产| 精品一区二区三区在线播放| www.亚洲在线| 国产精品99久久久久| 麻豆成人久久精品二区三区小说| 亚洲图片欧美视频| 国产精品久久久久一区二区三区| 精品盗摄一区二区三区| 精品美女一区二区| 日韩精品一区二区三区老鸭窝| 欧美乱熟臀69xxxxxx| 欧美视频完全免费看| 在线观看一区二区视频| 色婷婷精品久久二区二区蜜臂av| 91丝袜美女网| 日本精品视频一区二区| 91欧美激情一区二区三区成人| 99久久国产免费看| 91色九色蝌蚪| 欧美日韩久久久一区| 欧美日韩国产一级| 制服丝袜亚洲色图| 日韩欧美一二三| 久久综合久久综合久久综合| 久久久精品2019中文字幕之3| 国产亚洲精品bt天堂精选| 国产精品视频免费看| 亚洲黄色录像片| 日韩中文字幕不卡| 韩国女主播成人在线观看| 国产成人综合亚洲91猫咪| 成人免费黄色大片| 在线观看www91| 日韩欧美专区在线| 久久久久久97三级| **欧美大码日韩| 亚洲狠狠爱一区二区三区| 美女脱光内衣内裤视频久久网站 | 成人综合在线观看| 亚洲精品一区二区精华| 中文字幕电影一区| 亚洲国产欧美另类丝袜| 秋霞成人午夜伦在线观看| 国产**成人网毛片九色 | 午夜国产精品影院在线观看| 久久超碰97中文字幕| av电影在线观看一区| 欧美日韩黄色一区二区| 精品av久久707| 亚洲免费视频成人| 精品一区二区在线播放| 99久久久国产精品| 日韩欧美一级特黄在线播放| 国产精品欧美极品| 秋霞午夜av一区二区三区| www.日韩av| 久久老女人爱爱| 亚洲成人av电影在线| 成人h动漫精品一区二区|