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

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

?? at91eth.c

?? 詳細(xì)介紹了DM9161相關(guān)的驅(qū)動(dòng)函數(shù)及實(shí)現(xiàn)
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
        /* Allocate cluster buffer. */        pBuf = netClusterGet(dev->endObj.pNetPool, dev->endObj.pNetPool->clTbl[0]);        if (!pBuf)        {#ifdef  DEBUG_TRACE            printf("eth%d Error: Failed to allocate cluster buffer\n", dev->unit);#endif  /* DEBUG_TRACE */            return NULL;        }		        pBuf =(pBuf + (4));    }      return (pBuf);}/********************************************************************************* at91EthTbdFree - free TBD** RETURNS: N/A.*/void at91EthTbdFree(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    unsigned char* pBuf                                             /* pointer to the TBD to be freed */    ){#ifdef  DEBUG_TRACE    printf("eth%d TbdFree\n", dev->unit);#endif  /* DEBUG_TRACE */    /* Free cluster buffer if necessary. */   /* if (dev->pClPool)*/    {        netClFree(dev->endObj.pNetPool, (UCHAR *)(pBuf - 4));            }    /* Free the used TBD. */    /* Advance to next RBD. *//*   dev->tbdIndex++;    if (dev->tbdIndex == NUM_TBD_ETH)    {        dev->tbdIndex = 0;    }*/}/********************************************************************************* at91EthTbdStart - start transmit** RETURNS: N/A.*/void at91EthTbdStart(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    unsigned char* data ,                                   /* pointer to the TBD to be freed */    ULONG length                                            /* length of data */    ){	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;	struct at91_private *lp = (struct at91_private *) dev->priv;	if(regs->EMAC_TSR & AT91C_EMAC_BNQ){	/* Store packet information (to free when Tx completed) */	lp->skb = data;	lp->skb_length = length;	cacheFlush(DATA_CACHE,data, length); /* clean_dcache_range(data, length);*/	lp->skb_physaddr = (unsigned long) data ;       /*cacheDrvVirtToPhys( )*/	lp->stats.tx_bytes += length;	/* Set address of the data in the Transmit Address register */	regs->EMAC_TSR |= AT91C_EMAC_COMP;	regs->EMAC_TAR = lp->skb_physaddr ;	/* Set length of the packet in the Transmit Control register */	regs->EMAC_TCR = length;	}}/********************************************************************************* at91EthTbdCheck - check TBD** RETURNS: OK, or ERROR.*/STATUS at91EthTbdCheck(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    unsigned char* pTbd                                            /* pointer to the TBD to be checked */    ){ 	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;	struct at91_private *lp = (struct at91_private *) dev->priv;    int timeout = TX_WAIT_MAX;    int retry = 3;#ifdef  DEBUG_TRACE    printf("eth%d TbdCheck\n", dev->unit);#endif  /* DEBUG_TRACE */    /* Check if completed. */    while ( !(regs->EMAC_TSR & AT91C_EMAC_BNQ))    {        if (--timeout == 0)        {            if (--retry == 0)            {                printf("eth%d Error: Tx timeout\n", dev->unit);                return ERROR;            }            timeout = TX_WAIT_MAX;         }    }    return ERROR;}/********************************************************************************* at91EthSend - send packet in interrupt mode** RETURNS: OK, or END_ERR_BLOCK.*/STATUS at91EthSend(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    M_BLK_ID pMblk                                          /* pointer to the mBlk/cluster pair */    ){    ULONG length;    unsigned char* pBuf=0;	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;    if (!(regs->EMAC_TSR & AT91C_EMAC_BNQ)) return ERROR;#ifdef  DEBUG_TRACE    printf("eth%d Send, 0x%08X\n", unit, (UINT32)pMblk->mBlkHdr.mData);#endif  /* DEBUG_TRACE */    if (dev->bTxBlocked)    {        /* Retry later. */        return END_ERR_BLOCK;    }    if (dev->bPolling)    {        return ERROR;    }    	    length = pMblk->mBlkPktHdr.len;    /* Check frame length. */    if ((length <= SIZE_ETH_HDR) || (length > SIZE_ETH_MFLR))    {        /* Up-date statistics. */        dev->MIB2TBL.ifOutErrors++;        return ERROR;    }      pBuf = at91EthTbdGet(dev);#if 0    if ((pMblk->mBlkHdr.mData >= (char *)SYS_MEM_TOP) && (pMblk->mBlkHdr.mNext == NULL))    {        char *pBuf1 = pMblk->pClBlk->clNode.pClBuf;        length = pMblk->mBlkPktHdr.len;        /* Swap buffer. */        pMblk->pClBlk->clNode.pClBuf = (char *)(pBuf - (SIZE_ETH_FB_HDR - 4));        pBuf = (pBuf1 + (SIZE_ETH_FB_HDR - 4));        pMblk->mBlkHdr.mData = (char *)(pBuf + SIZE_ETH_WA);    }    else#endif        {        /* Copy data. */        length = netMblkToBufCopy(pMblk, (char *)(pBuf + SIZE_ETH_WA), NULL);    }    /* Bump the statistic counter. */    END_ERR_ADD (&dev->endObj, MIB2_OUT_UCAST, +1);    /* Free the Mblk. */    netMblkClChainFree(pMblk);#ifdef  DEBUG_TRACE    at91EthHexDump((UCHAR *)(pBuf + SIZE_ETH_WA), length);#endif  /* DEBUG_TRACE */    /* Start transmit. */    at91EthTbdStart(dev, pBuf, length);    return OK;}/********************************************************************************* at91EthPollReceive - receive packet in polled mode** RETURNS: OK, or EAGAIN.*/STATUS at91EthPollReceive(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    M_BLK_ID pMblk                                          /* pointer to the mBlk/cluster pair */    ){    		struct at91_private *lp = (struct at91_private *) dev->priv;	PETHRBD pRbd = lp->dlist;	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;	int index = lp->rxBuffIndex;	char* pBuf =(char*)( pRbd->descriptors[index].addr&0xfffffffc);    /* Get the first available RBD. */    /*pRbd = at91EthRbdGet(dev);*/    			    /* If no RBD is available, retry it later. */    if (pRbd == NULL)    {        return EAGAIN;    }    do    {        ULONG length =  pRbd->descriptors[index].size & 0x7ff;         if (length == 0)        {            break;        }        /* If buffer is not large enough, we do not copy the received buffer. */        if ((ULONG)pMblk->mBlkHdr.mLen < length)        {            printf("eth%d Error: Too small Rx mBlk, %d\n", dev->unit, pMblk->mBlkHdr.mLen);            break;        }#ifdef  DEBUG_TRACE        at91EthHexDump((UCHAR *)(pBuf + SIZE_ETH_WA), length);#endif  /* DEBUG_TRACE */        /* Up-date statistics. */        dev->MIB2TBL.ifInOctets += length;        if (((UINT8 *)(pBuf + SIZE_ETH_WA))[0] & 0x01)        {            dev->MIB2TBL.ifInNUcastPkts += 1;        }        else        {            dev->MIB2TBL.ifInUcastPkts += 1;        }        /* Set up the mBlk properly. */        pMblk->mBlkHdr.mFlags  |= M_PKTHDR;        pMblk->mBlkHdr.mLen     = length;        pMblk->mBlkPktHdr.len   = length;        /* Copy data. */        bcopy((char *)(pBuf + SIZE_ETH_WA), (char *)pMblk->mBlkHdr.mData, length);        /* Free the used RBD. */        at91EthRbdFree(dev, pRbd);        return OK;    } while (FALSE);    /* Up-date statistics. */    dev->MIB2TBL.ifInErrors++;    /* Free the used RBD. */    at91EthRbdFree(dev, pRbd);    return EAGAIN;}/********************************************************************************* at91EthPollSend - send packet in polled mode** RETURNS: OK, or EAGAIN.*/STATUS at91EthPollSend(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    M_BLK_ID pMblk                                          /* pointer to the mBlk/cluster pair */    ){    ULONG length;    unsigned char* pBuf = 0;	AT91PS_EMAC regs = (AT91PS_EMAC) dev->base_addr;	struct at91_private *lp = (struct at91_private *) dev->priv;	    if (!(regs->EMAC_TSR & AT91C_EMAC_BNQ)) return ERROR;    #ifdef  DEBUG_TRACE        printf("eth%d PollSend, 0x%08X\n", unit, (UINT32)pMblk->mBlkHdr.mData);#endif  /* DEBUG_TRACE */    length = pMblk->mBlkPktHdr.len;    /* Check frame length. */    if ((length <= SIZE_ETH_HDR) || (length > SIZE_ETH_MFLR))    {        /* Up-date statistics. */        dev->MIB2TBL.ifOutErrors++;        return ERROR;    }    pBuf = at91EthTbdGet(dev);    do    {        /* Copy data but do not free the Mblk. */        length = (ULONG)netMblkToBufCopy(pMblk, (char *)(pBuf + SIZE_ETH_WA), NULL);#ifdef  DEBUG_TRACE        at91EthHexDump((UCHAR *)(pBuf + SIZE_ETH_WA), length);#endif  /* DEBUG_TRACE */        /* Start transmit. */        at91EthTbdStart(dev, pBuf, length);        /* Check if completed. */        if (at91EthTbdCheck(dev, pBuf) == OK)        {            /* Up-date statistics. */            dev->MIB2TBL.ifOutOctets += (ULONG)length;            if (((UINT8 *)(pBuf + SIZE_ETH_WA))[0] & 0x01)            {                dev->MIB2TBL.ifOutNUcastPkts += 1;            }            else            {                dev->MIB2TBL.ifOutUcastPkts += 1;            }            /* Free the used TBD. */            at91EthTbdFree(dev, pBuf);            return OK;        }    } while (FALSE);    /* Up-date statistics. */    dev->MIB2TBL.ifOutErrors++;    /* Free the used TBD. */    at91EthTbdFree(dev, pBuf);    return EAGAIN;}/********************************************************************************* at91EthRbdProcess - porcess a RBD** RETURNS : N/A*/void at91EthRbdProcess(    ETH_DRV_CTRL *dev,                                 /* pointer to driver structure */    PETHRBD pRbd                                            /* pointer to the RBD */    ){    M_BLK_ID     pMblk = NULL;    char        *pNewCluster = NULL;     int index = dev->priv->rxBuffIndex;    CL_BLK_ID    pClBlk = NULL;    char        *pData ;    UINT32       len   ;    while ( (pRbd->descriptors[index].addr & EMAC_DESC_DONE))    {#ifdef  DEBUG_TRACE    printf(" RxHandler, index = %d, addr=%x \n", index,pRbd->descriptors[index].addr);#endif  /* DEBUG_TRACE */	pData  = (char*)(pRbd->descriptors[index].addr&0xfffffffc);   	len  =  (pRbd->descriptors[index].size & 0x7ff);#ifdef  DEBUG_TRACE        at91EthHexDump((UCHAR *)(pData + SIZE_ETH_WA), len);#endif  	   	if (dev->endObj.pNetPool == NULL)   	 {  	  DEBUG_LOG (DRV_DEBUG_RX, "at91EndRecv: Illegal pNetPool on entry!\n",             0,0,0,0,0,0);  	 END_ERR_ADD (&dev->endObj, MIB2_IN_ERRS, +1);  	  goto cleanRXD; 	   }    /* Add one to our unicast data. */    END_ERR_ADD (&dev->endObj, MIB2_IN_UCAST, +1);    if ((pMblk = mBlkGet (dev->endObj.pNetPool, M_DONTWAIT, MT_DATA))        == NULL)        {        DEBUG_LOG (DRV_DEBUG_RX, "at91EndRecv: Out of M Blocks!\n",                 0,0,0,0,0,0);        END_ERR_ADD (&dev->endObj, MIB2_IN_ERRS, +1);        goto cleanRXD;        }    pNewCluster = netClusterGet (dev->endObj.pNetPool,                                 dev->endObj.pNetPool->clTbl[0]);        if (pNewCluster == NULL)        {        DEBUG_LOG (DRV_DEBUG_RX, "sngks32cEndRecv: Cannot loan!\n",                 0,0,0,0,0,0);        dev->lastError.errCode = END_ERR_NO_BUF;        muxError(&dev->endObj, &dev->lastError);        goto cleanRXD;        }        	memcpy(pNewCluster+2+__CLUSTER_OFFSET__,pData,len);    /* Grab a cluster block to marry to the cluster we received. */    if ((pClBlk = netClBlkGet (dev->endObj.pNetPool, M_DONTWAIT)) == NULL)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品免费观看| 日韩免费在线观看| 91首页免费视频| 高清国产午夜精品久久久久久| 激情综合网天天干| 韩日av一区二区| 国产一区二区三区免费播放| 久久精品国产澳门| 精品一区二区三区影院在线午夜| 麻豆成人在线观看| 国模少妇一区二区三区| 激情欧美一区二区三区在线观看| 国产精品一区二区不卡| 国产精品 欧美精品| 成人av网站免费观看| 99精品视频在线观看免费| 一道本成人在线| 欧美喷潮久久久xxxxx| 日韩欧美中文一区二区| 久久精品夜夜夜夜久久| 国产精品嫩草影院av蜜臀| 伊人色综合久久天天人手人婷| 一区二区激情小说| 日韩激情视频网站| 激情五月婷婷综合网| 国产伦精品一区二区三区视频青涩 | 日本一区二区三区久久久久久久久不 | 91首页免费视频| 精品视频1区2区| 日韩一区二区免费高清| 国产亚洲女人久久久久毛片| 中文字幕在线观看一区| 亚洲一区精品在线| 免费欧美高清视频| www.性欧美| 5858s免费视频成人| 2020国产精品自拍| 中文字幕综合网| 日本午夜一区二区| 成人免费视频免费观看| 91电影在线观看| 精品国产91亚洲一区二区三区婷婷| 国产欧美日韩视频在线观看| 亚洲欧美日韩人成在线播放| 日韩精品成人一区二区三区| 顶级嫩模精品视频在线看| 色一情一乱一乱一91av| 欧美一级国产精品| 《视频一区视频二区| 日本特黄久久久高潮| 波多野结衣亚洲| 欧美老女人第四色| 国产精品成人在线观看| 日本欧美一区二区三区乱码| proumb性欧美在线观看| 日韩免费高清视频| 一区二区三区国产精品| 国产一区二区三区观看| 欧美性xxxxxx少妇| 亚洲国产精品v| 日本三级亚洲精品| 99久久久精品| 久久众筹精品私拍模特| 亚洲mv大片欧洲mv大片精品| 成人深夜福利app| 日韩三级视频中文字幕| 亚洲综合男人的天堂| 国产成a人亚洲| 欧美一区二区在线看| 亚洲靠逼com| 国产精品一区二区男女羞羞无遮挡| 欧美美女网站色| 日韩一区在线免费观看| 国产大陆a不卡| 日韩一区二区三区免费观看| 夜夜嗨av一区二区三区中文字幕 | 精品国产乱子伦一区| 亚洲.国产.中文慕字在线| 波多野结衣精品在线| 精品国产乱码久久久久久闺蜜| 亚洲午夜一区二区| 91丨porny丨最新| 欧美极品另类videosde| 激情深爱一区二区| 日韩欧美色综合网站| 亚洲1区2区3区视频| 欧美在线制服丝袜| 亚洲婷婷在线视频| aaa亚洲精品| 中文字幕精品一区二区三区精品| 精品一区二区国语对白| 91麻豆精品91久久久久同性| 一二三区精品视频| 欧美亚洲一区三区| 亚洲国产精品人人做人人爽| 色综合久久88色综合天天| 中文字幕中文在线不卡住| 国产99久久久国产精品潘金| 久久亚洲欧美国产精品乐播| 精品在线一区二区三区| 精品日韩在线观看| 美女视频免费一区| 欧美精品一区二区三区高清aⅴ| 久久精品国产99| 精品国产免费人成在线观看| 激情深爱一区二区| 国产亚洲精品久| 国产成人精品www牛牛影视| 337p粉嫩大胆噜噜噜噜噜91av| 激情深爱一区二区| 国产亚洲成av人在线观看导航| 国产精品一区二区在线观看不卡 | 国内精品自线一区二区三区视频| 精品91自产拍在线观看一区| 国产乱码精品一区二区三区忘忧草 | 久久久久九九视频| 国产成人亚洲精品青草天美| 国产清纯白嫩初高生在线观看91 | 精品乱人伦一区二区三区| 久久电影网站中文字幕| 久久综合999| 成a人片亚洲日本久久| 亚洲视频综合在线| 欧美性色欧美a在线播放| 调教+趴+乳夹+国产+精品| 日韩一二三区视频| 国产福利一区在线| 亚洲欧美精品午睡沙发| 欧美视频一区二| 麻豆精品在线播放| 欧美韩日一区二区三区四区| 91亚洲男人天堂| 偷拍一区二区三区四区| 精品人伦一区二区色婷婷| 成人中文字幕在线| 亚洲综合小说图片| 日韩一区二区在线看| 福利一区在线观看| 亚洲乱码中文字幕综合| 欧美一区二区三区播放老司机| 精品综合免费视频观看| 综合在线观看色| 91精品国产手机| 成人h版在线观看| 亚洲成a人在线观看| 久久尤物电影视频在线观看| 99久久婷婷国产综合精品电影| 亚洲成年人影院| 欧美精彩视频一区二区三区| 欧美日韩一区小说| 国产一区二区伦理片| 中文字幕综合网| 精品欧美乱码久久久久久1区2区| 99久久精品国产导航| 蓝色福利精品导航| 亚洲精品一二三| 久久麻豆一区二区| 欧美日韩成人一区| 懂色av一区二区三区免费观看| 亚洲电影第三页| 国产精品不卡一区| 精品国产乱码久久久久久牛牛| 91蝌蚪porny| 精品一区二区三区免费| 一区二区三区精品视频| 国产日韩三级在线| 日韩欧美美女一区二区三区| 色综合激情五月| 国产白丝精品91爽爽久久| 蜜臀av一区二区| 一个色在线综合| 国产精品美女一区二区在线观看| 日韩欧美激情在线| 欧美精品在线一区二区三区| 从欧美一区二区三区| 老司机精品视频在线| 亚洲第一成人在线| 亚洲精品少妇30p| 中文字幕欧美国产| 久久久久久久久免费| 日韩一级黄色片| 欧美日韩国产区一| 在线观看av一区| 94-欧美-setu| 国产精品自拍在线| 蜜桃av一区二区| 热久久国产精品| 偷拍一区二区三区四区| 亚洲一区二区三区视频在线播放 | 麻豆国产一区二区| 亚洲一区二区3| 亚洲精品国产高清久久伦理二区| 中文字幕精品一区 | 国产精品一区二区三区网站| 蜜臀av国产精品久久久久| 肉丝袜脚交视频一区二区| 夜夜嗨av一区二区三区中文字幕| 亚洲三级在线播放| 中文字幕在线不卡国产视频| 国产精品全国免费观看高清|