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

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

?? smc91c111.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? 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 "hw.h"#include "net.h"#include "devices.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;    qemu_irq 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;    qemu_set_irq(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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费在线看| 欧美高清在线视频| av中文字幕一区| 日本免费新一区视频| 国产人伦精品一区二区| 91精品国产入口在线| 成人激情午夜影院| 老司机精品视频导航| 亚洲自拍另类综合| 一区二区在线观看免费视频播放| 精品国产乱码久久久久久浪潮 | 99天天综合性| 韩国欧美一区二区| 亚洲123区在线观看| 亚洲视频资源在线| 久久这里只有精品首页| 777欧美精品| 欧洲生活片亚洲生活在线观看| 国产成人免费视频一区| 久久99蜜桃精品| 日韩二区三区四区| 亚洲免费在线视频| 成人免费小视频| 国产精品丝袜久久久久久app| 日韩午夜在线影院| 3atv一区二区三区| 欧美日韩精品三区| 欧美三区在线视频| 9i在线看片成人免费| www.久久久久久久久| 国产成人午夜视频| 国产在线一区观看| 老司机免费视频一区二区| 日本美女一区二区| 日韩国产高清在线| 夜夜操天天操亚洲| 亚洲欧美视频一区| 亚洲乱码精品一二三四区日韩在线 | 亚洲成av人影院| 色狠狠色狠狠综合| 亚洲第一成年网| 在线观看免费成人| 福利电影一区二区| 欧美日韩国产精选| 在线观看国产日韩| 在线精品国精品国产尤物884a| av激情亚洲男人天堂| 成人av午夜影院| 成人美女视频在线观看| 国产成人h网站| 国产成人精品1024| 成人黄色片在线观看| 成人精品一区二区三区四区| 成人午夜av电影| 国产成人av电影免费在线观看| 国产福利一区在线| 福利视频网站一区二区三区| 91亚洲永久精品| 欧美午夜一区二区三区 | 91麻豆国产福利精品| 91丨porny丨户外露出| 91一区在线观看| 欧美日韩一区不卡| 欧美大片拔萝卜| 中文字幕av一区二区三区免费看| 欧美经典一区二区| 亚洲精品视频在线| 亚洲sss视频在线视频| 日韩电影免费在线看| 国内外精品视频| 92精品国产成人观看免费| 欧美亚洲愉拍一区二区| 91精品国产综合久久精品app| 欧美一级二级三级蜜桃| 日本一区二区在线不卡| 国产精品久久久久永久免费观看| 一区二区免费看| 精品一区二区影视| 色综合天天综合色综合av| 欧美私模裸体表演在线观看| 亚洲女人的天堂| 日韩在线一二三区| 国产成人一区在线| 欧美三级日韩在线| 日本一区二区久久| 五月天精品一区二区三区| 国产成人一区在线| 欧美日韩国产一级二级| 久久久不卡影院| 亚洲成av人片一区二区梦乃| 国产美女精品在线| 欧美三级欧美一级| 中文字幕av不卡| 日韩1区2区3区| www.成人网.com| 欧美成人video| 一区二区三区精密机械公司| 国产麻豆9l精品三级站| 欧美体内she精高潮| 国产偷国产偷精品高清尤物| 午夜私人影院久久久久| 成人午夜视频福利| 欧美sm极限捆绑bd| 午夜婷婷国产麻豆精品| 色婷婷久久99综合精品jk白丝| 久久久久免费观看| 亚洲成人一区二区在线观看| 不卡一区二区中文字幕| 日韩欧美电影在线| 亚洲国产欧美在线| 91蜜桃网址入口| 国产亚洲欧美日韩在线一区| 秋霞午夜鲁丝一区二区老狼| 欧美日韩一区国产| 亚洲久本草在线中文字幕| 丁香啪啪综合成人亚洲小说| 精品久久久久久亚洲综合网 | 欧美一区二区人人喊爽| 亚洲伦理在线免费看| 99久久精品国产网站| 久久精品一区四区| 精品一区二区国语对白| 欧美一级艳片视频免费观看| 亚洲国产一区二区视频| 色婷婷综合久久久久中文一区二区| 国产欧美一区二区精品仙草咪| 精品一区二区免费| 精品免费视频.| 久久激五月天综合精品| 欧美一区二区三区啪啪| 日本 国产 欧美色综合| 正在播放一区二区| 美脚の诱脚舐め脚责91| 日韩欧美电影一二三| 久久99精品国产91久久来源| 91精品综合久久久久久| 琪琪一区二区三区| 欧美一区二区女人| 国产在线精品一区在线观看麻豆| 精品国产一区久久| 国产一区欧美日韩| 国产性天天综合网| 成人av综合一区| **欧美大码日韩| 在线日韩一区二区| 天堂资源在线中文精品| 91精品国产色综合久久| 久久国产成人午夜av影院| www久久精品| 国产91综合一区在线观看| 国产午夜亚洲精品不卡| 91亚洲精品一区二区乱码| 亚洲高清视频在线| 日韩一区二区在线观看视频播放| 经典三级一区二区| 亚洲国产精品av| 91免费在线播放| 亚洲福利国产精品| 日韩一区二区三区免费看| 国产露脸91国语对白| 亚洲欧美在线aaa| 欧美调教femdomvk| 国模少妇一区二区三区| 中文字幕一区三区| 欧美影片第一页| 美女视频黄 久久| 久久精品一级爱片| 色婷婷综合五月| 麻豆成人综合网| 国产精品麻豆久久久| 欧美无人高清视频在线观看| 久草这里只有精品视频| 中文字幕一区二区在线播放| 欧美日韩大陆在线| 国产成人精品影院| 亚洲电影一区二区三区| 精品国产成人系列| 色综合久久中文综合久久牛| 午夜电影久久久| 欧美激情艳妇裸体舞| 欧美综合一区二区三区| 韩国精品在线观看| 一区二区欧美国产| 久久精品视频一区| 欧美日韩国产片| 成人性色生活片| 日韩精品福利网| 18欧美乱大交hd1984| 日韩欧美国产精品一区| 99热这里都是精品| 国产一区免费电影| 午夜在线成人av| 国产精品免费丝袜| 精品国产网站在线观看| 欧美日韩亚洲综合一区 | 国产精品18久久久久久vr| 亚洲第一av色| 国产精品美女www爽爽爽| 日韩一区二区精品葵司在线| 99视频精品在线|