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

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

?? at91eth.c

?? 詳細(xì)介紹了DM9161相關(guān)的驅(qū)動函數(shù)及實現(xiàn)
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* at91Eth.c - AT91RM9200 Ethernet controller driver  */#include "vxWorks.h"#include "intLib.h"#include "netLib.h"#include "end.h"#include "endLib.h"#include "cacheLib.h"#include "miiLib.h"#include "errno.h"#include "stdio.h"#include "logLib.h"#include "taskLib.h"#include "config.h"#include "h/drv/intrCtl/at91Intr.h"#include "at91_ether.h"#define  __CLUSTER_OFFSET__ 4#define DRV_DEBUG_RX        0x0001#define DRV_DEBUG_TX        0x0002#define END_CACHE_PHYS_TO_VIRT(x) x#undef  DEBUG_TRACE#define RX_WAIT_MAX                     (CPLL_FREQ * 1000)  /* Rx completion timeout */#define TX_WAIT_MAX                     (CPLL_FREQ * 1000)  /* Tx completion timeout */#define MII_WAIT_MAX                    (CPLL_FREQ * 1000)  /* max delay for the MII operation */#ifndef NSDELAY#define NSDELAY(nsec)                                           \{                                                               \    volatile int nx;                                            \    volatile int loop = (int)(((CPLL_FREQ * nsec) / 1000) + 1); \                                                                \    for (nx=0; nx<loop; nx++);                                  \}#endif  /* NSDELAY *//* External */IMPORT STATUS   sysSecEnetAddrGet(int unit, UCHAR* address);static    int unit = 0;/* Forward Function Declarations */LOCAL STATUS    at91EthAnRestart(ETH_DRV_CTRL *dev);LOCAL void      at91EthRxHandler(ETH_DRV_CTRL *dev);LOCAL void      at91EthTxHandler(ETH_DRV_CTRL *dev);#ifdef  DEBUG_TRACELOCAL void      at91EthHexDump(UCHAR *p, ULONG l);#endif  /* DEBUG_TRACE */#include "at91_ether.c"LOCAL void at91EthMiiRead(ETH_DRV_CTRL* dev, unsigned char phy_addr, unsigned char address, unsigned short *value){	unsigned int l;	read_phy(dev->base_addr, phy_addr,address, &l);	*value = (unsigned short) l;}LOCAL void at91EthMiiWrite(ETH_DRV_CTRL* dev, unsigned char phy_addr, unsigned char address, unsigned short value){	unsigned int l=value;	write_phy(dev->base_addr, phy_addr,address, l);	}/********************************************************************************* at91EthInit - initialize S3C2510 Ethernet controller** RETURNS: OK, or ERROR.*/STATUS at91EthInit(    ETH_DRV_CTRL *dev     ){    at91ether_probe(dev);    /* Initialize flags. */    dev->bPolling   = FALSE;    dev->bTxBlocked = FALSE;    dev->bRxHandler = FALSE;    dev->bTxHandler = FALSE;    return OK;}/********************************************************************************* at91EthAnRestart - restart auto negotiation** RETURNS: OK, or ERROR.*/STATUS at91EthAnRestart(    ETH_DRV_CTRL *dev                           ){    UINT16 phyAddr = dev->phyInfo.phyAddr;    int timeout = MII_WAIT_MAX;     /* Perserve selector. */    dev->PHYREGS.phyAds &= MII_ADS_SEL_MASK;    /* Set appropriate options. */    dev->PHYREGS.phyAds |=#ifdef  ETH_10BT                                MII_TECH_10BASE_T |         /* 10T half-duplex capable */#endif  /* ETH_10BT */#ifdef  ETH_FULL_DUPLEX                                MII_TECH_100BASE_TX_FD |    /* 100TX-FX full-duplex capable */#ifdef  ETH_10BT                                MII_TECH_10BASE_FD |        /* 10T full-duplex capable */#endif  /* ETH_10BT */#endif  /* ETH_FULL_DUPLEX */                                MII_TECH_100BASE_TX;        /* 100TX-FX half-duplex capable */    /* Initialize Auto Negotiation Advertisement Register. */    at91EthMiiWrite(dev, phyAddr, MII_AN_ADS_REG, dev->PHYREGS.phyAds);    /* Enable and Start Auto Negotiation. */    dev->PHYREGS.phyCtrl |= MII_CR_AUTO_EN |           /* Auto-Negotiation Enable */                                 MII_CR_RESTART;            /* Restart Auto Negotiation */    /* Start auto negotiation. */    at91EthMiiWrite(dev, phyAddr, MII_CTRL_REG, dev->PHYREGS.phyCtrl);    /* Wait until start auto negotiation. */    while (1)    {        at91EthMiiRead(dev, phyAddr, MII_CTRL_REG, &dev->PHYREGS.phyCtrl);        if (!(dev->PHYREGS.phyCtrl & MII_CR_RESTART))        {            break;        }    }    /* Wait until complete auto negotiation. */    while (1)    {        at91EthMiiRead(dev, phyAddr, MII_STAT_REG, &dev->PHYREGS.phyStatus);        if (dev->PHYREGS.phyStatus & MII_SR_AUTO_NEG)        {            break;        }        if (--timeout == 0)        {            printf("eth%d Error: MII auto negotiation timeout\n", dev->unit);            return ERROR;        }    }    return OK;}/********************************************************************************* at91EthFlagsSet - set device flags** RETURNS: OK, or ERROR.*/STATUS at91EthFlagsSet(    ETH_DRV_CTRL *dev      ){    long flags;#ifdef  DEBUG_TRACE    printf("eth%d FlagsSet, %08X\n", unit, (UINT32)dev->endObj.flags);#endif  /* DEBUG_TRACE */    flags = END_FLAGS_GET(&dev->endObj);    if (flags & IFF_UP)    {        /* Config down. */        END_FLAGS_CLR(&dev->endObj, IFF_UP | IFF_RUNNING);    }    dev->flags = flags;    at91ether_set_rx_mode(dev);      if (flags & IFF_UP)    {        /* Config up. */        END_FLAGS_SET(&dev->endObj, IFF_UP | IFF_RUNNING);    }    return OK;}/********************************************************************************* at91EthLoopSet - set loop mode** RETURNS: OK, or ERROR.*/void at91EthLoopSet(    ETH_DRV_CTRL *dev,           int mode                          ){}/********************************************************************************* at91EthMCastAdd - add multicast address** RETURNS: OK, or ERROR.*/  STATUS at91EthMCastAdd(    ETH_DRV_CTRL *dev,         UCHAR *pAddr                    ){	unsigned char mc_filter[2];	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;	unsigned int i, bitnr;	mc_filter[0] = mc_filter[1] = 0;	bitnr = ether_crc(ETH_ALEN, pAddr) >> 26;	mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);	regs->EMAC_HSH |= mc_filter[1];	regs->EMAC_HSL |= mc_filter[0];    return ERROR;}/********************************************************************************* at91EthMCastDel - remove multicast address** RETURNS: OK, or ERROR.*/STATUS at91EthMCastDel(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    UCHAR *pAddr                                            /* pointer to the multicast address */    ){	unsigned char mc_filter[2];	unsigned int i, bitnr;AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;	mc_filter[0] = mc_filter[1] = 0;	bitnr = ether_crc(ETH_ALEN, pAddr) >> 26;	mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);	regs->EMAC_HSH &= ~mc_filter[1];	regs->EMAC_HSL &= ~mc_filter[0];    return ERROR;}/********************************************************************************* at91EthStart - start S3C2510 Ethernet controller** RETURNS: OK, or ERROR.*/STATUS at91EthStart(    ETH_DRV_CTRL *dev                                  /* pointer to driver structure */    ){    return at91ether_open(dev);    return OK;}/********************************************************************************* at91EthStop - stop S3C2510 Ethernet controller** RETURNS: OK, or ERROR.*/STATUS at91EthStop(    ETH_DRV_CTRL *dev                                  /* pointer to driver structure */    ){	return at91ether_close(dev);    return OK;}/********************************************************************************* at91EthPlllStart - start polling mode** RETURNS: OK, or ERROR.*/STATUS at91EthPollStart(    ETH_DRV_CTRL *dev                                  /* pointer to driver structure */    ){	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;#ifdef  DEBUG_TRACE        printf("eth%d PollStart\n", unit);#endif  /* DEBUG_TRACE */    /* Disable interrupt. */    intDisable(dev->irq);    regs->EMAC_IDR = AT91C_EMAC_RCOM | AT91C_EMAC_TCOM ;						    dev->bPolling = TRUE;    return OK;}/********************************************************************************* at91EthPollStop - stop polling mode** RETURNS: OK, or ERROR.*/STATUS at91EthPollStop(    ETH_DRV_CTRL *dev                                  /* pointer to driver structure */    ){ /*   int unit = dev->unit;*/	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;#ifdef  DEBUG_TRACE        printf("eth%d PollStop\n", unit);#endif  /* DEBUG_TRACE */    regs->EMAC_IER = AT91C_EMAC_RCOM | AT91C_EMAC_TCOM ;    dev->bPolling = FALSE;    /* Enable interrupt. */    intEnable(dev->irq);    return OK;}/********************************************************************************* at91EthRbdFree - free RBD** RETURNS: N/A.*/void at91EthRbdFree(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    PETHRBD pRbd                                            /* pointer to the RBD to be freed */    ){	struct at91_private *lp = (struct at91_private *) dev->priv;#ifdef  DEBUG_TRACE    printf("eth%d RbdFree\n", dev->unit);#endif  /* DEBUG_TRACE */   	pRbd->descriptors[lp->rxBuffIndex].addr &= ~EMAC_DESC_DONE;	/* reset ownership bit */	if (lp->rxBuffIndex == MAX_RX_DESCR-1)				/* wrap after last buffer */		lp->rxBuffIndex = 0;	else		lp->rxBuffIndex++;        }/*    ** at91EthRbdCheck - check RBD** RETURNS: length of frame received.*/ULONG at91EthRbdCheck(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    PETHRBD pRbd                                            /* pointer to the RBD to be checked */    ){    int length = pRbd->descriptors[dev->priv->rxBuffIndex].size & 0x7ff;    return (length);}/********************************************************************************* at91EthTbdGet - allocate TBD** RETURNS: pointer to the TBD.*/unsigned char* at91EthTbdGet(    ETH_DRV_CTRL *dev                                  /* pointer to driver structure */    ){	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;        char *pBuf=0;#ifdef  DEBUG_TRACE    printf("eth%d TbdGet\n", dev->unit);#endif  /* DEBUG_TRACE */    /* Get the first available TBD. *//*    pTbd = (PETHTBD)(dev->tbdBase + dev->tbdFree * SIZE_BD);*//*  if (dev->pClPool) */    {          if (!(regs->EMAC_TSR & AT91C_EMAC_BNQ))        {            return NULL;        }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品—区二区四季| 欧美视频精品在线| 免费不卡在线观看| 丝袜国产日韩另类美女| 亚洲国产一区在线观看| 亚洲成人精品影院| 午夜伊人狠狠久久| 天堂久久一区二区三区| 五月天视频一区| 蜜臀国产一区二区三区在线播放| 亚洲.国产.中文慕字在线| 亚洲国产va精品久久久不卡综合| 午夜久久电影网| 日韩在线a电影| 另类综合日韩欧美亚洲| 日本欧美一区二区| 久久电影网站中文字幕| 精品一区二区三区欧美| 丁香天五香天堂综合| 99久久久免费精品国产一区二区| 99久久精品国产麻豆演员表| 欧洲一区二区三区在线| 欧美高清一级片在线| 精品国产亚洲一区二区三区在线观看| 精品99久久久久久| 亚洲欧洲一区二区在线播放| 亚洲午夜免费福利视频| 久久se精品一区二区| 成人黄色软件下载| 欧美日韩国产高清一区二区三区| 日韩精品中文字幕在线不卡尤物| 国产日韩av一区二区| 一区二区三区精密机械公司| 美女网站视频久久| 成人精品一区二区三区中文字幕| 在线观看欧美黄色| www激情久久| 亚洲精品成a人| 韩国中文字幕2020精品| 91在线云播放| 久久婷婷国产综合精品青草| 亚洲天天做日日做天天谢日日欢 | 欧美美女网站色| 26uuu成人网一区二区三区| 亚洲图片你懂的| 国产美女在线观看一区| 欧美午夜视频网站| 中文字幕制服丝袜成人av| 日本sm残虐另类| 91麻豆国产福利精品| 精品国产91久久久久久久妲己| 亚洲美女偷拍久久| 韩国女主播成人在线| 欧美三级午夜理伦三级中视频| 国产日韩影视精品| 青青草一区二区三区| 色诱视频网站一区| 国产欧美综合色| 美女高潮久久久| 欧美性猛片xxxx免费看久爱| 欧美国产精品一区| 国产尤物一区二区在线| 91精品国产手机| 亚洲综合激情小说| 成人aa视频在线观看| 另类小说综合欧美亚洲| 91在线国产观看| 精品福利一区二区三区| 日韩高清一区在线| 欧美影院午夜播放| 一区二区三区中文在线| 91首页免费视频| 国产精品色哟哟| 黄色成人免费在线| 日韩欧美在线网站| 蜜桃久久av一区| 欧美丰满高潮xxxx喷水动漫| 亚洲va欧美va国产va天堂影院| av一区二区三区| 亚洲视频你懂的| 99久久精品久久久久久清纯| 亚洲天堂av老司机| 一本久久a久久精品亚洲| 亚洲免费在线视频一区 二区| 99精品视频在线观看| 中文字幕亚洲一区二区va在线| 波多野结衣中文字幕一区 | 亚洲自拍偷拍网站| 在线看国产一区二区| 亚洲精品高清在线| 欧美日本韩国一区二区三区视频| 午夜影视日本亚洲欧洲精品| 91精品国产综合久久蜜臀| 蜜臀精品一区二区三区在线观看| 日韩视频免费观看高清在线视频| 美女性感视频久久| 国产精品区一区二区三区| 99视频有精品| 偷拍一区二区三区四区| 欧美男人的天堂一二区| 美女视频网站久久| 中国av一区二区三区| 欧美亚洲一区二区在线| 日本aⅴ亚洲精品中文乱码| 久久婷婷国产综合精品青草| 97久久久精品综合88久久| 午夜精品久久久久久久99樱桃| 日韩一级在线观看| 99久久婷婷国产综合精品| 亚洲一区二区影院| 日韩精品一区二区三区在线| 国产99精品视频| 亚洲成人在线观看视频| 久久综合色播五月| 91成人看片片| 国产精品一区免费在线观看| 中文字幕欧美一区| 日韩三级av在线播放| 成人app网站| 日韩成人午夜电影| 综合av第一页| 日韩欧美一级二级| 91国产免费观看| 国产高清在线精品| 婷婷久久综合九色国产成人 | 国产白丝网站精品污在线入口| 亚洲丝袜另类动漫二区| 26uuu亚洲| 欧美日韩1234| 色综合久久久久综合99| 国产一区二区三区最好精华液| 亚洲精品成人悠悠色影视| 久久九九久精品国产免费直播| 欧美久久久久久久久中文字幕| av电影在线观看一区| 日本欧美一区二区三区| 一区二区三区四区精品在线视频| 久久综合成人精品亚洲另类欧美| 欧美在线免费观看亚洲| 成人黄色电影在线 | 国产精品丝袜久久久久久app| 欧美日韩免费高清一区色橹橹| www.亚洲免费av| 国产精品综合网| 久久机这里只有精品| 亚洲成人手机在线| 艳妇臀荡乳欲伦亚洲一区| 国产精品国模大尺度视频| 久久午夜色播影院免费高清| 精品少妇一区二区三区在线播放| 欧美高清视频不卡网| 在线观看网站黄不卡| 色婷婷久久久综合中文字幕| 成人国产电影网| 国产精品77777| 国产电影一区在线| 懂色av中文字幕一区二区三区 | 精品视频在线免费| 欧美在线观看你懂的| 在线免费不卡电影| 欧美视频在线播放| 欧美日韩国产系列| 欧美日韩一级片在线观看| 欧美日韩免费视频| 日韩欧美国产电影| 欧美mv日韩mv国产网站app| 欧美va亚洲va在线观看蝴蝶网| 久久午夜老司机| 国产精品视频yy9299一区| 亚洲三级在线免费观看| 亚洲私人影院在线观看| 亚洲午夜久久久久久久久久久 | 国产精品天干天干在线综合| 中文一区一区三区高中清不卡| 国产精品美女久久久久av爽李琼| 国产精品久久免费看| 亚洲美腿欧美偷拍| 日韩电影免费一区| 国产乱码精品一品二品| 国产成人鲁色资源国产91色综| 成人国产精品免费网站| 欧美少妇性性性| 久久这里只精品最新地址| 国产精品污网站| 亚洲高清中文字幕| 精品一区二区三区免费观看| 不卡av在线免费观看| 欧美人xxxx| 国产欧美日韩精品一区| 亚洲一区二区五区| 国产精品一区二区免费不卡| 91精品福利在线| 欧美精品一区二区高清在线观看| 中文字幕 久热精品 视频在线| 亚洲超碰97人人做人人爱| 国产一区二区在线视频| 欧美中文字幕不卡| 国产欧美久久久精品影院| 亚洲成人av资源| 91在线观看地址|