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)
187 typedef struct _ATE_INFO {
193 TXWI_STRUC TxWI; // TXWI
195 UCHAR Addr1[MAC_ADDR_LEN];
196 UCHAR Addr2[MAC_ADDR_LEN];
197 UCHAR Addr3[MAC_ADDR_LEN];
201 UINT32 TxDoneCount; // Tx DMA Done
204 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
205 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
206 BOOLEAN bFWLoading; // Reload firmware when ATE is done.
210 CHAR LastSNR0; // last received SNR
211 CHAR LastSNR1; // last received SNR for 2nd antenna
212 CHAR LastRssi0; // last received RSSI
213 CHAR LastRssi1; // last received RSSI for 2nd antenna
214 CHAR LastRssi2; // last received RSSI for 3rd antenna
215 CHAR AvgRssi0; // last 8 frames' average RSSI
216 CHAR AvgRssi1; // last 8 frames' average RSSI
217 CHAR AvgRssi2; // last 8 frames' average RSSI
218 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
219 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
220 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
222 UINT32 NumOfAvgRssiSample;
224 #ifdef RALINK_28xx_QA
226 USHORT HLen; // Header Length
227 USHORT PLen; // Pattern Length
228 UCHAR Header[32]; // Header buffer
229 UCHAR Pattern[32]; // Pattern buffer
230 USHORT DLen; // Data Length
251 //UINT32 Repeat; // Tx Cpu count
252 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
253 #endif // RALINK_28xx_QA //
254 } ATE_INFO, *PATE_INFO;
256 #ifdef RALINK_28xx_QA
257 struct ate_racfghdr {
265 } __attribute__((packed));
266 #endif // RALINK_28xx_QA //
267 #endif // RALINK_ATE //
269 #ifdef DOT11_N_SUPPORT
270 struct reordering_mpdu
272 struct reordering_mpdu *next;
273 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
274 int Sequence; /* sequence number of MPDU */
278 struct reordering_list
280 struct reordering_mpdu *next;
284 struct reordering_mpdu_pool
288 struct reordering_list freelist;
290 #endif // DOT11_N_SUPPORT //
292 typedef struct _RSSI_SAMPLE {
293 CHAR LastRssi0; // last received RSSI
294 CHAR LastRssi1; // last received RSSI
295 CHAR LastRssi2; // last received RSSI
305 // Queue structure and macros
307 typedef struct _QUEUE_ENTRY {
308 struct _QUEUE_ENTRY *Next;
309 } QUEUE_ENTRY, *PQUEUE_ENTRY;
312 typedef struct _QUEUE_HEADER {
316 } QUEUE_HEADER, *PQUEUE_HEADER;
318 #define InitializeQueueHeader(QueueHeader) \
320 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
321 (QueueHeader)->Number = 0; \
324 #define RemoveHeadQueue(QueueHeader) \
325 (QueueHeader)->Head; \
327 PQUEUE_ENTRY pNext; \
328 if ((QueueHeader)->Head != NULL) \
330 pNext = (QueueHeader)->Head->Next; \
331 (QueueHeader)->Head = pNext; \
333 (QueueHeader)->Tail = NULL; \
334 (QueueHeader)->Number--; \
338 #define InsertHeadQueue(QueueHeader, QueueEntry) \
340 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
341 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
342 if ((QueueHeader)->Tail == NULL) \
343 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
344 (QueueHeader)->Number++; \
347 #define InsertTailQueue(QueueHeader, QueueEntry) \
349 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
350 if ((QueueHeader)->Tail) \
351 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
353 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
354 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
355 (QueueHeader)->Number++; \
359 // Macros for flag and ref count operations
361 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
362 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
363 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
364 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
365 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
367 // Macro for power save flag.
368 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
369 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
370 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
371 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
372 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
374 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
375 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
376 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
378 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
379 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
380 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
382 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
383 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
384 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
386 #ifdef CONFIG_STA_SUPPORT
387 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
388 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
389 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
390 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
392 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
393 #endif // CONFIG_STA_SUPPORT //
395 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
396 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
399 #define INC_RING_INDEX(_idx, _RingSize) \
401 (_idx) = (_idx+1) % (_RingSize); \
404 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
406 #define RING_PACKET_INIT(_TxRing, _idx) \
408 _TxRing->Cell[_idx].pNdisPacket = NULL; \
409 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
412 #define TXDT_INIT(_TxD) \
414 NdisZeroMemory(_TxD, TXD_SIZE); \
418 //Set last data segment
419 #define RING_SET_LASTDS(_TxD, _IsSD0) \
421 if (_IsSD0) {_TxD->LastSec0 = 1;} \
422 else {_TxD->LastSec1 = 1;} \
425 // Increase TxTsc value for next transmission
427 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
428 // Should send a special event microsoft defined to request re-key
429 #define INC_TX_TSC(_tsc) \
432 while (++_tsc[i] == 0x0) \
440 #ifdef DOT11_N_SUPPORT
441 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
442 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
444 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
445 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
446 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
447 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
448 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
449 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
450 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
451 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
452 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
453 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
454 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
455 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
458 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
460 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
461 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
462 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
464 #endif // DOT11_N_SUPPORT //
467 // MACRO for 32-bit PCI register read / write
469 // Usage : RTMP_IO_READ32(
470 // PRTMP_ADAPTER pAd,
471 // ULONG Register_Offset,
475 // PRTMP_ADAPTER pAd,
476 // ULONG Register_Offset,
481 // BBP & RF are using indirect access. Before write any value into it.
482 // We have to make sure there is no outstanding command pending via checking busy bit.
484 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
486 #define RTMP_RF_IO_WRITE32(_A, _V) \
488 PHY_CSR4_STRUC Value; \
490 if ((_A)->bPCIclkOff) \
495 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
496 if (Value.field.Busy == IDLE) \
499 } while (BusyCnt < MAX_BUSY_COUNT); \
500 if (BusyCnt < MAX_BUSY_COUNT) \
502 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
506 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
508 BBP_CSR_CFG_STRUC BbpCsr; \
510 for (i=0; i<MAX_BUSY_COUNT; i++) \
512 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
513 if (BbpCsr.field.Busy == BUSY) \
518 BbpCsr.field.fRead = 1; \
519 BbpCsr.field.BBP_RW_MODE = 1; \
520 BbpCsr.field.Busy = 1; \
521 BbpCsr.field.RegNum = _I; \
522 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
523 for (k=0; k<MAX_BUSY_COUNT; k++) \
525 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
526 if (BbpCsr.field.Busy == IDLE) \
529 if ((BbpCsr.field.Busy == IDLE) && \
530 (BbpCsr.field.RegNum == _I)) \
532 *(_pV) = (UCHAR)BbpCsr.field.Value; \
536 if (BbpCsr.field.Busy == BUSY) \
538 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
539 *(_pV) = (_A)->BbpWriteLatch[_I]; \
543 //#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
544 // Read BBP register by register's ID. Generate PER to test BA
545 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
547 BBP_CSR_CFG_STRUC BbpCsr; \
549 if ((_A)->bPCIclkOff == FALSE) \
551 for (i=0; i<MAX_BUSY_COUNT; i++) \
553 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
554 if (BbpCsr.field.Busy == BUSY) \
559 BbpCsr.field.fRead = 1; \
560 BbpCsr.field.BBP_RW_MODE = 1; \
561 BbpCsr.field.Busy = 1; \
562 BbpCsr.field.RegNum = _I; \
563 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
564 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
565 RTMPusecDelay(1000); \
566 for (k=0; k<MAX_BUSY_COUNT; k++) \
568 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
569 if (BbpCsr.field.Busy == IDLE) \
572 if ((BbpCsr.field.Busy == IDLE) && \
573 (BbpCsr.field.RegNum == _I)) \
575 *(_pV) = (UCHAR)BbpCsr.field.Value; \
579 if (BbpCsr.field.Busy == BUSY) \
581 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
582 *(_pV) = (_A)->BbpWriteLatch[_I]; \
583 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
584 BbpCsr.field.Busy = 0; \
585 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
590 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
592 BBP_CSR_CFG_STRUC BbpCsr; \
594 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
596 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
597 if (BbpCsr.field.Busy == BUSY) \
600 BbpCsr.field.fRead = 0; \
601 BbpCsr.field.BBP_RW_MODE = 1; \
602 BbpCsr.field.Busy = 1; \
603 BbpCsr.field.Value = _V; \
604 BbpCsr.field.RegNum = _I; \
605 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
606 (_A)->BbpWriteLatch[_I] = _V; \
609 if (BusyCnt == MAX_BUSY_COUNT) \
611 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
615 // Write BBP register by register's ID & value
616 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
618 BBP_CSR_CFG_STRUC BbpCsr; \
620 if ((_A)->bPCIclkOff == FALSE) \
622 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
624 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
625 if (BbpCsr.field.Busy == BUSY) \
628 BbpCsr.field.fRead = 0; \
629 BbpCsr.field.BBP_RW_MODE = 1; \
630 BbpCsr.field.Busy = 1; \
631 BbpCsr.field.Value = _V; \
632 BbpCsr.field.RegNum = _I; \
633 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
634 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
635 if (_A->OpMode == OPMODE_AP) \
636 RTMPusecDelay(1000); \
637 (_A)->BbpWriteLatch[_I] = _V; \
640 if (BusyCnt == MAX_BUSY_COUNT) \
642 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
643 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
644 BbpCsr.field.Busy = 0; \
645 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
651 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
654 case 1: khz = 2412000; break; \
655 case 2: khz = 2417000; break; \
656 case 3: khz = 2422000; break; \
657 case 4: khz = 2427000; break; \
658 case 5: khz = 2432000; break; \
659 case 6: khz = 2437000; break; \
660 case 7: khz = 2442000; break; \
661 case 8: khz = 2447000; break; \
662 case 9: khz = 2452000; break; \
663 case 10: khz = 2457000; break; \
664 case 11: khz = 2462000; break; \
665 case 12: khz = 2467000; break; \
666 case 13: khz = 2472000; break; \
667 case 14: khz = 2484000; break; \
668 case 36: /* UNII */ khz = 5180000; break; \
669 case 40: /* UNII */ khz = 5200000; break; \
670 case 44: /* UNII */ khz = 5220000; break; \
671 case 48: /* UNII */ khz = 5240000; break; \
672 case 52: /* UNII */ khz = 5260000; break; \
673 case 56: /* UNII */ khz = 5280000; break; \
674 case 60: /* UNII */ khz = 5300000; break; \
675 case 64: /* UNII */ khz = 5320000; break; \
676 case 149: /* UNII */ khz = 5745000; break; \
677 case 153: /* UNII */ khz = 5765000; break; \
678 case 157: /* UNII */ khz = 5785000; break; \
679 case 161: /* UNII */ khz = 5805000; break; \
680 case 165: /* UNII */ khz = 5825000; break; \
681 case 100: /* HiperLAN2 */ khz = 5500000; break; \
682 case 104: /* HiperLAN2 */ khz = 5520000; break; \
683 case 108: /* HiperLAN2 */ khz = 5540000; break; \
684 case 112: /* HiperLAN2 */ khz = 5560000; break; \
685 case 116: /* HiperLAN2 */ khz = 5580000; break; \
686 case 120: /* HiperLAN2 */ khz = 5600000; break; \
687 case 124: /* HiperLAN2 */ khz = 5620000; break; \
688 case 128: /* HiperLAN2 */ khz = 5640000; break; \
689 case 132: /* HiperLAN2 */ khz = 5660000; break; \
690 case 136: /* HiperLAN2 */ khz = 5680000; break; \
691 case 140: /* HiperLAN2 */ khz = 5700000; break; \
692 case 34: /* Japan MMAC */ khz = 5170000; break; \
693 case 38: /* Japan MMAC */ khz = 5190000; break; \
694 case 42: /* Japan MMAC */ khz = 5210000; break; \
695 case 46: /* Japan MMAC */ khz = 5230000; break; \
696 case 184: /* Japan */ khz = 4920000; break; \
697 case 188: /* Japan */ khz = 4940000; break; \
698 case 192: /* Japan */ khz = 4960000; break; \
699 case 196: /* Japan */ khz = 4980000; break; \
700 case 208: /* Japan, means J08 */ khz = 5040000; break; \
701 case 212: /* Japan, means J12 */ khz = 5060000; break; \
702 case 216: /* Japan, means J16 */ khz = 5080000; break; \
703 default: khz = 2412000; break; \
707 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
710 case 2412000: ch = 1; break; \
711 case 2417000: ch = 2; break; \
712 case 2422000: ch = 3; break; \
713 case 2427000: ch = 4; break; \
714 case 2432000: ch = 5; break; \
715 case 2437000: ch = 6; break; \
716 case 2442000: ch = 7; break; \
717 case 2447000: ch = 8; break; \
718 case 2452000: ch = 9; break; \
719 case 2457000: ch = 10; break; \
720 case 2462000: ch = 11; break; \
721 case 2467000: ch = 12; break; \
722 case 2472000: ch = 13; break; \
723 case 2484000: ch = 14; break; \
724 case 5180000: ch = 36; /* UNII */ break; \
725 case 5200000: ch = 40; /* UNII */ break; \
726 case 5220000: ch = 44; /* UNII */ break; \
727 case 5240000: ch = 48; /* UNII */ break; \
728 case 5260000: ch = 52; /* UNII */ break; \
729 case 5280000: ch = 56; /* UNII */ break; \
730 case 5300000: ch = 60; /* UNII */ break; \
731 case 5320000: ch = 64; /* UNII */ break; \
732 case 5745000: ch = 149; /* UNII */ break; \
733 case 5765000: ch = 153; /* UNII */ break; \
734 case 5785000: ch = 157; /* UNII */ break; \
735 case 5805000: ch = 161; /* UNII */ break; \
736 case 5825000: ch = 165; /* UNII */ break; \
737 case 5500000: ch = 100; /* HiperLAN2 */ break; \
738 case 5520000: ch = 104; /* HiperLAN2 */ break; \
739 case 5540000: ch = 108; /* HiperLAN2 */ break; \
740 case 5560000: ch = 112; /* HiperLAN2 */ break; \
741 case 5580000: ch = 116; /* HiperLAN2 */ break; \
742 case 5600000: ch = 120; /* HiperLAN2 */ break; \
743 case 5620000: ch = 124; /* HiperLAN2 */ break; \
744 case 5640000: ch = 128; /* HiperLAN2 */ break; \
745 case 5660000: ch = 132; /* HiperLAN2 */ break; \
746 case 5680000: ch = 136; /* HiperLAN2 */ break; \
747 case 5700000: ch = 140; /* HiperLAN2 */ break; \
748 case 5170000: ch = 34; /* Japan MMAC */ break; \
749 case 5190000: ch = 38; /* Japan MMAC */ break; \
750 case 5210000: ch = 42; /* Japan MMAC */ break; \
751 case 5230000: ch = 46; /* Japan MMAC */ break; \
752 case 4920000: ch = 184; /* Japan */ break; \
753 case 4940000: ch = 188; /* Japan */ break; \
754 case 4960000: ch = 192; /* Japan */ break; \
755 case 4980000: ch = 196; /* Japan */ break; \
756 case 5040000: ch = 208; /* Japan, means J08 */ break; \
757 case 5060000: ch = 212; /* Japan, means J12 */ break; \
758 case 5080000: ch = 216; /* Japan, means J16 */ break; \
759 default: ch = 1; break; \
764 // Common fragment list structure - Identical to the scatter gather frag list structure
766 #define NIC_MAX_PHYS_BUF_COUNT 8
768 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
772 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
775 typedef struct _RTMP_SCATTER_GATHER_LIST {
776 ULONG NumberOfElements;
778 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
779 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
782 // Some utility macros
785 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
789 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
792 #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))))
794 #define INC_COUNTER64(Val) (Val.QuadPart++)
796 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
797 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
798 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
799 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
801 // Check LEAP & CCKM flags
802 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
803 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
805 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
806 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
808 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
810 _pExtraLlcSnapEncap = SNAP_802_1H; \
811 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
812 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
814 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
819 _pExtraLlcSnapEncap = NULL; \
823 // New Define for new Tx Path.
824 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
826 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
828 _pExtraLlcSnapEncap = SNAP_802_1H; \
829 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
830 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
832 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
837 _pExtraLlcSnapEncap = NULL; \
842 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
844 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
845 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
846 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
849 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
850 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
851 // else remove the LLC/SNAP field from the result Ethernet frame
852 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
854 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
855 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
856 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
860 _pRemovedLLCSNAP = NULL; \
861 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
862 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
864 PUCHAR pProto = _pData + 6; \
866 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
867 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
869 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
870 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
871 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
875 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
876 _pRemovedLLCSNAP = _pData; \
877 _DataSize -= LENGTH_802_1_H; \
878 _pData += LENGTH_802_1_H; \
883 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
884 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
885 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
889 #define SWITCH_AB( _pAA, _pBB) \
897 // Enqueue this frame to MLME engine
898 // We need to enqueue the whole frame because MLME need to pass data type
899 // information from 802.11 header
900 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
902 UINT32 High32TSF, Low32TSF; \
903 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
904 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
905 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
908 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
909 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
911 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
912 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
915 // Check if it is Japan W53(ch52,56,60,64) channel.
917 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
919 #ifdef CONFIG_STA_SUPPORT
920 #define STA_PORT_SECURED(_pAd) \
922 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
923 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
924 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
925 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
926 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
928 #endif // CONFIG_STA_SUPPORT //
932 // Register set pair for initialzation register set definition
934 typedef struct _RTMP_REG_PAIR
938 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
940 typedef struct _REG_PAIR
944 } REG_PAIR, *PREG_PAIR;
947 // Register set pair for initialzation register set definition
949 typedef struct _RTMP_RF_REGS
956 } RTMP_RF_REGS, *PRTMP_RF_REGS;
958 typedef struct _FREQUENCY_ITEM {
963 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
966 // Data buffer for DMA operation, the buffer must be contiguous physical memory
967 // Both DMA to / from CPU use the same structure.
969 typedef struct _RTMP_DMABUF
972 PVOID AllocVa; // TxBuf virtual address
973 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
974 } RTMP_DMABUF, *PRTMP_DMABUF;
977 typedef union _HEADER_802_11_SEQ{
990 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
993 // Data buffer for DMA operation, the buffer must be contiguous physical memory
994 // Both DMA to / from CPU use the same structure.
996 typedef struct _RTMP_REORDERBUF
999 PVOID AllocVa; // TxBuf virtual address
1000 UCHAR Header802_3[14];
1001 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
1005 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1006 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1009 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1010 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1011 // which won't be released, driver has to wait until upper layer return the packet
1012 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1013 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1014 // which driver should ACK upper layer when the tx is physically done or failed.
1016 typedef struct _RTMP_DMACB
1018 ULONG AllocSize; // Control block size
1019 PVOID AllocVa; // Control block virtual address
1020 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1021 PNDIS_PACKET pNdisPacket;
1022 PNDIS_PACKET pNextNdisPacket;
1024 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1025 } RTMP_DMACB, *PRTMP_DMACB;
1027 typedef struct _RTMP_TX_BUF
1031 ULONG AllocSize; // Control block size
1032 PVOID AllocVa; // Control block virtual address
1033 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1034 } RTMP_TXBUF, *PRTMP_TXBUF;
1036 typedef struct _RTMP_RX_BUF
1040 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1041 } RTMP_RXBUF, *PRTMP_RXBUF;
1042 typedef struct _RTMP_TX_RING
1044 RTMP_DMACB Cell[TX_RING_SIZE];
1047 UINT32 TxSwFreeIdx; // software next free tx index
1048 } RTMP_TX_RING, *PRTMP_TX_RING;
1050 typedef struct _RTMP_RX_RING
1052 RTMP_DMACB Cell[RX_RING_SIZE];
1055 INT32 RxSwReadIdx; // software next read index
1056 } RTMP_RX_RING, *PRTMP_RX_RING;
1058 typedef struct _RTMP_MGMT_RING
1060 RTMP_DMACB Cell[MGMT_RING_SIZE];
1063 UINT32 TxSwFreeIdx; // software next free tx index
1064 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1067 // Statistic counter structure
1069 typedef struct _COUNTER_802_3
1072 ULONG GoodTransmits;
1079 ULONG RcvAlignmentErrors;
1081 ULONG MoreCollisions;
1083 } COUNTER_802_3, *PCOUNTER_802_3;
1085 typedef struct _COUNTER_802_11 {
1087 LARGE_INTEGER LastTransmittedFragmentCount;
1088 LARGE_INTEGER TransmittedFragmentCount;
1089 LARGE_INTEGER MulticastTransmittedFrameCount;
1090 LARGE_INTEGER FailedCount;
1091 LARGE_INTEGER RetryCount;
1092 LARGE_INTEGER MultipleRetryCount;
1093 LARGE_INTEGER RTSSuccessCount;
1094 LARGE_INTEGER RTSFailureCount;
1095 LARGE_INTEGER ACKFailureCount;
1096 LARGE_INTEGER FrameDuplicateCount;
1097 LARGE_INTEGER ReceivedFragmentCount;
1098 LARGE_INTEGER MulticastReceivedFrameCount;
1099 LARGE_INTEGER FCSErrorCount;
1100 } COUNTER_802_11, *PCOUNTER_802_11;
1102 typedef struct _COUNTER_RALINK {
1103 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1104 ULONG LastReceivedByteCount;
1105 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1106 ULONG BeenDisassociatedCount;
1107 ULONG BadCQIAutoRecoveryCount;
1108 ULONG PoorCQIRoamingCount;
1109 ULONG MgmtRingFullCount;
1110 ULONG RxCountSinceLastNULL;
1112 ULONG RxRingErrCount;
1114 ULONG TxRingErrCount;
1115 LARGE_INTEGER RealFcsErrCount;
1116 ULONG PendingNdisPacketCount;
1118 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1119 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1120 UINT32 OneSecTxDoneCount;
1121 ULONG OneSecRxCount;
1122 UINT32 OneSecTxAggregationCount;
1123 UINT32 OneSecRxAggregationCount;
1125 UINT32 OneSecFrameDuplicateCount;
1128 UINT32 OneSecTxNoRetryOkCount;
1129 UINT32 OneSecTxRetryOkCount;
1130 UINT32 OneSecTxFailCount;
1131 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1132 UINT32 OneSecRxOkCnt; // RX without error
1133 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1134 UINT32 OneSecRxFcsErrCnt; // CRC error
1135 UINT32 OneSecBeaconSentCnt;
1136 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1137 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1140 ULONG TxNonAggCount;
1141 ULONG TxAgg1MPDUCount;
1142 ULONG TxAgg2MPDUCount;
1143 ULONG TxAgg3MPDUCount;
1144 ULONG TxAgg4MPDUCount;
1145 ULONG TxAgg5MPDUCount;
1146 ULONG TxAgg6MPDUCount;
1147 ULONG TxAgg7MPDUCount;
1148 ULONG TxAgg8MPDUCount;
1149 ULONG TxAgg9MPDUCount;
1150 ULONG TxAgg10MPDUCount;
1151 ULONG TxAgg11MPDUCount;
1152 ULONG TxAgg12MPDUCount;
1153 ULONG TxAgg13MPDUCount;
1154 ULONG TxAgg14MPDUCount;
1155 ULONG TxAgg15MPDUCount;
1156 ULONG TxAgg16MPDUCount;
1158 LARGE_INTEGER TransmittedOctetsInAMSDU;
1159 LARGE_INTEGER TransmittedAMSDUCount;
1160 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1161 LARGE_INTEGER ReceivedAMSDUCount;
1162 LARGE_INTEGER TransmittedAMPDUCount;
1163 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1164 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1165 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1166 } COUNTER_RALINK, *PCOUNTER_RALINK;
1168 typedef struct _PID_COUNTER {
1169 ULONG TxAckRequiredCount; // CRC error
1171 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1172 ULONG LastSuccessRate;
1173 } PID_COUNTER, *PPID_COUNTER;
1175 typedef struct _COUNTER_DRS {
1176 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1177 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1178 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1179 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1180 ULONG CurrTxRateStableTime; // # of second in current TX rate
1181 BOOLEAN fNoisyEnvironment;
1182 BOOLEAN fLastSecAccordingRSSI;
1183 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1184 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1185 ULONG LastTxOkCount;
1186 } COUNTER_DRS, *PCOUNTER_DRS;
1189 // Arcfour Structure Added by PaulWu
1191 typedef struct _ARCFOUR
1196 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1198 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1199 typedef struct _RECEIVE_SETTING {
1200 #ifdef RT_BIG_ENDIAN
1204 USHORT STBC:2; //SPACE
1206 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1207 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1209 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1210 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1212 USHORT STBC:2; //SPACE
1217 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1219 // Shared key data structure
1220 typedef struct _WEP_KEY {
1221 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1222 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1223 } WEP_KEY, *PWEP_KEY;
1225 typedef struct _CIPHER_KEY {
1226 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1227 UCHAR RxMic[8]; // make alignment
1229 UCHAR TxTsc[6]; // 48bit TSC value
1230 UCHAR RxTsc[6]; // 48bit TSC value
1231 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1233 #ifdef CONFIG_STA_SUPPORT
1235 #endif // CONFIG_STA_SUPPORT //
1236 // Key length for each key, 0: entry is invalid
1237 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1238 } CIPHER_KEY, *PCIPHER_KEY;
1240 typedef struct _BBP_TUNING_STRUCT {
1242 UCHAR FalseCcaCountUpperBound; // 100 per sec
1243 UCHAR FalseCcaCountLowerBound; // 10 per sec
1244 UCHAR R17LowerBound; // specified in E2PROM
1245 UCHAR R17UpperBound; // 0x68 according to David Tung
1246 UCHAR CurrentR17Value;
1247 } BBP_TUNING, *PBBP_TUNING;
1249 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1250 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1251 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1252 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1253 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1254 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1255 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1256 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1257 SHORT Pair1LastAvgRssi; //
1258 SHORT Pair2LastAvgRssi; //
1259 ULONG RcvPktNumWhenEvaluate;
1260 BOOLEAN FirstPktArrivedWhenEvaluate;
1261 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1262 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1264 typedef struct _LEAP_AUTH_INFO {
1265 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1266 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1268 UCHAR UserName[256]; //LEAP, User name
1270 UCHAR Password[256]; //LEAP, User Password
1272 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1275 UCHAR Addr[MAC_ADDR_LEN];
1276 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1277 //00 02-Authentication timeout
1278 //00 03-Challenge from AP failed
1279 //00 04-Challenge to AP failed
1281 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1285 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1286 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1292 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1295 // Receive Tuple Cache Format
1297 typedef struct _TUPLE_CACHE {
1299 UCHAR MacAddress[MAC_ADDR_LEN];
1302 } TUPLE_CACHE, *PTUPLE_CACHE;
1305 // Fragment Frame structure
1307 typedef struct _FRAGMENT_FRAME {
1308 PNDIS_PACKET pFragPacket;
1312 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1313 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1317 // Packet information for NdisQueryPacket
1319 typedef struct _PACKET_INFO {
1320 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1321 UINT BufferCount ; // Number of Buffer descriptor chained
1322 UINT TotalPacketLength ; // Self explained
1323 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1324 } PACKET_INFO, *PPACKET_INFO;
1327 // Tkip Key structure which RC4 key & MIC calculation
1329 typedef struct _TKIP_KEY_INFO {
1330 UINT nBytesInM; // # bytes in M for MICKEY
1333 ULONG K0; // for MICKEY Low
1334 ULONG K1; // for MICKEY Hig
1335 ULONG L; // Current state for MICKEY
1336 ULONG R; // Current state for MICKEY
1337 ULONG M; // Message accumulator for MICKEY
1340 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1343 // Private / Misc data, counters for driver internal use
1345 typedef struct __PRIVATE_STRUC {
1346 UINT SystemResetCnt; // System reset counter
1347 UINT TxRingFullCnt; // Tx ring full occurrance number
1348 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1349 // Variables for WEP encryption / decryption in rtmp_wep.c
1351 ARCFOURCONTEXT WEPCONTEXT;
1355 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1357 // structure to tune BBP R66 (BBP TUNING)
1358 typedef struct _BBP_R66_TUNING {
1360 USHORT FalseCcaLowerThreshold; // default 100
1361 USHORT FalseCcaUpperThreshold; // default 512
1363 UCHAR R66CurrentValue;
1364 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1365 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1367 // structure to store channel TX power
1368 typedef struct _CHANNEL_TX_POWER {
1369 USHORT RemainingTimeForUse; //unit: sec
1371 #ifdef DOT11N_DRAFT3
1372 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1373 #endif // DOT11N_DRAFT3 //
1378 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1380 // structure to store 802.11j channel TX power
1381 typedef struct _CHANNEL_11J_TX_POWER {
1383 UCHAR BW; // BW_10 or BW_20
1386 USHORT RemainingTimeForUse; //unit: sec
1387 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1389 typedef enum _ABGBAND_STATE_ {
1395 typedef struct _MLME_STRUCT {
1396 #ifdef CONFIG_STA_SUPPORT
1397 // STA state machines
1398 STATE_MACHINE CntlMachine;
1399 STATE_MACHINE AssocMachine;
1400 STATE_MACHINE AuthMachine;
1401 STATE_MACHINE AuthRspMachine;
1402 STATE_MACHINE SyncMachine;
1403 STATE_MACHINE WpaPskMachine;
1404 STATE_MACHINE LeapMachine;
1405 STATE_MACHINE AironetMachine;
1406 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1407 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1408 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1409 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1410 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1411 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1412 #endif // CONFIG_STA_SUPPORT //
1413 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1415 STATE_MACHINE ActMachine;
1418 #ifdef QOS_DLS_SUPPORT
1419 STATE_MACHINE DlsMachine;
1420 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1421 #endif // QOS_DLS_SUPPORT //
1426 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1427 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1428 ULONG LastSendNULLpsmTime;
1431 NDIS_SPIN_LOCK TaskLock;
1436 RALINK_TIMER_STRUCT PeriodicTimer;
1437 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1438 RALINK_TIMER_STRUCT LinkDownTimer;
1439 RALINK_TIMER_STRUCT LinkUpTimer;
1440 UCHAR bPsPollTimerRunning;
1441 RALINK_TIMER_STRUCT PsPollTimer;
1442 RALINK_TIMER_STRUCT RadioOnOffTimer;
1443 ULONG PeriodicRound;
1444 ULONG OneSecPeriodicRound;
1447 BOOLEAN bLowThroughput;
1448 BOOLEAN bEnableAutoAntennaCheck;
1449 RALINK_TIMER_STRUCT RxAntEvalTimer;
1452 } MLME_STRUCT, *PMLME_STRUCT;
1454 // structure for radar detection and channel switch
1455 typedef struct _RADAR_DETECT_STRUCT {
1456 UCHAR CSCount; //Channel switch counter
1457 UCHAR CSPeriod; //Channel switch period (beacon count)
1458 UCHAR RDCount; //Radar detection counter
1459 UCHAR RDMode; //Radar Detection mode
1460 UCHAR RDDurRegion; //Radar detection duration region
1467 ULONG InServiceMonitorCount; // unit: sec
1468 UINT8 DfsSessionTime;
1471 UINT8 LongPulseRadarTh;
1472 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1474 #ifdef CARRIER_DETECTION_SUPPORT
1475 typedef enum CD_STATE_n
1482 typedef struct CARRIER_DETECTION_s
1485 UINT8 CDSessionTime;
1488 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1489 #endif // CARRIER_DETECTION_SUPPORT //
1491 typedef enum _REC_BLOCKACK_STATUS
1495 Recipient_HandleRes,
1497 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1499 typedef enum _ORI_BLOCKACK_STATUS
1505 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1507 #ifdef DOT11_N_SUPPORT
1508 typedef struct _BA_ORI_ENTRY{
1513 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1515 USHORT TimeOutValue;
1516 ORI_BLOCKACK_STATUS ORI_BA_Status;
1517 RALINK_TIMER_STRUCT ORIBATimer;
1519 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1521 typedef struct _BA_REC_ENTRY {
1524 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1526 USHORT TimeOutValue;
1527 RALINK_TIMER_STRUCT RECBATimer;
1528 ULONG LastIndSeqAtTimer;
1531 REC_BLOCKACK_STATUS REC_BA_Status;
1532 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1534 struct reordering_list list;
1535 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1539 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1540 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1541 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1542 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1543 } BA_TABLE, *PBA_TABLE;
1545 //For QureyBATableOID use;
1546 typedef struct PACKED _OID_BA_REC_ENTRY{
1547 UCHAR MACAddr[MAC_ADDR_LEN];
1548 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1551 REC_BLOCKACK_STATUS REC_BA_Status[8];
1552 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1554 //For QureyBATableOID use;
1555 typedef struct PACKED _OID_BA_ORI_ENTRY{
1556 UCHAR MACAddr[MAC_ADDR_LEN];
1557 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
1560 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1561 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1563 typedef struct _QUERYBA_TABLE{
1564 OID_BA_ORI_ENTRY BAOriEntry[32];
1565 OID_BA_REC_ENTRY BARecEntry[32];
1566 UCHAR OriNum;// Number of below BAOriEntry
1567 UCHAR RecNum;// Number of below BARecEntry
1568 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1570 typedef union _BACAP_STRUC {
1571 #ifdef RT_BIG_ENDIAN
1574 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.
1575 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1576 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1577 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1578 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1579 UINT32 MpduDensity:3;
1580 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1581 UINT32 AutoBA:1; // automatically BA
1582 UINT32 TxBAWinLimit:8;
1583 UINT32 RxBAWinLimit:8;
1587 UINT32 RxBAWinLimit:8;
1588 UINT32 TxBAWinLimit:8;
1589 UINT32 AutoBA:1; // automatically BA
1590 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1591 UINT32 MpduDensity:3;
1592 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1593 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1594 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1595 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1596 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.
1601 } BACAP_STRUC, *PBACAP_STRUC;
1602 #endif // DOT11_N_SUPPORT //
1604 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1605 typedef struct _IOT_STRUC {
1607 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1608 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1609 ULONG OneSecInWindowCount;
1610 ULONG OneSecFrameDuplicateCount;
1611 ULONG OneSecOutWindowCount;
1616 BOOLEAN bRTSLongProtOn;
1617 #ifdef CONFIG_STA_SUPPORT
1618 BOOLEAN bLastAtheros;
1619 BOOLEAN bCurrentAtheros;
1620 BOOLEAN bNowAtherosBurstOn;
1621 BOOLEAN bNextDisableRxBA;
1623 #endif // CONFIG_STA_SUPPORT //
1624 } IOT_STRUC, *PIOT_STRUC;
1626 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1627 typedef union _REG_TRANSMIT_SETTING {
1628 #ifdef RT_BIG_ENDIAN
1634 UINT32 STBC:1; //SPACE
1636 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1637 UINT32 TxBF:1; // 3*3
1644 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1646 UINT32 STBC:1; //SPACE
1654 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1656 typedef union _DESIRED_TRANSMIT_SETTING {
1657 #ifdef RT_BIG_ENDIAN
1660 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1662 USHORT MCS:7; // MCS
1666 USHORT MCS:7; // MCS
1668 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1673 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1676 BOOLEAN IsRecipient;
1677 UCHAR MACAddr[MAC_ADDR_LEN];
1681 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1682 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1685 // Multiple SSID structure
1687 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1688 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1690 /* clear bcmc TIM bit */
1691 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1692 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1694 /* set bcmc TIM bit */
1695 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1696 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1698 /* clear a station PS TIM bit */
1699 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1700 { UCHAR tim_offset = wcid >> 3; \
1701 UCHAR bit_offset = wcid & 0x7; \
1702 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1704 /* set a station PS TIM bit */
1705 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1706 { UCHAR tim_offset = wcid >> 3; \
1707 UCHAR bit_offset = wcid & 0x7; \
1708 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1711 typedef struct _MULTISSID_STRUCT {
1712 UCHAR Bssid[MAC_ADDR_LEN];
1714 CHAR Ssid[MAX_LEN_OF_SSID];
1715 USHORT CapabilityInfo;
1719 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1720 NDIS_802_11_WEP_STATUS WepStatus;
1721 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1722 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1726 ULONG ReceivedByteCount;
1727 ULONG TransmittedByteCount;
1731 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1732 RT_HT_PHY_INFO DesiredHtPhyInfo;
1733 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1734 BOOLEAN bAutoTxRateSwitch;
1738 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1739 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1740 UCHAR DesiredRatesIndex;
1741 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1743 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1753 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1754 UCHAR BANClass3Data;
1755 ULONG IsolateInterStaTraffic;
1758 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1761 UCHAR TimIELocationInBeacon;
1762 UCHAR CapabilityInfoLocationInBeacon;
1763 // outgoing BEACON frame buffer and corresponding TXWI
1764 // PTXWI_STRUC BeaconTxWI; //
1765 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1768 UINT16 StationKeepAliveTime; // unit: second
1771 USHORT VLAN_Priority;
1773 RT_802_11_ACL AccessControlList;
1776 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1777 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1779 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1781 // For 802.1x daemon setting per BSS
1782 UCHAR radius_srv_num;
1783 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1786 unsigned int mylinkid;
1790 UINT32 RcvdConflictSsidCount;
1791 UINT32 RcvdSpoofedAssocRespCount;
1792 UINT32 RcvdSpoofedReassocRespCount;
1793 UINT32 RcvdSpoofedProbeRespCount;
1794 UINT32 RcvdSpoofedBeaconCount;
1795 UINT32 RcvdSpoofedDisassocCount;
1796 UINT32 RcvdSpoofedAuthCount;
1797 UINT32 RcvdSpoofedDeauthCount;
1798 UINT32 RcvdSpoofedUnknownMgmtCount;
1799 UINT32 RcvdReplayAttackCount;
1801 CHAR RssiOfRcvdConflictSsid;
1802 CHAR RssiOfRcvdSpoofedAssocResp;
1803 CHAR RssiOfRcvdSpoofedReassocResp;
1804 CHAR RssiOfRcvdSpoofedProbeResp;
1805 CHAR RssiOfRcvdSpoofedBeacon;
1806 CHAR RssiOfRcvdSpoofedDisassoc;
1807 CHAR RssiOfRcvdSpoofedAuth;
1808 CHAR RssiOfRcvdSpoofedDeauth;
1809 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1810 CHAR RssiOfRcvdReplayAttack;
1814 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1818 #ifdef DOT11N_DRAFT3
1819 typedef enum _BSS2040COEXIST_FLAG{
1820 BSS_2040_COEXIST_DISABLE = 0,
1821 BSS_2040_COEXIST_TIMER_FIRED = 1,
1822 BSS_2040_COEXIST_INFO_SYNC = 2,
1823 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1824 }BSS2040COEXIST_FLAG;
1825 #endif // DOT11N_DRAFT3 //
1827 // configuration common to OPMODE_AP as well as OPMODE_STA
1828 typedef struct _COMMON_CONFIG {
1830 BOOLEAN bCountryFlag;
1831 UCHAR CountryCode[3];
1833 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1834 UCHAR CountryRegionForABand; // Enum of country region for A band
1835 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1836 USHORT Dsifs; // in units of usec
1837 ULONG PacketFilter; // Packet filter for receiving
1839 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1840 UCHAR SsidLen; // the actual ssid length in used
1841 UCHAR LastSsidLen; // the actual ssid length in used
1842 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1843 UCHAR LastBssid[MAC_ADDR_LEN];
1845 UCHAR Bssid[MAC_ADDR_LEN];
1846 USHORT BeaconPeriod;
1848 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1850 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1852 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1854 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1855 UCHAR MaxDesiredRate;
1856 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1858 ULONG BasicRateBitmap; // backup basic ratebitmap
1860 BOOLEAN bAPSDCapable;
1861 BOOLEAN bInServicePeriod;
1866 BOOLEAN bNeedSendTriggerFrame;
1867 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1868 ULONG TriggerTimerCount;
1870 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1871 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1872 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1873 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1874 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1875 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1876 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1877 UCHAR RtsRate; // RATE_xxx
1878 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1879 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1880 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1882 USHORT RtsThreshold; // in unit of BYTE
1883 USHORT FragmentThreshold; // in unit of BYTE
1885 UCHAR TxPower; // in unit of mW
1886 ULONG TxPowerPercentage; // 0~100 %
1887 ULONG TxPowerDefault; // keep for TxPowerPercentage
1889 #ifdef DOT11_N_SUPPORT
1890 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1891 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1892 #endif // DOT11_N_SUPPORT //
1893 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1894 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1895 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1896 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1897 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1898 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1899 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1900 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1901 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1902 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1904 #ifdef DOT11_N_SUPPORT
1906 #endif // DOT11_N_SUPPORT //
1907 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1908 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1909 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1910 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1911 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1912 #ifdef CONFIG_STA_SUPPORT
1913 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1914 #endif // CONFIG_STA_SUPPORT //
1915 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1916 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1917 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1918 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1919 ULONG OpStatusFlags;
1921 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1922 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1924 // IEEE802.11H--DFS.
1925 RADAR_DETECT_STRUCT RadarDetect;
1927 #ifdef CARRIER_DETECTION_SUPPORT
1928 CARRIER_DETECTION CarrierDetect;
1929 #endif // CARRIER_DETECTION_SUPPORT //
1931 #ifdef DOT11_N_SUPPORT
1933 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1934 //RT_HT_CAPABILITY SupportedHtPhy;
1935 RT_HT_CAPABILITY DesiredHtPhy;
1936 HT_CAPABILITY_IE HtCapability;
1937 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1938 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1939 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1940 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
1942 #ifdef DOT11N_DRAFT3
1943 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1944 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1946 //This IE is used for 20/40 BSS Coexistence.
1947 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1948 // ====== 11n D3.0 =======================>
1949 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1950 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1951 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1952 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1953 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1954 USHORT Dot11BssWidthChanTranDelayFactor;
1955 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1957 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1958 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1960 NDIS_SPIN_LOCK TriggerEventTabLock;
1961 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1962 BSS_2040_COEXIST_IE BSSCoexist2040;
1963 TRIGGER_EVENT_TAB TriggerEventTab;
1964 UCHAR ChannelListIdx;
1965 // <====== 11n D3.0 =======================
1966 BOOLEAN bOverlapScanning;
1967 #endif // DOT11N_DRAFT3 //
1970 BOOLEAN bMIMOPSEnable;
1972 BOOLEAN bDisableReordering;
1973 BOOLEAN bForty_Mhz_Intolerant;
1974 BOOLEAN bExtChannelSwitchAnnouncement;
1975 BOOLEAN bRcvBSSWidthTriggerEvents;
1976 ULONG LastRcvBSSWidthTriggerEventsTime;
1979 #endif // DOT11_N_SUPPORT //
1981 // Enable wireless event
1982 BOOLEAN bWirelessEvent;
1983 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1985 // Tx & Rx Stream number selection
1989 // transmit phy mode, trasmit rate for Multicast.
1990 #ifdef MCAST_RATE_SPECIFIC
1991 UCHAR McastTransmitMcs;
1992 UCHAR McastTransmitPhyMode;
1993 #endif // MCAST_RATE_SPECIFIC //
1995 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1999 NDIS_SPIN_LOCK MeasureReqTabLock;
2000 PMEASURE_REQ_TAB pMeasureReqTab;
2002 NDIS_SPIN_LOCK TpcReqTabLock;
2003 PTPC_REQ_TAB pTpcReqTab;
2005 // transmit phy mode, trasmit rate for Multicast.
2006 #ifdef MCAST_RATE_SPECIFIC
2007 HTTRANSMIT_SETTING MCastPhyMode;
2008 #endif // MCAST_RATE_SPECIFIC //
2011 UINT16 DefineMaxTxPwr;
2012 #endif // SINGLE_SKU //
2015 } COMMON_CONFIG, *PCOMMON_CONFIG;
2018 #ifdef CONFIG_STA_SUPPORT
2019 /* Modified by Wu Xi-Kun 4/21/2006 */
2020 // STA configuration and status
2021 typedef struct _STA_ADMIN_CONFIG {
2023 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2024 // the user intended configuration, but not necessary fully equal to the final
2025 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2026 // AP or IBSS holder).
2027 // Once initialized, user configuration can only be changed via OID_xxx
2028 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2029 USHORT AtimWin; // used when starting a new IBSS
2032 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2033 // the user intended configuration, and should be always applied to the final
2034 // settings in ACTIVE BSS without compromising with the BSS holder.
2035 // Once initialized, user configuration can only be changed via OID_xxx
2037 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2038 USHORT DefaultListenCount; // default listen count;
2039 ULONG WindowsPowerMode; // Power mode for AC power
2040 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2041 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2042 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2043 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2045 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2046 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2047 USHORT DisassocReason;
2048 UCHAR DisassocSta[MAC_ADDR_LEN];
2049 USHORT DeauthReason;
2050 UCHAR DeauthSta[MAC_ADDR_LEN];
2051 USHORT AuthFailReason;
2052 UCHAR AuthFailSta[MAC_ADDR_LEN];
2054 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2055 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2056 NDIS_802_11_WEP_STATUS WepStatus;
2057 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2059 // Add to support different cipher suite for WPA2/WPA mode
2060 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2061 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2062 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2063 USHORT RsnCapability;
2065 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2067 UCHAR PMK[32]; // WPA PSK mode PMK
2068 UCHAR PTK[64]; // WPA PSK mode PTK
2069 UCHAR GTK[32]; // GTK from authenticator
2070 BSSID_INFO SavedPMK[PMKID_NO];
2071 UINT SavedPMKNum; // Saved PMKID number
2076 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2079 // For WPA countermeasures
2080 ULONG LastMicErrorTime; // record last MIC error time
2081 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2082 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2083 // For WPA-PSK supplicant state
2084 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2085 UCHAR ReplayCounter[8];
2086 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2087 UCHAR SNonce[32]; // SNonce for WPA-PSK
2089 UCHAR LastSNR0; // last received BEACON's SNR
2090 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2091 RSSI_SAMPLE RssiSample;
2092 ULONG NumOfAvgRssiSample;
2094 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2095 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2096 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2097 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2099 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2100 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2101 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2102 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2103 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2104 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2105 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2107 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2108 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2109 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2111 // New for WPA, windows want us to to keep association information and
2112 // Fixed IEs from last association response
2113 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2114 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2115 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2116 USHORT ResVarIELen; // Length of next VIE include EID & Length
2117 UCHAR ResVarIEs[MAX_VIE_LEN];
2120 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2122 // New variables used for CCX 1.0
2124 BOOLEAN bCkipCmicOn;
2126 UCHAR GIV[3]; //for CCX iv
2131 LEAP_AUTH_INFO LeapAuthInfo;
2133 UCHAR NetworkChallenge[8];
2134 UCHAR NetworkChallengeResponse[24];
2135 UCHAR PeerChallenge[8];
2137 UCHAR PeerChallengeResponse[24];
2138 UCHAR SessionKey[16]; //Network session keys (NSK)
2139 RALINK_TIMER_STRUCT LeapAuthTimer;
2140 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2142 // New control flags for CCX
2143 CCX_CONTROL CCXControl; // Master administration state
2144 BOOLEAN CCXEnable; // Actual CCX state
2145 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2146 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2147 UCHAR CCXReqType; // Current processing CCX request type
2148 BSS_TABLE CCXBssTab; // BSS Table
2149 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2150 USHORT FrameReportLen; // Current Frame report length
2151 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2152 USHORT RPIDensity[8]; // Array for RPI density collection
2153 // Start address of each BSS table within FrameReportBuf
2154 // It's important to update the RxPower of the corresponding Bss
2155 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2156 USHORT BeaconToken; // Token for beacon report
2157 ULONG LastBssIndex; // Most current reported Bss index
2158 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2159 UCHAR RMReqCnt; // Number of measurement request saved.
2160 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2161 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2162 // It must be the same channel with maximum duration
2163 USHORT ParallelDuration; // Maximum duration for parallel measurement
2164 UCHAR ParallelChannel; // Only one channel with parallel measurement
2165 USHORT IAPPToken; // IAPP dialog token
2166 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2167 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2168 // Hack for channel load and noise histogram parameters
2169 UCHAR NHFactor; // Parameter for Noise histogram
2170 UCHAR CLFactor; // Parameter for channel load
2172 UCHAR KRK[16]; //Key Refresh Key.
2173 UCHAR BTK[32]; //Base Transient Key
2174 BOOLEAN CCKMLinkUpFlag;
2175 ULONG CCKMRN; //(Re)Association request number.
2176 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2177 UCHAR AironetCellPowerLimit; //in dBm
2178 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2179 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2180 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2181 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2182 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2183 USHORT CCXAdjacentAPChannel;
2184 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2186 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2187 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2189 UCHAR DtimCount; // 0.. DtimPeriod-1
2190 UCHAR DtimPeriod; // default = 3
2192 #ifdef QOS_DLS_SUPPORT
2193 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2194 UCHAR DlsReplayCounter[8];
2195 #endif // QOS_DLS_SUPPORT //
2196 ////////////////////////////////////////////////////////////////////////////////////////
2197 // This is only for WHQL test.
2199 ////////////////////////////////////////////////////////////////////////////////////////
2201 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2203 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2204 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2206 #ifdef WPA_SUPPLICANT_SUPPORT
2208 BOOLEAN IEEE8021x_required_keys;
2209 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2210 UCHAR DesireSharedKeyId;
2212 // 0: driver ignores wpa_supplicant
2213 // 1: wpa_supplicant initiates scanning and AP selection
2214 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2215 UCHAR WpaSupplicantUP;
2216 UCHAR WpaSupplicantScanCount;
2217 #endif // WPA_SUPPLICANT_SUPPORT //
2222 BOOLEAN bTGnWifiTest;
2223 BOOLEAN bScanReqIsFromWebUI;
2225 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2226 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2227 RT_HT_PHY_INFO DesiredHtPhyInfo;
2228 BOOLEAN bAutoTxRateSwitch;
2232 #ifdef EXT_BUILD_CHANNEL_LIST
2233 UCHAR IEEE80211dClientMode;
2234 UCHAR StaOriCountryCode[3];
2235 UCHAR StaOriGeography;
2236 #endif // EXT_BUILD_CHANNEL_LIST //
2237 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2239 // This data structure keep the current active BSS/IBSS's configuration that this STA
2240 // had agreed upon joining the network. Which means these parameters are usually decided
2241 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2242 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2243 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2244 // the current active settings.
2245 typedef struct _STA_ACTIVE_CONFIG {
2247 USHORT AtimWin; // in kusec; IBSS parameter set element
2248 USHORT CapabilityInfo;
2249 USHORT CfpMaxDuration;
2252 // Copy supported rate from desired AP's beacon. We are trying to match
2253 // AP's supported and extended rate settings.
2254 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2255 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2258 // Copy supported ht from desired AP's beacon. We are trying to match
2259 RT_HT_PHY_INFO SupportedPhyInfo;
2260 RT_HT_CAPABILITY SupportedHtPhy;
2261 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2262 #endif // CONFIG_STA_SUPPORT //
2264 // ----------- start of AP --------------------------
2265 // AUTH-RSP State Machine Aux data structure
2266 typedef struct _AP_MLME_AUX {
2267 UCHAR Addr[MAC_ADDR_LEN];
2269 CHAR Challenge[CIPHER_TEXT_LEN];
2270 } AP_MLME_AUX, *PAP_MLME_AUX;
2272 // structure to define WPA Group Key Rekey Interval
2273 typedef struct PACKED _RT_802_11_WPA_REKEY {
2274 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2275 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2276 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2278 typedef struct _MAC_TABLE_ENTRY {
2279 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2280 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2281 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2282 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2283 BOOLEAN ValidAsMesh;
2284 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2286 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2288 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2290 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2291 UCHAR CMTimerRunning;
2292 UCHAR apidx; // MBSS number
2294 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2295 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2296 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2299 RALINK_TIMER_STRUCT RetryTimer;
2300 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2301 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2302 NDIS_802_11_WEP_STATUS WepStatus;
2303 AP_WPA_STATE WpaState;
2306 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2307 CIPHER_KEY PairwiseKey;
2310 UCHAR PMKID[LEN_PMKID];
2313 UCHAR Addr[MAC_ADDR_LEN];
2316 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2317 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2319 USHORT CapabilityInfo;
2321 ULONG NoDataIdleCount;
2322 UINT16 StationKeepAliveCount; // unit: second
2324 QUEUE_HEADER PsQueue;
2326 UINT32 StaConnectTime; // the live time of this station since associated with AP
2329 #ifdef DOT11_N_SUPPORT
2331 USHORT NoBADataCountDown;
2333 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2334 UINT TxBFCount; // 3*3
2335 #endif // DOT11_N_SUPPORT //
2337 UINT DebugFIFOCount;
2342 //====================================================
2343 //WDS entry needs these
2344 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2345 UINT MatchWDSTabIdx;
2346 UCHAR MaxSupportedRate;
2348 UCHAR CurrTxRateIndex;
2349 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2350 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2351 UINT32 OneSecTxNoRetryOkCount;
2352 UINT32 OneSecTxRetryOkCount;
2353 UINT32 OneSecTxFailCount;
2354 UINT32 ContinueTxFailCnt;
2355 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2356 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2357 //====================================================
2361 #ifdef CONFIG_STA_SUPPORT
2362 #ifdef QOS_DLS_SUPPORT
2363 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2364 #endif // QOS_DLS_SUPPORT //
2365 #endif // CONFIG_STA_SUPPORT //
2367 BOOLEAN fNoisyEnvironment;
2368 BOOLEAN fLastSecAccordingRSSI;
2369 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2370 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2371 ULONG LastTxOkCount;
2372 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2374 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2375 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2376 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2377 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2378 ULONG ClientStatusFlags;
2380 // TODO: Shall we move that to DOT11_N_SUPPORT???
2381 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2383 #ifdef DOT11_N_SUPPORT
2384 // HT EWC MIMO-N used parameters
2385 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2386 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2387 USHORT TXAutoBAbitmap;
2388 USHORT BADeclineBitmap;
2389 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2390 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2391 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2393 // 802.11n features.
2395 UCHAR MaxRAmpduFactor;
2397 UCHAR MmpsMode; // MIMO power save more.
2399 HT_CAPABILITY_IE HTCapability;
2401 #ifdef DOT11N_DRAFT3
2402 UCHAR BSS2040CoexistenceMgmtSupport;
2403 #endif // DOT11N_DRAFT3 //
2404 #endif // DOT11_N_SUPPORT //
2406 BOOLEAN bAutoTxRateSwitch;
2409 struct _MAC_TABLE_ENTRY *pNext;
2410 USHORT TxSeq[NUM_OF_TID];
2411 USHORT NonQosDataSeq;
2413 RSSI_SAMPLE RssiSample;
2415 UINT32 TXMCSExpected[16];
2416 UINT32 TXMCSSuccessful[16];
2417 UINT32 TXMCSFailed[16];
2418 UINT32 TXMCSAutoFallBack[16][16];
2419 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2421 typedef struct _MAC_TABLE {
2423 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2424 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2425 QUEUE_HEADER McastPsQueue;
2427 BOOLEAN fAnyStationInPsm;
2428 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2429 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2430 #ifdef DOT11_N_SUPPORT
2431 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2432 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2433 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2434 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2435 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2436 #endif // DOT11_N_SUPPORT //
2437 } MAC_TABLE, *PMAC_TABLE;
2439 #ifdef DOT11_N_SUPPORT
2440 #define IS_HT_STA(_pMacEntry) \
2441 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2443 #define IS_HT_RATE(_pMacEntry) \
2444 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2446 #define PEER_IS_HT_RATE(_pMacEntry) \
2447 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2448 #endif // DOT11_N_SUPPORT //
2450 typedef struct _WDS_ENTRY {
2452 UCHAR Addr[MAC_ADDR_LEN];
2453 ULONG NoDataIdleCount;
2454 struct _WDS_ENTRY *pNext;
2455 } WDS_ENTRY, *PWDS_ENTRY;
2457 typedef struct _WDS_TABLE_ENTRY {
2459 UCHAR WdsAddr[MAC_ADDR_LEN];
2460 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2461 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2462 UCHAR MaxSupportedRate;
2464 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2465 USHORT OneSecTxOkCount;
2466 USHORT OneSecTxRetryOkCount;
2467 USHORT OneSecTxFailCount;
2468 ULONG CurrTxRateStableTime; // # of second in current TX rate
2469 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2470 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2472 typedef struct _RT_802_11_WDS_ENTRY {
2476 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2477 UCHAR MacTabMatchWCID; // ASIC
2478 NDIS_802_11_WEP_STATUS WepStatus;
2481 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2482 RT_HT_PHY_INFO DesiredHtPhyInfo;
2483 BOOLEAN bAutoTxRateSwitch;
2484 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2485 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2487 typedef struct _WDS_TABLE {
2490 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2491 } WDS_TABLE, *PWDS_TABLE;
2493 typedef struct _APCLI_STRUCT {
2496 unsigned int mylinkid;
2498 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2499 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2500 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2502 CHAR Ssid[MAX_LEN_OF_SSID];
2505 CHAR CfgSsid[MAX_LEN_OF_SSID];
2506 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2507 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2509 ULONG ApCliRcvBeaconTime;
2511 ULONG CtrlCurrState;
2512 ULONG SyncCurrState;
2513 ULONG AuthCurrState;
2514 ULONG AssocCurrState;
2515 ULONG WpaPskCurrState;
2520 ULONG ClientStatusFlags;
2523 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2524 NDIS_802_11_WEP_STATUS WepStatus;
2526 // Add to support different cipher suite for WPA2/WPA mode
2527 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2528 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2529 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2530 USHORT RsnCapability;
2532 UCHAR PSK[100]; // reserve PSK key material
2534 UCHAR PMK[32]; // WPA PSK mode PMK
2535 UCHAR GTK[32]; // GTK from authenticator
2537 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2540 // store RSN_IE built by driver
2541 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2544 // For WPA countermeasures
2545 ULONG LastMicErrorTime; // record last MIC error time
2546 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2548 // For WPA-PSK supplicant state
2549 UCHAR SNonce[32]; // SNonce for WPA-PSK
2550 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2552 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2553 RT_HT_PHY_INFO DesiredHtPhyInfo;
2554 BOOLEAN bAutoTxRateSwitch;
2555 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2556 } APCLI_STRUCT, *PAPCLI_STRUCT;
2558 // ----------- end of AP ----------------------------
2561 typedef struct _BLOCK_QUEUE_ENTRY
2563 BOOLEAN SwTxQueueBlockFlag;
2564 LIST_HEADER NetIfList;
2565 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2566 #endif // BLOCK_NET_IF //
2571 BOOLEAN bGreenField;
2577 typedef struct _INF_PCI_CONFIG
2579 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2582 typedef struct _INF_USB_CONFIG
2584 UINT BulkInEpAddr; // bulk-in endpoint address
2585 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2589 #ifdef IKANOS_VX_1X0
2590 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2592 struct IKANOS_TX_INFO
2594 struct net_device *netdev;
2595 IkanosWlanTxCbFuncP *fp;
2597 #endif // IKANOS_VX_1X0 //
2600 typedef struct _NINDO_CTRL_BLOCK {
2602 RT_NINTENDO_TABLE DS_TABLE;
2605 spinlock_t NINTENDO_TABLE_Lock;
2607 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
2608 #endif // CHIP25XX //
2610 UCHAR NINTENDO_UP_BUFFER[512];
2612 CIPHER_KEY Local_SharedKey;
2613 UCHAR Local_bHideSsid;
2614 UCHAR Local_AuthMode;
2615 UCHAR Local_WepStatus;
2616 USHORT Local_CapabilityInfo;
2618 #endif // NINTENDO_AP //
2622 #define DIAGNOSE_TIME 10 // 10 sec
2623 typedef struct _RtmpDiagStrcut_
2624 { // Diagnosis Related element
2625 unsigned char inited;
2627 unsigned char ArrayStartIdx;
2628 unsigned char ArrayCurIdx;
2630 USHORT TxDataCnt[DIAGNOSE_TIME];
2631 USHORT TxFailCnt[DIAGNOSE_TIME];
2632 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2633 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2634 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2636 USHORT TxAggCnt[DIAGNOSE_TIME];
2637 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2638 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2639 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2640 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2643 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2644 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2645 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2647 #endif // DBG_DIAGNOSE //
2651 // The miniport adapter structure
2653 typedef struct _RTMP_ADAPTER
2655 PVOID OS_Cookie; // save specific structure relative to OS
2659 USHORT LnkCtrlBitMask;
2660 USHORT RLnkCtrlConfiguration;
2661 USHORT RLnkCtrlOffset;
2662 USHORT HostLnkCtrlConfiguration;
2663 USHORT HostLnkCtrlOffset;
2664 USHORT PCIePowerSaveLevel;
2665 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2666 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2667 USHORT ThisTbttNumToNextWakeUp;
2668 ULONG SameRxByteCount;
2671 /*****************************************************************************************/
2672 /* PCI related parameters */
2673 /*****************************************************************************************/
2674 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2676 UINT int_enable_reg;
2677 UINT int_disable_mask;
2681 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2682 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2683 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2684 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2687 NDIS_SPIN_LOCK irq_lock;
2692 /*****************************************************************************************/
2693 /* Both PCI/USB related parameters */
2694 /*****************************************************************************************/
2697 /*****************************************************************************************/
2698 /* Tx related parameters */
2699 /*****************************************************************************************/
2700 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2701 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2704 // resource for software backlog queues
2705 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2706 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2708 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2709 RTMP_MGMT_RING MgmtRing;
2710 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2713 /*****************************************************************************************/
2714 /* Rx related parameters */
2715 /*****************************************************************************************/
2717 RTMP_RX_RING RxRing;
2718 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2722 /*****************************************************************************************/
2723 /* ASIC related parameters */
2724 /*****************************************************************************************/
2725 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2727 // ---------------------------
2729 // ---------------------------
2730 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2731 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2732 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2733 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2735 // ---------------------------
2737 // ---------------------------
2738 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2739 UCHAR BbpRssiToDbmDelta;
2740 BBP_R66_TUNING BbpTuning;
2742 // ----------------------------
2744 // ----------------------------
2745 UCHAR RfIcType; // RFIC_xxx
2746 ULONG RfFreqOffset; // Frequency offset for channel switching
2747 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2749 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2750 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2752 // This soft Rx Antenna Diversity mechanism is used only when user set
2753 // RX Antenna = DIVERSITY ON
2754 SOFT_RX_ANT_DIVERSITY RxAnt;
2757 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2758 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2759 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2760 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2762 UCHAR ChannelListNum; // number of channel in ChannelList[]
2765 ULONG Tx20MPwrCfgABand[5];
2766 ULONG Tx20MPwrCfgGBand[5];
2767 ULONG Tx40MPwrCfgABand[5];
2768 ULONG Tx40MPwrCfgGBand[5];
2770 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2771 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2772 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2773 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2774 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2775 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2777 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2778 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2779 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2780 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2781 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2782 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2784 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2785 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2786 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2787 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2790 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2791 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2792 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2793 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2796 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2797 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2798 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2799 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2801 // ----------------------------
2803 // ----------------------------
2804 MCU_LEDCS_STRUC LedCntl;
2805 USHORT Led1; // read from EEPROM 0x3c
2806 USHORT Led2; // EEPROM 0x3e
2807 USHORT Led3; // EEPROM 0x40
2808 UCHAR LedIndicatorStregth;
2809 UCHAR RssiSingalstrengthOffet;
2810 BOOLEAN bLedOnScanning;
2813 /*****************************************************************************************/
2814 /* 802.11 related parameters */
2815 /*****************************************************************************************/
2816 // outgoing BEACON frame buffer and corresponding TXD
2817 TXWI_STRUC BeaconTxWI;
2819 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2821 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2822 PSPOLL_FRAME PsPollFrame;
2823 HEADER_802_11 NullFrame;
2825 //=========AP===========
2828 //=======STA===========
2829 #ifdef CONFIG_STA_SUPPORT
2830 /* Modified by Wu Xi-Kun 4/21/2006 */
2831 // -----------------------------------------------
2832 // STA specific configuration & operation status
2833 // used only when pAd->OpMode == OPMODE_STA
2834 // -----------------------------------------------
2835 STA_ADMIN_CONFIG StaCfg; // user desired settings
2836 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2837 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2838 NDIS_MEDIA_STATE PreMediaState;
2839 #endif // CONFIG_STA_SUPPORT //
2841 //=======Common===========
2842 // OP mode: either AP or STA
2843 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2845 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2847 // MAT related parameters
2849 // configuration: read from Registry & E2PROM
2850 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2851 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2852 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2854 // ------------------------------------------------------
2855 // common configuration to both OPMODE_STA and OPMODE_AP
2856 // ------------------------------------------------------
2857 COMMON_CONFIG CommonCfg;
2860 // AP needs those vaiables for site survey feature.
2861 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2862 BSS_TABLE ScanTab; // store the latest SCAN result
2864 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2865 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2866 NDIS_SPIN_LOCK MacTabLock;
2868 #ifdef DOT11_N_SUPPORT
2870 #endif // DOT11_N_SUPPORT //
2871 NDIS_SPIN_LOCK BATabLock;
2872 RALINK_TIMER_STRUCT RECBATimer;
2874 // encryption/decryption KEY tables
2875 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2877 // RX re-assembly buffer for fragmentation
2878 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2881 COUNTER_802_3 Counters8023; // 802.3 counters
2882 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2883 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2884 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2885 PRIVATE_STRUC PrivateInfo; // Private information & counters
2887 // flags, see fRTMP_ADAPTER_xxx flags
2888 ULONG Flags; // Represent current device status
2889 ULONG PSFlags; // Power Save operation flag.
2891 // current TX sequence #
2894 // Control disconnect / connect event generation
2895 //+++Didn't used anymore
2900 //+++Used only for Station
2901 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2904 ULONG ExtraInfo; // Extra information for displaying status
2905 ULONG SystemErrorBitmap; // b0: E2PROM version error
2907 //+++Didn't used anymore
2908 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2911 // ---------------------------
2913 // ---------------------------
2914 RT_802_11_EVENT_TABLE EventTab;
2919 /*****************************************************************************************/
2920 /* Statistic related parameters */
2921 /*****************************************************************************************/
2923 BOOLEAN bUpdateBcnCntDone;
2924 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2925 // ----------------------------
2927 // ----------------------------
2928 BOOLEAN bBanAllBaSetup;
2929 BOOLEAN bPromiscuous;
2931 // ----------------------------
2932 // rt2860c emulation-use Parameters
2933 // ----------------------------
2936 ULONG cfendaccu[30];
2937 ULONG bacontent[16];
2938 ULONG rxint[RX_RING_SIZE+1];
2941 BOOLEAN bForcePrintTX;
2942 BOOLEAN bForcePrintRX;
2943 BOOLEAN bDisablescanning; //defined in RT2870 USB
2944 BOOLEAN bStaFifoTest;
2945 BOOLEAN bProtectionTest;
2947 BOOLEAN bGenOneHCCA;
2948 BOOLEAN bBroadComHT;
2949 //+++Following add from RT2870 USB.
2951 ULONG BulkOutComplete;
2952 ULONG BulkOutCompleteOther;
2953 ULONG BulkOutCompleteCancel; // seems not use now?
2955 ULONG BulkInComplete;
2956 ULONG BulkInCompleteFail;
2959 struct wificonf WIFItestbed;
2963 #endif // RALINK_ATE //
2965 #ifdef DOT11_N_SUPPORT
2966 struct reordering_mpdu_pool mpdu_blk_pool;
2967 #endif // DOT11_N_SUPPORT //
2969 ULONG OneSecondnonBEpackets; // record non BE packets per second
2971 #if WIRELESS_EXT >= 12
2972 struct iw_statistics iw_stats;
2975 struct net_device_stats stats;
2978 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
2979 #endif // BLOCK_NET_IF //
2983 #ifdef MULTIPLE_CARD_SUPPORT
2985 UCHAR MC_FileName[256];
2986 #endif // MULTIPLE_CARD_SUPPORT //
2988 ULONG TbttTickCount;
2989 #ifdef PCI_MSI_SUPPORT
2991 #endif // PCI_MSI_SUPPORT //
2996 #define TIME_BASE (1000000/OS_HZ)
2997 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2998 UCHAR flg_be_adjust;
2999 ULONG be_adjust_last_time;
3002 NINDO_CTRL_BLOCK nindo_ctrl_block;
3003 #endif // NINTENDO_AP //
3006 #ifdef IKANOS_VX_1X0
3007 struct IKANOS_TX_INFO IkanosTxInfo;
3008 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3009 #endif // IKANOS_VX_1X0 //
3013 RtmpDiagStruct DiagStruct;
3014 #endif // DBG_DIAGNOSE //
3017 UINT8 PM_FlgSuspend;
3018 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3021 // Cisco IAPP format
3023 typedef struct _CISCO_IAPP_CONTENT_
3025 USHORT Length; //IAPP Length
3026 UCHAR MessageType; //IAPP type
3027 UCHAR FunctionCode; //IAPP function type
3028 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3029 UCHAR SourceMAC[MAC_ADDR_LEN];
3030 USHORT Tag; //Tag(element IE) - Adjacent AP report
3031 USHORT TagLength; //Length of element not including 4 byte header
3032 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3033 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3036 UCHAR Ssid[MAX_LEN_OF_SSID];
3037 USHORT Seconds; //Seconds that the client has been disassociated.
3038 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3040 #define DELAYINTMASK 0x0003fffb
3041 #define INTMASK 0x0003fffb
3042 #define IndMask 0x0003fffc
3043 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3044 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3045 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3046 #define TxCoherent 0x00020000 // tx coherent
3047 #define RxCoherent 0x00010000 // rx coherent
3048 #define McuCommand 0x00000200 // mcu
3049 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3050 #define TBTTInt 0x00000800 // TBTT interrupt
3051 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3052 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3053 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3056 typedef struct _RX_BLK_
3058 RT28XX_RXD_STRUC RxD;
3060 PHEADER_802_11 pHeader;
3061 PNDIS_PACKET pRxPacket;
3065 UCHAR UserPriority; // for calculate TKIP MIC using
3069 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3070 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3071 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3074 #define fRX_WDS 0x0001
3075 #define fRX_AMSDU 0x0002
3076 #define fRX_ARALINK 0x0004
3077 #define fRX_HTC 0x0008
3078 #define fRX_PAD 0x0010
3079 #define fRX_AMPDU 0x0020
3080 #define fRX_QOS 0x0040
3081 #define fRX_INFRA 0x0080
3082 #define fRX_EAP 0x0100
3083 #define fRX_MESH 0x0200
3084 #define fRX_APCLI 0x0400
3085 #define fRX_DLS 0x0800
3086 #define fRX_WPI 0x1000
3088 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3089 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3090 #define LENGTH_ARALINK_HEADER_FIELD 2
3092 #define TX_UNKOWN_FRAME 0x00
3093 #define TX_MCAST_FRAME 0x01
3094 #define TX_LEGACY_FRAME 0x02
3095 #define TX_AMPDU_FRAME 0x04
3096 #define TX_AMSDU_FRAME 0x08
3097 #define TX_RALINK_FRAME 0x10
3098 #define TX_FRAG_FRAME 0x20
3101 // Currently the sizeof(TX_BLK) is 148 bytes.
3102 typedef struct _TX_BLK_
3105 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3106 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3107 USHORT TotalFragNum; // Total frame fragments required in one batch
3108 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3110 QUEUE_HEADER TxPacketList;
3111 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3112 HTTRANSMIT_SETTING *pTransmit;
3114 // Following structure used for the characteristics of a specific packet.
3115 PNDIS_PACKET pPacket;
3116 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3117 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3118 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3119 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3120 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3121 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3122 UCHAR HdrPadLen; // recording Header Padding Length;
3123 UCHAR apidx; // The interface associated to this packet
3124 UCHAR Wcid; // The MAC entry associated to this packet
3125 UCHAR UserPriority; // priority class of packet
3126 UCHAR FrameGap; // what kind of IFS this packet use
3127 UCHAR MpduReqNum; // number of fragments of this frame
3128 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3129 UCHAR CipherAlg; // cipher alogrithm
3134 USHORT Flags; //See following definitions for detail.
3136 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3137 ULONG Priv; // Hardware specific value saved in here.
3141 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3142 #define fTX_bAckRequired 0x0002 // the packet need ack response
3143 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3144 #define fTX_bHTRate 0x0008 // allow to use HT rate
3145 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3146 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3147 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3148 #define fTX_bWMM 0x0080 // QOS Data
3150 #define fTX_bClearEAPFrame 0x0100
3152 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3155 (_pTxBlk->Flags |= _flag) \
3157 (_pTxBlk->Flags &= ~(_flag)) \
3160 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3161 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3162 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3168 //------------------------------------------------------------------------------------------
3172 // Enable & Disable NIC interrupt via writing interrupt mask register
3173 // Since it use ADAPTER structure, it have to be put after structure definition.
3175 __inline VOID NICDisableInterrupt(
3176 IN PRTMP_ADAPTER pAd)
3178 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3179 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3180 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3183 __inline VOID NICEnableInterrupt(
3184 IN PRTMP_ADAPTER pAd)
3187 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3188 // To prevent System hang, we should enalbe the interrupt when
3189 // ASIC is already Wake Up.
3191 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3192 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3193 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3195 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3198 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3200 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3201 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3204 #ifdef RT_BIG_ENDIAN
3205 static inline VOID WriteBackToDescriptor(
3208 IN BOOLEAN DoEncrypt,
3209 IN ULONG DescriptorType)
3213 p1 = ((UINT32 *)Dest);
3214 p2 = ((UINT32 *)Src);
3219 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3223 ========================================================================
3225 Routine Description:
3226 Endian conversion of Tx/Rx descriptor .
3229 pAd Pointer to our adapter
3230 pData Pointer to Tx/Rx descriptor
3231 DescriptorType Direction of the frame
3237 Call this function when read or update descriptor
3238 ========================================================================
3240 static inline VOID RTMPWIEndianChange(
3242 IN ULONG DescriptorType)
3247 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3249 if(DescriptorType == TYPE_TXWI)
3251 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3252 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3256 for(i=0; i < size/4 ; i++)
3257 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3262 ========================================================================
3264 Routine Description:
3265 Endian conversion of Tx/Rx descriptor .
3268 pAd Pointer to our adapter
3269 pData Pointer to Tx/Rx descriptor
3270 DescriptorType Direction of the frame
3276 Call this function when read or update descriptor
3277 ========================================================================
3279 static inline VOID RTMPDescriptorEndianChange(
3281 IN ULONG DescriptorType)
3283 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3284 *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11
3285 *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15
3286 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last
3290 ========================================================================
3292 Routine Description:
3293 Endian conversion of all kinds of 802.11 frames .
3296 pAd Pointer to our adapter
3297 pData Pointer to the 802.11 frame structure
3298 Dir Direction of the frame
3299 FromRxDoneInt Caller is from RxDone interrupt
3305 Call this function when read or update buffer data
3306 ========================================================================
3308 static inline VOID RTMPFrameEndianChange(
3309 IN PRTMP_ADAPTER pAd,
3312 IN BOOLEAN FromRxDoneInt)
3314 PHEADER_802_11 pFrame;
3317 // swab 16 bit fields - Frame Control field
3320 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3323 pFrame = (PHEADER_802_11) pData;
3324 pMacHdr = (PUCHAR) pFrame;
3326 // swab 16 bit fields - Duration/ID field
3327 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3329 // swab 16 bit fields - Sequence Control field
3330 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3332 if(pFrame->FC.Type == BTYPE_MGMT)
3334 switch(pFrame->FC.SubType)
3336 case SUBTYPE_ASSOC_REQ:
3337 case SUBTYPE_REASSOC_REQ:
3338 // swab 16 bit fields - CapabilityInfo field
3339 pMacHdr += sizeof(HEADER_802_11);
3340 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3342 // swab 16 bit fields - Listen Interval field
3344 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3347 case SUBTYPE_ASSOC_RSP:
3348 case SUBTYPE_REASSOC_RSP:
3349 // swab 16 bit fields - CapabilityInfo field
3350 pMacHdr += sizeof(HEADER_802_11);
3351 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3353 // swab 16 bit fields - Status Code field
3355 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3357 // swab 16 bit fields - AID field
3359 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3363 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3364 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3365 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3369 // swab 16 bit fields - Auth Alg No. field
3370 pMacHdr += sizeof(HEADER_802_11);
3371 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3373 // swab 16 bit fields - Auth Seq No. field
3375 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3377 // swab 16 bit fields - Status Code field
3379 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3383 case SUBTYPE_BEACON:
3384 case SUBTYPE_PROBE_RSP:
3385 // swab 16 bit fields - BeaconInterval field
3386 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3387 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3389 // swab 16 bit fields - CapabilityInfo field
3390 pMacHdr += sizeof(USHORT);
3391 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3394 case SUBTYPE_DEAUTH:
3395 case SUBTYPE_DISASSOC:
3396 // swab 16 bit fields - Reason code field
3397 pMacHdr += sizeof(HEADER_802_11);
3398 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3402 else if( pFrame->FC.Type == BTYPE_DATA )
3405 else if(pFrame->FC.Type == BTYPE_CNTL)
3407 switch(pFrame->FC.SubType)
3409 case SUBTYPE_BLOCK_ACK_REQ:
3411 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3412 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3413 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3416 case SUBTYPE_BLOCK_ACK:
3417 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3418 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3422 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3423 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3429 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3432 // swab 16 bit fields - Frame Control
3433 if(Dir == DIR_WRITE)
3435 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3438 #endif // RT_BIG_ENDIAN //
3441 static inline VOID ConvertMulticastIP2MAC(
3443 IN PUCHAR *ppMacAddr,
3444 IN UINT16 ProtoType)
3446 if (pIpAddr == NULL)
3449 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3455 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3456 *(*ppMacAddr) = 0x33;
3457 *(*ppMacAddr + 1) = 0x33;
3458 *(*ppMacAddr + 2) = pIpAddr[12];
3459 *(*ppMacAddr + 3) = pIpAddr[13];
3460 *(*ppMacAddr + 4) = pIpAddr[14];
3461 *(*ppMacAddr + 5) = pIpAddr[15];
3466 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3467 *(*ppMacAddr) = 0x01;
3468 *(*ppMacAddr + 1) = 0x00;
3469 *(*ppMacAddr + 2) = 0x5e;
3470 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3471 *(*ppMacAddr + 4) = pIpAddr[2];
3472 *(*ppMacAddr + 5) = pIpAddr[3];
3479 BOOLEAN RTMPCheckForHang(
3480 IN NDIS_HANDLE MiniportAdapterContext
3484 IN NDIS_HANDLE MiniportAdapterContext
3488 // Private routines in rtmp_init.c
3490 NDIS_STATUS RTMPAllocAdapterBlock(
3492 OUT PRTMP_ADAPTER *ppAdapter
3495 NDIS_STATUS RTMPAllocTxRxRingMemory(
3496 IN PRTMP_ADAPTER pAd
3499 NDIS_STATUS RTMPFindAdapter(
3500 IN PRTMP_ADAPTER pAd,
3501 IN NDIS_HANDLE WrapperConfigurationContext
3504 NDIS_STATUS RTMPReadParametersHook(
3505 IN PRTMP_ADAPTER pAd
3508 VOID RTMPFreeAdapter(
3509 IN PRTMP_ADAPTER pAd
3512 NDIS_STATUS NICReadRegParameters(
3513 IN PRTMP_ADAPTER pAd,
3514 IN NDIS_HANDLE WrapperConfigurationContext
3518 VOID NICReadEEPROMParameters(
3519 IN PRTMP_ADAPTER pAd,
3520 IN PUCHAR mac_addr);
3522 VOID NICInitAsicFromEEPROM(
3523 IN PRTMP_ADAPTER pAd);
3525 VOID NICInitTxRxRingAndBacklogQueue(
3526 IN PRTMP_ADAPTER pAd);
3528 NDIS_STATUS NICInitializeAdapter(
3529 IN PRTMP_ADAPTER pAd,
3530 IN BOOLEAN bHardReset);
3532 NDIS_STATUS NICInitializeAsic(
3533 IN PRTMP_ADAPTER pAd,
3534 IN BOOLEAN bHardReset);
3536 VOID NICRestoreBBPValue(
3537 IN PRTMP_ADAPTER pAd);
3540 IN PRTMP_ADAPTER pAd);
3542 VOID RTMPRingCleanUp(
3543 IN PRTMP_ADAPTER pAd,
3547 IN PRTMP_ADAPTER pAd);
3549 NDIS_STATUS DbgSendPacket(
3550 IN PRTMP_ADAPTER pAd,
3551 IN PNDIS_PACKET pPacket);
3554 IN PRTMP_ADAPTER pAd);
3556 VOID NICResetFromError(
3557 IN PRTMP_ADAPTER pAd);
3559 VOID NICEraseFirmware(
3560 IN PRTMP_ADAPTER pAd);
3562 NDIS_STATUS NICLoadFirmware(
3563 IN PRTMP_ADAPTER pAd);
3565 NDIS_STATUS NICLoadRateSwitchingParams(
3566 IN PRTMP_ADAPTER pAd);
3568 BOOLEAN NICCheckForHang(
3569 IN PRTMP_ADAPTER pAd);
3571 VOID NICUpdateFifoStaCounters(
3572 IN PRTMP_ADAPTER pAd);
3574 VOID NICUpdateRawCounters(
3575 IN PRTMP_ADAPTER pAd);
3577 ULONG RTMPNotAllZero(
3581 VOID RTMPZeroMemory(
3585 ULONG RTMPCompareMemory(
3590 VOID RTMPMoveMemory(
3603 VOID RTMPPatchMacBbpBug(
3604 IN PRTMP_ADAPTER pAd);
3606 VOID RTMPPatchCardBus(
3607 IN PRTMP_ADAPTER pAdapter);
3609 VOID RTMPPatchRalinkCardBus(
3610 IN PRTMP_ADAPTER pAdapter,
3613 ULONG RTMPReadCBConfig(
3619 VOID RTMPWriteCBConfig(
3627 IN PRTMP_ADAPTER pAd,
3628 IN PRALINK_TIMER_STRUCT pTimer,
3629 IN PVOID pTimerFunc,
3634 IN PRALINK_TIMER_STRUCT pTimer,
3639 IN PRALINK_TIMER_STRUCT pTimer,
3642 VOID RTMPCancelTimer(
3643 IN PRALINK_TIMER_STRUCT pTimer,
3644 OUT BOOLEAN *pCancelled);
3647 IN PRTMP_ADAPTER pAd,
3650 VOID RTMPSetSignalLED(
3651 IN PRTMP_ADAPTER pAd,
3652 IN NDIS_802_11_RSSI Dbm);
3654 VOID RTMPEnableRxTx(
3655 IN PRTMP_ADAPTER pAd);
3658 // prototype in action.c
3660 VOID ActionStateMachineInit(
3661 IN PRTMP_ADAPTER pAd,
3662 IN STATE_MACHINE *S,
3663 OUT STATE_MACHINE_FUNC Trans[]);
3665 VOID MlmeADDBAAction(
3666 IN PRTMP_ADAPTER pAd,
3667 IN MLME_QUEUE_ELEM *Elem);
3669 VOID MlmeDELBAAction(
3670 IN PRTMP_ADAPTER pAd,
3671 IN MLME_QUEUE_ELEM *Elem);
3674 IN PRTMP_ADAPTER pAd,
3675 IN MLME_QUEUE_ELEM *Elem);
3677 VOID MlmeInvalidAction(
3678 IN PRTMP_ADAPTER pAd,
3679 IN MLME_QUEUE_ELEM *Elem);
3682 IN PRTMP_ADAPTER pAd,
3683 IN MLME_QUEUE_ELEM *Elem);
3685 #ifdef DOT11_N_SUPPORT
3686 VOID PeerAddBAReqAction(
3687 IN PRTMP_ADAPTER pAd,
3688 IN MLME_QUEUE_ELEM *Elem);
3690 VOID PeerAddBARspAction(
3691 IN PRTMP_ADAPTER pAd,
3692 IN MLME_QUEUE_ELEM *Elem);
3694 VOID PeerDelBAAction(
3695 IN PRTMP_ADAPTER pAd,
3696 IN MLME_QUEUE_ELEM *Elem);
3699 IN PRTMP_ADAPTER pAd,
3700 IN MLME_QUEUE_ELEM *Elem);
3701 #endif // DOT11_N_SUPPORT //
3703 VOID SendPSMPAction(
3704 IN PRTMP_ADAPTER pAd,
3709 #ifdef DOT11N_DRAFT3
3710 VOID SendBSS2040CoexistMgmtAction(
3711 IN PRTMP_ADAPTER pAd,
3716 VOID SendNotifyBWActionFrame(
3717 IN PRTMP_ADAPTER pAd,
3721 BOOLEAN ChannelSwitchSanityCheck(
3722 IN PRTMP_ADAPTER pAd,
3724 IN UCHAR NewChannel,
3725 IN UCHAR Secondary);
3727 VOID ChannelSwitchAction(
3728 IN PRTMP_ADAPTER pAd,
3731 IN UCHAR Secondary);
3733 ULONG BuildIntolerantChannelRep(
3734 IN PRTMP_ADAPTER pAd,
3737 VOID Update2040CoexistFrameAndNotify(
3738 IN PRTMP_ADAPTER pAd,
3740 IN BOOLEAN bAddIntolerantCha);
3742 VOID Send2040CoexistAction(
3743 IN PRTMP_ADAPTER pAd,
3745 IN BOOLEAN bAddIntolerantCha);
3746 #endif // DOT11N_DRAFT3 //
3749 IN PRTMP_ADAPTER pAd,
3750 IN MLME_QUEUE_ELEM *Elem);
3752 VOID PeerPublicAction(
3753 IN PRTMP_ADAPTER pAd,
3754 IN MLME_QUEUE_ELEM *Elem);
3756 #ifdef CONFIG_STA_SUPPORT
3757 VOID StaPublicAction(
3758 IN PRTMP_ADAPTER pAd,
3759 IN UCHAR Bss2040Coexist);
3760 #endif // CONFIG_STA_SUPPORT //
3763 VOID PeerBSSTranAction(
3764 IN PRTMP_ADAPTER pAd,
3765 IN MLME_QUEUE_ELEM *Elem);
3767 #ifdef DOT11_N_SUPPORT
3769 IN PRTMP_ADAPTER pAd,
3770 IN MLME_QUEUE_ELEM *Elem);
3771 #endif // DOT11_N_SUPPORT //
3774 IN PRTMP_ADAPTER pAd,
3775 IN MLME_QUEUE_ELEM *Elem);
3777 #ifdef QOS_DLS_SUPPORT
3779 IN PRTMP_ADAPTER pAd,
3780 IN MLME_QUEUE_ELEM *Elem);
3781 #endif // QOS_DLS_SUPPORT //
3783 #ifdef CONFIG_STA_SUPPORT
3784 #ifdef QOS_DLS_SUPPORT
3786 IN PRTMP_ADAPTER pAd,
3787 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3788 IN PRT_802_11_DLS pDls,
3790 #endif // QOS_DLS_SUPPORT //
3791 #endif // CONFIG_STA_SUPPORT //
3793 #ifdef DOT11_N_SUPPORT
3794 VOID RECBATimerTimeout(
3795 IN PVOID SystemSpecific1,
3796 IN PVOID FunctionContext,
3797 IN PVOID SystemSpecific2,
3798 IN PVOID SystemSpecific3);
3800 VOID ORIBATimerTimeout(
3801 IN PRTMP_ADAPTER pAd);
3803 VOID SendRefreshBAR(
3804 IN PRTMP_ADAPTER pAd,
3805 IN MAC_TABLE_ENTRY *pEntry);
3806 #endif // DOT11_N_SUPPORT //
3809 IN PRTMP_ADAPTER pAd,
3810 IN OUT PHEADER_802_11 pHdr80211,
3816 IN PRTMP_ADAPTER pAd,
3817 IN OUT PFRAME_BAR pCntlBar,
3821 VOID InsertActField(
3822 IN PRTMP_ADAPTER pAd,
3823 OUT PUCHAR pFrameBuf,
3824 OUT PULONG pFrameLen,
3828 BOOLEAN QosBADataParse(
3829 IN PRTMP_ADAPTER pAd,
3831 IN PUCHAR p8023Header,
3835 IN UCHAR DataOffset,
3837 IN UINT CurRxIndex);
3839 #ifdef DOT11_N_SUPPORT
3840 BOOLEAN CntlEnqueueForRecv(
3841 IN PRTMP_ADAPTER pAd,
3844 IN PFRAME_BA_REQ pMsg);
3846 VOID BaAutoManSwitch(
3847 IN PRTMP_ADAPTER pAd);
3848 #endif // DOT11_N_SUPPORT //
3851 IN PRTMP_ADAPTER pAd,
3852 IN UCHAR BatRecIdx);
3855 // Private routines in rtmp_data.c
3857 BOOLEAN RTMPHandleRxDoneInterrupt(
3858 IN PRTMP_ADAPTER pAd);
3860 VOID RTMPHandleTxDoneInterrupt(
3861 IN PRTMP_ADAPTER pAd);
3863 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3864 IN PRTMP_ADAPTER pAd,
3865 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3867 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3868 IN PRTMP_ADAPTER pAd);
3870 VOID RTMPHandleTBTTInterrupt(
3871 IN PRTMP_ADAPTER pAd);
3873 VOID RTMPHandlePreTBTTInterrupt(
3874 IN PRTMP_ADAPTER pAd);
3876 void RTMPHandleTwakeupInterrupt(
3877 IN PRTMP_ADAPTER pAd);
3879 VOID RTMPHandleRxCoherentInterrupt(
3880 IN PRTMP_ADAPTER pAd);
3882 BOOLEAN TxFrameIsAggregatible(
3883 IN PRTMP_ADAPTER pAd,
3884 IN PUCHAR pPrevAddr1,
3885 IN PUCHAR p8023hdr);
3887 BOOLEAN PeerIsAggreOn(
3888 IN PRTMP_ADAPTER pAd,
3890 IN PMAC_TABLE_ENTRY pMacEntry);
3892 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3893 IN PNDIS_BUFFER pFirstBuffer,
3894 IN UCHAR DesiredOffset,
3898 NDIS_STATUS STASendPacket(
3899 IN PRTMP_ADAPTER pAd,
3900 IN PNDIS_PACKET pPacket);
3902 VOID STASendPackets(
3903 IN NDIS_HANDLE MiniportAdapterContext,
3904 IN PPNDIS_PACKET ppPacketArray,
3905 IN UINT NumberOfPackets);
3907 VOID RTMPDeQueuePacket(
3908 IN PRTMP_ADAPTER pAd,
3909 IN BOOLEAN bIntContext,
3911 IN UCHAR Max_Tx_Packets);
3913 NDIS_STATUS RTMPHardTransmit(
3914 IN PRTMP_ADAPTER pAd,
3915 IN PNDIS_PACKET pPacket,
3917 OUT PULONG pFreeTXDLeft);
3919 NDIS_STATUS STAHardTransmit(
3920 IN PRTMP_ADAPTER pAd,
3924 VOID STARxEAPOLFrameIndicate(
3925 IN PRTMP_ADAPTER pAd,
3926 IN MAC_TABLE_ENTRY *pEntry,
3928 IN UCHAR FromWhichBSSID);
3930 NDIS_STATUS RTMPFreeTXDRequest(
3931 IN PRTMP_ADAPTER pAd,
3933 IN UCHAR NumberRequired,
3934 IN PUCHAR FreeNumberIs);
3936 NDIS_STATUS MlmeHardTransmit(
3937 IN PRTMP_ADAPTER pAd,
3939 IN PNDIS_PACKET pPacket);
3941 NDIS_STATUS MlmeHardTransmitMgmtRing(
3942 IN PRTMP_ADAPTER pAd,
3944 IN PNDIS_PACKET pPacket);
3946 NDIS_STATUS MlmeHardTransmitTxRing(
3947 IN PRTMP_ADAPTER pAd,
3949 IN PNDIS_PACKET pPacket);
3951 USHORT RTMPCalcDuration(
3952 IN PRTMP_ADAPTER pAd,
3957 IN PRTMP_ADAPTER pAd,
3958 IN PTXWI_STRUC pTxWI,
3961 IN BOOLEAN InsTimestamp,
3964 IN BOOLEAN NSeq, // HW new a sequence.
3973 IN HTTRANSMIT_SETTING *pTransmit);
3976 VOID RTMPWriteTxWI_Data(
3977 IN PRTMP_ADAPTER pAd,
3978 IN OUT PTXWI_STRUC pTxWI,
3982 VOID RTMPWriteTxWI_Cache(
3983 IN PRTMP_ADAPTER pAd,
3984 IN OUT PTXWI_STRUC pTxWI,
3987 VOID RTMPWriteTxDescriptor(
3988 IN PRTMP_ADAPTER pAd,
3993 VOID RTMPSuspendMsduTransmission(
3994 IN PRTMP_ADAPTER pAd);
3996 VOID RTMPResumeMsduTransmission(
3997 IN PRTMP_ADAPTER pAd);
3999 NDIS_STATUS MiniportMMRequest(
4000 IN PRTMP_ADAPTER pAd,
4005 VOID RTMPSendNullFrame(
4006 IN PRTMP_ADAPTER pAd,
4008 IN BOOLEAN bQosNull);
4010 VOID RTMPSendDisassociationFrame(
4011 IN PRTMP_ADAPTER pAd);
4013 VOID RTMPSendRTSFrame(
4014 IN PRTMP_ADAPTER pAd,
4016 IN unsigned int NextMpduSize,
4019 IN USHORT AckDuration,
4024 NDIS_STATUS RTMPApplyPacketFilter(
4025 IN PRTMP_ADAPTER pAd,
4026 IN PRT28XX_RXD_STRUC pRxD,
4027 IN PHEADER_802_11 pHeader);
4029 PQUEUE_HEADER RTMPCheckTxSwQueue(
4030 IN PRTMP_ADAPTER pAd,
4033 #ifdef CONFIG_STA_SUPPORT
4034 VOID RTMPReportMicError(
4035 IN PRTMP_ADAPTER pAd,
4036 IN PCIPHER_KEY pWpaKey);
4038 VOID WpaMicFailureReportFrame(
4039 IN PRTMP_ADAPTER pAd,
4040 IN MLME_QUEUE_ELEM *Elem);
4042 VOID WpaDisassocApAndBlockAssoc(
4043 IN PVOID SystemSpecific1,
4044 IN PVOID FunctionContext,
4045 IN PVOID SystemSpecific2,
4046 IN PVOID SystemSpecific3);
4047 #endif // CONFIG_STA_SUPPORT //
4049 NDIS_STATUS RTMPCloneNdisPacket(
4050 IN PRTMP_ADAPTER pAd,
4051 IN BOOLEAN pInsAMSDUHdr,
4052 IN PNDIS_PACKET pInPacket,
4053 OUT PNDIS_PACKET *ppOutPacket);
4055 NDIS_STATUS RTMPAllocateNdisPacket(
4056 IN PRTMP_ADAPTER pAd,
4057 IN PNDIS_PACKET *pPacket,
4063 VOID RTMPFreeNdisPacket(
4064 IN PRTMP_ADAPTER pAd,
4065 IN PNDIS_PACKET pPacket);
4067 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4068 IN PRTMP_ADAPTER pAd,
4071 BOOLEAN RTMPCheckDHCPFrame(
4072 IN PRTMP_ADAPTER pAd,
4073 IN PNDIS_PACKET pPacket);
4076 BOOLEAN RTMPCheckEtherType(
4077 IN PRTMP_ADAPTER pAd,
4078 IN PNDIS_PACKET pPacket);
4081 VOID RTMPCckBbpTuning(
4082 IN PRTMP_ADAPTER pAd,
4086 // Private routines in rtmp_wep.c
4088 VOID RTMPInitWepEngine(
4089 IN PRTMP_ADAPTER pAd,
4095 VOID RTMPEncryptData(
4096 IN PRTMP_ADAPTER pAd,
4101 BOOLEAN RTMPDecryptData(
4102 IN PRTMP_ADAPTER pAdapter,
4107 BOOLEAN RTMPSoftDecryptWEP(
4108 IN PRTMP_ADAPTER pAd,
4110 IN ULONG DataByteCnt,
4111 IN PCIPHER_KEY pGroupKey);
4114 IN PRTMP_ADAPTER pAd,
4118 IN PARCFOURCONTEXT Ctx,
4123 IN PARCFOURCONTEXT Ctx);
4125 VOID ARCFOUR_DECRYPT(
4126 IN PARCFOURCONTEXT Ctx,
4131 VOID ARCFOUR_ENCRYPT(
4132 IN PARCFOURCONTEXT Ctx,
4137 VOID WPAARCFOUR_ENCRYPT(
4138 IN PARCFOURCONTEXT Ctx,
4143 UINT RTMP_CALC_FCS32(
4152 // Asic/RF/BBP related functions
4154 VOID AsicAdjustTxPower(
4155 IN PRTMP_ADAPTER pAd);
4157 VOID AsicUpdateProtect(
4158 IN PRTMP_ADAPTER pAd,
4159 IN USHORT OperaionMode,
4161 IN BOOLEAN bDisableBGProtect,
4162 IN BOOLEAN bNonGFExist);
4164 VOID AsicSwitchChannel(
4165 IN PRTMP_ADAPTER pAd,
4169 VOID AsicLockChannel(
4170 IN PRTMP_ADAPTER pAd,
4173 VOID AsicAntennaSelect(
4174 IN PRTMP_ADAPTER pAd,
4177 VOID AsicAntennaSetting(
4178 IN PRTMP_ADAPTER pAd,
4179 IN ABGBAND_STATE BandState);
4181 VOID AsicRfTuningExec(
4182 IN PVOID SystemSpecific1,
4183 IN PVOID FunctionContext,
4184 IN PVOID SystemSpecific2,
4185 IN PVOID SystemSpecific3);
4187 #ifdef CONFIG_STA_SUPPORT
4188 VOID AsicSleepThenAutoWakeup(
4189 IN PRTMP_ADAPTER pAd,
4190 IN USHORT TbttNumToNextWakeUp);
4192 VOID AsicForceSleep(
4193 IN PRTMP_ADAPTER pAd);
4195 VOID AsicForceWakeup(
4196 IN PRTMP_ADAPTER pAd,
4198 #endif // CONFIG_STA_SUPPORT //
4201 IN PRTMP_ADAPTER pAd,
4204 VOID AsicSetMcastWC(
4205 IN PRTMP_ADAPTER pAd);
4207 VOID AsicDelWcidTab(
4208 IN PRTMP_ADAPTER pAd,
4212 IN PRTMP_ADAPTER pAd);
4214 VOID AsicDisableRDG(
4215 IN PRTMP_ADAPTER pAd);
4217 VOID AsicDisableSync(
4218 IN PRTMP_ADAPTER pAd);
4220 VOID AsicEnableBssSync(
4221 IN PRTMP_ADAPTER pAd);
4223 VOID AsicEnableIbssSync(
4224 IN PRTMP_ADAPTER pAd);
4226 VOID AsicSetEdcaParm(
4227 IN PRTMP_ADAPTER pAd,
4228 IN PEDCA_PARM pEdcaParm);
4230 VOID AsicSetSlotTime(
4231 IN PRTMP_ADAPTER pAd,
4232 IN BOOLEAN bUseShortSlotTime);
4234 VOID AsicAddSharedKeyEntry(
4235 IN PRTMP_ADAPTER pAd,
4243 VOID AsicRemoveSharedKeyEntry(
4244 IN PRTMP_ADAPTER pAd,
4248 VOID AsicUpdateWCIDAttribute(
4249 IN PRTMP_ADAPTER pAd,
4253 IN BOOLEAN bUsePairewiseKeyTable);
4255 VOID AsicUpdateWCIDIVEIV(
4256 IN PRTMP_ADAPTER pAd,
4261 VOID AsicUpdateRxWCIDTable(
4262 IN PRTMP_ADAPTER pAd,
4266 VOID AsicAddKeyEntry(
4267 IN PRTMP_ADAPTER pAd,
4271 IN PCIPHER_KEY pCipherKey,
4272 IN BOOLEAN bUsePairewiseKeyTable,
4275 VOID AsicAddPairwiseKeyEntry(
4276 IN PRTMP_ADAPTER pAd,
4279 IN CIPHER_KEY *pCipherKey);
4281 VOID AsicRemovePairwiseKeyEntry(
4282 IN PRTMP_ADAPTER pAd,
4286 BOOLEAN AsicSendCommandToMcu(
4287 IN PRTMP_ADAPTER pAd,
4293 BOOLEAN AsicCheckCommanOk(
4294 IN PRTMP_ADAPTER pAd,
4297 VOID MacAddrRandomBssid(
4298 IN PRTMP_ADAPTER pAd,
4301 VOID MgtMacHeaderInit(
4302 IN PRTMP_ADAPTER pAd,
4303 IN OUT PHEADER_802_11 pHdr80211,
4310 IN PRTMP_ADAPTER pAd);
4313 IN PRTMP_ADAPTER pAd);
4319 #ifdef DOT11_N_SUPPORT
4321 IN PRTMP_ADAPTER pAd,
4323 #endif // DOT11_N_SUPPORT //
4325 ULONG BssTableSearch(
4330 ULONG BssSsidTableSearch(
4337 ULONG BssTableSearchWithSSID(
4344 VOID BssTableDeleteEntry(
4345 IN OUT PBSS_TABLE pTab,
4349 #ifdef DOT11_N_SUPPORT
4350 VOID BATableDeleteORIEntry(
4351 IN OUT PRTMP_ADAPTER pAd,
4352 IN BA_ORI_ENTRY *pBAORIEntry);
4354 VOID BATableDeleteRECEntry(
4355 IN OUT PRTMP_ADAPTER pAd,
4356 IN BA_REC_ENTRY *pBARECEntry);
4358 VOID BATableTearORIEntry(
4359 IN OUT PRTMP_ADAPTER pAd,
4362 IN BOOLEAN bForceDelete,
4365 VOID BATableTearRECEntry(
4366 IN OUT PRTMP_ADAPTER pAd,
4370 #endif // DOT11_N_SUPPORT //
4373 IN PRTMP_ADAPTER pAd,
4374 OUT PBSS_ENTRY pBss,
4379 IN USHORT BeaconPeriod,
4382 IN USHORT CapabilityInfo,
4384 IN UCHAR SupRateLen,
4386 IN UCHAR ExtRateLen,
4387 IN HT_CAPABILITY_IE *pHtCapability,
4388 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4389 IN UCHAR HtCapabilityLen,
4390 IN UCHAR AddHtInfoLen,
4391 IN UCHAR NewExtChanOffset,
4394 IN LARGE_INTEGER TimeStamp,
4396 IN PEDCA_PARM pEdcaParm,
4397 IN PQOS_CAPABILITY_PARM pQosCapability,
4398 IN PQBSS_LOAD_PARM pQbssLoad,
4399 IN USHORT LengthVIE,
4400 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4402 ULONG BssTableSetEntry(
4403 IN PRTMP_ADAPTER pAd,
4404 OUT PBSS_TABLE pTab,
4409 IN USHORT BeaconPeriod,
4412 IN USHORT CapabilityInfo,
4414 IN UCHAR SupRateLen,
4416 IN UCHAR ExtRateLen,
4417 IN HT_CAPABILITY_IE *pHtCapability,
4418 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4419 IN UCHAR HtCapabilityLen,
4420 IN UCHAR AddHtInfoLen,
4421 IN UCHAR NewExtChanOffset,
4424 IN LARGE_INTEGER TimeStamp,
4426 IN PEDCA_PARM pEdcaParm,
4427 IN PQOS_CAPABILITY_PARM pQosCapability,
4428 IN PQBSS_LOAD_PARM pQbssLoad,
4429 IN USHORT LengthVIE,
4430 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4432 #ifdef DOT11_N_SUPPORT
4433 VOID BATableInsertEntry(
4434 IN PRTMP_ADAPTER pAd,
4436 IN USHORT TimeOutValue,
4437 IN USHORT StartingSeq,
4440 IN UCHAR OriginatorStatus,
4441 IN BOOLEAN IsRecipient);
4443 #ifdef DOT11N_DRAFT3
4444 VOID Bss2040CoexistTimeOut(
4445 IN PVOID SystemSpecific1,
4446 IN PVOID FunctionContext,
4447 IN PVOID SystemSpecific2,
4448 IN PVOID SystemSpecific3);
4452 IN PRTMP_ADAPTER pAd);
4454 ULONG TriEventTableSetEntry(
4455 IN PRTMP_ADAPTER pAd,
4456 OUT TRIGGER_EVENT_TAB *Tab,
4458 IN HT_CAPABILITY_IE *pHtCapability,
4459 IN UCHAR HtCapabilityLen,
4461 IN UCHAR ChannelNo);
4463 VOID TriEventCounterMaintenance(
4464 IN PRTMP_ADAPTER pAd);
4465 #endif // DOT11N_DRAFT3 //
4466 #endif // DOT11_N_SUPPORT //
4468 VOID BssTableSsidSort(
4469 IN PRTMP_ADAPTER pAd,
4470 OUT BSS_TABLE *OutTab,
4474 VOID BssTableSortByRssi(
4475 IN OUT BSS_TABLE *OutTab);
4477 VOID BssCipherParse(
4478 IN OUT PBSS_ENTRY pBss);
4480 NDIS_STATUS MlmeQueueInit(
4481 IN MLME_QUEUE *Queue);
4483 VOID MlmeQueueDestroy(
4484 IN MLME_QUEUE *Queue);
4486 BOOLEAN MlmeEnqueue(
4487 IN PRTMP_ADAPTER pAd,
4493 BOOLEAN MlmeEnqueueForRecv(
4494 IN PRTMP_ADAPTER pAd,
4496 IN ULONG TimeStampHigh,
4497 IN ULONG TimeStampLow,
4506 BOOLEAN MlmeDequeue(
4507 IN MLME_QUEUE *Queue,
4508 OUT MLME_QUEUE_ELEM **Elem);
4510 VOID MlmeRestartStateMachine(
4511 IN PRTMP_ADAPTER pAd);
4513 BOOLEAN MlmeQueueEmpty(
4514 IN MLME_QUEUE *Queue);
4516 BOOLEAN MlmeQueueFull(
4517 IN MLME_QUEUE *Queue);
4519 BOOLEAN MsgTypeSubst(
4520 IN PRTMP_ADAPTER pAd,
4521 IN PFRAME_802_11 pFrame,
4525 VOID StateMachineInit(
4526 IN STATE_MACHINE *Sm,
4527 IN STATE_MACHINE_FUNC Trans[],
4530 IN STATE_MACHINE_FUNC DefFunc,
4534 VOID StateMachineSetAction(
4535 IN STATE_MACHINE *S,
4538 IN STATE_MACHINE_FUNC F);
4540 VOID StateMachinePerformAction(
4541 IN PRTMP_ADAPTER pAd,
4542 IN STATE_MACHINE *S,
4543 IN MLME_QUEUE_ELEM *Elem);
4546 IN PRTMP_ADAPTER pAd,
4547 IN MLME_QUEUE_ELEM *Elem);
4549 VOID AssocStateMachineInit(
4550 IN PRTMP_ADAPTER pAd,
4551 IN STATE_MACHINE *Sm,
4552 OUT STATE_MACHINE_FUNC Trans[]);
4554 VOID ReassocTimeout(
4555 IN PVOID SystemSpecific1,
4556 IN PVOID FunctionContext,
4557 IN PVOID SystemSpecific2,
4558 IN PVOID SystemSpecific3);
4561 IN PVOID SystemSpecific1,
4562 IN PVOID FunctionContext,
4563 IN PVOID SystemSpecific2,
4564 IN PVOID SystemSpecific3);
4566 VOID DisassocTimeout(
4567 IN PVOID SystemSpecific1,
4568 IN PVOID FunctionContext,
4569 IN PVOID SystemSpecific2,
4570 IN PVOID SystemSpecific3);
4572 //----------------------------------------------
4573 VOID MlmeDisassocReqAction(
4574 IN PRTMP_ADAPTER pAd,
4575 IN MLME_QUEUE_ELEM *Elem);
4577 VOID MlmeAssocReqAction(
4578 IN PRTMP_ADAPTER pAd,
4579 IN MLME_QUEUE_ELEM *Elem);
4581 VOID MlmeReassocReqAction(
4582 IN PRTMP_ADAPTER pAd,
4583 IN MLME_QUEUE_ELEM *Elem);
4585 VOID MlmeDisassocReqAction(
4586 IN PRTMP_ADAPTER pAd,
4587 IN MLME_QUEUE_ELEM *Elem);
4589 VOID PeerAssocRspAction(
4590 IN PRTMP_ADAPTER pAd,
4591 IN MLME_QUEUE_ELEM *Elem);
4593 VOID PeerReassocRspAction(
4594 IN PRTMP_ADAPTER pAd,
4595 IN MLME_QUEUE_ELEM *Elem);
4597 VOID PeerDisassocAction(
4598 IN PRTMP_ADAPTER pAd,
4599 IN MLME_QUEUE_ELEM *Elem);
4601 VOID DisassocTimeoutAction(
4602 IN PRTMP_ADAPTER pAd,
4603 IN MLME_QUEUE_ELEM *Elem);
4605 VOID AssocTimeoutAction(
4606 IN PRTMP_ADAPTER pAd,
4607 IN MLME_QUEUE_ELEM *Elem);
4609 VOID ReassocTimeoutAction(
4610 IN PRTMP_ADAPTER pAd,
4611 IN MLME_QUEUE_ELEM *Elem);
4614 IN PRTMP_ADAPTER pAd,
4617 VOID SwitchBetweenWepAndCkip(
4618 IN PRTMP_ADAPTER pAd);
4620 VOID InvalidStateWhenAssoc(
4621 IN PRTMP_ADAPTER pAd,
4622 IN MLME_QUEUE_ELEM *Elem);
4624 VOID InvalidStateWhenReassoc(
4625 IN PRTMP_ADAPTER pAd,
4626 IN MLME_QUEUE_ELEM *Elem);
4628 VOID InvalidStateWhenDisassociate(
4629 IN PRTMP_ADAPTER pAd,
4630 IN MLME_QUEUE_ELEM *Elem);
4634 IN PRTMP_ADAPTER pAd);
4636 VOID ComposeNullFrame(
4637 IN PRTMP_ADAPTER pAd);
4640 IN PRTMP_ADAPTER pAd,
4642 IN USHORT CapabilityInfo,
4645 IN UCHAR SupRateLen,
4647 IN UCHAR ExtRateLen,
4648 IN PEDCA_PARM pEdcaParm,
4649 IN HT_CAPABILITY_IE *pHtCapability,
4650 IN UCHAR HtCapabilityLen,
4651 IN ADD_HT_INFO_IE *pAddHtInfo);
4653 VOID AuthStateMachineInit(
4654 IN PRTMP_ADAPTER pAd,
4655 IN PSTATE_MACHINE sm,
4656 OUT STATE_MACHINE_FUNC Trans[]);
4659 IN PVOID SystemSpecific1,
4660 IN PVOID FunctionContext,
4661 IN PVOID SystemSpecific2,
4662 IN PVOID SystemSpecific3);
4664 VOID MlmeAuthReqAction(
4665 IN PRTMP_ADAPTER pAd,
4666 IN MLME_QUEUE_ELEM *Elem);
4668 VOID PeerAuthRspAtSeq2Action(
4669 IN PRTMP_ADAPTER pAd,
4670 IN MLME_QUEUE_ELEM *Elem);
4672 VOID PeerAuthRspAtSeq4Action(
4673 IN PRTMP_ADAPTER pAd,
4674 IN MLME_QUEUE_ELEM *Elem);
4676 VOID AuthTimeoutAction(
4677 IN PRTMP_ADAPTER pAd,
4678 IN MLME_QUEUE_ELEM *Elem);
4681 IN PRTMP_ADAPTER pAd,
4684 VOID MlmeDeauthReqAction(
4685 IN PRTMP_ADAPTER pAd,
4686 IN MLME_QUEUE_ELEM *Elem);
4688 VOID InvalidStateWhenAuth(
4689 IN PRTMP_ADAPTER pAd,
4690 IN MLME_QUEUE_ELEM *Elem);
4692 //=============================================
4694 VOID AuthRspStateMachineInit(
4695 IN PRTMP_ADAPTER pAd,
4696 IN PSTATE_MACHINE Sm,
4697 IN STATE_MACHINE_FUNC Trans[]);
4699 VOID PeerDeauthAction(
4700 IN PRTMP_ADAPTER pAd,
4701 IN MLME_QUEUE_ELEM *Elem);
4703 VOID PeerAuthSimpleRspGenAndSend(
4704 IN PRTMP_ADAPTER pAd,
4705 IN PHEADER_802_11 pHdr80211,
4712 // Private routines in dls.c
4715 #ifdef CONFIG_STA_SUPPORT
4716 #ifdef QOS_DLS_SUPPORT
4717 void DlsStateMachineInit(
4718 IN PRTMP_ADAPTER pAd,
4719 IN STATE_MACHINE *Sm,
4720 OUT STATE_MACHINE_FUNC Trans[]);
4722 VOID MlmeDlsReqAction(
4723 IN PRTMP_ADAPTER pAd,
4724 IN MLME_QUEUE_ELEM *Elem);
4726 VOID PeerDlsReqAction(
4727 IN PRTMP_ADAPTER pAd,
4728 IN MLME_QUEUE_ELEM *Elem);
4730 VOID PeerDlsRspAction(
4731 IN PRTMP_ADAPTER pAd,
4732 IN MLME_QUEUE_ELEM *Elem);
4734 VOID MlmeDlsTearDownAction(
4735 IN PRTMP_ADAPTER pAd,
4736 IN MLME_QUEUE_ELEM *Elem);
4738 VOID PeerDlsTearDownAction(
4739 IN PRTMP_ADAPTER pAd,
4740 IN MLME_QUEUE_ELEM *Elem);
4742 VOID RTMPCheckDLSTimeOut(
4743 IN PRTMP_ADAPTER pAd);
4745 BOOLEAN RTMPRcvFrameDLSCheck(
4746 IN PRTMP_ADAPTER pAd,
4747 IN PHEADER_802_11 pHeader,
4749 IN PRT28XX_RXD_STRUC pRxD);
4751 INT RTMPCheckDLSFrame(
4752 IN PRTMP_ADAPTER pAd,
4755 VOID RTMPSendDLSTearDownFrame(
4756 IN PRTMP_ADAPTER pAd,
4759 NDIS_STATUS RTMPSendSTAKeyRequest(
4760 IN PRTMP_ADAPTER pAd,
4763 NDIS_STATUS RTMPSendSTAKeyHandShake(
4764 IN PRTMP_ADAPTER pAd,
4767 VOID DlsTimeoutAction(
4768 IN PVOID SystemSpecific1,
4769 IN PVOID FunctionContext,
4770 IN PVOID SystemSpecific2,
4771 IN PVOID SystemSpecific3);
4773 BOOLEAN MlmeDlsReqSanity(
4774 IN PRTMP_ADAPTER pAd,
4777 OUT PRT_802_11_DLS *pDLS,
4778 OUT PUSHORT pReason);
4780 INT Set_DlsEntryInfo_Display_Proc(
4781 IN PRTMP_ADAPTER pAd,
4784 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4785 IN PRTMP_ADAPTER pAd,
4787 IN UINT DlsEntryIdx);
4789 BOOLEAN MacTableDeleteDlsEntry(
4790 IN PRTMP_ADAPTER pAd,
4794 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4795 IN PRTMP_ADAPTER pAd,
4797 IN BOOLEAN bResetIdelCount);
4799 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4800 IN PRTMP_ADAPTER pAd,
4803 IN BOOLEAN bResetIdelCount);
4805 INT Set_DlsAddEntry_Proc(
4806 IN PRTMP_ADAPTER pAd,
4809 INT Set_DlsTearDownEntry_Proc(
4810 IN PRTMP_ADAPTER pAd,
4812 #endif // QOS_DLS_SUPPORT //
4813 #endif // CONFIG_STA_SUPPORT //
4815 #ifdef QOS_DLS_SUPPORT
4816 BOOLEAN PeerDlsReqSanity(
4817 IN PRTMP_ADAPTER pAd,
4822 OUT USHORT *pCapabilityInfo,
4823 OUT USHORT *pDlsTimeout,
4824 OUT UCHAR *pRatesLen,
4826 OUT UCHAR *pHtCapabilityLen,
4827 OUT HT_CAPABILITY_IE *pHtCapability);
4829 BOOLEAN PeerDlsRspSanity(
4830 IN PRTMP_ADAPTER pAd,
4835 OUT USHORT *pCapabilityInfo,
4836 OUT USHORT *pStatus,
4837 OUT UCHAR *pRatesLen,
4839 OUT UCHAR *pHtCapabilityLen,
4840 OUT HT_CAPABILITY_IE *pHtCapability);
4842 BOOLEAN PeerDlsTearDownSanity(
4843 IN PRTMP_ADAPTER pAd,
4848 OUT USHORT *pReason);
4849 #endif // QOS_DLS_SUPPORT //
4851 //========================================
4853 VOID SyncStateMachineInit(
4854 IN PRTMP_ADAPTER pAd,
4855 IN STATE_MACHINE *Sm,
4856 OUT STATE_MACHINE_FUNC Trans[]);
4859 IN PVOID SystemSpecific1,
4860 IN PVOID FunctionContext,
4861 IN PVOID SystemSpecific2,
4862 IN PVOID SystemSpecific3);
4865 IN PVOID SystemSpecific1,
4866 IN PVOID FunctionContext,
4867 IN PVOID SystemSpecific2,
4868 IN PVOID SystemSpecific3);
4870 VOID MlmeScanReqAction(
4871 IN PRTMP_ADAPTER pAd,
4872 IN MLME_QUEUE_ELEM *Elem);
4874 VOID InvalidStateWhenScan(
4875 IN PRTMP_ADAPTER pAd,
4876 IN MLME_QUEUE_ELEM *Elem);
4878 VOID InvalidStateWhenJoin(
4879 IN PRTMP_ADAPTER pAd,
4880 IN MLME_QUEUE_ELEM *Elem);
4882 VOID InvalidStateWhenStart(
4883 IN PRTMP_ADAPTER pAd,
4884 IN MLME_QUEUE_ELEM *Elem);
4887 IN PRTMP_ADAPTER pAd,
4888 IN MLME_QUEUE_ELEM *Elem);
4890 VOID EnqueueProbeRequest(
4891 IN PRTMP_ADAPTER pAd);
4893 BOOLEAN ScanRunning(
4894 IN PRTMP_ADAPTER pAd);
4895 //=========================================
4898 IN PRTMP_ADAPTER pAd,
4899 IN STATE_MACHINE *S,
4900 OUT STATE_MACHINE_FUNC Trans[]);
4902 VOID MlmeCntlMachinePerformAction(
4903 IN PRTMP_ADAPTER pAd,
4904 IN STATE_MACHINE *S,
4905 IN MLME_QUEUE_ELEM *Elem);
4908 IN PRTMP_ADAPTER pAd,
4909 IN MLME_QUEUE_ELEM *Elem);
4911 VOID CntlOidScanProc(
4912 IN PRTMP_ADAPTER pAd,
4913 IN MLME_QUEUE_ELEM *Elem);
4915 VOID CntlOidSsidProc(
4916 IN PRTMP_ADAPTER pAd,
4917 IN MLME_QUEUE_ELEM * Elem);
4919 VOID CntlOidRTBssidProc(
4920 IN PRTMP_ADAPTER pAd,
4921 IN MLME_QUEUE_ELEM * Elem);
4923 VOID CntlMlmeRoamingProc(
4924 IN PRTMP_ADAPTER pAd,
4925 IN MLME_QUEUE_ELEM * Elem);
4927 VOID CntlWaitDisassocProc(
4928 IN PRTMP_ADAPTER pAd,
4929 IN MLME_QUEUE_ELEM *Elem);
4931 VOID CntlWaitJoinProc(
4932 IN PRTMP_ADAPTER pAd,
4933 IN MLME_QUEUE_ELEM *Elem);
4935 VOID CntlWaitReassocProc(
4936 IN PRTMP_ADAPTER pAd,
4937 IN MLME_QUEUE_ELEM *Elem);
4939 VOID CntlWaitStartProc(
4940 IN PRTMP_ADAPTER pAd,
4941 IN MLME_QUEUE_ELEM *Elem);
4943 VOID CntlWaitAuthProc(
4944 IN PRTMP_ADAPTER pAd,
4945 IN MLME_QUEUE_ELEM *Elem);
4947 VOID CntlWaitAuthProc2(
4948 IN PRTMP_ADAPTER pAd,
4949 IN MLME_QUEUE_ELEM *Elem);
4951 VOID CntlWaitAssocProc(
4952 IN PRTMP_ADAPTER pAd,
4953 IN MLME_QUEUE_ELEM *Elem);
4955 #ifdef QOS_DLS_SUPPORT
4956 VOID CntlOidDLSSetupProc(
4957 IN PRTMP_ADAPTER pAd,
4958 IN MLME_QUEUE_ELEM *Elem);
4959 #endif // QOS_DLS_SUPPORT //
4962 IN PRTMP_ADAPTER pAd,
4966 IN PRTMP_ADAPTER pAd,
4967 IN BOOLEAN IsReqFromAP);
4969 VOID IterateOnBssTab(
4970 IN PRTMP_ADAPTER pAd);
4972 VOID IterateOnBssTab2(
4973 IN PRTMP_ADAPTER pAd);;
4976 IN PRTMP_ADAPTER pAd,
4977 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4981 IN PRTMP_ADAPTER pAd,
4982 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4984 IN USHORT CapabilityInfo,
4986 IN USHORT ListenIntv);
4989 IN PRTMP_ADAPTER pAd,
4990 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4996 VOID DisassocParmFill(
4997 IN PRTMP_ADAPTER pAd,
4998 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5003 IN PRTMP_ADAPTER pAd,
5004 IN OUT MLME_START_REQ_STRUCT *StartReq,
5009 IN PRTMP_ADAPTER pAd,
5010 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5015 IN PRTMP_ADAPTER pAd);
5017 VOID EnqueueBeaconFrame(
5018 IN PRTMP_ADAPTER pAd);
5020 VOID MlmeJoinReqAction(
5021 IN PRTMP_ADAPTER pAd,
5022 IN MLME_QUEUE_ELEM *Elem);
5024 VOID MlmeScanReqAction(
5025 IN PRTMP_ADAPTER pAd,
5026 IN MLME_QUEUE_ELEM *Elem);
5028 VOID MlmeStartReqAction(
5029 IN PRTMP_ADAPTER pAd,
5030 IN MLME_QUEUE_ELEM *Elem);
5032 VOID ScanTimeoutAction(
5033 IN PRTMP_ADAPTER pAd,
5034 IN MLME_QUEUE_ELEM *Elem);
5036 VOID BeaconTimeoutAtJoinAction(
5037 IN PRTMP_ADAPTER pAd,
5038 IN MLME_QUEUE_ELEM *Elem);
5040 VOID PeerBeaconAtScanAction(
5041 IN PRTMP_ADAPTER pAd,
5042 IN MLME_QUEUE_ELEM *Elem);
5044 VOID PeerBeaconAtJoinAction(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5052 VOID PeerProbeReqAction(
5053 IN PRTMP_ADAPTER pAd,
5054 IN MLME_QUEUE_ELEM *Elem);
5056 VOID ScanNextChannel(
5057 IN PRTMP_ADAPTER pAd);
5059 ULONG MakeIbssBeacon(
5060 IN PRTMP_ADAPTER pAd);
5062 VOID CCXAdjacentAPReport(
5063 IN PRTMP_ADAPTER pAd);
5065 BOOLEAN MlmeScanReqSanity(
5066 IN PRTMP_ADAPTER pAd,
5072 OUT UCHAR *ScanType);
5074 BOOLEAN PeerBeaconAndProbeRspSanity(
5075 IN PRTMP_ADAPTER pAd,
5078 IN UCHAR MsgChannel,
5082 OUT UCHAR *pSsidLen,
5083 OUT UCHAR *pBssType,
5084 OUT USHORT *pBeaconPeriod,
5085 OUT UCHAR *pChannel,
5086 OUT UCHAR *pNewChannel,
5087 OUT LARGE_INTEGER *pTimestamp,
5088 OUT CF_PARM *pCfParm,
5089 OUT USHORT *pAtimWin,
5090 OUT USHORT *pCapabilityInfo,
5092 OUT UCHAR *pDtimCount,
5093 OUT UCHAR *pDtimPeriod,
5094 OUT UCHAR *pBcastFlag,
5095 OUT UCHAR *pMessageToMe,
5096 OUT UCHAR SupRate[],
5097 OUT UCHAR *pSupRateLen,
5098 OUT UCHAR ExtRate[],
5099 OUT UCHAR *pExtRateLen,
5100 OUT UCHAR *pCkipFlag,
5101 OUT UCHAR *pAironetCellPowerLimit,
5102 OUT PEDCA_PARM pEdcaParm,
5103 OUT PQBSS_LOAD_PARM pQbssLoad,
5104 OUT PQOS_CAPABILITY_PARM pQosCapability,
5105 OUT ULONG *pRalinkIe,
5106 OUT UCHAR *pHtCapabilityLen,
5107 #ifdef CONFIG_STA_SUPPORT
5108 OUT UCHAR *pPreNHtCapabilityLen,
5109 #endif // CONFIG_STA_SUPPORT //
5110 OUT HT_CAPABILITY_IE *pHtCapability,
5111 OUT UCHAR *AddHtInfoLen,
5112 OUT ADD_HT_INFO_IE *AddHtInfo,
5113 OUT UCHAR *NewExtChannel,
5114 OUT USHORT *LengthVIE,
5115 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5117 BOOLEAN PeerAddBAReqActionSanity(
5118 IN PRTMP_ADAPTER pAd,
5123 BOOLEAN PeerAddBARspActionSanity(
5124 IN PRTMP_ADAPTER pAd,
5128 BOOLEAN PeerDelBAActionSanity(
5129 IN PRTMP_ADAPTER pAd,
5134 BOOLEAN MlmeAssocReqSanity(
5135 IN PRTMP_ADAPTER pAd,
5139 OUT USHORT *CapabilityInfo,
5141 OUT USHORT *ListenIntv);
5143 BOOLEAN MlmeAuthReqSanity(
5144 IN PRTMP_ADAPTER pAd,
5151 BOOLEAN MlmeStartReqSanity(
5152 IN PRTMP_ADAPTER pAd,
5156 OUT UCHAR *Ssidlen);
5158 BOOLEAN PeerAuthSanity(
5159 IN PRTMP_ADAPTER pAd,
5166 OUT CHAR ChlgText[]);
5168 BOOLEAN PeerAssocRspSanity(
5169 IN PRTMP_ADAPTER pAd,
5173 OUT USHORT *pCapabilityInfo,
5174 OUT USHORT *pStatus,
5176 OUT UCHAR SupRate[],
5177 OUT UCHAR *pSupRateLen,
5178 OUT UCHAR ExtRate[],
5179 OUT UCHAR *pExtRateLen,
5180 OUT HT_CAPABILITY_IE *pHtCapability,
5181 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5182 OUT UCHAR *pHtCapabilityLen,
5183 OUT UCHAR *pAddHtInfoLen,
5184 OUT UCHAR *pNewExtChannelOffset,
5185 OUT PEDCA_PARM pEdcaParm,
5186 OUT UCHAR *pCkipFlag);
5188 BOOLEAN PeerDisassocSanity(
5189 IN PRTMP_ADAPTER pAd,
5193 OUT USHORT *Reason);
5195 BOOLEAN PeerWpaMessageSanity(
5196 IN PRTMP_ADAPTER pAd,
5197 IN PEAPOL_PACKET pMsg,
5200 IN MAC_TABLE_ENTRY *pEntry);
5202 BOOLEAN PeerDeauthSanity(
5203 IN PRTMP_ADAPTER pAd,
5207 OUT USHORT *Reason);
5209 BOOLEAN PeerProbeReqSanity(
5210 IN PRTMP_ADAPTER pAd,
5215 OUT UCHAR *pSsidLen);
5221 OUT UCHAR *BcastFlag,
5222 OUT UCHAR *DtimCount,
5223 OUT UCHAR *DtimPeriod,
5224 OUT UCHAR *MessageToMe);
5226 UCHAR ChannelSanity(
5227 IN PRTMP_ADAPTER pAd,
5230 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5231 IN PBSS_ENTRY pBss);
5233 BOOLEAN MlmeDelBAReqSanity(
5234 IN PRTMP_ADAPTER pAd,
5238 BOOLEAN MlmeAddBAReqSanity(
5239 IN PRTMP_ADAPTER pAd,
5244 ULONG MakeOutgoingFrame(
5246 OUT ULONG *Length, ...);
5249 IN PRTMP_ADAPTER pAd,
5253 IN PRTMP_ADAPTER pAd);
5255 VOID AsicUpdateAutoFallBackTable(
5256 IN PRTMP_ADAPTER pAd,
5259 VOID MlmePeriodicExec(
5260 IN PVOID SystemSpecific1,
5261 IN PVOID FunctionContext,
5262 IN PVOID SystemSpecific2,
5263 IN PVOID SystemSpecific3);
5266 IN PVOID SystemSpecific1,
5267 IN PVOID FunctionContext,
5268 IN PVOID SystemSpecific2,
5269 IN PVOID SystemSpecific3);
5272 IN PVOID SystemSpecific1,
5273 IN PVOID FunctionContext,
5274 IN PVOID SystemSpecific2,
5275 IN PVOID SystemSpecific3);
5277 VOID STAMlmePeriodicExec(
5281 IN PRTMP_ADAPTER pAd);
5283 VOID MlmeAutoReconnectLastSSID(
5284 IN PRTMP_ADAPTER pAd);
5286 BOOLEAN MlmeValidateSSID(
5290 VOID MlmeCheckForRoaming(
5291 IN PRTMP_ADAPTER pAd,
5294 VOID MlmeCheckForFastRoaming(
5295 IN PRTMP_ADAPTER pAd,
5298 VOID MlmeDynamicTxRateSwitching(
5299 IN PRTMP_ADAPTER pAd);
5302 IN PRTMP_ADAPTER pAd,
5303 IN PMAC_TABLE_ENTRY pEntry,
5304 IN PRTMP_TX_RATE_SWITCH pTxRate);
5306 VOID MlmeSelectTxRateTable(
5307 IN PRTMP_ADAPTER pAd,
5308 IN PMAC_TABLE_ENTRY pEntry,
5310 IN PUCHAR pTableSize,
5311 IN PUCHAR pInitTxRateIdx);
5313 VOID MlmeCalculateChannelQuality(
5314 IN PRTMP_ADAPTER pAd,
5317 VOID MlmeCheckPsmChange(
5318 IN PRTMP_ADAPTER pAd,
5322 IN PRTMP_ADAPTER pAd,
5325 VOID MlmeSetTxPreamble(
5326 IN PRTMP_ADAPTER pAd,
5327 IN USHORT TxPreamble);
5329 VOID UpdateBasicRateBitmap(
5330 IN PRTMP_ADAPTER pAd);
5332 VOID MlmeUpdateTxRates(
5333 IN PRTMP_ADAPTER pAd,
5337 #ifdef DOT11_N_SUPPORT
5338 VOID MlmeUpdateHtTxRates(
5339 IN PRTMP_ADAPTER pAd,
5341 #endif // DOT11_N_SUPPORT //
5343 VOID RTMPCheckRates(
5344 IN PRTMP_ADAPTER pAd,
5345 IN OUT UCHAR SupRate[],
5346 IN OUT UCHAR *SupRateLen);
5348 #ifdef CONFIG_STA_SUPPORT
5349 BOOLEAN RTMPCheckChannel(
5350 IN PRTMP_ADAPTER pAd,
5351 IN UCHAR CentralChannel,
5353 #endif // CONFIG_STA_SUPPORT //
5355 BOOLEAN RTMPCheckHt(
5356 IN PRTMP_ADAPTER pAd,
5358 IN OUT HT_CAPABILITY_IE *pHtCapability,
5359 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5361 VOID StaQuickResponeForRateUpExec(
5362 IN PVOID SystemSpecific1,
5363 IN PVOID FunctionContext,
5364 IN PVOID SystemSpecific2,
5365 IN PVOID SystemSpecific3);
5367 VOID AsicBbpTuning1(
5368 IN PRTMP_ADAPTER pAd);
5370 VOID AsicBbpTuning2(
5371 IN PRTMP_ADAPTER pAd);
5373 VOID RTMPUpdateMlmeRate(
5374 IN PRTMP_ADAPTER pAd);
5377 IN PRTMP_ADAPTER pAd,
5382 VOID AsicEvaluateRxAnt(
5383 IN PRTMP_ADAPTER pAd);
5385 VOID AsicRxAntEvalTimeout(
5386 IN PVOID SystemSpecific1,
5387 IN PVOID FunctionContext,
5388 IN PVOID SystemSpecific2,
5389 IN PVOID SystemSpecific3);
5391 VOID APSDPeriodicExec(
5392 IN PVOID SystemSpecific1,
5393 IN PVOID FunctionContext,
5394 IN PVOID SystemSpecific2,
5395 IN PVOID SystemSpecific3);
5397 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5398 IN PRTMP_ADAPTER pAd,
5399 IN PMAC_TABLE_ENTRY pEntry);
5401 UCHAR RTMPStaFixedTxMode(
5402 IN PRTMP_ADAPTER pAd,
5403 IN PMAC_TABLE_ENTRY pEntry);
5405 VOID RTMPUpdateLegacyTxSetting(
5406 UCHAR fixed_tx_mode,
5407 PMAC_TABLE_ENTRY pEntry);
5409 BOOLEAN RTMPAutoRateSwitchCheck(
5410 IN PRTMP_ADAPTER pAd);
5412 NDIS_STATUS MlmeInit(
5413 IN PRTMP_ADAPTER pAd);
5416 IN PRTMP_ADAPTER pAd);
5419 IN PRTMP_ADAPTER pAd);
5421 VOID MlmeResetRalinkCounters(
5422 IN PRTMP_ADAPTER pAd);
5424 VOID BuildChannelList(
5425 IN PRTMP_ADAPTER pAd);
5428 IN PRTMP_ADAPTER pAd);
5431 IN PRTMP_ADAPTER pAd,
5434 VOID ChangeToCellPowerLimit(
5435 IN PRTMP_ADAPTER pAd,
5436 IN UCHAR AironetCellPowerLimit);
5439 IN PRTMP_ADAPTER pAd,
5443 IN PRTMP_ADAPTER pAd,
5447 IN PRTMP_ADAPTER pAd);
5450 IN PRTMP_ADAPTER pAd,
5455 IN PRTMP_ADAPTER pAd);
5458 IN PRTMP_ADAPTER pAd);
5461 IN PRTMP_ADAPTER pAd);
5463 USHORT RTMP_EEPROM_READ16(
5464 IN PRTMP_ADAPTER pAd,
5467 VOID RTMP_EEPROM_WRITE16(
5468 IN PRTMP_ADAPTER pAd,
5473 // Prototypes of function definition in rtmp_tkip.c
5475 VOID RTMPInitTkipEngine(
5476 IN PRTMP_ADAPTER pAd,
5485 VOID RTMPInitMICEngine(
5486 IN PRTMP_ADAPTER pAd,
5490 IN UCHAR UserPriority,
5493 BOOLEAN RTMPTkipCompareMICValue(
5494 IN PRTMP_ADAPTER pAd,
5499 IN UCHAR UserPriority,
5502 VOID RTMPCalculateMICValue(
5503 IN PRTMP_ADAPTER pAd,
5504 IN PNDIS_PACKET pPacket,
5506 IN PCIPHER_KEY pKey,
5509 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5510 IN PRTMP_ADAPTER pAd,
5518 VOID RTMPTkipAppendByte(
5519 IN PTKIP_KEY_INFO pTkip,
5522 VOID RTMPTkipAppend(
5523 IN PTKIP_KEY_INFO pTkip,
5527 VOID RTMPTkipGetMIC(
5528 IN PTKIP_KEY_INFO pTkip);
5530 BOOLEAN RTMPSoftDecryptTKIP(
5531 IN PRTMP_ADAPTER pAd,
5533 IN ULONG DataByteCnt,
5534 IN UCHAR UserPriority,
5535 IN PCIPHER_KEY pWpaKey);
5537 BOOLEAN RTMPSoftDecryptAES(
5538 IN PRTMP_ADAPTER pAd,
5540 IN ULONG DataByteCnt,
5541 IN PCIPHER_KEY pWpaKey);
5544 // Prototypes of function definition in cmm_info.c
5546 NDIS_STATUS RTMPWPARemoveKeyProc(
5547 IN PRTMP_ADAPTER pAd,
5550 VOID RTMPWPARemoveAllKeys(
5551 IN PRTMP_ADAPTER pAd);
5553 BOOLEAN RTMPCheckStrPrintAble(
5557 VOID RTMPSetPhyMode(
5558 IN PRTMP_ADAPTER pAd,
5561 VOID RTMPUpdateHTIE(
5562 IN RT_HT_CAPABILITY *pRtHt,
5564 OUT HT_CAPABILITY_IE *pHtCapability,
5565 OUT ADD_HT_INFO_IE *pAddHtInfo);
5567 VOID RTMPAddWcidAttributeEntry(
5568 IN PRTMP_ADAPTER pAd,
5572 IN MAC_TABLE_ENTRY *pEntry);
5574 CHAR *GetEncryptType(
5580 VOID RTMPIoctlGetSiteSurvey(
5581 IN PRTMP_ADAPTER pAdapter,
5582 IN struct iwreq *wrq);
5584 VOID RTMPIoctlGetMacTable(
5585 IN PRTMP_ADAPTER pAd,
5586 IN struct iwreq *wrq);
5588 VOID RTMPIndicateWPA2Status(
5589 IN PRTMP_ADAPTER pAdapter);
5591 VOID RTMPOPModeSwitching(
5592 IN PRTMP_ADAPTER pAd);
5594 #ifdef CONFIG_STA_SUPPORT
5595 VOID RTMPAddBSSIDCipher(
5596 IN PRTMP_ADAPTER pAd,
5598 IN PNDIS_802_11_KEY pKey,
5599 IN UCHAR CipherAlg);
5600 #endif // CONFIG_STA_SUPPORT //
5602 #ifdef DOT11_N_SUPPORT
5604 IN PRTMP_ADAPTER pAd,
5605 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5607 VOID RTMPSetIndividualHT(
5608 IN PRTMP_ADAPTER pAd,
5610 #endif // DOT11_N_SUPPORT //
5612 VOID RTMPSendWirelessEvent(
5613 IN PRTMP_ADAPTER pAd,
5614 IN USHORT Event_flag,
5619 VOID NICUpdateCntlCounters(
5620 IN PRTMP_ADAPTER pAd,
5621 IN PHEADER_802_11 pHeader,
5623 IN PRXWI_STRUC pRxWI);
5625 // prototype in wpa.c
5627 BOOLEAN WpaMsgTypeSubst(
5631 VOID WpaPskStateMachineInit(
5632 IN PRTMP_ADAPTER pAd,
5633 IN STATE_MACHINE *S,
5634 OUT STATE_MACHINE_FUNC Trans[]);
5636 VOID WpaEAPOLKeyAction(
5637 IN PRTMP_ADAPTER pAd,
5638 IN MLME_QUEUE_ELEM *Elem);
5640 VOID WpaPairMsg1Action(
5641 IN PRTMP_ADAPTER pAd,
5642 IN MLME_QUEUE_ELEM *Elem);
5644 VOID WpaPairMsg3Action(
5645 IN PRTMP_ADAPTER pAd,
5646 IN MLME_QUEUE_ELEM *Elem);
5648 VOID WpaGroupMsg1Action(
5649 IN PRTMP_ADAPTER pAd,
5650 IN MLME_QUEUE_ELEM *Elem);
5652 VOID WpaMacHeaderInit(
5653 IN PRTMP_ADAPTER pAd,
5654 IN OUT PHEADER_802_11 pHdr80211,
5658 VOID Wpa2PairMsg1Action(
5659 IN PRTMP_ADAPTER pAd,
5660 IN MLME_QUEUE_ELEM *Elem);
5662 VOID Wpa2PairMsg3Action(
5663 IN PRTMP_ADAPTER pAd,
5664 IN MLME_QUEUE_ELEM *Elem);
5666 BOOLEAN ParseKeyData(
5667 IN PRTMP_ADAPTER pAd,
5669 IN UCHAR KeyDataLen,
5670 IN UCHAR bPairewise);
5672 VOID RTMPToWirelessSta(
5673 IN PRTMP_ADAPTER pAd,
5674 IN PUCHAR pHeader802_3,
5678 IN BOOLEAN is4wayFrame);
5706 IN PRTMP_ADAPTER pAd,
5716 IN PRTMP_ADAPTER pAd,
5721 // prototype in aironet.c
5723 VOID AironetStateMachineInit(
5724 IN PRTMP_ADAPTER pAd,
5725 IN STATE_MACHINE *S,
5726 OUT STATE_MACHINE_FUNC Trans[]);
5728 VOID AironetMsgAction(
5729 IN PRTMP_ADAPTER pAd,
5730 IN MLME_QUEUE_ELEM *Elem);
5732 VOID AironetRequestAction(
5733 IN PRTMP_ADAPTER pAd,
5734 IN MLME_QUEUE_ELEM *Elem);
5736 VOID ChannelLoadRequestAction(
5737 IN PRTMP_ADAPTER pAd,
5740 VOID NoiseHistRequestAction(
5741 IN PRTMP_ADAPTER pAd,
5744 VOID BeaconRequestAction(
5745 IN PRTMP_ADAPTER pAd,
5748 VOID AironetReportAction(
5749 IN PRTMP_ADAPTER pAd,
5750 IN MLME_QUEUE_ELEM *Elem);
5752 VOID ChannelLoadReportAction(
5753 IN PRTMP_ADAPTER pAd,
5756 VOID NoiseHistReportAction(
5757 IN PRTMP_ADAPTER pAd,
5760 VOID AironetFinalReportAction(
5761 IN PRTMP_ADAPTER pAd);
5763 VOID BeaconReportAction(
5764 IN PRTMP_ADAPTER pAd,
5767 VOID AironetAddBeaconReport(
5768 IN PRTMP_ADAPTER pAd,
5770 IN PMLME_QUEUE_ELEM pElem);
5772 VOID AironetCreateBeaconReportFromBssTable(
5773 IN PRTMP_ADAPTER pAd);
5775 VOID DBGPRINT_TX_RING(
5776 IN PRTMP_ADAPTER pAd,
5779 VOID DBGPRINT_RX_RING(
5780 IN PRTMP_ADAPTER pAd);
5783 IN PRTMP_ADAPTER pAd,
5785 IN UCHAR RssiNumber);
5788 #ifdef DOT11N_DRAFT3
5789 VOID BuildEffectedChannelList(
5790 IN PRTMP_ADAPTER pAd);
5791 #endif // DOT11N_DRAFT3 //
5794 VOID APAsicEvaluateRxAnt(
5795 IN PRTMP_ADAPTER pAd);
5798 VOID APAsicRxAntEvalTimeout(
5799 IN PRTMP_ADAPTER pAd);
5802 // function prototype in cmm_wpa.c
5804 BOOLEAN RTMPCheckWPAframe(
5805 IN PRTMP_ADAPTER pAd,
5806 IN PMAC_TABLE_ENTRY pEntry,
5808 IN ULONG DataByteCount,
5809 IN UCHAR FromWhichBSSID);
5811 VOID AES_GTK_KEY_UNWRAP(
5813 OUT UCHAR *plaintext,
5815 IN UCHAR *ciphertext);
5817 BOOLEAN RTMPCheckRSNIE(
5818 IN PRTMP_ADAPTER pAd,
5821 IN MAC_TABLE_ENTRY *pEntry,
5824 BOOLEAN RTMPParseEapolKeyData(
5825 IN PRTMP_ADAPTER pAd,
5827 IN UCHAR KeyDataLen,
5828 IN UCHAR GroupKeyIndex,
5831 IN MAC_TABLE_ENTRY *pEntry);
5833 VOID ConstructEapolMsg(
5834 IN PRTMP_ADAPTER pAd,
5835 IN UCHAR PeerAuthMode,
5836 IN UCHAR PeerWepStatus,
5837 IN UCHAR MyGroupKeyWepStatus,
5839 IN UCHAR DefaultKeyIdx,
5840 IN UCHAR *ReplayCounter,
5847 OUT PEAPOL_PACKET pMsg);
5850 IN PRTMP_ADAPTER pAd,
5851 IN UCHAR PeerWepStatus,
5853 OUT PEAPOL_PACKET pMsg);
5855 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5856 IN PRTMP_ADAPTER pAd,
5858 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5859 IN PCIPHER_KEY pShard_key);
5861 VOID ConstructEapolKeyData(
5862 IN PRTMP_ADAPTER pAd,
5863 IN UCHAR PeerAuthMode,
5864 IN UCHAR PeerWepStatus,
5865 IN UCHAR GroupKeyWepStatus,
5867 IN UCHAR DefaultKeyIdx,
5868 IN BOOLEAN bWPA2Capable,
5873 OUT PEAPOL_PACKET pMsg);
5876 IN PRTMP_ADAPTER pAd,
5882 // function prototype in ap_wpa.c
5885 BOOLEAN APWpaMsgTypeSubst(
5889 MAC_TABLE_ENTRY *PACInquiry(
5890 IN PRTMP_ADAPTER pAd,
5893 BOOLEAN RTMPCheckMcast(
5894 IN PRTMP_ADAPTER pAd,
5895 IN PEID_STRUCT eid_ptr,
5896 IN MAC_TABLE_ENTRY *pEntry);
5898 BOOLEAN RTMPCheckUcast(
5899 IN PRTMP_ADAPTER pAd,
5900 IN PEID_STRUCT eid_ptr,
5901 IN MAC_TABLE_ENTRY *pEntry);
5903 BOOLEAN RTMPCheckAUTH(
5904 IN PRTMP_ADAPTER pAd,
5905 IN PEID_STRUCT eid_ptr,
5906 IN MAC_TABLE_ENTRY *pEntry);
5908 VOID WPAStart4WayHS(
5909 IN PRTMP_ADAPTER pAd,
5910 IN MAC_TABLE_ENTRY *pEntry,
5911 IN ULONG TimeInterval);
5913 VOID WPAStart2WayGroupHS(
5914 IN PRTMP_ADAPTER pAd,
5915 IN MAC_TABLE_ENTRY *pEntry);
5917 VOID APWpaEAPPacketAction(
5918 IN PRTMP_ADAPTER pAd,
5919 IN MLME_QUEUE_ELEM *Elem);
5921 VOID APWpaEAPOLStartAction(
5922 IN PRTMP_ADAPTER pAd,
5923 IN MLME_QUEUE_ELEM *Elem);
5925 VOID APWpaEAPOLLogoffAction(
5926 IN PRTMP_ADAPTER pAd,
5927 IN MLME_QUEUE_ELEM *Elem);
5929 VOID APWpaEAPOLKeyAction(
5930 IN PRTMP_ADAPTER pAd,
5931 IN MLME_QUEUE_ELEM *Elem);
5933 VOID APWpaEAPOLASFAlertAction(
5934 IN PRTMP_ADAPTER pAd,
5935 IN MLME_QUEUE_ELEM *Elem);
5937 VOID HandleCounterMeasure(
5938 IN PRTMP_ADAPTER pAd,
5939 IN MAC_TABLE_ENTRY *pEntry);
5941 VOID PeerPairMsg2Action(
5942 IN PRTMP_ADAPTER pAd,
5943 IN MAC_TABLE_ENTRY *pEntry,
5944 IN MLME_QUEUE_ELEM *Elem);
5946 VOID PeerPairMsg4Action(
5947 IN PRTMP_ADAPTER pAd,
5948 IN MAC_TABLE_ENTRY *pEntry,
5949 IN MLME_QUEUE_ELEM *Elem);
5952 IN PVOID SystemSpecific1,
5953 IN PVOID FunctionContext,
5954 IN PVOID SystemSpecific2,
5955 IN PVOID SystemSpecific3);
5958 IN PVOID SystemSpecific1,
5959 IN PVOID FunctionContext,
5960 IN PVOID SystemSpecific2,
5961 IN PVOID SystemSpecific3);
5963 VOID EnqueueStartForPSKExec(
5964 IN PVOID SystemSpecific1,
5965 IN PVOID FunctionContext,
5966 IN PVOID SystemSpecific2,
5967 IN PVOID SystemSpecific3);
5969 VOID RTMPHandleSTAKey(
5970 IN PRTMP_ADAPTER pAdapter,
5971 IN MAC_TABLE_ENTRY *pEntry,
5972 IN MLME_QUEUE_ELEM *Elem);
5974 VOID PeerGroupMsg2Action(
5975 IN PRTMP_ADAPTER pAd,
5976 IN PMAC_TABLE_ENTRY pEntry,
5980 VOID PairDisAssocAction(
5981 IN PRTMP_ADAPTER pAd,
5982 IN PMAC_TABLE_ENTRY pEntry,
5985 VOID MlmeDeAuthAction(
5986 IN PRTMP_ADAPTER pAd,
5987 IN PMAC_TABLE_ENTRY pEntry,
5990 VOID GREKEYPeriodicExec(
5991 IN PVOID SystemSpecific1,
5992 IN PVOID FunctionContext,
5993 IN PVOID SystemSpecific2,
5994 IN PVOID SystemSpecific3);
6016 IN PRTMP_ADAPTER pAd,
6019 VOID AES_GTK_KEY_WRAP(
6021 IN UCHAR *plaintext,
6023 OUT UCHAR *ciphertext);
6026 IN PRTMP_ADAPTER pAdapter,
6030 VOID APToWirelessSta(
6031 IN PRTMP_ADAPTER pAd,
6032 IN MAC_TABLE_ENTRY *pEntry,
6033 IN PUCHAR pHeader802_3,
6037 IN BOOLEAN bClearFrame);
6039 VOID RTMPAddPMKIDCache(
6040 IN PRTMP_ADAPTER pAd,
6046 INT RTMPSearchPMKIDCache(
6047 IN PRTMP_ADAPTER pAd,
6051 VOID RTMPDeletePMKIDCache(
6052 IN PRTMP_ADAPTER pAd,
6056 VOID RTMPMaintainPMKIDCache(
6057 IN PRTMP_ADAPTER pAd);
6059 VOID RTMPSendTriggerFrame(
6060 IN PRTMP_ADAPTER pAd,
6064 IN BOOLEAN bQosNull);
6068 VOID RTMP_SetPeriodicTimer(
6069 IN NDIS_MINIPORT_TIMER *pTimer,
6070 IN unsigned long timeout);
6072 VOID RTMP_OS_Init_Timer(
6073 IN PRTMP_ADAPTER pAd,
6074 IN NDIS_MINIPORT_TIMER *pTimer,
6075 IN TIMER_FUNCTION function,
6078 VOID RTMP_OS_Add_Timer(
6079 IN NDIS_MINIPORT_TIMER *pTimer,
6080 IN unsigned long timeout);
6082 VOID RTMP_OS_Mod_Timer(
6083 IN NDIS_MINIPORT_TIMER *pTimer,
6084 IN unsigned long timeout);
6087 VOID RTMP_OS_Del_Timer(
6088 IN NDIS_MINIPORT_TIMER *pTimer,
6089 OUT BOOLEAN *pCancelled);
6092 VOID RTMP_OS_Release_Packet(
6093 IN PRTMP_ADAPTER pAd,
6094 IN PQUEUE_ENTRY pEntry);
6099 NDIS_STATUS os_alloc_mem(
6100 IN PRTMP_ADAPTER pAd,
6104 NDIS_STATUS os_free_mem(
6105 IN PRTMP_ADAPTER pAd,
6109 void RTMP_AllocateSharedMemory(
6110 IN PRTMP_ADAPTER pAd,
6113 OUT PVOID *VirtualAddress,
6114 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6116 VOID RTMPFreeTxRxRingMemory(
6117 IN PRTMP_ADAPTER pAd);
6119 NDIS_STATUS AdapterBlockAllocateMemory(
6123 void RTMP_AllocateTxDescMemory(
6124 IN PRTMP_ADAPTER pAd,
6128 OUT PVOID *VirtualAddress,
6129 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6131 void RTMP_AllocateFirstTxBuffer(
6132 IN PRTMP_ADAPTER pAd,
6136 OUT PVOID *VirtualAddress,
6137 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6139 void RTMP_AllocateMgmtDescMemory(
6140 IN PRTMP_ADAPTER pAd,
6143 OUT PVOID *VirtualAddress,
6144 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6146 void RTMP_AllocateRxDescMemory(
6147 IN PRTMP_ADAPTER pAd,
6150 OUT PVOID *VirtualAddress,
6151 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6153 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6154 IN PRTMP_ADAPTER pAd,
6157 OUT PVOID *VirtualAddress,
6158 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6160 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6161 IN PRTMP_ADAPTER pAd,
6164 OUT PVOID *VirtualAddress);
6166 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6167 IN PRTMP_ADAPTER pAd,
6170 void RTMP_QueryPacketInfo(
6171 IN PNDIS_PACKET pPacket,
6172 OUT PACKET_INFO *pPacketInfo,
6173 OUT PUCHAR *pSrcBufVA,
6174 OUT UINT *pSrcBufLen);
6176 void RTMP_QueryNextPacketInfo(
6177 IN PNDIS_PACKET *ppPacket,
6178 OUT PACKET_INFO *pPacketInfo,
6179 OUT PUCHAR *pSrcBufVA,
6180 OUT UINT *pSrcBufLen);
6183 BOOLEAN RTMP_FillTxBlkInfo(
6184 IN RTMP_ADAPTER *pAd,
6188 PRTMP_SCATTER_GATHER_LIST
6189 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6192 void announce_802_3_packet(
6193 IN PRTMP_ADAPTER pAd,
6194 IN PNDIS_PACKET pPacket);
6197 UINT BA_Reorder_AMSDU_Annnounce(
6198 IN PRTMP_ADAPTER pAd,
6199 IN PNDIS_PACKET pPacket);
6202 UINT Handle_AMSDU_Packet(
6203 IN PRTMP_ADAPTER pAd,
6206 IN UCHAR FromWhichBSSID);
6209 void convert_802_11_to_802_3_packet(
6210 IN PRTMP_ADAPTER pAd,
6211 IN PNDIS_PACKET pPacket,
6215 IN UCHAR FromWhichBSSID);
6218 PNET_DEV get_netdev_from_bssid(
6219 IN PRTMP_ADAPTER pAd,
6220 IN UCHAR FromWhichBSSID);
6223 PNDIS_PACKET duplicate_pkt(
6224 IN PRTMP_ADAPTER pAd,
6225 IN PUCHAR pHeader802_3,
6229 IN UCHAR FromWhichBSSID);
6232 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6233 IN PRTMP_ADAPTER pAd,
6234 IN PNDIS_PACKET pOldPkt);
6236 PNDIS_PACKET duplicate_pkt_with_VLAN(
6237 IN PRTMP_ADAPTER pAd,
6238 IN PUCHAR pHeader802_3,
6242 IN UCHAR FromWhichBSSID);
6244 PNDIS_PACKET duplicate_pkt_with_WPI(
6245 IN PRTMP_ADAPTER pAd,
6246 IN PNDIS_PACKET pPacket,
6247 IN UINT32 ext_head_len,
6248 IN UINT32 ext_tail_len);
6250 UCHAR VLAN_8023_Header_Copy(
6251 IN PRTMP_ADAPTER pAd,
6252 IN PUCHAR pHeader802_3,
6255 IN UCHAR FromWhichBSSID);
6257 #ifdef DOT11_N_SUPPORT
6258 void ba_flush_reordering_timeout_mpdus(
6259 IN PRTMP_ADAPTER pAd,
6260 IN PBA_REC_ENTRY pBAEntry,
6264 VOID BAOriSessionSetUp(
6265 IN PRTMP_ADAPTER pAd,
6266 IN MAC_TABLE_ENTRY *pEntry,
6270 IN BOOLEAN isForced);
6272 VOID BASessionTearDownALL(
6273 IN OUT PRTMP_ADAPTER pAd,
6275 #endif // DOT11_N_SUPPORT //
6277 BOOLEAN OS_Need_Clone_Packet(void);
6280 VOID build_tx_packet(
6281 IN PRTMP_ADAPTER pAd,
6282 IN PNDIS_PACKET pPacket,
6287 VOID BAOriSessionTearDown(
6288 IN OUT PRTMP_ADAPTER pAd,
6291 IN BOOLEAN bPassive,
6292 IN BOOLEAN bForceSend);
6294 VOID BARecSessionTearDown(
6295 IN OUT PRTMP_ADAPTER pAd,
6298 IN BOOLEAN bPassive);
6300 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6301 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6303 ULONG AutoChBssInsertEntry(
6304 IN PRTMP_ADAPTER pAd,
6311 void AutoChBssTableInit(
6312 IN PRTMP_ADAPTER pAd);
6314 void ChannelInfoInit(
6315 IN PRTMP_ADAPTER pAd);
6317 void AutoChBssTableDestroy(
6318 IN PRTMP_ADAPTER pAd);
6320 void ChannelInfoDestroy(
6321 IN PRTMP_ADAPTER pAd);
6323 UCHAR New_ApAutoSelectChannel(
6324 IN PRTMP_ADAPTER pAd);
6326 BOOLEAN rtstrmactohex(
6330 BOOLEAN rtstrcasecmp(
6334 char *rtstrstruncasecmp(
6340 IN const char * s2);
6344 IN const char * ct);
6348 unsigned int *addr);
6350 ////////// common ioctl functions //////////
6351 INT Set_DriverVersion_Proc(
6352 IN PRTMP_ADAPTER pAd,
6355 INT Set_CountryRegion_Proc(
6356 IN PRTMP_ADAPTER pAd,
6359 INT Set_CountryRegionABand_Proc(
6360 IN PRTMP_ADAPTER pAd,
6363 INT Set_WirelessMode_Proc(
6364 IN PRTMP_ADAPTER pAd,
6367 INT Set_Channel_Proc(
6368 IN PRTMP_ADAPTER pAd,
6371 INT Set_ShortSlot_Proc(
6372 IN PRTMP_ADAPTER pAd,
6375 INT Set_TxPower_Proc(
6376 IN PRTMP_ADAPTER pAd,
6379 INT Set_BGProtection_Proc(
6380 IN PRTMP_ADAPTER pAd,
6383 INT Set_TxPreamble_Proc(
6384 IN PRTMP_ADAPTER pAd,
6387 INT Set_RTSThreshold_Proc(
6388 IN PRTMP_ADAPTER pAd,
6391 INT Set_FragThreshold_Proc(
6392 IN PRTMP_ADAPTER pAd,
6395 INT Set_TxBurst_Proc(
6396 IN PRTMP_ADAPTER pAd,
6399 #ifdef AGGREGATION_SUPPORT
6400 INT Set_PktAggregate_Proc(
6401 IN PRTMP_ADAPTER pAd,
6405 INT Set_IEEE80211H_Proc(
6406 IN PRTMP_ADAPTER pAd,
6411 IN PRTMP_ADAPTER pAd,
6415 INT Show_DescInfo_Proc(
6416 IN PRTMP_ADAPTER pAd,
6419 INT Set_ResetStatCounter_Proc(
6420 IN PRTMP_ADAPTER pAd,
6423 #ifdef DOT11_N_SUPPORT
6424 INT Set_BASetup_Proc(
6425 IN PRTMP_ADAPTER pAd,
6428 INT Set_BADecline_Proc(
6429 IN PRTMP_ADAPTER pAd,
6432 INT Set_BAOriTearDown_Proc(
6433 IN PRTMP_ADAPTER pAd,
6436 INT Set_BARecTearDown_Proc(
6437 IN PRTMP_ADAPTER pAd,
6441 IN PRTMP_ADAPTER pAd,
6445 IN PRTMP_ADAPTER pAd,
6449 IN PRTMP_ADAPTER pAd,
6452 INT Set_HtOpMode_Proc(
6453 IN PRTMP_ADAPTER pAd,
6456 INT Set_HtStbc_Proc(
6457 IN PRTMP_ADAPTER pAd,
6461 IN PRTMP_ADAPTER pAd,
6464 INT Set_HtExtcha_Proc(
6465 IN PRTMP_ADAPTER pAd,
6468 INT Set_HtMpduDensity_Proc(
6469 IN PRTMP_ADAPTER pAd,
6472 INT Set_HtBaWinSize_Proc(
6473 IN PRTMP_ADAPTER pAd,
6477 IN PRTMP_ADAPTER pAd,
6480 INT Set_HtLinkAdapt_Proc(
6481 IN PRTMP_ADAPTER pAd,
6484 INT Set_HtAmsdu_Proc(
6485 IN PRTMP_ADAPTER pAd,
6488 INT Set_HtAutoBa_Proc(
6489 IN PRTMP_ADAPTER pAd,
6492 INT Set_HtProtect_Proc(
6493 IN PRTMP_ADAPTER pAd,
6496 INT Set_HtMimoPs_Proc(
6497 IN PRTMP_ADAPTER pAd,
6501 INT Set_ForceShortGI_Proc(
6502 IN PRTMP_ADAPTER pAd,
6505 INT Set_ForceGF_Proc(
6506 IN PRTMP_ADAPTER pAd,
6510 IN PRTMP_ADAPTER pAd);
6512 INT Set_SendPSMPAction_Proc(
6513 IN PRTMP_ADAPTER pAd,
6516 INT Set_HtMIMOPSmode_Proc(
6517 IN PRTMP_ADAPTER pAd,
6521 INT Set_HtTxBASize_Proc(
6522 IN PRTMP_ADAPTER pAd,
6524 #endif // DOT11_N_SUPPORT //
6528 #ifdef CONFIG_STA_SUPPORT
6530 VOID RTMPSendDLSTearDownFrame(
6531 IN PRTMP_ADAPTER pAd,
6534 #ifdef DOT11_N_SUPPORT
6537 IN PRTMP_ADAPTER pAd,
6538 OUT PQUERYBA_TABLE pBAT);
6539 #endif // DOT11_N_SUPPORT //
6541 #ifdef WPA_SUPPLICANT_SUPPORT
6542 INT WpaCheckEapCode(
6543 IN PRTMP_ADAPTER pAd,
6548 VOID WpaSendMicFailureToWpaSupplicant(
6549 IN PRTMP_ADAPTER pAd,
6550 IN BOOLEAN bUnicast);
6552 VOID SendAssocIEsToWpaSupplicant(
6553 IN PRTMP_ADAPTER pAd);
6554 #endif // WPA_SUPPLICANT_SUPPORT //
6556 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6557 int wext_notify_event_assoc(
6558 IN RTMP_ADAPTER *pAd);
6559 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6561 #endif // CONFIG_STA_SUPPORT //
6565 #ifdef DOT11_N_SUPPORT
6566 VOID Handle_BSS_Width_Trigger_Events(
6567 IN PRTMP_ADAPTER pAd);
6569 void build_ext_channel_switch_ie(
6570 IN PRTMP_ADAPTER pAd,
6571 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6572 #endif // DOT11_N_SUPPORT //
6575 BOOLEAN APRxDoneInterruptHandle(
6576 IN PRTMP_ADAPTER pAd);
6578 BOOLEAN STARxDoneInterruptHandle(
6579 IN PRTMP_ADAPTER pAd,
6582 #ifdef DOT11_N_SUPPORT
6583 // AMPDU packet indication
6584 VOID Indicate_AMPDU_Packet(
6585 IN PRTMP_ADAPTER pAd,
6587 IN UCHAR FromWhichBSSID);
6589 // AMSDU packet indication
6590 VOID Indicate_AMSDU_Packet(
6591 IN PRTMP_ADAPTER pAd,
6593 IN UCHAR FromWhichBSSID);
6594 #endif // DOT11_N_SUPPORT //
6596 // Normal legacy Rx packet indication
6597 VOID Indicate_Legacy_Packet(
6598 IN PRTMP_ADAPTER pAd,
6600 IN UCHAR FromWhichBSSID);
6602 VOID Indicate_EAPOL_Packet(
6603 IN PRTMP_ADAPTER pAd,
6605 IN UCHAR FromWhichBSSID);
6607 void update_os_packet_info(
6608 IN PRTMP_ADAPTER pAd,
6610 IN UCHAR FromWhichBSSID);
6612 void wlan_802_11_to_802_3_packet(
6613 IN PRTMP_ADAPTER pAd,
6615 IN PUCHAR pHeader802_3,
6616 IN UCHAR FromWhichBSSID);
6618 UINT deaggregate_AMSDU_announce(
6619 IN PRTMP_ADAPTER pAd,
6620 PNDIS_PACKET pPacket,
6625 #ifdef CONFIG_STA_SUPPORT
6626 // remove LLC and get 802_3 Header
6627 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6629 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6631 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6633 _pDA = _pRxBlk->pHeader->Addr3; \
6634 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6638 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6640 _pDA = _pRxBlk->pHeader->Addr1; \
6641 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6642 _pSA = _pRxBlk->pHeader->Addr2; \
6644 _pSA = _pRxBlk->pHeader->Addr3; \
6648 _pDA = _pRxBlk->pHeader->Addr1; \
6649 _pSA = _pRxBlk->pHeader->Addr2; \
6653 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6654 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6656 #endif // CONFIG_STA_SUPPORT //
6659 BOOLEAN APFowardWirelessStaToWirelessSta(
6660 IN PRTMP_ADAPTER pAd,
6661 IN PNDIS_PACKET pPacket,
6662 IN ULONG FromWhichBSSID);
6664 VOID Announce_or_Forward_802_3_Packet(
6665 IN PRTMP_ADAPTER pAd,
6666 IN PNDIS_PACKET pPacket,
6667 IN UCHAR FromWhichBSSID);
6669 VOID Sta_Announce_or_Forward_802_3_Packet(
6670 IN PRTMP_ADAPTER pAd,
6671 IN PNDIS_PACKET pPacket,
6672 IN UCHAR FromWhichBSSID);
6675 #ifdef CONFIG_STA_SUPPORT
6676 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6677 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6678 //announce_802_3_packet(_pAd, _pPacket);
6679 #endif // CONFIG_STA_SUPPORT //
6682 PNDIS_PACKET DuplicatePacket(
6683 IN PRTMP_ADAPTER pAd,
6684 IN PNDIS_PACKET pPacket,
6685 IN UCHAR FromWhichBSSID);
6688 PNDIS_PACKET ClonePacket(
6689 IN PRTMP_ADAPTER pAd,
6690 IN PNDIS_PACKET pPacket,
6695 // Normal, AMPDU or AMSDU
6696 VOID CmmRxnonRalinkFrameIndicate(
6697 IN PRTMP_ADAPTER pAd,
6699 IN UCHAR FromWhichBSSID);
6701 VOID CmmRxRalinkFrameIndicate(
6702 IN PRTMP_ADAPTER pAd,
6703 IN MAC_TABLE_ENTRY *pEntry,
6705 IN UCHAR FromWhichBSSID);
6707 VOID Update_Rssi_Sample(
6708 IN PRTMP_ADAPTER pAd,
6709 IN RSSI_SAMPLE *pRssi,
6710 IN PRXWI_STRUC pRxWI);
6712 PNDIS_PACKET GetPacketFromRxRing(
6713 IN PRTMP_ADAPTER pAd,
6714 OUT PRT28XX_RXD_STRUC pSaveRxD,
6715 OUT BOOLEAN *pbReschedule,
6716 IN OUT UINT32 *pRxPending);
6718 PNDIS_PACKET RTMPDeFragmentDataFrame(
6719 IN PRTMP_ADAPTER pAd,
6722 ////////////////////////////////////////
6730 typedef struct _DefaultKeyIdxValue
6734 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6738 #ifdef CONFIG_STA_SUPPORT
6740 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6741 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6742 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6743 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6744 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6745 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6746 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6747 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6748 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6749 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6750 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6753 P80211ENUM_msgitem_status_no_value = 0x00
6756 P80211ENUM_truth_false = 0x00,
6757 P80211ENUM_truth_true = 0x01
6760 /* Definition from madwifi */
6766 } p80211item_uint32_t;
6771 #define WLAN_DEVNAMELEN_MAX 16
6772 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6773 p80211item_uint32_t hosttime;
6774 p80211item_uint32_t mactime;
6775 p80211item_uint32_t channel;
6776 p80211item_uint32_t rssi;
6777 p80211item_uint32_t sq;
6778 p80211item_uint32_t signal;
6779 p80211item_uint32_t noise;
6780 p80211item_uint32_t rate;
6781 p80211item_uint32_t istx;
6782 p80211item_uint32_t frmlen;
6783 } wlan_ng_prism2_header;
6785 /* The radio capture header precedes the 802.11 header. */
6786 typedef struct PACKED _ieee80211_radiotap_header {
6787 UINT8 it_version; /* Version 0. Only increases
6788 * for drastic changes,
6789 * introduction of compatible
6790 * new fields does not count.
6793 UINT16 it_len; /* length of the whole
6794 * header in bytes, including
6795 * it_version, it_pad,
6796 * it_len, and data fields.
6798 UINT32 it_present; /* A bitmap telling which
6799 * fields are present. Set bit 31
6800 * (0x80000000) to extend the
6801 * bitmap by another 32 bits.
6802 * Additional extensions are made
6803 * by setting bit 31.
6805 }ieee80211_radiotap_header ;
6807 enum ieee80211_radiotap_type {
6808 IEEE80211_RADIOTAP_TSFT = 0,
6809 IEEE80211_RADIOTAP_FLAGS = 1,
6810 IEEE80211_RADIOTAP_RATE = 2,
6811 IEEE80211_RADIOTAP_CHANNEL = 3,
6812 IEEE80211_RADIOTAP_FHSS = 4,
6813 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6814 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6815 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6816 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6817 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6818 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6819 IEEE80211_RADIOTAP_ANTENNA = 11,
6820 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6821 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6824 #define WLAN_RADIOTAP_PRESENT ( \
6825 (1 << IEEE80211_RADIOTAP_TSFT) | \
6826 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6827 (1 << IEEE80211_RADIOTAP_RATE) | \
6830 typedef struct _wlan_radiotap_header {
6831 ieee80211_radiotap_header wt_ihdr;
6835 } wlan_radiotap_header;
6836 /* Definition from madwifi */
6838 void send_monitor_packets(
6839 IN PRTMP_ADAPTER pAd,
6842 #if WIRELESS_EXT >= 12
6843 // This function will be called when query /proc
6844 struct iw_statistics *rt28xx_get_wireless_stats(
6845 IN struct net_device *net_dev);
6848 VOID RTMPSetDesiredRates(
6849 IN PRTMP_ADAPTER pAdapter,
6851 #endif // CONFIG_STA_SUPPORT //
6853 INT Set_FixedTxMode_Proc(
6854 IN PRTMP_ADAPTER pAd,
6857 #ifdef CONFIG_APSTA_MIXED_SUPPORT
6858 INT Set_OpMode_Proc(
6859 IN PRTMP_ADAPTER pAd,
6861 #endif // CONFIG_APSTA_MIXED_SUPPORT //
6863 static inline char* GetPhyMode(
6873 #ifdef DOT11_N_SUPPORT
6877 case MODE_HTGREENFIELD:
6879 #endif // DOT11_N_SUPPORT //
6886 static inline char* GetBW(
6896 #ifdef DOT11_N_SUPPORT
6899 #endif // DOT11_N_SUPPORT //
6906 VOID RT28xxThreadTerminate(
6907 IN RTMP_ADAPTER *pAd);
6909 BOOLEAN RT28XXChipsetCheck(
6912 BOOLEAN RT28XXNetDevInit(
6914 IN struct net_device *net_dev,
6915 IN RTMP_ADAPTER *pAd);
6917 BOOLEAN RT28XXProbePostConfig(
6919 IN RTMP_ADAPTER *pAd,
6922 VOID RT28XXDMADisable(
6923 IN RTMP_ADAPTER *pAd);
6925 VOID RT28XXDMAEnable(
6926 IN RTMP_ADAPTER *pAd);
6928 VOID RT28xx_UpdateBeaconToAsic(
6929 IN RTMP_ADAPTER * pAd,
6932 IN ULONG UpdatePos);
6935 IN struct net_device *net_dev,
6936 IN OUT struct ifreq *rq,
6940 #ifdef CONFIG_STA_SUPPORT
6941 INT rt28xx_sta_ioctl(
6942 IN struct net_device *net_dev,
6943 IN OUT struct ifreq *rq,
6945 #endif // CONFIG_STA_SUPPORT //
6947 BOOLEAN RT28XXSecurityKeyAdd(
6948 IN PRTMP_ADAPTER pAd,
6951 IN MAC_TABLE_ENTRY *pEntry);
6953 ////////////////////////////////////////
6954 PNDIS_PACKET GetPacketFromRxRing(
6955 IN PRTMP_ADAPTER pAd,
6956 OUT PRT28XX_RXD_STRUC pSaveRxD,
6957 OUT BOOLEAN *pbReschedule,
6958 IN OUT UINT32 *pRxPending);
6961 void kill_thread_task(PRTMP_ADAPTER pAd);
6963 void tbtt_tasklet(unsigned long data);
6966 // Function Prototype in cmm_data_2860.c
6968 USHORT RtmpPCI_WriteTxResource(
6969 IN PRTMP_ADAPTER pAd,
6972 OUT USHORT *FreeNumber);
6974 USHORT RtmpPCI_WriteSingleTxResource(
6975 IN PRTMP_ADAPTER pAd,
6978 OUT USHORT *FreeNumber);
6980 USHORT RtmpPCI_WriteMultiTxResource(
6981 IN PRTMP_ADAPTER pAd,
6984 OUT USHORT *FreeNumber);
6986 USHORT RtmpPCI_WriteFragTxResource(
6987 IN PRTMP_ADAPTER pAd,
6990 OUT USHORT *FreeNumber);
6992 USHORT RtmpPCI_WriteSubTxResource(
6993 IN PRTMP_ADAPTER pAd,
6996 OUT USHORT *FreeNumber);
6998 VOID RtmpPCI_FinalWriteTxResource(
6999 IN PRTMP_ADAPTER pAd,
7001 IN USHORT totalMPDUSize,
7002 IN USHORT FirstTxIdx);
7004 VOID RtmpPCIDataLastTxIdx(
7005 IN PRTMP_ADAPTER pAd,
7007 IN USHORT LastTxIdx);
7009 VOID RtmpPCIDataKickOut(
7010 IN PRTMP_ADAPTER pAd,
7015 int RtmpPCIMgmtKickOut(
7016 IN RTMP_ADAPTER *pAd,
7018 IN PNDIS_PACKET pPacket,
7019 IN PUCHAR pSrcBufVA,
7023 NDIS_STATUS RTMPCheckRxError(
7024 IN PRTMP_ADAPTER pAd,
7025 IN PHEADER_802_11 pHeader,
7026 IN PRXWI_STRUC pRxWI,
7027 IN PRT28XX_RXD_STRUC pRxD);
7029 #ifdef CONFIG_STA_SUPPORT
7030 VOID RTMPInitPCIeLinkCtrlValue(
7031 IN PRTMP_ADAPTER pAd);
7033 VOID RTMPFindHostPCIDev(
7034 IN PRTMP_ADAPTER pAd);
7036 VOID RTMPPCIeLinkCtrlValueRestore(
7037 IN PRTMP_ADAPTER pAd,
7040 VOID RTMPPCIeLinkCtrlSetting(
7041 IN PRTMP_ADAPTER pAd,
7044 VOID RT28xxPciAsicRadioOff(
7045 IN PRTMP_ADAPTER pAd,
7047 IN USHORT TbttNumToNextWakeUp);
7049 BOOLEAN RT28xxPciAsicRadioOn(
7050 IN PRTMP_ADAPTER pAd,
7053 VOID RT28xxPciStaAsicForceWakeup(
7054 IN PRTMP_ADAPTER pAd,
7057 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
7058 IN PRTMP_ADAPTER pAd,
7059 IN USHORT TbttNumToNextWakeUp);
7061 VOID PsPollWakeExec(
7062 IN PVOID SystemSpecific1,
7063 IN PVOID FunctionContext,
7064 IN PVOID SystemSpecific2,
7065 IN PVOID SystemSpecific3);
7068 IN PVOID SystemSpecific1,
7069 IN PVOID FunctionContext,
7070 IN PVOID SystemSpecific2,
7071 IN PVOID SystemSpecific3);
7072 #endif // CONFIG_STA_SUPPORT //
7074 VOID RT28xxPciMlmeRadioOn(
7075 IN PRTMP_ADAPTER pAd);
7077 VOID RT28xxPciMlmeRadioOFF(
7078 IN PRTMP_ADAPTER pAd);
7080 VOID AsicTurnOffRFClk(
7081 IN PRTMP_ADAPTER pAd,
7084 VOID AsicTurnOnRFClk(
7085 IN PRTMP_ADAPTER pAd,
7089 ////////////////////////////////////////
7092 IN RTMP_ADAPTER *pAd);
7094 UINT32 QBSS_LoadElementAppend(
7095 IN RTMP_ADAPTER *pAd,
7098 VOID QBSS_LoadUpdate(
7099 IN RTMP_ADAPTER *pAd);
7101 ///////////////////////////////////////
7102 INT RTMPShowCfgValue(
7103 IN PRTMP_ADAPTER pAd,
7107 PCHAR RTMPGetRalinkAuthModeStr(
7108 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7110 PCHAR RTMPGetRalinkEncryModeStr(
7111 IN USHORT encryMode);
7112 //////////////////////////////////////
7114 #ifdef CONFIG_STA_SUPPORT
7115 VOID AsicStaBbpTuning(
7116 IN PRTMP_ADAPTER pAd);
7118 VOID AsicResetFromDMABusy(
7119 IN PRTMP_ADAPTER pAd);
7122 IN PRTMP_ADAPTER pAd);
7125 IN PRTMP_ADAPTER pAd);
7128 IN PRTMP_ADAPTER pAd);
7129 #endif // CONFIG_STA_SUPPORT //
7131 void RTMP_IndicateMediaState(
7132 IN PRTMP_ADAPTER pAd);
7134 VOID ReSyncBeaconTime(
7135 IN PRTMP_ADAPTER pAd);
7137 VOID RTMPSetAGCInitValue(
7138 IN PRTMP_ADAPTER pAd,
7139 IN UCHAR BandWidth);
7141 int rt28xx_close(IN PNET_DEV dev);
7142 int rt28xx_open(IN PNET_DEV dev);
7144 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7146 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7147 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7149 if (VIRTUAL_IF_NUM(pAd) == 0)
7151 if (rt28xx_open(pAd->net_dev) != 0)
7157 VIRTUAL_IF_INC(pAd);
7161 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7163 VIRTUAL_IF_DEC(pAd);
7164 if (VIRTUAL_IF_NUM(pAd) == 0)
7165 rt28xx_close(pAd->net_dev);
7170 #endif // __RTMP_H__