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.
207 BOOLEAN bFWLoading
; // Reload firmware when ATE is done.
212 CHAR LastSNR0
; // last received SNR
213 CHAR LastSNR1
; // last received SNR for 2nd antenna
214 CHAR LastRssi0
; // last received RSSI
215 CHAR LastRssi1
; // last received RSSI for 2nd antenna
216 CHAR LastRssi2
; // last received RSSI for 3rd antenna
217 CHAR AvgRssi0
; // last 8 frames' average RSSI
218 CHAR AvgRssi1
; // last 8 frames' average RSSI
219 CHAR AvgRssi2
; // last 8 frames' average RSSI
220 SHORT AvgRssi0X8
; // sum of last 8 frames' RSSI
221 SHORT AvgRssi1X8
; // sum of last 8 frames' RSSI
222 SHORT AvgRssi2X8
; // sum of last 8 frames' RSSI
224 UINT32 NumOfAvgRssiSample
;
226 #ifdef RALINK_28xx_QA
228 USHORT HLen
; // Header Length
229 USHORT PLen
; // Pattern Length
230 UCHAR Header
[32]; // Header buffer
231 UCHAR Pattern
[32]; // Pattern buffer
232 USHORT DLen
; // Data Length
253 //UINT32 Repeat; // Tx Cpu count
254 UCHAR TxStatus
; // task Tx status // 0 --> task is idle, 1 --> task is running
255 #endif // RALINK_28xx_QA //
256 } ATE_INFO
, *PATE_INFO
;
258 #ifdef RALINK_28xx_QA
259 struct ate_racfghdr
{
267 } __attribute__((packed
));
268 #endif // RALINK_28xx_QA //
269 #endif // RALINK_ATE //
271 #ifdef DOT11_N_SUPPORT
272 struct reordering_mpdu
274 struct reordering_mpdu
*next
;
275 PNDIS_PACKET pPacket
; /* coverted to 802.3 frame */
276 int Sequence
; /* sequence number of MPDU */
280 struct reordering_list
282 struct reordering_mpdu
*next
;
286 struct reordering_mpdu_pool
290 struct reordering_list freelist
;
292 #endif // DOT11_N_SUPPORT //
294 typedef struct _RSSI_SAMPLE
{
295 CHAR LastRssi0
; // last received RSSI
296 CHAR LastRssi1
; // last received RSSI
297 CHAR LastRssi2
; // last received RSSI
307 // Queue structure and macros
309 typedef struct _QUEUE_ENTRY
{
310 struct _QUEUE_ENTRY
*Next
;
311 } QUEUE_ENTRY
, *PQUEUE_ENTRY
;
314 typedef struct _QUEUE_HEADER
{
318 } QUEUE_HEADER
, *PQUEUE_HEADER
;
320 #define InitializeQueueHeader(QueueHeader) \
322 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
323 (QueueHeader)->Number = 0; \
326 #define RemoveHeadQueue(QueueHeader) \
327 (QueueHeader)->Head; \
329 PQUEUE_ENTRY pNext; \
330 if ((QueueHeader)->Head != NULL) \
332 pNext = (QueueHeader)->Head->Next; \
333 (QueueHeader)->Head = pNext; \
335 (QueueHeader)->Tail = NULL; \
336 (QueueHeader)->Number--; \
340 #define InsertHeadQueue(QueueHeader, QueueEntry) \
342 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
343 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
344 if ((QueueHeader)->Tail == NULL) \
345 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
346 (QueueHeader)->Number++; \
349 #define InsertTailQueue(QueueHeader, QueueEntry) \
351 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
352 if ((QueueHeader)->Tail) \
353 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
355 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
356 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
357 (QueueHeader)->Number++; \
361 // Macros for flag and ref count operations
363 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
364 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
365 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
366 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
367 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
369 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
370 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
371 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
373 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
374 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
375 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
377 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
378 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
379 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
381 #ifdef CONFIG_STA_SUPPORT
382 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
383 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
384 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
385 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
387 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
388 #endif // CONFIG_STA_SUPPORT //
390 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
391 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
394 #define INC_RING_INDEX(_idx, _RingSize) \
396 (_idx) = (_idx+1) % (_RingSize); \
399 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
401 #define RING_PACKET_INIT(_TxRing, _idx) \
403 _TxRing->Cell[_idx].pNdisPacket = NULL; \
404 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
407 #define TXDT_INIT(_TxD) \
409 NdisZeroMemory(_TxD, TXD_SIZE); \
413 //Set last data segment
414 #define RING_SET_LASTDS(_TxD, _IsSD0) \
416 if (_IsSD0) {_TxD->LastSec0 = 1;} \
417 else {_TxD->LastSec1 = 1;} \
420 // Increase TxTsc value for next transmission
422 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
423 // Should send a special event microsoft defined to request re-key
424 #define INC_TX_TSC(_tsc) \
427 while (++_tsc[i] == 0x0) \
435 #ifdef DOT11_N_SUPPORT
436 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
437 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
439 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
440 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
441 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
442 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
443 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
444 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
445 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
446 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
447 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
448 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
449 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
450 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
453 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
455 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
456 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
457 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
459 #endif // DOT11_N_SUPPORT //
462 // MACRO for 32-bit PCI register read / write
464 // Usage : RTMP_IO_READ32(
465 // PRTMP_ADAPTER pAd,
466 // ULONG Register_Offset,
470 // PRTMP_ADAPTER pAd,
471 // ULONG Register_Offset,
476 // BBP & RF are using indirect access. Before write any value into it.
477 // We have to make sure there is no outstanding command pending via checking busy bit.
479 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
482 #define RTMP_RF_IO_WRITE32(_A, _V) \
484 PHY_CSR4_STRUC Value; \
486 if ((_A)->bPCIclkOff) \
491 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
492 if (Value.field.Busy == IDLE) \
495 } while (BusyCnt < MAX_BUSY_COUNT); \
496 if (BusyCnt < MAX_BUSY_COUNT) \
498 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
502 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
504 BBP_CSR_CFG_STRUC BbpCsr; \
506 for (i=0; i<MAX_BUSY_COUNT; i++) \
508 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
509 if (BbpCsr.field.Busy == BUSY) \
514 BbpCsr.field.fRead = 1; \
515 BbpCsr.field.BBP_RW_MODE = 1; \
516 BbpCsr.field.Busy = 1; \
517 BbpCsr.field.RegNum = _I; \
518 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
519 for (k=0; k<MAX_BUSY_COUNT; k++) \
521 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
522 if (BbpCsr.field.Busy == IDLE) \
525 if ((BbpCsr.field.Busy == IDLE) && \
526 (BbpCsr.field.RegNum == _I)) \
528 *(_pV) = (UCHAR)BbpCsr.field.Value; \
532 if (BbpCsr.field.Busy == BUSY) \
534 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
535 *(_pV) = (_A)->BbpWriteLatch[_I]; \
539 //#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
540 // Read BBP register by register's ID. Generate PER to test BA
541 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
543 BBP_CSR_CFG_STRUC BbpCsr; \
545 if ((_A)->bPCIclkOff == FALSE) \
547 for (i=0; i<MAX_BUSY_COUNT; i++) \
549 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
550 if (BbpCsr.field.Busy == BUSY) \
555 BbpCsr.field.fRead = 1; \
556 BbpCsr.field.BBP_RW_MODE = 1; \
557 BbpCsr.field.Busy = 1; \
558 BbpCsr.field.RegNum = _I; \
559 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
560 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
561 RTMPusecDelay(1000); \
562 for (k=0; k<MAX_BUSY_COUNT; k++) \
564 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
565 if (BbpCsr.field.Busy == IDLE) \
568 if ((BbpCsr.field.Busy == IDLE) && \
569 (BbpCsr.field.RegNum == _I)) \
571 *(_pV) = (UCHAR)BbpCsr.field.Value; \
575 if (BbpCsr.field.Busy == BUSY) \
577 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
578 *(_pV) = (_A)->BbpWriteLatch[_I]; \
579 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
580 BbpCsr.field.Busy = 0; \
581 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
586 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
588 BBP_CSR_CFG_STRUC BbpCsr; \
590 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
592 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
593 if (BbpCsr.field.Busy == BUSY) \
596 BbpCsr.field.fRead = 0; \
597 BbpCsr.field.BBP_RW_MODE = 1; \
598 BbpCsr.field.Busy = 1; \
599 BbpCsr.field.Value = _V; \
600 BbpCsr.field.RegNum = _I; \
601 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
602 (_A)->BbpWriteLatch[_I] = _V; \
605 if (BusyCnt == MAX_BUSY_COUNT) \
607 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
611 // Write BBP register by register's ID & value
612 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
614 BBP_CSR_CFG_STRUC BbpCsr; \
616 if ((_A)->bPCIclkOff == FALSE) \
618 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
620 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
621 if (BbpCsr.field.Busy == BUSY) \
624 BbpCsr.field.fRead = 0; \
625 BbpCsr.field.BBP_RW_MODE = 1; \
626 BbpCsr.field.Busy = 1; \
627 BbpCsr.field.Value = _V; \
628 BbpCsr.field.RegNum = _I; \
629 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
630 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
631 if (_A->OpMode == OPMODE_AP) \
632 RTMPusecDelay(1000); \
633 (_A)->BbpWriteLatch[_I] = _V; \
636 if (BusyCnt == MAX_BUSY_COUNT) \
638 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
639 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
640 BbpCsr.field.Busy = 0; \
641 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
648 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
651 case 1: khz = 2412000; break; \
652 case 2: khz = 2417000; break; \
653 case 3: khz = 2422000; break; \
654 case 4: khz = 2427000; break; \
655 case 5: khz = 2432000; break; \
656 case 6: khz = 2437000; break; \
657 case 7: khz = 2442000; break; \
658 case 8: khz = 2447000; break; \
659 case 9: khz = 2452000; break; \
660 case 10: khz = 2457000; break; \
661 case 11: khz = 2462000; break; \
662 case 12: khz = 2467000; break; \
663 case 13: khz = 2472000; break; \
664 case 14: khz = 2484000; break; \
665 case 36: /* UNII */ khz = 5180000; break; \
666 case 40: /* UNII */ khz = 5200000; break; \
667 case 44: /* UNII */ khz = 5220000; break; \
668 case 48: /* UNII */ khz = 5240000; break; \
669 case 52: /* UNII */ khz = 5260000; break; \
670 case 56: /* UNII */ khz = 5280000; break; \
671 case 60: /* UNII */ khz = 5300000; break; \
672 case 64: /* UNII */ khz = 5320000; break; \
673 case 149: /* UNII */ khz = 5745000; break; \
674 case 153: /* UNII */ khz = 5765000; break; \
675 case 157: /* UNII */ khz = 5785000; break; \
676 case 161: /* UNII */ khz = 5805000; break; \
677 case 165: /* UNII */ khz = 5825000; break; \
678 case 100: /* HiperLAN2 */ khz = 5500000; break; \
679 case 104: /* HiperLAN2 */ khz = 5520000; break; \
680 case 108: /* HiperLAN2 */ khz = 5540000; break; \
681 case 112: /* HiperLAN2 */ khz = 5560000; break; \
682 case 116: /* HiperLAN2 */ khz = 5580000; break; \
683 case 120: /* HiperLAN2 */ khz = 5600000; break; \
684 case 124: /* HiperLAN2 */ khz = 5620000; break; \
685 case 128: /* HiperLAN2 */ khz = 5640000; break; \
686 case 132: /* HiperLAN2 */ khz = 5660000; break; \
687 case 136: /* HiperLAN2 */ khz = 5680000; break; \
688 case 140: /* HiperLAN2 */ khz = 5700000; break; \
689 case 34: /* Japan MMAC */ khz = 5170000; break; \
690 case 38: /* Japan MMAC */ khz = 5190000; break; \
691 case 42: /* Japan MMAC */ khz = 5210000; break; \
692 case 46: /* Japan MMAC */ khz = 5230000; break; \
693 case 184: /* Japan */ khz = 4920000; break; \
694 case 188: /* Japan */ khz = 4940000; break; \
695 case 192: /* Japan */ khz = 4960000; break; \
696 case 196: /* Japan */ khz = 4980000; break; \
697 case 208: /* Japan, means J08 */ khz = 5040000; break; \
698 case 212: /* Japan, means J12 */ khz = 5060000; break; \
699 case 216: /* Japan, means J16 */ khz = 5080000; break; \
700 default: khz = 2412000; break; \
704 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
707 case 2412000: ch = 1; break; \
708 case 2417000: ch = 2; break; \
709 case 2422000: ch = 3; break; \
710 case 2427000: ch = 4; break; \
711 case 2432000: ch = 5; break; \
712 case 2437000: ch = 6; break; \
713 case 2442000: ch = 7; break; \
714 case 2447000: ch = 8; break; \
715 case 2452000: ch = 9; break; \
716 case 2457000: ch = 10; break; \
717 case 2462000: ch = 11; break; \
718 case 2467000: ch = 12; break; \
719 case 2472000: ch = 13; break; \
720 case 2484000: ch = 14; break; \
721 case 5180000: ch = 36; /* UNII */ break; \
722 case 5200000: ch = 40; /* UNII */ break; \
723 case 5220000: ch = 44; /* UNII */ break; \
724 case 5240000: ch = 48; /* UNII */ break; \
725 case 5260000: ch = 52; /* UNII */ break; \
726 case 5280000: ch = 56; /* UNII */ break; \
727 case 5300000: ch = 60; /* UNII */ break; \
728 case 5320000: ch = 64; /* UNII */ break; \
729 case 5745000: ch = 149; /* UNII */ break; \
730 case 5765000: ch = 153; /* UNII */ break; \
731 case 5785000: ch = 157; /* UNII */ break; \
732 case 5805000: ch = 161; /* UNII */ break; \
733 case 5825000: ch = 165; /* UNII */ break; \
734 case 5500000: ch = 100; /* HiperLAN2 */ break; \
735 case 5520000: ch = 104; /* HiperLAN2 */ break; \
736 case 5540000: ch = 108; /* HiperLAN2 */ break; \
737 case 5560000: ch = 112; /* HiperLAN2 */ break; \
738 case 5580000: ch = 116; /* HiperLAN2 */ break; \
739 case 5600000: ch = 120; /* HiperLAN2 */ break; \
740 case 5620000: ch = 124; /* HiperLAN2 */ break; \
741 case 5640000: ch = 128; /* HiperLAN2 */ break; \
742 case 5660000: ch = 132; /* HiperLAN2 */ break; \
743 case 5680000: ch = 136; /* HiperLAN2 */ break; \
744 case 5700000: ch = 140; /* HiperLAN2 */ break; \
745 case 5170000: ch = 34; /* Japan MMAC */ break; \
746 case 5190000: ch = 38; /* Japan MMAC */ break; \
747 case 5210000: ch = 42; /* Japan MMAC */ break; \
748 case 5230000: ch = 46; /* Japan MMAC */ break; \
749 case 4920000: ch = 184; /* Japan */ break; \
750 case 4940000: ch = 188; /* Japan */ break; \
751 case 4960000: ch = 192; /* Japan */ break; \
752 case 4980000: ch = 196; /* Japan */ break; \
753 case 5040000: ch = 208; /* Japan, means J08 */ break; \
754 case 5060000: ch = 212; /* Japan, means J12 */ break; \
755 case 5080000: ch = 216; /* Japan, means J16 */ break; \
756 default: ch = 1; break; \
761 // Common fragment list structure - Identical to the scatter gather frag list structure
763 #define NIC_MAX_PHYS_BUF_COUNT 8
765 typedef struct _RTMP_SCATTER_GATHER_ELEMENT
{
769 } RTMP_SCATTER_GATHER_ELEMENT
, *PRTMP_SCATTER_GATHER_ELEMENT
;
772 typedef struct _RTMP_SCATTER_GATHER_LIST
{
773 ULONG NumberOfElements
;
775 RTMP_SCATTER_GATHER_ELEMENT Elements
[NIC_MAX_PHYS_BUF_COUNT
];
776 } RTMP_SCATTER_GATHER_LIST
, *PRTMP_SCATTER_GATHER_LIST
;
779 // Some utility macros
782 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
786 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
789 #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))))
791 #define INC_COUNTER64(Val) (Val.QuadPart++)
793 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
794 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
795 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
796 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
798 // Check LEAP & CCKM flags
799 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
800 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
802 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
803 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
805 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
807 _pExtraLlcSnapEncap = SNAP_802_1H; \
808 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
809 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
811 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
816 _pExtraLlcSnapEncap = NULL; \
820 // New Define for new Tx Path.
821 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
823 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
825 _pExtraLlcSnapEncap = SNAP_802_1H; \
826 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
827 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
829 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
834 _pExtraLlcSnapEncap = NULL; \
839 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
841 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
842 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
843 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
846 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
847 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
848 // else remove the LLC/SNAP field from the result Ethernet frame
849 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
851 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
852 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
853 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
857 _pRemovedLLCSNAP = NULL; \
858 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
859 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
861 PUCHAR pProto = _pData + 6; \
863 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
864 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
866 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
867 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
868 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
872 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
873 _pRemovedLLCSNAP = _pData; \
874 _DataSize -= LENGTH_802_1_H; \
875 _pData += LENGTH_802_1_H; \
880 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
881 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
882 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
886 #define SWITCH_AB( _pAA, _pBB) \
894 // Enqueue this frame to MLME engine
895 // We need to enqueue the whole frame because MLME need to pass data type
896 // information from 802.11 header
898 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
900 UINT32 High32TSF, Low32TSF; \
901 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
902 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
903 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
907 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
908 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
910 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
911 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
914 // Check if it is Japan W53(ch52,56,60,64) channel.
916 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
918 #ifdef CONFIG_STA_SUPPORT
919 #define STA_PORT_SECURED(_pAd) \
921 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
922 NdisAcquireSpinLock(&_pAd->MacTabLock); \
923 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
924 NdisReleaseSpinLock(&_pAd->MacTabLock); \
926 #endif // CONFIG_STA_SUPPORT //
930 // Register set pair for initialzation register set definition
932 typedef struct _RTMP_REG_PAIR
936 } RTMP_REG_PAIR
, *PRTMP_REG_PAIR
;
938 typedef struct _REG_PAIR
942 } REG_PAIR
, *PREG_PAIR
;
945 // Register set pair for initialzation register set definition
947 typedef struct _RTMP_RF_REGS
954 } RTMP_RF_REGS
, *PRTMP_RF_REGS
;
956 typedef struct _FREQUENCY_ITEM
{
961 } FREQUENCY_ITEM
, *PFREQUENCY_ITEM
;
964 // Data buffer for DMA operation, the buffer must be contiguous physical memory
965 // Both DMA to / from CPU use the same structure.
967 typedef struct _RTMP_DMABUF
970 PVOID AllocVa
; // TxBuf virtual address
971 NDIS_PHYSICAL_ADDRESS AllocPa
; // TxBuf physical address
972 } RTMP_DMABUF
, *PRTMP_DMABUF
;
975 typedef union _HEADER_802_11_SEQ
{
988 } HEADER_802_11_SEQ
, *PHEADER_802_11_SEQ
;
991 // Data buffer for DMA operation, the buffer must be contiguous physical memory
992 // Both DMA to / from CPU use the same structure.
994 typedef struct _RTMP_REORDERBUF
997 PVOID AllocVa
; // TxBuf virtual address
998 UCHAR Header802_3
[14];
999 HEADER_802_11_SEQ Sequence
; //support compressed bitmap BA, so no consider fragment in BA
1004 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 ReceivedByteCount
; // both CRC okay and CRC error, used to calculate RX throughput
1105 ULONG BeenDisassociatedCount
;
1106 ULONG BadCQIAutoRecoveryCount
;
1107 ULONG PoorCQIRoamingCount
;
1108 ULONG MgmtRingFullCount
;
1109 ULONG RxCountSinceLastNULL
;
1111 ULONG RxRingErrCount
;
1113 ULONG TxRingErrCount
;
1114 LARGE_INTEGER RealFcsErrCount
;
1115 ULONG PendingNdisPacketCount
;
1117 ULONG OneSecOsTxCount
[NUM_OF_TX_RING
];
1118 ULONG OneSecDmaDoneCount
[NUM_OF_TX_RING
];
1119 UINT32 OneSecTxDoneCount
;
1120 ULONG OneSecRxCount
;
1121 UINT32 OneSecTxAggregationCount
;
1122 UINT32 OneSecRxAggregationCount
;
1124 UINT32 OneSecFrameDuplicateCount
;
1127 UINT32 OneSecTxNoRetryOkCount
;
1128 UINT32 OneSecTxRetryOkCount
;
1129 UINT32 OneSecTxFailCount
;
1130 UINT32 OneSecFalseCCACnt
; // CCA error count, for debug purpose, might move to global counter
1131 UINT32 OneSecRxOkCnt
; // RX without error
1132 UINT32 OneSecRxOkDataCnt
; // unicast-to-me DATA frame count
1133 UINT32 OneSecRxFcsErrCnt
; // CRC error
1134 UINT32 OneSecBeaconSentCnt
;
1135 UINT32 LastOneSecTotalTxCount
; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1136 UINT32 LastOneSecRxOkDataCnt
; // OneSecRxOkDataCnt
1139 ULONG TxNonAggCount
;
1140 ULONG TxAgg1MPDUCount
;
1141 ULONG TxAgg2MPDUCount
;
1142 ULONG TxAgg3MPDUCount
;
1143 ULONG TxAgg4MPDUCount
;
1144 ULONG TxAgg5MPDUCount
;
1145 ULONG TxAgg6MPDUCount
;
1146 ULONG TxAgg7MPDUCount
;
1147 ULONG TxAgg8MPDUCount
;
1148 ULONG TxAgg9MPDUCount
;
1149 ULONG TxAgg10MPDUCount
;
1150 ULONG TxAgg11MPDUCount
;
1151 ULONG TxAgg12MPDUCount
;
1152 ULONG TxAgg13MPDUCount
;
1153 ULONG TxAgg14MPDUCount
;
1154 ULONG TxAgg15MPDUCount
;
1155 ULONG TxAgg16MPDUCount
;
1157 LARGE_INTEGER TransmittedOctetsInAMSDU
;
1158 LARGE_INTEGER TransmittedAMSDUCount
;
1159 LARGE_INTEGER ReceivedOctesInAMSDUCount
;
1160 LARGE_INTEGER ReceivedAMSDUCount
;
1161 LARGE_INTEGER TransmittedAMPDUCount
;
1162 LARGE_INTEGER TransmittedMPDUsInAMPDUCount
;
1163 LARGE_INTEGER TransmittedOctetsInAMPDUCount
;
1164 LARGE_INTEGER MPDUInReceivedAMPDUCount
;
1165 } COUNTER_RALINK
, *PCOUNTER_RALINK
;
1167 typedef struct _PID_COUNTER
{
1168 ULONG TxAckRequiredCount
; // CRC error
1170 ULONG TxSuccessCount
; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1171 ULONG LastSuccessRate
;
1172 } PID_COUNTER
, *PPID_COUNTER
;
1174 typedef struct _COUNTER_DRS
{
1175 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1176 USHORT TxQuality
[MAX_STEP_OF_TX_RATE_SWITCH
];
1177 UCHAR PER
[MAX_STEP_OF_TX_RATE_SWITCH
];
1178 UCHAR TxRateUpPenalty
; // extra # of second penalty due to last unstable condition
1179 ULONG CurrTxRateStableTime
; // # of second in current TX rate
1180 BOOLEAN fNoisyEnvironment
;
1181 BOOLEAN fLastSecAccordingRSSI
;
1182 UCHAR LastSecTxRateChangeAction
; // 0: no change, 1:rate UP, 2:rate down
1183 UCHAR LastTimeTxRateChangeAction
; //Keep last time value of LastSecTxRateChangeAction
1184 ULONG LastTxOkCount
;
1185 } COUNTER_DRS
, *PCOUNTER_DRS
;
1188 // Arcfour Structure Added by PaulWu
1190 typedef struct _ARCFOUR
1195 } ARCFOURCONTEXT
, *PARCFOURCONTEXT
;
1197 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1198 typedef struct _RECEIVE_SETTING
{
1199 #ifdef RT_BIG_ENDIAN
1203 USHORT STBC
:2; //SPACE
1205 USHORT Mode
:2; //channel bandwidth 20MHz or 40 MHz
1206 USHORT NumOfRX
:2; // MIMO. WE HAVE 3R
1208 USHORT NumOfRX
:2; // MIMO. WE HAVE 3R
1209 USHORT Mode
:2; //channel bandwidth 20MHz or 40 MHz
1211 USHORT STBC
:2; //SPACE
1216 } RECEIVE_SETTING
, *PRECEIVE_SETTING
;
1218 // Shared key data structure
1219 typedef struct _WEP_KEY
{
1220 UCHAR KeyLen
; // Key length for each key, 0: entry is invalid
1221 UCHAR Key
[MAX_LEN_OF_KEY
]; // right now we implement 4 keys, 128 bits max
1222 } WEP_KEY
, *PWEP_KEY
;
1224 typedef struct _CIPHER_KEY
{
1225 UCHAR Key
[16]; // right now we implement 4 keys, 128 bits max
1226 UCHAR RxMic
[8]; // make alignment
1228 UCHAR TxTsc
[6]; // 48bit TSC value
1229 UCHAR RxTsc
[6]; // 48bit TSC value
1230 UCHAR CipherAlg
; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1232 #ifdef CONFIG_STA_SUPPORT
1234 #endif // CONFIG_STA_SUPPORT //
1235 // Key length for each key, 0: entry is invalid
1236 UCHAR Type
; // Indicate Pairwise/Group when reporting MIC error
1237 } CIPHER_KEY
, *PCIPHER_KEY
;
1239 typedef struct _BBP_TUNING_STRUCT
{
1241 UCHAR FalseCcaCountUpperBound
; // 100 per sec
1242 UCHAR FalseCcaCountLowerBound
; // 10 per sec
1243 UCHAR R17LowerBound
; // specified in E2PROM
1244 UCHAR R17UpperBound
; // 0x68 according to David Tung
1245 UCHAR CurrentR17Value
;
1246 } BBP_TUNING
, *PBBP_TUNING
;
1248 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT
{
1249 UCHAR EvaluatePeriod
; // 0:not evalute status, 1: evaluate status, 2: switching status
1250 UCHAR Pair1PrimaryRxAnt
; // 0:Ant-E1, 1:Ant-E2
1251 UCHAR Pair1SecondaryRxAnt
; // 0:Ant-E1, 1:Ant-E2
1252 UCHAR Pair2PrimaryRxAnt
; // 0:Ant-E3, 1:Ant-E4
1253 UCHAR Pair2SecondaryRxAnt
; // 0:Ant-E3, 1:Ant-E4
1254 SHORT Pair1AvgRssi
[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1255 SHORT Pair2AvgRssi
[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1256 SHORT Pair1LastAvgRssi
; //
1257 SHORT Pair2LastAvgRssi
; //
1258 ULONG RcvPktNumWhenEvaluate
;
1259 BOOLEAN FirstPktArrivedWhenEvaluate
;
1260 RALINK_TIMER_STRUCT RxAntDiversityTimer
;
1261 } SOFT_RX_ANT_DIVERSITY
, *PSOFT_RX_ANT_DIVERSITY
;
1263 typedef struct _LEAP_AUTH_INFO
{
1264 BOOLEAN Enabled
; //Ture: Enable LEAP Authentication
1265 BOOLEAN CCKM
; //Ture: Use Fast Reauthentication with CCKM
1267 UCHAR UserName
[256]; //LEAP, User name
1269 UCHAR Password
[256]; //LEAP, User Password
1271 } LEAP_AUTH_INFO
, *PLEAP_AUTH_INFO
;
1274 UCHAR Addr
[MAC_ADDR_LEN
];
1275 UCHAR ErrorCode
[2]; //00 01-Invalid authentication type
1276 //00 02-Authentication timeout
1277 //00 03-Challenge from AP failed
1278 //00 04-Challenge to AP failed
1280 } ROGUEAP_ENTRY
, *PROGUEAP_ENTRY
;
1284 ROGUEAP_ENTRY RogueApEntry
[MAX_LEN_OF_BSS_TABLE
];
1285 } ROGUEAP_TABLE
, *PROGUEAP_TABLE
;
1291 } CCK_TX_POWER_CALIBRATE
, *PCCK_TX_POWER_CALIBRATE
;
1294 // Receive Tuple Cache Format
1296 typedef struct _TUPLE_CACHE
{
1298 UCHAR MacAddress
[MAC_ADDR_LEN
];
1301 } TUPLE_CACHE
, *PTUPLE_CACHE
;
1304 // Fragment Frame structure
1306 typedef struct _FRAGMENT_FRAME
{
1307 PNDIS_PACKET pFragPacket
;
1311 ULONG Flags
; // Some extra frame information. bit 0: LLC presented
1312 } FRAGMENT_FRAME
, *PFRAGMENT_FRAME
;
1316 // Packet information for NdisQueryPacket
1318 typedef struct _PACKET_INFO
{
1319 UINT PhysicalBufferCount
; // Physical breaks of buffer descripor chained
1320 UINT BufferCount
; // Number of Buffer descriptor chained
1321 UINT TotalPacketLength
; // Self explained
1322 PNDIS_BUFFER pFirstBuffer
; // Pointer to first buffer descriptor
1323 } PACKET_INFO
, *PPACKET_INFO
;
1326 // Tkip Key structure which RC4 key & MIC calculation
1328 typedef struct _TKIP_KEY_INFO
{
1329 UINT nBytesInM
; // # bytes in M for MICKEY
1332 ULONG K0
; // for MICKEY Low
1333 ULONG K1
; // for MICKEY Hig
1334 ULONG L
; // Current state for MICKEY
1335 ULONG R
; // Current state for MICKEY
1336 ULONG M
; // Message accumulator for MICKEY
1339 } TKIP_KEY_INFO
, *PTKIP_KEY_INFO
;
1342 // Private / Misc data, counters for driver internal use
1344 typedef struct __PRIVATE_STRUC
{
1345 UINT SystemResetCnt
; // System reset counter
1346 UINT TxRingFullCnt
; // Tx ring full occurrance number
1347 UINT PhyRxErrCnt
; // PHY Rx error count, for debug purpose, might move to global counter
1348 // Variables for WEP encryption / decryption in rtmp_wep.c
1350 ARCFOURCONTEXT WEPCONTEXT
;
1354 } PRIVATE_STRUC
, *PPRIVATE_STRUC
;
1356 // structure to tune BBP R66 (BBP TUNING)
1357 typedef struct _BBP_R66_TUNING
{
1359 USHORT FalseCcaLowerThreshold
; // default 100
1360 USHORT FalseCcaUpperThreshold
; // default 512
1362 UCHAR R66CurrentValue
;
1363 BOOLEAN R66LowerUpperSelect
; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1364 } BBP_R66_TUNING
, *PBBP_R66_TUNING
;
1366 // structure to store channel TX power
1367 typedef struct _CHANNEL_TX_POWER
{
1368 USHORT RemainingTimeForUse
; //unit: sec
1370 #ifdef DOT11N_DRAFT3
1371 BOOLEAN bEffectedChannel
; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1372 #endif // DOT11N_DRAFT3 //
1377 } CHANNEL_TX_POWER
, *PCHANNEL_TX_POWER
;
1379 // structure to store 802.11j channel TX power
1380 typedef struct _CHANNEL_11J_TX_POWER
{
1382 UCHAR BW
; // BW_10 or BW_20
1385 USHORT RemainingTimeForUse
; //unit: sec
1386 } CHANNEL_11J_TX_POWER
, *PCHANNEL_11J_TX_POWER
;
1388 typedef enum _ABGBAND_STATE_
{
1394 typedef struct _MLME_STRUCT
{
1395 #ifdef CONFIG_STA_SUPPORT
1396 // STA state machines
1397 STATE_MACHINE CntlMachine
;
1398 STATE_MACHINE AssocMachine
;
1399 STATE_MACHINE AuthMachine
;
1400 STATE_MACHINE AuthRspMachine
;
1401 STATE_MACHINE SyncMachine
;
1402 STATE_MACHINE WpaPskMachine
;
1403 STATE_MACHINE LeapMachine
;
1404 STATE_MACHINE AironetMachine
;
1405 STATE_MACHINE_FUNC AssocFunc
[ASSOC_FUNC_SIZE
];
1406 STATE_MACHINE_FUNC AuthFunc
[AUTH_FUNC_SIZE
];
1407 STATE_MACHINE_FUNC AuthRspFunc
[AUTH_RSP_FUNC_SIZE
];
1408 STATE_MACHINE_FUNC SyncFunc
[SYNC_FUNC_SIZE
];
1409 STATE_MACHINE_FUNC WpaPskFunc
[WPA_PSK_FUNC_SIZE
];
1410 STATE_MACHINE_FUNC AironetFunc
[AIRONET_FUNC_SIZE
];
1411 #endif // CONFIG_STA_SUPPORT //
1412 STATE_MACHINE_FUNC ActFunc
[ACT_FUNC_SIZE
];
1414 STATE_MACHINE ActMachine
;
1417 #ifdef QOS_DLS_SUPPORT
1418 STATE_MACHINE DlsMachine
;
1419 STATE_MACHINE_FUNC DlsFunc
[DLS_FUNC_SIZE
];
1420 #endif // QOS_DLS_SUPPORT //
1425 ULONG ChannelQuality
; // 0..100, Channel Quality Indication for Roaming
1426 ULONG Now32
; // latch the value of NdisGetSystemUpTime()
1427 ULONG LastSendNULLpsmTime
;
1430 NDIS_SPIN_LOCK TaskLock
;
1435 RALINK_TIMER_STRUCT PeriodicTimer
;
1436 RALINK_TIMER_STRUCT APSDPeriodicTimer
;
1437 RALINK_TIMER_STRUCT LinkDownTimer
;
1438 RALINK_TIMER_STRUCT LinkUpTimer
;
1440 UCHAR bPsPollTimerRunning
;
1441 RALINK_TIMER_STRUCT PsPollTimer
;
1442 RALINK_TIMER_STRUCT RadioOnOffTimer
;
1444 ULONG PeriodicRound
;
1445 ULONG OneSecPeriodicRound
;
1448 BOOLEAN bLowThroughput
;
1449 BOOLEAN bEnableAutoAntennaCheck
;
1450 RALINK_TIMER_STRUCT RxAntEvalTimer
;
1453 } MLME_STRUCT
, *PMLME_STRUCT
;
1455 // structure for radar detection and channel switch
1456 typedef struct _RADAR_DETECT_STRUCT
{
1457 UCHAR CSCount
; //Channel switch counter
1458 UCHAR CSPeriod
; //Channel switch period (beacon count)
1459 UCHAR RDCount
; //Radar detection counter
1460 UCHAR RDMode
; //Radar Detection mode
1461 UCHAR RDDurRegion
; //Radar detection duration region
1468 ULONG InServiceMonitorCount
; // unit: sec
1469 UINT8 DfsSessionTime
;
1472 UINT8 LongPulseRadarTh
;
1473 } RADAR_DETECT_STRUCT
, *PRADAR_DETECT_STRUCT
;
1475 #ifdef CARRIER_DETECTION_SUPPORT
1476 typedef enum CD_STATE_n
1483 typedef struct CARRIER_DETECTION_s
1486 UINT8 CDSessionTime
;
1489 } CARRIER_DETECTION
, *PCARRIER_DETECTION
;
1490 #endif // CARRIER_DETECTION_SUPPORT //
1492 typedef enum _REC_BLOCKACK_STATUS
1496 Recipient_HandleRes
,
1498 } REC_BLOCKACK_STATUS
, *PREC_BLOCKACK_STATUS
;
1500 typedef enum _ORI_BLOCKACK_STATUS
1506 } ORI_BLOCKACK_STATUS
, *PORI_BLOCKACK_STATUS
;
1508 #ifdef DOT11_N_SUPPORT
1509 typedef struct _BA_ORI_ENTRY
{
1514 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1516 USHORT TimeOutValue
;
1517 ORI_BLOCKACK_STATUS ORI_BA_Status
;
1518 RALINK_TIMER_STRUCT ORIBATimer
;
1520 } BA_ORI_ENTRY
, *PBA_ORI_ENTRY
;
1522 typedef struct _BA_REC_ENTRY
{
1525 UCHAR BAWinSize
; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1527 USHORT TimeOutValue
;
1528 RALINK_TIMER_STRUCT RECBATimer
;
1529 ULONG LastIndSeqAtTimer
;
1532 REC_BLOCKACK_STATUS REC_BA_Status
;
1533 NDIS_SPIN_LOCK RxReRingLock
; // Rx Ring spinlock
1535 struct reordering_list list
;
1536 } BA_REC_ENTRY
, *PBA_REC_ENTRY
;
1540 ULONG numAsRecipient
; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1541 ULONG numAsOriginator
; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1542 BA_ORI_ENTRY BAOriEntry
[MAX_LEN_OF_BA_ORI_TABLE
];
1543 BA_REC_ENTRY BARecEntry
[MAX_LEN_OF_BA_REC_TABLE
];
1544 } BA_TABLE
, *PBA_TABLE
;
1546 //For QureyBATableOID use;
1547 typedef struct PACKED _OID_BA_REC_ENTRY
{
1548 UCHAR MACAddr
[MAC_ADDR_LEN
];
1549 UCHAR BaBitmap
; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1552 REC_BLOCKACK_STATUS REC_BA_Status
[8];
1553 } OID_BA_REC_ENTRY
, *POID_BA_REC_ENTRY
;
1555 //For QureyBATableOID use;
1556 typedef struct PACKED _OID_BA_ORI_ENTRY
{
1557 UCHAR MACAddr
[MAC_ADDR_LEN
];
1558 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
1561 ORI_BLOCKACK_STATUS ORI_BA_Status
[8];
1562 } OID_BA_ORI_ENTRY
, *POID_BA_ORI_ENTRY
;
1564 typedef struct _QUERYBA_TABLE
{
1565 OID_BA_ORI_ENTRY BAOriEntry
[32];
1566 OID_BA_REC_ENTRY BARecEntry
[32];
1567 UCHAR OriNum
;// Number of below BAOriEntry
1568 UCHAR RecNum
;// Number of below BARecEntry
1569 } QUERYBA_TABLE
, *PQUERYBA_TABLE
;
1571 typedef union _BACAP_STRUC
{
1572 #ifdef RT_BIG_ENDIAN
1575 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.
1576 UINT32 bHtAdhoc
:1; // adhoc can use ht rate.
1577 UINT32 MMPSmode
:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1578 UINT32 AmsduSize
:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1579 UINT32 AmsduEnable
:1; //Enable AMSDU transmisstion
1580 UINT32 MpduDensity
:3;
1581 UINT32 Policy
:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1582 UINT32 AutoBA
:1; // automatically BA
1583 UINT32 TxBAWinLimit
:8;
1584 UINT32 RxBAWinLimit
:8;
1588 UINT32 RxBAWinLimit
:8;
1589 UINT32 TxBAWinLimit
:8;
1590 UINT32 AutoBA
:1; // automatically BA
1591 UINT32 Policy
:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1592 UINT32 MpduDensity
:3;
1593 UINT32 AmsduEnable
:1; //Enable AMSDU transmisstion
1594 UINT32 AmsduSize
:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1595 UINT32 MMPSmode
:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1596 UINT32 bHtAdhoc
:1; // adhoc can use ht rate.
1597 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.
1602 } BACAP_STRUC
, *PBACAP_STRUC
;
1603 #endif // DOT11_N_SUPPORT //
1605 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1606 typedef struct _IOT_STRUC
{
1608 UCHAR ReorderTimeOutNum
[MAX_LEN_OF_BA_REC_TABLE
]; // compare with threshold[0]
1609 UCHAR RefreshNum
[MAX_LEN_OF_BA_REC_TABLE
]; // compare with threshold[1]
1610 ULONG OneSecInWindowCount
;
1611 ULONG OneSecFrameDuplicateCount
;
1612 ULONG OneSecOutWindowCount
;
1617 BOOLEAN bRTSLongProtOn
;
1618 #ifdef CONFIG_STA_SUPPORT
1619 BOOLEAN bLastAtheros
;
1620 BOOLEAN bCurrentAtheros
;
1621 BOOLEAN bNowAtherosBurstOn
;
1622 BOOLEAN bNextDisableRxBA
;
1624 #endif // CONFIG_STA_SUPPORT //
1625 } IOT_STRUC
, *PIOT_STRUC
;
1627 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1628 typedef union _REG_TRANSMIT_SETTING
{
1629 #ifdef RT_BIG_ENDIAN
1635 UINT32 STBC
:1; //SPACE
1637 UINT32 BW
:1; //channel bandwidth 20MHz or 40 MHz
1638 UINT32 TxBF
:1; // 3*3
1645 UINT32 BW
:1; //channel bandwidth 20MHz or 40 MHz
1647 UINT32 STBC
:1; //SPACE
1655 } REG_TRANSMIT_SETTING
, *PREG_TRANSMIT_SETTING
;
1657 typedef union _DESIRED_TRANSMIT_SETTING
{
1658 #ifdef RT_BIG_ENDIAN
1661 USHORT FixedTxMode
:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1663 USHORT MCS
:7; // MCS
1667 USHORT MCS
:7; // MCS
1669 USHORT FixedTxMode
:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1674 } DESIRED_TRANSMIT_SETTING
, *PDESIRED_TRANSMIT_SETTING
;
1677 BOOLEAN IsRecipient
;
1678 UCHAR MACAddr
[MAC_ADDR_LEN
];
1682 BOOLEAN bAllTid
; // If True, delete all TID for BA sessions with this MACaddr.
1683 } OID_ADD_BA_ENTRY
, *POID_ADD_BA_ENTRY
;
1686 // Multiple SSID structure
1688 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1689 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1691 /* clear bcmc TIM bit */
1692 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1693 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1695 /* set bcmc TIM bit */
1696 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1697 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1699 /* clear a station PS TIM bit */
1700 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1701 { UCHAR tim_offset = wcid >> 3; \
1702 UCHAR bit_offset = wcid & 0x7; \
1703 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1705 /* set a station PS TIM bit */
1706 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1707 { UCHAR tim_offset = wcid >> 3; \
1708 UCHAR bit_offset = wcid & 0x7; \
1709 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1712 typedef struct _MULTISSID_STRUCT
{
1713 UCHAR Bssid
[MAC_ADDR_LEN
];
1715 CHAR Ssid
[MAX_LEN_OF_SSID
];
1716 USHORT CapabilityInfo
;
1720 NDIS_802_11_AUTHENTICATION_MODE AuthMode
;
1721 NDIS_802_11_WEP_STATUS WepStatus
;
1722 NDIS_802_11_WEP_STATUS GroupKeyWepStatus
;
1723 WPA_MIX_PAIR_CIPHER WpaMixPairCipher
;
1727 ULONG ReceivedByteCount
;
1728 ULONG TransmittedByteCount
;
1732 HTTRANSMIT_SETTING HTPhyMode
, MaxHTPhyMode
, MinHTPhyMode
;// For transmit phy setting in TXWI.
1733 RT_HT_PHY_INFO DesiredHtPhyInfo
;
1734 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting
; // Desired transmit setting. this is for reading registry setting only. not useful.
1735 BOOLEAN bAutoTxRateSwitch
;
1739 UCHAR TxRate
; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1740 UCHAR DesiredRates
[MAX_LEN_OF_SUPPORTED_RATES
];// OID_802_11_DESIRED_RATES
1741 UCHAR DesiredRatesIndex
;
1742 UCHAR MaxTxRate
; // RATE_1, RATE_2, RATE_5_5, RATE_11
1744 UCHAR TimBitmaps
[WLAN_MAX_NUM_OF_TIM
];
1754 NDIS_802_11_PRIVACY_FILTER PrivacyFilter
;
1755 UCHAR BANClass3Data
;
1756 ULONG IsolateInterStaTraffic
;
1759 UCHAR RSN_IE
[2][MAX_LEN_OF_RSNIE
];
1762 UCHAR TimIELocationInBeacon
;
1763 UCHAR CapabilityInfoLocationInBeacon
;
1764 // outgoing BEACON frame buffer and corresponding TXWI
1765 // PTXWI_STRUC BeaconTxWI; //
1766 CHAR BeaconBuf
[MAX_BEACON_SIZE
]; // NOTE: BeaconBuf should be 4-byte aligned
1769 UINT16 StationKeepAliveTime
; // unit: second
1772 USHORT VLAN_Priority
;
1774 RT_802_11_ACL AccessControlList
;
1777 BOOLEAN bWmmCapable
; // 0:disable WMM, 1:enable WMM
1778 BOOLEAN bDLSCapable
; // 0:disable DLS, 1:enable DLS
1780 UCHAR DlsPTK
[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1782 // For 802.1x daemon setting per BSS
1783 UCHAR radius_srv_num
;
1784 RADIUS_SRV_INFO radius_srv_info
[MAX_RADIUS_SRV_NUM
];
1787 unsigned int mylinkid
;
1791 UINT32 RcvdConflictSsidCount
;
1792 UINT32 RcvdSpoofedAssocRespCount
;
1793 UINT32 RcvdSpoofedReassocRespCount
;
1794 UINT32 RcvdSpoofedProbeRespCount
;
1795 UINT32 RcvdSpoofedBeaconCount
;
1796 UINT32 RcvdSpoofedDisassocCount
;
1797 UINT32 RcvdSpoofedAuthCount
;
1798 UINT32 RcvdSpoofedDeauthCount
;
1799 UINT32 RcvdSpoofedUnknownMgmtCount
;
1800 UINT32 RcvdReplayAttackCount
;
1802 CHAR RssiOfRcvdConflictSsid
;
1803 CHAR RssiOfRcvdSpoofedAssocResp
;
1804 CHAR RssiOfRcvdSpoofedReassocResp
;
1805 CHAR RssiOfRcvdSpoofedProbeResp
;
1806 CHAR RssiOfRcvdSpoofedBeacon
;
1807 CHAR RssiOfRcvdSpoofedDisassoc
;
1808 CHAR RssiOfRcvdSpoofedAuth
;
1809 CHAR RssiOfRcvdSpoofedDeauth
;
1810 CHAR RssiOfRcvdSpoofedUnknownMgmt
;
1811 CHAR RssiOfRcvdReplayAttack
;
1815 } MULTISSID_STRUCT
, *PMULTISSID_STRUCT
;
1819 #ifdef DOT11N_DRAFT3
1820 typedef enum _BSS2040COEXIST_FLAG
{
1821 BSS_2040_COEXIST_DISABLE
= 0,
1822 BSS_2040_COEXIST_TIMER_FIRED
= 1,
1823 BSS_2040_COEXIST_INFO_SYNC
= 2,
1824 BSS_2040_COEXIST_INFO_NOTIFY
= 4,
1825 }BSS2040COEXIST_FLAG
;
1826 #endif // DOT11N_DRAFT3 //
1828 // configuration common to OPMODE_AP as well as OPMODE_STA
1829 typedef struct _COMMON_CONFIG
{
1831 BOOLEAN bCountryFlag
;
1832 UCHAR CountryCode
[3];
1834 UCHAR CountryRegion
; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1835 UCHAR CountryRegionForABand
; // Enum of country region for A band
1836 UCHAR PhyMode
; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1837 USHORT Dsifs
; // in units of usec
1838 ULONG PacketFilter
; // Packet filter for receiving
1840 CHAR Ssid
[MAX_LEN_OF_SSID
]; // NOT NULL-terminated
1841 UCHAR SsidLen
; // the actual ssid length in used
1842 UCHAR LastSsidLen
; // the actual ssid length in used
1843 CHAR LastSsid
[MAX_LEN_OF_SSID
]; // NOT NULL-terminated
1844 UCHAR LastBssid
[MAC_ADDR_LEN
];
1846 UCHAR Bssid
[MAC_ADDR_LEN
];
1847 USHORT BeaconPeriod
;
1849 UCHAR CentralChannel
; // Central Channel when using 40MHz is indicating. not real channel.
1851 UCHAR SupRate
[MAX_LEN_OF_SUPPORTED_RATES
];
1853 UCHAR ExtRate
[MAX_LEN_OF_SUPPORTED_RATES
];
1855 UCHAR DesireRate
[MAX_LEN_OF_SUPPORTED_RATES
]; // OID_802_11_DESIRED_RATES
1856 UCHAR MaxDesiredRate
;
1857 UCHAR ExpectedACKRate
[MAX_LEN_OF_SUPPORTED_RATES
];
1859 ULONG BasicRateBitmap
; // backup basic ratebitmap
1861 BOOLEAN bAPSDCapable
;
1862 BOOLEAN bInServicePeriod
;
1867 BOOLEAN bNeedSendTriggerFrame
;
1868 BOOLEAN bAPSDForcePowerSave
; // Force power save mode, should only use in APSD-STAUT
1869 ULONG TriggerTimerCount
;
1871 UCHAR BBPCurrentBW
; // BW_10, BW_20, BW_40
1872 REG_TRANSMIT_SETTING RegTransmitSetting
; //registry transmit setting. this is for reading registry setting only. not useful.
1873 UCHAR TxRate
; // Same value to fill in TXD. TxRate is 6-bit
1874 UCHAR MaxTxRate
; // RATE_1, RATE_2, RATE_5_5, RATE_11
1875 UCHAR TxRateIndex
; // Tx rate index in RateSwitchTable
1876 UCHAR TxRateTableSize
; // Valid Tx rate table size in RateSwitchTable
1877 UCHAR MinTxRate
; // RATE_1, RATE_2, RATE_5_5, RATE_11
1878 UCHAR RtsRate
; // RATE_xxx
1879 HTTRANSMIT_SETTING MlmeTransmit
; // MGMT frame PHY rate setting when operatin at Ht rate.
1880 UCHAR MlmeRate
; // RATE_xxx, used to send MLME frames
1881 UCHAR BasicMlmeRate
; // Default Rate for sending MLME frames
1883 USHORT RtsThreshold
; // in unit of BYTE
1884 USHORT FragmentThreshold
; // in unit of BYTE
1886 UCHAR TxPower
; // in unit of mW
1887 ULONG TxPowerPercentage
; // 0~100 %
1888 ULONG TxPowerDefault
; // keep for TxPowerPercentage
1890 #ifdef DOT11_N_SUPPORT
1891 BACAP_STRUC BACapability
; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1892 BACAP_STRUC REGBACapability
; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1893 #endif // DOT11_N_SUPPORT //
1894 IOT_STRUC IOTestParm
; // 802.11n InterOpbility Test Parameter;
1895 ULONG TxPreamble
; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1896 BOOLEAN bUseZeroToDisableFragment
; // Microsoft use 0 as disable
1897 ULONG UseBGProtection
; // 0: auto, 1: always use, 2: always not use
1898 BOOLEAN bUseShortSlotTime
; // 0: disable, 1 - use short slot (9us)
1899 BOOLEAN bEnableTxBurst
; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1900 BOOLEAN bAggregationCapable
; // 1: enable TX aggregation when the peer supports it
1901 BOOLEAN bPiggyBackCapable
; // 1: enable TX piggy-back according MAC's version
1902 BOOLEAN bIEEE80211H
; // 1: enable IEEE802.11h spec.
1903 ULONG DisableOLBCDetect
; // 0: enable OLBC detect; 1 disable OLBC detect
1905 #ifdef DOT11_N_SUPPORT
1907 #endif // DOT11_N_SUPPORT //
1908 BOOLEAN bWmmCapable
; // 0:disable WMM, 1:enable WMM
1909 QOS_CAPABILITY_PARM APQosCapability
; // QOS capability of the current associated AP
1910 EDCA_PARM APEdcaParm
; // EDCA parameters of the current associated AP
1911 QBSS_LOAD_PARM APQbssLoad
; // QBSS load of the current associated AP
1912 UCHAR AckPolicy
[4]; // ACK policy of the specified AC. see ACK_xxx
1913 #ifdef CONFIG_STA_SUPPORT
1914 BOOLEAN bDLSCapable
; // 0:disable DLS, 1:enable DLS
1915 #endif // CONFIG_STA_SUPPORT //
1916 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1917 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1918 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1919 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1920 ULONG OpStatusFlags
;
1922 BOOLEAN NdisRadioStateOff
; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1923 ABGBAND_STATE BandState
; // For setting BBP used on B/G or A mode.
1925 // IEEE802.11H--DFS.
1926 RADAR_DETECT_STRUCT RadarDetect
;
1928 #ifdef CARRIER_DETECTION_SUPPORT
1929 CARRIER_DETECTION CarrierDetect
;
1930 #endif // CARRIER_DETECTION_SUPPORT //
1932 #ifdef DOT11_N_SUPPORT
1934 UCHAR BASize
; // USer desired BAWindowSize. Should not exceed our max capability
1935 //RT_HT_CAPABILITY SupportedHtPhy;
1936 RT_HT_CAPABILITY DesiredHtPhy
;
1937 HT_CAPABILITY_IE HtCapability
;
1938 ADD_HT_INFO_IE AddHTInfo
; // Useful as AP.
1939 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1940 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1941 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
1943 #ifdef DOT11N_DRAFT3
1944 UCHAR Bss2040CoexistFlag
; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1945 RALINK_TIMER_STRUCT Bss2040CoexistTimer
;
1947 //This IE is used for 20/40 BSS Coexistence.
1948 BSS_2040_COEXIST_IE BSS2040CoexistInfo
;
1949 // ====== 11n D3.0 =======================>
1950 USHORT Dot11OBssScanPassiveDwell
; // Unit : TU. 5~1000
1951 USHORT Dot11OBssScanActiveDwell
; // Unit : TU. 10~1000
1952 USHORT Dot11BssWidthTriggerScanInt
; // Unit : Second
1953 USHORT Dot11OBssScanPassiveTotalPerChannel
; // Unit : TU. 200~10000
1954 USHORT Dot11OBssScanActiveTotalPerChannel
; // Unit : TU. 20~10000
1955 USHORT Dot11BssWidthChanTranDelayFactor
;
1956 USHORT Dot11OBssScanActivityThre
; // Unit : percentage
1958 ULONG Dot11BssWidthChanTranDelay
; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1959 ULONG CountDownCtr
; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1961 NDIS_SPIN_LOCK TriggerEventTabLock
;
1962 BSS_2040_COEXIST_IE LastBSSCoexist2040
;
1963 BSS_2040_COEXIST_IE BSSCoexist2040
;
1964 TRIGGER_EVENT_TAB TriggerEventTab
;
1965 UCHAR ChannelListIdx
;
1966 // <====== 11n D3.0 =======================
1967 BOOLEAN bOverlapScanning
;
1968 #endif // DOT11N_DRAFT3 //
1971 BOOLEAN bMIMOPSEnable
;
1973 BOOLEAN bDisableReordering
;
1974 BOOLEAN bForty_Mhz_Intolerant
;
1975 BOOLEAN bExtChannelSwitchAnnouncement
;
1976 BOOLEAN bRcvBSSWidthTriggerEvents
;
1977 ULONG LastRcvBSSWidthTriggerEventsTime
;
1980 #endif // DOT11_N_SUPPORT //
1982 // Enable wireless event
1983 BOOLEAN bWirelessEvent
;
1984 BOOLEAN bWiFiTest
; // Enable this parameter for WiFi test
1986 // Tx & Rx Stream number selection
1990 // transmit phy mode, trasmit rate for Multicast.
1991 #ifdef MCAST_RATE_SPECIFIC
1992 UCHAR McastTransmitMcs
;
1993 UCHAR McastTransmitPhyMode
;
1994 #endif // MCAST_RATE_SPECIFIC //
1996 BOOLEAN bHardwareRadio
; // Hardware controlled Radio enabled
2000 NDIS_SPIN_LOCK MeasureReqTabLock
;
2001 PMEASURE_REQ_TAB pMeasureReqTab
;
2003 NDIS_SPIN_LOCK TpcReqTabLock
;
2004 PTPC_REQ_TAB pTpcReqTab
;
2006 // transmit phy mode, trasmit rate for Multicast.
2007 #ifdef MCAST_RATE_SPECIFIC
2008 HTTRANSMIT_SETTING MCastPhyMode
;
2009 #endif // MCAST_RATE_SPECIFIC //
2012 UINT16 DefineMaxTxPwr
;
2013 #endif // SINGLE_SKU //
2016 } COMMON_CONFIG
, *PCOMMON_CONFIG
;
2019 #ifdef CONFIG_STA_SUPPORT
2020 /* Modified by Wu Xi-Kun 4/21/2006 */
2021 // STA configuration and status
2022 typedef struct _STA_ADMIN_CONFIG
{
2024 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2025 // the user intended configuration, but not necessary fully equal to the final
2026 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2027 // AP or IBSS holder).
2028 // Once initialized, user configuration can only be changed via OID_xxx
2029 UCHAR BssType
; // BSS_INFRA or BSS_ADHOC
2030 USHORT AtimWin
; // used when starting a new IBSS
2033 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2034 // the user intended configuration, and should be always applied to the final
2035 // settings in ACTIVE BSS without compromising with the BSS holder.
2036 // Once initialized, user configuration can only be changed via OID_xxx
2038 UCHAR RssiTriggerMode
; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2039 USHORT DefaultListenCount
; // default listen count;
2040 ULONG WindowsPowerMode
; // Power mode for AC power
2041 ULONG WindowsBatteryPowerMode
; // Power mode for battery if exists
2042 BOOLEAN bWindowsACCAMEnable
; // Enable CAM power mode when AC on
2043 BOOLEAN bAutoReconnect
; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2044 ULONG WindowsPowerProfile
; // Windows power profile, for NDIS5.1 PnP
2046 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2047 USHORT Psm
; // power management mode (PWR_ACTIVE|PWR_SAVE)
2048 USHORT DisassocReason
;
2049 UCHAR DisassocSta
[MAC_ADDR_LEN
];
2050 USHORT DeauthReason
;
2051 UCHAR DeauthSta
[MAC_ADDR_LEN
];
2052 USHORT AuthFailReason
;
2053 UCHAR AuthFailSta
[MAC_ADDR_LEN
];
2055 NDIS_802_11_PRIVACY_FILTER PrivacyFilter
; // PrivacyFilter enum for 802.1X
2056 NDIS_802_11_AUTHENTICATION_MODE AuthMode
; // This should match to whatever microsoft defined
2057 NDIS_802_11_WEP_STATUS WepStatus
;
2058 NDIS_802_11_WEP_STATUS OrigWepStatus
; // Original wep status set from OID
2060 // Add to support different cipher suite for WPA2/WPA mode
2061 NDIS_802_11_ENCRYPTION_STATUS GroupCipher
; // Multicast cipher suite
2062 NDIS_802_11_ENCRYPTION_STATUS PairCipher
; // Unicast cipher suite
2063 BOOLEAN bMixCipher
; // Indicate current Pair & Group use different cipher suites
2064 USHORT RsnCapability
;
2066 NDIS_802_11_WEP_STATUS GroupKeyWepStatus
;
2068 UCHAR PMK
[32]; // WPA PSK mode PMK
2069 UCHAR PTK
[64]; // WPA PSK mode PTK
2070 UCHAR GTK
[32]; // GTK from authenticator
2071 BSSID_INFO SavedPMK
[PMKID_NO
];
2072 UINT SavedPMKNum
; // Saved PMKID number
2077 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2080 // For WPA countermeasures
2081 ULONG LastMicErrorTime
; // record last MIC error time
2082 ULONG MicErrCnt
; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2083 BOOLEAN bBlockAssoc
; // Block associate attempt for 60 seconds after counter measure occurred.
2084 // For WPA-PSK supplicant state
2085 WPA_STATE WpaState
; // Default is SS_NOTUSE and handled by microsoft 802.1x
2086 UCHAR ReplayCounter
[8];
2087 UCHAR ANonce
[32]; // ANonce for WPA-PSK from aurhenticator
2088 UCHAR SNonce
[32]; // SNonce for WPA-PSK
2090 UCHAR LastSNR0
; // last received BEACON's SNR
2091 UCHAR LastSNR1
; // last received BEACON's SNR for 2nd antenna
2092 RSSI_SAMPLE RssiSample
;
2093 ULONG NumOfAvgRssiSample
;
2095 ULONG LastBeaconRxTime
; // OS's timestamp of the last BEACON RX time
2096 ULONG Last11bBeaconRxTime
; // OS's timestamp of the last 11B BEACON RX time
2097 ULONG Last11gBeaconRxTime
; // OS's timestamp of the last 11G BEACON RX time
2098 ULONG Last20NBeaconRxTime
; // OS's timestamp of the last 20MHz N BEACON RX time
2100 ULONG LastScanTime
; // Record last scan time for issue BSSID_SCAN_LIST
2101 ULONG ScanCnt
; // Scan counts since most recent SSID, BSSID, SCAN OID request
2102 BOOLEAN bSwRadio
; // Software controlled Radio On/Off, TRUE: On
2103 BOOLEAN bHwRadio
; // Hardware controlled Radio On/Off, TRUE: On
2104 BOOLEAN bRadio
; // Radio state, And of Sw & Hw radio state
2105 BOOLEAN bHardwareRadio
; // Hardware controlled Radio enabled
2106 BOOLEAN bShowHiddenSSID
; // Show all known SSID in SSID list get operation
2108 BOOLEAN AdhocBOnlyJoined
; // Indicate Adhoc B Join.
2109 BOOLEAN AdhocBGJoined
; // Indicate Adhoc B/G Join.
2110 BOOLEAN Adhoc20NJoined
; // Indicate Adhoc 20MHz N Join.
2112 // New for WPA, windows want us to to keep association information and
2113 // Fixed IEs from last association response
2114 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo
;
2115 USHORT ReqVarIELen
; // Length of next VIE include EID & Length
2116 UCHAR ReqVarIEs
[MAX_VIE_LEN
]; // The content saved here should be little-endian format.
2117 USHORT ResVarIELen
; // Length of next VIE include EID & Length
2118 UCHAR ResVarIEs
[MAX_VIE_LEN
];
2121 UCHAR RSN_IE
[MAX_LEN_OF_RSNIE
]; // The content saved here should be little-endian format.
2123 // New variables used for CCX 1.0
2125 BOOLEAN bCkipCmicOn
;
2127 UCHAR GIV
[3]; //for CCX iv
2132 LEAP_AUTH_INFO LeapAuthInfo
;
2134 UCHAR NetworkChallenge
[8];
2135 UCHAR NetworkChallengeResponse
[24];
2136 UCHAR PeerChallenge
[8];
2138 UCHAR PeerChallengeResponse
[24];
2139 UCHAR SessionKey
[16]; //Network session keys (NSK)
2140 RALINK_TIMER_STRUCT LeapAuthTimer
;
2141 ROGUEAP_TABLE RogueApTab
; //Cisco CCX1 Rogue AP Detection
2143 // New control flags for CCX
2144 CCX_CONTROL CCXControl
; // Master administration state
2145 BOOLEAN CCXEnable
; // Actual CCX state
2146 UCHAR CCXScanChannel
; // Selected channel for CCX beacon request
2147 USHORT CCXScanTime
; // Time out to wait for beacon and probe response
2148 UCHAR CCXReqType
; // Current processing CCX request type
2149 BSS_TABLE CCXBssTab
; // BSS Table
2150 UCHAR FrameReportBuf
[2048]; // Buffer for creating frame report
2151 USHORT FrameReportLen
; // Current Frame report length
2152 ULONG CLBusyBytes
; // Save the total bytes received durning channel load scan time
2153 USHORT RPIDensity
[8]; // Array for RPI density collection
2154 // Start address of each BSS table within FrameReportBuf
2155 // It's important to update the RxPower of the corresponding Bss
2156 USHORT BssReportOffset
[MAX_LEN_OF_BSS_TABLE
];
2157 USHORT BeaconToken
; // Token for beacon report
2158 ULONG LastBssIndex
; // Most current reported Bss index
2159 RM_REQUEST_ACTION MeasurementRequest
[16]; // Saved measurement request
2160 UCHAR RMReqCnt
; // Number of measurement request saved.
2161 UCHAR CurrentRMReqIdx
; // Number of measurement request saved.
2162 BOOLEAN ParallelReq
; // Parallel measurement, only one request performed,
2163 // It must be the same channel with maximum duration
2164 USHORT ParallelDuration
; // Maximum duration for parallel measurement
2165 UCHAR ParallelChannel
; // Only one channel with parallel measurement
2166 USHORT IAPPToken
; // IAPP dialog token
2167 UCHAR CCXQosECWMin
; // Cisco QOS ECWMin for AC 0
2168 UCHAR CCXQosECWMax
; // Cisco QOS ECWMax for AC 0
2169 // Hack for channel load and noise histogram parameters
2170 UCHAR NHFactor
; // Parameter for Noise histogram
2171 UCHAR CLFactor
; // Parameter for channel load
2173 UCHAR KRK
[16]; //Key Refresh Key.
2174 UCHAR BTK
[32]; //Base Transient Key
2175 BOOLEAN CCKMLinkUpFlag
;
2176 ULONG CCKMRN
; //(Re)Association request number.
2177 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp
; //TSF timer for Re-assocaite to the new AP
2178 UCHAR AironetCellPowerLimit
; //in dBm
2179 UCHAR AironetIPAddress
[4]; //eg. 192.168.1.1
2180 BOOLEAN CCXAdjacentAPReportFlag
; //flag for determining report Assoc Lost time
2181 CHAR CCXAdjacentAPSsid
[MAX_LEN_OF_SSID
]; //Adjacent AP's SSID report
2182 UCHAR CCXAdjacentAPSsidLen
; // the actual ssid length in used
2183 UCHAR CCXAdjacentAPBssid
[MAC_ADDR_LEN
]; //Adjacent AP's BSSID report
2184 USHORT CCXAdjacentAPChannel
;
2185 ULONG CCXAdjacentAPLinkDownTime
; //for Spec S32.
2187 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer
;
2188 BOOLEAN StaQuickResponeForRateUpTimerRunning
;
2190 UCHAR DtimCount
; // 0.. DtimPeriod-1
2191 UCHAR DtimPeriod
; // default = 3
2193 #ifdef QOS_DLS_SUPPORT
2194 RT_802_11_DLS DLSEntry
[MAX_NUM_OF_DLS_ENTRY
];
2195 UCHAR DlsReplayCounter
[8];
2196 #endif // QOS_DLS_SUPPORT //
2197 ////////////////////////////////////////////////////////////////////////////////////////
2198 // This is only for WHQL test.
2200 ////////////////////////////////////////////////////////////////////////////////////////
2202 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer
;
2204 BOOLEAN bFastRoaming
; // 0:disable fast roaming, 1:enable fast roaming
2205 CHAR dBmToRoam
; // the condition to roam when receiving Rssi less than this value. It's negative value.
2207 #ifdef WPA_SUPPLICANT_SUPPORT
2209 BOOLEAN IEEE8021x_required_keys
;
2210 CIPHER_KEY DesireSharedKey
[4]; // Record user desired WEP keys
2211 UCHAR DesireSharedKeyId
;
2213 // 0: driver ignores wpa_supplicant
2214 // 1: wpa_supplicant initiates scanning and AP selection
2215 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2216 UCHAR WpaSupplicantUP
;
2217 UCHAR WpaSupplicantScanCount
;
2218 #endif // WPA_SUPPLICANT_SUPPORT //
2223 BOOLEAN bTGnWifiTest
;
2224 BOOLEAN bScanReqIsFromWebUI
;
2226 HTTRANSMIT_SETTING HTPhyMode
, MaxHTPhyMode
, MinHTPhyMode
;// For transmit phy setting in TXWI.
2227 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting
;
2228 RT_HT_PHY_INFO DesiredHtPhyInfo
;
2229 BOOLEAN bAutoTxRateSwitch
;
2235 #ifdef EXT_BUILD_CHANNEL_LIST
2236 UCHAR IEEE80211dClientMode
;
2237 UCHAR StaOriCountryCode
[3];
2238 UCHAR StaOriGeography
;
2239 #endif // EXT_BUILD_CHANNEL_LIST //
2240 } STA_ADMIN_CONFIG
, *PSTA_ADMIN_CONFIG
;
2242 // This data structure keep the current active BSS/IBSS's configuration that this STA
2243 // had agreed upon joining the network. Which means these parameters are usually decided
2244 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2245 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2246 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2247 // the current active settings.
2248 typedef struct _STA_ACTIVE_CONFIG
{
2250 USHORT AtimWin
; // in kusec; IBSS parameter set element
2251 USHORT CapabilityInfo
;
2252 USHORT CfpMaxDuration
;
2255 // Copy supported rate from desired AP's beacon. We are trying to match
2256 // AP's supported and extended rate settings.
2257 UCHAR SupRate
[MAX_LEN_OF_SUPPORTED_RATES
];
2258 UCHAR ExtRate
[MAX_LEN_OF_SUPPORTED_RATES
];
2261 // Copy supported ht from desired AP's beacon. We are trying to match
2262 RT_HT_PHY_INFO SupportedPhyInfo
;
2263 RT_HT_CAPABILITY SupportedHtPhy
;
2264 } STA_ACTIVE_CONFIG
, *PSTA_ACTIVE_CONFIG
;
2265 #endif // CONFIG_STA_SUPPORT //
2267 // ----------- start of AP --------------------------
2268 // AUTH-RSP State Machine Aux data structure
2269 typedef struct _AP_MLME_AUX
{
2270 UCHAR Addr
[MAC_ADDR_LEN
];
2272 CHAR Challenge
[CIPHER_TEXT_LEN
];
2273 } AP_MLME_AUX
, *PAP_MLME_AUX
;
2275 // structure to define WPA Group Key Rekey Interval
2276 typedef struct PACKED _RT_802_11_WPA_REKEY
{
2277 ULONG ReKeyMethod
; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2278 ULONG ReKeyInterval
; // time-based: seconds, packet-based: kilo-packets
2279 } RT_WPA_REKEY
,*PRT_WPA_REKEY
, RT_802_11_WPA_REKEY
, *PRT_802_11_WPA_REKEY
;
2281 typedef struct _MAC_TABLE_ENTRY
{
2282 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2283 BOOLEAN ValidAsCLI
; // Sta mode, set this TRUE after Linkup,too.
2284 BOOLEAN ValidAsWDS
; // This is WDS Entry. only for AP mode.
2285 BOOLEAN ValidAsApCli
; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2286 BOOLEAN ValidAsMesh
;
2287 BOOLEAN ValidAsDls
; // This is DLS Entry. only for STA mode.
2289 BOOLEAN bIAmBadAtheros
; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2291 UCHAR EnqueueEapolStartTimerRunning
; // Enqueue EAPoL-Start for triggering EAP SM
2293 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2294 UCHAR CMTimerRunning
;
2295 UCHAR apidx
; // MBSS number
2297 UCHAR RSN_IE
[MAX_LEN_OF_RSNIE
];
2298 UCHAR ANonce
[LEN_KEY_DESC_NONCE
];
2299 UCHAR R_Counter
[LEN_KEY_DESC_REPLAY
];
2302 RALINK_TIMER_STRUCT RetryTimer
;
2303 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer
; // A timer which enqueue EAPoL-Start for triggering PSK SM
2304 NDIS_802_11_AUTHENTICATION_MODE AuthMode
; // This should match to whatever microsoft defined
2305 NDIS_802_11_WEP_STATUS WepStatus
;
2306 AP_WPA_STATE WpaState
;
2309 NDIS_802_11_PRIVACY_FILTER PrivacyFilter
; // PrivacyFilter enum for 802.1X
2310 CIPHER_KEY PairwiseKey
;
2313 UCHAR PMKID
[LEN_PMKID
];
2316 UCHAR Addr
[MAC_ADDR_LEN
];
2319 AUTH_STATE AuthState
; // for SHARED KEY authentication state machine used only
2320 BOOLEAN IsReassocSta
; // Indicate whether this is a reassociation procedure
2322 USHORT CapabilityInfo
;
2324 ULONG NoDataIdleCount
;
2325 UINT16 StationKeepAliveCount
; // unit: second
2327 QUEUE_HEADER PsQueue
;
2329 UINT32 StaConnectTime
; // the live time of this station since associated with AP
2332 #ifdef DOT11_N_SUPPORT
2334 USHORT NoBADataCountDown
;
2336 UINT32 CachedBuf
[16]; // UINT (4 bytes) for alignment
2337 UINT TxBFCount
; // 3*3
2338 #endif // DOT11_N_SUPPORT //
2340 UINT DebugFIFOCount
;
2345 //====================================================
2346 //WDS entry needs these
2347 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2348 UINT MatchWDSTabIdx
;
2349 UCHAR MaxSupportedRate
;
2351 UCHAR CurrTxRateIndex
;
2352 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2353 USHORT TxQuality
[MAX_STEP_OF_TX_RATE_SWITCH
];
2354 UINT32 OneSecTxNoRetryOkCount
;
2355 UINT32 OneSecTxRetryOkCount
;
2356 UINT32 OneSecTxFailCount
;
2357 UINT32 ContinueTxFailCnt
;
2358 UINT32 CurrTxRateStableTime
; // # of second in current TX rate
2359 UCHAR TxRateUpPenalty
; // extra # of second penalty due to last unstable condition
2360 //====================================================
2364 #ifdef CONFIG_STA_SUPPORT
2365 #ifdef QOS_DLS_SUPPORT
2366 UINT MatchDlsEntryIdx
; // indicate the index in pAd->StaCfg.DLSEntry
2367 #endif // QOS_DLS_SUPPORT //
2368 #endif // CONFIG_STA_SUPPORT //
2370 BOOLEAN fNoisyEnvironment
;
2371 BOOLEAN fLastSecAccordingRSSI
;
2372 UCHAR LastSecTxRateChangeAction
; // 0: no change, 1:rate UP, 2:rate down
2373 CHAR LastTimeTxRateChangeAction
; //Keep last time value of LastSecTxRateChangeAction
2374 ULONG LastTxOkCount
;
2375 UCHAR PER
[MAX_STEP_OF_TX_RATE_SWITCH
];
2377 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2378 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2379 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2380 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2381 ULONG ClientStatusFlags
;
2383 // TODO: Shall we move that to DOT11_N_SUPPORT???
2384 HTTRANSMIT_SETTING HTPhyMode
, MaxHTPhyMode
, MinHTPhyMode
;// For transmit phy setting in TXWI.
2386 #ifdef DOT11_N_SUPPORT
2387 // HT EWC MIMO-N used parameters
2388 USHORT RXBAbitmap
; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2389 USHORT TXBAbitmap
; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2390 USHORT TXAutoBAbitmap
;
2391 USHORT BADeclineBitmap
;
2392 USHORT BARecWcidArray
[NUM_OF_TID
]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2393 USHORT BAOriWcidArray
[NUM_OF_TID
]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2394 USHORT BAOriSequence
[NUM_OF_TID
]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2396 // 802.11n features.
2398 UCHAR MaxRAmpduFactor
;
2400 UCHAR MmpsMode
; // MIMO power save more.
2402 HT_CAPABILITY_IE HTCapability
;
2404 #ifdef DOT11N_DRAFT3
2405 UCHAR BSS2040CoexistenceMgmtSupport
;
2406 #endif // DOT11N_DRAFT3 //
2407 #endif // DOT11_N_SUPPORT //
2409 BOOLEAN bAutoTxRateSwitch
;
2412 struct _MAC_TABLE_ENTRY
*pNext
;
2413 USHORT TxSeq
[NUM_OF_TID
];
2414 USHORT NonQosDataSeq
;
2416 RSSI_SAMPLE RssiSample
;
2418 UINT32 TXMCSExpected
[16];
2419 UINT32 TXMCSSuccessful
[16];
2420 UINT32 TXMCSFailed
[16];
2421 UINT32 TXMCSAutoFallBack
[16][16];
2422 } MAC_TABLE_ENTRY
, *PMAC_TABLE_ENTRY
;
2424 typedef struct _MAC_TABLE
{
2426 MAC_TABLE_ENTRY
*Hash
[HASH_TABLE_SIZE
];
2427 MAC_TABLE_ENTRY Content
[MAX_LEN_OF_MAC_TABLE
];
2428 QUEUE_HEADER McastPsQueue
;
2430 BOOLEAN fAnyStationInPsm
;
2431 BOOLEAN fAnyStationBadAtheros
; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2432 BOOLEAN fAnyTxOPForceDisable
; // Check if it is necessary to disable BE TxOP
2433 #ifdef DOT11_N_SUPPORT
2434 BOOLEAN fAnyStationIsLegacy
; // Check if I use legacy rate to transmit to my BSS Station/
2435 BOOLEAN fAnyStationNonGF
; // Check if any Station can't support GF.
2436 BOOLEAN fAnyStation20Only
; // Check if any Station can't support GF.
2437 BOOLEAN fAnyStationMIMOPSDynamic
; // Check if any Station is MIMO Dynamic
2438 BOOLEAN fAnyBASession
; // Check if there is BA session. Force turn on RTS/CTS
2439 #endif // DOT11_N_SUPPORT //
2440 } MAC_TABLE
, *PMAC_TABLE
;
2442 #ifdef DOT11_N_SUPPORT
2443 #define IS_HT_STA(_pMacEntry) \
2444 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2446 #define IS_HT_RATE(_pMacEntry) \
2447 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2449 #define PEER_IS_HT_RATE(_pMacEntry) \
2450 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2451 #endif // DOT11_N_SUPPORT //
2453 typedef struct _WDS_ENTRY
{
2455 UCHAR Addr
[MAC_ADDR_LEN
];
2456 ULONG NoDataIdleCount
;
2457 struct _WDS_ENTRY
*pNext
;
2458 } WDS_ENTRY
, *PWDS_ENTRY
;
2460 typedef struct _WDS_TABLE_ENTRY
{
2462 UCHAR WdsAddr
[MAC_ADDR_LEN
];
2463 WDS_ENTRY
*Hash
[HASH_TABLE_SIZE
];
2464 WDS_ENTRY Content
[MAX_LEN_OF_MAC_TABLE
];
2465 UCHAR MaxSupportedRate
;
2467 USHORT TxQuality
[MAX_LEN_OF_SUPPORTED_RATES
];
2468 USHORT OneSecTxOkCount
;
2469 USHORT OneSecTxRetryOkCount
;
2470 USHORT OneSecTxFailCount
;
2471 ULONG CurrTxRateStableTime
; // # of second in current TX rate
2472 UCHAR TxRateUpPenalty
; // extra # of second penalty due to last unstable condition
2473 } WDS_TABLE_ENTRY
, *PWDS_TABLE_ENTRY
;
2475 typedef struct _RT_802_11_WDS_ENTRY
{
2479 UCHAR PeerWdsAddr
[MAC_ADDR_LEN
];
2480 UCHAR MacTabMatchWCID
; // ASIC
2481 NDIS_802_11_WEP_STATUS WepStatus
;
2484 HTTRANSMIT_SETTING HTPhyMode
, MaxHTPhyMode
, MinHTPhyMode
;
2485 RT_HT_PHY_INFO DesiredHtPhyInfo
;
2486 BOOLEAN bAutoTxRateSwitch
;
2487 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting
; // Desired transmit setting.
2488 } RT_802_11_WDS_ENTRY
, *PRT_802_11_WDS_ENTRY
;
2490 typedef struct _WDS_TABLE
{
2493 RT_802_11_WDS_ENTRY WdsEntry
[MAX_WDS_ENTRY
];
2494 } WDS_TABLE
, *PWDS_TABLE
;
2496 typedef struct _APCLI_STRUCT
{
2499 unsigned int mylinkid
;
2501 BOOLEAN Enable
; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2502 BOOLEAN Valid
; // Set it as 1 if the apcli interface associated success to remote AP.
2503 UCHAR MacTabWCID
; //WCID value, which point to the entry of ASIC Mac table.
2505 CHAR Ssid
[MAX_LEN_OF_SSID
];
2508 CHAR CfgSsid
[MAX_LEN_OF_SSID
];
2509 UCHAR CfgApCliBssid
[ETH_LENGTH_OF_ADDRESS
];
2510 UCHAR CurrentAddress
[ETH_LENGTH_OF_ADDRESS
];
2512 ULONG ApCliRcvBeaconTime
;
2514 ULONG CtrlCurrState
;
2515 ULONG SyncCurrState
;
2516 ULONG AuthCurrState
;
2517 ULONG AssocCurrState
;
2518 ULONG WpaPskCurrState
;
2523 ULONG ClientStatusFlags
;
2526 NDIS_802_11_AUTHENTICATION_MODE AuthMode
; // This should match to whatever microsoft defined
2527 NDIS_802_11_WEP_STATUS WepStatus
;
2529 // Add to support different cipher suite for WPA2/WPA mode
2530 NDIS_802_11_ENCRYPTION_STATUS GroupCipher
; // Multicast cipher suite
2531 NDIS_802_11_ENCRYPTION_STATUS PairCipher
; // Unicast cipher suite
2532 BOOLEAN bMixCipher
; // Indicate current Pair & Group use different cipher suites
2533 USHORT RsnCapability
;
2535 UCHAR PSK
[100]; // reserve PSK key material
2537 UCHAR PMK
[32]; // WPA PSK mode PMK
2538 UCHAR GTK
[32]; // GTK from authenticator
2540 CIPHER_KEY SharedKey
[SHARE_KEY_NUM
];
2543 // store RSN_IE built by driver
2544 UCHAR RSN_IE
[MAX_LEN_OF_RSNIE
]; // The content saved here should be convert to little-endian format.
2547 // For WPA countermeasures
2548 ULONG LastMicErrorTime
; // record last MIC error time
2549 BOOLEAN bBlockAssoc
; // Block associate attempt for 60 seconds after counter measure occurred.
2551 // For WPA-PSK supplicant state
2552 UCHAR SNonce
[32]; // SNonce for WPA-PSK
2553 UCHAR GNonce
[32]; // GNonce for WPA-PSK from authenticator
2555 #ifdef WSC_AP_SUPPORT
2556 WSC_CTRL WscControl
;
2557 #endif // WSC_AP_SUPPORT //
2559 HTTRANSMIT_SETTING HTPhyMode
, MaxHTPhyMode
, MinHTPhyMode
;
2560 RT_HT_PHY_INFO DesiredHtPhyInfo
;
2561 BOOLEAN bAutoTxRateSwitch
;
2562 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting
; // Desired transmit setting.
2563 } APCLI_STRUCT
, *PAPCLI_STRUCT
;
2565 // ----------- end of AP ----------------------------
2568 typedef struct _BLOCK_QUEUE_ENTRY
2570 BOOLEAN SwTxQueueBlockFlag
;
2571 LIST_HEADER NetIfList
;
2572 } BLOCK_QUEUE_ENTRY
, *PBLOCK_QUEUE_ENTRY
;
2573 #endif // BLOCK_NET_IF //
2578 BOOLEAN bGreenField
;
2584 typedef struct _INF_PCI_CONFIG
2586 PUCHAR CSRBaseAddress
; // PCI MMIO Base Address, all access will use
2589 typedef struct _INF_USB_CONFIG
2591 UINT BulkInEpAddr
; // bulk-in endpoint address
2592 UINT BulkOutEpAddr
[6]; // bulk-out endpoint address
2596 #ifdef IKANOS_VX_1X0
2597 typedef void (*IkanosWlanTxCbFuncP
)(void *, void *);
2599 struct IKANOS_TX_INFO
2601 struct net_device
*netdev
;
2602 IkanosWlanTxCbFuncP
*fp
;
2604 #endif // IKANOS_VX_1X0 //
2607 typedef struct _NINDO_CTRL_BLOCK
{
2609 RT_NINTENDO_TABLE DS_TABLE
;
2612 spinlock_t NINTENDO_TABLE_Lock
;
2614 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock
;
2615 #endif // CHIP25XX //
2617 UCHAR NINTENDO_UP_BUFFER
[512];
2619 CIPHER_KEY Local_SharedKey
;
2620 UCHAR Local_bHideSsid
;
2621 UCHAR Local_AuthMode
;
2622 UCHAR Local_WepStatus
;
2623 USHORT Local_CapabilityInfo
;
2625 #endif // NINTENDO_AP //
2629 #define DIAGNOSE_TIME 10 // 10 sec
2630 typedef struct _RtmpDiagStrcut_
2631 { // Diagnosis Related element
2632 unsigned char inited
;
2634 unsigned char ArrayStartIdx
;
2635 unsigned char ArrayCurIdx
;
2637 USHORT TxDataCnt
[DIAGNOSE_TIME
];
2638 USHORT TxFailCnt
[DIAGNOSE_TIME
];
2639 USHORT TxDescCnt
[DIAGNOSE_TIME
][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2640 USHORT TxMcsCnt
[DIAGNOSE_TIME
][24]; // 3*3
2641 USHORT TxSWQueCnt
[DIAGNOSE_TIME
][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2643 USHORT TxAggCnt
[DIAGNOSE_TIME
];
2644 USHORT TxNonAggCnt
[DIAGNOSE_TIME
];
2645 USHORT TxAMPDUCnt
[DIAGNOSE_TIME
][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2646 USHORT TxRalinkCnt
[DIAGNOSE_TIME
]; // TxRalink Aggregation Count in 1 sec scale.
2647 USHORT TxAMSDUCnt
[DIAGNOSE_TIME
]; // TxAMSUD Aggregation Count in 1 sec scale.
2650 USHORT RxDataCnt
[DIAGNOSE_TIME
]; // Rx Total Data count.
2651 USHORT RxCrcErrCnt
[DIAGNOSE_TIME
];
2652 USHORT RxMcsCnt
[DIAGNOSE_TIME
][24]; // 3*3
2654 #endif // DBG_DIAGNOSE //
2658 // The miniport adapter structure
2660 typedef struct _RTMP_ADAPTER
2662 PVOID OS_Cookie
; // save specific structure relative to OS
2667 USHORT LnkCtrlBitMask
;
2668 USHORT RLnkCtrlConfiguration
;
2669 USHORT RLnkCtrlOffset
;
2670 USHORT HostLnkCtrlConfiguration
;
2671 USHORT HostLnkCtrlOffset
;
2672 USHORT PCIePowerSaveLevel
;
2673 BOOLEAN bPCIclkOff
; // flag that indicate if the PICE power status in Configuration SPace..
2674 BOOLEAN bPCIclkOffDisableTx
; //
2677 /*****************************************************************************************/
2678 /* PCI related parameters */
2679 /*****************************************************************************************/
2680 PUCHAR CSRBaseAddress
; // PCI MMIO Base Address, all access will use
2682 UINT int_enable_reg
;
2683 UINT int_disable_mask
;
2687 RTMP_DMABUF TxBufSpace
[NUM_OF_TX_RING
]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2688 RTMP_DMABUF RxDescRing
; // Shared memory for RX descriptors
2689 RTMP_DMABUF TxDescRing
[NUM_OF_TX_RING
]; // Shared memory for Tx descriptors
2690 RTMP_TX_RING TxRing
[NUM_OF_TX_RING
]; // AC0~4 + HCCA
2694 NDIS_SPIN_LOCK irq_lock
;
2699 /*****************************************************************************************/
2700 /* Both PCI/USB related parameters */
2701 /*****************************************************************************************/
2704 /*****************************************************************************************/
2705 /* Tx related parameters */
2706 /*****************************************************************************************/
2707 BOOLEAN DeQueueRunning
[NUM_OF_TX_RING
]; // for ensuring RTUSBDeQueuePacket get call once
2708 NDIS_SPIN_LOCK DeQueueLock
[NUM_OF_TX_RING
];
2711 // resource for software backlog queues
2712 QUEUE_HEADER TxSwQueue
[NUM_OF_TX_RING
]; // 4 AC + 1 HCCA
2713 NDIS_SPIN_LOCK TxSwQueueLock
[NUM_OF_TX_RING
]; // TxSwQueue spinlock
2715 RTMP_DMABUF MgmtDescRing
; // Shared memory for MGMT descriptors
2716 RTMP_MGMT_RING MgmtRing
;
2717 NDIS_SPIN_LOCK MgmtRingLock
; // Prio Ring spinlock
2720 /*****************************************************************************************/
2721 /* Rx related parameters */
2722 /*****************************************************************************************/
2725 RTMP_RX_RING RxRing
;
2726 NDIS_SPIN_LOCK RxRingLock
; // Rx Ring spinlock
2731 /*****************************************************************************************/
2732 /* ASIC related parameters */
2733 /*****************************************************************************************/
2734 UINT32 MACVersion
; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2736 // ---------------------------
2738 // ---------------------------
2739 ULONG EepromVersion
; // byte 0: version, byte 1: revision, byte 2~3: unused
2740 UCHAR EEPROMAddressNum
; // 93c46=6 93c66=8
2741 USHORT EEPROMDefaultValue
[NUM_EEPROM_BBP_PARMS
];
2742 ULONG FirmwareVersion
; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2744 // ---------------------------
2746 // ---------------------------
2747 UCHAR BbpWriteLatch
[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2748 UCHAR BbpRssiToDbmDelta
;
2749 BBP_R66_TUNING BbpTuning
;
2751 // ----------------------------
2753 // ----------------------------
2754 UCHAR RfIcType
; // RFIC_xxx
2755 ULONG RfFreqOffset
; // Frequency offset for channel switching
2756 RTMP_RF_REGS LatchRfRegs
; // latch th latest RF programming value since RF IC doesn't support READ
2758 EEPROM_ANTENNA_STRUC Antenna
; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2759 EEPROM_NIC_CONFIG2_STRUC NicConfig2
;
2761 // This soft Rx Antenna Diversity mechanism is used only when user set
2762 // RX Antenna = DIVERSITY ON
2763 SOFT_RX_ANT_DIVERSITY RxAnt
;
2766 CHANNEL_TX_POWER TxPower
[MAX_NUM_OF_CHANNELS
]; // Store Tx power value for all channels.
2767 CHANNEL_TX_POWER ChannelList
[MAX_NUM_OF_CHANNELS
]; // list all supported channels for site survey
2768 CHANNEL_11J_TX_POWER TxPower11J
[MAX_NUM_OF_11JCHANNELS
]; // 802.11j channel and bw
2769 CHANNEL_11J_TX_POWER ChannelList11J
[MAX_NUM_OF_11JCHANNELS
]; // list all supported channels for site survey
2771 UCHAR ChannelListNum
; // number of channel in ChannelList[]
2774 ULONG Tx20MPwrCfgABand
[5];
2775 ULONG Tx20MPwrCfgGBand
[5];
2776 ULONG Tx40MPwrCfgABand
[5];
2777 ULONG Tx40MPwrCfgGBand
[5];
2779 BOOLEAN bAutoTxAgcA
; // Enable driver auto Tx Agc control
2780 UCHAR TssiRefA
; // Store Tssi reference value as 25 temperature.
2781 UCHAR TssiPlusBoundaryA
[5]; // Tssi boundary for increase Tx power to compensate.
2782 UCHAR TssiMinusBoundaryA
[5]; // Tssi boundary for decrease Tx power to compensate.
2783 UCHAR TxAgcStepA
; // Store Tx TSSI delta increment / decrement value
2784 CHAR TxAgcCompensateA
; // Store the compensation (TxAgcStep * (idx-1))
2786 BOOLEAN bAutoTxAgcG
; // Enable driver auto Tx Agc control
2787 UCHAR TssiRefG
; // Store Tssi reference value as 25 temperature.
2788 UCHAR TssiPlusBoundaryG
[5]; // Tssi boundary for increase Tx power to compensate.
2789 UCHAR TssiMinusBoundaryG
[5]; // Tssi boundary for decrease Tx power to compensate.
2790 UCHAR TxAgcStepG
; // Store Tx TSSI delta increment / decrement value
2791 CHAR TxAgcCompensateG
; // Store the compensation (TxAgcStep * (idx-1))
2793 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2794 CHAR BGRssiOffset0
; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2795 CHAR BGRssiOffset1
; // Store B/G RSSI#1 Offset value
2796 CHAR BGRssiOffset2
; // Store B/G RSSI#2 Offset value
2799 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2800 CHAR ARssiOffset0
; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2801 CHAR ARssiOffset1
; // Store A RSSI#1 Offset value
2802 CHAR ARssiOffset2
; // Store A RSSI#2 Offset value
2805 CHAR BLNAGain
; // Store B/G external LNA#0 value on EEPROM 0x44h
2806 CHAR ALNAGain0
; // Store A external LNA#0 value for ch36~64
2807 CHAR ALNAGain1
; // Store A external LNA#1 value for ch100~128
2808 CHAR ALNAGain2
; // Store A external LNA#2 value for ch132~165
2810 // ----------------------------
2812 // ----------------------------
2813 MCU_LEDCS_STRUC LedCntl
;
2814 USHORT Led1
; // read from EEPROM 0x3c
2815 USHORT Led2
; // EEPROM 0x3e
2816 USHORT Led3
; // EEPROM 0x40
2817 UCHAR LedIndicatorStregth
;
2818 UCHAR RssiSingalstrengthOffet
;
2819 BOOLEAN bLedOnScanning
;
2822 /*****************************************************************************************/
2823 /* 802.11 related parameters */
2824 /*****************************************************************************************/
2825 // outgoing BEACON frame buffer and corresponding TXD
2826 TXWI_STRUC BeaconTxWI
;
2828 USHORT BeaconOffset
[HW_BEACON_MAX_COUNT
];
2830 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2831 PSPOLL_FRAME PsPollFrame
;
2832 HEADER_802_11 NullFrame
;
2834 //=========AP===========
2837 //=======STA===========
2838 #ifdef CONFIG_STA_SUPPORT
2839 /* Modified by Wu Xi-Kun 4/21/2006 */
2840 // -----------------------------------------------
2841 // STA specific configuration & operation status
2842 // used only when pAd->OpMode == OPMODE_STA
2843 // -----------------------------------------------
2844 STA_ADMIN_CONFIG StaCfg
; // user desired settings
2845 STA_ACTIVE_CONFIG StaActive
; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2846 CHAR nickname
[IW_ESSID_MAX_SIZE
+1]; // nickname, only used in the iwconfig i/f
2847 NDIS_MEDIA_STATE PreMediaState
;
2848 #endif // CONFIG_STA_SUPPORT //
2850 //=======Common===========
2851 // OP mode: either AP or STA
2852 UCHAR OpMode
; // OPMODE_STA, OPMODE_AP
2854 NDIS_MEDIA_STATE IndicateMediaState
; // Base on Indication state, default is NdisMediaStateDisConnected
2856 // MAT related parameters
2858 // configuration: read from Registry & E2PROM
2859 BOOLEAN bLocalAdminMAC
; // Use user changed MAC
2860 UCHAR PermanentAddress
[MAC_ADDR_LEN
]; // Factory default MAC address
2861 UCHAR CurrentAddress
[MAC_ADDR_LEN
]; // User changed MAC address
2863 // ------------------------------------------------------
2864 // common configuration to both OPMODE_STA and OPMODE_AP
2865 // ------------------------------------------------------
2866 COMMON_CONFIG CommonCfg
;
2869 // AP needs those vaiables for site survey feature.
2870 MLME_AUX MlmeAux
; // temporary settings used during MLME state machine
2871 BSS_TABLE ScanTab
; // store the latest SCAN result
2873 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2874 MAC_TABLE MacTab
; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2875 NDIS_SPIN_LOCK MacTabLock
;
2877 #ifdef DOT11_N_SUPPORT
2879 #endif // DOT11_N_SUPPORT //
2880 NDIS_SPIN_LOCK BATabLock
;
2881 RALINK_TIMER_STRUCT RECBATimer
;
2883 // encryption/decryption KEY tables
2884 CIPHER_KEY SharedKey
[MAX_MBSSID_NUM
][4]; // STA always use SharedKey[BSS0][0..3]
2886 // RX re-assembly buffer for fragmentation
2887 FRAGMENT_FRAME FragFrame
; // Frame storage for fragment frame
2890 COUNTER_802_3 Counters8023
; // 802.3 counters
2891 COUNTER_802_11 WlanCounters
; // 802.11 MIB counters
2892 COUNTER_RALINK RalinkCounters
; // Ralink propriety counters
2893 COUNTER_DRS DrsCounters
; // counters for Dynamic TX Rate Switching
2894 PRIVATE_STRUC PrivateInfo
; // Private information & counters
2896 // flags, see fRTMP_ADAPTER_xxx flags
2897 ULONG Flags
; // Represent current device status
2899 // current TX sequence #
2907 // Control disconnect / connect event generation
2908 //+++Didn't used anymore
2913 //+++Used only for Station
2914 BOOLEAN bConfigChanged
; // Config Change flag for the same SSID setting
2917 ULONG ExtraInfo
; // Extra information for displaying status
2918 ULONG SystemErrorBitmap
; // b0: E2PROM version error
2920 //+++Didn't used anymore
2921 ULONG MacIcVersion
; // MAC/BBP serial interface issue solved after ver.D
2924 // ---------------------------
2926 // ---------------------------
2927 RT_802_11_EVENT_TABLE EventTab
;
2932 /*****************************************************************************************/
2933 /* Statistic related parameters */
2934 /*****************************************************************************************/
2936 BOOLEAN bUpdateBcnCntDone
;
2937 ULONG watchDogMacDeadlock
; // prevent MAC/BBP into deadlock condition
2938 // ----------------------------
2940 // ----------------------------
2941 BOOLEAN bBanAllBaSetup
;
2942 BOOLEAN bPromiscuous
;
2944 // ----------------------------
2945 // rt2860c emulation-use Parameters
2946 // ----------------------------
2949 ULONG cfendaccu
[30];
2950 ULONG bacontent
[16];
2951 ULONG rxint
[RX_RING_SIZE
+1];
2954 BOOLEAN bForcePrintTX
;
2955 BOOLEAN bForcePrintRX
;
2956 BOOLEAN bDisablescanning
; //defined in RT2870 USB
2957 BOOLEAN bStaFifoTest
;
2958 BOOLEAN bProtectionTest
;
2960 BOOLEAN bGenOneHCCA
;
2961 BOOLEAN bBroadComHT
;
2962 //+++Following add from RT2870 USB.
2964 ULONG BulkOutComplete
;
2965 ULONG BulkOutCompleteOther
;
2966 ULONG BulkOutCompleteCancel
; // seems not use now?
2968 ULONG BulkInComplete
;
2969 ULONG BulkInCompleteFail
;
2972 struct wificonf WIFItestbed
;
2976 #endif // RALINK_ATE //
2978 #ifdef DOT11_N_SUPPORT
2979 struct reordering_mpdu_pool mpdu_blk_pool
;
2980 #endif // DOT11_N_SUPPORT //
2982 ULONG OneSecondnonBEpackets
; // record non BE packets per second
2984 #if WIRELESS_EXT >= 12
2985 struct iw_statistics iw_stats
;
2988 struct net_device_stats stats
;
2991 BLOCK_QUEUE_ENTRY blockQueueTab
[NUM_OF_TX_RING
];
2992 #endif // BLOCK_NET_IF //
2996 #ifdef MULTIPLE_CARD_SUPPORT
2998 UCHAR MC_FileName
[256];
2999 #endif // MULTIPLE_CARD_SUPPORT //
3001 ULONG TbttTickCount
;
3002 #ifdef PCI_MSI_SUPPORT
3004 #endif // PCI_MSI_SUPPORT //
3009 #define TIME_BASE (1000000/OS_HZ)
3010 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3011 UCHAR flg_be_adjust
;
3012 ULONG be_adjust_last_time
;
3015 NINDO_CTRL_BLOCK nindo_ctrl_block
;
3016 #endif // NINTENDO_AP //
3019 #ifdef IKANOS_VX_1X0
3020 struct IKANOS_TX_INFO IkanosTxInfo
;
3021 struct IKANOS_TX_INFO IkanosRxInfo
[MAX_MBSSID_NUM
+ MAX_WDS_ENTRY
+ MAX_APCLI_NUM
+ MAX_MESH_NUM
];
3022 #endif // IKANOS_VX_1X0 //
3026 RtmpDiagStruct DiagStruct
;
3027 #endif // DBG_DIAGNOSE //
3030 UINT8 PM_FlgSuspend
;
3031 } RTMP_ADAPTER
, *PRTMP_ADAPTER
;
3034 // Cisco IAPP format
3036 typedef struct _CISCO_IAPP_CONTENT_
3038 USHORT Length
; //IAPP Length
3039 UCHAR MessageType
; //IAPP type
3040 UCHAR FunctionCode
; //IAPP function type
3041 UCHAR DestinaionMAC
[MAC_ADDR_LEN
];
3042 UCHAR SourceMAC
[MAC_ADDR_LEN
];
3043 USHORT Tag
; //Tag(element IE) - Adjacent AP report
3044 USHORT TagLength
; //Length of element not including 4 byte header
3045 UCHAR OUI
[4]; //0x00, 0x40, 0x96, 0x00
3046 UCHAR PreviousAP
[MAC_ADDR_LEN
]; //MAC Address of access point
3049 UCHAR Ssid
[MAX_LEN_OF_SSID
];
3050 USHORT Seconds
; //Seconds that the client has been disassociated.
3051 } CISCO_IAPP_CONTENT
, *PCISCO_IAPP_CONTENT
;
3053 #define DELAYINTMASK 0x0003fffb
3054 #define INTMASK 0x0003fffb
3055 #define IndMask 0x0003fffc
3056 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3057 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3058 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3059 #define TxCoherent 0x00020000 // tx coherent
3060 #define RxCoherent 0x00010000 // rx coherent
3061 #define McuCommand 0x00000200 // mcu
3062 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3063 #define TBTTInt 0x00000800 // TBTT interrupt
3064 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3065 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3066 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3069 typedef struct _RX_BLK_
3071 RT28XX_RXD_STRUC RxD
;
3073 PHEADER_802_11 pHeader
;
3074 PNDIS_PACKET pRxPacket
;
3078 UCHAR UserPriority
; // for calculate TKIP MIC using
3082 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3083 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3084 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3087 #define fRX_WDS 0x0001
3088 #define fRX_AMSDU 0x0002
3089 #define fRX_ARALINK 0x0004
3090 #define fRX_HTC 0x0008
3091 #define fRX_PAD 0x0010
3092 #define fRX_AMPDU 0x0020
3093 #define fRX_QOS 0x0040
3094 #define fRX_INFRA 0x0080
3095 #define fRX_EAP 0x0100
3096 #define fRX_MESH 0x0200
3097 #define fRX_APCLI 0x0400
3098 #define fRX_DLS 0x0800
3099 #define fRX_WPI 0x1000
3101 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3102 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3103 #define LENGTH_ARALINK_HEADER_FIELD 2
3105 #define TX_UNKOWN_FRAME 0x00
3106 #define TX_MCAST_FRAME 0x01
3107 #define TX_LEGACY_FRAME 0x02
3108 #define TX_AMPDU_FRAME 0x04
3109 #define TX_AMSDU_FRAME 0x08
3110 #define TX_RALINK_FRAME 0x10
3111 #define TX_FRAG_FRAME 0x20
3114 // Currently the sizeof(TX_BLK) is 148 bytes.
3115 typedef struct _TX_BLK_
3118 UCHAR TxFrameType
; // Indicate the Transmission type of the all frames in one batch
3119 UCHAR TotalFrameNum
; // Total frame number want to send-out in one batch
3120 USHORT TotalFragNum
; // Total frame fragments required in one batch
3121 USHORT TotalFrameLen
; // Total length of all frames want to send-out in one batch
3123 QUEUE_HEADER TxPacketList
;
3124 MAC_TABLE_ENTRY
*pMacEntry
; // NULL: packet with 802.11 RA field is multicast/broadcast address
3125 HTTRANSMIT_SETTING
*pTransmit
;
3127 // Following structure used for the characteristics of a specific packet.
3128 PNDIS_PACKET pPacket
;
3129 PUCHAR pSrcBufHeader
; // Reference to the head of sk_buff->data
3130 PUCHAR pSrcBufData
; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3131 UINT SrcBufLen
; // Length of packet payload which not including Layer 2 header
3132 PUCHAR pExtraLlcSnapEncap
; // NULL means no extra LLC/SNAP is required
3133 UCHAR HeaderBuf
[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3134 UCHAR MpduHeaderLen
; // 802.11 header length NOT including the padding
3135 UCHAR HdrPadLen
; // recording Header Padding Length;
3136 UCHAR apidx
; // The interface associated to this packet
3137 UCHAR Wcid
; // The MAC entry associated to this packet
3138 UCHAR UserPriority
; // priority class of packet
3139 UCHAR FrameGap
; // what kind of IFS this packet use
3140 UCHAR MpduReqNum
; // number of fragments of this frame
3141 UCHAR TxRate
; // TODO: Obsoleted? Should change to MCS?
3142 UCHAR CipherAlg
; // cipher alogrithm
3147 USHORT Flags
; //See following definitions for detail.
3149 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3150 ULONG Priv
; // Hardware specific value saved in here.
3154 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3155 #define fTX_bAckRequired 0x0002 // the packet need ack response
3156 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3157 #define fTX_bHTRate 0x0008 // allow to use HT rate
3158 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3159 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3160 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3161 #define fTX_bWMM 0x0080 // QOS Data
3163 #define fTX_bClearEAPFrame 0x0100
3165 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3168 (_pTxBlk->Flags |= _flag) \
3170 (_pTxBlk->Flags &= ~(_flag)) \
3173 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3174 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3175 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3181 //------------------------------------------------------------------------------------------
3186 // Enable & Disable NIC interrupt via writing interrupt mask register
3187 // Since it use ADAPTER structure, it have to be put after structure definition.
3189 __inline VOID
NICDisableInterrupt(
3190 IN PRTMP_ADAPTER pAd
)
3192 RTMP_IO_WRITE32(pAd
, INT_MASK_CSR
, 0x0); // 0: disable
3193 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3194 RTMP_CLEAR_FLAG(pAd
, fRTMP_ADAPTER_INTERRUPT_ACTIVE
);
3197 __inline VOID
NICEnableInterrupt(
3198 IN PRTMP_ADAPTER pAd
)
3201 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3202 // To prevent System hang, we should enalbe the interrupt when
3203 // ASIC is already Wake Up.
3205 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3206 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3207 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3209 RTMP_IO_WRITE32(pAd
, INT_MASK_CSR
, pAd
->int_enable_reg
/*DELAYINTMASK*/); // 1:enable
3212 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3214 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3215 RTMP_SET_FLAG(pAd
, fRTMP_ADAPTER_INTERRUPT_ACTIVE
);
3219 #ifdef RT_BIG_ENDIAN
3220 static inline VOID
WriteBackToDescriptor(
3223 IN BOOLEAN DoEncrypt
,
3224 IN ULONG DescriptorType
)
3228 p1
= ((UINT32
*)Dest
);
3229 p2
= ((UINT32
*)Src
);
3234 *(p1
+1) = *(p2
+1); // Word 1; this must be written back last
3238 ========================================================================
3240 Routine Description:
3241 Endian conversion of Tx/Rx descriptor .
3244 pAd Pointer to our adapter
3245 pData Pointer to Tx/Rx descriptor
3246 DescriptorType Direction of the frame
3252 Call this function when read or update descriptor
3253 ========================================================================
3255 static inline VOID
RTMPWIEndianChange(
3257 IN ULONG DescriptorType
)
3262 size
= ((DescriptorType
== TYPE_TXWI
) ? TXWI_SIZE
: RXWI_SIZE
);
3264 if(DescriptorType
== TYPE_TXWI
)
3266 *((UINT32
*)(pData
)) = SWAP32(*((UINT32
*)(pData
))); // Byte 0~3
3267 *((UINT32
*)(pData
+ 4)) = SWAP32(*((UINT32
*)(pData
+4))); // Byte 4~7
3271 for(i
=0; i
< size
/4 ; i
++)
3272 *(((UINT32
*)pData
) +i
) = SWAP32(*(((UINT32
*)pData
)+i
));
3277 ========================================================================
3279 Routine Description:
3280 Endian conversion of Tx/Rx descriptor .
3283 pAd Pointer to our adapter
3284 pData Pointer to Tx/Rx descriptor
3285 DescriptorType Direction of the frame
3291 Call this function when read or update descriptor
3292 ========================================================================
3295 static inline VOID
RTMPDescriptorEndianChange(
3297 IN ULONG DescriptorType
)
3299 *((UINT32
*)(pData
)) = SWAP32(*((UINT32
*)(pData
))); // Byte 0~3
3300 *((UINT32
*)(pData
+ 8)) = SWAP32(*((UINT32
*)(pData
+8))); // Byte 8~11
3301 *((UINT32
*)(pData
+12)) = SWAP32(*((UINT32
*)(pData
+ 12))); // Byte 12~15
3302 *((UINT32
*)(pData
+ 4)) = SWAP32(*((UINT32
*)(pData
+ 4))); // Byte 4~7, this must be swapped last
3307 ========================================================================
3309 Routine Description:
3310 Endian conversion of all kinds of 802.11 frames .
3313 pAd Pointer to our adapter
3314 pData Pointer to the 802.11 frame structure
3315 Dir Direction of the frame
3316 FromRxDoneInt Caller is from RxDone interrupt
3322 Call this function when read or update buffer data
3323 ========================================================================
3325 static inline VOID
RTMPFrameEndianChange(
3326 IN PRTMP_ADAPTER pAd
,
3329 IN BOOLEAN FromRxDoneInt
)
3331 PHEADER_802_11 pFrame
;
3334 // swab 16 bit fields - Frame Control field
3337 *(USHORT
*)pData
= SWAP16(*(USHORT
*)pData
);
3340 pFrame
= (PHEADER_802_11
) pData
;
3341 pMacHdr
= (PUCHAR
) pFrame
;
3343 // swab 16 bit fields - Duration/ID field
3344 *(USHORT
*)(pMacHdr
+ 2) = SWAP16(*(USHORT
*)(pMacHdr
+ 2));
3346 // swab 16 bit fields - Sequence Control field
3347 *(USHORT
*)(pMacHdr
+ 22) = SWAP16(*(USHORT
*)(pMacHdr
+ 22));
3349 if(pFrame
->FC
.Type
== BTYPE_MGMT
)
3351 switch(pFrame
->FC
.SubType
)
3353 case SUBTYPE_ASSOC_REQ
:
3354 case SUBTYPE_REASSOC_REQ
:
3355 // swab 16 bit fields - CapabilityInfo field
3356 pMacHdr
+= sizeof(HEADER_802_11
);
3357 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3359 // swab 16 bit fields - Listen Interval field
3361 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3364 case SUBTYPE_ASSOC_RSP
:
3365 case SUBTYPE_REASSOC_RSP
:
3366 // swab 16 bit fields - CapabilityInfo field
3367 pMacHdr
+= sizeof(HEADER_802_11
);
3368 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3370 // swab 16 bit fields - Status Code field
3372 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3374 // swab 16 bit fields - AID field
3376 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3380 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3381 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3382 if(!FromRxDoneInt
&& pFrame
->FC
.Wep
== 1)
3386 // swab 16 bit fields - Auth Alg No. field
3387 pMacHdr
+= sizeof(HEADER_802_11
);
3388 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3390 // swab 16 bit fields - Auth Seq No. field
3392 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3394 // swab 16 bit fields - Status Code field
3396 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3400 case SUBTYPE_BEACON
:
3401 case SUBTYPE_PROBE_RSP
:
3402 // swab 16 bit fields - BeaconInterval field
3403 pMacHdr
+= (sizeof(HEADER_802_11
) + TIMESTAMP_LEN
);
3404 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3406 // swab 16 bit fields - CapabilityInfo field
3407 pMacHdr
+= sizeof(USHORT
);
3408 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3411 case SUBTYPE_DEAUTH
:
3412 case SUBTYPE_DISASSOC
:
3413 // swab 16 bit fields - Reason code field
3414 pMacHdr
+= sizeof(HEADER_802_11
);
3415 *(USHORT
*)pMacHdr
= SWAP16(*(USHORT
*)pMacHdr
);
3419 else if( pFrame
->FC
.Type
== BTYPE_DATA
)
3422 else if(pFrame
->FC
.Type
== BTYPE_CNTL
)
3424 switch(pFrame
->FC
.SubType
)
3426 case SUBTYPE_BLOCK_ACK_REQ
:
3428 PFRAME_BA_REQ pBAReq
= (PFRAME_BA_REQ
)pFrame
;
3429 *(USHORT
*)(&pBAReq
->BARControl
) = SWAP16(*(USHORT
*)(&pBAReq
->BARControl
));
3430 pBAReq
->BAStartingSeq
.word
= SWAP16(pBAReq
->BAStartingSeq
.word
);
3433 case SUBTYPE_BLOCK_ACK
:
3434 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3435 *(UINT32
*)(&pFrame
->Addr3
[0]) = SWAP32(*(UINT32
*)(&pFrame
->Addr3
[0]));
3439 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3440 *(UINT32
*)(&pFrame
->Addr2
[0])= SWAP32(*(UINT32
*)(&pFrame
->Addr2
[0]));
3446 DBGPRINT(RT_DEBUG_ERROR
,("Invalid Frame Type!!!\n"));
3449 // swab 16 bit fields - Frame Control
3450 if(Dir
== DIR_WRITE
)
3452 *(USHORT
*)pData
= SWAP16(*(USHORT
*)pData
);
3455 #endif // RT_BIG_ENDIAN //
3458 static inline VOID
ConvertMulticastIP2MAC(
3460 IN PUCHAR
*ppMacAddr
,
3461 IN UINT16 ProtoType
)
3463 if (pIpAddr
== NULL
)
3466 if (ppMacAddr
== NULL
|| *ppMacAddr
== NULL
)
3472 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3473 *(*ppMacAddr
) = 0x33;
3474 *(*ppMacAddr
+ 1) = 0x33;
3475 *(*ppMacAddr
+ 2) = pIpAddr
[12];
3476 *(*ppMacAddr
+ 3) = pIpAddr
[13];
3477 *(*ppMacAddr
+ 4) = pIpAddr
[14];
3478 *(*ppMacAddr
+ 5) = pIpAddr
[15];
3483 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3484 *(*ppMacAddr
) = 0x01;
3485 *(*ppMacAddr
+ 1) = 0x00;
3486 *(*ppMacAddr
+ 2) = 0x5e;
3487 *(*ppMacAddr
+ 3) = pIpAddr
[1] & 0x7f;
3488 *(*ppMacAddr
+ 4) = pIpAddr
[2];
3489 *(*ppMacAddr
+ 5) = pIpAddr
[3];
3496 BOOLEAN
RTMPCheckForHang(
3497 IN NDIS_HANDLE MiniportAdapterContext
3501 IN NDIS_HANDLE MiniportAdapterContext
3505 // Private routines in rtmp_init.c
3507 NDIS_STATUS
RTMPAllocAdapterBlock(
3509 OUT PRTMP_ADAPTER
*ppAdapter
3512 NDIS_STATUS
RTMPAllocTxRxRingMemory(
3513 IN PRTMP_ADAPTER pAd
3516 NDIS_STATUS
RTMPFindAdapter(
3517 IN PRTMP_ADAPTER pAd
,
3518 IN NDIS_HANDLE WrapperConfigurationContext
3521 NDIS_STATUS
RTMPReadParametersHook(
3522 IN PRTMP_ADAPTER pAd
3525 VOID
RTMPFreeAdapter(
3526 IN PRTMP_ADAPTER pAd
3529 NDIS_STATUS
NICReadRegParameters(
3530 IN PRTMP_ADAPTER pAd
,
3531 IN NDIS_HANDLE WrapperConfigurationContext
3535 VOID
NICReadEEPROMParameters(
3536 IN PRTMP_ADAPTER pAd
,
3537 IN PUCHAR mac_addr
);
3539 VOID
NICInitAsicFromEEPROM(
3540 IN PRTMP_ADAPTER pAd
);
3542 VOID
NICInitTxRxRingAndBacklogQueue(
3543 IN PRTMP_ADAPTER pAd
);
3545 NDIS_STATUS
NICInitializeAdapter(
3546 IN PRTMP_ADAPTER pAd
,
3547 IN BOOLEAN bHardReset
);
3549 NDIS_STATUS
NICInitializeAsic(
3550 IN PRTMP_ADAPTER pAd
,
3551 IN BOOLEAN bHardReset
);
3554 IN PRTMP_ADAPTER pAd
);
3556 VOID
RTMPRingCleanUp(
3557 IN PRTMP_ADAPTER pAd
,
3561 IN PRTMP_ADAPTER pAd
);
3563 NDIS_STATUS
DbgSendPacket(
3564 IN PRTMP_ADAPTER pAd
,
3565 IN PNDIS_PACKET pPacket
);
3568 IN PRTMP_ADAPTER pAd
);
3570 VOID
NICResetFromError(
3571 IN PRTMP_ADAPTER pAd
);
3573 VOID
NICEraseFirmware(
3574 IN PRTMP_ADAPTER pAd
);
3576 NDIS_STATUS
NICLoadFirmware(
3577 IN PRTMP_ADAPTER pAd
);
3579 NDIS_STATUS
NICLoadRateSwitchingParams(
3580 IN PRTMP_ADAPTER pAd
);
3582 BOOLEAN
NICCheckForHang(
3583 IN PRTMP_ADAPTER pAd
);
3585 VOID
NICUpdateFifoStaCounters(
3586 IN PRTMP_ADAPTER pAd
);
3588 VOID
NICUpdateRawCounters(
3589 IN PRTMP_ADAPTER pAd
);
3591 ULONG
RTMPNotAllZero(
3595 VOID
RTMPZeroMemory(
3599 ULONG
RTMPCompareMemory(
3604 VOID
RTMPMoveMemory(
3617 VOID
RTMPPatchMacBbpBug(
3618 IN PRTMP_ADAPTER pAd
);
3620 VOID
RTMPPatchCardBus(
3621 IN PRTMP_ADAPTER pAdapter
);
3623 VOID
RTMPPatchRalinkCardBus(
3624 IN PRTMP_ADAPTER pAdapter
,
3627 ULONG
RTMPReadCBConfig(
3633 VOID
RTMPWriteCBConfig(
3641 IN PRTMP_ADAPTER pAd
,
3642 IN PRALINK_TIMER_STRUCT pTimer
,
3643 IN PVOID pTimerFunc
,
3648 IN PRALINK_TIMER_STRUCT pTimer
,
3653 IN PRALINK_TIMER_STRUCT pTimer
,
3656 VOID
RTMPCancelTimer(
3657 IN PRALINK_TIMER_STRUCT pTimer
,
3658 OUT BOOLEAN
*pCancelled
);
3661 IN PRTMP_ADAPTER pAd
,
3664 VOID
RTMPSetSignalLED(
3665 IN PRTMP_ADAPTER pAd
,
3666 IN NDIS_802_11_RSSI Dbm
);
3668 VOID
RTMPEnableRxTx(
3669 IN PRTMP_ADAPTER pAd
);
3672 // prototype in action.c
3674 VOID
ActionStateMachineInit(
3675 IN PRTMP_ADAPTER pAd
,
3676 IN STATE_MACHINE
*S
,
3677 OUT STATE_MACHINE_FUNC Trans
[]);
3679 VOID
MlmeADDBAAction(
3680 IN PRTMP_ADAPTER pAd
,
3681 IN MLME_QUEUE_ELEM
*Elem
);
3683 VOID
MlmeDELBAAction(
3684 IN PRTMP_ADAPTER pAd
,
3685 IN MLME_QUEUE_ELEM
*Elem
);
3688 IN PRTMP_ADAPTER pAd
,
3689 IN MLME_QUEUE_ELEM
*Elem
);
3691 VOID
MlmeInvalidAction(
3692 IN PRTMP_ADAPTER pAd
,
3693 IN MLME_QUEUE_ELEM
*Elem
);
3696 IN PRTMP_ADAPTER pAd
,
3697 IN MLME_QUEUE_ELEM
*Elem
);
3699 #ifdef DOT11_N_SUPPORT
3700 VOID
PeerAddBAReqAction(
3701 IN PRTMP_ADAPTER pAd
,
3702 IN MLME_QUEUE_ELEM
*Elem
);
3704 VOID
PeerAddBARspAction(
3705 IN PRTMP_ADAPTER pAd
,
3706 IN MLME_QUEUE_ELEM
*Elem
);
3708 VOID
PeerDelBAAction(
3709 IN PRTMP_ADAPTER pAd
,
3710 IN MLME_QUEUE_ELEM
*Elem
);
3713 IN PRTMP_ADAPTER pAd
,
3714 IN MLME_QUEUE_ELEM
*Elem
);
3715 #endif // DOT11_N_SUPPORT //
3717 VOID
SendPSMPAction(
3718 IN PRTMP_ADAPTER pAd
,
3723 #ifdef DOT11N_DRAFT3
3724 VOID
SendBSS2040CoexistMgmtAction(
3725 IN PRTMP_ADAPTER pAd
,
3730 VOID
SendNotifyBWActionFrame(
3731 IN PRTMP_ADAPTER pAd
,
3735 BOOLEAN
ChannelSwitchSanityCheck(
3736 IN PRTMP_ADAPTER pAd
,
3738 IN UCHAR NewChannel
,
3739 IN UCHAR Secondary
);
3741 VOID
ChannelSwitchAction(
3742 IN PRTMP_ADAPTER pAd
,
3745 IN UCHAR Secondary
);
3747 ULONG
BuildIntolerantChannelRep(
3748 IN PRTMP_ADAPTER pAd
,
3751 VOID
Update2040CoexistFrameAndNotify(
3752 IN PRTMP_ADAPTER pAd
,
3754 IN BOOLEAN bAddIntolerantCha
);
3756 VOID
Send2040CoexistAction(
3757 IN PRTMP_ADAPTER pAd
,
3759 IN BOOLEAN bAddIntolerantCha
);
3760 #endif // DOT11N_DRAFT3 //
3763 IN PRTMP_ADAPTER pAd
,
3764 IN MLME_QUEUE_ELEM
*Elem
);
3766 VOID
PeerPublicAction(
3767 IN PRTMP_ADAPTER pAd
,
3768 IN MLME_QUEUE_ELEM
*Elem
);
3770 #ifdef CONFIG_STA_SUPPORT
3771 VOID
StaPublicAction(
3772 IN PRTMP_ADAPTER pAd
,
3773 IN UCHAR Bss2040Coexist
);
3774 #endif // CONFIG_STA_SUPPORT //
3777 VOID
PeerBSSTranAction(
3778 IN PRTMP_ADAPTER pAd
,
3779 IN MLME_QUEUE_ELEM
*Elem
);
3781 #ifdef DOT11_N_SUPPORT
3783 IN PRTMP_ADAPTER pAd
,
3784 IN MLME_QUEUE_ELEM
*Elem
);
3785 #endif // DOT11_N_SUPPORT //
3788 IN PRTMP_ADAPTER pAd
,
3789 IN MLME_QUEUE_ELEM
*Elem
);
3791 #ifdef QOS_DLS_SUPPORT
3793 IN PRTMP_ADAPTER pAd
,
3794 IN MLME_QUEUE_ELEM
*Elem
);
3795 #endif // QOS_DLS_SUPPORT //
3797 #ifdef CONFIG_STA_SUPPORT
3798 #ifdef QOS_DLS_SUPPORT
3800 IN PRTMP_ADAPTER pAd
,
3801 IN OUT MLME_DLS_REQ_STRUCT
*pDlsReq
,
3802 IN PRT_802_11_DLS pDls
,
3804 #endif // QOS_DLS_SUPPORT //
3805 #endif // CONFIG_STA_SUPPORT //
3807 #ifdef DOT11_N_SUPPORT
3808 VOID
RECBATimerTimeout(
3809 IN PVOID SystemSpecific1
,
3810 IN PVOID FunctionContext
,
3811 IN PVOID SystemSpecific2
,
3812 IN PVOID SystemSpecific3
);
3814 VOID
ORIBATimerTimeout(
3815 IN PRTMP_ADAPTER pAd
);
3817 VOID
SendRefreshBAR(
3818 IN PRTMP_ADAPTER pAd
,
3819 IN MAC_TABLE_ENTRY
*pEntry
);
3820 #endif // DOT11_N_SUPPORT //
3823 IN PRTMP_ADAPTER pAd
,
3824 IN OUT PHEADER_802_11 pHdr80211
,
3830 IN PRTMP_ADAPTER pAd
,
3831 IN OUT PFRAME_BAR pCntlBar
,
3835 VOID
InsertActField(
3836 IN PRTMP_ADAPTER pAd
,
3837 OUT PUCHAR pFrameBuf
,
3838 OUT PULONG pFrameLen
,
3842 BOOLEAN
QosBADataParse(
3843 IN PRTMP_ADAPTER pAd
,
3845 IN PUCHAR p8023Header
,
3849 IN UCHAR DataOffset
,
3851 IN UINT CurRxIndex
);
3853 #ifdef DOT11_N_SUPPORT
3854 BOOLEAN
CntlEnqueueForRecv(
3855 IN PRTMP_ADAPTER pAd
,
3858 IN PFRAME_BA_REQ pMsg
);
3860 VOID
BaAutoManSwitch(
3861 IN PRTMP_ADAPTER pAd
);
3862 #endif // DOT11_N_SUPPORT //
3865 IN PRTMP_ADAPTER pAd
,
3866 IN UCHAR BatRecIdx
);
3869 // Private routines in rtmp_data.c
3871 BOOLEAN
RTMPHandleRxDoneInterrupt(
3872 IN PRTMP_ADAPTER pAd
);
3874 VOID
RTMPHandleTxDoneInterrupt(
3875 IN PRTMP_ADAPTER pAd
);
3877 BOOLEAN
RTMPHandleTxRingDmaDoneInterrupt(
3878 IN PRTMP_ADAPTER pAd
,
3879 IN INT_SOURCE_CSR_STRUC TxRingBitmap
);
3881 VOID
RTMPHandleMgmtRingDmaDoneInterrupt(
3882 IN PRTMP_ADAPTER pAd
);
3884 VOID
RTMPHandleTBTTInterrupt(
3885 IN PRTMP_ADAPTER pAd
);
3887 VOID
RTMPHandlePreTBTTInterrupt(
3888 IN PRTMP_ADAPTER pAd
);
3890 void RTMPHandleTwakeupInterrupt(
3891 IN PRTMP_ADAPTER pAd
);
3893 VOID
RTMPHandleRxCoherentInterrupt(
3894 IN PRTMP_ADAPTER pAd
);
3896 BOOLEAN
TxFrameIsAggregatible(
3897 IN PRTMP_ADAPTER pAd
,
3898 IN PUCHAR pPrevAddr1
,
3899 IN PUCHAR p8023hdr
);
3901 BOOLEAN
PeerIsAggreOn(
3902 IN PRTMP_ADAPTER pAd
,
3904 IN PMAC_TABLE_ENTRY pMacEntry
);
3906 NDIS_STATUS
Sniff2BytesFromNdisBuffer(
3907 IN PNDIS_BUFFER pFirstBuffer
,
3908 IN UCHAR DesiredOffset
,
3912 NDIS_STATUS
STASendPacket(
3913 IN PRTMP_ADAPTER pAd
,
3914 IN PNDIS_PACKET pPacket
);
3916 VOID
STASendPackets(
3917 IN NDIS_HANDLE MiniportAdapterContext
,
3918 IN PPNDIS_PACKET ppPacketArray
,
3919 IN UINT NumberOfPackets
);
3921 VOID
RTMPDeQueuePacket(
3922 IN PRTMP_ADAPTER pAd
,
3923 IN BOOLEAN bIntContext
,
3925 IN UCHAR Max_Tx_Packets
);
3927 NDIS_STATUS
RTMPHardTransmit(
3928 IN PRTMP_ADAPTER pAd
,
3929 IN PNDIS_PACKET pPacket
,
3931 OUT PULONG pFreeTXDLeft
);
3933 NDIS_STATUS
STAHardTransmit(
3934 IN PRTMP_ADAPTER pAd
,
3938 VOID
STARxEAPOLFrameIndicate(
3939 IN PRTMP_ADAPTER pAd
,
3940 IN MAC_TABLE_ENTRY
*pEntry
,
3942 IN UCHAR FromWhichBSSID
);
3944 NDIS_STATUS
RTMPFreeTXDRequest(
3945 IN PRTMP_ADAPTER pAd
,
3947 IN UCHAR NumberRequired
,
3948 IN PUCHAR FreeNumberIs
);
3950 NDIS_STATUS
MlmeHardTransmit(
3951 IN PRTMP_ADAPTER pAd
,
3953 IN PNDIS_PACKET pPacket
);
3955 NDIS_STATUS
MlmeHardTransmitMgmtRing(
3956 IN PRTMP_ADAPTER pAd
,
3958 IN PNDIS_PACKET pPacket
);
3960 NDIS_STATUS
MlmeHardTransmitTxRing(
3961 IN PRTMP_ADAPTER pAd
,
3963 IN PNDIS_PACKET pPacket
);
3965 USHORT
RTMPCalcDuration(
3966 IN PRTMP_ADAPTER pAd
,
3971 IN PRTMP_ADAPTER pAd
,
3972 IN PTXWI_STRUC pTxWI
,
3975 IN BOOLEAN InsTimestamp
,
3978 IN BOOLEAN NSeq
, // HW new a sequence.
3987 IN HTTRANSMIT_SETTING
*pTransmit
);
3990 VOID
RTMPWriteTxWI_Data(
3991 IN PRTMP_ADAPTER pAd
,
3992 IN OUT PTXWI_STRUC pTxWI
,
3996 VOID
RTMPWriteTxWI_Cache(
3997 IN PRTMP_ADAPTER pAd
,
3998 IN OUT PTXWI_STRUC pTxWI
,
4001 VOID
RTMPWriteTxDescriptor(
4002 IN PRTMP_ADAPTER pAd
,
4007 VOID
RTMPSuspendMsduTransmission(
4008 IN PRTMP_ADAPTER pAd
);
4010 VOID
RTMPResumeMsduTransmission(
4011 IN PRTMP_ADAPTER pAd
);
4013 NDIS_STATUS
MiniportMMRequest(
4014 IN PRTMP_ADAPTER pAd
,
4019 VOID
RTMPSendNullFrame(
4020 IN PRTMP_ADAPTER pAd
,
4022 IN BOOLEAN bQosNull
);
4024 VOID
RTMPSendDisassociationFrame(
4025 IN PRTMP_ADAPTER pAd
);
4027 VOID
RTMPSendRTSFrame(
4028 IN PRTMP_ADAPTER pAd
,
4030 IN
unsigned int NextMpduSize
,
4033 IN USHORT AckDuration
,
4038 NDIS_STATUS
RTMPApplyPacketFilter(
4039 IN PRTMP_ADAPTER pAd
,
4040 IN PRT28XX_RXD_STRUC pRxD
,
4041 IN PHEADER_802_11 pHeader
);
4043 PQUEUE_HEADER
RTMPCheckTxSwQueue(
4044 IN PRTMP_ADAPTER pAd
,
4047 #ifdef CONFIG_STA_SUPPORT
4048 VOID
RTMPReportMicError(
4049 IN PRTMP_ADAPTER pAd
,
4050 IN PCIPHER_KEY pWpaKey
);
4052 VOID
WpaMicFailureReportFrame(
4053 IN PRTMP_ADAPTER pAd
,
4054 IN MLME_QUEUE_ELEM
*Elem
);
4056 VOID
WpaDisassocApAndBlockAssoc(
4057 IN PVOID SystemSpecific1
,
4058 IN PVOID FunctionContext
,
4059 IN PVOID SystemSpecific2
,
4060 IN PVOID SystemSpecific3
);
4061 #endif // CONFIG_STA_SUPPORT //
4063 NDIS_STATUS
RTMPCloneNdisPacket(
4064 IN PRTMP_ADAPTER pAd
,
4065 IN BOOLEAN pInsAMSDUHdr
,
4066 IN PNDIS_PACKET pInPacket
,
4067 OUT PNDIS_PACKET
*ppOutPacket
);
4069 NDIS_STATUS
RTMPAllocateNdisPacket(
4070 IN PRTMP_ADAPTER pAd
,
4071 IN PNDIS_PACKET
*pPacket
,
4077 VOID
RTMPFreeNdisPacket(
4078 IN PRTMP_ADAPTER pAd
,
4079 IN PNDIS_PACKET pPacket
);
4081 BOOLEAN
RTMPFreeTXDUponTxDmaDone(
4082 IN PRTMP_ADAPTER pAd
,
4085 BOOLEAN
RTMPCheckDHCPFrame(
4086 IN PRTMP_ADAPTER pAd
,
4087 IN PNDIS_PACKET pPacket
);
4090 BOOLEAN
RTMPCheckEtherType(
4091 IN PRTMP_ADAPTER pAd
,
4092 IN PNDIS_PACKET pPacket
);
4095 VOID
RTMPCckBbpTuning(
4096 IN PRTMP_ADAPTER pAd
,
4100 // Private routines in rtmp_wep.c
4102 VOID
RTMPInitWepEngine(
4103 IN PRTMP_ADAPTER pAd
,
4109 VOID
RTMPEncryptData(
4110 IN PRTMP_ADAPTER pAd
,
4115 BOOLEAN
RTMPDecryptData(
4116 IN PRTMP_ADAPTER pAdapter
,
4121 BOOLEAN
RTMPSoftDecryptWEP(
4122 IN PRTMP_ADAPTER pAd
,
4124 IN ULONG DataByteCnt
,
4125 IN PCIPHER_KEY pGroupKey
);
4128 IN PRTMP_ADAPTER pAd
,
4132 IN PARCFOURCONTEXT Ctx
,
4137 IN PARCFOURCONTEXT Ctx
);
4139 VOID
ARCFOUR_DECRYPT(
4140 IN PARCFOURCONTEXT Ctx
,
4145 VOID
ARCFOUR_ENCRYPT(
4146 IN PARCFOURCONTEXT Ctx
,
4151 VOID
WPAARCFOUR_ENCRYPT(
4152 IN PARCFOURCONTEXT Ctx
,
4157 UINT
RTMP_CALC_FCS32(
4166 // Asic/RF/BBP related functions
4168 VOID
AsicAdjustTxPower(
4169 IN PRTMP_ADAPTER pAd
);
4171 VOID
AsicUpdateProtect(
4172 IN PRTMP_ADAPTER pAd
,
4173 IN USHORT OperaionMode
,
4175 IN BOOLEAN bDisableBGProtect
,
4176 IN BOOLEAN bNonGFExist
);
4178 VOID
AsicSwitchChannel(
4179 IN PRTMP_ADAPTER pAd
,
4183 VOID
AsicLockChannel(
4184 IN PRTMP_ADAPTER pAd
,
4187 VOID
AsicAntennaSelect(
4188 IN PRTMP_ADAPTER pAd
,
4191 VOID
AsicAntennaSetting(
4192 IN PRTMP_ADAPTER pAd
,
4193 IN ABGBAND_STATE BandState
);
4195 VOID
AsicRfTuningExec(
4196 IN PVOID SystemSpecific1
,
4197 IN PVOID FunctionContext
,
4198 IN PVOID SystemSpecific2
,
4199 IN PVOID SystemSpecific3
);
4201 #ifdef CONFIG_STA_SUPPORT
4202 VOID
AsicSleepThenAutoWakeup(
4203 IN PRTMP_ADAPTER pAd
,
4204 IN USHORT TbttNumToNextWakeUp
);
4206 VOID
AsicForceSleep(
4207 IN PRTMP_ADAPTER pAd
);
4209 VOID
AsicForceWakeup(
4210 IN PRTMP_ADAPTER pAd
,
4211 IN BOOLEAN bFromTx
);
4212 #endif // CONFIG_STA_SUPPORT //
4215 IN PRTMP_ADAPTER pAd
,
4218 VOID
AsicSetMcastWC(
4219 IN PRTMP_ADAPTER pAd
);
4221 VOID
AsicDelWcidTab(
4222 IN PRTMP_ADAPTER pAd
,
4226 IN PRTMP_ADAPTER pAd
);
4228 VOID
AsicDisableRDG(
4229 IN PRTMP_ADAPTER pAd
);
4231 VOID
AsicDisableSync(
4232 IN PRTMP_ADAPTER pAd
);
4234 VOID
AsicEnableBssSync(
4235 IN PRTMP_ADAPTER pAd
);
4237 VOID
AsicEnableIbssSync(
4238 IN PRTMP_ADAPTER pAd
);
4240 VOID
AsicSetEdcaParm(
4241 IN PRTMP_ADAPTER pAd
,
4242 IN PEDCA_PARM pEdcaParm
);
4244 VOID
AsicSetSlotTime(
4245 IN PRTMP_ADAPTER pAd
,
4246 IN BOOLEAN bUseShortSlotTime
);
4248 VOID
AsicAddSharedKeyEntry(
4249 IN PRTMP_ADAPTER pAd
,
4257 VOID
AsicRemoveSharedKeyEntry(
4258 IN PRTMP_ADAPTER pAd
,
4262 VOID
AsicUpdateWCIDAttribute(
4263 IN PRTMP_ADAPTER pAd
,
4267 IN BOOLEAN bUsePairewiseKeyTable
);
4269 VOID
AsicUpdateWCIDIVEIV(
4270 IN PRTMP_ADAPTER pAd
,
4275 VOID
AsicUpdateRxWCIDTable(
4276 IN PRTMP_ADAPTER pAd
,
4280 VOID
AsicAddKeyEntry(
4281 IN PRTMP_ADAPTER pAd
,
4285 IN PCIPHER_KEY pCipherKey
,
4286 IN BOOLEAN bUsePairewiseKeyTable
,
4289 VOID
AsicAddPairwiseKeyEntry(
4290 IN PRTMP_ADAPTER pAd
,
4293 IN CIPHER_KEY
*pCipherKey
);
4295 VOID
AsicRemovePairwiseKeyEntry(
4296 IN PRTMP_ADAPTER pAd
,
4300 BOOLEAN
AsicSendCommandToMcu(
4301 IN PRTMP_ADAPTER pAd
,
4308 BOOLEAN
AsicCheckCommanOk(
4309 IN PRTMP_ADAPTER pAd
,
4313 VOID
MacAddrRandomBssid(
4314 IN PRTMP_ADAPTER pAd
,
4317 VOID
MgtMacHeaderInit(
4318 IN PRTMP_ADAPTER pAd
,
4319 IN OUT PHEADER_802_11 pHdr80211
,
4326 IN PRTMP_ADAPTER pAd
);
4329 IN PRTMP_ADAPTER pAd
);
4335 #ifdef DOT11_N_SUPPORT
4337 IN PRTMP_ADAPTER pAd
,
4339 #endif // DOT11_N_SUPPORT //
4341 ULONG
BssTableSearch(
4346 ULONG
BssSsidTableSearch(
4353 ULONG
BssTableSearchWithSSID(
4360 VOID
BssTableDeleteEntry(
4361 IN OUT PBSS_TABLE pTab
,
4365 #ifdef DOT11_N_SUPPORT
4366 VOID
BATableDeleteORIEntry(
4367 IN OUT PRTMP_ADAPTER pAd
,
4368 IN BA_ORI_ENTRY
*pBAORIEntry
);
4370 VOID
BATableDeleteRECEntry(
4371 IN OUT PRTMP_ADAPTER pAd
,
4372 IN BA_REC_ENTRY
*pBARECEntry
);
4374 VOID
BATableTearORIEntry(
4375 IN OUT PRTMP_ADAPTER pAd
,
4378 IN BOOLEAN bForceDelete
,
4381 VOID
BATableTearRECEntry(
4382 IN OUT PRTMP_ADAPTER pAd
,
4386 #endif // DOT11_N_SUPPORT //
4389 IN PRTMP_ADAPTER pAd
,
4390 OUT PBSS_ENTRY pBss
,
4395 IN USHORT BeaconPeriod
,
4398 IN USHORT CapabilityInfo
,
4400 IN UCHAR SupRateLen
,
4402 IN UCHAR ExtRateLen
,
4403 IN HT_CAPABILITY_IE
*pHtCapability
,
4404 IN ADD_HT_INFO_IE
*pAddHtInfo
, // AP might use this additional ht info IE
4405 IN UCHAR HtCapabilityLen
,
4406 IN UCHAR AddHtInfoLen
,
4407 IN UCHAR NewExtChanOffset
,
4410 IN LARGE_INTEGER TimeStamp
,
4412 IN PEDCA_PARM pEdcaParm
,
4413 IN PQOS_CAPABILITY_PARM pQosCapability
,
4414 IN PQBSS_LOAD_PARM pQbssLoad
,
4415 IN USHORT LengthVIE
,
4416 IN PNDIS_802_11_VARIABLE_IEs pVIE
);
4418 ULONG
BssTableSetEntry(
4419 IN PRTMP_ADAPTER pAd
,
4420 OUT PBSS_TABLE pTab
,
4425 IN USHORT BeaconPeriod
,
4428 IN USHORT CapabilityInfo
,
4430 IN UCHAR SupRateLen
,
4432 IN UCHAR ExtRateLen
,
4433 IN HT_CAPABILITY_IE
*pHtCapability
,
4434 IN ADD_HT_INFO_IE
*pAddHtInfo
, // AP might use this additional ht info IE
4435 IN UCHAR HtCapabilityLen
,
4436 IN UCHAR AddHtInfoLen
,
4437 IN UCHAR NewExtChanOffset
,
4440 IN LARGE_INTEGER TimeStamp
,
4442 IN PEDCA_PARM pEdcaParm
,
4443 IN PQOS_CAPABILITY_PARM pQosCapability
,
4444 IN PQBSS_LOAD_PARM pQbssLoad
,
4445 IN USHORT LengthVIE
,
4446 IN PNDIS_802_11_VARIABLE_IEs pVIE
);
4448 #ifdef DOT11_N_SUPPORT
4449 VOID
BATableInsertEntry(
4450 IN PRTMP_ADAPTER pAd
,
4452 IN USHORT TimeOutValue
,
4453 IN USHORT StartingSeq
,
4456 IN UCHAR OriginatorStatus
,
4457 IN BOOLEAN IsRecipient
);
4459 #ifdef DOT11N_DRAFT3
4460 VOID
Bss2040CoexistTimeOut(
4461 IN PVOID SystemSpecific1
,
4462 IN PVOID FunctionContext
,
4463 IN PVOID SystemSpecific2
,
4464 IN PVOID SystemSpecific3
);
4468 IN PRTMP_ADAPTER pAd
);
4470 ULONG
TriEventTableSetEntry(
4471 IN PRTMP_ADAPTER pAd
,
4472 OUT TRIGGER_EVENT_TAB
*Tab
,
4474 IN HT_CAPABILITY_IE
*pHtCapability
,
4475 IN UCHAR HtCapabilityLen
,
4477 IN UCHAR ChannelNo
);
4479 VOID
TriEventCounterMaintenance(
4480 IN PRTMP_ADAPTER pAd
);
4481 #endif // DOT11N_DRAFT3 //
4482 #endif // DOT11_N_SUPPORT //
4484 VOID
BssTableSsidSort(
4485 IN PRTMP_ADAPTER pAd
,
4486 OUT BSS_TABLE
*OutTab
,
4490 VOID
BssTableSortByRssi(
4491 IN OUT BSS_TABLE
*OutTab
);
4493 VOID
BssCipherParse(
4494 IN OUT PBSS_ENTRY pBss
);
4496 NDIS_STATUS
MlmeQueueInit(
4497 IN MLME_QUEUE
*Queue
);
4499 VOID
MlmeQueueDestroy(
4500 IN MLME_QUEUE
*Queue
);
4502 BOOLEAN
MlmeEnqueue(
4503 IN PRTMP_ADAPTER pAd
,
4509 BOOLEAN
MlmeEnqueueForRecv(
4510 IN PRTMP_ADAPTER pAd
,
4512 IN ULONG TimeStampHigh
,
4513 IN ULONG TimeStampLow
,
4522 BOOLEAN
MlmeDequeue(
4523 IN MLME_QUEUE
*Queue
,
4524 OUT MLME_QUEUE_ELEM
**Elem
);
4526 VOID
MlmeRestartStateMachine(
4527 IN PRTMP_ADAPTER pAd
);
4529 BOOLEAN
MlmeQueueEmpty(
4530 IN MLME_QUEUE
*Queue
);
4532 BOOLEAN
MlmeQueueFull(
4533 IN MLME_QUEUE
*Queue
);
4535 BOOLEAN
MsgTypeSubst(
4536 IN PRTMP_ADAPTER pAd
,
4537 IN PFRAME_802_11 pFrame
,
4541 VOID
StateMachineInit(
4542 IN STATE_MACHINE
*Sm
,
4543 IN STATE_MACHINE_FUNC Trans
[],
4546 IN STATE_MACHINE_FUNC DefFunc
,
4550 VOID
StateMachineSetAction(
4551 IN STATE_MACHINE
*S
,
4554 IN STATE_MACHINE_FUNC F
);
4556 VOID
StateMachinePerformAction(
4557 IN PRTMP_ADAPTER pAd
,
4558 IN STATE_MACHINE
*S
,
4559 IN MLME_QUEUE_ELEM
*Elem
);
4562 IN PRTMP_ADAPTER pAd
,
4563 IN MLME_QUEUE_ELEM
*Elem
);
4565 VOID
AssocStateMachineInit(
4566 IN PRTMP_ADAPTER pAd
,
4567 IN STATE_MACHINE
*Sm
,
4568 OUT STATE_MACHINE_FUNC Trans
[]);
4570 VOID
ReassocTimeout(
4571 IN PVOID SystemSpecific1
,
4572 IN PVOID FunctionContext
,
4573 IN PVOID SystemSpecific2
,
4574 IN PVOID SystemSpecific3
);
4577 IN PVOID SystemSpecific1
,
4578 IN PVOID FunctionContext
,
4579 IN PVOID SystemSpecific2
,
4580 IN PVOID SystemSpecific3
);
4582 VOID
DisassocTimeout(
4583 IN PVOID SystemSpecific1
,
4584 IN PVOID FunctionContext
,
4585 IN PVOID SystemSpecific2
,
4586 IN PVOID SystemSpecific3
);
4588 //----------------------------------------------
4589 VOID
MlmeDisassocReqAction(
4590 IN PRTMP_ADAPTER pAd
,
4591 IN MLME_QUEUE_ELEM
*Elem
);
4593 VOID
MlmeAssocReqAction(
4594 IN PRTMP_ADAPTER pAd
,
4595 IN MLME_QUEUE_ELEM
*Elem
);
4597 VOID
MlmeReassocReqAction(
4598 IN PRTMP_ADAPTER pAd
,
4599 IN MLME_QUEUE_ELEM
*Elem
);
4601 VOID
MlmeDisassocReqAction(
4602 IN PRTMP_ADAPTER pAd
,
4603 IN MLME_QUEUE_ELEM
*Elem
);
4605 VOID
PeerAssocRspAction(
4606 IN PRTMP_ADAPTER pAd
,
4607 IN MLME_QUEUE_ELEM
*Elem
);
4609 VOID
PeerReassocRspAction(
4610 IN PRTMP_ADAPTER pAd
,
4611 IN MLME_QUEUE_ELEM
*Elem
);
4613 VOID
PeerDisassocAction(
4614 IN PRTMP_ADAPTER pAd
,
4615 IN MLME_QUEUE_ELEM
*Elem
);
4617 VOID
DisassocTimeoutAction(
4618 IN PRTMP_ADAPTER pAd
,
4619 IN MLME_QUEUE_ELEM
*Elem
);
4621 VOID
AssocTimeoutAction(
4622 IN PRTMP_ADAPTER pAd
,
4623 IN MLME_QUEUE_ELEM
*Elem
);
4625 VOID
ReassocTimeoutAction(
4626 IN PRTMP_ADAPTER pAd
,
4627 IN MLME_QUEUE_ELEM
*Elem
);
4630 IN PRTMP_ADAPTER pAd
,
4633 VOID
SwitchBetweenWepAndCkip(
4634 IN PRTMP_ADAPTER pAd
);
4636 VOID
InvalidStateWhenAssoc(
4637 IN PRTMP_ADAPTER pAd
,
4638 IN MLME_QUEUE_ELEM
*Elem
);
4640 VOID
InvalidStateWhenReassoc(
4641 IN PRTMP_ADAPTER pAd
,
4642 IN MLME_QUEUE_ELEM
*Elem
);
4644 VOID
InvalidStateWhenDisassociate(
4645 IN PRTMP_ADAPTER pAd
,
4646 IN MLME_QUEUE_ELEM
*Elem
);
4650 IN PRTMP_ADAPTER pAd
);
4652 VOID
ComposeNullFrame(
4653 IN PRTMP_ADAPTER pAd
);
4656 IN PRTMP_ADAPTER pAd
,
4658 IN USHORT CapabilityInfo
,
4661 IN UCHAR SupRateLen
,
4663 IN UCHAR ExtRateLen
,
4664 IN PEDCA_PARM pEdcaParm
,
4665 IN HT_CAPABILITY_IE
*pHtCapability
,
4666 IN UCHAR HtCapabilityLen
,
4667 IN ADD_HT_INFO_IE
*pAddHtInfo
);
4669 VOID
AuthStateMachineInit(
4670 IN PRTMP_ADAPTER pAd
,
4671 IN PSTATE_MACHINE sm
,
4672 OUT STATE_MACHINE_FUNC Trans
[]);
4675 IN PVOID SystemSpecific1
,
4676 IN PVOID FunctionContext
,
4677 IN PVOID SystemSpecific2
,
4678 IN PVOID SystemSpecific3
);
4680 VOID
MlmeAuthReqAction(
4681 IN PRTMP_ADAPTER pAd
,
4682 IN MLME_QUEUE_ELEM
*Elem
);
4684 VOID
PeerAuthRspAtSeq2Action(
4685 IN PRTMP_ADAPTER pAd
,
4686 IN MLME_QUEUE_ELEM
*Elem
);
4688 VOID
PeerAuthRspAtSeq4Action(
4689 IN PRTMP_ADAPTER pAd
,
4690 IN MLME_QUEUE_ELEM
*Elem
);
4692 VOID
AuthTimeoutAction(
4693 IN PRTMP_ADAPTER pAd
,
4694 IN MLME_QUEUE_ELEM
*Elem
);
4697 IN PRTMP_ADAPTER pAd
,
4700 VOID
MlmeDeauthReqAction(
4701 IN PRTMP_ADAPTER pAd
,
4702 IN MLME_QUEUE_ELEM
*Elem
);
4704 VOID
InvalidStateWhenAuth(
4705 IN PRTMP_ADAPTER pAd
,
4706 IN MLME_QUEUE_ELEM
*Elem
);
4708 //=============================================
4710 VOID
AuthRspStateMachineInit(
4711 IN PRTMP_ADAPTER pAd
,
4712 IN PSTATE_MACHINE Sm
,
4713 IN STATE_MACHINE_FUNC Trans
[]);
4715 VOID
PeerDeauthAction(
4716 IN PRTMP_ADAPTER pAd
,
4717 IN MLME_QUEUE_ELEM
*Elem
);
4719 VOID
PeerAuthSimpleRspGenAndSend(
4720 IN PRTMP_ADAPTER pAd
,
4721 IN PHEADER_802_11 pHdr80211
,
4728 // Private routines in dls.c
4731 #ifdef CONFIG_STA_SUPPORT
4732 #ifdef QOS_DLS_SUPPORT
4733 void DlsStateMachineInit(
4734 IN PRTMP_ADAPTER pAd
,
4735 IN STATE_MACHINE
*Sm
,
4736 OUT STATE_MACHINE_FUNC Trans
[]);
4738 VOID
MlmeDlsReqAction(
4739 IN PRTMP_ADAPTER pAd
,
4740 IN MLME_QUEUE_ELEM
*Elem
);
4742 VOID
PeerDlsReqAction(
4743 IN PRTMP_ADAPTER pAd
,
4744 IN MLME_QUEUE_ELEM
*Elem
);
4746 VOID
PeerDlsRspAction(
4747 IN PRTMP_ADAPTER pAd
,
4748 IN MLME_QUEUE_ELEM
*Elem
);
4750 VOID
MlmeDlsTearDownAction(
4751 IN PRTMP_ADAPTER pAd
,
4752 IN MLME_QUEUE_ELEM
*Elem
);
4754 VOID
PeerDlsTearDownAction(
4755 IN PRTMP_ADAPTER pAd
,
4756 IN MLME_QUEUE_ELEM
*Elem
);
4758 VOID
RTMPCheckDLSTimeOut(
4759 IN PRTMP_ADAPTER pAd
);
4761 BOOLEAN
RTMPRcvFrameDLSCheck(
4762 IN PRTMP_ADAPTER pAd
,
4763 IN PHEADER_802_11 pHeader
,
4765 IN PRT28XX_RXD_STRUC pRxD
);
4767 INT
RTMPCheckDLSFrame(
4768 IN PRTMP_ADAPTER pAd
,
4771 VOID
RTMPSendDLSTearDownFrame(
4772 IN PRTMP_ADAPTER pAd
,
4775 NDIS_STATUS
RTMPSendSTAKeyRequest(
4776 IN PRTMP_ADAPTER pAd
,
4779 NDIS_STATUS
RTMPSendSTAKeyHandShake(
4780 IN PRTMP_ADAPTER pAd
,
4783 VOID
DlsTimeoutAction(
4784 IN PVOID SystemSpecific1
,
4785 IN PVOID FunctionContext
,
4786 IN PVOID SystemSpecific2
,
4787 IN PVOID SystemSpecific3
);
4789 BOOLEAN
MlmeDlsReqSanity(
4790 IN PRTMP_ADAPTER pAd
,
4793 OUT PRT_802_11_DLS
*pDLS
,
4794 OUT PUSHORT pReason
);
4796 INT
Set_DlsEntryInfo_Display_Proc(
4797 IN PRTMP_ADAPTER pAd
,
4800 MAC_TABLE_ENTRY
*MacTableInsertDlsEntry(
4801 IN PRTMP_ADAPTER pAd
,
4803 IN UINT DlsEntryIdx
);
4805 BOOLEAN
MacTableDeleteDlsEntry(
4806 IN PRTMP_ADAPTER pAd
,
4810 MAC_TABLE_ENTRY
*DlsEntryTableLookup(
4811 IN PRTMP_ADAPTER pAd
,
4813 IN BOOLEAN bResetIdelCount
);
4815 MAC_TABLE_ENTRY
*DlsEntryTableLookupByWcid(
4816 IN PRTMP_ADAPTER pAd
,
4819 IN BOOLEAN bResetIdelCount
);
4821 INT
Set_DlsAddEntry_Proc(
4822 IN PRTMP_ADAPTER pAd
,
4825 INT
Set_DlsTearDownEntry_Proc(
4826 IN PRTMP_ADAPTER pAd
,
4828 #endif // QOS_DLS_SUPPORT //
4829 #endif // CONFIG_STA_SUPPORT //
4831 #ifdef QOS_DLS_SUPPORT
4832 BOOLEAN
PeerDlsReqSanity(
4833 IN PRTMP_ADAPTER pAd
,
4838 OUT USHORT
*pCapabilityInfo
,
4839 OUT USHORT
*pDlsTimeout
,
4840 OUT UCHAR
*pRatesLen
,
4842 OUT UCHAR
*pHtCapabilityLen
,
4843 OUT HT_CAPABILITY_IE
*pHtCapability
);
4845 BOOLEAN
PeerDlsRspSanity(
4846 IN PRTMP_ADAPTER pAd
,
4851 OUT USHORT
*pCapabilityInfo
,
4852 OUT USHORT
*pStatus
,
4853 OUT UCHAR
*pRatesLen
,
4855 OUT UCHAR
*pHtCapabilityLen
,
4856 OUT HT_CAPABILITY_IE
*pHtCapability
);
4858 BOOLEAN
PeerDlsTearDownSanity(
4859 IN PRTMP_ADAPTER pAd
,
4864 OUT USHORT
*pReason
);
4865 #endif // QOS_DLS_SUPPORT //
4867 //========================================
4869 VOID
SyncStateMachineInit(
4870 IN PRTMP_ADAPTER pAd
,
4871 IN STATE_MACHINE
*Sm
,
4872 OUT STATE_MACHINE_FUNC Trans
[]);
4875 IN PVOID SystemSpecific1
,
4876 IN PVOID FunctionContext
,
4877 IN PVOID SystemSpecific2
,
4878 IN PVOID SystemSpecific3
);
4881 IN PVOID SystemSpecific1
,
4882 IN PVOID FunctionContext
,
4883 IN PVOID SystemSpecific2
,
4884 IN PVOID SystemSpecific3
);
4886 VOID
MlmeScanReqAction(
4887 IN PRTMP_ADAPTER pAd
,
4888 IN MLME_QUEUE_ELEM
*Elem
);
4890 VOID
InvalidStateWhenScan(
4891 IN PRTMP_ADAPTER pAd
,
4892 IN MLME_QUEUE_ELEM
*Elem
);
4894 VOID
InvalidStateWhenJoin(
4895 IN PRTMP_ADAPTER pAd
,
4896 IN MLME_QUEUE_ELEM
*Elem
);
4898 VOID
InvalidStateWhenStart(
4899 IN PRTMP_ADAPTER pAd
,
4900 IN MLME_QUEUE_ELEM
*Elem
);
4903 IN PRTMP_ADAPTER pAd
,
4904 IN MLME_QUEUE_ELEM
*Elem
);
4906 VOID
EnqueueProbeRequest(
4907 IN PRTMP_ADAPTER pAd
);
4909 BOOLEAN
ScanRunning(
4910 IN PRTMP_ADAPTER pAd
);
4911 //=========================================
4914 IN PRTMP_ADAPTER pAd
,
4915 IN STATE_MACHINE
*S
,
4916 OUT STATE_MACHINE_FUNC Trans
[]);
4918 VOID
MlmeCntlMachinePerformAction(
4919 IN PRTMP_ADAPTER pAd
,
4920 IN STATE_MACHINE
*S
,
4921 IN MLME_QUEUE_ELEM
*Elem
);
4924 IN PRTMP_ADAPTER pAd
,
4925 IN MLME_QUEUE_ELEM
*Elem
);
4927 VOID
CntlOidScanProc(
4928 IN PRTMP_ADAPTER pAd
,
4929 IN MLME_QUEUE_ELEM
*Elem
);
4931 VOID
CntlOidSsidProc(
4932 IN PRTMP_ADAPTER pAd
,
4933 IN MLME_QUEUE_ELEM
* Elem
);
4935 VOID
CntlOidRTBssidProc(
4936 IN PRTMP_ADAPTER pAd
,
4937 IN MLME_QUEUE_ELEM
* Elem
);
4939 VOID
CntlMlmeRoamingProc(
4940 IN PRTMP_ADAPTER pAd
,
4941 IN MLME_QUEUE_ELEM
* Elem
);
4943 VOID
CntlWaitDisassocProc(
4944 IN PRTMP_ADAPTER pAd
,
4945 IN MLME_QUEUE_ELEM
*Elem
);
4947 VOID
CntlWaitJoinProc(
4948 IN PRTMP_ADAPTER pAd
,
4949 IN MLME_QUEUE_ELEM
*Elem
);
4951 VOID
CntlWaitReassocProc(
4952 IN PRTMP_ADAPTER pAd
,
4953 IN MLME_QUEUE_ELEM
*Elem
);
4955 VOID
CntlWaitStartProc(
4956 IN PRTMP_ADAPTER pAd
,
4957 IN MLME_QUEUE_ELEM
*Elem
);
4959 VOID
CntlWaitAuthProc(
4960 IN PRTMP_ADAPTER pAd
,
4961 IN MLME_QUEUE_ELEM
*Elem
);
4963 VOID
CntlWaitAuthProc2(
4964 IN PRTMP_ADAPTER pAd
,
4965 IN MLME_QUEUE_ELEM
*Elem
);
4967 VOID
CntlWaitAssocProc(
4968 IN PRTMP_ADAPTER pAd
,
4969 IN MLME_QUEUE_ELEM
*Elem
);
4971 #ifdef QOS_DLS_SUPPORT
4972 VOID
CntlOidDLSSetupProc(
4973 IN PRTMP_ADAPTER pAd
,
4974 IN MLME_QUEUE_ELEM
*Elem
);
4975 #endif // QOS_DLS_SUPPORT //
4978 IN PRTMP_ADAPTER pAd
,
4982 IN PRTMP_ADAPTER pAd
,
4983 IN BOOLEAN IsReqFromAP
);
4985 VOID
IterateOnBssTab(
4986 IN PRTMP_ADAPTER pAd
);
4988 VOID
IterateOnBssTab2(
4989 IN PRTMP_ADAPTER pAd
);;
4992 IN PRTMP_ADAPTER pAd
,
4993 IN OUT MLME_JOIN_REQ_STRUCT
*JoinReq
,
4997 IN PRTMP_ADAPTER pAd
,
4998 IN OUT MLME_ASSOC_REQ_STRUCT
*AssocReq
,
5000 IN USHORT CapabilityInfo
,
5002 IN USHORT ListenIntv
);
5005 IN PRTMP_ADAPTER pAd
,
5006 IN OUT MLME_SCAN_REQ_STRUCT
*ScanReq
,
5012 VOID
DisassocParmFill(
5013 IN PRTMP_ADAPTER pAd
,
5014 IN OUT MLME_DISASSOC_REQ_STRUCT
*DisassocReq
,
5019 IN PRTMP_ADAPTER pAd
,
5020 IN OUT MLME_START_REQ_STRUCT
*StartReq
,
5025 IN PRTMP_ADAPTER pAd
,
5026 IN OUT MLME_AUTH_REQ_STRUCT
*AuthReq
,
5031 IN PRTMP_ADAPTER pAd
);
5033 VOID
EnqueueBeaconFrame(
5034 IN PRTMP_ADAPTER pAd
);
5036 VOID
MlmeJoinReqAction(
5037 IN PRTMP_ADAPTER pAd
,
5038 IN MLME_QUEUE_ELEM
*Elem
);
5040 VOID
MlmeScanReqAction(
5041 IN PRTMP_ADAPTER pAd
,
5042 IN MLME_QUEUE_ELEM
*Elem
);
5044 VOID
MlmeStartReqAction(
5045 IN PRTMP_ADAPTER pAd
,
5046 IN MLME_QUEUE_ELEM
*Elem
);
5048 VOID
ScanTimeoutAction(
5049 IN PRTMP_ADAPTER pAd
,
5050 IN MLME_QUEUE_ELEM
*Elem
);
5052 VOID
BeaconTimeoutAtJoinAction(
5053 IN PRTMP_ADAPTER pAd
,
5054 IN MLME_QUEUE_ELEM
*Elem
);
5056 VOID
PeerBeaconAtScanAction(
5057 IN PRTMP_ADAPTER pAd
,
5058 IN MLME_QUEUE_ELEM
*Elem
);
5060 VOID
PeerBeaconAtJoinAction(
5061 IN PRTMP_ADAPTER pAd
,
5062 IN MLME_QUEUE_ELEM
*Elem
);
5065 IN PRTMP_ADAPTER pAd
,
5066 IN MLME_QUEUE_ELEM
*Elem
);
5068 VOID
PeerProbeReqAction(
5069 IN PRTMP_ADAPTER pAd
,
5070 IN MLME_QUEUE_ELEM
*Elem
);
5072 VOID
ScanNextChannel(
5073 IN PRTMP_ADAPTER pAd
);
5075 ULONG
MakeIbssBeacon(
5076 IN PRTMP_ADAPTER pAd
);
5078 VOID
CCXAdjacentAPReport(
5079 IN PRTMP_ADAPTER pAd
);
5081 BOOLEAN
MlmeScanReqSanity(
5082 IN PRTMP_ADAPTER pAd
,
5088 OUT UCHAR
*ScanType
);
5090 BOOLEAN
PeerBeaconAndProbeRspSanity(
5091 IN PRTMP_ADAPTER pAd
,
5094 IN UCHAR MsgChannel
,
5098 OUT UCHAR
*pSsidLen
,
5099 OUT UCHAR
*pBssType
,
5100 OUT USHORT
*pBeaconPeriod
,
5101 OUT UCHAR
*pChannel
,
5102 OUT UCHAR
*pNewChannel
,
5103 OUT LARGE_INTEGER
*pTimestamp
,
5104 OUT CF_PARM
*pCfParm
,
5105 OUT USHORT
*pAtimWin
,
5106 OUT USHORT
*pCapabilityInfo
,
5108 OUT UCHAR
*pDtimCount
,
5109 OUT UCHAR
*pDtimPeriod
,
5110 OUT UCHAR
*pBcastFlag
,
5111 OUT UCHAR
*pMessageToMe
,
5112 OUT UCHAR SupRate
[],
5113 OUT UCHAR
*pSupRateLen
,
5114 OUT UCHAR ExtRate
[],
5115 OUT UCHAR
*pExtRateLen
,
5116 OUT UCHAR
*pCkipFlag
,
5117 OUT UCHAR
*pAironetCellPowerLimit
,
5118 OUT PEDCA_PARM pEdcaParm
,
5119 OUT PQBSS_LOAD_PARM pQbssLoad
,
5120 OUT PQOS_CAPABILITY_PARM pQosCapability
,
5121 OUT ULONG
*pRalinkIe
,
5122 OUT UCHAR
*pHtCapabilityLen
,
5123 #ifdef CONFIG_STA_SUPPORT
5124 OUT UCHAR
*pPreNHtCapabilityLen
,
5125 #endif // CONFIG_STA_SUPPORT //
5126 OUT HT_CAPABILITY_IE
*pHtCapability
,
5127 OUT UCHAR
*AddHtInfoLen
,
5128 OUT ADD_HT_INFO_IE
*AddHtInfo
,
5129 OUT UCHAR
*NewExtChannel
,
5130 OUT USHORT
*LengthVIE
,
5131 OUT PNDIS_802_11_VARIABLE_IEs pVIE
);
5133 BOOLEAN
PeerAddBAReqActionSanity(
5134 IN PRTMP_ADAPTER pAd
,
5139 BOOLEAN
PeerAddBARspActionSanity(
5140 IN PRTMP_ADAPTER pAd
,
5144 BOOLEAN
PeerDelBAActionSanity(
5145 IN PRTMP_ADAPTER pAd
,
5150 BOOLEAN
MlmeAssocReqSanity(
5151 IN PRTMP_ADAPTER pAd
,
5155 OUT USHORT
*CapabilityInfo
,
5157 OUT USHORT
*ListenIntv
);
5159 BOOLEAN
MlmeAuthReqSanity(
5160 IN PRTMP_ADAPTER pAd
,
5167 BOOLEAN
MlmeStartReqSanity(
5168 IN PRTMP_ADAPTER pAd
,
5172 OUT UCHAR
*Ssidlen
);
5174 BOOLEAN
PeerAuthSanity(
5175 IN PRTMP_ADAPTER pAd
,
5182 OUT CHAR ChlgText
[]);
5184 BOOLEAN
PeerAssocRspSanity(
5185 IN PRTMP_ADAPTER pAd
,
5189 OUT USHORT
*pCapabilityInfo
,
5190 OUT USHORT
*pStatus
,
5192 OUT UCHAR SupRate
[],
5193 OUT UCHAR
*pSupRateLen
,
5194 OUT UCHAR ExtRate
[],
5195 OUT UCHAR
*pExtRateLen
,
5196 OUT HT_CAPABILITY_IE
*pHtCapability
,
5197 OUT ADD_HT_INFO_IE
*pAddHtInfo
, // AP might use this additional ht info IE
5198 OUT UCHAR
*pHtCapabilityLen
,
5199 OUT UCHAR
*pAddHtInfoLen
,
5200 OUT UCHAR
*pNewExtChannelOffset
,
5201 OUT PEDCA_PARM pEdcaParm
,
5202 OUT UCHAR
*pCkipFlag
);
5204 BOOLEAN
PeerDisassocSanity(
5205 IN PRTMP_ADAPTER pAd
,
5209 OUT USHORT
*Reason
);
5211 BOOLEAN
PeerWpaMessageSanity(
5212 IN PRTMP_ADAPTER pAd
,
5213 IN PEAPOL_PACKET pMsg
,
5216 IN MAC_TABLE_ENTRY
*pEntry
);
5218 BOOLEAN
PeerDeauthSanity(
5219 IN PRTMP_ADAPTER pAd
,
5223 OUT USHORT
*Reason
);
5225 BOOLEAN
PeerProbeReqSanity(
5226 IN PRTMP_ADAPTER pAd
,
5231 OUT UCHAR
*pSsidLen
);
5237 OUT UCHAR
*BcastFlag
,
5238 OUT UCHAR
*DtimCount
,
5239 OUT UCHAR
*DtimPeriod
,
5240 OUT UCHAR
*MessageToMe
);
5242 UCHAR
ChannelSanity(
5243 IN PRTMP_ADAPTER pAd
,
5246 NDIS_802_11_NETWORK_TYPE
NetworkTypeInUseSanity(
5247 IN PBSS_ENTRY pBss
);
5249 BOOLEAN
MlmeDelBAReqSanity(
5250 IN PRTMP_ADAPTER pAd
,
5254 BOOLEAN
MlmeAddBAReqSanity(
5255 IN PRTMP_ADAPTER pAd
,
5260 ULONG
MakeOutgoingFrame(
5262 OUT ULONG
*Length
, ...);
5265 IN PRTMP_ADAPTER pAd
,
5269 IN PRTMP_ADAPTER pAd
);
5271 VOID
AsicUpdateAutoFallBackTable(
5272 IN PRTMP_ADAPTER pAd
,
5275 VOID
MlmePeriodicExec(
5276 IN PVOID SystemSpecific1
,
5277 IN PVOID FunctionContext
,
5278 IN PVOID SystemSpecific2
,
5279 IN PVOID SystemSpecific3
);
5282 IN PVOID SystemSpecific1
,
5283 IN PVOID FunctionContext
,
5284 IN PVOID SystemSpecific2
,
5285 IN PVOID SystemSpecific3
);
5288 IN PVOID SystemSpecific1
,
5289 IN PVOID FunctionContext
,
5290 IN PVOID SystemSpecific2
,
5291 IN PVOID SystemSpecific3
);
5293 VOID
STAMlmePeriodicExec(
5297 IN PRTMP_ADAPTER pAd
);
5299 VOID
MlmeAutoReconnectLastSSID(
5300 IN PRTMP_ADAPTER pAd
);
5302 BOOLEAN
MlmeValidateSSID(
5306 VOID
MlmeCheckForRoaming(
5307 IN PRTMP_ADAPTER pAd
,
5310 VOID
MlmeCheckForFastRoaming(
5311 IN PRTMP_ADAPTER pAd
,
5314 VOID
MlmeDynamicTxRateSwitching(
5315 IN PRTMP_ADAPTER pAd
);
5318 IN PRTMP_ADAPTER pAd
,
5319 IN PMAC_TABLE_ENTRY pEntry
,
5320 IN PRTMP_TX_RATE_SWITCH pTxRate
);
5322 VOID
MlmeSelectTxRateTable(
5323 IN PRTMP_ADAPTER pAd
,
5324 IN PMAC_TABLE_ENTRY pEntry
,
5326 IN PUCHAR pTableSize
,
5327 IN PUCHAR pInitTxRateIdx
);
5329 VOID
MlmeCalculateChannelQuality(
5330 IN PRTMP_ADAPTER pAd
,
5333 VOID
MlmeCheckPsmChange(
5334 IN PRTMP_ADAPTER pAd
,
5338 IN PRTMP_ADAPTER pAd
,
5341 VOID
MlmeSetTxPreamble(
5342 IN PRTMP_ADAPTER pAd
,
5343 IN USHORT TxPreamble
);
5345 VOID
UpdateBasicRateBitmap(
5346 IN PRTMP_ADAPTER pAd
);
5348 VOID
MlmeUpdateTxRates(
5349 IN PRTMP_ADAPTER pAd
,
5353 #ifdef DOT11_N_SUPPORT
5354 VOID
MlmeUpdateHtTxRates(
5355 IN PRTMP_ADAPTER pAd
,
5357 #endif // DOT11_N_SUPPORT //
5359 VOID
RTMPCheckRates(
5360 IN PRTMP_ADAPTER pAd
,
5361 IN OUT UCHAR SupRate
[],
5362 IN OUT UCHAR
*SupRateLen
);
5364 #ifdef CONFIG_STA_SUPPORT
5365 BOOLEAN
RTMPCheckChannel(
5366 IN PRTMP_ADAPTER pAd
,
5367 IN UCHAR CentralChannel
,
5369 #endif // CONFIG_STA_SUPPORT //
5371 BOOLEAN
RTMPCheckHt(
5372 IN PRTMP_ADAPTER pAd
,
5374 IN OUT HT_CAPABILITY_IE
*pHtCapability
,
5375 IN OUT ADD_HT_INFO_IE
*pAddHtInfo
);
5377 VOID
StaQuickResponeForRateUpExec(
5378 IN PVOID SystemSpecific1
,
5379 IN PVOID FunctionContext
,
5380 IN PVOID SystemSpecific2
,
5381 IN PVOID SystemSpecific3
);
5383 VOID
AsicBbpTuning1(
5384 IN PRTMP_ADAPTER pAd
);
5386 VOID
AsicBbpTuning2(
5387 IN PRTMP_ADAPTER pAd
);
5389 VOID
RTMPUpdateMlmeRate(
5390 IN PRTMP_ADAPTER pAd
);
5393 IN PRTMP_ADAPTER pAd
,
5398 VOID
AsicEvaluateRxAnt(
5399 IN PRTMP_ADAPTER pAd
);
5401 VOID
AsicRxAntEvalTimeout(
5402 IN PVOID SystemSpecific1
,
5403 IN PVOID FunctionContext
,
5404 IN PVOID SystemSpecific2
,
5405 IN PVOID SystemSpecific3
);
5407 VOID
APSDPeriodicExec(
5408 IN PVOID SystemSpecific1
,
5409 IN PVOID FunctionContext
,
5410 IN PVOID SystemSpecific2
,
5411 IN PVOID SystemSpecific3
);
5413 BOOLEAN
RTMPCheckEntryEnableAutoRateSwitch(
5414 IN PRTMP_ADAPTER pAd
,
5415 IN PMAC_TABLE_ENTRY pEntry
);
5417 UCHAR
RTMPStaFixedTxMode(
5418 IN PRTMP_ADAPTER pAd
,
5419 IN PMAC_TABLE_ENTRY pEntry
);
5421 VOID
RTMPUpdateLegacyTxSetting(
5422 UCHAR fixed_tx_mode
,
5423 PMAC_TABLE_ENTRY pEntry
);
5425 BOOLEAN
RTMPAutoRateSwitchCheck(
5426 IN PRTMP_ADAPTER pAd
);
5428 NDIS_STATUS
MlmeInit(
5429 IN PRTMP_ADAPTER pAd
);
5432 IN PRTMP_ADAPTER pAd
);
5435 IN PRTMP_ADAPTER pAd
);
5437 VOID
MlmeResetRalinkCounters(
5438 IN PRTMP_ADAPTER pAd
);
5440 VOID
BuildChannelList(
5441 IN PRTMP_ADAPTER pAd
);
5444 IN PRTMP_ADAPTER pAd
);
5447 IN PRTMP_ADAPTER pAd
,
5450 VOID
ChangeToCellPowerLimit(
5451 IN PRTMP_ADAPTER pAd
,
5452 IN UCHAR AironetCellPowerLimit
);
5455 IN PRTMP_ADAPTER pAd
,
5459 IN PRTMP_ADAPTER pAd
,
5463 IN PRTMP_ADAPTER pAd
);
5466 IN PRTMP_ADAPTER pAd
,
5471 IN PRTMP_ADAPTER pAd
);
5474 IN PRTMP_ADAPTER pAd
);
5477 IN PRTMP_ADAPTER pAd
);
5479 USHORT
RTMP_EEPROM_READ16(
5480 IN PRTMP_ADAPTER pAd
,
5483 VOID
RTMP_EEPROM_WRITE16(
5484 IN PRTMP_ADAPTER pAd
,
5489 // Prototypes of function definition in rtmp_tkip.c
5491 VOID
RTMPInitTkipEngine(
5492 IN PRTMP_ADAPTER pAd
,
5501 VOID
RTMPInitMICEngine(
5502 IN PRTMP_ADAPTER pAd
,
5506 IN UCHAR UserPriority
,
5509 BOOLEAN
RTMPTkipCompareMICValue(
5510 IN PRTMP_ADAPTER pAd
,
5515 IN UCHAR UserPriority
,
5518 VOID
RTMPCalculateMICValue(
5519 IN PRTMP_ADAPTER pAd
,
5520 IN PNDIS_PACKET pPacket
,
5522 IN PCIPHER_KEY pKey
,
5525 BOOLEAN
RTMPTkipCompareMICValueWithLLC(
5526 IN PRTMP_ADAPTER pAd
,
5534 VOID
RTMPTkipAppendByte(
5535 IN PTKIP_KEY_INFO pTkip
,
5538 VOID
RTMPTkipAppend(
5539 IN PTKIP_KEY_INFO pTkip
,
5543 VOID
RTMPTkipGetMIC(
5544 IN PTKIP_KEY_INFO pTkip
);
5546 BOOLEAN
RTMPSoftDecryptTKIP(
5547 IN PRTMP_ADAPTER pAd
,
5549 IN ULONG DataByteCnt
,
5550 IN UCHAR UserPriority
,
5551 IN PCIPHER_KEY pWpaKey
);
5553 BOOLEAN
RTMPSoftDecryptAES(
5554 IN PRTMP_ADAPTER pAd
,
5556 IN ULONG DataByteCnt
,
5557 IN PCIPHER_KEY pWpaKey
);
5560 // Prototypes of function definition in cmm_info.c
5562 NDIS_STATUS
RTMPWPARemoveKeyProc(
5563 IN PRTMP_ADAPTER pAd
,
5566 VOID
RTMPWPARemoveAllKeys(
5567 IN PRTMP_ADAPTER pAd
);
5569 BOOLEAN
RTMPCheckStrPrintAble(
5573 VOID
RTMPSetPhyMode(
5574 IN PRTMP_ADAPTER pAd
,
5577 VOID
RTMPUpdateHTIE(
5578 IN RT_HT_CAPABILITY
*pRtHt
,
5580 OUT HT_CAPABILITY_IE
*pHtCapability
,
5581 OUT ADD_HT_INFO_IE
*pAddHtInfo
);
5583 VOID
RTMPAddWcidAttributeEntry(
5584 IN PRTMP_ADAPTER pAd
,
5588 IN MAC_TABLE_ENTRY
*pEntry
);
5590 CHAR
*GetEncryptType(
5596 VOID
RTMPIoctlGetSiteSurvey(
5597 IN PRTMP_ADAPTER pAdapter
,
5598 IN
struct iwreq
*wrq
);
5600 VOID
RTMPIoctlGetMacTable(
5601 IN PRTMP_ADAPTER pAd
,
5602 IN
struct iwreq
*wrq
);
5604 VOID
RTMPIndicateWPA2Status(
5605 IN PRTMP_ADAPTER pAdapter
);
5607 VOID
RTMPOPModeSwitching(
5608 IN PRTMP_ADAPTER pAd
);
5610 #ifdef CONFIG_STA_SUPPORT
5611 VOID
RTMPAddBSSIDCipher(
5612 IN PRTMP_ADAPTER pAd
,
5614 IN PNDIS_802_11_KEY pKey
,
5615 IN UCHAR CipherAlg
);
5616 #endif // CONFIG_STA_SUPPORT //
5618 #ifdef DOT11_N_SUPPORT
5620 IN PRTMP_ADAPTER pAd
,
5621 IN OID_SET_HT_PHYMODE
*pHTPhyMode
);
5623 VOID
RTMPSetIndividualHT(
5624 IN PRTMP_ADAPTER pAd
,
5626 #endif // DOT11_N_SUPPORT //
5628 VOID
RTMPSendWirelessEvent(
5629 IN PRTMP_ADAPTER pAd
,
5630 IN USHORT Event_flag
,
5635 VOID
NICUpdateCntlCounters(
5636 IN PRTMP_ADAPTER pAd
,
5637 IN PHEADER_802_11 pHeader
,
5639 IN PRXWI_STRUC pRxWI
);
5641 // prototype in wpa.c
5643 BOOLEAN
WpaMsgTypeSubst(
5647 VOID
WpaPskStateMachineInit(
5648 IN PRTMP_ADAPTER pAd
,
5649 IN STATE_MACHINE
*S
,
5650 OUT STATE_MACHINE_FUNC Trans
[]);
5652 VOID
WpaEAPOLKeyAction(
5653 IN PRTMP_ADAPTER pAd
,
5654 IN MLME_QUEUE_ELEM
*Elem
);
5656 VOID
WpaPairMsg1Action(
5657 IN PRTMP_ADAPTER pAd
,
5658 IN MLME_QUEUE_ELEM
*Elem
);
5660 VOID
WpaPairMsg3Action(
5661 IN PRTMP_ADAPTER pAd
,
5662 IN MLME_QUEUE_ELEM
*Elem
);
5664 VOID
WpaGroupMsg1Action(
5665 IN PRTMP_ADAPTER pAd
,
5666 IN MLME_QUEUE_ELEM
*Elem
);
5668 VOID
WpaMacHeaderInit(
5669 IN PRTMP_ADAPTER pAd
,
5670 IN OUT PHEADER_802_11 pHdr80211
,
5674 VOID
Wpa2PairMsg1Action(
5675 IN PRTMP_ADAPTER pAd
,
5676 IN MLME_QUEUE_ELEM
*Elem
);
5678 VOID
Wpa2PairMsg3Action(
5679 IN PRTMP_ADAPTER pAd
,
5680 IN MLME_QUEUE_ELEM
*Elem
);
5682 BOOLEAN
ParseKeyData(
5683 IN PRTMP_ADAPTER pAd
,
5685 IN UCHAR KeyDataLen
,
5686 IN UCHAR bPairewise
);
5688 VOID
RTMPToWirelessSta(
5689 IN PRTMP_ADAPTER pAd
,
5690 IN PUCHAR pHeader802_3
,
5694 IN BOOLEAN is4wayFrame
);
5722 IN PRTMP_ADAPTER pAd
,
5732 IN PRTMP_ADAPTER pAd
,
5737 // prototype in aironet.c
5739 VOID
AironetStateMachineInit(
5740 IN PRTMP_ADAPTER pAd
,
5741 IN STATE_MACHINE
*S
,
5742 OUT STATE_MACHINE_FUNC Trans
[]);
5744 VOID
AironetMsgAction(
5745 IN PRTMP_ADAPTER pAd
,
5746 IN MLME_QUEUE_ELEM
*Elem
);
5748 VOID
AironetRequestAction(
5749 IN PRTMP_ADAPTER pAd
,
5750 IN MLME_QUEUE_ELEM
*Elem
);
5752 VOID
ChannelLoadRequestAction(
5753 IN PRTMP_ADAPTER pAd
,
5756 VOID
NoiseHistRequestAction(
5757 IN PRTMP_ADAPTER pAd
,
5760 VOID
BeaconRequestAction(
5761 IN PRTMP_ADAPTER pAd
,
5764 VOID
AironetReportAction(
5765 IN PRTMP_ADAPTER pAd
,
5766 IN MLME_QUEUE_ELEM
*Elem
);
5768 VOID
ChannelLoadReportAction(
5769 IN PRTMP_ADAPTER pAd
,
5772 VOID
NoiseHistReportAction(
5773 IN PRTMP_ADAPTER pAd
,
5776 VOID
AironetFinalReportAction(
5777 IN PRTMP_ADAPTER pAd
);
5779 VOID
BeaconReportAction(
5780 IN PRTMP_ADAPTER pAd
,
5783 VOID
AironetAddBeaconReport(
5784 IN PRTMP_ADAPTER pAd
,
5786 IN PMLME_QUEUE_ELEM pElem
);
5788 VOID
AironetCreateBeaconReportFromBssTable(
5789 IN PRTMP_ADAPTER pAd
);
5791 VOID
DBGPRINT_TX_RING(
5792 IN PRTMP_ADAPTER pAd
,
5795 VOID
DBGPRINT_RX_RING(
5796 IN PRTMP_ADAPTER pAd
);
5799 IN PRTMP_ADAPTER pAd
,
5801 IN UCHAR RssiNumber
);
5804 #ifdef DOT11N_DRAFT3
5805 VOID
BuildEffectedChannelList(
5806 IN PRTMP_ADAPTER pAd
);
5807 #endif // DOT11N_DRAFT3 //
5810 VOID
APAsicEvaluateRxAnt(
5811 IN PRTMP_ADAPTER pAd
);
5814 VOID
APAsicRxAntEvalTimeout(
5815 IN PRTMP_ADAPTER pAd
);
5818 // function prototype in cmm_wpa.c
5820 BOOLEAN
RTMPCheckWPAframe(
5821 IN PRTMP_ADAPTER pAd
,
5822 IN PMAC_TABLE_ENTRY pEntry
,
5824 IN ULONG DataByteCount
,
5825 IN UCHAR FromWhichBSSID
);
5827 VOID
AES_GTK_KEY_UNWRAP(
5829 OUT UCHAR
*plaintext
,
5831 IN UCHAR
*ciphertext
);
5833 BOOLEAN
RTMPCheckRSNIE(
5834 IN PRTMP_ADAPTER pAd
,
5837 IN MAC_TABLE_ENTRY
*pEntry
,
5840 BOOLEAN
RTMPParseEapolKeyData(
5841 IN PRTMP_ADAPTER pAd
,
5843 IN UCHAR KeyDataLen
,
5844 IN UCHAR GroupKeyIndex
,
5847 IN MAC_TABLE_ENTRY
*pEntry
);
5849 VOID
ConstructEapolMsg(
5850 IN PRTMP_ADAPTER pAd
,
5851 IN UCHAR PeerAuthMode
,
5852 IN UCHAR PeerWepStatus
,
5853 IN UCHAR MyGroupKeyWepStatus
,
5855 IN UCHAR DefaultKeyIdx
,
5856 IN UCHAR
*ReplayCounter
,
5863 OUT PEAPOL_PACKET pMsg
);
5866 IN PRTMP_ADAPTER pAd
,
5867 IN UCHAR PeerWepStatus
,
5869 OUT PEAPOL_PACKET pMsg
);
5871 NDIS_STATUS
RTMPSoftDecryptBroadCastData(
5872 IN PRTMP_ADAPTER pAd
,
5874 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher
,
5875 IN PCIPHER_KEY pShard_key
);
5877 VOID
ConstructEapolKeyData(
5878 IN PRTMP_ADAPTER pAd
,
5879 IN UCHAR PeerAuthMode
,
5880 IN UCHAR PeerWepStatus
,
5881 IN UCHAR GroupKeyWepStatus
,
5883 IN UCHAR DefaultKeyIdx
,
5884 IN BOOLEAN bWPA2Capable
,
5889 OUT PEAPOL_PACKET pMsg
);
5892 IN PRTMP_ADAPTER pAd
,
5898 // function prototype in ap_wpa.c
5901 BOOLEAN
APWpaMsgTypeSubst(
5905 MAC_TABLE_ENTRY
*PACInquiry(
5906 IN PRTMP_ADAPTER pAd
,
5909 BOOLEAN
RTMPCheckMcast(
5910 IN PRTMP_ADAPTER pAd
,
5911 IN PEID_STRUCT eid_ptr
,
5912 IN MAC_TABLE_ENTRY
*pEntry
);
5914 BOOLEAN
RTMPCheckUcast(
5915 IN PRTMP_ADAPTER pAd
,
5916 IN PEID_STRUCT eid_ptr
,
5917 IN MAC_TABLE_ENTRY
*pEntry
);
5919 BOOLEAN
RTMPCheckAUTH(
5920 IN PRTMP_ADAPTER pAd
,
5921 IN PEID_STRUCT eid_ptr
,
5922 IN MAC_TABLE_ENTRY
*pEntry
);
5924 VOID
WPAStart4WayHS(
5925 IN PRTMP_ADAPTER pAd
,
5926 IN MAC_TABLE_ENTRY
*pEntry
,
5927 IN ULONG TimeInterval
);
5929 VOID
WPAStart2WayGroupHS(
5930 IN PRTMP_ADAPTER pAd
,
5931 IN MAC_TABLE_ENTRY
*pEntry
);
5933 VOID
APWpaEAPPacketAction(
5934 IN PRTMP_ADAPTER pAd
,
5935 IN MLME_QUEUE_ELEM
*Elem
);
5937 VOID
APWpaEAPOLStartAction(
5938 IN PRTMP_ADAPTER pAd
,
5939 IN MLME_QUEUE_ELEM
*Elem
);
5941 VOID
APWpaEAPOLLogoffAction(
5942 IN PRTMP_ADAPTER pAd
,
5943 IN MLME_QUEUE_ELEM
*Elem
);
5945 VOID
APWpaEAPOLKeyAction(
5946 IN PRTMP_ADAPTER pAd
,
5947 IN MLME_QUEUE_ELEM
*Elem
);
5949 VOID
APWpaEAPOLASFAlertAction(
5950 IN PRTMP_ADAPTER pAd
,
5951 IN MLME_QUEUE_ELEM
*Elem
);
5953 VOID
HandleCounterMeasure(
5954 IN PRTMP_ADAPTER pAd
,
5955 IN MAC_TABLE_ENTRY
*pEntry
);
5957 VOID
PeerPairMsg2Action(
5958 IN PRTMP_ADAPTER pAd
,
5959 IN MAC_TABLE_ENTRY
*pEntry
,
5960 IN MLME_QUEUE_ELEM
*Elem
);
5962 VOID
PeerPairMsg4Action(
5963 IN PRTMP_ADAPTER pAd
,
5964 IN MAC_TABLE_ENTRY
*pEntry
,
5965 IN MLME_QUEUE_ELEM
*Elem
);
5968 IN PVOID SystemSpecific1
,
5969 IN PVOID FunctionContext
,
5970 IN PVOID SystemSpecific2
,
5971 IN PVOID SystemSpecific3
);
5974 IN PVOID SystemSpecific1
,
5975 IN PVOID FunctionContext
,
5976 IN PVOID SystemSpecific2
,
5977 IN PVOID SystemSpecific3
);
5979 VOID
EnqueueStartForPSKExec(
5980 IN PVOID SystemSpecific1
,
5981 IN PVOID FunctionContext
,
5982 IN PVOID SystemSpecific2
,
5983 IN PVOID SystemSpecific3
);
5985 VOID
RTMPHandleSTAKey(
5986 IN PRTMP_ADAPTER pAdapter
,
5987 IN MAC_TABLE_ENTRY
*pEntry
,
5988 IN MLME_QUEUE_ELEM
*Elem
);
5990 VOID
PeerGroupMsg2Action(
5991 IN PRTMP_ADAPTER pAd
,
5992 IN PMAC_TABLE_ENTRY pEntry
,
5996 VOID
PairDisAssocAction(
5997 IN PRTMP_ADAPTER pAd
,
5998 IN PMAC_TABLE_ENTRY pEntry
,
6001 VOID
MlmeDeAuthAction(
6002 IN PRTMP_ADAPTER pAd
,
6003 IN PMAC_TABLE_ENTRY pEntry
,
6006 VOID
GREKEYPeriodicExec(
6007 IN PVOID SystemSpecific1
,
6008 IN PVOID FunctionContext
,
6009 IN PVOID SystemSpecific2
,
6010 IN PVOID SystemSpecific3
);
6032 IN PRTMP_ADAPTER pAd
,
6035 VOID
AES_GTK_KEY_WRAP(
6037 IN UCHAR
*plaintext
,
6039 OUT UCHAR
*ciphertext
);
6042 IN PRTMP_ADAPTER pAdapter
,
6046 VOID
APToWirelessSta(
6047 IN PRTMP_ADAPTER pAd
,
6048 IN MAC_TABLE_ENTRY
*pEntry
,
6049 IN PUCHAR pHeader802_3
,
6053 IN BOOLEAN bClearFrame
);
6055 VOID
RTMPAddPMKIDCache(
6056 IN PRTMP_ADAPTER pAd
,
6062 INT
RTMPSearchPMKIDCache(
6063 IN PRTMP_ADAPTER pAd
,
6067 VOID
RTMPDeletePMKIDCache(
6068 IN PRTMP_ADAPTER pAd
,
6072 VOID
RTMPMaintainPMKIDCache(
6073 IN PRTMP_ADAPTER pAd
);
6075 VOID
RTMPSendTriggerFrame(
6076 IN PRTMP_ADAPTER pAd
,
6080 IN BOOLEAN bQosNull
);
6084 VOID
RTMP_SetPeriodicTimer(
6085 IN NDIS_MINIPORT_TIMER
*pTimer
,
6086 IN
unsigned long timeout
);
6088 VOID
RTMP_OS_Init_Timer(
6089 IN PRTMP_ADAPTER pAd
,
6090 IN NDIS_MINIPORT_TIMER
*pTimer
,
6091 IN TIMER_FUNCTION function
,
6094 VOID
RTMP_OS_Add_Timer(
6095 IN NDIS_MINIPORT_TIMER
*pTimer
,
6096 IN
unsigned long timeout
);
6098 VOID
RTMP_OS_Mod_Timer(
6099 IN NDIS_MINIPORT_TIMER
*pTimer
,
6100 IN
unsigned long timeout
);
6103 VOID
RTMP_OS_Del_Timer(
6104 IN NDIS_MINIPORT_TIMER
*pTimer
,
6105 OUT BOOLEAN
*pCancelled
);
6108 VOID
RTMP_OS_Release_Packet(
6109 IN PRTMP_ADAPTER pAd
,
6110 IN PQUEUE_ENTRY pEntry
);
6115 NDIS_STATUS
os_alloc_mem(
6116 IN PRTMP_ADAPTER pAd
,
6120 NDIS_STATUS
os_free_mem(
6121 IN PRTMP_ADAPTER pAd
,
6125 void RTMP_AllocateSharedMemory(
6126 IN PRTMP_ADAPTER pAd
,
6129 OUT PVOID
*VirtualAddress
,
6130 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
6132 VOID
RTMPFreeTxRxRingMemory(
6133 IN PRTMP_ADAPTER pAd
);
6135 NDIS_STATUS
AdapterBlockAllocateMemory(
6139 void RTMP_AllocateTxDescMemory(
6140 IN PRTMP_ADAPTER pAd
,
6144 OUT PVOID
*VirtualAddress
,
6145 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
6147 void RTMP_AllocateFirstTxBuffer(
6148 IN PRTMP_ADAPTER pAd
,
6152 OUT PVOID
*VirtualAddress
,
6153 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
6155 void RTMP_AllocateMgmtDescMemory(
6156 IN PRTMP_ADAPTER pAd
,
6159 OUT PVOID
*VirtualAddress
,
6160 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
6162 void RTMP_AllocateRxDescMemory(
6163 IN PRTMP_ADAPTER pAd
,
6166 OUT PVOID
*VirtualAddress
,
6167 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
6169 PNDIS_PACKET
RTMP_AllocateRxPacketBuffer(
6170 IN PRTMP_ADAPTER pAd
,
6173 OUT PVOID
*VirtualAddress
,
6174 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
6176 PNDIS_PACKET
RTMP_AllocateTxPacketBuffer(
6177 IN PRTMP_ADAPTER pAd
,
6180 OUT PVOID
*VirtualAddress
);
6182 PNDIS_PACKET
RTMP_AllocateFragPacketBuffer(
6183 IN PRTMP_ADAPTER pAd
,
6186 void RTMP_QueryPacketInfo(
6187 IN PNDIS_PACKET pPacket
,
6188 OUT PACKET_INFO
*pPacketInfo
,
6189 OUT PUCHAR
*pSrcBufVA
,
6190 OUT UINT
*pSrcBufLen
);
6192 void RTMP_QueryNextPacketInfo(
6193 IN PNDIS_PACKET
*ppPacket
,
6194 OUT PACKET_INFO
*pPacketInfo
,
6195 OUT PUCHAR
*pSrcBufVA
,
6196 OUT UINT
*pSrcBufLen
);
6199 BOOLEAN
RTMP_FillTxBlkInfo(
6200 IN RTMP_ADAPTER
*pAd
,
6204 PRTMP_SCATTER_GATHER_LIST
6205 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket
, RTMP_SCATTER_GATHER_LIST
*sg
);
6208 void announce_802_3_packet(
6209 IN PRTMP_ADAPTER pAd
,
6210 IN PNDIS_PACKET pPacket
);
6213 UINT
BA_Reorder_AMSDU_Annnounce(
6214 IN PRTMP_ADAPTER pAd
,
6215 IN PNDIS_PACKET pPacket
);
6218 UINT
Handle_AMSDU_Packet(
6219 IN PRTMP_ADAPTER pAd
,
6222 IN UCHAR FromWhichBSSID
);
6225 void convert_802_11_to_802_3_packet(
6226 IN PRTMP_ADAPTER pAd
,
6227 IN PNDIS_PACKET pPacket
,
6231 IN UCHAR FromWhichBSSID
);
6234 PNET_DEV
get_netdev_from_bssid(
6235 IN PRTMP_ADAPTER pAd
,
6236 IN UCHAR FromWhichBSSID
);
6239 PNDIS_PACKET
duplicate_pkt(
6240 IN PRTMP_ADAPTER pAd
,
6241 IN PUCHAR pHeader802_3
,
6245 IN UCHAR FromWhichBSSID
);
6248 PNDIS_PACKET
duplicate_pkt_with_TKIP_MIC(
6249 IN PRTMP_ADAPTER pAd
,
6250 IN PNDIS_PACKET pOldPkt
);
6252 PNDIS_PACKET
duplicate_pkt_with_VLAN(
6253 IN PRTMP_ADAPTER pAd
,
6254 IN PUCHAR pHeader802_3
,
6258 IN UCHAR FromWhichBSSID
);
6260 PNDIS_PACKET
duplicate_pkt_with_WPI(
6261 IN PRTMP_ADAPTER pAd
,
6262 IN PNDIS_PACKET pPacket
,
6263 IN UINT32 ext_head_len
,
6264 IN UINT32 ext_tail_len
);
6266 UCHAR
VLAN_8023_Header_Copy(
6267 IN PRTMP_ADAPTER pAd
,
6268 IN PUCHAR pHeader802_3
,
6271 IN UCHAR FromWhichBSSID
);
6273 #ifdef DOT11_N_SUPPORT
6274 void ba_flush_reordering_timeout_mpdus(
6275 IN PRTMP_ADAPTER pAd
,
6276 IN PBA_REC_ENTRY pBAEntry
,
6280 VOID
BAOriSessionSetUp(
6281 IN PRTMP_ADAPTER pAd
,
6282 IN MAC_TABLE_ENTRY
*pEntry
,
6286 IN BOOLEAN isForced
);
6288 VOID
BASessionTearDownALL(
6289 IN OUT PRTMP_ADAPTER pAd
,
6291 #endif // DOT11_N_SUPPORT //
6293 BOOLEAN
OS_Need_Clone_Packet(void);
6296 VOID
build_tx_packet(
6297 IN PRTMP_ADAPTER pAd
,
6298 IN PNDIS_PACKET pPacket
,
6303 VOID
BAOriSessionTearDown(
6304 IN OUT PRTMP_ADAPTER pAd
,
6307 IN BOOLEAN bPassive
,
6308 IN BOOLEAN bForceSend
);
6310 VOID
BARecSessionTearDown(
6311 IN OUT PRTMP_ADAPTER pAd
,
6314 IN BOOLEAN bPassive
);
6316 BOOLEAN
ba_reordering_resource_init(PRTMP_ADAPTER pAd
, int num
);
6317 void ba_reordering_resource_release(PRTMP_ADAPTER pAd
);
6319 ULONG
AutoChBssInsertEntry(
6320 IN PRTMP_ADAPTER pAd
,
6327 void AutoChBssTableInit(
6328 IN PRTMP_ADAPTER pAd
);
6330 void ChannelInfoInit(
6331 IN PRTMP_ADAPTER pAd
);
6333 void AutoChBssTableDestroy(
6334 IN PRTMP_ADAPTER pAd
);
6336 void ChannelInfoDestroy(
6337 IN PRTMP_ADAPTER pAd
);
6339 UCHAR
New_ApAutoSelectChannel(
6340 IN PRTMP_ADAPTER pAd
);
6342 BOOLEAN
rtstrmactohex(
6346 BOOLEAN
rtstrcasecmp(
6350 char *rtstrstruncasecmp(
6356 IN
const char * s2
);
6360 IN
const char * ct
);
6364 unsigned int *addr
);
6366 ////////// common ioctl functions //////////
6367 INT
Set_DriverVersion_Proc(
6368 IN PRTMP_ADAPTER pAd
,
6371 INT
Set_CountryRegion_Proc(
6372 IN PRTMP_ADAPTER pAd
,
6375 INT
Set_CountryRegionABand_Proc(
6376 IN PRTMP_ADAPTER pAd
,
6379 INT
Set_WirelessMode_Proc(
6380 IN PRTMP_ADAPTER pAd
,
6383 INT
Set_Channel_Proc(
6384 IN PRTMP_ADAPTER pAd
,
6387 INT
Set_ShortSlot_Proc(
6388 IN PRTMP_ADAPTER pAd
,
6391 INT
Set_TxPower_Proc(
6392 IN PRTMP_ADAPTER pAd
,
6395 INT
Set_BGProtection_Proc(
6396 IN PRTMP_ADAPTER pAd
,
6399 INT
Set_TxPreamble_Proc(
6400 IN PRTMP_ADAPTER pAd
,
6403 INT
Set_RTSThreshold_Proc(
6404 IN PRTMP_ADAPTER pAd
,
6407 INT
Set_FragThreshold_Proc(
6408 IN PRTMP_ADAPTER pAd
,
6411 INT
Set_TxBurst_Proc(
6412 IN PRTMP_ADAPTER pAd
,
6415 #ifdef AGGREGATION_SUPPORT
6416 INT
Set_PktAggregate_Proc(
6417 IN PRTMP_ADAPTER pAd
,
6421 INT
Set_IEEE80211H_Proc(
6422 IN PRTMP_ADAPTER pAd
,
6427 IN PRTMP_ADAPTER pAd
,
6431 INT
Show_DescInfo_Proc(
6432 IN PRTMP_ADAPTER pAd
,
6435 INT
Set_ResetStatCounter_Proc(
6436 IN PRTMP_ADAPTER pAd
,
6439 #ifdef DOT11_N_SUPPORT
6440 INT
Set_BASetup_Proc(
6441 IN PRTMP_ADAPTER pAd
,
6444 INT
Set_BADecline_Proc(
6445 IN PRTMP_ADAPTER pAd
,
6448 INT
Set_BAOriTearDown_Proc(
6449 IN PRTMP_ADAPTER pAd
,
6452 INT
Set_BARecTearDown_Proc(
6453 IN PRTMP_ADAPTER pAd
,
6457 IN PRTMP_ADAPTER pAd
,
6461 IN PRTMP_ADAPTER pAd
,
6465 IN PRTMP_ADAPTER pAd
,
6468 INT
Set_HtOpMode_Proc(
6469 IN PRTMP_ADAPTER pAd
,
6472 INT
Set_HtStbc_Proc(
6473 IN PRTMP_ADAPTER pAd
,
6477 IN PRTMP_ADAPTER pAd
,
6480 INT
Set_HtExtcha_Proc(
6481 IN PRTMP_ADAPTER pAd
,
6484 INT
Set_HtMpduDensity_Proc(
6485 IN PRTMP_ADAPTER pAd
,
6488 INT
Set_HtBaWinSize_Proc(
6489 IN PRTMP_ADAPTER pAd
,
6493 IN PRTMP_ADAPTER pAd
,
6496 INT
Set_HtLinkAdapt_Proc(
6497 IN PRTMP_ADAPTER pAd
,
6500 INT
Set_HtAmsdu_Proc(
6501 IN PRTMP_ADAPTER pAd
,
6504 INT
Set_HtAutoBa_Proc(
6505 IN PRTMP_ADAPTER pAd
,
6508 INT
Set_HtProtect_Proc(
6509 IN PRTMP_ADAPTER pAd
,
6512 INT
Set_HtMimoPs_Proc(
6513 IN PRTMP_ADAPTER pAd
,
6517 INT
Set_ForceShortGI_Proc(
6518 IN PRTMP_ADAPTER pAd
,
6521 INT
Set_ForceGF_Proc(
6522 IN PRTMP_ADAPTER pAd
,
6526 IN PRTMP_ADAPTER pAd
);
6528 INT
Set_SendPSMPAction_Proc(
6529 IN PRTMP_ADAPTER pAd
,
6532 INT
Set_HtMIMOPSmode_Proc(
6533 IN PRTMP_ADAPTER pAd
,
6537 INT
Set_HtTxBASize_Proc(
6538 IN PRTMP_ADAPTER pAd
,
6540 #endif // DOT11_N_SUPPORT //
6544 #ifdef CONFIG_STA_SUPPORT
6546 VOID
RTMPSendDLSTearDownFrame(
6547 IN PRTMP_ADAPTER pAd
,
6550 #ifdef DOT11_N_SUPPORT
6553 IN PRTMP_ADAPTER pAd
,
6554 OUT PQUERYBA_TABLE pBAT
);
6555 #endif // DOT11_N_SUPPORT //
6557 #ifdef WPA_SUPPLICANT_SUPPORT
6558 INT
WpaCheckEapCode(
6559 IN PRTMP_ADAPTER pAd
,
6564 VOID
WpaSendMicFailureToWpaSupplicant(
6565 IN PRTMP_ADAPTER pAd
,
6566 IN BOOLEAN bUnicast
);
6568 VOID
SendAssocIEsToWpaSupplicant(
6569 IN PRTMP_ADAPTER pAd
);
6570 #endif // WPA_SUPPLICANT_SUPPORT //
6572 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6573 int wext_notify_event_assoc(
6574 IN RTMP_ADAPTER
*pAd
);
6575 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6577 #endif // CONFIG_STA_SUPPORT //
6581 #ifdef DOT11_N_SUPPORT
6582 VOID
Handle_BSS_Width_Trigger_Events(
6583 IN PRTMP_ADAPTER pAd
);
6585 void build_ext_channel_switch_ie(
6586 IN PRTMP_ADAPTER pAd
,
6587 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE
*pIE
);
6588 #endif // DOT11_N_SUPPORT //
6591 BOOLEAN
APRxDoneInterruptHandle(
6592 IN PRTMP_ADAPTER pAd
);
6594 BOOLEAN
STARxDoneInterruptHandle(
6595 IN PRTMP_ADAPTER pAd
,
6598 #ifdef DOT11_N_SUPPORT
6599 // AMPDU packet indication
6600 VOID
Indicate_AMPDU_Packet(
6601 IN PRTMP_ADAPTER pAd
,
6603 IN UCHAR FromWhichBSSID
);
6605 // AMSDU packet indication
6606 VOID
Indicate_AMSDU_Packet(
6607 IN PRTMP_ADAPTER pAd
,
6609 IN UCHAR FromWhichBSSID
);
6610 #endif // DOT11_N_SUPPORT //
6612 // Normal legacy Rx packet indication
6613 VOID
Indicate_Legacy_Packet(
6614 IN PRTMP_ADAPTER pAd
,
6616 IN UCHAR FromWhichBSSID
);
6618 VOID
Indicate_EAPOL_Packet(
6619 IN PRTMP_ADAPTER pAd
,
6621 IN UCHAR FromWhichBSSID
);
6623 void update_os_packet_info(
6624 IN PRTMP_ADAPTER pAd
,
6626 IN UCHAR FromWhichBSSID
);
6628 void wlan_802_11_to_802_3_packet(
6629 IN PRTMP_ADAPTER pAd
,
6631 IN PUCHAR pHeader802_3
,
6632 IN UCHAR FromWhichBSSID
);
6634 UINT
deaggregate_AMSDU_announce(
6635 IN PRTMP_ADAPTER pAd
,
6636 PNDIS_PACKET pPacket
,
6641 #ifdef CONFIG_STA_SUPPORT
6642 // remove LLC and get 802_3 Header
6643 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6645 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6647 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6649 _pDA = _pRxBlk->pHeader->Addr3; \
6650 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6654 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6656 _pDA = _pRxBlk->pHeader->Addr1; \
6657 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6658 _pSA = _pRxBlk->pHeader->Addr2; \
6660 _pSA = _pRxBlk->pHeader->Addr3; \
6664 _pDA = _pRxBlk->pHeader->Addr1; \
6665 _pSA = _pRxBlk->pHeader->Addr2; \
6669 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6670 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6672 #endif // CONFIG_STA_SUPPORT //
6675 BOOLEAN
APFowardWirelessStaToWirelessSta(
6676 IN PRTMP_ADAPTER pAd
,
6677 IN PNDIS_PACKET pPacket
,
6678 IN ULONG FromWhichBSSID
);
6680 VOID
Announce_or_Forward_802_3_Packet(
6681 IN PRTMP_ADAPTER pAd
,
6682 IN PNDIS_PACKET pPacket
,
6683 IN UCHAR FromWhichBSSID
);
6685 VOID
Sta_Announce_or_Forward_802_3_Packet(
6686 IN PRTMP_ADAPTER pAd
,
6687 IN PNDIS_PACKET pPacket
,
6688 IN UCHAR FromWhichBSSID
);
6691 #ifdef CONFIG_STA_SUPPORT
6692 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6693 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6694 //announce_802_3_packet(_pAd, _pPacket);
6695 #endif // CONFIG_STA_SUPPORT //
6698 PNDIS_PACKET
DuplicatePacket(
6699 IN PRTMP_ADAPTER pAd
,
6700 IN PNDIS_PACKET pPacket
,
6701 IN UCHAR FromWhichBSSID
);
6704 PNDIS_PACKET
ClonePacket(
6705 IN PRTMP_ADAPTER pAd
,
6706 IN PNDIS_PACKET pPacket
,
6711 // Normal, AMPDU or AMSDU
6712 VOID
CmmRxnonRalinkFrameIndicate(
6713 IN PRTMP_ADAPTER pAd
,
6715 IN UCHAR FromWhichBSSID
);
6717 VOID
CmmRxRalinkFrameIndicate(
6718 IN PRTMP_ADAPTER pAd
,
6719 IN MAC_TABLE_ENTRY
*pEntry
,
6721 IN UCHAR FromWhichBSSID
);
6723 VOID
Update_Rssi_Sample(
6724 IN PRTMP_ADAPTER pAd
,
6725 IN RSSI_SAMPLE
*pRssi
,
6726 IN PRXWI_STRUC pRxWI
);
6728 PNDIS_PACKET
GetPacketFromRxRing(
6729 IN PRTMP_ADAPTER pAd
,
6730 OUT PRT28XX_RXD_STRUC pSaveRxD
,
6731 OUT BOOLEAN
*pbReschedule
,
6732 IN OUT UINT32
*pRxPending
);
6734 PNDIS_PACKET
RTMPDeFragmentDataFrame(
6735 IN PRTMP_ADAPTER pAd
,
6738 ////////////////////////////////////////
6746 typedef struct _DefaultKeyIdxValue
6750 } DefaultKeyIdxValue
, *PDefaultKeyIdxValue
;
6754 #ifdef CONFIG_STA_SUPPORT
6756 DIDmsg_lnxind_wlansniffrm
= 0x00000044,
6757 DIDmsg_lnxind_wlansniffrm_hosttime
= 0x00010044,
6758 DIDmsg_lnxind_wlansniffrm_mactime
= 0x00020044,
6759 DIDmsg_lnxind_wlansniffrm_channel
= 0x00030044,
6760 DIDmsg_lnxind_wlansniffrm_rssi
= 0x00040044,
6761 DIDmsg_lnxind_wlansniffrm_sq
= 0x00050044,
6762 DIDmsg_lnxind_wlansniffrm_signal
= 0x00060044,
6763 DIDmsg_lnxind_wlansniffrm_noise
= 0x00070044,
6764 DIDmsg_lnxind_wlansniffrm_rate
= 0x00080044,
6765 DIDmsg_lnxind_wlansniffrm_istx
= 0x00090044,
6766 DIDmsg_lnxind_wlansniffrm_frmlen
= 0x000A0044
6769 P80211ENUM_msgitem_status_no_value
= 0x00
6772 P80211ENUM_truth_false
= 0x00,
6773 P80211ENUM_truth_true
= 0x01
6776 /* Definition from madwifi */
6782 } p80211item_uint32_t
;
6787 #define WLAN_DEVNAMELEN_MAX 16
6788 UINT8 devname
[WLAN_DEVNAMELEN_MAX
];
6789 p80211item_uint32_t hosttime
;
6790 p80211item_uint32_t mactime
;
6791 p80211item_uint32_t channel
;
6792 p80211item_uint32_t rssi
;
6793 p80211item_uint32_t sq
;
6794 p80211item_uint32_t signal
;
6795 p80211item_uint32_t noise
;
6796 p80211item_uint32_t rate
;
6797 p80211item_uint32_t istx
;
6798 p80211item_uint32_t frmlen
;
6799 } wlan_ng_prism2_header
;
6801 /* The radio capture header precedes the 802.11 header. */
6802 typedef struct PACKED _ieee80211_radiotap_header
{
6803 UINT8 it_version
; /* Version 0. Only increases
6804 * for drastic changes,
6805 * introduction of compatible
6806 * new fields does not count.
6809 UINT16 it_len
; /* length of the whole
6810 * header in bytes, including
6811 * it_version, it_pad,
6812 * it_len, and data fields.
6814 UINT32 it_present
; /* A bitmap telling which
6815 * fields are present. Set bit 31
6816 * (0x80000000) to extend the
6817 * bitmap by another 32 bits.
6818 * Additional extensions are made
6819 * by setting bit 31.
6821 }ieee80211_radiotap_header
;
6823 enum ieee80211_radiotap_type
{
6824 IEEE80211_RADIOTAP_TSFT
= 0,
6825 IEEE80211_RADIOTAP_FLAGS
= 1,
6826 IEEE80211_RADIOTAP_RATE
= 2,
6827 IEEE80211_RADIOTAP_CHANNEL
= 3,
6828 IEEE80211_RADIOTAP_FHSS
= 4,
6829 IEEE80211_RADIOTAP_DBM_ANTSIGNAL
= 5,
6830 IEEE80211_RADIOTAP_DBM_ANTNOISE
= 6,
6831 IEEE80211_RADIOTAP_LOCK_QUALITY
= 7,
6832 IEEE80211_RADIOTAP_TX_ATTENUATION
= 8,
6833 IEEE80211_RADIOTAP_DB_TX_ATTENUATION
= 9,
6834 IEEE80211_RADIOTAP_DBM_TX_POWER
= 10,
6835 IEEE80211_RADIOTAP_ANTENNA
= 11,
6836 IEEE80211_RADIOTAP_DB_ANTSIGNAL
= 12,
6837 IEEE80211_RADIOTAP_DB_ANTNOISE
= 13
6840 #define WLAN_RADIOTAP_PRESENT ( \
6841 (1 << IEEE80211_RADIOTAP_TSFT) | \
6842 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6843 (1 << IEEE80211_RADIOTAP_RATE) | \
6846 typedef struct _wlan_radiotap_header
{
6847 ieee80211_radiotap_header wt_ihdr
;
6851 } wlan_radiotap_header
;
6852 /* Definition from madwifi */
6854 void send_monitor_packets(
6855 IN PRTMP_ADAPTER pAd
,
6858 #if WIRELESS_EXT >= 12
6859 // This function will be called when query /proc
6860 struct iw_statistics
*rt28xx_get_wireless_stats(
6861 IN
struct net_device
*net_dev
);
6864 VOID
RTMPSetDesiredRates(
6865 IN PRTMP_ADAPTER pAdapter
,
6867 #endif // CONFIG_STA_SUPPORT //
6869 INT
Set_FixedTxMode_Proc(
6870 IN PRTMP_ADAPTER pAd
,
6873 #ifdef CONFIG_APSTA_MIXED_SUPPORT
6874 INT
Set_OpMode_Proc(
6875 IN PRTMP_ADAPTER pAd
,
6877 #endif // CONFIG_APSTA_MIXED_SUPPORT //
6879 static inline char* GetPhyMode(
6889 #ifdef DOT11_N_SUPPORT
6893 case MODE_HTGREENFIELD
:
6895 #endif // DOT11_N_SUPPORT //
6902 static inline char* GetBW(
6912 #ifdef DOT11_N_SUPPORT
6915 #endif // DOT11_N_SUPPORT //
6922 VOID
RT28xxThreadTerminate(
6923 IN RTMP_ADAPTER
*pAd
);
6925 BOOLEAN
RT28XXChipsetCheck(
6928 BOOLEAN
RT28XXNetDevInit(
6930 IN
struct net_device
*net_dev
,
6931 IN RTMP_ADAPTER
*pAd
);
6933 BOOLEAN
RT28XXProbePostConfig(
6935 IN RTMP_ADAPTER
*pAd
,
6938 VOID
RT28XXDMADisable(
6939 IN RTMP_ADAPTER
*pAd
);
6941 VOID
RT28XXDMAEnable(
6942 IN RTMP_ADAPTER
*pAd
);
6944 VOID
RT28xx_UpdateBeaconToAsic(
6945 IN RTMP_ADAPTER
* pAd
,
6948 IN ULONG UpdatePos
);
6951 IN
struct net_device
*net_dev
,
6952 IN OUT
struct ifreq
*rq
,
6956 #ifdef CONFIG_STA_SUPPORT
6957 INT
rt28xx_sta_ioctl(
6958 IN
struct net_device
*net_dev
,
6959 IN OUT
struct ifreq
*rq
,
6961 #endif // CONFIG_STA_SUPPORT //
6963 BOOLEAN
RT28XXSecurityKeyAdd(
6964 IN PRTMP_ADAPTER pAd
,
6967 IN MAC_TABLE_ENTRY
*pEntry
);
6969 ////////////////////////////////////////
6970 PNDIS_PACKET
GetPacketFromRxRing(
6971 IN PRTMP_ADAPTER pAd
,
6972 OUT PRT28XX_RXD_STRUC pSaveRxD
,
6973 OUT BOOLEAN
*pbReschedule
,
6974 IN OUT UINT32
*pRxPending
);
6977 void kill_thread_task(PRTMP_ADAPTER pAd
);
6979 void tbtt_tasklet(unsigned long data
);
6983 // Function Prototype in cmm_data_2860.c
6985 USHORT
RtmpPCI_WriteTxResource(
6986 IN PRTMP_ADAPTER pAd
,
6989 OUT USHORT
*FreeNumber
);
6991 USHORT
RtmpPCI_WriteSingleTxResource(
6992 IN PRTMP_ADAPTER pAd
,
6995 OUT USHORT
*FreeNumber
);
6997 USHORT
RtmpPCI_WriteMultiTxResource(
6998 IN PRTMP_ADAPTER pAd
,
7001 OUT USHORT
*FreeNumber
);
7003 USHORT
RtmpPCI_WriteFragTxResource(
7004 IN PRTMP_ADAPTER pAd
,
7007 OUT USHORT
*FreeNumber
);
7009 USHORT
RtmpPCI_WriteSubTxResource(
7010 IN PRTMP_ADAPTER pAd
,
7013 OUT USHORT
*FreeNumber
);
7015 VOID
RtmpPCI_FinalWriteTxResource(
7016 IN PRTMP_ADAPTER pAd
,
7018 IN USHORT totalMPDUSize
,
7019 IN USHORT FirstTxIdx
);
7021 VOID
RtmpPCIDataLastTxIdx(
7022 IN PRTMP_ADAPTER pAd
,
7024 IN USHORT LastTxIdx
);
7026 VOID
RtmpPCIDataKickOut(
7027 IN PRTMP_ADAPTER pAd
,
7032 int RtmpPCIMgmtKickOut(
7033 IN RTMP_ADAPTER
*pAd
,
7035 IN PNDIS_PACKET pPacket
,
7036 IN PUCHAR pSrcBufVA
,
7040 NDIS_STATUS
RTMPCheckRxError(
7041 IN PRTMP_ADAPTER pAd
,
7042 IN PHEADER_802_11 pHeader
,
7043 IN PRXWI_STRUC pRxWI
,
7044 IN PRT28XX_RXD_STRUC pRxD
);
7046 #ifdef CONFIG_STA_SUPPORT
7047 VOID
RTMPInitPCIeLinkCtrlValue(
7048 IN PRTMP_ADAPTER pAd
);
7050 VOID
RTMPFindHostPCIDev(
7051 IN PRTMP_ADAPTER pAd
);
7053 VOID
RTMPPCIeLinkCtrlValueRestore(
7054 IN PRTMP_ADAPTER pAd
,
7057 VOID
RTMPPCIeLinkCtrlSetting(
7058 IN PRTMP_ADAPTER pAd
,
7061 VOID
RT28xxPciAsicRadioOff(
7062 IN PRTMP_ADAPTER pAd
,
7064 IN USHORT TbttNumToNextWakeUp
);
7066 BOOLEAN
RT28xxPciAsicRadioOn(
7067 IN PRTMP_ADAPTER pAd
,
7070 VOID
RT28xxPciStaAsicForceWakeup(
7071 IN PRTMP_ADAPTER pAd
,
7072 IN BOOLEAN bFromTx
);
7074 VOID
RT28xxPciStaAsicSleepThenAutoWakeup(
7075 IN PRTMP_ADAPTER pAd
,
7076 IN USHORT TbttNumToNextWakeUp
);
7078 VOID
PsPollWakeExec(
7079 IN PVOID SystemSpecific1
,
7080 IN PVOID FunctionContext
,
7081 IN PVOID SystemSpecific2
,
7082 IN PVOID SystemSpecific3
);
7085 IN PVOID SystemSpecific1
,
7086 IN PVOID FunctionContext
,
7087 IN PVOID SystemSpecific2
,
7088 IN PVOID SystemSpecific3
);
7089 #endif // CONFIG_STA_SUPPORT //
7091 VOID
RT28xxPciMlmeRadioOn(
7092 IN PRTMP_ADAPTER pAd
);
7094 VOID
RT28xxPciMlmeRadioOFF(
7095 IN PRTMP_ADAPTER pAd
);
7098 VOID
AsicTurnOffRFClk(
7099 IN PRTMP_ADAPTER pAd
,
7102 VOID
AsicTurnOnRFClk(
7103 IN PRTMP_ADAPTER pAd
,
7107 ////////////////////////////////////////
7110 IN RTMP_ADAPTER
*pAd
);
7112 UINT32
QBSS_LoadElementAppend(
7113 IN RTMP_ADAPTER
*pAd
,
7116 VOID
QBSS_LoadUpdate(
7117 IN RTMP_ADAPTER
*pAd
);
7119 ///////////////////////////////////////
7120 INT
RTMPShowCfgValue(
7121 IN PRTMP_ADAPTER pAd
,
7125 PCHAR
RTMPGetRalinkAuthModeStr(
7126 IN NDIS_802_11_AUTHENTICATION_MODE authMode
);
7128 PCHAR
RTMPGetRalinkEncryModeStr(
7129 IN USHORT encryMode
);
7130 //////////////////////////////////////
7132 #ifdef CONFIG_STA_SUPPORT
7133 VOID
AsicStaBbpTuning(
7134 IN PRTMP_ADAPTER pAd
);
7135 #endif // CONFIG_STA_SUPPORT //
7137 void RTMP_IndicateMediaState(
7138 IN PRTMP_ADAPTER pAd
);
7140 VOID
ReSyncBeaconTime(
7141 IN PRTMP_ADAPTER pAd
);
7143 VOID
RTMPSetAGCInitValue(
7144 IN PRTMP_ADAPTER pAd
,
7145 IN UCHAR BandWidth
);
7147 int rt28xx_close(IN PNET_DEV dev
);
7148 int rt28xx_open(IN PNET_DEV dev
);
7150 __inline INT
VIRTUAL_IF_UP(PRTMP_ADAPTER pAd
)
7152 extern VOID
MeshMakeBeacon(IN PRTMP_ADAPTER pAd
, IN UCHAR idx
);
7153 extern VOID
MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd
, IN UCHAR idx
);
7155 if (VIRTUAL_IF_NUM(pAd
) == 0)
7157 if (rt28xx_open(pAd
->net_dev
) != 0)
7163 VIRTUAL_IF_INC(pAd
);
7167 __inline VOID
VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd
)
7169 VIRTUAL_IF_DEC(pAd
);
7170 if (VIRTUAL_IF_NUM(pAd
) == 0)
7171 rt28xx_close(pAd
->net_dev
);
7176 #endif // __RTMP_H__