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 #ifdef CARRIER_DETECTION_SUPPORT
1387 typedef enum CD_STATE_n
1394 typedef struct CARRIER_DETECTION_s
1397 UINT8 CDSessionTime;
1400 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1401 #endif // CARRIER_DETECTION_SUPPORT //
1403 typedef enum _REC_BLOCKACK_STATUS
1407 Recipient_HandleRes,
1409 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1411 typedef enum _ORI_BLOCKACK_STATUS
1417 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1419 #ifdef DOT11_N_SUPPORT
1420 typedef struct _BA_ORI_ENTRY{
1425 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1427 USHORT TimeOutValue;
1428 ORI_BLOCKACK_STATUS ORI_BA_Status;
1429 RALINK_TIMER_STRUCT ORIBATimer;
1431 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1433 typedef struct _BA_REC_ENTRY {
1436 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1438 //UCHAR Curindidx; // the head in the RX reordering buffer
1440 // USHORT LastIndSeqAtTimer;
1441 USHORT TimeOutValue;
1442 RALINK_TIMER_STRUCT RECBATimer;
1443 ULONG LastIndSeqAtTimer;
1446 REC_BLOCKACK_STATUS REC_BA_Status;
1447 // UCHAR RxBufIdxUsed;
1448 // corresponding virtual address for RX reordering packet storage.
1449 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1450 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1451 // struct _BA_REC_ENTRY *pNext;
1453 struct reordering_list list;
1454 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1458 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1459 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1460 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1461 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1462 } BA_TABLE, *PBA_TABLE;
1464 //For QureyBATableOID use;
1465 typedef struct PACKED _OID_BA_REC_ENTRY{
1466 UCHAR MACAddr[MAC_ADDR_LEN];
1467 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1470 REC_BLOCKACK_STATUS REC_BA_Status[8];
1471 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1473 //For QureyBATableOID use;
1474 typedef struct PACKED _OID_BA_ORI_ENTRY{
1475 UCHAR MACAddr[MAC_ADDR_LEN];
1476 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
1479 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1480 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1482 typedef struct _QUERYBA_TABLE{
1483 OID_BA_ORI_ENTRY BAOriEntry[32];
1484 OID_BA_REC_ENTRY BARecEntry[32];
1485 UCHAR OriNum;// Number of below BAOriEntry
1486 UCHAR RecNum;// Number of below BARecEntry
1487 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1489 typedef union _BACAP_STRUC {
1490 #ifdef RT_BIG_ENDIAN
1493 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.
1494 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1495 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1496 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1497 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1498 UINT32 MpduDensity:3;
1499 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1500 UINT32 AutoBA:1; // automatically BA
1501 UINT32 TxBAWinLimit:8;
1502 UINT32 RxBAWinLimit:8;
1506 UINT32 RxBAWinLimit:8;
1507 UINT32 TxBAWinLimit:8;
1508 UINT32 AutoBA:1; // automatically BA
1509 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1510 UINT32 MpduDensity:3;
1511 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1512 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1513 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1514 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1515 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.
1520 } BACAP_STRUC, *PBACAP_STRUC;
1521 #endif // DOT11_N_SUPPORT //
1523 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1524 typedef struct _IOT_STRUC {
1526 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1527 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1528 ULONG OneSecInWindowCount;
1529 ULONG OneSecFrameDuplicateCount;
1530 ULONG OneSecOutWindowCount;
1535 BOOLEAN bRTSLongProtOn;
1536 #ifdef CONFIG_STA_SUPPORT
1537 BOOLEAN bLastAtheros;
1538 BOOLEAN bCurrentAtheros;
1539 BOOLEAN bNowAtherosBurstOn;
1540 BOOLEAN bNextDisableRxBA;
1542 #endif // CONFIG_STA_SUPPORT //
1543 } IOT_STRUC, *PIOT_STRUC;
1545 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1546 typedef union _REG_TRANSMIT_SETTING {
1547 #ifdef RT_BIG_ENDIAN
1553 UINT32 STBC:1; //SPACE
1555 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1556 UINT32 TxBF:1; // 3*3
1558 //UINT32 MCS:7; // MCS
1564 //UINT32 MCS:7; // MCS
1567 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1569 UINT32 STBC:1; //SPACE
1577 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1579 typedef union _DESIRED_TRANSMIT_SETTING {
1580 #ifdef RT_BIG_ENDIAN
1583 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1585 USHORT MCS:7; // MCS
1589 USHORT MCS:7; // MCS
1591 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1596 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1599 BOOLEAN IsRecipient;
1600 UCHAR MACAddr[MAC_ADDR_LEN];
1604 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1605 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1608 // Multiple SSID structure
1610 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1611 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1613 /* clear bcmc TIM bit */
1614 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1615 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1617 /* set bcmc TIM bit */
1618 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1619 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1621 /* clear a station PS TIM bit */
1622 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1623 { UCHAR tim_offset = wcid >> 3; \
1624 UCHAR bit_offset = wcid & 0x7; \
1625 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1627 /* set a station PS TIM bit */
1628 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1629 { UCHAR tim_offset = wcid >> 3; \
1630 UCHAR bit_offset = wcid & 0x7; \
1631 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1634 #define BEACON_BITMAP_MASK 0xff
1635 typedef struct _BEACON_SYNC_STRUCT_
1637 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1638 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1639 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1640 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1641 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1642 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1643 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1644 }BEACON_SYNC_STRUCT;
1647 typedef struct _MULTISSID_STRUCT {
1648 UCHAR Bssid[MAC_ADDR_LEN];
1650 CHAR Ssid[MAX_LEN_OF_SSID];
1651 USHORT CapabilityInfo;
1655 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1656 NDIS_802_11_WEP_STATUS WepStatus;
1657 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1658 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1662 ULONG ReceivedByteCount;
1663 ULONG TransmittedByteCount;
1667 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1668 RT_HT_PHY_INFO DesiredHtPhyInfo;
1669 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1670 BOOLEAN bAutoTxRateSwitch;
1672 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1675 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1676 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1677 UCHAR DesiredRatesIndex;
1678 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1680 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1681 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1682 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1692 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1693 UCHAR BANClass3Data;
1694 ULONG IsolateInterStaTraffic;
1697 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1700 UCHAR TimIELocationInBeacon;
1701 UCHAR CapabilityInfoLocationInBeacon;
1702 // outgoing BEACON frame buffer and corresponding TXWI
1703 // PTXWI_STRUC BeaconTxWI; //
1704 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1707 UINT16 StationKeepAliveTime; // unit: second
1710 USHORT VLAN_Priority;
1712 RT_802_11_ACL AccessControlList;
1715 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1716 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1718 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1720 // For 802.1x daemon setting per BSS
1721 UCHAR radius_srv_num;
1722 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1725 unsigned int mylinkid;
1729 UINT32 RcvdConflictSsidCount;
1730 UINT32 RcvdSpoofedAssocRespCount;
1731 UINT32 RcvdSpoofedReassocRespCount;
1732 UINT32 RcvdSpoofedProbeRespCount;
1733 UINT32 RcvdSpoofedBeaconCount;
1734 UINT32 RcvdSpoofedDisassocCount;
1735 UINT32 RcvdSpoofedAuthCount;
1736 UINT32 RcvdSpoofedDeauthCount;
1737 UINT32 RcvdSpoofedUnknownMgmtCount;
1738 UINT32 RcvdReplayAttackCount;
1740 CHAR RssiOfRcvdConflictSsid;
1741 CHAR RssiOfRcvdSpoofedAssocResp;
1742 CHAR RssiOfRcvdSpoofedReassocResp;
1743 CHAR RssiOfRcvdSpoofedProbeResp;
1744 CHAR RssiOfRcvdSpoofedBeacon;
1745 CHAR RssiOfRcvdSpoofedDisassoc;
1746 CHAR RssiOfRcvdSpoofedAuth;
1747 CHAR RssiOfRcvdSpoofedDeauth;
1748 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1749 CHAR RssiOfRcvdReplayAttack;
1753 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1757 #ifdef DOT11N_DRAFT3
1758 typedef enum _BSS2040COEXIST_FLAG{
1759 BSS_2040_COEXIST_DISABLE = 0,
1760 BSS_2040_COEXIST_TIMER_FIRED = 1,
1761 BSS_2040_COEXIST_INFO_SYNC = 2,
1762 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1763 }BSS2040COEXIST_FLAG;
1764 #endif // DOT11N_DRAFT3 //
1766 // configuration common to OPMODE_AP as well as OPMODE_STA
1767 typedef struct _COMMON_CONFIG {
1769 BOOLEAN bCountryFlag;
1770 UCHAR CountryCode[3];
1772 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1773 UCHAR CountryRegionForABand; // Enum of country region for A band
1774 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1775 USHORT Dsifs; // in units of usec
1776 ULONG PacketFilter; // Packet filter for receiving
1778 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1779 UCHAR SsidLen; // the actual ssid length in used
1780 UCHAR LastSsidLen; // the actual ssid length in used
1781 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1782 UCHAR LastBssid[MAC_ADDR_LEN];
1784 UCHAR Bssid[MAC_ADDR_LEN];
1785 USHORT BeaconPeriod;
1787 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1789 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1791 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1793 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1794 UCHAR MaxDesiredRate;
1795 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1797 ULONG BasicRateBitmap; // backup basic ratebitmap
1799 BOOLEAN bAPSDCapable;
1800 BOOLEAN bInServicePeriod;
1805 BOOLEAN bNeedSendTriggerFrame;
1806 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1807 ULONG TriggerTimerCount;
1809 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1810 // move to MULTISSID_STRUCT for MBSS
1811 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1812 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1813 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1814 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1815 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1816 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1817 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1818 //BOOLEAN bAutoTxRateSwitch;
1819 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1820 UCHAR RtsRate; // RATE_xxx
1821 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1822 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1823 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1825 USHORT RtsThreshold; // in unit of BYTE
1826 USHORT FragmentThreshold; // in unit of BYTE
1828 UCHAR TxPower; // in unit of mW
1829 ULONG TxPowerPercentage; // 0~100 %
1830 ULONG TxPowerDefault; // keep for TxPowerPercentage
1832 #ifdef DOT11_N_SUPPORT
1833 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1834 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1835 #endif // DOT11_N_SUPPORT //
1836 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1837 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1838 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1839 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1840 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1841 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1842 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1843 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1844 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1845 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1847 #ifdef DOT11_N_SUPPORT
1849 #endif // DOT11_N_SUPPORT //
1850 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1851 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1852 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1853 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1854 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1855 #ifdef CONFIG_STA_SUPPORT
1856 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1857 #endif // CONFIG_STA_SUPPORT //
1858 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1859 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1860 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1861 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1862 ULONG OpStatusFlags;
1864 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1865 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1866 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1868 // IEEE802.11H--DFS.
1869 RADAR_DETECT_STRUCT RadarDetect;
1871 #ifdef CARRIER_DETECTION_SUPPORT
1872 CARRIER_DETECTION CarrierDetect;
1873 #endif // CARRIER_DETECTION_SUPPORT //
1875 #ifdef DOT11_N_SUPPORT
1877 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1878 //RT_HT_CAPABILITY SupportedHtPhy;
1879 RT_HT_CAPABILITY DesiredHtPhy;
1880 HT_CAPABILITY_IE HtCapability;
1881 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1882 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1883 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1884 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
1886 #ifdef DOT11N_DRAFT3
1887 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1888 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1890 //This IE is used for 20/40 BSS Coexistence.
1891 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1892 // ====== 11n D3.0 =======================>
1893 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1894 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1895 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1896 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1897 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1898 USHORT Dot11BssWidthChanTranDelayFactor;
1899 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1901 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1902 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1904 NDIS_SPIN_LOCK TriggerEventTabLock;
1905 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1906 BSS_2040_COEXIST_IE BSSCoexist2040;
1907 TRIGGER_EVENT_TAB TriggerEventTab;
1908 UCHAR ChannelListIdx;
1909 // <====== 11n D3.0 =======================
1910 BOOLEAN bOverlapScanning;
1911 #endif // DOT11N_DRAFT3 //
1914 BOOLEAN bMIMOPSEnable;
1916 BOOLEAN bDisableReordering;
1917 BOOLEAN bForty_Mhz_Intolerant;
1918 BOOLEAN bExtChannelSwitchAnnouncement;
1919 BOOLEAN bRcvBSSWidthTriggerEvents;
1920 ULONG LastRcvBSSWidthTriggerEventsTime;
1923 #endif // DOT11_N_SUPPORT //
1925 // Enable wireless event
1926 BOOLEAN bWirelessEvent;
1927 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1929 // Tx & Rx Stream number selection
1933 // transmit phy mode, trasmit rate for Multicast.
1934 #ifdef MCAST_RATE_SPECIFIC
1935 UCHAR McastTransmitMcs;
1936 UCHAR McastTransmitPhyMode;
1937 #endif // MCAST_RATE_SPECIFIC //
1939 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1942 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1943 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1944 RT_HT_CAPABILITY SupportedHtPhy;
1945 ULONG MaxPktOneTxBulk;
1949 BEACON_SYNC_STRUCT *pBeaconSync;
1950 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1951 UINT32 BeaconAdjust;
1952 UINT32 BeaconFactor;
1953 UINT32 BeaconRemain;
1957 NDIS_SPIN_LOCK MeasureReqTabLock;
1958 PMEASURE_REQ_TAB pMeasureReqTab;
1960 NDIS_SPIN_LOCK TpcReqTabLock;
1961 PTPC_REQ_TAB pTpcReqTab;
1963 // transmit phy mode, trasmit rate for Multicast.
1964 #ifdef MCAST_RATE_SPECIFIC
1965 HTTRANSMIT_SETTING MCastPhyMode;
1966 #endif // MCAST_RATE_SPECIFIC //
1969 UINT16 DefineMaxTxPwr;
1970 #endif // SINGLE_SKU //
1973 } COMMON_CONFIG, *PCOMMON_CONFIG;
1976 #ifdef CONFIG_STA_SUPPORT
1977 /* Modified by Wu Xi-Kun 4/21/2006 */
1978 // STA configuration and status
1979 typedef struct _STA_ADMIN_CONFIG {
1981 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1982 // the user intended configuration, but not necessary fully equal to the final
1983 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1984 // AP or IBSS holder).
1985 // Once initialized, user configuration can only be changed via OID_xxx
1986 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1987 USHORT AtimWin; // used when starting a new IBSS
1990 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1991 // the user intended configuration, and should be always applied to the final
1992 // settings in ACTIVE BSS without compromising with the BSS holder.
1993 // Once initialized, user configuration can only be changed via OID_xxx
1995 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1996 USHORT DefaultListenCount; // default listen count;
1997 ULONG WindowsPowerMode; // Power mode for AC power
1998 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1999 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2000 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2001 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2003 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2004 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2005 USHORT DisassocReason;
2006 UCHAR DisassocSta[MAC_ADDR_LEN];
2007 USHORT DeauthReason;
2008 UCHAR DeauthSta[MAC_ADDR_LEN];
2009 USHORT AuthFailReason;
2010 UCHAR AuthFailSta[MAC_ADDR_LEN];
2012 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2013 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2014 NDIS_802_11_WEP_STATUS WepStatus;
2015 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2017 // Add to support different cipher suite for WPA2/WPA mode
2018 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2019 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2020 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2021 USHORT RsnCapability;
2023 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2025 UCHAR PMK[32]; // WPA PSK mode PMK
2026 UCHAR PTK[64]; // WPA PSK mode PTK
2027 UCHAR GTK[32]; // GTK from authenticator
2028 BSSID_INFO SavedPMK[PMKID_NO];
2029 UINT SavedPMKNum; // Saved PMKID number
2034 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2037 // For WPA countermeasures
2038 ULONG LastMicErrorTime; // record last MIC error time
2039 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2040 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2041 // For WPA-PSK supplicant state
2042 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2043 UCHAR ReplayCounter[8];
2044 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2045 UCHAR SNonce[32]; // SNonce for WPA-PSK
2047 UCHAR LastSNR0; // last received BEACON's SNR
2048 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2049 RSSI_SAMPLE RssiSample;
2050 ULONG NumOfAvgRssiSample;
2052 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2053 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2054 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2055 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2057 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2058 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2059 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2060 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2061 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2062 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2063 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2065 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2066 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2067 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2069 // New for WPA, windows want us to to keep association information and
2070 // Fixed IEs from last association response
2071 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2072 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2073 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2074 USHORT ResVarIELen; // Length of next VIE include EID & Length
2075 UCHAR ResVarIEs[MAX_VIE_LEN];
2078 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2080 // New variables used for CCX 1.0
2082 BOOLEAN bCkipCmicOn;
2084 UCHAR GIV[3]; //for CCX iv
2089 LEAP_AUTH_INFO LeapAuthInfo;
2091 UCHAR NetworkChallenge[8];
2092 UCHAR NetworkChallengeResponse[24];
2093 UCHAR PeerChallenge[8];
2095 UCHAR PeerChallengeResponse[24];
2096 UCHAR SessionKey[16]; //Network session keys (NSK)
2097 RALINK_TIMER_STRUCT LeapAuthTimer;
2098 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2100 // New control flags for CCX
2101 CCX_CONTROL CCXControl; // Master administration state
2102 BOOLEAN CCXEnable; // Actual CCX state
2103 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2104 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2105 UCHAR CCXReqType; // Current processing CCX request type
2106 BSS_TABLE CCXBssTab; // BSS Table
2107 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2108 USHORT FrameReportLen; // Current Frame report length
2109 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2110 USHORT RPIDensity[8]; // Array for RPI density collection
2111 // Start address of each BSS table within FrameReportBuf
2112 // It's important to update the RxPower of the corresponding Bss
2113 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2114 USHORT BeaconToken; // Token for beacon report
2115 ULONG LastBssIndex; // Most current reported Bss index
2116 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2117 UCHAR RMReqCnt; // Number of measurement request saved.
2118 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2119 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2120 // It must be the same channel with maximum duration
2121 USHORT ParallelDuration; // Maximum duration for parallel measurement
2122 UCHAR ParallelChannel; // Only one channel with parallel measurement
2123 USHORT IAPPToken; // IAPP dialog token
2124 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2125 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2126 // Hack for channel load and noise histogram parameters
2127 UCHAR NHFactor; // Parameter for Noise histogram
2128 UCHAR CLFactor; // Parameter for channel load
2130 UCHAR KRK[16]; //Key Refresh Key.
2131 UCHAR BTK[32]; //Base Transient Key
2132 BOOLEAN CCKMLinkUpFlag;
2133 ULONG CCKMRN; //(Re)Association request number.
2134 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2135 UCHAR AironetCellPowerLimit; //in dBm
2136 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2137 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2138 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2139 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2140 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2141 USHORT CCXAdjacentAPChannel;
2142 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2144 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2145 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2147 UCHAR DtimCount; // 0.. DtimPeriod-1
2148 UCHAR DtimPeriod; // default = 3
2150 #ifdef QOS_DLS_SUPPORT
2151 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2152 UCHAR DlsReplayCounter[8];
2153 #endif // QOS_DLS_SUPPORT //
2154 ////////////////////////////////////////////////////////////////////////////////////////
2155 // This is only for WHQL test.
2157 ////////////////////////////////////////////////////////////////////////////////////////
2159 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2161 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2162 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2164 #ifdef WPA_SUPPLICANT_SUPPORT
2166 BOOLEAN IEEE8021x_required_keys;
2167 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2168 UCHAR DesireSharedKeyId;
2170 // 0: driver ignores wpa_supplicant
2171 // 1: wpa_supplicant initiates scanning and AP selection
2172 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2173 UCHAR WpaSupplicantUP;
2174 UCHAR WpaSupplicantScanCount;
2175 #endif // WPA_SUPPLICANT_SUPPORT //
2180 BOOLEAN bTGnWifiTest;
2181 BOOLEAN bScanReqIsFromWebUI;
2183 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2184 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2185 RT_HT_PHY_INFO DesiredHtPhyInfo;
2186 BOOLEAN bAutoTxRateSwitch;
2189 #ifdef EXT_BUILD_CHANNEL_LIST
2190 UCHAR IEEE80211dClientMode;
2191 UCHAR StaOriCountryCode[3];
2192 UCHAR StaOriGeography;
2193 #endif // EXT_BUILD_CHANNEL_LIST //
2194 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2196 // This data structure keep the current active BSS/IBSS's configuration that this STA
2197 // had agreed upon joining the network. Which means these parameters are usually decided
2198 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2199 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2200 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2201 // the current active settings.
2202 typedef struct _STA_ACTIVE_CONFIG {
2204 USHORT AtimWin; // in kusec; IBSS parameter set element
2205 USHORT CapabilityInfo;
2206 USHORT CfpMaxDuration;
2209 // Copy supported rate from desired AP's beacon. We are trying to match
2210 // AP's supported and extended rate settings.
2211 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2212 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2215 // Copy supported ht from desired AP's beacon. We are trying to match
2216 RT_HT_PHY_INFO SupportedPhyInfo;
2217 RT_HT_CAPABILITY SupportedHtPhy;
2218 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2219 #endif // CONFIG_STA_SUPPORT //
2222 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2223 NDIS_802_11_MAC_ADDRESS MacAddr;
2224 USHORT MacTabMatchWCID; // ASIC
2225 CIPHER_KEY CipherKey;
2226 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2229 // ----------- start of AP --------------------------
2230 // AUTH-RSP State Machine Aux data structure
2231 typedef struct _AP_MLME_AUX {
2232 UCHAR Addr[MAC_ADDR_LEN];
2234 CHAR Challenge[CIPHER_TEXT_LEN];
2235 } AP_MLME_AUX, *PAP_MLME_AUX;
2237 // structure to define WPA Group Key Rekey Interval
2238 typedef struct PACKED _RT_802_11_WPA_REKEY {
2239 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2240 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2241 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2243 typedef struct _MAC_TABLE_ENTRY {
2244 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2245 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2246 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2247 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2248 BOOLEAN ValidAsMesh;
2249 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2251 BOOLEAN bIAmBadAtheros;
2253 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2255 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2256 UCHAR CMTimerRunning;
2257 UCHAR apidx; // MBSS number
2259 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2260 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2261 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2264 RALINK_TIMER_STRUCT RetryTimer;
2265 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2266 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2267 NDIS_802_11_WEP_STATUS WepStatus;
2268 AP_WPA_STATE WpaState;
2271 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2272 CIPHER_KEY PairwiseKey;
2275 UCHAR PMKID[LEN_PMKID];
2278 UCHAR Addr[MAC_ADDR_LEN];
2281 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2282 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2284 USHORT CapabilityInfo;
2286 ULONG NoDataIdleCount;
2287 UINT16 StationKeepAliveCount; // unit: second
2289 QUEUE_HEADER PsQueue;
2291 UINT32 StaConnectTime; // the live time of this station since associated with AP
2294 #ifdef DOT11_N_SUPPORT
2296 USHORT NoBADataCountDown;
2298 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2299 UINT TxBFCount; // 3*3
2300 #endif // DOT11_N_SUPPORT //
2302 UINT DebugFIFOCount;
2307 //====================================================
2308 //WDS entry needs these
2309 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2310 UINT MatchWDSTabIdx;
2311 UCHAR MaxSupportedRate;
2313 UCHAR CurrTxRateIndex;
2314 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2315 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2316 // USHORT OneSecTxOkCount;
2317 UINT32 OneSecTxNoRetryOkCount;
2318 UINT32 OneSecTxRetryOkCount;
2319 UINT32 OneSecTxFailCount;
2320 UINT32 ContinueTxFailCnt;
2321 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2322 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2323 //====================================================
2327 #ifdef CONFIG_STA_SUPPORT
2328 #ifdef QOS_DLS_SUPPORT
2329 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2330 #endif // QOS_DLS_SUPPORT //
2331 #endif // CONFIG_STA_SUPPORT //
2333 BOOLEAN fNoisyEnvironment;
2334 BOOLEAN fLastSecAccordingRSSI;
2335 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2336 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2337 ULONG LastTxOkCount;
2338 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2340 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2341 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2342 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2343 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2344 ULONG ClientStatusFlags;
2346 // TODO: Shall we move that to DOT11_N_SUPPORT???
2347 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2349 #ifdef DOT11_N_SUPPORT
2350 // HT EWC MIMO-N used parameters
2351 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2352 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2353 USHORT TXAutoBAbitmap;
2354 USHORT BADeclineBitmap;
2355 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2356 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2357 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2359 // 802.11n features.
2361 UCHAR MaxRAmpduFactor;
2363 UCHAR MmpsMode; // MIMO power save more.
2365 HT_CAPABILITY_IE HTCapability;
2367 #ifdef DOT11N_DRAFT3
2368 UCHAR BSS2040CoexistenceMgmtSupport;
2369 #endif // DOT11N_DRAFT3 //
2370 #endif // DOT11_N_SUPPORT //
2372 BOOLEAN bAutoTxRateSwitch;
2375 struct _MAC_TABLE_ENTRY *pNext;
2376 USHORT TxSeq[NUM_OF_TID];
2377 USHORT NonQosDataSeq;
2379 RSSI_SAMPLE RssiSample;
2381 UINT32 TXMCSExpected[16];
2382 UINT32 TXMCSSuccessful[16];
2383 UINT32 TXMCSFailed[16];
2384 UINT32 TXMCSAutoFallBack[16][16];
2386 #ifdef CONFIG_STA_SUPPORT
2387 ULONG LastBeaconRxTime;
2388 #endif // CONFIG_STA_SUPPORT //
2389 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2391 typedef struct _MAC_TABLE {
2393 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2394 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2395 QUEUE_HEADER McastPsQueue;
2397 BOOLEAN fAnyStationInPsm;
2398 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2399 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2400 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2401 #ifdef DOT11_N_SUPPORT
2402 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2403 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2404 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2405 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2406 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2407 #endif // DOT11_N_SUPPORT //
2408 } MAC_TABLE, *PMAC_TABLE;
2410 #ifdef DOT11_N_SUPPORT
2411 #define IS_HT_STA(_pMacEntry) \
2412 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2414 #define IS_HT_RATE(_pMacEntry) \
2415 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2417 #define PEER_IS_HT_RATE(_pMacEntry) \
2418 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2419 #endif // DOT11_N_SUPPORT //
2421 typedef struct _WDS_ENTRY {
2423 UCHAR Addr[MAC_ADDR_LEN];
2424 ULONG NoDataIdleCount;
2425 struct _WDS_ENTRY *pNext;
2426 } WDS_ENTRY, *PWDS_ENTRY;
2428 typedef struct _WDS_TABLE_ENTRY {
2430 UCHAR WdsAddr[MAC_ADDR_LEN];
2431 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2432 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2433 UCHAR MaxSupportedRate;
2435 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2436 USHORT OneSecTxOkCount;
2437 USHORT OneSecTxRetryOkCount;
2438 USHORT OneSecTxFailCount;
2439 ULONG CurrTxRateStableTime; // # of second in current TX rate
2440 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2441 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2443 typedef struct _RT_802_11_WDS_ENTRY {
2447 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2448 UCHAR MacTabMatchWCID; // ASIC
2449 NDIS_802_11_WEP_STATUS WepStatus;
2452 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2453 RT_HT_PHY_INFO DesiredHtPhyInfo;
2454 BOOLEAN bAutoTxRateSwitch;
2455 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2456 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2458 typedef struct _WDS_TABLE {
2461 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2462 } WDS_TABLE, *PWDS_TABLE;
2464 typedef struct _APCLI_STRUCT {
2467 unsigned int mylinkid;
2469 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2470 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2471 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2473 CHAR Ssid[MAX_LEN_OF_SSID];
2476 CHAR CfgSsid[MAX_LEN_OF_SSID];
2477 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2478 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2480 ULONG ApCliRcvBeaconTime;
2482 ULONG CtrlCurrState;
2483 ULONG SyncCurrState;
2484 ULONG AuthCurrState;
2485 ULONG AssocCurrState;
2486 ULONG WpaPskCurrState;
2491 ULONG ClientStatusFlags;
2494 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2495 NDIS_802_11_WEP_STATUS WepStatus;
2497 // Add to support different cipher suite for WPA2/WPA mode
2498 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2499 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2500 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2501 USHORT RsnCapability;
2503 UCHAR PSK[100]; // reserve PSK key material
2505 UCHAR PMK[32]; // WPA PSK mode PMK
2506 //UCHAR PTK[64]; // WPA PSK mode PTK
2507 UCHAR GTK[32]; // GTK from authenticator
2509 //CIPHER_KEY PairwiseKey;
2510 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2513 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2514 //UCHAR PortSecured;
2516 // store RSN_IE built by driver
2517 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2520 // For WPA countermeasures
2521 ULONG LastMicErrorTime; // record last MIC error time
2522 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2523 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2525 // For WPA-PSK supplicant state
2526 //WPA_STATE WpaState; // Default is SS_NOTUSE
2527 //UCHAR ReplayCounter[8];
2528 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2529 UCHAR SNonce[32]; // SNonce for WPA-PSK
2530 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2532 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2533 RT_HT_PHY_INFO DesiredHtPhyInfo;
2534 BOOLEAN bAutoTxRateSwitch;
2535 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2536 } APCLI_STRUCT, *PAPCLI_STRUCT;
2538 // ----------- end of AP ----------------------------
2541 typedef struct _BLOCK_QUEUE_ENTRY
2543 BOOLEAN SwTxQueueBlockFlag;
2544 LIST_HEADER NetIfList;
2545 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2546 #endif // BLOCK_NET_IF //
2552 BOOLEAN bGreenField;
2558 typedef struct _INF_PCI_CONFIG
2560 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2563 typedef struct _INF_USB_CONFIG
2565 UINT BulkInEpAddr; // bulk-in endpoint address
2566 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2570 #ifdef IKANOS_VX_1X0
2571 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2573 struct IKANOS_TX_INFO
2575 struct net_device *netdev;
2576 IkanosWlanTxCbFuncP *fp;
2578 #endif // IKANOS_VX_1X0 //
2581 #define DIAGNOSE_TIME 10 // 10 sec
2582 typedef struct _RtmpDiagStrcut_
2583 { // Diagnosis Related element
2584 unsigned char inited;
2586 unsigned char ArrayStartIdx;
2587 unsigned char ArrayCurIdx;
2589 USHORT TxDataCnt[DIAGNOSE_TIME];
2590 USHORT TxFailCnt[DIAGNOSE_TIME];
2591 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2592 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2593 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2594 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2595 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2597 USHORT TxAggCnt[DIAGNOSE_TIME];
2598 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2599 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2600 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2601 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2602 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2605 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2606 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2607 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2608 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2610 #endif // DBG_DIAGNOSE //
2614 // The miniport adapter structure
2616 typedef struct _RTMP_ADAPTER
2618 PVOID OS_Cookie; // save specific structure relative to OS
2624 NDIS_SPIN_LOCK irq_lock;
2628 /*****************************************************************************************/
2629 /* USB related parameters */
2630 /*****************************************************************************************/
2631 struct usb_config_descriptor *config;
2632 UINT BulkInEpAddr; // bulk-in endpoint address
2633 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2636 USHORT BulkOutMaxPacketSize;
2637 USHORT BulkInMaxPacketSize;
2639 //======Control Flags
2640 LONG PendingIoCount;
2642 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2645 //======Timer Thread
2646 RT2870_TIMER_QUEUE TimerQ;
2647 NDIS_SPIN_LOCK TimerQLock;
2652 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2654 BOOLEAN TimerFunc_kill;
2658 //======Semaphores (event)
2659 struct semaphore mlme_semaphore; /* to sleep thread on */
2660 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2661 struct semaphore RTUSBTimer_semaphore;
2662 #ifdef INF_AMAZON_SE
2663 struct semaphore UsbVendorReq_semaphore;
2664 PVOID UsbVendorReqBuf;
2665 #endif // INF_AMAZON_SE //
2666 struct completion TimerQComplete;
2667 struct completion mlmeComplete;
2668 struct completion CmdQComplete;
2669 wait_queue_head_t *wait;
2673 /*****************************************************************************************/
2674 /* Both PCI/USB related parameters */
2675 /*****************************************************************************************/
2678 /*****************************************************************************************/
2679 /* Tx related parameters */
2680 /*****************************************************************************************/
2681 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2682 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2685 // Data related context and AC specified, 4 AC supported
2686 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2687 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2689 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2690 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2692 // 4 sets of Bulk Out index and pending flag
2693 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2695 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2696 UCHAR bulkResetPipeid;
2697 BOOLEAN MgmtBulkPending;
2698 ULONG bulkResetReq[6];
2701 // resource for software backlog queues
2702 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2703 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2705 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2706 RTMP_MGMT_RING MgmtRing;
2707 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2710 /*****************************************************************************************/
2711 /* Rx related parameters */
2712 /*****************************************************************************************/
2716 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2717 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2718 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2719 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2720 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2721 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2722 ULONG TransferBufferLength; // current length of the packet buffer
2723 ULONG ReadPosition; // current read position in a packet buffer
2727 /*****************************************************************************************/
2728 /* ASIC related parameters */
2729 /*****************************************************************************************/
2730 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2732 // ---------------------------
2734 // ---------------------------
2735 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2736 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2737 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2738 BOOLEAN EepromAccess;
2740 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2742 // ---------------------------
2744 // ---------------------------
2745 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2746 UCHAR BbpRssiToDbmDelta;
2747 BBP_R66_TUNING BbpTuning;
2749 // ----------------------------
2751 // ----------------------------
2752 UCHAR RfIcType; // RFIC_xxx
2753 ULONG RfFreqOffset; // Frequency offset for channel switching
2754 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2756 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2757 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2759 // This soft Rx Antenna Diversity mechanism is used only when user set
2760 // RX Antenna = DIVERSITY ON
2761 SOFT_RX_ANT_DIVERSITY RxAnt;
2764 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2765 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2766 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2767 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2769 UCHAR ChannelListNum; // number of channel in ChannelList[]
2772 ULONG Tx20MPwrCfgABand[5];
2773 ULONG Tx20MPwrCfgGBand[5];
2774 ULONG Tx40MPwrCfgABand[5];
2775 ULONG Tx40MPwrCfgGBand[5];
2777 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2778 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2779 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2780 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2781 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2782 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2784 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2785 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2786 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2787 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2788 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2789 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2791 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2792 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2793 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2794 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2797 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2798 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2799 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2800 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2803 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2804 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2805 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2806 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2808 // ----------------------------
2810 // ----------------------------
2811 MCU_LEDCS_STRUC LedCntl;
2812 USHORT Led1; // read from EEPROM 0x3c
2813 USHORT Led2; // EEPROM 0x3e
2814 USHORT Led3; // EEPROM 0x40
2815 UCHAR LedIndicatorStregth;
2816 UCHAR RssiSingalstrengthOffet;
2817 BOOLEAN bLedOnScanning;
2820 /*****************************************************************************************/
2821 /* 802.11 related parameters */
2822 /*****************************************************************************************/
2823 // outgoing BEACON frame buffer and corresponding TXD
2824 TXWI_STRUC BeaconTxWI;
2826 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2828 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2829 PSPOLL_FRAME PsPollFrame;
2830 HEADER_802_11 NullFrame;
2833 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2834 TX_CONTEXT NullContext;
2835 TX_CONTEXT PsPollContext;
2836 TX_CONTEXT RTSContext;
2841 //=========AP===========
2844 //=======STA===========
2845 #ifdef CONFIG_STA_SUPPORT
2846 /* Modified by Wu Xi-Kun 4/21/2006 */
2847 // -----------------------------------------------
2848 // STA specific configuration & operation status
2849 // used only when pAd->OpMode == OPMODE_STA
2850 // -----------------------------------------------
2851 STA_ADMIN_CONFIG StaCfg; // user desired settings
2852 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2853 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2854 NDIS_MEDIA_STATE PreMediaState;
2855 #endif // CONFIG_STA_SUPPORT //
2857 //=======Common===========
2858 // OP mode: either AP or STA
2859 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2861 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2864 // MAT related parameters
2866 // configuration: read from Registry & E2PROM
2867 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2868 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2869 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2871 // ------------------------------------------------------
2872 // common configuration to both OPMODE_STA and OPMODE_AP
2873 // ------------------------------------------------------
2874 COMMON_CONFIG CommonCfg;
2877 // AP needs those vaiables for site survey feature.
2878 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2879 BSS_TABLE ScanTab; // store the latest SCAN result
2881 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2882 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2883 NDIS_SPIN_LOCK MacTabLock;
2885 #ifdef DOT11_N_SUPPORT
2887 #endif // DOT11_N_SUPPORT //
2888 NDIS_SPIN_LOCK BATabLock;
2889 RALINK_TIMER_STRUCT RECBATimer;
2891 // encryption/decryption KEY tables
2892 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2894 // RX re-assembly buffer for fragmentation
2895 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2898 COUNTER_802_3 Counters8023; // 802.3 counters
2899 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2900 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2901 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2902 PRIVATE_STRUC PrivateInfo; // Private information & counters
2904 // flags, see fRTMP_ADAPTER_xxx flags
2905 ULONG Flags; // Represent current device status
2907 // current TX sequence #
2910 // Control disconnect / connect event generation
2911 //+++Didn't used anymore
2916 //+++Used only for Station
2917 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2920 ULONG ExtraInfo; // Extra information for displaying status
2921 ULONG SystemErrorBitmap; // b0: E2PROM version error
2923 //+++Didn't used anymore
2924 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2927 // ---------------------------
2929 // ---------------------------
2930 RT_802_11_EVENT_TABLE EventTab;
2935 /*****************************************************************************************/
2936 /* Statistic related parameters */
2937 /*****************************************************************************************/
2939 ULONG BulkOutDataOneSecCount;
2940 ULONG BulkInDataOneSecCount;
2941 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2942 ULONG watchDogRxCnt;
2943 ULONG watchDogRxOverFlowCnt;
2944 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2947 BOOLEAN bUpdateBcnCntDone;
2948 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2949 // ----------------------------
2951 // ----------------------------
2952 //ULONG DebugSetting[4];
2953 BOOLEAN bBanAllBaSetup;
2954 BOOLEAN bPromiscuous;
2956 // ----------------------------
2957 // rt2860c emulation-use Parameters
2958 // ----------------------------
2961 ULONG cfendaccu[30];
2962 ULONG bacontent[16];
2963 ULONG rxint[RX_RING_SIZE+1];
2966 BOOLEAN bForcePrintTX;
2967 BOOLEAN bForcePrintRX;
2968 BOOLEAN bDisablescanning; //defined in RT2870 USB
2969 BOOLEAN bStaFifoTest;
2970 BOOLEAN bProtectionTest;
2972 BOOLEAN bGenOneHCCA;
2973 BOOLEAN bBroadComHT;
2974 //+++Following add from RT2870 USB.
2976 ULONG BulkOutComplete;
2977 ULONG BulkOutCompleteOther;
2978 ULONG BulkOutCompleteCancel; // seems not use now?
2980 ULONG BulkInComplete;
2981 ULONG BulkInCompleteFail;
2984 struct wificonf WIFItestbed;
2986 #ifdef DOT11_N_SUPPORT
2987 struct reordering_mpdu_pool mpdu_blk_pool;
2988 #endif // DOT11_N_SUPPORT //
2990 ULONG OneSecondnonBEpackets; // record non BE packets per second
2992 #if WIRELESS_EXT >= 12
2993 struct iw_statistics iw_stats;
2996 struct net_device_stats stats;
2999 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3000 #endif // BLOCK_NET_IF //
3004 #ifdef MULTIPLE_CARD_SUPPORT
3006 UCHAR MC_FileName[256];
3007 #endif // MULTIPLE_CARD_SUPPORT //
3009 ULONG TbttTickCount;
3010 #ifdef PCI_MSI_SUPPORT
3012 #endif // PCI_MSI_SUPPORT //
3017 #define TIME_BASE (1000000/OS_HZ)
3018 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3019 UCHAR flg_be_adjust;
3020 ULONG be_adjust_last_time;
3022 #ifdef IKANOS_VX_1X0
3023 struct IKANOS_TX_INFO IkanosTxInfo;
3024 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3025 #endif // IKANOS_VX_1X0 //
3029 RtmpDiagStruct DiagStruct;
3030 #endif // DBG_DIAGNOSE //
3033 UINT8 PM_FlgSuspend;
3038 BOOLEAN bEEPROMFile;
3041 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3044 // Cisco IAPP format
3046 typedef struct _CISCO_IAPP_CONTENT_
3048 USHORT Length; //IAPP Length
3049 UCHAR MessageType; //IAPP type
3050 UCHAR FunctionCode; //IAPP function type
3051 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3052 UCHAR SourceMAC[MAC_ADDR_LEN];
3053 USHORT Tag; //Tag(element IE) - Adjacent AP report
3054 USHORT TagLength; //Length of element not including 4 byte header
3055 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3056 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3059 UCHAR Ssid[MAX_LEN_OF_SSID];
3060 USHORT Seconds; //Seconds that the client has been disassociated.
3061 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3063 #define DELAYINTMASK 0x0003fffb
3064 #define INTMASK 0x0003fffb
3065 #define IndMask 0x0003fffc
3066 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3067 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3068 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3069 #define TxCoherent 0x00020000 // tx coherent
3070 #define RxCoherent 0x00010000 // rx coherent
3071 #define McuCommand 0x00000200 // mcu
3072 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3073 #define TBTTInt 0x00000800 // TBTT interrupt
3074 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3075 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3076 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3079 typedef struct _RX_BLK_
3081 // RXD_STRUC RxD; // sample
3082 RT28XX_RXD_STRUC RxD;
3084 PHEADER_802_11 pHeader;
3085 PNDIS_PACKET pRxPacket;
3089 UCHAR UserPriority; // for calculate TKIP MIC using
3093 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3094 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3095 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3098 #define fRX_WDS 0x0001
3099 #define fRX_AMSDU 0x0002
3100 #define fRX_ARALINK 0x0004
3101 #define fRX_HTC 0x0008
3102 #define fRX_PAD 0x0010
3103 #define fRX_AMPDU 0x0020
3104 #define fRX_QOS 0x0040
3105 #define fRX_INFRA 0x0080
3106 #define fRX_EAP 0x0100
3107 #define fRX_MESH 0x0200
3108 #define fRX_APCLI 0x0400
3109 #define fRX_DLS 0x0800
3110 #define fRX_WPI 0x1000
3112 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3113 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3114 #define LENGTH_ARALINK_HEADER_FIELD 2
3116 #define TX_UNKOWN_FRAME 0x00
3117 #define TX_MCAST_FRAME 0x01
3118 #define TX_LEGACY_FRAME 0x02
3119 #define TX_AMPDU_FRAME 0x04
3120 #define TX_AMSDU_FRAME 0x08
3121 #define TX_RALINK_FRAME 0x10
3122 #define TX_FRAG_FRAME 0x20
3125 // Currently the sizeof(TX_BLK) is 148 bytes.
3126 typedef struct _TX_BLK_
3129 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3130 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3131 USHORT TotalFragNum; // Total frame fragments required in one batch
3132 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3134 QUEUE_HEADER TxPacketList;
3135 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3136 HTTRANSMIT_SETTING *pTransmit;
3138 // Following structure used for the characteristics of a specific packet.
3139 PNDIS_PACKET pPacket;
3140 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3141 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3142 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3143 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3144 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3145 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3146 UCHAR HdrPadLen; // recording Header Padding Length;
3147 UCHAR apidx; // The interface associated to this packet
3148 UCHAR Wcid; // The MAC entry associated to this packet
3149 UCHAR UserPriority; // priority class of packet
3150 UCHAR FrameGap; // what kind of IFS this packet use
3151 UCHAR MpduReqNum; // number of fragments of this frame
3152 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3153 UCHAR CipherAlg; // cipher alogrithm
3158 USHORT Flags; //See following definitions for detail.
3160 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3161 ULONG Priv; // Hardware specific value saved in here.
3165 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3166 #define fTX_bAckRequired 0x0002 // the packet need ack response
3167 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3168 #define fTX_bHTRate 0x0008 // allow to use HT rate
3169 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3170 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3171 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3172 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3173 #define fTX_bWMM 0x0080 // QOS Data
3175 #define fTX_bClearEAPFrame 0x0100
3178 #ifdef CONFIG_STA_SUPPORT
3179 #endif // CONFIG_STA_SUPPORT //
3183 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3186 (_pTxBlk->Flags |= _flag) \
3188 (_pTxBlk->Flags &= ~(_flag)) \
3191 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3192 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3193 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3199 //------------------------------------------------------------------------------------------
3203 #ifdef RT_BIG_ENDIAN
3204 static inline VOID WriteBackToDescriptor(
3207 IN BOOLEAN DoEncrypt,
3208 IN ULONG DescriptorType)
3212 p1 = ((UINT32 *)Dest);
3213 p2 = ((UINT32 *)Src);
3218 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3222 ========================================================================
3224 Routine Description:
3225 Endian conversion of Tx/Rx descriptor .
3228 pAd Pointer to our adapter
3229 pData Pointer to Tx/Rx descriptor
3230 DescriptorType Direction of the frame
3236 Call this function when read or update descriptor
3237 ========================================================================
3239 static inline VOID RTMPWIEndianChange(
3241 IN ULONG DescriptorType)
3246 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3248 if(DescriptorType == TYPE_TXWI)
3250 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3251 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3255 for(i=0; i < size/4 ; i++)
3256 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3261 ========================================================================
3263 Routine Description:
3264 Endian conversion of Tx/Rx descriptor .
3267 pAd Pointer to our adapter
3268 pData Pointer to Tx/Rx descriptor
3269 DescriptorType Direction of the frame
3275 Call this function when read or update descriptor
3276 ========================================================================
3280 static inline VOID RTMPDescriptorEndianChange(
3282 IN ULONG DescriptorType)
3284 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3288 ========================================================================
3290 Routine Description:
3291 Endian conversion of all kinds of 802.11 frames .
3294 pAd Pointer to our adapter
3295 pData Pointer to the 802.11 frame structure
3296 Dir Direction of the frame
3297 FromRxDoneInt Caller is from RxDone interrupt
3303 Call this function when read or update buffer data
3304 ========================================================================
3306 static inline VOID RTMPFrameEndianChange(
3307 IN PRTMP_ADAPTER pAd,
3310 IN BOOLEAN FromRxDoneInt)
3312 PHEADER_802_11 pFrame;
3315 // swab 16 bit fields - Frame Control field
3318 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3321 pFrame = (PHEADER_802_11) pData;
3322 pMacHdr = (PUCHAR) pFrame;
3324 // swab 16 bit fields - Duration/ID field
3325 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3327 // swab 16 bit fields - Sequence Control field
3328 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3330 if(pFrame->FC.Type == BTYPE_MGMT)
3332 switch(pFrame->FC.SubType)
3334 case SUBTYPE_ASSOC_REQ:
3335 case SUBTYPE_REASSOC_REQ:
3336 // swab 16 bit fields - CapabilityInfo field
3337 pMacHdr += sizeof(HEADER_802_11);
3338 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3340 // swab 16 bit fields - Listen Interval field
3342 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3345 case SUBTYPE_ASSOC_RSP:
3346 case SUBTYPE_REASSOC_RSP:
3347 // swab 16 bit fields - CapabilityInfo field
3348 pMacHdr += sizeof(HEADER_802_11);
3349 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3351 // swab 16 bit fields - Status Code field
3353 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3355 // swab 16 bit fields - AID field
3357 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3361 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3362 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3363 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3367 // swab 16 bit fields - Auth Alg No. field
3368 pMacHdr += sizeof(HEADER_802_11);
3369 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3371 // swab 16 bit fields - Auth Seq No. field
3373 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3375 // swab 16 bit fields - Status Code field
3377 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3381 case SUBTYPE_BEACON:
3382 case SUBTYPE_PROBE_RSP:
3383 // swab 16 bit fields - BeaconInterval field
3384 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3385 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3387 // swab 16 bit fields - CapabilityInfo field
3388 pMacHdr += sizeof(USHORT);
3389 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3392 case SUBTYPE_DEAUTH:
3393 case SUBTYPE_DISASSOC:
3394 // swab 16 bit fields - Reason code field
3395 pMacHdr += sizeof(HEADER_802_11);
3396 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3400 else if( pFrame->FC.Type == BTYPE_DATA )
3403 else if(pFrame->FC.Type == BTYPE_CNTL)
3405 switch(pFrame->FC.SubType)
3407 case SUBTYPE_BLOCK_ACK_REQ:
3409 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3410 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3411 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3414 case SUBTYPE_BLOCK_ACK:
3415 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3416 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3420 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3421 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3427 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3430 // swab 16 bit fields - Frame Control
3431 if(Dir == DIR_WRITE)
3433 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3436 #endif // RT_BIG_ENDIAN //
3439 static inline VOID ConvertMulticastIP2MAC(
3441 IN PUCHAR *ppMacAddr,
3442 IN UINT16 ProtoType)
3444 if (pIpAddr == NULL)
3447 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3453 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3454 *(*ppMacAddr) = 0x33;
3455 *(*ppMacAddr + 1) = 0x33;
3456 *(*ppMacAddr + 2) = pIpAddr[12];
3457 *(*ppMacAddr + 3) = pIpAddr[13];
3458 *(*ppMacAddr + 4) = pIpAddr[14];
3459 *(*ppMacAddr + 5) = pIpAddr[15];
3464 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3465 *(*ppMacAddr) = 0x01;
3466 *(*ppMacAddr + 1) = 0x00;
3467 *(*ppMacAddr + 2) = 0x5e;
3468 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3469 *(*ppMacAddr + 4) = pIpAddr[2];
3470 *(*ppMacAddr + 5) = pIpAddr[3];
3477 BOOLEAN RTMPCheckForHang(
3478 IN NDIS_HANDLE MiniportAdapterContext
3482 IN NDIS_HANDLE MiniportAdapterContext
3486 // Private routines in rtmp_init.c
3488 NDIS_STATUS RTMPAllocAdapterBlock(
3490 OUT PRTMP_ADAPTER *ppAdapter
3493 NDIS_STATUS RTMPAllocTxRxRingMemory(
3494 IN PRTMP_ADAPTER pAd
3497 NDIS_STATUS RTMPFindAdapter(
3498 IN PRTMP_ADAPTER pAd,
3499 IN NDIS_HANDLE WrapperConfigurationContext
3502 NDIS_STATUS RTMPReadParametersHook(
3503 IN PRTMP_ADAPTER pAd
3506 VOID RTMPFreeAdapter(
3507 IN PRTMP_ADAPTER pAd
3510 NDIS_STATUS NICReadRegParameters(
3511 IN PRTMP_ADAPTER pAd,
3512 IN NDIS_HANDLE WrapperConfigurationContext
3516 VOID NICInitRT30xxRFRegisters(
3517 IN PRTMP_ADAPTER pAd);
3520 VOID NICReadEEPROMParameters(
3521 IN PRTMP_ADAPTER pAd,
3522 IN PUCHAR mac_addr);
3524 VOID NICInitAsicFromEEPROM(
3525 IN PRTMP_ADAPTER pAd);
3527 VOID NICInitTxRxRingAndBacklogQueue(
3528 IN PRTMP_ADAPTER pAd);
3530 NDIS_STATUS NICInitializeAdapter(
3531 IN PRTMP_ADAPTER pAd,
3532 IN BOOLEAN bHardReset);
3534 NDIS_STATUS NICInitializeAsic(
3535 IN PRTMP_ADAPTER pAd,
3536 IN BOOLEAN bHardReset);
3539 IN PRTMP_ADAPTER pAd);
3541 VOID RTMPRingCleanUp(
3542 IN PRTMP_ADAPTER pAd,
3546 IN PRTMP_ADAPTER pAd);
3548 NDIS_STATUS DbgSendPacket(
3549 IN PRTMP_ADAPTER pAd,
3550 IN PNDIS_PACKET pPacket);
3553 IN PRTMP_ADAPTER pAd);
3555 VOID NICResetFromError(
3556 IN PRTMP_ADAPTER pAd);
3558 VOID NICEraseFirmware(
3559 IN PRTMP_ADAPTER pAd);
3561 NDIS_STATUS NICLoadFirmware(
3562 IN PRTMP_ADAPTER pAd);
3564 NDIS_STATUS NICLoadRateSwitchingParams(
3565 IN PRTMP_ADAPTER pAd);
3567 BOOLEAN NICCheckForHang(
3568 IN PRTMP_ADAPTER pAd);
3570 VOID NICUpdateFifoStaCounters(
3571 IN PRTMP_ADAPTER pAd);
3573 VOID NICUpdateRawCounters(
3574 IN PRTMP_ADAPTER pAd);
3576 ULONG RTMPNotAllZero(
3580 VOID RTMPZeroMemory(
3584 ULONG RTMPCompareMemory(
3589 VOID RTMPMoveMemory(
3602 VOID RTMPPatchMacBbpBug(
3603 IN PRTMP_ADAPTER pAd);
3605 VOID RTMPPatchCardBus(
3606 IN PRTMP_ADAPTER pAdapter);
3608 VOID RTMPPatchRalinkCardBus(
3609 IN PRTMP_ADAPTER pAdapter,
3612 ULONG RTMPReadCBConfig(
3618 VOID RTMPWriteCBConfig(
3626 IN PRTMP_ADAPTER pAd,
3627 IN PRALINK_TIMER_STRUCT pTimer,
3628 IN PVOID pTimerFunc,
3633 IN PRALINK_TIMER_STRUCT pTimer,
3638 IN PRALINK_TIMER_STRUCT pTimer,
3641 VOID RTMPCancelTimer(
3642 IN PRALINK_TIMER_STRUCT pTimer,
3643 OUT BOOLEAN *pCancelled);
3646 IN PRTMP_ADAPTER pAd,
3649 VOID RTMPSetSignalLED(
3650 IN PRTMP_ADAPTER pAd,
3651 IN NDIS_802_11_RSSI Dbm);
3653 VOID RTMPEnableRxTx(
3654 IN PRTMP_ADAPTER pAd);
3657 // prototype in action.c
3659 VOID ActionStateMachineInit(
3660 IN PRTMP_ADAPTER pAd,
3661 IN STATE_MACHINE *S,
3662 OUT STATE_MACHINE_FUNC Trans[]);
3664 VOID MlmeADDBAAction(
3665 IN PRTMP_ADAPTER pAd,
3666 IN MLME_QUEUE_ELEM *Elem);
3668 VOID MlmeDELBAAction(
3669 IN PRTMP_ADAPTER pAd,
3670 IN MLME_QUEUE_ELEM *Elem);
3673 IN PRTMP_ADAPTER pAd,
3674 IN MLME_QUEUE_ELEM *Elem);
3676 VOID MlmeInvalidAction(
3677 IN PRTMP_ADAPTER pAd,
3678 IN MLME_QUEUE_ELEM *Elem);
3681 IN PRTMP_ADAPTER pAd,
3682 IN MLME_QUEUE_ELEM *Elem);
3684 #ifdef DOT11_N_SUPPORT
3685 VOID PeerAddBAReqAction(
3686 IN PRTMP_ADAPTER pAd,
3687 IN MLME_QUEUE_ELEM *Elem);
3689 VOID PeerAddBARspAction(
3690 IN PRTMP_ADAPTER pAd,
3691 IN MLME_QUEUE_ELEM *Elem);
3693 VOID PeerDelBAAction(
3694 IN PRTMP_ADAPTER pAd,
3695 IN MLME_QUEUE_ELEM *Elem);
3698 IN PRTMP_ADAPTER pAd,
3699 IN MLME_QUEUE_ELEM *Elem);
3700 #endif // DOT11_N_SUPPORT //
3702 VOID SendPSMPAction(
3703 IN PRTMP_ADAPTER pAd,
3708 #ifdef DOT11N_DRAFT3
3709 VOID SendBSS2040CoexistMgmtAction(
3710 IN PRTMP_ADAPTER pAd,
3715 VOID SendNotifyBWActionFrame(
3716 IN PRTMP_ADAPTER pAd,
3720 BOOLEAN ChannelSwitchSanityCheck(
3721 IN PRTMP_ADAPTER pAd,
3723 IN UCHAR NewChannel,
3724 IN UCHAR Secondary);
3726 VOID ChannelSwitchAction(
3727 IN PRTMP_ADAPTER pAd,
3730 IN UCHAR Secondary);
3732 ULONG BuildIntolerantChannelRep(
3733 IN PRTMP_ADAPTER pAd,
3736 VOID Update2040CoexistFrameAndNotify(
3737 IN PRTMP_ADAPTER pAd,
3739 IN BOOLEAN bAddIntolerantCha);
3741 VOID Send2040CoexistAction(
3742 IN PRTMP_ADAPTER pAd,
3744 IN BOOLEAN bAddIntolerantCha);
3745 #endif // DOT11N_DRAFT3 //
3748 IN PRTMP_ADAPTER pAd,
3749 IN MLME_QUEUE_ELEM *Elem);
3751 VOID PeerPublicAction(
3752 IN PRTMP_ADAPTER pAd,
3753 IN MLME_QUEUE_ELEM *Elem);
3755 #ifdef CONFIG_STA_SUPPORT
3756 VOID StaPublicAction(
3757 IN PRTMP_ADAPTER pAd,
3758 IN UCHAR Bss2040Coexist);
3759 #endif // CONFIG_STA_SUPPORT //
3762 VOID PeerBSSTranAction(
3763 IN PRTMP_ADAPTER pAd,
3764 IN MLME_QUEUE_ELEM *Elem);
3766 #ifdef DOT11_N_SUPPORT
3768 IN PRTMP_ADAPTER pAd,
3769 IN MLME_QUEUE_ELEM *Elem);
3770 #endif // DOT11_N_SUPPORT //
3773 IN PRTMP_ADAPTER pAd,
3774 IN MLME_QUEUE_ELEM *Elem);
3776 #ifdef QOS_DLS_SUPPORT
3778 IN PRTMP_ADAPTER pAd,
3779 IN MLME_QUEUE_ELEM *Elem);
3780 #endif // QOS_DLS_SUPPORT //
3782 #ifdef CONFIG_STA_SUPPORT
3783 #ifdef QOS_DLS_SUPPORT
3785 IN PRTMP_ADAPTER pAd,
3786 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3787 IN PRT_802_11_DLS pDls,
3789 #endif // QOS_DLS_SUPPORT //
3790 #endif // CONFIG_STA_SUPPORT //
3792 #ifdef DOT11_N_SUPPORT
3793 VOID RECBATimerTimeout(
3794 IN PVOID SystemSpecific1,
3795 IN PVOID FunctionContext,
3796 IN PVOID SystemSpecific2,
3797 IN PVOID SystemSpecific3);
3799 VOID ORIBATimerTimeout(
3800 IN PRTMP_ADAPTER pAd);
3802 VOID SendRefreshBAR(
3803 IN PRTMP_ADAPTER pAd,
3804 IN MAC_TABLE_ENTRY *pEntry);
3805 #endif // DOT11_N_SUPPORT //
3808 IN PRTMP_ADAPTER pAd,
3809 IN OUT PHEADER_802_11 pHdr80211,
3815 IN PRTMP_ADAPTER pAd,
3816 IN OUT PFRAME_BAR pCntlBar,
3820 VOID InsertActField(
3821 IN PRTMP_ADAPTER pAd,
3822 OUT PUCHAR pFrameBuf,
3823 OUT PULONG pFrameLen,
3827 BOOLEAN QosBADataParse(
3828 IN PRTMP_ADAPTER pAd,
3830 IN PUCHAR p8023Header,
3834 IN UCHAR DataOffset,
3836 IN UINT CurRxIndex);
3838 #ifdef DOT11_N_SUPPORT
3839 BOOLEAN CntlEnqueueForRecv(
3840 IN PRTMP_ADAPTER pAd,
3843 IN PFRAME_BA_REQ pMsg);
3845 VOID BaAutoManSwitch(
3846 IN PRTMP_ADAPTER pAd);
3847 #endif // DOT11_N_SUPPORT //
3850 IN PRTMP_ADAPTER pAd,
3851 IN UCHAR BatRecIdx);
3854 // Private routines in rtmp_data.c
3856 BOOLEAN RTMPHandleRxDoneInterrupt(
3857 IN PRTMP_ADAPTER pAd);
3859 VOID RTMPHandleTxDoneInterrupt(
3860 IN PRTMP_ADAPTER pAd);
3862 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3863 IN PRTMP_ADAPTER pAd,
3864 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3866 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3867 IN PRTMP_ADAPTER pAd);
3869 VOID RTMPHandleTBTTInterrupt(
3870 IN PRTMP_ADAPTER pAd);
3872 VOID RTMPHandlePreTBTTInterrupt(
3873 IN PRTMP_ADAPTER pAd);
3875 void RTMPHandleTwakeupInterrupt(
3876 IN PRTMP_ADAPTER pAd);
3878 VOID RTMPHandleRxCoherentInterrupt(
3879 IN PRTMP_ADAPTER pAd);
3881 BOOLEAN TxFrameIsAggregatible(
3882 IN PRTMP_ADAPTER pAd,
3883 IN PUCHAR pPrevAddr1,
3884 IN PUCHAR p8023hdr);
3886 BOOLEAN PeerIsAggreOn(
3887 IN PRTMP_ADAPTER pAd,
3889 IN PMAC_TABLE_ENTRY pMacEntry);
3891 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3892 IN PNDIS_BUFFER pFirstBuffer,
3893 IN UCHAR DesiredOffset,
3897 NDIS_STATUS STASendPacket(
3898 IN PRTMP_ADAPTER pAd,
3899 IN PNDIS_PACKET pPacket);
3901 VOID STASendPackets(
3902 IN NDIS_HANDLE MiniportAdapterContext,
3903 IN PPNDIS_PACKET ppPacketArray,
3904 IN UINT NumberOfPackets);
3906 VOID RTMPDeQueuePacket(
3907 IN PRTMP_ADAPTER pAd,
3908 IN BOOLEAN bIntContext,
3910 IN UCHAR Max_Tx_Packets);
3912 NDIS_STATUS RTMPHardTransmit(
3913 IN PRTMP_ADAPTER pAd,
3914 IN PNDIS_PACKET pPacket,
3916 OUT PULONG pFreeTXDLeft);
3918 NDIS_STATUS STAHardTransmit(
3919 IN PRTMP_ADAPTER pAd,
3923 VOID STARxEAPOLFrameIndicate(
3924 IN PRTMP_ADAPTER pAd,
3925 IN MAC_TABLE_ENTRY *pEntry,
3927 IN UCHAR FromWhichBSSID);
3929 NDIS_STATUS RTMPFreeTXDRequest(
3930 IN PRTMP_ADAPTER pAd,
3932 IN UCHAR NumberRequired,
3933 IN PUCHAR FreeNumberIs);
3935 NDIS_STATUS MlmeHardTransmit(
3936 IN PRTMP_ADAPTER pAd,
3938 IN PNDIS_PACKET pPacket);
3940 NDIS_STATUS MlmeHardTransmitMgmtRing(
3941 IN PRTMP_ADAPTER pAd,
3943 IN PNDIS_PACKET pPacket);
3945 NDIS_STATUS MlmeHardTransmitTxRing(
3946 IN PRTMP_ADAPTER pAd,
3948 IN PNDIS_PACKET pPacket);
3950 USHORT RTMPCalcDuration(
3951 IN PRTMP_ADAPTER pAd,
3956 IN PRTMP_ADAPTER pAd,
3957 IN PTXWI_STRUC pTxWI,
3960 IN BOOLEAN InsTimestamp,
3963 IN BOOLEAN NSeq, // HW new a sequence.
3972 IN HTTRANSMIT_SETTING *pTransmit);
3975 VOID RTMPWriteTxWI_Data(
3976 IN PRTMP_ADAPTER pAd,
3977 IN OUT PTXWI_STRUC pTxWI,
3981 VOID RTMPWriteTxWI_Cache(
3982 IN PRTMP_ADAPTER pAd,
3983 IN OUT PTXWI_STRUC pTxWI,
3986 VOID RTMPWriteTxDescriptor(
3987 IN PRTMP_ADAPTER pAd,
3992 VOID RTMPSuspendMsduTransmission(
3993 IN PRTMP_ADAPTER pAd);
3995 VOID RTMPResumeMsduTransmission(
3996 IN PRTMP_ADAPTER pAd);
3998 NDIS_STATUS MiniportMMRequest(
3999 IN PRTMP_ADAPTER pAd,
4004 NDIS_STATUS MiniportDataMMRequest(
4005 IN PRTMP_ADAPTER pAd,
4010 VOID RTMPSendNullFrame(
4011 IN PRTMP_ADAPTER pAd,
4013 IN BOOLEAN bQosNull);
4015 VOID RTMPSendDisassociationFrame(
4016 IN PRTMP_ADAPTER pAd);
4018 VOID RTMPSendRTSFrame(
4019 IN PRTMP_ADAPTER pAd,
4021 IN unsigned int NextMpduSize,
4024 IN USHORT AckDuration,
4029 NDIS_STATUS RTMPApplyPacketFilter(
4030 IN PRTMP_ADAPTER pAd,
4031 IN PRT28XX_RXD_STRUC pRxD,
4032 IN PHEADER_802_11 pHeader);
4034 PQUEUE_HEADER RTMPCheckTxSwQueue(
4035 IN PRTMP_ADAPTER pAd,
4038 #ifdef CONFIG_STA_SUPPORT
4039 VOID RTMPReportMicError(
4040 IN PRTMP_ADAPTER pAd,
4041 IN PCIPHER_KEY pWpaKey);
4043 VOID WpaMicFailureReportFrame(
4044 IN PRTMP_ADAPTER pAd,
4045 IN MLME_QUEUE_ELEM *Elem);
4047 VOID WpaDisassocApAndBlockAssoc(
4048 IN PVOID SystemSpecific1,
4049 IN PVOID FunctionContext,
4050 IN PVOID SystemSpecific2,
4051 IN PVOID SystemSpecific3);
4052 #endif // CONFIG_STA_SUPPORT //
4054 NDIS_STATUS RTMPCloneNdisPacket(
4055 IN PRTMP_ADAPTER pAd,
4056 IN BOOLEAN pInsAMSDUHdr,
4057 IN PNDIS_PACKET pInPacket,
4058 OUT PNDIS_PACKET *ppOutPacket);
4060 NDIS_STATUS RTMPAllocateNdisPacket(
4061 IN PRTMP_ADAPTER pAd,
4062 IN PNDIS_PACKET *pPacket,
4068 VOID RTMPFreeNdisPacket(
4069 IN PRTMP_ADAPTER pAd,
4070 IN PNDIS_PACKET pPacket);
4072 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4073 IN PRTMP_ADAPTER pAd,
4076 BOOLEAN RTMPCheckDHCPFrame(
4077 IN PRTMP_ADAPTER pAd,
4078 IN PNDIS_PACKET pPacket);
4081 BOOLEAN RTMPCheckEtherType(
4082 IN PRTMP_ADAPTER pAd,
4083 IN PNDIS_PACKET pPacket);
4086 VOID RTMPCckBbpTuning(
4087 IN PRTMP_ADAPTER pAd,
4091 // Private routines in rtmp_wep.c
4093 VOID RTMPInitWepEngine(
4094 IN PRTMP_ADAPTER pAd,
4100 VOID RTMPEncryptData(
4101 IN PRTMP_ADAPTER pAd,
4106 BOOLEAN RTMPDecryptData(
4107 IN PRTMP_ADAPTER pAdapter,
4112 BOOLEAN RTMPSoftDecryptWEP(
4113 IN PRTMP_ADAPTER pAd,
4115 IN ULONG DataByteCnt,
4116 IN PCIPHER_KEY pGroupKey);
4119 IN PRTMP_ADAPTER pAd,
4123 IN PARCFOURCONTEXT Ctx,
4128 IN PARCFOURCONTEXT Ctx);
4130 VOID ARCFOUR_DECRYPT(
4131 IN PARCFOURCONTEXT Ctx,
4136 VOID ARCFOUR_ENCRYPT(
4137 IN PARCFOURCONTEXT Ctx,
4142 VOID WPAARCFOUR_ENCRYPT(
4143 IN PARCFOURCONTEXT Ctx,
4148 UINT RTMP_CALC_FCS32(
4157 // Asic/RF/BBP related functions
4159 VOID AsicAdjustTxPower(
4160 IN PRTMP_ADAPTER pAd);
4162 VOID AsicUpdateProtect(
4163 IN PRTMP_ADAPTER pAd,
4164 IN USHORT OperaionMode,
4166 IN BOOLEAN bDisableBGProtect,
4167 IN BOOLEAN bNonGFExist);
4169 VOID AsicSwitchChannel(
4170 IN PRTMP_ADAPTER pAd,
4174 VOID AsicLockChannel(
4175 IN PRTMP_ADAPTER pAd,
4178 VOID AsicAntennaSelect(
4179 IN PRTMP_ADAPTER pAd,
4182 VOID AsicAntennaSetting(
4183 IN PRTMP_ADAPTER pAd,
4184 IN ABGBAND_STATE BandState);
4186 VOID AsicRfTuningExec(
4187 IN PVOID SystemSpecific1,
4188 IN PVOID FunctionContext,
4189 IN PVOID SystemSpecific2,
4190 IN PVOID SystemSpecific3);
4192 #ifdef CONFIG_STA_SUPPORT
4193 VOID AsicSleepThenAutoWakeup(
4194 IN PRTMP_ADAPTER pAd,
4195 IN USHORT TbttNumToNextWakeUp);
4197 VOID AsicForceSleep(
4198 IN PRTMP_ADAPTER pAd);
4200 VOID AsicForceWakeup(
4201 IN PRTMP_ADAPTER pAd,
4202 IN BOOLEAN bFromTx);
4203 #endif // CONFIG_STA_SUPPORT //
4206 IN PRTMP_ADAPTER pAd,
4209 VOID AsicSetMcastWC(
4210 IN PRTMP_ADAPTER pAd);
4212 VOID AsicDelWcidTab(
4213 IN PRTMP_ADAPTER pAd,
4217 IN PRTMP_ADAPTER pAd);
4219 VOID AsicDisableRDG(
4220 IN PRTMP_ADAPTER pAd);
4222 VOID AsicDisableSync(
4223 IN PRTMP_ADAPTER pAd);
4225 VOID AsicEnableBssSync(
4226 IN PRTMP_ADAPTER pAd);
4228 VOID AsicEnableIbssSync(
4229 IN PRTMP_ADAPTER pAd);
4231 VOID AsicSetEdcaParm(
4232 IN PRTMP_ADAPTER pAd,
4233 IN PEDCA_PARM pEdcaParm);
4235 VOID AsicSetSlotTime(
4236 IN PRTMP_ADAPTER pAd,
4237 IN BOOLEAN bUseShortSlotTime);
4239 VOID AsicAddSharedKeyEntry(
4240 IN PRTMP_ADAPTER pAd,
4248 VOID AsicRemoveSharedKeyEntry(
4249 IN PRTMP_ADAPTER pAd,
4253 VOID AsicUpdateWCIDAttribute(
4254 IN PRTMP_ADAPTER pAd,
4258 IN BOOLEAN bUsePairewiseKeyTable);
4260 VOID AsicUpdateWCIDIVEIV(
4261 IN PRTMP_ADAPTER pAd,
4266 VOID AsicUpdateRxWCIDTable(
4267 IN PRTMP_ADAPTER pAd,
4271 VOID AsicAddKeyEntry(
4272 IN PRTMP_ADAPTER pAd,
4276 IN PCIPHER_KEY pCipherKey,
4277 IN BOOLEAN bUsePairewiseKeyTable,
4280 VOID AsicAddPairwiseKeyEntry(
4281 IN PRTMP_ADAPTER pAd,
4284 IN CIPHER_KEY *pCipherKey);
4286 VOID AsicRemovePairwiseKeyEntry(
4287 IN PRTMP_ADAPTER pAd,
4291 BOOLEAN AsicSendCommandToMcu(
4292 IN PRTMP_ADAPTER pAd,
4299 VOID MacAddrRandomBssid(
4300 IN PRTMP_ADAPTER pAd,
4303 VOID MgtMacHeaderInit(
4304 IN PRTMP_ADAPTER pAd,
4305 IN OUT PHEADER_802_11 pHdr80211,
4312 IN PRTMP_ADAPTER pAd);
4315 IN PRTMP_ADAPTER pAd);
4321 #ifdef DOT11_N_SUPPORT
4323 IN PRTMP_ADAPTER pAd,
4325 #endif // DOT11_N_SUPPORT //
4327 ULONG BssTableSearch(
4332 ULONG BssSsidTableSearch(
4339 ULONG BssTableSearchWithSSID(
4346 VOID BssTableDeleteEntry(
4347 IN OUT PBSS_TABLE pTab,
4351 #ifdef DOT11_N_SUPPORT
4352 VOID BATableDeleteORIEntry(
4353 IN OUT PRTMP_ADAPTER pAd,
4354 IN BA_ORI_ENTRY *pBAORIEntry);
4356 VOID BATableDeleteRECEntry(
4357 IN OUT PRTMP_ADAPTER pAd,
4358 IN BA_REC_ENTRY *pBARECEntry);
4360 VOID BATableTearORIEntry(
4361 IN OUT PRTMP_ADAPTER pAd,
4364 IN BOOLEAN bForceDelete,
4367 VOID BATableTearRECEntry(
4368 IN OUT PRTMP_ADAPTER pAd,
4372 #endif // DOT11_N_SUPPORT //
4375 IN PRTMP_ADAPTER pAd,
4376 OUT PBSS_ENTRY pBss,
4381 IN USHORT BeaconPeriod,
4384 IN USHORT CapabilityInfo,
4386 IN UCHAR SupRateLen,
4388 IN UCHAR ExtRateLen,
4389 IN HT_CAPABILITY_IE *pHtCapability,
4390 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4391 IN UCHAR HtCapabilityLen,
4392 IN UCHAR AddHtInfoLen,
4393 IN UCHAR NewExtChanOffset,
4396 IN LARGE_INTEGER TimeStamp,
4398 IN PEDCA_PARM pEdcaParm,
4399 IN PQOS_CAPABILITY_PARM pQosCapability,
4400 IN PQBSS_LOAD_PARM pQbssLoad,
4401 IN USHORT LengthVIE,
4402 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4404 ULONG BssTableSetEntry(
4405 IN PRTMP_ADAPTER pAd,
4406 OUT PBSS_TABLE pTab,
4411 IN USHORT BeaconPeriod,
4414 IN USHORT CapabilityInfo,
4416 IN UCHAR SupRateLen,
4418 IN UCHAR ExtRateLen,
4419 IN HT_CAPABILITY_IE *pHtCapability,
4420 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4421 IN UCHAR HtCapabilityLen,
4422 IN UCHAR AddHtInfoLen,
4423 IN UCHAR NewExtChanOffset,
4426 IN LARGE_INTEGER TimeStamp,
4428 IN PEDCA_PARM pEdcaParm,
4429 IN PQOS_CAPABILITY_PARM pQosCapability,
4430 IN PQBSS_LOAD_PARM pQbssLoad,
4431 IN USHORT LengthVIE,
4432 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4434 #ifdef DOT11_N_SUPPORT
4435 VOID BATableInsertEntry(
4436 IN PRTMP_ADAPTER pAd,
4438 IN USHORT TimeOutValue,
4439 IN USHORT StartingSeq,
4442 IN UCHAR OriginatorStatus,
4443 IN BOOLEAN IsRecipient);
4445 #ifdef DOT11N_DRAFT3
4446 VOID Bss2040CoexistTimeOut(
4447 IN PVOID SystemSpecific1,
4448 IN PVOID FunctionContext,
4449 IN PVOID SystemSpecific2,
4450 IN PVOID SystemSpecific3);
4454 IN PRTMP_ADAPTER pAd);
4456 ULONG TriEventTableSetEntry(
4457 IN PRTMP_ADAPTER pAd,
4458 OUT TRIGGER_EVENT_TAB *Tab,
4460 IN HT_CAPABILITY_IE *pHtCapability,
4461 IN UCHAR HtCapabilityLen,
4463 IN UCHAR ChannelNo);
4465 VOID TriEventCounterMaintenance(
4466 IN PRTMP_ADAPTER pAd);
4467 #endif // DOT11N_DRAFT3 //
4468 #endif // DOT11_N_SUPPORT //
4470 VOID BssTableSsidSort(
4471 IN PRTMP_ADAPTER pAd,
4472 OUT BSS_TABLE *OutTab,
4476 VOID BssTableSortByRssi(
4477 IN OUT BSS_TABLE *OutTab);
4479 VOID BssCipherParse(
4480 IN OUT PBSS_ENTRY pBss);
4482 NDIS_STATUS MlmeQueueInit(
4483 IN MLME_QUEUE *Queue);
4485 VOID MlmeQueueDestroy(
4486 IN MLME_QUEUE *Queue);
4488 BOOLEAN MlmeEnqueue(
4489 IN PRTMP_ADAPTER pAd,
4495 BOOLEAN MlmeEnqueueForRecv(
4496 IN PRTMP_ADAPTER pAd,
4498 IN ULONG TimeStampHigh,
4499 IN ULONG TimeStampLow,
4508 BOOLEAN MlmeDequeue(
4509 IN MLME_QUEUE *Queue,
4510 OUT MLME_QUEUE_ELEM **Elem);
4512 VOID MlmeRestartStateMachine(
4513 IN PRTMP_ADAPTER pAd);
4515 BOOLEAN MlmeQueueEmpty(
4516 IN MLME_QUEUE *Queue);
4518 BOOLEAN MlmeQueueFull(
4519 IN MLME_QUEUE *Queue);
4521 BOOLEAN MsgTypeSubst(
4522 IN PRTMP_ADAPTER pAd,
4523 IN PFRAME_802_11 pFrame,
4527 VOID StateMachineInit(
4528 IN STATE_MACHINE *Sm,
4529 IN STATE_MACHINE_FUNC Trans[],
4532 IN STATE_MACHINE_FUNC DefFunc,
4536 VOID StateMachineSetAction(
4537 IN STATE_MACHINE *S,
4540 IN STATE_MACHINE_FUNC F);
4542 VOID StateMachinePerformAction(
4543 IN PRTMP_ADAPTER pAd,
4544 IN STATE_MACHINE *S,
4545 IN MLME_QUEUE_ELEM *Elem);
4548 IN PRTMP_ADAPTER pAd,
4549 IN MLME_QUEUE_ELEM *Elem);
4551 VOID AssocStateMachineInit(
4552 IN PRTMP_ADAPTER pAd,
4553 IN STATE_MACHINE *Sm,
4554 OUT STATE_MACHINE_FUNC Trans[]);
4556 VOID ReassocTimeout(
4557 IN PVOID SystemSpecific1,
4558 IN PVOID FunctionContext,
4559 IN PVOID SystemSpecific2,
4560 IN PVOID SystemSpecific3);
4563 IN PVOID SystemSpecific1,
4564 IN PVOID FunctionContext,
4565 IN PVOID SystemSpecific2,
4566 IN PVOID SystemSpecific3);
4568 VOID DisassocTimeout(
4569 IN PVOID SystemSpecific1,
4570 IN PVOID FunctionContext,
4571 IN PVOID SystemSpecific2,
4572 IN PVOID SystemSpecific3);
4574 //----------------------------------------------
4575 VOID MlmeDisassocReqAction(
4576 IN PRTMP_ADAPTER pAd,
4577 IN MLME_QUEUE_ELEM *Elem);
4579 VOID MlmeAssocReqAction(
4580 IN PRTMP_ADAPTER pAd,
4581 IN MLME_QUEUE_ELEM *Elem);
4583 VOID MlmeReassocReqAction(
4584 IN PRTMP_ADAPTER pAd,
4585 IN MLME_QUEUE_ELEM *Elem);
4587 VOID MlmeDisassocReqAction(
4588 IN PRTMP_ADAPTER pAd,
4589 IN MLME_QUEUE_ELEM *Elem);
4591 VOID PeerAssocRspAction(
4592 IN PRTMP_ADAPTER pAd,
4593 IN MLME_QUEUE_ELEM *Elem);
4595 VOID PeerReassocRspAction(
4596 IN PRTMP_ADAPTER pAd,
4597 IN MLME_QUEUE_ELEM *Elem);
4599 VOID PeerDisassocAction(
4600 IN PRTMP_ADAPTER pAd,
4601 IN MLME_QUEUE_ELEM *Elem);
4603 VOID DisassocTimeoutAction(
4604 IN PRTMP_ADAPTER pAd,
4605 IN MLME_QUEUE_ELEM *Elem);
4607 VOID AssocTimeoutAction(
4608 IN PRTMP_ADAPTER pAd,
4609 IN MLME_QUEUE_ELEM *Elem);
4611 VOID ReassocTimeoutAction(
4612 IN PRTMP_ADAPTER pAd,
4613 IN MLME_QUEUE_ELEM *Elem);
4616 IN PRTMP_ADAPTER pAd,
4619 VOID SwitchBetweenWepAndCkip(
4620 IN PRTMP_ADAPTER pAd);
4622 VOID InvalidStateWhenAssoc(
4623 IN PRTMP_ADAPTER pAd,
4624 IN MLME_QUEUE_ELEM *Elem);
4626 VOID InvalidStateWhenReassoc(
4627 IN PRTMP_ADAPTER pAd,
4628 IN MLME_QUEUE_ELEM *Elem);
4630 VOID InvalidStateWhenDisassociate(
4631 IN PRTMP_ADAPTER pAd,
4632 IN MLME_QUEUE_ELEM *Elem);
4635 VOID MlmeCntlConfirm(
4636 IN PRTMP_ADAPTER pAd,
4642 IN PRTMP_ADAPTER pAd);
4644 VOID ComposeNullFrame(
4645 IN PRTMP_ADAPTER pAd);
4648 IN PRTMP_ADAPTER pAd,
4650 IN USHORT CapabilityInfo,
4653 IN UCHAR SupRateLen,
4655 IN UCHAR ExtRateLen,
4656 IN PEDCA_PARM pEdcaParm,
4657 IN HT_CAPABILITY_IE *pHtCapability,
4658 IN UCHAR HtCapabilityLen,
4659 IN ADD_HT_INFO_IE *pAddHtInfo);
4661 VOID AuthStateMachineInit(
4662 IN PRTMP_ADAPTER pAd,
4663 IN PSTATE_MACHINE sm,
4664 OUT STATE_MACHINE_FUNC Trans[]);
4667 IN PVOID SystemSpecific1,
4668 IN PVOID FunctionContext,
4669 IN PVOID SystemSpecific2,
4670 IN PVOID SystemSpecific3);
4672 VOID MlmeAuthReqAction(
4673 IN PRTMP_ADAPTER pAd,
4674 IN MLME_QUEUE_ELEM *Elem);
4676 VOID PeerAuthRspAtSeq2Action(
4677 IN PRTMP_ADAPTER pAd,
4678 IN MLME_QUEUE_ELEM *Elem);
4680 VOID PeerAuthRspAtSeq4Action(
4681 IN PRTMP_ADAPTER pAd,
4682 IN MLME_QUEUE_ELEM *Elem);
4684 VOID AuthTimeoutAction(
4685 IN PRTMP_ADAPTER pAd,
4686 IN MLME_QUEUE_ELEM *Elem);
4689 IN PRTMP_ADAPTER pAd,
4692 VOID MlmeDeauthReqAction(
4693 IN PRTMP_ADAPTER pAd,
4694 IN MLME_QUEUE_ELEM *Elem);
4696 VOID InvalidStateWhenAuth(
4697 IN PRTMP_ADAPTER pAd,
4698 IN MLME_QUEUE_ELEM *Elem);
4700 //=============================================
4702 VOID AuthRspStateMachineInit(
4703 IN PRTMP_ADAPTER pAd,
4704 IN PSTATE_MACHINE Sm,
4705 IN STATE_MACHINE_FUNC Trans[]);
4707 VOID PeerDeauthAction(
4708 IN PRTMP_ADAPTER pAd,
4709 IN MLME_QUEUE_ELEM *Elem);
4711 VOID PeerAuthSimpleRspGenAndSend(
4712 IN PRTMP_ADAPTER pAd,
4713 IN PHEADER_802_11 pHdr80211,
4720 // Private routines in dls.c
4723 #ifdef CONFIG_STA_SUPPORT
4724 #ifdef QOS_DLS_SUPPORT
4725 void DlsStateMachineInit(
4726 IN PRTMP_ADAPTER pAd,
4727 IN STATE_MACHINE *Sm,
4728 OUT STATE_MACHINE_FUNC Trans[]);
4730 VOID MlmeDlsReqAction(
4731 IN PRTMP_ADAPTER pAd,
4732 IN MLME_QUEUE_ELEM *Elem);
4734 VOID PeerDlsReqAction(
4735 IN PRTMP_ADAPTER pAd,
4736 IN MLME_QUEUE_ELEM *Elem);
4738 VOID PeerDlsRspAction(
4739 IN PRTMP_ADAPTER pAd,
4740 IN MLME_QUEUE_ELEM *Elem);
4742 VOID MlmeDlsTearDownAction(
4743 IN PRTMP_ADAPTER pAd,
4744 IN MLME_QUEUE_ELEM *Elem);
4746 VOID PeerDlsTearDownAction(
4747 IN PRTMP_ADAPTER pAd,
4748 IN MLME_QUEUE_ELEM *Elem);
4750 VOID RTMPCheckDLSTimeOut(
4751 IN PRTMP_ADAPTER pAd);
4753 BOOLEAN RTMPRcvFrameDLSCheck(
4754 IN PRTMP_ADAPTER pAd,
4755 IN PHEADER_802_11 pHeader,
4757 IN PRT28XX_RXD_STRUC pRxD);
4759 INT RTMPCheckDLSFrame(
4760 IN PRTMP_ADAPTER pAd,
4763 VOID RTMPSendDLSTearDownFrame(
4764 IN PRTMP_ADAPTER pAd,
4767 NDIS_STATUS RTMPSendSTAKeyRequest(
4768 IN PRTMP_ADAPTER pAd,
4771 NDIS_STATUS RTMPSendSTAKeyHandShake(
4772 IN PRTMP_ADAPTER pAd,
4775 VOID DlsTimeoutAction(
4776 IN PVOID SystemSpecific1,
4777 IN PVOID FunctionContext,
4778 IN PVOID SystemSpecific2,
4779 IN PVOID SystemSpecific3);
4781 BOOLEAN MlmeDlsReqSanity(
4782 IN PRTMP_ADAPTER pAd,
4785 OUT PRT_802_11_DLS *pDLS,
4786 OUT PUSHORT pReason);
4788 INT Set_DlsEntryInfo_Display_Proc(
4789 IN PRTMP_ADAPTER pAd,
4792 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4793 IN PRTMP_ADAPTER pAd,
4795 IN UINT DlsEntryIdx);
4797 BOOLEAN MacTableDeleteDlsEntry(
4798 IN PRTMP_ADAPTER pAd,
4802 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4803 IN PRTMP_ADAPTER pAd,
4805 IN BOOLEAN bResetIdelCount);
4807 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4808 IN PRTMP_ADAPTER pAd,
4811 IN BOOLEAN bResetIdelCount);
4813 INT Set_DlsAddEntry_Proc(
4814 IN PRTMP_ADAPTER pAd,
4817 INT Set_DlsTearDownEntry_Proc(
4818 IN PRTMP_ADAPTER pAd,
4820 #endif // QOS_DLS_SUPPORT //
4821 #endif // CONFIG_STA_SUPPORT //
4823 #ifdef QOS_DLS_SUPPORT
4824 BOOLEAN PeerDlsReqSanity(
4825 IN PRTMP_ADAPTER pAd,
4830 OUT USHORT *pCapabilityInfo,
4831 OUT USHORT *pDlsTimeout,
4832 OUT UCHAR *pRatesLen,
4834 OUT UCHAR *pHtCapabilityLen,
4835 OUT HT_CAPABILITY_IE *pHtCapability);
4837 BOOLEAN PeerDlsRspSanity(
4838 IN PRTMP_ADAPTER pAd,
4843 OUT USHORT *pCapabilityInfo,
4844 OUT USHORT *pStatus,
4845 OUT UCHAR *pRatesLen,
4847 OUT UCHAR *pHtCapabilityLen,
4848 OUT HT_CAPABILITY_IE *pHtCapability);
4850 BOOLEAN PeerDlsTearDownSanity(
4851 IN PRTMP_ADAPTER pAd,
4856 OUT USHORT *pReason);
4857 #endif // QOS_DLS_SUPPORT //
4859 //========================================
4861 VOID SyncStateMachineInit(
4862 IN PRTMP_ADAPTER pAd,
4863 IN STATE_MACHINE *Sm,
4864 OUT STATE_MACHINE_FUNC Trans[]);
4867 IN PVOID SystemSpecific1,
4868 IN PVOID FunctionContext,
4869 IN PVOID SystemSpecific2,
4870 IN PVOID SystemSpecific3);
4873 IN PVOID SystemSpecific1,
4874 IN PVOID FunctionContext,
4875 IN PVOID SystemSpecific2,
4876 IN PVOID SystemSpecific3);
4878 VOID MlmeScanReqAction(
4879 IN PRTMP_ADAPTER pAd,
4880 IN MLME_QUEUE_ELEM *Elem);
4882 VOID InvalidStateWhenScan(
4883 IN PRTMP_ADAPTER pAd,
4884 IN MLME_QUEUE_ELEM *Elem);
4886 VOID InvalidStateWhenJoin(
4887 IN PRTMP_ADAPTER pAd,
4888 IN MLME_QUEUE_ELEM *Elem);
4890 VOID InvalidStateWhenStart(
4891 IN PRTMP_ADAPTER pAd,
4892 IN MLME_QUEUE_ELEM *Elem);
4895 IN PRTMP_ADAPTER pAd,
4896 IN MLME_QUEUE_ELEM *Elem);
4898 VOID EnqueueProbeRequest(
4899 IN PRTMP_ADAPTER pAd);
4901 BOOLEAN ScanRunning(
4902 IN PRTMP_ADAPTER pAd);
4903 //=========================================
4906 IN PRTMP_ADAPTER pAd,
4907 IN STATE_MACHINE *S,
4908 OUT STATE_MACHINE_FUNC Trans[]);
4910 VOID MlmeCntlMachinePerformAction(
4911 IN PRTMP_ADAPTER pAd,
4912 IN STATE_MACHINE *S,
4913 IN MLME_QUEUE_ELEM *Elem);
4916 IN PRTMP_ADAPTER pAd,
4917 IN MLME_QUEUE_ELEM *Elem);
4919 VOID CntlOidScanProc(
4920 IN PRTMP_ADAPTER pAd,
4921 IN MLME_QUEUE_ELEM *Elem);
4923 VOID CntlOidSsidProc(
4924 IN PRTMP_ADAPTER pAd,
4925 IN MLME_QUEUE_ELEM * Elem);
4927 VOID CntlOidRTBssidProc(
4928 IN PRTMP_ADAPTER pAd,
4929 IN MLME_QUEUE_ELEM * Elem);
4931 VOID CntlMlmeRoamingProc(
4932 IN PRTMP_ADAPTER pAd,
4933 IN MLME_QUEUE_ELEM * Elem);
4935 VOID CntlWaitDisassocProc(
4936 IN PRTMP_ADAPTER pAd,
4937 IN MLME_QUEUE_ELEM *Elem);
4939 VOID CntlWaitJoinProc(
4940 IN PRTMP_ADAPTER pAd,
4941 IN MLME_QUEUE_ELEM *Elem);
4943 VOID CntlWaitReassocProc(
4944 IN PRTMP_ADAPTER pAd,
4945 IN MLME_QUEUE_ELEM *Elem);
4947 VOID CntlWaitStartProc(
4948 IN PRTMP_ADAPTER pAd,
4949 IN MLME_QUEUE_ELEM *Elem);
4951 VOID CntlWaitAuthProc(
4952 IN PRTMP_ADAPTER pAd,
4953 IN MLME_QUEUE_ELEM *Elem);
4955 VOID CntlWaitAuthProc2(
4956 IN PRTMP_ADAPTER pAd,
4957 IN MLME_QUEUE_ELEM *Elem);
4959 VOID CntlWaitAssocProc(
4960 IN PRTMP_ADAPTER pAd,
4961 IN MLME_QUEUE_ELEM *Elem);
4963 #ifdef QOS_DLS_SUPPORT
4964 VOID CntlOidDLSSetupProc(
4965 IN PRTMP_ADAPTER pAd,
4966 IN MLME_QUEUE_ELEM *Elem);
4967 #endif // QOS_DLS_SUPPORT //
4970 IN PRTMP_ADAPTER pAd,
4974 IN PRTMP_ADAPTER pAd,
4975 IN BOOLEAN IsReqFromAP);
4977 VOID IterateOnBssTab(
4978 IN PRTMP_ADAPTER pAd);
4980 VOID IterateOnBssTab2(
4981 IN PRTMP_ADAPTER pAd);;
4984 IN PRTMP_ADAPTER pAd,
4985 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4989 IN PRTMP_ADAPTER pAd,
4990 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4992 IN USHORT CapabilityInfo,
4994 IN USHORT ListenIntv);
4997 IN PRTMP_ADAPTER pAd,
4998 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5004 VOID DisassocParmFill(
5005 IN PRTMP_ADAPTER pAd,
5006 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5011 IN PRTMP_ADAPTER pAd,
5012 IN OUT MLME_START_REQ_STRUCT *StartReq,
5017 IN PRTMP_ADAPTER pAd,
5018 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5023 IN PRTMP_ADAPTER pAd);
5025 VOID EnqueueBeaconFrame(
5026 IN PRTMP_ADAPTER pAd);
5028 VOID MlmeJoinReqAction(
5029 IN PRTMP_ADAPTER pAd,
5030 IN MLME_QUEUE_ELEM *Elem);
5032 VOID MlmeScanReqAction(
5033 IN PRTMP_ADAPTER pAd,
5034 IN MLME_QUEUE_ELEM *Elem);
5036 VOID MlmeStartReqAction(
5037 IN PRTMP_ADAPTER pAd,
5038 IN MLME_QUEUE_ELEM *Elem);
5040 VOID ScanTimeoutAction(
5041 IN PRTMP_ADAPTER pAd,
5042 IN MLME_QUEUE_ELEM *Elem);
5044 VOID BeaconTimeoutAtJoinAction(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5048 VOID PeerBeaconAtScanAction(
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5052 VOID PeerBeaconAtJoinAction(
5053 IN PRTMP_ADAPTER pAd,
5054 IN MLME_QUEUE_ELEM *Elem);
5057 IN PRTMP_ADAPTER pAd,
5058 IN MLME_QUEUE_ELEM *Elem);
5060 VOID PeerProbeReqAction(
5061 IN PRTMP_ADAPTER pAd,
5062 IN MLME_QUEUE_ELEM *Elem);
5064 VOID ScanNextChannel(
5065 IN PRTMP_ADAPTER pAd);
5067 ULONG MakeIbssBeacon(
5068 IN PRTMP_ADAPTER pAd);
5070 VOID CCXAdjacentAPReport(
5071 IN PRTMP_ADAPTER pAd);
5073 BOOLEAN MlmeScanReqSanity(
5074 IN PRTMP_ADAPTER pAd,
5080 OUT UCHAR *ScanType);
5082 BOOLEAN PeerBeaconAndProbeRspSanity(
5083 IN PRTMP_ADAPTER pAd,
5086 IN UCHAR MsgChannel,
5090 OUT UCHAR *pSsidLen,
5091 OUT UCHAR *pBssType,
5092 OUT USHORT *pBeaconPeriod,
5093 OUT UCHAR *pChannel,
5094 OUT UCHAR *pNewChannel,
5095 OUT LARGE_INTEGER *pTimestamp,
5096 OUT CF_PARM *pCfParm,
5097 OUT USHORT *pAtimWin,
5098 OUT USHORT *pCapabilityInfo,
5100 OUT UCHAR *pDtimCount,
5101 OUT UCHAR *pDtimPeriod,
5102 OUT UCHAR *pBcastFlag,
5103 OUT UCHAR *pMessageToMe,
5104 OUT UCHAR SupRate[],
5105 OUT UCHAR *pSupRateLen,
5106 OUT UCHAR ExtRate[],
5107 OUT UCHAR *pExtRateLen,
5108 OUT UCHAR *pCkipFlag,
5109 OUT UCHAR *pAironetCellPowerLimit,
5110 OUT PEDCA_PARM pEdcaParm,
5111 OUT PQBSS_LOAD_PARM pQbssLoad,
5112 OUT PQOS_CAPABILITY_PARM pQosCapability,
5113 OUT ULONG *pRalinkIe,
5114 OUT UCHAR *pHtCapabilityLen,
5115 #ifdef CONFIG_STA_SUPPORT
5116 OUT UCHAR *pPreNHtCapabilityLen,
5117 #endif // CONFIG_STA_SUPPORT //
5118 OUT HT_CAPABILITY_IE *pHtCapability,
5119 OUT UCHAR *AddHtInfoLen,
5120 OUT ADD_HT_INFO_IE *AddHtInfo,
5121 OUT UCHAR *NewExtChannel,
5122 OUT USHORT *LengthVIE,
5123 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5125 BOOLEAN PeerAddBAReqActionSanity(
5126 IN PRTMP_ADAPTER pAd,
5131 BOOLEAN PeerAddBARspActionSanity(
5132 IN PRTMP_ADAPTER pAd,
5136 BOOLEAN PeerDelBAActionSanity(
5137 IN PRTMP_ADAPTER pAd,
5142 BOOLEAN MlmeAssocReqSanity(
5143 IN PRTMP_ADAPTER pAd,
5147 OUT USHORT *CapabilityInfo,
5149 OUT USHORT *ListenIntv);
5151 BOOLEAN MlmeAuthReqSanity(
5152 IN PRTMP_ADAPTER pAd,
5159 BOOLEAN MlmeStartReqSanity(
5160 IN PRTMP_ADAPTER pAd,
5164 OUT UCHAR *Ssidlen);
5166 BOOLEAN PeerAuthSanity(
5167 IN PRTMP_ADAPTER pAd,
5174 OUT CHAR ChlgText[]);
5176 BOOLEAN PeerAssocRspSanity(
5177 IN PRTMP_ADAPTER pAd,
5181 OUT USHORT *pCapabilityInfo,
5182 OUT USHORT *pStatus,
5184 OUT UCHAR SupRate[],
5185 OUT UCHAR *pSupRateLen,
5186 OUT UCHAR ExtRate[],
5187 OUT UCHAR *pExtRateLen,
5188 OUT HT_CAPABILITY_IE *pHtCapability,
5189 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5190 OUT UCHAR *pHtCapabilityLen,
5191 OUT UCHAR *pAddHtInfoLen,
5192 OUT UCHAR *pNewExtChannelOffset,
5193 OUT PEDCA_PARM pEdcaParm,
5194 OUT UCHAR *pCkipFlag);
5196 BOOLEAN PeerDisassocSanity(
5197 IN PRTMP_ADAPTER pAd,
5201 OUT USHORT *Reason);
5203 BOOLEAN PeerWpaMessageSanity(
5204 IN PRTMP_ADAPTER pAd,
5205 IN PEAPOL_PACKET pMsg,
5208 IN MAC_TABLE_ENTRY *pEntry);
5210 BOOLEAN PeerDeauthSanity(
5211 IN PRTMP_ADAPTER pAd,
5215 OUT USHORT *Reason);
5217 BOOLEAN PeerProbeReqSanity(
5218 IN PRTMP_ADAPTER pAd,
5223 OUT UCHAR *pSsidLen);
5229 OUT UCHAR *BcastFlag,
5230 OUT UCHAR *DtimCount,
5231 OUT UCHAR *DtimPeriod,
5232 OUT UCHAR *MessageToMe);
5234 UCHAR ChannelSanity(
5235 IN PRTMP_ADAPTER pAd,
5238 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5239 IN PBSS_ENTRY pBss);
5241 BOOLEAN MlmeDelBAReqSanity(
5242 IN PRTMP_ADAPTER pAd,
5246 BOOLEAN MlmeAddBAReqSanity(
5247 IN PRTMP_ADAPTER pAd,
5252 ULONG MakeOutgoingFrame(
5254 OUT ULONG *Length, ...);
5257 IN PRTMP_ADAPTER pAd,
5261 IN PRTMP_ADAPTER pAd);
5263 VOID AsicUpdateAutoFallBackTable(
5264 IN PRTMP_ADAPTER pAd,
5267 VOID MlmePeriodicExec(
5268 IN PVOID SystemSpecific1,
5269 IN PVOID FunctionContext,
5270 IN PVOID SystemSpecific2,
5271 IN PVOID SystemSpecific3);
5274 IN PVOID SystemSpecific1,
5275 IN PVOID FunctionContext,
5276 IN PVOID SystemSpecific2,
5277 IN PVOID SystemSpecific3);
5280 IN PVOID SystemSpecific1,
5281 IN PVOID FunctionContext,
5282 IN PVOID SystemSpecific2,
5283 IN PVOID SystemSpecific3);
5285 VOID STAMlmePeriodicExec(
5289 IN PRTMP_ADAPTER pAd);
5291 VOID MlmeAutoReconnectLastSSID(
5292 IN PRTMP_ADAPTER pAd);
5294 BOOLEAN MlmeValidateSSID(
5298 VOID MlmeCheckForRoaming(
5299 IN PRTMP_ADAPTER pAd,
5302 VOID MlmeCheckForFastRoaming(
5303 IN PRTMP_ADAPTER pAd,
5306 VOID MlmeDynamicTxRateSwitching(
5307 IN PRTMP_ADAPTER pAd);
5310 IN PRTMP_ADAPTER pAd,
5311 IN PMAC_TABLE_ENTRY pEntry,
5312 IN PRTMP_TX_RATE_SWITCH pTxRate);
5314 VOID MlmeSelectTxRateTable(
5315 IN PRTMP_ADAPTER pAd,
5316 IN PMAC_TABLE_ENTRY pEntry,
5318 IN PUCHAR pTableSize,
5319 IN PUCHAR pInitTxRateIdx);
5321 VOID MlmeCalculateChannelQuality(
5322 IN PRTMP_ADAPTER pAd,
5325 VOID MlmeCheckPsmChange(
5326 IN PRTMP_ADAPTER pAd,
5330 IN PRTMP_ADAPTER pAd,
5333 VOID MlmeSetTxPreamble(
5334 IN PRTMP_ADAPTER pAd,
5335 IN USHORT TxPreamble);
5337 VOID UpdateBasicRateBitmap(
5338 IN PRTMP_ADAPTER pAd);
5340 VOID MlmeUpdateTxRates(
5341 IN PRTMP_ADAPTER pAd,
5345 #ifdef DOT11_N_SUPPORT
5346 VOID MlmeUpdateHtTxRates(
5347 IN PRTMP_ADAPTER pAd,
5349 #endif // DOT11_N_SUPPORT //
5351 VOID RTMPCheckRates(
5352 IN PRTMP_ADAPTER pAd,
5353 IN OUT UCHAR SupRate[],
5354 IN OUT UCHAR *SupRateLen);
5356 #ifdef CONFIG_STA_SUPPORT
5357 BOOLEAN RTMPCheckChannel(
5358 IN PRTMP_ADAPTER pAd,
5359 IN UCHAR CentralChannel,
5361 #endif // CONFIG_STA_SUPPORT //
5363 BOOLEAN RTMPCheckHt(
5364 IN PRTMP_ADAPTER pAd,
5366 IN OUT HT_CAPABILITY_IE *pHtCapability,
5367 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5369 VOID StaQuickResponeForRateUpExec(
5370 IN PVOID SystemSpecific1,
5371 IN PVOID FunctionContext,
5372 IN PVOID SystemSpecific2,
5373 IN PVOID SystemSpecific3);
5375 VOID AsicBbpTuning1(
5376 IN PRTMP_ADAPTER pAd);
5378 VOID AsicBbpTuning2(
5379 IN PRTMP_ADAPTER pAd);
5381 VOID RTMPUpdateMlmeRate(
5382 IN PRTMP_ADAPTER pAd);
5385 IN PRTMP_ADAPTER pAd,
5391 IN PRTMP_ADAPTER pAd,
5394 VOID AsicEvaluateRxAnt(
5395 IN PRTMP_ADAPTER pAd);
5397 VOID AsicRxAntEvalTimeout(
5398 IN PVOID SystemSpecific1,
5399 IN PVOID FunctionContext,
5400 IN PVOID SystemSpecific2,
5401 IN PVOID SystemSpecific3);
5403 VOID APSDPeriodicExec(
5404 IN PVOID SystemSpecific1,
5405 IN PVOID FunctionContext,
5406 IN PVOID SystemSpecific2,
5407 IN PVOID SystemSpecific3);
5409 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5410 IN PRTMP_ADAPTER pAd,
5411 IN PMAC_TABLE_ENTRY pEntry);
5413 UCHAR RTMPStaFixedTxMode(
5414 IN PRTMP_ADAPTER pAd,
5415 IN PMAC_TABLE_ENTRY pEntry);
5417 VOID RTMPUpdateLegacyTxSetting(
5418 UCHAR fixed_tx_mode,
5419 PMAC_TABLE_ENTRY pEntry);
5421 BOOLEAN RTMPAutoRateSwitchCheck(
5422 IN PRTMP_ADAPTER pAd);
5424 NDIS_STATUS MlmeInit(
5425 IN PRTMP_ADAPTER pAd);
5428 IN PRTMP_ADAPTER pAd);
5431 IN PRTMP_ADAPTER pAd);
5433 VOID MlmeResetRalinkCounters(
5434 IN PRTMP_ADAPTER pAd);
5436 VOID BuildChannelList(
5437 IN PRTMP_ADAPTER pAd);
5440 IN PRTMP_ADAPTER pAd);
5443 IN PRTMP_ADAPTER pAd,
5446 VOID ChangeToCellPowerLimit(
5447 IN PRTMP_ADAPTER pAd,
5448 IN UCHAR AironetCellPowerLimit);
5451 IN PRTMP_ADAPTER pAd,
5455 IN PRTMP_ADAPTER pAd,
5459 IN PRTMP_ADAPTER pAd);
5462 IN PRTMP_ADAPTER pAd,
5467 IN PRTMP_ADAPTER pAd);
5470 IN PRTMP_ADAPTER pAd);
5473 IN PRTMP_ADAPTER pAd);
5475 USHORT RTMP_EEPROM_READ16(
5476 IN PRTMP_ADAPTER pAd,
5479 VOID RTMP_EEPROM_WRITE16(
5480 IN PRTMP_ADAPTER pAd,
5485 // Prototypes of function definition in rtmp_tkip.c
5487 VOID RTMPInitTkipEngine(
5488 IN PRTMP_ADAPTER pAd,
5497 VOID RTMPInitMICEngine(
5498 IN PRTMP_ADAPTER pAd,
5502 IN UCHAR UserPriority,
5505 BOOLEAN RTMPTkipCompareMICValue(
5506 IN PRTMP_ADAPTER pAd,
5511 IN UCHAR UserPriority,
5514 VOID RTMPCalculateMICValue(
5515 IN PRTMP_ADAPTER pAd,
5516 IN PNDIS_PACKET pPacket,
5518 IN PCIPHER_KEY pKey,
5521 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5522 IN PRTMP_ADAPTER pAd,
5530 VOID RTMPTkipAppendByte(
5531 IN PTKIP_KEY_INFO pTkip,
5534 VOID RTMPTkipAppend(
5535 IN PTKIP_KEY_INFO pTkip,
5539 VOID RTMPTkipGetMIC(
5540 IN PTKIP_KEY_INFO pTkip);
5542 BOOLEAN RTMPSoftDecryptTKIP(
5543 IN PRTMP_ADAPTER pAd,
5545 IN ULONG DataByteCnt,
5546 IN UCHAR UserPriority,
5547 IN PCIPHER_KEY pWpaKey);
5549 BOOLEAN RTMPSoftDecryptAES(
5550 IN PRTMP_ADAPTER pAd,
5552 IN ULONG DataByteCnt,
5553 IN PCIPHER_KEY pWpaKey);
5556 // Prototypes of function definition in cmm_info.c
5558 NDIS_STATUS RTMPWPARemoveKeyProc(
5559 IN PRTMP_ADAPTER pAd,
5562 VOID RTMPWPARemoveAllKeys(
5563 IN PRTMP_ADAPTER pAd);
5565 BOOLEAN RTMPCheckStrPrintAble(
5569 VOID RTMPSetPhyMode(
5570 IN PRTMP_ADAPTER pAd,
5573 VOID RTMPUpdateHTIE(
5574 IN RT_HT_CAPABILITY *pRtHt,
5576 OUT HT_CAPABILITY_IE *pHtCapability,
5577 OUT ADD_HT_INFO_IE *pAddHtInfo);
5579 VOID RTMPAddWcidAttributeEntry(
5580 IN PRTMP_ADAPTER pAd,
5584 IN MAC_TABLE_ENTRY *pEntry);
5586 CHAR *GetEncryptType(
5592 VOID RTMPIoctlGetSiteSurvey(
5593 IN PRTMP_ADAPTER pAdapter,
5594 IN struct iwreq *wrq);
5596 VOID RTMPIoctlGetMacTable(
5597 IN PRTMP_ADAPTER pAd,
5598 IN struct iwreq *wrq);
5600 VOID RTMPIndicateWPA2Status(
5601 IN PRTMP_ADAPTER pAdapter);
5603 VOID RTMPOPModeSwitching(
5604 IN PRTMP_ADAPTER pAd);
5606 #ifdef CONFIG_STA_SUPPORT
5607 VOID RTMPAddBSSIDCipher(
5608 IN PRTMP_ADAPTER pAd,
5610 IN PNDIS_802_11_KEY pKey,
5611 IN UCHAR CipherAlg);
5612 #endif // CONFIG_STA_SUPPORT //
5614 #ifdef DOT11_N_SUPPORT
5616 IN PRTMP_ADAPTER pAd,
5617 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5619 VOID RTMPSetIndividualHT(
5620 IN PRTMP_ADAPTER pAd,
5622 #endif // DOT11_N_SUPPORT //
5624 VOID RTMPSendWirelessEvent(
5625 IN PRTMP_ADAPTER pAd,
5626 IN USHORT Event_flag,
5631 VOID NICUpdateCntlCounters(
5632 IN PRTMP_ADAPTER pAd,
5633 IN PHEADER_802_11 pHeader,
5635 IN PRXWI_STRUC pRxWI);
5637 // prototype in wpa.c
5639 BOOLEAN WpaMsgTypeSubst(
5643 VOID WpaPskStateMachineInit(
5644 IN PRTMP_ADAPTER pAd,
5645 IN STATE_MACHINE *S,
5646 OUT STATE_MACHINE_FUNC Trans[]);
5648 VOID WpaEAPOLKeyAction(
5649 IN PRTMP_ADAPTER pAd,
5650 IN MLME_QUEUE_ELEM *Elem);
5652 VOID WpaPairMsg1Action(
5653 IN PRTMP_ADAPTER pAd,
5654 IN MLME_QUEUE_ELEM *Elem);
5656 VOID WpaPairMsg3Action(
5657 IN PRTMP_ADAPTER pAd,
5658 IN MLME_QUEUE_ELEM *Elem);
5660 VOID WpaGroupMsg1Action(
5661 IN PRTMP_ADAPTER pAd,
5662 IN MLME_QUEUE_ELEM *Elem);
5664 VOID WpaMacHeaderInit(
5665 IN PRTMP_ADAPTER pAd,
5666 IN OUT PHEADER_802_11 pHdr80211,
5670 VOID Wpa2PairMsg1Action(
5671 IN PRTMP_ADAPTER pAd,
5672 IN MLME_QUEUE_ELEM *Elem);
5674 VOID Wpa2PairMsg3Action(
5675 IN PRTMP_ADAPTER pAd,
5676 IN MLME_QUEUE_ELEM *Elem);
5678 BOOLEAN ParseKeyData(
5679 IN PRTMP_ADAPTER pAd,
5681 IN UCHAR KeyDataLen,
5682 IN UCHAR bPairewise);
5684 VOID RTMPToWirelessSta(
5685 IN PRTMP_ADAPTER pAd,
5686 IN PUCHAR pHeader802_3,
5690 IN BOOLEAN is4wayFrame);
5718 IN PRTMP_ADAPTER pAd,
5728 IN PRTMP_ADAPTER pAd,
5733 // prototype in aironet.c
5735 VOID AironetStateMachineInit(
5736 IN PRTMP_ADAPTER pAd,
5737 IN STATE_MACHINE *S,
5738 OUT STATE_MACHINE_FUNC Trans[]);
5740 VOID AironetMsgAction(
5741 IN PRTMP_ADAPTER pAd,
5742 IN MLME_QUEUE_ELEM *Elem);
5744 VOID AironetRequestAction(
5745 IN PRTMP_ADAPTER pAd,
5746 IN MLME_QUEUE_ELEM *Elem);
5748 VOID ChannelLoadRequestAction(
5749 IN PRTMP_ADAPTER pAd,
5752 VOID NoiseHistRequestAction(
5753 IN PRTMP_ADAPTER pAd,
5756 VOID BeaconRequestAction(
5757 IN PRTMP_ADAPTER pAd,
5760 VOID AironetReportAction(
5761 IN PRTMP_ADAPTER pAd,
5762 IN MLME_QUEUE_ELEM *Elem);
5764 VOID ChannelLoadReportAction(
5765 IN PRTMP_ADAPTER pAd,
5768 VOID NoiseHistReportAction(
5769 IN PRTMP_ADAPTER pAd,
5772 VOID AironetFinalReportAction(
5773 IN PRTMP_ADAPTER pAd);
5775 VOID BeaconReportAction(
5776 IN PRTMP_ADAPTER pAd,
5779 VOID AironetAddBeaconReport(
5780 IN PRTMP_ADAPTER pAd,
5782 IN PMLME_QUEUE_ELEM pElem);
5784 VOID AironetCreateBeaconReportFromBssTable(
5785 IN PRTMP_ADAPTER pAd);
5787 VOID DBGPRINT_TX_RING(
5788 IN PRTMP_ADAPTER pAd,
5791 VOID DBGPRINT_RX_RING(
5792 IN PRTMP_ADAPTER pAd);
5795 IN PRTMP_ADAPTER pAd,
5797 IN UCHAR RssiNumber);
5800 #ifdef DOT11N_DRAFT3
5801 VOID BuildEffectedChannelList(
5802 IN PRTMP_ADAPTER pAd);
5803 #endif // DOT11N_DRAFT3 //
5806 VOID APAsicEvaluateRxAnt(
5807 IN PRTMP_ADAPTER pAd);
5810 VOID APAsicRxAntEvalTimeout(
5811 IN PRTMP_ADAPTER pAd);
5814 // function prototype in cmm_wpa.c
5816 BOOLEAN RTMPCheckWPAframe(
5817 IN PRTMP_ADAPTER pAd,
5818 IN PMAC_TABLE_ENTRY pEntry,
5820 IN ULONG DataByteCount,
5821 IN UCHAR FromWhichBSSID);
5823 VOID AES_GTK_KEY_UNWRAP(
5825 OUT UCHAR *plaintext,
5827 IN UCHAR *ciphertext);
5829 BOOLEAN RTMPCheckRSNIE(
5830 IN PRTMP_ADAPTER pAd,
5833 IN MAC_TABLE_ENTRY *pEntry,
5836 BOOLEAN RTMPParseEapolKeyData(
5837 IN PRTMP_ADAPTER pAd,
5839 IN UCHAR KeyDataLen,
5840 IN UCHAR GroupKeyIndex,
5843 IN MAC_TABLE_ENTRY *pEntry);
5845 VOID ConstructEapolMsg(
5846 IN PRTMP_ADAPTER pAd,
5847 IN UCHAR PeerAuthMode,
5848 IN UCHAR PeerWepStatus,
5849 IN UCHAR MyGroupKeyWepStatus,
5851 IN UCHAR DefaultKeyIdx,
5852 IN UCHAR *ReplayCounter,
5859 OUT PEAPOL_PACKET pMsg);
5862 IN PRTMP_ADAPTER pAd,
5863 IN UCHAR PeerWepStatus,
5865 OUT PEAPOL_PACKET pMsg);
5867 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5868 IN PRTMP_ADAPTER pAd,
5870 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5871 IN PCIPHER_KEY pShard_key);
5873 VOID ConstructEapolKeyData(
5874 IN PRTMP_ADAPTER pAd,
5875 IN UCHAR PeerAuthMode,
5876 IN UCHAR PeerWepStatus,
5877 IN UCHAR GroupKeyWepStatus,
5879 IN UCHAR DefaultKeyIdx,
5880 IN BOOLEAN bWPA2Capable,
5885 OUT PEAPOL_PACKET pMsg);
5888 IN PRTMP_ADAPTER pAd,
5894 // function prototype in ap_wpa.c
5897 BOOLEAN APWpaMsgTypeSubst(
5901 MAC_TABLE_ENTRY *PACInquiry(
5902 IN PRTMP_ADAPTER pAd,
5905 BOOLEAN RTMPCheckMcast(
5906 IN PRTMP_ADAPTER pAd,
5907 IN PEID_STRUCT eid_ptr,
5908 IN MAC_TABLE_ENTRY *pEntry);
5910 BOOLEAN RTMPCheckUcast(
5911 IN PRTMP_ADAPTER pAd,
5912 IN PEID_STRUCT eid_ptr,
5913 IN MAC_TABLE_ENTRY *pEntry);
5915 BOOLEAN RTMPCheckAUTH(
5916 IN PRTMP_ADAPTER pAd,
5917 IN PEID_STRUCT eid_ptr,
5918 IN MAC_TABLE_ENTRY *pEntry);
5920 VOID WPAStart4WayHS(
5921 IN PRTMP_ADAPTER pAd,
5922 IN MAC_TABLE_ENTRY *pEntry,
5923 IN ULONG TimeInterval);
5925 VOID WPAStart2WayGroupHS(
5926 IN PRTMP_ADAPTER pAd,
5927 IN MAC_TABLE_ENTRY *pEntry);
5929 VOID APWpaEAPPacketAction(
5930 IN PRTMP_ADAPTER pAd,
5931 IN MLME_QUEUE_ELEM *Elem);
5933 VOID APWpaEAPOLStartAction(
5934 IN PRTMP_ADAPTER pAd,
5935 IN MLME_QUEUE_ELEM *Elem);
5937 VOID APWpaEAPOLLogoffAction(
5938 IN PRTMP_ADAPTER pAd,
5939 IN MLME_QUEUE_ELEM *Elem);
5941 VOID APWpaEAPOLKeyAction(
5942 IN PRTMP_ADAPTER pAd,
5943 IN MLME_QUEUE_ELEM *Elem);
5945 VOID APWpaEAPOLASFAlertAction(
5946 IN PRTMP_ADAPTER pAd,
5947 IN MLME_QUEUE_ELEM *Elem);
5949 VOID HandleCounterMeasure(
5950 IN PRTMP_ADAPTER pAd,
5951 IN MAC_TABLE_ENTRY *pEntry);
5953 VOID PeerPairMsg2Action(
5954 IN PRTMP_ADAPTER pAd,
5955 IN MAC_TABLE_ENTRY *pEntry,
5956 IN MLME_QUEUE_ELEM *Elem);
5958 VOID PeerPairMsg4Action(
5959 IN PRTMP_ADAPTER pAd,
5960 IN MAC_TABLE_ENTRY *pEntry,
5961 IN MLME_QUEUE_ELEM *Elem);
5964 IN PVOID SystemSpecific1,
5965 IN PVOID FunctionContext,
5966 IN PVOID SystemSpecific2,
5967 IN PVOID SystemSpecific3);
5970 IN PVOID SystemSpecific1,
5971 IN PVOID FunctionContext,
5972 IN PVOID SystemSpecific2,
5973 IN PVOID SystemSpecific3);
5975 VOID EnqueueStartForPSKExec(
5976 IN PVOID SystemSpecific1,
5977 IN PVOID FunctionContext,
5978 IN PVOID SystemSpecific2,
5979 IN PVOID SystemSpecific3);
5981 VOID RTMPHandleSTAKey(
5982 IN PRTMP_ADAPTER pAdapter,
5983 IN MAC_TABLE_ENTRY *pEntry,
5984 IN MLME_QUEUE_ELEM *Elem);
5986 VOID PeerGroupMsg2Action(
5987 IN PRTMP_ADAPTER pAd,
5988 IN PMAC_TABLE_ENTRY pEntry,
5992 VOID PairDisAssocAction(
5993 IN PRTMP_ADAPTER pAd,
5994 IN PMAC_TABLE_ENTRY pEntry,
5997 VOID MlmeDeAuthAction(
5998 IN PRTMP_ADAPTER pAd,
5999 IN PMAC_TABLE_ENTRY pEntry,
6002 VOID GREKEYPeriodicExec(
6003 IN PVOID SystemSpecific1,
6004 IN PVOID FunctionContext,
6005 IN PVOID SystemSpecific2,
6006 IN PVOID SystemSpecific3);
6028 IN PRTMP_ADAPTER pAd,
6031 VOID AES_GTK_KEY_WRAP(
6033 IN UCHAR *plaintext,
6035 OUT UCHAR *ciphertext);
6038 IN PRTMP_ADAPTER pAdapter,
6042 VOID APToWirelessSta(
6043 IN PRTMP_ADAPTER pAd,
6044 IN MAC_TABLE_ENTRY *pEntry,
6045 IN PUCHAR pHeader802_3,
6049 IN BOOLEAN bClearFrame);
6051 VOID RTMPAddPMKIDCache(
6052 IN PRTMP_ADAPTER pAd,
6058 INT RTMPSearchPMKIDCache(
6059 IN PRTMP_ADAPTER pAd,
6063 VOID RTMPDeletePMKIDCache(
6064 IN PRTMP_ADAPTER pAd,
6068 VOID RTMPMaintainPMKIDCache(
6069 IN PRTMP_ADAPTER pAd);
6071 VOID RTMPSendTriggerFrame(
6072 IN PRTMP_ADAPTER pAd,
6076 IN BOOLEAN bQosNull);
6079 VOID RTMPFilterCalibration(
6080 IN PRTMP_ADAPTER pAd);
6084 //typedef void (*TIMER_FUNCTION)(unsigned long);
6088 VOID RTMP_SetPeriodicTimer(
6089 IN NDIS_MINIPORT_TIMER *pTimer,
6090 IN unsigned long timeout);
6092 VOID RTMP_OS_Init_Timer(
6093 IN PRTMP_ADAPTER pAd,
6094 IN NDIS_MINIPORT_TIMER *pTimer,
6095 IN TIMER_FUNCTION function,
6098 VOID RTMP_OS_Add_Timer(
6099 IN NDIS_MINIPORT_TIMER *pTimer,
6100 IN unsigned long timeout);
6102 VOID RTMP_OS_Mod_Timer(
6103 IN NDIS_MINIPORT_TIMER *pTimer,
6104 IN unsigned long timeout);
6107 VOID RTMP_OS_Del_Timer(
6108 IN NDIS_MINIPORT_TIMER *pTimer,
6109 OUT BOOLEAN *pCancelled);
6112 VOID RTMP_OS_Release_Packet(
6113 IN PRTMP_ADAPTER pAd,
6114 IN PQUEUE_ENTRY pEntry);
6119 NDIS_STATUS os_alloc_mem(
6120 IN PRTMP_ADAPTER pAd,
6124 NDIS_STATUS os_free_mem(
6125 IN PRTMP_ADAPTER pAd,
6129 void RTMP_AllocateSharedMemory(
6130 IN PRTMP_ADAPTER pAd,
6133 OUT PVOID *VirtualAddress,
6134 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6136 VOID RTMPFreeTxRxRingMemory(
6137 IN PRTMP_ADAPTER pAd);
6139 NDIS_STATUS AdapterBlockAllocateMemory(
6143 void RTMP_AllocateTxDescMemory(
6144 IN PRTMP_ADAPTER pAd,
6148 OUT PVOID *VirtualAddress,
6149 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6151 void RTMP_AllocateFirstTxBuffer(
6152 IN PRTMP_ADAPTER pAd,
6156 OUT PVOID *VirtualAddress,
6157 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6159 void RTMP_AllocateMgmtDescMemory(
6160 IN PRTMP_ADAPTER pAd,
6163 OUT PVOID *VirtualAddress,
6164 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6166 void RTMP_AllocateRxDescMemory(
6167 IN PRTMP_ADAPTER pAd,
6170 OUT PVOID *VirtualAddress,
6171 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6173 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6174 IN PRTMP_ADAPTER pAd,
6177 OUT PVOID *VirtualAddress,
6178 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6180 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6181 IN PRTMP_ADAPTER pAd,
6184 OUT PVOID *VirtualAddress);
6186 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6187 IN PRTMP_ADAPTER pAd,
6190 void RTMP_QueryPacketInfo(
6191 IN PNDIS_PACKET pPacket,
6192 OUT PACKET_INFO *pPacketInfo,
6193 OUT PUCHAR *pSrcBufVA,
6194 OUT UINT *pSrcBufLen);
6196 void RTMP_QueryNextPacketInfo(
6197 IN PNDIS_PACKET *ppPacket,
6198 OUT PACKET_INFO *pPacketInfo,
6199 OUT PUCHAR *pSrcBufVA,
6200 OUT UINT *pSrcBufLen);
6203 BOOLEAN RTMP_FillTxBlkInfo(
6204 IN RTMP_ADAPTER *pAd,
6208 PRTMP_SCATTER_GATHER_LIST
6209 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6212 void announce_802_3_packet(
6213 IN PRTMP_ADAPTER pAd,
6214 IN PNDIS_PACKET pPacket);
6217 UINT BA_Reorder_AMSDU_Annnounce(
6218 IN PRTMP_ADAPTER pAd,
6219 IN PNDIS_PACKET pPacket);
6222 UINT Handle_AMSDU_Packet(
6223 IN PRTMP_ADAPTER pAd,
6226 IN UCHAR FromWhichBSSID);
6229 void convert_802_11_to_802_3_packet(
6230 IN PRTMP_ADAPTER pAd,
6231 IN PNDIS_PACKET pPacket,
6235 IN UCHAR FromWhichBSSID);
6238 PNET_DEV get_netdev_from_bssid(
6239 IN PRTMP_ADAPTER pAd,
6240 IN UCHAR FromWhichBSSID);
6243 PNDIS_PACKET duplicate_pkt(
6244 IN PRTMP_ADAPTER pAd,
6245 IN PUCHAR pHeader802_3,
6249 IN UCHAR FromWhichBSSID);
6252 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6253 IN PRTMP_ADAPTER pAd,
6254 IN PNDIS_PACKET pOldPkt);
6256 PNDIS_PACKET duplicate_pkt_with_VLAN(
6257 IN PRTMP_ADAPTER pAd,
6258 IN PUCHAR pHeader802_3,
6262 IN UCHAR FromWhichBSSID);
6264 PNDIS_PACKET duplicate_pkt_with_WPI(
6265 IN PRTMP_ADAPTER pAd,
6266 IN PNDIS_PACKET pPacket,
6267 IN UINT32 ext_head_len,
6268 IN UINT32 ext_tail_len);
6270 UCHAR VLAN_8023_Header_Copy(
6271 IN PRTMP_ADAPTER pAd,
6272 IN PUCHAR pHeader802_3,
6275 IN UCHAR FromWhichBSSID);
6277 #ifdef DOT11_N_SUPPORT
6278 void ba_flush_reordering_timeout_mpdus(
6279 IN PRTMP_ADAPTER pAd,
6280 IN PBA_REC_ENTRY pBAEntry,
6284 VOID BAOriSessionSetUp(
6285 IN PRTMP_ADAPTER pAd,
6286 IN MAC_TABLE_ENTRY *pEntry,
6290 IN BOOLEAN isForced);
6292 VOID BASessionTearDownALL(
6293 IN OUT PRTMP_ADAPTER pAd,
6295 #endif // DOT11_N_SUPPORT //
6297 BOOLEAN OS_Need_Clone_Packet(void);
6300 VOID build_tx_packet(
6301 IN PRTMP_ADAPTER pAd,
6302 IN PNDIS_PACKET pPacket,
6307 VOID BAOriSessionTearDown(
6308 IN OUT PRTMP_ADAPTER pAd,
6311 IN BOOLEAN bPassive,
6312 IN BOOLEAN bForceSend);
6314 VOID BARecSessionTearDown(
6315 IN OUT PRTMP_ADAPTER pAd,
6318 IN BOOLEAN bPassive);
6320 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6321 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6323 ULONG AutoChBssInsertEntry(
6324 IN PRTMP_ADAPTER pAd,
6331 void AutoChBssTableInit(
6332 IN PRTMP_ADAPTER pAd);
6334 void ChannelInfoInit(
6335 IN PRTMP_ADAPTER pAd);
6337 void AutoChBssTableDestroy(
6338 IN PRTMP_ADAPTER pAd);
6340 void ChannelInfoDestroy(
6341 IN PRTMP_ADAPTER pAd);
6343 UCHAR New_ApAutoSelectChannel(
6344 IN PRTMP_ADAPTER pAd);
6346 BOOLEAN rtstrmactohex(
6350 BOOLEAN rtstrcasecmp(
6354 char *rtstrstruncasecmp(
6360 IN const char * s2);
6364 IN const char * ct);
6368 unsigned int *addr);
6370 ////////// common ioctl functions //////////
6371 INT Set_DriverVersion_Proc(
6372 IN PRTMP_ADAPTER pAd,
6375 INT Set_CountryRegion_Proc(
6376 IN PRTMP_ADAPTER pAd,
6379 INT Set_CountryRegionABand_Proc(
6380 IN PRTMP_ADAPTER pAd,
6383 INT Set_WirelessMode_Proc(
6384 IN PRTMP_ADAPTER pAd,
6387 INT Set_Channel_Proc(
6388 IN PRTMP_ADAPTER pAd,
6391 INT Set_ShortSlot_Proc(
6392 IN PRTMP_ADAPTER pAd,
6395 INT Set_TxPower_Proc(
6396 IN PRTMP_ADAPTER pAd,
6399 INT Set_BGProtection_Proc(
6400 IN PRTMP_ADAPTER pAd,
6403 INT Set_TxPreamble_Proc(
6404 IN PRTMP_ADAPTER pAd,
6407 INT Set_RTSThreshold_Proc(
6408 IN PRTMP_ADAPTER pAd,
6411 INT Set_FragThreshold_Proc(
6412 IN PRTMP_ADAPTER pAd,
6415 INT Set_TxBurst_Proc(
6416 IN PRTMP_ADAPTER pAd,
6419 #ifdef AGGREGATION_SUPPORT
6420 INT Set_PktAggregate_Proc(
6421 IN PRTMP_ADAPTER pAd,
6425 INT Set_IEEE80211H_Proc(
6426 IN PRTMP_ADAPTER pAd,
6431 IN PRTMP_ADAPTER pAd,
6435 INT Show_DescInfo_Proc(
6436 IN PRTMP_ADAPTER pAd,
6439 INT Set_ResetStatCounter_Proc(
6440 IN PRTMP_ADAPTER pAd,
6443 #ifdef DOT11_N_SUPPORT
6444 INT Set_BASetup_Proc(
6445 IN PRTMP_ADAPTER pAd,
6448 INT Set_BADecline_Proc(
6449 IN PRTMP_ADAPTER pAd,
6452 INT Set_BAOriTearDown_Proc(
6453 IN PRTMP_ADAPTER pAd,
6456 INT Set_BARecTearDown_Proc(
6457 IN PRTMP_ADAPTER pAd,
6461 IN PRTMP_ADAPTER pAd,
6465 IN PRTMP_ADAPTER pAd,
6469 IN PRTMP_ADAPTER pAd,
6472 INT Set_HtOpMode_Proc(
6473 IN PRTMP_ADAPTER pAd,
6476 INT Set_HtStbc_Proc(
6477 IN PRTMP_ADAPTER pAd,
6481 IN PRTMP_ADAPTER pAd,
6484 INT Set_HtExtcha_Proc(
6485 IN PRTMP_ADAPTER pAd,
6488 INT Set_HtMpduDensity_Proc(
6489 IN PRTMP_ADAPTER pAd,
6492 INT Set_HtBaWinSize_Proc(
6493 IN PRTMP_ADAPTER pAd,
6497 IN PRTMP_ADAPTER pAd,
6500 INT Set_HtLinkAdapt_Proc(
6501 IN PRTMP_ADAPTER pAd,
6504 INT Set_HtAmsdu_Proc(
6505 IN PRTMP_ADAPTER pAd,
6508 INT Set_HtAutoBa_Proc(
6509 IN PRTMP_ADAPTER pAd,
6512 INT Set_HtProtect_Proc(
6513 IN PRTMP_ADAPTER pAd,
6516 INT Set_HtMimoPs_Proc(
6517 IN PRTMP_ADAPTER pAd,
6521 INT Set_ForceShortGI_Proc(
6522 IN PRTMP_ADAPTER pAd,
6525 INT Set_ForceGF_Proc(
6526 IN PRTMP_ADAPTER pAd,
6530 IN PRTMP_ADAPTER pAd);
6532 INT Set_SendPSMPAction_Proc(
6533 IN PRTMP_ADAPTER pAd,
6536 INT Set_HtMIMOPSmode_Proc(
6537 IN PRTMP_ADAPTER pAd,
6541 INT Set_HtTxBASize_Proc(
6542 IN PRTMP_ADAPTER pAd,
6544 #endif // DOT11_N_SUPPORT //
6548 #ifdef CONFIG_STA_SUPPORT
6550 VOID RTMPSendDLSTearDownFrame(
6551 IN PRTMP_ADAPTER pAd,
6554 #ifdef DOT11_N_SUPPORT
6557 IN PRTMP_ADAPTER pAd,
6558 OUT PQUERYBA_TABLE pBAT);
6559 #endif // DOT11_N_SUPPORT //
6561 #ifdef WPA_SUPPLICANT_SUPPORT
6562 INT WpaCheckEapCode(
6563 IN PRTMP_ADAPTER pAd,
6568 VOID WpaSendMicFailureToWpaSupplicant(
6569 IN PRTMP_ADAPTER pAd,
6570 IN BOOLEAN bUnicast);
6572 VOID SendAssocIEsToWpaSupplicant(
6573 IN PRTMP_ADAPTER pAd);
6574 #endif // WPA_SUPPLICANT_SUPPORT //
6576 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6577 int wext_notify_event_assoc(
6578 IN RTMP_ADAPTER *pAd);
6579 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6581 #endif // CONFIG_STA_SUPPORT //
6585 #ifdef DOT11_N_SUPPORT
6586 VOID Handle_BSS_Width_Trigger_Events(
6587 IN PRTMP_ADAPTER pAd);
6589 void build_ext_channel_switch_ie(
6590 IN PRTMP_ADAPTER pAd,
6591 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6592 #endif // DOT11_N_SUPPORT //
6595 BOOLEAN APRxDoneInterruptHandle(
6596 IN PRTMP_ADAPTER pAd);
6598 BOOLEAN STARxDoneInterruptHandle(
6599 IN PRTMP_ADAPTER pAd,
6602 #ifdef DOT11_N_SUPPORT
6603 // AMPDU packet indication
6604 VOID Indicate_AMPDU_Packet(
6605 IN PRTMP_ADAPTER pAd,
6607 IN UCHAR FromWhichBSSID);
6609 // AMSDU packet indication
6610 VOID Indicate_AMSDU_Packet(
6611 IN PRTMP_ADAPTER pAd,
6613 IN UCHAR FromWhichBSSID);
6614 #endif // DOT11_N_SUPPORT //
6616 // Normal legacy Rx packet indication
6617 VOID Indicate_Legacy_Packet(
6618 IN PRTMP_ADAPTER pAd,
6620 IN UCHAR FromWhichBSSID);
6622 VOID Indicate_EAPOL_Packet(
6623 IN PRTMP_ADAPTER pAd,
6625 IN UCHAR FromWhichBSSID);
6627 void update_os_packet_info(
6628 IN PRTMP_ADAPTER pAd,
6630 IN UCHAR FromWhichBSSID);
6632 void wlan_802_11_to_802_3_packet(
6633 IN PRTMP_ADAPTER pAd,
6635 IN PUCHAR pHeader802_3,
6636 IN UCHAR FromWhichBSSID);
6638 UINT deaggregate_AMSDU_announce(
6639 IN PRTMP_ADAPTER pAd,
6640 PNDIS_PACKET pPacket,
6645 #ifdef CONFIG_STA_SUPPORT
6646 // remove LLC and get 802_3 Header
6647 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6649 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6651 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6653 _pDA = _pRxBlk->pHeader->Addr3; \
6654 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6658 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6660 _pDA = _pRxBlk->pHeader->Addr1; \
6661 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6662 _pSA = _pRxBlk->pHeader->Addr2; \
6664 _pSA = _pRxBlk->pHeader->Addr3; \
6668 _pDA = _pRxBlk->pHeader->Addr1; \
6669 _pSA = _pRxBlk->pHeader->Addr2; \
6673 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6674 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6676 #endif // CONFIG_STA_SUPPORT //
6679 BOOLEAN APFowardWirelessStaToWirelessSta(
6680 IN PRTMP_ADAPTER pAd,
6681 IN PNDIS_PACKET pPacket,
6682 IN ULONG FromWhichBSSID);
6684 VOID Announce_or_Forward_802_3_Packet(
6685 IN PRTMP_ADAPTER pAd,
6686 IN PNDIS_PACKET pPacket,
6687 IN UCHAR FromWhichBSSID);
6689 VOID Sta_Announce_or_Forward_802_3_Packet(
6690 IN PRTMP_ADAPTER pAd,
6691 IN PNDIS_PACKET pPacket,
6692 IN UCHAR FromWhichBSSID);
6695 #ifdef CONFIG_STA_SUPPORT
6696 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6697 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6698 //announce_802_3_packet(_pAd, _pPacket);
6699 #endif // CONFIG_STA_SUPPORT //
6702 PNDIS_PACKET DuplicatePacket(
6703 IN PRTMP_ADAPTER pAd,
6704 IN PNDIS_PACKET pPacket,
6705 IN UCHAR FromWhichBSSID);
6708 PNDIS_PACKET ClonePacket(
6709 IN PRTMP_ADAPTER pAd,
6710 IN PNDIS_PACKET pPacket,
6715 // Normal, AMPDU or AMSDU
6716 VOID CmmRxnonRalinkFrameIndicate(
6717 IN PRTMP_ADAPTER pAd,
6719 IN UCHAR FromWhichBSSID);
6721 VOID CmmRxRalinkFrameIndicate(
6722 IN PRTMP_ADAPTER pAd,
6723 IN MAC_TABLE_ENTRY *pEntry,
6725 IN UCHAR FromWhichBSSID);
6727 VOID Update_Rssi_Sample(
6728 IN PRTMP_ADAPTER pAd,
6729 IN RSSI_SAMPLE *pRssi,
6730 IN PRXWI_STRUC pRxWI);
6732 PNDIS_PACKET GetPacketFromRxRing(
6733 IN PRTMP_ADAPTER pAd,
6734 OUT PRT28XX_RXD_STRUC pSaveRxD,
6735 OUT BOOLEAN *pbReschedule,
6736 IN OUT UINT32 *pRxPending);
6738 PNDIS_PACKET RTMPDeFragmentDataFrame(
6739 IN PRTMP_ADAPTER pAd,
6742 ////////////////////////////////////////
6750 typedef struct _DefaultKeyIdxValue
6754 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6758 #ifdef CONFIG_STA_SUPPORT
6760 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6761 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6762 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6763 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6764 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6765 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6766 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6767 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6768 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6769 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6770 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6773 P80211ENUM_msgitem_status_no_value = 0x00
6776 P80211ENUM_truth_false = 0x00,
6777 P80211ENUM_truth_true = 0x01
6780 /* Definition from madwifi */
6786 } p80211item_uint32_t;
6791 #define WLAN_DEVNAMELEN_MAX 16
6792 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6793 p80211item_uint32_t hosttime;
6794 p80211item_uint32_t mactime;
6795 p80211item_uint32_t channel;
6796 p80211item_uint32_t rssi;
6797 p80211item_uint32_t sq;
6798 p80211item_uint32_t signal;
6799 p80211item_uint32_t noise;
6800 p80211item_uint32_t rate;
6801 p80211item_uint32_t istx;
6802 p80211item_uint32_t frmlen;
6803 } wlan_ng_prism2_header;
6805 /* The radio capture header precedes the 802.11 header. */
6806 typedef struct PACKED _ieee80211_radiotap_header {
6807 UINT8 it_version; /* Version 0. Only increases
6808 * for drastic changes,
6809 * introduction of compatible
6810 * new fields does not count.
6813 UINT16 it_len; /* length of the whole
6814 * header in bytes, including
6815 * it_version, it_pad,
6816 * it_len, and data fields.
6818 UINT32 it_present; /* A bitmap telling which
6819 * fields are present. Set bit 31
6820 * (0x80000000) to extend the
6821 * bitmap by another 32 bits.
6822 * Additional extensions are made
6823 * by setting bit 31.
6825 }ieee80211_radiotap_header ;
6827 enum ieee80211_radiotap_type {
6828 IEEE80211_RADIOTAP_TSFT = 0,
6829 IEEE80211_RADIOTAP_FLAGS = 1,
6830 IEEE80211_RADIOTAP_RATE = 2,
6831 IEEE80211_RADIOTAP_CHANNEL = 3,
6832 IEEE80211_RADIOTAP_FHSS = 4,
6833 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6834 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6835 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6836 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6837 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6838 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6839 IEEE80211_RADIOTAP_ANTENNA = 11,
6840 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6841 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6844 #define WLAN_RADIOTAP_PRESENT ( \
6845 (1 << IEEE80211_RADIOTAP_TSFT) | \
6846 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6847 (1 << IEEE80211_RADIOTAP_RATE) | \
6850 typedef struct _wlan_radiotap_header {
6851 ieee80211_radiotap_header wt_ihdr;
6855 } wlan_radiotap_header;
6856 /* Definition from madwifi */
6858 void send_monitor_packets(
6859 IN PRTMP_ADAPTER pAd,
6862 #if WIRELESS_EXT >= 12
6863 // This function will be called when query /proc
6864 struct iw_statistics *rt28xx_get_wireless_stats(
6865 IN struct net_device *net_dev);
6868 VOID RTMPSetDesiredRates(
6869 IN PRTMP_ADAPTER pAdapter,
6871 #endif // CONFIG_STA_SUPPORT //
6873 INT Set_FixedTxMode_Proc(
6874 IN PRTMP_ADAPTER pAd,
6877 static inline char* GetPhyMode(
6887 #ifdef DOT11_N_SUPPORT
6891 case MODE_HTGREENFIELD:
6893 #endif // DOT11_N_SUPPORT //
6900 static inline char* GetBW(
6910 #ifdef DOT11_N_SUPPORT
6913 #endif // DOT11_N_SUPPORT //
6920 VOID RT28xxThreadTerminate(
6921 IN RTMP_ADAPTER *pAd);
6923 BOOLEAN RT28XXChipsetCheck(
6926 BOOLEAN RT28XXNetDevInit(
6928 IN struct net_device *net_dev,
6929 IN RTMP_ADAPTER *pAd);
6931 BOOLEAN RT28XXProbePostConfig(
6933 IN RTMP_ADAPTER *pAd,
6936 VOID RT28XXDMADisable(
6937 IN RTMP_ADAPTER *pAd);
6939 VOID RT28XXDMAEnable(
6940 IN RTMP_ADAPTER *pAd);
6942 VOID RT28xx_UpdateBeaconToAsic(
6943 IN RTMP_ADAPTER * pAd,
6946 IN ULONG UpdatePos);
6949 IN struct net_device *net_dev,
6950 IN OUT struct ifreq *rq,
6954 #ifdef CONFIG_STA_SUPPORT
6955 INT rt28xx_sta_ioctl(
6956 IN struct net_device *net_dev,
6957 IN OUT struct ifreq *rq,
6959 #endif // CONFIG_STA_SUPPORT //
6961 BOOLEAN RT28XXSecurityKeyAdd(
6962 IN PRTMP_ADAPTER pAd,
6965 IN MAC_TABLE_ENTRY *pEntry);
6967 ////////////////////////////////////////
6968 PNDIS_PACKET GetPacketFromRxRing(
6969 IN PRTMP_ADAPTER pAd,
6970 OUT PRT28XX_RXD_STRUC pSaveRxD,
6971 OUT BOOLEAN *pbReschedule,
6972 IN OUT UINT32 *pRxPending);
6975 void kill_thread_task(PRTMP_ADAPTER pAd);
6977 void tbtt_tasklet(unsigned long data);
6980 VOID AsicTurnOffRFClk(
6981 IN PRTMP_ADAPTER pAd,
6984 VOID AsicTurnOnRFClk(
6985 IN PRTMP_ADAPTER pAd,
6989 NTSTATUS RT30xxWriteRFRegister(
6990 IN PRTMP_ADAPTER pAd,
6994 NTSTATUS RT30xxReadRFRegister(
6995 IN PRTMP_ADAPTER pAd,
6999 //2008/09/11:KH add to support efuse<--
7000 UCHAR eFuseReadRegisters(
7001 IN PRTMP_ADAPTER pAd,
7006 VOID eFuseReadPhysical(
7007 IN PRTMP_ADAPTER pAd,
7008 IN PUSHORT lpInBuffer,
7009 IN ULONG nInBufferSize,
7010 OUT PUSHORT lpOutBuffer,
7011 IN ULONG nOutBufferSize
7015 IN PRTMP_ADAPTER pAd,
7020 VOID eFusePhysicalWriteRegisters(
7021 IN PRTMP_ADAPTER pAd,
7026 NTSTATUS eFuseWriteRegisters(
7027 IN PRTMP_ADAPTER pAd,
7032 VOID eFuseWritePhysical(
7033 IN PRTMP_ADAPTER pAd,
7035 ULONG nInBufferSize,
7037 ULONG nOutBufferSize
7040 NTSTATUS eFuseWrite(
7041 IN PRTMP_ADAPTER pAd,
7046 INT set_eFuseGetFreeBlockCount_Proc(
7047 IN PRTMP_ADAPTER pAd,
7050 INT set_eFusedump_Proc(
7051 IN PRTMP_ADAPTER pAd,
7054 INT set_eFuseLoadFromBin_Proc(
7055 IN PRTMP_ADAPTER pAd,
7058 NTSTATUS eFuseWriteRegistersFromBin(
7059 IN PRTMP_ADAPTER pAd,
7064 VOID eFusePhysicalReadRegisters(
7065 IN PRTMP_ADAPTER pAd,
7070 NDIS_STATUS NICLoadEEPROM(
7071 IN PRTMP_ADAPTER pAd);
7073 BOOLEAN bNeedLoadEEPROM(
7074 IN PRTMP_ADAPTER pAd);
7075 //2008/09/11:KH add to support efuse-->
7079 // add by johnli, RF power sequence setup
7080 VOID RT30xxLoadRFNormalModeSetup(
7081 IN PRTMP_ADAPTER pAd);
7083 VOID RT30xxLoadRFSleepModeSetup(
7084 IN PRTMP_ADAPTER pAd);
7086 VOID RT30xxReverseRFSleepModeSetup(
7087 IN PRTMP_ADAPTER pAd);
7093 // Function Prototype in rtusb_bulk.c
7095 VOID RTUSBInitTxDesc(
7096 IN PRTMP_ADAPTER pAd,
7097 IN PTX_CONTEXT pTxContext,
7098 IN UCHAR BulkOutPipeId,
7099 IN usb_complete_t Func);
7101 VOID RTUSBInitHTTxDesc(
7102 IN PRTMP_ADAPTER pAd,
7103 IN PHT_TX_CONTEXT pTxContext,
7104 IN UCHAR BulkOutPipeId,
7105 IN ULONG BulkOutSize,
7106 IN usb_complete_t Func);
7108 VOID RTUSBInitRxDesc(
7109 IN PRTMP_ADAPTER pAd,
7110 IN PRX_CONTEXT pRxContext);
7112 VOID RTUSBCleanUpDataBulkOutQueue(
7113 IN PRTMP_ADAPTER pAd);
7115 VOID RTUSBCancelPendingBulkOutIRP(
7116 IN PRTMP_ADAPTER pAd);
7118 VOID RTUSBBulkOutDataPacket(
7119 IN PRTMP_ADAPTER pAd,
7120 IN UCHAR BulkOutPipeId,
7123 VOID RTUSBBulkOutNullFrame(
7124 IN PRTMP_ADAPTER pAd);
7126 VOID RTUSBBulkOutRTSFrame(
7127 IN PRTMP_ADAPTER pAd);
7129 VOID RTUSBCancelPendingBulkInIRP(
7130 IN PRTMP_ADAPTER pAd);
7132 VOID RTUSBCancelPendingIRPs(
7133 IN PRTMP_ADAPTER pAd);
7135 VOID RTUSBBulkOutMLMEPacket(
7136 IN PRTMP_ADAPTER pAd,
7139 VOID RTUSBBulkOutPsPoll(
7140 IN PRTMP_ADAPTER pAd);
7142 VOID RTUSBCleanUpMLMEBulkOutQueue(
7143 IN PRTMP_ADAPTER pAd);
7145 VOID RTUSBKickBulkOut(
7146 IN PRTMP_ADAPTER pAd);
7148 VOID RTUSBBulkReceive(
7149 IN PRTMP_ADAPTER pAd);
7152 IN RTMP_ADAPTER *pAd);
7154 VOID RTUSBInitRxDesc(
7155 IN PRTMP_ADAPTER pAd,
7156 IN PRX_CONTEXT pRxContext);
7158 VOID RTUSBBulkRxHandle(
7159 IN unsigned long data);
7162 // Function Prototype in rtusb_io.c
7164 NTSTATUS RTUSBMultiRead(
7165 IN PRTMP_ADAPTER pAd,
7170 NTSTATUS RTUSBMultiWrite(
7171 IN PRTMP_ADAPTER pAd,
7176 NTSTATUS RTUSBMultiWrite_OneByte(
7177 IN PRTMP_ADAPTER pAd,
7181 NTSTATUS RTUSBReadBBPRegister(
7182 IN PRTMP_ADAPTER pAd,
7186 NTSTATUS RTUSBWriteBBPRegister(
7187 IN PRTMP_ADAPTER pAd,
7191 NTSTATUS RTUSBWriteRFRegister(
7192 IN PRTMP_ADAPTER pAd,
7195 NTSTATUS RTUSB_VendorRequest(
7196 IN PRTMP_ADAPTER pAd,
7197 IN UINT32 TransferFlags,
7198 IN UCHAR ReservedBits,
7202 IN PVOID TransferBuffer,
7203 IN UINT32 TransferBufferLength);
7205 NTSTATUS RTUSBReadEEPROM(
7206 IN PRTMP_ADAPTER pAd,
7211 NTSTATUS RTUSBWriteEEPROM(
7212 IN PRTMP_ADAPTER pAd,
7217 VOID RTUSBPutToSleep(
7218 IN PRTMP_ADAPTER pAd);
7220 NTSTATUS RTUSBWakeUp(
7221 IN PRTMP_ADAPTER pAd);
7223 VOID RTUSBInitializeCmdQ(
7226 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7227 IN PRTMP_ADAPTER pAd,
7229 IN BOOLEAN SetInformation,
7230 IN PVOID pInformationBuffer,
7231 IN UINT32 InformationBufferLength);
7233 NDIS_STATUS RTUSBEnqueueInternalCmd(
7234 IN PRTMP_ADAPTER pAd,
7236 IN PVOID pInformationBuffer,
7237 IN UINT32 InformationBufferLength);
7239 VOID RTUSBDequeueCmd(
7241 OUT PCmdQElmt *pcmdqelmt);
7244 IN OUT PVOID Context);
7247 IN OUT PVOID Context);
7249 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7250 IN RTMP_ADAPTER *pAd,
7251 IN RALINK_TIMER_STRUCT *pTimer);
7253 BOOLEAN RT2870_TimerQ_Remove(
7254 IN RTMP_ADAPTER *pAd,
7255 IN RALINK_TIMER_STRUCT *pTimer);
7257 void RT2870_TimerQ_Exit(
7258 IN RTMP_ADAPTER *pAd);
7260 void RT2870_TimerQ_Init(
7261 IN RTMP_ADAPTER *pAd);
7263 VOID RT2870_BssBeaconExit(
7264 IN RTMP_ADAPTER *pAd);
7266 VOID RT2870_BssBeaconStop(
7267 IN RTMP_ADAPTER *pAd);
7269 VOID RT2870_BssBeaconStart(
7270 IN RTMP_ADAPTER * pAd);
7272 VOID RT2870_BssBeaconInit(
7273 IN RTMP_ADAPTER *pAd);
7275 VOID RT2870_WatchDog(
7276 IN RTMP_ADAPTER *pAd);
7278 NTSTATUS RTUSBWriteMACRegister(
7279 IN PRTMP_ADAPTER pAd,
7283 NTSTATUS RTUSBReadMACRegister(
7284 IN PRTMP_ADAPTER pAd,
7286 OUT PUINT32 pValue);
7288 NTSTATUS RTUSBSingleWrite(
7289 IN RTMP_ADAPTER *pAd,
7293 NTSTATUS RTUSBFirmwareRun(
7294 IN PRTMP_ADAPTER pAd);
7296 NTSTATUS RTUSBFirmwareWrite(
7297 IN PRTMP_ADAPTER pAd,
7301 NTSTATUS RTUSBFirmwareOpmode(
7302 IN PRTMP_ADAPTER pAd,
7303 OUT PUINT32 pValue);
7305 NTSTATUS RTUSBVenderReset(
7306 IN PRTMP_ADAPTER pAd);
7308 NDIS_STATUS RTUSBSetHardWareRegister(
7309 IN PRTMP_ADAPTER pAdapter,
7312 NDIS_STATUS RTUSBQueryHardWareRegister(
7313 IN PRTMP_ADAPTER pAdapter,
7317 IN PRTMP_ADAPTER pAd);
7320 NDIS_STATUS CreateThreads(
7321 IN struct net_device *net_dev );
7324 VOID MacTableInitialize(
7325 IN PRTMP_ADAPTER pAd);
7328 IN PRTMP_ADAPTER pAd,
7331 NDIS_STATUS RTMPWPAAddKeyProc(
7332 IN PRTMP_ADAPTER pAd,
7335 VOID AsicRxAntEvalAction(
7336 IN PRTMP_ADAPTER pAd);
7339 IN PRTMP_ADAPTER pAd,
7340 IN PUCHAR pHeader802_3,
7344 OUT PNDIS_PACKET *ppPacket);
7346 UINT deaggregate_AMSDU_announce(
7347 IN PRTMP_ADAPTER pAd,
7348 PNDIS_PACKET pPacket,
7352 NDIS_STATUS RTMPCheckRxError(
7353 IN PRTMP_ADAPTER pAd,
7354 IN PHEADER_802_11 pHeader,
7355 IN PRXWI_STRUC pRxWI,
7356 IN PRT28XX_RXD_STRUC pRxINFO);
7359 VOID RTUSBMlmeHardTransmit(
7360 IN PRTMP_ADAPTER pAd,
7361 IN PMGMT_STRUC pMgmt);
7367 // Function Prototype in rtusb_data.c
7369 NDIS_STATUS RTUSBFreeDescriptorRequest(
7370 IN PRTMP_ADAPTER pAd,
7371 IN UCHAR BulkOutPipeId,
7372 IN UINT32 NumberRequired);
7375 BOOLEAN RTUSBNeedQueueBackForAgg(
7376 IN RTMP_ADAPTER *pAd,
7377 IN UCHAR BulkOutPipeId);
7380 VOID RTMPWriteTxInfo(
7381 IN PRTMP_ADAPTER pAd,
7382 IN PTXINFO_STRUC pTxInfo,
7383 IN USHORT USBDMApktLen,
7390 // Function Prototype in cmm_data_2870.c
7392 USHORT RtmpUSB_WriteSubTxResource(
7393 IN PRTMP_ADAPTER pAd,
7396 OUT USHORT *FreeNumber);
7398 USHORT RtmpUSB_WriteSingleTxResource(
7399 IN PRTMP_ADAPTER pAd,
7402 OUT USHORT *FreeNumber);
7404 USHORT RtmpUSB_WriteFragTxResource(
7405 IN PRTMP_ADAPTER pAd,
7408 OUT USHORT *FreeNumber);
7410 USHORT RtmpUSB_WriteMultiTxResource(
7411 IN PRTMP_ADAPTER pAd,
7414 OUT USHORT *FreeNumber);
7416 VOID RtmpUSB_FinalWriteTxResource(
7417 IN PRTMP_ADAPTER pAd,
7419 IN USHORT totalMPDUSize,
7422 VOID RtmpUSBDataLastTxIdx(
7423 IN PRTMP_ADAPTER pAd,
7427 VOID RtmpUSBDataKickOut(
7428 IN PRTMP_ADAPTER pAd,
7433 int RtmpUSBMgmtKickOut(
7434 IN RTMP_ADAPTER *pAd,
7436 IN PNDIS_PACKET pPacket,
7437 IN PUCHAR pSrcBufVA,
7440 VOID RtmpUSBNullFrameKickOut(
7441 IN RTMP_ADAPTER *pAd,
7443 IN UCHAR *pNullFrame,
7444 IN UINT32 frameLen);
7446 VOID RT28xxUsbStaAsicForceWakeup(
7447 IN PRTMP_ADAPTER pAd,
7448 IN BOOLEAN bFromTx);
7450 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7451 IN PRTMP_ADAPTER pAd,
7452 IN USHORT TbttNumToNextWakeUp);
7454 VOID RT28xxUsbMlmeRadioOn(
7455 IN PRTMP_ADAPTER pAd);
7457 VOID RT28xxUsbMlmeRadioOFF(
7458 IN PRTMP_ADAPTER pAd);
7461 ////////////////////////////////////////
7464 IN RTMP_ADAPTER *pAd);
7466 UINT32 QBSS_LoadElementAppend(
7467 IN RTMP_ADAPTER *pAd,
7470 VOID QBSS_LoadUpdate(
7471 IN RTMP_ADAPTER *pAd);
7473 ///////////////////////////////////////
7474 INT RTMPShowCfgValue(
7475 IN PRTMP_ADAPTER pAd,
7479 PCHAR RTMPGetRalinkAuthModeStr(
7480 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7482 PCHAR RTMPGetRalinkEncryModeStr(
7483 IN USHORT encryMode);
7484 //////////////////////////////////////
7486 #ifdef CONFIG_STA_SUPPORT
7487 VOID AsicStaBbpTuning(
7488 IN PRTMP_ADAPTER pAd);
7490 BOOLEAN StaAddMacTableEntry(
7491 IN PRTMP_ADAPTER pAd,
7492 IN PMAC_TABLE_ENTRY pEntry,
7493 IN UCHAR MaxSupportedRateIn500Kbps,
7494 IN HT_CAPABILITY_IE *pHtCapability,
7495 IN UCHAR HtCapabilityLen,
7496 IN USHORT CapabilityInfo);
7497 #endif // CONFIG_STA_SUPPORT //
7499 void RTMP_IndicateMediaState(
7500 IN PRTMP_ADAPTER pAd);
7502 VOID ReSyncBeaconTime(
7503 IN PRTMP_ADAPTER pAd);
7505 VOID RTMPSetAGCInitValue(
7506 IN PRTMP_ADAPTER pAd,
7507 IN UCHAR BandWidth);
7509 int rt28xx_close(IN PNET_DEV dev);
7510 int rt28xx_open(IN PNET_DEV dev);
7512 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7514 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7515 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7517 if (VIRTUAL_IF_NUM(pAd) == 0)
7519 if (rt28xx_open(pAd->net_dev) != 0)
7525 VIRTUAL_IF_INC(pAd);
7529 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7531 VIRTUAL_IF_DEC(pAd);
7532 if (VIRTUAL_IF_NUM(pAd) == 0)
7533 rt28xx_close(pAd->net_dev);
7538 #endif // __RTMP_H__