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

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

?? rtusb_data.c

?? r73模塊的無線網卡在Linux下的驅動程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*************************************************************************** * RT2x00 SourceForge Project - http://rt2x00.serialmonkey.com             * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * *   This program is distributed in the hope that it will be useful,       * *   but WITHOUT ANY WARRANTY; without even the implied warranty of        * *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         * *   GNU General Public License for more details.                          * *                                                                         * *   You should have received a copy of the GNU General Public License     * *   along with this program; if not, write to the                         * *   Free Software Foundation, Inc.,                                       * *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             * *                                                                         * *   Licensed under the GNU GPL                                            * *   Original code supplied under license from RaLink Inc, 2004.           * ***************************************************************************//*************************************************************************** *	Module Name:	rtusb_data.c * *	Abstract: Ralink USB driver Tx/Rx functions * *	Revision History: *	Who		When		What *	--------	----------	----------------------------- *	idamlaj		05-10-2006	Import rfmon implementation *	idamlaj		14-10-2006	RFMONTx (based on MarkW's code) * ***************************************************************************/#include "rt_config.h"#include <net/iw_handler.h>extern	UCHAR Phy11BGNextRateUpward[]; // defined in mlme.cUCHAR	SNAP_802_1H[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00};UCHAR	SNAP_BRIDGE_TUNNEL[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8};UCHAR	EAPOL_LLC_SNAP[]= {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00, 0x88, 0x8e};UCHAR	EAPOL[] = {0x88, 0x8e};UCHAR	IPX[] = {0x81, 0x37};UCHAR	APPLE_TALK[] = {0x80, 0xf3};UINT	_11G_RATES[12] = { 0, 0, 0, 0, 6, 9, 12, 18, 24, 36, 48, 54 };UCHAR	RateIdToPlcpSignal[12] = {	 0, /* RATE_1 */	1, /* RATE_2 */ 	2, /* RATE_5_5 */	3, /* RATE_11 */	// see BBP spec	11, /* RATE_6 */   15, /* RATE_9 */    10, /* RATE_12 */   14, /* RATE_18 */	// see IEEE802.11a-1999 p.14	 9, /* RATE_24 */  13, /* RATE_36 */	8, /* RATE_48 */   12  /* RATE_54 */ }; // see IEEE802.11a-1999 p.14UCHAR	 OfdmSignalToRateId[16] = {	RATE_54,  RATE_54,	RATE_54,  RATE_54,	// OFDM PLCP Signal = 0,  1,  2,  3 respectively	RATE_54,  RATE_54,	RATE_54,  RATE_54,	// OFDM PLCP Signal = 4,  5,  6,  7 respectively	RATE_48,  RATE_24,	RATE_12,  RATE_6,	// OFDM PLCP Signal = 8,  9,  10, 11 respectively	RATE_54,  RATE_36,	RATE_18,  RATE_9,	// OFDM PLCP Signal = 12, 13, 14, 15 respectively};UCHAR default_cwmin[]={CW_MIN_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1, CW_MIN_IN_BITS-2};UCHAR default_cwmax[]={CW_MAX_IN_BITS, CW_MAX_IN_BITS, CW_MIN_IN_BITS, CW_MIN_IN_BITS-1};UCHAR default_sta_aifsn[]={3,7,2,2};UCHAR MapUserPriorityToAccessCategory[8] = {QID_AC_BE, QID_AC_BK, QID_AC_BK, QID_AC_BE, QID_AC_VI, QID_AC_VI, QID_AC_VO, QID_AC_VO};// Macro for rx indicationVOID REPORT_ETHERNET_FRAME_TO_LLC(	IN	PRTMP_ADAPTER	pAd,	IN	PUCHAR			p8023hdr,	IN	PUCHAR			pData,	IN	ULONG			DataSize,	IN	struct net_device	*net_dev){	struct sk_buff	*pSkb;	if ((pSkb = __dev_alloc_skb(DataSize + LENGTH_802_3 + 2, MEM_ALLOC_FLAG)) != NULL)	{		pSkb->dev = net_dev;		skb_reserve(pSkb, 2);	// 16 byte align the IP header		memcpy(skb_put(pSkb, LENGTH_802_3), p8023hdr, LENGTH_802_3);		memcpy(skb_put(pSkb, DataSize), pData, DataSize);		pSkb->protocol = eth_type_trans(pSkb, net_dev);		netif_rx(pSkb);		pAd->net_dev->last_rx = jiffies;		pAd->stats.rx_packets++;		pAd->Counters8023.GoodReceives++;	}	//DBGPRINT(RT_DEBUG_TRACE, "<-- %s: pSkb %s\n", __FUNCTION__,			//pSkb? "found": "n/a");}// Enqueue this frame to MLME engine// We need to enqueue the whole frame because MLME need to pass data type// information from 802.11 header#define REPORT_MGMT_FRAME_TO_MLME(_pAd, _pFrame, _FrameSize, _Rssi, _PlcpSignal)		\{																						\	MlmeEnqueueForRecv(_pAd, (UCHAR)_Rssi, _FrameSize, _pFrame, (UCHAR)_PlcpSignal);   \}// NOTE: we do have an assumption here, that Byte0 and Byte1 always reasid at the same//		 scatter gather bufferNDIS_STATUS Sniff2BytesFromNdisBuffer(	IN	struct sk_buff	*pFirstSkb,	IN	UCHAR			DesiredOffset,	OUT PUCHAR			pByte0,	OUT PUCHAR			pByte1){	PUCHAR pBufferVA;	ULONG  BufferLen, AccumulateBufferLen, BufferBeginOffset;	pBufferVA = (PVOID)pFirstSkb->data;	BufferLen = pFirstSkb->len;	BufferBeginOffset	= 0;	AccumulateBufferLen = BufferLen;	*pByte0 = *(PUCHAR)(pBufferVA + DesiredOffset - BufferBeginOffset);	*pByte1 = *(PUCHAR)(pBufferVA + DesiredOffset - BufferBeginOffset + 1);	return NDIS_STATUS_SUCCESS;}/*	========================================================================	Routine	Description:		This routine classifies outgoing frames into several AC (Access		Category) and enqueue them into corresponding s/w waiting queues.	Arguments:		pAd	Pointer	to our adapter		pPacket		Pointer to send packet	Return Value:		None	Note:	========================================================================*/NDIS_STATUS	RTMPSendPacket(	IN	PRTMP_ADAPTER	pAd,	IN	struct sk_buff	*pSkb){	PUCHAR			pSrcBufVA;	UINT			AllowFragSize;	UCHAR			NumberOfFrag;	UCHAR			RTSRequired;	UCHAR			QueIdx, UserPriority;	NDIS_STATUS 	Status = NDIS_STATUS_SUCCESS;	struct sk_buff_head	*pTxQueue;	UCHAR			PsMode;	DBGPRINT(RT_DEBUG_INFO, "====> RTMPSendPacket\n");	// Prepare packet information structure for buffer descriptor	pSrcBufVA = (PVOID)pSkb->data;	// STEP 1. Check for virtual address allocation, it might fail !!!	if (pSrcBufVA == NULL)	{		// Resourece is low, system did not allocate virtual address		// return NDIS_STATUS_FAILURE directly to upper layer		return NDIS_STATUS_FAILURE;	}	if (pSkb && pAd->PortCfg.BssType == BSS_MONITOR &&		   pAd->bAcceptRFMONTx == TRUE)	{		skb_queue_tail(&pAd->SendTxWaitQueue[QID_AC_BE], pSkb);		return (NDIS_STATUS_SUCCESS);	}	//	// Check for multicast or broadcast (First byte of DA)	//	if ((*((PUCHAR) pSrcBufVA) & 0x01) != 0)	{		// For multicast & broadcast, there is no fragment allowed		NumberOfFrag = 1;	}#if 0 //AGGREGATION_SUPPORT	else if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED))	{		NumberOfFrag = 1;	// Aggregation overwhelms fragmentation	}#endif	else	{		// Check for payload allowed for each fragment		AllowFragSize = (pAd->PortCfg.FragmentThreshold) - LENGTH_802_11 - LENGTH_CRC;		// Calculate fragments required		NumberOfFrag = ((pSkb->len - LENGTH_802_3 + LENGTH_802_1_H) / AllowFragSize) + 1;		// Minus 1 if the size just match to allowable fragment size		if (((pSkb->len - LENGTH_802_3 + LENGTH_802_1_H) % AllowFragSize) == 0)		{			NumberOfFrag--;		}	}	// Save fragment number to Ndis packet reserved field	RTMP_SET_PACKET_FRAGMENTS(pSkb, NumberOfFrag);	// STEP 2. Check the requirement of RTS:	//	   If multiple fragment required, RTS is required only for the first fragment	//	   if the fragment size large than RTS threshold	if (NumberOfFrag > 1)		RTSRequired = (pAd->PortCfg.FragmentThreshold > pAd->PortCfg.RtsThreshold) ? 1 : 0;	else		RTSRequired = (pSkb->len > pAd->PortCfg.RtsThreshold) ? 1 : 0;    //	// Remove the following lines to avoid confusion.	// CTS requirement will not use Flag "RTSRequired", instead moveing the	// following lines to RTUSBHardTransmit(..)	//	// RTS/CTS may also be required in order to protect OFDM frame	//if ((pAd->PortCfg.TxRate >= RATE_FIRST_OFDM_RATE) &&	//	OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED))	//	RTSRequired = 1;	// Save RTS requirement to Ndis packet reserved field	RTMP_SET_PACKET_RTS(pSkb, RTSRequired);	RTMP_SET_PACKET_TXRATE(pSkb, pAd->PortCfg.TxRate);	//	// STEP 3. Traffic classification. outcome = <UserPriority, QueIdx>	//	UserPriority = 0;	QueIdx		 = QID_AC_BE;	if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))	{		USHORT Protocol;		UCHAR  LlcSnapLen = 0, Byte0, Byte1;		do		{			// get Ethernet protocol field			Protocol = (USHORT)((pSrcBufVA[12] << 8) + pSrcBufVA[13]);			if (Protocol <= 1500)			{				// get Ethernet protocol field from LLC/SNAP				if (Sniff2BytesFromNdisBuffer(pSkb, LENGTH_802_3 + 6, &Byte0, &Byte1) != NDIS_STATUS_SUCCESS)					break;				Protocol = (USHORT)((Byte0 << 8) + Byte1);				LlcSnapLen = 8;			}			// always AC_BE for non-IP packet			if (Protocol != 0x0800)				break;			// get IP header			if (Sniff2BytesFromNdisBuffer(pSkb, LENGTH_802_3 + LlcSnapLen, &Byte0, &Byte1) != NDIS_STATUS_SUCCESS)				break;			// return AC_BE if packet is not IPv4			if ((Byte0 & 0xf0) != 0x40)				break;			UserPriority = (Byte1 & 0xe0) >> 5;			QueIdx = MapUserPriorityToAccessCategory[UserPriority];			// TODO: have to check ACM bit. apply TSPEC if ACM is ON			// TODO: downgrade UP & QueIdx before passing ACM			if (pAd->PortCfg.APEdcaParm.bACM[QueIdx])			{				UserPriority = 0;				QueIdx		 = QID_AC_BE;			}		} while (FALSE);	}	RTMP_SET_PACKET_UP(pSkb, UserPriority);	pTxQueue = &pAd->SendTxWaitQueue[QueIdx];	//	// For infrastructure mode, enqueue this frame immediately to sendwaitqueue	// For Ad-hoc mode, check the DA power state, then decide which queue to enqueue	//	if (INFRA_ON(pAd))	{		// In infrastructure mode, simply enqueue the packet into Tx waiting queue.		DBGPRINT(RT_DEBUG_INFO, "Infrastructure -> Enqueue one frame\n");		// Enqueue Ndis packet to end of Tx wait queue		skb_queue_tail(pTxQueue, pSkb);		Status = NDIS_STATUS_SUCCESS;#ifdef DBG        pAd->RalinkCounters.OneSecOsTxCount[QueIdx]++;  // TODO: for debug only. to be removed#endif	}	else	{		// In IBSS mode, power state of destination should be considered.		PsMode = PWR_ACTIVE;		// Faked		if (PsMode == PWR_ACTIVE)		{			DBGPRINT(RT_DEBUG_INFO,"Ad-Hoc -> Enqueue one frame\n");			// Enqueue Ndis packet to end of Tx wait queue			skb_queue_tail(pTxQueue, pSkb);			Status = NDIS_STATUS_SUCCESS;#ifdef DBG            pAd->RalinkCounters.OneSecOsTxCount[QueIdx]++;   // TODO: for debug only. to be removed#endif		}	}	return (Status);}/*	========================================================================	Routine Description:		SendPackets handler	Arguments:		skb 			point to sk_buf which upper layer transmit		net_dev 		point to net_dev	Return Value:		None	Note:	========================================================================*/INT RTMPSendPackets(	IN	struct sk_buff		*pSkb,	IN	struct net_device	*net_dev){	PRTMP_ADAPTER	pAd = net_dev->priv;	NDIS_STATUS 	Status = NDIS_STATUS_SUCCESS;	//INT 			Index;	DBGPRINT(RT_DEBUG_INFO, "===> RTMPSendPackets\n");	if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) ||		RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))	{		// Drop send request since hardware is in reset state		RTUSBFreeSkbBuffer(pSkb);		return 0;	}	// Drop packets if no associations	else if (!INFRA_ON(pAd) && !ADHOC_ON(pAd) && !(pAd->PortCfg.BssType == BSS_MONITOR && pAd->bAcceptRFMONTx == TRUE))	{		RTUSBFreeSkbBuffer(pSkb);		return 0;	}	else	{		// initial pSkb->data_len=0, we will use this variable to store data size when fragment(in TKIP)		// and pSkb->len is actual data len		pSkb->data_len = pSkb->len;		// Record that orignal packet source is from protocol layer,so that		// later on driver knows how to release this skb buffer		RTMP_SET_PACKET_SOURCE(pSkb, PKTSRC_NDIS);		pAd->RalinkCounters.PendingNdisPacketCount ++;		Status = RTMPSendPacket(pAd, pSkb);		if (Status != NDIS_STATUS_SUCCESS)		{			// Errors before enqueue stage			RELEASE_NDIS_PACKET(pAd, pSkb);			DBGPRINT(RT_DEBUG_TRACE,"<---RTUSBSendPackets not dequeue\n");			return 0;		}	}	RTUSBMlmeUp(pAd);	return 0;}/*	========================================================================	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:		pAd				Pointer	to our adapter		PNDIS_PACKET	Pointer to outgoing Ndis frame		NumberOfFrag	Number of fragment required	Return Value:		None	Note:	========================================================================*/#ifdef BIG_ENDIANstatic inline#endifNDIS_STATUS RTUSBHardTransmit(	IN	PRTMP_ADAPTER	pAd,	IN	struct sk_buff	*pSkb,	IN	UCHAR			NumberRequired,	IN	UCHAR			QueIdx){	UINT			LengthQosPAD =0;	UINT			BytesCopied;	UINT			TxSize;	UINT			FreeMpduSize;	UINT			SrcRemainingBytes;	USHORT			Protocol;	UCHAR			FrameGap;	HEADER_802_11	Header_802_11;	PHEADER_802_11	pHeader80211;	PUCHAR			pDest;//	PUCHAR			pSrc;	PTX_CONTEXT		pTxContext;	PTXD_STRUC		pTxD;#ifdef BIG_ENDIAN	PTXD_STRUC		pDestTxD;	TXD_STRUC		TxD;#endif//	PURB			pUrb;	BOOLEAN			StartOfFrame;	BOOLEAN			bEAPOLFrame;	ULONG			Iv16;	ULONG			Iv32;	BOOLEAN			MICFrag;//	PCIPHER_KEY		pWpaKey = NULL;	BOOLEAN			Cipher;	ULONG			TransferBufferLength;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区电影在线| 91在线播放网址| 欧美日韩高清在线| 亚洲第一主播视频| 欧美日韩一区国产| 日本强好片久久久久久aaa| 91.xcao| 蜜桃av噜噜一区| 久久精品在这里| 成人精品鲁一区一区二区| 日韩美女啊v在线免费观看| 欧美日韩亚洲综合一区| 青娱乐精品在线视频| 久久夜色精品国产噜噜av| 国产福利91精品| 亚洲欧美另类图片小说| 欧美精品 日韩| 国产乱色国产精品免费视频| 亚洲男女一区二区三区| 911精品国产一区二区在线| 国产一区二区电影| 亚洲视频网在线直播| 91精品国产aⅴ一区二区| 国产成人精品www牛牛影视| 亚洲国产日韩一级| 久久综合国产精品| 欧美一a一片一级一片| 久久99精品国产麻豆婷婷| 国产精品视频看| 69久久99精品久久久久婷婷| 国产精品538一区二区在线| 亚洲综合激情另类小说区| 欧美xxxxxxxxx| 欧洲在线/亚洲| 激情小说欧美图片| 亚洲小说春色综合另类电影| 久久久久九九视频| 欧美极品aⅴ影院| 欧美日韩国产精品成人| www.激情成人| 麻豆精品国产91久久久久久| 亚洲欧美激情小说另类| 久久午夜老司机| 欧美一区二区免费| 欧美在线短视频| 99热99精品| 国产·精品毛片| 精品一区二区免费| 日产国产欧美视频一区精品 | 天天操天天色综合| 欧美国产精品劲爆| 日韩欧美一级二级三级久久久 | 欧美绝品在线观看成人午夜影视| 国产高清亚洲一区| 精久久久久久久久久久| 天堂一区二区在线| 日韩三级在线观看| 欧美二区三区91| 欧美网站大全在线观看| 99这里只有久久精品视频| 国产成人在线免费观看| 国内精品伊人久久久久av影院| 亚州成人在线电影| 亚洲韩国一区二区三区| 亚洲精品水蜜桃| 中文字幕中文在线不卡住| 久久精品人人做人人爽人人| 精品美女在线播放| 欧美成人video| 亚洲精品一线二线三线| 精品嫩草影院久久| 欧美精品一区二区精品网| 日韩欧美一区在线| 日韩视频免费观看高清完整版在线观看 | 丁香婷婷综合网| 国产91富婆露脸刺激对白| 国产精品亚洲成人| 国产成人亚洲精品狼色在线| 国产成人免费视| 福利电影一区二区| www.66久久| 91国偷自产一区二区使用方法| 色哟哟一区二区在线观看| 91福利资源站| 欧美老肥妇做.爰bbww视频| 欧美疯狂性受xxxxx喷水图片| 在线观看91av| 精品国产乱码久久久久久浪潮 | 日本道在线观看一区二区| 色婷婷一区二区| 欧美日韩在线播放一区| 3d动漫精品啪啪1区2区免费| 日韩午夜小视频| 国产亚洲综合色| 亚洲桃色在线一区| 一本大道综合伊人精品热热| 欧亚一区二区三区| 日韩你懂的电影在线观看| 久久精品一区二区三区四区| 国产精品久久精品日日| 亚洲国产一区二区在线播放| 日本欧美久久久久免费播放网| 狠狠色综合播放一区二区| 97se亚洲国产综合自在线观| 欧美日韩免费视频| 久久综合九色综合欧美就去吻| 中文字幕五月欧美| 亚洲一区二区三区不卡国产欧美| 美女网站在线免费欧美精品| 国产sm精品调教视频网站| 欧美中文字幕一区| 久久亚洲二区三区| 亚洲国产一区二区视频| 国产乱子伦视频一区二区三区| 色婷婷综合久色| 精品乱人伦小说| 一区二区在线观看免费视频播放| 蜜臀久久久99精品久久久久久| 成人免费看的视频| 91精品欧美一区二区三区综合在| 日本一区二区成人| 蜜臀久久久久久久| 97精品视频在线观看自产线路二| 日韩精品一区二区三区视频播放 | caoporm超碰国产精品| 欧美年轻男男videosbes| 国产欧美日韩三级| 日韩国产欧美在线播放| 成人一区二区在线观看| 欧美一区二区三区在线电影 | 亚洲国产另类精品专区| 国产美女在线精品| 9191久久久久久久久久久| 国产精品国产三级国产aⅴ入口 | 精品人伦一区二区色婷婷| 亚洲视频一区在线| 国产馆精品极品| 欧美一区二区大片| 亚洲色图另类专区| 成人一区二区三区中文字幕| 日韩欧美高清一区| 日韩国产精品久久| 在线免费亚洲电影| 日韩理论片在线| 高清成人在线观看| 久久一留热品黄| 久久精品国产亚洲5555| 欧美日韩高清在线| 亚洲一区二区在线观看视频| 成人短视频下载| 国产欧美日韩综合精品一区二区 | 国产精品无遮挡| 国产一区二区三区四区五区入口| 欧美人妇做爰xxxⅹ性高电影| 一区二区三区四区中文字幕| 99久久99久久精品免费观看| 日本一区二区动态图| 国产一区二区三区免费看| 精品捆绑美女sm三区| 久久精品国产免费| 欧美电影免费观看高清完整版| 日本在线观看不卡视频| 亚洲伊人伊色伊影伊综合网| 丁香婷婷综合色啪| 亚洲欧洲日韩女同| 99精品黄色片免费大全| 亚洲视频一区二区在线| 色哦色哦哦色天天综合| 一区二区免费在线| 91久久精品国产91性色tv| 亚洲午夜电影网| 在线成人av网站| 青青草国产成人99久久| 日韩一区二区三区四区| 韩国欧美国产1区| 国产人伦精品一区二区| 99久久久久久| 一区2区3区在线看| 欧美精品黑人性xxxx| 男女男精品视频网| 2020国产精品自拍| 国产成人综合精品三级| 国产精品国产三级国产a | 成人一区二区三区在线观看| 中文字幕一区二区不卡| 日本乱人伦一区| 日本欧美一区二区| 国产日韩亚洲欧美综合| www.日韩精品| 午夜电影久久久| 国产偷国产偷亚洲高清人白洁| 成人动漫在线一区| 亚洲第一会所有码转帖| 精品毛片乱码1区2区3区| 国产不卡视频一区二区三区| 亚洲精品国产精品乱码不99 | 一区二区三区中文字幕精品精品| 欧美日韩国产综合一区二区 | 久久av中文字幕片| 中文字幕在线播放不卡一区|