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;
1334 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1335 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1336 ULONG LastSendNULLpsmTime;
1339 NDIS_SPIN_LOCK TaskLock;
1344 RALINK_TIMER_STRUCT PeriodicTimer;
1345 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1346 RALINK_TIMER_STRUCT LinkDownTimer;
1347 RALINK_TIMER_STRUCT LinkUpTimer;
1348 UCHAR bPsPollTimerRunning;
1349 RALINK_TIMER_STRUCT PsPollTimer;
1350 RALINK_TIMER_STRUCT RadioOnOffTimer;
1351 ULONG PeriodicRound;
1352 ULONG OneSecPeriodicRound;
1355 BOOLEAN bLowThroughput;
1356 BOOLEAN bEnableAutoAntennaCheck;
1357 RALINK_TIMER_STRUCT RxAntEvalTimer;
1360 } MLME_STRUCT, *PMLME_STRUCT;
1362 // structure for radar detection and channel switch
1363 typedef struct _RADAR_DETECT_STRUCT {
1364 UCHAR CSCount; //Channel switch counter
1365 UCHAR CSPeriod; //Channel switch period (beacon count)
1366 UCHAR RDCount; //Radar detection counter
1367 UCHAR RDMode; //Radar Detection mode
1368 UCHAR RDDurRegion; //Radar detection duration region
1375 ULONG InServiceMonitorCount; // unit: sec
1376 UINT8 DfsSessionTime;
1379 UINT8 LongPulseRadarTh;
1380 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1382 typedef enum _REC_BLOCKACK_STATUS
1386 Recipient_HandleRes,
1388 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1390 typedef enum _ORI_BLOCKACK_STATUS
1396 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1398 #ifdef DOT11_N_SUPPORT
1399 typedef struct _BA_ORI_ENTRY{
1404 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1406 USHORT TimeOutValue;
1407 ORI_BLOCKACK_STATUS ORI_BA_Status;
1408 RALINK_TIMER_STRUCT ORIBATimer;
1410 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1412 typedef struct _BA_REC_ENTRY {
1415 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1417 USHORT TimeOutValue;
1418 RALINK_TIMER_STRUCT RECBATimer;
1419 ULONG LastIndSeqAtTimer;
1422 REC_BLOCKACK_STATUS REC_BA_Status;
1423 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1425 struct reordering_list list;
1426 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1430 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1431 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1432 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1433 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1434 } BA_TABLE, *PBA_TABLE;
1436 //For QureyBATableOID use;
1437 typedef struct PACKED _OID_BA_REC_ENTRY{
1438 UCHAR MACAddr[MAC_ADDR_LEN];
1439 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1442 REC_BLOCKACK_STATUS REC_BA_Status[8];
1443 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1445 //For QureyBATableOID use;
1446 typedef struct PACKED _OID_BA_ORI_ENTRY{
1447 UCHAR MACAddr[MAC_ADDR_LEN];
1448 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
1451 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1452 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1454 typedef struct _QUERYBA_TABLE{
1455 OID_BA_ORI_ENTRY BAOriEntry[32];
1456 OID_BA_REC_ENTRY BARecEntry[32];
1457 UCHAR OriNum;// Number of below BAOriEntry
1458 UCHAR RecNum;// Number of below BARecEntry
1459 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1461 typedef union _BACAP_STRUC {
1462 #ifdef RT_BIG_ENDIAN
1465 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.
1466 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1467 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1468 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1469 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1470 UINT32 MpduDensity:3;
1471 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1472 UINT32 AutoBA:1; // automatically BA
1473 UINT32 TxBAWinLimit:8;
1474 UINT32 RxBAWinLimit:8;
1478 UINT32 RxBAWinLimit:8;
1479 UINT32 TxBAWinLimit:8;
1480 UINT32 AutoBA:1; // automatically BA
1481 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1482 UINT32 MpduDensity:3;
1483 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1484 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1485 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1486 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1487 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 } BACAP_STRUC, *PBACAP_STRUC;
1493 #endif // DOT11_N_SUPPORT //
1495 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1496 typedef struct _IOT_STRUC {
1498 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1499 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1500 ULONG OneSecInWindowCount;
1501 ULONG OneSecFrameDuplicateCount;
1502 ULONG OneSecOutWindowCount;
1507 BOOLEAN bRTSLongProtOn;
1508 #ifdef CONFIG_STA_SUPPORT
1509 BOOLEAN bLastAtheros;
1510 BOOLEAN bCurrentAtheros;
1511 BOOLEAN bNowAtherosBurstOn;
1512 BOOLEAN bNextDisableRxBA;
1514 #endif // CONFIG_STA_SUPPORT //
1515 } IOT_STRUC, *PIOT_STRUC;
1517 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1518 typedef union _REG_TRANSMIT_SETTING {
1519 #ifdef RT_BIG_ENDIAN
1525 UINT32 STBC:1; //SPACE
1527 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1528 UINT32 TxBF:1; // 3*3
1535 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1537 UINT32 STBC:1; //SPACE
1545 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1547 typedef union _DESIRED_TRANSMIT_SETTING {
1548 #ifdef RT_BIG_ENDIAN
1551 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1553 USHORT MCS:7; // MCS
1557 USHORT MCS:7; // MCS
1559 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1564 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1567 BOOLEAN IsRecipient;
1568 UCHAR MACAddr[MAC_ADDR_LEN];
1572 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1573 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1576 // Multiple SSID structure
1578 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1579 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1581 /* clear bcmc TIM bit */
1582 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1583 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1585 /* set bcmc TIM bit */
1586 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1587 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1589 /* clear a station PS TIM bit */
1590 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1591 { UCHAR tim_offset = wcid >> 3; \
1592 UCHAR bit_offset = wcid & 0x7; \
1593 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1595 /* set a station PS TIM bit */
1596 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1597 { UCHAR tim_offset = wcid >> 3; \
1598 UCHAR bit_offset = wcid & 0x7; \
1599 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1602 typedef struct _MULTISSID_STRUCT {
1603 UCHAR Bssid[MAC_ADDR_LEN];
1605 CHAR Ssid[MAX_LEN_OF_SSID];
1606 USHORT CapabilityInfo;
1610 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1611 NDIS_802_11_WEP_STATUS WepStatus;
1612 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1613 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1617 ULONG ReceivedByteCount;
1618 ULONG TransmittedByteCount;
1622 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1623 RT_HT_PHY_INFO DesiredHtPhyInfo;
1624 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1625 BOOLEAN bAutoTxRateSwitch;
1629 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1630 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1631 UCHAR DesiredRatesIndex;
1632 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1634 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1644 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1645 UCHAR BANClass3Data;
1646 ULONG IsolateInterStaTraffic;
1649 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1652 UCHAR TimIELocationInBeacon;
1653 UCHAR CapabilityInfoLocationInBeacon;
1654 // outgoing BEACON frame buffer and corresponding TXWI
1655 // PTXWI_STRUC BeaconTxWI; //
1656 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1659 UINT16 StationKeepAliveTime; // unit: second
1662 USHORT VLAN_Priority;
1664 RT_802_11_ACL AccessControlList;
1667 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1668 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1670 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1672 // For 802.1x daemon setting per BSS
1673 UCHAR radius_srv_num;
1674 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1677 unsigned int mylinkid;
1681 UINT32 RcvdConflictSsidCount;
1682 UINT32 RcvdSpoofedAssocRespCount;
1683 UINT32 RcvdSpoofedReassocRespCount;
1684 UINT32 RcvdSpoofedProbeRespCount;
1685 UINT32 RcvdSpoofedBeaconCount;
1686 UINT32 RcvdSpoofedDisassocCount;
1687 UINT32 RcvdSpoofedAuthCount;
1688 UINT32 RcvdSpoofedDeauthCount;
1689 UINT32 RcvdSpoofedUnknownMgmtCount;
1690 UINT32 RcvdReplayAttackCount;
1692 CHAR RssiOfRcvdConflictSsid;
1693 CHAR RssiOfRcvdSpoofedAssocResp;
1694 CHAR RssiOfRcvdSpoofedReassocResp;
1695 CHAR RssiOfRcvdSpoofedProbeResp;
1696 CHAR RssiOfRcvdSpoofedBeacon;
1697 CHAR RssiOfRcvdSpoofedDisassoc;
1698 CHAR RssiOfRcvdSpoofedAuth;
1699 CHAR RssiOfRcvdSpoofedDeauth;
1700 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1701 CHAR RssiOfRcvdReplayAttack;
1705 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1709 #ifdef DOT11N_DRAFT3
1710 typedef enum _BSS2040COEXIST_FLAG{
1711 BSS_2040_COEXIST_DISABLE = 0,
1712 BSS_2040_COEXIST_TIMER_FIRED = 1,
1713 BSS_2040_COEXIST_INFO_SYNC = 2,
1714 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1715 }BSS2040COEXIST_FLAG;
1716 #endif // DOT11N_DRAFT3 //
1718 // configuration common to OPMODE_AP as well as OPMODE_STA
1719 typedef struct _COMMON_CONFIG {
1721 BOOLEAN bCountryFlag;
1722 UCHAR CountryCode[3];
1724 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1725 UCHAR CountryRegionForABand; // Enum of country region for A band
1726 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1727 USHORT Dsifs; // in units of usec
1728 ULONG PacketFilter; // Packet filter for receiving
1730 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1731 UCHAR SsidLen; // the actual ssid length in used
1732 UCHAR LastSsidLen; // the actual ssid length in used
1733 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1734 UCHAR LastBssid[MAC_ADDR_LEN];
1736 UCHAR Bssid[MAC_ADDR_LEN];
1737 USHORT BeaconPeriod;
1739 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1741 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1743 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1745 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1746 UCHAR MaxDesiredRate;
1747 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1749 ULONG BasicRateBitmap; // backup basic ratebitmap
1751 BOOLEAN bAPSDCapable;
1752 BOOLEAN bInServicePeriod;
1757 BOOLEAN bNeedSendTriggerFrame;
1758 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1759 ULONG TriggerTimerCount;
1761 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1762 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1763 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1764 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1765 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1766 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1767 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1768 UCHAR RtsRate; // RATE_xxx
1769 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1770 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1771 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1773 USHORT RtsThreshold; // in unit of BYTE
1774 USHORT FragmentThreshold; // in unit of BYTE
1776 UCHAR TxPower; // in unit of mW
1777 ULONG TxPowerPercentage; // 0~100 %
1778 ULONG TxPowerDefault; // keep for TxPowerPercentage
1780 #ifdef DOT11_N_SUPPORT
1781 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1782 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1783 #endif // DOT11_N_SUPPORT //
1784 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1785 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1786 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1787 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1788 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1789 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1790 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1791 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1792 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1793 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1795 #ifdef DOT11_N_SUPPORT
1797 #endif // DOT11_N_SUPPORT //
1798 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1799 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1800 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1801 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1802 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1803 #ifdef CONFIG_STA_SUPPORT
1804 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1805 #endif // CONFIG_STA_SUPPORT //
1806 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1807 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1808 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1809 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1810 ULONG OpStatusFlags;
1812 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1813 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1815 // IEEE802.11H--DFS.
1816 RADAR_DETECT_STRUCT RadarDetect;
1818 #ifdef DOT11_N_SUPPORT
1820 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1821 //RT_HT_CAPABILITY SupportedHtPhy;
1822 RT_HT_CAPABILITY DesiredHtPhy;
1823 HT_CAPABILITY_IE HtCapability;
1824 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1825 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1826 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1827 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
1829 #ifdef DOT11N_DRAFT3
1830 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1831 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1833 //This IE is used for 20/40 BSS Coexistence.
1834 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1835 // ====== 11n D3.0 =======================>
1836 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1837 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1838 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1839 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1840 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1841 USHORT Dot11BssWidthChanTranDelayFactor;
1842 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1844 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1845 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1847 NDIS_SPIN_LOCK TriggerEventTabLock;
1848 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1849 BSS_2040_COEXIST_IE BSSCoexist2040;
1850 TRIGGER_EVENT_TAB TriggerEventTab;
1851 UCHAR ChannelListIdx;
1852 // <====== 11n D3.0 =======================
1853 BOOLEAN bOverlapScanning;
1854 #endif // DOT11N_DRAFT3 //
1857 BOOLEAN bMIMOPSEnable;
1859 BOOLEAN bDisableReordering;
1860 BOOLEAN bForty_Mhz_Intolerant;
1861 BOOLEAN bExtChannelSwitchAnnouncement;
1862 BOOLEAN bRcvBSSWidthTriggerEvents;
1863 ULONG LastRcvBSSWidthTriggerEventsTime;
1866 #endif // DOT11_N_SUPPORT //
1868 // Enable wireless event
1869 BOOLEAN bWirelessEvent;
1870 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1872 // Tx & Rx Stream number selection
1876 // transmit phy mode, trasmit rate for Multicast.
1877 #ifdef MCAST_RATE_SPECIFIC
1878 UCHAR McastTransmitMcs;
1879 UCHAR McastTransmitPhyMode;
1880 #endif // MCAST_RATE_SPECIFIC //
1882 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1886 NDIS_SPIN_LOCK MeasureReqTabLock;
1887 PMEASURE_REQ_TAB pMeasureReqTab;
1889 NDIS_SPIN_LOCK TpcReqTabLock;
1890 PTPC_REQ_TAB pTpcReqTab;
1892 // transmit phy mode, trasmit rate for Multicast.
1893 #ifdef MCAST_RATE_SPECIFIC
1894 HTTRANSMIT_SETTING MCastPhyMode;
1895 #endif // MCAST_RATE_SPECIFIC //
1896 } COMMON_CONFIG, *PCOMMON_CONFIG;
1899 #ifdef CONFIG_STA_SUPPORT
1900 /* Modified by Wu Xi-Kun 4/21/2006 */
1901 // STA configuration and status
1902 typedef struct _STA_ADMIN_CONFIG {
1904 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1905 // the user intended configuration, but not necessary fully equal to the final
1906 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1907 // AP or IBSS holder).
1908 // Once initialized, user configuration can only be changed via OID_xxx
1909 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1910 USHORT AtimWin; // used when starting a new IBSS
1913 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1914 // the user intended configuration, and should be always applied to the final
1915 // settings in ACTIVE BSS without compromising with the BSS holder.
1916 // Once initialized, user configuration can only be changed via OID_xxx
1918 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1919 USHORT DefaultListenCount; // default listen count;
1920 ULONG WindowsPowerMode; // Power mode for AC power
1921 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1922 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1923 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1924 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1926 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1927 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1928 USHORT DisassocReason;
1929 UCHAR DisassocSta[MAC_ADDR_LEN];
1930 USHORT DeauthReason;
1931 UCHAR DeauthSta[MAC_ADDR_LEN];
1932 USHORT AuthFailReason;
1933 UCHAR AuthFailSta[MAC_ADDR_LEN];
1935 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1936 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1937 NDIS_802_11_WEP_STATUS WepStatus;
1938 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1940 // Add to support different cipher suite for WPA2/WPA mode
1941 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1942 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1943 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1944 USHORT RsnCapability;
1946 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1948 UCHAR PMK[32]; // WPA PSK mode PMK
1949 UCHAR PTK[64]; // WPA PSK mode PTK
1950 UCHAR GTK[32]; // GTK from authenticator
1951 BSSID_INFO SavedPMK[PMKID_NO];
1952 UINT SavedPMKNum; // Saved PMKID number
1957 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1960 // For WPA countermeasures
1961 ULONG LastMicErrorTime; // record last MIC error time
1962 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1963 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1964 // For WPA-PSK supplicant state
1965 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1966 UCHAR ReplayCounter[8];
1967 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1968 UCHAR SNonce[32]; // SNonce for WPA-PSK
1970 UCHAR LastSNR0; // last received BEACON's SNR
1971 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1972 RSSI_SAMPLE RssiSample;
1973 ULONG NumOfAvgRssiSample;
1975 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1976 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1977 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1978 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1980 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1981 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1982 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1983 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1984 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1985 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1986 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1988 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
1989 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
1990 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
1992 // New for WPA, windows want us to to keep association information and
1993 // Fixed IEs from last association response
1994 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1995 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1996 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1997 USHORT ResVarIELen; // Length of next VIE include EID & Length
1998 UCHAR ResVarIEs[MAX_VIE_LEN];
2001 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2003 // New variables used for CCX 1.0
2005 BOOLEAN bCkipCmicOn;
2007 UCHAR GIV[3]; //for CCX iv
2012 LEAP_AUTH_INFO LeapAuthInfo;
2014 UCHAR NetworkChallenge[8];
2015 UCHAR NetworkChallengeResponse[24];
2016 UCHAR PeerChallenge[8];
2018 UCHAR PeerChallengeResponse[24];
2019 UCHAR SessionKey[16]; //Network session keys (NSK)
2020 RALINK_TIMER_STRUCT LeapAuthTimer;
2021 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2023 // New control flags for CCX
2024 CCX_CONTROL CCXControl; // Master administration state
2025 BOOLEAN CCXEnable; // Actual CCX state
2026 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2027 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2028 UCHAR CCXReqType; // Current processing CCX request type
2029 BSS_TABLE CCXBssTab; // BSS Table
2030 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2031 USHORT FrameReportLen; // Current Frame report length
2032 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2033 USHORT RPIDensity[8]; // Array for RPI density collection
2034 // Start address of each BSS table within FrameReportBuf
2035 // It's important to update the RxPower of the corresponding Bss
2036 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2037 USHORT BeaconToken; // Token for beacon report
2038 ULONG LastBssIndex; // Most current reported Bss index
2039 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2040 UCHAR RMReqCnt; // Number of measurement request saved.
2041 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2042 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2043 // It must be the same channel with maximum duration
2044 USHORT ParallelDuration; // Maximum duration for parallel measurement
2045 UCHAR ParallelChannel; // Only one channel with parallel measurement
2046 USHORT IAPPToken; // IAPP dialog token
2047 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2048 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2049 // Hack for channel load and noise histogram parameters
2050 UCHAR NHFactor; // Parameter for Noise histogram
2051 UCHAR CLFactor; // Parameter for channel load
2053 UCHAR KRK[16]; //Key Refresh Key.
2054 UCHAR BTK[32]; //Base Transient Key
2055 BOOLEAN CCKMLinkUpFlag;
2056 ULONG CCKMRN; //(Re)Association request number.
2057 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2058 UCHAR AironetCellPowerLimit; //in dBm
2059 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2060 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2061 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2062 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2063 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2064 USHORT CCXAdjacentAPChannel;
2065 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2067 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2068 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2070 UCHAR DtimCount; // 0.. DtimPeriod-1
2071 UCHAR DtimPeriod; // default = 3
2073 ////////////////////////////////////////////////////////////////////////////////////////
2074 // This is only for WHQL test.
2076 ////////////////////////////////////////////////////////////////////////////////////////
2078 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2080 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2081 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2083 #ifdef WPA_SUPPLICANT_SUPPORT
2085 BOOLEAN IEEE8021x_required_keys;
2086 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2087 UCHAR DesireSharedKeyId;
2089 // 0: driver ignores wpa_supplicant
2090 // 1: wpa_supplicant initiates scanning and AP selection
2091 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2092 UCHAR WpaSupplicantUP;
2093 UCHAR WpaSupplicantScanCount;
2094 #endif // WPA_SUPPLICANT_SUPPORT //
2099 BOOLEAN bTGnWifiTest;
2100 BOOLEAN bScanReqIsFromWebUI;
2102 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2103 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2104 RT_HT_PHY_INFO DesiredHtPhyInfo;
2105 BOOLEAN bAutoTxRateSwitch;
2108 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2110 // This data structure keep the current active BSS/IBSS's configuration that this STA
2111 // had agreed upon joining the network. Which means these parameters are usually decided
2112 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2113 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2114 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2115 // the current active settings.
2116 typedef struct _STA_ACTIVE_CONFIG {
2118 USHORT AtimWin; // in kusec; IBSS parameter set element
2119 USHORT CapabilityInfo;
2120 USHORT CfpMaxDuration;
2123 // Copy supported rate from desired AP's beacon. We are trying to match
2124 // AP's supported and extended rate settings.
2125 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2126 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2129 // Copy supported ht from desired AP's beacon. We are trying to match
2130 RT_HT_PHY_INFO SupportedPhyInfo;
2131 RT_HT_CAPABILITY SupportedHtPhy;
2132 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2133 #endif // CONFIG_STA_SUPPORT //
2135 // ----------- start of AP --------------------------
2136 // AUTH-RSP State Machine Aux data structure
2137 typedef struct _AP_MLME_AUX {
2138 UCHAR Addr[MAC_ADDR_LEN];
2140 CHAR Challenge[CIPHER_TEXT_LEN];
2141 } AP_MLME_AUX, *PAP_MLME_AUX;
2143 // structure to define WPA Group Key Rekey Interval
2144 typedef struct PACKED _RT_802_11_WPA_REKEY {
2145 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2146 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2147 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2149 typedef struct _MAC_TABLE_ENTRY {
2150 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2151 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2152 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2153 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2154 BOOLEAN ValidAsMesh;
2155 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2157 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2159 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2161 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2162 UCHAR CMTimerRunning;
2163 UCHAR apidx; // MBSS number
2165 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2166 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2167 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2170 RALINK_TIMER_STRUCT RetryTimer;
2171 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2172 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2173 NDIS_802_11_WEP_STATUS WepStatus;
2174 AP_WPA_STATE WpaState;
2177 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2178 CIPHER_KEY PairwiseKey;
2181 UCHAR PMKID[LEN_PMKID];
2184 UCHAR Addr[MAC_ADDR_LEN];
2187 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2188 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2190 USHORT CapabilityInfo;
2192 ULONG NoDataIdleCount;
2193 UINT16 StationKeepAliveCount; // unit: second
2195 QUEUE_HEADER PsQueue;
2197 UINT32 StaConnectTime; // the live time of this station since associated with AP
2200 #ifdef DOT11_N_SUPPORT
2202 USHORT NoBADataCountDown;
2204 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2205 UINT TxBFCount; // 3*3
2206 #endif // DOT11_N_SUPPORT //
2208 UINT DebugFIFOCount;
2213 //====================================================
2214 //WDS entry needs these
2215 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2216 UINT MatchWDSTabIdx;
2217 UCHAR MaxSupportedRate;
2219 UCHAR CurrTxRateIndex;
2220 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2221 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2222 UINT32 OneSecTxNoRetryOkCount;
2223 UINT32 OneSecTxRetryOkCount;
2224 UINT32 OneSecTxFailCount;
2225 UINT32 ContinueTxFailCnt;
2226 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2227 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2228 //====================================================
2230 BOOLEAN fNoisyEnvironment;
2231 BOOLEAN fLastSecAccordingRSSI;
2232 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2233 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2234 ULONG LastTxOkCount;
2235 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2237 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2238 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2239 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2240 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2241 ULONG ClientStatusFlags;
2243 // TODO: Shall we move that to DOT11_N_SUPPORT???
2244 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2246 #ifdef DOT11_N_SUPPORT
2247 // HT EWC MIMO-N used parameters
2248 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2249 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2250 USHORT TXAutoBAbitmap;
2251 USHORT BADeclineBitmap;
2252 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2253 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2254 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2256 // 802.11n features.
2258 UCHAR MaxRAmpduFactor;
2260 UCHAR MmpsMode; // MIMO power save more.
2262 HT_CAPABILITY_IE HTCapability;
2264 #ifdef DOT11N_DRAFT3
2265 UCHAR BSS2040CoexistenceMgmtSupport;
2266 #endif // DOT11N_DRAFT3 //
2267 #endif // DOT11_N_SUPPORT //
2269 BOOLEAN bAutoTxRateSwitch;
2272 struct _MAC_TABLE_ENTRY *pNext;
2273 USHORT TxSeq[NUM_OF_TID];
2274 USHORT NonQosDataSeq;
2276 RSSI_SAMPLE RssiSample;
2278 UINT32 TXMCSExpected[16];
2279 UINT32 TXMCSSuccessful[16];
2280 UINT32 TXMCSFailed[16];
2281 UINT32 TXMCSAutoFallBack[16][16];
2282 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2284 typedef struct _MAC_TABLE {
2286 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2287 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2288 QUEUE_HEADER McastPsQueue;
2290 BOOLEAN fAnyStationInPsm;
2291 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2292 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2293 #ifdef DOT11_N_SUPPORT
2294 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2295 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2296 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2297 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2298 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2299 #endif // DOT11_N_SUPPORT //
2300 } MAC_TABLE, *PMAC_TABLE;
2302 #ifdef DOT11_N_SUPPORT
2303 #define IS_HT_STA(_pMacEntry) \
2304 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2306 #define IS_HT_RATE(_pMacEntry) \
2307 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2309 #define PEER_IS_HT_RATE(_pMacEntry) \
2310 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2311 #endif // DOT11_N_SUPPORT //
2313 typedef struct _WDS_ENTRY {
2315 UCHAR Addr[MAC_ADDR_LEN];
2316 ULONG NoDataIdleCount;
2317 struct _WDS_ENTRY *pNext;
2318 } WDS_ENTRY, *PWDS_ENTRY;
2320 typedef struct _WDS_TABLE_ENTRY {
2322 UCHAR WdsAddr[MAC_ADDR_LEN];
2323 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2324 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2325 UCHAR MaxSupportedRate;
2327 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2328 USHORT OneSecTxOkCount;
2329 USHORT OneSecTxRetryOkCount;
2330 USHORT OneSecTxFailCount;
2331 ULONG CurrTxRateStableTime; // # of second in current TX rate
2332 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2333 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2335 typedef struct _RT_802_11_WDS_ENTRY {
2339 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2340 UCHAR MacTabMatchWCID; // ASIC
2341 NDIS_802_11_WEP_STATUS WepStatus;
2344 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2345 RT_HT_PHY_INFO DesiredHtPhyInfo;
2346 BOOLEAN bAutoTxRateSwitch;
2347 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2348 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2350 typedef struct _WDS_TABLE {
2353 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2354 } WDS_TABLE, *PWDS_TABLE;
2356 typedef struct _APCLI_STRUCT {
2359 unsigned int mylinkid;
2361 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2362 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2363 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2365 CHAR Ssid[MAX_LEN_OF_SSID];
2368 CHAR CfgSsid[MAX_LEN_OF_SSID];
2369 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2370 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2372 ULONG ApCliRcvBeaconTime;
2374 ULONG CtrlCurrState;
2375 ULONG SyncCurrState;
2376 ULONG AuthCurrState;
2377 ULONG AssocCurrState;
2378 ULONG WpaPskCurrState;
2383 ULONG ClientStatusFlags;
2386 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2387 NDIS_802_11_WEP_STATUS WepStatus;
2389 // Add to support different cipher suite for WPA2/WPA mode
2390 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2391 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2392 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2393 USHORT RsnCapability;
2395 UCHAR PSK[100]; // reserve PSK key material
2397 UCHAR PMK[32]; // WPA PSK mode PMK
2398 UCHAR GTK[32]; // GTK from authenticator
2400 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2403 // store RSN_IE built by driver
2404 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2407 // For WPA countermeasures
2408 ULONG LastMicErrorTime; // record last MIC error time
2409 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2411 // For WPA-PSK supplicant state
2412 UCHAR SNonce[32]; // SNonce for WPA-PSK
2413 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2415 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2416 RT_HT_PHY_INFO DesiredHtPhyInfo;
2417 BOOLEAN bAutoTxRateSwitch;
2418 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2419 } APCLI_STRUCT, *PAPCLI_STRUCT;
2421 // ----------- end of AP ----------------------------
2426 BOOLEAN bGreenField;
2432 typedef struct _INF_PCI_CONFIG
2434 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2437 typedef struct _INF_USB_CONFIG
2439 UINT BulkInEpAddr; // bulk-in endpoint address
2440 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2444 #ifdef IKANOS_VX_1X0
2445 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2447 struct IKANOS_TX_INFO
2449 struct net_device *netdev;
2450 IkanosWlanTxCbFuncP *fp;
2452 #endif // IKANOS_VX_1X0 //
2455 #define DIAGNOSE_TIME 10 // 10 sec
2456 typedef struct _RtmpDiagStrcut_
2457 { // Diagnosis Related element
2458 unsigned char inited;
2460 unsigned char ArrayStartIdx;
2461 unsigned char ArrayCurIdx;
2463 USHORT TxDataCnt[DIAGNOSE_TIME];
2464 USHORT TxFailCnt[DIAGNOSE_TIME];
2465 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2466 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2467 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2469 USHORT TxAggCnt[DIAGNOSE_TIME];
2470 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2471 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2472 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2473 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2476 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2477 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2478 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2480 #endif // DBG_DIAGNOSE //
2484 // The miniport adapter structure
2486 typedef struct _RTMP_ADAPTER
2488 PVOID OS_Cookie; // save specific structure relative to OS
2492 USHORT LnkCtrlBitMask;
2493 USHORT RLnkCtrlConfiguration;
2494 USHORT RLnkCtrlOffset;
2495 USHORT HostLnkCtrlConfiguration;
2496 USHORT HostLnkCtrlOffset;
2497 USHORT PCIePowerSaveLevel;
2498 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2499 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2500 USHORT ThisTbttNumToNextWakeUp;
2501 ULONG SameRxByteCount;
2504 /*****************************************************************************************/
2505 /* PCI related parameters */
2506 /*****************************************************************************************/
2507 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2509 UINT int_enable_reg;
2510 UINT int_disable_mask;
2514 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2515 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2516 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2517 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2520 NDIS_SPIN_LOCK irq_lock;
2525 /*****************************************************************************************/
2526 /* Both PCI/USB related parameters */
2527 /*****************************************************************************************/
2530 /*****************************************************************************************/
2531 /* Tx related parameters */
2532 /*****************************************************************************************/
2533 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2534 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2537 // resource for software backlog queues
2538 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2539 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2541 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2542 RTMP_MGMT_RING MgmtRing;
2543 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2546 /*****************************************************************************************/
2547 /* Rx related parameters */
2548 /*****************************************************************************************/
2550 RTMP_RX_RING RxRing;
2551 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2555 /*****************************************************************************************/
2556 /* ASIC related parameters */
2557 /*****************************************************************************************/
2558 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2560 // ---------------------------
2562 // ---------------------------
2563 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2564 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2565 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2566 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2568 // ---------------------------
2570 // ---------------------------
2571 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2572 UCHAR BbpRssiToDbmDelta;
2573 BBP_R66_TUNING BbpTuning;
2575 // ----------------------------
2577 // ----------------------------
2578 UCHAR RfIcType; // RFIC_xxx
2579 ULONG RfFreqOffset; // Frequency offset for channel switching
2580 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2582 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2583 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2585 // This soft Rx Antenna Diversity mechanism is used only when user set
2586 // RX Antenna = DIVERSITY ON
2587 SOFT_RX_ANT_DIVERSITY RxAnt;
2590 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2591 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2592 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2593 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2595 UCHAR ChannelListNum; // number of channel in ChannelList[]
2598 ULONG Tx20MPwrCfgABand[5];
2599 ULONG Tx20MPwrCfgGBand[5];
2600 ULONG Tx40MPwrCfgABand[5];
2601 ULONG Tx40MPwrCfgGBand[5];
2603 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2604 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2605 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2606 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2607 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2608 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2610 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2611 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2612 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2613 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2614 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2615 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2617 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2618 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2619 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2620 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2623 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2624 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2625 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2626 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2629 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2630 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2631 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2632 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2634 // ----------------------------
2636 // ----------------------------
2637 MCU_LEDCS_STRUC LedCntl;
2638 USHORT Led1; // read from EEPROM 0x3c
2639 USHORT Led2; // EEPROM 0x3e
2640 USHORT Led3; // EEPROM 0x40
2641 UCHAR LedIndicatorStregth;
2642 UCHAR RssiSingalstrengthOffet;
2643 BOOLEAN bLedOnScanning;
2646 /*****************************************************************************************/
2647 /* 802.11 related parameters */
2648 /*****************************************************************************************/
2649 // outgoing BEACON frame buffer and corresponding TXD
2650 TXWI_STRUC BeaconTxWI;
2652 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2654 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2655 PSPOLL_FRAME PsPollFrame;
2656 HEADER_802_11 NullFrame;
2658 //=========AP===========
2661 //=======STA===========
2662 #ifdef CONFIG_STA_SUPPORT
2663 /* Modified by Wu Xi-Kun 4/21/2006 */
2664 // -----------------------------------------------
2665 // STA specific configuration & operation status
2666 // used only when pAd->OpMode == OPMODE_STA
2667 // -----------------------------------------------
2668 STA_ADMIN_CONFIG StaCfg; // user desired settings
2669 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2670 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2671 NDIS_MEDIA_STATE PreMediaState;
2672 #endif // CONFIG_STA_SUPPORT //
2674 //=======Common===========
2675 // OP mode: either AP or STA
2676 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2678 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2680 // MAT related parameters
2682 // configuration: read from Registry & E2PROM
2683 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2684 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2685 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2687 // ------------------------------------------------------
2688 // common configuration to both OPMODE_STA and OPMODE_AP
2689 // ------------------------------------------------------
2690 COMMON_CONFIG CommonCfg;
2693 // AP needs those vaiables for site survey feature.
2694 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2695 BSS_TABLE ScanTab; // store the latest SCAN result
2697 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2698 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2699 NDIS_SPIN_LOCK MacTabLock;
2701 #ifdef DOT11_N_SUPPORT
2703 #endif // DOT11_N_SUPPORT //
2704 NDIS_SPIN_LOCK BATabLock;
2705 RALINK_TIMER_STRUCT RECBATimer;
2707 // encryption/decryption KEY tables
2708 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2710 // RX re-assembly buffer for fragmentation
2711 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2714 COUNTER_802_3 Counters8023; // 802.3 counters
2715 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2716 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2717 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2718 PRIVATE_STRUC PrivateInfo; // Private information & counters
2720 // flags, see fRTMP_ADAPTER_xxx flags
2721 ULONG Flags; // Represent current device status
2722 ULONG PSFlags; // Power Save operation flag.
2724 // current TX sequence #
2727 // Control disconnect / connect event generation
2728 //+++Didn't used anymore
2733 //+++Used only for Station
2734 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2737 ULONG ExtraInfo; // Extra information for displaying status
2738 ULONG SystemErrorBitmap; // b0: E2PROM version error
2740 //+++Didn't used anymore
2741 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2744 // ---------------------------
2746 // ---------------------------
2747 RT_802_11_EVENT_TABLE EventTab;
2752 /*****************************************************************************************/
2753 /* Statistic related parameters */
2754 /*****************************************************************************************/
2756 BOOLEAN bUpdateBcnCntDone;
2757 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2758 // ----------------------------
2760 // ----------------------------
2761 BOOLEAN bBanAllBaSetup;
2762 BOOLEAN bPromiscuous;
2764 // ----------------------------
2765 // rt2860c emulation-use Parameters
2766 // ----------------------------
2769 ULONG cfendaccu[30];
2770 ULONG bacontent[16];
2771 ULONG rxint[RX_RING_SIZE+1];
2774 BOOLEAN bForcePrintTX;
2775 BOOLEAN bForcePrintRX;
2776 BOOLEAN bDisablescanning; //defined in RT2870 USB
2777 BOOLEAN bStaFifoTest;
2778 BOOLEAN bProtectionTest;
2780 BOOLEAN bGenOneHCCA;
2781 BOOLEAN bBroadComHT;
2782 //+++Following add from RT2870 USB.
2784 ULONG BulkOutComplete;
2785 ULONG BulkOutCompleteOther;
2786 ULONG BulkOutCompleteCancel; // seems not use now?
2788 ULONG BulkInComplete;
2789 ULONG BulkInCompleteFail;
2792 struct wificonf WIFItestbed;
2794 #ifdef DOT11_N_SUPPORT
2795 struct reordering_mpdu_pool mpdu_blk_pool;
2796 #endif // DOT11_N_SUPPORT //
2798 ULONG OneSecondnonBEpackets; // record non BE packets per second
2800 #if WIRELESS_EXT >= 12
2801 struct iw_statistics iw_stats;
2804 struct net_device_stats stats;
2806 ULONG TbttTickCount;
2807 #ifdef PCI_MSI_SUPPORT
2809 #endif // PCI_MSI_SUPPORT //
2814 #define TIME_BASE (1000000/OS_HZ)
2815 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2816 UCHAR flg_be_adjust;
2817 ULONG be_adjust_last_time;
2819 #ifdef IKANOS_VX_1X0
2820 struct IKANOS_TX_INFO IkanosTxInfo;
2821 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2822 #endif // IKANOS_VX_1X0 //
2826 RtmpDiagStruct DiagStruct;
2827 #endif // DBG_DIAGNOSE //
2830 UINT8 PM_FlgSuspend;
2831 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2834 // Cisco IAPP format
2836 typedef struct _CISCO_IAPP_CONTENT_
2838 USHORT Length; //IAPP Length
2839 UCHAR MessageType; //IAPP type
2840 UCHAR FunctionCode; //IAPP function type
2841 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2842 UCHAR SourceMAC[MAC_ADDR_LEN];
2843 USHORT Tag; //Tag(element IE) - Adjacent AP report
2844 USHORT TagLength; //Length of element not including 4 byte header
2845 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2846 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2849 UCHAR Ssid[MAX_LEN_OF_SSID];
2850 USHORT Seconds; //Seconds that the client has been disassociated.
2851 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2853 #define DELAYINTMASK 0x0003fffb
2854 #define INTMASK 0x0003fffb
2855 #define IndMask 0x0003fffc
2856 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2857 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2858 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2859 #define TxCoherent 0x00020000 // tx coherent
2860 #define RxCoherent 0x00010000 // rx coherent
2861 #define McuCommand 0x00000200 // mcu
2862 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2863 #define TBTTInt 0x00000800 // TBTT interrupt
2864 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2865 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2866 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2869 typedef struct _RX_BLK_
2871 RT28XX_RXD_STRUC RxD;
2873 PHEADER_802_11 pHeader;
2874 PNDIS_PACKET pRxPacket;
2878 UCHAR UserPriority; // for calculate TKIP MIC using
2882 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2883 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2884 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2887 #define fRX_WDS 0x0001
2888 #define fRX_AMSDU 0x0002
2889 #define fRX_ARALINK 0x0004
2890 #define fRX_HTC 0x0008
2891 #define fRX_PAD 0x0010
2892 #define fRX_AMPDU 0x0020
2893 #define fRX_QOS 0x0040
2894 #define fRX_INFRA 0x0080
2895 #define fRX_EAP 0x0100
2896 #define fRX_MESH 0x0200
2897 #define fRX_APCLI 0x0400
2898 #define fRX_DLS 0x0800
2899 #define fRX_WPI 0x1000
2901 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2902 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2903 #define LENGTH_ARALINK_HEADER_FIELD 2
2905 #define TX_UNKOWN_FRAME 0x00
2906 #define TX_MCAST_FRAME 0x01
2907 #define TX_LEGACY_FRAME 0x02
2908 #define TX_AMPDU_FRAME 0x04
2909 #define TX_AMSDU_FRAME 0x08
2910 #define TX_RALINK_FRAME 0x10
2911 #define TX_FRAG_FRAME 0x20
2914 // Currently the sizeof(TX_BLK) is 148 bytes.
2915 typedef struct _TX_BLK_
2918 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2919 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2920 USHORT TotalFragNum; // Total frame fragments required in one batch
2921 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2923 QUEUE_HEADER TxPacketList;
2924 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2925 HTTRANSMIT_SETTING *pTransmit;
2927 // Following structure used for the characteristics of a specific packet.
2928 PNDIS_PACKET pPacket;
2929 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2930 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2931 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2932 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2933 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2934 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2935 UCHAR HdrPadLen; // recording Header Padding Length;
2936 UCHAR apidx; // The interface associated to this packet
2937 UCHAR Wcid; // The MAC entry associated to this packet
2938 UCHAR UserPriority; // priority class of packet
2939 UCHAR FrameGap; // what kind of IFS this packet use
2940 UCHAR MpduReqNum; // number of fragments of this frame
2941 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2942 UCHAR CipherAlg; // cipher alogrithm
2947 USHORT Flags; //See following definitions for detail.
2949 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2950 ULONG Priv; // Hardware specific value saved in here.
2954 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2955 #define fTX_bAckRequired 0x0002 // the packet need ack response
2956 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2957 #define fTX_bHTRate 0x0008 // allow to use HT rate
2958 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2959 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2960 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2961 #define fTX_bWMM 0x0080 // QOS Data
2963 #define fTX_bClearEAPFrame 0x0100
2965 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
2968 (_pTxBlk->Flags |= _flag) \
2970 (_pTxBlk->Flags &= ~(_flag)) \
2973 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2974 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2975 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2981 //------------------------------------------------------------------------------------------
2985 // Enable & Disable NIC interrupt via writing interrupt mask register
2986 // Since it use ADAPTER structure, it have to be put after structure definition.
2988 __inline VOID NICDisableInterrupt(
2989 IN PRTMP_ADAPTER pAd)
2991 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
2992 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
2993 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
2996 __inline VOID NICEnableInterrupt(
2997 IN PRTMP_ADAPTER pAd)
3000 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3001 // To prevent System hang, we should enalbe the interrupt when
3002 // ASIC is already Wake Up.
3004 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3005 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3006 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3008 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3011 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3013 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3014 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3017 #ifdef RT_BIG_ENDIAN
3018 static inline VOID WriteBackToDescriptor(
3021 IN BOOLEAN DoEncrypt,
3022 IN ULONG DescriptorType)
3026 p1 = ((UINT32 *)Dest);
3027 p2 = ((UINT32 *)Src);
3032 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3036 ========================================================================
3038 Routine Description:
3039 Endian conversion of Tx/Rx descriptor .
3042 pAd Pointer to our adapter
3043 pData Pointer to Tx/Rx descriptor
3044 DescriptorType Direction of the frame
3050 Call this function when read or update descriptor
3051 ========================================================================
3053 static inline VOID RTMPWIEndianChange(
3055 IN ULONG DescriptorType)
3060 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3062 if(DescriptorType == TYPE_TXWI)
3064 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3065 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3069 for(i=0; i < size/4 ; i++)
3070 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3075 ========================================================================
3077 Routine Description:
3078 Endian conversion of Tx/Rx descriptor .
3081 pAd Pointer to our adapter
3082 pData Pointer to Tx/Rx descriptor
3083 DescriptorType Direction of the frame
3089 Call this function when read or update descriptor
3090 ========================================================================
3092 static inline VOID RTMPDescriptorEndianChange(
3094 IN ULONG DescriptorType)
3096 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3097 *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11
3098 *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15
3099 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last
3103 ========================================================================
3105 Routine Description:
3106 Endian conversion of all kinds of 802.11 frames .
3109 pAd Pointer to our adapter
3110 pData Pointer to the 802.11 frame structure
3111 Dir Direction of the frame
3112 FromRxDoneInt Caller is from RxDone interrupt
3118 Call this function when read or update buffer data
3119 ========================================================================
3121 static inline VOID RTMPFrameEndianChange(
3122 IN PRTMP_ADAPTER pAd,
3125 IN BOOLEAN FromRxDoneInt)
3127 PHEADER_802_11 pFrame;
3130 // swab 16 bit fields - Frame Control field
3133 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3136 pFrame = (PHEADER_802_11) pData;
3137 pMacHdr = (PUCHAR) pFrame;
3139 // swab 16 bit fields - Duration/ID field
3140 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3142 // swab 16 bit fields - Sequence Control field
3143 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3145 if(pFrame->FC.Type == BTYPE_MGMT)
3147 switch(pFrame->FC.SubType)
3149 case SUBTYPE_ASSOC_REQ:
3150 case SUBTYPE_REASSOC_REQ:
3151 // swab 16 bit fields - CapabilityInfo field
3152 pMacHdr += sizeof(HEADER_802_11);
3153 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3155 // swab 16 bit fields - Listen Interval field
3157 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3160 case SUBTYPE_ASSOC_RSP:
3161 case SUBTYPE_REASSOC_RSP:
3162 // swab 16 bit fields - CapabilityInfo field
3163 pMacHdr += sizeof(HEADER_802_11);
3164 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3166 // swab 16 bit fields - Status Code field
3168 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3170 // swab 16 bit fields - AID field
3172 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3176 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3177 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3178 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3182 // swab 16 bit fields - Auth Alg No. field
3183 pMacHdr += sizeof(HEADER_802_11);
3184 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3186 // swab 16 bit fields - Auth Seq No. field
3188 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3190 // swab 16 bit fields - Status Code field
3192 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3196 case SUBTYPE_BEACON:
3197 case SUBTYPE_PROBE_RSP:
3198 // swab 16 bit fields - BeaconInterval field
3199 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3200 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3202 // swab 16 bit fields - CapabilityInfo field
3203 pMacHdr += sizeof(USHORT);
3204 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3207 case SUBTYPE_DEAUTH:
3208 case SUBTYPE_DISASSOC:
3209 // swab 16 bit fields - Reason code field
3210 pMacHdr += sizeof(HEADER_802_11);
3211 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3215 else if( pFrame->FC.Type == BTYPE_DATA )
3218 else if(pFrame->FC.Type == BTYPE_CNTL)
3220 switch(pFrame->FC.SubType)
3222 case SUBTYPE_BLOCK_ACK_REQ:
3224 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3225 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3226 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3229 case SUBTYPE_BLOCK_ACK:
3230 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3231 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3235 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3236 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3242 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3245 // swab 16 bit fields - Frame Control
3246 if(Dir == DIR_WRITE)
3248 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3251 #endif // RT_BIG_ENDIAN //
3254 static inline VOID ConvertMulticastIP2MAC(
3256 IN PUCHAR *ppMacAddr,
3257 IN UINT16 ProtoType)
3259 if (pIpAddr == NULL)
3262 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3268 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3269 *(*ppMacAddr) = 0x33;
3270 *(*ppMacAddr + 1) = 0x33;
3271 *(*ppMacAddr + 2) = pIpAddr[12];
3272 *(*ppMacAddr + 3) = pIpAddr[13];
3273 *(*ppMacAddr + 4) = pIpAddr[14];
3274 *(*ppMacAddr + 5) = pIpAddr[15];
3279 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3280 *(*ppMacAddr) = 0x01;
3281 *(*ppMacAddr + 1) = 0x00;
3282 *(*ppMacAddr + 2) = 0x5e;
3283 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3284 *(*ppMacAddr + 4) = pIpAddr[2];
3285 *(*ppMacAddr + 5) = pIpAddr[3];
3292 BOOLEAN RTMPCheckForHang(
3293 IN NDIS_HANDLE MiniportAdapterContext
3297 IN NDIS_HANDLE MiniportAdapterContext
3301 // Private routines in rtmp_init.c
3303 NDIS_STATUS RTMPAllocAdapterBlock(
3305 OUT PRTMP_ADAPTER *ppAdapter
3308 NDIS_STATUS RTMPAllocTxRxRingMemory(
3309 IN PRTMP_ADAPTER pAd
3312 NDIS_STATUS RTMPFindAdapter(
3313 IN PRTMP_ADAPTER pAd,
3314 IN NDIS_HANDLE WrapperConfigurationContext
3317 NDIS_STATUS RTMPReadParametersHook(
3318 IN PRTMP_ADAPTER pAd
3321 VOID RTMPFreeAdapter(
3322 IN PRTMP_ADAPTER pAd
3325 NDIS_STATUS NICReadRegParameters(
3326 IN PRTMP_ADAPTER pAd,
3327 IN NDIS_HANDLE WrapperConfigurationContext
3331 VOID NICReadEEPROMParameters(
3332 IN PRTMP_ADAPTER pAd,
3333 IN PUCHAR mac_addr);
3335 VOID NICInitAsicFromEEPROM(
3336 IN PRTMP_ADAPTER pAd);
3338 VOID NICInitTxRxRingAndBacklogQueue(
3339 IN PRTMP_ADAPTER pAd);
3341 NDIS_STATUS NICInitializeAdapter(
3342 IN PRTMP_ADAPTER pAd,
3343 IN BOOLEAN bHardReset);
3345 NDIS_STATUS NICInitializeAsic(
3346 IN PRTMP_ADAPTER pAd,
3347 IN BOOLEAN bHardReset);
3349 VOID NICRestoreBBPValue(
3350 IN PRTMP_ADAPTER pAd);
3353 IN PRTMP_ADAPTER pAd);
3355 VOID RTMPRingCleanUp(
3356 IN PRTMP_ADAPTER pAd,
3360 IN PRTMP_ADAPTER pAd);
3362 NDIS_STATUS DbgSendPacket(
3363 IN PRTMP_ADAPTER pAd,
3364 IN PNDIS_PACKET pPacket);
3367 IN PRTMP_ADAPTER pAd);
3369 VOID NICResetFromError(
3370 IN PRTMP_ADAPTER pAd);
3372 VOID NICEraseFirmware(
3373 IN PRTMP_ADAPTER pAd);
3375 NDIS_STATUS NICLoadFirmware(
3376 IN PRTMP_ADAPTER pAd);
3378 NDIS_STATUS NICLoadRateSwitchingParams(
3379 IN PRTMP_ADAPTER pAd);
3381 BOOLEAN NICCheckForHang(
3382 IN PRTMP_ADAPTER pAd);
3384 VOID NICUpdateFifoStaCounters(
3385 IN PRTMP_ADAPTER pAd);
3387 VOID NICUpdateRawCounters(
3388 IN PRTMP_ADAPTER pAd);
3390 ULONG RTMPNotAllZero(
3394 VOID RTMPZeroMemory(
3398 ULONG RTMPCompareMemory(
3403 VOID RTMPMoveMemory(
3416 VOID RTMPPatchMacBbpBug(
3417 IN PRTMP_ADAPTER pAd);
3419 VOID RTMPPatchCardBus(
3420 IN PRTMP_ADAPTER pAdapter);
3422 VOID RTMPPatchRalinkCardBus(
3423 IN PRTMP_ADAPTER pAdapter,
3426 ULONG RTMPReadCBConfig(
3432 VOID RTMPWriteCBConfig(
3440 IN PRTMP_ADAPTER pAd,
3441 IN PRALINK_TIMER_STRUCT pTimer,
3442 IN PVOID pTimerFunc,
3447 IN PRALINK_TIMER_STRUCT pTimer,
3452 IN PRALINK_TIMER_STRUCT pTimer,
3455 VOID RTMPCancelTimer(
3456 IN PRALINK_TIMER_STRUCT pTimer,
3457 OUT BOOLEAN *pCancelled);
3460 IN PRTMP_ADAPTER pAd,
3463 VOID RTMPSetSignalLED(
3464 IN PRTMP_ADAPTER pAd,
3465 IN NDIS_802_11_RSSI Dbm);
3467 VOID RTMPEnableRxTx(
3468 IN PRTMP_ADAPTER pAd);
3471 // prototype in action.c
3473 VOID ActionStateMachineInit(
3474 IN PRTMP_ADAPTER pAd,
3475 IN STATE_MACHINE *S,
3476 OUT STATE_MACHINE_FUNC Trans[]);
3478 VOID MlmeADDBAAction(
3479 IN PRTMP_ADAPTER pAd,
3480 IN MLME_QUEUE_ELEM *Elem);
3482 VOID MlmeDELBAAction(
3483 IN PRTMP_ADAPTER pAd,
3484 IN MLME_QUEUE_ELEM *Elem);
3487 IN PRTMP_ADAPTER pAd,
3488 IN MLME_QUEUE_ELEM *Elem);
3490 VOID MlmeInvalidAction(
3491 IN PRTMP_ADAPTER pAd,
3492 IN MLME_QUEUE_ELEM *Elem);
3495 IN PRTMP_ADAPTER pAd,
3496 IN MLME_QUEUE_ELEM *Elem);
3498 #ifdef DOT11_N_SUPPORT
3499 VOID PeerAddBAReqAction(
3500 IN PRTMP_ADAPTER pAd,
3501 IN MLME_QUEUE_ELEM *Elem);
3503 VOID PeerAddBARspAction(
3504 IN PRTMP_ADAPTER pAd,
3505 IN MLME_QUEUE_ELEM *Elem);
3507 VOID PeerDelBAAction(
3508 IN PRTMP_ADAPTER pAd,
3509 IN MLME_QUEUE_ELEM *Elem);
3512 IN PRTMP_ADAPTER pAd,
3513 IN MLME_QUEUE_ELEM *Elem);
3514 #endif // DOT11_N_SUPPORT //
3516 VOID SendPSMPAction(
3517 IN PRTMP_ADAPTER pAd,
3522 #ifdef DOT11N_DRAFT3
3523 VOID SendBSS2040CoexistMgmtAction(
3524 IN PRTMP_ADAPTER pAd,
3529 VOID SendNotifyBWActionFrame(
3530 IN PRTMP_ADAPTER pAd,
3534 BOOLEAN ChannelSwitchSanityCheck(
3535 IN PRTMP_ADAPTER pAd,
3537 IN UCHAR NewChannel,
3538 IN UCHAR Secondary);
3540 VOID ChannelSwitchAction(
3541 IN PRTMP_ADAPTER pAd,
3544 IN UCHAR Secondary);
3546 ULONG BuildIntolerantChannelRep(
3547 IN PRTMP_ADAPTER pAd,
3550 VOID Update2040CoexistFrameAndNotify(
3551 IN PRTMP_ADAPTER pAd,
3553 IN BOOLEAN bAddIntolerantCha);
3555 VOID Send2040CoexistAction(
3556 IN PRTMP_ADAPTER pAd,
3558 IN BOOLEAN bAddIntolerantCha);
3559 #endif // DOT11N_DRAFT3 //
3562 IN PRTMP_ADAPTER pAd,
3563 IN MLME_QUEUE_ELEM *Elem);
3565 VOID PeerPublicAction(
3566 IN PRTMP_ADAPTER pAd,
3567 IN MLME_QUEUE_ELEM *Elem);
3569 #ifdef CONFIG_STA_SUPPORT
3570 VOID StaPublicAction(
3571 IN PRTMP_ADAPTER pAd,
3572 IN UCHAR Bss2040Coexist);
3573 #endif // CONFIG_STA_SUPPORT //
3576 VOID PeerBSSTranAction(
3577 IN PRTMP_ADAPTER pAd,
3578 IN MLME_QUEUE_ELEM *Elem);
3580 #ifdef DOT11_N_SUPPORT
3582 IN PRTMP_ADAPTER pAd,
3583 IN MLME_QUEUE_ELEM *Elem);
3584 #endif // DOT11_N_SUPPORT //
3587 IN PRTMP_ADAPTER pAd,
3588 IN MLME_QUEUE_ELEM *Elem);
3590 #ifdef DOT11_N_SUPPORT
3591 VOID RECBATimerTimeout(
3592 IN PVOID SystemSpecific1,
3593 IN PVOID FunctionContext,
3594 IN PVOID SystemSpecific2,
3595 IN PVOID SystemSpecific3);
3597 VOID ORIBATimerTimeout(
3598 IN PRTMP_ADAPTER pAd);
3600 VOID SendRefreshBAR(
3601 IN PRTMP_ADAPTER pAd,
3602 IN MAC_TABLE_ENTRY *pEntry);
3603 #endif // DOT11_N_SUPPORT //
3606 IN PRTMP_ADAPTER pAd,
3607 IN OUT PHEADER_802_11 pHdr80211,
3613 IN PRTMP_ADAPTER pAd,
3614 IN OUT PFRAME_BAR pCntlBar,
3618 VOID InsertActField(
3619 IN PRTMP_ADAPTER pAd,
3620 OUT PUCHAR pFrameBuf,
3621 OUT PULONG pFrameLen,
3625 BOOLEAN QosBADataParse(
3626 IN PRTMP_ADAPTER pAd,
3628 IN PUCHAR p8023Header,
3632 IN UCHAR DataOffset,
3634 IN UINT CurRxIndex);
3636 #ifdef DOT11_N_SUPPORT
3637 BOOLEAN CntlEnqueueForRecv(
3638 IN PRTMP_ADAPTER pAd,
3641 IN PFRAME_BA_REQ pMsg);
3643 VOID BaAutoManSwitch(
3644 IN PRTMP_ADAPTER pAd);
3645 #endif // DOT11_N_SUPPORT //
3648 IN PRTMP_ADAPTER pAd,
3649 IN UCHAR BatRecIdx);
3652 // Private routines in rtmp_data.c
3654 BOOLEAN RTMPHandleRxDoneInterrupt(
3655 IN PRTMP_ADAPTER pAd);
3657 VOID RTMPHandleTxDoneInterrupt(
3658 IN PRTMP_ADAPTER pAd);
3660 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3661 IN PRTMP_ADAPTER pAd,
3662 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3664 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3665 IN PRTMP_ADAPTER pAd);
3667 VOID RTMPHandleTBTTInterrupt(
3668 IN PRTMP_ADAPTER pAd);
3670 VOID RTMPHandlePreTBTTInterrupt(
3671 IN PRTMP_ADAPTER pAd);
3673 void RTMPHandleTwakeupInterrupt(
3674 IN PRTMP_ADAPTER pAd);
3676 VOID RTMPHandleRxCoherentInterrupt(
3677 IN PRTMP_ADAPTER pAd);
3679 BOOLEAN TxFrameIsAggregatible(
3680 IN PRTMP_ADAPTER pAd,
3681 IN PUCHAR pPrevAddr1,
3682 IN PUCHAR p8023hdr);
3684 BOOLEAN PeerIsAggreOn(
3685 IN PRTMP_ADAPTER pAd,
3687 IN PMAC_TABLE_ENTRY pMacEntry);
3689 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3690 IN PNDIS_BUFFER pFirstBuffer,
3691 IN UCHAR DesiredOffset,
3695 NDIS_STATUS STASendPacket(
3696 IN PRTMP_ADAPTER pAd,
3697 IN PNDIS_PACKET pPacket);
3699 VOID STASendPackets(
3700 IN NDIS_HANDLE MiniportAdapterContext,
3701 IN PPNDIS_PACKET ppPacketArray,
3702 IN UINT NumberOfPackets);
3704 VOID RTMPDeQueuePacket(
3705 IN PRTMP_ADAPTER pAd,
3706 IN BOOLEAN bIntContext,
3708 IN UCHAR Max_Tx_Packets);
3710 NDIS_STATUS RTMPHardTransmit(
3711 IN PRTMP_ADAPTER pAd,
3712 IN PNDIS_PACKET pPacket,
3714 OUT PULONG pFreeTXDLeft);
3716 NDIS_STATUS STAHardTransmit(
3717 IN PRTMP_ADAPTER pAd,
3721 VOID STARxEAPOLFrameIndicate(
3722 IN PRTMP_ADAPTER pAd,
3723 IN MAC_TABLE_ENTRY *pEntry,
3725 IN UCHAR FromWhichBSSID);
3727 NDIS_STATUS RTMPFreeTXDRequest(
3728 IN PRTMP_ADAPTER pAd,
3730 IN UCHAR NumberRequired,
3731 IN PUCHAR FreeNumberIs);
3733 NDIS_STATUS MlmeHardTransmit(
3734 IN PRTMP_ADAPTER pAd,
3736 IN PNDIS_PACKET pPacket);
3738 NDIS_STATUS MlmeHardTransmitMgmtRing(
3739 IN PRTMP_ADAPTER pAd,
3741 IN PNDIS_PACKET pPacket);
3743 NDIS_STATUS MlmeHardTransmitTxRing(
3744 IN PRTMP_ADAPTER pAd,
3746 IN PNDIS_PACKET pPacket);
3748 USHORT RTMPCalcDuration(
3749 IN PRTMP_ADAPTER pAd,
3754 IN PRTMP_ADAPTER pAd,
3755 IN PTXWI_STRUC pTxWI,
3758 IN BOOLEAN InsTimestamp,
3761 IN BOOLEAN NSeq, // HW new a sequence.
3770 IN HTTRANSMIT_SETTING *pTransmit);
3773 VOID RTMPWriteTxWI_Data(
3774 IN PRTMP_ADAPTER pAd,
3775 IN OUT PTXWI_STRUC pTxWI,
3779 VOID RTMPWriteTxWI_Cache(
3780 IN PRTMP_ADAPTER pAd,
3781 IN OUT PTXWI_STRUC pTxWI,
3784 VOID RTMPWriteTxDescriptor(
3785 IN PRTMP_ADAPTER pAd,
3790 VOID RTMPSuspendMsduTransmission(
3791 IN PRTMP_ADAPTER pAd);
3793 VOID RTMPResumeMsduTransmission(
3794 IN PRTMP_ADAPTER pAd);
3796 NDIS_STATUS MiniportMMRequest(
3797 IN PRTMP_ADAPTER pAd,
3802 VOID RTMPSendNullFrame(
3803 IN PRTMP_ADAPTER pAd,
3805 IN BOOLEAN bQosNull);
3807 VOID RTMPSendDisassociationFrame(
3808 IN PRTMP_ADAPTER pAd);
3810 VOID RTMPSendRTSFrame(
3811 IN PRTMP_ADAPTER pAd,
3813 IN unsigned int NextMpduSize,
3816 IN USHORT AckDuration,
3821 NDIS_STATUS RTMPApplyPacketFilter(
3822 IN PRTMP_ADAPTER pAd,
3823 IN PRT28XX_RXD_STRUC pRxD,
3824 IN PHEADER_802_11 pHeader);
3826 PQUEUE_HEADER RTMPCheckTxSwQueue(
3827 IN PRTMP_ADAPTER pAd,
3830 #ifdef CONFIG_STA_SUPPORT
3831 VOID RTMPReportMicError(
3832 IN PRTMP_ADAPTER pAd,
3833 IN PCIPHER_KEY pWpaKey);
3835 VOID WpaMicFailureReportFrame(
3836 IN PRTMP_ADAPTER pAd,
3837 IN MLME_QUEUE_ELEM *Elem);
3839 VOID WpaDisassocApAndBlockAssoc(
3840 IN PVOID SystemSpecific1,
3841 IN PVOID FunctionContext,
3842 IN PVOID SystemSpecific2,
3843 IN PVOID SystemSpecific3);
3844 #endif // CONFIG_STA_SUPPORT //
3846 NDIS_STATUS RTMPCloneNdisPacket(
3847 IN PRTMP_ADAPTER pAd,
3848 IN BOOLEAN pInsAMSDUHdr,
3849 IN PNDIS_PACKET pInPacket,
3850 OUT PNDIS_PACKET *ppOutPacket);
3852 NDIS_STATUS RTMPAllocateNdisPacket(
3853 IN PRTMP_ADAPTER pAd,
3854 IN PNDIS_PACKET *pPacket,
3860 VOID RTMPFreeNdisPacket(
3861 IN PRTMP_ADAPTER pAd,
3862 IN PNDIS_PACKET pPacket);
3864 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3865 IN PRTMP_ADAPTER pAd,
3868 BOOLEAN RTMPCheckDHCPFrame(
3869 IN PRTMP_ADAPTER pAd,
3870 IN PNDIS_PACKET pPacket);
3873 BOOLEAN RTMPCheckEtherType(
3874 IN PRTMP_ADAPTER pAd,
3875 IN PNDIS_PACKET pPacket);
3878 VOID RTMPCckBbpTuning(
3879 IN PRTMP_ADAPTER pAd,
3883 // Private routines in rtmp_wep.c
3885 VOID RTMPInitWepEngine(
3886 IN PRTMP_ADAPTER pAd,
3892 VOID RTMPEncryptData(
3893 IN PRTMP_ADAPTER pAd,
3898 BOOLEAN RTMPDecryptData(
3899 IN PRTMP_ADAPTER pAdapter,
3904 BOOLEAN RTMPSoftDecryptWEP(
3905 IN PRTMP_ADAPTER pAd,
3907 IN ULONG DataByteCnt,
3908 IN PCIPHER_KEY pGroupKey);
3911 IN PRTMP_ADAPTER pAd,
3915 IN PARCFOURCONTEXT Ctx,
3920 IN PARCFOURCONTEXT Ctx);
3922 VOID ARCFOUR_DECRYPT(
3923 IN PARCFOURCONTEXT Ctx,
3928 VOID ARCFOUR_ENCRYPT(
3929 IN PARCFOURCONTEXT Ctx,
3934 VOID WPAARCFOUR_ENCRYPT(
3935 IN PARCFOURCONTEXT Ctx,
3940 UINT RTMP_CALC_FCS32(
3949 // Asic/RF/BBP related functions
3951 VOID AsicAdjustTxPower(
3952 IN PRTMP_ADAPTER pAd);
3954 VOID AsicUpdateProtect(
3955 IN PRTMP_ADAPTER pAd,
3956 IN USHORT OperaionMode,
3958 IN BOOLEAN bDisableBGProtect,
3959 IN BOOLEAN bNonGFExist);
3961 VOID AsicSwitchChannel(
3962 IN PRTMP_ADAPTER pAd,
3966 VOID AsicLockChannel(
3967 IN PRTMP_ADAPTER pAd,
3970 VOID AsicAntennaSelect(
3971 IN PRTMP_ADAPTER pAd,
3974 VOID AsicAntennaSetting(
3975 IN PRTMP_ADAPTER pAd,
3976 IN ABGBAND_STATE BandState);
3978 VOID AsicRfTuningExec(
3979 IN PVOID SystemSpecific1,
3980 IN PVOID FunctionContext,
3981 IN PVOID SystemSpecific2,
3982 IN PVOID SystemSpecific3);
3984 #ifdef CONFIG_STA_SUPPORT
3985 VOID AsicSleepThenAutoWakeup(
3986 IN PRTMP_ADAPTER pAd,
3987 IN USHORT TbttNumToNextWakeUp);
3989 VOID AsicForceSleep(
3990 IN PRTMP_ADAPTER pAd);
3992 VOID AsicForceWakeup(
3993 IN PRTMP_ADAPTER pAd,
3995 #endif // CONFIG_STA_SUPPORT //
3998 IN PRTMP_ADAPTER pAd,
4001 VOID AsicSetMcastWC(
4002 IN PRTMP_ADAPTER pAd);
4004 VOID AsicDelWcidTab(
4005 IN PRTMP_ADAPTER pAd,
4009 IN PRTMP_ADAPTER pAd);
4011 VOID AsicDisableRDG(
4012 IN PRTMP_ADAPTER pAd);
4014 VOID AsicDisableSync(
4015 IN PRTMP_ADAPTER pAd);
4017 VOID AsicEnableBssSync(
4018 IN PRTMP_ADAPTER pAd);
4020 VOID AsicEnableIbssSync(
4021 IN PRTMP_ADAPTER pAd);
4023 VOID AsicSetEdcaParm(
4024 IN PRTMP_ADAPTER pAd,
4025 IN PEDCA_PARM pEdcaParm);
4027 VOID AsicSetSlotTime(
4028 IN PRTMP_ADAPTER pAd,
4029 IN BOOLEAN bUseShortSlotTime);
4031 VOID AsicAddSharedKeyEntry(
4032 IN PRTMP_ADAPTER pAd,
4040 VOID AsicRemoveSharedKeyEntry(
4041 IN PRTMP_ADAPTER pAd,
4045 VOID AsicUpdateWCIDAttribute(
4046 IN PRTMP_ADAPTER pAd,
4050 IN BOOLEAN bUsePairewiseKeyTable);
4052 VOID AsicUpdateWCIDIVEIV(
4053 IN PRTMP_ADAPTER pAd,
4058 VOID AsicUpdateRxWCIDTable(
4059 IN PRTMP_ADAPTER pAd,
4063 VOID AsicAddKeyEntry(
4064 IN PRTMP_ADAPTER pAd,
4068 IN PCIPHER_KEY pCipherKey,
4069 IN BOOLEAN bUsePairewiseKeyTable,
4072 VOID AsicAddPairwiseKeyEntry(
4073 IN PRTMP_ADAPTER pAd,
4076 IN CIPHER_KEY *pCipherKey);
4078 VOID AsicRemovePairwiseKeyEntry(
4079 IN PRTMP_ADAPTER pAd,
4083 BOOLEAN AsicSendCommandToMcu(
4084 IN PRTMP_ADAPTER pAd,
4090 BOOLEAN AsicCheckCommanOk(
4091 IN PRTMP_ADAPTER pAd,
4094 VOID MacAddrRandomBssid(
4095 IN PRTMP_ADAPTER pAd,
4098 VOID MgtMacHeaderInit(
4099 IN PRTMP_ADAPTER pAd,
4100 IN OUT PHEADER_802_11 pHdr80211,
4107 IN PRTMP_ADAPTER pAd);
4110 IN PRTMP_ADAPTER pAd);
4116 #ifdef DOT11_N_SUPPORT
4118 IN PRTMP_ADAPTER pAd,
4120 #endif // DOT11_N_SUPPORT //
4122 ULONG BssTableSearch(
4127 ULONG BssSsidTableSearch(
4134 ULONG BssTableSearchWithSSID(
4141 VOID BssTableDeleteEntry(
4142 IN OUT PBSS_TABLE pTab,
4146 #ifdef DOT11_N_SUPPORT
4147 VOID BATableDeleteORIEntry(
4148 IN OUT PRTMP_ADAPTER pAd,
4149 IN BA_ORI_ENTRY *pBAORIEntry);
4151 VOID BATableDeleteRECEntry(
4152 IN OUT PRTMP_ADAPTER pAd,
4153 IN BA_REC_ENTRY *pBARECEntry);
4155 VOID BATableTearORIEntry(
4156 IN OUT PRTMP_ADAPTER pAd,
4159 IN BOOLEAN bForceDelete,
4162 VOID BATableTearRECEntry(
4163 IN OUT PRTMP_ADAPTER pAd,
4167 #endif // DOT11_N_SUPPORT //
4170 IN PRTMP_ADAPTER pAd,
4171 OUT PBSS_ENTRY pBss,
4176 IN USHORT BeaconPeriod,
4179 IN USHORT CapabilityInfo,
4181 IN UCHAR SupRateLen,
4183 IN UCHAR ExtRateLen,
4184 IN HT_CAPABILITY_IE *pHtCapability,
4185 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4186 IN UCHAR HtCapabilityLen,
4187 IN UCHAR AddHtInfoLen,
4188 IN UCHAR NewExtChanOffset,
4191 IN LARGE_INTEGER TimeStamp,
4193 IN PEDCA_PARM pEdcaParm,
4194 IN PQOS_CAPABILITY_PARM pQosCapability,
4195 IN PQBSS_LOAD_PARM pQbssLoad,
4196 IN USHORT LengthVIE,
4197 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4199 ULONG BssTableSetEntry(
4200 IN PRTMP_ADAPTER pAd,
4201 OUT PBSS_TABLE pTab,
4206 IN USHORT BeaconPeriod,
4209 IN USHORT CapabilityInfo,
4211 IN UCHAR SupRateLen,
4213 IN UCHAR ExtRateLen,
4214 IN HT_CAPABILITY_IE *pHtCapability,
4215 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4216 IN UCHAR HtCapabilityLen,
4217 IN UCHAR AddHtInfoLen,
4218 IN UCHAR NewExtChanOffset,
4221 IN LARGE_INTEGER TimeStamp,
4223 IN PEDCA_PARM pEdcaParm,
4224 IN PQOS_CAPABILITY_PARM pQosCapability,
4225 IN PQBSS_LOAD_PARM pQbssLoad,
4226 IN USHORT LengthVIE,
4227 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4229 #ifdef DOT11_N_SUPPORT
4230 VOID BATableInsertEntry(
4231 IN PRTMP_ADAPTER pAd,
4233 IN USHORT TimeOutValue,
4234 IN USHORT StartingSeq,
4237 IN UCHAR OriginatorStatus,
4238 IN BOOLEAN IsRecipient);
4240 #ifdef DOT11N_DRAFT3
4241 VOID Bss2040CoexistTimeOut(
4242 IN PVOID SystemSpecific1,
4243 IN PVOID FunctionContext,
4244 IN PVOID SystemSpecific2,
4245 IN PVOID SystemSpecific3);
4249 IN PRTMP_ADAPTER pAd);
4251 ULONG TriEventTableSetEntry(
4252 IN PRTMP_ADAPTER pAd,
4253 OUT TRIGGER_EVENT_TAB *Tab,
4255 IN HT_CAPABILITY_IE *pHtCapability,
4256 IN UCHAR HtCapabilityLen,
4258 IN UCHAR ChannelNo);
4260 VOID TriEventCounterMaintenance(
4261 IN PRTMP_ADAPTER pAd);
4262 #endif // DOT11N_DRAFT3 //
4263 #endif // DOT11_N_SUPPORT //
4265 VOID BssTableSsidSort(
4266 IN PRTMP_ADAPTER pAd,
4267 OUT BSS_TABLE *OutTab,
4271 VOID BssTableSortByRssi(
4272 IN OUT BSS_TABLE *OutTab);
4274 VOID BssCipherParse(
4275 IN OUT PBSS_ENTRY pBss);
4277 NDIS_STATUS MlmeQueueInit(
4278 IN MLME_QUEUE *Queue);
4280 VOID MlmeQueueDestroy(
4281 IN MLME_QUEUE *Queue);
4283 BOOLEAN MlmeEnqueue(
4284 IN PRTMP_ADAPTER pAd,
4290 BOOLEAN MlmeEnqueueForRecv(
4291 IN PRTMP_ADAPTER pAd,
4293 IN ULONG TimeStampHigh,
4294 IN ULONG TimeStampLow,
4303 BOOLEAN MlmeDequeue(
4304 IN MLME_QUEUE *Queue,
4305 OUT MLME_QUEUE_ELEM **Elem);
4307 VOID MlmeRestartStateMachine(
4308 IN PRTMP_ADAPTER pAd);
4310 BOOLEAN MlmeQueueEmpty(
4311 IN MLME_QUEUE *Queue);
4313 BOOLEAN MlmeQueueFull(
4314 IN MLME_QUEUE *Queue);
4316 BOOLEAN MsgTypeSubst(
4317 IN PRTMP_ADAPTER pAd,
4318 IN PFRAME_802_11 pFrame,
4322 VOID StateMachineInit(
4323 IN STATE_MACHINE *Sm,
4324 IN STATE_MACHINE_FUNC Trans[],
4327 IN STATE_MACHINE_FUNC DefFunc,
4331 VOID StateMachineSetAction(
4332 IN STATE_MACHINE *S,
4335 IN STATE_MACHINE_FUNC F);
4337 VOID StateMachinePerformAction(
4338 IN PRTMP_ADAPTER pAd,
4339 IN STATE_MACHINE *S,
4340 IN MLME_QUEUE_ELEM *Elem);
4343 IN PRTMP_ADAPTER pAd,
4344 IN MLME_QUEUE_ELEM *Elem);
4346 VOID AssocStateMachineInit(
4347 IN PRTMP_ADAPTER pAd,
4348 IN STATE_MACHINE *Sm,
4349 OUT STATE_MACHINE_FUNC Trans[]);
4351 VOID ReassocTimeout(
4352 IN PVOID SystemSpecific1,
4353 IN PVOID FunctionContext,
4354 IN PVOID SystemSpecific2,
4355 IN PVOID SystemSpecific3);
4358 IN PVOID SystemSpecific1,
4359 IN PVOID FunctionContext,
4360 IN PVOID SystemSpecific2,
4361 IN PVOID SystemSpecific3);
4363 VOID DisassocTimeout(
4364 IN PVOID SystemSpecific1,
4365 IN PVOID FunctionContext,
4366 IN PVOID SystemSpecific2,
4367 IN PVOID SystemSpecific3);
4369 //----------------------------------------------
4370 VOID MlmeDisassocReqAction(
4371 IN PRTMP_ADAPTER pAd,
4372 IN MLME_QUEUE_ELEM *Elem);
4374 VOID MlmeAssocReqAction(
4375 IN PRTMP_ADAPTER pAd,
4376 IN MLME_QUEUE_ELEM *Elem);
4378 VOID MlmeReassocReqAction(
4379 IN PRTMP_ADAPTER pAd,
4380 IN MLME_QUEUE_ELEM *Elem);
4382 VOID MlmeDisassocReqAction(
4383 IN PRTMP_ADAPTER pAd,
4384 IN MLME_QUEUE_ELEM *Elem);
4386 VOID PeerAssocRspAction(
4387 IN PRTMP_ADAPTER pAd,
4388 IN MLME_QUEUE_ELEM *Elem);
4390 VOID PeerReassocRspAction(
4391 IN PRTMP_ADAPTER pAd,
4392 IN MLME_QUEUE_ELEM *Elem);
4394 VOID PeerDisassocAction(
4395 IN PRTMP_ADAPTER pAd,
4396 IN MLME_QUEUE_ELEM *Elem);
4398 VOID DisassocTimeoutAction(
4399 IN PRTMP_ADAPTER pAd,
4400 IN MLME_QUEUE_ELEM *Elem);
4402 VOID AssocTimeoutAction(
4403 IN PRTMP_ADAPTER pAd,
4404 IN MLME_QUEUE_ELEM *Elem);
4406 VOID ReassocTimeoutAction(
4407 IN PRTMP_ADAPTER pAd,
4408 IN MLME_QUEUE_ELEM *Elem);
4411 IN PRTMP_ADAPTER pAd,
4414 VOID SwitchBetweenWepAndCkip(
4415 IN PRTMP_ADAPTER pAd);
4417 VOID InvalidStateWhenAssoc(
4418 IN PRTMP_ADAPTER pAd,
4419 IN MLME_QUEUE_ELEM *Elem);
4421 VOID InvalidStateWhenReassoc(
4422 IN PRTMP_ADAPTER pAd,
4423 IN MLME_QUEUE_ELEM *Elem);
4425 VOID InvalidStateWhenDisassociate(
4426 IN PRTMP_ADAPTER pAd,
4427 IN MLME_QUEUE_ELEM *Elem);
4431 IN PRTMP_ADAPTER pAd);
4433 VOID ComposeNullFrame(
4434 IN PRTMP_ADAPTER pAd);
4437 IN PRTMP_ADAPTER pAd,
4439 IN USHORT CapabilityInfo,
4442 IN UCHAR SupRateLen,
4444 IN UCHAR ExtRateLen,
4445 IN PEDCA_PARM pEdcaParm,
4446 IN HT_CAPABILITY_IE *pHtCapability,
4447 IN UCHAR HtCapabilityLen,
4448 IN ADD_HT_INFO_IE *pAddHtInfo);
4450 VOID AuthStateMachineInit(
4451 IN PRTMP_ADAPTER pAd,
4452 IN PSTATE_MACHINE sm,
4453 OUT STATE_MACHINE_FUNC Trans[]);
4456 IN PVOID SystemSpecific1,
4457 IN PVOID FunctionContext,
4458 IN PVOID SystemSpecific2,
4459 IN PVOID SystemSpecific3);
4461 VOID MlmeAuthReqAction(
4462 IN PRTMP_ADAPTER pAd,
4463 IN MLME_QUEUE_ELEM *Elem);
4465 VOID PeerAuthRspAtSeq2Action(
4466 IN PRTMP_ADAPTER pAd,
4467 IN MLME_QUEUE_ELEM *Elem);
4469 VOID PeerAuthRspAtSeq4Action(
4470 IN PRTMP_ADAPTER pAd,
4471 IN MLME_QUEUE_ELEM *Elem);
4473 VOID AuthTimeoutAction(
4474 IN PRTMP_ADAPTER pAd,
4475 IN MLME_QUEUE_ELEM *Elem);
4478 IN PRTMP_ADAPTER pAd,
4481 VOID MlmeDeauthReqAction(
4482 IN PRTMP_ADAPTER pAd,
4483 IN MLME_QUEUE_ELEM *Elem);
4485 VOID InvalidStateWhenAuth(
4486 IN PRTMP_ADAPTER pAd,
4487 IN MLME_QUEUE_ELEM *Elem);
4489 //=============================================
4491 VOID AuthRspStateMachineInit(
4492 IN PRTMP_ADAPTER pAd,
4493 IN PSTATE_MACHINE Sm,
4494 IN STATE_MACHINE_FUNC Trans[]);
4496 VOID PeerDeauthAction(
4497 IN PRTMP_ADAPTER pAd,
4498 IN MLME_QUEUE_ELEM *Elem);
4500 VOID PeerAuthSimpleRspGenAndSend(
4501 IN PRTMP_ADAPTER pAd,
4502 IN PHEADER_802_11 pHdr80211,
4509 // Private routines in dls.c
4512 //========================================
4514 VOID SyncStateMachineInit(
4515 IN PRTMP_ADAPTER pAd,
4516 IN STATE_MACHINE *Sm,
4517 OUT STATE_MACHINE_FUNC Trans[]);
4520 IN PVOID SystemSpecific1,
4521 IN PVOID FunctionContext,
4522 IN PVOID SystemSpecific2,
4523 IN PVOID SystemSpecific3);
4526 IN PVOID SystemSpecific1,
4527 IN PVOID FunctionContext,
4528 IN PVOID SystemSpecific2,
4529 IN PVOID SystemSpecific3);
4531 VOID MlmeScanReqAction(
4532 IN PRTMP_ADAPTER pAd,
4533 IN MLME_QUEUE_ELEM *Elem);
4535 VOID InvalidStateWhenScan(
4536 IN PRTMP_ADAPTER pAd,
4537 IN MLME_QUEUE_ELEM *Elem);
4539 VOID InvalidStateWhenJoin(
4540 IN PRTMP_ADAPTER pAd,
4541 IN MLME_QUEUE_ELEM *Elem);
4543 VOID InvalidStateWhenStart(
4544 IN PRTMP_ADAPTER pAd,
4545 IN MLME_QUEUE_ELEM *Elem);
4548 IN PRTMP_ADAPTER pAd,
4549 IN MLME_QUEUE_ELEM *Elem);
4551 VOID EnqueueProbeRequest(
4552 IN PRTMP_ADAPTER pAd);
4554 BOOLEAN ScanRunning(
4555 IN PRTMP_ADAPTER pAd);
4556 //=========================================
4559 IN PRTMP_ADAPTER pAd,
4560 IN STATE_MACHINE *S,
4561 OUT STATE_MACHINE_FUNC Trans[]);
4563 VOID MlmeCntlMachinePerformAction(
4564 IN PRTMP_ADAPTER pAd,
4565 IN STATE_MACHINE *S,
4566 IN MLME_QUEUE_ELEM *Elem);
4569 IN PRTMP_ADAPTER pAd,
4570 IN MLME_QUEUE_ELEM *Elem);
4572 VOID CntlOidScanProc(
4573 IN PRTMP_ADAPTER pAd,
4574 IN MLME_QUEUE_ELEM *Elem);
4576 VOID CntlOidSsidProc(
4577 IN PRTMP_ADAPTER pAd,
4578 IN MLME_QUEUE_ELEM * Elem);
4580 VOID CntlOidRTBssidProc(
4581 IN PRTMP_ADAPTER pAd,
4582 IN MLME_QUEUE_ELEM * Elem);
4584 VOID CntlMlmeRoamingProc(
4585 IN PRTMP_ADAPTER pAd,
4586 IN MLME_QUEUE_ELEM * Elem);
4588 VOID CntlWaitDisassocProc(
4589 IN PRTMP_ADAPTER pAd,
4590 IN MLME_QUEUE_ELEM *Elem);
4592 VOID CntlWaitJoinProc(
4593 IN PRTMP_ADAPTER pAd,
4594 IN MLME_QUEUE_ELEM *Elem);
4596 VOID CntlWaitReassocProc(
4597 IN PRTMP_ADAPTER pAd,
4598 IN MLME_QUEUE_ELEM *Elem);
4600 VOID CntlWaitStartProc(
4601 IN PRTMP_ADAPTER pAd,
4602 IN MLME_QUEUE_ELEM *Elem);
4604 VOID CntlWaitAuthProc(
4605 IN PRTMP_ADAPTER pAd,
4606 IN MLME_QUEUE_ELEM *Elem);
4608 VOID CntlWaitAuthProc2(
4609 IN PRTMP_ADAPTER pAd,
4610 IN MLME_QUEUE_ELEM *Elem);
4612 VOID CntlWaitAssocProc(
4613 IN PRTMP_ADAPTER pAd,
4614 IN MLME_QUEUE_ELEM *Elem);
4617 IN PRTMP_ADAPTER pAd,
4621 IN PRTMP_ADAPTER pAd,
4622 IN BOOLEAN IsReqFromAP);
4624 VOID IterateOnBssTab(
4625 IN PRTMP_ADAPTER pAd);
4627 VOID IterateOnBssTab2(
4628 IN PRTMP_ADAPTER pAd);;
4631 IN PRTMP_ADAPTER pAd,
4632 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4636 IN PRTMP_ADAPTER pAd,
4637 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4639 IN USHORT CapabilityInfo,
4641 IN USHORT ListenIntv);
4644 IN PRTMP_ADAPTER pAd,
4645 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4651 VOID DisassocParmFill(
4652 IN PRTMP_ADAPTER pAd,
4653 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4658 IN PRTMP_ADAPTER pAd,
4659 IN OUT MLME_START_REQ_STRUCT *StartReq,
4664 IN PRTMP_ADAPTER pAd,
4665 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4670 IN PRTMP_ADAPTER pAd);
4672 VOID EnqueueBeaconFrame(
4673 IN PRTMP_ADAPTER pAd);
4675 VOID MlmeJoinReqAction(
4676 IN PRTMP_ADAPTER pAd,
4677 IN MLME_QUEUE_ELEM *Elem);
4679 VOID MlmeScanReqAction(
4680 IN PRTMP_ADAPTER pAd,
4681 IN MLME_QUEUE_ELEM *Elem);
4683 VOID MlmeStartReqAction(
4684 IN PRTMP_ADAPTER pAd,
4685 IN MLME_QUEUE_ELEM *Elem);
4687 VOID ScanTimeoutAction(
4688 IN PRTMP_ADAPTER pAd,
4689 IN MLME_QUEUE_ELEM *Elem);
4691 VOID BeaconTimeoutAtJoinAction(
4692 IN PRTMP_ADAPTER pAd,
4693 IN MLME_QUEUE_ELEM *Elem);
4695 VOID PeerBeaconAtScanAction(
4696 IN PRTMP_ADAPTER pAd,
4697 IN MLME_QUEUE_ELEM *Elem);
4699 VOID PeerBeaconAtJoinAction(
4700 IN PRTMP_ADAPTER pAd,
4701 IN MLME_QUEUE_ELEM *Elem);
4704 IN PRTMP_ADAPTER pAd,
4705 IN MLME_QUEUE_ELEM *Elem);
4707 VOID PeerProbeReqAction(
4708 IN PRTMP_ADAPTER pAd,
4709 IN MLME_QUEUE_ELEM *Elem);
4711 VOID ScanNextChannel(
4712 IN PRTMP_ADAPTER pAd);
4714 ULONG MakeIbssBeacon(
4715 IN PRTMP_ADAPTER pAd);
4717 VOID CCXAdjacentAPReport(
4718 IN PRTMP_ADAPTER pAd);
4720 BOOLEAN MlmeScanReqSanity(
4721 IN PRTMP_ADAPTER pAd,
4727 OUT UCHAR *ScanType);
4729 BOOLEAN PeerBeaconAndProbeRspSanity(
4730 IN PRTMP_ADAPTER pAd,
4733 IN UCHAR MsgChannel,
4737 OUT UCHAR *pSsidLen,
4738 OUT UCHAR *pBssType,
4739 OUT USHORT *pBeaconPeriod,
4740 OUT UCHAR *pChannel,
4741 OUT UCHAR *pNewChannel,
4742 OUT LARGE_INTEGER *pTimestamp,
4743 OUT CF_PARM *pCfParm,
4744 OUT USHORT *pAtimWin,
4745 OUT USHORT *pCapabilityInfo,
4747 OUT UCHAR *pDtimCount,
4748 OUT UCHAR *pDtimPeriod,
4749 OUT UCHAR *pBcastFlag,
4750 OUT UCHAR *pMessageToMe,
4751 OUT UCHAR SupRate[],
4752 OUT UCHAR *pSupRateLen,
4753 OUT UCHAR ExtRate[],
4754 OUT UCHAR *pExtRateLen,
4755 OUT UCHAR *pCkipFlag,
4756 OUT UCHAR *pAironetCellPowerLimit,
4757 OUT PEDCA_PARM pEdcaParm,
4758 OUT PQBSS_LOAD_PARM pQbssLoad,
4759 OUT PQOS_CAPABILITY_PARM pQosCapability,
4760 OUT ULONG *pRalinkIe,
4761 OUT UCHAR *pHtCapabilityLen,
4762 #ifdef CONFIG_STA_SUPPORT
4763 OUT UCHAR *pPreNHtCapabilityLen,
4764 #endif // CONFIG_STA_SUPPORT //
4765 OUT HT_CAPABILITY_IE *pHtCapability,
4766 OUT UCHAR *AddHtInfoLen,
4767 OUT ADD_HT_INFO_IE *AddHtInfo,
4768 OUT UCHAR *NewExtChannel,
4769 OUT USHORT *LengthVIE,
4770 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4772 BOOLEAN PeerAddBAReqActionSanity(
4773 IN PRTMP_ADAPTER pAd,
4778 BOOLEAN PeerAddBARspActionSanity(
4779 IN PRTMP_ADAPTER pAd,
4783 BOOLEAN PeerDelBAActionSanity(
4784 IN PRTMP_ADAPTER pAd,
4789 BOOLEAN MlmeAssocReqSanity(
4790 IN PRTMP_ADAPTER pAd,
4794 OUT USHORT *CapabilityInfo,
4796 OUT USHORT *ListenIntv);
4798 BOOLEAN MlmeAuthReqSanity(
4799 IN PRTMP_ADAPTER pAd,
4806 BOOLEAN MlmeStartReqSanity(
4807 IN PRTMP_ADAPTER pAd,
4811 OUT UCHAR *Ssidlen);
4813 BOOLEAN PeerAuthSanity(
4814 IN PRTMP_ADAPTER pAd,
4821 OUT CHAR ChlgText[]);
4823 BOOLEAN PeerAssocRspSanity(
4824 IN PRTMP_ADAPTER pAd,
4828 OUT USHORT *pCapabilityInfo,
4829 OUT USHORT *pStatus,
4831 OUT UCHAR SupRate[],
4832 OUT UCHAR *pSupRateLen,
4833 OUT UCHAR ExtRate[],
4834 OUT UCHAR *pExtRateLen,
4835 OUT HT_CAPABILITY_IE *pHtCapability,
4836 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4837 OUT UCHAR *pHtCapabilityLen,
4838 OUT UCHAR *pAddHtInfoLen,
4839 OUT UCHAR *pNewExtChannelOffset,
4840 OUT PEDCA_PARM pEdcaParm,
4841 OUT UCHAR *pCkipFlag);
4843 BOOLEAN PeerDisassocSanity(
4844 IN PRTMP_ADAPTER pAd,
4848 OUT USHORT *Reason);
4850 BOOLEAN PeerWpaMessageSanity(
4851 IN PRTMP_ADAPTER pAd,
4852 IN PEAPOL_PACKET pMsg,
4855 IN MAC_TABLE_ENTRY *pEntry);
4857 BOOLEAN PeerDeauthSanity(
4858 IN PRTMP_ADAPTER pAd,
4862 OUT USHORT *Reason);
4864 BOOLEAN PeerProbeReqSanity(
4865 IN PRTMP_ADAPTER pAd,
4870 OUT UCHAR *pSsidLen);
4876 OUT UCHAR *BcastFlag,
4877 OUT UCHAR *DtimCount,
4878 OUT UCHAR *DtimPeriod,
4879 OUT UCHAR *MessageToMe);
4881 UCHAR ChannelSanity(
4882 IN PRTMP_ADAPTER pAd,
4885 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4886 IN PBSS_ENTRY pBss);
4888 BOOLEAN MlmeDelBAReqSanity(
4889 IN PRTMP_ADAPTER pAd,
4893 BOOLEAN MlmeAddBAReqSanity(
4894 IN PRTMP_ADAPTER pAd,
4899 ULONG MakeOutgoingFrame(
4901 OUT ULONG *Length, ...);
4904 IN PRTMP_ADAPTER pAd,
4908 IN PRTMP_ADAPTER pAd);
4910 VOID AsicUpdateAutoFallBackTable(
4911 IN PRTMP_ADAPTER pAd,
4914 VOID MlmePeriodicExec(
4915 IN PVOID SystemSpecific1,
4916 IN PVOID FunctionContext,
4917 IN PVOID SystemSpecific2,
4918 IN PVOID SystemSpecific3);
4921 IN PVOID SystemSpecific1,
4922 IN PVOID FunctionContext,
4923 IN PVOID SystemSpecific2,
4924 IN PVOID SystemSpecific3);
4927 IN PVOID SystemSpecific1,
4928 IN PVOID FunctionContext,
4929 IN PVOID SystemSpecific2,
4930 IN PVOID SystemSpecific3);
4932 VOID STAMlmePeriodicExec(
4936 IN PRTMP_ADAPTER pAd);
4938 VOID MlmeAutoReconnectLastSSID(
4939 IN PRTMP_ADAPTER pAd);
4941 BOOLEAN MlmeValidateSSID(
4945 VOID MlmeCheckForRoaming(
4946 IN PRTMP_ADAPTER pAd,
4949 VOID MlmeCheckForFastRoaming(
4950 IN PRTMP_ADAPTER pAd,
4953 VOID MlmeDynamicTxRateSwitching(
4954 IN PRTMP_ADAPTER pAd);
4957 IN PRTMP_ADAPTER pAd,
4958 IN PMAC_TABLE_ENTRY pEntry,
4959 IN PRTMP_TX_RATE_SWITCH pTxRate);
4961 VOID MlmeSelectTxRateTable(
4962 IN PRTMP_ADAPTER pAd,
4963 IN PMAC_TABLE_ENTRY pEntry,
4965 IN PUCHAR pTableSize,
4966 IN PUCHAR pInitTxRateIdx);
4968 VOID MlmeCalculateChannelQuality(
4969 IN PRTMP_ADAPTER pAd,
4972 VOID MlmeCheckPsmChange(
4973 IN PRTMP_ADAPTER pAd,
4977 IN PRTMP_ADAPTER pAd,
4980 VOID MlmeSetTxPreamble(
4981 IN PRTMP_ADAPTER pAd,
4982 IN USHORT TxPreamble);
4984 VOID UpdateBasicRateBitmap(
4985 IN PRTMP_ADAPTER pAd);
4987 VOID MlmeUpdateTxRates(
4988 IN PRTMP_ADAPTER pAd,
4992 #ifdef DOT11_N_SUPPORT
4993 VOID MlmeUpdateHtTxRates(
4994 IN PRTMP_ADAPTER pAd,
4996 #endif // DOT11_N_SUPPORT //
4998 VOID RTMPCheckRates(
4999 IN PRTMP_ADAPTER pAd,
5000 IN OUT UCHAR SupRate[],
5001 IN OUT UCHAR *SupRateLen);
5003 #ifdef CONFIG_STA_SUPPORT
5004 BOOLEAN RTMPCheckChannel(
5005 IN PRTMP_ADAPTER pAd,
5006 IN UCHAR CentralChannel,
5008 #endif // CONFIG_STA_SUPPORT //
5010 BOOLEAN RTMPCheckHt(
5011 IN PRTMP_ADAPTER pAd,
5013 IN OUT HT_CAPABILITY_IE *pHtCapability,
5014 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5016 VOID StaQuickResponeForRateUpExec(
5017 IN PVOID SystemSpecific1,
5018 IN PVOID FunctionContext,
5019 IN PVOID SystemSpecific2,
5020 IN PVOID SystemSpecific3);
5022 VOID AsicBbpTuning1(
5023 IN PRTMP_ADAPTER pAd);
5025 VOID AsicBbpTuning2(
5026 IN PRTMP_ADAPTER pAd);
5028 VOID RTMPUpdateMlmeRate(
5029 IN PRTMP_ADAPTER pAd);
5032 IN PRTMP_ADAPTER pAd,
5037 VOID AsicEvaluateRxAnt(
5038 IN PRTMP_ADAPTER pAd);
5040 VOID AsicRxAntEvalTimeout(
5041 IN PVOID SystemSpecific1,
5042 IN PVOID FunctionContext,
5043 IN PVOID SystemSpecific2,
5044 IN PVOID SystemSpecific3);
5046 VOID APSDPeriodicExec(
5047 IN PVOID SystemSpecific1,
5048 IN PVOID FunctionContext,
5049 IN PVOID SystemSpecific2,
5050 IN PVOID SystemSpecific3);
5052 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5053 IN PRTMP_ADAPTER pAd,
5054 IN PMAC_TABLE_ENTRY pEntry);
5056 UCHAR RTMPStaFixedTxMode(
5057 IN PRTMP_ADAPTER pAd,
5058 IN PMAC_TABLE_ENTRY pEntry);
5060 VOID RTMPUpdateLegacyTxSetting(
5061 UCHAR fixed_tx_mode,
5062 PMAC_TABLE_ENTRY pEntry);
5064 BOOLEAN RTMPAutoRateSwitchCheck(
5065 IN PRTMP_ADAPTER pAd);
5067 NDIS_STATUS MlmeInit(
5068 IN PRTMP_ADAPTER pAd);
5071 IN PRTMP_ADAPTER pAd);
5074 IN PRTMP_ADAPTER pAd);
5076 VOID MlmeResetRalinkCounters(
5077 IN PRTMP_ADAPTER pAd);
5079 VOID BuildChannelList(
5080 IN PRTMP_ADAPTER pAd);
5083 IN PRTMP_ADAPTER pAd);
5086 IN PRTMP_ADAPTER pAd,
5089 VOID ChangeToCellPowerLimit(
5090 IN PRTMP_ADAPTER pAd,
5091 IN UCHAR AironetCellPowerLimit);
5094 IN PRTMP_ADAPTER pAd,
5098 IN PRTMP_ADAPTER pAd,
5102 IN PRTMP_ADAPTER pAd);
5105 IN PRTMP_ADAPTER pAd,
5110 IN PRTMP_ADAPTER pAd);
5113 IN PRTMP_ADAPTER pAd);
5116 IN PRTMP_ADAPTER pAd);
5118 USHORT RTMP_EEPROM_READ16(
5119 IN PRTMP_ADAPTER pAd,
5122 VOID RTMP_EEPROM_WRITE16(
5123 IN PRTMP_ADAPTER pAd,
5128 // Prototypes of function definition in rtmp_tkip.c
5130 VOID RTMPInitTkipEngine(
5131 IN PRTMP_ADAPTER pAd,
5140 VOID RTMPInitMICEngine(
5141 IN PRTMP_ADAPTER pAd,
5145 IN UCHAR UserPriority,
5148 BOOLEAN RTMPTkipCompareMICValue(
5149 IN PRTMP_ADAPTER pAd,
5154 IN UCHAR UserPriority,
5157 VOID RTMPCalculateMICValue(
5158 IN PRTMP_ADAPTER pAd,
5159 IN PNDIS_PACKET pPacket,
5161 IN PCIPHER_KEY pKey,
5164 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5165 IN PRTMP_ADAPTER pAd,
5173 VOID RTMPTkipAppendByte(
5174 IN PTKIP_KEY_INFO pTkip,
5177 VOID RTMPTkipAppend(
5178 IN PTKIP_KEY_INFO pTkip,
5182 VOID RTMPTkipGetMIC(
5183 IN PTKIP_KEY_INFO pTkip);
5185 BOOLEAN RTMPSoftDecryptTKIP(
5186 IN PRTMP_ADAPTER pAd,
5188 IN ULONG DataByteCnt,
5189 IN UCHAR UserPriority,
5190 IN PCIPHER_KEY pWpaKey);
5192 BOOLEAN RTMPSoftDecryptAES(
5193 IN PRTMP_ADAPTER pAd,
5195 IN ULONG DataByteCnt,
5196 IN PCIPHER_KEY pWpaKey);
5199 // Prototypes of function definition in cmm_info.c
5201 NDIS_STATUS RTMPWPARemoveKeyProc(
5202 IN PRTMP_ADAPTER pAd,
5205 VOID RTMPWPARemoveAllKeys(
5206 IN PRTMP_ADAPTER pAd);
5208 BOOLEAN RTMPCheckStrPrintAble(
5212 VOID RTMPSetPhyMode(
5213 IN PRTMP_ADAPTER pAd,
5216 VOID RTMPUpdateHTIE(
5217 IN RT_HT_CAPABILITY *pRtHt,
5219 OUT HT_CAPABILITY_IE *pHtCapability,
5220 OUT ADD_HT_INFO_IE *pAddHtInfo);
5222 VOID RTMPAddWcidAttributeEntry(
5223 IN PRTMP_ADAPTER pAd,
5227 IN MAC_TABLE_ENTRY *pEntry);
5229 CHAR *GetEncryptType(
5235 VOID RTMPIoctlGetSiteSurvey(
5236 IN PRTMP_ADAPTER pAdapter,
5237 IN struct iwreq *wrq);
5239 VOID RTMPIoctlGetMacTable(
5240 IN PRTMP_ADAPTER pAd,
5241 IN struct iwreq *wrq);
5243 VOID RTMPIndicateWPA2Status(
5244 IN PRTMP_ADAPTER pAdapter);
5246 VOID RTMPOPModeSwitching(
5247 IN PRTMP_ADAPTER pAd);
5249 #ifdef CONFIG_STA_SUPPORT
5250 VOID RTMPAddBSSIDCipher(
5251 IN PRTMP_ADAPTER pAd,
5253 IN PNDIS_802_11_KEY pKey,
5254 IN UCHAR CipherAlg);
5255 #endif // CONFIG_STA_SUPPORT //
5257 #ifdef DOT11_N_SUPPORT
5259 IN PRTMP_ADAPTER pAd,
5260 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5262 VOID RTMPSetIndividualHT(
5263 IN PRTMP_ADAPTER pAd,
5265 #endif // DOT11_N_SUPPORT //
5267 VOID RTMPSendWirelessEvent(
5268 IN PRTMP_ADAPTER pAd,
5269 IN USHORT Event_flag,
5274 VOID NICUpdateCntlCounters(
5275 IN PRTMP_ADAPTER pAd,
5276 IN PHEADER_802_11 pHeader,
5278 IN PRXWI_STRUC pRxWI);
5280 // prototype in wpa.c
5282 BOOLEAN WpaMsgTypeSubst(
5286 VOID WpaPskStateMachineInit(
5287 IN PRTMP_ADAPTER pAd,
5288 IN STATE_MACHINE *S,
5289 OUT STATE_MACHINE_FUNC Trans[]);
5291 VOID WpaEAPOLKeyAction(
5292 IN PRTMP_ADAPTER pAd,
5293 IN MLME_QUEUE_ELEM *Elem);
5295 VOID WpaPairMsg1Action(
5296 IN PRTMP_ADAPTER pAd,
5297 IN MLME_QUEUE_ELEM *Elem);
5299 VOID WpaPairMsg3Action(
5300 IN PRTMP_ADAPTER pAd,
5301 IN MLME_QUEUE_ELEM *Elem);
5303 VOID WpaGroupMsg1Action(
5304 IN PRTMP_ADAPTER pAd,
5305 IN MLME_QUEUE_ELEM *Elem);
5307 VOID WpaMacHeaderInit(
5308 IN PRTMP_ADAPTER pAd,
5309 IN OUT PHEADER_802_11 pHdr80211,
5313 VOID Wpa2PairMsg1Action(
5314 IN PRTMP_ADAPTER pAd,
5315 IN MLME_QUEUE_ELEM *Elem);
5317 VOID Wpa2PairMsg3Action(
5318 IN PRTMP_ADAPTER pAd,
5319 IN MLME_QUEUE_ELEM *Elem);
5321 BOOLEAN ParseKeyData(
5322 IN PRTMP_ADAPTER pAd,
5324 IN UCHAR KeyDataLen,
5325 IN UCHAR bPairewise);
5327 VOID RTMPToWirelessSta(
5328 IN PRTMP_ADAPTER pAd,
5329 IN PUCHAR pHeader802_3,
5333 IN BOOLEAN is4wayFrame);
5361 IN PRTMP_ADAPTER pAd,
5371 IN PRTMP_ADAPTER pAd,
5376 // prototype in aironet.c
5378 VOID AironetStateMachineInit(
5379 IN PRTMP_ADAPTER pAd,
5380 IN STATE_MACHINE *S,
5381 OUT STATE_MACHINE_FUNC Trans[]);
5383 VOID AironetMsgAction(
5384 IN PRTMP_ADAPTER pAd,
5385 IN MLME_QUEUE_ELEM *Elem);
5387 VOID AironetRequestAction(
5388 IN PRTMP_ADAPTER pAd,
5389 IN MLME_QUEUE_ELEM *Elem);
5391 VOID ChannelLoadRequestAction(
5392 IN PRTMP_ADAPTER pAd,
5395 VOID NoiseHistRequestAction(
5396 IN PRTMP_ADAPTER pAd,
5399 VOID BeaconRequestAction(
5400 IN PRTMP_ADAPTER pAd,
5403 VOID AironetReportAction(
5404 IN PRTMP_ADAPTER pAd,
5405 IN MLME_QUEUE_ELEM *Elem);
5407 VOID ChannelLoadReportAction(
5408 IN PRTMP_ADAPTER pAd,
5411 VOID NoiseHistReportAction(
5412 IN PRTMP_ADAPTER pAd,
5415 VOID AironetFinalReportAction(
5416 IN PRTMP_ADAPTER pAd);
5418 VOID BeaconReportAction(
5419 IN PRTMP_ADAPTER pAd,
5422 VOID AironetAddBeaconReport(
5423 IN PRTMP_ADAPTER pAd,
5425 IN PMLME_QUEUE_ELEM pElem);
5427 VOID AironetCreateBeaconReportFromBssTable(
5428 IN PRTMP_ADAPTER pAd);
5430 VOID DBGPRINT_TX_RING(
5431 IN PRTMP_ADAPTER pAd,
5434 VOID DBGPRINT_RX_RING(
5435 IN PRTMP_ADAPTER pAd);
5438 IN PRTMP_ADAPTER pAd,
5440 IN UCHAR RssiNumber);
5443 #ifdef DOT11N_DRAFT3
5444 VOID BuildEffectedChannelList(
5445 IN PRTMP_ADAPTER pAd);
5446 #endif // DOT11N_DRAFT3 //
5449 VOID APAsicEvaluateRxAnt(
5450 IN PRTMP_ADAPTER pAd);
5453 VOID APAsicRxAntEvalTimeout(
5454 IN PRTMP_ADAPTER pAd);
5457 // function prototype in cmm_wpa.c
5459 BOOLEAN RTMPCheckWPAframe(
5460 IN PRTMP_ADAPTER pAd,
5461 IN PMAC_TABLE_ENTRY pEntry,
5463 IN ULONG DataByteCount,
5464 IN UCHAR FromWhichBSSID);
5466 VOID AES_GTK_KEY_UNWRAP(
5468 OUT UCHAR *plaintext,
5470 IN UCHAR *ciphertext);
5472 BOOLEAN RTMPCheckRSNIE(
5473 IN PRTMP_ADAPTER pAd,
5476 IN MAC_TABLE_ENTRY *pEntry,
5479 BOOLEAN RTMPParseEapolKeyData(
5480 IN PRTMP_ADAPTER pAd,
5482 IN UCHAR KeyDataLen,
5483 IN UCHAR GroupKeyIndex,
5486 IN MAC_TABLE_ENTRY *pEntry);
5488 VOID ConstructEapolMsg(
5489 IN PRTMP_ADAPTER pAd,
5490 IN UCHAR PeerAuthMode,
5491 IN UCHAR PeerWepStatus,
5492 IN UCHAR MyGroupKeyWepStatus,
5494 IN UCHAR DefaultKeyIdx,
5495 IN UCHAR *ReplayCounter,
5502 OUT PEAPOL_PACKET pMsg);
5505 IN PRTMP_ADAPTER pAd,
5506 IN UCHAR PeerWepStatus,
5508 OUT PEAPOL_PACKET pMsg);
5510 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5511 IN PRTMP_ADAPTER pAd,
5513 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5514 IN PCIPHER_KEY pShard_key);
5516 VOID ConstructEapolKeyData(
5517 IN PRTMP_ADAPTER pAd,
5518 IN UCHAR PeerAuthMode,
5519 IN UCHAR PeerWepStatus,
5520 IN UCHAR GroupKeyWepStatus,
5522 IN UCHAR DefaultKeyIdx,
5523 IN BOOLEAN bWPA2Capable,
5528 OUT PEAPOL_PACKET pMsg);
5531 IN PRTMP_ADAPTER pAd,
5537 // function prototype in ap_wpa.c
5540 BOOLEAN APWpaMsgTypeSubst(
5544 MAC_TABLE_ENTRY *PACInquiry(
5545 IN PRTMP_ADAPTER pAd,
5548 BOOLEAN RTMPCheckMcast(
5549 IN PRTMP_ADAPTER pAd,
5550 IN PEID_STRUCT eid_ptr,
5551 IN MAC_TABLE_ENTRY *pEntry);
5553 BOOLEAN RTMPCheckUcast(
5554 IN PRTMP_ADAPTER pAd,
5555 IN PEID_STRUCT eid_ptr,
5556 IN MAC_TABLE_ENTRY *pEntry);
5558 BOOLEAN RTMPCheckAUTH(
5559 IN PRTMP_ADAPTER pAd,
5560 IN PEID_STRUCT eid_ptr,
5561 IN MAC_TABLE_ENTRY *pEntry);
5563 VOID WPAStart4WayHS(
5564 IN PRTMP_ADAPTER pAd,
5565 IN MAC_TABLE_ENTRY *pEntry,
5566 IN ULONG TimeInterval);
5568 VOID WPAStart2WayGroupHS(
5569 IN PRTMP_ADAPTER pAd,
5570 IN MAC_TABLE_ENTRY *pEntry);
5572 VOID APWpaEAPPacketAction(
5573 IN PRTMP_ADAPTER pAd,
5574 IN MLME_QUEUE_ELEM *Elem);
5576 VOID APWpaEAPOLStartAction(
5577 IN PRTMP_ADAPTER pAd,
5578 IN MLME_QUEUE_ELEM *Elem);
5580 VOID APWpaEAPOLLogoffAction(
5581 IN PRTMP_ADAPTER pAd,
5582 IN MLME_QUEUE_ELEM *Elem);
5584 VOID APWpaEAPOLKeyAction(
5585 IN PRTMP_ADAPTER pAd,
5586 IN MLME_QUEUE_ELEM *Elem);
5588 VOID APWpaEAPOLASFAlertAction(
5589 IN PRTMP_ADAPTER pAd,
5590 IN MLME_QUEUE_ELEM *Elem);
5592 VOID HandleCounterMeasure(
5593 IN PRTMP_ADAPTER pAd,
5594 IN MAC_TABLE_ENTRY *pEntry);
5596 VOID PeerPairMsg2Action(
5597 IN PRTMP_ADAPTER pAd,
5598 IN MAC_TABLE_ENTRY *pEntry,
5599 IN MLME_QUEUE_ELEM *Elem);
5601 VOID PeerPairMsg4Action(
5602 IN PRTMP_ADAPTER pAd,
5603 IN MAC_TABLE_ENTRY *pEntry,
5604 IN MLME_QUEUE_ELEM *Elem);
5607 IN PVOID SystemSpecific1,
5608 IN PVOID FunctionContext,
5609 IN PVOID SystemSpecific2,
5610 IN PVOID SystemSpecific3);
5613 IN PVOID SystemSpecific1,
5614 IN PVOID FunctionContext,
5615 IN PVOID SystemSpecific2,
5616 IN PVOID SystemSpecific3);
5618 VOID EnqueueStartForPSKExec(
5619 IN PVOID SystemSpecific1,
5620 IN PVOID FunctionContext,
5621 IN PVOID SystemSpecific2,
5622 IN PVOID SystemSpecific3);
5624 VOID RTMPHandleSTAKey(
5625 IN PRTMP_ADAPTER pAdapter,
5626 IN MAC_TABLE_ENTRY *pEntry,
5627 IN MLME_QUEUE_ELEM *Elem);
5629 VOID PeerGroupMsg2Action(
5630 IN PRTMP_ADAPTER pAd,
5631 IN PMAC_TABLE_ENTRY pEntry,
5635 VOID PairDisAssocAction(
5636 IN PRTMP_ADAPTER pAd,
5637 IN PMAC_TABLE_ENTRY pEntry,
5640 VOID MlmeDeAuthAction(
5641 IN PRTMP_ADAPTER pAd,
5642 IN PMAC_TABLE_ENTRY pEntry,
5645 VOID GREKEYPeriodicExec(
5646 IN PVOID SystemSpecific1,
5647 IN PVOID FunctionContext,
5648 IN PVOID SystemSpecific2,
5649 IN PVOID SystemSpecific3);
5671 IN PRTMP_ADAPTER pAd,
5674 VOID AES_GTK_KEY_WRAP(
5676 IN UCHAR *plaintext,
5678 OUT UCHAR *ciphertext);
5681 IN PRTMP_ADAPTER pAdapter,
5685 VOID APToWirelessSta(
5686 IN PRTMP_ADAPTER pAd,
5687 IN MAC_TABLE_ENTRY *pEntry,
5688 IN PUCHAR pHeader802_3,
5692 IN BOOLEAN bClearFrame);
5694 VOID RTMPAddPMKIDCache(
5695 IN PRTMP_ADAPTER pAd,
5701 INT RTMPSearchPMKIDCache(
5702 IN PRTMP_ADAPTER pAd,
5706 VOID RTMPDeletePMKIDCache(
5707 IN PRTMP_ADAPTER pAd,
5711 VOID RTMPMaintainPMKIDCache(
5712 IN PRTMP_ADAPTER pAd);
5714 VOID RTMPSendTriggerFrame(
5715 IN PRTMP_ADAPTER pAd,
5719 IN BOOLEAN bQosNull);
5723 VOID RTMP_SetPeriodicTimer(
5724 IN NDIS_MINIPORT_TIMER *pTimer,
5725 IN unsigned long timeout);
5727 VOID RTMP_OS_Init_Timer(
5728 IN PRTMP_ADAPTER pAd,
5729 IN NDIS_MINIPORT_TIMER *pTimer,
5730 IN TIMER_FUNCTION function,
5733 VOID RTMP_OS_Add_Timer(
5734 IN NDIS_MINIPORT_TIMER *pTimer,
5735 IN unsigned long timeout);
5737 VOID RTMP_OS_Mod_Timer(
5738 IN NDIS_MINIPORT_TIMER *pTimer,
5739 IN unsigned long timeout);
5742 VOID RTMP_OS_Del_Timer(
5743 IN NDIS_MINIPORT_TIMER *pTimer,
5744 OUT BOOLEAN *pCancelled);
5747 VOID RTMP_OS_Release_Packet(
5748 IN PRTMP_ADAPTER pAd,
5749 IN PQUEUE_ENTRY pEntry);
5754 NDIS_STATUS os_alloc_mem(
5755 IN PRTMP_ADAPTER pAd,
5759 NDIS_STATUS os_free_mem(
5760 IN PRTMP_ADAPTER pAd,
5764 void RTMP_AllocateSharedMemory(
5765 IN PRTMP_ADAPTER pAd,
5768 OUT PVOID *VirtualAddress,
5769 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5771 VOID RTMPFreeTxRxRingMemory(
5772 IN PRTMP_ADAPTER pAd);
5774 NDIS_STATUS AdapterBlockAllocateMemory(
5778 void RTMP_AllocateTxDescMemory(
5779 IN PRTMP_ADAPTER pAd,
5783 OUT PVOID *VirtualAddress,
5784 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5786 void RTMP_AllocateFirstTxBuffer(
5787 IN PRTMP_ADAPTER pAd,
5791 OUT PVOID *VirtualAddress,
5792 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5794 void RTMP_AllocateMgmtDescMemory(
5795 IN PRTMP_ADAPTER pAd,
5798 OUT PVOID *VirtualAddress,
5799 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5801 void RTMP_AllocateRxDescMemory(
5802 IN PRTMP_ADAPTER pAd,
5805 OUT PVOID *VirtualAddress,
5806 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5808 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5809 IN PRTMP_ADAPTER pAd,
5812 OUT PVOID *VirtualAddress,
5813 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5815 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5816 IN PRTMP_ADAPTER pAd,
5819 OUT PVOID *VirtualAddress);
5821 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5822 IN PRTMP_ADAPTER pAd,
5825 void RTMP_QueryPacketInfo(
5826 IN PNDIS_PACKET pPacket,
5827 OUT PACKET_INFO *pPacketInfo,
5828 OUT PUCHAR *pSrcBufVA,
5829 OUT UINT *pSrcBufLen);
5831 void RTMP_QueryNextPacketInfo(
5832 IN PNDIS_PACKET *ppPacket,
5833 OUT PACKET_INFO *pPacketInfo,
5834 OUT PUCHAR *pSrcBufVA,
5835 OUT UINT *pSrcBufLen);
5838 BOOLEAN RTMP_FillTxBlkInfo(
5839 IN RTMP_ADAPTER *pAd,
5843 PRTMP_SCATTER_GATHER_LIST
5844 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5847 void announce_802_3_packet(
5848 IN PRTMP_ADAPTER pAd,
5849 IN PNDIS_PACKET pPacket);
5852 UINT BA_Reorder_AMSDU_Annnounce(
5853 IN PRTMP_ADAPTER pAd,
5854 IN PNDIS_PACKET pPacket);
5857 UINT Handle_AMSDU_Packet(
5858 IN PRTMP_ADAPTER pAd,
5861 IN UCHAR FromWhichBSSID);
5864 void convert_802_11_to_802_3_packet(
5865 IN PRTMP_ADAPTER pAd,
5866 IN PNDIS_PACKET pPacket,
5870 IN UCHAR FromWhichBSSID);
5873 PNET_DEV get_netdev_from_bssid(
5874 IN PRTMP_ADAPTER pAd,
5875 IN UCHAR FromWhichBSSID);
5878 PNDIS_PACKET duplicate_pkt(
5879 IN PRTMP_ADAPTER pAd,
5880 IN PUCHAR pHeader802_3,
5884 IN UCHAR FromWhichBSSID);
5887 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5888 IN PRTMP_ADAPTER pAd,
5889 IN PNDIS_PACKET pOldPkt);
5891 PNDIS_PACKET duplicate_pkt_with_VLAN(
5892 IN PRTMP_ADAPTER pAd,
5893 IN PUCHAR pHeader802_3,
5897 IN UCHAR FromWhichBSSID);
5899 PNDIS_PACKET duplicate_pkt_with_WPI(
5900 IN PRTMP_ADAPTER pAd,
5901 IN PNDIS_PACKET pPacket,
5902 IN UINT32 ext_head_len,
5903 IN UINT32 ext_tail_len);
5905 UCHAR VLAN_8023_Header_Copy(
5906 IN PRTMP_ADAPTER pAd,
5907 IN PUCHAR pHeader802_3,
5910 IN UCHAR FromWhichBSSID);
5912 #ifdef DOT11_N_SUPPORT
5913 void ba_flush_reordering_timeout_mpdus(
5914 IN PRTMP_ADAPTER pAd,
5915 IN PBA_REC_ENTRY pBAEntry,
5919 VOID BAOriSessionSetUp(
5920 IN PRTMP_ADAPTER pAd,
5921 IN MAC_TABLE_ENTRY *pEntry,
5925 IN BOOLEAN isForced);
5927 VOID BASessionTearDownALL(
5928 IN OUT PRTMP_ADAPTER pAd,
5930 #endif // DOT11_N_SUPPORT //
5932 BOOLEAN OS_Need_Clone_Packet(void);
5935 VOID build_tx_packet(
5936 IN PRTMP_ADAPTER pAd,
5937 IN PNDIS_PACKET pPacket,
5942 VOID BAOriSessionTearDown(
5943 IN OUT PRTMP_ADAPTER pAd,
5946 IN BOOLEAN bPassive,
5947 IN BOOLEAN bForceSend);
5949 VOID BARecSessionTearDown(
5950 IN OUT PRTMP_ADAPTER pAd,
5953 IN BOOLEAN bPassive);
5955 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5956 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5958 ULONG AutoChBssInsertEntry(
5959 IN PRTMP_ADAPTER pAd,
5966 void AutoChBssTableInit(
5967 IN PRTMP_ADAPTER pAd);
5969 void ChannelInfoInit(
5970 IN PRTMP_ADAPTER pAd);
5972 void AutoChBssTableDestroy(
5973 IN PRTMP_ADAPTER pAd);
5975 void ChannelInfoDestroy(
5976 IN PRTMP_ADAPTER pAd);
5978 UCHAR New_ApAutoSelectChannel(
5979 IN PRTMP_ADAPTER pAd);
5981 BOOLEAN rtstrmactohex(
5985 BOOLEAN rtstrcasecmp(
5989 char *rtstrstruncasecmp(
5995 IN const char * s2);
5999 IN const char * ct);
6003 unsigned int *addr);
6005 ////////// common ioctl functions //////////
6006 INT Set_DriverVersion_Proc(
6007 IN PRTMP_ADAPTER pAd,
6010 INT Set_CountryRegion_Proc(
6011 IN PRTMP_ADAPTER pAd,
6014 INT Set_CountryRegionABand_Proc(
6015 IN PRTMP_ADAPTER pAd,
6018 INT Set_WirelessMode_Proc(
6019 IN PRTMP_ADAPTER pAd,
6022 INT Set_Channel_Proc(
6023 IN PRTMP_ADAPTER pAd,
6026 INT Set_ShortSlot_Proc(
6027 IN PRTMP_ADAPTER pAd,
6030 INT Set_TxPower_Proc(
6031 IN PRTMP_ADAPTER pAd,
6034 INT Set_BGProtection_Proc(
6035 IN PRTMP_ADAPTER pAd,
6038 INT Set_TxPreamble_Proc(
6039 IN PRTMP_ADAPTER pAd,
6042 INT Set_RTSThreshold_Proc(
6043 IN PRTMP_ADAPTER pAd,
6046 INT Set_FragThreshold_Proc(
6047 IN PRTMP_ADAPTER pAd,
6050 INT Set_TxBurst_Proc(
6051 IN PRTMP_ADAPTER pAd,
6054 #ifdef AGGREGATION_SUPPORT
6055 INT Set_PktAggregate_Proc(
6056 IN PRTMP_ADAPTER pAd,
6060 INT Set_IEEE80211H_Proc(
6061 IN PRTMP_ADAPTER pAd,
6066 IN PRTMP_ADAPTER pAd,
6070 INT Show_DescInfo_Proc(
6071 IN PRTMP_ADAPTER pAd,
6074 INT Set_ResetStatCounter_Proc(
6075 IN PRTMP_ADAPTER pAd,
6078 #ifdef DOT11_N_SUPPORT
6079 INT Set_BASetup_Proc(
6080 IN PRTMP_ADAPTER pAd,
6083 INT Set_BADecline_Proc(
6084 IN PRTMP_ADAPTER pAd,
6087 INT Set_BAOriTearDown_Proc(
6088 IN PRTMP_ADAPTER pAd,
6091 INT Set_BARecTearDown_Proc(
6092 IN PRTMP_ADAPTER pAd,
6096 IN PRTMP_ADAPTER pAd,
6100 IN PRTMP_ADAPTER pAd,
6104 IN PRTMP_ADAPTER pAd,
6107 INT Set_HtOpMode_Proc(
6108 IN PRTMP_ADAPTER pAd,
6111 INT Set_HtStbc_Proc(
6112 IN PRTMP_ADAPTER pAd,
6116 IN PRTMP_ADAPTER pAd,
6119 INT Set_HtExtcha_Proc(
6120 IN PRTMP_ADAPTER pAd,
6123 INT Set_HtMpduDensity_Proc(
6124 IN PRTMP_ADAPTER pAd,
6127 INT Set_HtBaWinSize_Proc(
6128 IN PRTMP_ADAPTER pAd,
6132 IN PRTMP_ADAPTER pAd,
6135 INT Set_HtLinkAdapt_Proc(
6136 IN PRTMP_ADAPTER pAd,
6139 INT Set_HtAmsdu_Proc(
6140 IN PRTMP_ADAPTER pAd,
6143 INT Set_HtAutoBa_Proc(
6144 IN PRTMP_ADAPTER pAd,
6147 INT Set_HtProtect_Proc(
6148 IN PRTMP_ADAPTER pAd,
6151 INT Set_HtMimoPs_Proc(
6152 IN PRTMP_ADAPTER pAd,
6156 INT Set_ForceShortGI_Proc(
6157 IN PRTMP_ADAPTER pAd,
6160 INT Set_ForceGF_Proc(
6161 IN PRTMP_ADAPTER pAd,
6165 IN PRTMP_ADAPTER pAd);
6167 INT Set_SendPSMPAction_Proc(
6168 IN PRTMP_ADAPTER pAd,
6171 INT Set_HtMIMOPSmode_Proc(
6172 IN PRTMP_ADAPTER pAd,
6176 INT Set_HtTxBASize_Proc(
6177 IN PRTMP_ADAPTER pAd,
6179 #endif // DOT11_N_SUPPORT //
6183 #ifdef CONFIG_STA_SUPPORT
6185 VOID RTMPSendDLSTearDownFrame(
6186 IN PRTMP_ADAPTER pAd,
6189 #ifdef DOT11_N_SUPPORT
6192 IN PRTMP_ADAPTER pAd,
6193 OUT PQUERYBA_TABLE pBAT);
6194 #endif // DOT11_N_SUPPORT //
6196 #ifdef WPA_SUPPLICANT_SUPPORT
6197 INT WpaCheckEapCode(
6198 IN PRTMP_ADAPTER pAd,
6203 VOID WpaSendMicFailureToWpaSupplicant(
6204 IN PRTMP_ADAPTER pAd,
6205 IN BOOLEAN bUnicast);
6207 VOID SendAssocIEsToWpaSupplicant(
6208 IN PRTMP_ADAPTER pAd);
6209 #endif // WPA_SUPPLICANT_SUPPORT //
6211 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6212 int wext_notify_event_assoc(
6213 IN RTMP_ADAPTER *pAd);
6214 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6216 #endif // CONFIG_STA_SUPPORT //
6220 #ifdef DOT11_N_SUPPORT
6221 VOID Handle_BSS_Width_Trigger_Events(
6222 IN PRTMP_ADAPTER pAd);
6224 void build_ext_channel_switch_ie(
6225 IN PRTMP_ADAPTER pAd,
6226 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6227 #endif // DOT11_N_SUPPORT //
6230 BOOLEAN APRxDoneInterruptHandle(
6231 IN PRTMP_ADAPTER pAd);
6233 BOOLEAN STARxDoneInterruptHandle(
6234 IN PRTMP_ADAPTER pAd,
6237 #ifdef DOT11_N_SUPPORT
6238 // AMPDU packet indication
6239 VOID Indicate_AMPDU_Packet(
6240 IN PRTMP_ADAPTER pAd,
6242 IN UCHAR FromWhichBSSID);
6244 // AMSDU packet indication
6245 VOID Indicate_AMSDU_Packet(
6246 IN PRTMP_ADAPTER pAd,
6248 IN UCHAR FromWhichBSSID);
6249 #endif // DOT11_N_SUPPORT //
6251 // Normal legacy Rx packet indication
6252 VOID Indicate_Legacy_Packet(
6253 IN PRTMP_ADAPTER pAd,
6255 IN UCHAR FromWhichBSSID);
6257 VOID Indicate_EAPOL_Packet(
6258 IN PRTMP_ADAPTER pAd,
6260 IN UCHAR FromWhichBSSID);
6262 void update_os_packet_info(
6263 IN PRTMP_ADAPTER pAd,
6265 IN UCHAR FromWhichBSSID);
6267 void wlan_802_11_to_802_3_packet(
6268 IN PRTMP_ADAPTER pAd,
6270 IN PUCHAR pHeader802_3,
6271 IN UCHAR FromWhichBSSID);
6273 UINT deaggregate_AMSDU_announce(
6274 IN PRTMP_ADAPTER pAd,
6275 PNDIS_PACKET pPacket,
6280 #ifdef CONFIG_STA_SUPPORT
6281 // remove LLC and get 802_3 Header
6282 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6284 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6286 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6288 _pDA = _pRxBlk->pHeader->Addr3; \
6289 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6293 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6295 _pDA = _pRxBlk->pHeader->Addr1; \
6296 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6297 _pSA = _pRxBlk->pHeader->Addr2; \
6299 _pSA = _pRxBlk->pHeader->Addr3; \
6303 _pDA = _pRxBlk->pHeader->Addr1; \
6304 _pSA = _pRxBlk->pHeader->Addr2; \
6308 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6309 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6311 #endif // CONFIG_STA_SUPPORT //
6314 BOOLEAN APFowardWirelessStaToWirelessSta(
6315 IN PRTMP_ADAPTER pAd,
6316 IN PNDIS_PACKET pPacket,
6317 IN ULONG FromWhichBSSID);
6319 VOID Announce_or_Forward_802_3_Packet(
6320 IN PRTMP_ADAPTER pAd,
6321 IN PNDIS_PACKET pPacket,
6322 IN UCHAR FromWhichBSSID);
6324 VOID Sta_Announce_or_Forward_802_3_Packet(
6325 IN PRTMP_ADAPTER pAd,
6326 IN PNDIS_PACKET pPacket,
6327 IN UCHAR FromWhichBSSID);
6330 #ifdef CONFIG_STA_SUPPORT
6331 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6332 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6333 //announce_802_3_packet(_pAd, _pPacket);
6334 #endif // CONFIG_STA_SUPPORT //
6337 PNDIS_PACKET DuplicatePacket(
6338 IN PRTMP_ADAPTER pAd,
6339 IN PNDIS_PACKET pPacket,
6340 IN UCHAR FromWhichBSSID);
6343 PNDIS_PACKET ClonePacket(
6344 IN PRTMP_ADAPTER pAd,
6345 IN PNDIS_PACKET pPacket,
6350 // Normal, AMPDU or AMSDU
6351 VOID CmmRxnonRalinkFrameIndicate(
6352 IN PRTMP_ADAPTER pAd,
6354 IN UCHAR FromWhichBSSID);
6356 VOID CmmRxRalinkFrameIndicate(
6357 IN PRTMP_ADAPTER pAd,
6358 IN MAC_TABLE_ENTRY *pEntry,
6360 IN UCHAR FromWhichBSSID);
6362 VOID Update_Rssi_Sample(
6363 IN PRTMP_ADAPTER pAd,
6364 IN RSSI_SAMPLE *pRssi,
6365 IN PRXWI_STRUC pRxWI);
6367 PNDIS_PACKET GetPacketFromRxRing(
6368 IN PRTMP_ADAPTER pAd,
6369 OUT PRT28XX_RXD_STRUC pSaveRxD,
6370 OUT BOOLEAN *pbReschedule,
6371 IN OUT UINT32 *pRxPending);
6373 PNDIS_PACKET RTMPDeFragmentDataFrame(
6374 IN PRTMP_ADAPTER pAd,
6377 ////////////////////////////////////////
6379 #ifdef CONFIG_STA_SUPPORT
6381 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6382 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6383 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6384 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6385 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6386 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6387 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6388 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6389 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6390 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6391 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6394 P80211ENUM_msgitem_status_no_value = 0x00
6397 P80211ENUM_truth_false = 0x00,
6398 P80211ENUM_truth_true = 0x01
6401 /* Definition from madwifi */
6407 } p80211item_uint32_t;
6412 #define WLAN_DEVNAMELEN_MAX 16
6413 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6414 p80211item_uint32_t hosttime;
6415 p80211item_uint32_t mactime;
6416 p80211item_uint32_t channel;
6417 p80211item_uint32_t rssi;
6418 p80211item_uint32_t sq;
6419 p80211item_uint32_t signal;
6420 p80211item_uint32_t noise;
6421 p80211item_uint32_t rate;
6422 p80211item_uint32_t istx;
6423 p80211item_uint32_t frmlen;
6424 } wlan_ng_prism2_header;
6426 /* The radio capture header precedes the 802.11 header. */
6427 typedef struct PACKED _ieee80211_radiotap_header {
6428 UINT8 it_version; /* Version 0. Only increases
6429 * for drastic changes,
6430 * introduction of compatible
6431 * new fields does not count.
6434 UINT16 it_len; /* length of the whole
6435 * header in bytes, including
6436 * it_version, it_pad,
6437 * it_len, and data fields.
6439 UINT32 it_present; /* A bitmap telling which
6440 * fields are present. Set bit 31
6441 * (0x80000000) to extend the
6442 * bitmap by another 32 bits.
6443 * Additional extensions are made
6444 * by setting bit 31.
6446 }ieee80211_radiotap_header ;
6448 enum ieee80211_radiotap_type {
6449 IEEE80211_RADIOTAP_TSFT = 0,
6450 IEEE80211_RADIOTAP_FLAGS = 1,
6451 IEEE80211_RADIOTAP_RATE = 2,
6452 IEEE80211_RADIOTAP_CHANNEL = 3,
6453 IEEE80211_RADIOTAP_FHSS = 4,
6454 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6455 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6456 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6457 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6458 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6459 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6460 IEEE80211_RADIOTAP_ANTENNA = 11,
6461 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6462 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6465 #define WLAN_RADIOTAP_PRESENT ( \
6466 (1 << IEEE80211_RADIOTAP_TSFT) | \
6467 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6468 (1 << IEEE80211_RADIOTAP_RATE) | \
6471 typedef struct _wlan_radiotap_header {
6472 ieee80211_radiotap_header wt_ihdr;
6476 } wlan_radiotap_header;
6477 /* Definition from madwifi */
6479 void send_monitor_packets(
6480 IN PRTMP_ADAPTER pAd,
6483 #if WIRELESS_EXT >= 12
6484 // This function will be called when query /proc
6485 struct iw_statistics *rt28xx_get_wireless_stats(
6486 IN struct net_device *net_dev);
6489 VOID RTMPSetDesiredRates(
6490 IN PRTMP_ADAPTER pAdapter,
6492 #endif // CONFIG_STA_SUPPORT //
6494 INT Set_FixedTxMode_Proc(
6495 IN PRTMP_ADAPTER pAd,
6498 static inline char* GetPhyMode(
6508 #ifdef DOT11_N_SUPPORT
6512 case MODE_HTGREENFIELD:
6514 #endif // DOT11_N_SUPPORT //
6521 static inline char* GetBW(
6531 #ifdef DOT11_N_SUPPORT
6534 #endif // DOT11_N_SUPPORT //
6541 VOID RT28xxThreadTerminate(
6542 IN RTMP_ADAPTER *pAd);
6544 BOOLEAN RT28XXChipsetCheck(
6547 BOOLEAN RT28XXNetDevInit(
6549 IN struct net_device *net_dev,
6550 IN RTMP_ADAPTER *pAd);
6552 BOOLEAN RT28XXProbePostConfig(
6554 IN RTMP_ADAPTER *pAd,
6557 VOID RT28XXDMADisable(
6558 IN RTMP_ADAPTER *pAd);
6560 VOID RT28XXDMAEnable(
6561 IN RTMP_ADAPTER *pAd);
6563 VOID RT28xx_UpdateBeaconToAsic(
6564 IN RTMP_ADAPTER * pAd,
6567 IN ULONG UpdatePos);
6570 IN struct net_device *net_dev,
6571 IN OUT struct ifreq *rq,
6575 #ifdef CONFIG_STA_SUPPORT
6576 INT rt28xx_sta_ioctl(
6577 IN struct net_device *net_dev,
6578 IN OUT struct ifreq *rq,
6580 #endif // CONFIG_STA_SUPPORT //
6582 BOOLEAN RT28XXSecurityKeyAdd(
6583 IN PRTMP_ADAPTER pAd,
6586 IN MAC_TABLE_ENTRY *pEntry);
6588 ////////////////////////////////////////
6589 PNDIS_PACKET GetPacketFromRxRing(
6590 IN PRTMP_ADAPTER pAd,
6591 OUT PRT28XX_RXD_STRUC pSaveRxD,
6592 OUT BOOLEAN *pbReschedule,
6593 IN OUT UINT32 *pRxPending);
6596 void kill_thread_task(PRTMP_ADAPTER pAd);
6598 void tbtt_tasklet(unsigned long data);
6601 // Function Prototype in cmm_data_2860.c
6603 USHORT RtmpPCI_WriteTxResource(
6604 IN PRTMP_ADAPTER pAd,
6607 OUT USHORT *FreeNumber);
6609 USHORT RtmpPCI_WriteSingleTxResource(
6610 IN PRTMP_ADAPTER pAd,
6613 OUT USHORT *FreeNumber);
6615 USHORT RtmpPCI_WriteMultiTxResource(
6616 IN PRTMP_ADAPTER pAd,
6619 OUT USHORT *FreeNumber);
6621 USHORT RtmpPCI_WriteFragTxResource(
6622 IN PRTMP_ADAPTER pAd,
6625 OUT USHORT *FreeNumber);
6627 USHORT RtmpPCI_WriteSubTxResource(
6628 IN PRTMP_ADAPTER pAd,
6631 OUT USHORT *FreeNumber);
6633 VOID RtmpPCI_FinalWriteTxResource(
6634 IN PRTMP_ADAPTER pAd,
6636 IN USHORT totalMPDUSize,
6637 IN USHORT FirstTxIdx);
6639 VOID RtmpPCIDataLastTxIdx(
6640 IN PRTMP_ADAPTER pAd,
6642 IN USHORT LastTxIdx);
6644 VOID RtmpPCIDataKickOut(
6645 IN PRTMP_ADAPTER pAd,
6650 int RtmpPCIMgmtKickOut(
6651 IN RTMP_ADAPTER *pAd,
6653 IN PNDIS_PACKET pPacket,
6654 IN PUCHAR pSrcBufVA,
6658 NDIS_STATUS RTMPCheckRxError(
6659 IN PRTMP_ADAPTER pAd,
6660 IN PHEADER_802_11 pHeader,
6661 IN PRXWI_STRUC pRxWI,
6662 IN PRT28XX_RXD_STRUC pRxD);
6664 #ifdef CONFIG_STA_SUPPORT
6665 VOID RTMPInitPCIeLinkCtrlValue(
6666 IN PRTMP_ADAPTER pAd);
6668 VOID RTMPFindHostPCIDev(
6669 IN PRTMP_ADAPTER pAd);
6671 VOID RTMPPCIeLinkCtrlValueRestore(
6672 IN PRTMP_ADAPTER pAd,
6675 VOID RTMPPCIeLinkCtrlSetting(
6676 IN PRTMP_ADAPTER pAd,
6679 VOID RT28xxPciAsicRadioOff(
6680 IN PRTMP_ADAPTER pAd,
6682 IN USHORT TbttNumToNextWakeUp);
6684 BOOLEAN RT28xxPciAsicRadioOn(
6685 IN PRTMP_ADAPTER pAd,
6688 VOID RT28xxPciStaAsicForceWakeup(
6689 IN PRTMP_ADAPTER pAd,
6692 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6693 IN PRTMP_ADAPTER pAd,
6694 IN USHORT TbttNumToNextWakeUp);
6696 VOID PsPollWakeExec(
6697 IN PVOID SystemSpecific1,
6698 IN PVOID FunctionContext,
6699 IN PVOID SystemSpecific2,
6700 IN PVOID SystemSpecific3);
6703 IN PVOID SystemSpecific1,
6704 IN PVOID FunctionContext,
6705 IN PVOID SystemSpecific2,
6706 IN PVOID SystemSpecific3);
6707 #endif // CONFIG_STA_SUPPORT //
6709 VOID RT28xxPciMlmeRadioOn(
6710 IN PRTMP_ADAPTER pAd);
6712 VOID RT28xxPciMlmeRadioOFF(
6713 IN PRTMP_ADAPTER pAd);
6715 VOID AsicTurnOffRFClk(
6716 IN PRTMP_ADAPTER pAd,
6719 VOID AsicTurnOnRFClk(
6720 IN PRTMP_ADAPTER pAd,
6724 ////////////////////////////////////////
6727 IN RTMP_ADAPTER *pAd);
6729 UINT32 QBSS_LoadElementAppend(
6730 IN RTMP_ADAPTER *pAd,
6733 VOID QBSS_LoadUpdate(
6734 IN RTMP_ADAPTER *pAd);
6736 ///////////////////////////////////////
6737 INT RTMPShowCfgValue(
6738 IN PRTMP_ADAPTER pAd,
6742 PCHAR RTMPGetRalinkAuthModeStr(
6743 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6745 PCHAR RTMPGetRalinkEncryModeStr(
6746 IN USHORT encryMode);
6747 //////////////////////////////////////
6749 #ifdef CONFIG_STA_SUPPORT
6750 VOID AsicStaBbpTuning(
6751 IN PRTMP_ADAPTER pAd);
6753 VOID AsicResetFromDMABusy(
6754 IN PRTMP_ADAPTER pAd);
6757 IN PRTMP_ADAPTER pAd);
6760 IN PRTMP_ADAPTER pAd);
6763 IN PRTMP_ADAPTER pAd);
6764 #endif // CONFIG_STA_SUPPORT //
6766 void RTMP_IndicateMediaState(
6767 IN PRTMP_ADAPTER pAd);
6769 VOID ReSyncBeaconTime(
6770 IN PRTMP_ADAPTER pAd);
6772 VOID RTMPSetAGCInitValue(
6773 IN PRTMP_ADAPTER pAd,
6774 IN UCHAR BandWidth);
6776 int rt28xx_close(IN PNET_DEV dev);
6777 int rt28xx_open(IN PNET_DEV dev);
6779 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6781 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6782 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6784 if (VIRTUAL_IF_NUM(pAd) == 0)
6786 if (rt28xx_open(pAd->net_dev) != 0)
6792 VIRTUAL_IF_INC(pAd);
6796 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6798 VIRTUAL_IF_DEC(pAd);
6799 if (VIRTUAL_IF_NUM(pAd) == 0)
6800 rt28xx_close(pAd->net_dev);
6805 #endif // __RTMP_H__