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

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

?? rtusb_data.c

?? 臺灣RALink公司的 rt2570無線 802.11g 網卡的 驅動的源代碼 ,支持linux2.4以上的 內河
?? C
?? 第 1 頁 / 共 5 頁
字號:
}
/*
	========================================================================
	
	Routine Description:

	Arguments:

	Return Value:

	IRQL = 
	
	Note:
	
	========================================================================
*/
VOID	RTUSBRejectPendingPackets(
	IN	PRT2570ADAPTER	pAdapter)
{
	PQUEUE_HEADER	pQueue = &(pAdapter->SendTxWaitQueue);
	struct sk_buff  *skb;
	DBGPRINT_RAW(RT_DEBUG_TRACE, "--->RejectPendingPackets\n");

	NdisAcquireSpinLock(&pAdapter->SendTxWaitQueueLock);
	while (pAdapter->SendTxWaitQueue.Head != NULL)
	{
		DBGPRINT_RAW(RT_DEBUG_TRACE, " Remove 1 from SendTxWaitQueue\n");
		skb = (struct sk_buff *)RemoveHeadQueue(pQueue);
		RTUSBFreeSkbBuffer(skb);
	}
	NdisReleaseSpinLock(&pAdapter->SendTxWaitQueueLock);

	DBGPRINT_RAW(RT_DEBUG_TRACE, "<---RejectPendingPackets\n");
}

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

	Routine	Description:
		Suspend MSDU transmission
		
	Arguments:
		pAdapter		Pointer	to our adapter
		
	Return Value:
		None
		
	Note:
	
	========================================================================
*/
VOID    RTUSBSuspendMsduTransmission(
	IN	PRT2570ADAPTER	pAdapter)
{
	DBGPRINT(RT_DEBUG_TRACE,"SCANNING, suspend MSDU transmission ...\n");
	RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
}

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

	Routine	Description:
		Resume MSDU transmission
		
	Arguments:
		pAdapter		Pointer	to our adapter
		
	Return Value:
		None
		
	Note:
	
	========================================================================
*/
VOID    RTUSBResumeMsduTransmission(
	IN	PRT2570ADAPTER	pAdapter)
{
	DBGPRINT(RT_DEBUG_TRACE,"SCANNING, resume MSDU transmission ...\n");
	RTMP_CLEAR_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
	if ((!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
		(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
		(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS)) &&
		(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF)))
	{
		// Call dequeue without selected queue, let the subroutine select the right priority
		// Tx software queue
		RTUSBDeQueuePacket(pAdapter);
	}

	// Kick bulk out
	RTUSBKickBulkOut(pAdapter);

}
/*
	========================================================================

	Routine	Description:
		
	Arguments:
		
	Return Value:
		
	Note:
	
	========================================================================
*/
USHORT	RTUSBCalcDuration(
	IN	PRT2570ADAPTER	pAdapter,
	IN	UCHAR			Rate,
	IN	ULONG			Size)
{
	ULONG	Duration = 0;

	if (Rate < RATE_FIRST_OFDM_RATE) // CCK
	{
	    if ((Rate > RATE_1) && (pAdapter->PortCfg.TxPreambleInUsed == Rt802_11PreambleShort))
		Duration = 96;  // 72+24 preamble+plcp
		else
	    Duration = 192; // 144+48 preamble+plcp
		
		Duration += (USHORT)((Size << 4) / RateIdTo500Kbps[Rate]);
		if ((Size << 4) % RateIdTo500Kbps[Rate])
			Duration ++;
	}
	else // OFDM rates
	{
		Duration = 20 + 6;      // 16+4 preamble+plcp + Signal Extension
		Duration += 4 * (USHORT)((11 + Size * 4) / RateIdTo500Kbps[Rate]);
		if ((11 + Size * 4) % RateIdTo500Kbps[Rate])
			Duration += 4;
	}
	
	return (USHORT)Duration;	
}

/*
	========================================================================
	
	Routine	Description:
		Calculates the duration which is required to transmit out frames 
	with given size and specified rate.
		
	Arguments:
		pTxD		Pointer to transmit descriptor
		Ack			Setting for Ack requirement bit
		Fragment	Setting for Fragment bit
		RetryMode	Setting for retry mode
		Ifs			Setting for IFS gap
		Rate		Setting for transmit rate
		Service		Setting for service
		Length		Frame length
		
	Return Value:
		None
		
	========================================================================
*/
VOID	RTUSBWriteTxDescriptor(
	IN	PTXD_STRUC	pTxD,
	IN	BOOLEAN		Fragment,
	IN	UCHAR		RetryLimit,
	IN	BOOLEAN		Ack,
	IN  BOOLEAN     InsTimestamp,
	IN  BOOLEAN     new_seq,
	IN	UCHAR		Ifs,
	IN	UINT		Length,
	IN	BOOLEAN		Cipher,
	IN	UCHAR		KeyID,
	IN	UCHAR		CWMin,
	IN	UCHAR		CWMax,
	IN	UINT		PLCPLength,
	IN	UINT		Rate,
	IN	UCHAR		Service,
	IN  USHORT      TxPreamble)
{
	UINT	Residual;

	pTxD->RetryLimit  = RetryLimit;
	pTxD->MoreFrag    = Fragment;
	pTxD->ACK         = Ack;
	pTxD->Timestamp   = InsTimestamp;
	pTxD->newseq      = new_seq;
	pTxD->IFS         = Ifs;
	pTxD->DataByteCnt = Length;
	pTxD->Cipher	  = Cipher;
	pTxD->KeyID		  = KeyID;
	pTxD->CWmin       = CWMin;   // 2^5-1 = 31
	pTxD->CWmax       = CWMax;  // 2^10 -1 = 1023
	pTxD->Aifs        = 2;   // TC0: SIFS + 2*Slot + Random(CWmin,CWmax)*Slot
		
	if (Rate < RATE_FIRST_OFDM_RATE)
		pTxD->Ofdm = 0;
	else
		pTxD->Ofdm = 1;

	// fill up PLCP SIGNAL field
	pTxD->PlcpSignal = PlcpSignal[Rate];
	if (((Rate == RATE_2) || (Rate == RATE_5_5) || (Rate == RATE_11)) && (TxPreamble == Rt802_11PreambleShort)) // no short preamble for RATE_1
	{
		pTxD->PlcpSignal |= 0x0008;
	}

	// fill up PLCP SERVICE field, not used for OFDM rates
	pTxD->PlcpService = Service;

	// file up PLCP LENGTH_LOW and LENGTH_HIGH fields
	if (Rate < RATE_FIRST_OFDM_RATE)    // 11b - RATE_1, RATE_2, RATE_5_5, RATE_11
	{
		if ((Rate == RATE_1) || ( Rate == RATE_2))
		{
			PLCPLength = PLCPLength * 8 / (Rate + 1);
		}
		else
		{
			Residual = ((PLCPLength * 16) % (11 * (1 + Rate - RATE_5_5)));
			PLCPLength = PLCPLength * 16 / (11 * (1 + Rate - RATE_5_5));
			if (Residual != 0)
			{
				PLCPLength++;
			}
			if (Rate == RATE_11)
			{
			if ((Residual <= (3 * (1 + Rate - RATE_5_5))) && (Residual != 0))
			{
				pTxD->PlcpService |= 0x80; // 11b's PLCP Length extension bit
			}
			}
		}

		pTxD->PlcpLengthHigh = PLCPLength / 256;
		pTxD->PlcpLengthLow = PLCPLength % 256;
	}
	else    // OFDM - RATE_6, RATE_9, RATE_12, RATE_18, RATE_24, RATE_36, RATE_48, RATE_54
	{
		pTxD->PlcpLengthHigh = PLCPLength / 64;  // high 6-bit of total byte count
		pTxD->PlcpLengthLow = PLCPLength % 64;   // low 6-bit of total byte count
	}
}

/*
	========================================================================
	
	Routine	Description:
		Calculates the duration which is required to transmit out frames 
	with given size and specified rate.
		
	Arguments:
		pTxD		Pointer to transmit descriptor
		Ack			Setting for Ack requirement bit
		Fragment	Setting for Fragment bit
		RetryMode	Setting for retry mode
		Ifs			Setting for IFS gap
		Rate		Setting for transmit rate
		Service		Setting for service
		Length		Frame length
		
	Return Value:
		None
		
	========================================================================
*/
VOID	RTUSBWriteBeaconDescriptor(
	IN	PTXD_STRUC	pTxD,
	IN	UINT		Length,
	IN	UINT		PLCPLength,
	IN	UINT		Rate,
	IN	UCHAR		Service,
	IN  USHORT      TxPreamble)
{
	UINT	Residual;

	pTxD->RetryLimit	= 0;
	pTxD->MoreFrag    = 0;
	pTxD->ACK         = 0;
	pTxD->Timestamp   = 1;
	pTxD->newseq      = 1;
	pTxD->IFS         = IFS_NEW_BACKOFF;
	pTxD->DataByteCnt = Length;
	pTxD->Cipher	  = 0;
	pTxD->KeyID		  = 0;
	pTxD->CWmin       = BEACON_CW_IN_BITS;   // 2^5-1 = 31
	pTxD->CWmax       = BEACON_CW_IN_BITS;  // 2^10 -1 = 1023
	pTxD->Aifs        = 2;   // TC0: SIFS + 2*Slot + Random(CWmin,CWmax)*Slot
		
	if (Rate < RATE_FIRST_OFDM_RATE)
		pTxD->Ofdm = 0;
	else
		pTxD->Ofdm = 1;

	// fill up PLCP SIGNAL field
	pTxD->PlcpSignal = PlcpSignal[Rate];
	if (((Rate == RATE_2) || (Rate == RATE_5_5) || (Rate == RATE_11)) && (TxPreamble == Rt802_11PreambleShort)) // no short preamble for RATE_1
	{
		pTxD->PlcpSignal |= 0x0008;
	}

	// fill up PLCP SERVICE field, not used for OFDM rates
	pTxD->PlcpService = Service;

	// file up PLCP LENGTH_LOW and LENGTH_HIGH fields
	if (Rate < RATE_FIRST_OFDM_RATE)    // 11b - RATE_1, RATE_2, RATE_5_5, RATE_11
	{
		if ((Rate == RATE_1) || ( Rate == RATE_2))
		{
			PLCPLength = PLCPLength * 8 / (Rate + 1);
		}
		else
		{
			Residual = ((PLCPLength * 16) % (11 * (1 + Rate - RATE_5_5)));
			PLCPLength = PLCPLength * 16 / (11 * (1 + Rate - RATE_5_5));
			if (Residual != 0)
			{
				PLCPLength++;
			}
			if ((Residual <= (3 * (1 + Rate - RATE_5_5))) && (Residual != 0))
			{
				pTxD->PlcpService |= 0x80; // 11b's PLCP Length extension bit
			}
		}

		pTxD->PlcpLengthHigh = PLCPLength / 256;
		pTxD->PlcpLengthLow = PLCPLength % 256;
	}
	else    // OFDM - RATE_6, RATE_9, RATE_12, RATE_18, RATE_24, RATE_36, RATE_48, RATE_54
	{
		pTxD->PlcpLengthHigh = PLCPLength / 64;  // high 6-bit of total byte count
		pTxD->PlcpLengthLow = PLCPLength % 64;   // low 6-bit of total byte count
	}
}

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

	Routine	Description:
		Copy frame from waiting queue into relative ring buffer and set 
	appropriate ASIC register to kick hardware encryption before really
	sent out to air.
		
	Arguments:
		pAdapter		Pointer	to our adapter
		PNDIS_PACKET	Pointer to outgoing Ndis frame
		NumberOfFrag	Number of fragment required
		
	Return Value:
		None

	IRQL = DISPATCH_LEVEL
	
	Note:
	
	========================================================================
*/
NDIS_STATUS	RTUSBHardEncrypt(
	IN	PRT2570ADAPTER	pAdapter,
	IN  struct sk_buff  *skb,
	IN	UCHAR			NumberRequired,
	IN	ULONG			EnableTxBurst)
{
	PVOID			pVirtualAddress;
	UINT			NdisBufferLength;
	UINT			BytesCopied;
	UINT			TxSize, PLCPLength;
	UINT			FreeFragSize;
	UINT			RemainSize;
	USHORT			Protocol;
	UCHAR			FrameGap;
	HEADER_802_11	Header_802_11;
	PUCHAR			pDest;
	PUCHAR			pSrc;
	PUCHAR			pEncap = NULL;
	PTX_CONTEXT		pTxContext;
	PTXD_STRUC		pTxD;
	BOOLEAN			StartOfFrame;
	BOOLEAN			EAPOLFrame;
	BOOLEAN			Encapped;
	ULONG			Iv16;
	ULONG			Iv32;
	BOOLEAN			MICFrag;
	PWPA_KEY		pWpaKey = (PWPA_KEY) NULL;
	BOOLEAN			Cipher;
	UCHAR			KeyID = 0;
	ULONG			TransferBufferLength;
	BOOLEAN			MoreFragment;
    UCHAR           AckRate = RATE_2;
    USHORT          AckDuration = 0;
    USHORT          EncryptionOverhead = 0;
	BOOLEAN			Bcast_8023;
	BOOLEAN			SingleFrag;
//for re-calculating the number of Fragment required.
	UINT			AllowFragSize;
	UCHAR			NumberOfFrag;
	UINT			TotalPacketLength; 
	// To indicate cipher used for this packet
	NDIS_802_11_ENCRYPTION_STATUS	CipherSuite;
	
	CipherSuite = pAdapter->PortCfg.WepStatus;
	if (EnableTxBurst == 1)
		FrameGap = IFS_SIFS;
	else
		FrameGap = IFS_BACKOFF;		// Default frame gap mode
	// Sequence Number is identical for all fragments belonged to the same frame
	// Sequence is 0 - 4095
	pAdapter->Sequence = ((pAdapter->Sequence) + 1) & (MAX_SEQ_NUMBER);
	AckRate = pAdapter->PortCfg.ExpectedACKRate[pAdapter->PortCfg.TxRate];
	AckDuration = RTUSBCalcDuration(pAdapter, AckRate, 14);

	pVirtualAddress = skb->data;
	NdisBufferLength = skb->len;
	if(pVirtualAddress == NULL)
	{
		DBGPRINT(RT_DEBUG_ERROR, "Error, Null skb data buffer!!!\n");
		return (NDIS_STATUS_FAILURE);
	}
	if (NdisBufferLength < 14)
	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看中文字幕不卡| 国产成人精品免费| 欧美影视一区在线| 亚洲国产成人91porn| 欧美区视频在线观看| 奇米色一区二区| 久久亚洲二区三区| av在线播放不卡| 亚洲精品日产精品乱码不卡| 欧美色视频一区| 久久99精品国产.久久久久久 | 91美女在线视频| 亚洲h在线观看| 久久一区二区三区国产精品| 成人免费观看视频| 天天av天天翘天天综合网| 欧美一区二区三区免费| 国产精品一区三区| 一区二区在线观看免费| 26uuu国产电影一区二区| 成人高清视频在线| 奇米777欧美一区二区| 久久久精品免费观看| 91在线视频18| 精品在线视频一区| 亚洲视频一二三| 日韩精品一区二区三区视频播放| 丁香婷婷深情五月亚洲| 亚洲成人免费av| 欧美韩国一区二区| 在线91免费看| a级高清视频欧美日韩| 午夜精品免费在线| 中文字幕精品在线不卡| 欧美高清视频不卡网| 成人午夜在线视频| 免费看欧美女人艹b| 中文字幕一区二区三区蜜月| 91精品国产一区二区三区蜜臀| 不卡视频一二三| 精品一区二区三区在线观看国产| 亚洲精选视频免费看| 国产欧美一二三区| 欧美一区二区女人| 欧洲av一区二区嗯嗯嗯啊| 国产成人免费在线观看不卡| 日韩不卡一区二区| 亚洲自拍偷拍图区| 一区在线观看免费| 久久在线观看免费| 欧美电影一区二区| 在线看不卡av| www.亚洲国产| 国产成人一区二区精品非洲| 日本欧美一区二区| 亚洲成人综合网站| 亚洲欧美一区二区三区国产精品| 欧美成人性战久久| 欧美一区二区三区免费视频 | 欧美三级三级三级爽爽爽| 粉嫩av一区二区三区在线播放 | 看片的网站亚洲| 天堂一区二区在线免费观看| 一区二区三区高清不卡| 综合分类小说区另类春色亚洲小说欧美 | 国产综合久久久久影院| 美腿丝袜一区二区三区| 日本视频在线一区| 亚洲不卡av一区二区三区| 一区二区在线看| 亚洲最新在线观看| 一区二区三区影院| 亚洲精品高清视频在线观看| 亚洲码国产岛国毛片在线| 综合色天天鬼久久鬼色| 国产精品麻豆一区二区| 国产精品美女www爽爽爽| 国产农村妇女毛片精品久久麻豆| 26uuu久久综合| 国产日韩欧美精品一区| 中文字幕欧美日本乱码一线二线| 中文一区二区完整视频在线观看| 欧美国产日韩a欧美在线观看| 久久久久久久久久久久久久久99| 国产欧美中文在线| 综合久久给合久久狠狠狠97色| 中文字幕字幕中文在线中不卡视频| 国产精品伦理在线| 亚洲欧美乱综合| 亚洲国产精品麻豆| 日韩在线a电影| 精品系列免费在线观看| 国产白丝精品91爽爽久久| 成人高清在线视频| 欧美在线免费观看亚洲| 欧美精品乱人伦久久久久久| 日韩欧美的一区| 国产精品天干天干在线综合| 亚洲理论在线观看| 日韩1区2区日韩1区2区| 黑人巨大精品欧美一区| 国产成人午夜精品影院观看视频 | 免费成人在线观看| 成人一区二区三区视频在线观看| 99视频有精品| 欧美顶级少妇做爰| 久久久夜色精品亚洲| 亚洲欧美日韩中文播放| 日本欧美久久久久免费播放网| 高清久久久久久| 欧美视频一区在线观看| 国产亚洲精品bt天堂精选| 樱花影视一区二区| 精东粉嫩av免费一区二区三区 | 91麻豆福利精品推荐| 91精品国产免费久久综合| 国产日韩一级二级三级| 亚洲影院久久精品| 国产自产2019最新不卡| 色网综合在线观看| 久久免费看少妇高潮| 亚洲国产精品一区二区www在线| 国产一区视频导航| 欧美午夜精品一区二区蜜桃| 久久精品人人做| 午夜久久久久久久久久一区二区| 国产成人免费视频网站 | 狠狠色综合日日| 色香色香欲天天天影视综合网| 日韩免费电影一区| 亚洲一区二区三区激情| 成人深夜福利app| 91精品国产欧美一区二区| 亚洲三级免费观看| 国产一区二区日韩精品| 欧美日韩精品高清| 中文字幕佐山爱一区二区免费| 国产在线视视频有精品| 欧美精品第1页| 亚洲国产成人91porn| 色哟哟一区二区在线观看| 久久久久99精品一区| 美国毛片一区二区三区| 欧美日韩成人高清| 夜夜精品视频一区二区| 成人黄色网址在线观看| 久久久久久黄色| 久草精品在线观看| 欧美一区二区三区视频免费 | 日本v片在线高清不卡在线观看| 91浏览器打开| 国产精品国产a级| 国模套图日韩精品一区二区| 7777精品伊人久久久大香线蕉最新版| 一区二区三区在线高清| 91一区二区三区在线播放| 国产精品久久久久久户外露出 | 亚洲欧美在线视频观看| 国产精品一区二区91| 久久久久久夜精品精品免费| 久久99精品一区二区三区三区| 91精品国产一区二区三区香蕉| 亚洲va欧美va国产va天堂影院| 欧美三级三级三级| 亚洲大片精品永久免费| 欧美日韩不卡一区二区| 天天综合网 天天综合色| 欧美精品久久一区| 日韩不卡一二三区| 日韩欧美电影在线| 激情小说欧美图片| 国产日韩亚洲欧美综合| 成人美女视频在线观看| 国产精品成人一区二区三区夜夜夜| 成人精品国产一区二区4080| 亚洲同性gay激情无套| 在线免费观看日本欧美| 婷婷国产v国产偷v亚洲高清| 日韩一区二区免费电影| 久久99精品国产麻豆婷婷 | 在线观看视频欧美| 亚洲国产精品久久人人爱蜜臀 | 懂色中文一区二区在线播放| 国产精品久久一卡二卡| 91麻豆自制传媒国产之光| 性做久久久久久免费观看欧美| 7777精品伊人久久久大香线蕉最新版 | 欧美一区二区三区播放老司机| 美女www一区二区| 中文字幕欧美激情一区| 欧洲一区二区三区在线| 久久激情五月激情| 国产精品久久久久9999吃药| 91成人看片片| 狠狠色丁香婷婷综合久久片| 国产精品美女久久福利网站| 欧美日韩成人一区二区| 国产精品99久久久久久久vr| 亚洲欧美偷拍卡通变态| 7777精品伊人久久久大香线蕉的|