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

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

?? stellaris_enet.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
字號:
/* * Luminary Micro Stellaris Ethernet Controller * * Copyright (c) 2007 CodeSourcery. * Written by Paul Brook * * This code is licenced under the GPL. */#include "hw.h"#include "arm-misc.h"#include "net.h"#include <zlib.h>//#define DEBUG_STELLARIS_ENET 1#ifdef DEBUG_STELLARIS_ENET#define DPRINTF(fmt, args...) \do { printf("stellaris_enet: " fmt , ##args); } while (0)#define BADF(fmt, args...) \do { fprintf(stderr, "stellaris_enet: error: " fmt , ##args); exit(1);} while (0)#else#define DPRINTF(fmt, args...) do {} while(0)#define BADF(fmt, args...) \do { fprintf(stderr, "stellaris_enet: error: " fmt , ##args);} while (0)#endif#define SE_INT_RX       0x01#define SE_INT_TXER     0x02#define SE_INT_TXEMP    0x04#define SE_INT_FOV      0x08#define SE_INT_RXER     0x10#define SE_INT_MD       0x20#define SE_INT_PHY      0x40#define SE_RCTL_RXEN    0x01#define SE_RCTL_AMUL    0x02#define SE_RCTL_PRMS    0x04#define SE_RCTL_BADCRC  0x08#define SE_RCTL_RSTFIFO 0x10#define SE_TCTL_TXEN    0x01#define SE_TCTL_PADEN   0x02#define SE_TCTL_CRC     0x04#define SE_TCTL_DUPLEX  0x08typedef struct {    uint32_t base;    uint32_t ris;    uint32_t im;    uint32_t rctl;    uint32_t tctl;    uint32_t thr;    uint32_t mctl;    uint32_t mdv;    uint32_t mtxd;    uint32_t mrxd;    uint32_t np;    int tx_frame_len;    int tx_fifo_len;    uint8_t tx_fifo[2048];    /* Real hardware has a 2k fifo, which works out to be at most 31 packets.       We implement a full 31 packet fifo.  */    struct {        uint8_t data[2048];        int len;    } rx[31];    uint8_t *rx_fifo;    int rx_fifo_len;    int next_packet;    VLANClientState *vc;    qemu_irq irq;    uint8_t macaddr[6];} stellaris_enet_state;static void stellaris_enet_update(stellaris_enet_state *s){    qemu_set_irq(s->irq, (s->ris & s->im) != 0);}/* TODO: Implement MAC address filtering.  */static void stellaris_enet_receive(void *opaque, const uint8_t *buf, int size){    stellaris_enet_state *s = (stellaris_enet_state *)opaque;    int n;    uint8_t *p;    uint32_t crc;    if ((s->rctl & SE_RCTL_RXEN) == 0)        return;    if (s->np >= 31) {        DPRINTF("Packet dropped\n");        return;    }    DPRINTF("Received packet len=%d\n", size);    n = s->next_packet + s->np;    if (n >= 31)        n -= 31;    s->np++;    s->rx[n].len = size + 6;    p = s->rx[n].data;    *(p++) = (size + 6);    *(p++) = (size + 6) >> 8;    memcpy (p, buf, size);    p += size;    crc = crc32(~0, buf, size);    *(p++) = crc;    *(p++) = crc >> 8;    *(p++) = crc >> 16;    *(p++) = crc >> 24;    /* Clear the remaining bytes in the last word.  */    if ((size & 3) != 2) {        memset(p, 0, (6 - size) & 3);    }    s->ris |= SE_INT_RX;    stellaris_enet_update(s);}static int stellaris_enet_can_receive(void *opaque){    stellaris_enet_state *s = (stellaris_enet_state *)opaque;    if ((s->rctl & SE_RCTL_RXEN) == 0)        return 1;    return (s->np < 31);}static uint32_t stellaris_enet_read(void *opaque, target_phys_addr_t offset){    stellaris_enet_state *s = (stellaris_enet_state *)opaque;    uint32_t val;    offset -= s->base;    switch (offset) {    case 0x00: /* RIS */        DPRINTF("IRQ status %02x\n", s->ris);        return s->ris;    case 0x04: /* IM */        return s->im;    case 0x08: /* RCTL */        return s->rctl;    case 0x0c: /* TCTL */        return s->tctl;    case 0x10: /* DATA */        if (s->rx_fifo_len == 0) {            if (s->np == 0) {                BADF("RX underflow\n");                return 0;            }            s->rx_fifo_len = s->rx[s->next_packet].len;            s->rx_fifo = s->rx[s->next_packet].data;            DPRINTF("RX FIFO start packet len=%d\n", s->rx_fifo_len);        }        val = s->rx_fifo[0] | (s->rx_fifo[1] << 8) | (s->rx_fifo[2] << 16)              | (s->rx_fifo[3] << 24);        s->rx_fifo += 4;        s->rx_fifo_len -= 4;        if (s->rx_fifo_len <= 0) {            s->rx_fifo_len = 0;            s->next_packet++;            if (s->next_packet >= 31)                s->next_packet = 0;            s->np--;            DPRINTF("RX done np=%d\n", s->np);        }        return val;    case 0x14: /* IA0 */        return s->macaddr[0] | (s->macaddr[1] << 8)               | (s->macaddr[2] << 16) | (s->macaddr[3] << 24);    case 0x18: /* IA1 */        return s->macaddr[4] | (s->macaddr[5] << 8);    case 0x1c: /* THR */        return s->thr;    case 0x20: /* MCTL */        return s->mctl;    case 0x24: /* MDV */        return s->mdv;    case 0x28: /* MADD */        return 0;    case 0x2c: /* MTXD */        return s->mtxd;    case 0x30: /* MRXD */        return s->mrxd;    case 0x34: /* NP */        return s->np;    case 0x38: /* TR */        return 0;    case 0x3c: /* Undocuented: Timestamp? */        return 0;    default:        cpu_abort (cpu_single_env, "stellaris_enet_read: Bad offset %x\n",                   (int)offset);        return 0;    }}static void stellaris_enet_write(void *opaque, target_phys_addr_t offset,                        uint32_t value){    stellaris_enet_state *s = (stellaris_enet_state *)opaque;    offset -= s->base;    switch (offset) {    case 0x00: /* IACK */        s->ris &= ~value;        DPRINTF("IRQ ack %02x/%02x\n", value, s->ris);        stellaris_enet_update(s);        /* Clearing TXER also resets the TX fifo.  */        if (value & SE_INT_TXER)            s->tx_frame_len = -1;        break;    case 0x04: /* IM */        DPRINTF("IRQ mask %02x/%02x\n", value, s->ris);        s->im = value;        stellaris_enet_update(s);        break;    case 0x08: /* RCTL */        s->rctl = value;        if (value & SE_RCTL_RSTFIFO) {            s->rx_fifo_len = 0;            s->np = 0;            stellaris_enet_update(s);        }        break;    case 0x0c: /* TCTL */        s->tctl = value;        break;    case 0x10: /* DATA */        if (s->tx_frame_len == -1) {            s->tx_frame_len = value & 0xffff;            if (s->tx_frame_len > 2032) {                DPRINTF("TX frame too long (%d)\n", s->tx_frame_len);                s->tx_frame_len = 0;                s->ris |= SE_INT_TXER;                stellaris_enet_update(s);            } else {                DPRINTF("Start TX frame len=%d\n", s->tx_frame_len);                /* The value written does not include the ethernet header.  */                s->tx_frame_len += 14;                if ((s->tctl & SE_TCTL_CRC) == 0)                    s->tx_frame_len += 4;                s->tx_fifo_len = 0;                s->tx_fifo[s->tx_fifo_len++] = value >> 16;                s->tx_fifo[s->tx_fifo_len++] = value >> 24;            }        } else {            s->tx_fifo[s->tx_fifo_len++] = value;            s->tx_fifo[s->tx_fifo_len++] = value >> 8;            s->tx_fifo[s->tx_fifo_len++] = value >> 16;            s->tx_fifo[s->tx_fifo_len++] = value >> 24;            if (s->tx_fifo_len >= s->tx_frame_len) {                /* We don't implement explicit CRC, so just chop it off.  */                if ((s->tctl & SE_TCTL_CRC) == 0)                    s->tx_frame_len -= 4;                if ((s->tctl & SE_TCTL_PADEN) && s->tx_frame_len < 60) {                    memset(&s->tx_fifo[s->tx_frame_len], 0, 60 - s->tx_frame_len);                    s->tx_fifo_len = 60;                }                qemu_send_packet(s->vc, s->tx_fifo, s->tx_frame_len);                s->tx_frame_len = -1;                s->ris |= SE_INT_TXEMP;                stellaris_enet_update(s);                DPRINTF("Done TX\n");            }        }        break;    case 0x14: /* IA0 */        s->macaddr[0] = value;        s->macaddr[1] = value >> 8;        s->macaddr[2] = value >> 16;        s->macaddr[3] = value >> 24;        break;    case 0x18: /* IA1 */        s->macaddr[4] = value;        s->macaddr[5] = value >> 8;        break;    case 0x1c: /* THR */        s->thr = value;        break;    case 0x20: /* MCTL */        s->mctl = value;        break;    case 0x24: /* MDV */        s->mdv = value;        break;    case 0x28: /* MADD */        /* ignored.  */        break;    case 0x2c: /* MTXD */        s->mtxd = value & 0xff;        break;    case 0x30: /* MRXD */    case 0x34: /* NP */    case 0x38: /* TR */        /* Ignored.  */    case 0x3c: /* Undocuented: Timestamp? */        /* Ignored.  */        break;    default:        cpu_abort (cpu_single_env, "stellaris_enet_write: Bad offset %x\n",                   (int)offset);    }}static CPUReadMemoryFunc *stellaris_enet_readfn[] = {   stellaris_enet_read,   stellaris_enet_read,   stellaris_enet_read};static CPUWriteMemoryFunc *stellaris_enet_writefn[] = {   stellaris_enet_write,   stellaris_enet_write,   stellaris_enet_write};static void stellaris_enet_reset(stellaris_enet_state *s){    s->mdv = 0x80;    s->rctl = SE_RCTL_BADCRC;    s->im = SE_INT_PHY | SE_INT_MD | SE_INT_RXER | SE_INT_FOV | SE_INT_TXEMP            | SE_INT_TXER | SE_INT_RX;    s->thr = 0x3f;    s->tx_frame_len = -1;}void stellaris_enet_init(NICInfo *nd, uint32_t base, qemu_irq irq){    stellaris_enet_state *s;    int iomemtype;    s = (stellaris_enet_state *)qemu_mallocz(sizeof(stellaris_enet_state));    iomemtype = cpu_register_io_memory(0, stellaris_enet_readfn,                                       stellaris_enet_writefn, s);    cpu_register_physical_memory(base, 0x00001000, iomemtype);    s->base = base;    s->irq = irq;    memcpy(s->macaddr, nd->macaddr, 6);    if (nd->vlan)        s->vc = qemu_new_vlan_client(nd->vlan, stellaris_enet_receive,                                     stellaris_enet_can_receive, s);    stellaris_enet_reset(s);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
宅男噜噜噜66一区二区66| 精品在线播放免费| 欧美精品在线视频| 国产一区二区三区观看| 亚洲一区二区三区激情| 国产欧美视频一区二区| 欧美四级电影网| 97久久精品人人澡人人爽| 国产一区二区三区四| 九九九精品视频| 激情综合色播五月| 国产在线麻豆精品观看| 麻豆精品新av中文字幕| 人人狠狠综合久久亚洲| 天天色综合成人网| 日本亚洲欧美天堂免费| 午夜欧美电影在线观看| 日本中文字幕一区二区视频| 日韩精品高清不卡| 视频一区二区国产| 美国毛片一区二区三区| 久色婷婷小香蕉久久| 激情综合网最新| 99热国产精品| 欧美高清视频一二三区| 国产在线精品一区二区| 五月激情综合色| 极品尤物av久久免费看| 久久99日本精品| 成人97人人超碰人人99| 国产成人免费av在线| 99久久综合99久久综合网站| 国产iv一区二区三区| 欧美最新大片在线看| 日韩一区二区三区在线| 欧美国产激情一区二区三区蜜月| 中文字幕在线不卡| 青青草国产精品亚洲专区无| 国产一区二区三区香蕉| 91美女片黄在线观看91美女| 制服丝袜亚洲色图| 亚洲另类在线视频| 丰满白嫩尤物一区二区| 91精品啪在线观看国产60岁| 国产精品成人一区二区艾草| 蜜臀av一区二区在线免费观看 | 国产精品沙发午睡系列990531| 亚洲成人在线网站| 懂色av一区二区三区免费观看| 色香蕉久久蜜桃| 欧美国产日韩在线观看| 精品一区二区久久久| 欧美三级中文字幕在线观看| 国产欧美视频一区二区| 免费观看一级欧美片| 日本二三区不卡| 午夜视频久久久久久| 北条麻妃一区二区三区| 日韩精品中文字幕一区二区三区| 亚洲午夜久久久| 国产精品资源网站| 欧美大片在线观看一区| 日本视频在线一区| 日韩视频一区在线观看| 五月激情综合网| 精品日韩欧美一区二区| 久久国产麻豆精品| 欧美电视剧免费观看| 国产成人在线影院| 国产精品高潮呻吟| av在线播放一区二区三区| 国产精品综合二区| 国产天堂亚洲国产碰碰| 国产69精品一区二区亚洲孕妇| 国产精品久久久久久久久果冻传媒| 六月丁香婷婷久久| 精品国产伦一区二区三区观看方式| 黄色精品一二区| 国产精品日日摸夜夜摸av| 一本大道久久a久久精品综合 | 亚洲精品日韩专区silk| 欧美伊人精品成人久久综合97| 亚洲第一福利一区| 亚洲精品一区二区三区香蕉| 成人精品高清在线| 亚洲日本va午夜在线影院| 亚洲精品五月天| 色8久久人人97超碰香蕉987| 麻豆久久久久久久| 久久九九99视频| 91国在线观看| 久久综合综合久久综合| 亚洲精品日韩综合观看成人91| 精品美女在线观看| 欧美三区在线观看| 成人妖精视频yjsp地址| 日本欧美韩国一区三区| 国产美女久久久久| 青娱乐精品在线视频| 日韩美女啊v在线免费观看| 日韩你懂的电影在线观看| 91网站最新网址| 成人一级黄色片| 国产成人午夜视频| 精品午夜一区二区三区在线观看| 一区二区三区在线视频播放| 欧美激情在线看| 久久嫩草精品久久久精品一| 欧美日韩精品一区二区三区四区| 成人国产一区二区三区精品| 韩国精品主播一区二区在线观看 | 亚洲国产aⅴ成人精品无吗| 欧美岛国在线观看| 精品区一区二区| 欧美日本一区二区三区| 欧美日韩亚洲综合在线| 91一区二区三区在线播放| 国产盗摄视频一区二区三区| 国产成人久久精品77777最新版本| 日韩中文字幕亚洲一区二区va在线| 亚洲欧美另类久久久精品| 一级日本不卡的影视| 亚洲精品国产无天堂网2021| 最新不卡av在线| 亚洲成人资源在线| 看片网站欧美日韩| 国产ts人妖一区二区| 成人免费毛片app| 91成人看片片| 日韩欧美一区二区在线视频| 精品福利一二区| 国产精品美女久久福利网站| 国产亚洲综合色| 一区二区三区在线视频免费| 亚洲欧美区自拍先锋| 中文字幕亚洲电影| 亚洲国产中文字幕| 蜜臀精品一区二区三区在线观看| 狠狠色狠狠色综合| 色偷偷久久一区二区三区| 91精品在线免费观看| 国产精品视频观看| 免费在线成人网| eeuss鲁片一区二区三区| 亚洲人一二三区| 国产精品白丝jk白祙喷水网站| 日本黄色一区二区| 久久色成人在线| 日韩成人一区二区三区在线观看| 国产呦精品一区二区三区网站| 91欧美一区二区| 久久久欧美精品sm网站| 色哟哟日韩精品| wwwwxxxxx欧美| 天堂蜜桃一区二区三区| 99精品一区二区| 国产清纯白嫩初高生在线观看91| 亚洲国产va精品久久久不卡综合| 国内成人精品2018免费看| 欧美三级电影精品| 国产精品久久久久久久裸模| 黄一区二区三区| 日韩欧美国产三级| 水野朝阳av一区二区三区| 91高清视频在线| 亚洲精品国产a| 一本色道久久综合亚洲aⅴ蜜桃| 日本一区免费视频| 丁香婷婷综合网| 国产欧美视频一区二区三区| 韩国精品在线观看| 欧美一区二区女人| 免费在线视频一区| 91精品麻豆日日躁夜夜躁| 日韩激情av在线| 91麻豆精品91久久久久久清纯| 亚洲一二三四区不卡| 在线播放日韩导航| 麻豆精品在线观看| 国产片一区二区三区| kk眼镜猥琐国模调教系列一区二区| 欧美激情一区不卡| 99久久精品免费精品国产| 尤物视频一区二区| 欧美日韩精品福利| 精品一区二区久久| 国产精品二区一区二区aⅴ污介绍| 91丨国产丨九色丨pron| 婷婷久久综合九色国产成人| 日韩欧美一级片| 91亚洲资源网| 久久99精品国产麻豆婷婷洗澡| 中文字幕免费不卡在线| 欧美中文字幕一区二区三区亚洲| 日韩av不卡在线观看| 国产欧美一区二区精品仙草咪| 精品久久久久久久久久久久包黑料| 激情综合亚洲精品| 亚洲精品高清在线观看| 久久综合中文字幕|