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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pcnet.c

?? xen虛擬機(jī)源代碼安裝包
?? C
?? 第 1 頁 / 共 5 頁
字號(hào):
    uint32_t rdra, tdra;#ifdef PCNET_DEBUG    printf("pcnet_init init_addr=0x%08x\n", PHYSADDR(s,CSR_IADR(s)));#endif    if (BCR_SSIZE32(s)) {        struct pcnet_initblk32 initblk;        s->phys_mem_read(s->dma_opaque, PHYSADDR(s,CSR_IADR(s)),                (uint8_t *)&initblk, sizeof(initblk), 0);        mode = le16_to_cpu(initblk.mode);        rlen = initblk.rlen >> 4;        tlen = initblk.tlen >> 4;	ladrf[0] = le16_to_cpu(initblk.ladrf[0]);	ladrf[1] = le16_to_cpu(initblk.ladrf[1]);	ladrf[2] = le16_to_cpu(initblk.ladrf[2]);	ladrf[3] = le16_to_cpu(initblk.ladrf[3]);	padr[0] = le16_to_cpu(initblk.padr[0]);	padr[1] = le16_to_cpu(initblk.padr[1]);	padr[2] = le16_to_cpu(initblk.padr[2]);        rdra = le32_to_cpu(initblk.rdra);        tdra = le32_to_cpu(initblk.tdra);    } else {        struct pcnet_initblk16 initblk;        s->phys_mem_read(s->dma_opaque, PHYSADDR(s,CSR_IADR(s)),                (uint8_t *)&initblk, sizeof(initblk), 0);        mode = le16_to_cpu(initblk.mode);	ladrf[0] = le16_to_cpu(initblk.ladrf[0]);	ladrf[1] = le16_to_cpu(initblk.ladrf[1]);	ladrf[2] = le16_to_cpu(initblk.ladrf[2]);	ladrf[3] = le16_to_cpu(initblk.ladrf[3]);	padr[0] = le16_to_cpu(initblk.padr[0]);	padr[1] = le16_to_cpu(initblk.padr[1]);	padr[2] = le16_to_cpu(initblk.padr[2]);        rdra = le32_to_cpu(initblk.rdra);        tdra = le32_to_cpu(initblk.tdra);        rlen = rdra >> 29;        tlen = tdra >> 29;        rdra &= 0x00ffffff;        tdra &= 0x00ffffff;    }#if defined(PCNET_DEBUG)    printf("rlen=%d tlen=%d\n", rlen, tlen);#endif    CSR_RCVRL(s) = (rlen < 9) ? (1 << rlen) : 512;    CSR_XMTRL(s) = (tlen < 9) ? (1 << tlen) : 512;    s->csr[ 6] = (tlen << 12) | (rlen << 8);    s->csr[15] = mode;    s->csr[ 8] = ladrf[0];    s->csr[ 9] = ladrf[1];    s->csr[10] = ladrf[2];    s->csr[11] = ladrf[3];    s->csr[12] = padr[0];    s->csr[13] = padr[1];    s->csr[14] = padr[2];    s->rdra = PHYSADDR(s, rdra);    s->tdra = PHYSADDR(s, tdra);    CSR_RCVRC(s) = CSR_RCVRL(s);    CSR_XMTRC(s) = CSR_XMTRL(s);#ifdef PCNET_DEBUG    printf("pcnet ss32=%d rdra=0x%08x[%d] tdra=0x%08x[%d]\n",        BCR_SSIZE32(s),        s->rdra, CSR_RCVRL(s), s->tdra, CSR_XMTRL(s));#endif    s->csr[0] |= 0x0101;    s->csr[0] &= ~0x0004;       /* clear STOP bit */}static void pcnet_start(PCNetState *s){#ifdef PCNET_DEBUG    printf("pcnet_start\n");#endif    if (!CSR_DTX(s))        s->csr[0] |= 0x0010;    /* set TXON */    if (!CSR_DRX(s))        s->csr[0] |= 0x0020;    /* set RXON */    s->csr[0] &= ~0x0004;       /* clear STOP bit */    s->csr[0] |= 0x0002;}static void pcnet_stop(PCNetState *s){#ifdef PCNET_DEBUG    printf("pcnet_stop\n");#endif    s->csr[0] &= ~0x7feb;    s->csr[0] |= 0x0014;    s->csr[4] &= ~0x02c2;    s->csr[5] &= ~0x0011;    pcnet_poll_timer(s);}static void pcnet_rdte_poll(PCNetState *s){    s->csr[28] = s->csr[29] = 0;    if (s->rdra) {        int bad = 0;#if 1        target_phys_addr_t crda = pcnet_rdra_addr(s, CSR_RCVRC(s));        target_phys_addr_t nrda = pcnet_rdra_addr(s, -1 + CSR_RCVRC(s));        target_phys_addr_t nnrd = pcnet_rdra_addr(s, -2 + CSR_RCVRC(s));#else        target_phys_addr_t crda = s->rdra +            (CSR_RCVRL(s) - CSR_RCVRC(s)) *            (BCR_SWSTYLE(s) ? 16 : 8 );        int nrdc = CSR_RCVRC(s)<=1 ? CSR_RCVRL(s) : CSR_RCVRC(s)-1;        target_phys_addr_t nrda = s->rdra +            (CSR_RCVRL(s) - nrdc) *            (BCR_SWSTYLE(s) ? 16 : 8 );        int nnrc = nrdc<=1 ? CSR_RCVRL(s) : nrdc-1;        target_phys_addr_t nnrd = s->rdra +            (CSR_RCVRL(s) - nnrc) *            (BCR_SWSTYLE(s) ? 16 : 8 );#endif        CHECK_RMD(PHYSADDR(s,crda), bad);        if (!bad) {            CHECK_RMD(PHYSADDR(s,nrda), bad);            if (bad || (nrda == crda)) nrda = 0;            CHECK_RMD(PHYSADDR(s,nnrd), bad);            if (bad || (nnrd == crda)) nnrd = 0;            s->csr[28] = crda & 0xffff;            s->csr[29] = crda >> 16;            s->csr[26] = nrda & 0xffff;            s->csr[27] = nrda >> 16;            s->csr[36] = nnrd & 0xffff;            s->csr[37] = nnrd >> 16;#ifdef PCNET_DEBUG            if (bad) {                printf("pcnet: BAD RMD RECORDS AFTER 0x%08x\n",                       PHYSADDR(s,crda));            }        } else {            printf("pcnet: BAD RMD RDA=0x%08x\n", PHYSADDR(s,crda));#endif        }    }    if (CSR_CRDA(s)) {        struct pcnet_RMD rmd;        RMDLOAD(&rmd, PHYSADDR(s,CSR_CRDA(s)));        CSR_CRBC(s) = GET_FIELD(rmd.buf_length, RMDL, BCNT);        CSR_CRST(s) = rmd.status;#ifdef PCNET_DEBUG_RMD_X        printf("CRDA=0x%08x CRST=0x%04x RCVRC=%d RMDL=0x%04x RMDS=0x%04x RMDM=0x%08x\n",                PHYSADDR(s,CSR_CRDA(s)), CSR_CRST(s), CSR_RCVRC(s),                rmd.buf_length, rmd.status, rmd.msg_length);        PRINT_RMD(&rmd);#endif    } else {        CSR_CRBC(s) = CSR_CRST(s) = 0;    }    if (CSR_NRDA(s)) {        struct pcnet_RMD rmd;        RMDLOAD(&rmd, PHYSADDR(s,CSR_NRDA(s)));        CSR_NRBC(s) = GET_FIELD(rmd.buf_length, RMDL, BCNT);        CSR_NRST(s) = rmd.status;    } else {        CSR_NRBC(s) = CSR_NRST(s) = 0;    }}static int pcnet_tdte_poll(PCNetState *s){    s->csr[34] = s->csr[35] = 0;    if (s->tdra) {        target_phys_addr_t cxda = s->tdra +            (CSR_XMTRL(s) - CSR_XMTRC(s)) *            (BCR_SWSTYLE(s) ? 16 : 8);        int bad = 0;        CHECK_TMD(PHYSADDR(s, cxda),bad);        if (!bad) {            if (CSR_CXDA(s) != cxda) {                s->csr[60] = s->csr[34];                s->csr[61] = s->csr[35];                s->csr[62] = CSR_CXBC(s);                s->csr[63] = CSR_CXST(s);            }            s->csr[34] = cxda & 0xffff;            s->csr[35] = cxda >> 16;#ifdef PCNET_DEBUG_X            printf("pcnet: BAD TMD XDA=0x%08x\n", PHYSADDR(s,cxda));#endif        }    }    if (CSR_CXDA(s)) {        struct pcnet_TMD tmd;        TMDLOAD(&tmd, PHYSADDR(s,CSR_CXDA(s)));        CSR_CXBC(s) = GET_FIELD(tmd.length, TMDL, BCNT);        CSR_CXST(s) = tmd.status;    } else {        CSR_CXBC(s) = CSR_CXST(s) = 0;    }    return !!(CSR_CXST(s) & 0x8000);}static int pcnet_can_receive(void *opaque){    PCNetState *s = opaque;    if (CSR_STOP(s) || CSR_SPND(s))        return 0;    if (s->recv_pos > 0)        return 0;    return sizeof(s->buffer)-16;}#define MIN_BUF_SIZE 60static void pcnet_receive(void *opaque, const uint8_t *buf, int size){    PCNetState *s = opaque;    int is_padr = 0, is_bcast = 0, is_ladr = 0;    uint8_t buf1[60];    if (CSR_DRX(s) || CSR_STOP(s) || CSR_SPND(s) || !size)        return;#ifdef PCNET_DEBUG    printf("pcnet_receive size=%d\n", size);#endif    /* if too small buffer, then expand it */    if (size < MIN_BUF_SIZE) {        memcpy(buf1, buf, size);        memset(buf1 + size, 0, MIN_BUF_SIZE - size);        buf = buf1;        size = MIN_BUF_SIZE;    }    if (CSR_PROM(s)        || (is_padr=padr_match(s, buf, size))        || (is_bcast=padr_bcast(s, buf, size))        || (is_ladr=ladr_match(s, buf, size))) {        pcnet_rdte_poll(s);        if (!(CSR_CRST(s) & 0x8000) && s->rdra) {            struct pcnet_RMD rmd;            int rcvrc = CSR_RCVRC(s)-1,i;            target_phys_addr_t nrda;            for (i = CSR_RCVRL(s)-1; i > 0; i--, rcvrc--) {                if (rcvrc <= 1)                    rcvrc = CSR_RCVRL(s);                nrda = s->rdra +                    (CSR_RCVRL(s) - rcvrc) *                    (BCR_SWSTYLE(s) ? 16 : 8 );                RMDLOAD(&rmd, PHYSADDR(s,nrda));                if (GET_FIELD(rmd.status, RMDS, OWN)) {#ifdef PCNET_DEBUG_RMD                    printf("pcnet - scan buffer: RCVRC=%d PREV_RCVRC=%d\n",                                rcvrc, CSR_RCVRC(s));#endif                    CSR_RCVRC(s) = rcvrc;                    pcnet_rdte_poll(s);                    break;                }            }        }        if (!(CSR_CRST(s) & 0x8000)) {#ifdef PCNET_DEBUG_RMD            printf("pcnet - no buffer: RCVRC=%d\n", CSR_RCVRC(s));#endif            s->csr[0] |= 0x1000; /* Set MISS flag */            CSR_MISSC(s)++;        } else {            uint8_t *src = &s->buffer[8];            target_phys_addr_t crda = CSR_CRDA(s);            struct pcnet_RMD rmd;            int pktcount = 0;            memcpy(src, buf, size);#if 1            /* no need to compute the CRC */            src[size] = 0;            src[size + 1] = 0;            src[size + 2] = 0;            src[size + 3] = 0;            size += 4;#else            /* XXX: avoid CRC generation */            if (!CSR_ASTRP_RCV(s)) {                uint32_t fcs = ~0;                uint8_t *p = src;                while (size < 46) {                    src[size++] = 0;                }                while (p != &src[size]) {                    CRC(fcs, *p++);                }                ((uint32_t *)&src[size])[0] = htonl(fcs);                size += 4; /* FCS at end of packet */            } else size += 4;#endif#ifdef PCNET_DEBUG_MATCH            PRINT_PKTHDR(buf);#endif            RMDLOAD(&rmd, PHYSADDR(s,crda));            /*if (!CSR_LAPPEN(s))*/                SET_FIELD(&rmd.status, RMDS, STP, 1);#define PCNET_RECV_STORE() do {                                 \    int count = MIN(4096 - GET_FIELD(rmd.buf_length, RMDL, BCNT),size); \    target_phys_addr_t rbadr = PHYSADDR(s, rmd.rbadr);          \    s->phys_mem_write(s->dma_opaque, rbadr, src, count, CSR_BSWP(s)); \    src += count; size -= count;                                \    SET_FIELD(&rmd.msg_length, RMDM, MCNT, count);              \    SET_FIELD(&rmd.status, RMDS, OWN, 0);                       \    RMDSTORE(&rmd, PHYSADDR(s,crda));                           \    pktcount++;                                                 \} while (0)            PCNET_RECV_STORE();            if ((size > 0) && CSR_NRDA(s)) {                target_phys_addr_t nrda = CSR_NRDA(s);                RMDLOAD(&rmd, PHYSADDR(s,nrda));                if (GET_FIELD(rmd.status, RMDS, OWN)) {                    crda = nrda;                    PCNET_RECV_STORE();                    if ((size > 0) && (nrda=CSR_NNRD(s))) {                        RMDLOAD(&rmd, PHYSADDR(s,nrda));                        if (GET_FIELD(rmd.status, RMDS, OWN)) {                            crda = nrda;                            PCNET_RECV_STORE();                        }                    }                }            }#undef PCNET_RECV_STORE            RMDLOAD(&rmd, PHYSADDR(s,crda));            if (size == 0) {                SET_FIELD(&rmd.status, RMDS, ENP, 1);                SET_FIELD(&rmd.status, RMDS, PAM, !CSR_PROM(s) && is_padr);                SET_FIELD(&rmd.status, RMDS, LFAM, !CSR_PROM(s) && is_ladr);                SET_FIELD(&rmd.status, RMDS, BAM, !CSR_PROM(s) && is_bcast);            } else {                SET_FIELD(&rmd.status, RMDS, OFLO, 1);                SET_FIELD(&rmd.status, RMDS, BUFF, 1);                SET_FIELD(&rmd.status, RMDS, ERR, 1);            }            RMDSTORE(&rmd, PHYSADDR(s,crda));            s->csr[0] |= 0x0400;#ifdef PCNET_DEBUG            printf("RCVRC=%d CRDA=0x%08x BLKS=%d\n",                CSR_RCVRC(s), PHYSADDR(s,CSR_CRDA(s)), pktcount);#endif#ifdef PCNET_DEBUG_RMD            PRINT_RMD(&rmd);#endif            while (pktcount--) {                if (CSR_RCVRC(s) <= 1)                    CSR_RCVRC(s) = CSR_RCVRL(s);                else                    CSR_RCVRC(s)--;            }            pcnet_rdte_poll(s);        }    }    pcnet_poll(s);    pcnet_update_irq(s);}static void pcnet_transmit(PCNetState *s){    target_phys_addr_t xmit_cxda = 0;    int count = CSR_XMTRL(s)-1;    s->xmit_pos = -1;    if (!CSR_TXON(s)) {        s->csr[0] &= ~0x0008;        return;    }    s->tx_busy = 1;    txagain:    if (pcnet_tdte_poll(s)) {        struct pcnet_TMD tmd;        TMDLOAD(&tmd, PHYSADDR(s,CSR_CXDA(s)));#ifdef PCNET_DEBUG_TMD        printf("  TMDLOAD 0x%08x\n", PHYSADDR(s,CSR_CXDA(s)));        PRINT_TMD(&tmd);#endif        if (GET_FIELD(tmd.status, TMDS, STP)) {            s->xmit_pos = 0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精久久久久久久久久久| 久久久精品免费免费| 丰满白嫩尤物一区二区| 日本亚洲三级在线| 日韩和欧美的一区| 免费观看日韩av| 久久99国产乱子伦精品免费| 六月丁香婷婷久久| 国产一区在线不卡| 国产伦精品一区二区三区免费迷| 国产又黄又大久久| 久久91精品国产91久久小草| 五月婷婷综合在线| 久久成人免费网站| 成人黄色av电影| 欧洲日韩一区二区三区| 在线电影国产精品| 久久视频一区二区| 亚洲精品v日韩精品| 亚洲国产精品一区二区久久| 免费高清在线视频一区·| 久久成人免费网站| av亚洲精华国产精华| 欧美日韩国产综合视频在线观看| 欧美一区二区不卡视频| 国产欧美日韩激情| 亚洲最新视频在线观看| 蜜桃视频一区二区| 成人91在线观看| 日韩一区二区影院| 国产精品网站在线观看| 亚洲精品视频自拍| 三级欧美韩日大片在线看| 国产福利一区二区| 在线观看一区日韩| 欧美精选午夜久久久乱码6080| 久久午夜老司机| 一卡二卡三卡日韩欧美| 国产乱码一区二区三区| 欧美在线一二三| 26uuu成人网一区二区三区| 亚洲激情男女视频| 捆绑紧缚一区二区三区视频| 99久久婷婷国产综合精品| 91麻豆精品国产综合久久久久久| 国产婷婷一区二区| 日韩专区在线视频| 91丨porny丨中文| 精品对白一区国产伦| 亚洲超碰97人人做人人爱| 国产sm精品调教视频网站| 欧美伊人久久久久久午夜久久久久| 日韩一级大片在线| 国产精品久久久久久久久免费丝袜| 亚洲人吸女人奶水| 国产精品 日产精品 欧美精品| 制服丝袜一区二区三区| 亚洲伦在线观看| 成人免费黄色大片| 久久色.com| 黄色日韩三级电影| 欧美一区二区三区免费大片 | 国产日韩精品一区二区三区| 亚洲.国产.中文慕字在线| 91一区一区三区| 国产精品电影一区二区| 久久国产精品区| 日韩一区二区在线观看视频| 五月天视频一区| 欧美日韩视频在线观看一区二区三区| 亚洲久草在线视频| 91在线porny国产在线看| 国产精品污网站| av一区二区久久| 亚洲欧洲性图库| 一本久久a久久免费精品不卡| 最新中文字幕一区二区三区 | 性做久久久久久| 在线观看网站黄不卡| 一区二区国产视频| 欧美日韩一区二区三区四区五区| 亚洲一区二区三区中文字幕| 欧美日韩一区二区三区四区 | 精品国产免费人成电影在线观看四季 | 欧美久久免费观看| 日本强好片久久久久久aaa| 欧美一级精品大片| 国产在线精品一区二区不卡了| 久久美女艺术照精彩视频福利播放| 国产毛片精品国产一区二区三区| 日韩视频国产视频| 免播放器亚洲一区| 国产日韩欧美一区二区三区综合| 成人的网站免费观看| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美国产精品一区二区| 成人美女在线观看| 亚洲成人先锋电影| 精品久久久久99| 91色乱码一区二区三区| 五月激情丁香一区二区三区| 精品成人佐山爱一区二区| 成人毛片老司机大片| 亚洲国产成人va在线观看天堂| 欧美一区二区三区的| 国v精品久久久网| 婷婷六月综合网| 久久天堂av综合合色蜜桃网| 欧美综合亚洲图片综合区| 免费一级欧美片在线观看| 国产精品久久久久精k8| 91精品国产高清一区二区三区蜜臀| 国产一区在线视频| 亚洲午夜免费福利视频| 国产日产欧美一区二区视频| 欧美伊人久久久久久久久影院| 黄色精品一二区| 亚洲成av人片在线| 国产精品久久久久久久蜜臀 | 欧美精品久久久久久久多人混战| 精品一区二区三区免费观看| 亚洲精品乱码久久久久久黑人| 日韩美女视频在线| 日本韩国欧美一区二区三区| 国产在线麻豆精品观看| 日精品一区二区三区| 亚洲乱码国产乱码精品精98午夜| 日韩午夜精品视频| 欧美日韩国产美| a级高清视频欧美日韩| 精品中文字幕一区二区| 亚洲成人高清在线| 亚洲猫色日本管| 亚洲欧洲99久久| 国产精品视频麻豆| 欧美日韩亚洲另类| 色噜噜夜夜夜综合网| 99久久综合99久久综合网站| 国产福利精品一区| 国产一区二区三区免费看| 日韩和欧美一区二区三区| 亚洲电影中文字幕在线观看| 一区二区三区四区av| 中文字幕一区二区三区在线观看| 久久久综合视频| 精品免费国产二区三区| 欧美一区二区美女| 91精品国产91久久久久久最新毛片 | 成人一区二区三区| 国产成人a级片| 成人av在线看| 成人理论电影网| 91美女视频网站| 色妞www精品视频| 欧美影院精品一区| 欧美精品黑人性xxxx| 日韩三级免费观看| 日韩美一区二区三区| 久久久综合视频| 国产精品久久久久久久久免费相片 | 最新不卡av在线| 国产精品不卡在线| 亚洲黄色录像片| 亚洲精品成a人| 一区二区三区四区国产精品| 午夜亚洲国产au精品一区二区| 午夜影院久久久| 久久99久久精品欧美| 国产一二三精品| av成人免费在线| 欧美日韩高清影院| 欧美一区二区三区免费大片| 337p日本欧洲亚洲大胆精品| 国产精品第一页第二页第三页| 一区二区三区精品久久久| 亚洲6080在线| 国产久卡久卡久卡久卡视频精品| 成人综合在线观看| 欧美午夜精品一区二区蜜桃| 欧美日韩一区中文字幕| 日韩欧美国产一二三区| 欧美电影免费观看完整版| 精品国产三级a在线观看| 亚洲国产精品精华液2区45| 国产精品久久久久久久蜜臀| 亚洲成av人片一区二区三区| 国产v日产∨综合v精品视频| 欧美午夜视频网站| 国产午夜精品一区二区三区四区| 亚洲视频你懂的| 久久97超碰国产精品超碰| 色噜噜狠狠色综合中国| 久久精品综合网| 五月婷婷激情综合网| av网站一区二区三区| 精品日韩在线观看| 亚洲激情在线播放| 国产ts人妖一区二区| 欧美一二三四区在线| 亚洲人成7777|