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

📄 rtmp.h

📁 RT73_Linux_STA_Drv1.0.3.6 linux系统下
💻 H
📖 第 1 页 / 共 5 页
字号:
					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; 	\
				}											\
			}

  
//
// Common fragment list structure -  Identical to the scatter gather frag list structure
//
#define NIC_MAX_PHYS_BUF_COUNT				8

typedef 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))


// b0-b3 as User Priority
#define RTMP_SET_PACKET_UP(_p, _prio)				((_p)->cb[10] = ((_p)->cb[10] & 0xf0) | (_prio))
#define RTMP_GET_PACKET_UP(_p)						((_p)->cb[10] & 0x0f)

// b4-b7 as fragment #
#define RTMP_SET_PACKET_FRAGMENTS(_p, number)		((_p)->cb[10] = ((_p)->cb[10] & 0x0f) | (number << 4))
#define RTMP_GET_PACKET_FRAGMENTS(_p)				(((_p)->cb[10] & 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_WDS(_p, _wdsidx)			((_p)->cb[11] = _wdsidx)
#define RTMP_GET_PACKET_WDS(_p) 					((_p)->cb[11])

// 0xff: PKTSRC_NDIS, others: local TX buffer index. This value affects how to a packet
#define RTMP_SET_PACKET_SOURCE(_p, _pktsrc) 		((_p)->cb[12]= _pktsrc)
#define RTMP_GET_PACKET_SOURCE(_p)					((_p)->cb[12])

// b0~2: RTS/CTS-to-self protection method
#define RTMP_SET_PACKET_RTS(_p, _num)				((_p)->cb[13] = ((_p)->cb[13] & 0xf8) | (_num))
#define RTMP_GET_PACKET_RTS(_p) 					((_p)->cb[13] & 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); \
}

#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;
	};
} 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 {
	NONEPENDING,
	IRP0PENDING,
	IRP1PENDING
}	PendingIRP;

typedef enum _BEACON_INDEX {
	BEACON0,
	BEACON1
}	BEACON_INDEX;


#define   IRPLOCK_COMPLETED 		0
#define   IRPLOCK_CANCELABLE		1
#define   IRPLOCK_CANCE_START		2
#define   IRPLOCK_CANCE_COMPLETE	3
//
// Structure to keep track of receive packets and buffers to indicate
// receive data to the protocol.
//
typedef struct _RX_CONTEXT
{
	PUCHAR				TransferBuffer; 
	PVOID				pAd;
//	PIRP				pIrp;//used to cancel pending bulk in.
	PURB				pUrb;
	BOOLEAN				InUse;
	BOOLEAN				IRPPending;		// TODO: To be removed
	atomic_t			IrpLock;
}	RX_CONTEXT, *PRX_CONTEXT;

//
// Register set pair for initialzation register set definition
//
typedef struct	_RTMP_REG_PAIR
{
	ULONG	Register;
	ULONG	Value;
}	RTMP_REG_PAIR, *PRTMP_REG_PAIR;

typedef struct	_BBP_REG_PAIR
{
	UCHAR	Register;
	UCHAR	Value;
}	BBP_REG_PAIR, *PBBP_REG_PAIR;

//
// Register set pair for initialzation register set definition
//
typedef struct	_RTMP_RF_REGS
{
	UCHAR	Channel;
	ULONG	R1;
	ULONG	R2;
	ULONG	R3;
	ULONG	R4;
}	RTMP_RF_REGS, *PRTMP_RF_REGS;

//

⌨️ 快捷键说明

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