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 #ifdef CARRIER_DETECTION_SUPPORT
1324 typedef enum CD_STATE_n
1331 typedef struct CARRIER_DETECTION_s
1334 UINT8 CDSessionTime;
1337 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1338 #endif // CARRIER_DETECTION_SUPPORT //
1340 typedef enum _REC_BLOCKACK_STATUS
1344 Recipient_HandleRes,
1346 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1348 typedef enum _ORI_BLOCKACK_STATUS
1354 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1356 #ifdef DOT11_N_SUPPORT
1357 typedef struct _BA_ORI_ENTRY{
1362 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1364 USHORT TimeOutValue;
1365 ORI_BLOCKACK_STATUS ORI_BA_Status;
1366 RALINK_TIMER_STRUCT ORIBATimer;
1368 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1370 typedef struct _BA_REC_ENTRY {
1373 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1375 //UCHAR Curindidx; // the head in the RX reordering buffer
1377 // USHORT LastIndSeqAtTimer;
1378 USHORT TimeOutValue;
1379 RALINK_TIMER_STRUCT RECBATimer;
1380 ULONG LastIndSeqAtTimer;
1383 REC_BLOCKACK_STATUS REC_BA_Status;
1384 // UCHAR RxBufIdxUsed;
1385 // corresponding virtual address for RX reordering packet storage.
1386 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1387 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1388 // struct _BA_REC_ENTRY *pNext;
1390 struct reordering_list list;
1391 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1395 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1396 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1397 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1398 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1399 } BA_TABLE, *PBA_TABLE;
1401 //For QureyBATableOID use;
1402 typedef struct PACKED _OID_BA_REC_ENTRY{
1403 UCHAR MACAddr[MAC_ADDR_LEN];
1404 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1407 REC_BLOCKACK_STATUS REC_BA_Status[8];
1408 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1410 //For QureyBATableOID use;
1411 typedef struct PACKED _OID_BA_ORI_ENTRY{
1412 UCHAR MACAddr[MAC_ADDR_LEN];
1413 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
1416 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1417 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1419 typedef struct _QUERYBA_TABLE{
1420 OID_BA_ORI_ENTRY BAOriEntry[32];
1421 OID_BA_REC_ENTRY BARecEntry[32];
1422 UCHAR OriNum;// Number of below BAOriEntry
1423 UCHAR RecNum;// Number of below BARecEntry
1424 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1426 typedef union _BACAP_STRUC {
1427 #ifdef RT_BIG_ENDIAN
1430 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.
1431 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1432 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1433 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1434 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1435 UINT32 MpduDensity:3;
1436 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1437 UINT32 AutoBA:1; // automatically BA
1438 UINT32 TxBAWinLimit:8;
1439 UINT32 RxBAWinLimit:8;
1443 UINT32 RxBAWinLimit:8;
1444 UINT32 TxBAWinLimit:8;
1445 UINT32 AutoBA:1; // automatically BA
1446 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1447 UINT32 MpduDensity:3;
1448 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1449 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1450 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1451 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1452 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.
1457 } BACAP_STRUC, *PBACAP_STRUC;
1458 #endif // DOT11_N_SUPPORT //
1460 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1461 typedef struct _IOT_STRUC {
1463 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1464 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1465 ULONG OneSecInWindowCount;
1466 ULONG OneSecFrameDuplicateCount;
1467 ULONG OneSecOutWindowCount;
1472 BOOLEAN bRTSLongProtOn;
1473 #ifdef CONFIG_STA_SUPPORT
1474 BOOLEAN bLastAtheros;
1475 BOOLEAN bCurrentAtheros;
1476 BOOLEAN bNowAtherosBurstOn;
1477 BOOLEAN bNextDisableRxBA;
1479 #endif // CONFIG_STA_SUPPORT //
1480 } IOT_STRUC, *PIOT_STRUC;
1482 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1483 typedef union _REG_TRANSMIT_SETTING {
1484 #ifdef RT_BIG_ENDIAN
1490 UINT32 STBC:1; //SPACE
1492 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1493 UINT32 TxBF:1; // 3*3
1495 //UINT32 MCS:7; // MCS
1501 //UINT32 MCS:7; // MCS
1504 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1506 UINT32 STBC:1; //SPACE
1514 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1516 typedef union _DESIRED_TRANSMIT_SETTING {
1517 #ifdef RT_BIG_ENDIAN
1520 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1522 USHORT MCS:7; // MCS
1526 USHORT MCS:7; // MCS
1528 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1533 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1536 BOOLEAN IsRecipient;
1537 UCHAR MACAddr[MAC_ADDR_LEN];
1541 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1542 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1545 // Multiple SSID structure
1547 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1548 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1550 /* clear bcmc TIM bit */
1551 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1552 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1554 /* set bcmc TIM bit */
1555 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1556 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1558 /* clear a station PS TIM bit */
1559 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1560 { UCHAR tim_offset = wcid >> 3; \
1561 UCHAR bit_offset = wcid & 0x7; \
1562 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1564 /* set a station PS TIM bit */
1565 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1566 { UCHAR tim_offset = wcid >> 3; \
1567 UCHAR bit_offset = wcid & 0x7; \
1568 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1571 #define BEACON_BITMAP_MASK 0xff
1572 typedef struct _BEACON_SYNC_STRUCT_
1574 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1575 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1576 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1577 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1578 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1579 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1580 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1581 }BEACON_SYNC_STRUCT;
1584 typedef struct _MULTISSID_STRUCT {
1585 UCHAR Bssid[MAC_ADDR_LEN];
1587 CHAR Ssid[MAX_LEN_OF_SSID];
1588 USHORT CapabilityInfo;
1592 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1593 NDIS_802_11_WEP_STATUS WepStatus;
1594 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1595 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1599 ULONG ReceivedByteCount;
1600 ULONG TransmittedByteCount;
1604 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1605 RT_HT_PHY_INFO DesiredHtPhyInfo;
1606 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1607 BOOLEAN bAutoTxRateSwitch;
1609 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1612 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1613 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1614 UCHAR DesiredRatesIndex;
1615 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1617 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1618 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1619 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1629 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1630 UCHAR BANClass3Data;
1631 ULONG IsolateInterStaTraffic;
1634 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1637 UCHAR TimIELocationInBeacon;
1638 UCHAR CapabilityInfoLocationInBeacon;
1639 // outgoing BEACON frame buffer and corresponding TXWI
1640 // PTXWI_STRUC BeaconTxWI; //
1641 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1644 UINT16 StationKeepAliveTime; // unit: second
1647 USHORT VLAN_Priority;
1649 RT_802_11_ACL AccessControlList;
1652 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1653 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1655 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1657 // For 802.1x daemon setting per BSS
1658 UCHAR radius_srv_num;
1659 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1662 unsigned int mylinkid;
1666 UINT32 RcvdConflictSsidCount;
1667 UINT32 RcvdSpoofedAssocRespCount;
1668 UINT32 RcvdSpoofedReassocRespCount;
1669 UINT32 RcvdSpoofedProbeRespCount;
1670 UINT32 RcvdSpoofedBeaconCount;
1671 UINT32 RcvdSpoofedDisassocCount;
1672 UINT32 RcvdSpoofedAuthCount;
1673 UINT32 RcvdSpoofedDeauthCount;
1674 UINT32 RcvdSpoofedUnknownMgmtCount;
1675 UINT32 RcvdReplayAttackCount;
1677 CHAR RssiOfRcvdConflictSsid;
1678 CHAR RssiOfRcvdSpoofedAssocResp;
1679 CHAR RssiOfRcvdSpoofedReassocResp;
1680 CHAR RssiOfRcvdSpoofedProbeResp;
1681 CHAR RssiOfRcvdSpoofedBeacon;
1682 CHAR RssiOfRcvdSpoofedDisassoc;
1683 CHAR RssiOfRcvdSpoofedAuth;
1684 CHAR RssiOfRcvdSpoofedDeauth;
1685 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1686 CHAR RssiOfRcvdReplayAttack;
1690 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1694 #ifdef DOT11N_DRAFT3
1695 typedef enum _BSS2040COEXIST_FLAG{
1696 BSS_2040_COEXIST_DISABLE = 0,
1697 BSS_2040_COEXIST_TIMER_FIRED = 1,
1698 BSS_2040_COEXIST_INFO_SYNC = 2,
1699 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1700 }BSS2040COEXIST_FLAG;
1701 #endif // DOT11N_DRAFT3 //
1703 // configuration common to OPMODE_AP as well as OPMODE_STA
1704 typedef struct _COMMON_CONFIG {
1706 BOOLEAN bCountryFlag;
1707 UCHAR CountryCode[3];
1709 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1710 UCHAR CountryRegionForABand; // Enum of country region for A band
1711 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1712 USHORT Dsifs; // in units of usec
1713 ULONG PacketFilter; // Packet filter for receiving
1715 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1716 UCHAR SsidLen; // the actual ssid length in used
1717 UCHAR LastSsidLen; // the actual ssid length in used
1718 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1719 UCHAR LastBssid[MAC_ADDR_LEN];
1721 UCHAR Bssid[MAC_ADDR_LEN];
1722 USHORT BeaconPeriod;
1724 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1726 #if 0 // move to STA_ADMIN_CONFIG
1729 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1730 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1731 NDIS_802_11_WEP_STATUS WepStatus;
1732 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1734 // Add to support different cipher suite for WPA2/WPA mode
1735 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1736 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1737 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1738 USHORT RsnCapability;
1740 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1743 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1745 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1747 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1748 UCHAR MaxDesiredRate;
1749 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1751 ULONG BasicRateBitmap; // backup basic ratebitmap
1753 BOOLEAN bAPSDCapable;
1754 BOOLEAN bInServicePeriod;
1759 BOOLEAN bNeedSendTriggerFrame;
1760 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1761 ULONG TriggerTimerCount;
1763 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1764 // move to MULTISSID_STRUCT for MBSS
1765 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1766 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1767 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1768 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1769 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1770 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1771 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1772 //BOOLEAN bAutoTxRateSwitch;
1773 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1774 UCHAR RtsRate; // RATE_xxx
1775 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1776 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1777 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1779 USHORT RtsThreshold; // in unit of BYTE
1780 USHORT FragmentThreshold; // in unit of BYTE
1782 UCHAR TxPower; // in unit of mW
1783 ULONG TxPowerPercentage; // 0~100 %
1784 ULONG TxPowerDefault; // keep for TxPowerPercentage
1786 #ifdef DOT11_N_SUPPORT
1787 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1788 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1789 #endif // DOT11_N_SUPPORT //
1790 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1791 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1792 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1793 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1794 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1795 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1796 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1797 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1798 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1799 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1801 #ifdef DOT11_N_SUPPORT
1803 #endif // DOT11_N_SUPPORT //
1804 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1805 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1806 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1807 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1808 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1809 #ifdef CONFIG_STA_SUPPORT
1810 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1811 #endif // CONFIG_STA_SUPPORT //
1812 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1813 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1814 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1815 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1816 ULONG OpStatusFlags;
1818 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1819 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1821 // IEEE802.11H--DFS.
1822 RADAR_DETECT_STRUCT RadarDetect;
1824 #ifdef CARRIER_DETECTION_SUPPORT
1825 CARRIER_DETECTION CarrierDetect;
1826 #endif // CARRIER_DETECTION_SUPPORT //
1828 #ifdef DOT11_N_SUPPORT
1830 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1831 //RT_HT_CAPABILITY SupportedHtPhy;
1832 RT_HT_CAPABILITY DesiredHtPhy;
1833 HT_CAPABILITY_IE HtCapability;
1834 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1835 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1836 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1837 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
1839 #ifdef DOT11N_DRAFT3
1840 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1841 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1843 //This IE is used for 20/40 BSS Coexistence.
1844 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1845 // ====== 11n D3.0 =======================>
1846 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1847 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1848 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1849 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1850 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1851 USHORT Dot11BssWidthChanTranDelayFactor;
1852 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1854 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1855 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1857 NDIS_SPIN_LOCK TriggerEventTabLock;
1858 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1859 BSS_2040_COEXIST_IE BSSCoexist2040;
1860 TRIGGER_EVENT_TAB TriggerEventTab;
1861 UCHAR ChannelListIdx;
1862 // <====== 11n D3.0 =======================
1863 BOOLEAN bOverlapScanning;
1864 #endif // DOT11N_DRAFT3 //
1867 BOOLEAN bMIMOPSEnable;
1869 BOOLEAN bDisableReordering;
1870 BOOLEAN bForty_Mhz_Intolerant;
1871 BOOLEAN bExtChannelSwitchAnnouncement;
1872 BOOLEAN bRcvBSSWidthTriggerEvents;
1873 ULONG LastRcvBSSWidthTriggerEventsTime;
1876 #endif // DOT11_N_SUPPORT //
1878 // Enable wireless event
1879 BOOLEAN bWirelessEvent;
1880 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1882 // Tx & Rx Stream number selection
1886 // transmit phy mode, trasmit rate for Multicast.
1887 #ifdef MCAST_RATE_SPECIFIC
1888 UCHAR McastTransmitMcs;
1889 UCHAR McastTransmitPhyMode;
1890 #endif // MCAST_RATE_SPECIFIC //
1892 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1895 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1896 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1897 RT_HT_CAPABILITY SupportedHtPhy;
1898 ULONG MaxPktOneTxBulk;
1902 BEACON_SYNC_STRUCT *pBeaconSync;
1903 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1904 UINT32 BeaconAdjust;
1905 UINT32 BeaconFactor;
1906 UINT32 BeaconRemain;
1910 NDIS_SPIN_LOCK MeasureReqTabLock;
1911 PMEASURE_REQ_TAB pMeasureReqTab;
1913 NDIS_SPIN_LOCK TpcReqTabLock;
1914 PTPC_REQ_TAB pTpcReqTab;
1916 // transmit phy mode, trasmit rate for Multicast.
1917 #ifdef MCAST_RATE_SPECIFIC
1918 HTTRANSMIT_SETTING MCastPhyMode;
1919 #endif // MCAST_RATE_SPECIFIC //
1922 UINT16 DefineMaxTxPwr;
1923 #endif // SINGLE_SKU //
1926 } COMMON_CONFIG, *PCOMMON_CONFIG;
1929 #ifdef CONFIG_STA_SUPPORT
1930 /* Modified by Wu Xi-Kun 4/21/2006 */
1931 // STA configuration and status
1932 typedef struct _STA_ADMIN_CONFIG {
1934 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1935 // the user intended configuration, but not necessary fully equal to the final
1936 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1937 // AP or IBSS holder).
1938 // Once initialized, user configuration can only be changed via OID_xxx
1939 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1940 USHORT AtimWin; // used when starting a new IBSS
1943 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1944 // the user intended configuration, and should be always applied to the final
1945 // settings in ACTIVE BSS without compromising with the BSS holder.
1946 // Once initialized, user configuration can only be changed via OID_xxx
1948 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1949 USHORT DefaultListenCount; // default listen count;
1950 ULONG WindowsPowerMode; // Power mode for AC power
1951 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1952 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1953 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1954 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1956 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1957 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1958 USHORT DisassocReason;
1959 UCHAR DisassocSta[MAC_ADDR_LEN];
1960 USHORT DeauthReason;
1961 UCHAR DeauthSta[MAC_ADDR_LEN];
1962 USHORT AuthFailReason;
1963 UCHAR AuthFailSta[MAC_ADDR_LEN];
1965 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1966 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1967 NDIS_802_11_WEP_STATUS WepStatus;
1968 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1970 // Add to support different cipher suite for WPA2/WPA mode
1971 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1972 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1973 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1974 USHORT RsnCapability;
1976 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1978 UCHAR PMK[32]; // WPA PSK mode PMK
1979 UCHAR PTK[64]; // WPA PSK mode PTK
1980 UCHAR GTK[32]; // GTK from authenticator
1981 BSSID_INFO SavedPMK[PMKID_NO];
1982 UINT SavedPMKNum; // Saved PMKID number
1987 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1990 // For WPA countermeasures
1991 ULONG LastMicErrorTime; // record last MIC error time
1992 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1993 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1994 // For WPA-PSK supplicant state
1995 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1996 UCHAR ReplayCounter[8];
1997 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1998 UCHAR SNonce[32]; // SNonce for WPA-PSK
2000 UCHAR LastSNR0; // last received BEACON's SNR
2001 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2002 RSSI_SAMPLE RssiSample;
2003 ULONG NumOfAvgRssiSample;
2005 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2006 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2007 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2008 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2010 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2011 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2012 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2013 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2014 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2015 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2016 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2019 // New for WPA, windows want us to to keep association information and
2020 // Fixed IEs from last association response
2021 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2022 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2023 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2024 USHORT ResVarIELen; // Length of next VIE include EID & Length
2025 UCHAR ResVarIEs[MAX_VIE_LEN];
2028 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2030 // New variables used for CCX 1.0
2032 BOOLEAN bCkipCmicOn;
2034 UCHAR GIV[3]; //for CCX iv
2039 LEAP_AUTH_INFO LeapAuthInfo;
2041 UCHAR NetworkChallenge[8];
2042 UCHAR NetworkChallengeResponse[24];
2043 UCHAR PeerChallenge[8];
2045 UCHAR PeerChallengeResponse[24];
2046 UCHAR SessionKey[16]; //Network session keys (NSK)
2047 RALINK_TIMER_STRUCT LeapAuthTimer;
2048 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2050 // New control flags for CCX
2051 CCX_CONTROL CCXControl; // Master administration state
2052 BOOLEAN CCXEnable; // Actual CCX state
2053 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2054 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2055 UCHAR CCXReqType; // Current processing CCX request type
2056 BSS_TABLE CCXBssTab; // BSS Table
2057 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2058 USHORT FrameReportLen; // Current Frame report length
2059 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2060 USHORT RPIDensity[8]; // Array for RPI density collection
2061 // Start address of each BSS table within FrameReportBuf
2062 // It's important to update the RxPower of the corresponding Bss
2063 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2064 USHORT BeaconToken; // Token for beacon report
2065 ULONG LastBssIndex; // Most current reported Bss index
2066 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2067 UCHAR RMReqCnt; // Number of measurement request saved.
2068 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2069 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2070 // It must be the same channel with maximum duration
2071 USHORT ParallelDuration; // Maximum duration for parallel measurement
2072 UCHAR ParallelChannel; // Only one channel with parallel measurement
2073 USHORT IAPPToken; // IAPP dialog token
2074 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2075 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2076 // Hack for channel load and noise histogram parameters
2077 UCHAR NHFactor; // Parameter for Noise histogram
2078 UCHAR CLFactor; // Parameter for channel load
2080 UCHAR KRK[16]; //Key Refresh Key.
2081 UCHAR BTK[32]; //Base Transient Key
2082 BOOLEAN CCKMLinkUpFlag;
2083 ULONG CCKMRN; //(Re)Association request number.
2084 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2085 UCHAR AironetCellPowerLimit; //in dBm
2086 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2087 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2088 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2089 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2090 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2091 USHORT CCXAdjacentAPChannel;
2092 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2094 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2095 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2097 UCHAR DtimCount; // 0.. DtimPeriod-1
2098 UCHAR DtimPeriod; // default = 3
2100 #ifdef QOS_DLS_SUPPORT
2101 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2102 UCHAR DlsReplayCounter[8];
2103 #endif // QOS_DLS_SUPPORT //
2104 ////////////////////////////////////////////////////////////////////////////////////////
2105 // This is only for WHQL test.
2107 ////////////////////////////////////////////////////////////////////////////////////////
2109 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2111 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2112 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2114 #ifdef WPA_SUPPLICANT_SUPPORT
2116 BOOLEAN IEEE8021x_required_keys;
2117 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2118 UCHAR DesireSharedKeyId;
2120 // 0: driver ignores wpa_supplicant
2121 // 1: wpa_supplicant initiates scanning and AP selection
2122 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2123 UCHAR WpaSupplicantUP;
2124 UCHAR WpaSupplicantScanCount;
2125 #endif // WPA_SUPPLICANT_SUPPORT //
2130 BOOLEAN bTGnWifiTest;
2131 BOOLEAN bScanReqIsFromWebUI;
2133 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2134 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2135 RT_HT_PHY_INFO DesiredHtPhyInfo;
2136 BOOLEAN bAutoTxRateSwitch;
2139 #ifdef EXT_BUILD_CHANNEL_LIST
2140 UCHAR IEEE80211dClientMode;
2141 UCHAR StaOriCountryCode[3];
2142 UCHAR StaOriGeography;
2143 #endif // EXT_BUILD_CHANNEL_LIST //
2144 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2146 // This data structure keep the current active BSS/IBSS's configuration that this STA
2147 // had agreed upon joining the network. Which means these parameters are usually decided
2148 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2149 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2150 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2151 // the current active settings.
2152 typedef struct _STA_ACTIVE_CONFIG {
2154 USHORT AtimWin; // in kusec; IBSS parameter set element
2155 USHORT CapabilityInfo;
2156 USHORT CfpMaxDuration;
2159 // Copy supported rate from desired AP's beacon. We are trying to match
2160 // AP's supported and extended rate settings.
2161 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2162 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2165 // Copy supported ht from desired AP's beacon. We are trying to match
2166 RT_HT_PHY_INFO SupportedPhyInfo;
2167 RT_HT_CAPABILITY SupportedHtPhy;
2168 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2171 // for USB interface, avoid in interrupt when write key
2172 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2173 NDIS_802_11_MAC_ADDRESS MacAddr;
2174 USHORT MacTabMatchWCID; // ASIC
2175 CIPHER_KEY CipherKey;
2176 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2178 #endif // CONFIG_STA_SUPPORT //
2180 // ----------- start of AP --------------------------
2181 // AUTH-RSP State Machine Aux data structure
2182 typedef struct _AP_MLME_AUX {
2183 UCHAR Addr[MAC_ADDR_LEN];
2185 CHAR Challenge[CIPHER_TEXT_LEN];
2186 } AP_MLME_AUX, *PAP_MLME_AUX;
2188 // structure to define WPA Group Key Rekey Interval
2189 typedef struct PACKED _RT_802_11_WPA_REKEY {
2190 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2191 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2192 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2194 typedef struct _MAC_TABLE_ENTRY {
2195 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2196 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2197 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2198 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2199 BOOLEAN ValidAsMesh;
2200 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2202 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2204 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2206 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2207 UCHAR CMTimerRunning;
2208 UCHAR apidx; // MBSS number
2210 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2211 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2212 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2215 RALINK_TIMER_STRUCT RetryTimer;
2216 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2217 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2218 NDIS_802_11_WEP_STATUS WepStatus;
2219 AP_WPA_STATE WpaState;
2222 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2223 CIPHER_KEY PairwiseKey;
2226 UCHAR PMKID[LEN_PMKID];
2229 UCHAR Addr[MAC_ADDR_LEN];
2232 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2233 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2235 USHORT CapabilityInfo;
2237 ULONG NoDataIdleCount;
2238 UINT16 StationKeepAliveCount; // unit: second
2240 QUEUE_HEADER PsQueue;
2242 UINT32 StaConnectTime; // the live time of this station since associated with AP
2245 #ifdef DOT11_N_SUPPORT
2247 USHORT NoBADataCountDown;
2249 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2250 UINT TxBFCount; // 3*3
2251 #endif // DOT11_N_SUPPORT //
2253 UINT DebugFIFOCount;
2258 //====================================================
2259 //WDS entry needs these
2260 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2261 UINT MatchWDSTabIdx;
2262 UCHAR MaxSupportedRate;
2264 UCHAR CurrTxRateIndex;
2265 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2266 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2267 // USHORT OneSecTxOkCount;
2268 UINT32 OneSecTxNoRetryOkCount;
2269 UINT32 OneSecTxRetryOkCount;
2270 UINT32 OneSecTxFailCount;
2271 UINT32 ContinueTxFailCnt;
2272 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2273 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2274 //====================================================
2278 #ifdef CONFIG_STA_SUPPORT
2279 #ifdef QOS_DLS_SUPPORT
2280 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2281 #endif // QOS_DLS_SUPPORT //
2282 #endif // CONFIG_STA_SUPPORT //
2284 BOOLEAN fNoisyEnvironment;
2285 BOOLEAN fLastSecAccordingRSSI;
2286 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2287 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2288 ULONG LastTxOkCount;
2289 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2291 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2292 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2293 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2294 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2295 ULONG ClientStatusFlags;
2297 // TODO: Shall we move that to DOT11_N_SUPPORT???
2298 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2300 #ifdef DOT11_N_SUPPORT
2301 // HT EWC MIMO-N used parameters
2302 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2303 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2304 USHORT TXAutoBAbitmap;
2305 USHORT BADeclineBitmap;
2306 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2307 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2308 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2310 // 802.11n features.
2312 UCHAR MaxRAmpduFactor;
2314 UCHAR MmpsMode; // MIMO power save more.
2316 HT_CAPABILITY_IE HTCapability;
2318 #ifdef DOT11N_DRAFT3
2319 UCHAR BSS2040CoexistenceMgmtSupport;
2320 #endif // DOT11N_DRAFT3 //
2321 #endif // DOT11_N_SUPPORT //
2323 BOOLEAN bAutoTxRateSwitch;
2326 struct _MAC_TABLE_ENTRY *pNext;
2327 USHORT TxSeq[NUM_OF_TID];
2328 USHORT NonQosDataSeq;
2330 RSSI_SAMPLE RssiSample;
2332 UINT32 TXMCSExpected[16];
2333 UINT32 TXMCSSuccessful[16];
2334 UINT32 TXMCSFailed[16];
2335 UINT32 TXMCSAutoFallBack[16][16];
2337 #ifdef CONFIG_STA_SUPPORT
2338 ULONG LastBeaconRxTime;
2339 #endif // CONFIG_STA_SUPPORT //
2340 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2342 typedef struct _MAC_TABLE {
2344 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2345 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2346 QUEUE_HEADER McastPsQueue;
2348 BOOLEAN fAnyStationInPsm;
2349 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2350 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2351 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2352 #ifdef DOT11_N_SUPPORT
2353 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2354 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2355 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2356 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2357 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2358 #endif // DOT11_N_SUPPORT //
2359 } MAC_TABLE, *PMAC_TABLE;
2361 #ifdef DOT11_N_SUPPORT
2362 #define IS_HT_STA(_pMacEntry) \
2363 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2365 #define IS_HT_RATE(_pMacEntry) \
2366 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2368 #define PEER_IS_HT_RATE(_pMacEntry) \
2369 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2370 #endif // DOT11_N_SUPPORT //
2372 typedef struct _WDS_ENTRY {
2374 UCHAR Addr[MAC_ADDR_LEN];
2375 ULONG NoDataIdleCount;
2376 struct _WDS_ENTRY *pNext;
2377 } WDS_ENTRY, *PWDS_ENTRY;
2379 typedef struct _WDS_TABLE_ENTRY {
2381 UCHAR WdsAddr[MAC_ADDR_LEN];
2382 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2383 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2384 UCHAR MaxSupportedRate;
2386 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2387 USHORT OneSecTxOkCount;
2388 USHORT OneSecTxRetryOkCount;
2389 USHORT OneSecTxFailCount;
2390 ULONG CurrTxRateStableTime; // # of second in current TX rate
2391 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2392 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2394 typedef struct _RT_802_11_WDS_ENTRY {
2398 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2399 UCHAR MacTabMatchWCID; // ASIC
2400 NDIS_802_11_WEP_STATUS WepStatus;
2403 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2404 RT_HT_PHY_INFO DesiredHtPhyInfo;
2405 BOOLEAN bAutoTxRateSwitch;
2406 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2407 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2409 typedef struct _WDS_TABLE {
2412 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2413 } WDS_TABLE, *PWDS_TABLE;
2415 typedef struct _APCLI_STRUCT {
2418 unsigned int mylinkid;
2420 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2421 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2422 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2424 CHAR Ssid[MAX_LEN_OF_SSID];
2427 CHAR CfgSsid[MAX_LEN_OF_SSID];
2428 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2429 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2431 ULONG ApCliRcvBeaconTime;
2433 ULONG CtrlCurrState;
2434 ULONG SyncCurrState;
2435 ULONG AuthCurrState;
2436 ULONG AssocCurrState;
2437 ULONG WpaPskCurrState;
2442 ULONG ClientStatusFlags;
2445 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2446 NDIS_802_11_WEP_STATUS WepStatus;
2448 // Add to support different cipher suite for WPA2/WPA mode
2449 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2450 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2451 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2452 USHORT RsnCapability;
2454 UCHAR PSK[100]; // reserve PSK key material
2456 UCHAR PMK[32]; // WPA PSK mode PMK
2457 //UCHAR PTK[64]; // WPA PSK mode PTK
2458 UCHAR GTK[32]; // GTK from authenticator
2460 //CIPHER_KEY PairwiseKey;
2461 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2464 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2465 //UCHAR PortSecured;
2467 // store RSN_IE built by driver
2468 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2471 // For WPA countermeasures
2472 ULONG LastMicErrorTime; // record last MIC error time
2473 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2474 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2476 // For WPA-PSK supplicant state
2477 //WPA_STATE WpaState; // Default is SS_NOTUSE
2478 //UCHAR ReplayCounter[8];
2479 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2480 UCHAR SNonce[32]; // SNonce for WPA-PSK
2481 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2483 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2484 RT_HT_PHY_INFO DesiredHtPhyInfo;
2485 BOOLEAN bAutoTxRateSwitch;
2486 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2487 } APCLI_STRUCT, *PAPCLI_STRUCT;
2489 // ----------- end of AP ----------------------------
2494 BOOLEAN bGreenField;
2499 typedef struct _INF_PCI_CONFIG
2501 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2504 typedef struct _INF_USB_CONFIG
2506 UINT BulkInEpAddr; // bulk-in endpoint address
2507 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2511 #ifdef IKANOS_VX_1X0
2512 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2514 struct IKANOS_TX_INFO
2516 struct net_device *netdev;
2517 IkanosWlanTxCbFuncP *fp;
2519 #endif // IKANOS_VX_1X0 //
2522 #define DIAGNOSE_TIME 10 // 10 sec
2523 typedef struct _RtmpDiagStrcut_
2524 { // Diagnosis Related element
2525 unsigned char inited;
2527 unsigned char ArrayStartIdx;
2528 unsigned char ArrayCurIdx;
2530 USHORT TxDataCnt[DIAGNOSE_TIME];
2531 USHORT TxFailCnt[DIAGNOSE_TIME];
2532 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2533 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2534 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2535 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2536 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2538 USHORT TxAggCnt[DIAGNOSE_TIME];
2539 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2540 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2541 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2542 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2543 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2546 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2547 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2548 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2549 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2551 #endif // DBG_DIAGNOSE //
2555 // The miniport adapter structure
2557 typedef struct _RTMP_ADAPTER
2559 PVOID OS_Cookie; // save specific structure relative to OS
2565 NDIS_SPIN_LOCK irq_lock;
2569 /*****************************************************************************************/
2570 /* USB related parameters */
2571 /*****************************************************************************************/
2572 struct usb_config_descriptor *config;
2573 UINT BulkInEpAddr; // bulk-in endpoint address
2574 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2577 USHORT BulkOutMaxPacketSize;
2578 USHORT BulkInMaxPacketSize;
2580 //======Control Flags
2581 LONG PendingIoCount;
2583 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2586 //======Timer Thread
2587 RT2870_TIMER_QUEUE TimerQ;
2588 NDIS_SPIN_LOCK TimerQLock;
2593 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2595 BOOLEAN TimerFunc_kill;
2599 //======Semaphores (event)
2600 struct semaphore mlme_semaphore; /* to sleep thread on */
2601 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2602 struct semaphore RTUSBTimer_semaphore;
2603 #ifdef INF_AMAZON_SE
2604 struct semaphore UsbVendorReq_semaphore;
2605 PVOID UsbVendorReqBuf;
2606 #endif // INF_AMAZON_SE //
2607 struct completion TimerQComplete;
2608 struct completion mlmeComplete;
2609 struct completion CmdQComplete;
2610 wait_queue_head_t *wait;
2614 /*****************************************************************************************/
2615 /* Both PCI/USB related parameters */
2616 /*****************************************************************************************/
2619 /*****************************************************************************************/
2620 /* Tx related parameters */
2621 /*****************************************************************************************/
2622 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2623 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2626 // Data related context and AC specified, 4 AC supported
2627 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2628 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2630 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2631 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2633 // 4 sets of Bulk Out index and pending flag
2634 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2636 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2637 UCHAR bulkResetPipeid;
2638 BOOLEAN MgmtBulkPending;
2639 ULONG bulkResetReq[6];
2642 // resource for software backlog queues
2643 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2644 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2646 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2647 RTMP_MGMT_RING MgmtRing;
2648 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2651 /*****************************************************************************************/
2652 /* Rx related parameters */
2653 /*****************************************************************************************/
2657 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2658 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2659 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2660 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2661 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2662 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2663 ULONG TransferBufferLength; // current length of the packet buffer
2664 ULONG ReadPosition; // current read position in a packet buffer
2668 /*****************************************************************************************/
2669 /* ASIC related parameters */
2670 /*****************************************************************************************/
2671 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2673 // ---------------------------
2675 // ---------------------------
2676 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2677 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2678 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2679 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2681 // ---------------------------
2683 // ---------------------------
2684 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2685 UCHAR BbpRssiToDbmDelta;
2686 BBP_R66_TUNING BbpTuning;
2688 // ----------------------------
2690 // ----------------------------
2691 UCHAR RfIcType; // RFIC_xxx
2692 ULONG RfFreqOffset; // Frequency offset for channel switching
2693 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2695 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2696 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2698 // This soft Rx Antenna Diversity mechanism is used only when user set
2699 // RX Antenna = DIVERSITY ON
2700 SOFT_RX_ANT_DIVERSITY RxAnt;
2703 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2704 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2705 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2706 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2708 UCHAR ChannelListNum; // number of channel in ChannelList[]
2711 ULONG Tx20MPwrCfgABand[5];
2712 ULONG Tx20MPwrCfgGBand[5];
2713 ULONG Tx40MPwrCfgABand[5];
2714 ULONG Tx40MPwrCfgGBand[5];
2716 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2717 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2718 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2719 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2720 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2721 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2723 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2724 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2725 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2726 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2727 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2728 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2730 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2731 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2732 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2733 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2736 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2737 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2738 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2739 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2742 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2743 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2744 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2745 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2747 // ----------------------------
2749 // ----------------------------
2750 MCU_LEDCS_STRUC LedCntl;
2751 USHORT Led1; // read from EEPROM 0x3c
2752 USHORT Led2; // EEPROM 0x3e
2753 USHORT Led3; // EEPROM 0x40
2754 UCHAR LedIndicatorStregth;
2755 UCHAR RssiSingalstrengthOffet;
2756 BOOLEAN bLedOnScanning;
2759 /*****************************************************************************************/
2760 /* 802.11 related parameters */
2761 /*****************************************************************************************/
2762 // outgoing BEACON frame buffer and corresponding TXD
2763 TXWI_STRUC BeaconTxWI;
2765 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2767 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2768 PSPOLL_FRAME PsPollFrame;
2769 HEADER_802_11 NullFrame;
2772 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2773 TX_CONTEXT NullContext;
2774 TX_CONTEXT PsPollContext;
2775 TX_CONTEXT RTSContext;
2780 //=========AP===========
2783 //=======STA===========
2784 #ifdef CONFIG_STA_SUPPORT
2785 /* Modified by Wu Xi-Kun 4/21/2006 */
2786 // -----------------------------------------------
2787 // STA specific configuration & operation status
2788 // used only when pAd->OpMode == OPMODE_STA
2789 // -----------------------------------------------
2790 STA_ADMIN_CONFIG StaCfg; // user desired settings
2791 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2792 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2793 NDIS_MEDIA_STATE PreMediaState;
2794 #endif // CONFIG_STA_SUPPORT //
2796 //=======Common===========
2797 // OP mode: either AP or STA
2798 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2800 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2803 // configuration: read from Registry & E2PROM
2804 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2805 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2806 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2808 // ------------------------------------------------------
2809 // common configuration to both OPMODE_STA and OPMODE_AP
2810 // ------------------------------------------------------
2811 COMMON_CONFIG CommonCfg;
2814 // AP needs those vaiables for site survey feature.
2815 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2816 BSS_TABLE ScanTab; // store the latest SCAN result
2818 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2819 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2820 NDIS_SPIN_LOCK MacTabLock;
2822 #ifdef DOT11_N_SUPPORT
2824 #endif // DOT11_N_SUPPORT //
2825 NDIS_SPIN_LOCK BATabLock;
2826 RALINK_TIMER_STRUCT RECBATimer;
2828 // encryption/decryption KEY tables
2829 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2831 // RX re-assembly buffer for fragmentation
2832 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2835 COUNTER_802_3 Counters8023; // 802.3 counters
2836 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2837 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2838 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2839 PRIVATE_STRUC PrivateInfo; // Private information & counters
2841 // flags, see fRTMP_ADAPTER_xxx flags
2842 ULONG Flags; // Represent current device status
2844 // current TX sequence #
2847 // Control disconnect / connect event generation
2848 //+++Didn't used anymore
2853 //+++Used only for Station
2854 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2857 ULONG ExtraInfo; // Extra information for displaying status
2858 ULONG SystemErrorBitmap; // b0: E2PROM version error
2860 //+++Didn't used anymore
2861 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2864 // ---------------------------
2866 // ---------------------------
2867 RT_802_11_EVENT_TABLE EventTab;
2872 /*****************************************************************************************/
2873 /* Statistic related parameters */
2874 /*****************************************************************************************/
2876 ULONG BulkOutDataOneSecCount;
2877 ULONG BulkInDataOneSecCount;
2878 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2879 ULONG watchDogRxCnt;
2880 ULONG watchDogRxOverFlowCnt;
2881 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2884 BOOLEAN bUpdateBcnCntDone;
2885 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2886 // ----------------------------
2888 // ----------------------------
2889 //ULONG DebugSetting[4];
2890 BOOLEAN bBanAllBaSetup;
2891 BOOLEAN bPromiscuous;
2893 // ----------------------------
2894 // rt2860c emulation-use Parameters
2895 // ----------------------------
2898 ULONG cfendaccu[30];
2899 ULONG bacontent[16];
2900 ULONG rxint[RX_RING_SIZE+1];
2903 BOOLEAN bForcePrintTX;
2904 BOOLEAN bForcePrintRX;
2905 BOOLEAN bDisablescanning; //defined in RT2870 USB
2906 BOOLEAN bStaFifoTest;
2907 BOOLEAN bProtectionTest;
2909 BOOLEAN bGenOneHCCA;
2910 BOOLEAN bBroadComHT;
2911 //+++Following add from RT2870 USB.
2913 ULONG BulkOutComplete;
2914 ULONG BulkOutCompleteOther;
2915 ULONG BulkOutCompleteCancel; // seems not use now?
2917 ULONG BulkInComplete;
2918 ULONG BulkInCompleteFail;
2921 struct wificonf WIFItestbed;
2923 #ifdef DOT11_N_SUPPORT
2924 struct reordering_mpdu_pool mpdu_blk_pool;
2925 #endif // DOT11_N_SUPPORT //
2927 ULONG OneSecondnonBEpackets; // record non BE packets per second
2929 #if WIRELESS_EXT >= 12
2930 struct iw_statistics iw_stats;
2933 struct net_device_stats stats;
2935 #ifdef MULTIPLE_CARD_SUPPORT
2937 UCHAR MC_FileName[256];
2938 #endif // MULTIPLE_CARD_SUPPORT //
2940 ULONG TbttTickCount;
2941 #ifdef PCI_MSI_SUPPORT
2943 #endif // PCI_MSI_SUPPORT //
2948 #define TIME_BASE (1000000/OS_HZ)
2949 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2950 UCHAR flg_be_adjust;
2951 ULONG be_adjust_last_time;
2954 #ifdef IKANOS_VX_1X0
2955 struct IKANOS_TX_INFO IkanosTxInfo;
2956 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2957 #endif // IKANOS_VX_1X0 //
2961 RtmpDiagStruct DiagStruct;
2962 #endif // DBG_DIAGNOSE //
2965 UINT8 PM_FlgSuspend;
2966 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2969 // Cisco IAPP format
2971 typedef struct _CISCO_IAPP_CONTENT_
2973 USHORT Length; //IAPP Length
2974 UCHAR MessageType; //IAPP type
2975 UCHAR FunctionCode; //IAPP function type
2976 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2977 UCHAR SourceMAC[MAC_ADDR_LEN];
2978 USHORT Tag; //Tag(element IE) - Adjacent AP report
2979 USHORT TagLength; //Length of element not including 4 byte header
2980 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2981 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2984 UCHAR Ssid[MAX_LEN_OF_SSID];
2985 USHORT Seconds; //Seconds that the client has been disassociated.
2986 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2988 #define DELAYINTMASK 0x0003fffb
2989 #define INTMASK 0x0003fffb
2990 #define IndMask 0x0003fffc
2991 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2992 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2993 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2994 #define TxCoherent 0x00020000 // tx coherent
2995 #define RxCoherent 0x00010000 // rx coherent
2996 #define McuCommand 0x00000200 // mcu
2997 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2998 #define TBTTInt 0x00000800 // TBTT interrupt
2999 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3000 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3001 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3004 typedef struct _RX_BLK_
3006 // RXD_STRUC RxD; // sample
3007 RT28XX_RXD_STRUC RxD;
3009 PHEADER_802_11 pHeader;
3010 PNDIS_PACKET pRxPacket;
3014 UCHAR UserPriority; // for calculate TKIP MIC using
3018 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3019 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3020 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3023 #define fRX_WDS 0x0001
3024 #define fRX_AMSDU 0x0002
3025 #define fRX_ARALINK 0x0004
3026 #define fRX_HTC 0x0008
3027 #define fRX_PAD 0x0010
3028 #define fRX_AMPDU 0x0020
3029 #define fRX_QOS 0x0040
3030 #define fRX_INFRA 0x0080
3031 #define fRX_EAP 0x0100
3032 #define fRX_MESH 0x0200
3033 #define fRX_APCLI 0x0400
3034 #define fRX_DLS 0x0800
3035 #define fRX_WPI 0x1000
3037 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3038 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3039 #define LENGTH_ARALINK_HEADER_FIELD 2
3041 #define TX_UNKOWN_FRAME 0x00
3042 #define TX_MCAST_FRAME 0x01
3043 #define TX_LEGACY_FRAME 0x02
3044 #define TX_AMPDU_FRAME 0x04
3045 #define TX_AMSDU_FRAME 0x08
3046 #define TX_RALINK_FRAME 0x10
3047 #define TX_FRAG_FRAME 0x20
3050 // Currently the sizeof(TX_BLK) is 148 bytes.
3051 typedef struct _TX_BLK_
3054 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3055 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3056 USHORT TotalFragNum; // Total frame fragments required in one batch
3057 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3059 QUEUE_HEADER TxPacketList;
3060 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3061 HTTRANSMIT_SETTING *pTransmit;
3063 // Following structure used for the characteristics of a specific packet.
3064 PNDIS_PACKET pPacket;
3065 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3066 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3067 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3068 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3069 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3070 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3071 UCHAR HdrPadLen; // recording Header Padding Length;
3072 UCHAR apidx; // The interface associated to this packet
3073 UCHAR Wcid; // The MAC entry associated to this packet
3074 UCHAR UserPriority; // priority class of packet
3075 UCHAR FrameGap; // what kind of IFS this packet use
3076 UCHAR MpduReqNum; // number of fragments of this frame
3077 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3078 UCHAR CipherAlg; // cipher alogrithm
3083 USHORT Flags; //See following definitions for detail.
3085 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3086 ULONG Priv; // Hardware specific value saved in here.
3090 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3091 #define fTX_bAckRequired 0x0002 // the packet need ack response
3092 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3093 #define fTX_bHTRate 0x0008 // allow to use HT rate
3094 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3095 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3096 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3097 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3098 #define fTX_bWMM 0x0080 // QOS Data
3100 #define fTX_bClearEAPFrame 0x0100
3103 #ifdef CONFIG_STA_SUPPORT
3104 #endif // CONFIG_STA_SUPPORT //
3108 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3111 (_pTxBlk->Flags |= _flag) \
3113 (_pTxBlk->Flags &= ~(_flag)) \
3116 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3117 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3118 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3124 //------------------------------------------------------------------------------------------
3128 #ifdef RT_BIG_ENDIAN
3129 static inline VOID WriteBackToDescriptor(
3132 IN BOOLEAN DoEncrypt,
3133 IN ULONG DescriptorType)
3137 p1 = ((UINT32 *)Dest);
3138 p2 = ((UINT32 *)Src);
3143 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3147 ========================================================================
3149 Routine Description:
3150 Endian conversion of Tx/Rx descriptor .
3153 pAd Pointer to our adapter
3154 pData Pointer to Tx/Rx descriptor
3155 DescriptorType Direction of the frame
3161 Call this function when read or update descriptor
3162 ========================================================================
3164 static inline VOID RTMPWIEndianChange(
3166 IN ULONG DescriptorType)
3171 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3173 if(DescriptorType == TYPE_TXWI)
3175 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3176 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3180 for(i=0; i < size/4 ; i++)
3181 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3186 ========================================================================
3188 Routine Description:
3189 Endian conversion of Tx/Rx descriptor .
3192 pAd Pointer to our adapter
3193 pData Pointer to Tx/Rx descriptor
3194 DescriptorType Direction of the frame
3200 Call this function when read or update descriptor
3201 ========================================================================
3205 static inline VOID RTMPDescriptorEndianChange(
3207 IN ULONG DescriptorType)
3209 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3213 ========================================================================
3215 Routine Description:
3216 Endian conversion of all kinds of 802.11 frames .
3219 pAd Pointer to our adapter
3220 pData Pointer to the 802.11 frame structure
3221 Dir Direction of the frame
3222 FromRxDoneInt Caller is from RxDone interrupt
3228 Call this function when read or update buffer data
3229 ========================================================================
3231 static inline VOID RTMPFrameEndianChange(
3232 IN PRTMP_ADAPTER pAd,
3235 IN BOOLEAN FromRxDoneInt)
3237 PHEADER_802_11 pFrame;
3240 // swab 16 bit fields - Frame Control field
3243 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3246 pFrame = (PHEADER_802_11) pData;
3247 pMacHdr = (PUCHAR) pFrame;
3249 // swab 16 bit fields - Duration/ID field
3250 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3252 // swab 16 bit fields - Sequence Control field
3253 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3255 if(pFrame->FC.Type == BTYPE_MGMT)
3257 switch(pFrame->FC.SubType)
3259 case SUBTYPE_ASSOC_REQ:
3260 case SUBTYPE_REASSOC_REQ:
3261 // swab 16 bit fields - CapabilityInfo field
3262 pMacHdr += sizeof(HEADER_802_11);
3263 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3265 // swab 16 bit fields - Listen Interval field
3267 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3270 case SUBTYPE_ASSOC_RSP:
3271 case SUBTYPE_REASSOC_RSP:
3272 // swab 16 bit fields - CapabilityInfo field
3273 pMacHdr += sizeof(HEADER_802_11);
3274 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3276 // swab 16 bit fields - Status Code field
3278 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3280 // swab 16 bit fields - AID field
3282 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3286 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3287 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3288 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3292 // swab 16 bit fields - Auth Alg No. field
3293 pMacHdr += sizeof(HEADER_802_11);
3294 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3296 // swab 16 bit fields - Auth Seq No. field
3298 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3300 // swab 16 bit fields - Status Code field
3302 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3306 case SUBTYPE_BEACON:
3307 case SUBTYPE_PROBE_RSP:
3308 // swab 16 bit fields - BeaconInterval field
3309 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3310 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3312 // swab 16 bit fields - CapabilityInfo field
3313 pMacHdr += sizeof(USHORT);
3314 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3317 case SUBTYPE_DEAUTH:
3318 case SUBTYPE_DISASSOC:
3319 // swab 16 bit fields - Reason code field
3320 pMacHdr += sizeof(HEADER_802_11);
3321 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3325 else if( pFrame->FC.Type == BTYPE_DATA )
3328 else if(pFrame->FC.Type == BTYPE_CNTL)
3330 switch(pFrame->FC.SubType)
3332 case SUBTYPE_BLOCK_ACK_REQ:
3334 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3335 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3336 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3339 case SUBTYPE_BLOCK_ACK:
3340 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3341 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3345 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3346 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3352 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3355 // swab 16 bit fields - Frame Control
3356 if(Dir == DIR_WRITE)
3358 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3361 #endif // RT_BIG_ENDIAN //
3364 static inline VOID ConvertMulticastIP2MAC(
3366 IN PUCHAR *ppMacAddr,
3367 IN UINT16 ProtoType)
3369 if (pIpAddr == NULL)
3372 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3378 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3379 *(*ppMacAddr) = 0x33;
3380 *(*ppMacAddr + 1) = 0x33;
3381 *(*ppMacAddr + 2) = pIpAddr[12];
3382 *(*ppMacAddr + 3) = pIpAddr[13];
3383 *(*ppMacAddr + 4) = pIpAddr[14];
3384 *(*ppMacAddr + 5) = pIpAddr[15];
3389 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3390 *(*ppMacAddr) = 0x01;
3391 *(*ppMacAddr + 1) = 0x00;
3392 *(*ppMacAddr + 2) = 0x5e;
3393 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3394 *(*ppMacAddr + 4) = pIpAddr[2];
3395 *(*ppMacAddr + 5) = pIpAddr[3];
3402 BOOLEAN RTMPCheckForHang(
3403 IN NDIS_HANDLE MiniportAdapterContext
3407 IN NDIS_HANDLE MiniportAdapterContext
3411 // Private routines in rtmp_init.c
3413 NDIS_STATUS RTMPAllocAdapterBlock(
3415 OUT PRTMP_ADAPTER *ppAdapter
3418 NDIS_STATUS RTMPAllocTxRxRingMemory(
3419 IN PRTMP_ADAPTER pAd
3422 NDIS_STATUS RTMPFindAdapter(
3423 IN PRTMP_ADAPTER pAd,
3424 IN NDIS_HANDLE WrapperConfigurationContext
3427 NDIS_STATUS RTMPReadParametersHook(
3428 IN PRTMP_ADAPTER pAd
3431 VOID RTMPFreeAdapter(
3432 IN PRTMP_ADAPTER pAd
3435 NDIS_STATUS NICReadRegParameters(
3436 IN PRTMP_ADAPTER pAd,
3437 IN NDIS_HANDLE WrapperConfigurationContext
3441 VOID NICInitRT30xxRFRegisters(
3442 IN PRTMP_ADAPTER pAd);
3445 VOID NICReadEEPROMParameters(
3446 IN PRTMP_ADAPTER pAd,
3447 IN PUCHAR mac_addr);
3449 VOID NICInitAsicFromEEPROM(
3450 IN PRTMP_ADAPTER pAd);
3452 VOID NICInitTxRxRingAndBacklogQueue(
3453 IN PRTMP_ADAPTER pAd);
3455 NDIS_STATUS NICInitializeAdapter(
3456 IN PRTMP_ADAPTER pAd,
3457 IN BOOLEAN bHardReset);
3459 NDIS_STATUS NICInitializeAsic(
3460 IN PRTMP_ADAPTER pAd,
3461 IN BOOLEAN bHardReset);
3464 IN PRTMP_ADAPTER pAd);
3466 VOID RTMPRingCleanUp(
3467 IN PRTMP_ADAPTER pAd,
3471 IN PRTMP_ADAPTER pAd);
3473 NDIS_STATUS DbgSendPacket(
3474 IN PRTMP_ADAPTER pAd,
3475 IN PNDIS_PACKET pPacket);
3478 IN PRTMP_ADAPTER pAd);
3480 VOID NICResetFromError(
3481 IN PRTMP_ADAPTER pAd);
3483 VOID NICEraseFirmware(
3484 IN PRTMP_ADAPTER pAd);
3486 NDIS_STATUS NICLoadFirmware(
3487 IN PRTMP_ADAPTER pAd);
3489 NDIS_STATUS NICLoadRateSwitchingParams(
3490 IN PRTMP_ADAPTER pAd);
3492 BOOLEAN NICCheckForHang(
3493 IN PRTMP_ADAPTER pAd);
3495 VOID NICUpdateFifoStaCounters(
3496 IN PRTMP_ADAPTER pAd);
3498 VOID NICUpdateRawCounters(
3499 IN PRTMP_ADAPTER pAd);
3502 ULONG RTMPEqualMemory(
3508 ULONG RTMPNotAllZero(
3512 VOID RTMPZeroMemory(
3516 ULONG RTMPCompareMemory(
3521 VOID RTMPMoveMemory(
3534 VOID RTMPPatchMacBbpBug(
3535 IN PRTMP_ADAPTER pAd);
3537 VOID RTMPPatchCardBus(
3538 IN PRTMP_ADAPTER pAdapter);
3540 VOID RTMPPatchRalinkCardBus(
3541 IN PRTMP_ADAPTER pAdapter,
3544 ULONG RTMPReadCBConfig(
3550 VOID RTMPWriteCBConfig(
3558 IN PRTMP_ADAPTER pAd,
3559 IN PRALINK_TIMER_STRUCT pTimer,
3560 IN PVOID pTimerFunc,
3565 IN PRALINK_TIMER_STRUCT pTimer,
3570 IN PRALINK_TIMER_STRUCT pTimer,
3573 VOID RTMPCancelTimer(
3574 IN PRALINK_TIMER_STRUCT pTimer,
3575 OUT BOOLEAN *pCancelled);
3578 IN PRTMP_ADAPTER pAd,
3581 VOID RTMPSetSignalLED(
3582 IN PRTMP_ADAPTER pAd,
3583 IN NDIS_802_11_RSSI Dbm);
3585 VOID RTMPEnableRxTx(
3586 IN PRTMP_ADAPTER pAd);
3589 // prototype in action.c
3591 VOID ActionStateMachineInit(
3592 IN PRTMP_ADAPTER pAd,
3593 IN STATE_MACHINE *S,
3594 OUT STATE_MACHINE_FUNC Trans[]);
3596 VOID MlmeADDBAAction(
3597 IN PRTMP_ADAPTER pAd,
3598 IN MLME_QUEUE_ELEM *Elem);
3600 VOID MlmeDELBAAction(
3601 IN PRTMP_ADAPTER pAd,
3602 IN MLME_QUEUE_ELEM *Elem);
3605 IN PRTMP_ADAPTER pAd,
3606 IN MLME_QUEUE_ELEM *Elem);
3608 VOID MlmeInvalidAction(
3609 IN PRTMP_ADAPTER pAd,
3610 IN MLME_QUEUE_ELEM *Elem);
3613 IN PRTMP_ADAPTER pAd,
3614 IN MLME_QUEUE_ELEM *Elem);
3616 #ifdef DOT11_N_SUPPORT
3617 VOID PeerAddBAReqAction(
3618 IN PRTMP_ADAPTER pAd,
3619 IN MLME_QUEUE_ELEM *Elem);
3621 VOID PeerAddBARspAction(
3622 IN PRTMP_ADAPTER pAd,
3623 IN MLME_QUEUE_ELEM *Elem);
3625 VOID PeerDelBAAction(
3626 IN PRTMP_ADAPTER pAd,
3627 IN MLME_QUEUE_ELEM *Elem);
3630 IN PRTMP_ADAPTER pAd,
3631 IN MLME_QUEUE_ELEM *Elem);
3632 #endif // DOT11_N_SUPPORT //
3634 VOID SendPSMPAction(
3635 IN PRTMP_ADAPTER pAd,
3640 #ifdef DOT11N_DRAFT3
3641 VOID SendBSS2040CoexistMgmtAction(
3642 IN PRTMP_ADAPTER pAd,
3647 VOID SendNotifyBWActionFrame(
3648 IN PRTMP_ADAPTER pAd,
3652 BOOLEAN ChannelSwitchSanityCheck(
3653 IN PRTMP_ADAPTER pAd,
3655 IN UCHAR NewChannel,
3656 IN UCHAR Secondary);
3658 VOID ChannelSwitchAction(
3659 IN PRTMP_ADAPTER pAd,
3662 IN UCHAR Secondary);
3664 ULONG BuildIntolerantChannelRep(
3665 IN PRTMP_ADAPTER pAd,
3668 VOID Update2040CoexistFrameAndNotify(
3669 IN PRTMP_ADAPTER pAd,
3671 IN BOOLEAN bAddIntolerantCha);
3673 VOID Send2040CoexistAction(
3674 IN PRTMP_ADAPTER pAd,
3676 IN BOOLEAN bAddIntolerantCha);
3677 #endif // DOT11N_DRAFT3 //
3680 IN PRTMP_ADAPTER pAd,
3681 IN MLME_QUEUE_ELEM *Elem);
3683 VOID PeerPublicAction(
3684 IN PRTMP_ADAPTER pAd,
3685 IN MLME_QUEUE_ELEM *Elem);
3687 #ifdef CONFIG_STA_SUPPORT
3688 VOID StaPublicAction(
3689 IN PRTMP_ADAPTER pAd,
3690 IN UCHAR Bss2040Coexist);
3691 #endif // CONFIG_STA_SUPPORT //
3694 VOID PeerBSSTranAction(
3695 IN PRTMP_ADAPTER pAd,
3696 IN MLME_QUEUE_ELEM *Elem);
3698 #ifdef DOT11_N_SUPPORT
3700 IN PRTMP_ADAPTER pAd,
3701 IN MLME_QUEUE_ELEM *Elem);
3702 #endif // DOT11_N_SUPPORT //
3705 IN PRTMP_ADAPTER pAd,
3706 IN MLME_QUEUE_ELEM *Elem);
3708 #ifdef QOS_DLS_SUPPORT
3710 IN PRTMP_ADAPTER pAd,
3711 IN MLME_QUEUE_ELEM *Elem);
3712 #endif // QOS_DLS_SUPPORT //
3714 #ifdef CONFIG_STA_SUPPORT
3715 #ifdef QOS_DLS_SUPPORT
3717 IN PRTMP_ADAPTER pAd,
3718 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3719 IN PRT_802_11_DLS pDls,
3721 #endif // QOS_DLS_SUPPORT //
3722 #endif // CONFIG_STA_SUPPORT //
3724 #ifdef DOT11_N_SUPPORT
3725 VOID RECBATimerTimeout(
3726 IN PVOID SystemSpecific1,
3727 IN PVOID FunctionContext,
3728 IN PVOID SystemSpecific2,
3729 IN PVOID SystemSpecific3);
3731 VOID ORIBATimerTimeout(
3732 IN PRTMP_ADAPTER pAd);
3734 VOID SendRefreshBAR(
3735 IN PRTMP_ADAPTER pAd,
3736 IN MAC_TABLE_ENTRY *pEntry);
3737 #endif // DOT11_N_SUPPORT //
3740 IN PRTMP_ADAPTER pAd,
3741 IN OUT PHEADER_802_11 pHdr80211,
3747 IN PRTMP_ADAPTER pAd,
3748 IN OUT PFRAME_BAR pCntlBar,
3752 VOID InsertActField(
3753 IN PRTMP_ADAPTER pAd,
3754 OUT PUCHAR pFrameBuf,
3755 OUT PULONG pFrameLen,
3759 BOOLEAN QosBADataParse(
3760 IN PRTMP_ADAPTER pAd,
3762 IN PUCHAR p8023Header,
3766 IN UCHAR DataOffset,
3768 IN UINT CurRxIndex);
3770 #ifdef DOT11_N_SUPPORT
3771 BOOLEAN CntlEnqueueForRecv(
3772 IN PRTMP_ADAPTER pAd,
3775 IN PFRAME_BA_REQ pMsg);
3777 VOID BaAutoManSwitch(
3778 IN PRTMP_ADAPTER pAd);
3779 #endif // DOT11_N_SUPPORT //
3782 IN PRTMP_ADAPTER pAd,
3783 IN UCHAR BatRecIdx);
3786 // Private routines in rtmp_data.c
3788 BOOLEAN RTMPHandleRxDoneInterrupt(
3789 IN PRTMP_ADAPTER pAd);
3791 VOID RTMPHandleTxDoneInterrupt(
3792 IN PRTMP_ADAPTER pAd);
3794 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3795 IN PRTMP_ADAPTER pAd,
3796 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3798 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3799 IN PRTMP_ADAPTER pAd);
3801 VOID RTMPHandleTBTTInterrupt(
3802 IN PRTMP_ADAPTER pAd);
3804 VOID RTMPHandlePreTBTTInterrupt(
3805 IN PRTMP_ADAPTER pAd);
3807 void RTMPHandleTwakeupInterrupt(
3808 IN PRTMP_ADAPTER pAd);
3810 VOID RTMPHandleRxCoherentInterrupt(
3811 IN PRTMP_ADAPTER pAd);
3813 BOOLEAN TxFrameIsAggregatible(
3814 IN PRTMP_ADAPTER pAd,
3815 IN PUCHAR pPrevAddr1,
3816 IN PUCHAR p8023hdr);
3818 BOOLEAN PeerIsAggreOn(
3819 IN PRTMP_ADAPTER pAd,
3821 IN PMAC_TABLE_ENTRY pMacEntry);
3823 #if 0 // It's not be used
3824 HTTRANSMIT_SETTING *GetTxMode(
3825 IN PRTMP_ADAPTER pAd,
3829 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3830 IN PNDIS_BUFFER pFirstBuffer,
3831 IN UCHAR DesiredOffset,
3835 NDIS_STATUS STASendPacket(
3836 IN PRTMP_ADAPTER pAd,
3837 IN PNDIS_PACKET pPacket);
3839 VOID STASendPackets(
3840 IN NDIS_HANDLE MiniportAdapterContext,
3841 IN PPNDIS_PACKET ppPacketArray,
3842 IN UINT NumberOfPackets);
3844 VOID RTMPDeQueuePacket(
3845 IN PRTMP_ADAPTER pAd,
3846 IN BOOLEAN bIntContext,
3848 IN UCHAR Max_Tx_Packets);
3850 NDIS_STATUS RTMPHardTransmit(
3851 IN PRTMP_ADAPTER pAd,
3852 IN PNDIS_PACKET pPacket,
3854 OUT PULONG pFreeTXDLeft);
3856 NDIS_STATUS STAHardTransmit(
3857 IN PRTMP_ADAPTER pAd,
3861 VOID STARxEAPOLFrameIndicate(
3862 IN PRTMP_ADAPTER pAd,
3863 IN MAC_TABLE_ENTRY *pEntry,
3865 IN UCHAR FromWhichBSSID);
3867 NDIS_STATUS RTMPFreeTXDRequest(
3868 IN PRTMP_ADAPTER pAd,
3870 IN UCHAR NumberRequired,
3871 IN PUCHAR FreeNumberIs);
3873 NDIS_STATUS MlmeHardTransmit(
3874 IN PRTMP_ADAPTER pAd,
3876 IN PNDIS_PACKET pPacket);
3878 NDIS_STATUS MlmeHardTransmitMgmtRing(
3879 IN PRTMP_ADAPTER pAd,
3881 IN PNDIS_PACKET pPacket);
3883 NDIS_STATUS MlmeHardTransmitTxRing(
3884 IN PRTMP_ADAPTER pAd,
3886 IN PNDIS_PACKET pPacket);
3888 USHORT RTMPCalcDuration(
3889 IN PRTMP_ADAPTER pAd,
3894 IN PRTMP_ADAPTER pAd,
3895 IN PTXWI_STRUC pTxWI,
3898 IN BOOLEAN InsTimestamp,
3901 IN BOOLEAN NSeq, // HW new a sequence.
3910 IN HTTRANSMIT_SETTING *pTransmit);
3913 VOID RTMPWriteTxWI_Data(
3914 IN PRTMP_ADAPTER pAd,
3915 IN OUT PTXWI_STRUC pTxWI,
3919 VOID RTMPWriteTxWI_Cache(
3920 IN PRTMP_ADAPTER pAd,
3921 IN OUT PTXWI_STRUC pTxWI,
3924 VOID RTMPWriteTxDescriptor(
3925 IN PRTMP_ADAPTER pAd,
3930 VOID RTMPSuspendMsduTransmission(
3931 IN PRTMP_ADAPTER pAd);
3933 VOID RTMPResumeMsduTransmission(
3934 IN PRTMP_ADAPTER pAd);
3936 NDIS_STATUS MiniportMMRequest(
3937 IN PRTMP_ADAPTER pAd,
3942 NDIS_STATUS MiniportDataMMRequest(
3943 IN PRTMP_ADAPTER pAd,
3948 VOID RTMPSendNullFrame(
3949 IN PRTMP_ADAPTER pAd,
3951 IN BOOLEAN bQosNull);
3953 VOID RTMPSendDisassociationFrame(
3954 IN PRTMP_ADAPTER pAd);
3956 VOID RTMPSendRTSFrame(
3957 IN PRTMP_ADAPTER pAd,
3959 IN unsigned int NextMpduSize,
3962 IN USHORT AckDuration,
3967 NDIS_STATUS RTMPApplyPacketFilter(
3968 IN PRTMP_ADAPTER pAd,
3969 IN PRT28XX_RXD_STRUC pRxD,
3970 IN PHEADER_802_11 pHeader);
3972 PQUEUE_HEADER RTMPCheckTxSwQueue(
3973 IN PRTMP_ADAPTER pAd,
3976 #ifdef CONFIG_STA_SUPPORT
3977 VOID RTMPReportMicError(
3978 IN PRTMP_ADAPTER pAd,
3979 IN PCIPHER_KEY pWpaKey);
3981 VOID WpaMicFailureReportFrame(
3982 IN PRTMP_ADAPTER pAd,
3983 IN MLME_QUEUE_ELEM *Elem);
3985 VOID WpaDisassocApAndBlockAssoc(
3986 IN PVOID SystemSpecific1,
3987 IN PVOID FunctionContext,
3988 IN PVOID SystemSpecific2,
3989 IN PVOID SystemSpecific3);
3990 #endif // CONFIG_STA_SUPPORT //
3992 NDIS_STATUS RTMPCloneNdisPacket(
3993 IN PRTMP_ADAPTER pAd,
3994 IN BOOLEAN pInsAMSDUHdr,
3995 IN PNDIS_PACKET pInPacket,
3996 OUT PNDIS_PACKET *ppOutPacket);
3998 NDIS_STATUS RTMPAllocateNdisPacket(
3999 IN PRTMP_ADAPTER pAd,
4000 IN PNDIS_PACKET *pPacket,
4006 VOID RTMPFreeNdisPacket(
4007 IN PRTMP_ADAPTER pAd,
4008 IN PNDIS_PACKET pPacket);
4010 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4011 IN PRTMP_ADAPTER pAd,
4014 BOOLEAN RTMPCheckDHCPFrame(
4015 IN PRTMP_ADAPTER pAd,
4016 IN PNDIS_PACKET pPacket);
4019 BOOLEAN RTMPCheckEtherType(
4020 IN PRTMP_ADAPTER pAd,
4021 IN PNDIS_PACKET pPacket);
4024 VOID RTMPCckBbpTuning(
4025 IN PRTMP_ADAPTER pAd,
4029 // Private routines in rtmp_wep.c
4031 VOID RTMPInitWepEngine(
4032 IN PRTMP_ADAPTER pAd,
4038 VOID RTMPEncryptData(
4039 IN PRTMP_ADAPTER pAd,
4044 BOOLEAN RTMPDecryptData(
4045 IN PRTMP_ADAPTER pAdapter,
4050 BOOLEAN RTMPSoftDecryptWEP(
4051 IN PRTMP_ADAPTER pAd,
4053 IN ULONG DataByteCnt,
4054 IN PCIPHER_KEY pGroupKey);
4057 IN PRTMP_ADAPTER pAd,
4061 IN PARCFOURCONTEXT Ctx,
4066 IN PARCFOURCONTEXT Ctx);
4068 VOID ARCFOUR_DECRYPT(
4069 IN PARCFOURCONTEXT Ctx,
4074 VOID ARCFOUR_ENCRYPT(
4075 IN PARCFOURCONTEXT Ctx,
4080 VOID WPAARCFOUR_ENCRYPT(
4081 IN PARCFOURCONTEXT Ctx,
4086 UINT RTMP_CALC_FCS32(
4095 // Asic/RF/BBP related functions
4097 VOID AsicAdjustTxPower(
4098 IN PRTMP_ADAPTER pAd);
4100 VOID AsicUpdateProtect(
4101 IN PRTMP_ADAPTER pAd,
4102 IN USHORT OperaionMode,
4104 IN BOOLEAN bDisableBGProtect,
4105 IN BOOLEAN bNonGFExist);
4107 VOID AsicSwitchChannel(
4108 IN PRTMP_ADAPTER pAd,
4112 VOID AsicLockChannel(
4113 IN PRTMP_ADAPTER pAd,
4116 VOID AsicAntennaSelect(
4117 IN PRTMP_ADAPTER pAd,
4120 VOID AsicAntennaSetting(
4121 IN PRTMP_ADAPTER pAd,
4122 IN ABGBAND_STATE BandState);
4124 VOID AsicRfTuningExec(
4125 IN PVOID SystemSpecific1,
4126 IN PVOID FunctionContext,
4127 IN PVOID SystemSpecific2,
4128 IN PVOID SystemSpecific3);
4130 #ifdef CONFIG_STA_SUPPORT
4131 VOID AsicSleepThenAutoWakeup(
4132 IN PRTMP_ADAPTER pAd,
4133 IN USHORT TbttNumToNextWakeUp);
4135 VOID AsicForceSleep(
4136 IN PRTMP_ADAPTER pAd);
4138 VOID AsicForceWakeup(
4139 IN PRTMP_ADAPTER pAd,
4140 IN BOOLEAN bFromTx);
4141 #endif // CONFIG_STA_SUPPORT //
4144 IN PRTMP_ADAPTER pAd,
4147 VOID AsicSetMcastWC(
4148 IN PRTMP_ADAPTER pAd);
4150 #if 0 // removed by AlbertY
4151 VOID AsicSetBssidWC(
4152 IN PRTMP_ADAPTER pAd,
4156 VOID AsicDelWcidTab(
4157 IN PRTMP_ADAPTER pAd,
4161 IN PRTMP_ADAPTER pAd);
4163 VOID AsicDisableRDG(
4164 IN PRTMP_ADAPTER pAd);
4166 VOID AsicDisableSync(
4167 IN PRTMP_ADAPTER pAd);
4169 VOID AsicEnableBssSync(
4170 IN PRTMP_ADAPTER pAd);
4172 VOID AsicEnableIbssSync(
4173 IN PRTMP_ADAPTER pAd);
4175 VOID AsicSetEdcaParm(
4176 IN PRTMP_ADAPTER pAd,
4177 IN PEDCA_PARM pEdcaParm);
4179 VOID AsicSetSlotTime(
4180 IN PRTMP_ADAPTER pAd,
4181 IN BOOLEAN bUseShortSlotTime);
4184 VOID AsicAddWcidCipherEntry(
4185 IN PRTMP_ADAPTER pAd,
4191 IN CIPHER_KEY *pCipherKey);
4194 VOID AsicAddSharedKeyEntry(
4195 IN PRTMP_ADAPTER pAd,
4203 VOID AsicRemoveSharedKeyEntry(
4204 IN PRTMP_ADAPTER pAd,
4208 VOID AsicUpdateWCIDAttribute(
4209 IN PRTMP_ADAPTER pAd,
4213 IN BOOLEAN bUsePairewiseKeyTable);
4215 VOID AsicUpdateWCIDIVEIV(
4216 IN PRTMP_ADAPTER pAd,
4221 VOID AsicUpdateRxWCIDTable(
4222 IN PRTMP_ADAPTER pAd,
4226 VOID AsicAddKeyEntry(
4227 IN PRTMP_ADAPTER pAd,
4231 IN PCIPHER_KEY pCipherKey,
4232 IN BOOLEAN bUsePairewiseKeyTable,
4235 VOID AsicAddPairwiseKeyEntry(
4236 IN PRTMP_ADAPTER pAd,
4239 IN CIPHER_KEY *pCipherKey);
4241 VOID AsicRemovePairwiseKeyEntry(
4242 IN PRTMP_ADAPTER pAd,
4246 BOOLEAN AsicSendCommandToMcu(
4247 IN PRTMP_ADAPTER pAd,
4254 VOID MacAddrRandomBssid(
4255 IN PRTMP_ADAPTER pAd,
4258 VOID MgtMacHeaderInit(
4259 IN PRTMP_ADAPTER pAd,
4260 IN OUT PHEADER_802_11 pHdr80211,
4267 IN PRTMP_ADAPTER pAd);
4270 IN PRTMP_ADAPTER pAd);
4276 #ifdef DOT11_N_SUPPORT
4278 IN PRTMP_ADAPTER pAd,
4280 #endif // DOT11_N_SUPPORT //
4282 ULONG BssTableSearch(
4287 ULONG BssSsidTableSearch(
4294 ULONG BssTableSearchWithSSID(
4301 VOID BssTableDeleteEntry(
4302 IN OUT PBSS_TABLE pTab,
4306 #ifdef DOT11_N_SUPPORT
4307 VOID BATableDeleteORIEntry(
4308 IN OUT PRTMP_ADAPTER pAd,
4309 IN BA_ORI_ENTRY *pBAORIEntry);
4311 VOID BATableDeleteRECEntry(
4312 IN OUT PRTMP_ADAPTER pAd,
4313 IN BA_REC_ENTRY *pBARECEntry);
4315 VOID BATableTearORIEntry(
4316 IN OUT PRTMP_ADAPTER pAd,
4319 IN BOOLEAN bForceDelete,
4322 VOID BATableTearRECEntry(
4323 IN OUT PRTMP_ADAPTER pAd,
4327 #endif // DOT11_N_SUPPORT //
4330 IN PRTMP_ADAPTER pAd,
4331 OUT PBSS_ENTRY pBss,
4336 IN USHORT BeaconPeriod,
4339 IN USHORT CapabilityInfo,
4341 IN UCHAR SupRateLen,
4343 IN UCHAR ExtRateLen,
4344 IN HT_CAPABILITY_IE *pHtCapability,
4345 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4346 IN UCHAR HtCapabilityLen,
4347 IN UCHAR AddHtInfoLen,
4348 IN UCHAR NewExtChanOffset,
4351 IN LARGE_INTEGER TimeStamp,
4353 IN PEDCA_PARM pEdcaParm,
4354 IN PQOS_CAPABILITY_PARM pQosCapability,
4355 IN PQBSS_LOAD_PARM pQbssLoad,
4356 IN USHORT LengthVIE,
4357 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4359 ULONG BssTableSetEntry(
4360 IN PRTMP_ADAPTER pAd,
4361 OUT PBSS_TABLE pTab,
4366 IN USHORT BeaconPeriod,
4369 IN USHORT CapabilityInfo,
4371 IN UCHAR SupRateLen,
4373 IN UCHAR ExtRateLen,
4374 IN HT_CAPABILITY_IE *pHtCapability,
4375 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4376 IN UCHAR HtCapabilityLen,
4377 IN UCHAR AddHtInfoLen,
4378 IN UCHAR NewExtChanOffset,
4381 IN LARGE_INTEGER TimeStamp,
4383 IN PEDCA_PARM pEdcaParm,
4384 IN PQOS_CAPABILITY_PARM pQosCapability,
4385 IN PQBSS_LOAD_PARM pQbssLoad,
4386 IN USHORT LengthVIE,
4387 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4389 #ifdef DOT11_N_SUPPORT
4390 VOID BATableInsertEntry(
4391 IN PRTMP_ADAPTER pAd,
4393 IN USHORT TimeOutValue,
4394 IN USHORT StartingSeq,
4397 IN UCHAR OriginatorStatus,
4398 IN BOOLEAN IsRecipient);
4400 #ifdef DOT11N_DRAFT3
4401 VOID Bss2040CoexistTimeOut(
4402 IN PVOID SystemSpecific1,
4403 IN PVOID FunctionContext,
4404 IN PVOID SystemSpecific2,
4405 IN PVOID SystemSpecific3);
4409 IN PRTMP_ADAPTER pAd);
4411 ULONG TriEventTableSetEntry(
4412 IN PRTMP_ADAPTER pAd,
4413 OUT TRIGGER_EVENT_TAB *Tab,
4415 IN HT_CAPABILITY_IE *pHtCapability,
4416 IN UCHAR HtCapabilityLen,
4418 IN UCHAR ChannelNo);
4420 VOID TriEventCounterMaintenance(
4421 IN PRTMP_ADAPTER pAd);
4422 #endif // DOT11N_DRAFT3 //
4423 #endif // DOT11_N_SUPPORT //
4425 VOID BssTableSsidSort(
4426 IN PRTMP_ADAPTER pAd,
4427 OUT BSS_TABLE *OutTab,
4431 VOID BssTableSortByRssi(
4432 IN OUT BSS_TABLE *OutTab);
4434 VOID BssCipherParse(
4435 IN OUT PBSS_ENTRY pBss);
4437 NDIS_STATUS MlmeQueueInit(
4438 IN MLME_QUEUE *Queue);
4440 VOID MlmeQueueDestroy(
4441 IN MLME_QUEUE *Queue);
4443 BOOLEAN MlmeEnqueue(
4444 IN PRTMP_ADAPTER pAd,
4450 BOOLEAN MlmeEnqueueForRecv(
4451 IN PRTMP_ADAPTER pAd,
4453 IN ULONG TimeStampHigh,
4454 IN ULONG TimeStampLow,
4463 BOOLEAN MlmeDequeue(
4464 IN MLME_QUEUE *Queue,
4465 OUT MLME_QUEUE_ELEM **Elem);
4467 VOID MlmeRestartStateMachine(
4468 IN PRTMP_ADAPTER pAd);
4470 BOOLEAN MlmeQueueEmpty(
4471 IN MLME_QUEUE *Queue);
4473 BOOLEAN MlmeQueueFull(
4474 IN MLME_QUEUE *Queue);
4476 BOOLEAN MsgTypeSubst(
4477 IN PRTMP_ADAPTER pAd,
4478 IN PFRAME_802_11 pFrame,
4482 VOID StateMachineInit(
4483 IN STATE_MACHINE *Sm,
4484 IN STATE_MACHINE_FUNC Trans[],
4487 IN STATE_MACHINE_FUNC DefFunc,
4491 VOID StateMachineSetAction(
4492 IN STATE_MACHINE *S,
4495 IN STATE_MACHINE_FUNC F);
4497 VOID StateMachinePerformAction(
4498 IN PRTMP_ADAPTER pAd,
4499 IN STATE_MACHINE *S,
4500 IN MLME_QUEUE_ELEM *Elem);
4503 IN PRTMP_ADAPTER pAd,
4504 IN MLME_QUEUE_ELEM *Elem);
4506 VOID AssocStateMachineInit(
4507 IN PRTMP_ADAPTER pAd,
4508 IN STATE_MACHINE *Sm,
4509 OUT STATE_MACHINE_FUNC Trans[]);
4511 VOID ReassocTimeout(
4512 IN PVOID SystemSpecific1,
4513 IN PVOID FunctionContext,
4514 IN PVOID SystemSpecific2,
4515 IN PVOID SystemSpecific3);
4518 IN PVOID SystemSpecific1,
4519 IN PVOID FunctionContext,
4520 IN PVOID SystemSpecific2,
4521 IN PVOID SystemSpecific3);
4523 VOID DisassocTimeout(
4524 IN PVOID SystemSpecific1,
4525 IN PVOID FunctionContext,
4526 IN PVOID SystemSpecific2,
4527 IN PVOID SystemSpecific3);
4529 //----------------------------------------------
4530 VOID MlmeDisassocReqAction(
4531 IN PRTMP_ADAPTER pAd,
4532 IN MLME_QUEUE_ELEM *Elem);
4534 VOID MlmeAssocReqAction(
4535 IN PRTMP_ADAPTER pAd,
4536 IN MLME_QUEUE_ELEM *Elem);
4538 VOID MlmeReassocReqAction(
4539 IN PRTMP_ADAPTER pAd,
4540 IN MLME_QUEUE_ELEM *Elem);
4542 VOID MlmeDisassocReqAction(
4543 IN PRTMP_ADAPTER pAd,
4544 IN MLME_QUEUE_ELEM *Elem);
4546 VOID PeerAssocRspAction(
4547 IN PRTMP_ADAPTER pAd,
4548 IN MLME_QUEUE_ELEM *Elem);
4550 VOID PeerReassocRspAction(
4551 IN PRTMP_ADAPTER pAd,
4552 IN MLME_QUEUE_ELEM *Elem);
4554 VOID PeerDisassocAction(
4555 IN PRTMP_ADAPTER pAd,
4556 IN MLME_QUEUE_ELEM *Elem);
4558 VOID DisassocTimeoutAction(
4559 IN PRTMP_ADAPTER pAd,
4560 IN MLME_QUEUE_ELEM *Elem);
4562 VOID AssocTimeoutAction(
4563 IN PRTMP_ADAPTER pAd,
4564 IN MLME_QUEUE_ELEM *Elem);
4566 VOID ReassocTimeoutAction(
4567 IN PRTMP_ADAPTER pAd,
4568 IN MLME_QUEUE_ELEM *Elem);
4571 IN PRTMP_ADAPTER pAd,
4574 VOID SwitchBetweenWepAndCkip(
4575 IN PRTMP_ADAPTER pAd);
4577 VOID InvalidStateWhenAssoc(
4578 IN PRTMP_ADAPTER pAd,
4579 IN MLME_QUEUE_ELEM *Elem);
4581 VOID InvalidStateWhenReassoc(
4582 IN PRTMP_ADAPTER pAd,
4583 IN MLME_QUEUE_ELEM *Elem);
4585 VOID InvalidStateWhenDisassociate(
4586 IN PRTMP_ADAPTER pAd,
4587 IN MLME_QUEUE_ELEM *Elem);
4590 VOID MlmeCntlConfirm(
4591 IN PRTMP_ADAPTER pAd,
4597 IN PRTMP_ADAPTER pAd);
4599 VOID ComposeNullFrame(
4600 IN PRTMP_ADAPTER pAd);
4603 IN PRTMP_ADAPTER pAd,
4605 IN USHORT CapabilityInfo,
4608 IN UCHAR SupRateLen,
4610 IN UCHAR ExtRateLen,
4611 IN PEDCA_PARM pEdcaParm,
4612 IN HT_CAPABILITY_IE *pHtCapability,
4613 IN UCHAR HtCapabilityLen,
4614 IN ADD_HT_INFO_IE *pAddHtInfo);
4616 VOID AuthStateMachineInit(
4617 IN PRTMP_ADAPTER pAd,
4618 IN PSTATE_MACHINE sm,
4619 OUT STATE_MACHINE_FUNC Trans[]);
4622 IN PVOID SystemSpecific1,
4623 IN PVOID FunctionContext,
4624 IN PVOID SystemSpecific2,
4625 IN PVOID SystemSpecific3);
4627 VOID MlmeAuthReqAction(
4628 IN PRTMP_ADAPTER pAd,
4629 IN MLME_QUEUE_ELEM *Elem);
4631 VOID PeerAuthRspAtSeq2Action(
4632 IN PRTMP_ADAPTER pAd,
4633 IN MLME_QUEUE_ELEM *Elem);
4635 VOID PeerAuthRspAtSeq4Action(
4636 IN PRTMP_ADAPTER pAd,
4637 IN MLME_QUEUE_ELEM *Elem);
4639 VOID AuthTimeoutAction(
4640 IN PRTMP_ADAPTER pAd,
4641 IN MLME_QUEUE_ELEM *Elem);
4644 IN PRTMP_ADAPTER pAd,
4647 VOID MlmeDeauthReqAction(
4648 IN PRTMP_ADAPTER pAd,
4649 IN MLME_QUEUE_ELEM *Elem);
4651 VOID InvalidStateWhenAuth(
4652 IN PRTMP_ADAPTER pAd,
4653 IN MLME_QUEUE_ELEM *Elem);
4655 //=============================================
4657 VOID AuthRspStateMachineInit(
4658 IN PRTMP_ADAPTER pAd,
4659 IN PSTATE_MACHINE Sm,
4660 IN STATE_MACHINE_FUNC Trans[]);
4662 VOID PeerDeauthAction(
4663 IN PRTMP_ADAPTER pAd,
4664 IN MLME_QUEUE_ELEM *Elem);
4666 VOID PeerAuthSimpleRspGenAndSend(
4667 IN PRTMP_ADAPTER pAd,
4668 IN PHEADER_802_11 pHdr80211,
4675 // Private routines in dls.c
4678 #ifdef CONFIG_STA_SUPPORT
4679 #ifdef QOS_DLS_SUPPORT
4680 void DlsStateMachineInit(
4681 IN PRTMP_ADAPTER pAd,
4682 IN STATE_MACHINE *Sm,
4683 OUT STATE_MACHINE_FUNC Trans[]);
4685 VOID MlmeDlsReqAction(
4686 IN PRTMP_ADAPTER pAd,
4687 IN MLME_QUEUE_ELEM *Elem);
4689 VOID PeerDlsReqAction(
4690 IN PRTMP_ADAPTER pAd,
4691 IN MLME_QUEUE_ELEM *Elem);
4693 VOID PeerDlsRspAction(
4694 IN PRTMP_ADAPTER pAd,
4695 IN MLME_QUEUE_ELEM *Elem);
4697 VOID MlmeDlsTearDownAction(
4698 IN PRTMP_ADAPTER pAd,
4699 IN MLME_QUEUE_ELEM *Elem);
4701 VOID PeerDlsTearDownAction(
4702 IN PRTMP_ADAPTER pAd,
4703 IN MLME_QUEUE_ELEM *Elem);
4705 VOID RTMPCheckDLSTimeOut(
4706 IN PRTMP_ADAPTER pAd);
4708 BOOLEAN RTMPRcvFrameDLSCheck(
4709 IN PRTMP_ADAPTER pAd,
4710 IN PHEADER_802_11 pHeader,
4712 IN PRT28XX_RXD_STRUC pRxD);
4714 INT RTMPCheckDLSFrame(
4715 IN PRTMP_ADAPTER pAd,
4718 VOID RTMPSendDLSTearDownFrame(
4719 IN PRTMP_ADAPTER pAd,
4722 NDIS_STATUS RTMPSendSTAKeyRequest(
4723 IN PRTMP_ADAPTER pAd,
4726 NDIS_STATUS RTMPSendSTAKeyHandShake(
4727 IN PRTMP_ADAPTER pAd,
4730 VOID DlsTimeoutAction(
4731 IN PVOID SystemSpecific1,
4732 IN PVOID FunctionContext,
4733 IN PVOID SystemSpecific2,
4734 IN PVOID SystemSpecific3);
4736 BOOLEAN MlmeDlsReqSanity(
4737 IN PRTMP_ADAPTER pAd,
4740 OUT PRT_802_11_DLS *pDLS,
4741 OUT PUSHORT pReason);
4743 INT Set_DlsEntryInfo_Display_Proc(
4744 IN PRTMP_ADAPTER pAd,
4747 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4748 IN PRTMP_ADAPTER pAd,
4750 IN UINT DlsEntryIdx);
4752 BOOLEAN MacTableDeleteDlsEntry(
4753 IN PRTMP_ADAPTER pAd,
4757 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4758 IN PRTMP_ADAPTER pAd,
4760 IN BOOLEAN bResetIdelCount);
4762 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4763 IN PRTMP_ADAPTER pAd,
4766 IN BOOLEAN bResetIdelCount);
4768 INT Set_DlsAddEntry_Proc(
4769 IN PRTMP_ADAPTER pAd,
4772 INT Set_DlsTearDownEntry_Proc(
4773 IN PRTMP_ADAPTER pAd,
4775 #endif // QOS_DLS_SUPPORT //
4776 #endif // CONFIG_STA_SUPPORT //
4778 #ifdef QOS_DLS_SUPPORT
4779 BOOLEAN PeerDlsReqSanity(
4780 IN PRTMP_ADAPTER pAd,
4785 OUT USHORT *pCapabilityInfo,
4786 OUT USHORT *pDlsTimeout,
4787 OUT UCHAR *pRatesLen,
4789 OUT UCHAR *pHtCapabilityLen,
4790 OUT HT_CAPABILITY_IE *pHtCapability);
4792 BOOLEAN PeerDlsRspSanity(
4793 IN PRTMP_ADAPTER pAd,
4798 OUT USHORT *pCapabilityInfo,
4799 OUT USHORT *pStatus,
4800 OUT UCHAR *pRatesLen,
4802 OUT UCHAR *pHtCapabilityLen,
4803 OUT HT_CAPABILITY_IE *pHtCapability);
4805 BOOLEAN PeerDlsTearDownSanity(
4806 IN PRTMP_ADAPTER pAd,
4811 OUT USHORT *pReason);
4812 #endif // QOS_DLS_SUPPORT //
4814 //========================================
4816 VOID SyncStateMachineInit(
4817 IN PRTMP_ADAPTER pAd,
4818 IN STATE_MACHINE *Sm,
4819 OUT STATE_MACHINE_FUNC Trans[]);
4822 IN PVOID SystemSpecific1,
4823 IN PVOID FunctionContext,
4824 IN PVOID SystemSpecific2,
4825 IN PVOID SystemSpecific3);
4828 IN PVOID SystemSpecific1,
4829 IN PVOID FunctionContext,
4830 IN PVOID SystemSpecific2,
4831 IN PVOID SystemSpecific3);
4833 VOID MlmeScanReqAction(
4834 IN PRTMP_ADAPTER pAd,
4835 IN MLME_QUEUE_ELEM *Elem);
4837 VOID InvalidStateWhenScan(
4838 IN PRTMP_ADAPTER pAd,
4839 IN MLME_QUEUE_ELEM *Elem);
4841 VOID InvalidStateWhenJoin(
4842 IN PRTMP_ADAPTER pAd,
4843 IN MLME_QUEUE_ELEM *Elem);
4845 VOID InvalidStateWhenStart(
4846 IN PRTMP_ADAPTER pAd,
4847 IN MLME_QUEUE_ELEM *Elem);
4850 IN PRTMP_ADAPTER pAd,
4851 IN MLME_QUEUE_ELEM *Elem);
4853 VOID EnqueueProbeRequest(
4854 IN PRTMP_ADAPTER pAd);
4856 BOOLEAN ScanRunning(
4857 IN PRTMP_ADAPTER pAd);
4858 //=========================================
4861 IN PRTMP_ADAPTER pAd,
4862 IN STATE_MACHINE *S,
4863 OUT STATE_MACHINE_FUNC Trans[]);
4865 VOID MlmeCntlMachinePerformAction(
4866 IN PRTMP_ADAPTER pAd,
4867 IN STATE_MACHINE *S,
4868 IN MLME_QUEUE_ELEM *Elem);
4871 IN PRTMP_ADAPTER pAd,
4872 IN MLME_QUEUE_ELEM *Elem);
4874 VOID CntlOidScanProc(
4875 IN PRTMP_ADAPTER pAd,
4876 IN MLME_QUEUE_ELEM *Elem);
4878 VOID CntlOidSsidProc(
4879 IN PRTMP_ADAPTER pAd,
4880 IN MLME_QUEUE_ELEM * Elem);
4882 VOID CntlOidRTBssidProc(
4883 IN PRTMP_ADAPTER pAd,
4884 IN MLME_QUEUE_ELEM * Elem);
4886 VOID CntlMlmeRoamingProc(
4887 IN PRTMP_ADAPTER pAd,
4888 IN MLME_QUEUE_ELEM * Elem);
4890 VOID CntlWaitDisassocProc(
4891 IN PRTMP_ADAPTER pAd,
4892 IN MLME_QUEUE_ELEM *Elem);
4894 VOID CntlWaitJoinProc(
4895 IN PRTMP_ADAPTER pAd,
4896 IN MLME_QUEUE_ELEM *Elem);
4898 VOID CntlWaitReassocProc(
4899 IN PRTMP_ADAPTER pAd,
4900 IN MLME_QUEUE_ELEM *Elem);
4902 VOID CntlWaitStartProc(
4903 IN PRTMP_ADAPTER pAd,
4904 IN MLME_QUEUE_ELEM *Elem);
4906 VOID CntlWaitAuthProc(
4907 IN PRTMP_ADAPTER pAd,
4908 IN MLME_QUEUE_ELEM *Elem);
4910 VOID CntlWaitAuthProc2(
4911 IN PRTMP_ADAPTER pAd,
4912 IN MLME_QUEUE_ELEM *Elem);
4914 VOID CntlWaitAssocProc(
4915 IN PRTMP_ADAPTER pAd,
4916 IN MLME_QUEUE_ELEM *Elem);
4918 #ifdef QOS_DLS_SUPPORT
4919 VOID CntlOidDLSSetupProc(
4920 IN PRTMP_ADAPTER pAd,
4921 IN MLME_QUEUE_ELEM *Elem);
4922 #endif // QOS_DLS_SUPPORT //
4925 IN PRTMP_ADAPTER pAd,
4929 IN PRTMP_ADAPTER pAd,
4930 IN BOOLEAN IsReqFromAP);
4932 VOID IterateOnBssTab(
4933 IN PRTMP_ADAPTER pAd);
4935 VOID IterateOnBssTab2(
4936 IN PRTMP_ADAPTER pAd);;
4939 IN PRTMP_ADAPTER pAd,
4940 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4944 IN PRTMP_ADAPTER pAd,
4945 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4947 IN USHORT CapabilityInfo,
4949 IN USHORT ListenIntv);
4952 IN PRTMP_ADAPTER pAd,
4953 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4959 VOID DisassocParmFill(
4960 IN PRTMP_ADAPTER pAd,
4961 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4966 IN PRTMP_ADAPTER pAd,
4967 IN OUT MLME_START_REQ_STRUCT *StartReq,
4972 IN PRTMP_ADAPTER pAd,
4973 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4978 IN PRTMP_ADAPTER pAd);
4980 VOID EnqueueBeaconFrame(
4981 IN PRTMP_ADAPTER pAd);
4983 VOID MlmeJoinReqAction(
4984 IN PRTMP_ADAPTER pAd,
4985 IN MLME_QUEUE_ELEM *Elem);
4987 VOID MlmeScanReqAction(
4988 IN PRTMP_ADAPTER pAd,
4989 IN MLME_QUEUE_ELEM *Elem);
4991 VOID MlmeStartReqAction(
4992 IN PRTMP_ADAPTER pAd,
4993 IN MLME_QUEUE_ELEM *Elem);
4995 VOID ScanTimeoutAction(
4996 IN PRTMP_ADAPTER pAd,
4997 IN MLME_QUEUE_ELEM *Elem);
4999 VOID BeaconTimeoutAtJoinAction(
5000 IN PRTMP_ADAPTER pAd,
5001 IN MLME_QUEUE_ELEM *Elem);
5003 VOID PeerBeaconAtScanAction(
5004 IN PRTMP_ADAPTER pAd,
5005 IN MLME_QUEUE_ELEM *Elem);
5007 VOID PeerBeaconAtJoinAction(
5008 IN PRTMP_ADAPTER pAd,
5009 IN MLME_QUEUE_ELEM *Elem);
5012 IN PRTMP_ADAPTER pAd,
5013 IN MLME_QUEUE_ELEM *Elem);
5015 VOID PeerProbeReqAction(
5016 IN PRTMP_ADAPTER pAd,
5017 IN MLME_QUEUE_ELEM *Elem);
5019 VOID ScanNextChannel(
5020 IN PRTMP_ADAPTER pAd);
5022 ULONG MakeIbssBeacon(
5023 IN PRTMP_ADAPTER pAd);
5025 VOID CCXAdjacentAPReport(
5026 IN PRTMP_ADAPTER pAd);
5028 BOOLEAN MlmeScanReqSanity(
5029 IN PRTMP_ADAPTER pAd,
5035 OUT UCHAR *ScanType);
5037 BOOLEAN PeerBeaconAndProbeRspSanity(
5038 IN PRTMP_ADAPTER pAd,
5041 IN UCHAR MsgChannel,
5045 OUT UCHAR *pSsidLen,
5046 OUT UCHAR *pBssType,
5047 OUT USHORT *pBeaconPeriod,
5048 OUT UCHAR *pChannel,
5049 OUT UCHAR *pNewChannel,
5050 OUT LARGE_INTEGER *pTimestamp,
5051 OUT CF_PARM *pCfParm,
5052 OUT USHORT *pAtimWin,
5053 OUT USHORT *pCapabilityInfo,
5055 OUT UCHAR *pDtimCount,
5056 OUT UCHAR *pDtimPeriod,
5057 OUT UCHAR *pBcastFlag,
5058 OUT UCHAR *pMessageToMe,
5059 OUT UCHAR SupRate[],
5060 OUT UCHAR *pSupRateLen,
5061 OUT UCHAR ExtRate[],
5062 OUT UCHAR *pExtRateLen,
5063 OUT UCHAR *pCkipFlag,
5064 OUT UCHAR *pAironetCellPowerLimit,
5065 OUT PEDCA_PARM pEdcaParm,
5066 OUT PQBSS_LOAD_PARM pQbssLoad,
5067 OUT PQOS_CAPABILITY_PARM pQosCapability,
5068 OUT ULONG *pRalinkIe,
5069 OUT UCHAR *pHtCapabilityLen,
5070 #ifdef CONFIG_STA_SUPPORT
5071 OUT UCHAR *pPreNHtCapabilityLen,
5072 #endif // CONFIG_STA_SUPPORT //
5073 OUT HT_CAPABILITY_IE *pHtCapability,
5074 OUT UCHAR *AddHtInfoLen,
5075 OUT ADD_HT_INFO_IE *AddHtInfo,
5076 OUT UCHAR *NewExtChannel,
5077 OUT USHORT *LengthVIE,
5078 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5080 BOOLEAN PeerAddBAReqActionSanity(
5081 IN PRTMP_ADAPTER pAd,
5086 BOOLEAN PeerAddBARspActionSanity(
5087 IN PRTMP_ADAPTER pAd,
5091 BOOLEAN PeerDelBAActionSanity(
5092 IN PRTMP_ADAPTER pAd,
5097 BOOLEAN MlmeAssocReqSanity(
5098 IN PRTMP_ADAPTER pAd,
5102 OUT USHORT *CapabilityInfo,
5104 OUT USHORT *ListenIntv);
5106 BOOLEAN MlmeAuthReqSanity(
5107 IN PRTMP_ADAPTER pAd,
5114 BOOLEAN MlmeStartReqSanity(
5115 IN PRTMP_ADAPTER pAd,
5119 OUT UCHAR *Ssidlen);
5121 BOOLEAN PeerAuthSanity(
5122 IN PRTMP_ADAPTER pAd,
5129 OUT CHAR ChlgText[]);
5131 BOOLEAN PeerAssocRspSanity(
5132 IN PRTMP_ADAPTER pAd,
5136 OUT USHORT *pCapabilityInfo,
5137 OUT USHORT *pStatus,
5139 OUT UCHAR SupRate[],
5140 OUT UCHAR *pSupRateLen,
5141 OUT UCHAR ExtRate[],
5142 OUT UCHAR *pExtRateLen,
5143 OUT HT_CAPABILITY_IE *pHtCapability,
5144 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5145 OUT UCHAR *pHtCapabilityLen,
5146 OUT UCHAR *pAddHtInfoLen,
5147 OUT UCHAR *pNewExtChannelOffset,
5148 OUT PEDCA_PARM pEdcaParm,
5149 OUT UCHAR *pCkipFlag);
5151 BOOLEAN PeerDisassocSanity(
5152 IN PRTMP_ADAPTER pAd,
5156 OUT USHORT *Reason);
5158 BOOLEAN PeerWpaMessageSanity(
5159 IN PRTMP_ADAPTER pAd,
5160 IN PEAPOL_PACKET pMsg,
5163 IN MAC_TABLE_ENTRY *pEntry);
5165 BOOLEAN PeerDeauthSanity(
5166 IN PRTMP_ADAPTER pAd,
5170 OUT USHORT *Reason);
5172 BOOLEAN PeerProbeReqSanity(
5173 IN PRTMP_ADAPTER pAd,
5178 OUT UCHAR *pSsidLen);
5184 OUT UCHAR *BcastFlag,
5185 OUT UCHAR *DtimCount,
5186 OUT UCHAR *DtimPeriod,
5187 OUT UCHAR *MessageToMe);
5189 UCHAR ChannelSanity(
5190 IN PRTMP_ADAPTER pAd,
5193 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5194 IN PBSS_ENTRY pBss);
5196 #if 0 // It's omitted
5197 NDIS_STATUS RTMPWepKeySanity(
5198 IN PRTMP_ADAPTER pAdapter,
5202 BOOLEAN MlmeDelBAReqSanity(
5203 IN PRTMP_ADAPTER pAd,
5207 BOOLEAN MlmeAddBAReqSanity(
5208 IN PRTMP_ADAPTER pAd,
5213 ULONG MakeOutgoingFrame(
5215 OUT ULONG *Length, ...);
5218 IN PRTMP_ADAPTER pAd,
5222 IN PRTMP_ADAPTER pAd);
5224 VOID AsicUpdateAutoFallBackTable(
5225 IN PRTMP_ADAPTER pAd,
5228 VOID MlmePeriodicExec(
5229 IN PVOID SystemSpecific1,
5230 IN PVOID FunctionContext,
5231 IN PVOID SystemSpecific2,
5232 IN PVOID SystemSpecific3);
5235 IN PVOID SystemSpecific1,
5236 IN PVOID FunctionContext,
5237 IN PVOID SystemSpecific2,
5238 IN PVOID SystemSpecific3);
5241 IN PVOID SystemSpecific1,
5242 IN PVOID FunctionContext,
5243 IN PVOID SystemSpecific2,
5244 IN PVOID SystemSpecific3);
5246 VOID STAMlmePeriodicExec(
5250 IN PRTMP_ADAPTER pAd);
5252 VOID MlmeAutoReconnectLastSSID(
5253 IN PRTMP_ADAPTER pAd);
5255 BOOLEAN MlmeValidateSSID(
5259 VOID MlmeCheckForRoaming(
5260 IN PRTMP_ADAPTER pAd,
5263 VOID MlmeCheckForFastRoaming(
5264 IN PRTMP_ADAPTER pAd,
5267 VOID MlmeDynamicTxRateSwitching(
5268 IN PRTMP_ADAPTER pAd);
5271 IN PRTMP_ADAPTER pAd,
5272 IN PMAC_TABLE_ENTRY pEntry,
5273 IN PRTMP_TX_RATE_SWITCH pTxRate);
5275 VOID MlmeSelectTxRateTable(
5276 IN PRTMP_ADAPTER pAd,
5277 IN PMAC_TABLE_ENTRY pEntry,
5279 IN PUCHAR pTableSize,
5280 IN PUCHAR pInitTxRateIdx);
5282 VOID MlmeCalculateChannelQuality(
5283 IN PRTMP_ADAPTER pAd,
5286 VOID MlmeCheckPsmChange(
5287 IN PRTMP_ADAPTER pAd,
5291 IN PRTMP_ADAPTER pAd,
5294 VOID MlmeSetTxPreamble(
5295 IN PRTMP_ADAPTER pAd,
5296 IN USHORT TxPreamble);
5298 VOID UpdateBasicRateBitmap(
5299 IN PRTMP_ADAPTER pAd);
5301 VOID MlmeUpdateTxRates(
5302 IN PRTMP_ADAPTER pAd,
5306 #ifdef DOT11_N_SUPPORT
5307 VOID MlmeUpdateHtTxRates(
5308 IN PRTMP_ADAPTER pAd,
5310 #endif // DOT11_N_SUPPORT //
5312 VOID RTMPCheckRates(
5313 IN PRTMP_ADAPTER pAd,
5314 IN OUT UCHAR SupRate[],
5315 IN OUT UCHAR *SupRateLen);
5317 #ifdef CONFIG_STA_SUPPORT
5318 BOOLEAN RTMPCheckChannel(
5319 IN PRTMP_ADAPTER pAd,
5320 IN UCHAR CentralChannel,
5322 #endif // CONFIG_STA_SUPPORT //
5324 BOOLEAN RTMPCheckHt(
5325 IN PRTMP_ADAPTER pAd,
5327 IN OUT HT_CAPABILITY_IE *pHtCapability,
5328 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5330 VOID StaQuickResponeForRateUpExec(
5331 IN PVOID SystemSpecific1,
5332 IN PVOID FunctionContext,
5333 IN PVOID SystemSpecific2,
5334 IN PVOID SystemSpecific3);
5336 VOID AsicBbpTuning1(
5337 IN PRTMP_ADAPTER pAd);
5339 VOID AsicBbpTuning2(
5340 IN PRTMP_ADAPTER pAd);
5342 VOID RTMPUpdateMlmeRate(
5343 IN PRTMP_ADAPTER pAd);
5346 IN PRTMP_ADAPTER pAd,
5351 VOID AsicEvaluateRxAnt(
5352 IN PRTMP_ADAPTER pAd);
5354 VOID AsicRxAntEvalTimeout(
5355 IN PVOID SystemSpecific1,
5356 IN PVOID FunctionContext,
5357 IN PVOID SystemSpecific2,
5358 IN PVOID SystemSpecific3);
5360 VOID APSDPeriodicExec(
5361 IN PVOID SystemSpecific1,
5362 IN PVOID FunctionContext,
5363 IN PVOID SystemSpecific2,
5364 IN PVOID SystemSpecific3);
5366 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5367 IN PRTMP_ADAPTER pAd,
5368 IN PMAC_TABLE_ENTRY pEntry);
5370 UCHAR RTMPStaFixedTxMode(
5371 IN PRTMP_ADAPTER pAd,
5372 IN PMAC_TABLE_ENTRY pEntry);
5374 VOID RTMPUpdateLegacyTxSetting(
5375 UCHAR fixed_tx_mode,
5376 PMAC_TABLE_ENTRY pEntry);
5378 BOOLEAN RTMPAutoRateSwitchCheck(
5379 IN PRTMP_ADAPTER pAd);
5381 NDIS_STATUS MlmeInit(
5382 IN PRTMP_ADAPTER pAd);
5385 IN PRTMP_ADAPTER pAd);
5388 IN PRTMP_ADAPTER pAd);
5390 VOID MlmeResetRalinkCounters(
5391 IN PRTMP_ADAPTER pAd);
5393 VOID BuildChannelList(
5394 IN PRTMP_ADAPTER pAd);
5397 IN PRTMP_ADAPTER pAd);
5400 IN PRTMP_ADAPTER pAd,
5403 VOID ChangeToCellPowerLimit(
5404 IN PRTMP_ADAPTER pAd,
5405 IN UCHAR AironetCellPowerLimit);
5408 IN PRTMP_ADAPTER pAd,
5412 IN PRTMP_ADAPTER pAd,
5416 IN PRTMP_ADAPTER pAd);
5419 IN PRTMP_ADAPTER pAd,
5424 IN PRTMP_ADAPTER pAd);
5427 IN PRTMP_ADAPTER pAd);
5430 IN PRTMP_ADAPTER pAd);
5432 USHORT RTMP_EEPROM_READ16(
5433 IN PRTMP_ADAPTER pAd,
5436 VOID RTMP_EEPROM_WRITE16(
5437 IN PRTMP_ADAPTER pAd,
5442 // Prototypes of function definition in rtmp_tkip.c
5444 VOID RTMPInitTkipEngine(
5445 IN PRTMP_ADAPTER pAd,
5454 VOID RTMPInitMICEngine(
5455 IN PRTMP_ADAPTER pAd,
5459 IN UCHAR UserPriority,
5462 BOOLEAN RTMPTkipCompareMICValue(
5463 IN PRTMP_ADAPTER pAd,
5468 IN UCHAR UserPriority,
5471 VOID RTMPCalculateMICValue(
5472 IN PRTMP_ADAPTER pAd,
5473 IN PNDIS_PACKET pPacket,
5475 IN PCIPHER_KEY pKey,
5478 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5479 IN PRTMP_ADAPTER pAd,
5487 VOID RTMPTkipAppendByte(
5488 IN PTKIP_KEY_INFO pTkip,
5491 VOID RTMPTkipAppend(
5492 IN PTKIP_KEY_INFO pTkip,
5496 VOID RTMPTkipGetMIC(
5497 IN PTKIP_KEY_INFO pTkip);
5499 BOOLEAN RTMPSoftDecryptTKIP(
5500 IN PRTMP_ADAPTER pAd,
5502 IN ULONG DataByteCnt,
5503 IN UCHAR UserPriority,
5504 IN PCIPHER_KEY pWpaKey);
5506 BOOLEAN RTMPSoftDecryptAES(
5507 IN PRTMP_ADAPTER pAd,
5509 IN ULONG DataByteCnt,
5510 IN PCIPHER_KEY pWpaKey);
5512 #if 0 // removed by AlbertY
5513 NDIS_STATUS RTMPWPAAddKeyProc(
5514 IN PRTMP_ADAPTER pAd,
5519 // Prototypes of function definition in cmm_info.c
5521 NDIS_STATUS RTMPWPARemoveKeyProc(
5522 IN PRTMP_ADAPTER pAd,
5525 VOID RTMPWPARemoveAllKeys(
5526 IN PRTMP_ADAPTER pAd);
5528 BOOLEAN RTMPCheckStrPrintAble(
5532 VOID RTMPSetPhyMode(
5533 IN PRTMP_ADAPTER pAd,
5536 VOID RTMPUpdateHTIE(
5537 IN RT_HT_CAPABILITY *pRtHt,
5539 OUT HT_CAPABILITY_IE *pHtCapability,
5540 OUT ADD_HT_INFO_IE *pAddHtInfo);
5542 VOID RTMPAddWcidAttributeEntry(
5543 IN PRTMP_ADAPTER pAd,
5547 IN MAC_TABLE_ENTRY *pEntry);
5549 CHAR *GetEncryptType(
5555 VOID RTMPIoctlGetSiteSurvey(
5556 IN PRTMP_ADAPTER pAdapter,
5557 IN struct iwreq *wrq);
5559 VOID RTMPIoctlGetMacTable(
5560 IN PRTMP_ADAPTER pAd,
5561 IN struct iwreq *wrq);
5563 VOID RTMPIndicateWPA2Status(
5564 IN PRTMP_ADAPTER pAdapter);
5566 VOID RTMPOPModeSwitching(
5567 IN PRTMP_ADAPTER pAd);
5569 #ifdef CONFIG_STA_SUPPORT
5570 VOID RTMPAddBSSIDCipher(
5571 IN PRTMP_ADAPTER pAd,
5573 IN PNDIS_802_11_KEY pKey,
5574 IN UCHAR CipherAlg);
5575 #endif // CONFIG_STA_SUPPORT //
5577 #ifdef DOT11_N_SUPPORT
5579 IN PRTMP_ADAPTER pAd,
5580 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5582 VOID RTMPSetIndividualHT(
5583 IN PRTMP_ADAPTER pAd,
5585 #endif // DOT11_N_SUPPORT //
5587 VOID RTMPSendWirelessEvent(
5588 IN PRTMP_ADAPTER pAd,
5589 IN USHORT Event_flag,
5594 VOID NICUpdateCntlCounters(
5595 IN PRTMP_ADAPTER pAd,
5596 IN PHEADER_802_11 pHeader,
5598 IN PRXWI_STRUC pRxWI);
5600 // prototype in wpa.c
5602 BOOLEAN WpaMsgTypeSubst(
5606 VOID WpaPskStateMachineInit(
5607 IN PRTMP_ADAPTER pAd,
5608 IN STATE_MACHINE *S,
5609 OUT STATE_MACHINE_FUNC Trans[]);
5611 VOID WpaEAPOLKeyAction(
5612 IN PRTMP_ADAPTER pAd,
5613 IN MLME_QUEUE_ELEM *Elem);
5615 VOID WpaPairMsg1Action(
5616 IN PRTMP_ADAPTER pAd,
5617 IN MLME_QUEUE_ELEM *Elem);
5619 VOID WpaPairMsg3Action(
5620 IN PRTMP_ADAPTER pAd,
5621 IN MLME_QUEUE_ELEM *Elem);
5623 VOID WpaGroupMsg1Action(
5624 IN PRTMP_ADAPTER pAd,
5625 IN MLME_QUEUE_ELEM *Elem);
5627 VOID WpaMacHeaderInit(
5628 IN PRTMP_ADAPTER pAd,
5629 IN OUT PHEADER_802_11 pHdr80211,
5633 VOID Wpa2PairMsg1Action(
5634 IN PRTMP_ADAPTER pAd,
5635 IN MLME_QUEUE_ELEM *Elem);
5637 VOID Wpa2PairMsg3Action(
5638 IN PRTMP_ADAPTER pAd,
5639 IN MLME_QUEUE_ELEM *Elem);
5641 BOOLEAN ParseKeyData(
5642 IN PRTMP_ADAPTER pAd,
5644 IN UCHAR KeyDataLen,
5645 IN UCHAR bPairewise);
5647 VOID RTMPToWirelessSta(
5648 IN PRTMP_ADAPTER pAd,
5649 IN PUCHAR pHeader802_3,
5653 IN BOOLEAN is4wayFrame);
5681 IN PRTMP_ADAPTER pAd,
5691 IN PRTMP_ADAPTER pAd,
5696 // prototype in aironet.c
5698 VOID AironetStateMachineInit(
5699 IN PRTMP_ADAPTER pAd,
5700 IN STATE_MACHINE *S,
5701 OUT STATE_MACHINE_FUNC Trans[]);
5703 VOID AironetMsgAction(
5704 IN PRTMP_ADAPTER pAd,
5705 IN MLME_QUEUE_ELEM *Elem);
5707 VOID AironetRequestAction(
5708 IN PRTMP_ADAPTER pAd,
5709 IN MLME_QUEUE_ELEM *Elem);
5711 VOID ChannelLoadRequestAction(
5712 IN PRTMP_ADAPTER pAd,
5715 VOID NoiseHistRequestAction(
5716 IN PRTMP_ADAPTER pAd,
5719 VOID BeaconRequestAction(
5720 IN PRTMP_ADAPTER pAd,
5723 VOID AironetReportAction(
5724 IN PRTMP_ADAPTER pAd,
5725 IN MLME_QUEUE_ELEM *Elem);
5727 VOID ChannelLoadReportAction(
5728 IN PRTMP_ADAPTER pAd,
5731 VOID NoiseHistReportAction(
5732 IN PRTMP_ADAPTER pAd,
5735 VOID AironetFinalReportAction(
5736 IN PRTMP_ADAPTER pAd);
5738 VOID BeaconReportAction(
5739 IN PRTMP_ADAPTER pAd,
5742 VOID AironetAddBeaconReport(
5743 IN PRTMP_ADAPTER pAd,
5745 IN PMLME_QUEUE_ELEM pElem);
5747 VOID AironetCreateBeaconReportFromBssTable(
5748 IN PRTMP_ADAPTER pAd);
5750 VOID DBGPRINT_TX_RING(
5751 IN PRTMP_ADAPTER pAd,
5754 VOID DBGPRINT_RX_RING(
5755 IN PRTMP_ADAPTER pAd);
5758 IN PRTMP_ADAPTER pAd,
5760 IN UCHAR RssiNumber);
5763 #ifdef DOT11N_DRAFT3
5764 VOID BuildEffectedChannelList(
5765 IN PRTMP_ADAPTER pAd);
5766 #endif // DOT11N_DRAFT3 //
5769 VOID APAsicEvaluateRxAnt(
5770 IN PRTMP_ADAPTER pAd);
5773 VOID APAsicRxAntEvalTimeout(
5774 IN PRTMP_ADAPTER pAd);
5777 // function prototype in cmm_wpa.c
5779 BOOLEAN RTMPCheckWPAframe(
5780 IN PRTMP_ADAPTER pAd,
5781 IN PMAC_TABLE_ENTRY pEntry,
5783 IN ULONG DataByteCount,
5784 IN UCHAR FromWhichBSSID);
5786 VOID AES_GTK_KEY_UNWRAP(
5788 OUT UCHAR *plaintext,
5790 IN UCHAR *ciphertext);
5792 BOOLEAN RTMPCheckRSNIE(
5793 IN PRTMP_ADAPTER pAd,
5796 IN MAC_TABLE_ENTRY *pEntry,
5799 BOOLEAN RTMPParseEapolKeyData(
5800 IN PRTMP_ADAPTER pAd,
5802 IN UCHAR KeyDataLen,
5803 IN UCHAR GroupKeyIndex,
5806 IN MAC_TABLE_ENTRY *pEntry);
5808 VOID ConstructEapolMsg(
5809 IN PRTMP_ADAPTER pAd,
5810 IN UCHAR PeerAuthMode,
5811 IN UCHAR PeerWepStatus,
5812 IN UCHAR MyGroupKeyWepStatus,
5814 IN UCHAR DefaultKeyIdx,
5815 IN UCHAR *ReplayCounter,
5822 OUT PEAPOL_PACKET pMsg);
5825 IN PRTMP_ADAPTER pAd,
5826 IN UCHAR PeerWepStatus,
5828 OUT PEAPOL_PACKET pMsg);
5830 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5831 IN PRTMP_ADAPTER pAd,
5833 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5834 IN PCIPHER_KEY pShard_key);
5836 VOID ConstructEapolKeyData(
5837 IN PRTMP_ADAPTER pAd,
5838 IN UCHAR PeerAuthMode,
5839 IN UCHAR PeerWepStatus,
5840 IN UCHAR GroupKeyWepStatus,
5842 IN UCHAR DefaultKeyIdx,
5843 IN BOOLEAN bWPA2Capable,
5848 OUT PEAPOL_PACKET pMsg);
5851 IN PRTMP_ADAPTER pAd,
5857 // function prototype in ap_wpa.c
5860 BOOLEAN APWpaMsgTypeSubst(
5864 MAC_TABLE_ENTRY *PACInquiry(
5865 IN PRTMP_ADAPTER pAd,
5868 BOOLEAN RTMPCheckMcast(
5869 IN PRTMP_ADAPTER pAd,
5870 IN PEID_STRUCT eid_ptr,
5871 IN MAC_TABLE_ENTRY *pEntry);
5873 BOOLEAN RTMPCheckUcast(
5874 IN PRTMP_ADAPTER pAd,
5875 IN PEID_STRUCT eid_ptr,
5876 IN MAC_TABLE_ENTRY *pEntry);
5878 BOOLEAN RTMPCheckAUTH(
5879 IN PRTMP_ADAPTER pAd,
5880 IN PEID_STRUCT eid_ptr,
5881 IN MAC_TABLE_ENTRY *pEntry);
5883 VOID WPAStart4WayHS(
5884 IN PRTMP_ADAPTER pAd,
5885 IN MAC_TABLE_ENTRY *pEntry,
5886 IN ULONG TimeInterval);
5888 VOID WPAStart2WayGroupHS(
5889 IN PRTMP_ADAPTER pAd,
5890 IN MAC_TABLE_ENTRY *pEntry);
5892 VOID APWpaEAPPacketAction(
5893 IN PRTMP_ADAPTER pAd,
5894 IN MLME_QUEUE_ELEM *Elem);
5896 VOID APWpaEAPOLStartAction(
5897 IN PRTMP_ADAPTER pAd,
5898 IN MLME_QUEUE_ELEM *Elem);
5900 VOID APWpaEAPOLLogoffAction(
5901 IN PRTMP_ADAPTER pAd,
5902 IN MLME_QUEUE_ELEM *Elem);
5904 VOID APWpaEAPOLKeyAction(
5905 IN PRTMP_ADAPTER pAd,
5906 IN MLME_QUEUE_ELEM *Elem);
5908 VOID APWpaEAPOLASFAlertAction(
5909 IN PRTMP_ADAPTER pAd,
5910 IN MLME_QUEUE_ELEM *Elem);
5912 VOID HandleCounterMeasure(
5913 IN PRTMP_ADAPTER pAd,
5914 IN MAC_TABLE_ENTRY *pEntry);
5916 VOID PeerPairMsg2Action(
5917 IN PRTMP_ADAPTER pAd,
5918 IN MAC_TABLE_ENTRY *pEntry,
5919 IN MLME_QUEUE_ELEM *Elem);
5921 VOID PeerPairMsg4Action(
5922 IN PRTMP_ADAPTER pAd,
5923 IN MAC_TABLE_ENTRY *pEntry,
5924 IN MLME_QUEUE_ELEM *Elem);
5927 IN PVOID SystemSpecific1,
5928 IN PVOID FunctionContext,
5929 IN PVOID SystemSpecific2,
5930 IN PVOID SystemSpecific3);
5933 IN PVOID SystemSpecific1,
5934 IN PVOID FunctionContext,
5935 IN PVOID SystemSpecific2,
5936 IN PVOID SystemSpecific3);
5938 VOID EnqueueStartForPSKExec(
5939 IN PVOID SystemSpecific1,
5940 IN PVOID FunctionContext,
5941 IN PVOID SystemSpecific2,
5942 IN PVOID SystemSpecific3);
5944 VOID RTMPHandleSTAKey(
5945 IN PRTMP_ADAPTER pAdapter,
5946 IN MAC_TABLE_ENTRY *pEntry,
5947 IN MLME_QUEUE_ELEM *Elem);
5949 #if 0 // merge into PeerPairMsg4Action
5950 VOID Wpa1PeerPairMsg4Action(
5951 IN PRTMP_ADAPTER pAd,
5952 IN MAC_TABLE_ENTRY *pEntry,
5953 IN MLME_QUEUE_ELEM *Elem);
5955 VOID Wpa2PeerPairMsg4Action(
5956 IN PRTMP_ADAPTER pAd,
5957 IN PMAC_TABLE_ENTRY pEntry,
5958 IN MLME_QUEUE_ELEM *Elem);
5961 VOID PeerGroupMsg2Action(
5962 IN PRTMP_ADAPTER pAd,
5963 IN PMAC_TABLE_ENTRY pEntry,
5967 #if 0 // replaced by WPAStart2WayGroupHS
5968 NDIS_STATUS APWpaHardTransmit(
5969 IN PRTMP_ADAPTER pAd,
5970 IN PMAC_TABLE_ENTRY pEntry);
5973 VOID PairDisAssocAction(
5974 IN PRTMP_ADAPTER pAd,
5975 IN PMAC_TABLE_ENTRY pEntry,
5978 VOID MlmeDeAuthAction(
5979 IN PRTMP_ADAPTER pAd,
5980 IN PMAC_TABLE_ENTRY pEntry,
5983 VOID GREKEYPeriodicExec(
5984 IN PVOID SystemSpecific1,
5985 IN PVOID FunctionContext,
5986 IN PVOID SystemSpecific2,
5987 IN PVOID SystemSpecific3);
6009 IN PRTMP_ADAPTER pAd,
6012 VOID AES_GTK_KEY_WRAP(
6014 IN UCHAR *plaintext,
6016 OUT UCHAR *ciphertext);
6019 IN PRTMP_ADAPTER pAdapter,
6023 VOID APToWirelessSta(
6024 IN PRTMP_ADAPTER pAd,
6025 IN MAC_TABLE_ENTRY *pEntry,
6026 IN PUCHAR pHeader802_3,
6030 IN BOOLEAN bClearFrame);
6032 VOID RTMPAddPMKIDCache(
6033 IN PRTMP_ADAPTER pAd,
6039 INT RTMPSearchPMKIDCache(
6040 IN PRTMP_ADAPTER pAd,
6044 VOID RTMPDeletePMKIDCache(
6045 IN PRTMP_ADAPTER pAd,
6049 VOID RTMPMaintainPMKIDCache(
6050 IN PRTMP_ADAPTER pAd);
6052 VOID RTMPSendTriggerFrame(
6053 IN PRTMP_ADAPTER pAd,
6057 IN BOOLEAN bQosNull);
6060 //typedef void (*TIMER_FUNCTION)(unsigned long);
6064 VOID RTMP_SetPeriodicTimer(
6065 IN NDIS_MINIPORT_TIMER *pTimer,
6066 IN unsigned long timeout);
6068 VOID RTMP_OS_Init_Timer(
6069 IN PRTMP_ADAPTER pAd,
6070 IN NDIS_MINIPORT_TIMER *pTimer,
6071 IN TIMER_FUNCTION function,
6074 VOID RTMP_OS_Add_Timer(
6075 IN NDIS_MINIPORT_TIMER *pTimer,
6076 IN unsigned long timeout);
6078 VOID RTMP_OS_Mod_Timer(
6079 IN NDIS_MINIPORT_TIMER *pTimer,
6080 IN unsigned long timeout);
6083 VOID RTMP_OS_Del_Timer(
6084 IN NDIS_MINIPORT_TIMER *pTimer,
6085 OUT BOOLEAN *pCancelled);
6088 VOID RTMP_OS_Release_Packet(
6089 IN PRTMP_ADAPTER pAd,
6090 IN PQUEUE_ENTRY pEntry);
6095 NDIS_STATUS os_alloc_mem(
6096 IN PRTMP_ADAPTER pAd,
6100 NDIS_STATUS os_free_mem(
6101 IN PRTMP_ADAPTER pAd,
6105 void RTMP_AllocateSharedMemory(
6106 IN PRTMP_ADAPTER pAd,
6109 OUT PVOID *VirtualAddress,
6110 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6112 VOID RTMPFreeTxRxRingMemory(
6113 IN PRTMP_ADAPTER pAd);
6115 NDIS_STATUS AdapterBlockAllocateMemory(
6119 void RTMP_AllocateTxDescMemory(
6120 IN PRTMP_ADAPTER pAd,
6124 OUT PVOID *VirtualAddress,
6125 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6127 void RTMP_AllocateFirstTxBuffer(
6128 IN PRTMP_ADAPTER pAd,
6132 OUT PVOID *VirtualAddress,
6133 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6135 void RTMP_AllocateMgmtDescMemory(
6136 IN PRTMP_ADAPTER pAd,
6139 OUT PVOID *VirtualAddress,
6140 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6142 void RTMP_AllocateRxDescMemory(
6143 IN PRTMP_ADAPTER pAd,
6146 OUT PVOID *VirtualAddress,
6147 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6149 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6150 IN PRTMP_ADAPTER pAd,
6153 OUT PVOID *VirtualAddress,
6154 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6156 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6157 IN PRTMP_ADAPTER pAd,
6160 OUT PVOID *VirtualAddress);
6162 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6163 IN PRTMP_ADAPTER pAd,
6166 void RTMP_QueryPacketInfo(
6167 IN PNDIS_PACKET pPacket,
6168 OUT PACKET_INFO *pPacketInfo,
6169 OUT PUCHAR *pSrcBufVA,
6170 OUT UINT *pSrcBufLen);
6172 void RTMP_QueryNextPacketInfo(
6173 IN PNDIS_PACKET *ppPacket,
6174 OUT PACKET_INFO *pPacketInfo,
6175 OUT PUCHAR *pSrcBufVA,
6176 OUT UINT *pSrcBufLen);
6179 BOOLEAN RTMP_FillTxBlkInfo(
6180 IN RTMP_ADAPTER *pAd,
6184 PRTMP_SCATTER_GATHER_LIST
6185 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6188 void announce_802_3_packet(
6189 IN PRTMP_ADAPTER pAd,
6190 IN PNDIS_PACKET pPacket);
6193 UINT BA_Reorder_AMSDU_Annnounce(
6194 IN PRTMP_ADAPTER pAd,
6195 IN PNDIS_PACKET pPacket);
6198 UINT Handle_AMSDU_Packet(
6199 IN PRTMP_ADAPTER pAd,
6202 IN UCHAR FromWhichBSSID);
6205 void convert_802_11_to_802_3_packet(
6206 IN PRTMP_ADAPTER pAd,
6207 IN PNDIS_PACKET pPacket,
6211 IN UCHAR FromWhichBSSID);
6214 PNET_DEV get_netdev_from_bssid(
6215 IN PRTMP_ADAPTER pAd,
6216 IN UCHAR FromWhichBSSID);
6219 PNDIS_PACKET duplicate_pkt(
6220 IN PRTMP_ADAPTER pAd,
6221 IN PUCHAR pHeader802_3,
6225 IN UCHAR FromWhichBSSID);
6228 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6229 IN PRTMP_ADAPTER pAd,
6230 IN PNDIS_PACKET pOldPkt);
6232 PNDIS_PACKET duplicate_pkt_with_VLAN(
6233 IN PRTMP_ADAPTER pAd,
6234 IN PUCHAR pHeader802_3,
6238 IN UCHAR FromWhichBSSID);
6240 PNDIS_PACKET duplicate_pkt_with_WPI(
6241 IN PRTMP_ADAPTER pAd,
6242 IN PNDIS_PACKET pPacket,
6243 IN UINT32 ext_head_len,
6244 IN UINT32 ext_tail_len);
6246 UCHAR VLAN_8023_Header_Copy(
6247 IN PRTMP_ADAPTER pAd,
6248 IN PUCHAR pHeader802_3,
6251 IN UCHAR FromWhichBSSID);
6253 #ifdef DOT11_N_SUPPORT
6254 void ba_flush_reordering_timeout_mpdus(
6255 IN PRTMP_ADAPTER pAd,
6256 IN PBA_REC_ENTRY pBAEntry,
6260 VOID BAOriSessionSetUp(
6261 IN PRTMP_ADAPTER pAd,
6262 IN MAC_TABLE_ENTRY *pEntry,
6266 IN BOOLEAN isForced);
6268 VOID BASessionTearDownALL(
6269 IN OUT PRTMP_ADAPTER pAd,
6271 #endif // DOT11_N_SUPPORT //
6273 BOOLEAN OS_Need_Clone_Packet(void);
6276 VOID build_tx_packet(
6277 IN PRTMP_ADAPTER pAd,
6278 IN PNDIS_PACKET pPacket,
6283 VOID BAOriSessionTearDown(
6284 IN OUT PRTMP_ADAPTER pAd,
6287 IN BOOLEAN bPassive,
6288 IN BOOLEAN bForceSend);
6290 VOID BARecSessionTearDown(
6291 IN OUT PRTMP_ADAPTER pAd,
6294 IN BOOLEAN bPassive);
6296 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6297 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6299 ULONG AutoChBssInsertEntry(
6300 IN PRTMP_ADAPTER pAd,
6307 void AutoChBssTableInit(
6308 IN PRTMP_ADAPTER pAd);
6310 void ChannelInfoInit(
6311 IN PRTMP_ADAPTER pAd);
6313 void AutoChBssTableDestroy(
6314 IN PRTMP_ADAPTER pAd);
6316 void ChannelInfoDestroy(
6317 IN PRTMP_ADAPTER pAd);
6319 UCHAR New_ApAutoSelectChannel(
6320 IN PRTMP_ADAPTER pAd);
6322 BOOLEAN rtstrmactohex(
6326 BOOLEAN rtstrcasecmp(
6330 char *rtstrstruncasecmp(
6336 IN const char * s2);
6340 IN const char * ct);
6344 unsigned int *addr);
6346 ////////// common ioctl functions //////////
6347 INT Set_DriverVersion_Proc(
6348 IN PRTMP_ADAPTER pAd,
6351 INT Set_CountryRegion_Proc(
6352 IN PRTMP_ADAPTER pAd,
6355 INT Set_CountryRegionABand_Proc(
6356 IN PRTMP_ADAPTER pAd,
6359 INT Set_WirelessMode_Proc(
6360 IN PRTMP_ADAPTER pAd,
6363 INT Set_Channel_Proc(
6364 IN PRTMP_ADAPTER pAd,
6367 INT Set_ShortSlot_Proc(
6368 IN PRTMP_ADAPTER pAd,
6371 INT Set_TxPower_Proc(
6372 IN PRTMP_ADAPTER pAd,
6375 INT Set_BGProtection_Proc(
6376 IN PRTMP_ADAPTER pAd,
6379 INT Set_TxPreamble_Proc(
6380 IN PRTMP_ADAPTER pAd,
6383 INT Set_RTSThreshold_Proc(
6384 IN PRTMP_ADAPTER pAd,
6387 INT Set_FragThreshold_Proc(
6388 IN PRTMP_ADAPTER pAd,
6391 INT Set_TxBurst_Proc(
6392 IN PRTMP_ADAPTER pAd,
6395 #ifdef AGGREGATION_SUPPORT
6396 INT Set_PktAggregate_Proc(
6397 IN PRTMP_ADAPTER pAd,
6401 INT Set_IEEE80211H_Proc(
6402 IN PRTMP_ADAPTER pAd,
6407 IN PRTMP_ADAPTER pAd,
6411 INT Show_DescInfo_Proc(
6412 IN PRTMP_ADAPTER pAd,
6415 INT Set_ResetStatCounter_Proc(
6416 IN PRTMP_ADAPTER pAd,
6419 #ifdef DOT11_N_SUPPORT
6420 INT Set_BASetup_Proc(
6421 IN PRTMP_ADAPTER pAd,
6424 INT Set_BADecline_Proc(
6425 IN PRTMP_ADAPTER pAd,
6428 INT Set_BAOriTearDown_Proc(
6429 IN PRTMP_ADAPTER pAd,
6432 INT Set_BARecTearDown_Proc(
6433 IN PRTMP_ADAPTER pAd,
6437 IN PRTMP_ADAPTER pAd,
6441 IN PRTMP_ADAPTER pAd,
6445 IN PRTMP_ADAPTER pAd,
6448 INT Set_HtOpMode_Proc(
6449 IN PRTMP_ADAPTER pAd,
6452 INT Set_HtStbc_Proc(
6453 IN PRTMP_ADAPTER pAd,
6457 IN PRTMP_ADAPTER pAd,
6460 INT Set_HtExtcha_Proc(
6461 IN PRTMP_ADAPTER pAd,
6464 INT Set_HtMpduDensity_Proc(
6465 IN PRTMP_ADAPTER pAd,
6468 INT Set_HtBaWinSize_Proc(
6469 IN PRTMP_ADAPTER pAd,
6473 IN PRTMP_ADAPTER pAd,
6476 INT Set_HtLinkAdapt_Proc(
6477 IN PRTMP_ADAPTER pAd,
6480 INT Set_HtAmsdu_Proc(
6481 IN PRTMP_ADAPTER pAd,
6484 INT Set_HtAutoBa_Proc(
6485 IN PRTMP_ADAPTER pAd,
6488 INT Set_HtProtect_Proc(
6489 IN PRTMP_ADAPTER pAd,
6492 INT Set_HtMimoPs_Proc(
6493 IN PRTMP_ADAPTER pAd,
6497 INT Set_ForceShortGI_Proc(
6498 IN PRTMP_ADAPTER pAd,
6501 INT Set_ForceGF_Proc(
6502 IN PRTMP_ADAPTER pAd,
6506 IN PRTMP_ADAPTER pAd);
6508 INT Set_SendPSMPAction_Proc(
6509 IN PRTMP_ADAPTER pAd,
6512 INT Set_HtMIMOPSmode_Proc(
6513 IN PRTMP_ADAPTER pAd,
6517 INT Set_HtTxBASize_Proc(
6518 IN PRTMP_ADAPTER pAd,
6520 #endif // DOT11_N_SUPPORT //
6524 #ifdef CONFIG_STA_SUPPORT
6526 VOID RTMPSendDLSTearDownFrame(
6527 IN PRTMP_ADAPTER pAd,
6530 #ifdef DOT11_N_SUPPORT
6533 IN PRTMP_ADAPTER pAd,
6534 OUT PQUERYBA_TABLE pBAT);
6535 #endif // DOT11_N_SUPPORT //
6537 #ifdef WPA_SUPPLICANT_SUPPORT
6538 INT WpaCheckEapCode(
6539 IN PRTMP_ADAPTER pAd,
6544 VOID WpaSendMicFailureToWpaSupplicant(
6545 IN PRTMP_ADAPTER pAd,
6546 IN BOOLEAN bUnicast);
6548 VOID SendAssocIEsToWpaSupplicant(
6549 IN PRTMP_ADAPTER pAd);
6550 #endif // WPA_SUPPLICANT_SUPPORT //
6552 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6553 int wext_notify_event_assoc(
6554 IN RTMP_ADAPTER *pAd);
6555 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6557 #endif // CONFIG_STA_SUPPORT //
6561 #ifdef DOT11_N_SUPPORT
6562 VOID Handle_BSS_Width_Trigger_Events(
6563 IN PRTMP_ADAPTER pAd);
6565 void build_ext_channel_switch_ie(
6566 IN PRTMP_ADAPTER pAd,
6567 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6568 #endif // DOT11_N_SUPPORT //
6571 BOOLEAN APRxDoneInterruptHandle(
6572 IN PRTMP_ADAPTER pAd);
6574 BOOLEAN STARxDoneInterruptHandle(
6575 IN PRTMP_ADAPTER pAd,
6578 #ifdef DOT11_N_SUPPORT
6579 // AMPDU packet indication
6580 VOID Indicate_AMPDU_Packet(
6581 IN PRTMP_ADAPTER pAd,
6583 IN UCHAR FromWhichBSSID);
6585 // AMSDU packet indication
6586 VOID Indicate_AMSDU_Packet(
6587 IN PRTMP_ADAPTER pAd,
6589 IN UCHAR FromWhichBSSID);
6590 #endif // DOT11_N_SUPPORT //
6592 // Normal legacy Rx packet indication
6593 VOID Indicate_Legacy_Packet(
6594 IN PRTMP_ADAPTER pAd,
6596 IN UCHAR FromWhichBSSID);
6598 VOID Indicate_EAPOL_Packet(
6599 IN PRTMP_ADAPTER pAd,
6601 IN UCHAR FromWhichBSSID);
6603 void update_os_packet_info(
6604 IN PRTMP_ADAPTER pAd,
6606 IN UCHAR FromWhichBSSID);
6608 void wlan_802_11_to_802_3_packet(
6609 IN PRTMP_ADAPTER pAd,
6611 IN PUCHAR pHeader802_3,
6612 IN UCHAR FromWhichBSSID);
6614 UINT deaggregate_AMSDU_announce(
6615 IN PRTMP_ADAPTER pAd,
6616 PNDIS_PACKET pPacket,
6621 #ifdef CONFIG_STA_SUPPORT
6622 // remove LLC and get 802_3 Header
6623 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6625 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6627 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6629 _pDA = _pRxBlk->pHeader->Addr3; \
6630 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6634 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6636 _pDA = _pRxBlk->pHeader->Addr1; \
6637 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6638 _pSA = _pRxBlk->pHeader->Addr2; \
6640 _pSA = _pRxBlk->pHeader->Addr3; \
6644 _pDA = _pRxBlk->pHeader->Addr1; \
6645 _pSA = _pRxBlk->pHeader->Addr2; \
6649 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6650 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6652 #endif // CONFIG_STA_SUPPORT //
6655 BOOLEAN APFowardWirelessStaToWirelessSta(
6656 IN PRTMP_ADAPTER pAd,
6657 IN PNDIS_PACKET pPacket,
6658 IN ULONG FromWhichBSSID);
6660 VOID Announce_or_Forward_802_3_Packet(
6661 IN PRTMP_ADAPTER pAd,
6662 IN PNDIS_PACKET pPacket,
6663 IN UCHAR FromWhichBSSID);
6665 VOID Sta_Announce_or_Forward_802_3_Packet(
6666 IN PRTMP_ADAPTER pAd,
6667 IN PNDIS_PACKET pPacket,
6668 IN UCHAR FromWhichBSSID);
6671 #ifdef CONFIG_STA_SUPPORT
6672 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6673 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6674 //announce_802_3_packet(_pAd, _pPacket);
6675 #endif // CONFIG_STA_SUPPORT //
6678 PNDIS_PACKET DuplicatePacket(
6679 IN PRTMP_ADAPTER pAd,
6680 IN PNDIS_PACKET pPacket,
6681 IN UCHAR FromWhichBSSID);
6684 PNDIS_PACKET ClonePacket(
6685 IN PRTMP_ADAPTER pAd,
6686 IN PNDIS_PACKET pPacket,
6691 // Normal, AMPDU or AMSDU
6692 VOID CmmRxnonRalinkFrameIndicate(
6693 IN PRTMP_ADAPTER pAd,
6695 IN UCHAR FromWhichBSSID);
6697 VOID CmmRxRalinkFrameIndicate(
6698 IN PRTMP_ADAPTER pAd,
6699 IN MAC_TABLE_ENTRY *pEntry,
6701 IN UCHAR FromWhichBSSID);
6703 VOID Update_Rssi_Sample(
6704 IN PRTMP_ADAPTER pAd,
6705 IN RSSI_SAMPLE *pRssi,
6706 IN PRXWI_STRUC pRxWI);
6708 PNDIS_PACKET GetPacketFromRxRing(
6709 IN PRTMP_ADAPTER pAd,
6710 OUT PRT28XX_RXD_STRUC pSaveRxD,
6711 OUT BOOLEAN *pbReschedule,
6712 IN OUT UINT32 *pRxPending);
6714 PNDIS_PACKET RTMPDeFragmentDataFrame(
6715 IN PRTMP_ADAPTER pAd,
6718 ////////////////////////////////////////
6726 typedef struct _DefaultKeyIdxValue
6730 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6734 #ifdef CONFIG_STA_SUPPORT
6736 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6737 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6738 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6739 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6740 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6741 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6742 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6743 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6744 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6745 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6746 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6749 P80211ENUM_msgitem_status_no_value = 0x00
6752 P80211ENUM_truth_false = 0x00,
6753 P80211ENUM_truth_true = 0x01
6756 /* Definition from madwifi */
6762 } p80211item_uint32_t;
6767 #define WLAN_DEVNAMELEN_MAX 16
6768 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6769 p80211item_uint32_t hosttime;
6770 p80211item_uint32_t mactime;
6771 p80211item_uint32_t channel;
6772 p80211item_uint32_t rssi;
6773 p80211item_uint32_t sq;
6774 p80211item_uint32_t signal;
6775 p80211item_uint32_t noise;
6776 p80211item_uint32_t rate;
6777 p80211item_uint32_t istx;
6778 p80211item_uint32_t frmlen;
6779 } wlan_ng_prism2_header;
6781 /* The radio capture header precedes the 802.11 header. */
6782 typedef struct PACKED _ieee80211_radiotap_header {
6783 UINT8 it_version; /* Version 0. Only increases
6784 * for drastic changes,
6785 * introduction of compatible
6786 * new fields does not count.
6789 UINT16 it_len; /* length of the whole
6790 * header in bytes, including
6791 * it_version, it_pad,
6792 * it_len, and data fields.
6794 UINT32 it_present; /* A bitmap telling which
6795 * fields are present. Set bit 31
6796 * (0x80000000) to extend the
6797 * bitmap by another 32 bits.
6798 * Additional extensions are made
6799 * by setting bit 31.
6801 }ieee80211_radiotap_header ;
6803 enum ieee80211_radiotap_type {
6804 IEEE80211_RADIOTAP_TSFT = 0,
6805 IEEE80211_RADIOTAP_FLAGS = 1,
6806 IEEE80211_RADIOTAP_RATE = 2,
6807 IEEE80211_RADIOTAP_CHANNEL = 3,
6808 IEEE80211_RADIOTAP_FHSS = 4,
6809 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6810 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6811 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6812 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6813 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6814 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6815 IEEE80211_RADIOTAP_ANTENNA = 11,
6816 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6817 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6820 #define WLAN_RADIOTAP_PRESENT ( \
6821 (1 << IEEE80211_RADIOTAP_TSFT) | \
6822 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6823 (1 << IEEE80211_RADIOTAP_RATE) | \
6826 typedef struct _wlan_radiotap_header {
6827 ieee80211_radiotap_header wt_ihdr;
6831 } wlan_radiotap_header;
6832 /* Definition from madwifi */
6834 void send_monitor_packets(
6835 IN PRTMP_ADAPTER pAd,
6838 #if WIRELESS_EXT >= 12
6839 // This function will be called when query /proc
6840 struct iw_statistics *rt28xx_get_wireless_stats(
6841 IN struct net_device *net_dev);
6844 VOID RTMPSetDesiredRates(
6845 IN PRTMP_ADAPTER pAdapter,
6847 #endif // CONFIG_STA_SUPPORT //
6849 INT Set_FixedTxMode_Proc(
6850 IN PRTMP_ADAPTER pAd,
6853 static inline char* GetPhyMode(
6863 #ifdef DOT11_N_SUPPORT
6867 case MODE_HTGREENFIELD:
6869 #endif // DOT11_N_SUPPORT //
6876 static inline char* GetBW(
6886 #ifdef DOT11_N_SUPPORT
6889 #endif // DOT11_N_SUPPORT //
6896 VOID RT28xxThreadTerminate(
6897 IN RTMP_ADAPTER *pAd);
6899 BOOLEAN RT28XXChipsetCheck(
6902 BOOLEAN RT28XXNetDevInit(
6904 IN struct net_device *net_dev,
6905 IN RTMP_ADAPTER *pAd);
6907 BOOLEAN RT28XXProbePostConfig(
6909 IN RTMP_ADAPTER *pAd,
6912 VOID RT28XXDMADisable(
6913 IN RTMP_ADAPTER *pAd);
6915 VOID RT28XXDMAEnable(
6916 IN RTMP_ADAPTER *pAd);
6918 VOID RT28xx_UpdateBeaconToAsic(
6919 IN RTMP_ADAPTER * pAd,
6922 IN ULONG UpdatePos);
6925 IN struct net_device *net_dev,
6926 IN OUT struct ifreq *rq,
6930 #ifdef CONFIG_STA_SUPPORT
6931 INT rt28xx_sta_ioctl(
6932 IN struct net_device *net_dev,
6933 IN OUT struct ifreq *rq,
6935 #endif // CONFIG_STA_SUPPORT //
6937 BOOLEAN RT28XXSecurityKeyAdd(
6938 IN PRTMP_ADAPTER pAd,
6941 IN MAC_TABLE_ENTRY *pEntry);
6943 ////////////////////////////////////////
6944 PNDIS_PACKET GetPacketFromRxRing(
6945 IN PRTMP_ADAPTER pAd,
6946 OUT PRT28XX_RXD_STRUC pSaveRxD,
6947 OUT BOOLEAN *pbReschedule,
6948 IN OUT UINT32 *pRxPending);
6951 void kill_thread_task(PRTMP_ADAPTER pAd);
6953 void tbtt_tasklet(unsigned long data);
6956 VOID AsicTurnOffRFClk(
6957 IN PRTMP_ADAPTER pAd,
6960 VOID AsicTurnOnRFClk(
6961 IN PRTMP_ADAPTER pAd,
6966 // Function Prototype in rtusb_bulk.c
6968 VOID RTUSBInitTxDesc(
6969 IN PRTMP_ADAPTER pAd,
6970 IN PTX_CONTEXT pTxContext,
6971 IN UCHAR BulkOutPipeId,
6972 IN usb_complete_t Func);
6974 VOID RTUSBInitHTTxDesc(
6975 IN PRTMP_ADAPTER pAd,
6976 IN PHT_TX_CONTEXT pTxContext,
6977 IN UCHAR BulkOutPipeId,
6978 IN ULONG BulkOutSize,
6979 IN usb_complete_t Func);
6981 VOID RTUSBInitRxDesc(
6982 IN PRTMP_ADAPTER pAd,
6983 IN PRX_CONTEXT pRxContext);
6985 VOID RTUSBCleanUpDataBulkOutQueue(
6986 IN PRTMP_ADAPTER pAd);
6988 VOID RTUSBCancelPendingBulkOutIRP(
6989 IN PRTMP_ADAPTER pAd);
6991 VOID RTUSBBulkOutDataPacket(
6992 IN PRTMP_ADAPTER pAd,
6993 IN UCHAR BulkOutPipeId,
6996 VOID RTUSBBulkOutNullFrame(
6997 IN PRTMP_ADAPTER pAd);
6999 VOID RTUSBBulkOutRTSFrame(
7000 IN PRTMP_ADAPTER pAd);
7002 VOID RTUSBCancelPendingBulkInIRP(
7003 IN PRTMP_ADAPTER pAd);
7005 VOID RTUSBCancelPendingIRPs(
7006 IN PRTMP_ADAPTER pAd);
7008 VOID RTUSBBulkOutMLMEPacket(
7009 IN PRTMP_ADAPTER pAd,
7012 VOID RTUSBBulkOutPsPoll(
7013 IN PRTMP_ADAPTER pAd);
7015 VOID RTUSBCleanUpMLMEBulkOutQueue(
7016 IN PRTMP_ADAPTER pAd);
7018 VOID RTUSBKickBulkOut(
7019 IN PRTMP_ADAPTER pAd);
7021 VOID RTUSBBulkReceive(
7022 IN PRTMP_ADAPTER pAd);
7025 IN RTMP_ADAPTER *pAd);
7027 VOID RTUSBInitRxDesc(
7028 IN PRTMP_ADAPTER pAd,
7029 IN PRX_CONTEXT pRxContext);
7031 VOID RTUSBBulkRxHandle(
7032 IN unsigned long data);
7035 // Function Prototype in rtusb_io.c
7037 NTSTATUS RTUSBMultiRead(
7038 IN PRTMP_ADAPTER pAd,
7043 NTSTATUS RTUSBMultiWrite(
7044 IN PRTMP_ADAPTER pAd,
7049 NTSTATUS RTUSBMultiWrite_OneByte(
7050 IN PRTMP_ADAPTER pAd,
7054 NTSTATUS RTUSBReadBBPRegister(
7055 IN PRTMP_ADAPTER pAd,
7059 NTSTATUS RTUSBWriteBBPRegister(
7060 IN PRTMP_ADAPTER pAd,
7064 NTSTATUS RTUSBWriteRFRegister(
7065 IN PRTMP_ADAPTER pAd,
7068 NTSTATUS RT30xxWriteRFRegister(
7069 IN PRTMP_ADAPTER pAd,
7073 NTSTATUS RT30xxReadRFRegister(
7074 IN PRTMP_ADAPTER pAd,
7078 NTSTATUS RTUSB_VendorRequest(
7079 IN PRTMP_ADAPTER pAd,
7080 IN UINT32 TransferFlags,
7081 IN UCHAR ReservedBits,
7085 IN PVOID TransferBuffer,
7086 IN UINT32 TransferBufferLength);
7088 NTSTATUS RTUSBReadEEPROM(
7089 IN PRTMP_ADAPTER pAd,
7094 NTSTATUS RTUSBWriteEEPROM(
7095 IN PRTMP_ADAPTER pAd,
7100 VOID RTUSBPutToSleep(
7101 IN PRTMP_ADAPTER pAd);
7103 NTSTATUS RTUSBWakeUp(
7104 IN PRTMP_ADAPTER pAd);
7106 VOID RTUSBInitializeCmdQ(
7109 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7110 IN PRTMP_ADAPTER pAd,
7112 IN BOOLEAN SetInformation,
7113 IN PVOID pInformationBuffer,
7114 IN UINT32 InformationBufferLength);
7116 NDIS_STATUS RTUSBEnqueueInternalCmd(
7117 IN PRTMP_ADAPTER pAd,
7119 IN PVOID pInformationBuffer,
7120 IN UINT32 InformationBufferLength);
7122 VOID RTUSBDequeueCmd(
7124 OUT PCmdQElmt *pcmdqelmt);
7127 IN OUT PVOID Context);
7130 IN OUT PVOID Context);
7132 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7133 IN RTMP_ADAPTER *pAd,
7134 IN RALINK_TIMER_STRUCT *pTimer);
7136 BOOLEAN RT2870_TimerQ_Remove(
7137 IN RTMP_ADAPTER *pAd,
7138 IN RALINK_TIMER_STRUCT *pTimer);
7140 void RT2870_TimerQ_Exit(
7141 IN RTMP_ADAPTER *pAd);
7143 void RT2870_TimerQ_Init(
7144 IN RTMP_ADAPTER *pAd);
7146 VOID RT2870_BssBeaconExit(
7147 IN RTMP_ADAPTER *pAd);
7149 VOID RT2870_BssBeaconStop(
7150 IN RTMP_ADAPTER *pAd);
7152 VOID RT2870_BssBeaconStart(
7153 IN RTMP_ADAPTER * pAd);
7155 VOID RT2870_BssBeaconInit(
7156 IN RTMP_ADAPTER *pAd);
7158 VOID RT2870_WatchDog(
7159 IN RTMP_ADAPTER *pAd);
7161 NTSTATUS RTUSBWriteMACRegister(
7162 IN PRTMP_ADAPTER pAd,
7166 NTSTATUS RTUSBReadMACRegister(
7167 IN PRTMP_ADAPTER pAd,
7169 OUT PUINT32 pValue);
7171 NTSTATUS RTUSBSingleWrite(
7172 IN RTMP_ADAPTER *pAd,
7176 NTSTATUS RTUSBFirmwareRun(
7177 IN PRTMP_ADAPTER pAd);
7179 NTSTATUS RTUSBFirmwareWrite(
7180 IN PRTMP_ADAPTER pAd,
7184 NTSTATUS RTUSBFirmwareOpmode(
7185 IN PRTMP_ADAPTER pAd,
7186 OUT PUINT32 pValue);
7188 NTSTATUS RTUSBVenderReset(
7189 IN PRTMP_ADAPTER pAd);
7191 NDIS_STATUS RTUSBSetHardWareRegister(
7192 IN PRTMP_ADAPTER pAdapter,
7195 NDIS_STATUS RTUSBQueryHardWareRegister(
7196 IN PRTMP_ADAPTER pAdapter,
7200 IN PRTMP_ADAPTER pAd);
7203 NDIS_STATUS CreateThreads(
7204 IN struct net_device *net_dev );
7207 VOID MacTableInitialize(
7208 IN PRTMP_ADAPTER pAd);
7211 IN PRTMP_ADAPTER pAd,
7214 NDIS_STATUS RTMPWPAAddKeyProc(
7215 IN PRTMP_ADAPTER pAd,
7218 VOID AsicRxAntEvalAction(
7219 IN PRTMP_ADAPTER pAd);
7221 #if 0 // Mark because not used in RT28xx.
7222 NTSTATUS RTUSBRxPacket(
7223 IN PRTMP_ADAPTER pAd,
7224 IN BOOLEAN bBulkReceive);
7226 VOID RTUSBDequeueMLMEPacket(
7227 IN PRTMP_ADAPTER pAd);
7229 VOID RTUSBCleanUpMLMEWaitQueue(
7230 IN PRTMP_ADAPTER pAd);
7234 IN PRTMP_ADAPTER pAd,
7235 IN PUCHAR pHeader802_3,
7239 OUT PNDIS_PACKET *ppPacket);
7241 UINT deaggregate_AMSDU_announce(
7242 IN PRTMP_ADAPTER pAd,
7243 PNDIS_PACKET pPacket,
7247 NDIS_STATUS RTMPCheckRxError(
7248 IN PRTMP_ADAPTER pAd,
7249 IN PHEADER_802_11 pHeader,
7250 IN PRXWI_STRUC pRxWI,
7251 IN PRT28XX_RXD_STRUC pRxINFO);
7254 VOID RTUSBMlmeHardTransmit(
7255 IN PRTMP_ADAPTER pAd,
7256 IN PMGMT_STRUC pMgmt);
7262 VOID RTUSBResumeMsduTransmission(
7263 IN PRTMP_ADAPTER pAd);
7265 VOID RTUSBSuspendMsduTransmission(
7266 IN PRTMP_ADAPTER pAd);
7270 // Function Prototype in rtusb_data.c
7272 NDIS_STATUS RTUSBFreeDescriptorRequest(
7273 IN PRTMP_ADAPTER pAd,
7274 IN UCHAR BulkOutPipeId,
7275 IN UINT32 NumberRequired);
7278 BOOLEAN RTUSBNeedQueueBackForAgg(
7279 IN RTMP_ADAPTER *pAd,
7280 IN UCHAR BulkOutPipeId);
7283 VOID RTMPWriteTxInfo(
7284 IN PRTMP_ADAPTER pAd,
7285 IN PTXINFO_STRUC pTxInfo,
7286 IN USHORT USBDMApktLen,
7293 // Function Prototype in cmm_data_2870.c
7295 USHORT RtmpUSB_WriteSubTxResource(
7296 IN PRTMP_ADAPTER pAd,
7299 OUT USHORT *FreeNumber);
7301 USHORT RtmpUSB_WriteSingleTxResource(
7302 IN PRTMP_ADAPTER pAd,
7305 OUT USHORT *FreeNumber);
7307 USHORT RtmpUSB_WriteFragTxResource(
7308 IN PRTMP_ADAPTER pAd,
7311 OUT USHORT *FreeNumber);
7313 USHORT RtmpUSB_WriteMultiTxResource(
7314 IN PRTMP_ADAPTER pAd,
7317 OUT USHORT *FreeNumber);
7319 VOID RtmpUSB_FinalWriteTxResource(
7320 IN PRTMP_ADAPTER pAd,
7322 IN USHORT totalMPDUSize,
7325 VOID RtmpUSBDataLastTxIdx(
7326 IN PRTMP_ADAPTER pAd,
7330 VOID RtmpUSBDataKickOut(
7331 IN PRTMP_ADAPTER pAd,
7336 int RtmpUSBMgmtKickOut(
7337 IN RTMP_ADAPTER *pAd,
7339 IN PNDIS_PACKET pPacket,
7340 IN PUCHAR pSrcBufVA,
7343 VOID RtmpUSBNullFrameKickOut(
7344 IN RTMP_ADAPTER *pAd,
7346 IN UCHAR *pNullFrame,
7347 IN UINT32 frameLen);
7349 VOID RT28xxUsbStaAsicForceWakeup(
7350 IN PRTMP_ADAPTER pAd,
7351 IN BOOLEAN bFromTx);
7353 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7354 IN PRTMP_ADAPTER pAd,
7355 IN USHORT TbttNumToNextWakeUp);
7357 VOID RT28xxUsbMlmeRadioOn(
7358 IN PRTMP_ADAPTER pAd);
7360 VOID RT28xxUsbMlmeRadioOFF(
7361 IN PRTMP_ADAPTER pAd);
7364 ////////////////////////////////////////
7367 IN RTMP_ADAPTER *pAd);
7369 UINT32 QBSS_LoadElementAppend(
7370 IN RTMP_ADAPTER *pAd,
7373 VOID QBSS_LoadUpdate(
7374 IN RTMP_ADAPTER *pAd);
7376 ///////////////////////////////////////
7377 INT RTMPShowCfgValue(
7378 IN PRTMP_ADAPTER pAd,
7382 PCHAR RTMPGetRalinkAuthModeStr(
7383 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7385 PCHAR RTMPGetRalinkEncryModeStr(
7386 IN USHORT encryMode);
7387 //////////////////////////////////////
7389 #ifdef CONFIG_STA_SUPPORT
7390 VOID AsicStaBbpTuning(
7391 IN PRTMP_ADAPTER pAd);
7393 BOOLEAN StaAddMacTableEntry(
7394 IN PRTMP_ADAPTER pAd,
7395 IN PMAC_TABLE_ENTRY pEntry,
7396 IN UCHAR MaxSupportedRateIn500Kbps,
7397 IN HT_CAPABILITY_IE *pHtCapability,
7398 IN UCHAR HtCapabilityLen,
7399 IN USHORT CapabilityInfo);
7400 #endif // CONFIG_STA_SUPPORT //
7402 void RTMP_IndicateMediaState(
7403 IN PRTMP_ADAPTER pAd);
7405 VOID ReSyncBeaconTime(
7406 IN PRTMP_ADAPTER pAd);
7408 VOID RTMPSetAGCInitValue(
7409 IN PRTMP_ADAPTER pAd,
7410 IN UCHAR BandWidth);
7412 int rt28xx_close(IN PNET_DEV dev);
7413 int rt28xx_open(IN PNET_DEV dev);
7415 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7417 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7418 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7420 if (VIRTUAL_IF_NUM(pAd) == 0)
7422 if (rt28xx_open(pAd->net_dev) != 0)
7428 VIRTUAL_IF_INC(pAd);
7432 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7434 VIRTUAL_IF_DEC(pAd);
7435 if (VIRTUAL_IF_NUM(pAd) == 0)
7436 rt28xx_close(pAd->net_dev);
7441 #endif // __RTMP_H__