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 //
51 //#define DBG_DIAGNOSE 1
53 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
54 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
55 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
57 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
58 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
61 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
62 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
63 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
68 // NDIS Version definitions
70 #ifdef NDIS50_MINIPORT
71 #define RTMP_NDIS_MAJOR_VERSION 5
72 #define RTMP_NDIS_MINOR_VERSION 0
75 #ifdef NDIS51_MINIPORT
76 #define RTMP_NDIS_MAJOR_VERSION 5
77 #define RTMP_NDIS_MINOR_VERSION 1
80 extern char NIC_VENDOR_DESC[];
81 extern int NIC_VENDOR_DESC_LEN;
83 extern unsigned char SNAP_AIRONET[];
84 extern unsigned char CipherSuiteCiscoCCKM[];
85 extern unsigned char CipherSuiteCiscoCCKMLen;
86 extern unsigned char CipherSuiteCiscoCCKM24[];
87 extern unsigned char CipherSuiteCiscoCCKM24Len;
88 extern unsigned char CipherSuiteCCXTkip[];
89 extern unsigned char CipherSuiteCCXTkipLen;
90 extern unsigned char CISCO_OUI[];
91 extern UCHAR BaSizeArray[4];
93 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
94 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
95 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
96 extern ULONG BIT32[32];
98 extern char* CipherName[];
99 extern char* MCSToMbps[];
100 extern UCHAR RxwiMCSToOfdmRate[12];
101 extern UCHAR SNAP_802_1H[6];
102 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
103 extern UCHAR SNAP_AIRONET[8];
104 extern UCHAR CKIP_LLC_SNAP[8];
105 extern UCHAR EAPOL_LLC_SNAP[8];
106 extern UCHAR EAPOL[2];
108 extern UCHAR APPLE_TALK[2];
109 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
110 extern UCHAR OfdmRateToRxwiMCS[];
111 extern UCHAR OfdmSignalToRateId[16] ;
112 extern UCHAR default_cwmin[4];
113 extern UCHAR default_cwmax[4];
114 extern UCHAR default_sta_aifsn[4];
115 extern UCHAR MapUserPriorityToAccessCategory[8];
117 extern USHORT RateUpPER[];
118 extern USHORT RateDownPER[];
119 extern UCHAR Phy11BNextRateDownward[];
120 extern UCHAR Phy11BNextRateUpward[];
121 extern UCHAR Phy11BGNextRateDownward[];
122 extern UCHAR Phy11BGNextRateUpward[];
123 extern UCHAR Phy11ANextRateDownward[];
124 extern UCHAR Phy11ANextRateUpward[];
125 extern CHAR RssiSafeLevelForTxRate[];
126 extern UCHAR RateIdToMbps[];
127 extern USHORT RateIdTo500Kbps[];
129 extern UCHAR CipherSuiteWpaNoneTkip[];
130 extern UCHAR CipherSuiteWpaNoneTkipLen;
132 extern UCHAR CipherSuiteWpaNoneAes[];
133 extern UCHAR CipherSuiteWpaNoneAesLen;
136 extern UCHAR SupRateIe;
137 extern UCHAR ExtRateIe;
139 #ifdef DOT11_N_SUPPORT
140 extern UCHAR HtCapIe;
141 extern UCHAR AddHtInfoIe;
142 extern UCHAR NewExtChanIe;
143 #endif // DOT11_N_SUPPORT //
153 extern UCHAR WPA_OUI[];
154 extern UCHAR RSN_OUI[];
155 extern UCHAR WME_INFO_ELEM[];
156 extern UCHAR WME_PARM_ELEM[];
157 extern UCHAR Ccx2QosInfo[];
158 extern UCHAR Ccx2IeInfo[];
159 extern UCHAR RALINK_OUI[];
160 extern UCHAR PowerConstraintIE[];
163 extern UCHAR RateSwitchTable[];
164 extern UCHAR RateSwitchTable11B[];
165 extern UCHAR RateSwitchTable11G[];
166 extern UCHAR RateSwitchTable11BG[];
168 #ifdef DOT11_N_SUPPORT
169 extern UCHAR RateSwitchTable11BGN1S[];
170 extern UCHAR RateSwitchTable11BGN2S[];
171 extern UCHAR RateSwitchTable11BGN2SForABand[];
172 extern UCHAR RateSwitchTable11N1S[];
173 extern UCHAR RateSwitchTable11N2S[];
174 extern UCHAR RateSwitchTable11N2SForABand[];
176 #ifdef CONFIG_STA_SUPPORT
177 extern UCHAR PRE_N_HT_OUI[];
178 #endif // CONFIG_STA_SUPPORT //
179 #endif // DOT11_N_SUPPORT //
181 #define MAXSEQ (0xFFF)
183 #ifdef DOT11_N_SUPPORT
184 struct reordering_mpdu
186 struct reordering_mpdu *next;
187 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
188 int Sequence; /* sequence number of MPDU */
192 struct reordering_list
194 struct reordering_mpdu *next;
198 struct reordering_mpdu_pool
202 struct reordering_list freelist;
204 #endif // DOT11_N_SUPPORT //
206 typedef struct _RSSI_SAMPLE {
207 CHAR LastRssi0; // last received RSSI
208 CHAR LastRssi1; // last received RSSI
209 CHAR LastRssi2; // last received RSSI
219 // Queue structure and macros
221 typedef struct _QUEUE_ENTRY {
222 struct _QUEUE_ENTRY *Next;
223 } QUEUE_ENTRY, *PQUEUE_ENTRY;
226 typedef struct _QUEUE_HEADER {
230 } QUEUE_HEADER, *PQUEUE_HEADER;
232 #define InitializeQueueHeader(QueueHeader) \
234 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
235 (QueueHeader)->Number = 0; \
238 #define RemoveHeadQueue(QueueHeader) \
239 (QueueHeader)->Head; \
241 PQUEUE_ENTRY pNext; \
242 if ((QueueHeader)->Head != NULL) \
244 pNext = (QueueHeader)->Head->Next; \
245 (QueueHeader)->Head = pNext; \
247 (QueueHeader)->Tail = NULL; \
248 (QueueHeader)->Number--; \
252 #define InsertHeadQueue(QueueHeader, QueueEntry) \
254 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
255 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
256 if ((QueueHeader)->Tail == NULL) \
257 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
258 (QueueHeader)->Number++; \
261 #define InsertTailQueue(QueueHeader, QueueEntry) \
263 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
264 if ((QueueHeader)->Tail) \
265 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
267 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
268 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
269 (QueueHeader)->Number++; \
273 // Macros for flag and ref count operations
275 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
276 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
277 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
278 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
279 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
281 // Macro for power save flag.
282 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
283 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
284 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
285 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
286 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
288 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
289 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
290 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
292 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
293 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
294 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
296 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
297 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
298 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
300 #ifdef CONFIG_STA_SUPPORT
301 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
302 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
303 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
304 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
306 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
307 #endif // CONFIG_STA_SUPPORT //
309 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
310 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
313 #define INC_RING_INDEX(_idx, _RingSize) \
315 (_idx) = (_idx+1) % (_RingSize); \
318 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
320 #define RING_PACKET_INIT(_TxRing, _idx) \
322 _TxRing->Cell[_idx].pNdisPacket = NULL; \
323 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
326 #define TXDT_INIT(_TxD) \
328 NdisZeroMemory(_TxD, TXD_SIZE); \
332 //Set last data segment
333 #define RING_SET_LASTDS(_TxD, _IsSD0) \
335 if (_IsSD0) {_TxD->LastSec0 = 1;} \
336 else {_TxD->LastSec1 = 1;} \
339 // Increase TxTsc value for next transmission
341 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
342 // Should send a special event microsoft defined to request re-key
343 #define INC_TX_TSC(_tsc) \
346 while (++_tsc[i] == 0x0) \
354 #ifdef DOT11_N_SUPPORT
355 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
356 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
358 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
359 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
360 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
361 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
362 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
363 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
364 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
365 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
366 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
367 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
368 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
369 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
372 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
374 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
375 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
376 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
378 #endif // DOT11_N_SUPPORT //
381 // MACRO for 32-bit PCI register read / write
383 // Usage : RTMP_IO_READ32(
384 // PRTMP_ADAPTER pAd,
385 // ULONG Register_Offset,
389 // PRTMP_ADAPTER pAd,
390 // ULONG Register_Offset,
395 // BBP & RF are using indirect access. Before write any value into it.
396 // We have to make sure there is no outstanding command pending via checking busy bit.
398 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
400 #define RTMP_RF_IO_WRITE32(_A, _V) \
402 PHY_CSR4_STRUC Value; \
404 if ((_A)->bPCIclkOff) \
409 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
410 if (Value.field.Busy == IDLE) \
413 } while (BusyCnt < MAX_BUSY_COUNT); \
414 if (BusyCnt < MAX_BUSY_COUNT) \
416 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
420 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
422 BBP_CSR_CFG_STRUC BbpCsr; \
424 for (i=0; i<MAX_BUSY_COUNT; i++) \
426 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
427 if (BbpCsr.field.Busy == BUSY) \
432 BbpCsr.field.fRead = 1; \
433 BbpCsr.field.BBP_RW_MODE = 1; \
434 BbpCsr.field.Busy = 1; \
435 BbpCsr.field.RegNum = _I; \
436 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
437 for (k=0; k<MAX_BUSY_COUNT; k++) \
439 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
440 if (BbpCsr.field.Busy == IDLE) \
443 if ((BbpCsr.field.Busy == IDLE) && \
444 (BbpCsr.field.RegNum == _I)) \
446 *(_pV) = (UCHAR)BbpCsr.field.Value; \
450 if (BbpCsr.field.Busy == BUSY) \
452 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
453 *(_pV) = (_A)->BbpWriteLatch[_I]; \
457 //#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
458 // Read BBP register by register's ID. Generate PER to test BA
459 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
461 BBP_CSR_CFG_STRUC BbpCsr; \
463 if ((_A)->bPCIclkOff == FALSE) \
465 for (i=0; i<MAX_BUSY_COUNT; i++) \
467 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
468 if (BbpCsr.field.Busy == BUSY) \
473 BbpCsr.field.fRead = 1; \
474 BbpCsr.field.BBP_RW_MODE = 1; \
475 BbpCsr.field.Busy = 1; \
476 BbpCsr.field.RegNum = _I; \
477 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
478 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
479 RTMPusecDelay(1000); \
480 for (k=0; k<MAX_BUSY_COUNT; k++) \
482 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
483 if (BbpCsr.field.Busy == IDLE) \
486 if ((BbpCsr.field.Busy == IDLE) && \
487 (BbpCsr.field.RegNum == _I)) \
489 *(_pV) = (UCHAR)BbpCsr.field.Value; \
493 if (BbpCsr.field.Busy == BUSY) \
495 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
496 *(_pV) = (_A)->BbpWriteLatch[_I]; \
497 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
498 BbpCsr.field.Busy = 0; \
499 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
504 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
506 BBP_CSR_CFG_STRUC BbpCsr; \
508 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
510 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
511 if (BbpCsr.field.Busy == BUSY) \
514 BbpCsr.field.fRead = 0; \
515 BbpCsr.field.BBP_RW_MODE = 1; \
516 BbpCsr.field.Busy = 1; \
517 BbpCsr.field.Value = _V; \
518 BbpCsr.field.RegNum = _I; \
519 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
520 (_A)->BbpWriteLatch[_I] = _V; \
523 if (BusyCnt == MAX_BUSY_COUNT) \
525 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
529 // Write BBP register by register's ID & value
530 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
532 BBP_CSR_CFG_STRUC BbpCsr; \
534 if ((_A)->bPCIclkOff == FALSE) \
536 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
538 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
539 if (BbpCsr.field.Busy == BUSY) \
542 BbpCsr.field.fRead = 0; \
543 BbpCsr.field.BBP_RW_MODE = 1; \
544 BbpCsr.field.Busy = 1; \
545 BbpCsr.field.Value = _V; \
546 BbpCsr.field.RegNum = _I; \
547 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
548 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
549 if (_A->OpMode == OPMODE_AP) \
550 RTMPusecDelay(1000); \
551 (_A)->BbpWriteLatch[_I] = _V; \
554 if (BusyCnt == MAX_BUSY_COUNT) \
556 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
557 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
558 BbpCsr.field.Busy = 0; \
559 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
565 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
568 case 1: khz = 2412000; break; \
569 case 2: khz = 2417000; break; \
570 case 3: khz = 2422000; break; \
571 case 4: khz = 2427000; break; \
572 case 5: khz = 2432000; break; \
573 case 6: khz = 2437000; break; \
574 case 7: khz = 2442000; break; \
575 case 8: khz = 2447000; break; \
576 case 9: khz = 2452000; break; \
577 case 10: khz = 2457000; break; \
578 case 11: khz = 2462000; break; \
579 case 12: khz = 2467000; break; \
580 case 13: khz = 2472000; break; \
581 case 14: khz = 2484000; break; \
582 case 36: /* UNII */ khz = 5180000; break; \
583 case 40: /* UNII */ khz = 5200000; break; \
584 case 44: /* UNII */ khz = 5220000; break; \
585 case 48: /* UNII */ khz = 5240000; break; \
586 case 52: /* UNII */ khz = 5260000; break; \
587 case 56: /* UNII */ khz = 5280000; break; \
588 case 60: /* UNII */ khz = 5300000; break; \
589 case 64: /* UNII */ khz = 5320000; break; \
590 case 149: /* UNII */ khz = 5745000; break; \
591 case 153: /* UNII */ khz = 5765000; break; \
592 case 157: /* UNII */ khz = 5785000; break; \
593 case 161: /* UNII */ khz = 5805000; break; \
594 case 165: /* UNII */ khz = 5825000; break; \
595 case 100: /* HiperLAN2 */ khz = 5500000; break; \
596 case 104: /* HiperLAN2 */ khz = 5520000; break; \
597 case 108: /* HiperLAN2 */ khz = 5540000; break; \
598 case 112: /* HiperLAN2 */ khz = 5560000; break; \
599 case 116: /* HiperLAN2 */ khz = 5580000; break; \
600 case 120: /* HiperLAN2 */ khz = 5600000; break; \
601 case 124: /* HiperLAN2 */ khz = 5620000; break; \
602 case 128: /* HiperLAN2 */ khz = 5640000; break; \
603 case 132: /* HiperLAN2 */ khz = 5660000; break; \
604 case 136: /* HiperLAN2 */ khz = 5680000; break; \
605 case 140: /* HiperLAN2 */ khz = 5700000; break; \
606 case 34: /* Japan MMAC */ khz = 5170000; break; \
607 case 38: /* Japan MMAC */ khz = 5190000; break; \
608 case 42: /* Japan MMAC */ khz = 5210000; break; \
609 case 46: /* Japan MMAC */ khz = 5230000; break; \
610 case 184: /* Japan */ khz = 4920000; break; \
611 case 188: /* Japan */ khz = 4940000; break; \
612 case 192: /* Japan */ khz = 4960000; break; \
613 case 196: /* Japan */ khz = 4980000; break; \
614 case 208: /* Japan, means J08 */ khz = 5040000; break; \
615 case 212: /* Japan, means J12 */ khz = 5060000; break; \
616 case 216: /* Japan, means J16 */ khz = 5080000; break; \
617 default: khz = 2412000; break; \
621 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
624 case 2412000: ch = 1; break; \
625 case 2417000: ch = 2; break; \
626 case 2422000: ch = 3; break; \
627 case 2427000: ch = 4; break; \
628 case 2432000: ch = 5; break; \
629 case 2437000: ch = 6; break; \
630 case 2442000: ch = 7; break; \
631 case 2447000: ch = 8; break; \
632 case 2452000: ch = 9; break; \
633 case 2457000: ch = 10; break; \
634 case 2462000: ch = 11; break; \
635 case 2467000: ch = 12; break; \
636 case 2472000: ch = 13; break; \
637 case 2484000: ch = 14; break; \
638 case 5180000: ch = 36; /* UNII */ break; \
639 case 5200000: ch = 40; /* UNII */ break; \
640 case 5220000: ch = 44; /* UNII */ break; \
641 case 5240000: ch = 48; /* UNII */ break; \
642 case 5260000: ch = 52; /* UNII */ break; \
643 case 5280000: ch = 56; /* UNII */ break; \
644 case 5300000: ch = 60; /* UNII */ break; \
645 case 5320000: ch = 64; /* UNII */ break; \
646 case 5745000: ch = 149; /* UNII */ break; \
647 case 5765000: ch = 153; /* UNII */ break; \
648 case 5785000: ch = 157; /* UNII */ break; \
649 case 5805000: ch = 161; /* UNII */ break; \
650 case 5825000: ch = 165; /* UNII */ break; \
651 case 5500000: ch = 100; /* HiperLAN2 */ break; \
652 case 5520000: ch = 104; /* HiperLAN2 */ break; \
653 case 5540000: ch = 108; /* HiperLAN2 */ break; \
654 case 5560000: ch = 112; /* HiperLAN2 */ break; \
655 case 5580000: ch = 116; /* HiperLAN2 */ break; \
656 case 5600000: ch = 120; /* HiperLAN2 */ break; \
657 case 5620000: ch = 124; /* HiperLAN2 */ break; \
658 case 5640000: ch = 128; /* HiperLAN2 */ break; \
659 case 5660000: ch = 132; /* HiperLAN2 */ break; \
660 case 5680000: ch = 136; /* HiperLAN2 */ break; \
661 case 5700000: ch = 140; /* HiperLAN2 */ break; \
662 case 5170000: ch = 34; /* Japan MMAC */ break; \
663 case 5190000: ch = 38; /* Japan MMAC */ break; \
664 case 5210000: ch = 42; /* Japan MMAC */ break; \
665 case 5230000: ch = 46; /* Japan MMAC */ break; \
666 case 4920000: ch = 184; /* Japan */ break; \
667 case 4940000: ch = 188; /* Japan */ break; \
668 case 4960000: ch = 192; /* Japan */ break; \
669 case 4980000: ch = 196; /* Japan */ break; \
670 case 5040000: ch = 208; /* Japan, means J08 */ break; \
671 case 5060000: ch = 212; /* Japan, means J12 */ break; \
672 case 5080000: ch = 216; /* Japan, means J16 */ break; \
673 default: ch = 1; break; \
678 // Common fragment list structure - Identical to the scatter gather frag list structure
680 #define NIC_MAX_PHYS_BUF_COUNT 8
682 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
686 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
689 typedef struct _RTMP_SCATTER_GATHER_LIST {
690 ULONG NumberOfElements;
692 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
693 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
696 // Some utility macros
699 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
703 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
706 #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))))
708 #define INC_COUNTER64(Val) (Val.QuadPart++)
710 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
711 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
712 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
713 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
715 // Check LEAP & CCKM flags
716 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
717 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
719 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
720 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
722 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
724 _pExtraLlcSnapEncap = SNAP_802_1H; \
725 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
726 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
728 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
733 _pExtraLlcSnapEncap = NULL; \
737 // New Define for new Tx Path.
738 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
740 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
742 _pExtraLlcSnapEncap = SNAP_802_1H; \
743 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
744 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
746 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
751 _pExtraLlcSnapEncap = NULL; \
756 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
758 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
759 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
760 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
763 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
764 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
765 // else remove the LLC/SNAP field from the result Ethernet frame
766 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
768 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
769 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
770 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
774 _pRemovedLLCSNAP = NULL; \
775 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
776 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
778 PUCHAR pProto = _pData + 6; \
780 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
781 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
783 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
784 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
785 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
789 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
790 _pRemovedLLCSNAP = _pData; \
791 _DataSize -= LENGTH_802_1_H; \
792 _pData += LENGTH_802_1_H; \
797 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
798 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
799 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
803 #define SWITCH_AB( _pAA, _pBB) \
811 // Enqueue this frame to MLME engine
812 // We need to enqueue the whole frame because MLME need to pass data type
813 // information from 802.11 header
814 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
816 UINT32 High32TSF, Low32TSF; \
817 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
818 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
819 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
822 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
823 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
825 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
826 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
829 // Check if it is Japan W53(ch52,56,60,64) channel.
831 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
833 #ifdef CONFIG_STA_SUPPORT
834 #define STA_PORT_SECURED(_pAd) \
836 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
837 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
838 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
839 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
840 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
842 #endif // CONFIG_STA_SUPPORT //
846 // Register set pair for initialzation register set definition
848 typedef struct _RTMP_REG_PAIR
852 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
854 typedef struct _REG_PAIR
858 } REG_PAIR, *PREG_PAIR;
861 // Register set pair for initialzation register set definition
863 typedef struct _RTMP_RF_REGS
870 } RTMP_RF_REGS, *PRTMP_RF_REGS;
872 typedef struct _FREQUENCY_ITEM {
877 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
880 // Data buffer for DMA operation, the buffer must be contiguous physical memory
881 // Both DMA to / from CPU use the same structure.
883 typedef struct _RTMP_DMABUF
886 PVOID AllocVa; // TxBuf virtual address
887 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
888 } RTMP_DMABUF, *PRTMP_DMABUF;
891 typedef union _HEADER_802_11_SEQ{
904 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
907 // Data buffer for DMA operation, the buffer must be contiguous physical memory
908 // Both DMA to / from CPU use the same structure.
910 typedef struct _RTMP_REORDERBUF
913 PVOID AllocVa; // TxBuf virtual address
914 UCHAR Header802_3[14];
915 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
919 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
920 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
923 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
924 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
925 // which won't be released, driver has to wait until upper layer return the packet
926 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
927 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
928 // which driver should ACK upper layer when the tx is physically done or failed.
930 typedef struct _RTMP_DMACB
932 ULONG AllocSize; // Control block size
933 PVOID AllocVa; // Control block virtual address
934 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
935 PNDIS_PACKET pNdisPacket;
936 PNDIS_PACKET pNextNdisPacket;
938 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
939 } RTMP_DMACB, *PRTMP_DMACB;
941 typedef struct _RTMP_TX_BUF
945 ULONG AllocSize; // Control block size
946 PVOID AllocVa; // Control block virtual address
947 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
948 } RTMP_TXBUF, *PRTMP_TXBUF;
950 typedef struct _RTMP_RX_BUF
954 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
955 } RTMP_RXBUF, *PRTMP_RXBUF;
956 typedef struct _RTMP_TX_RING
958 RTMP_DMACB Cell[TX_RING_SIZE];
961 UINT32 TxSwFreeIdx; // software next free tx index
962 } RTMP_TX_RING, *PRTMP_TX_RING;
964 typedef struct _RTMP_RX_RING
966 RTMP_DMACB Cell[RX_RING_SIZE];
969 INT32 RxSwReadIdx; // software next read index
970 } RTMP_RX_RING, *PRTMP_RX_RING;
972 typedef struct _RTMP_MGMT_RING
974 RTMP_DMACB Cell[MGMT_RING_SIZE];
977 UINT32 TxSwFreeIdx; // software next free tx index
978 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
981 // Statistic counter structure
983 typedef struct _COUNTER_802_3
993 ULONG RcvAlignmentErrors;
995 ULONG MoreCollisions;
997 } COUNTER_802_3, *PCOUNTER_802_3;
999 typedef struct _COUNTER_802_11 {
1001 LARGE_INTEGER LastTransmittedFragmentCount;
1002 LARGE_INTEGER TransmittedFragmentCount;
1003 LARGE_INTEGER MulticastTransmittedFrameCount;
1004 LARGE_INTEGER FailedCount;
1005 LARGE_INTEGER RetryCount;
1006 LARGE_INTEGER MultipleRetryCount;
1007 LARGE_INTEGER RTSSuccessCount;
1008 LARGE_INTEGER RTSFailureCount;
1009 LARGE_INTEGER ACKFailureCount;
1010 LARGE_INTEGER FrameDuplicateCount;
1011 LARGE_INTEGER ReceivedFragmentCount;
1012 LARGE_INTEGER MulticastReceivedFrameCount;
1013 LARGE_INTEGER FCSErrorCount;
1014 } COUNTER_802_11, *PCOUNTER_802_11;
1016 typedef struct _COUNTER_RALINK {
1017 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1018 ULONG LastReceivedByteCount;
1019 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1020 ULONG BeenDisassociatedCount;
1021 ULONG BadCQIAutoRecoveryCount;
1022 ULONG PoorCQIRoamingCount;
1023 ULONG MgmtRingFullCount;
1024 ULONG RxCountSinceLastNULL;
1026 ULONG RxRingErrCount;
1028 ULONG TxRingErrCount;
1029 LARGE_INTEGER RealFcsErrCount;
1030 ULONG PendingNdisPacketCount;
1032 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1033 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1034 UINT32 OneSecTxDoneCount;
1035 ULONG OneSecRxCount;
1036 UINT32 OneSecTxAggregationCount;
1037 UINT32 OneSecRxAggregationCount;
1039 UINT32 OneSecFrameDuplicateCount;
1042 UINT32 OneSecTxNoRetryOkCount;
1043 UINT32 OneSecTxRetryOkCount;
1044 UINT32 OneSecTxFailCount;
1045 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1046 UINT32 OneSecRxOkCnt; // RX without error
1047 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1048 UINT32 OneSecRxFcsErrCnt; // CRC error
1049 UINT32 OneSecBeaconSentCnt;
1050 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1051 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1054 ULONG TxNonAggCount;
1055 ULONG TxAgg1MPDUCount;
1056 ULONG TxAgg2MPDUCount;
1057 ULONG TxAgg3MPDUCount;
1058 ULONG TxAgg4MPDUCount;
1059 ULONG TxAgg5MPDUCount;
1060 ULONG TxAgg6MPDUCount;
1061 ULONG TxAgg7MPDUCount;
1062 ULONG TxAgg8MPDUCount;
1063 ULONG TxAgg9MPDUCount;
1064 ULONG TxAgg10MPDUCount;
1065 ULONG TxAgg11MPDUCount;
1066 ULONG TxAgg12MPDUCount;
1067 ULONG TxAgg13MPDUCount;
1068 ULONG TxAgg14MPDUCount;
1069 ULONG TxAgg15MPDUCount;
1070 ULONG TxAgg16MPDUCount;
1072 LARGE_INTEGER TransmittedOctetsInAMSDU;
1073 LARGE_INTEGER TransmittedAMSDUCount;
1074 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1075 LARGE_INTEGER ReceivedAMSDUCount;
1076 LARGE_INTEGER TransmittedAMPDUCount;
1077 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1078 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1079 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1080 } COUNTER_RALINK, *PCOUNTER_RALINK;
1082 typedef struct _PID_COUNTER {
1083 ULONG TxAckRequiredCount; // CRC error
1085 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1086 ULONG LastSuccessRate;
1087 } PID_COUNTER, *PPID_COUNTER;
1089 typedef struct _COUNTER_DRS {
1090 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1091 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1092 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1093 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1094 ULONG CurrTxRateStableTime; // # of second in current TX rate
1095 BOOLEAN fNoisyEnvironment;
1096 BOOLEAN fLastSecAccordingRSSI;
1097 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1098 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1099 ULONG LastTxOkCount;
1100 } COUNTER_DRS, *PCOUNTER_DRS;
1103 // Arcfour Structure Added by PaulWu
1105 typedef struct _ARCFOUR
1110 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1112 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1113 typedef struct _RECEIVE_SETTING {
1114 #ifdef RT_BIG_ENDIAN
1118 USHORT STBC:2; //SPACE
1120 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1121 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1123 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1124 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1126 USHORT STBC:2; //SPACE
1131 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1133 // Shared key data structure
1134 typedef struct _WEP_KEY {
1135 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1136 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1137 } WEP_KEY, *PWEP_KEY;
1139 typedef struct _CIPHER_KEY {
1140 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1141 UCHAR RxMic[8]; // make alignment
1143 UCHAR TxTsc[6]; // 48bit TSC value
1144 UCHAR RxTsc[6]; // 48bit TSC value
1145 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1147 #ifdef CONFIG_STA_SUPPORT
1149 #endif // CONFIG_STA_SUPPORT //
1150 // Key length for each key, 0: entry is invalid
1151 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1152 } CIPHER_KEY, *PCIPHER_KEY;
1154 typedef struct _BBP_TUNING_STRUCT {
1156 UCHAR FalseCcaCountUpperBound; // 100 per sec
1157 UCHAR FalseCcaCountLowerBound; // 10 per sec
1158 UCHAR R17LowerBound; // specified in E2PROM
1159 UCHAR R17UpperBound; // 0x68 according to David Tung
1160 UCHAR CurrentR17Value;
1161 } BBP_TUNING, *PBBP_TUNING;
1163 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1164 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1165 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1166 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1167 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1168 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1169 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1170 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1171 SHORT Pair1LastAvgRssi; //
1172 SHORT Pair2LastAvgRssi; //
1173 ULONG RcvPktNumWhenEvaluate;
1174 BOOLEAN FirstPktArrivedWhenEvaluate;
1175 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1176 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1178 typedef struct _LEAP_AUTH_INFO {
1179 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1180 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1182 UCHAR UserName[256]; //LEAP, User name
1184 UCHAR Password[256]; //LEAP, User Password
1186 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1189 UCHAR Addr[MAC_ADDR_LEN];
1190 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1191 //00 02-Authentication timeout
1192 //00 03-Challenge from AP failed
1193 //00 04-Challenge to AP failed
1195 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1199 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1200 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1206 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1209 // Receive Tuple Cache Format
1211 typedef struct _TUPLE_CACHE {
1213 UCHAR MacAddress[MAC_ADDR_LEN];
1216 } TUPLE_CACHE, *PTUPLE_CACHE;
1219 // Fragment Frame structure
1221 typedef struct _FRAGMENT_FRAME {
1222 PNDIS_PACKET pFragPacket;
1226 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1227 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1231 // Packet information for NdisQueryPacket
1233 typedef struct _PACKET_INFO {
1234 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1235 UINT BufferCount ; // Number of Buffer descriptor chained
1236 UINT TotalPacketLength ; // Self explained
1237 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1238 } PACKET_INFO, *PPACKET_INFO;
1241 // Tkip Key structure which RC4 key & MIC calculation
1243 typedef struct _TKIP_KEY_INFO {
1244 UINT nBytesInM; // # bytes in M for MICKEY
1247 ULONG K0; // for MICKEY Low
1248 ULONG K1; // for MICKEY Hig
1249 ULONG L; // Current state for MICKEY
1250 ULONG R; // Current state for MICKEY
1251 ULONG M; // Message accumulator for MICKEY
1254 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1257 // Private / Misc data, counters for driver internal use
1259 typedef struct __PRIVATE_STRUC {
1260 UINT SystemResetCnt; // System reset counter
1261 UINT TxRingFullCnt; // Tx ring full occurrance number
1262 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1263 // Variables for WEP encryption / decryption in rtmp_wep.c
1265 ARCFOURCONTEXT WEPCONTEXT;
1269 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1271 // structure to tune BBP R66 (BBP TUNING)
1272 typedef struct _BBP_R66_TUNING {
1274 USHORT FalseCcaLowerThreshold; // default 100
1275 USHORT FalseCcaUpperThreshold; // default 512
1277 UCHAR R66CurrentValue;
1278 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1279 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1281 // structure to store channel TX power
1282 typedef struct _CHANNEL_TX_POWER {
1283 USHORT RemainingTimeForUse; //unit: sec
1289 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1291 // structure to store 802.11j channel TX power
1292 typedef struct _CHANNEL_11J_TX_POWER {
1294 UCHAR BW; // BW_10 or BW_20
1297 USHORT RemainingTimeForUse; //unit: sec
1298 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1300 typedef enum _ABGBAND_STATE_ {
1306 typedef struct _MLME_STRUCT {
1307 #ifdef CONFIG_STA_SUPPORT
1308 // STA state machines
1309 STATE_MACHINE CntlMachine;
1310 STATE_MACHINE AssocMachine;
1311 STATE_MACHINE AuthMachine;
1312 STATE_MACHINE AuthRspMachine;
1313 STATE_MACHINE SyncMachine;
1314 STATE_MACHINE WpaPskMachine;
1315 STATE_MACHINE LeapMachine;
1316 STATE_MACHINE AironetMachine;
1317 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1318 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1319 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1320 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1321 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1322 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1323 #endif // CONFIG_STA_SUPPORT //
1324 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1326 STATE_MACHINE ActMachine;
1328 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1329 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1330 ULONG LastSendNULLpsmTime;
1333 NDIS_SPIN_LOCK TaskLock;
1338 RALINK_TIMER_STRUCT PeriodicTimer;
1339 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1340 RALINK_TIMER_STRUCT LinkDownTimer;
1341 RALINK_TIMER_STRUCT LinkUpTimer;
1342 UCHAR bPsPollTimerRunning;
1343 RALINK_TIMER_STRUCT PsPollTimer;
1344 RALINK_TIMER_STRUCT RadioOnOffTimer;
1345 ULONG PeriodicRound;
1346 ULONG OneSecPeriodicRound;
1349 BOOLEAN bLowThroughput;
1350 BOOLEAN bEnableAutoAntennaCheck;
1351 RALINK_TIMER_STRUCT RxAntEvalTimer;
1354 } MLME_STRUCT, *PMLME_STRUCT;
1356 // structure for radar detection and channel switch
1357 typedef struct _RADAR_DETECT_STRUCT {
1358 UCHAR CSCount; //Channel switch counter
1359 UCHAR CSPeriod; //Channel switch period (beacon count)
1360 UCHAR RDCount; //Radar detection counter
1361 UCHAR RDMode; //Radar Detection mode
1362 UCHAR RDDurRegion; //Radar detection duration region
1369 ULONG InServiceMonitorCount; // unit: sec
1370 UINT8 DfsSessionTime;
1373 UINT8 LongPulseRadarTh;
1374 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1376 typedef enum _REC_BLOCKACK_STATUS
1380 Recipient_HandleRes,
1382 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1384 typedef enum _ORI_BLOCKACK_STATUS
1390 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1392 #ifdef DOT11_N_SUPPORT
1393 typedef struct _BA_ORI_ENTRY{
1398 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1400 USHORT TimeOutValue;
1401 ORI_BLOCKACK_STATUS ORI_BA_Status;
1402 RALINK_TIMER_STRUCT ORIBATimer;
1404 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1406 typedef struct _BA_REC_ENTRY {
1409 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1411 USHORT TimeOutValue;
1412 RALINK_TIMER_STRUCT RECBATimer;
1413 ULONG LastIndSeqAtTimer;
1416 REC_BLOCKACK_STATUS REC_BA_Status;
1417 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1419 struct reordering_list list;
1420 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1424 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1425 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1426 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1427 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1428 } BA_TABLE, *PBA_TABLE;
1430 //For QureyBATableOID use;
1431 typedef struct PACKED _OID_BA_REC_ENTRY{
1432 UCHAR MACAddr[MAC_ADDR_LEN];
1433 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1436 REC_BLOCKACK_STATUS REC_BA_Status[8];
1437 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1439 //For QureyBATableOID use;
1440 typedef struct PACKED _OID_BA_ORI_ENTRY{
1441 UCHAR MACAddr[MAC_ADDR_LEN];
1442 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
1445 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1446 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1448 typedef struct _QUERYBA_TABLE{
1449 OID_BA_ORI_ENTRY BAOriEntry[32];
1450 OID_BA_REC_ENTRY BARecEntry[32];
1451 UCHAR OriNum;// Number of below BAOriEntry
1452 UCHAR RecNum;// Number of below BARecEntry
1453 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1455 typedef union _BACAP_STRUC {
1456 #ifdef RT_BIG_ENDIAN
1459 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.
1460 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1461 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1462 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1463 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1464 UINT32 MpduDensity:3;
1465 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1466 UINT32 AutoBA:1; // automatically BA
1467 UINT32 TxBAWinLimit:8;
1468 UINT32 RxBAWinLimit:8;
1472 UINT32 RxBAWinLimit:8;
1473 UINT32 TxBAWinLimit:8;
1474 UINT32 AutoBA:1; // automatically BA
1475 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1476 UINT32 MpduDensity:3;
1477 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1478 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1479 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1480 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1481 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.
1486 } BACAP_STRUC, *PBACAP_STRUC;
1487 #endif // DOT11_N_SUPPORT //
1489 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1490 typedef struct _IOT_STRUC {
1492 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1493 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1494 ULONG OneSecInWindowCount;
1495 ULONG OneSecFrameDuplicateCount;
1496 ULONG OneSecOutWindowCount;
1501 BOOLEAN bRTSLongProtOn;
1502 #ifdef CONFIG_STA_SUPPORT
1503 BOOLEAN bLastAtheros;
1504 BOOLEAN bCurrentAtheros;
1505 BOOLEAN bNowAtherosBurstOn;
1506 BOOLEAN bNextDisableRxBA;
1508 #endif // CONFIG_STA_SUPPORT //
1509 } IOT_STRUC, *PIOT_STRUC;
1511 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1512 typedef union _REG_TRANSMIT_SETTING {
1513 #ifdef RT_BIG_ENDIAN
1519 UINT32 STBC:1; //SPACE
1521 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1522 UINT32 TxBF:1; // 3*3
1529 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1531 UINT32 STBC:1; //SPACE
1539 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1541 typedef union _DESIRED_TRANSMIT_SETTING {
1542 #ifdef RT_BIG_ENDIAN
1545 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1547 USHORT MCS:7; // MCS
1551 USHORT MCS:7; // MCS
1553 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1558 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1561 BOOLEAN IsRecipient;
1562 UCHAR MACAddr[MAC_ADDR_LEN];
1566 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1567 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1570 // Multiple SSID structure
1572 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1573 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1575 /* clear bcmc TIM bit */
1576 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1577 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1579 /* set bcmc TIM bit */
1580 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1581 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1583 /* clear a station PS TIM bit */
1584 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1585 { UCHAR tim_offset = wcid >> 3; \
1586 UCHAR bit_offset = wcid & 0x7; \
1587 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1589 /* set a station PS TIM bit */
1590 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1591 { UCHAR tim_offset = wcid >> 3; \
1592 UCHAR bit_offset = wcid & 0x7; \
1593 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1596 typedef struct _MULTISSID_STRUCT {
1597 UCHAR Bssid[MAC_ADDR_LEN];
1599 CHAR Ssid[MAX_LEN_OF_SSID];
1600 USHORT CapabilityInfo;
1604 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1605 NDIS_802_11_WEP_STATUS WepStatus;
1606 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1607 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1611 ULONG ReceivedByteCount;
1612 ULONG TransmittedByteCount;
1616 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1617 RT_HT_PHY_INFO DesiredHtPhyInfo;
1618 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1619 BOOLEAN bAutoTxRateSwitch;
1623 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1624 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1625 UCHAR DesiredRatesIndex;
1626 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1628 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1638 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1639 UCHAR BANClass3Data;
1640 ULONG IsolateInterStaTraffic;
1643 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1646 UCHAR TimIELocationInBeacon;
1647 UCHAR CapabilityInfoLocationInBeacon;
1648 // outgoing BEACON frame buffer and corresponding TXWI
1649 // PTXWI_STRUC BeaconTxWI; //
1650 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1653 UINT16 StationKeepAliveTime; // unit: second
1656 USHORT VLAN_Priority;
1658 RT_802_11_ACL AccessControlList;
1661 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1662 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1664 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1666 // For 802.1x daemon setting per BSS
1667 UCHAR radius_srv_num;
1668 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1671 unsigned int mylinkid;
1675 UINT32 RcvdConflictSsidCount;
1676 UINT32 RcvdSpoofedAssocRespCount;
1677 UINT32 RcvdSpoofedReassocRespCount;
1678 UINT32 RcvdSpoofedProbeRespCount;
1679 UINT32 RcvdSpoofedBeaconCount;
1680 UINT32 RcvdSpoofedDisassocCount;
1681 UINT32 RcvdSpoofedAuthCount;
1682 UINT32 RcvdSpoofedDeauthCount;
1683 UINT32 RcvdSpoofedUnknownMgmtCount;
1684 UINT32 RcvdReplayAttackCount;
1686 CHAR RssiOfRcvdConflictSsid;
1687 CHAR RssiOfRcvdSpoofedAssocResp;
1688 CHAR RssiOfRcvdSpoofedReassocResp;
1689 CHAR RssiOfRcvdSpoofedProbeResp;
1690 CHAR RssiOfRcvdSpoofedBeacon;
1691 CHAR RssiOfRcvdSpoofedDisassoc;
1692 CHAR RssiOfRcvdSpoofedAuth;
1693 CHAR RssiOfRcvdSpoofedDeauth;
1694 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1695 CHAR RssiOfRcvdReplayAttack;
1699 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1701 // configuration common to OPMODE_AP as well as OPMODE_STA
1702 typedef struct _COMMON_CONFIG {
1704 BOOLEAN bCountryFlag;
1705 UCHAR CountryCode[3];
1707 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1708 UCHAR CountryRegionForABand; // Enum of country region for A band
1709 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1710 USHORT Dsifs; // in units of usec
1711 ULONG PacketFilter; // Packet filter for receiving
1713 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1714 UCHAR SsidLen; // the actual ssid length in used
1715 UCHAR LastSsidLen; // the actual ssid length in used
1716 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1717 UCHAR LastBssid[MAC_ADDR_LEN];
1719 UCHAR Bssid[MAC_ADDR_LEN];
1720 USHORT BeaconPeriod;
1722 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1724 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1726 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1728 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1729 UCHAR MaxDesiredRate;
1730 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1732 ULONG BasicRateBitmap; // backup basic ratebitmap
1734 BOOLEAN bAPSDCapable;
1735 BOOLEAN bInServicePeriod;
1740 BOOLEAN bNeedSendTriggerFrame;
1741 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1742 ULONG TriggerTimerCount;
1744 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1745 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1746 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1747 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1748 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1749 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1750 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1751 UCHAR RtsRate; // RATE_xxx
1752 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1753 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1754 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1756 USHORT RtsThreshold; // in unit of BYTE
1757 USHORT FragmentThreshold; // in unit of BYTE
1759 UCHAR TxPower; // in unit of mW
1760 ULONG TxPowerPercentage; // 0~100 %
1761 ULONG TxPowerDefault; // keep for TxPowerPercentage
1763 #ifdef DOT11_N_SUPPORT
1764 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1765 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1766 #endif // DOT11_N_SUPPORT //
1767 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1768 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1769 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1770 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1771 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1772 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1773 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1774 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1775 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1776 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1778 #ifdef DOT11_N_SUPPORT
1780 #endif // DOT11_N_SUPPORT //
1781 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1782 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1783 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1784 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1785 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1786 #ifdef CONFIG_STA_SUPPORT
1787 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1788 #endif // CONFIG_STA_SUPPORT //
1789 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1790 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1791 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1792 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1793 ULONG OpStatusFlags;
1795 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1796 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1798 // IEEE802.11H--DFS.
1799 RADAR_DETECT_STRUCT RadarDetect;
1801 #ifdef DOT11_N_SUPPORT
1803 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1804 //RT_HT_CAPABILITY SupportedHtPhy;
1805 RT_HT_CAPABILITY DesiredHtPhy;
1806 HT_CAPABILITY_IE HtCapability;
1807 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1808 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1809 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1810 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
1813 BOOLEAN bMIMOPSEnable;
1815 BOOLEAN bDisableReordering;
1816 BOOLEAN bForty_Mhz_Intolerant;
1817 BOOLEAN bExtChannelSwitchAnnouncement;
1818 BOOLEAN bRcvBSSWidthTriggerEvents;
1819 ULONG LastRcvBSSWidthTriggerEventsTime;
1822 #endif // DOT11_N_SUPPORT //
1824 // Enable wireless event
1825 BOOLEAN bWirelessEvent;
1826 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1828 // Tx & Rx Stream number selection
1832 // transmit phy mode, trasmit rate for Multicast.
1833 #ifdef MCAST_RATE_SPECIFIC
1834 UCHAR McastTransmitMcs;
1835 UCHAR McastTransmitPhyMode;
1836 #endif // MCAST_RATE_SPECIFIC //
1838 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1842 NDIS_SPIN_LOCK MeasureReqTabLock;
1843 PMEASURE_REQ_TAB pMeasureReqTab;
1845 NDIS_SPIN_LOCK TpcReqTabLock;
1846 PTPC_REQ_TAB pTpcReqTab;
1848 // transmit phy mode, trasmit rate for Multicast.
1849 #ifdef MCAST_RATE_SPECIFIC
1850 HTTRANSMIT_SETTING MCastPhyMode;
1851 #endif // MCAST_RATE_SPECIFIC //
1852 } COMMON_CONFIG, *PCOMMON_CONFIG;
1855 #ifdef CONFIG_STA_SUPPORT
1856 /* Modified by Wu Xi-Kun 4/21/2006 */
1857 // STA configuration and status
1858 typedef struct _STA_ADMIN_CONFIG {
1860 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1861 // the user intended configuration, but not necessary fully equal to the final
1862 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1863 // AP or IBSS holder).
1864 // Once initialized, user configuration can only be changed via OID_xxx
1865 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1866 USHORT AtimWin; // used when starting a new IBSS
1869 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1870 // the user intended configuration, and should be always applied to the final
1871 // settings in ACTIVE BSS without compromising with the BSS holder.
1872 // Once initialized, user configuration can only be changed via OID_xxx
1874 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1875 USHORT DefaultListenCount; // default listen count;
1876 ULONG WindowsPowerMode; // Power mode for AC power
1877 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1878 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1879 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1880 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1882 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1883 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1884 USHORT DisassocReason;
1885 UCHAR DisassocSta[MAC_ADDR_LEN];
1886 USHORT DeauthReason;
1887 UCHAR DeauthSta[MAC_ADDR_LEN];
1888 USHORT AuthFailReason;
1889 UCHAR AuthFailSta[MAC_ADDR_LEN];
1891 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1892 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1893 NDIS_802_11_WEP_STATUS WepStatus;
1894 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1896 // Add to support different cipher suite for WPA2/WPA mode
1897 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1898 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1899 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1900 USHORT RsnCapability;
1902 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1904 UCHAR PMK[32]; // WPA PSK mode PMK
1905 UCHAR PTK[64]; // WPA PSK mode PTK
1906 UCHAR GTK[32]; // GTK from authenticator
1907 BSSID_INFO SavedPMK[PMKID_NO];
1908 UINT SavedPMKNum; // Saved PMKID number
1913 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1916 // For WPA countermeasures
1917 ULONG LastMicErrorTime; // record last MIC error time
1918 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1919 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1920 // For WPA-PSK supplicant state
1921 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1922 UCHAR ReplayCounter[8];
1923 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1924 UCHAR SNonce[32]; // SNonce for WPA-PSK
1926 UCHAR LastSNR0; // last received BEACON's SNR
1927 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1928 RSSI_SAMPLE RssiSample;
1929 ULONG NumOfAvgRssiSample;
1931 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1932 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1933 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1934 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1936 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1937 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1938 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1939 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1940 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1941 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1942 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1944 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
1945 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
1946 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
1948 // New for WPA, windows want us to to keep association information and
1949 // Fixed IEs from last association response
1950 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1951 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1952 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1953 USHORT ResVarIELen; // Length of next VIE include EID & Length
1954 UCHAR ResVarIEs[MAX_VIE_LEN];
1957 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
1959 // New variables used for CCX 1.0
1961 BOOLEAN bCkipCmicOn;
1963 UCHAR GIV[3]; //for CCX iv
1968 LEAP_AUTH_INFO LeapAuthInfo;
1970 UCHAR NetworkChallenge[8];
1971 UCHAR NetworkChallengeResponse[24];
1972 UCHAR PeerChallenge[8];
1974 UCHAR PeerChallengeResponse[24];
1975 UCHAR SessionKey[16]; //Network session keys (NSK)
1976 RALINK_TIMER_STRUCT LeapAuthTimer;
1977 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
1979 // New control flags for CCX
1980 CCX_CONTROL CCXControl; // Master administration state
1981 BOOLEAN CCXEnable; // Actual CCX state
1982 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
1983 USHORT CCXScanTime; // Time out to wait for beacon and probe response
1984 UCHAR CCXReqType; // Current processing CCX request type
1985 BSS_TABLE CCXBssTab; // BSS Table
1986 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
1987 USHORT FrameReportLen; // Current Frame report length
1988 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
1989 USHORT RPIDensity[8]; // Array for RPI density collection
1990 // Start address of each BSS table within FrameReportBuf
1991 // It's important to update the RxPower of the corresponding Bss
1992 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
1993 USHORT BeaconToken; // Token for beacon report
1994 ULONG LastBssIndex; // Most current reported Bss index
1995 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
1996 UCHAR RMReqCnt; // Number of measurement request saved.
1997 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
1998 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
1999 // It must be the same channel with maximum duration
2000 USHORT ParallelDuration; // Maximum duration for parallel measurement
2001 UCHAR ParallelChannel; // Only one channel with parallel measurement
2002 USHORT IAPPToken; // IAPP dialog token
2003 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2004 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2005 // Hack for channel load and noise histogram parameters
2006 UCHAR NHFactor; // Parameter for Noise histogram
2007 UCHAR CLFactor; // Parameter for channel load
2009 UCHAR KRK[16]; //Key Refresh Key.
2010 UCHAR BTK[32]; //Base Transient Key
2011 BOOLEAN CCKMLinkUpFlag;
2012 ULONG CCKMRN; //(Re)Association request number.
2013 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2014 UCHAR AironetCellPowerLimit; //in dBm
2015 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2016 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2017 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2018 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2019 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2020 USHORT CCXAdjacentAPChannel;
2021 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2023 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2024 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2026 UCHAR DtimCount; // 0.. DtimPeriod-1
2027 UCHAR DtimPeriod; // default = 3
2029 ////////////////////////////////////////////////////////////////////////////////////////
2030 // This is only for WHQL test.
2032 ////////////////////////////////////////////////////////////////////////////////////////
2034 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2036 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2037 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2039 #ifdef WPA_SUPPLICANT_SUPPORT
2041 BOOLEAN IEEE8021x_required_keys;
2042 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2043 UCHAR DesireSharedKeyId;
2045 // 0: driver ignores wpa_supplicant
2046 // 1: wpa_supplicant initiates scanning and AP selection
2047 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2048 UCHAR WpaSupplicantUP;
2049 UCHAR WpaSupplicantScanCount;
2050 #endif // WPA_SUPPLICANT_SUPPORT //
2055 BOOLEAN bTGnWifiTest;
2056 BOOLEAN bScanReqIsFromWebUI;
2058 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2059 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2060 RT_HT_PHY_INFO DesiredHtPhyInfo;
2061 BOOLEAN bAutoTxRateSwitch;
2064 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2066 // This data structure keep the current active BSS/IBSS's configuration that this STA
2067 // had agreed upon joining the network. Which means these parameters are usually decided
2068 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2069 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2070 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2071 // the current active settings.
2072 typedef struct _STA_ACTIVE_CONFIG {
2074 USHORT AtimWin; // in kusec; IBSS parameter set element
2075 USHORT CapabilityInfo;
2076 USHORT CfpMaxDuration;
2079 // Copy supported rate from desired AP's beacon. We are trying to match
2080 // AP's supported and extended rate settings.
2081 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2082 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2085 // Copy supported ht from desired AP's beacon. We are trying to match
2086 RT_HT_PHY_INFO SupportedPhyInfo;
2087 RT_HT_CAPABILITY SupportedHtPhy;
2088 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2089 #endif // CONFIG_STA_SUPPORT //
2091 // ----------- start of AP --------------------------
2092 // AUTH-RSP State Machine Aux data structure
2093 typedef struct _AP_MLME_AUX {
2094 UCHAR Addr[MAC_ADDR_LEN];
2096 CHAR Challenge[CIPHER_TEXT_LEN];
2097 } AP_MLME_AUX, *PAP_MLME_AUX;
2099 // structure to define WPA Group Key Rekey Interval
2100 typedef struct PACKED _RT_802_11_WPA_REKEY {
2101 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2102 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2103 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2105 typedef struct _MAC_TABLE_ENTRY {
2106 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2107 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2108 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2109 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2110 BOOLEAN ValidAsMesh;
2111 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2113 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2115 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2117 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2118 UCHAR CMTimerRunning;
2119 UCHAR apidx; // MBSS number
2121 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2122 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2123 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2126 RALINK_TIMER_STRUCT RetryTimer;
2127 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2128 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2129 NDIS_802_11_WEP_STATUS WepStatus;
2130 AP_WPA_STATE WpaState;
2133 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2134 CIPHER_KEY PairwiseKey;
2137 UCHAR PMKID[LEN_PMKID];
2140 UCHAR Addr[MAC_ADDR_LEN];
2143 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2144 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2146 USHORT CapabilityInfo;
2148 ULONG NoDataIdleCount;
2149 UINT16 StationKeepAliveCount; // unit: second
2151 QUEUE_HEADER PsQueue;
2153 UINT32 StaConnectTime; // the live time of this station since associated with AP
2156 #ifdef DOT11_N_SUPPORT
2158 USHORT NoBADataCountDown;
2160 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2161 UINT TxBFCount; // 3*3
2162 #endif // DOT11_N_SUPPORT //
2164 UINT DebugFIFOCount;
2169 //====================================================
2170 //WDS entry needs these
2171 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2172 UINT MatchWDSTabIdx;
2173 UCHAR MaxSupportedRate;
2175 UCHAR CurrTxRateIndex;
2176 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2177 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2178 UINT32 OneSecTxNoRetryOkCount;
2179 UINT32 OneSecTxRetryOkCount;
2180 UINT32 OneSecTxFailCount;
2181 UINT32 ContinueTxFailCnt;
2182 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2183 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2184 //====================================================
2186 BOOLEAN fNoisyEnvironment;
2187 BOOLEAN fLastSecAccordingRSSI;
2188 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2189 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2190 ULONG LastTxOkCount;
2191 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2193 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2194 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2195 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2196 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2197 ULONG ClientStatusFlags;
2199 // TODO: Shall we move that to DOT11_N_SUPPORT???
2200 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2202 #ifdef DOT11_N_SUPPORT
2203 // HT EWC MIMO-N used parameters
2204 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2205 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2206 USHORT TXAutoBAbitmap;
2207 USHORT BADeclineBitmap;
2208 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2209 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2210 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2212 // 802.11n features.
2214 UCHAR MaxRAmpduFactor;
2216 UCHAR MmpsMode; // MIMO power save more.
2218 HT_CAPABILITY_IE HTCapability;
2219 #endif // DOT11_N_SUPPORT //
2221 BOOLEAN bAutoTxRateSwitch;
2224 struct _MAC_TABLE_ENTRY *pNext;
2225 USHORT TxSeq[NUM_OF_TID];
2226 USHORT NonQosDataSeq;
2228 RSSI_SAMPLE RssiSample;
2230 UINT32 TXMCSExpected[16];
2231 UINT32 TXMCSSuccessful[16];
2232 UINT32 TXMCSFailed[16];
2233 UINT32 TXMCSAutoFallBack[16][16];
2234 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2236 typedef struct _MAC_TABLE {
2238 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2239 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2240 QUEUE_HEADER McastPsQueue;
2242 BOOLEAN fAnyStationInPsm;
2243 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2244 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2245 #ifdef DOT11_N_SUPPORT
2246 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2247 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2248 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2249 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2250 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2251 #endif // DOT11_N_SUPPORT //
2252 } MAC_TABLE, *PMAC_TABLE;
2254 #ifdef DOT11_N_SUPPORT
2255 #define IS_HT_STA(_pMacEntry) \
2256 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2258 #define IS_HT_RATE(_pMacEntry) \
2259 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2261 #define PEER_IS_HT_RATE(_pMacEntry) \
2262 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2263 #endif // DOT11_N_SUPPORT //
2265 typedef struct _WDS_ENTRY {
2267 UCHAR Addr[MAC_ADDR_LEN];
2268 ULONG NoDataIdleCount;
2269 struct _WDS_ENTRY *pNext;
2270 } WDS_ENTRY, *PWDS_ENTRY;
2272 typedef struct _WDS_TABLE_ENTRY {
2274 UCHAR WdsAddr[MAC_ADDR_LEN];
2275 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2276 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2277 UCHAR MaxSupportedRate;
2279 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2280 USHORT OneSecTxOkCount;
2281 USHORT OneSecTxRetryOkCount;
2282 USHORT OneSecTxFailCount;
2283 ULONG CurrTxRateStableTime; // # of second in current TX rate
2284 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2285 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2287 typedef struct _RT_802_11_WDS_ENTRY {
2291 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2292 UCHAR MacTabMatchWCID; // ASIC
2293 NDIS_802_11_WEP_STATUS WepStatus;
2296 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2297 RT_HT_PHY_INFO DesiredHtPhyInfo;
2298 BOOLEAN bAutoTxRateSwitch;
2299 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2300 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2302 typedef struct _WDS_TABLE {
2305 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2306 } WDS_TABLE, *PWDS_TABLE;
2308 typedef struct _APCLI_STRUCT {
2311 unsigned int mylinkid;
2313 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2314 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2315 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2317 CHAR Ssid[MAX_LEN_OF_SSID];
2320 CHAR CfgSsid[MAX_LEN_OF_SSID];
2321 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2322 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2324 ULONG ApCliRcvBeaconTime;
2326 ULONG CtrlCurrState;
2327 ULONG SyncCurrState;
2328 ULONG AuthCurrState;
2329 ULONG AssocCurrState;
2330 ULONG WpaPskCurrState;
2335 ULONG ClientStatusFlags;
2338 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2339 NDIS_802_11_WEP_STATUS WepStatus;
2341 // Add to support different cipher suite for WPA2/WPA mode
2342 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2343 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2344 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2345 USHORT RsnCapability;
2347 UCHAR PSK[100]; // reserve PSK key material
2349 UCHAR PMK[32]; // WPA PSK mode PMK
2350 UCHAR GTK[32]; // GTK from authenticator
2352 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2355 // store RSN_IE built by driver
2356 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2359 // For WPA countermeasures
2360 ULONG LastMicErrorTime; // record last MIC error time
2361 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2363 // For WPA-PSK supplicant state
2364 UCHAR SNonce[32]; // SNonce for WPA-PSK
2365 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2367 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2368 RT_HT_PHY_INFO DesiredHtPhyInfo;
2369 BOOLEAN bAutoTxRateSwitch;
2370 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2371 } APCLI_STRUCT, *PAPCLI_STRUCT;
2373 // ----------- end of AP ----------------------------
2378 BOOLEAN bGreenField;
2384 typedef struct _INF_PCI_CONFIG
2386 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2389 typedef struct _INF_USB_CONFIG
2391 UINT BulkInEpAddr; // bulk-in endpoint address
2392 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2396 #ifdef IKANOS_VX_1X0
2397 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2399 struct IKANOS_TX_INFO
2401 struct net_device *netdev;
2402 IkanosWlanTxCbFuncP *fp;
2404 #endif // IKANOS_VX_1X0 //
2407 #define DIAGNOSE_TIME 10 // 10 sec
2408 typedef struct _RtmpDiagStrcut_
2409 { // Diagnosis Related element
2410 unsigned char inited;
2412 unsigned char ArrayStartIdx;
2413 unsigned char ArrayCurIdx;
2415 USHORT TxDataCnt[DIAGNOSE_TIME];
2416 USHORT TxFailCnt[DIAGNOSE_TIME];
2417 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2418 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2419 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2421 USHORT TxAggCnt[DIAGNOSE_TIME];
2422 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2423 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2424 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2425 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2428 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2429 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2430 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2432 #endif // DBG_DIAGNOSE //
2436 // The miniport adapter structure
2438 typedef struct _RTMP_ADAPTER
2440 PVOID OS_Cookie; // save specific structure relative to OS
2444 USHORT LnkCtrlBitMask;
2445 USHORT RLnkCtrlConfiguration;
2446 USHORT RLnkCtrlOffset;
2447 USHORT HostLnkCtrlConfiguration;
2448 USHORT HostLnkCtrlOffset;
2449 USHORT PCIePowerSaveLevel;
2450 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2451 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2452 USHORT ThisTbttNumToNextWakeUp;
2453 ULONG SameRxByteCount;
2456 /*****************************************************************************************/
2457 /* PCI related parameters */
2458 /*****************************************************************************************/
2459 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2461 UINT int_enable_reg;
2462 UINT int_disable_mask;
2466 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2467 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2468 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2469 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2472 NDIS_SPIN_LOCK irq_lock;
2477 /*****************************************************************************************/
2478 /* Both PCI/USB related parameters */
2479 /*****************************************************************************************/
2482 /*****************************************************************************************/
2483 /* Tx related parameters */
2484 /*****************************************************************************************/
2485 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2486 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2489 // resource for software backlog queues
2490 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2491 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2493 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2494 RTMP_MGMT_RING MgmtRing;
2495 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2498 /*****************************************************************************************/
2499 /* Rx related parameters */
2500 /*****************************************************************************************/
2502 RTMP_RX_RING RxRing;
2503 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2507 /*****************************************************************************************/
2508 /* ASIC related parameters */
2509 /*****************************************************************************************/
2510 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2512 // ---------------------------
2514 // ---------------------------
2515 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2516 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2517 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2518 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2520 // ---------------------------
2522 // ---------------------------
2523 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2524 UCHAR BbpRssiToDbmDelta;
2525 BBP_R66_TUNING BbpTuning;
2527 // ----------------------------
2529 // ----------------------------
2530 UCHAR RfIcType; // RFIC_xxx
2531 ULONG RfFreqOffset; // Frequency offset for channel switching
2532 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2534 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2535 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2537 // This soft Rx Antenna Diversity mechanism is used only when user set
2538 // RX Antenna = DIVERSITY ON
2539 SOFT_RX_ANT_DIVERSITY RxAnt;
2542 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2543 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2544 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2545 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2547 UCHAR ChannelListNum; // number of channel in ChannelList[]
2550 ULONG Tx20MPwrCfgABand[5];
2551 ULONG Tx20MPwrCfgGBand[5];
2552 ULONG Tx40MPwrCfgABand[5];
2553 ULONG Tx40MPwrCfgGBand[5];
2555 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2556 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2557 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2558 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2559 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2560 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2562 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2563 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2564 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2565 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2566 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2567 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2569 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2570 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2571 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2572 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2575 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2576 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2577 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2578 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2581 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2582 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2583 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2584 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2586 // ----------------------------
2588 // ----------------------------
2589 MCU_LEDCS_STRUC LedCntl;
2590 USHORT Led1; // read from EEPROM 0x3c
2591 USHORT Led2; // EEPROM 0x3e
2592 USHORT Led3; // EEPROM 0x40
2593 UCHAR LedIndicatorStregth;
2594 UCHAR RssiSingalstrengthOffet;
2595 BOOLEAN bLedOnScanning;
2598 /*****************************************************************************************/
2599 /* 802.11 related parameters */
2600 /*****************************************************************************************/
2601 // outgoing BEACON frame buffer and corresponding TXD
2602 TXWI_STRUC BeaconTxWI;
2604 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2606 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2607 PSPOLL_FRAME PsPollFrame;
2608 HEADER_802_11 NullFrame;
2610 //=========AP===========
2613 //=======STA===========
2614 #ifdef CONFIG_STA_SUPPORT
2615 /* Modified by Wu Xi-Kun 4/21/2006 */
2616 // -----------------------------------------------
2617 // STA specific configuration & operation status
2618 // used only when pAd->OpMode == OPMODE_STA
2619 // -----------------------------------------------
2620 STA_ADMIN_CONFIG StaCfg; // user desired settings
2621 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2622 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2623 NDIS_MEDIA_STATE PreMediaState;
2624 #endif // CONFIG_STA_SUPPORT //
2626 //=======Common===========
2627 // OP mode: either AP or STA
2628 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2630 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2632 // MAT related parameters
2634 // configuration: read from Registry & E2PROM
2635 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2636 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2637 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2639 // ------------------------------------------------------
2640 // common configuration to both OPMODE_STA and OPMODE_AP
2641 // ------------------------------------------------------
2642 COMMON_CONFIG CommonCfg;
2645 // AP needs those vaiables for site survey feature.
2646 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2647 BSS_TABLE ScanTab; // store the latest SCAN result
2649 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2650 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2651 NDIS_SPIN_LOCK MacTabLock;
2653 #ifdef DOT11_N_SUPPORT
2655 #endif // DOT11_N_SUPPORT //
2656 NDIS_SPIN_LOCK BATabLock;
2657 RALINK_TIMER_STRUCT RECBATimer;
2659 // encryption/decryption KEY tables
2660 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2662 // RX re-assembly buffer for fragmentation
2663 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2666 COUNTER_802_3 Counters8023; // 802.3 counters
2667 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2668 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2669 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2670 PRIVATE_STRUC PrivateInfo; // Private information & counters
2672 // flags, see fRTMP_ADAPTER_xxx flags
2673 ULONG Flags; // Represent current device status
2674 ULONG PSFlags; // Power Save operation flag.
2676 // current TX sequence #
2679 // Control disconnect / connect event generation
2680 //+++Didn't used anymore
2685 //+++Used only for Station
2686 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2689 ULONG ExtraInfo; // Extra information for displaying status
2690 ULONG SystemErrorBitmap; // b0: E2PROM version error
2692 //+++Didn't used anymore
2693 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2696 // ---------------------------
2698 // ---------------------------
2699 RT_802_11_EVENT_TABLE EventTab;
2704 /*****************************************************************************************/
2705 /* Statistic related parameters */
2706 /*****************************************************************************************/
2708 BOOLEAN bUpdateBcnCntDone;
2709 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2710 // ----------------------------
2712 // ----------------------------
2713 BOOLEAN bBanAllBaSetup;
2714 BOOLEAN bPromiscuous;
2716 // ----------------------------
2717 // rt2860c emulation-use Parameters
2718 // ----------------------------
2721 ULONG cfendaccu[30];
2722 ULONG bacontent[16];
2723 ULONG rxint[RX_RING_SIZE+1];
2726 BOOLEAN bForcePrintTX;
2727 BOOLEAN bForcePrintRX;
2728 BOOLEAN bDisablescanning; //defined in RT2870 USB
2729 BOOLEAN bStaFifoTest;
2730 BOOLEAN bProtectionTest;
2732 BOOLEAN bGenOneHCCA;
2733 BOOLEAN bBroadComHT;
2734 //+++Following add from RT2870 USB.
2736 ULONG BulkOutComplete;
2737 ULONG BulkOutCompleteOther;
2738 ULONG BulkOutCompleteCancel; // seems not use now?
2740 ULONG BulkInComplete;
2741 ULONG BulkInCompleteFail;
2744 struct wificonf WIFItestbed;
2746 #ifdef DOT11_N_SUPPORT
2747 struct reordering_mpdu_pool mpdu_blk_pool;
2748 #endif // DOT11_N_SUPPORT //
2750 ULONG OneSecondnonBEpackets; // record non BE packets per second
2752 #if WIRELESS_EXT >= 12
2753 struct iw_statistics iw_stats;
2756 struct net_device_stats stats;
2758 ULONG TbttTickCount;
2759 #ifdef PCI_MSI_SUPPORT
2761 #endif // PCI_MSI_SUPPORT //
2766 #define TIME_BASE (1000000/OS_HZ)
2767 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2768 UCHAR flg_be_adjust;
2769 ULONG be_adjust_last_time;
2771 #ifdef IKANOS_VX_1X0
2772 struct IKANOS_TX_INFO IkanosTxInfo;
2773 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2774 #endif // IKANOS_VX_1X0 //
2778 RtmpDiagStruct DiagStruct;
2779 #endif // DBG_DIAGNOSE //
2782 UINT8 PM_FlgSuspend;
2783 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2786 // Cisco IAPP format
2788 typedef struct _CISCO_IAPP_CONTENT_
2790 USHORT Length; //IAPP Length
2791 UCHAR MessageType; //IAPP type
2792 UCHAR FunctionCode; //IAPP function type
2793 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2794 UCHAR SourceMAC[MAC_ADDR_LEN];
2795 USHORT Tag; //Tag(element IE) - Adjacent AP report
2796 USHORT TagLength; //Length of element not including 4 byte header
2797 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2798 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2801 UCHAR Ssid[MAX_LEN_OF_SSID];
2802 USHORT Seconds; //Seconds that the client has been disassociated.
2803 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2805 #define DELAYINTMASK 0x0003fffb
2806 #define INTMASK 0x0003fffb
2807 #define IndMask 0x0003fffc
2808 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2809 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2810 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2811 #define TxCoherent 0x00020000 // tx coherent
2812 #define RxCoherent 0x00010000 // rx coherent
2813 #define McuCommand 0x00000200 // mcu
2814 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2815 #define TBTTInt 0x00000800 // TBTT interrupt
2816 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2817 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2818 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2821 typedef struct _RX_BLK_
2823 RT28XX_RXD_STRUC RxD;
2825 PHEADER_802_11 pHeader;
2826 PNDIS_PACKET pRxPacket;
2830 UCHAR UserPriority; // for calculate TKIP MIC using
2834 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2835 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2836 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2839 #define fRX_WDS 0x0001
2840 #define fRX_AMSDU 0x0002
2841 #define fRX_ARALINK 0x0004
2842 #define fRX_HTC 0x0008
2843 #define fRX_PAD 0x0010
2844 #define fRX_AMPDU 0x0020
2845 #define fRX_QOS 0x0040
2846 #define fRX_INFRA 0x0080
2847 #define fRX_EAP 0x0100
2848 #define fRX_MESH 0x0200
2849 #define fRX_APCLI 0x0400
2850 #define fRX_DLS 0x0800
2851 #define fRX_WPI 0x1000
2853 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2854 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2855 #define LENGTH_ARALINK_HEADER_FIELD 2
2857 #define TX_UNKOWN_FRAME 0x00
2858 #define TX_MCAST_FRAME 0x01
2859 #define TX_LEGACY_FRAME 0x02
2860 #define TX_AMPDU_FRAME 0x04
2861 #define TX_AMSDU_FRAME 0x08
2862 #define TX_RALINK_FRAME 0x10
2863 #define TX_FRAG_FRAME 0x20
2866 // Currently the sizeof(TX_BLK) is 148 bytes.
2867 typedef struct _TX_BLK_
2870 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2871 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2872 USHORT TotalFragNum; // Total frame fragments required in one batch
2873 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2875 QUEUE_HEADER TxPacketList;
2876 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2877 HTTRANSMIT_SETTING *pTransmit;
2879 // Following structure used for the characteristics of a specific packet.
2880 PNDIS_PACKET pPacket;
2881 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2882 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2883 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2884 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2885 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2886 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2887 UCHAR HdrPadLen; // recording Header Padding Length;
2888 UCHAR apidx; // The interface associated to this packet
2889 UCHAR Wcid; // The MAC entry associated to this packet
2890 UCHAR UserPriority; // priority class of packet
2891 UCHAR FrameGap; // what kind of IFS this packet use
2892 UCHAR MpduReqNum; // number of fragments of this frame
2893 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2894 UCHAR CipherAlg; // cipher alogrithm
2899 USHORT Flags; //See following definitions for detail.
2901 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2902 ULONG Priv; // Hardware specific value saved in here.
2906 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2907 #define fTX_bAckRequired 0x0002 // the packet need ack response
2908 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2909 #define fTX_bHTRate 0x0008 // allow to use HT rate
2910 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2911 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2912 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2913 #define fTX_bWMM 0x0080 // QOS Data
2915 #define fTX_bClearEAPFrame 0x0100
2917 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
2920 (_pTxBlk->Flags |= _flag) \
2922 (_pTxBlk->Flags &= ~(_flag)) \
2925 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2926 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2927 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2933 //------------------------------------------------------------------------------------------
2937 // Enable & Disable NIC interrupt via writing interrupt mask register
2938 // Since it use ADAPTER structure, it have to be put after structure definition.
2940 __inline VOID NICDisableInterrupt(
2941 IN PRTMP_ADAPTER pAd)
2943 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
2944 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
2945 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
2948 __inline VOID NICEnableInterrupt(
2949 IN PRTMP_ADAPTER pAd)
2952 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
2953 // To prevent System hang, we should enalbe the interrupt when
2954 // ASIC is already Wake Up.
2956 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
2957 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
2958 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
2960 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
2963 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
2965 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
2966 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
2969 #ifdef RT_BIG_ENDIAN
2970 static inline VOID WriteBackToDescriptor(
2973 IN BOOLEAN DoEncrypt,
2974 IN ULONG DescriptorType)
2978 p1 = ((UINT32 *)Dest);
2979 p2 = ((UINT32 *)Src);
2984 *(p1+1) = *(p2+1); // Word 1; this must be written back last
2988 ========================================================================
2990 Routine Description:
2991 Endian conversion of Tx/Rx descriptor .
2994 pAd Pointer to our adapter
2995 pData Pointer to Tx/Rx descriptor
2996 DescriptorType Direction of the frame
3002 Call this function when read or update descriptor
3003 ========================================================================
3005 static inline VOID RTMPWIEndianChange(
3007 IN ULONG DescriptorType)
3012 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3014 if(DescriptorType == TYPE_TXWI)
3016 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3017 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3021 for(i=0; i < size/4 ; i++)
3022 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3027 ========================================================================
3029 Routine Description:
3030 Endian conversion of Tx/Rx descriptor .
3033 pAd Pointer to our adapter
3034 pData Pointer to Tx/Rx descriptor
3035 DescriptorType Direction of the frame
3041 Call this function when read or update descriptor
3042 ========================================================================
3044 static inline VOID RTMPDescriptorEndianChange(
3046 IN ULONG DescriptorType)
3048 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3049 *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11
3050 *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15
3051 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last
3055 ========================================================================
3057 Routine Description:
3058 Endian conversion of all kinds of 802.11 frames .
3061 pAd Pointer to our adapter
3062 pData Pointer to the 802.11 frame structure
3063 Dir Direction of the frame
3064 FromRxDoneInt Caller is from RxDone interrupt
3070 Call this function when read or update buffer data
3071 ========================================================================
3073 static inline VOID RTMPFrameEndianChange(
3074 IN PRTMP_ADAPTER pAd,
3077 IN BOOLEAN FromRxDoneInt)
3079 PHEADER_802_11 pFrame;
3082 // swab 16 bit fields - Frame Control field
3085 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3088 pFrame = (PHEADER_802_11) pData;
3089 pMacHdr = (PUCHAR) pFrame;
3091 // swab 16 bit fields - Duration/ID field
3092 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3094 // swab 16 bit fields - Sequence Control field
3095 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3097 if(pFrame->FC.Type == BTYPE_MGMT)
3099 switch(pFrame->FC.SubType)
3101 case SUBTYPE_ASSOC_REQ:
3102 case SUBTYPE_REASSOC_REQ:
3103 // swab 16 bit fields - CapabilityInfo field
3104 pMacHdr += sizeof(HEADER_802_11);
3105 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3107 // swab 16 bit fields - Listen Interval field
3109 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3112 case SUBTYPE_ASSOC_RSP:
3113 case SUBTYPE_REASSOC_RSP:
3114 // swab 16 bit fields - CapabilityInfo field
3115 pMacHdr += sizeof(HEADER_802_11);
3116 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3118 // swab 16 bit fields - Status Code field
3120 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3122 // swab 16 bit fields - AID field
3124 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3128 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3129 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3130 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3134 // swab 16 bit fields - Auth Alg No. field
3135 pMacHdr += sizeof(HEADER_802_11);
3136 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3138 // swab 16 bit fields - Auth Seq No. field
3140 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3142 // swab 16 bit fields - Status Code field
3144 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3148 case SUBTYPE_BEACON:
3149 case SUBTYPE_PROBE_RSP:
3150 // swab 16 bit fields - BeaconInterval field
3151 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3152 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3154 // swab 16 bit fields - CapabilityInfo field
3155 pMacHdr += sizeof(USHORT);
3156 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3159 case SUBTYPE_DEAUTH:
3160 case SUBTYPE_DISASSOC:
3161 // swab 16 bit fields - Reason code field
3162 pMacHdr += sizeof(HEADER_802_11);
3163 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3167 else if( pFrame->FC.Type == BTYPE_DATA )
3170 else if(pFrame->FC.Type == BTYPE_CNTL)
3172 switch(pFrame->FC.SubType)
3174 case SUBTYPE_BLOCK_ACK_REQ:
3176 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3177 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3178 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3181 case SUBTYPE_BLOCK_ACK:
3182 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3183 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3187 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3188 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3194 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3197 // swab 16 bit fields - Frame Control
3198 if(Dir == DIR_WRITE)
3200 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3203 #endif // RT_BIG_ENDIAN //
3206 static inline VOID ConvertMulticastIP2MAC(
3208 IN PUCHAR *ppMacAddr,
3209 IN UINT16 ProtoType)
3211 if (pIpAddr == NULL)
3214 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3220 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3221 *(*ppMacAddr) = 0x33;
3222 *(*ppMacAddr + 1) = 0x33;
3223 *(*ppMacAddr + 2) = pIpAddr[12];
3224 *(*ppMacAddr + 3) = pIpAddr[13];
3225 *(*ppMacAddr + 4) = pIpAddr[14];
3226 *(*ppMacAddr + 5) = pIpAddr[15];
3231 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3232 *(*ppMacAddr) = 0x01;
3233 *(*ppMacAddr + 1) = 0x00;
3234 *(*ppMacAddr + 2) = 0x5e;
3235 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3236 *(*ppMacAddr + 4) = pIpAddr[2];
3237 *(*ppMacAddr + 5) = pIpAddr[3];
3244 BOOLEAN RTMPCheckForHang(
3245 IN NDIS_HANDLE MiniportAdapterContext
3249 IN NDIS_HANDLE MiniportAdapterContext
3253 // Private routines in rtmp_init.c
3255 NDIS_STATUS RTMPAllocAdapterBlock(
3257 OUT PRTMP_ADAPTER *ppAdapter
3260 NDIS_STATUS RTMPAllocTxRxRingMemory(
3261 IN PRTMP_ADAPTER pAd
3264 NDIS_STATUS RTMPFindAdapter(
3265 IN PRTMP_ADAPTER pAd,
3266 IN NDIS_HANDLE WrapperConfigurationContext
3269 NDIS_STATUS RTMPReadParametersHook(
3270 IN PRTMP_ADAPTER pAd
3273 VOID RTMPFreeAdapter(
3274 IN PRTMP_ADAPTER pAd
3277 NDIS_STATUS NICReadRegParameters(
3278 IN PRTMP_ADAPTER pAd,
3279 IN NDIS_HANDLE WrapperConfigurationContext
3283 VOID NICReadEEPROMParameters(
3284 IN PRTMP_ADAPTER pAd,
3285 IN PUCHAR mac_addr);
3287 VOID NICInitAsicFromEEPROM(
3288 IN PRTMP_ADAPTER pAd);
3290 VOID NICInitTxRxRingAndBacklogQueue(
3291 IN PRTMP_ADAPTER pAd);
3293 NDIS_STATUS NICInitializeAdapter(
3294 IN PRTMP_ADAPTER pAd,
3295 IN BOOLEAN bHardReset);
3297 NDIS_STATUS NICInitializeAsic(
3298 IN PRTMP_ADAPTER pAd,
3299 IN BOOLEAN bHardReset);
3301 VOID NICRestoreBBPValue(
3302 IN PRTMP_ADAPTER pAd);
3305 IN PRTMP_ADAPTER pAd);
3307 VOID RTMPRingCleanUp(
3308 IN PRTMP_ADAPTER pAd,
3312 IN PRTMP_ADAPTER pAd);
3314 NDIS_STATUS DbgSendPacket(
3315 IN PRTMP_ADAPTER pAd,
3316 IN PNDIS_PACKET pPacket);
3319 IN PRTMP_ADAPTER pAd);
3321 VOID NICResetFromError(
3322 IN PRTMP_ADAPTER pAd);
3324 VOID NICEraseFirmware(
3325 IN PRTMP_ADAPTER pAd);
3327 NDIS_STATUS NICLoadFirmware(
3328 IN PRTMP_ADAPTER pAd);
3330 NDIS_STATUS NICLoadRateSwitchingParams(
3331 IN PRTMP_ADAPTER pAd);
3333 BOOLEAN NICCheckForHang(
3334 IN PRTMP_ADAPTER pAd);
3336 VOID NICUpdateFifoStaCounters(
3337 IN PRTMP_ADAPTER pAd);
3339 VOID NICUpdateRawCounters(
3340 IN PRTMP_ADAPTER pAd);
3342 ULONG RTMPNotAllZero(
3346 VOID RTMPZeroMemory(
3350 ULONG RTMPCompareMemory(
3355 VOID RTMPMoveMemory(
3368 VOID RTMPPatchMacBbpBug(
3369 IN PRTMP_ADAPTER pAd);
3371 VOID RTMPPatchCardBus(
3372 IN PRTMP_ADAPTER pAdapter);
3374 VOID RTMPPatchRalinkCardBus(
3375 IN PRTMP_ADAPTER pAdapter,
3378 ULONG RTMPReadCBConfig(
3384 VOID RTMPWriteCBConfig(
3392 IN PRTMP_ADAPTER pAd,
3393 IN PRALINK_TIMER_STRUCT pTimer,
3394 IN PVOID pTimerFunc,
3399 IN PRALINK_TIMER_STRUCT pTimer,
3404 IN PRALINK_TIMER_STRUCT pTimer,
3407 VOID RTMPCancelTimer(
3408 IN PRALINK_TIMER_STRUCT pTimer,
3409 OUT BOOLEAN *pCancelled);
3412 IN PRTMP_ADAPTER pAd,
3415 VOID RTMPSetSignalLED(
3416 IN PRTMP_ADAPTER pAd,
3417 IN NDIS_802_11_RSSI Dbm);
3419 VOID RTMPEnableRxTx(
3420 IN PRTMP_ADAPTER pAd);
3423 // prototype in action.c
3425 VOID ActionStateMachineInit(
3426 IN PRTMP_ADAPTER pAd,
3427 IN STATE_MACHINE *S,
3428 OUT STATE_MACHINE_FUNC Trans[]);
3430 VOID MlmeADDBAAction(
3431 IN PRTMP_ADAPTER pAd,
3432 IN MLME_QUEUE_ELEM *Elem);
3434 VOID MlmeDELBAAction(
3435 IN PRTMP_ADAPTER pAd,
3436 IN MLME_QUEUE_ELEM *Elem);
3439 IN PRTMP_ADAPTER pAd,
3440 IN MLME_QUEUE_ELEM *Elem);
3442 VOID MlmeInvalidAction(
3443 IN PRTMP_ADAPTER pAd,
3444 IN MLME_QUEUE_ELEM *Elem);
3447 IN PRTMP_ADAPTER pAd,
3448 IN MLME_QUEUE_ELEM *Elem);
3450 #ifdef DOT11_N_SUPPORT
3451 VOID PeerAddBAReqAction(
3452 IN PRTMP_ADAPTER pAd,
3453 IN MLME_QUEUE_ELEM *Elem);
3455 VOID PeerAddBARspAction(
3456 IN PRTMP_ADAPTER pAd,
3457 IN MLME_QUEUE_ELEM *Elem);
3459 VOID PeerDelBAAction(
3460 IN PRTMP_ADAPTER pAd,
3461 IN MLME_QUEUE_ELEM *Elem);
3464 IN PRTMP_ADAPTER pAd,
3465 IN MLME_QUEUE_ELEM *Elem);
3466 #endif // DOT11_N_SUPPORT //
3468 VOID SendPSMPAction(
3469 IN PRTMP_ADAPTER pAd,
3474 IN PRTMP_ADAPTER pAd,
3475 IN MLME_QUEUE_ELEM *Elem);
3477 VOID PeerPublicAction(
3478 IN PRTMP_ADAPTER pAd,
3479 IN MLME_QUEUE_ELEM *Elem);
3481 #ifdef CONFIG_STA_SUPPORT
3482 VOID StaPublicAction(
3483 IN PRTMP_ADAPTER pAd,
3484 IN UCHAR Bss2040Coexist);
3485 #endif // CONFIG_STA_SUPPORT //
3488 VOID PeerBSSTranAction(
3489 IN PRTMP_ADAPTER pAd,
3490 IN MLME_QUEUE_ELEM *Elem);
3492 #ifdef DOT11_N_SUPPORT
3494 IN PRTMP_ADAPTER pAd,
3495 IN MLME_QUEUE_ELEM *Elem);
3496 #endif // DOT11_N_SUPPORT //
3499 IN PRTMP_ADAPTER pAd,
3500 IN MLME_QUEUE_ELEM *Elem);
3502 #ifdef DOT11_N_SUPPORT
3503 VOID RECBATimerTimeout(
3504 IN PVOID SystemSpecific1,
3505 IN PVOID FunctionContext,
3506 IN PVOID SystemSpecific2,
3507 IN PVOID SystemSpecific3);
3509 VOID ORIBATimerTimeout(
3510 IN PRTMP_ADAPTER pAd);
3512 VOID SendRefreshBAR(
3513 IN PRTMP_ADAPTER pAd,
3514 IN MAC_TABLE_ENTRY *pEntry);
3515 #endif // DOT11_N_SUPPORT //
3518 IN PRTMP_ADAPTER pAd,
3519 IN OUT PHEADER_802_11 pHdr80211,
3525 IN PRTMP_ADAPTER pAd,
3526 IN OUT PFRAME_BAR pCntlBar,
3530 VOID InsertActField(
3531 IN PRTMP_ADAPTER pAd,
3532 OUT PUCHAR pFrameBuf,
3533 OUT PULONG pFrameLen,
3537 BOOLEAN QosBADataParse(
3538 IN PRTMP_ADAPTER pAd,
3540 IN PUCHAR p8023Header,
3544 IN UCHAR DataOffset,
3546 IN UINT CurRxIndex);
3548 #ifdef DOT11_N_SUPPORT
3549 BOOLEAN CntlEnqueueForRecv(
3550 IN PRTMP_ADAPTER pAd,
3553 IN PFRAME_BA_REQ pMsg);
3555 VOID BaAutoManSwitch(
3556 IN PRTMP_ADAPTER pAd);
3557 #endif // DOT11_N_SUPPORT //
3560 IN PRTMP_ADAPTER pAd,
3561 IN UCHAR BatRecIdx);
3564 // Private routines in rtmp_data.c
3566 BOOLEAN RTMPHandleRxDoneInterrupt(
3567 IN PRTMP_ADAPTER pAd);
3569 VOID RTMPHandleTxDoneInterrupt(
3570 IN PRTMP_ADAPTER pAd);
3572 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3573 IN PRTMP_ADAPTER pAd,
3574 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3576 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3577 IN PRTMP_ADAPTER pAd);
3579 VOID RTMPHandleTBTTInterrupt(
3580 IN PRTMP_ADAPTER pAd);
3582 VOID RTMPHandlePreTBTTInterrupt(
3583 IN PRTMP_ADAPTER pAd);
3585 void RTMPHandleTwakeupInterrupt(
3586 IN PRTMP_ADAPTER pAd);
3588 VOID RTMPHandleRxCoherentInterrupt(
3589 IN PRTMP_ADAPTER pAd);
3591 BOOLEAN TxFrameIsAggregatible(
3592 IN PRTMP_ADAPTER pAd,
3593 IN PUCHAR pPrevAddr1,
3594 IN PUCHAR p8023hdr);
3596 BOOLEAN PeerIsAggreOn(
3597 IN PRTMP_ADAPTER pAd,
3599 IN PMAC_TABLE_ENTRY pMacEntry);
3601 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3602 IN PNDIS_BUFFER pFirstBuffer,
3603 IN UCHAR DesiredOffset,
3607 NDIS_STATUS STASendPacket(
3608 IN PRTMP_ADAPTER pAd,
3609 IN PNDIS_PACKET pPacket);
3611 VOID STASendPackets(
3612 IN NDIS_HANDLE MiniportAdapterContext,
3613 IN PPNDIS_PACKET ppPacketArray,
3614 IN UINT NumberOfPackets);
3616 VOID RTMPDeQueuePacket(
3617 IN PRTMP_ADAPTER pAd,
3618 IN BOOLEAN bIntContext,
3620 IN UCHAR Max_Tx_Packets);
3622 NDIS_STATUS RTMPHardTransmit(
3623 IN PRTMP_ADAPTER pAd,
3624 IN PNDIS_PACKET pPacket,
3626 OUT PULONG pFreeTXDLeft);
3628 NDIS_STATUS STAHardTransmit(
3629 IN PRTMP_ADAPTER pAd,
3633 VOID STARxEAPOLFrameIndicate(
3634 IN PRTMP_ADAPTER pAd,
3635 IN MAC_TABLE_ENTRY *pEntry,
3637 IN UCHAR FromWhichBSSID);
3639 NDIS_STATUS RTMPFreeTXDRequest(
3640 IN PRTMP_ADAPTER pAd,
3642 IN UCHAR NumberRequired,
3643 IN PUCHAR FreeNumberIs);
3645 NDIS_STATUS MlmeHardTransmit(
3646 IN PRTMP_ADAPTER pAd,
3648 IN PNDIS_PACKET pPacket);
3650 NDIS_STATUS MlmeHardTransmitMgmtRing(
3651 IN PRTMP_ADAPTER pAd,
3653 IN PNDIS_PACKET pPacket);
3655 NDIS_STATUS MlmeHardTransmitTxRing(
3656 IN PRTMP_ADAPTER pAd,
3658 IN PNDIS_PACKET pPacket);
3660 USHORT RTMPCalcDuration(
3661 IN PRTMP_ADAPTER pAd,
3666 IN PRTMP_ADAPTER pAd,
3667 IN PTXWI_STRUC pTxWI,
3670 IN BOOLEAN InsTimestamp,
3673 IN BOOLEAN NSeq, // HW new a sequence.
3682 IN HTTRANSMIT_SETTING *pTransmit);
3685 VOID RTMPWriteTxWI_Data(
3686 IN PRTMP_ADAPTER pAd,
3687 IN OUT PTXWI_STRUC pTxWI,
3691 VOID RTMPWriteTxWI_Cache(
3692 IN PRTMP_ADAPTER pAd,
3693 IN OUT PTXWI_STRUC pTxWI,
3696 VOID RTMPWriteTxDescriptor(
3697 IN PRTMP_ADAPTER pAd,
3702 VOID RTMPSuspendMsduTransmission(
3703 IN PRTMP_ADAPTER pAd);
3705 VOID RTMPResumeMsduTransmission(
3706 IN PRTMP_ADAPTER pAd);
3708 NDIS_STATUS MiniportMMRequest(
3709 IN PRTMP_ADAPTER pAd,
3714 VOID RTMPSendNullFrame(
3715 IN PRTMP_ADAPTER pAd,
3717 IN BOOLEAN bQosNull);
3719 VOID RTMPSendDisassociationFrame(
3720 IN PRTMP_ADAPTER pAd);
3722 VOID RTMPSendRTSFrame(
3723 IN PRTMP_ADAPTER pAd,
3725 IN unsigned int NextMpduSize,
3728 IN USHORT AckDuration,
3733 NDIS_STATUS RTMPApplyPacketFilter(
3734 IN PRTMP_ADAPTER pAd,
3735 IN PRT28XX_RXD_STRUC pRxD,
3736 IN PHEADER_802_11 pHeader);
3738 PQUEUE_HEADER RTMPCheckTxSwQueue(
3739 IN PRTMP_ADAPTER pAd,
3742 #ifdef CONFIG_STA_SUPPORT
3743 VOID RTMPReportMicError(
3744 IN PRTMP_ADAPTER pAd,
3745 IN PCIPHER_KEY pWpaKey);
3747 VOID WpaMicFailureReportFrame(
3748 IN PRTMP_ADAPTER pAd,
3749 IN MLME_QUEUE_ELEM *Elem);
3751 VOID WpaDisassocApAndBlockAssoc(
3752 IN PVOID SystemSpecific1,
3753 IN PVOID FunctionContext,
3754 IN PVOID SystemSpecific2,
3755 IN PVOID SystemSpecific3);
3756 #endif // CONFIG_STA_SUPPORT //
3758 NDIS_STATUS RTMPCloneNdisPacket(
3759 IN PRTMP_ADAPTER pAd,
3760 IN BOOLEAN pInsAMSDUHdr,
3761 IN PNDIS_PACKET pInPacket,
3762 OUT PNDIS_PACKET *ppOutPacket);
3764 NDIS_STATUS RTMPAllocateNdisPacket(
3765 IN PRTMP_ADAPTER pAd,
3766 IN PNDIS_PACKET *pPacket,
3772 VOID RTMPFreeNdisPacket(
3773 IN PRTMP_ADAPTER pAd,
3774 IN PNDIS_PACKET pPacket);
3776 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3777 IN PRTMP_ADAPTER pAd,
3780 BOOLEAN RTMPCheckDHCPFrame(
3781 IN PRTMP_ADAPTER pAd,
3782 IN PNDIS_PACKET pPacket);
3785 BOOLEAN RTMPCheckEtherType(
3786 IN PRTMP_ADAPTER pAd,
3787 IN PNDIS_PACKET pPacket);
3790 VOID RTMPCckBbpTuning(
3791 IN PRTMP_ADAPTER pAd,
3795 // Private routines in rtmp_wep.c
3797 VOID RTMPInitWepEngine(
3798 IN PRTMP_ADAPTER pAd,
3804 VOID RTMPEncryptData(
3805 IN PRTMP_ADAPTER pAd,
3810 BOOLEAN RTMPDecryptData(
3811 IN PRTMP_ADAPTER pAdapter,
3816 BOOLEAN RTMPSoftDecryptWEP(
3817 IN PRTMP_ADAPTER pAd,
3819 IN ULONG DataByteCnt,
3820 IN PCIPHER_KEY pGroupKey);
3823 IN PRTMP_ADAPTER pAd,
3827 IN PARCFOURCONTEXT Ctx,
3832 IN PARCFOURCONTEXT Ctx);
3834 VOID ARCFOUR_DECRYPT(
3835 IN PARCFOURCONTEXT Ctx,
3840 VOID ARCFOUR_ENCRYPT(
3841 IN PARCFOURCONTEXT Ctx,
3846 VOID WPAARCFOUR_ENCRYPT(
3847 IN PARCFOURCONTEXT Ctx,
3852 UINT RTMP_CALC_FCS32(
3861 // Asic/RF/BBP related functions
3863 VOID AsicAdjustTxPower(
3864 IN PRTMP_ADAPTER pAd);
3866 VOID AsicUpdateProtect(
3867 IN PRTMP_ADAPTER pAd,
3868 IN USHORT OperaionMode,
3870 IN BOOLEAN bDisableBGProtect,
3871 IN BOOLEAN bNonGFExist);
3873 VOID AsicSwitchChannel(
3874 IN PRTMP_ADAPTER pAd,
3878 VOID AsicLockChannel(
3879 IN PRTMP_ADAPTER pAd,
3882 VOID AsicAntennaSelect(
3883 IN PRTMP_ADAPTER pAd,
3886 VOID AsicAntennaSetting(
3887 IN PRTMP_ADAPTER pAd,
3888 IN ABGBAND_STATE BandState);
3890 VOID AsicRfTuningExec(
3891 IN PVOID SystemSpecific1,
3892 IN PVOID FunctionContext,
3893 IN PVOID SystemSpecific2,
3894 IN PVOID SystemSpecific3);
3896 #ifdef CONFIG_STA_SUPPORT
3897 VOID AsicSleepThenAutoWakeup(
3898 IN PRTMP_ADAPTER pAd,
3899 IN USHORT TbttNumToNextWakeUp);
3901 VOID AsicForceSleep(
3902 IN PRTMP_ADAPTER pAd);
3904 VOID AsicForceWakeup(
3905 IN PRTMP_ADAPTER pAd,
3907 #endif // CONFIG_STA_SUPPORT //
3910 IN PRTMP_ADAPTER pAd,
3913 VOID AsicSetMcastWC(
3914 IN PRTMP_ADAPTER pAd);
3916 VOID AsicDelWcidTab(
3917 IN PRTMP_ADAPTER pAd,
3921 IN PRTMP_ADAPTER pAd);
3923 VOID AsicDisableRDG(
3924 IN PRTMP_ADAPTER pAd);
3926 VOID AsicDisableSync(
3927 IN PRTMP_ADAPTER pAd);
3929 VOID AsicEnableBssSync(
3930 IN PRTMP_ADAPTER pAd);
3932 VOID AsicEnableIbssSync(
3933 IN PRTMP_ADAPTER pAd);
3935 VOID AsicSetEdcaParm(
3936 IN PRTMP_ADAPTER pAd,
3937 IN PEDCA_PARM pEdcaParm);
3939 VOID AsicSetSlotTime(
3940 IN PRTMP_ADAPTER pAd,
3941 IN BOOLEAN bUseShortSlotTime);
3943 VOID AsicAddSharedKeyEntry(
3944 IN PRTMP_ADAPTER pAd,
3952 VOID AsicRemoveSharedKeyEntry(
3953 IN PRTMP_ADAPTER pAd,
3957 VOID AsicUpdateWCIDAttribute(
3958 IN PRTMP_ADAPTER pAd,
3962 IN BOOLEAN bUsePairewiseKeyTable);
3964 VOID AsicUpdateWCIDIVEIV(
3965 IN PRTMP_ADAPTER pAd,
3970 VOID AsicUpdateRxWCIDTable(
3971 IN PRTMP_ADAPTER pAd,
3975 VOID AsicAddKeyEntry(
3976 IN PRTMP_ADAPTER pAd,
3980 IN PCIPHER_KEY pCipherKey,
3981 IN BOOLEAN bUsePairewiseKeyTable,
3984 VOID AsicAddPairwiseKeyEntry(
3985 IN PRTMP_ADAPTER pAd,
3988 IN CIPHER_KEY *pCipherKey);
3990 VOID AsicRemovePairwiseKeyEntry(
3991 IN PRTMP_ADAPTER pAd,
3995 BOOLEAN AsicSendCommandToMcu(
3996 IN PRTMP_ADAPTER pAd,
4002 BOOLEAN AsicCheckCommanOk(
4003 IN PRTMP_ADAPTER pAd,
4006 VOID MacAddrRandomBssid(
4007 IN PRTMP_ADAPTER pAd,
4010 VOID MgtMacHeaderInit(
4011 IN PRTMP_ADAPTER pAd,
4012 IN OUT PHEADER_802_11 pHdr80211,
4019 IN PRTMP_ADAPTER pAd);
4022 IN PRTMP_ADAPTER pAd);
4028 #ifdef DOT11_N_SUPPORT
4030 IN PRTMP_ADAPTER pAd,
4032 #endif // DOT11_N_SUPPORT //
4034 ULONG BssTableSearch(
4039 ULONG BssSsidTableSearch(
4046 ULONG BssTableSearchWithSSID(
4053 VOID BssTableDeleteEntry(
4054 IN OUT PBSS_TABLE pTab,
4058 #ifdef DOT11_N_SUPPORT
4059 VOID BATableDeleteORIEntry(
4060 IN OUT PRTMP_ADAPTER pAd,
4061 IN BA_ORI_ENTRY *pBAORIEntry);
4063 VOID BATableDeleteRECEntry(
4064 IN OUT PRTMP_ADAPTER pAd,
4065 IN BA_REC_ENTRY *pBARECEntry);
4067 VOID BATableTearORIEntry(
4068 IN OUT PRTMP_ADAPTER pAd,
4071 IN BOOLEAN bForceDelete,
4074 VOID BATableTearRECEntry(
4075 IN OUT PRTMP_ADAPTER pAd,
4079 #endif // DOT11_N_SUPPORT //
4082 IN PRTMP_ADAPTER pAd,
4083 OUT PBSS_ENTRY pBss,
4088 IN USHORT BeaconPeriod,
4091 IN USHORT CapabilityInfo,
4093 IN UCHAR SupRateLen,
4095 IN UCHAR ExtRateLen,
4096 IN HT_CAPABILITY_IE *pHtCapability,
4097 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4098 IN UCHAR HtCapabilityLen,
4099 IN UCHAR AddHtInfoLen,
4100 IN UCHAR NewExtChanOffset,
4103 IN LARGE_INTEGER TimeStamp,
4105 IN PEDCA_PARM pEdcaParm,
4106 IN PQOS_CAPABILITY_PARM pQosCapability,
4107 IN PQBSS_LOAD_PARM pQbssLoad,
4108 IN USHORT LengthVIE,
4109 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4111 ULONG BssTableSetEntry(
4112 IN PRTMP_ADAPTER pAd,
4113 OUT PBSS_TABLE pTab,
4118 IN USHORT BeaconPeriod,
4121 IN USHORT CapabilityInfo,
4123 IN UCHAR SupRateLen,
4125 IN UCHAR ExtRateLen,
4126 IN HT_CAPABILITY_IE *pHtCapability,
4127 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4128 IN UCHAR HtCapabilityLen,
4129 IN UCHAR AddHtInfoLen,
4130 IN UCHAR NewExtChanOffset,
4133 IN LARGE_INTEGER TimeStamp,
4135 IN PEDCA_PARM pEdcaParm,
4136 IN PQOS_CAPABILITY_PARM pQosCapability,
4137 IN PQBSS_LOAD_PARM pQbssLoad,
4138 IN USHORT LengthVIE,
4139 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4141 #ifdef DOT11_N_SUPPORT
4142 VOID BATableInsertEntry(
4143 IN PRTMP_ADAPTER pAd,
4145 IN USHORT TimeOutValue,
4146 IN USHORT StartingSeq,
4149 IN UCHAR OriginatorStatus,
4150 IN BOOLEAN IsRecipient);
4151 #endif // DOT11_N_SUPPORT //
4153 VOID BssTableSsidSort(
4154 IN PRTMP_ADAPTER pAd,
4155 OUT BSS_TABLE *OutTab,
4159 VOID BssTableSortByRssi(
4160 IN OUT BSS_TABLE *OutTab);
4162 VOID BssCipherParse(
4163 IN OUT PBSS_ENTRY pBss);
4165 NDIS_STATUS MlmeQueueInit(
4166 IN MLME_QUEUE *Queue);
4168 VOID MlmeQueueDestroy(
4169 IN MLME_QUEUE *Queue);
4171 BOOLEAN MlmeEnqueue(
4172 IN PRTMP_ADAPTER pAd,
4178 BOOLEAN MlmeEnqueueForRecv(
4179 IN PRTMP_ADAPTER pAd,
4181 IN ULONG TimeStampHigh,
4182 IN ULONG TimeStampLow,
4191 BOOLEAN MlmeDequeue(
4192 IN MLME_QUEUE *Queue,
4193 OUT MLME_QUEUE_ELEM **Elem);
4195 VOID MlmeRestartStateMachine(
4196 IN PRTMP_ADAPTER pAd);
4198 BOOLEAN MlmeQueueEmpty(
4199 IN MLME_QUEUE *Queue);
4201 BOOLEAN MlmeQueueFull(
4202 IN MLME_QUEUE *Queue);
4204 BOOLEAN MsgTypeSubst(
4205 IN PRTMP_ADAPTER pAd,
4206 IN PFRAME_802_11 pFrame,
4210 VOID StateMachineInit(
4211 IN STATE_MACHINE *Sm,
4212 IN STATE_MACHINE_FUNC Trans[],
4215 IN STATE_MACHINE_FUNC DefFunc,
4219 VOID StateMachineSetAction(
4220 IN STATE_MACHINE *S,
4223 IN STATE_MACHINE_FUNC F);
4225 VOID StateMachinePerformAction(
4226 IN PRTMP_ADAPTER pAd,
4227 IN STATE_MACHINE *S,
4228 IN MLME_QUEUE_ELEM *Elem);
4231 IN PRTMP_ADAPTER pAd,
4232 IN MLME_QUEUE_ELEM *Elem);
4234 VOID AssocStateMachineInit(
4235 IN PRTMP_ADAPTER pAd,
4236 IN STATE_MACHINE *Sm,
4237 OUT STATE_MACHINE_FUNC Trans[]);
4239 VOID ReassocTimeout(
4240 IN PVOID SystemSpecific1,
4241 IN PVOID FunctionContext,
4242 IN PVOID SystemSpecific2,
4243 IN PVOID SystemSpecific3);
4246 IN PVOID SystemSpecific1,
4247 IN PVOID FunctionContext,
4248 IN PVOID SystemSpecific2,
4249 IN PVOID SystemSpecific3);
4251 VOID DisassocTimeout(
4252 IN PVOID SystemSpecific1,
4253 IN PVOID FunctionContext,
4254 IN PVOID SystemSpecific2,
4255 IN PVOID SystemSpecific3);
4257 //----------------------------------------------
4258 VOID MlmeDisassocReqAction(
4259 IN PRTMP_ADAPTER pAd,
4260 IN MLME_QUEUE_ELEM *Elem);
4262 VOID MlmeAssocReqAction(
4263 IN PRTMP_ADAPTER pAd,
4264 IN MLME_QUEUE_ELEM *Elem);
4266 VOID MlmeReassocReqAction(
4267 IN PRTMP_ADAPTER pAd,
4268 IN MLME_QUEUE_ELEM *Elem);
4270 VOID MlmeDisassocReqAction(
4271 IN PRTMP_ADAPTER pAd,
4272 IN MLME_QUEUE_ELEM *Elem);
4274 VOID PeerAssocRspAction(
4275 IN PRTMP_ADAPTER pAd,
4276 IN MLME_QUEUE_ELEM *Elem);
4278 VOID PeerReassocRspAction(
4279 IN PRTMP_ADAPTER pAd,
4280 IN MLME_QUEUE_ELEM *Elem);
4282 VOID PeerDisassocAction(
4283 IN PRTMP_ADAPTER pAd,
4284 IN MLME_QUEUE_ELEM *Elem);
4286 VOID DisassocTimeoutAction(
4287 IN PRTMP_ADAPTER pAd,
4288 IN MLME_QUEUE_ELEM *Elem);
4290 VOID AssocTimeoutAction(
4291 IN PRTMP_ADAPTER pAd,
4292 IN MLME_QUEUE_ELEM *Elem);
4294 VOID ReassocTimeoutAction(
4295 IN PRTMP_ADAPTER pAd,
4296 IN MLME_QUEUE_ELEM *Elem);
4299 IN PRTMP_ADAPTER pAd,
4302 VOID SwitchBetweenWepAndCkip(
4303 IN PRTMP_ADAPTER pAd);
4305 VOID InvalidStateWhenAssoc(
4306 IN PRTMP_ADAPTER pAd,
4307 IN MLME_QUEUE_ELEM *Elem);
4309 VOID InvalidStateWhenReassoc(
4310 IN PRTMP_ADAPTER pAd,
4311 IN MLME_QUEUE_ELEM *Elem);
4313 VOID InvalidStateWhenDisassociate(
4314 IN PRTMP_ADAPTER pAd,
4315 IN MLME_QUEUE_ELEM *Elem);
4319 IN PRTMP_ADAPTER pAd);
4321 VOID ComposeNullFrame(
4322 IN PRTMP_ADAPTER pAd);
4325 IN PRTMP_ADAPTER pAd,
4327 IN USHORT CapabilityInfo,
4330 IN UCHAR SupRateLen,
4332 IN UCHAR ExtRateLen,
4333 IN PEDCA_PARM pEdcaParm,
4334 IN HT_CAPABILITY_IE *pHtCapability,
4335 IN UCHAR HtCapabilityLen,
4336 IN ADD_HT_INFO_IE *pAddHtInfo);
4338 VOID AuthStateMachineInit(
4339 IN PRTMP_ADAPTER pAd,
4340 IN PSTATE_MACHINE sm,
4341 OUT STATE_MACHINE_FUNC Trans[]);
4344 IN PVOID SystemSpecific1,
4345 IN PVOID FunctionContext,
4346 IN PVOID SystemSpecific2,
4347 IN PVOID SystemSpecific3);
4349 VOID MlmeAuthReqAction(
4350 IN PRTMP_ADAPTER pAd,
4351 IN MLME_QUEUE_ELEM *Elem);
4353 VOID PeerAuthRspAtSeq2Action(
4354 IN PRTMP_ADAPTER pAd,
4355 IN MLME_QUEUE_ELEM *Elem);
4357 VOID PeerAuthRspAtSeq4Action(
4358 IN PRTMP_ADAPTER pAd,
4359 IN MLME_QUEUE_ELEM *Elem);
4361 VOID AuthTimeoutAction(
4362 IN PRTMP_ADAPTER pAd,
4363 IN MLME_QUEUE_ELEM *Elem);
4366 IN PRTMP_ADAPTER pAd,
4369 VOID MlmeDeauthReqAction(
4370 IN PRTMP_ADAPTER pAd,
4371 IN MLME_QUEUE_ELEM *Elem);
4373 VOID InvalidStateWhenAuth(
4374 IN PRTMP_ADAPTER pAd,
4375 IN MLME_QUEUE_ELEM *Elem);
4377 //=============================================
4379 VOID AuthRspStateMachineInit(
4380 IN PRTMP_ADAPTER pAd,
4381 IN PSTATE_MACHINE Sm,
4382 IN STATE_MACHINE_FUNC Trans[]);
4384 VOID PeerDeauthAction(
4385 IN PRTMP_ADAPTER pAd,
4386 IN MLME_QUEUE_ELEM *Elem);
4388 VOID PeerAuthSimpleRspGenAndSend(
4389 IN PRTMP_ADAPTER pAd,
4390 IN PHEADER_802_11 pHdr80211,
4397 // Private routines in dls.c
4400 //========================================
4402 VOID SyncStateMachineInit(
4403 IN PRTMP_ADAPTER pAd,
4404 IN STATE_MACHINE *Sm,
4405 OUT STATE_MACHINE_FUNC Trans[]);
4408 IN PVOID SystemSpecific1,
4409 IN PVOID FunctionContext,
4410 IN PVOID SystemSpecific2,
4411 IN PVOID SystemSpecific3);
4414 IN PVOID SystemSpecific1,
4415 IN PVOID FunctionContext,
4416 IN PVOID SystemSpecific2,
4417 IN PVOID SystemSpecific3);
4419 VOID MlmeScanReqAction(
4420 IN PRTMP_ADAPTER pAd,
4421 IN MLME_QUEUE_ELEM *Elem);
4423 VOID InvalidStateWhenScan(
4424 IN PRTMP_ADAPTER pAd,
4425 IN MLME_QUEUE_ELEM *Elem);
4427 VOID InvalidStateWhenJoin(
4428 IN PRTMP_ADAPTER pAd,
4429 IN MLME_QUEUE_ELEM *Elem);
4431 VOID InvalidStateWhenStart(
4432 IN PRTMP_ADAPTER pAd,
4433 IN MLME_QUEUE_ELEM *Elem);
4436 IN PRTMP_ADAPTER pAd,
4437 IN MLME_QUEUE_ELEM *Elem);
4439 VOID EnqueueProbeRequest(
4440 IN PRTMP_ADAPTER pAd);
4442 BOOLEAN ScanRunning(
4443 IN PRTMP_ADAPTER pAd);
4444 //=========================================
4447 IN PRTMP_ADAPTER pAd,
4448 IN STATE_MACHINE *S,
4449 OUT STATE_MACHINE_FUNC Trans[]);
4451 VOID MlmeCntlMachinePerformAction(
4452 IN PRTMP_ADAPTER pAd,
4453 IN STATE_MACHINE *S,
4454 IN MLME_QUEUE_ELEM *Elem);
4457 IN PRTMP_ADAPTER pAd,
4458 IN MLME_QUEUE_ELEM *Elem);
4460 VOID CntlOidScanProc(
4461 IN PRTMP_ADAPTER pAd,
4462 IN MLME_QUEUE_ELEM *Elem);
4464 VOID CntlOidSsidProc(
4465 IN PRTMP_ADAPTER pAd,
4466 IN MLME_QUEUE_ELEM * Elem);
4468 VOID CntlOidRTBssidProc(
4469 IN PRTMP_ADAPTER pAd,
4470 IN MLME_QUEUE_ELEM * Elem);
4472 VOID CntlMlmeRoamingProc(
4473 IN PRTMP_ADAPTER pAd,
4474 IN MLME_QUEUE_ELEM * Elem);
4476 VOID CntlWaitDisassocProc(
4477 IN PRTMP_ADAPTER pAd,
4478 IN MLME_QUEUE_ELEM *Elem);
4480 VOID CntlWaitJoinProc(
4481 IN PRTMP_ADAPTER pAd,
4482 IN MLME_QUEUE_ELEM *Elem);
4484 VOID CntlWaitReassocProc(
4485 IN PRTMP_ADAPTER pAd,
4486 IN MLME_QUEUE_ELEM *Elem);
4488 VOID CntlWaitStartProc(
4489 IN PRTMP_ADAPTER pAd,
4490 IN MLME_QUEUE_ELEM *Elem);
4492 VOID CntlWaitAuthProc(
4493 IN PRTMP_ADAPTER pAd,
4494 IN MLME_QUEUE_ELEM *Elem);
4496 VOID CntlWaitAuthProc2(
4497 IN PRTMP_ADAPTER pAd,
4498 IN MLME_QUEUE_ELEM *Elem);
4500 VOID CntlWaitAssocProc(
4501 IN PRTMP_ADAPTER pAd,
4502 IN MLME_QUEUE_ELEM *Elem);
4505 IN PRTMP_ADAPTER pAd,
4509 IN PRTMP_ADAPTER pAd,
4510 IN BOOLEAN IsReqFromAP);
4512 VOID IterateOnBssTab(
4513 IN PRTMP_ADAPTER pAd);
4515 VOID IterateOnBssTab2(
4516 IN PRTMP_ADAPTER pAd);;
4519 IN PRTMP_ADAPTER pAd,
4520 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4524 IN PRTMP_ADAPTER pAd,
4525 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4527 IN USHORT CapabilityInfo,
4529 IN USHORT ListenIntv);
4532 IN PRTMP_ADAPTER pAd,
4533 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4539 VOID DisassocParmFill(
4540 IN PRTMP_ADAPTER pAd,
4541 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4546 IN PRTMP_ADAPTER pAd,
4547 IN OUT MLME_START_REQ_STRUCT *StartReq,
4552 IN PRTMP_ADAPTER pAd,
4553 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4558 IN PRTMP_ADAPTER pAd);
4560 VOID EnqueueBeaconFrame(
4561 IN PRTMP_ADAPTER pAd);
4563 VOID MlmeJoinReqAction(
4564 IN PRTMP_ADAPTER pAd,
4565 IN MLME_QUEUE_ELEM *Elem);
4567 VOID MlmeScanReqAction(
4568 IN PRTMP_ADAPTER pAd,
4569 IN MLME_QUEUE_ELEM *Elem);
4571 VOID MlmeStartReqAction(
4572 IN PRTMP_ADAPTER pAd,
4573 IN MLME_QUEUE_ELEM *Elem);
4575 VOID ScanTimeoutAction(
4576 IN PRTMP_ADAPTER pAd,
4577 IN MLME_QUEUE_ELEM *Elem);
4579 VOID BeaconTimeoutAtJoinAction(
4580 IN PRTMP_ADAPTER pAd,
4581 IN MLME_QUEUE_ELEM *Elem);
4583 VOID PeerBeaconAtScanAction(
4584 IN PRTMP_ADAPTER pAd,
4585 IN MLME_QUEUE_ELEM *Elem);
4587 VOID PeerBeaconAtJoinAction(
4588 IN PRTMP_ADAPTER pAd,
4589 IN MLME_QUEUE_ELEM *Elem);
4592 IN PRTMP_ADAPTER pAd,
4593 IN MLME_QUEUE_ELEM *Elem);
4595 VOID PeerProbeReqAction(
4596 IN PRTMP_ADAPTER pAd,
4597 IN MLME_QUEUE_ELEM *Elem);
4599 VOID ScanNextChannel(
4600 IN PRTMP_ADAPTER pAd);
4602 ULONG MakeIbssBeacon(
4603 IN PRTMP_ADAPTER pAd);
4605 VOID CCXAdjacentAPReport(
4606 IN PRTMP_ADAPTER pAd);
4608 BOOLEAN MlmeScanReqSanity(
4609 IN PRTMP_ADAPTER pAd,
4615 OUT UCHAR *ScanType);
4617 BOOLEAN PeerBeaconAndProbeRspSanity(
4618 IN PRTMP_ADAPTER pAd,
4621 IN UCHAR MsgChannel,
4625 OUT UCHAR *pSsidLen,
4626 OUT UCHAR *pBssType,
4627 OUT USHORT *pBeaconPeriod,
4628 OUT UCHAR *pChannel,
4629 OUT UCHAR *pNewChannel,
4630 OUT LARGE_INTEGER *pTimestamp,
4631 OUT CF_PARM *pCfParm,
4632 OUT USHORT *pAtimWin,
4633 OUT USHORT *pCapabilityInfo,
4635 OUT UCHAR *pDtimCount,
4636 OUT UCHAR *pDtimPeriod,
4637 OUT UCHAR *pBcastFlag,
4638 OUT UCHAR *pMessageToMe,
4639 OUT UCHAR SupRate[],
4640 OUT UCHAR *pSupRateLen,
4641 OUT UCHAR ExtRate[],
4642 OUT UCHAR *pExtRateLen,
4643 OUT UCHAR *pCkipFlag,
4644 OUT UCHAR *pAironetCellPowerLimit,
4645 OUT PEDCA_PARM pEdcaParm,
4646 OUT PQBSS_LOAD_PARM pQbssLoad,
4647 OUT PQOS_CAPABILITY_PARM pQosCapability,
4648 OUT ULONG *pRalinkIe,
4649 OUT UCHAR *pHtCapabilityLen,
4650 #ifdef CONFIG_STA_SUPPORT
4651 OUT UCHAR *pPreNHtCapabilityLen,
4652 #endif // CONFIG_STA_SUPPORT //
4653 OUT HT_CAPABILITY_IE *pHtCapability,
4654 OUT UCHAR *AddHtInfoLen,
4655 OUT ADD_HT_INFO_IE *AddHtInfo,
4656 OUT UCHAR *NewExtChannel,
4657 OUT USHORT *LengthVIE,
4658 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4660 BOOLEAN PeerAddBAReqActionSanity(
4661 IN PRTMP_ADAPTER pAd,
4666 BOOLEAN PeerAddBARspActionSanity(
4667 IN PRTMP_ADAPTER pAd,
4671 BOOLEAN PeerDelBAActionSanity(
4672 IN PRTMP_ADAPTER pAd,
4677 BOOLEAN MlmeAssocReqSanity(
4678 IN PRTMP_ADAPTER pAd,
4682 OUT USHORT *CapabilityInfo,
4684 OUT USHORT *ListenIntv);
4686 BOOLEAN MlmeAuthReqSanity(
4687 IN PRTMP_ADAPTER pAd,
4694 BOOLEAN MlmeStartReqSanity(
4695 IN PRTMP_ADAPTER pAd,
4699 OUT UCHAR *Ssidlen);
4701 BOOLEAN PeerAuthSanity(
4702 IN PRTMP_ADAPTER pAd,
4709 OUT CHAR ChlgText[]);
4711 BOOLEAN PeerAssocRspSanity(
4712 IN PRTMP_ADAPTER pAd,
4716 OUT USHORT *pCapabilityInfo,
4717 OUT USHORT *pStatus,
4719 OUT UCHAR SupRate[],
4720 OUT UCHAR *pSupRateLen,
4721 OUT UCHAR ExtRate[],
4722 OUT UCHAR *pExtRateLen,
4723 OUT HT_CAPABILITY_IE *pHtCapability,
4724 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4725 OUT UCHAR *pHtCapabilityLen,
4726 OUT UCHAR *pAddHtInfoLen,
4727 OUT UCHAR *pNewExtChannelOffset,
4728 OUT PEDCA_PARM pEdcaParm,
4729 OUT UCHAR *pCkipFlag);
4731 BOOLEAN PeerDisassocSanity(
4732 IN PRTMP_ADAPTER pAd,
4736 OUT USHORT *Reason);
4738 BOOLEAN PeerWpaMessageSanity(
4739 IN PRTMP_ADAPTER pAd,
4740 IN PEAPOL_PACKET pMsg,
4743 IN MAC_TABLE_ENTRY *pEntry);
4745 BOOLEAN PeerDeauthSanity(
4746 IN PRTMP_ADAPTER pAd,
4750 OUT USHORT *Reason);
4752 BOOLEAN PeerProbeReqSanity(
4753 IN PRTMP_ADAPTER pAd,
4758 OUT UCHAR *pSsidLen);
4764 OUT UCHAR *BcastFlag,
4765 OUT UCHAR *DtimCount,
4766 OUT UCHAR *DtimPeriod,
4767 OUT UCHAR *MessageToMe);
4769 UCHAR ChannelSanity(
4770 IN PRTMP_ADAPTER pAd,
4773 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4774 IN PBSS_ENTRY pBss);
4776 BOOLEAN MlmeDelBAReqSanity(
4777 IN PRTMP_ADAPTER pAd,
4781 BOOLEAN MlmeAddBAReqSanity(
4782 IN PRTMP_ADAPTER pAd,
4787 ULONG MakeOutgoingFrame(
4789 OUT ULONG *Length, ...);
4792 IN PRTMP_ADAPTER pAd,
4796 IN PRTMP_ADAPTER pAd);
4798 VOID AsicUpdateAutoFallBackTable(
4799 IN PRTMP_ADAPTER pAd,
4802 VOID MlmePeriodicExec(
4803 IN PVOID SystemSpecific1,
4804 IN PVOID FunctionContext,
4805 IN PVOID SystemSpecific2,
4806 IN PVOID SystemSpecific3);
4809 IN PVOID SystemSpecific1,
4810 IN PVOID FunctionContext,
4811 IN PVOID SystemSpecific2,
4812 IN PVOID SystemSpecific3);
4815 IN PVOID SystemSpecific1,
4816 IN PVOID FunctionContext,
4817 IN PVOID SystemSpecific2,
4818 IN PVOID SystemSpecific3);
4820 VOID STAMlmePeriodicExec(
4824 IN PRTMP_ADAPTER pAd);
4826 VOID MlmeAutoReconnectLastSSID(
4827 IN PRTMP_ADAPTER pAd);
4829 BOOLEAN MlmeValidateSSID(
4833 VOID MlmeCheckForRoaming(
4834 IN PRTMP_ADAPTER pAd,
4837 VOID MlmeCheckForFastRoaming(
4838 IN PRTMP_ADAPTER pAd,
4841 VOID MlmeDynamicTxRateSwitching(
4842 IN PRTMP_ADAPTER pAd);
4845 IN PRTMP_ADAPTER pAd,
4846 IN PMAC_TABLE_ENTRY pEntry,
4847 IN PRTMP_TX_RATE_SWITCH pTxRate);
4849 VOID MlmeSelectTxRateTable(
4850 IN PRTMP_ADAPTER pAd,
4851 IN PMAC_TABLE_ENTRY pEntry,
4853 IN PUCHAR pTableSize,
4854 IN PUCHAR pInitTxRateIdx);
4856 VOID MlmeCalculateChannelQuality(
4857 IN PRTMP_ADAPTER pAd,
4860 VOID MlmeCheckPsmChange(
4861 IN PRTMP_ADAPTER pAd,
4865 IN PRTMP_ADAPTER pAd,
4868 VOID MlmeSetTxPreamble(
4869 IN PRTMP_ADAPTER pAd,
4870 IN USHORT TxPreamble);
4872 VOID UpdateBasicRateBitmap(
4873 IN PRTMP_ADAPTER pAd);
4875 VOID MlmeUpdateTxRates(
4876 IN PRTMP_ADAPTER pAd,
4880 #ifdef DOT11_N_SUPPORT
4881 VOID MlmeUpdateHtTxRates(
4882 IN PRTMP_ADAPTER pAd,
4884 #endif // DOT11_N_SUPPORT //
4886 VOID RTMPCheckRates(
4887 IN PRTMP_ADAPTER pAd,
4888 IN OUT UCHAR SupRate[],
4889 IN OUT UCHAR *SupRateLen);
4891 #ifdef CONFIG_STA_SUPPORT
4892 BOOLEAN RTMPCheckChannel(
4893 IN PRTMP_ADAPTER pAd,
4894 IN UCHAR CentralChannel,
4896 #endif // CONFIG_STA_SUPPORT //
4898 BOOLEAN RTMPCheckHt(
4899 IN PRTMP_ADAPTER pAd,
4901 IN OUT HT_CAPABILITY_IE *pHtCapability,
4902 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
4904 VOID StaQuickResponeForRateUpExec(
4905 IN PVOID SystemSpecific1,
4906 IN PVOID FunctionContext,
4907 IN PVOID SystemSpecific2,
4908 IN PVOID SystemSpecific3);
4910 VOID AsicBbpTuning1(
4911 IN PRTMP_ADAPTER pAd);
4913 VOID AsicBbpTuning2(
4914 IN PRTMP_ADAPTER pAd);
4916 VOID RTMPUpdateMlmeRate(
4917 IN PRTMP_ADAPTER pAd);
4920 IN PRTMP_ADAPTER pAd,
4925 VOID AsicEvaluateRxAnt(
4926 IN PRTMP_ADAPTER pAd);
4928 VOID AsicRxAntEvalTimeout(
4929 IN PVOID SystemSpecific1,
4930 IN PVOID FunctionContext,
4931 IN PVOID SystemSpecific2,
4932 IN PVOID SystemSpecific3);
4934 VOID APSDPeriodicExec(
4935 IN PVOID SystemSpecific1,
4936 IN PVOID FunctionContext,
4937 IN PVOID SystemSpecific2,
4938 IN PVOID SystemSpecific3);
4940 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4941 IN PRTMP_ADAPTER pAd,
4942 IN PMAC_TABLE_ENTRY pEntry);
4944 UCHAR RTMPStaFixedTxMode(
4945 IN PRTMP_ADAPTER pAd,
4946 IN PMAC_TABLE_ENTRY pEntry);
4948 VOID RTMPUpdateLegacyTxSetting(
4949 UCHAR fixed_tx_mode,
4950 PMAC_TABLE_ENTRY pEntry);
4952 BOOLEAN RTMPAutoRateSwitchCheck(
4953 IN PRTMP_ADAPTER pAd);
4955 NDIS_STATUS MlmeInit(
4956 IN PRTMP_ADAPTER pAd);
4959 IN PRTMP_ADAPTER pAd);
4962 IN PRTMP_ADAPTER pAd);
4964 VOID MlmeResetRalinkCounters(
4965 IN PRTMP_ADAPTER pAd);
4967 VOID BuildChannelList(
4968 IN PRTMP_ADAPTER pAd);
4971 IN PRTMP_ADAPTER pAd);
4974 IN PRTMP_ADAPTER pAd,
4977 VOID ChangeToCellPowerLimit(
4978 IN PRTMP_ADAPTER pAd,
4979 IN UCHAR AironetCellPowerLimit);
4982 IN PRTMP_ADAPTER pAd,
4986 IN PRTMP_ADAPTER pAd,
4990 IN PRTMP_ADAPTER pAd);
4993 IN PRTMP_ADAPTER pAd,
4998 IN PRTMP_ADAPTER pAd);
5001 IN PRTMP_ADAPTER pAd);
5004 IN PRTMP_ADAPTER pAd);
5006 USHORT RTMP_EEPROM_READ16(
5007 IN PRTMP_ADAPTER pAd,
5010 VOID RTMP_EEPROM_WRITE16(
5011 IN PRTMP_ADAPTER pAd,
5016 // Prototypes of function definition in rtmp_tkip.c
5018 VOID RTMPInitTkipEngine(
5019 IN PRTMP_ADAPTER pAd,
5028 VOID RTMPInitMICEngine(
5029 IN PRTMP_ADAPTER pAd,
5033 IN UCHAR UserPriority,
5036 BOOLEAN RTMPTkipCompareMICValue(
5037 IN PRTMP_ADAPTER pAd,
5042 IN UCHAR UserPriority,
5045 VOID RTMPCalculateMICValue(
5046 IN PRTMP_ADAPTER pAd,
5047 IN PNDIS_PACKET pPacket,
5049 IN PCIPHER_KEY pKey,
5052 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5053 IN PRTMP_ADAPTER pAd,
5061 VOID RTMPTkipAppendByte(
5062 IN PTKIP_KEY_INFO pTkip,
5065 VOID RTMPTkipAppend(
5066 IN PTKIP_KEY_INFO pTkip,
5070 VOID RTMPTkipGetMIC(
5071 IN PTKIP_KEY_INFO pTkip);
5073 BOOLEAN RTMPSoftDecryptTKIP(
5074 IN PRTMP_ADAPTER pAd,
5076 IN ULONG DataByteCnt,
5077 IN UCHAR UserPriority,
5078 IN PCIPHER_KEY pWpaKey);
5080 BOOLEAN RTMPSoftDecryptAES(
5081 IN PRTMP_ADAPTER pAd,
5083 IN ULONG DataByteCnt,
5084 IN PCIPHER_KEY pWpaKey);
5087 // Prototypes of function definition in cmm_info.c
5089 NDIS_STATUS RTMPWPARemoveKeyProc(
5090 IN PRTMP_ADAPTER pAd,
5093 VOID RTMPWPARemoveAllKeys(
5094 IN PRTMP_ADAPTER pAd);
5096 BOOLEAN RTMPCheckStrPrintAble(
5100 VOID RTMPSetPhyMode(
5101 IN PRTMP_ADAPTER pAd,
5104 VOID RTMPUpdateHTIE(
5105 IN RT_HT_CAPABILITY *pRtHt,
5107 OUT HT_CAPABILITY_IE *pHtCapability,
5108 OUT ADD_HT_INFO_IE *pAddHtInfo);
5110 VOID RTMPAddWcidAttributeEntry(
5111 IN PRTMP_ADAPTER pAd,
5115 IN MAC_TABLE_ENTRY *pEntry);
5117 CHAR *GetEncryptType(
5123 VOID RTMPIoctlGetSiteSurvey(
5124 IN PRTMP_ADAPTER pAdapter,
5125 IN struct iwreq *wrq);
5127 VOID RTMPIoctlGetMacTable(
5128 IN PRTMP_ADAPTER pAd,
5129 IN struct iwreq *wrq);
5131 VOID RTMPIndicateWPA2Status(
5132 IN PRTMP_ADAPTER pAdapter);
5134 VOID RTMPOPModeSwitching(
5135 IN PRTMP_ADAPTER pAd);
5137 #ifdef CONFIG_STA_SUPPORT
5138 VOID RTMPAddBSSIDCipher(
5139 IN PRTMP_ADAPTER pAd,
5141 IN PNDIS_802_11_KEY pKey,
5142 IN UCHAR CipherAlg);
5143 #endif // CONFIG_STA_SUPPORT //
5145 #ifdef DOT11_N_SUPPORT
5147 IN PRTMP_ADAPTER pAd,
5148 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5150 VOID RTMPSetIndividualHT(
5151 IN PRTMP_ADAPTER pAd,
5153 #endif // DOT11_N_SUPPORT //
5155 VOID RTMPSendWirelessEvent(
5156 IN PRTMP_ADAPTER pAd,
5157 IN USHORT Event_flag,
5162 VOID NICUpdateCntlCounters(
5163 IN PRTMP_ADAPTER pAd,
5164 IN PHEADER_802_11 pHeader,
5166 IN PRXWI_STRUC pRxWI);
5168 // prototype in wpa.c
5170 BOOLEAN WpaMsgTypeSubst(
5174 VOID WpaPskStateMachineInit(
5175 IN PRTMP_ADAPTER pAd,
5176 IN STATE_MACHINE *S,
5177 OUT STATE_MACHINE_FUNC Trans[]);
5179 VOID WpaEAPOLKeyAction(
5180 IN PRTMP_ADAPTER pAd,
5181 IN MLME_QUEUE_ELEM *Elem);
5183 VOID WpaPairMsg1Action(
5184 IN PRTMP_ADAPTER pAd,
5185 IN MLME_QUEUE_ELEM *Elem);
5187 VOID WpaPairMsg3Action(
5188 IN PRTMP_ADAPTER pAd,
5189 IN MLME_QUEUE_ELEM *Elem);
5191 VOID WpaGroupMsg1Action(
5192 IN PRTMP_ADAPTER pAd,
5193 IN MLME_QUEUE_ELEM *Elem);
5195 VOID WpaMacHeaderInit(
5196 IN PRTMP_ADAPTER pAd,
5197 IN OUT PHEADER_802_11 pHdr80211,
5201 VOID Wpa2PairMsg1Action(
5202 IN PRTMP_ADAPTER pAd,
5203 IN MLME_QUEUE_ELEM *Elem);
5205 VOID Wpa2PairMsg3Action(
5206 IN PRTMP_ADAPTER pAd,
5207 IN MLME_QUEUE_ELEM *Elem);
5209 BOOLEAN ParseKeyData(
5210 IN PRTMP_ADAPTER pAd,
5212 IN UCHAR KeyDataLen,
5213 IN UCHAR bPairewise);
5215 VOID RTMPToWirelessSta(
5216 IN PRTMP_ADAPTER pAd,
5217 IN PUCHAR pHeader802_3,
5221 IN BOOLEAN is4wayFrame);
5249 IN PRTMP_ADAPTER pAd,
5259 IN PRTMP_ADAPTER pAd,
5264 // prototype in aironet.c
5266 VOID AironetStateMachineInit(
5267 IN PRTMP_ADAPTER pAd,
5268 IN STATE_MACHINE *S,
5269 OUT STATE_MACHINE_FUNC Trans[]);
5271 VOID AironetMsgAction(
5272 IN PRTMP_ADAPTER pAd,
5273 IN MLME_QUEUE_ELEM *Elem);
5275 VOID AironetRequestAction(
5276 IN PRTMP_ADAPTER pAd,
5277 IN MLME_QUEUE_ELEM *Elem);
5279 VOID ChannelLoadRequestAction(
5280 IN PRTMP_ADAPTER pAd,
5283 VOID NoiseHistRequestAction(
5284 IN PRTMP_ADAPTER pAd,
5287 VOID BeaconRequestAction(
5288 IN PRTMP_ADAPTER pAd,
5291 VOID AironetReportAction(
5292 IN PRTMP_ADAPTER pAd,
5293 IN MLME_QUEUE_ELEM *Elem);
5295 VOID ChannelLoadReportAction(
5296 IN PRTMP_ADAPTER pAd,
5299 VOID NoiseHistReportAction(
5300 IN PRTMP_ADAPTER pAd,
5303 VOID AironetFinalReportAction(
5304 IN PRTMP_ADAPTER pAd);
5306 VOID BeaconReportAction(
5307 IN PRTMP_ADAPTER pAd,
5310 VOID AironetAddBeaconReport(
5311 IN PRTMP_ADAPTER pAd,
5313 IN PMLME_QUEUE_ELEM pElem);
5315 VOID AironetCreateBeaconReportFromBssTable(
5316 IN PRTMP_ADAPTER pAd);
5318 VOID DBGPRINT_TX_RING(
5319 IN PRTMP_ADAPTER pAd,
5322 VOID DBGPRINT_RX_RING(
5323 IN PRTMP_ADAPTER pAd);
5326 IN PRTMP_ADAPTER pAd,
5328 IN UCHAR RssiNumber);
5330 VOID APAsicEvaluateRxAnt(
5331 IN PRTMP_ADAPTER pAd);
5334 VOID APAsicRxAntEvalTimeout(
5335 IN PRTMP_ADAPTER pAd);
5338 // function prototype in cmm_wpa.c
5340 BOOLEAN RTMPCheckWPAframe(
5341 IN PRTMP_ADAPTER pAd,
5342 IN PMAC_TABLE_ENTRY pEntry,
5344 IN ULONG DataByteCount,
5345 IN UCHAR FromWhichBSSID);
5347 VOID AES_GTK_KEY_UNWRAP(
5349 OUT UCHAR *plaintext,
5351 IN UCHAR *ciphertext);
5353 BOOLEAN RTMPCheckRSNIE(
5354 IN PRTMP_ADAPTER pAd,
5357 IN MAC_TABLE_ENTRY *pEntry,
5360 BOOLEAN RTMPParseEapolKeyData(
5361 IN PRTMP_ADAPTER pAd,
5363 IN UCHAR KeyDataLen,
5364 IN UCHAR GroupKeyIndex,
5367 IN MAC_TABLE_ENTRY *pEntry);
5369 VOID ConstructEapolMsg(
5370 IN PRTMP_ADAPTER pAd,
5371 IN UCHAR PeerAuthMode,
5372 IN UCHAR PeerWepStatus,
5373 IN UCHAR MyGroupKeyWepStatus,
5375 IN UCHAR DefaultKeyIdx,
5376 IN UCHAR *ReplayCounter,
5383 OUT PEAPOL_PACKET pMsg);
5386 IN PRTMP_ADAPTER pAd,
5387 IN UCHAR PeerWepStatus,
5389 OUT PEAPOL_PACKET pMsg);
5391 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5392 IN PRTMP_ADAPTER pAd,
5394 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5395 IN PCIPHER_KEY pShard_key);
5397 VOID ConstructEapolKeyData(
5398 IN PRTMP_ADAPTER pAd,
5399 IN UCHAR PeerAuthMode,
5400 IN UCHAR PeerWepStatus,
5401 IN UCHAR GroupKeyWepStatus,
5403 IN UCHAR DefaultKeyIdx,
5404 IN BOOLEAN bWPA2Capable,
5409 OUT PEAPOL_PACKET pMsg);
5412 IN PRTMP_ADAPTER pAd,
5418 // function prototype in ap_wpa.c
5421 BOOLEAN APWpaMsgTypeSubst(
5425 MAC_TABLE_ENTRY *PACInquiry(
5426 IN PRTMP_ADAPTER pAd,
5429 BOOLEAN RTMPCheckMcast(
5430 IN PRTMP_ADAPTER pAd,
5431 IN PEID_STRUCT eid_ptr,
5432 IN MAC_TABLE_ENTRY *pEntry);
5434 BOOLEAN RTMPCheckUcast(
5435 IN PRTMP_ADAPTER pAd,
5436 IN PEID_STRUCT eid_ptr,
5437 IN MAC_TABLE_ENTRY *pEntry);
5439 BOOLEAN RTMPCheckAUTH(
5440 IN PRTMP_ADAPTER pAd,
5441 IN PEID_STRUCT eid_ptr,
5442 IN MAC_TABLE_ENTRY *pEntry);
5444 VOID WPAStart4WayHS(
5445 IN PRTMP_ADAPTER pAd,
5446 IN MAC_TABLE_ENTRY *pEntry,
5447 IN ULONG TimeInterval);
5449 VOID WPAStart2WayGroupHS(
5450 IN PRTMP_ADAPTER pAd,
5451 IN MAC_TABLE_ENTRY *pEntry);
5453 VOID APWpaEAPPacketAction(
5454 IN PRTMP_ADAPTER pAd,
5455 IN MLME_QUEUE_ELEM *Elem);
5457 VOID APWpaEAPOLStartAction(
5458 IN PRTMP_ADAPTER pAd,
5459 IN MLME_QUEUE_ELEM *Elem);
5461 VOID APWpaEAPOLLogoffAction(
5462 IN PRTMP_ADAPTER pAd,
5463 IN MLME_QUEUE_ELEM *Elem);
5465 VOID APWpaEAPOLKeyAction(
5466 IN PRTMP_ADAPTER pAd,
5467 IN MLME_QUEUE_ELEM *Elem);
5469 VOID APWpaEAPOLASFAlertAction(
5470 IN PRTMP_ADAPTER pAd,
5471 IN MLME_QUEUE_ELEM *Elem);
5473 VOID HandleCounterMeasure(
5474 IN PRTMP_ADAPTER pAd,
5475 IN MAC_TABLE_ENTRY *pEntry);
5477 VOID PeerPairMsg2Action(
5478 IN PRTMP_ADAPTER pAd,
5479 IN MAC_TABLE_ENTRY *pEntry,
5480 IN MLME_QUEUE_ELEM *Elem);
5482 VOID PeerPairMsg4Action(
5483 IN PRTMP_ADAPTER pAd,
5484 IN MAC_TABLE_ENTRY *pEntry,
5485 IN MLME_QUEUE_ELEM *Elem);
5488 IN PVOID SystemSpecific1,
5489 IN PVOID FunctionContext,
5490 IN PVOID SystemSpecific2,
5491 IN PVOID SystemSpecific3);
5494 IN PVOID SystemSpecific1,
5495 IN PVOID FunctionContext,
5496 IN PVOID SystemSpecific2,
5497 IN PVOID SystemSpecific3);
5499 VOID EnqueueStartForPSKExec(
5500 IN PVOID SystemSpecific1,
5501 IN PVOID FunctionContext,
5502 IN PVOID SystemSpecific2,
5503 IN PVOID SystemSpecific3);
5505 VOID RTMPHandleSTAKey(
5506 IN PRTMP_ADAPTER pAdapter,
5507 IN MAC_TABLE_ENTRY *pEntry,
5508 IN MLME_QUEUE_ELEM *Elem);
5510 VOID PeerGroupMsg2Action(
5511 IN PRTMP_ADAPTER pAd,
5512 IN PMAC_TABLE_ENTRY pEntry,
5516 VOID PairDisAssocAction(
5517 IN PRTMP_ADAPTER pAd,
5518 IN PMAC_TABLE_ENTRY pEntry,
5521 VOID MlmeDeAuthAction(
5522 IN PRTMP_ADAPTER pAd,
5523 IN PMAC_TABLE_ENTRY pEntry,
5526 VOID GREKEYPeriodicExec(
5527 IN PVOID SystemSpecific1,
5528 IN PVOID FunctionContext,
5529 IN PVOID SystemSpecific2,
5530 IN PVOID SystemSpecific3);
5552 IN PRTMP_ADAPTER pAd,
5555 VOID AES_GTK_KEY_WRAP(
5557 IN UCHAR *plaintext,
5559 OUT UCHAR *ciphertext);
5562 IN PRTMP_ADAPTER pAdapter,
5566 VOID APToWirelessSta(
5567 IN PRTMP_ADAPTER pAd,
5568 IN MAC_TABLE_ENTRY *pEntry,
5569 IN PUCHAR pHeader802_3,
5573 IN BOOLEAN bClearFrame);
5575 VOID RTMPAddPMKIDCache(
5576 IN PRTMP_ADAPTER pAd,
5582 INT RTMPSearchPMKIDCache(
5583 IN PRTMP_ADAPTER pAd,
5587 VOID RTMPDeletePMKIDCache(
5588 IN PRTMP_ADAPTER pAd,
5592 VOID RTMPMaintainPMKIDCache(
5593 IN PRTMP_ADAPTER pAd);
5595 VOID RTMPSendTriggerFrame(
5596 IN PRTMP_ADAPTER pAd,
5600 IN BOOLEAN bQosNull);
5604 VOID RTMP_SetPeriodicTimer(
5605 IN NDIS_MINIPORT_TIMER *pTimer,
5606 IN unsigned long timeout);
5608 VOID RTMP_OS_Init_Timer(
5609 IN PRTMP_ADAPTER pAd,
5610 IN NDIS_MINIPORT_TIMER *pTimer,
5611 IN TIMER_FUNCTION function,
5614 VOID RTMP_OS_Add_Timer(
5615 IN NDIS_MINIPORT_TIMER *pTimer,
5616 IN unsigned long timeout);
5618 VOID RTMP_OS_Mod_Timer(
5619 IN NDIS_MINIPORT_TIMER *pTimer,
5620 IN unsigned long timeout);
5623 VOID RTMP_OS_Del_Timer(
5624 IN NDIS_MINIPORT_TIMER *pTimer,
5625 OUT BOOLEAN *pCancelled);
5628 VOID RTMP_OS_Release_Packet(
5629 IN PRTMP_ADAPTER pAd,
5630 IN PQUEUE_ENTRY pEntry);
5635 NDIS_STATUS os_alloc_mem(
5636 IN PRTMP_ADAPTER pAd,
5640 NDIS_STATUS os_free_mem(
5641 IN PRTMP_ADAPTER pAd,
5645 void RTMP_AllocateSharedMemory(
5646 IN PRTMP_ADAPTER pAd,
5649 OUT PVOID *VirtualAddress,
5650 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5652 VOID RTMPFreeTxRxRingMemory(
5653 IN PRTMP_ADAPTER pAd);
5655 NDIS_STATUS AdapterBlockAllocateMemory(
5659 void RTMP_AllocateTxDescMemory(
5660 IN PRTMP_ADAPTER pAd,
5664 OUT PVOID *VirtualAddress,
5665 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5667 void RTMP_AllocateFirstTxBuffer(
5668 IN PRTMP_ADAPTER pAd,
5672 OUT PVOID *VirtualAddress,
5673 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5675 void RTMP_AllocateMgmtDescMemory(
5676 IN PRTMP_ADAPTER pAd,
5679 OUT PVOID *VirtualAddress,
5680 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5682 void RTMP_AllocateRxDescMemory(
5683 IN PRTMP_ADAPTER pAd,
5686 OUT PVOID *VirtualAddress,
5687 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5689 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5690 IN PRTMP_ADAPTER pAd,
5693 OUT PVOID *VirtualAddress,
5694 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5696 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5697 IN PRTMP_ADAPTER pAd,
5700 OUT PVOID *VirtualAddress);
5702 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5703 IN PRTMP_ADAPTER pAd,
5706 void RTMP_QueryPacketInfo(
5707 IN PNDIS_PACKET pPacket,
5708 OUT PACKET_INFO *pPacketInfo,
5709 OUT PUCHAR *pSrcBufVA,
5710 OUT UINT *pSrcBufLen);
5712 void RTMP_QueryNextPacketInfo(
5713 IN PNDIS_PACKET *ppPacket,
5714 OUT PACKET_INFO *pPacketInfo,
5715 OUT PUCHAR *pSrcBufVA,
5716 OUT UINT *pSrcBufLen);
5719 BOOLEAN RTMP_FillTxBlkInfo(
5720 IN RTMP_ADAPTER *pAd,
5724 PRTMP_SCATTER_GATHER_LIST
5725 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5728 void announce_802_3_packet(
5729 IN PRTMP_ADAPTER pAd,
5730 IN PNDIS_PACKET pPacket);
5733 UINT BA_Reorder_AMSDU_Annnounce(
5734 IN PRTMP_ADAPTER pAd,
5735 IN PNDIS_PACKET pPacket);
5738 UINT Handle_AMSDU_Packet(
5739 IN PRTMP_ADAPTER pAd,
5742 IN UCHAR FromWhichBSSID);
5745 void convert_802_11_to_802_3_packet(
5746 IN PRTMP_ADAPTER pAd,
5747 IN PNDIS_PACKET pPacket,
5751 IN UCHAR FromWhichBSSID);
5754 PNET_DEV get_netdev_from_bssid(
5755 IN PRTMP_ADAPTER pAd,
5756 IN UCHAR FromWhichBSSID);
5759 PNDIS_PACKET duplicate_pkt(
5760 IN PRTMP_ADAPTER pAd,
5761 IN PUCHAR pHeader802_3,
5765 IN UCHAR FromWhichBSSID);
5768 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5769 IN PRTMP_ADAPTER pAd,
5770 IN PNDIS_PACKET pOldPkt);
5772 PNDIS_PACKET duplicate_pkt_with_VLAN(
5773 IN PRTMP_ADAPTER pAd,
5774 IN PUCHAR pHeader802_3,
5778 IN UCHAR FromWhichBSSID);
5780 PNDIS_PACKET duplicate_pkt_with_WPI(
5781 IN PRTMP_ADAPTER pAd,
5782 IN PNDIS_PACKET pPacket,
5783 IN UINT32 ext_head_len,
5784 IN UINT32 ext_tail_len);
5786 UCHAR VLAN_8023_Header_Copy(
5787 IN PRTMP_ADAPTER pAd,
5788 IN PUCHAR pHeader802_3,
5791 IN UCHAR FromWhichBSSID);
5793 #ifdef DOT11_N_SUPPORT
5794 void ba_flush_reordering_timeout_mpdus(
5795 IN PRTMP_ADAPTER pAd,
5796 IN PBA_REC_ENTRY pBAEntry,
5800 VOID BAOriSessionSetUp(
5801 IN PRTMP_ADAPTER pAd,
5802 IN MAC_TABLE_ENTRY *pEntry,
5806 IN BOOLEAN isForced);
5808 VOID BASessionTearDownALL(
5809 IN OUT PRTMP_ADAPTER pAd,
5811 #endif // DOT11_N_SUPPORT //
5813 BOOLEAN OS_Need_Clone_Packet(void);
5816 VOID build_tx_packet(
5817 IN PRTMP_ADAPTER pAd,
5818 IN PNDIS_PACKET pPacket,
5823 VOID BAOriSessionTearDown(
5824 IN OUT PRTMP_ADAPTER pAd,
5827 IN BOOLEAN bPassive,
5828 IN BOOLEAN bForceSend);
5830 VOID BARecSessionTearDown(
5831 IN OUT PRTMP_ADAPTER pAd,
5834 IN BOOLEAN bPassive);
5836 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5837 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5839 ULONG AutoChBssInsertEntry(
5840 IN PRTMP_ADAPTER pAd,
5847 void AutoChBssTableInit(
5848 IN PRTMP_ADAPTER pAd);
5850 void ChannelInfoInit(
5851 IN PRTMP_ADAPTER pAd);
5853 void AutoChBssTableDestroy(
5854 IN PRTMP_ADAPTER pAd);
5856 void ChannelInfoDestroy(
5857 IN PRTMP_ADAPTER pAd);
5859 UCHAR New_ApAutoSelectChannel(
5860 IN PRTMP_ADAPTER pAd);
5862 BOOLEAN rtstrmactohex(
5866 BOOLEAN rtstrcasecmp(
5870 char *rtstrstruncasecmp(
5876 IN const char * s2);
5880 IN const char * ct);
5884 unsigned int *addr);
5886 ////////// common ioctl functions //////////
5887 INT Set_DriverVersion_Proc(
5888 IN PRTMP_ADAPTER pAd,
5891 INT Set_CountryRegion_Proc(
5892 IN PRTMP_ADAPTER pAd,
5895 INT Set_CountryRegionABand_Proc(
5896 IN PRTMP_ADAPTER pAd,
5899 INT Set_WirelessMode_Proc(
5900 IN PRTMP_ADAPTER pAd,
5903 INT Set_Channel_Proc(
5904 IN PRTMP_ADAPTER pAd,
5907 INT Set_ShortSlot_Proc(
5908 IN PRTMP_ADAPTER pAd,
5911 INT Set_TxPower_Proc(
5912 IN PRTMP_ADAPTER pAd,
5915 INT Set_BGProtection_Proc(
5916 IN PRTMP_ADAPTER pAd,
5919 INT Set_TxPreamble_Proc(
5920 IN PRTMP_ADAPTER pAd,
5923 INT Set_RTSThreshold_Proc(
5924 IN PRTMP_ADAPTER pAd,
5927 INT Set_FragThreshold_Proc(
5928 IN PRTMP_ADAPTER pAd,
5931 INT Set_TxBurst_Proc(
5932 IN PRTMP_ADAPTER pAd,
5935 #ifdef AGGREGATION_SUPPORT
5936 INT Set_PktAggregate_Proc(
5937 IN PRTMP_ADAPTER pAd,
5941 INT Set_IEEE80211H_Proc(
5942 IN PRTMP_ADAPTER pAd,
5947 IN PRTMP_ADAPTER pAd,
5951 INT Show_DescInfo_Proc(
5952 IN PRTMP_ADAPTER pAd,
5955 INT Set_ResetStatCounter_Proc(
5956 IN PRTMP_ADAPTER pAd,
5959 #ifdef DOT11_N_SUPPORT
5960 INT Set_BASetup_Proc(
5961 IN PRTMP_ADAPTER pAd,
5964 INT Set_BADecline_Proc(
5965 IN PRTMP_ADAPTER pAd,
5968 INT Set_BAOriTearDown_Proc(
5969 IN PRTMP_ADAPTER pAd,
5972 INT Set_BARecTearDown_Proc(
5973 IN PRTMP_ADAPTER pAd,
5977 IN PRTMP_ADAPTER pAd,
5981 IN PRTMP_ADAPTER pAd,
5985 IN PRTMP_ADAPTER pAd,
5988 INT Set_HtOpMode_Proc(
5989 IN PRTMP_ADAPTER pAd,
5992 INT Set_HtStbc_Proc(
5993 IN PRTMP_ADAPTER pAd,
5997 IN PRTMP_ADAPTER pAd,
6000 INT Set_HtExtcha_Proc(
6001 IN PRTMP_ADAPTER pAd,
6004 INT Set_HtMpduDensity_Proc(
6005 IN PRTMP_ADAPTER pAd,
6008 INT Set_HtBaWinSize_Proc(
6009 IN PRTMP_ADAPTER pAd,
6013 IN PRTMP_ADAPTER pAd,
6016 INT Set_HtLinkAdapt_Proc(
6017 IN PRTMP_ADAPTER pAd,
6020 INT Set_HtAmsdu_Proc(
6021 IN PRTMP_ADAPTER pAd,
6024 INT Set_HtAutoBa_Proc(
6025 IN PRTMP_ADAPTER pAd,
6028 INT Set_HtProtect_Proc(
6029 IN PRTMP_ADAPTER pAd,
6032 INT Set_HtMimoPs_Proc(
6033 IN PRTMP_ADAPTER pAd,
6037 INT Set_ForceShortGI_Proc(
6038 IN PRTMP_ADAPTER pAd,
6041 INT Set_ForceGF_Proc(
6042 IN PRTMP_ADAPTER pAd,
6046 IN PRTMP_ADAPTER pAd);
6048 INT Set_SendPSMPAction_Proc(
6049 IN PRTMP_ADAPTER pAd,
6052 INT Set_HtMIMOPSmode_Proc(
6053 IN PRTMP_ADAPTER pAd,
6057 INT Set_HtTxBASize_Proc(
6058 IN PRTMP_ADAPTER pAd,
6060 #endif // DOT11_N_SUPPORT //
6064 #ifdef CONFIG_STA_SUPPORT
6066 VOID RTMPSendDLSTearDownFrame(
6067 IN PRTMP_ADAPTER pAd,
6070 #ifdef DOT11_N_SUPPORT
6073 IN PRTMP_ADAPTER pAd,
6074 OUT PQUERYBA_TABLE pBAT);
6075 #endif // DOT11_N_SUPPORT //
6077 #ifdef WPA_SUPPLICANT_SUPPORT
6078 INT WpaCheckEapCode(
6079 IN PRTMP_ADAPTER pAd,
6084 VOID WpaSendMicFailureToWpaSupplicant(
6085 IN PRTMP_ADAPTER pAd,
6086 IN BOOLEAN bUnicast);
6088 VOID SendAssocIEsToWpaSupplicant(
6089 IN PRTMP_ADAPTER pAd);
6090 #endif // WPA_SUPPLICANT_SUPPORT //
6092 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6093 int wext_notify_event_assoc(
6094 IN RTMP_ADAPTER *pAd);
6095 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6097 #endif // CONFIG_STA_SUPPORT //
6101 #ifdef DOT11_N_SUPPORT
6102 VOID Handle_BSS_Width_Trigger_Events(
6103 IN PRTMP_ADAPTER pAd);
6105 void build_ext_channel_switch_ie(
6106 IN PRTMP_ADAPTER pAd,
6107 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6108 #endif // DOT11_N_SUPPORT //
6111 BOOLEAN APRxDoneInterruptHandle(
6112 IN PRTMP_ADAPTER pAd);
6114 BOOLEAN STARxDoneInterruptHandle(
6115 IN PRTMP_ADAPTER pAd,
6118 #ifdef DOT11_N_SUPPORT
6119 // AMPDU packet indication
6120 VOID Indicate_AMPDU_Packet(
6121 IN PRTMP_ADAPTER pAd,
6123 IN UCHAR FromWhichBSSID);
6125 // AMSDU packet indication
6126 VOID Indicate_AMSDU_Packet(
6127 IN PRTMP_ADAPTER pAd,
6129 IN UCHAR FromWhichBSSID);
6130 #endif // DOT11_N_SUPPORT //
6132 // Normal legacy Rx packet indication
6133 VOID Indicate_Legacy_Packet(
6134 IN PRTMP_ADAPTER pAd,
6136 IN UCHAR FromWhichBSSID);
6138 VOID Indicate_EAPOL_Packet(
6139 IN PRTMP_ADAPTER pAd,
6141 IN UCHAR FromWhichBSSID);
6143 void update_os_packet_info(
6144 IN PRTMP_ADAPTER pAd,
6146 IN UCHAR FromWhichBSSID);
6148 void wlan_802_11_to_802_3_packet(
6149 IN PRTMP_ADAPTER pAd,
6151 IN PUCHAR pHeader802_3,
6152 IN UCHAR FromWhichBSSID);
6154 UINT deaggregate_AMSDU_announce(
6155 IN PRTMP_ADAPTER pAd,
6156 PNDIS_PACKET pPacket,
6161 #ifdef CONFIG_STA_SUPPORT
6162 // remove LLC and get 802_3 Header
6163 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6165 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6167 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6169 _pDA = _pRxBlk->pHeader->Addr3; \
6170 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6174 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6176 _pDA = _pRxBlk->pHeader->Addr1; \
6177 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6178 _pSA = _pRxBlk->pHeader->Addr2; \
6180 _pSA = _pRxBlk->pHeader->Addr3; \
6184 _pDA = _pRxBlk->pHeader->Addr1; \
6185 _pSA = _pRxBlk->pHeader->Addr2; \
6189 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6190 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6192 #endif // CONFIG_STA_SUPPORT //
6195 BOOLEAN APFowardWirelessStaToWirelessSta(
6196 IN PRTMP_ADAPTER pAd,
6197 IN PNDIS_PACKET pPacket,
6198 IN ULONG FromWhichBSSID);
6200 VOID Announce_or_Forward_802_3_Packet(
6201 IN PRTMP_ADAPTER pAd,
6202 IN PNDIS_PACKET pPacket,
6203 IN UCHAR FromWhichBSSID);
6205 VOID Sta_Announce_or_Forward_802_3_Packet(
6206 IN PRTMP_ADAPTER pAd,
6207 IN PNDIS_PACKET pPacket,
6208 IN UCHAR FromWhichBSSID);
6211 #ifdef CONFIG_STA_SUPPORT
6212 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6213 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6214 //announce_802_3_packet(_pAd, _pPacket);
6215 #endif // CONFIG_STA_SUPPORT //
6218 PNDIS_PACKET DuplicatePacket(
6219 IN PRTMP_ADAPTER pAd,
6220 IN PNDIS_PACKET pPacket,
6221 IN UCHAR FromWhichBSSID);
6224 PNDIS_PACKET ClonePacket(
6225 IN PRTMP_ADAPTER pAd,
6226 IN PNDIS_PACKET pPacket,
6231 // Normal, AMPDU or AMSDU
6232 VOID CmmRxnonRalinkFrameIndicate(
6233 IN PRTMP_ADAPTER pAd,
6235 IN UCHAR FromWhichBSSID);
6237 VOID CmmRxRalinkFrameIndicate(
6238 IN PRTMP_ADAPTER pAd,
6239 IN MAC_TABLE_ENTRY *pEntry,
6241 IN UCHAR FromWhichBSSID);
6243 VOID Update_Rssi_Sample(
6244 IN PRTMP_ADAPTER pAd,
6245 IN RSSI_SAMPLE *pRssi,
6246 IN PRXWI_STRUC pRxWI);
6248 PNDIS_PACKET GetPacketFromRxRing(
6249 IN PRTMP_ADAPTER pAd,
6250 OUT PRT28XX_RXD_STRUC pSaveRxD,
6251 OUT BOOLEAN *pbReschedule,
6252 IN OUT UINT32 *pRxPending);
6254 PNDIS_PACKET RTMPDeFragmentDataFrame(
6255 IN PRTMP_ADAPTER pAd,
6258 ////////////////////////////////////////
6260 #ifdef CONFIG_STA_SUPPORT
6262 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6263 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6264 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6265 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6266 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6267 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6268 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6269 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6270 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6271 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6272 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6275 P80211ENUM_msgitem_status_no_value = 0x00
6278 P80211ENUM_truth_false = 0x00,
6279 P80211ENUM_truth_true = 0x01
6282 /* Definition from madwifi */
6288 } p80211item_uint32_t;
6293 #define WLAN_DEVNAMELEN_MAX 16
6294 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6295 p80211item_uint32_t hosttime;
6296 p80211item_uint32_t mactime;
6297 p80211item_uint32_t channel;
6298 p80211item_uint32_t rssi;
6299 p80211item_uint32_t sq;
6300 p80211item_uint32_t signal;
6301 p80211item_uint32_t noise;
6302 p80211item_uint32_t rate;
6303 p80211item_uint32_t istx;
6304 p80211item_uint32_t frmlen;
6305 } wlan_ng_prism2_header;
6307 /* The radio capture header precedes the 802.11 header. */
6308 typedef struct PACKED _ieee80211_radiotap_header {
6309 UINT8 it_version; /* Version 0. Only increases
6310 * for drastic changes,
6311 * introduction of compatible
6312 * new fields does not count.
6315 UINT16 it_len; /* length of the whole
6316 * header in bytes, including
6317 * it_version, it_pad,
6318 * it_len, and data fields.
6320 UINT32 it_present; /* A bitmap telling which
6321 * fields are present. Set bit 31
6322 * (0x80000000) to extend the
6323 * bitmap by another 32 bits.
6324 * Additional extensions are made
6325 * by setting bit 31.
6327 }ieee80211_radiotap_header ;
6329 enum ieee80211_radiotap_type {
6330 IEEE80211_RADIOTAP_TSFT = 0,
6331 IEEE80211_RADIOTAP_FLAGS = 1,
6332 IEEE80211_RADIOTAP_RATE = 2,
6333 IEEE80211_RADIOTAP_CHANNEL = 3,
6334 IEEE80211_RADIOTAP_FHSS = 4,
6335 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6336 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6337 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6338 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6339 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6340 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6341 IEEE80211_RADIOTAP_ANTENNA = 11,
6342 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6343 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6346 #define WLAN_RADIOTAP_PRESENT ( \
6347 (1 << IEEE80211_RADIOTAP_TSFT) | \
6348 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6349 (1 << IEEE80211_RADIOTAP_RATE) | \
6352 typedef struct _wlan_radiotap_header {
6353 ieee80211_radiotap_header wt_ihdr;
6357 } wlan_radiotap_header;
6358 /* Definition from madwifi */
6360 void send_monitor_packets(
6361 IN PRTMP_ADAPTER pAd,
6364 #if WIRELESS_EXT >= 12
6365 // This function will be called when query /proc
6366 struct iw_statistics *rt28xx_get_wireless_stats(
6367 IN struct net_device *net_dev);
6370 VOID RTMPSetDesiredRates(
6371 IN PRTMP_ADAPTER pAdapter,
6373 #endif // CONFIG_STA_SUPPORT //
6375 INT Set_FixedTxMode_Proc(
6376 IN PRTMP_ADAPTER pAd,
6379 static inline char* GetPhyMode(
6389 #ifdef DOT11_N_SUPPORT
6393 case MODE_HTGREENFIELD:
6395 #endif // DOT11_N_SUPPORT //
6402 static inline char* GetBW(
6412 #ifdef DOT11_N_SUPPORT
6415 #endif // DOT11_N_SUPPORT //
6422 VOID RT28xxThreadTerminate(
6423 IN RTMP_ADAPTER *pAd);
6425 BOOLEAN RT28XXChipsetCheck(
6428 BOOLEAN RT28XXNetDevInit(
6430 IN struct net_device *net_dev,
6431 IN RTMP_ADAPTER *pAd);
6433 BOOLEAN RT28XXProbePostConfig(
6435 IN RTMP_ADAPTER *pAd,
6438 VOID RT28XXDMADisable(
6439 IN RTMP_ADAPTER *pAd);
6441 VOID RT28XXDMAEnable(
6442 IN RTMP_ADAPTER *pAd);
6444 VOID RT28xx_UpdateBeaconToAsic(
6445 IN RTMP_ADAPTER * pAd,
6448 IN ULONG UpdatePos);
6451 IN struct net_device *net_dev,
6452 IN OUT struct ifreq *rq,
6456 #ifdef CONFIG_STA_SUPPORT
6457 INT rt28xx_sta_ioctl(
6458 IN struct net_device *net_dev,
6459 IN OUT struct ifreq *rq,
6461 #endif // CONFIG_STA_SUPPORT //
6463 BOOLEAN RT28XXSecurityKeyAdd(
6464 IN PRTMP_ADAPTER pAd,
6467 IN MAC_TABLE_ENTRY *pEntry);
6469 ////////////////////////////////////////
6470 PNDIS_PACKET GetPacketFromRxRing(
6471 IN PRTMP_ADAPTER pAd,
6472 OUT PRT28XX_RXD_STRUC pSaveRxD,
6473 OUT BOOLEAN *pbReschedule,
6474 IN OUT UINT32 *pRxPending);
6477 void kill_thread_task(PRTMP_ADAPTER pAd);
6479 void tbtt_tasklet(unsigned long data);
6482 // Function Prototype in cmm_data_2860.c
6484 USHORT RtmpPCI_WriteTxResource(
6485 IN PRTMP_ADAPTER pAd,
6488 OUT USHORT *FreeNumber);
6490 USHORT RtmpPCI_WriteSingleTxResource(
6491 IN PRTMP_ADAPTER pAd,
6494 OUT USHORT *FreeNumber);
6496 USHORT RtmpPCI_WriteMultiTxResource(
6497 IN PRTMP_ADAPTER pAd,
6500 OUT USHORT *FreeNumber);
6502 USHORT RtmpPCI_WriteFragTxResource(
6503 IN PRTMP_ADAPTER pAd,
6506 OUT USHORT *FreeNumber);
6508 USHORT RtmpPCI_WriteSubTxResource(
6509 IN PRTMP_ADAPTER pAd,
6512 OUT USHORT *FreeNumber);
6514 VOID RtmpPCI_FinalWriteTxResource(
6515 IN PRTMP_ADAPTER pAd,
6517 IN USHORT totalMPDUSize,
6518 IN USHORT FirstTxIdx);
6520 VOID RtmpPCIDataLastTxIdx(
6521 IN PRTMP_ADAPTER pAd,
6523 IN USHORT LastTxIdx);
6525 VOID RtmpPCIDataKickOut(
6526 IN PRTMP_ADAPTER pAd,
6531 int RtmpPCIMgmtKickOut(
6532 IN RTMP_ADAPTER *pAd,
6534 IN PNDIS_PACKET pPacket,
6535 IN PUCHAR pSrcBufVA,
6539 NDIS_STATUS RTMPCheckRxError(
6540 IN PRTMP_ADAPTER pAd,
6541 IN PHEADER_802_11 pHeader,
6542 IN PRXWI_STRUC pRxWI,
6543 IN PRT28XX_RXD_STRUC pRxD);
6545 #ifdef CONFIG_STA_SUPPORT
6546 VOID RTMPInitPCIeLinkCtrlValue(
6547 IN PRTMP_ADAPTER pAd);
6549 VOID RTMPFindHostPCIDev(
6550 IN PRTMP_ADAPTER pAd);
6552 VOID RTMPPCIeLinkCtrlValueRestore(
6553 IN PRTMP_ADAPTER pAd,
6556 VOID RTMPPCIeLinkCtrlSetting(
6557 IN PRTMP_ADAPTER pAd,
6560 VOID RT28xxPciAsicRadioOff(
6561 IN PRTMP_ADAPTER pAd,
6563 IN USHORT TbttNumToNextWakeUp);
6565 BOOLEAN RT28xxPciAsicRadioOn(
6566 IN PRTMP_ADAPTER pAd,
6569 VOID RT28xxPciStaAsicForceWakeup(
6570 IN PRTMP_ADAPTER pAd,
6573 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6574 IN PRTMP_ADAPTER pAd,
6575 IN USHORT TbttNumToNextWakeUp);
6577 VOID PsPollWakeExec(
6578 IN PVOID SystemSpecific1,
6579 IN PVOID FunctionContext,
6580 IN PVOID SystemSpecific2,
6581 IN PVOID SystemSpecific3);
6584 IN PVOID SystemSpecific1,
6585 IN PVOID FunctionContext,
6586 IN PVOID SystemSpecific2,
6587 IN PVOID SystemSpecific3);
6588 #endif // CONFIG_STA_SUPPORT //
6590 VOID RT28xxPciMlmeRadioOn(
6591 IN PRTMP_ADAPTER pAd);
6593 VOID RT28xxPciMlmeRadioOFF(
6594 IN PRTMP_ADAPTER pAd);
6596 VOID AsicTurnOffRFClk(
6597 IN PRTMP_ADAPTER pAd,
6600 VOID AsicTurnOnRFClk(
6601 IN PRTMP_ADAPTER pAd,
6605 ////////////////////////////////////////
6608 IN RTMP_ADAPTER *pAd);
6610 UINT32 QBSS_LoadElementAppend(
6611 IN RTMP_ADAPTER *pAd,
6614 VOID QBSS_LoadUpdate(
6615 IN RTMP_ADAPTER *pAd);
6617 ///////////////////////////////////////
6618 INT RTMPShowCfgValue(
6619 IN PRTMP_ADAPTER pAd,
6623 PCHAR RTMPGetRalinkAuthModeStr(
6624 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6626 PCHAR RTMPGetRalinkEncryModeStr(
6627 IN USHORT encryMode);
6628 //////////////////////////////////////
6630 #ifdef CONFIG_STA_SUPPORT
6631 VOID AsicStaBbpTuning(
6632 IN PRTMP_ADAPTER pAd);
6634 VOID AsicResetFromDMABusy(
6635 IN PRTMP_ADAPTER pAd);
6638 IN PRTMP_ADAPTER pAd);
6641 IN PRTMP_ADAPTER pAd);
6644 IN PRTMP_ADAPTER pAd);
6645 #endif // CONFIG_STA_SUPPORT //
6647 void RTMP_IndicateMediaState(
6648 IN PRTMP_ADAPTER pAd);
6650 VOID ReSyncBeaconTime(
6651 IN PRTMP_ADAPTER pAd);
6653 VOID RTMPSetAGCInitValue(
6654 IN PRTMP_ADAPTER pAd,
6655 IN UCHAR BandWidth);
6657 int rt28xx_close(IN PNET_DEV dev);
6658 int rt28xx_open(IN PNET_DEV dev);
6660 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6662 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6663 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6665 if (VIRTUAL_IF_NUM(pAd) == 0)
6667 if (rt28xx_open(pAd->net_dev) != 0)
6673 VIRTUAL_IF_INC(pAd);
6677 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6679 VIRTUAL_IF_DEC(pAd);
6680 if (VIRTUAL_IF_NUM(pAd) == 0)
6681 rt28xx_close(pAd->net_dev);
6686 #endif // __RTMP_H__