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

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

?? rtusb_bulk.c

?? RT73_Linux_STA_Drv1.0.3.6 linux系統(tǒng)下
?? C
?? 第 1 頁 / 共 3 頁
字號:
	{
		DBGPRINT(RT_DEBUG_ERROR,"Submit Tx URB failed %d\n", ret);
		return;
	}
	
	DBGPRINT_RAW(RT_DEBUG_INFO, "<---RTUSBBulkOutPsPoll \n");
	return;
}

/*
	========================================================================

	Routine Description:
	USB_RxPacket initializes a URB and uses the Rx IRP to submit it
	to USB. It checks if an Rx Descriptor is available and passes the
	the coresponding buffer to be filled. If no descriptor is available
	fails the request. When setting the completion routine we pass our
	Adapter Object as Context.
		
	Arguments:
		
	Return Value:
		TRUE			found matched tuple cache
		FALSE			no matched found

	Note:
	
	========================================================================
*/
VOID	RTUSBBulkReceive(
	IN	PRTMP_ADAPTER	pAd)
{
	PRX_CONTEXT pRxContext;
	PURB		pUrb;
	int 		ret = 0;
	
	if ((RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))||
		(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))||
		(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_PIPE_IN_PROGRESS)))
	{
		return;
	}

	DBGPRINT(RT_DEBUG_INFO,"RTUSBBulkReceive:: pAd->NextRxBulkInIndex = %d\n",pAd->NextRxBulkInIndex);
 
	pRxContext = &(pAd->RxContext[pAd->NextRxBulkInIndex]);
	pRxContext->InUse = TRUE;
	pAd->NextRxBulkInIndex = (pAd->NextRxBulkInIndex + 1) % RX_RING_SIZE;
	
	atomic_set(&pRxContext->IrpLock, IRPLOCK_CANCELABLE);	
	atomic_inc(&pAd->PendingRx);

	// Init Rx context descriptor
	NdisZeroMemory(pRxContext->TransferBuffer, BUFFER_SIZE);
	RTUSBInitRxDesc(pAd, pRxContext);
	
	pUrb = pRxContext->pUrb;
	if((ret = rtusb_submit_urb(pUrb))!=0)
	{
		DBGPRINT(RT_DEBUG_ERROR,"Submit Rx URB failed %d\n", ret);
		return;
	}

	return;
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	Note:
	
	========================================================================
*/
VOID	RTUSBKickBulkOut(
	IN	PRTMP_ADAPTER pAd)
{
	
	DBGPRINT_RAW(RT_DEBUG_INFO, "--->RTUSBKickBulkOut\n");
	
	
	if (!(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
		!(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
		!(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
		!(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_PIPE_IN_PROGRESS)) &&
		!(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)))
	{

		// 1. Data Fragment has highest priority
		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_FRAG))
		{
			if ((!LOCAL_TX_RING_EMPTY(pAd, 0)) && 
				(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)))
			{				
				RTUSBBulkOutDataPacket(pAd, 0, pAd->NextBulkOutIndex[0]);
			}
		}
		
		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_FRAG_2))
		{
			if ((!LOCAL_TX_RING_EMPTY(pAd, 1)) && 
				(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)))
			{
				RTUSBBulkOutDataPacket(pAd, 1, pAd->NextBulkOutIndex[1]);
			}
		}
		
		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_FRAG_3))
		{
			if ((!LOCAL_TX_RING_EMPTY(pAd, 2)) && 
				(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)))
			{
				RTUSBBulkOutDataPacket(pAd, 2, pAd->NextBulkOutIndex[2]);
			}
		}
		
		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_FRAG_4))
		{		
			if ((!LOCAL_TX_RING_EMPTY(pAd, 3)) && 
				(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)))
			{
				RTUSBBulkOutDataPacket(pAd, 3, pAd->NextBulkOutIndex[3]);
			}
		}
		
		// 2. PS-Poll frame is next
		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL))
		{
			RTUSBBulkOutPsPoll(pAd);
		}		
		// 5. Mlme frame is next
		else if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME))
		{
			RTUSBBulkOutMLMEPacket(pAd, pAd->PrioRingFirstIndex);
		}

		// 6. Data frame normal is next
		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL))
		{
			if ((!LOCAL_TX_RING_EMPTY(pAd, 0)) && 
				(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)))
			{
				RTUSBBulkOutDataPacket(pAd, 0, pAd->NextBulkOutIndex[0]);			
			}
		}
				
		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_2))
		{		
			if ((!LOCAL_TX_RING_EMPTY(pAd, 1)) && 
				(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)))			
			{
				RTUSBBulkOutDataPacket(pAd, 1, pAd->NextBulkOutIndex[1]);
			}
		}

		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_3))
		{
			if ((!LOCAL_TX_RING_EMPTY(pAd, 2)) && 
				(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)))			
			{
				RTUSBBulkOutDataPacket(pAd, 2, pAd->NextBulkOutIndex[2]);
			}
		}
		
		if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_4))
		{
			if ((!LOCAL_TX_RING_EMPTY(pAd, 3)) && 
				(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)))			
			{
				RTUSBBulkOutDataPacket(pAd, 3, pAd->NextBulkOutIndex[3]);
			}
		}

		// 7. Null frame is the last
		else if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL))
		{
			if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
			{
				RTUSBBulkOutNullFrame(pAd);
			}
		}
		
		// 8. No data avaliable
		else
		{
			
		}
	}
	
	DBGPRINT_RAW(RT_DEBUG_INFO, "<---RTUSBKickBulkOut\n");
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	Note:
	
	========================================================================
*/
VOID	RTUSBCleanUpDataBulkOutQueue(
	IN	PRTMP_ADAPTER	pAd)
{
	UCHAR			Idx;
	PTX_CONTEXT 	pTxContext;			
	ULONG			IrqFlags;
	
	DBGPRINT(RT_DEBUG_TRACE, "--->CleanUpDataBulkOutQueue\n");

	for (Idx = 0; Idx < 4; Idx++)
	{
		while (!LOCAL_TX_RING_EMPTY(pAd, Idx))
		{			
			pTxContext						= &(pAd->TxContext[Idx][pAd->NextBulkOutIndex[Idx]]);
			pTxContext->LastOne 			= FALSE;
			pTxContext->InUse				= FALSE;
			pTxContext->bWaitingBulkOut		= FALSE;
			pAd->NextBulkOutIndex[Idx] = (pAd->NextBulkOutIndex[Idx] + 1) % TX_RING_SIZE;
		}
		NdisAcquireSpinLock(&pAd->BulkOutLock[Idx], IrqFlags);
		pAd->BulkOutPending[Idx] = FALSE;
		NdisReleaseSpinLock(&pAd->BulkOutLock[Idx], IrqFlags);
	}
	
	DBGPRINT(RT_DEBUG_TRACE, "<---CleanUpDataBulkOutQueue\n");
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:
	
	Note:
	
	========================================================================
*/
VOID	RTUSBCleanUpMLMEBulkOutQueue(
	IN	PRTMP_ADAPTER	pAd)
{
	ULONG			IrqFlags;
	
	DBGPRINT(RT_DEBUG_TRACE, "--->CleanUpMLMEBulkOutQueue\n");

	NdisAcquireSpinLock(&pAd->MLMEQLock, IrqFlags);
	while (pAd->PrioRingTxCnt > 0)
	{
		pAd->MLMEContext[pAd->PrioRingFirstIndex].InUse = FALSE;
			
		pAd->PrioRingFirstIndex++;
		if (pAd->PrioRingFirstIndex >= PRIO_RING_SIZE)
		{
			pAd->PrioRingFirstIndex = 0;
		}

		pAd->PrioRingTxCnt--;
	}
	NdisReleaseSpinLock(&pAd->MLMEQLock, IrqFlags);

	DBGPRINT(RT_DEBUG_TRACE, "<---CleanUpMLMEBulkOutQueue\n");
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	Note:
	
	========================================================================
*/
VOID	RTUSBCancelPendingBulkInIRP(
	IN	PRTMP_ADAPTER	pAd)
{
	PRX_CONTEXT	pRxContext;
	UINT		i;

	DBGPRINT_RAW(RT_DEBUG_TRACE,"--->RTUSBCancelPendingBulkInIRP\n");
	for ( i = 0; i < RX_RING_SIZE; i++)
	{
		pRxContext = &(pAd->RxContext[i]);
		if(atomic_read(&pRxContext->IrpLock) == IRPLOCK_CANCELABLE)
		{
			RTUSB_UNLINK_URB(pRxContext->pUrb);
		}
		atomic_set(&pRxContext->IrpLock, IRPLOCK_CANCE_START);
	}
	DBGPRINT_RAW(RT_DEBUG_TRACE,"<---RTUSBCancelPendingBulkInIRP\n");
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	Note:
	
	========================================================================
*/
VOID	RTUSBCancelPendingBulkOutIRP(
	IN	PRTMP_ADAPTER	pAd)
{
	PTX_CONTEXT		pTxContext;
	PTX_CONTEXT		pMLMEContext;
	PTX_CONTEXT		pBeaconContext;
	PTX_CONTEXT		pNullContext;
	PTX_CONTEXT		pPsPollContext;
	PTX_CONTEXT		pRTSContext;
	UINT			i, Idx;
	ULONG			IrqFlags;

	for (Idx = 0; Idx < 4; Idx++)
	{
		for (i = 0; i < TX_RING_SIZE; i++)
		{
			pTxContext = &(pAd->TxContext[Idx][i]);

			if (pTxContext->IRPPending == TRUE)
			{

				// Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself
				// remove it from the HeadPendingSendList and NULL out HeadPendingSendList
				//	when the last IRP on the list has been	cancelled; that's how we exit this loop
				//

				RTUSB_UNLINK_URB(pTxContext->pUrb);

				// Sleep 200 microseconds to give cancellation time to work
				RTMPusecDelay(200);
			}
		}
	}

	for (i = 0; i < PRIO_RING_SIZE; i++)
	{
		pMLMEContext = &(pAd->MLMEContext[i]);

		if(pMLMEContext->IRPPending == TRUE)
		{

			// Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself
			// remove it from the HeadPendingSendList and NULL out HeadPendingSendList
			//	when the last IRP on the list has been	cancelled; that's how we exit this loop
			//

			RTUSB_UNLINK_URB(pMLMEContext->pUrb);

			// Sleep 200 microsecs to give cancellation time to work
			RTMPusecDelay(200);
		}
	}

	for (i = 0; i < BEACON_RING_SIZE; i++)
	{
		pBeaconContext = &(pAd->BeaconContext[i]);

		if(pBeaconContext->IRPPending == TRUE)
		{

			// Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself
			// remove it from the HeadPendingSendList and NULL out HeadPendingSendList
			//	when the last IRP on the list has been	cancelled; that's how we exit this loop
			//

			RTUSB_UNLINK_URB(pBeaconContext->pUrb);

			// Sleep 200 microsecs to give cancellation time to work
			RTMPusecDelay(200);
		}
	}

	pNullContext = &(pAd->NullContext);
	if (pNullContext->IRPPending == TRUE)
		RTUSB_UNLINK_URB(pNullContext->pUrb);

	pRTSContext = &(pAd->RTSContext);
	if (pRTSContext->IRPPending == TRUE)
		RTUSB_UNLINK_URB(pRTSContext->pUrb);
		
	pPsPollContext = &(pAd->PsPollContext);
	if (pPsPollContext->IRPPending == TRUE)
		RTUSB_UNLINK_URB(pPsPollContext->pUrb);

	for (Idx = 0; Idx < 4; Idx++)
	{
		NdisAcquireSpinLock(&pAd->BulkOutLock[Idx], IrqFlags);
		pAd->BulkOutPending[Idx] = FALSE;
		NdisReleaseSpinLock(&pAd->BulkOutLock[Idx], IrqFlags);
	}
}

/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	Note:
	
	========================================================================
*/
VOID	RTUSBCancelPendingIRPs(
	IN	PRTMP_ADAPTER	pAd)
{
	RTUSBCancelPendingBulkInIRP(pAd);
	RTUSBCancelPendingBulkOutIRP(pAd);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
aaa亚洲精品| 欧美亚州韩日在线看免费版国语版| 国产精品一区二区三区网站| 高清shemale亚洲人妖| 国产精品性做久久久久久| 久久久久久久久久久黄色| 欧美高清视频在线高清观看mv色露露十八 | 久久国产综合精品| 成人av在线一区二区三区| 久久精品男人的天堂| 一本色道久久综合精品竹菊| 亚洲黄色小视频| 色狠狠一区二区| 亚洲精品一二三| 欧美性生活久久| 亚洲不卡av一区二区三区| 欧美专区亚洲专区| 九九视频精品免费| 日韩一级片在线观看| 成人午夜激情在线| 性做久久久久久免费观看欧美| 欧美一区二区网站| 亚洲另类中文字| 亚洲精品亚洲人成人网| 亚洲一区影音先锋| 91精品国产综合久久福利软件 | 中文字幕一区日韩精品欧美| 久久99热这里只有精品| 成人动漫一区二区三区| 国产精品蜜臀av| 久久影院视频免费| 亚洲精品乱码久久久久久日本蜜臀| 精品国产乱码久久久久久久| 久久网站热最新地址| 毛片基地黄久久久久久天堂| 欧美亚洲动漫精品| 日韩美女啊v在线免费观看| av资源站一区| 国产精品乱人伦一区二区| 国产一区二区三区高清播放| 久久欧美中文字幕| 狠狠色综合日日| 欧美体内she精视频| 亚洲影院久久精品| 成人一级黄色片| 在线不卡的av| 久久狠狠亚洲综合| 日韩精品中文字幕一区| 国产老妇另类xxxxx| 久久亚洲精精品中文字幕早川悠里| 天天色天天爱天天射综合| 欧美一区二区三区人| 亚洲va欧美va国产va天堂影院| 91美女片黄在线观看91美女| 午夜电影网一区| 欧美日韩视频专区在线播放| 亚洲一二三区视频在线观看| 色综合久久综合网欧美综合网| 亚洲欧美另类久久久精品2019| 成人精品高清在线| 精品亚洲成a人| 精品国产区一区| 国产在线麻豆精品观看| 中文字幕欧美国产| 91在线高清观看| 五月天丁香久久| 欧美成人精品3d动漫h| 国产美女视频91| 亚洲综合在线观看视频| 欧美午夜免费电影| 美女尤物国产一区| ㊣最新国产の精品bt伙计久久| 91免费国产在线观看| 亚洲午夜av在线| 精品日产卡一卡二卡麻豆| 精品一区二区三区欧美| 久久久高清一区二区三区| 99re免费视频精品全部| 三级在线观看一区二区| 久久久99久久精品欧美| 91免费观看在线| 久久成人麻豆午夜电影| 中文在线资源观看网站视频免费不卡| 欧美性色黄大片手机版| 日本亚洲一区二区| 久久影视一区二区| 欧美午夜精品免费| 国产一二三精品| 日韩在线a电影| 一区视频在线播放| 久久一留热品黄| 欧美酷刑日本凌虐凌虐| 日韩精品五月天| 亚洲美女少妇撒尿| 国产一区二区三区在线看麻豆| 国产精品国产三级国产普通话蜜臀| 欧美精品aⅴ在线视频| 精品一区二区三区蜜桃| 日本不卡在线视频| 最新日韩在线视频| 国产精品国产成人国产三级 | 在线看日本不卡| 久久99久久久久| 日韩激情一二三区| 亚洲天堂免费看| 麻豆精品在线播放| 国产精品久久夜| 欧美成va人片在线观看| 欧美精品自拍偷拍| 99久久精品国产毛片| 综合av第一页| 国产精品嫩草影院com| 日韩欧美精品三级| 日韩一区二区三区免费观看 | 日本va欧美va欧美va精品| 一二三四社区欧美黄| 国产精品第四页| 欧美一区二区视频在线观看| 色欧美日韩亚洲| av午夜一区麻豆| 国产呦萝稀缺另类资源| 蜜臀av性久久久久蜜臀aⅴ| 亚洲观看高清完整版在线观看| 国产精品麻豆欧美日韩ww| 2024国产精品| 国产欧美日韩精品一区| 久久先锋资源网| 欧美电影免费提供在线观看| 欧美一区永久视频免费观看| 欧美丝袜自拍制服另类| 正在播放亚洲一区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲高清视频的网址| 亚洲综合在线视频| 婷婷久久综合九色综合绿巨人| 日韩国产欧美在线观看| 日韩不卡手机在线v区| 亚洲综合在线电影| 一个色综合av| 日韩—二三区免费观看av| 免费看日韩精品| 国产一区三区三区| 美洲天堂一区二卡三卡四卡视频| 久久国产精品99精品国产| 国产毛片精品视频| 国产激情一区二区三区四区| 欧美国产欧美综合| 精品国产电影一区二区| 久久人人爽爽爽人久久久| 久久久激情视频| 一区二区久久久久| 日韩一区精品字幕| 丁香另类激情小说| 一本一道波多野结衣一区二区| 91丨porny丨国产入口| 国产传媒欧美日韩成人| 一本一道综合狠狠老| 日韩欧美高清一区| 精品av久久707| 国产精品乱人伦一区二区| 美女在线视频一区| fc2成人免费人成在线观看播放| 欧美色大人视频| 久久这里都是精品| 亚洲国产精品激情在线观看| 亚洲激情网站免费观看| 日本欧美一区二区| 91美女视频网站| 欧美成人女星排名| 亚洲国产精品视频| 国产乱码精品一区二区三区五月婷| 成人午夜精品一区二区三区| 日韩欧美一级片| 一区精品在线播放| 国内欧美视频一区二区| 欧美在线短视频| 欧美一级夜夜爽| 亚洲自拍偷拍图区| 国产在线播放一区| 精品粉嫩超白一线天av| 亚洲精品综合在线| 成人福利视频网站| 88在线观看91蜜桃国自产| 91福利在线观看| 一本久道中文字幕精品亚洲嫩| 26uuu欧美| 麻豆91在线播放免费| 91久久精品午夜一区二区| 国产日韩欧美一区二区三区乱码| 天天操天天色综合| 色偷偷一区二区三区| 亚洲欧洲av另类| 国产精品888| 久久婷婷久久一区二区三区| 亚洲国产欧美在线| 九九九精品视频| 久久影院午夜论| 久久不见久久见免费视频7| 精品少妇一区二区三区免费观看| 亚洲国产精品天堂|