📄 rtmp.h
字号:
{ \ 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 + -