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

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

?? rtusb_data.c

?? r73模塊的無線網(wǎng)卡在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一区二区三区免费野_久草精品视频
久久久亚洲精华液精华液精华液 | 国产拍揄自揄精品视频麻豆| 欧美疯狂性受xxxxx喷水图片| 99国产麻豆精品| 国产成人8x视频一区二区 | 欧美xxxx老人做受| 欧美一级一区二区| 日韩一区二区三区电影| 日韩一区国产二区欧美三区| 欧美美女视频在线观看| 制服丝袜一区二区三区| 日韩欧美国产成人一区二区| 欧美mv日韩mv| 久久久久国产一区二区三区四区| 精品成人一区二区| 国产日产欧美一区二区三区| 中文欧美字幕免费| 中文字幕一区三区| 亚洲黄色免费电影| 午夜伊人狠狠久久| 久久疯狂做爰流白浆xx| 国产露脸91国语对白| 欧美成人在线直播| 久久香蕉国产线看观看99| 国产亚洲精品久| 国产精品蜜臀在线观看| 亚洲免费观看在线观看| 亚洲成人自拍一区| 久久不见久久见免费视频1| 国产在线精品一区二区三区不卡| 国产成人午夜电影网| 91丨porny丨户外露出| 欧美日韩亚洲另类| 精品日韩一区二区三区免费视频| 中文字幕精品一区二区精品绿巨人| 综合自拍亚洲综合图不卡区| 石原莉奈一区二区三区在线观看| 麻豆一区二区三| 国产aⅴ精品一区二区三区色成熟| www.亚洲精品| 欧美精品欧美精品系列| 久久久青草青青国产亚洲免观| 综合色天天鬼久久鬼色| 日本在线不卡视频| 不卡一区二区三区四区| 欧美日韩精品一区二区天天拍小说 | 国产精品中文欧美| 一本大道综合伊人精品热热| 欧美一区二区三区精品| 欧美极品另类videosde| 亚洲国产成人高清精品| 国产一区高清在线| 色域天天综合网| 欧美www视频| 一级女性全黄久久生活片免费| 久久精品国产亚洲高清剧情介绍| 成人伦理片在线| 91精品国产黑色紧身裤美女| 国产精品免费视频网站| 三级久久三级久久| 成人午夜精品在线| 日韩一区二区三区高清免费看看| 国产精品久久久久影院老司| 欧美aa在线视频| 色噜噜狠狠成人中文综合| 精品国产凹凸成av人网站| 一个色综合av| 国产午夜精品在线观看| 午夜激情久久久| 一本久久综合亚洲鲁鲁五月天| 日韩欧美国产电影| 婷婷中文字幕综合| 99久久久无码国产精品| wwww国产精品欧美| 日本一不卡视频| 在线精品观看国产| 国产喷白浆一区二区三区| 美女网站一区二区| 欧美日韩高清不卡| 亚洲同性同志一二三专区| 国产一区999| 日韩免费在线观看| 性久久久久久久久| 在线免费不卡视频| 亚洲欧美在线视频| 成人午夜av在线| 久久综合狠狠综合久久综合88| 偷窥国产亚洲免费视频| 在线观看日韩高清av| 国产精品美女久久久久aⅴ国产馆| 国产专区欧美精品| 日韩精品专区在线影院重磅| 五月婷婷综合网| 日本精品视频一区二区| 国产精品久久久久aaaa| 国产成人啪午夜精品网站男同| 欧美一区二区三区思思人| 亚洲成人午夜影院| 欧美三级乱人伦电影| 亚洲一卡二卡三卡四卡| 日本道色综合久久| 亚洲视频免费在线观看| 91天堂素人约啪| 亚洲视频每日更新| 色婷婷精品久久二区二区蜜臀av | 日韩一级片在线播放| 日韩在线一区二区| 欧美久久久久久久久中文字幕| 亚洲制服欧美中文字幕中文字幕| 色天天综合色天天久久| 亚洲最新视频在线观看| 欧美又粗又大又爽| 亚洲国产wwwccc36天堂| 在线播放一区二区三区| 日韩专区一卡二卡| 日韩精品一区国产麻豆| 久久99久久99| 国产亚洲精品bt天堂精选| 成人美女视频在线看| 亚洲三级小视频| 欧美天天综合网| 免费成人av在线| 亚洲精品一区二区精华| 国产91清纯白嫩初高中在线观看 | 国产精品久久久久影院| 99久久久国产精品| 亚洲综合成人在线视频| 欧美日韩国产免费一区二区| 蜜臀av性久久久久蜜臀av麻豆| 亚洲精品一区二区三区四区高清| 国产精品亚洲第一| 亚洲天堂网中文字| 欧美绝品在线观看成人午夜影视| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久久蜜桃精品| 91在线国内视频| 三级在线观看一区二区| 久久久国产一区二区三区四区小说| 9i看片成人免费高清| 亚洲h精品动漫在线观看| 精品国产欧美一区二区| 99国产精品久久久| 天天综合色天天综合色h| 26uuu国产在线精品一区二区| 成人黄色av电影| 天堂久久久久va久久久久| 久久久国产一区二区三区四区小说| hitomi一区二区三区精品| 午夜精品久久久久久久久| 久久久久久久综合狠狠综合| 在线一区二区观看| 久久99精品久久久久久国产越南 | 亚洲欧洲制服丝袜| 91精品欧美一区二区三区综合在| 国产91精品在线观看| 日韩一区欧美二区| 国产精品情趣视频| 欧美一区二区在线观看| 成人天堂资源www在线| 亚洲第一主播视频| 国产精品免费看片| 欧美一区二区免费| 色综合久久久久网| 国产精品一区三区| 日欧美一区二区| 亚洲免费观看高清完整版在线观看熊| 日韩一区二区电影在线| 91浏览器在线视频| 国产麻豆9l精品三级站| 日韩和欧美的一区| 一区二区三区在线视频免费| 日韩欧美国产一区二区三区| 日本高清不卡一区| 丁香婷婷综合五月| 国内一区二区在线| 日韩二区三区四区| 亚洲综合丝袜美腿| 中文字幕一区二区三区av| 久久久青草青青国产亚洲免观| 制服丝袜成人动漫| 在线免费观看日本欧美| 99视频在线精品| 国产白丝网站精品污在线入口| 日韩vs国产vs欧美| 亚洲午夜精品在线| 亚洲色图制服诱惑| 国产欧美一区视频| 久久久综合九色合综国产精品| 91精品欧美久久久久久动漫| 欧美日韩一区二区三区在线| 91亚洲永久精品| 国产91精品在线观看| 国产高清不卡一区二区| 九色综合狠狠综合久久| 奇米色777欧美一区二区| 午夜不卡av在线| 亚洲高清免费一级二级三级| 亚洲国产成人精品视频| 亚洲午夜一区二区三区| 怡红院av一区二区三区|