2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 Miniport generic portion header file
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
43 #include "link_list.h"
44 #include "spectrum_def.h"
46 #ifdef CONFIG_STA_SUPPORT
48 #endif // CONFIG_STA_SUPPORT //
52 //#define DBG_DIAGNOSE 1
54 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
55 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
56 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
58 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
59 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
62 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
63 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
64 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
67 ////////////////////////////////////////////////////////////////////////////
68 // The TX_BUFFER structure forms the transmitted USB packet to the device
69 ////////////////////////////////////////////////////////////////////////////
70 typedef struct __TX_BUFFER{
72 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
73 HEADER_802_11 NullFrame;
74 PSPOLL_FRAME PsPollPacket;
77 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
78 } TX_BUFFER, *PTX_BUFFER;
80 typedef struct __HTTX_BUFFER{
82 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
83 HEADER_802_11 NullFrame;
84 PSPOLL_FRAME PsPollPacket;
87 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
88 } HTTX_BUFFER, *PHTTX_BUFFER;
91 // used to track driver-generated write irps
92 typedef struct _TX_CONTEXT
94 PVOID pAd; //Initialized in MiniportInitialize
95 PURB pUrb; //Initialized in MiniportInitialize
96 PIRP pIrp; //used to cancel pending bulk out.
97 //Initialized in MiniportInitialize
98 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
103 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
104 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
107 BOOLEAN bAggregatible;
108 UCHAR Header_802_3[LENGTH_802_3];
112 dma_addr_t data_dma; // urb dma on linux
114 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
117 // used to track driver-generated write irps
118 typedef struct _HT_TX_CONTEXT
120 PVOID pAd; //Initialized in MiniportInitialize
121 PURB pUrb; //Initialized in MiniportInitialize
122 PIRP pIrp; //used to cancel pending bulk out.
123 //Initialized in MiniportInitialize
124 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
125 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
131 BOOLEAN bCopySavePad;
133 UCHAR Header_802_3[LENGTH_802_3];
134 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
135 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
136 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
137 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
139 dma_addr_t data_dma; // urb dma on linux
140 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
144 // Structure to keep track of receive packets and buffers to indicate
145 // receive data to the protocol.
147 typedef struct _RX_CONTEXT
149 PUCHAR TransferBuffer;
151 PIRP pIrp;//used to cancel pending bulk in.
153 //These 2 Boolean shouldn't both be 1 at the same time.
154 ULONG BulkInOffset; // number of packets waiting for reordering .
155 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
156 BOOLEAN bRxHandling; // Notify this packet is being process now.
157 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
158 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
159 BOOLEAN IRPPending; // TODO: To be removed
161 NDIS_SPIN_LOCK RxContextLock;
162 dma_addr_t data_dma; // urb dma on linux
163 } RX_CONTEXT, *PRX_CONTEXT;
168 // NDIS Version definitions
170 #ifdef NDIS50_MINIPORT
171 #define RTMP_NDIS_MAJOR_VERSION 5
172 #define RTMP_NDIS_MINOR_VERSION 0
175 #ifdef NDIS51_MINIPORT
176 #define RTMP_NDIS_MAJOR_VERSION 5
177 #define RTMP_NDIS_MINOR_VERSION 1
180 extern char NIC_VENDOR_DESC[];
181 extern int NIC_VENDOR_DESC_LEN;
183 extern unsigned char SNAP_AIRONET[];
184 extern unsigned char CipherSuiteCiscoCCKM[];
185 extern unsigned char CipherSuiteCiscoCCKMLen;
186 extern unsigned char CipherSuiteCiscoCCKM24[];
187 extern unsigned char CipherSuiteCiscoCCKM24Len;
188 extern unsigned char CipherSuiteCCXTkip[];
189 extern unsigned char CipherSuiteCCXTkipLen;
190 extern unsigned char CISCO_OUI[];
191 extern UCHAR BaSizeArray[4];
193 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
194 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
196 extern ULONG BIT32[32];
197 extern UCHAR BIT8[8];
198 extern char* CipherName[];
199 extern char* MCSToMbps[];
200 extern UCHAR RxwiMCSToOfdmRate[12];
201 extern UCHAR SNAP_802_1H[6];
202 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
203 extern UCHAR SNAP_AIRONET[8];
204 extern UCHAR CKIP_LLC_SNAP[8];
205 extern UCHAR EAPOL_LLC_SNAP[8];
206 extern UCHAR EAPOL[2];
208 extern UCHAR APPLE_TALK[2];
209 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
210 extern UCHAR OfdmRateToRxwiMCS[];
211 extern UCHAR OfdmSignalToRateId[16] ;
212 extern UCHAR default_cwmin[4];
213 extern UCHAR default_cwmax[4];
214 extern UCHAR default_sta_aifsn[4];
215 extern UCHAR MapUserPriorityToAccessCategory[8];
217 extern USHORT RateUpPER[];
218 extern USHORT RateDownPER[];
219 extern UCHAR Phy11BNextRateDownward[];
220 extern UCHAR Phy11BNextRateUpward[];
221 extern UCHAR Phy11BGNextRateDownward[];
222 extern UCHAR Phy11BGNextRateUpward[];
223 extern UCHAR Phy11ANextRateDownward[];
224 extern UCHAR Phy11ANextRateUpward[];
225 extern CHAR RssiSafeLevelForTxRate[];
226 extern UCHAR RateIdToMbps[];
227 extern USHORT RateIdTo500Kbps[];
229 extern UCHAR CipherSuiteWpaNoneTkip[];
230 extern UCHAR CipherSuiteWpaNoneTkipLen;
232 extern UCHAR CipherSuiteWpaNoneAes[];
233 extern UCHAR CipherSuiteWpaNoneAesLen;
236 extern UCHAR SupRateIe;
237 extern UCHAR ExtRateIe;
239 #ifdef DOT11_N_SUPPORT
240 extern UCHAR HtCapIe;
241 extern UCHAR AddHtInfoIe;
242 extern UCHAR NewExtChanIe;
244 extern UCHAR ExtHtCapIe;
245 #endif // DOT11N_DRAFT3 //
246 #endif // DOT11_N_SUPPORT //
257 extern UCHAR WPA_OUI[];
258 extern UCHAR RSN_OUI[];
259 extern UCHAR WAPI_OUI[];
260 extern UCHAR WME_INFO_ELEM[];
261 extern UCHAR WME_PARM_ELEM[];
262 extern UCHAR Ccx2QosInfo[];
263 extern UCHAR Ccx2IeInfo[];
264 extern UCHAR RALINK_OUI[];
265 extern UCHAR PowerConstraintIE[];
268 extern UCHAR RateSwitchTable[];
269 extern UCHAR RateSwitchTable11B[];
270 extern UCHAR RateSwitchTable11G[];
271 extern UCHAR RateSwitchTable11BG[];
273 #ifdef DOT11_N_SUPPORT
274 extern UCHAR RateSwitchTable11BGN1S[];
275 extern UCHAR RateSwitchTable11BGN2S[];
276 extern UCHAR RateSwitchTable11BGN2SForABand[];
277 extern UCHAR RateSwitchTable11N1S[];
278 extern UCHAR RateSwitchTable11N2S[];
279 extern UCHAR RateSwitchTable11N2SForABand[];
281 #ifdef CONFIG_STA_SUPPORT
282 extern UCHAR PRE_N_HT_OUI[];
283 #endif // CONFIG_STA_SUPPORT //
284 #endif // DOT11_N_SUPPORT //
286 #define MAXSEQ (0xFFF)
288 #ifdef DOT11_N_SUPPORT
289 struct reordering_mpdu
291 struct reordering_mpdu *next;
292 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
293 int Sequence; /* sequence number of MPDU */
297 struct reordering_list
299 struct reordering_mpdu *next;
303 struct reordering_mpdu_pool
307 struct reordering_list freelist;
309 #endif // DOT11_N_SUPPORT //
311 typedef struct _RSSI_SAMPLE {
312 CHAR LastRssi0; // last received RSSI
313 CHAR LastRssi1; // last received RSSI
314 CHAR LastRssi2; // last received RSSI
324 // Queue structure and macros
326 typedef struct _QUEUE_ENTRY {
327 struct _QUEUE_ENTRY *Next;
328 } QUEUE_ENTRY, *PQUEUE_ENTRY;
331 typedef struct _QUEUE_HEADER {
335 } QUEUE_HEADER, *PQUEUE_HEADER;
337 #define InitializeQueueHeader(QueueHeader) \
339 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
340 (QueueHeader)->Number = 0; \
343 #define RemoveHeadQueue(QueueHeader) \
344 (QueueHeader)->Head; \
346 PQUEUE_ENTRY pNext; \
347 if ((QueueHeader)->Head != NULL) \
349 pNext = (QueueHeader)->Head->Next; \
350 (QueueHeader)->Head = pNext; \
352 (QueueHeader)->Tail = NULL; \
353 (QueueHeader)->Number--; \
357 #define InsertHeadQueue(QueueHeader, QueueEntry) \
359 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
360 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
361 if ((QueueHeader)->Tail == NULL) \
362 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
363 (QueueHeader)->Number++; \
366 #define InsertTailQueue(QueueHeader, QueueEntry) \
368 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
369 if ((QueueHeader)->Tail) \
370 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
372 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
373 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
374 (QueueHeader)->Number++; \
378 // Macros for flag and ref count operations
380 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
381 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
382 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
383 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
384 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
386 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
387 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
388 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
390 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
391 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
392 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
394 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
395 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
396 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
398 #ifdef CONFIG_STA_SUPPORT
399 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
400 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
401 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
402 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
404 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
405 #endif // CONFIG_STA_SUPPORT //
407 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
408 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
411 #define INC_RING_INDEX(_idx, _RingSize) \
413 (_idx) = (_idx+1) % (_RingSize); \
416 // We will have a cost down version which mac version is 0x3090xxxx
417 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
419 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
420 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
421 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
423 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
425 #define RING_PACKET_INIT(_TxRing, _idx) \
427 _TxRing->Cell[_idx].pNdisPacket = NULL; \
428 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
431 #define TXDT_INIT(_TxD) \
433 NdisZeroMemory(_TxD, TXD_SIZE); \
437 //Set last data segment
438 #define RING_SET_LASTDS(_TxD, _IsSD0) \
440 if (_IsSD0) {_TxD->LastSec0 = 1;} \
441 else {_TxD->LastSec1 = 1;} \
444 // Increase TxTsc value for next transmission
446 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
447 // Should send a special event microsoft defined to request re-key
448 #define INC_TX_TSC(_tsc) \
451 while (++_tsc[i] == 0x0) \
459 #ifdef DOT11_N_SUPPORT
460 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
461 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
463 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
464 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
465 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
466 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
467 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
468 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
469 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
470 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
471 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
472 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
473 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
474 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
477 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
479 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
480 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
481 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
483 #endif // DOT11_N_SUPPORT //
486 // MACRO for 32-bit PCI register read / write
488 // Usage : RTMP_IO_READ32(
489 // PRTMP_ADAPTER pAd,
490 // ULONG Register_Offset,
494 // PRTMP_ADAPTER pAd,
495 // ULONG Register_Offset,
500 // BBP & RF are using indirect access. Before write any value into it.
501 // We have to make sure there is no outstanding command pending via checking busy bit.
503 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
507 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
508 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
509 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
511 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
512 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
516 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
517 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
520 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
523 case 1: khz = 2412000; break; \
524 case 2: khz = 2417000; break; \
525 case 3: khz = 2422000; break; \
526 case 4: khz = 2427000; break; \
527 case 5: khz = 2432000; break; \
528 case 6: khz = 2437000; break; \
529 case 7: khz = 2442000; break; \
530 case 8: khz = 2447000; break; \
531 case 9: khz = 2452000; break; \
532 case 10: khz = 2457000; break; \
533 case 11: khz = 2462000; break; \
534 case 12: khz = 2467000; break; \
535 case 13: khz = 2472000; break; \
536 case 14: khz = 2484000; break; \
537 case 36: /* UNII */ khz = 5180000; break; \
538 case 40: /* UNII */ khz = 5200000; break; \
539 case 44: /* UNII */ khz = 5220000; break; \
540 case 48: /* UNII */ khz = 5240000; break; \
541 case 52: /* UNII */ khz = 5260000; break; \
542 case 56: /* UNII */ khz = 5280000; break; \
543 case 60: /* UNII */ khz = 5300000; break; \
544 case 64: /* UNII */ khz = 5320000; break; \
545 case 149: /* UNII */ khz = 5745000; break; \
546 case 153: /* UNII */ khz = 5765000; break; \
547 case 157: /* UNII */ khz = 5785000; break; \
548 case 161: /* UNII */ khz = 5805000; break; \
549 case 165: /* UNII */ khz = 5825000; break; \
550 case 100: /* HiperLAN2 */ khz = 5500000; break; \
551 case 104: /* HiperLAN2 */ khz = 5520000; break; \
552 case 108: /* HiperLAN2 */ khz = 5540000; break; \
553 case 112: /* HiperLAN2 */ khz = 5560000; break; \
554 case 116: /* HiperLAN2 */ khz = 5580000; break; \
555 case 120: /* HiperLAN2 */ khz = 5600000; break; \
556 case 124: /* HiperLAN2 */ khz = 5620000; break; \
557 case 128: /* HiperLAN2 */ khz = 5640000; break; \
558 case 132: /* HiperLAN2 */ khz = 5660000; break; \
559 case 136: /* HiperLAN2 */ khz = 5680000; break; \
560 case 140: /* HiperLAN2 */ khz = 5700000; break; \
561 case 34: /* Japan MMAC */ khz = 5170000; break; \
562 case 38: /* Japan MMAC */ khz = 5190000; break; \
563 case 42: /* Japan MMAC */ khz = 5210000; break; \
564 case 46: /* Japan MMAC */ khz = 5230000; break; \
565 case 184: /* Japan */ khz = 4920000; break; \
566 case 188: /* Japan */ khz = 4940000; break; \
567 case 192: /* Japan */ khz = 4960000; break; \
568 case 196: /* Japan */ khz = 4980000; break; \
569 case 208: /* Japan, means J08 */ khz = 5040000; break; \
570 case 212: /* Japan, means J12 */ khz = 5060000; break; \
571 case 216: /* Japan, means J16 */ khz = 5080000; break; \
572 default: khz = 2412000; break; \
576 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
579 case 2412000: ch = 1; break; \
580 case 2417000: ch = 2; break; \
581 case 2422000: ch = 3; break; \
582 case 2427000: ch = 4; break; \
583 case 2432000: ch = 5; break; \
584 case 2437000: ch = 6; break; \
585 case 2442000: ch = 7; break; \
586 case 2447000: ch = 8; break; \
587 case 2452000: ch = 9; break; \
588 case 2457000: ch = 10; break; \
589 case 2462000: ch = 11; break; \
590 case 2467000: ch = 12; break; \
591 case 2472000: ch = 13; break; \
592 case 2484000: ch = 14; break; \
593 case 5180000: ch = 36; /* UNII */ break; \
594 case 5200000: ch = 40; /* UNII */ break; \
595 case 5220000: ch = 44; /* UNII */ break; \
596 case 5240000: ch = 48; /* UNII */ break; \
597 case 5260000: ch = 52; /* UNII */ break; \
598 case 5280000: ch = 56; /* UNII */ break; \
599 case 5300000: ch = 60; /* UNII */ break; \
600 case 5320000: ch = 64; /* UNII */ break; \
601 case 5745000: ch = 149; /* UNII */ break; \
602 case 5765000: ch = 153; /* UNII */ break; \
603 case 5785000: ch = 157; /* UNII */ break; \
604 case 5805000: ch = 161; /* UNII */ break; \
605 case 5825000: ch = 165; /* UNII */ break; \
606 case 5500000: ch = 100; /* HiperLAN2 */ break; \
607 case 5520000: ch = 104; /* HiperLAN2 */ break; \
608 case 5540000: ch = 108; /* HiperLAN2 */ break; \
609 case 5560000: ch = 112; /* HiperLAN2 */ break; \
610 case 5580000: ch = 116; /* HiperLAN2 */ break; \
611 case 5600000: ch = 120; /* HiperLAN2 */ break; \
612 case 5620000: ch = 124; /* HiperLAN2 */ break; \
613 case 5640000: ch = 128; /* HiperLAN2 */ break; \
614 case 5660000: ch = 132; /* HiperLAN2 */ break; \
615 case 5680000: ch = 136; /* HiperLAN2 */ break; \
616 case 5700000: ch = 140; /* HiperLAN2 */ break; \
617 case 5170000: ch = 34; /* Japan MMAC */ break; \
618 case 5190000: ch = 38; /* Japan MMAC */ break; \
619 case 5210000: ch = 42; /* Japan MMAC */ break; \
620 case 5230000: ch = 46; /* Japan MMAC */ break; \
621 case 4920000: ch = 184; /* Japan */ break; \
622 case 4940000: ch = 188; /* Japan */ break; \
623 case 4960000: ch = 192; /* Japan */ break; \
624 case 4980000: ch = 196; /* Japan */ break; \
625 case 5040000: ch = 208; /* Japan, means J08 */ break; \
626 case 5060000: ch = 212; /* Japan, means J12 */ break; \
627 case 5080000: ch = 216; /* Japan, means J16 */ break; \
628 default: ch = 1; break; \
633 // Common fragment list structure - Identical to the scatter gather frag list structure
635 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
636 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
637 #define NIC_MAX_PHYS_BUF_COUNT 8
639 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
643 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
646 typedef struct _RTMP_SCATTER_GATHER_LIST {
647 ULONG NumberOfElements;
649 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
650 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
653 // Some utility macros
656 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
660 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
663 #define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))
665 #define INC_COUNTER64(Val) (Val.QuadPart++)
667 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
668 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
669 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
670 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
672 // Check LEAP & CCKM flags
673 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
674 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
676 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
677 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
679 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
681 _pExtraLlcSnapEncap = SNAP_802_1H; \
682 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
683 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
685 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
690 _pExtraLlcSnapEncap = NULL; \
694 // New Define for new Tx Path.
695 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
697 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
699 _pExtraLlcSnapEncap = SNAP_802_1H; \
700 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
701 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
703 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
708 _pExtraLlcSnapEncap = NULL; \
713 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
715 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
716 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
717 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
720 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
721 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
722 // else remove the LLC/SNAP field from the result Ethernet frame
723 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
725 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
726 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
727 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
731 _pRemovedLLCSNAP = NULL; \
732 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
733 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
735 PUCHAR pProto = _pData + 6; \
737 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
738 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
740 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
741 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
742 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
746 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
747 _pRemovedLLCSNAP = _pData; \
748 _DataSize -= LENGTH_802_1_H; \
749 _pData += LENGTH_802_1_H; \
754 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
755 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
756 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
760 #define SWITCH_AB( _pAA, _pBB) \
768 // Enqueue this frame to MLME engine
769 // We need to enqueue the whole frame because MLME need to pass data type
770 // information from 802.11 header
772 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
774 UINT32 High32TSF=0, Low32TSF=0; \
775 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
780 //Need to collect each ant's rssi concurrently
781 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
782 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
786 if (_pAd->RxAnt.EvaluatePeriod == 0) \
788 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
789 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
791 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
793 AvgRssi = _rssi1 << 3; \
794 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
798 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
799 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
800 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
801 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
804 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
805 AvgRssi = _rssi1 << 3; \
807 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
808 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
814 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
815 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
817 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
818 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
821 // Check if it is Japan W53(ch52,56,60,64) channel.
823 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
825 #ifdef CONFIG_STA_SUPPORT
826 #define STA_PORT_SECURED(_pAd) \
828 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
829 NdisAcquireSpinLock(&_pAd->MacTabLock); \
830 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
831 NdisReleaseSpinLock(&_pAd->MacTabLock); \
833 #endif // CONFIG_STA_SUPPORT //
837 // Register set pair for initialzation register set definition
839 typedef struct _RTMP_REG_PAIR
843 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
845 typedef struct _REG_PAIR
849 } REG_PAIR, *PREG_PAIR;
852 // Register set pair for initialzation register set definition
854 typedef struct _RTMP_RF_REGS
861 } RTMP_RF_REGS, *PRTMP_RF_REGS;
863 typedef struct _FREQUENCY_ITEM {
868 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
871 // Data buffer for DMA operation, the buffer must be contiguous physical memory
872 // Both DMA to / from CPU use the same structure.
874 typedef struct _RTMP_DMABUF
877 PVOID AllocVa; // TxBuf virtual address
878 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
879 } RTMP_DMABUF, *PRTMP_DMABUF;
882 typedef union _HEADER_802_11_SEQ{
895 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
898 // Data buffer for DMA operation, the buffer must be contiguous physical memory
899 // Both DMA to / from CPU use the same structure.
901 typedef struct _RTMP_REORDERBUF
904 PVOID AllocVa; // TxBuf virtual address
905 UCHAR Header802_3[14];
906 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
913 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
916 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
917 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
918 // which won't be released, driver has to wait until upper layer return the packet
919 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
920 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
921 // which driver should ACK upper layer when the tx is physically done or failed.
923 typedef struct _RTMP_DMACB
925 ULONG AllocSize; // Control block size
926 PVOID AllocVa; // Control block virtual address
927 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
928 PNDIS_PACKET pNdisPacket;
929 PNDIS_PACKET pNextNdisPacket;
931 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
932 } RTMP_DMACB, *PRTMP_DMACB;
934 typedef struct _RTMP_TX_BUF
938 ULONG AllocSize; // Control block size
939 PVOID AllocVa; // Control block virtual address
940 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
941 } RTMP_TXBUF, *PRTMP_TXBUF;
943 typedef struct _RTMP_RX_BUF
947 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
948 } RTMP_RXBUF, *PRTMP_RXBUF;
949 typedef struct _RTMP_TX_RING
951 RTMP_DMACB Cell[TX_RING_SIZE];
954 UINT32 TxSwFreeIdx; // software next free tx index
955 } RTMP_TX_RING, *PRTMP_TX_RING;
957 typedef struct _RTMP_RX_RING
959 RTMP_DMACB Cell[RX_RING_SIZE];
962 INT32 RxSwReadIdx; // software next read index
963 } RTMP_RX_RING, *PRTMP_RX_RING;
965 typedef struct _RTMP_MGMT_RING
967 RTMP_DMACB Cell[MGMT_RING_SIZE];
970 UINT32 TxSwFreeIdx; // software next free tx index
971 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
974 // Statistic counter structure
976 typedef struct _COUNTER_802_3
986 ULONG RcvAlignmentErrors;
988 ULONG MoreCollisions;
990 } COUNTER_802_3, *PCOUNTER_802_3;
992 typedef struct _COUNTER_802_11 {
994 LARGE_INTEGER LastTransmittedFragmentCount;
995 LARGE_INTEGER TransmittedFragmentCount;
996 LARGE_INTEGER MulticastTransmittedFrameCount;
997 LARGE_INTEGER FailedCount;
998 LARGE_INTEGER RetryCount;
999 LARGE_INTEGER MultipleRetryCount;
1000 LARGE_INTEGER RTSSuccessCount;
1001 LARGE_INTEGER RTSFailureCount;
1002 LARGE_INTEGER ACKFailureCount;
1003 LARGE_INTEGER FrameDuplicateCount;
1004 LARGE_INTEGER ReceivedFragmentCount;
1005 LARGE_INTEGER MulticastReceivedFrameCount;
1006 LARGE_INTEGER FCSErrorCount;
1007 } COUNTER_802_11, *PCOUNTER_802_11;
1009 typedef struct _COUNTER_RALINK {
1010 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1011 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1012 ULONG BeenDisassociatedCount;
1013 ULONG BadCQIAutoRecoveryCount;
1014 ULONG PoorCQIRoamingCount;
1015 ULONG MgmtRingFullCount;
1016 ULONG RxCountSinceLastNULL;
1018 ULONG RxRingErrCount;
1020 ULONG TxRingErrCount;
1021 LARGE_INTEGER RealFcsErrCount;
1022 ULONG PendingNdisPacketCount;
1024 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1025 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1026 UINT32 OneSecTxDoneCount;
1027 ULONG OneSecRxCount;
1028 UINT32 OneSecTxAggregationCount;
1029 UINT32 OneSecRxAggregationCount;
1031 UINT32 OneSecFrameDuplicateCount;
1034 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1037 UINT32 OneSecTxNoRetryOkCount;
1038 UINT32 OneSecTxRetryOkCount;
1039 UINT32 OneSecTxFailCount;
1040 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1041 UINT32 OneSecRxOkCnt; // RX without error
1042 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1043 UINT32 OneSecRxFcsErrCnt; // CRC error
1044 UINT32 OneSecBeaconSentCnt;
1045 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1046 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1049 ULONG TxNonAggCount;
1050 ULONG TxAgg1MPDUCount;
1051 ULONG TxAgg2MPDUCount;
1052 ULONG TxAgg3MPDUCount;
1053 ULONG TxAgg4MPDUCount;
1054 ULONG TxAgg5MPDUCount;
1055 ULONG TxAgg6MPDUCount;
1056 ULONG TxAgg7MPDUCount;
1057 ULONG TxAgg8MPDUCount;
1058 ULONG TxAgg9MPDUCount;
1059 ULONG TxAgg10MPDUCount;
1060 ULONG TxAgg11MPDUCount;
1061 ULONG TxAgg12MPDUCount;
1062 ULONG TxAgg13MPDUCount;
1063 ULONG TxAgg14MPDUCount;
1064 ULONG TxAgg15MPDUCount;
1065 ULONG TxAgg16MPDUCount;
1067 LARGE_INTEGER TransmittedOctetsInAMSDU;
1068 LARGE_INTEGER TransmittedAMSDUCount;
1069 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1070 LARGE_INTEGER ReceivedAMSDUCount;
1071 LARGE_INTEGER TransmittedAMPDUCount;
1072 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1073 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1074 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1075 } COUNTER_RALINK, *PCOUNTER_RALINK;
1077 typedef struct _PID_COUNTER {
1078 ULONG TxAckRequiredCount; // CRC error
1080 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1081 ULONG LastSuccessRate;
1082 } PID_COUNTER, *PPID_COUNTER;
1084 typedef struct _COUNTER_DRS {
1085 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1086 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1087 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1088 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1089 ULONG CurrTxRateStableTime; // # of second in current TX rate
1090 BOOLEAN fNoisyEnvironment;
1091 BOOLEAN fLastSecAccordingRSSI;
1092 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1093 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1094 ULONG LastTxOkCount;
1095 } COUNTER_DRS, *PCOUNTER_DRS;
1098 // Arcfour Structure Added by PaulWu
1100 typedef struct _ARCFOUR
1105 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1107 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1108 typedef struct _RECEIVE_SETTING {
1109 #ifdef RT_BIG_ENDIAN
1113 USHORT STBC:2; //SPACE
1115 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1116 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1118 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1119 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1121 USHORT STBC:2; //SPACE
1126 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1128 // Shared key data structure
1129 typedef struct _WEP_KEY {
1130 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1131 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1132 } WEP_KEY, *PWEP_KEY;
1134 typedef struct _CIPHER_KEY {
1135 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1136 UCHAR RxMic[8]; // make alignment
1138 UCHAR TxTsc[6]; // 48bit TSC value
1139 UCHAR RxTsc[6]; // 48bit TSC value
1140 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1142 #ifdef CONFIG_STA_SUPPORT
1144 #endif // CONFIG_STA_SUPPORT //
1145 // Key length for each key, 0: entry is invalid
1146 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1147 } CIPHER_KEY, *PCIPHER_KEY;
1149 typedef struct _BBP_TUNING_STRUCT {
1151 UCHAR FalseCcaCountUpperBound; // 100 per sec
1152 UCHAR FalseCcaCountLowerBound; // 10 per sec
1153 UCHAR R17LowerBound; // specified in E2PROM
1154 UCHAR R17UpperBound; // 0x68 according to David Tung
1155 UCHAR CurrentR17Value;
1156 } BBP_TUNING, *PBBP_TUNING;
1158 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1159 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1160 UCHAR EvaluateStableCnt;
1161 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1162 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1163 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1164 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1165 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1166 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1167 SHORT Pair1LastAvgRssi; //
1168 SHORT Pair2LastAvgRssi; //
1169 ULONG RcvPktNumWhenEvaluate;
1170 BOOLEAN FirstPktArrivedWhenEvaluate;
1171 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1172 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1174 typedef struct _LEAP_AUTH_INFO {
1175 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1176 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1178 UCHAR UserName[256]; //LEAP, User name
1180 UCHAR Password[256]; //LEAP, User Password
1182 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1185 UCHAR Addr[MAC_ADDR_LEN];
1186 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1187 //00 02-Authentication timeout
1188 //00 03-Challenge from AP failed
1189 //00 04-Challenge to AP failed
1191 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1195 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1196 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1202 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1205 // Receive Tuple Cache Format
1207 typedef struct _TUPLE_CACHE {
1209 UCHAR MacAddress[MAC_ADDR_LEN];
1212 } TUPLE_CACHE, *PTUPLE_CACHE;
1215 // Fragment Frame structure
1217 typedef struct _FRAGMENT_FRAME {
1218 PNDIS_PACKET pFragPacket;
1222 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1223 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1227 // Packet information for NdisQueryPacket
1229 typedef struct _PACKET_INFO {
1230 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1231 UINT BufferCount ; // Number of Buffer descriptor chained
1232 UINT TotalPacketLength ; // Self explained
1233 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1234 } PACKET_INFO, *PPACKET_INFO;
1237 // Tkip Key structure which RC4 key & MIC calculation
1239 typedef struct _TKIP_KEY_INFO {
1240 UINT nBytesInM; // # bytes in M for MICKEY
1243 ULONG K0; // for MICKEY Low
1244 ULONG K1; // for MICKEY Hig
1245 ULONG L; // Current state for MICKEY
1246 ULONG R; // Current state for MICKEY
1247 ULONG M; // Message accumulator for MICKEY
1250 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1253 // Private / Misc data, counters for driver internal use
1255 typedef struct __PRIVATE_STRUC {
1256 UINT SystemResetCnt; // System reset counter
1257 UINT TxRingFullCnt; // Tx ring full occurrance number
1258 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1259 // Variables for WEP encryption / decryption in rtmp_wep.c
1261 ARCFOURCONTEXT WEPCONTEXT;
1265 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1267 // structure to tune BBP R66 (BBP TUNING)
1268 typedef struct _BBP_R66_TUNING {
1270 USHORT FalseCcaLowerThreshold; // default 100
1271 USHORT FalseCcaUpperThreshold; // default 512
1273 UCHAR R66CurrentValue;
1274 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1275 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1277 // structure to store channel TX power
1278 typedef struct _CHANNEL_TX_POWER {
1279 USHORT RemainingTimeForUse; //unit: sec
1281 #ifdef DOT11N_DRAFT3
1282 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1283 #endif // DOT11N_DRAFT3 //
1288 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1290 // structure to store 802.11j channel TX power
1291 typedef struct _CHANNEL_11J_TX_POWER {
1293 UCHAR BW; // BW_10 or BW_20
1296 USHORT RemainingTimeForUse; //unit: sec
1297 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1299 typedef enum _ABGBAND_STATE_ {
1305 typedef struct _MLME_STRUCT {
1306 #ifdef CONFIG_STA_SUPPORT
1307 // STA state machines
1308 STATE_MACHINE CntlMachine;
1309 STATE_MACHINE AssocMachine;
1310 STATE_MACHINE AuthMachine;
1311 STATE_MACHINE AuthRspMachine;
1312 STATE_MACHINE SyncMachine;
1313 STATE_MACHINE WpaPskMachine;
1314 STATE_MACHINE LeapMachine;
1315 STATE_MACHINE AironetMachine;
1316 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1317 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1318 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1319 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1320 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1321 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1322 #endif // CONFIG_STA_SUPPORT //
1323 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1325 STATE_MACHINE ActMachine;
1327 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1328 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1329 ULONG LastSendNULLpsmTime;
1332 NDIS_SPIN_LOCK TaskLock;
1337 RALINK_TIMER_STRUCT PeriodicTimer;
1338 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1339 RALINK_TIMER_STRUCT LinkDownTimer;
1340 RALINK_TIMER_STRUCT LinkUpTimer;
1341 ULONG PeriodicRound;
1342 ULONG OneSecPeriodicRound;
1345 BOOLEAN bLowThroughput;
1346 BOOLEAN bEnableAutoAntennaCheck;
1347 RALINK_TIMER_STRUCT RxAntEvalTimer;
1350 UCHAR CaliBW40RfR24;
1351 UCHAR CaliBW20RfR24;
1354 } MLME_STRUCT, *PMLME_STRUCT;
1356 // structure for radar detection and channel switch
1357 typedef struct _RADAR_DETECT_STRUCT {
1358 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1359 UCHAR CSCount; //Channel switch counter
1360 UCHAR CSPeriod; //Channel switch period (beacon count)
1361 UCHAR RDCount; //Radar detection counter
1362 UCHAR RDMode; //Radar Detection mode
1363 UCHAR RDDurRegion; //Radar detection duration region
1370 ULONG InServiceMonitorCount; // unit: sec
1371 UINT8 DfsSessionTime;
1374 UINT8 LongPulseRadarTh;
1375 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1377 typedef enum _REC_BLOCKACK_STATUS
1381 Recipient_HandleRes,
1383 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1385 typedef enum _ORI_BLOCKACK_STATUS
1391 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1393 #ifdef DOT11_N_SUPPORT
1394 typedef struct _BA_ORI_ENTRY{
1399 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1401 USHORT TimeOutValue;
1402 ORI_BLOCKACK_STATUS ORI_BA_Status;
1403 RALINK_TIMER_STRUCT ORIBATimer;
1405 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1407 typedef struct _BA_REC_ENTRY {
1410 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1412 //UCHAR Curindidx; // the head in the RX reordering buffer
1414 // USHORT LastIndSeqAtTimer;
1415 USHORT TimeOutValue;
1416 RALINK_TIMER_STRUCT RECBATimer;
1417 ULONG LastIndSeqAtTimer;
1420 REC_BLOCKACK_STATUS REC_BA_Status;
1421 // UCHAR RxBufIdxUsed;
1422 // corresponding virtual address for RX reordering packet storage.
1423 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1424 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1425 // struct _BA_REC_ENTRY *pNext;
1427 struct reordering_list list;
1428 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1432 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1433 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1434 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1435 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1436 } BA_TABLE, *PBA_TABLE;
1438 //For QureyBATableOID use;
1439 typedef struct PACKED _OID_BA_REC_ENTRY{
1440 UCHAR MACAddr[MAC_ADDR_LEN];
1441 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1444 REC_BLOCKACK_STATUS REC_BA_Status[8];
1445 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1447 //For QureyBATableOID use;
1448 typedef struct PACKED _OID_BA_ORI_ENTRY{
1449 UCHAR MACAddr[MAC_ADDR_LEN];
1450 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
1453 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1454 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1456 typedef struct _QUERYBA_TABLE{
1457 OID_BA_ORI_ENTRY BAOriEntry[32];
1458 OID_BA_REC_ENTRY BARecEntry[32];
1459 UCHAR OriNum;// Number of below BAOriEntry
1460 UCHAR RecNum;// Number of below BARecEntry
1461 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1463 typedef union _BACAP_STRUC {
1464 #ifdef RT_BIG_ENDIAN
1467 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.
1468 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1469 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1470 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1471 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1472 UINT32 MpduDensity:3;
1473 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1474 UINT32 AutoBA:1; // automatically BA
1475 UINT32 TxBAWinLimit:8;
1476 UINT32 RxBAWinLimit:8;
1480 UINT32 RxBAWinLimit:8;
1481 UINT32 TxBAWinLimit:8;
1482 UINT32 AutoBA:1; // automatically BA
1483 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1484 UINT32 MpduDensity:3;
1485 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1486 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1487 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1488 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1489 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1494 } BACAP_STRUC, *PBACAP_STRUC;
1495 #endif // DOT11_N_SUPPORT //
1497 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1498 typedef struct _IOT_STRUC {
1500 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1501 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1502 ULONG OneSecInWindowCount;
1503 ULONG OneSecFrameDuplicateCount;
1504 ULONG OneSecOutWindowCount;
1509 BOOLEAN bRTSLongProtOn;
1510 #ifdef CONFIG_STA_SUPPORT
1511 BOOLEAN bLastAtheros;
1512 BOOLEAN bCurrentAtheros;
1513 BOOLEAN bNowAtherosBurstOn;
1514 BOOLEAN bNextDisableRxBA;
1516 #endif // CONFIG_STA_SUPPORT //
1517 } IOT_STRUC, *PIOT_STRUC;
1519 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1520 typedef union _REG_TRANSMIT_SETTING {
1521 #ifdef RT_BIG_ENDIAN
1527 UINT32 STBC:1; //SPACE
1529 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1530 UINT32 TxBF:1; // 3*3
1532 //UINT32 MCS:7; // MCS
1538 //UINT32 MCS:7; // MCS
1541 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1543 UINT32 STBC:1; //SPACE
1551 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1553 typedef union _DESIRED_TRANSMIT_SETTING {
1554 #ifdef RT_BIG_ENDIAN
1557 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1559 USHORT MCS:7; // MCS
1563 USHORT MCS:7; // MCS
1565 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1570 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1573 BOOLEAN IsRecipient;
1574 UCHAR MACAddr[MAC_ADDR_LEN];
1578 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1579 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1582 // Multiple SSID structure
1584 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1585 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1587 /* clear bcmc TIM bit */
1588 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1589 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1591 /* set bcmc TIM bit */
1592 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1593 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1595 /* clear a station PS TIM bit */
1596 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1597 { UCHAR tim_offset = wcid >> 3; \
1598 UCHAR bit_offset = wcid & 0x7; \
1599 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1601 /* set a station PS TIM bit */
1602 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1603 { UCHAR tim_offset = wcid >> 3; \
1604 UCHAR bit_offset = wcid & 0x7; \
1605 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1608 #define BEACON_BITMAP_MASK 0xff
1609 typedef struct _BEACON_SYNC_STRUCT_
1611 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1612 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1613 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1614 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1615 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1616 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1617 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1618 }BEACON_SYNC_STRUCT;
1621 typedef struct _MULTISSID_STRUCT {
1622 UCHAR Bssid[MAC_ADDR_LEN];
1624 CHAR Ssid[MAX_LEN_OF_SSID];
1625 USHORT CapabilityInfo;
1629 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1630 NDIS_802_11_WEP_STATUS WepStatus;
1631 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1632 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1636 ULONG ReceivedByteCount;
1637 ULONG TransmittedByteCount;
1641 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1642 RT_HT_PHY_INFO DesiredHtPhyInfo;
1643 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1644 BOOLEAN bAutoTxRateSwitch;
1646 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1649 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1650 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1651 UCHAR DesiredRatesIndex;
1652 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1654 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1655 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1656 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1666 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1667 UCHAR BANClass3Data;
1668 ULONG IsolateInterStaTraffic;
1671 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1674 UCHAR TimIELocationInBeacon;
1675 UCHAR CapabilityInfoLocationInBeacon;
1676 // outgoing BEACON frame buffer and corresponding TXWI
1677 // PTXWI_STRUC BeaconTxWI; //
1678 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1681 UINT16 StationKeepAliveTime; // unit: second
1684 USHORT VLAN_Priority;
1686 RT_802_11_ACL AccessControlList;
1689 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1690 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1692 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1694 // For 802.1x daemon setting per BSS
1695 UCHAR radius_srv_num;
1696 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1699 unsigned int mylinkid;
1703 UINT32 RcvdConflictSsidCount;
1704 UINT32 RcvdSpoofedAssocRespCount;
1705 UINT32 RcvdSpoofedReassocRespCount;
1706 UINT32 RcvdSpoofedProbeRespCount;
1707 UINT32 RcvdSpoofedBeaconCount;
1708 UINT32 RcvdSpoofedDisassocCount;
1709 UINT32 RcvdSpoofedAuthCount;
1710 UINT32 RcvdSpoofedDeauthCount;
1711 UINT32 RcvdSpoofedUnknownMgmtCount;
1712 UINT32 RcvdReplayAttackCount;
1714 CHAR RssiOfRcvdConflictSsid;
1715 CHAR RssiOfRcvdSpoofedAssocResp;
1716 CHAR RssiOfRcvdSpoofedReassocResp;
1717 CHAR RssiOfRcvdSpoofedProbeResp;
1718 CHAR RssiOfRcvdSpoofedBeacon;
1719 CHAR RssiOfRcvdSpoofedDisassoc;
1720 CHAR RssiOfRcvdSpoofedAuth;
1721 CHAR RssiOfRcvdSpoofedDeauth;
1722 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1723 CHAR RssiOfRcvdReplayAttack;
1727 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1731 #ifdef DOT11N_DRAFT3
1732 typedef enum _BSS2040COEXIST_FLAG{
1733 BSS_2040_COEXIST_DISABLE = 0,
1734 BSS_2040_COEXIST_TIMER_FIRED = 1,
1735 BSS_2040_COEXIST_INFO_SYNC = 2,
1736 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1737 }BSS2040COEXIST_FLAG;
1738 #endif // DOT11N_DRAFT3 //
1740 // configuration common to OPMODE_AP as well as OPMODE_STA
1741 typedef struct _COMMON_CONFIG {
1743 BOOLEAN bCountryFlag;
1744 UCHAR CountryCode[3];
1746 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1747 UCHAR CountryRegionForABand; // Enum of country region for A band
1748 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1749 USHORT Dsifs; // in units of usec
1750 ULONG PacketFilter; // Packet filter for receiving
1752 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1753 UCHAR SsidLen; // the actual ssid length in used
1754 UCHAR LastSsidLen; // the actual ssid length in used
1755 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1756 UCHAR LastBssid[MAC_ADDR_LEN];
1758 UCHAR Bssid[MAC_ADDR_LEN];
1759 USHORT BeaconPeriod;
1761 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1763 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1765 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1767 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1768 UCHAR MaxDesiredRate;
1769 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1771 ULONG BasicRateBitmap; // backup basic ratebitmap
1773 BOOLEAN bAPSDCapable;
1774 BOOLEAN bInServicePeriod;
1779 BOOLEAN bNeedSendTriggerFrame;
1780 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1781 ULONG TriggerTimerCount;
1783 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1784 // move to MULTISSID_STRUCT for MBSS
1785 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1786 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1787 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1788 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1789 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1790 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1791 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1792 //BOOLEAN bAutoTxRateSwitch;
1793 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1794 UCHAR RtsRate; // RATE_xxx
1795 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1796 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1797 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1799 USHORT RtsThreshold; // in unit of BYTE
1800 USHORT FragmentThreshold; // in unit of BYTE
1802 UCHAR TxPower; // in unit of mW
1803 ULONG TxPowerPercentage; // 0~100 %
1804 ULONG TxPowerDefault; // keep for TxPowerPercentage
1806 #ifdef DOT11_N_SUPPORT
1807 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1808 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1809 #endif // DOT11_N_SUPPORT //
1810 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1811 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1812 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1813 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1814 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1815 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1816 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1817 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1818 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1819 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1821 #ifdef DOT11_N_SUPPORT
1823 #endif // DOT11_N_SUPPORT //
1824 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1825 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1826 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1827 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1828 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1829 #ifdef CONFIG_STA_SUPPORT
1830 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1831 #endif // CONFIG_STA_SUPPORT //
1832 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1833 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1834 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1835 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1836 ULONG OpStatusFlags;
1838 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1839 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1840 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1842 // IEEE802.11H--DFS.
1843 RADAR_DETECT_STRUCT RadarDetect;
1845 #ifdef DOT11_N_SUPPORT
1847 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1848 //RT_HT_CAPABILITY SupportedHtPhy;
1849 RT_HT_CAPABILITY DesiredHtPhy;
1850 HT_CAPABILITY_IE HtCapability;
1851 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1852 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1853 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1854 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
1856 #ifdef DOT11N_DRAFT3
1857 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1858 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1860 //This IE is used for 20/40 BSS Coexistence.
1861 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1862 // ====== 11n D3.0 =======================>
1863 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1864 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1865 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1866 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1867 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1868 USHORT Dot11BssWidthChanTranDelayFactor;
1869 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1871 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1872 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1874 NDIS_SPIN_LOCK TriggerEventTabLock;
1875 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1876 BSS_2040_COEXIST_IE BSSCoexist2040;
1877 TRIGGER_EVENT_TAB TriggerEventTab;
1878 UCHAR ChannelListIdx;
1879 // <====== 11n D3.0 =======================
1880 BOOLEAN bOverlapScanning;
1881 #endif // DOT11N_DRAFT3 //
1884 BOOLEAN bMIMOPSEnable;
1886 BOOLEAN bDisableReordering;
1887 BOOLEAN bForty_Mhz_Intolerant;
1888 BOOLEAN bExtChannelSwitchAnnouncement;
1889 BOOLEAN bRcvBSSWidthTriggerEvents;
1890 ULONG LastRcvBSSWidthTriggerEventsTime;
1893 #endif // DOT11_N_SUPPORT //
1895 // Enable wireless event
1896 BOOLEAN bWirelessEvent;
1897 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1899 // Tx & Rx Stream number selection
1903 // transmit phy mode, trasmit rate for Multicast.
1904 #ifdef MCAST_RATE_SPECIFIC
1905 UCHAR McastTransmitMcs;
1906 UCHAR McastTransmitPhyMode;
1907 #endif // MCAST_RATE_SPECIFIC //
1909 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1912 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1913 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1914 RT_HT_CAPABILITY SupportedHtPhy;
1915 ULONG MaxPktOneTxBulk;
1919 BEACON_SYNC_STRUCT *pBeaconSync;
1920 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1921 UINT32 BeaconAdjust;
1922 UINT32 BeaconFactor;
1923 UINT32 BeaconRemain;
1927 NDIS_SPIN_LOCK MeasureReqTabLock;
1928 PMEASURE_REQ_TAB pMeasureReqTab;
1930 NDIS_SPIN_LOCK TpcReqTabLock;
1931 PTPC_REQ_TAB pTpcReqTab;
1933 // transmit phy mode, trasmit rate for Multicast.
1934 #ifdef MCAST_RATE_SPECIFIC
1935 HTTRANSMIT_SETTING MCastPhyMode;
1936 #endif // MCAST_RATE_SPECIFIC //
1939 UINT16 DefineMaxTxPwr;
1940 #endif // SINGLE_SKU //
1943 } COMMON_CONFIG, *PCOMMON_CONFIG;
1946 #ifdef CONFIG_STA_SUPPORT
1947 /* Modified by Wu Xi-Kun 4/21/2006 */
1948 // STA configuration and status
1949 typedef struct _STA_ADMIN_CONFIG {
1951 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1952 // the user intended configuration, but not necessary fully equal to the final
1953 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1954 // AP or IBSS holder).
1955 // Once initialized, user configuration can only be changed via OID_xxx
1956 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1957 USHORT AtimWin; // used when starting a new IBSS
1960 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1961 // the user intended configuration, and should be always applied to the final
1962 // settings in ACTIVE BSS without compromising with the BSS holder.
1963 // Once initialized, user configuration can only be changed via OID_xxx
1965 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1966 USHORT DefaultListenCount; // default listen count;
1967 ULONG WindowsPowerMode; // Power mode for AC power
1968 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1969 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1970 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1971 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1973 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1974 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1975 USHORT DisassocReason;
1976 UCHAR DisassocSta[MAC_ADDR_LEN];
1977 USHORT DeauthReason;
1978 UCHAR DeauthSta[MAC_ADDR_LEN];
1979 USHORT AuthFailReason;
1980 UCHAR AuthFailSta[MAC_ADDR_LEN];
1982 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1983 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1984 NDIS_802_11_WEP_STATUS WepStatus;
1985 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1987 // Add to support different cipher suite for WPA2/WPA mode
1988 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1989 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1990 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1991 USHORT RsnCapability;
1993 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1995 UCHAR PMK[32]; // WPA PSK mode PMK
1996 UCHAR PTK[64]; // WPA PSK mode PTK
1997 UCHAR GTK[32]; // GTK from authenticator
1998 BSSID_INFO SavedPMK[PMKID_NO];
1999 UINT SavedPMKNum; // Saved PMKID number
2004 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2007 // For WPA countermeasures
2008 ULONG LastMicErrorTime; // record last MIC error time
2009 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2010 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2011 // For WPA-PSK supplicant state
2012 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2013 UCHAR ReplayCounter[8];
2014 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2015 UCHAR SNonce[32]; // SNonce for WPA-PSK
2017 UCHAR LastSNR0; // last received BEACON's SNR
2018 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2019 RSSI_SAMPLE RssiSample;
2020 ULONG NumOfAvgRssiSample;
2022 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2023 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2024 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2025 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2027 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2028 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2029 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2030 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2031 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2032 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2033 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2035 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2036 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2037 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2039 // New for WPA, windows want us to to keep association information and
2040 // Fixed IEs from last association response
2041 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2042 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2043 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2044 USHORT ResVarIELen; // Length of next VIE include EID & Length
2045 UCHAR ResVarIEs[MAX_VIE_LEN];
2048 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2050 // New variables used for CCX 1.0
2052 BOOLEAN bCkipCmicOn;
2054 UCHAR GIV[3]; //for CCX iv
2059 LEAP_AUTH_INFO LeapAuthInfo;
2061 UCHAR NetworkChallenge[8];
2062 UCHAR NetworkChallengeResponse[24];
2063 UCHAR PeerChallenge[8];
2065 UCHAR PeerChallengeResponse[24];
2066 UCHAR SessionKey[16]; //Network session keys (NSK)
2067 RALINK_TIMER_STRUCT LeapAuthTimer;
2068 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2070 // New control flags for CCX
2071 CCX_CONTROL CCXControl; // Master administration state
2072 BOOLEAN CCXEnable; // Actual CCX state
2073 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2074 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2075 UCHAR CCXReqType; // Current processing CCX request type
2076 BSS_TABLE CCXBssTab; // BSS Table
2077 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2078 USHORT FrameReportLen; // Current Frame report length
2079 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2080 USHORT RPIDensity[8]; // Array for RPI density collection
2081 // Start address of each BSS table within FrameReportBuf
2082 // It's important to update the RxPower of the corresponding Bss
2083 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2084 USHORT BeaconToken; // Token for beacon report
2085 ULONG LastBssIndex; // Most current reported Bss index
2086 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2087 UCHAR RMReqCnt; // Number of measurement request saved.
2088 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2089 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2090 // It must be the same channel with maximum duration
2091 USHORT ParallelDuration; // Maximum duration for parallel measurement
2092 UCHAR ParallelChannel; // Only one channel with parallel measurement
2093 USHORT IAPPToken; // IAPP dialog token
2094 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2095 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2096 // Hack for channel load and noise histogram parameters
2097 UCHAR NHFactor; // Parameter for Noise histogram
2098 UCHAR CLFactor; // Parameter for channel load
2100 UCHAR KRK[16]; //Key Refresh Key.
2101 UCHAR BTK[32]; //Base Transient Key
2102 BOOLEAN CCKMLinkUpFlag;
2103 ULONG CCKMRN; //(Re)Association request number.
2104 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2105 UCHAR AironetCellPowerLimit; //in dBm
2106 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2107 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2108 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2109 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2110 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2111 USHORT CCXAdjacentAPChannel;
2112 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2114 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2115 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2117 UCHAR DtimCount; // 0.. DtimPeriod-1
2118 UCHAR DtimPeriod; // default = 3
2120 ////////////////////////////////////////////////////////////////////////////////////////
2121 // This is only for WHQL test.
2123 ////////////////////////////////////////////////////////////////////////////////////////
2125 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2127 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2128 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2130 #ifdef WPA_SUPPLICANT_SUPPORT
2132 BOOLEAN IEEE8021x_required_keys;
2133 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2134 UCHAR DesireSharedKeyId;
2136 // 0: driver ignores wpa_supplicant
2137 // 1: wpa_supplicant initiates scanning and AP selection
2138 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2139 UCHAR WpaSupplicantUP;
2140 UCHAR WpaSupplicantScanCount;
2141 #endif // WPA_SUPPLICANT_SUPPORT //
2146 BOOLEAN bTGnWifiTest;
2147 BOOLEAN bScanReqIsFromWebUI;
2149 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2150 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2151 RT_HT_PHY_INFO DesiredHtPhyInfo;
2152 BOOLEAN bAutoTxRateSwitch;
2155 #ifdef EXT_BUILD_CHANNEL_LIST
2156 UCHAR IEEE80211dClientMode;
2157 UCHAR StaOriCountryCode[3];
2158 UCHAR StaOriGeography;
2159 #endif // EXT_BUILD_CHANNEL_LIST //
2160 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2162 // This data structure keep the current active BSS/IBSS's configuration that this STA
2163 // had agreed upon joining the network. Which means these parameters are usually decided
2164 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2165 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2166 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2167 // the current active settings.
2168 typedef struct _STA_ACTIVE_CONFIG {
2170 USHORT AtimWin; // in kusec; IBSS parameter set element
2171 USHORT CapabilityInfo;
2172 USHORT CfpMaxDuration;
2175 // Copy supported rate from desired AP's beacon. We are trying to match
2176 // AP's supported and extended rate settings.
2177 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2178 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2181 // Copy supported ht from desired AP's beacon. We are trying to match
2182 RT_HT_PHY_INFO SupportedPhyInfo;
2183 RT_HT_CAPABILITY SupportedHtPhy;
2184 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2185 #endif // CONFIG_STA_SUPPORT //
2188 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2189 NDIS_802_11_MAC_ADDRESS MacAddr;
2190 USHORT MacTabMatchWCID; // ASIC
2191 CIPHER_KEY CipherKey;
2192 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2195 // ----------- start of AP --------------------------
2196 // AUTH-RSP State Machine Aux data structure
2197 typedef struct _AP_MLME_AUX {
2198 UCHAR Addr[MAC_ADDR_LEN];
2200 CHAR Challenge[CIPHER_TEXT_LEN];
2201 } AP_MLME_AUX, *PAP_MLME_AUX;
2203 // structure to define WPA Group Key Rekey Interval
2204 typedef struct PACKED _RT_802_11_WPA_REKEY {
2205 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2206 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2207 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2209 typedef struct _MAC_TABLE_ENTRY {
2210 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2211 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2212 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2213 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2214 BOOLEAN ValidAsMesh;
2215 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2217 BOOLEAN bIAmBadAtheros;
2219 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2221 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2222 UCHAR CMTimerRunning;
2223 UCHAR apidx; // MBSS number
2225 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2226 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2227 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2230 RALINK_TIMER_STRUCT RetryTimer;
2231 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2232 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2233 NDIS_802_11_WEP_STATUS WepStatus;
2234 AP_WPA_STATE WpaState;
2237 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2238 CIPHER_KEY PairwiseKey;
2241 UCHAR PMKID[LEN_PMKID];
2244 UCHAR Addr[MAC_ADDR_LEN];
2247 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2248 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2250 USHORT CapabilityInfo;
2252 ULONG NoDataIdleCount;
2253 UINT16 StationKeepAliveCount; // unit: second
2255 QUEUE_HEADER PsQueue;
2257 UINT32 StaConnectTime; // the live time of this station since associated with AP
2260 #ifdef DOT11_N_SUPPORT
2262 USHORT NoBADataCountDown;
2264 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2265 UINT TxBFCount; // 3*3
2266 #endif // DOT11_N_SUPPORT //
2268 UINT DebugFIFOCount;
2273 //====================================================
2274 //WDS entry needs these
2275 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2276 UINT MatchWDSTabIdx;
2277 UCHAR MaxSupportedRate;
2279 UCHAR CurrTxRateIndex;
2280 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2281 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2282 // USHORT OneSecTxOkCount;
2283 UINT32 OneSecTxNoRetryOkCount;
2284 UINT32 OneSecTxRetryOkCount;
2285 UINT32 OneSecTxFailCount;
2286 UINT32 ContinueTxFailCnt;
2287 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2288 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2289 //====================================================
2291 BOOLEAN fNoisyEnvironment;
2292 BOOLEAN fLastSecAccordingRSSI;
2293 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2294 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2295 ULONG LastTxOkCount;
2296 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2298 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2299 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2300 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2301 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2302 ULONG ClientStatusFlags;
2304 // TODO: Shall we move that to DOT11_N_SUPPORT???
2305 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2307 #ifdef DOT11_N_SUPPORT
2308 // HT EWC MIMO-N used parameters
2309 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2310 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2311 USHORT TXAutoBAbitmap;
2312 USHORT BADeclineBitmap;
2313 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2314 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2315 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2317 // 802.11n features.
2319 UCHAR MaxRAmpduFactor;
2321 UCHAR MmpsMode; // MIMO power save more.
2323 HT_CAPABILITY_IE HTCapability;
2325 #ifdef DOT11N_DRAFT3
2326 UCHAR BSS2040CoexistenceMgmtSupport;
2327 #endif // DOT11N_DRAFT3 //
2328 #endif // DOT11_N_SUPPORT //
2330 BOOLEAN bAutoTxRateSwitch;
2333 struct _MAC_TABLE_ENTRY *pNext;
2334 USHORT TxSeq[NUM_OF_TID];
2335 USHORT NonQosDataSeq;
2337 RSSI_SAMPLE RssiSample;
2339 UINT32 TXMCSExpected[16];
2340 UINT32 TXMCSSuccessful[16];
2341 UINT32 TXMCSFailed[16];
2342 UINT32 TXMCSAutoFallBack[16][16];
2344 #ifdef CONFIG_STA_SUPPORT
2345 ULONG LastBeaconRxTime;
2346 #endif // CONFIG_STA_SUPPORT //
2347 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2349 typedef struct _MAC_TABLE {
2351 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2352 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2353 QUEUE_HEADER McastPsQueue;
2355 BOOLEAN fAnyStationInPsm;
2356 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2357 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2358 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2359 #ifdef DOT11_N_SUPPORT
2360 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2361 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2362 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2363 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2364 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2365 #endif // DOT11_N_SUPPORT //
2366 } MAC_TABLE, *PMAC_TABLE;
2368 #ifdef DOT11_N_SUPPORT
2369 #define IS_HT_STA(_pMacEntry) \
2370 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2372 #define IS_HT_RATE(_pMacEntry) \
2373 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2375 #define PEER_IS_HT_RATE(_pMacEntry) \
2376 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2377 #endif // DOT11_N_SUPPORT //
2379 typedef struct _WDS_ENTRY {
2381 UCHAR Addr[MAC_ADDR_LEN];
2382 ULONG NoDataIdleCount;
2383 struct _WDS_ENTRY *pNext;
2384 } WDS_ENTRY, *PWDS_ENTRY;
2386 typedef struct _WDS_TABLE_ENTRY {
2388 UCHAR WdsAddr[MAC_ADDR_LEN];
2389 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2390 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2391 UCHAR MaxSupportedRate;
2393 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2394 USHORT OneSecTxOkCount;
2395 USHORT OneSecTxRetryOkCount;
2396 USHORT OneSecTxFailCount;
2397 ULONG CurrTxRateStableTime; // # of second in current TX rate
2398 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2399 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2401 typedef struct _RT_802_11_WDS_ENTRY {
2405 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2406 UCHAR MacTabMatchWCID; // ASIC
2407 NDIS_802_11_WEP_STATUS WepStatus;
2410 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2411 RT_HT_PHY_INFO DesiredHtPhyInfo;
2412 BOOLEAN bAutoTxRateSwitch;
2413 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2414 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2416 typedef struct _WDS_TABLE {
2419 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2420 } WDS_TABLE, *PWDS_TABLE;
2422 typedef struct _APCLI_STRUCT {
2425 unsigned int mylinkid;
2427 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2428 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2429 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2431 CHAR Ssid[MAX_LEN_OF_SSID];
2434 CHAR CfgSsid[MAX_LEN_OF_SSID];
2435 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2436 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2438 ULONG ApCliRcvBeaconTime;
2440 ULONG CtrlCurrState;
2441 ULONG SyncCurrState;
2442 ULONG AuthCurrState;
2443 ULONG AssocCurrState;
2444 ULONG WpaPskCurrState;
2449 ULONG ClientStatusFlags;
2452 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2453 NDIS_802_11_WEP_STATUS WepStatus;
2455 // Add to support different cipher suite for WPA2/WPA mode
2456 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2457 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2458 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2459 USHORT RsnCapability;
2461 UCHAR PSK[100]; // reserve PSK key material
2463 UCHAR PMK[32]; // WPA PSK mode PMK
2464 //UCHAR PTK[64]; // WPA PSK mode PTK
2465 UCHAR GTK[32]; // GTK from authenticator
2467 //CIPHER_KEY PairwiseKey;
2468 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2471 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2472 //UCHAR PortSecured;
2474 // store RSN_IE built by driver
2475 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2478 // For WPA countermeasures
2479 ULONG LastMicErrorTime; // record last MIC error time
2480 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2481 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2483 // For WPA-PSK supplicant state
2484 //WPA_STATE WpaState; // Default is SS_NOTUSE
2485 //UCHAR ReplayCounter[8];
2486 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2487 UCHAR SNonce[32]; // SNonce for WPA-PSK
2488 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2490 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2491 RT_HT_PHY_INFO DesiredHtPhyInfo;
2492 BOOLEAN bAutoTxRateSwitch;
2493 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2494 } APCLI_STRUCT, *PAPCLI_STRUCT;
2496 // ----------- end of AP ----------------------------
2501 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 BOOLEAN EepromAccess;
2689 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2691 // ---------------------------
2693 // ---------------------------
2694 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2695 UCHAR BbpRssiToDbmDelta;
2696 BBP_R66_TUNING BbpTuning;
2698 // ----------------------------
2700 // ----------------------------
2701 UCHAR RfIcType; // RFIC_xxx
2702 ULONG RfFreqOffset; // Frequency offset for channel switching
2703 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2705 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2706 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2708 // This soft Rx Antenna Diversity mechanism is used only when user set
2709 // RX Antenna = DIVERSITY ON
2710 SOFT_RX_ANT_DIVERSITY RxAnt;
2713 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2714 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2715 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2716 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2718 UCHAR ChannelListNum; // number of channel in ChannelList[]
2721 ULONG Tx20MPwrCfgABand[5];
2722 ULONG Tx20MPwrCfgGBand[5];
2723 ULONG Tx40MPwrCfgABand[5];
2724 ULONG Tx40MPwrCfgGBand[5];
2726 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2727 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2728 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2729 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2730 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2731 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2733 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2734 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2735 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2736 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2737 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2738 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2740 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2741 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2742 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2743 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2746 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2747 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2748 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2749 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2752 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2753 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2754 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2755 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2757 // ----------------------------
2759 // ----------------------------
2760 MCU_LEDCS_STRUC LedCntl;
2761 USHORT Led1; // read from EEPROM 0x3c
2762 USHORT Led2; // EEPROM 0x3e
2763 USHORT Led3; // EEPROM 0x40
2764 UCHAR LedIndicatorStregth;
2765 UCHAR RssiSingalstrengthOffet;
2766 BOOLEAN bLedOnScanning;
2769 /*****************************************************************************************/
2770 /* 802.11 related parameters */
2771 /*****************************************************************************************/
2772 // outgoing BEACON frame buffer and corresponding TXD
2773 TXWI_STRUC BeaconTxWI;
2775 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2777 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2778 PSPOLL_FRAME PsPollFrame;
2779 HEADER_802_11 NullFrame;
2782 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2783 TX_CONTEXT NullContext;
2784 TX_CONTEXT PsPollContext;
2785 TX_CONTEXT RTSContext;
2790 //=========AP===========
2793 //=======STA===========
2794 #ifdef CONFIG_STA_SUPPORT
2795 /* Modified by Wu Xi-Kun 4/21/2006 */
2796 // -----------------------------------------------
2797 // STA specific configuration & operation status
2798 // used only when pAd->OpMode == OPMODE_STA
2799 // -----------------------------------------------
2800 STA_ADMIN_CONFIG StaCfg; // user desired settings
2801 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2802 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2803 NDIS_MEDIA_STATE PreMediaState;
2804 #endif // CONFIG_STA_SUPPORT //
2806 //=======Common===========
2807 // OP mode: either AP or STA
2808 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2810 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2813 // MAT related parameters
2815 // configuration: read from Registry & E2PROM
2816 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2817 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2818 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2820 // ------------------------------------------------------
2821 // common configuration to both OPMODE_STA and OPMODE_AP
2822 // ------------------------------------------------------
2823 COMMON_CONFIG CommonCfg;
2826 // AP needs those vaiables for site survey feature.
2827 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2828 BSS_TABLE ScanTab; // store the latest SCAN result
2830 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2831 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2832 NDIS_SPIN_LOCK MacTabLock;
2834 #ifdef DOT11_N_SUPPORT
2836 #endif // DOT11_N_SUPPORT //
2837 NDIS_SPIN_LOCK BATabLock;
2838 RALINK_TIMER_STRUCT RECBATimer;
2840 // encryption/decryption KEY tables
2841 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2843 // RX re-assembly buffer for fragmentation
2844 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2847 COUNTER_802_3 Counters8023; // 802.3 counters
2848 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2849 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2850 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2851 PRIVATE_STRUC PrivateInfo; // Private information & counters
2853 // flags, see fRTMP_ADAPTER_xxx flags
2854 ULONG Flags; // Represent current device status
2856 // current TX sequence #
2859 // Control disconnect / connect event generation
2860 //+++Didn't used anymore
2865 //+++Used only for Station
2866 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2869 ULONG ExtraInfo; // Extra information for displaying status
2870 ULONG SystemErrorBitmap; // b0: E2PROM version error
2872 //+++Didn't used anymore
2873 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2876 // ---------------------------
2878 // ---------------------------
2879 RT_802_11_EVENT_TABLE EventTab;
2884 /*****************************************************************************************/
2885 /* Statistic related parameters */
2886 /*****************************************************************************************/
2888 ULONG BulkOutDataOneSecCount;
2889 ULONG BulkInDataOneSecCount;
2890 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2891 ULONG watchDogRxCnt;
2892 ULONG watchDogRxOverFlowCnt;
2893 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2896 BOOLEAN bUpdateBcnCntDone;
2897 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2898 // ----------------------------
2900 // ----------------------------
2901 //ULONG DebugSetting[4];
2902 BOOLEAN bBanAllBaSetup;
2903 BOOLEAN bPromiscuous;
2905 // ----------------------------
2906 // rt2860c emulation-use Parameters
2907 // ----------------------------
2910 ULONG cfendaccu[30];
2911 ULONG bacontent[16];
2912 ULONG rxint[RX_RING_SIZE+1];
2915 BOOLEAN bForcePrintTX;
2916 BOOLEAN bForcePrintRX;
2917 BOOLEAN bDisablescanning; //defined in RT2870 USB
2918 BOOLEAN bStaFifoTest;
2919 BOOLEAN bProtectionTest;
2921 BOOLEAN bGenOneHCCA;
2922 BOOLEAN bBroadComHT;
2923 //+++Following add from RT2870 USB.
2925 ULONG BulkOutComplete;
2926 ULONG BulkOutCompleteOther;
2927 ULONG BulkOutCompleteCancel; // seems not use now?
2929 ULONG BulkInComplete;
2930 ULONG BulkInCompleteFail;
2933 struct wificonf WIFItestbed;
2935 #ifdef DOT11_N_SUPPORT
2936 struct reordering_mpdu_pool mpdu_blk_pool;
2937 #endif // DOT11_N_SUPPORT //
2939 ULONG OneSecondnonBEpackets; // record non BE packets per second
2941 #if WIRELESS_EXT >= 12
2942 struct iw_statistics iw_stats;
2945 struct net_device_stats stats;
2947 ULONG TbttTickCount;
2948 #ifdef PCI_MSI_SUPPORT
2950 #endif // PCI_MSI_SUPPORT //
2955 #define TIME_BASE (1000000/OS_HZ)
2956 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2957 UCHAR flg_be_adjust;
2958 ULONG be_adjust_last_time;
2960 #ifdef IKANOS_VX_1X0
2961 struct IKANOS_TX_INFO IkanosTxInfo;
2962 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2963 #endif // IKANOS_VX_1X0 //
2967 RtmpDiagStruct DiagStruct;
2968 #endif // DBG_DIAGNOSE //
2971 UINT8 PM_FlgSuspend;
2976 BOOLEAN bEEPROMFile;
2979 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2982 // Cisco IAPP format
2984 typedef struct _CISCO_IAPP_CONTENT_
2986 USHORT Length; //IAPP Length
2987 UCHAR MessageType; //IAPP type
2988 UCHAR FunctionCode; //IAPP function type
2989 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2990 UCHAR SourceMAC[MAC_ADDR_LEN];
2991 USHORT Tag; //Tag(element IE) - Adjacent AP report
2992 USHORT TagLength; //Length of element not including 4 byte header
2993 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2994 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2997 UCHAR Ssid[MAX_LEN_OF_SSID];
2998 USHORT Seconds; //Seconds that the client has been disassociated.
2999 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3001 #define DELAYINTMASK 0x0003fffb
3002 #define INTMASK 0x0003fffb
3003 #define IndMask 0x0003fffc
3004 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3005 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3006 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3007 #define TxCoherent 0x00020000 // tx coherent
3008 #define RxCoherent 0x00010000 // rx coherent
3009 #define McuCommand 0x00000200 // mcu
3010 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3011 #define TBTTInt 0x00000800 // TBTT interrupt
3012 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3013 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3014 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3017 typedef struct _RX_BLK_
3019 // RXD_STRUC RxD; // sample
3020 RT28XX_RXD_STRUC RxD;
3022 PHEADER_802_11 pHeader;
3023 PNDIS_PACKET pRxPacket;
3027 UCHAR UserPriority; // for calculate TKIP MIC using
3031 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3032 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3033 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3036 #define fRX_WDS 0x0001
3037 #define fRX_AMSDU 0x0002
3038 #define fRX_ARALINK 0x0004
3039 #define fRX_HTC 0x0008
3040 #define fRX_PAD 0x0010
3041 #define fRX_AMPDU 0x0020
3042 #define fRX_QOS 0x0040
3043 #define fRX_INFRA 0x0080
3044 #define fRX_EAP 0x0100
3045 #define fRX_MESH 0x0200
3046 #define fRX_APCLI 0x0400
3047 #define fRX_DLS 0x0800
3048 #define fRX_WPI 0x1000
3050 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3051 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3052 #define LENGTH_ARALINK_HEADER_FIELD 2
3054 #define TX_UNKOWN_FRAME 0x00
3055 #define TX_MCAST_FRAME 0x01
3056 #define TX_LEGACY_FRAME 0x02
3057 #define TX_AMPDU_FRAME 0x04
3058 #define TX_AMSDU_FRAME 0x08
3059 #define TX_RALINK_FRAME 0x10
3060 #define TX_FRAG_FRAME 0x20
3063 // Currently the sizeof(TX_BLK) is 148 bytes.
3064 typedef struct _TX_BLK_
3067 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3068 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3069 USHORT TotalFragNum; // Total frame fragments required in one batch
3070 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3072 QUEUE_HEADER TxPacketList;
3073 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3074 HTTRANSMIT_SETTING *pTransmit;
3076 // Following structure used for the characteristics of a specific packet.
3077 PNDIS_PACKET pPacket;
3078 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3079 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3080 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3081 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3082 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3083 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3084 UCHAR HdrPadLen; // recording Header Padding Length;
3085 UCHAR apidx; // The interface associated to this packet
3086 UCHAR Wcid; // The MAC entry associated to this packet
3087 UCHAR UserPriority; // priority class of packet
3088 UCHAR FrameGap; // what kind of IFS this packet use
3089 UCHAR MpduReqNum; // number of fragments of this frame
3090 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3091 UCHAR CipherAlg; // cipher alogrithm
3096 USHORT Flags; //See following definitions for detail.
3098 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3099 ULONG Priv; // Hardware specific value saved in here.
3103 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3104 #define fTX_bAckRequired 0x0002 // the packet need ack response
3105 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3106 #define fTX_bHTRate 0x0008 // allow to use HT rate
3107 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3108 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3109 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3110 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3111 #define fTX_bWMM 0x0080 // QOS Data
3113 #define fTX_bClearEAPFrame 0x0100
3116 #ifdef CONFIG_STA_SUPPORT
3117 #endif // CONFIG_STA_SUPPORT //
3121 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3124 (_pTxBlk->Flags |= _flag) \
3126 (_pTxBlk->Flags &= ~(_flag)) \
3129 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3130 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3131 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3137 //------------------------------------------------------------------------------------------
3141 #ifdef RT_BIG_ENDIAN
3142 static inline VOID WriteBackToDescriptor(
3145 IN BOOLEAN DoEncrypt,
3146 IN ULONG DescriptorType)
3150 p1 = ((UINT32 *)Dest);
3151 p2 = ((UINT32 *)Src);
3156 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3160 ========================================================================
3162 Routine Description:
3163 Endian conversion of Tx/Rx descriptor .
3166 pAd Pointer to our adapter
3167 pData Pointer to Tx/Rx descriptor
3168 DescriptorType Direction of the frame
3174 Call this function when read or update descriptor
3175 ========================================================================
3177 static inline VOID RTMPWIEndianChange(
3179 IN ULONG DescriptorType)
3184 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3186 if(DescriptorType == TYPE_TXWI)
3188 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3189 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3193 for(i=0; i < size/4 ; i++)
3194 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3199 ========================================================================
3201 Routine Description:
3202 Endian conversion of Tx/Rx descriptor .
3205 pAd Pointer to our adapter
3206 pData Pointer to Tx/Rx descriptor
3207 DescriptorType Direction of the frame
3213 Call this function when read or update descriptor
3214 ========================================================================
3218 static inline VOID RTMPDescriptorEndianChange(
3220 IN ULONG DescriptorType)
3222 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3226 ========================================================================
3228 Routine Description:
3229 Endian conversion of all kinds of 802.11 frames .
3232 pAd Pointer to our adapter
3233 pData Pointer to the 802.11 frame structure
3234 Dir Direction of the frame
3235 FromRxDoneInt Caller is from RxDone interrupt
3241 Call this function when read or update buffer data
3242 ========================================================================
3244 static inline VOID RTMPFrameEndianChange(
3245 IN PRTMP_ADAPTER pAd,
3248 IN BOOLEAN FromRxDoneInt)
3250 PHEADER_802_11 pFrame;
3253 // swab 16 bit fields - Frame Control field
3256 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3259 pFrame = (PHEADER_802_11) pData;
3260 pMacHdr = (PUCHAR) pFrame;
3262 // swab 16 bit fields - Duration/ID field
3263 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3265 // swab 16 bit fields - Sequence Control field
3266 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3268 if(pFrame->FC.Type == BTYPE_MGMT)
3270 switch(pFrame->FC.SubType)
3272 case SUBTYPE_ASSOC_REQ:
3273 case SUBTYPE_REASSOC_REQ:
3274 // swab 16 bit fields - CapabilityInfo field
3275 pMacHdr += sizeof(HEADER_802_11);
3276 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3278 // swab 16 bit fields - Listen Interval field
3280 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3283 case SUBTYPE_ASSOC_RSP:
3284 case SUBTYPE_REASSOC_RSP:
3285 // swab 16 bit fields - CapabilityInfo field
3286 pMacHdr += sizeof(HEADER_802_11);
3287 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3289 // swab 16 bit fields - Status Code field
3291 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3293 // swab 16 bit fields - AID field
3295 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3299 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3300 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3301 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3305 // swab 16 bit fields - Auth Alg No. field
3306 pMacHdr += sizeof(HEADER_802_11);
3307 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3309 // swab 16 bit fields - Auth Seq No. field
3311 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3313 // swab 16 bit fields - Status Code field
3315 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3319 case SUBTYPE_BEACON:
3320 case SUBTYPE_PROBE_RSP:
3321 // swab 16 bit fields - BeaconInterval field
3322 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3323 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3325 // swab 16 bit fields - CapabilityInfo field
3326 pMacHdr += sizeof(USHORT);
3327 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3330 case SUBTYPE_DEAUTH:
3331 case SUBTYPE_DISASSOC:
3332 // swab 16 bit fields - Reason code field
3333 pMacHdr += sizeof(HEADER_802_11);
3334 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3338 else if( pFrame->FC.Type == BTYPE_DATA )
3341 else if(pFrame->FC.Type == BTYPE_CNTL)
3343 switch(pFrame->FC.SubType)
3345 case SUBTYPE_BLOCK_ACK_REQ:
3347 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3348 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3349 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3352 case SUBTYPE_BLOCK_ACK:
3353 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3354 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3358 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3359 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3365 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3368 // swab 16 bit fields - Frame Control
3369 if(Dir == DIR_WRITE)
3371 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3374 #endif // RT_BIG_ENDIAN //
3377 static inline VOID ConvertMulticastIP2MAC(
3379 IN PUCHAR *ppMacAddr,
3380 IN UINT16 ProtoType)
3382 if (pIpAddr == NULL)
3385 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3391 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3392 *(*ppMacAddr) = 0x33;
3393 *(*ppMacAddr + 1) = 0x33;
3394 *(*ppMacAddr + 2) = pIpAddr[12];
3395 *(*ppMacAddr + 3) = pIpAddr[13];
3396 *(*ppMacAddr + 4) = pIpAddr[14];
3397 *(*ppMacAddr + 5) = pIpAddr[15];
3402 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3403 *(*ppMacAddr) = 0x01;
3404 *(*ppMacAddr + 1) = 0x00;
3405 *(*ppMacAddr + 2) = 0x5e;
3406 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3407 *(*ppMacAddr + 4) = pIpAddr[2];
3408 *(*ppMacAddr + 5) = pIpAddr[3];
3415 BOOLEAN RTMPCheckForHang(
3416 IN NDIS_HANDLE MiniportAdapterContext
3420 IN NDIS_HANDLE MiniportAdapterContext
3424 // Private routines in rtmp_init.c
3426 NDIS_STATUS RTMPAllocAdapterBlock(
3428 OUT PRTMP_ADAPTER *ppAdapter
3431 NDIS_STATUS RTMPAllocTxRxRingMemory(
3432 IN PRTMP_ADAPTER pAd
3435 NDIS_STATUS RTMPFindAdapter(
3436 IN PRTMP_ADAPTER pAd,
3437 IN NDIS_HANDLE WrapperConfigurationContext
3440 NDIS_STATUS RTMPReadParametersHook(
3441 IN PRTMP_ADAPTER pAd
3444 VOID RTMPFreeAdapter(
3445 IN PRTMP_ADAPTER pAd
3448 NDIS_STATUS NICReadRegParameters(
3449 IN PRTMP_ADAPTER pAd,
3450 IN NDIS_HANDLE WrapperConfigurationContext
3454 VOID NICInitRT30xxRFRegisters(
3455 IN PRTMP_ADAPTER pAd);
3458 VOID NICReadEEPROMParameters(
3459 IN PRTMP_ADAPTER pAd,
3460 IN PUCHAR mac_addr);
3462 VOID NICInitAsicFromEEPROM(
3463 IN PRTMP_ADAPTER pAd);
3465 VOID NICInitTxRxRingAndBacklogQueue(
3466 IN PRTMP_ADAPTER pAd);
3468 NDIS_STATUS NICInitializeAdapter(
3469 IN PRTMP_ADAPTER pAd,
3470 IN BOOLEAN bHardReset);
3472 NDIS_STATUS NICInitializeAsic(
3473 IN PRTMP_ADAPTER pAd,
3474 IN BOOLEAN bHardReset);
3477 IN PRTMP_ADAPTER pAd);
3479 VOID RTMPRingCleanUp(
3480 IN PRTMP_ADAPTER pAd,
3484 IN PRTMP_ADAPTER pAd);
3486 NDIS_STATUS DbgSendPacket(
3487 IN PRTMP_ADAPTER pAd,
3488 IN PNDIS_PACKET pPacket);
3491 IN PRTMP_ADAPTER pAd);
3493 VOID NICResetFromError(
3494 IN PRTMP_ADAPTER pAd);
3496 VOID NICEraseFirmware(
3497 IN PRTMP_ADAPTER pAd);
3499 NDIS_STATUS NICLoadFirmware(
3500 IN PRTMP_ADAPTER pAd);
3502 NDIS_STATUS NICLoadRateSwitchingParams(
3503 IN PRTMP_ADAPTER pAd);
3505 BOOLEAN NICCheckForHang(
3506 IN PRTMP_ADAPTER pAd);
3508 VOID NICUpdateFifoStaCounters(
3509 IN PRTMP_ADAPTER pAd);
3511 VOID NICUpdateRawCounters(
3512 IN PRTMP_ADAPTER pAd);
3514 ULONG RTMPNotAllZero(
3518 VOID RTMPZeroMemory(
3522 ULONG RTMPCompareMemory(
3527 VOID RTMPMoveMemory(
3540 VOID RTMPPatchMacBbpBug(
3541 IN PRTMP_ADAPTER pAd);
3543 VOID RTMPPatchCardBus(
3544 IN PRTMP_ADAPTER pAdapter);
3546 VOID RTMPPatchRalinkCardBus(
3547 IN PRTMP_ADAPTER pAdapter,
3550 ULONG RTMPReadCBConfig(
3556 VOID RTMPWriteCBConfig(
3564 IN PRTMP_ADAPTER pAd,
3565 IN PRALINK_TIMER_STRUCT pTimer,
3566 IN PVOID pTimerFunc,
3571 IN PRALINK_TIMER_STRUCT pTimer,
3576 IN PRALINK_TIMER_STRUCT pTimer,
3579 VOID RTMPCancelTimer(
3580 IN PRALINK_TIMER_STRUCT pTimer,
3581 OUT BOOLEAN *pCancelled);
3584 IN PRTMP_ADAPTER pAd,
3587 VOID RTMPSetSignalLED(
3588 IN PRTMP_ADAPTER pAd,
3589 IN NDIS_802_11_RSSI Dbm);
3591 VOID RTMPEnableRxTx(
3592 IN PRTMP_ADAPTER pAd);
3595 // prototype in action.c
3597 VOID ActionStateMachineInit(
3598 IN PRTMP_ADAPTER pAd,
3599 IN STATE_MACHINE *S,
3600 OUT STATE_MACHINE_FUNC Trans[]);
3602 VOID MlmeADDBAAction(
3603 IN PRTMP_ADAPTER pAd,
3604 IN MLME_QUEUE_ELEM *Elem);
3606 VOID MlmeDELBAAction(
3607 IN PRTMP_ADAPTER pAd,
3608 IN MLME_QUEUE_ELEM *Elem);
3611 IN PRTMP_ADAPTER pAd,
3612 IN MLME_QUEUE_ELEM *Elem);
3614 VOID MlmeInvalidAction(
3615 IN PRTMP_ADAPTER pAd,
3616 IN MLME_QUEUE_ELEM *Elem);
3619 IN PRTMP_ADAPTER pAd,
3620 IN MLME_QUEUE_ELEM *Elem);
3622 #ifdef DOT11_N_SUPPORT
3623 VOID PeerAddBAReqAction(
3624 IN PRTMP_ADAPTER pAd,
3625 IN MLME_QUEUE_ELEM *Elem);
3627 VOID PeerAddBARspAction(
3628 IN PRTMP_ADAPTER pAd,
3629 IN MLME_QUEUE_ELEM *Elem);
3631 VOID PeerDelBAAction(
3632 IN PRTMP_ADAPTER pAd,
3633 IN MLME_QUEUE_ELEM *Elem);
3636 IN PRTMP_ADAPTER pAd,
3637 IN MLME_QUEUE_ELEM *Elem);
3638 #endif // DOT11_N_SUPPORT //
3640 VOID SendPSMPAction(
3641 IN PRTMP_ADAPTER pAd,
3646 #ifdef DOT11N_DRAFT3
3647 VOID SendBSS2040CoexistMgmtAction(
3648 IN PRTMP_ADAPTER pAd,
3653 VOID SendNotifyBWActionFrame(
3654 IN PRTMP_ADAPTER pAd,
3658 BOOLEAN ChannelSwitchSanityCheck(
3659 IN PRTMP_ADAPTER pAd,
3661 IN UCHAR NewChannel,
3662 IN UCHAR Secondary);
3664 VOID ChannelSwitchAction(
3665 IN PRTMP_ADAPTER pAd,
3668 IN UCHAR Secondary);
3670 ULONG BuildIntolerantChannelRep(
3671 IN PRTMP_ADAPTER pAd,
3674 VOID Update2040CoexistFrameAndNotify(
3675 IN PRTMP_ADAPTER pAd,
3677 IN BOOLEAN bAddIntolerantCha);
3679 VOID Send2040CoexistAction(
3680 IN PRTMP_ADAPTER pAd,
3682 IN BOOLEAN bAddIntolerantCha);
3683 #endif // DOT11N_DRAFT3 //
3686 IN PRTMP_ADAPTER pAd,
3687 IN MLME_QUEUE_ELEM *Elem);
3689 VOID PeerPublicAction(
3690 IN PRTMP_ADAPTER pAd,
3691 IN MLME_QUEUE_ELEM *Elem);
3693 #ifdef CONFIG_STA_SUPPORT
3694 VOID StaPublicAction(
3695 IN PRTMP_ADAPTER pAd,
3696 IN UCHAR Bss2040Coexist);
3697 #endif // CONFIG_STA_SUPPORT //
3700 VOID PeerBSSTranAction(
3701 IN PRTMP_ADAPTER pAd,
3702 IN MLME_QUEUE_ELEM *Elem);
3704 #ifdef DOT11_N_SUPPORT
3706 IN PRTMP_ADAPTER pAd,
3707 IN MLME_QUEUE_ELEM *Elem);
3708 #endif // DOT11_N_SUPPORT //
3711 IN PRTMP_ADAPTER pAd,
3712 IN MLME_QUEUE_ELEM *Elem);
3714 #ifdef DOT11_N_SUPPORT
3715 VOID RECBATimerTimeout(
3716 IN PVOID SystemSpecific1,
3717 IN PVOID FunctionContext,
3718 IN PVOID SystemSpecific2,
3719 IN PVOID SystemSpecific3);
3721 VOID ORIBATimerTimeout(
3722 IN PRTMP_ADAPTER pAd);
3724 VOID SendRefreshBAR(
3725 IN PRTMP_ADAPTER pAd,
3726 IN MAC_TABLE_ENTRY *pEntry);
3727 #endif // DOT11_N_SUPPORT //
3730 IN PRTMP_ADAPTER pAd,
3731 IN OUT PHEADER_802_11 pHdr80211,
3737 IN PRTMP_ADAPTER pAd,
3738 IN OUT PFRAME_BAR pCntlBar,
3742 VOID InsertActField(
3743 IN PRTMP_ADAPTER pAd,
3744 OUT PUCHAR pFrameBuf,
3745 OUT PULONG pFrameLen,
3749 BOOLEAN QosBADataParse(
3750 IN PRTMP_ADAPTER pAd,
3752 IN PUCHAR p8023Header,
3756 IN UCHAR DataOffset,
3758 IN UINT CurRxIndex);
3760 #ifdef DOT11_N_SUPPORT
3761 BOOLEAN CntlEnqueueForRecv(
3762 IN PRTMP_ADAPTER pAd,
3765 IN PFRAME_BA_REQ pMsg);
3767 VOID BaAutoManSwitch(
3768 IN PRTMP_ADAPTER pAd);
3769 #endif // DOT11_N_SUPPORT //
3772 IN PRTMP_ADAPTER pAd,
3773 IN UCHAR BatRecIdx);
3776 // Private routines in rtmp_data.c
3778 BOOLEAN RTMPHandleRxDoneInterrupt(
3779 IN PRTMP_ADAPTER pAd);
3781 VOID RTMPHandleTxDoneInterrupt(
3782 IN PRTMP_ADAPTER pAd);
3784 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3785 IN PRTMP_ADAPTER pAd,
3786 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3788 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3789 IN PRTMP_ADAPTER pAd);
3791 VOID RTMPHandleTBTTInterrupt(
3792 IN PRTMP_ADAPTER pAd);
3794 VOID RTMPHandlePreTBTTInterrupt(
3795 IN PRTMP_ADAPTER pAd);
3797 void RTMPHandleTwakeupInterrupt(
3798 IN PRTMP_ADAPTER pAd);
3800 VOID RTMPHandleRxCoherentInterrupt(
3801 IN PRTMP_ADAPTER pAd);
3803 BOOLEAN TxFrameIsAggregatible(
3804 IN PRTMP_ADAPTER pAd,
3805 IN PUCHAR pPrevAddr1,
3806 IN PUCHAR p8023hdr);
3808 BOOLEAN PeerIsAggreOn(
3809 IN PRTMP_ADAPTER pAd,
3811 IN PMAC_TABLE_ENTRY pMacEntry);
3813 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3814 IN PNDIS_BUFFER pFirstBuffer,
3815 IN UCHAR DesiredOffset,
3819 NDIS_STATUS STASendPacket(
3820 IN PRTMP_ADAPTER pAd,
3821 IN PNDIS_PACKET pPacket);
3823 VOID STASendPackets(
3824 IN NDIS_HANDLE MiniportAdapterContext,
3825 IN PPNDIS_PACKET ppPacketArray,
3826 IN UINT NumberOfPackets);
3828 VOID RTMPDeQueuePacket(
3829 IN PRTMP_ADAPTER pAd,
3830 IN BOOLEAN bIntContext,
3832 IN UCHAR Max_Tx_Packets);
3834 NDIS_STATUS RTMPHardTransmit(
3835 IN PRTMP_ADAPTER pAd,
3836 IN PNDIS_PACKET pPacket,
3838 OUT PULONG pFreeTXDLeft);
3840 NDIS_STATUS STAHardTransmit(
3841 IN PRTMP_ADAPTER pAd,
3845 VOID STARxEAPOLFrameIndicate(
3846 IN PRTMP_ADAPTER pAd,
3847 IN MAC_TABLE_ENTRY *pEntry,
3849 IN UCHAR FromWhichBSSID);
3851 NDIS_STATUS RTMPFreeTXDRequest(
3852 IN PRTMP_ADAPTER pAd,
3854 IN UCHAR NumberRequired,
3855 IN PUCHAR FreeNumberIs);
3857 NDIS_STATUS MlmeHardTransmit(
3858 IN PRTMP_ADAPTER pAd,
3860 IN PNDIS_PACKET pPacket);
3862 NDIS_STATUS MlmeHardTransmitMgmtRing(
3863 IN PRTMP_ADAPTER pAd,
3865 IN PNDIS_PACKET pPacket);
3867 NDIS_STATUS MlmeHardTransmitTxRing(
3868 IN PRTMP_ADAPTER pAd,
3870 IN PNDIS_PACKET pPacket);
3872 USHORT RTMPCalcDuration(
3873 IN PRTMP_ADAPTER pAd,
3878 IN PRTMP_ADAPTER pAd,
3879 IN PTXWI_STRUC pTxWI,
3882 IN BOOLEAN InsTimestamp,
3885 IN BOOLEAN NSeq, // HW new a sequence.
3894 IN HTTRANSMIT_SETTING *pTransmit);
3897 VOID RTMPWriteTxWI_Data(
3898 IN PRTMP_ADAPTER pAd,
3899 IN OUT PTXWI_STRUC pTxWI,
3903 VOID RTMPWriteTxWI_Cache(
3904 IN PRTMP_ADAPTER pAd,
3905 IN OUT PTXWI_STRUC pTxWI,
3908 VOID RTMPWriteTxDescriptor(
3909 IN PRTMP_ADAPTER pAd,
3914 VOID RTMPSuspendMsduTransmission(
3915 IN PRTMP_ADAPTER pAd);
3917 VOID RTMPResumeMsduTransmission(
3918 IN PRTMP_ADAPTER pAd);
3920 NDIS_STATUS MiniportMMRequest(
3921 IN PRTMP_ADAPTER pAd,
3926 NDIS_STATUS MiniportDataMMRequest(
3927 IN PRTMP_ADAPTER pAd,
3932 VOID RTMPSendNullFrame(
3933 IN PRTMP_ADAPTER pAd,
3935 IN BOOLEAN bQosNull);
3937 VOID RTMPSendDisassociationFrame(
3938 IN PRTMP_ADAPTER pAd);
3940 VOID RTMPSendRTSFrame(
3941 IN PRTMP_ADAPTER pAd,
3943 IN unsigned int NextMpduSize,
3946 IN USHORT AckDuration,
3951 NDIS_STATUS RTMPApplyPacketFilter(
3952 IN PRTMP_ADAPTER pAd,
3953 IN PRT28XX_RXD_STRUC pRxD,
3954 IN PHEADER_802_11 pHeader);
3956 PQUEUE_HEADER RTMPCheckTxSwQueue(
3957 IN PRTMP_ADAPTER pAd,
3960 #ifdef CONFIG_STA_SUPPORT
3961 VOID RTMPReportMicError(
3962 IN PRTMP_ADAPTER pAd,
3963 IN PCIPHER_KEY pWpaKey);
3965 VOID WpaMicFailureReportFrame(
3966 IN PRTMP_ADAPTER pAd,
3967 IN MLME_QUEUE_ELEM *Elem);
3969 VOID WpaDisassocApAndBlockAssoc(
3970 IN PVOID SystemSpecific1,
3971 IN PVOID FunctionContext,
3972 IN PVOID SystemSpecific2,
3973 IN PVOID SystemSpecific3);
3974 #endif // CONFIG_STA_SUPPORT //
3976 NDIS_STATUS RTMPCloneNdisPacket(
3977 IN PRTMP_ADAPTER pAd,
3978 IN BOOLEAN pInsAMSDUHdr,
3979 IN PNDIS_PACKET pInPacket,
3980 OUT PNDIS_PACKET *ppOutPacket);
3982 NDIS_STATUS RTMPAllocateNdisPacket(
3983 IN PRTMP_ADAPTER pAd,
3984 IN PNDIS_PACKET *pPacket,
3990 VOID RTMPFreeNdisPacket(
3991 IN PRTMP_ADAPTER pAd,
3992 IN PNDIS_PACKET pPacket);
3994 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3995 IN PRTMP_ADAPTER pAd,
3998 BOOLEAN RTMPCheckDHCPFrame(
3999 IN PRTMP_ADAPTER pAd,
4000 IN PNDIS_PACKET pPacket);
4003 BOOLEAN RTMPCheckEtherType(
4004 IN PRTMP_ADAPTER pAd,
4005 IN PNDIS_PACKET pPacket);
4008 VOID RTMPCckBbpTuning(
4009 IN PRTMP_ADAPTER pAd,
4013 // Private routines in rtmp_wep.c
4015 VOID RTMPInitWepEngine(
4016 IN PRTMP_ADAPTER pAd,
4022 VOID RTMPEncryptData(
4023 IN PRTMP_ADAPTER pAd,
4028 BOOLEAN RTMPDecryptData(
4029 IN PRTMP_ADAPTER pAdapter,
4034 BOOLEAN RTMPSoftDecryptWEP(
4035 IN PRTMP_ADAPTER pAd,
4037 IN ULONG DataByteCnt,
4038 IN PCIPHER_KEY pGroupKey);
4041 IN PRTMP_ADAPTER pAd,
4045 IN PARCFOURCONTEXT Ctx,
4050 IN PARCFOURCONTEXT Ctx);
4052 VOID ARCFOUR_DECRYPT(
4053 IN PARCFOURCONTEXT Ctx,
4058 VOID ARCFOUR_ENCRYPT(
4059 IN PARCFOURCONTEXT Ctx,
4064 VOID WPAARCFOUR_ENCRYPT(
4065 IN PARCFOURCONTEXT Ctx,
4070 UINT RTMP_CALC_FCS32(
4079 // Asic/RF/BBP related functions
4081 VOID AsicAdjustTxPower(
4082 IN PRTMP_ADAPTER pAd);
4084 VOID AsicUpdateProtect(
4085 IN PRTMP_ADAPTER pAd,
4086 IN USHORT OperaionMode,
4088 IN BOOLEAN bDisableBGProtect,
4089 IN BOOLEAN bNonGFExist);
4091 VOID AsicSwitchChannel(
4092 IN PRTMP_ADAPTER pAd,
4096 VOID AsicLockChannel(
4097 IN PRTMP_ADAPTER pAd,
4100 VOID AsicAntennaSelect(
4101 IN PRTMP_ADAPTER pAd,
4104 VOID AsicAntennaSetting(
4105 IN PRTMP_ADAPTER pAd,
4106 IN ABGBAND_STATE BandState);
4108 VOID AsicRfTuningExec(
4109 IN PVOID SystemSpecific1,
4110 IN PVOID FunctionContext,
4111 IN PVOID SystemSpecific2,
4112 IN PVOID SystemSpecific3);
4114 #ifdef CONFIG_STA_SUPPORT
4115 VOID AsicSleepThenAutoWakeup(
4116 IN PRTMP_ADAPTER pAd,
4117 IN USHORT TbttNumToNextWakeUp);
4119 VOID AsicForceSleep(
4120 IN PRTMP_ADAPTER pAd);
4122 VOID AsicForceWakeup(
4123 IN PRTMP_ADAPTER pAd,
4124 IN BOOLEAN bFromTx);
4125 #endif // CONFIG_STA_SUPPORT //
4128 IN PRTMP_ADAPTER pAd,
4131 VOID AsicSetMcastWC(
4132 IN PRTMP_ADAPTER pAd);
4134 VOID AsicDelWcidTab(
4135 IN PRTMP_ADAPTER pAd,
4139 IN PRTMP_ADAPTER pAd);
4141 VOID AsicDisableRDG(
4142 IN PRTMP_ADAPTER pAd);
4144 VOID AsicDisableSync(
4145 IN PRTMP_ADAPTER pAd);
4147 VOID AsicEnableBssSync(
4148 IN PRTMP_ADAPTER pAd);
4150 VOID AsicEnableIbssSync(
4151 IN PRTMP_ADAPTER pAd);
4153 VOID AsicSetEdcaParm(
4154 IN PRTMP_ADAPTER pAd,
4155 IN PEDCA_PARM pEdcaParm);
4157 VOID AsicSetSlotTime(
4158 IN PRTMP_ADAPTER pAd,
4159 IN BOOLEAN bUseShortSlotTime);
4161 VOID AsicAddSharedKeyEntry(
4162 IN PRTMP_ADAPTER pAd,
4170 VOID AsicRemoveSharedKeyEntry(
4171 IN PRTMP_ADAPTER pAd,
4175 VOID AsicUpdateWCIDAttribute(
4176 IN PRTMP_ADAPTER pAd,
4180 IN BOOLEAN bUsePairewiseKeyTable);
4182 VOID AsicUpdateWCIDIVEIV(
4183 IN PRTMP_ADAPTER pAd,
4188 VOID AsicUpdateRxWCIDTable(
4189 IN PRTMP_ADAPTER pAd,
4193 VOID AsicAddKeyEntry(
4194 IN PRTMP_ADAPTER pAd,
4198 IN PCIPHER_KEY pCipherKey,
4199 IN BOOLEAN bUsePairewiseKeyTable,
4202 VOID AsicAddPairwiseKeyEntry(
4203 IN PRTMP_ADAPTER pAd,
4206 IN CIPHER_KEY *pCipherKey);
4208 VOID AsicRemovePairwiseKeyEntry(
4209 IN PRTMP_ADAPTER pAd,
4213 BOOLEAN AsicSendCommandToMcu(
4214 IN PRTMP_ADAPTER pAd,
4221 VOID MacAddrRandomBssid(
4222 IN PRTMP_ADAPTER pAd,
4225 VOID MgtMacHeaderInit(
4226 IN PRTMP_ADAPTER pAd,
4227 IN OUT PHEADER_802_11 pHdr80211,
4234 IN PRTMP_ADAPTER pAd);
4237 IN PRTMP_ADAPTER pAd);
4243 #ifdef DOT11_N_SUPPORT
4245 IN PRTMP_ADAPTER pAd,
4247 #endif // DOT11_N_SUPPORT //
4249 ULONG BssTableSearch(
4254 ULONG BssSsidTableSearch(
4261 ULONG BssTableSearchWithSSID(
4268 VOID BssTableDeleteEntry(
4269 IN OUT PBSS_TABLE pTab,
4273 #ifdef DOT11_N_SUPPORT
4274 VOID BATableDeleteORIEntry(
4275 IN OUT PRTMP_ADAPTER pAd,
4276 IN BA_ORI_ENTRY *pBAORIEntry);
4278 VOID BATableDeleteRECEntry(
4279 IN OUT PRTMP_ADAPTER pAd,
4280 IN BA_REC_ENTRY *pBARECEntry);
4282 VOID BATableTearORIEntry(
4283 IN OUT PRTMP_ADAPTER pAd,
4286 IN BOOLEAN bForceDelete,
4289 VOID BATableTearRECEntry(
4290 IN OUT PRTMP_ADAPTER pAd,
4294 #endif // DOT11_N_SUPPORT //
4297 IN PRTMP_ADAPTER pAd,
4298 OUT PBSS_ENTRY pBss,
4303 IN USHORT BeaconPeriod,
4306 IN USHORT CapabilityInfo,
4308 IN UCHAR SupRateLen,
4310 IN UCHAR ExtRateLen,
4311 IN HT_CAPABILITY_IE *pHtCapability,
4312 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4313 IN UCHAR HtCapabilityLen,
4314 IN UCHAR AddHtInfoLen,
4315 IN UCHAR NewExtChanOffset,
4318 IN LARGE_INTEGER TimeStamp,
4320 IN PEDCA_PARM pEdcaParm,
4321 IN PQOS_CAPABILITY_PARM pQosCapability,
4322 IN PQBSS_LOAD_PARM pQbssLoad,
4323 IN USHORT LengthVIE,
4324 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4326 ULONG BssTableSetEntry(
4327 IN PRTMP_ADAPTER pAd,
4328 OUT PBSS_TABLE pTab,
4333 IN USHORT BeaconPeriod,
4336 IN USHORT CapabilityInfo,
4338 IN UCHAR SupRateLen,
4340 IN UCHAR ExtRateLen,
4341 IN HT_CAPABILITY_IE *pHtCapability,
4342 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4343 IN UCHAR HtCapabilityLen,
4344 IN UCHAR AddHtInfoLen,
4345 IN UCHAR NewExtChanOffset,
4348 IN LARGE_INTEGER TimeStamp,
4350 IN PEDCA_PARM pEdcaParm,
4351 IN PQOS_CAPABILITY_PARM pQosCapability,
4352 IN PQBSS_LOAD_PARM pQbssLoad,
4353 IN USHORT LengthVIE,
4354 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4356 #ifdef DOT11_N_SUPPORT
4357 VOID BATableInsertEntry(
4358 IN PRTMP_ADAPTER pAd,
4360 IN USHORT TimeOutValue,
4361 IN USHORT StartingSeq,
4364 IN UCHAR OriginatorStatus,
4365 IN BOOLEAN IsRecipient);
4367 #ifdef DOT11N_DRAFT3
4368 VOID Bss2040CoexistTimeOut(
4369 IN PVOID SystemSpecific1,
4370 IN PVOID FunctionContext,
4371 IN PVOID SystemSpecific2,
4372 IN PVOID SystemSpecific3);
4376 IN PRTMP_ADAPTER pAd);
4378 ULONG TriEventTableSetEntry(
4379 IN PRTMP_ADAPTER pAd,
4380 OUT TRIGGER_EVENT_TAB *Tab,
4382 IN HT_CAPABILITY_IE *pHtCapability,
4383 IN UCHAR HtCapabilityLen,
4385 IN UCHAR ChannelNo);
4387 VOID TriEventCounterMaintenance(
4388 IN PRTMP_ADAPTER pAd);
4389 #endif // DOT11N_DRAFT3 //
4390 #endif // DOT11_N_SUPPORT //
4392 VOID BssTableSsidSort(
4393 IN PRTMP_ADAPTER pAd,
4394 OUT BSS_TABLE *OutTab,
4398 VOID BssTableSortByRssi(
4399 IN OUT BSS_TABLE *OutTab);
4401 VOID BssCipherParse(
4402 IN OUT PBSS_ENTRY pBss);
4404 NDIS_STATUS MlmeQueueInit(
4405 IN MLME_QUEUE *Queue);
4407 VOID MlmeQueueDestroy(
4408 IN MLME_QUEUE *Queue);
4410 BOOLEAN MlmeEnqueue(
4411 IN PRTMP_ADAPTER pAd,
4417 BOOLEAN MlmeEnqueueForRecv(
4418 IN PRTMP_ADAPTER pAd,
4420 IN ULONG TimeStampHigh,
4421 IN ULONG TimeStampLow,
4430 BOOLEAN MlmeDequeue(
4431 IN MLME_QUEUE *Queue,
4432 OUT MLME_QUEUE_ELEM **Elem);
4434 VOID MlmeRestartStateMachine(
4435 IN PRTMP_ADAPTER pAd);
4437 BOOLEAN MlmeQueueEmpty(
4438 IN MLME_QUEUE *Queue);
4440 BOOLEAN MlmeQueueFull(
4441 IN MLME_QUEUE *Queue);
4443 BOOLEAN MsgTypeSubst(
4444 IN PRTMP_ADAPTER pAd,
4445 IN PFRAME_802_11 pFrame,
4449 VOID StateMachineInit(
4450 IN STATE_MACHINE *Sm,
4451 IN STATE_MACHINE_FUNC Trans[],
4454 IN STATE_MACHINE_FUNC DefFunc,
4458 VOID StateMachineSetAction(
4459 IN STATE_MACHINE *S,
4462 IN STATE_MACHINE_FUNC F);
4464 VOID StateMachinePerformAction(
4465 IN PRTMP_ADAPTER pAd,
4466 IN STATE_MACHINE *S,
4467 IN MLME_QUEUE_ELEM *Elem);
4470 IN PRTMP_ADAPTER pAd,
4471 IN MLME_QUEUE_ELEM *Elem);
4473 VOID AssocStateMachineInit(
4474 IN PRTMP_ADAPTER pAd,
4475 IN STATE_MACHINE *Sm,
4476 OUT STATE_MACHINE_FUNC Trans[]);
4478 VOID ReassocTimeout(
4479 IN PVOID SystemSpecific1,
4480 IN PVOID FunctionContext,
4481 IN PVOID SystemSpecific2,
4482 IN PVOID SystemSpecific3);
4485 IN PVOID SystemSpecific1,
4486 IN PVOID FunctionContext,
4487 IN PVOID SystemSpecific2,
4488 IN PVOID SystemSpecific3);
4490 VOID DisassocTimeout(
4491 IN PVOID SystemSpecific1,
4492 IN PVOID FunctionContext,
4493 IN PVOID SystemSpecific2,
4494 IN PVOID SystemSpecific3);
4496 //----------------------------------------------
4497 VOID MlmeDisassocReqAction(
4498 IN PRTMP_ADAPTER pAd,
4499 IN MLME_QUEUE_ELEM *Elem);
4501 VOID MlmeAssocReqAction(
4502 IN PRTMP_ADAPTER pAd,
4503 IN MLME_QUEUE_ELEM *Elem);
4505 VOID MlmeReassocReqAction(
4506 IN PRTMP_ADAPTER pAd,
4507 IN MLME_QUEUE_ELEM *Elem);
4509 VOID MlmeDisassocReqAction(
4510 IN PRTMP_ADAPTER pAd,
4511 IN MLME_QUEUE_ELEM *Elem);
4513 VOID PeerAssocRspAction(
4514 IN PRTMP_ADAPTER pAd,
4515 IN MLME_QUEUE_ELEM *Elem);
4517 VOID PeerReassocRspAction(
4518 IN PRTMP_ADAPTER pAd,
4519 IN MLME_QUEUE_ELEM *Elem);
4521 VOID PeerDisassocAction(
4522 IN PRTMP_ADAPTER pAd,
4523 IN MLME_QUEUE_ELEM *Elem);
4525 VOID DisassocTimeoutAction(
4526 IN PRTMP_ADAPTER pAd,
4527 IN MLME_QUEUE_ELEM *Elem);
4529 VOID AssocTimeoutAction(
4530 IN PRTMP_ADAPTER pAd,
4531 IN MLME_QUEUE_ELEM *Elem);
4533 VOID ReassocTimeoutAction(
4534 IN PRTMP_ADAPTER pAd,
4535 IN MLME_QUEUE_ELEM *Elem);
4538 IN PRTMP_ADAPTER pAd,
4541 VOID SwitchBetweenWepAndCkip(
4542 IN PRTMP_ADAPTER pAd);
4544 VOID InvalidStateWhenAssoc(
4545 IN PRTMP_ADAPTER pAd,
4546 IN MLME_QUEUE_ELEM *Elem);
4548 VOID InvalidStateWhenReassoc(
4549 IN PRTMP_ADAPTER pAd,
4550 IN MLME_QUEUE_ELEM *Elem);
4552 VOID InvalidStateWhenDisassociate(
4553 IN PRTMP_ADAPTER pAd,
4554 IN MLME_QUEUE_ELEM *Elem);
4557 VOID MlmeCntlConfirm(
4558 IN PRTMP_ADAPTER pAd,
4564 IN PRTMP_ADAPTER pAd);
4566 VOID ComposeNullFrame(
4567 IN PRTMP_ADAPTER pAd);
4570 IN PRTMP_ADAPTER pAd,
4572 IN USHORT CapabilityInfo,
4575 IN UCHAR SupRateLen,
4577 IN UCHAR ExtRateLen,
4578 IN PEDCA_PARM pEdcaParm,
4579 IN HT_CAPABILITY_IE *pHtCapability,
4580 IN UCHAR HtCapabilityLen,
4581 IN ADD_HT_INFO_IE *pAddHtInfo);
4583 VOID AuthStateMachineInit(
4584 IN PRTMP_ADAPTER pAd,
4585 IN PSTATE_MACHINE sm,
4586 OUT STATE_MACHINE_FUNC Trans[]);
4589 IN PVOID SystemSpecific1,
4590 IN PVOID FunctionContext,
4591 IN PVOID SystemSpecific2,
4592 IN PVOID SystemSpecific3);
4594 VOID MlmeAuthReqAction(
4595 IN PRTMP_ADAPTER pAd,
4596 IN MLME_QUEUE_ELEM *Elem);
4598 VOID PeerAuthRspAtSeq2Action(
4599 IN PRTMP_ADAPTER pAd,
4600 IN MLME_QUEUE_ELEM *Elem);
4602 VOID PeerAuthRspAtSeq4Action(
4603 IN PRTMP_ADAPTER pAd,
4604 IN MLME_QUEUE_ELEM *Elem);
4606 VOID AuthTimeoutAction(
4607 IN PRTMP_ADAPTER pAd,
4608 IN MLME_QUEUE_ELEM *Elem);
4611 IN PRTMP_ADAPTER pAd,
4614 VOID MlmeDeauthReqAction(
4615 IN PRTMP_ADAPTER pAd,
4616 IN MLME_QUEUE_ELEM *Elem);
4618 VOID InvalidStateWhenAuth(
4619 IN PRTMP_ADAPTER pAd,
4620 IN MLME_QUEUE_ELEM *Elem);
4622 //=============================================
4624 VOID AuthRspStateMachineInit(
4625 IN PRTMP_ADAPTER pAd,
4626 IN PSTATE_MACHINE Sm,
4627 IN STATE_MACHINE_FUNC Trans[]);
4629 VOID PeerDeauthAction(
4630 IN PRTMP_ADAPTER pAd,
4631 IN MLME_QUEUE_ELEM *Elem);
4633 VOID PeerAuthSimpleRspGenAndSend(
4634 IN PRTMP_ADAPTER pAd,
4635 IN PHEADER_802_11 pHdr80211,
4642 // Private routines in dls.c
4645 //========================================
4647 VOID SyncStateMachineInit(
4648 IN PRTMP_ADAPTER pAd,
4649 IN STATE_MACHINE *Sm,
4650 OUT STATE_MACHINE_FUNC Trans[]);
4653 IN PVOID SystemSpecific1,
4654 IN PVOID FunctionContext,
4655 IN PVOID SystemSpecific2,
4656 IN PVOID SystemSpecific3);
4659 IN PVOID SystemSpecific1,
4660 IN PVOID FunctionContext,
4661 IN PVOID SystemSpecific2,
4662 IN PVOID SystemSpecific3);
4664 VOID MlmeScanReqAction(
4665 IN PRTMP_ADAPTER pAd,
4666 IN MLME_QUEUE_ELEM *Elem);
4668 VOID InvalidStateWhenScan(
4669 IN PRTMP_ADAPTER pAd,
4670 IN MLME_QUEUE_ELEM *Elem);
4672 VOID InvalidStateWhenJoin(
4673 IN PRTMP_ADAPTER pAd,
4674 IN MLME_QUEUE_ELEM *Elem);
4676 VOID InvalidStateWhenStart(
4677 IN PRTMP_ADAPTER pAd,
4678 IN MLME_QUEUE_ELEM *Elem);
4681 IN PRTMP_ADAPTER pAd,
4682 IN MLME_QUEUE_ELEM *Elem);
4684 VOID EnqueueProbeRequest(
4685 IN PRTMP_ADAPTER pAd);
4687 BOOLEAN ScanRunning(
4688 IN PRTMP_ADAPTER pAd);
4689 //=========================================
4692 IN PRTMP_ADAPTER pAd,
4693 IN STATE_MACHINE *S,
4694 OUT STATE_MACHINE_FUNC Trans[]);
4696 VOID MlmeCntlMachinePerformAction(
4697 IN PRTMP_ADAPTER pAd,
4698 IN STATE_MACHINE *S,
4699 IN MLME_QUEUE_ELEM *Elem);
4702 IN PRTMP_ADAPTER pAd,
4703 IN MLME_QUEUE_ELEM *Elem);
4705 VOID CntlOidScanProc(
4706 IN PRTMP_ADAPTER pAd,
4707 IN MLME_QUEUE_ELEM *Elem);
4709 VOID CntlOidSsidProc(
4710 IN PRTMP_ADAPTER pAd,
4711 IN MLME_QUEUE_ELEM * Elem);
4713 VOID CntlOidRTBssidProc(
4714 IN PRTMP_ADAPTER pAd,
4715 IN MLME_QUEUE_ELEM * Elem);
4717 VOID CntlMlmeRoamingProc(
4718 IN PRTMP_ADAPTER pAd,
4719 IN MLME_QUEUE_ELEM * Elem);
4721 VOID CntlWaitDisassocProc(
4722 IN PRTMP_ADAPTER pAd,
4723 IN MLME_QUEUE_ELEM *Elem);
4725 VOID CntlWaitJoinProc(
4726 IN PRTMP_ADAPTER pAd,
4727 IN MLME_QUEUE_ELEM *Elem);
4729 VOID CntlWaitReassocProc(
4730 IN PRTMP_ADAPTER pAd,
4731 IN MLME_QUEUE_ELEM *Elem);
4733 VOID CntlWaitStartProc(
4734 IN PRTMP_ADAPTER pAd,
4735 IN MLME_QUEUE_ELEM *Elem);
4737 VOID CntlWaitAuthProc(
4738 IN PRTMP_ADAPTER pAd,
4739 IN MLME_QUEUE_ELEM *Elem);
4741 VOID CntlWaitAuthProc2(
4742 IN PRTMP_ADAPTER pAd,
4743 IN MLME_QUEUE_ELEM *Elem);
4745 VOID CntlWaitAssocProc(
4746 IN PRTMP_ADAPTER pAd,
4747 IN MLME_QUEUE_ELEM *Elem);
4750 IN PRTMP_ADAPTER pAd,
4754 IN PRTMP_ADAPTER pAd,
4755 IN BOOLEAN IsReqFromAP);
4757 VOID IterateOnBssTab(
4758 IN PRTMP_ADAPTER pAd);
4760 VOID IterateOnBssTab2(
4761 IN PRTMP_ADAPTER pAd);;
4764 IN PRTMP_ADAPTER pAd,
4765 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4769 IN PRTMP_ADAPTER pAd,
4770 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4772 IN USHORT CapabilityInfo,
4774 IN USHORT ListenIntv);
4777 IN PRTMP_ADAPTER pAd,
4778 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4784 VOID DisassocParmFill(
4785 IN PRTMP_ADAPTER pAd,
4786 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4791 IN PRTMP_ADAPTER pAd,
4792 IN OUT MLME_START_REQ_STRUCT *StartReq,
4797 IN PRTMP_ADAPTER pAd,
4798 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4803 IN PRTMP_ADAPTER pAd);
4805 VOID EnqueueBeaconFrame(
4806 IN PRTMP_ADAPTER pAd);
4808 VOID MlmeJoinReqAction(
4809 IN PRTMP_ADAPTER pAd,
4810 IN MLME_QUEUE_ELEM *Elem);
4812 VOID MlmeScanReqAction(
4813 IN PRTMP_ADAPTER pAd,
4814 IN MLME_QUEUE_ELEM *Elem);
4816 VOID MlmeStartReqAction(
4817 IN PRTMP_ADAPTER pAd,
4818 IN MLME_QUEUE_ELEM *Elem);
4820 VOID ScanTimeoutAction(
4821 IN PRTMP_ADAPTER pAd,
4822 IN MLME_QUEUE_ELEM *Elem);
4824 VOID BeaconTimeoutAtJoinAction(
4825 IN PRTMP_ADAPTER pAd,
4826 IN MLME_QUEUE_ELEM *Elem);
4828 VOID PeerBeaconAtScanAction(
4829 IN PRTMP_ADAPTER pAd,
4830 IN MLME_QUEUE_ELEM *Elem);
4832 VOID PeerBeaconAtJoinAction(
4833 IN PRTMP_ADAPTER pAd,
4834 IN MLME_QUEUE_ELEM *Elem);
4837 IN PRTMP_ADAPTER pAd,
4838 IN MLME_QUEUE_ELEM *Elem);
4840 VOID PeerProbeReqAction(
4841 IN PRTMP_ADAPTER pAd,
4842 IN MLME_QUEUE_ELEM *Elem);
4844 VOID ScanNextChannel(
4845 IN PRTMP_ADAPTER pAd);
4847 ULONG MakeIbssBeacon(
4848 IN PRTMP_ADAPTER pAd);
4850 VOID CCXAdjacentAPReport(
4851 IN PRTMP_ADAPTER pAd);
4853 BOOLEAN MlmeScanReqSanity(
4854 IN PRTMP_ADAPTER pAd,
4860 OUT UCHAR *ScanType);
4862 BOOLEAN PeerBeaconAndProbeRspSanity(
4863 IN PRTMP_ADAPTER pAd,
4866 IN UCHAR MsgChannel,
4870 OUT UCHAR *pSsidLen,
4871 OUT UCHAR *pBssType,
4872 OUT USHORT *pBeaconPeriod,
4873 OUT UCHAR *pChannel,
4874 OUT UCHAR *pNewChannel,
4875 OUT LARGE_INTEGER *pTimestamp,
4876 OUT CF_PARM *pCfParm,
4877 OUT USHORT *pAtimWin,
4878 OUT USHORT *pCapabilityInfo,
4880 OUT UCHAR *pDtimCount,
4881 OUT UCHAR *pDtimPeriod,
4882 OUT UCHAR *pBcastFlag,
4883 OUT UCHAR *pMessageToMe,
4884 OUT UCHAR SupRate[],
4885 OUT UCHAR *pSupRateLen,
4886 OUT UCHAR ExtRate[],
4887 OUT UCHAR *pExtRateLen,
4888 OUT UCHAR *pCkipFlag,
4889 OUT UCHAR *pAironetCellPowerLimit,
4890 OUT PEDCA_PARM pEdcaParm,
4891 OUT PQBSS_LOAD_PARM pQbssLoad,
4892 OUT PQOS_CAPABILITY_PARM pQosCapability,
4893 OUT ULONG *pRalinkIe,
4894 OUT UCHAR *pHtCapabilityLen,
4895 #ifdef CONFIG_STA_SUPPORT
4896 OUT UCHAR *pPreNHtCapabilityLen,
4897 #endif // CONFIG_STA_SUPPORT //
4898 OUT HT_CAPABILITY_IE *pHtCapability,
4899 OUT UCHAR *AddHtInfoLen,
4900 OUT ADD_HT_INFO_IE *AddHtInfo,
4901 OUT UCHAR *NewExtChannel,
4902 OUT USHORT *LengthVIE,
4903 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4905 BOOLEAN PeerAddBAReqActionSanity(
4906 IN PRTMP_ADAPTER pAd,
4911 BOOLEAN PeerAddBARspActionSanity(
4912 IN PRTMP_ADAPTER pAd,
4916 BOOLEAN PeerDelBAActionSanity(
4917 IN PRTMP_ADAPTER pAd,
4922 BOOLEAN MlmeAssocReqSanity(
4923 IN PRTMP_ADAPTER pAd,
4927 OUT USHORT *CapabilityInfo,
4929 OUT USHORT *ListenIntv);
4931 BOOLEAN MlmeAuthReqSanity(
4932 IN PRTMP_ADAPTER pAd,
4939 BOOLEAN MlmeStartReqSanity(
4940 IN PRTMP_ADAPTER pAd,
4944 OUT UCHAR *Ssidlen);
4946 BOOLEAN PeerAuthSanity(
4947 IN PRTMP_ADAPTER pAd,
4954 OUT CHAR ChlgText[]);
4956 BOOLEAN PeerAssocRspSanity(
4957 IN PRTMP_ADAPTER pAd,
4961 OUT USHORT *pCapabilityInfo,
4962 OUT USHORT *pStatus,
4964 OUT UCHAR SupRate[],
4965 OUT UCHAR *pSupRateLen,
4966 OUT UCHAR ExtRate[],
4967 OUT UCHAR *pExtRateLen,
4968 OUT HT_CAPABILITY_IE *pHtCapability,
4969 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4970 OUT UCHAR *pHtCapabilityLen,
4971 OUT UCHAR *pAddHtInfoLen,
4972 OUT UCHAR *pNewExtChannelOffset,
4973 OUT PEDCA_PARM pEdcaParm,
4974 OUT UCHAR *pCkipFlag);
4976 BOOLEAN PeerDisassocSanity(
4977 IN PRTMP_ADAPTER pAd,
4981 OUT USHORT *Reason);
4983 BOOLEAN PeerWpaMessageSanity(
4984 IN PRTMP_ADAPTER pAd,
4985 IN PEAPOL_PACKET pMsg,
4988 IN MAC_TABLE_ENTRY *pEntry);
4990 BOOLEAN PeerDeauthSanity(
4991 IN PRTMP_ADAPTER pAd,
4995 OUT USHORT *Reason);
4997 BOOLEAN PeerProbeReqSanity(
4998 IN PRTMP_ADAPTER pAd,
5003 OUT UCHAR *pSsidLen);
5009 OUT UCHAR *BcastFlag,
5010 OUT UCHAR *DtimCount,
5011 OUT UCHAR *DtimPeriod,
5012 OUT UCHAR *MessageToMe);
5014 UCHAR ChannelSanity(
5015 IN PRTMP_ADAPTER pAd,
5018 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5019 IN PBSS_ENTRY pBss);
5021 BOOLEAN MlmeDelBAReqSanity(
5022 IN PRTMP_ADAPTER pAd,
5026 BOOLEAN MlmeAddBAReqSanity(
5027 IN PRTMP_ADAPTER pAd,
5032 ULONG MakeOutgoingFrame(
5034 OUT ULONG *Length, ...);
5037 IN PRTMP_ADAPTER pAd,
5041 IN PRTMP_ADAPTER pAd);
5043 VOID AsicUpdateAutoFallBackTable(
5044 IN PRTMP_ADAPTER pAd,
5047 VOID MlmePeriodicExec(
5048 IN PVOID SystemSpecific1,
5049 IN PVOID FunctionContext,
5050 IN PVOID SystemSpecific2,
5051 IN PVOID SystemSpecific3);
5054 IN PVOID SystemSpecific1,
5055 IN PVOID FunctionContext,
5056 IN PVOID SystemSpecific2,
5057 IN PVOID SystemSpecific3);
5060 IN PVOID SystemSpecific1,
5061 IN PVOID FunctionContext,
5062 IN PVOID SystemSpecific2,
5063 IN PVOID SystemSpecific3);
5065 VOID STAMlmePeriodicExec(
5069 IN PRTMP_ADAPTER pAd);
5071 VOID MlmeAutoReconnectLastSSID(
5072 IN PRTMP_ADAPTER pAd);
5074 BOOLEAN MlmeValidateSSID(
5078 VOID MlmeCheckForRoaming(
5079 IN PRTMP_ADAPTER pAd,
5082 VOID MlmeCheckForFastRoaming(
5083 IN PRTMP_ADAPTER pAd,
5086 VOID MlmeDynamicTxRateSwitching(
5087 IN PRTMP_ADAPTER pAd);
5090 IN PRTMP_ADAPTER pAd,
5091 IN PMAC_TABLE_ENTRY pEntry,
5092 IN PRTMP_TX_RATE_SWITCH pTxRate);
5094 VOID MlmeSelectTxRateTable(
5095 IN PRTMP_ADAPTER pAd,
5096 IN PMAC_TABLE_ENTRY pEntry,
5098 IN PUCHAR pTableSize,
5099 IN PUCHAR pInitTxRateIdx);
5101 VOID MlmeCalculateChannelQuality(
5102 IN PRTMP_ADAPTER pAd,
5105 VOID MlmeCheckPsmChange(
5106 IN PRTMP_ADAPTER pAd,
5110 IN PRTMP_ADAPTER pAd,
5113 VOID MlmeSetTxPreamble(
5114 IN PRTMP_ADAPTER pAd,
5115 IN USHORT TxPreamble);
5117 VOID UpdateBasicRateBitmap(
5118 IN PRTMP_ADAPTER pAd);
5120 VOID MlmeUpdateTxRates(
5121 IN PRTMP_ADAPTER pAd,
5125 #ifdef DOT11_N_SUPPORT
5126 VOID MlmeUpdateHtTxRates(
5127 IN PRTMP_ADAPTER pAd,
5129 #endif // DOT11_N_SUPPORT //
5131 VOID RTMPCheckRates(
5132 IN PRTMP_ADAPTER pAd,
5133 IN OUT UCHAR SupRate[],
5134 IN OUT UCHAR *SupRateLen);
5136 #ifdef CONFIG_STA_SUPPORT
5137 BOOLEAN RTMPCheckChannel(
5138 IN PRTMP_ADAPTER pAd,
5139 IN UCHAR CentralChannel,
5141 #endif // CONFIG_STA_SUPPORT //
5143 BOOLEAN RTMPCheckHt(
5144 IN PRTMP_ADAPTER pAd,
5146 IN OUT HT_CAPABILITY_IE *pHtCapability,
5147 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5149 VOID StaQuickResponeForRateUpExec(
5150 IN PVOID SystemSpecific1,
5151 IN PVOID FunctionContext,
5152 IN PVOID SystemSpecific2,
5153 IN PVOID SystemSpecific3);
5155 VOID AsicBbpTuning1(
5156 IN PRTMP_ADAPTER pAd);
5158 VOID AsicBbpTuning2(
5159 IN PRTMP_ADAPTER pAd);
5161 VOID RTMPUpdateMlmeRate(
5162 IN PRTMP_ADAPTER pAd);
5165 IN PRTMP_ADAPTER pAd,
5171 IN PRTMP_ADAPTER pAd,
5174 VOID AsicEvaluateRxAnt(
5175 IN PRTMP_ADAPTER pAd);
5177 VOID AsicRxAntEvalTimeout(
5178 IN PVOID SystemSpecific1,
5179 IN PVOID FunctionContext,
5180 IN PVOID SystemSpecific2,
5181 IN PVOID SystemSpecific3);
5183 VOID APSDPeriodicExec(
5184 IN PVOID SystemSpecific1,
5185 IN PVOID FunctionContext,
5186 IN PVOID SystemSpecific2,
5187 IN PVOID SystemSpecific3);
5189 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5190 IN PRTMP_ADAPTER pAd,
5191 IN PMAC_TABLE_ENTRY pEntry);
5193 UCHAR RTMPStaFixedTxMode(
5194 IN PRTMP_ADAPTER pAd,
5195 IN PMAC_TABLE_ENTRY pEntry);
5197 VOID RTMPUpdateLegacyTxSetting(
5198 UCHAR fixed_tx_mode,
5199 PMAC_TABLE_ENTRY pEntry);
5201 BOOLEAN RTMPAutoRateSwitchCheck(
5202 IN PRTMP_ADAPTER pAd);
5204 NDIS_STATUS MlmeInit(
5205 IN PRTMP_ADAPTER pAd);
5208 IN PRTMP_ADAPTER pAd);
5211 IN PRTMP_ADAPTER pAd);
5213 VOID MlmeResetRalinkCounters(
5214 IN PRTMP_ADAPTER pAd);
5216 VOID BuildChannelList(
5217 IN PRTMP_ADAPTER pAd);
5220 IN PRTMP_ADAPTER pAd);
5223 IN PRTMP_ADAPTER pAd,
5226 VOID ChangeToCellPowerLimit(
5227 IN PRTMP_ADAPTER pAd,
5228 IN UCHAR AironetCellPowerLimit);
5231 IN PRTMP_ADAPTER pAd,
5235 IN PRTMP_ADAPTER pAd,
5239 IN PRTMP_ADAPTER pAd);
5242 IN PRTMP_ADAPTER pAd,
5247 IN PRTMP_ADAPTER pAd);
5250 IN PRTMP_ADAPTER pAd);
5253 IN PRTMP_ADAPTER pAd);
5255 USHORT RTMP_EEPROM_READ16(
5256 IN PRTMP_ADAPTER pAd,
5259 VOID RTMP_EEPROM_WRITE16(
5260 IN PRTMP_ADAPTER pAd,
5265 // Prototypes of function definition in rtmp_tkip.c
5267 VOID RTMPInitTkipEngine(
5268 IN PRTMP_ADAPTER pAd,
5277 VOID RTMPInitMICEngine(
5278 IN PRTMP_ADAPTER pAd,
5282 IN UCHAR UserPriority,
5285 BOOLEAN RTMPTkipCompareMICValue(
5286 IN PRTMP_ADAPTER pAd,
5291 IN UCHAR UserPriority,
5294 VOID RTMPCalculateMICValue(
5295 IN PRTMP_ADAPTER pAd,
5296 IN PNDIS_PACKET pPacket,
5298 IN PCIPHER_KEY pKey,
5301 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5302 IN PRTMP_ADAPTER pAd,
5310 VOID RTMPTkipAppendByte(
5311 IN PTKIP_KEY_INFO pTkip,
5314 VOID RTMPTkipAppend(
5315 IN PTKIP_KEY_INFO pTkip,
5319 VOID RTMPTkipGetMIC(
5320 IN PTKIP_KEY_INFO pTkip);
5322 BOOLEAN RTMPSoftDecryptTKIP(
5323 IN PRTMP_ADAPTER pAd,
5325 IN ULONG DataByteCnt,
5326 IN UCHAR UserPriority,
5327 IN PCIPHER_KEY pWpaKey);
5329 BOOLEAN RTMPSoftDecryptAES(
5330 IN PRTMP_ADAPTER pAd,
5332 IN ULONG DataByteCnt,
5333 IN PCIPHER_KEY pWpaKey);
5336 // Prototypes of function definition in cmm_info.c
5338 NDIS_STATUS RTMPWPARemoveKeyProc(
5339 IN PRTMP_ADAPTER pAd,
5342 VOID RTMPWPARemoveAllKeys(
5343 IN PRTMP_ADAPTER pAd);
5345 BOOLEAN RTMPCheckStrPrintAble(
5349 VOID RTMPSetPhyMode(
5350 IN PRTMP_ADAPTER pAd,
5353 VOID RTMPUpdateHTIE(
5354 IN RT_HT_CAPABILITY *pRtHt,
5356 OUT HT_CAPABILITY_IE *pHtCapability,
5357 OUT ADD_HT_INFO_IE *pAddHtInfo);
5359 VOID RTMPAddWcidAttributeEntry(
5360 IN PRTMP_ADAPTER pAd,
5364 IN MAC_TABLE_ENTRY *pEntry);
5366 CHAR *GetEncryptType(
5372 VOID RTMPIoctlGetSiteSurvey(
5373 IN PRTMP_ADAPTER pAdapter,
5374 IN struct iwreq *wrq);
5376 VOID RTMPIoctlGetMacTable(
5377 IN PRTMP_ADAPTER pAd,
5378 IN struct iwreq *wrq);
5380 VOID RTMPIndicateWPA2Status(
5381 IN PRTMP_ADAPTER pAdapter);
5383 VOID RTMPOPModeSwitching(
5384 IN PRTMP_ADAPTER pAd);
5386 #ifdef CONFIG_STA_SUPPORT
5387 VOID RTMPAddBSSIDCipher(
5388 IN PRTMP_ADAPTER pAd,
5390 IN PNDIS_802_11_KEY pKey,
5391 IN UCHAR CipherAlg);
5392 #endif // CONFIG_STA_SUPPORT //
5394 #ifdef DOT11_N_SUPPORT
5396 IN PRTMP_ADAPTER pAd,
5397 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5399 VOID RTMPSetIndividualHT(
5400 IN PRTMP_ADAPTER pAd,
5402 #endif // DOT11_N_SUPPORT //
5404 VOID RTMPSendWirelessEvent(
5405 IN PRTMP_ADAPTER pAd,
5406 IN USHORT Event_flag,
5411 VOID NICUpdateCntlCounters(
5412 IN PRTMP_ADAPTER pAd,
5413 IN PHEADER_802_11 pHeader,
5415 IN PRXWI_STRUC pRxWI);
5417 // prototype in wpa.c
5419 BOOLEAN WpaMsgTypeSubst(
5423 VOID WpaPskStateMachineInit(
5424 IN PRTMP_ADAPTER pAd,
5425 IN STATE_MACHINE *S,
5426 OUT STATE_MACHINE_FUNC Trans[]);
5428 VOID WpaEAPOLKeyAction(
5429 IN PRTMP_ADAPTER pAd,
5430 IN MLME_QUEUE_ELEM *Elem);
5432 VOID WpaPairMsg1Action(
5433 IN PRTMP_ADAPTER pAd,
5434 IN MLME_QUEUE_ELEM *Elem);
5436 VOID WpaPairMsg3Action(
5437 IN PRTMP_ADAPTER pAd,
5438 IN MLME_QUEUE_ELEM *Elem);
5440 VOID WpaGroupMsg1Action(
5441 IN PRTMP_ADAPTER pAd,
5442 IN MLME_QUEUE_ELEM *Elem);
5444 VOID WpaMacHeaderInit(
5445 IN PRTMP_ADAPTER pAd,
5446 IN OUT PHEADER_802_11 pHdr80211,
5450 VOID Wpa2PairMsg1Action(
5451 IN PRTMP_ADAPTER pAd,
5452 IN MLME_QUEUE_ELEM *Elem);
5454 VOID Wpa2PairMsg3Action(
5455 IN PRTMP_ADAPTER pAd,
5456 IN MLME_QUEUE_ELEM *Elem);
5458 BOOLEAN ParseKeyData(
5459 IN PRTMP_ADAPTER pAd,
5461 IN UCHAR KeyDataLen,
5462 IN UCHAR bPairewise);
5464 VOID RTMPToWirelessSta(
5465 IN PRTMP_ADAPTER pAd,
5466 IN PUCHAR pHeader802_3,
5470 IN BOOLEAN is4wayFrame);
5498 IN PRTMP_ADAPTER pAd,
5508 IN PRTMP_ADAPTER pAd,
5513 // prototype in aironet.c
5515 VOID AironetStateMachineInit(
5516 IN PRTMP_ADAPTER pAd,
5517 IN STATE_MACHINE *S,
5518 OUT STATE_MACHINE_FUNC Trans[]);
5520 VOID AironetMsgAction(
5521 IN PRTMP_ADAPTER pAd,
5522 IN MLME_QUEUE_ELEM *Elem);
5524 VOID AironetRequestAction(
5525 IN PRTMP_ADAPTER pAd,
5526 IN MLME_QUEUE_ELEM *Elem);
5528 VOID ChannelLoadRequestAction(
5529 IN PRTMP_ADAPTER pAd,
5532 VOID NoiseHistRequestAction(
5533 IN PRTMP_ADAPTER pAd,
5536 VOID BeaconRequestAction(
5537 IN PRTMP_ADAPTER pAd,
5540 VOID AironetReportAction(
5541 IN PRTMP_ADAPTER pAd,
5542 IN MLME_QUEUE_ELEM *Elem);
5544 VOID ChannelLoadReportAction(
5545 IN PRTMP_ADAPTER pAd,
5548 VOID NoiseHistReportAction(
5549 IN PRTMP_ADAPTER pAd,
5552 VOID AironetFinalReportAction(
5553 IN PRTMP_ADAPTER pAd);
5555 VOID BeaconReportAction(
5556 IN PRTMP_ADAPTER pAd,
5559 VOID AironetAddBeaconReport(
5560 IN PRTMP_ADAPTER pAd,
5562 IN PMLME_QUEUE_ELEM pElem);
5564 VOID AironetCreateBeaconReportFromBssTable(
5565 IN PRTMP_ADAPTER pAd);
5567 VOID DBGPRINT_TX_RING(
5568 IN PRTMP_ADAPTER pAd,
5571 VOID DBGPRINT_RX_RING(
5572 IN PRTMP_ADAPTER pAd);
5575 IN PRTMP_ADAPTER pAd,
5577 IN UCHAR RssiNumber);
5580 #ifdef DOT11N_DRAFT3
5581 VOID BuildEffectedChannelList(
5582 IN PRTMP_ADAPTER pAd);
5583 #endif // DOT11N_DRAFT3 //
5586 VOID APAsicEvaluateRxAnt(
5587 IN PRTMP_ADAPTER pAd);
5590 VOID APAsicRxAntEvalTimeout(
5591 IN PRTMP_ADAPTER pAd);
5594 // function prototype in cmm_wpa.c
5596 BOOLEAN RTMPCheckWPAframe(
5597 IN PRTMP_ADAPTER pAd,
5598 IN PMAC_TABLE_ENTRY pEntry,
5600 IN ULONG DataByteCount,
5601 IN UCHAR FromWhichBSSID);
5603 VOID AES_GTK_KEY_UNWRAP(
5605 OUT UCHAR *plaintext,
5607 IN UCHAR *ciphertext);
5609 BOOLEAN RTMPCheckRSNIE(
5610 IN PRTMP_ADAPTER pAd,
5613 IN MAC_TABLE_ENTRY *pEntry,
5616 BOOLEAN RTMPParseEapolKeyData(
5617 IN PRTMP_ADAPTER pAd,
5619 IN UCHAR KeyDataLen,
5620 IN UCHAR GroupKeyIndex,
5623 IN MAC_TABLE_ENTRY *pEntry);
5625 VOID ConstructEapolMsg(
5626 IN PRTMP_ADAPTER pAd,
5627 IN UCHAR PeerAuthMode,
5628 IN UCHAR PeerWepStatus,
5629 IN UCHAR MyGroupKeyWepStatus,
5631 IN UCHAR DefaultKeyIdx,
5632 IN UCHAR *ReplayCounter,
5639 OUT PEAPOL_PACKET pMsg);
5642 IN PRTMP_ADAPTER pAd,
5643 IN UCHAR PeerWepStatus,
5645 OUT PEAPOL_PACKET pMsg);
5647 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5648 IN PRTMP_ADAPTER pAd,
5650 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5651 IN PCIPHER_KEY pShard_key);
5653 VOID ConstructEapolKeyData(
5654 IN PRTMP_ADAPTER pAd,
5655 IN UCHAR PeerAuthMode,
5656 IN UCHAR PeerWepStatus,
5657 IN UCHAR GroupKeyWepStatus,
5659 IN UCHAR DefaultKeyIdx,
5660 IN BOOLEAN bWPA2Capable,
5665 OUT PEAPOL_PACKET pMsg);
5668 IN PRTMP_ADAPTER pAd,
5674 // function prototype in ap_wpa.c
5677 BOOLEAN APWpaMsgTypeSubst(
5681 MAC_TABLE_ENTRY *PACInquiry(
5682 IN PRTMP_ADAPTER pAd,
5685 BOOLEAN RTMPCheckMcast(
5686 IN PRTMP_ADAPTER pAd,
5687 IN PEID_STRUCT eid_ptr,
5688 IN MAC_TABLE_ENTRY *pEntry);
5690 BOOLEAN RTMPCheckUcast(
5691 IN PRTMP_ADAPTER pAd,
5692 IN PEID_STRUCT eid_ptr,
5693 IN MAC_TABLE_ENTRY *pEntry);
5695 BOOLEAN RTMPCheckAUTH(
5696 IN PRTMP_ADAPTER pAd,
5697 IN PEID_STRUCT eid_ptr,
5698 IN MAC_TABLE_ENTRY *pEntry);
5700 VOID WPAStart4WayHS(
5701 IN PRTMP_ADAPTER pAd,
5702 IN MAC_TABLE_ENTRY *pEntry,
5703 IN ULONG TimeInterval);
5705 VOID WPAStart2WayGroupHS(
5706 IN PRTMP_ADAPTER pAd,
5707 IN MAC_TABLE_ENTRY *pEntry);
5709 VOID APWpaEAPPacketAction(
5710 IN PRTMP_ADAPTER pAd,
5711 IN MLME_QUEUE_ELEM *Elem);
5713 VOID APWpaEAPOLStartAction(
5714 IN PRTMP_ADAPTER pAd,
5715 IN MLME_QUEUE_ELEM *Elem);
5717 VOID APWpaEAPOLLogoffAction(
5718 IN PRTMP_ADAPTER pAd,
5719 IN MLME_QUEUE_ELEM *Elem);
5721 VOID APWpaEAPOLKeyAction(
5722 IN PRTMP_ADAPTER pAd,
5723 IN MLME_QUEUE_ELEM *Elem);
5725 VOID APWpaEAPOLASFAlertAction(
5726 IN PRTMP_ADAPTER pAd,
5727 IN MLME_QUEUE_ELEM *Elem);
5729 VOID HandleCounterMeasure(
5730 IN PRTMP_ADAPTER pAd,
5731 IN MAC_TABLE_ENTRY *pEntry);
5733 VOID PeerPairMsg2Action(
5734 IN PRTMP_ADAPTER pAd,
5735 IN MAC_TABLE_ENTRY *pEntry,
5736 IN MLME_QUEUE_ELEM *Elem);
5738 VOID PeerPairMsg4Action(
5739 IN PRTMP_ADAPTER pAd,
5740 IN MAC_TABLE_ENTRY *pEntry,
5741 IN MLME_QUEUE_ELEM *Elem);
5744 IN PVOID SystemSpecific1,
5745 IN PVOID FunctionContext,
5746 IN PVOID SystemSpecific2,
5747 IN PVOID SystemSpecific3);
5750 IN PVOID SystemSpecific1,
5751 IN PVOID FunctionContext,
5752 IN PVOID SystemSpecific2,
5753 IN PVOID SystemSpecific3);
5755 VOID EnqueueStartForPSKExec(
5756 IN PVOID SystemSpecific1,
5757 IN PVOID FunctionContext,
5758 IN PVOID SystemSpecific2,
5759 IN PVOID SystemSpecific3);
5761 VOID RTMPHandleSTAKey(
5762 IN PRTMP_ADAPTER pAdapter,
5763 IN MAC_TABLE_ENTRY *pEntry,
5764 IN MLME_QUEUE_ELEM *Elem);
5766 VOID PeerGroupMsg2Action(
5767 IN PRTMP_ADAPTER pAd,
5768 IN PMAC_TABLE_ENTRY pEntry,
5772 VOID PairDisAssocAction(
5773 IN PRTMP_ADAPTER pAd,
5774 IN PMAC_TABLE_ENTRY pEntry,
5777 VOID MlmeDeAuthAction(
5778 IN PRTMP_ADAPTER pAd,
5779 IN PMAC_TABLE_ENTRY pEntry,
5782 VOID GREKEYPeriodicExec(
5783 IN PVOID SystemSpecific1,
5784 IN PVOID FunctionContext,
5785 IN PVOID SystemSpecific2,
5786 IN PVOID SystemSpecific3);
5808 IN PRTMP_ADAPTER pAd,
5811 VOID AES_GTK_KEY_WRAP(
5813 IN UCHAR *plaintext,
5815 OUT UCHAR *ciphertext);
5818 IN PRTMP_ADAPTER pAdapter,
5822 VOID APToWirelessSta(
5823 IN PRTMP_ADAPTER pAd,
5824 IN MAC_TABLE_ENTRY *pEntry,
5825 IN PUCHAR pHeader802_3,
5829 IN BOOLEAN bClearFrame);
5831 VOID RTMPAddPMKIDCache(
5832 IN PRTMP_ADAPTER pAd,
5838 INT RTMPSearchPMKIDCache(
5839 IN PRTMP_ADAPTER pAd,
5843 VOID RTMPDeletePMKIDCache(
5844 IN PRTMP_ADAPTER pAd,
5848 VOID RTMPMaintainPMKIDCache(
5849 IN PRTMP_ADAPTER pAd);
5851 VOID RTMPSendTriggerFrame(
5852 IN PRTMP_ADAPTER pAd,
5856 IN BOOLEAN bQosNull);
5859 VOID RTMPFilterCalibration(
5860 IN PRTMP_ADAPTER pAd);
5864 //typedef void (*TIMER_FUNCTION)(unsigned long);
5868 VOID RTMP_SetPeriodicTimer(
5869 IN NDIS_MINIPORT_TIMER *pTimer,
5870 IN unsigned long timeout);
5872 VOID RTMP_OS_Init_Timer(
5873 IN PRTMP_ADAPTER pAd,
5874 IN NDIS_MINIPORT_TIMER *pTimer,
5875 IN TIMER_FUNCTION function,
5878 VOID RTMP_OS_Add_Timer(
5879 IN NDIS_MINIPORT_TIMER *pTimer,
5880 IN unsigned long timeout);
5882 VOID RTMP_OS_Mod_Timer(
5883 IN NDIS_MINIPORT_TIMER *pTimer,
5884 IN unsigned long timeout);
5887 VOID RTMP_OS_Del_Timer(
5888 IN NDIS_MINIPORT_TIMER *pTimer,
5889 OUT BOOLEAN *pCancelled);
5892 VOID RTMP_OS_Release_Packet(
5893 IN PRTMP_ADAPTER pAd,
5894 IN PQUEUE_ENTRY pEntry);
5899 NDIS_STATUS os_alloc_mem(
5900 IN PRTMP_ADAPTER pAd,
5904 NDIS_STATUS os_free_mem(
5905 IN PRTMP_ADAPTER pAd,
5909 void RTMP_AllocateSharedMemory(
5910 IN PRTMP_ADAPTER pAd,
5913 OUT PVOID *VirtualAddress,
5914 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5916 VOID RTMPFreeTxRxRingMemory(
5917 IN PRTMP_ADAPTER pAd);
5919 NDIS_STATUS AdapterBlockAllocateMemory(
5923 void RTMP_AllocateTxDescMemory(
5924 IN PRTMP_ADAPTER pAd,
5928 OUT PVOID *VirtualAddress,
5929 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5931 void RTMP_AllocateFirstTxBuffer(
5932 IN PRTMP_ADAPTER pAd,
5936 OUT PVOID *VirtualAddress,
5937 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5939 void RTMP_AllocateMgmtDescMemory(
5940 IN PRTMP_ADAPTER pAd,
5943 OUT PVOID *VirtualAddress,
5944 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5946 void RTMP_AllocateRxDescMemory(
5947 IN PRTMP_ADAPTER pAd,
5950 OUT PVOID *VirtualAddress,
5951 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5953 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5954 IN PRTMP_ADAPTER pAd,
5957 OUT PVOID *VirtualAddress,
5958 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5960 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5961 IN PRTMP_ADAPTER pAd,
5964 OUT PVOID *VirtualAddress);
5966 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5967 IN PRTMP_ADAPTER pAd,
5970 void RTMP_QueryPacketInfo(
5971 IN PNDIS_PACKET pPacket,
5972 OUT PACKET_INFO *pPacketInfo,
5973 OUT PUCHAR *pSrcBufVA,
5974 OUT UINT *pSrcBufLen);
5976 void RTMP_QueryNextPacketInfo(
5977 IN PNDIS_PACKET *ppPacket,
5978 OUT PACKET_INFO *pPacketInfo,
5979 OUT PUCHAR *pSrcBufVA,
5980 OUT UINT *pSrcBufLen);
5983 BOOLEAN RTMP_FillTxBlkInfo(
5984 IN RTMP_ADAPTER *pAd,
5988 PRTMP_SCATTER_GATHER_LIST
5989 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5992 void announce_802_3_packet(
5993 IN PRTMP_ADAPTER pAd,
5994 IN PNDIS_PACKET pPacket);
5997 UINT BA_Reorder_AMSDU_Annnounce(
5998 IN PRTMP_ADAPTER pAd,
5999 IN PNDIS_PACKET pPacket);
6002 UINT Handle_AMSDU_Packet(
6003 IN PRTMP_ADAPTER pAd,
6006 IN UCHAR FromWhichBSSID);
6009 void convert_802_11_to_802_3_packet(
6010 IN PRTMP_ADAPTER pAd,
6011 IN PNDIS_PACKET pPacket,
6015 IN UCHAR FromWhichBSSID);
6018 PNET_DEV get_netdev_from_bssid(
6019 IN PRTMP_ADAPTER pAd,
6020 IN UCHAR FromWhichBSSID);
6023 PNDIS_PACKET duplicate_pkt(
6024 IN PRTMP_ADAPTER pAd,
6025 IN PUCHAR pHeader802_3,
6029 IN UCHAR FromWhichBSSID);
6032 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6033 IN PRTMP_ADAPTER pAd,
6034 IN PNDIS_PACKET pOldPkt);
6036 PNDIS_PACKET duplicate_pkt_with_VLAN(
6037 IN PRTMP_ADAPTER pAd,
6038 IN PUCHAR pHeader802_3,
6042 IN UCHAR FromWhichBSSID);
6044 PNDIS_PACKET duplicate_pkt_with_WPI(
6045 IN PRTMP_ADAPTER pAd,
6046 IN PNDIS_PACKET pPacket,
6047 IN UINT32 ext_head_len,
6048 IN UINT32 ext_tail_len);
6050 UCHAR VLAN_8023_Header_Copy(
6051 IN PRTMP_ADAPTER pAd,
6052 IN PUCHAR pHeader802_3,
6055 IN UCHAR FromWhichBSSID);
6057 #ifdef DOT11_N_SUPPORT
6058 void ba_flush_reordering_timeout_mpdus(
6059 IN PRTMP_ADAPTER pAd,
6060 IN PBA_REC_ENTRY pBAEntry,
6064 VOID BAOriSessionSetUp(
6065 IN PRTMP_ADAPTER pAd,
6066 IN MAC_TABLE_ENTRY *pEntry,
6070 IN BOOLEAN isForced);
6072 VOID BASessionTearDownALL(
6073 IN OUT PRTMP_ADAPTER pAd,
6075 #endif // DOT11_N_SUPPORT //
6077 BOOLEAN OS_Need_Clone_Packet(void);
6080 VOID build_tx_packet(
6081 IN PRTMP_ADAPTER pAd,
6082 IN PNDIS_PACKET pPacket,
6087 VOID BAOriSessionTearDown(
6088 IN OUT PRTMP_ADAPTER pAd,
6091 IN BOOLEAN bPassive,
6092 IN BOOLEAN bForceSend);
6094 VOID BARecSessionTearDown(
6095 IN OUT PRTMP_ADAPTER pAd,
6098 IN BOOLEAN bPassive);
6100 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6101 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6103 ULONG AutoChBssInsertEntry(
6104 IN PRTMP_ADAPTER pAd,
6111 void AutoChBssTableInit(
6112 IN PRTMP_ADAPTER pAd);
6114 void ChannelInfoInit(
6115 IN PRTMP_ADAPTER pAd);
6117 void AutoChBssTableDestroy(
6118 IN PRTMP_ADAPTER pAd);
6120 void ChannelInfoDestroy(
6121 IN PRTMP_ADAPTER pAd);
6123 UCHAR New_ApAutoSelectChannel(
6124 IN PRTMP_ADAPTER pAd);
6126 BOOLEAN rtstrmactohex(
6130 BOOLEAN rtstrcasecmp(
6134 char *rtstrstruncasecmp(
6140 IN const char * s2);
6144 IN const char * ct);
6148 unsigned int *addr);
6150 ////////// common ioctl functions //////////
6151 INT Set_DriverVersion_Proc(
6152 IN PRTMP_ADAPTER pAd,
6155 INT Set_CountryRegion_Proc(
6156 IN PRTMP_ADAPTER pAd,
6159 INT Set_CountryRegionABand_Proc(
6160 IN PRTMP_ADAPTER pAd,
6163 INT Set_WirelessMode_Proc(
6164 IN PRTMP_ADAPTER pAd,
6167 INT Set_Channel_Proc(
6168 IN PRTMP_ADAPTER pAd,
6171 INT Set_ShortSlot_Proc(
6172 IN PRTMP_ADAPTER pAd,
6175 INT Set_TxPower_Proc(
6176 IN PRTMP_ADAPTER pAd,
6179 INT Set_BGProtection_Proc(
6180 IN PRTMP_ADAPTER pAd,
6183 INT Set_TxPreamble_Proc(
6184 IN PRTMP_ADAPTER pAd,
6187 INT Set_RTSThreshold_Proc(
6188 IN PRTMP_ADAPTER pAd,
6191 INT Set_FragThreshold_Proc(
6192 IN PRTMP_ADAPTER pAd,
6195 INT Set_TxBurst_Proc(
6196 IN PRTMP_ADAPTER pAd,
6199 #ifdef AGGREGATION_SUPPORT
6200 INT Set_PktAggregate_Proc(
6201 IN PRTMP_ADAPTER pAd,
6205 INT Set_IEEE80211H_Proc(
6206 IN PRTMP_ADAPTER pAd,
6211 IN PRTMP_ADAPTER pAd,
6215 INT Show_DescInfo_Proc(
6216 IN PRTMP_ADAPTER pAd,
6219 INT Set_ResetStatCounter_Proc(
6220 IN PRTMP_ADAPTER pAd,
6223 #ifdef DOT11_N_SUPPORT
6224 INT Set_BASetup_Proc(
6225 IN PRTMP_ADAPTER pAd,
6228 INT Set_BADecline_Proc(
6229 IN PRTMP_ADAPTER pAd,
6232 INT Set_BAOriTearDown_Proc(
6233 IN PRTMP_ADAPTER pAd,
6236 INT Set_BARecTearDown_Proc(
6237 IN PRTMP_ADAPTER pAd,
6241 IN PRTMP_ADAPTER pAd,
6245 IN PRTMP_ADAPTER pAd,
6249 IN PRTMP_ADAPTER pAd,
6252 INT Set_HtOpMode_Proc(
6253 IN PRTMP_ADAPTER pAd,
6256 INT Set_HtStbc_Proc(
6257 IN PRTMP_ADAPTER pAd,
6261 IN PRTMP_ADAPTER pAd,
6264 INT Set_HtExtcha_Proc(
6265 IN PRTMP_ADAPTER pAd,
6268 INT Set_HtMpduDensity_Proc(
6269 IN PRTMP_ADAPTER pAd,
6272 INT Set_HtBaWinSize_Proc(
6273 IN PRTMP_ADAPTER pAd,
6277 IN PRTMP_ADAPTER pAd,
6280 INT Set_HtLinkAdapt_Proc(
6281 IN PRTMP_ADAPTER pAd,
6284 INT Set_HtAmsdu_Proc(
6285 IN PRTMP_ADAPTER pAd,
6288 INT Set_HtAutoBa_Proc(
6289 IN PRTMP_ADAPTER pAd,
6292 INT Set_HtProtect_Proc(
6293 IN PRTMP_ADAPTER pAd,
6296 INT Set_HtMimoPs_Proc(
6297 IN PRTMP_ADAPTER pAd,
6301 INT Set_ForceShortGI_Proc(
6302 IN PRTMP_ADAPTER pAd,
6305 INT Set_ForceGF_Proc(
6306 IN PRTMP_ADAPTER pAd,
6310 IN PRTMP_ADAPTER pAd);
6312 INT Set_SendPSMPAction_Proc(
6313 IN PRTMP_ADAPTER pAd,
6316 INT Set_HtMIMOPSmode_Proc(
6317 IN PRTMP_ADAPTER pAd,
6321 INT Set_HtTxBASize_Proc(
6322 IN PRTMP_ADAPTER pAd,
6324 #endif // DOT11_N_SUPPORT //
6328 #ifdef CONFIG_STA_SUPPORT
6330 VOID RTMPSendDLSTearDownFrame(
6331 IN PRTMP_ADAPTER pAd,
6334 #ifdef DOT11_N_SUPPORT
6337 IN PRTMP_ADAPTER pAd,
6338 OUT PQUERYBA_TABLE pBAT);
6339 #endif // DOT11_N_SUPPORT //
6341 #ifdef WPA_SUPPLICANT_SUPPORT
6342 INT WpaCheckEapCode(
6343 IN PRTMP_ADAPTER pAd,
6348 VOID WpaSendMicFailureToWpaSupplicant(
6349 IN PRTMP_ADAPTER pAd,
6350 IN BOOLEAN bUnicast);
6352 VOID SendAssocIEsToWpaSupplicant(
6353 IN PRTMP_ADAPTER pAd);
6354 #endif // WPA_SUPPLICANT_SUPPORT //
6356 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6357 int wext_notify_event_assoc(
6358 IN RTMP_ADAPTER *pAd);
6359 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6361 #endif // CONFIG_STA_SUPPORT //
6365 #ifdef DOT11_N_SUPPORT
6366 VOID Handle_BSS_Width_Trigger_Events(
6367 IN PRTMP_ADAPTER pAd);
6369 void build_ext_channel_switch_ie(
6370 IN PRTMP_ADAPTER pAd,
6371 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6372 #endif // DOT11_N_SUPPORT //
6375 BOOLEAN APRxDoneInterruptHandle(
6376 IN PRTMP_ADAPTER pAd);
6378 BOOLEAN STARxDoneInterruptHandle(
6379 IN PRTMP_ADAPTER pAd,
6382 #ifdef DOT11_N_SUPPORT
6383 // AMPDU packet indication
6384 VOID Indicate_AMPDU_Packet(
6385 IN PRTMP_ADAPTER pAd,
6387 IN UCHAR FromWhichBSSID);
6389 // AMSDU packet indication
6390 VOID Indicate_AMSDU_Packet(
6391 IN PRTMP_ADAPTER pAd,
6393 IN UCHAR FromWhichBSSID);
6394 #endif // DOT11_N_SUPPORT //
6396 // Normal legacy Rx packet indication
6397 VOID Indicate_Legacy_Packet(
6398 IN PRTMP_ADAPTER pAd,
6400 IN UCHAR FromWhichBSSID);
6402 VOID Indicate_EAPOL_Packet(
6403 IN PRTMP_ADAPTER pAd,
6405 IN UCHAR FromWhichBSSID);
6407 void update_os_packet_info(
6408 IN PRTMP_ADAPTER pAd,
6410 IN UCHAR FromWhichBSSID);
6412 void wlan_802_11_to_802_3_packet(
6413 IN PRTMP_ADAPTER pAd,
6415 IN PUCHAR pHeader802_3,
6416 IN UCHAR FromWhichBSSID);
6418 UINT deaggregate_AMSDU_announce(
6419 IN PRTMP_ADAPTER pAd,
6420 PNDIS_PACKET pPacket,
6425 #ifdef CONFIG_STA_SUPPORT
6426 // remove LLC and get 802_3 Header
6427 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6429 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6431 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6433 _pDA = _pRxBlk->pHeader->Addr3; \
6434 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6438 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6440 _pDA = _pRxBlk->pHeader->Addr1; \
6441 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6442 _pSA = _pRxBlk->pHeader->Addr2; \
6444 _pSA = _pRxBlk->pHeader->Addr3; \
6448 _pDA = _pRxBlk->pHeader->Addr1; \
6449 _pSA = _pRxBlk->pHeader->Addr2; \
6453 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6454 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6456 #endif // CONFIG_STA_SUPPORT //
6459 BOOLEAN APFowardWirelessStaToWirelessSta(
6460 IN PRTMP_ADAPTER pAd,
6461 IN PNDIS_PACKET pPacket,
6462 IN ULONG FromWhichBSSID);
6464 VOID Announce_or_Forward_802_3_Packet(
6465 IN PRTMP_ADAPTER pAd,
6466 IN PNDIS_PACKET pPacket,
6467 IN UCHAR FromWhichBSSID);
6469 VOID Sta_Announce_or_Forward_802_3_Packet(
6470 IN PRTMP_ADAPTER pAd,
6471 IN PNDIS_PACKET pPacket,
6472 IN UCHAR FromWhichBSSID);
6475 #ifdef CONFIG_STA_SUPPORT
6476 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6477 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6478 //announce_802_3_packet(_pAd, _pPacket);
6479 #endif // CONFIG_STA_SUPPORT //
6482 PNDIS_PACKET DuplicatePacket(
6483 IN PRTMP_ADAPTER pAd,
6484 IN PNDIS_PACKET pPacket,
6485 IN UCHAR FromWhichBSSID);
6488 PNDIS_PACKET ClonePacket(
6489 IN PRTMP_ADAPTER pAd,
6490 IN PNDIS_PACKET pPacket,
6495 // Normal, AMPDU or AMSDU
6496 VOID CmmRxnonRalinkFrameIndicate(
6497 IN PRTMP_ADAPTER pAd,
6499 IN UCHAR FromWhichBSSID);
6501 VOID CmmRxRalinkFrameIndicate(
6502 IN PRTMP_ADAPTER pAd,
6503 IN MAC_TABLE_ENTRY *pEntry,
6505 IN UCHAR FromWhichBSSID);
6507 VOID Update_Rssi_Sample(
6508 IN PRTMP_ADAPTER pAd,
6509 IN RSSI_SAMPLE *pRssi,
6510 IN PRXWI_STRUC pRxWI);
6512 PNDIS_PACKET GetPacketFromRxRing(
6513 IN PRTMP_ADAPTER pAd,
6514 OUT PRT28XX_RXD_STRUC pSaveRxD,
6515 OUT BOOLEAN *pbReschedule,
6516 IN OUT UINT32 *pRxPending);
6518 PNDIS_PACKET RTMPDeFragmentDataFrame(
6519 IN PRTMP_ADAPTER pAd,
6522 ////////////////////////////////////////
6530 typedef struct _DefaultKeyIdxValue
6534 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6538 #ifdef CONFIG_STA_SUPPORT
6540 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6541 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6542 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6543 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6544 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6545 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6546 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6547 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6548 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6549 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6550 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6553 P80211ENUM_msgitem_status_no_value = 0x00
6556 P80211ENUM_truth_false = 0x00,
6557 P80211ENUM_truth_true = 0x01
6560 /* Definition from madwifi */
6566 } p80211item_uint32_t;
6571 #define WLAN_DEVNAMELEN_MAX 16
6572 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6573 p80211item_uint32_t hosttime;
6574 p80211item_uint32_t mactime;
6575 p80211item_uint32_t channel;
6576 p80211item_uint32_t rssi;
6577 p80211item_uint32_t sq;
6578 p80211item_uint32_t signal;
6579 p80211item_uint32_t noise;
6580 p80211item_uint32_t rate;
6581 p80211item_uint32_t istx;
6582 p80211item_uint32_t frmlen;
6583 } wlan_ng_prism2_header;
6585 /* The radio capture header precedes the 802.11 header. */
6586 typedef struct PACKED _ieee80211_radiotap_header {
6587 UINT8 it_version; /* Version 0. Only increases
6588 * for drastic changes,
6589 * introduction of compatible
6590 * new fields does not count.
6593 UINT16 it_len; /* length of the whole
6594 * header in bytes, including
6595 * it_version, it_pad,
6596 * it_len, and data fields.
6598 UINT32 it_present; /* A bitmap telling which
6599 * fields are present. Set bit 31
6600 * (0x80000000) to extend the
6601 * bitmap by another 32 bits.
6602 * Additional extensions are made
6603 * by setting bit 31.
6605 }ieee80211_radiotap_header ;
6607 enum ieee80211_radiotap_type {
6608 IEEE80211_RADIOTAP_TSFT = 0,
6609 IEEE80211_RADIOTAP_FLAGS = 1,
6610 IEEE80211_RADIOTAP_RATE = 2,
6611 IEEE80211_RADIOTAP_CHANNEL = 3,
6612 IEEE80211_RADIOTAP_FHSS = 4,
6613 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6614 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6615 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6616 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6617 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6618 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6619 IEEE80211_RADIOTAP_ANTENNA = 11,
6620 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6621 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6624 #define WLAN_RADIOTAP_PRESENT ( \
6625 (1 << IEEE80211_RADIOTAP_TSFT) | \
6626 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6627 (1 << IEEE80211_RADIOTAP_RATE) | \
6630 typedef struct _wlan_radiotap_header {
6631 ieee80211_radiotap_header wt_ihdr;
6635 } wlan_radiotap_header;
6636 /* Definition from madwifi */
6638 void send_monitor_packets(
6639 IN PRTMP_ADAPTER pAd,
6642 #if WIRELESS_EXT >= 12
6643 // This function will be called when query /proc
6644 struct iw_statistics *rt28xx_get_wireless_stats(
6645 IN struct net_device *net_dev);
6648 VOID RTMPSetDesiredRates(
6649 IN PRTMP_ADAPTER pAdapter,
6651 #endif // CONFIG_STA_SUPPORT //
6653 INT Set_FixedTxMode_Proc(
6654 IN PRTMP_ADAPTER pAd,
6657 static inline char* GetPhyMode(
6667 #ifdef DOT11_N_SUPPORT
6671 case MODE_HTGREENFIELD:
6673 #endif // DOT11_N_SUPPORT //
6680 static inline char* GetBW(
6690 #ifdef DOT11_N_SUPPORT
6693 #endif // DOT11_N_SUPPORT //
6700 VOID RT28xxThreadTerminate(
6701 IN RTMP_ADAPTER *pAd);
6703 BOOLEAN RT28XXChipsetCheck(
6706 BOOLEAN RT28XXNetDevInit(
6708 IN struct net_device *net_dev,
6709 IN RTMP_ADAPTER *pAd);
6711 BOOLEAN RT28XXProbePostConfig(
6713 IN RTMP_ADAPTER *pAd,
6716 VOID RT28XXDMADisable(
6717 IN RTMP_ADAPTER *pAd);
6719 VOID RT28XXDMAEnable(
6720 IN RTMP_ADAPTER *pAd);
6722 VOID RT28xx_UpdateBeaconToAsic(
6723 IN RTMP_ADAPTER * pAd,
6726 IN ULONG UpdatePos);
6729 IN struct net_device *net_dev,
6730 IN OUT struct ifreq *rq,
6734 #ifdef CONFIG_STA_SUPPORT
6735 INT rt28xx_sta_ioctl(
6736 IN struct net_device *net_dev,
6737 IN OUT struct ifreq *rq,
6739 #endif // CONFIG_STA_SUPPORT //
6741 BOOLEAN RT28XXSecurityKeyAdd(
6742 IN PRTMP_ADAPTER pAd,
6745 IN MAC_TABLE_ENTRY *pEntry);
6747 ////////////////////////////////////////
6748 PNDIS_PACKET GetPacketFromRxRing(
6749 IN PRTMP_ADAPTER pAd,
6750 OUT PRT28XX_RXD_STRUC pSaveRxD,
6751 OUT BOOLEAN *pbReschedule,
6752 IN OUT UINT32 *pRxPending);
6755 void kill_thread_task(PRTMP_ADAPTER pAd);
6757 void tbtt_tasklet(unsigned long data);
6760 VOID AsicTurnOffRFClk(
6761 IN PRTMP_ADAPTER pAd,
6764 VOID AsicTurnOnRFClk(
6765 IN PRTMP_ADAPTER pAd,
6769 NTSTATUS RT30xxWriteRFRegister(
6770 IN PRTMP_ADAPTER pAd,
6774 NTSTATUS RT30xxReadRFRegister(
6775 IN PRTMP_ADAPTER pAd,
6779 //2008/09/11:KH add to support efuse<--
6780 UCHAR eFuseReadRegisters(
6781 IN PRTMP_ADAPTER pAd,
6786 VOID eFuseReadPhysical(
6787 IN PRTMP_ADAPTER pAd,
6788 IN PUSHORT lpInBuffer,
6789 IN ULONG nInBufferSize,
6790 OUT PUSHORT lpOutBuffer,
6791 IN ULONG nOutBufferSize
6795 IN PRTMP_ADAPTER pAd,
6800 VOID eFusePhysicalWriteRegisters(
6801 IN PRTMP_ADAPTER pAd,
6806 NTSTATUS eFuseWriteRegisters(
6807 IN PRTMP_ADAPTER pAd,
6812 VOID eFuseWritePhysical(
6813 IN PRTMP_ADAPTER pAd,
6815 ULONG nInBufferSize,
6817 ULONG nOutBufferSize
6820 NTSTATUS eFuseWrite(
6821 IN PRTMP_ADAPTER pAd,
6826 INT set_eFuseGetFreeBlockCount_Proc(
6827 IN PRTMP_ADAPTER pAd,
6830 INT set_eFusedump_Proc(
6831 IN PRTMP_ADAPTER pAd,
6834 INT set_eFuseLoadFromBin_Proc(
6835 IN PRTMP_ADAPTER pAd,
6838 NTSTATUS eFuseWriteRegistersFromBin(
6839 IN PRTMP_ADAPTER pAd,
6844 VOID eFusePhysicalReadRegisters(
6845 IN PRTMP_ADAPTER pAd,
6850 NDIS_STATUS NICLoadEEPROM(
6851 IN PRTMP_ADAPTER pAd);
6853 BOOLEAN bNeedLoadEEPROM(
6854 IN PRTMP_ADAPTER pAd);
6855 //2008/09/11:KH add to support efuse-->
6859 // add by johnli, RF power sequence setup
6860 VOID RT30xxLoadRFNormalModeSetup(
6861 IN PRTMP_ADAPTER pAd);
6863 VOID RT30xxLoadRFSleepModeSetup(
6864 IN PRTMP_ADAPTER pAd);
6866 VOID RT30xxReverseRFSleepModeSetup(
6867 IN PRTMP_ADAPTER pAd);
6873 // Function Prototype in rtusb_bulk.c
6875 VOID RTUSBInitTxDesc(
6876 IN PRTMP_ADAPTER pAd,
6877 IN PTX_CONTEXT pTxContext,
6878 IN UCHAR BulkOutPipeId,
6879 IN usb_complete_t Func);
6881 VOID RTUSBInitHTTxDesc(
6882 IN PRTMP_ADAPTER pAd,
6883 IN PHT_TX_CONTEXT pTxContext,
6884 IN UCHAR BulkOutPipeId,
6885 IN ULONG BulkOutSize,
6886 IN usb_complete_t Func);
6888 VOID RTUSBInitRxDesc(
6889 IN PRTMP_ADAPTER pAd,
6890 IN PRX_CONTEXT pRxContext);
6892 VOID RTUSBCleanUpDataBulkOutQueue(
6893 IN PRTMP_ADAPTER pAd);
6895 VOID RTUSBCancelPendingBulkOutIRP(
6896 IN PRTMP_ADAPTER pAd);
6898 VOID RTUSBBulkOutDataPacket(
6899 IN PRTMP_ADAPTER pAd,
6900 IN UCHAR BulkOutPipeId,
6903 VOID RTUSBBulkOutNullFrame(
6904 IN PRTMP_ADAPTER pAd);
6906 VOID RTUSBBulkOutRTSFrame(
6907 IN PRTMP_ADAPTER pAd);
6909 VOID RTUSBCancelPendingBulkInIRP(
6910 IN PRTMP_ADAPTER pAd);
6912 VOID RTUSBCancelPendingIRPs(
6913 IN PRTMP_ADAPTER pAd);
6915 VOID RTUSBBulkOutMLMEPacket(
6916 IN PRTMP_ADAPTER pAd,
6919 VOID RTUSBBulkOutPsPoll(
6920 IN PRTMP_ADAPTER pAd);
6922 VOID RTUSBCleanUpMLMEBulkOutQueue(
6923 IN PRTMP_ADAPTER pAd);
6925 VOID RTUSBKickBulkOut(
6926 IN PRTMP_ADAPTER pAd);
6928 VOID RTUSBBulkReceive(
6929 IN PRTMP_ADAPTER pAd);
6932 IN RTMP_ADAPTER *pAd);
6934 VOID RTUSBInitRxDesc(
6935 IN PRTMP_ADAPTER pAd,
6936 IN PRX_CONTEXT pRxContext);
6938 VOID RTUSBBulkRxHandle(
6939 IN unsigned long data);
6942 // Function Prototype in rtusb_io.c
6944 NTSTATUS RTUSBMultiRead(
6945 IN PRTMP_ADAPTER pAd,
6950 NTSTATUS RTUSBMultiWrite(
6951 IN PRTMP_ADAPTER pAd,
6956 NTSTATUS RTUSBMultiWrite_OneByte(
6957 IN PRTMP_ADAPTER pAd,
6961 NTSTATUS RTUSBReadBBPRegister(
6962 IN PRTMP_ADAPTER pAd,
6966 NTSTATUS RTUSBWriteBBPRegister(
6967 IN PRTMP_ADAPTER pAd,
6971 NTSTATUS RTUSBWriteRFRegister(
6972 IN PRTMP_ADAPTER pAd,
6975 NTSTATUS RTUSB_VendorRequest(
6976 IN PRTMP_ADAPTER pAd,
6977 IN UINT32 TransferFlags,
6978 IN UCHAR ReservedBits,
6982 IN PVOID TransferBuffer,
6983 IN UINT32 TransferBufferLength);
6985 NTSTATUS RTUSBReadEEPROM(
6986 IN PRTMP_ADAPTER pAd,
6991 NTSTATUS RTUSBWriteEEPROM(
6992 IN PRTMP_ADAPTER pAd,
6997 VOID RTUSBPutToSleep(
6998 IN PRTMP_ADAPTER pAd);
7000 NTSTATUS RTUSBWakeUp(
7001 IN PRTMP_ADAPTER pAd);
7003 VOID RTUSBInitializeCmdQ(
7006 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7007 IN PRTMP_ADAPTER pAd,
7009 IN BOOLEAN SetInformation,
7010 IN PVOID pInformationBuffer,
7011 IN UINT32 InformationBufferLength);
7013 NDIS_STATUS RTUSBEnqueueInternalCmd(
7014 IN PRTMP_ADAPTER pAd,
7016 IN PVOID pInformationBuffer,
7017 IN UINT32 InformationBufferLength);
7019 VOID RTUSBDequeueCmd(
7021 OUT PCmdQElmt *pcmdqelmt);
7024 IN OUT PVOID Context);
7027 IN OUT PVOID Context);
7029 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7030 IN RTMP_ADAPTER *pAd,
7031 IN RALINK_TIMER_STRUCT *pTimer);
7033 BOOLEAN RT2870_TimerQ_Remove(
7034 IN RTMP_ADAPTER *pAd,
7035 IN RALINK_TIMER_STRUCT *pTimer);
7037 void RT2870_TimerQ_Exit(
7038 IN RTMP_ADAPTER *pAd);
7040 void RT2870_TimerQ_Init(
7041 IN RTMP_ADAPTER *pAd);
7043 VOID RT2870_BssBeaconExit(
7044 IN RTMP_ADAPTER *pAd);
7046 VOID RT2870_BssBeaconStop(
7047 IN RTMP_ADAPTER *pAd);
7049 VOID RT2870_BssBeaconStart(
7050 IN RTMP_ADAPTER * pAd);
7052 VOID RT2870_BssBeaconInit(
7053 IN RTMP_ADAPTER *pAd);
7055 VOID RT2870_WatchDog(
7056 IN RTMP_ADAPTER *pAd);
7058 NTSTATUS RTUSBWriteMACRegister(
7059 IN PRTMP_ADAPTER pAd,
7063 NTSTATUS RTUSBReadMACRegister(
7064 IN PRTMP_ADAPTER pAd,
7066 OUT PUINT32 pValue);
7068 NTSTATUS RTUSBSingleWrite(
7069 IN RTMP_ADAPTER *pAd,
7073 NTSTATUS RTUSBFirmwareRun(
7074 IN PRTMP_ADAPTER pAd);
7076 NTSTATUS RTUSBFirmwareWrite(
7077 IN PRTMP_ADAPTER pAd,
7081 NTSTATUS RTUSBFirmwareOpmode(
7082 IN PRTMP_ADAPTER pAd,
7083 OUT PUINT32 pValue);
7085 NTSTATUS RTUSBVenderReset(
7086 IN PRTMP_ADAPTER pAd);
7088 NDIS_STATUS RTUSBSetHardWareRegister(
7089 IN PRTMP_ADAPTER pAdapter,
7092 NDIS_STATUS RTUSBQueryHardWareRegister(
7093 IN PRTMP_ADAPTER pAdapter,
7097 IN PRTMP_ADAPTER pAd);
7100 NDIS_STATUS CreateThreads(
7101 IN struct net_device *net_dev );
7104 VOID MacTableInitialize(
7105 IN PRTMP_ADAPTER pAd);
7108 IN PRTMP_ADAPTER pAd,
7111 NDIS_STATUS RTMPWPAAddKeyProc(
7112 IN PRTMP_ADAPTER pAd,
7115 VOID AsicRxAntEvalAction(
7116 IN PRTMP_ADAPTER pAd);
7119 IN PRTMP_ADAPTER pAd,
7120 IN PUCHAR pHeader802_3,
7124 OUT PNDIS_PACKET *ppPacket);
7126 UINT deaggregate_AMSDU_announce(
7127 IN PRTMP_ADAPTER pAd,
7128 PNDIS_PACKET pPacket,
7132 NDIS_STATUS RTMPCheckRxError(
7133 IN PRTMP_ADAPTER pAd,
7134 IN PHEADER_802_11 pHeader,
7135 IN PRXWI_STRUC pRxWI,
7136 IN PRT28XX_RXD_STRUC pRxINFO);
7139 VOID RTUSBMlmeHardTransmit(
7140 IN PRTMP_ADAPTER pAd,
7141 IN PMGMT_STRUC pMgmt);
7147 // Function Prototype in rtusb_data.c
7149 NDIS_STATUS RTUSBFreeDescriptorRequest(
7150 IN PRTMP_ADAPTER pAd,
7151 IN UCHAR BulkOutPipeId,
7152 IN UINT32 NumberRequired);
7155 BOOLEAN RTUSBNeedQueueBackForAgg(
7156 IN RTMP_ADAPTER *pAd,
7157 IN UCHAR BulkOutPipeId);
7160 VOID RTMPWriteTxInfo(
7161 IN PRTMP_ADAPTER pAd,
7162 IN PTXINFO_STRUC pTxInfo,
7163 IN USHORT USBDMApktLen,
7170 // Function Prototype in cmm_data_2870.c
7172 USHORT RtmpUSB_WriteSubTxResource(
7173 IN PRTMP_ADAPTER pAd,
7176 OUT USHORT *FreeNumber);
7178 USHORT RtmpUSB_WriteSingleTxResource(
7179 IN PRTMP_ADAPTER pAd,
7182 OUT USHORT *FreeNumber);
7184 USHORT RtmpUSB_WriteFragTxResource(
7185 IN PRTMP_ADAPTER pAd,
7188 OUT USHORT *FreeNumber);
7190 USHORT RtmpUSB_WriteMultiTxResource(
7191 IN PRTMP_ADAPTER pAd,
7194 OUT USHORT *FreeNumber);
7196 VOID RtmpUSB_FinalWriteTxResource(
7197 IN PRTMP_ADAPTER pAd,
7199 IN USHORT totalMPDUSize,
7202 VOID RtmpUSBDataLastTxIdx(
7203 IN PRTMP_ADAPTER pAd,
7207 VOID RtmpUSBDataKickOut(
7208 IN PRTMP_ADAPTER pAd,
7213 int RtmpUSBMgmtKickOut(
7214 IN RTMP_ADAPTER *pAd,
7216 IN PNDIS_PACKET pPacket,
7217 IN PUCHAR pSrcBufVA,
7220 VOID RtmpUSBNullFrameKickOut(
7221 IN RTMP_ADAPTER *pAd,
7223 IN UCHAR *pNullFrame,
7224 IN UINT32 frameLen);
7226 VOID RT28xxUsbStaAsicForceWakeup(
7227 IN PRTMP_ADAPTER pAd,
7228 IN BOOLEAN bFromTx);
7230 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7231 IN PRTMP_ADAPTER pAd,
7232 IN USHORT TbttNumToNextWakeUp);
7234 VOID RT28xxUsbMlmeRadioOn(
7235 IN PRTMP_ADAPTER pAd);
7237 VOID RT28xxUsbMlmeRadioOFF(
7238 IN PRTMP_ADAPTER pAd);
7241 ////////////////////////////////////////
7244 IN RTMP_ADAPTER *pAd);
7246 UINT32 QBSS_LoadElementAppend(
7247 IN RTMP_ADAPTER *pAd,
7250 VOID QBSS_LoadUpdate(
7251 IN RTMP_ADAPTER *pAd);
7253 ///////////////////////////////////////
7254 INT RTMPShowCfgValue(
7255 IN PRTMP_ADAPTER pAd,
7259 PCHAR RTMPGetRalinkAuthModeStr(
7260 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7262 PCHAR RTMPGetRalinkEncryModeStr(
7263 IN USHORT encryMode);
7264 //////////////////////////////////////
7266 #ifdef CONFIG_STA_SUPPORT
7267 VOID AsicStaBbpTuning(
7268 IN PRTMP_ADAPTER pAd);
7270 BOOLEAN StaAddMacTableEntry(
7271 IN PRTMP_ADAPTER pAd,
7272 IN PMAC_TABLE_ENTRY pEntry,
7273 IN UCHAR MaxSupportedRateIn500Kbps,
7274 IN HT_CAPABILITY_IE *pHtCapability,
7275 IN UCHAR HtCapabilityLen,
7276 IN USHORT CapabilityInfo);
7277 #endif // CONFIG_STA_SUPPORT //
7279 void RTMP_IndicateMediaState(
7280 IN PRTMP_ADAPTER pAd);
7282 VOID ReSyncBeaconTime(
7283 IN PRTMP_ADAPTER pAd);
7285 VOID RTMPSetAGCInitValue(
7286 IN PRTMP_ADAPTER pAd,
7287 IN UCHAR BandWidth);
7289 int rt28xx_close(IN PNET_DEV dev);
7290 int rt28xx_open(IN PNET_DEV dev);
7292 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7294 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7295 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7297 if (VIRTUAL_IF_NUM(pAd) == 0)
7299 if (rt28xx_open(pAd->net_dev) != 0)
7305 VIRTUAL_IF_INC(pAd);
7309 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7311 VIRTUAL_IF_DEC(pAd);
7312 if (VIRTUAL_IF_NUM(pAd) == 0)
7313 rt28xx_close(pAd->net_dev);
7318 #endif // __RTMP_H__