⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtmp.h

📁 TP Link 321 Linux Driver
💻 H
📖 第 1 页 / 共 5 页
字号:
				{											\					case 1: 	khz = 2412000;	 break; 	\					case 2: 	khz = 2417000;	 break; 	\					case 3: 	khz = 2422000;	 break; 	\					case 4: 	khz = 2427000;	 break; 	\					case 5: 	khz = 2432000;	 break; 	\					case 6: 	khz = 2437000;	 break; 	\					case 7: 	khz = 2442000;	 break; 	\					case 8: 	khz = 2447000;	 break; 	\					case 9: 	khz = 2452000;	 break; 	\					case 10:	khz = 2457000;	 break; 	\					case 11:	khz = 2462000;	 break; 	\					case 12:	khz = 2467000;	 break; 	\					case 13:	khz = 2472000;	 break; 	\					case 14:	khz = 2484000;	 break; 	\					case 36:  /* UNII */  khz = 5180000;   break;	  \					case 40:  /* UNII */  khz = 5200000;   break;	  \					case 44:  /* UNII */  khz = 5220000;   break;	  \					case 48:  /* UNII */  khz = 5240000;   break;	  \					case 52:  /* UNII */  khz = 5260000;   break;	  \					case 56:  /* UNII */  khz = 5280000;   break;	  \					case 60:  /* UNII */  khz = 5300000;   break;	  \					case 64:  /* UNII */  khz = 5320000;   break;	  \					case 149: /* UNII */  khz = 5745000;   break;	  \					case 153: /* UNII */  khz = 5765000;   break;	  \					case 157: /* UNII */  khz = 5785000;   break;	  \					case 161: /* UNII */  khz = 5805000;   break;	  \					case 165: /* UNII */  khz = 5825000;   break;	  \					case 100: /* HiperLAN2 */  khz = 5500000;	break;	   \					case 104: /* HiperLAN2 */  khz = 5520000;	break;	   \					case 108: /* HiperLAN2 */  khz = 5540000;	break;	   \					case 112: /* HiperLAN2 */  khz = 5560000;	break;	   \					case 116: /* HiperLAN2 */  khz = 5580000;	break;	   \					case 120: /* HiperLAN2 */  khz = 5600000;	break;	   \					case 124: /* HiperLAN2 */  khz = 5620000;	break;	   \					case 128: /* HiperLAN2 */  khz = 5640000;	break;	   \					case 132: /* HiperLAN2 */  khz = 5660000;	break;	   \					case 136: /* HiperLAN2 */  khz = 5680000;	break;	   \					case 140: /* HiperLAN2 */  khz = 5700000;	break;	   \					case 34:  /* Japan MMAC */	 khz = 5170000;   break;   \					case 38:  /* Japan MMAC */	 khz = 5190000;   break;   \					case 42:  /* Japan MMAC */	 khz = 5210000;   break;   \					case 46:  /* Japan MMAC */	 khz = 5230000;   break;   \					default:	khz = 2412000;	 break; 	\				}											\			}#define 	MAP_KHZ_TO_CHANNEL_ID(khz, ch)	{				\				switch (khz)								\				{											\					case 2412000:	 ch = 1;	 break; 	\					case 2417000:	 ch = 2;	 break; 	\					case 2422000:	 ch = 3;	 break; 	\					case 2427000:	 ch = 4;	 break; 	\					case 2432000:	 ch = 5;	 break; 	\					case 2437000:	 ch = 6;	 break; 	\					case 2442000:	 ch = 7;	 break; 	\					case 2447000:	 ch = 8;	 break; 	\					case 2452000:	 ch = 9;	 break; 	\					case 2457000:	 ch = 10;	 break; 	\					case 2462000:	 ch = 11;	 break; 	\					case 2467000:	 ch = 12;	 break; 	\					case 2472000:	 ch = 13;	 break; 	\					case 2484000:	 ch = 14;	 break; 	\					case 5180000:	 ch = 36;  /* UNII */  break;	  \					case 5200000:	 ch = 40;  /* UNII */  break;	  \					case 5220000:	 ch = 44;  /* UNII */  break;	  \					case 5240000:	 ch = 48;  /* UNII */  break;	  \					case 5260000:	 ch = 52;  /* UNII */  break;	  \					case 5280000:	 ch = 56;  /* UNII */  break;	  \					case 5300000:	 ch = 60;  /* UNII */  break;	  \					case 5320000:	 ch = 64;  /* UNII */  break;	  \					case 5745000:	 ch = 149; /* UNII */  break;	  \					case 5765000:	 ch = 153; /* UNII */  break;	  \					case 5785000:	 ch = 157; /* UNII */  break;	  \					case 5805000:	 ch = 161; /* UNII */  break;	  \					case 5825000:	 ch = 165; /* UNII */  break;	  \					case 5500000:	 ch = 100; /* HiperLAN2 */	break;	   \					case 5520000:	 ch = 104; /* HiperLAN2 */	break;	   \					case 5540000:	 ch = 108; /* HiperLAN2 */	break;	   \					case 5560000:	 ch = 112; /* HiperLAN2 */	break;	   \					case 5580000:	 ch = 116; /* HiperLAN2 */	break;	   \					case 5600000:	 ch = 120; /* HiperLAN2 */	break;	   \					case 5620000:	 ch = 124; /* HiperLAN2 */	break;	   \					case 5640000:	 ch = 128; /* HiperLAN2 */	break;	   \					case 5660000:	 ch = 132; /* HiperLAN2 */	break;	   \					case 5680000:	 ch = 136; /* HiperLAN2 */	break;	   \					case 5700000:	 ch = 140; /* HiperLAN2 */	break;	   \					case 5170000:	 ch = 34;  /* Japan MMAC */   break;   \					case 5190000:	 ch = 38;  /* Japan MMAC */   break;   \					case 5210000:	 ch = 42;  /* Japan MMAC */   break;   \					case 5230000:	 ch = 46;  /* Japan MMAC */   break;   \					default:		 ch = 1;	 break; 	\				}											\			}#define VIRTUAL_IF_INC(pAd) ((pAd)->VirtualIfCnt++) #define VIRTUAL_IF_DEC(pAd) ((pAd)->VirtualIfCnt--)#define VIRTUAL_IF_NUM(pAd) ((pAd)->VirtualIfCnt)  //// Common fragment list structure -  Identical to the scatter gather frag list structure//#define NIC_MAX_PHYS_BUF_COUNT				8typedef struct _RTMP_SCATTER_GATHER_ELEMENT {	PVOID		Address;	ULONG		Length;	PULONG		Reserved;} RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;typedef struct _RTMP_SCATTER_GATHER_LIST {	ULONG  NumberOfElements;	PULONG Reserved;	RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];} RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;////	Some utility macros//#ifndef min#define min(_a, _b) 	(((_a) < (_b)) ? (_a) : (_b))#endif#ifndef max#define max(_a, _b) 	(((_a) > (_b)) ? (_a) : (_b))#endif#define INC_COUNTER(Val)		(Val.QuadPart++)#define	INC_COUNTER64(Val)		(Val.QuadPart++)#define INFRA_ON(_p)			(OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))#define ADHOC_ON(_p)			(OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))#define RTMP_SET_PACKET_MOREDATA(_p, _morebit)	((_p)->cb[6] = _morebit)#define RTMP_GET_PACKET_MOREDATA(_p)			((_p)->cb[6])// b0-b3 as User Priority#define RTMP_SET_PACKET_UP(_p, _prio)				((_p)->cb[8] = ((_p)->cb[8] & 0xf0) | (_prio))#define RTMP_GET_PACKET_UP(_p)						((_p)->cb[8] & 0x0f)// b4-b7 as fragment ##define RTMP_SET_PACKET_FRAGMENTS(_p, number)		((_p)->cb[9] = ((_p)->cb[9] & 0x0f) | (number << 4))#define RTMP_GET_PACKET_FRAGMENTS(_p)				(((_p)->cb[9] & 0xf0) >> 4)// 0x0 ~0x7f: TX to AP's own BSS which has the specified AID (this value also as MAC table index)// 0x80~0xff: TX to a WDS link. b0~6: WDS index#define RTMP_SET_PACKET_WCID(_p, _wcid)				((_p)->cb[10] = _wcid)#define RTMP_GET_PACKET_WCID(_p) 					((_p)->cb[10])// 0xff: PKTSRC_NDIS, others: local TX buffer index. This value affects how to a packet#define RTMP_SET_PACKET_SOURCE(_p, _pktsrc) 		((_p)->cb[11]= _pktsrc)#define RTMP_GET_PACKET_SOURCE(_p)					((_p)->cb[11])// b0~2: RTS/CTS-to-self protection method#define RTMP_SET_PACKET_RTS(_p, _num)				((_p)->cb[12] = ((_p)->cb[12] & 0xf8) | (_num))#define RTMP_GET_PACKET_RTS(_p) 					((_p)->cb[12] & 0x07)// b3~7: TX rate index#define RTMP_SET_PACKET_TXRATE(_p, _rate)			((_p)->cb[13] = ((_p)->cb[13] & 0x07) | (_rate << 3))#define RTMP_GET_PACKET_TXRATE(_p)					(((_p)->cb[13] & 0xf8) >> 3)#define PKTSRC_NDIS 			0x7f#define PKTSRC_DRIVER			0x0f#define	MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType)					\{																		\	NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN);							\	NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN);			\	NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE);	\}// if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.// else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field // else remove the LLC/SNAP field from the result Ethernet frame// Patch for WHQL only, which did not turn on Netbios but use IPX within its payload// Note://	   _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO//	   _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed#define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP)	  \{																		\	char LLC_Len[2];													\																		\	_pRemovedLLCSNAP = NULL;											\	if (NdisEqualMemory(SNAP_802_1H, _pData, 6)  || 					\		NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) 				\	{																	\		PUCHAR pProto = _pData + 6; 									\																		\		if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) &&	\			NdisEqualMemory(SNAP_802_1H, _pData, 6))					\		{																\			LLC_Len[0] = (UCHAR)(_DataSize / 256);						\			LLC_Len[1] = (UCHAR)(_DataSize % 256);						\			MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len);			\		}																\		else															\		{																\			MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto);			\			_pRemovedLLCSNAP = _pData;									\			_DataSize -= LENGTH_802_1_H;								\			_pData += LENGTH_802_1_H;									\		}																\	}																	\	else																\	{																	\		LLC_Len[0] = (UCHAR)(_DataSize / 256);							\		LLC_Len[1] = (UCHAR)(_DataSize % 256);							\		MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len);				\	}																	\}#define RECORD_LATEST_RX_DATA_RATE(_pAd, _pRxD) 								\{																				\	if ((_pRxD)->Ofdm)															\		(_pAd)->LastRxRate = OfdmSignalToRateId[(_pRxD)->PlcpSignal & 0x0f];	\	else if ((_pRxD)->PlcpSignal == 10) 										\		(_pAd)->LastRxRate = RATE_1;											\	else if ((_pRxD)->PlcpSignal == 20) 										\		(_pAd)->LastRxRate = RATE_2;											\	else if ((_pRxD)->PlcpSignal == 55) 										\		(_pAd)->LastRxRate = RATE_5_5;											\	else																		\		(_pAd)->LastRxRate = RATE_11;											\} // INFRA mode- Address 1 - AP, Address 2 - this STA, Address 3 - DA// ADHOC mode- Address 1 - DA, Address 2 - this STA, Address 3 - BSSID#define MAKE_802_11_HEADER(_pAd, _80211hdr, _pDA, _seq) 						\{																				\	NdisZeroMemory(&_80211hdr, sizeof(HEADER_802_11));							\	if (INFRA_ON(_pAd)) 														\	{																			\		COPY_MAC_ADDR(_80211hdr.Addr1, _pAd->PortCfg.Bssid);					\		COPY_MAC_ADDR(_80211hdr.Addr3, _pDA);									\		_80211hdr.FC.ToDs = 1;													\	}																			\	else																		\	{																			\		COPY_MAC_ADDR(_80211hdr.Addr1, _pDA);									\		COPY_MAC_ADDR(_80211hdr.Addr3, _pAd->PortCfg.Bssid);					\	}																			\	COPY_MAC_ADDR(_80211hdr.Addr2, _pAd->CurrentAddress);						\	_80211hdr.Sequence = _seq;													\	_80211hdr.FC.Type = BTYPE_DATA; 											\	_80211hdr.FC.PwrMgmt = (_pAd->PortCfg.Psm == PWR_SAVE); 					\}//Need to collect each ant's rssi concurrently//rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant#define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2)					\{																				\	SHORT	AvgRssi;															\	UCHAR	UsedAnt;															\	if (_pAd->RxAnt.EvaluatePeriod == 0)									\	{																		\		UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt;							\		AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt];						\		if (AvgRssi < 0)													\			AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1;					\		else																\			AvgRssi = _rssi1 << 3;											\		_pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi;						\	}																		\	else																	\	{																		\		UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt;							\		AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt];						\		if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate))		\			AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1;					\		else																\		{																	\			_pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE;					\			AvgRssi = _rssi1 << 3;											\		}																	\		_pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi;						\		_pAd->RxAnt.RcvPktNumWhenEvaluate++;								\	}																		\}#define RELEASE_NDIS_PACKET(_pAd, _pSkb)								\{																		\	if (RTMP_GET_PACKET_SOURCE(_pSkb) == PKTSRC_NDIS)					\	{																	\		RTUSBFreeSkbBuffer(_pSkb);										\		_pAd->RalinkCounters.PendingNdisPacketCount --; 				\	}																	\	else																\		RTUSBFreeSkbBuffer(_pSkb);										\}#define EnqueueCmd(cmdq, cmdqelmt)		\{										\	if (cmdq->size == 0)				\		cmdq->head = cmdqelmt;			\	else								\		cmdq->tail->next = cmdqelmt;	\	cmdq->tail = cmdqelmt;				\	cmdqelmt->next = NULL;				\	cmdq->size++;						\}// Free Tx ring descriptor MACRO// This can only called from complete function since it will change the IO counters#define	FREE_TX_RING(_p, _b, _t)			\{										\	(_t)->InUse 	 = FALSE;			\	(_t)->LastOne	 = FALSE;			\	(_t)->IRPPending = FALSE;			\	(_t)->bWaitingBulkOut = FALSE;		\	(_t)->BulkOutSize= 0;				\	(_p)->NextBulkOutIndex[_b] = (((_p)->NextBulkOutIndex[_b] + 1) % TX_RING_SIZE);	\	atomic_dec(&(_p)->TxCount); \}//2007/12/12:KH add to fix compiled bug(START) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) #undef __wait_event_interruptible_timeout #undef wait_event_interruptible_timeout #define __wait_event_interruptible_timeout(wq, condition, ret)		\ do {									\ 	wait_queue_t __wait;						\ 	init_waitqueue_entry(&__wait, current);				\ 									\ 	add_wait_queue(&wq, &__wait);					\ 	for (;;) {							\ 		set_current_state(TASK_INTERRUPTIBLE);			\ 		if (condition)						\ 			break;						\ 		if (!signal_pending(current)) {				\ 			ret = schedule_timeout(ret);			\ 			if (!ret)					\ 				break;					\ 			continue;					\ 		}							\ 		ret = -ERESTARTSYS;					\ 		break;							\ 	}								\ 	current->state = TASK_RUNNING;					\ 	remove_wait_queue(&wq, &__wait);				\ } while (0) #define wait_event_interruptible_timeout(wq, condition, timeout)	\ ({									\ 	long __ret = timeout;						\ 	if (!(condition))						\ 		__wait_event_interruptible_timeout(wq, condition, __ret); \ 	__ret;								\ }) #endif //2007/12/12:KH add to fix compiled bug(END)#define	LOCAL_TX_RING_EMPTY(_p, _i)		(((_p)->TxContext[_i][(_p)->NextBulkOutIndex[_i]].InUse) == FALSE)typedef	struct _CmdQElmt	{	UINT				command;	PVOID				buffer;	ULONG				bufferlength;	BOOLEAN				CmdFromNdis;	BOOLEAN				SetOperation;	BOOLEAN				InUse;	struct _CmdQElmt	*next;}	CmdQElmt, *PCmdQElmt;typedef	struct	_CmdQ	{	UINT		size;	CmdQElmt	*head;	CmdQElmt	*tail;}	CmdQ, *PCmdQ;////////////////////////////////////////////////////////////////////////////// The TX_BUFFER structure forms the transmitted USB packet to the device////////////////////////////////////////////////////////////////////////////typedef struct __TX_BUFFER{	TXD_STRUC		TxDesc;	union	{		UCHAR			WirelessPacket[2342];		HEADER_802_11	NullFrame;		PSPOLL_FRAME	PsPollPacket;		RTS_FRAME		RTSFrame;//	};	}u;  // edit by johnli, fix compiler error for some platforms} TX_BUFFER, *PTX_BUFFER;////////////////////////////////////////////////////////////////////////////// The RTS_BUFFER structure forms the transmitted USB packet to the device////////////////////////////////////////////////////////////////////////////typedef struct __RTS_BUFFER{	TXD_STRUC	   TxDesc;	UCHAR		   RTSPacket[16];} RTS_BUFFER, *PRTS_BUFFER;// used to track driver-generated write irps typedef struct _TX_CONTEXT{	PVOID			pAd;			//Initialized in MiniportInitialize	PURB			pUrb;			//Initialized in MiniportInitialize//	PIRP			pIrp;			//Initialized in MiniportInitialize, used to cancel pending bulk out	PTX_BUFFER		TransferBuffer;	//Initialized in MiniportInitialize	ULONG			BulkOutSize;	UCHAR			BulkOutPipeId;	BOOLEAN			InUse;	BOOLEAN			bWaitingBulkOut;	BOOLEAN			IRPPending;	BOOLEAN			LastOne;}	TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;typedef enum _Pendingirp {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -