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

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

?? ether3c.c

?? 嵌入式TCPIP協(xié)議棧的源代碼!
?? C
字號(hào):
/* 3COM Etherlink III 3C509 ISA drivers for 'TCP/IP Lean' (c) Iosoft Ltd. 2000

WARNING: this driver is in an early stage of development...
It only works with the co-ax network interface at present, not twisted pair.
Use 3COM's 3C5X9CFG utility to select the interface and set the I/O addr

This software is only licensed for distribution with the book 'TCP/IP Lean',
and may only be used for personal experimentation by the purchaser
of that book, on condition that this copyright notice is retained.
For commercial licensing, contact license@iosoft.co.uk

This is experimental software; use it entirely at your own risk. The author
offers no warranties of any kind, including its fitness for purpose. */

/*
** v0.01 JPB 1/12/99
** v0.02 JPB 7/1/00   Added 'maxlen' to initialisation
** v0.03 JPB 17/1/00  Removed 'maxlen' again!
** v0.04 JPB 20/1/00  Added support for multiple cards
** v0.05 JPB 23/3/00  Added flag for promiscuous mode
** v0.06 JPB 3/7/00   Revised header for book CD
*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#include "ether.h"              /* Typedefs and function prototypes */
#include "netutil.h"
#include "net.h"

#define IDPORT      0x100       /* ID port addr (NOT the card base addr) */

/* Register definitions */
#define CMDS        0xe         /* Command/status       all windows */
#define CCR         0x4         /* Config control       window 0 */
#define FIFO        0x0         /* Tx/Rx FIFO           window 1 */
#define RXSTAT      0x8         /* Receive status       window 1 */
#define TXSTAT      0xb         /* Transmit status      window 1 (byte) */
#define ETHADDR     0x0         /* Ethernet address     window 2 */
#define RXFREE      0xa         /* Rx free space        window 3 */
#define TXFREE      0xc         /* Tx free space        window 1 or 3 */
#define MEDIATYPE   0xa         /* Media type & status  window 4 */

/* Commands */
#define CMD_RESET       0x0000  /* Reset board */
#define CMD_SELWIN      0x0800  /* Select register window */
#define CMD_COAX        0x1000  /* Start coax transceiver */
#define CMD_RXDIS       0x1800  /* Disable Rx */
#define CMD_RXEN        0x2000  /* Enable Rx */
#define CMD_RXDISC      0x4000  /* Discard Rx packet */
#define CMD_TXDIS       0x5000  /* Disable Tx */
#define CMD_TXRESET     0x5800  /* Reset Tx */
#define CMD_TXEN        0x4800  /* Enable Tx */
#define CMD_RXFILT      0x8000  /* Set Rx filter */
#define CMD_TXTHRESH    0x9800  /* Tx threshold */
#define CMD_NOCOAX      0xb800  /* Stop coax transceiver */

/* Network controller register I/O */
#define GETREG(r)       inpw((WORD)(ebase+r))       /* Read word from reg */
#define SETREG(r, x)    outpw((WORD)(ebase+r), x)   /* Write word to reg */
#define CMD(c, x)       SETREG(CMDS, (WORD)(c+x))   /* Send command and data */
#define SELWIN(x)       CMD(CMD_SELWIN, x)          /* Select window number */

typedef struct                  /* Net driver configuration data */
{
    WORD dtype;                     /* Driver type */
    BYTE myeth[MACLEN];             /* MAC (Ethernet) addr */
    WORD ebase;                     /* Card I/O base addr */
} CONFIGNE;

static CONFIGNE configs[MAXNETS];   /* Driver configurations */

static unsigned ebase;              /* Temp I/O base addr (not ID port addr) */
extern int promisc;                 /* Flag to enable promiscuous mode */

/* Private prototypes */
void write_idseq(void);
WORD read_eeword(BYTE oset);

/* Initialise card given base addr, and byte/word mode flag
** Return 0 if initialisation error */
int init_ether3c(WORD dtype, WORD baseaddr)
{
    int ok=0, i;
    WORD w, addr, mfg, prod;
    CONFIGNE *cp;

    cp = &configs[dtype & NETNUM_MASK]; /* Get pointer into driver data */
    cp->dtype = dtype;                  /* Set driver type */
    cp->ebase = ebase = baseaddr;       /* Set card I/O base address */
    outp(IDPORT, 0xc0);                 /* Reset board, wait at least 1 msec */
    delay(10);
    write_idseq();                      /* Do strange ident sequence */
    outp(IDPORT, 0xc0);                 /* Rinse and repeat.. */
    delay(10);
    write_idseq();                 
    mfg = read_eeword(7);               /* Check manufacturer ID */
    prod = read_eeword(3);              /* ..and product ID */
    if (mfg==0x6d50 && (prod&0xf0ff)==0x9050)
    {
        if ((addr=(read_eeword(8) & 0x1f)*0x10 + 0x200) != ebase)
            printf("ERROR: actual card base addr %03Xh\n", addr);
        else
        {
            outp(IDPORT, 0xff);         /* Activate board */
            delay(10);
            SELWIN(0);                  /* Enable adapter */
            SETREG(CCR, 0x01);
            SELWIN(2);
            for (i=0; i<MACLEN; i+=2)   /* Get Ethernet address */
            {
                w = read_eeword((BYTE)(i/2));
                cp->myeth[i] = (BYTE)(w >> 8);
                cp->myeth[i+1] = (BYTE)w;   /* ..and set in controller */
                SETREG(ETHADDR+i, swapw(w));
            }
            CMD(CMD_TXTHRESH, 0x777);   /* Only Tx when whole packet sent */
            CMD(CMD_COAX, 0);           /* Start coax transceiver */
            delay(10);
            SELWIN(3);
            CMD(CMD_TXEN, 0);           /* Enable transmit */
            if (promisc)
                CMD(CMD_RXFILT, 8);     /* Set promiscuous mode */
            else
                CMD(CMD_RXFILT, 5);     /* Accept own & bcast addrs */
            CMD(CMD_RXEN, 0);           /* Enable receive */
            SELWIN(1);
            ok = 1;
        }
    }
    else
        printf("ERROR: card manufacturer %04Xh product %04Xh\n", mfg, prod);
    return(ok);
}

/* Return pointer to my Ethernet addr, given driver type */
BYTE *ether3c_addr(WORD dtype)
{
    return(configs[dtype & NETNUM_MASK].myeth);
}

/* Close down ethernet controller */
void close_ether3c(WORD dtype)
{
    ebase = configs[dtype & NETNUM_MASK].ebase;
    if (ebase)
    {
        CMD(CMD_TXDIS, 0);           /* Disable transmit & receive */
        CMD(CMD_RXDIS, 0);
        configs[dtype & NETNUM_MASK].ebase = 0;
    }
}

/* Poll network interface to keep it alive; send & receive frames */
void poll_ether3c(WORD dtype)
{
    WORD len;
    BYTE stat;
    static BYTE ebuff[MAXFRAMEC];
    CONFIGNE *cp;

    cp = &configs[dtype & NETNUM_MASK];
    if (cp->ebase)                              /* If net in use.. */
    {
        ebase = cp->ebase;                      /* Set card I/O address */
        /* Receive */
        SELWIN(1);
        while ((len=get_ether3c(ebuff))>0)
        {                               /* Store frames in circ buff */
            receive_upcall(cp->dtype, ebuff, len);
        }
        /* Transmit */
        while ((stat=inp((WORD)(ebase+TXSTAT))) & 0x80)
        {
            if (stat & 0x1c)                    /* Reset Tx if error */
            {
                CMD(CMD_TXRESET, 0);
                CMD(CMD_TXEN, 0);
            }
            outp((WORD)(ebase+TXSTAT), 0);      /* Pop status off stack */
        }
        while (GETREG(TXFREE)>=MAXFRAME &&      /* While space in buff.. */
            (len=transmit_upcall(cp->dtype, ebuff, MAXFRAME))>0)
        {                                       /* ..and frame available.. */
            memcpy(&ebuff[MACLEN], cp->myeth, MACLEN);  /* Set my addr */
            put_ether3c(ebuff, len);            /* ..and transmit frame */
        }
    }
}

/* Get packet into buffer, return length (excl CRC), or 0 if none available */
WORD get_ether3c(void *pkt)
{
    WORD stat, len=0;
    register WORD n, *p;

    if (!((stat = GETREG(RXSTAT)) & 0x8000))/* If complete packet received.. */
    {
        if (!(stat & 0x4000))               /* ..and no errors */
        {
            p = (WORD *)pkt;                /* Get data ptr & length */
            len = minw((WORD)(stat&0x7ff), MAXFRAME);
            n = (len+1) >> 1;
            while (n--)                     /* Read bytes */
                *p++ = GETREG(FIFO);
        }
        CMD(CMD_RXDISC, 0);                 /* Discard received packet */
    }
    return(len);                            /* Return length excl. CRC */
}

/* Send Ethernet packet given len excl. CRC, return length */
WORD put_ether3c(void *pkt, WORD len)
{
    register WORD n, *p;

    p = (WORD *)pkt;                        /* Get length & word ptr */
    len = minw(MAXFRAME, maxw(MINFRAME, len));
    SETREG(FIFO, len);                      /* Send length */
    SETREG(FIFO, 0);                        /* ..and dummy word */
    n = (((len+3) & 0xffc) >> 1);           /* Round len up to DWORD boundary */
    while (n--)                             /* Send data */
        SETREG(FIFO, *p++);
    return(len);
}

/* Do ID sequence to put board in ID command state */
void write_idseq(void)
{
    WORD a=0xff;
    int i;

    outp(IDPORT, 0);
    outp(IDPORT, 0);
    for (i=0; i<255; i++)
    {
        outp(IDPORT, a);
        if ((a <<= 1) & 0x100)
            a ^= 0xcf;
    }
}

/* Read EEPROM data (if already in ID command state) */
WORD read_eeword(BYTE oset)
{
    int i;
    WORD w=0;

    outp(IDPORT, 0x80+oset);
    delay(1);
    for (i=0; i<16; i++)
        w = (w<<1) | (inpw(IDPORT) & 1);
    return(w);
}

/* EOF */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体在线国模精品偷拍| 欧美不卡在线视频| 日韩欧美国产1| 亚洲精品国产一区二区精华液| 日韩经典中文字幕一区| 91麻豆免费观看| 久久综合色婷婷| 亚洲无人区一区| 色综合夜色一区| 国产欧美一区二区在线| 久久9热精品视频| 欧美精品视频www在线观看| 中文字幕在线观看一区| 国产综合一区二区| 精品裸体舞一区二区三区| 午夜欧美大尺度福利影院在线看| www.欧美.com| 久久精品亚洲乱码伦伦中文 | 欧美色视频在线观看| 国产午夜精品久久久久久久| 免费成人美女在线观看| 在线播放/欧美激情| 亚洲小说欧美激情另类| 色综合天天天天做夜夜夜夜做| 欧美一二三四区在线| 亚洲小说欧美激情另类| 91精品办公室少妇高潮对白| 国产欧美日韩另类一区| 国产精品 欧美精品| 久久婷婷国产综合精品青草| 奇米影视7777精品一区二区| 日韩欧美色综合网站| 久久激情综合网| 精品人在线二区三区| 老色鬼精品视频在线观看播放| 91精品在线观看入口| 丝袜亚洲另类丝袜在线| 日韩精品一区在线观看| 国内精品伊人久久久久影院对白| 欧美成人a在线| 国产一区在线看| 欧美经典三级视频一区二区三区| 国产精品综合久久| 国产精品久久久久久久第一福利| 99久久国产综合精品麻豆| 中文字幕中文在线不卡住| 色综合久久中文综合久久牛| 亚洲精品亚洲人成人网 | 国产91精品一区二区麻豆网站| wwww国产精品欧美| 成人午夜看片网址| 亚洲免费看黄网站| 91精品免费在线观看| 国产一二精品视频| 日韩理论片中文av| 欧美日韩亚洲国产综合| 免费成人在线网站| 国产视频一区二区三区在线观看| kk眼镜猥琐国模调教系列一区二区| 国产精品电影一区二区| 欧美福利视频导航| 国产不卡视频一区二区三区| 亚洲欧美经典视频| 91.com视频| 99re成人在线| 免费高清不卡av| 亚洲伦理在线精品| 日韩免费观看2025年上映的电影| 成人一级片在线观看| 亚洲高清视频在线| 国产亚洲欧美在线| 欧美精品久久天天躁| 不卡高清视频专区| 蜜臀av一级做a爰片久久| 最好看的中文字幕久久| 欧美理论片在线| 99精品1区2区| 国产揄拍国内精品对白| 亚洲国产精品麻豆| 中文字幕一区二区三区色视频| 欧美日韩国产综合视频在线观看| 国产激情视频一区二区三区欧美| 一区2区3区在线看| 国产精品你懂的在线欣赏| 欧美日韩精品一区二区天天拍小说 | 日本不卡一区二区三区| 欧美国产综合一区二区| 69久久夜色精品国产69蝌蚪网| 福利电影一区二区| 日本伊人色综合网| 亚洲不卡av一区二区三区| 亚洲欧美在线aaa| 久久亚洲捆绑美女| 91精品国模一区二区三区| 色综合视频一区二区三区高清| 精品一区二区三区久久| 午夜天堂影视香蕉久久| 日韩一区欧美小说| 一区二区中文视频| 国产精品你懂的在线| 国产三级一区二区三区| 欧美成人r级一区二区三区| 欧美精品高清视频| 欧美伊人久久久久久久久影院| 99精品黄色片免费大全| 成人免费视频视频| 国产成人h网站| 国产成人免费在线| 国产成人8x视频一区二区| 国产老肥熟一区二区三区| 国产精品正在播放| 粉嫩av亚洲一区二区图片| 国产综合色精品一区二区三区| 日本一不卡视频| 麻豆91小视频| 国产在线国偷精品免费看| 久久精品国产精品亚洲精品| 日韩国产欧美在线观看| 蜜臀91精品一区二区三区| 麻豆视频观看网址久久| 精品在线一区二区| 国产毛片精品视频| 国产91精品一区二区麻豆网站| 成人一区二区在线观看| 一本到不卡免费一区二区| 色就色 综合激情| 欧美精品久久久久久久多人混战 | 日韩免费高清视频| 久久综合成人精品亚洲另类欧美 | 91亚洲精品久久久蜜桃网站 | www.性欧美| 成人h动漫精品一区二| 色成年激情久久综合| 欧美日韩不卡一区二区| 日韩欧美一二区| 国产精品午夜在线观看| 亚洲已满18点击进入久久| 亚洲国产精品一区二区尤物区| 蜜桃视频第一区免费观看| 国产精品一二二区| 一本一道久久a久久精品| 欧美老年两性高潮| 精品成a人在线观看| 中文字幕一区二区三区精华液| 亚洲成国产人片在线观看| 精品一区二区三区久久久| 99久久国产综合精品色伊| 欧美精品第1页| 国产人成亚洲第一网站在线播放 | 偷拍一区二区三区四区| 日本亚洲欧美天堂免费| 成人午夜av电影| 欧美色男人天堂| 久久久不卡网国产精品一区| 一区二区三区在线视频播放| 蜜桃久久久久久| 色妞www精品视频| 久久久久久久久伊人| 亚洲1区2区3区视频| 福利一区二区在线观看| 欧美三级一区二区| 中文天堂在线一区| 青青草一区二区三区| caoporm超碰国产精品| 精品欧美乱码久久久久久1区2区| 亚洲免费av高清| 国产精品自在欧美一区| 69堂精品视频| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品一区二区无线| 欧美一区二区三区免费大片| 亚洲色图制服丝袜| 国产精品一二一区| 日韩精品在线看片z| 亚洲国产视频一区| 色综合中文字幕国产| 久久久天堂av| 久久狠狠亚洲综合| 欧美日本国产一区| 亚洲久草在线视频| 91浏览器在线视频| 日本一区二区成人在线| 极品少妇xxxx偷拍精品少妇| 欧美日本韩国一区二区三区视频| 亚洲人吸女人奶水| 99久久精品免费看国产| 日本一区免费视频| 国产成人自拍网| 久久伊人中文字幕| 美日韩黄色大片| 日韩欧美亚洲国产另类| 日韩 欧美一区二区三区| 欧美日韩一级片网站| 亚洲国产精品久久人人爱| 在线视频你懂得一区| 一区二区三区在线免费视频| 色婷婷综合在线| 亚洲精品成人天堂一二三| 在线免费观看日韩欧美| 性欧美大战久久久久久久久|