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

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

?? if_ne2kd.c

?? 嵌入式TCP/IP協議棧
?? C
?? 第 1 頁 / 共 4 頁
字號:
/****************************************************************************** if_ne2k.c - NE2000 specific functions (or simply NE2000 driver)** portions Copyright (c) 2001 by Partner Voxtream A/S.** The authors hereby grant permission to use, copy, modify, distribute,* and license this software and its documentation for any purpose, provided* that existing copyright notices are retained in all copies and that this* notice and the following disclaimer are included verbatim in any* distributions. No written agreement, license, or royalty fee is required* for any of the authorized uses.** THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.******************************************************************************** REVISION HISTORY (please don't use tabs!)**(yyyy-mm-dd)* 2001-03-01 Mads Christiansen <mads@mogi.dk>, Partner Voxtream.*            Original file.** 2001-10-01 Craig Graham <c_graham@hinge.mistral.co.uk>.*            NBuf's all the way...*****************************************************************************///#include <config.h>#include <stdio.h>#include <string.h>#include "../../netconf.h"#include "../../netbuf.h"#include "if_ne2kr.h"#include "if_ne2k.h"#include "if_os.h"#include "../../netifdev.h"
// ***** INTERNAL TYPE DEFINEStypedef struct{  u_char Status;  u_char NextPage;  u_short Length;} BufferHeader;typedef union{  u_short Word;  u_char  Uchar[2];} Word;// ***** PROTOTYPESstatic int ReadBuffer(BufferHeader *, u_char *, u_short);static NBuf *ReadBufferNBuf(BufferHeader *header, u_short length);// ***** DEFINES// Interrupt Mask Register Setup// Packet received, packet sent, receive error, transmit error, buffer overflow//     No interrupt for counter overflow!#define IMR IMR_PRXE | IMR_PTXE | IMR_RXEE | IMR_TXEE | IMR_OVWE// Minimum packet size for the ethernet (this is without the trailing CRC)#define MIN_PACKET_SIZE 60// ***** LOCAL VARIABLES// Specific NIC info (first 6 bytes are cards MAC address)static u_char CardInfo[16];// Driver statisticsstatic Ne2kStatistics Statistics;// Next packet buffer pointer, used by Ne2kReceivestatic u_char NextPacket;u_char Ne2k_MacAddress[6];int Ne2k_MacAddressSet=0;/** * Override the cards default MAC address * @param pointer to a 6byte array containing the MAC address to use */void Ne2kSetMacAddress(const u_char *address){    memcpy(Ne2k_MacAddress,address,6);    Ne2k_MacAddressSet=1;}static u_char Ne2kInitialize(u_char* address){    u_char ReadData;    UINT32 Test0;    UINT32 Test1;    int Count;    printf("Ne2kInitialise\n");    // ***** Reset statistics    memset(&Statistics, 0, sizeof(Statistics));    printf("0\n");    // ***** Stop NIC    OUTPORTB(NIC_CR, CR_STOP | CR_NO_DMA | CR_PAGE0);    // Do a long wait to let the NIC finish receive/sending    // THIS IS MANDATORY!    LONGPAUSE;    printf("1\n");    // ***** Detect NIC    // Write 0x55 to 'Boundary Pointer Register' on page 0    OUTPORTB(PG0W_BNRY, 0x55);    PAUSE;    printf("2\n");    // Write 0xaa to 'Physical Address Pointer Register2' on page 1    OUTPORTB(NIC_CR, CR_STOP | CR_NO_DMA | CR_PAGE1);    PAUSE;    OUTPORTB(PG1W_PAR2, 0xaa);    PAUSE;    printf("3\n");    // Read 'Boundary Pointer Register' on page 0    OUTPORTB(NIC_CR, CR_STOP | CR_NO_DMA | CR_PAGE0);    PAUSE;    Test0 = INPORTB(PG0R_BNRY);    PAUSE;    printf("4\n");    // Read 'Physical Address Pointer Register2' on page 1    OUTPORTB(NIC_CR, CR_STOP | CR_NO_DMA | CR_PAGE1);    PAUSE;    Test1 = INPORTB(PG1R_PAR2);    PAUSE;    printf("5\n");    // ***** IF NIC is not found THEN RETURN FALSE    if ((Test0 != 0x55) || (Test1 != 0xaa)) {        printf("NIC not found Test0=%lx Test1=%lx\n",Test0,Test1);        return FALSE;    }    printf("Detected Ne2k NIC :)\n");    // ***** Read NIC's MAC address    // We want to read MAC address, select transfer mode (word), no loopback, FIFO 4 words    OUTPORTB(NIC_CR, CR_PAGE0 | CR_NO_DMA | CR_STOP );    PAUSE;    OUTPORTB(PG0W_DCR, DCR_FT1 | DCR_LS | DCR_WTS);    PAUSE;    // Setup Remote Byte Count Register    // We need 16 bytes (value must be doubled)    OUTPORTB(PG0W_RBCR0, 0x20);    PAUSE;    OUTPORTB(PG0W_RBCR1, 0x00);    PAUSE;    // Setup Remote Start Address Register    OUTPORTB(PG0W_RSAR0, 0x00);    PAUSE;    OUTPORTB(PG0W_RSAR1, 0x00);    PAUSE;    // DMA Remote Read and Start NIC    OUTPORTB(NIC_CR, CR_PAGE0 | CR_DMA_READ | CR_START);    PAUSE;    // Read 16 bytes of data (first 6 is our MAC address), the rest is currently not used    for (Count = 0; Count < 16; Count++)        CardInfo[Count] = INPORTB(NIC_DATAPORT);    //++cg[25/09/2001]: allow overrider of MAC address, as current ls808 design doesn't include the bootrom/e2 with the MAC in it...    if(Ne2k_MacAddressSet) {        printf("ne2k reports");        memcpy(CardInfo,Ne2k_MacAddress,6);    } else {        printf("override");    }    printf(" MAC address = %x:%x:%x:%x:%x:%x\n",CardInfo[0],CardInfo[1],CardInfo[2],CardInfo[3],CardInfo[4],CardInfo[5]);    // ***** Reset NIC    // Stop NS 8390 CHIP, somewhere it states that issuing a read to    // NIC address + 1fh (NIC_RESET) will issue a reset on the NIC! SO THIS IS DONE!    ReadData = INPORTB(NIC_RESET);    // Do a long wait for the 8390 to reset.    // THIS IS MANDATORY!    LONGPAUSE;    OUTPORTB(NIC_RESET, ReadData); // THIS IS DONE IN A PACKET DRIVER ?    PAUSE;    // ***********************************************************************************    // ***** The following initialization procedure is taken from the datasheet    // ***** DP8390D/NS32490D NIC Network Interface Controller (July 1995) from National    // ***** Semiconductor.    // ***** 1. Stop NIC (again...)    OUTPORTB(NIC_CR, CR_PAGE0 | CR_STOP | CR_NO_DMA );    // Don't do a longpause, the NIC should already be stopped    PAUSE;    // ***** 2. Initialize Data Configuration Register (DCR) to normal operation,    //          word wide transfer, 4 words FIFO threshold    OUTPORTB(PG0W_DCR, DCR_FT1 | DCR_LS | DCR_WTS);    PAUSE;    // ***** 3. Clear Remote Byte Count Registers (RBCR0, RBCR1)    OUTPORTB(PG0W_RBCR0, 0x00);    PAUSE;    OUTPORTB(PG0W_RBCR1, 0x00);    PAUSE;    // ***** 4. Initialize Receive Configuration Register (RCR) to accept broadcast packets and    //          packets addressed to this NIC (MAC address).    // NOTICE THAT SOME NE2000 CLONES HAVE ACCEPT BROADCAST AND ACCEPT MULTICAST BITS HARDWIRED TOGETHER!    // SO IF YOU SET ONE YOU ALSO SET THE OTHER!    OUTPORTB(PG0W_RCR, RCR_AB | RCR_AM);    PAUSE;    // ***** 5. Place the NIC in Loopback Mode 1, internal loopback (Transmit Configuration Register).    OUTPORTB(PG0W_TCR, TCR_LB0);    PAUSE;    // ***** 6. Initialize Page Start Register, Boundary Pointer & Page Stop Register    OUTPORTB(PG0W_PSTART, RSTART_PG);    PAUSE;    OUTPORTB(PG0W_BNRY, RSTART_PG);    PAUSE;    OUTPORTB(PG0W_PSTOP, RSTOP_PG);    PAUSE;    // ***** 7. Clear Interrupt Status Register (ISR) by writing 0FFh to it..    OUTPORTB(PG0W_ISR, 0xFF);    PAUSE;    // ***** 8. Initialize IMR (Interrupt Mask Register) to accept:    OUTPORTB(PG0W_IMR, IMR);    PAUSE;    // ***** 9. Initialize Physical Address Registers (PAR0-PAR5) (MAC Address)    // Select PAGE 1    OUTPORTB(NIC_CR, CR_PAGE1 | CR_NO_DMA | CR_STOP);    PAUSE;    // Setup MAC address    for (Count = 0; Count < 6; Count++) {        OUTPORTB(PG1W_PAR0 + Count, CardInfo[Count]);        PAUSE;    }    // ***** Initialize Multicast Address Registers to 00h (MAR0-MAR7) (don't accept multicast packets)    for (Count = 0; Count < 8; Count++) {        OUTPORTB(PG1W_MAR0 + Count, 0x00);        PAUSE;    }    // ***** Initialize CURRent pointer to Boundary Pointer + 1    OUTPORTB(PG1W_CURR, RSTART_PG+1);    PAUSE;    NextPacket = RSTART_PG + 1;    // ***** 10. Start NIC    OUTPORTB(NIC_CR, CR_PAGE0 | CR_NO_DMA | CR_START);    PAUSE;    // ***** 11. Initialize the Transmit Configuration Register for normal operation (out of loopback mode)    OUTPORTB(PG0W_TCR, 0x00);    PAUSE;    // ***** Copy the 6 bytes long MAC address    if (address) memcpy(address, CardInfo, 6);    // ***** RETURN TRUE    return TRUE;}static u_char Ne2kStop(void){    // ***** Stop NIC    OUTPORTB(NIC_CR, CR_STOP | CR_NO_DMA | CR_PAGE0);    PAUSE;    // ***** Disable interrupts from NIC    OUTPORTB(PG0W_IMR, 0x00);    PAUSE;    // Clear any generated interrupts    OUTPORTB(PG0W_ISR, 0xff);    PAUSE;    return 0;}void Ne2kProcessInterrupts(void){    register unsigned char i;    // ***** Disable netcard IRQ    DISABLE_NE2K_IRQ;    // ***** Disable interrupts from NIC (IMR = 0)    OUTPORTB(PG0W_IMR, 0x00);    PAUSE;    i = INPORTB(PG0R_ISR);    // ***** WHILE (ISR > 0)    while (i = INPORTB(PG0R_ISR) & 0x3F) {        PAUSE;        // ***** ALL INTERRUPTS MUST BE CLEARED        // ***** (except for OVW, which is cleared when calling Ne2kReceive)        // ***** IF overwrite warning interrupt THEN        if (i & ISR_OVW) {            //printf("nei-OVW\n");            PAUSE;            // ***** CALL Ne2kReceiveEvent()            Ne2kReceiveEvent();        }        else PAUSE;        // ***** IF packet received interrupt THEN        if (i & ISR_PRX) {            //printf("nei-Rx\n");            PAUSE;            // ***** clear packet received interrupt status bit            OUTPORTB(PG0W_ISR, ISR_PRX);            PAUSE;            // ***** CALL Ne2kReceiveEvent()            Ne2kReceiveEvent();        }        else PAUSE;        // ***** IF packet transmitted interrupt THEN        if (i & ISR_PTX) {            //printf("nei-Tx\n");            PAUSE;            // ***** clear packet transmitted interrupt status bit            OUTPORTB(PG0W_ISR, ISR_PTX);            PAUSE;            // ***** CALL Ne2kTransmitEvent()            Ne2kTransmitEvent();        }        else PAUSE;        // ***** IF receive error interrupt THEN        if (i & ISR_RXE) {            //printf("nei-4\n");            PAUSE;            // ***** clear receive error interrupt status bit            OUTPORTB(PG0W_ISR, ISR_RXE);            PAUSE;            // ***** update receive error statistics            Statistics.ReceiveErrors++;        }        else PAUSE;        // ***** IF transmit error interrupt THEN        if (i & ISR_TXE) {            //printf("nei-5\n");            PAUSE;            // ***** clear transmit error interrupt status bit            OUTPORTB(PG0W_ISR, ISR_TXE);            PAUSE;            // ***** update transmit error statistics            Statistics.TransmitErrors++;            // ***** CALL Ne2kTransmitEvent()            Ne2kTransmitEvent();        }        else PAUSE;        /* NETWORK TALLY COUNTERS ARE NOT USED, THEY COULD BE USED FOR MORE PRECISE STATISTICS        // ***** IF counter overflow interrupt THEN        if (i & ISR_CNT) {            PAUSE;            // ***** clear counter overflow interrupt status bit            OUTPORTB(PG0W_ISR, ISR_CNT);            PAUSE;            // ***** empty tally counters            INPORTB(PG0R_CNTR0);            PAUSE;            INPORTB(PG0R_CNTR2);            PAUSE;            INPORTB(PG0R_CNTR3);            PAUSE;        }        else PAUSE;        */    }    // Enabling interrupts again, don't change this order or you might loose interrupts!    DISABLE_INTERRUPTS;    ENABLE_NE2K_IRQ;    SIGNAL_EOI;    ENABLE_INTERRUPTS;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99热这里只有精品| 亚洲一区二区三区精品在线| 在线观看国产日韩| 精品无码三级在线观看视频| 亚洲视频一二区| 精品国产乱码久久久久久老虎| 色一情一伦一子一伦一区| 激情文学综合插| 午夜久久久久久电影| 国产精品久久久久桃色tv| 日韩精品在线看片z| 色婷婷久久综合| 成人开心网精品视频| 久草这里只有精品视频| 亚洲一区二区偷拍精品| 中文字幕色av一区二区三区| 欧美va在线播放| 91.com视频| 欧美日韩在线电影| 欧美综合天天夜夜久久| 成人少妇影院yyyy| 精油按摩中文字幕久久| 日韩专区中文字幕一区二区| 亚洲激情av在线| 国产精品不卡一区| 欧美国产欧美综合| 国产日韩欧美激情| 久久精品亚洲国产奇米99| 精品久久久久久久久久久久包黑料 | 91视频一区二区| 粉嫩一区二区三区性色av| 国产精品综合二区| 狠狠色丁香久久婷婷综合丁香| 天天综合网天天综合色| 五月天激情综合网| 午夜欧美2019年伦理| 亚洲成人777| 亚洲成人tv网| 亚洲大片精品永久免费| 亚洲午夜久久久久久久久久久| 亚洲色图另类专区| 亚洲蜜臀av乱码久久精品| 亚洲欧美成aⅴ人在线观看| 国产精品传媒视频| 亚洲日本免费电影| 自拍偷在线精品自拍偷无码专区 | 亚洲美女视频在线| 一区二区三区中文免费| 一区二区日韩电影| 亚洲成人av电影| 美洲天堂一区二卡三卡四卡视频| 蜜臀久久99精品久久久久久9| 美女一区二区久久| 国产精品一区二区不卡| 粉嫩欧美一区二区三区高清影视 | 国产一区二区网址| 国产成人日日夜夜| 91一区二区三区在线观看| 日本道在线观看一区二区| 欧美三级日韩三级| 欧美一区二区三区视频| 久久久精品综合| ...中文天堂在线一区| 亚洲一区二区三区四区的| 男人操女人的视频在线观看欧美| 国产中文字幕一区| 91老师国产黑色丝袜在线| 欧美日韩国产区一| 欧美一区二区三区免费大片| 日本一区二区三区视频视频| 亚洲视频网在线直播| 日本不卡123| 成人综合婷婷国产精品久久蜜臀 | 国产成+人+日韩+欧美+亚洲| 99re热视频精品| 欧美精品第一页| 久久久高清一区二区三区| 亚洲色图欧洲色图| 久久精品国产一区二区三区免费看| 国产精品69毛片高清亚洲| 色婷婷一区二区| 欧美v亚洲v综合ⅴ国产v| 亚洲乱码国产乱码精品精的特点| 免费成人在线观看视频| 成人激情开心网| 91麻豆精品国产无毒不卡在线观看 | 免费高清在线一区| 91在线你懂得| 精品电影一区二区三区| 一区二区三区日韩精品视频| 黑人巨大精品欧美一区| 91在线观看一区二区| 日韩一区和二区| 成人免费在线视频观看| 久久99精品久久久久久久久久久久| 色综合久久久久久久久| 欧美精品一区视频| 婷婷夜色潮精品综合在线| 99国产精品久久久| 久久久久久99精品| 日韩精品一级二级| 91在线精品一区二区| 国产亚洲成年网址在线观看| 日韩不卡一二三区| 成人福利在线看| 精品国产电影一区二区| 亚洲国产成人av| 99精品久久免费看蜜臀剧情介绍| 精品国产一区二区三区av性色 | 日韩欧美一区二区视频| 亚洲精品一二三区| 丁香激情综合五月| 久久综合色婷婷| 亚洲1区2区3区视频| 99久久免费视频.com| 久久精品视频在线免费观看 | 成人高清视频在线观看| 欧美精品一区二区蜜臀亚洲| 亚洲国产成人av网| 欧美综合久久久| 亚洲狼人国产精品| av成人免费在线观看| 日本一区二区三区久久久久久久久不| 免费美女久久99| 日韩一区二区三区免费看 | 久久久不卡网国产精品一区| 美女一区二区视频| 欧美一区二区三区系列电影| 五月综合激情日本mⅴ| 欧洲视频一区二区| 亚洲卡通动漫在线| 在线一区二区视频| 洋洋av久久久久久久一区| 色系网站成人免费| 亚洲一区在线看| 欧美四级电影网| 婷婷成人综合网| 日韩精品中午字幕| 国产一区二区不卡在线| 久久综合色婷婷| 国产v日产∨综合v精品视频| 国产精品午夜电影| 一本到一区二区三区| 亚洲综合激情网| 欧美人妇做爰xxxⅹ性高电影| 亚洲成人一区二区在线观看| 欧美日韩专区在线| 美脚の诱脚舐め脚责91| 精品少妇一区二区三区免费观看 | 一区二区三区波多野结衣在线观看| 99r精品视频| 午夜影院在线观看欧美| 欧美一区二区私人影院日本| 精油按摩中文字幕久久| 欧美国产成人在线| 一本久久精品一区二区| 午夜精品久久久久影视| 精品1区2区在线观看| 成人avav影音| 香蕉久久夜色精品国产使用方法| 日韩一级在线观看| 国产suv一区二区三区88区| 亚洲人xxxx| 日韩一区二区三区电影| 成人毛片老司机大片| 亚洲国产综合在线| 精品国产欧美一区二区| 99在线视频精品| 日本女优在线视频一区二区| 国产清纯白嫩初高生在线观看91| 91久久人澡人人添人人爽欧美| 丝袜亚洲另类丝袜在线| 国产亚洲欧美在线| 色婷婷av一区二区三区之一色屋| 蜜臀av一级做a爰片久久| 国产精品网曝门| 欧美精三区欧美精三区| 国产一区在线观看视频| 亚洲在线观看免费视频| 久久免费精品国产久精品久久久久| www.欧美日韩国产在线| 日产欧产美韩系列久久99| 国产精品全国免费观看高清| 欧美精品777| 不卡影院免费观看| 久久爱www久久做| 一级日本不卡的影视| 久久色在线视频| 欧美日韩激情一区二区三区| 国产99一区视频免费| 日韩高清一区在线| 国产精品盗摄一区二区三区| 日韩欧美国产系列| 欧美日韩综合不卡| 99国产精品国产精品毛片| 国产一区二区日韩精品| 偷窥国产亚洲免费视频| 亚洲激情成人在线| 国产精品三级视频| 欧美成人激情免费网|