2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 Miniport generic portion header file
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
43 #include "link_list.h"
44 #include "spectrum_def.h"
47 #ifdef CONFIG_STA_SUPPORT
49 #endif // CONFIG_STA_SUPPORT //
53 //#define DBG_DIAGNOSE 1
55 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
56 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
57 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
59 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
60 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
63 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
64 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
65 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
68 ////////////////////////////////////////////////////////////////////////////
69 // The TX_BUFFER structure forms the transmitted USB packet to the device
70 ////////////////////////////////////////////////////////////////////////////
71 typedef struct __TX_BUFFER{
73 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
74 HEADER_802_11 NullFrame;
75 PSPOLL_FRAME PsPollPacket;
78 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
79 } TX_BUFFER, *PTX_BUFFER;
81 typedef struct __HTTX_BUFFER{
83 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
84 HEADER_802_11 NullFrame;
85 PSPOLL_FRAME PsPollPacket;
88 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
89 } HTTX_BUFFER, *PHTTX_BUFFER;
92 // used to track driver-generated write irps
93 typedef struct _TX_CONTEXT
95 PVOID pAd; //Initialized in MiniportInitialize
96 PURB pUrb; //Initialized in MiniportInitialize
97 PIRP pIrp; //used to cancel pending bulk out.
98 //Initialized in MiniportInitialize
99 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
104 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
105 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
108 BOOLEAN bAggregatible;
109 UCHAR Header_802_3[LENGTH_802_3];
113 dma_addr_t data_dma; // urb dma on linux
115 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
118 // used to track driver-generated write irps
119 typedef struct _HT_TX_CONTEXT
121 PVOID pAd; //Initialized in MiniportInitialize
122 PURB pUrb; //Initialized in MiniportInitialize
123 PIRP pIrp; //used to cancel pending bulk out.
124 //Initialized in MiniportInitialize
125 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
126 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
132 BOOLEAN bCopySavePad;
134 UCHAR Header_802_3[LENGTH_802_3];
135 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
136 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
137 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
138 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
140 dma_addr_t data_dma; // urb dma on linux
141 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
145 // Structure to keep track of receive packets and buffers to indicate
146 // receive data to the protocol.
148 typedef struct _RX_CONTEXT
150 PUCHAR TransferBuffer;
152 PIRP pIrp;//used to cancel pending bulk in.
154 //These 2 Boolean shouldn't both be 1 at the same time.
155 ULONG BulkInOffset; // number of packets waiting for reordering .
156 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
157 BOOLEAN bRxHandling; // Notify this packet is being process now.
158 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
159 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
160 BOOLEAN IRPPending; // TODO: To be removed
162 NDIS_SPIN_LOCK RxContextLock;
163 dma_addr_t data_dma; // urb dma on linux
164 } RX_CONTEXT, *PRX_CONTEXT;
169 // NDIS Version definitions
171 #ifdef NDIS50_MINIPORT
172 #define RTMP_NDIS_MAJOR_VERSION 5
173 #define RTMP_NDIS_MINOR_VERSION 0
176 #ifdef NDIS51_MINIPORT
177 #define RTMP_NDIS_MAJOR_VERSION 5
178 #define RTMP_NDIS_MINOR_VERSION 1
181 extern char NIC_VENDOR_DESC[];
182 extern int NIC_VENDOR_DESC_LEN;
184 extern unsigned char SNAP_AIRONET[];
185 extern unsigned char CipherSuiteCiscoCCKM[];
186 extern unsigned char CipherSuiteCiscoCCKMLen;
187 extern unsigned char CipherSuiteCiscoCCKM24[];
188 extern unsigned char CipherSuiteCiscoCCKM24Len;
189 extern unsigned char CipherSuiteCCXTkip[];
190 extern unsigned char CipherSuiteCCXTkipLen;
191 extern unsigned char CISCO_OUI[];
192 extern UCHAR BaSizeArray[4];
194 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
196 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
197 extern ULONG BIT32[32];
198 extern UCHAR BIT8[8];
199 extern char* CipherName[];
200 extern char* MCSToMbps[];
201 extern UCHAR RxwiMCSToOfdmRate[12];
202 extern UCHAR SNAP_802_1H[6];
203 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
204 extern UCHAR SNAP_AIRONET[8];
205 extern UCHAR CKIP_LLC_SNAP[8];
206 extern UCHAR EAPOL_LLC_SNAP[8];
207 extern UCHAR EAPOL[2];
209 extern UCHAR APPLE_TALK[2];
210 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
211 extern UCHAR OfdmRateToRxwiMCS[];
212 extern UCHAR OfdmSignalToRateId[16] ;
213 extern UCHAR default_cwmin[4];
214 extern UCHAR default_cwmax[4];
215 extern UCHAR default_sta_aifsn[4];
216 extern UCHAR MapUserPriorityToAccessCategory[8];
218 extern USHORT RateUpPER[];
219 extern USHORT RateDownPER[];
220 extern UCHAR Phy11BNextRateDownward[];
221 extern UCHAR Phy11BNextRateUpward[];
222 extern UCHAR Phy11BGNextRateDownward[];
223 extern UCHAR Phy11BGNextRateUpward[];
224 extern UCHAR Phy11ANextRateDownward[];
225 extern UCHAR Phy11ANextRateUpward[];
226 extern CHAR RssiSafeLevelForTxRate[];
227 extern UCHAR RateIdToMbps[];
228 extern USHORT RateIdTo500Kbps[];
230 extern UCHAR CipherSuiteWpaNoneTkip[];
231 extern UCHAR CipherSuiteWpaNoneTkipLen;
233 extern UCHAR CipherSuiteWpaNoneAes[];
234 extern UCHAR CipherSuiteWpaNoneAesLen;
237 extern UCHAR SupRateIe;
238 extern UCHAR ExtRateIe;
240 #ifdef DOT11_N_SUPPORT
241 extern UCHAR HtCapIe;
242 extern UCHAR AddHtInfoIe;
243 extern UCHAR NewExtChanIe;
245 extern UCHAR ExtHtCapIe;
246 #endif // DOT11N_DRAFT3 //
247 #endif // DOT11_N_SUPPORT //
257 extern UCHAR WPA_OUI[];
258 extern UCHAR RSN_OUI[];
259 extern UCHAR WME_INFO_ELEM[];
260 extern UCHAR WME_PARM_ELEM[];
261 extern UCHAR Ccx2QosInfo[];
262 extern UCHAR Ccx2IeInfo[];
263 extern UCHAR RALINK_OUI[];
264 extern UCHAR PowerConstraintIE[];
267 extern UCHAR RateSwitchTable[];
268 extern UCHAR RateSwitchTable11B[];
269 extern UCHAR RateSwitchTable11G[];
270 extern UCHAR RateSwitchTable11BG[];
272 #ifdef DOT11_N_SUPPORT
273 extern UCHAR RateSwitchTable11BGN1S[];
274 extern UCHAR RateSwitchTable11BGN2S[];
275 extern UCHAR RateSwitchTable11BGN2SForABand[];
276 extern UCHAR RateSwitchTable11N1S[];
277 extern UCHAR RateSwitchTable11N2S[];
278 extern UCHAR RateSwitchTable11N2SForABand[];
280 #ifdef CONFIG_STA_SUPPORT
281 extern UCHAR PRE_N_HT_OUI[];
282 #endif // CONFIG_STA_SUPPORT //
283 #endif // DOT11_N_SUPPORT //
285 #define MAXSEQ (0xFFF)
288 typedef struct _ATE_INFO {
294 TXWI_STRUC TxWI; // TXWI
296 UCHAR Addr1[MAC_ADDR_LEN];
297 UCHAR Addr2[MAC_ADDR_LEN];
298 UCHAR Addr3[MAC_ADDR_LEN];
302 UINT32 TxDoneCount; // Tx DMA Done
305 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
306 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
310 CHAR LastSNR0; // last received SNR
311 CHAR LastSNR1; // last received SNR for 2nd antenna
312 CHAR LastRssi0; // last received RSSI
313 CHAR LastRssi1; // last received RSSI for 2nd antenna
314 CHAR LastRssi2; // last received RSSI for 3rd antenna
315 CHAR AvgRssi0; // last 8 frames' average RSSI
316 CHAR AvgRssi1; // last 8 frames' average RSSI
317 CHAR AvgRssi2; // last 8 frames' average RSSI
318 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
319 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
320 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
322 UINT32 NumOfAvgRssiSample;
324 #ifdef RALINK_28xx_QA
327 /* not used in RT2860 */
328 TXINFO_STRUC TxInfo; // TxInfo
330 USHORT HLen; // Header Length
331 USHORT PLen; // Pattern Length
332 UCHAR Header[32]; // Header buffer
333 UCHAR Pattern[32]; // Pattern buffer
334 USHORT DLen; // Data Length
355 //UINT32 Repeat; // Tx Cpu count
356 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
357 #endif // RALINK_28xx_QA //
358 } ATE_INFO, *PATE_INFO;
360 #ifdef RALINK_28xx_QA
361 struct ate_racfghdr {
369 } __attribute__((packed));
370 #endif // RALINK_28xx_QA //
371 #endif // RALINK_ATE //
373 #ifdef DOT11_N_SUPPORT
374 struct reordering_mpdu
376 struct reordering_mpdu *next;
377 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
378 int Sequence; /* sequence number of MPDU */
382 struct reordering_list
384 struct reordering_mpdu *next;
388 struct reordering_mpdu_pool
392 struct reordering_list freelist;
394 #endif // DOT11_N_SUPPORT //
396 typedef struct _RSSI_SAMPLE {
397 CHAR LastRssi0; // last received RSSI
398 CHAR LastRssi1; // last received RSSI
399 CHAR LastRssi2; // last received RSSI
409 // Queue structure and macros
411 typedef struct _QUEUE_ENTRY {
412 struct _QUEUE_ENTRY *Next;
413 } QUEUE_ENTRY, *PQUEUE_ENTRY;
416 typedef struct _QUEUE_HEADER {
420 } QUEUE_HEADER, *PQUEUE_HEADER;
422 #define InitializeQueueHeader(QueueHeader) \
424 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
425 (QueueHeader)->Number = 0; \
428 #define RemoveHeadQueue(QueueHeader) \
429 (QueueHeader)->Head; \
431 PQUEUE_ENTRY pNext; \
432 if ((QueueHeader)->Head != NULL) \
434 pNext = (QueueHeader)->Head->Next; \
435 (QueueHeader)->Head = pNext; \
437 (QueueHeader)->Tail = NULL; \
438 (QueueHeader)->Number--; \
442 #define InsertHeadQueue(QueueHeader, QueueEntry) \
444 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
445 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
446 if ((QueueHeader)->Tail == NULL) \
447 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
448 (QueueHeader)->Number++; \
451 #define InsertTailQueue(QueueHeader, QueueEntry) \
453 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
454 if ((QueueHeader)->Tail) \
455 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
457 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
458 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
459 (QueueHeader)->Number++; \
463 // Macros for flag and ref count operations
465 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
466 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
467 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
468 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
469 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
471 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
472 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
473 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
475 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
476 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
477 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
479 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
480 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
481 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
483 #ifdef CONFIG_STA_SUPPORT
484 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
485 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
486 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
487 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
489 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
490 #endif // CONFIG_STA_SUPPORT //
492 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
493 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
496 #define INC_RING_INDEX(_idx, _RingSize) \
498 (_idx) = (_idx+1) % (_RingSize); \
501 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
503 #define RING_PACKET_INIT(_TxRing, _idx) \
505 _TxRing->Cell[_idx].pNdisPacket = NULL; \
506 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
509 #define TXDT_INIT(_TxD) \
511 NdisZeroMemory(_TxD, TXD_SIZE); \
515 //Set last data segment
516 #define RING_SET_LASTDS(_TxD, _IsSD0) \
518 if (_IsSD0) {_TxD->LastSec0 = 1;} \
519 else {_TxD->LastSec1 = 1;} \
522 // Increase TxTsc value for next transmission
524 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
525 // Should send a special event microsoft defined to request re-key
526 #define INC_TX_TSC(_tsc) \
529 while (++_tsc[i] == 0x0) \
537 #ifdef DOT11_N_SUPPORT
538 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
539 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
541 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
542 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
543 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
544 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
545 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
546 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
547 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
548 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
549 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
550 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
551 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
552 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
555 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
557 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
558 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
559 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
561 #endif // DOT11_N_SUPPORT //
564 // BBP & RF are using indirect access. Before write any value into it.
565 // We have to make sure there is no outstanding command pending via checking busy bit.
567 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
571 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
572 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
573 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
575 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
576 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
579 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
582 case 1: khz = 2412000; break; \
583 case 2: khz = 2417000; break; \
584 case 3: khz = 2422000; break; \
585 case 4: khz = 2427000; break; \
586 case 5: khz = 2432000; break; \
587 case 6: khz = 2437000; break; \
588 case 7: khz = 2442000; break; \
589 case 8: khz = 2447000; break; \
590 case 9: khz = 2452000; break; \
591 case 10: khz = 2457000; break; \
592 case 11: khz = 2462000; break; \
593 case 12: khz = 2467000; break; \
594 case 13: khz = 2472000; break; \
595 case 14: khz = 2484000; break; \
596 case 36: /* UNII */ khz = 5180000; break; \
597 case 40: /* UNII */ khz = 5200000; break; \
598 case 44: /* UNII */ khz = 5220000; break; \
599 case 48: /* UNII */ khz = 5240000; break; \
600 case 52: /* UNII */ khz = 5260000; break; \
601 case 56: /* UNII */ khz = 5280000; break; \
602 case 60: /* UNII */ khz = 5300000; break; \
603 case 64: /* UNII */ khz = 5320000; break; \
604 case 149: /* UNII */ khz = 5745000; break; \
605 case 153: /* UNII */ khz = 5765000; break; \
606 case 157: /* UNII */ khz = 5785000; break; \
607 case 161: /* UNII */ khz = 5805000; break; \
608 case 165: /* UNII */ khz = 5825000; break; \
609 case 100: /* HiperLAN2 */ khz = 5500000; break; \
610 case 104: /* HiperLAN2 */ khz = 5520000; break; \
611 case 108: /* HiperLAN2 */ khz = 5540000; break; \
612 case 112: /* HiperLAN2 */ khz = 5560000; break; \
613 case 116: /* HiperLAN2 */ khz = 5580000; break; \
614 case 120: /* HiperLAN2 */ khz = 5600000; break; \
615 case 124: /* HiperLAN2 */ khz = 5620000; break; \
616 case 128: /* HiperLAN2 */ khz = 5640000; break; \
617 case 132: /* HiperLAN2 */ khz = 5660000; break; \
618 case 136: /* HiperLAN2 */ khz = 5680000; break; \
619 case 140: /* HiperLAN2 */ khz = 5700000; break; \
620 case 34: /* Japan MMAC */ khz = 5170000; break; \
621 case 38: /* Japan MMAC */ khz = 5190000; break; \
622 case 42: /* Japan MMAC */ khz = 5210000; break; \
623 case 46: /* Japan MMAC */ khz = 5230000; break; \
624 case 184: /* Japan */ khz = 4920000; break; \
625 case 188: /* Japan */ khz = 4940000; break; \
626 case 192: /* Japan */ khz = 4960000; break; \
627 case 196: /* Japan */ khz = 4980000; break; \
628 case 208: /* Japan, means J08 */ khz = 5040000; break; \
629 case 212: /* Japan, means J12 */ khz = 5060000; break; \
630 case 216: /* Japan, means J16 */ khz = 5080000; break; \
631 default: khz = 2412000; break; \
635 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
638 case 2412000: ch = 1; break; \
639 case 2417000: ch = 2; break; \
640 case 2422000: ch = 3; break; \
641 case 2427000: ch = 4; break; \
642 case 2432000: ch = 5; break; \
643 case 2437000: ch = 6; break; \
644 case 2442000: ch = 7; break; \
645 case 2447000: ch = 8; break; \
646 case 2452000: ch = 9; break; \
647 case 2457000: ch = 10; break; \
648 case 2462000: ch = 11; break; \
649 case 2467000: ch = 12; break; \
650 case 2472000: ch = 13; break; \
651 case 2484000: ch = 14; break; \
652 case 5180000: ch = 36; /* UNII */ break; \
653 case 5200000: ch = 40; /* UNII */ break; \
654 case 5220000: ch = 44; /* UNII */ break; \
655 case 5240000: ch = 48; /* UNII */ break; \
656 case 5260000: ch = 52; /* UNII */ break; \
657 case 5280000: ch = 56; /* UNII */ break; \
658 case 5300000: ch = 60; /* UNII */ break; \
659 case 5320000: ch = 64; /* UNII */ break; \
660 case 5745000: ch = 149; /* UNII */ break; \
661 case 5765000: ch = 153; /* UNII */ break; \
662 case 5785000: ch = 157; /* UNII */ break; \
663 case 5805000: ch = 161; /* UNII */ break; \
664 case 5825000: ch = 165; /* UNII */ break; \
665 case 5500000: ch = 100; /* HiperLAN2 */ break; \
666 case 5520000: ch = 104; /* HiperLAN2 */ break; \
667 case 5540000: ch = 108; /* HiperLAN2 */ break; \
668 case 5560000: ch = 112; /* HiperLAN2 */ break; \
669 case 5580000: ch = 116; /* HiperLAN2 */ break; \
670 case 5600000: ch = 120; /* HiperLAN2 */ break; \
671 case 5620000: ch = 124; /* HiperLAN2 */ break; \
672 case 5640000: ch = 128; /* HiperLAN2 */ break; \
673 case 5660000: ch = 132; /* HiperLAN2 */ break; \
674 case 5680000: ch = 136; /* HiperLAN2 */ break; \
675 case 5700000: ch = 140; /* HiperLAN2 */ break; \
676 case 5170000: ch = 34; /* Japan MMAC */ break; \
677 case 5190000: ch = 38; /* Japan MMAC */ break; \
678 case 5210000: ch = 42; /* Japan MMAC */ break; \
679 case 5230000: ch = 46; /* Japan MMAC */ break; \
680 case 4920000: ch = 184; /* Japan */ break; \
681 case 4940000: ch = 188; /* Japan */ break; \
682 case 4960000: ch = 192; /* Japan */ break; \
683 case 4980000: ch = 196; /* Japan */ break; \
684 case 5040000: ch = 208; /* Japan, means J08 */ break; \
685 case 5060000: ch = 212; /* Japan, means J12 */ break; \
686 case 5080000: ch = 216; /* Japan, means J16 */ break; \
687 default: ch = 1; break; \
692 // Common fragment list structure - Identical to the scatter gather frag list structure
694 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
695 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
696 #define NIC_MAX_PHYS_BUF_COUNT 8
698 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
702 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
705 typedef struct _RTMP_SCATTER_GATHER_LIST {
706 ULONG NumberOfElements;
708 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
709 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
712 // Some utility macros
715 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
719 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
722 #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))))
724 #define INC_COUNTER64(Val) (Val.QuadPart++)
726 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
727 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
728 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
729 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
731 // Check LEAP & CCKM flags
732 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
733 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
735 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
736 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
738 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
740 _pExtraLlcSnapEncap = SNAP_802_1H; \
741 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
742 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
744 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
749 _pExtraLlcSnapEncap = NULL; \
753 // New Define for new Tx Path.
754 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
756 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
758 _pExtraLlcSnapEncap = SNAP_802_1H; \
759 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
760 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
762 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
767 _pExtraLlcSnapEncap = NULL; \
772 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
774 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
775 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
776 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
779 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
780 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
781 // else remove the LLC/SNAP field from the result Ethernet frame
782 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
784 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
785 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
786 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
790 _pRemovedLLCSNAP = NULL; \
791 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
792 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
794 PUCHAR pProto = _pData + 6; \
796 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
797 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
799 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
800 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
801 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
805 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
806 _pRemovedLLCSNAP = _pData; \
807 _DataSize -= LENGTH_802_1_H; \
808 _pData += LENGTH_802_1_H; \
813 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
814 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
815 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
819 #define SWITCH_AB( _pAA, _pBB) \
827 // Enqueue this frame to MLME engine
828 // We need to enqueue the whole frame because MLME need to pass data type
829 // information from 802.11 header
831 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
833 UINT32 High32TSF=0, Low32TSF=0; \
834 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
838 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
839 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
841 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
842 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
845 // Check if it is Japan W53(ch52,56,60,64) channel.
847 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
849 #ifdef CONFIG_STA_SUPPORT
850 #define STA_PORT_SECURED(_pAd) \
852 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
853 NdisAcquireSpinLock(&_pAd->MacTabLock); \
854 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
855 NdisReleaseSpinLock(&_pAd->MacTabLock); \
857 #endif // CONFIG_STA_SUPPORT //
861 // Register set pair for initialzation register set definition
863 typedef struct _RTMP_REG_PAIR
867 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
869 typedef struct _REG_PAIR
873 } REG_PAIR, *PREG_PAIR;
876 // Register set pair for initialzation register set definition
878 typedef struct _RTMP_RF_REGS
885 } RTMP_RF_REGS, *PRTMP_RF_REGS;
887 typedef struct _FREQUENCY_ITEM {
892 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
895 // Data buffer for DMA operation, the buffer must be contiguous physical memory
896 // Both DMA to / from CPU use the same structure.
898 typedef struct _RTMP_DMABUF
901 PVOID AllocVa; // TxBuf virtual address
902 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
903 } RTMP_DMABUF, *PRTMP_DMABUF;
906 typedef union _HEADER_802_11_SEQ{
919 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
922 // Data buffer for DMA operation, the buffer must be contiguous physical memory
923 // Both DMA to / from CPU use the same structure.
925 typedef struct _RTMP_REORDERBUF
928 PVOID AllocVa; // TxBuf virtual address
929 UCHAR Header802_3[14];
930 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
937 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
940 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
941 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
942 // which won't be released, driver has to wait until upper layer return the packet
943 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
944 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
945 // which driver should ACK upper layer when the tx is physically done or failed.
947 typedef struct _RTMP_DMACB
949 ULONG AllocSize; // Control block size
950 PVOID AllocVa; // Control block virtual address
951 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
952 PNDIS_PACKET pNdisPacket;
953 PNDIS_PACKET pNextNdisPacket;
955 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
956 } RTMP_DMACB, *PRTMP_DMACB;
958 typedef struct _RTMP_TX_BUF
962 ULONG AllocSize; // Control block size
963 PVOID AllocVa; // Control block virtual address
964 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
965 } RTMP_TXBUF, *PRTMP_TXBUF;
967 typedef struct _RTMP_RX_BUF
971 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
972 } RTMP_RXBUF, *PRTMP_RXBUF;
973 typedef struct _RTMP_TX_RING
975 RTMP_DMACB Cell[TX_RING_SIZE];
978 UINT32 TxSwFreeIdx; // software next free tx index
979 } RTMP_TX_RING, *PRTMP_TX_RING;
981 typedef struct _RTMP_RX_RING
983 RTMP_DMACB Cell[RX_RING_SIZE];
986 INT32 RxSwReadIdx; // software next read index
987 } RTMP_RX_RING, *PRTMP_RX_RING;
989 typedef struct _RTMP_MGMT_RING
991 RTMP_DMACB Cell[MGMT_RING_SIZE];
994 UINT32 TxSwFreeIdx; // software next free tx index
995 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
998 // Statistic counter structure
1000 typedef struct _COUNTER_802_3
1003 ULONG GoodTransmits;
1010 ULONG RcvAlignmentErrors;
1012 ULONG MoreCollisions;
1014 } COUNTER_802_3, *PCOUNTER_802_3;
1016 typedef struct _COUNTER_802_11 {
1018 LARGE_INTEGER LastTransmittedFragmentCount;
1019 LARGE_INTEGER TransmittedFragmentCount;
1020 LARGE_INTEGER MulticastTransmittedFrameCount;
1021 LARGE_INTEGER FailedCount;
1022 LARGE_INTEGER RetryCount;
1023 LARGE_INTEGER MultipleRetryCount;
1024 LARGE_INTEGER RTSSuccessCount;
1025 LARGE_INTEGER RTSFailureCount;
1026 LARGE_INTEGER ACKFailureCount;
1027 LARGE_INTEGER FrameDuplicateCount;
1028 LARGE_INTEGER ReceivedFragmentCount;
1029 LARGE_INTEGER MulticastReceivedFrameCount;
1030 LARGE_INTEGER FCSErrorCount;
1031 } COUNTER_802_11, *PCOUNTER_802_11;
1033 typedef struct _COUNTER_RALINK {
1034 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1035 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1036 ULONG BeenDisassociatedCount;
1037 ULONG BadCQIAutoRecoveryCount;
1038 ULONG PoorCQIRoamingCount;
1039 ULONG MgmtRingFullCount;
1040 ULONG RxCountSinceLastNULL;
1042 ULONG RxRingErrCount;
1044 ULONG TxRingErrCount;
1045 LARGE_INTEGER RealFcsErrCount;
1046 ULONG PendingNdisPacketCount;
1048 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1049 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1050 UINT32 OneSecTxDoneCount;
1051 ULONG OneSecRxCount;
1052 UINT32 OneSecTxAggregationCount;
1053 UINT32 OneSecRxAggregationCount;
1055 UINT32 OneSecFrameDuplicateCount;
1058 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1061 UINT32 OneSecTxNoRetryOkCount;
1062 UINT32 OneSecTxRetryOkCount;
1063 UINT32 OneSecTxFailCount;
1064 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1065 UINT32 OneSecRxOkCnt; // RX without error
1066 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1067 UINT32 OneSecRxFcsErrCnt; // CRC error
1068 UINT32 OneSecBeaconSentCnt;
1069 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1070 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1073 ULONG TxNonAggCount;
1074 ULONG TxAgg1MPDUCount;
1075 ULONG TxAgg2MPDUCount;
1076 ULONG TxAgg3MPDUCount;
1077 ULONG TxAgg4MPDUCount;
1078 ULONG TxAgg5MPDUCount;
1079 ULONG TxAgg6MPDUCount;
1080 ULONG TxAgg7MPDUCount;
1081 ULONG TxAgg8MPDUCount;
1082 ULONG TxAgg9MPDUCount;
1083 ULONG TxAgg10MPDUCount;
1084 ULONG TxAgg11MPDUCount;
1085 ULONG TxAgg12MPDUCount;
1086 ULONG TxAgg13MPDUCount;
1087 ULONG TxAgg14MPDUCount;
1088 ULONG TxAgg15MPDUCount;
1089 ULONG TxAgg16MPDUCount;
1091 LARGE_INTEGER TransmittedOctetsInAMSDU;
1092 LARGE_INTEGER TransmittedAMSDUCount;
1093 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1094 LARGE_INTEGER ReceivedAMSDUCount;
1095 LARGE_INTEGER TransmittedAMPDUCount;
1096 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1097 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1098 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1099 } COUNTER_RALINK, *PCOUNTER_RALINK;
1101 typedef struct _PID_COUNTER {
1102 ULONG TxAckRequiredCount; // CRC error
1104 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1105 ULONG LastSuccessRate;
1106 } PID_COUNTER, *PPID_COUNTER;
1108 typedef struct _COUNTER_DRS {
1109 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1110 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1111 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1112 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1113 ULONG CurrTxRateStableTime; // # of second in current TX rate
1114 BOOLEAN fNoisyEnvironment;
1115 BOOLEAN fLastSecAccordingRSSI;
1116 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1117 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1118 ULONG LastTxOkCount;
1119 } COUNTER_DRS, *PCOUNTER_DRS;
1122 // Arcfour Structure Added by PaulWu
1124 typedef struct _ARCFOUR
1129 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1131 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1132 typedef struct _RECEIVE_SETTING {
1133 #ifdef RT_BIG_ENDIAN
1137 USHORT STBC:2; //SPACE
1139 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1140 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1142 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1143 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1145 USHORT STBC:2; //SPACE
1150 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1152 // Shared key data structure
1153 typedef struct _WEP_KEY {
1154 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1155 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1156 } WEP_KEY, *PWEP_KEY;
1158 typedef struct _CIPHER_KEY {
1159 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1160 UCHAR RxMic[8]; // make alignment
1162 UCHAR TxTsc[6]; // 48bit TSC value
1163 UCHAR RxTsc[6]; // 48bit TSC value
1164 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1166 #ifdef CONFIG_STA_SUPPORT
1168 #endif // CONFIG_STA_SUPPORT //
1169 // Key length for each key, 0: entry is invalid
1170 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1171 } CIPHER_KEY, *PCIPHER_KEY;
1173 typedef struct _BBP_TUNING_STRUCT {
1175 UCHAR FalseCcaCountUpperBound; // 100 per sec
1176 UCHAR FalseCcaCountLowerBound; // 10 per sec
1177 UCHAR R17LowerBound; // specified in E2PROM
1178 UCHAR R17UpperBound; // 0x68 according to David Tung
1179 UCHAR CurrentR17Value;
1180 } BBP_TUNING, *PBBP_TUNING;
1182 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1183 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1184 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1185 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1186 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1187 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1188 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1189 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1190 SHORT Pair1LastAvgRssi; //
1191 SHORT Pair2LastAvgRssi; //
1192 ULONG RcvPktNumWhenEvaluate;
1193 BOOLEAN FirstPktArrivedWhenEvaluate;
1194 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1195 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1197 typedef struct _LEAP_AUTH_INFO {
1198 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1199 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1201 UCHAR UserName[256]; //LEAP, User name
1203 UCHAR Password[256]; //LEAP, User Password
1205 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1208 UCHAR Addr[MAC_ADDR_LEN];
1209 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1210 //00 02-Authentication timeout
1211 //00 03-Challenge from AP failed
1212 //00 04-Challenge to AP failed
1214 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1218 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1219 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1225 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1228 // Receive Tuple Cache Format
1230 typedef struct _TUPLE_CACHE {
1232 UCHAR MacAddress[MAC_ADDR_LEN];
1235 } TUPLE_CACHE, *PTUPLE_CACHE;
1238 // Fragment Frame structure
1240 typedef struct _FRAGMENT_FRAME {
1241 PNDIS_PACKET pFragPacket;
1245 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1246 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1250 // Packet information for NdisQueryPacket
1252 typedef struct _PACKET_INFO {
1253 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1254 UINT BufferCount ; // Number of Buffer descriptor chained
1255 UINT TotalPacketLength ; // Self explained
1256 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1257 } PACKET_INFO, *PPACKET_INFO;
1260 // Tkip Key structure which RC4 key & MIC calculation
1262 typedef struct _TKIP_KEY_INFO {
1263 UINT nBytesInM; // # bytes in M for MICKEY
1266 ULONG K0; // for MICKEY Low
1267 ULONG K1; // for MICKEY Hig
1268 ULONG L; // Current state for MICKEY
1269 ULONG R; // Current state for MICKEY
1270 ULONG M; // Message accumulator for MICKEY
1273 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1276 // Private / Misc data, counters for driver internal use
1278 typedef struct __PRIVATE_STRUC {
1279 UINT SystemResetCnt; // System reset counter
1280 UINT TxRingFullCnt; // Tx ring full occurrance number
1281 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1282 // Variables for WEP encryption / decryption in rtmp_wep.c
1284 ARCFOURCONTEXT WEPCONTEXT;
1288 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1290 // structure to tune BBP R66 (BBP TUNING)
1291 typedef struct _BBP_R66_TUNING {
1293 USHORT FalseCcaLowerThreshold; // default 100
1294 USHORT FalseCcaUpperThreshold; // default 512
1296 UCHAR R66CurrentValue;
1297 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1298 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1300 // structure to store channel TX power
1301 typedef struct _CHANNEL_TX_POWER {
1302 USHORT RemainingTimeForUse; //unit: sec
1304 #ifdef DOT11N_DRAFT3
1305 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1306 #endif // DOT11N_DRAFT3 //
1311 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1313 // structure to store 802.11j channel TX power
1314 typedef struct _CHANNEL_11J_TX_POWER {
1316 UCHAR BW; // BW_10 or BW_20
1319 USHORT RemainingTimeForUse; //unit: sec
1320 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1322 typedef enum _ABGBAND_STATE_ {
1328 typedef struct _MLME_STRUCT {
1329 #ifdef CONFIG_STA_SUPPORT
1330 // STA state machines
1331 STATE_MACHINE CntlMachine;
1332 STATE_MACHINE AssocMachine;
1333 STATE_MACHINE AuthMachine;
1334 STATE_MACHINE AuthRspMachine;
1335 STATE_MACHINE SyncMachine;
1336 STATE_MACHINE WpaPskMachine;
1337 STATE_MACHINE LeapMachine;
1338 STATE_MACHINE AironetMachine;
1339 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1340 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1341 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1342 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1343 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1344 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1345 #endif // CONFIG_STA_SUPPORT //
1346 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1348 STATE_MACHINE ActMachine;
1351 #ifdef QOS_DLS_SUPPORT
1352 STATE_MACHINE DlsMachine;
1353 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1354 #endif // QOS_DLS_SUPPORT //
1359 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1360 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1361 ULONG LastSendNULLpsmTime;
1364 NDIS_SPIN_LOCK TaskLock;
1369 RALINK_TIMER_STRUCT PeriodicTimer;
1370 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1371 RALINK_TIMER_STRUCT LinkDownTimer;
1372 RALINK_TIMER_STRUCT LinkUpTimer;
1373 ULONG PeriodicRound;
1374 ULONG OneSecPeriodicRound;
1377 BOOLEAN bLowThroughput;
1378 BOOLEAN bEnableAutoAntennaCheck;
1379 RALINK_TIMER_STRUCT RxAntEvalTimer;
1382 UCHAR CaliBW40RfR24;
1383 UCHAR CaliBW20RfR24;
1386 } MLME_STRUCT, *PMLME_STRUCT;
1388 // structure for radar detection and channel switch
1389 typedef struct _RADAR_DETECT_STRUCT {
1390 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1391 UCHAR CSCount; //Channel switch counter
1392 UCHAR CSPeriod; //Channel switch period (beacon count)
1393 UCHAR RDCount; //Radar detection counter
1394 UCHAR RDMode; //Radar Detection mode
1395 UCHAR RDDurRegion; //Radar detection duration region
1402 ULONG InServiceMonitorCount; // unit: sec
1403 UINT8 DfsSessionTime;
1406 UINT8 LongPulseRadarTh;
1407 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1409 #ifdef CARRIER_DETECTION_SUPPORT
1410 typedef enum CD_STATE_n
1417 typedef struct CARRIER_DETECTION_s
1420 UINT8 CDSessionTime;
1423 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1424 #endif // CARRIER_DETECTION_SUPPORT //
1426 typedef enum _REC_BLOCKACK_STATUS
1430 Recipient_HandleRes,
1432 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1434 typedef enum _ORI_BLOCKACK_STATUS
1440 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1442 #ifdef DOT11_N_SUPPORT
1443 typedef struct _BA_ORI_ENTRY{
1448 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1450 USHORT TimeOutValue;
1451 ORI_BLOCKACK_STATUS ORI_BA_Status;
1452 RALINK_TIMER_STRUCT ORIBATimer;
1454 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1456 typedef struct _BA_REC_ENTRY {
1459 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1461 //UCHAR Curindidx; // the head in the RX reordering buffer
1463 // USHORT LastIndSeqAtTimer;
1464 USHORT TimeOutValue;
1465 RALINK_TIMER_STRUCT RECBATimer;
1466 ULONG LastIndSeqAtTimer;
1469 REC_BLOCKACK_STATUS REC_BA_Status;
1470 // UCHAR RxBufIdxUsed;
1471 // corresponding virtual address for RX reordering packet storage.
1472 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1473 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1474 // struct _BA_REC_ENTRY *pNext;
1476 struct reordering_list list;
1477 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1481 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1482 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1483 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1484 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1485 } BA_TABLE, *PBA_TABLE;
1487 //For QureyBATableOID use;
1488 typedef struct PACKED _OID_BA_REC_ENTRY{
1489 UCHAR MACAddr[MAC_ADDR_LEN];
1490 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1493 REC_BLOCKACK_STATUS REC_BA_Status[8];
1494 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1496 //For QureyBATableOID use;
1497 typedef struct PACKED _OID_BA_ORI_ENTRY{
1498 UCHAR MACAddr[MAC_ADDR_LEN];
1499 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
1502 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1503 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1505 typedef struct _QUERYBA_TABLE{
1506 OID_BA_ORI_ENTRY BAOriEntry[32];
1507 OID_BA_REC_ENTRY BARecEntry[32];
1508 UCHAR OriNum;// Number of below BAOriEntry
1509 UCHAR RecNum;// Number of below BARecEntry
1510 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1512 typedef union _BACAP_STRUC {
1513 #ifdef RT_BIG_ENDIAN
1516 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1517 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1518 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1519 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1520 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1521 UINT32 MpduDensity:3;
1522 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1523 UINT32 AutoBA:1; // automatically BA
1524 UINT32 TxBAWinLimit:8;
1525 UINT32 RxBAWinLimit:8;
1529 UINT32 RxBAWinLimit:8;
1530 UINT32 TxBAWinLimit:8;
1531 UINT32 AutoBA:1; // automatically BA
1532 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1533 UINT32 MpduDensity:3;
1534 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1535 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1536 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1537 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1538 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1543 } BACAP_STRUC, *PBACAP_STRUC;
1544 #endif // DOT11_N_SUPPORT //
1546 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1547 typedef struct _IOT_STRUC {
1549 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1550 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1551 ULONG OneSecInWindowCount;
1552 ULONG OneSecFrameDuplicateCount;
1553 ULONG OneSecOutWindowCount;
1558 BOOLEAN bRTSLongProtOn;
1559 #ifdef CONFIG_STA_SUPPORT
1560 BOOLEAN bLastAtheros;
1561 BOOLEAN bCurrentAtheros;
1562 BOOLEAN bNowAtherosBurstOn;
1563 BOOLEAN bNextDisableRxBA;
1565 #endif // CONFIG_STA_SUPPORT //
1566 } IOT_STRUC, *PIOT_STRUC;
1568 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1569 typedef union _REG_TRANSMIT_SETTING {
1570 #ifdef RT_BIG_ENDIAN
1576 UINT32 STBC:1; //SPACE
1578 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1579 UINT32 TxBF:1; // 3*3
1581 //UINT32 MCS:7; // MCS
1587 //UINT32 MCS:7; // MCS
1590 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1592 UINT32 STBC:1; //SPACE
1600 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1602 typedef union _DESIRED_TRANSMIT_SETTING {
1603 #ifdef RT_BIG_ENDIAN
1606 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1608 USHORT MCS:7; // MCS
1612 USHORT MCS:7; // MCS
1614 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1619 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1622 BOOLEAN IsRecipient;
1623 UCHAR MACAddr[MAC_ADDR_LEN];
1627 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1628 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1631 // Multiple SSID structure
1633 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1634 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1636 /* clear bcmc TIM bit */
1637 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1638 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1640 /* set bcmc TIM bit */
1641 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1642 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1644 /* clear a station PS TIM bit */
1645 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1646 { UCHAR tim_offset = wcid >> 3; \
1647 UCHAR bit_offset = wcid & 0x7; \
1648 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1650 /* set a station PS TIM bit */
1651 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1652 { UCHAR tim_offset = wcid >> 3; \
1653 UCHAR bit_offset = wcid & 0x7; \
1654 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1657 #define BEACON_BITMAP_MASK 0xff
1658 typedef struct _BEACON_SYNC_STRUCT_
1660 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1661 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1662 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1663 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1664 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1665 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1666 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1667 }BEACON_SYNC_STRUCT;
1670 typedef struct _MULTISSID_STRUCT {
1671 UCHAR Bssid[MAC_ADDR_LEN];
1673 CHAR Ssid[MAX_LEN_OF_SSID];
1674 USHORT CapabilityInfo;
1678 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1679 NDIS_802_11_WEP_STATUS WepStatus;
1680 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1681 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1685 ULONG ReceivedByteCount;
1686 ULONG TransmittedByteCount;
1690 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1691 RT_HT_PHY_INFO DesiredHtPhyInfo;
1692 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1693 BOOLEAN bAutoTxRateSwitch;
1695 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1698 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1699 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1700 UCHAR DesiredRatesIndex;
1701 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1703 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1704 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1705 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1715 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1716 UCHAR BANClass3Data;
1717 ULONG IsolateInterStaTraffic;
1720 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1723 UCHAR TimIELocationInBeacon;
1724 UCHAR CapabilityInfoLocationInBeacon;
1725 // outgoing BEACON frame buffer and corresponding TXWI
1726 // PTXWI_STRUC BeaconTxWI; //
1727 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1730 UINT16 StationKeepAliveTime; // unit: second
1733 USHORT VLAN_Priority;
1735 RT_802_11_ACL AccessControlList;
1738 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1739 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1741 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1743 // For 802.1x daemon setting per BSS
1744 UCHAR radius_srv_num;
1745 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1748 unsigned int mylinkid;
1752 UINT32 RcvdConflictSsidCount;
1753 UINT32 RcvdSpoofedAssocRespCount;
1754 UINT32 RcvdSpoofedReassocRespCount;
1755 UINT32 RcvdSpoofedProbeRespCount;
1756 UINT32 RcvdSpoofedBeaconCount;
1757 UINT32 RcvdSpoofedDisassocCount;
1758 UINT32 RcvdSpoofedAuthCount;
1759 UINT32 RcvdSpoofedDeauthCount;
1760 UINT32 RcvdSpoofedUnknownMgmtCount;
1761 UINT32 RcvdReplayAttackCount;
1763 CHAR RssiOfRcvdConflictSsid;
1764 CHAR RssiOfRcvdSpoofedAssocResp;
1765 CHAR RssiOfRcvdSpoofedReassocResp;
1766 CHAR RssiOfRcvdSpoofedProbeResp;
1767 CHAR RssiOfRcvdSpoofedBeacon;
1768 CHAR RssiOfRcvdSpoofedDisassoc;
1769 CHAR RssiOfRcvdSpoofedAuth;
1770 CHAR RssiOfRcvdSpoofedDeauth;
1771 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1772 CHAR RssiOfRcvdReplayAttack;
1776 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1780 #ifdef DOT11N_DRAFT3
1781 typedef enum _BSS2040COEXIST_FLAG{
1782 BSS_2040_COEXIST_DISABLE = 0,
1783 BSS_2040_COEXIST_TIMER_FIRED = 1,
1784 BSS_2040_COEXIST_INFO_SYNC = 2,
1785 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1786 }BSS2040COEXIST_FLAG;
1787 #endif // DOT11N_DRAFT3 //
1789 // configuration common to OPMODE_AP as well as OPMODE_STA
1790 typedef struct _COMMON_CONFIG {
1792 BOOLEAN bCountryFlag;
1793 UCHAR CountryCode[3];
1795 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1796 UCHAR CountryRegionForABand; // Enum of country region for A band
1797 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1798 USHORT Dsifs; // in units of usec
1799 ULONG PacketFilter; // Packet filter for receiving
1801 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1802 UCHAR SsidLen; // the actual ssid length in used
1803 UCHAR LastSsidLen; // the actual ssid length in used
1804 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1805 UCHAR LastBssid[MAC_ADDR_LEN];
1807 UCHAR Bssid[MAC_ADDR_LEN];
1808 USHORT BeaconPeriod;
1810 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1812 #if 0 // move to STA_ADMIN_CONFIG
1815 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1816 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1817 NDIS_802_11_WEP_STATUS WepStatus;
1818 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1820 // Add to support different cipher suite for WPA2/WPA mode
1821 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1822 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1823 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1824 USHORT RsnCapability;
1826 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1829 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1831 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1833 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1834 UCHAR MaxDesiredRate;
1835 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1837 ULONG BasicRateBitmap; // backup basic ratebitmap
1839 BOOLEAN bAPSDCapable;
1840 BOOLEAN bInServicePeriod;
1845 BOOLEAN bNeedSendTriggerFrame;
1846 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1847 ULONG TriggerTimerCount;
1849 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1850 // move to MULTISSID_STRUCT for MBSS
1851 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1852 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1853 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1854 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1855 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1856 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1857 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1858 //BOOLEAN bAutoTxRateSwitch;
1859 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1860 UCHAR RtsRate; // RATE_xxx
1861 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1862 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1863 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1865 USHORT RtsThreshold; // in unit of BYTE
1866 USHORT FragmentThreshold; // in unit of BYTE
1868 UCHAR TxPower; // in unit of mW
1869 ULONG TxPowerPercentage; // 0~100 %
1870 ULONG TxPowerDefault; // keep for TxPowerPercentage
1872 #ifdef DOT11_N_SUPPORT
1873 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1874 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1875 #endif // DOT11_N_SUPPORT //
1876 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1877 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1878 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1879 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1880 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1881 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1882 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1883 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1884 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1885 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1887 #ifdef DOT11_N_SUPPORT
1889 #endif // DOT11_N_SUPPORT //
1890 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1891 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1892 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1893 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1894 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1895 #ifdef CONFIG_STA_SUPPORT
1896 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1897 #endif // CONFIG_STA_SUPPORT //
1898 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1899 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1900 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1901 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1902 ULONG OpStatusFlags;
1904 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1905 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1907 // IEEE802.11H--DFS.
1908 RADAR_DETECT_STRUCT RadarDetect;
1910 #ifdef CARRIER_DETECTION_SUPPORT
1911 CARRIER_DETECTION CarrierDetect;
1912 #endif // CARRIER_DETECTION_SUPPORT //
1914 #ifdef DOT11_N_SUPPORT
1916 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1917 //RT_HT_CAPABILITY SupportedHtPhy;
1918 RT_HT_CAPABILITY DesiredHtPhy;
1919 HT_CAPABILITY_IE HtCapability;
1920 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1921 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1922 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1923 NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present
1925 #ifdef DOT11N_DRAFT3
1926 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1927 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1929 //This IE is used for 20/40 BSS Coexistence.
1930 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1931 // ====== 11n D3.0 =======================>
1932 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1933 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1934 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1935 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1936 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1937 USHORT Dot11BssWidthChanTranDelayFactor;
1938 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1940 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1941 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1943 NDIS_SPIN_LOCK TriggerEventTabLock;
1944 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1945 BSS_2040_COEXIST_IE BSSCoexist2040;
1946 TRIGGER_EVENT_TAB TriggerEventTab;
1947 UCHAR ChannelListIdx;
1948 // <====== 11n D3.0 =======================
1949 BOOLEAN bOverlapScanning;
1950 #endif // DOT11N_DRAFT3 //
1953 BOOLEAN bMIMOPSEnable;
1955 BOOLEAN bDisableReordering;
1956 BOOLEAN bForty_Mhz_Intolerant;
1957 BOOLEAN bExtChannelSwitchAnnouncement;
1958 BOOLEAN bRcvBSSWidthTriggerEvents;
1959 ULONG LastRcvBSSWidthTriggerEventsTime;
1962 #endif // DOT11_N_SUPPORT //
1964 // Enable wireless event
1965 BOOLEAN bWirelessEvent;
1966 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1968 // Tx & Rx Stream number selection
1972 // transmit phy mode, trasmit rate for Multicast.
1973 #ifdef MCAST_RATE_SPECIFIC
1974 UCHAR McastTransmitMcs;
1975 UCHAR McastTransmitPhyMode;
1976 #endif // MCAST_RATE_SPECIFIC //
1978 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1981 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1982 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1983 RT_HT_CAPABILITY SupportedHtPhy;
1984 ULONG MaxPktOneTxBulk;
1988 BEACON_SYNC_STRUCT *pBeaconSync;
1989 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1990 UINT32 BeaconAdjust;
1991 UINT32 BeaconFactor;
1992 UINT32 BeaconRemain;
1996 NDIS_SPIN_LOCK MeasureReqTabLock;
1997 PMEASURE_REQ_TAB pMeasureReqTab;
1999 NDIS_SPIN_LOCK TpcReqTabLock;
2000 PTPC_REQ_TAB pTpcReqTab;
2002 // transmit phy mode, trasmit rate for Multicast.
2003 #ifdef MCAST_RATE_SPECIFIC
2004 HTTRANSMIT_SETTING MCastPhyMode;
2005 #endif // MCAST_RATE_SPECIFIC //
2008 UINT16 DefineMaxTxPwr;
2009 #endif // SINGLE_SKU //
2012 } COMMON_CONFIG, *PCOMMON_CONFIG;
2015 #ifdef CONFIG_STA_SUPPORT
2016 /* Modified by Wu Xi-Kun 4/21/2006 */
2017 // STA configuration and status
2018 typedef struct _STA_ADMIN_CONFIG {
2020 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2021 // the user intended configuration, but not necessary fully equal to the final
2022 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2023 // AP or IBSS holder).
2024 // Once initialized, user configuration can only be changed via OID_xxx
2025 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2026 USHORT AtimWin; // used when starting a new IBSS
2029 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2030 // the user intended configuration, and should be always applied to the final
2031 // settings in ACTIVE BSS without compromising with the BSS holder.
2032 // Once initialized, user configuration can only be changed via OID_xxx
2034 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2035 USHORT DefaultListenCount; // default listen count;
2036 ULONG WindowsPowerMode; // Power mode for AC power
2037 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2038 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2039 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2040 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2042 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2043 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2044 USHORT DisassocReason;
2045 UCHAR DisassocSta[MAC_ADDR_LEN];
2046 USHORT DeauthReason;
2047 UCHAR DeauthSta[MAC_ADDR_LEN];
2048 USHORT AuthFailReason;
2049 UCHAR AuthFailSta[MAC_ADDR_LEN];
2051 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2052 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2053 NDIS_802_11_WEP_STATUS WepStatus;
2054 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2056 // Add to support different cipher suite for WPA2/WPA mode
2057 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2058 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2059 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2060 USHORT RsnCapability;
2062 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2064 UCHAR PMK[32]; // WPA PSK mode PMK
2065 UCHAR PTK[64]; // WPA PSK mode PTK
2066 UCHAR GTK[32]; // GTK from authenticator
2067 BSSID_INFO SavedPMK[PMKID_NO];
2068 UINT SavedPMKNum; // Saved PMKID number
2073 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2076 // For WPA countermeasures
2077 ULONG LastMicErrorTime; // record last MIC error time
2078 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2079 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2080 // For WPA-PSK supplicant state
2081 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2082 UCHAR ReplayCounter[8];
2083 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2084 UCHAR SNonce[32]; // SNonce for WPA-PSK
2086 UCHAR LastSNR0; // last received BEACON's SNR
2087 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2088 RSSI_SAMPLE RssiSample;
2089 ULONG NumOfAvgRssiSample;
2091 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2092 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2093 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2094 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2096 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2097 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2098 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2099 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2100 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2101 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2102 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2105 // New for WPA, windows want us to to keep association information and
2106 // Fixed IEs from last association response
2107 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2108 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2109 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2110 USHORT ResVarIELen; // Length of next VIE include EID & Length
2111 UCHAR ResVarIEs[MAX_VIE_LEN];
2114 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2116 // New variables used for CCX 1.0
2118 BOOLEAN bCkipCmicOn;
2120 UCHAR GIV[3]; //for CCX iv
2125 LEAP_AUTH_INFO LeapAuthInfo;
2127 UCHAR NetworkChallenge[8];
2128 UCHAR NetworkChallengeResponse[24];
2129 UCHAR PeerChallenge[8];
2131 UCHAR PeerChallengeResponse[24];
2132 UCHAR SessionKey[16]; //Network session keys (NSK)
2133 RALINK_TIMER_STRUCT LeapAuthTimer;
2134 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2136 // New control flags for CCX
2137 CCX_CONTROL CCXControl; // Master administration state
2138 BOOLEAN CCXEnable; // Actual CCX state
2139 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2140 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2141 UCHAR CCXReqType; // Current processing CCX request type
2142 BSS_TABLE CCXBssTab; // BSS Table
2143 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2144 USHORT FrameReportLen; // Current Frame report length
2145 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2146 USHORT RPIDensity[8]; // Array for RPI density collection
2147 // Start address of each BSS table within FrameReportBuf
2148 // It's important to update the RxPower of the corresponding Bss
2149 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2150 USHORT BeaconToken; // Token for beacon report
2151 ULONG LastBssIndex; // Most current reported Bss index
2152 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2153 UCHAR RMReqCnt; // Number of measurement request saved.
2154 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2155 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2156 // It must be the same channel with maximum duration
2157 USHORT ParallelDuration; // Maximum duration for parallel measurement
2158 UCHAR ParallelChannel; // Only one channel with parallel measurement
2159 USHORT IAPPToken; // IAPP dialog token
2160 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2161 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2162 // Hack for channel load and noise histogram parameters
2163 UCHAR NHFactor; // Parameter for Noise histogram
2164 UCHAR CLFactor; // Parameter for channel load
2166 UCHAR KRK[16]; //Key Refresh Key.
2167 UCHAR BTK[32]; //Base Transient Key
2168 BOOLEAN CCKMLinkUpFlag;
2169 ULONG CCKMRN; //(Re)Association request number.
2170 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2171 UCHAR AironetCellPowerLimit; //in dBm
2172 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2173 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2174 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2175 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2176 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2177 USHORT CCXAdjacentAPChannel;
2178 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2180 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2181 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2183 UCHAR DtimCount; // 0.. DtimPeriod-1
2184 UCHAR DtimPeriod; // default = 3
2186 #ifdef QOS_DLS_SUPPORT
2187 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2188 UCHAR DlsReplayCounter[8];
2189 #endif // QOS_DLS_SUPPORT //
2190 ////////////////////////////////////////////////////////////////////////////////////////
2191 // This is only for WHQL test.
2193 ////////////////////////////////////////////////////////////////////////////////////////
2195 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2197 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2198 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2200 #ifdef WPA_SUPPLICANT_SUPPORT
2202 BOOLEAN IEEE8021x_required_keys;
2203 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2204 UCHAR DesireSharedKeyId;
2206 // 0: driver ignores wpa_supplicant
2207 // 1: wpa_supplicant initiates scanning and AP selection
2208 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2209 UCHAR WpaSupplicantUP;
2210 UCHAR WpaSupplicantScanCount;
2211 #endif // WPA_SUPPLICANT_SUPPORT //
2216 BOOLEAN bTGnWifiTest;
2217 BOOLEAN bScanReqIsFromWebUI;
2219 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2220 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2221 RT_HT_PHY_INFO DesiredHtPhyInfo;
2222 BOOLEAN bAutoTxRateSwitch;
2225 #ifdef EXT_BUILD_CHANNEL_LIST
2226 UCHAR IEEE80211dClientMode;
2227 UCHAR StaOriCountryCode[3];
2228 UCHAR StaOriGeography;
2229 #endif // EXT_BUILD_CHANNEL_LIST //
2230 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2232 // This data structure keep the current active BSS/IBSS's configuration that this STA
2233 // had agreed upon joining the network. Which means these parameters are usually decided
2234 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2235 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2236 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2237 // the current active settings.
2238 typedef struct _STA_ACTIVE_CONFIG {
2240 USHORT AtimWin; // in kusec; IBSS parameter set element
2241 USHORT CapabilityInfo;
2242 USHORT CfpMaxDuration;
2245 // Copy supported rate from desired AP's beacon. We are trying to match
2246 // AP's supported and extended rate settings.
2247 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2248 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2251 // Copy supported ht from desired AP's beacon. We are trying to match
2252 RT_HT_PHY_INFO SupportedPhyInfo;
2253 RT_HT_CAPABILITY SupportedHtPhy;
2254 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2257 // for USB interface, avoid in interrupt when write key
2258 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2259 NDIS_802_11_MAC_ADDRESS MacAddr;
2260 USHORT MacTabMatchWCID; // ASIC
2261 CIPHER_KEY CipherKey;
2262 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2264 #endif // CONFIG_STA_SUPPORT //
2266 // ----------- start of AP --------------------------
2267 // AUTH-RSP State Machine Aux data structure
2268 typedef struct _AP_MLME_AUX {
2269 UCHAR Addr[MAC_ADDR_LEN];
2271 CHAR Challenge[CIPHER_TEXT_LEN];
2272 } AP_MLME_AUX, *PAP_MLME_AUX;
2274 // structure to define WPA Group Key Rekey Interval
2275 typedef struct PACKED _RT_802_11_WPA_REKEY {
2276 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2277 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2278 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2280 typedef struct _MAC_TABLE_ENTRY {
2281 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2282 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2283 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2284 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2285 BOOLEAN ValidAsMesh;
2286 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2288 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2290 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2292 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2293 UCHAR CMTimerRunning;
2294 UCHAR apidx; // MBSS number
2296 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2297 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2298 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2301 RALINK_TIMER_STRUCT RetryTimer;
2302 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2303 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2304 NDIS_802_11_WEP_STATUS WepStatus;
2305 AP_WPA_STATE WpaState;
2308 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2309 CIPHER_KEY PairwiseKey;
2312 UCHAR PMKID[LEN_PMKID];
2315 UCHAR Addr[MAC_ADDR_LEN];
2318 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2319 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2321 USHORT CapabilityInfo;
2323 ULONG NoDataIdleCount;
2324 UINT16 StationKeepAliveCount; // unit: second
2326 QUEUE_HEADER PsQueue;
2328 UINT32 StaConnectTime; // the live time of this station since associated with AP
2331 #ifdef DOT11_N_SUPPORT
2333 USHORT NoBADataCountDown;
2335 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2336 UINT TxBFCount; // 3*3
2337 #endif // DOT11_N_SUPPORT //
2339 UINT DebugFIFOCount;
2344 //====================================================
2345 //WDS entry needs these
2346 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2347 UINT MatchWDSTabIdx;
2348 UCHAR MaxSupportedRate;
2350 UCHAR CurrTxRateIndex;
2351 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2352 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2353 // USHORT OneSecTxOkCount;
2354 UINT32 OneSecTxNoRetryOkCount;
2355 UINT32 OneSecTxRetryOkCount;
2356 UINT32 OneSecTxFailCount;
2357 UINT32 ContinueTxFailCnt;
2358 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2359 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2360 //====================================================
2364 #ifdef CONFIG_STA_SUPPORT
2365 #ifdef QOS_DLS_SUPPORT
2366 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2367 #endif // QOS_DLS_SUPPORT //
2368 #endif // CONFIG_STA_SUPPORT //
2370 BOOLEAN fNoisyEnvironment;
2371 BOOLEAN fLastSecAccordingRSSI;
2372 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2373 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2374 ULONG LastTxOkCount;
2375 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2377 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2378 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2379 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2380 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2381 ULONG ClientStatusFlags;
2383 // TODO: Shall we move that to DOT11_N_SUPPORT???
2384 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2386 #ifdef DOT11_N_SUPPORT
2387 // HT EWC MIMO-N used parameters
2388 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2389 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2390 USHORT TXAutoBAbitmap;
2391 USHORT BADeclineBitmap;
2392 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2393 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2394 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2396 // 802.11n features.
2398 UCHAR MaxRAmpduFactor;
2400 UCHAR MmpsMode; // MIMO power save more.
2402 HT_CAPABILITY_IE HTCapability;
2404 #ifdef DOT11N_DRAFT3
2405 UCHAR BSS2040CoexistenceMgmtSupport;
2406 #endif // DOT11N_DRAFT3 //
2407 #endif // DOT11_N_SUPPORT //
2409 BOOLEAN bAutoTxRateSwitch;
2412 struct _MAC_TABLE_ENTRY *pNext;
2413 USHORT TxSeq[NUM_OF_TID];
2414 USHORT NonQosDataSeq;
2416 RSSI_SAMPLE RssiSample;
2418 UINT32 TXMCSExpected[16];
2419 UINT32 TXMCSSuccessful[16];
2420 UINT32 TXMCSFailed[16];
2421 UINT32 TXMCSAutoFallBack[16][16];
2423 #ifdef CONFIG_STA_SUPPORT
2424 ULONG LastBeaconRxTime;
2425 #endif // CONFIG_STA_SUPPORT //
2426 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2428 typedef struct _MAC_TABLE {
2430 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2431 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2432 QUEUE_HEADER McastPsQueue;
2434 BOOLEAN fAnyStationInPsm;
2435 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2436 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2437 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2438 #ifdef DOT11_N_SUPPORT
2439 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2440 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2441 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2442 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2443 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2444 #endif // DOT11_N_SUPPORT //
2445 } MAC_TABLE, *PMAC_TABLE;
2447 #ifdef DOT11_N_SUPPORT
2448 #define IS_HT_STA(_pMacEntry) \
2449 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2451 #define IS_HT_RATE(_pMacEntry) \
2452 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2454 #define PEER_IS_HT_RATE(_pMacEntry) \
2455 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2456 #endif // DOT11_N_SUPPORT //
2458 typedef struct _WDS_ENTRY {
2460 UCHAR Addr[MAC_ADDR_LEN];
2461 ULONG NoDataIdleCount;
2462 struct _WDS_ENTRY *pNext;
2463 } WDS_ENTRY, *PWDS_ENTRY;
2465 typedef struct _WDS_TABLE_ENTRY {
2467 UCHAR WdsAddr[MAC_ADDR_LEN];
2468 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2469 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2470 UCHAR MaxSupportedRate;
2472 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2473 USHORT OneSecTxOkCount;
2474 USHORT OneSecTxRetryOkCount;
2475 USHORT OneSecTxFailCount;
2476 ULONG CurrTxRateStableTime; // # of second in current TX rate
2477 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2478 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2480 typedef struct _RT_802_11_WDS_ENTRY {
2484 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2485 UCHAR MacTabMatchWCID; // ASIC
2486 NDIS_802_11_WEP_STATUS WepStatus;
2489 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2490 RT_HT_PHY_INFO DesiredHtPhyInfo;
2491 BOOLEAN bAutoTxRateSwitch;
2492 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2493 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2495 typedef struct _WDS_TABLE {
2498 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2499 } WDS_TABLE, *PWDS_TABLE;
2501 typedef struct _APCLI_STRUCT {
2504 unsigned int mylinkid;
2506 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2507 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2508 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2510 CHAR Ssid[MAX_LEN_OF_SSID];
2513 CHAR CfgSsid[MAX_LEN_OF_SSID];
2514 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2515 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2517 ULONG ApCliRcvBeaconTime;
2519 ULONG CtrlCurrState;
2520 ULONG SyncCurrState;
2521 ULONG AuthCurrState;
2522 ULONG AssocCurrState;
2523 ULONG WpaPskCurrState;
2528 ULONG ClientStatusFlags;
2531 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2532 NDIS_802_11_WEP_STATUS WepStatus;
2534 // Add to support different cipher suite for WPA2/WPA mode
2535 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2536 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2537 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2538 USHORT RsnCapability;
2540 UCHAR PSK[100]; // reserve PSK key material
2542 UCHAR PMK[32]; // WPA PSK mode PMK
2543 //UCHAR PTK[64]; // WPA PSK mode PTK
2544 UCHAR GTK[32]; // GTK from authenticator
2546 //CIPHER_KEY PairwiseKey;
2547 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2550 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2551 //UCHAR PortSecured;
2553 // store RSN_IE built by driver
2554 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2557 // For WPA countermeasures
2558 ULONG LastMicErrorTime; // record last MIC error time
2559 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2560 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2562 // For WPA-PSK supplicant state
2563 //WPA_STATE WpaState; // Default is SS_NOTUSE
2564 //UCHAR ReplayCounter[8];
2565 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2566 UCHAR SNonce[32]; // SNonce for WPA-PSK
2567 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2569 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2570 RT_HT_PHY_INFO DesiredHtPhyInfo;
2571 BOOLEAN bAutoTxRateSwitch;
2572 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2573 } APCLI_STRUCT, *PAPCLI_STRUCT;
2575 // ----------- end of AP ----------------------------
2578 typedef struct _BLOCK_QUEUE_ENTRY
2580 BOOLEAN SwTxQueueBlockFlag;
2581 LIST_HEADER NetIfList;
2582 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2583 #endif // BLOCK_NET_IF //
2588 BOOLEAN bGreenField;
2593 typedef struct _INF_PCI_CONFIG
2595 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2598 typedef struct _INF_USB_CONFIG
2600 UINT BulkInEpAddr; // bulk-in endpoint address
2601 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2605 #ifdef IKANOS_VX_1X0
2606 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2608 struct IKANOS_TX_INFO
2610 struct net_device *netdev;
2611 IkanosWlanTxCbFuncP *fp;
2613 #endif // IKANOS_VX_1X0 //
2616 #define DIAGNOSE_TIME 10 // 10 sec
2617 typedef struct _RtmpDiagStrcut_
2618 { // Diagnosis Related element
2619 unsigned char inited;
2621 unsigned char ArrayStartIdx;
2622 unsigned char ArrayCurIdx;
2624 USHORT TxDataCnt[DIAGNOSE_TIME];
2625 USHORT TxFailCnt[DIAGNOSE_TIME];
2626 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2627 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2628 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2629 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2630 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2632 USHORT TxAggCnt[DIAGNOSE_TIME];
2633 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2634 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2635 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2636 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2637 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2640 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2641 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2642 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2643 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2645 #endif // DBG_DIAGNOSE //
2649 // The miniport adapter structure
2651 typedef struct _RTMP_ADAPTER
2653 PVOID OS_Cookie; // save specific structure relative to OS
2659 NDIS_SPIN_LOCK irq_lock;
2663 /*****************************************************************************************/
2664 /* USB related parameters */
2665 /*****************************************************************************************/
2666 struct usb_config_descriptor *config;
2667 UINT BulkInEpAddr; // bulk-in endpoint address
2668 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2671 USHORT BulkOutMaxPacketSize;
2672 USHORT BulkInMaxPacketSize;
2674 //======Control Flags
2675 LONG PendingIoCount;
2677 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2680 //======Timer Thread
2681 RT2870_TIMER_QUEUE TimerQ;
2682 NDIS_SPIN_LOCK TimerQLock;
2687 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2689 BOOLEAN TimerFunc_kill;
2693 //======Semaphores (event)
2694 struct semaphore mlme_semaphore; /* to sleep thread on */
2695 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2696 struct semaphore RTUSBTimer_semaphore;
2697 #ifdef INF_AMAZON_SE
2698 struct semaphore UsbVendorReq_semaphore;
2699 PVOID UsbVendorReqBuf;
2700 #endif // INF_AMAZON_SE //
2701 struct completion TimerQComplete;
2702 struct completion mlmeComplete;
2703 struct completion CmdQComplete;
2704 wait_queue_head_t *wait;
2706 //======Lock for 2870 ATE
2708 NDIS_SPIN_LOCK GenericLock; // ATE Tx/Rx generic spinlock
2709 #endif // RALINK_ATE //
2714 /*****************************************************************************************/
2715 /* Both PCI/USB related parameters */
2716 /*****************************************************************************************/
2719 /*****************************************************************************************/
2720 /* Tx related parameters */
2721 /*****************************************************************************************/
2722 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2723 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2726 // Data related context and AC specified, 4 AC supported
2727 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2728 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2730 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2731 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2733 // 4 sets of Bulk Out index and pending flag
2734 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2736 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2737 UCHAR bulkResetPipeid;
2738 BOOLEAN MgmtBulkPending;
2739 ULONG bulkResetReq[6];
2742 // resource for software backlog queues
2743 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2744 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2746 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2747 RTMP_MGMT_RING MgmtRing;
2748 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2751 /*****************************************************************************************/
2752 /* Rx related parameters */
2753 /*****************************************************************************************/
2757 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2758 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2759 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2760 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2761 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2762 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2763 ULONG TransferBufferLength; // current length of the packet buffer
2764 ULONG ReadPosition; // current read position in a packet buffer
2768 /*****************************************************************************************/
2769 /* ASIC related parameters */
2770 /*****************************************************************************************/
2771 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2773 // ---------------------------
2775 // ---------------------------
2776 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2777 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2778 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2779 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2781 // ---------------------------
2783 // ---------------------------
2784 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2785 UCHAR BbpRssiToDbmDelta;
2786 BBP_R66_TUNING BbpTuning;
2788 // ----------------------------
2790 // ----------------------------
2791 UCHAR RfIcType; // RFIC_xxx
2792 ULONG RfFreqOffset; // Frequency offset for channel switching
2793 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2795 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2796 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2798 // This soft Rx Antenna Diversity mechanism is used only when user set
2799 // RX Antenna = DIVERSITY ON
2800 SOFT_RX_ANT_DIVERSITY RxAnt;
2803 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2804 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2805 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2806 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2808 UCHAR ChannelListNum; // number of channel in ChannelList[]
2811 ULONG Tx20MPwrCfgABand[5];
2812 ULONG Tx20MPwrCfgGBand[5];
2813 ULONG Tx40MPwrCfgABand[5];
2814 ULONG Tx40MPwrCfgGBand[5];
2816 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2817 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2818 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2819 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2820 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2821 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2823 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2824 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2825 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2826 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2827 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2828 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2830 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2831 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2832 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2833 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2836 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2837 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2838 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2839 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2842 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2843 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2844 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2845 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2847 // ----------------------------
2849 // ----------------------------
2850 MCU_LEDCS_STRUC LedCntl;
2851 USHORT Led1; // read from EEPROM 0x3c
2852 USHORT Led2; // EEPROM 0x3e
2853 USHORT Led3; // EEPROM 0x40
2854 UCHAR LedIndicatorStregth;
2855 UCHAR RssiSingalstrengthOffet;
2856 BOOLEAN bLedOnScanning;
2859 /*****************************************************************************************/
2860 /* 802.11 related parameters */
2861 /*****************************************************************************************/
2862 // outgoing BEACON frame buffer and corresponding TXD
2863 TXWI_STRUC BeaconTxWI;
2865 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2867 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2868 PSPOLL_FRAME PsPollFrame;
2869 HEADER_802_11 NullFrame;
2872 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2873 TX_CONTEXT NullContext;
2874 TX_CONTEXT PsPollContext;
2875 TX_CONTEXT RTSContext;
2880 //=========AP===========
2883 //=======STA===========
2884 #ifdef CONFIG_STA_SUPPORT
2885 /* Modified by Wu Xi-Kun 4/21/2006 */
2886 // -----------------------------------------------
2887 // STA specific configuration & operation status
2888 // used only when pAd->OpMode == OPMODE_STA
2889 // -----------------------------------------------
2890 STA_ADMIN_CONFIG StaCfg; // user desired settings
2891 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2892 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2893 NDIS_MEDIA_STATE PreMediaState;
2894 #endif // CONFIG_STA_SUPPORT //
2896 //=======Common===========
2897 // OP mode: either AP or STA
2898 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2900 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2903 // configuration: read from Registry & E2PROM
2904 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2905 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2906 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2908 // ------------------------------------------------------
2909 // common configuration to both OPMODE_STA and OPMODE_AP
2910 // ------------------------------------------------------
2911 COMMON_CONFIG CommonCfg;
2914 // AP needs those vaiables for site survey feature.
2915 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2916 BSS_TABLE ScanTab; // store the latest SCAN result
2918 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2919 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2920 NDIS_SPIN_LOCK MacTabLock;
2922 #ifdef DOT11_N_SUPPORT
2924 #endif // DOT11_N_SUPPORT //
2925 NDIS_SPIN_LOCK BATabLock;
2926 RALINK_TIMER_STRUCT RECBATimer;
2928 // encryption/decryption KEY tables
2929 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2931 // RX re-assembly buffer for fragmentation
2932 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2935 COUNTER_802_3 Counters8023; // 802.3 counters
2936 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2937 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2938 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2939 PRIVATE_STRUC PrivateInfo; // Private information & counters
2941 // flags, see fRTMP_ADAPTER_xxx flags
2942 ULONG Flags; // Represent current device status
2944 // current TX sequence #
2947 // Control disconnect / connect event generation
2948 //+++Didn't used anymore
2953 //+++Used only for Station
2954 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2957 ULONG ExtraInfo; // Extra information for displaying status
2958 ULONG SystemErrorBitmap; // b0: E2PROM version error
2960 //+++Didn't used anymore
2961 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2964 // ---------------------------
2966 // ---------------------------
2967 RT_802_11_EVENT_TABLE EventTab;
2972 /*****************************************************************************************/
2973 /* Statistic related parameters */
2974 /*****************************************************************************************/
2976 ULONG BulkOutDataOneSecCount;
2977 ULONG BulkInDataOneSecCount;
2978 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2979 ULONG watchDogRxCnt;
2980 ULONG watchDogRxOverFlowCnt;
2981 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2984 BOOLEAN bUpdateBcnCntDone;
2985 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2986 // ----------------------------
2988 // ----------------------------
2989 //ULONG DebugSetting[4];
2990 BOOLEAN bBanAllBaSetup;
2991 BOOLEAN bPromiscuous;
2993 // ----------------------------
2994 // rt2860c emulation-use Parameters
2995 // ----------------------------
2998 ULONG cfendaccu[30];
2999 ULONG bacontent[16];
3000 ULONG rxint[RX_RING_SIZE+1];
3003 BOOLEAN bForcePrintTX;
3004 BOOLEAN bForcePrintRX;
3005 BOOLEAN bDisablescanning; //defined in RT2870 USB
3006 BOOLEAN bStaFifoTest;
3007 BOOLEAN bProtectionTest;
3009 BOOLEAN bGenOneHCCA;
3010 BOOLEAN bBroadComHT;
3011 //+++Following add from RT2870 USB.
3013 ULONG BulkOutComplete;
3014 ULONG BulkOutCompleteOther;
3015 ULONG BulkOutCompleteCancel; // seems not use now?
3017 ULONG BulkInComplete;
3018 ULONG BulkInCompleteFail;
3021 struct wificonf WIFItestbed;
3026 BOOLEAN ContinBulkOut; //ATE bulk out control
3027 BOOLEAN ContinBulkIn; //ATE bulk in control
3028 atomic_t BulkOutRemained;
3029 atomic_t BulkInRemained;
3031 #endif // RALINK_ATE //
3033 #ifdef DOT11_N_SUPPORT
3034 struct reordering_mpdu_pool mpdu_blk_pool;
3035 #endif // DOT11_N_SUPPORT //
3037 ULONG OneSecondnonBEpackets; // record non BE packets per second
3039 #if WIRELESS_EXT >= 12
3040 struct iw_statistics iw_stats;
3043 struct net_device_stats stats;
3046 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3047 #endif // BLOCK_NET_IF //
3051 #ifdef MULTIPLE_CARD_SUPPORT
3053 UCHAR MC_FileName[256];
3054 #endif // MULTIPLE_CARD_SUPPORT //
3056 ULONG TbttTickCount;
3057 #ifdef PCI_MSI_SUPPORT
3059 #endif // PCI_MSI_SUPPORT //
3064 #define TIME_BASE (1000000/OS_HZ)
3065 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3066 UCHAR flg_be_adjust;
3067 ULONG be_adjust_last_time;
3070 #ifdef IKANOS_VX_1X0
3071 struct IKANOS_TX_INFO IkanosTxInfo;
3072 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3073 #endif // IKANOS_VX_1X0 //
3077 RtmpDiagStruct DiagStruct;
3078 #endif // DBG_DIAGNOSE //
3081 UINT8 PM_FlgSuspend;
3082 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3085 // Cisco IAPP format
3087 typedef struct _CISCO_IAPP_CONTENT_
3089 USHORT Length; //IAPP Length
3090 UCHAR MessageType; //IAPP type
3091 UCHAR FunctionCode; //IAPP function type
3092 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3093 UCHAR SourceMAC[MAC_ADDR_LEN];
3094 USHORT Tag; //Tag(element IE) - Adjacent AP report
3095 USHORT TagLength; //Length of element not including 4 byte header
3096 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3097 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3100 UCHAR Ssid[MAX_LEN_OF_SSID];
3101 USHORT Seconds; //Seconds that the client has been disassociated.
3102 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3104 #define DELAYINTMASK 0x0003fffb
3105 #define INTMASK 0x0003fffb
3106 #define IndMask 0x0003fffc
3107 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3108 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3109 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3110 #define TxCoherent 0x00020000 // tx coherent
3111 #define RxCoherent 0x00010000 // rx coherent
3112 #define McuCommand 0x00000200 // mcu
3113 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3114 #define TBTTInt 0x00000800 // TBTT interrupt
3115 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3116 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3117 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3120 typedef struct _RX_BLK_
3122 // RXD_STRUC RxD; // sample
3123 RT28XX_RXD_STRUC RxD;
3125 PHEADER_802_11 pHeader;
3126 PNDIS_PACKET pRxPacket;
3130 UCHAR UserPriority; // for calculate TKIP MIC using
3134 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3135 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3136 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3139 #define fRX_WDS 0x0001
3140 #define fRX_AMSDU 0x0002
3141 #define fRX_ARALINK 0x0004
3142 #define fRX_HTC 0x0008
3143 #define fRX_PAD 0x0010
3144 #define fRX_AMPDU 0x0020
3145 #define fRX_QOS 0x0040
3146 #define fRX_INFRA 0x0080
3147 #define fRX_EAP 0x0100
3148 #define fRX_MESH 0x0200
3149 #define fRX_APCLI 0x0400
3150 #define fRX_DLS 0x0800
3151 #define fRX_WPI 0x1000
3153 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3154 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3155 #define LENGTH_ARALINK_HEADER_FIELD 2
3157 #define TX_UNKOWN_FRAME 0x00
3158 #define TX_MCAST_FRAME 0x01
3159 #define TX_LEGACY_FRAME 0x02
3160 #define TX_AMPDU_FRAME 0x04
3161 #define TX_AMSDU_FRAME 0x08
3162 #define TX_RALINK_FRAME 0x10
3163 #define TX_FRAG_FRAME 0x20
3166 // Currently the sizeof(TX_BLK) is 148 bytes.
3167 typedef struct _TX_BLK_
3170 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3171 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3172 USHORT TotalFragNum; // Total frame fragments required in one batch
3173 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3175 QUEUE_HEADER TxPacketList;
3176 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3177 HTTRANSMIT_SETTING *pTransmit;
3179 // Following structure used for the characteristics of a specific packet.
3180 PNDIS_PACKET pPacket;
3181 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3182 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3183 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3184 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3185 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3186 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3187 UCHAR HdrPadLen; // recording Header Padding Length;
3188 UCHAR apidx; // The interface associated to this packet
3189 UCHAR Wcid; // The MAC entry associated to this packet
3190 UCHAR UserPriority; // priority class of packet
3191 UCHAR FrameGap; // what kind of IFS this packet use
3192 UCHAR MpduReqNum; // number of fragments of this frame
3193 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3194 UCHAR CipherAlg; // cipher alogrithm
3199 USHORT Flags; //See following definitions for detail.
3201 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3202 ULONG Priv; // Hardware specific value saved in here.
3206 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3207 #define fTX_bAckRequired 0x0002 // the packet need ack response
3208 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3209 #define fTX_bHTRate 0x0008 // allow to use HT rate
3210 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3211 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3212 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3213 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3214 #define fTX_bWMM 0x0080 // QOS Data
3216 #define fTX_bClearEAPFrame 0x0100
3219 #ifdef CONFIG_STA_SUPPORT
3220 #endif // CONFIG_STA_SUPPORT //
3224 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3227 (_pTxBlk->Flags |= _flag) \
3229 (_pTxBlk->Flags &= ~(_flag)) \
3232 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3233 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3234 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3240 //------------------------------------------------------------------------------------------
3244 #ifdef RT_BIG_ENDIAN
3245 static inline VOID WriteBackToDescriptor(
3248 IN BOOLEAN DoEncrypt,
3249 IN ULONG DescriptorType)
3253 p1 = ((UINT32 *)Dest);
3254 p2 = ((UINT32 *)Src);
3259 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3263 ========================================================================
3265 Routine Description:
3266 Endian conversion of Tx/Rx descriptor .
3269 pAd Pointer to our adapter
3270 pData Pointer to Tx/Rx descriptor
3271 DescriptorType Direction of the frame
3277 Call this function when read or update descriptor
3278 ========================================================================
3280 static inline VOID RTMPWIEndianChange(
3282 IN ULONG DescriptorType)
3287 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3289 if(DescriptorType == TYPE_TXWI)
3291 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3292 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3296 for(i=0; i < size/4 ; i++)
3297 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3302 ========================================================================
3304 Routine Description:
3305 Endian conversion of Tx/Rx descriptor .
3308 pAd Pointer to our adapter
3309 pData Pointer to Tx/Rx descriptor
3310 DescriptorType Direction of the frame
3316 Call this function when read or update descriptor
3317 ========================================================================
3321 static inline VOID RTMPDescriptorEndianChange(
3323 IN ULONG DescriptorType)
3325 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3329 ========================================================================
3331 Routine Description:
3332 Endian conversion of all kinds of 802.11 frames .
3335 pAd Pointer to our adapter
3336 pData Pointer to the 802.11 frame structure
3337 Dir Direction of the frame
3338 FromRxDoneInt Caller is from RxDone interrupt
3344 Call this function when read or update buffer data
3345 ========================================================================
3347 static inline VOID RTMPFrameEndianChange(
3348 IN PRTMP_ADAPTER pAd,
3351 IN BOOLEAN FromRxDoneInt)
3353 PHEADER_802_11 pFrame;
3356 // swab 16 bit fields - Frame Control field
3359 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3362 pFrame = (PHEADER_802_11) pData;
3363 pMacHdr = (PUCHAR) pFrame;
3365 // swab 16 bit fields - Duration/ID field
3366 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3368 // swab 16 bit fields - Sequence Control field
3369 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3371 if(pFrame->FC.Type == BTYPE_MGMT)
3373 switch(pFrame->FC.SubType)
3375 case SUBTYPE_ASSOC_REQ:
3376 case SUBTYPE_REASSOC_REQ:
3377 // swab 16 bit fields - CapabilityInfo field
3378 pMacHdr += sizeof(HEADER_802_11);
3379 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3381 // swab 16 bit fields - Listen Interval field
3383 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3386 case SUBTYPE_ASSOC_RSP:
3387 case SUBTYPE_REASSOC_RSP:
3388 // swab 16 bit fields - CapabilityInfo field
3389 pMacHdr += sizeof(HEADER_802_11);
3390 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3392 // swab 16 bit fields - Status Code field
3394 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3396 // swab 16 bit fields - AID field
3398 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3402 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3403 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3404 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3408 // swab 16 bit fields - Auth Alg No. field
3409 pMacHdr += sizeof(HEADER_802_11);
3410 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3412 // swab 16 bit fields - Auth Seq No. field
3414 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3416 // swab 16 bit fields - Status Code field
3418 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3422 case SUBTYPE_BEACON:
3423 case SUBTYPE_PROBE_RSP:
3424 // swab 16 bit fields - BeaconInterval field
3425 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3426 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3428 // swab 16 bit fields - CapabilityInfo field
3429 pMacHdr += sizeof(USHORT);
3430 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3433 case SUBTYPE_DEAUTH:
3434 case SUBTYPE_DISASSOC:
3435 // swab 16 bit fields - Reason code field
3436 pMacHdr += sizeof(HEADER_802_11);
3437 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3441 else if( pFrame->FC.Type == BTYPE_DATA )
3444 else if(pFrame->FC.Type == BTYPE_CNTL)
3446 switch(pFrame->FC.SubType)
3448 case SUBTYPE_BLOCK_ACK_REQ:
3450 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3451 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3452 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3455 case SUBTYPE_BLOCK_ACK:
3456 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3457 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3461 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3462 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3468 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3471 // swab 16 bit fields - Frame Control
3472 if(Dir == DIR_WRITE)
3474 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3477 #endif // RT_BIG_ENDIAN //
3480 static inline VOID ConvertMulticastIP2MAC(
3482 IN PUCHAR *ppMacAddr,
3483 IN UINT16 ProtoType)
3485 if (pIpAddr == NULL)
3488 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3494 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3495 *(*ppMacAddr) = 0x33;
3496 *(*ppMacAddr + 1) = 0x33;
3497 *(*ppMacAddr + 2) = pIpAddr[12];
3498 *(*ppMacAddr + 3) = pIpAddr[13];
3499 *(*ppMacAddr + 4) = pIpAddr[14];
3500 *(*ppMacAddr + 5) = pIpAddr[15];
3505 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3506 *(*ppMacAddr) = 0x01;
3507 *(*ppMacAddr + 1) = 0x00;
3508 *(*ppMacAddr + 2) = 0x5e;
3509 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3510 *(*ppMacAddr + 4) = pIpAddr[2];
3511 *(*ppMacAddr + 5) = pIpAddr[3];
3518 BOOLEAN RTMPCheckForHang(
3519 IN NDIS_HANDLE MiniportAdapterContext
3523 IN NDIS_HANDLE MiniportAdapterContext
3527 // Private routines in rtmp_init.c
3529 NDIS_STATUS RTMPAllocAdapterBlock(
3531 OUT PRTMP_ADAPTER *ppAdapter
3534 NDIS_STATUS RTMPAllocTxRxRingMemory(
3535 IN PRTMP_ADAPTER pAd
3538 NDIS_STATUS RTMPFindAdapter(
3539 IN PRTMP_ADAPTER pAd,
3540 IN NDIS_HANDLE WrapperConfigurationContext
3543 NDIS_STATUS RTMPReadParametersHook(
3544 IN PRTMP_ADAPTER pAd
3547 VOID RTMPFreeAdapter(
3548 IN PRTMP_ADAPTER pAd
3551 NDIS_STATUS NICReadRegParameters(
3552 IN PRTMP_ADAPTER pAd,
3553 IN NDIS_HANDLE WrapperConfigurationContext
3557 VOID NICInitRT30xxRFRegisters(
3558 IN PRTMP_ADAPTER pAd);
3561 VOID NICReadEEPROMParameters(
3562 IN PRTMP_ADAPTER pAd,
3563 IN PUCHAR mac_addr);
3565 VOID NICInitAsicFromEEPROM(
3566 IN PRTMP_ADAPTER pAd);
3568 VOID NICInitTxRxRingAndBacklogQueue(
3569 IN PRTMP_ADAPTER pAd);
3571 NDIS_STATUS NICInitializeAdapter(
3572 IN PRTMP_ADAPTER pAd,
3573 IN BOOLEAN bHardReset);
3575 NDIS_STATUS NICInitializeAsic(
3576 IN PRTMP_ADAPTER pAd,
3577 IN BOOLEAN bHardReset);
3580 IN PRTMP_ADAPTER pAd);
3582 VOID RTMPRingCleanUp(
3583 IN PRTMP_ADAPTER pAd,
3587 IN PRTMP_ADAPTER pAd);
3589 NDIS_STATUS DbgSendPacket(
3590 IN PRTMP_ADAPTER pAd,
3591 IN PNDIS_PACKET pPacket);
3594 IN PRTMP_ADAPTER pAd);
3596 VOID NICResetFromError(
3597 IN PRTMP_ADAPTER pAd);
3599 VOID NICEraseFirmware(
3600 IN PRTMP_ADAPTER pAd);
3602 NDIS_STATUS NICLoadFirmware(
3603 IN PRTMP_ADAPTER pAd);
3605 NDIS_STATUS NICLoadRateSwitchingParams(
3606 IN PRTMP_ADAPTER pAd);
3608 BOOLEAN NICCheckForHang(
3609 IN PRTMP_ADAPTER pAd);
3611 VOID NICUpdateFifoStaCounters(
3612 IN PRTMP_ADAPTER pAd);
3614 VOID NICUpdateRawCounters(
3615 IN PRTMP_ADAPTER pAd);
3618 ULONG RTMPEqualMemory(
3624 ULONG RTMPNotAllZero(
3628 VOID RTMPZeroMemory(
3632 ULONG RTMPCompareMemory(
3637 VOID RTMPMoveMemory(
3650 VOID RTMPPatchMacBbpBug(
3651 IN PRTMP_ADAPTER pAd);
3653 VOID RTMPPatchCardBus(
3654 IN PRTMP_ADAPTER pAdapter);
3656 VOID RTMPPatchRalinkCardBus(
3657 IN PRTMP_ADAPTER pAdapter,
3660 ULONG RTMPReadCBConfig(
3666 VOID RTMPWriteCBConfig(
3674 IN PRTMP_ADAPTER pAd,
3675 IN PRALINK_TIMER_STRUCT pTimer,
3676 IN PVOID pTimerFunc,
3681 IN PRALINK_TIMER_STRUCT pTimer,
3686 IN PRALINK_TIMER_STRUCT pTimer,
3689 VOID RTMPCancelTimer(
3690 IN PRALINK_TIMER_STRUCT pTimer,
3691 OUT BOOLEAN *pCancelled);
3694 IN PRTMP_ADAPTER pAd,
3697 VOID RTMPSetSignalLED(
3698 IN PRTMP_ADAPTER pAd,
3699 IN NDIS_802_11_RSSI Dbm);
3701 VOID RTMPEnableRxTx(
3702 IN PRTMP_ADAPTER pAd);
3705 // prototype in action.c
3707 VOID ActionStateMachineInit(
3708 IN PRTMP_ADAPTER pAd,
3709 IN STATE_MACHINE *S,
3710 OUT STATE_MACHINE_FUNC Trans[]);
3712 VOID MlmeADDBAAction(
3713 IN PRTMP_ADAPTER pAd,
3714 IN MLME_QUEUE_ELEM *Elem);
3716 VOID MlmeDELBAAction(
3717 IN PRTMP_ADAPTER pAd,
3718 IN MLME_QUEUE_ELEM *Elem);
3721 IN PRTMP_ADAPTER pAd,
3722 IN MLME_QUEUE_ELEM *Elem);
3724 VOID MlmeInvalidAction(
3725 IN PRTMP_ADAPTER pAd,
3726 IN MLME_QUEUE_ELEM *Elem);
3729 IN PRTMP_ADAPTER pAd,
3730 IN MLME_QUEUE_ELEM *Elem);
3732 #ifdef DOT11_N_SUPPORT
3733 VOID PeerAddBAReqAction(
3734 IN PRTMP_ADAPTER pAd,
3735 IN MLME_QUEUE_ELEM *Elem);
3737 VOID PeerAddBARspAction(
3738 IN PRTMP_ADAPTER pAd,
3739 IN MLME_QUEUE_ELEM *Elem);
3741 VOID PeerDelBAAction(
3742 IN PRTMP_ADAPTER pAd,
3743 IN MLME_QUEUE_ELEM *Elem);
3746 IN PRTMP_ADAPTER pAd,
3747 IN MLME_QUEUE_ELEM *Elem);
3748 #endif // DOT11_N_SUPPORT //
3750 VOID SendPSMPAction(
3751 IN PRTMP_ADAPTER pAd,
3756 #ifdef DOT11N_DRAFT3
3757 VOID SendBSS2040CoexistMgmtAction(
3758 IN PRTMP_ADAPTER pAd,
3763 VOID SendNotifyBWActionFrame(
3764 IN PRTMP_ADAPTER pAd,
3768 BOOLEAN ChannelSwitchSanityCheck(
3769 IN PRTMP_ADAPTER pAd,
3771 IN UCHAR NewChannel,
3772 IN UCHAR Secondary);
3774 VOID ChannelSwitchAction(
3775 IN PRTMP_ADAPTER pAd,
3778 IN UCHAR Secondary);
3780 ULONG BuildIntolerantChannelRep(
3781 IN PRTMP_ADAPTER pAd,
3784 VOID Update2040CoexistFrameAndNotify(
3785 IN PRTMP_ADAPTER pAd,
3787 IN BOOLEAN bAddIntolerantCha);
3789 VOID Send2040CoexistAction(
3790 IN PRTMP_ADAPTER pAd,
3792 IN BOOLEAN bAddIntolerantCha);
3793 #endif // DOT11N_DRAFT3 //
3796 IN PRTMP_ADAPTER pAd,
3797 IN MLME_QUEUE_ELEM *Elem);
3799 VOID PeerPublicAction(
3800 IN PRTMP_ADAPTER pAd,
3801 IN MLME_QUEUE_ELEM *Elem);
3803 #ifdef CONFIG_STA_SUPPORT
3804 VOID StaPublicAction(
3805 IN PRTMP_ADAPTER pAd,
3806 IN UCHAR Bss2040Coexist);
3807 #endif // CONFIG_STA_SUPPORT //
3810 VOID PeerBSSTranAction(
3811 IN PRTMP_ADAPTER pAd,
3812 IN MLME_QUEUE_ELEM *Elem);
3814 #ifdef DOT11_N_SUPPORT
3816 IN PRTMP_ADAPTER pAd,
3817 IN MLME_QUEUE_ELEM *Elem);
3818 #endif // DOT11_N_SUPPORT //
3821 IN PRTMP_ADAPTER pAd,
3822 IN MLME_QUEUE_ELEM *Elem);
3824 #ifdef QOS_DLS_SUPPORT
3826 IN PRTMP_ADAPTER pAd,
3827 IN MLME_QUEUE_ELEM *Elem);
3828 #endif // QOS_DLS_SUPPORT //
3830 #ifdef CONFIG_STA_SUPPORT
3831 #ifdef QOS_DLS_SUPPORT
3833 IN PRTMP_ADAPTER pAd,
3834 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3835 IN PRT_802_11_DLS pDls,
3837 #endif // QOS_DLS_SUPPORT //
3838 #endif // CONFIG_STA_SUPPORT //
3840 #ifdef DOT11_N_SUPPORT
3841 VOID RECBATimerTimeout(
3842 IN PVOID SystemSpecific1,
3843 IN PVOID FunctionContext,
3844 IN PVOID SystemSpecific2,
3845 IN PVOID SystemSpecific3);
3847 VOID ORIBATimerTimeout(
3848 IN PRTMP_ADAPTER pAd);
3850 VOID SendRefreshBAR(
3851 IN PRTMP_ADAPTER pAd,
3852 IN MAC_TABLE_ENTRY *pEntry);
3853 #endif // DOT11_N_SUPPORT //
3856 IN PRTMP_ADAPTER pAd,
3857 IN OUT PHEADER_802_11 pHdr80211,
3863 IN PRTMP_ADAPTER pAd,
3864 IN OUT PFRAME_BAR pCntlBar,
3868 VOID InsertActField(
3869 IN PRTMP_ADAPTER pAd,
3870 OUT PUCHAR pFrameBuf,
3871 OUT PULONG pFrameLen,
3875 BOOLEAN QosBADataParse(
3876 IN PRTMP_ADAPTER pAd,
3878 IN PUCHAR p8023Header,
3882 IN UCHAR DataOffset,
3884 IN UINT CurRxIndex);
3886 #ifdef DOT11_N_SUPPORT
3887 BOOLEAN CntlEnqueueForRecv(
3888 IN PRTMP_ADAPTER pAd,
3891 IN PFRAME_BA_REQ pMsg);
3893 VOID BaAutoManSwitch(
3894 IN PRTMP_ADAPTER pAd);
3895 #endif // DOT11_N_SUPPORT //
3898 IN PRTMP_ADAPTER pAd,
3899 IN UCHAR BatRecIdx);
3902 // Private routines in rtmp_data.c
3904 BOOLEAN RTMPHandleRxDoneInterrupt(
3905 IN PRTMP_ADAPTER pAd);
3907 VOID RTMPHandleTxDoneInterrupt(
3908 IN PRTMP_ADAPTER pAd);
3910 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3911 IN PRTMP_ADAPTER pAd,
3912 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3914 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3915 IN PRTMP_ADAPTER pAd);
3917 VOID RTMPHandleTBTTInterrupt(
3918 IN PRTMP_ADAPTER pAd);
3920 VOID RTMPHandlePreTBTTInterrupt(
3921 IN PRTMP_ADAPTER pAd);
3923 void RTMPHandleTwakeupInterrupt(
3924 IN PRTMP_ADAPTER pAd);
3926 VOID RTMPHandleRxCoherentInterrupt(
3927 IN PRTMP_ADAPTER pAd);
3929 BOOLEAN TxFrameIsAggregatible(
3930 IN PRTMP_ADAPTER pAd,
3931 IN PUCHAR pPrevAddr1,
3932 IN PUCHAR p8023hdr);
3934 BOOLEAN PeerIsAggreOn(
3935 IN PRTMP_ADAPTER pAd,
3937 IN PMAC_TABLE_ENTRY pMacEntry);
3939 #if 0 // It's not be used
3940 HTTRANSMIT_SETTING *GetTxMode(
3941 IN PRTMP_ADAPTER pAd,
3945 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3946 IN PNDIS_BUFFER pFirstBuffer,
3947 IN UCHAR DesiredOffset,
3951 NDIS_STATUS STASendPacket(
3952 IN PRTMP_ADAPTER pAd,
3953 IN PNDIS_PACKET pPacket);
3955 VOID STASendPackets(
3956 IN NDIS_HANDLE MiniportAdapterContext,
3957 IN PPNDIS_PACKET ppPacketArray,
3958 IN UINT NumberOfPackets);
3960 VOID RTMPDeQueuePacket(
3961 IN PRTMP_ADAPTER pAd,
3962 IN BOOLEAN bIntContext,
3964 IN UCHAR Max_Tx_Packets);
3966 NDIS_STATUS RTMPHardTransmit(
3967 IN PRTMP_ADAPTER pAd,
3968 IN PNDIS_PACKET pPacket,
3970 OUT PULONG pFreeTXDLeft);
3972 NDIS_STATUS STAHardTransmit(
3973 IN PRTMP_ADAPTER pAd,
3977 VOID STARxEAPOLFrameIndicate(
3978 IN PRTMP_ADAPTER pAd,
3979 IN MAC_TABLE_ENTRY *pEntry,
3981 IN UCHAR FromWhichBSSID);
3983 NDIS_STATUS RTMPFreeTXDRequest(
3984 IN PRTMP_ADAPTER pAd,
3986 IN UCHAR NumberRequired,
3987 IN PUCHAR FreeNumberIs);
3989 NDIS_STATUS MlmeHardTransmit(
3990 IN PRTMP_ADAPTER pAd,
3992 IN PNDIS_PACKET pPacket);
3994 NDIS_STATUS MlmeHardTransmitMgmtRing(
3995 IN PRTMP_ADAPTER pAd,
3997 IN PNDIS_PACKET pPacket);
3999 NDIS_STATUS MlmeHardTransmitTxRing(
4000 IN PRTMP_ADAPTER pAd,
4002 IN PNDIS_PACKET pPacket);
4004 USHORT RTMPCalcDuration(
4005 IN PRTMP_ADAPTER pAd,
4010 IN PRTMP_ADAPTER pAd,
4011 IN PTXWI_STRUC pTxWI,
4014 IN BOOLEAN InsTimestamp,
4017 IN BOOLEAN NSeq, // HW new a sequence.
4026 IN HTTRANSMIT_SETTING *pTransmit);
4029 VOID RTMPWriteTxWI_Data(
4030 IN PRTMP_ADAPTER pAd,
4031 IN OUT PTXWI_STRUC pTxWI,
4035 VOID RTMPWriteTxWI_Cache(
4036 IN PRTMP_ADAPTER pAd,
4037 IN OUT PTXWI_STRUC pTxWI,
4040 VOID RTMPWriteTxDescriptor(
4041 IN PRTMP_ADAPTER pAd,
4046 VOID RTMPSuspendMsduTransmission(
4047 IN PRTMP_ADAPTER pAd);
4049 VOID RTMPResumeMsduTransmission(
4050 IN PRTMP_ADAPTER pAd);
4052 NDIS_STATUS MiniportMMRequest(
4053 IN PRTMP_ADAPTER pAd,
4058 NDIS_STATUS MiniportDataMMRequest(
4059 IN PRTMP_ADAPTER pAd,
4064 VOID RTMPSendNullFrame(
4065 IN PRTMP_ADAPTER pAd,
4067 IN BOOLEAN bQosNull);
4069 VOID RTMPSendDisassociationFrame(
4070 IN PRTMP_ADAPTER pAd);
4072 VOID RTMPSendRTSFrame(
4073 IN PRTMP_ADAPTER pAd,
4075 IN unsigned int NextMpduSize,
4078 IN USHORT AckDuration,
4083 NDIS_STATUS RTMPApplyPacketFilter(
4084 IN PRTMP_ADAPTER pAd,
4085 IN PRT28XX_RXD_STRUC pRxD,
4086 IN PHEADER_802_11 pHeader);
4088 PQUEUE_HEADER RTMPCheckTxSwQueue(
4089 IN PRTMP_ADAPTER pAd,
4092 #ifdef CONFIG_STA_SUPPORT
4093 VOID RTMPReportMicError(
4094 IN PRTMP_ADAPTER pAd,
4095 IN PCIPHER_KEY pWpaKey);
4097 VOID WpaMicFailureReportFrame(
4098 IN PRTMP_ADAPTER pAd,
4099 IN MLME_QUEUE_ELEM *Elem);
4101 VOID WpaDisassocApAndBlockAssoc(
4102 IN PVOID SystemSpecific1,
4103 IN PVOID FunctionContext,
4104 IN PVOID SystemSpecific2,
4105 IN PVOID SystemSpecific3);
4106 #endif // CONFIG_STA_SUPPORT //
4108 NDIS_STATUS RTMPCloneNdisPacket(
4109 IN PRTMP_ADAPTER pAd,
4110 IN BOOLEAN pInsAMSDUHdr,
4111 IN PNDIS_PACKET pInPacket,
4112 OUT PNDIS_PACKET *ppOutPacket);
4114 NDIS_STATUS RTMPAllocateNdisPacket(
4115 IN PRTMP_ADAPTER pAd,
4116 IN PNDIS_PACKET *pPacket,
4122 VOID RTMPFreeNdisPacket(
4123 IN PRTMP_ADAPTER pAd,
4124 IN PNDIS_PACKET pPacket);
4126 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4127 IN PRTMP_ADAPTER pAd,
4130 BOOLEAN RTMPCheckDHCPFrame(
4131 IN PRTMP_ADAPTER pAd,
4132 IN PNDIS_PACKET pPacket);
4135 BOOLEAN RTMPCheckEtherType(
4136 IN PRTMP_ADAPTER pAd,
4137 IN PNDIS_PACKET pPacket);
4140 VOID RTMPCckBbpTuning(
4141 IN PRTMP_ADAPTER pAd,
4145 // Private routines in rtmp_wep.c
4147 VOID RTMPInitWepEngine(
4148 IN PRTMP_ADAPTER pAd,
4154 VOID RTMPEncryptData(
4155 IN PRTMP_ADAPTER pAd,
4160 BOOLEAN RTMPDecryptData(
4161 IN PRTMP_ADAPTER pAdapter,
4166 BOOLEAN RTMPSoftDecryptWEP(
4167 IN PRTMP_ADAPTER pAd,
4169 IN ULONG DataByteCnt,
4170 IN PCIPHER_KEY pGroupKey);
4173 IN PRTMP_ADAPTER pAd,
4177 IN PARCFOURCONTEXT Ctx,
4182 IN PARCFOURCONTEXT Ctx);
4184 VOID ARCFOUR_DECRYPT(
4185 IN PARCFOURCONTEXT Ctx,
4190 VOID ARCFOUR_ENCRYPT(
4191 IN PARCFOURCONTEXT Ctx,
4196 VOID WPAARCFOUR_ENCRYPT(
4197 IN PARCFOURCONTEXT Ctx,
4202 UINT RTMP_CALC_FCS32(
4211 // Asic/RF/BBP related functions
4213 VOID AsicAdjustTxPower(
4214 IN PRTMP_ADAPTER pAd);
4216 VOID AsicUpdateProtect(
4217 IN PRTMP_ADAPTER pAd,
4218 IN USHORT OperaionMode,
4220 IN BOOLEAN bDisableBGProtect,
4221 IN BOOLEAN bNonGFExist);
4223 VOID AsicSwitchChannel(
4224 IN PRTMP_ADAPTER pAd,
4228 VOID AsicLockChannel(
4229 IN PRTMP_ADAPTER pAd,
4232 VOID AsicAntennaSelect(
4233 IN PRTMP_ADAPTER pAd,
4236 VOID AsicAntennaSetting(
4237 IN PRTMP_ADAPTER pAd,
4238 IN ABGBAND_STATE BandState);
4240 VOID AsicRfTuningExec(
4241 IN PVOID SystemSpecific1,
4242 IN PVOID FunctionContext,
4243 IN PVOID SystemSpecific2,
4244 IN PVOID SystemSpecific3);
4246 #ifdef CONFIG_STA_SUPPORT
4247 VOID AsicSleepThenAutoWakeup(
4248 IN PRTMP_ADAPTER pAd,
4249 IN USHORT TbttNumToNextWakeUp);
4251 VOID AsicForceSleep(
4252 IN PRTMP_ADAPTER pAd);
4254 VOID AsicForceWakeup(
4255 IN PRTMP_ADAPTER pAd,
4256 IN BOOLEAN bFromTx);
4257 #endif // CONFIG_STA_SUPPORT //
4260 IN PRTMP_ADAPTER pAd,
4263 VOID AsicSetMcastWC(
4264 IN PRTMP_ADAPTER pAd);
4266 #if 0 // removed by AlbertY
4267 VOID AsicSetBssidWC(
4268 IN PRTMP_ADAPTER pAd,
4272 VOID AsicDelWcidTab(
4273 IN PRTMP_ADAPTER pAd,
4277 IN PRTMP_ADAPTER pAd);
4279 VOID AsicDisableRDG(
4280 IN PRTMP_ADAPTER pAd);
4282 VOID AsicDisableSync(
4283 IN PRTMP_ADAPTER pAd);
4285 VOID AsicEnableBssSync(
4286 IN PRTMP_ADAPTER pAd);
4288 VOID AsicEnableIbssSync(
4289 IN PRTMP_ADAPTER pAd);
4291 VOID AsicSetEdcaParm(
4292 IN PRTMP_ADAPTER pAd,
4293 IN PEDCA_PARM pEdcaParm);
4295 VOID AsicSetSlotTime(
4296 IN PRTMP_ADAPTER pAd,
4297 IN BOOLEAN bUseShortSlotTime);
4300 VOID AsicAddWcidCipherEntry(
4301 IN PRTMP_ADAPTER pAd,
4307 IN CIPHER_KEY *pCipherKey);
4310 VOID AsicAddSharedKeyEntry(
4311 IN PRTMP_ADAPTER pAd,
4319 VOID AsicRemoveSharedKeyEntry(
4320 IN PRTMP_ADAPTER pAd,
4324 VOID AsicUpdateWCIDAttribute(
4325 IN PRTMP_ADAPTER pAd,
4329 IN BOOLEAN bUsePairewiseKeyTable);
4331 VOID AsicUpdateWCIDIVEIV(
4332 IN PRTMP_ADAPTER pAd,
4337 VOID AsicUpdateRxWCIDTable(
4338 IN PRTMP_ADAPTER pAd,
4342 VOID AsicAddKeyEntry(
4343 IN PRTMP_ADAPTER pAd,
4347 IN PCIPHER_KEY pCipherKey,
4348 IN BOOLEAN bUsePairewiseKeyTable,
4351 VOID AsicAddPairwiseKeyEntry(
4352 IN PRTMP_ADAPTER pAd,
4355 IN CIPHER_KEY *pCipherKey);
4357 VOID AsicRemovePairwiseKeyEntry(
4358 IN PRTMP_ADAPTER pAd,
4362 BOOLEAN AsicSendCommandToMcu(
4363 IN PRTMP_ADAPTER pAd,
4370 VOID MacAddrRandomBssid(
4371 IN PRTMP_ADAPTER pAd,
4374 VOID MgtMacHeaderInit(
4375 IN PRTMP_ADAPTER pAd,
4376 IN OUT PHEADER_802_11 pHdr80211,
4383 IN PRTMP_ADAPTER pAd);
4386 IN PRTMP_ADAPTER pAd);
4392 #ifdef DOT11_N_SUPPORT
4394 IN PRTMP_ADAPTER pAd,
4396 #endif // DOT11_N_SUPPORT //
4398 ULONG BssTableSearch(
4403 ULONG BssSsidTableSearch(
4410 ULONG BssTableSearchWithSSID(
4417 VOID BssTableDeleteEntry(
4418 IN OUT PBSS_TABLE pTab,
4422 #ifdef DOT11_N_SUPPORT
4423 VOID BATableDeleteORIEntry(
4424 IN OUT PRTMP_ADAPTER pAd,
4425 IN BA_ORI_ENTRY *pBAORIEntry);
4427 VOID BATableDeleteRECEntry(
4428 IN OUT PRTMP_ADAPTER pAd,
4429 IN BA_REC_ENTRY *pBARECEntry);
4431 VOID BATableTearORIEntry(
4432 IN OUT PRTMP_ADAPTER pAd,
4435 IN BOOLEAN bForceDelete,
4438 VOID BATableTearRECEntry(
4439 IN OUT PRTMP_ADAPTER pAd,
4443 #endif // DOT11_N_SUPPORT //
4446 IN PRTMP_ADAPTER pAd,
4447 OUT PBSS_ENTRY pBss,
4452 IN USHORT BeaconPeriod,
4455 IN USHORT CapabilityInfo,
4457 IN UCHAR SupRateLen,
4459 IN UCHAR ExtRateLen,
4460 IN HT_CAPABILITY_IE *pHtCapability,
4461 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4462 IN UCHAR HtCapabilityLen,
4463 IN UCHAR AddHtInfoLen,
4464 IN UCHAR NewExtChanOffset,
4467 IN LARGE_INTEGER TimeStamp,
4469 IN PEDCA_PARM pEdcaParm,
4470 IN PQOS_CAPABILITY_PARM pQosCapability,
4471 IN PQBSS_LOAD_PARM pQbssLoad,
4472 IN USHORT LengthVIE,
4473 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4475 ULONG BssTableSetEntry(
4476 IN PRTMP_ADAPTER pAd,
4477 OUT PBSS_TABLE pTab,
4482 IN USHORT BeaconPeriod,
4485 IN USHORT CapabilityInfo,
4487 IN UCHAR SupRateLen,
4489 IN UCHAR ExtRateLen,
4490 IN HT_CAPABILITY_IE *pHtCapability,
4491 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4492 IN UCHAR HtCapabilityLen,
4493 IN UCHAR AddHtInfoLen,
4494 IN UCHAR NewExtChanOffset,
4497 IN LARGE_INTEGER TimeStamp,
4499 IN PEDCA_PARM pEdcaParm,
4500 IN PQOS_CAPABILITY_PARM pQosCapability,
4501 IN PQBSS_LOAD_PARM pQbssLoad,
4502 IN USHORT LengthVIE,
4503 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4505 #ifdef DOT11_N_SUPPORT
4506 VOID BATableInsertEntry(
4507 IN PRTMP_ADAPTER pAd,
4509 IN USHORT TimeOutValue,
4510 IN USHORT StartingSeq,
4513 IN UCHAR OriginatorStatus,
4514 IN BOOLEAN IsRecipient);
4516 #ifdef DOT11N_DRAFT3
4517 VOID Bss2040CoexistTimeOut(
4518 IN PVOID SystemSpecific1,
4519 IN PVOID FunctionContext,
4520 IN PVOID SystemSpecific2,
4521 IN PVOID SystemSpecific3);
4525 IN PRTMP_ADAPTER pAd);
4527 ULONG TriEventTableSetEntry(
4528 IN PRTMP_ADAPTER pAd,
4529 OUT TRIGGER_EVENT_TAB *Tab,
4531 IN HT_CAPABILITY_IE *pHtCapability,
4532 IN UCHAR HtCapabilityLen,
4534 IN UCHAR ChannelNo);
4536 VOID TriEventCounterMaintenance(
4537 IN PRTMP_ADAPTER pAd);
4538 #endif // DOT11N_DRAFT3 //
4539 #endif // DOT11_N_SUPPORT //
4541 VOID BssTableSsidSort(
4542 IN PRTMP_ADAPTER pAd,
4543 OUT BSS_TABLE *OutTab,
4547 VOID BssTableSortByRssi(
4548 IN OUT BSS_TABLE *OutTab);
4550 VOID BssCipherParse(
4551 IN OUT PBSS_ENTRY pBss);
4553 NDIS_STATUS MlmeQueueInit(
4554 IN MLME_QUEUE *Queue);
4556 VOID MlmeQueueDestroy(
4557 IN MLME_QUEUE *Queue);
4559 BOOLEAN MlmeEnqueue(
4560 IN PRTMP_ADAPTER pAd,
4566 BOOLEAN MlmeEnqueueForRecv(
4567 IN PRTMP_ADAPTER pAd,
4569 IN ULONG TimeStampHigh,
4570 IN ULONG TimeStampLow,
4579 BOOLEAN MlmeDequeue(
4580 IN MLME_QUEUE *Queue,
4581 OUT MLME_QUEUE_ELEM **Elem);
4583 VOID MlmeRestartStateMachine(
4584 IN PRTMP_ADAPTER pAd);
4586 BOOLEAN MlmeQueueEmpty(
4587 IN MLME_QUEUE *Queue);
4589 BOOLEAN MlmeQueueFull(
4590 IN MLME_QUEUE *Queue);
4592 BOOLEAN MsgTypeSubst(
4593 IN PRTMP_ADAPTER pAd,
4594 IN PFRAME_802_11 pFrame,
4598 VOID StateMachineInit(
4599 IN STATE_MACHINE *Sm,
4600 IN STATE_MACHINE_FUNC Trans[],
4603 IN STATE_MACHINE_FUNC DefFunc,
4607 VOID StateMachineSetAction(
4608 IN STATE_MACHINE *S,
4611 IN STATE_MACHINE_FUNC F);
4613 VOID StateMachinePerformAction(
4614 IN PRTMP_ADAPTER pAd,
4615 IN STATE_MACHINE *S,
4616 IN MLME_QUEUE_ELEM *Elem);
4619 IN PRTMP_ADAPTER pAd,
4620 IN MLME_QUEUE_ELEM *Elem);
4622 VOID AssocStateMachineInit(
4623 IN PRTMP_ADAPTER pAd,
4624 IN STATE_MACHINE *Sm,
4625 OUT STATE_MACHINE_FUNC Trans[]);
4627 VOID ReassocTimeout(
4628 IN PVOID SystemSpecific1,
4629 IN PVOID FunctionContext,
4630 IN PVOID SystemSpecific2,
4631 IN PVOID SystemSpecific3);
4634 IN PVOID SystemSpecific1,
4635 IN PVOID FunctionContext,
4636 IN PVOID SystemSpecific2,
4637 IN PVOID SystemSpecific3);
4639 VOID DisassocTimeout(
4640 IN PVOID SystemSpecific1,
4641 IN PVOID FunctionContext,
4642 IN PVOID SystemSpecific2,
4643 IN PVOID SystemSpecific3);
4645 //----------------------------------------------
4646 VOID MlmeDisassocReqAction(
4647 IN PRTMP_ADAPTER pAd,
4648 IN MLME_QUEUE_ELEM *Elem);
4650 VOID MlmeAssocReqAction(
4651 IN PRTMP_ADAPTER pAd,
4652 IN MLME_QUEUE_ELEM *Elem);
4654 VOID MlmeReassocReqAction(
4655 IN PRTMP_ADAPTER pAd,
4656 IN MLME_QUEUE_ELEM *Elem);
4658 VOID MlmeDisassocReqAction(
4659 IN PRTMP_ADAPTER pAd,
4660 IN MLME_QUEUE_ELEM *Elem);
4662 VOID PeerAssocRspAction(
4663 IN PRTMP_ADAPTER pAd,
4664 IN MLME_QUEUE_ELEM *Elem);
4666 VOID PeerReassocRspAction(
4667 IN PRTMP_ADAPTER pAd,
4668 IN MLME_QUEUE_ELEM *Elem);
4670 VOID PeerDisassocAction(
4671 IN PRTMP_ADAPTER pAd,
4672 IN MLME_QUEUE_ELEM *Elem);
4674 VOID DisassocTimeoutAction(
4675 IN PRTMP_ADAPTER pAd,
4676 IN MLME_QUEUE_ELEM *Elem);
4678 VOID AssocTimeoutAction(
4679 IN PRTMP_ADAPTER pAd,
4680 IN MLME_QUEUE_ELEM *Elem);
4682 VOID ReassocTimeoutAction(
4683 IN PRTMP_ADAPTER pAd,
4684 IN MLME_QUEUE_ELEM *Elem);
4687 IN PRTMP_ADAPTER pAd,
4690 VOID SwitchBetweenWepAndCkip(
4691 IN PRTMP_ADAPTER pAd);
4693 VOID InvalidStateWhenAssoc(
4694 IN PRTMP_ADAPTER pAd,
4695 IN MLME_QUEUE_ELEM *Elem);
4697 VOID InvalidStateWhenReassoc(
4698 IN PRTMP_ADAPTER pAd,
4699 IN MLME_QUEUE_ELEM *Elem);
4701 VOID InvalidStateWhenDisassociate(
4702 IN PRTMP_ADAPTER pAd,
4703 IN MLME_QUEUE_ELEM *Elem);
4706 VOID MlmeCntlConfirm(
4707 IN PRTMP_ADAPTER pAd,
4713 IN PRTMP_ADAPTER pAd);
4715 VOID ComposeNullFrame(
4716 IN PRTMP_ADAPTER pAd);
4719 IN PRTMP_ADAPTER pAd,
4721 IN USHORT CapabilityInfo,
4724 IN UCHAR SupRateLen,
4726 IN UCHAR ExtRateLen,
4727 IN PEDCA_PARM pEdcaParm,
4728 IN HT_CAPABILITY_IE *pHtCapability,
4729 IN UCHAR HtCapabilityLen,
4730 IN ADD_HT_INFO_IE *pAddHtInfo);
4732 VOID AuthStateMachineInit(
4733 IN PRTMP_ADAPTER pAd,
4734 IN PSTATE_MACHINE sm,
4735 OUT STATE_MACHINE_FUNC Trans[]);
4738 IN PVOID SystemSpecific1,
4739 IN PVOID FunctionContext,
4740 IN PVOID SystemSpecific2,
4741 IN PVOID SystemSpecific3);
4743 VOID MlmeAuthReqAction(
4744 IN PRTMP_ADAPTER pAd,
4745 IN MLME_QUEUE_ELEM *Elem);
4747 VOID PeerAuthRspAtSeq2Action(
4748 IN PRTMP_ADAPTER pAd,
4749 IN MLME_QUEUE_ELEM *Elem);
4751 VOID PeerAuthRspAtSeq4Action(
4752 IN PRTMP_ADAPTER pAd,
4753 IN MLME_QUEUE_ELEM *Elem);
4755 VOID AuthTimeoutAction(
4756 IN PRTMP_ADAPTER pAd,
4757 IN MLME_QUEUE_ELEM *Elem);
4760 IN PRTMP_ADAPTER pAd,
4763 VOID MlmeDeauthReqAction(
4764 IN PRTMP_ADAPTER pAd,
4765 IN MLME_QUEUE_ELEM *Elem);
4767 VOID InvalidStateWhenAuth(
4768 IN PRTMP_ADAPTER pAd,
4769 IN MLME_QUEUE_ELEM *Elem);
4771 //=============================================
4773 VOID AuthRspStateMachineInit(
4774 IN PRTMP_ADAPTER pAd,
4775 IN PSTATE_MACHINE Sm,
4776 IN STATE_MACHINE_FUNC Trans[]);
4778 VOID PeerDeauthAction(
4779 IN PRTMP_ADAPTER pAd,
4780 IN MLME_QUEUE_ELEM *Elem);
4782 VOID PeerAuthSimpleRspGenAndSend(
4783 IN PRTMP_ADAPTER pAd,
4784 IN PHEADER_802_11 pHdr80211,
4791 // Private routines in dls.c
4794 #ifdef CONFIG_STA_SUPPORT
4795 #ifdef QOS_DLS_SUPPORT
4796 void DlsStateMachineInit(
4797 IN PRTMP_ADAPTER pAd,
4798 IN STATE_MACHINE *Sm,
4799 OUT STATE_MACHINE_FUNC Trans[]);
4801 VOID MlmeDlsReqAction(
4802 IN PRTMP_ADAPTER pAd,
4803 IN MLME_QUEUE_ELEM *Elem);
4805 VOID PeerDlsReqAction(
4806 IN PRTMP_ADAPTER pAd,
4807 IN MLME_QUEUE_ELEM *Elem);
4809 VOID PeerDlsRspAction(
4810 IN PRTMP_ADAPTER pAd,
4811 IN MLME_QUEUE_ELEM *Elem);
4813 VOID MlmeDlsTearDownAction(
4814 IN PRTMP_ADAPTER pAd,
4815 IN MLME_QUEUE_ELEM *Elem);
4817 VOID PeerDlsTearDownAction(
4818 IN PRTMP_ADAPTER pAd,
4819 IN MLME_QUEUE_ELEM *Elem);
4821 VOID RTMPCheckDLSTimeOut(
4822 IN PRTMP_ADAPTER pAd);
4824 BOOLEAN RTMPRcvFrameDLSCheck(
4825 IN PRTMP_ADAPTER pAd,
4826 IN PHEADER_802_11 pHeader,
4828 IN PRT28XX_RXD_STRUC pRxD);
4830 INT RTMPCheckDLSFrame(
4831 IN PRTMP_ADAPTER pAd,
4834 VOID RTMPSendDLSTearDownFrame(
4835 IN PRTMP_ADAPTER pAd,
4838 NDIS_STATUS RTMPSendSTAKeyRequest(
4839 IN PRTMP_ADAPTER pAd,
4842 NDIS_STATUS RTMPSendSTAKeyHandShake(
4843 IN PRTMP_ADAPTER pAd,
4846 VOID DlsTimeoutAction(
4847 IN PVOID SystemSpecific1,
4848 IN PVOID FunctionContext,
4849 IN PVOID SystemSpecific2,
4850 IN PVOID SystemSpecific3);
4852 BOOLEAN MlmeDlsReqSanity(
4853 IN PRTMP_ADAPTER pAd,
4856 OUT PRT_802_11_DLS *pDLS,
4857 OUT PUSHORT pReason);
4859 INT Set_DlsEntryInfo_Display_Proc(
4860 IN PRTMP_ADAPTER pAd,
4863 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4864 IN PRTMP_ADAPTER pAd,
4866 IN UINT DlsEntryIdx);
4868 BOOLEAN MacTableDeleteDlsEntry(
4869 IN PRTMP_ADAPTER pAd,
4873 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4874 IN PRTMP_ADAPTER pAd,
4876 IN BOOLEAN bResetIdelCount);
4878 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4879 IN PRTMP_ADAPTER pAd,
4882 IN BOOLEAN bResetIdelCount);
4884 INT Set_DlsAddEntry_Proc(
4885 IN PRTMP_ADAPTER pAd,
4888 INT Set_DlsTearDownEntry_Proc(
4889 IN PRTMP_ADAPTER pAd,
4891 #endif // QOS_DLS_SUPPORT //
4892 #endif // CONFIG_STA_SUPPORT //
4894 #ifdef QOS_DLS_SUPPORT
4895 BOOLEAN PeerDlsReqSanity(
4896 IN PRTMP_ADAPTER pAd,
4901 OUT USHORT *pCapabilityInfo,
4902 OUT USHORT *pDlsTimeout,
4903 OUT UCHAR *pRatesLen,
4905 OUT UCHAR *pHtCapabilityLen,
4906 OUT HT_CAPABILITY_IE *pHtCapability);
4908 BOOLEAN PeerDlsRspSanity(
4909 IN PRTMP_ADAPTER pAd,
4914 OUT USHORT *pCapabilityInfo,
4915 OUT USHORT *pStatus,
4916 OUT UCHAR *pRatesLen,
4918 OUT UCHAR *pHtCapabilityLen,
4919 OUT HT_CAPABILITY_IE *pHtCapability);
4921 BOOLEAN PeerDlsTearDownSanity(
4922 IN PRTMP_ADAPTER pAd,
4927 OUT USHORT *pReason);
4928 #endif // QOS_DLS_SUPPORT //
4930 //========================================
4932 VOID SyncStateMachineInit(
4933 IN PRTMP_ADAPTER pAd,
4934 IN STATE_MACHINE *Sm,
4935 OUT STATE_MACHINE_FUNC Trans[]);
4938 IN PVOID SystemSpecific1,
4939 IN PVOID FunctionContext,
4940 IN PVOID SystemSpecific2,
4941 IN PVOID SystemSpecific3);
4944 IN PVOID SystemSpecific1,
4945 IN PVOID FunctionContext,
4946 IN PVOID SystemSpecific2,
4947 IN PVOID SystemSpecific3);
4949 VOID MlmeScanReqAction(
4950 IN PRTMP_ADAPTER pAd,
4951 IN MLME_QUEUE_ELEM *Elem);
4953 VOID InvalidStateWhenScan(
4954 IN PRTMP_ADAPTER pAd,
4955 IN MLME_QUEUE_ELEM *Elem);
4957 VOID InvalidStateWhenJoin(
4958 IN PRTMP_ADAPTER pAd,
4959 IN MLME_QUEUE_ELEM *Elem);
4961 VOID InvalidStateWhenStart(
4962 IN PRTMP_ADAPTER pAd,
4963 IN MLME_QUEUE_ELEM *Elem);
4966 IN PRTMP_ADAPTER pAd,
4967 IN MLME_QUEUE_ELEM *Elem);
4969 VOID EnqueueProbeRequest(
4970 IN PRTMP_ADAPTER pAd);
4972 BOOLEAN ScanRunning(
4973 IN PRTMP_ADAPTER pAd);
4974 //=========================================
4977 IN PRTMP_ADAPTER pAd,
4978 IN STATE_MACHINE *S,
4979 OUT STATE_MACHINE_FUNC Trans[]);
4981 VOID MlmeCntlMachinePerformAction(
4982 IN PRTMP_ADAPTER pAd,
4983 IN STATE_MACHINE *S,
4984 IN MLME_QUEUE_ELEM *Elem);
4987 IN PRTMP_ADAPTER pAd,
4988 IN MLME_QUEUE_ELEM *Elem);
4990 VOID CntlOidScanProc(
4991 IN PRTMP_ADAPTER pAd,
4992 IN MLME_QUEUE_ELEM *Elem);
4994 VOID CntlOidSsidProc(
4995 IN PRTMP_ADAPTER pAd,
4996 IN MLME_QUEUE_ELEM * Elem);
4998 VOID CntlOidRTBssidProc(
4999 IN PRTMP_ADAPTER pAd,
5000 IN MLME_QUEUE_ELEM * Elem);
5002 VOID CntlMlmeRoamingProc(
5003 IN PRTMP_ADAPTER pAd,
5004 IN MLME_QUEUE_ELEM * Elem);
5006 VOID CntlWaitDisassocProc(
5007 IN PRTMP_ADAPTER pAd,
5008 IN MLME_QUEUE_ELEM *Elem);
5010 VOID CntlWaitJoinProc(
5011 IN PRTMP_ADAPTER pAd,
5012 IN MLME_QUEUE_ELEM *Elem);
5014 VOID CntlWaitReassocProc(
5015 IN PRTMP_ADAPTER pAd,
5016 IN MLME_QUEUE_ELEM *Elem);
5018 VOID CntlWaitStartProc(
5019 IN PRTMP_ADAPTER pAd,
5020 IN MLME_QUEUE_ELEM *Elem);
5022 VOID CntlWaitAuthProc(
5023 IN PRTMP_ADAPTER pAd,
5024 IN MLME_QUEUE_ELEM *Elem);
5026 VOID CntlWaitAuthProc2(
5027 IN PRTMP_ADAPTER pAd,
5028 IN MLME_QUEUE_ELEM *Elem);
5030 VOID CntlWaitAssocProc(
5031 IN PRTMP_ADAPTER pAd,
5032 IN MLME_QUEUE_ELEM *Elem);
5034 #ifdef QOS_DLS_SUPPORT
5035 VOID CntlOidDLSSetupProc(
5036 IN PRTMP_ADAPTER pAd,
5037 IN MLME_QUEUE_ELEM *Elem);
5038 #endif // QOS_DLS_SUPPORT //
5041 IN PRTMP_ADAPTER pAd,
5045 IN PRTMP_ADAPTER pAd,
5046 IN BOOLEAN IsReqFromAP);
5048 VOID IterateOnBssTab(
5049 IN PRTMP_ADAPTER pAd);
5051 VOID IterateOnBssTab2(
5052 IN PRTMP_ADAPTER pAd);;
5055 IN PRTMP_ADAPTER pAd,
5056 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5060 IN PRTMP_ADAPTER pAd,
5061 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5063 IN USHORT CapabilityInfo,
5065 IN USHORT ListenIntv);
5068 IN PRTMP_ADAPTER pAd,
5069 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5075 VOID DisassocParmFill(
5076 IN PRTMP_ADAPTER pAd,
5077 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5082 IN PRTMP_ADAPTER pAd,
5083 IN OUT MLME_START_REQ_STRUCT *StartReq,
5088 IN PRTMP_ADAPTER pAd,
5089 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5094 IN PRTMP_ADAPTER pAd);
5096 VOID EnqueueBeaconFrame(
5097 IN PRTMP_ADAPTER pAd);
5099 VOID MlmeJoinReqAction(
5100 IN PRTMP_ADAPTER pAd,
5101 IN MLME_QUEUE_ELEM *Elem);
5103 VOID MlmeScanReqAction(
5104 IN PRTMP_ADAPTER pAd,
5105 IN MLME_QUEUE_ELEM *Elem);
5107 VOID MlmeStartReqAction(
5108 IN PRTMP_ADAPTER pAd,
5109 IN MLME_QUEUE_ELEM *Elem);
5111 VOID ScanTimeoutAction(
5112 IN PRTMP_ADAPTER pAd,
5113 IN MLME_QUEUE_ELEM *Elem);
5115 VOID BeaconTimeoutAtJoinAction(
5116 IN PRTMP_ADAPTER pAd,
5117 IN MLME_QUEUE_ELEM *Elem);
5119 VOID PeerBeaconAtScanAction(
5120 IN PRTMP_ADAPTER pAd,
5121 IN MLME_QUEUE_ELEM *Elem);
5123 VOID PeerBeaconAtJoinAction(
5124 IN PRTMP_ADAPTER pAd,
5125 IN MLME_QUEUE_ELEM *Elem);
5128 IN PRTMP_ADAPTER pAd,
5129 IN MLME_QUEUE_ELEM *Elem);
5131 VOID PeerProbeReqAction(
5132 IN PRTMP_ADAPTER pAd,
5133 IN MLME_QUEUE_ELEM *Elem);
5135 VOID ScanNextChannel(
5136 IN PRTMP_ADAPTER pAd);
5138 ULONG MakeIbssBeacon(
5139 IN PRTMP_ADAPTER pAd);
5141 VOID CCXAdjacentAPReport(
5142 IN PRTMP_ADAPTER pAd);
5144 BOOLEAN MlmeScanReqSanity(
5145 IN PRTMP_ADAPTER pAd,
5151 OUT UCHAR *ScanType);
5153 BOOLEAN PeerBeaconAndProbeRspSanity(
5154 IN PRTMP_ADAPTER pAd,
5157 IN UCHAR MsgChannel,
5161 OUT UCHAR *pSsidLen,
5162 OUT UCHAR *pBssType,
5163 OUT USHORT *pBeaconPeriod,
5164 OUT UCHAR *pChannel,
5165 OUT UCHAR *pNewChannel,
5166 OUT LARGE_INTEGER *pTimestamp,
5167 OUT CF_PARM *pCfParm,
5168 OUT USHORT *pAtimWin,
5169 OUT USHORT *pCapabilityInfo,
5171 OUT UCHAR *pDtimCount,
5172 OUT UCHAR *pDtimPeriod,
5173 OUT UCHAR *pBcastFlag,
5174 OUT UCHAR *pMessageToMe,
5175 OUT UCHAR SupRate[],
5176 OUT UCHAR *pSupRateLen,
5177 OUT UCHAR ExtRate[],
5178 OUT UCHAR *pExtRateLen,
5179 OUT UCHAR *pCkipFlag,
5180 OUT UCHAR *pAironetCellPowerLimit,
5181 OUT PEDCA_PARM pEdcaParm,
5182 OUT PQBSS_LOAD_PARM pQbssLoad,
5183 OUT PQOS_CAPABILITY_PARM pQosCapability,
5184 OUT ULONG *pRalinkIe,
5185 OUT UCHAR *pHtCapabilityLen,
5186 #ifdef CONFIG_STA_SUPPORT
5187 OUT UCHAR *pPreNHtCapabilityLen,
5188 #endif // CONFIG_STA_SUPPORT //
5189 OUT HT_CAPABILITY_IE *pHtCapability,
5190 OUT UCHAR *AddHtInfoLen,
5191 OUT ADD_HT_INFO_IE *AddHtInfo,
5192 OUT UCHAR *NewExtChannel,
5193 OUT USHORT *LengthVIE,
5194 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5196 BOOLEAN PeerAddBAReqActionSanity(
5197 IN PRTMP_ADAPTER pAd,
5202 BOOLEAN PeerAddBARspActionSanity(
5203 IN PRTMP_ADAPTER pAd,
5207 BOOLEAN PeerDelBAActionSanity(
5208 IN PRTMP_ADAPTER pAd,
5213 BOOLEAN MlmeAssocReqSanity(
5214 IN PRTMP_ADAPTER pAd,
5218 OUT USHORT *CapabilityInfo,
5220 OUT USHORT *ListenIntv);
5222 BOOLEAN MlmeAuthReqSanity(
5223 IN PRTMP_ADAPTER pAd,
5230 BOOLEAN MlmeStartReqSanity(
5231 IN PRTMP_ADAPTER pAd,
5235 OUT UCHAR *Ssidlen);
5237 BOOLEAN PeerAuthSanity(
5238 IN PRTMP_ADAPTER pAd,
5245 OUT CHAR ChlgText[]);
5247 BOOLEAN PeerAssocRspSanity(
5248 IN PRTMP_ADAPTER pAd,
5252 OUT USHORT *pCapabilityInfo,
5253 OUT USHORT *pStatus,
5255 OUT UCHAR SupRate[],
5256 OUT UCHAR *pSupRateLen,
5257 OUT UCHAR ExtRate[],
5258 OUT UCHAR *pExtRateLen,
5259 OUT HT_CAPABILITY_IE *pHtCapability,
5260 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5261 OUT UCHAR *pHtCapabilityLen,
5262 OUT UCHAR *pAddHtInfoLen,
5263 OUT UCHAR *pNewExtChannelOffset,
5264 OUT PEDCA_PARM pEdcaParm,
5265 OUT UCHAR *pCkipFlag);
5267 BOOLEAN PeerDisassocSanity(
5268 IN PRTMP_ADAPTER pAd,
5272 OUT USHORT *Reason);
5274 BOOLEAN PeerWpaMessageSanity(
5275 IN PRTMP_ADAPTER pAd,
5276 IN PEAPOL_PACKET pMsg,
5279 IN MAC_TABLE_ENTRY *pEntry);
5281 BOOLEAN PeerDeauthSanity(
5282 IN PRTMP_ADAPTER pAd,
5286 OUT USHORT *Reason);
5288 BOOLEAN PeerProbeReqSanity(
5289 IN PRTMP_ADAPTER pAd,
5294 OUT UCHAR *pSsidLen);
5300 OUT UCHAR *BcastFlag,
5301 OUT UCHAR *DtimCount,
5302 OUT UCHAR *DtimPeriod,
5303 OUT UCHAR *MessageToMe);
5305 UCHAR ChannelSanity(
5306 IN PRTMP_ADAPTER pAd,
5309 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5310 IN PBSS_ENTRY pBss);
5312 #if 0 // It's omitted
5313 NDIS_STATUS RTMPWepKeySanity(
5314 IN PRTMP_ADAPTER pAdapter,
5318 BOOLEAN MlmeDelBAReqSanity(
5319 IN PRTMP_ADAPTER pAd,
5323 BOOLEAN MlmeAddBAReqSanity(
5324 IN PRTMP_ADAPTER pAd,
5329 ULONG MakeOutgoingFrame(
5331 OUT ULONG *Length, ...);
5334 IN PRTMP_ADAPTER pAd,
5338 IN PRTMP_ADAPTER pAd);
5340 VOID AsicUpdateAutoFallBackTable(
5341 IN PRTMP_ADAPTER pAd,
5344 VOID MlmePeriodicExec(
5345 IN PVOID SystemSpecific1,
5346 IN PVOID FunctionContext,
5347 IN PVOID SystemSpecific2,
5348 IN PVOID SystemSpecific3);
5351 IN PVOID SystemSpecific1,
5352 IN PVOID FunctionContext,
5353 IN PVOID SystemSpecific2,
5354 IN PVOID SystemSpecific3);
5357 IN PVOID SystemSpecific1,
5358 IN PVOID FunctionContext,
5359 IN PVOID SystemSpecific2,
5360 IN PVOID SystemSpecific3);
5362 VOID STAMlmePeriodicExec(
5366 IN PRTMP_ADAPTER pAd);
5368 VOID MlmeAutoReconnectLastSSID(
5369 IN PRTMP_ADAPTER pAd);
5371 BOOLEAN MlmeValidateSSID(
5375 VOID MlmeCheckForRoaming(
5376 IN PRTMP_ADAPTER pAd,
5379 VOID MlmeCheckForFastRoaming(
5380 IN PRTMP_ADAPTER pAd,
5383 VOID MlmeDynamicTxRateSwitching(
5384 IN PRTMP_ADAPTER pAd);
5387 IN PRTMP_ADAPTER pAd,
5388 IN PMAC_TABLE_ENTRY pEntry,
5389 IN PRTMP_TX_RATE_SWITCH pTxRate);
5391 VOID MlmeSelectTxRateTable(
5392 IN PRTMP_ADAPTER pAd,
5393 IN PMAC_TABLE_ENTRY pEntry,
5395 IN PUCHAR pTableSize,
5396 IN PUCHAR pInitTxRateIdx);
5398 VOID MlmeCalculateChannelQuality(
5399 IN PRTMP_ADAPTER pAd,
5402 VOID MlmeCheckPsmChange(
5403 IN PRTMP_ADAPTER pAd,
5407 IN PRTMP_ADAPTER pAd,
5410 VOID MlmeSetTxPreamble(
5411 IN PRTMP_ADAPTER pAd,
5412 IN USHORT TxPreamble);
5414 VOID UpdateBasicRateBitmap(
5415 IN PRTMP_ADAPTER pAd);
5417 VOID MlmeUpdateTxRates(
5418 IN PRTMP_ADAPTER pAd,
5422 #ifdef DOT11_N_SUPPORT
5423 VOID MlmeUpdateHtTxRates(
5424 IN PRTMP_ADAPTER pAd,
5426 #endif // DOT11_N_SUPPORT //
5428 VOID RTMPCheckRates(
5429 IN PRTMP_ADAPTER pAd,
5430 IN OUT UCHAR SupRate[],
5431 IN OUT UCHAR *SupRateLen);
5433 #ifdef CONFIG_STA_SUPPORT
5434 BOOLEAN RTMPCheckChannel(
5435 IN PRTMP_ADAPTER pAd,
5436 IN UCHAR CentralChannel,
5438 #endif // CONFIG_STA_SUPPORT //
5440 BOOLEAN RTMPCheckHt(
5441 IN PRTMP_ADAPTER pAd,
5443 IN OUT HT_CAPABILITY_IE *pHtCapability,
5444 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5446 VOID StaQuickResponeForRateUpExec(
5447 IN PVOID SystemSpecific1,
5448 IN PVOID FunctionContext,
5449 IN PVOID SystemSpecific2,
5450 IN PVOID SystemSpecific3);
5452 VOID AsicBbpTuning1(
5453 IN PRTMP_ADAPTER pAd);
5455 VOID AsicBbpTuning2(
5456 IN PRTMP_ADAPTER pAd);
5458 VOID RTMPUpdateMlmeRate(
5459 IN PRTMP_ADAPTER pAd);
5462 IN PRTMP_ADAPTER pAd,
5467 VOID AsicEvaluateRxAnt(
5468 IN PRTMP_ADAPTER pAd);
5470 VOID AsicRxAntEvalTimeout(
5471 IN PVOID SystemSpecific1,
5472 IN PVOID FunctionContext,
5473 IN PVOID SystemSpecific2,
5474 IN PVOID SystemSpecific3);
5476 VOID APSDPeriodicExec(
5477 IN PVOID SystemSpecific1,
5478 IN PVOID FunctionContext,
5479 IN PVOID SystemSpecific2,
5480 IN PVOID SystemSpecific3);
5482 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5483 IN PRTMP_ADAPTER pAd,
5484 IN PMAC_TABLE_ENTRY pEntry);
5486 UCHAR RTMPStaFixedTxMode(
5487 IN PRTMP_ADAPTER pAd,
5488 IN PMAC_TABLE_ENTRY pEntry);
5490 VOID RTMPUpdateLegacyTxSetting(
5491 UCHAR fixed_tx_mode,
5492 PMAC_TABLE_ENTRY pEntry);
5494 BOOLEAN RTMPAutoRateSwitchCheck(
5495 IN PRTMP_ADAPTER pAd);
5497 NDIS_STATUS MlmeInit(
5498 IN PRTMP_ADAPTER pAd);
5501 IN PRTMP_ADAPTER pAd);
5504 IN PRTMP_ADAPTER pAd);
5506 VOID MlmeResetRalinkCounters(
5507 IN PRTMP_ADAPTER pAd);
5509 VOID BuildChannelList(
5510 IN PRTMP_ADAPTER pAd);
5513 IN PRTMP_ADAPTER pAd);
5516 IN PRTMP_ADAPTER pAd,
5519 VOID ChangeToCellPowerLimit(
5520 IN PRTMP_ADAPTER pAd,
5521 IN UCHAR AironetCellPowerLimit);
5524 IN PRTMP_ADAPTER pAd,
5528 IN PRTMP_ADAPTER pAd,
5532 IN PRTMP_ADAPTER pAd);
5535 IN PRTMP_ADAPTER pAd,
5540 IN PRTMP_ADAPTER pAd);
5543 IN PRTMP_ADAPTER pAd);
5546 IN PRTMP_ADAPTER pAd);
5548 USHORT RTMP_EEPROM_READ16(
5549 IN PRTMP_ADAPTER pAd,
5552 VOID RTMP_EEPROM_WRITE16(
5553 IN PRTMP_ADAPTER pAd,
5558 // Prototypes of function definition in rtmp_tkip.c
5560 VOID RTMPInitTkipEngine(
5561 IN PRTMP_ADAPTER pAd,
5570 VOID RTMPInitMICEngine(
5571 IN PRTMP_ADAPTER pAd,
5575 IN UCHAR UserPriority,
5578 BOOLEAN RTMPTkipCompareMICValue(
5579 IN PRTMP_ADAPTER pAd,
5584 IN UCHAR UserPriority,
5587 VOID RTMPCalculateMICValue(
5588 IN PRTMP_ADAPTER pAd,
5589 IN PNDIS_PACKET pPacket,
5591 IN PCIPHER_KEY pKey,
5594 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5595 IN PRTMP_ADAPTER pAd,
5603 VOID RTMPTkipAppendByte(
5604 IN PTKIP_KEY_INFO pTkip,
5607 VOID RTMPTkipAppend(
5608 IN PTKIP_KEY_INFO pTkip,
5612 VOID RTMPTkipGetMIC(
5613 IN PTKIP_KEY_INFO pTkip);
5615 BOOLEAN RTMPSoftDecryptTKIP(
5616 IN PRTMP_ADAPTER pAd,
5618 IN ULONG DataByteCnt,
5619 IN UCHAR UserPriority,
5620 IN PCIPHER_KEY pWpaKey);
5622 BOOLEAN RTMPSoftDecryptAES(
5623 IN PRTMP_ADAPTER pAd,
5625 IN ULONG DataByteCnt,
5626 IN PCIPHER_KEY pWpaKey);
5628 #if 0 // removed by AlbertY
5629 NDIS_STATUS RTMPWPAAddKeyProc(
5630 IN PRTMP_ADAPTER pAd,
5635 // Prototypes of function definition in cmm_info.c
5637 NDIS_STATUS RTMPWPARemoveKeyProc(
5638 IN PRTMP_ADAPTER pAd,
5641 VOID RTMPWPARemoveAllKeys(
5642 IN PRTMP_ADAPTER pAd);
5644 BOOLEAN RTMPCheckStrPrintAble(
5648 VOID RTMPSetPhyMode(
5649 IN PRTMP_ADAPTER pAd,
5652 VOID RTMPUpdateHTIE(
5653 IN RT_HT_CAPABILITY *pRtHt,
5655 OUT HT_CAPABILITY_IE *pHtCapability,
5656 OUT ADD_HT_INFO_IE *pAddHtInfo);
5658 VOID RTMPAddWcidAttributeEntry(
5659 IN PRTMP_ADAPTER pAd,
5663 IN MAC_TABLE_ENTRY *pEntry);
5665 CHAR *GetEncryptType(
5671 VOID RTMPIoctlGetSiteSurvey(
5672 IN PRTMP_ADAPTER pAdapter,
5673 IN struct iwreq *wrq);
5675 VOID RTMPIoctlGetMacTable(
5676 IN PRTMP_ADAPTER pAd,
5677 IN struct iwreq *wrq);
5679 VOID RTMPIndicateWPA2Status(
5680 IN PRTMP_ADAPTER pAdapter);
5682 VOID RTMPOPModeSwitching(
5683 IN PRTMP_ADAPTER pAd);
5685 #ifdef CONFIG_STA_SUPPORT
5686 VOID RTMPAddBSSIDCipher(
5687 IN PRTMP_ADAPTER pAd,
5689 IN PNDIS_802_11_KEY pKey,
5690 IN UCHAR CipherAlg);
5691 #endif // CONFIG_STA_SUPPORT //
5693 #ifdef DOT11_N_SUPPORT
5695 IN PRTMP_ADAPTER pAd,
5696 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5698 VOID RTMPSetIndividualHT(
5699 IN PRTMP_ADAPTER pAd,
5701 #endif // DOT11_N_SUPPORT //
5703 VOID RTMPSendWirelessEvent(
5704 IN PRTMP_ADAPTER pAd,
5705 IN USHORT Event_flag,
5710 VOID NICUpdateCntlCounters(
5711 IN PRTMP_ADAPTER pAd,
5712 IN PHEADER_802_11 pHeader,
5714 IN PRXWI_STRUC pRxWI);
5716 // prototype in wpa.c
5718 BOOLEAN WpaMsgTypeSubst(
5722 VOID WpaPskStateMachineInit(
5723 IN PRTMP_ADAPTER pAd,
5724 IN STATE_MACHINE *S,
5725 OUT STATE_MACHINE_FUNC Trans[]);
5727 VOID WpaEAPOLKeyAction(
5728 IN PRTMP_ADAPTER pAd,
5729 IN MLME_QUEUE_ELEM *Elem);
5731 VOID WpaPairMsg1Action(
5732 IN PRTMP_ADAPTER pAd,
5733 IN MLME_QUEUE_ELEM *Elem);
5735 VOID WpaPairMsg3Action(
5736 IN PRTMP_ADAPTER pAd,
5737 IN MLME_QUEUE_ELEM *Elem);
5739 VOID WpaGroupMsg1Action(
5740 IN PRTMP_ADAPTER pAd,
5741 IN MLME_QUEUE_ELEM *Elem);
5743 VOID WpaMacHeaderInit(
5744 IN PRTMP_ADAPTER pAd,
5745 IN OUT PHEADER_802_11 pHdr80211,
5749 VOID Wpa2PairMsg1Action(
5750 IN PRTMP_ADAPTER pAd,
5751 IN MLME_QUEUE_ELEM *Elem);
5753 VOID Wpa2PairMsg3Action(
5754 IN PRTMP_ADAPTER pAd,
5755 IN MLME_QUEUE_ELEM *Elem);
5757 BOOLEAN ParseKeyData(
5758 IN PRTMP_ADAPTER pAd,
5760 IN UCHAR KeyDataLen,
5761 IN UCHAR bPairewise);
5763 VOID RTMPToWirelessSta(
5764 IN PRTMP_ADAPTER pAd,
5765 IN PUCHAR pHeader802_3,
5769 IN BOOLEAN is4wayFrame);
5797 IN PRTMP_ADAPTER pAd,
5807 IN PRTMP_ADAPTER pAd,
5812 // prototype in aironet.c
5814 VOID AironetStateMachineInit(
5815 IN PRTMP_ADAPTER pAd,
5816 IN STATE_MACHINE *S,
5817 OUT STATE_MACHINE_FUNC Trans[]);
5819 VOID AironetMsgAction(
5820 IN PRTMP_ADAPTER pAd,
5821 IN MLME_QUEUE_ELEM *Elem);
5823 VOID AironetRequestAction(
5824 IN PRTMP_ADAPTER pAd,
5825 IN MLME_QUEUE_ELEM *Elem);
5827 VOID ChannelLoadRequestAction(
5828 IN PRTMP_ADAPTER pAd,
5831 VOID NoiseHistRequestAction(
5832 IN PRTMP_ADAPTER pAd,
5835 VOID BeaconRequestAction(
5836 IN PRTMP_ADAPTER pAd,
5839 VOID AironetReportAction(
5840 IN PRTMP_ADAPTER pAd,
5841 IN MLME_QUEUE_ELEM *Elem);
5843 VOID ChannelLoadReportAction(
5844 IN PRTMP_ADAPTER pAd,
5847 VOID NoiseHistReportAction(
5848 IN PRTMP_ADAPTER pAd,
5851 VOID AironetFinalReportAction(
5852 IN PRTMP_ADAPTER pAd);
5854 VOID BeaconReportAction(
5855 IN PRTMP_ADAPTER pAd,
5858 VOID AironetAddBeaconReport(
5859 IN PRTMP_ADAPTER pAd,
5861 IN PMLME_QUEUE_ELEM pElem);
5863 VOID AironetCreateBeaconReportFromBssTable(
5864 IN PRTMP_ADAPTER pAd);
5866 VOID DBGPRINT_TX_RING(
5867 IN PRTMP_ADAPTER pAd,
5870 VOID DBGPRINT_RX_RING(
5871 IN PRTMP_ADAPTER pAd);
5874 IN PRTMP_ADAPTER pAd,
5876 IN UCHAR RssiNumber);
5879 #ifdef DOT11N_DRAFT3
5880 VOID BuildEffectedChannelList(
5881 IN PRTMP_ADAPTER pAd);
5882 #endif // DOT11N_DRAFT3 //
5885 VOID APAsicEvaluateRxAnt(
5886 IN PRTMP_ADAPTER pAd);
5889 VOID APAsicRxAntEvalTimeout(
5890 IN PRTMP_ADAPTER pAd);
5893 // function prototype in cmm_wpa.c
5895 BOOLEAN RTMPCheckWPAframe(
5896 IN PRTMP_ADAPTER pAd,
5897 IN PMAC_TABLE_ENTRY pEntry,
5899 IN ULONG DataByteCount,
5900 IN UCHAR FromWhichBSSID);
5902 VOID AES_GTK_KEY_UNWRAP(
5904 OUT UCHAR *plaintext,
5906 IN UCHAR *ciphertext);
5908 BOOLEAN RTMPCheckRSNIE(
5909 IN PRTMP_ADAPTER pAd,
5912 IN MAC_TABLE_ENTRY *pEntry,
5915 BOOLEAN RTMPParseEapolKeyData(
5916 IN PRTMP_ADAPTER pAd,
5918 IN UCHAR KeyDataLen,
5919 IN UCHAR GroupKeyIndex,
5922 IN MAC_TABLE_ENTRY *pEntry);
5924 VOID ConstructEapolMsg(
5925 IN PRTMP_ADAPTER pAd,
5926 IN UCHAR PeerAuthMode,
5927 IN UCHAR PeerWepStatus,
5928 IN UCHAR MyGroupKeyWepStatus,
5930 IN UCHAR DefaultKeyIdx,
5931 IN UCHAR *ReplayCounter,
5938 OUT PEAPOL_PACKET pMsg);
5941 IN PRTMP_ADAPTER pAd,
5942 IN UCHAR PeerWepStatus,
5944 OUT PEAPOL_PACKET pMsg);
5946 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5947 IN PRTMP_ADAPTER pAd,
5949 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5950 IN PCIPHER_KEY pShard_key);
5952 VOID ConstructEapolKeyData(
5953 IN PRTMP_ADAPTER pAd,
5954 IN UCHAR PeerAuthMode,
5955 IN UCHAR PeerWepStatus,
5956 IN UCHAR GroupKeyWepStatus,
5958 IN UCHAR DefaultKeyIdx,
5959 IN BOOLEAN bWPA2Capable,
5964 OUT PEAPOL_PACKET pMsg);
5967 IN PRTMP_ADAPTER pAd,
5973 // function prototype in ap_wpa.c
5976 BOOLEAN APWpaMsgTypeSubst(
5980 MAC_TABLE_ENTRY *PACInquiry(
5981 IN PRTMP_ADAPTER pAd,
5984 BOOLEAN RTMPCheckMcast(
5985 IN PRTMP_ADAPTER pAd,
5986 IN PEID_STRUCT eid_ptr,
5987 IN MAC_TABLE_ENTRY *pEntry);
5989 BOOLEAN RTMPCheckUcast(
5990 IN PRTMP_ADAPTER pAd,
5991 IN PEID_STRUCT eid_ptr,
5992 IN MAC_TABLE_ENTRY *pEntry);
5994 BOOLEAN RTMPCheckAUTH(
5995 IN PRTMP_ADAPTER pAd,
5996 IN PEID_STRUCT eid_ptr,
5997 IN MAC_TABLE_ENTRY *pEntry);
5999 VOID WPAStart4WayHS(
6000 IN PRTMP_ADAPTER pAd,
6001 IN MAC_TABLE_ENTRY *pEntry,
6002 IN ULONG TimeInterval);
6004 VOID WPAStart2WayGroupHS(
6005 IN PRTMP_ADAPTER pAd,
6006 IN MAC_TABLE_ENTRY *pEntry);
6008 VOID APWpaEAPPacketAction(
6009 IN PRTMP_ADAPTER pAd,
6010 IN MLME_QUEUE_ELEM *Elem);
6012 VOID APWpaEAPOLStartAction(
6013 IN PRTMP_ADAPTER pAd,
6014 IN MLME_QUEUE_ELEM *Elem);
6016 VOID APWpaEAPOLLogoffAction(
6017 IN PRTMP_ADAPTER pAd,
6018 IN MLME_QUEUE_ELEM *Elem);
6020 VOID APWpaEAPOLKeyAction(
6021 IN PRTMP_ADAPTER pAd,
6022 IN MLME_QUEUE_ELEM *Elem);
6024 VOID APWpaEAPOLASFAlertAction(
6025 IN PRTMP_ADAPTER pAd,
6026 IN MLME_QUEUE_ELEM *Elem);
6028 VOID HandleCounterMeasure(
6029 IN PRTMP_ADAPTER pAd,
6030 IN MAC_TABLE_ENTRY *pEntry);
6032 VOID PeerPairMsg2Action(
6033 IN PRTMP_ADAPTER pAd,
6034 IN MAC_TABLE_ENTRY *pEntry,
6035 IN MLME_QUEUE_ELEM *Elem);
6037 VOID PeerPairMsg4Action(
6038 IN PRTMP_ADAPTER pAd,
6039 IN MAC_TABLE_ENTRY *pEntry,
6040 IN MLME_QUEUE_ELEM *Elem);
6043 IN PVOID SystemSpecific1,
6044 IN PVOID FunctionContext,
6045 IN PVOID SystemSpecific2,
6046 IN PVOID SystemSpecific3);
6049 IN PVOID SystemSpecific1,
6050 IN PVOID FunctionContext,
6051 IN PVOID SystemSpecific2,
6052 IN PVOID SystemSpecific3);
6054 VOID EnqueueStartForPSKExec(
6055 IN PVOID SystemSpecific1,
6056 IN PVOID FunctionContext,
6057 IN PVOID SystemSpecific2,
6058 IN PVOID SystemSpecific3);
6060 VOID RTMPHandleSTAKey(
6061 IN PRTMP_ADAPTER pAdapter,
6062 IN MAC_TABLE_ENTRY *pEntry,
6063 IN MLME_QUEUE_ELEM *Elem);
6065 #if 0 // merge into PeerPairMsg4Action
6066 VOID Wpa1PeerPairMsg4Action(
6067 IN PRTMP_ADAPTER pAd,
6068 IN MAC_TABLE_ENTRY *pEntry,
6069 IN MLME_QUEUE_ELEM *Elem);
6071 VOID Wpa2PeerPairMsg4Action(
6072 IN PRTMP_ADAPTER pAd,
6073 IN PMAC_TABLE_ENTRY pEntry,
6074 IN MLME_QUEUE_ELEM *Elem);
6077 VOID PeerGroupMsg2Action(
6078 IN PRTMP_ADAPTER pAd,
6079 IN PMAC_TABLE_ENTRY pEntry,
6083 #if 0 // replaced by WPAStart2WayGroupHS
6084 NDIS_STATUS APWpaHardTransmit(
6085 IN PRTMP_ADAPTER pAd,
6086 IN PMAC_TABLE_ENTRY pEntry);
6089 VOID PairDisAssocAction(
6090 IN PRTMP_ADAPTER pAd,
6091 IN PMAC_TABLE_ENTRY pEntry,
6094 VOID MlmeDeAuthAction(
6095 IN PRTMP_ADAPTER pAd,
6096 IN PMAC_TABLE_ENTRY pEntry,
6099 VOID GREKEYPeriodicExec(
6100 IN PVOID SystemSpecific1,
6101 IN PVOID FunctionContext,
6102 IN PVOID SystemSpecific2,
6103 IN PVOID SystemSpecific3);
6125 IN PRTMP_ADAPTER pAd,
6128 VOID AES_GTK_KEY_WRAP(
6130 IN UCHAR *plaintext,
6132 OUT UCHAR *ciphertext);
6135 IN PRTMP_ADAPTER pAdapter,
6139 VOID APToWirelessSta(
6140 IN PRTMP_ADAPTER pAd,
6141 IN MAC_TABLE_ENTRY *pEntry,
6142 IN PUCHAR pHeader802_3,
6146 IN BOOLEAN bClearFrame);
6148 VOID RTMPAddPMKIDCache(
6149 IN PRTMP_ADAPTER pAd,
6155 INT RTMPSearchPMKIDCache(
6156 IN PRTMP_ADAPTER pAd,
6160 VOID RTMPDeletePMKIDCache(
6161 IN PRTMP_ADAPTER pAd,
6165 VOID RTMPMaintainPMKIDCache(
6166 IN PRTMP_ADAPTER pAd);
6168 VOID RTMPSendTriggerFrame(
6169 IN PRTMP_ADAPTER pAd,
6173 IN BOOLEAN bQosNull);
6176 //typedef void (*TIMER_FUNCTION)(unsigned long);
6180 VOID RTMP_SetPeriodicTimer(
6181 IN NDIS_MINIPORT_TIMER *pTimer,
6182 IN unsigned long timeout);
6184 VOID RTMP_OS_Init_Timer(
6185 IN PRTMP_ADAPTER pAd,
6186 IN NDIS_MINIPORT_TIMER *pTimer,
6187 IN TIMER_FUNCTION function,
6190 VOID RTMP_OS_Add_Timer(
6191 IN NDIS_MINIPORT_TIMER *pTimer,
6192 IN unsigned long timeout);
6194 VOID RTMP_OS_Mod_Timer(
6195 IN NDIS_MINIPORT_TIMER *pTimer,
6196 IN unsigned long timeout);
6199 VOID RTMP_OS_Del_Timer(
6200 IN NDIS_MINIPORT_TIMER *pTimer,
6201 OUT BOOLEAN *pCancelled);
6204 VOID RTMP_OS_Release_Packet(
6205 IN PRTMP_ADAPTER pAd,
6206 IN PQUEUE_ENTRY pEntry);
6211 NDIS_STATUS os_alloc_mem(
6212 IN PRTMP_ADAPTER pAd,
6216 NDIS_STATUS os_free_mem(
6217 IN PRTMP_ADAPTER pAd,
6221 void RTMP_AllocateSharedMemory(
6222 IN PRTMP_ADAPTER pAd,
6225 OUT PVOID *VirtualAddress,
6226 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6228 VOID RTMPFreeTxRxRingMemory(
6229 IN PRTMP_ADAPTER pAd);
6231 NDIS_STATUS AdapterBlockAllocateMemory(
6235 void RTMP_AllocateTxDescMemory(
6236 IN PRTMP_ADAPTER pAd,
6240 OUT PVOID *VirtualAddress,
6241 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6243 void RTMP_AllocateFirstTxBuffer(
6244 IN PRTMP_ADAPTER pAd,
6248 OUT PVOID *VirtualAddress,
6249 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6251 void RTMP_AllocateMgmtDescMemory(
6252 IN PRTMP_ADAPTER pAd,
6255 OUT PVOID *VirtualAddress,
6256 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6258 void RTMP_AllocateRxDescMemory(
6259 IN PRTMP_ADAPTER pAd,
6262 OUT PVOID *VirtualAddress,
6263 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6265 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6266 IN PRTMP_ADAPTER pAd,
6269 OUT PVOID *VirtualAddress,
6270 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6272 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6273 IN PRTMP_ADAPTER pAd,
6276 OUT PVOID *VirtualAddress);
6278 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6279 IN PRTMP_ADAPTER pAd,
6282 void RTMP_QueryPacketInfo(
6283 IN PNDIS_PACKET pPacket,
6284 OUT PACKET_INFO *pPacketInfo,
6285 OUT PUCHAR *pSrcBufVA,
6286 OUT UINT *pSrcBufLen);
6288 void RTMP_QueryNextPacketInfo(
6289 IN PNDIS_PACKET *ppPacket,
6290 OUT PACKET_INFO *pPacketInfo,
6291 OUT PUCHAR *pSrcBufVA,
6292 OUT UINT *pSrcBufLen);
6295 BOOLEAN RTMP_FillTxBlkInfo(
6296 IN RTMP_ADAPTER *pAd,
6300 PRTMP_SCATTER_GATHER_LIST
6301 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6304 void announce_802_3_packet(
6305 IN PRTMP_ADAPTER pAd,
6306 IN PNDIS_PACKET pPacket);
6309 UINT BA_Reorder_AMSDU_Annnounce(
6310 IN PRTMP_ADAPTER pAd,
6311 IN PNDIS_PACKET pPacket);
6314 UINT Handle_AMSDU_Packet(
6315 IN PRTMP_ADAPTER pAd,
6318 IN UCHAR FromWhichBSSID);
6321 void convert_802_11_to_802_3_packet(
6322 IN PRTMP_ADAPTER pAd,
6323 IN PNDIS_PACKET pPacket,
6327 IN UCHAR FromWhichBSSID);
6330 PNET_DEV get_netdev_from_bssid(
6331 IN PRTMP_ADAPTER pAd,
6332 IN UCHAR FromWhichBSSID);
6335 PNDIS_PACKET duplicate_pkt(
6336 IN PRTMP_ADAPTER pAd,
6337 IN PUCHAR pHeader802_3,
6341 IN UCHAR FromWhichBSSID);
6344 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6345 IN PRTMP_ADAPTER pAd,
6346 IN PNDIS_PACKET pOldPkt);
6348 PNDIS_PACKET duplicate_pkt_with_VLAN(
6349 IN PRTMP_ADAPTER pAd,
6350 IN PUCHAR pHeader802_3,
6354 IN UCHAR FromWhichBSSID);
6356 PNDIS_PACKET duplicate_pkt_with_WPI(
6357 IN PRTMP_ADAPTER pAd,
6358 IN PNDIS_PACKET pPacket,
6359 IN UINT32 ext_head_len,
6360 IN UINT32 ext_tail_len);
6362 UCHAR VLAN_8023_Header_Copy(
6363 IN PRTMP_ADAPTER pAd,
6364 IN PUCHAR pHeader802_3,
6367 IN UCHAR FromWhichBSSID);
6369 #ifdef DOT11_N_SUPPORT
6370 void ba_flush_reordering_timeout_mpdus(
6371 IN PRTMP_ADAPTER pAd,
6372 IN PBA_REC_ENTRY pBAEntry,
6376 VOID BAOriSessionSetUp(
6377 IN PRTMP_ADAPTER pAd,
6378 IN MAC_TABLE_ENTRY *pEntry,
6382 IN BOOLEAN isForced);
6384 VOID BASessionTearDownALL(
6385 IN OUT PRTMP_ADAPTER pAd,
6387 #endif // DOT11_N_SUPPORT //
6389 BOOLEAN OS_Need_Clone_Packet(void);
6392 VOID build_tx_packet(
6393 IN PRTMP_ADAPTER pAd,
6394 IN PNDIS_PACKET pPacket,
6399 VOID BAOriSessionTearDown(
6400 IN OUT PRTMP_ADAPTER pAd,
6403 IN BOOLEAN bPassive,
6404 IN BOOLEAN bForceSend);
6406 VOID BARecSessionTearDown(
6407 IN OUT PRTMP_ADAPTER pAd,
6410 IN BOOLEAN bPassive);
6412 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6413 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6415 ULONG AutoChBssInsertEntry(
6416 IN PRTMP_ADAPTER pAd,
6423 void AutoChBssTableInit(
6424 IN PRTMP_ADAPTER pAd);
6426 void ChannelInfoInit(
6427 IN PRTMP_ADAPTER pAd);
6429 void AutoChBssTableDestroy(
6430 IN PRTMP_ADAPTER pAd);
6432 void ChannelInfoDestroy(
6433 IN PRTMP_ADAPTER pAd);
6435 UCHAR New_ApAutoSelectChannel(
6436 IN PRTMP_ADAPTER pAd);
6438 BOOLEAN rtstrmactohex(
6442 BOOLEAN rtstrcasecmp(
6446 char *rtstrstruncasecmp(
6452 IN const char * s2);
6456 IN const char * ct);
6460 unsigned int *addr);
6462 ////////// common ioctl functions //////////
6463 INT Set_DriverVersion_Proc(
6464 IN PRTMP_ADAPTER pAd,
6467 INT Set_CountryRegion_Proc(
6468 IN PRTMP_ADAPTER pAd,
6471 INT Set_CountryRegionABand_Proc(
6472 IN PRTMP_ADAPTER pAd,
6475 INT Set_WirelessMode_Proc(
6476 IN PRTMP_ADAPTER pAd,
6479 INT Set_Channel_Proc(
6480 IN PRTMP_ADAPTER pAd,
6483 INT Set_ShortSlot_Proc(
6484 IN PRTMP_ADAPTER pAd,
6487 INT Set_TxPower_Proc(
6488 IN PRTMP_ADAPTER pAd,
6491 INT Set_BGProtection_Proc(
6492 IN PRTMP_ADAPTER pAd,
6495 INT Set_TxPreamble_Proc(
6496 IN PRTMP_ADAPTER pAd,
6499 INT Set_RTSThreshold_Proc(
6500 IN PRTMP_ADAPTER pAd,
6503 INT Set_FragThreshold_Proc(
6504 IN PRTMP_ADAPTER pAd,
6507 INT Set_TxBurst_Proc(
6508 IN PRTMP_ADAPTER pAd,
6511 #ifdef AGGREGATION_SUPPORT
6512 INT Set_PktAggregate_Proc(
6513 IN PRTMP_ADAPTER pAd,
6517 INT Set_IEEE80211H_Proc(
6518 IN PRTMP_ADAPTER pAd,
6523 IN PRTMP_ADAPTER pAd,
6527 INT Show_DescInfo_Proc(
6528 IN PRTMP_ADAPTER pAd,
6531 INT Set_ResetStatCounter_Proc(
6532 IN PRTMP_ADAPTER pAd,
6535 #ifdef DOT11_N_SUPPORT
6536 INT Set_BASetup_Proc(
6537 IN PRTMP_ADAPTER pAd,
6540 INT Set_BADecline_Proc(
6541 IN PRTMP_ADAPTER pAd,
6544 INT Set_BAOriTearDown_Proc(
6545 IN PRTMP_ADAPTER pAd,
6548 INT Set_BARecTearDown_Proc(
6549 IN PRTMP_ADAPTER pAd,
6553 IN PRTMP_ADAPTER pAd,
6557 IN PRTMP_ADAPTER pAd,
6561 IN PRTMP_ADAPTER pAd,
6564 INT Set_HtOpMode_Proc(
6565 IN PRTMP_ADAPTER pAd,
6568 INT Set_HtStbc_Proc(
6569 IN PRTMP_ADAPTER pAd,
6573 IN PRTMP_ADAPTER pAd,
6576 INT Set_HtExtcha_Proc(
6577 IN PRTMP_ADAPTER pAd,
6580 INT Set_HtMpduDensity_Proc(
6581 IN PRTMP_ADAPTER pAd,
6584 INT Set_HtBaWinSize_Proc(
6585 IN PRTMP_ADAPTER pAd,
6589 IN PRTMP_ADAPTER pAd,
6592 INT Set_HtLinkAdapt_Proc(
6593 IN PRTMP_ADAPTER pAd,
6596 INT Set_HtAmsdu_Proc(
6597 IN PRTMP_ADAPTER pAd,
6600 INT Set_HtAutoBa_Proc(
6601 IN PRTMP_ADAPTER pAd,
6604 INT Set_HtProtect_Proc(
6605 IN PRTMP_ADAPTER pAd,
6608 INT Set_HtMimoPs_Proc(
6609 IN PRTMP_ADAPTER pAd,
6613 INT Set_ForceShortGI_Proc(
6614 IN PRTMP_ADAPTER pAd,
6617 INT Set_ForceGF_Proc(
6618 IN PRTMP_ADAPTER pAd,
6622 IN PRTMP_ADAPTER pAd);
6624 INT Set_SendPSMPAction_Proc(
6625 IN PRTMP_ADAPTER pAd,
6628 INT Set_HtMIMOPSmode_Proc(
6629 IN PRTMP_ADAPTER pAd,
6633 INT Set_HtTxBASize_Proc(
6634 IN PRTMP_ADAPTER pAd,
6636 #endif // DOT11_N_SUPPORT //
6640 #ifdef CONFIG_STA_SUPPORT
6642 VOID RTMPSendDLSTearDownFrame(
6643 IN PRTMP_ADAPTER pAd,
6646 #ifdef DOT11_N_SUPPORT
6649 IN PRTMP_ADAPTER pAd,
6650 OUT PQUERYBA_TABLE pBAT);
6651 #endif // DOT11_N_SUPPORT //
6653 #ifdef WPA_SUPPLICANT_SUPPORT
6654 INT WpaCheckEapCode(
6655 IN PRTMP_ADAPTER pAd,
6660 VOID WpaSendMicFailureToWpaSupplicant(
6661 IN PRTMP_ADAPTER pAd,
6662 IN BOOLEAN bUnicast);
6664 VOID SendAssocIEsToWpaSupplicant(
6665 IN PRTMP_ADAPTER pAd);
6666 #endif // WPA_SUPPLICANT_SUPPORT //
6668 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6669 int wext_notify_event_assoc(
6670 IN RTMP_ADAPTER *pAd);
6671 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6673 #endif // CONFIG_STA_SUPPORT //
6677 #ifdef DOT11_N_SUPPORT
6678 VOID Handle_BSS_Width_Trigger_Events(
6679 IN PRTMP_ADAPTER pAd);
6681 void build_ext_channel_switch_ie(
6682 IN PRTMP_ADAPTER pAd,
6683 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6684 #endif // DOT11_N_SUPPORT //
6687 BOOLEAN APRxDoneInterruptHandle(
6688 IN PRTMP_ADAPTER pAd);
6690 BOOLEAN STARxDoneInterruptHandle(
6691 IN PRTMP_ADAPTER pAd,
6694 #ifdef DOT11_N_SUPPORT
6695 // AMPDU packet indication
6696 VOID Indicate_AMPDU_Packet(
6697 IN PRTMP_ADAPTER pAd,
6699 IN UCHAR FromWhichBSSID);
6701 // AMSDU packet indication
6702 VOID Indicate_AMSDU_Packet(
6703 IN PRTMP_ADAPTER pAd,
6705 IN UCHAR FromWhichBSSID);
6706 #endif // DOT11_N_SUPPORT //
6708 // Normal legacy Rx packet indication
6709 VOID Indicate_Legacy_Packet(
6710 IN PRTMP_ADAPTER pAd,
6712 IN UCHAR FromWhichBSSID);
6714 VOID Indicate_EAPOL_Packet(
6715 IN PRTMP_ADAPTER pAd,
6717 IN UCHAR FromWhichBSSID);
6719 void update_os_packet_info(
6720 IN PRTMP_ADAPTER pAd,
6722 IN UCHAR FromWhichBSSID);
6724 void wlan_802_11_to_802_3_packet(
6725 IN PRTMP_ADAPTER pAd,
6727 IN PUCHAR pHeader802_3,
6728 IN UCHAR FromWhichBSSID);
6730 UINT deaggregate_AMSDU_announce(
6731 IN PRTMP_ADAPTER pAd,
6732 PNDIS_PACKET pPacket,
6737 #ifdef CONFIG_STA_SUPPORT
6738 // remove LLC and get 802_3 Header
6739 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6741 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6743 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6745 _pDA = _pRxBlk->pHeader->Addr3; \
6746 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6750 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6752 _pDA = _pRxBlk->pHeader->Addr1; \
6753 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6754 _pSA = _pRxBlk->pHeader->Addr2; \
6756 _pSA = _pRxBlk->pHeader->Addr3; \
6760 _pDA = _pRxBlk->pHeader->Addr1; \
6761 _pSA = _pRxBlk->pHeader->Addr2; \
6765 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6766 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6768 #endif // CONFIG_STA_SUPPORT //
6771 BOOLEAN APFowardWirelessStaToWirelessSta(
6772 IN PRTMP_ADAPTER pAd,
6773 IN PNDIS_PACKET pPacket,
6774 IN ULONG FromWhichBSSID);
6776 VOID Announce_or_Forward_802_3_Packet(
6777 IN PRTMP_ADAPTER pAd,
6778 IN PNDIS_PACKET pPacket,
6779 IN UCHAR FromWhichBSSID);
6781 VOID Sta_Announce_or_Forward_802_3_Packet(
6782 IN PRTMP_ADAPTER pAd,
6783 IN PNDIS_PACKET pPacket,
6784 IN UCHAR FromWhichBSSID);
6787 #ifdef CONFIG_STA_SUPPORT
6788 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6789 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6790 //announce_802_3_packet(_pAd, _pPacket);
6791 #endif // CONFIG_STA_SUPPORT //
6794 PNDIS_PACKET DuplicatePacket(
6795 IN PRTMP_ADAPTER pAd,
6796 IN PNDIS_PACKET pPacket,
6797 IN UCHAR FromWhichBSSID);
6800 PNDIS_PACKET ClonePacket(
6801 IN PRTMP_ADAPTER pAd,
6802 IN PNDIS_PACKET pPacket,
6807 // Normal, AMPDU or AMSDU
6808 VOID CmmRxnonRalinkFrameIndicate(
6809 IN PRTMP_ADAPTER pAd,
6811 IN UCHAR FromWhichBSSID);
6813 VOID CmmRxRalinkFrameIndicate(
6814 IN PRTMP_ADAPTER pAd,
6815 IN MAC_TABLE_ENTRY *pEntry,
6817 IN UCHAR FromWhichBSSID);
6819 VOID Update_Rssi_Sample(
6820 IN PRTMP_ADAPTER pAd,
6821 IN RSSI_SAMPLE *pRssi,
6822 IN PRXWI_STRUC pRxWI);
6824 PNDIS_PACKET GetPacketFromRxRing(
6825 IN PRTMP_ADAPTER pAd,
6826 OUT PRT28XX_RXD_STRUC pSaveRxD,
6827 OUT BOOLEAN *pbReschedule,
6828 IN OUT UINT32 *pRxPending);
6830 PNDIS_PACKET RTMPDeFragmentDataFrame(
6831 IN PRTMP_ADAPTER pAd,
6834 ////////////////////////////////////////
6842 typedef struct _DefaultKeyIdxValue
6846 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6850 #ifdef CONFIG_STA_SUPPORT
6852 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6853 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6854 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6855 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6856 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6857 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6858 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6859 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6860 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6861 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6862 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6865 P80211ENUM_msgitem_status_no_value = 0x00
6868 P80211ENUM_truth_false = 0x00,
6869 P80211ENUM_truth_true = 0x01
6872 /* Definition from madwifi */
6878 } p80211item_uint32_t;
6883 #define WLAN_DEVNAMELEN_MAX 16
6884 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6885 p80211item_uint32_t hosttime;
6886 p80211item_uint32_t mactime;
6887 p80211item_uint32_t channel;
6888 p80211item_uint32_t rssi;
6889 p80211item_uint32_t sq;
6890 p80211item_uint32_t signal;
6891 p80211item_uint32_t noise;
6892 p80211item_uint32_t rate;
6893 p80211item_uint32_t istx;
6894 p80211item_uint32_t frmlen;
6895 } wlan_ng_prism2_header;
6897 /* The radio capture header precedes the 802.11 header. */
6898 typedef struct PACKED _ieee80211_radiotap_header {
6899 UINT8 it_version; /* Version 0. Only increases
6900 * for drastic changes,
6901 * introduction of compatible
6902 * new fields does not count.
6905 UINT16 it_len; /* length of the whole
6906 * header in bytes, including
6907 * it_version, it_pad,
6908 * it_len, and data fields.
6910 UINT32 it_present; /* A bitmap telling which
6911 * fields are present. Set bit 31
6912 * (0x80000000) to extend the
6913 * bitmap by another 32 bits.
6914 * Additional extensions are made
6915 * by setting bit 31.
6917 }ieee80211_radiotap_header ;
6919 enum ieee80211_radiotap_type {
6920 IEEE80211_RADIOTAP_TSFT = 0,
6921 IEEE80211_RADIOTAP_FLAGS = 1,
6922 IEEE80211_RADIOTAP_RATE = 2,
6923 IEEE80211_RADIOTAP_CHANNEL = 3,
6924 IEEE80211_RADIOTAP_FHSS = 4,
6925 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6926 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6927 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6928 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6929 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6930 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6931 IEEE80211_RADIOTAP_ANTENNA = 11,
6932 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6933 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6936 #define WLAN_RADIOTAP_PRESENT ( \
6937 (1 << IEEE80211_RADIOTAP_TSFT) | \
6938 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6939 (1 << IEEE80211_RADIOTAP_RATE) | \
6942 typedef struct _wlan_radiotap_header {
6943 ieee80211_radiotap_header wt_ihdr;
6947 } wlan_radiotap_header;
6948 /* Definition from madwifi */
6950 void send_monitor_packets(
6951 IN PRTMP_ADAPTER pAd,
6954 #if WIRELESS_EXT >= 12
6955 // This function will be called when query /proc
6956 struct iw_statistics *rt28xx_get_wireless_stats(
6957 IN struct net_device *net_dev);
6960 VOID RTMPSetDesiredRates(
6961 IN PRTMP_ADAPTER pAdapter,
6963 #endif // CONFIG_STA_SUPPORT //
6965 INT Set_FixedTxMode_Proc(
6966 IN PRTMP_ADAPTER pAd,
6969 static inline char* GetPhyMode(
6979 #ifdef DOT11_N_SUPPORT
6983 case MODE_HTGREENFIELD:
6985 #endif // DOT11_N_SUPPORT //
6992 static inline char* GetBW(
7002 #ifdef DOT11_N_SUPPORT
7005 #endif // DOT11_N_SUPPORT //
7012 VOID RT28xxThreadTerminate(
7013 IN RTMP_ADAPTER *pAd);
7015 BOOLEAN RT28XXChipsetCheck(
7018 BOOLEAN RT28XXNetDevInit(
7020 IN struct net_device *net_dev,
7021 IN RTMP_ADAPTER *pAd);
7023 BOOLEAN RT28XXProbePostConfig(
7025 IN RTMP_ADAPTER *pAd,
7028 VOID RT28XXDMADisable(
7029 IN RTMP_ADAPTER *pAd);
7031 VOID RT28XXDMAEnable(
7032 IN RTMP_ADAPTER *pAd);
7034 VOID RT28xx_UpdateBeaconToAsic(
7035 IN RTMP_ADAPTER * pAd,
7038 IN ULONG UpdatePos);
7041 IN struct net_device *net_dev,
7042 IN OUT struct ifreq *rq,
7046 #ifdef CONFIG_STA_SUPPORT
7047 INT rt28xx_sta_ioctl(
7048 IN struct net_device *net_dev,
7049 IN OUT struct ifreq *rq,
7051 #endif // CONFIG_STA_SUPPORT //
7053 BOOLEAN RT28XXSecurityKeyAdd(
7054 IN PRTMP_ADAPTER pAd,
7057 IN MAC_TABLE_ENTRY *pEntry);
7059 ////////////////////////////////////////
7060 PNDIS_PACKET GetPacketFromRxRing(
7061 IN PRTMP_ADAPTER pAd,
7062 OUT PRT28XX_RXD_STRUC pSaveRxD,
7063 OUT BOOLEAN *pbReschedule,
7064 IN OUT UINT32 *pRxPending);
7067 void kill_thread_task(PRTMP_ADAPTER pAd);
7069 void tbtt_tasklet(unsigned long data);
7072 VOID AsicTurnOffRFClk(
7073 IN PRTMP_ADAPTER pAd,
7076 VOID AsicTurnOnRFClk(
7077 IN PRTMP_ADAPTER pAd,
7082 // Function Prototype in rtusb_bulk.c
7084 VOID RTUSBInitTxDesc(
7085 IN PRTMP_ADAPTER pAd,
7086 IN PTX_CONTEXT pTxContext,
7087 IN UCHAR BulkOutPipeId,
7088 IN usb_complete_t Func);
7090 VOID RTUSBInitHTTxDesc(
7091 IN PRTMP_ADAPTER pAd,
7092 IN PHT_TX_CONTEXT pTxContext,
7093 IN UCHAR BulkOutPipeId,
7094 IN ULONG BulkOutSize,
7095 IN usb_complete_t Func);
7097 VOID RTUSBInitRxDesc(
7098 IN PRTMP_ADAPTER pAd,
7099 IN PRX_CONTEXT pRxContext);
7101 VOID RTUSBCleanUpDataBulkOutQueue(
7102 IN PRTMP_ADAPTER pAd);
7104 VOID RTUSBCancelPendingBulkOutIRP(
7105 IN PRTMP_ADAPTER pAd);
7107 VOID RTUSBBulkOutDataPacket(
7108 IN PRTMP_ADAPTER pAd,
7109 IN UCHAR BulkOutPipeId,
7112 VOID RTUSBBulkOutNullFrame(
7113 IN PRTMP_ADAPTER pAd);
7115 VOID RTUSBBulkOutRTSFrame(
7116 IN PRTMP_ADAPTER pAd);
7118 VOID RTUSBCancelPendingBulkInIRP(
7119 IN PRTMP_ADAPTER pAd);
7121 VOID RTUSBCancelPendingIRPs(
7122 IN PRTMP_ADAPTER pAd);
7124 VOID RTUSBBulkOutMLMEPacket(
7125 IN PRTMP_ADAPTER pAd,
7128 VOID RTUSBBulkOutPsPoll(
7129 IN PRTMP_ADAPTER pAd);
7131 VOID RTUSBCleanUpMLMEBulkOutQueue(
7132 IN PRTMP_ADAPTER pAd);
7134 VOID RTUSBKickBulkOut(
7135 IN PRTMP_ADAPTER pAd);
7137 VOID RTUSBBulkReceive(
7138 IN PRTMP_ADAPTER pAd);
7141 IN RTMP_ADAPTER *pAd);
7143 VOID RTUSBInitRxDesc(
7144 IN PRTMP_ADAPTER pAd,
7145 IN PRX_CONTEXT pRxContext);
7147 VOID RTUSBBulkRxHandle(
7148 IN unsigned long data);
7151 // Function Prototype in rtusb_io.c
7153 NTSTATUS RTUSBMultiRead(
7154 IN PRTMP_ADAPTER pAd,
7159 NTSTATUS RTUSBMultiWrite(
7160 IN PRTMP_ADAPTER pAd,
7165 NTSTATUS RTUSBMultiWrite_OneByte(
7166 IN PRTMP_ADAPTER pAd,
7170 NTSTATUS RTUSBReadBBPRegister(
7171 IN PRTMP_ADAPTER pAd,
7175 NTSTATUS RTUSBWriteBBPRegister(
7176 IN PRTMP_ADAPTER pAd,
7180 NTSTATUS RTUSBWriteRFRegister(
7181 IN PRTMP_ADAPTER pAd,
7184 NTSTATUS RT30xxWriteRFRegister(
7185 IN PRTMP_ADAPTER pAd,
7189 NTSTATUS RT30xxReadRFRegister(
7190 IN PRTMP_ADAPTER pAd,
7194 NTSTATUS RTUSB_VendorRequest(
7195 IN PRTMP_ADAPTER pAd,
7196 IN UINT32 TransferFlags,
7197 IN UCHAR ReservedBits,
7201 IN PVOID TransferBuffer,
7202 IN UINT32 TransferBufferLength);
7204 NTSTATUS RTUSBReadEEPROM(
7205 IN PRTMP_ADAPTER pAd,
7210 NTSTATUS RTUSBWriteEEPROM(
7211 IN PRTMP_ADAPTER pAd,
7216 VOID RTUSBPutToSleep(
7217 IN PRTMP_ADAPTER pAd);
7219 NTSTATUS RTUSBWakeUp(
7220 IN PRTMP_ADAPTER pAd);
7222 VOID RTUSBInitializeCmdQ(
7225 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7226 IN PRTMP_ADAPTER pAd,
7228 IN BOOLEAN SetInformation,
7229 IN PVOID pInformationBuffer,
7230 IN UINT32 InformationBufferLength);
7232 NDIS_STATUS RTUSBEnqueueInternalCmd(
7233 IN PRTMP_ADAPTER pAd,
7235 IN PVOID pInformationBuffer,
7236 IN UINT32 InformationBufferLength);
7238 VOID RTUSBDequeueCmd(
7240 OUT PCmdQElmt *pcmdqelmt);
7243 IN OUT PVOID Context);
7246 IN OUT PVOID Context);
7248 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7249 IN RTMP_ADAPTER *pAd,
7250 IN RALINK_TIMER_STRUCT *pTimer);
7252 BOOLEAN RT2870_TimerQ_Remove(
7253 IN RTMP_ADAPTER *pAd,
7254 IN RALINK_TIMER_STRUCT *pTimer);
7256 void RT2870_TimerQ_Exit(
7257 IN RTMP_ADAPTER *pAd);
7259 void RT2870_TimerQ_Init(
7260 IN RTMP_ADAPTER *pAd);
7262 VOID RT2870_BssBeaconExit(
7263 IN RTMP_ADAPTER *pAd);
7265 VOID RT2870_BssBeaconStop(
7266 IN RTMP_ADAPTER *pAd);
7268 VOID RT2870_BssBeaconStart(
7269 IN RTMP_ADAPTER * pAd);
7271 VOID RT2870_BssBeaconInit(
7272 IN RTMP_ADAPTER *pAd);
7274 VOID RT2870_WatchDog(
7275 IN RTMP_ADAPTER *pAd);
7277 NTSTATUS RTUSBWriteMACRegister(
7278 IN PRTMP_ADAPTER pAd,
7282 NTSTATUS RTUSBReadMACRegister(
7283 IN PRTMP_ADAPTER pAd,
7285 OUT PUINT32 pValue);
7287 NTSTATUS RTUSBSingleWrite(
7288 IN RTMP_ADAPTER *pAd,
7292 NTSTATUS RTUSBFirmwareRun(
7293 IN PRTMP_ADAPTER pAd);
7295 NTSTATUS RTUSBFirmwareWrite(
7296 IN PRTMP_ADAPTER pAd,
7300 NTSTATUS RTUSBFirmwareOpmode(
7301 IN PRTMP_ADAPTER pAd,
7302 OUT PUINT32 pValue);
7304 NTSTATUS RTUSBVenderReset(
7305 IN PRTMP_ADAPTER pAd);
7307 NDIS_STATUS RTUSBSetHardWareRegister(
7308 IN PRTMP_ADAPTER pAdapter,
7311 NDIS_STATUS RTUSBQueryHardWareRegister(
7312 IN PRTMP_ADAPTER pAdapter,
7316 IN PRTMP_ADAPTER pAd);
7319 NDIS_STATUS CreateThreads(
7320 IN struct net_device *net_dev );
7323 VOID MacTableInitialize(
7324 IN PRTMP_ADAPTER pAd);
7327 IN PRTMP_ADAPTER pAd,
7330 NDIS_STATUS RTMPWPAAddKeyProc(
7331 IN PRTMP_ADAPTER pAd,
7334 VOID AsicRxAntEvalAction(
7335 IN PRTMP_ADAPTER pAd);
7337 #if 0 // Mark because not used in RT28xx.
7338 NTSTATUS RTUSBRxPacket(
7339 IN PRTMP_ADAPTER pAd,
7340 IN BOOLEAN bBulkReceive);
7342 VOID RTUSBDequeueMLMEPacket(
7343 IN PRTMP_ADAPTER pAd);
7345 VOID RTUSBCleanUpMLMEWaitQueue(
7346 IN PRTMP_ADAPTER pAd);
7350 IN PRTMP_ADAPTER pAd,
7351 IN PUCHAR pHeader802_3,
7355 OUT PNDIS_PACKET *ppPacket);
7357 UINT deaggregate_AMSDU_announce(
7358 IN PRTMP_ADAPTER pAd,
7359 PNDIS_PACKET pPacket,
7363 NDIS_STATUS RTMPCheckRxError(
7364 IN PRTMP_ADAPTER pAd,
7365 IN PHEADER_802_11 pHeader,
7366 IN PRXWI_STRUC pRxWI,
7367 IN PRT28XX_RXD_STRUC pRxINFO);
7370 VOID RTUSBMlmeHardTransmit(
7371 IN PRTMP_ADAPTER pAd,
7372 IN PMGMT_STRUC pMgmt);
7378 VOID RTUSBResumeMsduTransmission(
7379 IN PRTMP_ADAPTER pAd);
7381 VOID RTUSBSuspendMsduTransmission(
7382 IN PRTMP_ADAPTER pAd);
7386 // Function Prototype in rtusb_data.c
7388 NDIS_STATUS RTUSBFreeDescriptorRequest(
7389 IN PRTMP_ADAPTER pAd,
7390 IN UCHAR BulkOutPipeId,
7391 IN UINT32 NumberRequired);
7394 BOOLEAN RTUSBNeedQueueBackForAgg(
7395 IN RTMP_ADAPTER *pAd,
7396 IN UCHAR BulkOutPipeId);
7399 VOID RTMPWriteTxInfo(
7400 IN PRTMP_ADAPTER pAd,
7401 IN PTXINFO_STRUC pTxInfo,
7402 IN USHORT USBDMApktLen,
7409 // Function Prototype in cmm_data_2870.c
7411 USHORT RtmpUSB_WriteSubTxResource(
7412 IN PRTMP_ADAPTER pAd,
7415 OUT USHORT *FreeNumber);
7417 USHORT RtmpUSB_WriteSingleTxResource(
7418 IN PRTMP_ADAPTER pAd,
7421 OUT USHORT *FreeNumber);
7423 USHORT RtmpUSB_WriteFragTxResource(
7424 IN PRTMP_ADAPTER pAd,
7427 OUT USHORT *FreeNumber);
7429 USHORT RtmpUSB_WriteMultiTxResource(
7430 IN PRTMP_ADAPTER pAd,
7433 OUT USHORT *FreeNumber);
7435 VOID RtmpUSB_FinalWriteTxResource(
7436 IN PRTMP_ADAPTER pAd,
7438 IN USHORT totalMPDUSize,
7441 VOID RtmpUSBDataLastTxIdx(
7442 IN PRTMP_ADAPTER pAd,
7446 VOID RtmpUSBDataKickOut(
7447 IN PRTMP_ADAPTER pAd,
7452 int RtmpUSBMgmtKickOut(
7453 IN RTMP_ADAPTER *pAd,
7455 IN PNDIS_PACKET pPacket,
7456 IN PUCHAR pSrcBufVA,
7459 VOID RtmpUSBNullFrameKickOut(
7460 IN RTMP_ADAPTER *pAd,
7462 IN UCHAR *pNullFrame,
7463 IN UINT32 frameLen);
7465 VOID RT28xxUsbStaAsicForceWakeup(
7466 IN PRTMP_ADAPTER pAd,
7467 IN BOOLEAN bFromTx);
7469 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7470 IN PRTMP_ADAPTER pAd,
7471 IN USHORT TbttNumToNextWakeUp);
7473 VOID RT28xxUsbMlmeRadioOn(
7474 IN PRTMP_ADAPTER pAd);
7476 VOID RT28xxUsbMlmeRadioOFF(
7477 IN PRTMP_ADAPTER pAd);
7480 ////////////////////////////////////////
7483 IN RTMP_ADAPTER *pAd);
7485 UINT32 QBSS_LoadElementAppend(
7486 IN RTMP_ADAPTER *pAd,
7489 VOID QBSS_LoadUpdate(
7490 IN RTMP_ADAPTER *pAd);
7492 ///////////////////////////////////////
7493 INT RTMPShowCfgValue(
7494 IN PRTMP_ADAPTER pAd,
7498 PCHAR RTMPGetRalinkAuthModeStr(
7499 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7501 PCHAR RTMPGetRalinkEncryModeStr(
7502 IN USHORT encryMode);
7503 //////////////////////////////////////
7505 #ifdef CONFIG_STA_SUPPORT
7506 VOID AsicStaBbpTuning(
7507 IN PRTMP_ADAPTER pAd);
7509 BOOLEAN StaAddMacTableEntry(
7510 IN PRTMP_ADAPTER pAd,
7511 IN PMAC_TABLE_ENTRY pEntry,
7512 IN UCHAR MaxSupportedRateIn500Kbps,
7513 IN HT_CAPABILITY_IE *pHtCapability,
7514 IN UCHAR HtCapabilityLen,
7515 IN USHORT CapabilityInfo);
7516 #endif // CONFIG_STA_SUPPORT //
7518 void RTMP_IndicateMediaState(
7519 IN PRTMP_ADAPTER pAd);
7521 VOID ReSyncBeaconTime(
7522 IN PRTMP_ADAPTER pAd);
7524 VOID RTMPSetAGCInitValue(
7525 IN PRTMP_ADAPTER pAd,
7526 IN UCHAR BandWidth);
7528 int rt28xx_close(IN PNET_DEV dev);
7529 int rt28xx_open(IN PNET_DEV dev);
7531 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7533 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7534 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7536 if (VIRTUAL_IF_NUM(pAd) == 0)
7538 if (rt28xx_open(pAd->net_dev) != 0)
7544 VIRTUAL_IF_INC(pAd);
7548 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7550 VIRTUAL_IF_DEC(pAd);
7551 if (VIRTUAL_IF_NUM(pAd) == 0)
7552 rt28xx_close(pAd->net_dev);
7557 #endif // __RTMP_H__