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 //
1898 UINT16 DefineMaxTxPwr;
1899 #endif // SINGLE_SKU //
1902 } COMMON_CONFIG, *PCOMMON_CONFIG;
1905 #ifdef CONFIG_STA_SUPPORT
1906 /* Modified by Wu Xi-Kun 4/21/2006 */
1907 // STA configuration and status
1908 typedef struct _STA_ADMIN_CONFIG {
1910 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1911 // the user intended configuration, but not necessary fully equal to the final
1912 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1913 // AP or IBSS holder).
1914 // Once initialized, user configuration can only be changed via OID_xxx
1915 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1916 USHORT AtimWin; // used when starting a new IBSS
1919 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1920 // the user intended configuration, and should be always applied to the final
1921 // settings in ACTIVE BSS without compromising with the BSS holder.
1922 // Once initialized, user configuration can only be changed via OID_xxx
1924 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1925 USHORT DefaultListenCount; // default listen count;
1926 ULONG WindowsPowerMode; // Power mode for AC power
1927 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1928 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1929 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1930 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1932 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1933 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1934 USHORT DisassocReason;
1935 UCHAR DisassocSta[MAC_ADDR_LEN];
1936 USHORT DeauthReason;
1937 UCHAR DeauthSta[MAC_ADDR_LEN];
1938 USHORT AuthFailReason;
1939 UCHAR AuthFailSta[MAC_ADDR_LEN];
1941 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1942 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1943 NDIS_802_11_WEP_STATUS WepStatus;
1944 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1946 // Add to support different cipher suite for WPA2/WPA mode
1947 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1948 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1949 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1950 USHORT RsnCapability;
1952 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1954 UCHAR PMK[32]; // WPA PSK mode PMK
1955 UCHAR PTK[64]; // WPA PSK mode PTK
1956 UCHAR GTK[32]; // GTK from authenticator
1957 BSSID_INFO SavedPMK[PMKID_NO];
1958 UINT SavedPMKNum; // Saved PMKID number
1963 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1966 // For WPA countermeasures
1967 ULONG LastMicErrorTime; // record last MIC error time
1968 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1969 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1970 // For WPA-PSK supplicant state
1971 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1972 UCHAR ReplayCounter[8];
1973 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1974 UCHAR SNonce[32]; // SNonce for WPA-PSK
1976 UCHAR LastSNR0; // last received BEACON's SNR
1977 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1978 RSSI_SAMPLE RssiSample;
1979 ULONG NumOfAvgRssiSample;
1981 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1982 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1983 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1984 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1986 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1987 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1988 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1989 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1990 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1991 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1992 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1994 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
1995 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
1996 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
1998 // New for WPA, windows want us to to keep association information and
1999 // Fixed IEs from last association response
2000 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2001 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2002 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2003 USHORT ResVarIELen; // Length of next VIE include EID & Length
2004 UCHAR ResVarIEs[MAX_VIE_LEN];
2007 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2009 // New variables used for CCX 1.0
2011 BOOLEAN bCkipCmicOn;
2013 UCHAR GIV[3]; //for CCX iv
2018 LEAP_AUTH_INFO LeapAuthInfo;
2020 UCHAR NetworkChallenge[8];
2021 UCHAR NetworkChallengeResponse[24];
2022 UCHAR PeerChallenge[8];
2024 UCHAR PeerChallengeResponse[24];
2025 UCHAR SessionKey[16]; //Network session keys (NSK)
2026 RALINK_TIMER_STRUCT LeapAuthTimer;
2027 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2029 // New control flags for CCX
2030 CCX_CONTROL CCXControl; // Master administration state
2031 BOOLEAN CCXEnable; // Actual CCX state
2032 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2033 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2034 UCHAR CCXReqType; // Current processing CCX request type
2035 BSS_TABLE CCXBssTab; // BSS Table
2036 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2037 USHORT FrameReportLen; // Current Frame report length
2038 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2039 USHORT RPIDensity[8]; // Array for RPI density collection
2040 // Start address of each BSS table within FrameReportBuf
2041 // It's important to update the RxPower of the corresponding Bss
2042 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2043 USHORT BeaconToken; // Token for beacon report
2044 ULONG LastBssIndex; // Most current reported Bss index
2045 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2046 UCHAR RMReqCnt; // Number of measurement request saved.
2047 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2048 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2049 // It must be the same channel with maximum duration
2050 USHORT ParallelDuration; // Maximum duration for parallel measurement
2051 UCHAR ParallelChannel; // Only one channel with parallel measurement
2052 USHORT IAPPToken; // IAPP dialog token
2053 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2054 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2055 // Hack for channel load and noise histogram parameters
2056 UCHAR NHFactor; // Parameter for Noise histogram
2057 UCHAR CLFactor; // Parameter for channel load
2059 UCHAR KRK[16]; //Key Refresh Key.
2060 UCHAR BTK[32]; //Base Transient Key
2061 BOOLEAN CCKMLinkUpFlag;
2062 ULONG CCKMRN; //(Re)Association request number.
2063 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2064 UCHAR AironetCellPowerLimit; //in dBm
2065 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2066 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2067 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2068 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2069 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2070 USHORT CCXAdjacentAPChannel;
2071 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2073 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2074 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2076 UCHAR DtimCount; // 0.. DtimPeriod-1
2077 UCHAR DtimPeriod; // default = 3
2079 ////////////////////////////////////////////////////////////////////////////////////////
2080 // This is only for WHQL test.
2082 ////////////////////////////////////////////////////////////////////////////////////////
2084 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2086 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2087 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2089 #ifdef WPA_SUPPLICANT_SUPPORT
2091 BOOLEAN IEEE8021x_required_keys;
2092 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2093 UCHAR DesireSharedKeyId;
2095 // 0: driver ignores wpa_supplicant
2096 // 1: wpa_supplicant initiates scanning and AP selection
2097 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2098 UCHAR WpaSupplicantUP;
2099 UCHAR WpaSupplicantScanCount;
2100 #endif // WPA_SUPPLICANT_SUPPORT //
2105 BOOLEAN bTGnWifiTest;
2106 BOOLEAN bScanReqIsFromWebUI;
2108 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2109 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2110 RT_HT_PHY_INFO DesiredHtPhyInfo;
2111 BOOLEAN bAutoTxRateSwitch;
2114 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2116 // This data structure keep the current active BSS/IBSS's configuration that this STA
2117 // had agreed upon joining the network. Which means these parameters are usually decided
2118 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2119 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2120 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2121 // the current active settings.
2122 typedef struct _STA_ACTIVE_CONFIG {
2124 USHORT AtimWin; // in kusec; IBSS parameter set element
2125 USHORT CapabilityInfo;
2126 USHORT CfpMaxDuration;
2129 // Copy supported rate from desired AP's beacon. We are trying to match
2130 // AP's supported and extended rate settings.
2131 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2132 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2135 // Copy supported ht from desired AP's beacon. We are trying to match
2136 RT_HT_PHY_INFO SupportedPhyInfo;
2137 RT_HT_CAPABILITY SupportedHtPhy;
2138 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2139 #endif // CONFIG_STA_SUPPORT //
2141 // ----------- start of AP --------------------------
2142 // AUTH-RSP State Machine Aux data structure
2143 typedef struct _AP_MLME_AUX {
2144 UCHAR Addr[MAC_ADDR_LEN];
2146 CHAR Challenge[CIPHER_TEXT_LEN];
2147 } AP_MLME_AUX, *PAP_MLME_AUX;
2149 // structure to define WPA Group Key Rekey Interval
2150 typedef struct PACKED _RT_802_11_WPA_REKEY {
2151 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2152 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2153 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2155 typedef struct _MAC_TABLE_ENTRY {
2156 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2157 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2158 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2159 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2160 BOOLEAN ValidAsMesh;
2161 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2163 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2165 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2167 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2168 UCHAR CMTimerRunning;
2169 UCHAR apidx; // MBSS number
2171 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2172 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2173 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2176 RALINK_TIMER_STRUCT RetryTimer;
2177 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2178 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2179 NDIS_802_11_WEP_STATUS WepStatus;
2180 AP_WPA_STATE WpaState;
2183 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2184 CIPHER_KEY PairwiseKey;
2187 UCHAR PMKID[LEN_PMKID];
2190 UCHAR Addr[MAC_ADDR_LEN];
2193 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2194 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2196 USHORT CapabilityInfo;
2198 ULONG NoDataIdleCount;
2199 UINT16 StationKeepAliveCount; // unit: second
2201 QUEUE_HEADER PsQueue;
2203 UINT32 StaConnectTime; // the live time of this station since associated with AP
2206 #ifdef DOT11_N_SUPPORT
2208 USHORT NoBADataCountDown;
2210 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2211 UINT TxBFCount; // 3*3
2212 #endif // DOT11_N_SUPPORT //
2214 UINT DebugFIFOCount;
2219 //====================================================
2220 //WDS entry needs these
2221 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2222 UINT MatchWDSTabIdx;
2223 UCHAR MaxSupportedRate;
2225 UCHAR CurrTxRateIndex;
2226 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2227 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2228 UINT32 OneSecTxNoRetryOkCount;
2229 UINT32 OneSecTxRetryOkCount;
2230 UINT32 OneSecTxFailCount;
2231 UINT32 ContinueTxFailCnt;
2232 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2233 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2234 //====================================================
2236 BOOLEAN fNoisyEnvironment;
2237 BOOLEAN fLastSecAccordingRSSI;
2238 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2239 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2240 ULONG LastTxOkCount;
2241 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2243 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2244 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2245 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2246 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2247 ULONG ClientStatusFlags;
2249 // TODO: Shall we move that to DOT11_N_SUPPORT???
2250 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2252 #ifdef DOT11_N_SUPPORT
2253 // HT EWC MIMO-N used parameters
2254 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2255 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2256 USHORT TXAutoBAbitmap;
2257 USHORT BADeclineBitmap;
2258 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2259 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2260 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2262 // 802.11n features.
2264 UCHAR MaxRAmpduFactor;
2266 UCHAR MmpsMode; // MIMO power save more.
2268 HT_CAPABILITY_IE HTCapability;
2270 #ifdef DOT11N_DRAFT3
2271 UCHAR BSS2040CoexistenceMgmtSupport;
2272 #endif // DOT11N_DRAFT3 //
2273 #endif // DOT11_N_SUPPORT //
2275 BOOLEAN bAutoTxRateSwitch;
2278 struct _MAC_TABLE_ENTRY *pNext;
2279 USHORT TxSeq[NUM_OF_TID];
2280 USHORT NonQosDataSeq;
2282 RSSI_SAMPLE RssiSample;
2284 UINT32 TXMCSExpected[16];
2285 UINT32 TXMCSSuccessful[16];
2286 UINT32 TXMCSFailed[16];
2287 UINT32 TXMCSAutoFallBack[16][16];
2288 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2290 typedef struct _MAC_TABLE {
2292 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2293 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2294 QUEUE_HEADER McastPsQueue;
2296 BOOLEAN fAnyStationInPsm;
2297 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2298 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2299 #ifdef DOT11_N_SUPPORT
2300 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2301 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2302 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2303 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2304 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2305 #endif // DOT11_N_SUPPORT //
2306 } MAC_TABLE, *PMAC_TABLE;
2308 #ifdef DOT11_N_SUPPORT
2309 #define IS_HT_STA(_pMacEntry) \
2310 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2312 #define IS_HT_RATE(_pMacEntry) \
2313 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2315 #define PEER_IS_HT_RATE(_pMacEntry) \
2316 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2317 #endif // DOT11_N_SUPPORT //
2319 typedef struct _WDS_ENTRY {
2321 UCHAR Addr[MAC_ADDR_LEN];
2322 ULONG NoDataIdleCount;
2323 struct _WDS_ENTRY *pNext;
2324 } WDS_ENTRY, *PWDS_ENTRY;
2326 typedef struct _WDS_TABLE_ENTRY {
2328 UCHAR WdsAddr[MAC_ADDR_LEN];
2329 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2330 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2331 UCHAR MaxSupportedRate;
2333 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2334 USHORT OneSecTxOkCount;
2335 USHORT OneSecTxRetryOkCount;
2336 USHORT OneSecTxFailCount;
2337 ULONG CurrTxRateStableTime; // # of second in current TX rate
2338 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2339 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2341 typedef struct _RT_802_11_WDS_ENTRY {
2345 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2346 UCHAR MacTabMatchWCID; // ASIC
2347 NDIS_802_11_WEP_STATUS WepStatus;
2350 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2351 RT_HT_PHY_INFO DesiredHtPhyInfo;
2352 BOOLEAN bAutoTxRateSwitch;
2353 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2354 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2356 typedef struct _WDS_TABLE {
2359 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2360 } WDS_TABLE, *PWDS_TABLE;
2362 typedef struct _APCLI_STRUCT {
2365 unsigned int mylinkid;
2367 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2368 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2369 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2371 CHAR Ssid[MAX_LEN_OF_SSID];
2374 CHAR CfgSsid[MAX_LEN_OF_SSID];
2375 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2376 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2378 ULONG ApCliRcvBeaconTime;
2380 ULONG CtrlCurrState;
2381 ULONG SyncCurrState;
2382 ULONG AuthCurrState;
2383 ULONG AssocCurrState;
2384 ULONG WpaPskCurrState;
2389 ULONG ClientStatusFlags;
2392 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2393 NDIS_802_11_WEP_STATUS WepStatus;
2395 // Add to support different cipher suite for WPA2/WPA mode
2396 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2397 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2398 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2399 USHORT RsnCapability;
2401 UCHAR PSK[100]; // reserve PSK key material
2403 UCHAR PMK[32]; // WPA PSK mode PMK
2404 UCHAR GTK[32]; // GTK from authenticator
2406 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2409 // store RSN_IE built by driver
2410 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2413 // For WPA countermeasures
2414 ULONG LastMicErrorTime; // record last MIC error time
2415 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2417 // For WPA-PSK supplicant state
2418 UCHAR SNonce[32]; // SNonce for WPA-PSK
2419 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2421 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2422 RT_HT_PHY_INFO DesiredHtPhyInfo;
2423 BOOLEAN bAutoTxRateSwitch;
2424 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2425 } APCLI_STRUCT, *PAPCLI_STRUCT;
2427 // ----------- end of AP ----------------------------
2432 BOOLEAN bGreenField;
2438 typedef struct _INF_PCI_CONFIG
2440 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2443 typedef struct _INF_USB_CONFIG
2445 UINT BulkInEpAddr; // bulk-in endpoint address
2446 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2450 #ifdef IKANOS_VX_1X0
2451 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2453 struct IKANOS_TX_INFO
2455 struct net_device *netdev;
2456 IkanosWlanTxCbFuncP *fp;
2458 #endif // IKANOS_VX_1X0 //
2461 #define DIAGNOSE_TIME 10 // 10 sec
2462 typedef struct _RtmpDiagStrcut_
2463 { // Diagnosis Related element
2464 unsigned char inited;
2466 unsigned char ArrayStartIdx;
2467 unsigned char ArrayCurIdx;
2469 USHORT TxDataCnt[DIAGNOSE_TIME];
2470 USHORT TxFailCnt[DIAGNOSE_TIME];
2471 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2472 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2473 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2475 USHORT TxAggCnt[DIAGNOSE_TIME];
2476 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2477 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2478 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2479 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2482 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2483 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2484 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2486 #endif // DBG_DIAGNOSE //
2490 // The miniport adapter structure
2492 typedef struct _RTMP_ADAPTER
2494 PVOID OS_Cookie; // save specific structure relative to OS
2498 USHORT LnkCtrlBitMask;
2499 USHORT RLnkCtrlConfiguration;
2500 USHORT RLnkCtrlOffset;
2501 USHORT HostLnkCtrlConfiguration;
2502 USHORT HostLnkCtrlOffset;
2503 USHORT PCIePowerSaveLevel;
2504 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2505 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2506 USHORT ThisTbttNumToNextWakeUp;
2507 ULONG SameRxByteCount;
2510 /*****************************************************************************************/
2511 /* PCI related parameters */
2512 /*****************************************************************************************/
2513 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2515 UINT int_enable_reg;
2516 UINT int_disable_mask;
2520 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2521 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2522 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2523 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2526 NDIS_SPIN_LOCK irq_lock;
2531 /*****************************************************************************************/
2532 /* Both PCI/USB related parameters */
2533 /*****************************************************************************************/
2536 /*****************************************************************************************/
2537 /* Tx related parameters */
2538 /*****************************************************************************************/
2539 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2540 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2543 // resource for software backlog queues
2544 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2545 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2547 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2548 RTMP_MGMT_RING MgmtRing;
2549 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2552 /*****************************************************************************************/
2553 /* Rx related parameters */
2554 /*****************************************************************************************/
2556 RTMP_RX_RING RxRing;
2557 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2561 /*****************************************************************************************/
2562 /* ASIC related parameters */
2563 /*****************************************************************************************/
2564 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2566 // ---------------------------
2568 // ---------------------------
2569 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2570 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2571 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2572 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2574 // ---------------------------
2576 // ---------------------------
2577 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2578 UCHAR BbpRssiToDbmDelta;
2579 BBP_R66_TUNING BbpTuning;
2581 // ----------------------------
2583 // ----------------------------
2584 UCHAR RfIcType; // RFIC_xxx
2585 ULONG RfFreqOffset; // Frequency offset for channel switching
2586 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2588 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2589 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2591 // This soft Rx Antenna Diversity mechanism is used only when user set
2592 // RX Antenna = DIVERSITY ON
2593 SOFT_RX_ANT_DIVERSITY RxAnt;
2596 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2597 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2598 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2599 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2601 UCHAR ChannelListNum; // number of channel in ChannelList[]
2604 ULONG Tx20MPwrCfgABand[5];
2605 ULONG Tx20MPwrCfgGBand[5];
2606 ULONG Tx40MPwrCfgABand[5];
2607 ULONG Tx40MPwrCfgGBand[5];
2609 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2610 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2611 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2612 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2613 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2614 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2616 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2617 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2618 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2619 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2620 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2621 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2623 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2624 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2625 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2626 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2629 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2630 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2631 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2632 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2635 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2636 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2637 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2638 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2640 // ----------------------------
2642 // ----------------------------
2643 MCU_LEDCS_STRUC LedCntl;
2644 USHORT Led1; // read from EEPROM 0x3c
2645 USHORT Led2; // EEPROM 0x3e
2646 USHORT Led3; // EEPROM 0x40
2647 UCHAR LedIndicatorStregth;
2648 UCHAR RssiSingalstrengthOffet;
2649 BOOLEAN bLedOnScanning;
2652 /*****************************************************************************************/
2653 /* 802.11 related parameters */
2654 /*****************************************************************************************/
2655 // outgoing BEACON frame buffer and corresponding TXD
2656 TXWI_STRUC BeaconTxWI;
2658 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2660 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2661 PSPOLL_FRAME PsPollFrame;
2662 HEADER_802_11 NullFrame;
2664 //=========AP===========
2667 //=======STA===========
2668 #ifdef CONFIG_STA_SUPPORT
2669 /* Modified by Wu Xi-Kun 4/21/2006 */
2670 // -----------------------------------------------
2671 // STA specific configuration & operation status
2672 // used only when pAd->OpMode == OPMODE_STA
2673 // -----------------------------------------------
2674 STA_ADMIN_CONFIG StaCfg; // user desired settings
2675 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2676 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2677 NDIS_MEDIA_STATE PreMediaState;
2678 #endif // CONFIG_STA_SUPPORT //
2680 //=======Common===========
2681 // OP mode: either AP or STA
2682 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2684 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2686 // MAT related parameters
2688 // configuration: read from Registry & E2PROM
2689 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2690 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2691 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2693 // ------------------------------------------------------
2694 // common configuration to both OPMODE_STA and OPMODE_AP
2695 // ------------------------------------------------------
2696 COMMON_CONFIG CommonCfg;
2699 // AP needs those vaiables for site survey feature.
2700 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2701 BSS_TABLE ScanTab; // store the latest SCAN result
2703 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2704 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2705 NDIS_SPIN_LOCK MacTabLock;
2707 #ifdef DOT11_N_SUPPORT
2709 #endif // DOT11_N_SUPPORT //
2710 NDIS_SPIN_LOCK BATabLock;
2711 RALINK_TIMER_STRUCT RECBATimer;
2713 // encryption/decryption KEY tables
2714 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2716 // RX re-assembly buffer for fragmentation
2717 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2720 COUNTER_802_3 Counters8023; // 802.3 counters
2721 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2722 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2723 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2724 PRIVATE_STRUC PrivateInfo; // Private information & counters
2726 // flags, see fRTMP_ADAPTER_xxx flags
2727 ULONG Flags; // Represent current device status
2728 ULONG PSFlags; // Power Save operation flag.
2730 // current TX sequence #
2733 // Control disconnect / connect event generation
2734 //+++Didn't used anymore
2739 //+++Used only for Station
2740 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2743 ULONG ExtraInfo; // Extra information for displaying status
2744 ULONG SystemErrorBitmap; // b0: E2PROM version error
2746 //+++Didn't used anymore
2747 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2750 // ---------------------------
2752 // ---------------------------
2753 RT_802_11_EVENT_TABLE EventTab;
2758 /*****************************************************************************************/
2759 /* Statistic related parameters */
2760 /*****************************************************************************************/
2762 BOOLEAN bUpdateBcnCntDone;
2763 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2764 // ----------------------------
2766 // ----------------------------
2767 BOOLEAN bBanAllBaSetup;
2768 BOOLEAN bPromiscuous;
2770 // ----------------------------
2771 // rt2860c emulation-use Parameters
2772 // ----------------------------
2775 ULONG cfendaccu[30];
2776 ULONG bacontent[16];
2777 ULONG rxint[RX_RING_SIZE+1];
2780 BOOLEAN bForcePrintTX;
2781 BOOLEAN bForcePrintRX;
2782 BOOLEAN bDisablescanning; //defined in RT2870 USB
2783 BOOLEAN bStaFifoTest;
2784 BOOLEAN bProtectionTest;
2786 BOOLEAN bGenOneHCCA;
2787 BOOLEAN bBroadComHT;
2788 //+++Following add from RT2870 USB.
2790 ULONG BulkOutComplete;
2791 ULONG BulkOutCompleteOther;
2792 ULONG BulkOutCompleteCancel; // seems not use now?
2794 ULONG BulkInComplete;
2795 ULONG BulkInCompleteFail;
2798 struct wificonf WIFItestbed;
2800 #ifdef DOT11_N_SUPPORT
2801 struct reordering_mpdu_pool mpdu_blk_pool;
2802 #endif // DOT11_N_SUPPORT //
2804 ULONG OneSecondnonBEpackets; // record non BE packets per second
2806 #if WIRELESS_EXT >= 12
2807 struct iw_statistics iw_stats;
2810 struct net_device_stats stats;
2812 ULONG TbttTickCount;
2813 #ifdef PCI_MSI_SUPPORT
2815 #endif // PCI_MSI_SUPPORT //
2820 #define TIME_BASE (1000000/OS_HZ)
2821 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2822 UCHAR flg_be_adjust;
2823 ULONG be_adjust_last_time;
2825 #ifdef IKANOS_VX_1X0
2826 struct IKANOS_TX_INFO IkanosTxInfo;
2827 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2828 #endif // IKANOS_VX_1X0 //
2832 RtmpDiagStruct DiagStruct;
2833 #endif // DBG_DIAGNOSE //
2836 UINT8 PM_FlgSuspend;
2837 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2840 // Cisco IAPP format
2842 typedef struct _CISCO_IAPP_CONTENT_
2844 USHORT Length; //IAPP Length
2845 UCHAR MessageType; //IAPP type
2846 UCHAR FunctionCode; //IAPP function type
2847 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2848 UCHAR SourceMAC[MAC_ADDR_LEN];
2849 USHORT Tag; //Tag(element IE) - Adjacent AP report
2850 USHORT TagLength; //Length of element not including 4 byte header
2851 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2852 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2855 UCHAR Ssid[MAX_LEN_OF_SSID];
2856 USHORT Seconds; //Seconds that the client has been disassociated.
2857 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2859 #define DELAYINTMASK 0x0003fffb
2860 #define INTMASK 0x0003fffb
2861 #define IndMask 0x0003fffc
2862 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2863 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2864 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2865 #define TxCoherent 0x00020000 // tx coherent
2866 #define RxCoherent 0x00010000 // rx coherent
2867 #define McuCommand 0x00000200 // mcu
2868 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2869 #define TBTTInt 0x00000800 // TBTT interrupt
2870 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2871 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2872 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2875 typedef struct _RX_BLK_
2877 RT28XX_RXD_STRUC RxD;
2879 PHEADER_802_11 pHeader;
2880 PNDIS_PACKET pRxPacket;
2884 UCHAR UserPriority; // for calculate TKIP MIC using
2888 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2889 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2890 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2893 #define fRX_WDS 0x0001
2894 #define fRX_AMSDU 0x0002
2895 #define fRX_ARALINK 0x0004
2896 #define fRX_HTC 0x0008
2897 #define fRX_PAD 0x0010
2898 #define fRX_AMPDU 0x0020
2899 #define fRX_QOS 0x0040
2900 #define fRX_INFRA 0x0080
2901 #define fRX_EAP 0x0100
2902 #define fRX_MESH 0x0200
2903 #define fRX_APCLI 0x0400
2904 #define fRX_DLS 0x0800
2905 #define fRX_WPI 0x1000
2907 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2908 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2909 #define LENGTH_ARALINK_HEADER_FIELD 2
2911 #define TX_UNKOWN_FRAME 0x00
2912 #define TX_MCAST_FRAME 0x01
2913 #define TX_LEGACY_FRAME 0x02
2914 #define TX_AMPDU_FRAME 0x04
2915 #define TX_AMSDU_FRAME 0x08
2916 #define TX_RALINK_FRAME 0x10
2917 #define TX_FRAG_FRAME 0x20
2920 // Currently the sizeof(TX_BLK) is 148 bytes.
2921 typedef struct _TX_BLK_
2924 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2925 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2926 USHORT TotalFragNum; // Total frame fragments required in one batch
2927 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2929 QUEUE_HEADER TxPacketList;
2930 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2931 HTTRANSMIT_SETTING *pTransmit;
2933 // Following structure used for the characteristics of a specific packet.
2934 PNDIS_PACKET pPacket;
2935 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2936 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2937 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2938 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2939 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2940 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2941 UCHAR HdrPadLen; // recording Header Padding Length;
2942 UCHAR apidx; // The interface associated to this packet
2943 UCHAR Wcid; // The MAC entry associated to this packet
2944 UCHAR UserPriority; // priority class of packet
2945 UCHAR FrameGap; // what kind of IFS this packet use
2946 UCHAR MpduReqNum; // number of fragments of this frame
2947 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2948 UCHAR CipherAlg; // cipher alogrithm
2953 USHORT Flags; //See following definitions for detail.
2955 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2956 ULONG Priv; // Hardware specific value saved in here.
2960 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2961 #define fTX_bAckRequired 0x0002 // the packet need ack response
2962 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2963 #define fTX_bHTRate 0x0008 // allow to use HT rate
2964 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2965 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2966 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2967 #define fTX_bWMM 0x0080 // QOS Data
2969 #define fTX_bClearEAPFrame 0x0100
2971 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
2974 (_pTxBlk->Flags |= _flag) \
2976 (_pTxBlk->Flags &= ~(_flag)) \
2979 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2980 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2981 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2987 //------------------------------------------------------------------------------------------
2991 // Enable & Disable NIC interrupt via writing interrupt mask register
2992 // Since it use ADAPTER structure, it have to be put after structure definition.
2994 __inline VOID NICDisableInterrupt(
2995 IN PRTMP_ADAPTER pAd)
2997 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
2998 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
2999 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3002 __inline VOID NICEnableInterrupt(
3003 IN PRTMP_ADAPTER pAd)
3006 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3007 // To prevent System hang, we should enalbe the interrupt when
3008 // ASIC is already Wake Up.
3010 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3011 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3012 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3014 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3017 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3019 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3020 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3023 #ifdef RT_BIG_ENDIAN
3024 static inline VOID WriteBackToDescriptor(
3027 IN BOOLEAN DoEncrypt,
3028 IN ULONG DescriptorType)
3032 p1 = ((UINT32 *)Dest);
3033 p2 = ((UINT32 *)Src);
3038 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3042 ========================================================================
3044 Routine Description:
3045 Endian conversion of Tx/Rx descriptor .
3048 pAd Pointer to our adapter
3049 pData Pointer to Tx/Rx descriptor
3050 DescriptorType Direction of the frame
3056 Call this function when read or update descriptor
3057 ========================================================================
3059 static inline VOID RTMPWIEndianChange(
3061 IN ULONG DescriptorType)
3066 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3068 if(DescriptorType == TYPE_TXWI)
3070 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3071 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3075 for(i=0; i < size/4 ; i++)
3076 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3081 ========================================================================
3083 Routine Description:
3084 Endian conversion of Tx/Rx descriptor .
3087 pAd Pointer to our adapter
3088 pData Pointer to Tx/Rx descriptor
3089 DescriptorType Direction of the frame
3095 Call this function when read or update descriptor
3096 ========================================================================
3098 static inline VOID RTMPDescriptorEndianChange(
3100 IN ULONG DescriptorType)
3102 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3103 *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11
3104 *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15
3105 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last
3109 ========================================================================
3111 Routine Description:
3112 Endian conversion of all kinds of 802.11 frames .
3115 pAd Pointer to our adapter
3116 pData Pointer to the 802.11 frame structure
3117 Dir Direction of the frame
3118 FromRxDoneInt Caller is from RxDone interrupt
3124 Call this function when read or update buffer data
3125 ========================================================================
3127 static inline VOID RTMPFrameEndianChange(
3128 IN PRTMP_ADAPTER pAd,
3131 IN BOOLEAN FromRxDoneInt)
3133 PHEADER_802_11 pFrame;
3136 // swab 16 bit fields - Frame Control field
3139 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3142 pFrame = (PHEADER_802_11) pData;
3143 pMacHdr = (PUCHAR) pFrame;
3145 // swab 16 bit fields - Duration/ID field
3146 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3148 // swab 16 bit fields - Sequence Control field
3149 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3151 if(pFrame->FC.Type == BTYPE_MGMT)
3153 switch(pFrame->FC.SubType)
3155 case SUBTYPE_ASSOC_REQ:
3156 case SUBTYPE_REASSOC_REQ:
3157 // swab 16 bit fields - CapabilityInfo field
3158 pMacHdr += sizeof(HEADER_802_11);
3159 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3161 // swab 16 bit fields - Listen Interval field
3163 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3166 case SUBTYPE_ASSOC_RSP:
3167 case SUBTYPE_REASSOC_RSP:
3168 // swab 16 bit fields - CapabilityInfo field
3169 pMacHdr += sizeof(HEADER_802_11);
3170 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3172 // swab 16 bit fields - Status Code field
3174 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3176 // swab 16 bit fields - AID field
3178 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3182 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3183 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3184 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3188 // swab 16 bit fields - Auth Alg No. field
3189 pMacHdr += sizeof(HEADER_802_11);
3190 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3192 // swab 16 bit fields - Auth Seq No. field
3194 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3196 // swab 16 bit fields - Status Code field
3198 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3202 case SUBTYPE_BEACON:
3203 case SUBTYPE_PROBE_RSP:
3204 // swab 16 bit fields - BeaconInterval field
3205 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3206 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3208 // swab 16 bit fields - CapabilityInfo field
3209 pMacHdr += sizeof(USHORT);
3210 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3213 case SUBTYPE_DEAUTH:
3214 case SUBTYPE_DISASSOC:
3215 // swab 16 bit fields - Reason code field
3216 pMacHdr += sizeof(HEADER_802_11);
3217 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3221 else if( pFrame->FC.Type == BTYPE_DATA )
3224 else if(pFrame->FC.Type == BTYPE_CNTL)
3226 switch(pFrame->FC.SubType)
3228 case SUBTYPE_BLOCK_ACK_REQ:
3230 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3231 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3232 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3235 case SUBTYPE_BLOCK_ACK:
3236 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3237 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3241 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3242 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3248 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3251 // swab 16 bit fields - Frame Control
3252 if(Dir == DIR_WRITE)
3254 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3257 #endif // RT_BIG_ENDIAN //
3260 static inline VOID ConvertMulticastIP2MAC(
3262 IN PUCHAR *ppMacAddr,
3263 IN UINT16 ProtoType)
3265 if (pIpAddr == NULL)
3268 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3274 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3275 *(*ppMacAddr) = 0x33;
3276 *(*ppMacAddr + 1) = 0x33;
3277 *(*ppMacAddr + 2) = pIpAddr[12];
3278 *(*ppMacAddr + 3) = pIpAddr[13];
3279 *(*ppMacAddr + 4) = pIpAddr[14];
3280 *(*ppMacAddr + 5) = pIpAddr[15];
3285 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3286 *(*ppMacAddr) = 0x01;
3287 *(*ppMacAddr + 1) = 0x00;
3288 *(*ppMacAddr + 2) = 0x5e;
3289 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3290 *(*ppMacAddr + 4) = pIpAddr[2];
3291 *(*ppMacAddr + 5) = pIpAddr[3];
3298 BOOLEAN RTMPCheckForHang(
3299 IN NDIS_HANDLE MiniportAdapterContext
3303 IN NDIS_HANDLE MiniportAdapterContext
3307 // Private routines in rtmp_init.c
3309 NDIS_STATUS RTMPAllocAdapterBlock(
3311 OUT PRTMP_ADAPTER *ppAdapter
3314 NDIS_STATUS RTMPAllocTxRxRingMemory(
3315 IN PRTMP_ADAPTER pAd
3318 NDIS_STATUS RTMPFindAdapter(
3319 IN PRTMP_ADAPTER pAd,
3320 IN NDIS_HANDLE WrapperConfigurationContext
3323 NDIS_STATUS RTMPReadParametersHook(
3324 IN PRTMP_ADAPTER pAd
3327 VOID RTMPFreeAdapter(
3328 IN PRTMP_ADAPTER pAd
3331 NDIS_STATUS NICReadRegParameters(
3332 IN PRTMP_ADAPTER pAd,
3333 IN NDIS_HANDLE WrapperConfigurationContext
3337 VOID NICReadEEPROMParameters(
3338 IN PRTMP_ADAPTER pAd,
3339 IN PUCHAR mac_addr);
3341 VOID NICInitAsicFromEEPROM(
3342 IN PRTMP_ADAPTER pAd);
3344 VOID NICInitTxRxRingAndBacklogQueue(
3345 IN PRTMP_ADAPTER pAd);
3347 NDIS_STATUS NICInitializeAdapter(
3348 IN PRTMP_ADAPTER pAd,
3349 IN BOOLEAN bHardReset);
3351 NDIS_STATUS NICInitializeAsic(
3352 IN PRTMP_ADAPTER pAd,
3353 IN BOOLEAN bHardReset);
3355 VOID NICRestoreBBPValue(
3356 IN PRTMP_ADAPTER pAd);
3359 IN PRTMP_ADAPTER pAd);
3361 VOID RTMPRingCleanUp(
3362 IN PRTMP_ADAPTER pAd,
3366 IN PRTMP_ADAPTER pAd);
3368 NDIS_STATUS DbgSendPacket(
3369 IN PRTMP_ADAPTER pAd,
3370 IN PNDIS_PACKET pPacket);
3373 IN PRTMP_ADAPTER pAd);
3375 VOID NICResetFromError(
3376 IN PRTMP_ADAPTER pAd);
3378 VOID NICEraseFirmware(
3379 IN PRTMP_ADAPTER pAd);
3381 NDIS_STATUS NICLoadFirmware(
3382 IN PRTMP_ADAPTER pAd);
3384 NDIS_STATUS NICLoadRateSwitchingParams(
3385 IN PRTMP_ADAPTER pAd);
3387 BOOLEAN NICCheckForHang(
3388 IN PRTMP_ADAPTER pAd);
3390 VOID NICUpdateFifoStaCounters(
3391 IN PRTMP_ADAPTER pAd);
3393 VOID NICUpdateRawCounters(
3394 IN PRTMP_ADAPTER pAd);
3396 ULONG RTMPNotAllZero(
3400 VOID RTMPZeroMemory(
3404 ULONG RTMPCompareMemory(
3409 VOID RTMPMoveMemory(
3422 VOID RTMPPatchMacBbpBug(
3423 IN PRTMP_ADAPTER pAd);
3425 VOID RTMPPatchCardBus(
3426 IN PRTMP_ADAPTER pAdapter);
3428 VOID RTMPPatchRalinkCardBus(
3429 IN PRTMP_ADAPTER pAdapter,
3432 ULONG RTMPReadCBConfig(
3438 VOID RTMPWriteCBConfig(
3446 IN PRTMP_ADAPTER pAd,
3447 IN PRALINK_TIMER_STRUCT pTimer,
3448 IN PVOID pTimerFunc,
3453 IN PRALINK_TIMER_STRUCT pTimer,
3458 IN PRALINK_TIMER_STRUCT pTimer,
3461 VOID RTMPCancelTimer(
3462 IN PRALINK_TIMER_STRUCT pTimer,
3463 OUT BOOLEAN *pCancelled);
3466 IN PRTMP_ADAPTER pAd,
3469 VOID RTMPSetSignalLED(
3470 IN PRTMP_ADAPTER pAd,
3471 IN NDIS_802_11_RSSI Dbm);
3473 VOID RTMPEnableRxTx(
3474 IN PRTMP_ADAPTER pAd);
3477 // prototype in action.c
3479 VOID ActionStateMachineInit(
3480 IN PRTMP_ADAPTER pAd,
3481 IN STATE_MACHINE *S,
3482 OUT STATE_MACHINE_FUNC Trans[]);
3484 VOID MlmeADDBAAction(
3485 IN PRTMP_ADAPTER pAd,
3486 IN MLME_QUEUE_ELEM *Elem);
3488 VOID MlmeDELBAAction(
3489 IN PRTMP_ADAPTER pAd,
3490 IN MLME_QUEUE_ELEM *Elem);
3493 IN PRTMP_ADAPTER pAd,
3494 IN MLME_QUEUE_ELEM *Elem);
3496 VOID MlmeInvalidAction(
3497 IN PRTMP_ADAPTER pAd,
3498 IN MLME_QUEUE_ELEM *Elem);
3501 IN PRTMP_ADAPTER pAd,
3502 IN MLME_QUEUE_ELEM *Elem);
3504 #ifdef DOT11_N_SUPPORT
3505 VOID PeerAddBAReqAction(
3506 IN PRTMP_ADAPTER pAd,
3507 IN MLME_QUEUE_ELEM *Elem);
3509 VOID PeerAddBARspAction(
3510 IN PRTMP_ADAPTER pAd,
3511 IN MLME_QUEUE_ELEM *Elem);
3513 VOID PeerDelBAAction(
3514 IN PRTMP_ADAPTER pAd,
3515 IN MLME_QUEUE_ELEM *Elem);
3518 IN PRTMP_ADAPTER pAd,
3519 IN MLME_QUEUE_ELEM *Elem);
3520 #endif // DOT11_N_SUPPORT //
3522 VOID SendPSMPAction(
3523 IN PRTMP_ADAPTER pAd,
3528 #ifdef DOT11N_DRAFT3
3529 VOID SendBSS2040CoexistMgmtAction(
3530 IN PRTMP_ADAPTER pAd,
3535 VOID SendNotifyBWActionFrame(
3536 IN PRTMP_ADAPTER pAd,
3540 BOOLEAN ChannelSwitchSanityCheck(
3541 IN PRTMP_ADAPTER pAd,
3543 IN UCHAR NewChannel,
3544 IN UCHAR Secondary);
3546 VOID ChannelSwitchAction(
3547 IN PRTMP_ADAPTER pAd,
3550 IN UCHAR Secondary);
3552 ULONG BuildIntolerantChannelRep(
3553 IN PRTMP_ADAPTER pAd,
3556 VOID Update2040CoexistFrameAndNotify(
3557 IN PRTMP_ADAPTER pAd,
3559 IN BOOLEAN bAddIntolerantCha);
3561 VOID Send2040CoexistAction(
3562 IN PRTMP_ADAPTER pAd,
3564 IN BOOLEAN bAddIntolerantCha);
3565 #endif // DOT11N_DRAFT3 //
3568 IN PRTMP_ADAPTER pAd,
3569 IN MLME_QUEUE_ELEM *Elem);
3571 VOID PeerPublicAction(
3572 IN PRTMP_ADAPTER pAd,
3573 IN MLME_QUEUE_ELEM *Elem);
3575 #ifdef CONFIG_STA_SUPPORT
3576 VOID StaPublicAction(
3577 IN PRTMP_ADAPTER pAd,
3578 IN UCHAR Bss2040Coexist);
3579 #endif // CONFIG_STA_SUPPORT //
3582 VOID PeerBSSTranAction(
3583 IN PRTMP_ADAPTER pAd,
3584 IN MLME_QUEUE_ELEM *Elem);
3586 #ifdef DOT11_N_SUPPORT
3588 IN PRTMP_ADAPTER pAd,
3589 IN MLME_QUEUE_ELEM *Elem);
3590 #endif // DOT11_N_SUPPORT //
3593 IN PRTMP_ADAPTER pAd,
3594 IN MLME_QUEUE_ELEM *Elem);
3596 #ifdef DOT11_N_SUPPORT
3597 VOID RECBATimerTimeout(
3598 IN PVOID SystemSpecific1,
3599 IN PVOID FunctionContext,
3600 IN PVOID SystemSpecific2,
3601 IN PVOID SystemSpecific3);
3603 VOID ORIBATimerTimeout(
3604 IN PRTMP_ADAPTER pAd);
3606 VOID SendRefreshBAR(
3607 IN PRTMP_ADAPTER pAd,
3608 IN MAC_TABLE_ENTRY *pEntry);
3609 #endif // DOT11_N_SUPPORT //
3612 IN PRTMP_ADAPTER pAd,
3613 IN OUT PHEADER_802_11 pHdr80211,
3619 IN PRTMP_ADAPTER pAd,
3620 IN OUT PFRAME_BAR pCntlBar,
3624 VOID InsertActField(
3625 IN PRTMP_ADAPTER pAd,
3626 OUT PUCHAR pFrameBuf,
3627 OUT PULONG pFrameLen,
3631 BOOLEAN QosBADataParse(
3632 IN PRTMP_ADAPTER pAd,
3634 IN PUCHAR p8023Header,
3638 IN UCHAR DataOffset,
3640 IN UINT CurRxIndex);
3642 #ifdef DOT11_N_SUPPORT
3643 BOOLEAN CntlEnqueueForRecv(
3644 IN PRTMP_ADAPTER pAd,
3647 IN PFRAME_BA_REQ pMsg);
3649 VOID BaAutoManSwitch(
3650 IN PRTMP_ADAPTER pAd);
3651 #endif // DOT11_N_SUPPORT //
3654 IN PRTMP_ADAPTER pAd,
3655 IN UCHAR BatRecIdx);
3658 // Private routines in rtmp_data.c
3660 BOOLEAN RTMPHandleRxDoneInterrupt(
3661 IN PRTMP_ADAPTER pAd);
3663 VOID RTMPHandleTxDoneInterrupt(
3664 IN PRTMP_ADAPTER pAd);
3666 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3667 IN PRTMP_ADAPTER pAd,
3668 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3670 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3671 IN PRTMP_ADAPTER pAd);
3673 VOID RTMPHandleTBTTInterrupt(
3674 IN PRTMP_ADAPTER pAd);
3676 VOID RTMPHandlePreTBTTInterrupt(
3677 IN PRTMP_ADAPTER pAd);
3679 void RTMPHandleTwakeupInterrupt(
3680 IN PRTMP_ADAPTER pAd);
3682 VOID RTMPHandleRxCoherentInterrupt(
3683 IN PRTMP_ADAPTER pAd);
3685 BOOLEAN TxFrameIsAggregatible(
3686 IN PRTMP_ADAPTER pAd,
3687 IN PUCHAR pPrevAddr1,
3688 IN PUCHAR p8023hdr);
3690 BOOLEAN PeerIsAggreOn(
3691 IN PRTMP_ADAPTER pAd,
3693 IN PMAC_TABLE_ENTRY pMacEntry);
3695 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3696 IN PNDIS_BUFFER pFirstBuffer,
3697 IN UCHAR DesiredOffset,
3701 NDIS_STATUS STASendPacket(
3702 IN PRTMP_ADAPTER pAd,
3703 IN PNDIS_PACKET pPacket);
3705 VOID STASendPackets(
3706 IN NDIS_HANDLE MiniportAdapterContext,
3707 IN PPNDIS_PACKET ppPacketArray,
3708 IN UINT NumberOfPackets);
3710 VOID RTMPDeQueuePacket(
3711 IN PRTMP_ADAPTER pAd,
3712 IN BOOLEAN bIntContext,
3714 IN UCHAR Max_Tx_Packets);
3716 NDIS_STATUS RTMPHardTransmit(
3717 IN PRTMP_ADAPTER pAd,
3718 IN PNDIS_PACKET pPacket,
3720 OUT PULONG pFreeTXDLeft);
3722 NDIS_STATUS STAHardTransmit(
3723 IN PRTMP_ADAPTER pAd,
3727 VOID STARxEAPOLFrameIndicate(
3728 IN PRTMP_ADAPTER pAd,
3729 IN MAC_TABLE_ENTRY *pEntry,
3731 IN UCHAR FromWhichBSSID);
3733 NDIS_STATUS RTMPFreeTXDRequest(
3734 IN PRTMP_ADAPTER pAd,
3736 IN UCHAR NumberRequired,
3737 IN PUCHAR FreeNumberIs);
3739 NDIS_STATUS MlmeHardTransmit(
3740 IN PRTMP_ADAPTER pAd,
3742 IN PNDIS_PACKET pPacket);
3744 NDIS_STATUS MlmeHardTransmitMgmtRing(
3745 IN PRTMP_ADAPTER pAd,
3747 IN PNDIS_PACKET pPacket);
3749 NDIS_STATUS MlmeHardTransmitTxRing(
3750 IN PRTMP_ADAPTER pAd,
3752 IN PNDIS_PACKET pPacket);
3754 USHORT RTMPCalcDuration(
3755 IN PRTMP_ADAPTER pAd,
3760 IN PRTMP_ADAPTER pAd,
3761 IN PTXWI_STRUC pTxWI,
3764 IN BOOLEAN InsTimestamp,
3767 IN BOOLEAN NSeq, // HW new a sequence.
3776 IN HTTRANSMIT_SETTING *pTransmit);
3779 VOID RTMPWriteTxWI_Data(
3780 IN PRTMP_ADAPTER pAd,
3781 IN OUT PTXWI_STRUC pTxWI,
3785 VOID RTMPWriteTxWI_Cache(
3786 IN PRTMP_ADAPTER pAd,
3787 IN OUT PTXWI_STRUC pTxWI,
3790 VOID RTMPWriteTxDescriptor(
3791 IN PRTMP_ADAPTER pAd,
3796 VOID RTMPSuspendMsduTransmission(
3797 IN PRTMP_ADAPTER pAd);
3799 VOID RTMPResumeMsduTransmission(
3800 IN PRTMP_ADAPTER pAd);
3802 NDIS_STATUS MiniportMMRequest(
3803 IN PRTMP_ADAPTER pAd,
3808 VOID RTMPSendNullFrame(
3809 IN PRTMP_ADAPTER pAd,
3811 IN BOOLEAN bQosNull);
3813 VOID RTMPSendDisassociationFrame(
3814 IN PRTMP_ADAPTER pAd);
3816 VOID RTMPSendRTSFrame(
3817 IN PRTMP_ADAPTER pAd,
3819 IN unsigned int NextMpduSize,
3822 IN USHORT AckDuration,
3827 NDIS_STATUS RTMPApplyPacketFilter(
3828 IN PRTMP_ADAPTER pAd,
3829 IN PRT28XX_RXD_STRUC pRxD,
3830 IN PHEADER_802_11 pHeader);
3832 PQUEUE_HEADER RTMPCheckTxSwQueue(
3833 IN PRTMP_ADAPTER pAd,
3836 #ifdef CONFIG_STA_SUPPORT
3837 VOID RTMPReportMicError(
3838 IN PRTMP_ADAPTER pAd,
3839 IN PCIPHER_KEY pWpaKey);
3841 VOID WpaMicFailureReportFrame(
3842 IN PRTMP_ADAPTER pAd,
3843 IN MLME_QUEUE_ELEM *Elem);
3845 VOID WpaDisassocApAndBlockAssoc(
3846 IN PVOID SystemSpecific1,
3847 IN PVOID FunctionContext,
3848 IN PVOID SystemSpecific2,
3849 IN PVOID SystemSpecific3);
3850 #endif // CONFIG_STA_SUPPORT //
3852 NDIS_STATUS RTMPCloneNdisPacket(
3853 IN PRTMP_ADAPTER pAd,
3854 IN BOOLEAN pInsAMSDUHdr,
3855 IN PNDIS_PACKET pInPacket,
3856 OUT PNDIS_PACKET *ppOutPacket);
3858 NDIS_STATUS RTMPAllocateNdisPacket(
3859 IN PRTMP_ADAPTER pAd,
3860 IN PNDIS_PACKET *pPacket,
3866 VOID RTMPFreeNdisPacket(
3867 IN PRTMP_ADAPTER pAd,
3868 IN PNDIS_PACKET pPacket);
3870 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3871 IN PRTMP_ADAPTER pAd,
3874 BOOLEAN RTMPCheckDHCPFrame(
3875 IN PRTMP_ADAPTER pAd,
3876 IN PNDIS_PACKET pPacket);
3879 BOOLEAN RTMPCheckEtherType(
3880 IN PRTMP_ADAPTER pAd,
3881 IN PNDIS_PACKET pPacket);
3884 VOID RTMPCckBbpTuning(
3885 IN PRTMP_ADAPTER pAd,
3889 // Private routines in rtmp_wep.c
3891 VOID RTMPInitWepEngine(
3892 IN PRTMP_ADAPTER pAd,
3898 VOID RTMPEncryptData(
3899 IN PRTMP_ADAPTER pAd,
3904 BOOLEAN RTMPDecryptData(
3905 IN PRTMP_ADAPTER pAdapter,
3910 BOOLEAN RTMPSoftDecryptWEP(
3911 IN PRTMP_ADAPTER pAd,
3913 IN ULONG DataByteCnt,
3914 IN PCIPHER_KEY pGroupKey);
3917 IN PRTMP_ADAPTER pAd,
3921 IN PARCFOURCONTEXT Ctx,
3926 IN PARCFOURCONTEXT Ctx);
3928 VOID ARCFOUR_DECRYPT(
3929 IN PARCFOURCONTEXT Ctx,
3934 VOID ARCFOUR_ENCRYPT(
3935 IN PARCFOURCONTEXT Ctx,
3940 VOID WPAARCFOUR_ENCRYPT(
3941 IN PARCFOURCONTEXT Ctx,
3946 UINT RTMP_CALC_FCS32(
3955 // Asic/RF/BBP related functions
3957 VOID AsicAdjustTxPower(
3958 IN PRTMP_ADAPTER pAd);
3960 VOID AsicUpdateProtect(
3961 IN PRTMP_ADAPTER pAd,
3962 IN USHORT OperaionMode,
3964 IN BOOLEAN bDisableBGProtect,
3965 IN BOOLEAN bNonGFExist);
3967 VOID AsicSwitchChannel(
3968 IN PRTMP_ADAPTER pAd,
3972 VOID AsicLockChannel(
3973 IN PRTMP_ADAPTER pAd,
3976 VOID AsicAntennaSelect(
3977 IN PRTMP_ADAPTER pAd,
3980 VOID AsicAntennaSetting(
3981 IN PRTMP_ADAPTER pAd,
3982 IN ABGBAND_STATE BandState);
3984 VOID AsicRfTuningExec(
3985 IN PVOID SystemSpecific1,
3986 IN PVOID FunctionContext,
3987 IN PVOID SystemSpecific2,
3988 IN PVOID SystemSpecific3);
3990 #ifdef CONFIG_STA_SUPPORT
3991 VOID AsicSleepThenAutoWakeup(
3992 IN PRTMP_ADAPTER pAd,
3993 IN USHORT TbttNumToNextWakeUp);
3995 VOID AsicForceSleep(
3996 IN PRTMP_ADAPTER pAd);
3998 VOID AsicForceWakeup(
3999 IN PRTMP_ADAPTER pAd,
4001 #endif // CONFIG_STA_SUPPORT //
4004 IN PRTMP_ADAPTER pAd,
4007 VOID AsicSetMcastWC(
4008 IN PRTMP_ADAPTER pAd);
4010 VOID AsicDelWcidTab(
4011 IN PRTMP_ADAPTER pAd,
4015 IN PRTMP_ADAPTER pAd);
4017 VOID AsicDisableRDG(
4018 IN PRTMP_ADAPTER pAd);
4020 VOID AsicDisableSync(
4021 IN PRTMP_ADAPTER pAd);
4023 VOID AsicEnableBssSync(
4024 IN PRTMP_ADAPTER pAd);
4026 VOID AsicEnableIbssSync(
4027 IN PRTMP_ADAPTER pAd);
4029 VOID AsicSetEdcaParm(
4030 IN PRTMP_ADAPTER pAd,
4031 IN PEDCA_PARM pEdcaParm);
4033 VOID AsicSetSlotTime(
4034 IN PRTMP_ADAPTER pAd,
4035 IN BOOLEAN bUseShortSlotTime);
4037 VOID AsicAddSharedKeyEntry(
4038 IN PRTMP_ADAPTER pAd,
4046 VOID AsicRemoveSharedKeyEntry(
4047 IN PRTMP_ADAPTER pAd,
4051 VOID AsicUpdateWCIDAttribute(
4052 IN PRTMP_ADAPTER pAd,
4056 IN BOOLEAN bUsePairewiseKeyTable);
4058 VOID AsicUpdateWCIDIVEIV(
4059 IN PRTMP_ADAPTER pAd,
4064 VOID AsicUpdateRxWCIDTable(
4065 IN PRTMP_ADAPTER pAd,
4069 VOID AsicAddKeyEntry(
4070 IN PRTMP_ADAPTER pAd,
4074 IN PCIPHER_KEY pCipherKey,
4075 IN BOOLEAN bUsePairewiseKeyTable,
4078 VOID AsicAddPairwiseKeyEntry(
4079 IN PRTMP_ADAPTER pAd,
4082 IN CIPHER_KEY *pCipherKey);
4084 VOID AsicRemovePairwiseKeyEntry(
4085 IN PRTMP_ADAPTER pAd,
4089 BOOLEAN AsicSendCommandToMcu(
4090 IN PRTMP_ADAPTER pAd,
4096 BOOLEAN AsicCheckCommanOk(
4097 IN PRTMP_ADAPTER pAd,
4100 VOID MacAddrRandomBssid(
4101 IN PRTMP_ADAPTER pAd,
4104 VOID MgtMacHeaderInit(
4105 IN PRTMP_ADAPTER pAd,
4106 IN OUT PHEADER_802_11 pHdr80211,
4113 IN PRTMP_ADAPTER pAd);
4116 IN PRTMP_ADAPTER pAd);
4122 #ifdef DOT11_N_SUPPORT
4124 IN PRTMP_ADAPTER pAd,
4126 #endif // DOT11_N_SUPPORT //
4128 ULONG BssTableSearch(
4133 ULONG BssSsidTableSearch(
4140 ULONG BssTableSearchWithSSID(
4147 VOID BssTableDeleteEntry(
4148 IN OUT PBSS_TABLE pTab,
4152 #ifdef DOT11_N_SUPPORT
4153 VOID BATableDeleteORIEntry(
4154 IN OUT PRTMP_ADAPTER pAd,
4155 IN BA_ORI_ENTRY *pBAORIEntry);
4157 VOID BATableDeleteRECEntry(
4158 IN OUT PRTMP_ADAPTER pAd,
4159 IN BA_REC_ENTRY *pBARECEntry);
4161 VOID BATableTearORIEntry(
4162 IN OUT PRTMP_ADAPTER pAd,
4165 IN BOOLEAN bForceDelete,
4168 VOID BATableTearRECEntry(
4169 IN OUT PRTMP_ADAPTER pAd,
4173 #endif // DOT11_N_SUPPORT //
4176 IN PRTMP_ADAPTER pAd,
4177 OUT PBSS_ENTRY pBss,
4182 IN USHORT BeaconPeriod,
4185 IN USHORT CapabilityInfo,
4187 IN UCHAR SupRateLen,
4189 IN UCHAR ExtRateLen,
4190 IN HT_CAPABILITY_IE *pHtCapability,
4191 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4192 IN UCHAR HtCapabilityLen,
4193 IN UCHAR AddHtInfoLen,
4194 IN UCHAR NewExtChanOffset,
4197 IN LARGE_INTEGER TimeStamp,
4199 IN PEDCA_PARM pEdcaParm,
4200 IN PQOS_CAPABILITY_PARM pQosCapability,
4201 IN PQBSS_LOAD_PARM pQbssLoad,
4202 IN USHORT LengthVIE,
4203 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4205 ULONG BssTableSetEntry(
4206 IN PRTMP_ADAPTER pAd,
4207 OUT PBSS_TABLE pTab,
4212 IN USHORT BeaconPeriod,
4215 IN USHORT CapabilityInfo,
4217 IN UCHAR SupRateLen,
4219 IN UCHAR ExtRateLen,
4220 IN HT_CAPABILITY_IE *pHtCapability,
4221 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4222 IN UCHAR HtCapabilityLen,
4223 IN UCHAR AddHtInfoLen,
4224 IN UCHAR NewExtChanOffset,
4227 IN LARGE_INTEGER TimeStamp,
4229 IN PEDCA_PARM pEdcaParm,
4230 IN PQOS_CAPABILITY_PARM pQosCapability,
4231 IN PQBSS_LOAD_PARM pQbssLoad,
4232 IN USHORT LengthVIE,
4233 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4235 #ifdef DOT11_N_SUPPORT
4236 VOID BATableInsertEntry(
4237 IN PRTMP_ADAPTER pAd,
4239 IN USHORT TimeOutValue,
4240 IN USHORT StartingSeq,
4243 IN UCHAR OriginatorStatus,
4244 IN BOOLEAN IsRecipient);
4246 #ifdef DOT11N_DRAFT3
4247 VOID Bss2040CoexistTimeOut(
4248 IN PVOID SystemSpecific1,
4249 IN PVOID FunctionContext,
4250 IN PVOID SystemSpecific2,
4251 IN PVOID SystemSpecific3);
4255 IN PRTMP_ADAPTER pAd);
4257 ULONG TriEventTableSetEntry(
4258 IN PRTMP_ADAPTER pAd,
4259 OUT TRIGGER_EVENT_TAB *Tab,
4261 IN HT_CAPABILITY_IE *pHtCapability,
4262 IN UCHAR HtCapabilityLen,
4264 IN UCHAR ChannelNo);
4266 VOID TriEventCounterMaintenance(
4267 IN PRTMP_ADAPTER pAd);
4268 #endif // DOT11N_DRAFT3 //
4269 #endif // DOT11_N_SUPPORT //
4271 VOID BssTableSsidSort(
4272 IN PRTMP_ADAPTER pAd,
4273 OUT BSS_TABLE *OutTab,
4277 VOID BssTableSortByRssi(
4278 IN OUT BSS_TABLE *OutTab);
4280 VOID BssCipherParse(
4281 IN OUT PBSS_ENTRY pBss);
4283 NDIS_STATUS MlmeQueueInit(
4284 IN MLME_QUEUE *Queue);
4286 VOID MlmeQueueDestroy(
4287 IN MLME_QUEUE *Queue);
4289 BOOLEAN MlmeEnqueue(
4290 IN PRTMP_ADAPTER pAd,
4296 BOOLEAN MlmeEnqueueForRecv(
4297 IN PRTMP_ADAPTER pAd,
4299 IN ULONG TimeStampHigh,
4300 IN ULONG TimeStampLow,
4309 BOOLEAN MlmeDequeue(
4310 IN MLME_QUEUE *Queue,
4311 OUT MLME_QUEUE_ELEM **Elem);
4313 VOID MlmeRestartStateMachine(
4314 IN PRTMP_ADAPTER pAd);
4316 BOOLEAN MlmeQueueEmpty(
4317 IN MLME_QUEUE *Queue);
4319 BOOLEAN MlmeQueueFull(
4320 IN MLME_QUEUE *Queue);
4322 BOOLEAN MsgTypeSubst(
4323 IN PRTMP_ADAPTER pAd,
4324 IN PFRAME_802_11 pFrame,
4328 VOID StateMachineInit(
4329 IN STATE_MACHINE *Sm,
4330 IN STATE_MACHINE_FUNC Trans[],
4333 IN STATE_MACHINE_FUNC DefFunc,
4337 VOID StateMachineSetAction(
4338 IN STATE_MACHINE *S,
4341 IN STATE_MACHINE_FUNC F);
4343 VOID StateMachinePerformAction(
4344 IN PRTMP_ADAPTER pAd,
4345 IN STATE_MACHINE *S,
4346 IN MLME_QUEUE_ELEM *Elem);
4349 IN PRTMP_ADAPTER pAd,
4350 IN MLME_QUEUE_ELEM *Elem);
4352 VOID AssocStateMachineInit(
4353 IN PRTMP_ADAPTER pAd,
4354 IN STATE_MACHINE *Sm,
4355 OUT STATE_MACHINE_FUNC Trans[]);
4357 VOID ReassocTimeout(
4358 IN PVOID SystemSpecific1,
4359 IN PVOID FunctionContext,
4360 IN PVOID SystemSpecific2,
4361 IN PVOID SystemSpecific3);
4364 IN PVOID SystemSpecific1,
4365 IN PVOID FunctionContext,
4366 IN PVOID SystemSpecific2,
4367 IN PVOID SystemSpecific3);
4369 VOID DisassocTimeout(
4370 IN PVOID SystemSpecific1,
4371 IN PVOID FunctionContext,
4372 IN PVOID SystemSpecific2,
4373 IN PVOID SystemSpecific3);
4375 //----------------------------------------------
4376 VOID MlmeDisassocReqAction(
4377 IN PRTMP_ADAPTER pAd,
4378 IN MLME_QUEUE_ELEM *Elem);
4380 VOID MlmeAssocReqAction(
4381 IN PRTMP_ADAPTER pAd,
4382 IN MLME_QUEUE_ELEM *Elem);
4384 VOID MlmeReassocReqAction(
4385 IN PRTMP_ADAPTER pAd,
4386 IN MLME_QUEUE_ELEM *Elem);
4388 VOID MlmeDisassocReqAction(
4389 IN PRTMP_ADAPTER pAd,
4390 IN MLME_QUEUE_ELEM *Elem);
4392 VOID PeerAssocRspAction(
4393 IN PRTMP_ADAPTER pAd,
4394 IN MLME_QUEUE_ELEM *Elem);
4396 VOID PeerReassocRspAction(
4397 IN PRTMP_ADAPTER pAd,
4398 IN MLME_QUEUE_ELEM *Elem);
4400 VOID PeerDisassocAction(
4401 IN PRTMP_ADAPTER pAd,
4402 IN MLME_QUEUE_ELEM *Elem);
4404 VOID DisassocTimeoutAction(
4405 IN PRTMP_ADAPTER pAd,
4406 IN MLME_QUEUE_ELEM *Elem);
4408 VOID AssocTimeoutAction(
4409 IN PRTMP_ADAPTER pAd,
4410 IN MLME_QUEUE_ELEM *Elem);
4412 VOID ReassocTimeoutAction(
4413 IN PRTMP_ADAPTER pAd,
4414 IN MLME_QUEUE_ELEM *Elem);
4417 IN PRTMP_ADAPTER pAd,
4420 VOID SwitchBetweenWepAndCkip(
4421 IN PRTMP_ADAPTER pAd);
4423 VOID InvalidStateWhenAssoc(
4424 IN PRTMP_ADAPTER pAd,
4425 IN MLME_QUEUE_ELEM *Elem);
4427 VOID InvalidStateWhenReassoc(
4428 IN PRTMP_ADAPTER pAd,
4429 IN MLME_QUEUE_ELEM *Elem);
4431 VOID InvalidStateWhenDisassociate(
4432 IN PRTMP_ADAPTER pAd,
4433 IN MLME_QUEUE_ELEM *Elem);
4437 IN PRTMP_ADAPTER pAd);
4439 VOID ComposeNullFrame(
4440 IN PRTMP_ADAPTER pAd);
4443 IN PRTMP_ADAPTER pAd,
4445 IN USHORT CapabilityInfo,
4448 IN UCHAR SupRateLen,
4450 IN UCHAR ExtRateLen,
4451 IN PEDCA_PARM pEdcaParm,
4452 IN HT_CAPABILITY_IE *pHtCapability,
4453 IN UCHAR HtCapabilityLen,
4454 IN ADD_HT_INFO_IE *pAddHtInfo);
4456 VOID AuthStateMachineInit(
4457 IN PRTMP_ADAPTER pAd,
4458 IN PSTATE_MACHINE sm,
4459 OUT STATE_MACHINE_FUNC Trans[]);
4462 IN PVOID SystemSpecific1,
4463 IN PVOID FunctionContext,
4464 IN PVOID SystemSpecific2,
4465 IN PVOID SystemSpecific3);
4467 VOID MlmeAuthReqAction(
4468 IN PRTMP_ADAPTER pAd,
4469 IN MLME_QUEUE_ELEM *Elem);
4471 VOID PeerAuthRspAtSeq2Action(
4472 IN PRTMP_ADAPTER pAd,
4473 IN MLME_QUEUE_ELEM *Elem);
4475 VOID PeerAuthRspAtSeq4Action(
4476 IN PRTMP_ADAPTER pAd,
4477 IN MLME_QUEUE_ELEM *Elem);
4479 VOID AuthTimeoutAction(
4480 IN PRTMP_ADAPTER pAd,
4481 IN MLME_QUEUE_ELEM *Elem);
4484 IN PRTMP_ADAPTER pAd,
4487 VOID MlmeDeauthReqAction(
4488 IN PRTMP_ADAPTER pAd,
4489 IN MLME_QUEUE_ELEM *Elem);
4491 VOID InvalidStateWhenAuth(
4492 IN PRTMP_ADAPTER pAd,
4493 IN MLME_QUEUE_ELEM *Elem);
4495 //=============================================
4497 VOID AuthRspStateMachineInit(
4498 IN PRTMP_ADAPTER pAd,
4499 IN PSTATE_MACHINE Sm,
4500 IN STATE_MACHINE_FUNC Trans[]);
4502 VOID PeerDeauthAction(
4503 IN PRTMP_ADAPTER pAd,
4504 IN MLME_QUEUE_ELEM *Elem);
4506 VOID PeerAuthSimpleRspGenAndSend(
4507 IN PRTMP_ADAPTER pAd,
4508 IN PHEADER_802_11 pHdr80211,
4515 // Private routines in dls.c
4518 //========================================
4520 VOID SyncStateMachineInit(
4521 IN PRTMP_ADAPTER pAd,
4522 IN STATE_MACHINE *Sm,
4523 OUT STATE_MACHINE_FUNC Trans[]);
4526 IN PVOID SystemSpecific1,
4527 IN PVOID FunctionContext,
4528 IN PVOID SystemSpecific2,
4529 IN PVOID SystemSpecific3);
4532 IN PVOID SystemSpecific1,
4533 IN PVOID FunctionContext,
4534 IN PVOID SystemSpecific2,
4535 IN PVOID SystemSpecific3);
4537 VOID MlmeScanReqAction(
4538 IN PRTMP_ADAPTER pAd,
4539 IN MLME_QUEUE_ELEM *Elem);
4541 VOID InvalidStateWhenScan(
4542 IN PRTMP_ADAPTER pAd,
4543 IN MLME_QUEUE_ELEM *Elem);
4545 VOID InvalidStateWhenJoin(
4546 IN PRTMP_ADAPTER pAd,
4547 IN MLME_QUEUE_ELEM *Elem);
4549 VOID InvalidStateWhenStart(
4550 IN PRTMP_ADAPTER pAd,
4551 IN MLME_QUEUE_ELEM *Elem);
4554 IN PRTMP_ADAPTER pAd,
4555 IN MLME_QUEUE_ELEM *Elem);
4557 VOID EnqueueProbeRequest(
4558 IN PRTMP_ADAPTER pAd);
4560 BOOLEAN ScanRunning(
4561 IN PRTMP_ADAPTER pAd);
4562 //=========================================
4565 IN PRTMP_ADAPTER pAd,
4566 IN STATE_MACHINE *S,
4567 OUT STATE_MACHINE_FUNC Trans[]);
4569 VOID MlmeCntlMachinePerformAction(
4570 IN PRTMP_ADAPTER pAd,
4571 IN STATE_MACHINE *S,
4572 IN MLME_QUEUE_ELEM *Elem);
4575 IN PRTMP_ADAPTER pAd,
4576 IN MLME_QUEUE_ELEM *Elem);
4578 VOID CntlOidScanProc(
4579 IN PRTMP_ADAPTER pAd,
4580 IN MLME_QUEUE_ELEM *Elem);
4582 VOID CntlOidSsidProc(
4583 IN PRTMP_ADAPTER pAd,
4584 IN MLME_QUEUE_ELEM * Elem);
4586 VOID CntlOidRTBssidProc(
4587 IN PRTMP_ADAPTER pAd,
4588 IN MLME_QUEUE_ELEM * Elem);
4590 VOID CntlMlmeRoamingProc(
4591 IN PRTMP_ADAPTER pAd,
4592 IN MLME_QUEUE_ELEM * Elem);
4594 VOID CntlWaitDisassocProc(
4595 IN PRTMP_ADAPTER pAd,
4596 IN MLME_QUEUE_ELEM *Elem);
4598 VOID CntlWaitJoinProc(
4599 IN PRTMP_ADAPTER pAd,
4600 IN MLME_QUEUE_ELEM *Elem);
4602 VOID CntlWaitReassocProc(
4603 IN PRTMP_ADAPTER pAd,
4604 IN MLME_QUEUE_ELEM *Elem);
4606 VOID CntlWaitStartProc(
4607 IN PRTMP_ADAPTER pAd,
4608 IN MLME_QUEUE_ELEM *Elem);
4610 VOID CntlWaitAuthProc(
4611 IN PRTMP_ADAPTER pAd,
4612 IN MLME_QUEUE_ELEM *Elem);
4614 VOID CntlWaitAuthProc2(
4615 IN PRTMP_ADAPTER pAd,
4616 IN MLME_QUEUE_ELEM *Elem);
4618 VOID CntlWaitAssocProc(
4619 IN PRTMP_ADAPTER pAd,
4620 IN MLME_QUEUE_ELEM *Elem);
4623 IN PRTMP_ADAPTER pAd,
4627 IN PRTMP_ADAPTER pAd,
4628 IN BOOLEAN IsReqFromAP);
4630 VOID IterateOnBssTab(
4631 IN PRTMP_ADAPTER pAd);
4633 VOID IterateOnBssTab2(
4634 IN PRTMP_ADAPTER pAd);;
4637 IN PRTMP_ADAPTER pAd,
4638 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4642 IN PRTMP_ADAPTER pAd,
4643 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4645 IN USHORT CapabilityInfo,
4647 IN USHORT ListenIntv);
4650 IN PRTMP_ADAPTER pAd,
4651 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4657 VOID DisassocParmFill(
4658 IN PRTMP_ADAPTER pAd,
4659 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4664 IN PRTMP_ADAPTER pAd,
4665 IN OUT MLME_START_REQ_STRUCT *StartReq,
4670 IN PRTMP_ADAPTER pAd,
4671 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4676 IN PRTMP_ADAPTER pAd);
4678 VOID EnqueueBeaconFrame(
4679 IN PRTMP_ADAPTER pAd);
4681 VOID MlmeJoinReqAction(
4682 IN PRTMP_ADAPTER pAd,
4683 IN MLME_QUEUE_ELEM *Elem);
4685 VOID MlmeScanReqAction(
4686 IN PRTMP_ADAPTER pAd,
4687 IN MLME_QUEUE_ELEM *Elem);
4689 VOID MlmeStartReqAction(
4690 IN PRTMP_ADAPTER pAd,
4691 IN MLME_QUEUE_ELEM *Elem);
4693 VOID ScanTimeoutAction(
4694 IN PRTMP_ADAPTER pAd,
4695 IN MLME_QUEUE_ELEM *Elem);
4697 VOID BeaconTimeoutAtJoinAction(
4698 IN PRTMP_ADAPTER pAd,
4699 IN MLME_QUEUE_ELEM *Elem);
4701 VOID PeerBeaconAtScanAction(
4702 IN PRTMP_ADAPTER pAd,
4703 IN MLME_QUEUE_ELEM *Elem);
4705 VOID PeerBeaconAtJoinAction(
4706 IN PRTMP_ADAPTER pAd,
4707 IN MLME_QUEUE_ELEM *Elem);
4710 IN PRTMP_ADAPTER pAd,
4711 IN MLME_QUEUE_ELEM *Elem);
4713 VOID PeerProbeReqAction(
4714 IN PRTMP_ADAPTER pAd,
4715 IN MLME_QUEUE_ELEM *Elem);
4717 VOID ScanNextChannel(
4718 IN PRTMP_ADAPTER pAd);
4720 ULONG MakeIbssBeacon(
4721 IN PRTMP_ADAPTER pAd);
4723 VOID CCXAdjacentAPReport(
4724 IN PRTMP_ADAPTER pAd);
4726 BOOLEAN MlmeScanReqSanity(
4727 IN PRTMP_ADAPTER pAd,
4733 OUT UCHAR *ScanType);
4735 BOOLEAN PeerBeaconAndProbeRspSanity(
4736 IN PRTMP_ADAPTER pAd,
4739 IN UCHAR MsgChannel,
4743 OUT UCHAR *pSsidLen,
4744 OUT UCHAR *pBssType,
4745 OUT USHORT *pBeaconPeriod,
4746 OUT UCHAR *pChannel,
4747 OUT UCHAR *pNewChannel,
4748 OUT LARGE_INTEGER *pTimestamp,
4749 OUT CF_PARM *pCfParm,
4750 OUT USHORT *pAtimWin,
4751 OUT USHORT *pCapabilityInfo,
4753 OUT UCHAR *pDtimCount,
4754 OUT UCHAR *pDtimPeriod,
4755 OUT UCHAR *pBcastFlag,
4756 OUT UCHAR *pMessageToMe,
4757 OUT UCHAR SupRate[],
4758 OUT UCHAR *pSupRateLen,
4759 OUT UCHAR ExtRate[],
4760 OUT UCHAR *pExtRateLen,
4761 OUT UCHAR *pCkipFlag,
4762 OUT UCHAR *pAironetCellPowerLimit,
4763 OUT PEDCA_PARM pEdcaParm,
4764 OUT PQBSS_LOAD_PARM pQbssLoad,
4765 OUT PQOS_CAPABILITY_PARM pQosCapability,
4766 OUT ULONG *pRalinkIe,
4767 OUT UCHAR *pHtCapabilityLen,
4768 #ifdef CONFIG_STA_SUPPORT
4769 OUT UCHAR *pPreNHtCapabilityLen,
4770 #endif // CONFIG_STA_SUPPORT //
4771 OUT HT_CAPABILITY_IE *pHtCapability,
4772 OUT UCHAR *AddHtInfoLen,
4773 OUT ADD_HT_INFO_IE *AddHtInfo,
4774 OUT UCHAR *NewExtChannel,
4775 OUT USHORT *LengthVIE,
4776 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4778 BOOLEAN PeerAddBAReqActionSanity(
4779 IN PRTMP_ADAPTER pAd,
4784 BOOLEAN PeerAddBARspActionSanity(
4785 IN PRTMP_ADAPTER pAd,
4789 BOOLEAN PeerDelBAActionSanity(
4790 IN PRTMP_ADAPTER pAd,
4795 BOOLEAN MlmeAssocReqSanity(
4796 IN PRTMP_ADAPTER pAd,
4800 OUT USHORT *CapabilityInfo,
4802 OUT USHORT *ListenIntv);
4804 BOOLEAN MlmeAuthReqSanity(
4805 IN PRTMP_ADAPTER pAd,
4812 BOOLEAN MlmeStartReqSanity(
4813 IN PRTMP_ADAPTER pAd,
4817 OUT UCHAR *Ssidlen);
4819 BOOLEAN PeerAuthSanity(
4820 IN PRTMP_ADAPTER pAd,
4827 OUT CHAR ChlgText[]);
4829 BOOLEAN PeerAssocRspSanity(
4830 IN PRTMP_ADAPTER pAd,
4834 OUT USHORT *pCapabilityInfo,
4835 OUT USHORT *pStatus,
4837 OUT UCHAR SupRate[],
4838 OUT UCHAR *pSupRateLen,
4839 OUT UCHAR ExtRate[],
4840 OUT UCHAR *pExtRateLen,
4841 OUT HT_CAPABILITY_IE *pHtCapability,
4842 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4843 OUT UCHAR *pHtCapabilityLen,
4844 OUT UCHAR *pAddHtInfoLen,
4845 OUT UCHAR *pNewExtChannelOffset,
4846 OUT PEDCA_PARM pEdcaParm,
4847 OUT UCHAR *pCkipFlag);
4849 BOOLEAN PeerDisassocSanity(
4850 IN PRTMP_ADAPTER pAd,
4854 OUT USHORT *Reason);
4856 BOOLEAN PeerWpaMessageSanity(
4857 IN PRTMP_ADAPTER pAd,
4858 IN PEAPOL_PACKET pMsg,
4861 IN MAC_TABLE_ENTRY *pEntry);
4863 BOOLEAN PeerDeauthSanity(
4864 IN PRTMP_ADAPTER pAd,
4868 OUT USHORT *Reason);
4870 BOOLEAN PeerProbeReqSanity(
4871 IN PRTMP_ADAPTER pAd,
4876 OUT UCHAR *pSsidLen);
4882 OUT UCHAR *BcastFlag,
4883 OUT UCHAR *DtimCount,
4884 OUT UCHAR *DtimPeriod,
4885 OUT UCHAR *MessageToMe);
4887 UCHAR ChannelSanity(
4888 IN PRTMP_ADAPTER pAd,
4891 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4892 IN PBSS_ENTRY pBss);
4894 BOOLEAN MlmeDelBAReqSanity(
4895 IN PRTMP_ADAPTER pAd,
4899 BOOLEAN MlmeAddBAReqSanity(
4900 IN PRTMP_ADAPTER pAd,
4905 ULONG MakeOutgoingFrame(
4907 OUT ULONG *Length, ...);
4910 IN PRTMP_ADAPTER pAd,
4914 IN PRTMP_ADAPTER pAd);
4916 VOID AsicUpdateAutoFallBackTable(
4917 IN PRTMP_ADAPTER pAd,
4920 VOID MlmePeriodicExec(
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);
4933 IN PVOID SystemSpecific1,
4934 IN PVOID FunctionContext,
4935 IN PVOID SystemSpecific2,
4936 IN PVOID SystemSpecific3);
4938 VOID STAMlmePeriodicExec(
4942 IN PRTMP_ADAPTER pAd);
4944 VOID MlmeAutoReconnectLastSSID(
4945 IN PRTMP_ADAPTER pAd);
4947 BOOLEAN MlmeValidateSSID(
4951 VOID MlmeCheckForRoaming(
4952 IN PRTMP_ADAPTER pAd,
4955 VOID MlmeCheckForFastRoaming(
4956 IN PRTMP_ADAPTER pAd,
4959 VOID MlmeDynamicTxRateSwitching(
4960 IN PRTMP_ADAPTER pAd);
4963 IN PRTMP_ADAPTER pAd,
4964 IN PMAC_TABLE_ENTRY pEntry,
4965 IN PRTMP_TX_RATE_SWITCH pTxRate);
4967 VOID MlmeSelectTxRateTable(
4968 IN PRTMP_ADAPTER pAd,
4969 IN PMAC_TABLE_ENTRY pEntry,
4971 IN PUCHAR pTableSize,
4972 IN PUCHAR pInitTxRateIdx);
4974 VOID MlmeCalculateChannelQuality(
4975 IN PRTMP_ADAPTER pAd,
4978 VOID MlmeCheckPsmChange(
4979 IN PRTMP_ADAPTER pAd,
4983 IN PRTMP_ADAPTER pAd,
4986 VOID MlmeSetTxPreamble(
4987 IN PRTMP_ADAPTER pAd,
4988 IN USHORT TxPreamble);
4990 VOID UpdateBasicRateBitmap(
4991 IN PRTMP_ADAPTER pAd);
4993 VOID MlmeUpdateTxRates(
4994 IN PRTMP_ADAPTER pAd,
4998 #ifdef DOT11_N_SUPPORT
4999 VOID MlmeUpdateHtTxRates(
5000 IN PRTMP_ADAPTER pAd,
5002 #endif // DOT11_N_SUPPORT //
5004 VOID RTMPCheckRates(
5005 IN PRTMP_ADAPTER pAd,
5006 IN OUT UCHAR SupRate[],
5007 IN OUT UCHAR *SupRateLen);
5009 #ifdef CONFIG_STA_SUPPORT
5010 BOOLEAN RTMPCheckChannel(
5011 IN PRTMP_ADAPTER pAd,
5012 IN UCHAR CentralChannel,
5014 #endif // CONFIG_STA_SUPPORT //
5016 BOOLEAN RTMPCheckHt(
5017 IN PRTMP_ADAPTER pAd,
5019 IN OUT HT_CAPABILITY_IE *pHtCapability,
5020 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5022 VOID StaQuickResponeForRateUpExec(
5023 IN PVOID SystemSpecific1,
5024 IN PVOID FunctionContext,
5025 IN PVOID SystemSpecific2,
5026 IN PVOID SystemSpecific3);
5028 VOID AsicBbpTuning1(
5029 IN PRTMP_ADAPTER pAd);
5031 VOID AsicBbpTuning2(
5032 IN PRTMP_ADAPTER pAd);
5034 VOID RTMPUpdateMlmeRate(
5035 IN PRTMP_ADAPTER pAd);
5038 IN PRTMP_ADAPTER pAd,
5043 VOID AsicEvaluateRxAnt(
5044 IN PRTMP_ADAPTER pAd);
5046 VOID AsicRxAntEvalTimeout(
5047 IN PVOID SystemSpecific1,
5048 IN PVOID FunctionContext,
5049 IN PVOID SystemSpecific2,
5050 IN PVOID SystemSpecific3);
5052 VOID APSDPeriodicExec(
5053 IN PVOID SystemSpecific1,
5054 IN PVOID FunctionContext,
5055 IN PVOID SystemSpecific2,
5056 IN PVOID SystemSpecific3);
5058 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5059 IN PRTMP_ADAPTER pAd,
5060 IN PMAC_TABLE_ENTRY pEntry);
5062 UCHAR RTMPStaFixedTxMode(
5063 IN PRTMP_ADAPTER pAd,
5064 IN PMAC_TABLE_ENTRY pEntry);
5066 VOID RTMPUpdateLegacyTxSetting(
5067 UCHAR fixed_tx_mode,
5068 PMAC_TABLE_ENTRY pEntry);
5070 BOOLEAN RTMPAutoRateSwitchCheck(
5071 IN PRTMP_ADAPTER pAd);
5073 NDIS_STATUS MlmeInit(
5074 IN PRTMP_ADAPTER pAd);
5077 IN PRTMP_ADAPTER pAd);
5080 IN PRTMP_ADAPTER pAd);
5082 VOID MlmeResetRalinkCounters(
5083 IN PRTMP_ADAPTER pAd);
5085 VOID BuildChannelList(
5086 IN PRTMP_ADAPTER pAd);
5089 IN PRTMP_ADAPTER pAd);
5092 IN PRTMP_ADAPTER pAd,
5095 VOID ChangeToCellPowerLimit(
5096 IN PRTMP_ADAPTER pAd,
5097 IN UCHAR AironetCellPowerLimit);
5100 IN PRTMP_ADAPTER pAd,
5104 IN PRTMP_ADAPTER pAd,
5108 IN PRTMP_ADAPTER pAd);
5111 IN PRTMP_ADAPTER pAd,
5116 IN PRTMP_ADAPTER pAd);
5119 IN PRTMP_ADAPTER pAd);
5122 IN PRTMP_ADAPTER pAd);
5124 USHORT RTMP_EEPROM_READ16(
5125 IN PRTMP_ADAPTER pAd,
5128 VOID RTMP_EEPROM_WRITE16(
5129 IN PRTMP_ADAPTER pAd,
5134 // Prototypes of function definition in rtmp_tkip.c
5136 VOID RTMPInitTkipEngine(
5137 IN PRTMP_ADAPTER pAd,
5146 VOID RTMPInitMICEngine(
5147 IN PRTMP_ADAPTER pAd,
5151 IN UCHAR UserPriority,
5154 BOOLEAN RTMPTkipCompareMICValue(
5155 IN PRTMP_ADAPTER pAd,
5160 IN UCHAR UserPriority,
5163 VOID RTMPCalculateMICValue(
5164 IN PRTMP_ADAPTER pAd,
5165 IN PNDIS_PACKET pPacket,
5167 IN PCIPHER_KEY pKey,
5170 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5171 IN PRTMP_ADAPTER pAd,
5179 VOID RTMPTkipAppendByte(
5180 IN PTKIP_KEY_INFO pTkip,
5183 VOID RTMPTkipAppend(
5184 IN PTKIP_KEY_INFO pTkip,
5188 VOID RTMPTkipGetMIC(
5189 IN PTKIP_KEY_INFO pTkip);
5191 BOOLEAN RTMPSoftDecryptTKIP(
5192 IN PRTMP_ADAPTER pAd,
5194 IN ULONG DataByteCnt,
5195 IN UCHAR UserPriority,
5196 IN PCIPHER_KEY pWpaKey);
5198 BOOLEAN RTMPSoftDecryptAES(
5199 IN PRTMP_ADAPTER pAd,
5201 IN ULONG DataByteCnt,
5202 IN PCIPHER_KEY pWpaKey);
5205 // Prototypes of function definition in cmm_info.c
5207 NDIS_STATUS RTMPWPARemoveKeyProc(
5208 IN PRTMP_ADAPTER pAd,
5211 VOID RTMPWPARemoveAllKeys(
5212 IN PRTMP_ADAPTER pAd);
5214 BOOLEAN RTMPCheckStrPrintAble(
5218 VOID RTMPSetPhyMode(
5219 IN PRTMP_ADAPTER pAd,
5222 VOID RTMPUpdateHTIE(
5223 IN RT_HT_CAPABILITY *pRtHt,
5225 OUT HT_CAPABILITY_IE *pHtCapability,
5226 OUT ADD_HT_INFO_IE *pAddHtInfo);
5228 VOID RTMPAddWcidAttributeEntry(
5229 IN PRTMP_ADAPTER pAd,
5233 IN MAC_TABLE_ENTRY *pEntry);
5235 CHAR *GetEncryptType(
5241 VOID RTMPIoctlGetSiteSurvey(
5242 IN PRTMP_ADAPTER pAdapter,
5243 IN struct iwreq *wrq);
5245 VOID RTMPIoctlGetMacTable(
5246 IN PRTMP_ADAPTER pAd,
5247 IN struct iwreq *wrq);
5249 VOID RTMPIndicateWPA2Status(
5250 IN PRTMP_ADAPTER pAdapter);
5252 VOID RTMPOPModeSwitching(
5253 IN PRTMP_ADAPTER pAd);
5255 #ifdef CONFIG_STA_SUPPORT
5256 VOID RTMPAddBSSIDCipher(
5257 IN PRTMP_ADAPTER pAd,
5259 IN PNDIS_802_11_KEY pKey,
5260 IN UCHAR CipherAlg);
5261 #endif // CONFIG_STA_SUPPORT //
5263 #ifdef DOT11_N_SUPPORT
5265 IN PRTMP_ADAPTER pAd,
5266 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5268 VOID RTMPSetIndividualHT(
5269 IN PRTMP_ADAPTER pAd,
5271 #endif // DOT11_N_SUPPORT //
5273 VOID RTMPSendWirelessEvent(
5274 IN PRTMP_ADAPTER pAd,
5275 IN USHORT Event_flag,
5280 VOID NICUpdateCntlCounters(
5281 IN PRTMP_ADAPTER pAd,
5282 IN PHEADER_802_11 pHeader,
5284 IN PRXWI_STRUC pRxWI);
5286 // prototype in wpa.c
5288 BOOLEAN WpaMsgTypeSubst(
5292 VOID WpaPskStateMachineInit(
5293 IN PRTMP_ADAPTER pAd,
5294 IN STATE_MACHINE *S,
5295 OUT STATE_MACHINE_FUNC Trans[]);
5297 VOID WpaEAPOLKeyAction(
5298 IN PRTMP_ADAPTER pAd,
5299 IN MLME_QUEUE_ELEM *Elem);
5301 VOID WpaPairMsg1Action(
5302 IN PRTMP_ADAPTER pAd,
5303 IN MLME_QUEUE_ELEM *Elem);
5305 VOID WpaPairMsg3Action(
5306 IN PRTMP_ADAPTER pAd,
5307 IN MLME_QUEUE_ELEM *Elem);
5309 VOID WpaGroupMsg1Action(
5310 IN PRTMP_ADAPTER pAd,
5311 IN MLME_QUEUE_ELEM *Elem);
5313 VOID WpaMacHeaderInit(
5314 IN PRTMP_ADAPTER pAd,
5315 IN OUT PHEADER_802_11 pHdr80211,
5319 VOID Wpa2PairMsg1Action(
5320 IN PRTMP_ADAPTER pAd,
5321 IN MLME_QUEUE_ELEM *Elem);
5323 VOID Wpa2PairMsg3Action(
5324 IN PRTMP_ADAPTER pAd,
5325 IN MLME_QUEUE_ELEM *Elem);
5327 BOOLEAN ParseKeyData(
5328 IN PRTMP_ADAPTER pAd,
5330 IN UCHAR KeyDataLen,
5331 IN UCHAR bPairewise);
5333 VOID RTMPToWirelessSta(
5334 IN PRTMP_ADAPTER pAd,
5335 IN PUCHAR pHeader802_3,
5339 IN BOOLEAN is4wayFrame);
5367 IN PRTMP_ADAPTER pAd,
5377 IN PRTMP_ADAPTER pAd,
5382 // prototype in aironet.c
5384 VOID AironetStateMachineInit(
5385 IN PRTMP_ADAPTER pAd,
5386 IN STATE_MACHINE *S,
5387 OUT STATE_MACHINE_FUNC Trans[]);
5389 VOID AironetMsgAction(
5390 IN PRTMP_ADAPTER pAd,
5391 IN MLME_QUEUE_ELEM *Elem);
5393 VOID AironetRequestAction(
5394 IN PRTMP_ADAPTER pAd,
5395 IN MLME_QUEUE_ELEM *Elem);
5397 VOID ChannelLoadRequestAction(
5398 IN PRTMP_ADAPTER pAd,
5401 VOID NoiseHistRequestAction(
5402 IN PRTMP_ADAPTER pAd,
5405 VOID BeaconRequestAction(
5406 IN PRTMP_ADAPTER pAd,
5409 VOID AironetReportAction(
5410 IN PRTMP_ADAPTER pAd,
5411 IN MLME_QUEUE_ELEM *Elem);
5413 VOID ChannelLoadReportAction(
5414 IN PRTMP_ADAPTER pAd,
5417 VOID NoiseHistReportAction(
5418 IN PRTMP_ADAPTER pAd,
5421 VOID AironetFinalReportAction(
5422 IN PRTMP_ADAPTER pAd);
5424 VOID BeaconReportAction(
5425 IN PRTMP_ADAPTER pAd,
5428 VOID AironetAddBeaconReport(
5429 IN PRTMP_ADAPTER pAd,
5431 IN PMLME_QUEUE_ELEM pElem);
5433 VOID AironetCreateBeaconReportFromBssTable(
5434 IN PRTMP_ADAPTER pAd);
5436 VOID DBGPRINT_TX_RING(
5437 IN PRTMP_ADAPTER pAd,
5440 VOID DBGPRINT_RX_RING(
5441 IN PRTMP_ADAPTER pAd);
5444 IN PRTMP_ADAPTER pAd,
5446 IN UCHAR RssiNumber);
5449 #ifdef DOT11N_DRAFT3
5450 VOID BuildEffectedChannelList(
5451 IN PRTMP_ADAPTER pAd);
5452 #endif // DOT11N_DRAFT3 //
5455 VOID APAsicEvaluateRxAnt(
5456 IN PRTMP_ADAPTER pAd);
5459 VOID APAsicRxAntEvalTimeout(
5460 IN PRTMP_ADAPTER pAd);
5463 // function prototype in cmm_wpa.c
5465 BOOLEAN RTMPCheckWPAframe(
5466 IN PRTMP_ADAPTER pAd,
5467 IN PMAC_TABLE_ENTRY pEntry,
5469 IN ULONG DataByteCount,
5470 IN UCHAR FromWhichBSSID);
5472 VOID AES_GTK_KEY_UNWRAP(
5474 OUT UCHAR *plaintext,
5476 IN UCHAR *ciphertext);
5478 BOOLEAN RTMPCheckRSNIE(
5479 IN PRTMP_ADAPTER pAd,
5482 IN MAC_TABLE_ENTRY *pEntry,
5485 BOOLEAN RTMPParseEapolKeyData(
5486 IN PRTMP_ADAPTER pAd,
5488 IN UCHAR KeyDataLen,
5489 IN UCHAR GroupKeyIndex,
5492 IN MAC_TABLE_ENTRY *pEntry);
5494 VOID ConstructEapolMsg(
5495 IN PRTMP_ADAPTER pAd,
5496 IN UCHAR PeerAuthMode,
5497 IN UCHAR PeerWepStatus,
5498 IN UCHAR MyGroupKeyWepStatus,
5500 IN UCHAR DefaultKeyIdx,
5501 IN UCHAR *ReplayCounter,
5508 OUT PEAPOL_PACKET pMsg);
5511 IN PRTMP_ADAPTER pAd,
5512 IN UCHAR PeerWepStatus,
5514 OUT PEAPOL_PACKET pMsg);
5516 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5517 IN PRTMP_ADAPTER pAd,
5519 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5520 IN PCIPHER_KEY pShard_key);
5522 VOID ConstructEapolKeyData(
5523 IN PRTMP_ADAPTER pAd,
5524 IN UCHAR PeerAuthMode,
5525 IN UCHAR PeerWepStatus,
5526 IN UCHAR GroupKeyWepStatus,
5528 IN UCHAR DefaultKeyIdx,
5529 IN BOOLEAN bWPA2Capable,
5534 OUT PEAPOL_PACKET pMsg);
5537 IN PRTMP_ADAPTER pAd,
5543 // function prototype in ap_wpa.c
5546 BOOLEAN APWpaMsgTypeSubst(
5550 MAC_TABLE_ENTRY *PACInquiry(
5551 IN PRTMP_ADAPTER pAd,
5554 BOOLEAN RTMPCheckMcast(
5555 IN PRTMP_ADAPTER pAd,
5556 IN PEID_STRUCT eid_ptr,
5557 IN MAC_TABLE_ENTRY *pEntry);
5559 BOOLEAN RTMPCheckUcast(
5560 IN PRTMP_ADAPTER pAd,
5561 IN PEID_STRUCT eid_ptr,
5562 IN MAC_TABLE_ENTRY *pEntry);
5564 BOOLEAN RTMPCheckAUTH(
5565 IN PRTMP_ADAPTER pAd,
5566 IN PEID_STRUCT eid_ptr,
5567 IN MAC_TABLE_ENTRY *pEntry);
5569 VOID WPAStart4WayHS(
5570 IN PRTMP_ADAPTER pAd,
5571 IN MAC_TABLE_ENTRY *pEntry,
5572 IN ULONG TimeInterval);
5574 VOID WPAStart2WayGroupHS(
5575 IN PRTMP_ADAPTER pAd,
5576 IN MAC_TABLE_ENTRY *pEntry);
5578 VOID APWpaEAPPacketAction(
5579 IN PRTMP_ADAPTER pAd,
5580 IN MLME_QUEUE_ELEM *Elem);
5582 VOID APWpaEAPOLStartAction(
5583 IN PRTMP_ADAPTER pAd,
5584 IN MLME_QUEUE_ELEM *Elem);
5586 VOID APWpaEAPOLLogoffAction(
5587 IN PRTMP_ADAPTER pAd,
5588 IN MLME_QUEUE_ELEM *Elem);
5590 VOID APWpaEAPOLKeyAction(
5591 IN PRTMP_ADAPTER pAd,
5592 IN MLME_QUEUE_ELEM *Elem);
5594 VOID APWpaEAPOLASFAlertAction(
5595 IN PRTMP_ADAPTER pAd,
5596 IN MLME_QUEUE_ELEM *Elem);
5598 VOID HandleCounterMeasure(
5599 IN PRTMP_ADAPTER pAd,
5600 IN MAC_TABLE_ENTRY *pEntry);
5602 VOID PeerPairMsg2Action(
5603 IN PRTMP_ADAPTER pAd,
5604 IN MAC_TABLE_ENTRY *pEntry,
5605 IN MLME_QUEUE_ELEM *Elem);
5607 VOID PeerPairMsg4Action(
5608 IN PRTMP_ADAPTER pAd,
5609 IN MAC_TABLE_ENTRY *pEntry,
5610 IN MLME_QUEUE_ELEM *Elem);
5613 IN PVOID SystemSpecific1,
5614 IN PVOID FunctionContext,
5615 IN PVOID SystemSpecific2,
5616 IN PVOID SystemSpecific3);
5619 IN PVOID SystemSpecific1,
5620 IN PVOID FunctionContext,
5621 IN PVOID SystemSpecific2,
5622 IN PVOID SystemSpecific3);
5624 VOID EnqueueStartForPSKExec(
5625 IN PVOID SystemSpecific1,
5626 IN PVOID FunctionContext,
5627 IN PVOID SystemSpecific2,
5628 IN PVOID SystemSpecific3);
5630 VOID RTMPHandleSTAKey(
5631 IN PRTMP_ADAPTER pAdapter,
5632 IN MAC_TABLE_ENTRY *pEntry,
5633 IN MLME_QUEUE_ELEM *Elem);
5635 VOID PeerGroupMsg2Action(
5636 IN PRTMP_ADAPTER pAd,
5637 IN PMAC_TABLE_ENTRY pEntry,
5641 VOID PairDisAssocAction(
5642 IN PRTMP_ADAPTER pAd,
5643 IN PMAC_TABLE_ENTRY pEntry,
5646 VOID MlmeDeAuthAction(
5647 IN PRTMP_ADAPTER pAd,
5648 IN PMAC_TABLE_ENTRY pEntry,
5651 VOID GREKEYPeriodicExec(
5652 IN PVOID SystemSpecific1,
5653 IN PVOID FunctionContext,
5654 IN PVOID SystemSpecific2,
5655 IN PVOID SystemSpecific3);
5677 IN PRTMP_ADAPTER pAd,
5680 VOID AES_GTK_KEY_WRAP(
5682 IN UCHAR *plaintext,
5684 OUT UCHAR *ciphertext);
5687 IN PRTMP_ADAPTER pAdapter,
5691 VOID APToWirelessSta(
5692 IN PRTMP_ADAPTER pAd,
5693 IN MAC_TABLE_ENTRY *pEntry,
5694 IN PUCHAR pHeader802_3,
5698 IN BOOLEAN bClearFrame);
5700 VOID RTMPAddPMKIDCache(
5701 IN PRTMP_ADAPTER pAd,
5707 INT RTMPSearchPMKIDCache(
5708 IN PRTMP_ADAPTER pAd,
5712 VOID RTMPDeletePMKIDCache(
5713 IN PRTMP_ADAPTER pAd,
5717 VOID RTMPMaintainPMKIDCache(
5718 IN PRTMP_ADAPTER pAd);
5720 VOID RTMPSendTriggerFrame(
5721 IN PRTMP_ADAPTER pAd,
5725 IN BOOLEAN bQosNull);
5729 VOID RTMP_SetPeriodicTimer(
5730 IN NDIS_MINIPORT_TIMER *pTimer,
5731 IN unsigned long timeout);
5733 VOID RTMP_OS_Init_Timer(
5734 IN PRTMP_ADAPTER pAd,
5735 IN NDIS_MINIPORT_TIMER *pTimer,
5736 IN TIMER_FUNCTION function,
5739 VOID RTMP_OS_Add_Timer(
5740 IN NDIS_MINIPORT_TIMER *pTimer,
5741 IN unsigned long timeout);
5743 VOID RTMP_OS_Mod_Timer(
5744 IN NDIS_MINIPORT_TIMER *pTimer,
5745 IN unsigned long timeout);
5748 VOID RTMP_OS_Del_Timer(
5749 IN NDIS_MINIPORT_TIMER *pTimer,
5750 OUT BOOLEAN *pCancelled);
5753 VOID RTMP_OS_Release_Packet(
5754 IN PRTMP_ADAPTER pAd,
5755 IN PQUEUE_ENTRY pEntry);
5760 NDIS_STATUS os_alloc_mem(
5761 IN PRTMP_ADAPTER pAd,
5765 NDIS_STATUS os_free_mem(
5766 IN PRTMP_ADAPTER pAd,
5770 void RTMP_AllocateSharedMemory(
5771 IN PRTMP_ADAPTER pAd,
5774 OUT PVOID *VirtualAddress,
5775 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5777 VOID RTMPFreeTxRxRingMemory(
5778 IN PRTMP_ADAPTER pAd);
5780 NDIS_STATUS AdapterBlockAllocateMemory(
5784 void RTMP_AllocateTxDescMemory(
5785 IN PRTMP_ADAPTER pAd,
5789 OUT PVOID *VirtualAddress,
5790 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5792 void RTMP_AllocateFirstTxBuffer(
5793 IN PRTMP_ADAPTER pAd,
5797 OUT PVOID *VirtualAddress,
5798 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5800 void RTMP_AllocateMgmtDescMemory(
5801 IN PRTMP_ADAPTER pAd,
5804 OUT PVOID *VirtualAddress,
5805 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5807 void RTMP_AllocateRxDescMemory(
5808 IN PRTMP_ADAPTER pAd,
5811 OUT PVOID *VirtualAddress,
5812 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5814 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5815 IN PRTMP_ADAPTER pAd,
5818 OUT PVOID *VirtualAddress,
5819 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5821 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5822 IN PRTMP_ADAPTER pAd,
5825 OUT PVOID *VirtualAddress);
5827 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5828 IN PRTMP_ADAPTER pAd,
5831 void RTMP_QueryPacketInfo(
5832 IN PNDIS_PACKET pPacket,
5833 OUT PACKET_INFO *pPacketInfo,
5834 OUT PUCHAR *pSrcBufVA,
5835 OUT UINT *pSrcBufLen);
5837 void RTMP_QueryNextPacketInfo(
5838 IN PNDIS_PACKET *ppPacket,
5839 OUT PACKET_INFO *pPacketInfo,
5840 OUT PUCHAR *pSrcBufVA,
5841 OUT UINT *pSrcBufLen);
5844 BOOLEAN RTMP_FillTxBlkInfo(
5845 IN RTMP_ADAPTER *pAd,
5849 PRTMP_SCATTER_GATHER_LIST
5850 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5853 void announce_802_3_packet(
5854 IN PRTMP_ADAPTER pAd,
5855 IN PNDIS_PACKET pPacket);
5858 UINT BA_Reorder_AMSDU_Annnounce(
5859 IN PRTMP_ADAPTER pAd,
5860 IN PNDIS_PACKET pPacket);
5863 UINT Handle_AMSDU_Packet(
5864 IN PRTMP_ADAPTER pAd,
5867 IN UCHAR FromWhichBSSID);
5870 void convert_802_11_to_802_3_packet(
5871 IN PRTMP_ADAPTER pAd,
5872 IN PNDIS_PACKET pPacket,
5876 IN UCHAR FromWhichBSSID);
5879 PNET_DEV get_netdev_from_bssid(
5880 IN PRTMP_ADAPTER pAd,
5881 IN UCHAR FromWhichBSSID);
5884 PNDIS_PACKET duplicate_pkt(
5885 IN PRTMP_ADAPTER pAd,
5886 IN PUCHAR pHeader802_3,
5890 IN UCHAR FromWhichBSSID);
5893 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5894 IN PRTMP_ADAPTER pAd,
5895 IN PNDIS_PACKET pOldPkt);
5897 PNDIS_PACKET duplicate_pkt_with_VLAN(
5898 IN PRTMP_ADAPTER pAd,
5899 IN PUCHAR pHeader802_3,
5903 IN UCHAR FromWhichBSSID);
5905 PNDIS_PACKET duplicate_pkt_with_WPI(
5906 IN PRTMP_ADAPTER pAd,
5907 IN PNDIS_PACKET pPacket,
5908 IN UINT32 ext_head_len,
5909 IN UINT32 ext_tail_len);
5911 UCHAR VLAN_8023_Header_Copy(
5912 IN PRTMP_ADAPTER pAd,
5913 IN PUCHAR pHeader802_3,
5916 IN UCHAR FromWhichBSSID);
5918 #ifdef DOT11_N_SUPPORT
5919 void ba_flush_reordering_timeout_mpdus(
5920 IN PRTMP_ADAPTER pAd,
5921 IN PBA_REC_ENTRY pBAEntry,
5925 VOID BAOriSessionSetUp(
5926 IN PRTMP_ADAPTER pAd,
5927 IN MAC_TABLE_ENTRY *pEntry,
5931 IN BOOLEAN isForced);
5933 VOID BASessionTearDownALL(
5934 IN OUT PRTMP_ADAPTER pAd,
5936 #endif // DOT11_N_SUPPORT //
5938 BOOLEAN OS_Need_Clone_Packet(void);
5941 VOID build_tx_packet(
5942 IN PRTMP_ADAPTER pAd,
5943 IN PNDIS_PACKET pPacket,
5948 VOID BAOriSessionTearDown(
5949 IN OUT PRTMP_ADAPTER pAd,
5952 IN BOOLEAN bPassive,
5953 IN BOOLEAN bForceSend);
5955 VOID BARecSessionTearDown(
5956 IN OUT PRTMP_ADAPTER pAd,
5959 IN BOOLEAN bPassive);
5961 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5962 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5964 ULONG AutoChBssInsertEntry(
5965 IN PRTMP_ADAPTER pAd,
5972 void AutoChBssTableInit(
5973 IN PRTMP_ADAPTER pAd);
5975 void ChannelInfoInit(
5976 IN PRTMP_ADAPTER pAd);
5978 void AutoChBssTableDestroy(
5979 IN PRTMP_ADAPTER pAd);
5981 void ChannelInfoDestroy(
5982 IN PRTMP_ADAPTER pAd);
5984 UCHAR New_ApAutoSelectChannel(
5985 IN PRTMP_ADAPTER pAd);
5987 BOOLEAN rtstrmactohex(
5991 BOOLEAN rtstrcasecmp(
5995 char *rtstrstruncasecmp(
6001 IN const char * s2);
6005 IN const char * ct);
6009 unsigned int *addr);
6011 ////////// common ioctl functions //////////
6012 INT Set_DriverVersion_Proc(
6013 IN PRTMP_ADAPTER pAd,
6016 INT Set_CountryRegion_Proc(
6017 IN PRTMP_ADAPTER pAd,
6020 INT Set_CountryRegionABand_Proc(
6021 IN PRTMP_ADAPTER pAd,
6024 INT Set_WirelessMode_Proc(
6025 IN PRTMP_ADAPTER pAd,
6028 INT Set_Channel_Proc(
6029 IN PRTMP_ADAPTER pAd,
6032 INT Set_ShortSlot_Proc(
6033 IN PRTMP_ADAPTER pAd,
6036 INT Set_TxPower_Proc(
6037 IN PRTMP_ADAPTER pAd,
6040 INT Set_BGProtection_Proc(
6041 IN PRTMP_ADAPTER pAd,
6044 INT Set_TxPreamble_Proc(
6045 IN PRTMP_ADAPTER pAd,
6048 INT Set_RTSThreshold_Proc(
6049 IN PRTMP_ADAPTER pAd,
6052 INT Set_FragThreshold_Proc(
6053 IN PRTMP_ADAPTER pAd,
6056 INT Set_TxBurst_Proc(
6057 IN PRTMP_ADAPTER pAd,
6060 #ifdef AGGREGATION_SUPPORT
6061 INT Set_PktAggregate_Proc(
6062 IN PRTMP_ADAPTER pAd,
6066 INT Set_IEEE80211H_Proc(
6067 IN PRTMP_ADAPTER pAd,
6072 IN PRTMP_ADAPTER pAd,
6076 INT Show_DescInfo_Proc(
6077 IN PRTMP_ADAPTER pAd,
6080 INT Set_ResetStatCounter_Proc(
6081 IN PRTMP_ADAPTER pAd,
6084 #ifdef DOT11_N_SUPPORT
6085 INT Set_BASetup_Proc(
6086 IN PRTMP_ADAPTER pAd,
6089 INT Set_BADecline_Proc(
6090 IN PRTMP_ADAPTER pAd,
6093 INT Set_BAOriTearDown_Proc(
6094 IN PRTMP_ADAPTER pAd,
6097 INT Set_BARecTearDown_Proc(
6098 IN PRTMP_ADAPTER pAd,
6102 IN PRTMP_ADAPTER pAd,
6106 IN PRTMP_ADAPTER pAd,
6110 IN PRTMP_ADAPTER pAd,
6113 INT Set_HtOpMode_Proc(
6114 IN PRTMP_ADAPTER pAd,
6117 INT Set_HtStbc_Proc(
6118 IN PRTMP_ADAPTER pAd,
6122 IN PRTMP_ADAPTER pAd,
6125 INT Set_HtExtcha_Proc(
6126 IN PRTMP_ADAPTER pAd,
6129 INT Set_HtMpduDensity_Proc(
6130 IN PRTMP_ADAPTER pAd,
6133 INT Set_HtBaWinSize_Proc(
6134 IN PRTMP_ADAPTER pAd,
6138 IN PRTMP_ADAPTER pAd,
6141 INT Set_HtLinkAdapt_Proc(
6142 IN PRTMP_ADAPTER pAd,
6145 INT Set_HtAmsdu_Proc(
6146 IN PRTMP_ADAPTER pAd,
6149 INT Set_HtAutoBa_Proc(
6150 IN PRTMP_ADAPTER pAd,
6153 INT Set_HtProtect_Proc(
6154 IN PRTMP_ADAPTER pAd,
6157 INT Set_HtMimoPs_Proc(
6158 IN PRTMP_ADAPTER pAd,
6162 INT Set_ForceShortGI_Proc(
6163 IN PRTMP_ADAPTER pAd,
6166 INT Set_ForceGF_Proc(
6167 IN PRTMP_ADAPTER pAd,
6171 IN PRTMP_ADAPTER pAd);
6173 INT Set_SendPSMPAction_Proc(
6174 IN PRTMP_ADAPTER pAd,
6177 INT Set_HtMIMOPSmode_Proc(
6178 IN PRTMP_ADAPTER pAd,
6182 INT Set_HtTxBASize_Proc(
6183 IN PRTMP_ADAPTER pAd,
6185 #endif // DOT11_N_SUPPORT //
6189 #ifdef CONFIG_STA_SUPPORT
6191 VOID RTMPSendDLSTearDownFrame(
6192 IN PRTMP_ADAPTER pAd,
6195 #ifdef DOT11_N_SUPPORT
6198 IN PRTMP_ADAPTER pAd,
6199 OUT PQUERYBA_TABLE pBAT);
6200 #endif // DOT11_N_SUPPORT //
6202 #ifdef WPA_SUPPLICANT_SUPPORT
6203 INT WpaCheckEapCode(
6204 IN PRTMP_ADAPTER pAd,
6209 VOID WpaSendMicFailureToWpaSupplicant(
6210 IN PRTMP_ADAPTER pAd,
6211 IN BOOLEAN bUnicast);
6213 VOID SendAssocIEsToWpaSupplicant(
6214 IN PRTMP_ADAPTER pAd);
6215 #endif // WPA_SUPPLICANT_SUPPORT //
6217 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6218 int wext_notify_event_assoc(
6219 IN RTMP_ADAPTER *pAd);
6220 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6222 #endif // CONFIG_STA_SUPPORT //
6226 #ifdef DOT11_N_SUPPORT
6227 VOID Handle_BSS_Width_Trigger_Events(
6228 IN PRTMP_ADAPTER pAd);
6230 void build_ext_channel_switch_ie(
6231 IN PRTMP_ADAPTER pAd,
6232 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6233 #endif // DOT11_N_SUPPORT //
6236 BOOLEAN APRxDoneInterruptHandle(
6237 IN PRTMP_ADAPTER pAd);
6239 BOOLEAN STARxDoneInterruptHandle(
6240 IN PRTMP_ADAPTER pAd,
6243 #ifdef DOT11_N_SUPPORT
6244 // AMPDU packet indication
6245 VOID Indicate_AMPDU_Packet(
6246 IN PRTMP_ADAPTER pAd,
6248 IN UCHAR FromWhichBSSID);
6250 // AMSDU packet indication
6251 VOID Indicate_AMSDU_Packet(
6252 IN PRTMP_ADAPTER pAd,
6254 IN UCHAR FromWhichBSSID);
6255 #endif // DOT11_N_SUPPORT //
6257 // Normal legacy Rx packet indication
6258 VOID Indicate_Legacy_Packet(
6259 IN PRTMP_ADAPTER pAd,
6261 IN UCHAR FromWhichBSSID);
6263 VOID Indicate_EAPOL_Packet(
6264 IN PRTMP_ADAPTER pAd,
6266 IN UCHAR FromWhichBSSID);
6268 void update_os_packet_info(
6269 IN PRTMP_ADAPTER pAd,
6271 IN UCHAR FromWhichBSSID);
6273 void wlan_802_11_to_802_3_packet(
6274 IN PRTMP_ADAPTER pAd,
6276 IN PUCHAR pHeader802_3,
6277 IN UCHAR FromWhichBSSID);
6279 UINT deaggregate_AMSDU_announce(
6280 IN PRTMP_ADAPTER pAd,
6281 PNDIS_PACKET pPacket,
6286 #ifdef CONFIG_STA_SUPPORT
6287 // remove LLC and get 802_3 Header
6288 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6290 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6292 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6294 _pDA = _pRxBlk->pHeader->Addr3; \
6295 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6299 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6301 _pDA = _pRxBlk->pHeader->Addr1; \
6302 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6303 _pSA = _pRxBlk->pHeader->Addr2; \
6305 _pSA = _pRxBlk->pHeader->Addr3; \
6309 _pDA = _pRxBlk->pHeader->Addr1; \
6310 _pSA = _pRxBlk->pHeader->Addr2; \
6314 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6315 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6317 #endif // CONFIG_STA_SUPPORT //
6320 BOOLEAN APFowardWirelessStaToWirelessSta(
6321 IN PRTMP_ADAPTER pAd,
6322 IN PNDIS_PACKET pPacket,
6323 IN ULONG FromWhichBSSID);
6325 VOID Announce_or_Forward_802_3_Packet(
6326 IN PRTMP_ADAPTER pAd,
6327 IN PNDIS_PACKET pPacket,
6328 IN UCHAR FromWhichBSSID);
6330 VOID Sta_Announce_or_Forward_802_3_Packet(
6331 IN PRTMP_ADAPTER pAd,
6332 IN PNDIS_PACKET pPacket,
6333 IN UCHAR FromWhichBSSID);
6336 #ifdef CONFIG_STA_SUPPORT
6337 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6338 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6339 //announce_802_3_packet(_pAd, _pPacket);
6340 #endif // CONFIG_STA_SUPPORT //
6343 PNDIS_PACKET DuplicatePacket(
6344 IN PRTMP_ADAPTER pAd,
6345 IN PNDIS_PACKET pPacket,
6346 IN UCHAR FromWhichBSSID);
6349 PNDIS_PACKET ClonePacket(
6350 IN PRTMP_ADAPTER pAd,
6351 IN PNDIS_PACKET pPacket,
6356 // Normal, AMPDU or AMSDU
6357 VOID CmmRxnonRalinkFrameIndicate(
6358 IN PRTMP_ADAPTER pAd,
6360 IN UCHAR FromWhichBSSID);
6362 VOID CmmRxRalinkFrameIndicate(
6363 IN PRTMP_ADAPTER pAd,
6364 IN MAC_TABLE_ENTRY *pEntry,
6366 IN UCHAR FromWhichBSSID);
6368 VOID Update_Rssi_Sample(
6369 IN PRTMP_ADAPTER pAd,
6370 IN RSSI_SAMPLE *pRssi,
6371 IN PRXWI_STRUC pRxWI);
6373 PNDIS_PACKET GetPacketFromRxRing(
6374 IN PRTMP_ADAPTER pAd,
6375 OUT PRT28XX_RXD_STRUC pSaveRxD,
6376 OUT BOOLEAN *pbReschedule,
6377 IN OUT UINT32 *pRxPending);
6379 PNDIS_PACKET RTMPDeFragmentDataFrame(
6380 IN PRTMP_ADAPTER pAd,
6383 ////////////////////////////////////////
6385 #ifdef CONFIG_STA_SUPPORT
6387 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6388 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6389 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6390 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6391 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6392 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6393 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6394 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6395 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6396 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6397 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6400 P80211ENUM_msgitem_status_no_value = 0x00
6403 P80211ENUM_truth_false = 0x00,
6404 P80211ENUM_truth_true = 0x01
6407 /* Definition from madwifi */
6413 } p80211item_uint32_t;
6418 #define WLAN_DEVNAMELEN_MAX 16
6419 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6420 p80211item_uint32_t hosttime;
6421 p80211item_uint32_t mactime;
6422 p80211item_uint32_t channel;
6423 p80211item_uint32_t rssi;
6424 p80211item_uint32_t sq;
6425 p80211item_uint32_t signal;
6426 p80211item_uint32_t noise;
6427 p80211item_uint32_t rate;
6428 p80211item_uint32_t istx;
6429 p80211item_uint32_t frmlen;
6430 } wlan_ng_prism2_header;
6432 /* The radio capture header precedes the 802.11 header. */
6433 typedef struct PACKED _ieee80211_radiotap_header {
6434 UINT8 it_version; /* Version 0. Only increases
6435 * for drastic changes,
6436 * introduction of compatible
6437 * new fields does not count.
6440 UINT16 it_len; /* length of the whole
6441 * header in bytes, including
6442 * it_version, it_pad,
6443 * it_len, and data fields.
6445 UINT32 it_present; /* A bitmap telling which
6446 * fields are present. Set bit 31
6447 * (0x80000000) to extend the
6448 * bitmap by another 32 bits.
6449 * Additional extensions are made
6450 * by setting bit 31.
6452 }ieee80211_radiotap_header ;
6454 enum ieee80211_radiotap_type {
6455 IEEE80211_RADIOTAP_TSFT = 0,
6456 IEEE80211_RADIOTAP_FLAGS = 1,
6457 IEEE80211_RADIOTAP_RATE = 2,
6458 IEEE80211_RADIOTAP_CHANNEL = 3,
6459 IEEE80211_RADIOTAP_FHSS = 4,
6460 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6461 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6462 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6463 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6464 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6465 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6466 IEEE80211_RADIOTAP_ANTENNA = 11,
6467 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6468 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6471 #define WLAN_RADIOTAP_PRESENT ( \
6472 (1 << IEEE80211_RADIOTAP_TSFT) | \
6473 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6474 (1 << IEEE80211_RADIOTAP_RATE) | \
6477 typedef struct _wlan_radiotap_header {
6478 ieee80211_radiotap_header wt_ihdr;
6482 } wlan_radiotap_header;
6483 /* Definition from madwifi */
6485 void send_monitor_packets(
6486 IN PRTMP_ADAPTER pAd,
6489 #if WIRELESS_EXT >= 12
6490 // This function will be called when query /proc
6491 struct iw_statistics *rt28xx_get_wireless_stats(
6492 IN struct net_device *net_dev);
6495 VOID RTMPSetDesiredRates(
6496 IN PRTMP_ADAPTER pAdapter,
6498 #endif // CONFIG_STA_SUPPORT //
6500 INT Set_FixedTxMode_Proc(
6501 IN PRTMP_ADAPTER pAd,
6504 static inline char* GetPhyMode(
6514 #ifdef DOT11_N_SUPPORT
6518 case MODE_HTGREENFIELD:
6520 #endif // DOT11_N_SUPPORT //
6527 static inline char* GetBW(
6537 #ifdef DOT11_N_SUPPORT
6540 #endif // DOT11_N_SUPPORT //
6547 VOID RT28xxThreadTerminate(
6548 IN RTMP_ADAPTER *pAd);
6550 BOOLEAN RT28XXChipsetCheck(
6553 BOOLEAN RT28XXNetDevInit(
6555 IN struct net_device *net_dev,
6556 IN RTMP_ADAPTER *pAd);
6558 BOOLEAN RT28XXProbePostConfig(
6560 IN RTMP_ADAPTER *pAd,
6563 VOID RT28XXDMADisable(
6564 IN RTMP_ADAPTER *pAd);
6566 VOID RT28XXDMAEnable(
6567 IN RTMP_ADAPTER *pAd);
6569 VOID RT28xx_UpdateBeaconToAsic(
6570 IN RTMP_ADAPTER * pAd,
6573 IN ULONG UpdatePos);
6576 IN struct net_device *net_dev,
6577 IN OUT struct ifreq *rq,
6581 #ifdef CONFIG_STA_SUPPORT
6582 INT rt28xx_sta_ioctl(
6583 IN struct net_device *net_dev,
6584 IN OUT struct ifreq *rq,
6586 #endif // CONFIG_STA_SUPPORT //
6588 BOOLEAN RT28XXSecurityKeyAdd(
6589 IN PRTMP_ADAPTER pAd,
6592 IN MAC_TABLE_ENTRY *pEntry);
6594 ////////////////////////////////////////
6595 PNDIS_PACKET GetPacketFromRxRing(
6596 IN PRTMP_ADAPTER pAd,
6597 OUT PRT28XX_RXD_STRUC pSaveRxD,
6598 OUT BOOLEAN *pbReschedule,
6599 IN OUT UINT32 *pRxPending);
6602 void kill_thread_task(PRTMP_ADAPTER pAd);
6604 void tbtt_tasklet(unsigned long data);
6607 // Function Prototype in cmm_data_2860.c
6609 USHORT RtmpPCI_WriteTxResource(
6610 IN PRTMP_ADAPTER pAd,
6613 OUT USHORT *FreeNumber);
6615 USHORT RtmpPCI_WriteSingleTxResource(
6616 IN PRTMP_ADAPTER pAd,
6619 OUT USHORT *FreeNumber);
6621 USHORT RtmpPCI_WriteMultiTxResource(
6622 IN PRTMP_ADAPTER pAd,
6625 OUT USHORT *FreeNumber);
6627 USHORT RtmpPCI_WriteFragTxResource(
6628 IN PRTMP_ADAPTER pAd,
6631 OUT USHORT *FreeNumber);
6633 USHORT RtmpPCI_WriteSubTxResource(
6634 IN PRTMP_ADAPTER pAd,
6637 OUT USHORT *FreeNumber);
6639 VOID RtmpPCI_FinalWriteTxResource(
6640 IN PRTMP_ADAPTER pAd,
6642 IN USHORT totalMPDUSize,
6643 IN USHORT FirstTxIdx);
6645 VOID RtmpPCIDataLastTxIdx(
6646 IN PRTMP_ADAPTER pAd,
6648 IN USHORT LastTxIdx);
6650 VOID RtmpPCIDataKickOut(
6651 IN PRTMP_ADAPTER pAd,
6656 int RtmpPCIMgmtKickOut(
6657 IN RTMP_ADAPTER *pAd,
6659 IN PNDIS_PACKET pPacket,
6660 IN PUCHAR pSrcBufVA,
6664 NDIS_STATUS RTMPCheckRxError(
6665 IN PRTMP_ADAPTER pAd,
6666 IN PHEADER_802_11 pHeader,
6667 IN PRXWI_STRUC pRxWI,
6668 IN PRT28XX_RXD_STRUC pRxD);
6670 #ifdef CONFIG_STA_SUPPORT
6671 VOID RTMPInitPCIeLinkCtrlValue(
6672 IN PRTMP_ADAPTER pAd);
6674 VOID RTMPFindHostPCIDev(
6675 IN PRTMP_ADAPTER pAd);
6677 VOID RTMPPCIeLinkCtrlValueRestore(
6678 IN PRTMP_ADAPTER pAd,
6681 VOID RTMPPCIeLinkCtrlSetting(
6682 IN PRTMP_ADAPTER pAd,
6685 VOID RT28xxPciAsicRadioOff(
6686 IN PRTMP_ADAPTER pAd,
6688 IN USHORT TbttNumToNextWakeUp);
6690 BOOLEAN RT28xxPciAsicRadioOn(
6691 IN PRTMP_ADAPTER pAd,
6694 VOID RT28xxPciStaAsicForceWakeup(
6695 IN PRTMP_ADAPTER pAd,
6698 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6699 IN PRTMP_ADAPTER pAd,
6700 IN USHORT TbttNumToNextWakeUp);
6702 VOID PsPollWakeExec(
6703 IN PVOID SystemSpecific1,
6704 IN PVOID FunctionContext,
6705 IN PVOID SystemSpecific2,
6706 IN PVOID SystemSpecific3);
6709 IN PVOID SystemSpecific1,
6710 IN PVOID FunctionContext,
6711 IN PVOID SystemSpecific2,
6712 IN PVOID SystemSpecific3);
6713 #endif // CONFIG_STA_SUPPORT //
6715 VOID RT28xxPciMlmeRadioOn(
6716 IN PRTMP_ADAPTER pAd);
6718 VOID RT28xxPciMlmeRadioOFF(
6719 IN PRTMP_ADAPTER pAd);
6721 VOID AsicTurnOffRFClk(
6722 IN PRTMP_ADAPTER pAd,
6725 VOID AsicTurnOnRFClk(
6726 IN PRTMP_ADAPTER pAd,
6730 ////////////////////////////////////////
6733 IN RTMP_ADAPTER *pAd);
6735 UINT32 QBSS_LoadElementAppend(
6736 IN RTMP_ADAPTER *pAd,
6739 VOID QBSS_LoadUpdate(
6740 IN RTMP_ADAPTER *pAd);
6742 ///////////////////////////////////////
6743 INT RTMPShowCfgValue(
6744 IN PRTMP_ADAPTER pAd,
6748 PCHAR RTMPGetRalinkAuthModeStr(
6749 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6751 PCHAR RTMPGetRalinkEncryModeStr(
6752 IN USHORT encryMode);
6753 //////////////////////////////////////
6755 #ifdef CONFIG_STA_SUPPORT
6756 VOID AsicStaBbpTuning(
6757 IN PRTMP_ADAPTER pAd);
6759 VOID AsicResetFromDMABusy(
6760 IN PRTMP_ADAPTER pAd);
6763 IN PRTMP_ADAPTER pAd);
6766 IN PRTMP_ADAPTER pAd);
6769 IN PRTMP_ADAPTER pAd);
6770 #endif // CONFIG_STA_SUPPORT //
6772 void RTMP_IndicateMediaState(
6773 IN PRTMP_ADAPTER pAd);
6775 VOID ReSyncBeaconTime(
6776 IN PRTMP_ADAPTER pAd);
6778 VOID RTMPSetAGCInitValue(
6779 IN PRTMP_ADAPTER pAd,
6780 IN UCHAR BandWidth);
6782 int rt28xx_close(IN PNET_DEV dev);
6783 int rt28xx_open(IN PNET_DEV dev);
6785 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6787 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6788 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6790 if (VIRTUAL_IF_NUM(pAd) == 0)
6792 if (rt28xx_open(pAd->net_dev) != 0)
6798 VIRTUAL_IF_INC(pAd);
6802 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6804 VIRTUAL_IF_DEC(pAd);
6805 if (VIRTUAL_IF_NUM(pAd) == 0)
6806 rt28xx_close(pAd->net_dev);
6811 #endif // __RTMP_H__