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

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

?? esmcend.c

?? 基于嵌入式操作系統VxWorks的lan91c111的驅動程序
?? 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一区二区三区免费野_久草精品视频
国产日韩亚洲欧美综合| 欧美国产精品久久| 欧美本精品男人aⅴ天堂| 日韩高清国产一区在线| 成人爱爱电影网址| 亚洲精品欧美激情| 欧美成人bangbros| 欧美一区二区精品在线| 欧美日韩中文另类| 国产成人综合在线| 九色综合狠狠综合久久| 国产精品资源站在线| 91国产丝袜在线播放| 欧美精品一区二区久久久| 色综合久久综合网97色综合| 欧美欧美欧美欧美| 欧美大尺度电影在线| 亚洲在线成人精品| 亚洲精品国产无套在线观| 丰满亚洲少妇av| 欧美精品久久一区| 欧美酷刑日本凌虐凌虐| 亚洲视频在线一区观看| 国产亚洲一本大道中文在线| 日韩免费高清电影| 三级影片在线观看欧美日韩一区二区| 丰满少妇在线播放bd日韩电影| av影院午夜一区| 国产精品18久久久久久久久 | 亚洲欧美另类久久久精品| 黄网站免费久久| 成人av先锋影音| 国产精品美日韩| 日韩av一区二区三区| 欧美精品乱码久久久久久按摩| 国产精品热久久久久夜色精品三区| 日本在线不卡一区| 日韩一区二区在线看| 精品一区二区av| 欧美一区二区日韩一区二区| 久久99久久精品| 精品福利一二区| 国产成人欧美日韩在线电影| 国产精品美女一区二区三区| 色天天综合久久久久综合片| 亚洲激情自拍偷拍| 3d动漫精品啪啪一区二区竹菊| 麻豆一区二区在线| 国产精品美女久久久久av爽李琼 | 久久91精品国产91久久小草| 久久先锋影音av| 成人不卡免费av| 日本成人在线一区| 久久亚洲一区二区三区明星换脸| 精品一区二区三区免费播放| 国产亚洲欧美一级| 在线观看日韩高清av| 日韩美女一区二区三区四区| 国产乱子伦一区二区三区国色天香| 国产精品美日韩| 91精选在线观看| 欧美性大战久久久久久久蜜臀| 亚洲自拍偷拍网站| 日韩亚洲欧美高清| 色悠悠久久综合| 国产成人鲁色资源国产91色综 | 国产一区二区三区在线观看免费视频 | 色偷偷久久人人79超碰人人澡| 精品亚洲成av人在线观看| 日韩**一区毛片| 无码av免费一区二区三区试看| 亚洲精品日韩综合观看成人91| 国产日韩欧美精品电影三级在线| 久久综合久久综合久久综合| 精品成人在线观看| 日本一区二区在线不卡| 国产丝袜在线精品| 综合色中文字幕| 午夜精品久久久久影视| 亚洲欧美aⅴ...| 亚洲精品中文字幕在线观看| 国产精品国产三级国产aⅴ中文| 欧美v亚洲v综合ⅴ国产v| 欧美午夜精品一区二区三区| 欧美一区二区人人喊爽| 欧美电影免费观看高清完整版在 | 久久久久久9999| 尤物在线观看一区| 成人一区二区三区中文字幕| 韩国中文字幕2020精品| 免费成人av在线| 麻豆一区二区99久久久久| 亚洲国产日韩综合久久精品| 美国欧美日韩国产在线播放| 99精品国产视频| 26uuu色噜噜精品一区| 亚洲精品大片www| 国产综合色产在线精品| 日本高清不卡在线观看| 日韩一区中文字幕| 欧美日韩综合一区| 久久不见久久见免费视频7| 精品国产一二三| 国产夫妻精品视频| 中文字幕日韩av资源站| 欧美三日本三级三级在线播放| 亚洲bdsm女犯bdsm网站| 久久精品人人做人人综合| 色又黄又爽网站www久久| 日本人妖一区二区| 成人欧美一区二区三区白人| 在线播放欧美女士性生活| 亚洲一区二区偷拍精品| av资源网一区| 国产精品的网站| 91久久精品一区二区三| 一区二区三区日韩欧美精品| 一本到不卡精品视频在线观看| 久久久精品人体av艺术| 国产乱码精品一品二品| 欧美一级日韩免费不卡| 亚洲女同一区二区| 欧美日韩一区二区三区高清| 亚洲人成小说网站色在线| 国产91丝袜在线播放0| 国产视频视频一区| 免费观看日韩电影| 91在线免费看| 欧美不卡一区二区三区| 亚洲成人一区二区在线观看| 欧美三级午夜理伦三级中视频| 亚洲国产综合色| 18成人在线视频| 国产精品午夜在线观看| 精品亚洲免费视频| 久久久蜜桃精品| 精品在线一区二区| 在线视频一区二区三区| 欧美日韩欧美一区二区| 亚洲精品视频在线| 欧美午夜理伦三级在线观看| av午夜精品一区二区三区| 亚洲欧美国产高清| 日韩欧美高清dvd碟片| 91精品国产综合久久久久久久| 免费观看久久久4p| www久久久久| 日本道精品一区二区三区| 欧美国产综合一区二区| 亚洲午夜精品在线| 色婷婷精品久久二区二区蜜臂av| 亚洲色图丝袜美腿| 欧美精品日韩一本| 91原创在线视频| 国产不卡高清在线观看视频| 免费成人你懂的| 一区二区三区.www| 日韩欧美国产小视频| 欧美电视剧在线看免费| 国产乱码精品一区二区三区忘忧草| 午夜精品视频在线观看| 国产在线国偷精品免费看| 国产成都精品91一区二区三| 欧美在线观看一二区| 精品国产凹凸成av人导航| 中文字幕在线播放不卡一区| 日韩福利电影在线观看| 99免费精品在线观看| 制服丝袜日韩国产| 在线不卡免费av| 国产精品国产三级国产普通话99 | 97久久精品人人爽人人爽蜜臀| 综合久久国产九一剧情麻豆| 久久久不卡网国产精品一区| 国产午夜精品久久久久久免费视| 欧美视频一区二区在线观看| 91久久精品日日躁夜夜躁欧美| 欧美在线高清视频| 日韩欧美激情一区| 国产欧美日本一区视频| 亚洲电影第三页| 国产高清无密码一区二区三区| 国产成人精品免费| 欧美乱妇一区二区三区不卡视频| 日韩三级在线免费观看| 国产欧美日韩卡一| 久久亚洲综合av| 精品国产乱码久久久久久久久| 欧美一级午夜免费电影| 欧美大白屁股肥臀xxxxxx| 国产精品久99| 亚洲第一会所有码转帖| 国产精品一二一区| 欧美一区二区在线播放| 欧美国产一区二区在线观看| 国产伦精品一区二区三区免费迷| 日韩欧美激情一区| 久久国产精品99精品国产| 日韩欧美激情一区| 国产综合成人久久大片91|