📄 rtmp.h
字号:
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; \ case 4920000: ch = 184; /* Japan */ break; \ case 4940000: ch = 188; /* Japan */ break; \ case 4960000: ch = 192; /* Japan */ break; \ case 4980000: ch = 196; /* Japan */ break; \ case 5040000: ch = 208; /* Japan, means J08 */ break; \ case 5060000: ch = 212; /* Japan, means J12 */ break; \ case 5080000: ch = 216; /* Japan, means J16 */ break; \ default: ch = 1; break; \ } \ }//// Common fragment list structure - Identical to the scatter gather frag list structure////#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT #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 GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))#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 MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)// Check LEAP & CCKM flags#define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)#define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE)) // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required #define EXTRA_LLCSNAP_ENCAP(_pBufVA, _pExtraLlcSnapEncap) \{ \ if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \ { \ _pExtraLlcSnapEncap = SNAP_802_1H; \ if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \ NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \ { \ _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \ } \ } \ else \ { \ _pExtraLlcSnapEncap = NULL; \ } \}#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 SWITCH_AB( _pAA, _pBB) \{ \ PVOID pCC; \ pCC = _pBB; \ _pBB = _pAA; \ _pAA = pCC; \}// 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, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \{ \ ULONG High32TSF, Low32TSF; \ RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \ RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \ MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \}// INFRA mode- Address 1 - AP, Address 2 - this STA, Address 3 - DA// ADHOC mode- Address 1 - DA, Address 2 - this STA, Address 3 - BSSID#ifdef CONFIG_STA_SUPPORT#define MAKE_802_11_HEADER(_pAd, _80211hdr, _pDA) \{ \ NdisZeroMemory(&_80211hdr, sizeof(HEADER_802_11)); \ if (INFRA_ON(_pAd)) \ { \ COPY_MAC_ADDR(_80211hdr.Addr1, _pAd->CommonCfg.Bssid); \ COPY_MAC_ADDR(_80211hdr.Addr3, _pDA); \ _80211hdr.FC.ToDs = 1; \ } \ else \ { \ COPY_MAC_ADDR(_80211hdr.Addr1, _pDA); \ COPY_MAC_ADDR(_80211hdr.Addr3, _pAd->CommonCfg.Bssid); \ } \ COPY_MAC_ADDR(_80211hdr.Addr2, _pAd->CurrentAddress); \ _80211hdr.FC.Type = BTYPE_DATA; \ if (_pAd->CommonCfg.bAPSDForcePowerSave) \ { \ _80211hdr.FC.PwrMgmt = PWR_SAVE; \ } \ else \ { \ _80211hdr.FC.PwrMgmt = (_pAd->StaCfg.Psm == PWR_SAVE); \ } \}#endif // CONFIG_STA_SUPPORT //#define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \ NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)//#endif#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))//// 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 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address} RTMP_DMABUF, *PRTMP_DMABUF;typedef union _HEADER_802_11_SEQ{#ifdef BIG_ENDAIN struct { USHORT Sequence:12; USHORT Frag:4; } field;#else struct { USHORT Frag:4; USHORT Sequence:12; } field;#endif USHORT value;} HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;//// Data buffer for DMA operation, the buffer must be contiguous physical memory// Both DMA to / from CPU use the same structure.//typedef struct _RTMP_REORDERBUF{ BOOLEAN IsFull; PVOID AllocVa; // TxBuf virtual address UCHAR Header802_3[14]; HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA UCHAR DataOffset; USHORT Datasize; ULONG AllocSize; NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address} RTMP_REORDERBUF, *PRTMP_REORDERBUF;//// 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 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address PNDIS_PACKET pNdisPacket; PNDIS_PACKET pNextNdisPacket; RTMP_DMABUF DmaBuf; // Associated DMA buffer structure#ifdef RX_SCATTERED RTMP_DMABUF NextDmaBuf; // Associated DMA buffer structure#endif} 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 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address} RTMP_TXBUF, *PRTMP_TXBUF;typedef struct _RTMP_RX_BUF{ BOOLEAN InUse; ULONG ByBaRecIndex; RTMP_REORDERBUF MAP_RXBuf[Max_RX_REORDERBUF];} RTMP_RXBUF, *PRTMP_RXBUF;typedef struct _RTMP_TX_RING{ RTMP_DMACB Cell[TX_RING_SIZE]; ULONG TxCpuIdx; ULONG TxDmaIdx; ULONG TxSwFreeIdx; // software next free tx index} RTMP_TX_RING, *PRTMP_TX_RING;typedef struct _RTMP_RX_RING{ RTMP_DMACB Cell[RX_RING_SIZE]; ULONG RxCpuIdx; ULONG RxDmaIdx; LONG RxSwReadIdx; // software next read index} RTMP_RX_RING, *PRTMP_RX_RING;typedef struct _RTMP_MGMT_RING{ RTMP_DMACB Cell[MGMT_RING_SIZE]; ULONG TxCpuIdx; ULONG TxDmaIdx; ULONG TxSwFreeIdx; // software next free tx index} RTMP_MGMT_RING, *PRTMP_MGMT_RING;//// Statistic counter structure//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -