2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 Miniport generic portion header file
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
43 #include "link_list.h"
44 #include "spectrum_def.h"
47 #ifdef CONFIG_STA_SUPPORT
49 #endif // CONFIG_STA_SUPPORT //
51 //#define DBG_DIAGNOSE 1
53 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
54 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
55 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
57 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
58 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
61 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
62 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
63 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
68 // NDIS Version definitions
70 #ifdef NDIS50_MINIPORT
71 #define RTMP_NDIS_MAJOR_VERSION 5
72 #define RTMP_NDIS_MINOR_VERSION 0
75 #ifdef NDIS51_MINIPORT
76 #define RTMP_NDIS_MAJOR_VERSION 5
77 #define RTMP_NDIS_MINOR_VERSION 1
80 extern char NIC_VENDOR_DESC[];
81 extern int NIC_VENDOR_DESC_LEN;
83 extern unsigned char SNAP_AIRONET[];
84 extern unsigned char CipherSuiteCiscoCCKM[];
85 extern unsigned char CipherSuiteCiscoCCKMLen;
86 extern unsigned char CipherSuiteCiscoCCKM24[];
87 extern unsigned char CipherSuiteCiscoCCKM24Len;
88 extern unsigned char CipherSuiteCCXTkip[];
89 extern unsigned char CipherSuiteCCXTkipLen;
90 extern unsigned char CISCO_OUI[];
91 extern UCHAR BaSizeArray[4];
93 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
94 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
95 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
96 extern ULONG BIT32[32];
98 extern char* CipherName[];
99 extern char* MCSToMbps[];
100 extern UCHAR RxwiMCSToOfdmRate[12];
101 extern UCHAR SNAP_802_1H[6];
102 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
103 extern UCHAR SNAP_AIRONET[8];
104 extern UCHAR CKIP_LLC_SNAP[8];
105 extern UCHAR EAPOL_LLC_SNAP[8];
106 extern UCHAR EAPOL[2];
108 extern UCHAR APPLE_TALK[2];
109 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
110 extern UCHAR OfdmRateToRxwiMCS[];
111 extern UCHAR OfdmSignalToRateId[16] ;
112 extern UCHAR default_cwmin[4];
113 extern UCHAR default_cwmax[4];
114 extern UCHAR default_sta_aifsn[4];
115 extern UCHAR MapUserPriorityToAccessCategory[8];
117 extern USHORT RateUpPER[];
118 extern USHORT RateDownPER[];
119 extern UCHAR Phy11BNextRateDownward[];
120 extern UCHAR Phy11BNextRateUpward[];
121 extern UCHAR Phy11BGNextRateDownward[];
122 extern UCHAR Phy11BGNextRateUpward[];
123 extern UCHAR Phy11ANextRateDownward[];
124 extern UCHAR Phy11ANextRateUpward[];
125 extern CHAR RssiSafeLevelForTxRate[];
126 extern UCHAR RateIdToMbps[];
127 extern USHORT RateIdTo500Kbps[];
129 extern UCHAR CipherSuiteWpaNoneTkip[];
130 extern UCHAR CipherSuiteWpaNoneTkipLen;
132 extern UCHAR CipherSuiteWpaNoneAes[];
133 extern UCHAR CipherSuiteWpaNoneAesLen;
136 extern UCHAR SupRateIe;
137 extern UCHAR ExtRateIe;
139 #ifdef DOT11_N_SUPPORT
140 extern UCHAR HtCapIe;
141 extern UCHAR AddHtInfoIe;
142 extern UCHAR NewExtChanIe;
144 extern UCHAR ExtHtCapIe;
145 #endif // DOT11N_DRAFT3 //
146 #endif // DOT11_N_SUPPORT //
156 extern UCHAR WPA_OUI[];
157 extern UCHAR RSN_OUI[];
158 extern UCHAR WME_INFO_ELEM[];
159 extern UCHAR WME_PARM_ELEM[];
160 extern UCHAR Ccx2QosInfo[];
161 extern UCHAR Ccx2IeInfo[];
162 extern UCHAR RALINK_OUI[];
163 extern UCHAR PowerConstraintIE[];
166 extern UCHAR RateSwitchTable[];
167 extern UCHAR RateSwitchTable11B[];
168 extern UCHAR RateSwitchTable11G[];
169 extern UCHAR RateSwitchTable11BG[];
171 #ifdef DOT11_N_SUPPORT
172 extern UCHAR RateSwitchTable11BGN1S[];
173 extern UCHAR RateSwitchTable11BGN2S[];
174 extern UCHAR RateSwitchTable11BGN2SForABand[];
175 extern UCHAR RateSwitchTable11N1S[];
176 extern UCHAR RateSwitchTable11N2S[];
177 extern UCHAR RateSwitchTable11N2SForABand[];
179 #ifdef CONFIG_STA_SUPPORT
180 extern UCHAR PRE_N_HT_OUI[];
181 #endif // CONFIG_STA_SUPPORT //
182 #endif // DOT11_N_SUPPORT //
184 #define MAXSEQ (0xFFF)
186 #ifdef DOT11_N_SUPPORT
187 struct reordering_mpdu
189 struct reordering_mpdu *next;
190 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
191 int Sequence; /* sequence number of MPDU */
195 struct reordering_list
197 struct reordering_mpdu *next;
201 struct reordering_mpdu_pool
205 struct reordering_list freelist;
207 #endif // DOT11_N_SUPPORT //
209 typedef struct _RSSI_SAMPLE {
210 CHAR LastRssi0; // last received RSSI
211 CHAR LastRssi1; // last received RSSI
212 CHAR LastRssi2; // last received RSSI
222 // Queue structure and macros
224 typedef struct _QUEUE_ENTRY {
225 struct _QUEUE_ENTRY *Next;
226 } QUEUE_ENTRY, *PQUEUE_ENTRY;
229 typedef struct _QUEUE_HEADER {
233 } QUEUE_HEADER, *PQUEUE_HEADER;
235 #define InitializeQueueHeader(QueueHeader) \
237 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
238 (QueueHeader)->Number = 0; \
241 #define RemoveHeadQueue(QueueHeader) \
242 (QueueHeader)->Head; \
244 PQUEUE_ENTRY pNext; \
245 if ((QueueHeader)->Head != NULL) \
247 pNext = (QueueHeader)->Head->Next; \
248 (QueueHeader)->Head = pNext; \
250 (QueueHeader)->Tail = NULL; \
251 (QueueHeader)->Number--; \
255 #define InsertHeadQueue(QueueHeader, QueueEntry) \
257 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
258 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
259 if ((QueueHeader)->Tail == NULL) \
260 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
261 (QueueHeader)->Number++; \
264 #define InsertTailQueue(QueueHeader, QueueEntry) \
266 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
267 if ((QueueHeader)->Tail) \
268 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
270 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
271 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
272 (QueueHeader)->Number++; \
276 // Macros for flag and ref count operations
278 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
279 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
280 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
281 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
282 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
284 // Macro for power save flag.
285 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
286 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
287 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
288 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
289 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
291 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
292 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
293 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
295 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
296 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
297 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
299 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
300 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
301 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
303 #ifdef CONFIG_STA_SUPPORT
304 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
305 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
306 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
307 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
309 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
310 #endif // CONFIG_STA_SUPPORT //
312 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
313 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
316 #define INC_RING_INDEX(_idx, _RingSize) \
318 (_idx) = (_idx+1) % (_RingSize); \
321 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
323 #define RING_PACKET_INIT(_TxRing, _idx) \
325 _TxRing->Cell[_idx].pNdisPacket = NULL; \
326 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
329 #define TXDT_INIT(_TxD) \
331 NdisZeroMemory(_TxD, TXD_SIZE); \
335 //Set last data segment
336 #define RING_SET_LASTDS(_TxD, _IsSD0) \
338 if (_IsSD0) {_TxD->LastSec0 = 1;} \
339 else {_TxD->LastSec1 = 1;} \
342 // Increase TxTsc value for next transmission
344 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
345 // Should send a special event microsoft defined to request re-key
346 #define INC_TX_TSC(_tsc) \
349 while (++_tsc[i] == 0x0) \
357 #ifdef DOT11_N_SUPPORT
358 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
359 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
361 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
362 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
363 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
364 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
365 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
366 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
367 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
368 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
369 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
370 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
371 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
372 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
375 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
377 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
378 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
379 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
381 #endif // DOT11_N_SUPPORT //
384 // MACRO for 32-bit PCI register read / write
386 // Usage : RTMP_IO_READ32(
387 // PRTMP_ADAPTER pAd,
388 // ULONG Register_Offset,
392 // PRTMP_ADAPTER pAd,
393 // ULONG Register_Offset,
398 // BBP & RF are using indirect access. Before write any value into it.
399 // We have to make sure there is no outstanding command pending via checking busy bit.
401 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
403 #define RTMP_RF_IO_WRITE32(_A, _V) \
405 PHY_CSR4_STRUC Value; \
407 if ((_A)->bPCIclkOff) \
412 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
413 if (Value.field.Busy == IDLE) \
416 } while (BusyCnt < MAX_BUSY_COUNT); \
417 if (BusyCnt < MAX_BUSY_COUNT) \
419 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
423 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
425 BBP_CSR_CFG_STRUC BbpCsr; \
427 for (i=0; i<MAX_BUSY_COUNT; i++) \
429 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
430 if (BbpCsr.field.Busy == BUSY) \
435 BbpCsr.field.fRead = 1; \
436 BbpCsr.field.BBP_RW_MODE = 1; \
437 BbpCsr.field.Busy = 1; \
438 BbpCsr.field.RegNum = _I; \
439 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
440 for (k=0; k<MAX_BUSY_COUNT; k++) \
442 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
443 if (BbpCsr.field.Busy == IDLE) \
446 if ((BbpCsr.field.Busy == IDLE) && \
447 (BbpCsr.field.RegNum == _I)) \
449 *(_pV) = (UCHAR)BbpCsr.field.Value; \
453 if (BbpCsr.field.Busy == BUSY) \
455 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
456 *(_pV) = (_A)->BbpWriteLatch[_I]; \
460 //#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
461 // Read BBP register by register's ID. Generate PER to test BA
462 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
464 BBP_CSR_CFG_STRUC BbpCsr; \
466 if ((_A)->bPCIclkOff == FALSE) \
468 for (i=0; i<MAX_BUSY_COUNT; i++) \
470 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
471 if (BbpCsr.field.Busy == BUSY) \
476 BbpCsr.field.fRead = 1; \
477 BbpCsr.field.BBP_RW_MODE = 1; \
478 BbpCsr.field.Busy = 1; \
479 BbpCsr.field.RegNum = _I; \
480 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
481 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
482 RTMPusecDelay(1000); \
483 for (k=0; k<MAX_BUSY_COUNT; k++) \
485 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
486 if (BbpCsr.field.Busy == IDLE) \
489 if ((BbpCsr.field.Busy == IDLE) && \
490 (BbpCsr.field.RegNum == _I)) \
492 *(_pV) = (UCHAR)BbpCsr.field.Value; \
496 if (BbpCsr.field.Busy == BUSY) \
498 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
499 *(_pV) = (_A)->BbpWriteLatch[_I]; \
500 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
501 BbpCsr.field.Busy = 0; \
502 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
507 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
509 BBP_CSR_CFG_STRUC BbpCsr; \
511 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
513 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
514 if (BbpCsr.field.Busy == BUSY) \
517 BbpCsr.field.fRead = 0; \
518 BbpCsr.field.BBP_RW_MODE = 1; \
519 BbpCsr.field.Busy = 1; \
520 BbpCsr.field.Value = _V; \
521 BbpCsr.field.RegNum = _I; \
522 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
523 (_A)->BbpWriteLatch[_I] = _V; \
526 if (BusyCnt == MAX_BUSY_COUNT) \
528 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
532 // Write BBP register by register's ID & value
533 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
535 BBP_CSR_CFG_STRUC BbpCsr; \
537 if ((_A)->bPCIclkOff == FALSE) \
539 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
541 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
542 if (BbpCsr.field.Busy == BUSY) \
545 BbpCsr.field.fRead = 0; \
546 BbpCsr.field.BBP_RW_MODE = 1; \
547 BbpCsr.field.Busy = 1; \
548 BbpCsr.field.Value = _V; \
549 BbpCsr.field.RegNum = _I; \
550 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
551 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
552 if (_A->OpMode == OPMODE_AP) \
553 RTMPusecDelay(1000); \
554 (_A)->BbpWriteLatch[_I] = _V; \
557 if (BusyCnt == MAX_BUSY_COUNT) \
559 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
560 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
561 BbpCsr.field.Busy = 0; \
562 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
568 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
571 case 1: khz = 2412000; break; \
572 case 2: khz = 2417000; break; \
573 case 3: khz = 2422000; break; \
574 case 4: khz = 2427000; break; \
575 case 5: khz = 2432000; break; \
576 case 6: khz = 2437000; break; \
577 case 7: khz = 2442000; break; \
578 case 8: khz = 2447000; break; \
579 case 9: khz = 2452000; break; \
580 case 10: khz = 2457000; break; \
581 case 11: khz = 2462000; break; \
582 case 12: khz = 2467000; break; \
583 case 13: khz = 2472000; break; \
584 case 14: khz = 2484000; break; \
585 case 36: /* UNII */ khz = 5180000; break; \
586 case 40: /* UNII */ khz = 5200000; break; \
587 case 44: /* UNII */ khz = 5220000; break; \
588 case 48: /* UNII */ khz = 5240000; break; \
589 case 52: /* UNII */ khz = 5260000; break; \
590 case 56: /* UNII */ khz = 5280000; break; \
591 case 60: /* UNII */ khz = 5300000; break; \
592 case 64: /* UNII */ khz = 5320000; break; \
593 case 149: /* UNII */ khz = 5745000; break; \
594 case 153: /* UNII */ khz = 5765000; break; \
595 case 157: /* UNII */ khz = 5785000; break; \
596 case 161: /* UNII */ khz = 5805000; break; \
597 case 165: /* UNII */ khz = 5825000; break; \
598 case 100: /* HiperLAN2 */ khz = 5500000; break; \
599 case 104: /* HiperLAN2 */ khz = 5520000; break; \
600 case 108: /* HiperLAN2 */ khz = 5540000; break; \
601 case 112: /* HiperLAN2 */ khz = 5560000; break; \
602 case 116: /* HiperLAN2 */ khz = 5580000; break; \
603 case 120: /* HiperLAN2 */ khz = 5600000; break; \
604 case 124: /* HiperLAN2 */ khz = 5620000; break; \
605 case 128: /* HiperLAN2 */ khz = 5640000; break; \
606 case 132: /* HiperLAN2 */ khz = 5660000; break; \
607 case 136: /* HiperLAN2 */ khz = 5680000; break; \
608 case 140: /* HiperLAN2 */ khz = 5700000; break; \
609 case 34: /* Japan MMAC */ khz = 5170000; break; \
610 case 38: /* Japan MMAC */ khz = 5190000; break; \
611 case 42: /* Japan MMAC */ khz = 5210000; break; \
612 case 46: /* Japan MMAC */ khz = 5230000; break; \
613 case 184: /* Japan */ khz = 4920000; break; \
614 case 188: /* Japan */ khz = 4940000; break; \
615 case 192: /* Japan */ khz = 4960000; break; \
616 case 196: /* Japan */ khz = 4980000; break; \
617 case 208: /* Japan, means J08 */ khz = 5040000; break; \
618 case 212: /* Japan, means J12 */ khz = 5060000; break; \
619 case 216: /* Japan, means J16 */ khz = 5080000; break; \
620 default: khz = 2412000; break; \
624 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
627 case 2412000: ch = 1; break; \
628 case 2417000: ch = 2; break; \
629 case 2422000: ch = 3; break; \
630 case 2427000: ch = 4; break; \
631 case 2432000: ch = 5; break; \
632 case 2437000: ch = 6; break; \
633 case 2442000: ch = 7; break; \
634 case 2447000: ch = 8; break; \
635 case 2452000: ch = 9; break; \
636 case 2457000: ch = 10; break; \
637 case 2462000: ch = 11; break; \
638 case 2467000: ch = 12; break; \
639 case 2472000: ch = 13; break; \
640 case 2484000: ch = 14; break; \
641 case 5180000: ch = 36; /* UNII */ break; \
642 case 5200000: ch = 40; /* UNII */ break; \
643 case 5220000: ch = 44; /* UNII */ break; \
644 case 5240000: ch = 48; /* UNII */ break; \
645 case 5260000: ch = 52; /* UNII */ break; \
646 case 5280000: ch = 56; /* UNII */ break; \
647 case 5300000: ch = 60; /* UNII */ break; \
648 case 5320000: ch = 64; /* UNII */ break; \
649 case 5745000: ch = 149; /* UNII */ break; \
650 case 5765000: ch = 153; /* UNII */ break; \
651 case 5785000: ch = 157; /* UNII */ break; \
652 case 5805000: ch = 161; /* UNII */ break; \
653 case 5825000: ch = 165; /* UNII */ break; \
654 case 5500000: ch = 100; /* HiperLAN2 */ break; \
655 case 5520000: ch = 104; /* HiperLAN2 */ break; \
656 case 5540000: ch = 108; /* HiperLAN2 */ break; \
657 case 5560000: ch = 112; /* HiperLAN2 */ break; \
658 case 5580000: ch = 116; /* HiperLAN2 */ break; \
659 case 5600000: ch = 120; /* HiperLAN2 */ break; \
660 case 5620000: ch = 124; /* HiperLAN2 */ break; \
661 case 5640000: ch = 128; /* HiperLAN2 */ break; \
662 case 5660000: ch = 132; /* HiperLAN2 */ break; \
663 case 5680000: ch = 136; /* HiperLAN2 */ break; \
664 case 5700000: ch = 140; /* HiperLAN2 */ break; \
665 case 5170000: ch = 34; /* Japan MMAC */ break; \
666 case 5190000: ch = 38; /* Japan MMAC */ break; \
667 case 5210000: ch = 42; /* Japan MMAC */ break; \
668 case 5230000: ch = 46; /* Japan MMAC */ break; \
669 case 4920000: ch = 184; /* Japan */ break; \
670 case 4940000: ch = 188; /* Japan */ break; \
671 case 4960000: ch = 192; /* Japan */ break; \
672 case 4980000: ch = 196; /* Japan */ break; \
673 case 5040000: ch = 208; /* Japan, means J08 */ break; \
674 case 5060000: ch = 212; /* Japan, means J12 */ break; \
675 case 5080000: ch = 216; /* Japan, means J16 */ break; \
676 default: ch = 1; break; \
681 // Common fragment list structure - Identical to the scatter gather frag list structure
683 #define NIC_MAX_PHYS_BUF_COUNT 8
685 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
689 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
692 typedef struct _RTMP_SCATTER_GATHER_LIST {
693 ULONG NumberOfElements;
695 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
696 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
699 // Some utility macros
702 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
706 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
709 #define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))
711 #define INC_COUNTER64(Val) (Val.QuadPart++)
713 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
714 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
715 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
716 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
718 // Check LEAP & CCKM flags
719 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
720 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
722 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
723 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
725 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
727 _pExtraLlcSnapEncap = SNAP_802_1H; \
728 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
729 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
731 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
736 _pExtraLlcSnapEncap = NULL; \
740 // New Define for new Tx Path.
741 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
743 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
745 _pExtraLlcSnapEncap = SNAP_802_1H; \
746 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
747 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
749 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
754 _pExtraLlcSnapEncap = NULL; \
759 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
761 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
762 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
763 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
766 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
767 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
768 // else remove the LLC/SNAP field from the result Ethernet frame
769 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
771 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
772 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
773 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
777 _pRemovedLLCSNAP = NULL; \
778 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
779 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
781 PUCHAR pProto = _pData + 6; \
783 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
784 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
786 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
787 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
788 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
792 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
793 _pRemovedLLCSNAP = _pData; \
794 _DataSize -= LENGTH_802_1_H; \
795 _pData += LENGTH_802_1_H; \
800 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
801 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
802 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
806 #define SWITCH_AB( _pAA, _pBB) \
814 // Enqueue this frame to MLME engine
815 // We need to enqueue the whole frame because MLME need to pass data type
816 // information from 802.11 header
817 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
819 UINT32 High32TSF, Low32TSF; \
820 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
821 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
822 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
825 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
826 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
828 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
829 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
832 // Check if it is Japan W53(ch52,56,60,64) channel.
834 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
836 #ifdef CONFIG_STA_SUPPORT
837 #define STA_PORT_SECURED(_pAd) \
839 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
840 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
841 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
842 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
843 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
845 #endif // CONFIG_STA_SUPPORT //
849 // Register set pair for initialzation register set definition
851 typedef struct _RTMP_REG_PAIR
855 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
857 typedef struct _REG_PAIR
861 } REG_PAIR, *PREG_PAIR;
864 // Register set pair for initialzation register set definition
866 typedef struct _RTMP_RF_REGS
873 } RTMP_RF_REGS, *PRTMP_RF_REGS;
875 typedef struct _FREQUENCY_ITEM {
880 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
883 // Data buffer for DMA operation, the buffer must be contiguous physical memory
884 // Both DMA to / from CPU use the same structure.
886 typedef struct _RTMP_DMABUF
889 PVOID AllocVa; // TxBuf virtual address
890 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
891 } RTMP_DMABUF, *PRTMP_DMABUF;
894 typedef union _HEADER_802_11_SEQ{
907 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
910 // Data buffer for DMA operation, the buffer must be contiguous physical memory
911 // Both DMA to / from CPU use the same structure.
913 typedef struct _RTMP_REORDERBUF
916 PVOID AllocVa; // TxBuf virtual address
917 UCHAR Header802_3[14];
918 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
922 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
923 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
926 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
927 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
928 // which won't be released, driver has to wait until upper layer return the packet
929 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
930 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
931 // which driver should ACK upper layer when the tx is physically done or failed.
933 typedef struct _RTMP_DMACB
935 ULONG AllocSize; // Control block size
936 PVOID AllocVa; // Control block virtual address
937 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
938 PNDIS_PACKET pNdisPacket;
939 PNDIS_PACKET pNextNdisPacket;
941 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
942 } RTMP_DMACB, *PRTMP_DMACB;
944 typedef struct _RTMP_TX_BUF
948 ULONG AllocSize; // Control block size
949 PVOID AllocVa; // Control block virtual address
950 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
951 } RTMP_TXBUF, *PRTMP_TXBUF;
953 typedef struct _RTMP_RX_BUF
957 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
958 } RTMP_RXBUF, *PRTMP_RXBUF;
959 typedef struct _RTMP_TX_RING
961 RTMP_DMACB Cell[TX_RING_SIZE];
964 UINT32 TxSwFreeIdx; // software next free tx index
965 } RTMP_TX_RING, *PRTMP_TX_RING;
967 typedef struct _RTMP_RX_RING
969 RTMP_DMACB Cell[RX_RING_SIZE];
972 INT32 RxSwReadIdx; // software next read index
973 } RTMP_RX_RING, *PRTMP_RX_RING;
975 typedef struct _RTMP_MGMT_RING
977 RTMP_DMACB Cell[MGMT_RING_SIZE];
980 UINT32 TxSwFreeIdx; // software next free tx index
981 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
984 // Statistic counter structure
986 typedef struct _COUNTER_802_3
996 ULONG RcvAlignmentErrors;
998 ULONG MoreCollisions;
1000 } COUNTER_802_3, *PCOUNTER_802_3;
1002 typedef struct _COUNTER_802_11 {
1004 LARGE_INTEGER LastTransmittedFragmentCount;
1005 LARGE_INTEGER TransmittedFragmentCount;
1006 LARGE_INTEGER MulticastTransmittedFrameCount;
1007 LARGE_INTEGER FailedCount;
1008 LARGE_INTEGER RetryCount;
1009 LARGE_INTEGER MultipleRetryCount;
1010 LARGE_INTEGER RTSSuccessCount;
1011 LARGE_INTEGER RTSFailureCount;
1012 LARGE_INTEGER ACKFailureCount;
1013 LARGE_INTEGER FrameDuplicateCount;
1014 LARGE_INTEGER ReceivedFragmentCount;
1015 LARGE_INTEGER MulticastReceivedFrameCount;
1016 LARGE_INTEGER FCSErrorCount;
1017 } COUNTER_802_11, *PCOUNTER_802_11;
1019 typedef struct _COUNTER_RALINK {
1020 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1021 ULONG LastReceivedByteCount;
1022 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1023 ULONG BeenDisassociatedCount;
1024 ULONG BadCQIAutoRecoveryCount;
1025 ULONG PoorCQIRoamingCount;
1026 ULONG MgmtRingFullCount;
1027 ULONG RxCountSinceLastNULL;
1029 ULONG RxRingErrCount;
1031 ULONG TxRingErrCount;
1032 LARGE_INTEGER RealFcsErrCount;
1033 ULONG PendingNdisPacketCount;
1035 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1036 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1037 UINT32 OneSecTxDoneCount;
1038 ULONG OneSecRxCount;
1039 UINT32 OneSecTxAggregationCount;
1040 UINT32 OneSecRxAggregationCount;
1042 UINT32 OneSecFrameDuplicateCount;
1045 UINT32 OneSecTxNoRetryOkCount;
1046 UINT32 OneSecTxRetryOkCount;
1047 UINT32 OneSecTxFailCount;
1048 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1049 UINT32 OneSecRxOkCnt; // RX without error
1050 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1051 UINT32 OneSecRxFcsErrCnt; // CRC error
1052 UINT32 OneSecBeaconSentCnt;
1053 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1054 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1057 ULONG TxNonAggCount;
1058 ULONG TxAgg1MPDUCount;
1059 ULONG TxAgg2MPDUCount;
1060 ULONG TxAgg3MPDUCount;
1061 ULONG TxAgg4MPDUCount;
1062 ULONG TxAgg5MPDUCount;
1063 ULONG TxAgg6MPDUCount;
1064 ULONG TxAgg7MPDUCount;
1065 ULONG TxAgg8MPDUCount;
1066 ULONG TxAgg9MPDUCount;
1067 ULONG TxAgg10MPDUCount;
1068 ULONG TxAgg11MPDUCount;
1069 ULONG TxAgg12MPDUCount;
1070 ULONG TxAgg13MPDUCount;
1071 ULONG TxAgg14MPDUCount;
1072 ULONG TxAgg15MPDUCount;
1073 ULONG TxAgg16MPDUCount;
1075 LARGE_INTEGER TransmittedOctetsInAMSDU;
1076 LARGE_INTEGER TransmittedAMSDUCount;
1077 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1078 LARGE_INTEGER ReceivedAMSDUCount;
1079 LARGE_INTEGER TransmittedAMPDUCount;
1080 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1081 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1082 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1083 } COUNTER_RALINK, *PCOUNTER_RALINK;
1085 typedef struct _PID_COUNTER {
1086 ULONG TxAckRequiredCount; // CRC error
1088 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1089 ULONG LastSuccessRate;
1090 } PID_COUNTER, *PPID_COUNTER;
1092 typedef struct _COUNTER_DRS {
1093 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1094 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1095 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1096 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1097 ULONG CurrTxRateStableTime; // # of second in current TX rate
1098 BOOLEAN fNoisyEnvironment;
1099 BOOLEAN fLastSecAccordingRSSI;
1100 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1101 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1102 ULONG LastTxOkCount;
1103 } COUNTER_DRS, *PCOUNTER_DRS;
1106 // Arcfour Structure Added by PaulWu
1108 typedef struct _ARCFOUR
1113 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1115 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1116 typedef struct _RECEIVE_SETTING {
1117 #ifdef RT_BIG_ENDIAN
1121 USHORT STBC:2; //SPACE
1123 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1124 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1126 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1127 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1129 USHORT STBC:2; //SPACE
1134 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1136 // Shared key data structure
1137 typedef struct _WEP_KEY {
1138 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1139 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1140 } WEP_KEY, *PWEP_KEY;
1142 typedef struct _CIPHER_KEY {
1143 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1144 UCHAR RxMic[8]; // make alignment
1146 UCHAR TxTsc[6]; // 48bit TSC value
1147 UCHAR RxTsc[6]; // 48bit TSC value
1148 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1150 #ifdef CONFIG_STA_SUPPORT
1152 #endif // CONFIG_STA_SUPPORT //
1153 // Key length for each key, 0: entry is invalid
1154 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1155 } CIPHER_KEY, *PCIPHER_KEY;
1157 typedef struct _BBP_TUNING_STRUCT {
1159 UCHAR FalseCcaCountUpperBound; // 100 per sec
1160 UCHAR FalseCcaCountLowerBound; // 10 per sec
1161 UCHAR R17LowerBound; // specified in E2PROM
1162 UCHAR R17UpperBound; // 0x68 according to David Tung
1163 UCHAR CurrentR17Value;
1164 } BBP_TUNING, *PBBP_TUNING;
1166 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1167 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1168 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1169 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1170 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1171 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1172 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1173 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1174 SHORT Pair1LastAvgRssi; //
1175 SHORT Pair2LastAvgRssi; //
1176 ULONG RcvPktNumWhenEvaluate;
1177 BOOLEAN FirstPktArrivedWhenEvaluate;
1178 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1179 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1181 typedef struct _LEAP_AUTH_INFO {
1182 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1183 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1185 UCHAR UserName[256]; //LEAP, User name
1187 UCHAR Password[256]; //LEAP, User Password
1189 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1192 UCHAR Addr[MAC_ADDR_LEN];
1193 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1194 //00 02-Authentication timeout
1195 //00 03-Challenge from AP failed
1196 //00 04-Challenge to AP failed
1198 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1202 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1203 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1209 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1212 // Receive Tuple Cache Format
1214 typedef struct _TUPLE_CACHE {
1216 UCHAR MacAddress[MAC_ADDR_LEN];
1219 } TUPLE_CACHE, *PTUPLE_CACHE;
1222 // Fragment Frame structure
1224 typedef struct _FRAGMENT_FRAME {
1225 PNDIS_PACKET pFragPacket;
1229 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1230 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1234 // Packet information for NdisQueryPacket
1236 typedef struct _PACKET_INFO {
1237 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1238 UINT BufferCount ; // Number of Buffer descriptor chained
1239 UINT TotalPacketLength ; // Self explained
1240 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1241 } PACKET_INFO, *PPACKET_INFO;
1244 // Tkip Key structure which RC4 key & MIC calculation
1246 typedef struct _TKIP_KEY_INFO {
1247 UINT nBytesInM; // # bytes in M for MICKEY
1250 ULONG K0; // for MICKEY Low
1251 ULONG K1; // for MICKEY Hig
1252 ULONG L; // Current state for MICKEY
1253 ULONG R; // Current state for MICKEY
1254 ULONG M; // Message accumulator for MICKEY
1257 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1260 // Private / Misc data, counters for driver internal use
1262 typedef struct __PRIVATE_STRUC {
1263 UINT SystemResetCnt; // System reset counter
1264 UINT TxRingFullCnt; // Tx ring full occurrance number
1265 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1266 // Variables for WEP encryption / decryption in rtmp_wep.c
1268 ARCFOURCONTEXT WEPCONTEXT;
1272 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1274 // structure to tune BBP R66 (BBP TUNING)
1275 typedef struct _BBP_R66_TUNING {
1277 USHORT FalseCcaLowerThreshold; // default 100
1278 USHORT FalseCcaUpperThreshold; // default 512
1280 UCHAR R66CurrentValue;
1281 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1282 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1284 // structure to store channel TX power
1285 typedef struct _CHANNEL_TX_POWER {
1286 USHORT RemainingTimeForUse; //unit: sec
1288 #ifdef DOT11N_DRAFT3
1289 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1290 #endif // DOT11N_DRAFT3 //
1295 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1297 // structure to store 802.11j channel TX power
1298 typedef struct _CHANNEL_11J_TX_POWER {
1300 UCHAR BW; // BW_10 or BW_20
1303 USHORT RemainingTimeForUse; //unit: sec
1304 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1306 typedef enum _ABGBAND_STATE_ {
1312 typedef struct _MLME_STRUCT {
1313 #ifdef CONFIG_STA_SUPPORT
1314 // STA state machines
1315 STATE_MACHINE CntlMachine;
1316 STATE_MACHINE AssocMachine;
1317 STATE_MACHINE AuthMachine;
1318 STATE_MACHINE AuthRspMachine;
1319 STATE_MACHINE SyncMachine;
1320 STATE_MACHINE WpaPskMachine;
1321 STATE_MACHINE LeapMachine;
1322 STATE_MACHINE AironetMachine;
1323 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1324 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1325 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1326 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1327 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1328 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1329 #endif // CONFIG_STA_SUPPORT //
1330 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1332 STATE_MACHINE ActMachine;
1335 #ifdef QOS_DLS_SUPPORT
1336 STATE_MACHINE DlsMachine;
1337 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1338 #endif // QOS_DLS_SUPPORT //
1343 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1344 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1345 ULONG LastSendNULLpsmTime;
1348 NDIS_SPIN_LOCK TaskLock;
1353 RALINK_TIMER_STRUCT PeriodicTimer;
1354 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1355 RALINK_TIMER_STRUCT LinkDownTimer;
1356 RALINK_TIMER_STRUCT LinkUpTimer;
1357 UCHAR bPsPollTimerRunning;
1358 RALINK_TIMER_STRUCT PsPollTimer;
1359 RALINK_TIMER_STRUCT RadioOnOffTimer;
1360 ULONG PeriodicRound;
1361 ULONG OneSecPeriodicRound;
1364 BOOLEAN bLowThroughput;
1365 BOOLEAN bEnableAutoAntennaCheck;
1366 RALINK_TIMER_STRUCT RxAntEvalTimer;
1369 } MLME_STRUCT, *PMLME_STRUCT;
1371 // structure for radar detection and channel switch
1372 typedef struct _RADAR_DETECT_STRUCT {
1373 UCHAR CSCount; //Channel switch counter
1374 UCHAR CSPeriod; //Channel switch period (beacon count)
1375 UCHAR RDCount; //Radar detection counter
1376 UCHAR RDMode; //Radar Detection mode
1377 UCHAR RDDurRegion; //Radar detection duration region
1384 ULONG InServiceMonitorCount; // unit: sec
1385 UINT8 DfsSessionTime;
1388 UINT8 LongPulseRadarTh;
1389 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1391 typedef enum _REC_BLOCKACK_STATUS
1395 Recipient_HandleRes,
1397 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1399 typedef enum _ORI_BLOCKACK_STATUS
1405 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1407 #ifdef DOT11_N_SUPPORT
1408 typedef struct _BA_ORI_ENTRY{
1413 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1415 USHORT TimeOutValue;
1416 ORI_BLOCKACK_STATUS ORI_BA_Status;
1417 RALINK_TIMER_STRUCT ORIBATimer;
1419 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1421 typedef struct _BA_REC_ENTRY {
1424 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1426 USHORT TimeOutValue;
1427 RALINK_TIMER_STRUCT RECBATimer;
1428 ULONG LastIndSeqAtTimer;
1431 REC_BLOCKACK_STATUS REC_BA_Status;
1432 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1434 struct reordering_list list;
1435 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1439 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1440 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1441 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1442 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1443 } BA_TABLE, *PBA_TABLE;
1445 //For QureyBATableOID use;
1446 typedef struct PACKED _OID_BA_REC_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
1451 REC_BLOCKACK_STATUS REC_BA_Status[8];
1452 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1454 //For QureyBATableOID use;
1455 typedef struct PACKED _OID_BA_ORI_ENTRY{
1456 UCHAR MACAddr[MAC_ADDR_LEN];
1457 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
1460 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1461 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1463 typedef struct _QUERYBA_TABLE{
1464 OID_BA_ORI_ENTRY BAOriEntry[32];
1465 OID_BA_REC_ENTRY BARecEntry[32];
1466 UCHAR OriNum;// Number of below BAOriEntry
1467 UCHAR RecNum;// Number of below BARecEntry
1468 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1470 typedef union _BACAP_STRUC {
1471 #ifdef RT_BIG_ENDIAN
1474 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.
1475 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1476 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1477 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1478 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1479 UINT32 MpduDensity:3;
1480 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1481 UINT32 AutoBA:1; // automatically BA
1482 UINT32 TxBAWinLimit:8;
1483 UINT32 RxBAWinLimit:8;
1487 UINT32 RxBAWinLimit:8;
1488 UINT32 TxBAWinLimit:8;
1489 UINT32 AutoBA:1; // automatically BA
1490 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1491 UINT32 MpduDensity:3;
1492 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1493 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1494 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1495 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1496 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.
1501 } BACAP_STRUC, *PBACAP_STRUC;
1502 #endif // DOT11_N_SUPPORT //
1504 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1505 typedef struct _IOT_STRUC {
1507 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1508 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1509 ULONG OneSecInWindowCount;
1510 ULONG OneSecFrameDuplicateCount;
1511 ULONG OneSecOutWindowCount;
1516 BOOLEAN bRTSLongProtOn;
1517 #ifdef CONFIG_STA_SUPPORT
1518 BOOLEAN bLastAtheros;
1519 BOOLEAN bCurrentAtheros;
1520 BOOLEAN bNowAtherosBurstOn;
1521 BOOLEAN bNextDisableRxBA;
1523 #endif // CONFIG_STA_SUPPORT //
1524 } IOT_STRUC, *PIOT_STRUC;
1526 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1527 typedef union _REG_TRANSMIT_SETTING {
1528 #ifdef RT_BIG_ENDIAN
1534 UINT32 STBC:1; //SPACE
1536 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1537 UINT32 TxBF:1; // 3*3
1544 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1546 UINT32 STBC:1; //SPACE
1554 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1556 typedef union _DESIRED_TRANSMIT_SETTING {
1557 #ifdef RT_BIG_ENDIAN
1560 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1562 USHORT MCS:7; // MCS
1566 USHORT MCS:7; // MCS
1568 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1573 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1576 BOOLEAN IsRecipient;
1577 UCHAR MACAddr[MAC_ADDR_LEN];
1581 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1582 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1585 // Multiple SSID structure
1587 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1588 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1590 /* clear bcmc TIM bit */
1591 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1592 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1594 /* set bcmc TIM bit */
1595 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1596 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1598 /* clear a station PS TIM bit */
1599 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1600 { UCHAR tim_offset = wcid >> 3; \
1601 UCHAR bit_offset = wcid & 0x7; \
1602 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1604 /* set a station PS TIM bit */
1605 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1606 { UCHAR tim_offset = wcid >> 3; \
1607 UCHAR bit_offset = wcid & 0x7; \
1608 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1611 typedef struct _MULTISSID_STRUCT {
1612 UCHAR Bssid[MAC_ADDR_LEN];
1614 CHAR Ssid[MAX_LEN_OF_SSID];
1615 USHORT CapabilityInfo;
1619 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1620 NDIS_802_11_WEP_STATUS WepStatus;
1621 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1622 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1626 ULONG ReceivedByteCount;
1627 ULONG TransmittedByteCount;
1631 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1632 RT_HT_PHY_INFO DesiredHtPhyInfo;
1633 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1634 BOOLEAN bAutoTxRateSwitch;
1638 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1639 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1640 UCHAR DesiredRatesIndex;
1641 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1643 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1653 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1654 UCHAR BANClass3Data;
1655 ULONG IsolateInterStaTraffic;
1658 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1661 UCHAR TimIELocationInBeacon;
1662 UCHAR CapabilityInfoLocationInBeacon;
1663 // outgoing BEACON frame buffer and corresponding TXWI
1664 // PTXWI_STRUC BeaconTxWI; //
1665 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1668 UINT16 StationKeepAliveTime; // unit: second
1671 USHORT VLAN_Priority;
1673 RT_802_11_ACL AccessControlList;
1676 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1677 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1679 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1681 // For 802.1x daemon setting per BSS
1682 UCHAR radius_srv_num;
1683 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1686 unsigned int mylinkid;
1690 UINT32 RcvdConflictSsidCount;
1691 UINT32 RcvdSpoofedAssocRespCount;
1692 UINT32 RcvdSpoofedReassocRespCount;
1693 UINT32 RcvdSpoofedProbeRespCount;
1694 UINT32 RcvdSpoofedBeaconCount;
1695 UINT32 RcvdSpoofedDisassocCount;
1696 UINT32 RcvdSpoofedAuthCount;
1697 UINT32 RcvdSpoofedDeauthCount;
1698 UINT32 RcvdSpoofedUnknownMgmtCount;
1699 UINT32 RcvdReplayAttackCount;
1701 CHAR RssiOfRcvdConflictSsid;
1702 CHAR RssiOfRcvdSpoofedAssocResp;
1703 CHAR RssiOfRcvdSpoofedReassocResp;
1704 CHAR RssiOfRcvdSpoofedProbeResp;
1705 CHAR RssiOfRcvdSpoofedBeacon;
1706 CHAR RssiOfRcvdSpoofedDisassoc;
1707 CHAR RssiOfRcvdSpoofedAuth;
1708 CHAR RssiOfRcvdSpoofedDeauth;
1709 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1710 CHAR RssiOfRcvdReplayAttack;
1714 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1718 #ifdef DOT11N_DRAFT3
1719 typedef enum _BSS2040COEXIST_FLAG{
1720 BSS_2040_COEXIST_DISABLE = 0,
1721 BSS_2040_COEXIST_TIMER_FIRED = 1,
1722 BSS_2040_COEXIST_INFO_SYNC = 2,
1723 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1724 }BSS2040COEXIST_FLAG;
1725 #endif // DOT11N_DRAFT3 //
1727 // configuration common to OPMODE_AP as well as OPMODE_STA
1728 typedef struct _COMMON_CONFIG {
1730 BOOLEAN bCountryFlag;
1731 UCHAR CountryCode[3];
1733 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1734 UCHAR CountryRegionForABand; // Enum of country region for A band
1735 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1736 USHORT Dsifs; // in units of usec
1737 ULONG PacketFilter; // Packet filter for receiving
1739 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1740 UCHAR SsidLen; // the actual ssid length in used
1741 UCHAR LastSsidLen; // the actual ssid length in used
1742 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1743 UCHAR LastBssid[MAC_ADDR_LEN];
1745 UCHAR Bssid[MAC_ADDR_LEN];
1746 USHORT BeaconPeriod;
1748 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1750 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1752 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1754 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1755 UCHAR MaxDesiredRate;
1756 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1758 ULONG BasicRateBitmap; // backup basic ratebitmap
1760 BOOLEAN bAPSDCapable;
1761 BOOLEAN bInServicePeriod;
1766 BOOLEAN bNeedSendTriggerFrame;
1767 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1768 ULONG TriggerTimerCount;
1770 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1771 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1772 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1773 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1774 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1775 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1776 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1777 UCHAR RtsRate; // RATE_xxx
1778 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1779 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1780 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1782 USHORT RtsThreshold; // in unit of BYTE
1783 USHORT FragmentThreshold; // in unit of BYTE
1785 UCHAR TxPower; // in unit of mW
1786 ULONG TxPowerPercentage; // 0~100 %
1787 ULONG TxPowerDefault; // keep for TxPowerPercentage
1789 #ifdef DOT11_N_SUPPORT
1790 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1791 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1792 #endif // DOT11_N_SUPPORT //
1793 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1794 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1795 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1796 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1797 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1798 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1799 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1800 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1801 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1802 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1804 #ifdef DOT11_N_SUPPORT
1806 #endif // DOT11_N_SUPPORT //
1807 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1808 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1809 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1810 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1811 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1812 #ifdef CONFIG_STA_SUPPORT
1813 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1814 #endif // CONFIG_STA_SUPPORT //
1815 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1816 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1817 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1818 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1819 ULONG OpStatusFlags;
1821 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1822 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1824 // IEEE802.11H--DFS.
1825 RADAR_DETECT_STRUCT RadarDetect;
1827 #ifdef DOT11_N_SUPPORT
1829 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1830 //RT_HT_CAPABILITY SupportedHtPhy;
1831 RT_HT_CAPABILITY DesiredHtPhy;
1832 HT_CAPABILITY_IE HtCapability;
1833 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1834 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1835 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1836 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
1838 #ifdef DOT11N_DRAFT3
1839 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1840 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1842 //This IE is used for 20/40 BSS Coexistence.
1843 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1844 // ====== 11n D3.0 =======================>
1845 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1846 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1847 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1848 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1849 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1850 USHORT Dot11BssWidthChanTranDelayFactor;
1851 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1853 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1854 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1856 NDIS_SPIN_LOCK TriggerEventTabLock;
1857 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1858 BSS_2040_COEXIST_IE BSSCoexist2040;
1859 TRIGGER_EVENT_TAB TriggerEventTab;
1860 UCHAR ChannelListIdx;
1861 // <====== 11n D3.0 =======================
1862 BOOLEAN bOverlapScanning;
1863 #endif // DOT11N_DRAFT3 //
1866 BOOLEAN bMIMOPSEnable;
1868 BOOLEAN bDisableReordering;
1869 BOOLEAN bForty_Mhz_Intolerant;
1870 BOOLEAN bExtChannelSwitchAnnouncement;
1871 BOOLEAN bRcvBSSWidthTriggerEvents;
1872 ULONG LastRcvBSSWidthTriggerEventsTime;
1875 #endif // DOT11_N_SUPPORT //
1877 // Enable wireless event
1878 BOOLEAN bWirelessEvent;
1879 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1881 // Tx & Rx Stream number selection
1885 // transmit phy mode, trasmit rate for Multicast.
1886 #ifdef MCAST_RATE_SPECIFIC
1887 UCHAR McastTransmitMcs;
1888 UCHAR McastTransmitPhyMode;
1889 #endif // MCAST_RATE_SPECIFIC //
1891 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1895 NDIS_SPIN_LOCK MeasureReqTabLock;
1896 PMEASURE_REQ_TAB pMeasureReqTab;
1898 NDIS_SPIN_LOCK TpcReqTabLock;
1899 PTPC_REQ_TAB pTpcReqTab;
1901 // transmit phy mode, trasmit rate for Multicast.
1902 #ifdef MCAST_RATE_SPECIFIC
1903 HTTRANSMIT_SETTING MCastPhyMode;
1904 #endif // MCAST_RATE_SPECIFIC //
1907 UINT16 DefineMaxTxPwr;
1908 #endif // SINGLE_SKU //
1911 } COMMON_CONFIG, *PCOMMON_CONFIG;
1914 #ifdef CONFIG_STA_SUPPORT
1915 /* Modified by Wu Xi-Kun 4/21/2006 */
1916 // STA configuration and status
1917 typedef struct _STA_ADMIN_CONFIG {
1919 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1920 // the user intended configuration, but not necessary fully equal to the final
1921 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1922 // AP or IBSS holder).
1923 // Once initialized, user configuration can only be changed via OID_xxx
1924 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1925 USHORT AtimWin; // used when starting a new IBSS
1928 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1929 // the user intended configuration, and should be always applied to the final
1930 // settings in ACTIVE BSS without compromising with the BSS holder.
1931 // Once initialized, user configuration can only be changed via OID_xxx
1933 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1934 USHORT DefaultListenCount; // default listen count;
1935 ULONG WindowsPowerMode; // Power mode for AC power
1936 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1937 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1938 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1939 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1941 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1942 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1943 USHORT DisassocReason;
1944 UCHAR DisassocSta[MAC_ADDR_LEN];
1945 USHORT DeauthReason;
1946 UCHAR DeauthSta[MAC_ADDR_LEN];
1947 USHORT AuthFailReason;
1948 UCHAR AuthFailSta[MAC_ADDR_LEN];
1950 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1951 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1952 NDIS_802_11_WEP_STATUS WepStatus;
1953 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1955 // Add to support different cipher suite for WPA2/WPA mode
1956 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1957 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1958 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1959 USHORT RsnCapability;
1961 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1963 UCHAR PMK[32]; // WPA PSK mode PMK
1964 UCHAR PTK[64]; // WPA PSK mode PTK
1965 UCHAR GTK[32]; // GTK from authenticator
1966 BSSID_INFO SavedPMK[PMKID_NO];
1967 UINT SavedPMKNum; // Saved PMKID number
1972 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1975 // For WPA countermeasures
1976 ULONG LastMicErrorTime; // record last MIC error time
1977 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1978 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1979 // For WPA-PSK supplicant state
1980 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1981 UCHAR ReplayCounter[8];
1982 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1983 UCHAR SNonce[32]; // SNonce for WPA-PSK
1985 UCHAR LastSNR0; // last received BEACON's SNR
1986 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1987 RSSI_SAMPLE RssiSample;
1988 ULONG NumOfAvgRssiSample;
1990 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1991 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1992 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1993 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1995 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1996 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1997 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1998 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1999 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2000 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2001 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2003 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2004 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2005 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2007 // New for WPA, windows want us to to keep association information and
2008 // Fixed IEs from last association response
2009 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2010 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2011 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2012 USHORT ResVarIELen; // Length of next VIE include EID & Length
2013 UCHAR ResVarIEs[MAX_VIE_LEN];
2016 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2018 // New variables used for CCX 1.0
2020 BOOLEAN bCkipCmicOn;
2022 UCHAR GIV[3]; //for CCX iv
2027 LEAP_AUTH_INFO LeapAuthInfo;
2029 UCHAR NetworkChallenge[8];
2030 UCHAR NetworkChallengeResponse[24];
2031 UCHAR PeerChallenge[8];
2033 UCHAR PeerChallengeResponse[24];
2034 UCHAR SessionKey[16]; //Network session keys (NSK)
2035 RALINK_TIMER_STRUCT LeapAuthTimer;
2036 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2038 // New control flags for CCX
2039 CCX_CONTROL CCXControl; // Master administration state
2040 BOOLEAN CCXEnable; // Actual CCX state
2041 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2042 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2043 UCHAR CCXReqType; // Current processing CCX request type
2044 BSS_TABLE CCXBssTab; // BSS Table
2045 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2046 USHORT FrameReportLen; // Current Frame report length
2047 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2048 USHORT RPIDensity[8]; // Array for RPI density collection
2049 // Start address of each BSS table within FrameReportBuf
2050 // It's important to update the RxPower of the corresponding Bss
2051 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2052 USHORT BeaconToken; // Token for beacon report
2053 ULONG LastBssIndex; // Most current reported Bss index
2054 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2055 UCHAR RMReqCnt; // Number of measurement request saved.
2056 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2057 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2058 // It must be the same channel with maximum duration
2059 USHORT ParallelDuration; // Maximum duration for parallel measurement
2060 UCHAR ParallelChannel; // Only one channel with parallel measurement
2061 USHORT IAPPToken; // IAPP dialog token
2062 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2063 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2064 // Hack for channel load and noise histogram parameters
2065 UCHAR NHFactor; // Parameter for Noise histogram
2066 UCHAR CLFactor; // Parameter for channel load
2068 UCHAR KRK[16]; //Key Refresh Key.
2069 UCHAR BTK[32]; //Base Transient Key
2070 BOOLEAN CCKMLinkUpFlag;
2071 ULONG CCKMRN; //(Re)Association request number.
2072 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2073 UCHAR AironetCellPowerLimit; //in dBm
2074 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2075 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2076 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2077 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2078 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2079 USHORT CCXAdjacentAPChannel;
2080 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2082 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2083 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2085 UCHAR DtimCount; // 0.. DtimPeriod-1
2086 UCHAR DtimPeriod; // default = 3
2088 #ifdef QOS_DLS_SUPPORT
2089 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2090 UCHAR DlsReplayCounter[8];
2091 #endif // QOS_DLS_SUPPORT //
2092 ////////////////////////////////////////////////////////////////////////////////////////
2093 // This is only for WHQL test.
2095 ////////////////////////////////////////////////////////////////////////////////////////
2097 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2099 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2100 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2102 #ifdef WPA_SUPPLICANT_SUPPORT
2104 BOOLEAN IEEE8021x_required_keys;
2105 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2106 UCHAR DesireSharedKeyId;
2108 // 0: driver ignores wpa_supplicant
2109 // 1: wpa_supplicant initiates scanning and AP selection
2110 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2111 UCHAR WpaSupplicantUP;
2112 UCHAR WpaSupplicantScanCount;
2113 #endif // WPA_SUPPLICANT_SUPPORT //
2118 BOOLEAN bTGnWifiTest;
2119 BOOLEAN bScanReqIsFromWebUI;
2121 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2122 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2123 RT_HT_PHY_INFO DesiredHtPhyInfo;
2124 BOOLEAN bAutoTxRateSwitch;
2128 #ifdef EXT_BUILD_CHANNEL_LIST
2129 UCHAR IEEE80211dClientMode;
2130 UCHAR StaOriCountryCode[3];
2131 UCHAR StaOriGeography;
2132 #endif // EXT_BUILD_CHANNEL_LIST //
2133 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2135 // This data structure keep the current active BSS/IBSS's configuration that this STA
2136 // had agreed upon joining the network. Which means these parameters are usually decided
2137 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2138 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2139 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2140 // the current active settings.
2141 typedef struct _STA_ACTIVE_CONFIG {
2143 USHORT AtimWin; // in kusec; IBSS parameter set element
2144 USHORT CapabilityInfo;
2145 USHORT CfpMaxDuration;
2148 // Copy supported rate from desired AP's beacon. We are trying to match
2149 // AP's supported and extended rate settings.
2150 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2151 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2154 // Copy supported ht from desired AP's beacon. We are trying to match
2155 RT_HT_PHY_INFO SupportedPhyInfo;
2156 RT_HT_CAPABILITY SupportedHtPhy;
2157 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2158 #endif // CONFIG_STA_SUPPORT //
2160 // ----------- start of AP --------------------------
2161 // AUTH-RSP State Machine Aux data structure
2162 typedef struct _AP_MLME_AUX {
2163 UCHAR Addr[MAC_ADDR_LEN];
2165 CHAR Challenge[CIPHER_TEXT_LEN];
2166 } AP_MLME_AUX, *PAP_MLME_AUX;
2168 // structure to define WPA Group Key Rekey Interval
2169 typedef struct PACKED _RT_802_11_WPA_REKEY {
2170 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2171 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2172 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2174 typedef struct _MAC_TABLE_ENTRY {
2175 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2176 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2177 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2178 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2179 BOOLEAN ValidAsMesh;
2180 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2182 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2184 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2186 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2187 UCHAR CMTimerRunning;
2188 UCHAR apidx; // MBSS number
2190 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2191 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2192 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2195 RALINK_TIMER_STRUCT RetryTimer;
2196 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2197 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2198 NDIS_802_11_WEP_STATUS WepStatus;
2199 AP_WPA_STATE WpaState;
2202 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2203 CIPHER_KEY PairwiseKey;
2206 UCHAR PMKID[LEN_PMKID];
2209 UCHAR Addr[MAC_ADDR_LEN];
2212 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2213 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2215 USHORT CapabilityInfo;
2217 ULONG NoDataIdleCount;
2218 UINT16 StationKeepAliveCount; // unit: second
2220 QUEUE_HEADER PsQueue;
2222 UINT32 StaConnectTime; // the live time of this station since associated with AP
2225 #ifdef DOT11_N_SUPPORT
2227 USHORT NoBADataCountDown;
2229 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2230 UINT TxBFCount; // 3*3
2231 #endif // DOT11_N_SUPPORT //
2233 UINT DebugFIFOCount;
2238 //====================================================
2239 //WDS entry needs these
2240 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2241 UINT MatchWDSTabIdx;
2242 UCHAR MaxSupportedRate;
2244 UCHAR CurrTxRateIndex;
2245 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2246 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2247 UINT32 OneSecTxNoRetryOkCount;
2248 UINT32 OneSecTxRetryOkCount;
2249 UINT32 OneSecTxFailCount;
2250 UINT32 ContinueTxFailCnt;
2251 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2252 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2253 //====================================================
2257 #ifdef CONFIG_STA_SUPPORT
2258 #ifdef QOS_DLS_SUPPORT
2259 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2260 #endif // QOS_DLS_SUPPORT //
2261 #endif // CONFIG_STA_SUPPORT //
2263 BOOLEAN fNoisyEnvironment;
2264 BOOLEAN fLastSecAccordingRSSI;
2265 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2266 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2267 ULONG LastTxOkCount;
2268 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2270 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2271 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2272 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2273 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2274 ULONG ClientStatusFlags;
2276 // TODO: Shall we move that to DOT11_N_SUPPORT???
2277 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2279 #ifdef DOT11_N_SUPPORT
2280 // HT EWC MIMO-N used parameters
2281 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2282 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2283 USHORT TXAutoBAbitmap;
2284 USHORT BADeclineBitmap;
2285 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2286 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2287 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2289 // 802.11n features.
2291 UCHAR MaxRAmpduFactor;
2293 UCHAR MmpsMode; // MIMO power save more.
2295 HT_CAPABILITY_IE HTCapability;
2297 #ifdef DOT11N_DRAFT3
2298 UCHAR BSS2040CoexistenceMgmtSupport;
2299 #endif // DOT11N_DRAFT3 //
2300 #endif // DOT11_N_SUPPORT //
2302 BOOLEAN bAutoTxRateSwitch;
2305 struct _MAC_TABLE_ENTRY *pNext;
2306 USHORT TxSeq[NUM_OF_TID];
2307 USHORT NonQosDataSeq;
2309 RSSI_SAMPLE RssiSample;
2311 UINT32 TXMCSExpected[16];
2312 UINT32 TXMCSSuccessful[16];
2313 UINT32 TXMCSFailed[16];
2314 UINT32 TXMCSAutoFallBack[16][16];
2315 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2317 typedef struct _MAC_TABLE {
2319 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2320 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2321 QUEUE_HEADER McastPsQueue;
2323 BOOLEAN fAnyStationInPsm;
2324 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2325 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2326 #ifdef DOT11_N_SUPPORT
2327 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2328 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2329 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2330 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2331 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2332 #endif // DOT11_N_SUPPORT //
2333 } MAC_TABLE, *PMAC_TABLE;
2335 #ifdef DOT11_N_SUPPORT
2336 #define IS_HT_STA(_pMacEntry) \
2337 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2339 #define IS_HT_RATE(_pMacEntry) \
2340 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2342 #define PEER_IS_HT_RATE(_pMacEntry) \
2343 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2344 #endif // DOT11_N_SUPPORT //
2346 typedef struct _WDS_ENTRY {
2348 UCHAR Addr[MAC_ADDR_LEN];
2349 ULONG NoDataIdleCount;
2350 struct _WDS_ENTRY *pNext;
2351 } WDS_ENTRY, *PWDS_ENTRY;
2353 typedef struct _WDS_TABLE_ENTRY {
2355 UCHAR WdsAddr[MAC_ADDR_LEN];
2356 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2357 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2358 UCHAR MaxSupportedRate;
2360 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2361 USHORT OneSecTxOkCount;
2362 USHORT OneSecTxRetryOkCount;
2363 USHORT OneSecTxFailCount;
2364 ULONG CurrTxRateStableTime; // # of second in current TX rate
2365 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2366 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2368 typedef struct _RT_802_11_WDS_ENTRY {
2372 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2373 UCHAR MacTabMatchWCID; // ASIC
2374 NDIS_802_11_WEP_STATUS WepStatus;
2377 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2378 RT_HT_PHY_INFO DesiredHtPhyInfo;
2379 BOOLEAN bAutoTxRateSwitch;
2380 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2381 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2383 typedef struct _WDS_TABLE {
2386 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2387 } WDS_TABLE, *PWDS_TABLE;
2389 typedef struct _APCLI_STRUCT {
2392 unsigned int mylinkid;
2394 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2395 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2396 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2398 CHAR Ssid[MAX_LEN_OF_SSID];
2401 CHAR CfgSsid[MAX_LEN_OF_SSID];
2402 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2403 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2405 ULONG ApCliRcvBeaconTime;
2407 ULONG CtrlCurrState;
2408 ULONG SyncCurrState;
2409 ULONG AuthCurrState;
2410 ULONG AssocCurrState;
2411 ULONG WpaPskCurrState;
2416 ULONG ClientStatusFlags;
2419 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2420 NDIS_802_11_WEP_STATUS WepStatus;
2422 // Add to support different cipher suite for WPA2/WPA mode
2423 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2424 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2425 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2426 USHORT RsnCapability;
2428 UCHAR PSK[100]; // reserve PSK key material
2430 UCHAR PMK[32]; // WPA PSK mode PMK
2431 UCHAR GTK[32]; // GTK from authenticator
2433 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2436 // store RSN_IE built by driver
2437 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2440 // For WPA countermeasures
2441 ULONG LastMicErrorTime; // record last MIC error time
2442 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2444 // For WPA-PSK supplicant state
2445 UCHAR SNonce[32]; // SNonce for WPA-PSK
2446 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2448 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2449 RT_HT_PHY_INFO DesiredHtPhyInfo;
2450 BOOLEAN bAutoTxRateSwitch;
2451 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2452 } APCLI_STRUCT, *PAPCLI_STRUCT;
2454 // ----------- end of AP ----------------------------
2459 BOOLEAN bGreenField;
2465 typedef struct _INF_PCI_CONFIG
2467 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2470 typedef struct _INF_USB_CONFIG
2472 UINT BulkInEpAddr; // bulk-in endpoint address
2473 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2477 #ifdef IKANOS_VX_1X0
2478 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2480 struct IKANOS_TX_INFO
2482 struct net_device *netdev;
2483 IkanosWlanTxCbFuncP *fp;
2485 #endif // IKANOS_VX_1X0 //
2488 #define DIAGNOSE_TIME 10 // 10 sec
2489 typedef struct _RtmpDiagStrcut_
2490 { // Diagnosis Related element
2491 unsigned char inited;
2493 unsigned char ArrayStartIdx;
2494 unsigned char ArrayCurIdx;
2496 USHORT TxDataCnt[DIAGNOSE_TIME];
2497 USHORT TxFailCnt[DIAGNOSE_TIME];
2498 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2499 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2500 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2502 USHORT TxAggCnt[DIAGNOSE_TIME];
2503 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2504 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2505 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2506 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2509 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2510 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2511 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2513 #endif // DBG_DIAGNOSE //
2517 // The miniport adapter structure
2519 typedef struct _RTMP_ADAPTER
2521 PVOID OS_Cookie; // save specific structure relative to OS
2525 USHORT LnkCtrlBitMask;
2526 USHORT RLnkCtrlConfiguration;
2527 USHORT RLnkCtrlOffset;
2528 USHORT HostLnkCtrlConfiguration;
2529 USHORT HostLnkCtrlOffset;
2530 USHORT PCIePowerSaveLevel;
2531 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2532 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2533 USHORT ThisTbttNumToNextWakeUp;
2534 ULONG SameRxByteCount;
2537 /*****************************************************************************************/
2538 /* PCI related parameters */
2539 /*****************************************************************************************/
2540 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2542 UINT int_enable_reg;
2543 UINT int_disable_mask;
2547 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2548 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2549 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2550 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2553 NDIS_SPIN_LOCK irq_lock;
2558 /*****************************************************************************************/
2559 /* Both PCI/USB related parameters */
2560 /*****************************************************************************************/
2563 /*****************************************************************************************/
2564 /* Tx related parameters */
2565 /*****************************************************************************************/
2566 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2567 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2570 // resource for software backlog queues
2571 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2572 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2574 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2575 RTMP_MGMT_RING MgmtRing;
2576 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2579 /*****************************************************************************************/
2580 /* Rx related parameters */
2581 /*****************************************************************************************/
2583 RTMP_RX_RING RxRing;
2584 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2588 /*****************************************************************************************/
2589 /* ASIC related parameters */
2590 /*****************************************************************************************/
2591 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2593 // ---------------------------
2595 // ---------------------------
2596 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2597 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2598 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2599 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2601 // ---------------------------
2603 // ---------------------------
2604 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2605 UCHAR BbpRssiToDbmDelta;
2606 BBP_R66_TUNING BbpTuning;
2608 // ----------------------------
2610 // ----------------------------
2611 UCHAR RfIcType; // RFIC_xxx
2612 ULONG RfFreqOffset; // Frequency offset for channel switching
2613 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2615 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2616 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2618 // This soft Rx Antenna Diversity mechanism is used only when user set
2619 // RX Antenna = DIVERSITY ON
2620 SOFT_RX_ANT_DIVERSITY RxAnt;
2623 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2624 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2625 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2626 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2628 UCHAR ChannelListNum; // number of channel in ChannelList[]
2631 ULONG Tx20MPwrCfgABand[5];
2632 ULONG Tx20MPwrCfgGBand[5];
2633 ULONG Tx40MPwrCfgABand[5];
2634 ULONG Tx40MPwrCfgGBand[5];
2636 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2637 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2638 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2639 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2640 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2641 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2643 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2644 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2645 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2646 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2647 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2648 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2650 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2651 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2652 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2653 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2656 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2657 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2658 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2659 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2662 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2663 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2664 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2665 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2667 // ----------------------------
2669 // ----------------------------
2670 MCU_LEDCS_STRUC LedCntl;
2671 USHORT Led1; // read from EEPROM 0x3c
2672 USHORT Led2; // EEPROM 0x3e
2673 USHORT Led3; // EEPROM 0x40
2674 UCHAR LedIndicatorStregth;
2675 UCHAR RssiSingalstrengthOffet;
2676 BOOLEAN bLedOnScanning;
2679 /*****************************************************************************************/
2680 /* 802.11 related parameters */
2681 /*****************************************************************************************/
2682 // outgoing BEACON frame buffer and corresponding TXD
2683 TXWI_STRUC BeaconTxWI;
2685 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2687 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2688 PSPOLL_FRAME PsPollFrame;
2689 HEADER_802_11 NullFrame;
2691 //=========AP===========
2694 //=======STA===========
2695 #ifdef CONFIG_STA_SUPPORT
2696 /* Modified by Wu Xi-Kun 4/21/2006 */
2697 // -----------------------------------------------
2698 // STA specific configuration & operation status
2699 // used only when pAd->OpMode == OPMODE_STA
2700 // -----------------------------------------------
2701 STA_ADMIN_CONFIG StaCfg; // user desired settings
2702 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2703 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2704 NDIS_MEDIA_STATE PreMediaState;
2705 #endif // CONFIG_STA_SUPPORT //
2707 //=======Common===========
2708 // OP mode: either AP or STA
2709 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2711 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2713 // MAT related parameters
2715 // configuration: read from Registry & E2PROM
2716 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2717 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2718 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2720 // ------------------------------------------------------
2721 // common configuration to both OPMODE_STA and OPMODE_AP
2722 // ------------------------------------------------------
2723 COMMON_CONFIG CommonCfg;
2726 // AP needs those vaiables for site survey feature.
2727 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2728 BSS_TABLE ScanTab; // store the latest SCAN result
2730 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2731 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2732 NDIS_SPIN_LOCK MacTabLock;
2734 #ifdef DOT11_N_SUPPORT
2736 #endif // DOT11_N_SUPPORT //
2737 NDIS_SPIN_LOCK BATabLock;
2738 RALINK_TIMER_STRUCT RECBATimer;
2740 // encryption/decryption KEY tables
2741 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2743 // RX re-assembly buffer for fragmentation
2744 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2747 COUNTER_802_3 Counters8023; // 802.3 counters
2748 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2749 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2750 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2751 PRIVATE_STRUC PrivateInfo; // Private information & counters
2753 // flags, see fRTMP_ADAPTER_xxx flags
2754 ULONG Flags; // Represent current device status
2755 ULONG PSFlags; // Power Save operation flag.
2757 // current TX sequence #
2760 // Control disconnect / connect event generation
2761 //+++Didn't used anymore
2766 //+++Used only for Station
2767 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2770 ULONG ExtraInfo; // Extra information for displaying status
2771 ULONG SystemErrorBitmap; // b0: E2PROM version error
2773 //+++Didn't used anymore
2774 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2777 // ---------------------------
2779 // ---------------------------
2780 RT_802_11_EVENT_TABLE EventTab;
2785 /*****************************************************************************************/
2786 /* Statistic related parameters */
2787 /*****************************************************************************************/
2789 BOOLEAN bUpdateBcnCntDone;
2790 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2791 // ----------------------------
2793 // ----------------------------
2794 BOOLEAN bBanAllBaSetup;
2795 BOOLEAN bPromiscuous;
2797 // ----------------------------
2798 // rt2860c emulation-use Parameters
2799 // ----------------------------
2802 ULONG cfendaccu[30];
2803 ULONG bacontent[16];
2804 ULONG rxint[RX_RING_SIZE+1];
2807 BOOLEAN bForcePrintTX;
2808 BOOLEAN bForcePrintRX;
2809 BOOLEAN bDisablescanning; //defined in RT2870 USB
2810 BOOLEAN bStaFifoTest;
2811 BOOLEAN bProtectionTest;
2813 BOOLEAN bGenOneHCCA;
2814 BOOLEAN bBroadComHT;
2815 //+++Following add from RT2870 USB.
2817 ULONG BulkOutComplete;
2818 ULONG BulkOutCompleteOther;
2819 ULONG BulkOutCompleteCancel; // seems not use now?
2821 ULONG BulkInComplete;
2822 ULONG BulkInCompleteFail;
2825 struct wificonf WIFItestbed;
2827 #ifdef DOT11_N_SUPPORT
2828 struct reordering_mpdu_pool mpdu_blk_pool;
2829 #endif // DOT11_N_SUPPORT //
2831 ULONG OneSecondnonBEpackets; // record non BE packets per second
2833 #if WIRELESS_EXT >= 12
2834 struct iw_statistics iw_stats;
2837 struct net_device_stats stats;
2839 ULONG TbttTickCount;
2840 #ifdef PCI_MSI_SUPPORT
2842 #endif // PCI_MSI_SUPPORT //
2847 #define TIME_BASE (1000000/OS_HZ)
2848 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2849 UCHAR flg_be_adjust;
2850 ULONG be_adjust_last_time;
2852 #ifdef IKANOS_VX_1X0
2853 struct IKANOS_TX_INFO IkanosTxInfo;
2854 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2855 #endif // IKANOS_VX_1X0 //
2859 RtmpDiagStruct DiagStruct;
2860 #endif // DBG_DIAGNOSE //
2863 UINT8 PM_FlgSuspend;
2864 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2867 // Cisco IAPP format
2869 typedef struct _CISCO_IAPP_CONTENT_
2871 USHORT Length; //IAPP Length
2872 UCHAR MessageType; //IAPP type
2873 UCHAR FunctionCode; //IAPP function type
2874 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2875 UCHAR SourceMAC[MAC_ADDR_LEN];
2876 USHORT Tag; //Tag(element IE) - Adjacent AP report
2877 USHORT TagLength; //Length of element not including 4 byte header
2878 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2879 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2882 UCHAR Ssid[MAX_LEN_OF_SSID];
2883 USHORT Seconds; //Seconds that the client has been disassociated.
2884 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2886 #define DELAYINTMASK 0x0003fffb
2887 #define INTMASK 0x0003fffb
2888 #define IndMask 0x0003fffc
2889 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2890 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2891 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2892 #define TxCoherent 0x00020000 // tx coherent
2893 #define RxCoherent 0x00010000 // rx coherent
2894 #define McuCommand 0x00000200 // mcu
2895 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2896 #define TBTTInt 0x00000800 // TBTT interrupt
2897 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2898 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2899 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2902 typedef struct _RX_BLK_
2904 RT28XX_RXD_STRUC RxD;
2906 PHEADER_802_11 pHeader;
2907 PNDIS_PACKET pRxPacket;
2911 UCHAR UserPriority; // for calculate TKIP MIC using
2915 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2916 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2917 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2920 #define fRX_WDS 0x0001
2921 #define fRX_AMSDU 0x0002
2922 #define fRX_ARALINK 0x0004
2923 #define fRX_HTC 0x0008
2924 #define fRX_PAD 0x0010
2925 #define fRX_AMPDU 0x0020
2926 #define fRX_QOS 0x0040
2927 #define fRX_INFRA 0x0080
2928 #define fRX_EAP 0x0100
2929 #define fRX_MESH 0x0200
2930 #define fRX_APCLI 0x0400
2931 #define fRX_DLS 0x0800
2932 #define fRX_WPI 0x1000
2934 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2935 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2936 #define LENGTH_ARALINK_HEADER_FIELD 2
2938 #define TX_UNKOWN_FRAME 0x00
2939 #define TX_MCAST_FRAME 0x01
2940 #define TX_LEGACY_FRAME 0x02
2941 #define TX_AMPDU_FRAME 0x04
2942 #define TX_AMSDU_FRAME 0x08
2943 #define TX_RALINK_FRAME 0x10
2944 #define TX_FRAG_FRAME 0x20
2947 // Currently the sizeof(TX_BLK) is 148 bytes.
2948 typedef struct _TX_BLK_
2951 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2952 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2953 USHORT TotalFragNum; // Total frame fragments required in one batch
2954 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2956 QUEUE_HEADER TxPacketList;
2957 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2958 HTTRANSMIT_SETTING *pTransmit;
2960 // Following structure used for the characteristics of a specific packet.
2961 PNDIS_PACKET pPacket;
2962 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2963 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2964 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2965 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2966 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2967 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2968 UCHAR HdrPadLen; // recording Header Padding Length;
2969 UCHAR apidx; // The interface associated to this packet
2970 UCHAR Wcid; // The MAC entry associated to this packet
2971 UCHAR UserPriority; // priority class of packet
2972 UCHAR FrameGap; // what kind of IFS this packet use
2973 UCHAR MpduReqNum; // number of fragments of this frame
2974 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2975 UCHAR CipherAlg; // cipher alogrithm
2980 USHORT Flags; //See following definitions for detail.
2982 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2983 ULONG Priv; // Hardware specific value saved in here.
2987 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2988 #define fTX_bAckRequired 0x0002 // the packet need ack response
2989 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2990 #define fTX_bHTRate 0x0008 // allow to use HT rate
2991 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2992 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2993 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2994 #define fTX_bWMM 0x0080 // QOS Data
2996 #define fTX_bClearEAPFrame 0x0100
2998 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3001 (_pTxBlk->Flags |= _flag) \
3003 (_pTxBlk->Flags &= ~(_flag)) \
3006 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3007 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3008 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3014 //------------------------------------------------------------------------------------------
3018 // Enable & Disable NIC interrupt via writing interrupt mask register
3019 // Since it use ADAPTER structure, it have to be put after structure definition.
3021 __inline VOID NICDisableInterrupt(
3022 IN PRTMP_ADAPTER pAd)
3024 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3025 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3026 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3029 __inline VOID NICEnableInterrupt(
3030 IN PRTMP_ADAPTER pAd)
3033 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3034 // To prevent System hang, we should enalbe the interrupt when
3035 // ASIC is already Wake Up.
3037 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3038 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3039 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3041 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3044 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3046 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3047 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3050 #ifdef RT_BIG_ENDIAN
3051 static inline VOID WriteBackToDescriptor(
3054 IN BOOLEAN DoEncrypt,
3055 IN ULONG DescriptorType)
3059 p1 = ((UINT32 *)Dest);
3060 p2 = ((UINT32 *)Src);
3065 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3069 ========================================================================
3071 Routine Description:
3072 Endian conversion of Tx/Rx descriptor .
3075 pAd Pointer to our adapter
3076 pData Pointer to Tx/Rx descriptor
3077 DescriptorType Direction of the frame
3083 Call this function when read or update descriptor
3084 ========================================================================
3086 static inline VOID RTMPWIEndianChange(
3088 IN ULONG DescriptorType)
3093 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3095 if(DescriptorType == TYPE_TXWI)
3097 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3098 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3102 for(i=0; i < size/4 ; i++)
3103 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3108 ========================================================================
3110 Routine Description:
3111 Endian conversion of Tx/Rx descriptor .
3114 pAd Pointer to our adapter
3115 pData Pointer to Tx/Rx descriptor
3116 DescriptorType Direction of the frame
3122 Call this function when read or update descriptor
3123 ========================================================================
3125 static inline VOID RTMPDescriptorEndianChange(
3127 IN ULONG DescriptorType)
3129 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3130 *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11
3131 *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15
3132 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last
3136 ========================================================================
3138 Routine Description:
3139 Endian conversion of all kinds of 802.11 frames .
3142 pAd Pointer to our adapter
3143 pData Pointer to the 802.11 frame structure
3144 Dir Direction of the frame
3145 FromRxDoneInt Caller is from RxDone interrupt
3151 Call this function when read or update buffer data
3152 ========================================================================
3154 static inline VOID RTMPFrameEndianChange(
3155 IN PRTMP_ADAPTER pAd,
3158 IN BOOLEAN FromRxDoneInt)
3160 PHEADER_802_11 pFrame;
3163 // swab 16 bit fields - Frame Control field
3166 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3169 pFrame = (PHEADER_802_11) pData;
3170 pMacHdr = (PUCHAR) pFrame;
3172 // swab 16 bit fields - Duration/ID field
3173 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3175 // swab 16 bit fields - Sequence Control field
3176 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3178 if(pFrame->FC.Type == BTYPE_MGMT)
3180 switch(pFrame->FC.SubType)
3182 case SUBTYPE_ASSOC_REQ:
3183 case SUBTYPE_REASSOC_REQ:
3184 // swab 16 bit fields - CapabilityInfo field
3185 pMacHdr += sizeof(HEADER_802_11);
3186 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3188 // swab 16 bit fields - Listen Interval field
3190 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3193 case SUBTYPE_ASSOC_RSP:
3194 case SUBTYPE_REASSOC_RSP:
3195 // swab 16 bit fields - CapabilityInfo field
3196 pMacHdr += sizeof(HEADER_802_11);
3197 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3199 // swab 16 bit fields - Status Code field
3201 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3203 // swab 16 bit fields - AID field
3205 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3209 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3210 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3211 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3215 // swab 16 bit fields - Auth Alg No. field
3216 pMacHdr += sizeof(HEADER_802_11);
3217 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3219 // swab 16 bit fields - Auth Seq No. field
3221 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3223 // swab 16 bit fields - Status Code field
3225 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3229 case SUBTYPE_BEACON:
3230 case SUBTYPE_PROBE_RSP:
3231 // swab 16 bit fields - BeaconInterval field
3232 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3233 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3235 // swab 16 bit fields - CapabilityInfo field
3236 pMacHdr += sizeof(USHORT);
3237 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3240 case SUBTYPE_DEAUTH:
3241 case SUBTYPE_DISASSOC:
3242 // swab 16 bit fields - Reason code field
3243 pMacHdr += sizeof(HEADER_802_11);
3244 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3248 else if( pFrame->FC.Type == BTYPE_DATA )
3251 else if(pFrame->FC.Type == BTYPE_CNTL)
3253 switch(pFrame->FC.SubType)
3255 case SUBTYPE_BLOCK_ACK_REQ:
3257 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3258 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3259 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3262 case SUBTYPE_BLOCK_ACK:
3263 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3264 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3268 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3269 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3275 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3278 // swab 16 bit fields - Frame Control
3279 if(Dir == DIR_WRITE)
3281 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3284 #endif // RT_BIG_ENDIAN //
3287 static inline VOID ConvertMulticastIP2MAC(
3289 IN PUCHAR *ppMacAddr,
3290 IN UINT16 ProtoType)
3292 if (pIpAddr == NULL)
3295 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3301 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3302 *(*ppMacAddr) = 0x33;
3303 *(*ppMacAddr + 1) = 0x33;
3304 *(*ppMacAddr + 2) = pIpAddr[12];
3305 *(*ppMacAddr + 3) = pIpAddr[13];
3306 *(*ppMacAddr + 4) = pIpAddr[14];
3307 *(*ppMacAddr + 5) = pIpAddr[15];
3312 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3313 *(*ppMacAddr) = 0x01;
3314 *(*ppMacAddr + 1) = 0x00;
3315 *(*ppMacAddr + 2) = 0x5e;
3316 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3317 *(*ppMacAddr + 4) = pIpAddr[2];
3318 *(*ppMacAddr + 5) = pIpAddr[3];
3325 BOOLEAN RTMPCheckForHang(
3326 IN NDIS_HANDLE MiniportAdapterContext
3330 IN NDIS_HANDLE MiniportAdapterContext
3334 // Private routines in rtmp_init.c
3336 NDIS_STATUS RTMPAllocAdapterBlock(
3338 OUT PRTMP_ADAPTER *ppAdapter
3341 NDIS_STATUS RTMPAllocTxRxRingMemory(
3342 IN PRTMP_ADAPTER pAd
3345 NDIS_STATUS RTMPFindAdapter(
3346 IN PRTMP_ADAPTER pAd,
3347 IN NDIS_HANDLE WrapperConfigurationContext
3350 NDIS_STATUS RTMPReadParametersHook(
3351 IN PRTMP_ADAPTER pAd
3354 VOID RTMPFreeAdapter(
3355 IN PRTMP_ADAPTER pAd
3358 NDIS_STATUS NICReadRegParameters(
3359 IN PRTMP_ADAPTER pAd,
3360 IN NDIS_HANDLE WrapperConfigurationContext
3364 VOID NICReadEEPROMParameters(
3365 IN PRTMP_ADAPTER pAd,
3366 IN PUCHAR mac_addr);
3368 VOID NICInitAsicFromEEPROM(
3369 IN PRTMP_ADAPTER pAd);
3371 VOID NICInitTxRxRingAndBacklogQueue(
3372 IN PRTMP_ADAPTER pAd);
3374 NDIS_STATUS NICInitializeAdapter(
3375 IN PRTMP_ADAPTER pAd,
3376 IN BOOLEAN bHardReset);
3378 NDIS_STATUS NICInitializeAsic(
3379 IN PRTMP_ADAPTER pAd,
3380 IN BOOLEAN bHardReset);
3382 VOID NICRestoreBBPValue(
3383 IN PRTMP_ADAPTER pAd);
3386 IN PRTMP_ADAPTER pAd);
3388 VOID RTMPRingCleanUp(
3389 IN PRTMP_ADAPTER pAd,
3393 IN PRTMP_ADAPTER pAd);
3395 NDIS_STATUS DbgSendPacket(
3396 IN PRTMP_ADAPTER pAd,
3397 IN PNDIS_PACKET pPacket);
3400 IN PRTMP_ADAPTER pAd);
3402 VOID NICResetFromError(
3403 IN PRTMP_ADAPTER pAd);
3405 VOID NICEraseFirmware(
3406 IN PRTMP_ADAPTER pAd);
3408 NDIS_STATUS NICLoadFirmware(
3409 IN PRTMP_ADAPTER pAd);
3411 NDIS_STATUS NICLoadRateSwitchingParams(
3412 IN PRTMP_ADAPTER pAd);
3414 BOOLEAN NICCheckForHang(
3415 IN PRTMP_ADAPTER pAd);
3417 VOID NICUpdateFifoStaCounters(
3418 IN PRTMP_ADAPTER pAd);
3420 VOID NICUpdateRawCounters(
3421 IN PRTMP_ADAPTER pAd);
3423 ULONG RTMPNotAllZero(
3427 VOID RTMPZeroMemory(
3431 ULONG RTMPCompareMemory(
3436 VOID RTMPMoveMemory(
3449 VOID RTMPPatchMacBbpBug(
3450 IN PRTMP_ADAPTER pAd);
3452 VOID RTMPPatchCardBus(
3453 IN PRTMP_ADAPTER pAdapter);
3455 VOID RTMPPatchRalinkCardBus(
3456 IN PRTMP_ADAPTER pAdapter,
3459 ULONG RTMPReadCBConfig(
3465 VOID RTMPWriteCBConfig(
3473 IN PRTMP_ADAPTER pAd,
3474 IN PRALINK_TIMER_STRUCT pTimer,
3475 IN PVOID pTimerFunc,
3480 IN PRALINK_TIMER_STRUCT pTimer,
3485 IN PRALINK_TIMER_STRUCT pTimer,
3488 VOID RTMPCancelTimer(
3489 IN PRALINK_TIMER_STRUCT pTimer,
3490 OUT BOOLEAN *pCancelled);
3493 IN PRTMP_ADAPTER pAd,
3496 VOID RTMPSetSignalLED(
3497 IN PRTMP_ADAPTER pAd,
3498 IN NDIS_802_11_RSSI Dbm);
3500 VOID RTMPEnableRxTx(
3501 IN PRTMP_ADAPTER pAd);
3504 // prototype in action.c
3506 VOID ActionStateMachineInit(
3507 IN PRTMP_ADAPTER pAd,
3508 IN STATE_MACHINE *S,
3509 OUT STATE_MACHINE_FUNC Trans[]);
3511 VOID MlmeADDBAAction(
3512 IN PRTMP_ADAPTER pAd,
3513 IN MLME_QUEUE_ELEM *Elem);
3515 VOID MlmeDELBAAction(
3516 IN PRTMP_ADAPTER pAd,
3517 IN MLME_QUEUE_ELEM *Elem);
3520 IN PRTMP_ADAPTER pAd,
3521 IN MLME_QUEUE_ELEM *Elem);
3523 VOID MlmeInvalidAction(
3524 IN PRTMP_ADAPTER pAd,
3525 IN MLME_QUEUE_ELEM *Elem);
3528 IN PRTMP_ADAPTER pAd,
3529 IN MLME_QUEUE_ELEM *Elem);
3531 #ifdef DOT11_N_SUPPORT
3532 VOID PeerAddBAReqAction(
3533 IN PRTMP_ADAPTER pAd,
3534 IN MLME_QUEUE_ELEM *Elem);
3536 VOID PeerAddBARspAction(
3537 IN PRTMP_ADAPTER pAd,
3538 IN MLME_QUEUE_ELEM *Elem);
3540 VOID PeerDelBAAction(
3541 IN PRTMP_ADAPTER pAd,
3542 IN MLME_QUEUE_ELEM *Elem);
3545 IN PRTMP_ADAPTER pAd,
3546 IN MLME_QUEUE_ELEM *Elem);
3547 #endif // DOT11_N_SUPPORT //
3549 VOID SendPSMPAction(
3550 IN PRTMP_ADAPTER pAd,
3555 #ifdef DOT11N_DRAFT3
3556 VOID SendBSS2040CoexistMgmtAction(
3557 IN PRTMP_ADAPTER pAd,
3562 VOID SendNotifyBWActionFrame(
3563 IN PRTMP_ADAPTER pAd,
3567 BOOLEAN ChannelSwitchSanityCheck(
3568 IN PRTMP_ADAPTER pAd,
3570 IN UCHAR NewChannel,
3571 IN UCHAR Secondary);
3573 VOID ChannelSwitchAction(
3574 IN PRTMP_ADAPTER pAd,
3577 IN UCHAR Secondary);
3579 ULONG BuildIntolerantChannelRep(
3580 IN PRTMP_ADAPTER pAd,
3583 VOID Update2040CoexistFrameAndNotify(
3584 IN PRTMP_ADAPTER pAd,
3586 IN BOOLEAN bAddIntolerantCha);
3588 VOID Send2040CoexistAction(
3589 IN PRTMP_ADAPTER pAd,
3591 IN BOOLEAN bAddIntolerantCha);
3592 #endif // DOT11N_DRAFT3 //
3595 IN PRTMP_ADAPTER pAd,
3596 IN MLME_QUEUE_ELEM *Elem);
3598 VOID PeerPublicAction(
3599 IN PRTMP_ADAPTER pAd,
3600 IN MLME_QUEUE_ELEM *Elem);
3602 #ifdef CONFIG_STA_SUPPORT
3603 VOID StaPublicAction(
3604 IN PRTMP_ADAPTER pAd,
3605 IN UCHAR Bss2040Coexist);
3606 #endif // CONFIG_STA_SUPPORT //
3609 VOID PeerBSSTranAction(
3610 IN PRTMP_ADAPTER pAd,
3611 IN MLME_QUEUE_ELEM *Elem);
3613 #ifdef DOT11_N_SUPPORT
3615 IN PRTMP_ADAPTER pAd,
3616 IN MLME_QUEUE_ELEM *Elem);
3617 #endif // DOT11_N_SUPPORT //
3620 IN PRTMP_ADAPTER pAd,
3621 IN MLME_QUEUE_ELEM *Elem);
3623 #ifdef QOS_DLS_SUPPORT
3625 IN PRTMP_ADAPTER pAd,
3626 IN MLME_QUEUE_ELEM *Elem);
3627 #endif // QOS_DLS_SUPPORT //
3629 #ifdef CONFIG_STA_SUPPORT
3630 #ifdef QOS_DLS_SUPPORT
3632 IN PRTMP_ADAPTER pAd,
3633 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3634 IN PRT_802_11_DLS pDls,
3636 #endif // QOS_DLS_SUPPORT //
3637 #endif // CONFIG_STA_SUPPORT //
3639 #ifdef DOT11_N_SUPPORT
3640 VOID RECBATimerTimeout(
3641 IN PVOID SystemSpecific1,
3642 IN PVOID FunctionContext,
3643 IN PVOID SystemSpecific2,
3644 IN PVOID SystemSpecific3);
3646 VOID ORIBATimerTimeout(
3647 IN PRTMP_ADAPTER pAd);
3649 VOID SendRefreshBAR(
3650 IN PRTMP_ADAPTER pAd,
3651 IN MAC_TABLE_ENTRY *pEntry);
3652 #endif // DOT11_N_SUPPORT //
3655 IN PRTMP_ADAPTER pAd,
3656 IN OUT PHEADER_802_11 pHdr80211,
3662 IN PRTMP_ADAPTER pAd,
3663 IN OUT PFRAME_BAR pCntlBar,
3667 VOID InsertActField(
3668 IN PRTMP_ADAPTER pAd,
3669 OUT PUCHAR pFrameBuf,
3670 OUT PULONG pFrameLen,
3674 BOOLEAN QosBADataParse(
3675 IN PRTMP_ADAPTER pAd,
3677 IN PUCHAR p8023Header,
3681 IN UCHAR DataOffset,
3683 IN UINT CurRxIndex);
3685 #ifdef DOT11_N_SUPPORT
3686 BOOLEAN CntlEnqueueForRecv(
3687 IN PRTMP_ADAPTER pAd,
3690 IN PFRAME_BA_REQ pMsg);
3692 VOID BaAutoManSwitch(
3693 IN PRTMP_ADAPTER pAd);
3694 #endif // DOT11_N_SUPPORT //
3697 IN PRTMP_ADAPTER pAd,
3698 IN UCHAR BatRecIdx);
3701 // Private routines in rtmp_data.c
3703 BOOLEAN RTMPHandleRxDoneInterrupt(
3704 IN PRTMP_ADAPTER pAd);
3706 VOID RTMPHandleTxDoneInterrupt(
3707 IN PRTMP_ADAPTER pAd);
3709 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3710 IN PRTMP_ADAPTER pAd,
3711 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3713 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3714 IN PRTMP_ADAPTER pAd);
3716 VOID RTMPHandleTBTTInterrupt(
3717 IN PRTMP_ADAPTER pAd);
3719 VOID RTMPHandlePreTBTTInterrupt(
3720 IN PRTMP_ADAPTER pAd);
3722 void RTMPHandleTwakeupInterrupt(
3723 IN PRTMP_ADAPTER pAd);
3725 VOID RTMPHandleRxCoherentInterrupt(
3726 IN PRTMP_ADAPTER pAd);
3728 BOOLEAN TxFrameIsAggregatible(
3729 IN PRTMP_ADAPTER pAd,
3730 IN PUCHAR pPrevAddr1,
3731 IN PUCHAR p8023hdr);
3733 BOOLEAN PeerIsAggreOn(
3734 IN PRTMP_ADAPTER pAd,
3736 IN PMAC_TABLE_ENTRY pMacEntry);
3738 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3739 IN PNDIS_BUFFER pFirstBuffer,
3740 IN UCHAR DesiredOffset,
3744 NDIS_STATUS STASendPacket(
3745 IN PRTMP_ADAPTER pAd,
3746 IN PNDIS_PACKET pPacket);
3748 VOID STASendPackets(
3749 IN NDIS_HANDLE MiniportAdapterContext,
3750 IN PPNDIS_PACKET ppPacketArray,
3751 IN UINT NumberOfPackets);
3753 VOID RTMPDeQueuePacket(
3754 IN PRTMP_ADAPTER pAd,
3755 IN BOOLEAN bIntContext,
3757 IN UCHAR Max_Tx_Packets);
3759 NDIS_STATUS RTMPHardTransmit(
3760 IN PRTMP_ADAPTER pAd,
3761 IN PNDIS_PACKET pPacket,
3763 OUT PULONG pFreeTXDLeft);
3765 NDIS_STATUS STAHardTransmit(
3766 IN PRTMP_ADAPTER pAd,
3770 VOID STARxEAPOLFrameIndicate(
3771 IN PRTMP_ADAPTER pAd,
3772 IN MAC_TABLE_ENTRY *pEntry,
3774 IN UCHAR FromWhichBSSID);
3776 NDIS_STATUS RTMPFreeTXDRequest(
3777 IN PRTMP_ADAPTER pAd,
3779 IN UCHAR NumberRequired,
3780 IN PUCHAR FreeNumberIs);
3782 NDIS_STATUS MlmeHardTransmit(
3783 IN PRTMP_ADAPTER pAd,
3785 IN PNDIS_PACKET pPacket);
3787 NDIS_STATUS MlmeHardTransmitMgmtRing(
3788 IN PRTMP_ADAPTER pAd,
3790 IN PNDIS_PACKET pPacket);
3792 NDIS_STATUS MlmeHardTransmitTxRing(
3793 IN PRTMP_ADAPTER pAd,
3795 IN PNDIS_PACKET pPacket);
3797 USHORT RTMPCalcDuration(
3798 IN PRTMP_ADAPTER pAd,
3803 IN PRTMP_ADAPTER pAd,
3804 IN PTXWI_STRUC pTxWI,
3807 IN BOOLEAN InsTimestamp,
3810 IN BOOLEAN NSeq, // HW new a sequence.
3819 IN HTTRANSMIT_SETTING *pTransmit);
3822 VOID RTMPWriteTxWI_Data(
3823 IN PRTMP_ADAPTER pAd,
3824 IN OUT PTXWI_STRUC pTxWI,
3828 VOID RTMPWriteTxWI_Cache(
3829 IN PRTMP_ADAPTER pAd,
3830 IN OUT PTXWI_STRUC pTxWI,
3833 VOID RTMPWriteTxDescriptor(
3834 IN PRTMP_ADAPTER pAd,
3839 VOID RTMPSuspendMsduTransmission(
3840 IN PRTMP_ADAPTER pAd);
3842 VOID RTMPResumeMsduTransmission(
3843 IN PRTMP_ADAPTER pAd);
3845 NDIS_STATUS MiniportMMRequest(
3846 IN PRTMP_ADAPTER pAd,
3851 VOID RTMPSendNullFrame(
3852 IN PRTMP_ADAPTER pAd,
3854 IN BOOLEAN bQosNull);
3856 VOID RTMPSendDisassociationFrame(
3857 IN PRTMP_ADAPTER pAd);
3859 VOID RTMPSendRTSFrame(
3860 IN PRTMP_ADAPTER pAd,
3862 IN unsigned int NextMpduSize,
3865 IN USHORT AckDuration,
3870 NDIS_STATUS RTMPApplyPacketFilter(
3871 IN PRTMP_ADAPTER pAd,
3872 IN PRT28XX_RXD_STRUC pRxD,
3873 IN PHEADER_802_11 pHeader);
3875 PQUEUE_HEADER RTMPCheckTxSwQueue(
3876 IN PRTMP_ADAPTER pAd,
3879 #ifdef CONFIG_STA_SUPPORT
3880 VOID RTMPReportMicError(
3881 IN PRTMP_ADAPTER pAd,
3882 IN PCIPHER_KEY pWpaKey);
3884 VOID WpaMicFailureReportFrame(
3885 IN PRTMP_ADAPTER pAd,
3886 IN MLME_QUEUE_ELEM *Elem);
3888 VOID WpaDisassocApAndBlockAssoc(
3889 IN PVOID SystemSpecific1,
3890 IN PVOID FunctionContext,
3891 IN PVOID SystemSpecific2,
3892 IN PVOID SystemSpecific3);
3893 #endif // CONFIG_STA_SUPPORT //
3895 NDIS_STATUS RTMPCloneNdisPacket(
3896 IN PRTMP_ADAPTER pAd,
3897 IN BOOLEAN pInsAMSDUHdr,
3898 IN PNDIS_PACKET pInPacket,
3899 OUT PNDIS_PACKET *ppOutPacket);
3901 NDIS_STATUS RTMPAllocateNdisPacket(
3902 IN PRTMP_ADAPTER pAd,
3903 IN PNDIS_PACKET *pPacket,
3909 VOID RTMPFreeNdisPacket(
3910 IN PRTMP_ADAPTER pAd,
3911 IN PNDIS_PACKET pPacket);
3913 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3914 IN PRTMP_ADAPTER pAd,
3917 BOOLEAN RTMPCheckDHCPFrame(
3918 IN PRTMP_ADAPTER pAd,
3919 IN PNDIS_PACKET pPacket);
3922 BOOLEAN RTMPCheckEtherType(
3923 IN PRTMP_ADAPTER pAd,
3924 IN PNDIS_PACKET pPacket);
3927 VOID RTMPCckBbpTuning(
3928 IN PRTMP_ADAPTER pAd,
3932 // Private routines in rtmp_wep.c
3934 VOID RTMPInitWepEngine(
3935 IN PRTMP_ADAPTER pAd,
3941 VOID RTMPEncryptData(
3942 IN PRTMP_ADAPTER pAd,
3947 BOOLEAN RTMPDecryptData(
3948 IN PRTMP_ADAPTER pAdapter,
3953 BOOLEAN RTMPSoftDecryptWEP(
3954 IN PRTMP_ADAPTER pAd,
3956 IN ULONG DataByteCnt,
3957 IN PCIPHER_KEY pGroupKey);
3960 IN PRTMP_ADAPTER pAd,
3964 IN PARCFOURCONTEXT Ctx,
3969 IN PARCFOURCONTEXT Ctx);
3971 VOID ARCFOUR_DECRYPT(
3972 IN PARCFOURCONTEXT Ctx,
3977 VOID ARCFOUR_ENCRYPT(
3978 IN PARCFOURCONTEXT Ctx,
3983 VOID WPAARCFOUR_ENCRYPT(
3984 IN PARCFOURCONTEXT Ctx,
3989 UINT RTMP_CALC_FCS32(
3998 // Asic/RF/BBP related functions
4000 VOID AsicAdjustTxPower(
4001 IN PRTMP_ADAPTER pAd);
4003 VOID AsicUpdateProtect(
4004 IN PRTMP_ADAPTER pAd,
4005 IN USHORT OperaionMode,
4007 IN BOOLEAN bDisableBGProtect,
4008 IN BOOLEAN bNonGFExist);
4010 VOID AsicSwitchChannel(
4011 IN PRTMP_ADAPTER pAd,
4015 VOID AsicLockChannel(
4016 IN PRTMP_ADAPTER pAd,
4019 VOID AsicAntennaSelect(
4020 IN PRTMP_ADAPTER pAd,
4023 VOID AsicAntennaSetting(
4024 IN PRTMP_ADAPTER pAd,
4025 IN ABGBAND_STATE BandState);
4027 VOID AsicRfTuningExec(
4028 IN PVOID SystemSpecific1,
4029 IN PVOID FunctionContext,
4030 IN PVOID SystemSpecific2,
4031 IN PVOID SystemSpecific3);
4033 #ifdef CONFIG_STA_SUPPORT
4034 VOID AsicSleepThenAutoWakeup(
4035 IN PRTMP_ADAPTER pAd,
4036 IN USHORT TbttNumToNextWakeUp);
4038 VOID AsicForceSleep(
4039 IN PRTMP_ADAPTER pAd);
4041 VOID AsicForceWakeup(
4042 IN PRTMP_ADAPTER pAd,
4044 #endif // CONFIG_STA_SUPPORT //
4047 IN PRTMP_ADAPTER pAd,
4050 VOID AsicSetMcastWC(
4051 IN PRTMP_ADAPTER pAd);
4053 VOID AsicDelWcidTab(
4054 IN PRTMP_ADAPTER pAd,
4058 IN PRTMP_ADAPTER pAd);
4060 VOID AsicDisableRDG(
4061 IN PRTMP_ADAPTER pAd);
4063 VOID AsicDisableSync(
4064 IN PRTMP_ADAPTER pAd);
4066 VOID AsicEnableBssSync(
4067 IN PRTMP_ADAPTER pAd);
4069 VOID AsicEnableIbssSync(
4070 IN PRTMP_ADAPTER pAd);
4072 VOID AsicSetEdcaParm(
4073 IN PRTMP_ADAPTER pAd,
4074 IN PEDCA_PARM pEdcaParm);
4076 VOID AsicSetSlotTime(
4077 IN PRTMP_ADAPTER pAd,
4078 IN BOOLEAN bUseShortSlotTime);
4080 VOID AsicAddSharedKeyEntry(
4081 IN PRTMP_ADAPTER pAd,
4089 VOID AsicRemoveSharedKeyEntry(
4090 IN PRTMP_ADAPTER pAd,
4094 VOID AsicUpdateWCIDAttribute(
4095 IN PRTMP_ADAPTER pAd,
4099 IN BOOLEAN bUsePairewiseKeyTable);
4101 VOID AsicUpdateWCIDIVEIV(
4102 IN PRTMP_ADAPTER pAd,
4107 VOID AsicUpdateRxWCIDTable(
4108 IN PRTMP_ADAPTER pAd,
4112 VOID AsicAddKeyEntry(
4113 IN PRTMP_ADAPTER pAd,
4117 IN PCIPHER_KEY pCipherKey,
4118 IN BOOLEAN bUsePairewiseKeyTable,
4121 VOID AsicAddPairwiseKeyEntry(
4122 IN PRTMP_ADAPTER pAd,
4125 IN CIPHER_KEY *pCipherKey);
4127 VOID AsicRemovePairwiseKeyEntry(
4128 IN PRTMP_ADAPTER pAd,
4132 BOOLEAN AsicSendCommandToMcu(
4133 IN PRTMP_ADAPTER pAd,
4139 BOOLEAN AsicCheckCommanOk(
4140 IN PRTMP_ADAPTER pAd,
4143 VOID MacAddrRandomBssid(
4144 IN PRTMP_ADAPTER pAd,
4147 VOID MgtMacHeaderInit(
4148 IN PRTMP_ADAPTER pAd,
4149 IN OUT PHEADER_802_11 pHdr80211,
4156 IN PRTMP_ADAPTER pAd);
4159 IN PRTMP_ADAPTER pAd);
4165 #ifdef DOT11_N_SUPPORT
4167 IN PRTMP_ADAPTER pAd,
4169 #endif // DOT11_N_SUPPORT //
4171 ULONG BssTableSearch(
4176 ULONG BssSsidTableSearch(
4183 ULONG BssTableSearchWithSSID(
4190 VOID BssTableDeleteEntry(
4191 IN OUT PBSS_TABLE pTab,
4195 #ifdef DOT11_N_SUPPORT
4196 VOID BATableDeleteORIEntry(
4197 IN OUT PRTMP_ADAPTER pAd,
4198 IN BA_ORI_ENTRY *pBAORIEntry);
4200 VOID BATableDeleteRECEntry(
4201 IN OUT PRTMP_ADAPTER pAd,
4202 IN BA_REC_ENTRY *pBARECEntry);
4204 VOID BATableTearORIEntry(
4205 IN OUT PRTMP_ADAPTER pAd,
4208 IN BOOLEAN bForceDelete,
4211 VOID BATableTearRECEntry(
4212 IN OUT PRTMP_ADAPTER pAd,
4216 #endif // DOT11_N_SUPPORT //
4219 IN PRTMP_ADAPTER pAd,
4220 OUT PBSS_ENTRY pBss,
4225 IN USHORT BeaconPeriod,
4228 IN USHORT CapabilityInfo,
4230 IN UCHAR SupRateLen,
4232 IN UCHAR ExtRateLen,
4233 IN HT_CAPABILITY_IE *pHtCapability,
4234 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4235 IN UCHAR HtCapabilityLen,
4236 IN UCHAR AddHtInfoLen,
4237 IN UCHAR NewExtChanOffset,
4240 IN LARGE_INTEGER TimeStamp,
4242 IN PEDCA_PARM pEdcaParm,
4243 IN PQOS_CAPABILITY_PARM pQosCapability,
4244 IN PQBSS_LOAD_PARM pQbssLoad,
4245 IN USHORT LengthVIE,
4246 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4248 ULONG BssTableSetEntry(
4249 IN PRTMP_ADAPTER pAd,
4250 OUT PBSS_TABLE pTab,
4255 IN USHORT BeaconPeriod,
4258 IN USHORT CapabilityInfo,
4260 IN UCHAR SupRateLen,
4262 IN UCHAR ExtRateLen,
4263 IN HT_CAPABILITY_IE *pHtCapability,
4264 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4265 IN UCHAR HtCapabilityLen,
4266 IN UCHAR AddHtInfoLen,
4267 IN UCHAR NewExtChanOffset,
4270 IN LARGE_INTEGER TimeStamp,
4272 IN PEDCA_PARM pEdcaParm,
4273 IN PQOS_CAPABILITY_PARM pQosCapability,
4274 IN PQBSS_LOAD_PARM pQbssLoad,
4275 IN USHORT LengthVIE,
4276 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4278 #ifdef DOT11_N_SUPPORT
4279 VOID BATableInsertEntry(
4280 IN PRTMP_ADAPTER pAd,
4282 IN USHORT TimeOutValue,
4283 IN USHORT StartingSeq,
4286 IN UCHAR OriginatorStatus,
4287 IN BOOLEAN IsRecipient);
4289 #ifdef DOT11N_DRAFT3
4290 VOID Bss2040CoexistTimeOut(
4291 IN PVOID SystemSpecific1,
4292 IN PVOID FunctionContext,
4293 IN PVOID SystemSpecific2,
4294 IN PVOID SystemSpecific3);
4298 IN PRTMP_ADAPTER pAd);
4300 ULONG TriEventTableSetEntry(
4301 IN PRTMP_ADAPTER pAd,
4302 OUT TRIGGER_EVENT_TAB *Tab,
4304 IN HT_CAPABILITY_IE *pHtCapability,
4305 IN UCHAR HtCapabilityLen,
4307 IN UCHAR ChannelNo);
4309 VOID TriEventCounterMaintenance(
4310 IN PRTMP_ADAPTER pAd);
4311 #endif // DOT11N_DRAFT3 //
4312 #endif // DOT11_N_SUPPORT //
4314 VOID BssTableSsidSort(
4315 IN PRTMP_ADAPTER pAd,
4316 OUT BSS_TABLE *OutTab,
4320 VOID BssTableSortByRssi(
4321 IN OUT BSS_TABLE *OutTab);
4323 VOID BssCipherParse(
4324 IN OUT PBSS_ENTRY pBss);
4326 NDIS_STATUS MlmeQueueInit(
4327 IN MLME_QUEUE *Queue);
4329 VOID MlmeQueueDestroy(
4330 IN MLME_QUEUE *Queue);
4332 BOOLEAN MlmeEnqueue(
4333 IN PRTMP_ADAPTER pAd,
4339 BOOLEAN MlmeEnqueueForRecv(
4340 IN PRTMP_ADAPTER pAd,
4342 IN ULONG TimeStampHigh,
4343 IN ULONG TimeStampLow,
4352 BOOLEAN MlmeDequeue(
4353 IN MLME_QUEUE *Queue,
4354 OUT MLME_QUEUE_ELEM **Elem);
4356 VOID MlmeRestartStateMachine(
4357 IN PRTMP_ADAPTER pAd);
4359 BOOLEAN MlmeQueueEmpty(
4360 IN MLME_QUEUE *Queue);
4362 BOOLEAN MlmeQueueFull(
4363 IN MLME_QUEUE *Queue);
4365 BOOLEAN MsgTypeSubst(
4366 IN PRTMP_ADAPTER pAd,
4367 IN PFRAME_802_11 pFrame,
4371 VOID StateMachineInit(
4372 IN STATE_MACHINE *Sm,
4373 IN STATE_MACHINE_FUNC Trans[],
4376 IN STATE_MACHINE_FUNC DefFunc,
4380 VOID StateMachineSetAction(
4381 IN STATE_MACHINE *S,
4384 IN STATE_MACHINE_FUNC F);
4386 VOID StateMachinePerformAction(
4387 IN PRTMP_ADAPTER pAd,
4388 IN STATE_MACHINE *S,
4389 IN MLME_QUEUE_ELEM *Elem);
4392 IN PRTMP_ADAPTER pAd,
4393 IN MLME_QUEUE_ELEM *Elem);
4395 VOID AssocStateMachineInit(
4396 IN PRTMP_ADAPTER pAd,
4397 IN STATE_MACHINE *Sm,
4398 OUT STATE_MACHINE_FUNC Trans[]);
4400 VOID ReassocTimeout(
4401 IN PVOID SystemSpecific1,
4402 IN PVOID FunctionContext,
4403 IN PVOID SystemSpecific2,
4404 IN PVOID SystemSpecific3);
4407 IN PVOID SystemSpecific1,
4408 IN PVOID FunctionContext,
4409 IN PVOID SystemSpecific2,
4410 IN PVOID SystemSpecific3);
4412 VOID DisassocTimeout(
4413 IN PVOID SystemSpecific1,
4414 IN PVOID FunctionContext,
4415 IN PVOID SystemSpecific2,
4416 IN PVOID SystemSpecific3);
4418 //----------------------------------------------
4419 VOID MlmeDisassocReqAction(
4420 IN PRTMP_ADAPTER pAd,
4421 IN MLME_QUEUE_ELEM *Elem);
4423 VOID MlmeAssocReqAction(
4424 IN PRTMP_ADAPTER pAd,
4425 IN MLME_QUEUE_ELEM *Elem);
4427 VOID MlmeReassocReqAction(
4428 IN PRTMP_ADAPTER pAd,
4429 IN MLME_QUEUE_ELEM *Elem);
4431 VOID MlmeDisassocReqAction(
4432 IN PRTMP_ADAPTER pAd,
4433 IN MLME_QUEUE_ELEM *Elem);
4435 VOID PeerAssocRspAction(
4436 IN PRTMP_ADAPTER pAd,
4437 IN MLME_QUEUE_ELEM *Elem);
4439 VOID PeerReassocRspAction(
4440 IN PRTMP_ADAPTER pAd,
4441 IN MLME_QUEUE_ELEM *Elem);
4443 VOID PeerDisassocAction(
4444 IN PRTMP_ADAPTER pAd,
4445 IN MLME_QUEUE_ELEM *Elem);
4447 VOID DisassocTimeoutAction(
4448 IN PRTMP_ADAPTER pAd,
4449 IN MLME_QUEUE_ELEM *Elem);
4451 VOID AssocTimeoutAction(
4452 IN PRTMP_ADAPTER pAd,
4453 IN MLME_QUEUE_ELEM *Elem);
4455 VOID ReassocTimeoutAction(
4456 IN PRTMP_ADAPTER pAd,
4457 IN MLME_QUEUE_ELEM *Elem);
4460 IN PRTMP_ADAPTER pAd,
4463 VOID SwitchBetweenWepAndCkip(
4464 IN PRTMP_ADAPTER pAd);
4466 VOID InvalidStateWhenAssoc(
4467 IN PRTMP_ADAPTER pAd,
4468 IN MLME_QUEUE_ELEM *Elem);
4470 VOID InvalidStateWhenReassoc(
4471 IN PRTMP_ADAPTER pAd,
4472 IN MLME_QUEUE_ELEM *Elem);
4474 VOID InvalidStateWhenDisassociate(
4475 IN PRTMP_ADAPTER pAd,
4476 IN MLME_QUEUE_ELEM *Elem);
4480 IN PRTMP_ADAPTER pAd);
4482 VOID ComposeNullFrame(
4483 IN PRTMP_ADAPTER pAd);
4486 IN PRTMP_ADAPTER pAd,
4488 IN USHORT CapabilityInfo,
4491 IN UCHAR SupRateLen,
4493 IN UCHAR ExtRateLen,
4494 IN PEDCA_PARM pEdcaParm,
4495 IN HT_CAPABILITY_IE *pHtCapability,
4496 IN UCHAR HtCapabilityLen,
4497 IN ADD_HT_INFO_IE *pAddHtInfo);
4499 VOID AuthStateMachineInit(
4500 IN PRTMP_ADAPTER pAd,
4501 IN PSTATE_MACHINE sm,
4502 OUT STATE_MACHINE_FUNC Trans[]);
4505 IN PVOID SystemSpecific1,
4506 IN PVOID FunctionContext,
4507 IN PVOID SystemSpecific2,
4508 IN PVOID SystemSpecific3);
4510 VOID MlmeAuthReqAction(
4511 IN PRTMP_ADAPTER pAd,
4512 IN MLME_QUEUE_ELEM *Elem);
4514 VOID PeerAuthRspAtSeq2Action(
4515 IN PRTMP_ADAPTER pAd,
4516 IN MLME_QUEUE_ELEM *Elem);
4518 VOID PeerAuthRspAtSeq4Action(
4519 IN PRTMP_ADAPTER pAd,
4520 IN MLME_QUEUE_ELEM *Elem);
4522 VOID AuthTimeoutAction(
4523 IN PRTMP_ADAPTER pAd,
4524 IN MLME_QUEUE_ELEM *Elem);
4527 IN PRTMP_ADAPTER pAd,
4530 VOID MlmeDeauthReqAction(
4531 IN PRTMP_ADAPTER pAd,
4532 IN MLME_QUEUE_ELEM *Elem);
4534 VOID InvalidStateWhenAuth(
4535 IN PRTMP_ADAPTER pAd,
4536 IN MLME_QUEUE_ELEM *Elem);
4538 //=============================================
4540 VOID AuthRspStateMachineInit(
4541 IN PRTMP_ADAPTER pAd,
4542 IN PSTATE_MACHINE Sm,
4543 IN STATE_MACHINE_FUNC Trans[]);
4545 VOID PeerDeauthAction(
4546 IN PRTMP_ADAPTER pAd,
4547 IN MLME_QUEUE_ELEM *Elem);
4549 VOID PeerAuthSimpleRspGenAndSend(
4550 IN PRTMP_ADAPTER pAd,
4551 IN PHEADER_802_11 pHdr80211,
4558 // Private routines in dls.c
4561 #ifdef CONFIG_STA_SUPPORT
4562 #ifdef QOS_DLS_SUPPORT
4563 void DlsStateMachineInit(
4564 IN PRTMP_ADAPTER pAd,
4565 IN STATE_MACHINE *Sm,
4566 OUT STATE_MACHINE_FUNC Trans[]);
4568 VOID MlmeDlsReqAction(
4569 IN PRTMP_ADAPTER pAd,
4570 IN MLME_QUEUE_ELEM *Elem);
4572 VOID PeerDlsReqAction(
4573 IN PRTMP_ADAPTER pAd,
4574 IN MLME_QUEUE_ELEM *Elem);
4576 VOID PeerDlsRspAction(
4577 IN PRTMP_ADAPTER pAd,
4578 IN MLME_QUEUE_ELEM *Elem);
4580 VOID MlmeDlsTearDownAction(
4581 IN PRTMP_ADAPTER pAd,
4582 IN MLME_QUEUE_ELEM *Elem);
4584 VOID PeerDlsTearDownAction(
4585 IN PRTMP_ADAPTER pAd,
4586 IN MLME_QUEUE_ELEM *Elem);
4588 VOID RTMPCheckDLSTimeOut(
4589 IN PRTMP_ADAPTER pAd);
4591 BOOLEAN RTMPRcvFrameDLSCheck(
4592 IN PRTMP_ADAPTER pAd,
4593 IN PHEADER_802_11 pHeader,
4595 IN PRT28XX_RXD_STRUC pRxD);
4597 INT RTMPCheckDLSFrame(
4598 IN PRTMP_ADAPTER pAd,
4601 VOID RTMPSendDLSTearDownFrame(
4602 IN PRTMP_ADAPTER pAd,
4605 NDIS_STATUS RTMPSendSTAKeyRequest(
4606 IN PRTMP_ADAPTER pAd,
4609 NDIS_STATUS RTMPSendSTAKeyHandShake(
4610 IN PRTMP_ADAPTER pAd,
4613 VOID DlsTimeoutAction(
4614 IN PVOID SystemSpecific1,
4615 IN PVOID FunctionContext,
4616 IN PVOID SystemSpecific2,
4617 IN PVOID SystemSpecific3);
4619 BOOLEAN MlmeDlsReqSanity(
4620 IN PRTMP_ADAPTER pAd,
4623 OUT PRT_802_11_DLS *pDLS,
4624 OUT PUSHORT pReason);
4626 INT Set_DlsEntryInfo_Display_Proc(
4627 IN PRTMP_ADAPTER pAd,
4630 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4631 IN PRTMP_ADAPTER pAd,
4633 IN UINT DlsEntryIdx);
4635 BOOLEAN MacTableDeleteDlsEntry(
4636 IN PRTMP_ADAPTER pAd,
4640 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4641 IN PRTMP_ADAPTER pAd,
4643 IN BOOLEAN bResetIdelCount);
4645 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4646 IN PRTMP_ADAPTER pAd,
4649 IN BOOLEAN bResetIdelCount);
4651 INT Set_DlsAddEntry_Proc(
4652 IN PRTMP_ADAPTER pAd,
4655 INT Set_DlsTearDownEntry_Proc(
4656 IN PRTMP_ADAPTER pAd,
4658 #endif // QOS_DLS_SUPPORT //
4659 #endif // CONFIG_STA_SUPPORT //
4661 #ifdef QOS_DLS_SUPPORT
4662 BOOLEAN PeerDlsReqSanity(
4663 IN PRTMP_ADAPTER pAd,
4668 OUT USHORT *pCapabilityInfo,
4669 OUT USHORT *pDlsTimeout,
4670 OUT UCHAR *pRatesLen,
4672 OUT UCHAR *pHtCapabilityLen,
4673 OUT HT_CAPABILITY_IE *pHtCapability);
4675 BOOLEAN PeerDlsRspSanity(
4676 IN PRTMP_ADAPTER pAd,
4681 OUT USHORT *pCapabilityInfo,
4682 OUT USHORT *pStatus,
4683 OUT UCHAR *pRatesLen,
4685 OUT UCHAR *pHtCapabilityLen,
4686 OUT HT_CAPABILITY_IE *pHtCapability);
4688 BOOLEAN PeerDlsTearDownSanity(
4689 IN PRTMP_ADAPTER pAd,
4694 OUT USHORT *pReason);
4695 #endif // QOS_DLS_SUPPORT //
4697 //========================================
4699 VOID SyncStateMachineInit(
4700 IN PRTMP_ADAPTER pAd,
4701 IN STATE_MACHINE *Sm,
4702 OUT STATE_MACHINE_FUNC Trans[]);
4705 IN PVOID SystemSpecific1,
4706 IN PVOID FunctionContext,
4707 IN PVOID SystemSpecific2,
4708 IN PVOID SystemSpecific3);
4711 IN PVOID SystemSpecific1,
4712 IN PVOID FunctionContext,
4713 IN PVOID SystemSpecific2,
4714 IN PVOID SystemSpecific3);
4716 VOID MlmeScanReqAction(
4717 IN PRTMP_ADAPTER pAd,
4718 IN MLME_QUEUE_ELEM *Elem);
4720 VOID InvalidStateWhenScan(
4721 IN PRTMP_ADAPTER pAd,
4722 IN MLME_QUEUE_ELEM *Elem);
4724 VOID InvalidStateWhenJoin(
4725 IN PRTMP_ADAPTER pAd,
4726 IN MLME_QUEUE_ELEM *Elem);
4728 VOID InvalidStateWhenStart(
4729 IN PRTMP_ADAPTER pAd,
4730 IN MLME_QUEUE_ELEM *Elem);
4733 IN PRTMP_ADAPTER pAd,
4734 IN MLME_QUEUE_ELEM *Elem);
4736 VOID EnqueueProbeRequest(
4737 IN PRTMP_ADAPTER pAd);
4739 BOOLEAN ScanRunning(
4740 IN PRTMP_ADAPTER pAd);
4741 //=========================================
4744 IN PRTMP_ADAPTER pAd,
4745 IN STATE_MACHINE *S,
4746 OUT STATE_MACHINE_FUNC Trans[]);
4748 VOID MlmeCntlMachinePerformAction(
4749 IN PRTMP_ADAPTER pAd,
4750 IN STATE_MACHINE *S,
4751 IN MLME_QUEUE_ELEM *Elem);
4754 IN PRTMP_ADAPTER pAd,
4755 IN MLME_QUEUE_ELEM *Elem);
4757 VOID CntlOidScanProc(
4758 IN PRTMP_ADAPTER pAd,
4759 IN MLME_QUEUE_ELEM *Elem);
4761 VOID CntlOidSsidProc(
4762 IN PRTMP_ADAPTER pAd,
4763 IN MLME_QUEUE_ELEM * Elem);
4765 VOID CntlOidRTBssidProc(
4766 IN PRTMP_ADAPTER pAd,
4767 IN MLME_QUEUE_ELEM * Elem);
4769 VOID CntlMlmeRoamingProc(
4770 IN PRTMP_ADAPTER pAd,
4771 IN MLME_QUEUE_ELEM * Elem);
4773 VOID CntlWaitDisassocProc(
4774 IN PRTMP_ADAPTER pAd,
4775 IN MLME_QUEUE_ELEM *Elem);
4777 VOID CntlWaitJoinProc(
4778 IN PRTMP_ADAPTER pAd,
4779 IN MLME_QUEUE_ELEM *Elem);
4781 VOID CntlWaitReassocProc(
4782 IN PRTMP_ADAPTER pAd,
4783 IN MLME_QUEUE_ELEM *Elem);
4785 VOID CntlWaitStartProc(
4786 IN PRTMP_ADAPTER pAd,
4787 IN MLME_QUEUE_ELEM *Elem);
4789 VOID CntlWaitAuthProc(
4790 IN PRTMP_ADAPTER pAd,
4791 IN MLME_QUEUE_ELEM *Elem);
4793 VOID CntlWaitAuthProc2(
4794 IN PRTMP_ADAPTER pAd,
4795 IN MLME_QUEUE_ELEM *Elem);
4797 VOID CntlWaitAssocProc(
4798 IN PRTMP_ADAPTER pAd,
4799 IN MLME_QUEUE_ELEM *Elem);
4801 #ifdef QOS_DLS_SUPPORT
4802 VOID CntlOidDLSSetupProc(
4803 IN PRTMP_ADAPTER pAd,
4804 IN MLME_QUEUE_ELEM *Elem);
4805 #endif // QOS_DLS_SUPPORT //
4808 IN PRTMP_ADAPTER pAd,
4812 IN PRTMP_ADAPTER pAd,
4813 IN BOOLEAN IsReqFromAP);
4815 VOID IterateOnBssTab(
4816 IN PRTMP_ADAPTER pAd);
4818 VOID IterateOnBssTab2(
4819 IN PRTMP_ADAPTER pAd);;
4822 IN PRTMP_ADAPTER pAd,
4823 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4827 IN PRTMP_ADAPTER pAd,
4828 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4830 IN USHORT CapabilityInfo,
4832 IN USHORT ListenIntv);
4835 IN PRTMP_ADAPTER pAd,
4836 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4842 VOID DisassocParmFill(
4843 IN PRTMP_ADAPTER pAd,
4844 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4849 IN PRTMP_ADAPTER pAd,
4850 IN OUT MLME_START_REQ_STRUCT *StartReq,
4855 IN PRTMP_ADAPTER pAd,
4856 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4861 IN PRTMP_ADAPTER pAd);
4863 VOID EnqueueBeaconFrame(
4864 IN PRTMP_ADAPTER pAd);
4866 VOID MlmeJoinReqAction(
4867 IN PRTMP_ADAPTER pAd,
4868 IN MLME_QUEUE_ELEM *Elem);
4870 VOID MlmeScanReqAction(
4871 IN PRTMP_ADAPTER pAd,
4872 IN MLME_QUEUE_ELEM *Elem);
4874 VOID MlmeStartReqAction(
4875 IN PRTMP_ADAPTER pAd,
4876 IN MLME_QUEUE_ELEM *Elem);
4878 VOID ScanTimeoutAction(
4879 IN PRTMP_ADAPTER pAd,
4880 IN MLME_QUEUE_ELEM *Elem);
4882 VOID BeaconTimeoutAtJoinAction(
4883 IN PRTMP_ADAPTER pAd,
4884 IN MLME_QUEUE_ELEM *Elem);
4886 VOID PeerBeaconAtScanAction(
4887 IN PRTMP_ADAPTER pAd,
4888 IN MLME_QUEUE_ELEM *Elem);
4890 VOID PeerBeaconAtJoinAction(
4891 IN PRTMP_ADAPTER pAd,
4892 IN MLME_QUEUE_ELEM *Elem);
4895 IN PRTMP_ADAPTER pAd,
4896 IN MLME_QUEUE_ELEM *Elem);
4898 VOID PeerProbeReqAction(
4899 IN PRTMP_ADAPTER pAd,
4900 IN MLME_QUEUE_ELEM *Elem);
4902 VOID ScanNextChannel(
4903 IN PRTMP_ADAPTER pAd);
4905 ULONG MakeIbssBeacon(
4906 IN PRTMP_ADAPTER pAd);
4908 VOID CCXAdjacentAPReport(
4909 IN PRTMP_ADAPTER pAd);
4911 BOOLEAN MlmeScanReqSanity(
4912 IN PRTMP_ADAPTER pAd,
4918 OUT UCHAR *ScanType);
4920 BOOLEAN PeerBeaconAndProbeRspSanity(
4921 IN PRTMP_ADAPTER pAd,
4924 IN UCHAR MsgChannel,
4928 OUT UCHAR *pSsidLen,
4929 OUT UCHAR *pBssType,
4930 OUT USHORT *pBeaconPeriod,
4931 OUT UCHAR *pChannel,
4932 OUT UCHAR *pNewChannel,
4933 OUT LARGE_INTEGER *pTimestamp,
4934 OUT CF_PARM *pCfParm,
4935 OUT USHORT *pAtimWin,
4936 OUT USHORT *pCapabilityInfo,
4938 OUT UCHAR *pDtimCount,
4939 OUT UCHAR *pDtimPeriod,
4940 OUT UCHAR *pBcastFlag,
4941 OUT UCHAR *pMessageToMe,
4942 OUT UCHAR SupRate[],
4943 OUT UCHAR *pSupRateLen,
4944 OUT UCHAR ExtRate[],
4945 OUT UCHAR *pExtRateLen,
4946 OUT UCHAR *pCkipFlag,
4947 OUT UCHAR *pAironetCellPowerLimit,
4948 OUT PEDCA_PARM pEdcaParm,
4949 OUT PQBSS_LOAD_PARM pQbssLoad,
4950 OUT PQOS_CAPABILITY_PARM pQosCapability,
4951 OUT ULONG *pRalinkIe,
4952 OUT UCHAR *pHtCapabilityLen,
4953 #ifdef CONFIG_STA_SUPPORT
4954 OUT UCHAR *pPreNHtCapabilityLen,
4955 #endif // CONFIG_STA_SUPPORT //
4956 OUT HT_CAPABILITY_IE *pHtCapability,
4957 OUT UCHAR *AddHtInfoLen,
4958 OUT ADD_HT_INFO_IE *AddHtInfo,
4959 OUT UCHAR *NewExtChannel,
4960 OUT USHORT *LengthVIE,
4961 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4963 BOOLEAN PeerAddBAReqActionSanity(
4964 IN PRTMP_ADAPTER pAd,
4969 BOOLEAN PeerAddBARspActionSanity(
4970 IN PRTMP_ADAPTER pAd,
4974 BOOLEAN PeerDelBAActionSanity(
4975 IN PRTMP_ADAPTER pAd,
4980 BOOLEAN MlmeAssocReqSanity(
4981 IN PRTMP_ADAPTER pAd,
4985 OUT USHORT *CapabilityInfo,
4987 OUT USHORT *ListenIntv);
4989 BOOLEAN MlmeAuthReqSanity(
4990 IN PRTMP_ADAPTER pAd,
4997 BOOLEAN MlmeStartReqSanity(
4998 IN PRTMP_ADAPTER pAd,
5002 OUT UCHAR *Ssidlen);
5004 BOOLEAN PeerAuthSanity(
5005 IN PRTMP_ADAPTER pAd,
5012 OUT CHAR ChlgText[]);
5014 BOOLEAN PeerAssocRspSanity(
5015 IN PRTMP_ADAPTER pAd,
5019 OUT USHORT *pCapabilityInfo,
5020 OUT USHORT *pStatus,
5022 OUT UCHAR SupRate[],
5023 OUT UCHAR *pSupRateLen,
5024 OUT UCHAR ExtRate[],
5025 OUT UCHAR *pExtRateLen,
5026 OUT HT_CAPABILITY_IE *pHtCapability,
5027 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5028 OUT UCHAR *pHtCapabilityLen,
5029 OUT UCHAR *pAddHtInfoLen,
5030 OUT UCHAR *pNewExtChannelOffset,
5031 OUT PEDCA_PARM pEdcaParm,
5032 OUT UCHAR *pCkipFlag);
5034 BOOLEAN PeerDisassocSanity(
5035 IN PRTMP_ADAPTER pAd,
5039 OUT USHORT *Reason);
5041 BOOLEAN PeerWpaMessageSanity(
5042 IN PRTMP_ADAPTER pAd,
5043 IN PEAPOL_PACKET pMsg,
5046 IN MAC_TABLE_ENTRY *pEntry);
5048 BOOLEAN PeerDeauthSanity(
5049 IN PRTMP_ADAPTER pAd,
5053 OUT USHORT *Reason);
5055 BOOLEAN PeerProbeReqSanity(
5056 IN PRTMP_ADAPTER pAd,
5061 OUT UCHAR *pSsidLen);
5067 OUT UCHAR *BcastFlag,
5068 OUT UCHAR *DtimCount,
5069 OUT UCHAR *DtimPeriod,
5070 OUT UCHAR *MessageToMe);
5072 UCHAR ChannelSanity(
5073 IN PRTMP_ADAPTER pAd,
5076 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5077 IN PBSS_ENTRY pBss);
5079 BOOLEAN MlmeDelBAReqSanity(
5080 IN PRTMP_ADAPTER pAd,
5084 BOOLEAN MlmeAddBAReqSanity(
5085 IN PRTMP_ADAPTER pAd,
5090 ULONG MakeOutgoingFrame(
5092 OUT ULONG *Length, ...);
5095 IN PRTMP_ADAPTER pAd,
5099 IN PRTMP_ADAPTER pAd);
5101 VOID AsicUpdateAutoFallBackTable(
5102 IN PRTMP_ADAPTER pAd,
5105 VOID MlmePeriodicExec(
5106 IN PVOID SystemSpecific1,
5107 IN PVOID FunctionContext,
5108 IN PVOID SystemSpecific2,
5109 IN PVOID SystemSpecific3);
5112 IN PVOID SystemSpecific1,
5113 IN PVOID FunctionContext,
5114 IN PVOID SystemSpecific2,
5115 IN PVOID SystemSpecific3);
5118 IN PVOID SystemSpecific1,
5119 IN PVOID FunctionContext,
5120 IN PVOID SystemSpecific2,
5121 IN PVOID SystemSpecific3);
5123 VOID STAMlmePeriodicExec(
5127 IN PRTMP_ADAPTER pAd);
5129 VOID MlmeAutoReconnectLastSSID(
5130 IN PRTMP_ADAPTER pAd);
5132 BOOLEAN MlmeValidateSSID(
5136 VOID MlmeCheckForRoaming(
5137 IN PRTMP_ADAPTER pAd,
5140 VOID MlmeCheckForFastRoaming(
5141 IN PRTMP_ADAPTER pAd,
5144 VOID MlmeDynamicTxRateSwitching(
5145 IN PRTMP_ADAPTER pAd);
5148 IN PRTMP_ADAPTER pAd,
5149 IN PMAC_TABLE_ENTRY pEntry,
5150 IN PRTMP_TX_RATE_SWITCH pTxRate);
5152 VOID MlmeSelectTxRateTable(
5153 IN PRTMP_ADAPTER pAd,
5154 IN PMAC_TABLE_ENTRY pEntry,
5156 IN PUCHAR pTableSize,
5157 IN PUCHAR pInitTxRateIdx);
5159 VOID MlmeCalculateChannelQuality(
5160 IN PRTMP_ADAPTER pAd,
5163 VOID MlmeCheckPsmChange(
5164 IN PRTMP_ADAPTER pAd,
5168 IN PRTMP_ADAPTER pAd,
5171 VOID MlmeSetTxPreamble(
5172 IN PRTMP_ADAPTER pAd,
5173 IN USHORT TxPreamble);
5175 VOID UpdateBasicRateBitmap(
5176 IN PRTMP_ADAPTER pAd);
5178 VOID MlmeUpdateTxRates(
5179 IN PRTMP_ADAPTER pAd,
5183 #ifdef DOT11_N_SUPPORT
5184 VOID MlmeUpdateHtTxRates(
5185 IN PRTMP_ADAPTER pAd,
5187 #endif // DOT11_N_SUPPORT //
5189 VOID RTMPCheckRates(
5190 IN PRTMP_ADAPTER pAd,
5191 IN OUT UCHAR SupRate[],
5192 IN OUT UCHAR *SupRateLen);
5194 #ifdef CONFIG_STA_SUPPORT
5195 BOOLEAN RTMPCheckChannel(
5196 IN PRTMP_ADAPTER pAd,
5197 IN UCHAR CentralChannel,
5199 #endif // CONFIG_STA_SUPPORT //
5201 BOOLEAN RTMPCheckHt(
5202 IN PRTMP_ADAPTER pAd,
5204 IN OUT HT_CAPABILITY_IE *pHtCapability,
5205 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5207 VOID StaQuickResponeForRateUpExec(
5208 IN PVOID SystemSpecific1,
5209 IN PVOID FunctionContext,
5210 IN PVOID SystemSpecific2,
5211 IN PVOID SystemSpecific3);
5213 VOID AsicBbpTuning1(
5214 IN PRTMP_ADAPTER pAd);
5216 VOID AsicBbpTuning2(
5217 IN PRTMP_ADAPTER pAd);
5219 VOID RTMPUpdateMlmeRate(
5220 IN PRTMP_ADAPTER pAd);
5223 IN PRTMP_ADAPTER pAd,
5228 VOID AsicEvaluateRxAnt(
5229 IN PRTMP_ADAPTER pAd);
5231 VOID AsicRxAntEvalTimeout(
5232 IN PVOID SystemSpecific1,
5233 IN PVOID FunctionContext,
5234 IN PVOID SystemSpecific2,
5235 IN PVOID SystemSpecific3);
5237 VOID APSDPeriodicExec(
5238 IN PVOID SystemSpecific1,
5239 IN PVOID FunctionContext,
5240 IN PVOID SystemSpecific2,
5241 IN PVOID SystemSpecific3);
5243 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5244 IN PRTMP_ADAPTER pAd,
5245 IN PMAC_TABLE_ENTRY pEntry);
5247 UCHAR RTMPStaFixedTxMode(
5248 IN PRTMP_ADAPTER pAd,
5249 IN PMAC_TABLE_ENTRY pEntry);
5251 VOID RTMPUpdateLegacyTxSetting(
5252 UCHAR fixed_tx_mode,
5253 PMAC_TABLE_ENTRY pEntry);
5255 BOOLEAN RTMPAutoRateSwitchCheck(
5256 IN PRTMP_ADAPTER pAd);
5258 NDIS_STATUS MlmeInit(
5259 IN PRTMP_ADAPTER pAd);
5262 IN PRTMP_ADAPTER pAd);
5265 IN PRTMP_ADAPTER pAd);
5267 VOID MlmeResetRalinkCounters(
5268 IN PRTMP_ADAPTER pAd);
5270 VOID BuildChannelList(
5271 IN PRTMP_ADAPTER pAd);
5274 IN PRTMP_ADAPTER pAd);
5277 IN PRTMP_ADAPTER pAd,
5280 VOID ChangeToCellPowerLimit(
5281 IN PRTMP_ADAPTER pAd,
5282 IN UCHAR AironetCellPowerLimit);
5285 IN PRTMP_ADAPTER pAd,
5289 IN PRTMP_ADAPTER pAd,
5293 IN PRTMP_ADAPTER pAd);
5296 IN PRTMP_ADAPTER pAd,
5301 IN PRTMP_ADAPTER pAd);
5304 IN PRTMP_ADAPTER pAd);
5307 IN PRTMP_ADAPTER pAd);
5309 USHORT RTMP_EEPROM_READ16(
5310 IN PRTMP_ADAPTER pAd,
5313 VOID RTMP_EEPROM_WRITE16(
5314 IN PRTMP_ADAPTER pAd,
5319 // Prototypes of function definition in rtmp_tkip.c
5321 VOID RTMPInitTkipEngine(
5322 IN PRTMP_ADAPTER pAd,
5331 VOID RTMPInitMICEngine(
5332 IN PRTMP_ADAPTER pAd,
5336 IN UCHAR UserPriority,
5339 BOOLEAN RTMPTkipCompareMICValue(
5340 IN PRTMP_ADAPTER pAd,
5345 IN UCHAR UserPriority,
5348 VOID RTMPCalculateMICValue(
5349 IN PRTMP_ADAPTER pAd,
5350 IN PNDIS_PACKET pPacket,
5352 IN PCIPHER_KEY pKey,
5355 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5356 IN PRTMP_ADAPTER pAd,
5364 VOID RTMPTkipAppendByte(
5365 IN PTKIP_KEY_INFO pTkip,
5368 VOID RTMPTkipAppend(
5369 IN PTKIP_KEY_INFO pTkip,
5373 VOID RTMPTkipGetMIC(
5374 IN PTKIP_KEY_INFO pTkip);
5376 BOOLEAN RTMPSoftDecryptTKIP(
5377 IN PRTMP_ADAPTER pAd,
5379 IN ULONG DataByteCnt,
5380 IN UCHAR UserPriority,
5381 IN PCIPHER_KEY pWpaKey);
5383 BOOLEAN RTMPSoftDecryptAES(
5384 IN PRTMP_ADAPTER pAd,
5386 IN ULONG DataByteCnt,
5387 IN PCIPHER_KEY pWpaKey);
5390 // Prototypes of function definition in cmm_info.c
5392 NDIS_STATUS RTMPWPARemoveKeyProc(
5393 IN PRTMP_ADAPTER pAd,
5396 VOID RTMPWPARemoveAllKeys(
5397 IN PRTMP_ADAPTER pAd);
5399 BOOLEAN RTMPCheckStrPrintAble(
5403 VOID RTMPSetPhyMode(
5404 IN PRTMP_ADAPTER pAd,
5407 VOID RTMPUpdateHTIE(
5408 IN RT_HT_CAPABILITY *pRtHt,
5410 OUT HT_CAPABILITY_IE *pHtCapability,
5411 OUT ADD_HT_INFO_IE *pAddHtInfo);
5413 VOID RTMPAddWcidAttributeEntry(
5414 IN PRTMP_ADAPTER pAd,
5418 IN MAC_TABLE_ENTRY *pEntry);
5420 CHAR *GetEncryptType(
5426 VOID RTMPIoctlGetSiteSurvey(
5427 IN PRTMP_ADAPTER pAdapter,
5428 IN struct iwreq *wrq);
5430 VOID RTMPIoctlGetMacTable(
5431 IN PRTMP_ADAPTER pAd,
5432 IN struct iwreq *wrq);
5434 VOID RTMPIndicateWPA2Status(
5435 IN PRTMP_ADAPTER pAdapter);
5437 VOID RTMPOPModeSwitching(
5438 IN PRTMP_ADAPTER pAd);
5440 #ifdef CONFIG_STA_SUPPORT
5441 VOID RTMPAddBSSIDCipher(
5442 IN PRTMP_ADAPTER pAd,
5444 IN PNDIS_802_11_KEY pKey,
5445 IN UCHAR CipherAlg);
5446 #endif // CONFIG_STA_SUPPORT //
5448 #ifdef DOT11_N_SUPPORT
5450 IN PRTMP_ADAPTER pAd,
5451 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5453 VOID RTMPSetIndividualHT(
5454 IN PRTMP_ADAPTER pAd,
5456 #endif // DOT11_N_SUPPORT //
5458 VOID RTMPSendWirelessEvent(
5459 IN PRTMP_ADAPTER pAd,
5460 IN USHORT Event_flag,
5465 VOID NICUpdateCntlCounters(
5466 IN PRTMP_ADAPTER pAd,
5467 IN PHEADER_802_11 pHeader,
5469 IN PRXWI_STRUC pRxWI);
5471 // prototype in wpa.c
5473 BOOLEAN WpaMsgTypeSubst(
5477 VOID WpaPskStateMachineInit(
5478 IN PRTMP_ADAPTER pAd,
5479 IN STATE_MACHINE *S,
5480 OUT STATE_MACHINE_FUNC Trans[]);
5482 VOID WpaEAPOLKeyAction(
5483 IN PRTMP_ADAPTER pAd,
5484 IN MLME_QUEUE_ELEM *Elem);
5486 VOID WpaPairMsg1Action(
5487 IN PRTMP_ADAPTER pAd,
5488 IN MLME_QUEUE_ELEM *Elem);
5490 VOID WpaPairMsg3Action(
5491 IN PRTMP_ADAPTER pAd,
5492 IN MLME_QUEUE_ELEM *Elem);
5494 VOID WpaGroupMsg1Action(
5495 IN PRTMP_ADAPTER pAd,
5496 IN MLME_QUEUE_ELEM *Elem);
5498 VOID WpaMacHeaderInit(
5499 IN PRTMP_ADAPTER pAd,
5500 IN OUT PHEADER_802_11 pHdr80211,
5504 VOID Wpa2PairMsg1Action(
5505 IN PRTMP_ADAPTER pAd,
5506 IN MLME_QUEUE_ELEM *Elem);
5508 VOID Wpa2PairMsg3Action(
5509 IN PRTMP_ADAPTER pAd,
5510 IN MLME_QUEUE_ELEM *Elem);
5512 BOOLEAN ParseKeyData(
5513 IN PRTMP_ADAPTER pAd,
5515 IN UCHAR KeyDataLen,
5516 IN UCHAR bPairewise);
5518 VOID RTMPToWirelessSta(
5519 IN PRTMP_ADAPTER pAd,
5520 IN PUCHAR pHeader802_3,
5524 IN BOOLEAN is4wayFrame);
5552 IN PRTMP_ADAPTER pAd,
5562 IN PRTMP_ADAPTER pAd,
5567 // prototype in aironet.c
5569 VOID AironetStateMachineInit(
5570 IN PRTMP_ADAPTER pAd,
5571 IN STATE_MACHINE *S,
5572 OUT STATE_MACHINE_FUNC Trans[]);
5574 VOID AironetMsgAction(
5575 IN PRTMP_ADAPTER pAd,
5576 IN MLME_QUEUE_ELEM *Elem);
5578 VOID AironetRequestAction(
5579 IN PRTMP_ADAPTER pAd,
5580 IN MLME_QUEUE_ELEM *Elem);
5582 VOID ChannelLoadRequestAction(
5583 IN PRTMP_ADAPTER pAd,
5586 VOID NoiseHistRequestAction(
5587 IN PRTMP_ADAPTER pAd,
5590 VOID BeaconRequestAction(
5591 IN PRTMP_ADAPTER pAd,
5594 VOID AironetReportAction(
5595 IN PRTMP_ADAPTER pAd,
5596 IN MLME_QUEUE_ELEM *Elem);
5598 VOID ChannelLoadReportAction(
5599 IN PRTMP_ADAPTER pAd,
5602 VOID NoiseHistReportAction(
5603 IN PRTMP_ADAPTER pAd,
5606 VOID AironetFinalReportAction(
5607 IN PRTMP_ADAPTER pAd);
5609 VOID BeaconReportAction(
5610 IN PRTMP_ADAPTER pAd,
5613 VOID AironetAddBeaconReport(
5614 IN PRTMP_ADAPTER pAd,
5616 IN PMLME_QUEUE_ELEM pElem);
5618 VOID AironetCreateBeaconReportFromBssTable(
5619 IN PRTMP_ADAPTER pAd);
5621 VOID DBGPRINT_TX_RING(
5622 IN PRTMP_ADAPTER pAd,
5625 VOID DBGPRINT_RX_RING(
5626 IN PRTMP_ADAPTER pAd);
5629 IN PRTMP_ADAPTER pAd,
5631 IN UCHAR RssiNumber);
5634 #ifdef DOT11N_DRAFT3
5635 VOID BuildEffectedChannelList(
5636 IN PRTMP_ADAPTER pAd);
5637 #endif // DOT11N_DRAFT3 //
5640 VOID APAsicEvaluateRxAnt(
5641 IN PRTMP_ADAPTER pAd);
5644 VOID APAsicRxAntEvalTimeout(
5645 IN PRTMP_ADAPTER pAd);
5648 // function prototype in cmm_wpa.c
5650 BOOLEAN RTMPCheckWPAframe(
5651 IN PRTMP_ADAPTER pAd,
5652 IN PMAC_TABLE_ENTRY pEntry,
5654 IN ULONG DataByteCount,
5655 IN UCHAR FromWhichBSSID);
5657 VOID AES_GTK_KEY_UNWRAP(
5659 OUT UCHAR *plaintext,
5661 IN UCHAR *ciphertext);
5663 BOOLEAN RTMPCheckRSNIE(
5664 IN PRTMP_ADAPTER pAd,
5667 IN MAC_TABLE_ENTRY *pEntry,
5670 BOOLEAN RTMPParseEapolKeyData(
5671 IN PRTMP_ADAPTER pAd,
5673 IN UCHAR KeyDataLen,
5674 IN UCHAR GroupKeyIndex,
5677 IN MAC_TABLE_ENTRY *pEntry);
5679 VOID ConstructEapolMsg(
5680 IN PRTMP_ADAPTER pAd,
5681 IN UCHAR PeerAuthMode,
5682 IN UCHAR PeerWepStatus,
5683 IN UCHAR MyGroupKeyWepStatus,
5685 IN UCHAR DefaultKeyIdx,
5686 IN UCHAR *ReplayCounter,
5693 OUT PEAPOL_PACKET pMsg);
5696 IN PRTMP_ADAPTER pAd,
5697 IN UCHAR PeerWepStatus,
5699 OUT PEAPOL_PACKET pMsg);
5701 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5702 IN PRTMP_ADAPTER pAd,
5704 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5705 IN PCIPHER_KEY pShard_key);
5707 VOID ConstructEapolKeyData(
5708 IN PRTMP_ADAPTER pAd,
5709 IN UCHAR PeerAuthMode,
5710 IN UCHAR PeerWepStatus,
5711 IN UCHAR GroupKeyWepStatus,
5713 IN UCHAR DefaultKeyIdx,
5714 IN BOOLEAN bWPA2Capable,
5719 OUT PEAPOL_PACKET pMsg);
5722 IN PRTMP_ADAPTER pAd,
5728 // function prototype in ap_wpa.c
5731 BOOLEAN APWpaMsgTypeSubst(
5735 MAC_TABLE_ENTRY *PACInquiry(
5736 IN PRTMP_ADAPTER pAd,
5739 BOOLEAN RTMPCheckMcast(
5740 IN PRTMP_ADAPTER pAd,
5741 IN PEID_STRUCT eid_ptr,
5742 IN MAC_TABLE_ENTRY *pEntry);
5744 BOOLEAN RTMPCheckUcast(
5745 IN PRTMP_ADAPTER pAd,
5746 IN PEID_STRUCT eid_ptr,
5747 IN MAC_TABLE_ENTRY *pEntry);
5749 BOOLEAN RTMPCheckAUTH(
5750 IN PRTMP_ADAPTER pAd,
5751 IN PEID_STRUCT eid_ptr,
5752 IN MAC_TABLE_ENTRY *pEntry);
5754 VOID WPAStart4WayHS(
5755 IN PRTMP_ADAPTER pAd,
5756 IN MAC_TABLE_ENTRY *pEntry,
5757 IN ULONG TimeInterval);
5759 VOID WPAStart2WayGroupHS(
5760 IN PRTMP_ADAPTER pAd,
5761 IN MAC_TABLE_ENTRY *pEntry);
5763 VOID APWpaEAPPacketAction(
5764 IN PRTMP_ADAPTER pAd,
5765 IN MLME_QUEUE_ELEM *Elem);
5767 VOID APWpaEAPOLStartAction(
5768 IN PRTMP_ADAPTER pAd,
5769 IN MLME_QUEUE_ELEM *Elem);
5771 VOID APWpaEAPOLLogoffAction(
5772 IN PRTMP_ADAPTER pAd,
5773 IN MLME_QUEUE_ELEM *Elem);
5775 VOID APWpaEAPOLKeyAction(
5776 IN PRTMP_ADAPTER pAd,
5777 IN MLME_QUEUE_ELEM *Elem);
5779 VOID APWpaEAPOLASFAlertAction(
5780 IN PRTMP_ADAPTER pAd,
5781 IN MLME_QUEUE_ELEM *Elem);
5783 VOID HandleCounterMeasure(
5784 IN PRTMP_ADAPTER pAd,
5785 IN MAC_TABLE_ENTRY *pEntry);
5787 VOID PeerPairMsg2Action(
5788 IN PRTMP_ADAPTER pAd,
5789 IN MAC_TABLE_ENTRY *pEntry,
5790 IN MLME_QUEUE_ELEM *Elem);
5792 VOID PeerPairMsg4Action(
5793 IN PRTMP_ADAPTER pAd,
5794 IN MAC_TABLE_ENTRY *pEntry,
5795 IN MLME_QUEUE_ELEM *Elem);
5798 IN PVOID SystemSpecific1,
5799 IN PVOID FunctionContext,
5800 IN PVOID SystemSpecific2,
5801 IN PVOID SystemSpecific3);
5804 IN PVOID SystemSpecific1,
5805 IN PVOID FunctionContext,
5806 IN PVOID SystemSpecific2,
5807 IN PVOID SystemSpecific3);
5809 VOID EnqueueStartForPSKExec(
5810 IN PVOID SystemSpecific1,
5811 IN PVOID FunctionContext,
5812 IN PVOID SystemSpecific2,
5813 IN PVOID SystemSpecific3);
5815 VOID RTMPHandleSTAKey(
5816 IN PRTMP_ADAPTER pAdapter,
5817 IN MAC_TABLE_ENTRY *pEntry,
5818 IN MLME_QUEUE_ELEM *Elem);
5820 VOID PeerGroupMsg2Action(
5821 IN PRTMP_ADAPTER pAd,
5822 IN PMAC_TABLE_ENTRY pEntry,
5826 VOID PairDisAssocAction(
5827 IN PRTMP_ADAPTER pAd,
5828 IN PMAC_TABLE_ENTRY pEntry,
5831 VOID MlmeDeAuthAction(
5832 IN PRTMP_ADAPTER pAd,
5833 IN PMAC_TABLE_ENTRY pEntry,
5836 VOID GREKEYPeriodicExec(
5837 IN PVOID SystemSpecific1,
5838 IN PVOID FunctionContext,
5839 IN PVOID SystemSpecific2,
5840 IN PVOID SystemSpecific3);
5862 IN PRTMP_ADAPTER pAd,
5865 VOID AES_GTK_KEY_WRAP(
5867 IN UCHAR *plaintext,
5869 OUT UCHAR *ciphertext);
5872 IN PRTMP_ADAPTER pAdapter,
5876 VOID APToWirelessSta(
5877 IN PRTMP_ADAPTER pAd,
5878 IN MAC_TABLE_ENTRY *pEntry,
5879 IN PUCHAR pHeader802_3,
5883 IN BOOLEAN bClearFrame);
5885 VOID RTMPAddPMKIDCache(
5886 IN PRTMP_ADAPTER pAd,
5892 INT RTMPSearchPMKIDCache(
5893 IN PRTMP_ADAPTER pAd,
5897 VOID RTMPDeletePMKIDCache(
5898 IN PRTMP_ADAPTER pAd,
5902 VOID RTMPMaintainPMKIDCache(
5903 IN PRTMP_ADAPTER pAd);
5905 VOID RTMPSendTriggerFrame(
5906 IN PRTMP_ADAPTER pAd,
5910 IN BOOLEAN bQosNull);
5914 VOID RTMP_SetPeriodicTimer(
5915 IN NDIS_MINIPORT_TIMER *pTimer,
5916 IN unsigned long timeout);
5918 VOID RTMP_OS_Init_Timer(
5919 IN PRTMP_ADAPTER pAd,
5920 IN NDIS_MINIPORT_TIMER *pTimer,
5921 IN TIMER_FUNCTION function,
5924 VOID RTMP_OS_Add_Timer(
5925 IN NDIS_MINIPORT_TIMER *pTimer,
5926 IN unsigned long timeout);
5928 VOID RTMP_OS_Mod_Timer(
5929 IN NDIS_MINIPORT_TIMER *pTimer,
5930 IN unsigned long timeout);
5933 VOID RTMP_OS_Del_Timer(
5934 IN NDIS_MINIPORT_TIMER *pTimer,
5935 OUT BOOLEAN *pCancelled);
5938 VOID RTMP_OS_Release_Packet(
5939 IN PRTMP_ADAPTER pAd,
5940 IN PQUEUE_ENTRY pEntry);
5945 NDIS_STATUS os_alloc_mem(
5946 IN PRTMP_ADAPTER pAd,
5950 NDIS_STATUS os_free_mem(
5951 IN PRTMP_ADAPTER pAd,
5955 void RTMP_AllocateSharedMemory(
5956 IN PRTMP_ADAPTER pAd,
5959 OUT PVOID *VirtualAddress,
5960 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5962 VOID RTMPFreeTxRxRingMemory(
5963 IN PRTMP_ADAPTER pAd);
5965 NDIS_STATUS AdapterBlockAllocateMemory(
5969 void RTMP_AllocateTxDescMemory(
5970 IN PRTMP_ADAPTER pAd,
5974 OUT PVOID *VirtualAddress,
5975 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5977 void RTMP_AllocateFirstTxBuffer(
5978 IN PRTMP_ADAPTER pAd,
5982 OUT PVOID *VirtualAddress,
5983 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5985 void RTMP_AllocateMgmtDescMemory(
5986 IN PRTMP_ADAPTER pAd,
5989 OUT PVOID *VirtualAddress,
5990 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5992 void RTMP_AllocateRxDescMemory(
5993 IN PRTMP_ADAPTER pAd,
5996 OUT PVOID *VirtualAddress,
5997 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5999 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6000 IN PRTMP_ADAPTER pAd,
6003 OUT PVOID *VirtualAddress,
6004 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6006 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6007 IN PRTMP_ADAPTER pAd,
6010 OUT PVOID *VirtualAddress);
6012 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6013 IN PRTMP_ADAPTER pAd,
6016 void RTMP_QueryPacketInfo(
6017 IN PNDIS_PACKET pPacket,
6018 OUT PACKET_INFO *pPacketInfo,
6019 OUT PUCHAR *pSrcBufVA,
6020 OUT UINT *pSrcBufLen);
6022 void RTMP_QueryNextPacketInfo(
6023 IN PNDIS_PACKET *ppPacket,
6024 OUT PACKET_INFO *pPacketInfo,
6025 OUT PUCHAR *pSrcBufVA,
6026 OUT UINT *pSrcBufLen);
6029 BOOLEAN RTMP_FillTxBlkInfo(
6030 IN RTMP_ADAPTER *pAd,
6034 PRTMP_SCATTER_GATHER_LIST
6035 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6038 void announce_802_3_packet(
6039 IN PRTMP_ADAPTER pAd,
6040 IN PNDIS_PACKET pPacket);
6043 UINT BA_Reorder_AMSDU_Annnounce(
6044 IN PRTMP_ADAPTER pAd,
6045 IN PNDIS_PACKET pPacket);
6048 UINT Handle_AMSDU_Packet(
6049 IN PRTMP_ADAPTER pAd,
6052 IN UCHAR FromWhichBSSID);
6055 void convert_802_11_to_802_3_packet(
6056 IN PRTMP_ADAPTER pAd,
6057 IN PNDIS_PACKET pPacket,
6061 IN UCHAR FromWhichBSSID);
6064 PNET_DEV get_netdev_from_bssid(
6065 IN PRTMP_ADAPTER pAd,
6066 IN UCHAR FromWhichBSSID);
6069 PNDIS_PACKET duplicate_pkt(
6070 IN PRTMP_ADAPTER pAd,
6071 IN PUCHAR pHeader802_3,
6075 IN UCHAR FromWhichBSSID);
6078 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6079 IN PRTMP_ADAPTER pAd,
6080 IN PNDIS_PACKET pOldPkt);
6082 PNDIS_PACKET duplicate_pkt_with_VLAN(
6083 IN PRTMP_ADAPTER pAd,
6084 IN PUCHAR pHeader802_3,
6088 IN UCHAR FromWhichBSSID);
6090 PNDIS_PACKET duplicate_pkt_with_WPI(
6091 IN PRTMP_ADAPTER pAd,
6092 IN PNDIS_PACKET pPacket,
6093 IN UINT32 ext_head_len,
6094 IN UINT32 ext_tail_len);
6096 UCHAR VLAN_8023_Header_Copy(
6097 IN PRTMP_ADAPTER pAd,
6098 IN PUCHAR pHeader802_3,
6101 IN UCHAR FromWhichBSSID);
6103 #ifdef DOT11_N_SUPPORT
6104 void ba_flush_reordering_timeout_mpdus(
6105 IN PRTMP_ADAPTER pAd,
6106 IN PBA_REC_ENTRY pBAEntry,
6110 VOID BAOriSessionSetUp(
6111 IN PRTMP_ADAPTER pAd,
6112 IN MAC_TABLE_ENTRY *pEntry,
6116 IN BOOLEAN isForced);
6118 VOID BASessionTearDownALL(
6119 IN OUT PRTMP_ADAPTER pAd,
6121 #endif // DOT11_N_SUPPORT //
6123 BOOLEAN OS_Need_Clone_Packet(void);
6126 VOID build_tx_packet(
6127 IN PRTMP_ADAPTER pAd,
6128 IN PNDIS_PACKET pPacket,
6133 VOID BAOriSessionTearDown(
6134 IN OUT PRTMP_ADAPTER pAd,
6137 IN BOOLEAN bPassive,
6138 IN BOOLEAN bForceSend);
6140 VOID BARecSessionTearDown(
6141 IN OUT PRTMP_ADAPTER pAd,
6144 IN BOOLEAN bPassive);
6146 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6147 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6149 ULONG AutoChBssInsertEntry(
6150 IN PRTMP_ADAPTER pAd,
6157 void AutoChBssTableInit(
6158 IN PRTMP_ADAPTER pAd);
6160 void ChannelInfoInit(
6161 IN PRTMP_ADAPTER pAd);
6163 void AutoChBssTableDestroy(
6164 IN PRTMP_ADAPTER pAd);
6166 void ChannelInfoDestroy(
6167 IN PRTMP_ADAPTER pAd);
6169 UCHAR New_ApAutoSelectChannel(
6170 IN PRTMP_ADAPTER pAd);
6172 BOOLEAN rtstrmactohex(
6176 BOOLEAN rtstrcasecmp(
6180 char *rtstrstruncasecmp(
6186 IN const char * s2);
6190 IN const char * ct);
6194 unsigned int *addr);
6196 ////////// common ioctl functions //////////
6197 INT Set_DriverVersion_Proc(
6198 IN PRTMP_ADAPTER pAd,
6201 INT Set_CountryRegion_Proc(
6202 IN PRTMP_ADAPTER pAd,
6205 INT Set_CountryRegionABand_Proc(
6206 IN PRTMP_ADAPTER pAd,
6209 INT Set_WirelessMode_Proc(
6210 IN PRTMP_ADAPTER pAd,
6213 INT Set_Channel_Proc(
6214 IN PRTMP_ADAPTER pAd,
6217 INT Set_ShortSlot_Proc(
6218 IN PRTMP_ADAPTER pAd,
6221 INT Set_TxPower_Proc(
6222 IN PRTMP_ADAPTER pAd,
6225 INT Set_BGProtection_Proc(
6226 IN PRTMP_ADAPTER pAd,
6229 INT Set_TxPreamble_Proc(
6230 IN PRTMP_ADAPTER pAd,
6233 INT Set_RTSThreshold_Proc(
6234 IN PRTMP_ADAPTER pAd,
6237 INT Set_FragThreshold_Proc(
6238 IN PRTMP_ADAPTER pAd,
6241 INT Set_TxBurst_Proc(
6242 IN PRTMP_ADAPTER pAd,
6245 #ifdef AGGREGATION_SUPPORT
6246 INT Set_PktAggregate_Proc(
6247 IN PRTMP_ADAPTER pAd,
6251 INT Set_IEEE80211H_Proc(
6252 IN PRTMP_ADAPTER pAd,
6257 IN PRTMP_ADAPTER pAd,
6261 INT Show_DescInfo_Proc(
6262 IN PRTMP_ADAPTER pAd,
6265 INT Set_ResetStatCounter_Proc(
6266 IN PRTMP_ADAPTER pAd,
6269 #ifdef DOT11_N_SUPPORT
6270 INT Set_BASetup_Proc(
6271 IN PRTMP_ADAPTER pAd,
6274 INT Set_BADecline_Proc(
6275 IN PRTMP_ADAPTER pAd,
6278 INT Set_BAOriTearDown_Proc(
6279 IN PRTMP_ADAPTER pAd,
6282 INT Set_BARecTearDown_Proc(
6283 IN PRTMP_ADAPTER pAd,
6287 IN PRTMP_ADAPTER pAd,
6291 IN PRTMP_ADAPTER pAd,
6295 IN PRTMP_ADAPTER pAd,
6298 INT Set_HtOpMode_Proc(
6299 IN PRTMP_ADAPTER pAd,
6302 INT Set_HtStbc_Proc(
6303 IN PRTMP_ADAPTER pAd,
6307 IN PRTMP_ADAPTER pAd,
6310 INT Set_HtExtcha_Proc(
6311 IN PRTMP_ADAPTER pAd,
6314 INT Set_HtMpduDensity_Proc(
6315 IN PRTMP_ADAPTER pAd,
6318 INT Set_HtBaWinSize_Proc(
6319 IN PRTMP_ADAPTER pAd,
6323 IN PRTMP_ADAPTER pAd,
6326 INT Set_HtLinkAdapt_Proc(
6327 IN PRTMP_ADAPTER pAd,
6330 INT Set_HtAmsdu_Proc(
6331 IN PRTMP_ADAPTER pAd,
6334 INT Set_HtAutoBa_Proc(
6335 IN PRTMP_ADAPTER pAd,
6338 INT Set_HtProtect_Proc(
6339 IN PRTMP_ADAPTER pAd,
6342 INT Set_HtMimoPs_Proc(
6343 IN PRTMP_ADAPTER pAd,
6347 INT Set_ForceShortGI_Proc(
6348 IN PRTMP_ADAPTER pAd,
6351 INT Set_ForceGF_Proc(
6352 IN PRTMP_ADAPTER pAd,
6356 IN PRTMP_ADAPTER pAd);
6358 INT Set_SendPSMPAction_Proc(
6359 IN PRTMP_ADAPTER pAd,
6362 INT Set_HtMIMOPSmode_Proc(
6363 IN PRTMP_ADAPTER pAd,
6367 INT Set_HtTxBASize_Proc(
6368 IN PRTMP_ADAPTER pAd,
6370 #endif // DOT11_N_SUPPORT //
6374 #ifdef CONFIG_STA_SUPPORT
6376 VOID RTMPSendDLSTearDownFrame(
6377 IN PRTMP_ADAPTER pAd,
6380 #ifdef DOT11_N_SUPPORT
6383 IN PRTMP_ADAPTER pAd,
6384 OUT PQUERYBA_TABLE pBAT);
6385 #endif // DOT11_N_SUPPORT //
6387 #ifdef WPA_SUPPLICANT_SUPPORT
6388 INT WpaCheckEapCode(
6389 IN PRTMP_ADAPTER pAd,
6394 VOID WpaSendMicFailureToWpaSupplicant(
6395 IN PRTMP_ADAPTER pAd,
6396 IN BOOLEAN bUnicast);
6398 VOID SendAssocIEsToWpaSupplicant(
6399 IN PRTMP_ADAPTER pAd);
6400 #endif // WPA_SUPPLICANT_SUPPORT //
6402 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6403 int wext_notify_event_assoc(
6404 IN RTMP_ADAPTER *pAd);
6405 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6407 #endif // CONFIG_STA_SUPPORT //
6411 #ifdef DOT11_N_SUPPORT
6412 VOID Handle_BSS_Width_Trigger_Events(
6413 IN PRTMP_ADAPTER pAd);
6415 void build_ext_channel_switch_ie(
6416 IN PRTMP_ADAPTER pAd,
6417 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6418 #endif // DOT11_N_SUPPORT //
6421 BOOLEAN APRxDoneInterruptHandle(
6422 IN PRTMP_ADAPTER pAd);
6424 BOOLEAN STARxDoneInterruptHandle(
6425 IN PRTMP_ADAPTER pAd,
6428 #ifdef DOT11_N_SUPPORT
6429 // AMPDU packet indication
6430 VOID Indicate_AMPDU_Packet(
6431 IN PRTMP_ADAPTER pAd,
6433 IN UCHAR FromWhichBSSID);
6435 // AMSDU packet indication
6436 VOID Indicate_AMSDU_Packet(
6437 IN PRTMP_ADAPTER pAd,
6439 IN UCHAR FromWhichBSSID);
6440 #endif // DOT11_N_SUPPORT //
6442 // Normal legacy Rx packet indication
6443 VOID Indicate_Legacy_Packet(
6444 IN PRTMP_ADAPTER pAd,
6446 IN UCHAR FromWhichBSSID);
6448 VOID Indicate_EAPOL_Packet(
6449 IN PRTMP_ADAPTER pAd,
6451 IN UCHAR FromWhichBSSID);
6453 void update_os_packet_info(
6454 IN PRTMP_ADAPTER pAd,
6456 IN UCHAR FromWhichBSSID);
6458 void wlan_802_11_to_802_3_packet(
6459 IN PRTMP_ADAPTER pAd,
6461 IN PUCHAR pHeader802_3,
6462 IN UCHAR FromWhichBSSID);
6464 UINT deaggregate_AMSDU_announce(
6465 IN PRTMP_ADAPTER pAd,
6466 PNDIS_PACKET pPacket,
6471 #ifdef CONFIG_STA_SUPPORT
6472 // remove LLC and get 802_3 Header
6473 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6475 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6477 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6479 _pDA = _pRxBlk->pHeader->Addr3; \
6480 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6484 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6486 _pDA = _pRxBlk->pHeader->Addr1; \
6487 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6488 _pSA = _pRxBlk->pHeader->Addr2; \
6490 _pSA = _pRxBlk->pHeader->Addr3; \
6494 _pDA = _pRxBlk->pHeader->Addr1; \
6495 _pSA = _pRxBlk->pHeader->Addr2; \
6499 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6500 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6502 #endif // CONFIG_STA_SUPPORT //
6505 BOOLEAN APFowardWirelessStaToWirelessSta(
6506 IN PRTMP_ADAPTER pAd,
6507 IN PNDIS_PACKET pPacket,
6508 IN ULONG FromWhichBSSID);
6510 VOID Announce_or_Forward_802_3_Packet(
6511 IN PRTMP_ADAPTER pAd,
6512 IN PNDIS_PACKET pPacket,
6513 IN UCHAR FromWhichBSSID);
6515 VOID Sta_Announce_or_Forward_802_3_Packet(
6516 IN PRTMP_ADAPTER pAd,
6517 IN PNDIS_PACKET pPacket,
6518 IN UCHAR FromWhichBSSID);
6521 #ifdef CONFIG_STA_SUPPORT
6522 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6523 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6524 //announce_802_3_packet(_pAd, _pPacket);
6525 #endif // CONFIG_STA_SUPPORT //
6528 PNDIS_PACKET DuplicatePacket(
6529 IN PRTMP_ADAPTER pAd,
6530 IN PNDIS_PACKET pPacket,
6531 IN UCHAR FromWhichBSSID);
6534 PNDIS_PACKET ClonePacket(
6535 IN PRTMP_ADAPTER pAd,
6536 IN PNDIS_PACKET pPacket,
6541 // Normal, AMPDU or AMSDU
6542 VOID CmmRxnonRalinkFrameIndicate(
6543 IN PRTMP_ADAPTER pAd,
6545 IN UCHAR FromWhichBSSID);
6547 VOID CmmRxRalinkFrameIndicate(
6548 IN PRTMP_ADAPTER pAd,
6549 IN MAC_TABLE_ENTRY *pEntry,
6551 IN UCHAR FromWhichBSSID);
6553 VOID Update_Rssi_Sample(
6554 IN PRTMP_ADAPTER pAd,
6555 IN RSSI_SAMPLE *pRssi,
6556 IN PRXWI_STRUC pRxWI);
6558 PNDIS_PACKET GetPacketFromRxRing(
6559 IN PRTMP_ADAPTER pAd,
6560 OUT PRT28XX_RXD_STRUC pSaveRxD,
6561 OUT BOOLEAN *pbReschedule,
6562 IN OUT UINT32 *pRxPending);
6564 PNDIS_PACKET RTMPDeFragmentDataFrame(
6565 IN PRTMP_ADAPTER pAd,
6568 ////////////////////////////////////////
6576 typedef struct _DefaultKeyIdxValue
6580 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6584 #ifdef CONFIG_STA_SUPPORT
6586 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6587 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6588 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6589 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6590 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6591 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6592 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6593 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6594 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6595 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6596 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6599 P80211ENUM_msgitem_status_no_value = 0x00
6602 P80211ENUM_truth_false = 0x00,
6603 P80211ENUM_truth_true = 0x01
6606 /* Definition from madwifi */
6612 } p80211item_uint32_t;
6617 #define WLAN_DEVNAMELEN_MAX 16
6618 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6619 p80211item_uint32_t hosttime;
6620 p80211item_uint32_t mactime;
6621 p80211item_uint32_t channel;
6622 p80211item_uint32_t rssi;
6623 p80211item_uint32_t sq;
6624 p80211item_uint32_t signal;
6625 p80211item_uint32_t noise;
6626 p80211item_uint32_t rate;
6627 p80211item_uint32_t istx;
6628 p80211item_uint32_t frmlen;
6629 } wlan_ng_prism2_header;
6631 /* The radio capture header precedes the 802.11 header. */
6632 typedef struct PACKED _ieee80211_radiotap_header {
6633 UINT8 it_version; /* Version 0. Only increases
6634 * for drastic changes,
6635 * introduction of compatible
6636 * new fields does not count.
6639 UINT16 it_len; /* length of the whole
6640 * header in bytes, including
6641 * it_version, it_pad,
6642 * it_len, and data fields.
6644 UINT32 it_present; /* A bitmap telling which
6645 * fields are present. Set bit 31
6646 * (0x80000000) to extend the
6647 * bitmap by another 32 bits.
6648 * Additional extensions are made
6649 * by setting bit 31.
6651 }ieee80211_radiotap_header ;
6653 enum ieee80211_radiotap_type {
6654 IEEE80211_RADIOTAP_TSFT = 0,
6655 IEEE80211_RADIOTAP_FLAGS = 1,
6656 IEEE80211_RADIOTAP_RATE = 2,
6657 IEEE80211_RADIOTAP_CHANNEL = 3,
6658 IEEE80211_RADIOTAP_FHSS = 4,
6659 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6660 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6661 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6662 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6663 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6664 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6665 IEEE80211_RADIOTAP_ANTENNA = 11,
6666 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6667 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6670 #define WLAN_RADIOTAP_PRESENT ( \
6671 (1 << IEEE80211_RADIOTAP_TSFT) | \
6672 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6673 (1 << IEEE80211_RADIOTAP_RATE) | \
6676 typedef struct _wlan_radiotap_header {
6677 ieee80211_radiotap_header wt_ihdr;
6681 } wlan_radiotap_header;
6682 /* Definition from madwifi */
6684 void send_monitor_packets(
6685 IN PRTMP_ADAPTER pAd,
6688 #if WIRELESS_EXT >= 12
6689 // This function will be called when query /proc
6690 struct iw_statistics *rt28xx_get_wireless_stats(
6691 IN struct net_device *net_dev);
6694 VOID RTMPSetDesiredRates(
6695 IN PRTMP_ADAPTER pAdapter,
6697 #endif // CONFIG_STA_SUPPORT //
6699 INT Set_FixedTxMode_Proc(
6700 IN PRTMP_ADAPTER pAd,
6703 static inline char* GetPhyMode(
6713 #ifdef DOT11_N_SUPPORT
6717 case MODE_HTGREENFIELD:
6719 #endif // DOT11_N_SUPPORT //
6726 static inline char* GetBW(
6736 #ifdef DOT11_N_SUPPORT
6739 #endif // DOT11_N_SUPPORT //
6746 VOID RT28xxThreadTerminate(
6747 IN RTMP_ADAPTER *pAd);
6749 BOOLEAN RT28XXChipsetCheck(
6752 BOOLEAN RT28XXNetDevInit(
6754 IN struct net_device *net_dev,
6755 IN RTMP_ADAPTER *pAd);
6757 BOOLEAN RT28XXProbePostConfig(
6759 IN RTMP_ADAPTER *pAd,
6762 VOID RT28XXDMADisable(
6763 IN RTMP_ADAPTER *pAd);
6765 VOID RT28XXDMAEnable(
6766 IN RTMP_ADAPTER *pAd);
6768 VOID RT28xx_UpdateBeaconToAsic(
6769 IN RTMP_ADAPTER * pAd,
6772 IN ULONG UpdatePos);
6775 IN struct net_device *net_dev,
6776 IN OUT struct ifreq *rq,
6780 #ifdef CONFIG_STA_SUPPORT
6781 INT rt28xx_sta_ioctl(
6782 IN struct net_device *net_dev,
6783 IN OUT struct ifreq *rq,
6785 #endif // CONFIG_STA_SUPPORT //
6787 BOOLEAN RT28XXSecurityKeyAdd(
6788 IN PRTMP_ADAPTER pAd,
6791 IN MAC_TABLE_ENTRY *pEntry);
6793 ////////////////////////////////////////
6794 PNDIS_PACKET GetPacketFromRxRing(
6795 IN PRTMP_ADAPTER pAd,
6796 OUT PRT28XX_RXD_STRUC pSaveRxD,
6797 OUT BOOLEAN *pbReschedule,
6798 IN OUT UINT32 *pRxPending);
6801 void kill_thread_task(PRTMP_ADAPTER pAd);
6803 void tbtt_tasklet(unsigned long data);
6806 // Function Prototype in cmm_data_2860.c
6808 USHORT RtmpPCI_WriteTxResource(
6809 IN PRTMP_ADAPTER pAd,
6812 OUT USHORT *FreeNumber);
6814 USHORT RtmpPCI_WriteSingleTxResource(
6815 IN PRTMP_ADAPTER pAd,
6818 OUT USHORT *FreeNumber);
6820 USHORT RtmpPCI_WriteMultiTxResource(
6821 IN PRTMP_ADAPTER pAd,
6824 OUT USHORT *FreeNumber);
6826 USHORT RtmpPCI_WriteFragTxResource(
6827 IN PRTMP_ADAPTER pAd,
6830 OUT USHORT *FreeNumber);
6832 USHORT RtmpPCI_WriteSubTxResource(
6833 IN PRTMP_ADAPTER pAd,
6836 OUT USHORT *FreeNumber);
6838 VOID RtmpPCI_FinalWriteTxResource(
6839 IN PRTMP_ADAPTER pAd,
6841 IN USHORT totalMPDUSize,
6842 IN USHORT FirstTxIdx);
6844 VOID RtmpPCIDataLastTxIdx(
6845 IN PRTMP_ADAPTER pAd,
6847 IN USHORT LastTxIdx);
6849 VOID RtmpPCIDataKickOut(
6850 IN PRTMP_ADAPTER pAd,
6855 int RtmpPCIMgmtKickOut(
6856 IN RTMP_ADAPTER *pAd,
6858 IN PNDIS_PACKET pPacket,
6859 IN PUCHAR pSrcBufVA,
6863 NDIS_STATUS RTMPCheckRxError(
6864 IN PRTMP_ADAPTER pAd,
6865 IN PHEADER_802_11 pHeader,
6866 IN PRXWI_STRUC pRxWI,
6867 IN PRT28XX_RXD_STRUC pRxD);
6869 #ifdef CONFIG_STA_SUPPORT
6870 VOID RTMPInitPCIeLinkCtrlValue(
6871 IN PRTMP_ADAPTER pAd);
6873 VOID RTMPFindHostPCIDev(
6874 IN PRTMP_ADAPTER pAd);
6876 VOID RTMPPCIeLinkCtrlValueRestore(
6877 IN PRTMP_ADAPTER pAd,
6880 VOID RTMPPCIeLinkCtrlSetting(
6881 IN PRTMP_ADAPTER pAd,
6884 VOID RT28xxPciAsicRadioOff(
6885 IN PRTMP_ADAPTER pAd,
6887 IN USHORT TbttNumToNextWakeUp);
6889 BOOLEAN RT28xxPciAsicRadioOn(
6890 IN PRTMP_ADAPTER pAd,
6893 VOID RT28xxPciStaAsicForceWakeup(
6894 IN PRTMP_ADAPTER pAd,
6897 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6898 IN PRTMP_ADAPTER pAd,
6899 IN USHORT TbttNumToNextWakeUp);
6901 VOID PsPollWakeExec(
6902 IN PVOID SystemSpecific1,
6903 IN PVOID FunctionContext,
6904 IN PVOID SystemSpecific2,
6905 IN PVOID SystemSpecific3);
6908 IN PVOID SystemSpecific1,
6909 IN PVOID FunctionContext,
6910 IN PVOID SystemSpecific2,
6911 IN PVOID SystemSpecific3);
6912 #endif // CONFIG_STA_SUPPORT //
6914 VOID RT28xxPciMlmeRadioOn(
6915 IN PRTMP_ADAPTER pAd);
6917 VOID RT28xxPciMlmeRadioOFF(
6918 IN PRTMP_ADAPTER pAd);
6920 VOID AsicTurnOffRFClk(
6921 IN PRTMP_ADAPTER pAd,
6924 VOID AsicTurnOnRFClk(
6925 IN PRTMP_ADAPTER pAd,
6929 ////////////////////////////////////////
6932 IN RTMP_ADAPTER *pAd);
6934 UINT32 QBSS_LoadElementAppend(
6935 IN RTMP_ADAPTER *pAd,
6938 VOID QBSS_LoadUpdate(
6939 IN RTMP_ADAPTER *pAd);
6941 ///////////////////////////////////////
6942 INT RTMPShowCfgValue(
6943 IN PRTMP_ADAPTER pAd,
6947 PCHAR RTMPGetRalinkAuthModeStr(
6948 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6950 PCHAR RTMPGetRalinkEncryModeStr(
6951 IN USHORT encryMode);
6952 //////////////////////////////////////
6954 #ifdef CONFIG_STA_SUPPORT
6955 VOID AsicStaBbpTuning(
6956 IN PRTMP_ADAPTER pAd);
6958 VOID AsicResetFromDMABusy(
6959 IN PRTMP_ADAPTER pAd);
6962 IN PRTMP_ADAPTER pAd);
6965 IN PRTMP_ADAPTER pAd);
6968 IN PRTMP_ADAPTER pAd);
6969 #endif // CONFIG_STA_SUPPORT //
6971 void RTMP_IndicateMediaState(
6972 IN PRTMP_ADAPTER pAd);
6974 VOID ReSyncBeaconTime(
6975 IN PRTMP_ADAPTER pAd);
6977 VOID RTMPSetAGCInitValue(
6978 IN PRTMP_ADAPTER pAd,
6979 IN UCHAR BandWidth);
6981 int rt28xx_close(IN PNET_DEV dev);
6982 int rt28xx_open(IN PNET_DEV dev);
6984 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6986 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6987 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6989 if (VIRTUAL_IF_NUM(pAd) == 0)
6991 if (rt28xx_open(pAd->net_dev) != 0)
6997 VIRTUAL_IF_INC(pAd);
7001 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7003 VIRTUAL_IF_DEC(pAd);
7004 if (VIRTUAL_IF_NUM(pAd) == 0)
7005 rt28xx_close(pAd->net_dev);
7010 #endif // __RTMP_H__