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

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

?? esmcend.c

?? 基于嵌入式操作系統(tǒng)VxWorks的lan91c111的驅(qū)動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* esmcEnd.c - SMSC 91cxx END network interface driver *//* Copyright 1984-2004 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01h,17jan04,jch  Modified to load esmcEnd.h and smsc83c180.h locally for                 Mainstone.  Various modifications to accomodate several                 (undocumented) restrictions imposed by the Mainstone design                 on access to the LAN91C111's register set.  Added optional                 support for emptying and releasing internal FIFO pages in                 ISR context.01g,28mar03,bjn  Problem with mdioRead01f,18feb03,bjn  Fix esmcPollSend routine01e,31jan03,bjn  Fix compiler warning01d,15jan03,bjn  Added support for LAN91C111 device.01c,08oct02,bjn  Fixed problems found with vxRegression tests01b,15jul02,dnb  removed all byte accesses to simplify port to Kanis board01a,07jun02,dnb  written from templateEnd.c and if_emsc.c*//*DESCRIPTIONThis module implements the SMSC 91CXX network interface driver.EXTERNAL SUPPORT REQUIREMENTSThis driver requires several external support functions, defined as macros:.CS    SYS_INT_CONNECT(pDev, routine, arg)    SYS_INT_DISCONNECT (pDev, routine, arg)    SYS_INT_ENABLE(pDev)    SYS_INT_DISABLE(pDev)    data = READ_WORD(pDev, reg)    WRITE_WORD(pDev, reg, data)    ESMC_SWITCH_BANK(pDev, newBank).CEThese macros allow the driver to be customized for BSPs that usespecial versions of these routines.The macro SYS_INT_CONNECT is used to connect the interrupt handler tothe appropriate vector.  By default it is the routine intConnect().The macro SYS_INT_DISCONNECT is used to disconnect the interrupt handler priorto unloading the module.  By default this is a dummy routine thatreturns OK.The macro SYS_INT_ENABLE is used to enable the interrupt level for theend device.  It is called once during initialization. It calls anexternal board level routine sysSmc91cxxIntEnable().The macro SYS_INT_DISABLE is used to disable the interrupt level for theend device.  It is called once during shutdown. It calls anexternal board level routine sysSmc91cxxIntDisable().The macros READ_WORD and WRITE_WORD are used for accessing theesmc device.  The default macros map these operations ontosysInWord() and sysOutWord().The macro ESMC_SWITCH_BANK selects the register bank.  The default macrouses WRITE_WORD to do this.The HI_BYTE and LO_BYTE macros return the high and low bytes, respectively,of the word-length registers.ON_EXIT_ISR and SWAP_BYTES_IF_NECESSARY are (hopefully self-explanatory) macrosused to aid porting.INCLUDES: end.h endLib.h etherMultiLib.hSEE ALSO: muxLib, endLib, .I "Writing an Enhanced Network Driver"*//* * Disable "statement not found" warnings from the Diab compiler so that the * WRITE_WORD macro works as designed.  The GNU compiler doesn't need this. */#ifdef _DIAB_TOOL#pragma option -Xlint=0x80#endif /* _DIAB_TOOL *//* includes */#include  "vxWorks.h"#include  "stdlib.h"#include  "logLib.h"#include  "sysLib.h"#include  "stdio.h"#include  "taskLib.h"#include  "iv.h"#include  "intLib.h"#include  "netLib.h"#include  "etherMultiLib.h"#include  "end.h"            /* Common END structures. */#include  "endLib.h"#include  "net/mbuf.h"#include  "esmcEnd.h"#include  "smsc83c180.h"#include  "netinet/if_ether.h"#ifdef ESMC_USE_ISR_COPY#include  "lstLib.h"#endif /* ESMC_USE_ISR_COPY *//* defines */#undef DRV_DEBUG/* Configuration items *//* Auto Negotiation */ #define ENET_AUTO        0    /* 0:Enable  Auto-Negotiation */                              /* 1:Disable Auto-Negotiation *//* Ethernet Speed */#define ENET_SPEED_10          10000000   /* 10 Mbit/sec interface */#define ENET_SPEED_100         100000000  /* 100 Mbit/sec interface *//* Duplex Mode */#define ENET_DUPLEX_HALF    0#define ENET_DUPLEX_FULL    1#define ATTACHMENT_DEFAULT      0       /* use card as configured */#define ATTACHMENT_AUI          1       /* AUI  (thick, DIX, DB-15) */#define ATTACHMENT_BNC          2       /* BNC  (thin, 10BASE-2) */#define ATTACHMENT_RJ45         3       /* RJ-45 (twisted pair, TPE, 10BASE-T)*//* Definitions for the flags field */#define END_POLLING                   0x01#define ESMC_RCV_HANDLING_FLAG        0x02/* Debug macros */#ifdef  DRV_DEBUG#define DRV_DEBUG_OFF                 0x0000#define DRV_DEBUG_RX                  0x0001#define DRV_DEBUG_TX                  0x0002#define DRV_DEBUG_INT                 0x0004#define DRV_DEBUG_POLL                (DRV_DEBUG_POLL_RX | DRV_DEBUG_POLL_TX)#define DRV_DEBUG_POLL_RX             0x0008#define DRV_DEBUG_POLL_TX             0x0010#define DRV_DEBUG_LOAD                0x0020#define DRV_DEBUG_IOCTL               0x0040#define DRV_DEBUG_ERR                 0x0080#define DRV_DEBUG_MEM_INIT            0x0100#define DRV_DEBUG_CONFIG              0x0200#define DRV_DEBUG_ASSERT              0x0400#define DRV_DEBUG_91C100FD            0x0800/*#define DRV_DEBUG_MEM_INIT            0x1000#define DRV_DEBUG_MEM_INIT            0x2000#define DRV_DEBUG_MEM_INIT            0x4000*/#define DRV_ASSERT(arg)                    \   do{                                     \        if(esmcDebug & DRV_DEBUG_ASSERT)   \        {                                  \            if(!(arg))                     \            {                              \                logMsg("Assertion failed: %s, %s, %d",     \                (int) #arg,(int)__FILE__, __LINE__,4,5,6); \            }                              \        }                                  \    } while(0)#define DRV_DEBUG_FN_TRACE            0x8000#define DRV_LOG(FLG, X0, X1, X2, X3, X4, X5, X6)        \    do                                                  \        {                                               \    if (esmcDebug & (FLG))                              \        logMsg (X0, X1, X2, X3, X4, X5, X6);            \    }                                                   \    while (0)#else /* DRV_DEBUG */#define DRV_LOG(FLG, X0, X1, X2, X3, X4, X5, X6)    do {} while (0)#define DRV_ASSERT(arg) ((void)0)#endif /* DRV_DEBUG *//* * Default macro definitions for BSP interface.  These macros can be * redefined in a wrapper file, to generate a new module with an * optimized interface. *//* Macro to connect interrupt handler to vector */#ifndef SYS_INT_CONNECT#define SYS_INT_CONNECT(pDev,rtn,arg,pResult)                              \    {                                                                      \    *(pResult) = intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC ((pDev)->ivec),   \               rtn, (int)(arg));                                           \    }#endif/* Macro to disconnect interrupt handler from vector */#ifndef SYS_INT_DISCONNECTLOCAL VOID dummyIsr (void) { };#define SYS_INT_DISCONNECT(pDev,rtn,arg,pResult)                           \    {                                                                      \    IMPORT STATUS intConnect();                                            \    *(pResult) = intConnect ((VOIDFUNCPTR *)INUM_TO_IVEC ((pDev)->ivec),   \                 dummyIsr, (int)(arg));                                    \    }#endif/* Macro to enable the appropriate interrupt level */#ifndef SYS_INT_ENABLE#define SYS_INT_ENABLE(pDev)                                             \    {                                                                    \    IMPORT STATUS s3c2410IntLvlEnable();                                      \    s3c2410IntLvlEnable ((pDev)->ilevel);                                   \    }#endif/* Macro to disable the appropriate interrupt level */#ifndef SYS_INT_DISABLE#define SYS_INT_DISABLE(pDev)                                           \    {                                                                   \    IMPORT STATUS	s3c2410IntLvlDisable();                                    \    sysEsmcIntDisable ((pDev)->ilevel);                                 \    }#endif/* * Macros to do word access to the chip.  Default assumes an * I/O mapped device accessed in the x86 fashion. */#ifndef WRITE_WORD#define WRITE_WORD(pDev, addr, value) \     (sysOutWord ((pDev)->base+(addr), value))#endif#ifndef READ_WORD#define READ_WORD(pDev, addr) \     sysInWord ((pDev)->base+(addr))#endif#ifndef ESMC_SWITCH_BANK#define ESMC_SWITCH_BANK(pDev, newBank)              \        WRITE_WORD(pDev, ESMC_BANK_SELECT, newBank);#endifIMPORT STATUS s3c2410IntLvlAck(int,int);#ifndef ON_EXIT_ISR#define ON_EXIT_ISR(pDev) (( STATUS )s3c2410IntLvlAck(pDev,0));#endif#ifndef SWAP_BYTES_IF_NECESSARY#define SWAP_BYTES_IF_NECESSARY(x) (x)#endif#ifndef LO_BYTE#define LO_BYTE(x) (x & 0xff)#endif#ifndef HI_BYTE#define HI_BYTE(x) (x >> 8)#endif/* cache macros */#ifndef ESMC_CACHE_INVALIDATE#define ESMC_CACHE_INVALIDATE(address, len)  (void(0))#endif#ifndef CACHE_PIPE_FLUSH#define CACHE_PIPE_FLUSH() (void(0))#endif/* A shortcut for getting the hardware address from the MIB II stuff. */#define END_HADDR(pEnd)    \        ((pEnd)->mib2Tbl.ifPhysAddress.phyAddress)#define END_HADDR_LEN(pEnd) \        ((pEnd)->mib2Tbl.ifPhysAddress.addrLength)#ifdef ESMC_USE_ISR_COPY/* Cluster preallocation for received frame copy within ISR */#define ESMC_CLUSTER_PREALLOC   (16)        /* pool clusters to preallocate */#endif /* ESMC_USE_ISR_COPY *//* The definition of the driver control structure */typedef struct esmc_device    {    END_OBJ       endObj;          /* The class we inherit from. */    END_ERR       lastError;       /* Last error passed to muxError */    int           unit;            /* unit number */    unsigned long base;            /* device I/O base address */    int           ilevel;          /* h/w interrupt level */    int           ivec;            /* interrupt vector */    int           config;          /* configuration flags */    char          enetAddr[6];     /* ethernet address */    char          mcastFilter[8];  /* multicast filter */    int           offset;          /* packet data offset */    volatile int  flags;    volatile unsigned short imask;    unsigned char chipId;    unsigned char chipRev;    unsigned short duplex;    unsigned short speed;    int            phyAddr;     unsigned int  rxOverrun;     unsigned int  lateCollisions;    unsigned int  _16Collisions;    unsigned int  fifoTxUnderrun;    unsigned int  sqet;    unsigned int  lostCarrier;    unsigned int  alignErr;    unsigned int  badCrc;    unsigned int  tooLong;    unsigned int  tooShort;#ifdef ESMC_USE_ISR_COPY    LIST          freeClusters;         /* free preallocated cluster list */    LIST          busyClusters;         /* busy preallocated cluster list */#endif /* ESMC_USE_ISR_COPY */    CL_POOL_ID    clPoolId;        /* cluster pool */    } ESMC_DEVICE;#ifdef ESMC_USE_ISR_COPY/* Cluster list node */typedef struct    {    NODE        links;                  /* list links */    char        *pCluster;              /* cluster pointer */    int         length;                 /* packet length */    UINT16      packetNo;               /* packet number */    UINT16      statusRx;               /* receiver status */    } CLUSTER_NODE;#endif /* ESMC_USE_ISR_COPY *//* globals */#ifdef    DRV_DEBUGunsigned int esmcDebug = 0; /* 0xffffffff; */ /*  DRV_DEBUG_LOAD |  DRV_DEBUG_ASSERT;  *///unsigned int esmcDebug = 0xffffffff; /* 0xffffffff; */ /*  DRV_DEBUG_LOAD |  DRV_DEBUG_ASSERT;  */#endif    /* DRV_DEBUG *//* locals */LOCAL char * pName[12] =    {        NULL,        NULL,        NULL,        "LAN91C94",        "LAN91C95",        "LAN91C96",        "LAN91C100",        "LAN91C100FD",        "LAN91C110"        "LAN91C111"            };typedef struct    {    char irq;    char reg;    } IRQ_TABLE;LOCAL NET_FUNCS esmcFuncTable;/* forward declarations */IMPORT    int endMultiLstCnt (END_OBJ* pEnd);LOCAL void phyResetLAN91C111 (ESMC_DEVICE *);/* This is the only externally visible interface. */END_OBJ*     esmcEndLoad    (char* initString);/********************************************************************************* fsmcClkMDIO - Set up FEAST to communicate with PHY** RETURNS: N/A*/LOCAL void esmcClkMDIO    (    ESMC_DEVICE * pDev,     unsigned int MII_MGMTData    )    {#ifdef ESMC_LAN91C111    WRITE_WORD(pDev, ESMC_MGMT, MII_MGMTData);#endif    WRITE_WORD(pDev, ESMC_MGMT, MII_MGMTData | ESMC_MGMT_MCLK);     WRITE_WORD(pDev, ESMC_MGMT, MII_MGMTData);    }/********************************************************************************* mdioRead - Read the MDI pin of the ESMC_MGMT register** RETURNS: N/A*/LOCAL unsigned short mdioRead    (    ESMC_DEVICE * pDev,    unsigned char RegAdd    )    {    int i;    unsigned short wData;    unsigned short MII_MGMTval;    ESMC_SWITCH_BANK(pDev, 3);    MII_MGMTval = READ_WORD(pDev, ESMC_MGMT);    MII_MGMTval &= 0xfff0; /* masking off lowest nibble */     /* Output Preamble (32 '1's) */    for (i=0;i<32;i++)      esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | ESMC_MGMT_MDO);     /* Output Start of Frame ('01') */     for (i=0;i<2;i++)      esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | i);     /* Output OPCode ('01' for write or '10' for Read) */     esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | 1 );     esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | 0 );     /* Output PHY Address */     for (i=4;i>=0;i--)      esmcClkMDIO(pDev, MII_MGMTval | ESMC_MGMT_MDOE | ((pDev->phyAddr>>i) & 0x01) ); 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品精华液2区45| 欧美一区二区三区不卡| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩美女视频一区二区| 99久久精品一区| 一区二区在线免费观看| 欧美日韩国产综合久久| 麻豆精品在线播放| 久久精品视频在线免费观看| 成人免费毛片嘿嘿连载视频| 一区二区三区成人| 欧美不卡一区二区三区四区| 国产91精品露脸国语对白| 亚洲欧美一区二区三区国产精品| 欧美性大战xxxxx久久久| 蜜桃视频一区二区三区| 国产欧美1区2区3区| 色综合久久88色综合天天免费| 日韩电影在线免费看| 精品播放一区二区| 91视频com| 男人的天堂亚洲一区| 精品国产一区二区三区忘忧草| 久久er精品视频| 久久久精品影视| 色欧美乱欧美15图片| 美国av一区二区| 中文字幕一区二区三区不卡在线| 欧美人与性动xxxx| 国产毛片一区二区| 亚洲成av人片在线观看无码| 国产日韩欧美精品在线| 欧美性猛片xxxx免费看久爱| 韩国三级中文字幕hd久久精品| 亚洲精品视频在线看| 欧美精品一区二区三区蜜臀| 欧美天堂一区二区三区| 国产一区二区三区蝌蚪| 亚洲午夜电影在线观看| 久久精品人人做人人综合| 欧美日韩亚洲不卡| 成人av在线播放网址| 免费成人在线播放| 一个色在线综合| 国产精品女人毛片| 欧美tickling网站挠脚心| 欧美性猛交xxxxxx富婆| 成人免费高清在线观看| 久久激情五月婷婷| 香蕉久久一区二区不卡无毒影院 | 中文字幕不卡一区| 欧美一区二区三区啪啪| 91久久精品一区二区三| 国产99久久久久| 国产一区在线精品| 久久精品99久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲国产精品一区二区久久恐怖片| 国产精品第一页第二页第三页| 久久久噜噜噜久久人人看| 日韩限制级电影在线观看| 欧美日韩卡一卡二| eeuss影院一区二区三区| 国产一区二区三区黄视频 | 国产精品亚洲第一| 麻豆成人久久精品二区三区红| 亚洲.国产.中文慕字在线| 亚洲综合男人的天堂| 亚洲人成电影网站色mp4| 中文字幕日韩一区二区| 亚洲欧美中日韩| 国产精品成人网| 国产精品国产三级国产普通话蜜臀 | 中文在线免费一区三区高中清不卡| 欧美成人一区二区三区片免费| 欧美精品v国产精品v日韩精品| 在线观看中文字幕不卡| 精品视频一区二区不卡| 精品视频一区 二区 三区| 欧美三区在线观看| 91超碰这里只有精品国产| 91麻豆精品国产自产在线| 欧美精选在线播放| 91精品在线观看入口| 日韩一二在线观看| 精品少妇一区二区三区免费观看 | 9191国产精品| 欧美成人bangbros| 久久久国际精品| 欧美国产日韩a欧美在线观看| 国产精品三级电影| 亚洲精品视频一区| 午夜欧美大尺度福利影院在线看| 日韩电影在线免费| 国产精品一区二区三区99| 成人亚洲一区二区一| 在线观看精品一区| 美女视频一区二区| 亚洲丝袜制服诱惑| 五月天久久比比资源色| 日本成人中文字幕| 国产一区亚洲一区| 97se亚洲国产综合自在线不卡| 在线观看国产91| 欧美大片在线观看一区二区| 久久久噜噜噜久久中文字幕色伊伊| 国产精品丝袜91| 亚洲狠狠爱一区二区三区| 久久99久久99小草精品免视看| 国产91精品在线观看| 精品视频一区三区九区| 久久久噜噜噜久久人人看 | 亚洲一二三区视频在线观看| 麻豆成人免费电影| av影院午夜一区| 欧美一区二区三区人| 国产精品久久久久影视| 日本少妇一区二区| 成人精品亚洲人成在线| 欧美日韩国产a| 国产精品午夜免费| 日本免费在线视频不卡一不卡二| 成人黄色免费短视频| 69p69国产精品| 综合分类小说区另类春色亚洲小说欧美| 亚洲国产视频在线| 国产ts人妖一区二区| 5858s免费视频成人| 中文字幕在线一区免费| 久久国产精品99精品国产| 91色视频在线| 国产亲近乱来精品视频| 日韩精品一卡二卡三卡四卡无卡| 成人激情黄色小说| 日韩欧美国产wwwww| 一级女性全黄久久生活片免费| 国产91精品欧美| 日韩精品中文字幕在线不卡尤物| 一区二区三区在线播| 国产精品888| 欧美sm美女调教| 丝袜脚交一区二区| 91精品1区2区| 国产精品不卡一区| 国产精品99久久久久| 欧美一级理论片| 日韩精品电影一区亚洲| 欧洲av在线精品| 一区二区在线免费观看| 91在线视频在线| 国产精品国产三级国产普通话99 | 在线视频中文字幕一区二区| 中文av一区特黄| 国产91在线|亚洲| 久久丝袜美腿综合| 久久精品国产色蜜蜜麻豆| 欧美久久久一区| 天天操天天综合网| 欧美群妇大交群的观看方式| 一二三四社区欧美黄| 欧美色网一区二区| 亚洲成人动漫一区| 欧美少妇性性性| 婷婷久久综合九色综合绿巨人 | 亚洲免费电影在线| 亚洲日本在线天堂| 午夜成人免费电影| 欧美日韩成人一区| 亚洲18色成人| 欧美伦理影视网| 日韩电影在线免费看| 91精品国产乱码久久蜜臀| 日韩影视精彩在线| 3atv在线一区二区三区| 日日夜夜精品视频免费 | 日韩精品在线网站| 老色鬼精品视频在线观看播放| 日韩免费在线观看| 韩国三级电影一区二区| 国产女同互慰高潮91漫画| 成人综合婷婷国产精品久久免费| 亚洲国产精品成人久久综合一区| 懂色av一区二区三区蜜臀 | 欧美一卡二卡三卡四卡| 麻豆成人久久精品二区三区小说| 久久亚区不卡日本| 成人18视频在线播放| 夜夜嗨av一区二区三区四季av | 久久久久久久久久看片| 大陆成人av片| 一区二区三区免费在线观看| 欧美一级专区免费大片| 国产精品99久久久久久久vr| 亚洲欧美日韩精品久久久久| 欧美电影一区二区| 国产成人一区二区精品非洲| 亚洲综合小说图片| 精品美女一区二区三区| eeuss鲁片一区二区三区| 亚洲成人av资源|