rtmp.h

来自「Ralink RT61 SoftAP Driver source code. 」· C头文件 代码 · 共 1,769 行 · 第 1/5 页

H
1,769
字号

#define INC_COUNTER(Val)    (Val.QuadPart++)
#define	INC_COUNTER64(Val)	        (Val.QuadPart++)

#define MIN_NET_DEVICE_FOR_AID			0x00		//0x00~0x3f
#define MIN_NET_DEVICE_FOR_MBSSID		0x00		//0x00,0x10,0x20,0x30
#define MIN_NET_DEVICE_FOR_WDS			0x10		//0x40,0x50,0x60,0x70
#define MIN_NET_DEVICE_FOR_APCLI		0x20

#ifdef RTL865X_FAST_PATH
/* reserve cb: 0~3, 28~47 */
#define CB_OFF	28
#else
#define CB_OFF  0
#endif

#define RTMP_SET_PACKET_FRAGMENTS(_p, number)       ((_p)->cb[10+CB_OFF] = number)
#define RTMP_GET_PACKET_FRAGMENTS(_p)               ((_p)->cb[10+CB_OFF])
#define RTMP_SET_PACKET_RTS(_p, number)             ((_p)->cb[11+CB_OFF] = number)
#define RTMP_GET_PACKET_RTS(_p)                     ((_p)->cb[11+CB_OFF])
#define RTMP_SET_PACKET_SOURCE(_p, pktsrc)          ((_p)->cb[12+CB_OFF] = pktsrc)
#define RTMP_GET_PACKET_SOURCE(_p)                  ((_p)->cb[12+CB_OFF])
#define RTMP_SET_PACKET_TXRATE(_p, rate)            ((_p)->cb[13+CB_OFF] = rate)
#define RTMP_GET_PACKET_TXRATE(_p)                  ((_p)->cb[13+CB_OFF])
#define RTMP_SET_PACKET_UP(_p, _prio)               ((_p)->cb[14+CB_OFF] = _prio)
#define RTMP_GET_PACKET_UP(_p)                      ((_p)->cb[14+CB_OFF])
#define RTMP_SET_PACKET_NET_DEVICE_MBSSID(_p, idx)  ((_p)->cb[15+CB_OFF] = idx)
#define RTMP_SET_PACKET_NET_DEVICE_WDS(_p, idx)     ((_p)->cb[15+CB_OFF] = (idx + MIN_NET_DEVICE_FOR_WDS))
#define RTMP_SET_PACKET_NET_DEVICE_APCLI(_p, idx)   ((_p)->cb[15+CB_OFF] = (idx + MIN_NET_DEVICE_FOR_APCLI))
#define RTMP_GET_PACKET_NET_DEVICE(_p)              ((_p)->cb[15+CB_OFF])
#define RTMP_SET_PACKET_AID(_p, idx)				((_p)->cb[16+CB_OFF] = idx)
#define RTMP_GET_PACKET_AID(_p)						((_p)->cb[16+CB_OFF])

#define RTMP_SET_PACKET_MOREDATA(_p, _morebit)		((_p)->cb[17+CB_OFF] = _morebit)
#define RTMP_GET_PACKET_MOREDATA(_p)				((_p)->cb[17+CB_OFF])


#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 MAC_ADDR_EQUAL(pAddr1,pAddr2)           RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
#define COPY_MAC_ADDR(Addr1, Addr2)             memcpy((Addr1), (Addr2), MAC_ADDR_LEN)
#define SSID_EQUAL(ssid1, len1, ssid2, len2)    ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))

#define RELEASE_NDIS_PACKET(_pAd, _pSkb)                             	\
{                                                                       \
    if (RTMP_GET_PACKET_SOURCE(_pSkb) == PKTSRC_NDIS)                	\
    {                                                                   \
        RTMPFreeSkbBuffer(_pSkb);                                    	\
        _pAd->RalinkCounters.PendingNdisPacketCount --;                 \
    }                                                                   \
    else                                                                \
        RTMPFreeSkbBuffer(_pSkb);                                    	\
}

//
// 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;

//
//  Data buffer for DMA operation, the buffer must be contiguous physical memory
//  Both DMA to / from CPU use the same structure.
//
typedef struct  _RTMP_DMABUF
{
    ULONG                   AllocSize;
    PVOID                   AllocVa;            // TxBuf virtual address
    dma_addr_t              AllocPa;            // TxBuf physical address
    struct sk_buff			*pSkb;
}   RTMP_DMABUF, *PRTMP_DMABUF;

//
// Control block (Descriptor) for all ring descriptor DMA operation, buffer must be 
// contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
// which won't be released, driver has to wait until upper layer return the packet
// before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
// to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
// which driver should ACK upper layer when the tx is physically done or failed.
//
typedef struct _RTMP_DMACB
{
    ULONG                   AllocSize;          // Control block size
    PVOID                   AllocVa;            // Control block virtual address
    dma_addr_t              AllocPa;            // Control block physical address
    RTMP_DMABUF             DmaBuf;             // Associated DMA buffer structure
}   RTMP_DMACB, *PRTMP_DMACB;

typedef struct _RTMP_TX_BUF
{
    PQUEUE_ENTRY    Next;
    UCHAR           Index;
    ULONG           AllocSize;          // Control block size
    PVOID           AllocVa;            // Control block virtual address
    dma_addr_t      AllocPa;            // Control block physical address
}   RTMP_TXBUF, *PRTMP_TXBUF;

typedef struct _RTMP_TX_RING
{
    RTMP_DMACB  Cell[TX_RING_SIZE];
    UINT        CurTxIndex;
    UINT        NextTxDmaDoneIndex;
}   RTMP_TX_RING, *PRTMP_TX_RING;

typedef struct _RTMP_RX_RING
{
    RTMP_DMACB  Cell[RX_RING_SIZE];
    UINT        CurRxIndex;
}   RTMP_RX_RING, *PRTMP_RX_RING;

typedef struct _RTMP_MGMT_RING
{
    RTMP_DMACB  Cell[MGMT_RING_SIZE];
    UINT        CurTxIndex;
    UINT        NextTxDmaDoneIndex;
} RTMP_MGMT_RING, *PRTMP_MGMT_RING;

//
//  Statistic counter structure
//
typedef struct _COUNTER_802_3
{
    // General Stats
	ULONG		GoodTransmits;
	ULONG		GoodReceives;
	ULONG		TxErrors;
	ULONG		RxErrors;
	ULONG		RxNoBuffer;

    // Ethernet Stats
	ULONG		RcvAlignmentErrors;
	ULONG		OneCollision;
	ULONG		MoreCollisions;

}   COUNTER_802_3, *PCOUNTER_802_3;

typedef struct _COUNTER_802_11 {
    ULONG           Length;
    ULONG	TransmittedFragmentCount;
    ULONG	MulticastTransmittedFrameCount;
    ULONG	FailedCount;
    ULONG	RetryCount;
    ULONG	MultipleRetryCount;
    ULONG	RTSSuccessCount;
    ULONG	RTSFailureCount;
    ULONG	ACKFailureCount;
    ULONG	FrameDuplicateCount;
    ULONG	ReceivedFragmentCount;
    ULONG	MulticastReceivedFrameCount;
    ULONG	FCSErrorCount;
} COUNTER_802_11, *PCOUNTER_802_11;

typedef struct _COUNTER_RALINK {
    ULONG           TransmittedByteCount;   // both successful and failure, used to calculate TX throughput
    ULONG           ReceivedByteCount;      // both CRC okay and CRC error, used to calculate RX throughput
    ULONG           BeenDisassociatedCount;
    ULONG           BadCQIAutoRecoveryCount;
    ULONG           PoorCQIRoamingCount;
    ULONG           MgmtRingFullCount;
    ULONG           RxCount;
    ULONG           RxRingErrCount;
    ULONG           KickTxCount;
    ULONG           TxRingErrCount;
	ULONG			RealFcsErrCount;
    ULONG           PendingNdisPacketCount;

    ULONG           OneSecOsTxCount[NUM_OF_TX_RING];
    ULONG           OneSecDmaDoneCount[NUM_OF_TX_RING];
    ULONG           OneSecTxDoneCount;
    ULONG           OneSecTxAggregationCount;
    ULONG           OneSecRxAggregationCount;

    ULONG           OneSecTxNoRetryOkCount;
    ULONG           OneSecTxRetryOkCount;
    ULONG           OneSecTxFailCount;
	ULONG		    OneSecFalseCCACnt;		// CCA error count, for debug purpose, might move to global counter
    ULONG           OneSecRxOkCnt;          // RX without error
	ULONG           OneSecRxFcsErrCnt;      // CRC error
	ULONG           OneSecBeaconSentCnt;
} COUNTER_RALINK, *PCOUNTER_RALINK;

typedef struct _COUNTER_DRS {
    // to record the each TX rate's quality. 0 is best, the bigger the worse.
    USHORT          TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
    UCHAR           PER[MAX_LEN_OF_SUPPORTED_RATES];
    UCHAR           TxRateUpPenalty;      // extra # of second penalty due to last unstable condition
    ULONG           CurrTxRateStableTime; // # of second in current TX rate
    BOOLEAN         fNoisyEnvironment;
    UCHAR           LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
} COUNTER_DRS, *PCOUNTER_DRS;

//
//  Arcfour Structure Added by PaulWu
//
typedef struct _ARCFOUR
{
    UINT            X;
    UINT            Y;
    UCHAR           STATE[256];
}   ARCFOURCONTEXT, *PARCFOURCONTEXT;

typedef	struct	PACKED _IV_CONTROL_
{
	union PACKED
	{
		struct PACKED
		{
			UCHAR		rc0;
			UCHAR		rc1;
			UCHAR		rc2;

			union PACKED
			{
				struct PACKED
				{
#ifdef BIG_ENDIAN
					UCHAR	KeyID:2;
					UCHAR	ExtIV:1;
					UCHAR	Rsvd:5;
#else
					UCHAR	Rsvd:5;
					UCHAR	ExtIV:1;
					UCHAR	KeyID:2;
#endif
				}	field;
				UCHAR		Byte;
			}	CONTROL;
		}	field;
		
		ULONG	word;
	}	IV16;
	
	ULONG	IV32;
}	TKIP_IV, *PTKIP_IV;

typedef struct _CIPHER_KEY {
	UCHAR	Mac[6];	            // as lookup key, for pairwise key only
	UCHAR   BssId[6];
	UCHAR   CipherAlg;          // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
	UCHAR	KeyLen;				// Key length for each key, 0: entry is invalid
	UCHAR	Key[16];			// right now we implement 4 keys, 128 bits max
	UCHAR	RxMic[8];
	UCHAR	TxMic[8];
	UCHAR	TxTsc[6];			// 48bit TSC value
	UCHAR	RxTsc[6];			// 48bit TSC value
	UCHAR   Type;               // Indicate Pairwise/Group when reporting MIC error
}	CIPHER_KEY, *PCIPHER_KEY;

typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
    UCHAR     EvaluatePeriod;		// 0:not evalute status, 1: evaluate status, 2: switching status
    UCHAR     Pair1PrimaryRxAnt;     // 0:Ant-E1, 1:Ant-E2
    UCHAR     Pair1SecondaryRxAnt;   // 0:Ant-E1, 1:Ant-E2
    UCHAR     Pair2PrimaryRxAnt;     // 0:Ant-E3, 1:Ant-E4
    UCHAR     Pair2SecondaryRxAnt;   // 0:Ant-E3, 1:Ant-E4
    SHORT     Pair1AvgRssi[2];       // AvgRssi[0]:E1, AvgRssi[1]:E2
    SHORT     Pair2AvgRssi[2];       // AvgRssi[0]:E3, AvgRssi[1]:E4
    ULONG     RcvPktNumWhenEvaluate;
    BOOLEAN   FirstPktArrivedWhenEvaluate;
    struct timer_list    RxAntDiversityTimer;
} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;

typedef struct _VIRTUAL_ADAPTER
{
	struct net_device		*RtmpDev;
	struct net_device		*VirtualDev;
} VIRTUAL_ADAPTER, PVIRTUAL_ADAPTER;

typedef struct _MAC_TABLE_ENTRY {
    BOOLEAN         Valid;

    BOOLEAN         RetryTimerRunning;  
    // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
    UCHAR           CMTimerRunning;
    UCHAR           RSNIE_Len;
    UCHAR           RSN_IE[MAX_LEN_OF_RSNIE];
    UCHAR           ANonce[32];
    UCHAR           R_Counter[LEN_KEY_DESC_REPLAY];
    UCHAR           PTK[64];
    UCHAR           ReTryCounter;   
    struct timer_list                 RetryTimer;
    NDIS_802_11_AUTHENTICATION_MODE     AuthMode;   // This should match to whatever microsoft defined
    NDIS_802_11_WEP_STATUS              WepStatus;
    WPA_STATE       WpaState;
    GTK_STATE       GTKState;
    USHORT          PortSecured;

⌨️ 快捷键说明

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