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

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

?? etherne.c

?? 一個專為嵌入式系統編寫的小型TCPIP協議棧
?? C
?? 第 1 頁 / 共 2 頁
字號:
#endif
    cp = &configs[dtype & NETNUM_MASK];
    ebase = cp->ebase;
    if (innic(ISR) & 0x10)              /* If Rx overrun.. */
    {
        printf("  NIC Rx overrun\n");
        resetnic(cp, 0);                /* ..reset controller (drastic!) */
    }
    outnic(CMDR, 0x60);                 /* DMA abort, page 1 */
    curr = innic(CURR);                 /* Get current page */
    outnic(CMDR, 0x20);                 /* DMA abort, page 0 */
    if (curr != cp->next_pkt)           /* If Rx packet.. */
    {
        memset(&nichdr, 0xee, sizeof(nichdr));  /* ..get NIC header */
        getnic((WORD)(cp->next_pkt<<8), (BYTE *)&nichdr, sizeof(nichdr));
#if STARHACK
        hilen = nichdr.next - cp->next_pkt - 1;
        lolen = nichdr.len & 0xff;
        if (hilen < 0)                  /* Do len calc from NIC datasheet */
            hilen = RXSTOP - cp->next_pkt + nichdr.next - RXSTART - 1;
        if (lolen > 0xfc)
            hilen++;
        len = (hilen<<8) + lolen;
        if (len != nichdr.len)          /* ..and compare with actual value */
        {
            if (netdebug)
                printf("  NIC length mismatch %Xh - %Xh\n", len, nichdr.len);
        }
#else
        len = nichdr.len;               /* Take length from stored header */
#endif
        if ((nichdr.stat&1) && len>=MINFRAMEC && len<=MAXFRAMEC)
        {                               /* If hdr is OK, get packet */
            len -= CRCLEN;              /* ..without CRC! */
            if (pkt)
                getnic((WORD)((cp->next_pkt<<8)+sizeof(nichdr)), pkt, len);
        }
        else                            /* If not, no packet data */
        {
            printf("  NIC packet error\n");
        }                               /* Update next packet ptr */
        if (nichdr.next>=RXSTART && nichdr.next<RXSTOP)
            cp->next_pkt = nichdr.next;
        else                            /* If invalid, use prev+1 */
        {
            printf("  NIC pointer error\n");
            cp->next_pkt = nicwrap(cp->next_pkt + 1);
        }                               /* Update boundary register */
        bnry = nicwrap(cp->next_pkt - 1);
        outnic(BNRY, bnry);
    }
    return(len);                        /* Return length excl. CRC */
}

/* Send Ethernet packet given len excl. CRC, return 0 if NIC is busy */
WORD put_etherne(WORD dtype, void *pkt, WORD len)
{
    CONFIGNE *cp;

    cp = &configs[dtype & NETNUM_MASK];
    ebase = cp->ebase;
    if (!ebase || innic(CMDR) & 4)      /* If still Txing, return 0 */
        len = 0;
    else if (pkt)
    {                                   /* If last Tx is complete.. */
        len = minw(MAXFRAME, maxw(MINFRAME, len));      /* Constrain length */
        memcpy((BYTE *)pkt+MACLEN, cp->myeth, MACLEN);  /* Set source addr */
        outnic(ISR, 0x0a);              /* Clear interrupt flags */
        outnic(TBCR0, len & 0xff);      /* Set Tx length regs */
        outnic(TBCR1, len >> 8);
        putnic(TXSTART<<8, pkt, len);
        outnic(CMDR, 0x24);             /* Transmit the packet */
    }
    return(len);
}

/* Reset the Ethernet card, if 'cold' start, get my 6-byte address */
void resetnic(CONFIGNE *cp, char cold)
{
    int i;
    BYTE temp[MACLEN*2];

    outnic(CMDR, 0x21);                 /* Stop, DMA abort, page 0 */
    delay(2);                           /* ..wait to take effect */
    outnic(DCR, DCRVAL);
    outnic(RBCR0, 0);                   /* Clear remote byte count */
    outnic(RBCR1, 0);
    outnic(RCR, 0x20);                  /* Rx monitor mode */
    outnic(TCR, 0x02);                  /* Tx internal loopback */
    outnic(TPSR, TXSTART);              /* Set Tx start page */
    outnic(PSTART, RXSTART);            /* Set Rx start, stop, boundary */
    outnic(PSTOP, RXSTOP);
    outnic(BNRY, (BYTE)(RXSTOP-1));
    outnic(ISR, 0xff);                  /* Clear interrupt flags */
    outnic(IMR, 0);                     /* Mask all interrupts */
    if (cold)
    {
        outnic(CMDR, 0x22);             /* Start NIC, DMA abort */
        getnic(0, temp, 12);            /* Get 6-byte addr */
        for (i=0; i<MACLEN; i++)        /* Convert addr words to bytes */
            cp->myeth[i] = temp[WORDMODE ? i+i : i];
    }
    outnic(CMDR, 0x61);                 /* Stop, DMA abort, page 1 */
    delay(2);
    for (i=0; i<6; i++)                 /* Set Phys addr */
        outnic(PAR0+i, cp->myeth[i]);
    for (i=0; i<8; i++)                 /* Multicast accept-all */
        outnic(MAR0+i, 0xff);
    outnic(CURR, RXSTART+1);            /* Set current Rx page */
    cp->next_pkt = RXSTART + 1;
    outnic(CMDR, 0x20);                 /* DMA abort, page 0 */
    outnic(RCR, promisc ? 0x14 : 0x04); /* Allow broadcasts, maybe all pkts */
    outnic(TCR, 0);                     /* Normal Tx operation */
    outnic(ISR, 0xff);                  /* Clear interrupt flags */
    outnic(CMDR, 0x22);                 /* Start NIC */
}

/* Get a packet from a given address in the NIC's RAM */
void getnic(WORD addr, BYTE data[], WORD len)
{
    register int count;
    register WORD *dataw, dataport;

    count = WORDMODE ? len>>1 : len;    /* Halve byte count if word I/P */
    dataport = ebase + DATAPORT;        /* Address of NIC data port */
    outnic(ISR, 0x40);                  /* Clear remote DMA interrupt flag */
    outnic(RBCR0, len&0xff);            /* Byte count */
    outnic(RBCR1, len>>8);
    outnic(RSAR0, addr&0xff);           /* Data addr */
    outnic(RSAR1, addr>>8);
    outnic(CMDR, 0x0a);                 /* Start, DMA remote read */
#if WORDMODE
    dataw = (WORD *)data;               /* Use pointer for speed */
    while(count--)                      /* Get words */
        *dataw++ = inpw(dataport);
    if (len & 1)                        /* If odd length, do last byte */
        *(BYTE *)dataw = inp(dataport);
#else
    while(count--)                      /* Get bytes */
        *data++ = inp(dataport);
#endif
}

/* Put a packet into a given address in the NIC's RAM */
void putnic(WORD addr, BYTE data[], WORD len)
{
    register int count;
    register WORD *dataw, dataport;

    len += len & 1;                     /* Round length up to an even value */
    count = WORDMODE ? len>>1 : len;    /* Halve byte count if word O/P */
    dataport = ebase + DATAPORT;        /* Address of NIC data port */
    outnic(ISR, 0x40);                  /* Clear remote DMA interrupt flag */
    outnic(RBCR0, len&0xff);            /* Byte count */
    outnic(RBCR1, len>>8);
    outnic(RSAR0, addr&0xff);           /* Data addr */
    outnic(RSAR1, addr>>8);
    outnic(CMDR, 0x12);                 /* Start, DMA remote write */
#if WORDMODE                            /* Word transfer? */
    dataw = (WORD *)data;
    while(count--)
        outpw(dataport, *dataw++);  /* O/P words */
#else
    while(count--)                  /* O/P bytes */
        outp(dataport, *data++);
#endif
    count = 10000;                      /* Done: must ensure DMA complete */
    while(count && (innic(ISR)&0x40)==0)
        count--;
}

/* Wrap an NIC Rx page number */
BYTE nicwrap(int page)
{
   if (page >= RXSTOP)
       page += RXSTART - RXSTOP;
   else if (page < RXSTART)
       page += RXSTOP - RXSTART;
   return(page);
}

/* Input a byte from a NIC register */
BYTE innic(int reg)
{
    return(inp((WORD)(ebase+reg)));
}
/* Output a byte to a NIC register */
void outnic(int reg, int b)
{
    outp((WORD)(ebase+reg), b);
}

/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品在线视频观看| 精品影视av免费| 国产嫩草影院久久久久| 精品国产亚洲在线| 日韩午夜精品视频| 欧美精品一区二区三区视频| 欧美大肚乱孕交hd孕妇| 精品国内二区三区| 久久久久久久久久久99999| 久久亚洲精华国产精华液 | 色呦呦国产精品| 色哟哟国产精品| 538prom精品视频线放| 日韩免费观看高清完整版在线观看| 欧美久久久久久久久久| 日韩精品一区二区三区三区免费| 日韩视频中午一区| 国产欧美精品区一区二区三区| 欧美国产在线观看| 亚洲一区二区三区美女| 日本不卡视频在线| 国产.欧美.日韩| 色婷婷亚洲综合| 日韩欧美国产一二三区| 亚洲国产精品传媒在线观看| 亚洲精品五月天| 裸体一区二区三区| 高清国产一区二区| 欧美日韩国产成人在线免费| 日韩视频在线观看一区二区| 国产精品天美传媒沈樵| 亚洲网友自拍偷拍| 成人综合激情网| 91精品久久久久久久久99蜜臂| 久久久亚洲综合| 亚洲在线观看免费| 国产原创一区二区| 欧美精品色综合| 亚洲欧美中日韩| 另类中文字幕网| 日本乱人伦aⅴ精品| 久久夜色精品一区| 亚洲高清三级视频| 高清国产一区二区| 26uuu久久综合| 香港成人在线视频| 不卡的av在线播放| 2021中文字幕一区亚洲| 亚洲自拍偷拍图区| av高清不卡在线| 欧美激情在线一区二区| 美国三级日本三级久久99| 欧美中文一区二区三区| 国产精品久久久久久久久搜平片| 日韩电影一区二区三区四区| 色婷婷综合久久久| 中文字幕色av一区二区三区| 九九精品一区二区| 日韩一级完整毛片| 日韩av中文在线观看| 91成人网在线| 洋洋成人永久网站入口| 99精品久久只有精品| 久久这里只有精品视频网| 美女视频黄频大全不卡视频在线播放| 在线亚洲人成电影网站色www| 久久久久久免费| 国内一区二区在线| 精品国产三级电影在线观看| 亚洲国产欧美另类丝袜| 欧美日韩在线三级| 亚洲午夜久久久久久久久电影院 | 国产精品乱人伦中文| 国产乱码精品一区二区三| 精品欧美一区二区久久| 久久国产婷婷国产香蕉| 日韩欧美高清dvd碟片| 精品无人区卡一卡二卡三乱码免费卡| 欧美一区二区三区播放老司机| 亚洲国产精品一区二区久久恐怖片| 色哟哟国产精品| 亚洲成av人片一区二区梦乃| 7777女厕盗摄久久久| 奇米影视在线99精品| 精品人伦一区二区色婷婷| 国产综合色在线| 国产精品久线观看视频| 99国产精品久| 亚洲.国产.中文慕字在线| 日韩一区二区在线免费观看| 久久精品国产免费| 国产女人水真多18毛片18精品视频| 成人在线综合网站| 一区二区三区国产精华| 欧美美女网站色| 国产黄色精品视频| 一区二区久久久久| 日韩一区二区在线播放| 国产激情视频一区二区三区欧美 | 一区二区三区国产精品| 91麻豆精品国产| 国产激情偷乱视频一区二区三区| 国产精品福利一区| 欧美人狂配大交3d怪物一区| 日韩不卡一二三区| 中文字幕一区二区在线观看| 欧美日韩中文国产| 成人精品高清在线| 婷婷开心激情综合| 国产欧美日韩三级| 欧美激情中文字幕| 欧美日韩精品一区二区天天拍小说 | 26uuu另类欧美| 日本精品视频一区二区三区| 蜜臀91精品一区二区三区 | 欧美一二三四在线| 高清日韩电视剧大全免费| 午夜影院久久久| 中文字幕欧美日本乱码一线二线| 欧美午夜寂寞影院| 国产不卡视频在线播放| 免费久久99精品国产| 成人免费在线播放视频| 久久伊99综合婷婷久久伊| 欧美视频第二页| 成人午夜在线播放| 久久精品国产99国产精品| 亚洲专区一二三| 亚洲视频一区二区在线观看| 日韩精品综合一本久道在线视频| 欧美影视一区在线| 99国产精品久久久| 北岛玲一区二区三区四区| 青青草国产精品亚洲专区无| 亚洲制服欧美中文字幕中文字幕| 国产精品区一区二区三| 久久午夜老司机| 精品精品欲导航| 精品国产免费一区二区三区香蕉| 在线亚洲免费视频| 色爱区综合激月婷婷| 成人性生交大合| 成人免费高清视频在线观看| 国产在线看一区| 国内成人精品2018免费看| 麻豆精品一区二区三区| 狂野欧美性猛交blacked| 石原莉奈在线亚洲三区| 亚洲不卡一区二区三区| 亚洲国产精品天堂| 天天操天天综合网| 午夜精品一区在线观看| 天堂精品中文字幕在线| 日韩精品一级二级| 久久国产精品无码网站| 国产尤物一区二区| 国产精品一区专区| 福利一区二区在线| 成人精品免费网站| av一二三不卡影片| 在线免费观看日本一区| 欧美日韩亚洲综合一区| 在线播放中文一区| 欧美大肚乱孕交hd孕妇| 国产午夜精品美女毛片视频| 亚洲国产精品国自产拍av| 国内精品第一页| 国产不卡视频一区二区三区| 99v久久综合狠狠综合久久| 日本久久电影网| 欧美日韩一区二区三区四区五区| 欧美日本一区二区三区四区| 日韩久久免费av| 国产精品国产精品国产专区不蜜| 亚洲美女免费在线| 日本不卡不码高清免费观看| 国产美女在线观看一区| 91色婷婷久久久久合中文| 在线播放国产精品二区一二区四区| 欧美一区二区在线免费观看| 久久精品视频免费观看| 亚洲人成亚洲人成在线观看图片| 亚洲国产一区二区三区青草影视| 久久99久久精品欧美| 99视频超级精品| 日韩三级在线观看| 综合久久久久综合| 蜜桃视频在线一区| 91欧美激情一区二区三区成人| 91精品国产91综合久久蜜臀| 中文av一区特黄| 欧美bbbbb| 99视频精品免费视频| 91精品国产综合久久福利软件| 国产精品你懂的在线欣赏| 丝袜a∨在线一区二区三区不卡| 国产成人精品aa毛片| 欧美一级电影网站| 亚洲综合色噜噜狠狠| 国产精品一区二区免费不卡 |