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 ----------------------------
2492 typedef struct _BLOCK_QUEUE_ENTRY
2494 BOOLEAN SwTxQueueBlockFlag;
2495 LIST_HEADER NetIfList;
2496 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2497 #endif // BLOCK_NET_IF //
2502 BOOLEAN bGreenField;
2507 typedef struct _INF_PCI_CONFIG
2509 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2512 typedef struct _INF_USB_CONFIG
2514 UINT BulkInEpAddr; // bulk-in endpoint address
2515 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2519 #ifdef IKANOS_VX_1X0
2520 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2522 struct IKANOS_TX_INFO
2524 struct net_device *netdev;
2525 IkanosWlanTxCbFuncP *fp;
2527 #endif // IKANOS_VX_1X0 //
2530 #define DIAGNOSE_TIME 10 // 10 sec
2531 typedef struct _RtmpDiagStrcut_
2532 { // Diagnosis Related element
2533 unsigned char inited;
2535 unsigned char ArrayStartIdx;
2536 unsigned char ArrayCurIdx;
2538 USHORT TxDataCnt[DIAGNOSE_TIME];
2539 USHORT TxFailCnt[DIAGNOSE_TIME];
2540 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2541 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2542 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2543 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2544 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2546 USHORT TxAggCnt[DIAGNOSE_TIME];
2547 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2548 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2549 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2550 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2551 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2554 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2555 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2556 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2557 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2559 #endif // DBG_DIAGNOSE //
2563 // The miniport adapter structure
2565 typedef struct _RTMP_ADAPTER
2567 PVOID OS_Cookie; // save specific structure relative to OS
2573 NDIS_SPIN_LOCK irq_lock;
2577 /*****************************************************************************************/
2578 /* USB related parameters */
2579 /*****************************************************************************************/
2580 struct usb_config_descriptor *config;
2581 UINT BulkInEpAddr; // bulk-in endpoint address
2582 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2585 USHORT BulkOutMaxPacketSize;
2586 USHORT BulkInMaxPacketSize;
2588 //======Control Flags
2589 LONG PendingIoCount;
2591 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2594 //======Timer Thread
2595 RT2870_TIMER_QUEUE TimerQ;
2596 NDIS_SPIN_LOCK TimerQLock;
2601 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2603 BOOLEAN TimerFunc_kill;
2607 //======Semaphores (event)
2608 struct semaphore mlme_semaphore; /* to sleep thread on */
2609 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2610 struct semaphore RTUSBTimer_semaphore;
2611 #ifdef INF_AMAZON_SE
2612 struct semaphore UsbVendorReq_semaphore;
2613 PVOID UsbVendorReqBuf;
2614 #endif // INF_AMAZON_SE //
2615 struct completion TimerQComplete;
2616 struct completion mlmeComplete;
2617 struct completion CmdQComplete;
2618 wait_queue_head_t *wait;
2622 /*****************************************************************************************/
2623 /* Both PCI/USB related parameters */
2624 /*****************************************************************************************/
2627 /*****************************************************************************************/
2628 /* Tx related parameters */
2629 /*****************************************************************************************/
2630 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2631 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2634 // Data related context and AC specified, 4 AC supported
2635 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2636 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2638 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2639 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2641 // 4 sets of Bulk Out index and pending flag
2642 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2644 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2645 UCHAR bulkResetPipeid;
2646 BOOLEAN MgmtBulkPending;
2647 ULONG bulkResetReq[6];
2650 // resource for software backlog queues
2651 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2652 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2654 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2655 RTMP_MGMT_RING MgmtRing;
2656 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2659 /*****************************************************************************************/
2660 /* Rx related parameters */
2661 /*****************************************************************************************/
2665 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2666 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2667 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2668 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2669 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2670 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2671 ULONG TransferBufferLength; // current length of the packet buffer
2672 ULONG ReadPosition; // current read position in a packet buffer
2676 /*****************************************************************************************/
2677 /* ASIC related parameters */
2678 /*****************************************************************************************/
2679 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2681 // ---------------------------
2683 // ---------------------------
2684 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2685 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2686 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2687 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2689 // ---------------------------
2691 // ---------------------------
2692 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2693 UCHAR BbpRssiToDbmDelta;
2694 BBP_R66_TUNING BbpTuning;
2696 // ----------------------------
2698 // ----------------------------
2699 UCHAR RfIcType; // RFIC_xxx
2700 ULONG RfFreqOffset; // Frequency offset for channel switching
2701 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2703 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2704 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2706 // This soft Rx Antenna Diversity mechanism is used only when user set
2707 // RX Antenna = DIVERSITY ON
2708 SOFT_RX_ANT_DIVERSITY RxAnt;
2711 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2712 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2713 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2714 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2716 UCHAR ChannelListNum; // number of channel in ChannelList[]
2719 ULONG Tx20MPwrCfgABand[5];
2720 ULONG Tx20MPwrCfgGBand[5];
2721 ULONG Tx40MPwrCfgABand[5];
2722 ULONG Tx40MPwrCfgGBand[5];
2724 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2725 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2726 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2727 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2728 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2729 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2731 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2732 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2733 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2734 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2735 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2736 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2738 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2739 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2740 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2741 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2744 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2745 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2746 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2747 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2750 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2751 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2752 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2753 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2755 // ----------------------------
2757 // ----------------------------
2758 MCU_LEDCS_STRUC LedCntl;
2759 USHORT Led1; // read from EEPROM 0x3c
2760 USHORT Led2; // EEPROM 0x3e
2761 USHORT Led3; // EEPROM 0x40
2762 UCHAR LedIndicatorStregth;
2763 UCHAR RssiSingalstrengthOffet;
2764 BOOLEAN bLedOnScanning;
2767 /*****************************************************************************************/
2768 /* 802.11 related parameters */
2769 /*****************************************************************************************/
2770 // outgoing BEACON frame buffer and corresponding TXD
2771 TXWI_STRUC BeaconTxWI;
2773 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2775 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2776 PSPOLL_FRAME PsPollFrame;
2777 HEADER_802_11 NullFrame;
2780 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2781 TX_CONTEXT NullContext;
2782 TX_CONTEXT PsPollContext;
2783 TX_CONTEXT RTSContext;
2788 //=========AP===========
2791 //=======STA===========
2792 #ifdef CONFIG_STA_SUPPORT
2793 /* Modified by Wu Xi-Kun 4/21/2006 */
2794 // -----------------------------------------------
2795 // STA specific configuration & operation status
2796 // used only when pAd->OpMode == OPMODE_STA
2797 // -----------------------------------------------
2798 STA_ADMIN_CONFIG StaCfg; // user desired settings
2799 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2800 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2801 NDIS_MEDIA_STATE PreMediaState;
2802 #endif // CONFIG_STA_SUPPORT //
2804 //=======Common===========
2805 // OP mode: either AP or STA
2806 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2808 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2811 // configuration: read from Registry & E2PROM
2812 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2813 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2814 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2816 // ------------------------------------------------------
2817 // common configuration to both OPMODE_STA and OPMODE_AP
2818 // ------------------------------------------------------
2819 COMMON_CONFIG CommonCfg;
2822 // AP needs those vaiables for site survey feature.
2823 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2824 BSS_TABLE ScanTab; // store the latest SCAN result
2826 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2827 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2828 NDIS_SPIN_LOCK MacTabLock;
2830 #ifdef DOT11_N_SUPPORT
2832 #endif // DOT11_N_SUPPORT //
2833 NDIS_SPIN_LOCK BATabLock;
2834 RALINK_TIMER_STRUCT RECBATimer;
2836 // encryption/decryption KEY tables
2837 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2839 // RX re-assembly buffer for fragmentation
2840 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2843 COUNTER_802_3 Counters8023; // 802.3 counters
2844 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2845 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2846 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2847 PRIVATE_STRUC PrivateInfo; // Private information & counters
2849 // flags, see fRTMP_ADAPTER_xxx flags
2850 ULONG Flags; // Represent current device status
2852 // current TX sequence #
2855 // Control disconnect / connect event generation
2856 //+++Didn't used anymore
2861 //+++Used only for Station
2862 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2865 ULONG ExtraInfo; // Extra information for displaying status
2866 ULONG SystemErrorBitmap; // b0: E2PROM version error
2868 //+++Didn't used anymore
2869 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2872 // ---------------------------
2874 // ---------------------------
2875 RT_802_11_EVENT_TABLE EventTab;
2880 /*****************************************************************************************/
2881 /* Statistic related parameters */
2882 /*****************************************************************************************/
2884 ULONG BulkOutDataOneSecCount;
2885 ULONG BulkInDataOneSecCount;
2886 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2887 ULONG watchDogRxCnt;
2888 ULONG watchDogRxOverFlowCnt;
2889 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2892 BOOLEAN bUpdateBcnCntDone;
2893 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2894 // ----------------------------
2896 // ----------------------------
2897 //ULONG DebugSetting[4];
2898 BOOLEAN bBanAllBaSetup;
2899 BOOLEAN bPromiscuous;
2901 // ----------------------------
2902 // rt2860c emulation-use Parameters
2903 // ----------------------------
2906 ULONG cfendaccu[30];
2907 ULONG bacontent[16];
2908 ULONG rxint[RX_RING_SIZE+1];
2911 BOOLEAN bForcePrintTX;
2912 BOOLEAN bForcePrintRX;
2913 BOOLEAN bDisablescanning; //defined in RT2870 USB
2914 BOOLEAN bStaFifoTest;
2915 BOOLEAN bProtectionTest;
2917 BOOLEAN bGenOneHCCA;
2918 BOOLEAN bBroadComHT;
2919 //+++Following add from RT2870 USB.
2921 ULONG BulkOutComplete;
2922 ULONG BulkOutCompleteOther;
2923 ULONG BulkOutCompleteCancel; // seems not use now?
2925 ULONG BulkInComplete;
2926 ULONG BulkInCompleteFail;
2929 struct wificonf WIFItestbed;
2931 #ifdef DOT11_N_SUPPORT
2932 struct reordering_mpdu_pool mpdu_blk_pool;
2933 #endif // DOT11_N_SUPPORT //
2935 ULONG OneSecondnonBEpackets; // record non BE packets per second
2937 #if WIRELESS_EXT >= 12
2938 struct iw_statistics iw_stats;
2941 struct net_device_stats stats;
2944 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
2945 #endif // BLOCK_NET_IF //
2949 #ifdef MULTIPLE_CARD_SUPPORT
2951 UCHAR MC_FileName[256];
2952 #endif // MULTIPLE_CARD_SUPPORT //
2954 ULONG TbttTickCount;
2955 #ifdef PCI_MSI_SUPPORT
2957 #endif // PCI_MSI_SUPPORT //
2962 #define TIME_BASE (1000000/OS_HZ)
2963 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2964 UCHAR flg_be_adjust;
2965 ULONG be_adjust_last_time;
2968 #ifdef IKANOS_VX_1X0
2969 struct IKANOS_TX_INFO IkanosTxInfo;
2970 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2971 #endif // IKANOS_VX_1X0 //
2975 RtmpDiagStruct DiagStruct;
2976 #endif // DBG_DIAGNOSE //
2979 UINT8 PM_FlgSuspend;
2980 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2983 // Cisco IAPP format
2985 typedef struct _CISCO_IAPP_CONTENT_
2987 USHORT Length; //IAPP Length
2988 UCHAR MessageType; //IAPP type
2989 UCHAR FunctionCode; //IAPP function type
2990 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2991 UCHAR SourceMAC[MAC_ADDR_LEN];
2992 USHORT Tag; //Tag(element IE) - Adjacent AP report
2993 USHORT TagLength; //Length of element not including 4 byte header
2994 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2995 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2998 UCHAR Ssid[MAX_LEN_OF_SSID];
2999 USHORT Seconds; //Seconds that the client has been disassociated.
3000 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3002 #define DELAYINTMASK 0x0003fffb
3003 #define INTMASK 0x0003fffb
3004 #define IndMask 0x0003fffc
3005 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3006 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3007 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3008 #define TxCoherent 0x00020000 // tx coherent
3009 #define RxCoherent 0x00010000 // rx coherent
3010 #define McuCommand 0x00000200 // mcu
3011 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3012 #define TBTTInt 0x00000800 // TBTT interrupt
3013 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3014 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3015 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3018 typedef struct _RX_BLK_
3020 // RXD_STRUC RxD; // sample
3021 RT28XX_RXD_STRUC RxD;
3023 PHEADER_802_11 pHeader;
3024 PNDIS_PACKET pRxPacket;
3028 UCHAR UserPriority; // for calculate TKIP MIC using
3032 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3033 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3034 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3037 #define fRX_WDS 0x0001
3038 #define fRX_AMSDU 0x0002
3039 #define fRX_ARALINK 0x0004
3040 #define fRX_HTC 0x0008
3041 #define fRX_PAD 0x0010
3042 #define fRX_AMPDU 0x0020
3043 #define fRX_QOS 0x0040
3044 #define fRX_INFRA 0x0080
3045 #define fRX_EAP 0x0100
3046 #define fRX_MESH 0x0200
3047 #define fRX_APCLI 0x0400
3048 #define fRX_DLS 0x0800
3049 #define fRX_WPI 0x1000
3051 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3052 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3053 #define LENGTH_ARALINK_HEADER_FIELD 2
3055 #define TX_UNKOWN_FRAME 0x00
3056 #define TX_MCAST_FRAME 0x01
3057 #define TX_LEGACY_FRAME 0x02
3058 #define TX_AMPDU_FRAME 0x04
3059 #define TX_AMSDU_FRAME 0x08
3060 #define TX_RALINK_FRAME 0x10
3061 #define TX_FRAG_FRAME 0x20
3064 // Currently the sizeof(TX_BLK) is 148 bytes.
3065 typedef struct _TX_BLK_
3068 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3069 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3070 USHORT TotalFragNum; // Total frame fragments required in one batch
3071 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3073 QUEUE_HEADER TxPacketList;
3074 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3075 HTTRANSMIT_SETTING *pTransmit;
3077 // Following structure used for the characteristics of a specific packet.
3078 PNDIS_PACKET pPacket;
3079 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3080 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3081 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3082 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3083 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3084 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3085 UCHAR HdrPadLen; // recording Header Padding Length;
3086 UCHAR apidx; // The interface associated to this packet
3087 UCHAR Wcid; // The MAC entry associated to this packet
3088 UCHAR UserPriority; // priority class of packet
3089 UCHAR FrameGap; // what kind of IFS this packet use
3090 UCHAR MpduReqNum; // number of fragments of this frame
3091 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3092 UCHAR CipherAlg; // cipher alogrithm
3097 USHORT Flags; //See following definitions for detail.
3099 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3100 ULONG Priv; // Hardware specific value saved in here.
3104 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3105 #define fTX_bAckRequired 0x0002 // the packet need ack response
3106 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3107 #define fTX_bHTRate 0x0008 // allow to use HT rate
3108 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3109 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3110 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3111 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3112 #define fTX_bWMM 0x0080 // QOS Data
3114 #define fTX_bClearEAPFrame 0x0100
3117 #ifdef CONFIG_STA_SUPPORT
3118 #endif // CONFIG_STA_SUPPORT //
3122 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3125 (_pTxBlk->Flags |= _flag) \
3127 (_pTxBlk->Flags &= ~(_flag)) \
3130 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3131 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3132 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3138 //------------------------------------------------------------------------------------------
3142 #ifdef RT_BIG_ENDIAN
3143 static inline VOID WriteBackToDescriptor(
3146 IN BOOLEAN DoEncrypt,
3147 IN ULONG DescriptorType)
3151 p1 = ((UINT32 *)Dest);
3152 p2 = ((UINT32 *)Src);
3157 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3161 ========================================================================
3163 Routine Description:
3164 Endian conversion of Tx/Rx descriptor .
3167 pAd Pointer to our adapter
3168 pData Pointer to Tx/Rx descriptor
3169 DescriptorType Direction of the frame
3175 Call this function when read or update descriptor
3176 ========================================================================
3178 static inline VOID RTMPWIEndianChange(
3180 IN ULONG DescriptorType)
3185 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3187 if(DescriptorType == TYPE_TXWI)
3189 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3190 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3194 for(i=0; i < size/4 ; i++)
3195 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3200 ========================================================================
3202 Routine Description:
3203 Endian conversion of Tx/Rx descriptor .
3206 pAd Pointer to our adapter
3207 pData Pointer to Tx/Rx descriptor
3208 DescriptorType Direction of the frame
3214 Call this function when read or update descriptor
3215 ========================================================================
3219 static inline VOID RTMPDescriptorEndianChange(
3221 IN ULONG DescriptorType)
3223 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3227 ========================================================================
3229 Routine Description:
3230 Endian conversion of all kinds of 802.11 frames .
3233 pAd Pointer to our adapter
3234 pData Pointer to the 802.11 frame structure
3235 Dir Direction of the frame
3236 FromRxDoneInt Caller is from RxDone interrupt
3242 Call this function when read or update buffer data
3243 ========================================================================
3245 static inline VOID RTMPFrameEndianChange(
3246 IN PRTMP_ADAPTER pAd,
3249 IN BOOLEAN FromRxDoneInt)
3251 PHEADER_802_11 pFrame;
3254 // swab 16 bit fields - Frame Control field
3257 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3260 pFrame = (PHEADER_802_11) pData;
3261 pMacHdr = (PUCHAR) pFrame;
3263 // swab 16 bit fields - Duration/ID field
3264 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3266 // swab 16 bit fields - Sequence Control field
3267 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3269 if(pFrame->FC.Type == BTYPE_MGMT)
3271 switch(pFrame->FC.SubType)
3273 case SUBTYPE_ASSOC_REQ:
3274 case SUBTYPE_REASSOC_REQ:
3275 // swab 16 bit fields - CapabilityInfo field
3276 pMacHdr += sizeof(HEADER_802_11);
3277 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3279 // swab 16 bit fields - Listen Interval field
3281 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3284 case SUBTYPE_ASSOC_RSP:
3285 case SUBTYPE_REASSOC_RSP:
3286 // swab 16 bit fields - CapabilityInfo field
3287 pMacHdr += sizeof(HEADER_802_11);
3288 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3290 // swab 16 bit fields - Status Code field
3292 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3294 // swab 16 bit fields - AID field
3296 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3300 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3301 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3302 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3306 // swab 16 bit fields - Auth Alg No. field
3307 pMacHdr += sizeof(HEADER_802_11);
3308 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3310 // swab 16 bit fields - Auth Seq No. field
3312 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3314 // swab 16 bit fields - Status Code field
3316 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3320 case SUBTYPE_BEACON:
3321 case SUBTYPE_PROBE_RSP:
3322 // swab 16 bit fields - BeaconInterval field
3323 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3324 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3326 // swab 16 bit fields - CapabilityInfo field
3327 pMacHdr += sizeof(USHORT);
3328 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3331 case SUBTYPE_DEAUTH:
3332 case SUBTYPE_DISASSOC:
3333 // swab 16 bit fields - Reason code field
3334 pMacHdr += sizeof(HEADER_802_11);
3335 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3339 else if( pFrame->FC.Type == BTYPE_DATA )
3342 else if(pFrame->FC.Type == BTYPE_CNTL)
3344 switch(pFrame->FC.SubType)
3346 case SUBTYPE_BLOCK_ACK_REQ:
3348 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3349 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3350 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3353 case SUBTYPE_BLOCK_ACK:
3354 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3355 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3359 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3360 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3366 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3369 // swab 16 bit fields - Frame Control
3370 if(Dir == DIR_WRITE)
3372 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3375 #endif // RT_BIG_ENDIAN //
3378 static inline VOID ConvertMulticastIP2MAC(
3380 IN PUCHAR *ppMacAddr,
3381 IN UINT16 ProtoType)
3383 if (pIpAddr == NULL)
3386 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3392 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3393 *(*ppMacAddr) = 0x33;
3394 *(*ppMacAddr + 1) = 0x33;
3395 *(*ppMacAddr + 2) = pIpAddr[12];
3396 *(*ppMacAddr + 3) = pIpAddr[13];
3397 *(*ppMacAddr + 4) = pIpAddr[14];
3398 *(*ppMacAddr + 5) = pIpAddr[15];
3403 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3404 *(*ppMacAddr) = 0x01;
3405 *(*ppMacAddr + 1) = 0x00;
3406 *(*ppMacAddr + 2) = 0x5e;
3407 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3408 *(*ppMacAddr + 4) = pIpAddr[2];
3409 *(*ppMacAddr + 5) = pIpAddr[3];
3416 BOOLEAN RTMPCheckForHang(
3417 IN NDIS_HANDLE MiniportAdapterContext
3421 IN NDIS_HANDLE MiniportAdapterContext
3425 // Private routines in rtmp_init.c
3427 NDIS_STATUS RTMPAllocAdapterBlock(
3429 OUT PRTMP_ADAPTER *ppAdapter
3432 NDIS_STATUS RTMPAllocTxRxRingMemory(
3433 IN PRTMP_ADAPTER pAd
3436 NDIS_STATUS RTMPFindAdapter(
3437 IN PRTMP_ADAPTER pAd,
3438 IN NDIS_HANDLE WrapperConfigurationContext
3441 NDIS_STATUS RTMPReadParametersHook(
3442 IN PRTMP_ADAPTER pAd
3445 VOID RTMPFreeAdapter(
3446 IN PRTMP_ADAPTER pAd
3449 NDIS_STATUS NICReadRegParameters(
3450 IN PRTMP_ADAPTER pAd,
3451 IN NDIS_HANDLE WrapperConfigurationContext
3455 VOID NICInitRT30xxRFRegisters(
3456 IN PRTMP_ADAPTER pAd);
3459 VOID NICReadEEPROMParameters(
3460 IN PRTMP_ADAPTER pAd,
3461 IN PUCHAR mac_addr);
3463 VOID NICInitAsicFromEEPROM(
3464 IN PRTMP_ADAPTER pAd);
3466 VOID NICInitTxRxRingAndBacklogQueue(
3467 IN PRTMP_ADAPTER pAd);
3469 NDIS_STATUS NICInitializeAdapter(
3470 IN PRTMP_ADAPTER pAd,
3471 IN BOOLEAN bHardReset);
3473 NDIS_STATUS NICInitializeAsic(
3474 IN PRTMP_ADAPTER pAd,
3475 IN BOOLEAN bHardReset);
3478 IN PRTMP_ADAPTER pAd);
3480 VOID RTMPRingCleanUp(
3481 IN PRTMP_ADAPTER pAd,
3485 IN PRTMP_ADAPTER pAd);
3487 NDIS_STATUS DbgSendPacket(
3488 IN PRTMP_ADAPTER pAd,
3489 IN PNDIS_PACKET pPacket);
3492 IN PRTMP_ADAPTER pAd);
3494 VOID NICResetFromError(
3495 IN PRTMP_ADAPTER pAd);
3497 VOID NICEraseFirmware(
3498 IN PRTMP_ADAPTER pAd);
3500 NDIS_STATUS NICLoadFirmware(
3501 IN PRTMP_ADAPTER pAd);
3503 NDIS_STATUS NICLoadRateSwitchingParams(
3504 IN PRTMP_ADAPTER pAd);
3506 BOOLEAN NICCheckForHang(
3507 IN PRTMP_ADAPTER pAd);
3509 VOID NICUpdateFifoStaCounters(
3510 IN PRTMP_ADAPTER pAd);
3512 VOID NICUpdateRawCounters(
3513 IN PRTMP_ADAPTER pAd);
3516 ULONG RTMPEqualMemory(
3522 ULONG RTMPNotAllZero(
3526 VOID RTMPZeroMemory(
3530 ULONG RTMPCompareMemory(
3535 VOID RTMPMoveMemory(
3548 VOID RTMPPatchMacBbpBug(
3549 IN PRTMP_ADAPTER pAd);
3551 VOID RTMPPatchCardBus(
3552 IN PRTMP_ADAPTER pAdapter);
3554 VOID RTMPPatchRalinkCardBus(
3555 IN PRTMP_ADAPTER pAdapter,
3558 ULONG RTMPReadCBConfig(
3564 VOID RTMPWriteCBConfig(
3572 IN PRTMP_ADAPTER pAd,
3573 IN PRALINK_TIMER_STRUCT pTimer,
3574 IN PVOID pTimerFunc,
3579 IN PRALINK_TIMER_STRUCT pTimer,
3584 IN PRALINK_TIMER_STRUCT pTimer,
3587 VOID RTMPCancelTimer(
3588 IN PRALINK_TIMER_STRUCT pTimer,
3589 OUT BOOLEAN *pCancelled);
3592 IN PRTMP_ADAPTER pAd,
3595 VOID RTMPSetSignalLED(
3596 IN PRTMP_ADAPTER pAd,
3597 IN NDIS_802_11_RSSI Dbm);
3599 VOID RTMPEnableRxTx(
3600 IN PRTMP_ADAPTER pAd);
3603 // prototype in action.c
3605 VOID ActionStateMachineInit(
3606 IN PRTMP_ADAPTER pAd,
3607 IN STATE_MACHINE *S,
3608 OUT STATE_MACHINE_FUNC Trans[]);
3610 VOID MlmeADDBAAction(
3611 IN PRTMP_ADAPTER pAd,
3612 IN MLME_QUEUE_ELEM *Elem);
3614 VOID MlmeDELBAAction(
3615 IN PRTMP_ADAPTER pAd,
3616 IN MLME_QUEUE_ELEM *Elem);
3619 IN PRTMP_ADAPTER pAd,
3620 IN MLME_QUEUE_ELEM *Elem);
3622 VOID MlmeInvalidAction(
3623 IN PRTMP_ADAPTER pAd,
3624 IN MLME_QUEUE_ELEM *Elem);
3627 IN PRTMP_ADAPTER pAd,
3628 IN MLME_QUEUE_ELEM *Elem);
3630 #ifdef DOT11_N_SUPPORT
3631 VOID PeerAddBAReqAction(
3632 IN PRTMP_ADAPTER pAd,
3633 IN MLME_QUEUE_ELEM *Elem);
3635 VOID PeerAddBARspAction(
3636 IN PRTMP_ADAPTER pAd,
3637 IN MLME_QUEUE_ELEM *Elem);
3639 VOID PeerDelBAAction(
3640 IN PRTMP_ADAPTER pAd,
3641 IN MLME_QUEUE_ELEM *Elem);
3644 IN PRTMP_ADAPTER pAd,
3645 IN MLME_QUEUE_ELEM *Elem);
3646 #endif // DOT11_N_SUPPORT //
3648 VOID SendPSMPAction(
3649 IN PRTMP_ADAPTER pAd,
3654 #ifdef DOT11N_DRAFT3
3655 VOID SendBSS2040CoexistMgmtAction(
3656 IN PRTMP_ADAPTER pAd,
3661 VOID SendNotifyBWActionFrame(
3662 IN PRTMP_ADAPTER pAd,
3666 BOOLEAN ChannelSwitchSanityCheck(
3667 IN PRTMP_ADAPTER pAd,
3669 IN UCHAR NewChannel,
3670 IN UCHAR Secondary);
3672 VOID ChannelSwitchAction(
3673 IN PRTMP_ADAPTER pAd,
3676 IN UCHAR Secondary);
3678 ULONG BuildIntolerantChannelRep(
3679 IN PRTMP_ADAPTER pAd,
3682 VOID Update2040CoexistFrameAndNotify(
3683 IN PRTMP_ADAPTER pAd,
3685 IN BOOLEAN bAddIntolerantCha);
3687 VOID Send2040CoexistAction(
3688 IN PRTMP_ADAPTER pAd,
3690 IN BOOLEAN bAddIntolerantCha);
3691 #endif // DOT11N_DRAFT3 //
3694 IN PRTMP_ADAPTER pAd,
3695 IN MLME_QUEUE_ELEM *Elem);
3697 VOID PeerPublicAction(
3698 IN PRTMP_ADAPTER pAd,
3699 IN MLME_QUEUE_ELEM *Elem);
3701 #ifdef CONFIG_STA_SUPPORT
3702 VOID StaPublicAction(
3703 IN PRTMP_ADAPTER pAd,
3704 IN UCHAR Bss2040Coexist);
3705 #endif // CONFIG_STA_SUPPORT //
3708 VOID PeerBSSTranAction(
3709 IN PRTMP_ADAPTER pAd,
3710 IN MLME_QUEUE_ELEM *Elem);
3712 #ifdef DOT11_N_SUPPORT
3714 IN PRTMP_ADAPTER pAd,
3715 IN MLME_QUEUE_ELEM *Elem);
3716 #endif // DOT11_N_SUPPORT //
3719 IN PRTMP_ADAPTER pAd,
3720 IN MLME_QUEUE_ELEM *Elem);
3722 #ifdef QOS_DLS_SUPPORT
3724 IN PRTMP_ADAPTER pAd,
3725 IN MLME_QUEUE_ELEM *Elem);
3726 #endif // QOS_DLS_SUPPORT //
3728 #ifdef CONFIG_STA_SUPPORT
3729 #ifdef QOS_DLS_SUPPORT
3731 IN PRTMP_ADAPTER pAd,
3732 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3733 IN PRT_802_11_DLS pDls,
3735 #endif // QOS_DLS_SUPPORT //
3736 #endif // CONFIG_STA_SUPPORT //
3738 #ifdef DOT11_N_SUPPORT
3739 VOID RECBATimerTimeout(
3740 IN PVOID SystemSpecific1,
3741 IN PVOID FunctionContext,
3742 IN PVOID SystemSpecific2,
3743 IN PVOID SystemSpecific3);
3745 VOID ORIBATimerTimeout(
3746 IN PRTMP_ADAPTER pAd);
3748 VOID SendRefreshBAR(
3749 IN PRTMP_ADAPTER pAd,
3750 IN MAC_TABLE_ENTRY *pEntry);
3751 #endif // DOT11_N_SUPPORT //
3754 IN PRTMP_ADAPTER pAd,
3755 IN OUT PHEADER_802_11 pHdr80211,
3761 IN PRTMP_ADAPTER pAd,
3762 IN OUT PFRAME_BAR pCntlBar,
3766 VOID InsertActField(
3767 IN PRTMP_ADAPTER pAd,
3768 OUT PUCHAR pFrameBuf,
3769 OUT PULONG pFrameLen,
3773 BOOLEAN QosBADataParse(
3774 IN PRTMP_ADAPTER pAd,
3776 IN PUCHAR p8023Header,
3780 IN UCHAR DataOffset,
3782 IN UINT CurRxIndex);
3784 #ifdef DOT11_N_SUPPORT
3785 BOOLEAN CntlEnqueueForRecv(
3786 IN PRTMP_ADAPTER pAd,
3789 IN PFRAME_BA_REQ pMsg);
3791 VOID BaAutoManSwitch(
3792 IN PRTMP_ADAPTER pAd);
3793 #endif // DOT11_N_SUPPORT //
3796 IN PRTMP_ADAPTER pAd,
3797 IN UCHAR BatRecIdx);
3800 // Private routines in rtmp_data.c
3802 BOOLEAN RTMPHandleRxDoneInterrupt(
3803 IN PRTMP_ADAPTER pAd);
3805 VOID RTMPHandleTxDoneInterrupt(
3806 IN PRTMP_ADAPTER pAd);
3808 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3809 IN PRTMP_ADAPTER pAd,
3810 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3812 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3813 IN PRTMP_ADAPTER pAd);
3815 VOID RTMPHandleTBTTInterrupt(
3816 IN PRTMP_ADAPTER pAd);
3818 VOID RTMPHandlePreTBTTInterrupt(
3819 IN PRTMP_ADAPTER pAd);
3821 void RTMPHandleTwakeupInterrupt(
3822 IN PRTMP_ADAPTER pAd);
3824 VOID RTMPHandleRxCoherentInterrupt(
3825 IN PRTMP_ADAPTER pAd);
3827 BOOLEAN TxFrameIsAggregatible(
3828 IN PRTMP_ADAPTER pAd,
3829 IN PUCHAR pPrevAddr1,
3830 IN PUCHAR p8023hdr);
3832 BOOLEAN PeerIsAggreOn(
3833 IN PRTMP_ADAPTER pAd,
3835 IN PMAC_TABLE_ENTRY pMacEntry);
3837 #if 0 // It's not be used
3838 HTTRANSMIT_SETTING *GetTxMode(
3839 IN PRTMP_ADAPTER pAd,
3843 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3844 IN PNDIS_BUFFER pFirstBuffer,
3845 IN UCHAR DesiredOffset,
3849 NDIS_STATUS STASendPacket(
3850 IN PRTMP_ADAPTER pAd,
3851 IN PNDIS_PACKET pPacket);
3853 VOID STASendPackets(
3854 IN NDIS_HANDLE MiniportAdapterContext,
3855 IN PPNDIS_PACKET ppPacketArray,
3856 IN UINT NumberOfPackets);
3858 VOID RTMPDeQueuePacket(
3859 IN PRTMP_ADAPTER pAd,
3860 IN BOOLEAN bIntContext,
3862 IN UCHAR Max_Tx_Packets);
3864 NDIS_STATUS RTMPHardTransmit(
3865 IN PRTMP_ADAPTER pAd,
3866 IN PNDIS_PACKET pPacket,
3868 OUT PULONG pFreeTXDLeft);
3870 NDIS_STATUS STAHardTransmit(
3871 IN PRTMP_ADAPTER pAd,
3875 VOID STARxEAPOLFrameIndicate(
3876 IN PRTMP_ADAPTER pAd,
3877 IN MAC_TABLE_ENTRY *pEntry,
3879 IN UCHAR FromWhichBSSID);
3881 NDIS_STATUS RTMPFreeTXDRequest(
3882 IN PRTMP_ADAPTER pAd,
3884 IN UCHAR NumberRequired,
3885 IN PUCHAR FreeNumberIs);
3887 NDIS_STATUS MlmeHardTransmit(
3888 IN PRTMP_ADAPTER pAd,
3890 IN PNDIS_PACKET pPacket);
3892 NDIS_STATUS MlmeHardTransmitMgmtRing(
3893 IN PRTMP_ADAPTER pAd,
3895 IN PNDIS_PACKET pPacket);
3897 NDIS_STATUS MlmeHardTransmitTxRing(
3898 IN PRTMP_ADAPTER pAd,
3900 IN PNDIS_PACKET pPacket);
3902 USHORT RTMPCalcDuration(
3903 IN PRTMP_ADAPTER pAd,
3908 IN PRTMP_ADAPTER pAd,
3909 IN PTXWI_STRUC pTxWI,
3912 IN BOOLEAN InsTimestamp,
3915 IN BOOLEAN NSeq, // HW new a sequence.
3924 IN HTTRANSMIT_SETTING *pTransmit);
3927 VOID RTMPWriteTxWI_Data(
3928 IN PRTMP_ADAPTER pAd,
3929 IN OUT PTXWI_STRUC pTxWI,
3933 VOID RTMPWriteTxWI_Cache(
3934 IN PRTMP_ADAPTER pAd,
3935 IN OUT PTXWI_STRUC pTxWI,
3938 VOID RTMPWriteTxDescriptor(
3939 IN PRTMP_ADAPTER pAd,
3944 VOID RTMPSuspendMsduTransmission(
3945 IN PRTMP_ADAPTER pAd);
3947 VOID RTMPResumeMsduTransmission(
3948 IN PRTMP_ADAPTER pAd);
3950 NDIS_STATUS MiniportMMRequest(
3951 IN PRTMP_ADAPTER pAd,
3956 NDIS_STATUS MiniportDataMMRequest(
3957 IN PRTMP_ADAPTER pAd,
3962 VOID RTMPSendNullFrame(
3963 IN PRTMP_ADAPTER pAd,
3965 IN BOOLEAN bQosNull);
3967 VOID RTMPSendDisassociationFrame(
3968 IN PRTMP_ADAPTER pAd);
3970 VOID RTMPSendRTSFrame(
3971 IN PRTMP_ADAPTER pAd,
3973 IN unsigned int NextMpduSize,
3976 IN USHORT AckDuration,
3981 NDIS_STATUS RTMPApplyPacketFilter(
3982 IN PRTMP_ADAPTER pAd,
3983 IN PRT28XX_RXD_STRUC pRxD,
3984 IN PHEADER_802_11 pHeader);
3986 PQUEUE_HEADER RTMPCheckTxSwQueue(
3987 IN PRTMP_ADAPTER pAd,
3990 #ifdef CONFIG_STA_SUPPORT
3991 VOID RTMPReportMicError(
3992 IN PRTMP_ADAPTER pAd,
3993 IN PCIPHER_KEY pWpaKey);
3995 VOID WpaMicFailureReportFrame(
3996 IN PRTMP_ADAPTER pAd,
3997 IN MLME_QUEUE_ELEM *Elem);
3999 VOID WpaDisassocApAndBlockAssoc(
4000 IN PVOID SystemSpecific1,
4001 IN PVOID FunctionContext,
4002 IN PVOID SystemSpecific2,
4003 IN PVOID SystemSpecific3);
4004 #endif // CONFIG_STA_SUPPORT //
4006 NDIS_STATUS RTMPCloneNdisPacket(
4007 IN PRTMP_ADAPTER pAd,
4008 IN BOOLEAN pInsAMSDUHdr,
4009 IN PNDIS_PACKET pInPacket,
4010 OUT PNDIS_PACKET *ppOutPacket);
4012 NDIS_STATUS RTMPAllocateNdisPacket(
4013 IN PRTMP_ADAPTER pAd,
4014 IN PNDIS_PACKET *pPacket,
4020 VOID RTMPFreeNdisPacket(
4021 IN PRTMP_ADAPTER pAd,
4022 IN PNDIS_PACKET pPacket);
4024 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4025 IN PRTMP_ADAPTER pAd,
4028 BOOLEAN RTMPCheckDHCPFrame(
4029 IN PRTMP_ADAPTER pAd,
4030 IN PNDIS_PACKET pPacket);
4033 BOOLEAN RTMPCheckEtherType(
4034 IN PRTMP_ADAPTER pAd,
4035 IN PNDIS_PACKET pPacket);
4038 VOID RTMPCckBbpTuning(
4039 IN PRTMP_ADAPTER pAd,
4043 // Private routines in rtmp_wep.c
4045 VOID RTMPInitWepEngine(
4046 IN PRTMP_ADAPTER pAd,
4052 VOID RTMPEncryptData(
4053 IN PRTMP_ADAPTER pAd,
4058 BOOLEAN RTMPDecryptData(
4059 IN PRTMP_ADAPTER pAdapter,
4064 BOOLEAN RTMPSoftDecryptWEP(
4065 IN PRTMP_ADAPTER pAd,
4067 IN ULONG DataByteCnt,
4068 IN PCIPHER_KEY pGroupKey);
4071 IN PRTMP_ADAPTER pAd,
4075 IN PARCFOURCONTEXT Ctx,
4080 IN PARCFOURCONTEXT Ctx);
4082 VOID ARCFOUR_DECRYPT(
4083 IN PARCFOURCONTEXT Ctx,
4088 VOID ARCFOUR_ENCRYPT(
4089 IN PARCFOURCONTEXT Ctx,
4094 VOID WPAARCFOUR_ENCRYPT(
4095 IN PARCFOURCONTEXT Ctx,
4100 UINT RTMP_CALC_FCS32(
4109 // Asic/RF/BBP related functions
4111 VOID AsicAdjustTxPower(
4112 IN PRTMP_ADAPTER pAd);
4114 VOID AsicUpdateProtect(
4115 IN PRTMP_ADAPTER pAd,
4116 IN USHORT OperaionMode,
4118 IN BOOLEAN bDisableBGProtect,
4119 IN BOOLEAN bNonGFExist);
4121 VOID AsicSwitchChannel(
4122 IN PRTMP_ADAPTER pAd,
4126 VOID AsicLockChannel(
4127 IN PRTMP_ADAPTER pAd,
4130 VOID AsicAntennaSelect(
4131 IN PRTMP_ADAPTER pAd,
4134 VOID AsicAntennaSetting(
4135 IN PRTMP_ADAPTER pAd,
4136 IN ABGBAND_STATE BandState);
4138 VOID AsicRfTuningExec(
4139 IN PVOID SystemSpecific1,
4140 IN PVOID FunctionContext,
4141 IN PVOID SystemSpecific2,
4142 IN PVOID SystemSpecific3);
4144 #ifdef CONFIG_STA_SUPPORT
4145 VOID AsicSleepThenAutoWakeup(
4146 IN PRTMP_ADAPTER pAd,
4147 IN USHORT TbttNumToNextWakeUp);
4149 VOID AsicForceSleep(
4150 IN PRTMP_ADAPTER pAd);
4152 VOID AsicForceWakeup(
4153 IN PRTMP_ADAPTER pAd,
4154 IN BOOLEAN bFromTx);
4155 #endif // CONFIG_STA_SUPPORT //
4158 IN PRTMP_ADAPTER pAd,
4161 VOID AsicSetMcastWC(
4162 IN PRTMP_ADAPTER pAd);
4164 #if 0 // removed by AlbertY
4165 VOID AsicSetBssidWC(
4166 IN PRTMP_ADAPTER pAd,
4170 VOID AsicDelWcidTab(
4171 IN PRTMP_ADAPTER pAd,
4175 IN PRTMP_ADAPTER pAd);
4177 VOID AsicDisableRDG(
4178 IN PRTMP_ADAPTER pAd);
4180 VOID AsicDisableSync(
4181 IN PRTMP_ADAPTER pAd);
4183 VOID AsicEnableBssSync(
4184 IN PRTMP_ADAPTER pAd);
4186 VOID AsicEnableIbssSync(
4187 IN PRTMP_ADAPTER pAd);
4189 VOID AsicSetEdcaParm(
4190 IN PRTMP_ADAPTER pAd,
4191 IN PEDCA_PARM pEdcaParm);
4193 VOID AsicSetSlotTime(
4194 IN PRTMP_ADAPTER pAd,
4195 IN BOOLEAN bUseShortSlotTime);
4198 VOID AsicAddWcidCipherEntry(
4199 IN PRTMP_ADAPTER pAd,
4205 IN CIPHER_KEY *pCipherKey);
4208 VOID AsicAddSharedKeyEntry(
4209 IN PRTMP_ADAPTER pAd,
4217 VOID AsicRemoveSharedKeyEntry(
4218 IN PRTMP_ADAPTER pAd,
4222 VOID AsicUpdateWCIDAttribute(
4223 IN PRTMP_ADAPTER pAd,
4227 IN BOOLEAN bUsePairewiseKeyTable);
4229 VOID AsicUpdateWCIDIVEIV(
4230 IN PRTMP_ADAPTER pAd,
4235 VOID AsicUpdateRxWCIDTable(
4236 IN PRTMP_ADAPTER pAd,
4240 VOID AsicAddKeyEntry(
4241 IN PRTMP_ADAPTER pAd,
4245 IN PCIPHER_KEY pCipherKey,
4246 IN BOOLEAN bUsePairewiseKeyTable,
4249 VOID AsicAddPairwiseKeyEntry(
4250 IN PRTMP_ADAPTER pAd,
4253 IN CIPHER_KEY *pCipherKey);
4255 VOID AsicRemovePairwiseKeyEntry(
4256 IN PRTMP_ADAPTER pAd,
4260 BOOLEAN AsicSendCommandToMcu(
4261 IN PRTMP_ADAPTER pAd,
4268 VOID MacAddrRandomBssid(
4269 IN PRTMP_ADAPTER pAd,
4272 VOID MgtMacHeaderInit(
4273 IN PRTMP_ADAPTER pAd,
4274 IN OUT PHEADER_802_11 pHdr80211,
4281 IN PRTMP_ADAPTER pAd);
4284 IN PRTMP_ADAPTER pAd);
4290 #ifdef DOT11_N_SUPPORT
4292 IN PRTMP_ADAPTER pAd,
4294 #endif // DOT11_N_SUPPORT //
4296 ULONG BssTableSearch(
4301 ULONG BssSsidTableSearch(
4308 ULONG BssTableSearchWithSSID(
4315 VOID BssTableDeleteEntry(
4316 IN OUT PBSS_TABLE pTab,
4320 #ifdef DOT11_N_SUPPORT
4321 VOID BATableDeleteORIEntry(
4322 IN OUT PRTMP_ADAPTER pAd,
4323 IN BA_ORI_ENTRY *pBAORIEntry);
4325 VOID BATableDeleteRECEntry(
4326 IN OUT PRTMP_ADAPTER pAd,
4327 IN BA_REC_ENTRY *pBARECEntry);
4329 VOID BATableTearORIEntry(
4330 IN OUT PRTMP_ADAPTER pAd,
4333 IN BOOLEAN bForceDelete,
4336 VOID BATableTearRECEntry(
4337 IN OUT PRTMP_ADAPTER pAd,
4341 #endif // DOT11_N_SUPPORT //
4344 IN PRTMP_ADAPTER pAd,
4345 OUT PBSS_ENTRY pBss,
4350 IN USHORT BeaconPeriod,
4353 IN USHORT CapabilityInfo,
4355 IN UCHAR SupRateLen,
4357 IN UCHAR ExtRateLen,
4358 IN HT_CAPABILITY_IE *pHtCapability,
4359 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4360 IN UCHAR HtCapabilityLen,
4361 IN UCHAR AddHtInfoLen,
4362 IN UCHAR NewExtChanOffset,
4365 IN LARGE_INTEGER TimeStamp,
4367 IN PEDCA_PARM pEdcaParm,
4368 IN PQOS_CAPABILITY_PARM pQosCapability,
4369 IN PQBSS_LOAD_PARM pQbssLoad,
4370 IN USHORT LengthVIE,
4371 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4373 ULONG BssTableSetEntry(
4374 IN PRTMP_ADAPTER pAd,
4375 OUT PBSS_TABLE pTab,
4380 IN USHORT BeaconPeriod,
4383 IN USHORT CapabilityInfo,
4385 IN UCHAR SupRateLen,
4387 IN UCHAR ExtRateLen,
4388 IN HT_CAPABILITY_IE *pHtCapability,
4389 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4390 IN UCHAR HtCapabilityLen,
4391 IN UCHAR AddHtInfoLen,
4392 IN UCHAR NewExtChanOffset,
4395 IN LARGE_INTEGER TimeStamp,
4397 IN PEDCA_PARM pEdcaParm,
4398 IN PQOS_CAPABILITY_PARM pQosCapability,
4399 IN PQBSS_LOAD_PARM pQbssLoad,
4400 IN USHORT LengthVIE,
4401 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4403 #ifdef DOT11_N_SUPPORT
4404 VOID BATableInsertEntry(
4405 IN PRTMP_ADAPTER pAd,
4407 IN USHORT TimeOutValue,
4408 IN USHORT StartingSeq,
4411 IN UCHAR OriginatorStatus,
4412 IN BOOLEAN IsRecipient);
4414 #ifdef DOT11N_DRAFT3
4415 VOID Bss2040CoexistTimeOut(
4416 IN PVOID SystemSpecific1,
4417 IN PVOID FunctionContext,
4418 IN PVOID SystemSpecific2,
4419 IN PVOID SystemSpecific3);
4423 IN PRTMP_ADAPTER pAd);
4425 ULONG TriEventTableSetEntry(
4426 IN PRTMP_ADAPTER pAd,
4427 OUT TRIGGER_EVENT_TAB *Tab,
4429 IN HT_CAPABILITY_IE *pHtCapability,
4430 IN UCHAR HtCapabilityLen,
4432 IN UCHAR ChannelNo);
4434 VOID TriEventCounterMaintenance(
4435 IN PRTMP_ADAPTER pAd);
4436 #endif // DOT11N_DRAFT3 //
4437 #endif // DOT11_N_SUPPORT //
4439 VOID BssTableSsidSort(
4440 IN PRTMP_ADAPTER pAd,
4441 OUT BSS_TABLE *OutTab,
4445 VOID BssTableSortByRssi(
4446 IN OUT BSS_TABLE *OutTab);
4448 VOID BssCipherParse(
4449 IN OUT PBSS_ENTRY pBss);
4451 NDIS_STATUS MlmeQueueInit(
4452 IN MLME_QUEUE *Queue);
4454 VOID MlmeQueueDestroy(
4455 IN MLME_QUEUE *Queue);
4457 BOOLEAN MlmeEnqueue(
4458 IN PRTMP_ADAPTER pAd,
4464 BOOLEAN MlmeEnqueueForRecv(
4465 IN PRTMP_ADAPTER pAd,
4467 IN ULONG TimeStampHigh,
4468 IN ULONG TimeStampLow,
4477 BOOLEAN MlmeDequeue(
4478 IN MLME_QUEUE *Queue,
4479 OUT MLME_QUEUE_ELEM **Elem);
4481 VOID MlmeRestartStateMachine(
4482 IN PRTMP_ADAPTER pAd);
4484 BOOLEAN MlmeQueueEmpty(
4485 IN MLME_QUEUE *Queue);
4487 BOOLEAN MlmeQueueFull(
4488 IN MLME_QUEUE *Queue);
4490 BOOLEAN MsgTypeSubst(
4491 IN PRTMP_ADAPTER pAd,
4492 IN PFRAME_802_11 pFrame,
4496 VOID StateMachineInit(
4497 IN STATE_MACHINE *Sm,
4498 IN STATE_MACHINE_FUNC Trans[],
4501 IN STATE_MACHINE_FUNC DefFunc,
4505 VOID StateMachineSetAction(
4506 IN STATE_MACHINE *S,
4509 IN STATE_MACHINE_FUNC F);
4511 VOID StateMachinePerformAction(
4512 IN PRTMP_ADAPTER pAd,
4513 IN STATE_MACHINE *S,
4514 IN MLME_QUEUE_ELEM *Elem);
4517 IN PRTMP_ADAPTER pAd,
4518 IN MLME_QUEUE_ELEM *Elem);
4520 VOID AssocStateMachineInit(
4521 IN PRTMP_ADAPTER pAd,
4522 IN STATE_MACHINE *Sm,
4523 OUT STATE_MACHINE_FUNC Trans[]);
4525 VOID ReassocTimeout(
4526 IN PVOID SystemSpecific1,
4527 IN PVOID FunctionContext,
4528 IN PVOID SystemSpecific2,
4529 IN PVOID SystemSpecific3);
4532 IN PVOID SystemSpecific1,
4533 IN PVOID FunctionContext,
4534 IN PVOID SystemSpecific2,
4535 IN PVOID SystemSpecific3);
4537 VOID DisassocTimeout(
4538 IN PVOID SystemSpecific1,
4539 IN PVOID FunctionContext,
4540 IN PVOID SystemSpecific2,
4541 IN PVOID SystemSpecific3);
4543 //----------------------------------------------
4544 VOID MlmeDisassocReqAction(
4545 IN PRTMP_ADAPTER pAd,
4546 IN MLME_QUEUE_ELEM *Elem);
4548 VOID MlmeAssocReqAction(
4549 IN PRTMP_ADAPTER pAd,
4550 IN MLME_QUEUE_ELEM *Elem);
4552 VOID MlmeReassocReqAction(
4553 IN PRTMP_ADAPTER pAd,
4554 IN MLME_QUEUE_ELEM *Elem);
4556 VOID MlmeDisassocReqAction(
4557 IN PRTMP_ADAPTER pAd,
4558 IN MLME_QUEUE_ELEM *Elem);
4560 VOID PeerAssocRspAction(
4561 IN PRTMP_ADAPTER pAd,
4562 IN MLME_QUEUE_ELEM *Elem);
4564 VOID PeerReassocRspAction(
4565 IN PRTMP_ADAPTER pAd,
4566 IN MLME_QUEUE_ELEM *Elem);
4568 VOID PeerDisassocAction(
4569 IN PRTMP_ADAPTER pAd,
4570 IN MLME_QUEUE_ELEM *Elem);
4572 VOID DisassocTimeoutAction(
4573 IN PRTMP_ADAPTER pAd,
4574 IN MLME_QUEUE_ELEM *Elem);
4576 VOID AssocTimeoutAction(
4577 IN PRTMP_ADAPTER pAd,
4578 IN MLME_QUEUE_ELEM *Elem);
4580 VOID ReassocTimeoutAction(
4581 IN PRTMP_ADAPTER pAd,
4582 IN MLME_QUEUE_ELEM *Elem);
4585 IN PRTMP_ADAPTER pAd,
4588 VOID SwitchBetweenWepAndCkip(
4589 IN PRTMP_ADAPTER pAd);
4591 VOID InvalidStateWhenAssoc(
4592 IN PRTMP_ADAPTER pAd,
4593 IN MLME_QUEUE_ELEM *Elem);
4595 VOID InvalidStateWhenReassoc(
4596 IN PRTMP_ADAPTER pAd,
4597 IN MLME_QUEUE_ELEM *Elem);
4599 VOID InvalidStateWhenDisassociate(
4600 IN PRTMP_ADAPTER pAd,
4601 IN MLME_QUEUE_ELEM *Elem);
4604 VOID MlmeCntlConfirm(
4605 IN PRTMP_ADAPTER pAd,
4611 IN PRTMP_ADAPTER pAd);
4613 VOID ComposeNullFrame(
4614 IN PRTMP_ADAPTER pAd);
4617 IN PRTMP_ADAPTER pAd,
4619 IN USHORT CapabilityInfo,
4622 IN UCHAR SupRateLen,
4624 IN UCHAR ExtRateLen,
4625 IN PEDCA_PARM pEdcaParm,
4626 IN HT_CAPABILITY_IE *pHtCapability,
4627 IN UCHAR HtCapabilityLen,
4628 IN ADD_HT_INFO_IE *pAddHtInfo);
4630 VOID AuthStateMachineInit(
4631 IN PRTMP_ADAPTER pAd,
4632 IN PSTATE_MACHINE sm,
4633 OUT STATE_MACHINE_FUNC Trans[]);
4636 IN PVOID SystemSpecific1,
4637 IN PVOID FunctionContext,
4638 IN PVOID SystemSpecific2,
4639 IN PVOID SystemSpecific3);
4641 VOID MlmeAuthReqAction(
4642 IN PRTMP_ADAPTER pAd,
4643 IN MLME_QUEUE_ELEM *Elem);
4645 VOID PeerAuthRspAtSeq2Action(
4646 IN PRTMP_ADAPTER pAd,
4647 IN MLME_QUEUE_ELEM *Elem);
4649 VOID PeerAuthRspAtSeq4Action(
4650 IN PRTMP_ADAPTER pAd,
4651 IN MLME_QUEUE_ELEM *Elem);
4653 VOID AuthTimeoutAction(
4654 IN PRTMP_ADAPTER pAd,
4655 IN MLME_QUEUE_ELEM *Elem);
4658 IN PRTMP_ADAPTER pAd,
4661 VOID MlmeDeauthReqAction(
4662 IN PRTMP_ADAPTER pAd,
4663 IN MLME_QUEUE_ELEM *Elem);
4665 VOID InvalidStateWhenAuth(
4666 IN PRTMP_ADAPTER pAd,
4667 IN MLME_QUEUE_ELEM *Elem);
4669 //=============================================
4671 VOID AuthRspStateMachineInit(
4672 IN PRTMP_ADAPTER pAd,
4673 IN PSTATE_MACHINE Sm,
4674 IN STATE_MACHINE_FUNC Trans[]);
4676 VOID PeerDeauthAction(
4677 IN PRTMP_ADAPTER pAd,
4678 IN MLME_QUEUE_ELEM *Elem);
4680 VOID PeerAuthSimpleRspGenAndSend(
4681 IN PRTMP_ADAPTER pAd,
4682 IN PHEADER_802_11 pHdr80211,
4689 // Private routines in dls.c
4692 #ifdef CONFIG_STA_SUPPORT
4693 #ifdef QOS_DLS_SUPPORT
4694 void DlsStateMachineInit(
4695 IN PRTMP_ADAPTER pAd,
4696 IN STATE_MACHINE *Sm,
4697 OUT STATE_MACHINE_FUNC Trans[]);
4699 VOID MlmeDlsReqAction(
4700 IN PRTMP_ADAPTER pAd,
4701 IN MLME_QUEUE_ELEM *Elem);
4703 VOID PeerDlsReqAction(
4704 IN PRTMP_ADAPTER pAd,
4705 IN MLME_QUEUE_ELEM *Elem);
4707 VOID PeerDlsRspAction(
4708 IN PRTMP_ADAPTER pAd,
4709 IN MLME_QUEUE_ELEM *Elem);
4711 VOID MlmeDlsTearDownAction(
4712 IN PRTMP_ADAPTER pAd,
4713 IN MLME_QUEUE_ELEM *Elem);
4715 VOID PeerDlsTearDownAction(
4716 IN PRTMP_ADAPTER pAd,
4717 IN MLME_QUEUE_ELEM *Elem);
4719 VOID RTMPCheckDLSTimeOut(
4720 IN PRTMP_ADAPTER pAd);
4722 BOOLEAN RTMPRcvFrameDLSCheck(
4723 IN PRTMP_ADAPTER pAd,
4724 IN PHEADER_802_11 pHeader,
4726 IN PRT28XX_RXD_STRUC pRxD);
4728 INT RTMPCheckDLSFrame(
4729 IN PRTMP_ADAPTER pAd,
4732 VOID RTMPSendDLSTearDownFrame(
4733 IN PRTMP_ADAPTER pAd,
4736 NDIS_STATUS RTMPSendSTAKeyRequest(
4737 IN PRTMP_ADAPTER pAd,
4740 NDIS_STATUS RTMPSendSTAKeyHandShake(
4741 IN PRTMP_ADAPTER pAd,
4744 VOID DlsTimeoutAction(
4745 IN PVOID SystemSpecific1,
4746 IN PVOID FunctionContext,
4747 IN PVOID SystemSpecific2,
4748 IN PVOID SystemSpecific3);
4750 BOOLEAN MlmeDlsReqSanity(
4751 IN PRTMP_ADAPTER pAd,
4754 OUT PRT_802_11_DLS *pDLS,
4755 OUT PUSHORT pReason);
4757 INT Set_DlsEntryInfo_Display_Proc(
4758 IN PRTMP_ADAPTER pAd,
4761 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4762 IN PRTMP_ADAPTER pAd,
4764 IN UINT DlsEntryIdx);
4766 BOOLEAN MacTableDeleteDlsEntry(
4767 IN PRTMP_ADAPTER pAd,
4771 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4772 IN PRTMP_ADAPTER pAd,
4774 IN BOOLEAN bResetIdelCount);
4776 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4777 IN PRTMP_ADAPTER pAd,
4780 IN BOOLEAN bResetIdelCount);
4782 INT Set_DlsAddEntry_Proc(
4783 IN PRTMP_ADAPTER pAd,
4786 INT Set_DlsTearDownEntry_Proc(
4787 IN PRTMP_ADAPTER pAd,
4789 #endif // QOS_DLS_SUPPORT //
4790 #endif // CONFIG_STA_SUPPORT //
4792 #ifdef QOS_DLS_SUPPORT
4793 BOOLEAN PeerDlsReqSanity(
4794 IN PRTMP_ADAPTER pAd,
4799 OUT USHORT *pCapabilityInfo,
4800 OUT USHORT *pDlsTimeout,
4801 OUT UCHAR *pRatesLen,
4803 OUT UCHAR *pHtCapabilityLen,
4804 OUT HT_CAPABILITY_IE *pHtCapability);
4806 BOOLEAN PeerDlsRspSanity(
4807 IN PRTMP_ADAPTER pAd,
4812 OUT USHORT *pCapabilityInfo,
4813 OUT USHORT *pStatus,
4814 OUT UCHAR *pRatesLen,
4816 OUT UCHAR *pHtCapabilityLen,
4817 OUT HT_CAPABILITY_IE *pHtCapability);
4819 BOOLEAN PeerDlsTearDownSanity(
4820 IN PRTMP_ADAPTER pAd,
4825 OUT USHORT *pReason);
4826 #endif // QOS_DLS_SUPPORT //
4828 //========================================
4830 VOID SyncStateMachineInit(
4831 IN PRTMP_ADAPTER pAd,
4832 IN STATE_MACHINE *Sm,
4833 OUT STATE_MACHINE_FUNC Trans[]);
4836 IN PVOID SystemSpecific1,
4837 IN PVOID FunctionContext,
4838 IN PVOID SystemSpecific2,
4839 IN PVOID SystemSpecific3);
4842 IN PVOID SystemSpecific1,
4843 IN PVOID FunctionContext,
4844 IN PVOID SystemSpecific2,
4845 IN PVOID SystemSpecific3);
4847 VOID MlmeScanReqAction(
4848 IN PRTMP_ADAPTER pAd,
4849 IN MLME_QUEUE_ELEM *Elem);
4851 VOID InvalidStateWhenScan(
4852 IN PRTMP_ADAPTER pAd,
4853 IN MLME_QUEUE_ELEM *Elem);
4855 VOID InvalidStateWhenJoin(
4856 IN PRTMP_ADAPTER pAd,
4857 IN MLME_QUEUE_ELEM *Elem);
4859 VOID InvalidStateWhenStart(
4860 IN PRTMP_ADAPTER pAd,
4861 IN MLME_QUEUE_ELEM *Elem);
4864 IN PRTMP_ADAPTER pAd,
4865 IN MLME_QUEUE_ELEM *Elem);
4867 VOID EnqueueProbeRequest(
4868 IN PRTMP_ADAPTER pAd);
4870 BOOLEAN ScanRunning(
4871 IN PRTMP_ADAPTER pAd);
4872 //=========================================
4875 IN PRTMP_ADAPTER pAd,
4876 IN STATE_MACHINE *S,
4877 OUT STATE_MACHINE_FUNC Trans[]);
4879 VOID MlmeCntlMachinePerformAction(
4880 IN PRTMP_ADAPTER pAd,
4881 IN STATE_MACHINE *S,
4882 IN MLME_QUEUE_ELEM *Elem);
4885 IN PRTMP_ADAPTER pAd,
4886 IN MLME_QUEUE_ELEM *Elem);
4888 VOID CntlOidScanProc(
4889 IN PRTMP_ADAPTER pAd,
4890 IN MLME_QUEUE_ELEM *Elem);
4892 VOID CntlOidSsidProc(
4893 IN PRTMP_ADAPTER pAd,
4894 IN MLME_QUEUE_ELEM * Elem);
4896 VOID CntlOidRTBssidProc(
4897 IN PRTMP_ADAPTER pAd,
4898 IN MLME_QUEUE_ELEM * Elem);
4900 VOID CntlMlmeRoamingProc(
4901 IN PRTMP_ADAPTER pAd,
4902 IN MLME_QUEUE_ELEM * Elem);
4904 VOID CntlWaitDisassocProc(
4905 IN PRTMP_ADAPTER pAd,
4906 IN MLME_QUEUE_ELEM *Elem);
4908 VOID CntlWaitJoinProc(
4909 IN PRTMP_ADAPTER pAd,
4910 IN MLME_QUEUE_ELEM *Elem);
4912 VOID CntlWaitReassocProc(
4913 IN PRTMP_ADAPTER pAd,
4914 IN MLME_QUEUE_ELEM *Elem);
4916 VOID CntlWaitStartProc(
4917 IN PRTMP_ADAPTER pAd,
4918 IN MLME_QUEUE_ELEM *Elem);
4920 VOID CntlWaitAuthProc(
4921 IN PRTMP_ADAPTER pAd,
4922 IN MLME_QUEUE_ELEM *Elem);
4924 VOID CntlWaitAuthProc2(
4925 IN PRTMP_ADAPTER pAd,
4926 IN MLME_QUEUE_ELEM *Elem);
4928 VOID CntlWaitAssocProc(
4929 IN PRTMP_ADAPTER pAd,
4930 IN MLME_QUEUE_ELEM *Elem);
4932 #ifdef QOS_DLS_SUPPORT
4933 VOID CntlOidDLSSetupProc(
4934 IN PRTMP_ADAPTER pAd,
4935 IN MLME_QUEUE_ELEM *Elem);
4936 #endif // QOS_DLS_SUPPORT //
4939 IN PRTMP_ADAPTER pAd,
4943 IN PRTMP_ADAPTER pAd,
4944 IN BOOLEAN IsReqFromAP);
4946 VOID IterateOnBssTab(
4947 IN PRTMP_ADAPTER pAd);
4949 VOID IterateOnBssTab2(
4950 IN PRTMP_ADAPTER pAd);;
4953 IN PRTMP_ADAPTER pAd,
4954 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4958 IN PRTMP_ADAPTER pAd,
4959 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4961 IN USHORT CapabilityInfo,
4963 IN USHORT ListenIntv);
4966 IN PRTMP_ADAPTER pAd,
4967 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4973 VOID DisassocParmFill(
4974 IN PRTMP_ADAPTER pAd,
4975 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4980 IN PRTMP_ADAPTER pAd,
4981 IN OUT MLME_START_REQ_STRUCT *StartReq,
4986 IN PRTMP_ADAPTER pAd,
4987 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4992 IN PRTMP_ADAPTER pAd);
4994 VOID EnqueueBeaconFrame(
4995 IN PRTMP_ADAPTER pAd);
4997 VOID MlmeJoinReqAction(
4998 IN PRTMP_ADAPTER pAd,
4999 IN MLME_QUEUE_ELEM *Elem);
5001 VOID MlmeScanReqAction(
5002 IN PRTMP_ADAPTER pAd,
5003 IN MLME_QUEUE_ELEM *Elem);
5005 VOID MlmeStartReqAction(
5006 IN PRTMP_ADAPTER pAd,
5007 IN MLME_QUEUE_ELEM *Elem);
5009 VOID ScanTimeoutAction(
5010 IN PRTMP_ADAPTER pAd,
5011 IN MLME_QUEUE_ELEM *Elem);
5013 VOID BeaconTimeoutAtJoinAction(
5014 IN PRTMP_ADAPTER pAd,
5015 IN MLME_QUEUE_ELEM *Elem);
5017 VOID PeerBeaconAtScanAction(
5018 IN PRTMP_ADAPTER pAd,
5019 IN MLME_QUEUE_ELEM *Elem);
5021 VOID PeerBeaconAtJoinAction(
5022 IN PRTMP_ADAPTER pAd,
5023 IN MLME_QUEUE_ELEM *Elem);
5026 IN PRTMP_ADAPTER pAd,
5027 IN MLME_QUEUE_ELEM *Elem);
5029 VOID PeerProbeReqAction(
5030 IN PRTMP_ADAPTER pAd,
5031 IN MLME_QUEUE_ELEM *Elem);
5033 VOID ScanNextChannel(
5034 IN PRTMP_ADAPTER pAd);
5036 ULONG MakeIbssBeacon(
5037 IN PRTMP_ADAPTER pAd);
5039 VOID CCXAdjacentAPReport(
5040 IN PRTMP_ADAPTER pAd);
5042 BOOLEAN MlmeScanReqSanity(
5043 IN PRTMP_ADAPTER pAd,
5049 OUT UCHAR *ScanType);
5051 BOOLEAN PeerBeaconAndProbeRspSanity(
5052 IN PRTMP_ADAPTER pAd,
5055 IN UCHAR MsgChannel,
5059 OUT UCHAR *pSsidLen,
5060 OUT UCHAR *pBssType,
5061 OUT USHORT *pBeaconPeriod,
5062 OUT UCHAR *pChannel,
5063 OUT UCHAR *pNewChannel,
5064 OUT LARGE_INTEGER *pTimestamp,
5065 OUT CF_PARM *pCfParm,
5066 OUT USHORT *pAtimWin,
5067 OUT USHORT *pCapabilityInfo,
5069 OUT UCHAR *pDtimCount,
5070 OUT UCHAR *pDtimPeriod,
5071 OUT UCHAR *pBcastFlag,
5072 OUT UCHAR *pMessageToMe,
5073 OUT UCHAR SupRate[],
5074 OUT UCHAR *pSupRateLen,
5075 OUT UCHAR ExtRate[],
5076 OUT UCHAR *pExtRateLen,
5077 OUT UCHAR *pCkipFlag,
5078 OUT UCHAR *pAironetCellPowerLimit,
5079 OUT PEDCA_PARM pEdcaParm,
5080 OUT PQBSS_LOAD_PARM pQbssLoad,
5081 OUT PQOS_CAPABILITY_PARM pQosCapability,
5082 OUT ULONG *pRalinkIe,
5083 OUT UCHAR *pHtCapabilityLen,
5084 #ifdef CONFIG_STA_SUPPORT
5085 OUT UCHAR *pPreNHtCapabilityLen,
5086 #endif // CONFIG_STA_SUPPORT //
5087 OUT HT_CAPABILITY_IE *pHtCapability,
5088 OUT UCHAR *AddHtInfoLen,
5089 OUT ADD_HT_INFO_IE *AddHtInfo,
5090 OUT UCHAR *NewExtChannel,
5091 OUT USHORT *LengthVIE,
5092 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5094 BOOLEAN PeerAddBAReqActionSanity(
5095 IN PRTMP_ADAPTER pAd,
5100 BOOLEAN PeerAddBARspActionSanity(
5101 IN PRTMP_ADAPTER pAd,
5105 BOOLEAN PeerDelBAActionSanity(
5106 IN PRTMP_ADAPTER pAd,
5111 BOOLEAN MlmeAssocReqSanity(
5112 IN PRTMP_ADAPTER pAd,
5116 OUT USHORT *CapabilityInfo,
5118 OUT USHORT *ListenIntv);
5120 BOOLEAN MlmeAuthReqSanity(
5121 IN PRTMP_ADAPTER pAd,
5128 BOOLEAN MlmeStartReqSanity(
5129 IN PRTMP_ADAPTER pAd,
5133 OUT UCHAR *Ssidlen);
5135 BOOLEAN PeerAuthSanity(
5136 IN PRTMP_ADAPTER pAd,
5143 OUT CHAR ChlgText[]);
5145 BOOLEAN PeerAssocRspSanity(
5146 IN PRTMP_ADAPTER pAd,
5150 OUT USHORT *pCapabilityInfo,
5151 OUT USHORT *pStatus,
5153 OUT UCHAR SupRate[],
5154 OUT UCHAR *pSupRateLen,
5155 OUT UCHAR ExtRate[],
5156 OUT UCHAR *pExtRateLen,
5157 OUT HT_CAPABILITY_IE *pHtCapability,
5158 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5159 OUT UCHAR *pHtCapabilityLen,
5160 OUT UCHAR *pAddHtInfoLen,
5161 OUT UCHAR *pNewExtChannelOffset,
5162 OUT PEDCA_PARM pEdcaParm,
5163 OUT UCHAR *pCkipFlag);
5165 BOOLEAN PeerDisassocSanity(
5166 IN PRTMP_ADAPTER pAd,
5170 OUT USHORT *Reason);
5172 BOOLEAN PeerWpaMessageSanity(
5173 IN PRTMP_ADAPTER pAd,
5174 IN PEAPOL_PACKET pMsg,
5177 IN MAC_TABLE_ENTRY *pEntry);
5179 BOOLEAN PeerDeauthSanity(
5180 IN PRTMP_ADAPTER pAd,
5184 OUT USHORT *Reason);
5186 BOOLEAN PeerProbeReqSanity(
5187 IN PRTMP_ADAPTER pAd,
5192 OUT UCHAR *pSsidLen);
5198 OUT UCHAR *BcastFlag,
5199 OUT UCHAR *DtimCount,
5200 OUT UCHAR *DtimPeriod,
5201 OUT UCHAR *MessageToMe);
5203 UCHAR ChannelSanity(
5204 IN PRTMP_ADAPTER pAd,
5207 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5208 IN PBSS_ENTRY pBss);
5210 #if 0 // It's omitted
5211 NDIS_STATUS RTMPWepKeySanity(
5212 IN PRTMP_ADAPTER pAdapter,
5216 BOOLEAN MlmeDelBAReqSanity(
5217 IN PRTMP_ADAPTER pAd,
5221 BOOLEAN MlmeAddBAReqSanity(
5222 IN PRTMP_ADAPTER pAd,
5227 ULONG MakeOutgoingFrame(
5229 OUT ULONG *Length, ...);
5232 IN PRTMP_ADAPTER pAd,
5236 IN PRTMP_ADAPTER pAd);
5238 VOID AsicUpdateAutoFallBackTable(
5239 IN PRTMP_ADAPTER pAd,
5242 VOID MlmePeriodicExec(
5243 IN PVOID SystemSpecific1,
5244 IN PVOID FunctionContext,
5245 IN PVOID SystemSpecific2,
5246 IN PVOID SystemSpecific3);
5249 IN PVOID SystemSpecific1,
5250 IN PVOID FunctionContext,
5251 IN PVOID SystemSpecific2,
5252 IN PVOID SystemSpecific3);
5255 IN PVOID SystemSpecific1,
5256 IN PVOID FunctionContext,
5257 IN PVOID SystemSpecific2,
5258 IN PVOID SystemSpecific3);
5260 VOID STAMlmePeriodicExec(
5264 IN PRTMP_ADAPTER pAd);
5266 VOID MlmeAutoReconnectLastSSID(
5267 IN PRTMP_ADAPTER pAd);
5269 BOOLEAN MlmeValidateSSID(
5273 VOID MlmeCheckForRoaming(
5274 IN PRTMP_ADAPTER pAd,
5277 VOID MlmeCheckForFastRoaming(
5278 IN PRTMP_ADAPTER pAd,
5281 VOID MlmeDynamicTxRateSwitching(
5282 IN PRTMP_ADAPTER pAd);
5285 IN PRTMP_ADAPTER pAd,
5286 IN PMAC_TABLE_ENTRY pEntry,
5287 IN PRTMP_TX_RATE_SWITCH pTxRate);
5289 VOID MlmeSelectTxRateTable(
5290 IN PRTMP_ADAPTER pAd,
5291 IN PMAC_TABLE_ENTRY pEntry,
5293 IN PUCHAR pTableSize,
5294 IN PUCHAR pInitTxRateIdx);
5296 VOID MlmeCalculateChannelQuality(
5297 IN PRTMP_ADAPTER pAd,
5300 VOID MlmeCheckPsmChange(
5301 IN PRTMP_ADAPTER pAd,
5305 IN PRTMP_ADAPTER pAd,
5308 VOID MlmeSetTxPreamble(
5309 IN PRTMP_ADAPTER pAd,
5310 IN USHORT TxPreamble);
5312 VOID UpdateBasicRateBitmap(
5313 IN PRTMP_ADAPTER pAd);
5315 VOID MlmeUpdateTxRates(
5316 IN PRTMP_ADAPTER pAd,
5320 #ifdef DOT11_N_SUPPORT
5321 VOID MlmeUpdateHtTxRates(
5322 IN PRTMP_ADAPTER pAd,
5324 #endif // DOT11_N_SUPPORT //
5326 VOID RTMPCheckRates(
5327 IN PRTMP_ADAPTER pAd,
5328 IN OUT UCHAR SupRate[],
5329 IN OUT UCHAR *SupRateLen);
5331 #ifdef CONFIG_STA_SUPPORT
5332 BOOLEAN RTMPCheckChannel(
5333 IN PRTMP_ADAPTER pAd,
5334 IN UCHAR CentralChannel,
5336 #endif // CONFIG_STA_SUPPORT //
5338 BOOLEAN RTMPCheckHt(
5339 IN PRTMP_ADAPTER pAd,
5341 IN OUT HT_CAPABILITY_IE *pHtCapability,
5342 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5344 VOID StaQuickResponeForRateUpExec(
5345 IN PVOID SystemSpecific1,
5346 IN PVOID FunctionContext,
5347 IN PVOID SystemSpecific2,
5348 IN PVOID SystemSpecific3);
5350 VOID AsicBbpTuning1(
5351 IN PRTMP_ADAPTER pAd);
5353 VOID AsicBbpTuning2(
5354 IN PRTMP_ADAPTER pAd);
5356 VOID RTMPUpdateMlmeRate(
5357 IN PRTMP_ADAPTER pAd);
5360 IN PRTMP_ADAPTER pAd,
5365 VOID AsicEvaluateRxAnt(
5366 IN PRTMP_ADAPTER pAd);
5368 VOID AsicRxAntEvalTimeout(
5369 IN PVOID SystemSpecific1,
5370 IN PVOID FunctionContext,
5371 IN PVOID SystemSpecific2,
5372 IN PVOID SystemSpecific3);
5374 VOID APSDPeriodicExec(
5375 IN PVOID SystemSpecific1,
5376 IN PVOID FunctionContext,
5377 IN PVOID SystemSpecific2,
5378 IN PVOID SystemSpecific3);
5380 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5381 IN PRTMP_ADAPTER pAd,
5382 IN PMAC_TABLE_ENTRY pEntry);
5384 UCHAR RTMPStaFixedTxMode(
5385 IN PRTMP_ADAPTER pAd,
5386 IN PMAC_TABLE_ENTRY pEntry);
5388 VOID RTMPUpdateLegacyTxSetting(
5389 UCHAR fixed_tx_mode,
5390 PMAC_TABLE_ENTRY pEntry);
5392 BOOLEAN RTMPAutoRateSwitchCheck(
5393 IN PRTMP_ADAPTER pAd);
5395 NDIS_STATUS MlmeInit(
5396 IN PRTMP_ADAPTER pAd);
5399 IN PRTMP_ADAPTER pAd);
5402 IN PRTMP_ADAPTER pAd);
5404 VOID MlmeResetRalinkCounters(
5405 IN PRTMP_ADAPTER pAd);
5407 VOID BuildChannelList(
5408 IN PRTMP_ADAPTER pAd);
5411 IN PRTMP_ADAPTER pAd);
5414 IN PRTMP_ADAPTER pAd,
5417 VOID ChangeToCellPowerLimit(
5418 IN PRTMP_ADAPTER pAd,
5419 IN UCHAR AironetCellPowerLimit);
5422 IN PRTMP_ADAPTER pAd,
5426 IN PRTMP_ADAPTER pAd,
5430 IN PRTMP_ADAPTER pAd);
5433 IN PRTMP_ADAPTER pAd,
5438 IN PRTMP_ADAPTER pAd);
5441 IN PRTMP_ADAPTER pAd);
5444 IN PRTMP_ADAPTER pAd);
5446 USHORT RTMP_EEPROM_READ16(
5447 IN PRTMP_ADAPTER pAd,
5450 VOID RTMP_EEPROM_WRITE16(
5451 IN PRTMP_ADAPTER pAd,
5456 // Prototypes of function definition in rtmp_tkip.c
5458 VOID RTMPInitTkipEngine(
5459 IN PRTMP_ADAPTER pAd,
5468 VOID RTMPInitMICEngine(
5469 IN PRTMP_ADAPTER pAd,
5473 IN UCHAR UserPriority,
5476 BOOLEAN RTMPTkipCompareMICValue(
5477 IN PRTMP_ADAPTER pAd,
5482 IN UCHAR UserPriority,
5485 VOID RTMPCalculateMICValue(
5486 IN PRTMP_ADAPTER pAd,
5487 IN PNDIS_PACKET pPacket,
5489 IN PCIPHER_KEY pKey,
5492 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5493 IN PRTMP_ADAPTER pAd,
5501 VOID RTMPTkipAppendByte(
5502 IN PTKIP_KEY_INFO pTkip,
5505 VOID RTMPTkipAppend(
5506 IN PTKIP_KEY_INFO pTkip,
5510 VOID RTMPTkipGetMIC(
5511 IN PTKIP_KEY_INFO pTkip);
5513 BOOLEAN RTMPSoftDecryptTKIP(
5514 IN PRTMP_ADAPTER pAd,
5516 IN ULONG DataByteCnt,
5517 IN UCHAR UserPriority,
5518 IN PCIPHER_KEY pWpaKey);
5520 BOOLEAN RTMPSoftDecryptAES(
5521 IN PRTMP_ADAPTER pAd,
5523 IN ULONG DataByteCnt,
5524 IN PCIPHER_KEY pWpaKey);
5526 #if 0 // removed by AlbertY
5527 NDIS_STATUS RTMPWPAAddKeyProc(
5528 IN PRTMP_ADAPTER pAd,
5533 // Prototypes of function definition in cmm_info.c
5535 NDIS_STATUS RTMPWPARemoveKeyProc(
5536 IN PRTMP_ADAPTER pAd,
5539 VOID RTMPWPARemoveAllKeys(
5540 IN PRTMP_ADAPTER pAd);
5542 BOOLEAN RTMPCheckStrPrintAble(
5546 VOID RTMPSetPhyMode(
5547 IN PRTMP_ADAPTER pAd,
5550 VOID RTMPUpdateHTIE(
5551 IN RT_HT_CAPABILITY *pRtHt,
5553 OUT HT_CAPABILITY_IE *pHtCapability,
5554 OUT ADD_HT_INFO_IE *pAddHtInfo);
5556 VOID RTMPAddWcidAttributeEntry(
5557 IN PRTMP_ADAPTER pAd,
5561 IN MAC_TABLE_ENTRY *pEntry);
5563 CHAR *GetEncryptType(
5569 VOID RTMPIoctlGetSiteSurvey(
5570 IN PRTMP_ADAPTER pAdapter,
5571 IN struct iwreq *wrq);
5573 VOID RTMPIoctlGetMacTable(
5574 IN PRTMP_ADAPTER pAd,
5575 IN struct iwreq *wrq);
5577 VOID RTMPIndicateWPA2Status(
5578 IN PRTMP_ADAPTER pAdapter);
5580 VOID RTMPOPModeSwitching(
5581 IN PRTMP_ADAPTER pAd);
5583 #ifdef CONFIG_STA_SUPPORT
5584 VOID RTMPAddBSSIDCipher(
5585 IN PRTMP_ADAPTER pAd,
5587 IN PNDIS_802_11_KEY pKey,
5588 IN UCHAR CipherAlg);
5589 #endif // CONFIG_STA_SUPPORT //
5591 #ifdef DOT11_N_SUPPORT
5593 IN PRTMP_ADAPTER pAd,
5594 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5596 VOID RTMPSetIndividualHT(
5597 IN PRTMP_ADAPTER pAd,
5599 #endif // DOT11_N_SUPPORT //
5601 VOID RTMPSendWirelessEvent(
5602 IN PRTMP_ADAPTER pAd,
5603 IN USHORT Event_flag,
5608 VOID NICUpdateCntlCounters(
5609 IN PRTMP_ADAPTER pAd,
5610 IN PHEADER_802_11 pHeader,
5612 IN PRXWI_STRUC pRxWI);
5614 // prototype in wpa.c
5616 BOOLEAN WpaMsgTypeSubst(
5620 VOID WpaPskStateMachineInit(
5621 IN PRTMP_ADAPTER pAd,
5622 IN STATE_MACHINE *S,
5623 OUT STATE_MACHINE_FUNC Trans[]);
5625 VOID WpaEAPOLKeyAction(
5626 IN PRTMP_ADAPTER pAd,
5627 IN MLME_QUEUE_ELEM *Elem);
5629 VOID WpaPairMsg1Action(
5630 IN PRTMP_ADAPTER pAd,
5631 IN MLME_QUEUE_ELEM *Elem);
5633 VOID WpaPairMsg3Action(
5634 IN PRTMP_ADAPTER pAd,
5635 IN MLME_QUEUE_ELEM *Elem);
5637 VOID WpaGroupMsg1Action(
5638 IN PRTMP_ADAPTER pAd,
5639 IN MLME_QUEUE_ELEM *Elem);
5641 VOID WpaMacHeaderInit(
5642 IN PRTMP_ADAPTER pAd,
5643 IN OUT PHEADER_802_11 pHdr80211,
5647 VOID Wpa2PairMsg1Action(
5648 IN PRTMP_ADAPTER pAd,
5649 IN MLME_QUEUE_ELEM *Elem);
5651 VOID Wpa2PairMsg3Action(
5652 IN PRTMP_ADAPTER pAd,
5653 IN MLME_QUEUE_ELEM *Elem);
5655 BOOLEAN ParseKeyData(
5656 IN PRTMP_ADAPTER pAd,
5658 IN UCHAR KeyDataLen,
5659 IN UCHAR bPairewise);
5661 VOID RTMPToWirelessSta(
5662 IN PRTMP_ADAPTER pAd,
5663 IN PUCHAR pHeader802_3,
5667 IN BOOLEAN is4wayFrame);
5695 IN PRTMP_ADAPTER pAd,
5705 IN PRTMP_ADAPTER pAd,
5710 // prototype in aironet.c
5712 VOID AironetStateMachineInit(
5713 IN PRTMP_ADAPTER pAd,
5714 IN STATE_MACHINE *S,
5715 OUT STATE_MACHINE_FUNC Trans[]);
5717 VOID AironetMsgAction(
5718 IN PRTMP_ADAPTER pAd,
5719 IN MLME_QUEUE_ELEM *Elem);
5721 VOID AironetRequestAction(
5722 IN PRTMP_ADAPTER pAd,
5723 IN MLME_QUEUE_ELEM *Elem);
5725 VOID ChannelLoadRequestAction(
5726 IN PRTMP_ADAPTER pAd,
5729 VOID NoiseHistRequestAction(
5730 IN PRTMP_ADAPTER pAd,
5733 VOID BeaconRequestAction(
5734 IN PRTMP_ADAPTER pAd,
5737 VOID AironetReportAction(
5738 IN PRTMP_ADAPTER pAd,
5739 IN MLME_QUEUE_ELEM *Elem);
5741 VOID ChannelLoadReportAction(
5742 IN PRTMP_ADAPTER pAd,
5745 VOID NoiseHistReportAction(
5746 IN PRTMP_ADAPTER pAd,
5749 VOID AironetFinalReportAction(
5750 IN PRTMP_ADAPTER pAd);
5752 VOID BeaconReportAction(
5753 IN PRTMP_ADAPTER pAd,
5756 VOID AironetAddBeaconReport(
5757 IN PRTMP_ADAPTER pAd,
5759 IN PMLME_QUEUE_ELEM pElem);
5761 VOID AironetCreateBeaconReportFromBssTable(
5762 IN PRTMP_ADAPTER pAd);
5764 VOID DBGPRINT_TX_RING(
5765 IN PRTMP_ADAPTER pAd,
5768 VOID DBGPRINT_RX_RING(
5769 IN PRTMP_ADAPTER pAd);
5772 IN PRTMP_ADAPTER pAd,
5774 IN UCHAR RssiNumber);
5777 #ifdef DOT11N_DRAFT3
5778 VOID BuildEffectedChannelList(
5779 IN PRTMP_ADAPTER pAd);
5780 #endif // DOT11N_DRAFT3 //
5783 VOID APAsicEvaluateRxAnt(
5784 IN PRTMP_ADAPTER pAd);
5787 VOID APAsicRxAntEvalTimeout(
5788 IN PRTMP_ADAPTER pAd);
5791 // function prototype in cmm_wpa.c
5793 BOOLEAN RTMPCheckWPAframe(
5794 IN PRTMP_ADAPTER pAd,
5795 IN PMAC_TABLE_ENTRY pEntry,
5797 IN ULONG DataByteCount,
5798 IN UCHAR FromWhichBSSID);
5800 VOID AES_GTK_KEY_UNWRAP(
5802 OUT UCHAR *plaintext,
5804 IN UCHAR *ciphertext);
5806 BOOLEAN RTMPCheckRSNIE(
5807 IN PRTMP_ADAPTER pAd,
5810 IN MAC_TABLE_ENTRY *pEntry,
5813 BOOLEAN RTMPParseEapolKeyData(
5814 IN PRTMP_ADAPTER pAd,
5816 IN UCHAR KeyDataLen,
5817 IN UCHAR GroupKeyIndex,
5820 IN MAC_TABLE_ENTRY *pEntry);
5822 VOID ConstructEapolMsg(
5823 IN PRTMP_ADAPTER pAd,
5824 IN UCHAR PeerAuthMode,
5825 IN UCHAR PeerWepStatus,
5826 IN UCHAR MyGroupKeyWepStatus,
5828 IN UCHAR DefaultKeyIdx,
5829 IN UCHAR *ReplayCounter,
5836 OUT PEAPOL_PACKET pMsg);
5839 IN PRTMP_ADAPTER pAd,
5840 IN UCHAR PeerWepStatus,
5842 OUT PEAPOL_PACKET pMsg);
5844 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5845 IN PRTMP_ADAPTER pAd,
5847 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5848 IN PCIPHER_KEY pShard_key);
5850 VOID ConstructEapolKeyData(
5851 IN PRTMP_ADAPTER pAd,
5852 IN UCHAR PeerAuthMode,
5853 IN UCHAR PeerWepStatus,
5854 IN UCHAR GroupKeyWepStatus,
5856 IN UCHAR DefaultKeyIdx,
5857 IN BOOLEAN bWPA2Capable,
5862 OUT PEAPOL_PACKET pMsg);
5865 IN PRTMP_ADAPTER pAd,
5871 // function prototype in ap_wpa.c
5874 BOOLEAN APWpaMsgTypeSubst(
5878 MAC_TABLE_ENTRY *PACInquiry(
5879 IN PRTMP_ADAPTER pAd,
5882 BOOLEAN RTMPCheckMcast(
5883 IN PRTMP_ADAPTER pAd,
5884 IN PEID_STRUCT eid_ptr,
5885 IN MAC_TABLE_ENTRY *pEntry);
5887 BOOLEAN RTMPCheckUcast(
5888 IN PRTMP_ADAPTER pAd,
5889 IN PEID_STRUCT eid_ptr,
5890 IN MAC_TABLE_ENTRY *pEntry);
5892 BOOLEAN RTMPCheckAUTH(
5893 IN PRTMP_ADAPTER pAd,
5894 IN PEID_STRUCT eid_ptr,
5895 IN MAC_TABLE_ENTRY *pEntry);
5897 VOID WPAStart4WayHS(
5898 IN PRTMP_ADAPTER pAd,
5899 IN MAC_TABLE_ENTRY *pEntry,
5900 IN ULONG TimeInterval);
5902 VOID WPAStart2WayGroupHS(
5903 IN PRTMP_ADAPTER pAd,
5904 IN MAC_TABLE_ENTRY *pEntry);
5906 VOID APWpaEAPPacketAction(
5907 IN PRTMP_ADAPTER pAd,
5908 IN MLME_QUEUE_ELEM *Elem);
5910 VOID APWpaEAPOLStartAction(
5911 IN PRTMP_ADAPTER pAd,
5912 IN MLME_QUEUE_ELEM *Elem);
5914 VOID APWpaEAPOLLogoffAction(
5915 IN PRTMP_ADAPTER pAd,
5916 IN MLME_QUEUE_ELEM *Elem);
5918 VOID APWpaEAPOLKeyAction(
5919 IN PRTMP_ADAPTER pAd,
5920 IN MLME_QUEUE_ELEM *Elem);
5922 VOID APWpaEAPOLASFAlertAction(
5923 IN PRTMP_ADAPTER pAd,
5924 IN MLME_QUEUE_ELEM *Elem);
5926 VOID HandleCounterMeasure(
5927 IN PRTMP_ADAPTER pAd,
5928 IN MAC_TABLE_ENTRY *pEntry);
5930 VOID PeerPairMsg2Action(
5931 IN PRTMP_ADAPTER pAd,
5932 IN MAC_TABLE_ENTRY *pEntry,
5933 IN MLME_QUEUE_ELEM *Elem);
5935 VOID PeerPairMsg4Action(
5936 IN PRTMP_ADAPTER pAd,
5937 IN MAC_TABLE_ENTRY *pEntry,
5938 IN MLME_QUEUE_ELEM *Elem);
5941 IN PVOID SystemSpecific1,
5942 IN PVOID FunctionContext,
5943 IN PVOID SystemSpecific2,
5944 IN PVOID SystemSpecific3);
5947 IN PVOID SystemSpecific1,
5948 IN PVOID FunctionContext,
5949 IN PVOID SystemSpecific2,
5950 IN PVOID SystemSpecific3);
5952 VOID EnqueueStartForPSKExec(
5953 IN PVOID SystemSpecific1,
5954 IN PVOID FunctionContext,
5955 IN PVOID SystemSpecific2,
5956 IN PVOID SystemSpecific3);
5958 VOID RTMPHandleSTAKey(
5959 IN PRTMP_ADAPTER pAdapter,
5960 IN MAC_TABLE_ENTRY *pEntry,
5961 IN MLME_QUEUE_ELEM *Elem);
5963 #if 0 // merge into PeerPairMsg4Action
5964 VOID Wpa1PeerPairMsg4Action(
5965 IN PRTMP_ADAPTER pAd,
5966 IN MAC_TABLE_ENTRY *pEntry,
5967 IN MLME_QUEUE_ELEM *Elem);
5969 VOID Wpa2PeerPairMsg4Action(
5970 IN PRTMP_ADAPTER pAd,
5971 IN PMAC_TABLE_ENTRY pEntry,
5972 IN MLME_QUEUE_ELEM *Elem);
5975 VOID PeerGroupMsg2Action(
5976 IN PRTMP_ADAPTER pAd,
5977 IN PMAC_TABLE_ENTRY pEntry,
5981 #if 0 // replaced by WPAStart2WayGroupHS
5982 NDIS_STATUS APWpaHardTransmit(
5983 IN PRTMP_ADAPTER pAd,
5984 IN PMAC_TABLE_ENTRY pEntry);
5987 VOID PairDisAssocAction(
5988 IN PRTMP_ADAPTER pAd,
5989 IN PMAC_TABLE_ENTRY pEntry,
5992 VOID MlmeDeAuthAction(
5993 IN PRTMP_ADAPTER pAd,
5994 IN PMAC_TABLE_ENTRY pEntry,
5997 VOID GREKEYPeriodicExec(
5998 IN PVOID SystemSpecific1,
5999 IN PVOID FunctionContext,
6000 IN PVOID SystemSpecific2,
6001 IN PVOID SystemSpecific3);
6023 IN PRTMP_ADAPTER pAd,
6026 VOID AES_GTK_KEY_WRAP(
6028 IN UCHAR *plaintext,
6030 OUT UCHAR *ciphertext);
6033 IN PRTMP_ADAPTER pAdapter,
6037 VOID APToWirelessSta(
6038 IN PRTMP_ADAPTER pAd,
6039 IN MAC_TABLE_ENTRY *pEntry,
6040 IN PUCHAR pHeader802_3,
6044 IN BOOLEAN bClearFrame);
6046 VOID RTMPAddPMKIDCache(
6047 IN PRTMP_ADAPTER pAd,
6053 INT RTMPSearchPMKIDCache(
6054 IN PRTMP_ADAPTER pAd,
6058 VOID RTMPDeletePMKIDCache(
6059 IN PRTMP_ADAPTER pAd,
6063 VOID RTMPMaintainPMKIDCache(
6064 IN PRTMP_ADAPTER pAd);
6066 VOID RTMPSendTriggerFrame(
6067 IN PRTMP_ADAPTER pAd,
6071 IN BOOLEAN bQosNull);
6074 //typedef void (*TIMER_FUNCTION)(unsigned long);
6078 VOID RTMP_SetPeriodicTimer(
6079 IN NDIS_MINIPORT_TIMER *pTimer,
6080 IN unsigned long timeout);
6082 VOID RTMP_OS_Init_Timer(
6083 IN PRTMP_ADAPTER pAd,
6084 IN NDIS_MINIPORT_TIMER *pTimer,
6085 IN TIMER_FUNCTION function,
6088 VOID RTMP_OS_Add_Timer(
6089 IN NDIS_MINIPORT_TIMER *pTimer,
6090 IN unsigned long timeout);
6092 VOID RTMP_OS_Mod_Timer(
6093 IN NDIS_MINIPORT_TIMER *pTimer,
6094 IN unsigned long timeout);
6097 VOID RTMP_OS_Del_Timer(
6098 IN NDIS_MINIPORT_TIMER *pTimer,
6099 OUT BOOLEAN *pCancelled);
6102 VOID RTMP_OS_Release_Packet(
6103 IN PRTMP_ADAPTER pAd,
6104 IN PQUEUE_ENTRY pEntry);
6109 NDIS_STATUS os_alloc_mem(
6110 IN PRTMP_ADAPTER pAd,
6114 NDIS_STATUS os_free_mem(
6115 IN PRTMP_ADAPTER pAd,
6119 void RTMP_AllocateSharedMemory(
6120 IN PRTMP_ADAPTER pAd,
6123 OUT PVOID *VirtualAddress,
6124 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6126 VOID RTMPFreeTxRxRingMemory(
6127 IN PRTMP_ADAPTER pAd);
6129 NDIS_STATUS AdapterBlockAllocateMemory(
6133 void RTMP_AllocateTxDescMemory(
6134 IN PRTMP_ADAPTER pAd,
6138 OUT PVOID *VirtualAddress,
6139 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6141 void RTMP_AllocateFirstTxBuffer(
6142 IN PRTMP_ADAPTER pAd,
6146 OUT PVOID *VirtualAddress,
6147 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6149 void RTMP_AllocateMgmtDescMemory(
6150 IN PRTMP_ADAPTER pAd,
6153 OUT PVOID *VirtualAddress,
6154 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6156 void RTMP_AllocateRxDescMemory(
6157 IN PRTMP_ADAPTER pAd,
6160 OUT PVOID *VirtualAddress,
6161 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6163 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6164 IN PRTMP_ADAPTER pAd,
6167 OUT PVOID *VirtualAddress,
6168 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6170 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6171 IN PRTMP_ADAPTER pAd,
6174 OUT PVOID *VirtualAddress);
6176 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6177 IN PRTMP_ADAPTER pAd,
6180 void RTMP_QueryPacketInfo(
6181 IN PNDIS_PACKET pPacket,
6182 OUT PACKET_INFO *pPacketInfo,
6183 OUT PUCHAR *pSrcBufVA,
6184 OUT UINT *pSrcBufLen);
6186 void RTMP_QueryNextPacketInfo(
6187 IN PNDIS_PACKET *ppPacket,
6188 OUT PACKET_INFO *pPacketInfo,
6189 OUT PUCHAR *pSrcBufVA,
6190 OUT UINT *pSrcBufLen);
6193 BOOLEAN RTMP_FillTxBlkInfo(
6194 IN RTMP_ADAPTER *pAd,
6198 PRTMP_SCATTER_GATHER_LIST
6199 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6202 void announce_802_3_packet(
6203 IN PRTMP_ADAPTER pAd,
6204 IN PNDIS_PACKET pPacket);
6207 UINT BA_Reorder_AMSDU_Annnounce(
6208 IN PRTMP_ADAPTER pAd,
6209 IN PNDIS_PACKET pPacket);
6212 UINT Handle_AMSDU_Packet(
6213 IN PRTMP_ADAPTER pAd,
6216 IN UCHAR FromWhichBSSID);
6219 void convert_802_11_to_802_3_packet(
6220 IN PRTMP_ADAPTER pAd,
6221 IN PNDIS_PACKET pPacket,
6225 IN UCHAR FromWhichBSSID);
6228 PNET_DEV get_netdev_from_bssid(
6229 IN PRTMP_ADAPTER pAd,
6230 IN UCHAR FromWhichBSSID);
6233 PNDIS_PACKET duplicate_pkt(
6234 IN PRTMP_ADAPTER pAd,
6235 IN PUCHAR pHeader802_3,
6239 IN UCHAR FromWhichBSSID);
6242 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6243 IN PRTMP_ADAPTER pAd,
6244 IN PNDIS_PACKET pOldPkt);
6246 PNDIS_PACKET duplicate_pkt_with_VLAN(
6247 IN PRTMP_ADAPTER pAd,
6248 IN PUCHAR pHeader802_3,
6252 IN UCHAR FromWhichBSSID);
6254 PNDIS_PACKET duplicate_pkt_with_WPI(
6255 IN PRTMP_ADAPTER pAd,
6256 IN PNDIS_PACKET pPacket,
6257 IN UINT32 ext_head_len,
6258 IN UINT32 ext_tail_len);
6260 UCHAR VLAN_8023_Header_Copy(
6261 IN PRTMP_ADAPTER pAd,
6262 IN PUCHAR pHeader802_3,
6265 IN UCHAR FromWhichBSSID);
6267 #ifdef DOT11_N_SUPPORT
6268 void ba_flush_reordering_timeout_mpdus(
6269 IN PRTMP_ADAPTER pAd,
6270 IN PBA_REC_ENTRY pBAEntry,
6274 VOID BAOriSessionSetUp(
6275 IN PRTMP_ADAPTER pAd,
6276 IN MAC_TABLE_ENTRY *pEntry,
6280 IN BOOLEAN isForced);
6282 VOID BASessionTearDownALL(
6283 IN OUT PRTMP_ADAPTER pAd,
6285 #endif // DOT11_N_SUPPORT //
6287 BOOLEAN OS_Need_Clone_Packet(void);
6290 VOID build_tx_packet(
6291 IN PRTMP_ADAPTER pAd,
6292 IN PNDIS_PACKET pPacket,
6297 VOID BAOriSessionTearDown(
6298 IN OUT PRTMP_ADAPTER pAd,
6301 IN BOOLEAN bPassive,
6302 IN BOOLEAN bForceSend);
6304 VOID BARecSessionTearDown(
6305 IN OUT PRTMP_ADAPTER pAd,
6308 IN BOOLEAN bPassive);
6310 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6311 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6313 ULONG AutoChBssInsertEntry(
6314 IN PRTMP_ADAPTER pAd,
6321 void AutoChBssTableInit(
6322 IN PRTMP_ADAPTER pAd);
6324 void ChannelInfoInit(
6325 IN PRTMP_ADAPTER pAd);
6327 void AutoChBssTableDestroy(
6328 IN PRTMP_ADAPTER pAd);
6330 void ChannelInfoDestroy(
6331 IN PRTMP_ADAPTER pAd);
6333 UCHAR New_ApAutoSelectChannel(
6334 IN PRTMP_ADAPTER pAd);
6336 BOOLEAN rtstrmactohex(
6340 BOOLEAN rtstrcasecmp(
6344 char *rtstrstruncasecmp(
6350 IN const char * s2);
6354 IN const char * ct);
6358 unsigned int *addr);
6360 ////////// common ioctl functions //////////
6361 INT Set_DriverVersion_Proc(
6362 IN PRTMP_ADAPTER pAd,
6365 INT Set_CountryRegion_Proc(
6366 IN PRTMP_ADAPTER pAd,
6369 INT Set_CountryRegionABand_Proc(
6370 IN PRTMP_ADAPTER pAd,
6373 INT Set_WirelessMode_Proc(
6374 IN PRTMP_ADAPTER pAd,
6377 INT Set_Channel_Proc(
6378 IN PRTMP_ADAPTER pAd,
6381 INT Set_ShortSlot_Proc(
6382 IN PRTMP_ADAPTER pAd,
6385 INT Set_TxPower_Proc(
6386 IN PRTMP_ADAPTER pAd,
6389 INT Set_BGProtection_Proc(
6390 IN PRTMP_ADAPTER pAd,
6393 INT Set_TxPreamble_Proc(
6394 IN PRTMP_ADAPTER pAd,
6397 INT Set_RTSThreshold_Proc(
6398 IN PRTMP_ADAPTER pAd,
6401 INT Set_FragThreshold_Proc(
6402 IN PRTMP_ADAPTER pAd,
6405 INT Set_TxBurst_Proc(
6406 IN PRTMP_ADAPTER pAd,
6409 #ifdef AGGREGATION_SUPPORT
6410 INT Set_PktAggregate_Proc(
6411 IN PRTMP_ADAPTER pAd,
6415 INT Set_IEEE80211H_Proc(
6416 IN PRTMP_ADAPTER pAd,
6421 IN PRTMP_ADAPTER pAd,
6425 INT Show_DescInfo_Proc(
6426 IN PRTMP_ADAPTER pAd,
6429 INT Set_ResetStatCounter_Proc(
6430 IN PRTMP_ADAPTER pAd,
6433 #ifdef DOT11_N_SUPPORT
6434 INT Set_BASetup_Proc(
6435 IN PRTMP_ADAPTER pAd,
6438 INT Set_BADecline_Proc(
6439 IN PRTMP_ADAPTER pAd,
6442 INT Set_BAOriTearDown_Proc(
6443 IN PRTMP_ADAPTER pAd,
6446 INT Set_BARecTearDown_Proc(
6447 IN PRTMP_ADAPTER pAd,
6451 IN PRTMP_ADAPTER pAd,
6455 IN PRTMP_ADAPTER pAd,
6459 IN PRTMP_ADAPTER pAd,
6462 INT Set_HtOpMode_Proc(
6463 IN PRTMP_ADAPTER pAd,
6466 INT Set_HtStbc_Proc(
6467 IN PRTMP_ADAPTER pAd,
6471 IN PRTMP_ADAPTER pAd,
6474 INT Set_HtExtcha_Proc(
6475 IN PRTMP_ADAPTER pAd,
6478 INT Set_HtMpduDensity_Proc(
6479 IN PRTMP_ADAPTER pAd,
6482 INT Set_HtBaWinSize_Proc(
6483 IN PRTMP_ADAPTER pAd,
6487 IN PRTMP_ADAPTER pAd,
6490 INT Set_HtLinkAdapt_Proc(
6491 IN PRTMP_ADAPTER pAd,
6494 INT Set_HtAmsdu_Proc(
6495 IN PRTMP_ADAPTER pAd,
6498 INT Set_HtAutoBa_Proc(
6499 IN PRTMP_ADAPTER pAd,
6502 INT Set_HtProtect_Proc(
6503 IN PRTMP_ADAPTER pAd,
6506 INT Set_HtMimoPs_Proc(
6507 IN PRTMP_ADAPTER pAd,
6511 INT Set_ForceShortGI_Proc(
6512 IN PRTMP_ADAPTER pAd,
6515 INT Set_ForceGF_Proc(
6516 IN PRTMP_ADAPTER pAd,
6520 IN PRTMP_ADAPTER pAd);
6522 INT Set_SendPSMPAction_Proc(
6523 IN PRTMP_ADAPTER pAd,
6526 INT Set_HtMIMOPSmode_Proc(
6527 IN PRTMP_ADAPTER pAd,
6531 INT Set_HtTxBASize_Proc(
6532 IN PRTMP_ADAPTER pAd,
6534 #endif // DOT11_N_SUPPORT //
6538 #ifdef CONFIG_STA_SUPPORT
6540 VOID RTMPSendDLSTearDownFrame(
6541 IN PRTMP_ADAPTER pAd,
6544 #ifdef DOT11_N_SUPPORT
6547 IN PRTMP_ADAPTER pAd,
6548 OUT PQUERYBA_TABLE pBAT);
6549 #endif // DOT11_N_SUPPORT //
6551 #ifdef WPA_SUPPLICANT_SUPPORT
6552 INT WpaCheckEapCode(
6553 IN PRTMP_ADAPTER pAd,
6558 VOID WpaSendMicFailureToWpaSupplicant(
6559 IN PRTMP_ADAPTER pAd,
6560 IN BOOLEAN bUnicast);
6562 VOID SendAssocIEsToWpaSupplicant(
6563 IN PRTMP_ADAPTER pAd);
6564 #endif // WPA_SUPPLICANT_SUPPORT //
6566 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6567 int wext_notify_event_assoc(
6568 IN RTMP_ADAPTER *pAd);
6569 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6571 #endif // CONFIG_STA_SUPPORT //
6575 #ifdef DOT11_N_SUPPORT
6576 VOID Handle_BSS_Width_Trigger_Events(
6577 IN PRTMP_ADAPTER pAd);
6579 void build_ext_channel_switch_ie(
6580 IN PRTMP_ADAPTER pAd,
6581 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6582 #endif // DOT11_N_SUPPORT //
6585 BOOLEAN APRxDoneInterruptHandle(
6586 IN PRTMP_ADAPTER pAd);
6588 BOOLEAN STARxDoneInterruptHandle(
6589 IN PRTMP_ADAPTER pAd,
6592 #ifdef DOT11_N_SUPPORT
6593 // AMPDU packet indication
6594 VOID Indicate_AMPDU_Packet(
6595 IN PRTMP_ADAPTER pAd,
6597 IN UCHAR FromWhichBSSID);
6599 // AMSDU packet indication
6600 VOID Indicate_AMSDU_Packet(
6601 IN PRTMP_ADAPTER pAd,
6603 IN UCHAR FromWhichBSSID);
6604 #endif // DOT11_N_SUPPORT //
6606 // Normal legacy Rx packet indication
6607 VOID Indicate_Legacy_Packet(
6608 IN PRTMP_ADAPTER pAd,
6610 IN UCHAR FromWhichBSSID);
6612 VOID Indicate_EAPOL_Packet(
6613 IN PRTMP_ADAPTER pAd,
6615 IN UCHAR FromWhichBSSID);
6617 void update_os_packet_info(
6618 IN PRTMP_ADAPTER pAd,
6620 IN UCHAR FromWhichBSSID);
6622 void wlan_802_11_to_802_3_packet(
6623 IN PRTMP_ADAPTER pAd,
6625 IN PUCHAR pHeader802_3,
6626 IN UCHAR FromWhichBSSID);
6628 UINT deaggregate_AMSDU_announce(
6629 IN PRTMP_ADAPTER pAd,
6630 PNDIS_PACKET pPacket,
6635 #ifdef CONFIG_STA_SUPPORT
6636 // remove LLC and get 802_3 Header
6637 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6639 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6641 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6643 _pDA = _pRxBlk->pHeader->Addr3; \
6644 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6648 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6650 _pDA = _pRxBlk->pHeader->Addr1; \
6651 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6652 _pSA = _pRxBlk->pHeader->Addr2; \
6654 _pSA = _pRxBlk->pHeader->Addr3; \
6658 _pDA = _pRxBlk->pHeader->Addr1; \
6659 _pSA = _pRxBlk->pHeader->Addr2; \
6663 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6664 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6666 #endif // CONFIG_STA_SUPPORT //
6669 BOOLEAN APFowardWirelessStaToWirelessSta(
6670 IN PRTMP_ADAPTER pAd,
6671 IN PNDIS_PACKET pPacket,
6672 IN ULONG FromWhichBSSID);
6674 VOID Announce_or_Forward_802_3_Packet(
6675 IN PRTMP_ADAPTER pAd,
6676 IN PNDIS_PACKET pPacket,
6677 IN UCHAR FromWhichBSSID);
6679 VOID Sta_Announce_or_Forward_802_3_Packet(
6680 IN PRTMP_ADAPTER pAd,
6681 IN PNDIS_PACKET pPacket,
6682 IN UCHAR FromWhichBSSID);
6685 #ifdef CONFIG_STA_SUPPORT
6686 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6687 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6688 //announce_802_3_packet(_pAd, _pPacket);
6689 #endif // CONFIG_STA_SUPPORT //
6692 PNDIS_PACKET DuplicatePacket(
6693 IN PRTMP_ADAPTER pAd,
6694 IN PNDIS_PACKET pPacket,
6695 IN UCHAR FromWhichBSSID);
6698 PNDIS_PACKET ClonePacket(
6699 IN PRTMP_ADAPTER pAd,
6700 IN PNDIS_PACKET pPacket,
6705 // Normal, AMPDU or AMSDU
6706 VOID CmmRxnonRalinkFrameIndicate(
6707 IN PRTMP_ADAPTER pAd,
6709 IN UCHAR FromWhichBSSID);
6711 VOID CmmRxRalinkFrameIndicate(
6712 IN PRTMP_ADAPTER pAd,
6713 IN MAC_TABLE_ENTRY *pEntry,
6715 IN UCHAR FromWhichBSSID);
6717 VOID Update_Rssi_Sample(
6718 IN PRTMP_ADAPTER pAd,
6719 IN RSSI_SAMPLE *pRssi,
6720 IN PRXWI_STRUC pRxWI);
6722 PNDIS_PACKET GetPacketFromRxRing(
6723 IN PRTMP_ADAPTER pAd,
6724 OUT PRT28XX_RXD_STRUC pSaveRxD,
6725 OUT BOOLEAN *pbReschedule,
6726 IN OUT UINT32 *pRxPending);
6728 PNDIS_PACKET RTMPDeFragmentDataFrame(
6729 IN PRTMP_ADAPTER pAd,
6732 ////////////////////////////////////////
6740 typedef struct _DefaultKeyIdxValue
6744 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6748 #ifdef CONFIG_STA_SUPPORT
6750 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6751 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6752 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6753 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6754 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6755 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6756 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6757 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6758 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6759 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6760 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6763 P80211ENUM_msgitem_status_no_value = 0x00
6766 P80211ENUM_truth_false = 0x00,
6767 P80211ENUM_truth_true = 0x01
6770 /* Definition from madwifi */
6776 } p80211item_uint32_t;
6781 #define WLAN_DEVNAMELEN_MAX 16
6782 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6783 p80211item_uint32_t hosttime;
6784 p80211item_uint32_t mactime;
6785 p80211item_uint32_t channel;
6786 p80211item_uint32_t rssi;
6787 p80211item_uint32_t sq;
6788 p80211item_uint32_t signal;
6789 p80211item_uint32_t noise;
6790 p80211item_uint32_t rate;
6791 p80211item_uint32_t istx;
6792 p80211item_uint32_t frmlen;
6793 } wlan_ng_prism2_header;
6795 /* The radio capture header precedes the 802.11 header. */
6796 typedef struct PACKED _ieee80211_radiotap_header {
6797 UINT8 it_version; /* Version 0. Only increases
6798 * for drastic changes,
6799 * introduction of compatible
6800 * new fields does not count.
6803 UINT16 it_len; /* length of the whole
6804 * header in bytes, including
6805 * it_version, it_pad,
6806 * it_len, and data fields.
6808 UINT32 it_present; /* A bitmap telling which
6809 * fields are present. Set bit 31
6810 * (0x80000000) to extend the
6811 * bitmap by another 32 bits.
6812 * Additional extensions are made
6813 * by setting bit 31.
6815 }ieee80211_radiotap_header ;
6817 enum ieee80211_radiotap_type {
6818 IEEE80211_RADIOTAP_TSFT = 0,
6819 IEEE80211_RADIOTAP_FLAGS = 1,
6820 IEEE80211_RADIOTAP_RATE = 2,
6821 IEEE80211_RADIOTAP_CHANNEL = 3,
6822 IEEE80211_RADIOTAP_FHSS = 4,
6823 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6824 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6825 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6826 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6827 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6828 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6829 IEEE80211_RADIOTAP_ANTENNA = 11,
6830 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6831 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6834 #define WLAN_RADIOTAP_PRESENT ( \
6835 (1 << IEEE80211_RADIOTAP_TSFT) | \
6836 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6837 (1 << IEEE80211_RADIOTAP_RATE) | \
6840 typedef struct _wlan_radiotap_header {
6841 ieee80211_radiotap_header wt_ihdr;
6845 } wlan_radiotap_header;
6846 /* Definition from madwifi */
6848 void send_monitor_packets(
6849 IN PRTMP_ADAPTER pAd,
6852 #if WIRELESS_EXT >= 12
6853 // This function will be called when query /proc
6854 struct iw_statistics *rt28xx_get_wireless_stats(
6855 IN struct net_device *net_dev);
6858 VOID RTMPSetDesiredRates(
6859 IN PRTMP_ADAPTER pAdapter,
6861 #endif // CONFIG_STA_SUPPORT //
6863 INT Set_FixedTxMode_Proc(
6864 IN PRTMP_ADAPTER pAd,
6867 static inline char* GetPhyMode(
6877 #ifdef DOT11_N_SUPPORT
6881 case MODE_HTGREENFIELD:
6883 #endif // DOT11_N_SUPPORT //
6890 static inline char* GetBW(
6900 #ifdef DOT11_N_SUPPORT
6903 #endif // DOT11_N_SUPPORT //
6910 VOID RT28xxThreadTerminate(
6911 IN RTMP_ADAPTER *pAd);
6913 BOOLEAN RT28XXChipsetCheck(
6916 BOOLEAN RT28XXNetDevInit(
6918 IN struct net_device *net_dev,
6919 IN RTMP_ADAPTER *pAd);
6921 BOOLEAN RT28XXProbePostConfig(
6923 IN RTMP_ADAPTER *pAd,
6926 VOID RT28XXDMADisable(
6927 IN RTMP_ADAPTER *pAd);
6929 VOID RT28XXDMAEnable(
6930 IN RTMP_ADAPTER *pAd);
6932 VOID RT28xx_UpdateBeaconToAsic(
6933 IN RTMP_ADAPTER * pAd,
6936 IN ULONG UpdatePos);
6939 IN struct net_device *net_dev,
6940 IN OUT struct ifreq *rq,
6944 #ifdef CONFIG_STA_SUPPORT
6945 INT rt28xx_sta_ioctl(
6946 IN struct net_device *net_dev,
6947 IN OUT struct ifreq *rq,
6949 #endif // CONFIG_STA_SUPPORT //
6951 BOOLEAN RT28XXSecurityKeyAdd(
6952 IN PRTMP_ADAPTER pAd,
6955 IN MAC_TABLE_ENTRY *pEntry);
6957 ////////////////////////////////////////
6958 PNDIS_PACKET GetPacketFromRxRing(
6959 IN PRTMP_ADAPTER pAd,
6960 OUT PRT28XX_RXD_STRUC pSaveRxD,
6961 OUT BOOLEAN *pbReschedule,
6962 IN OUT UINT32 *pRxPending);
6965 void kill_thread_task(PRTMP_ADAPTER pAd);
6967 void tbtt_tasklet(unsigned long data);
6970 VOID AsicTurnOffRFClk(
6971 IN PRTMP_ADAPTER pAd,
6974 VOID AsicTurnOnRFClk(
6975 IN PRTMP_ADAPTER pAd,
6980 // Function Prototype in rtusb_bulk.c
6982 VOID RTUSBInitTxDesc(
6983 IN PRTMP_ADAPTER pAd,
6984 IN PTX_CONTEXT pTxContext,
6985 IN UCHAR BulkOutPipeId,
6986 IN usb_complete_t Func);
6988 VOID RTUSBInitHTTxDesc(
6989 IN PRTMP_ADAPTER pAd,
6990 IN PHT_TX_CONTEXT pTxContext,
6991 IN UCHAR BulkOutPipeId,
6992 IN ULONG BulkOutSize,
6993 IN usb_complete_t Func);
6995 VOID RTUSBInitRxDesc(
6996 IN PRTMP_ADAPTER pAd,
6997 IN PRX_CONTEXT pRxContext);
6999 VOID RTUSBCleanUpDataBulkOutQueue(
7000 IN PRTMP_ADAPTER pAd);
7002 VOID RTUSBCancelPendingBulkOutIRP(
7003 IN PRTMP_ADAPTER pAd);
7005 VOID RTUSBBulkOutDataPacket(
7006 IN PRTMP_ADAPTER pAd,
7007 IN UCHAR BulkOutPipeId,
7010 VOID RTUSBBulkOutNullFrame(
7011 IN PRTMP_ADAPTER pAd);
7013 VOID RTUSBBulkOutRTSFrame(
7014 IN PRTMP_ADAPTER pAd);
7016 VOID RTUSBCancelPendingBulkInIRP(
7017 IN PRTMP_ADAPTER pAd);
7019 VOID RTUSBCancelPendingIRPs(
7020 IN PRTMP_ADAPTER pAd);
7022 VOID RTUSBBulkOutMLMEPacket(
7023 IN PRTMP_ADAPTER pAd,
7026 VOID RTUSBBulkOutPsPoll(
7027 IN PRTMP_ADAPTER pAd);
7029 VOID RTUSBCleanUpMLMEBulkOutQueue(
7030 IN PRTMP_ADAPTER pAd);
7032 VOID RTUSBKickBulkOut(
7033 IN PRTMP_ADAPTER pAd);
7035 VOID RTUSBBulkReceive(
7036 IN PRTMP_ADAPTER pAd);
7039 IN RTMP_ADAPTER *pAd);
7041 VOID RTUSBInitRxDesc(
7042 IN PRTMP_ADAPTER pAd,
7043 IN PRX_CONTEXT pRxContext);
7045 VOID RTUSBBulkRxHandle(
7046 IN unsigned long data);
7049 // Function Prototype in rtusb_io.c
7051 NTSTATUS RTUSBMultiRead(
7052 IN PRTMP_ADAPTER pAd,
7057 NTSTATUS RTUSBMultiWrite(
7058 IN PRTMP_ADAPTER pAd,
7063 NTSTATUS RTUSBMultiWrite_OneByte(
7064 IN PRTMP_ADAPTER pAd,
7068 NTSTATUS RTUSBReadBBPRegister(
7069 IN PRTMP_ADAPTER pAd,
7073 NTSTATUS RTUSBWriteBBPRegister(
7074 IN PRTMP_ADAPTER pAd,
7078 NTSTATUS RTUSBWriteRFRegister(
7079 IN PRTMP_ADAPTER pAd,
7082 NTSTATUS RT30xxWriteRFRegister(
7083 IN PRTMP_ADAPTER pAd,
7087 NTSTATUS RT30xxReadRFRegister(
7088 IN PRTMP_ADAPTER pAd,
7092 NTSTATUS RTUSB_VendorRequest(
7093 IN PRTMP_ADAPTER pAd,
7094 IN UINT32 TransferFlags,
7095 IN UCHAR ReservedBits,
7099 IN PVOID TransferBuffer,
7100 IN UINT32 TransferBufferLength);
7102 NTSTATUS RTUSBReadEEPROM(
7103 IN PRTMP_ADAPTER pAd,
7108 NTSTATUS RTUSBWriteEEPROM(
7109 IN PRTMP_ADAPTER pAd,
7114 VOID RTUSBPutToSleep(
7115 IN PRTMP_ADAPTER pAd);
7117 NTSTATUS RTUSBWakeUp(
7118 IN PRTMP_ADAPTER pAd);
7120 VOID RTUSBInitializeCmdQ(
7123 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7124 IN PRTMP_ADAPTER pAd,
7126 IN BOOLEAN SetInformation,
7127 IN PVOID pInformationBuffer,
7128 IN UINT32 InformationBufferLength);
7130 NDIS_STATUS RTUSBEnqueueInternalCmd(
7131 IN PRTMP_ADAPTER pAd,
7133 IN PVOID pInformationBuffer,
7134 IN UINT32 InformationBufferLength);
7136 VOID RTUSBDequeueCmd(
7138 OUT PCmdQElmt *pcmdqelmt);
7141 IN OUT PVOID Context);
7144 IN OUT PVOID Context);
7146 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7147 IN RTMP_ADAPTER *pAd,
7148 IN RALINK_TIMER_STRUCT *pTimer);
7150 BOOLEAN RT2870_TimerQ_Remove(
7151 IN RTMP_ADAPTER *pAd,
7152 IN RALINK_TIMER_STRUCT *pTimer);
7154 void RT2870_TimerQ_Exit(
7155 IN RTMP_ADAPTER *pAd);
7157 void RT2870_TimerQ_Init(
7158 IN RTMP_ADAPTER *pAd);
7160 VOID RT2870_BssBeaconExit(
7161 IN RTMP_ADAPTER *pAd);
7163 VOID RT2870_BssBeaconStop(
7164 IN RTMP_ADAPTER *pAd);
7166 VOID RT2870_BssBeaconStart(
7167 IN RTMP_ADAPTER * pAd);
7169 VOID RT2870_BssBeaconInit(
7170 IN RTMP_ADAPTER *pAd);
7172 VOID RT2870_WatchDog(
7173 IN RTMP_ADAPTER *pAd);
7175 NTSTATUS RTUSBWriteMACRegister(
7176 IN PRTMP_ADAPTER pAd,
7180 NTSTATUS RTUSBReadMACRegister(
7181 IN PRTMP_ADAPTER pAd,
7183 OUT PUINT32 pValue);
7185 NTSTATUS RTUSBSingleWrite(
7186 IN RTMP_ADAPTER *pAd,
7190 NTSTATUS RTUSBFirmwareRun(
7191 IN PRTMP_ADAPTER pAd);
7193 NTSTATUS RTUSBFirmwareWrite(
7194 IN PRTMP_ADAPTER pAd,
7198 NTSTATUS RTUSBFirmwareOpmode(
7199 IN PRTMP_ADAPTER pAd,
7200 OUT PUINT32 pValue);
7202 NTSTATUS RTUSBVenderReset(
7203 IN PRTMP_ADAPTER pAd);
7205 NDIS_STATUS RTUSBSetHardWareRegister(
7206 IN PRTMP_ADAPTER pAdapter,
7209 NDIS_STATUS RTUSBQueryHardWareRegister(
7210 IN PRTMP_ADAPTER pAdapter,
7214 IN PRTMP_ADAPTER pAd);
7217 NDIS_STATUS CreateThreads(
7218 IN struct net_device *net_dev );
7221 VOID MacTableInitialize(
7222 IN PRTMP_ADAPTER pAd);
7225 IN PRTMP_ADAPTER pAd,
7228 NDIS_STATUS RTMPWPAAddKeyProc(
7229 IN PRTMP_ADAPTER pAd,
7232 VOID AsicRxAntEvalAction(
7233 IN PRTMP_ADAPTER pAd);
7235 #if 0 // Mark because not used in RT28xx.
7236 NTSTATUS RTUSBRxPacket(
7237 IN PRTMP_ADAPTER pAd,
7238 IN BOOLEAN bBulkReceive);
7240 VOID RTUSBDequeueMLMEPacket(
7241 IN PRTMP_ADAPTER pAd);
7243 VOID RTUSBCleanUpMLMEWaitQueue(
7244 IN PRTMP_ADAPTER pAd);
7248 IN PRTMP_ADAPTER pAd,
7249 IN PUCHAR pHeader802_3,
7253 OUT PNDIS_PACKET *ppPacket);
7255 UINT deaggregate_AMSDU_announce(
7256 IN PRTMP_ADAPTER pAd,
7257 PNDIS_PACKET pPacket,
7261 NDIS_STATUS RTMPCheckRxError(
7262 IN PRTMP_ADAPTER pAd,
7263 IN PHEADER_802_11 pHeader,
7264 IN PRXWI_STRUC pRxWI,
7265 IN PRT28XX_RXD_STRUC pRxINFO);
7268 VOID RTUSBMlmeHardTransmit(
7269 IN PRTMP_ADAPTER pAd,
7270 IN PMGMT_STRUC pMgmt);
7276 VOID RTUSBResumeMsduTransmission(
7277 IN PRTMP_ADAPTER pAd);
7279 VOID RTUSBSuspendMsduTransmission(
7280 IN PRTMP_ADAPTER pAd);
7284 // Function Prototype in rtusb_data.c
7286 NDIS_STATUS RTUSBFreeDescriptorRequest(
7287 IN PRTMP_ADAPTER pAd,
7288 IN UCHAR BulkOutPipeId,
7289 IN UINT32 NumberRequired);
7292 BOOLEAN RTUSBNeedQueueBackForAgg(
7293 IN RTMP_ADAPTER *pAd,
7294 IN UCHAR BulkOutPipeId);
7297 VOID RTMPWriteTxInfo(
7298 IN PRTMP_ADAPTER pAd,
7299 IN PTXINFO_STRUC pTxInfo,
7300 IN USHORT USBDMApktLen,
7307 // Function Prototype in cmm_data_2870.c
7309 USHORT RtmpUSB_WriteSubTxResource(
7310 IN PRTMP_ADAPTER pAd,
7313 OUT USHORT *FreeNumber);
7315 USHORT RtmpUSB_WriteSingleTxResource(
7316 IN PRTMP_ADAPTER pAd,
7319 OUT USHORT *FreeNumber);
7321 USHORT RtmpUSB_WriteFragTxResource(
7322 IN PRTMP_ADAPTER pAd,
7325 OUT USHORT *FreeNumber);
7327 USHORT RtmpUSB_WriteMultiTxResource(
7328 IN PRTMP_ADAPTER pAd,
7331 OUT USHORT *FreeNumber);
7333 VOID RtmpUSB_FinalWriteTxResource(
7334 IN PRTMP_ADAPTER pAd,
7336 IN USHORT totalMPDUSize,
7339 VOID RtmpUSBDataLastTxIdx(
7340 IN PRTMP_ADAPTER pAd,
7344 VOID RtmpUSBDataKickOut(
7345 IN PRTMP_ADAPTER pAd,
7350 int RtmpUSBMgmtKickOut(
7351 IN RTMP_ADAPTER *pAd,
7353 IN PNDIS_PACKET pPacket,
7354 IN PUCHAR pSrcBufVA,
7357 VOID RtmpUSBNullFrameKickOut(
7358 IN RTMP_ADAPTER *pAd,
7360 IN UCHAR *pNullFrame,
7361 IN UINT32 frameLen);
7363 VOID RT28xxUsbStaAsicForceWakeup(
7364 IN PRTMP_ADAPTER pAd,
7365 IN BOOLEAN bFromTx);
7367 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7368 IN PRTMP_ADAPTER pAd,
7369 IN USHORT TbttNumToNextWakeUp);
7371 VOID RT28xxUsbMlmeRadioOn(
7372 IN PRTMP_ADAPTER pAd);
7374 VOID RT28xxUsbMlmeRadioOFF(
7375 IN PRTMP_ADAPTER pAd);
7378 ////////////////////////////////////////
7381 IN RTMP_ADAPTER *pAd);
7383 UINT32 QBSS_LoadElementAppend(
7384 IN RTMP_ADAPTER *pAd,
7387 VOID QBSS_LoadUpdate(
7388 IN RTMP_ADAPTER *pAd);
7390 ///////////////////////////////////////
7391 INT RTMPShowCfgValue(
7392 IN PRTMP_ADAPTER pAd,
7396 PCHAR RTMPGetRalinkAuthModeStr(
7397 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7399 PCHAR RTMPGetRalinkEncryModeStr(
7400 IN USHORT encryMode);
7401 //////////////////////////////////////
7403 #ifdef CONFIG_STA_SUPPORT
7404 VOID AsicStaBbpTuning(
7405 IN PRTMP_ADAPTER pAd);
7407 BOOLEAN StaAddMacTableEntry(
7408 IN PRTMP_ADAPTER pAd,
7409 IN PMAC_TABLE_ENTRY pEntry,
7410 IN UCHAR MaxSupportedRateIn500Kbps,
7411 IN HT_CAPABILITY_IE *pHtCapability,
7412 IN UCHAR HtCapabilityLen,
7413 IN USHORT CapabilityInfo);
7414 #endif // CONFIG_STA_SUPPORT //
7416 void RTMP_IndicateMediaState(
7417 IN PRTMP_ADAPTER pAd);
7419 VOID ReSyncBeaconTime(
7420 IN PRTMP_ADAPTER pAd);
7422 VOID RTMPSetAGCInitValue(
7423 IN PRTMP_ADAPTER pAd,
7424 IN UCHAR BandWidth);
7426 int rt28xx_close(IN PNET_DEV dev);
7427 int rt28xx_open(IN PNET_DEV dev);
7429 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7431 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7432 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7434 if (VIRTUAL_IF_NUM(pAd) == 0)
7436 if (rt28xx_open(pAd->net_dev) != 0)
7442 VIRTUAL_IF_INC(pAd);
7446 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7448 VIRTUAL_IF_DEC(pAd);
7449 if (VIRTUAL_IF_NUM(pAd) == 0)
7450 rt28xx_close(pAd->net_dev);
7455 #endif // __RTMP_H__