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"
46 #ifdef CONFIG_STA_SUPPORT
48 #endif // CONFIG_STA_SUPPORT //
52 //#define DBG_DIAGNOSE 1
54 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
55 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
56 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
58 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
59 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
62 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
63 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
64 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
67 ////////////////////////////////////////////////////////////////////////////
68 // The TX_BUFFER structure forms the transmitted USB packet to the device
69 ////////////////////////////////////////////////////////////////////////////
70 typedef struct __TX_BUFFER{
72 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
73 HEADER_802_11 NullFrame;
74 PSPOLL_FRAME PsPollPacket;
77 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
78 } TX_BUFFER, *PTX_BUFFER;
80 typedef struct __HTTX_BUFFER{
82 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
83 HEADER_802_11 NullFrame;
84 PSPOLL_FRAME PsPollPacket;
87 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
88 } HTTX_BUFFER, *PHTTX_BUFFER;
91 // used to track driver-generated write irps
92 typedef struct _TX_CONTEXT
94 PVOID pAd; //Initialized in MiniportInitialize
95 PURB pUrb; //Initialized in MiniportInitialize
96 PIRP pIrp; //used to cancel pending bulk out.
97 //Initialized in MiniportInitialize
98 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
103 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
104 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
107 BOOLEAN bAggregatible;
108 UCHAR Header_802_3[LENGTH_802_3];
112 dma_addr_t data_dma; // urb dma on linux
114 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
117 // used to track driver-generated write irps
118 typedef struct _HT_TX_CONTEXT
120 PVOID pAd; //Initialized in MiniportInitialize
121 PURB pUrb; //Initialized in MiniportInitialize
122 PIRP pIrp; //used to cancel pending bulk out.
123 //Initialized in MiniportInitialize
124 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
125 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
131 BOOLEAN bCopySavePad;
133 UCHAR Header_802_3[LENGTH_802_3];
134 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
135 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
136 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
137 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
139 dma_addr_t data_dma; // urb dma on linux
140 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
144 // Structure to keep track of receive packets and buffers to indicate
145 // receive data to the protocol.
147 typedef struct _RX_CONTEXT
149 PUCHAR TransferBuffer;
151 PIRP pIrp;//used to cancel pending bulk in.
153 //These 2 Boolean shouldn't both be 1 at the same time.
154 ULONG BulkInOffset; // number of packets waiting for reordering .
155 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
156 BOOLEAN bRxHandling; // Notify this packet is being process now.
157 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
158 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
159 BOOLEAN IRPPending; // TODO: To be removed
161 NDIS_SPIN_LOCK RxContextLock;
162 dma_addr_t data_dma; // urb dma on linux
163 } RX_CONTEXT, *PRX_CONTEXT;
168 // NDIS Version definitions
170 #ifdef NDIS50_MINIPORT
171 #define RTMP_NDIS_MAJOR_VERSION 5
172 #define RTMP_NDIS_MINOR_VERSION 0
175 #ifdef NDIS51_MINIPORT
176 #define RTMP_NDIS_MAJOR_VERSION 5
177 #define RTMP_NDIS_MINOR_VERSION 1
180 extern char NIC_VENDOR_DESC[];
181 extern int NIC_VENDOR_DESC_LEN;
183 extern unsigned char SNAP_AIRONET[];
184 extern unsigned char CipherSuiteCiscoCCKM[];
185 extern unsigned char CipherSuiteCiscoCCKMLen;
186 extern unsigned char CipherSuiteCiscoCCKM24[];
187 extern unsigned char CipherSuiteCiscoCCKM24Len;
188 extern unsigned char CipherSuiteCCXTkip[];
189 extern unsigned char CipherSuiteCCXTkipLen;
190 extern unsigned char CISCO_OUI[];
191 extern UCHAR BaSizeArray[4];
193 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
194 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
196 extern ULONG BIT32[32];
197 extern UCHAR BIT8[8];
198 extern char* CipherName[];
199 extern char* MCSToMbps[];
200 extern UCHAR RxwiMCSToOfdmRate[12];
201 extern UCHAR SNAP_802_1H[6];
202 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
203 extern UCHAR SNAP_AIRONET[8];
204 extern UCHAR CKIP_LLC_SNAP[8];
205 extern UCHAR EAPOL_LLC_SNAP[8];
206 extern UCHAR EAPOL[2];
208 extern UCHAR APPLE_TALK[2];
209 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
210 extern UCHAR OfdmRateToRxwiMCS[];
211 extern UCHAR OfdmSignalToRateId[16] ;
212 extern UCHAR default_cwmin[4];
213 extern UCHAR default_cwmax[4];
214 extern UCHAR default_sta_aifsn[4];
215 extern UCHAR MapUserPriorityToAccessCategory[8];
217 extern USHORT RateUpPER[];
218 extern USHORT RateDownPER[];
219 extern UCHAR Phy11BNextRateDownward[];
220 extern UCHAR Phy11BNextRateUpward[];
221 extern UCHAR Phy11BGNextRateDownward[];
222 extern UCHAR Phy11BGNextRateUpward[];
223 extern UCHAR Phy11ANextRateDownward[];
224 extern UCHAR Phy11ANextRateUpward[];
225 extern CHAR RssiSafeLevelForTxRate[];
226 extern UCHAR RateIdToMbps[];
227 extern USHORT RateIdTo500Kbps[];
229 extern UCHAR CipherSuiteWpaNoneTkip[];
230 extern UCHAR CipherSuiteWpaNoneTkipLen;
232 extern UCHAR CipherSuiteWpaNoneAes[];
233 extern UCHAR CipherSuiteWpaNoneAesLen;
236 extern UCHAR SupRateIe;
237 extern UCHAR ExtRateIe;
239 #ifdef DOT11_N_SUPPORT
240 extern UCHAR HtCapIe;
241 extern UCHAR AddHtInfoIe;
242 extern UCHAR NewExtChanIe;
244 extern UCHAR ExtHtCapIe;
245 #endif // DOT11N_DRAFT3 //
246 #endif // DOT11_N_SUPPORT //
257 extern UCHAR WPA_OUI[];
258 extern UCHAR RSN_OUI[];
259 extern UCHAR WAPI_OUI[];
260 extern UCHAR WME_INFO_ELEM[];
261 extern UCHAR WME_PARM_ELEM[];
262 extern UCHAR Ccx2QosInfo[];
263 extern UCHAR Ccx2IeInfo[];
264 extern UCHAR RALINK_OUI[];
265 extern UCHAR PowerConstraintIE[];
268 extern UCHAR RateSwitchTable[];
269 extern UCHAR RateSwitchTable11B[];
270 extern UCHAR RateSwitchTable11G[];
271 extern UCHAR RateSwitchTable11BG[];
273 #ifdef DOT11_N_SUPPORT
274 extern UCHAR RateSwitchTable11BGN1S[];
275 extern UCHAR RateSwitchTable11BGN2S[];
276 extern UCHAR RateSwitchTable11BGN2SForABand[];
277 extern UCHAR RateSwitchTable11N1S[];
278 extern UCHAR RateSwitchTable11N2S[];
279 extern UCHAR RateSwitchTable11N2SForABand[];
281 #ifdef CONFIG_STA_SUPPORT
282 extern UCHAR PRE_N_HT_OUI[];
283 #endif // CONFIG_STA_SUPPORT //
284 #endif // DOT11_N_SUPPORT //
286 #define MAXSEQ (0xFFF)
288 #ifdef DOT11_N_SUPPORT
289 struct reordering_mpdu
291 struct reordering_mpdu *next;
292 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
293 int Sequence; /* sequence number of MPDU */
297 struct reordering_list
299 struct reordering_mpdu *next;
303 struct reordering_mpdu_pool
307 struct reordering_list freelist;
309 #endif // DOT11_N_SUPPORT //
311 typedef struct _RSSI_SAMPLE {
312 CHAR LastRssi0; // last received RSSI
313 CHAR LastRssi1; // last received RSSI
314 CHAR LastRssi2; // last received RSSI
324 // Queue structure and macros
326 typedef struct _QUEUE_ENTRY {
327 struct _QUEUE_ENTRY *Next;
328 } QUEUE_ENTRY, *PQUEUE_ENTRY;
331 typedef struct _QUEUE_HEADER {
335 } QUEUE_HEADER, *PQUEUE_HEADER;
337 #define InitializeQueueHeader(QueueHeader) \
339 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
340 (QueueHeader)->Number = 0; \
343 #define RemoveHeadQueue(QueueHeader) \
344 (QueueHeader)->Head; \
346 PQUEUE_ENTRY pNext; \
347 if ((QueueHeader)->Head != NULL) \
349 pNext = (QueueHeader)->Head->Next; \
350 (QueueHeader)->Head = pNext; \
352 (QueueHeader)->Tail = NULL; \
353 (QueueHeader)->Number--; \
357 #define InsertHeadQueue(QueueHeader, QueueEntry) \
359 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
360 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
361 if ((QueueHeader)->Tail == NULL) \
362 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
363 (QueueHeader)->Number++; \
366 #define InsertTailQueue(QueueHeader, QueueEntry) \
368 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
369 if ((QueueHeader)->Tail) \
370 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
372 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
373 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
374 (QueueHeader)->Number++; \
378 // Macros for flag and ref count operations
380 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
381 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
382 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
383 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
384 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
386 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
387 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
388 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
390 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
391 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
392 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
394 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
395 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
396 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
398 #ifdef CONFIG_STA_SUPPORT
399 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
400 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
401 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
402 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
404 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
405 #endif // CONFIG_STA_SUPPORT //
407 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
408 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
411 #define INC_RING_INDEX(_idx, _RingSize) \
413 (_idx) = (_idx+1) % (_RingSize); \
416 // We will have a cost down version which mac version is 0x3090xxxx
417 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
419 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
420 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
421 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
423 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
425 #define RING_PACKET_INIT(_TxRing, _idx) \
427 _TxRing->Cell[_idx].pNdisPacket = NULL; \
428 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
431 #define TXDT_INIT(_TxD) \
433 NdisZeroMemory(_TxD, TXD_SIZE); \
437 //Set last data segment
438 #define RING_SET_LASTDS(_TxD, _IsSD0) \
440 if (_IsSD0) {_TxD->LastSec0 = 1;} \
441 else {_TxD->LastSec1 = 1;} \
444 // Increase TxTsc value for next transmission
446 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
447 // Should send a special event microsoft defined to request re-key
448 #define INC_TX_TSC(_tsc) \
451 while (++_tsc[i] == 0x0) \
459 #ifdef DOT11_N_SUPPORT
460 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
461 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
463 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
464 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
465 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
466 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
467 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
468 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
469 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
470 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
471 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
472 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
473 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
474 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
477 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
479 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
480 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
481 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
483 #endif // DOT11_N_SUPPORT //
486 // MACRO for 32-bit PCI register read / write
488 // Usage : RTMP_IO_READ32(
489 // PRTMP_ADAPTER pAd,
490 // ULONG Register_Offset,
494 // PRTMP_ADAPTER pAd,
495 // ULONG Register_Offset,
500 // BBP & RF are using indirect access. Before write any value into it.
501 // We have to make sure there is no outstanding command pending via checking busy bit.
503 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
507 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
508 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
509 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
511 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
512 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
516 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
517 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
520 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
523 case 1: khz = 2412000; break; \
524 case 2: khz = 2417000; break; \
525 case 3: khz = 2422000; break; \
526 case 4: khz = 2427000; break; \
527 case 5: khz = 2432000; break; \
528 case 6: khz = 2437000; break; \
529 case 7: khz = 2442000; break; \
530 case 8: khz = 2447000; break; \
531 case 9: khz = 2452000; break; \
532 case 10: khz = 2457000; break; \
533 case 11: khz = 2462000; break; \
534 case 12: khz = 2467000; break; \
535 case 13: khz = 2472000; break; \
536 case 14: khz = 2484000; break; \
537 case 36: /* UNII */ khz = 5180000; break; \
538 case 40: /* UNII */ khz = 5200000; break; \
539 case 44: /* UNII */ khz = 5220000; break; \
540 case 48: /* UNII */ khz = 5240000; break; \
541 case 52: /* UNII */ khz = 5260000; break; \
542 case 56: /* UNII */ khz = 5280000; break; \
543 case 60: /* UNII */ khz = 5300000; break; \
544 case 64: /* UNII */ khz = 5320000; break; \
545 case 149: /* UNII */ khz = 5745000; break; \
546 case 153: /* UNII */ khz = 5765000; break; \
547 case 157: /* UNII */ khz = 5785000; break; \
548 case 161: /* UNII */ khz = 5805000; break; \
549 case 165: /* UNII */ khz = 5825000; break; \
550 case 100: /* HiperLAN2 */ khz = 5500000; break; \
551 case 104: /* HiperLAN2 */ khz = 5520000; break; \
552 case 108: /* HiperLAN2 */ khz = 5540000; break; \
553 case 112: /* HiperLAN2 */ khz = 5560000; break; \
554 case 116: /* HiperLAN2 */ khz = 5580000; break; \
555 case 120: /* HiperLAN2 */ khz = 5600000; break; \
556 case 124: /* HiperLAN2 */ khz = 5620000; break; \
557 case 128: /* HiperLAN2 */ khz = 5640000; break; \
558 case 132: /* HiperLAN2 */ khz = 5660000; break; \
559 case 136: /* HiperLAN2 */ khz = 5680000; break; \
560 case 140: /* HiperLAN2 */ khz = 5700000; break; \
561 case 34: /* Japan MMAC */ khz = 5170000; break; \
562 case 38: /* Japan MMAC */ khz = 5190000; break; \
563 case 42: /* Japan MMAC */ khz = 5210000; break; \
564 case 46: /* Japan MMAC */ khz = 5230000; break; \
565 case 184: /* Japan */ khz = 4920000; break; \
566 case 188: /* Japan */ khz = 4940000; break; \
567 case 192: /* Japan */ khz = 4960000; break; \
568 case 196: /* Japan */ khz = 4980000; break; \
569 case 208: /* Japan, means J08 */ khz = 5040000; break; \
570 case 212: /* Japan, means J12 */ khz = 5060000; break; \
571 case 216: /* Japan, means J16 */ khz = 5080000; break; \
572 default: khz = 2412000; break; \
576 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
579 case 2412000: ch = 1; break; \
580 case 2417000: ch = 2; break; \
581 case 2422000: ch = 3; break; \
582 case 2427000: ch = 4; break; \
583 case 2432000: ch = 5; break; \
584 case 2437000: ch = 6; break; \
585 case 2442000: ch = 7; break; \
586 case 2447000: ch = 8; break; \
587 case 2452000: ch = 9; break; \
588 case 2457000: ch = 10; break; \
589 case 2462000: ch = 11; break; \
590 case 2467000: ch = 12; break; \
591 case 2472000: ch = 13; break; \
592 case 2484000: ch = 14; break; \
593 case 5180000: ch = 36; /* UNII */ break; \
594 case 5200000: ch = 40; /* UNII */ break; \
595 case 5220000: ch = 44; /* UNII */ break; \
596 case 5240000: ch = 48; /* UNII */ break; \
597 case 5260000: ch = 52; /* UNII */ break; \
598 case 5280000: ch = 56; /* UNII */ break; \
599 case 5300000: ch = 60; /* UNII */ break; \
600 case 5320000: ch = 64; /* UNII */ break; \
601 case 5745000: ch = 149; /* UNII */ break; \
602 case 5765000: ch = 153; /* UNII */ break; \
603 case 5785000: ch = 157; /* UNII */ break; \
604 case 5805000: ch = 161; /* UNII */ break; \
605 case 5825000: ch = 165; /* UNII */ break; \
606 case 5500000: ch = 100; /* HiperLAN2 */ break; \
607 case 5520000: ch = 104; /* HiperLAN2 */ break; \
608 case 5540000: ch = 108; /* HiperLAN2 */ break; \
609 case 5560000: ch = 112; /* HiperLAN2 */ break; \
610 case 5580000: ch = 116; /* HiperLAN2 */ break; \
611 case 5600000: ch = 120; /* HiperLAN2 */ break; \
612 case 5620000: ch = 124; /* HiperLAN2 */ break; \
613 case 5640000: ch = 128; /* HiperLAN2 */ break; \
614 case 5660000: ch = 132; /* HiperLAN2 */ break; \
615 case 5680000: ch = 136; /* HiperLAN2 */ break; \
616 case 5700000: ch = 140; /* HiperLAN2 */ break; \
617 case 5170000: ch = 34; /* Japan MMAC */ break; \
618 case 5190000: ch = 38; /* Japan MMAC */ break; \
619 case 5210000: ch = 42; /* Japan MMAC */ break; \
620 case 5230000: ch = 46; /* Japan MMAC */ break; \
621 case 4920000: ch = 184; /* Japan */ break; \
622 case 4940000: ch = 188; /* Japan */ break; \
623 case 4960000: ch = 192; /* Japan */ break; \
624 case 4980000: ch = 196; /* Japan */ break; \
625 case 5040000: ch = 208; /* Japan, means J08 */ break; \
626 case 5060000: ch = 212; /* Japan, means J12 */ break; \
627 case 5080000: ch = 216; /* Japan, means J16 */ break; \
628 default: ch = 1; break; \
633 // Common fragment list structure - Identical to the scatter gather frag list structure
635 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
636 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
637 #define NIC_MAX_PHYS_BUF_COUNT 8
639 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
643 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
646 typedef struct _RTMP_SCATTER_GATHER_LIST {
647 ULONG NumberOfElements;
649 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
650 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
653 // Some utility macros
656 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
660 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
663 #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))))
665 #define INC_COUNTER64(Val) (Val.QuadPart++)
667 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
668 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
669 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
670 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
672 // Check LEAP & CCKM flags
673 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
674 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
676 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
677 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
679 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
681 _pExtraLlcSnapEncap = SNAP_802_1H; \
682 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
683 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
685 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
690 _pExtraLlcSnapEncap = NULL; \
694 // New Define for new Tx Path.
695 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
697 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
699 _pExtraLlcSnapEncap = SNAP_802_1H; \
700 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
701 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
703 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
708 _pExtraLlcSnapEncap = NULL; \
713 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
715 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
716 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
717 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
720 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
721 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
722 // else remove the LLC/SNAP field from the result Ethernet frame
723 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
725 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
726 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
727 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
731 _pRemovedLLCSNAP = NULL; \
732 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
733 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
735 PUCHAR pProto = _pData + 6; \
737 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
738 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
740 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
741 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
742 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
746 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
747 _pRemovedLLCSNAP = _pData; \
748 _DataSize -= LENGTH_802_1_H; \
749 _pData += LENGTH_802_1_H; \
754 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
755 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
756 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
760 #define SWITCH_AB( _pAA, _pBB) \
768 // Enqueue this frame to MLME engine
769 // We need to enqueue the whole frame because MLME need to pass data type
770 // information from 802.11 header
772 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
774 UINT32 High32TSF=0, Low32TSF=0; \
775 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
780 //Need to collect each ant's rssi concurrently
781 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
782 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
786 if (_pAd->RxAnt.EvaluatePeriod == 0) \
788 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
789 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
791 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
793 AvgRssi = _rssi1 << 3; \
794 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
798 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
799 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
800 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
801 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
804 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
805 AvgRssi = _rssi1 << 3; \
807 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
808 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
814 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
815 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
817 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
818 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
821 // Check if it is Japan W53(ch52,56,60,64) channel.
823 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
825 #ifdef CONFIG_STA_SUPPORT
826 #define STA_PORT_SECURED(_pAd) \
828 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
829 NdisAcquireSpinLock(&_pAd->MacTabLock); \
830 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
831 NdisReleaseSpinLock(&_pAd->MacTabLock); \
833 #endif // CONFIG_STA_SUPPORT //
837 // Register set pair for initialzation register set definition
839 typedef struct _RTMP_REG_PAIR
843 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
845 typedef struct _REG_PAIR
849 } REG_PAIR, *PREG_PAIR;
852 // Register set pair for initialzation register set definition
854 typedef struct _RTMP_RF_REGS
861 } RTMP_RF_REGS, *PRTMP_RF_REGS;
863 typedef struct _FREQUENCY_ITEM {
868 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
871 // Data buffer for DMA operation, the buffer must be contiguous physical memory
872 // Both DMA to / from CPU use the same structure.
874 typedef struct _RTMP_DMABUF
877 PVOID AllocVa; // TxBuf virtual address
878 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
879 } RTMP_DMABUF, *PRTMP_DMABUF;
882 typedef union _HEADER_802_11_SEQ{
895 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
898 // Data buffer for DMA operation, the buffer must be contiguous physical memory
899 // Both DMA to / from CPU use the same structure.
901 typedef struct _RTMP_REORDERBUF
904 PVOID AllocVa; // TxBuf virtual address
905 UCHAR Header802_3[14];
906 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
913 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
916 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
917 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
918 // which won't be released, driver has to wait until upper layer return the packet
919 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
920 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
921 // which driver should ACK upper layer when the tx is physically done or failed.
923 typedef struct _RTMP_DMACB
925 ULONG AllocSize; // Control block size
926 PVOID AllocVa; // Control block virtual address
927 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
928 PNDIS_PACKET pNdisPacket;
929 PNDIS_PACKET pNextNdisPacket;
931 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
932 } RTMP_DMACB, *PRTMP_DMACB;
934 typedef struct _RTMP_TX_BUF
938 ULONG AllocSize; // Control block size
939 PVOID AllocVa; // Control block virtual address
940 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
941 } RTMP_TXBUF, *PRTMP_TXBUF;
943 typedef struct _RTMP_RX_BUF
947 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
948 } RTMP_RXBUF, *PRTMP_RXBUF;
949 typedef struct _RTMP_TX_RING
951 RTMP_DMACB Cell[TX_RING_SIZE];
954 UINT32 TxSwFreeIdx; // software next free tx index
955 } RTMP_TX_RING, *PRTMP_TX_RING;
957 typedef struct _RTMP_RX_RING
959 RTMP_DMACB Cell[RX_RING_SIZE];
962 INT32 RxSwReadIdx; // software next read index
963 } RTMP_RX_RING, *PRTMP_RX_RING;
965 typedef struct _RTMP_MGMT_RING
967 RTMP_DMACB Cell[MGMT_RING_SIZE];
970 UINT32 TxSwFreeIdx; // software next free tx index
971 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
974 // Statistic counter structure
976 typedef struct _COUNTER_802_3
986 ULONG RcvAlignmentErrors;
988 ULONG MoreCollisions;
990 } COUNTER_802_3, *PCOUNTER_802_3;
992 typedef struct _COUNTER_802_11 {
994 LARGE_INTEGER LastTransmittedFragmentCount;
995 LARGE_INTEGER TransmittedFragmentCount;
996 LARGE_INTEGER MulticastTransmittedFrameCount;
997 LARGE_INTEGER FailedCount;
998 LARGE_INTEGER RetryCount;
999 LARGE_INTEGER MultipleRetryCount;
1000 LARGE_INTEGER RTSSuccessCount;
1001 LARGE_INTEGER RTSFailureCount;
1002 LARGE_INTEGER ACKFailureCount;
1003 LARGE_INTEGER FrameDuplicateCount;
1004 LARGE_INTEGER ReceivedFragmentCount;
1005 LARGE_INTEGER MulticastReceivedFrameCount;
1006 LARGE_INTEGER FCSErrorCount;
1007 } COUNTER_802_11, *PCOUNTER_802_11;
1009 typedef struct _COUNTER_RALINK {
1010 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1011 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1012 ULONG BeenDisassociatedCount;
1013 ULONG BadCQIAutoRecoveryCount;
1014 ULONG PoorCQIRoamingCount;
1015 ULONG MgmtRingFullCount;
1016 ULONG RxCountSinceLastNULL;
1018 ULONG RxRingErrCount;
1020 ULONG TxRingErrCount;
1021 LARGE_INTEGER RealFcsErrCount;
1022 ULONG PendingNdisPacketCount;
1024 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1025 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1026 UINT32 OneSecTxDoneCount;
1027 ULONG OneSecRxCount;
1028 UINT32 OneSecTxAggregationCount;
1029 UINT32 OneSecRxAggregationCount;
1031 UINT32 OneSecFrameDuplicateCount;
1034 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1037 UINT32 OneSecTxNoRetryOkCount;
1038 UINT32 OneSecTxRetryOkCount;
1039 UINT32 OneSecTxFailCount;
1040 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1041 UINT32 OneSecRxOkCnt; // RX without error
1042 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1043 UINT32 OneSecRxFcsErrCnt; // CRC error
1044 UINT32 OneSecBeaconSentCnt;
1045 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1046 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1049 ULONG TxNonAggCount;
1050 ULONG TxAgg1MPDUCount;
1051 ULONG TxAgg2MPDUCount;
1052 ULONG TxAgg3MPDUCount;
1053 ULONG TxAgg4MPDUCount;
1054 ULONG TxAgg5MPDUCount;
1055 ULONG TxAgg6MPDUCount;
1056 ULONG TxAgg7MPDUCount;
1057 ULONG TxAgg8MPDUCount;
1058 ULONG TxAgg9MPDUCount;
1059 ULONG TxAgg10MPDUCount;
1060 ULONG TxAgg11MPDUCount;
1061 ULONG TxAgg12MPDUCount;
1062 ULONG TxAgg13MPDUCount;
1063 ULONG TxAgg14MPDUCount;
1064 ULONG TxAgg15MPDUCount;
1065 ULONG TxAgg16MPDUCount;
1067 LARGE_INTEGER TransmittedOctetsInAMSDU;
1068 LARGE_INTEGER TransmittedAMSDUCount;
1069 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1070 LARGE_INTEGER ReceivedAMSDUCount;
1071 LARGE_INTEGER TransmittedAMPDUCount;
1072 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1073 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1074 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1075 } COUNTER_RALINK, *PCOUNTER_RALINK;
1077 typedef struct _PID_COUNTER {
1078 ULONG TxAckRequiredCount; // CRC error
1080 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1081 ULONG LastSuccessRate;
1082 } PID_COUNTER, *PPID_COUNTER;
1084 typedef struct _COUNTER_DRS {
1085 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1086 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1087 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1088 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1089 ULONG CurrTxRateStableTime; // # of second in current TX rate
1090 BOOLEAN fNoisyEnvironment;
1091 BOOLEAN fLastSecAccordingRSSI;
1092 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1093 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1094 ULONG LastTxOkCount;
1095 } COUNTER_DRS, *PCOUNTER_DRS;
1098 // Arcfour Structure Added by PaulWu
1100 typedef struct _ARCFOUR
1105 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1107 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1108 typedef struct _RECEIVE_SETTING {
1109 #ifdef RT_BIG_ENDIAN
1113 USHORT STBC:2; //SPACE
1115 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1116 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1118 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1119 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1121 USHORT STBC:2; //SPACE
1126 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1128 // Shared key data structure
1129 typedef struct _WEP_KEY {
1130 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1131 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1132 } WEP_KEY, *PWEP_KEY;
1134 typedef struct _CIPHER_KEY {
1135 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1136 UCHAR RxMic[8]; // make alignment
1138 UCHAR TxTsc[6]; // 48bit TSC value
1139 UCHAR RxTsc[6]; // 48bit TSC value
1140 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1142 #ifdef CONFIG_STA_SUPPORT
1144 #endif // CONFIG_STA_SUPPORT //
1145 // Key length for each key, 0: entry is invalid
1146 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1147 } CIPHER_KEY, *PCIPHER_KEY;
1149 typedef struct _BBP_TUNING_STRUCT {
1151 UCHAR FalseCcaCountUpperBound; // 100 per sec
1152 UCHAR FalseCcaCountLowerBound; // 10 per sec
1153 UCHAR R17LowerBound; // specified in E2PROM
1154 UCHAR R17UpperBound; // 0x68 according to David Tung
1155 UCHAR CurrentR17Value;
1156 } BBP_TUNING, *PBBP_TUNING;
1158 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1159 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1160 UCHAR EvaluateStableCnt;
1161 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1162 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1163 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1164 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1165 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1166 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1167 SHORT Pair1LastAvgRssi; //
1168 SHORT Pair2LastAvgRssi; //
1169 ULONG RcvPktNumWhenEvaluate;
1170 BOOLEAN FirstPktArrivedWhenEvaluate;
1171 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1172 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1174 typedef struct _LEAP_AUTH_INFO {
1175 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1176 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1178 UCHAR UserName[256]; //LEAP, User name
1180 UCHAR Password[256]; //LEAP, User Password
1182 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1185 UCHAR Addr[MAC_ADDR_LEN];
1186 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1187 //00 02-Authentication timeout
1188 //00 03-Challenge from AP failed
1189 //00 04-Challenge to AP failed
1191 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1195 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1196 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1202 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1205 // Receive Tuple Cache Format
1207 typedef struct _TUPLE_CACHE {
1209 UCHAR MacAddress[MAC_ADDR_LEN];
1212 } TUPLE_CACHE, *PTUPLE_CACHE;
1215 // Fragment Frame structure
1217 typedef struct _FRAGMENT_FRAME {
1218 PNDIS_PACKET pFragPacket;
1222 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1223 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1227 // Packet information for NdisQueryPacket
1229 typedef struct _PACKET_INFO {
1230 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1231 UINT BufferCount ; // Number of Buffer descriptor chained
1232 UINT TotalPacketLength ; // Self explained
1233 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1234 } PACKET_INFO, *PPACKET_INFO;
1237 // Tkip Key structure which RC4 key & MIC calculation
1239 typedef struct _TKIP_KEY_INFO {
1240 UINT nBytesInM; // # bytes in M for MICKEY
1243 ULONG K0; // for MICKEY Low
1244 ULONG K1; // for MICKEY Hig
1245 ULONG L; // Current state for MICKEY
1246 ULONG R; // Current state for MICKEY
1247 ULONG M; // Message accumulator for MICKEY
1250 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1253 // Private / Misc data, counters for driver internal use
1255 typedef struct __PRIVATE_STRUC {
1256 UINT SystemResetCnt; // System reset counter
1257 UINT TxRingFullCnt; // Tx ring full occurrance number
1258 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1259 // Variables for WEP encryption / decryption in rtmp_wep.c
1261 ARCFOURCONTEXT WEPCONTEXT;
1265 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1267 // structure to tune BBP R66 (BBP TUNING)
1268 typedef struct _BBP_R66_TUNING {
1270 USHORT FalseCcaLowerThreshold; // default 100
1271 USHORT FalseCcaUpperThreshold; // default 512
1273 UCHAR R66CurrentValue;
1274 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1275 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1277 // structure to store channel TX power
1278 typedef struct _CHANNEL_TX_POWER {
1279 USHORT RemainingTimeForUse; //unit: sec
1281 #ifdef DOT11N_DRAFT3
1282 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1283 #endif // DOT11N_DRAFT3 //
1288 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1290 // structure to store 802.11j channel TX power
1291 typedef struct _CHANNEL_11J_TX_POWER {
1293 UCHAR BW; // BW_10 or BW_20
1296 USHORT RemainingTimeForUse; //unit: sec
1297 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1299 typedef enum _ABGBAND_STATE_ {
1305 typedef struct _MLME_STRUCT {
1306 #ifdef CONFIG_STA_SUPPORT
1307 // STA state machines
1308 STATE_MACHINE CntlMachine;
1309 STATE_MACHINE AssocMachine;
1310 STATE_MACHINE AuthMachine;
1311 STATE_MACHINE AuthRspMachine;
1312 STATE_MACHINE SyncMachine;
1313 STATE_MACHINE WpaPskMachine;
1314 STATE_MACHINE LeapMachine;
1315 STATE_MACHINE AironetMachine;
1316 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1317 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1318 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1319 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1320 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1321 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1322 #endif // CONFIG_STA_SUPPORT //
1323 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1325 STATE_MACHINE ActMachine;
1328 #ifdef QOS_DLS_SUPPORT
1329 STATE_MACHINE DlsMachine;
1330 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1331 #endif // QOS_DLS_SUPPORT //
1336 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1337 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1338 ULONG LastSendNULLpsmTime;
1341 NDIS_SPIN_LOCK TaskLock;
1346 RALINK_TIMER_STRUCT PeriodicTimer;
1347 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1348 RALINK_TIMER_STRUCT LinkDownTimer;
1349 RALINK_TIMER_STRUCT LinkUpTimer;
1350 ULONG PeriodicRound;
1351 ULONG OneSecPeriodicRound;
1354 BOOLEAN bLowThroughput;
1355 BOOLEAN bEnableAutoAntennaCheck;
1356 RALINK_TIMER_STRUCT RxAntEvalTimer;
1359 UCHAR CaliBW40RfR24;
1360 UCHAR CaliBW20RfR24;
1363 } MLME_STRUCT, *PMLME_STRUCT;
1365 // structure for radar detection and channel switch
1366 typedef struct _RADAR_DETECT_STRUCT {
1367 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1368 UCHAR CSCount; //Channel switch counter
1369 UCHAR CSPeriod; //Channel switch period (beacon count)
1370 UCHAR RDCount; //Radar detection counter
1371 UCHAR RDMode; //Radar Detection mode
1372 UCHAR RDDurRegion; //Radar detection duration region
1379 ULONG InServiceMonitorCount; // unit: sec
1380 UINT8 DfsSessionTime;
1383 UINT8 LongPulseRadarTh;
1384 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1386 typedef enum _REC_BLOCKACK_STATUS
1390 Recipient_HandleRes,
1392 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1394 typedef enum _ORI_BLOCKACK_STATUS
1400 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1402 #ifdef DOT11_N_SUPPORT
1403 typedef struct _BA_ORI_ENTRY{
1408 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1410 USHORT TimeOutValue;
1411 ORI_BLOCKACK_STATUS ORI_BA_Status;
1412 RALINK_TIMER_STRUCT ORIBATimer;
1414 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1416 typedef struct _BA_REC_ENTRY {
1419 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1421 //UCHAR Curindidx; // the head in the RX reordering buffer
1423 // USHORT LastIndSeqAtTimer;
1424 USHORT TimeOutValue;
1425 RALINK_TIMER_STRUCT RECBATimer;
1426 ULONG LastIndSeqAtTimer;
1429 REC_BLOCKACK_STATUS REC_BA_Status;
1430 // UCHAR RxBufIdxUsed;
1431 // corresponding virtual address for RX reordering packet storage.
1432 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1433 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1434 // struct _BA_REC_ENTRY *pNext;
1436 struct reordering_list list;
1437 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1441 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1442 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1443 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1444 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1445 } BA_TABLE, *PBA_TABLE;
1447 //For QureyBATableOID use;
1448 typedef struct PACKED _OID_BA_REC_ENTRY{
1449 UCHAR MACAddr[MAC_ADDR_LEN];
1450 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1453 REC_BLOCKACK_STATUS REC_BA_Status[8];
1454 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1456 //For QureyBATableOID use;
1457 typedef struct PACKED _OID_BA_ORI_ENTRY{
1458 UCHAR MACAddr[MAC_ADDR_LEN];
1459 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
1462 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1463 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1465 typedef struct _QUERYBA_TABLE{
1466 OID_BA_ORI_ENTRY BAOriEntry[32];
1467 OID_BA_REC_ENTRY BARecEntry[32];
1468 UCHAR OriNum;// Number of below BAOriEntry
1469 UCHAR RecNum;// Number of below BARecEntry
1470 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1472 typedef union _BACAP_STRUC {
1473 #ifdef RT_BIG_ENDIAN
1476 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.
1477 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1478 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1479 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1480 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1481 UINT32 MpduDensity:3;
1482 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1483 UINT32 AutoBA:1; // automatically BA
1484 UINT32 TxBAWinLimit:8;
1485 UINT32 RxBAWinLimit:8;
1489 UINT32 RxBAWinLimit:8;
1490 UINT32 TxBAWinLimit:8;
1491 UINT32 AutoBA:1; // automatically BA
1492 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1493 UINT32 MpduDensity:3;
1494 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1495 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1496 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1497 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1498 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.
1503 } BACAP_STRUC, *PBACAP_STRUC;
1504 #endif // DOT11_N_SUPPORT //
1506 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1507 typedef struct _IOT_STRUC {
1509 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1510 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1511 ULONG OneSecInWindowCount;
1512 ULONG OneSecFrameDuplicateCount;
1513 ULONG OneSecOutWindowCount;
1518 BOOLEAN bRTSLongProtOn;
1519 #ifdef CONFIG_STA_SUPPORT
1520 BOOLEAN bLastAtheros;
1521 BOOLEAN bCurrentAtheros;
1522 BOOLEAN bNowAtherosBurstOn;
1523 BOOLEAN bNextDisableRxBA;
1525 #endif // CONFIG_STA_SUPPORT //
1526 } IOT_STRUC, *PIOT_STRUC;
1528 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1529 typedef union _REG_TRANSMIT_SETTING {
1530 #ifdef RT_BIG_ENDIAN
1536 UINT32 STBC:1; //SPACE
1538 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1539 UINT32 TxBF:1; // 3*3
1541 //UINT32 MCS:7; // MCS
1547 //UINT32 MCS:7; // MCS
1550 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1552 UINT32 STBC:1; //SPACE
1560 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1562 typedef union _DESIRED_TRANSMIT_SETTING {
1563 #ifdef RT_BIG_ENDIAN
1566 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1568 USHORT MCS:7; // MCS
1572 USHORT MCS:7; // MCS
1574 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1579 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1582 BOOLEAN IsRecipient;
1583 UCHAR MACAddr[MAC_ADDR_LEN];
1587 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1588 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1591 // Multiple SSID structure
1593 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1594 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1596 /* clear bcmc TIM bit */
1597 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1598 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1600 /* set bcmc TIM bit */
1601 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1602 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1604 /* clear a station PS TIM bit */
1605 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1606 { UCHAR tim_offset = wcid >> 3; \
1607 UCHAR bit_offset = wcid & 0x7; \
1608 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1610 /* set a station PS TIM bit */
1611 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1612 { UCHAR tim_offset = wcid >> 3; \
1613 UCHAR bit_offset = wcid & 0x7; \
1614 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1617 #define BEACON_BITMAP_MASK 0xff
1618 typedef struct _BEACON_SYNC_STRUCT_
1620 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1621 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1622 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1623 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1624 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1625 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1626 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1627 }BEACON_SYNC_STRUCT;
1630 typedef struct _MULTISSID_STRUCT {
1631 UCHAR Bssid[MAC_ADDR_LEN];
1633 CHAR Ssid[MAX_LEN_OF_SSID];
1634 USHORT CapabilityInfo;
1638 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1639 NDIS_802_11_WEP_STATUS WepStatus;
1640 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1641 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1645 ULONG ReceivedByteCount;
1646 ULONG TransmittedByteCount;
1650 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1651 RT_HT_PHY_INFO DesiredHtPhyInfo;
1652 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1653 BOOLEAN bAutoTxRateSwitch;
1655 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1658 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1659 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1660 UCHAR DesiredRatesIndex;
1661 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1663 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1664 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1665 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1675 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1676 UCHAR BANClass3Data;
1677 ULONG IsolateInterStaTraffic;
1680 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1683 UCHAR TimIELocationInBeacon;
1684 UCHAR CapabilityInfoLocationInBeacon;
1685 // outgoing BEACON frame buffer and corresponding TXWI
1686 // PTXWI_STRUC BeaconTxWI; //
1687 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1690 UINT16 StationKeepAliveTime; // unit: second
1693 USHORT VLAN_Priority;
1695 RT_802_11_ACL AccessControlList;
1698 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1699 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1701 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1703 // For 802.1x daemon setting per BSS
1704 UCHAR radius_srv_num;
1705 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1708 unsigned int mylinkid;
1712 UINT32 RcvdConflictSsidCount;
1713 UINT32 RcvdSpoofedAssocRespCount;
1714 UINT32 RcvdSpoofedReassocRespCount;
1715 UINT32 RcvdSpoofedProbeRespCount;
1716 UINT32 RcvdSpoofedBeaconCount;
1717 UINT32 RcvdSpoofedDisassocCount;
1718 UINT32 RcvdSpoofedAuthCount;
1719 UINT32 RcvdSpoofedDeauthCount;
1720 UINT32 RcvdSpoofedUnknownMgmtCount;
1721 UINT32 RcvdReplayAttackCount;
1723 CHAR RssiOfRcvdConflictSsid;
1724 CHAR RssiOfRcvdSpoofedAssocResp;
1725 CHAR RssiOfRcvdSpoofedReassocResp;
1726 CHAR RssiOfRcvdSpoofedProbeResp;
1727 CHAR RssiOfRcvdSpoofedBeacon;
1728 CHAR RssiOfRcvdSpoofedDisassoc;
1729 CHAR RssiOfRcvdSpoofedAuth;
1730 CHAR RssiOfRcvdSpoofedDeauth;
1731 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1732 CHAR RssiOfRcvdReplayAttack;
1736 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1740 #ifdef DOT11N_DRAFT3
1741 typedef enum _BSS2040COEXIST_FLAG{
1742 BSS_2040_COEXIST_DISABLE = 0,
1743 BSS_2040_COEXIST_TIMER_FIRED = 1,
1744 BSS_2040_COEXIST_INFO_SYNC = 2,
1745 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1746 }BSS2040COEXIST_FLAG;
1747 #endif // DOT11N_DRAFT3 //
1749 // configuration common to OPMODE_AP as well as OPMODE_STA
1750 typedef struct _COMMON_CONFIG {
1752 BOOLEAN bCountryFlag;
1753 UCHAR CountryCode[3];
1755 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1756 UCHAR CountryRegionForABand; // Enum of country region for A band
1757 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1758 USHORT Dsifs; // in units of usec
1759 ULONG PacketFilter; // Packet filter for receiving
1761 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1762 UCHAR SsidLen; // the actual ssid length in used
1763 UCHAR LastSsidLen; // the actual ssid length in used
1764 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1765 UCHAR LastBssid[MAC_ADDR_LEN];
1767 UCHAR Bssid[MAC_ADDR_LEN];
1768 USHORT BeaconPeriod;
1770 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1772 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1774 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1776 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1777 UCHAR MaxDesiredRate;
1778 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1780 ULONG BasicRateBitmap; // backup basic ratebitmap
1782 BOOLEAN bAPSDCapable;
1783 BOOLEAN bInServicePeriod;
1788 BOOLEAN bNeedSendTriggerFrame;
1789 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1790 ULONG TriggerTimerCount;
1792 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1793 // move to MULTISSID_STRUCT for MBSS
1794 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1795 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1796 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1797 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1798 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1799 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1800 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1801 //BOOLEAN bAutoTxRateSwitch;
1802 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1803 UCHAR RtsRate; // RATE_xxx
1804 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1805 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1806 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1808 USHORT RtsThreshold; // in unit of BYTE
1809 USHORT FragmentThreshold; // in unit of BYTE
1811 UCHAR TxPower; // in unit of mW
1812 ULONG TxPowerPercentage; // 0~100 %
1813 ULONG TxPowerDefault; // keep for TxPowerPercentage
1815 #ifdef DOT11_N_SUPPORT
1816 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1817 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1818 #endif // DOT11_N_SUPPORT //
1819 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1820 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1821 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1822 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1823 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1824 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1825 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1826 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1827 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1828 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1830 #ifdef DOT11_N_SUPPORT
1832 #endif // DOT11_N_SUPPORT //
1833 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1834 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1835 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1836 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1837 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1838 #ifdef CONFIG_STA_SUPPORT
1839 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1840 #endif // CONFIG_STA_SUPPORT //
1841 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1842 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1843 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1844 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1845 ULONG OpStatusFlags;
1847 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1848 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1849 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1851 // IEEE802.11H--DFS.
1852 RADAR_DETECT_STRUCT RadarDetect;
1854 #ifdef DOT11_N_SUPPORT
1856 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1857 //RT_HT_CAPABILITY SupportedHtPhy;
1858 RT_HT_CAPABILITY DesiredHtPhy;
1859 HT_CAPABILITY_IE HtCapability;
1860 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1861 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1862 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1863 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
1865 #ifdef DOT11N_DRAFT3
1866 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1867 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1869 //This IE is used for 20/40 BSS Coexistence.
1870 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1871 // ====== 11n D3.0 =======================>
1872 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1873 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1874 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1875 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1876 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1877 USHORT Dot11BssWidthChanTranDelayFactor;
1878 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1880 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1881 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1883 NDIS_SPIN_LOCK TriggerEventTabLock;
1884 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1885 BSS_2040_COEXIST_IE BSSCoexist2040;
1886 TRIGGER_EVENT_TAB TriggerEventTab;
1887 UCHAR ChannelListIdx;
1888 // <====== 11n D3.0 =======================
1889 BOOLEAN bOverlapScanning;
1890 #endif // DOT11N_DRAFT3 //
1893 BOOLEAN bMIMOPSEnable;
1895 BOOLEAN bDisableReordering;
1896 BOOLEAN bForty_Mhz_Intolerant;
1897 BOOLEAN bExtChannelSwitchAnnouncement;
1898 BOOLEAN bRcvBSSWidthTriggerEvents;
1899 ULONG LastRcvBSSWidthTriggerEventsTime;
1902 #endif // DOT11_N_SUPPORT //
1904 // Enable wireless event
1905 BOOLEAN bWirelessEvent;
1906 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1908 // Tx & Rx Stream number selection
1912 // transmit phy mode, trasmit rate for Multicast.
1913 #ifdef MCAST_RATE_SPECIFIC
1914 UCHAR McastTransmitMcs;
1915 UCHAR McastTransmitPhyMode;
1916 #endif // MCAST_RATE_SPECIFIC //
1918 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1921 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1922 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1923 RT_HT_CAPABILITY SupportedHtPhy;
1924 ULONG MaxPktOneTxBulk;
1928 BEACON_SYNC_STRUCT *pBeaconSync;
1929 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1930 UINT32 BeaconAdjust;
1931 UINT32 BeaconFactor;
1932 UINT32 BeaconRemain;
1936 NDIS_SPIN_LOCK MeasureReqTabLock;
1937 PMEASURE_REQ_TAB pMeasureReqTab;
1939 NDIS_SPIN_LOCK TpcReqTabLock;
1940 PTPC_REQ_TAB pTpcReqTab;
1942 // transmit phy mode, trasmit rate for Multicast.
1943 #ifdef MCAST_RATE_SPECIFIC
1944 HTTRANSMIT_SETTING MCastPhyMode;
1945 #endif // MCAST_RATE_SPECIFIC //
1948 UINT16 DefineMaxTxPwr;
1949 #endif // SINGLE_SKU //
1952 } COMMON_CONFIG, *PCOMMON_CONFIG;
1955 #ifdef CONFIG_STA_SUPPORT
1956 /* Modified by Wu Xi-Kun 4/21/2006 */
1957 // STA configuration and status
1958 typedef struct _STA_ADMIN_CONFIG {
1960 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1961 // the user intended configuration, but not necessary fully equal to the final
1962 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1963 // AP or IBSS holder).
1964 // Once initialized, user configuration can only be changed via OID_xxx
1965 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1966 USHORT AtimWin; // used when starting a new IBSS
1969 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1970 // the user intended configuration, and should be always applied to the final
1971 // settings in ACTIVE BSS without compromising with the BSS holder.
1972 // Once initialized, user configuration can only be changed via OID_xxx
1974 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1975 USHORT DefaultListenCount; // default listen count;
1976 ULONG WindowsPowerMode; // Power mode for AC power
1977 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1978 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1979 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1980 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1982 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1983 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1984 USHORT DisassocReason;
1985 UCHAR DisassocSta[MAC_ADDR_LEN];
1986 USHORT DeauthReason;
1987 UCHAR DeauthSta[MAC_ADDR_LEN];
1988 USHORT AuthFailReason;
1989 UCHAR AuthFailSta[MAC_ADDR_LEN];
1991 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1992 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1993 NDIS_802_11_WEP_STATUS WepStatus;
1994 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1996 // Add to support different cipher suite for WPA2/WPA mode
1997 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1998 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1999 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2000 USHORT RsnCapability;
2002 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2004 UCHAR PMK[32]; // WPA PSK mode PMK
2005 UCHAR PTK[64]; // WPA PSK mode PTK
2006 UCHAR GTK[32]; // GTK from authenticator
2007 BSSID_INFO SavedPMK[PMKID_NO];
2008 UINT SavedPMKNum; // Saved PMKID number
2013 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2016 // For WPA countermeasures
2017 ULONG LastMicErrorTime; // record last MIC error time
2018 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2019 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2020 // For WPA-PSK supplicant state
2021 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2022 UCHAR ReplayCounter[8];
2023 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2024 UCHAR SNonce[32]; // SNonce for WPA-PSK
2026 UCHAR LastSNR0; // last received BEACON's SNR
2027 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2028 RSSI_SAMPLE RssiSample;
2029 ULONG NumOfAvgRssiSample;
2031 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2032 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2033 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2034 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2036 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2037 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2038 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2039 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2040 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2041 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2042 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2044 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2045 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2046 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2048 // New for WPA, windows want us to to keep association information and
2049 // Fixed IEs from last association response
2050 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2051 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2052 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2053 USHORT ResVarIELen; // Length of next VIE include EID & Length
2054 UCHAR ResVarIEs[MAX_VIE_LEN];
2057 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2059 // New variables used for CCX 1.0
2061 BOOLEAN bCkipCmicOn;
2063 UCHAR GIV[3]; //for CCX iv
2068 LEAP_AUTH_INFO LeapAuthInfo;
2070 UCHAR NetworkChallenge[8];
2071 UCHAR NetworkChallengeResponse[24];
2072 UCHAR PeerChallenge[8];
2074 UCHAR PeerChallengeResponse[24];
2075 UCHAR SessionKey[16]; //Network session keys (NSK)
2076 RALINK_TIMER_STRUCT LeapAuthTimer;
2077 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2079 // New control flags for CCX
2080 CCX_CONTROL CCXControl; // Master administration state
2081 BOOLEAN CCXEnable; // Actual CCX state
2082 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2083 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2084 UCHAR CCXReqType; // Current processing CCX request type
2085 BSS_TABLE CCXBssTab; // BSS Table
2086 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2087 USHORT FrameReportLen; // Current Frame report length
2088 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2089 USHORT RPIDensity[8]; // Array for RPI density collection
2090 // Start address of each BSS table within FrameReportBuf
2091 // It's important to update the RxPower of the corresponding Bss
2092 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2093 USHORT BeaconToken; // Token for beacon report
2094 ULONG LastBssIndex; // Most current reported Bss index
2095 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2096 UCHAR RMReqCnt; // Number of measurement request saved.
2097 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2098 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2099 // It must be the same channel with maximum duration
2100 USHORT ParallelDuration; // Maximum duration for parallel measurement
2101 UCHAR ParallelChannel; // Only one channel with parallel measurement
2102 USHORT IAPPToken; // IAPP dialog token
2103 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2104 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2105 // Hack for channel load and noise histogram parameters
2106 UCHAR NHFactor; // Parameter for Noise histogram
2107 UCHAR CLFactor; // Parameter for channel load
2109 UCHAR KRK[16]; //Key Refresh Key.
2110 UCHAR BTK[32]; //Base Transient Key
2111 BOOLEAN CCKMLinkUpFlag;
2112 ULONG CCKMRN; //(Re)Association request number.
2113 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2114 UCHAR AironetCellPowerLimit; //in dBm
2115 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2116 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2117 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2118 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2119 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2120 USHORT CCXAdjacentAPChannel;
2121 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2123 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2124 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2126 UCHAR DtimCount; // 0.. DtimPeriod-1
2127 UCHAR DtimPeriod; // default = 3
2129 #ifdef QOS_DLS_SUPPORT
2130 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2131 UCHAR DlsReplayCounter[8];
2132 #endif // QOS_DLS_SUPPORT //
2133 ////////////////////////////////////////////////////////////////////////////////////////
2134 // This is only for WHQL test.
2136 ////////////////////////////////////////////////////////////////////////////////////////
2138 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2140 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2141 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2143 #ifdef WPA_SUPPLICANT_SUPPORT
2145 BOOLEAN IEEE8021x_required_keys;
2146 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2147 UCHAR DesireSharedKeyId;
2149 // 0: driver ignores wpa_supplicant
2150 // 1: wpa_supplicant initiates scanning and AP selection
2151 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2152 UCHAR WpaSupplicantUP;
2153 UCHAR WpaSupplicantScanCount;
2154 #endif // WPA_SUPPLICANT_SUPPORT //
2159 BOOLEAN bTGnWifiTest;
2160 BOOLEAN bScanReqIsFromWebUI;
2162 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2163 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2164 RT_HT_PHY_INFO DesiredHtPhyInfo;
2165 BOOLEAN bAutoTxRateSwitch;
2168 #ifdef EXT_BUILD_CHANNEL_LIST
2169 UCHAR IEEE80211dClientMode;
2170 UCHAR StaOriCountryCode[3];
2171 UCHAR StaOriGeography;
2172 #endif // EXT_BUILD_CHANNEL_LIST //
2173 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2175 // This data structure keep the current active BSS/IBSS's configuration that this STA
2176 // had agreed upon joining the network. Which means these parameters are usually decided
2177 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2178 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2179 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2180 // the current active settings.
2181 typedef struct _STA_ACTIVE_CONFIG {
2183 USHORT AtimWin; // in kusec; IBSS parameter set element
2184 USHORT CapabilityInfo;
2185 USHORT CfpMaxDuration;
2188 // Copy supported rate from desired AP's beacon. We are trying to match
2189 // AP's supported and extended rate settings.
2190 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2191 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2194 // Copy supported ht from desired AP's beacon. We are trying to match
2195 RT_HT_PHY_INFO SupportedPhyInfo;
2196 RT_HT_CAPABILITY SupportedHtPhy;
2197 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2198 #endif // CONFIG_STA_SUPPORT //
2201 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2202 NDIS_802_11_MAC_ADDRESS MacAddr;
2203 USHORT MacTabMatchWCID; // ASIC
2204 CIPHER_KEY CipherKey;
2205 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2208 // ----------- start of AP --------------------------
2209 // AUTH-RSP State Machine Aux data structure
2210 typedef struct _AP_MLME_AUX {
2211 UCHAR Addr[MAC_ADDR_LEN];
2213 CHAR Challenge[CIPHER_TEXT_LEN];
2214 } AP_MLME_AUX, *PAP_MLME_AUX;
2216 // structure to define WPA Group Key Rekey Interval
2217 typedef struct PACKED _RT_802_11_WPA_REKEY {
2218 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2219 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2220 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2222 typedef struct _MAC_TABLE_ENTRY {
2223 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2224 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2225 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2226 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2227 BOOLEAN ValidAsMesh;
2228 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2230 BOOLEAN bIAmBadAtheros;
2232 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2234 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2235 UCHAR CMTimerRunning;
2236 UCHAR apidx; // MBSS number
2238 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2239 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2240 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2243 RALINK_TIMER_STRUCT RetryTimer;
2244 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2245 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2246 NDIS_802_11_WEP_STATUS WepStatus;
2247 AP_WPA_STATE WpaState;
2250 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2251 CIPHER_KEY PairwiseKey;
2254 UCHAR PMKID[LEN_PMKID];
2257 UCHAR Addr[MAC_ADDR_LEN];
2260 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2261 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2263 USHORT CapabilityInfo;
2265 ULONG NoDataIdleCount;
2266 UINT16 StationKeepAliveCount; // unit: second
2268 QUEUE_HEADER PsQueue;
2270 UINT32 StaConnectTime; // the live time of this station since associated with AP
2273 #ifdef DOT11_N_SUPPORT
2275 USHORT NoBADataCountDown;
2277 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2278 UINT TxBFCount; // 3*3
2279 #endif // DOT11_N_SUPPORT //
2281 UINT DebugFIFOCount;
2286 //====================================================
2287 //WDS entry needs these
2288 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2289 UINT MatchWDSTabIdx;
2290 UCHAR MaxSupportedRate;
2292 UCHAR CurrTxRateIndex;
2293 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2294 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2295 // USHORT OneSecTxOkCount;
2296 UINT32 OneSecTxNoRetryOkCount;
2297 UINT32 OneSecTxRetryOkCount;
2298 UINT32 OneSecTxFailCount;
2299 UINT32 ContinueTxFailCnt;
2300 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2301 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2302 //====================================================
2306 #ifdef CONFIG_STA_SUPPORT
2307 #ifdef QOS_DLS_SUPPORT
2308 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2309 #endif // QOS_DLS_SUPPORT //
2310 #endif // CONFIG_STA_SUPPORT //
2312 BOOLEAN fNoisyEnvironment;
2313 BOOLEAN fLastSecAccordingRSSI;
2314 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2315 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2316 ULONG LastTxOkCount;
2317 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2319 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2320 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2321 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2322 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2323 ULONG ClientStatusFlags;
2325 // TODO: Shall we move that to DOT11_N_SUPPORT???
2326 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2328 #ifdef DOT11_N_SUPPORT
2329 // HT EWC MIMO-N used parameters
2330 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2331 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2332 USHORT TXAutoBAbitmap;
2333 USHORT BADeclineBitmap;
2334 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2335 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2336 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2338 // 802.11n features.
2340 UCHAR MaxRAmpduFactor;
2342 UCHAR MmpsMode; // MIMO power save more.
2344 HT_CAPABILITY_IE HTCapability;
2346 #ifdef DOT11N_DRAFT3
2347 UCHAR BSS2040CoexistenceMgmtSupport;
2348 #endif // DOT11N_DRAFT3 //
2349 #endif // DOT11_N_SUPPORT //
2351 BOOLEAN bAutoTxRateSwitch;
2354 struct _MAC_TABLE_ENTRY *pNext;
2355 USHORT TxSeq[NUM_OF_TID];
2356 USHORT NonQosDataSeq;
2358 RSSI_SAMPLE RssiSample;
2360 UINT32 TXMCSExpected[16];
2361 UINT32 TXMCSSuccessful[16];
2362 UINT32 TXMCSFailed[16];
2363 UINT32 TXMCSAutoFallBack[16][16];
2365 #ifdef CONFIG_STA_SUPPORT
2366 ULONG LastBeaconRxTime;
2367 #endif // CONFIG_STA_SUPPORT //
2368 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2370 typedef struct _MAC_TABLE {
2372 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2373 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2374 QUEUE_HEADER McastPsQueue;
2376 BOOLEAN fAnyStationInPsm;
2377 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2378 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2379 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2380 #ifdef DOT11_N_SUPPORT
2381 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2382 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2383 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2384 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2385 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2386 #endif // DOT11_N_SUPPORT //
2387 } MAC_TABLE, *PMAC_TABLE;
2389 #ifdef DOT11_N_SUPPORT
2390 #define IS_HT_STA(_pMacEntry) \
2391 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2393 #define IS_HT_RATE(_pMacEntry) \
2394 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2396 #define PEER_IS_HT_RATE(_pMacEntry) \
2397 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2398 #endif // DOT11_N_SUPPORT //
2400 typedef struct _WDS_ENTRY {
2402 UCHAR Addr[MAC_ADDR_LEN];
2403 ULONG NoDataIdleCount;
2404 struct _WDS_ENTRY *pNext;
2405 } WDS_ENTRY, *PWDS_ENTRY;
2407 typedef struct _WDS_TABLE_ENTRY {
2409 UCHAR WdsAddr[MAC_ADDR_LEN];
2410 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2411 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2412 UCHAR MaxSupportedRate;
2414 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2415 USHORT OneSecTxOkCount;
2416 USHORT OneSecTxRetryOkCount;
2417 USHORT OneSecTxFailCount;
2418 ULONG CurrTxRateStableTime; // # of second in current TX rate
2419 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2420 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2422 typedef struct _RT_802_11_WDS_ENTRY {
2426 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2427 UCHAR MacTabMatchWCID; // ASIC
2428 NDIS_802_11_WEP_STATUS WepStatus;
2431 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2432 RT_HT_PHY_INFO DesiredHtPhyInfo;
2433 BOOLEAN bAutoTxRateSwitch;
2434 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2435 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2437 typedef struct _WDS_TABLE {
2440 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2441 } WDS_TABLE, *PWDS_TABLE;
2443 typedef struct _APCLI_STRUCT {
2446 unsigned int mylinkid;
2448 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2449 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2450 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2452 CHAR Ssid[MAX_LEN_OF_SSID];
2455 CHAR CfgSsid[MAX_LEN_OF_SSID];
2456 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2457 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2459 ULONG ApCliRcvBeaconTime;
2461 ULONG CtrlCurrState;
2462 ULONG SyncCurrState;
2463 ULONG AuthCurrState;
2464 ULONG AssocCurrState;
2465 ULONG WpaPskCurrState;
2470 ULONG ClientStatusFlags;
2473 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2474 NDIS_802_11_WEP_STATUS WepStatus;
2476 // Add to support different cipher suite for WPA2/WPA mode
2477 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2478 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2479 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2480 USHORT RsnCapability;
2482 UCHAR PSK[100]; // reserve PSK key material
2484 UCHAR PMK[32]; // WPA PSK mode PMK
2485 //UCHAR PTK[64]; // WPA PSK mode PTK
2486 UCHAR GTK[32]; // GTK from authenticator
2488 //CIPHER_KEY PairwiseKey;
2489 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2492 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2493 //UCHAR PortSecured;
2495 // store RSN_IE built by driver
2496 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2499 // For WPA countermeasures
2500 ULONG LastMicErrorTime; // record last MIC error time
2501 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2502 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2504 // For WPA-PSK supplicant state
2505 //WPA_STATE WpaState; // Default is SS_NOTUSE
2506 //UCHAR ReplayCounter[8];
2507 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2508 UCHAR SNonce[32]; // SNonce for WPA-PSK
2509 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2511 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2512 RT_HT_PHY_INFO DesiredHtPhyInfo;
2513 BOOLEAN bAutoTxRateSwitch;
2514 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2515 } APCLI_STRUCT, *PAPCLI_STRUCT;
2517 // ----------- end of AP ----------------------------
2522 BOOLEAN bGreenField;
2528 typedef struct _INF_PCI_CONFIG
2530 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2533 typedef struct _INF_USB_CONFIG
2535 UINT BulkInEpAddr; // bulk-in endpoint address
2536 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2540 #ifdef IKANOS_VX_1X0
2541 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2543 struct IKANOS_TX_INFO
2545 struct net_device *netdev;
2546 IkanosWlanTxCbFuncP *fp;
2548 #endif // IKANOS_VX_1X0 //
2551 #define DIAGNOSE_TIME 10 // 10 sec
2552 typedef struct _RtmpDiagStrcut_
2553 { // Diagnosis Related element
2554 unsigned char inited;
2556 unsigned char ArrayStartIdx;
2557 unsigned char ArrayCurIdx;
2559 USHORT TxDataCnt[DIAGNOSE_TIME];
2560 USHORT TxFailCnt[DIAGNOSE_TIME];
2561 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2562 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2563 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2564 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2565 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2567 USHORT TxAggCnt[DIAGNOSE_TIME];
2568 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2569 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2570 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2571 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2572 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2575 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2576 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2577 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2578 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2580 #endif // DBG_DIAGNOSE //
2584 // The miniport adapter structure
2586 typedef struct _RTMP_ADAPTER
2588 PVOID OS_Cookie; // save specific structure relative to OS
2594 NDIS_SPIN_LOCK irq_lock;
2598 /*****************************************************************************************/
2599 /* USB related parameters */
2600 /*****************************************************************************************/
2601 struct usb_config_descriptor *config;
2602 UINT BulkInEpAddr; // bulk-in endpoint address
2603 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2606 USHORT BulkOutMaxPacketSize;
2607 USHORT BulkInMaxPacketSize;
2609 //======Control Flags
2610 LONG PendingIoCount;
2612 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2615 //======Timer Thread
2616 RT2870_TIMER_QUEUE TimerQ;
2617 NDIS_SPIN_LOCK TimerQLock;
2622 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2624 BOOLEAN TimerFunc_kill;
2628 //======Semaphores (event)
2629 struct semaphore mlme_semaphore; /* to sleep thread on */
2630 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2631 struct semaphore RTUSBTimer_semaphore;
2632 #ifdef INF_AMAZON_SE
2633 struct semaphore UsbVendorReq_semaphore;
2634 PVOID UsbVendorReqBuf;
2635 #endif // INF_AMAZON_SE //
2636 struct completion TimerQComplete;
2637 struct completion mlmeComplete;
2638 struct completion CmdQComplete;
2639 wait_queue_head_t *wait;
2643 /*****************************************************************************************/
2644 /* Both PCI/USB related parameters */
2645 /*****************************************************************************************/
2648 /*****************************************************************************************/
2649 /* Tx related parameters */
2650 /*****************************************************************************************/
2651 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2652 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2655 // Data related context and AC specified, 4 AC supported
2656 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2657 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2659 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2660 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2662 // 4 sets of Bulk Out index and pending flag
2663 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2665 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2666 UCHAR bulkResetPipeid;
2667 BOOLEAN MgmtBulkPending;
2668 ULONG bulkResetReq[6];
2671 // resource for software backlog queues
2672 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2673 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2675 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2676 RTMP_MGMT_RING MgmtRing;
2677 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2680 /*****************************************************************************************/
2681 /* Rx related parameters */
2682 /*****************************************************************************************/
2686 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2687 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2688 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2689 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2690 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2691 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2692 ULONG TransferBufferLength; // current length of the packet buffer
2693 ULONG ReadPosition; // current read position in a packet buffer
2697 /*****************************************************************************************/
2698 /* ASIC related parameters */
2699 /*****************************************************************************************/
2700 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2702 // ---------------------------
2704 // ---------------------------
2705 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2706 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2707 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2708 BOOLEAN EepromAccess;
2710 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2712 // ---------------------------
2714 // ---------------------------
2715 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2716 UCHAR BbpRssiToDbmDelta;
2717 BBP_R66_TUNING BbpTuning;
2719 // ----------------------------
2721 // ----------------------------
2722 UCHAR RfIcType; // RFIC_xxx
2723 ULONG RfFreqOffset; // Frequency offset for channel switching
2724 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2726 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2727 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2729 // This soft Rx Antenna Diversity mechanism is used only when user set
2730 // RX Antenna = DIVERSITY ON
2731 SOFT_RX_ANT_DIVERSITY RxAnt;
2734 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2735 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2736 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2737 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2739 UCHAR ChannelListNum; // number of channel in ChannelList[]
2742 ULONG Tx20MPwrCfgABand[5];
2743 ULONG Tx20MPwrCfgGBand[5];
2744 ULONG Tx40MPwrCfgABand[5];
2745 ULONG Tx40MPwrCfgGBand[5];
2747 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2748 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2749 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2750 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2751 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2752 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2754 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2755 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2756 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2757 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2758 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2759 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2761 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2762 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2763 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2764 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2767 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2768 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2769 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2770 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2773 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2774 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2775 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2776 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2778 // ----------------------------
2780 // ----------------------------
2781 MCU_LEDCS_STRUC LedCntl;
2782 USHORT Led1; // read from EEPROM 0x3c
2783 USHORT Led2; // EEPROM 0x3e
2784 USHORT Led3; // EEPROM 0x40
2785 UCHAR LedIndicatorStregth;
2786 UCHAR RssiSingalstrengthOffet;
2787 BOOLEAN bLedOnScanning;
2790 /*****************************************************************************************/
2791 /* 802.11 related parameters */
2792 /*****************************************************************************************/
2793 // outgoing BEACON frame buffer and corresponding TXD
2794 TXWI_STRUC BeaconTxWI;
2796 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2798 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2799 PSPOLL_FRAME PsPollFrame;
2800 HEADER_802_11 NullFrame;
2803 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2804 TX_CONTEXT NullContext;
2805 TX_CONTEXT PsPollContext;
2806 TX_CONTEXT RTSContext;
2811 //=========AP===========
2814 //=======STA===========
2815 #ifdef CONFIG_STA_SUPPORT
2816 /* Modified by Wu Xi-Kun 4/21/2006 */
2817 // -----------------------------------------------
2818 // STA specific configuration & operation status
2819 // used only when pAd->OpMode == OPMODE_STA
2820 // -----------------------------------------------
2821 STA_ADMIN_CONFIG StaCfg; // user desired settings
2822 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2823 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2824 NDIS_MEDIA_STATE PreMediaState;
2825 #endif // CONFIG_STA_SUPPORT //
2827 //=======Common===========
2828 // OP mode: either AP or STA
2829 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2831 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2834 // MAT related parameters
2836 // configuration: read from Registry & E2PROM
2837 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2838 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2839 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2841 // ------------------------------------------------------
2842 // common configuration to both OPMODE_STA and OPMODE_AP
2843 // ------------------------------------------------------
2844 COMMON_CONFIG CommonCfg;
2847 // AP needs those vaiables for site survey feature.
2848 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2849 BSS_TABLE ScanTab; // store the latest SCAN result
2851 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2852 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2853 NDIS_SPIN_LOCK MacTabLock;
2855 #ifdef DOT11_N_SUPPORT
2857 #endif // DOT11_N_SUPPORT //
2858 NDIS_SPIN_LOCK BATabLock;
2859 RALINK_TIMER_STRUCT RECBATimer;
2861 // encryption/decryption KEY tables
2862 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2864 // RX re-assembly buffer for fragmentation
2865 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2868 COUNTER_802_3 Counters8023; // 802.3 counters
2869 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2870 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2871 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2872 PRIVATE_STRUC PrivateInfo; // Private information & counters
2874 // flags, see fRTMP_ADAPTER_xxx flags
2875 ULONG Flags; // Represent current device status
2877 // current TX sequence #
2880 // Control disconnect / connect event generation
2881 //+++Didn't used anymore
2886 //+++Used only for Station
2887 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2890 ULONG ExtraInfo; // Extra information for displaying status
2891 ULONG SystemErrorBitmap; // b0: E2PROM version error
2893 //+++Didn't used anymore
2894 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2897 // ---------------------------
2899 // ---------------------------
2900 RT_802_11_EVENT_TABLE EventTab;
2905 /*****************************************************************************************/
2906 /* Statistic related parameters */
2907 /*****************************************************************************************/
2909 ULONG BulkOutDataOneSecCount;
2910 ULONG BulkInDataOneSecCount;
2911 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2912 ULONG watchDogRxCnt;
2913 ULONG watchDogRxOverFlowCnt;
2914 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2917 BOOLEAN bUpdateBcnCntDone;
2918 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2919 // ----------------------------
2921 // ----------------------------
2922 //ULONG DebugSetting[4];
2923 BOOLEAN bBanAllBaSetup;
2924 BOOLEAN bPromiscuous;
2926 // ----------------------------
2927 // rt2860c emulation-use Parameters
2928 // ----------------------------
2931 ULONG cfendaccu[30];
2932 ULONG bacontent[16];
2933 ULONG rxint[RX_RING_SIZE+1];
2936 BOOLEAN bForcePrintTX;
2937 BOOLEAN bForcePrintRX;
2938 BOOLEAN bDisablescanning; //defined in RT2870 USB
2939 BOOLEAN bStaFifoTest;
2940 BOOLEAN bProtectionTest;
2942 BOOLEAN bGenOneHCCA;
2943 BOOLEAN bBroadComHT;
2944 //+++Following add from RT2870 USB.
2946 ULONG BulkOutComplete;
2947 ULONG BulkOutCompleteOther;
2948 ULONG BulkOutCompleteCancel; // seems not use now?
2950 ULONG BulkInComplete;
2951 ULONG BulkInCompleteFail;
2954 struct wificonf WIFItestbed;
2956 #ifdef DOT11_N_SUPPORT
2957 struct reordering_mpdu_pool mpdu_blk_pool;
2958 #endif // DOT11_N_SUPPORT //
2960 ULONG OneSecondnonBEpackets; // record non BE packets per second
2962 #if WIRELESS_EXT >= 12
2963 struct iw_statistics iw_stats;
2966 struct net_device_stats stats;
2968 ULONG TbttTickCount;
2969 #ifdef PCI_MSI_SUPPORT
2971 #endif // PCI_MSI_SUPPORT //
2976 #define TIME_BASE (1000000/OS_HZ)
2977 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2978 UCHAR flg_be_adjust;
2979 ULONG be_adjust_last_time;
2981 #ifdef IKANOS_VX_1X0
2982 struct IKANOS_TX_INFO IkanosTxInfo;
2983 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2984 #endif // IKANOS_VX_1X0 //
2988 RtmpDiagStruct DiagStruct;
2989 #endif // DBG_DIAGNOSE //
2992 UINT8 PM_FlgSuspend;
2997 BOOLEAN bEEPROMFile;
3000 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3003 // Cisco IAPP format
3005 typedef struct _CISCO_IAPP_CONTENT_
3007 USHORT Length; //IAPP Length
3008 UCHAR MessageType; //IAPP type
3009 UCHAR FunctionCode; //IAPP function type
3010 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3011 UCHAR SourceMAC[MAC_ADDR_LEN];
3012 USHORT Tag; //Tag(element IE) - Adjacent AP report
3013 USHORT TagLength; //Length of element not including 4 byte header
3014 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3015 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3018 UCHAR Ssid[MAX_LEN_OF_SSID];
3019 USHORT Seconds; //Seconds that the client has been disassociated.
3020 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3022 #define DELAYINTMASK 0x0003fffb
3023 #define INTMASK 0x0003fffb
3024 #define IndMask 0x0003fffc
3025 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3026 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3027 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3028 #define TxCoherent 0x00020000 // tx coherent
3029 #define RxCoherent 0x00010000 // rx coherent
3030 #define McuCommand 0x00000200 // mcu
3031 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3032 #define TBTTInt 0x00000800 // TBTT interrupt
3033 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3034 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3035 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3038 typedef struct _RX_BLK_
3040 // RXD_STRUC RxD; // sample
3041 RT28XX_RXD_STRUC RxD;
3043 PHEADER_802_11 pHeader;
3044 PNDIS_PACKET pRxPacket;
3048 UCHAR UserPriority; // for calculate TKIP MIC using
3052 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3053 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3054 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3057 #define fRX_WDS 0x0001
3058 #define fRX_AMSDU 0x0002
3059 #define fRX_ARALINK 0x0004
3060 #define fRX_HTC 0x0008
3061 #define fRX_PAD 0x0010
3062 #define fRX_AMPDU 0x0020
3063 #define fRX_QOS 0x0040
3064 #define fRX_INFRA 0x0080
3065 #define fRX_EAP 0x0100
3066 #define fRX_MESH 0x0200
3067 #define fRX_APCLI 0x0400
3068 #define fRX_DLS 0x0800
3069 #define fRX_WPI 0x1000
3071 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3072 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3073 #define LENGTH_ARALINK_HEADER_FIELD 2
3075 #define TX_UNKOWN_FRAME 0x00
3076 #define TX_MCAST_FRAME 0x01
3077 #define TX_LEGACY_FRAME 0x02
3078 #define TX_AMPDU_FRAME 0x04
3079 #define TX_AMSDU_FRAME 0x08
3080 #define TX_RALINK_FRAME 0x10
3081 #define TX_FRAG_FRAME 0x20
3084 // Currently the sizeof(TX_BLK) is 148 bytes.
3085 typedef struct _TX_BLK_
3088 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3089 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3090 USHORT TotalFragNum; // Total frame fragments required in one batch
3091 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3093 QUEUE_HEADER TxPacketList;
3094 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3095 HTTRANSMIT_SETTING *pTransmit;
3097 // Following structure used for the characteristics of a specific packet.
3098 PNDIS_PACKET pPacket;
3099 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3100 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3101 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3102 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3103 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3104 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3105 UCHAR HdrPadLen; // recording Header Padding Length;
3106 UCHAR apidx; // The interface associated to this packet
3107 UCHAR Wcid; // The MAC entry associated to this packet
3108 UCHAR UserPriority; // priority class of packet
3109 UCHAR FrameGap; // what kind of IFS this packet use
3110 UCHAR MpduReqNum; // number of fragments of this frame
3111 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3112 UCHAR CipherAlg; // cipher alogrithm
3117 USHORT Flags; //See following definitions for detail.
3119 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3120 ULONG Priv; // Hardware specific value saved in here.
3124 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3125 #define fTX_bAckRequired 0x0002 // the packet need ack response
3126 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3127 #define fTX_bHTRate 0x0008 // allow to use HT rate
3128 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3129 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3130 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3131 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3132 #define fTX_bWMM 0x0080 // QOS Data
3134 #define fTX_bClearEAPFrame 0x0100
3137 #ifdef CONFIG_STA_SUPPORT
3138 #endif // CONFIG_STA_SUPPORT //
3142 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3145 (_pTxBlk->Flags |= _flag) \
3147 (_pTxBlk->Flags &= ~(_flag)) \
3150 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3151 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3152 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3158 //------------------------------------------------------------------------------------------
3162 #ifdef RT_BIG_ENDIAN
3163 static inline VOID WriteBackToDescriptor(
3166 IN BOOLEAN DoEncrypt,
3167 IN ULONG DescriptorType)
3171 p1 = ((UINT32 *)Dest);
3172 p2 = ((UINT32 *)Src);
3177 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3181 ========================================================================
3183 Routine Description:
3184 Endian conversion of Tx/Rx descriptor .
3187 pAd Pointer to our adapter
3188 pData Pointer to Tx/Rx descriptor
3189 DescriptorType Direction of the frame
3195 Call this function when read or update descriptor
3196 ========================================================================
3198 static inline VOID RTMPWIEndianChange(
3200 IN ULONG DescriptorType)
3205 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3207 if(DescriptorType == TYPE_TXWI)
3209 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3210 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3214 for(i=0; i < size/4 ; i++)
3215 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3220 ========================================================================
3222 Routine Description:
3223 Endian conversion of Tx/Rx descriptor .
3226 pAd Pointer to our adapter
3227 pData Pointer to Tx/Rx descriptor
3228 DescriptorType Direction of the frame
3234 Call this function when read or update descriptor
3235 ========================================================================
3239 static inline VOID RTMPDescriptorEndianChange(
3241 IN ULONG DescriptorType)
3243 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3247 ========================================================================
3249 Routine Description:
3250 Endian conversion of all kinds of 802.11 frames .
3253 pAd Pointer to our adapter
3254 pData Pointer to the 802.11 frame structure
3255 Dir Direction of the frame
3256 FromRxDoneInt Caller is from RxDone interrupt
3262 Call this function when read or update buffer data
3263 ========================================================================
3265 static inline VOID RTMPFrameEndianChange(
3266 IN PRTMP_ADAPTER pAd,
3269 IN BOOLEAN FromRxDoneInt)
3271 PHEADER_802_11 pFrame;
3274 // swab 16 bit fields - Frame Control field
3277 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3280 pFrame = (PHEADER_802_11) pData;
3281 pMacHdr = (PUCHAR) pFrame;
3283 // swab 16 bit fields - Duration/ID field
3284 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3286 // swab 16 bit fields - Sequence Control field
3287 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3289 if(pFrame->FC.Type == BTYPE_MGMT)
3291 switch(pFrame->FC.SubType)
3293 case SUBTYPE_ASSOC_REQ:
3294 case SUBTYPE_REASSOC_REQ:
3295 // swab 16 bit fields - CapabilityInfo field
3296 pMacHdr += sizeof(HEADER_802_11);
3297 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3299 // swab 16 bit fields - Listen Interval field
3301 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3304 case SUBTYPE_ASSOC_RSP:
3305 case SUBTYPE_REASSOC_RSP:
3306 // swab 16 bit fields - CapabilityInfo field
3307 pMacHdr += sizeof(HEADER_802_11);
3308 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3310 // swab 16 bit fields - Status Code field
3312 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3314 // swab 16 bit fields - AID field
3316 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3320 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3321 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3322 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3326 // swab 16 bit fields - Auth Alg No. field
3327 pMacHdr += sizeof(HEADER_802_11);
3328 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3330 // swab 16 bit fields - Auth Seq No. field
3332 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3334 // swab 16 bit fields - Status Code field
3336 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3340 case SUBTYPE_BEACON:
3341 case SUBTYPE_PROBE_RSP:
3342 // swab 16 bit fields - BeaconInterval field
3343 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3344 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3346 // swab 16 bit fields - CapabilityInfo field
3347 pMacHdr += sizeof(USHORT);
3348 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3351 case SUBTYPE_DEAUTH:
3352 case SUBTYPE_DISASSOC:
3353 // swab 16 bit fields - Reason code field
3354 pMacHdr += sizeof(HEADER_802_11);
3355 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3359 else if( pFrame->FC.Type == BTYPE_DATA )
3362 else if(pFrame->FC.Type == BTYPE_CNTL)
3364 switch(pFrame->FC.SubType)
3366 case SUBTYPE_BLOCK_ACK_REQ:
3368 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3369 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3370 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3373 case SUBTYPE_BLOCK_ACK:
3374 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3375 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3379 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3380 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3386 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3389 // swab 16 bit fields - Frame Control
3390 if(Dir == DIR_WRITE)
3392 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3395 #endif // RT_BIG_ENDIAN //
3398 static inline VOID ConvertMulticastIP2MAC(
3400 IN PUCHAR *ppMacAddr,
3401 IN UINT16 ProtoType)
3403 if (pIpAddr == NULL)
3406 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3412 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3413 *(*ppMacAddr) = 0x33;
3414 *(*ppMacAddr + 1) = 0x33;
3415 *(*ppMacAddr + 2) = pIpAddr[12];
3416 *(*ppMacAddr + 3) = pIpAddr[13];
3417 *(*ppMacAddr + 4) = pIpAddr[14];
3418 *(*ppMacAddr + 5) = pIpAddr[15];
3423 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3424 *(*ppMacAddr) = 0x01;
3425 *(*ppMacAddr + 1) = 0x00;
3426 *(*ppMacAddr + 2) = 0x5e;
3427 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3428 *(*ppMacAddr + 4) = pIpAddr[2];
3429 *(*ppMacAddr + 5) = pIpAddr[3];
3436 BOOLEAN RTMPCheckForHang(
3437 IN NDIS_HANDLE MiniportAdapterContext
3441 IN NDIS_HANDLE MiniportAdapterContext
3445 // Private routines in rtmp_init.c
3447 NDIS_STATUS RTMPAllocAdapterBlock(
3449 OUT PRTMP_ADAPTER *ppAdapter
3452 NDIS_STATUS RTMPAllocTxRxRingMemory(
3453 IN PRTMP_ADAPTER pAd
3456 NDIS_STATUS RTMPFindAdapter(
3457 IN PRTMP_ADAPTER pAd,
3458 IN NDIS_HANDLE WrapperConfigurationContext
3461 NDIS_STATUS RTMPReadParametersHook(
3462 IN PRTMP_ADAPTER pAd
3465 VOID RTMPFreeAdapter(
3466 IN PRTMP_ADAPTER pAd
3469 NDIS_STATUS NICReadRegParameters(
3470 IN PRTMP_ADAPTER pAd,
3471 IN NDIS_HANDLE WrapperConfigurationContext
3475 VOID NICInitRT30xxRFRegisters(
3476 IN PRTMP_ADAPTER pAd);
3479 VOID NICReadEEPROMParameters(
3480 IN PRTMP_ADAPTER pAd,
3481 IN PUCHAR mac_addr);
3483 VOID NICInitAsicFromEEPROM(
3484 IN PRTMP_ADAPTER pAd);
3486 VOID NICInitTxRxRingAndBacklogQueue(
3487 IN PRTMP_ADAPTER pAd);
3489 NDIS_STATUS NICInitializeAdapter(
3490 IN PRTMP_ADAPTER pAd,
3491 IN BOOLEAN bHardReset);
3493 NDIS_STATUS NICInitializeAsic(
3494 IN PRTMP_ADAPTER pAd,
3495 IN BOOLEAN bHardReset);
3498 IN PRTMP_ADAPTER pAd);
3500 VOID RTMPRingCleanUp(
3501 IN PRTMP_ADAPTER pAd,
3505 IN PRTMP_ADAPTER pAd);
3507 NDIS_STATUS DbgSendPacket(
3508 IN PRTMP_ADAPTER pAd,
3509 IN PNDIS_PACKET pPacket);
3512 IN PRTMP_ADAPTER pAd);
3514 VOID NICResetFromError(
3515 IN PRTMP_ADAPTER pAd);
3517 VOID NICEraseFirmware(
3518 IN PRTMP_ADAPTER pAd);
3520 NDIS_STATUS NICLoadFirmware(
3521 IN PRTMP_ADAPTER pAd);
3523 NDIS_STATUS NICLoadRateSwitchingParams(
3524 IN PRTMP_ADAPTER pAd);
3526 BOOLEAN NICCheckForHang(
3527 IN PRTMP_ADAPTER pAd);
3529 VOID NICUpdateFifoStaCounters(
3530 IN PRTMP_ADAPTER pAd);
3532 VOID NICUpdateRawCounters(
3533 IN PRTMP_ADAPTER pAd);
3535 ULONG RTMPNotAllZero(
3539 VOID RTMPZeroMemory(
3543 ULONG RTMPCompareMemory(
3548 VOID RTMPMoveMemory(
3561 VOID RTMPPatchMacBbpBug(
3562 IN PRTMP_ADAPTER pAd);
3564 VOID RTMPPatchCardBus(
3565 IN PRTMP_ADAPTER pAdapter);
3567 VOID RTMPPatchRalinkCardBus(
3568 IN PRTMP_ADAPTER pAdapter,
3571 ULONG RTMPReadCBConfig(
3577 VOID RTMPWriteCBConfig(
3585 IN PRTMP_ADAPTER pAd,
3586 IN PRALINK_TIMER_STRUCT pTimer,
3587 IN PVOID pTimerFunc,
3592 IN PRALINK_TIMER_STRUCT pTimer,
3597 IN PRALINK_TIMER_STRUCT pTimer,
3600 VOID RTMPCancelTimer(
3601 IN PRALINK_TIMER_STRUCT pTimer,
3602 OUT BOOLEAN *pCancelled);
3605 IN PRTMP_ADAPTER pAd,
3608 VOID RTMPSetSignalLED(
3609 IN PRTMP_ADAPTER pAd,
3610 IN NDIS_802_11_RSSI Dbm);
3612 VOID RTMPEnableRxTx(
3613 IN PRTMP_ADAPTER pAd);
3616 // prototype in action.c
3618 VOID ActionStateMachineInit(
3619 IN PRTMP_ADAPTER pAd,
3620 IN STATE_MACHINE *S,
3621 OUT STATE_MACHINE_FUNC Trans[]);
3623 VOID MlmeADDBAAction(
3624 IN PRTMP_ADAPTER pAd,
3625 IN MLME_QUEUE_ELEM *Elem);
3627 VOID MlmeDELBAAction(
3628 IN PRTMP_ADAPTER pAd,
3629 IN MLME_QUEUE_ELEM *Elem);
3632 IN PRTMP_ADAPTER pAd,
3633 IN MLME_QUEUE_ELEM *Elem);
3635 VOID MlmeInvalidAction(
3636 IN PRTMP_ADAPTER pAd,
3637 IN MLME_QUEUE_ELEM *Elem);
3640 IN PRTMP_ADAPTER pAd,
3641 IN MLME_QUEUE_ELEM *Elem);
3643 #ifdef DOT11_N_SUPPORT
3644 VOID PeerAddBAReqAction(
3645 IN PRTMP_ADAPTER pAd,
3646 IN MLME_QUEUE_ELEM *Elem);
3648 VOID PeerAddBARspAction(
3649 IN PRTMP_ADAPTER pAd,
3650 IN MLME_QUEUE_ELEM *Elem);
3652 VOID PeerDelBAAction(
3653 IN PRTMP_ADAPTER pAd,
3654 IN MLME_QUEUE_ELEM *Elem);
3657 IN PRTMP_ADAPTER pAd,
3658 IN MLME_QUEUE_ELEM *Elem);
3659 #endif // DOT11_N_SUPPORT //
3661 VOID SendPSMPAction(
3662 IN PRTMP_ADAPTER pAd,
3667 #ifdef DOT11N_DRAFT3
3668 VOID SendBSS2040CoexistMgmtAction(
3669 IN PRTMP_ADAPTER pAd,
3674 VOID SendNotifyBWActionFrame(
3675 IN PRTMP_ADAPTER pAd,
3679 BOOLEAN ChannelSwitchSanityCheck(
3680 IN PRTMP_ADAPTER pAd,
3682 IN UCHAR NewChannel,
3683 IN UCHAR Secondary);
3685 VOID ChannelSwitchAction(
3686 IN PRTMP_ADAPTER pAd,
3689 IN UCHAR Secondary);
3691 ULONG BuildIntolerantChannelRep(
3692 IN PRTMP_ADAPTER pAd,
3695 VOID Update2040CoexistFrameAndNotify(
3696 IN PRTMP_ADAPTER pAd,
3698 IN BOOLEAN bAddIntolerantCha);
3700 VOID Send2040CoexistAction(
3701 IN PRTMP_ADAPTER pAd,
3703 IN BOOLEAN bAddIntolerantCha);
3704 #endif // DOT11N_DRAFT3 //
3707 IN PRTMP_ADAPTER pAd,
3708 IN MLME_QUEUE_ELEM *Elem);
3710 VOID PeerPublicAction(
3711 IN PRTMP_ADAPTER pAd,
3712 IN MLME_QUEUE_ELEM *Elem);
3714 #ifdef CONFIG_STA_SUPPORT
3715 VOID StaPublicAction(
3716 IN PRTMP_ADAPTER pAd,
3717 IN UCHAR Bss2040Coexist);
3718 #endif // CONFIG_STA_SUPPORT //
3721 VOID PeerBSSTranAction(
3722 IN PRTMP_ADAPTER pAd,
3723 IN MLME_QUEUE_ELEM *Elem);
3725 #ifdef DOT11_N_SUPPORT
3727 IN PRTMP_ADAPTER pAd,
3728 IN MLME_QUEUE_ELEM *Elem);
3729 #endif // DOT11_N_SUPPORT //
3732 IN PRTMP_ADAPTER pAd,
3733 IN MLME_QUEUE_ELEM *Elem);
3735 #ifdef QOS_DLS_SUPPORT
3737 IN PRTMP_ADAPTER pAd,
3738 IN MLME_QUEUE_ELEM *Elem);
3739 #endif // QOS_DLS_SUPPORT //
3741 #ifdef CONFIG_STA_SUPPORT
3742 #ifdef QOS_DLS_SUPPORT
3744 IN PRTMP_ADAPTER pAd,
3745 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3746 IN PRT_802_11_DLS pDls,
3748 #endif // QOS_DLS_SUPPORT //
3749 #endif // CONFIG_STA_SUPPORT //
3751 #ifdef DOT11_N_SUPPORT
3752 VOID RECBATimerTimeout(
3753 IN PVOID SystemSpecific1,
3754 IN PVOID FunctionContext,
3755 IN PVOID SystemSpecific2,
3756 IN PVOID SystemSpecific3);
3758 VOID ORIBATimerTimeout(
3759 IN PRTMP_ADAPTER pAd);
3761 VOID SendRefreshBAR(
3762 IN PRTMP_ADAPTER pAd,
3763 IN MAC_TABLE_ENTRY *pEntry);
3764 #endif // DOT11_N_SUPPORT //
3767 IN PRTMP_ADAPTER pAd,
3768 IN OUT PHEADER_802_11 pHdr80211,
3774 IN PRTMP_ADAPTER pAd,
3775 IN OUT PFRAME_BAR pCntlBar,
3779 VOID InsertActField(
3780 IN PRTMP_ADAPTER pAd,
3781 OUT PUCHAR pFrameBuf,
3782 OUT PULONG pFrameLen,
3786 BOOLEAN QosBADataParse(
3787 IN PRTMP_ADAPTER pAd,
3789 IN PUCHAR p8023Header,
3793 IN UCHAR DataOffset,
3795 IN UINT CurRxIndex);
3797 #ifdef DOT11_N_SUPPORT
3798 BOOLEAN CntlEnqueueForRecv(
3799 IN PRTMP_ADAPTER pAd,
3802 IN PFRAME_BA_REQ pMsg);
3804 VOID BaAutoManSwitch(
3805 IN PRTMP_ADAPTER pAd);
3806 #endif // DOT11_N_SUPPORT //
3809 IN PRTMP_ADAPTER pAd,
3810 IN UCHAR BatRecIdx);
3813 // Private routines in rtmp_data.c
3815 BOOLEAN RTMPHandleRxDoneInterrupt(
3816 IN PRTMP_ADAPTER pAd);
3818 VOID RTMPHandleTxDoneInterrupt(
3819 IN PRTMP_ADAPTER pAd);
3821 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3822 IN PRTMP_ADAPTER pAd,
3823 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3825 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3826 IN PRTMP_ADAPTER pAd);
3828 VOID RTMPHandleTBTTInterrupt(
3829 IN PRTMP_ADAPTER pAd);
3831 VOID RTMPHandlePreTBTTInterrupt(
3832 IN PRTMP_ADAPTER pAd);
3834 void RTMPHandleTwakeupInterrupt(
3835 IN PRTMP_ADAPTER pAd);
3837 VOID RTMPHandleRxCoherentInterrupt(
3838 IN PRTMP_ADAPTER pAd);
3840 BOOLEAN TxFrameIsAggregatible(
3841 IN PRTMP_ADAPTER pAd,
3842 IN PUCHAR pPrevAddr1,
3843 IN PUCHAR p8023hdr);
3845 BOOLEAN PeerIsAggreOn(
3846 IN PRTMP_ADAPTER pAd,
3848 IN PMAC_TABLE_ENTRY pMacEntry);
3850 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3851 IN PNDIS_BUFFER pFirstBuffer,
3852 IN UCHAR DesiredOffset,
3856 NDIS_STATUS STASendPacket(
3857 IN PRTMP_ADAPTER pAd,
3858 IN PNDIS_PACKET pPacket);
3860 VOID STASendPackets(
3861 IN NDIS_HANDLE MiniportAdapterContext,
3862 IN PPNDIS_PACKET ppPacketArray,
3863 IN UINT NumberOfPackets);
3865 VOID RTMPDeQueuePacket(
3866 IN PRTMP_ADAPTER pAd,
3867 IN BOOLEAN bIntContext,
3869 IN UCHAR Max_Tx_Packets);
3871 NDIS_STATUS RTMPHardTransmit(
3872 IN PRTMP_ADAPTER pAd,
3873 IN PNDIS_PACKET pPacket,
3875 OUT PULONG pFreeTXDLeft);
3877 NDIS_STATUS STAHardTransmit(
3878 IN PRTMP_ADAPTER pAd,
3882 VOID STARxEAPOLFrameIndicate(
3883 IN PRTMP_ADAPTER pAd,
3884 IN MAC_TABLE_ENTRY *pEntry,
3886 IN UCHAR FromWhichBSSID);
3888 NDIS_STATUS RTMPFreeTXDRequest(
3889 IN PRTMP_ADAPTER pAd,
3891 IN UCHAR NumberRequired,
3892 IN PUCHAR FreeNumberIs);
3894 NDIS_STATUS MlmeHardTransmit(
3895 IN PRTMP_ADAPTER pAd,
3897 IN PNDIS_PACKET pPacket);
3899 NDIS_STATUS MlmeHardTransmitMgmtRing(
3900 IN PRTMP_ADAPTER pAd,
3902 IN PNDIS_PACKET pPacket);
3904 NDIS_STATUS MlmeHardTransmitTxRing(
3905 IN PRTMP_ADAPTER pAd,
3907 IN PNDIS_PACKET pPacket);
3909 USHORT RTMPCalcDuration(
3910 IN PRTMP_ADAPTER pAd,
3915 IN PRTMP_ADAPTER pAd,
3916 IN PTXWI_STRUC pTxWI,
3919 IN BOOLEAN InsTimestamp,
3922 IN BOOLEAN NSeq, // HW new a sequence.
3931 IN HTTRANSMIT_SETTING *pTransmit);
3934 VOID RTMPWriteTxWI_Data(
3935 IN PRTMP_ADAPTER pAd,
3936 IN OUT PTXWI_STRUC pTxWI,
3940 VOID RTMPWriteTxWI_Cache(
3941 IN PRTMP_ADAPTER pAd,
3942 IN OUT PTXWI_STRUC pTxWI,
3945 VOID RTMPWriteTxDescriptor(
3946 IN PRTMP_ADAPTER pAd,
3951 VOID RTMPSuspendMsduTransmission(
3952 IN PRTMP_ADAPTER pAd);
3954 VOID RTMPResumeMsduTransmission(
3955 IN PRTMP_ADAPTER pAd);
3957 NDIS_STATUS MiniportMMRequest(
3958 IN PRTMP_ADAPTER pAd,
3963 NDIS_STATUS MiniportDataMMRequest(
3964 IN PRTMP_ADAPTER pAd,
3969 VOID RTMPSendNullFrame(
3970 IN PRTMP_ADAPTER pAd,
3972 IN BOOLEAN bQosNull);
3974 VOID RTMPSendDisassociationFrame(
3975 IN PRTMP_ADAPTER pAd);
3977 VOID RTMPSendRTSFrame(
3978 IN PRTMP_ADAPTER pAd,
3980 IN unsigned int NextMpduSize,
3983 IN USHORT AckDuration,
3988 NDIS_STATUS RTMPApplyPacketFilter(
3989 IN PRTMP_ADAPTER pAd,
3990 IN PRT28XX_RXD_STRUC pRxD,
3991 IN PHEADER_802_11 pHeader);
3993 PQUEUE_HEADER RTMPCheckTxSwQueue(
3994 IN PRTMP_ADAPTER pAd,
3997 #ifdef CONFIG_STA_SUPPORT
3998 VOID RTMPReportMicError(
3999 IN PRTMP_ADAPTER pAd,
4000 IN PCIPHER_KEY pWpaKey);
4002 VOID WpaMicFailureReportFrame(
4003 IN PRTMP_ADAPTER pAd,
4004 IN MLME_QUEUE_ELEM *Elem);
4006 VOID WpaDisassocApAndBlockAssoc(
4007 IN PVOID SystemSpecific1,
4008 IN PVOID FunctionContext,
4009 IN PVOID SystemSpecific2,
4010 IN PVOID SystemSpecific3);
4011 #endif // CONFIG_STA_SUPPORT //
4013 NDIS_STATUS RTMPCloneNdisPacket(
4014 IN PRTMP_ADAPTER pAd,
4015 IN BOOLEAN pInsAMSDUHdr,
4016 IN PNDIS_PACKET pInPacket,
4017 OUT PNDIS_PACKET *ppOutPacket);
4019 NDIS_STATUS RTMPAllocateNdisPacket(
4020 IN PRTMP_ADAPTER pAd,
4021 IN PNDIS_PACKET *pPacket,
4027 VOID RTMPFreeNdisPacket(
4028 IN PRTMP_ADAPTER pAd,
4029 IN PNDIS_PACKET pPacket);
4031 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4032 IN PRTMP_ADAPTER pAd,
4035 BOOLEAN RTMPCheckDHCPFrame(
4036 IN PRTMP_ADAPTER pAd,
4037 IN PNDIS_PACKET pPacket);
4040 BOOLEAN RTMPCheckEtherType(
4041 IN PRTMP_ADAPTER pAd,
4042 IN PNDIS_PACKET pPacket);
4045 VOID RTMPCckBbpTuning(
4046 IN PRTMP_ADAPTER pAd,
4050 // Private routines in rtmp_wep.c
4052 VOID RTMPInitWepEngine(
4053 IN PRTMP_ADAPTER pAd,
4059 VOID RTMPEncryptData(
4060 IN PRTMP_ADAPTER pAd,
4065 BOOLEAN RTMPDecryptData(
4066 IN PRTMP_ADAPTER pAdapter,
4071 BOOLEAN RTMPSoftDecryptWEP(
4072 IN PRTMP_ADAPTER pAd,
4074 IN ULONG DataByteCnt,
4075 IN PCIPHER_KEY pGroupKey);
4078 IN PRTMP_ADAPTER pAd,
4082 IN PARCFOURCONTEXT Ctx,
4087 IN PARCFOURCONTEXT Ctx);
4089 VOID ARCFOUR_DECRYPT(
4090 IN PARCFOURCONTEXT Ctx,
4095 VOID ARCFOUR_ENCRYPT(
4096 IN PARCFOURCONTEXT Ctx,
4101 VOID WPAARCFOUR_ENCRYPT(
4102 IN PARCFOURCONTEXT Ctx,
4107 UINT RTMP_CALC_FCS32(
4116 // Asic/RF/BBP related functions
4118 VOID AsicAdjustTxPower(
4119 IN PRTMP_ADAPTER pAd);
4121 VOID AsicUpdateProtect(
4122 IN PRTMP_ADAPTER pAd,
4123 IN USHORT OperaionMode,
4125 IN BOOLEAN bDisableBGProtect,
4126 IN BOOLEAN bNonGFExist);
4128 VOID AsicSwitchChannel(
4129 IN PRTMP_ADAPTER pAd,
4133 VOID AsicLockChannel(
4134 IN PRTMP_ADAPTER pAd,
4137 VOID AsicAntennaSelect(
4138 IN PRTMP_ADAPTER pAd,
4141 VOID AsicAntennaSetting(
4142 IN PRTMP_ADAPTER pAd,
4143 IN ABGBAND_STATE BandState);
4145 VOID AsicRfTuningExec(
4146 IN PVOID SystemSpecific1,
4147 IN PVOID FunctionContext,
4148 IN PVOID SystemSpecific2,
4149 IN PVOID SystemSpecific3);
4151 #ifdef CONFIG_STA_SUPPORT
4152 VOID AsicSleepThenAutoWakeup(
4153 IN PRTMP_ADAPTER pAd,
4154 IN USHORT TbttNumToNextWakeUp);
4156 VOID AsicForceSleep(
4157 IN PRTMP_ADAPTER pAd);
4159 VOID AsicForceWakeup(
4160 IN PRTMP_ADAPTER pAd,
4161 IN BOOLEAN bFromTx);
4162 #endif // CONFIG_STA_SUPPORT //
4165 IN PRTMP_ADAPTER pAd,
4168 VOID AsicSetMcastWC(
4169 IN PRTMP_ADAPTER pAd);
4171 VOID AsicDelWcidTab(
4172 IN PRTMP_ADAPTER pAd,
4176 IN PRTMP_ADAPTER pAd);
4178 VOID AsicDisableRDG(
4179 IN PRTMP_ADAPTER pAd);
4181 VOID AsicDisableSync(
4182 IN PRTMP_ADAPTER pAd);
4184 VOID AsicEnableBssSync(
4185 IN PRTMP_ADAPTER pAd);
4187 VOID AsicEnableIbssSync(
4188 IN PRTMP_ADAPTER pAd);
4190 VOID AsicSetEdcaParm(
4191 IN PRTMP_ADAPTER pAd,
4192 IN PEDCA_PARM pEdcaParm);
4194 VOID AsicSetSlotTime(
4195 IN PRTMP_ADAPTER pAd,
4196 IN BOOLEAN bUseShortSlotTime);
4198 VOID AsicAddSharedKeyEntry(
4199 IN PRTMP_ADAPTER pAd,
4207 VOID AsicRemoveSharedKeyEntry(
4208 IN PRTMP_ADAPTER pAd,
4212 VOID AsicUpdateWCIDAttribute(
4213 IN PRTMP_ADAPTER pAd,
4217 IN BOOLEAN bUsePairewiseKeyTable);
4219 VOID AsicUpdateWCIDIVEIV(
4220 IN PRTMP_ADAPTER pAd,
4225 VOID AsicUpdateRxWCIDTable(
4226 IN PRTMP_ADAPTER pAd,
4230 VOID AsicAddKeyEntry(
4231 IN PRTMP_ADAPTER pAd,
4235 IN PCIPHER_KEY pCipherKey,
4236 IN BOOLEAN bUsePairewiseKeyTable,
4239 VOID AsicAddPairwiseKeyEntry(
4240 IN PRTMP_ADAPTER pAd,
4243 IN CIPHER_KEY *pCipherKey);
4245 VOID AsicRemovePairwiseKeyEntry(
4246 IN PRTMP_ADAPTER pAd,
4250 BOOLEAN AsicSendCommandToMcu(
4251 IN PRTMP_ADAPTER pAd,
4258 VOID MacAddrRandomBssid(
4259 IN PRTMP_ADAPTER pAd,
4262 VOID MgtMacHeaderInit(
4263 IN PRTMP_ADAPTER pAd,
4264 IN OUT PHEADER_802_11 pHdr80211,
4271 IN PRTMP_ADAPTER pAd);
4274 IN PRTMP_ADAPTER pAd);
4280 #ifdef DOT11_N_SUPPORT
4282 IN PRTMP_ADAPTER pAd,
4284 #endif // DOT11_N_SUPPORT //
4286 ULONG BssTableSearch(
4291 ULONG BssSsidTableSearch(
4298 ULONG BssTableSearchWithSSID(
4305 VOID BssTableDeleteEntry(
4306 IN OUT PBSS_TABLE pTab,
4310 #ifdef DOT11_N_SUPPORT
4311 VOID BATableDeleteORIEntry(
4312 IN OUT PRTMP_ADAPTER pAd,
4313 IN BA_ORI_ENTRY *pBAORIEntry);
4315 VOID BATableDeleteRECEntry(
4316 IN OUT PRTMP_ADAPTER pAd,
4317 IN BA_REC_ENTRY *pBARECEntry);
4319 VOID BATableTearORIEntry(
4320 IN OUT PRTMP_ADAPTER pAd,
4323 IN BOOLEAN bForceDelete,
4326 VOID BATableTearRECEntry(
4327 IN OUT PRTMP_ADAPTER pAd,
4331 #endif // DOT11_N_SUPPORT //
4334 IN PRTMP_ADAPTER pAd,
4335 OUT PBSS_ENTRY pBss,
4340 IN USHORT BeaconPeriod,
4343 IN USHORT CapabilityInfo,
4345 IN UCHAR SupRateLen,
4347 IN UCHAR ExtRateLen,
4348 IN HT_CAPABILITY_IE *pHtCapability,
4349 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4350 IN UCHAR HtCapabilityLen,
4351 IN UCHAR AddHtInfoLen,
4352 IN UCHAR NewExtChanOffset,
4355 IN LARGE_INTEGER TimeStamp,
4357 IN PEDCA_PARM pEdcaParm,
4358 IN PQOS_CAPABILITY_PARM pQosCapability,
4359 IN PQBSS_LOAD_PARM pQbssLoad,
4360 IN USHORT LengthVIE,
4361 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4363 ULONG BssTableSetEntry(
4364 IN PRTMP_ADAPTER pAd,
4365 OUT PBSS_TABLE pTab,
4370 IN USHORT BeaconPeriod,
4373 IN USHORT CapabilityInfo,
4375 IN UCHAR SupRateLen,
4377 IN UCHAR ExtRateLen,
4378 IN HT_CAPABILITY_IE *pHtCapability,
4379 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4380 IN UCHAR HtCapabilityLen,
4381 IN UCHAR AddHtInfoLen,
4382 IN UCHAR NewExtChanOffset,
4385 IN LARGE_INTEGER TimeStamp,
4387 IN PEDCA_PARM pEdcaParm,
4388 IN PQOS_CAPABILITY_PARM pQosCapability,
4389 IN PQBSS_LOAD_PARM pQbssLoad,
4390 IN USHORT LengthVIE,
4391 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4393 #ifdef DOT11_N_SUPPORT
4394 VOID BATableInsertEntry(
4395 IN PRTMP_ADAPTER pAd,
4397 IN USHORT TimeOutValue,
4398 IN USHORT StartingSeq,
4401 IN UCHAR OriginatorStatus,
4402 IN BOOLEAN IsRecipient);
4404 #ifdef DOT11N_DRAFT3
4405 VOID Bss2040CoexistTimeOut(
4406 IN PVOID SystemSpecific1,
4407 IN PVOID FunctionContext,
4408 IN PVOID SystemSpecific2,
4409 IN PVOID SystemSpecific3);
4413 IN PRTMP_ADAPTER pAd);
4415 ULONG TriEventTableSetEntry(
4416 IN PRTMP_ADAPTER pAd,
4417 OUT TRIGGER_EVENT_TAB *Tab,
4419 IN HT_CAPABILITY_IE *pHtCapability,
4420 IN UCHAR HtCapabilityLen,
4422 IN UCHAR ChannelNo);
4424 VOID TriEventCounterMaintenance(
4425 IN PRTMP_ADAPTER pAd);
4426 #endif // DOT11N_DRAFT3 //
4427 #endif // DOT11_N_SUPPORT //
4429 VOID BssTableSsidSort(
4430 IN PRTMP_ADAPTER pAd,
4431 OUT BSS_TABLE *OutTab,
4435 VOID BssTableSortByRssi(
4436 IN OUT BSS_TABLE *OutTab);
4438 VOID BssCipherParse(
4439 IN OUT PBSS_ENTRY pBss);
4441 NDIS_STATUS MlmeQueueInit(
4442 IN MLME_QUEUE *Queue);
4444 VOID MlmeQueueDestroy(
4445 IN MLME_QUEUE *Queue);
4447 BOOLEAN MlmeEnqueue(
4448 IN PRTMP_ADAPTER pAd,
4454 BOOLEAN MlmeEnqueueForRecv(
4455 IN PRTMP_ADAPTER pAd,
4457 IN ULONG TimeStampHigh,
4458 IN ULONG TimeStampLow,
4467 BOOLEAN MlmeDequeue(
4468 IN MLME_QUEUE *Queue,
4469 OUT MLME_QUEUE_ELEM **Elem);
4471 VOID MlmeRestartStateMachine(
4472 IN PRTMP_ADAPTER pAd);
4474 BOOLEAN MlmeQueueEmpty(
4475 IN MLME_QUEUE *Queue);
4477 BOOLEAN MlmeQueueFull(
4478 IN MLME_QUEUE *Queue);
4480 BOOLEAN MsgTypeSubst(
4481 IN PRTMP_ADAPTER pAd,
4482 IN PFRAME_802_11 pFrame,
4486 VOID StateMachineInit(
4487 IN STATE_MACHINE *Sm,
4488 IN STATE_MACHINE_FUNC Trans[],
4491 IN STATE_MACHINE_FUNC DefFunc,
4495 VOID StateMachineSetAction(
4496 IN STATE_MACHINE *S,
4499 IN STATE_MACHINE_FUNC F);
4501 VOID StateMachinePerformAction(
4502 IN PRTMP_ADAPTER pAd,
4503 IN STATE_MACHINE *S,
4504 IN MLME_QUEUE_ELEM *Elem);
4507 IN PRTMP_ADAPTER pAd,
4508 IN MLME_QUEUE_ELEM *Elem);
4510 VOID AssocStateMachineInit(
4511 IN PRTMP_ADAPTER pAd,
4512 IN STATE_MACHINE *Sm,
4513 OUT STATE_MACHINE_FUNC Trans[]);
4515 VOID ReassocTimeout(
4516 IN PVOID SystemSpecific1,
4517 IN PVOID FunctionContext,
4518 IN PVOID SystemSpecific2,
4519 IN PVOID SystemSpecific3);
4522 IN PVOID SystemSpecific1,
4523 IN PVOID FunctionContext,
4524 IN PVOID SystemSpecific2,
4525 IN PVOID SystemSpecific3);
4527 VOID DisassocTimeout(
4528 IN PVOID SystemSpecific1,
4529 IN PVOID FunctionContext,
4530 IN PVOID SystemSpecific2,
4531 IN PVOID SystemSpecific3);
4533 //----------------------------------------------
4534 VOID MlmeDisassocReqAction(
4535 IN PRTMP_ADAPTER pAd,
4536 IN MLME_QUEUE_ELEM *Elem);
4538 VOID MlmeAssocReqAction(
4539 IN PRTMP_ADAPTER pAd,
4540 IN MLME_QUEUE_ELEM *Elem);
4542 VOID MlmeReassocReqAction(
4543 IN PRTMP_ADAPTER pAd,
4544 IN MLME_QUEUE_ELEM *Elem);
4546 VOID MlmeDisassocReqAction(
4547 IN PRTMP_ADAPTER pAd,
4548 IN MLME_QUEUE_ELEM *Elem);
4550 VOID PeerAssocRspAction(
4551 IN PRTMP_ADAPTER pAd,
4552 IN MLME_QUEUE_ELEM *Elem);
4554 VOID PeerReassocRspAction(
4555 IN PRTMP_ADAPTER pAd,
4556 IN MLME_QUEUE_ELEM *Elem);
4558 VOID PeerDisassocAction(
4559 IN PRTMP_ADAPTER pAd,
4560 IN MLME_QUEUE_ELEM *Elem);
4562 VOID DisassocTimeoutAction(
4563 IN PRTMP_ADAPTER pAd,
4564 IN MLME_QUEUE_ELEM *Elem);
4566 VOID AssocTimeoutAction(
4567 IN PRTMP_ADAPTER pAd,
4568 IN MLME_QUEUE_ELEM *Elem);
4570 VOID ReassocTimeoutAction(
4571 IN PRTMP_ADAPTER pAd,
4572 IN MLME_QUEUE_ELEM *Elem);
4575 IN PRTMP_ADAPTER pAd,
4578 VOID SwitchBetweenWepAndCkip(
4579 IN PRTMP_ADAPTER pAd);
4581 VOID InvalidStateWhenAssoc(
4582 IN PRTMP_ADAPTER pAd,
4583 IN MLME_QUEUE_ELEM *Elem);
4585 VOID InvalidStateWhenReassoc(
4586 IN PRTMP_ADAPTER pAd,
4587 IN MLME_QUEUE_ELEM *Elem);
4589 VOID InvalidStateWhenDisassociate(
4590 IN PRTMP_ADAPTER pAd,
4591 IN MLME_QUEUE_ELEM *Elem);
4594 VOID MlmeCntlConfirm(
4595 IN PRTMP_ADAPTER pAd,
4601 IN PRTMP_ADAPTER pAd);
4603 VOID ComposeNullFrame(
4604 IN PRTMP_ADAPTER pAd);
4607 IN PRTMP_ADAPTER pAd,
4609 IN USHORT CapabilityInfo,
4612 IN UCHAR SupRateLen,
4614 IN UCHAR ExtRateLen,
4615 IN PEDCA_PARM pEdcaParm,
4616 IN HT_CAPABILITY_IE *pHtCapability,
4617 IN UCHAR HtCapabilityLen,
4618 IN ADD_HT_INFO_IE *pAddHtInfo);
4620 VOID AuthStateMachineInit(
4621 IN PRTMP_ADAPTER pAd,
4622 IN PSTATE_MACHINE sm,
4623 OUT STATE_MACHINE_FUNC Trans[]);
4626 IN PVOID SystemSpecific1,
4627 IN PVOID FunctionContext,
4628 IN PVOID SystemSpecific2,
4629 IN PVOID SystemSpecific3);
4631 VOID MlmeAuthReqAction(
4632 IN PRTMP_ADAPTER pAd,
4633 IN MLME_QUEUE_ELEM *Elem);
4635 VOID PeerAuthRspAtSeq2Action(
4636 IN PRTMP_ADAPTER pAd,
4637 IN MLME_QUEUE_ELEM *Elem);
4639 VOID PeerAuthRspAtSeq4Action(
4640 IN PRTMP_ADAPTER pAd,
4641 IN MLME_QUEUE_ELEM *Elem);
4643 VOID AuthTimeoutAction(
4644 IN PRTMP_ADAPTER pAd,
4645 IN MLME_QUEUE_ELEM *Elem);
4648 IN PRTMP_ADAPTER pAd,
4651 VOID MlmeDeauthReqAction(
4652 IN PRTMP_ADAPTER pAd,
4653 IN MLME_QUEUE_ELEM *Elem);
4655 VOID InvalidStateWhenAuth(
4656 IN PRTMP_ADAPTER pAd,
4657 IN MLME_QUEUE_ELEM *Elem);
4659 //=============================================
4661 VOID AuthRspStateMachineInit(
4662 IN PRTMP_ADAPTER pAd,
4663 IN PSTATE_MACHINE Sm,
4664 IN STATE_MACHINE_FUNC Trans[]);
4666 VOID PeerDeauthAction(
4667 IN PRTMP_ADAPTER pAd,
4668 IN MLME_QUEUE_ELEM *Elem);
4670 VOID PeerAuthSimpleRspGenAndSend(
4671 IN PRTMP_ADAPTER pAd,
4672 IN PHEADER_802_11 pHdr80211,
4679 // Private routines in dls.c
4682 #ifdef CONFIG_STA_SUPPORT
4683 #ifdef QOS_DLS_SUPPORT
4684 void DlsStateMachineInit(
4685 IN PRTMP_ADAPTER pAd,
4686 IN STATE_MACHINE *Sm,
4687 OUT STATE_MACHINE_FUNC Trans[]);
4689 VOID MlmeDlsReqAction(
4690 IN PRTMP_ADAPTER pAd,
4691 IN MLME_QUEUE_ELEM *Elem);
4693 VOID PeerDlsReqAction(
4694 IN PRTMP_ADAPTER pAd,
4695 IN MLME_QUEUE_ELEM *Elem);
4697 VOID PeerDlsRspAction(
4698 IN PRTMP_ADAPTER pAd,
4699 IN MLME_QUEUE_ELEM *Elem);
4701 VOID MlmeDlsTearDownAction(
4702 IN PRTMP_ADAPTER pAd,
4703 IN MLME_QUEUE_ELEM *Elem);
4705 VOID PeerDlsTearDownAction(
4706 IN PRTMP_ADAPTER pAd,
4707 IN MLME_QUEUE_ELEM *Elem);
4709 VOID RTMPCheckDLSTimeOut(
4710 IN PRTMP_ADAPTER pAd);
4712 BOOLEAN RTMPRcvFrameDLSCheck(
4713 IN PRTMP_ADAPTER pAd,
4714 IN PHEADER_802_11 pHeader,
4716 IN PRT28XX_RXD_STRUC pRxD);
4718 INT RTMPCheckDLSFrame(
4719 IN PRTMP_ADAPTER pAd,
4722 VOID RTMPSendDLSTearDownFrame(
4723 IN PRTMP_ADAPTER pAd,
4726 NDIS_STATUS RTMPSendSTAKeyRequest(
4727 IN PRTMP_ADAPTER pAd,
4730 NDIS_STATUS RTMPSendSTAKeyHandShake(
4731 IN PRTMP_ADAPTER pAd,
4734 VOID DlsTimeoutAction(
4735 IN PVOID SystemSpecific1,
4736 IN PVOID FunctionContext,
4737 IN PVOID SystemSpecific2,
4738 IN PVOID SystemSpecific3);
4740 BOOLEAN MlmeDlsReqSanity(
4741 IN PRTMP_ADAPTER pAd,
4744 OUT PRT_802_11_DLS *pDLS,
4745 OUT PUSHORT pReason);
4747 INT Set_DlsEntryInfo_Display_Proc(
4748 IN PRTMP_ADAPTER pAd,
4751 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4752 IN PRTMP_ADAPTER pAd,
4754 IN UINT DlsEntryIdx);
4756 BOOLEAN MacTableDeleteDlsEntry(
4757 IN PRTMP_ADAPTER pAd,
4761 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4762 IN PRTMP_ADAPTER pAd,
4764 IN BOOLEAN bResetIdelCount);
4766 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4767 IN PRTMP_ADAPTER pAd,
4770 IN BOOLEAN bResetIdelCount);
4772 INT Set_DlsAddEntry_Proc(
4773 IN PRTMP_ADAPTER pAd,
4776 INT Set_DlsTearDownEntry_Proc(
4777 IN PRTMP_ADAPTER pAd,
4779 #endif // QOS_DLS_SUPPORT //
4780 #endif // CONFIG_STA_SUPPORT //
4782 #ifdef QOS_DLS_SUPPORT
4783 BOOLEAN PeerDlsReqSanity(
4784 IN PRTMP_ADAPTER pAd,
4789 OUT USHORT *pCapabilityInfo,
4790 OUT USHORT *pDlsTimeout,
4791 OUT UCHAR *pRatesLen,
4793 OUT UCHAR *pHtCapabilityLen,
4794 OUT HT_CAPABILITY_IE *pHtCapability);
4796 BOOLEAN PeerDlsRspSanity(
4797 IN PRTMP_ADAPTER pAd,
4802 OUT USHORT *pCapabilityInfo,
4803 OUT USHORT *pStatus,
4804 OUT UCHAR *pRatesLen,
4806 OUT UCHAR *pHtCapabilityLen,
4807 OUT HT_CAPABILITY_IE *pHtCapability);
4809 BOOLEAN PeerDlsTearDownSanity(
4810 IN PRTMP_ADAPTER pAd,
4815 OUT USHORT *pReason);
4816 #endif // QOS_DLS_SUPPORT //
4818 //========================================
4820 VOID SyncStateMachineInit(
4821 IN PRTMP_ADAPTER pAd,
4822 IN STATE_MACHINE *Sm,
4823 OUT STATE_MACHINE_FUNC Trans[]);
4826 IN PVOID SystemSpecific1,
4827 IN PVOID FunctionContext,
4828 IN PVOID SystemSpecific2,
4829 IN PVOID SystemSpecific3);
4832 IN PVOID SystemSpecific1,
4833 IN PVOID FunctionContext,
4834 IN PVOID SystemSpecific2,
4835 IN PVOID SystemSpecific3);
4837 VOID MlmeScanReqAction(
4838 IN PRTMP_ADAPTER pAd,
4839 IN MLME_QUEUE_ELEM *Elem);
4841 VOID InvalidStateWhenScan(
4842 IN PRTMP_ADAPTER pAd,
4843 IN MLME_QUEUE_ELEM *Elem);
4845 VOID InvalidStateWhenJoin(
4846 IN PRTMP_ADAPTER pAd,
4847 IN MLME_QUEUE_ELEM *Elem);
4849 VOID InvalidStateWhenStart(
4850 IN PRTMP_ADAPTER pAd,
4851 IN MLME_QUEUE_ELEM *Elem);
4854 IN PRTMP_ADAPTER pAd,
4855 IN MLME_QUEUE_ELEM *Elem);
4857 VOID EnqueueProbeRequest(
4858 IN PRTMP_ADAPTER pAd);
4860 BOOLEAN ScanRunning(
4861 IN PRTMP_ADAPTER pAd);
4862 //=========================================
4865 IN PRTMP_ADAPTER pAd,
4866 IN STATE_MACHINE *S,
4867 OUT STATE_MACHINE_FUNC Trans[]);
4869 VOID MlmeCntlMachinePerformAction(
4870 IN PRTMP_ADAPTER pAd,
4871 IN STATE_MACHINE *S,
4872 IN MLME_QUEUE_ELEM *Elem);
4875 IN PRTMP_ADAPTER pAd,
4876 IN MLME_QUEUE_ELEM *Elem);
4878 VOID CntlOidScanProc(
4879 IN PRTMP_ADAPTER pAd,
4880 IN MLME_QUEUE_ELEM *Elem);
4882 VOID CntlOidSsidProc(
4883 IN PRTMP_ADAPTER pAd,
4884 IN MLME_QUEUE_ELEM * Elem);
4886 VOID CntlOidRTBssidProc(
4887 IN PRTMP_ADAPTER pAd,
4888 IN MLME_QUEUE_ELEM * Elem);
4890 VOID CntlMlmeRoamingProc(
4891 IN PRTMP_ADAPTER pAd,
4892 IN MLME_QUEUE_ELEM * Elem);
4894 VOID CntlWaitDisassocProc(
4895 IN PRTMP_ADAPTER pAd,
4896 IN MLME_QUEUE_ELEM *Elem);
4898 VOID CntlWaitJoinProc(
4899 IN PRTMP_ADAPTER pAd,
4900 IN MLME_QUEUE_ELEM *Elem);
4902 VOID CntlWaitReassocProc(
4903 IN PRTMP_ADAPTER pAd,
4904 IN MLME_QUEUE_ELEM *Elem);
4906 VOID CntlWaitStartProc(
4907 IN PRTMP_ADAPTER pAd,
4908 IN MLME_QUEUE_ELEM *Elem);
4910 VOID CntlWaitAuthProc(
4911 IN PRTMP_ADAPTER pAd,
4912 IN MLME_QUEUE_ELEM *Elem);
4914 VOID CntlWaitAuthProc2(
4915 IN PRTMP_ADAPTER pAd,
4916 IN MLME_QUEUE_ELEM *Elem);
4918 VOID CntlWaitAssocProc(
4919 IN PRTMP_ADAPTER pAd,
4920 IN MLME_QUEUE_ELEM *Elem);
4922 #ifdef QOS_DLS_SUPPORT
4923 VOID CntlOidDLSSetupProc(
4924 IN PRTMP_ADAPTER pAd,
4925 IN MLME_QUEUE_ELEM *Elem);
4926 #endif // QOS_DLS_SUPPORT //
4929 IN PRTMP_ADAPTER pAd,
4933 IN PRTMP_ADAPTER pAd,
4934 IN BOOLEAN IsReqFromAP);
4936 VOID IterateOnBssTab(
4937 IN PRTMP_ADAPTER pAd);
4939 VOID IterateOnBssTab2(
4940 IN PRTMP_ADAPTER pAd);;
4943 IN PRTMP_ADAPTER pAd,
4944 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4948 IN PRTMP_ADAPTER pAd,
4949 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4951 IN USHORT CapabilityInfo,
4953 IN USHORT ListenIntv);
4956 IN PRTMP_ADAPTER pAd,
4957 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4963 VOID DisassocParmFill(
4964 IN PRTMP_ADAPTER pAd,
4965 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4970 IN PRTMP_ADAPTER pAd,
4971 IN OUT MLME_START_REQ_STRUCT *StartReq,
4976 IN PRTMP_ADAPTER pAd,
4977 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4982 IN PRTMP_ADAPTER pAd);
4984 VOID EnqueueBeaconFrame(
4985 IN PRTMP_ADAPTER pAd);
4987 VOID MlmeJoinReqAction(
4988 IN PRTMP_ADAPTER pAd,
4989 IN MLME_QUEUE_ELEM *Elem);
4991 VOID MlmeScanReqAction(
4992 IN PRTMP_ADAPTER pAd,
4993 IN MLME_QUEUE_ELEM *Elem);
4995 VOID MlmeStartReqAction(
4996 IN PRTMP_ADAPTER pAd,
4997 IN MLME_QUEUE_ELEM *Elem);
4999 VOID ScanTimeoutAction(
5000 IN PRTMP_ADAPTER pAd,
5001 IN MLME_QUEUE_ELEM *Elem);
5003 VOID BeaconTimeoutAtJoinAction(
5004 IN PRTMP_ADAPTER pAd,
5005 IN MLME_QUEUE_ELEM *Elem);
5007 VOID PeerBeaconAtScanAction(
5008 IN PRTMP_ADAPTER pAd,
5009 IN MLME_QUEUE_ELEM *Elem);
5011 VOID PeerBeaconAtJoinAction(
5012 IN PRTMP_ADAPTER pAd,
5013 IN MLME_QUEUE_ELEM *Elem);
5016 IN PRTMP_ADAPTER pAd,
5017 IN MLME_QUEUE_ELEM *Elem);
5019 VOID PeerProbeReqAction(
5020 IN PRTMP_ADAPTER pAd,
5021 IN MLME_QUEUE_ELEM *Elem);
5023 VOID ScanNextChannel(
5024 IN PRTMP_ADAPTER pAd);
5026 ULONG MakeIbssBeacon(
5027 IN PRTMP_ADAPTER pAd);
5029 VOID CCXAdjacentAPReport(
5030 IN PRTMP_ADAPTER pAd);
5032 BOOLEAN MlmeScanReqSanity(
5033 IN PRTMP_ADAPTER pAd,
5039 OUT UCHAR *ScanType);
5041 BOOLEAN PeerBeaconAndProbeRspSanity(
5042 IN PRTMP_ADAPTER pAd,
5045 IN UCHAR MsgChannel,
5049 OUT UCHAR *pSsidLen,
5050 OUT UCHAR *pBssType,
5051 OUT USHORT *pBeaconPeriod,
5052 OUT UCHAR *pChannel,
5053 OUT UCHAR *pNewChannel,
5054 OUT LARGE_INTEGER *pTimestamp,
5055 OUT CF_PARM *pCfParm,
5056 OUT USHORT *pAtimWin,
5057 OUT USHORT *pCapabilityInfo,
5059 OUT UCHAR *pDtimCount,
5060 OUT UCHAR *pDtimPeriod,
5061 OUT UCHAR *pBcastFlag,
5062 OUT UCHAR *pMessageToMe,
5063 OUT UCHAR SupRate[],
5064 OUT UCHAR *pSupRateLen,
5065 OUT UCHAR ExtRate[],
5066 OUT UCHAR *pExtRateLen,
5067 OUT UCHAR *pCkipFlag,
5068 OUT UCHAR *pAironetCellPowerLimit,
5069 OUT PEDCA_PARM pEdcaParm,
5070 OUT PQBSS_LOAD_PARM pQbssLoad,
5071 OUT PQOS_CAPABILITY_PARM pQosCapability,
5072 OUT ULONG *pRalinkIe,
5073 OUT UCHAR *pHtCapabilityLen,
5074 #ifdef CONFIG_STA_SUPPORT
5075 OUT UCHAR *pPreNHtCapabilityLen,
5076 #endif // CONFIG_STA_SUPPORT //
5077 OUT HT_CAPABILITY_IE *pHtCapability,
5078 OUT UCHAR *AddHtInfoLen,
5079 OUT ADD_HT_INFO_IE *AddHtInfo,
5080 OUT UCHAR *NewExtChannel,
5081 OUT USHORT *LengthVIE,
5082 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5084 BOOLEAN PeerAddBAReqActionSanity(
5085 IN PRTMP_ADAPTER pAd,
5090 BOOLEAN PeerAddBARspActionSanity(
5091 IN PRTMP_ADAPTER pAd,
5095 BOOLEAN PeerDelBAActionSanity(
5096 IN PRTMP_ADAPTER pAd,
5101 BOOLEAN MlmeAssocReqSanity(
5102 IN PRTMP_ADAPTER pAd,
5106 OUT USHORT *CapabilityInfo,
5108 OUT USHORT *ListenIntv);
5110 BOOLEAN MlmeAuthReqSanity(
5111 IN PRTMP_ADAPTER pAd,
5118 BOOLEAN MlmeStartReqSanity(
5119 IN PRTMP_ADAPTER pAd,
5123 OUT UCHAR *Ssidlen);
5125 BOOLEAN PeerAuthSanity(
5126 IN PRTMP_ADAPTER pAd,
5133 OUT CHAR ChlgText[]);
5135 BOOLEAN PeerAssocRspSanity(
5136 IN PRTMP_ADAPTER pAd,
5140 OUT USHORT *pCapabilityInfo,
5141 OUT USHORT *pStatus,
5143 OUT UCHAR SupRate[],
5144 OUT UCHAR *pSupRateLen,
5145 OUT UCHAR ExtRate[],
5146 OUT UCHAR *pExtRateLen,
5147 OUT HT_CAPABILITY_IE *pHtCapability,
5148 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5149 OUT UCHAR *pHtCapabilityLen,
5150 OUT UCHAR *pAddHtInfoLen,
5151 OUT UCHAR *pNewExtChannelOffset,
5152 OUT PEDCA_PARM pEdcaParm,
5153 OUT UCHAR *pCkipFlag);
5155 BOOLEAN PeerDisassocSanity(
5156 IN PRTMP_ADAPTER pAd,
5160 OUT USHORT *Reason);
5162 BOOLEAN PeerWpaMessageSanity(
5163 IN PRTMP_ADAPTER pAd,
5164 IN PEAPOL_PACKET pMsg,
5167 IN MAC_TABLE_ENTRY *pEntry);
5169 BOOLEAN PeerDeauthSanity(
5170 IN PRTMP_ADAPTER pAd,
5174 OUT USHORT *Reason);
5176 BOOLEAN PeerProbeReqSanity(
5177 IN PRTMP_ADAPTER pAd,
5182 OUT UCHAR *pSsidLen);
5188 OUT UCHAR *BcastFlag,
5189 OUT UCHAR *DtimCount,
5190 OUT UCHAR *DtimPeriod,
5191 OUT UCHAR *MessageToMe);
5193 UCHAR ChannelSanity(
5194 IN PRTMP_ADAPTER pAd,
5197 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5198 IN PBSS_ENTRY pBss);
5200 BOOLEAN MlmeDelBAReqSanity(
5201 IN PRTMP_ADAPTER pAd,
5205 BOOLEAN MlmeAddBAReqSanity(
5206 IN PRTMP_ADAPTER pAd,
5211 ULONG MakeOutgoingFrame(
5213 OUT ULONG *Length, ...);
5216 IN PRTMP_ADAPTER pAd,
5220 IN PRTMP_ADAPTER pAd);
5222 VOID AsicUpdateAutoFallBackTable(
5223 IN PRTMP_ADAPTER pAd,
5226 VOID MlmePeriodicExec(
5227 IN PVOID SystemSpecific1,
5228 IN PVOID FunctionContext,
5229 IN PVOID SystemSpecific2,
5230 IN PVOID SystemSpecific3);
5233 IN PVOID SystemSpecific1,
5234 IN PVOID FunctionContext,
5235 IN PVOID SystemSpecific2,
5236 IN PVOID SystemSpecific3);
5239 IN PVOID SystemSpecific1,
5240 IN PVOID FunctionContext,
5241 IN PVOID SystemSpecific2,
5242 IN PVOID SystemSpecific3);
5244 VOID STAMlmePeriodicExec(
5248 IN PRTMP_ADAPTER pAd);
5250 VOID MlmeAutoReconnectLastSSID(
5251 IN PRTMP_ADAPTER pAd);
5253 BOOLEAN MlmeValidateSSID(
5257 VOID MlmeCheckForRoaming(
5258 IN PRTMP_ADAPTER pAd,
5261 VOID MlmeCheckForFastRoaming(
5262 IN PRTMP_ADAPTER pAd,
5265 VOID MlmeDynamicTxRateSwitching(
5266 IN PRTMP_ADAPTER pAd);
5269 IN PRTMP_ADAPTER pAd,
5270 IN PMAC_TABLE_ENTRY pEntry,
5271 IN PRTMP_TX_RATE_SWITCH pTxRate);
5273 VOID MlmeSelectTxRateTable(
5274 IN PRTMP_ADAPTER pAd,
5275 IN PMAC_TABLE_ENTRY pEntry,
5277 IN PUCHAR pTableSize,
5278 IN PUCHAR pInitTxRateIdx);
5280 VOID MlmeCalculateChannelQuality(
5281 IN PRTMP_ADAPTER pAd,
5284 VOID MlmeCheckPsmChange(
5285 IN PRTMP_ADAPTER pAd,
5289 IN PRTMP_ADAPTER pAd,
5292 VOID MlmeSetTxPreamble(
5293 IN PRTMP_ADAPTER pAd,
5294 IN USHORT TxPreamble);
5296 VOID UpdateBasicRateBitmap(
5297 IN PRTMP_ADAPTER pAd);
5299 VOID MlmeUpdateTxRates(
5300 IN PRTMP_ADAPTER pAd,
5304 #ifdef DOT11_N_SUPPORT
5305 VOID MlmeUpdateHtTxRates(
5306 IN PRTMP_ADAPTER pAd,
5308 #endif // DOT11_N_SUPPORT //
5310 VOID RTMPCheckRates(
5311 IN PRTMP_ADAPTER pAd,
5312 IN OUT UCHAR SupRate[],
5313 IN OUT UCHAR *SupRateLen);
5315 #ifdef CONFIG_STA_SUPPORT
5316 BOOLEAN RTMPCheckChannel(
5317 IN PRTMP_ADAPTER pAd,
5318 IN UCHAR CentralChannel,
5320 #endif // CONFIG_STA_SUPPORT //
5322 BOOLEAN RTMPCheckHt(
5323 IN PRTMP_ADAPTER pAd,
5325 IN OUT HT_CAPABILITY_IE *pHtCapability,
5326 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5328 VOID StaQuickResponeForRateUpExec(
5329 IN PVOID SystemSpecific1,
5330 IN PVOID FunctionContext,
5331 IN PVOID SystemSpecific2,
5332 IN PVOID SystemSpecific3);
5334 VOID AsicBbpTuning1(
5335 IN PRTMP_ADAPTER pAd);
5337 VOID AsicBbpTuning2(
5338 IN PRTMP_ADAPTER pAd);
5340 VOID RTMPUpdateMlmeRate(
5341 IN PRTMP_ADAPTER pAd);
5344 IN PRTMP_ADAPTER pAd,
5350 IN PRTMP_ADAPTER pAd,
5353 VOID AsicEvaluateRxAnt(
5354 IN PRTMP_ADAPTER pAd);
5356 VOID AsicRxAntEvalTimeout(
5357 IN PVOID SystemSpecific1,
5358 IN PVOID FunctionContext,
5359 IN PVOID SystemSpecific2,
5360 IN PVOID SystemSpecific3);
5362 VOID APSDPeriodicExec(
5363 IN PVOID SystemSpecific1,
5364 IN PVOID FunctionContext,
5365 IN PVOID SystemSpecific2,
5366 IN PVOID SystemSpecific3);
5368 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5369 IN PRTMP_ADAPTER pAd,
5370 IN PMAC_TABLE_ENTRY pEntry);
5372 UCHAR RTMPStaFixedTxMode(
5373 IN PRTMP_ADAPTER pAd,
5374 IN PMAC_TABLE_ENTRY pEntry);
5376 VOID RTMPUpdateLegacyTxSetting(
5377 UCHAR fixed_tx_mode,
5378 PMAC_TABLE_ENTRY pEntry);
5380 BOOLEAN RTMPAutoRateSwitchCheck(
5381 IN PRTMP_ADAPTER pAd);
5383 NDIS_STATUS MlmeInit(
5384 IN PRTMP_ADAPTER pAd);
5387 IN PRTMP_ADAPTER pAd);
5390 IN PRTMP_ADAPTER pAd);
5392 VOID MlmeResetRalinkCounters(
5393 IN PRTMP_ADAPTER pAd);
5395 VOID BuildChannelList(
5396 IN PRTMP_ADAPTER pAd);
5399 IN PRTMP_ADAPTER pAd);
5402 IN PRTMP_ADAPTER pAd,
5405 VOID ChangeToCellPowerLimit(
5406 IN PRTMP_ADAPTER pAd,
5407 IN UCHAR AironetCellPowerLimit);
5410 IN PRTMP_ADAPTER pAd,
5414 IN PRTMP_ADAPTER pAd,
5418 IN PRTMP_ADAPTER pAd);
5421 IN PRTMP_ADAPTER pAd,
5426 IN PRTMP_ADAPTER pAd);
5429 IN PRTMP_ADAPTER pAd);
5432 IN PRTMP_ADAPTER pAd);
5434 USHORT RTMP_EEPROM_READ16(
5435 IN PRTMP_ADAPTER pAd,
5438 VOID RTMP_EEPROM_WRITE16(
5439 IN PRTMP_ADAPTER pAd,
5444 // Prototypes of function definition in rtmp_tkip.c
5446 VOID RTMPInitTkipEngine(
5447 IN PRTMP_ADAPTER pAd,
5456 VOID RTMPInitMICEngine(
5457 IN PRTMP_ADAPTER pAd,
5461 IN UCHAR UserPriority,
5464 BOOLEAN RTMPTkipCompareMICValue(
5465 IN PRTMP_ADAPTER pAd,
5470 IN UCHAR UserPriority,
5473 VOID RTMPCalculateMICValue(
5474 IN PRTMP_ADAPTER pAd,
5475 IN PNDIS_PACKET pPacket,
5477 IN PCIPHER_KEY pKey,
5480 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5481 IN PRTMP_ADAPTER pAd,
5489 VOID RTMPTkipAppendByte(
5490 IN PTKIP_KEY_INFO pTkip,
5493 VOID RTMPTkipAppend(
5494 IN PTKIP_KEY_INFO pTkip,
5498 VOID RTMPTkipGetMIC(
5499 IN PTKIP_KEY_INFO pTkip);
5501 BOOLEAN RTMPSoftDecryptTKIP(
5502 IN PRTMP_ADAPTER pAd,
5504 IN ULONG DataByteCnt,
5505 IN UCHAR UserPriority,
5506 IN PCIPHER_KEY pWpaKey);
5508 BOOLEAN RTMPSoftDecryptAES(
5509 IN PRTMP_ADAPTER pAd,
5511 IN ULONG DataByteCnt,
5512 IN PCIPHER_KEY pWpaKey);
5515 // Prototypes of function definition in cmm_info.c
5517 NDIS_STATUS RTMPWPARemoveKeyProc(
5518 IN PRTMP_ADAPTER pAd,
5521 VOID RTMPWPARemoveAllKeys(
5522 IN PRTMP_ADAPTER pAd);
5524 BOOLEAN RTMPCheckStrPrintAble(
5528 VOID RTMPSetPhyMode(
5529 IN PRTMP_ADAPTER pAd,
5532 VOID RTMPUpdateHTIE(
5533 IN RT_HT_CAPABILITY *pRtHt,
5535 OUT HT_CAPABILITY_IE *pHtCapability,
5536 OUT ADD_HT_INFO_IE *pAddHtInfo);
5538 VOID RTMPAddWcidAttributeEntry(
5539 IN PRTMP_ADAPTER pAd,
5543 IN MAC_TABLE_ENTRY *pEntry);
5545 CHAR *GetEncryptType(
5551 VOID RTMPIoctlGetSiteSurvey(
5552 IN PRTMP_ADAPTER pAdapter,
5553 IN struct iwreq *wrq);
5555 VOID RTMPIoctlGetMacTable(
5556 IN PRTMP_ADAPTER pAd,
5557 IN struct iwreq *wrq);
5559 VOID RTMPIndicateWPA2Status(
5560 IN PRTMP_ADAPTER pAdapter);
5562 VOID RTMPOPModeSwitching(
5563 IN PRTMP_ADAPTER pAd);
5565 #ifdef CONFIG_STA_SUPPORT
5566 VOID RTMPAddBSSIDCipher(
5567 IN PRTMP_ADAPTER pAd,
5569 IN PNDIS_802_11_KEY pKey,
5570 IN UCHAR CipherAlg);
5571 #endif // CONFIG_STA_SUPPORT //
5573 #ifdef DOT11_N_SUPPORT
5575 IN PRTMP_ADAPTER pAd,
5576 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5578 VOID RTMPSetIndividualHT(
5579 IN PRTMP_ADAPTER pAd,
5581 #endif // DOT11_N_SUPPORT //
5583 VOID RTMPSendWirelessEvent(
5584 IN PRTMP_ADAPTER pAd,
5585 IN USHORT Event_flag,
5590 VOID NICUpdateCntlCounters(
5591 IN PRTMP_ADAPTER pAd,
5592 IN PHEADER_802_11 pHeader,
5594 IN PRXWI_STRUC pRxWI);
5596 // prototype in wpa.c
5598 BOOLEAN WpaMsgTypeSubst(
5602 VOID WpaPskStateMachineInit(
5603 IN PRTMP_ADAPTER pAd,
5604 IN STATE_MACHINE *S,
5605 OUT STATE_MACHINE_FUNC Trans[]);
5607 VOID WpaEAPOLKeyAction(
5608 IN PRTMP_ADAPTER pAd,
5609 IN MLME_QUEUE_ELEM *Elem);
5611 VOID WpaPairMsg1Action(
5612 IN PRTMP_ADAPTER pAd,
5613 IN MLME_QUEUE_ELEM *Elem);
5615 VOID WpaPairMsg3Action(
5616 IN PRTMP_ADAPTER pAd,
5617 IN MLME_QUEUE_ELEM *Elem);
5619 VOID WpaGroupMsg1Action(
5620 IN PRTMP_ADAPTER pAd,
5621 IN MLME_QUEUE_ELEM *Elem);
5623 VOID WpaMacHeaderInit(
5624 IN PRTMP_ADAPTER pAd,
5625 IN OUT PHEADER_802_11 pHdr80211,
5629 VOID Wpa2PairMsg1Action(
5630 IN PRTMP_ADAPTER pAd,
5631 IN MLME_QUEUE_ELEM *Elem);
5633 VOID Wpa2PairMsg3Action(
5634 IN PRTMP_ADAPTER pAd,
5635 IN MLME_QUEUE_ELEM *Elem);
5637 BOOLEAN ParseKeyData(
5638 IN PRTMP_ADAPTER pAd,
5640 IN UCHAR KeyDataLen,
5641 IN UCHAR bPairewise);
5643 VOID RTMPToWirelessSta(
5644 IN PRTMP_ADAPTER pAd,
5645 IN PUCHAR pHeader802_3,
5649 IN BOOLEAN is4wayFrame);
5677 IN PRTMP_ADAPTER pAd,
5687 IN PRTMP_ADAPTER pAd,
5692 // prototype in aironet.c
5694 VOID AironetStateMachineInit(
5695 IN PRTMP_ADAPTER pAd,
5696 IN STATE_MACHINE *S,
5697 OUT STATE_MACHINE_FUNC Trans[]);
5699 VOID AironetMsgAction(
5700 IN PRTMP_ADAPTER pAd,
5701 IN MLME_QUEUE_ELEM *Elem);
5703 VOID AironetRequestAction(
5704 IN PRTMP_ADAPTER pAd,
5705 IN MLME_QUEUE_ELEM *Elem);
5707 VOID ChannelLoadRequestAction(
5708 IN PRTMP_ADAPTER pAd,
5711 VOID NoiseHistRequestAction(
5712 IN PRTMP_ADAPTER pAd,
5715 VOID BeaconRequestAction(
5716 IN PRTMP_ADAPTER pAd,
5719 VOID AironetReportAction(
5720 IN PRTMP_ADAPTER pAd,
5721 IN MLME_QUEUE_ELEM *Elem);
5723 VOID ChannelLoadReportAction(
5724 IN PRTMP_ADAPTER pAd,
5727 VOID NoiseHistReportAction(
5728 IN PRTMP_ADAPTER pAd,
5731 VOID AironetFinalReportAction(
5732 IN PRTMP_ADAPTER pAd);
5734 VOID BeaconReportAction(
5735 IN PRTMP_ADAPTER pAd,
5738 VOID AironetAddBeaconReport(
5739 IN PRTMP_ADAPTER pAd,
5741 IN PMLME_QUEUE_ELEM pElem);
5743 VOID AironetCreateBeaconReportFromBssTable(
5744 IN PRTMP_ADAPTER pAd);
5746 VOID DBGPRINT_TX_RING(
5747 IN PRTMP_ADAPTER pAd,
5750 VOID DBGPRINT_RX_RING(
5751 IN PRTMP_ADAPTER pAd);
5754 IN PRTMP_ADAPTER pAd,
5756 IN UCHAR RssiNumber);
5759 #ifdef DOT11N_DRAFT3
5760 VOID BuildEffectedChannelList(
5761 IN PRTMP_ADAPTER pAd);
5762 #endif // DOT11N_DRAFT3 //
5765 VOID APAsicEvaluateRxAnt(
5766 IN PRTMP_ADAPTER pAd);
5769 VOID APAsicRxAntEvalTimeout(
5770 IN PRTMP_ADAPTER pAd);
5773 // function prototype in cmm_wpa.c
5775 BOOLEAN RTMPCheckWPAframe(
5776 IN PRTMP_ADAPTER pAd,
5777 IN PMAC_TABLE_ENTRY pEntry,
5779 IN ULONG DataByteCount,
5780 IN UCHAR FromWhichBSSID);
5782 VOID AES_GTK_KEY_UNWRAP(
5784 OUT UCHAR *plaintext,
5786 IN UCHAR *ciphertext);
5788 BOOLEAN RTMPCheckRSNIE(
5789 IN PRTMP_ADAPTER pAd,
5792 IN MAC_TABLE_ENTRY *pEntry,
5795 BOOLEAN RTMPParseEapolKeyData(
5796 IN PRTMP_ADAPTER pAd,
5798 IN UCHAR KeyDataLen,
5799 IN UCHAR GroupKeyIndex,
5802 IN MAC_TABLE_ENTRY *pEntry);
5804 VOID ConstructEapolMsg(
5805 IN PRTMP_ADAPTER pAd,
5806 IN UCHAR PeerAuthMode,
5807 IN UCHAR PeerWepStatus,
5808 IN UCHAR MyGroupKeyWepStatus,
5810 IN UCHAR DefaultKeyIdx,
5811 IN UCHAR *ReplayCounter,
5818 OUT PEAPOL_PACKET pMsg);
5821 IN PRTMP_ADAPTER pAd,
5822 IN UCHAR PeerWepStatus,
5824 OUT PEAPOL_PACKET pMsg);
5826 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5827 IN PRTMP_ADAPTER pAd,
5829 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5830 IN PCIPHER_KEY pShard_key);
5832 VOID ConstructEapolKeyData(
5833 IN PRTMP_ADAPTER pAd,
5834 IN UCHAR PeerAuthMode,
5835 IN UCHAR PeerWepStatus,
5836 IN UCHAR GroupKeyWepStatus,
5838 IN UCHAR DefaultKeyIdx,
5839 IN BOOLEAN bWPA2Capable,
5844 OUT PEAPOL_PACKET pMsg);
5847 IN PRTMP_ADAPTER pAd,
5853 // function prototype in ap_wpa.c
5856 BOOLEAN APWpaMsgTypeSubst(
5860 MAC_TABLE_ENTRY *PACInquiry(
5861 IN PRTMP_ADAPTER pAd,
5864 BOOLEAN RTMPCheckMcast(
5865 IN PRTMP_ADAPTER pAd,
5866 IN PEID_STRUCT eid_ptr,
5867 IN MAC_TABLE_ENTRY *pEntry);
5869 BOOLEAN RTMPCheckUcast(
5870 IN PRTMP_ADAPTER pAd,
5871 IN PEID_STRUCT eid_ptr,
5872 IN MAC_TABLE_ENTRY *pEntry);
5874 BOOLEAN RTMPCheckAUTH(
5875 IN PRTMP_ADAPTER pAd,
5876 IN PEID_STRUCT eid_ptr,
5877 IN MAC_TABLE_ENTRY *pEntry);
5879 VOID WPAStart4WayHS(
5880 IN PRTMP_ADAPTER pAd,
5881 IN MAC_TABLE_ENTRY *pEntry,
5882 IN ULONG TimeInterval);
5884 VOID WPAStart2WayGroupHS(
5885 IN PRTMP_ADAPTER pAd,
5886 IN MAC_TABLE_ENTRY *pEntry);
5888 VOID APWpaEAPPacketAction(
5889 IN PRTMP_ADAPTER pAd,
5890 IN MLME_QUEUE_ELEM *Elem);
5892 VOID APWpaEAPOLStartAction(
5893 IN PRTMP_ADAPTER pAd,
5894 IN MLME_QUEUE_ELEM *Elem);
5896 VOID APWpaEAPOLLogoffAction(
5897 IN PRTMP_ADAPTER pAd,
5898 IN MLME_QUEUE_ELEM *Elem);
5900 VOID APWpaEAPOLKeyAction(
5901 IN PRTMP_ADAPTER pAd,
5902 IN MLME_QUEUE_ELEM *Elem);
5904 VOID APWpaEAPOLASFAlertAction(
5905 IN PRTMP_ADAPTER pAd,
5906 IN MLME_QUEUE_ELEM *Elem);
5908 VOID HandleCounterMeasure(
5909 IN PRTMP_ADAPTER pAd,
5910 IN MAC_TABLE_ENTRY *pEntry);
5912 VOID PeerPairMsg2Action(
5913 IN PRTMP_ADAPTER pAd,
5914 IN MAC_TABLE_ENTRY *pEntry,
5915 IN MLME_QUEUE_ELEM *Elem);
5917 VOID PeerPairMsg4Action(
5918 IN PRTMP_ADAPTER pAd,
5919 IN MAC_TABLE_ENTRY *pEntry,
5920 IN MLME_QUEUE_ELEM *Elem);
5923 IN PVOID SystemSpecific1,
5924 IN PVOID FunctionContext,
5925 IN PVOID SystemSpecific2,
5926 IN PVOID SystemSpecific3);
5929 IN PVOID SystemSpecific1,
5930 IN PVOID FunctionContext,
5931 IN PVOID SystemSpecific2,
5932 IN PVOID SystemSpecific3);
5934 VOID EnqueueStartForPSKExec(
5935 IN PVOID SystemSpecific1,
5936 IN PVOID FunctionContext,
5937 IN PVOID SystemSpecific2,
5938 IN PVOID SystemSpecific3);
5940 VOID RTMPHandleSTAKey(
5941 IN PRTMP_ADAPTER pAdapter,
5942 IN MAC_TABLE_ENTRY *pEntry,
5943 IN MLME_QUEUE_ELEM *Elem);
5945 VOID PeerGroupMsg2Action(
5946 IN PRTMP_ADAPTER pAd,
5947 IN PMAC_TABLE_ENTRY pEntry,
5951 VOID PairDisAssocAction(
5952 IN PRTMP_ADAPTER pAd,
5953 IN PMAC_TABLE_ENTRY pEntry,
5956 VOID MlmeDeAuthAction(
5957 IN PRTMP_ADAPTER pAd,
5958 IN PMAC_TABLE_ENTRY pEntry,
5961 VOID GREKEYPeriodicExec(
5962 IN PVOID SystemSpecific1,
5963 IN PVOID FunctionContext,
5964 IN PVOID SystemSpecific2,
5965 IN PVOID SystemSpecific3);
5987 IN PRTMP_ADAPTER pAd,
5990 VOID AES_GTK_KEY_WRAP(
5992 IN UCHAR *plaintext,
5994 OUT UCHAR *ciphertext);
5997 IN PRTMP_ADAPTER pAdapter,
6001 VOID APToWirelessSta(
6002 IN PRTMP_ADAPTER pAd,
6003 IN MAC_TABLE_ENTRY *pEntry,
6004 IN PUCHAR pHeader802_3,
6008 IN BOOLEAN bClearFrame);
6010 VOID RTMPAddPMKIDCache(
6011 IN PRTMP_ADAPTER pAd,
6017 INT RTMPSearchPMKIDCache(
6018 IN PRTMP_ADAPTER pAd,
6022 VOID RTMPDeletePMKIDCache(
6023 IN PRTMP_ADAPTER pAd,
6027 VOID RTMPMaintainPMKIDCache(
6028 IN PRTMP_ADAPTER pAd);
6030 VOID RTMPSendTriggerFrame(
6031 IN PRTMP_ADAPTER pAd,
6035 IN BOOLEAN bQosNull);
6038 VOID RTMPFilterCalibration(
6039 IN PRTMP_ADAPTER pAd);
6043 //typedef void (*TIMER_FUNCTION)(unsigned long);
6047 VOID RTMP_SetPeriodicTimer(
6048 IN NDIS_MINIPORT_TIMER *pTimer,
6049 IN unsigned long timeout);
6051 VOID RTMP_OS_Init_Timer(
6052 IN PRTMP_ADAPTER pAd,
6053 IN NDIS_MINIPORT_TIMER *pTimer,
6054 IN TIMER_FUNCTION function,
6057 VOID RTMP_OS_Add_Timer(
6058 IN NDIS_MINIPORT_TIMER *pTimer,
6059 IN unsigned long timeout);
6061 VOID RTMP_OS_Mod_Timer(
6062 IN NDIS_MINIPORT_TIMER *pTimer,
6063 IN unsigned long timeout);
6066 VOID RTMP_OS_Del_Timer(
6067 IN NDIS_MINIPORT_TIMER *pTimer,
6068 OUT BOOLEAN *pCancelled);
6071 VOID RTMP_OS_Release_Packet(
6072 IN PRTMP_ADAPTER pAd,
6073 IN PQUEUE_ENTRY pEntry);
6078 NDIS_STATUS os_alloc_mem(
6079 IN PRTMP_ADAPTER pAd,
6083 NDIS_STATUS os_free_mem(
6084 IN PRTMP_ADAPTER pAd,
6088 void RTMP_AllocateSharedMemory(
6089 IN PRTMP_ADAPTER pAd,
6092 OUT PVOID *VirtualAddress,
6093 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6095 VOID RTMPFreeTxRxRingMemory(
6096 IN PRTMP_ADAPTER pAd);
6098 NDIS_STATUS AdapterBlockAllocateMemory(
6102 void RTMP_AllocateTxDescMemory(
6103 IN PRTMP_ADAPTER pAd,
6107 OUT PVOID *VirtualAddress,
6108 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6110 void RTMP_AllocateFirstTxBuffer(
6111 IN PRTMP_ADAPTER pAd,
6115 OUT PVOID *VirtualAddress,
6116 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6118 void RTMP_AllocateMgmtDescMemory(
6119 IN PRTMP_ADAPTER pAd,
6122 OUT PVOID *VirtualAddress,
6123 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6125 void RTMP_AllocateRxDescMemory(
6126 IN PRTMP_ADAPTER pAd,
6129 OUT PVOID *VirtualAddress,
6130 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6132 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6133 IN PRTMP_ADAPTER pAd,
6136 OUT PVOID *VirtualAddress,
6137 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6139 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6140 IN PRTMP_ADAPTER pAd,
6143 OUT PVOID *VirtualAddress);
6145 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6146 IN PRTMP_ADAPTER pAd,
6149 void RTMP_QueryPacketInfo(
6150 IN PNDIS_PACKET pPacket,
6151 OUT PACKET_INFO *pPacketInfo,
6152 OUT PUCHAR *pSrcBufVA,
6153 OUT UINT *pSrcBufLen);
6155 void RTMP_QueryNextPacketInfo(
6156 IN PNDIS_PACKET *ppPacket,
6157 OUT PACKET_INFO *pPacketInfo,
6158 OUT PUCHAR *pSrcBufVA,
6159 OUT UINT *pSrcBufLen);
6162 BOOLEAN RTMP_FillTxBlkInfo(
6163 IN RTMP_ADAPTER *pAd,
6167 PRTMP_SCATTER_GATHER_LIST
6168 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6171 void announce_802_3_packet(
6172 IN PRTMP_ADAPTER pAd,
6173 IN PNDIS_PACKET pPacket);
6176 UINT BA_Reorder_AMSDU_Annnounce(
6177 IN PRTMP_ADAPTER pAd,
6178 IN PNDIS_PACKET pPacket);
6181 UINT Handle_AMSDU_Packet(
6182 IN PRTMP_ADAPTER pAd,
6185 IN UCHAR FromWhichBSSID);
6188 void convert_802_11_to_802_3_packet(
6189 IN PRTMP_ADAPTER pAd,
6190 IN PNDIS_PACKET pPacket,
6194 IN UCHAR FromWhichBSSID);
6197 PNET_DEV get_netdev_from_bssid(
6198 IN PRTMP_ADAPTER pAd,
6199 IN UCHAR FromWhichBSSID);
6202 PNDIS_PACKET duplicate_pkt(
6203 IN PRTMP_ADAPTER pAd,
6204 IN PUCHAR pHeader802_3,
6208 IN UCHAR FromWhichBSSID);
6211 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6212 IN PRTMP_ADAPTER pAd,
6213 IN PNDIS_PACKET pOldPkt);
6215 PNDIS_PACKET duplicate_pkt_with_VLAN(
6216 IN PRTMP_ADAPTER pAd,
6217 IN PUCHAR pHeader802_3,
6221 IN UCHAR FromWhichBSSID);
6223 PNDIS_PACKET duplicate_pkt_with_WPI(
6224 IN PRTMP_ADAPTER pAd,
6225 IN PNDIS_PACKET pPacket,
6226 IN UINT32 ext_head_len,
6227 IN UINT32 ext_tail_len);
6229 UCHAR VLAN_8023_Header_Copy(
6230 IN PRTMP_ADAPTER pAd,
6231 IN PUCHAR pHeader802_3,
6234 IN UCHAR FromWhichBSSID);
6236 #ifdef DOT11_N_SUPPORT
6237 void ba_flush_reordering_timeout_mpdus(
6238 IN PRTMP_ADAPTER pAd,
6239 IN PBA_REC_ENTRY pBAEntry,
6243 VOID BAOriSessionSetUp(
6244 IN PRTMP_ADAPTER pAd,
6245 IN MAC_TABLE_ENTRY *pEntry,
6249 IN BOOLEAN isForced);
6251 VOID BASessionTearDownALL(
6252 IN OUT PRTMP_ADAPTER pAd,
6254 #endif // DOT11_N_SUPPORT //
6256 BOOLEAN OS_Need_Clone_Packet(void);
6259 VOID build_tx_packet(
6260 IN PRTMP_ADAPTER pAd,
6261 IN PNDIS_PACKET pPacket,
6266 VOID BAOriSessionTearDown(
6267 IN OUT PRTMP_ADAPTER pAd,
6270 IN BOOLEAN bPassive,
6271 IN BOOLEAN bForceSend);
6273 VOID BARecSessionTearDown(
6274 IN OUT PRTMP_ADAPTER pAd,
6277 IN BOOLEAN bPassive);
6279 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6280 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6282 ULONG AutoChBssInsertEntry(
6283 IN PRTMP_ADAPTER pAd,
6290 void AutoChBssTableInit(
6291 IN PRTMP_ADAPTER pAd);
6293 void ChannelInfoInit(
6294 IN PRTMP_ADAPTER pAd);
6296 void AutoChBssTableDestroy(
6297 IN PRTMP_ADAPTER pAd);
6299 void ChannelInfoDestroy(
6300 IN PRTMP_ADAPTER pAd);
6302 UCHAR New_ApAutoSelectChannel(
6303 IN PRTMP_ADAPTER pAd);
6305 BOOLEAN rtstrmactohex(
6309 BOOLEAN rtstrcasecmp(
6313 char *rtstrstruncasecmp(
6319 IN const char * s2);
6323 IN const char * ct);
6327 unsigned int *addr);
6329 ////////// common ioctl functions //////////
6330 INT Set_DriverVersion_Proc(
6331 IN PRTMP_ADAPTER pAd,
6334 INT Set_CountryRegion_Proc(
6335 IN PRTMP_ADAPTER pAd,
6338 INT Set_CountryRegionABand_Proc(
6339 IN PRTMP_ADAPTER pAd,
6342 INT Set_WirelessMode_Proc(
6343 IN PRTMP_ADAPTER pAd,
6346 INT Set_Channel_Proc(
6347 IN PRTMP_ADAPTER pAd,
6350 INT Set_ShortSlot_Proc(
6351 IN PRTMP_ADAPTER pAd,
6354 INT Set_TxPower_Proc(
6355 IN PRTMP_ADAPTER pAd,
6358 INT Set_BGProtection_Proc(
6359 IN PRTMP_ADAPTER pAd,
6362 INT Set_TxPreamble_Proc(
6363 IN PRTMP_ADAPTER pAd,
6366 INT Set_RTSThreshold_Proc(
6367 IN PRTMP_ADAPTER pAd,
6370 INT Set_FragThreshold_Proc(
6371 IN PRTMP_ADAPTER pAd,
6374 INT Set_TxBurst_Proc(
6375 IN PRTMP_ADAPTER pAd,
6378 #ifdef AGGREGATION_SUPPORT
6379 INT Set_PktAggregate_Proc(
6380 IN PRTMP_ADAPTER pAd,
6384 INT Set_IEEE80211H_Proc(
6385 IN PRTMP_ADAPTER pAd,
6390 IN PRTMP_ADAPTER pAd,
6394 INT Show_DescInfo_Proc(
6395 IN PRTMP_ADAPTER pAd,
6398 INT Set_ResetStatCounter_Proc(
6399 IN PRTMP_ADAPTER pAd,
6402 #ifdef DOT11_N_SUPPORT
6403 INT Set_BASetup_Proc(
6404 IN PRTMP_ADAPTER pAd,
6407 INT Set_BADecline_Proc(
6408 IN PRTMP_ADAPTER pAd,
6411 INT Set_BAOriTearDown_Proc(
6412 IN PRTMP_ADAPTER pAd,
6415 INT Set_BARecTearDown_Proc(
6416 IN PRTMP_ADAPTER pAd,
6420 IN PRTMP_ADAPTER pAd,
6424 IN PRTMP_ADAPTER pAd,
6428 IN PRTMP_ADAPTER pAd,
6431 INT Set_HtOpMode_Proc(
6432 IN PRTMP_ADAPTER pAd,
6435 INT Set_HtStbc_Proc(
6436 IN PRTMP_ADAPTER pAd,
6440 IN PRTMP_ADAPTER pAd,
6443 INT Set_HtExtcha_Proc(
6444 IN PRTMP_ADAPTER pAd,
6447 INT Set_HtMpduDensity_Proc(
6448 IN PRTMP_ADAPTER pAd,
6451 INT Set_HtBaWinSize_Proc(
6452 IN PRTMP_ADAPTER pAd,
6456 IN PRTMP_ADAPTER pAd,
6459 INT Set_HtLinkAdapt_Proc(
6460 IN PRTMP_ADAPTER pAd,
6463 INT Set_HtAmsdu_Proc(
6464 IN PRTMP_ADAPTER pAd,
6467 INT Set_HtAutoBa_Proc(
6468 IN PRTMP_ADAPTER pAd,
6471 INT Set_HtProtect_Proc(
6472 IN PRTMP_ADAPTER pAd,
6475 INT Set_HtMimoPs_Proc(
6476 IN PRTMP_ADAPTER pAd,
6480 INT Set_ForceShortGI_Proc(
6481 IN PRTMP_ADAPTER pAd,
6484 INT Set_ForceGF_Proc(
6485 IN PRTMP_ADAPTER pAd,
6489 IN PRTMP_ADAPTER pAd);
6491 INT Set_SendPSMPAction_Proc(
6492 IN PRTMP_ADAPTER pAd,
6495 INT Set_HtMIMOPSmode_Proc(
6496 IN PRTMP_ADAPTER pAd,
6500 INT Set_HtTxBASize_Proc(
6501 IN PRTMP_ADAPTER pAd,
6503 #endif // DOT11_N_SUPPORT //
6507 #ifdef CONFIG_STA_SUPPORT
6509 VOID RTMPSendDLSTearDownFrame(
6510 IN PRTMP_ADAPTER pAd,
6513 #ifdef DOT11_N_SUPPORT
6516 IN PRTMP_ADAPTER pAd,
6517 OUT PQUERYBA_TABLE pBAT);
6518 #endif // DOT11_N_SUPPORT //
6520 #ifdef WPA_SUPPLICANT_SUPPORT
6521 INT WpaCheckEapCode(
6522 IN PRTMP_ADAPTER pAd,
6527 VOID WpaSendMicFailureToWpaSupplicant(
6528 IN PRTMP_ADAPTER pAd,
6529 IN BOOLEAN bUnicast);
6531 VOID SendAssocIEsToWpaSupplicant(
6532 IN PRTMP_ADAPTER pAd);
6533 #endif // WPA_SUPPLICANT_SUPPORT //
6535 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6536 int wext_notify_event_assoc(
6537 IN RTMP_ADAPTER *pAd);
6538 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6540 #endif // CONFIG_STA_SUPPORT //
6544 #ifdef DOT11_N_SUPPORT
6545 VOID Handle_BSS_Width_Trigger_Events(
6546 IN PRTMP_ADAPTER pAd);
6548 void build_ext_channel_switch_ie(
6549 IN PRTMP_ADAPTER pAd,
6550 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6551 #endif // DOT11_N_SUPPORT //
6554 BOOLEAN APRxDoneInterruptHandle(
6555 IN PRTMP_ADAPTER pAd);
6557 BOOLEAN STARxDoneInterruptHandle(
6558 IN PRTMP_ADAPTER pAd,
6561 #ifdef DOT11_N_SUPPORT
6562 // AMPDU packet indication
6563 VOID Indicate_AMPDU_Packet(
6564 IN PRTMP_ADAPTER pAd,
6566 IN UCHAR FromWhichBSSID);
6568 // AMSDU packet indication
6569 VOID Indicate_AMSDU_Packet(
6570 IN PRTMP_ADAPTER pAd,
6572 IN UCHAR FromWhichBSSID);
6573 #endif // DOT11_N_SUPPORT //
6575 // Normal legacy Rx packet indication
6576 VOID Indicate_Legacy_Packet(
6577 IN PRTMP_ADAPTER pAd,
6579 IN UCHAR FromWhichBSSID);
6581 VOID Indicate_EAPOL_Packet(
6582 IN PRTMP_ADAPTER pAd,
6584 IN UCHAR FromWhichBSSID);
6586 void update_os_packet_info(
6587 IN PRTMP_ADAPTER pAd,
6589 IN UCHAR FromWhichBSSID);
6591 void wlan_802_11_to_802_3_packet(
6592 IN PRTMP_ADAPTER pAd,
6594 IN PUCHAR pHeader802_3,
6595 IN UCHAR FromWhichBSSID);
6597 UINT deaggregate_AMSDU_announce(
6598 IN PRTMP_ADAPTER pAd,
6599 PNDIS_PACKET pPacket,
6604 #ifdef CONFIG_STA_SUPPORT
6605 // remove LLC and get 802_3 Header
6606 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6608 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6610 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6612 _pDA = _pRxBlk->pHeader->Addr3; \
6613 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6617 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6619 _pDA = _pRxBlk->pHeader->Addr1; \
6620 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6621 _pSA = _pRxBlk->pHeader->Addr2; \
6623 _pSA = _pRxBlk->pHeader->Addr3; \
6627 _pDA = _pRxBlk->pHeader->Addr1; \
6628 _pSA = _pRxBlk->pHeader->Addr2; \
6632 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6633 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6635 #endif // CONFIG_STA_SUPPORT //
6638 BOOLEAN APFowardWirelessStaToWirelessSta(
6639 IN PRTMP_ADAPTER pAd,
6640 IN PNDIS_PACKET pPacket,
6641 IN ULONG FromWhichBSSID);
6643 VOID Announce_or_Forward_802_3_Packet(
6644 IN PRTMP_ADAPTER pAd,
6645 IN PNDIS_PACKET pPacket,
6646 IN UCHAR FromWhichBSSID);
6648 VOID Sta_Announce_or_Forward_802_3_Packet(
6649 IN PRTMP_ADAPTER pAd,
6650 IN PNDIS_PACKET pPacket,
6651 IN UCHAR FromWhichBSSID);
6654 #ifdef CONFIG_STA_SUPPORT
6655 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6656 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6657 //announce_802_3_packet(_pAd, _pPacket);
6658 #endif // CONFIG_STA_SUPPORT //
6661 PNDIS_PACKET DuplicatePacket(
6662 IN PRTMP_ADAPTER pAd,
6663 IN PNDIS_PACKET pPacket,
6664 IN UCHAR FromWhichBSSID);
6667 PNDIS_PACKET ClonePacket(
6668 IN PRTMP_ADAPTER pAd,
6669 IN PNDIS_PACKET pPacket,
6674 // Normal, AMPDU or AMSDU
6675 VOID CmmRxnonRalinkFrameIndicate(
6676 IN PRTMP_ADAPTER pAd,
6678 IN UCHAR FromWhichBSSID);
6680 VOID CmmRxRalinkFrameIndicate(
6681 IN PRTMP_ADAPTER pAd,
6682 IN MAC_TABLE_ENTRY *pEntry,
6684 IN UCHAR FromWhichBSSID);
6686 VOID Update_Rssi_Sample(
6687 IN PRTMP_ADAPTER pAd,
6688 IN RSSI_SAMPLE *pRssi,
6689 IN PRXWI_STRUC pRxWI);
6691 PNDIS_PACKET GetPacketFromRxRing(
6692 IN PRTMP_ADAPTER pAd,
6693 OUT PRT28XX_RXD_STRUC pSaveRxD,
6694 OUT BOOLEAN *pbReschedule,
6695 IN OUT UINT32 *pRxPending);
6697 PNDIS_PACKET RTMPDeFragmentDataFrame(
6698 IN PRTMP_ADAPTER pAd,
6701 ////////////////////////////////////////
6709 typedef struct _DefaultKeyIdxValue
6713 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6717 #ifdef CONFIG_STA_SUPPORT
6719 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6720 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6721 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6722 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6723 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6724 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6725 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6726 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6727 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6728 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6729 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6732 P80211ENUM_msgitem_status_no_value = 0x00
6735 P80211ENUM_truth_false = 0x00,
6736 P80211ENUM_truth_true = 0x01
6739 /* Definition from madwifi */
6745 } p80211item_uint32_t;
6750 #define WLAN_DEVNAMELEN_MAX 16
6751 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6752 p80211item_uint32_t hosttime;
6753 p80211item_uint32_t mactime;
6754 p80211item_uint32_t channel;
6755 p80211item_uint32_t rssi;
6756 p80211item_uint32_t sq;
6757 p80211item_uint32_t signal;
6758 p80211item_uint32_t noise;
6759 p80211item_uint32_t rate;
6760 p80211item_uint32_t istx;
6761 p80211item_uint32_t frmlen;
6762 } wlan_ng_prism2_header;
6764 /* The radio capture header precedes the 802.11 header. */
6765 typedef struct PACKED _ieee80211_radiotap_header {
6766 UINT8 it_version; /* Version 0. Only increases
6767 * for drastic changes,
6768 * introduction of compatible
6769 * new fields does not count.
6772 UINT16 it_len; /* length of the whole
6773 * header in bytes, including
6774 * it_version, it_pad,
6775 * it_len, and data fields.
6777 UINT32 it_present; /* A bitmap telling which
6778 * fields are present. Set bit 31
6779 * (0x80000000) to extend the
6780 * bitmap by another 32 bits.
6781 * Additional extensions are made
6782 * by setting bit 31.
6784 }ieee80211_radiotap_header ;
6786 enum ieee80211_radiotap_type {
6787 IEEE80211_RADIOTAP_TSFT = 0,
6788 IEEE80211_RADIOTAP_FLAGS = 1,
6789 IEEE80211_RADIOTAP_RATE = 2,
6790 IEEE80211_RADIOTAP_CHANNEL = 3,
6791 IEEE80211_RADIOTAP_FHSS = 4,
6792 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6793 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6794 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6795 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6796 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6797 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6798 IEEE80211_RADIOTAP_ANTENNA = 11,
6799 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6800 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6803 #define WLAN_RADIOTAP_PRESENT ( \
6804 (1 << IEEE80211_RADIOTAP_TSFT) | \
6805 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6806 (1 << IEEE80211_RADIOTAP_RATE) | \
6809 typedef struct _wlan_radiotap_header {
6810 ieee80211_radiotap_header wt_ihdr;
6814 } wlan_radiotap_header;
6815 /* Definition from madwifi */
6817 void send_monitor_packets(
6818 IN PRTMP_ADAPTER pAd,
6821 #if WIRELESS_EXT >= 12
6822 // This function will be called when query /proc
6823 struct iw_statistics *rt28xx_get_wireless_stats(
6824 IN struct net_device *net_dev);
6827 VOID RTMPSetDesiredRates(
6828 IN PRTMP_ADAPTER pAdapter,
6830 #endif // CONFIG_STA_SUPPORT //
6832 INT Set_FixedTxMode_Proc(
6833 IN PRTMP_ADAPTER pAd,
6836 static inline char* GetPhyMode(
6846 #ifdef DOT11_N_SUPPORT
6850 case MODE_HTGREENFIELD:
6852 #endif // DOT11_N_SUPPORT //
6859 static inline char* GetBW(
6869 #ifdef DOT11_N_SUPPORT
6872 #endif // DOT11_N_SUPPORT //
6879 VOID RT28xxThreadTerminate(
6880 IN RTMP_ADAPTER *pAd);
6882 BOOLEAN RT28XXChipsetCheck(
6885 BOOLEAN RT28XXNetDevInit(
6887 IN struct net_device *net_dev,
6888 IN RTMP_ADAPTER *pAd);
6890 BOOLEAN RT28XXProbePostConfig(
6892 IN RTMP_ADAPTER *pAd,
6895 VOID RT28XXDMADisable(
6896 IN RTMP_ADAPTER *pAd);
6898 VOID RT28XXDMAEnable(
6899 IN RTMP_ADAPTER *pAd);
6901 VOID RT28xx_UpdateBeaconToAsic(
6902 IN RTMP_ADAPTER * pAd,
6905 IN ULONG UpdatePos);
6908 IN struct net_device *net_dev,
6909 IN OUT struct ifreq *rq,
6913 #ifdef CONFIG_STA_SUPPORT
6914 INT rt28xx_sta_ioctl(
6915 IN struct net_device *net_dev,
6916 IN OUT struct ifreq *rq,
6918 #endif // CONFIG_STA_SUPPORT //
6920 BOOLEAN RT28XXSecurityKeyAdd(
6921 IN PRTMP_ADAPTER pAd,
6924 IN MAC_TABLE_ENTRY *pEntry);
6926 ////////////////////////////////////////
6927 PNDIS_PACKET GetPacketFromRxRing(
6928 IN PRTMP_ADAPTER pAd,
6929 OUT PRT28XX_RXD_STRUC pSaveRxD,
6930 OUT BOOLEAN *pbReschedule,
6931 IN OUT UINT32 *pRxPending);
6934 void kill_thread_task(PRTMP_ADAPTER pAd);
6936 void tbtt_tasklet(unsigned long data);
6939 VOID AsicTurnOffRFClk(
6940 IN PRTMP_ADAPTER pAd,
6943 VOID AsicTurnOnRFClk(
6944 IN PRTMP_ADAPTER pAd,
6948 NTSTATUS RT30xxWriteRFRegister(
6949 IN PRTMP_ADAPTER pAd,
6953 NTSTATUS RT30xxReadRFRegister(
6954 IN PRTMP_ADAPTER pAd,
6958 //2008/09/11:KH add to support efuse<--
6959 UCHAR eFuseReadRegisters(
6960 IN PRTMP_ADAPTER pAd,
6965 VOID eFuseReadPhysical(
6966 IN PRTMP_ADAPTER pAd,
6967 IN PUSHORT lpInBuffer,
6968 IN ULONG nInBufferSize,
6969 OUT PUSHORT lpOutBuffer,
6970 IN ULONG nOutBufferSize
6974 IN PRTMP_ADAPTER pAd,
6979 VOID eFusePhysicalWriteRegisters(
6980 IN PRTMP_ADAPTER pAd,
6985 NTSTATUS eFuseWriteRegisters(
6986 IN PRTMP_ADAPTER pAd,
6991 VOID eFuseWritePhysical(
6992 IN PRTMP_ADAPTER pAd,
6994 ULONG nInBufferSize,
6996 ULONG nOutBufferSize
6999 NTSTATUS eFuseWrite(
7000 IN PRTMP_ADAPTER pAd,
7005 INT set_eFuseGetFreeBlockCount_Proc(
7006 IN PRTMP_ADAPTER pAd,
7009 INT set_eFusedump_Proc(
7010 IN PRTMP_ADAPTER pAd,
7013 INT set_eFuseLoadFromBin_Proc(
7014 IN PRTMP_ADAPTER pAd,
7017 NTSTATUS eFuseWriteRegistersFromBin(
7018 IN PRTMP_ADAPTER pAd,
7023 VOID eFusePhysicalReadRegisters(
7024 IN PRTMP_ADAPTER pAd,
7029 NDIS_STATUS NICLoadEEPROM(
7030 IN PRTMP_ADAPTER pAd);
7032 BOOLEAN bNeedLoadEEPROM(
7033 IN PRTMP_ADAPTER pAd);
7034 //2008/09/11:KH add to support efuse-->
7038 // add by johnli, RF power sequence setup
7039 VOID RT30xxLoadRFNormalModeSetup(
7040 IN PRTMP_ADAPTER pAd);
7042 VOID RT30xxLoadRFSleepModeSetup(
7043 IN PRTMP_ADAPTER pAd);
7045 VOID RT30xxReverseRFSleepModeSetup(
7046 IN PRTMP_ADAPTER pAd);
7052 // Function Prototype in rtusb_bulk.c
7054 VOID RTUSBInitTxDesc(
7055 IN PRTMP_ADAPTER pAd,
7056 IN PTX_CONTEXT pTxContext,
7057 IN UCHAR BulkOutPipeId,
7058 IN usb_complete_t Func);
7060 VOID RTUSBInitHTTxDesc(
7061 IN PRTMP_ADAPTER pAd,
7062 IN PHT_TX_CONTEXT pTxContext,
7063 IN UCHAR BulkOutPipeId,
7064 IN ULONG BulkOutSize,
7065 IN usb_complete_t Func);
7067 VOID RTUSBInitRxDesc(
7068 IN PRTMP_ADAPTER pAd,
7069 IN PRX_CONTEXT pRxContext);
7071 VOID RTUSBCleanUpDataBulkOutQueue(
7072 IN PRTMP_ADAPTER pAd);
7074 VOID RTUSBCancelPendingBulkOutIRP(
7075 IN PRTMP_ADAPTER pAd);
7077 VOID RTUSBBulkOutDataPacket(
7078 IN PRTMP_ADAPTER pAd,
7079 IN UCHAR BulkOutPipeId,
7082 VOID RTUSBBulkOutNullFrame(
7083 IN PRTMP_ADAPTER pAd);
7085 VOID RTUSBBulkOutRTSFrame(
7086 IN PRTMP_ADAPTER pAd);
7088 VOID RTUSBCancelPendingBulkInIRP(
7089 IN PRTMP_ADAPTER pAd);
7091 VOID RTUSBCancelPendingIRPs(
7092 IN PRTMP_ADAPTER pAd);
7094 VOID RTUSBBulkOutMLMEPacket(
7095 IN PRTMP_ADAPTER pAd,
7098 VOID RTUSBBulkOutPsPoll(
7099 IN PRTMP_ADAPTER pAd);
7101 VOID RTUSBCleanUpMLMEBulkOutQueue(
7102 IN PRTMP_ADAPTER pAd);
7104 VOID RTUSBKickBulkOut(
7105 IN PRTMP_ADAPTER pAd);
7107 VOID RTUSBBulkReceive(
7108 IN PRTMP_ADAPTER pAd);
7111 IN RTMP_ADAPTER *pAd);
7113 VOID RTUSBInitRxDesc(
7114 IN PRTMP_ADAPTER pAd,
7115 IN PRX_CONTEXT pRxContext);
7117 VOID RTUSBBulkRxHandle(
7118 IN unsigned long data);
7121 // Function Prototype in rtusb_io.c
7123 NTSTATUS RTUSBMultiRead(
7124 IN PRTMP_ADAPTER pAd,
7129 NTSTATUS RTUSBMultiWrite(
7130 IN PRTMP_ADAPTER pAd,
7135 NTSTATUS RTUSBMultiWrite_OneByte(
7136 IN PRTMP_ADAPTER pAd,
7140 NTSTATUS RTUSBReadBBPRegister(
7141 IN PRTMP_ADAPTER pAd,
7145 NTSTATUS RTUSBWriteBBPRegister(
7146 IN PRTMP_ADAPTER pAd,
7150 NTSTATUS RTUSBWriteRFRegister(
7151 IN PRTMP_ADAPTER pAd,
7154 NTSTATUS RTUSB_VendorRequest(
7155 IN PRTMP_ADAPTER pAd,
7156 IN UINT32 TransferFlags,
7157 IN UCHAR ReservedBits,
7161 IN PVOID TransferBuffer,
7162 IN UINT32 TransferBufferLength);
7164 NTSTATUS RTUSBReadEEPROM(
7165 IN PRTMP_ADAPTER pAd,
7170 NTSTATUS RTUSBWriteEEPROM(
7171 IN PRTMP_ADAPTER pAd,
7176 VOID RTUSBPutToSleep(
7177 IN PRTMP_ADAPTER pAd);
7179 NTSTATUS RTUSBWakeUp(
7180 IN PRTMP_ADAPTER pAd);
7182 VOID RTUSBInitializeCmdQ(
7185 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7186 IN PRTMP_ADAPTER pAd,
7188 IN BOOLEAN SetInformation,
7189 IN PVOID pInformationBuffer,
7190 IN UINT32 InformationBufferLength);
7192 NDIS_STATUS RTUSBEnqueueInternalCmd(
7193 IN PRTMP_ADAPTER pAd,
7195 IN PVOID pInformationBuffer,
7196 IN UINT32 InformationBufferLength);
7198 VOID RTUSBDequeueCmd(
7200 OUT PCmdQElmt *pcmdqelmt);
7203 IN OUT PVOID Context);
7206 IN OUT PVOID Context);
7208 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7209 IN RTMP_ADAPTER *pAd,
7210 IN RALINK_TIMER_STRUCT *pTimer);
7212 BOOLEAN RT2870_TimerQ_Remove(
7213 IN RTMP_ADAPTER *pAd,
7214 IN RALINK_TIMER_STRUCT *pTimer);
7216 void RT2870_TimerQ_Exit(
7217 IN RTMP_ADAPTER *pAd);
7219 void RT2870_TimerQ_Init(
7220 IN RTMP_ADAPTER *pAd);
7222 VOID RT2870_BssBeaconExit(
7223 IN RTMP_ADAPTER *pAd);
7225 VOID RT2870_BssBeaconStop(
7226 IN RTMP_ADAPTER *pAd);
7228 VOID RT2870_BssBeaconStart(
7229 IN RTMP_ADAPTER * pAd);
7231 VOID RT2870_BssBeaconInit(
7232 IN RTMP_ADAPTER *pAd);
7234 VOID RT2870_WatchDog(
7235 IN RTMP_ADAPTER *pAd);
7237 NTSTATUS RTUSBWriteMACRegister(
7238 IN PRTMP_ADAPTER pAd,
7242 NTSTATUS RTUSBReadMACRegister(
7243 IN PRTMP_ADAPTER pAd,
7245 OUT PUINT32 pValue);
7247 NTSTATUS RTUSBSingleWrite(
7248 IN RTMP_ADAPTER *pAd,
7252 NTSTATUS RTUSBFirmwareRun(
7253 IN PRTMP_ADAPTER pAd);
7255 NTSTATUS RTUSBFirmwareWrite(
7256 IN PRTMP_ADAPTER pAd,
7260 NTSTATUS RTUSBFirmwareOpmode(
7261 IN PRTMP_ADAPTER pAd,
7262 OUT PUINT32 pValue);
7264 NTSTATUS RTUSBVenderReset(
7265 IN PRTMP_ADAPTER pAd);
7267 NDIS_STATUS RTUSBSetHardWareRegister(
7268 IN PRTMP_ADAPTER pAdapter,
7271 NDIS_STATUS RTUSBQueryHardWareRegister(
7272 IN PRTMP_ADAPTER pAdapter,
7276 IN PRTMP_ADAPTER pAd);
7279 NDIS_STATUS CreateThreads(
7280 IN struct net_device *net_dev );
7283 VOID MacTableInitialize(
7284 IN PRTMP_ADAPTER pAd);
7287 IN PRTMP_ADAPTER pAd,
7290 NDIS_STATUS RTMPWPAAddKeyProc(
7291 IN PRTMP_ADAPTER pAd,
7294 VOID AsicRxAntEvalAction(
7295 IN PRTMP_ADAPTER pAd);
7298 IN PRTMP_ADAPTER pAd,
7299 IN PUCHAR pHeader802_3,
7303 OUT PNDIS_PACKET *ppPacket);
7305 UINT deaggregate_AMSDU_announce(
7306 IN PRTMP_ADAPTER pAd,
7307 PNDIS_PACKET pPacket,
7311 NDIS_STATUS RTMPCheckRxError(
7312 IN PRTMP_ADAPTER pAd,
7313 IN PHEADER_802_11 pHeader,
7314 IN PRXWI_STRUC pRxWI,
7315 IN PRT28XX_RXD_STRUC pRxINFO);
7318 VOID RTUSBMlmeHardTransmit(
7319 IN PRTMP_ADAPTER pAd,
7320 IN PMGMT_STRUC pMgmt);
7326 // Function Prototype in rtusb_data.c
7328 NDIS_STATUS RTUSBFreeDescriptorRequest(
7329 IN PRTMP_ADAPTER pAd,
7330 IN UCHAR BulkOutPipeId,
7331 IN UINT32 NumberRequired);
7334 BOOLEAN RTUSBNeedQueueBackForAgg(
7335 IN RTMP_ADAPTER *pAd,
7336 IN UCHAR BulkOutPipeId);
7339 VOID RTMPWriteTxInfo(
7340 IN PRTMP_ADAPTER pAd,
7341 IN PTXINFO_STRUC pTxInfo,
7342 IN USHORT USBDMApktLen,
7349 // Function Prototype in cmm_data_2870.c
7351 USHORT RtmpUSB_WriteSubTxResource(
7352 IN PRTMP_ADAPTER pAd,
7355 OUT USHORT *FreeNumber);
7357 USHORT RtmpUSB_WriteSingleTxResource(
7358 IN PRTMP_ADAPTER pAd,
7361 OUT USHORT *FreeNumber);
7363 USHORT RtmpUSB_WriteFragTxResource(
7364 IN PRTMP_ADAPTER pAd,
7367 OUT USHORT *FreeNumber);
7369 USHORT RtmpUSB_WriteMultiTxResource(
7370 IN PRTMP_ADAPTER pAd,
7373 OUT USHORT *FreeNumber);
7375 VOID RtmpUSB_FinalWriteTxResource(
7376 IN PRTMP_ADAPTER pAd,
7378 IN USHORT totalMPDUSize,
7381 VOID RtmpUSBDataLastTxIdx(
7382 IN PRTMP_ADAPTER pAd,
7386 VOID RtmpUSBDataKickOut(
7387 IN PRTMP_ADAPTER pAd,
7392 int RtmpUSBMgmtKickOut(
7393 IN RTMP_ADAPTER *pAd,
7395 IN PNDIS_PACKET pPacket,
7396 IN PUCHAR pSrcBufVA,
7399 VOID RtmpUSBNullFrameKickOut(
7400 IN RTMP_ADAPTER *pAd,
7402 IN UCHAR *pNullFrame,
7403 IN UINT32 frameLen);
7405 VOID RT28xxUsbStaAsicForceWakeup(
7406 IN PRTMP_ADAPTER pAd,
7407 IN BOOLEAN bFromTx);
7409 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7410 IN PRTMP_ADAPTER pAd,
7411 IN USHORT TbttNumToNextWakeUp);
7413 VOID RT28xxUsbMlmeRadioOn(
7414 IN PRTMP_ADAPTER pAd);
7416 VOID RT28xxUsbMlmeRadioOFF(
7417 IN PRTMP_ADAPTER pAd);
7420 ////////////////////////////////////////
7423 IN RTMP_ADAPTER *pAd);
7425 UINT32 QBSS_LoadElementAppend(
7426 IN RTMP_ADAPTER *pAd,
7429 VOID QBSS_LoadUpdate(
7430 IN RTMP_ADAPTER *pAd);
7432 ///////////////////////////////////////
7433 INT RTMPShowCfgValue(
7434 IN PRTMP_ADAPTER pAd,
7438 PCHAR RTMPGetRalinkAuthModeStr(
7439 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7441 PCHAR RTMPGetRalinkEncryModeStr(
7442 IN USHORT encryMode);
7443 //////////////////////////////////////
7445 #ifdef CONFIG_STA_SUPPORT
7446 VOID AsicStaBbpTuning(
7447 IN PRTMP_ADAPTER pAd);
7449 BOOLEAN StaAddMacTableEntry(
7450 IN PRTMP_ADAPTER pAd,
7451 IN PMAC_TABLE_ENTRY pEntry,
7452 IN UCHAR MaxSupportedRateIn500Kbps,
7453 IN HT_CAPABILITY_IE *pHtCapability,
7454 IN UCHAR HtCapabilityLen,
7455 IN USHORT CapabilityInfo);
7456 #endif // CONFIG_STA_SUPPORT //
7458 void RTMP_IndicateMediaState(
7459 IN PRTMP_ADAPTER pAd);
7461 VOID ReSyncBeaconTime(
7462 IN PRTMP_ADAPTER pAd);
7464 VOID RTMPSetAGCInitValue(
7465 IN PRTMP_ADAPTER pAd,
7466 IN UCHAR BandWidth);
7468 int rt28xx_close(IN PNET_DEV dev);
7469 int rt28xx_open(IN PNET_DEV dev);
7471 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7473 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7474 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7476 if (VIRTUAL_IF_NUM(pAd) == 0)
7478 if (rt28xx_open(pAd->net_dev) != 0)
7484 VIRTUAL_IF_INC(pAd);
7488 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7490 VIRTUAL_IF_DEC(pAd);
7491 if (VIRTUAL_IF_NUM(pAd) == 0)
7492 rt28xx_close(pAd->net_dev);
7497 #endif // __RTMP_H__