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"
48 //#define DBG_DIAGNOSE 1
50 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
51 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
52 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
55 ////////////////////////////////////////////////////////////////////////////
56 // The TX_BUFFER structure forms the transmitted USB packet to the device
57 ////////////////////////////////////////////////////////////////////////////
58 typedef struct __TX_BUFFER{
60 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
61 HEADER_802_11 NullFrame;
62 PSPOLL_FRAME PsPollPacket;
65 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
66 } TX_BUFFER, *PTX_BUFFER;
68 typedef struct __HTTX_BUFFER{
70 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
71 HEADER_802_11 NullFrame;
72 PSPOLL_FRAME PsPollPacket;
75 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
76 } HTTX_BUFFER, *PHTTX_BUFFER;
79 // used to track driver-generated write irps
80 typedef struct _TX_CONTEXT
82 PVOID pAd; //Initialized in MiniportInitialize
83 PURB pUrb; //Initialized in MiniportInitialize
84 PIRP pIrp; //used to cancel pending bulk out.
85 //Initialized in MiniportInitialize
86 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
91 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
92 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
95 BOOLEAN bAggregatible;
96 UCHAR Header_802_3[LENGTH_802_3];
100 dma_addr_t data_dma; // urb dma on linux
102 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
105 // used to track driver-generated write irps
106 typedef struct _HT_TX_CONTEXT
108 PVOID pAd; //Initialized in MiniportInitialize
109 PURB pUrb; //Initialized in MiniportInitialize
110 PIRP pIrp; //used to cancel pending bulk out.
111 //Initialized in MiniportInitialize
112 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
113 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
119 BOOLEAN bCopySavePad;
121 UCHAR Header_802_3[LENGTH_802_3];
122 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
123 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
124 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
125 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
127 dma_addr_t data_dma; // urb dma on linux
128 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
132 // Structure to keep track of receive packets and buffers to indicate
133 // receive data to the protocol.
135 typedef struct _RX_CONTEXT
137 PUCHAR TransferBuffer;
139 PIRP pIrp;//used to cancel pending bulk in.
141 //These 2 Boolean shouldn't both be 1 at the same time.
142 ULONG BulkInOffset; // number of packets waiting for reordering .
143 BOOLEAN bRxHandling; // Notify this packet is being process now.
144 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
145 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
146 BOOLEAN IRPPending; // TODO: To be removed
148 NDIS_SPIN_LOCK RxContextLock;
149 dma_addr_t data_dma; // urb dma on linux
150 } RX_CONTEXT, *PRX_CONTEXT;
155 // NDIS Version definitions
157 #ifdef NDIS50_MINIPORT
158 #define RTMP_NDIS_MAJOR_VERSION 5
159 #define RTMP_NDIS_MINOR_VERSION 0
162 #ifdef NDIS51_MINIPORT
163 #define RTMP_NDIS_MAJOR_VERSION 5
164 #define RTMP_NDIS_MINOR_VERSION 1
167 extern char NIC_VENDOR_DESC[];
168 extern int NIC_VENDOR_DESC_LEN;
170 extern unsigned char SNAP_AIRONET[];
171 extern unsigned char CipherSuiteCiscoCCKM[];
172 extern unsigned char CipherSuiteCiscoCCKMLen;
173 extern unsigned char CipherSuiteCiscoCCKM24[];
174 extern unsigned char CipherSuiteCiscoCCKM24Len;
175 extern unsigned char CipherSuiteCCXTkip[];
176 extern unsigned char CipherSuiteCCXTkipLen;
177 extern unsigned char CISCO_OUI[];
178 extern UCHAR BaSizeArray[4];
180 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
181 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
182 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
183 extern ULONG BIT32[32];
184 extern UCHAR BIT8[8];
185 extern char* CipherName[];
186 extern char* MCSToMbps[];
187 extern UCHAR RxwiMCSToOfdmRate[12];
188 extern UCHAR SNAP_802_1H[6];
189 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
190 extern UCHAR SNAP_AIRONET[8];
191 extern UCHAR CKIP_LLC_SNAP[8];
192 extern UCHAR EAPOL_LLC_SNAP[8];
193 extern UCHAR EAPOL[2];
195 extern UCHAR APPLE_TALK[2];
196 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
197 extern UCHAR OfdmRateToRxwiMCS[];
198 extern UCHAR OfdmSignalToRateId[16] ;
199 extern UCHAR default_cwmin[4];
200 extern UCHAR default_cwmax[4];
201 extern UCHAR default_sta_aifsn[4];
202 extern UCHAR MapUserPriorityToAccessCategory[8];
204 extern USHORT RateUpPER[];
205 extern USHORT RateDownPER[];
206 extern UCHAR Phy11BNextRateDownward[];
207 extern UCHAR Phy11BNextRateUpward[];
208 extern UCHAR Phy11BGNextRateDownward[];
209 extern UCHAR Phy11BGNextRateUpward[];
210 extern UCHAR Phy11ANextRateDownward[];
211 extern UCHAR Phy11ANextRateUpward[];
212 extern CHAR RssiSafeLevelForTxRate[];
213 extern UCHAR RateIdToMbps[];
214 extern USHORT RateIdTo500Kbps[];
216 extern UCHAR CipherSuiteWpaNoneTkip[];
217 extern UCHAR CipherSuiteWpaNoneTkipLen;
219 extern UCHAR CipherSuiteWpaNoneAes[];
220 extern UCHAR CipherSuiteWpaNoneAesLen;
223 extern UCHAR SupRateIe;
224 extern UCHAR ExtRateIe;
226 extern UCHAR HtCapIe;
227 extern UCHAR AddHtInfoIe;
228 extern UCHAR NewExtChanIe;
241 extern UCHAR WPA_OUI[];
242 extern UCHAR RSN_OUI[];
244 extern UCHAR WAPI_OUI[];
246 extern UCHAR WME_INFO_ELEM[];
247 extern UCHAR WME_PARM_ELEM[];
248 extern UCHAR Ccx2QosInfo[];
249 extern UCHAR Ccx2IeInfo[];
250 extern UCHAR RALINK_OUI[];
251 extern UCHAR PowerConstraintIE[];
254 extern UCHAR RateSwitchTable[];
255 extern UCHAR RateSwitchTable11B[];
256 extern UCHAR RateSwitchTable11G[];
257 extern UCHAR RateSwitchTable11BG[];
259 extern UCHAR RateSwitchTable11BGN1S[];
260 extern UCHAR RateSwitchTable11BGN2S[];
261 extern UCHAR RateSwitchTable11BGN2SForABand[];
262 extern UCHAR RateSwitchTable11N1S[];
263 extern UCHAR RateSwitchTable11N2S[];
264 extern UCHAR RateSwitchTable11N2SForABand[];
266 extern UCHAR PRE_N_HT_OUI[];
268 #define MAXSEQ (0xFFF)
270 struct reordering_mpdu
272 struct reordering_mpdu *next;
273 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
274 int Sequence; /* sequence number of MPDU */
278 struct reordering_list
280 struct reordering_mpdu *next;
284 struct reordering_mpdu_pool
288 struct reordering_list freelist;
291 typedef struct _RSSI_SAMPLE {
292 CHAR LastRssi0; // last received RSSI
293 CHAR LastRssi1; // last received RSSI
294 CHAR LastRssi2; // last received RSSI
304 // Queue structure and macros
306 typedef struct _QUEUE_ENTRY {
307 struct _QUEUE_ENTRY *Next;
308 } QUEUE_ENTRY, *PQUEUE_ENTRY;
311 typedef struct _QUEUE_HEADER {
315 } QUEUE_HEADER, *PQUEUE_HEADER;
317 #define InitializeQueueHeader(QueueHeader) \
319 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
320 (QueueHeader)->Number = 0; \
323 #define RemoveHeadQueue(QueueHeader) \
324 (QueueHeader)->Head; \
326 PQUEUE_ENTRY pNext; \
327 if ((QueueHeader)->Head != NULL) \
329 pNext = (QueueHeader)->Head->Next; \
330 (QueueHeader)->Head = pNext; \
332 (QueueHeader)->Tail = NULL; \
333 (QueueHeader)->Number--; \
337 #define InsertHeadQueue(QueueHeader, QueueEntry) \
339 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
340 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
341 if ((QueueHeader)->Tail == NULL) \
342 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
343 (QueueHeader)->Number++; \
346 #define InsertTailQueue(QueueHeader, QueueEntry) \
348 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
349 if ((QueueHeader)->Tail) \
350 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
352 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
353 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
354 (QueueHeader)->Number++; \
358 // Macros for flag and ref count operations
360 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
361 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
362 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
363 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
364 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
366 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
367 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
368 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
370 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
371 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
372 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
374 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
375 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
376 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
378 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
379 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
380 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
381 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
383 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
385 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
386 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
389 #define INC_RING_INDEX(_idx, _RingSize) \
391 (_idx) = (_idx+1) % (_RingSize); \
395 // We will have a cost down version which mac version is 0x3090xxxx
396 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
398 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
400 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
401 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
403 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
406 #define RING_PACKET_INIT(_TxRing, _idx) \
408 _TxRing->Cell[_idx].pNdisPacket = NULL; \
409 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
412 #define TXDT_INIT(_TxD) \
414 NdisZeroMemory(_TxD, TXD_SIZE); \
418 //Set last data segment
419 #define RING_SET_LASTDS(_TxD, _IsSD0) \
421 if (_IsSD0) {_TxD->LastSec0 = 1;} \
422 else {_TxD->LastSec1 = 1;} \
425 // Increase TxTsc value for next transmission
427 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
428 // Should send a special event microsoft defined to request re-key
429 #define INC_TX_TSC(_tsc) \
432 while (++_tsc[i] == 0x0) \
440 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
441 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
443 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
444 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
445 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
446 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
447 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
448 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
449 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
450 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
451 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
452 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
453 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
454 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
457 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
459 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
460 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
461 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
465 // BBP & RF are using indirect access. Before write any value into it.
466 // We have to make sure there is no outstanding command pending via checking busy bit.
468 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
472 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
473 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
474 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
476 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
477 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
481 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
482 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
485 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
488 case 1: khz = 2412000; break; \
489 case 2: khz = 2417000; break; \
490 case 3: khz = 2422000; break; \
491 case 4: khz = 2427000; break; \
492 case 5: khz = 2432000; break; \
493 case 6: khz = 2437000; break; \
494 case 7: khz = 2442000; break; \
495 case 8: khz = 2447000; break; \
496 case 9: khz = 2452000; break; \
497 case 10: khz = 2457000; break; \
498 case 11: khz = 2462000; break; \
499 case 12: khz = 2467000; break; \
500 case 13: khz = 2472000; break; \
501 case 14: khz = 2484000; break; \
502 case 36: /* UNII */ khz = 5180000; break; \
503 case 40: /* UNII */ khz = 5200000; break; \
504 case 44: /* UNII */ khz = 5220000; break; \
505 case 48: /* UNII */ khz = 5240000; break; \
506 case 52: /* UNII */ khz = 5260000; break; \
507 case 56: /* UNII */ khz = 5280000; break; \
508 case 60: /* UNII */ khz = 5300000; break; \
509 case 64: /* UNII */ khz = 5320000; break; \
510 case 149: /* UNII */ khz = 5745000; break; \
511 case 153: /* UNII */ khz = 5765000; break; \
512 case 157: /* UNII */ khz = 5785000; break; \
513 case 161: /* UNII */ khz = 5805000; break; \
514 case 165: /* UNII */ khz = 5825000; break; \
515 case 100: /* HiperLAN2 */ khz = 5500000; break; \
516 case 104: /* HiperLAN2 */ khz = 5520000; break; \
517 case 108: /* HiperLAN2 */ khz = 5540000; break; \
518 case 112: /* HiperLAN2 */ khz = 5560000; break; \
519 case 116: /* HiperLAN2 */ khz = 5580000; break; \
520 case 120: /* HiperLAN2 */ khz = 5600000; break; \
521 case 124: /* HiperLAN2 */ khz = 5620000; break; \
522 case 128: /* HiperLAN2 */ khz = 5640000; break; \
523 case 132: /* HiperLAN2 */ khz = 5660000; break; \
524 case 136: /* HiperLAN2 */ khz = 5680000; break; \
525 case 140: /* HiperLAN2 */ khz = 5700000; break; \
526 case 34: /* Japan MMAC */ khz = 5170000; break; \
527 case 38: /* Japan MMAC */ khz = 5190000; break; \
528 case 42: /* Japan MMAC */ khz = 5210000; break; \
529 case 46: /* Japan MMAC */ khz = 5230000; break; \
530 case 184: /* Japan */ khz = 4920000; break; \
531 case 188: /* Japan */ khz = 4940000; break; \
532 case 192: /* Japan */ khz = 4960000; break; \
533 case 196: /* Japan */ khz = 4980000; break; \
534 case 208: /* Japan, means J08 */ khz = 5040000; break; \
535 case 212: /* Japan, means J12 */ khz = 5060000; break; \
536 case 216: /* Japan, means J16 */ khz = 5080000; break; \
537 default: khz = 2412000; break; \
541 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
544 case 2412000: ch = 1; break; \
545 case 2417000: ch = 2; break; \
546 case 2422000: ch = 3; break; \
547 case 2427000: ch = 4; break; \
548 case 2432000: ch = 5; break; \
549 case 2437000: ch = 6; break; \
550 case 2442000: ch = 7; break; \
551 case 2447000: ch = 8; break; \
552 case 2452000: ch = 9; break; \
553 case 2457000: ch = 10; break; \
554 case 2462000: ch = 11; break; \
555 case 2467000: ch = 12; break; \
556 case 2472000: ch = 13; break; \
557 case 2484000: ch = 14; break; \
558 case 5180000: ch = 36; /* UNII */ break; \
559 case 5200000: ch = 40; /* UNII */ break; \
560 case 5220000: ch = 44; /* UNII */ break; \
561 case 5240000: ch = 48; /* UNII */ break; \
562 case 5260000: ch = 52; /* UNII */ break; \
563 case 5280000: ch = 56; /* UNII */ break; \
564 case 5300000: ch = 60; /* UNII */ break; \
565 case 5320000: ch = 64; /* UNII */ break; \
566 case 5745000: ch = 149; /* UNII */ break; \
567 case 5765000: ch = 153; /* UNII */ break; \
568 case 5785000: ch = 157; /* UNII */ break; \
569 case 5805000: ch = 161; /* UNII */ break; \
570 case 5825000: ch = 165; /* UNII */ break; \
571 case 5500000: ch = 100; /* HiperLAN2 */ break; \
572 case 5520000: ch = 104; /* HiperLAN2 */ break; \
573 case 5540000: ch = 108; /* HiperLAN2 */ break; \
574 case 5560000: ch = 112; /* HiperLAN2 */ break; \
575 case 5580000: ch = 116; /* HiperLAN2 */ break; \
576 case 5600000: ch = 120; /* HiperLAN2 */ break; \
577 case 5620000: ch = 124; /* HiperLAN2 */ break; \
578 case 5640000: ch = 128; /* HiperLAN2 */ break; \
579 case 5660000: ch = 132; /* HiperLAN2 */ break; \
580 case 5680000: ch = 136; /* HiperLAN2 */ break; \
581 case 5700000: ch = 140; /* HiperLAN2 */ break; \
582 case 5170000: ch = 34; /* Japan MMAC */ break; \
583 case 5190000: ch = 38; /* Japan MMAC */ break; \
584 case 5210000: ch = 42; /* Japan MMAC */ break; \
585 case 5230000: ch = 46; /* Japan MMAC */ break; \
586 case 4920000: ch = 184; /* Japan */ break; \
587 case 4940000: ch = 188; /* Japan */ break; \
588 case 4960000: ch = 192; /* Japan */ break; \
589 case 4980000: ch = 196; /* Japan */ break; \
590 case 5040000: ch = 208; /* Japan, means J08 */ break; \
591 case 5060000: ch = 212; /* Japan, means J12 */ break; \
592 case 5080000: ch = 216; /* Japan, means J16 */ break; \
593 default: ch = 1; break; \
598 // Common fragment list structure - Identical to the scatter gather frag list structure
600 #define NIC_MAX_PHYS_BUF_COUNT 8
602 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
606 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
609 typedef struct _RTMP_SCATTER_GATHER_LIST {
610 ULONG NumberOfElements;
612 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
613 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
616 // Some utility macros
619 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
623 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
626 #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))))
628 #define INC_COUNTER64(Val) (Val.QuadPart++)
630 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
631 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
632 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
633 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
635 // Check LEAP & CCKM flags
636 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
637 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
639 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
640 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
642 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
644 _pExtraLlcSnapEncap = SNAP_802_1H; \
645 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
646 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
648 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
653 _pExtraLlcSnapEncap = NULL; \
657 // New Define for new Tx Path.
658 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
660 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
662 _pExtraLlcSnapEncap = SNAP_802_1H; \
663 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
664 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
666 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
671 _pExtraLlcSnapEncap = NULL; \
676 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
678 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
679 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
680 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
683 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
684 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
685 // else remove the LLC/SNAP field from the result Ethernet frame
686 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
688 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
689 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
690 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
694 _pRemovedLLCSNAP = NULL; \
695 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
696 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
698 PUCHAR pProto = _pData + 6; \
700 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
701 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
703 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
704 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
705 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
709 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
710 _pRemovedLLCSNAP = _pData; \
711 _DataSize -= LENGTH_802_1_H; \
712 _pData += LENGTH_802_1_H; \
717 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
718 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
719 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
723 #define SWITCH_AB( _pAA, _pBB) \
731 // Enqueue this frame to MLME engine
732 // We need to enqueue the whole frame because MLME need to pass data type
733 // information from 802.11 header
735 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
737 UINT32 High32TSF=0, Low32TSF=0; \
738 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
743 //Need to collect each ant's rssi concurrently
744 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
745 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
749 if (_pAd->RxAnt.EvaluatePeriod == 0) \
751 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
752 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
754 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
756 AvgRssi = _rssi1 << 3; \
757 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
761 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
762 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
763 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
764 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
767 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
768 AvgRssi = _rssi1 << 3; \
770 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
771 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
777 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
778 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
780 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
781 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
784 // Check if it is Japan W53(ch52,56,60,64) channel.
786 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
788 #define STA_PORT_SECURED(_pAd) \
790 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
791 NdisAcquireSpinLock(&_pAd->MacTabLock); \
792 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
793 NdisReleaseSpinLock(&_pAd->MacTabLock); \
797 // Register set pair for initialzation register set definition
799 typedef struct _RTMP_REG_PAIR
803 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
805 typedef struct _REG_PAIR
809 } REG_PAIR, *PREG_PAIR;
812 // Register set pair for initialzation register set definition
814 typedef struct _RTMP_RF_REGS
821 } RTMP_RF_REGS, *PRTMP_RF_REGS;
823 typedef struct _FREQUENCY_ITEM {
828 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
831 // Data buffer for DMA operation, the buffer must be contiguous physical memory
832 // Both DMA to / from CPU use the same structure.
834 typedef struct _RTMP_DMABUF
837 PVOID AllocVa; // TxBuf virtual address
838 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
839 } RTMP_DMABUF, *PRTMP_DMABUF;
842 typedef union _HEADER_802_11_SEQ{
848 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
851 // Data buffer for DMA operation, the buffer must be contiguous physical memory
852 // Both DMA to / from CPU use the same structure.
854 typedef struct _RTMP_REORDERBUF
857 PVOID AllocVa; // TxBuf virtual address
858 UCHAR Header802_3[14];
859 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
866 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
869 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
870 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
871 // which won't be released, driver has to wait until upper layer return the packet
872 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
873 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
874 // which driver should ACK upper layer when the tx is physically done or failed.
876 typedef struct _RTMP_DMACB
878 ULONG AllocSize; // Control block size
879 PVOID AllocVa; // Control block virtual address
880 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
881 PNDIS_PACKET pNdisPacket;
882 PNDIS_PACKET pNextNdisPacket;
884 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
885 } RTMP_DMACB, *PRTMP_DMACB;
887 typedef struct _RTMP_TX_BUF
891 ULONG AllocSize; // Control block size
892 PVOID AllocVa; // Control block virtual address
893 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
894 } RTMP_TXBUF, *PRTMP_TXBUF;
896 typedef struct _RTMP_RX_BUF
900 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
901 } RTMP_RXBUF, *PRTMP_RXBUF;
902 typedef struct _RTMP_TX_RING
904 RTMP_DMACB Cell[TX_RING_SIZE];
907 UINT32 TxSwFreeIdx; // software next free tx index
908 } RTMP_TX_RING, *PRTMP_TX_RING;
910 typedef struct _RTMP_RX_RING
912 RTMP_DMACB Cell[RX_RING_SIZE];
915 INT32 RxSwReadIdx; // software next read index
916 } RTMP_RX_RING, *PRTMP_RX_RING;
918 typedef struct _RTMP_MGMT_RING
920 RTMP_DMACB Cell[MGMT_RING_SIZE];
923 UINT32 TxSwFreeIdx; // software next free tx index
924 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
927 // Statistic counter structure
929 typedef struct _COUNTER_802_3
939 ULONG RcvAlignmentErrors;
941 ULONG MoreCollisions;
943 } COUNTER_802_3, *PCOUNTER_802_3;
945 typedef struct _COUNTER_802_11 {
947 LARGE_INTEGER LastTransmittedFragmentCount;
948 LARGE_INTEGER TransmittedFragmentCount;
949 LARGE_INTEGER MulticastTransmittedFrameCount;
950 LARGE_INTEGER FailedCount;
951 LARGE_INTEGER RetryCount;
952 LARGE_INTEGER MultipleRetryCount;
953 LARGE_INTEGER RTSSuccessCount;
954 LARGE_INTEGER RTSFailureCount;
955 LARGE_INTEGER ACKFailureCount;
956 LARGE_INTEGER FrameDuplicateCount;
957 LARGE_INTEGER ReceivedFragmentCount;
958 LARGE_INTEGER MulticastReceivedFrameCount;
959 LARGE_INTEGER FCSErrorCount;
960 } COUNTER_802_11, *PCOUNTER_802_11;
962 typedef struct _COUNTER_RALINK {
963 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
964 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
965 ULONG BeenDisassociatedCount;
966 ULONG BadCQIAutoRecoveryCount;
967 ULONG PoorCQIRoamingCount;
968 ULONG MgmtRingFullCount;
969 ULONG RxCountSinceLastNULL;
971 ULONG RxRingErrCount;
973 ULONG TxRingErrCount;
974 LARGE_INTEGER RealFcsErrCount;
975 ULONG PendingNdisPacketCount;
977 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
978 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
979 UINT32 OneSecTxDoneCount;
981 UINT32 OneSecTxAggregationCount;
982 UINT32 OneSecRxAggregationCount;
984 UINT32 OneSecFrameDuplicateCount;
987 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
990 UINT32 OneSecTxNoRetryOkCount;
991 UINT32 OneSecTxRetryOkCount;
992 UINT32 OneSecTxFailCount;
993 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
994 UINT32 OneSecRxOkCnt; // RX without error
995 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
996 UINT32 OneSecRxFcsErrCnt; // CRC error
997 UINT32 OneSecBeaconSentCnt;
998 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
999 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1002 ULONG TxNonAggCount;
1003 ULONG TxAgg1MPDUCount;
1004 ULONG TxAgg2MPDUCount;
1005 ULONG TxAgg3MPDUCount;
1006 ULONG TxAgg4MPDUCount;
1007 ULONG TxAgg5MPDUCount;
1008 ULONG TxAgg6MPDUCount;
1009 ULONG TxAgg7MPDUCount;
1010 ULONG TxAgg8MPDUCount;
1011 ULONG TxAgg9MPDUCount;
1012 ULONG TxAgg10MPDUCount;
1013 ULONG TxAgg11MPDUCount;
1014 ULONG TxAgg12MPDUCount;
1015 ULONG TxAgg13MPDUCount;
1016 ULONG TxAgg14MPDUCount;
1017 ULONG TxAgg15MPDUCount;
1018 ULONG TxAgg16MPDUCount;
1020 LARGE_INTEGER TransmittedOctetsInAMSDU;
1021 LARGE_INTEGER TransmittedAMSDUCount;
1022 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1023 LARGE_INTEGER ReceivedAMSDUCount;
1024 LARGE_INTEGER TransmittedAMPDUCount;
1025 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1026 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1027 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1028 } COUNTER_RALINK, *PCOUNTER_RALINK;
1030 typedef struct _PID_COUNTER {
1031 ULONG TxAckRequiredCount; // CRC error
1033 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1034 ULONG LastSuccessRate;
1035 } PID_COUNTER, *PPID_COUNTER;
1037 typedef struct _COUNTER_DRS {
1038 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1039 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1040 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1041 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1042 ULONG CurrTxRateStableTime; // # of second in current TX rate
1043 BOOLEAN fNoisyEnvironment;
1044 BOOLEAN fLastSecAccordingRSSI;
1045 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1046 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1047 ULONG LastTxOkCount;
1048 } COUNTER_DRS, *PCOUNTER_DRS;
1051 // Arcfour Structure Added by PaulWu
1053 typedef struct _ARCFOUR
1058 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1060 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1061 typedef struct _RECEIVE_SETTING {
1062 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1063 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1065 USHORT STBC:2; //SPACE
1069 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1071 // Shared key data structure
1072 typedef struct _WEP_KEY {
1073 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1074 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1075 } WEP_KEY, *PWEP_KEY;
1077 typedef struct _CIPHER_KEY {
1078 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1079 UCHAR RxMic[8]; // make alignment
1081 UCHAR TxTsc[6]; // 48bit TSC value
1082 UCHAR RxTsc[6]; // 48bit TSC value
1083 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1086 // Key length for each key, 0: entry is invalid
1087 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1088 } CIPHER_KEY, *PCIPHER_KEY;
1090 typedef struct _BBP_TUNING_STRUCT {
1092 UCHAR FalseCcaCountUpperBound; // 100 per sec
1093 UCHAR FalseCcaCountLowerBound; // 10 per sec
1094 UCHAR R17LowerBound; // specified in E2PROM
1095 UCHAR R17UpperBound; // 0x68 according to David Tung
1096 UCHAR CurrentR17Value;
1097 } BBP_TUNING, *PBBP_TUNING;
1099 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1100 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1102 UCHAR EvaluateStableCnt;
1104 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1105 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1106 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1107 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1108 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1109 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1110 SHORT Pair1LastAvgRssi; //
1111 SHORT Pair2LastAvgRssi; //
1112 ULONG RcvPktNumWhenEvaluate;
1113 BOOLEAN FirstPktArrivedWhenEvaluate;
1114 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1115 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1117 typedef struct _LEAP_AUTH_INFO {
1118 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1119 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1121 UCHAR UserName[256]; //LEAP, User name
1123 UCHAR Password[256]; //LEAP, User Password
1125 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1128 UCHAR Addr[MAC_ADDR_LEN];
1129 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1130 //00 02-Authentication timeout
1131 //00 03-Challenge from AP failed
1132 //00 04-Challenge to AP failed
1134 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1138 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1139 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1145 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1148 // Receive Tuple Cache Format
1150 typedef struct _TUPLE_CACHE {
1152 UCHAR MacAddress[MAC_ADDR_LEN];
1155 } TUPLE_CACHE, *PTUPLE_CACHE;
1158 // Fragment Frame structure
1160 typedef struct _FRAGMENT_FRAME {
1161 PNDIS_PACKET pFragPacket;
1165 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1166 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1170 // Packet information for NdisQueryPacket
1172 typedef struct _PACKET_INFO {
1173 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1174 UINT BufferCount ; // Number of Buffer descriptor chained
1175 UINT TotalPacketLength ; // Self explained
1176 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1177 } PACKET_INFO, *PPACKET_INFO;
1180 // Tkip Key structure which RC4 key & MIC calculation
1182 typedef struct _TKIP_KEY_INFO {
1183 UINT nBytesInM; // # bytes in M for MICKEY
1186 ULONG K0; // for MICKEY Low
1187 ULONG K1; // for MICKEY Hig
1188 ULONG L; // Current state for MICKEY
1189 ULONG R; // Current state for MICKEY
1190 ULONG M; // Message accumulator for MICKEY
1193 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1196 // Private / Misc data, counters for driver internal use
1198 typedef struct __PRIVATE_STRUC {
1199 UINT SystemResetCnt; // System reset counter
1200 UINT TxRingFullCnt; // Tx ring full occurrance number
1201 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1202 // Variables for WEP encryption / decryption in rtmp_wep.c
1204 ARCFOURCONTEXT WEPCONTEXT;
1208 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1210 // structure to tune BBP R66 (BBP TUNING)
1211 typedef struct _BBP_R66_TUNING {
1213 USHORT FalseCcaLowerThreshold; // default 100
1214 USHORT FalseCcaUpperThreshold; // default 512
1216 UCHAR R66CurrentValue;
1217 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1218 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1220 // structure to store channel TX power
1221 typedef struct _CHANNEL_TX_POWER {
1222 USHORT RemainingTimeForUse; //unit: sec
1228 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1230 // structure to store 802.11j channel TX power
1231 typedef struct _CHANNEL_11J_TX_POWER {
1233 UCHAR BW; // BW_10 or BW_20
1236 USHORT RemainingTimeForUse; //unit: sec
1237 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1239 typedef enum _ABGBAND_STATE_ {
1245 typedef struct _MLME_STRUCT {
1246 // STA state machines
1247 STATE_MACHINE CntlMachine;
1248 STATE_MACHINE AssocMachine;
1249 STATE_MACHINE AuthMachine;
1250 STATE_MACHINE AuthRspMachine;
1251 STATE_MACHINE SyncMachine;
1252 STATE_MACHINE WpaPskMachine;
1253 STATE_MACHINE LeapMachine;
1254 STATE_MACHINE AironetMachine;
1255 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1256 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1257 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1258 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1259 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1260 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1261 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1263 STATE_MACHINE ActMachine;
1265 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1266 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1267 ULONG LastSendNULLpsmTime;
1270 NDIS_SPIN_LOCK TaskLock;
1275 RALINK_TIMER_STRUCT PeriodicTimer;
1276 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1277 RALINK_TIMER_STRUCT LinkDownTimer;
1278 RALINK_TIMER_STRUCT LinkUpTimer;
1279 ULONG PeriodicRound;
1280 ULONG OneSecPeriodicRound;
1283 BOOLEAN bLowThroughput;
1284 BOOLEAN bEnableAutoAntennaCheck;
1285 RALINK_TIMER_STRUCT RxAntEvalTimer;
1288 UCHAR CaliBW40RfR24;
1289 UCHAR CaliBW20RfR24;
1292 } MLME_STRUCT, *PMLME_STRUCT;
1294 // structure for radar detection and channel switch
1295 typedef struct _RADAR_DETECT_STRUCT {
1296 UCHAR CSCount; //Channel switch counter
1297 UCHAR CSPeriod; //Channel switch period (beacon count)
1298 UCHAR RDCount; //Radar detection counter
1299 UCHAR RDMode; //Radar Detection mode
1300 UCHAR RDDurRegion; //Radar detection duration region
1307 ULONG InServiceMonitorCount; // unit: sec
1308 UINT8 DfsSessionTime;
1311 UINT8 LongPulseRadarTh;
1312 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1314 typedef enum _REC_BLOCKACK_STATUS
1318 Recipient_HandleRes,
1320 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1322 typedef enum _ORI_BLOCKACK_STATUS
1328 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1330 typedef struct _BA_ORI_ENTRY{
1335 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1337 USHORT TimeOutValue;
1338 ORI_BLOCKACK_STATUS ORI_BA_Status;
1339 RALINK_TIMER_STRUCT ORIBATimer;
1341 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1343 typedef struct _BA_REC_ENTRY {
1346 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1348 USHORT TimeOutValue;
1349 RALINK_TIMER_STRUCT RECBATimer;
1350 ULONG LastIndSeqAtTimer;
1353 REC_BLOCKACK_STATUS REC_BA_Status;
1354 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1356 struct reordering_list list;
1357 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1361 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1362 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1363 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1364 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1365 } BA_TABLE, *PBA_TABLE;
1367 //For QureyBATableOID use;
1368 typedef struct PACKED _OID_BA_REC_ENTRY{
1369 UCHAR MACAddr[MAC_ADDR_LEN];
1370 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1373 REC_BLOCKACK_STATUS REC_BA_Status[8];
1374 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1376 //For QureyBATableOID use;
1377 typedef struct PACKED _OID_BA_ORI_ENTRY{
1378 UCHAR MACAddr[MAC_ADDR_LEN];
1379 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
1382 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1383 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1385 typedef struct _QUERYBA_TABLE{
1386 OID_BA_ORI_ENTRY BAOriEntry[32];
1387 OID_BA_REC_ENTRY BARecEntry[32];
1388 UCHAR OriNum;// Number of below BAOriEntry
1389 UCHAR RecNum;// Number of below BARecEntry
1390 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1392 typedef union _BACAP_STRUC {
1394 UINT32 RxBAWinLimit:8;
1395 UINT32 TxBAWinLimit:8;
1396 UINT32 AutoBA:1; // automatically BA
1397 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1398 UINT32 MpduDensity:3;
1399 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1400 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1401 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1402 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1403 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.
1407 } BACAP_STRUC, *PBACAP_STRUC;
1409 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1410 typedef struct _IOT_STRUC {
1412 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1413 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1414 ULONG OneSecInWindowCount;
1415 ULONG OneSecFrameDuplicateCount;
1416 ULONG OneSecOutWindowCount;
1421 BOOLEAN bRTSLongProtOn;
1422 BOOLEAN bLastAtheros;
1423 BOOLEAN bCurrentAtheros;
1424 BOOLEAN bNowAtherosBurstOn;
1425 BOOLEAN bNextDisableRxBA;
1427 } IOT_STRUC, *PIOT_STRUC;
1429 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1430 typedef union _REG_TRANSMIT_SETTING {
1434 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1436 UINT32 STBC:1; //SPACE
1443 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1445 typedef union _DESIRED_TRANSMIT_SETTING {
1447 USHORT MCS:7; // MCS
1449 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1453 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1456 BOOLEAN IsRecipient;
1457 UCHAR MACAddr[MAC_ADDR_LEN];
1461 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1462 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1465 // Multiple SSID structure
1467 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1468 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1470 /* clear bcmc TIM bit */
1471 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1472 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1474 /* set bcmc TIM bit */
1475 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1476 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1478 /* clear a station PS TIM bit */
1479 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1480 { UCHAR tim_offset = wcid >> 3; \
1481 UCHAR bit_offset = wcid & 0x7; \
1482 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1484 /* set a station PS TIM bit */
1485 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1486 { UCHAR tim_offset = wcid >> 3; \
1487 UCHAR bit_offset = wcid & 0x7; \
1488 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1491 #define BEACON_BITMAP_MASK 0xff
1492 typedef struct _BEACON_SYNC_STRUCT_
1494 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1495 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1496 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1497 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1498 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1499 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1500 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1501 }BEACON_SYNC_STRUCT;
1504 typedef struct _MULTISSID_STRUCT {
1505 UCHAR Bssid[MAC_ADDR_LEN];
1507 CHAR Ssid[MAX_LEN_OF_SSID];
1508 USHORT CapabilityInfo;
1512 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1513 NDIS_802_11_WEP_STATUS WepStatus;
1514 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1515 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1519 ULONG ReceivedByteCount;
1520 ULONG TransmittedByteCount;
1524 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1525 RT_HT_PHY_INFO DesiredHtPhyInfo;
1526 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1527 BOOLEAN bAutoTxRateSwitch;
1531 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1532 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1533 UCHAR DesiredRatesIndex;
1534 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1536 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1546 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1547 UCHAR BANClass3Data;
1548 ULONG IsolateInterStaTraffic;
1551 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1554 UCHAR TimIELocationInBeacon;
1555 UCHAR CapabilityInfoLocationInBeacon;
1556 // outgoing BEACON frame buffer and corresponding TXWI
1557 // PTXWI_STRUC BeaconTxWI; //
1558 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1561 UINT16 StationKeepAliveTime; // unit: second
1564 USHORT VLAN_Priority;
1566 RT_802_11_ACL AccessControlList;
1569 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1570 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1572 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1574 // For 802.1x daemon setting per BSS
1575 UCHAR radius_srv_num;
1576 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1579 unsigned int mylinkid;
1583 UINT32 RcvdConflictSsidCount;
1584 UINT32 RcvdSpoofedAssocRespCount;
1585 UINT32 RcvdSpoofedReassocRespCount;
1586 UINT32 RcvdSpoofedProbeRespCount;
1587 UINT32 RcvdSpoofedBeaconCount;
1588 UINT32 RcvdSpoofedDisassocCount;
1589 UINT32 RcvdSpoofedAuthCount;
1590 UINT32 RcvdSpoofedDeauthCount;
1591 UINT32 RcvdSpoofedUnknownMgmtCount;
1592 UINT32 RcvdReplayAttackCount;
1594 CHAR RssiOfRcvdConflictSsid;
1595 CHAR RssiOfRcvdSpoofedAssocResp;
1596 CHAR RssiOfRcvdSpoofedReassocResp;
1597 CHAR RssiOfRcvdSpoofedProbeResp;
1598 CHAR RssiOfRcvdSpoofedBeacon;
1599 CHAR RssiOfRcvdSpoofedDisassoc;
1600 CHAR RssiOfRcvdSpoofedAuth;
1601 CHAR RssiOfRcvdSpoofedDeauth;
1602 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1603 CHAR RssiOfRcvdReplayAttack;
1607 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1609 // configuration common to OPMODE_AP as well as OPMODE_STA
1610 typedef struct _COMMON_CONFIG {
1612 BOOLEAN bCountryFlag;
1613 UCHAR CountryCode[3];
1615 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1616 UCHAR CountryRegionForABand; // Enum of country region for A band
1617 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1618 USHORT Dsifs; // in units of usec
1619 ULONG PacketFilter; // Packet filter for receiving
1621 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1622 UCHAR SsidLen; // the actual ssid length in used
1623 UCHAR LastSsidLen; // the actual ssid length in used
1624 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1625 UCHAR LastBssid[MAC_ADDR_LEN];
1627 UCHAR Bssid[MAC_ADDR_LEN];
1628 USHORT BeaconPeriod;
1630 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1632 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1634 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1636 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1637 UCHAR MaxDesiredRate;
1638 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1640 ULONG BasicRateBitmap; // backup basic ratebitmap
1642 BOOLEAN bAPSDCapable;
1643 BOOLEAN bInServicePeriod;
1648 BOOLEAN bNeedSendTriggerFrame;
1649 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1650 ULONG TriggerTimerCount;
1652 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1653 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1654 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1655 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1656 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1657 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1658 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1659 UCHAR RtsRate; // RATE_xxx
1660 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1661 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1662 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1664 USHORT RtsThreshold; // in unit of BYTE
1665 USHORT FragmentThreshold; // in unit of BYTE
1667 UCHAR TxPower; // in unit of mW
1668 ULONG TxPowerPercentage; // 0~100 %
1669 ULONG TxPowerDefault; // keep for TxPowerPercentage
1671 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1672 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1674 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1675 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1676 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1677 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1678 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1679 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1680 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1681 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1682 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1683 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1687 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1688 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1689 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1690 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1691 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1692 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1693 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1694 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1695 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1696 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1697 ULONG OpStatusFlags;
1699 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1700 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1702 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1705 // IEEE802.11H--DFS.
1706 RADAR_DETECT_STRUCT RadarDetect;
1709 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1710 //RT_HT_CAPABILITY SupportedHtPhy;
1711 RT_HT_CAPABILITY DesiredHtPhy;
1712 HT_CAPABILITY_IE HtCapability;
1713 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1714 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1715 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1716 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
1719 BOOLEAN bMIMOPSEnable;
1721 BOOLEAN bDisableReordering;
1722 BOOLEAN bForty_Mhz_Intolerant;
1723 BOOLEAN bExtChannelSwitchAnnouncement;
1724 BOOLEAN bRcvBSSWidthTriggerEvents;
1725 ULONG LastRcvBSSWidthTriggerEventsTime;
1729 // Enable wireless event
1730 BOOLEAN bWirelessEvent;
1731 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1733 // Tx & Rx Stream number selection
1737 // transmit phy mode, trasmit rate for Multicast.
1738 #ifdef MCAST_RATE_SPECIFIC
1739 UCHAR McastTransmitMcs;
1740 UCHAR McastTransmitPhyMode;
1741 #endif // MCAST_RATE_SPECIFIC //
1743 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1746 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1747 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1748 RT_HT_CAPABILITY SupportedHtPhy;
1749 ULONG MaxPktOneTxBulk;
1753 BEACON_SYNC_STRUCT *pBeaconSync;
1754 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1755 UINT32 BeaconAdjust;
1756 UINT32 BeaconFactor;
1757 UINT32 BeaconRemain;
1761 NDIS_SPIN_LOCK MeasureReqTabLock;
1762 PMEASURE_REQ_TAB pMeasureReqTab;
1764 NDIS_SPIN_LOCK TpcReqTabLock;
1765 PTPC_REQ_TAB pTpcReqTab;
1767 // transmit phy mode, trasmit rate for Multicast.
1768 #ifdef MCAST_RATE_SPECIFIC
1769 HTTRANSMIT_SETTING MCastPhyMode;
1770 #endif // MCAST_RATE_SPECIFIC //
1771 } COMMON_CONFIG, *PCOMMON_CONFIG;
1773 /* Modified by Wu Xi-Kun 4/21/2006 */
1774 // STA configuration and status
1775 typedef struct _STA_ADMIN_CONFIG {
1777 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1778 // the user intended configuration, but not necessary fully equal to the final
1779 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1780 // AP or IBSS holder).
1781 // Once initialized, user configuration can only be changed via OID_xxx
1782 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1783 USHORT AtimWin; // used when starting a new IBSS
1786 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1787 // the user intended configuration, and should be always applied to the final
1788 // settings in ACTIVE BSS without compromising with the BSS holder.
1789 // Once initialized, user configuration can only be changed via OID_xxx
1791 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1792 USHORT DefaultListenCount; // default listen count;
1793 ULONG WindowsPowerMode; // Power mode for AC power
1794 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1795 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1796 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1797 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1799 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1800 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1801 USHORT DisassocReason;
1802 UCHAR DisassocSta[MAC_ADDR_LEN];
1803 USHORT DeauthReason;
1804 UCHAR DeauthSta[MAC_ADDR_LEN];
1805 USHORT AuthFailReason;
1806 UCHAR AuthFailSta[MAC_ADDR_LEN];
1808 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1809 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1810 NDIS_802_11_WEP_STATUS WepStatus;
1811 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1813 // Add to support different cipher suite for WPA2/WPA mode
1814 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1815 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1816 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1817 USHORT RsnCapability;
1819 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1821 UCHAR PMK[32]; // WPA PSK mode PMK
1822 UCHAR PTK[64]; // WPA PSK mode PTK
1823 UCHAR GTK[32]; // GTK from authenticator
1824 BSSID_INFO SavedPMK[PMKID_NO];
1825 UINT SavedPMKNum; // Saved PMKID number
1830 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1833 // For WPA countermeasures
1834 ULONG LastMicErrorTime; // record last MIC error time
1835 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1836 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1837 // For WPA-PSK supplicant state
1838 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1839 UCHAR ReplayCounter[8];
1840 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1841 UCHAR SNonce[32]; // SNonce for WPA-PSK
1843 UCHAR LastSNR0; // last received BEACON's SNR
1844 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1845 RSSI_SAMPLE RssiSample;
1846 ULONG NumOfAvgRssiSample;
1848 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1849 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1850 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1851 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1853 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1854 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1855 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1856 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1857 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1858 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1859 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1862 // New for WPA, windows want us to to keep association information and
1863 // Fixed IEs from last association response
1864 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1865 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1866 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1867 USHORT ResVarIELen; // Length of next VIE include EID & Length
1868 UCHAR ResVarIEs[MAX_VIE_LEN];
1871 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
1873 // New variables used for CCX 1.0
1875 BOOLEAN bCkipCmicOn;
1877 UCHAR GIV[3]; //for CCX iv
1882 LEAP_AUTH_INFO LeapAuthInfo;
1884 UCHAR NetworkChallenge[8];
1885 UCHAR NetworkChallengeResponse[24];
1886 UCHAR PeerChallenge[8];
1888 UCHAR PeerChallengeResponse[24];
1889 UCHAR SessionKey[16]; //Network session keys (NSK)
1890 RALINK_TIMER_STRUCT LeapAuthTimer;
1891 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
1893 // New control flags for CCX
1894 CCX_CONTROL CCXControl; // Master administration state
1895 BOOLEAN CCXEnable; // Actual CCX state
1896 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
1897 USHORT CCXScanTime; // Time out to wait for beacon and probe response
1898 UCHAR CCXReqType; // Current processing CCX request type
1899 BSS_TABLE CCXBssTab; // BSS Table
1900 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
1901 USHORT FrameReportLen; // Current Frame report length
1902 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
1903 USHORT RPIDensity[8]; // Array for RPI density collection
1904 // Start address of each BSS table within FrameReportBuf
1905 // It's important to update the RxPower of the corresponding Bss
1906 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
1907 USHORT BeaconToken; // Token for beacon report
1908 ULONG LastBssIndex; // Most current reported Bss index
1909 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
1910 UCHAR RMReqCnt; // Number of measurement request saved.
1911 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
1912 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
1913 // It must be the same channel with maximum duration
1914 USHORT ParallelDuration; // Maximum duration for parallel measurement
1915 UCHAR ParallelChannel; // Only one channel with parallel measurement
1916 USHORT IAPPToken; // IAPP dialog token
1917 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
1918 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
1919 // Hack for channel load and noise histogram parameters
1920 UCHAR NHFactor; // Parameter for Noise histogram
1921 UCHAR CLFactor; // Parameter for channel load
1923 UCHAR KRK[16]; //Key Refresh Key.
1924 UCHAR BTK[32]; //Base Transient Key
1925 BOOLEAN CCKMLinkUpFlag;
1926 ULONG CCKMRN; //(Re)Association request number.
1927 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
1928 UCHAR AironetCellPowerLimit; //in dBm
1929 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
1930 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
1931 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
1932 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
1933 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
1934 USHORT CCXAdjacentAPChannel;
1935 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
1937 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
1938 BOOLEAN StaQuickResponeForRateUpTimerRunning;
1940 UCHAR DtimCount; // 0.. DtimPeriod-1
1941 UCHAR DtimPeriod; // default = 3
1943 ////////////////////////////////////////////////////////////////////////////////////////
1944 // This is only for WHQL test.
1946 ////////////////////////////////////////////////////////////////////////////////////////
1948 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
1950 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
1951 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
1954 BOOLEAN IEEE8021x_required_keys;
1955 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
1956 UCHAR DesireSharedKeyId;
1958 // 0: driver ignores wpa_supplicant
1959 // 1: wpa_supplicant initiates scanning and AP selection
1960 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
1961 UCHAR WpaSupplicantUP;
1962 UCHAR WpaSupplicantScanCount;
1967 BOOLEAN bTGnWifiTest;
1968 BOOLEAN bScanReqIsFromWebUI;
1970 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1971 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
1972 RT_HT_PHY_INFO DesiredHtPhyInfo;
1973 BOOLEAN bAutoTxRateSwitch;
1974 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
1976 // This data structure keep the current active BSS/IBSS's configuration that this STA
1977 // had agreed upon joining the network. Which means these parameters are usually decided
1978 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
1979 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
1980 // Normally, after SCAN or failed roaming attempts, we need to recover back to
1981 // the current active settings.
1982 typedef struct _STA_ACTIVE_CONFIG {
1984 USHORT AtimWin; // in kusec; IBSS parameter set element
1985 USHORT CapabilityInfo;
1986 USHORT CfpMaxDuration;
1989 // Copy supported rate from desired AP's beacon. We are trying to match
1990 // AP's supported and extended rate settings.
1991 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1992 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1995 // Copy supported ht from desired AP's beacon. We are trying to match
1996 RT_HT_PHY_INFO SupportedPhyInfo;
1997 RT_HT_CAPABILITY SupportedHtPhy;
1998 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2001 // for USB interface, avoid in interrupt when write key
2002 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2003 NDIS_802_11_MAC_ADDRESS MacAddr;
2004 USHORT MacTabMatchWCID; // ASIC
2005 CIPHER_KEY CipherKey;
2006 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2009 // ----------- start of AP --------------------------
2010 // AUTH-RSP State Machine Aux data structure
2011 typedef struct _AP_MLME_AUX {
2012 UCHAR Addr[MAC_ADDR_LEN];
2014 CHAR Challenge[CIPHER_TEXT_LEN];
2015 } AP_MLME_AUX, *PAP_MLME_AUX;
2017 // structure to define WPA Group Key Rekey Interval
2018 typedef struct PACKED _RT_802_11_WPA_REKEY {
2019 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2020 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2021 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2023 typedef struct _MAC_TABLE_ENTRY {
2024 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2025 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2026 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2027 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2028 BOOLEAN ValidAsMesh;
2029 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2031 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2033 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2035 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2036 UCHAR CMTimerRunning;
2037 UCHAR apidx; // MBSS number
2039 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2040 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2041 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2044 RALINK_TIMER_STRUCT RetryTimer;
2045 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2046 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2047 NDIS_802_11_WEP_STATUS WepStatus;
2048 AP_WPA_STATE WpaState;
2051 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2052 CIPHER_KEY PairwiseKey;
2055 UCHAR PMKID[LEN_PMKID];
2058 UCHAR Addr[MAC_ADDR_LEN];
2061 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2062 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2064 USHORT CapabilityInfo;
2066 ULONG NoDataIdleCount;
2067 UINT16 StationKeepAliveCount; // unit: second
2069 QUEUE_HEADER PsQueue;
2071 UINT32 StaConnectTime; // the live time of this station since associated with AP
2074 USHORT NoBADataCountDown;
2076 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2077 UINT TxBFCount; // 3*3
2079 UINT DebugFIFOCount;
2084 //====================================================
2085 //WDS entry needs these
2086 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2087 UINT MatchWDSTabIdx;
2088 UCHAR MaxSupportedRate;
2090 UCHAR CurrTxRateIndex;
2091 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2092 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2093 UINT32 OneSecTxNoRetryOkCount;
2094 UINT32 OneSecTxRetryOkCount;
2095 UINT32 OneSecTxFailCount;
2096 UINT32 ContinueTxFailCnt;
2097 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2098 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2099 //====================================================
2101 BOOLEAN fNoisyEnvironment;
2102 BOOLEAN fLastSecAccordingRSSI;
2103 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2104 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2105 ULONG LastTxOkCount;
2106 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2108 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2109 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2110 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2111 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2112 ULONG ClientStatusFlags;
2114 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2116 // HT EWC MIMO-N used parameters
2117 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2118 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2119 USHORT TXAutoBAbitmap;
2120 USHORT BADeclineBitmap;
2121 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2122 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2123 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2125 // 802.11n features.
2127 UCHAR MaxRAmpduFactor;
2129 UCHAR MmpsMode; // MIMO power save more.
2131 HT_CAPABILITY_IE HTCapability;
2133 BOOLEAN bAutoTxRateSwitch;
2136 struct _MAC_TABLE_ENTRY *pNext;
2137 USHORT TxSeq[NUM_OF_TID];
2138 USHORT NonQosDataSeq;
2140 RSSI_SAMPLE RssiSample;
2142 UINT32 TXMCSExpected[16];
2143 UINT32 TXMCSSuccessful[16];
2144 UINT32 TXMCSFailed[16];
2145 UINT32 TXMCSAutoFallBack[16][16];
2147 ULONG LastBeaconRxTime;
2148 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2150 typedef struct _MAC_TABLE {
2152 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2153 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2154 QUEUE_HEADER McastPsQueue;
2156 BOOLEAN fAnyStationInPsm;
2157 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2158 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2159 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2160 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2161 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2162 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2163 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2164 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2165 } MAC_TABLE, *PMAC_TABLE;
2167 #define IS_HT_STA(_pMacEntry) \
2168 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2170 #define IS_HT_RATE(_pMacEntry) \
2171 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2173 #define PEER_IS_HT_RATE(_pMacEntry) \
2174 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2176 typedef struct _WDS_ENTRY {
2178 UCHAR Addr[MAC_ADDR_LEN];
2179 ULONG NoDataIdleCount;
2180 struct _WDS_ENTRY *pNext;
2181 } WDS_ENTRY, *PWDS_ENTRY;
2183 typedef struct _WDS_TABLE_ENTRY {
2185 UCHAR WdsAddr[MAC_ADDR_LEN];
2186 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2187 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2188 UCHAR MaxSupportedRate;
2190 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2191 USHORT OneSecTxOkCount;
2192 USHORT OneSecTxRetryOkCount;
2193 USHORT OneSecTxFailCount;
2194 ULONG CurrTxRateStableTime; // # of second in current TX rate
2195 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2196 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2198 typedef struct _RT_802_11_WDS_ENTRY {
2202 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2203 UCHAR MacTabMatchWCID; // ASIC
2204 NDIS_802_11_WEP_STATUS WepStatus;
2207 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2208 RT_HT_PHY_INFO DesiredHtPhyInfo;
2209 BOOLEAN bAutoTxRateSwitch;
2210 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2211 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2213 typedef struct _WDS_TABLE {
2216 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2217 } WDS_TABLE, *PWDS_TABLE;
2219 typedef struct _APCLI_STRUCT {
2222 unsigned int mylinkid;
2224 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2225 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2226 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2228 CHAR Ssid[MAX_LEN_OF_SSID];
2231 CHAR CfgSsid[MAX_LEN_OF_SSID];
2232 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2233 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2235 ULONG ApCliRcvBeaconTime;
2237 ULONG CtrlCurrState;
2238 ULONG SyncCurrState;
2239 ULONG AuthCurrState;
2240 ULONG AssocCurrState;
2241 ULONG WpaPskCurrState;
2246 ULONG ClientStatusFlags;
2249 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2250 NDIS_802_11_WEP_STATUS WepStatus;
2252 // Add to support different cipher suite for WPA2/WPA mode
2253 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2254 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2255 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2256 USHORT RsnCapability;
2258 UCHAR PSK[100]; // reserve PSK key material
2260 UCHAR PMK[32]; // WPA PSK mode PMK
2261 UCHAR GTK[32]; // GTK from authenticator
2263 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2266 // store RSN_IE built by driver
2267 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2270 // For WPA countermeasures
2271 ULONG LastMicErrorTime; // record last MIC error time
2272 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2274 // For WPA-PSK supplicant state
2275 UCHAR SNonce[32]; // SNonce for WPA-PSK
2276 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2278 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2279 RT_HT_PHY_INFO DesiredHtPhyInfo;
2280 BOOLEAN bAutoTxRateSwitch;
2281 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2282 } APCLI_STRUCT, *PAPCLI_STRUCT;
2284 // ----------- end of AP ----------------------------
2289 BOOLEAN bGreenField;
2294 typedef struct _INF_PCI_CONFIG
2296 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2299 typedef struct _INF_USB_CONFIG
2301 UINT BulkInEpAddr; // bulk-in endpoint address
2302 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2306 #ifdef IKANOS_VX_1X0
2307 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2309 struct IKANOS_TX_INFO
2311 struct net_device *netdev;
2312 IkanosWlanTxCbFuncP *fp;
2314 #endif // IKANOS_VX_1X0 //
2317 #define DIAGNOSE_TIME 10 // 10 sec
2318 typedef struct _RtmpDiagStrcut_
2319 { // Diagnosis Related element
2320 unsigned char inited;
2322 unsigned char ArrayStartIdx;
2323 unsigned char ArrayCurIdx;
2325 USHORT TxDataCnt[DIAGNOSE_TIME];
2326 USHORT TxFailCnt[DIAGNOSE_TIME];
2327 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2328 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2329 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2331 USHORT TxAggCnt[DIAGNOSE_TIME];
2332 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2333 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2334 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2335 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2338 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2339 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2340 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2342 #endif // DBG_DIAGNOSE //
2346 // The miniport adapter structure
2348 typedef struct _RTMP_ADAPTER
2350 PVOID OS_Cookie; // save specific structure relative to OS
2356 NDIS_SPIN_LOCK irq_lock;
2360 /*****************************************************************************************/
2361 /* USB related parameters */
2362 /*****************************************************************************************/
2363 struct usb_config_descriptor *config;
2364 UINT BulkInEpAddr; // bulk-in endpoint address
2365 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2368 USHORT BulkOutMaxPacketSize;
2369 USHORT BulkInMaxPacketSize;
2371 //======Control Flags
2372 LONG PendingIoCount;
2374 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2377 //======Timer Thread
2378 RT2870_TIMER_QUEUE TimerQ;
2379 NDIS_SPIN_LOCK TimerQLock;
2384 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2386 BOOLEAN TimerFunc_kill;
2390 //======Semaphores (event)
2391 struct semaphore mlme_semaphore; /* to sleep thread on */
2392 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2393 struct semaphore RTUSBTimer_semaphore;
2395 struct completion TimerQComplete;
2396 struct completion mlmeComplete;
2397 struct completion CmdQComplete;
2398 wait_queue_head_t *wait;
2402 /*****************************************************************************************/
2403 /* Both PCI/USB related parameters */
2404 /*****************************************************************************************/
2407 /*****************************************************************************************/
2408 /* Tx related parameters */
2409 /*****************************************************************************************/
2410 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2411 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2414 // Data related context and AC specified, 4 AC supported
2415 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2416 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2418 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2419 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2421 // 4 sets of Bulk Out index and pending flag
2422 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2424 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2425 UCHAR bulkResetPipeid;
2426 BOOLEAN MgmtBulkPending;
2427 ULONG bulkResetReq[6];
2430 // resource for software backlog queues
2431 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2432 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2434 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2435 RTMP_MGMT_RING MgmtRing;
2436 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2439 /*****************************************************************************************/
2440 /* Rx related parameters */
2441 /*****************************************************************************************/
2445 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2446 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2447 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2448 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2449 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2450 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2451 ULONG TransferBufferLength; // current length of the packet buffer
2452 ULONG ReadPosition; // current read position in a packet buffer
2456 /*****************************************************************************************/
2457 /* ASIC related parameters */
2458 /*****************************************************************************************/
2459 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2461 // ---------------------------
2463 // ---------------------------
2464 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2465 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2466 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2468 BOOLEAN EepromAccess;
2471 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2473 // ---------------------------
2475 // ---------------------------
2476 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2477 UCHAR BbpRssiToDbmDelta;
2478 BBP_R66_TUNING BbpTuning;
2480 // ----------------------------
2482 // ----------------------------
2483 UCHAR RfIcType; // RFIC_xxx
2484 ULONG RfFreqOffset; // Frequency offset for channel switching
2485 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2487 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2488 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2490 // This soft Rx Antenna Diversity mechanism is used only when user set
2491 // RX Antenna = DIVERSITY ON
2492 SOFT_RX_ANT_DIVERSITY RxAnt;
2495 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2496 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2497 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2498 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2500 UCHAR ChannelListNum; // number of channel in ChannelList[]
2503 ULONG Tx20MPwrCfgABand[5];
2504 ULONG Tx20MPwrCfgGBand[5];
2505 ULONG Tx40MPwrCfgABand[5];
2506 ULONG Tx40MPwrCfgGBand[5];
2508 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2509 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2510 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2511 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2512 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2513 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2515 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2516 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2517 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2518 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2519 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2520 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2522 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2523 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2524 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2525 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2528 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2529 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2530 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2531 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2534 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2535 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2536 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2537 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2539 // ----------------------------
2541 // ----------------------------
2542 MCU_LEDCS_STRUC LedCntl;
2543 USHORT Led1; // read from EEPROM 0x3c
2544 USHORT Led2; // EEPROM 0x3e
2545 USHORT Led3; // EEPROM 0x40
2546 UCHAR LedIndicatorStregth;
2547 UCHAR RssiSingalstrengthOffet;
2548 BOOLEAN bLedOnScanning;
2551 /*****************************************************************************************/
2552 /* 802.11 related parameters */
2553 /*****************************************************************************************/
2554 // outgoing BEACON frame buffer and corresponding TXD
2555 TXWI_STRUC BeaconTxWI;
2557 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2559 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2560 PSPOLL_FRAME PsPollFrame;
2561 HEADER_802_11 NullFrame;
2564 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2565 TX_CONTEXT NullContext;
2566 TX_CONTEXT PsPollContext;
2567 TX_CONTEXT RTSContext;
2572 //=========AP===========
2575 //=======STA===========
2576 /* Modified by Wu Xi-Kun 4/21/2006 */
2577 // -----------------------------------------------
2578 // STA specific configuration & operation status
2579 // used only when pAd->OpMode == OPMODE_STA
2580 // -----------------------------------------------
2581 STA_ADMIN_CONFIG StaCfg; // user desired settings
2582 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2583 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2584 NDIS_MEDIA_STATE PreMediaState;
2586 //=======Common===========
2587 // OP mode: either AP or STA
2588 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2590 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2593 // configuration: read from Registry & E2PROM
2594 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2595 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2596 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2598 // ------------------------------------------------------
2599 // common configuration to both OPMODE_STA and OPMODE_AP
2600 // ------------------------------------------------------
2601 COMMON_CONFIG CommonCfg;
2604 // AP needs those vaiables for site survey feature.
2605 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2606 BSS_TABLE ScanTab; // store the latest SCAN result
2608 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2609 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2610 NDIS_SPIN_LOCK MacTabLock;
2614 NDIS_SPIN_LOCK BATabLock;
2615 RALINK_TIMER_STRUCT RECBATimer;
2617 // encryption/decryption KEY tables
2618 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2620 // RX re-assembly buffer for fragmentation
2621 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2624 COUNTER_802_3 Counters8023; // 802.3 counters
2625 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2626 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2627 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2628 PRIVATE_STRUC PrivateInfo; // Private information & counters
2630 // flags, see fRTMP_ADAPTER_xxx flags
2631 ULONG Flags; // Represent current device status
2633 // current TX sequence #
2636 // Control disconnect / connect event generation
2637 //+++Didn't used anymore
2642 //+++Used only for Station
2643 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2646 ULONG ExtraInfo; // Extra information for displaying status
2647 ULONG SystemErrorBitmap; // b0: E2PROM version error
2649 //+++Didn't used anymore
2650 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2653 // ---------------------------
2655 // ---------------------------
2656 RT_802_11_EVENT_TABLE EventTab;
2661 /*****************************************************************************************/
2662 /* Statistic related parameters */
2663 /*****************************************************************************************/
2665 ULONG BulkOutDataOneSecCount;
2666 ULONG BulkInDataOneSecCount;
2667 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2668 ULONG watchDogRxCnt;
2669 ULONG watchDogRxOverFlowCnt;
2670 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2673 BOOLEAN bUpdateBcnCntDone;
2674 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2675 // ----------------------------
2677 // ----------------------------
2678 BOOLEAN bBanAllBaSetup;
2679 BOOLEAN bPromiscuous;
2681 // ----------------------------
2682 // rt2860c emulation-use Parameters
2683 // ----------------------------
2686 ULONG cfendaccu[30];
2687 ULONG bacontent[16];
2688 ULONG rxint[RX_RING_SIZE+1];
2691 BOOLEAN bForcePrintTX;
2692 BOOLEAN bForcePrintRX;
2693 BOOLEAN bDisablescanning; //defined in RT2870 USB
2694 BOOLEAN bStaFifoTest;
2695 BOOLEAN bProtectionTest;
2697 BOOLEAN bGenOneHCCA;
2698 BOOLEAN bBroadComHT;
2699 //+++Following add from RT2870 USB.
2701 ULONG BulkOutComplete;
2702 ULONG BulkOutCompleteOther;
2703 ULONG BulkOutCompleteCancel; // seems not use now?
2705 ULONG BulkInComplete;
2706 ULONG BulkInCompleteFail;
2709 struct wificonf WIFItestbed;
2711 struct reordering_mpdu_pool mpdu_blk_pool;
2713 ULONG OneSecondnonBEpackets; // record non BE packets per second
2715 #if WIRELESS_EXT >= 12
2716 struct iw_statistics iw_stats;
2719 struct net_device_stats stats;
2721 ULONG TbttTickCount;
2722 #ifdef PCI_MSI_SUPPORT
2724 #endif // PCI_MSI_SUPPORT //
2729 #define TIME_BASE (1000000/OS_HZ)
2730 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2731 UCHAR flg_be_adjust;
2732 ULONG be_adjust_last_time;
2735 #ifdef IKANOS_VX_1X0
2736 struct IKANOS_TX_INFO IkanosTxInfo;
2737 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2738 #endif // IKANOS_VX_1X0 //
2742 RtmpDiagStruct DiagStruct;
2743 #endif // DBG_DIAGNOSE //
2746 UINT8 PM_FlgSuspend;
2751 BOOLEAN bEEPROMFile;
2754 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2757 // Cisco IAPP format
2759 typedef struct _CISCO_IAPP_CONTENT_
2761 USHORT Length; //IAPP Length
2762 UCHAR MessageType; //IAPP type
2763 UCHAR FunctionCode; //IAPP function type
2764 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2765 UCHAR SourceMAC[MAC_ADDR_LEN];
2766 USHORT Tag; //Tag(element IE) - Adjacent AP report
2767 USHORT TagLength; //Length of element not including 4 byte header
2768 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2769 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2772 UCHAR Ssid[MAX_LEN_OF_SSID];
2773 USHORT Seconds; //Seconds that the client has been disassociated.
2774 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2776 #define DELAYINTMASK 0x0003fffb
2777 #define INTMASK 0x0003fffb
2778 #define IndMask 0x0003fffc
2779 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2780 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2781 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2782 #define TxCoherent 0x00020000 // tx coherent
2783 #define RxCoherent 0x00010000 // rx coherent
2784 #define McuCommand 0x00000200 // mcu
2785 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2786 #define TBTTInt 0x00000800 // TBTT interrupt
2787 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2788 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2789 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2792 typedef struct _RX_BLK_
2794 RT28XX_RXD_STRUC RxD;
2796 PHEADER_802_11 pHeader;
2797 PNDIS_PACKET pRxPacket;
2801 UCHAR UserPriority; // for calculate TKIP MIC using
2805 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2806 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2807 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2810 #define fRX_WDS 0x0001
2811 #define fRX_AMSDU 0x0002
2812 #define fRX_ARALINK 0x0004
2813 #define fRX_HTC 0x0008
2814 #define fRX_PAD 0x0010
2815 #define fRX_AMPDU 0x0020
2816 #define fRX_QOS 0x0040
2817 #define fRX_INFRA 0x0080
2818 #define fRX_EAP 0x0100
2819 #define fRX_MESH 0x0200
2820 #define fRX_APCLI 0x0400
2821 #define fRX_DLS 0x0800
2822 #define fRX_WPI 0x1000
2824 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2825 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2826 #define LENGTH_ARALINK_HEADER_FIELD 2
2828 #define TX_UNKOWN_FRAME 0x00
2829 #define TX_MCAST_FRAME 0x01
2830 #define TX_LEGACY_FRAME 0x02
2831 #define TX_AMPDU_FRAME 0x04
2832 #define TX_AMSDU_FRAME 0x08
2833 #define TX_RALINK_FRAME 0x10
2834 #define TX_FRAG_FRAME 0x20
2837 // Currently the sizeof(TX_BLK) is 148 bytes.
2838 typedef struct _TX_BLK_
2841 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2842 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2843 USHORT TotalFragNum; // Total frame fragments required in one batch
2844 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2846 QUEUE_HEADER TxPacketList;
2847 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2848 HTTRANSMIT_SETTING *pTransmit;
2850 // Following structure used for the characteristics of a specific packet.
2851 PNDIS_PACKET pPacket;
2852 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2853 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2854 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2855 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2856 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2857 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2858 UCHAR HdrPadLen; // recording Header Padding Length;
2859 UCHAR apidx; // The interface associated to this packet
2860 UCHAR Wcid; // The MAC entry associated to this packet
2861 UCHAR UserPriority; // priority class of packet
2862 UCHAR FrameGap; // what kind of IFS this packet use
2863 UCHAR MpduReqNum; // number of fragments of this frame
2864 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2865 UCHAR CipherAlg; // cipher alogrithm
2870 USHORT Flags; //See following definitions for detail.
2872 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2873 ULONG Priv; // Hardware specific value saved in here.
2877 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2878 #define fTX_bAckRequired 0x0002 // the packet need ack response
2879 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2880 #define fTX_bHTRate 0x0008 // allow to use HT rate
2881 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2882 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2883 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2884 #define fTX_bWMM 0x0080 // QOS Data
2886 #define fTX_bClearEAPFrame 0x0100
2888 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
2891 (_pTxBlk->Flags |= _flag) \
2893 (_pTxBlk->Flags &= ~(_flag)) \
2896 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2897 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2898 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2904 //------------------------------------------------------------------------------------------
2906 static inline VOID ConvertMulticastIP2MAC(
2908 IN PUCHAR *ppMacAddr,
2909 IN UINT16 ProtoType)
2911 if (pIpAddr == NULL)
2914 if (ppMacAddr == NULL || *ppMacAddr == NULL)
2920 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2921 *(*ppMacAddr) = 0x33;
2922 *(*ppMacAddr + 1) = 0x33;
2923 *(*ppMacAddr + 2) = pIpAddr[12];
2924 *(*ppMacAddr + 3) = pIpAddr[13];
2925 *(*ppMacAddr + 4) = pIpAddr[14];
2926 *(*ppMacAddr + 5) = pIpAddr[15];
2931 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2932 *(*ppMacAddr) = 0x01;
2933 *(*ppMacAddr + 1) = 0x00;
2934 *(*ppMacAddr + 2) = 0x5e;
2935 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
2936 *(*ppMacAddr + 4) = pIpAddr[2];
2937 *(*ppMacAddr + 5) = pIpAddr[3];
2944 BOOLEAN RTMPCheckForHang(
2945 IN NDIS_HANDLE MiniportAdapterContext
2949 IN NDIS_HANDLE MiniportAdapterContext
2953 // Private routines in rtmp_init.c
2955 NDIS_STATUS RTMPAllocAdapterBlock(
2957 OUT PRTMP_ADAPTER *ppAdapter
2960 NDIS_STATUS RTMPAllocTxRxRingMemory(
2961 IN PRTMP_ADAPTER pAd
2964 NDIS_STATUS RTMPFindAdapter(
2965 IN PRTMP_ADAPTER pAd,
2966 IN NDIS_HANDLE WrapperConfigurationContext
2969 NDIS_STATUS RTMPReadParametersHook(
2970 IN PRTMP_ADAPTER pAd
2973 VOID RTMPFreeAdapter(
2974 IN PRTMP_ADAPTER pAd
2977 NDIS_STATUS NICReadRegParameters(
2978 IN PRTMP_ADAPTER pAd,
2979 IN NDIS_HANDLE WrapperConfigurationContext
2983 VOID NICInitRT30xxRFRegisters(
2984 IN PRTMP_ADAPTER pAd);
2987 VOID NICReadEEPROMParameters(
2988 IN PRTMP_ADAPTER pAd,
2989 IN PUCHAR mac_addr);
2991 VOID NICInitAsicFromEEPROM(
2992 IN PRTMP_ADAPTER pAd);
2994 VOID NICInitTxRxRingAndBacklogQueue(
2995 IN PRTMP_ADAPTER pAd);
2997 NDIS_STATUS NICInitializeAdapter(
2998 IN PRTMP_ADAPTER pAd,
2999 IN BOOLEAN bHardReset);
3001 NDIS_STATUS NICInitializeAsic(
3002 IN PRTMP_ADAPTER pAd,
3003 IN BOOLEAN bHardReset);
3006 IN PRTMP_ADAPTER pAd);
3008 VOID RTMPRingCleanUp(
3009 IN PRTMP_ADAPTER pAd,
3013 IN PRTMP_ADAPTER pAd);
3015 NDIS_STATUS DbgSendPacket(
3016 IN PRTMP_ADAPTER pAd,
3017 IN PNDIS_PACKET pPacket);
3020 IN PRTMP_ADAPTER pAd);
3022 VOID NICResetFromError(
3023 IN PRTMP_ADAPTER pAd);
3025 VOID NICEraseFirmware(
3026 IN PRTMP_ADAPTER pAd);
3028 NDIS_STATUS NICLoadFirmware(
3029 IN PRTMP_ADAPTER pAd);
3031 NDIS_STATUS NICLoadRateSwitchingParams(
3032 IN PRTMP_ADAPTER pAd);
3034 BOOLEAN NICCheckForHang(
3035 IN PRTMP_ADAPTER pAd);
3037 VOID NICUpdateFifoStaCounters(
3038 IN PRTMP_ADAPTER pAd);
3040 VOID NICUpdateRawCounters(
3041 IN PRTMP_ADAPTER pAd);
3043 ULONG RTMPNotAllZero(
3047 VOID RTMPZeroMemory(
3051 ULONG RTMPCompareMemory(
3056 VOID RTMPMoveMemory(
3069 VOID RTMPPatchMacBbpBug(
3070 IN PRTMP_ADAPTER pAd);
3072 VOID RTMPPatchCardBus(
3073 IN PRTMP_ADAPTER pAdapter);
3075 VOID RTMPPatchRalinkCardBus(
3076 IN PRTMP_ADAPTER pAdapter,
3079 ULONG RTMPReadCBConfig(
3085 VOID RTMPWriteCBConfig(
3093 IN PRTMP_ADAPTER pAd,
3094 IN PRALINK_TIMER_STRUCT pTimer,
3095 IN PVOID pTimerFunc,
3100 IN PRALINK_TIMER_STRUCT pTimer,
3105 IN PRALINK_TIMER_STRUCT pTimer,
3108 VOID RTMPCancelTimer(
3109 IN PRALINK_TIMER_STRUCT pTimer,
3110 OUT BOOLEAN *pCancelled);
3113 IN PRTMP_ADAPTER pAd,
3116 VOID RTMPSetSignalLED(
3117 IN PRTMP_ADAPTER pAd,
3118 IN NDIS_802_11_RSSI Dbm);
3120 VOID RTMPEnableRxTx(
3121 IN PRTMP_ADAPTER pAd);
3124 // prototype in action.c
3126 VOID ActionStateMachineInit(
3127 IN PRTMP_ADAPTER pAd,
3128 IN STATE_MACHINE *S,
3129 OUT STATE_MACHINE_FUNC Trans[]);
3131 VOID MlmeADDBAAction(
3132 IN PRTMP_ADAPTER pAd,
3133 IN MLME_QUEUE_ELEM *Elem);
3135 VOID MlmeDELBAAction(
3136 IN PRTMP_ADAPTER pAd,
3137 IN MLME_QUEUE_ELEM *Elem);
3140 IN PRTMP_ADAPTER pAd,
3141 IN MLME_QUEUE_ELEM *Elem);
3143 VOID MlmeInvalidAction(
3144 IN PRTMP_ADAPTER pAd,
3145 IN MLME_QUEUE_ELEM *Elem);
3148 IN PRTMP_ADAPTER pAd,
3149 IN MLME_QUEUE_ELEM *Elem);
3151 VOID PeerAddBAReqAction(
3152 IN PRTMP_ADAPTER pAd,
3153 IN MLME_QUEUE_ELEM *Elem);
3155 VOID PeerAddBARspAction(
3156 IN PRTMP_ADAPTER pAd,
3157 IN MLME_QUEUE_ELEM *Elem);
3159 VOID PeerDelBAAction(
3160 IN PRTMP_ADAPTER pAd,
3161 IN MLME_QUEUE_ELEM *Elem);
3164 IN PRTMP_ADAPTER pAd,
3165 IN MLME_QUEUE_ELEM *Elem);
3167 VOID SendPSMPAction(
3168 IN PRTMP_ADAPTER pAd,
3173 IN PRTMP_ADAPTER pAd,
3174 IN MLME_QUEUE_ELEM *Elem);
3176 VOID PeerPublicAction(
3177 IN PRTMP_ADAPTER pAd,
3178 IN MLME_QUEUE_ELEM *Elem);
3180 VOID StaPublicAction(
3181 IN PRTMP_ADAPTER pAd,
3182 IN UCHAR Bss2040Coexist);
3184 VOID PeerBSSTranAction(
3185 IN PRTMP_ADAPTER pAd,
3186 IN MLME_QUEUE_ELEM *Elem);
3189 IN PRTMP_ADAPTER pAd,
3190 IN MLME_QUEUE_ELEM *Elem);
3193 IN PRTMP_ADAPTER pAd,
3194 IN MLME_QUEUE_ELEM *Elem);
3196 VOID RECBATimerTimeout(
3197 IN PVOID SystemSpecific1,
3198 IN PVOID FunctionContext,
3199 IN PVOID SystemSpecific2,
3200 IN PVOID SystemSpecific3);
3202 VOID ORIBATimerTimeout(
3203 IN PRTMP_ADAPTER pAd);
3205 VOID SendRefreshBAR(
3206 IN PRTMP_ADAPTER pAd,
3207 IN MAC_TABLE_ENTRY *pEntry);
3210 IN PRTMP_ADAPTER pAd,
3211 IN OUT PHEADER_802_11 pHdr80211,
3217 IN PRTMP_ADAPTER pAd,
3218 IN OUT PFRAME_BAR pCntlBar,
3222 VOID InsertActField(
3223 IN PRTMP_ADAPTER pAd,
3224 OUT PUCHAR pFrameBuf,
3225 OUT PULONG pFrameLen,
3229 BOOLEAN QosBADataParse(
3230 IN PRTMP_ADAPTER pAd,
3232 IN PUCHAR p8023Header,
3236 IN UCHAR DataOffset,
3238 IN UINT CurRxIndex);
3240 BOOLEAN CntlEnqueueForRecv(
3241 IN PRTMP_ADAPTER pAd,
3244 IN PFRAME_BA_REQ pMsg);
3246 VOID BaAutoManSwitch(
3247 IN PRTMP_ADAPTER pAd);
3250 IN PRTMP_ADAPTER pAd,
3251 IN UCHAR BatRecIdx);
3254 // Private routines in rtmp_data.c
3256 BOOLEAN RTMPHandleRxDoneInterrupt(
3257 IN PRTMP_ADAPTER pAd);
3259 VOID RTMPHandleTxDoneInterrupt(
3260 IN PRTMP_ADAPTER pAd);
3262 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3263 IN PRTMP_ADAPTER pAd,
3264 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3266 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3267 IN PRTMP_ADAPTER pAd);
3269 VOID RTMPHandleTBTTInterrupt(
3270 IN PRTMP_ADAPTER pAd);
3272 VOID RTMPHandlePreTBTTInterrupt(
3273 IN PRTMP_ADAPTER pAd);
3275 void RTMPHandleTwakeupInterrupt(
3276 IN PRTMP_ADAPTER pAd);
3278 VOID RTMPHandleRxCoherentInterrupt(
3279 IN PRTMP_ADAPTER pAd);
3281 BOOLEAN TxFrameIsAggregatible(
3282 IN PRTMP_ADAPTER pAd,
3283 IN PUCHAR pPrevAddr1,
3284 IN PUCHAR p8023hdr);
3286 BOOLEAN PeerIsAggreOn(
3287 IN PRTMP_ADAPTER pAd,
3289 IN PMAC_TABLE_ENTRY pMacEntry);
3291 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3292 IN PNDIS_BUFFER pFirstBuffer,
3293 IN UCHAR DesiredOffset,
3297 NDIS_STATUS STASendPacket(
3298 IN PRTMP_ADAPTER pAd,
3299 IN PNDIS_PACKET pPacket);
3301 VOID STASendPackets(
3302 IN NDIS_HANDLE MiniportAdapterContext,
3303 IN PPNDIS_PACKET ppPacketArray,
3304 IN UINT NumberOfPackets);
3306 VOID RTMPDeQueuePacket(
3307 IN PRTMP_ADAPTER pAd,
3308 IN BOOLEAN bIntContext,
3310 IN UCHAR Max_Tx_Packets);
3312 NDIS_STATUS RTMPHardTransmit(
3313 IN PRTMP_ADAPTER pAd,
3314 IN PNDIS_PACKET pPacket,
3316 OUT PULONG pFreeTXDLeft);
3318 NDIS_STATUS STAHardTransmit(
3319 IN PRTMP_ADAPTER pAd,
3323 VOID STARxEAPOLFrameIndicate(
3324 IN PRTMP_ADAPTER pAd,
3325 IN MAC_TABLE_ENTRY *pEntry,
3327 IN UCHAR FromWhichBSSID);
3329 NDIS_STATUS RTMPFreeTXDRequest(
3330 IN PRTMP_ADAPTER pAd,
3332 IN UCHAR NumberRequired,
3333 IN PUCHAR FreeNumberIs);
3335 NDIS_STATUS MlmeHardTransmit(
3336 IN PRTMP_ADAPTER pAd,
3338 IN PNDIS_PACKET pPacket);
3340 NDIS_STATUS MlmeHardTransmitMgmtRing(
3341 IN PRTMP_ADAPTER pAd,
3343 IN PNDIS_PACKET pPacket);
3345 NDIS_STATUS MlmeHardTransmitTxRing(
3346 IN PRTMP_ADAPTER pAd,
3348 IN PNDIS_PACKET pPacket);
3350 USHORT RTMPCalcDuration(
3351 IN PRTMP_ADAPTER pAd,
3356 IN PRTMP_ADAPTER pAd,
3357 IN PTXWI_STRUC pTxWI,
3360 IN BOOLEAN InsTimestamp,
3363 IN BOOLEAN NSeq, // HW new a sequence.
3372 IN HTTRANSMIT_SETTING *pTransmit);
3375 VOID RTMPWriteTxWI_Data(
3376 IN PRTMP_ADAPTER pAd,
3377 IN OUT PTXWI_STRUC pTxWI,
3381 VOID RTMPWriteTxWI_Cache(
3382 IN PRTMP_ADAPTER pAd,
3383 IN OUT PTXWI_STRUC pTxWI,
3386 VOID RTMPWriteTxDescriptor(
3387 IN PRTMP_ADAPTER pAd,
3392 VOID RTMPSuspendMsduTransmission(
3393 IN PRTMP_ADAPTER pAd);
3395 VOID RTMPResumeMsduTransmission(
3396 IN PRTMP_ADAPTER pAd);
3398 NDIS_STATUS MiniportMMRequest(
3399 IN PRTMP_ADAPTER pAd,
3404 NDIS_STATUS MiniportDataMMRequest(
3405 IN PRTMP_ADAPTER pAd,
3410 VOID RTMPSendNullFrame(
3411 IN PRTMP_ADAPTER pAd,
3413 IN BOOLEAN bQosNull);
3415 VOID RTMPSendDisassociationFrame(
3416 IN PRTMP_ADAPTER pAd);
3418 VOID RTMPSendRTSFrame(
3419 IN PRTMP_ADAPTER pAd,
3421 IN unsigned int NextMpduSize,
3424 IN USHORT AckDuration,
3429 NDIS_STATUS RTMPApplyPacketFilter(
3430 IN PRTMP_ADAPTER pAd,
3431 IN PRT28XX_RXD_STRUC pRxD,
3432 IN PHEADER_802_11 pHeader);
3434 PQUEUE_HEADER RTMPCheckTxSwQueue(
3435 IN PRTMP_ADAPTER pAd,
3438 VOID RTMPReportMicError(
3439 IN PRTMP_ADAPTER pAd,
3440 IN PCIPHER_KEY pWpaKey);
3442 VOID WpaMicFailureReportFrame(
3443 IN PRTMP_ADAPTER pAd,
3444 IN MLME_QUEUE_ELEM *Elem);
3446 VOID WpaDisassocApAndBlockAssoc(
3447 IN PVOID SystemSpecific1,
3448 IN PVOID FunctionContext,
3449 IN PVOID SystemSpecific2,
3450 IN PVOID SystemSpecific3);
3452 NDIS_STATUS RTMPCloneNdisPacket(
3453 IN PRTMP_ADAPTER pAd,
3454 IN BOOLEAN pInsAMSDUHdr,
3455 IN PNDIS_PACKET pInPacket,
3456 OUT PNDIS_PACKET *ppOutPacket);
3458 NDIS_STATUS RTMPAllocateNdisPacket(
3459 IN PRTMP_ADAPTER pAd,
3460 IN PNDIS_PACKET *pPacket,
3466 VOID RTMPFreeNdisPacket(
3467 IN PRTMP_ADAPTER pAd,
3468 IN PNDIS_PACKET pPacket);
3470 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3471 IN PRTMP_ADAPTER pAd,
3474 BOOLEAN RTMPCheckDHCPFrame(
3475 IN PRTMP_ADAPTER pAd,
3476 IN PNDIS_PACKET pPacket);
3479 BOOLEAN RTMPCheckEtherType(
3480 IN PRTMP_ADAPTER pAd,
3481 IN PNDIS_PACKET pPacket);
3484 VOID RTMPCckBbpTuning(
3485 IN PRTMP_ADAPTER pAd,
3489 // Private routines in rtmp_wep.c
3491 VOID RTMPInitWepEngine(
3492 IN PRTMP_ADAPTER pAd,
3498 VOID RTMPEncryptData(
3499 IN PRTMP_ADAPTER pAd,
3504 BOOLEAN RTMPDecryptData(
3505 IN PRTMP_ADAPTER pAdapter,
3510 BOOLEAN RTMPSoftDecryptWEP(
3511 IN PRTMP_ADAPTER pAd,
3513 IN ULONG DataByteCnt,
3514 IN PCIPHER_KEY pGroupKey);
3517 IN PRTMP_ADAPTER pAd,
3521 IN PARCFOURCONTEXT Ctx,
3526 IN PARCFOURCONTEXT Ctx);
3528 VOID ARCFOUR_DECRYPT(
3529 IN PARCFOURCONTEXT Ctx,
3534 VOID ARCFOUR_ENCRYPT(
3535 IN PARCFOURCONTEXT Ctx,
3540 VOID WPAARCFOUR_ENCRYPT(
3541 IN PARCFOURCONTEXT Ctx,
3546 UINT RTMP_CALC_FCS32(
3555 // Asic/RF/BBP related functions
3557 VOID AsicAdjustTxPower(
3558 IN PRTMP_ADAPTER pAd);
3560 VOID AsicUpdateProtect(
3561 IN PRTMP_ADAPTER pAd,
3562 IN USHORT OperaionMode,
3564 IN BOOLEAN bDisableBGProtect,
3565 IN BOOLEAN bNonGFExist);
3567 VOID AsicSwitchChannel(
3568 IN PRTMP_ADAPTER pAd,
3572 VOID AsicLockChannel(
3573 IN PRTMP_ADAPTER pAd,
3576 VOID AsicAntennaSelect(
3577 IN PRTMP_ADAPTER pAd,
3580 VOID AsicAntennaSetting(
3581 IN PRTMP_ADAPTER pAd,
3582 IN ABGBAND_STATE BandState);
3584 VOID AsicRfTuningExec(
3585 IN PVOID SystemSpecific1,
3586 IN PVOID FunctionContext,
3587 IN PVOID SystemSpecific2,
3588 IN PVOID SystemSpecific3);
3590 VOID AsicSleepThenAutoWakeup(
3591 IN PRTMP_ADAPTER pAd,
3592 IN USHORT TbttNumToNextWakeUp);
3594 VOID AsicForceSleep(
3595 IN PRTMP_ADAPTER pAd);
3597 VOID AsicForceWakeup(
3598 IN PRTMP_ADAPTER pAd,
3599 IN BOOLEAN bFromTx);
3602 IN PRTMP_ADAPTER pAd,
3605 VOID AsicSetMcastWC(
3606 IN PRTMP_ADAPTER pAd);
3608 VOID AsicDelWcidTab(
3609 IN PRTMP_ADAPTER pAd,
3613 IN PRTMP_ADAPTER pAd);
3615 VOID AsicDisableRDG(
3616 IN PRTMP_ADAPTER pAd);
3618 VOID AsicDisableSync(
3619 IN PRTMP_ADAPTER pAd);
3621 VOID AsicEnableBssSync(
3622 IN PRTMP_ADAPTER pAd);
3624 VOID AsicEnableIbssSync(
3625 IN PRTMP_ADAPTER pAd);
3627 VOID AsicSetEdcaParm(
3628 IN PRTMP_ADAPTER pAd,
3629 IN PEDCA_PARM pEdcaParm);
3631 VOID AsicSetSlotTime(
3632 IN PRTMP_ADAPTER pAd,
3633 IN BOOLEAN bUseShortSlotTime);
3635 VOID AsicAddSharedKeyEntry(
3636 IN PRTMP_ADAPTER pAd,
3644 VOID AsicRemoveSharedKeyEntry(
3645 IN PRTMP_ADAPTER pAd,
3649 VOID AsicUpdateWCIDAttribute(
3650 IN PRTMP_ADAPTER pAd,
3654 IN BOOLEAN bUsePairewiseKeyTable);
3656 VOID AsicUpdateWCIDIVEIV(
3657 IN PRTMP_ADAPTER pAd,
3662 VOID AsicUpdateRxWCIDTable(
3663 IN PRTMP_ADAPTER pAd,
3667 VOID AsicAddKeyEntry(
3668 IN PRTMP_ADAPTER pAd,
3672 IN PCIPHER_KEY pCipherKey,
3673 IN BOOLEAN bUsePairewiseKeyTable,
3676 VOID AsicAddPairwiseKeyEntry(
3677 IN PRTMP_ADAPTER pAd,
3680 IN CIPHER_KEY *pCipherKey);
3682 VOID AsicRemovePairwiseKeyEntry(
3683 IN PRTMP_ADAPTER pAd,
3687 BOOLEAN AsicSendCommandToMcu(
3688 IN PRTMP_ADAPTER pAd,
3695 VOID MacAddrRandomBssid(
3696 IN PRTMP_ADAPTER pAd,
3699 VOID MgtMacHeaderInit(
3700 IN PRTMP_ADAPTER pAd,
3701 IN OUT PHEADER_802_11 pHdr80211,
3708 IN PRTMP_ADAPTER pAd);
3711 IN PRTMP_ADAPTER pAd);
3718 IN PRTMP_ADAPTER pAd,
3721 ULONG BssTableSearch(
3726 ULONG BssSsidTableSearch(
3733 ULONG BssTableSearchWithSSID(
3740 VOID BssTableDeleteEntry(
3741 IN OUT PBSS_TABLE pTab,
3745 VOID BATableDeleteORIEntry(
3746 IN OUT PRTMP_ADAPTER pAd,
3747 IN BA_ORI_ENTRY *pBAORIEntry);
3749 VOID BATableDeleteRECEntry(
3750 IN OUT PRTMP_ADAPTER pAd,
3751 IN BA_REC_ENTRY *pBARECEntry);
3753 VOID BATableTearORIEntry(
3754 IN OUT PRTMP_ADAPTER pAd,
3757 IN BOOLEAN bForceDelete,
3760 VOID BATableTearRECEntry(
3761 IN OUT PRTMP_ADAPTER pAd,
3767 IN PRTMP_ADAPTER pAd,
3768 OUT PBSS_ENTRY pBss,
3773 IN USHORT BeaconPeriod,
3776 IN USHORT CapabilityInfo,
3778 IN UCHAR SupRateLen,
3780 IN UCHAR ExtRateLen,
3781 IN HT_CAPABILITY_IE *pHtCapability,
3782 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3783 IN UCHAR HtCapabilityLen,
3784 IN UCHAR AddHtInfoLen,
3785 IN UCHAR NewExtChanOffset,
3788 IN LARGE_INTEGER TimeStamp,
3790 IN PEDCA_PARM pEdcaParm,
3791 IN PQOS_CAPABILITY_PARM pQosCapability,
3792 IN PQBSS_LOAD_PARM pQbssLoad,
3793 IN USHORT LengthVIE,
3794 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3796 ULONG BssTableSetEntry(
3797 IN PRTMP_ADAPTER pAd,
3798 OUT PBSS_TABLE pTab,
3803 IN USHORT BeaconPeriod,
3806 IN USHORT CapabilityInfo,
3808 IN UCHAR SupRateLen,
3810 IN UCHAR ExtRateLen,
3811 IN HT_CAPABILITY_IE *pHtCapability,
3812 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3813 IN UCHAR HtCapabilityLen,
3814 IN UCHAR AddHtInfoLen,
3815 IN UCHAR NewExtChanOffset,
3818 IN LARGE_INTEGER TimeStamp,
3820 IN PEDCA_PARM pEdcaParm,
3821 IN PQOS_CAPABILITY_PARM pQosCapability,
3822 IN PQBSS_LOAD_PARM pQbssLoad,
3823 IN USHORT LengthVIE,
3824 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3826 VOID BATableInsertEntry(
3827 IN PRTMP_ADAPTER pAd,
3829 IN USHORT TimeOutValue,
3830 IN USHORT StartingSeq,
3833 IN UCHAR OriginatorStatus,
3834 IN BOOLEAN IsRecipient);
3836 VOID BssTableSsidSort(
3837 IN PRTMP_ADAPTER pAd,
3838 OUT BSS_TABLE *OutTab,
3842 VOID BssTableSortByRssi(
3843 IN OUT BSS_TABLE *OutTab);
3845 VOID BssCipherParse(
3846 IN OUT PBSS_ENTRY pBss);
3848 NDIS_STATUS MlmeQueueInit(
3849 IN MLME_QUEUE *Queue);
3851 VOID MlmeQueueDestroy(
3852 IN MLME_QUEUE *Queue);
3854 BOOLEAN MlmeEnqueue(
3855 IN PRTMP_ADAPTER pAd,
3861 BOOLEAN MlmeEnqueueForRecv(
3862 IN PRTMP_ADAPTER pAd,
3864 IN ULONG TimeStampHigh,
3865 IN ULONG TimeStampLow,
3874 BOOLEAN MlmeDequeue(
3875 IN MLME_QUEUE *Queue,
3876 OUT MLME_QUEUE_ELEM **Elem);
3878 VOID MlmeRestartStateMachine(
3879 IN PRTMP_ADAPTER pAd);
3881 BOOLEAN MlmeQueueEmpty(
3882 IN MLME_QUEUE *Queue);
3884 BOOLEAN MlmeQueueFull(
3885 IN MLME_QUEUE *Queue);
3887 BOOLEAN MsgTypeSubst(
3888 IN PRTMP_ADAPTER pAd,
3889 IN PFRAME_802_11 pFrame,
3893 VOID StateMachineInit(
3894 IN STATE_MACHINE *Sm,
3895 IN STATE_MACHINE_FUNC Trans[],
3898 IN STATE_MACHINE_FUNC DefFunc,
3902 VOID StateMachineSetAction(
3903 IN STATE_MACHINE *S,
3906 IN STATE_MACHINE_FUNC F);
3908 VOID StateMachinePerformAction(
3909 IN PRTMP_ADAPTER pAd,
3910 IN STATE_MACHINE *S,
3911 IN MLME_QUEUE_ELEM *Elem);
3914 IN PRTMP_ADAPTER pAd,
3915 IN MLME_QUEUE_ELEM *Elem);
3917 VOID AssocStateMachineInit(
3918 IN PRTMP_ADAPTER pAd,
3919 IN STATE_MACHINE *Sm,
3920 OUT STATE_MACHINE_FUNC Trans[]);
3922 VOID ReassocTimeout(
3923 IN PVOID SystemSpecific1,
3924 IN PVOID FunctionContext,
3925 IN PVOID SystemSpecific2,
3926 IN PVOID SystemSpecific3);
3929 IN PVOID SystemSpecific1,
3930 IN PVOID FunctionContext,
3931 IN PVOID SystemSpecific2,
3932 IN PVOID SystemSpecific3);
3934 VOID DisassocTimeout(
3935 IN PVOID SystemSpecific1,
3936 IN PVOID FunctionContext,
3937 IN PVOID SystemSpecific2,
3938 IN PVOID SystemSpecific3);
3940 //----------------------------------------------
3941 VOID MlmeDisassocReqAction(
3942 IN PRTMP_ADAPTER pAd,
3943 IN MLME_QUEUE_ELEM *Elem);
3945 VOID MlmeAssocReqAction(
3946 IN PRTMP_ADAPTER pAd,
3947 IN MLME_QUEUE_ELEM *Elem);
3949 VOID MlmeReassocReqAction(
3950 IN PRTMP_ADAPTER pAd,
3951 IN MLME_QUEUE_ELEM *Elem);
3953 VOID MlmeDisassocReqAction(
3954 IN PRTMP_ADAPTER pAd,
3955 IN MLME_QUEUE_ELEM *Elem);
3957 VOID PeerAssocRspAction(
3958 IN PRTMP_ADAPTER pAd,
3959 IN MLME_QUEUE_ELEM *Elem);
3961 VOID PeerReassocRspAction(
3962 IN PRTMP_ADAPTER pAd,
3963 IN MLME_QUEUE_ELEM *Elem);
3965 VOID PeerDisassocAction(
3966 IN PRTMP_ADAPTER pAd,
3967 IN MLME_QUEUE_ELEM *Elem);
3969 VOID DisassocTimeoutAction(
3970 IN PRTMP_ADAPTER pAd,
3971 IN MLME_QUEUE_ELEM *Elem);
3973 VOID AssocTimeoutAction(
3974 IN PRTMP_ADAPTER pAd,
3975 IN MLME_QUEUE_ELEM *Elem);
3977 VOID ReassocTimeoutAction(
3978 IN PRTMP_ADAPTER pAd,
3979 IN MLME_QUEUE_ELEM *Elem);
3982 IN PRTMP_ADAPTER pAd,
3985 VOID SwitchBetweenWepAndCkip(
3986 IN PRTMP_ADAPTER pAd);
3988 VOID InvalidStateWhenAssoc(
3989 IN PRTMP_ADAPTER pAd,
3990 IN MLME_QUEUE_ELEM *Elem);
3992 VOID InvalidStateWhenReassoc(
3993 IN PRTMP_ADAPTER pAd,
3994 IN MLME_QUEUE_ELEM *Elem);
3996 VOID InvalidStateWhenDisassociate(
3997 IN PRTMP_ADAPTER pAd,
3998 IN MLME_QUEUE_ELEM *Elem);
4001 VOID MlmeCntlConfirm(
4002 IN PRTMP_ADAPTER pAd,
4008 IN PRTMP_ADAPTER pAd);
4010 VOID ComposeNullFrame(
4011 IN PRTMP_ADAPTER pAd);
4014 IN PRTMP_ADAPTER pAd,
4016 IN USHORT CapabilityInfo,
4019 IN UCHAR SupRateLen,
4021 IN UCHAR ExtRateLen,
4022 IN PEDCA_PARM pEdcaParm,
4023 IN HT_CAPABILITY_IE *pHtCapability,
4024 IN UCHAR HtCapabilityLen,
4025 IN ADD_HT_INFO_IE *pAddHtInfo);
4027 VOID AuthStateMachineInit(
4028 IN PRTMP_ADAPTER pAd,
4029 IN PSTATE_MACHINE sm,
4030 OUT STATE_MACHINE_FUNC Trans[]);
4033 IN PVOID SystemSpecific1,
4034 IN PVOID FunctionContext,
4035 IN PVOID SystemSpecific2,
4036 IN PVOID SystemSpecific3);
4038 VOID MlmeAuthReqAction(
4039 IN PRTMP_ADAPTER pAd,
4040 IN MLME_QUEUE_ELEM *Elem);
4042 VOID PeerAuthRspAtSeq2Action(
4043 IN PRTMP_ADAPTER pAd,
4044 IN MLME_QUEUE_ELEM *Elem);
4046 VOID PeerAuthRspAtSeq4Action(
4047 IN PRTMP_ADAPTER pAd,
4048 IN MLME_QUEUE_ELEM *Elem);
4050 VOID AuthTimeoutAction(
4051 IN PRTMP_ADAPTER pAd,
4052 IN MLME_QUEUE_ELEM *Elem);
4055 IN PRTMP_ADAPTER pAd,
4058 VOID MlmeDeauthReqAction(
4059 IN PRTMP_ADAPTER pAd,
4060 IN MLME_QUEUE_ELEM *Elem);
4062 VOID InvalidStateWhenAuth(
4063 IN PRTMP_ADAPTER pAd,
4064 IN MLME_QUEUE_ELEM *Elem);
4066 //=============================================
4068 VOID AuthRspStateMachineInit(
4069 IN PRTMP_ADAPTER pAd,
4070 IN PSTATE_MACHINE Sm,
4071 IN STATE_MACHINE_FUNC Trans[]);
4073 VOID PeerDeauthAction(
4074 IN PRTMP_ADAPTER pAd,
4075 IN MLME_QUEUE_ELEM *Elem);
4077 VOID PeerAuthSimpleRspGenAndSend(
4078 IN PRTMP_ADAPTER pAd,
4079 IN PHEADER_802_11 pHdr80211,
4086 // Private routines in dls.c
4089 //========================================
4091 VOID SyncStateMachineInit(
4092 IN PRTMP_ADAPTER pAd,
4093 IN STATE_MACHINE *Sm,
4094 OUT STATE_MACHINE_FUNC Trans[]);
4097 IN PVOID SystemSpecific1,
4098 IN PVOID FunctionContext,
4099 IN PVOID SystemSpecific2,
4100 IN PVOID SystemSpecific3);
4103 IN PVOID SystemSpecific1,
4104 IN PVOID FunctionContext,
4105 IN PVOID SystemSpecific2,
4106 IN PVOID SystemSpecific3);
4108 VOID MlmeScanReqAction(
4109 IN PRTMP_ADAPTER pAd,
4110 IN MLME_QUEUE_ELEM *Elem);
4112 VOID InvalidStateWhenScan(
4113 IN PRTMP_ADAPTER pAd,
4114 IN MLME_QUEUE_ELEM *Elem);
4116 VOID InvalidStateWhenJoin(
4117 IN PRTMP_ADAPTER pAd,
4118 IN MLME_QUEUE_ELEM *Elem);
4120 VOID InvalidStateWhenStart(
4121 IN PRTMP_ADAPTER pAd,
4122 IN MLME_QUEUE_ELEM *Elem);
4125 IN PRTMP_ADAPTER pAd,
4126 IN MLME_QUEUE_ELEM *Elem);
4128 VOID EnqueueProbeRequest(
4129 IN PRTMP_ADAPTER pAd);
4131 BOOLEAN ScanRunning(
4132 IN PRTMP_ADAPTER pAd);
4133 //=========================================
4136 IN PRTMP_ADAPTER pAd,
4137 IN STATE_MACHINE *S,
4138 OUT STATE_MACHINE_FUNC Trans[]);
4140 VOID MlmeCntlMachinePerformAction(
4141 IN PRTMP_ADAPTER pAd,
4142 IN STATE_MACHINE *S,
4143 IN MLME_QUEUE_ELEM *Elem);
4146 IN PRTMP_ADAPTER pAd,
4147 IN MLME_QUEUE_ELEM *Elem);
4149 VOID CntlOidScanProc(
4150 IN PRTMP_ADAPTER pAd,
4151 IN MLME_QUEUE_ELEM *Elem);
4153 VOID CntlOidSsidProc(
4154 IN PRTMP_ADAPTER pAd,
4155 IN MLME_QUEUE_ELEM * Elem);
4157 VOID CntlOidRTBssidProc(
4158 IN PRTMP_ADAPTER pAd,
4159 IN MLME_QUEUE_ELEM * Elem);
4161 VOID CntlMlmeRoamingProc(
4162 IN PRTMP_ADAPTER pAd,
4163 IN MLME_QUEUE_ELEM * Elem);
4165 VOID CntlWaitDisassocProc(
4166 IN PRTMP_ADAPTER pAd,
4167 IN MLME_QUEUE_ELEM *Elem);
4169 VOID CntlWaitJoinProc(
4170 IN PRTMP_ADAPTER pAd,
4171 IN MLME_QUEUE_ELEM *Elem);
4173 VOID CntlWaitReassocProc(
4174 IN PRTMP_ADAPTER pAd,
4175 IN MLME_QUEUE_ELEM *Elem);
4177 VOID CntlWaitStartProc(
4178 IN PRTMP_ADAPTER pAd,
4179 IN MLME_QUEUE_ELEM *Elem);
4181 VOID CntlWaitAuthProc(
4182 IN PRTMP_ADAPTER pAd,
4183 IN MLME_QUEUE_ELEM *Elem);
4185 VOID CntlWaitAuthProc2(
4186 IN PRTMP_ADAPTER pAd,
4187 IN MLME_QUEUE_ELEM *Elem);
4189 VOID CntlWaitAssocProc(
4190 IN PRTMP_ADAPTER pAd,
4191 IN MLME_QUEUE_ELEM *Elem);
4194 IN PRTMP_ADAPTER pAd,
4198 IN PRTMP_ADAPTER pAd,
4199 IN BOOLEAN IsReqFromAP);
4201 VOID IterateOnBssTab(
4202 IN PRTMP_ADAPTER pAd);
4204 VOID IterateOnBssTab2(
4205 IN PRTMP_ADAPTER pAd);;
4208 IN PRTMP_ADAPTER pAd,
4209 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4213 IN PRTMP_ADAPTER pAd,
4214 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4216 IN USHORT CapabilityInfo,
4218 IN USHORT ListenIntv);
4221 IN PRTMP_ADAPTER pAd,
4222 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4228 VOID DisassocParmFill(
4229 IN PRTMP_ADAPTER pAd,
4230 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4235 IN PRTMP_ADAPTER pAd,
4236 IN OUT MLME_START_REQ_STRUCT *StartReq,
4241 IN PRTMP_ADAPTER pAd,
4242 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4247 IN PRTMP_ADAPTER pAd);
4249 VOID EnqueueBeaconFrame(
4250 IN PRTMP_ADAPTER pAd);
4252 VOID MlmeJoinReqAction(
4253 IN PRTMP_ADAPTER pAd,
4254 IN MLME_QUEUE_ELEM *Elem);
4256 VOID MlmeScanReqAction(
4257 IN PRTMP_ADAPTER pAd,
4258 IN MLME_QUEUE_ELEM *Elem);
4260 VOID MlmeStartReqAction(
4261 IN PRTMP_ADAPTER pAd,
4262 IN MLME_QUEUE_ELEM *Elem);
4264 VOID ScanTimeoutAction(
4265 IN PRTMP_ADAPTER pAd,
4266 IN MLME_QUEUE_ELEM *Elem);
4268 VOID BeaconTimeoutAtJoinAction(
4269 IN PRTMP_ADAPTER pAd,
4270 IN MLME_QUEUE_ELEM *Elem);
4272 VOID PeerBeaconAtScanAction(
4273 IN PRTMP_ADAPTER pAd,
4274 IN MLME_QUEUE_ELEM *Elem);
4276 VOID PeerBeaconAtJoinAction(
4277 IN PRTMP_ADAPTER pAd,
4278 IN MLME_QUEUE_ELEM *Elem);
4281 IN PRTMP_ADAPTER pAd,
4282 IN MLME_QUEUE_ELEM *Elem);
4284 VOID PeerProbeReqAction(
4285 IN PRTMP_ADAPTER pAd,
4286 IN MLME_QUEUE_ELEM *Elem);
4288 VOID ScanNextChannel(
4289 IN PRTMP_ADAPTER pAd);
4291 ULONG MakeIbssBeacon(
4292 IN PRTMP_ADAPTER pAd);
4294 VOID CCXAdjacentAPReport(
4295 IN PRTMP_ADAPTER pAd);
4297 BOOLEAN MlmeScanReqSanity(
4298 IN PRTMP_ADAPTER pAd,
4304 OUT UCHAR *ScanType);
4306 BOOLEAN PeerBeaconAndProbeRspSanity(
4307 IN PRTMP_ADAPTER pAd,
4310 IN UCHAR MsgChannel,
4314 OUT UCHAR *pSsidLen,
4315 OUT UCHAR *pBssType,
4316 OUT USHORT *pBeaconPeriod,
4317 OUT UCHAR *pChannel,
4318 OUT UCHAR *pNewChannel,
4319 OUT LARGE_INTEGER *pTimestamp,
4320 OUT CF_PARM *pCfParm,
4321 OUT USHORT *pAtimWin,
4322 OUT USHORT *pCapabilityInfo,
4324 OUT UCHAR *pDtimCount,
4325 OUT UCHAR *pDtimPeriod,
4326 OUT UCHAR *pBcastFlag,
4327 OUT UCHAR *pMessageToMe,
4328 OUT UCHAR SupRate[],
4329 OUT UCHAR *pSupRateLen,
4330 OUT UCHAR ExtRate[],
4331 OUT UCHAR *pExtRateLen,
4332 OUT UCHAR *pCkipFlag,
4333 OUT UCHAR *pAironetCellPowerLimit,
4334 OUT PEDCA_PARM pEdcaParm,
4335 OUT PQBSS_LOAD_PARM pQbssLoad,
4336 OUT PQOS_CAPABILITY_PARM pQosCapability,
4337 OUT ULONG *pRalinkIe,
4338 OUT UCHAR *pHtCapabilityLen,
4339 OUT UCHAR *pPreNHtCapabilityLen,
4340 OUT HT_CAPABILITY_IE *pHtCapability,
4341 OUT UCHAR *AddHtInfoLen,
4342 OUT ADD_HT_INFO_IE *AddHtInfo,
4343 OUT UCHAR *NewExtChannel,
4344 OUT USHORT *LengthVIE,
4345 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4347 BOOLEAN PeerAddBAReqActionSanity(
4348 IN PRTMP_ADAPTER pAd,
4353 BOOLEAN PeerAddBARspActionSanity(
4354 IN PRTMP_ADAPTER pAd,
4358 BOOLEAN PeerDelBAActionSanity(
4359 IN PRTMP_ADAPTER pAd,
4364 BOOLEAN MlmeAssocReqSanity(
4365 IN PRTMP_ADAPTER pAd,
4369 OUT USHORT *CapabilityInfo,
4371 OUT USHORT *ListenIntv);
4373 BOOLEAN MlmeAuthReqSanity(
4374 IN PRTMP_ADAPTER pAd,
4381 BOOLEAN MlmeStartReqSanity(
4382 IN PRTMP_ADAPTER pAd,
4386 OUT UCHAR *Ssidlen);
4388 BOOLEAN PeerAuthSanity(
4389 IN PRTMP_ADAPTER pAd,
4396 OUT CHAR ChlgText[]);
4398 BOOLEAN PeerAssocRspSanity(
4399 IN PRTMP_ADAPTER pAd,
4403 OUT USHORT *pCapabilityInfo,
4404 OUT USHORT *pStatus,
4406 OUT UCHAR SupRate[],
4407 OUT UCHAR *pSupRateLen,
4408 OUT UCHAR ExtRate[],
4409 OUT UCHAR *pExtRateLen,
4410 OUT HT_CAPABILITY_IE *pHtCapability,
4411 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4412 OUT UCHAR *pHtCapabilityLen,
4413 OUT UCHAR *pAddHtInfoLen,
4414 OUT UCHAR *pNewExtChannelOffset,
4415 OUT PEDCA_PARM pEdcaParm,
4416 OUT UCHAR *pCkipFlag);
4418 BOOLEAN PeerDisassocSanity(
4419 IN PRTMP_ADAPTER pAd,
4423 OUT USHORT *Reason);
4425 BOOLEAN PeerWpaMessageSanity(
4426 IN PRTMP_ADAPTER pAd,
4427 IN PEAPOL_PACKET pMsg,
4430 IN MAC_TABLE_ENTRY *pEntry);
4432 BOOLEAN PeerDeauthSanity(
4433 IN PRTMP_ADAPTER pAd,
4437 OUT USHORT *Reason);
4439 BOOLEAN PeerProbeReqSanity(
4440 IN PRTMP_ADAPTER pAd,
4445 OUT UCHAR *pSsidLen);
4451 OUT UCHAR *BcastFlag,
4452 OUT UCHAR *DtimCount,
4453 OUT UCHAR *DtimPeriod,
4454 OUT UCHAR *MessageToMe);
4456 UCHAR ChannelSanity(
4457 IN PRTMP_ADAPTER pAd,
4460 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4461 IN PBSS_ENTRY pBss);
4463 BOOLEAN MlmeDelBAReqSanity(
4464 IN PRTMP_ADAPTER pAd,
4468 BOOLEAN MlmeAddBAReqSanity(
4469 IN PRTMP_ADAPTER pAd,
4474 ULONG MakeOutgoingFrame(
4476 OUT ULONG *Length, ...);
4479 IN PRTMP_ADAPTER pAd,
4483 IN PRTMP_ADAPTER pAd);
4485 VOID AsicUpdateAutoFallBackTable(
4486 IN PRTMP_ADAPTER pAd,
4489 VOID MlmePeriodicExec(
4490 IN PVOID SystemSpecific1,
4491 IN PVOID FunctionContext,
4492 IN PVOID SystemSpecific2,
4493 IN PVOID SystemSpecific3);
4496 IN PVOID SystemSpecific1,
4497 IN PVOID FunctionContext,
4498 IN PVOID SystemSpecific2,
4499 IN PVOID SystemSpecific3);
4502 IN PVOID SystemSpecific1,
4503 IN PVOID FunctionContext,
4504 IN PVOID SystemSpecific2,
4505 IN PVOID SystemSpecific3);
4507 VOID STAMlmePeriodicExec(
4511 IN PRTMP_ADAPTER pAd);
4513 VOID MlmeAutoReconnectLastSSID(
4514 IN PRTMP_ADAPTER pAd);
4516 BOOLEAN MlmeValidateSSID(
4520 VOID MlmeCheckForRoaming(
4521 IN PRTMP_ADAPTER pAd,
4524 VOID MlmeCheckForFastRoaming(
4525 IN PRTMP_ADAPTER pAd,
4528 VOID MlmeDynamicTxRateSwitching(
4529 IN PRTMP_ADAPTER pAd);
4532 IN PRTMP_ADAPTER pAd,
4533 IN PMAC_TABLE_ENTRY pEntry,
4534 IN PRTMP_TX_RATE_SWITCH pTxRate);
4536 VOID MlmeSelectTxRateTable(
4537 IN PRTMP_ADAPTER pAd,
4538 IN PMAC_TABLE_ENTRY pEntry,
4540 IN PUCHAR pTableSize,
4541 IN PUCHAR pInitTxRateIdx);
4543 VOID MlmeCalculateChannelQuality(
4544 IN PRTMP_ADAPTER pAd,
4547 VOID MlmeCheckPsmChange(
4548 IN PRTMP_ADAPTER pAd,
4552 IN PRTMP_ADAPTER pAd,
4555 VOID MlmeSetTxPreamble(
4556 IN PRTMP_ADAPTER pAd,
4557 IN USHORT TxPreamble);
4559 VOID UpdateBasicRateBitmap(
4560 IN PRTMP_ADAPTER pAd);
4562 VOID MlmeUpdateTxRates(
4563 IN PRTMP_ADAPTER pAd,
4567 VOID MlmeUpdateHtTxRates(
4568 IN PRTMP_ADAPTER pAd,
4571 VOID RTMPCheckRates(
4572 IN PRTMP_ADAPTER pAd,
4573 IN OUT UCHAR SupRate[],
4574 IN OUT UCHAR *SupRateLen);
4576 BOOLEAN RTMPCheckChannel(
4577 IN PRTMP_ADAPTER pAd,
4578 IN UCHAR CentralChannel,
4581 BOOLEAN RTMPCheckHt(
4582 IN PRTMP_ADAPTER pAd,
4584 IN OUT HT_CAPABILITY_IE *pHtCapability,
4585 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
4587 VOID StaQuickResponeForRateUpExec(
4588 IN PVOID SystemSpecific1,
4589 IN PVOID FunctionContext,
4590 IN PVOID SystemSpecific2,
4591 IN PVOID SystemSpecific3);
4593 VOID AsicBbpTuning1(
4594 IN PRTMP_ADAPTER pAd);
4596 VOID AsicBbpTuning2(
4597 IN PRTMP_ADAPTER pAd);
4599 VOID RTMPUpdateMlmeRate(
4600 IN PRTMP_ADAPTER pAd);
4603 IN PRTMP_ADAPTER pAd,
4610 IN PRTMP_ADAPTER pAd,
4614 VOID AsicEvaluateRxAnt(
4615 IN PRTMP_ADAPTER pAd);
4617 VOID AsicRxAntEvalTimeout(
4618 IN PVOID SystemSpecific1,
4619 IN PVOID FunctionContext,
4620 IN PVOID SystemSpecific2,
4621 IN PVOID SystemSpecific3);
4623 VOID APSDPeriodicExec(
4624 IN PVOID SystemSpecific1,
4625 IN PVOID FunctionContext,
4626 IN PVOID SystemSpecific2,
4627 IN PVOID SystemSpecific3);
4629 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4630 IN PRTMP_ADAPTER pAd,
4631 IN PMAC_TABLE_ENTRY pEntry);
4633 UCHAR RTMPStaFixedTxMode(
4634 IN PRTMP_ADAPTER pAd,
4635 IN PMAC_TABLE_ENTRY pEntry);
4637 VOID RTMPUpdateLegacyTxSetting(
4638 UCHAR fixed_tx_mode,
4639 PMAC_TABLE_ENTRY pEntry);
4641 BOOLEAN RTMPAutoRateSwitchCheck(
4642 IN PRTMP_ADAPTER pAd);
4644 NDIS_STATUS MlmeInit(
4645 IN PRTMP_ADAPTER pAd);
4648 IN PRTMP_ADAPTER pAd);
4651 IN PRTMP_ADAPTER pAd);
4653 VOID MlmeResetRalinkCounters(
4654 IN PRTMP_ADAPTER pAd);
4656 VOID BuildChannelList(
4657 IN PRTMP_ADAPTER pAd);
4660 IN PRTMP_ADAPTER pAd);
4663 IN PRTMP_ADAPTER pAd,
4666 VOID ChangeToCellPowerLimit(
4667 IN PRTMP_ADAPTER pAd,
4668 IN UCHAR AironetCellPowerLimit);
4671 IN PRTMP_ADAPTER pAd,
4675 IN PRTMP_ADAPTER pAd,
4679 IN PRTMP_ADAPTER pAd);
4682 IN PRTMP_ADAPTER pAd,
4687 IN PRTMP_ADAPTER pAd);
4690 IN PRTMP_ADAPTER pAd);
4693 IN PRTMP_ADAPTER pAd);
4695 USHORT RTMP_EEPROM_READ16(
4696 IN PRTMP_ADAPTER pAd,
4699 VOID RTMP_EEPROM_WRITE16(
4700 IN PRTMP_ADAPTER pAd,
4705 // Prototypes of function definition in rtmp_tkip.c
4707 VOID RTMPInitTkipEngine(
4708 IN PRTMP_ADAPTER pAd,
4717 VOID RTMPInitMICEngine(
4718 IN PRTMP_ADAPTER pAd,
4722 IN UCHAR UserPriority,
4725 BOOLEAN RTMPTkipCompareMICValue(
4726 IN PRTMP_ADAPTER pAd,
4731 IN UCHAR UserPriority,
4734 VOID RTMPCalculateMICValue(
4735 IN PRTMP_ADAPTER pAd,
4736 IN PNDIS_PACKET pPacket,
4738 IN PCIPHER_KEY pKey,
4741 BOOLEAN RTMPTkipCompareMICValueWithLLC(
4742 IN PRTMP_ADAPTER pAd,
4750 VOID RTMPTkipAppendByte(
4751 IN PTKIP_KEY_INFO pTkip,
4754 VOID RTMPTkipAppend(
4755 IN PTKIP_KEY_INFO pTkip,
4759 VOID RTMPTkipGetMIC(
4760 IN PTKIP_KEY_INFO pTkip);
4762 BOOLEAN RTMPSoftDecryptTKIP(
4763 IN PRTMP_ADAPTER pAd,
4765 IN ULONG DataByteCnt,
4766 IN UCHAR UserPriority,
4767 IN PCIPHER_KEY pWpaKey);
4769 BOOLEAN RTMPSoftDecryptAES(
4770 IN PRTMP_ADAPTER pAd,
4772 IN ULONG DataByteCnt,
4773 IN PCIPHER_KEY pWpaKey);
4776 // Prototypes of function definition in cmm_info.c
4778 NDIS_STATUS RTMPWPARemoveKeyProc(
4779 IN PRTMP_ADAPTER pAd,
4782 VOID RTMPWPARemoveAllKeys(
4783 IN PRTMP_ADAPTER pAd);
4785 BOOLEAN RTMPCheckStrPrintAble(
4789 VOID RTMPSetPhyMode(
4790 IN PRTMP_ADAPTER pAd,
4793 VOID RTMPUpdateHTIE(
4794 IN RT_HT_CAPABILITY *pRtHt,
4796 OUT HT_CAPABILITY_IE *pHtCapability,
4797 OUT ADD_HT_INFO_IE *pAddHtInfo);
4799 VOID RTMPAddWcidAttributeEntry(
4800 IN PRTMP_ADAPTER pAd,
4804 IN MAC_TABLE_ENTRY *pEntry);
4806 CHAR *GetEncryptType(
4812 VOID RTMPIoctlGetSiteSurvey(
4813 IN PRTMP_ADAPTER pAdapter,
4814 IN struct iwreq *wrq);
4816 VOID RTMPIoctlGetMacTable(
4817 IN PRTMP_ADAPTER pAd,
4818 IN struct iwreq *wrq);
4820 VOID RTMPIndicateWPA2Status(
4821 IN PRTMP_ADAPTER pAdapter);
4823 VOID RTMPOPModeSwitching(
4824 IN PRTMP_ADAPTER pAd);
4826 VOID RTMPAddBSSIDCipher(
4827 IN PRTMP_ADAPTER pAd,
4829 IN PNDIS_802_11_KEY pKey,
4830 IN UCHAR CipherAlg);
4833 IN PRTMP_ADAPTER pAd,
4834 IN OID_SET_HT_PHYMODE *pHTPhyMode);
4836 VOID RTMPSetIndividualHT(
4837 IN PRTMP_ADAPTER pAd,
4840 VOID RTMPSendWirelessEvent(
4841 IN PRTMP_ADAPTER pAd,
4842 IN USHORT Event_flag,
4847 VOID NICUpdateCntlCounters(
4848 IN PRTMP_ADAPTER pAd,
4849 IN PHEADER_802_11 pHeader,
4851 IN PRXWI_STRUC pRxWI);
4853 // prototype in wpa.c
4855 BOOLEAN WpaMsgTypeSubst(
4859 VOID WpaPskStateMachineInit(
4860 IN PRTMP_ADAPTER pAd,
4861 IN STATE_MACHINE *S,
4862 OUT STATE_MACHINE_FUNC Trans[]);
4864 VOID WpaEAPOLKeyAction(
4865 IN PRTMP_ADAPTER pAd,
4866 IN MLME_QUEUE_ELEM *Elem);
4868 VOID WpaPairMsg1Action(
4869 IN PRTMP_ADAPTER pAd,
4870 IN MLME_QUEUE_ELEM *Elem);
4872 VOID WpaPairMsg3Action(
4873 IN PRTMP_ADAPTER pAd,
4874 IN MLME_QUEUE_ELEM *Elem);
4876 VOID WpaGroupMsg1Action(
4877 IN PRTMP_ADAPTER pAd,
4878 IN MLME_QUEUE_ELEM *Elem);
4880 VOID WpaMacHeaderInit(
4881 IN PRTMP_ADAPTER pAd,
4882 IN OUT PHEADER_802_11 pHdr80211,
4886 VOID Wpa2PairMsg1Action(
4887 IN PRTMP_ADAPTER pAd,
4888 IN MLME_QUEUE_ELEM *Elem);
4890 VOID Wpa2PairMsg3Action(
4891 IN PRTMP_ADAPTER pAd,
4892 IN MLME_QUEUE_ELEM *Elem);
4894 BOOLEAN ParseKeyData(
4895 IN PRTMP_ADAPTER pAd,
4897 IN UCHAR KeyDataLen,
4898 IN UCHAR bPairewise);
4900 VOID RTMPToWirelessSta(
4901 IN PRTMP_ADAPTER pAd,
4902 IN PUCHAR pHeader802_3,
4906 IN BOOLEAN is4wayFrame);
4934 IN PRTMP_ADAPTER pAd,
4944 IN PRTMP_ADAPTER pAd,
4949 // prototype in aironet.c
4951 VOID AironetStateMachineInit(
4952 IN PRTMP_ADAPTER pAd,
4953 IN STATE_MACHINE *S,
4954 OUT STATE_MACHINE_FUNC Trans[]);
4956 VOID AironetMsgAction(
4957 IN PRTMP_ADAPTER pAd,
4958 IN MLME_QUEUE_ELEM *Elem);
4960 VOID AironetRequestAction(
4961 IN PRTMP_ADAPTER pAd,
4962 IN MLME_QUEUE_ELEM *Elem);
4964 VOID ChannelLoadRequestAction(
4965 IN PRTMP_ADAPTER pAd,
4968 VOID NoiseHistRequestAction(
4969 IN PRTMP_ADAPTER pAd,
4972 VOID BeaconRequestAction(
4973 IN PRTMP_ADAPTER pAd,
4976 VOID AironetReportAction(
4977 IN PRTMP_ADAPTER pAd,
4978 IN MLME_QUEUE_ELEM *Elem);
4980 VOID ChannelLoadReportAction(
4981 IN PRTMP_ADAPTER pAd,
4984 VOID NoiseHistReportAction(
4985 IN PRTMP_ADAPTER pAd,
4988 VOID AironetFinalReportAction(
4989 IN PRTMP_ADAPTER pAd);
4991 VOID BeaconReportAction(
4992 IN PRTMP_ADAPTER pAd,
4995 VOID AironetAddBeaconReport(
4996 IN PRTMP_ADAPTER pAd,
4998 IN PMLME_QUEUE_ELEM pElem);
5000 VOID AironetCreateBeaconReportFromBssTable(
5001 IN PRTMP_ADAPTER pAd);
5003 VOID DBGPRINT_TX_RING(
5004 IN PRTMP_ADAPTER pAd,
5007 VOID DBGPRINT_RX_RING(
5008 IN PRTMP_ADAPTER pAd);
5011 IN PRTMP_ADAPTER pAd,
5013 IN UCHAR RssiNumber);
5015 VOID APAsicEvaluateRxAnt(
5016 IN PRTMP_ADAPTER pAd);
5019 VOID APAsicRxAntEvalTimeout(
5020 IN PRTMP_ADAPTER pAd);
5023 // function prototype in cmm_wpa.c
5025 BOOLEAN RTMPCheckWPAframe(
5026 IN PRTMP_ADAPTER pAd,
5027 IN PMAC_TABLE_ENTRY pEntry,
5029 IN ULONG DataByteCount,
5030 IN UCHAR FromWhichBSSID);
5032 VOID AES_GTK_KEY_UNWRAP(
5034 OUT UCHAR *plaintext,
5036 IN UCHAR *ciphertext);
5038 BOOLEAN RTMPCheckRSNIE(
5039 IN PRTMP_ADAPTER pAd,
5042 IN MAC_TABLE_ENTRY *pEntry,
5045 BOOLEAN RTMPParseEapolKeyData(
5046 IN PRTMP_ADAPTER pAd,
5048 IN UCHAR KeyDataLen,
5049 IN UCHAR GroupKeyIndex,
5052 IN MAC_TABLE_ENTRY *pEntry);
5054 VOID ConstructEapolMsg(
5055 IN PRTMP_ADAPTER pAd,
5056 IN UCHAR PeerAuthMode,
5057 IN UCHAR PeerWepStatus,
5058 IN UCHAR MyGroupKeyWepStatus,
5060 IN UCHAR DefaultKeyIdx,
5061 IN UCHAR *ReplayCounter,
5068 OUT PEAPOL_PACKET pMsg);
5071 IN PRTMP_ADAPTER pAd,
5072 IN UCHAR PeerWepStatus,
5074 OUT PEAPOL_PACKET pMsg);
5076 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5077 IN PRTMP_ADAPTER pAd,
5079 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5080 IN PCIPHER_KEY pShard_key);
5082 VOID ConstructEapolKeyData(
5083 IN PRTMP_ADAPTER pAd,
5084 IN UCHAR PeerAuthMode,
5085 IN UCHAR PeerWepStatus,
5086 IN UCHAR GroupKeyWepStatus,
5088 IN UCHAR DefaultKeyIdx,
5089 IN BOOLEAN bWPA2Capable,
5094 OUT PEAPOL_PACKET pMsg);
5097 IN PRTMP_ADAPTER pAd,
5103 // function prototype in ap_wpa.c
5106 BOOLEAN APWpaMsgTypeSubst(
5110 MAC_TABLE_ENTRY *PACInquiry(
5111 IN PRTMP_ADAPTER pAd,
5114 BOOLEAN RTMPCheckMcast(
5115 IN PRTMP_ADAPTER pAd,
5116 IN PEID_STRUCT eid_ptr,
5117 IN MAC_TABLE_ENTRY *pEntry);
5119 BOOLEAN RTMPCheckUcast(
5120 IN PRTMP_ADAPTER pAd,
5121 IN PEID_STRUCT eid_ptr,
5122 IN MAC_TABLE_ENTRY *pEntry);
5124 BOOLEAN RTMPCheckAUTH(
5125 IN PRTMP_ADAPTER pAd,
5126 IN PEID_STRUCT eid_ptr,
5127 IN MAC_TABLE_ENTRY *pEntry);
5129 VOID WPAStart4WayHS(
5130 IN PRTMP_ADAPTER pAd,
5131 IN MAC_TABLE_ENTRY *pEntry,
5132 IN ULONG TimeInterval);
5134 VOID WPAStart2WayGroupHS(
5135 IN PRTMP_ADAPTER pAd,
5136 IN MAC_TABLE_ENTRY *pEntry);
5138 VOID APWpaEAPPacketAction(
5139 IN PRTMP_ADAPTER pAd,
5140 IN MLME_QUEUE_ELEM *Elem);
5142 VOID APWpaEAPOLStartAction(
5143 IN PRTMP_ADAPTER pAd,
5144 IN MLME_QUEUE_ELEM *Elem);
5146 VOID APWpaEAPOLLogoffAction(
5147 IN PRTMP_ADAPTER pAd,
5148 IN MLME_QUEUE_ELEM *Elem);
5150 VOID APWpaEAPOLKeyAction(
5151 IN PRTMP_ADAPTER pAd,
5152 IN MLME_QUEUE_ELEM *Elem);
5154 VOID APWpaEAPOLASFAlertAction(
5155 IN PRTMP_ADAPTER pAd,
5156 IN MLME_QUEUE_ELEM *Elem);
5158 VOID HandleCounterMeasure(
5159 IN PRTMP_ADAPTER pAd,
5160 IN MAC_TABLE_ENTRY *pEntry);
5162 VOID PeerPairMsg2Action(
5163 IN PRTMP_ADAPTER pAd,
5164 IN MAC_TABLE_ENTRY *pEntry,
5165 IN MLME_QUEUE_ELEM *Elem);
5167 VOID PeerPairMsg4Action(
5168 IN PRTMP_ADAPTER pAd,
5169 IN MAC_TABLE_ENTRY *pEntry,
5170 IN MLME_QUEUE_ELEM *Elem);
5173 IN PVOID SystemSpecific1,
5174 IN PVOID FunctionContext,
5175 IN PVOID SystemSpecific2,
5176 IN PVOID SystemSpecific3);
5179 IN PVOID SystemSpecific1,
5180 IN PVOID FunctionContext,
5181 IN PVOID SystemSpecific2,
5182 IN PVOID SystemSpecific3);
5184 VOID EnqueueStartForPSKExec(
5185 IN PVOID SystemSpecific1,
5186 IN PVOID FunctionContext,
5187 IN PVOID SystemSpecific2,
5188 IN PVOID SystemSpecific3);
5190 VOID RTMPHandleSTAKey(
5191 IN PRTMP_ADAPTER pAdapter,
5192 IN MAC_TABLE_ENTRY *pEntry,
5193 IN MLME_QUEUE_ELEM *Elem);
5195 VOID PeerGroupMsg2Action(
5196 IN PRTMP_ADAPTER pAd,
5197 IN PMAC_TABLE_ENTRY pEntry,
5201 VOID PairDisAssocAction(
5202 IN PRTMP_ADAPTER pAd,
5203 IN PMAC_TABLE_ENTRY pEntry,
5206 VOID MlmeDeAuthAction(
5207 IN PRTMP_ADAPTER pAd,
5208 IN PMAC_TABLE_ENTRY pEntry,
5211 VOID GREKEYPeriodicExec(
5212 IN PVOID SystemSpecific1,
5213 IN PVOID FunctionContext,
5214 IN PVOID SystemSpecific2,
5215 IN PVOID SystemSpecific3);
5237 IN PRTMP_ADAPTER pAd,
5240 VOID AES_GTK_KEY_WRAP(
5242 IN UCHAR *plaintext,
5244 OUT UCHAR *ciphertext);
5247 IN PRTMP_ADAPTER pAdapter,
5251 VOID APToWirelessSta(
5252 IN PRTMP_ADAPTER pAd,
5253 IN MAC_TABLE_ENTRY *pEntry,
5254 IN PUCHAR pHeader802_3,
5258 IN BOOLEAN bClearFrame);
5260 VOID RTMPAddPMKIDCache(
5261 IN PRTMP_ADAPTER pAd,
5267 INT RTMPSearchPMKIDCache(
5268 IN PRTMP_ADAPTER pAd,
5272 VOID RTMPDeletePMKIDCache(
5273 IN PRTMP_ADAPTER pAd,
5277 VOID RTMPMaintainPMKIDCache(
5278 IN PRTMP_ADAPTER pAd);
5280 VOID RTMPSendTriggerFrame(
5281 IN PRTMP_ADAPTER pAd,
5285 IN BOOLEAN bQosNull);
5288 VOID RTMPFilterCalibration(
5289 IN PRTMP_ADAPTER pAd);
5293 VOID RTMP_SetPeriodicTimer(
5294 IN NDIS_MINIPORT_TIMER *pTimer,
5295 IN unsigned long timeout);
5297 VOID RTMP_OS_Init_Timer(
5298 IN PRTMP_ADAPTER pAd,
5299 IN NDIS_MINIPORT_TIMER *pTimer,
5300 IN TIMER_FUNCTION function,
5303 VOID RTMP_OS_Add_Timer(
5304 IN NDIS_MINIPORT_TIMER *pTimer,
5305 IN unsigned long timeout);
5307 VOID RTMP_OS_Mod_Timer(
5308 IN NDIS_MINIPORT_TIMER *pTimer,
5309 IN unsigned long timeout);
5312 VOID RTMP_OS_Del_Timer(
5313 IN NDIS_MINIPORT_TIMER *pTimer,
5314 OUT BOOLEAN *pCancelled);
5317 VOID RTMP_OS_Release_Packet(
5318 IN PRTMP_ADAPTER pAd,
5319 IN PQUEUE_ENTRY pEntry);
5324 NDIS_STATUS os_alloc_mem(
5325 IN PRTMP_ADAPTER pAd,
5329 NDIS_STATUS os_free_mem(
5330 IN PRTMP_ADAPTER pAd,
5334 void RTMP_AllocateSharedMemory(
5335 IN PRTMP_ADAPTER pAd,
5338 OUT PVOID *VirtualAddress,
5339 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5341 VOID RTMPFreeTxRxRingMemory(
5342 IN PRTMP_ADAPTER pAd);
5344 NDIS_STATUS AdapterBlockAllocateMemory(
5348 void RTMP_AllocateTxDescMemory(
5349 IN PRTMP_ADAPTER pAd,
5353 OUT PVOID *VirtualAddress,
5354 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5356 void RTMP_AllocateFirstTxBuffer(
5357 IN PRTMP_ADAPTER pAd,
5361 OUT PVOID *VirtualAddress,
5362 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5364 void RTMP_AllocateMgmtDescMemory(
5365 IN PRTMP_ADAPTER pAd,
5368 OUT PVOID *VirtualAddress,
5369 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5371 void RTMP_AllocateRxDescMemory(
5372 IN PRTMP_ADAPTER pAd,
5375 OUT PVOID *VirtualAddress,
5376 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5378 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5379 IN PRTMP_ADAPTER pAd,
5382 OUT PVOID *VirtualAddress,
5383 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5385 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5386 IN PRTMP_ADAPTER pAd,
5389 OUT PVOID *VirtualAddress);
5391 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5392 IN PRTMP_ADAPTER pAd,
5395 void RTMP_QueryPacketInfo(
5396 IN PNDIS_PACKET pPacket,
5397 OUT PACKET_INFO *pPacketInfo,
5398 OUT PUCHAR *pSrcBufVA,
5399 OUT UINT *pSrcBufLen);
5401 void RTMP_QueryNextPacketInfo(
5402 IN PNDIS_PACKET *ppPacket,
5403 OUT PACKET_INFO *pPacketInfo,
5404 OUT PUCHAR *pSrcBufVA,
5405 OUT UINT *pSrcBufLen);
5408 BOOLEAN RTMP_FillTxBlkInfo(
5409 IN RTMP_ADAPTER *pAd,
5413 PRTMP_SCATTER_GATHER_LIST
5414 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5417 void announce_802_3_packet(
5418 IN PRTMP_ADAPTER pAd,
5419 IN PNDIS_PACKET pPacket);
5422 UINT BA_Reorder_AMSDU_Annnounce(
5423 IN PRTMP_ADAPTER pAd,
5424 IN PNDIS_PACKET pPacket);
5427 UINT Handle_AMSDU_Packet(
5428 IN PRTMP_ADAPTER pAd,
5431 IN UCHAR FromWhichBSSID);
5434 void convert_802_11_to_802_3_packet(
5435 IN PRTMP_ADAPTER pAd,
5436 IN PNDIS_PACKET pPacket,
5440 IN UCHAR FromWhichBSSID);
5443 PNET_DEV get_netdev_from_bssid(
5444 IN PRTMP_ADAPTER pAd,
5445 IN UCHAR FromWhichBSSID);
5448 PNDIS_PACKET duplicate_pkt(
5449 IN PRTMP_ADAPTER pAd,
5450 IN PUCHAR pHeader802_3,
5454 IN UCHAR FromWhichBSSID);
5457 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5458 IN PRTMP_ADAPTER pAd,
5459 IN PNDIS_PACKET pOldPkt);
5461 PNDIS_PACKET duplicate_pkt_with_VLAN(
5462 IN PRTMP_ADAPTER pAd,
5463 IN PUCHAR pHeader802_3,
5467 IN UCHAR FromWhichBSSID);
5469 PNDIS_PACKET duplicate_pkt_with_WPI(
5470 IN PRTMP_ADAPTER pAd,
5471 IN PNDIS_PACKET pPacket,
5472 IN UINT32 ext_head_len,
5473 IN UINT32 ext_tail_len);
5475 UCHAR VLAN_8023_Header_Copy(
5476 IN PRTMP_ADAPTER pAd,
5477 IN PUCHAR pHeader802_3,
5480 IN UCHAR FromWhichBSSID);
5482 void ba_flush_reordering_timeout_mpdus(
5483 IN PRTMP_ADAPTER pAd,
5484 IN PBA_REC_ENTRY pBAEntry,
5488 VOID BAOriSessionSetUp(
5489 IN PRTMP_ADAPTER pAd,
5490 IN MAC_TABLE_ENTRY *pEntry,
5494 IN BOOLEAN isForced);
5496 VOID BASessionTearDownALL(
5497 IN OUT PRTMP_ADAPTER pAd,
5500 BOOLEAN OS_Need_Clone_Packet(void);
5503 VOID build_tx_packet(
5504 IN PRTMP_ADAPTER pAd,
5505 IN PNDIS_PACKET pPacket,
5510 VOID BAOriSessionTearDown(
5511 IN OUT PRTMP_ADAPTER pAd,
5514 IN BOOLEAN bPassive,
5515 IN BOOLEAN bForceSend);
5517 VOID BARecSessionTearDown(
5518 IN OUT PRTMP_ADAPTER pAd,
5521 IN BOOLEAN bPassive);
5523 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5524 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5526 ULONG AutoChBssInsertEntry(
5527 IN PRTMP_ADAPTER pAd,
5534 void AutoChBssTableInit(
5535 IN PRTMP_ADAPTER pAd);
5537 void ChannelInfoInit(
5538 IN PRTMP_ADAPTER pAd);
5540 void AutoChBssTableDestroy(
5541 IN PRTMP_ADAPTER pAd);
5543 void ChannelInfoDestroy(
5544 IN PRTMP_ADAPTER pAd);
5546 UCHAR New_ApAutoSelectChannel(
5547 IN PRTMP_ADAPTER pAd);
5549 BOOLEAN rtstrmactohex(
5553 BOOLEAN rtstrcasecmp(
5557 char *rtstrstruncasecmp(
5563 IN const char * s2);
5567 IN const char * ct);
5571 unsigned int *addr);
5573 ////////// common ioctl functions //////////
5574 INT Set_DriverVersion_Proc(
5575 IN PRTMP_ADAPTER pAd,
5578 INT Set_CountryRegion_Proc(
5579 IN PRTMP_ADAPTER pAd,
5582 INT Set_CountryRegionABand_Proc(
5583 IN PRTMP_ADAPTER pAd,
5586 INT Set_WirelessMode_Proc(
5587 IN PRTMP_ADAPTER pAd,
5590 INT Set_Channel_Proc(
5591 IN PRTMP_ADAPTER pAd,
5594 INT Set_ShortSlot_Proc(
5595 IN PRTMP_ADAPTER pAd,
5598 INT Set_TxPower_Proc(
5599 IN PRTMP_ADAPTER pAd,
5602 INT Set_BGProtection_Proc(
5603 IN PRTMP_ADAPTER pAd,
5606 INT Set_TxPreamble_Proc(
5607 IN PRTMP_ADAPTER pAd,
5610 INT Set_RTSThreshold_Proc(
5611 IN PRTMP_ADAPTER pAd,
5614 INT Set_FragThreshold_Proc(
5615 IN PRTMP_ADAPTER pAd,
5618 INT Set_TxBurst_Proc(
5619 IN PRTMP_ADAPTER pAd,
5622 #ifdef AGGREGATION_SUPPORT
5623 INT Set_PktAggregate_Proc(
5624 IN PRTMP_ADAPTER pAd,
5628 INT Set_IEEE80211H_Proc(
5629 IN PRTMP_ADAPTER pAd,
5634 IN PRTMP_ADAPTER pAd,
5638 INT Show_DescInfo_Proc(
5639 IN PRTMP_ADAPTER pAd,
5642 INT Set_ResetStatCounter_Proc(
5643 IN PRTMP_ADAPTER pAd,
5646 INT Set_BASetup_Proc(
5647 IN PRTMP_ADAPTER pAd,
5650 INT Set_BADecline_Proc(
5651 IN PRTMP_ADAPTER pAd,
5654 INT Set_BAOriTearDown_Proc(
5655 IN PRTMP_ADAPTER pAd,
5658 INT Set_BARecTearDown_Proc(
5659 IN PRTMP_ADAPTER pAd,
5663 IN PRTMP_ADAPTER pAd,
5667 IN PRTMP_ADAPTER pAd,
5671 IN PRTMP_ADAPTER pAd,
5674 INT Set_HtOpMode_Proc(
5675 IN PRTMP_ADAPTER pAd,
5678 INT Set_HtStbc_Proc(
5679 IN PRTMP_ADAPTER pAd,
5683 IN PRTMP_ADAPTER pAd,
5686 INT Set_HtExtcha_Proc(
5687 IN PRTMP_ADAPTER pAd,
5690 INT Set_HtMpduDensity_Proc(
5691 IN PRTMP_ADAPTER pAd,
5694 INT Set_HtBaWinSize_Proc(
5695 IN PRTMP_ADAPTER pAd,
5699 IN PRTMP_ADAPTER pAd,
5702 INT Set_HtLinkAdapt_Proc(
5703 IN PRTMP_ADAPTER pAd,
5706 INT Set_HtAmsdu_Proc(
5707 IN PRTMP_ADAPTER pAd,
5710 INT Set_HtAutoBa_Proc(
5711 IN PRTMP_ADAPTER pAd,
5714 INT Set_HtProtect_Proc(
5715 IN PRTMP_ADAPTER pAd,
5718 INT Set_HtMimoPs_Proc(
5719 IN PRTMP_ADAPTER pAd,
5723 INT Set_ForceShortGI_Proc(
5724 IN PRTMP_ADAPTER pAd,
5727 INT Set_ForceGF_Proc(
5728 IN PRTMP_ADAPTER pAd,
5732 IN PRTMP_ADAPTER pAd);
5734 INT Set_SendPSMPAction_Proc(
5735 IN PRTMP_ADAPTER pAd,
5738 INT Set_HtMIMOPSmode_Proc(
5739 IN PRTMP_ADAPTER pAd,
5743 INT Set_HtTxBASize_Proc(
5744 IN PRTMP_ADAPTER pAd,
5748 VOID RTMPSendDLSTearDownFrame(
5749 IN PRTMP_ADAPTER pAd,
5754 IN PRTMP_ADAPTER pAd,
5755 OUT PQUERYBA_TABLE pBAT);
5757 INT WpaCheckEapCode(
5758 IN PRTMP_ADAPTER pAd,
5763 VOID WpaSendMicFailureToWpaSupplicant(
5764 IN PRTMP_ADAPTER pAd,
5765 IN BOOLEAN bUnicast);
5767 VOID SendAssocIEsToWpaSupplicant(
5768 IN PRTMP_ADAPTER pAd);
5770 int wext_notify_event_assoc(
5771 IN RTMP_ADAPTER *pAd);
5773 VOID Handle_BSS_Width_Trigger_Events(
5774 IN PRTMP_ADAPTER pAd);
5776 void build_ext_channel_switch_ie(
5777 IN PRTMP_ADAPTER pAd,
5778 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
5780 BOOLEAN APRxDoneInterruptHandle(
5781 IN PRTMP_ADAPTER pAd);
5783 BOOLEAN STARxDoneInterruptHandle(
5784 IN PRTMP_ADAPTER pAd,
5787 // AMPDU packet indication
5788 VOID Indicate_AMPDU_Packet(
5789 IN PRTMP_ADAPTER pAd,
5791 IN UCHAR FromWhichBSSID);
5793 // AMSDU packet indication
5794 VOID Indicate_AMSDU_Packet(
5795 IN PRTMP_ADAPTER pAd,
5797 IN UCHAR FromWhichBSSID);
5799 // Normal legacy Rx packet indication
5800 VOID Indicate_Legacy_Packet(
5801 IN PRTMP_ADAPTER pAd,
5803 IN UCHAR FromWhichBSSID);
5805 VOID Indicate_EAPOL_Packet(
5806 IN PRTMP_ADAPTER pAd,
5808 IN UCHAR FromWhichBSSID);
5810 void update_os_packet_info(
5811 IN PRTMP_ADAPTER pAd,
5813 IN UCHAR FromWhichBSSID);
5815 void wlan_802_11_to_802_3_packet(
5816 IN PRTMP_ADAPTER pAd,
5818 IN PUCHAR pHeader802_3,
5819 IN UCHAR FromWhichBSSID);
5821 UINT deaggregate_AMSDU_announce(
5822 IN PRTMP_ADAPTER pAd,
5823 PNDIS_PACKET pPacket,
5827 // remove LLC and get 802_3 Header
5828 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
5830 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
5832 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
5834 _pDA = _pRxBlk->pHeader->Addr3; \
5835 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
5839 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
5841 _pDA = _pRxBlk->pHeader->Addr1; \
5842 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
5843 _pSA = _pRxBlk->pHeader->Addr2; \
5845 _pSA = _pRxBlk->pHeader->Addr3; \
5849 _pDA = _pRxBlk->pHeader->Addr1; \
5850 _pSA = _pRxBlk->pHeader->Addr2; \
5854 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
5855 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
5858 BOOLEAN APFowardWirelessStaToWirelessSta(
5859 IN PRTMP_ADAPTER pAd,
5860 IN PNDIS_PACKET pPacket,
5861 IN ULONG FromWhichBSSID);
5863 VOID Announce_or_Forward_802_3_Packet(
5864 IN PRTMP_ADAPTER pAd,
5865 IN PNDIS_PACKET pPacket,
5866 IN UCHAR FromWhichBSSID);
5868 VOID Sta_Announce_or_Forward_802_3_Packet(
5869 IN PRTMP_ADAPTER pAd,
5870 IN PNDIS_PACKET pPacket,
5871 IN UCHAR FromWhichBSSID);
5873 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
5874 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
5875 //announce_802_3_packet(_pAd, _pPacket);
5877 PNDIS_PACKET DuplicatePacket(
5878 IN PRTMP_ADAPTER pAd,
5879 IN PNDIS_PACKET pPacket,
5880 IN UCHAR FromWhichBSSID);
5883 PNDIS_PACKET ClonePacket(
5884 IN PRTMP_ADAPTER pAd,
5885 IN PNDIS_PACKET pPacket,
5890 // Normal, AMPDU or AMSDU
5891 VOID CmmRxnonRalinkFrameIndicate(
5892 IN PRTMP_ADAPTER pAd,
5894 IN UCHAR FromWhichBSSID);
5896 VOID CmmRxRalinkFrameIndicate(
5897 IN PRTMP_ADAPTER pAd,
5898 IN MAC_TABLE_ENTRY *pEntry,
5900 IN UCHAR FromWhichBSSID);
5902 VOID Update_Rssi_Sample(
5903 IN PRTMP_ADAPTER pAd,
5904 IN RSSI_SAMPLE *pRssi,
5905 IN PRXWI_STRUC pRxWI);
5907 PNDIS_PACKET GetPacketFromRxRing(
5908 IN PRTMP_ADAPTER pAd,
5909 OUT PRT28XX_RXD_STRUC pSaveRxD,
5910 OUT BOOLEAN *pbReschedule,
5911 IN OUT UINT32 *pRxPending);
5913 PNDIS_PACKET RTMPDeFragmentDataFrame(
5914 IN PRTMP_ADAPTER pAd,
5917 ////////////////////////////////////////
5919 DIDmsg_lnxind_wlansniffrm = 0x00000044,
5920 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
5921 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
5922 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
5923 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
5924 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
5925 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
5926 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
5927 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
5928 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
5929 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
5932 P80211ENUM_msgitem_status_no_value = 0x00
5935 P80211ENUM_truth_false = 0x00,
5936 P80211ENUM_truth_true = 0x01
5939 /* Definition from madwifi */
5945 } p80211item_uint32_t;
5950 #define WLAN_DEVNAMELEN_MAX 16
5951 UINT8 devname[WLAN_DEVNAMELEN_MAX];
5952 p80211item_uint32_t hosttime;
5953 p80211item_uint32_t mactime;
5954 p80211item_uint32_t channel;
5955 p80211item_uint32_t rssi;
5956 p80211item_uint32_t sq;
5957 p80211item_uint32_t signal;
5958 p80211item_uint32_t noise;
5959 p80211item_uint32_t rate;
5960 p80211item_uint32_t istx;
5961 p80211item_uint32_t frmlen;
5962 } wlan_ng_prism2_header;
5964 /* The radio capture header precedes the 802.11 header. */
5965 typedef struct PACKED _ieee80211_radiotap_header {
5966 UINT8 it_version; /* Version 0. Only increases
5967 * for drastic changes,
5968 * introduction of compatible
5969 * new fields does not count.
5972 UINT16 it_len; /* length of the whole
5973 * header in bytes, including
5974 * it_version, it_pad,
5975 * it_len, and data fields.
5977 UINT32 it_present; /* A bitmap telling which
5978 * fields are present. Set bit 31
5979 * (0x80000000) to extend the
5980 * bitmap by another 32 bits.
5981 * Additional extensions are made
5982 * by setting bit 31.
5984 }ieee80211_radiotap_header ;
5986 enum ieee80211_radiotap_type {
5987 IEEE80211_RADIOTAP_TSFT = 0,
5988 IEEE80211_RADIOTAP_FLAGS = 1,
5989 IEEE80211_RADIOTAP_RATE = 2,
5990 IEEE80211_RADIOTAP_CHANNEL = 3,
5991 IEEE80211_RADIOTAP_FHSS = 4,
5992 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
5993 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
5994 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
5995 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
5996 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
5997 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
5998 IEEE80211_RADIOTAP_ANTENNA = 11,
5999 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6000 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6003 #define WLAN_RADIOTAP_PRESENT ( \
6004 (1 << IEEE80211_RADIOTAP_TSFT) | \
6005 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6006 (1 << IEEE80211_RADIOTAP_RATE) | \
6009 typedef struct _wlan_radiotap_header {
6010 ieee80211_radiotap_header wt_ihdr;
6014 } wlan_radiotap_header;
6015 /* Definition from madwifi */
6017 void send_monitor_packets(
6018 IN PRTMP_ADAPTER pAd,
6021 #if WIRELESS_EXT >= 12
6022 // This function will be called when query /proc
6023 struct iw_statistics *rt28xx_get_wireless_stats(
6024 IN struct net_device *net_dev);
6027 VOID RTMPSetDesiredRates(
6028 IN PRTMP_ADAPTER pAdapter,
6031 INT Set_FixedTxMode_Proc(
6032 IN PRTMP_ADAPTER pAd,
6035 static inline char* GetPhyMode(
6048 case MODE_HTGREENFIELD:
6056 static inline char* GetBW(
6074 VOID RT28xxThreadTerminate(
6075 IN RTMP_ADAPTER *pAd);
6077 BOOLEAN RT28XXChipsetCheck(
6080 BOOLEAN RT28XXNetDevInit(
6082 IN struct net_device *net_dev,
6083 IN RTMP_ADAPTER *pAd);
6085 BOOLEAN RT28XXProbePostConfig(
6087 IN RTMP_ADAPTER *pAd,
6090 VOID RT28XXDMADisable(
6091 IN RTMP_ADAPTER *pAd);
6093 VOID RT28XXDMAEnable(
6094 IN RTMP_ADAPTER *pAd);
6096 VOID RT28xx_UpdateBeaconToAsic(
6097 IN RTMP_ADAPTER * pAd,
6100 IN ULONG UpdatePos);
6103 IN struct net_device *net_dev,
6104 IN OUT struct ifreq *rq,
6107 INT rt28xx_sta_ioctl(
6108 IN struct net_device *net_dev,
6109 IN OUT struct ifreq *rq,
6112 BOOLEAN RT28XXSecurityKeyAdd(
6113 IN PRTMP_ADAPTER pAd,
6116 IN MAC_TABLE_ENTRY *pEntry);
6118 ////////////////////////////////////////
6119 PNDIS_PACKET GetPacketFromRxRing(
6120 IN PRTMP_ADAPTER pAd,
6121 OUT PRT28XX_RXD_STRUC pSaveRxD,
6122 OUT BOOLEAN *pbReschedule,
6123 IN OUT UINT32 *pRxPending);
6126 void kill_thread_task(PRTMP_ADAPTER pAd);
6128 void tbtt_tasklet(unsigned long data);
6131 VOID AsicTurnOffRFClk(
6132 IN PRTMP_ADAPTER pAd,
6135 VOID AsicTurnOnRFClk(
6136 IN PRTMP_ADAPTER pAd,
6140 NTSTATUS RT30xxWriteRFRegister(
6141 IN PRTMP_ADAPTER pAd,
6145 NTSTATUS RT30xxReadRFRegister(
6146 IN PRTMP_ADAPTER pAd,
6150 //2008/09/11:KH add to support efuse<--
6151 UCHAR eFuseReadRegisters(
6152 IN PRTMP_ADAPTER pAd,
6157 VOID eFuseReadPhysical(
6158 IN PRTMP_ADAPTER pAd,
6159 IN PUSHORT lpInBuffer,
6160 IN ULONG nInBufferSize,
6161 OUT PUSHORT lpOutBuffer,
6162 IN ULONG nOutBufferSize
6166 IN PRTMP_ADAPTER pAd,
6171 VOID eFusePhysicalWriteRegisters(
6172 IN PRTMP_ADAPTER pAd,
6177 NTSTATUS eFuseWriteRegisters(
6178 IN PRTMP_ADAPTER pAd,
6183 VOID eFuseWritePhysical(
6184 IN PRTMP_ADAPTER pAd,
6186 ULONG nInBufferSize,
6188 ULONG nOutBufferSize
6191 NTSTATUS eFuseWrite(
6192 IN PRTMP_ADAPTER pAd,
6197 INT set_eFuseGetFreeBlockCount_Proc(
6198 IN PRTMP_ADAPTER pAd,
6201 INT set_eFusedump_Proc(
6202 IN PRTMP_ADAPTER pAd,
6205 INT set_eFuseLoadFromBin_Proc(
6206 IN PRTMP_ADAPTER pAd,
6209 NTSTATUS eFuseWriteRegistersFromBin(
6210 IN PRTMP_ADAPTER pAd,
6215 VOID eFusePhysicalReadRegisters(
6216 IN PRTMP_ADAPTER pAd,
6221 NDIS_STATUS NICLoadEEPROM(
6222 IN PRTMP_ADAPTER pAd);
6224 BOOLEAN bNeedLoadEEPROM(
6225 IN PRTMP_ADAPTER pAd);
6226 //2008/09/11:KH add to support efuse-->
6230 // add by johnli, RF power sequence setup
6231 VOID RT30xxLoadRFNormalModeSetup(
6232 IN PRTMP_ADAPTER pAd);
6234 VOID RT30xxLoadRFSleepModeSetup(
6235 IN PRTMP_ADAPTER pAd);
6237 VOID RT30xxReverseRFSleepModeSetup(
6238 IN PRTMP_ADAPTER pAd);
6244 // Function Prototype in rtusb_bulk.c
6246 VOID RTUSBInitTxDesc(
6247 IN PRTMP_ADAPTER pAd,
6248 IN PTX_CONTEXT pTxContext,
6249 IN UCHAR BulkOutPipeId,
6250 IN usb_complete_t Func);
6252 VOID RTUSBInitHTTxDesc(
6253 IN PRTMP_ADAPTER pAd,
6254 IN PHT_TX_CONTEXT pTxContext,
6255 IN UCHAR BulkOutPipeId,
6256 IN ULONG BulkOutSize,
6257 IN usb_complete_t Func);
6259 VOID RTUSBInitRxDesc(
6260 IN PRTMP_ADAPTER pAd,
6261 IN PRX_CONTEXT pRxContext);
6263 VOID RTUSBCleanUpDataBulkOutQueue(
6264 IN PRTMP_ADAPTER pAd);
6266 VOID RTUSBCancelPendingBulkOutIRP(
6267 IN PRTMP_ADAPTER pAd);
6269 VOID RTUSBBulkOutDataPacket(
6270 IN PRTMP_ADAPTER pAd,
6271 IN UCHAR BulkOutPipeId,
6274 VOID RTUSBBulkOutNullFrame(
6275 IN PRTMP_ADAPTER pAd);
6277 VOID RTUSBBulkOutRTSFrame(
6278 IN PRTMP_ADAPTER pAd);
6280 VOID RTUSBCancelPendingBulkInIRP(
6281 IN PRTMP_ADAPTER pAd);
6283 VOID RTUSBCancelPendingIRPs(
6284 IN PRTMP_ADAPTER pAd);
6286 VOID RTUSBBulkOutMLMEPacket(
6287 IN PRTMP_ADAPTER pAd,
6290 VOID RTUSBBulkOutPsPoll(
6291 IN PRTMP_ADAPTER pAd);
6293 VOID RTUSBCleanUpMLMEBulkOutQueue(
6294 IN PRTMP_ADAPTER pAd);
6296 VOID RTUSBKickBulkOut(
6297 IN PRTMP_ADAPTER pAd);
6299 VOID RTUSBBulkReceive(
6300 IN PRTMP_ADAPTER pAd);
6303 IN RTMP_ADAPTER *pAd);
6305 VOID RTUSBInitRxDesc(
6306 IN PRTMP_ADAPTER pAd,
6307 IN PRX_CONTEXT pRxContext);
6309 VOID RTUSBBulkRxHandle(
6310 IN unsigned long data);
6313 // Function Prototype in rtusb_io.c
6315 NTSTATUS RTUSBMultiRead(
6316 IN PRTMP_ADAPTER pAd,
6321 NTSTATUS RTUSBMultiWrite(
6322 IN PRTMP_ADAPTER pAd,
6327 NTSTATUS RTUSBMultiWrite_OneByte(
6328 IN PRTMP_ADAPTER pAd,
6332 NTSTATUS RTUSBReadBBPRegister(
6333 IN PRTMP_ADAPTER pAd,
6337 NTSTATUS RTUSBWriteBBPRegister(
6338 IN PRTMP_ADAPTER pAd,
6342 NTSTATUS RTUSBWriteRFRegister(
6343 IN PRTMP_ADAPTER pAd,
6347 NTSTATUS RT30xxWriteRFRegister(
6348 IN PRTMP_ADAPTER pAd,
6352 NTSTATUS RT30xxReadRFRegister(
6353 IN PRTMP_ADAPTER pAd,
6358 NTSTATUS RTUSB_VendorRequest(
6359 IN PRTMP_ADAPTER pAd,
6360 IN UINT32 TransferFlags,
6361 IN UCHAR ReservedBits,
6365 IN PVOID TransferBuffer,
6366 IN UINT32 TransferBufferLength);
6368 NTSTATUS RTUSBReadEEPROM(
6369 IN PRTMP_ADAPTER pAd,
6374 NTSTATUS RTUSBWriteEEPROM(
6375 IN PRTMP_ADAPTER pAd,
6380 VOID RTUSBPutToSleep(
6381 IN PRTMP_ADAPTER pAd);
6383 NTSTATUS RTUSBWakeUp(
6384 IN PRTMP_ADAPTER pAd);
6386 VOID RTUSBInitializeCmdQ(
6389 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6390 IN PRTMP_ADAPTER pAd,
6392 IN BOOLEAN SetInformation,
6393 IN PVOID pInformationBuffer,
6394 IN UINT32 InformationBufferLength);
6396 NDIS_STATUS RTUSBEnqueueInternalCmd(
6397 IN PRTMP_ADAPTER pAd,
6399 IN PVOID pInformationBuffer,
6400 IN UINT32 InformationBufferLength);
6402 VOID RTUSBDequeueCmd(
6404 OUT PCmdQElmt *pcmdqelmt);
6407 IN OUT PVOID Context);
6410 IN OUT PVOID Context);
6412 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6413 IN RTMP_ADAPTER *pAd,
6414 IN RALINK_TIMER_STRUCT *pTimer);
6416 BOOLEAN RT2870_TimerQ_Remove(
6417 IN RTMP_ADAPTER *pAd,
6418 IN RALINK_TIMER_STRUCT *pTimer);
6420 void RT2870_TimerQ_Exit(
6421 IN RTMP_ADAPTER *pAd);
6423 void RT2870_TimerQ_Init(
6424 IN RTMP_ADAPTER *pAd);
6426 VOID RT2870_BssBeaconExit(
6427 IN RTMP_ADAPTER *pAd);
6429 VOID RT2870_BssBeaconStop(
6430 IN RTMP_ADAPTER *pAd);
6432 VOID RT2870_BssBeaconStart(
6433 IN RTMP_ADAPTER * pAd);
6435 VOID RT2870_BssBeaconInit(
6436 IN RTMP_ADAPTER *pAd);
6438 VOID RT2870_WatchDog(
6439 IN RTMP_ADAPTER *pAd);
6441 NTSTATUS RTUSBWriteMACRegister(
6442 IN PRTMP_ADAPTER pAd,
6446 NTSTATUS RTUSBReadMACRegister(
6447 IN PRTMP_ADAPTER pAd,
6449 OUT PUINT32 pValue);
6451 NTSTATUS RTUSBSingleWrite(
6452 IN RTMP_ADAPTER *pAd,
6456 NTSTATUS RTUSBFirmwareRun(
6457 IN PRTMP_ADAPTER pAd);
6459 NTSTATUS RTUSBFirmwareWrite(
6460 IN PRTMP_ADAPTER pAd,
6464 NTSTATUS RTUSBFirmwareOpmode(
6465 IN PRTMP_ADAPTER pAd,
6466 OUT PUINT32 pValue);
6468 NTSTATUS RTUSBVenderReset(
6469 IN PRTMP_ADAPTER pAd);
6471 NDIS_STATUS RTUSBSetHardWareRegister(
6472 IN PRTMP_ADAPTER pAdapter,
6475 NDIS_STATUS RTUSBQueryHardWareRegister(
6476 IN PRTMP_ADAPTER pAdapter,
6480 IN PRTMP_ADAPTER pAd);
6483 NDIS_STATUS CreateThreads(
6484 IN struct net_device *net_dev );
6487 VOID MacTableInitialize(
6488 IN PRTMP_ADAPTER pAd);
6491 IN PRTMP_ADAPTER pAd,
6494 NDIS_STATUS RTMPWPAAddKeyProc(
6495 IN PRTMP_ADAPTER pAd,
6498 VOID AsicRxAntEvalAction(
6499 IN PRTMP_ADAPTER pAd);
6502 IN PRTMP_ADAPTER pAd,
6503 IN PUCHAR pHeader802_3,
6507 OUT PNDIS_PACKET *ppPacket);
6509 UINT deaggregate_AMSDU_announce(
6510 IN PRTMP_ADAPTER pAd,
6511 PNDIS_PACKET pPacket,
6515 NDIS_STATUS RTMPCheckRxError(
6516 IN PRTMP_ADAPTER pAd,
6517 IN PHEADER_802_11 pHeader,
6518 IN PRXWI_STRUC pRxWI,
6519 IN PRT28XX_RXD_STRUC pRxINFO);
6522 VOID RTUSBMlmeHardTransmit(
6523 IN PRTMP_ADAPTER pAd,
6524 IN PMGMT_STRUC pMgmt);
6530 // Function Prototype in rtusb_data.c
6532 NDIS_STATUS RTUSBFreeDescriptorRequest(
6533 IN PRTMP_ADAPTER pAd,
6534 IN UCHAR BulkOutPipeId,
6535 IN UINT32 NumberRequired);
6538 BOOLEAN RTUSBNeedQueueBackForAgg(
6539 IN RTMP_ADAPTER *pAd,
6540 IN UCHAR BulkOutPipeId);
6543 VOID RTMPWriteTxInfo(
6544 IN PRTMP_ADAPTER pAd,
6545 IN PTXINFO_STRUC pTxInfo,
6546 IN USHORT USBDMApktLen,
6553 // Function Prototype in cmm_data_2870.c
6555 USHORT RtmpUSB_WriteSubTxResource(
6556 IN PRTMP_ADAPTER pAd,
6559 OUT USHORT *FreeNumber);
6561 USHORT RtmpUSB_WriteSingleTxResource(
6562 IN PRTMP_ADAPTER pAd,
6565 OUT USHORT *FreeNumber);
6567 USHORT RtmpUSB_WriteFragTxResource(
6568 IN PRTMP_ADAPTER pAd,
6571 OUT USHORT *FreeNumber);
6573 USHORT RtmpUSB_WriteMultiTxResource(
6574 IN PRTMP_ADAPTER pAd,
6577 OUT USHORT *FreeNumber);
6579 VOID RtmpUSB_FinalWriteTxResource(
6580 IN PRTMP_ADAPTER pAd,
6582 IN USHORT totalMPDUSize,
6585 VOID RtmpUSBDataLastTxIdx(
6586 IN PRTMP_ADAPTER pAd,
6590 VOID RtmpUSBDataKickOut(
6591 IN PRTMP_ADAPTER pAd,
6596 int RtmpUSBMgmtKickOut(
6597 IN RTMP_ADAPTER *pAd,
6599 IN PNDIS_PACKET pPacket,
6600 IN PUCHAR pSrcBufVA,
6603 VOID RtmpUSBNullFrameKickOut(
6604 IN RTMP_ADAPTER *pAd,
6606 IN UCHAR *pNullFrame,
6607 IN UINT32 frameLen);
6609 VOID RT28xxUsbStaAsicForceWakeup(
6610 IN PRTMP_ADAPTER pAd,
6611 IN BOOLEAN bFromTx);
6613 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
6614 IN PRTMP_ADAPTER pAd,
6615 IN USHORT TbttNumToNextWakeUp);
6617 VOID RT28xxUsbMlmeRadioOn(
6618 IN PRTMP_ADAPTER pAd);
6620 VOID RT28xxUsbMlmeRadioOFF(
6621 IN PRTMP_ADAPTER pAd);
6624 ////////////////////////////////////////
6627 IN RTMP_ADAPTER *pAd);
6629 UINT32 QBSS_LoadElementAppend(
6630 IN RTMP_ADAPTER *pAd,
6633 VOID QBSS_LoadUpdate(
6634 IN RTMP_ADAPTER *pAd);
6636 ///////////////////////////////////////
6637 INT RTMPShowCfgValue(
6638 IN PRTMP_ADAPTER pAd,
6642 PCHAR RTMPGetRalinkAuthModeStr(
6643 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6645 PCHAR RTMPGetRalinkEncryModeStr(
6646 IN USHORT encryMode);
6647 //////////////////////////////////////
6649 VOID AsicStaBbpTuning(
6650 IN PRTMP_ADAPTER pAd);
6652 BOOLEAN StaAddMacTableEntry(
6653 IN PRTMP_ADAPTER pAd,
6654 IN PMAC_TABLE_ENTRY pEntry,
6655 IN UCHAR MaxSupportedRateIn500Kbps,
6656 IN HT_CAPABILITY_IE *pHtCapability,
6657 IN UCHAR HtCapabilityLen,
6658 IN USHORT CapabilityInfo);
6660 void RTMP_IndicateMediaState(
6661 IN PRTMP_ADAPTER pAd);
6663 VOID ReSyncBeaconTime(
6664 IN PRTMP_ADAPTER pAd);
6666 VOID RTMPSetAGCInitValue(
6667 IN PRTMP_ADAPTER pAd,
6668 IN UCHAR BandWidth);
6670 int rt28xx_close(IN PNET_DEV dev);
6671 int rt28xx_open(IN PNET_DEV dev);
6673 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6675 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6676 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6678 if (VIRTUAL_IF_NUM(pAd) == 0)
6680 if (rt28xx_open(pAd->net_dev) != 0)
6686 VIRTUAL_IF_INC(pAd);
6690 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6692 VIRTUAL_IF_DEC(pAd);
6693 if (VIRTUAL_IF_NUM(pAd) == 0)
6694 rt28xx_close(pAd->net_dev);
6699 #endif // __RTMP_H__