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

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

?? xemac_intr_dma.c

?? gumstiz u-boot loader in linux
?? C
?? 第 1 頁 / 共 4 頁
字號:
			 * be serviced.			 */			if (Result != XST_SUCCESS) {				break;			}			InstancePtr->Stats.RecvFrames++;			InstancePtr->Stats.RecvBytes += NumBytes;			/*			 * Make the callback to the upper layers, passing it the first			 * descriptor in the packet and the number of descriptors in the			 * packet.			 */			InstancePtr->SgRecvHandler(InstancePtr->SgRecvRef,						   FirstBdPtr, NumBuffers);			/*			 * Decrement the packet count register to reflect the fact we			 * just processed a packet			 */			XDmaChannel_DecrementPktCount(&InstancePtr->						      RecvChannel);		}		/* end for loop */		/*		 * If the interrupt was an end-ack, check the descriptor list again to		 * see if it is empty. If not, go ahead and restart the scatter-gather		 * channel. This is to fix a possible race condition where, on receive,		 * the driver attempted to start a scatter-gather channel that was		 * already started, which resulted in no action from the XDmaChannel		 * component. But, just after the XDmaChannel component saw that the		 * hardware was already started, the hardware stopped because it		 * reached the end of the list.  In that case, this interrupt is		 * generated and we can restart the hardware here.		 */		if (IntrStatus & XDC_IXR_SG_END_MASK) {			/*			 * Ignore the return status since we know the list exists and we			 * don't care if the list is empty or the channel is already started.			 */			(void) XDmaChannel_SgStart(&InstancePtr->RecvChannel);		}	}	/*	 * All interrupts are handled (except the error below) so acknowledge	 * (clear) the interrupts by writing the value read above back to the status	 * register. The packet count interrupt must be acknowledged after the	 * decrement, otherwise it will come right back. We clear the interrupts	 * before we handle the error interrupt because the ErrorHandler should	 * result in a reset, which clears the interrupt status register. So we	 * don't want to toggle the interrupt back on by writing the interrupt	 * status register with an old value after a reset.	 */	XDmaChannel_SetIntrStatus(&InstancePtr->RecvChannel, IntrStatus);	/*	 * Check for DMA errors and call the error callback function if an error	 * occurred (DMA bus or timeout error), which should result in a reset of	 * the device by the upper layer software.	 */	if (IntrStatus & XDC_IXR_DMA_ERROR_MASK) {		InstancePtr->Stats.DmaErrors++;		InstancePtr->ErrorHandler(InstancePtr->ErrorRef, XST_DMA_ERROR);	}}/*****************************************************************************//*** Handle an interrupt from the DMA send channel. DMA interrupts are:** - DMA error. DMA encountered a bus error or timeout. This is a fatal error*   that requires reset of the channel.  The driver calls the error handler*   of the upper layer software with an error code indicating the device should*   be reset.* - Packet count threshold reached.  For scatter-gather operations, indicates*   the threshold for the number of packets not serviced by software has been*   reached. The driver behaves as follows:*       - Get the value of the packet counter, which tells us how many packets*         are ready to be serviced*       - For each packet*           - For each descriptor, remove it from the scatter-gather list*           - Check for the last descriptor in the frame, and if set*               - Bump frame statistics*               - Call the scatter-gather receive callback function*               - Decrement the packet counter by one*       Note that there are no receive errors reported in the status word of*       the buffer descriptor.  If receive errors occur, the MAC drops the*       packet, and we only find out about the errors through various error*       count registers.* - Packet wait bound reached.  For scatter-gather, indicates the time to wait*   for the next packet has expired.  The driver follows the same logic as when*   the packet count threshold interrupt is received.* - Scatter-gather end acknowledge.  Hardware has reached the end of the*   descriptor list.  The driver follows the same logic as when the packet count*   threshold interrupt is received. In addition, the driver restarts the DMA*   scatter-gather channel in case there are newly inserted descriptors.** @param InstancePtr is a pointer to the XEmac instance to be worked on.** @return** Although the function returns void, there are asynchronous errors* that can be generated from this function.  These are:* - XST_DMA_SG_LIST_EMPTY indicates we tried to get a buffer descriptor from*   the DMA channel, but there was not one ready for software.* - XST_DMA_ERROR indicates a DMA bus error or timeout occurred. This is a*   fatal error that requires reset.** @note** None.*******************************************************************************/static voidHandleDmaSendIntr(XEmac * InstancePtr){	u32 IntrStatus;	/*	 * Read the interrupt status	 */	IntrStatus = XDmaChannel_GetIntrStatus(&InstancePtr->SendChannel);	/*	 * For packet threshold or wait bound interrupt, process descriptors. Also	 * process descriptors on a SG end acknowledgement, which means the end of	 * the descriptor list has been reached by the hardware. For transmit,	 * this is a normal condition during times of light traffic.  In fact, the	 * wait bound interrupt may be masked for transmit since the end-ack would	 * always occur before the wait bound expires.	 */	if (IntrStatus & (XDC_IXR_PKT_THRESHOLD_MASK |			  XDC_IXR_PKT_WAIT_BOUND_MASK | XDC_IXR_SG_END_MASK)) {		XStatus Result = XST_SUCCESS;		u32 NumFrames;		u32 NumProcessed;		u32 NumBuffers;		u32 NumBytes;		u32 IsLast;		XBufDescriptor *FirstBdPtr;		XBufDescriptor *BdPtr;		/*		 * Get the number of unserviced packets		 */		NumFrames = XDmaChannel_GetPktCount(&InstancePtr->SendChannel);		for (NumProcessed = 0; NumProcessed < NumFrames; NumProcessed++) {			IsLast = FALSE;			FirstBdPtr = NULL;			NumBuffers = 0;			NumBytes = 0;			/*			 * For each frame, traverse the descriptor list and look for			 * errors. On the last one in the frame, make the callback.			 */			while (!IsLast) {				Result =				    XDmaChannel_GetDescriptor(&InstancePtr->							      SendChannel,							      &BdPtr);				if (Result != XST_SUCCESS) {					/*					 * An error getting a buffer descriptor from the list.					 * This should not happen, but if it does, report it to					 * the error callback and break out of the loops to service					 * other interrupts					 */					InstancePtr->ErrorHandler(InstancePtr->								  ErrorRef,								  Result);					break;				}				/*				 * Keep a pointer to the first descriptor in the list and				 * check the device status for errors. The device status is				 * only available in the first descriptor of a packet.				 */				if (FirstBdPtr == NULL) {					u32 XmitStatus;					FirstBdPtr = BdPtr;					XmitStatus =					    XBufDescriptor_GetDeviceStatus					    (BdPtr);					if (XmitStatus &					    XEM_TSR_EXCESS_DEFERRAL_MASK) {						InstancePtr->Stats.						    XmitExcessDeferral++;					}					if (XmitStatus &					    XEM_TSR_LATE_COLLISION_MASK) {						InstancePtr->Stats.						    XmitLateCollisionErrors++;					}				}				NumBytes += XBufDescriptor_GetLength(BdPtr);				/*				 * Check to see if this is the last descriptor in the frame,				 * and if so, set the IsLast flag to get out of the loop. The				 * transmit channel must check the last bit in the control				 * word, not the status word (the DMA engine does not update				 * the last bit in the status word for the transmit direction).				 */				if (XBufDescriptor_IsLastControl(BdPtr)) {					IsLast = TRUE;				}				/*				 * Bump the number of buffers in this packet				 */				NumBuffers++;			}	/* end while loop */			/*			 * Check for error that occurred inside the while loop, and break			 * out of the for loop if there was one so other interrupts can			 * be serviced.			 */			if (Result != XST_SUCCESS) {				break;			}			InstancePtr->Stats.XmitFrames++;			InstancePtr->Stats.XmitBytes += NumBytes;			/*			 * Make the callback to the upper layers, passing it the first			 * descriptor in the packet and the number of descriptors in the			 * packet.			 */			InstancePtr->SgSendHandler(InstancePtr->SgSendRef,						   FirstBdPtr, NumBuffers);			/*			 * Decrement the packet count register to reflect the fact we			 * just processed a packet			 */			XDmaChannel_DecrementPktCount(&InstancePtr->						      SendChannel);		}		/* end for loop */		/*		 * If the interrupt was an end-ack, check the descriptor list again to		 * see if it is empty. If not, go ahead and restart the scatter-gather		 * channel. This is to fix a possible race condition where, on transmit,		 * the driver attempted to start a scatter-gather channel that was		 * already started, which resulted in no action from the XDmaChannel		 * component. But, just after the XDmaChannel component saw that the		 * hardware was already started, the hardware stopped because it		 * reached the end of the list.  In that case, this interrupt is		 * generated and we can restart the hardware here.		 */		if (IntrStatus & XDC_IXR_SG_END_MASK) {			/*			 * Ignore the return status since we know the list exists and we			 * don't care if the list is empty or the channel is already started.			 */			(void) XDmaChannel_SgStart(&InstancePtr->SendChannel);		}	}	/*	 * All interrupts are handled (except the error below) so acknowledge	 * (clear) the interrupts by writing the value read above back to the status	 * register. The packet count interrupt must be acknowledged after the	 * decrement, otherwise it will come right back. We clear the interrupts	 * before we handle the error interrupt because the ErrorHandler should	 * result in a reset, which clears the interrupt status register. So we	 * don't want to toggle the interrupt back on by writing the interrupt	 * status register with an old value after a reset.	 */	XDmaChannel_SetIntrStatus(&InstancePtr->SendChannel, IntrStatus);	/*	 * Check for DMA errors and call the error callback function if an error	 * occurred (DMA bus or timeout error), which should result in a reset of	 * the device by the upper layer software.	 */	if (IntrStatus & XDC_IXR_DMA_ERROR_MASK) {		InstancePtr->Stats.DmaErrors++;		InstancePtr->ErrorHandler(InstancePtr->ErrorRef, XST_DMA_ERROR);	}}/*****************************************************************************//*** Handle an interrupt from the Ethernet MAC when configured with scatter-gather* DMA. The only interrupts handled in this case are errors.** @param InstancePtr is a pointer to the XEmac instance to be worked on.** @return** None.** @note** None.*******************************************************************************/static voidHandleEmacDmaIntr(XEmac * InstancePtr){	u32 IntrStatus;	/*	 * When configured with DMA, the EMAC generates interrupts only when errors	 * occur. We clear the interrupts immediately so that any latched status	 * interrupt bits will reflect the true status of the device, and so any	 * pulsed interrupts (non-status) generated during the Isr will not be lost.	 */	IntrStatus = XIIF_V123B_READ_IISR(InstancePtr->BaseAddress);	XIIF_V123B_WRITE_IISR(InstancePtr->BaseAddress, IntrStatus);	/*	 * Check the MAC for errors	 */	XEmac_CheckEmacError(InstancePtr, IntrStatus);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女视频在线| 欧美丝袜第三区| 91黄色免费看| 久久这里只有精品6| 亚洲麻豆国产自偷在线| 国产精品一二三四区| 成人aaaa免费全部观看| 亚洲一区二区三区免费视频| 欧美日免费三级在线| 在线观看亚洲一区| 91视频91自| 中文字幕不卡在线播放| 欧美日韩一卡二卡三卡 | 精品国产精品一区二区夜夜嗨| 国产人久久人人人人爽| 日韩二区在线观看| 在线看日本不卡| 成人欧美一区二区三区小说| 国产伦精品一区二区三区在线观看 | 26uuuu精品一区二区| 亚洲线精品一区二区三区八戒| 国产成人在线看| 欧美精品一区男女天堂| 蜜桃精品在线观看| 337p亚洲精品色噜噜狠狠| 欧美在线视频日韩| 日韩欧美在线网站| 日本欧美一区二区在线观看| 精品污污网站免费看| 亚洲国产精品久久久男人的天堂| av不卡一区二区三区| 中文字幕一区二区三区不卡在线| 国产精品一卡二卡在线观看| www成人在线观看| 国产一区二区久久| 国产女人水真多18毛片18精品视频| 激情五月婷婷综合| 久久久久久久久蜜桃| 国产精品一区在线| 国产精品午夜免费| av不卡免费在线观看| 亚洲欧美视频一区| 欧美日免费三级在线| 午夜天堂影视香蕉久久| 日韩欧美国产一区二区三区 | 免费成人小视频| 日韩一区二区免费在线电影| 国产最新精品免费| 亚洲欧洲无码一区二区三区| 色综合久久综合中文综合网| 一区二区三区成人在线视频| 欧美老女人第四色| 久久国产精品99精品国产| 精品国产免费视频| 成人动漫在线一区| 亚洲大片免费看| 日韩欧美第一区| www.久久精品| 午夜视频一区在线观看| 精品国产百合女同互慰| 99热在这里有精品免费| 日韩中文字幕一区二区三区| 久久久精品影视| 日本高清不卡aⅴ免费网站| 天堂一区二区在线| 久久九九99视频| 色94色欧美sute亚洲线路一ni| 图片区小说区国产精品视频| 国产亚洲综合性久久久影院| 欧美色精品天天在线观看视频| 国产曰批免费观看久久久| 中文字幕综合网| 在线不卡免费欧美| 岛国一区二区在线观看| 天使萌一区二区三区免费观看| 精品动漫一区二区三区在线观看| www.视频一区| 九九热在线视频观看这里只有精品| 国产精品毛片久久久久久久| 8v天堂国产在线一区二区| 白白色亚洲国产精品| 麻豆freexxxx性91精品| 亚洲一区二区三区四区在线 | 一区二区三区日韩欧美精品| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲综合色噜噜狠狠| 久久久久97国产精华液好用吗| 欧美日精品一区视频| 99久久伊人网影院| 久久99精品久久久久久| 亚洲成av人片在线观看无码| 国产亚洲短视频| 欧美本精品男人aⅴ天堂| 欧美日韩国产高清一区二区 | 日韩理论在线观看| 久久亚区不卡日本| 91精品国产综合久久蜜臀 | 风间由美一区二区av101| 蜜桃传媒麻豆第一区在线观看| 一区二区久久久久久| 国产欧美一区二区三区在线看蜜臀 | 91美女精品福利| 国产激情视频一区二区在线观看 | 久久先锋资源网| 欧美一区二区在线观看| 欧美日韩精品一二三区| 91极品美女在线| 色又黄又爽网站www久久| 不卡区在线中文字幕| 国产精品123| 国产成人精品一区二| 国产伦精品一区二区三区视频青涩 | 亚洲综合色区另类av| 夜色激情一区二区| 亚洲色图.com| 亚洲欧美国产高清| 亚洲综合999| 亚洲一区精品在线| 亚洲成a人片在线观看中文| 亚洲成人av在线电影| 午夜欧美大尺度福利影院在线看| 亚洲国产视频一区二区| 视频一区二区三区中文字幕| 天天操天天色综合| 六月丁香婷婷色狠狠久久| 开心九九激情九九欧美日韩精美视频电影 | 国产美女一区二区三区| 国产夫妻精品视频| 粉嫩一区二区三区性色av| 成人激情动漫在线观看| 91玉足脚交白嫩脚丫在线播放| 在线视频中文字幕一区二区| 欧美视频日韩视频在线观看| 欧美人体做爰大胆视频| 精品久久久久久无| 欧美国产成人精品| 亚洲午夜精品久久久久久久久| 天天av天天翘天天综合网色鬼国产| 另类综合日韩欧美亚洲| 大胆亚洲人体视频| 欧美日韩中文字幕一区| www激情久久| 亚洲蜜臀av乱码久久精品| 日韩高清欧美激情| 国产suv精品一区二区883| 色老汉一区二区三区| 日韩欧美综合一区| 国产精品成人一区二区三区夜夜夜| 一区二区三区在线看| 久久精品国内一区二区三区| 成人av小说网| 7799精品视频| 国产精品美日韩| 日日欢夜夜爽一区| 成人午夜视频免费看| 欧美日韩高清影院| 中文字幕不卡一区| 日韩av不卡一区二区| www.性欧美| 日韩一区二区在线播放| 中文字幕一区在线| 玖玖九九国产精品| 欧美色大人视频| 自拍偷拍亚洲欧美日韩| 久久99精品国产.久久久久 | 成人激情综合网站| 日韩欧美的一区二区| 亚洲女人的天堂| 国产乱人伦偷精品视频免下载 | 亚洲成人综合网站| 国产69精品久久久久777| 91精品国产综合久久精品性色| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美一区二区在线播放| 亚洲欧洲成人自拍| 国产伦精品一区二区三区免费迷 | 国产精品免费av| 狠狠色综合播放一区二区| 精品视频一区二区三区免费| 国产精品免费久久| 国产99久久久精品| 久久亚洲综合av| 日本va欧美va精品发布| 欧美视频在线一区二区三区 | 国产三级三级三级精品8ⅰ区| 日韩精品色哟哟| 日本高清不卡视频| 亚洲欧洲日产国码二区| 国产不卡视频一区二区三区| 精品国产一区二区三区久久久蜜月| 天天av天天翘天天综合网 | 91美女福利视频| 中文字幕人成不卡一区| 国产91露脸合集magnet | 日韩精品一区二区在线观看| 亚洲国产综合91精品麻豆| 色综合久久综合| 亚洲视频一二区| 一本一道久久a久久精品| 亚洲欧美日韩在线|