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

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

?? ether3c.c

?? 一個(gè)專為嵌入式系統(tǒng)編寫的小型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 */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久嫩草精品久久久精品| 亚洲主播在线播放| 日韩欧美国产综合一区| 在线观看日韩高清av| 成人午夜电影久久影院| 国产一区91精品张津瑜| 另类中文字幕网| 琪琪久久久久日韩精品| 婷婷亚洲久悠悠色悠在线播放| 中文字幕在线不卡一区二区三区| 久久亚洲一区二区三区明星换脸| 91精品国产一区二区| 欧美日韩在线不卡| 欧美视频一区在线观看| 91成人看片片| 色呦呦国产精品| 91色九色蝌蚪| 在线观看一区二区视频| 欧美写真视频网站| 91小视频在线| 色欧美日韩亚洲| 91久久香蕉国产日韩欧美9色| 色婷婷av一区二区三区gif| 在线观看www91| 欧美日韩国产精品成人| 在线成人免费观看| 欧美一个色资源| 精品欧美一区二区三区精品久久| 精品国产亚洲在线| 久久久夜色精品亚洲| 久久久影院官网| 国产精品三级久久久久三级| 国产精品久久久久久久岛一牛影视 | 精品在线你懂的| 五月婷婷欧美视频| 丝袜诱惑亚洲看片 | 麻豆精品一区二区综合av| 免费在线看一区| 国产盗摄一区二区三区| 成人美女在线观看| 一本大道av一区二区在线播放| 欧美性大战久久久| 欧美不卡一区二区三区四区| 久久久久成人黄色影片| 中文字幕一区二| 亚洲一区二区精品久久av| 五月综合激情婷婷六月色窝| 极品瑜伽女神91| 成人激情图片网| 欧美影院一区二区| 亚洲精品在线免费播放| 国产日韩欧美不卡在线| 亚洲综合丝袜美腿| 久久99精品网久久| 91玉足脚交白嫩脚丫在线播放| 在线观看三级视频欧美| 精品乱人伦一区二区三区| 中文欧美字幕免费| 亚洲国产一区二区视频| 国产乱人伦偷精品视频免下载| 99久久精品免费看国产免费软件| 欧美性生活久久| 欧美草草影院在线视频| 亚洲六月丁香色婷婷综合久久 | 99精品在线免费| 欧美日韩情趣电影| 久久久91精品国产一区二区三区| 亚洲欧洲三级电影| 奇米综合一区二区三区精品视频| 国产99久久久精品| 欧美日韩精品二区第二页| 国产欧美中文在线| 亚洲男同性视频| 国模娜娜一区二区三区| 在线中文字幕不卡| 日韩欧美亚洲国产另类| 99在线精品视频| 欧美一区二区人人喊爽| 中文字幕一区av| 久久福利资源站| 欧美日韩精品欧美日韩精品| 国产精品久久久久久亚洲伦| 人人狠狠综合久久亚洲| 色欧美乱欧美15图片| 国产日韩视频一区二区三区| 日日夜夜精品视频天天综合网| 不卡影院免费观看| 欧美大白屁股肥臀xxxxxx| 一区二区三区日韩精品视频| 国产精华液一区二区三区| 日韩一区二区三区电影| 有坂深雪av一区二区精品| 国产一区欧美二区| 91精品国产色综合久久不卡电影| 亚洲视频一区在线观看| 成人网页在线观看| 2024国产精品视频| 奇米一区二区三区| 欧美视频在线一区| 一区二区三区四区亚洲| 成人伦理片在线| 久久精品无码一区二区三区| 美女网站一区二区| 91麻豆精品国产自产在线观看一区 | 天天影视涩香欲综合网| 色天天综合久久久久综合片| 国产女人aaa级久久久级| 日韩不卡一区二区三区| 欧洲亚洲国产日韩| 亚洲色图另类专区| 99久久精品免费看| 国产精品国产三级国产普通话三级 | 亚洲综合色自拍一区| 91麻豆swag| 亚洲精品中文在线| 99久久精品免费看国产 | 婷婷亚洲久悠悠色悠在线播放| 91久久精品午夜一区二区| 1024成人网| jlzzjlzz亚洲女人18| 国产精品看片你懂得| 不卡一区二区在线| 亚洲欧洲在线观看av| 91在线porny国产在线看| 日韩美女视频19| 一本色道亚洲精品aⅴ| 亚洲免费在线播放| 色综合久久综合网| 亚洲精品免费播放| 欧美性生活久久| 五月综合激情婷婷六月色窝| 欧美三级日韩三级| 丝袜亚洲另类欧美| 日韩欧美中文字幕公布| 国产在线精品不卡| 中文字幕的久久| 日本久久电影网| 日韩精品久久久久久| 国产午夜精品在线观看| 国产传媒欧美日韩成人| 亚洲天堂成人网| 欧美性生活影院| 蜜桃在线一区二区三区| 欧美精品一区二区三区一线天视频| 久久精品国产澳门| 欧美激情在线观看视频免费| 成人av小说网| 亚洲色图在线播放| 9191精品国产综合久久久久久| 久久精品国产色蜜蜜麻豆| 国产精品网站导航| 在线免费亚洲电影| 免费高清成人在线| 日本一区二区三区高清不卡| 91黄色激情网站| 蜜桃视频免费观看一区| 国产精品天美传媒沈樵| 欧美午夜精品一区| 久草在线在线精品观看| 国产精品电影一区二区三区| 欧美日韩一区二区三区四区五区| 久久99在线观看| 亚洲婷婷国产精品电影人久久| 欧美日本在线视频| 国产激情一区二区三区桃花岛亚洲| 亚洲免费高清视频在线| 日韩一区二区精品在线观看| 高清不卡一区二区| 午夜伊人狠狠久久| 亚洲国产高清在线观看视频| 欧美唯美清纯偷拍| 青娱乐精品视频| 久久精品夜色噜噜亚洲aⅴ| 99国产精品久久久久| 香港成人在线视频| 久久精品一区二区三区av| 色婷婷久久久综合中文字幕| 日韩成人精品视频| 亚洲丝袜另类动漫二区| 日韩一区二区视频| 成人小视频免费观看| 午夜久久久影院| 久久综合五月天婷婷伊人| 一本到一区二区三区| 精品中文av资源站在线观看| 国产精品传媒入口麻豆| 欧美日韩久久久一区| 国产麻豆视频一区| 亚洲老妇xxxxxx| 国产喷白浆一区二区三区| 欧美日韩免费视频| 国产成人高清视频| 麻豆成人av在线| 亚洲一区在线电影| 国产精品视频免费看| 精品少妇一区二区三区视频免付费| 色噜噜狠狠成人网p站| 国产成人午夜精品影院观看视频 | 欧美片网站yy| 91一区二区在线|