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;
144 extern UCHAR ExtHtCapIe;
145 #endif // DOT11N_DRAFT3 //
146 #endif // DOT11_N_SUPPORT //
156 extern UCHAR WPA_OUI[];
157 extern UCHAR RSN_OUI[];
158 extern UCHAR WME_INFO_ELEM[];
159 extern UCHAR WME_PARM_ELEM[];
160 extern UCHAR Ccx2QosInfo[];
161 extern UCHAR Ccx2IeInfo[];
162 extern UCHAR RALINK_OUI[];
163 extern UCHAR PowerConstraintIE[];
166 extern UCHAR RateSwitchTable[];
167 extern UCHAR RateSwitchTable11B[];
168 extern UCHAR RateSwitchTable11G[];
169 extern UCHAR RateSwitchTable11BG[];
171 #ifdef DOT11_N_SUPPORT
172 extern UCHAR RateSwitchTable11BGN1S[];
173 extern UCHAR RateSwitchTable11BGN2S[];
174 extern UCHAR RateSwitchTable11BGN2SForABand[];
175 extern UCHAR RateSwitchTable11N1S[];
176 extern UCHAR RateSwitchTable11N2S[];
177 extern UCHAR RateSwitchTable11N2SForABand[];
179 #ifdef CONFIG_STA_SUPPORT
180 extern UCHAR PRE_N_HT_OUI[];
181 #endif // CONFIG_STA_SUPPORT //
182 #endif // DOT11_N_SUPPORT //
184 #define MAXSEQ (0xFFF)
186 #ifdef DOT11_N_SUPPORT
187 struct reordering_mpdu
189 struct reordering_mpdu *next;
190 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
191 int Sequence; /* sequence number of MPDU */
195 struct reordering_list
197 struct reordering_mpdu *next;
201 struct reordering_mpdu_pool
205 struct reordering_list freelist;
207 #endif // DOT11_N_SUPPORT //
209 typedef struct _RSSI_SAMPLE {
210 CHAR LastRssi0; // last received RSSI
211 CHAR LastRssi1; // last received RSSI
212 CHAR LastRssi2; // last received RSSI
222 // Queue structure and macros
224 typedef struct _QUEUE_ENTRY {
225 struct _QUEUE_ENTRY *Next;
226 } QUEUE_ENTRY, *PQUEUE_ENTRY;
229 typedef struct _QUEUE_HEADER {
233 } QUEUE_HEADER, *PQUEUE_HEADER;
235 #define InitializeQueueHeader(QueueHeader) \
237 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
238 (QueueHeader)->Number = 0; \
241 #define RemoveHeadQueue(QueueHeader) \
242 (QueueHeader)->Head; \
244 PQUEUE_ENTRY pNext; \
245 if ((QueueHeader)->Head != NULL) \
247 pNext = (QueueHeader)->Head->Next; \
248 (QueueHeader)->Head = pNext; \
250 (QueueHeader)->Tail = NULL; \
251 (QueueHeader)->Number--; \
255 #define InsertHeadQueue(QueueHeader, QueueEntry) \
257 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
258 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
259 if ((QueueHeader)->Tail == NULL) \
260 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
261 (QueueHeader)->Number++; \
264 #define InsertTailQueue(QueueHeader, QueueEntry) \
266 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
267 if ((QueueHeader)->Tail) \
268 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
270 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
271 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
272 (QueueHeader)->Number++; \
276 // Macros for flag and ref count operations
278 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
279 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
280 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
281 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
282 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
284 // Macro for power save flag.
285 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
286 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
287 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
288 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
289 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
291 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
292 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
293 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
295 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
296 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
297 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
299 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
300 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
301 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
303 #ifdef CONFIG_STA_SUPPORT
304 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
305 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
306 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
307 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
309 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
310 #endif // CONFIG_STA_SUPPORT //
312 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
313 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
316 #define INC_RING_INDEX(_idx, _RingSize) \
318 (_idx) = (_idx+1) % (_RingSize); \
321 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
323 #define RING_PACKET_INIT(_TxRing, _idx) \
325 _TxRing->Cell[_idx].pNdisPacket = NULL; \
326 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
329 #define TXDT_INIT(_TxD) \
331 NdisZeroMemory(_TxD, TXD_SIZE); \
335 //Set last data segment
336 #define RING_SET_LASTDS(_TxD, _IsSD0) \
338 if (_IsSD0) {_TxD->LastSec0 = 1;} \
339 else {_TxD->LastSec1 = 1;} \
342 // Increase TxTsc value for next transmission
344 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
345 // Should send a special event microsoft defined to request re-key
346 #define INC_TX_TSC(_tsc) \
349 while (++_tsc[i] == 0x0) \
357 #ifdef DOT11_N_SUPPORT
358 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
359 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
361 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
362 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
363 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
364 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
365 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
366 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
367 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
368 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
369 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
370 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
371 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
372 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
375 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
377 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
378 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
379 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
381 #endif // DOT11_N_SUPPORT //
384 // MACRO for 32-bit PCI register read / write
386 // Usage : RTMP_IO_READ32(
387 // PRTMP_ADAPTER pAd,
388 // ULONG Register_Offset,
392 // PRTMP_ADAPTER pAd,
393 // ULONG Register_Offset,
398 // BBP & RF are using indirect access. Before write any value into it.
399 // We have to make sure there is no outstanding command pending via checking busy bit.
401 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
403 #define RTMP_RF_IO_WRITE32(_A, _V) \
405 PHY_CSR4_STRUC Value; \
407 if ((_A)->bPCIclkOff) \
412 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
413 if (Value.field.Busy == IDLE) \
416 } while (BusyCnt < MAX_BUSY_COUNT); \
417 if (BusyCnt < MAX_BUSY_COUNT) \
419 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
423 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
425 BBP_CSR_CFG_STRUC BbpCsr; \
427 for (i=0; i<MAX_BUSY_COUNT; i++) \
429 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
430 if (BbpCsr.field.Busy == BUSY) \
435 BbpCsr.field.fRead = 1; \
436 BbpCsr.field.BBP_RW_MODE = 1; \
437 BbpCsr.field.Busy = 1; \
438 BbpCsr.field.RegNum = _I; \
439 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
440 for (k=0; k<MAX_BUSY_COUNT; k++) \
442 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
443 if (BbpCsr.field.Busy == IDLE) \
446 if ((BbpCsr.field.Busy == IDLE) && \
447 (BbpCsr.field.RegNum == _I)) \
449 *(_pV) = (UCHAR)BbpCsr.field.Value; \
453 if (BbpCsr.field.Busy == BUSY) \
455 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
456 *(_pV) = (_A)->BbpWriteLatch[_I]; \
460 //#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
461 // Read BBP register by register's ID. Generate PER to test BA
462 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
464 BBP_CSR_CFG_STRUC BbpCsr; \
466 if ((_A)->bPCIclkOff == FALSE) \
468 for (i=0; i<MAX_BUSY_COUNT; i++) \
470 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
471 if (BbpCsr.field.Busy == BUSY) \
476 BbpCsr.field.fRead = 1; \
477 BbpCsr.field.BBP_RW_MODE = 1; \
478 BbpCsr.field.Busy = 1; \
479 BbpCsr.field.RegNum = _I; \
480 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
481 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
482 RTMPusecDelay(1000); \
483 for (k=0; k<MAX_BUSY_COUNT; k++) \
485 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
486 if (BbpCsr.field.Busy == IDLE) \
489 if ((BbpCsr.field.Busy == IDLE) && \
490 (BbpCsr.field.RegNum == _I)) \
492 *(_pV) = (UCHAR)BbpCsr.field.Value; \
496 if (BbpCsr.field.Busy == BUSY) \
498 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
499 *(_pV) = (_A)->BbpWriteLatch[_I]; \
500 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
501 BbpCsr.field.Busy = 0; \
502 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
507 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
509 BBP_CSR_CFG_STRUC BbpCsr; \
511 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
513 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
514 if (BbpCsr.field.Busy == BUSY) \
517 BbpCsr.field.fRead = 0; \
518 BbpCsr.field.BBP_RW_MODE = 1; \
519 BbpCsr.field.Busy = 1; \
520 BbpCsr.field.Value = _V; \
521 BbpCsr.field.RegNum = _I; \
522 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
523 (_A)->BbpWriteLatch[_I] = _V; \
526 if (BusyCnt == MAX_BUSY_COUNT) \
528 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
532 // Write BBP register by register's ID & value
533 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
535 BBP_CSR_CFG_STRUC BbpCsr; \
537 if ((_A)->bPCIclkOff == FALSE) \
539 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
541 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
542 if (BbpCsr.field.Busy == BUSY) \
545 BbpCsr.field.fRead = 0; \
546 BbpCsr.field.BBP_RW_MODE = 1; \
547 BbpCsr.field.Busy = 1; \
548 BbpCsr.field.Value = _V; \
549 BbpCsr.field.RegNum = _I; \
550 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
551 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
552 if (_A->OpMode == OPMODE_AP) \
553 RTMPusecDelay(1000); \
554 (_A)->BbpWriteLatch[_I] = _V; \
557 if (BusyCnt == MAX_BUSY_COUNT) \
559 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
560 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
561 BbpCsr.field.Busy = 0; \
562 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
568 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
571 case 1: khz = 2412000; break; \
572 case 2: khz = 2417000; break; \
573 case 3: khz = 2422000; break; \
574 case 4: khz = 2427000; break; \
575 case 5: khz = 2432000; break; \
576 case 6: khz = 2437000; break; \
577 case 7: khz = 2442000; break; \
578 case 8: khz = 2447000; break; \
579 case 9: khz = 2452000; break; \
580 case 10: khz = 2457000; break; \
581 case 11: khz = 2462000; break; \
582 case 12: khz = 2467000; break; \
583 case 13: khz = 2472000; break; \
584 case 14: khz = 2484000; break; \
585 case 36: /* UNII */ khz = 5180000; break; \
586 case 40: /* UNII */ khz = 5200000; break; \
587 case 44: /* UNII */ khz = 5220000; break; \
588 case 48: /* UNII */ khz = 5240000; break; \
589 case 52: /* UNII */ khz = 5260000; break; \
590 case 56: /* UNII */ khz = 5280000; break; \
591 case 60: /* UNII */ khz = 5300000; break; \
592 case 64: /* UNII */ khz = 5320000; break; \
593 case 149: /* UNII */ khz = 5745000; break; \
594 case 153: /* UNII */ khz = 5765000; break; \
595 case 157: /* UNII */ khz = 5785000; break; \
596 case 161: /* UNII */ khz = 5805000; break; \
597 case 165: /* UNII */ khz = 5825000; break; \
598 case 100: /* HiperLAN2 */ khz = 5500000; break; \
599 case 104: /* HiperLAN2 */ khz = 5520000; break; \
600 case 108: /* HiperLAN2 */ khz = 5540000; break; \
601 case 112: /* HiperLAN2 */ khz = 5560000; break; \
602 case 116: /* HiperLAN2 */ khz = 5580000; break; \
603 case 120: /* HiperLAN2 */ khz = 5600000; break; \
604 case 124: /* HiperLAN2 */ khz = 5620000; break; \
605 case 128: /* HiperLAN2 */ khz = 5640000; break; \
606 case 132: /* HiperLAN2 */ khz = 5660000; break; \
607 case 136: /* HiperLAN2 */ khz = 5680000; break; \
608 case 140: /* HiperLAN2 */ khz = 5700000; break; \
609 case 34: /* Japan MMAC */ khz = 5170000; break; \
610 case 38: /* Japan MMAC */ khz = 5190000; break; \
611 case 42: /* Japan MMAC */ khz = 5210000; break; \
612 case 46: /* Japan MMAC */ khz = 5230000; break; \
613 case 184: /* Japan */ khz = 4920000; break; \
614 case 188: /* Japan */ khz = 4940000; break; \
615 case 192: /* Japan */ khz = 4960000; break; \
616 case 196: /* Japan */ khz = 4980000; break; \
617 case 208: /* Japan, means J08 */ khz = 5040000; break; \
618 case 212: /* Japan, means J12 */ khz = 5060000; break; \
619 case 216: /* Japan, means J16 */ khz = 5080000; break; \
620 default: khz = 2412000; break; \
624 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
627 case 2412000: ch = 1; break; \
628 case 2417000: ch = 2; break; \
629 case 2422000: ch = 3; break; \
630 case 2427000: ch = 4; break; \
631 case 2432000: ch = 5; break; \
632 case 2437000: ch = 6; break; \
633 case 2442000: ch = 7; break; \
634 case 2447000: ch = 8; break; \
635 case 2452000: ch = 9; break; \
636 case 2457000: ch = 10; break; \
637 case 2462000: ch = 11; break; \
638 case 2467000: ch = 12; break; \
639 case 2472000: ch = 13; break; \
640 case 2484000: ch = 14; break; \
641 case 5180000: ch = 36; /* UNII */ break; \
642 case 5200000: ch = 40; /* UNII */ break; \
643 case 5220000: ch = 44; /* UNII */ break; \
644 case 5240000: ch = 48; /* UNII */ break; \
645 case 5260000: ch = 52; /* UNII */ break; \
646 case 5280000: ch = 56; /* UNII */ break; \
647 case 5300000: ch = 60; /* UNII */ break; \
648 case 5320000: ch = 64; /* UNII */ break; \
649 case 5745000: ch = 149; /* UNII */ break; \
650 case 5765000: ch = 153; /* UNII */ break; \
651 case 5785000: ch = 157; /* UNII */ break; \
652 case 5805000: ch = 161; /* UNII */ break; \
653 case 5825000: ch = 165; /* UNII */ break; \
654 case 5500000: ch = 100; /* HiperLAN2 */ break; \
655 case 5520000: ch = 104; /* HiperLAN2 */ break; \
656 case 5540000: ch = 108; /* HiperLAN2 */ break; \
657 case 5560000: ch = 112; /* HiperLAN2 */ break; \
658 case 5580000: ch = 116; /* HiperLAN2 */ break; \
659 case 5600000: ch = 120; /* HiperLAN2 */ break; \
660 case 5620000: ch = 124; /* HiperLAN2 */ break; \
661 case 5640000: ch = 128; /* HiperLAN2 */ break; \
662 case 5660000: ch = 132; /* HiperLAN2 */ break; \
663 case 5680000: ch = 136; /* HiperLAN2 */ break; \
664 case 5700000: ch = 140; /* HiperLAN2 */ break; \
665 case 5170000: ch = 34; /* Japan MMAC */ break; \
666 case 5190000: ch = 38; /* Japan MMAC */ break; \
667 case 5210000: ch = 42; /* Japan MMAC */ break; \
668 case 5230000: ch = 46; /* Japan MMAC */ break; \
669 case 4920000: ch = 184; /* Japan */ break; \
670 case 4940000: ch = 188; /* Japan */ break; \
671 case 4960000: ch = 192; /* Japan */ break; \
672 case 4980000: ch = 196; /* Japan */ break; \
673 case 5040000: ch = 208; /* Japan, means J08 */ break; \
674 case 5060000: ch = 212; /* Japan, means J12 */ break; \
675 case 5080000: ch = 216; /* Japan, means J16 */ break; \
676 default: ch = 1; break; \
681 // Common fragment list structure - Identical to the scatter gather frag list structure
683 #define NIC_MAX_PHYS_BUF_COUNT 8
685 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
689 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
692 typedef struct _RTMP_SCATTER_GATHER_LIST {
693 ULONG NumberOfElements;
695 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
696 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
699 // Some utility macros
702 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
706 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
709 #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))))
711 #define INC_COUNTER64(Val) (Val.QuadPart++)
713 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
714 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
715 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
716 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
718 // Check LEAP & CCKM flags
719 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
720 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
722 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
723 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
725 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
727 _pExtraLlcSnapEncap = SNAP_802_1H; \
728 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
729 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
731 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
736 _pExtraLlcSnapEncap = NULL; \
740 // New Define for new Tx Path.
741 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
743 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
745 _pExtraLlcSnapEncap = SNAP_802_1H; \
746 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
747 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
749 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
754 _pExtraLlcSnapEncap = NULL; \
759 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
761 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
762 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
763 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
766 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
767 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
768 // else remove the LLC/SNAP field from the result Ethernet frame
769 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
771 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
772 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
773 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
777 _pRemovedLLCSNAP = NULL; \
778 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
779 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
781 PUCHAR pProto = _pData + 6; \
783 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
784 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
786 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
787 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
788 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
792 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
793 _pRemovedLLCSNAP = _pData; \
794 _DataSize -= LENGTH_802_1_H; \
795 _pData += LENGTH_802_1_H; \
800 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
801 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
802 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
806 #define SWITCH_AB( _pAA, _pBB) \
814 // Enqueue this frame to MLME engine
815 // We need to enqueue the whole frame because MLME need to pass data type
816 // information from 802.11 header
817 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
819 UINT32 High32TSF, Low32TSF; \
820 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
821 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
822 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
825 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
826 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
828 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
829 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
832 // Check if it is Japan W53(ch52,56,60,64) channel.
834 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
836 #ifdef CONFIG_STA_SUPPORT
837 #define STA_PORT_SECURED(_pAd) \
839 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
840 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
841 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
842 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
843 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
845 #endif // CONFIG_STA_SUPPORT //
849 // Register set pair for initialzation register set definition
851 typedef struct _RTMP_REG_PAIR
855 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
857 typedef struct _REG_PAIR
861 } REG_PAIR, *PREG_PAIR;
864 // Register set pair for initialzation register set definition
866 typedef struct _RTMP_RF_REGS
873 } RTMP_RF_REGS, *PRTMP_RF_REGS;
875 typedef struct _FREQUENCY_ITEM {
880 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
883 // Data buffer for DMA operation, the buffer must be contiguous physical memory
884 // Both DMA to / from CPU use the same structure.
886 typedef struct _RTMP_DMABUF
889 PVOID AllocVa; // TxBuf virtual address
890 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
891 } RTMP_DMABUF, *PRTMP_DMABUF;
894 typedef union _HEADER_802_11_SEQ{
907 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
910 // Data buffer for DMA operation, the buffer must be contiguous physical memory
911 // Both DMA to / from CPU use the same structure.
913 typedef struct _RTMP_REORDERBUF
916 PVOID AllocVa; // TxBuf virtual address
917 UCHAR Header802_3[14];
918 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
922 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
923 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
926 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
927 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
928 // which won't be released, driver has to wait until upper layer return the packet
929 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
930 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
931 // which driver should ACK upper layer when the tx is physically done or failed.
933 typedef struct _RTMP_DMACB
935 ULONG AllocSize; // Control block size
936 PVOID AllocVa; // Control block virtual address
937 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
938 PNDIS_PACKET pNdisPacket;
939 PNDIS_PACKET pNextNdisPacket;
941 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
942 } RTMP_DMACB, *PRTMP_DMACB;
944 typedef struct _RTMP_TX_BUF
948 ULONG AllocSize; // Control block size
949 PVOID AllocVa; // Control block virtual address
950 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
951 } RTMP_TXBUF, *PRTMP_TXBUF;
953 typedef struct _RTMP_RX_BUF
957 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
958 } RTMP_RXBUF, *PRTMP_RXBUF;
959 typedef struct _RTMP_TX_RING
961 RTMP_DMACB Cell[TX_RING_SIZE];
964 UINT32 TxSwFreeIdx; // software next free tx index
965 } RTMP_TX_RING, *PRTMP_TX_RING;
967 typedef struct _RTMP_RX_RING
969 RTMP_DMACB Cell[RX_RING_SIZE];
972 INT32 RxSwReadIdx; // software next read index
973 } RTMP_RX_RING, *PRTMP_RX_RING;
975 typedef struct _RTMP_MGMT_RING
977 RTMP_DMACB Cell[MGMT_RING_SIZE];
980 UINT32 TxSwFreeIdx; // software next free tx index
981 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
984 // Statistic counter structure
986 typedef struct _COUNTER_802_3
996 ULONG RcvAlignmentErrors;
998 ULONG MoreCollisions;
1000 } COUNTER_802_3, *PCOUNTER_802_3;
1002 typedef struct _COUNTER_802_11 {
1004 LARGE_INTEGER LastTransmittedFragmentCount;
1005 LARGE_INTEGER TransmittedFragmentCount;
1006 LARGE_INTEGER MulticastTransmittedFrameCount;
1007 LARGE_INTEGER FailedCount;
1008 LARGE_INTEGER RetryCount;
1009 LARGE_INTEGER MultipleRetryCount;
1010 LARGE_INTEGER RTSSuccessCount;
1011 LARGE_INTEGER RTSFailureCount;
1012 LARGE_INTEGER ACKFailureCount;
1013 LARGE_INTEGER FrameDuplicateCount;
1014 LARGE_INTEGER ReceivedFragmentCount;
1015 LARGE_INTEGER MulticastReceivedFrameCount;
1016 LARGE_INTEGER FCSErrorCount;
1017 } COUNTER_802_11, *PCOUNTER_802_11;
1019 typedef struct _COUNTER_RALINK {
1020 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1021 ULONG LastReceivedByteCount;
1022 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1023 ULONG BeenDisassociatedCount;
1024 ULONG BadCQIAutoRecoveryCount;
1025 ULONG PoorCQIRoamingCount;
1026 ULONG MgmtRingFullCount;
1027 ULONG RxCountSinceLastNULL;
1029 ULONG RxRingErrCount;
1031 ULONG TxRingErrCount;
1032 LARGE_INTEGER RealFcsErrCount;
1033 ULONG PendingNdisPacketCount;
1035 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1036 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1037 UINT32 OneSecTxDoneCount;
1038 ULONG OneSecRxCount;
1039 UINT32 OneSecTxAggregationCount;
1040 UINT32 OneSecRxAggregationCount;
1042 UINT32 OneSecFrameDuplicateCount;
1045 UINT32 OneSecTxNoRetryOkCount;
1046 UINT32 OneSecTxRetryOkCount;
1047 UINT32 OneSecTxFailCount;
1048 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1049 UINT32 OneSecRxOkCnt; // RX without error
1050 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1051 UINT32 OneSecRxFcsErrCnt; // CRC error
1052 UINT32 OneSecBeaconSentCnt;
1053 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1054 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1057 ULONG TxNonAggCount;
1058 ULONG TxAgg1MPDUCount;
1059 ULONG TxAgg2MPDUCount;
1060 ULONG TxAgg3MPDUCount;
1061 ULONG TxAgg4MPDUCount;
1062 ULONG TxAgg5MPDUCount;
1063 ULONG TxAgg6MPDUCount;
1064 ULONG TxAgg7MPDUCount;
1065 ULONG TxAgg8MPDUCount;
1066 ULONG TxAgg9MPDUCount;
1067 ULONG TxAgg10MPDUCount;
1068 ULONG TxAgg11MPDUCount;
1069 ULONG TxAgg12MPDUCount;
1070 ULONG TxAgg13MPDUCount;
1071 ULONG TxAgg14MPDUCount;
1072 ULONG TxAgg15MPDUCount;
1073 ULONG TxAgg16MPDUCount;
1075 LARGE_INTEGER TransmittedOctetsInAMSDU;
1076 LARGE_INTEGER TransmittedAMSDUCount;
1077 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1078 LARGE_INTEGER ReceivedAMSDUCount;
1079 LARGE_INTEGER TransmittedAMPDUCount;
1080 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1081 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1082 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1083 } COUNTER_RALINK, *PCOUNTER_RALINK;
1085 typedef struct _PID_COUNTER {
1086 ULONG TxAckRequiredCount; // CRC error
1088 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1089 ULONG LastSuccessRate;
1090 } PID_COUNTER, *PPID_COUNTER;
1092 typedef struct _COUNTER_DRS {
1093 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1094 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1095 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1096 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1097 ULONG CurrTxRateStableTime; // # of second in current TX rate
1098 BOOLEAN fNoisyEnvironment;
1099 BOOLEAN fLastSecAccordingRSSI;
1100 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1101 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1102 ULONG LastTxOkCount;
1103 } COUNTER_DRS, *PCOUNTER_DRS;
1106 // Arcfour Structure Added by PaulWu
1108 typedef struct _ARCFOUR
1113 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1115 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1116 typedef struct _RECEIVE_SETTING {
1117 #ifdef RT_BIG_ENDIAN
1121 USHORT STBC:2; //SPACE
1123 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1124 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1126 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1127 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1129 USHORT STBC:2; //SPACE
1134 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1136 // Shared key data structure
1137 typedef struct _WEP_KEY {
1138 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1139 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1140 } WEP_KEY, *PWEP_KEY;
1142 typedef struct _CIPHER_KEY {
1143 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1144 UCHAR RxMic[8]; // make alignment
1146 UCHAR TxTsc[6]; // 48bit TSC value
1147 UCHAR RxTsc[6]; // 48bit TSC value
1148 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1150 #ifdef CONFIG_STA_SUPPORT
1152 #endif // CONFIG_STA_SUPPORT //
1153 // Key length for each key, 0: entry is invalid
1154 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1155 } CIPHER_KEY, *PCIPHER_KEY;
1157 typedef struct _BBP_TUNING_STRUCT {
1159 UCHAR FalseCcaCountUpperBound; // 100 per sec
1160 UCHAR FalseCcaCountLowerBound; // 10 per sec
1161 UCHAR R17LowerBound; // specified in E2PROM
1162 UCHAR R17UpperBound; // 0x68 according to David Tung
1163 UCHAR CurrentR17Value;
1164 } BBP_TUNING, *PBBP_TUNING;
1166 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1167 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1168 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1169 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1170 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1171 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1172 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1173 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1174 SHORT Pair1LastAvgRssi; //
1175 SHORT Pair2LastAvgRssi; //
1176 ULONG RcvPktNumWhenEvaluate;
1177 BOOLEAN FirstPktArrivedWhenEvaluate;
1178 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1179 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1181 typedef struct _LEAP_AUTH_INFO {
1182 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1183 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1185 UCHAR UserName[256]; //LEAP, User name
1187 UCHAR Password[256]; //LEAP, User Password
1189 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1192 UCHAR Addr[MAC_ADDR_LEN];
1193 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1194 //00 02-Authentication timeout
1195 //00 03-Challenge from AP failed
1196 //00 04-Challenge to AP failed
1198 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1202 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1203 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1209 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1212 // Receive Tuple Cache Format
1214 typedef struct _TUPLE_CACHE {
1216 UCHAR MacAddress[MAC_ADDR_LEN];
1219 } TUPLE_CACHE, *PTUPLE_CACHE;
1222 // Fragment Frame structure
1224 typedef struct _FRAGMENT_FRAME {
1225 PNDIS_PACKET pFragPacket;
1229 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1230 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1234 // Packet information for NdisQueryPacket
1236 typedef struct _PACKET_INFO {
1237 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1238 UINT BufferCount ; // Number of Buffer descriptor chained
1239 UINT TotalPacketLength ; // Self explained
1240 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1241 } PACKET_INFO, *PPACKET_INFO;
1244 // Tkip Key structure which RC4 key & MIC calculation
1246 typedef struct _TKIP_KEY_INFO {
1247 UINT nBytesInM; // # bytes in M for MICKEY
1250 ULONG K0; // for MICKEY Low
1251 ULONG K1; // for MICKEY Hig
1252 ULONG L; // Current state for MICKEY
1253 ULONG R; // Current state for MICKEY
1254 ULONG M; // Message accumulator for MICKEY
1257 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1260 // Private / Misc data, counters for driver internal use
1262 typedef struct __PRIVATE_STRUC {
1263 UINT SystemResetCnt; // System reset counter
1264 UINT TxRingFullCnt; // Tx ring full occurrance number
1265 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1266 // Variables for WEP encryption / decryption in rtmp_wep.c
1268 ARCFOURCONTEXT WEPCONTEXT;
1272 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1274 // structure to tune BBP R66 (BBP TUNING)
1275 typedef struct _BBP_R66_TUNING {
1277 USHORT FalseCcaLowerThreshold; // default 100
1278 USHORT FalseCcaUpperThreshold; // default 512
1280 UCHAR R66CurrentValue;
1281 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1282 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1284 // structure to store channel TX power
1285 typedef struct _CHANNEL_TX_POWER {
1286 USHORT RemainingTimeForUse; //unit: sec
1288 #ifdef DOT11N_DRAFT3
1289 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1290 #endif // DOT11N_DRAFT3 //
1295 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1297 // structure to store 802.11j channel TX power
1298 typedef struct _CHANNEL_11J_TX_POWER {
1300 UCHAR BW; // BW_10 or BW_20
1303 USHORT RemainingTimeForUse; //unit: sec
1304 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1306 typedef enum _ABGBAND_STATE_ {
1312 typedef struct _MLME_STRUCT {
1313 #ifdef CONFIG_STA_SUPPORT
1314 // STA state machines
1315 STATE_MACHINE CntlMachine;
1316 STATE_MACHINE AssocMachine;
1317 STATE_MACHINE AuthMachine;
1318 STATE_MACHINE AuthRspMachine;
1319 STATE_MACHINE SyncMachine;
1320 STATE_MACHINE WpaPskMachine;
1321 STATE_MACHINE LeapMachine;
1322 STATE_MACHINE AironetMachine;
1323 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1324 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1325 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1326 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1327 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1328 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1329 #endif // CONFIG_STA_SUPPORT //
1330 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1332 STATE_MACHINE ActMachine;
1335 #ifdef QOS_DLS_SUPPORT
1336 STATE_MACHINE DlsMachine;
1337 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1338 #endif // QOS_DLS_SUPPORT //
1343 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1344 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1345 ULONG LastSendNULLpsmTime;
1348 NDIS_SPIN_LOCK TaskLock;
1353 RALINK_TIMER_STRUCT PeriodicTimer;
1354 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1355 RALINK_TIMER_STRUCT LinkDownTimer;
1356 RALINK_TIMER_STRUCT LinkUpTimer;
1357 UCHAR bPsPollTimerRunning;
1358 RALINK_TIMER_STRUCT PsPollTimer;
1359 RALINK_TIMER_STRUCT RadioOnOffTimer;
1360 ULONG PeriodicRound;
1361 ULONG OneSecPeriodicRound;
1364 BOOLEAN bLowThroughput;
1365 BOOLEAN bEnableAutoAntennaCheck;
1366 RALINK_TIMER_STRUCT RxAntEvalTimer;
1369 } MLME_STRUCT, *PMLME_STRUCT;
1371 // structure for radar detection and channel switch
1372 typedef struct _RADAR_DETECT_STRUCT {
1373 UCHAR CSCount; //Channel switch counter
1374 UCHAR CSPeriod; //Channel switch period (beacon count)
1375 UCHAR RDCount; //Radar detection counter
1376 UCHAR RDMode; //Radar Detection mode
1377 UCHAR RDDurRegion; //Radar detection duration region
1384 ULONG InServiceMonitorCount; // unit: sec
1385 UINT8 DfsSessionTime;
1388 UINT8 LongPulseRadarTh;
1389 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1391 #ifdef CARRIER_DETECTION_SUPPORT
1392 typedef enum CD_STATE_n
1399 typedef struct CARRIER_DETECTION_s
1402 UINT8 CDSessionTime;
1405 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1406 #endif // CARRIER_DETECTION_SUPPORT //
1408 typedef enum _REC_BLOCKACK_STATUS
1412 Recipient_HandleRes,
1414 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1416 typedef enum _ORI_BLOCKACK_STATUS
1422 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1424 #ifdef DOT11_N_SUPPORT
1425 typedef struct _BA_ORI_ENTRY{
1430 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1432 USHORT TimeOutValue;
1433 ORI_BLOCKACK_STATUS ORI_BA_Status;
1434 RALINK_TIMER_STRUCT ORIBATimer;
1436 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1438 typedef struct _BA_REC_ENTRY {
1441 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1443 USHORT TimeOutValue;
1444 RALINK_TIMER_STRUCT RECBATimer;
1445 ULONG LastIndSeqAtTimer;
1448 REC_BLOCKACK_STATUS REC_BA_Status;
1449 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1451 struct reordering_list list;
1452 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1456 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1457 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1458 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1459 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1460 } BA_TABLE, *PBA_TABLE;
1462 //For QureyBATableOID use;
1463 typedef struct PACKED _OID_BA_REC_ENTRY{
1464 UCHAR MACAddr[MAC_ADDR_LEN];
1465 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1468 REC_BLOCKACK_STATUS REC_BA_Status[8];
1469 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1471 //For QureyBATableOID use;
1472 typedef struct PACKED _OID_BA_ORI_ENTRY{
1473 UCHAR MACAddr[MAC_ADDR_LEN];
1474 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
1477 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1478 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1480 typedef struct _QUERYBA_TABLE{
1481 OID_BA_ORI_ENTRY BAOriEntry[32];
1482 OID_BA_REC_ENTRY BARecEntry[32];
1483 UCHAR OriNum;// Number of below BAOriEntry
1484 UCHAR RecNum;// Number of below BARecEntry
1485 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1487 typedef union _BACAP_STRUC {
1488 #ifdef RT_BIG_ENDIAN
1491 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.
1492 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1493 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1494 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1495 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1496 UINT32 MpduDensity:3;
1497 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1498 UINT32 AutoBA:1; // automatically BA
1499 UINT32 TxBAWinLimit:8;
1500 UINT32 RxBAWinLimit:8;
1504 UINT32 RxBAWinLimit:8;
1505 UINT32 TxBAWinLimit:8;
1506 UINT32 AutoBA:1; // automatically BA
1507 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1508 UINT32 MpduDensity:3;
1509 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1510 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1511 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1512 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1513 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.
1518 } BACAP_STRUC, *PBACAP_STRUC;
1519 #endif // DOT11_N_SUPPORT //
1521 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1522 typedef struct _IOT_STRUC {
1524 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1525 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1526 ULONG OneSecInWindowCount;
1527 ULONG OneSecFrameDuplicateCount;
1528 ULONG OneSecOutWindowCount;
1533 BOOLEAN bRTSLongProtOn;
1534 #ifdef CONFIG_STA_SUPPORT
1535 BOOLEAN bLastAtheros;
1536 BOOLEAN bCurrentAtheros;
1537 BOOLEAN bNowAtherosBurstOn;
1538 BOOLEAN bNextDisableRxBA;
1540 #endif // CONFIG_STA_SUPPORT //
1541 } IOT_STRUC, *PIOT_STRUC;
1543 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1544 typedef union _REG_TRANSMIT_SETTING {
1545 #ifdef RT_BIG_ENDIAN
1551 UINT32 STBC:1; //SPACE
1553 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1554 UINT32 TxBF:1; // 3*3
1561 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1563 UINT32 STBC:1; //SPACE
1571 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1573 typedef union _DESIRED_TRANSMIT_SETTING {
1574 #ifdef RT_BIG_ENDIAN
1577 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1579 USHORT MCS:7; // MCS
1583 USHORT MCS:7; // MCS
1585 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1590 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1593 BOOLEAN IsRecipient;
1594 UCHAR MACAddr[MAC_ADDR_LEN];
1598 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1599 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1602 // Multiple SSID structure
1604 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1605 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1607 /* clear bcmc TIM bit */
1608 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1609 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1611 /* set bcmc TIM bit */
1612 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1613 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1615 /* clear a station PS TIM bit */
1616 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1617 { UCHAR tim_offset = wcid >> 3; \
1618 UCHAR bit_offset = wcid & 0x7; \
1619 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1621 /* set a station PS TIM bit */
1622 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1623 { UCHAR tim_offset = wcid >> 3; \
1624 UCHAR bit_offset = wcid & 0x7; \
1625 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1628 typedef struct _MULTISSID_STRUCT {
1629 UCHAR Bssid[MAC_ADDR_LEN];
1631 CHAR Ssid[MAX_LEN_OF_SSID];
1632 USHORT CapabilityInfo;
1636 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1637 NDIS_802_11_WEP_STATUS WepStatus;
1638 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1639 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1643 ULONG ReceivedByteCount;
1644 ULONG TransmittedByteCount;
1648 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1649 RT_HT_PHY_INFO DesiredHtPhyInfo;
1650 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1651 BOOLEAN bAutoTxRateSwitch;
1655 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1656 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1657 UCHAR DesiredRatesIndex;
1658 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1660 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1670 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1671 UCHAR BANClass3Data;
1672 ULONG IsolateInterStaTraffic;
1675 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1678 UCHAR TimIELocationInBeacon;
1679 UCHAR CapabilityInfoLocationInBeacon;
1680 // outgoing BEACON frame buffer and corresponding TXWI
1681 // PTXWI_STRUC BeaconTxWI; //
1682 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1685 UINT16 StationKeepAliveTime; // unit: second
1688 USHORT VLAN_Priority;
1690 RT_802_11_ACL AccessControlList;
1693 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1694 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1696 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1698 // For 802.1x daemon setting per BSS
1699 UCHAR radius_srv_num;
1700 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1703 unsigned int mylinkid;
1707 UINT32 RcvdConflictSsidCount;
1708 UINT32 RcvdSpoofedAssocRespCount;
1709 UINT32 RcvdSpoofedReassocRespCount;
1710 UINT32 RcvdSpoofedProbeRespCount;
1711 UINT32 RcvdSpoofedBeaconCount;
1712 UINT32 RcvdSpoofedDisassocCount;
1713 UINT32 RcvdSpoofedAuthCount;
1714 UINT32 RcvdSpoofedDeauthCount;
1715 UINT32 RcvdSpoofedUnknownMgmtCount;
1716 UINT32 RcvdReplayAttackCount;
1718 CHAR RssiOfRcvdConflictSsid;
1719 CHAR RssiOfRcvdSpoofedAssocResp;
1720 CHAR RssiOfRcvdSpoofedReassocResp;
1721 CHAR RssiOfRcvdSpoofedProbeResp;
1722 CHAR RssiOfRcvdSpoofedBeacon;
1723 CHAR RssiOfRcvdSpoofedDisassoc;
1724 CHAR RssiOfRcvdSpoofedAuth;
1725 CHAR RssiOfRcvdSpoofedDeauth;
1726 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1727 CHAR RssiOfRcvdReplayAttack;
1731 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1735 #ifdef DOT11N_DRAFT3
1736 typedef enum _BSS2040COEXIST_FLAG{
1737 BSS_2040_COEXIST_DISABLE = 0,
1738 BSS_2040_COEXIST_TIMER_FIRED = 1,
1739 BSS_2040_COEXIST_INFO_SYNC = 2,
1740 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1741 }BSS2040COEXIST_FLAG;
1742 #endif // DOT11N_DRAFT3 //
1744 // configuration common to OPMODE_AP as well as OPMODE_STA
1745 typedef struct _COMMON_CONFIG {
1747 BOOLEAN bCountryFlag;
1748 UCHAR CountryCode[3];
1750 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1751 UCHAR CountryRegionForABand; // Enum of country region for A band
1752 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1753 USHORT Dsifs; // in units of usec
1754 ULONG PacketFilter; // Packet filter for receiving
1756 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1757 UCHAR SsidLen; // the actual ssid length in used
1758 UCHAR LastSsidLen; // the actual ssid length in used
1759 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1760 UCHAR LastBssid[MAC_ADDR_LEN];
1762 UCHAR Bssid[MAC_ADDR_LEN];
1763 USHORT BeaconPeriod;
1765 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1767 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1769 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1771 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1772 UCHAR MaxDesiredRate;
1773 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1775 ULONG BasicRateBitmap; // backup basic ratebitmap
1777 BOOLEAN bAPSDCapable;
1778 BOOLEAN bInServicePeriod;
1783 BOOLEAN bNeedSendTriggerFrame;
1784 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1785 ULONG TriggerTimerCount;
1787 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1788 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1789 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1790 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1791 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1792 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1793 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1794 UCHAR RtsRate; // RATE_xxx
1795 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1796 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1797 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1799 USHORT RtsThreshold; // in unit of BYTE
1800 USHORT FragmentThreshold; // in unit of BYTE
1802 UCHAR TxPower; // in unit of mW
1803 ULONG TxPowerPercentage; // 0~100 %
1804 ULONG TxPowerDefault; // keep for TxPowerPercentage
1806 #ifdef DOT11_N_SUPPORT
1807 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1808 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1809 #endif // DOT11_N_SUPPORT //
1810 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1811 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1812 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1813 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1814 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1815 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1816 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1817 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1818 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1819 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1821 #ifdef DOT11_N_SUPPORT
1823 #endif // DOT11_N_SUPPORT //
1824 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1825 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1826 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1827 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1828 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1829 #ifdef CONFIG_STA_SUPPORT
1830 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1831 #endif // CONFIG_STA_SUPPORT //
1832 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1833 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1834 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1835 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1836 ULONG OpStatusFlags;
1838 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1839 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1841 // IEEE802.11H--DFS.
1842 RADAR_DETECT_STRUCT RadarDetect;
1844 #ifdef CARRIER_DETECTION_SUPPORT
1845 CARRIER_DETECTION CarrierDetect;
1846 #endif // CARRIER_DETECTION_SUPPORT //
1848 #ifdef DOT11_N_SUPPORT
1850 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1851 //RT_HT_CAPABILITY SupportedHtPhy;
1852 RT_HT_CAPABILITY DesiredHtPhy;
1853 HT_CAPABILITY_IE HtCapability;
1854 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1855 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1856 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1857 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
1859 #ifdef DOT11N_DRAFT3
1860 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1861 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1863 //This IE is used for 20/40 BSS Coexistence.
1864 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1865 // ====== 11n D3.0 =======================>
1866 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1867 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1868 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1869 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1870 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1871 USHORT Dot11BssWidthChanTranDelayFactor;
1872 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1874 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1875 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1877 NDIS_SPIN_LOCK TriggerEventTabLock;
1878 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1879 BSS_2040_COEXIST_IE BSSCoexist2040;
1880 TRIGGER_EVENT_TAB TriggerEventTab;
1881 UCHAR ChannelListIdx;
1882 // <====== 11n D3.0 =======================
1883 BOOLEAN bOverlapScanning;
1884 #endif // DOT11N_DRAFT3 //
1887 BOOLEAN bMIMOPSEnable;
1889 BOOLEAN bDisableReordering;
1890 BOOLEAN bForty_Mhz_Intolerant;
1891 BOOLEAN bExtChannelSwitchAnnouncement;
1892 BOOLEAN bRcvBSSWidthTriggerEvents;
1893 ULONG LastRcvBSSWidthTriggerEventsTime;
1896 #endif // DOT11_N_SUPPORT //
1898 // Enable wireless event
1899 BOOLEAN bWirelessEvent;
1900 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1902 // Tx & Rx Stream number selection
1906 // transmit phy mode, trasmit rate for Multicast.
1907 #ifdef MCAST_RATE_SPECIFIC
1908 UCHAR McastTransmitMcs;
1909 UCHAR McastTransmitPhyMode;
1910 #endif // MCAST_RATE_SPECIFIC //
1912 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1916 NDIS_SPIN_LOCK MeasureReqTabLock;
1917 PMEASURE_REQ_TAB pMeasureReqTab;
1919 NDIS_SPIN_LOCK TpcReqTabLock;
1920 PTPC_REQ_TAB pTpcReqTab;
1922 // transmit phy mode, trasmit rate for Multicast.
1923 #ifdef MCAST_RATE_SPECIFIC
1924 HTTRANSMIT_SETTING MCastPhyMode;
1925 #endif // MCAST_RATE_SPECIFIC //
1928 UINT16 DefineMaxTxPwr;
1929 #endif // SINGLE_SKU //
1932 } COMMON_CONFIG, *PCOMMON_CONFIG;
1935 #ifdef CONFIG_STA_SUPPORT
1936 /* Modified by Wu Xi-Kun 4/21/2006 */
1937 // STA configuration and status
1938 typedef struct _STA_ADMIN_CONFIG {
1940 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1941 // the user intended configuration, but not necessary fully equal to the final
1942 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1943 // AP or IBSS holder).
1944 // Once initialized, user configuration can only be changed via OID_xxx
1945 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1946 USHORT AtimWin; // used when starting a new IBSS
1949 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1950 // the user intended configuration, and should be always applied to the final
1951 // settings in ACTIVE BSS without compromising with the BSS holder.
1952 // Once initialized, user configuration can only be changed via OID_xxx
1954 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1955 USHORT DefaultListenCount; // default listen count;
1956 ULONG WindowsPowerMode; // Power mode for AC power
1957 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1958 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1959 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1960 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1962 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1963 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1964 USHORT DisassocReason;
1965 UCHAR DisassocSta[MAC_ADDR_LEN];
1966 USHORT DeauthReason;
1967 UCHAR DeauthSta[MAC_ADDR_LEN];
1968 USHORT AuthFailReason;
1969 UCHAR AuthFailSta[MAC_ADDR_LEN];
1971 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1972 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1973 NDIS_802_11_WEP_STATUS WepStatus;
1974 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1976 // Add to support different cipher suite for WPA2/WPA mode
1977 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1978 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1979 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1980 USHORT RsnCapability;
1982 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1984 UCHAR PMK[32]; // WPA PSK mode PMK
1985 UCHAR PTK[64]; // WPA PSK mode PTK
1986 UCHAR GTK[32]; // GTK from authenticator
1987 BSSID_INFO SavedPMK[PMKID_NO];
1988 UINT SavedPMKNum; // Saved PMKID number
1993 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1996 // For WPA countermeasures
1997 ULONG LastMicErrorTime; // record last MIC error time
1998 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1999 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2000 // For WPA-PSK supplicant state
2001 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2002 UCHAR ReplayCounter[8];
2003 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2004 UCHAR SNonce[32]; // SNonce for WPA-PSK
2006 UCHAR LastSNR0; // last received BEACON's SNR
2007 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2008 RSSI_SAMPLE RssiSample;
2009 ULONG NumOfAvgRssiSample;
2011 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2012 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2013 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2014 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2016 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2017 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2018 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2019 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2020 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2021 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2022 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2024 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2025 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2026 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2028 // New for WPA, windows want us to to keep association information and
2029 // Fixed IEs from last association response
2030 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2031 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2032 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2033 USHORT ResVarIELen; // Length of next VIE include EID & Length
2034 UCHAR ResVarIEs[MAX_VIE_LEN];
2037 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2039 // New variables used for CCX 1.0
2041 BOOLEAN bCkipCmicOn;
2043 UCHAR GIV[3]; //for CCX iv
2048 LEAP_AUTH_INFO LeapAuthInfo;
2050 UCHAR NetworkChallenge[8];
2051 UCHAR NetworkChallengeResponse[24];
2052 UCHAR PeerChallenge[8];
2054 UCHAR PeerChallengeResponse[24];
2055 UCHAR SessionKey[16]; //Network session keys (NSK)
2056 RALINK_TIMER_STRUCT LeapAuthTimer;
2057 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2059 // New control flags for CCX
2060 CCX_CONTROL CCXControl; // Master administration state
2061 BOOLEAN CCXEnable; // Actual CCX state
2062 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2063 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2064 UCHAR CCXReqType; // Current processing CCX request type
2065 BSS_TABLE CCXBssTab; // BSS Table
2066 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2067 USHORT FrameReportLen; // Current Frame report length
2068 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2069 USHORT RPIDensity[8]; // Array for RPI density collection
2070 // Start address of each BSS table within FrameReportBuf
2071 // It's important to update the RxPower of the corresponding Bss
2072 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2073 USHORT BeaconToken; // Token for beacon report
2074 ULONG LastBssIndex; // Most current reported Bss index
2075 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2076 UCHAR RMReqCnt; // Number of measurement request saved.
2077 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2078 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2079 // It must be the same channel with maximum duration
2080 USHORT ParallelDuration; // Maximum duration for parallel measurement
2081 UCHAR ParallelChannel; // Only one channel with parallel measurement
2082 USHORT IAPPToken; // IAPP dialog token
2083 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2084 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2085 // Hack for channel load and noise histogram parameters
2086 UCHAR NHFactor; // Parameter for Noise histogram
2087 UCHAR CLFactor; // Parameter for channel load
2089 UCHAR KRK[16]; //Key Refresh Key.
2090 UCHAR BTK[32]; //Base Transient Key
2091 BOOLEAN CCKMLinkUpFlag;
2092 ULONG CCKMRN; //(Re)Association request number.
2093 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2094 UCHAR AironetCellPowerLimit; //in dBm
2095 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2096 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2097 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2098 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2099 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2100 USHORT CCXAdjacentAPChannel;
2101 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2103 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2104 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2106 UCHAR DtimCount; // 0.. DtimPeriod-1
2107 UCHAR DtimPeriod; // default = 3
2109 #ifdef QOS_DLS_SUPPORT
2110 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2111 UCHAR DlsReplayCounter[8];
2112 #endif // QOS_DLS_SUPPORT //
2113 ////////////////////////////////////////////////////////////////////////////////////////
2114 // This is only for WHQL test.
2116 ////////////////////////////////////////////////////////////////////////////////////////
2118 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2120 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2121 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2123 #ifdef WPA_SUPPLICANT_SUPPORT
2125 BOOLEAN IEEE8021x_required_keys;
2126 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2127 UCHAR DesireSharedKeyId;
2129 // 0: driver ignores wpa_supplicant
2130 // 1: wpa_supplicant initiates scanning and AP selection
2131 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2132 UCHAR WpaSupplicantUP;
2133 UCHAR WpaSupplicantScanCount;
2134 #endif // WPA_SUPPLICANT_SUPPORT //
2139 BOOLEAN bTGnWifiTest;
2140 BOOLEAN bScanReqIsFromWebUI;
2142 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2143 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2144 RT_HT_PHY_INFO DesiredHtPhyInfo;
2145 BOOLEAN bAutoTxRateSwitch;
2149 #ifdef EXT_BUILD_CHANNEL_LIST
2150 UCHAR IEEE80211dClientMode;
2151 UCHAR StaOriCountryCode[3];
2152 UCHAR StaOriGeography;
2153 #endif // EXT_BUILD_CHANNEL_LIST //
2154 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2156 // This data structure keep the current active BSS/IBSS's configuration that this STA
2157 // had agreed upon joining the network. Which means these parameters are usually decided
2158 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2159 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2160 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2161 // the current active settings.
2162 typedef struct _STA_ACTIVE_CONFIG {
2164 USHORT AtimWin; // in kusec; IBSS parameter set element
2165 USHORT CapabilityInfo;
2166 USHORT CfpMaxDuration;
2169 // Copy supported rate from desired AP's beacon. We are trying to match
2170 // AP's supported and extended rate settings.
2171 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2172 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2175 // Copy supported ht from desired AP's beacon. We are trying to match
2176 RT_HT_PHY_INFO SupportedPhyInfo;
2177 RT_HT_CAPABILITY SupportedHtPhy;
2178 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2179 #endif // CONFIG_STA_SUPPORT //
2181 // ----------- start of AP --------------------------
2182 // AUTH-RSP State Machine Aux data structure
2183 typedef struct _AP_MLME_AUX {
2184 UCHAR Addr[MAC_ADDR_LEN];
2186 CHAR Challenge[CIPHER_TEXT_LEN];
2187 } AP_MLME_AUX, *PAP_MLME_AUX;
2189 // structure to define WPA Group Key Rekey Interval
2190 typedef struct PACKED _RT_802_11_WPA_REKEY {
2191 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2192 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2193 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2195 typedef struct _MAC_TABLE_ENTRY {
2196 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2197 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2198 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2199 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2200 BOOLEAN ValidAsMesh;
2201 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2203 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2205 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2207 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2208 UCHAR CMTimerRunning;
2209 UCHAR apidx; // MBSS number
2211 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2212 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2213 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2216 RALINK_TIMER_STRUCT RetryTimer;
2217 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2218 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2219 NDIS_802_11_WEP_STATUS WepStatus;
2220 AP_WPA_STATE WpaState;
2223 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2224 CIPHER_KEY PairwiseKey;
2227 UCHAR PMKID[LEN_PMKID];
2230 UCHAR Addr[MAC_ADDR_LEN];
2233 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2234 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2236 USHORT CapabilityInfo;
2238 ULONG NoDataIdleCount;
2239 UINT16 StationKeepAliveCount; // unit: second
2241 QUEUE_HEADER PsQueue;
2243 UINT32 StaConnectTime; // the live time of this station since associated with AP
2246 #ifdef DOT11_N_SUPPORT
2248 USHORT NoBADataCountDown;
2250 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2251 UINT TxBFCount; // 3*3
2252 #endif // DOT11_N_SUPPORT //
2254 UINT DebugFIFOCount;
2259 //====================================================
2260 //WDS entry needs these
2261 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2262 UINT MatchWDSTabIdx;
2263 UCHAR MaxSupportedRate;
2265 UCHAR CurrTxRateIndex;
2266 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2267 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2268 UINT32 OneSecTxNoRetryOkCount;
2269 UINT32 OneSecTxRetryOkCount;
2270 UINT32 OneSecTxFailCount;
2271 UINT32 ContinueTxFailCnt;
2272 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2273 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2274 //====================================================
2278 #ifdef CONFIG_STA_SUPPORT
2279 #ifdef QOS_DLS_SUPPORT
2280 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2281 #endif // QOS_DLS_SUPPORT //
2282 #endif // CONFIG_STA_SUPPORT //
2284 BOOLEAN fNoisyEnvironment;
2285 BOOLEAN fLastSecAccordingRSSI;
2286 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2287 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2288 ULONG LastTxOkCount;
2289 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2291 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2292 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2293 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2294 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2295 ULONG ClientStatusFlags;
2297 // TODO: Shall we move that to DOT11_N_SUPPORT???
2298 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2300 #ifdef DOT11_N_SUPPORT
2301 // HT EWC MIMO-N used parameters
2302 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2303 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2304 USHORT TXAutoBAbitmap;
2305 USHORT BADeclineBitmap;
2306 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2307 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2308 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2310 // 802.11n features.
2312 UCHAR MaxRAmpduFactor;
2314 UCHAR MmpsMode; // MIMO power save more.
2316 HT_CAPABILITY_IE HTCapability;
2318 #ifdef DOT11N_DRAFT3
2319 UCHAR BSS2040CoexistenceMgmtSupport;
2320 #endif // DOT11N_DRAFT3 //
2321 #endif // DOT11_N_SUPPORT //
2323 BOOLEAN bAutoTxRateSwitch;
2326 struct _MAC_TABLE_ENTRY *pNext;
2327 USHORT TxSeq[NUM_OF_TID];
2328 USHORT NonQosDataSeq;
2330 RSSI_SAMPLE RssiSample;
2332 UINT32 TXMCSExpected[16];
2333 UINT32 TXMCSSuccessful[16];
2334 UINT32 TXMCSFailed[16];
2335 UINT32 TXMCSAutoFallBack[16][16];
2336 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2338 typedef struct _MAC_TABLE {
2340 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2341 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2342 QUEUE_HEADER McastPsQueue;
2344 BOOLEAN fAnyStationInPsm;
2345 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2346 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2347 #ifdef DOT11_N_SUPPORT
2348 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2349 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2350 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2351 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2352 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2353 #endif // DOT11_N_SUPPORT //
2354 } MAC_TABLE, *PMAC_TABLE;
2356 #ifdef DOT11_N_SUPPORT
2357 #define IS_HT_STA(_pMacEntry) \
2358 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2360 #define IS_HT_RATE(_pMacEntry) \
2361 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2363 #define PEER_IS_HT_RATE(_pMacEntry) \
2364 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2365 #endif // DOT11_N_SUPPORT //
2367 typedef struct _WDS_ENTRY {
2369 UCHAR Addr[MAC_ADDR_LEN];
2370 ULONG NoDataIdleCount;
2371 struct _WDS_ENTRY *pNext;
2372 } WDS_ENTRY, *PWDS_ENTRY;
2374 typedef struct _WDS_TABLE_ENTRY {
2376 UCHAR WdsAddr[MAC_ADDR_LEN];
2377 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2378 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2379 UCHAR MaxSupportedRate;
2381 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2382 USHORT OneSecTxOkCount;
2383 USHORT OneSecTxRetryOkCount;
2384 USHORT OneSecTxFailCount;
2385 ULONG CurrTxRateStableTime; // # of second in current TX rate
2386 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2387 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2389 typedef struct _RT_802_11_WDS_ENTRY {
2393 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2394 UCHAR MacTabMatchWCID; // ASIC
2395 NDIS_802_11_WEP_STATUS WepStatus;
2398 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2399 RT_HT_PHY_INFO DesiredHtPhyInfo;
2400 BOOLEAN bAutoTxRateSwitch;
2401 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2402 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2404 typedef struct _WDS_TABLE {
2407 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2408 } WDS_TABLE, *PWDS_TABLE;
2410 typedef struct _APCLI_STRUCT {
2413 unsigned int mylinkid;
2415 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2416 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2417 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2419 CHAR Ssid[MAX_LEN_OF_SSID];
2422 CHAR CfgSsid[MAX_LEN_OF_SSID];
2423 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2424 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2426 ULONG ApCliRcvBeaconTime;
2428 ULONG CtrlCurrState;
2429 ULONG SyncCurrState;
2430 ULONG AuthCurrState;
2431 ULONG AssocCurrState;
2432 ULONG WpaPskCurrState;
2437 ULONG ClientStatusFlags;
2440 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2441 NDIS_802_11_WEP_STATUS WepStatus;
2443 // Add to support different cipher suite for WPA2/WPA mode
2444 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2445 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2446 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2447 USHORT RsnCapability;
2449 UCHAR PSK[100]; // reserve PSK key material
2451 UCHAR PMK[32]; // WPA PSK mode PMK
2452 UCHAR GTK[32]; // GTK from authenticator
2454 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2457 // store RSN_IE built by driver
2458 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2461 // For WPA countermeasures
2462 ULONG LastMicErrorTime; // record last MIC error time
2463 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2465 // For WPA-PSK supplicant state
2466 UCHAR SNonce[32]; // SNonce for WPA-PSK
2467 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2469 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2470 RT_HT_PHY_INFO DesiredHtPhyInfo;
2471 BOOLEAN bAutoTxRateSwitch;
2472 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2473 } APCLI_STRUCT, *PAPCLI_STRUCT;
2475 // ----------- end of AP ----------------------------
2478 typedef struct _BLOCK_QUEUE_ENTRY
2480 BOOLEAN SwTxQueueBlockFlag;
2481 LIST_HEADER NetIfList;
2482 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2483 #endif // BLOCK_NET_IF //
2488 BOOLEAN bGreenField;
2494 typedef struct _INF_PCI_CONFIG
2496 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2499 typedef struct _INF_USB_CONFIG
2501 UINT BulkInEpAddr; // bulk-in endpoint address
2502 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2506 #ifdef IKANOS_VX_1X0
2507 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2509 struct IKANOS_TX_INFO
2511 struct net_device *netdev;
2512 IkanosWlanTxCbFuncP *fp;
2514 #endif // IKANOS_VX_1X0 //
2517 #define DIAGNOSE_TIME 10 // 10 sec
2518 typedef struct _RtmpDiagStrcut_
2519 { // Diagnosis Related element
2520 unsigned char inited;
2522 unsigned char ArrayStartIdx;
2523 unsigned char ArrayCurIdx;
2525 USHORT TxDataCnt[DIAGNOSE_TIME];
2526 USHORT TxFailCnt[DIAGNOSE_TIME];
2527 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2528 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2529 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2531 USHORT TxAggCnt[DIAGNOSE_TIME];
2532 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2533 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2534 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2535 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2538 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2539 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2540 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2542 #endif // DBG_DIAGNOSE //
2546 // The miniport adapter structure
2548 typedef struct _RTMP_ADAPTER
2550 PVOID OS_Cookie; // save specific structure relative to OS
2554 USHORT LnkCtrlBitMask;
2555 USHORT RLnkCtrlConfiguration;
2556 USHORT RLnkCtrlOffset;
2557 USHORT HostLnkCtrlConfiguration;
2558 USHORT HostLnkCtrlOffset;
2559 USHORT PCIePowerSaveLevel;
2560 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2561 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2562 USHORT ThisTbttNumToNextWakeUp;
2563 ULONG SameRxByteCount;
2566 /*****************************************************************************************/
2567 /* PCI related parameters */
2568 /*****************************************************************************************/
2569 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2571 UINT int_enable_reg;
2572 UINT int_disable_mask;
2576 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2577 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2578 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2579 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2582 NDIS_SPIN_LOCK irq_lock;
2587 /*****************************************************************************************/
2588 /* Both PCI/USB related parameters */
2589 /*****************************************************************************************/
2592 /*****************************************************************************************/
2593 /* Tx related parameters */
2594 /*****************************************************************************************/
2595 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2596 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2599 // resource for software backlog queues
2600 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2601 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2603 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2604 RTMP_MGMT_RING MgmtRing;
2605 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2608 /*****************************************************************************************/
2609 /* Rx related parameters */
2610 /*****************************************************************************************/
2612 RTMP_RX_RING RxRing;
2613 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2617 /*****************************************************************************************/
2618 /* ASIC related parameters */
2619 /*****************************************************************************************/
2620 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2622 // ---------------------------
2624 // ---------------------------
2625 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2626 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2627 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2628 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2630 // ---------------------------
2632 // ---------------------------
2633 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2634 UCHAR BbpRssiToDbmDelta;
2635 BBP_R66_TUNING BbpTuning;
2637 // ----------------------------
2639 // ----------------------------
2640 UCHAR RfIcType; // RFIC_xxx
2641 ULONG RfFreqOffset; // Frequency offset for channel switching
2642 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2644 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2645 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2647 // This soft Rx Antenna Diversity mechanism is used only when user set
2648 // RX Antenna = DIVERSITY ON
2649 SOFT_RX_ANT_DIVERSITY RxAnt;
2652 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2653 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2654 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2655 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2657 UCHAR ChannelListNum; // number of channel in ChannelList[]
2660 ULONG Tx20MPwrCfgABand[5];
2661 ULONG Tx20MPwrCfgGBand[5];
2662 ULONG Tx40MPwrCfgABand[5];
2663 ULONG Tx40MPwrCfgGBand[5];
2665 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2666 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2667 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2668 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2669 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2670 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2672 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2673 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2674 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2675 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2676 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2677 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2679 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2680 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2681 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2682 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2685 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2686 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2687 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2688 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2691 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2692 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2693 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2694 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2696 // ----------------------------
2698 // ----------------------------
2699 MCU_LEDCS_STRUC LedCntl;
2700 USHORT Led1; // read from EEPROM 0x3c
2701 USHORT Led2; // EEPROM 0x3e
2702 USHORT Led3; // EEPROM 0x40
2703 UCHAR LedIndicatorStregth;
2704 UCHAR RssiSingalstrengthOffet;
2705 BOOLEAN bLedOnScanning;
2708 /*****************************************************************************************/
2709 /* 802.11 related parameters */
2710 /*****************************************************************************************/
2711 // outgoing BEACON frame buffer and corresponding TXD
2712 TXWI_STRUC BeaconTxWI;
2714 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2716 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2717 PSPOLL_FRAME PsPollFrame;
2718 HEADER_802_11 NullFrame;
2720 //=========AP===========
2723 //=======STA===========
2724 #ifdef CONFIG_STA_SUPPORT
2725 /* Modified by Wu Xi-Kun 4/21/2006 */
2726 // -----------------------------------------------
2727 // STA specific configuration & operation status
2728 // used only when pAd->OpMode == OPMODE_STA
2729 // -----------------------------------------------
2730 STA_ADMIN_CONFIG StaCfg; // user desired settings
2731 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2732 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2733 NDIS_MEDIA_STATE PreMediaState;
2734 #endif // CONFIG_STA_SUPPORT //
2736 //=======Common===========
2737 // OP mode: either AP or STA
2738 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2740 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2742 // MAT related parameters
2744 // configuration: read from Registry & E2PROM
2745 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2746 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2747 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2749 // ------------------------------------------------------
2750 // common configuration to both OPMODE_STA and OPMODE_AP
2751 // ------------------------------------------------------
2752 COMMON_CONFIG CommonCfg;
2755 // AP needs those vaiables for site survey feature.
2756 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2757 BSS_TABLE ScanTab; // store the latest SCAN result
2759 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2760 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2761 NDIS_SPIN_LOCK MacTabLock;
2763 #ifdef DOT11_N_SUPPORT
2765 #endif // DOT11_N_SUPPORT //
2766 NDIS_SPIN_LOCK BATabLock;
2767 RALINK_TIMER_STRUCT RECBATimer;
2769 // encryption/decryption KEY tables
2770 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2772 // RX re-assembly buffer for fragmentation
2773 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2776 COUNTER_802_3 Counters8023; // 802.3 counters
2777 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2778 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2779 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2780 PRIVATE_STRUC PrivateInfo; // Private information & counters
2782 // flags, see fRTMP_ADAPTER_xxx flags
2783 ULONG Flags; // Represent current device status
2784 ULONG PSFlags; // Power Save operation flag.
2786 // current TX sequence #
2789 // Control disconnect / connect event generation
2790 //+++Didn't used anymore
2795 //+++Used only for Station
2796 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2799 ULONG ExtraInfo; // Extra information for displaying status
2800 ULONG SystemErrorBitmap; // b0: E2PROM version error
2802 //+++Didn't used anymore
2803 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2806 // ---------------------------
2808 // ---------------------------
2809 RT_802_11_EVENT_TABLE EventTab;
2814 /*****************************************************************************************/
2815 /* Statistic related parameters */
2816 /*****************************************************************************************/
2818 BOOLEAN bUpdateBcnCntDone;
2819 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2820 // ----------------------------
2822 // ----------------------------
2823 BOOLEAN bBanAllBaSetup;
2824 BOOLEAN bPromiscuous;
2826 // ----------------------------
2827 // rt2860c emulation-use Parameters
2828 // ----------------------------
2831 ULONG cfendaccu[30];
2832 ULONG bacontent[16];
2833 ULONG rxint[RX_RING_SIZE+1];
2836 BOOLEAN bForcePrintTX;
2837 BOOLEAN bForcePrintRX;
2838 BOOLEAN bDisablescanning; //defined in RT2870 USB
2839 BOOLEAN bStaFifoTest;
2840 BOOLEAN bProtectionTest;
2842 BOOLEAN bGenOneHCCA;
2843 BOOLEAN bBroadComHT;
2844 //+++Following add from RT2870 USB.
2846 ULONG BulkOutComplete;
2847 ULONG BulkOutCompleteOther;
2848 ULONG BulkOutCompleteCancel; // seems not use now?
2850 ULONG BulkInComplete;
2851 ULONG BulkInCompleteFail;
2854 struct wificonf WIFItestbed;
2856 #ifdef DOT11_N_SUPPORT
2857 struct reordering_mpdu_pool mpdu_blk_pool;
2858 #endif // DOT11_N_SUPPORT //
2860 ULONG OneSecondnonBEpackets; // record non BE packets per second
2862 #if WIRELESS_EXT >= 12
2863 struct iw_statistics iw_stats;
2866 struct net_device_stats stats;
2869 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
2870 #endif // BLOCK_NET_IF //
2874 #ifdef MULTIPLE_CARD_SUPPORT
2876 UCHAR MC_FileName[256];
2877 #endif // MULTIPLE_CARD_SUPPORT //
2879 ULONG TbttTickCount;
2880 #ifdef PCI_MSI_SUPPORT
2882 #endif // PCI_MSI_SUPPORT //
2887 #define TIME_BASE (1000000/OS_HZ)
2888 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2889 UCHAR flg_be_adjust;
2890 ULONG be_adjust_last_time;
2892 #ifdef IKANOS_VX_1X0
2893 struct IKANOS_TX_INFO IkanosTxInfo;
2894 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2895 #endif // IKANOS_VX_1X0 //
2899 RtmpDiagStruct DiagStruct;
2900 #endif // DBG_DIAGNOSE //
2903 UINT8 PM_FlgSuspend;
2904 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2907 // Cisco IAPP format
2909 typedef struct _CISCO_IAPP_CONTENT_
2911 USHORT Length; //IAPP Length
2912 UCHAR MessageType; //IAPP type
2913 UCHAR FunctionCode; //IAPP function type
2914 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2915 UCHAR SourceMAC[MAC_ADDR_LEN];
2916 USHORT Tag; //Tag(element IE) - Adjacent AP report
2917 USHORT TagLength; //Length of element not including 4 byte header
2918 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2919 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2922 UCHAR Ssid[MAX_LEN_OF_SSID];
2923 USHORT Seconds; //Seconds that the client has been disassociated.
2924 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2926 #define DELAYINTMASK 0x0003fffb
2927 #define INTMASK 0x0003fffb
2928 #define IndMask 0x0003fffc
2929 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2930 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2931 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2932 #define TxCoherent 0x00020000 // tx coherent
2933 #define RxCoherent 0x00010000 // rx coherent
2934 #define McuCommand 0x00000200 // mcu
2935 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2936 #define TBTTInt 0x00000800 // TBTT interrupt
2937 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2938 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2939 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2942 typedef struct _RX_BLK_
2944 RT28XX_RXD_STRUC RxD;
2946 PHEADER_802_11 pHeader;
2947 PNDIS_PACKET pRxPacket;
2951 UCHAR UserPriority; // for calculate TKIP MIC using
2955 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2956 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2957 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2960 #define fRX_WDS 0x0001
2961 #define fRX_AMSDU 0x0002
2962 #define fRX_ARALINK 0x0004
2963 #define fRX_HTC 0x0008
2964 #define fRX_PAD 0x0010
2965 #define fRX_AMPDU 0x0020
2966 #define fRX_QOS 0x0040
2967 #define fRX_INFRA 0x0080
2968 #define fRX_EAP 0x0100
2969 #define fRX_MESH 0x0200
2970 #define fRX_APCLI 0x0400
2971 #define fRX_DLS 0x0800
2972 #define fRX_WPI 0x1000
2974 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2975 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2976 #define LENGTH_ARALINK_HEADER_FIELD 2
2978 #define TX_UNKOWN_FRAME 0x00
2979 #define TX_MCAST_FRAME 0x01
2980 #define TX_LEGACY_FRAME 0x02
2981 #define TX_AMPDU_FRAME 0x04
2982 #define TX_AMSDU_FRAME 0x08
2983 #define TX_RALINK_FRAME 0x10
2984 #define TX_FRAG_FRAME 0x20
2987 // Currently the sizeof(TX_BLK) is 148 bytes.
2988 typedef struct _TX_BLK_
2991 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2992 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2993 USHORT TotalFragNum; // Total frame fragments required in one batch
2994 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2996 QUEUE_HEADER TxPacketList;
2997 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2998 HTTRANSMIT_SETTING *pTransmit;
3000 // Following structure used for the characteristics of a specific packet.
3001 PNDIS_PACKET pPacket;
3002 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3003 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3004 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3005 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3006 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3007 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3008 UCHAR HdrPadLen; // recording Header Padding Length;
3009 UCHAR apidx; // The interface associated to this packet
3010 UCHAR Wcid; // The MAC entry associated to this packet
3011 UCHAR UserPriority; // priority class of packet
3012 UCHAR FrameGap; // what kind of IFS this packet use
3013 UCHAR MpduReqNum; // number of fragments of this frame
3014 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3015 UCHAR CipherAlg; // cipher alogrithm
3020 USHORT Flags; //See following definitions for detail.
3022 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3023 ULONG Priv; // Hardware specific value saved in here.
3027 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3028 #define fTX_bAckRequired 0x0002 // the packet need ack response
3029 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3030 #define fTX_bHTRate 0x0008 // allow to use HT rate
3031 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3032 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3033 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3034 #define fTX_bWMM 0x0080 // QOS Data
3036 #define fTX_bClearEAPFrame 0x0100
3038 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3041 (_pTxBlk->Flags |= _flag) \
3043 (_pTxBlk->Flags &= ~(_flag)) \
3046 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3047 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3048 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3054 //------------------------------------------------------------------------------------------
3058 // Enable & Disable NIC interrupt via writing interrupt mask register
3059 // Since it use ADAPTER structure, it have to be put after structure definition.
3061 __inline VOID NICDisableInterrupt(
3062 IN PRTMP_ADAPTER pAd)
3064 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3065 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3066 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3069 __inline VOID NICEnableInterrupt(
3070 IN PRTMP_ADAPTER pAd)
3073 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3074 // To prevent System hang, we should enalbe the interrupt when
3075 // ASIC is already Wake Up.
3077 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3078 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3079 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3081 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3084 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3086 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3087 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3090 #ifdef RT_BIG_ENDIAN
3091 static inline VOID WriteBackToDescriptor(
3094 IN BOOLEAN DoEncrypt,
3095 IN ULONG DescriptorType)
3099 p1 = ((UINT32 *)Dest);
3100 p2 = ((UINT32 *)Src);
3105 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3109 ========================================================================
3111 Routine Description:
3112 Endian conversion of Tx/Rx descriptor .
3115 pAd Pointer to our adapter
3116 pData Pointer to Tx/Rx descriptor
3117 DescriptorType Direction of the frame
3123 Call this function when read or update descriptor
3124 ========================================================================
3126 static inline VOID RTMPWIEndianChange(
3128 IN ULONG DescriptorType)
3133 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3135 if(DescriptorType == TYPE_TXWI)
3137 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3138 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3142 for(i=0; i < size/4 ; i++)
3143 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3148 ========================================================================
3150 Routine Description:
3151 Endian conversion of Tx/Rx descriptor .
3154 pAd Pointer to our adapter
3155 pData Pointer to Tx/Rx descriptor
3156 DescriptorType Direction of the frame
3162 Call this function when read or update descriptor
3163 ========================================================================
3165 static inline VOID RTMPDescriptorEndianChange(
3167 IN ULONG DescriptorType)
3169 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3170 *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11
3171 *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15
3172 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last
3176 ========================================================================
3178 Routine Description:
3179 Endian conversion of all kinds of 802.11 frames .
3182 pAd Pointer to our adapter
3183 pData Pointer to the 802.11 frame structure
3184 Dir Direction of the frame
3185 FromRxDoneInt Caller is from RxDone interrupt
3191 Call this function when read or update buffer data
3192 ========================================================================
3194 static inline VOID RTMPFrameEndianChange(
3195 IN PRTMP_ADAPTER pAd,
3198 IN BOOLEAN FromRxDoneInt)
3200 PHEADER_802_11 pFrame;
3203 // swab 16 bit fields - Frame Control field
3206 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3209 pFrame = (PHEADER_802_11) pData;
3210 pMacHdr = (PUCHAR) pFrame;
3212 // swab 16 bit fields - Duration/ID field
3213 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3215 // swab 16 bit fields - Sequence Control field
3216 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3218 if(pFrame->FC.Type == BTYPE_MGMT)
3220 switch(pFrame->FC.SubType)
3222 case SUBTYPE_ASSOC_REQ:
3223 case SUBTYPE_REASSOC_REQ:
3224 // swab 16 bit fields - CapabilityInfo field
3225 pMacHdr += sizeof(HEADER_802_11);
3226 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3228 // swab 16 bit fields - Listen Interval field
3230 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3233 case SUBTYPE_ASSOC_RSP:
3234 case SUBTYPE_REASSOC_RSP:
3235 // swab 16 bit fields - CapabilityInfo field
3236 pMacHdr += sizeof(HEADER_802_11);
3237 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3239 // swab 16 bit fields - Status Code field
3241 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3243 // swab 16 bit fields - AID field
3245 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3249 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3250 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3251 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3255 // swab 16 bit fields - Auth Alg No. field
3256 pMacHdr += sizeof(HEADER_802_11);
3257 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3259 // swab 16 bit fields - Auth Seq No. field
3261 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3263 // swab 16 bit fields - Status Code field
3265 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3269 case SUBTYPE_BEACON:
3270 case SUBTYPE_PROBE_RSP:
3271 // swab 16 bit fields - BeaconInterval field
3272 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3273 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3275 // swab 16 bit fields - CapabilityInfo field
3276 pMacHdr += sizeof(USHORT);
3277 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3280 case SUBTYPE_DEAUTH:
3281 case SUBTYPE_DISASSOC:
3282 // swab 16 bit fields - Reason code field
3283 pMacHdr += sizeof(HEADER_802_11);
3284 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3288 else if( pFrame->FC.Type == BTYPE_DATA )
3291 else if(pFrame->FC.Type == BTYPE_CNTL)
3293 switch(pFrame->FC.SubType)
3295 case SUBTYPE_BLOCK_ACK_REQ:
3297 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3298 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3299 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3302 case SUBTYPE_BLOCK_ACK:
3303 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3304 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3308 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3309 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3315 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3318 // swab 16 bit fields - Frame Control
3319 if(Dir == DIR_WRITE)
3321 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3324 #endif // RT_BIG_ENDIAN //
3327 static inline VOID ConvertMulticastIP2MAC(
3329 IN PUCHAR *ppMacAddr,
3330 IN UINT16 ProtoType)
3332 if (pIpAddr == NULL)
3335 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3341 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3342 *(*ppMacAddr) = 0x33;
3343 *(*ppMacAddr + 1) = 0x33;
3344 *(*ppMacAddr + 2) = pIpAddr[12];
3345 *(*ppMacAddr + 3) = pIpAddr[13];
3346 *(*ppMacAddr + 4) = pIpAddr[14];
3347 *(*ppMacAddr + 5) = pIpAddr[15];
3352 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3353 *(*ppMacAddr) = 0x01;
3354 *(*ppMacAddr + 1) = 0x00;
3355 *(*ppMacAddr + 2) = 0x5e;
3356 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3357 *(*ppMacAddr + 4) = pIpAddr[2];
3358 *(*ppMacAddr + 5) = pIpAddr[3];
3365 BOOLEAN RTMPCheckForHang(
3366 IN NDIS_HANDLE MiniportAdapterContext
3370 IN NDIS_HANDLE MiniportAdapterContext
3374 // Private routines in rtmp_init.c
3376 NDIS_STATUS RTMPAllocAdapterBlock(
3378 OUT PRTMP_ADAPTER *ppAdapter
3381 NDIS_STATUS RTMPAllocTxRxRingMemory(
3382 IN PRTMP_ADAPTER pAd
3385 NDIS_STATUS RTMPFindAdapter(
3386 IN PRTMP_ADAPTER pAd,
3387 IN NDIS_HANDLE WrapperConfigurationContext
3390 NDIS_STATUS RTMPReadParametersHook(
3391 IN PRTMP_ADAPTER pAd
3394 VOID RTMPFreeAdapter(
3395 IN PRTMP_ADAPTER pAd
3398 NDIS_STATUS NICReadRegParameters(
3399 IN PRTMP_ADAPTER pAd,
3400 IN NDIS_HANDLE WrapperConfigurationContext
3404 VOID NICReadEEPROMParameters(
3405 IN PRTMP_ADAPTER pAd,
3406 IN PUCHAR mac_addr);
3408 VOID NICInitAsicFromEEPROM(
3409 IN PRTMP_ADAPTER pAd);
3411 VOID NICInitTxRxRingAndBacklogQueue(
3412 IN PRTMP_ADAPTER pAd);
3414 NDIS_STATUS NICInitializeAdapter(
3415 IN PRTMP_ADAPTER pAd,
3416 IN BOOLEAN bHardReset);
3418 NDIS_STATUS NICInitializeAsic(
3419 IN PRTMP_ADAPTER pAd,
3420 IN BOOLEAN bHardReset);
3422 VOID NICRestoreBBPValue(
3423 IN PRTMP_ADAPTER pAd);
3426 IN PRTMP_ADAPTER pAd);
3428 VOID RTMPRingCleanUp(
3429 IN PRTMP_ADAPTER pAd,
3433 IN PRTMP_ADAPTER pAd);
3435 NDIS_STATUS DbgSendPacket(
3436 IN PRTMP_ADAPTER pAd,
3437 IN PNDIS_PACKET pPacket);
3440 IN PRTMP_ADAPTER pAd);
3442 VOID NICResetFromError(
3443 IN PRTMP_ADAPTER pAd);
3445 VOID NICEraseFirmware(
3446 IN PRTMP_ADAPTER pAd);
3448 NDIS_STATUS NICLoadFirmware(
3449 IN PRTMP_ADAPTER pAd);
3451 NDIS_STATUS NICLoadRateSwitchingParams(
3452 IN PRTMP_ADAPTER pAd);
3454 BOOLEAN NICCheckForHang(
3455 IN PRTMP_ADAPTER pAd);
3457 VOID NICUpdateFifoStaCounters(
3458 IN PRTMP_ADAPTER pAd);
3460 VOID NICUpdateRawCounters(
3461 IN PRTMP_ADAPTER pAd);
3463 ULONG RTMPNotAllZero(
3467 VOID RTMPZeroMemory(
3471 ULONG RTMPCompareMemory(
3476 VOID RTMPMoveMemory(
3489 VOID RTMPPatchMacBbpBug(
3490 IN PRTMP_ADAPTER pAd);
3492 VOID RTMPPatchCardBus(
3493 IN PRTMP_ADAPTER pAdapter);
3495 VOID RTMPPatchRalinkCardBus(
3496 IN PRTMP_ADAPTER pAdapter,
3499 ULONG RTMPReadCBConfig(
3505 VOID RTMPWriteCBConfig(
3513 IN PRTMP_ADAPTER pAd,
3514 IN PRALINK_TIMER_STRUCT pTimer,
3515 IN PVOID pTimerFunc,
3520 IN PRALINK_TIMER_STRUCT pTimer,
3525 IN PRALINK_TIMER_STRUCT pTimer,
3528 VOID RTMPCancelTimer(
3529 IN PRALINK_TIMER_STRUCT pTimer,
3530 OUT BOOLEAN *pCancelled);
3533 IN PRTMP_ADAPTER pAd,
3536 VOID RTMPSetSignalLED(
3537 IN PRTMP_ADAPTER pAd,
3538 IN NDIS_802_11_RSSI Dbm);
3540 VOID RTMPEnableRxTx(
3541 IN PRTMP_ADAPTER pAd);
3544 // prototype in action.c
3546 VOID ActionStateMachineInit(
3547 IN PRTMP_ADAPTER pAd,
3548 IN STATE_MACHINE *S,
3549 OUT STATE_MACHINE_FUNC Trans[]);
3551 VOID MlmeADDBAAction(
3552 IN PRTMP_ADAPTER pAd,
3553 IN MLME_QUEUE_ELEM *Elem);
3555 VOID MlmeDELBAAction(
3556 IN PRTMP_ADAPTER pAd,
3557 IN MLME_QUEUE_ELEM *Elem);
3560 IN PRTMP_ADAPTER pAd,
3561 IN MLME_QUEUE_ELEM *Elem);
3563 VOID MlmeInvalidAction(
3564 IN PRTMP_ADAPTER pAd,
3565 IN MLME_QUEUE_ELEM *Elem);
3568 IN PRTMP_ADAPTER pAd,
3569 IN MLME_QUEUE_ELEM *Elem);
3571 #ifdef DOT11_N_SUPPORT
3572 VOID PeerAddBAReqAction(
3573 IN PRTMP_ADAPTER pAd,
3574 IN MLME_QUEUE_ELEM *Elem);
3576 VOID PeerAddBARspAction(
3577 IN PRTMP_ADAPTER pAd,
3578 IN MLME_QUEUE_ELEM *Elem);
3580 VOID PeerDelBAAction(
3581 IN PRTMP_ADAPTER pAd,
3582 IN MLME_QUEUE_ELEM *Elem);
3585 IN PRTMP_ADAPTER pAd,
3586 IN MLME_QUEUE_ELEM *Elem);
3587 #endif // DOT11_N_SUPPORT //
3589 VOID SendPSMPAction(
3590 IN PRTMP_ADAPTER pAd,
3595 #ifdef DOT11N_DRAFT3
3596 VOID SendBSS2040CoexistMgmtAction(
3597 IN PRTMP_ADAPTER pAd,
3602 VOID SendNotifyBWActionFrame(
3603 IN PRTMP_ADAPTER pAd,
3607 BOOLEAN ChannelSwitchSanityCheck(
3608 IN PRTMP_ADAPTER pAd,
3610 IN UCHAR NewChannel,
3611 IN UCHAR Secondary);
3613 VOID ChannelSwitchAction(
3614 IN PRTMP_ADAPTER pAd,
3617 IN UCHAR Secondary);
3619 ULONG BuildIntolerantChannelRep(
3620 IN PRTMP_ADAPTER pAd,
3623 VOID Update2040CoexistFrameAndNotify(
3624 IN PRTMP_ADAPTER pAd,
3626 IN BOOLEAN bAddIntolerantCha);
3628 VOID Send2040CoexistAction(
3629 IN PRTMP_ADAPTER pAd,
3631 IN BOOLEAN bAddIntolerantCha);
3632 #endif // DOT11N_DRAFT3 //
3635 IN PRTMP_ADAPTER pAd,
3636 IN MLME_QUEUE_ELEM *Elem);
3638 VOID PeerPublicAction(
3639 IN PRTMP_ADAPTER pAd,
3640 IN MLME_QUEUE_ELEM *Elem);
3642 #ifdef CONFIG_STA_SUPPORT
3643 VOID StaPublicAction(
3644 IN PRTMP_ADAPTER pAd,
3645 IN UCHAR Bss2040Coexist);
3646 #endif // CONFIG_STA_SUPPORT //
3649 VOID PeerBSSTranAction(
3650 IN PRTMP_ADAPTER pAd,
3651 IN MLME_QUEUE_ELEM *Elem);
3653 #ifdef DOT11_N_SUPPORT
3655 IN PRTMP_ADAPTER pAd,
3656 IN MLME_QUEUE_ELEM *Elem);
3657 #endif // DOT11_N_SUPPORT //
3660 IN PRTMP_ADAPTER pAd,
3661 IN MLME_QUEUE_ELEM *Elem);
3663 #ifdef QOS_DLS_SUPPORT
3665 IN PRTMP_ADAPTER pAd,
3666 IN MLME_QUEUE_ELEM *Elem);
3667 #endif // QOS_DLS_SUPPORT //
3669 #ifdef CONFIG_STA_SUPPORT
3670 #ifdef QOS_DLS_SUPPORT
3672 IN PRTMP_ADAPTER pAd,
3673 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3674 IN PRT_802_11_DLS pDls,
3676 #endif // QOS_DLS_SUPPORT //
3677 #endif // CONFIG_STA_SUPPORT //
3679 #ifdef DOT11_N_SUPPORT
3680 VOID RECBATimerTimeout(
3681 IN PVOID SystemSpecific1,
3682 IN PVOID FunctionContext,
3683 IN PVOID SystemSpecific2,
3684 IN PVOID SystemSpecific3);
3686 VOID ORIBATimerTimeout(
3687 IN PRTMP_ADAPTER pAd);
3689 VOID SendRefreshBAR(
3690 IN PRTMP_ADAPTER pAd,
3691 IN MAC_TABLE_ENTRY *pEntry);
3692 #endif // DOT11_N_SUPPORT //
3695 IN PRTMP_ADAPTER pAd,
3696 IN OUT PHEADER_802_11 pHdr80211,
3702 IN PRTMP_ADAPTER pAd,
3703 IN OUT PFRAME_BAR pCntlBar,
3707 VOID InsertActField(
3708 IN PRTMP_ADAPTER pAd,
3709 OUT PUCHAR pFrameBuf,
3710 OUT PULONG pFrameLen,
3714 BOOLEAN QosBADataParse(
3715 IN PRTMP_ADAPTER pAd,
3717 IN PUCHAR p8023Header,
3721 IN UCHAR DataOffset,
3723 IN UINT CurRxIndex);
3725 #ifdef DOT11_N_SUPPORT
3726 BOOLEAN CntlEnqueueForRecv(
3727 IN PRTMP_ADAPTER pAd,
3730 IN PFRAME_BA_REQ pMsg);
3732 VOID BaAutoManSwitch(
3733 IN PRTMP_ADAPTER pAd);
3734 #endif // DOT11_N_SUPPORT //
3737 IN PRTMP_ADAPTER pAd,
3738 IN UCHAR BatRecIdx);
3741 // Private routines in rtmp_data.c
3743 BOOLEAN RTMPHandleRxDoneInterrupt(
3744 IN PRTMP_ADAPTER pAd);
3746 VOID RTMPHandleTxDoneInterrupt(
3747 IN PRTMP_ADAPTER pAd);
3749 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3750 IN PRTMP_ADAPTER pAd,
3751 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3753 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3754 IN PRTMP_ADAPTER pAd);
3756 VOID RTMPHandleTBTTInterrupt(
3757 IN PRTMP_ADAPTER pAd);
3759 VOID RTMPHandlePreTBTTInterrupt(
3760 IN PRTMP_ADAPTER pAd);
3762 void RTMPHandleTwakeupInterrupt(
3763 IN PRTMP_ADAPTER pAd);
3765 VOID RTMPHandleRxCoherentInterrupt(
3766 IN PRTMP_ADAPTER pAd);
3768 BOOLEAN TxFrameIsAggregatible(
3769 IN PRTMP_ADAPTER pAd,
3770 IN PUCHAR pPrevAddr1,
3771 IN PUCHAR p8023hdr);
3773 BOOLEAN PeerIsAggreOn(
3774 IN PRTMP_ADAPTER pAd,
3776 IN PMAC_TABLE_ENTRY pMacEntry);
3778 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3779 IN PNDIS_BUFFER pFirstBuffer,
3780 IN UCHAR DesiredOffset,
3784 NDIS_STATUS STASendPacket(
3785 IN PRTMP_ADAPTER pAd,
3786 IN PNDIS_PACKET pPacket);
3788 VOID STASendPackets(
3789 IN NDIS_HANDLE MiniportAdapterContext,
3790 IN PPNDIS_PACKET ppPacketArray,
3791 IN UINT NumberOfPackets);
3793 VOID RTMPDeQueuePacket(
3794 IN PRTMP_ADAPTER pAd,
3795 IN BOOLEAN bIntContext,
3797 IN UCHAR Max_Tx_Packets);
3799 NDIS_STATUS RTMPHardTransmit(
3800 IN PRTMP_ADAPTER pAd,
3801 IN PNDIS_PACKET pPacket,
3803 OUT PULONG pFreeTXDLeft);
3805 NDIS_STATUS STAHardTransmit(
3806 IN PRTMP_ADAPTER pAd,
3810 VOID STARxEAPOLFrameIndicate(
3811 IN PRTMP_ADAPTER pAd,
3812 IN MAC_TABLE_ENTRY *pEntry,
3814 IN UCHAR FromWhichBSSID);
3816 NDIS_STATUS RTMPFreeTXDRequest(
3817 IN PRTMP_ADAPTER pAd,
3819 IN UCHAR NumberRequired,
3820 IN PUCHAR FreeNumberIs);
3822 NDIS_STATUS MlmeHardTransmit(
3823 IN PRTMP_ADAPTER pAd,
3825 IN PNDIS_PACKET pPacket);
3827 NDIS_STATUS MlmeHardTransmitMgmtRing(
3828 IN PRTMP_ADAPTER pAd,
3830 IN PNDIS_PACKET pPacket);
3832 NDIS_STATUS MlmeHardTransmitTxRing(
3833 IN PRTMP_ADAPTER pAd,
3835 IN PNDIS_PACKET pPacket);
3837 USHORT RTMPCalcDuration(
3838 IN PRTMP_ADAPTER pAd,
3843 IN PRTMP_ADAPTER pAd,
3844 IN PTXWI_STRUC pTxWI,
3847 IN BOOLEAN InsTimestamp,
3850 IN BOOLEAN NSeq, // HW new a sequence.
3859 IN HTTRANSMIT_SETTING *pTransmit);
3862 VOID RTMPWriteTxWI_Data(
3863 IN PRTMP_ADAPTER pAd,
3864 IN OUT PTXWI_STRUC pTxWI,
3868 VOID RTMPWriteTxWI_Cache(
3869 IN PRTMP_ADAPTER pAd,
3870 IN OUT PTXWI_STRUC pTxWI,
3873 VOID RTMPWriteTxDescriptor(
3874 IN PRTMP_ADAPTER pAd,
3879 VOID RTMPSuspendMsduTransmission(
3880 IN PRTMP_ADAPTER pAd);
3882 VOID RTMPResumeMsduTransmission(
3883 IN PRTMP_ADAPTER pAd);
3885 NDIS_STATUS MiniportMMRequest(
3886 IN PRTMP_ADAPTER pAd,
3891 VOID RTMPSendNullFrame(
3892 IN PRTMP_ADAPTER pAd,
3894 IN BOOLEAN bQosNull);
3896 VOID RTMPSendDisassociationFrame(
3897 IN PRTMP_ADAPTER pAd);
3899 VOID RTMPSendRTSFrame(
3900 IN PRTMP_ADAPTER pAd,
3902 IN unsigned int NextMpduSize,
3905 IN USHORT AckDuration,
3910 NDIS_STATUS RTMPApplyPacketFilter(
3911 IN PRTMP_ADAPTER pAd,
3912 IN PRT28XX_RXD_STRUC pRxD,
3913 IN PHEADER_802_11 pHeader);
3915 PQUEUE_HEADER RTMPCheckTxSwQueue(
3916 IN PRTMP_ADAPTER pAd,
3919 #ifdef CONFIG_STA_SUPPORT
3920 VOID RTMPReportMicError(
3921 IN PRTMP_ADAPTER pAd,
3922 IN PCIPHER_KEY pWpaKey);
3924 VOID WpaMicFailureReportFrame(
3925 IN PRTMP_ADAPTER pAd,
3926 IN MLME_QUEUE_ELEM *Elem);
3928 VOID WpaDisassocApAndBlockAssoc(
3929 IN PVOID SystemSpecific1,
3930 IN PVOID FunctionContext,
3931 IN PVOID SystemSpecific2,
3932 IN PVOID SystemSpecific3);
3933 #endif // CONFIG_STA_SUPPORT //
3935 NDIS_STATUS RTMPCloneNdisPacket(
3936 IN PRTMP_ADAPTER pAd,
3937 IN BOOLEAN pInsAMSDUHdr,
3938 IN PNDIS_PACKET pInPacket,
3939 OUT PNDIS_PACKET *ppOutPacket);
3941 NDIS_STATUS RTMPAllocateNdisPacket(
3942 IN PRTMP_ADAPTER pAd,
3943 IN PNDIS_PACKET *pPacket,
3949 VOID RTMPFreeNdisPacket(
3950 IN PRTMP_ADAPTER pAd,
3951 IN PNDIS_PACKET pPacket);
3953 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3954 IN PRTMP_ADAPTER pAd,
3957 BOOLEAN RTMPCheckDHCPFrame(
3958 IN PRTMP_ADAPTER pAd,
3959 IN PNDIS_PACKET pPacket);
3962 BOOLEAN RTMPCheckEtherType(
3963 IN PRTMP_ADAPTER pAd,
3964 IN PNDIS_PACKET pPacket);
3967 VOID RTMPCckBbpTuning(
3968 IN PRTMP_ADAPTER pAd,
3972 // Private routines in rtmp_wep.c
3974 VOID RTMPInitWepEngine(
3975 IN PRTMP_ADAPTER pAd,
3981 VOID RTMPEncryptData(
3982 IN PRTMP_ADAPTER pAd,
3987 BOOLEAN RTMPDecryptData(
3988 IN PRTMP_ADAPTER pAdapter,
3993 BOOLEAN RTMPSoftDecryptWEP(
3994 IN PRTMP_ADAPTER pAd,
3996 IN ULONG DataByteCnt,
3997 IN PCIPHER_KEY pGroupKey);
4000 IN PRTMP_ADAPTER pAd,
4004 IN PARCFOURCONTEXT Ctx,
4009 IN PARCFOURCONTEXT Ctx);
4011 VOID ARCFOUR_DECRYPT(
4012 IN PARCFOURCONTEXT Ctx,
4017 VOID ARCFOUR_ENCRYPT(
4018 IN PARCFOURCONTEXT Ctx,
4023 VOID WPAARCFOUR_ENCRYPT(
4024 IN PARCFOURCONTEXT Ctx,
4029 UINT RTMP_CALC_FCS32(
4038 // Asic/RF/BBP related functions
4040 VOID AsicAdjustTxPower(
4041 IN PRTMP_ADAPTER pAd);
4043 VOID AsicUpdateProtect(
4044 IN PRTMP_ADAPTER pAd,
4045 IN USHORT OperaionMode,
4047 IN BOOLEAN bDisableBGProtect,
4048 IN BOOLEAN bNonGFExist);
4050 VOID AsicSwitchChannel(
4051 IN PRTMP_ADAPTER pAd,
4055 VOID AsicLockChannel(
4056 IN PRTMP_ADAPTER pAd,
4059 VOID AsicAntennaSelect(
4060 IN PRTMP_ADAPTER pAd,
4063 VOID AsicAntennaSetting(
4064 IN PRTMP_ADAPTER pAd,
4065 IN ABGBAND_STATE BandState);
4067 VOID AsicRfTuningExec(
4068 IN PVOID SystemSpecific1,
4069 IN PVOID FunctionContext,
4070 IN PVOID SystemSpecific2,
4071 IN PVOID SystemSpecific3);
4073 #ifdef CONFIG_STA_SUPPORT
4074 VOID AsicSleepThenAutoWakeup(
4075 IN PRTMP_ADAPTER pAd,
4076 IN USHORT TbttNumToNextWakeUp);
4078 VOID AsicForceSleep(
4079 IN PRTMP_ADAPTER pAd);
4081 VOID AsicForceWakeup(
4082 IN PRTMP_ADAPTER pAd,
4084 #endif // CONFIG_STA_SUPPORT //
4087 IN PRTMP_ADAPTER pAd,
4090 VOID AsicSetMcastWC(
4091 IN PRTMP_ADAPTER pAd);
4093 VOID AsicDelWcidTab(
4094 IN PRTMP_ADAPTER pAd,
4098 IN PRTMP_ADAPTER pAd);
4100 VOID AsicDisableRDG(
4101 IN PRTMP_ADAPTER pAd);
4103 VOID AsicDisableSync(
4104 IN PRTMP_ADAPTER pAd);
4106 VOID AsicEnableBssSync(
4107 IN PRTMP_ADAPTER pAd);
4109 VOID AsicEnableIbssSync(
4110 IN PRTMP_ADAPTER pAd);
4112 VOID AsicSetEdcaParm(
4113 IN PRTMP_ADAPTER pAd,
4114 IN PEDCA_PARM pEdcaParm);
4116 VOID AsicSetSlotTime(
4117 IN PRTMP_ADAPTER pAd,
4118 IN BOOLEAN bUseShortSlotTime);
4120 VOID AsicAddSharedKeyEntry(
4121 IN PRTMP_ADAPTER pAd,
4129 VOID AsicRemoveSharedKeyEntry(
4130 IN PRTMP_ADAPTER pAd,
4134 VOID AsicUpdateWCIDAttribute(
4135 IN PRTMP_ADAPTER pAd,
4139 IN BOOLEAN bUsePairewiseKeyTable);
4141 VOID AsicUpdateWCIDIVEIV(
4142 IN PRTMP_ADAPTER pAd,
4147 VOID AsicUpdateRxWCIDTable(
4148 IN PRTMP_ADAPTER pAd,
4152 VOID AsicAddKeyEntry(
4153 IN PRTMP_ADAPTER pAd,
4157 IN PCIPHER_KEY pCipherKey,
4158 IN BOOLEAN bUsePairewiseKeyTable,
4161 VOID AsicAddPairwiseKeyEntry(
4162 IN PRTMP_ADAPTER pAd,
4165 IN CIPHER_KEY *pCipherKey);
4167 VOID AsicRemovePairwiseKeyEntry(
4168 IN PRTMP_ADAPTER pAd,
4172 BOOLEAN AsicSendCommandToMcu(
4173 IN PRTMP_ADAPTER pAd,
4179 BOOLEAN AsicCheckCommanOk(
4180 IN PRTMP_ADAPTER pAd,
4183 VOID MacAddrRandomBssid(
4184 IN PRTMP_ADAPTER pAd,
4187 VOID MgtMacHeaderInit(
4188 IN PRTMP_ADAPTER pAd,
4189 IN OUT PHEADER_802_11 pHdr80211,
4196 IN PRTMP_ADAPTER pAd);
4199 IN PRTMP_ADAPTER pAd);
4205 #ifdef DOT11_N_SUPPORT
4207 IN PRTMP_ADAPTER pAd,
4209 #endif // DOT11_N_SUPPORT //
4211 ULONG BssTableSearch(
4216 ULONG BssSsidTableSearch(
4223 ULONG BssTableSearchWithSSID(
4230 VOID BssTableDeleteEntry(
4231 IN OUT PBSS_TABLE pTab,
4235 #ifdef DOT11_N_SUPPORT
4236 VOID BATableDeleteORIEntry(
4237 IN OUT PRTMP_ADAPTER pAd,
4238 IN BA_ORI_ENTRY *pBAORIEntry);
4240 VOID BATableDeleteRECEntry(
4241 IN OUT PRTMP_ADAPTER pAd,
4242 IN BA_REC_ENTRY *pBARECEntry);
4244 VOID BATableTearORIEntry(
4245 IN OUT PRTMP_ADAPTER pAd,
4248 IN BOOLEAN bForceDelete,
4251 VOID BATableTearRECEntry(
4252 IN OUT PRTMP_ADAPTER pAd,
4256 #endif // DOT11_N_SUPPORT //
4259 IN PRTMP_ADAPTER pAd,
4260 OUT PBSS_ENTRY pBss,
4265 IN USHORT BeaconPeriod,
4268 IN USHORT CapabilityInfo,
4270 IN UCHAR SupRateLen,
4272 IN UCHAR ExtRateLen,
4273 IN HT_CAPABILITY_IE *pHtCapability,
4274 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4275 IN UCHAR HtCapabilityLen,
4276 IN UCHAR AddHtInfoLen,
4277 IN UCHAR NewExtChanOffset,
4280 IN LARGE_INTEGER TimeStamp,
4282 IN PEDCA_PARM pEdcaParm,
4283 IN PQOS_CAPABILITY_PARM pQosCapability,
4284 IN PQBSS_LOAD_PARM pQbssLoad,
4285 IN USHORT LengthVIE,
4286 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4288 ULONG BssTableSetEntry(
4289 IN PRTMP_ADAPTER pAd,
4290 OUT PBSS_TABLE pTab,
4295 IN USHORT BeaconPeriod,
4298 IN USHORT CapabilityInfo,
4300 IN UCHAR SupRateLen,
4302 IN UCHAR ExtRateLen,
4303 IN HT_CAPABILITY_IE *pHtCapability,
4304 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4305 IN UCHAR HtCapabilityLen,
4306 IN UCHAR AddHtInfoLen,
4307 IN UCHAR NewExtChanOffset,
4310 IN LARGE_INTEGER TimeStamp,
4312 IN PEDCA_PARM pEdcaParm,
4313 IN PQOS_CAPABILITY_PARM pQosCapability,
4314 IN PQBSS_LOAD_PARM pQbssLoad,
4315 IN USHORT LengthVIE,
4316 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4318 #ifdef DOT11_N_SUPPORT
4319 VOID BATableInsertEntry(
4320 IN PRTMP_ADAPTER pAd,
4322 IN USHORT TimeOutValue,
4323 IN USHORT StartingSeq,
4326 IN UCHAR OriginatorStatus,
4327 IN BOOLEAN IsRecipient);
4329 #ifdef DOT11N_DRAFT3
4330 VOID Bss2040CoexistTimeOut(
4331 IN PVOID SystemSpecific1,
4332 IN PVOID FunctionContext,
4333 IN PVOID SystemSpecific2,
4334 IN PVOID SystemSpecific3);
4338 IN PRTMP_ADAPTER pAd);
4340 ULONG TriEventTableSetEntry(
4341 IN PRTMP_ADAPTER pAd,
4342 OUT TRIGGER_EVENT_TAB *Tab,
4344 IN HT_CAPABILITY_IE *pHtCapability,
4345 IN UCHAR HtCapabilityLen,
4347 IN UCHAR ChannelNo);
4349 VOID TriEventCounterMaintenance(
4350 IN PRTMP_ADAPTER pAd);
4351 #endif // DOT11N_DRAFT3 //
4352 #endif // DOT11_N_SUPPORT //
4354 VOID BssTableSsidSort(
4355 IN PRTMP_ADAPTER pAd,
4356 OUT BSS_TABLE *OutTab,
4360 VOID BssTableSortByRssi(
4361 IN OUT BSS_TABLE *OutTab);
4363 VOID BssCipherParse(
4364 IN OUT PBSS_ENTRY pBss);
4366 NDIS_STATUS MlmeQueueInit(
4367 IN MLME_QUEUE *Queue);
4369 VOID MlmeQueueDestroy(
4370 IN MLME_QUEUE *Queue);
4372 BOOLEAN MlmeEnqueue(
4373 IN PRTMP_ADAPTER pAd,
4379 BOOLEAN MlmeEnqueueForRecv(
4380 IN PRTMP_ADAPTER pAd,
4382 IN ULONG TimeStampHigh,
4383 IN ULONG TimeStampLow,
4392 BOOLEAN MlmeDequeue(
4393 IN MLME_QUEUE *Queue,
4394 OUT MLME_QUEUE_ELEM **Elem);
4396 VOID MlmeRestartStateMachine(
4397 IN PRTMP_ADAPTER pAd);
4399 BOOLEAN MlmeQueueEmpty(
4400 IN MLME_QUEUE *Queue);
4402 BOOLEAN MlmeQueueFull(
4403 IN MLME_QUEUE *Queue);
4405 BOOLEAN MsgTypeSubst(
4406 IN PRTMP_ADAPTER pAd,
4407 IN PFRAME_802_11 pFrame,
4411 VOID StateMachineInit(
4412 IN STATE_MACHINE *Sm,
4413 IN STATE_MACHINE_FUNC Trans[],
4416 IN STATE_MACHINE_FUNC DefFunc,
4420 VOID StateMachineSetAction(
4421 IN STATE_MACHINE *S,
4424 IN STATE_MACHINE_FUNC F);
4426 VOID StateMachinePerformAction(
4427 IN PRTMP_ADAPTER pAd,
4428 IN STATE_MACHINE *S,
4429 IN MLME_QUEUE_ELEM *Elem);
4432 IN PRTMP_ADAPTER pAd,
4433 IN MLME_QUEUE_ELEM *Elem);
4435 VOID AssocStateMachineInit(
4436 IN PRTMP_ADAPTER pAd,
4437 IN STATE_MACHINE *Sm,
4438 OUT STATE_MACHINE_FUNC Trans[]);
4440 VOID ReassocTimeout(
4441 IN PVOID SystemSpecific1,
4442 IN PVOID FunctionContext,
4443 IN PVOID SystemSpecific2,
4444 IN PVOID SystemSpecific3);
4447 IN PVOID SystemSpecific1,
4448 IN PVOID FunctionContext,
4449 IN PVOID SystemSpecific2,
4450 IN PVOID SystemSpecific3);
4452 VOID DisassocTimeout(
4453 IN PVOID SystemSpecific1,
4454 IN PVOID FunctionContext,
4455 IN PVOID SystemSpecific2,
4456 IN PVOID SystemSpecific3);
4458 //----------------------------------------------
4459 VOID MlmeDisassocReqAction(
4460 IN PRTMP_ADAPTER pAd,
4461 IN MLME_QUEUE_ELEM *Elem);
4463 VOID MlmeAssocReqAction(
4464 IN PRTMP_ADAPTER pAd,
4465 IN MLME_QUEUE_ELEM *Elem);
4467 VOID MlmeReassocReqAction(
4468 IN PRTMP_ADAPTER pAd,
4469 IN MLME_QUEUE_ELEM *Elem);
4471 VOID MlmeDisassocReqAction(
4472 IN PRTMP_ADAPTER pAd,
4473 IN MLME_QUEUE_ELEM *Elem);
4475 VOID PeerAssocRspAction(
4476 IN PRTMP_ADAPTER pAd,
4477 IN MLME_QUEUE_ELEM *Elem);
4479 VOID PeerReassocRspAction(
4480 IN PRTMP_ADAPTER pAd,
4481 IN MLME_QUEUE_ELEM *Elem);
4483 VOID PeerDisassocAction(
4484 IN PRTMP_ADAPTER pAd,
4485 IN MLME_QUEUE_ELEM *Elem);
4487 VOID DisassocTimeoutAction(
4488 IN PRTMP_ADAPTER pAd,
4489 IN MLME_QUEUE_ELEM *Elem);
4491 VOID AssocTimeoutAction(
4492 IN PRTMP_ADAPTER pAd,
4493 IN MLME_QUEUE_ELEM *Elem);
4495 VOID ReassocTimeoutAction(
4496 IN PRTMP_ADAPTER pAd,
4497 IN MLME_QUEUE_ELEM *Elem);
4500 IN PRTMP_ADAPTER pAd,
4503 VOID SwitchBetweenWepAndCkip(
4504 IN PRTMP_ADAPTER pAd);
4506 VOID InvalidStateWhenAssoc(
4507 IN PRTMP_ADAPTER pAd,
4508 IN MLME_QUEUE_ELEM *Elem);
4510 VOID InvalidStateWhenReassoc(
4511 IN PRTMP_ADAPTER pAd,
4512 IN MLME_QUEUE_ELEM *Elem);
4514 VOID InvalidStateWhenDisassociate(
4515 IN PRTMP_ADAPTER pAd,
4516 IN MLME_QUEUE_ELEM *Elem);
4520 IN PRTMP_ADAPTER pAd);
4522 VOID ComposeNullFrame(
4523 IN PRTMP_ADAPTER pAd);
4526 IN PRTMP_ADAPTER pAd,
4528 IN USHORT CapabilityInfo,
4531 IN UCHAR SupRateLen,
4533 IN UCHAR ExtRateLen,
4534 IN PEDCA_PARM pEdcaParm,
4535 IN HT_CAPABILITY_IE *pHtCapability,
4536 IN UCHAR HtCapabilityLen,
4537 IN ADD_HT_INFO_IE *pAddHtInfo);
4539 VOID AuthStateMachineInit(
4540 IN PRTMP_ADAPTER pAd,
4541 IN PSTATE_MACHINE sm,
4542 OUT STATE_MACHINE_FUNC Trans[]);
4545 IN PVOID SystemSpecific1,
4546 IN PVOID FunctionContext,
4547 IN PVOID SystemSpecific2,
4548 IN PVOID SystemSpecific3);
4550 VOID MlmeAuthReqAction(
4551 IN PRTMP_ADAPTER pAd,
4552 IN MLME_QUEUE_ELEM *Elem);
4554 VOID PeerAuthRspAtSeq2Action(
4555 IN PRTMP_ADAPTER pAd,
4556 IN MLME_QUEUE_ELEM *Elem);
4558 VOID PeerAuthRspAtSeq4Action(
4559 IN PRTMP_ADAPTER pAd,
4560 IN MLME_QUEUE_ELEM *Elem);
4562 VOID AuthTimeoutAction(
4563 IN PRTMP_ADAPTER pAd,
4564 IN MLME_QUEUE_ELEM *Elem);
4567 IN PRTMP_ADAPTER pAd,
4570 VOID MlmeDeauthReqAction(
4571 IN PRTMP_ADAPTER pAd,
4572 IN MLME_QUEUE_ELEM *Elem);
4574 VOID InvalidStateWhenAuth(
4575 IN PRTMP_ADAPTER pAd,
4576 IN MLME_QUEUE_ELEM *Elem);
4578 //=============================================
4580 VOID AuthRspStateMachineInit(
4581 IN PRTMP_ADAPTER pAd,
4582 IN PSTATE_MACHINE Sm,
4583 IN STATE_MACHINE_FUNC Trans[]);
4585 VOID PeerDeauthAction(
4586 IN PRTMP_ADAPTER pAd,
4587 IN MLME_QUEUE_ELEM *Elem);
4589 VOID PeerAuthSimpleRspGenAndSend(
4590 IN PRTMP_ADAPTER pAd,
4591 IN PHEADER_802_11 pHdr80211,
4598 // Private routines in dls.c
4601 #ifdef CONFIG_STA_SUPPORT
4602 #ifdef QOS_DLS_SUPPORT
4603 void DlsStateMachineInit(
4604 IN PRTMP_ADAPTER pAd,
4605 IN STATE_MACHINE *Sm,
4606 OUT STATE_MACHINE_FUNC Trans[]);
4608 VOID MlmeDlsReqAction(
4609 IN PRTMP_ADAPTER pAd,
4610 IN MLME_QUEUE_ELEM *Elem);
4612 VOID PeerDlsReqAction(
4613 IN PRTMP_ADAPTER pAd,
4614 IN MLME_QUEUE_ELEM *Elem);
4616 VOID PeerDlsRspAction(
4617 IN PRTMP_ADAPTER pAd,
4618 IN MLME_QUEUE_ELEM *Elem);
4620 VOID MlmeDlsTearDownAction(
4621 IN PRTMP_ADAPTER pAd,
4622 IN MLME_QUEUE_ELEM *Elem);
4624 VOID PeerDlsTearDownAction(
4625 IN PRTMP_ADAPTER pAd,
4626 IN MLME_QUEUE_ELEM *Elem);
4628 VOID RTMPCheckDLSTimeOut(
4629 IN PRTMP_ADAPTER pAd);
4631 BOOLEAN RTMPRcvFrameDLSCheck(
4632 IN PRTMP_ADAPTER pAd,
4633 IN PHEADER_802_11 pHeader,
4635 IN PRT28XX_RXD_STRUC pRxD);
4637 INT RTMPCheckDLSFrame(
4638 IN PRTMP_ADAPTER pAd,
4641 VOID RTMPSendDLSTearDownFrame(
4642 IN PRTMP_ADAPTER pAd,
4645 NDIS_STATUS RTMPSendSTAKeyRequest(
4646 IN PRTMP_ADAPTER pAd,
4649 NDIS_STATUS RTMPSendSTAKeyHandShake(
4650 IN PRTMP_ADAPTER pAd,
4653 VOID DlsTimeoutAction(
4654 IN PVOID SystemSpecific1,
4655 IN PVOID FunctionContext,
4656 IN PVOID SystemSpecific2,
4657 IN PVOID SystemSpecific3);
4659 BOOLEAN MlmeDlsReqSanity(
4660 IN PRTMP_ADAPTER pAd,
4663 OUT PRT_802_11_DLS *pDLS,
4664 OUT PUSHORT pReason);
4666 INT Set_DlsEntryInfo_Display_Proc(
4667 IN PRTMP_ADAPTER pAd,
4670 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4671 IN PRTMP_ADAPTER pAd,
4673 IN UINT DlsEntryIdx);
4675 BOOLEAN MacTableDeleteDlsEntry(
4676 IN PRTMP_ADAPTER pAd,
4680 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4681 IN PRTMP_ADAPTER pAd,
4683 IN BOOLEAN bResetIdelCount);
4685 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4686 IN PRTMP_ADAPTER pAd,
4689 IN BOOLEAN bResetIdelCount);
4691 INT Set_DlsAddEntry_Proc(
4692 IN PRTMP_ADAPTER pAd,
4695 INT Set_DlsTearDownEntry_Proc(
4696 IN PRTMP_ADAPTER pAd,
4698 #endif // QOS_DLS_SUPPORT //
4699 #endif // CONFIG_STA_SUPPORT //
4701 #ifdef QOS_DLS_SUPPORT
4702 BOOLEAN PeerDlsReqSanity(
4703 IN PRTMP_ADAPTER pAd,
4708 OUT USHORT *pCapabilityInfo,
4709 OUT USHORT *pDlsTimeout,
4710 OUT UCHAR *pRatesLen,
4712 OUT UCHAR *pHtCapabilityLen,
4713 OUT HT_CAPABILITY_IE *pHtCapability);
4715 BOOLEAN PeerDlsRspSanity(
4716 IN PRTMP_ADAPTER pAd,
4721 OUT USHORT *pCapabilityInfo,
4722 OUT USHORT *pStatus,
4723 OUT UCHAR *pRatesLen,
4725 OUT UCHAR *pHtCapabilityLen,
4726 OUT HT_CAPABILITY_IE *pHtCapability);
4728 BOOLEAN PeerDlsTearDownSanity(
4729 IN PRTMP_ADAPTER pAd,
4734 OUT USHORT *pReason);
4735 #endif // QOS_DLS_SUPPORT //
4737 //========================================
4739 VOID SyncStateMachineInit(
4740 IN PRTMP_ADAPTER pAd,
4741 IN STATE_MACHINE *Sm,
4742 OUT STATE_MACHINE_FUNC Trans[]);
4745 IN PVOID SystemSpecific1,
4746 IN PVOID FunctionContext,
4747 IN PVOID SystemSpecific2,
4748 IN PVOID SystemSpecific3);
4751 IN PVOID SystemSpecific1,
4752 IN PVOID FunctionContext,
4753 IN PVOID SystemSpecific2,
4754 IN PVOID SystemSpecific3);
4756 VOID MlmeScanReqAction(
4757 IN PRTMP_ADAPTER pAd,
4758 IN MLME_QUEUE_ELEM *Elem);
4760 VOID InvalidStateWhenScan(
4761 IN PRTMP_ADAPTER pAd,
4762 IN MLME_QUEUE_ELEM *Elem);
4764 VOID InvalidStateWhenJoin(
4765 IN PRTMP_ADAPTER pAd,
4766 IN MLME_QUEUE_ELEM *Elem);
4768 VOID InvalidStateWhenStart(
4769 IN PRTMP_ADAPTER pAd,
4770 IN MLME_QUEUE_ELEM *Elem);
4773 IN PRTMP_ADAPTER pAd,
4774 IN MLME_QUEUE_ELEM *Elem);
4776 VOID EnqueueProbeRequest(
4777 IN PRTMP_ADAPTER pAd);
4779 BOOLEAN ScanRunning(
4780 IN PRTMP_ADAPTER pAd);
4781 //=========================================
4784 IN PRTMP_ADAPTER pAd,
4785 IN STATE_MACHINE *S,
4786 OUT STATE_MACHINE_FUNC Trans[]);
4788 VOID MlmeCntlMachinePerformAction(
4789 IN PRTMP_ADAPTER pAd,
4790 IN STATE_MACHINE *S,
4791 IN MLME_QUEUE_ELEM *Elem);
4794 IN PRTMP_ADAPTER pAd,
4795 IN MLME_QUEUE_ELEM *Elem);
4797 VOID CntlOidScanProc(
4798 IN PRTMP_ADAPTER pAd,
4799 IN MLME_QUEUE_ELEM *Elem);
4801 VOID CntlOidSsidProc(
4802 IN PRTMP_ADAPTER pAd,
4803 IN MLME_QUEUE_ELEM * Elem);
4805 VOID CntlOidRTBssidProc(
4806 IN PRTMP_ADAPTER pAd,
4807 IN MLME_QUEUE_ELEM * Elem);
4809 VOID CntlMlmeRoamingProc(
4810 IN PRTMP_ADAPTER pAd,
4811 IN MLME_QUEUE_ELEM * Elem);
4813 VOID CntlWaitDisassocProc(
4814 IN PRTMP_ADAPTER pAd,
4815 IN MLME_QUEUE_ELEM *Elem);
4817 VOID CntlWaitJoinProc(
4818 IN PRTMP_ADAPTER pAd,
4819 IN MLME_QUEUE_ELEM *Elem);
4821 VOID CntlWaitReassocProc(
4822 IN PRTMP_ADAPTER pAd,
4823 IN MLME_QUEUE_ELEM *Elem);
4825 VOID CntlWaitStartProc(
4826 IN PRTMP_ADAPTER pAd,
4827 IN MLME_QUEUE_ELEM *Elem);
4829 VOID CntlWaitAuthProc(
4830 IN PRTMP_ADAPTER pAd,
4831 IN MLME_QUEUE_ELEM *Elem);
4833 VOID CntlWaitAuthProc2(
4834 IN PRTMP_ADAPTER pAd,
4835 IN MLME_QUEUE_ELEM *Elem);
4837 VOID CntlWaitAssocProc(
4838 IN PRTMP_ADAPTER pAd,
4839 IN MLME_QUEUE_ELEM *Elem);
4841 #ifdef QOS_DLS_SUPPORT
4842 VOID CntlOidDLSSetupProc(
4843 IN PRTMP_ADAPTER pAd,
4844 IN MLME_QUEUE_ELEM *Elem);
4845 #endif // QOS_DLS_SUPPORT //
4848 IN PRTMP_ADAPTER pAd,
4852 IN PRTMP_ADAPTER pAd,
4853 IN BOOLEAN IsReqFromAP);
4855 VOID IterateOnBssTab(
4856 IN PRTMP_ADAPTER pAd);
4858 VOID IterateOnBssTab2(
4859 IN PRTMP_ADAPTER pAd);;
4862 IN PRTMP_ADAPTER pAd,
4863 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4867 IN PRTMP_ADAPTER pAd,
4868 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4870 IN USHORT CapabilityInfo,
4872 IN USHORT ListenIntv);
4875 IN PRTMP_ADAPTER pAd,
4876 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4882 VOID DisassocParmFill(
4883 IN PRTMP_ADAPTER pAd,
4884 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4889 IN PRTMP_ADAPTER pAd,
4890 IN OUT MLME_START_REQ_STRUCT *StartReq,
4895 IN PRTMP_ADAPTER pAd,
4896 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4901 IN PRTMP_ADAPTER pAd);
4903 VOID EnqueueBeaconFrame(
4904 IN PRTMP_ADAPTER pAd);
4906 VOID MlmeJoinReqAction(
4907 IN PRTMP_ADAPTER pAd,
4908 IN MLME_QUEUE_ELEM *Elem);
4910 VOID MlmeScanReqAction(
4911 IN PRTMP_ADAPTER pAd,
4912 IN MLME_QUEUE_ELEM *Elem);
4914 VOID MlmeStartReqAction(
4915 IN PRTMP_ADAPTER pAd,
4916 IN MLME_QUEUE_ELEM *Elem);
4918 VOID ScanTimeoutAction(
4919 IN PRTMP_ADAPTER pAd,
4920 IN MLME_QUEUE_ELEM *Elem);
4922 VOID BeaconTimeoutAtJoinAction(
4923 IN PRTMP_ADAPTER pAd,
4924 IN MLME_QUEUE_ELEM *Elem);
4926 VOID PeerBeaconAtScanAction(
4927 IN PRTMP_ADAPTER pAd,
4928 IN MLME_QUEUE_ELEM *Elem);
4930 VOID PeerBeaconAtJoinAction(
4931 IN PRTMP_ADAPTER pAd,
4932 IN MLME_QUEUE_ELEM *Elem);
4935 IN PRTMP_ADAPTER pAd,
4936 IN MLME_QUEUE_ELEM *Elem);
4938 VOID PeerProbeReqAction(
4939 IN PRTMP_ADAPTER pAd,
4940 IN MLME_QUEUE_ELEM *Elem);
4942 VOID ScanNextChannel(
4943 IN PRTMP_ADAPTER pAd);
4945 ULONG MakeIbssBeacon(
4946 IN PRTMP_ADAPTER pAd);
4948 VOID CCXAdjacentAPReport(
4949 IN PRTMP_ADAPTER pAd);
4951 BOOLEAN MlmeScanReqSanity(
4952 IN PRTMP_ADAPTER pAd,
4958 OUT UCHAR *ScanType);
4960 BOOLEAN PeerBeaconAndProbeRspSanity(
4961 IN PRTMP_ADAPTER pAd,
4964 IN UCHAR MsgChannel,
4968 OUT UCHAR *pSsidLen,
4969 OUT UCHAR *pBssType,
4970 OUT USHORT *pBeaconPeriod,
4971 OUT UCHAR *pChannel,
4972 OUT UCHAR *pNewChannel,
4973 OUT LARGE_INTEGER *pTimestamp,
4974 OUT CF_PARM *pCfParm,
4975 OUT USHORT *pAtimWin,
4976 OUT USHORT *pCapabilityInfo,
4978 OUT UCHAR *pDtimCount,
4979 OUT UCHAR *pDtimPeriod,
4980 OUT UCHAR *pBcastFlag,
4981 OUT UCHAR *pMessageToMe,
4982 OUT UCHAR SupRate[],
4983 OUT UCHAR *pSupRateLen,
4984 OUT UCHAR ExtRate[],
4985 OUT UCHAR *pExtRateLen,
4986 OUT UCHAR *pCkipFlag,
4987 OUT UCHAR *pAironetCellPowerLimit,
4988 OUT PEDCA_PARM pEdcaParm,
4989 OUT PQBSS_LOAD_PARM pQbssLoad,
4990 OUT PQOS_CAPABILITY_PARM pQosCapability,
4991 OUT ULONG *pRalinkIe,
4992 OUT UCHAR *pHtCapabilityLen,
4993 #ifdef CONFIG_STA_SUPPORT
4994 OUT UCHAR *pPreNHtCapabilityLen,
4995 #endif // CONFIG_STA_SUPPORT //
4996 OUT HT_CAPABILITY_IE *pHtCapability,
4997 OUT UCHAR *AddHtInfoLen,
4998 OUT ADD_HT_INFO_IE *AddHtInfo,
4999 OUT UCHAR *NewExtChannel,
5000 OUT USHORT *LengthVIE,
5001 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5003 BOOLEAN PeerAddBAReqActionSanity(
5004 IN PRTMP_ADAPTER pAd,
5009 BOOLEAN PeerAddBARspActionSanity(
5010 IN PRTMP_ADAPTER pAd,
5014 BOOLEAN PeerDelBAActionSanity(
5015 IN PRTMP_ADAPTER pAd,
5020 BOOLEAN MlmeAssocReqSanity(
5021 IN PRTMP_ADAPTER pAd,
5025 OUT USHORT *CapabilityInfo,
5027 OUT USHORT *ListenIntv);
5029 BOOLEAN MlmeAuthReqSanity(
5030 IN PRTMP_ADAPTER pAd,
5037 BOOLEAN MlmeStartReqSanity(
5038 IN PRTMP_ADAPTER pAd,
5042 OUT UCHAR *Ssidlen);
5044 BOOLEAN PeerAuthSanity(
5045 IN PRTMP_ADAPTER pAd,
5052 OUT CHAR ChlgText[]);
5054 BOOLEAN PeerAssocRspSanity(
5055 IN PRTMP_ADAPTER pAd,
5059 OUT USHORT *pCapabilityInfo,
5060 OUT USHORT *pStatus,
5062 OUT UCHAR SupRate[],
5063 OUT UCHAR *pSupRateLen,
5064 OUT UCHAR ExtRate[],
5065 OUT UCHAR *pExtRateLen,
5066 OUT HT_CAPABILITY_IE *pHtCapability,
5067 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5068 OUT UCHAR *pHtCapabilityLen,
5069 OUT UCHAR *pAddHtInfoLen,
5070 OUT UCHAR *pNewExtChannelOffset,
5071 OUT PEDCA_PARM pEdcaParm,
5072 OUT UCHAR *pCkipFlag);
5074 BOOLEAN PeerDisassocSanity(
5075 IN PRTMP_ADAPTER pAd,
5079 OUT USHORT *Reason);
5081 BOOLEAN PeerWpaMessageSanity(
5082 IN PRTMP_ADAPTER pAd,
5083 IN PEAPOL_PACKET pMsg,
5086 IN MAC_TABLE_ENTRY *pEntry);
5088 BOOLEAN PeerDeauthSanity(
5089 IN PRTMP_ADAPTER pAd,
5093 OUT USHORT *Reason);
5095 BOOLEAN PeerProbeReqSanity(
5096 IN PRTMP_ADAPTER pAd,
5101 OUT UCHAR *pSsidLen);
5107 OUT UCHAR *BcastFlag,
5108 OUT UCHAR *DtimCount,
5109 OUT UCHAR *DtimPeriod,
5110 OUT UCHAR *MessageToMe);
5112 UCHAR ChannelSanity(
5113 IN PRTMP_ADAPTER pAd,
5116 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5117 IN PBSS_ENTRY pBss);
5119 BOOLEAN MlmeDelBAReqSanity(
5120 IN PRTMP_ADAPTER pAd,
5124 BOOLEAN MlmeAddBAReqSanity(
5125 IN PRTMP_ADAPTER pAd,
5130 ULONG MakeOutgoingFrame(
5132 OUT ULONG *Length, ...);
5135 IN PRTMP_ADAPTER pAd,
5139 IN PRTMP_ADAPTER pAd);
5141 VOID AsicUpdateAutoFallBackTable(
5142 IN PRTMP_ADAPTER pAd,
5145 VOID MlmePeriodicExec(
5146 IN PVOID SystemSpecific1,
5147 IN PVOID FunctionContext,
5148 IN PVOID SystemSpecific2,
5149 IN PVOID SystemSpecific3);
5152 IN PVOID SystemSpecific1,
5153 IN PVOID FunctionContext,
5154 IN PVOID SystemSpecific2,
5155 IN PVOID SystemSpecific3);
5158 IN PVOID SystemSpecific1,
5159 IN PVOID FunctionContext,
5160 IN PVOID SystemSpecific2,
5161 IN PVOID SystemSpecific3);
5163 VOID STAMlmePeriodicExec(
5167 IN PRTMP_ADAPTER pAd);
5169 VOID MlmeAutoReconnectLastSSID(
5170 IN PRTMP_ADAPTER pAd);
5172 BOOLEAN MlmeValidateSSID(
5176 VOID MlmeCheckForRoaming(
5177 IN PRTMP_ADAPTER pAd,
5180 VOID MlmeCheckForFastRoaming(
5181 IN PRTMP_ADAPTER pAd,
5184 VOID MlmeDynamicTxRateSwitching(
5185 IN PRTMP_ADAPTER pAd);
5188 IN PRTMP_ADAPTER pAd,
5189 IN PMAC_TABLE_ENTRY pEntry,
5190 IN PRTMP_TX_RATE_SWITCH pTxRate);
5192 VOID MlmeSelectTxRateTable(
5193 IN PRTMP_ADAPTER pAd,
5194 IN PMAC_TABLE_ENTRY pEntry,
5196 IN PUCHAR pTableSize,
5197 IN PUCHAR pInitTxRateIdx);
5199 VOID MlmeCalculateChannelQuality(
5200 IN PRTMP_ADAPTER pAd,
5203 VOID MlmeCheckPsmChange(
5204 IN PRTMP_ADAPTER pAd,
5208 IN PRTMP_ADAPTER pAd,
5211 VOID MlmeSetTxPreamble(
5212 IN PRTMP_ADAPTER pAd,
5213 IN USHORT TxPreamble);
5215 VOID UpdateBasicRateBitmap(
5216 IN PRTMP_ADAPTER pAd);
5218 VOID MlmeUpdateTxRates(
5219 IN PRTMP_ADAPTER pAd,
5223 #ifdef DOT11_N_SUPPORT
5224 VOID MlmeUpdateHtTxRates(
5225 IN PRTMP_ADAPTER pAd,
5227 #endif // DOT11_N_SUPPORT //
5229 VOID RTMPCheckRates(
5230 IN PRTMP_ADAPTER pAd,
5231 IN OUT UCHAR SupRate[],
5232 IN OUT UCHAR *SupRateLen);
5234 #ifdef CONFIG_STA_SUPPORT
5235 BOOLEAN RTMPCheckChannel(
5236 IN PRTMP_ADAPTER pAd,
5237 IN UCHAR CentralChannel,
5239 #endif // CONFIG_STA_SUPPORT //
5241 BOOLEAN RTMPCheckHt(
5242 IN PRTMP_ADAPTER pAd,
5244 IN OUT HT_CAPABILITY_IE *pHtCapability,
5245 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5247 VOID StaQuickResponeForRateUpExec(
5248 IN PVOID SystemSpecific1,
5249 IN PVOID FunctionContext,
5250 IN PVOID SystemSpecific2,
5251 IN PVOID SystemSpecific3);
5253 VOID AsicBbpTuning1(
5254 IN PRTMP_ADAPTER pAd);
5256 VOID AsicBbpTuning2(
5257 IN PRTMP_ADAPTER pAd);
5259 VOID RTMPUpdateMlmeRate(
5260 IN PRTMP_ADAPTER pAd);
5263 IN PRTMP_ADAPTER pAd,
5268 VOID AsicEvaluateRxAnt(
5269 IN PRTMP_ADAPTER pAd);
5271 VOID AsicRxAntEvalTimeout(
5272 IN PVOID SystemSpecific1,
5273 IN PVOID FunctionContext,
5274 IN PVOID SystemSpecific2,
5275 IN PVOID SystemSpecific3);
5277 VOID APSDPeriodicExec(
5278 IN PVOID SystemSpecific1,
5279 IN PVOID FunctionContext,
5280 IN PVOID SystemSpecific2,
5281 IN PVOID SystemSpecific3);
5283 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5284 IN PRTMP_ADAPTER pAd,
5285 IN PMAC_TABLE_ENTRY pEntry);
5287 UCHAR RTMPStaFixedTxMode(
5288 IN PRTMP_ADAPTER pAd,
5289 IN PMAC_TABLE_ENTRY pEntry);
5291 VOID RTMPUpdateLegacyTxSetting(
5292 UCHAR fixed_tx_mode,
5293 PMAC_TABLE_ENTRY pEntry);
5295 BOOLEAN RTMPAutoRateSwitchCheck(
5296 IN PRTMP_ADAPTER pAd);
5298 NDIS_STATUS MlmeInit(
5299 IN PRTMP_ADAPTER pAd);
5302 IN PRTMP_ADAPTER pAd);
5305 IN PRTMP_ADAPTER pAd);
5307 VOID MlmeResetRalinkCounters(
5308 IN PRTMP_ADAPTER pAd);
5310 VOID BuildChannelList(
5311 IN PRTMP_ADAPTER pAd);
5314 IN PRTMP_ADAPTER pAd);
5317 IN PRTMP_ADAPTER pAd,
5320 VOID ChangeToCellPowerLimit(
5321 IN PRTMP_ADAPTER pAd,
5322 IN UCHAR AironetCellPowerLimit);
5325 IN PRTMP_ADAPTER pAd,
5329 IN PRTMP_ADAPTER pAd,
5333 IN PRTMP_ADAPTER pAd);
5336 IN PRTMP_ADAPTER pAd,
5341 IN PRTMP_ADAPTER pAd);
5344 IN PRTMP_ADAPTER pAd);
5347 IN PRTMP_ADAPTER pAd);
5349 USHORT RTMP_EEPROM_READ16(
5350 IN PRTMP_ADAPTER pAd,
5353 VOID RTMP_EEPROM_WRITE16(
5354 IN PRTMP_ADAPTER pAd,
5359 // Prototypes of function definition in rtmp_tkip.c
5361 VOID RTMPInitTkipEngine(
5362 IN PRTMP_ADAPTER pAd,
5371 VOID RTMPInitMICEngine(
5372 IN PRTMP_ADAPTER pAd,
5376 IN UCHAR UserPriority,
5379 BOOLEAN RTMPTkipCompareMICValue(
5380 IN PRTMP_ADAPTER pAd,
5385 IN UCHAR UserPriority,
5388 VOID RTMPCalculateMICValue(
5389 IN PRTMP_ADAPTER pAd,
5390 IN PNDIS_PACKET pPacket,
5392 IN PCIPHER_KEY pKey,
5395 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5396 IN PRTMP_ADAPTER pAd,
5404 VOID RTMPTkipAppendByte(
5405 IN PTKIP_KEY_INFO pTkip,
5408 VOID RTMPTkipAppend(
5409 IN PTKIP_KEY_INFO pTkip,
5413 VOID RTMPTkipGetMIC(
5414 IN PTKIP_KEY_INFO pTkip);
5416 BOOLEAN RTMPSoftDecryptTKIP(
5417 IN PRTMP_ADAPTER pAd,
5419 IN ULONG DataByteCnt,
5420 IN UCHAR UserPriority,
5421 IN PCIPHER_KEY pWpaKey);
5423 BOOLEAN RTMPSoftDecryptAES(
5424 IN PRTMP_ADAPTER pAd,
5426 IN ULONG DataByteCnt,
5427 IN PCIPHER_KEY pWpaKey);
5430 // Prototypes of function definition in cmm_info.c
5432 NDIS_STATUS RTMPWPARemoveKeyProc(
5433 IN PRTMP_ADAPTER pAd,
5436 VOID RTMPWPARemoveAllKeys(
5437 IN PRTMP_ADAPTER pAd);
5439 BOOLEAN RTMPCheckStrPrintAble(
5443 VOID RTMPSetPhyMode(
5444 IN PRTMP_ADAPTER pAd,
5447 VOID RTMPUpdateHTIE(
5448 IN RT_HT_CAPABILITY *pRtHt,
5450 OUT HT_CAPABILITY_IE *pHtCapability,
5451 OUT ADD_HT_INFO_IE *pAddHtInfo);
5453 VOID RTMPAddWcidAttributeEntry(
5454 IN PRTMP_ADAPTER pAd,
5458 IN MAC_TABLE_ENTRY *pEntry);
5460 CHAR *GetEncryptType(
5466 VOID RTMPIoctlGetSiteSurvey(
5467 IN PRTMP_ADAPTER pAdapter,
5468 IN struct iwreq *wrq);
5470 VOID RTMPIoctlGetMacTable(
5471 IN PRTMP_ADAPTER pAd,
5472 IN struct iwreq *wrq);
5474 VOID RTMPIndicateWPA2Status(
5475 IN PRTMP_ADAPTER pAdapter);
5477 VOID RTMPOPModeSwitching(
5478 IN PRTMP_ADAPTER pAd);
5480 #ifdef CONFIG_STA_SUPPORT
5481 VOID RTMPAddBSSIDCipher(
5482 IN PRTMP_ADAPTER pAd,
5484 IN PNDIS_802_11_KEY pKey,
5485 IN UCHAR CipherAlg);
5486 #endif // CONFIG_STA_SUPPORT //
5488 #ifdef DOT11_N_SUPPORT
5490 IN PRTMP_ADAPTER pAd,
5491 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5493 VOID RTMPSetIndividualHT(
5494 IN PRTMP_ADAPTER pAd,
5496 #endif // DOT11_N_SUPPORT //
5498 VOID RTMPSendWirelessEvent(
5499 IN PRTMP_ADAPTER pAd,
5500 IN USHORT Event_flag,
5505 VOID NICUpdateCntlCounters(
5506 IN PRTMP_ADAPTER pAd,
5507 IN PHEADER_802_11 pHeader,
5509 IN PRXWI_STRUC pRxWI);
5511 // prototype in wpa.c
5513 BOOLEAN WpaMsgTypeSubst(
5517 VOID WpaPskStateMachineInit(
5518 IN PRTMP_ADAPTER pAd,
5519 IN STATE_MACHINE *S,
5520 OUT STATE_MACHINE_FUNC Trans[]);
5522 VOID WpaEAPOLKeyAction(
5523 IN PRTMP_ADAPTER pAd,
5524 IN MLME_QUEUE_ELEM *Elem);
5526 VOID WpaPairMsg1Action(
5527 IN PRTMP_ADAPTER pAd,
5528 IN MLME_QUEUE_ELEM *Elem);
5530 VOID WpaPairMsg3Action(
5531 IN PRTMP_ADAPTER pAd,
5532 IN MLME_QUEUE_ELEM *Elem);
5534 VOID WpaGroupMsg1Action(
5535 IN PRTMP_ADAPTER pAd,
5536 IN MLME_QUEUE_ELEM *Elem);
5538 VOID WpaMacHeaderInit(
5539 IN PRTMP_ADAPTER pAd,
5540 IN OUT PHEADER_802_11 pHdr80211,
5544 VOID Wpa2PairMsg1Action(
5545 IN PRTMP_ADAPTER pAd,
5546 IN MLME_QUEUE_ELEM *Elem);
5548 VOID Wpa2PairMsg3Action(
5549 IN PRTMP_ADAPTER pAd,
5550 IN MLME_QUEUE_ELEM *Elem);
5552 BOOLEAN ParseKeyData(
5553 IN PRTMP_ADAPTER pAd,
5555 IN UCHAR KeyDataLen,
5556 IN UCHAR bPairewise);
5558 VOID RTMPToWirelessSta(
5559 IN PRTMP_ADAPTER pAd,
5560 IN PUCHAR pHeader802_3,
5564 IN BOOLEAN is4wayFrame);
5592 IN PRTMP_ADAPTER pAd,
5602 IN PRTMP_ADAPTER pAd,
5607 // prototype in aironet.c
5609 VOID AironetStateMachineInit(
5610 IN PRTMP_ADAPTER pAd,
5611 IN STATE_MACHINE *S,
5612 OUT STATE_MACHINE_FUNC Trans[]);
5614 VOID AironetMsgAction(
5615 IN PRTMP_ADAPTER pAd,
5616 IN MLME_QUEUE_ELEM *Elem);
5618 VOID AironetRequestAction(
5619 IN PRTMP_ADAPTER pAd,
5620 IN MLME_QUEUE_ELEM *Elem);
5622 VOID ChannelLoadRequestAction(
5623 IN PRTMP_ADAPTER pAd,
5626 VOID NoiseHistRequestAction(
5627 IN PRTMP_ADAPTER pAd,
5630 VOID BeaconRequestAction(
5631 IN PRTMP_ADAPTER pAd,
5634 VOID AironetReportAction(
5635 IN PRTMP_ADAPTER pAd,
5636 IN MLME_QUEUE_ELEM *Elem);
5638 VOID ChannelLoadReportAction(
5639 IN PRTMP_ADAPTER pAd,
5642 VOID NoiseHistReportAction(
5643 IN PRTMP_ADAPTER pAd,
5646 VOID AironetFinalReportAction(
5647 IN PRTMP_ADAPTER pAd);
5649 VOID BeaconReportAction(
5650 IN PRTMP_ADAPTER pAd,
5653 VOID AironetAddBeaconReport(
5654 IN PRTMP_ADAPTER pAd,
5656 IN PMLME_QUEUE_ELEM pElem);
5658 VOID AironetCreateBeaconReportFromBssTable(
5659 IN PRTMP_ADAPTER pAd);
5661 VOID DBGPRINT_TX_RING(
5662 IN PRTMP_ADAPTER pAd,
5665 VOID DBGPRINT_RX_RING(
5666 IN PRTMP_ADAPTER pAd);
5669 IN PRTMP_ADAPTER pAd,
5671 IN UCHAR RssiNumber);
5674 #ifdef DOT11N_DRAFT3
5675 VOID BuildEffectedChannelList(
5676 IN PRTMP_ADAPTER pAd);
5677 #endif // DOT11N_DRAFT3 //
5680 VOID APAsicEvaluateRxAnt(
5681 IN PRTMP_ADAPTER pAd);
5684 VOID APAsicRxAntEvalTimeout(
5685 IN PRTMP_ADAPTER pAd);
5688 // function prototype in cmm_wpa.c
5690 BOOLEAN RTMPCheckWPAframe(
5691 IN PRTMP_ADAPTER pAd,
5692 IN PMAC_TABLE_ENTRY pEntry,
5694 IN ULONG DataByteCount,
5695 IN UCHAR FromWhichBSSID);
5697 VOID AES_GTK_KEY_UNWRAP(
5699 OUT UCHAR *plaintext,
5701 IN UCHAR *ciphertext);
5703 BOOLEAN RTMPCheckRSNIE(
5704 IN PRTMP_ADAPTER pAd,
5707 IN MAC_TABLE_ENTRY *pEntry,
5710 BOOLEAN RTMPParseEapolKeyData(
5711 IN PRTMP_ADAPTER pAd,
5713 IN UCHAR KeyDataLen,
5714 IN UCHAR GroupKeyIndex,
5717 IN MAC_TABLE_ENTRY *pEntry);
5719 VOID ConstructEapolMsg(
5720 IN PRTMP_ADAPTER pAd,
5721 IN UCHAR PeerAuthMode,
5722 IN UCHAR PeerWepStatus,
5723 IN UCHAR MyGroupKeyWepStatus,
5725 IN UCHAR DefaultKeyIdx,
5726 IN UCHAR *ReplayCounter,
5733 OUT PEAPOL_PACKET pMsg);
5736 IN PRTMP_ADAPTER pAd,
5737 IN UCHAR PeerWepStatus,
5739 OUT PEAPOL_PACKET pMsg);
5741 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5742 IN PRTMP_ADAPTER pAd,
5744 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5745 IN PCIPHER_KEY pShard_key);
5747 VOID ConstructEapolKeyData(
5748 IN PRTMP_ADAPTER pAd,
5749 IN UCHAR PeerAuthMode,
5750 IN UCHAR PeerWepStatus,
5751 IN UCHAR GroupKeyWepStatus,
5753 IN UCHAR DefaultKeyIdx,
5754 IN BOOLEAN bWPA2Capable,
5759 OUT PEAPOL_PACKET pMsg);
5762 IN PRTMP_ADAPTER pAd,
5768 // function prototype in ap_wpa.c
5771 BOOLEAN APWpaMsgTypeSubst(
5775 MAC_TABLE_ENTRY *PACInquiry(
5776 IN PRTMP_ADAPTER pAd,
5779 BOOLEAN RTMPCheckMcast(
5780 IN PRTMP_ADAPTER pAd,
5781 IN PEID_STRUCT eid_ptr,
5782 IN MAC_TABLE_ENTRY *pEntry);
5784 BOOLEAN RTMPCheckUcast(
5785 IN PRTMP_ADAPTER pAd,
5786 IN PEID_STRUCT eid_ptr,
5787 IN MAC_TABLE_ENTRY *pEntry);
5789 BOOLEAN RTMPCheckAUTH(
5790 IN PRTMP_ADAPTER pAd,
5791 IN PEID_STRUCT eid_ptr,
5792 IN MAC_TABLE_ENTRY *pEntry);
5794 VOID WPAStart4WayHS(
5795 IN PRTMP_ADAPTER pAd,
5796 IN MAC_TABLE_ENTRY *pEntry,
5797 IN ULONG TimeInterval);
5799 VOID WPAStart2WayGroupHS(
5800 IN PRTMP_ADAPTER pAd,
5801 IN MAC_TABLE_ENTRY *pEntry);
5803 VOID APWpaEAPPacketAction(
5804 IN PRTMP_ADAPTER pAd,
5805 IN MLME_QUEUE_ELEM *Elem);
5807 VOID APWpaEAPOLStartAction(
5808 IN PRTMP_ADAPTER pAd,
5809 IN MLME_QUEUE_ELEM *Elem);
5811 VOID APWpaEAPOLLogoffAction(
5812 IN PRTMP_ADAPTER pAd,
5813 IN MLME_QUEUE_ELEM *Elem);
5815 VOID APWpaEAPOLKeyAction(
5816 IN PRTMP_ADAPTER pAd,
5817 IN MLME_QUEUE_ELEM *Elem);
5819 VOID APWpaEAPOLASFAlertAction(
5820 IN PRTMP_ADAPTER pAd,
5821 IN MLME_QUEUE_ELEM *Elem);
5823 VOID HandleCounterMeasure(
5824 IN PRTMP_ADAPTER pAd,
5825 IN MAC_TABLE_ENTRY *pEntry);
5827 VOID PeerPairMsg2Action(
5828 IN PRTMP_ADAPTER pAd,
5829 IN MAC_TABLE_ENTRY *pEntry,
5830 IN MLME_QUEUE_ELEM *Elem);
5832 VOID PeerPairMsg4Action(
5833 IN PRTMP_ADAPTER pAd,
5834 IN MAC_TABLE_ENTRY *pEntry,
5835 IN MLME_QUEUE_ELEM *Elem);
5838 IN PVOID SystemSpecific1,
5839 IN PVOID FunctionContext,
5840 IN PVOID SystemSpecific2,
5841 IN PVOID SystemSpecific3);
5844 IN PVOID SystemSpecific1,
5845 IN PVOID FunctionContext,
5846 IN PVOID SystemSpecific2,
5847 IN PVOID SystemSpecific3);
5849 VOID EnqueueStartForPSKExec(
5850 IN PVOID SystemSpecific1,
5851 IN PVOID FunctionContext,
5852 IN PVOID SystemSpecific2,
5853 IN PVOID SystemSpecific3);
5855 VOID RTMPHandleSTAKey(
5856 IN PRTMP_ADAPTER pAdapter,
5857 IN MAC_TABLE_ENTRY *pEntry,
5858 IN MLME_QUEUE_ELEM *Elem);
5860 VOID PeerGroupMsg2Action(
5861 IN PRTMP_ADAPTER pAd,
5862 IN PMAC_TABLE_ENTRY pEntry,
5866 VOID PairDisAssocAction(
5867 IN PRTMP_ADAPTER pAd,
5868 IN PMAC_TABLE_ENTRY pEntry,
5871 VOID MlmeDeAuthAction(
5872 IN PRTMP_ADAPTER pAd,
5873 IN PMAC_TABLE_ENTRY pEntry,
5876 VOID GREKEYPeriodicExec(
5877 IN PVOID SystemSpecific1,
5878 IN PVOID FunctionContext,
5879 IN PVOID SystemSpecific2,
5880 IN PVOID SystemSpecific3);
5902 IN PRTMP_ADAPTER pAd,
5905 VOID AES_GTK_KEY_WRAP(
5907 IN UCHAR *plaintext,
5909 OUT UCHAR *ciphertext);
5912 IN PRTMP_ADAPTER pAdapter,
5916 VOID APToWirelessSta(
5917 IN PRTMP_ADAPTER pAd,
5918 IN MAC_TABLE_ENTRY *pEntry,
5919 IN PUCHAR pHeader802_3,
5923 IN BOOLEAN bClearFrame);
5925 VOID RTMPAddPMKIDCache(
5926 IN PRTMP_ADAPTER pAd,
5932 INT RTMPSearchPMKIDCache(
5933 IN PRTMP_ADAPTER pAd,
5937 VOID RTMPDeletePMKIDCache(
5938 IN PRTMP_ADAPTER pAd,
5942 VOID RTMPMaintainPMKIDCache(
5943 IN PRTMP_ADAPTER pAd);
5945 VOID RTMPSendTriggerFrame(
5946 IN PRTMP_ADAPTER pAd,
5950 IN BOOLEAN bQosNull);
5954 VOID RTMP_SetPeriodicTimer(
5955 IN NDIS_MINIPORT_TIMER *pTimer,
5956 IN unsigned long timeout);
5958 VOID RTMP_OS_Init_Timer(
5959 IN PRTMP_ADAPTER pAd,
5960 IN NDIS_MINIPORT_TIMER *pTimer,
5961 IN TIMER_FUNCTION function,
5964 VOID RTMP_OS_Add_Timer(
5965 IN NDIS_MINIPORT_TIMER *pTimer,
5966 IN unsigned long timeout);
5968 VOID RTMP_OS_Mod_Timer(
5969 IN NDIS_MINIPORT_TIMER *pTimer,
5970 IN unsigned long timeout);
5973 VOID RTMP_OS_Del_Timer(
5974 IN NDIS_MINIPORT_TIMER *pTimer,
5975 OUT BOOLEAN *pCancelled);
5978 VOID RTMP_OS_Release_Packet(
5979 IN PRTMP_ADAPTER pAd,
5980 IN PQUEUE_ENTRY pEntry);
5985 NDIS_STATUS os_alloc_mem(
5986 IN PRTMP_ADAPTER pAd,
5990 NDIS_STATUS os_free_mem(
5991 IN PRTMP_ADAPTER pAd,
5995 void RTMP_AllocateSharedMemory(
5996 IN PRTMP_ADAPTER pAd,
5999 OUT PVOID *VirtualAddress,
6000 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6002 VOID RTMPFreeTxRxRingMemory(
6003 IN PRTMP_ADAPTER pAd);
6005 NDIS_STATUS AdapterBlockAllocateMemory(
6009 void RTMP_AllocateTxDescMemory(
6010 IN PRTMP_ADAPTER pAd,
6014 OUT PVOID *VirtualAddress,
6015 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6017 void RTMP_AllocateFirstTxBuffer(
6018 IN PRTMP_ADAPTER pAd,
6022 OUT PVOID *VirtualAddress,
6023 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6025 void RTMP_AllocateMgmtDescMemory(
6026 IN PRTMP_ADAPTER pAd,
6029 OUT PVOID *VirtualAddress,
6030 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6032 void RTMP_AllocateRxDescMemory(
6033 IN PRTMP_ADAPTER pAd,
6036 OUT PVOID *VirtualAddress,
6037 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6039 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6040 IN PRTMP_ADAPTER pAd,
6043 OUT PVOID *VirtualAddress,
6044 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6046 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6047 IN PRTMP_ADAPTER pAd,
6050 OUT PVOID *VirtualAddress);
6052 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6053 IN PRTMP_ADAPTER pAd,
6056 void RTMP_QueryPacketInfo(
6057 IN PNDIS_PACKET pPacket,
6058 OUT PACKET_INFO *pPacketInfo,
6059 OUT PUCHAR *pSrcBufVA,
6060 OUT UINT *pSrcBufLen);
6062 void RTMP_QueryNextPacketInfo(
6063 IN PNDIS_PACKET *ppPacket,
6064 OUT PACKET_INFO *pPacketInfo,
6065 OUT PUCHAR *pSrcBufVA,
6066 OUT UINT *pSrcBufLen);
6069 BOOLEAN RTMP_FillTxBlkInfo(
6070 IN RTMP_ADAPTER *pAd,
6074 PRTMP_SCATTER_GATHER_LIST
6075 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6078 void announce_802_3_packet(
6079 IN PRTMP_ADAPTER pAd,
6080 IN PNDIS_PACKET pPacket);
6083 UINT BA_Reorder_AMSDU_Annnounce(
6084 IN PRTMP_ADAPTER pAd,
6085 IN PNDIS_PACKET pPacket);
6088 UINT Handle_AMSDU_Packet(
6089 IN PRTMP_ADAPTER pAd,
6092 IN UCHAR FromWhichBSSID);
6095 void convert_802_11_to_802_3_packet(
6096 IN PRTMP_ADAPTER pAd,
6097 IN PNDIS_PACKET pPacket,
6101 IN UCHAR FromWhichBSSID);
6104 PNET_DEV get_netdev_from_bssid(
6105 IN PRTMP_ADAPTER pAd,
6106 IN UCHAR FromWhichBSSID);
6109 PNDIS_PACKET duplicate_pkt(
6110 IN PRTMP_ADAPTER pAd,
6111 IN PUCHAR pHeader802_3,
6115 IN UCHAR FromWhichBSSID);
6118 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6119 IN PRTMP_ADAPTER pAd,
6120 IN PNDIS_PACKET pOldPkt);
6122 PNDIS_PACKET duplicate_pkt_with_VLAN(
6123 IN PRTMP_ADAPTER pAd,
6124 IN PUCHAR pHeader802_3,
6128 IN UCHAR FromWhichBSSID);
6130 PNDIS_PACKET duplicate_pkt_with_WPI(
6131 IN PRTMP_ADAPTER pAd,
6132 IN PNDIS_PACKET pPacket,
6133 IN UINT32 ext_head_len,
6134 IN UINT32 ext_tail_len);
6136 UCHAR VLAN_8023_Header_Copy(
6137 IN PRTMP_ADAPTER pAd,
6138 IN PUCHAR pHeader802_3,
6141 IN UCHAR FromWhichBSSID);
6143 #ifdef DOT11_N_SUPPORT
6144 void ba_flush_reordering_timeout_mpdus(
6145 IN PRTMP_ADAPTER pAd,
6146 IN PBA_REC_ENTRY pBAEntry,
6150 VOID BAOriSessionSetUp(
6151 IN PRTMP_ADAPTER pAd,
6152 IN MAC_TABLE_ENTRY *pEntry,
6156 IN BOOLEAN isForced);
6158 VOID BASessionTearDownALL(
6159 IN OUT PRTMP_ADAPTER pAd,
6161 #endif // DOT11_N_SUPPORT //
6163 BOOLEAN OS_Need_Clone_Packet(void);
6166 VOID build_tx_packet(
6167 IN PRTMP_ADAPTER pAd,
6168 IN PNDIS_PACKET pPacket,
6173 VOID BAOriSessionTearDown(
6174 IN OUT PRTMP_ADAPTER pAd,
6177 IN BOOLEAN bPassive,
6178 IN BOOLEAN bForceSend);
6180 VOID BARecSessionTearDown(
6181 IN OUT PRTMP_ADAPTER pAd,
6184 IN BOOLEAN bPassive);
6186 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6187 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6189 ULONG AutoChBssInsertEntry(
6190 IN PRTMP_ADAPTER pAd,
6197 void AutoChBssTableInit(
6198 IN PRTMP_ADAPTER pAd);
6200 void ChannelInfoInit(
6201 IN PRTMP_ADAPTER pAd);
6203 void AutoChBssTableDestroy(
6204 IN PRTMP_ADAPTER pAd);
6206 void ChannelInfoDestroy(
6207 IN PRTMP_ADAPTER pAd);
6209 UCHAR New_ApAutoSelectChannel(
6210 IN PRTMP_ADAPTER pAd);
6212 BOOLEAN rtstrmactohex(
6216 BOOLEAN rtstrcasecmp(
6220 char *rtstrstruncasecmp(
6226 IN const char * s2);
6230 IN const char * ct);
6234 unsigned int *addr);
6236 ////////// common ioctl functions //////////
6237 INT Set_DriverVersion_Proc(
6238 IN PRTMP_ADAPTER pAd,
6241 INT Set_CountryRegion_Proc(
6242 IN PRTMP_ADAPTER pAd,
6245 INT Set_CountryRegionABand_Proc(
6246 IN PRTMP_ADAPTER pAd,
6249 INT Set_WirelessMode_Proc(
6250 IN PRTMP_ADAPTER pAd,
6253 INT Set_Channel_Proc(
6254 IN PRTMP_ADAPTER pAd,
6257 INT Set_ShortSlot_Proc(
6258 IN PRTMP_ADAPTER pAd,
6261 INT Set_TxPower_Proc(
6262 IN PRTMP_ADAPTER pAd,
6265 INT Set_BGProtection_Proc(
6266 IN PRTMP_ADAPTER pAd,
6269 INT Set_TxPreamble_Proc(
6270 IN PRTMP_ADAPTER pAd,
6273 INT Set_RTSThreshold_Proc(
6274 IN PRTMP_ADAPTER pAd,
6277 INT Set_FragThreshold_Proc(
6278 IN PRTMP_ADAPTER pAd,
6281 INT Set_TxBurst_Proc(
6282 IN PRTMP_ADAPTER pAd,
6285 #ifdef AGGREGATION_SUPPORT
6286 INT Set_PktAggregate_Proc(
6287 IN PRTMP_ADAPTER pAd,
6291 INT Set_IEEE80211H_Proc(
6292 IN PRTMP_ADAPTER pAd,
6297 IN PRTMP_ADAPTER pAd,
6301 INT Show_DescInfo_Proc(
6302 IN PRTMP_ADAPTER pAd,
6305 INT Set_ResetStatCounter_Proc(
6306 IN PRTMP_ADAPTER pAd,
6309 #ifdef DOT11_N_SUPPORT
6310 INT Set_BASetup_Proc(
6311 IN PRTMP_ADAPTER pAd,
6314 INT Set_BADecline_Proc(
6315 IN PRTMP_ADAPTER pAd,
6318 INT Set_BAOriTearDown_Proc(
6319 IN PRTMP_ADAPTER pAd,
6322 INT Set_BARecTearDown_Proc(
6323 IN PRTMP_ADAPTER pAd,
6327 IN PRTMP_ADAPTER pAd,
6331 IN PRTMP_ADAPTER pAd,
6335 IN PRTMP_ADAPTER pAd,
6338 INT Set_HtOpMode_Proc(
6339 IN PRTMP_ADAPTER pAd,
6342 INT Set_HtStbc_Proc(
6343 IN PRTMP_ADAPTER pAd,
6347 IN PRTMP_ADAPTER pAd,
6350 INT Set_HtExtcha_Proc(
6351 IN PRTMP_ADAPTER pAd,
6354 INT Set_HtMpduDensity_Proc(
6355 IN PRTMP_ADAPTER pAd,
6358 INT Set_HtBaWinSize_Proc(
6359 IN PRTMP_ADAPTER pAd,
6363 IN PRTMP_ADAPTER pAd,
6366 INT Set_HtLinkAdapt_Proc(
6367 IN PRTMP_ADAPTER pAd,
6370 INT Set_HtAmsdu_Proc(
6371 IN PRTMP_ADAPTER pAd,
6374 INT Set_HtAutoBa_Proc(
6375 IN PRTMP_ADAPTER pAd,
6378 INT Set_HtProtect_Proc(
6379 IN PRTMP_ADAPTER pAd,
6382 INT Set_HtMimoPs_Proc(
6383 IN PRTMP_ADAPTER pAd,
6387 INT Set_ForceShortGI_Proc(
6388 IN PRTMP_ADAPTER pAd,
6391 INT Set_ForceGF_Proc(
6392 IN PRTMP_ADAPTER pAd,
6396 IN PRTMP_ADAPTER pAd);
6398 INT Set_SendPSMPAction_Proc(
6399 IN PRTMP_ADAPTER pAd,
6402 INT Set_HtMIMOPSmode_Proc(
6403 IN PRTMP_ADAPTER pAd,
6407 INT Set_HtTxBASize_Proc(
6408 IN PRTMP_ADAPTER pAd,
6410 #endif // DOT11_N_SUPPORT //
6414 #ifdef CONFIG_STA_SUPPORT
6416 VOID RTMPSendDLSTearDownFrame(
6417 IN PRTMP_ADAPTER pAd,
6420 #ifdef DOT11_N_SUPPORT
6423 IN PRTMP_ADAPTER pAd,
6424 OUT PQUERYBA_TABLE pBAT);
6425 #endif // DOT11_N_SUPPORT //
6427 #ifdef WPA_SUPPLICANT_SUPPORT
6428 INT WpaCheckEapCode(
6429 IN PRTMP_ADAPTER pAd,
6434 VOID WpaSendMicFailureToWpaSupplicant(
6435 IN PRTMP_ADAPTER pAd,
6436 IN BOOLEAN bUnicast);
6438 VOID SendAssocIEsToWpaSupplicant(
6439 IN PRTMP_ADAPTER pAd);
6440 #endif // WPA_SUPPLICANT_SUPPORT //
6442 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6443 int wext_notify_event_assoc(
6444 IN RTMP_ADAPTER *pAd);
6445 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6447 #endif // CONFIG_STA_SUPPORT //
6451 #ifdef DOT11_N_SUPPORT
6452 VOID Handle_BSS_Width_Trigger_Events(
6453 IN PRTMP_ADAPTER pAd);
6455 void build_ext_channel_switch_ie(
6456 IN PRTMP_ADAPTER pAd,
6457 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6458 #endif // DOT11_N_SUPPORT //
6461 BOOLEAN APRxDoneInterruptHandle(
6462 IN PRTMP_ADAPTER pAd);
6464 BOOLEAN STARxDoneInterruptHandle(
6465 IN PRTMP_ADAPTER pAd,
6468 #ifdef DOT11_N_SUPPORT
6469 // AMPDU packet indication
6470 VOID Indicate_AMPDU_Packet(
6471 IN PRTMP_ADAPTER pAd,
6473 IN UCHAR FromWhichBSSID);
6475 // AMSDU packet indication
6476 VOID Indicate_AMSDU_Packet(
6477 IN PRTMP_ADAPTER pAd,
6479 IN UCHAR FromWhichBSSID);
6480 #endif // DOT11_N_SUPPORT //
6482 // Normal legacy Rx packet indication
6483 VOID Indicate_Legacy_Packet(
6484 IN PRTMP_ADAPTER pAd,
6486 IN UCHAR FromWhichBSSID);
6488 VOID Indicate_EAPOL_Packet(
6489 IN PRTMP_ADAPTER pAd,
6491 IN UCHAR FromWhichBSSID);
6493 void update_os_packet_info(
6494 IN PRTMP_ADAPTER pAd,
6496 IN UCHAR FromWhichBSSID);
6498 void wlan_802_11_to_802_3_packet(
6499 IN PRTMP_ADAPTER pAd,
6501 IN PUCHAR pHeader802_3,
6502 IN UCHAR FromWhichBSSID);
6504 UINT deaggregate_AMSDU_announce(
6505 IN PRTMP_ADAPTER pAd,
6506 PNDIS_PACKET pPacket,
6511 #ifdef CONFIG_STA_SUPPORT
6512 // remove LLC and get 802_3 Header
6513 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6515 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6517 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6519 _pDA = _pRxBlk->pHeader->Addr3; \
6520 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6524 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6526 _pDA = _pRxBlk->pHeader->Addr1; \
6527 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6528 _pSA = _pRxBlk->pHeader->Addr2; \
6530 _pSA = _pRxBlk->pHeader->Addr3; \
6534 _pDA = _pRxBlk->pHeader->Addr1; \
6535 _pSA = _pRxBlk->pHeader->Addr2; \
6539 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6540 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6542 #endif // CONFIG_STA_SUPPORT //
6545 BOOLEAN APFowardWirelessStaToWirelessSta(
6546 IN PRTMP_ADAPTER pAd,
6547 IN PNDIS_PACKET pPacket,
6548 IN ULONG FromWhichBSSID);
6550 VOID Announce_or_Forward_802_3_Packet(
6551 IN PRTMP_ADAPTER pAd,
6552 IN PNDIS_PACKET pPacket,
6553 IN UCHAR FromWhichBSSID);
6555 VOID Sta_Announce_or_Forward_802_3_Packet(
6556 IN PRTMP_ADAPTER pAd,
6557 IN PNDIS_PACKET pPacket,
6558 IN UCHAR FromWhichBSSID);
6561 #ifdef CONFIG_STA_SUPPORT
6562 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6563 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6564 //announce_802_3_packet(_pAd, _pPacket);
6565 #endif // CONFIG_STA_SUPPORT //
6568 PNDIS_PACKET DuplicatePacket(
6569 IN PRTMP_ADAPTER pAd,
6570 IN PNDIS_PACKET pPacket,
6571 IN UCHAR FromWhichBSSID);
6574 PNDIS_PACKET ClonePacket(
6575 IN PRTMP_ADAPTER pAd,
6576 IN PNDIS_PACKET pPacket,
6581 // Normal, AMPDU or AMSDU
6582 VOID CmmRxnonRalinkFrameIndicate(
6583 IN PRTMP_ADAPTER pAd,
6585 IN UCHAR FromWhichBSSID);
6587 VOID CmmRxRalinkFrameIndicate(
6588 IN PRTMP_ADAPTER pAd,
6589 IN MAC_TABLE_ENTRY *pEntry,
6591 IN UCHAR FromWhichBSSID);
6593 VOID Update_Rssi_Sample(
6594 IN PRTMP_ADAPTER pAd,
6595 IN RSSI_SAMPLE *pRssi,
6596 IN PRXWI_STRUC pRxWI);
6598 PNDIS_PACKET GetPacketFromRxRing(
6599 IN PRTMP_ADAPTER pAd,
6600 OUT PRT28XX_RXD_STRUC pSaveRxD,
6601 OUT BOOLEAN *pbReschedule,
6602 IN OUT UINT32 *pRxPending);
6604 PNDIS_PACKET RTMPDeFragmentDataFrame(
6605 IN PRTMP_ADAPTER pAd,
6608 ////////////////////////////////////////
6616 typedef struct _DefaultKeyIdxValue
6620 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6624 #ifdef CONFIG_STA_SUPPORT
6626 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6627 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6628 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6629 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6630 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6631 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6632 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6633 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6634 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6635 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6636 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6639 P80211ENUM_msgitem_status_no_value = 0x00
6642 P80211ENUM_truth_false = 0x00,
6643 P80211ENUM_truth_true = 0x01
6646 /* Definition from madwifi */
6652 } p80211item_uint32_t;
6657 #define WLAN_DEVNAMELEN_MAX 16
6658 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6659 p80211item_uint32_t hosttime;
6660 p80211item_uint32_t mactime;
6661 p80211item_uint32_t channel;
6662 p80211item_uint32_t rssi;
6663 p80211item_uint32_t sq;
6664 p80211item_uint32_t signal;
6665 p80211item_uint32_t noise;
6666 p80211item_uint32_t rate;
6667 p80211item_uint32_t istx;
6668 p80211item_uint32_t frmlen;
6669 } wlan_ng_prism2_header;
6671 /* The radio capture header precedes the 802.11 header. */
6672 typedef struct PACKED _ieee80211_radiotap_header {
6673 UINT8 it_version; /* Version 0. Only increases
6674 * for drastic changes,
6675 * introduction of compatible
6676 * new fields does not count.
6679 UINT16 it_len; /* length of the whole
6680 * header in bytes, including
6681 * it_version, it_pad,
6682 * it_len, and data fields.
6684 UINT32 it_present; /* A bitmap telling which
6685 * fields are present. Set bit 31
6686 * (0x80000000) to extend the
6687 * bitmap by another 32 bits.
6688 * Additional extensions are made
6689 * by setting bit 31.
6691 }ieee80211_radiotap_header ;
6693 enum ieee80211_radiotap_type {
6694 IEEE80211_RADIOTAP_TSFT = 0,
6695 IEEE80211_RADIOTAP_FLAGS = 1,
6696 IEEE80211_RADIOTAP_RATE = 2,
6697 IEEE80211_RADIOTAP_CHANNEL = 3,
6698 IEEE80211_RADIOTAP_FHSS = 4,
6699 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6700 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6701 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6702 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6703 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6704 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6705 IEEE80211_RADIOTAP_ANTENNA = 11,
6706 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6707 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6710 #define WLAN_RADIOTAP_PRESENT ( \
6711 (1 << IEEE80211_RADIOTAP_TSFT) | \
6712 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6713 (1 << IEEE80211_RADIOTAP_RATE) | \
6716 typedef struct _wlan_radiotap_header {
6717 ieee80211_radiotap_header wt_ihdr;
6721 } wlan_radiotap_header;
6722 /* Definition from madwifi */
6724 void send_monitor_packets(
6725 IN PRTMP_ADAPTER pAd,
6728 #if WIRELESS_EXT >= 12
6729 // This function will be called when query /proc
6730 struct iw_statistics *rt28xx_get_wireless_stats(
6731 IN struct net_device *net_dev);
6734 VOID RTMPSetDesiredRates(
6735 IN PRTMP_ADAPTER pAdapter,
6737 #endif // CONFIG_STA_SUPPORT //
6739 INT Set_FixedTxMode_Proc(
6740 IN PRTMP_ADAPTER pAd,
6743 static inline char* GetPhyMode(
6753 #ifdef DOT11_N_SUPPORT
6757 case MODE_HTGREENFIELD:
6759 #endif // DOT11_N_SUPPORT //
6766 static inline char* GetBW(
6776 #ifdef DOT11_N_SUPPORT
6779 #endif // DOT11_N_SUPPORT //
6786 VOID RT28xxThreadTerminate(
6787 IN RTMP_ADAPTER *pAd);
6789 BOOLEAN RT28XXChipsetCheck(
6792 BOOLEAN RT28XXNetDevInit(
6794 IN struct net_device *net_dev,
6795 IN RTMP_ADAPTER *pAd);
6797 BOOLEAN RT28XXProbePostConfig(
6799 IN RTMP_ADAPTER *pAd,
6802 VOID RT28XXDMADisable(
6803 IN RTMP_ADAPTER *pAd);
6805 VOID RT28XXDMAEnable(
6806 IN RTMP_ADAPTER *pAd);
6808 VOID RT28xx_UpdateBeaconToAsic(
6809 IN RTMP_ADAPTER * pAd,
6812 IN ULONG UpdatePos);
6815 IN struct net_device *net_dev,
6816 IN OUT struct ifreq *rq,
6820 #ifdef CONFIG_STA_SUPPORT
6821 INT rt28xx_sta_ioctl(
6822 IN struct net_device *net_dev,
6823 IN OUT struct ifreq *rq,
6825 #endif // CONFIG_STA_SUPPORT //
6827 BOOLEAN RT28XXSecurityKeyAdd(
6828 IN PRTMP_ADAPTER pAd,
6831 IN MAC_TABLE_ENTRY *pEntry);
6833 ////////////////////////////////////////
6834 PNDIS_PACKET GetPacketFromRxRing(
6835 IN PRTMP_ADAPTER pAd,
6836 OUT PRT28XX_RXD_STRUC pSaveRxD,
6837 OUT BOOLEAN *pbReschedule,
6838 IN OUT UINT32 *pRxPending);
6841 void kill_thread_task(PRTMP_ADAPTER pAd);
6843 void tbtt_tasklet(unsigned long data);
6846 // Function Prototype in cmm_data_2860.c
6848 USHORT RtmpPCI_WriteTxResource(
6849 IN PRTMP_ADAPTER pAd,
6852 OUT USHORT *FreeNumber);
6854 USHORT RtmpPCI_WriteSingleTxResource(
6855 IN PRTMP_ADAPTER pAd,
6858 OUT USHORT *FreeNumber);
6860 USHORT RtmpPCI_WriteMultiTxResource(
6861 IN PRTMP_ADAPTER pAd,
6864 OUT USHORT *FreeNumber);
6866 USHORT RtmpPCI_WriteFragTxResource(
6867 IN PRTMP_ADAPTER pAd,
6870 OUT USHORT *FreeNumber);
6872 USHORT RtmpPCI_WriteSubTxResource(
6873 IN PRTMP_ADAPTER pAd,
6876 OUT USHORT *FreeNumber);
6878 VOID RtmpPCI_FinalWriteTxResource(
6879 IN PRTMP_ADAPTER pAd,
6881 IN USHORT totalMPDUSize,
6882 IN USHORT FirstTxIdx);
6884 VOID RtmpPCIDataLastTxIdx(
6885 IN PRTMP_ADAPTER pAd,
6887 IN USHORT LastTxIdx);
6889 VOID RtmpPCIDataKickOut(
6890 IN PRTMP_ADAPTER pAd,
6895 int RtmpPCIMgmtKickOut(
6896 IN RTMP_ADAPTER *pAd,
6898 IN PNDIS_PACKET pPacket,
6899 IN PUCHAR pSrcBufVA,
6903 NDIS_STATUS RTMPCheckRxError(
6904 IN PRTMP_ADAPTER pAd,
6905 IN PHEADER_802_11 pHeader,
6906 IN PRXWI_STRUC pRxWI,
6907 IN PRT28XX_RXD_STRUC pRxD);
6909 #ifdef CONFIG_STA_SUPPORT
6910 VOID RTMPInitPCIeLinkCtrlValue(
6911 IN PRTMP_ADAPTER pAd);
6913 VOID RTMPFindHostPCIDev(
6914 IN PRTMP_ADAPTER pAd);
6916 VOID RTMPPCIeLinkCtrlValueRestore(
6917 IN PRTMP_ADAPTER pAd,
6920 VOID RTMPPCIeLinkCtrlSetting(
6921 IN PRTMP_ADAPTER pAd,
6924 VOID RT28xxPciAsicRadioOff(
6925 IN PRTMP_ADAPTER pAd,
6927 IN USHORT TbttNumToNextWakeUp);
6929 BOOLEAN RT28xxPciAsicRadioOn(
6930 IN PRTMP_ADAPTER pAd,
6933 VOID RT28xxPciStaAsicForceWakeup(
6934 IN PRTMP_ADAPTER pAd,
6937 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6938 IN PRTMP_ADAPTER pAd,
6939 IN USHORT TbttNumToNextWakeUp);
6941 VOID PsPollWakeExec(
6942 IN PVOID SystemSpecific1,
6943 IN PVOID FunctionContext,
6944 IN PVOID SystemSpecific2,
6945 IN PVOID SystemSpecific3);
6948 IN PVOID SystemSpecific1,
6949 IN PVOID FunctionContext,
6950 IN PVOID SystemSpecific2,
6951 IN PVOID SystemSpecific3);
6952 #endif // CONFIG_STA_SUPPORT //
6954 VOID RT28xxPciMlmeRadioOn(
6955 IN PRTMP_ADAPTER pAd);
6957 VOID RT28xxPciMlmeRadioOFF(
6958 IN PRTMP_ADAPTER pAd);
6960 VOID AsicTurnOffRFClk(
6961 IN PRTMP_ADAPTER pAd,
6964 VOID AsicTurnOnRFClk(
6965 IN PRTMP_ADAPTER pAd,
6969 ////////////////////////////////////////
6972 IN RTMP_ADAPTER *pAd);
6974 UINT32 QBSS_LoadElementAppend(
6975 IN RTMP_ADAPTER *pAd,
6978 VOID QBSS_LoadUpdate(
6979 IN RTMP_ADAPTER *pAd);
6981 ///////////////////////////////////////
6982 INT RTMPShowCfgValue(
6983 IN PRTMP_ADAPTER pAd,
6987 PCHAR RTMPGetRalinkAuthModeStr(
6988 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6990 PCHAR RTMPGetRalinkEncryModeStr(
6991 IN USHORT encryMode);
6992 //////////////////////////////////////
6994 #ifdef CONFIG_STA_SUPPORT
6995 VOID AsicStaBbpTuning(
6996 IN PRTMP_ADAPTER pAd);
6998 VOID AsicResetFromDMABusy(
6999 IN PRTMP_ADAPTER pAd);
7002 IN PRTMP_ADAPTER pAd);
7005 IN PRTMP_ADAPTER pAd);
7008 IN PRTMP_ADAPTER pAd);
7009 #endif // CONFIG_STA_SUPPORT //
7011 void RTMP_IndicateMediaState(
7012 IN PRTMP_ADAPTER pAd);
7014 VOID ReSyncBeaconTime(
7015 IN PRTMP_ADAPTER pAd);
7017 VOID RTMPSetAGCInitValue(
7018 IN PRTMP_ADAPTER pAd,
7019 IN UCHAR BandWidth);
7021 int rt28xx_close(IN PNET_DEV dev);
7022 int rt28xx_open(IN PNET_DEV dev);
7024 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7026 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7027 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7029 if (VIRTUAL_IF_NUM(pAd) == 0)
7031 if (rt28xx_open(pAd->net_dev) != 0)
7037 VIRTUAL_IF_INC(pAd);
7041 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7043 VIRTUAL_IF_DEC(pAd);
7044 if (VIRTUAL_IF_NUM(pAd) == 0)
7045 rt28xx_close(pAd->net_dev);
7050 #endif // __RTMP_H__