2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 Miniport generic portion header file
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
43 #include "link_list.h"
44 #include "spectrum_def.h"
47 #ifdef CONFIG_STA_SUPPORT
49 #endif // CONFIG_STA_SUPPORT //
53 //#define DBG_DIAGNOSE 1
55 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
56 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
57 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
59 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
60 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
63 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
64 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
65 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
68 ////////////////////////////////////////////////////////////////////////////
69 // The TX_BUFFER structure forms the transmitted USB packet to the device
70 ////////////////////////////////////////////////////////////////////////////
71 typedef struct __TX_BUFFER{
73 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
74 HEADER_802_11 NullFrame;
75 PSPOLL_FRAME PsPollPacket;
78 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
79 } TX_BUFFER, *PTX_BUFFER;
81 typedef struct __HTTX_BUFFER{
83 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
84 HEADER_802_11 NullFrame;
85 PSPOLL_FRAME PsPollPacket;
88 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
89 } HTTX_BUFFER, *PHTTX_BUFFER;
92 // used to track driver-generated write irps
93 typedef struct _TX_CONTEXT
95 PVOID pAd; //Initialized in MiniportInitialize
96 PURB pUrb; //Initialized in MiniportInitialize
97 PIRP pIrp; //used to cancel pending bulk out.
98 //Initialized in MiniportInitialize
99 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
104 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
105 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
108 BOOLEAN bAggregatible;
109 UCHAR Header_802_3[LENGTH_802_3];
113 dma_addr_t data_dma; // urb dma on linux
115 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
118 // used to track driver-generated write irps
119 typedef struct _HT_TX_CONTEXT
121 PVOID pAd; //Initialized in MiniportInitialize
122 PURB pUrb; //Initialized in MiniportInitialize
123 PIRP pIrp; //used to cancel pending bulk out.
124 //Initialized in MiniportInitialize
125 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
126 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
132 BOOLEAN bCopySavePad;
134 UCHAR Header_802_3[LENGTH_802_3];
135 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
136 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
137 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
138 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
140 dma_addr_t data_dma; // urb dma on linux
141 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
145 // Structure to keep track of receive packets and buffers to indicate
146 // receive data to the protocol.
148 typedef struct _RX_CONTEXT
150 PUCHAR TransferBuffer;
152 PIRP pIrp;//used to cancel pending bulk in.
154 //These 2 Boolean shouldn't both be 1 at the same time.
155 ULONG BulkInOffset; // number of packets waiting for reordering .
156 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
157 BOOLEAN bRxHandling; // Notify this packet is being process now.
158 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
159 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
160 BOOLEAN IRPPending; // TODO: To be removed
162 NDIS_SPIN_LOCK RxContextLock;
163 dma_addr_t data_dma; // urb dma on linux
164 } RX_CONTEXT, *PRX_CONTEXT;
169 // NDIS Version definitions
171 #ifdef NDIS50_MINIPORT
172 #define RTMP_NDIS_MAJOR_VERSION 5
173 #define RTMP_NDIS_MINOR_VERSION 0
176 #ifdef NDIS51_MINIPORT
177 #define RTMP_NDIS_MAJOR_VERSION 5
178 #define RTMP_NDIS_MINOR_VERSION 1
181 extern char NIC_VENDOR_DESC[];
182 extern int NIC_VENDOR_DESC_LEN;
184 extern unsigned char SNAP_AIRONET[];
185 extern unsigned char CipherSuiteCiscoCCKM[];
186 extern unsigned char CipherSuiteCiscoCCKMLen;
187 extern unsigned char CipherSuiteCiscoCCKM24[];
188 extern unsigned char CipherSuiteCiscoCCKM24Len;
189 extern unsigned char CipherSuiteCCXTkip[];
190 extern unsigned char CipherSuiteCCXTkipLen;
191 extern unsigned char CISCO_OUI[];
192 extern UCHAR BaSizeArray[4];
194 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
196 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
197 extern ULONG BIT32[32];
198 extern UCHAR BIT8[8];
199 extern char* CipherName[];
200 extern char* MCSToMbps[];
201 extern UCHAR RxwiMCSToOfdmRate[12];
202 extern UCHAR SNAP_802_1H[6];
203 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
204 extern UCHAR SNAP_AIRONET[8];
205 extern UCHAR CKIP_LLC_SNAP[8];
206 extern UCHAR EAPOL_LLC_SNAP[8];
207 extern UCHAR EAPOL[2];
209 extern UCHAR APPLE_TALK[2];
210 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
211 extern UCHAR OfdmRateToRxwiMCS[];
212 extern UCHAR OfdmSignalToRateId[16] ;
213 extern UCHAR default_cwmin[4];
214 extern UCHAR default_cwmax[4];
215 extern UCHAR default_sta_aifsn[4];
216 extern UCHAR MapUserPriorityToAccessCategory[8];
218 extern USHORT RateUpPER[];
219 extern USHORT RateDownPER[];
220 extern UCHAR Phy11BNextRateDownward[];
221 extern UCHAR Phy11BNextRateUpward[];
222 extern UCHAR Phy11BGNextRateDownward[];
223 extern UCHAR Phy11BGNextRateUpward[];
224 extern UCHAR Phy11ANextRateDownward[];
225 extern UCHAR Phy11ANextRateUpward[];
226 extern CHAR RssiSafeLevelForTxRate[];
227 extern UCHAR RateIdToMbps[];
228 extern USHORT RateIdTo500Kbps[];
230 extern UCHAR CipherSuiteWpaNoneTkip[];
231 extern UCHAR CipherSuiteWpaNoneTkipLen;
233 extern UCHAR CipherSuiteWpaNoneAes[];
234 extern UCHAR CipherSuiteWpaNoneAesLen;
237 extern UCHAR SupRateIe;
238 extern UCHAR ExtRateIe;
240 #ifdef DOT11_N_SUPPORT
241 extern UCHAR HtCapIe;
242 extern UCHAR AddHtInfoIe;
243 extern UCHAR NewExtChanIe;
245 extern UCHAR ExtHtCapIe;
246 #endif // DOT11N_DRAFT3 //
247 #endif // DOT11_N_SUPPORT //
257 extern UCHAR WPA_OUI[];
258 extern UCHAR RSN_OUI[];
259 extern UCHAR WME_INFO_ELEM[];
260 extern UCHAR WME_PARM_ELEM[];
261 extern UCHAR Ccx2QosInfo[];
262 extern UCHAR Ccx2IeInfo[];
263 extern UCHAR RALINK_OUI[];
264 extern UCHAR PowerConstraintIE[];
267 extern UCHAR RateSwitchTable[];
268 extern UCHAR RateSwitchTable11B[];
269 extern UCHAR RateSwitchTable11G[];
270 extern UCHAR RateSwitchTable11BG[];
272 #ifdef DOT11_N_SUPPORT
273 extern UCHAR RateSwitchTable11BGN1S[];
274 extern UCHAR RateSwitchTable11BGN2S[];
275 extern UCHAR RateSwitchTable11BGN2SForABand[];
276 extern UCHAR RateSwitchTable11N1S[];
277 extern UCHAR RateSwitchTable11N2S[];
278 extern UCHAR RateSwitchTable11N2SForABand[];
280 #ifdef CONFIG_STA_SUPPORT
281 extern UCHAR PRE_N_HT_OUI[];
282 #endif // CONFIG_STA_SUPPORT //
283 #endif // DOT11_N_SUPPORT //
285 #define MAXSEQ (0xFFF)
287 #ifdef DOT11_N_SUPPORT
288 struct reordering_mpdu
290 struct reordering_mpdu *next;
291 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
292 int Sequence; /* sequence number of MPDU */
296 struct reordering_list
298 struct reordering_mpdu *next;
302 struct reordering_mpdu_pool
306 struct reordering_list freelist;
308 #endif // DOT11_N_SUPPORT //
310 typedef struct _RSSI_SAMPLE {
311 CHAR LastRssi0; // last received RSSI
312 CHAR LastRssi1; // last received RSSI
313 CHAR LastRssi2; // last received RSSI
323 // Queue structure and macros
325 typedef struct _QUEUE_ENTRY {
326 struct _QUEUE_ENTRY *Next;
327 } QUEUE_ENTRY, *PQUEUE_ENTRY;
330 typedef struct _QUEUE_HEADER {
334 } QUEUE_HEADER, *PQUEUE_HEADER;
336 #define InitializeQueueHeader(QueueHeader) \
338 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
339 (QueueHeader)->Number = 0; \
342 #define RemoveHeadQueue(QueueHeader) \
343 (QueueHeader)->Head; \
345 PQUEUE_ENTRY pNext; \
346 if ((QueueHeader)->Head != NULL) \
348 pNext = (QueueHeader)->Head->Next; \
349 (QueueHeader)->Head = pNext; \
351 (QueueHeader)->Tail = NULL; \
352 (QueueHeader)->Number--; \
356 #define InsertHeadQueue(QueueHeader, QueueEntry) \
358 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
359 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
360 if ((QueueHeader)->Tail == NULL) \
361 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
362 (QueueHeader)->Number++; \
365 #define InsertTailQueue(QueueHeader, QueueEntry) \
367 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
368 if ((QueueHeader)->Tail) \
369 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
371 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
372 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
373 (QueueHeader)->Number++; \
377 // Macros for flag and ref count operations
379 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
380 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
381 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
382 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
383 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
385 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
386 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
387 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
389 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
390 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
391 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
393 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
394 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
395 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
397 #ifdef CONFIG_STA_SUPPORT
398 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
399 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
400 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
401 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
403 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
404 #endif // CONFIG_STA_SUPPORT //
406 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
407 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
410 #define INC_RING_INDEX(_idx, _RingSize) \
412 (_idx) = (_idx+1) % (_RingSize); \
415 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
417 #define RING_PACKET_INIT(_TxRing, _idx) \
419 _TxRing->Cell[_idx].pNdisPacket = NULL; \
420 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
423 #define TXDT_INIT(_TxD) \
425 NdisZeroMemory(_TxD, TXD_SIZE); \
429 //Set last data segment
430 #define RING_SET_LASTDS(_TxD, _IsSD0) \
432 if (_IsSD0) {_TxD->LastSec0 = 1;} \
433 else {_TxD->LastSec1 = 1;} \
436 // Increase TxTsc value for next transmission
438 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
439 // Should send a special event microsoft defined to request re-key
440 #define INC_TX_TSC(_tsc) \
443 while (++_tsc[i] == 0x0) \
451 #ifdef DOT11_N_SUPPORT
452 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
453 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
455 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
456 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
457 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
458 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
459 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
460 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
461 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
462 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
463 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
464 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
465 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
466 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
469 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
471 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
472 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
473 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
475 #endif // DOT11_N_SUPPORT //
478 // BBP & RF are using indirect access. Before write any value into it.
479 // We have to make sure there is no outstanding command pending via checking busy bit.
481 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
485 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
486 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
487 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
489 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
490 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
493 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
496 case 1: khz = 2412000; break; \
497 case 2: khz = 2417000; break; \
498 case 3: khz = 2422000; break; \
499 case 4: khz = 2427000; break; \
500 case 5: khz = 2432000; break; \
501 case 6: khz = 2437000; break; \
502 case 7: khz = 2442000; break; \
503 case 8: khz = 2447000; break; \
504 case 9: khz = 2452000; break; \
505 case 10: khz = 2457000; break; \
506 case 11: khz = 2462000; break; \
507 case 12: khz = 2467000; break; \
508 case 13: khz = 2472000; break; \
509 case 14: khz = 2484000; break; \
510 case 36: /* UNII */ khz = 5180000; break; \
511 case 40: /* UNII */ khz = 5200000; break; \
512 case 44: /* UNII */ khz = 5220000; break; \
513 case 48: /* UNII */ khz = 5240000; break; \
514 case 52: /* UNII */ khz = 5260000; break; \
515 case 56: /* UNII */ khz = 5280000; break; \
516 case 60: /* UNII */ khz = 5300000; break; \
517 case 64: /* UNII */ khz = 5320000; break; \
518 case 149: /* UNII */ khz = 5745000; break; \
519 case 153: /* UNII */ khz = 5765000; break; \
520 case 157: /* UNII */ khz = 5785000; break; \
521 case 161: /* UNII */ khz = 5805000; break; \
522 case 165: /* UNII */ khz = 5825000; break; \
523 case 100: /* HiperLAN2 */ khz = 5500000; break; \
524 case 104: /* HiperLAN2 */ khz = 5520000; break; \
525 case 108: /* HiperLAN2 */ khz = 5540000; break; \
526 case 112: /* HiperLAN2 */ khz = 5560000; break; \
527 case 116: /* HiperLAN2 */ khz = 5580000; break; \
528 case 120: /* HiperLAN2 */ khz = 5600000; break; \
529 case 124: /* HiperLAN2 */ khz = 5620000; break; \
530 case 128: /* HiperLAN2 */ khz = 5640000; break; \
531 case 132: /* HiperLAN2 */ khz = 5660000; break; \
532 case 136: /* HiperLAN2 */ khz = 5680000; break; \
533 case 140: /* HiperLAN2 */ khz = 5700000; break; \
534 case 34: /* Japan MMAC */ khz = 5170000; break; \
535 case 38: /* Japan MMAC */ khz = 5190000; break; \
536 case 42: /* Japan MMAC */ khz = 5210000; break; \
537 case 46: /* Japan MMAC */ khz = 5230000; break; \
538 case 184: /* Japan */ khz = 4920000; break; \
539 case 188: /* Japan */ khz = 4940000; break; \
540 case 192: /* Japan */ khz = 4960000; break; \
541 case 196: /* Japan */ khz = 4980000; break; \
542 case 208: /* Japan, means J08 */ khz = 5040000; break; \
543 case 212: /* Japan, means J12 */ khz = 5060000; break; \
544 case 216: /* Japan, means J16 */ khz = 5080000; break; \
545 default: khz = 2412000; break; \
549 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
552 case 2412000: ch = 1; break; \
553 case 2417000: ch = 2; break; \
554 case 2422000: ch = 3; break; \
555 case 2427000: ch = 4; break; \
556 case 2432000: ch = 5; break; \
557 case 2437000: ch = 6; break; \
558 case 2442000: ch = 7; break; \
559 case 2447000: ch = 8; break; \
560 case 2452000: ch = 9; break; \
561 case 2457000: ch = 10; break; \
562 case 2462000: ch = 11; break; \
563 case 2467000: ch = 12; break; \
564 case 2472000: ch = 13; break; \
565 case 2484000: ch = 14; break; \
566 case 5180000: ch = 36; /* UNII */ break; \
567 case 5200000: ch = 40; /* UNII */ break; \
568 case 5220000: ch = 44; /* UNII */ break; \
569 case 5240000: ch = 48; /* UNII */ break; \
570 case 5260000: ch = 52; /* UNII */ break; \
571 case 5280000: ch = 56; /* UNII */ break; \
572 case 5300000: ch = 60; /* UNII */ break; \
573 case 5320000: ch = 64; /* UNII */ break; \
574 case 5745000: ch = 149; /* UNII */ break; \
575 case 5765000: ch = 153; /* UNII */ break; \
576 case 5785000: ch = 157; /* UNII */ break; \
577 case 5805000: ch = 161; /* UNII */ break; \
578 case 5825000: ch = 165; /* UNII */ break; \
579 case 5500000: ch = 100; /* HiperLAN2 */ break; \
580 case 5520000: ch = 104; /* HiperLAN2 */ break; \
581 case 5540000: ch = 108; /* HiperLAN2 */ break; \
582 case 5560000: ch = 112; /* HiperLAN2 */ break; \
583 case 5580000: ch = 116; /* HiperLAN2 */ break; \
584 case 5600000: ch = 120; /* HiperLAN2 */ break; \
585 case 5620000: ch = 124; /* HiperLAN2 */ break; \
586 case 5640000: ch = 128; /* HiperLAN2 */ break; \
587 case 5660000: ch = 132; /* HiperLAN2 */ break; \
588 case 5680000: ch = 136; /* HiperLAN2 */ break; \
589 case 5700000: ch = 140; /* HiperLAN2 */ break; \
590 case 5170000: ch = 34; /* Japan MMAC */ break; \
591 case 5190000: ch = 38; /* Japan MMAC */ break; \
592 case 5210000: ch = 42; /* Japan MMAC */ break; \
593 case 5230000: ch = 46; /* Japan MMAC */ break; \
594 case 4920000: ch = 184; /* Japan */ break; \
595 case 4940000: ch = 188; /* Japan */ break; \
596 case 4960000: ch = 192; /* Japan */ break; \
597 case 4980000: ch = 196; /* Japan */ break; \
598 case 5040000: ch = 208; /* Japan, means J08 */ break; \
599 case 5060000: ch = 212; /* Japan, means J12 */ break; \
600 case 5080000: ch = 216; /* Japan, means J16 */ break; \
601 default: ch = 1; break; \
606 // Common fragment list structure - Identical to the scatter gather frag list structure
608 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
609 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
610 #define NIC_MAX_PHYS_BUF_COUNT 8
612 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
616 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
619 typedef struct _RTMP_SCATTER_GATHER_LIST {
620 ULONG NumberOfElements;
622 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
623 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
626 // Some utility macros
629 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
633 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
636 #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))))
638 #define INC_COUNTER64(Val) (Val.QuadPart++)
640 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
641 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
642 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
643 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
645 // Check LEAP & CCKM flags
646 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
647 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
649 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
650 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
652 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
654 _pExtraLlcSnapEncap = SNAP_802_1H; \
655 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
656 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
658 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
663 _pExtraLlcSnapEncap = NULL; \
667 // New Define for new Tx Path.
668 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
670 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
672 _pExtraLlcSnapEncap = SNAP_802_1H; \
673 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
674 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
676 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
681 _pExtraLlcSnapEncap = NULL; \
686 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
688 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
689 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
690 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
693 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
694 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
695 // else remove the LLC/SNAP field from the result Ethernet frame
696 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
698 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
699 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
700 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
704 _pRemovedLLCSNAP = NULL; \
705 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
706 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
708 PUCHAR pProto = _pData + 6; \
710 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
711 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
713 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
714 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
715 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
719 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
720 _pRemovedLLCSNAP = _pData; \
721 _DataSize -= LENGTH_802_1_H; \
722 _pData += LENGTH_802_1_H; \
727 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
728 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
729 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
733 #define SWITCH_AB( _pAA, _pBB) \
741 // Enqueue this frame to MLME engine
742 // We need to enqueue the whole frame because MLME need to pass data type
743 // information from 802.11 header
745 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
747 UINT32 High32TSF=0, Low32TSF=0; \
748 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
752 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
753 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
755 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
756 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
759 // Check if it is Japan W53(ch52,56,60,64) channel.
761 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
763 #ifdef CONFIG_STA_SUPPORT
764 #define STA_PORT_SECURED(_pAd) \
766 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
767 NdisAcquireSpinLock(&_pAd->MacTabLock); \
768 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
769 NdisReleaseSpinLock(&_pAd->MacTabLock); \
771 #endif // CONFIG_STA_SUPPORT //
775 // Register set pair for initialzation register set definition
777 typedef struct _RTMP_REG_PAIR
781 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
783 typedef struct _REG_PAIR
787 } REG_PAIR, *PREG_PAIR;
790 // Register set pair for initialzation register set definition
792 typedef struct _RTMP_RF_REGS
799 } RTMP_RF_REGS, *PRTMP_RF_REGS;
801 typedef struct _FREQUENCY_ITEM {
806 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
809 // Data buffer for DMA operation, the buffer must be contiguous physical memory
810 // Both DMA to / from CPU use the same structure.
812 typedef struct _RTMP_DMABUF
815 PVOID AllocVa; // TxBuf virtual address
816 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
817 } RTMP_DMABUF, *PRTMP_DMABUF;
820 typedef union _HEADER_802_11_SEQ{
833 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
836 // Data buffer for DMA operation, the buffer must be contiguous physical memory
837 // Both DMA to / from CPU use the same structure.
839 typedef struct _RTMP_REORDERBUF
842 PVOID AllocVa; // TxBuf virtual address
843 UCHAR Header802_3[14];
844 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
851 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
854 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
855 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
856 // which won't be released, driver has to wait until upper layer return the packet
857 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
858 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
859 // which driver should ACK upper layer when the tx is physically done or failed.
861 typedef struct _RTMP_DMACB
863 ULONG AllocSize; // Control block size
864 PVOID AllocVa; // Control block virtual address
865 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
866 PNDIS_PACKET pNdisPacket;
867 PNDIS_PACKET pNextNdisPacket;
869 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
870 } RTMP_DMACB, *PRTMP_DMACB;
872 typedef struct _RTMP_TX_BUF
876 ULONG AllocSize; // Control block size
877 PVOID AllocVa; // Control block virtual address
878 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
879 } RTMP_TXBUF, *PRTMP_TXBUF;
881 typedef struct _RTMP_RX_BUF
885 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
886 } RTMP_RXBUF, *PRTMP_RXBUF;
887 typedef struct _RTMP_TX_RING
889 RTMP_DMACB Cell[TX_RING_SIZE];
892 UINT32 TxSwFreeIdx; // software next free tx index
893 } RTMP_TX_RING, *PRTMP_TX_RING;
895 typedef struct _RTMP_RX_RING
897 RTMP_DMACB Cell[RX_RING_SIZE];
900 INT32 RxSwReadIdx; // software next read index
901 } RTMP_RX_RING, *PRTMP_RX_RING;
903 typedef struct _RTMP_MGMT_RING
905 RTMP_DMACB Cell[MGMT_RING_SIZE];
908 UINT32 TxSwFreeIdx; // software next free tx index
909 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
912 // Statistic counter structure
914 typedef struct _COUNTER_802_3
924 ULONG RcvAlignmentErrors;
926 ULONG MoreCollisions;
928 } COUNTER_802_3, *PCOUNTER_802_3;
930 typedef struct _COUNTER_802_11 {
932 LARGE_INTEGER LastTransmittedFragmentCount;
933 LARGE_INTEGER TransmittedFragmentCount;
934 LARGE_INTEGER MulticastTransmittedFrameCount;
935 LARGE_INTEGER FailedCount;
936 LARGE_INTEGER RetryCount;
937 LARGE_INTEGER MultipleRetryCount;
938 LARGE_INTEGER RTSSuccessCount;
939 LARGE_INTEGER RTSFailureCount;
940 LARGE_INTEGER ACKFailureCount;
941 LARGE_INTEGER FrameDuplicateCount;
942 LARGE_INTEGER ReceivedFragmentCount;
943 LARGE_INTEGER MulticastReceivedFrameCount;
944 LARGE_INTEGER FCSErrorCount;
945 } COUNTER_802_11, *PCOUNTER_802_11;
947 typedef struct _COUNTER_RALINK {
948 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
949 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
950 ULONG BeenDisassociatedCount;
951 ULONG BadCQIAutoRecoveryCount;
952 ULONG PoorCQIRoamingCount;
953 ULONG MgmtRingFullCount;
954 ULONG RxCountSinceLastNULL;
956 ULONG RxRingErrCount;
958 ULONG TxRingErrCount;
959 LARGE_INTEGER RealFcsErrCount;
960 ULONG PendingNdisPacketCount;
962 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
963 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
964 UINT32 OneSecTxDoneCount;
966 UINT32 OneSecTxAggregationCount;
967 UINT32 OneSecRxAggregationCount;
969 UINT32 OneSecFrameDuplicateCount;
972 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
975 UINT32 OneSecTxNoRetryOkCount;
976 UINT32 OneSecTxRetryOkCount;
977 UINT32 OneSecTxFailCount;
978 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
979 UINT32 OneSecRxOkCnt; // RX without error
980 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
981 UINT32 OneSecRxFcsErrCnt; // CRC error
982 UINT32 OneSecBeaconSentCnt;
983 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
984 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
988 ULONG TxAgg1MPDUCount;
989 ULONG TxAgg2MPDUCount;
990 ULONG TxAgg3MPDUCount;
991 ULONG TxAgg4MPDUCount;
992 ULONG TxAgg5MPDUCount;
993 ULONG TxAgg6MPDUCount;
994 ULONG TxAgg7MPDUCount;
995 ULONG TxAgg8MPDUCount;
996 ULONG TxAgg9MPDUCount;
997 ULONG TxAgg10MPDUCount;
998 ULONG TxAgg11MPDUCount;
999 ULONG TxAgg12MPDUCount;
1000 ULONG TxAgg13MPDUCount;
1001 ULONG TxAgg14MPDUCount;
1002 ULONG TxAgg15MPDUCount;
1003 ULONG TxAgg16MPDUCount;
1005 LARGE_INTEGER TransmittedOctetsInAMSDU;
1006 LARGE_INTEGER TransmittedAMSDUCount;
1007 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1008 LARGE_INTEGER ReceivedAMSDUCount;
1009 LARGE_INTEGER TransmittedAMPDUCount;
1010 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1011 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1012 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1013 } COUNTER_RALINK, *PCOUNTER_RALINK;
1015 typedef struct _PID_COUNTER {
1016 ULONG TxAckRequiredCount; // CRC error
1018 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1019 ULONG LastSuccessRate;
1020 } PID_COUNTER, *PPID_COUNTER;
1022 typedef struct _COUNTER_DRS {
1023 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1024 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1025 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1026 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1027 ULONG CurrTxRateStableTime; // # of second in current TX rate
1028 BOOLEAN fNoisyEnvironment;
1029 BOOLEAN fLastSecAccordingRSSI;
1030 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1031 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1032 ULONG LastTxOkCount;
1033 } COUNTER_DRS, *PCOUNTER_DRS;
1036 // Arcfour Structure Added by PaulWu
1038 typedef struct _ARCFOUR
1043 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1045 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1046 typedef struct _RECEIVE_SETTING {
1047 #ifdef RT_BIG_ENDIAN
1051 USHORT STBC:2; //SPACE
1053 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1054 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1056 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1057 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1059 USHORT STBC:2; //SPACE
1064 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1066 // Shared key data structure
1067 typedef struct _WEP_KEY {
1068 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1069 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1070 } WEP_KEY, *PWEP_KEY;
1072 typedef struct _CIPHER_KEY {
1073 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1074 UCHAR RxMic[8]; // make alignment
1076 UCHAR TxTsc[6]; // 48bit TSC value
1077 UCHAR RxTsc[6]; // 48bit TSC value
1078 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1080 #ifdef CONFIG_STA_SUPPORT
1082 #endif // CONFIG_STA_SUPPORT //
1083 // Key length for each key, 0: entry is invalid
1084 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1085 } CIPHER_KEY, *PCIPHER_KEY;
1087 typedef struct _BBP_TUNING_STRUCT {
1089 UCHAR FalseCcaCountUpperBound; // 100 per sec
1090 UCHAR FalseCcaCountLowerBound; // 10 per sec
1091 UCHAR R17LowerBound; // specified in E2PROM
1092 UCHAR R17UpperBound; // 0x68 according to David Tung
1093 UCHAR CurrentR17Value;
1094 } BBP_TUNING, *PBBP_TUNING;
1096 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1097 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1098 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1099 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1100 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1101 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1102 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1103 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1104 SHORT Pair1LastAvgRssi; //
1105 SHORT Pair2LastAvgRssi; //
1106 ULONG RcvPktNumWhenEvaluate;
1107 BOOLEAN FirstPktArrivedWhenEvaluate;
1108 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1109 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1111 typedef struct _LEAP_AUTH_INFO {
1112 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1113 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1115 UCHAR UserName[256]; //LEAP, User name
1117 UCHAR Password[256]; //LEAP, User Password
1119 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1122 UCHAR Addr[MAC_ADDR_LEN];
1123 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1124 //00 02-Authentication timeout
1125 //00 03-Challenge from AP failed
1126 //00 04-Challenge to AP failed
1128 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1132 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1133 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1139 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1142 // Receive Tuple Cache Format
1144 typedef struct _TUPLE_CACHE {
1146 UCHAR MacAddress[MAC_ADDR_LEN];
1149 } TUPLE_CACHE, *PTUPLE_CACHE;
1152 // Fragment Frame structure
1154 typedef struct _FRAGMENT_FRAME {
1155 PNDIS_PACKET pFragPacket;
1159 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1160 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1164 // Packet information for NdisQueryPacket
1166 typedef struct _PACKET_INFO {
1167 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1168 UINT BufferCount ; // Number of Buffer descriptor chained
1169 UINT TotalPacketLength ; // Self explained
1170 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1171 } PACKET_INFO, *PPACKET_INFO;
1174 // Tkip Key structure which RC4 key & MIC calculation
1176 typedef struct _TKIP_KEY_INFO {
1177 UINT nBytesInM; // # bytes in M for MICKEY
1180 ULONG K0; // for MICKEY Low
1181 ULONG K1; // for MICKEY Hig
1182 ULONG L; // Current state for MICKEY
1183 ULONG R; // Current state for MICKEY
1184 ULONG M; // Message accumulator for MICKEY
1187 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1190 // Private / Misc data, counters for driver internal use
1192 typedef struct __PRIVATE_STRUC {
1193 UINT SystemResetCnt; // System reset counter
1194 UINT TxRingFullCnt; // Tx ring full occurrance number
1195 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1196 // Variables for WEP encryption / decryption in rtmp_wep.c
1198 ARCFOURCONTEXT WEPCONTEXT;
1202 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1204 // structure to tune BBP R66 (BBP TUNING)
1205 typedef struct _BBP_R66_TUNING {
1207 USHORT FalseCcaLowerThreshold; // default 100
1208 USHORT FalseCcaUpperThreshold; // default 512
1210 UCHAR R66CurrentValue;
1211 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1212 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1214 // structure to store channel TX power
1215 typedef struct _CHANNEL_TX_POWER {
1216 USHORT RemainingTimeForUse; //unit: sec
1218 #ifdef DOT11N_DRAFT3
1219 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1220 #endif // DOT11N_DRAFT3 //
1225 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1227 // structure to store 802.11j channel TX power
1228 typedef struct _CHANNEL_11J_TX_POWER {
1230 UCHAR BW; // BW_10 or BW_20
1233 USHORT RemainingTimeForUse; //unit: sec
1234 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1236 typedef enum _ABGBAND_STATE_ {
1242 typedef struct _MLME_STRUCT {
1243 #ifdef CONFIG_STA_SUPPORT
1244 // STA state machines
1245 STATE_MACHINE CntlMachine;
1246 STATE_MACHINE AssocMachine;
1247 STATE_MACHINE AuthMachine;
1248 STATE_MACHINE AuthRspMachine;
1249 STATE_MACHINE SyncMachine;
1250 STATE_MACHINE WpaPskMachine;
1251 STATE_MACHINE LeapMachine;
1252 STATE_MACHINE AironetMachine;
1253 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1254 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1255 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1256 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1257 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1258 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1259 #endif // CONFIG_STA_SUPPORT //
1260 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1262 STATE_MACHINE ActMachine;
1265 #ifdef QOS_DLS_SUPPORT
1266 STATE_MACHINE DlsMachine;
1267 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1268 #endif // QOS_DLS_SUPPORT //
1273 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1274 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1275 ULONG LastSendNULLpsmTime;
1278 NDIS_SPIN_LOCK TaskLock;
1283 RALINK_TIMER_STRUCT PeriodicTimer;
1284 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1285 RALINK_TIMER_STRUCT LinkDownTimer;
1286 RALINK_TIMER_STRUCT LinkUpTimer;
1287 ULONG PeriodicRound;
1288 ULONG OneSecPeriodicRound;
1291 BOOLEAN bLowThroughput;
1292 BOOLEAN bEnableAutoAntennaCheck;
1293 RALINK_TIMER_STRUCT RxAntEvalTimer;
1296 UCHAR CaliBW40RfR24;
1297 UCHAR CaliBW20RfR24;
1300 } MLME_STRUCT, *PMLME_STRUCT;
1302 // structure for radar detection and channel switch
1303 typedef struct _RADAR_DETECT_STRUCT {
1304 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1305 UCHAR CSCount; //Channel switch counter
1306 UCHAR CSPeriod; //Channel switch period (beacon count)
1307 UCHAR RDCount; //Radar detection counter
1308 UCHAR RDMode; //Radar Detection mode
1309 UCHAR RDDurRegion; //Radar detection duration region
1316 ULONG InServiceMonitorCount; // unit: sec
1317 UINT8 DfsSessionTime;
1320 UINT8 LongPulseRadarTh;
1321 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1323 typedef enum _REC_BLOCKACK_STATUS
1327 Recipient_HandleRes,
1329 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1331 typedef enum _ORI_BLOCKACK_STATUS
1337 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1339 #ifdef DOT11_N_SUPPORT
1340 typedef struct _BA_ORI_ENTRY{
1345 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1347 USHORT TimeOutValue;
1348 ORI_BLOCKACK_STATUS ORI_BA_Status;
1349 RALINK_TIMER_STRUCT ORIBATimer;
1351 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1353 typedef struct _BA_REC_ENTRY {
1356 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1358 //UCHAR Curindidx; // the head in the RX reordering buffer
1360 // USHORT LastIndSeqAtTimer;
1361 USHORT TimeOutValue;
1362 RALINK_TIMER_STRUCT RECBATimer;
1363 ULONG LastIndSeqAtTimer;
1366 REC_BLOCKACK_STATUS REC_BA_Status;
1367 // UCHAR RxBufIdxUsed;
1368 // corresponding virtual address for RX reordering packet storage.
1369 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1370 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1371 // struct _BA_REC_ENTRY *pNext;
1373 struct reordering_list list;
1374 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1378 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1379 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1380 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1381 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1382 } BA_TABLE, *PBA_TABLE;
1384 //For QureyBATableOID use;
1385 typedef struct PACKED _OID_BA_REC_ENTRY{
1386 UCHAR MACAddr[MAC_ADDR_LEN];
1387 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1390 REC_BLOCKACK_STATUS REC_BA_Status[8];
1391 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1393 //For QureyBATableOID use;
1394 typedef struct PACKED _OID_BA_ORI_ENTRY{
1395 UCHAR MACAddr[MAC_ADDR_LEN];
1396 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
1399 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1400 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1402 typedef struct _QUERYBA_TABLE{
1403 OID_BA_ORI_ENTRY BAOriEntry[32];
1404 OID_BA_REC_ENTRY BARecEntry[32];
1405 UCHAR OriNum;// Number of below BAOriEntry
1406 UCHAR RecNum;// Number of below BARecEntry
1407 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1409 typedef union _BACAP_STRUC {
1410 #ifdef RT_BIG_ENDIAN
1413 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.
1414 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1415 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1416 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1417 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1418 UINT32 MpduDensity:3;
1419 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1420 UINT32 AutoBA:1; // automatically BA
1421 UINT32 TxBAWinLimit:8;
1422 UINT32 RxBAWinLimit:8;
1426 UINT32 RxBAWinLimit:8;
1427 UINT32 TxBAWinLimit:8;
1428 UINT32 AutoBA:1; // automatically BA
1429 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1430 UINT32 MpduDensity:3;
1431 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1432 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1433 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1434 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1435 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.
1440 } BACAP_STRUC, *PBACAP_STRUC;
1441 #endif // DOT11_N_SUPPORT //
1443 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1444 typedef struct _IOT_STRUC {
1446 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1447 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1448 ULONG OneSecInWindowCount;
1449 ULONG OneSecFrameDuplicateCount;
1450 ULONG OneSecOutWindowCount;
1455 BOOLEAN bRTSLongProtOn;
1456 #ifdef CONFIG_STA_SUPPORT
1457 BOOLEAN bLastAtheros;
1458 BOOLEAN bCurrentAtheros;
1459 BOOLEAN bNowAtherosBurstOn;
1460 BOOLEAN bNextDisableRxBA;
1462 #endif // CONFIG_STA_SUPPORT //
1463 } IOT_STRUC, *PIOT_STRUC;
1465 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1466 typedef union _REG_TRANSMIT_SETTING {
1467 #ifdef RT_BIG_ENDIAN
1473 UINT32 STBC:1; //SPACE
1475 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1476 UINT32 TxBF:1; // 3*3
1478 //UINT32 MCS:7; // MCS
1484 //UINT32 MCS:7; // MCS
1487 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1489 UINT32 STBC:1; //SPACE
1497 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1499 typedef union _DESIRED_TRANSMIT_SETTING {
1500 #ifdef RT_BIG_ENDIAN
1503 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1505 USHORT MCS:7; // MCS
1509 USHORT MCS:7; // MCS
1511 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1516 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1519 BOOLEAN IsRecipient;
1520 UCHAR MACAddr[MAC_ADDR_LEN];
1524 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1525 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1528 // Multiple SSID structure
1530 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1531 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1533 /* clear bcmc TIM bit */
1534 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1535 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1537 /* set bcmc TIM bit */
1538 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1539 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1541 /* clear a station PS TIM bit */
1542 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1543 { UCHAR tim_offset = wcid >> 3; \
1544 UCHAR bit_offset = wcid & 0x7; \
1545 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1547 /* set a station PS TIM bit */
1548 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1549 { UCHAR tim_offset = wcid >> 3; \
1550 UCHAR bit_offset = wcid & 0x7; \
1551 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1554 #define BEACON_BITMAP_MASK 0xff
1555 typedef struct _BEACON_SYNC_STRUCT_
1557 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1558 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1559 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1560 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1561 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1562 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1563 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1564 }BEACON_SYNC_STRUCT;
1567 typedef struct _MULTISSID_STRUCT {
1568 UCHAR Bssid[MAC_ADDR_LEN];
1570 CHAR Ssid[MAX_LEN_OF_SSID];
1571 USHORT CapabilityInfo;
1575 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1576 NDIS_802_11_WEP_STATUS WepStatus;
1577 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1578 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1582 ULONG ReceivedByteCount;
1583 ULONG TransmittedByteCount;
1587 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1588 RT_HT_PHY_INFO DesiredHtPhyInfo;
1589 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1590 BOOLEAN bAutoTxRateSwitch;
1592 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1595 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1596 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1597 UCHAR DesiredRatesIndex;
1598 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1600 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1601 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1602 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1612 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1613 UCHAR BANClass3Data;
1614 ULONG IsolateInterStaTraffic;
1617 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1620 UCHAR TimIELocationInBeacon;
1621 UCHAR CapabilityInfoLocationInBeacon;
1622 // outgoing BEACON frame buffer and corresponding TXWI
1623 // PTXWI_STRUC BeaconTxWI; //
1624 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1627 UINT16 StationKeepAliveTime; // unit: second
1630 USHORT VLAN_Priority;
1632 RT_802_11_ACL AccessControlList;
1635 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1636 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1638 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1640 // For 802.1x daemon setting per BSS
1641 UCHAR radius_srv_num;
1642 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1645 unsigned int mylinkid;
1649 UINT32 RcvdConflictSsidCount;
1650 UINT32 RcvdSpoofedAssocRespCount;
1651 UINT32 RcvdSpoofedReassocRespCount;
1652 UINT32 RcvdSpoofedProbeRespCount;
1653 UINT32 RcvdSpoofedBeaconCount;
1654 UINT32 RcvdSpoofedDisassocCount;
1655 UINT32 RcvdSpoofedAuthCount;
1656 UINT32 RcvdSpoofedDeauthCount;
1657 UINT32 RcvdSpoofedUnknownMgmtCount;
1658 UINT32 RcvdReplayAttackCount;
1660 CHAR RssiOfRcvdConflictSsid;
1661 CHAR RssiOfRcvdSpoofedAssocResp;
1662 CHAR RssiOfRcvdSpoofedReassocResp;
1663 CHAR RssiOfRcvdSpoofedProbeResp;
1664 CHAR RssiOfRcvdSpoofedBeacon;
1665 CHAR RssiOfRcvdSpoofedDisassoc;
1666 CHAR RssiOfRcvdSpoofedAuth;
1667 CHAR RssiOfRcvdSpoofedDeauth;
1668 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1669 CHAR RssiOfRcvdReplayAttack;
1673 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1677 #ifdef DOT11N_DRAFT3
1678 typedef enum _BSS2040COEXIST_FLAG{
1679 BSS_2040_COEXIST_DISABLE = 0,
1680 BSS_2040_COEXIST_TIMER_FIRED = 1,
1681 BSS_2040_COEXIST_INFO_SYNC = 2,
1682 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1683 }BSS2040COEXIST_FLAG;
1684 #endif // DOT11N_DRAFT3 //
1686 // configuration common to OPMODE_AP as well as OPMODE_STA
1687 typedef struct _COMMON_CONFIG {
1689 BOOLEAN bCountryFlag;
1690 UCHAR CountryCode[3];
1692 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1693 UCHAR CountryRegionForABand; // Enum of country region for A band
1694 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1695 USHORT Dsifs; // in units of usec
1696 ULONG PacketFilter; // Packet filter for receiving
1698 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1699 UCHAR SsidLen; // the actual ssid length in used
1700 UCHAR LastSsidLen; // the actual ssid length in used
1701 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1702 UCHAR LastBssid[MAC_ADDR_LEN];
1704 UCHAR Bssid[MAC_ADDR_LEN];
1705 USHORT BeaconPeriod;
1707 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1709 #if 0 // move to STA_ADMIN_CONFIG
1712 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1713 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1714 NDIS_802_11_WEP_STATUS WepStatus;
1715 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1717 // Add to support different cipher suite for WPA2/WPA mode
1718 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1719 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1720 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1721 USHORT RsnCapability;
1723 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1726 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1728 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1730 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1731 UCHAR MaxDesiredRate;
1732 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1734 ULONG BasicRateBitmap; // backup basic ratebitmap
1736 BOOLEAN bAPSDCapable;
1737 BOOLEAN bInServicePeriod;
1742 BOOLEAN bNeedSendTriggerFrame;
1743 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1744 ULONG TriggerTimerCount;
1746 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1747 // move to MULTISSID_STRUCT for MBSS
1748 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1749 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1750 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1751 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1752 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1753 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1754 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1755 //BOOLEAN bAutoTxRateSwitch;
1756 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1757 UCHAR RtsRate; // RATE_xxx
1758 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1759 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1760 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1762 USHORT RtsThreshold; // in unit of BYTE
1763 USHORT FragmentThreshold; // in unit of BYTE
1765 UCHAR TxPower; // in unit of mW
1766 ULONG TxPowerPercentage; // 0~100 %
1767 ULONG TxPowerDefault; // keep for TxPowerPercentage
1769 #ifdef DOT11_N_SUPPORT
1770 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1771 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1772 #endif // DOT11_N_SUPPORT //
1773 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1774 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1775 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1776 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1777 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1778 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1779 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1780 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1781 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1782 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1784 #ifdef DOT11_N_SUPPORT
1786 #endif // DOT11_N_SUPPORT //
1787 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1788 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1789 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1790 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1791 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1792 #ifdef CONFIG_STA_SUPPORT
1793 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1794 #endif // CONFIG_STA_SUPPORT //
1795 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1796 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1797 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1798 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1799 ULONG OpStatusFlags;
1801 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1802 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1804 // IEEE802.11H--DFS.
1805 RADAR_DETECT_STRUCT RadarDetect;
1807 #ifdef DOT11_N_SUPPORT
1809 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1810 //RT_HT_CAPABILITY SupportedHtPhy;
1811 RT_HT_CAPABILITY DesiredHtPhy;
1812 HT_CAPABILITY_IE HtCapability;
1813 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1814 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1815 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1816 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
1818 #ifdef DOT11N_DRAFT3
1819 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1820 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1822 //This IE is used for 20/40 BSS Coexistence.
1823 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1824 // ====== 11n D3.0 =======================>
1825 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1826 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1827 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1828 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1829 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1830 USHORT Dot11BssWidthChanTranDelayFactor;
1831 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1833 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1834 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1836 NDIS_SPIN_LOCK TriggerEventTabLock;
1837 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1838 BSS_2040_COEXIST_IE BSSCoexist2040;
1839 TRIGGER_EVENT_TAB TriggerEventTab;
1840 UCHAR ChannelListIdx;
1841 // <====== 11n D3.0 =======================
1842 BOOLEAN bOverlapScanning;
1843 #endif // DOT11N_DRAFT3 //
1846 BOOLEAN bMIMOPSEnable;
1848 BOOLEAN bDisableReordering;
1849 BOOLEAN bForty_Mhz_Intolerant;
1850 BOOLEAN bExtChannelSwitchAnnouncement;
1851 BOOLEAN bRcvBSSWidthTriggerEvents;
1852 ULONG LastRcvBSSWidthTriggerEventsTime;
1855 #endif // DOT11_N_SUPPORT //
1857 // Enable wireless event
1858 BOOLEAN bWirelessEvent;
1859 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1861 // Tx & Rx Stream number selection
1865 // transmit phy mode, trasmit rate for Multicast.
1866 #ifdef MCAST_RATE_SPECIFIC
1867 UCHAR McastTransmitMcs;
1868 UCHAR McastTransmitPhyMode;
1869 #endif // MCAST_RATE_SPECIFIC //
1871 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1874 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1875 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1876 RT_HT_CAPABILITY SupportedHtPhy;
1877 ULONG MaxPktOneTxBulk;
1881 BEACON_SYNC_STRUCT *pBeaconSync;
1882 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1883 UINT32 BeaconAdjust;
1884 UINT32 BeaconFactor;
1885 UINT32 BeaconRemain;
1889 NDIS_SPIN_LOCK MeasureReqTabLock;
1890 PMEASURE_REQ_TAB pMeasureReqTab;
1892 NDIS_SPIN_LOCK TpcReqTabLock;
1893 PTPC_REQ_TAB pTpcReqTab;
1895 // transmit phy mode, trasmit rate for Multicast.
1896 #ifdef MCAST_RATE_SPECIFIC
1897 HTTRANSMIT_SETTING MCastPhyMode;
1898 #endif // MCAST_RATE_SPECIFIC //
1901 UINT16 DefineMaxTxPwr;
1902 #endif // SINGLE_SKU //
1905 } COMMON_CONFIG, *PCOMMON_CONFIG;
1908 #ifdef CONFIG_STA_SUPPORT
1909 /* Modified by Wu Xi-Kun 4/21/2006 */
1910 // STA configuration and status
1911 typedef struct _STA_ADMIN_CONFIG {
1913 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1914 // the user intended configuration, but not necessary fully equal to the final
1915 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1916 // AP or IBSS holder).
1917 // Once initialized, user configuration can only be changed via OID_xxx
1918 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1919 USHORT AtimWin; // used when starting a new IBSS
1922 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1923 // the user intended configuration, and should be always applied to the final
1924 // settings in ACTIVE BSS without compromising with the BSS holder.
1925 // Once initialized, user configuration can only be changed via OID_xxx
1927 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1928 USHORT DefaultListenCount; // default listen count;
1929 ULONG WindowsPowerMode; // Power mode for AC power
1930 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1931 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1932 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1933 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1935 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1936 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1937 USHORT DisassocReason;
1938 UCHAR DisassocSta[MAC_ADDR_LEN];
1939 USHORT DeauthReason;
1940 UCHAR DeauthSta[MAC_ADDR_LEN];
1941 USHORT AuthFailReason;
1942 UCHAR AuthFailSta[MAC_ADDR_LEN];
1944 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1945 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1946 NDIS_802_11_WEP_STATUS WepStatus;
1947 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1949 // Add to support different cipher suite for WPA2/WPA mode
1950 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1951 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1952 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1953 USHORT RsnCapability;
1955 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1957 UCHAR PMK[32]; // WPA PSK mode PMK
1958 UCHAR PTK[64]; // WPA PSK mode PTK
1959 UCHAR GTK[32]; // GTK from authenticator
1960 BSSID_INFO SavedPMK[PMKID_NO];
1961 UINT SavedPMKNum; // Saved PMKID number
1966 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1969 // For WPA countermeasures
1970 ULONG LastMicErrorTime; // record last MIC error time
1971 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1972 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1973 // For WPA-PSK supplicant state
1974 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1975 UCHAR ReplayCounter[8];
1976 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1977 UCHAR SNonce[32]; // SNonce for WPA-PSK
1979 UCHAR LastSNR0; // last received BEACON's SNR
1980 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1981 RSSI_SAMPLE RssiSample;
1982 ULONG NumOfAvgRssiSample;
1984 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1985 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1986 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1987 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1989 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1990 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1991 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1992 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1993 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1994 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1995 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1998 // New for WPA, windows want us to to keep association information and
1999 // Fixed IEs from last association response
2000 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2001 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2002 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2003 USHORT ResVarIELen; // Length of next VIE include EID & Length
2004 UCHAR ResVarIEs[MAX_VIE_LEN];
2007 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2009 // New variables used for CCX 1.0
2011 BOOLEAN bCkipCmicOn;
2013 UCHAR GIV[3]; //for CCX iv
2018 LEAP_AUTH_INFO LeapAuthInfo;
2020 UCHAR NetworkChallenge[8];
2021 UCHAR NetworkChallengeResponse[24];
2022 UCHAR PeerChallenge[8];
2024 UCHAR PeerChallengeResponse[24];
2025 UCHAR SessionKey[16]; //Network session keys (NSK)
2026 RALINK_TIMER_STRUCT LeapAuthTimer;
2027 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2029 // New control flags for CCX
2030 CCX_CONTROL CCXControl; // Master administration state
2031 BOOLEAN CCXEnable; // Actual CCX state
2032 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2033 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2034 UCHAR CCXReqType; // Current processing CCX request type
2035 BSS_TABLE CCXBssTab; // BSS Table
2036 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2037 USHORT FrameReportLen; // Current Frame report length
2038 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2039 USHORT RPIDensity[8]; // Array for RPI density collection
2040 // Start address of each BSS table within FrameReportBuf
2041 // It's important to update the RxPower of the corresponding Bss
2042 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2043 USHORT BeaconToken; // Token for beacon report
2044 ULONG LastBssIndex; // Most current reported Bss index
2045 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2046 UCHAR RMReqCnt; // Number of measurement request saved.
2047 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2048 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2049 // It must be the same channel with maximum duration
2050 USHORT ParallelDuration; // Maximum duration for parallel measurement
2051 UCHAR ParallelChannel; // Only one channel with parallel measurement
2052 USHORT IAPPToken; // IAPP dialog token
2053 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2054 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2055 // Hack for channel load and noise histogram parameters
2056 UCHAR NHFactor; // Parameter for Noise histogram
2057 UCHAR CLFactor; // Parameter for channel load
2059 UCHAR KRK[16]; //Key Refresh Key.
2060 UCHAR BTK[32]; //Base Transient Key
2061 BOOLEAN CCKMLinkUpFlag;
2062 ULONG CCKMRN; //(Re)Association request number.
2063 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2064 UCHAR AironetCellPowerLimit; //in dBm
2065 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2066 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2067 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2068 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2069 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2070 USHORT CCXAdjacentAPChannel;
2071 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2073 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2074 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2076 UCHAR DtimCount; // 0.. DtimPeriod-1
2077 UCHAR DtimPeriod; // default = 3
2079 #ifdef QOS_DLS_SUPPORT
2080 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2081 UCHAR DlsReplayCounter[8];
2082 #endif // QOS_DLS_SUPPORT //
2083 ////////////////////////////////////////////////////////////////////////////////////////
2084 // This is only for WHQL test.
2086 ////////////////////////////////////////////////////////////////////////////////////////
2088 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2090 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2091 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2093 #ifdef WPA_SUPPLICANT_SUPPORT
2095 BOOLEAN IEEE8021x_required_keys;
2096 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2097 UCHAR DesireSharedKeyId;
2099 // 0: driver ignores wpa_supplicant
2100 // 1: wpa_supplicant initiates scanning and AP selection
2101 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2102 UCHAR WpaSupplicantUP;
2103 UCHAR WpaSupplicantScanCount;
2104 #endif // WPA_SUPPLICANT_SUPPORT //
2109 BOOLEAN bTGnWifiTest;
2110 BOOLEAN bScanReqIsFromWebUI;
2112 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2113 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2114 RT_HT_PHY_INFO DesiredHtPhyInfo;
2115 BOOLEAN bAutoTxRateSwitch;
2118 #ifdef EXT_BUILD_CHANNEL_LIST
2119 UCHAR IEEE80211dClientMode;
2120 UCHAR StaOriCountryCode[3];
2121 UCHAR StaOriGeography;
2122 #endif // EXT_BUILD_CHANNEL_LIST //
2123 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2125 // This data structure keep the current active BSS/IBSS's configuration that this STA
2126 // had agreed upon joining the network. Which means these parameters are usually decided
2127 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2128 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2129 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2130 // the current active settings.
2131 typedef struct _STA_ACTIVE_CONFIG {
2133 USHORT AtimWin; // in kusec; IBSS parameter set element
2134 USHORT CapabilityInfo;
2135 USHORT CfpMaxDuration;
2138 // Copy supported rate from desired AP's beacon. We are trying to match
2139 // AP's supported and extended rate settings.
2140 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2141 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2144 // Copy supported ht from desired AP's beacon. We are trying to match
2145 RT_HT_PHY_INFO SupportedPhyInfo;
2146 RT_HT_CAPABILITY SupportedHtPhy;
2147 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2150 // for USB interface, avoid in interrupt when write key
2151 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2152 NDIS_802_11_MAC_ADDRESS MacAddr;
2153 USHORT MacTabMatchWCID; // ASIC
2154 CIPHER_KEY CipherKey;
2155 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2157 #endif // CONFIG_STA_SUPPORT //
2159 // ----------- start of AP --------------------------
2160 // AUTH-RSP State Machine Aux data structure
2161 typedef struct _AP_MLME_AUX {
2162 UCHAR Addr[MAC_ADDR_LEN];
2164 CHAR Challenge[CIPHER_TEXT_LEN];
2165 } AP_MLME_AUX, *PAP_MLME_AUX;
2167 // structure to define WPA Group Key Rekey Interval
2168 typedef struct PACKED _RT_802_11_WPA_REKEY {
2169 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2170 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2171 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2173 typedef struct _MAC_TABLE_ENTRY {
2174 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2175 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2176 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2177 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2178 BOOLEAN ValidAsMesh;
2179 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2181 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2183 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2185 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2186 UCHAR CMTimerRunning;
2187 UCHAR apidx; // MBSS number
2189 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2190 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2191 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2194 RALINK_TIMER_STRUCT RetryTimer;
2195 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2196 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2197 NDIS_802_11_WEP_STATUS WepStatus;
2198 AP_WPA_STATE WpaState;
2201 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2202 CIPHER_KEY PairwiseKey;
2205 UCHAR PMKID[LEN_PMKID];
2208 UCHAR Addr[MAC_ADDR_LEN];
2211 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2212 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2214 USHORT CapabilityInfo;
2216 ULONG NoDataIdleCount;
2217 UINT16 StationKeepAliveCount; // unit: second
2219 QUEUE_HEADER PsQueue;
2221 UINT32 StaConnectTime; // the live time of this station since associated with AP
2224 #ifdef DOT11_N_SUPPORT
2226 USHORT NoBADataCountDown;
2228 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2229 UINT TxBFCount; // 3*3
2230 #endif // DOT11_N_SUPPORT //
2232 UINT DebugFIFOCount;
2237 //====================================================
2238 //WDS entry needs these
2239 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2240 UINT MatchWDSTabIdx;
2241 UCHAR MaxSupportedRate;
2243 UCHAR CurrTxRateIndex;
2244 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2245 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2246 // USHORT OneSecTxOkCount;
2247 UINT32 OneSecTxNoRetryOkCount;
2248 UINT32 OneSecTxRetryOkCount;
2249 UINT32 OneSecTxFailCount;
2250 UINT32 ContinueTxFailCnt;
2251 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2252 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2253 //====================================================
2257 #ifdef CONFIG_STA_SUPPORT
2258 #ifdef QOS_DLS_SUPPORT
2259 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2260 #endif // QOS_DLS_SUPPORT //
2261 #endif // CONFIG_STA_SUPPORT //
2263 BOOLEAN fNoisyEnvironment;
2264 BOOLEAN fLastSecAccordingRSSI;
2265 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2266 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2267 ULONG LastTxOkCount;
2268 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2270 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2271 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2272 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2273 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2274 ULONG ClientStatusFlags;
2276 // TODO: Shall we move that to DOT11_N_SUPPORT???
2277 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2279 #ifdef DOT11_N_SUPPORT
2280 // HT EWC MIMO-N used parameters
2281 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2282 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2283 USHORT TXAutoBAbitmap;
2284 USHORT BADeclineBitmap;
2285 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2286 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2287 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2289 // 802.11n features.
2291 UCHAR MaxRAmpduFactor;
2293 UCHAR MmpsMode; // MIMO power save more.
2295 HT_CAPABILITY_IE HTCapability;
2297 #ifdef DOT11N_DRAFT3
2298 UCHAR BSS2040CoexistenceMgmtSupport;
2299 #endif // DOT11N_DRAFT3 //
2300 #endif // DOT11_N_SUPPORT //
2302 BOOLEAN bAutoTxRateSwitch;
2305 struct _MAC_TABLE_ENTRY *pNext;
2306 USHORT TxSeq[NUM_OF_TID];
2307 USHORT NonQosDataSeq;
2309 RSSI_SAMPLE RssiSample;
2311 UINT32 TXMCSExpected[16];
2312 UINT32 TXMCSSuccessful[16];
2313 UINT32 TXMCSFailed[16];
2314 UINT32 TXMCSAutoFallBack[16][16];
2316 #ifdef CONFIG_STA_SUPPORT
2317 ULONG LastBeaconRxTime;
2318 #endif // CONFIG_STA_SUPPORT //
2319 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2321 typedef struct _MAC_TABLE {
2323 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2324 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2325 QUEUE_HEADER McastPsQueue;
2327 BOOLEAN fAnyStationInPsm;
2328 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2329 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2330 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2331 #ifdef DOT11_N_SUPPORT
2332 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2333 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2334 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2335 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2336 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2337 #endif // DOT11_N_SUPPORT //
2338 } MAC_TABLE, *PMAC_TABLE;
2340 #ifdef DOT11_N_SUPPORT
2341 #define IS_HT_STA(_pMacEntry) \
2342 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2344 #define IS_HT_RATE(_pMacEntry) \
2345 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2347 #define PEER_IS_HT_RATE(_pMacEntry) \
2348 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2349 #endif // DOT11_N_SUPPORT //
2351 typedef struct _WDS_ENTRY {
2353 UCHAR Addr[MAC_ADDR_LEN];
2354 ULONG NoDataIdleCount;
2355 struct _WDS_ENTRY *pNext;
2356 } WDS_ENTRY, *PWDS_ENTRY;
2358 typedef struct _WDS_TABLE_ENTRY {
2360 UCHAR WdsAddr[MAC_ADDR_LEN];
2361 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2362 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2363 UCHAR MaxSupportedRate;
2365 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2366 USHORT OneSecTxOkCount;
2367 USHORT OneSecTxRetryOkCount;
2368 USHORT OneSecTxFailCount;
2369 ULONG CurrTxRateStableTime; // # of second in current TX rate
2370 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2371 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2373 typedef struct _RT_802_11_WDS_ENTRY {
2377 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2378 UCHAR MacTabMatchWCID; // ASIC
2379 NDIS_802_11_WEP_STATUS WepStatus;
2382 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2383 RT_HT_PHY_INFO DesiredHtPhyInfo;
2384 BOOLEAN bAutoTxRateSwitch;
2385 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2386 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2388 typedef struct _WDS_TABLE {
2391 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2392 } WDS_TABLE, *PWDS_TABLE;
2394 typedef struct _APCLI_STRUCT {
2397 unsigned int mylinkid;
2399 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2400 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2401 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2403 CHAR Ssid[MAX_LEN_OF_SSID];
2406 CHAR CfgSsid[MAX_LEN_OF_SSID];
2407 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2408 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2410 ULONG ApCliRcvBeaconTime;
2412 ULONG CtrlCurrState;
2413 ULONG SyncCurrState;
2414 ULONG AuthCurrState;
2415 ULONG AssocCurrState;
2416 ULONG WpaPskCurrState;
2421 ULONG ClientStatusFlags;
2424 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2425 NDIS_802_11_WEP_STATUS WepStatus;
2427 // Add to support different cipher suite for WPA2/WPA mode
2428 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2429 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2430 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2431 USHORT RsnCapability;
2433 UCHAR PSK[100]; // reserve PSK key material
2435 UCHAR PMK[32]; // WPA PSK mode PMK
2436 //UCHAR PTK[64]; // WPA PSK mode PTK
2437 UCHAR GTK[32]; // GTK from authenticator
2439 //CIPHER_KEY PairwiseKey;
2440 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2443 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2444 //UCHAR PortSecured;
2446 // store RSN_IE built by driver
2447 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2450 // For WPA countermeasures
2451 ULONG LastMicErrorTime; // record last MIC error time
2452 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2453 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2455 // For WPA-PSK supplicant state
2456 //WPA_STATE WpaState; // Default is SS_NOTUSE
2457 //UCHAR ReplayCounter[8];
2458 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2459 UCHAR SNonce[32]; // SNonce for WPA-PSK
2460 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2462 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2463 RT_HT_PHY_INFO DesiredHtPhyInfo;
2464 BOOLEAN bAutoTxRateSwitch;
2465 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2466 } APCLI_STRUCT, *PAPCLI_STRUCT;
2468 // ----------- end of AP ----------------------------
2473 BOOLEAN bGreenField;
2478 typedef struct _INF_PCI_CONFIG
2480 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2483 typedef struct _INF_USB_CONFIG
2485 UINT BulkInEpAddr; // bulk-in endpoint address
2486 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2490 #ifdef IKANOS_VX_1X0
2491 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2493 struct IKANOS_TX_INFO
2495 struct net_device *netdev;
2496 IkanosWlanTxCbFuncP *fp;
2498 #endif // IKANOS_VX_1X0 //
2501 #define DIAGNOSE_TIME 10 // 10 sec
2502 typedef struct _RtmpDiagStrcut_
2503 { // Diagnosis Related element
2504 unsigned char inited;
2506 unsigned char ArrayStartIdx;
2507 unsigned char ArrayCurIdx;
2509 USHORT TxDataCnt[DIAGNOSE_TIME];
2510 USHORT TxFailCnt[DIAGNOSE_TIME];
2511 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2512 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2513 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2514 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2515 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2517 USHORT TxAggCnt[DIAGNOSE_TIME];
2518 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2519 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2520 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2521 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2522 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2525 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2526 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2527 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2528 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2530 #endif // DBG_DIAGNOSE //
2534 // The miniport adapter structure
2536 typedef struct _RTMP_ADAPTER
2538 PVOID OS_Cookie; // save specific structure relative to OS
2544 NDIS_SPIN_LOCK irq_lock;
2548 /*****************************************************************************************/
2549 /* USB related parameters */
2550 /*****************************************************************************************/
2551 struct usb_config_descriptor *config;
2552 UINT BulkInEpAddr; // bulk-in endpoint address
2553 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2556 USHORT BulkOutMaxPacketSize;
2557 USHORT BulkInMaxPacketSize;
2559 //======Control Flags
2560 LONG PendingIoCount;
2562 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2565 //======Timer Thread
2566 RT2870_TIMER_QUEUE TimerQ;
2567 NDIS_SPIN_LOCK TimerQLock;
2572 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2574 BOOLEAN TimerFunc_kill;
2578 //======Semaphores (event)
2579 struct semaphore mlme_semaphore; /* to sleep thread on */
2580 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2581 struct semaphore RTUSBTimer_semaphore;
2582 #ifdef INF_AMAZON_SE
2583 struct semaphore UsbVendorReq_semaphore;
2584 PVOID UsbVendorReqBuf;
2585 #endif // INF_AMAZON_SE //
2586 struct completion TimerQComplete;
2587 struct completion mlmeComplete;
2588 struct completion CmdQComplete;
2589 wait_queue_head_t *wait;
2593 /*****************************************************************************************/
2594 /* Both PCI/USB related parameters */
2595 /*****************************************************************************************/
2598 /*****************************************************************************************/
2599 /* Tx related parameters */
2600 /*****************************************************************************************/
2601 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2602 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2605 // Data related context and AC specified, 4 AC supported
2606 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2607 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2609 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2610 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2612 // 4 sets of Bulk Out index and pending flag
2613 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2615 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2616 UCHAR bulkResetPipeid;
2617 BOOLEAN MgmtBulkPending;
2618 ULONG bulkResetReq[6];
2621 // resource for software backlog queues
2622 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2623 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2625 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2626 RTMP_MGMT_RING MgmtRing;
2627 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2630 /*****************************************************************************************/
2631 /* Rx related parameters */
2632 /*****************************************************************************************/
2636 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2637 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2638 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2639 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2640 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2641 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2642 ULONG TransferBufferLength; // current length of the packet buffer
2643 ULONG ReadPosition; // current read position in a packet buffer
2647 /*****************************************************************************************/
2648 /* ASIC related parameters */
2649 /*****************************************************************************************/
2650 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2652 // ---------------------------
2654 // ---------------------------
2655 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2656 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2657 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2658 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2660 // ---------------------------
2662 // ---------------------------
2663 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2664 UCHAR BbpRssiToDbmDelta;
2665 BBP_R66_TUNING BbpTuning;
2667 // ----------------------------
2669 // ----------------------------
2670 UCHAR RfIcType; // RFIC_xxx
2671 ULONG RfFreqOffset; // Frequency offset for channel switching
2672 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2674 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2675 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2677 // This soft Rx Antenna Diversity mechanism is used only when user set
2678 // RX Antenna = DIVERSITY ON
2679 SOFT_RX_ANT_DIVERSITY RxAnt;
2682 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2683 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2684 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2685 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2687 UCHAR ChannelListNum; // number of channel in ChannelList[]
2690 ULONG Tx20MPwrCfgABand[5];
2691 ULONG Tx20MPwrCfgGBand[5];
2692 ULONG Tx40MPwrCfgABand[5];
2693 ULONG Tx40MPwrCfgGBand[5];
2695 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2696 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2697 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2698 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2699 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2700 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2702 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2703 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2704 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2705 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2706 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2707 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2709 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2710 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2711 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2712 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2715 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2716 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2717 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2718 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2721 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2722 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2723 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2724 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2726 // ----------------------------
2728 // ----------------------------
2729 MCU_LEDCS_STRUC LedCntl;
2730 USHORT Led1; // read from EEPROM 0x3c
2731 USHORT Led2; // EEPROM 0x3e
2732 USHORT Led3; // EEPROM 0x40
2733 UCHAR LedIndicatorStregth;
2734 UCHAR RssiSingalstrengthOffet;
2735 BOOLEAN bLedOnScanning;
2738 /*****************************************************************************************/
2739 /* 802.11 related parameters */
2740 /*****************************************************************************************/
2741 // outgoing BEACON frame buffer and corresponding TXD
2742 TXWI_STRUC BeaconTxWI;
2744 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2746 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2747 PSPOLL_FRAME PsPollFrame;
2748 HEADER_802_11 NullFrame;
2751 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2752 TX_CONTEXT NullContext;
2753 TX_CONTEXT PsPollContext;
2754 TX_CONTEXT RTSContext;
2759 //=========AP===========
2762 //=======STA===========
2763 #ifdef CONFIG_STA_SUPPORT
2764 /* Modified by Wu Xi-Kun 4/21/2006 */
2765 // -----------------------------------------------
2766 // STA specific configuration & operation status
2767 // used only when pAd->OpMode == OPMODE_STA
2768 // -----------------------------------------------
2769 STA_ADMIN_CONFIG StaCfg; // user desired settings
2770 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2771 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2772 NDIS_MEDIA_STATE PreMediaState;
2773 #endif // CONFIG_STA_SUPPORT //
2775 //=======Common===========
2776 // OP mode: either AP or STA
2777 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2779 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2782 // configuration: read from Registry & E2PROM
2783 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2784 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2785 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2787 // ------------------------------------------------------
2788 // common configuration to both OPMODE_STA and OPMODE_AP
2789 // ------------------------------------------------------
2790 COMMON_CONFIG CommonCfg;
2793 // AP needs those vaiables for site survey feature.
2794 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2795 BSS_TABLE ScanTab; // store the latest SCAN result
2797 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2798 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2799 NDIS_SPIN_LOCK MacTabLock;
2801 #ifdef DOT11_N_SUPPORT
2803 #endif // DOT11_N_SUPPORT //
2804 NDIS_SPIN_LOCK BATabLock;
2805 RALINK_TIMER_STRUCT RECBATimer;
2807 // encryption/decryption KEY tables
2808 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2810 // RX re-assembly buffer for fragmentation
2811 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2814 COUNTER_802_3 Counters8023; // 802.3 counters
2815 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2816 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2817 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2818 PRIVATE_STRUC PrivateInfo; // Private information & counters
2820 // flags, see fRTMP_ADAPTER_xxx flags
2821 ULONG Flags; // Represent current device status
2823 // current TX sequence #
2826 // Control disconnect / connect event generation
2827 //+++Didn't used anymore
2832 //+++Used only for Station
2833 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2836 ULONG ExtraInfo; // Extra information for displaying status
2837 ULONG SystemErrorBitmap; // b0: E2PROM version error
2839 //+++Didn't used anymore
2840 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2843 // ---------------------------
2845 // ---------------------------
2846 RT_802_11_EVENT_TABLE EventTab;
2851 /*****************************************************************************************/
2852 /* Statistic related parameters */
2853 /*****************************************************************************************/
2855 ULONG BulkOutDataOneSecCount;
2856 ULONG BulkInDataOneSecCount;
2857 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2858 ULONG watchDogRxCnt;
2859 ULONG watchDogRxOverFlowCnt;
2860 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2863 BOOLEAN bUpdateBcnCntDone;
2864 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2865 // ----------------------------
2867 // ----------------------------
2868 //ULONG DebugSetting[4];
2869 BOOLEAN bBanAllBaSetup;
2870 BOOLEAN bPromiscuous;
2872 // ----------------------------
2873 // rt2860c emulation-use Parameters
2874 // ----------------------------
2877 ULONG cfendaccu[30];
2878 ULONG bacontent[16];
2879 ULONG rxint[RX_RING_SIZE+1];
2882 BOOLEAN bForcePrintTX;
2883 BOOLEAN bForcePrintRX;
2884 BOOLEAN bDisablescanning; //defined in RT2870 USB
2885 BOOLEAN bStaFifoTest;
2886 BOOLEAN bProtectionTest;
2888 BOOLEAN bGenOneHCCA;
2889 BOOLEAN bBroadComHT;
2890 //+++Following add from RT2870 USB.
2892 ULONG BulkOutComplete;
2893 ULONG BulkOutCompleteOther;
2894 ULONG BulkOutCompleteCancel; // seems not use now?
2896 ULONG BulkInComplete;
2897 ULONG BulkInCompleteFail;
2900 struct wificonf WIFItestbed;
2902 #ifdef DOT11_N_SUPPORT
2903 struct reordering_mpdu_pool mpdu_blk_pool;
2904 #endif // DOT11_N_SUPPORT //
2906 ULONG OneSecondnonBEpackets; // record non BE packets per second
2908 #if WIRELESS_EXT >= 12
2909 struct iw_statistics iw_stats;
2912 struct net_device_stats stats;
2914 #ifdef MULTIPLE_CARD_SUPPORT
2916 UCHAR MC_FileName[256];
2917 #endif // MULTIPLE_CARD_SUPPORT //
2919 ULONG TbttTickCount;
2920 #ifdef PCI_MSI_SUPPORT
2922 #endif // PCI_MSI_SUPPORT //
2927 #define TIME_BASE (1000000/OS_HZ)
2928 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2929 UCHAR flg_be_adjust;
2930 ULONG be_adjust_last_time;
2933 #ifdef IKANOS_VX_1X0
2934 struct IKANOS_TX_INFO IkanosTxInfo;
2935 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2936 #endif // IKANOS_VX_1X0 //
2940 RtmpDiagStruct DiagStruct;
2941 #endif // DBG_DIAGNOSE //
2944 UINT8 PM_FlgSuspend;
2945 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2948 // Cisco IAPP format
2950 typedef struct _CISCO_IAPP_CONTENT_
2952 USHORT Length; //IAPP Length
2953 UCHAR MessageType; //IAPP type
2954 UCHAR FunctionCode; //IAPP function type
2955 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2956 UCHAR SourceMAC[MAC_ADDR_LEN];
2957 USHORT Tag; //Tag(element IE) - Adjacent AP report
2958 USHORT TagLength; //Length of element not including 4 byte header
2959 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2960 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2963 UCHAR Ssid[MAX_LEN_OF_SSID];
2964 USHORT Seconds; //Seconds that the client has been disassociated.
2965 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2967 #define DELAYINTMASK 0x0003fffb
2968 #define INTMASK 0x0003fffb
2969 #define IndMask 0x0003fffc
2970 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2971 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2972 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2973 #define TxCoherent 0x00020000 // tx coherent
2974 #define RxCoherent 0x00010000 // rx coherent
2975 #define McuCommand 0x00000200 // mcu
2976 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2977 #define TBTTInt 0x00000800 // TBTT interrupt
2978 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2979 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2980 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2983 typedef struct _RX_BLK_
2985 // RXD_STRUC RxD; // sample
2986 RT28XX_RXD_STRUC RxD;
2988 PHEADER_802_11 pHeader;
2989 PNDIS_PACKET pRxPacket;
2993 UCHAR UserPriority; // for calculate TKIP MIC using
2997 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2998 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2999 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3002 #define fRX_WDS 0x0001
3003 #define fRX_AMSDU 0x0002
3004 #define fRX_ARALINK 0x0004
3005 #define fRX_HTC 0x0008
3006 #define fRX_PAD 0x0010
3007 #define fRX_AMPDU 0x0020
3008 #define fRX_QOS 0x0040
3009 #define fRX_INFRA 0x0080
3010 #define fRX_EAP 0x0100
3011 #define fRX_MESH 0x0200
3012 #define fRX_APCLI 0x0400
3013 #define fRX_DLS 0x0800
3014 #define fRX_WPI 0x1000
3016 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3017 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3018 #define LENGTH_ARALINK_HEADER_FIELD 2
3020 #define TX_UNKOWN_FRAME 0x00
3021 #define TX_MCAST_FRAME 0x01
3022 #define TX_LEGACY_FRAME 0x02
3023 #define TX_AMPDU_FRAME 0x04
3024 #define TX_AMSDU_FRAME 0x08
3025 #define TX_RALINK_FRAME 0x10
3026 #define TX_FRAG_FRAME 0x20
3029 // Currently the sizeof(TX_BLK) is 148 bytes.
3030 typedef struct _TX_BLK_
3033 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3034 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3035 USHORT TotalFragNum; // Total frame fragments required in one batch
3036 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3038 QUEUE_HEADER TxPacketList;
3039 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3040 HTTRANSMIT_SETTING *pTransmit;
3042 // Following structure used for the characteristics of a specific packet.
3043 PNDIS_PACKET pPacket;
3044 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3045 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3046 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3047 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3048 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3049 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3050 UCHAR HdrPadLen; // recording Header Padding Length;
3051 UCHAR apidx; // The interface associated to this packet
3052 UCHAR Wcid; // The MAC entry associated to this packet
3053 UCHAR UserPriority; // priority class of packet
3054 UCHAR FrameGap; // what kind of IFS this packet use
3055 UCHAR MpduReqNum; // number of fragments of this frame
3056 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3057 UCHAR CipherAlg; // cipher alogrithm
3062 USHORT Flags; //See following definitions for detail.
3064 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3065 ULONG Priv; // Hardware specific value saved in here.
3069 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3070 #define fTX_bAckRequired 0x0002 // the packet need ack response
3071 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3072 #define fTX_bHTRate 0x0008 // allow to use HT rate
3073 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3074 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3075 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3076 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3077 #define fTX_bWMM 0x0080 // QOS Data
3079 #define fTX_bClearEAPFrame 0x0100
3082 #ifdef CONFIG_STA_SUPPORT
3083 #endif // CONFIG_STA_SUPPORT //
3087 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3090 (_pTxBlk->Flags |= _flag) \
3092 (_pTxBlk->Flags &= ~(_flag)) \
3095 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3096 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3097 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3103 //------------------------------------------------------------------------------------------
3107 #ifdef RT_BIG_ENDIAN
3108 static inline VOID WriteBackToDescriptor(
3111 IN BOOLEAN DoEncrypt,
3112 IN ULONG DescriptorType)
3116 p1 = ((UINT32 *)Dest);
3117 p2 = ((UINT32 *)Src);
3122 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3126 ========================================================================
3128 Routine Description:
3129 Endian conversion of Tx/Rx descriptor .
3132 pAd Pointer to our adapter
3133 pData Pointer to Tx/Rx descriptor
3134 DescriptorType Direction of the frame
3140 Call this function when read or update descriptor
3141 ========================================================================
3143 static inline VOID RTMPWIEndianChange(
3145 IN ULONG DescriptorType)
3150 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3152 if(DescriptorType == TYPE_TXWI)
3154 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3155 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3159 for(i=0; i < size/4 ; i++)
3160 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3165 ========================================================================
3167 Routine Description:
3168 Endian conversion of Tx/Rx descriptor .
3171 pAd Pointer to our adapter
3172 pData Pointer to Tx/Rx descriptor
3173 DescriptorType Direction of the frame
3179 Call this function when read or update descriptor
3180 ========================================================================
3184 static inline VOID RTMPDescriptorEndianChange(
3186 IN ULONG DescriptorType)
3188 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3192 ========================================================================
3194 Routine Description:
3195 Endian conversion of all kinds of 802.11 frames .
3198 pAd Pointer to our adapter
3199 pData Pointer to the 802.11 frame structure
3200 Dir Direction of the frame
3201 FromRxDoneInt Caller is from RxDone interrupt
3207 Call this function when read or update buffer data
3208 ========================================================================
3210 static inline VOID RTMPFrameEndianChange(
3211 IN PRTMP_ADAPTER pAd,
3214 IN BOOLEAN FromRxDoneInt)
3216 PHEADER_802_11 pFrame;
3219 // swab 16 bit fields - Frame Control field
3222 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3225 pFrame = (PHEADER_802_11) pData;
3226 pMacHdr = (PUCHAR) pFrame;
3228 // swab 16 bit fields - Duration/ID field
3229 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3231 // swab 16 bit fields - Sequence Control field
3232 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3234 if(pFrame->FC.Type == BTYPE_MGMT)
3236 switch(pFrame->FC.SubType)
3238 case SUBTYPE_ASSOC_REQ:
3239 case SUBTYPE_REASSOC_REQ:
3240 // swab 16 bit fields - CapabilityInfo field
3241 pMacHdr += sizeof(HEADER_802_11);
3242 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3244 // swab 16 bit fields - Listen Interval field
3246 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3249 case SUBTYPE_ASSOC_RSP:
3250 case SUBTYPE_REASSOC_RSP:
3251 // swab 16 bit fields - CapabilityInfo field
3252 pMacHdr += sizeof(HEADER_802_11);
3253 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3255 // swab 16 bit fields - Status Code field
3257 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3259 // swab 16 bit fields - AID field
3261 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3265 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3266 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3267 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3271 // swab 16 bit fields - Auth Alg No. field
3272 pMacHdr += sizeof(HEADER_802_11);
3273 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3275 // swab 16 bit fields - Auth Seq No. field
3277 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3279 // swab 16 bit fields - Status Code field
3281 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3285 case SUBTYPE_BEACON:
3286 case SUBTYPE_PROBE_RSP:
3287 // swab 16 bit fields - BeaconInterval field
3288 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3289 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3291 // swab 16 bit fields - CapabilityInfo field
3292 pMacHdr += sizeof(USHORT);
3293 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3296 case SUBTYPE_DEAUTH:
3297 case SUBTYPE_DISASSOC:
3298 // swab 16 bit fields - Reason code field
3299 pMacHdr += sizeof(HEADER_802_11);
3300 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3304 else if( pFrame->FC.Type == BTYPE_DATA )
3307 else if(pFrame->FC.Type == BTYPE_CNTL)
3309 switch(pFrame->FC.SubType)
3311 case SUBTYPE_BLOCK_ACK_REQ:
3313 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3314 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3315 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3318 case SUBTYPE_BLOCK_ACK:
3319 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3320 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3324 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3325 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3331 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3334 // swab 16 bit fields - Frame Control
3335 if(Dir == DIR_WRITE)
3337 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3340 #endif // RT_BIG_ENDIAN //
3343 static inline VOID ConvertMulticastIP2MAC(
3345 IN PUCHAR *ppMacAddr,
3346 IN UINT16 ProtoType)
3348 if (pIpAddr == NULL)
3351 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3357 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3358 *(*ppMacAddr) = 0x33;
3359 *(*ppMacAddr + 1) = 0x33;
3360 *(*ppMacAddr + 2) = pIpAddr[12];
3361 *(*ppMacAddr + 3) = pIpAddr[13];
3362 *(*ppMacAddr + 4) = pIpAddr[14];
3363 *(*ppMacAddr + 5) = pIpAddr[15];
3368 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3369 *(*ppMacAddr) = 0x01;
3370 *(*ppMacAddr + 1) = 0x00;
3371 *(*ppMacAddr + 2) = 0x5e;
3372 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3373 *(*ppMacAddr + 4) = pIpAddr[2];
3374 *(*ppMacAddr + 5) = pIpAddr[3];
3381 BOOLEAN RTMPCheckForHang(
3382 IN NDIS_HANDLE MiniportAdapterContext
3386 IN NDIS_HANDLE MiniportAdapterContext
3390 // Private routines in rtmp_init.c
3392 NDIS_STATUS RTMPAllocAdapterBlock(
3394 OUT PRTMP_ADAPTER *ppAdapter
3397 NDIS_STATUS RTMPAllocTxRxRingMemory(
3398 IN PRTMP_ADAPTER pAd
3401 NDIS_STATUS RTMPFindAdapter(
3402 IN PRTMP_ADAPTER pAd,
3403 IN NDIS_HANDLE WrapperConfigurationContext
3406 NDIS_STATUS RTMPReadParametersHook(
3407 IN PRTMP_ADAPTER pAd
3410 VOID RTMPFreeAdapter(
3411 IN PRTMP_ADAPTER pAd
3414 NDIS_STATUS NICReadRegParameters(
3415 IN PRTMP_ADAPTER pAd,
3416 IN NDIS_HANDLE WrapperConfigurationContext
3420 VOID NICInitRT30xxRFRegisters(
3421 IN PRTMP_ADAPTER pAd);
3424 VOID NICReadEEPROMParameters(
3425 IN PRTMP_ADAPTER pAd,
3426 IN PUCHAR mac_addr);
3428 VOID NICInitAsicFromEEPROM(
3429 IN PRTMP_ADAPTER pAd);
3431 VOID NICInitTxRxRingAndBacklogQueue(
3432 IN PRTMP_ADAPTER pAd);
3434 NDIS_STATUS NICInitializeAdapter(
3435 IN PRTMP_ADAPTER pAd,
3436 IN BOOLEAN bHardReset);
3438 NDIS_STATUS NICInitializeAsic(
3439 IN PRTMP_ADAPTER pAd,
3440 IN BOOLEAN bHardReset);
3443 IN PRTMP_ADAPTER pAd);
3445 VOID RTMPRingCleanUp(
3446 IN PRTMP_ADAPTER pAd,
3450 IN PRTMP_ADAPTER pAd);
3452 NDIS_STATUS DbgSendPacket(
3453 IN PRTMP_ADAPTER pAd,
3454 IN PNDIS_PACKET pPacket);
3457 IN PRTMP_ADAPTER pAd);
3459 VOID NICResetFromError(
3460 IN PRTMP_ADAPTER pAd);
3462 VOID NICEraseFirmware(
3463 IN PRTMP_ADAPTER pAd);
3465 NDIS_STATUS NICLoadFirmware(
3466 IN PRTMP_ADAPTER pAd);
3468 NDIS_STATUS NICLoadRateSwitchingParams(
3469 IN PRTMP_ADAPTER pAd);
3471 BOOLEAN NICCheckForHang(
3472 IN PRTMP_ADAPTER pAd);
3474 VOID NICUpdateFifoStaCounters(
3475 IN PRTMP_ADAPTER pAd);
3477 VOID NICUpdateRawCounters(
3478 IN PRTMP_ADAPTER pAd);
3481 ULONG RTMPEqualMemory(
3487 ULONG RTMPNotAllZero(
3491 VOID RTMPZeroMemory(
3495 ULONG RTMPCompareMemory(
3500 VOID RTMPMoveMemory(
3513 VOID RTMPPatchMacBbpBug(
3514 IN PRTMP_ADAPTER pAd);
3516 VOID RTMPPatchCardBus(
3517 IN PRTMP_ADAPTER pAdapter);
3519 VOID RTMPPatchRalinkCardBus(
3520 IN PRTMP_ADAPTER pAdapter,
3523 ULONG RTMPReadCBConfig(
3529 VOID RTMPWriteCBConfig(
3537 IN PRTMP_ADAPTER pAd,
3538 IN PRALINK_TIMER_STRUCT pTimer,
3539 IN PVOID pTimerFunc,
3544 IN PRALINK_TIMER_STRUCT pTimer,
3549 IN PRALINK_TIMER_STRUCT pTimer,
3552 VOID RTMPCancelTimer(
3553 IN PRALINK_TIMER_STRUCT pTimer,
3554 OUT BOOLEAN *pCancelled);
3557 IN PRTMP_ADAPTER pAd,
3560 VOID RTMPSetSignalLED(
3561 IN PRTMP_ADAPTER pAd,
3562 IN NDIS_802_11_RSSI Dbm);
3564 VOID RTMPEnableRxTx(
3565 IN PRTMP_ADAPTER pAd);
3568 // prototype in action.c
3570 VOID ActionStateMachineInit(
3571 IN PRTMP_ADAPTER pAd,
3572 IN STATE_MACHINE *S,
3573 OUT STATE_MACHINE_FUNC Trans[]);
3575 VOID MlmeADDBAAction(
3576 IN PRTMP_ADAPTER pAd,
3577 IN MLME_QUEUE_ELEM *Elem);
3579 VOID MlmeDELBAAction(
3580 IN PRTMP_ADAPTER pAd,
3581 IN MLME_QUEUE_ELEM *Elem);
3584 IN PRTMP_ADAPTER pAd,
3585 IN MLME_QUEUE_ELEM *Elem);
3587 VOID MlmeInvalidAction(
3588 IN PRTMP_ADAPTER pAd,
3589 IN MLME_QUEUE_ELEM *Elem);
3592 IN PRTMP_ADAPTER pAd,
3593 IN MLME_QUEUE_ELEM *Elem);
3595 #ifdef DOT11_N_SUPPORT
3596 VOID PeerAddBAReqAction(
3597 IN PRTMP_ADAPTER pAd,
3598 IN MLME_QUEUE_ELEM *Elem);
3600 VOID PeerAddBARspAction(
3601 IN PRTMP_ADAPTER pAd,
3602 IN MLME_QUEUE_ELEM *Elem);
3604 VOID PeerDelBAAction(
3605 IN PRTMP_ADAPTER pAd,
3606 IN MLME_QUEUE_ELEM *Elem);
3609 IN PRTMP_ADAPTER pAd,
3610 IN MLME_QUEUE_ELEM *Elem);
3611 #endif // DOT11_N_SUPPORT //
3613 VOID SendPSMPAction(
3614 IN PRTMP_ADAPTER pAd,
3619 #ifdef DOT11N_DRAFT3
3620 VOID SendBSS2040CoexistMgmtAction(
3621 IN PRTMP_ADAPTER pAd,
3626 VOID SendNotifyBWActionFrame(
3627 IN PRTMP_ADAPTER pAd,
3631 BOOLEAN ChannelSwitchSanityCheck(
3632 IN PRTMP_ADAPTER pAd,
3634 IN UCHAR NewChannel,
3635 IN UCHAR Secondary);
3637 VOID ChannelSwitchAction(
3638 IN PRTMP_ADAPTER pAd,
3641 IN UCHAR Secondary);
3643 ULONG BuildIntolerantChannelRep(
3644 IN PRTMP_ADAPTER pAd,
3647 VOID Update2040CoexistFrameAndNotify(
3648 IN PRTMP_ADAPTER pAd,
3650 IN BOOLEAN bAddIntolerantCha);
3652 VOID Send2040CoexistAction(
3653 IN PRTMP_ADAPTER pAd,
3655 IN BOOLEAN bAddIntolerantCha);
3656 #endif // DOT11N_DRAFT3 //
3659 IN PRTMP_ADAPTER pAd,
3660 IN MLME_QUEUE_ELEM *Elem);
3662 VOID PeerPublicAction(
3663 IN PRTMP_ADAPTER pAd,
3664 IN MLME_QUEUE_ELEM *Elem);
3666 #ifdef CONFIG_STA_SUPPORT
3667 VOID StaPublicAction(
3668 IN PRTMP_ADAPTER pAd,
3669 IN UCHAR Bss2040Coexist);
3670 #endif // CONFIG_STA_SUPPORT //
3673 VOID PeerBSSTranAction(
3674 IN PRTMP_ADAPTER pAd,
3675 IN MLME_QUEUE_ELEM *Elem);
3677 #ifdef DOT11_N_SUPPORT
3679 IN PRTMP_ADAPTER pAd,
3680 IN MLME_QUEUE_ELEM *Elem);
3681 #endif // DOT11_N_SUPPORT //
3684 IN PRTMP_ADAPTER pAd,
3685 IN MLME_QUEUE_ELEM *Elem);
3687 #ifdef QOS_DLS_SUPPORT
3689 IN PRTMP_ADAPTER pAd,
3690 IN MLME_QUEUE_ELEM *Elem);
3691 #endif // QOS_DLS_SUPPORT //
3693 #ifdef CONFIG_STA_SUPPORT
3694 #ifdef QOS_DLS_SUPPORT
3696 IN PRTMP_ADAPTER pAd,
3697 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3698 IN PRT_802_11_DLS pDls,
3700 #endif // QOS_DLS_SUPPORT //
3701 #endif // CONFIG_STA_SUPPORT //
3703 #ifdef DOT11_N_SUPPORT
3704 VOID RECBATimerTimeout(
3705 IN PVOID SystemSpecific1,
3706 IN PVOID FunctionContext,
3707 IN PVOID SystemSpecific2,
3708 IN PVOID SystemSpecific3);
3710 VOID ORIBATimerTimeout(
3711 IN PRTMP_ADAPTER pAd);
3713 VOID SendRefreshBAR(
3714 IN PRTMP_ADAPTER pAd,
3715 IN MAC_TABLE_ENTRY *pEntry);
3716 #endif // DOT11_N_SUPPORT //
3719 IN PRTMP_ADAPTER pAd,
3720 IN OUT PHEADER_802_11 pHdr80211,
3726 IN PRTMP_ADAPTER pAd,
3727 IN OUT PFRAME_BAR pCntlBar,
3731 VOID InsertActField(
3732 IN PRTMP_ADAPTER pAd,
3733 OUT PUCHAR pFrameBuf,
3734 OUT PULONG pFrameLen,
3738 BOOLEAN QosBADataParse(
3739 IN PRTMP_ADAPTER pAd,
3741 IN PUCHAR p8023Header,
3745 IN UCHAR DataOffset,
3747 IN UINT CurRxIndex);
3749 #ifdef DOT11_N_SUPPORT
3750 BOOLEAN CntlEnqueueForRecv(
3751 IN PRTMP_ADAPTER pAd,
3754 IN PFRAME_BA_REQ pMsg);
3756 VOID BaAutoManSwitch(
3757 IN PRTMP_ADAPTER pAd);
3758 #endif // DOT11_N_SUPPORT //
3761 IN PRTMP_ADAPTER pAd,
3762 IN UCHAR BatRecIdx);
3765 // Private routines in rtmp_data.c
3767 BOOLEAN RTMPHandleRxDoneInterrupt(
3768 IN PRTMP_ADAPTER pAd);
3770 VOID RTMPHandleTxDoneInterrupt(
3771 IN PRTMP_ADAPTER pAd);
3773 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3774 IN PRTMP_ADAPTER pAd,
3775 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3777 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3778 IN PRTMP_ADAPTER pAd);
3780 VOID RTMPHandleTBTTInterrupt(
3781 IN PRTMP_ADAPTER pAd);
3783 VOID RTMPHandlePreTBTTInterrupt(
3784 IN PRTMP_ADAPTER pAd);
3786 void RTMPHandleTwakeupInterrupt(
3787 IN PRTMP_ADAPTER pAd);
3789 VOID RTMPHandleRxCoherentInterrupt(
3790 IN PRTMP_ADAPTER pAd);
3792 BOOLEAN TxFrameIsAggregatible(
3793 IN PRTMP_ADAPTER pAd,
3794 IN PUCHAR pPrevAddr1,
3795 IN PUCHAR p8023hdr);
3797 BOOLEAN PeerIsAggreOn(
3798 IN PRTMP_ADAPTER pAd,
3800 IN PMAC_TABLE_ENTRY pMacEntry);
3802 #if 0 // It's not be used
3803 HTTRANSMIT_SETTING *GetTxMode(
3804 IN PRTMP_ADAPTER pAd,
3808 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3809 IN PNDIS_BUFFER pFirstBuffer,
3810 IN UCHAR DesiredOffset,
3814 NDIS_STATUS STASendPacket(
3815 IN PRTMP_ADAPTER pAd,
3816 IN PNDIS_PACKET pPacket);
3818 VOID STASendPackets(
3819 IN NDIS_HANDLE MiniportAdapterContext,
3820 IN PPNDIS_PACKET ppPacketArray,
3821 IN UINT NumberOfPackets);
3823 VOID RTMPDeQueuePacket(
3824 IN PRTMP_ADAPTER pAd,
3825 IN BOOLEAN bIntContext,
3827 IN UCHAR Max_Tx_Packets);
3829 NDIS_STATUS RTMPHardTransmit(
3830 IN PRTMP_ADAPTER pAd,
3831 IN PNDIS_PACKET pPacket,
3833 OUT PULONG pFreeTXDLeft);
3835 NDIS_STATUS STAHardTransmit(
3836 IN PRTMP_ADAPTER pAd,
3840 VOID STARxEAPOLFrameIndicate(
3841 IN PRTMP_ADAPTER pAd,
3842 IN MAC_TABLE_ENTRY *pEntry,
3844 IN UCHAR FromWhichBSSID);
3846 NDIS_STATUS RTMPFreeTXDRequest(
3847 IN PRTMP_ADAPTER pAd,
3849 IN UCHAR NumberRequired,
3850 IN PUCHAR FreeNumberIs);
3852 NDIS_STATUS MlmeHardTransmit(
3853 IN PRTMP_ADAPTER pAd,
3855 IN PNDIS_PACKET pPacket);
3857 NDIS_STATUS MlmeHardTransmitMgmtRing(
3858 IN PRTMP_ADAPTER pAd,
3860 IN PNDIS_PACKET pPacket);
3862 NDIS_STATUS MlmeHardTransmitTxRing(
3863 IN PRTMP_ADAPTER pAd,
3865 IN PNDIS_PACKET pPacket);
3867 USHORT RTMPCalcDuration(
3868 IN PRTMP_ADAPTER pAd,
3873 IN PRTMP_ADAPTER pAd,
3874 IN PTXWI_STRUC pTxWI,
3877 IN BOOLEAN InsTimestamp,
3880 IN BOOLEAN NSeq, // HW new a sequence.
3889 IN HTTRANSMIT_SETTING *pTransmit);
3892 VOID RTMPWriteTxWI_Data(
3893 IN PRTMP_ADAPTER pAd,
3894 IN OUT PTXWI_STRUC pTxWI,
3898 VOID RTMPWriteTxWI_Cache(
3899 IN PRTMP_ADAPTER pAd,
3900 IN OUT PTXWI_STRUC pTxWI,
3903 VOID RTMPWriteTxDescriptor(
3904 IN PRTMP_ADAPTER pAd,
3909 VOID RTMPSuspendMsduTransmission(
3910 IN PRTMP_ADAPTER pAd);
3912 VOID RTMPResumeMsduTransmission(
3913 IN PRTMP_ADAPTER pAd);
3915 NDIS_STATUS MiniportMMRequest(
3916 IN PRTMP_ADAPTER pAd,
3921 NDIS_STATUS MiniportDataMMRequest(
3922 IN PRTMP_ADAPTER pAd,
3927 VOID RTMPSendNullFrame(
3928 IN PRTMP_ADAPTER pAd,
3930 IN BOOLEAN bQosNull);
3932 VOID RTMPSendDisassociationFrame(
3933 IN PRTMP_ADAPTER pAd);
3935 VOID RTMPSendRTSFrame(
3936 IN PRTMP_ADAPTER pAd,
3938 IN unsigned int NextMpduSize,
3941 IN USHORT AckDuration,
3946 NDIS_STATUS RTMPApplyPacketFilter(
3947 IN PRTMP_ADAPTER pAd,
3948 IN PRT28XX_RXD_STRUC pRxD,
3949 IN PHEADER_802_11 pHeader);
3951 PQUEUE_HEADER RTMPCheckTxSwQueue(
3952 IN PRTMP_ADAPTER pAd,
3955 #ifdef CONFIG_STA_SUPPORT
3956 VOID RTMPReportMicError(
3957 IN PRTMP_ADAPTER pAd,
3958 IN PCIPHER_KEY pWpaKey);
3960 VOID WpaMicFailureReportFrame(
3961 IN PRTMP_ADAPTER pAd,
3962 IN MLME_QUEUE_ELEM *Elem);
3964 VOID WpaDisassocApAndBlockAssoc(
3965 IN PVOID SystemSpecific1,
3966 IN PVOID FunctionContext,
3967 IN PVOID SystemSpecific2,
3968 IN PVOID SystemSpecific3);
3969 #endif // CONFIG_STA_SUPPORT //
3971 NDIS_STATUS RTMPCloneNdisPacket(
3972 IN PRTMP_ADAPTER pAd,
3973 IN BOOLEAN pInsAMSDUHdr,
3974 IN PNDIS_PACKET pInPacket,
3975 OUT PNDIS_PACKET *ppOutPacket);
3977 NDIS_STATUS RTMPAllocateNdisPacket(
3978 IN PRTMP_ADAPTER pAd,
3979 IN PNDIS_PACKET *pPacket,
3985 VOID RTMPFreeNdisPacket(
3986 IN PRTMP_ADAPTER pAd,
3987 IN PNDIS_PACKET pPacket);
3989 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3990 IN PRTMP_ADAPTER pAd,
3993 BOOLEAN RTMPCheckDHCPFrame(
3994 IN PRTMP_ADAPTER pAd,
3995 IN PNDIS_PACKET pPacket);
3998 BOOLEAN RTMPCheckEtherType(
3999 IN PRTMP_ADAPTER pAd,
4000 IN PNDIS_PACKET pPacket);
4003 VOID RTMPCckBbpTuning(
4004 IN PRTMP_ADAPTER pAd,
4008 // Private routines in rtmp_wep.c
4010 VOID RTMPInitWepEngine(
4011 IN PRTMP_ADAPTER pAd,
4017 VOID RTMPEncryptData(
4018 IN PRTMP_ADAPTER pAd,
4023 BOOLEAN RTMPDecryptData(
4024 IN PRTMP_ADAPTER pAdapter,
4029 BOOLEAN RTMPSoftDecryptWEP(
4030 IN PRTMP_ADAPTER pAd,
4032 IN ULONG DataByteCnt,
4033 IN PCIPHER_KEY pGroupKey);
4036 IN PRTMP_ADAPTER pAd,
4040 IN PARCFOURCONTEXT Ctx,
4045 IN PARCFOURCONTEXT Ctx);
4047 VOID ARCFOUR_DECRYPT(
4048 IN PARCFOURCONTEXT Ctx,
4053 VOID ARCFOUR_ENCRYPT(
4054 IN PARCFOURCONTEXT Ctx,
4059 VOID WPAARCFOUR_ENCRYPT(
4060 IN PARCFOURCONTEXT Ctx,
4065 UINT RTMP_CALC_FCS32(
4074 // Asic/RF/BBP related functions
4076 VOID AsicAdjustTxPower(
4077 IN PRTMP_ADAPTER pAd);
4079 VOID AsicUpdateProtect(
4080 IN PRTMP_ADAPTER pAd,
4081 IN USHORT OperaionMode,
4083 IN BOOLEAN bDisableBGProtect,
4084 IN BOOLEAN bNonGFExist);
4086 VOID AsicSwitchChannel(
4087 IN PRTMP_ADAPTER pAd,
4091 VOID AsicLockChannel(
4092 IN PRTMP_ADAPTER pAd,
4095 VOID AsicAntennaSelect(
4096 IN PRTMP_ADAPTER pAd,
4099 VOID AsicAntennaSetting(
4100 IN PRTMP_ADAPTER pAd,
4101 IN ABGBAND_STATE BandState);
4103 VOID AsicRfTuningExec(
4104 IN PVOID SystemSpecific1,
4105 IN PVOID FunctionContext,
4106 IN PVOID SystemSpecific2,
4107 IN PVOID SystemSpecific3);
4109 #ifdef CONFIG_STA_SUPPORT
4110 VOID AsicSleepThenAutoWakeup(
4111 IN PRTMP_ADAPTER pAd,
4112 IN USHORT TbttNumToNextWakeUp);
4114 VOID AsicForceSleep(
4115 IN PRTMP_ADAPTER pAd);
4117 VOID AsicForceWakeup(
4118 IN PRTMP_ADAPTER pAd,
4119 IN BOOLEAN bFromTx);
4120 #endif // CONFIG_STA_SUPPORT //
4123 IN PRTMP_ADAPTER pAd,
4126 VOID AsicSetMcastWC(
4127 IN PRTMP_ADAPTER pAd);
4129 #if 0 // removed by AlbertY
4130 VOID AsicSetBssidWC(
4131 IN PRTMP_ADAPTER pAd,
4135 VOID AsicDelWcidTab(
4136 IN PRTMP_ADAPTER pAd,
4140 IN PRTMP_ADAPTER pAd);
4142 VOID AsicDisableRDG(
4143 IN PRTMP_ADAPTER pAd);
4145 VOID AsicDisableSync(
4146 IN PRTMP_ADAPTER pAd);
4148 VOID AsicEnableBssSync(
4149 IN PRTMP_ADAPTER pAd);
4151 VOID AsicEnableIbssSync(
4152 IN PRTMP_ADAPTER pAd);
4154 VOID AsicSetEdcaParm(
4155 IN PRTMP_ADAPTER pAd,
4156 IN PEDCA_PARM pEdcaParm);
4158 VOID AsicSetSlotTime(
4159 IN PRTMP_ADAPTER pAd,
4160 IN BOOLEAN bUseShortSlotTime);
4163 VOID AsicAddWcidCipherEntry(
4164 IN PRTMP_ADAPTER pAd,
4170 IN CIPHER_KEY *pCipherKey);
4173 VOID AsicAddSharedKeyEntry(
4174 IN PRTMP_ADAPTER pAd,
4182 VOID AsicRemoveSharedKeyEntry(
4183 IN PRTMP_ADAPTER pAd,
4187 VOID AsicUpdateWCIDAttribute(
4188 IN PRTMP_ADAPTER pAd,
4192 IN BOOLEAN bUsePairewiseKeyTable);
4194 VOID AsicUpdateWCIDIVEIV(
4195 IN PRTMP_ADAPTER pAd,
4200 VOID AsicUpdateRxWCIDTable(
4201 IN PRTMP_ADAPTER pAd,
4205 VOID AsicAddKeyEntry(
4206 IN PRTMP_ADAPTER pAd,
4210 IN PCIPHER_KEY pCipherKey,
4211 IN BOOLEAN bUsePairewiseKeyTable,
4214 VOID AsicAddPairwiseKeyEntry(
4215 IN PRTMP_ADAPTER pAd,
4218 IN CIPHER_KEY *pCipherKey);
4220 VOID AsicRemovePairwiseKeyEntry(
4221 IN PRTMP_ADAPTER pAd,
4225 BOOLEAN AsicSendCommandToMcu(
4226 IN PRTMP_ADAPTER pAd,
4233 VOID MacAddrRandomBssid(
4234 IN PRTMP_ADAPTER pAd,
4237 VOID MgtMacHeaderInit(
4238 IN PRTMP_ADAPTER pAd,
4239 IN OUT PHEADER_802_11 pHdr80211,
4246 IN PRTMP_ADAPTER pAd);
4249 IN PRTMP_ADAPTER pAd);
4255 #ifdef DOT11_N_SUPPORT
4257 IN PRTMP_ADAPTER pAd,
4259 #endif // DOT11_N_SUPPORT //
4261 ULONG BssTableSearch(
4266 ULONG BssSsidTableSearch(
4273 ULONG BssTableSearchWithSSID(
4280 VOID BssTableDeleteEntry(
4281 IN OUT PBSS_TABLE pTab,
4285 #ifdef DOT11_N_SUPPORT
4286 VOID BATableDeleteORIEntry(
4287 IN OUT PRTMP_ADAPTER pAd,
4288 IN BA_ORI_ENTRY *pBAORIEntry);
4290 VOID BATableDeleteRECEntry(
4291 IN OUT PRTMP_ADAPTER pAd,
4292 IN BA_REC_ENTRY *pBARECEntry);
4294 VOID BATableTearORIEntry(
4295 IN OUT PRTMP_ADAPTER pAd,
4298 IN BOOLEAN bForceDelete,
4301 VOID BATableTearRECEntry(
4302 IN OUT PRTMP_ADAPTER pAd,
4306 #endif // DOT11_N_SUPPORT //
4309 IN PRTMP_ADAPTER pAd,
4310 OUT PBSS_ENTRY pBss,
4315 IN USHORT BeaconPeriod,
4318 IN USHORT CapabilityInfo,
4320 IN UCHAR SupRateLen,
4322 IN UCHAR ExtRateLen,
4323 IN HT_CAPABILITY_IE *pHtCapability,
4324 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4325 IN UCHAR HtCapabilityLen,
4326 IN UCHAR AddHtInfoLen,
4327 IN UCHAR NewExtChanOffset,
4330 IN LARGE_INTEGER TimeStamp,
4332 IN PEDCA_PARM pEdcaParm,
4333 IN PQOS_CAPABILITY_PARM pQosCapability,
4334 IN PQBSS_LOAD_PARM pQbssLoad,
4335 IN USHORT LengthVIE,
4336 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4338 ULONG BssTableSetEntry(
4339 IN PRTMP_ADAPTER pAd,
4340 OUT PBSS_TABLE pTab,
4345 IN USHORT BeaconPeriod,
4348 IN USHORT CapabilityInfo,
4350 IN UCHAR SupRateLen,
4352 IN UCHAR ExtRateLen,
4353 IN HT_CAPABILITY_IE *pHtCapability,
4354 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4355 IN UCHAR HtCapabilityLen,
4356 IN UCHAR AddHtInfoLen,
4357 IN UCHAR NewExtChanOffset,
4360 IN LARGE_INTEGER TimeStamp,
4362 IN PEDCA_PARM pEdcaParm,
4363 IN PQOS_CAPABILITY_PARM pQosCapability,
4364 IN PQBSS_LOAD_PARM pQbssLoad,
4365 IN USHORT LengthVIE,
4366 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4368 #ifdef DOT11_N_SUPPORT
4369 VOID BATableInsertEntry(
4370 IN PRTMP_ADAPTER pAd,
4372 IN USHORT TimeOutValue,
4373 IN USHORT StartingSeq,
4376 IN UCHAR OriginatorStatus,
4377 IN BOOLEAN IsRecipient);
4379 #ifdef DOT11N_DRAFT3
4380 VOID Bss2040CoexistTimeOut(
4381 IN PVOID SystemSpecific1,
4382 IN PVOID FunctionContext,
4383 IN PVOID SystemSpecific2,
4384 IN PVOID SystemSpecific3);
4388 IN PRTMP_ADAPTER pAd);
4390 ULONG TriEventTableSetEntry(
4391 IN PRTMP_ADAPTER pAd,
4392 OUT TRIGGER_EVENT_TAB *Tab,
4394 IN HT_CAPABILITY_IE *pHtCapability,
4395 IN UCHAR HtCapabilityLen,
4397 IN UCHAR ChannelNo);
4399 VOID TriEventCounterMaintenance(
4400 IN PRTMP_ADAPTER pAd);
4401 #endif // DOT11N_DRAFT3 //
4402 #endif // DOT11_N_SUPPORT //
4404 VOID BssTableSsidSort(
4405 IN PRTMP_ADAPTER pAd,
4406 OUT BSS_TABLE *OutTab,
4410 VOID BssTableSortByRssi(
4411 IN OUT BSS_TABLE *OutTab);
4413 VOID BssCipherParse(
4414 IN OUT PBSS_ENTRY pBss);
4416 NDIS_STATUS MlmeQueueInit(
4417 IN MLME_QUEUE *Queue);
4419 VOID MlmeQueueDestroy(
4420 IN MLME_QUEUE *Queue);
4422 BOOLEAN MlmeEnqueue(
4423 IN PRTMP_ADAPTER pAd,
4429 BOOLEAN MlmeEnqueueForRecv(
4430 IN PRTMP_ADAPTER pAd,
4432 IN ULONG TimeStampHigh,
4433 IN ULONG TimeStampLow,
4442 BOOLEAN MlmeDequeue(
4443 IN MLME_QUEUE *Queue,
4444 OUT MLME_QUEUE_ELEM **Elem);
4446 VOID MlmeRestartStateMachine(
4447 IN PRTMP_ADAPTER pAd);
4449 BOOLEAN MlmeQueueEmpty(
4450 IN MLME_QUEUE *Queue);
4452 BOOLEAN MlmeQueueFull(
4453 IN MLME_QUEUE *Queue);
4455 BOOLEAN MsgTypeSubst(
4456 IN PRTMP_ADAPTER pAd,
4457 IN PFRAME_802_11 pFrame,
4461 VOID StateMachineInit(
4462 IN STATE_MACHINE *Sm,
4463 IN STATE_MACHINE_FUNC Trans[],
4466 IN STATE_MACHINE_FUNC DefFunc,
4470 VOID StateMachineSetAction(
4471 IN STATE_MACHINE *S,
4474 IN STATE_MACHINE_FUNC F);
4476 VOID StateMachinePerformAction(
4477 IN PRTMP_ADAPTER pAd,
4478 IN STATE_MACHINE *S,
4479 IN MLME_QUEUE_ELEM *Elem);
4482 IN PRTMP_ADAPTER pAd,
4483 IN MLME_QUEUE_ELEM *Elem);
4485 VOID AssocStateMachineInit(
4486 IN PRTMP_ADAPTER pAd,
4487 IN STATE_MACHINE *Sm,
4488 OUT STATE_MACHINE_FUNC Trans[]);
4490 VOID ReassocTimeout(
4491 IN PVOID SystemSpecific1,
4492 IN PVOID FunctionContext,
4493 IN PVOID SystemSpecific2,
4494 IN PVOID SystemSpecific3);
4497 IN PVOID SystemSpecific1,
4498 IN PVOID FunctionContext,
4499 IN PVOID SystemSpecific2,
4500 IN PVOID SystemSpecific3);
4502 VOID DisassocTimeout(
4503 IN PVOID SystemSpecific1,
4504 IN PVOID FunctionContext,
4505 IN PVOID SystemSpecific2,
4506 IN PVOID SystemSpecific3);
4508 //----------------------------------------------
4509 VOID MlmeDisassocReqAction(
4510 IN PRTMP_ADAPTER pAd,
4511 IN MLME_QUEUE_ELEM *Elem);
4513 VOID MlmeAssocReqAction(
4514 IN PRTMP_ADAPTER pAd,
4515 IN MLME_QUEUE_ELEM *Elem);
4517 VOID MlmeReassocReqAction(
4518 IN PRTMP_ADAPTER pAd,
4519 IN MLME_QUEUE_ELEM *Elem);
4521 VOID MlmeDisassocReqAction(
4522 IN PRTMP_ADAPTER pAd,
4523 IN MLME_QUEUE_ELEM *Elem);
4525 VOID PeerAssocRspAction(
4526 IN PRTMP_ADAPTER pAd,
4527 IN MLME_QUEUE_ELEM *Elem);
4529 VOID PeerReassocRspAction(
4530 IN PRTMP_ADAPTER pAd,
4531 IN MLME_QUEUE_ELEM *Elem);
4533 VOID PeerDisassocAction(
4534 IN PRTMP_ADAPTER pAd,
4535 IN MLME_QUEUE_ELEM *Elem);
4537 VOID DisassocTimeoutAction(
4538 IN PRTMP_ADAPTER pAd,
4539 IN MLME_QUEUE_ELEM *Elem);
4541 VOID AssocTimeoutAction(
4542 IN PRTMP_ADAPTER pAd,
4543 IN MLME_QUEUE_ELEM *Elem);
4545 VOID ReassocTimeoutAction(
4546 IN PRTMP_ADAPTER pAd,
4547 IN MLME_QUEUE_ELEM *Elem);
4550 IN PRTMP_ADAPTER pAd,
4553 VOID SwitchBetweenWepAndCkip(
4554 IN PRTMP_ADAPTER pAd);
4556 VOID InvalidStateWhenAssoc(
4557 IN PRTMP_ADAPTER pAd,
4558 IN MLME_QUEUE_ELEM *Elem);
4560 VOID InvalidStateWhenReassoc(
4561 IN PRTMP_ADAPTER pAd,
4562 IN MLME_QUEUE_ELEM *Elem);
4564 VOID InvalidStateWhenDisassociate(
4565 IN PRTMP_ADAPTER pAd,
4566 IN MLME_QUEUE_ELEM *Elem);
4569 VOID MlmeCntlConfirm(
4570 IN PRTMP_ADAPTER pAd,
4576 IN PRTMP_ADAPTER pAd);
4578 VOID ComposeNullFrame(
4579 IN PRTMP_ADAPTER pAd);
4582 IN PRTMP_ADAPTER pAd,
4584 IN USHORT CapabilityInfo,
4587 IN UCHAR SupRateLen,
4589 IN UCHAR ExtRateLen,
4590 IN PEDCA_PARM pEdcaParm,
4591 IN HT_CAPABILITY_IE *pHtCapability,
4592 IN UCHAR HtCapabilityLen,
4593 IN ADD_HT_INFO_IE *pAddHtInfo);
4595 VOID AuthStateMachineInit(
4596 IN PRTMP_ADAPTER pAd,
4597 IN PSTATE_MACHINE sm,
4598 OUT STATE_MACHINE_FUNC Trans[]);
4601 IN PVOID SystemSpecific1,
4602 IN PVOID FunctionContext,
4603 IN PVOID SystemSpecific2,
4604 IN PVOID SystemSpecific3);
4606 VOID MlmeAuthReqAction(
4607 IN PRTMP_ADAPTER pAd,
4608 IN MLME_QUEUE_ELEM *Elem);
4610 VOID PeerAuthRspAtSeq2Action(
4611 IN PRTMP_ADAPTER pAd,
4612 IN MLME_QUEUE_ELEM *Elem);
4614 VOID PeerAuthRspAtSeq4Action(
4615 IN PRTMP_ADAPTER pAd,
4616 IN MLME_QUEUE_ELEM *Elem);
4618 VOID AuthTimeoutAction(
4619 IN PRTMP_ADAPTER pAd,
4620 IN MLME_QUEUE_ELEM *Elem);
4623 IN PRTMP_ADAPTER pAd,
4626 VOID MlmeDeauthReqAction(
4627 IN PRTMP_ADAPTER pAd,
4628 IN MLME_QUEUE_ELEM *Elem);
4630 VOID InvalidStateWhenAuth(
4631 IN PRTMP_ADAPTER pAd,
4632 IN MLME_QUEUE_ELEM *Elem);
4634 //=============================================
4636 VOID AuthRspStateMachineInit(
4637 IN PRTMP_ADAPTER pAd,
4638 IN PSTATE_MACHINE Sm,
4639 IN STATE_MACHINE_FUNC Trans[]);
4641 VOID PeerDeauthAction(
4642 IN PRTMP_ADAPTER pAd,
4643 IN MLME_QUEUE_ELEM *Elem);
4645 VOID PeerAuthSimpleRspGenAndSend(
4646 IN PRTMP_ADAPTER pAd,
4647 IN PHEADER_802_11 pHdr80211,
4654 // Private routines in dls.c
4657 #ifdef CONFIG_STA_SUPPORT
4658 #ifdef QOS_DLS_SUPPORT
4659 void DlsStateMachineInit(
4660 IN PRTMP_ADAPTER pAd,
4661 IN STATE_MACHINE *Sm,
4662 OUT STATE_MACHINE_FUNC Trans[]);
4664 VOID MlmeDlsReqAction(
4665 IN PRTMP_ADAPTER pAd,
4666 IN MLME_QUEUE_ELEM *Elem);
4668 VOID PeerDlsReqAction(
4669 IN PRTMP_ADAPTER pAd,
4670 IN MLME_QUEUE_ELEM *Elem);
4672 VOID PeerDlsRspAction(
4673 IN PRTMP_ADAPTER pAd,
4674 IN MLME_QUEUE_ELEM *Elem);
4676 VOID MlmeDlsTearDownAction(
4677 IN PRTMP_ADAPTER pAd,
4678 IN MLME_QUEUE_ELEM *Elem);
4680 VOID PeerDlsTearDownAction(
4681 IN PRTMP_ADAPTER pAd,
4682 IN MLME_QUEUE_ELEM *Elem);
4684 VOID RTMPCheckDLSTimeOut(
4685 IN PRTMP_ADAPTER pAd);
4687 BOOLEAN RTMPRcvFrameDLSCheck(
4688 IN PRTMP_ADAPTER pAd,
4689 IN PHEADER_802_11 pHeader,
4691 IN PRT28XX_RXD_STRUC pRxD);
4693 INT RTMPCheckDLSFrame(
4694 IN PRTMP_ADAPTER pAd,
4697 VOID RTMPSendDLSTearDownFrame(
4698 IN PRTMP_ADAPTER pAd,
4701 NDIS_STATUS RTMPSendSTAKeyRequest(
4702 IN PRTMP_ADAPTER pAd,
4705 NDIS_STATUS RTMPSendSTAKeyHandShake(
4706 IN PRTMP_ADAPTER pAd,
4709 VOID DlsTimeoutAction(
4710 IN PVOID SystemSpecific1,
4711 IN PVOID FunctionContext,
4712 IN PVOID SystemSpecific2,
4713 IN PVOID SystemSpecific3);
4715 BOOLEAN MlmeDlsReqSanity(
4716 IN PRTMP_ADAPTER pAd,
4719 OUT PRT_802_11_DLS *pDLS,
4720 OUT PUSHORT pReason);
4722 INT Set_DlsEntryInfo_Display_Proc(
4723 IN PRTMP_ADAPTER pAd,
4726 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4727 IN PRTMP_ADAPTER pAd,
4729 IN UINT DlsEntryIdx);
4731 BOOLEAN MacTableDeleteDlsEntry(
4732 IN PRTMP_ADAPTER pAd,
4736 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4737 IN PRTMP_ADAPTER pAd,
4739 IN BOOLEAN bResetIdelCount);
4741 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4742 IN PRTMP_ADAPTER pAd,
4745 IN BOOLEAN bResetIdelCount);
4747 INT Set_DlsAddEntry_Proc(
4748 IN PRTMP_ADAPTER pAd,
4751 INT Set_DlsTearDownEntry_Proc(
4752 IN PRTMP_ADAPTER pAd,
4754 #endif // QOS_DLS_SUPPORT //
4755 #endif // CONFIG_STA_SUPPORT //
4757 #ifdef QOS_DLS_SUPPORT
4758 BOOLEAN PeerDlsReqSanity(
4759 IN PRTMP_ADAPTER pAd,
4764 OUT USHORT *pCapabilityInfo,
4765 OUT USHORT *pDlsTimeout,
4766 OUT UCHAR *pRatesLen,
4768 OUT UCHAR *pHtCapabilityLen,
4769 OUT HT_CAPABILITY_IE *pHtCapability);
4771 BOOLEAN PeerDlsRspSanity(
4772 IN PRTMP_ADAPTER pAd,
4777 OUT USHORT *pCapabilityInfo,
4778 OUT USHORT *pStatus,
4779 OUT UCHAR *pRatesLen,
4781 OUT UCHAR *pHtCapabilityLen,
4782 OUT HT_CAPABILITY_IE *pHtCapability);
4784 BOOLEAN PeerDlsTearDownSanity(
4785 IN PRTMP_ADAPTER pAd,
4790 OUT USHORT *pReason);
4791 #endif // QOS_DLS_SUPPORT //
4793 //========================================
4795 VOID SyncStateMachineInit(
4796 IN PRTMP_ADAPTER pAd,
4797 IN STATE_MACHINE *Sm,
4798 OUT STATE_MACHINE_FUNC Trans[]);
4801 IN PVOID SystemSpecific1,
4802 IN PVOID FunctionContext,
4803 IN PVOID SystemSpecific2,
4804 IN PVOID SystemSpecific3);
4807 IN PVOID SystemSpecific1,
4808 IN PVOID FunctionContext,
4809 IN PVOID SystemSpecific2,
4810 IN PVOID SystemSpecific3);
4812 VOID MlmeScanReqAction(
4813 IN PRTMP_ADAPTER pAd,
4814 IN MLME_QUEUE_ELEM *Elem);
4816 VOID InvalidStateWhenScan(
4817 IN PRTMP_ADAPTER pAd,
4818 IN MLME_QUEUE_ELEM *Elem);
4820 VOID InvalidStateWhenJoin(
4821 IN PRTMP_ADAPTER pAd,
4822 IN MLME_QUEUE_ELEM *Elem);
4824 VOID InvalidStateWhenStart(
4825 IN PRTMP_ADAPTER pAd,
4826 IN MLME_QUEUE_ELEM *Elem);
4829 IN PRTMP_ADAPTER pAd,
4830 IN MLME_QUEUE_ELEM *Elem);
4832 VOID EnqueueProbeRequest(
4833 IN PRTMP_ADAPTER pAd);
4835 BOOLEAN ScanRunning(
4836 IN PRTMP_ADAPTER pAd);
4837 //=========================================
4840 IN PRTMP_ADAPTER pAd,
4841 IN STATE_MACHINE *S,
4842 OUT STATE_MACHINE_FUNC Trans[]);
4844 VOID MlmeCntlMachinePerformAction(
4845 IN PRTMP_ADAPTER pAd,
4846 IN STATE_MACHINE *S,
4847 IN MLME_QUEUE_ELEM *Elem);
4850 IN PRTMP_ADAPTER pAd,
4851 IN MLME_QUEUE_ELEM *Elem);
4853 VOID CntlOidScanProc(
4854 IN PRTMP_ADAPTER pAd,
4855 IN MLME_QUEUE_ELEM *Elem);
4857 VOID CntlOidSsidProc(
4858 IN PRTMP_ADAPTER pAd,
4859 IN MLME_QUEUE_ELEM * Elem);
4861 VOID CntlOidRTBssidProc(
4862 IN PRTMP_ADAPTER pAd,
4863 IN MLME_QUEUE_ELEM * Elem);
4865 VOID CntlMlmeRoamingProc(
4866 IN PRTMP_ADAPTER pAd,
4867 IN MLME_QUEUE_ELEM * Elem);
4869 VOID CntlWaitDisassocProc(
4870 IN PRTMP_ADAPTER pAd,
4871 IN MLME_QUEUE_ELEM *Elem);
4873 VOID CntlWaitJoinProc(
4874 IN PRTMP_ADAPTER pAd,
4875 IN MLME_QUEUE_ELEM *Elem);
4877 VOID CntlWaitReassocProc(
4878 IN PRTMP_ADAPTER pAd,
4879 IN MLME_QUEUE_ELEM *Elem);
4881 VOID CntlWaitStartProc(
4882 IN PRTMP_ADAPTER pAd,
4883 IN MLME_QUEUE_ELEM *Elem);
4885 VOID CntlWaitAuthProc(
4886 IN PRTMP_ADAPTER pAd,
4887 IN MLME_QUEUE_ELEM *Elem);
4889 VOID CntlWaitAuthProc2(
4890 IN PRTMP_ADAPTER pAd,
4891 IN MLME_QUEUE_ELEM *Elem);
4893 VOID CntlWaitAssocProc(
4894 IN PRTMP_ADAPTER pAd,
4895 IN MLME_QUEUE_ELEM *Elem);
4897 #ifdef QOS_DLS_SUPPORT
4898 VOID CntlOidDLSSetupProc(
4899 IN PRTMP_ADAPTER pAd,
4900 IN MLME_QUEUE_ELEM *Elem);
4901 #endif // QOS_DLS_SUPPORT //
4904 IN PRTMP_ADAPTER pAd,
4908 IN PRTMP_ADAPTER pAd,
4909 IN BOOLEAN IsReqFromAP);
4911 VOID IterateOnBssTab(
4912 IN PRTMP_ADAPTER pAd);
4914 VOID IterateOnBssTab2(
4915 IN PRTMP_ADAPTER pAd);;
4918 IN PRTMP_ADAPTER pAd,
4919 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4923 IN PRTMP_ADAPTER pAd,
4924 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4926 IN USHORT CapabilityInfo,
4928 IN USHORT ListenIntv);
4931 IN PRTMP_ADAPTER pAd,
4932 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4938 VOID DisassocParmFill(
4939 IN PRTMP_ADAPTER pAd,
4940 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4945 IN PRTMP_ADAPTER pAd,
4946 IN OUT MLME_START_REQ_STRUCT *StartReq,
4951 IN PRTMP_ADAPTER pAd,
4952 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4957 IN PRTMP_ADAPTER pAd);
4959 VOID EnqueueBeaconFrame(
4960 IN PRTMP_ADAPTER pAd);
4962 VOID MlmeJoinReqAction(
4963 IN PRTMP_ADAPTER pAd,
4964 IN MLME_QUEUE_ELEM *Elem);
4966 VOID MlmeScanReqAction(
4967 IN PRTMP_ADAPTER pAd,
4968 IN MLME_QUEUE_ELEM *Elem);
4970 VOID MlmeStartReqAction(
4971 IN PRTMP_ADAPTER pAd,
4972 IN MLME_QUEUE_ELEM *Elem);
4974 VOID ScanTimeoutAction(
4975 IN PRTMP_ADAPTER pAd,
4976 IN MLME_QUEUE_ELEM *Elem);
4978 VOID BeaconTimeoutAtJoinAction(
4979 IN PRTMP_ADAPTER pAd,
4980 IN MLME_QUEUE_ELEM *Elem);
4982 VOID PeerBeaconAtScanAction(
4983 IN PRTMP_ADAPTER pAd,
4984 IN MLME_QUEUE_ELEM *Elem);
4986 VOID PeerBeaconAtJoinAction(
4987 IN PRTMP_ADAPTER pAd,
4988 IN MLME_QUEUE_ELEM *Elem);
4991 IN PRTMP_ADAPTER pAd,
4992 IN MLME_QUEUE_ELEM *Elem);
4994 VOID PeerProbeReqAction(
4995 IN PRTMP_ADAPTER pAd,
4996 IN MLME_QUEUE_ELEM *Elem);
4998 VOID ScanNextChannel(
4999 IN PRTMP_ADAPTER pAd);
5001 ULONG MakeIbssBeacon(
5002 IN PRTMP_ADAPTER pAd);
5004 VOID CCXAdjacentAPReport(
5005 IN PRTMP_ADAPTER pAd);
5007 BOOLEAN MlmeScanReqSanity(
5008 IN PRTMP_ADAPTER pAd,
5014 OUT UCHAR *ScanType);
5016 BOOLEAN PeerBeaconAndProbeRspSanity(
5017 IN PRTMP_ADAPTER pAd,
5020 IN UCHAR MsgChannel,
5024 OUT UCHAR *pSsidLen,
5025 OUT UCHAR *pBssType,
5026 OUT USHORT *pBeaconPeriod,
5027 OUT UCHAR *pChannel,
5028 OUT UCHAR *pNewChannel,
5029 OUT LARGE_INTEGER *pTimestamp,
5030 OUT CF_PARM *pCfParm,
5031 OUT USHORT *pAtimWin,
5032 OUT USHORT *pCapabilityInfo,
5034 OUT UCHAR *pDtimCount,
5035 OUT UCHAR *pDtimPeriod,
5036 OUT UCHAR *pBcastFlag,
5037 OUT UCHAR *pMessageToMe,
5038 OUT UCHAR SupRate[],
5039 OUT UCHAR *pSupRateLen,
5040 OUT UCHAR ExtRate[],
5041 OUT UCHAR *pExtRateLen,
5042 OUT UCHAR *pCkipFlag,
5043 OUT UCHAR *pAironetCellPowerLimit,
5044 OUT PEDCA_PARM pEdcaParm,
5045 OUT PQBSS_LOAD_PARM pQbssLoad,
5046 OUT PQOS_CAPABILITY_PARM pQosCapability,
5047 OUT ULONG *pRalinkIe,
5048 OUT UCHAR *pHtCapabilityLen,
5049 #ifdef CONFIG_STA_SUPPORT
5050 OUT UCHAR *pPreNHtCapabilityLen,
5051 #endif // CONFIG_STA_SUPPORT //
5052 OUT HT_CAPABILITY_IE *pHtCapability,
5053 OUT UCHAR *AddHtInfoLen,
5054 OUT ADD_HT_INFO_IE *AddHtInfo,
5055 OUT UCHAR *NewExtChannel,
5056 OUT USHORT *LengthVIE,
5057 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5059 BOOLEAN PeerAddBAReqActionSanity(
5060 IN PRTMP_ADAPTER pAd,
5065 BOOLEAN PeerAddBARspActionSanity(
5066 IN PRTMP_ADAPTER pAd,
5070 BOOLEAN PeerDelBAActionSanity(
5071 IN PRTMP_ADAPTER pAd,
5076 BOOLEAN MlmeAssocReqSanity(
5077 IN PRTMP_ADAPTER pAd,
5081 OUT USHORT *CapabilityInfo,
5083 OUT USHORT *ListenIntv);
5085 BOOLEAN MlmeAuthReqSanity(
5086 IN PRTMP_ADAPTER pAd,
5093 BOOLEAN MlmeStartReqSanity(
5094 IN PRTMP_ADAPTER pAd,
5098 OUT UCHAR *Ssidlen);
5100 BOOLEAN PeerAuthSanity(
5101 IN PRTMP_ADAPTER pAd,
5108 OUT CHAR ChlgText[]);
5110 BOOLEAN PeerAssocRspSanity(
5111 IN PRTMP_ADAPTER pAd,
5115 OUT USHORT *pCapabilityInfo,
5116 OUT USHORT *pStatus,
5118 OUT UCHAR SupRate[],
5119 OUT UCHAR *pSupRateLen,
5120 OUT UCHAR ExtRate[],
5121 OUT UCHAR *pExtRateLen,
5122 OUT HT_CAPABILITY_IE *pHtCapability,
5123 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5124 OUT UCHAR *pHtCapabilityLen,
5125 OUT UCHAR *pAddHtInfoLen,
5126 OUT UCHAR *pNewExtChannelOffset,
5127 OUT PEDCA_PARM pEdcaParm,
5128 OUT UCHAR *pCkipFlag);
5130 BOOLEAN PeerDisassocSanity(
5131 IN PRTMP_ADAPTER pAd,
5135 OUT USHORT *Reason);
5137 BOOLEAN PeerWpaMessageSanity(
5138 IN PRTMP_ADAPTER pAd,
5139 IN PEAPOL_PACKET pMsg,
5142 IN MAC_TABLE_ENTRY *pEntry);
5144 BOOLEAN PeerDeauthSanity(
5145 IN PRTMP_ADAPTER pAd,
5149 OUT USHORT *Reason);
5151 BOOLEAN PeerProbeReqSanity(
5152 IN PRTMP_ADAPTER pAd,
5157 OUT UCHAR *pSsidLen);
5163 OUT UCHAR *BcastFlag,
5164 OUT UCHAR *DtimCount,
5165 OUT UCHAR *DtimPeriod,
5166 OUT UCHAR *MessageToMe);
5168 UCHAR ChannelSanity(
5169 IN PRTMP_ADAPTER pAd,
5172 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5173 IN PBSS_ENTRY pBss);
5175 #if 0 // It's omitted
5176 NDIS_STATUS RTMPWepKeySanity(
5177 IN PRTMP_ADAPTER pAdapter,
5181 BOOLEAN MlmeDelBAReqSanity(
5182 IN PRTMP_ADAPTER pAd,
5186 BOOLEAN MlmeAddBAReqSanity(
5187 IN PRTMP_ADAPTER pAd,
5192 ULONG MakeOutgoingFrame(
5194 OUT ULONG *Length, ...);
5197 IN PRTMP_ADAPTER pAd,
5201 IN PRTMP_ADAPTER pAd);
5203 VOID AsicUpdateAutoFallBackTable(
5204 IN PRTMP_ADAPTER pAd,
5207 VOID MlmePeriodicExec(
5208 IN PVOID SystemSpecific1,
5209 IN PVOID FunctionContext,
5210 IN PVOID SystemSpecific2,
5211 IN PVOID SystemSpecific3);
5214 IN PVOID SystemSpecific1,
5215 IN PVOID FunctionContext,
5216 IN PVOID SystemSpecific2,
5217 IN PVOID SystemSpecific3);
5220 IN PVOID SystemSpecific1,
5221 IN PVOID FunctionContext,
5222 IN PVOID SystemSpecific2,
5223 IN PVOID SystemSpecific3);
5225 VOID STAMlmePeriodicExec(
5229 IN PRTMP_ADAPTER pAd);
5231 VOID MlmeAutoReconnectLastSSID(
5232 IN PRTMP_ADAPTER pAd);
5234 BOOLEAN MlmeValidateSSID(
5238 VOID MlmeCheckForRoaming(
5239 IN PRTMP_ADAPTER pAd,
5242 VOID MlmeCheckForFastRoaming(
5243 IN PRTMP_ADAPTER pAd,
5246 VOID MlmeDynamicTxRateSwitching(
5247 IN PRTMP_ADAPTER pAd);
5250 IN PRTMP_ADAPTER pAd,
5251 IN PMAC_TABLE_ENTRY pEntry,
5252 IN PRTMP_TX_RATE_SWITCH pTxRate);
5254 VOID MlmeSelectTxRateTable(
5255 IN PRTMP_ADAPTER pAd,
5256 IN PMAC_TABLE_ENTRY pEntry,
5258 IN PUCHAR pTableSize,
5259 IN PUCHAR pInitTxRateIdx);
5261 VOID MlmeCalculateChannelQuality(
5262 IN PRTMP_ADAPTER pAd,
5265 VOID MlmeCheckPsmChange(
5266 IN PRTMP_ADAPTER pAd,
5270 IN PRTMP_ADAPTER pAd,
5273 VOID MlmeSetTxPreamble(
5274 IN PRTMP_ADAPTER pAd,
5275 IN USHORT TxPreamble);
5277 VOID UpdateBasicRateBitmap(
5278 IN PRTMP_ADAPTER pAd);
5280 VOID MlmeUpdateTxRates(
5281 IN PRTMP_ADAPTER pAd,
5285 #ifdef DOT11_N_SUPPORT
5286 VOID MlmeUpdateHtTxRates(
5287 IN PRTMP_ADAPTER pAd,
5289 #endif // DOT11_N_SUPPORT //
5291 VOID RTMPCheckRates(
5292 IN PRTMP_ADAPTER pAd,
5293 IN OUT UCHAR SupRate[],
5294 IN OUT UCHAR *SupRateLen);
5296 #ifdef CONFIG_STA_SUPPORT
5297 BOOLEAN RTMPCheckChannel(
5298 IN PRTMP_ADAPTER pAd,
5299 IN UCHAR CentralChannel,
5301 #endif // CONFIG_STA_SUPPORT //
5303 BOOLEAN RTMPCheckHt(
5304 IN PRTMP_ADAPTER pAd,
5306 IN OUT HT_CAPABILITY_IE *pHtCapability,
5307 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5309 VOID StaQuickResponeForRateUpExec(
5310 IN PVOID SystemSpecific1,
5311 IN PVOID FunctionContext,
5312 IN PVOID SystemSpecific2,
5313 IN PVOID SystemSpecific3);
5315 VOID AsicBbpTuning1(
5316 IN PRTMP_ADAPTER pAd);
5318 VOID AsicBbpTuning2(
5319 IN PRTMP_ADAPTER pAd);
5321 VOID RTMPUpdateMlmeRate(
5322 IN PRTMP_ADAPTER pAd);
5325 IN PRTMP_ADAPTER pAd,
5330 VOID AsicEvaluateRxAnt(
5331 IN PRTMP_ADAPTER pAd);
5333 VOID AsicRxAntEvalTimeout(
5334 IN PVOID SystemSpecific1,
5335 IN PVOID FunctionContext,
5336 IN PVOID SystemSpecific2,
5337 IN PVOID SystemSpecific3);
5339 VOID APSDPeriodicExec(
5340 IN PVOID SystemSpecific1,
5341 IN PVOID FunctionContext,
5342 IN PVOID SystemSpecific2,
5343 IN PVOID SystemSpecific3);
5345 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5346 IN PRTMP_ADAPTER pAd,
5347 IN PMAC_TABLE_ENTRY pEntry);
5349 UCHAR RTMPStaFixedTxMode(
5350 IN PRTMP_ADAPTER pAd,
5351 IN PMAC_TABLE_ENTRY pEntry);
5353 VOID RTMPUpdateLegacyTxSetting(
5354 UCHAR fixed_tx_mode,
5355 PMAC_TABLE_ENTRY pEntry);
5357 BOOLEAN RTMPAutoRateSwitchCheck(
5358 IN PRTMP_ADAPTER pAd);
5360 NDIS_STATUS MlmeInit(
5361 IN PRTMP_ADAPTER pAd);
5364 IN PRTMP_ADAPTER pAd);
5367 IN PRTMP_ADAPTER pAd);
5369 VOID MlmeResetRalinkCounters(
5370 IN PRTMP_ADAPTER pAd);
5372 VOID BuildChannelList(
5373 IN PRTMP_ADAPTER pAd);
5376 IN PRTMP_ADAPTER pAd);
5379 IN PRTMP_ADAPTER pAd,
5382 VOID ChangeToCellPowerLimit(
5383 IN PRTMP_ADAPTER pAd,
5384 IN UCHAR AironetCellPowerLimit);
5387 IN PRTMP_ADAPTER pAd,
5391 IN PRTMP_ADAPTER pAd,
5395 IN PRTMP_ADAPTER pAd);
5398 IN PRTMP_ADAPTER pAd,
5403 IN PRTMP_ADAPTER pAd);
5406 IN PRTMP_ADAPTER pAd);
5409 IN PRTMP_ADAPTER pAd);
5411 USHORT RTMP_EEPROM_READ16(
5412 IN PRTMP_ADAPTER pAd,
5415 VOID RTMP_EEPROM_WRITE16(
5416 IN PRTMP_ADAPTER pAd,
5421 // Prototypes of function definition in rtmp_tkip.c
5423 VOID RTMPInitTkipEngine(
5424 IN PRTMP_ADAPTER pAd,
5433 VOID RTMPInitMICEngine(
5434 IN PRTMP_ADAPTER pAd,
5438 IN UCHAR UserPriority,
5441 BOOLEAN RTMPTkipCompareMICValue(
5442 IN PRTMP_ADAPTER pAd,
5447 IN UCHAR UserPriority,
5450 VOID RTMPCalculateMICValue(
5451 IN PRTMP_ADAPTER pAd,
5452 IN PNDIS_PACKET pPacket,
5454 IN PCIPHER_KEY pKey,
5457 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5458 IN PRTMP_ADAPTER pAd,
5466 VOID RTMPTkipAppendByte(
5467 IN PTKIP_KEY_INFO pTkip,
5470 VOID RTMPTkipAppend(
5471 IN PTKIP_KEY_INFO pTkip,
5475 VOID RTMPTkipGetMIC(
5476 IN PTKIP_KEY_INFO pTkip);
5478 BOOLEAN RTMPSoftDecryptTKIP(
5479 IN PRTMP_ADAPTER pAd,
5481 IN ULONG DataByteCnt,
5482 IN UCHAR UserPriority,
5483 IN PCIPHER_KEY pWpaKey);
5485 BOOLEAN RTMPSoftDecryptAES(
5486 IN PRTMP_ADAPTER pAd,
5488 IN ULONG DataByteCnt,
5489 IN PCIPHER_KEY pWpaKey);
5491 #if 0 // removed by AlbertY
5492 NDIS_STATUS RTMPWPAAddKeyProc(
5493 IN PRTMP_ADAPTER pAd,
5498 // Prototypes of function definition in cmm_info.c
5500 NDIS_STATUS RTMPWPARemoveKeyProc(
5501 IN PRTMP_ADAPTER pAd,
5504 VOID RTMPWPARemoveAllKeys(
5505 IN PRTMP_ADAPTER pAd);
5507 BOOLEAN RTMPCheckStrPrintAble(
5511 VOID RTMPSetPhyMode(
5512 IN PRTMP_ADAPTER pAd,
5515 VOID RTMPUpdateHTIE(
5516 IN RT_HT_CAPABILITY *pRtHt,
5518 OUT HT_CAPABILITY_IE *pHtCapability,
5519 OUT ADD_HT_INFO_IE *pAddHtInfo);
5521 VOID RTMPAddWcidAttributeEntry(
5522 IN PRTMP_ADAPTER pAd,
5526 IN MAC_TABLE_ENTRY *pEntry);
5528 CHAR *GetEncryptType(
5534 VOID RTMPIoctlGetSiteSurvey(
5535 IN PRTMP_ADAPTER pAdapter,
5536 IN struct iwreq *wrq);
5538 VOID RTMPIoctlGetMacTable(
5539 IN PRTMP_ADAPTER pAd,
5540 IN struct iwreq *wrq);
5542 VOID RTMPIndicateWPA2Status(
5543 IN PRTMP_ADAPTER pAdapter);
5545 VOID RTMPOPModeSwitching(
5546 IN PRTMP_ADAPTER pAd);
5548 #ifdef CONFIG_STA_SUPPORT
5549 VOID RTMPAddBSSIDCipher(
5550 IN PRTMP_ADAPTER pAd,
5552 IN PNDIS_802_11_KEY pKey,
5553 IN UCHAR CipherAlg);
5554 #endif // CONFIG_STA_SUPPORT //
5556 #ifdef DOT11_N_SUPPORT
5558 IN PRTMP_ADAPTER pAd,
5559 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5561 VOID RTMPSetIndividualHT(
5562 IN PRTMP_ADAPTER pAd,
5564 #endif // DOT11_N_SUPPORT //
5566 VOID RTMPSendWirelessEvent(
5567 IN PRTMP_ADAPTER pAd,
5568 IN USHORT Event_flag,
5573 VOID NICUpdateCntlCounters(
5574 IN PRTMP_ADAPTER pAd,
5575 IN PHEADER_802_11 pHeader,
5577 IN PRXWI_STRUC pRxWI);
5579 // prototype in wpa.c
5581 BOOLEAN WpaMsgTypeSubst(
5585 VOID WpaPskStateMachineInit(
5586 IN PRTMP_ADAPTER pAd,
5587 IN STATE_MACHINE *S,
5588 OUT STATE_MACHINE_FUNC Trans[]);
5590 VOID WpaEAPOLKeyAction(
5591 IN PRTMP_ADAPTER pAd,
5592 IN MLME_QUEUE_ELEM *Elem);
5594 VOID WpaPairMsg1Action(
5595 IN PRTMP_ADAPTER pAd,
5596 IN MLME_QUEUE_ELEM *Elem);
5598 VOID WpaPairMsg3Action(
5599 IN PRTMP_ADAPTER pAd,
5600 IN MLME_QUEUE_ELEM *Elem);
5602 VOID WpaGroupMsg1Action(
5603 IN PRTMP_ADAPTER pAd,
5604 IN MLME_QUEUE_ELEM *Elem);
5606 VOID WpaMacHeaderInit(
5607 IN PRTMP_ADAPTER pAd,
5608 IN OUT PHEADER_802_11 pHdr80211,
5612 VOID Wpa2PairMsg1Action(
5613 IN PRTMP_ADAPTER pAd,
5614 IN MLME_QUEUE_ELEM *Elem);
5616 VOID Wpa2PairMsg3Action(
5617 IN PRTMP_ADAPTER pAd,
5618 IN MLME_QUEUE_ELEM *Elem);
5620 BOOLEAN ParseKeyData(
5621 IN PRTMP_ADAPTER pAd,
5623 IN UCHAR KeyDataLen,
5624 IN UCHAR bPairewise);
5626 VOID RTMPToWirelessSta(
5627 IN PRTMP_ADAPTER pAd,
5628 IN PUCHAR pHeader802_3,
5632 IN BOOLEAN is4wayFrame);
5660 IN PRTMP_ADAPTER pAd,
5670 IN PRTMP_ADAPTER pAd,
5675 // prototype in aironet.c
5677 VOID AironetStateMachineInit(
5678 IN PRTMP_ADAPTER pAd,
5679 IN STATE_MACHINE *S,
5680 OUT STATE_MACHINE_FUNC Trans[]);
5682 VOID AironetMsgAction(
5683 IN PRTMP_ADAPTER pAd,
5684 IN MLME_QUEUE_ELEM *Elem);
5686 VOID AironetRequestAction(
5687 IN PRTMP_ADAPTER pAd,
5688 IN MLME_QUEUE_ELEM *Elem);
5690 VOID ChannelLoadRequestAction(
5691 IN PRTMP_ADAPTER pAd,
5694 VOID NoiseHistRequestAction(
5695 IN PRTMP_ADAPTER pAd,
5698 VOID BeaconRequestAction(
5699 IN PRTMP_ADAPTER pAd,
5702 VOID AironetReportAction(
5703 IN PRTMP_ADAPTER pAd,
5704 IN MLME_QUEUE_ELEM *Elem);
5706 VOID ChannelLoadReportAction(
5707 IN PRTMP_ADAPTER pAd,
5710 VOID NoiseHistReportAction(
5711 IN PRTMP_ADAPTER pAd,
5714 VOID AironetFinalReportAction(
5715 IN PRTMP_ADAPTER pAd);
5717 VOID BeaconReportAction(
5718 IN PRTMP_ADAPTER pAd,
5721 VOID AironetAddBeaconReport(
5722 IN PRTMP_ADAPTER pAd,
5724 IN PMLME_QUEUE_ELEM pElem);
5726 VOID AironetCreateBeaconReportFromBssTable(
5727 IN PRTMP_ADAPTER pAd);
5729 VOID DBGPRINT_TX_RING(
5730 IN PRTMP_ADAPTER pAd,
5733 VOID DBGPRINT_RX_RING(
5734 IN PRTMP_ADAPTER pAd);
5737 IN PRTMP_ADAPTER pAd,
5739 IN UCHAR RssiNumber);
5742 #ifdef DOT11N_DRAFT3
5743 VOID BuildEffectedChannelList(
5744 IN PRTMP_ADAPTER pAd);
5745 #endif // DOT11N_DRAFT3 //
5748 VOID APAsicEvaluateRxAnt(
5749 IN PRTMP_ADAPTER pAd);
5752 VOID APAsicRxAntEvalTimeout(
5753 IN PRTMP_ADAPTER pAd);
5756 // function prototype in cmm_wpa.c
5758 BOOLEAN RTMPCheckWPAframe(
5759 IN PRTMP_ADAPTER pAd,
5760 IN PMAC_TABLE_ENTRY pEntry,
5762 IN ULONG DataByteCount,
5763 IN UCHAR FromWhichBSSID);
5765 VOID AES_GTK_KEY_UNWRAP(
5767 OUT UCHAR *plaintext,
5769 IN UCHAR *ciphertext);
5771 BOOLEAN RTMPCheckRSNIE(
5772 IN PRTMP_ADAPTER pAd,
5775 IN MAC_TABLE_ENTRY *pEntry,
5778 BOOLEAN RTMPParseEapolKeyData(
5779 IN PRTMP_ADAPTER pAd,
5781 IN UCHAR KeyDataLen,
5782 IN UCHAR GroupKeyIndex,
5785 IN MAC_TABLE_ENTRY *pEntry);
5787 VOID ConstructEapolMsg(
5788 IN PRTMP_ADAPTER pAd,
5789 IN UCHAR PeerAuthMode,
5790 IN UCHAR PeerWepStatus,
5791 IN UCHAR MyGroupKeyWepStatus,
5793 IN UCHAR DefaultKeyIdx,
5794 IN UCHAR *ReplayCounter,
5801 OUT PEAPOL_PACKET pMsg);
5804 IN PRTMP_ADAPTER pAd,
5805 IN UCHAR PeerWepStatus,
5807 OUT PEAPOL_PACKET pMsg);
5809 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5810 IN PRTMP_ADAPTER pAd,
5812 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5813 IN PCIPHER_KEY pShard_key);
5815 VOID ConstructEapolKeyData(
5816 IN PRTMP_ADAPTER pAd,
5817 IN UCHAR PeerAuthMode,
5818 IN UCHAR PeerWepStatus,
5819 IN UCHAR GroupKeyWepStatus,
5821 IN UCHAR DefaultKeyIdx,
5822 IN BOOLEAN bWPA2Capable,
5827 OUT PEAPOL_PACKET pMsg);
5830 IN PRTMP_ADAPTER pAd,
5836 // function prototype in ap_wpa.c
5839 BOOLEAN APWpaMsgTypeSubst(
5843 MAC_TABLE_ENTRY *PACInquiry(
5844 IN PRTMP_ADAPTER pAd,
5847 BOOLEAN RTMPCheckMcast(
5848 IN PRTMP_ADAPTER pAd,
5849 IN PEID_STRUCT eid_ptr,
5850 IN MAC_TABLE_ENTRY *pEntry);
5852 BOOLEAN RTMPCheckUcast(
5853 IN PRTMP_ADAPTER pAd,
5854 IN PEID_STRUCT eid_ptr,
5855 IN MAC_TABLE_ENTRY *pEntry);
5857 BOOLEAN RTMPCheckAUTH(
5858 IN PRTMP_ADAPTER pAd,
5859 IN PEID_STRUCT eid_ptr,
5860 IN MAC_TABLE_ENTRY *pEntry);
5862 VOID WPAStart4WayHS(
5863 IN PRTMP_ADAPTER pAd,
5864 IN MAC_TABLE_ENTRY *pEntry,
5865 IN ULONG TimeInterval);
5867 VOID WPAStart2WayGroupHS(
5868 IN PRTMP_ADAPTER pAd,
5869 IN MAC_TABLE_ENTRY *pEntry);
5871 VOID APWpaEAPPacketAction(
5872 IN PRTMP_ADAPTER pAd,
5873 IN MLME_QUEUE_ELEM *Elem);
5875 VOID APWpaEAPOLStartAction(
5876 IN PRTMP_ADAPTER pAd,
5877 IN MLME_QUEUE_ELEM *Elem);
5879 VOID APWpaEAPOLLogoffAction(
5880 IN PRTMP_ADAPTER pAd,
5881 IN MLME_QUEUE_ELEM *Elem);
5883 VOID APWpaEAPOLKeyAction(
5884 IN PRTMP_ADAPTER pAd,
5885 IN MLME_QUEUE_ELEM *Elem);
5887 VOID APWpaEAPOLASFAlertAction(
5888 IN PRTMP_ADAPTER pAd,
5889 IN MLME_QUEUE_ELEM *Elem);
5891 VOID HandleCounterMeasure(
5892 IN PRTMP_ADAPTER pAd,
5893 IN MAC_TABLE_ENTRY *pEntry);
5895 VOID PeerPairMsg2Action(
5896 IN PRTMP_ADAPTER pAd,
5897 IN MAC_TABLE_ENTRY *pEntry,
5898 IN MLME_QUEUE_ELEM *Elem);
5900 VOID PeerPairMsg4Action(
5901 IN PRTMP_ADAPTER pAd,
5902 IN MAC_TABLE_ENTRY *pEntry,
5903 IN MLME_QUEUE_ELEM *Elem);
5906 IN PVOID SystemSpecific1,
5907 IN PVOID FunctionContext,
5908 IN PVOID SystemSpecific2,
5909 IN PVOID SystemSpecific3);
5912 IN PVOID SystemSpecific1,
5913 IN PVOID FunctionContext,
5914 IN PVOID SystemSpecific2,
5915 IN PVOID SystemSpecific3);
5917 VOID EnqueueStartForPSKExec(
5918 IN PVOID SystemSpecific1,
5919 IN PVOID FunctionContext,
5920 IN PVOID SystemSpecific2,
5921 IN PVOID SystemSpecific3);
5923 VOID RTMPHandleSTAKey(
5924 IN PRTMP_ADAPTER pAdapter,
5925 IN MAC_TABLE_ENTRY *pEntry,
5926 IN MLME_QUEUE_ELEM *Elem);
5928 #if 0 // merge into PeerPairMsg4Action
5929 VOID Wpa1PeerPairMsg4Action(
5930 IN PRTMP_ADAPTER pAd,
5931 IN MAC_TABLE_ENTRY *pEntry,
5932 IN MLME_QUEUE_ELEM *Elem);
5934 VOID Wpa2PeerPairMsg4Action(
5935 IN PRTMP_ADAPTER pAd,
5936 IN PMAC_TABLE_ENTRY pEntry,
5937 IN MLME_QUEUE_ELEM *Elem);
5940 VOID PeerGroupMsg2Action(
5941 IN PRTMP_ADAPTER pAd,
5942 IN PMAC_TABLE_ENTRY pEntry,
5946 #if 0 // replaced by WPAStart2WayGroupHS
5947 NDIS_STATUS APWpaHardTransmit(
5948 IN PRTMP_ADAPTER pAd,
5949 IN PMAC_TABLE_ENTRY pEntry);
5952 VOID PairDisAssocAction(
5953 IN PRTMP_ADAPTER pAd,
5954 IN PMAC_TABLE_ENTRY pEntry,
5957 VOID MlmeDeAuthAction(
5958 IN PRTMP_ADAPTER pAd,
5959 IN PMAC_TABLE_ENTRY pEntry,
5962 VOID GREKEYPeriodicExec(
5963 IN PVOID SystemSpecific1,
5964 IN PVOID FunctionContext,
5965 IN PVOID SystemSpecific2,
5966 IN PVOID SystemSpecific3);
5988 IN PRTMP_ADAPTER pAd,
5991 VOID AES_GTK_KEY_WRAP(
5993 IN UCHAR *plaintext,
5995 OUT UCHAR *ciphertext);
5998 IN PRTMP_ADAPTER pAdapter,
6002 VOID APToWirelessSta(
6003 IN PRTMP_ADAPTER pAd,
6004 IN MAC_TABLE_ENTRY *pEntry,
6005 IN PUCHAR pHeader802_3,
6009 IN BOOLEAN bClearFrame);
6011 VOID RTMPAddPMKIDCache(
6012 IN PRTMP_ADAPTER pAd,
6018 INT RTMPSearchPMKIDCache(
6019 IN PRTMP_ADAPTER pAd,
6023 VOID RTMPDeletePMKIDCache(
6024 IN PRTMP_ADAPTER pAd,
6028 VOID RTMPMaintainPMKIDCache(
6029 IN PRTMP_ADAPTER pAd);
6031 VOID RTMPSendTriggerFrame(
6032 IN PRTMP_ADAPTER pAd,
6036 IN BOOLEAN bQosNull);
6039 //typedef void (*TIMER_FUNCTION)(unsigned long);
6043 VOID RTMP_SetPeriodicTimer(
6044 IN NDIS_MINIPORT_TIMER *pTimer,
6045 IN unsigned long timeout);
6047 VOID RTMP_OS_Init_Timer(
6048 IN PRTMP_ADAPTER pAd,
6049 IN NDIS_MINIPORT_TIMER *pTimer,
6050 IN TIMER_FUNCTION function,
6053 VOID RTMP_OS_Add_Timer(
6054 IN NDIS_MINIPORT_TIMER *pTimer,
6055 IN unsigned long timeout);
6057 VOID RTMP_OS_Mod_Timer(
6058 IN NDIS_MINIPORT_TIMER *pTimer,
6059 IN unsigned long timeout);
6062 VOID RTMP_OS_Del_Timer(
6063 IN NDIS_MINIPORT_TIMER *pTimer,
6064 OUT BOOLEAN *pCancelled);
6067 VOID RTMP_OS_Release_Packet(
6068 IN PRTMP_ADAPTER pAd,
6069 IN PQUEUE_ENTRY pEntry);
6074 NDIS_STATUS os_alloc_mem(
6075 IN PRTMP_ADAPTER pAd,
6079 NDIS_STATUS os_free_mem(
6080 IN PRTMP_ADAPTER pAd,
6084 void RTMP_AllocateSharedMemory(
6085 IN PRTMP_ADAPTER pAd,
6088 OUT PVOID *VirtualAddress,
6089 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6091 VOID RTMPFreeTxRxRingMemory(
6092 IN PRTMP_ADAPTER pAd);
6094 NDIS_STATUS AdapterBlockAllocateMemory(
6098 void RTMP_AllocateTxDescMemory(
6099 IN PRTMP_ADAPTER pAd,
6103 OUT PVOID *VirtualAddress,
6104 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6106 void RTMP_AllocateFirstTxBuffer(
6107 IN PRTMP_ADAPTER pAd,
6111 OUT PVOID *VirtualAddress,
6112 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6114 void RTMP_AllocateMgmtDescMemory(
6115 IN PRTMP_ADAPTER pAd,
6118 OUT PVOID *VirtualAddress,
6119 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6121 void RTMP_AllocateRxDescMemory(
6122 IN PRTMP_ADAPTER pAd,
6125 OUT PVOID *VirtualAddress,
6126 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6128 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6129 IN PRTMP_ADAPTER pAd,
6132 OUT PVOID *VirtualAddress,
6133 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6135 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6136 IN PRTMP_ADAPTER pAd,
6139 OUT PVOID *VirtualAddress);
6141 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6142 IN PRTMP_ADAPTER pAd,
6145 void RTMP_QueryPacketInfo(
6146 IN PNDIS_PACKET pPacket,
6147 OUT PACKET_INFO *pPacketInfo,
6148 OUT PUCHAR *pSrcBufVA,
6149 OUT UINT *pSrcBufLen);
6151 void RTMP_QueryNextPacketInfo(
6152 IN PNDIS_PACKET *ppPacket,
6153 OUT PACKET_INFO *pPacketInfo,
6154 OUT PUCHAR *pSrcBufVA,
6155 OUT UINT *pSrcBufLen);
6158 BOOLEAN RTMP_FillTxBlkInfo(
6159 IN RTMP_ADAPTER *pAd,
6163 PRTMP_SCATTER_GATHER_LIST
6164 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6167 void announce_802_3_packet(
6168 IN PRTMP_ADAPTER pAd,
6169 IN PNDIS_PACKET pPacket);
6172 UINT BA_Reorder_AMSDU_Annnounce(
6173 IN PRTMP_ADAPTER pAd,
6174 IN PNDIS_PACKET pPacket);
6177 UINT Handle_AMSDU_Packet(
6178 IN PRTMP_ADAPTER pAd,
6181 IN UCHAR FromWhichBSSID);
6184 void convert_802_11_to_802_3_packet(
6185 IN PRTMP_ADAPTER pAd,
6186 IN PNDIS_PACKET pPacket,
6190 IN UCHAR FromWhichBSSID);
6193 PNET_DEV get_netdev_from_bssid(
6194 IN PRTMP_ADAPTER pAd,
6195 IN UCHAR FromWhichBSSID);
6198 PNDIS_PACKET duplicate_pkt(
6199 IN PRTMP_ADAPTER pAd,
6200 IN PUCHAR pHeader802_3,
6204 IN UCHAR FromWhichBSSID);
6207 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6208 IN PRTMP_ADAPTER pAd,
6209 IN PNDIS_PACKET pOldPkt);
6211 PNDIS_PACKET duplicate_pkt_with_VLAN(
6212 IN PRTMP_ADAPTER pAd,
6213 IN PUCHAR pHeader802_3,
6217 IN UCHAR FromWhichBSSID);
6219 PNDIS_PACKET duplicate_pkt_with_WPI(
6220 IN PRTMP_ADAPTER pAd,
6221 IN PNDIS_PACKET pPacket,
6222 IN UINT32 ext_head_len,
6223 IN UINT32 ext_tail_len);
6225 UCHAR VLAN_8023_Header_Copy(
6226 IN PRTMP_ADAPTER pAd,
6227 IN PUCHAR pHeader802_3,
6230 IN UCHAR FromWhichBSSID);
6232 #ifdef DOT11_N_SUPPORT
6233 void ba_flush_reordering_timeout_mpdus(
6234 IN PRTMP_ADAPTER pAd,
6235 IN PBA_REC_ENTRY pBAEntry,
6239 VOID BAOriSessionSetUp(
6240 IN PRTMP_ADAPTER pAd,
6241 IN MAC_TABLE_ENTRY *pEntry,
6245 IN BOOLEAN isForced);
6247 VOID BASessionTearDownALL(
6248 IN OUT PRTMP_ADAPTER pAd,
6250 #endif // DOT11_N_SUPPORT //
6252 BOOLEAN OS_Need_Clone_Packet(void);
6255 VOID build_tx_packet(
6256 IN PRTMP_ADAPTER pAd,
6257 IN PNDIS_PACKET pPacket,
6262 VOID BAOriSessionTearDown(
6263 IN OUT PRTMP_ADAPTER pAd,
6266 IN BOOLEAN bPassive,
6267 IN BOOLEAN bForceSend);
6269 VOID BARecSessionTearDown(
6270 IN OUT PRTMP_ADAPTER pAd,
6273 IN BOOLEAN bPassive);
6275 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6276 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6278 ULONG AutoChBssInsertEntry(
6279 IN PRTMP_ADAPTER pAd,
6286 void AutoChBssTableInit(
6287 IN PRTMP_ADAPTER pAd);
6289 void ChannelInfoInit(
6290 IN PRTMP_ADAPTER pAd);
6292 void AutoChBssTableDestroy(
6293 IN PRTMP_ADAPTER pAd);
6295 void ChannelInfoDestroy(
6296 IN PRTMP_ADAPTER pAd);
6298 UCHAR New_ApAutoSelectChannel(
6299 IN PRTMP_ADAPTER pAd);
6301 BOOLEAN rtstrmactohex(
6305 BOOLEAN rtstrcasecmp(
6309 char *rtstrstruncasecmp(
6315 IN const char * s2);
6319 IN const char * ct);
6323 unsigned int *addr);
6325 ////////// common ioctl functions //////////
6326 INT Set_DriverVersion_Proc(
6327 IN PRTMP_ADAPTER pAd,
6330 INT Set_CountryRegion_Proc(
6331 IN PRTMP_ADAPTER pAd,
6334 INT Set_CountryRegionABand_Proc(
6335 IN PRTMP_ADAPTER pAd,
6338 INT Set_WirelessMode_Proc(
6339 IN PRTMP_ADAPTER pAd,
6342 INT Set_Channel_Proc(
6343 IN PRTMP_ADAPTER pAd,
6346 INT Set_ShortSlot_Proc(
6347 IN PRTMP_ADAPTER pAd,
6350 INT Set_TxPower_Proc(
6351 IN PRTMP_ADAPTER pAd,
6354 INT Set_BGProtection_Proc(
6355 IN PRTMP_ADAPTER pAd,
6358 INT Set_TxPreamble_Proc(
6359 IN PRTMP_ADAPTER pAd,
6362 INT Set_RTSThreshold_Proc(
6363 IN PRTMP_ADAPTER pAd,
6366 INT Set_FragThreshold_Proc(
6367 IN PRTMP_ADAPTER pAd,
6370 INT Set_TxBurst_Proc(
6371 IN PRTMP_ADAPTER pAd,
6374 #ifdef AGGREGATION_SUPPORT
6375 INT Set_PktAggregate_Proc(
6376 IN PRTMP_ADAPTER pAd,
6380 INT Set_IEEE80211H_Proc(
6381 IN PRTMP_ADAPTER pAd,
6386 IN PRTMP_ADAPTER pAd,
6390 INT Show_DescInfo_Proc(
6391 IN PRTMP_ADAPTER pAd,
6394 INT Set_ResetStatCounter_Proc(
6395 IN PRTMP_ADAPTER pAd,
6398 #ifdef DOT11_N_SUPPORT
6399 INT Set_BASetup_Proc(
6400 IN PRTMP_ADAPTER pAd,
6403 INT Set_BADecline_Proc(
6404 IN PRTMP_ADAPTER pAd,
6407 INT Set_BAOriTearDown_Proc(
6408 IN PRTMP_ADAPTER pAd,
6411 INT Set_BARecTearDown_Proc(
6412 IN PRTMP_ADAPTER pAd,
6416 IN PRTMP_ADAPTER pAd,
6420 IN PRTMP_ADAPTER pAd,
6424 IN PRTMP_ADAPTER pAd,
6427 INT Set_HtOpMode_Proc(
6428 IN PRTMP_ADAPTER pAd,
6431 INT Set_HtStbc_Proc(
6432 IN PRTMP_ADAPTER pAd,
6436 IN PRTMP_ADAPTER pAd,
6439 INT Set_HtExtcha_Proc(
6440 IN PRTMP_ADAPTER pAd,
6443 INT Set_HtMpduDensity_Proc(
6444 IN PRTMP_ADAPTER pAd,
6447 INT Set_HtBaWinSize_Proc(
6448 IN PRTMP_ADAPTER pAd,
6452 IN PRTMP_ADAPTER pAd,
6455 INT Set_HtLinkAdapt_Proc(
6456 IN PRTMP_ADAPTER pAd,
6459 INT Set_HtAmsdu_Proc(
6460 IN PRTMP_ADAPTER pAd,
6463 INT Set_HtAutoBa_Proc(
6464 IN PRTMP_ADAPTER pAd,
6467 INT Set_HtProtect_Proc(
6468 IN PRTMP_ADAPTER pAd,
6471 INT Set_HtMimoPs_Proc(
6472 IN PRTMP_ADAPTER pAd,
6476 INT Set_ForceShortGI_Proc(
6477 IN PRTMP_ADAPTER pAd,
6480 INT Set_ForceGF_Proc(
6481 IN PRTMP_ADAPTER pAd,
6485 IN PRTMP_ADAPTER pAd);
6487 INT Set_SendPSMPAction_Proc(
6488 IN PRTMP_ADAPTER pAd,
6491 INT Set_HtMIMOPSmode_Proc(
6492 IN PRTMP_ADAPTER pAd,
6496 INT Set_HtTxBASize_Proc(
6497 IN PRTMP_ADAPTER pAd,
6499 #endif // DOT11_N_SUPPORT //
6503 #ifdef CONFIG_STA_SUPPORT
6505 VOID RTMPSendDLSTearDownFrame(
6506 IN PRTMP_ADAPTER pAd,
6509 #ifdef DOT11_N_SUPPORT
6512 IN PRTMP_ADAPTER pAd,
6513 OUT PQUERYBA_TABLE pBAT);
6514 #endif // DOT11_N_SUPPORT //
6516 #ifdef WPA_SUPPLICANT_SUPPORT
6517 INT WpaCheckEapCode(
6518 IN PRTMP_ADAPTER pAd,
6523 VOID WpaSendMicFailureToWpaSupplicant(
6524 IN PRTMP_ADAPTER pAd,
6525 IN BOOLEAN bUnicast);
6527 VOID SendAssocIEsToWpaSupplicant(
6528 IN PRTMP_ADAPTER pAd);
6529 #endif // WPA_SUPPLICANT_SUPPORT //
6531 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6532 int wext_notify_event_assoc(
6533 IN RTMP_ADAPTER *pAd);
6534 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6536 #endif // CONFIG_STA_SUPPORT //
6540 #ifdef DOT11_N_SUPPORT
6541 VOID Handle_BSS_Width_Trigger_Events(
6542 IN PRTMP_ADAPTER pAd);
6544 void build_ext_channel_switch_ie(
6545 IN PRTMP_ADAPTER pAd,
6546 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6547 #endif // DOT11_N_SUPPORT //
6550 BOOLEAN APRxDoneInterruptHandle(
6551 IN PRTMP_ADAPTER pAd);
6553 BOOLEAN STARxDoneInterruptHandle(
6554 IN PRTMP_ADAPTER pAd,
6557 #ifdef DOT11_N_SUPPORT
6558 // AMPDU packet indication
6559 VOID Indicate_AMPDU_Packet(
6560 IN PRTMP_ADAPTER pAd,
6562 IN UCHAR FromWhichBSSID);
6564 // AMSDU packet indication
6565 VOID Indicate_AMSDU_Packet(
6566 IN PRTMP_ADAPTER pAd,
6568 IN UCHAR FromWhichBSSID);
6569 #endif // DOT11_N_SUPPORT //
6571 // Normal legacy Rx packet indication
6572 VOID Indicate_Legacy_Packet(
6573 IN PRTMP_ADAPTER pAd,
6575 IN UCHAR FromWhichBSSID);
6577 VOID Indicate_EAPOL_Packet(
6578 IN PRTMP_ADAPTER pAd,
6580 IN UCHAR FromWhichBSSID);
6582 void update_os_packet_info(
6583 IN PRTMP_ADAPTER pAd,
6585 IN UCHAR FromWhichBSSID);
6587 void wlan_802_11_to_802_3_packet(
6588 IN PRTMP_ADAPTER pAd,
6590 IN PUCHAR pHeader802_3,
6591 IN UCHAR FromWhichBSSID);
6593 UINT deaggregate_AMSDU_announce(
6594 IN PRTMP_ADAPTER pAd,
6595 PNDIS_PACKET pPacket,
6600 #ifdef CONFIG_STA_SUPPORT
6601 // remove LLC and get 802_3 Header
6602 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6604 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6606 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6608 _pDA = _pRxBlk->pHeader->Addr3; \
6609 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6613 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6615 _pDA = _pRxBlk->pHeader->Addr1; \
6616 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6617 _pSA = _pRxBlk->pHeader->Addr2; \
6619 _pSA = _pRxBlk->pHeader->Addr3; \
6623 _pDA = _pRxBlk->pHeader->Addr1; \
6624 _pSA = _pRxBlk->pHeader->Addr2; \
6628 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6629 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6631 #endif // CONFIG_STA_SUPPORT //
6634 BOOLEAN APFowardWirelessStaToWirelessSta(
6635 IN PRTMP_ADAPTER pAd,
6636 IN PNDIS_PACKET pPacket,
6637 IN ULONG FromWhichBSSID);
6639 VOID Announce_or_Forward_802_3_Packet(
6640 IN PRTMP_ADAPTER pAd,
6641 IN PNDIS_PACKET pPacket,
6642 IN UCHAR FromWhichBSSID);
6644 VOID Sta_Announce_or_Forward_802_3_Packet(
6645 IN PRTMP_ADAPTER pAd,
6646 IN PNDIS_PACKET pPacket,
6647 IN UCHAR FromWhichBSSID);
6650 #ifdef CONFIG_STA_SUPPORT
6651 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6652 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6653 //announce_802_3_packet(_pAd, _pPacket);
6654 #endif // CONFIG_STA_SUPPORT //
6657 PNDIS_PACKET DuplicatePacket(
6658 IN PRTMP_ADAPTER pAd,
6659 IN PNDIS_PACKET pPacket,
6660 IN UCHAR FromWhichBSSID);
6663 PNDIS_PACKET ClonePacket(
6664 IN PRTMP_ADAPTER pAd,
6665 IN PNDIS_PACKET pPacket,
6670 // Normal, AMPDU or AMSDU
6671 VOID CmmRxnonRalinkFrameIndicate(
6672 IN PRTMP_ADAPTER pAd,
6674 IN UCHAR FromWhichBSSID);
6676 VOID CmmRxRalinkFrameIndicate(
6677 IN PRTMP_ADAPTER pAd,
6678 IN MAC_TABLE_ENTRY *pEntry,
6680 IN UCHAR FromWhichBSSID);
6682 VOID Update_Rssi_Sample(
6683 IN PRTMP_ADAPTER pAd,
6684 IN RSSI_SAMPLE *pRssi,
6685 IN PRXWI_STRUC pRxWI);
6687 PNDIS_PACKET GetPacketFromRxRing(
6688 IN PRTMP_ADAPTER pAd,
6689 OUT PRT28XX_RXD_STRUC pSaveRxD,
6690 OUT BOOLEAN *pbReschedule,
6691 IN OUT UINT32 *pRxPending);
6693 PNDIS_PACKET RTMPDeFragmentDataFrame(
6694 IN PRTMP_ADAPTER pAd,
6697 ////////////////////////////////////////
6705 typedef struct _DefaultKeyIdxValue
6709 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6713 #ifdef CONFIG_STA_SUPPORT
6715 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6716 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6717 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6718 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6719 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6720 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6721 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6722 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6723 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6724 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6725 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6728 P80211ENUM_msgitem_status_no_value = 0x00
6731 P80211ENUM_truth_false = 0x00,
6732 P80211ENUM_truth_true = 0x01
6735 /* Definition from madwifi */
6741 } p80211item_uint32_t;
6746 #define WLAN_DEVNAMELEN_MAX 16
6747 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6748 p80211item_uint32_t hosttime;
6749 p80211item_uint32_t mactime;
6750 p80211item_uint32_t channel;
6751 p80211item_uint32_t rssi;
6752 p80211item_uint32_t sq;
6753 p80211item_uint32_t signal;
6754 p80211item_uint32_t noise;
6755 p80211item_uint32_t rate;
6756 p80211item_uint32_t istx;
6757 p80211item_uint32_t frmlen;
6758 } wlan_ng_prism2_header;
6760 /* The radio capture header precedes the 802.11 header. */
6761 typedef struct PACKED _ieee80211_radiotap_header {
6762 UINT8 it_version; /* Version 0. Only increases
6763 * for drastic changes,
6764 * introduction of compatible
6765 * new fields does not count.
6768 UINT16 it_len; /* length of the whole
6769 * header in bytes, including
6770 * it_version, it_pad,
6771 * it_len, and data fields.
6773 UINT32 it_present; /* A bitmap telling which
6774 * fields are present. Set bit 31
6775 * (0x80000000) to extend the
6776 * bitmap by another 32 bits.
6777 * Additional extensions are made
6778 * by setting bit 31.
6780 }ieee80211_radiotap_header ;
6782 enum ieee80211_radiotap_type {
6783 IEEE80211_RADIOTAP_TSFT = 0,
6784 IEEE80211_RADIOTAP_FLAGS = 1,
6785 IEEE80211_RADIOTAP_RATE = 2,
6786 IEEE80211_RADIOTAP_CHANNEL = 3,
6787 IEEE80211_RADIOTAP_FHSS = 4,
6788 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6789 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6790 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6791 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6792 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6793 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6794 IEEE80211_RADIOTAP_ANTENNA = 11,
6795 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6796 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6799 #define WLAN_RADIOTAP_PRESENT ( \
6800 (1 << IEEE80211_RADIOTAP_TSFT) | \
6801 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6802 (1 << IEEE80211_RADIOTAP_RATE) | \
6805 typedef struct _wlan_radiotap_header {
6806 ieee80211_radiotap_header wt_ihdr;
6810 } wlan_radiotap_header;
6811 /* Definition from madwifi */
6813 void send_monitor_packets(
6814 IN PRTMP_ADAPTER pAd,
6817 #if WIRELESS_EXT >= 12
6818 // This function will be called when query /proc
6819 struct iw_statistics *rt28xx_get_wireless_stats(
6820 IN struct net_device *net_dev);
6823 VOID RTMPSetDesiredRates(
6824 IN PRTMP_ADAPTER pAdapter,
6826 #endif // CONFIG_STA_SUPPORT //
6828 INT Set_FixedTxMode_Proc(
6829 IN PRTMP_ADAPTER pAd,
6832 static inline char* GetPhyMode(
6842 #ifdef DOT11_N_SUPPORT
6846 case MODE_HTGREENFIELD:
6848 #endif // DOT11_N_SUPPORT //
6855 static inline char* GetBW(
6865 #ifdef DOT11_N_SUPPORT
6868 #endif // DOT11_N_SUPPORT //
6875 VOID RT28xxThreadTerminate(
6876 IN RTMP_ADAPTER *pAd);
6878 BOOLEAN RT28XXChipsetCheck(
6881 BOOLEAN RT28XXNetDevInit(
6883 IN struct net_device *net_dev,
6884 IN RTMP_ADAPTER *pAd);
6886 BOOLEAN RT28XXProbePostConfig(
6888 IN RTMP_ADAPTER *pAd,
6891 VOID RT28XXDMADisable(
6892 IN RTMP_ADAPTER *pAd);
6894 VOID RT28XXDMAEnable(
6895 IN RTMP_ADAPTER *pAd);
6897 VOID RT28xx_UpdateBeaconToAsic(
6898 IN RTMP_ADAPTER * pAd,
6901 IN ULONG UpdatePos);
6904 IN struct net_device *net_dev,
6905 IN OUT struct ifreq *rq,
6909 #ifdef CONFIG_STA_SUPPORT
6910 INT rt28xx_sta_ioctl(
6911 IN struct net_device *net_dev,
6912 IN OUT struct ifreq *rq,
6914 #endif // CONFIG_STA_SUPPORT //
6916 BOOLEAN RT28XXSecurityKeyAdd(
6917 IN PRTMP_ADAPTER pAd,
6920 IN MAC_TABLE_ENTRY *pEntry);
6922 ////////////////////////////////////////
6923 PNDIS_PACKET GetPacketFromRxRing(
6924 IN PRTMP_ADAPTER pAd,
6925 OUT PRT28XX_RXD_STRUC pSaveRxD,
6926 OUT BOOLEAN *pbReschedule,
6927 IN OUT UINT32 *pRxPending);
6930 void kill_thread_task(PRTMP_ADAPTER pAd);
6932 void tbtt_tasklet(unsigned long data);
6935 VOID AsicTurnOffRFClk(
6936 IN PRTMP_ADAPTER pAd,
6939 VOID AsicTurnOnRFClk(
6940 IN PRTMP_ADAPTER pAd,
6945 // Function Prototype in rtusb_bulk.c
6947 VOID RTUSBInitTxDesc(
6948 IN PRTMP_ADAPTER pAd,
6949 IN PTX_CONTEXT pTxContext,
6950 IN UCHAR BulkOutPipeId,
6951 IN usb_complete_t Func);
6953 VOID RTUSBInitHTTxDesc(
6954 IN PRTMP_ADAPTER pAd,
6955 IN PHT_TX_CONTEXT pTxContext,
6956 IN UCHAR BulkOutPipeId,
6957 IN ULONG BulkOutSize,
6958 IN usb_complete_t Func);
6960 VOID RTUSBInitRxDesc(
6961 IN PRTMP_ADAPTER pAd,
6962 IN PRX_CONTEXT pRxContext);
6964 VOID RTUSBCleanUpDataBulkOutQueue(
6965 IN PRTMP_ADAPTER pAd);
6967 VOID RTUSBCancelPendingBulkOutIRP(
6968 IN PRTMP_ADAPTER pAd);
6970 VOID RTUSBBulkOutDataPacket(
6971 IN PRTMP_ADAPTER pAd,
6972 IN UCHAR BulkOutPipeId,
6975 VOID RTUSBBulkOutNullFrame(
6976 IN PRTMP_ADAPTER pAd);
6978 VOID RTUSBBulkOutRTSFrame(
6979 IN PRTMP_ADAPTER pAd);
6981 VOID RTUSBCancelPendingBulkInIRP(
6982 IN PRTMP_ADAPTER pAd);
6984 VOID RTUSBCancelPendingIRPs(
6985 IN PRTMP_ADAPTER pAd);
6987 VOID RTUSBBulkOutMLMEPacket(
6988 IN PRTMP_ADAPTER pAd,
6991 VOID RTUSBBulkOutPsPoll(
6992 IN PRTMP_ADAPTER pAd);
6994 VOID RTUSBCleanUpMLMEBulkOutQueue(
6995 IN PRTMP_ADAPTER pAd);
6997 VOID RTUSBKickBulkOut(
6998 IN PRTMP_ADAPTER pAd);
7000 VOID RTUSBBulkReceive(
7001 IN PRTMP_ADAPTER pAd);
7004 IN RTMP_ADAPTER *pAd);
7006 VOID RTUSBInitRxDesc(
7007 IN PRTMP_ADAPTER pAd,
7008 IN PRX_CONTEXT pRxContext);
7010 VOID RTUSBBulkRxHandle(
7011 IN unsigned long data);
7014 // Function Prototype in rtusb_io.c
7016 NTSTATUS RTUSBMultiRead(
7017 IN PRTMP_ADAPTER pAd,
7022 NTSTATUS RTUSBMultiWrite(
7023 IN PRTMP_ADAPTER pAd,
7028 NTSTATUS RTUSBMultiWrite_OneByte(
7029 IN PRTMP_ADAPTER pAd,
7033 NTSTATUS RTUSBReadBBPRegister(
7034 IN PRTMP_ADAPTER pAd,
7038 NTSTATUS RTUSBWriteBBPRegister(
7039 IN PRTMP_ADAPTER pAd,
7043 NTSTATUS RTUSBWriteRFRegister(
7044 IN PRTMP_ADAPTER pAd,
7047 NTSTATUS RT30xxWriteRFRegister(
7048 IN PRTMP_ADAPTER pAd,
7052 NTSTATUS RT30xxReadRFRegister(
7053 IN PRTMP_ADAPTER pAd,
7057 NTSTATUS RTUSB_VendorRequest(
7058 IN PRTMP_ADAPTER pAd,
7059 IN UINT32 TransferFlags,
7060 IN UCHAR ReservedBits,
7064 IN PVOID TransferBuffer,
7065 IN UINT32 TransferBufferLength);
7067 NTSTATUS RTUSBReadEEPROM(
7068 IN PRTMP_ADAPTER pAd,
7073 NTSTATUS RTUSBWriteEEPROM(
7074 IN PRTMP_ADAPTER pAd,
7079 VOID RTUSBPutToSleep(
7080 IN PRTMP_ADAPTER pAd);
7082 NTSTATUS RTUSBWakeUp(
7083 IN PRTMP_ADAPTER pAd);
7085 VOID RTUSBInitializeCmdQ(
7088 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7089 IN PRTMP_ADAPTER pAd,
7091 IN BOOLEAN SetInformation,
7092 IN PVOID pInformationBuffer,
7093 IN UINT32 InformationBufferLength);
7095 NDIS_STATUS RTUSBEnqueueInternalCmd(
7096 IN PRTMP_ADAPTER pAd,
7098 IN PVOID pInformationBuffer,
7099 IN UINT32 InformationBufferLength);
7101 VOID RTUSBDequeueCmd(
7103 OUT PCmdQElmt *pcmdqelmt);
7106 IN OUT PVOID Context);
7109 IN OUT PVOID Context);
7111 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7112 IN RTMP_ADAPTER *pAd,
7113 IN RALINK_TIMER_STRUCT *pTimer);
7115 BOOLEAN RT2870_TimerQ_Remove(
7116 IN RTMP_ADAPTER *pAd,
7117 IN RALINK_TIMER_STRUCT *pTimer);
7119 void RT2870_TimerQ_Exit(
7120 IN RTMP_ADAPTER *pAd);
7122 void RT2870_TimerQ_Init(
7123 IN RTMP_ADAPTER *pAd);
7125 VOID RT2870_BssBeaconExit(
7126 IN RTMP_ADAPTER *pAd);
7128 VOID RT2870_BssBeaconStop(
7129 IN RTMP_ADAPTER *pAd);
7131 VOID RT2870_BssBeaconStart(
7132 IN RTMP_ADAPTER * pAd);
7134 VOID RT2870_BssBeaconInit(
7135 IN RTMP_ADAPTER *pAd);
7137 VOID RT2870_WatchDog(
7138 IN RTMP_ADAPTER *pAd);
7140 NTSTATUS RTUSBWriteMACRegister(
7141 IN PRTMP_ADAPTER pAd,
7145 NTSTATUS RTUSBReadMACRegister(
7146 IN PRTMP_ADAPTER pAd,
7148 OUT PUINT32 pValue);
7150 NTSTATUS RTUSBSingleWrite(
7151 IN RTMP_ADAPTER *pAd,
7155 NTSTATUS RTUSBFirmwareRun(
7156 IN PRTMP_ADAPTER pAd);
7158 NTSTATUS RTUSBFirmwareWrite(
7159 IN PRTMP_ADAPTER pAd,
7163 NTSTATUS RTUSBFirmwareOpmode(
7164 IN PRTMP_ADAPTER pAd,
7165 OUT PUINT32 pValue);
7167 NTSTATUS RTUSBVenderReset(
7168 IN PRTMP_ADAPTER pAd);
7170 NDIS_STATUS RTUSBSetHardWareRegister(
7171 IN PRTMP_ADAPTER pAdapter,
7174 NDIS_STATUS RTUSBQueryHardWareRegister(
7175 IN PRTMP_ADAPTER pAdapter,
7179 IN PRTMP_ADAPTER pAd);
7182 NDIS_STATUS CreateThreads(
7183 IN struct net_device *net_dev );
7186 VOID MacTableInitialize(
7187 IN PRTMP_ADAPTER pAd);
7190 IN PRTMP_ADAPTER pAd,
7193 NDIS_STATUS RTMPWPAAddKeyProc(
7194 IN PRTMP_ADAPTER pAd,
7197 VOID AsicRxAntEvalAction(
7198 IN PRTMP_ADAPTER pAd);
7200 #if 0 // Mark because not used in RT28xx.
7201 NTSTATUS RTUSBRxPacket(
7202 IN PRTMP_ADAPTER pAd,
7203 IN BOOLEAN bBulkReceive);
7205 VOID RTUSBDequeueMLMEPacket(
7206 IN PRTMP_ADAPTER pAd);
7208 VOID RTUSBCleanUpMLMEWaitQueue(
7209 IN PRTMP_ADAPTER pAd);
7213 IN PRTMP_ADAPTER pAd,
7214 IN PUCHAR pHeader802_3,
7218 OUT PNDIS_PACKET *ppPacket);
7220 UINT deaggregate_AMSDU_announce(
7221 IN PRTMP_ADAPTER pAd,
7222 PNDIS_PACKET pPacket,
7226 NDIS_STATUS RTMPCheckRxError(
7227 IN PRTMP_ADAPTER pAd,
7228 IN PHEADER_802_11 pHeader,
7229 IN PRXWI_STRUC pRxWI,
7230 IN PRT28XX_RXD_STRUC pRxINFO);
7233 VOID RTUSBMlmeHardTransmit(
7234 IN PRTMP_ADAPTER pAd,
7235 IN PMGMT_STRUC pMgmt);
7241 VOID RTUSBResumeMsduTransmission(
7242 IN PRTMP_ADAPTER pAd);
7244 VOID RTUSBSuspendMsduTransmission(
7245 IN PRTMP_ADAPTER pAd);
7249 // Function Prototype in rtusb_data.c
7251 NDIS_STATUS RTUSBFreeDescriptorRequest(
7252 IN PRTMP_ADAPTER pAd,
7253 IN UCHAR BulkOutPipeId,
7254 IN UINT32 NumberRequired);
7257 BOOLEAN RTUSBNeedQueueBackForAgg(
7258 IN RTMP_ADAPTER *pAd,
7259 IN UCHAR BulkOutPipeId);
7262 VOID RTMPWriteTxInfo(
7263 IN PRTMP_ADAPTER pAd,
7264 IN PTXINFO_STRUC pTxInfo,
7265 IN USHORT USBDMApktLen,
7272 // Function Prototype in cmm_data_2870.c
7274 USHORT RtmpUSB_WriteSubTxResource(
7275 IN PRTMP_ADAPTER pAd,
7278 OUT USHORT *FreeNumber);
7280 USHORT RtmpUSB_WriteSingleTxResource(
7281 IN PRTMP_ADAPTER pAd,
7284 OUT USHORT *FreeNumber);
7286 USHORT RtmpUSB_WriteFragTxResource(
7287 IN PRTMP_ADAPTER pAd,
7290 OUT USHORT *FreeNumber);
7292 USHORT RtmpUSB_WriteMultiTxResource(
7293 IN PRTMP_ADAPTER pAd,
7296 OUT USHORT *FreeNumber);
7298 VOID RtmpUSB_FinalWriteTxResource(
7299 IN PRTMP_ADAPTER pAd,
7301 IN USHORT totalMPDUSize,
7304 VOID RtmpUSBDataLastTxIdx(
7305 IN PRTMP_ADAPTER pAd,
7309 VOID RtmpUSBDataKickOut(
7310 IN PRTMP_ADAPTER pAd,
7315 int RtmpUSBMgmtKickOut(
7316 IN RTMP_ADAPTER *pAd,
7318 IN PNDIS_PACKET pPacket,
7319 IN PUCHAR pSrcBufVA,
7322 VOID RtmpUSBNullFrameKickOut(
7323 IN RTMP_ADAPTER *pAd,
7325 IN UCHAR *pNullFrame,
7326 IN UINT32 frameLen);
7328 VOID RT28xxUsbStaAsicForceWakeup(
7329 IN PRTMP_ADAPTER pAd,
7330 IN BOOLEAN bFromTx);
7332 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7333 IN PRTMP_ADAPTER pAd,
7334 IN USHORT TbttNumToNextWakeUp);
7336 VOID RT28xxUsbMlmeRadioOn(
7337 IN PRTMP_ADAPTER pAd);
7339 VOID RT28xxUsbMlmeRadioOFF(
7340 IN PRTMP_ADAPTER pAd);
7343 ////////////////////////////////////////
7346 IN RTMP_ADAPTER *pAd);
7348 UINT32 QBSS_LoadElementAppend(
7349 IN RTMP_ADAPTER *pAd,
7352 VOID QBSS_LoadUpdate(
7353 IN RTMP_ADAPTER *pAd);
7355 ///////////////////////////////////////
7356 INT RTMPShowCfgValue(
7357 IN PRTMP_ADAPTER pAd,
7361 PCHAR RTMPGetRalinkAuthModeStr(
7362 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7364 PCHAR RTMPGetRalinkEncryModeStr(
7365 IN USHORT encryMode);
7366 //////////////////////////////////////
7368 #ifdef CONFIG_STA_SUPPORT
7369 VOID AsicStaBbpTuning(
7370 IN PRTMP_ADAPTER pAd);
7372 BOOLEAN StaAddMacTableEntry(
7373 IN PRTMP_ADAPTER pAd,
7374 IN PMAC_TABLE_ENTRY pEntry,
7375 IN UCHAR MaxSupportedRateIn500Kbps,
7376 IN HT_CAPABILITY_IE *pHtCapability,
7377 IN UCHAR HtCapabilityLen,
7378 IN USHORT CapabilityInfo);
7379 #endif // CONFIG_STA_SUPPORT //
7381 void RTMP_IndicateMediaState(
7382 IN PRTMP_ADAPTER pAd);
7384 VOID ReSyncBeaconTime(
7385 IN PRTMP_ADAPTER pAd);
7387 VOID RTMPSetAGCInitValue(
7388 IN PRTMP_ADAPTER pAd,
7389 IN UCHAR BandWidth);
7391 int rt28xx_close(IN PNET_DEV dev);
7392 int rt28xx_open(IN PNET_DEV dev);
7394 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7396 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7397 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7399 if (VIRTUAL_IF_NUM(pAd) == 0)
7401 if (rt28xx_open(pAd->net_dev) != 0)
7407 VIRTUAL_IF_INC(pAd);
7411 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7413 VIRTUAL_IF_DEC(pAd);
7414 if (VIRTUAL_IF_NUM(pAd) == 0)
7415 rt28xx_close(pAd->net_dev);
7420 #endif // __RTMP_H__