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

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

?? sngks32cend.c

?? at91rm9200 bsp at91rm9200 bsp
?? C
?? 第 1 頁 / 共 5 頁
字號:
#if 0/***************************************************************************** * at91cEndBdmaTxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the BdmaTx controller.** RETURNS: N/A.*/LOCAL void at91cEndBdmaTxInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {    /**Nothing to be done here**/    }#endif/******************************************************************************* at91cEndBdmaRxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the BdmaTx controller.** RETURNS: N/A.*/LOCAL void at91cEndMacRxInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {        	    	#if 1    RECEIVE_BUF_DESC * pReceiveBufDesc;    UCHAR current;		    *(volatile UINT32 *)AT91C_EMAC_RSR=0xfff;	pReceiveBufDesc=pDrvCtrl->pRxBufDesc;	current = pDrvCtrl->tail;	do	{		if(pReceiveBufDesc[current].w0.ownerShip == OWNED_BY_CPU)		{		/*			logMsg("process id:%d\n",current,2,3,4,5,6);*/		netJobAdd ((FUNCPTR)at91cEndRecv, (int)pDrvCtrl, (int) &pReceiveBufDesc[current],0,0,0);		/*		       if (!pDrvCtrl->rxHandling && !pDrvCtrl->resetting)		        {		        		        pDrvCtrl->rxHandling = TRUE;							       }*/		}		current=((current+1)%RX_FD_NUM);	} while(&pReceiveBufDesc[current]!=*(volatile UINT32 *)AT91C_EMAC_RBQP);	pDrvCtrl->tail=current;#endif#if 0    RECEIVE_BUF_DESC * pReceiveBufDesc;    int i; /*   RECEIVE_BUF_DESC *p;    p=*(volatile UINT32 *)AT91C_EMAC_RBQP;*/    *(volatile UINT32 *)AT91C_EMAC_RSR=0xfff;		pReceiveBufDesc=pDrvCtrl->pRxBufDesc;	#if 0	if(p->w0.ownerShip == OWNED_BY_CPU)/*當(dāng)前buf 必須處理*/	{		at91cEndRecv((int)pDrvCtrl,(int)p);	}#endif		for(i=0;i<64;i++)	{			if(pReceiveBufDesc[i].w0.ownerShip == OWNED_BY_CPU)		{/*			logMsg("id%d\n",i,2,3,4,5,6); */			netJobAdd ((FUNCPTR)at91cEndRecv, (int)pDrvCtrl, (int) &pReceiveBufDesc[i],0,0,0);		}	/*	if(&pReceiveBufDesc[i]==(int)(*(volatile UINT32 *)AT91C_EMAC_RBQP))break;*/	}#endif    }/******************************************************************************* at91cEndMacTxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the MacRx controller.** RETURNS: N/A.*/LOCAL void at91cEndMacTxInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {#if 1	UINT32 stat;	if(pDrvCtrl->pTxBufDesc->head != pDrvCtrl->pTxBufDesc->tail)	{		stat = *(volatile UINT32 *)AT91C_EMAC_TSR;		if(!(stat & AT91C_EMAC_BNQ))				return;	/*	*(volatile UINT32 *)AT91C_EMAC_TSR |= AT91C_EMAC_COMP;*/		*(volatile UINT32 *)AT91C_EMAC_TSR = stat;		*(volatile UINT32 *)(AT91C_EMAC_TAR) = pDrvCtrl->pTxBufDesc->transBufFd[pDrvCtrl->pTxBufDesc->head].transBufPtr;		*(volatile UINT32 *)(AT91C_EMAC_TCR) = pDrvCtrl->pTxBufDesc->transBufFd[pDrvCtrl->pTxBufDesc->head].length;/*  	 	*(volatile UINT32 *)AT91C_EMAC_CTL |= AT91C_EMAC_TE;		logMsg("head:%d,addr = %x,len=%d\n",pDrvCtrl->pTxBufDesc->head,*(volatile UINT32 *)(AT91C_EMAC_TAR),			pDrvCtrl->pTxBufDesc->transBufFd[pDrvCtrl->pTxBufDesc->head].length,0,0,0); */		pDrvCtrl->pTxBufDesc->head = ((pDrvCtrl->pTxBufDesc->head +1) % TX_FD_NUM);	}	else	{		firstSend=1;		pDrvCtrl->pTxBufDesc->tail =pDrvCtrl->pTxBufDesc->head=0;	}	#endif/*    END_TX_SEM_GIVE (&pDrvCtrl->end);*//*防止多次進(jìn)入發(fā)送?*//*可以添加發(fā)送統(tǒng)計(jì)寄存器計(jì)數(shù)*/    }#if 0/******************************************************************************* at91cEndMacRxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the MacRx controller.** RETURNS: N/A.*/LOCAL void at91cEndMacRxInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {    /***Nothing to be done here***/    }#endif/******************************************************************************* at91cEndMacRxInt - handle controller interrupt** This routine is called at interrupt level in response to an interrupt from* the EMAC controller.** RETURNS: N/A.*/LOCAL void at91cEndInt    (    END_DEVICE  *pDrvCtrl    /* interrupting device */    )    {	UINT32 stat1,stat2;/*	logMsg("get into int\n",0,0,0,0,0,0);  */	stat1 = *(volatile UINT32 *)AT91C_EMAC_ISR;	stat2= ~*(volatile UINT32 *)AT91C_EMAC_IMR;	stat1 &= stat2;/*	logMsg("stat1= %x stat2= %x \n",stat1,stat2,0,0,0,0); */	if(stat1 & AT91C_EMAC_RCOM )		at91cEndMacRxInt(pDrvCtrl);	if(stat1 & AT91C_EMAC_TCOM)		at91cEndMacTxInt(pDrvCtrl);    }	/******************************************************************************** at91cEndHandleRcvInt - task level interrupt service for input packets** This routine is called at task level indirectly by the interrupt* service routine to do any message received processing.** RETURNS: N/A.*/LOCAL void at91cEndHandleRcvInt    (    END_DEVICE *pDrvCtrl    /* interrupting device */    )    {    }/******************************************************************************** at91cEndRecv - process the next incoming packet** Handle one incoming packet.  The packet is checked for errors.** RETURNS: N/A.*/LOCAL STATUS at91cEndRecv    (    END_DEVICE         *pDrvCtrl,  /* device structure */    RECEIVE_BUF_DESC *pRxD       /* frame descriptor */    )    {    M_BLK_ID     pMblk = NULL;    char        *pNewCluster = NULL;    CL_BLK_ID    pClBlk = NULL;    char        *pData;      UINT32       len    = pRxD->w1.frameLength;    char *ptr;    int i;	/*為了對齊,收到數(shù)據(jù)往后搬遷2個(gè)byte*/    	i=len;	pData=(char *)(((UINT32)pRxD->w0.baseAddrRecBuf)<<2);	ptr=(char *)(pData+len);	while(i-->0)	{		*(ptr+1)=*(ptr-1);		ptr--;	}#if 0		*(volatile UINT32 *)AT91C_EMAC_RBQP= pDrvCtrl->pRxBufDesc;/*添加*/	pDrvCtrl->tail ++;/*防止跑飛*/	if(pDrvCtrl->tail==63)	{		pDrvCtrl->tail=0;		*(volatile UINT32 *)AT91C_EMAC_RBQP= pDrvCtrl->pRxBufDesc;	}#endif	/*	logMsg("address =%08x,length=%d\n",pData,len,3,4,5,6); */    if (pDrvCtrl->end.pNetPool == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "at91cEndRecv: Illegal pNetPool on entry!\n",                 0,0,0,0,0,0);        END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_ERRS, +1);        goto cleanRXD;        }    /* Add one to our unicast data. */    END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_UCAST, +1);    if ((pMblk = mBlkGet (pDrvCtrl->end.pNetPool, M_DONTWAIT, MT_DATA))        == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "at91cEndRecv: Out of M Blocks!\n",                 0,0,0,0,0,0);        END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_ERRS, +1);        goto cleanRXD;        }    pNewCluster = netClusterGet (pDrvCtrl->end.pNetPool,                                 pDrvCtrl->end.pNetPool->clTbl[0]);    if (pNewCluster == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "at91cEndRecv: Cannot loan!\n",                 0,0,0,0,0,0);        pDrvCtrl->lastError.errCode = END_ERR_NO_BUF;        muxError(&pDrvCtrl->end, &pDrvCtrl->lastError);        goto cleanRXD;        }    /* Grab a cluster block to marry to the cluster we received. */    if ((pClBlk = netClBlkGet (pDrvCtrl->end.pNetPool, M_DONTWAIT)) == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "at91cEndRecv: Out of Cluster Blocks!\n",                 0,0,0,0,0,0);        pDrvCtrl->lastError.errCode = END_ERR_NO_BUF;        muxError(&pDrvCtrl->end, &pDrvCtrl->lastError);        goto cleanRXD;        }        END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_UCAST, +1);/*非cache 的使用    pData = END_CACHE_PHYS_TO_VIRT(pData);*/    /* Note: we rely on the hardware to pad 2 bytes so we don't need to copy to     * a new buffer to solve alignment problems     */    /* Join the cluster to the MBlock */    if (netClBlkJoin (pClBlk, pData, AT91C_CL_SIZE, NULL, 0, 0, 0) == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "at91cEndRecv: netClBlkJoin failed\n",                 0,0,0,0,0,0);        pDrvCtrl->lastError.errCode = END_ERR_NO_BUF;        muxError(&pDrvCtrl->end, &pDrvCtrl->lastError);        goto cleanRXD;        }        if (netMblkClJoin (pMblk, pClBlk) == NULL)        {        DRV_LOG (DRV_DEBUG_RX, "at91cEndRecv: netMblkClJoin failed\n",                 0,0,0,0,0,0);        pDrvCtrl->lastError.errCode = END_ERR_NO_BUF;        muxError(&pDrvCtrl->end, &pDrvCtrl->lastError);        goto cleanRXD;        }        /* The ip structure is 14 bytes from the beginning of the valid frame data     * yet it must be aligned on a word boundary.  We have told the ethernet     * controller to insert 2 bytes of garbage at the beginning of each frame     * so now all we need to do is move our pointer to the frame data to the     * real start of the frame causing the frame to be half-word aligned but     * not word aligned.  By counting 14 bytes from the beginning of the frame     * to the ip, we arrive on a word boundary.     */    pMblk->mBlkHdr.mData += AT91C_DATA_OFFSET;    pMblk->mBlkHdr.mFlags |= M_PKTHDR;    pMblk->mBlkHdr.mLen   = len;    pMblk->mBlkPktHdr.len = len;    /* Call the upper layer's receive routine. */    END_RCV_RTN_CALL(&pDrvCtrl->end, pMblk);    pRxD->w0.baseAddrRecBuf = ((UINT32)pNewCluster)>>2;    pRxD->w0.ownerShip=0;    return (OK);cleanRXD:    if (pClBlk != NULL)        {        netClBlkFree (pDrvCtrl->end.pNetPool, pClBlk);         }    if (pNewCluster != NULL)        {        netClFree (pDrvCtrl->end.pNetPool, pNewCluster);        pNewCluster = NULL;        }    if (pMblk != NULL)        {        netMblkFree (pDrvCtrl->end.pNetPool, pMblk);        }    END_ERR_ADD (&pDrvCtrl->end, MIB2_IN_ERRS, +1);    return (ERROR);    }/******************************************************************************** at91cEndSend - the driver send routine** This routine takes a M_BLK_ID sends off the data in the M_BLK_ID.* The buffer must already have the addressing information properly installed* in it.  This is done by a higher layer.  The last arguments are a free* routine to be called when the device is done with the buffer and a pointer* to the argument to pass to the free routine.  ** RETURNS: OK or ERROR.*/LOCAL STATUS at91cEndSend    (    END_DEVICE *pDrvCtrl,    /* device ptr */    M_BLK_ID pNBuff        /* data to send */    )    {    int         len;    int         oldLevel;    UCHAR *pTx;    UINT32 stat;    if (pDrvCtrl->resetting)        {        return ERROR;        }if(((pDrvCtrl->pTxBufDesc->tail + 1)%TX_FD_NUM) != pDrvCtrl->pTxBufDesc->head)			{    END_TX_SEM_TAKE (&pDrvCtrl->end, WAIT_FOREVER);    pTx = pDrvCtrl->pTxBufDesc->transBufFd[pDrvCtrl->pTxBufDesc->tail].transBufPtr;    /*     * Obtain exclusive access to transmitter.  This is necessary because     * we might have more than one stack transmitting at once.     */    /* Set pointers in local structures to point to data. */    len = netMblkToBufCopy(pNBuff,                          (void *)pTx, NULL) ;   if(firstSend==1/*first */)   {    firstSend=0;	pDrvCtrl->pTxBufDesc->tail=pDrvCtrl->pTxBufDesc->head=0;	    stat = *(volatile UINT32 *)AT91C_EMAC_TSR;    if (!(stat & AT91C_EMAC_BNQ))		return ERROR;/*	printf("send ptr=%08x,length=%d\n",pTx,len); */    *(volatile UINT32 *)AT91C_EMAC_TSR = stat;/* Reset stat word */    /* place a transmit request */    oldLevel = intLock ();   /* now at91cEndInt won't get confused */    /* initiate device transmit *//*	logMsg("tar = %x \n",pTx,0,0,0,0,0); */    *(volatile UINT32 *)(AT91C_EMAC_TAR) = pTx;/*	logMsg("addr = %x \n",*(volatile UINT32 *)(AT91C_EMAC_TAR),0,0,0,0,0);*/    *(volatile UINT32 *)(AT91C_EMAC_TCR) = len;    *(volatile UINT32 *)AT91C_EMAC_CTL |= AT91C_EMAC_TE;    intUnlock (oldLevel);   /* now at91cEndInt won't get confused */    pDrvCtrl->pTxBufDesc->transBufFd[pDrvCtrl->pTxBufDesc->tail].length = len;/*    logMsg("addr = %x,len=%d,tain=%d\n",pDrvCtrl->pTxBufDesc->transBufFd[pDrvCtrl->pTxBufDesc->tail].transBufPtr,		len,pDrvCtrl->pTxBufDesc->tail,4,5,6); *//*  while(((*(volatile UINT32 *)AT91C_EMAC_TSR)&AT91C_EMAC_BNQ)==0);*/    pDrvCtrl->pTxBufDesc->tail = ((pDrvCtrl->pTxBufDesc->tail +1) % TX_FD_NUM);    pDrvCtrl->pTxBufDesc->head = ((pDrvCtrl->pTxBufDesc->head +1) % TX_FD_NUM);   }   else   {   	pDrvCtrl->pTxBufDesc->transBufFd[pDrvCtrl->pTxBufDesc->tail].length = len;/*	logMsg("addr = %x,len=%d,tain=%d\n",pDrvCtrl->pTxBufDesc->transBufFd[pDrvCtrl->pTxBufDesc->tail].transBufPtr,		len,pDrvCtrl->pTxBufDesc->tail,4,5,6); */	pDrvCtrl->pTxBufDesc->tail =((pDrvCtrl->pTxBufDesc->tail + 1) % TX_FD_NUM);   }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产ts人妖一区二区| 国产69精品久久99不卡| 久久综合网色—综合色88| 91视频xxxx| 国产精品一二三区在线| 亚洲一区视频在线| 国产精品理论片| 久久综合久久综合久久| 欧美精选午夜久久久乱码6080| 99在线视频精品| 国产综合久久久久影院| 视频一区二区欧美| 亚洲男同1069视频| 国产精品蜜臀在线观看| 亚洲精品在线免费观看视频| 精品视频在线免费看| 91免费国产视频网站| 风间由美中文字幕在线看视频国产欧美| 亚洲一二三四在线观看| 亚洲欧美自拍偷拍色图| 久久亚洲免费视频| 日韩欧美亚洲另类制服综合在线 | 91麻豆精品在线观看| 国产在线视频不卡二| 免费在线观看精品| 亚洲一区二区三区在线看| 亚洲欧美视频在线观看| 国产精品成人免费| 中文字幕欧美日本乱码一线二线| 精品少妇一区二区三区免费观看| 欧美挠脚心视频网站| 欧美在线视频不卡| 色哟哟国产精品免费观看| 成人午夜电影久久影院| 成人免费毛片app| 国产不卡在线播放| 国产精品一级在线| 国产成人在线看| 国产成人精品亚洲777人妖| 国产一区二区三区在线观看免费 | 激情综合网最新| 蜜臀va亚洲va欧美va天堂| 视频一区二区中文字幕| 日韩**一区毛片| 免费欧美在线视频| 久久精品理论片| 国精产品一区一区三区mba桃花| 狠狠网亚洲精品| 国产精品资源站在线| 高清成人免费视频| 成人黄色综合网站| 色呦呦网站一区| 色综合久久综合中文综合网| 在线免费精品视频| 欧美精品免费视频| 日韩天堂在线观看| 欧美精品一区二区高清在线观看| 精品美女在线播放| 久久视频一区二区| 国产日韩成人精品| 亚洲色欲色欲www在线观看| 伊人夜夜躁av伊人久久| 五月天久久比比资源色| 精品一二三四区| 国产suv精品一区二区6| 99国产精品国产精品久久| 欧美日韩综合色| 日韩午夜精品视频| 国产精品污www在线观看| 亚洲免费观看视频| 日韩和的一区二区| 国产成人综合亚洲网站| 日本精品免费观看高清观看| 欧美伦理影视网| 久久免费的精品国产v∧| 国产精品久久久久四虎| 亚洲电影欧美电影有声小说| 寂寞少妇一区二区三区| 91在线国产观看| 欧美精品九九99久久| 久久九九全国免费| 亚洲精品久久久蜜桃| 久久国产麻豆精品| 97久久精品人人做人人爽| 欧美高清一级片在线| 欧美国产一区二区在线观看| 亚洲一区二区三区视频在线播放| 蜜臀国产一区二区三区在线播放| av一区二区不卡| 欧美一区二区视频免费观看| 国产精品午夜免费| 免费成人深夜小野草| 91捆绑美女网站| 欧美成人精品高清在线播放| 亚洲精品欧美专区| 国产在线国偷精品产拍免费yy| 色一区在线观看| 国产网红主播福利一区二区| 午夜国产不卡在线观看视频| 国产91色综合久久免费分享| 91精品一区二区三区在线观看| 亚洲国产精华液网站w| 日本vs亚洲vs韩国一区三区 | 蜜臀91精品一区二区三区| 99国产麻豆精品| 国产亚洲综合色| 视频一区二区不卡| 色丁香久综合在线久综合在线观看| 久久久一区二区| 毛片av中文字幕一区二区| 在线观看日韩国产| 最新国产成人在线观看| 国产一区二区精品久久| 日韩欧美第一区| 五月综合激情日本mⅴ| 91成人免费电影| 国产精品国产三级国产有无不卡| 久久99精品久久久久婷婷| 欧美私人免费视频| **性色生活片久久毛片| 国产一区二区三区免费在线观看| 91麻豆精品国产91久久久使用方法 | 91在线精品一区二区三区| wwwwxxxxx欧美| 美日韩一区二区| 7878成人国产在线观看| 亚洲午夜av在线| 欧美性淫爽ww久久久久无| 亚洲三级久久久| 色综合天天综合狠狠| 国产精品卡一卡二| 99久久免费精品| 综合久久久久久| 色综合天天综合狠狠| 麻豆久久久久久| 日韩视频在线永久播放| 日韩精品免费专区| 欧美一区二区在线视频| 秋霞午夜av一区二区三区| 欧美日韩国产天堂| 三级欧美韩日大片在线看| 欧美少妇一区二区| 日本欧洲一区二区| 日韩欧美不卡在线观看视频| 蜜桃av一区二区| 久久久精品2019中文字幕之3| 国产成人精品三级| 中文字幕在线观看一区| 91官网在线免费观看| 亚洲国产美女搞黄色| 欧美精品色综合| 裸体一区二区三区| 国产三级精品视频| 91亚洲国产成人精品一区二三 | 亚洲成年人网站在线观看| 欧美日韩成人综合在线一区二区| 奇米影视一区二区三区| 精品国免费一区二区三区| 国产高清久久久久| 亚洲视频在线一区二区| 欧美日免费三级在线| 另类小说视频一区二区| 国产午夜亚洲精品不卡| 91蝌蚪国产九色| 日韩av在线播放中文字幕| 欧美精品一区二区久久久| 不卡的av电影在线观看| 亚洲与欧洲av电影| 日韩美女在线视频| 福利91精品一区二区三区| 夜夜嗨av一区二区三区| 欧美一区二区福利在线| 国产成人高清视频| 亚洲综合无码一区二区| 精品久久久久久久久久久久久久久久久 | 亚洲最大的成人av| 欧美一区欧美二区| 99久久精品国产导航| 日本不卡一区二区| 中文字幕成人av| 91精品国产综合久久久久久漫画| 国产酒店精品激情| 亚洲成人激情自拍| 国产清纯美女被跳蛋高潮一区二区久久w | 91久久线看在观草草青青| 欧美a一区二区| 日韩毛片精品高清免费| 91精品国产乱码久久蜜臀| 成人国产亚洲欧美成人综合网| 视频在线观看一区二区三区| 国产精品你懂的| 日韩一二三区不卡| 99re这里都是精品| 国产在线一区观看| 图片区小说区区亚洲影院| 国产精品少妇自拍| 日韩三级伦理片妻子的秘密按摩| 91麻豆精品在线观看| 国产成人亚洲综合a∨婷婷图片| 午夜国产不卡在线观看视频|