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 //
1937 } COMMON_CONFIG, *PCOMMON_CONFIG;
1940 #ifdef CONFIG_STA_SUPPORT
1941 /* Modified by Wu Xi-Kun 4/21/2006 */
1942 // STA configuration and status
1943 typedef struct _STA_ADMIN_CONFIG {
1945 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1946 // the user intended configuration, but not necessary fully equal to the final
1947 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1948 // AP or IBSS holder).
1949 // Once initialized, user configuration can only be changed via OID_xxx
1950 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1951 USHORT AtimWin; // used when starting a new IBSS
1954 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1955 // the user intended configuration, and should be always applied to the final
1956 // settings in ACTIVE BSS without compromising with the BSS holder.
1957 // Once initialized, user configuration can only be changed via OID_xxx
1959 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1960 USHORT DefaultListenCount; // default listen count;
1961 ULONG WindowsPowerMode; // Power mode for AC power
1962 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1963 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1964 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1965 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1967 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1968 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1969 USHORT DisassocReason;
1970 UCHAR DisassocSta[MAC_ADDR_LEN];
1971 USHORT DeauthReason;
1972 UCHAR DeauthSta[MAC_ADDR_LEN];
1973 USHORT AuthFailReason;
1974 UCHAR AuthFailSta[MAC_ADDR_LEN];
1976 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1977 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1978 NDIS_802_11_WEP_STATUS WepStatus;
1979 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1981 // Add to support different cipher suite for WPA2/WPA mode
1982 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1983 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1984 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1985 USHORT RsnCapability;
1987 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1989 UCHAR PMK[32]; // WPA PSK mode PMK
1990 UCHAR PTK[64]; // WPA PSK mode PTK
1991 UCHAR GTK[32]; // GTK from authenticator
1992 BSSID_INFO SavedPMK[PMKID_NO];
1993 UINT SavedPMKNum; // Saved PMKID number
1998 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2001 // For WPA countermeasures
2002 ULONG LastMicErrorTime; // record last MIC error time
2003 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2004 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2005 // For WPA-PSK supplicant state
2006 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2007 UCHAR ReplayCounter[8];
2008 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2009 UCHAR SNonce[32]; // SNonce for WPA-PSK
2011 UCHAR LastSNR0; // last received BEACON's SNR
2012 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2013 RSSI_SAMPLE RssiSample;
2014 ULONG NumOfAvgRssiSample;
2016 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2017 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2018 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2019 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2021 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2022 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2023 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2024 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2025 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2026 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2027 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2029 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2030 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2031 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2033 // New for WPA, windows want us to to keep association information and
2034 // Fixed IEs from last association response
2035 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2036 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2037 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2038 USHORT ResVarIELen; // Length of next VIE include EID & Length
2039 UCHAR ResVarIEs[MAX_VIE_LEN];
2042 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2044 // New variables used for CCX 1.0
2046 BOOLEAN bCkipCmicOn;
2048 UCHAR GIV[3]; //for CCX iv
2053 LEAP_AUTH_INFO LeapAuthInfo;
2055 UCHAR NetworkChallenge[8];
2056 UCHAR NetworkChallengeResponse[24];
2057 UCHAR PeerChallenge[8];
2059 UCHAR PeerChallengeResponse[24];
2060 UCHAR SessionKey[16]; //Network session keys (NSK)
2061 RALINK_TIMER_STRUCT LeapAuthTimer;
2062 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2064 // New control flags for CCX
2065 CCX_CONTROL CCXControl; // Master administration state
2066 BOOLEAN CCXEnable; // Actual CCX state
2067 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2068 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2069 UCHAR CCXReqType; // Current processing CCX request type
2070 BSS_TABLE CCXBssTab; // BSS Table
2071 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2072 USHORT FrameReportLen; // Current Frame report length
2073 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2074 USHORT RPIDensity[8]; // Array for RPI density collection
2075 // Start address of each BSS table within FrameReportBuf
2076 // It's important to update the RxPower of the corresponding Bss
2077 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2078 USHORT BeaconToken; // Token for beacon report
2079 ULONG LastBssIndex; // Most current reported Bss index
2080 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2081 UCHAR RMReqCnt; // Number of measurement request saved.
2082 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2083 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2084 // It must be the same channel with maximum duration
2085 USHORT ParallelDuration; // Maximum duration for parallel measurement
2086 UCHAR ParallelChannel; // Only one channel with parallel measurement
2087 USHORT IAPPToken; // IAPP dialog token
2088 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2089 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2090 // Hack for channel load and noise histogram parameters
2091 UCHAR NHFactor; // Parameter for Noise histogram
2092 UCHAR CLFactor; // Parameter for channel load
2094 UCHAR KRK[16]; //Key Refresh Key.
2095 UCHAR BTK[32]; //Base Transient Key
2096 BOOLEAN CCKMLinkUpFlag;
2097 ULONG CCKMRN; //(Re)Association request number.
2098 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2099 UCHAR AironetCellPowerLimit; //in dBm
2100 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2101 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2102 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2103 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2104 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2105 USHORT CCXAdjacentAPChannel;
2106 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2108 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2109 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2111 UCHAR DtimCount; // 0.. DtimPeriod-1
2112 UCHAR DtimPeriod; // default = 3
2114 ////////////////////////////////////////////////////////////////////////////////////////
2115 // This is only for WHQL test.
2117 ////////////////////////////////////////////////////////////////////////////////////////
2119 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2121 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2122 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2124 #ifdef WPA_SUPPLICANT_SUPPORT
2126 BOOLEAN IEEE8021x_required_keys;
2127 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2128 UCHAR DesireSharedKeyId;
2130 // 0: driver ignores wpa_supplicant
2131 // 1: wpa_supplicant initiates scanning and AP selection
2132 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2133 UCHAR WpaSupplicantUP;
2134 UCHAR WpaSupplicantScanCount;
2135 #endif // WPA_SUPPLICANT_SUPPORT //
2140 BOOLEAN bTGnWifiTest;
2141 BOOLEAN bScanReqIsFromWebUI;
2143 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2144 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2145 RT_HT_PHY_INFO DesiredHtPhyInfo;
2146 BOOLEAN bAutoTxRateSwitch;
2147 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2149 // This data structure keep the current active BSS/IBSS's configuration that this STA
2150 // had agreed upon joining the network. Which means these parameters are usually decided
2151 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2152 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2153 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2154 // the current active settings.
2155 typedef struct _STA_ACTIVE_CONFIG {
2157 USHORT AtimWin; // in kusec; IBSS parameter set element
2158 USHORT CapabilityInfo;
2159 USHORT CfpMaxDuration;
2162 // Copy supported rate from desired AP's beacon. We are trying to match
2163 // AP's supported and extended rate settings.
2164 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2165 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2168 // Copy supported ht from desired AP's beacon. We are trying to match
2169 RT_HT_PHY_INFO SupportedPhyInfo;
2170 RT_HT_CAPABILITY SupportedHtPhy;
2171 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2172 #endif // CONFIG_STA_SUPPORT //
2175 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2176 NDIS_802_11_MAC_ADDRESS MacAddr;
2177 USHORT MacTabMatchWCID; // ASIC
2178 CIPHER_KEY CipherKey;
2179 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2182 // ----------- start of AP --------------------------
2183 // AUTH-RSP State Machine Aux data structure
2184 typedef struct _AP_MLME_AUX {
2185 UCHAR Addr[MAC_ADDR_LEN];
2187 CHAR Challenge[CIPHER_TEXT_LEN];
2188 } AP_MLME_AUX, *PAP_MLME_AUX;
2190 // structure to define WPA Group Key Rekey Interval
2191 typedef struct PACKED _RT_802_11_WPA_REKEY {
2192 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2193 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2194 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2196 typedef struct _MAC_TABLE_ENTRY {
2197 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2198 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2199 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2200 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2201 BOOLEAN ValidAsMesh;
2202 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2204 BOOLEAN bIAmBadAtheros;
2206 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2208 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2209 UCHAR CMTimerRunning;
2210 UCHAR apidx; // MBSS number
2212 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2213 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2214 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2217 RALINK_TIMER_STRUCT RetryTimer;
2218 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2219 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2220 NDIS_802_11_WEP_STATUS WepStatus;
2221 AP_WPA_STATE WpaState;
2224 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2225 CIPHER_KEY PairwiseKey;
2228 UCHAR PMKID[LEN_PMKID];
2231 UCHAR Addr[MAC_ADDR_LEN];
2234 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2235 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2237 USHORT CapabilityInfo;
2239 ULONG NoDataIdleCount;
2240 UINT16 StationKeepAliveCount; // unit: second
2242 QUEUE_HEADER PsQueue;
2244 UINT32 StaConnectTime; // the live time of this station since associated with AP
2247 #ifdef DOT11_N_SUPPORT
2249 USHORT NoBADataCountDown;
2251 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2252 UINT TxBFCount; // 3*3
2253 #endif // DOT11_N_SUPPORT //
2255 UINT DebugFIFOCount;
2260 //====================================================
2261 //WDS entry needs these
2262 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2263 UINT MatchWDSTabIdx;
2264 UCHAR MaxSupportedRate;
2266 UCHAR CurrTxRateIndex;
2267 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2268 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2269 // USHORT OneSecTxOkCount;
2270 UINT32 OneSecTxNoRetryOkCount;
2271 UINT32 OneSecTxRetryOkCount;
2272 UINT32 OneSecTxFailCount;
2273 UINT32 ContinueTxFailCnt;
2274 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2275 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2276 //====================================================
2278 BOOLEAN fNoisyEnvironment;
2279 BOOLEAN fLastSecAccordingRSSI;
2280 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2281 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2282 ULONG LastTxOkCount;
2283 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2285 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2286 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2287 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2288 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2289 ULONG ClientStatusFlags;
2291 // TODO: Shall we move that to DOT11_N_SUPPORT???
2292 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2294 #ifdef DOT11_N_SUPPORT
2295 // HT EWC MIMO-N used parameters
2296 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2297 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2298 USHORT TXAutoBAbitmap;
2299 USHORT BADeclineBitmap;
2300 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2301 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2302 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2304 // 802.11n features.
2306 UCHAR MaxRAmpduFactor;
2308 UCHAR MmpsMode; // MIMO power save more.
2310 HT_CAPABILITY_IE HTCapability;
2312 #ifdef DOT11N_DRAFT3
2313 UCHAR BSS2040CoexistenceMgmtSupport;
2314 #endif // DOT11N_DRAFT3 //
2315 #endif // DOT11_N_SUPPORT //
2317 BOOLEAN bAutoTxRateSwitch;
2320 struct _MAC_TABLE_ENTRY *pNext;
2321 USHORT TxSeq[NUM_OF_TID];
2322 USHORT NonQosDataSeq;
2324 RSSI_SAMPLE RssiSample;
2326 UINT32 TXMCSExpected[16];
2327 UINT32 TXMCSSuccessful[16];
2328 UINT32 TXMCSFailed[16];
2329 UINT32 TXMCSAutoFallBack[16][16];
2331 #ifdef CONFIG_STA_SUPPORT
2332 ULONG LastBeaconRxTime;
2333 #endif // CONFIG_STA_SUPPORT //
2334 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2336 typedef struct _MAC_TABLE {
2338 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2339 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2340 QUEUE_HEADER McastPsQueue;
2342 BOOLEAN fAnyStationInPsm;
2343 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2344 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2345 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2346 #ifdef DOT11_N_SUPPORT
2347 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2348 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2349 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2350 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2351 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2352 #endif // DOT11_N_SUPPORT //
2353 } MAC_TABLE, *PMAC_TABLE;
2355 #ifdef DOT11_N_SUPPORT
2356 #define IS_HT_STA(_pMacEntry) \
2357 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2359 #define IS_HT_RATE(_pMacEntry) \
2360 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2362 #define PEER_IS_HT_RATE(_pMacEntry) \
2363 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2364 #endif // DOT11_N_SUPPORT //
2366 typedef struct _WDS_ENTRY {
2368 UCHAR Addr[MAC_ADDR_LEN];
2369 ULONG NoDataIdleCount;
2370 struct _WDS_ENTRY *pNext;
2371 } WDS_ENTRY, *PWDS_ENTRY;
2373 typedef struct _WDS_TABLE_ENTRY {
2375 UCHAR WdsAddr[MAC_ADDR_LEN];
2376 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2377 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2378 UCHAR MaxSupportedRate;
2380 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2381 USHORT OneSecTxOkCount;
2382 USHORT OneSecTxRetryOkCount;
2383 USHORT OneSecTxFailCount;
2384 ULONG CurrTxRateStableTime; // # of second in current TX rate
2385 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2386 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2388 typedef struct _RT_802_11_WDS_ENTRY {
2392 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2393 UCHAR MacTabMatchWCID; // ASIC
2394 NDIS_802_11_WEP_STATUS WepStatus;
2397 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2398 RT_HT_PHY_INFO DesiredHtPhyInfo;
2399 BOOLEAN bAutoTxRateSwitch;
2400 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2401 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2403 typedef struct _WDS_TABLE {
2406 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2407 } WDS_TABLE, *PWDS_TABLE;
2409 typedef struct _APCLI_STRUCT {
2412 unsigned int mylinkid;
2414 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2415 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2416 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2418 CHAR Ssid[MAX_LEN_OF_SSID];
2421 CHAR CfgSsid[MAX_LEN_OF_SSID];
2422 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2423 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2425 ULONG ApCliRcvBeaconTime;
2427 ULONG CtrlCurrState;
2428 ULONG SyncCurrState;
2429 ULONG AuthCurrState;
2430 ULONG AssocCurrState;
2431 ULONG WpaPskCurrState;
2436 ULONG ClientStatusFlags;
2439 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2440 NDIS_802_11_WEP_STATUS WepStatus;
2442 // Add to support different cipher suite for WPA2/WPA mode
2443 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2444 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2445 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2446 USHORT RsnCapability;
2448 UCHAR PSK[100]; // reserve PSK key material
2450 UCHAR PMK[32]; // WPA PSK mode PMK
2451 //UCHAR PTK[64]; // WPA PSK mode PTK
2452 UCHAR GTK[32]; // GTK from authenticator
2454 //CIPHER_KEY PairwiseKey;
2455 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2458 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2459 //UCHAR PortSecured;
2461 // store RSN_IE built by driver
2462 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2465 // For WPA countermeasures
2466 ULONG LastMicErrorTime; // record last MIC error time
2467 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2468 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2470 // For WPA-PSK supplicant state
2471 //WPA_STATE WpaState; // Default is SS_NOTUSE
2472 //UCHAR ReplayCounter[8];
2473 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2474 UCHAR SNonce[32]; // SNonce for WPA-PSK
2475 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2477 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2478 RT_HT_PHY_INFO DesiredHtPhyInfo;
2479 BOOLEAN bAutoTxRateSwitch;
2480 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2481 } APCLI_STRUCT, *PAPCLI_STRUCT;
2483 // ----------- end of AP ----------------------------
2488 BOOLEAN bGreenField;
2494 typedef struct _INF_PCI_CONFIG
2496 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2499 typedef struct _INF_USB_CONFIG
2501 UINT BulkInEpAddr; // bulk-in endpoint address
2502 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2506 #ifdef IKANOS_VX_1X0
2507 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2509 struct IKANOS_TX_INFO
2511 struct net_device *netdev;
2512 IkanosWlanTxCbFuncP *fp;
2514 #endif // IKANOS_VX_1X0 //
2517 #define DIAGNOSE_TIME 10 // 10 sec
2518 typedef struct _RtmpDiagStrcut_
2519 { // Diagnosis Related element
2520 unsigned char inited;
2522 unsigned char ArrayStartIdx;
2523 unsigned char ArrayCurIdx;
2525 USHORT TxDataCnt[DIAGNOSE_TIME];
2526 USHORT TxFailCnt[DIAGNOSE_TIME];
2527 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2528 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2529 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2530 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2531 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2533 USHORT TxAggCnt[DIAGNOSE_TIME];
2534 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2535 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2536 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2537 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2538 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2541 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2542 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2543 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2544 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2546 #endif // DBG_DIAGNOSE //
2550 // The miniport adapter structure
2552 typedef struct _RTMP_ADAPTER
2554 PVOID OS_Cookie; // save specific structure relative to OS
2560 NDIS_SPIN_LOCK irq_lock;
2564 /*****************************************************************************************/
2565 /* USB related parameters */
2566 /*****************************************************************************************/
2567 struct usb_config_descriptor *config;
2568 UINT BulkInEpAddr; // bulk-in endpoint address
2569 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2572 USHORT BulkOutMaxPacketSize;
2573 USHORT BulkInMaxPacketSize;
2575 //======Control Flags
2576 LONG PendingIoCount;
2578 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2581 //======Timer Thread
2582 RT2870_TIMER_QUEUE TimerQ;
2583 NDIS_SPIN_LOCK TimerQLock;
2588 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2590 BOOLEAN TimerFunc_kill;
2594 //======Semaphores (event)
2595 struct semaphore mlme_semaphore; /* to sleep thread on */
2596 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2597 struct semaphore RTUSBTimer_semaphore;
2598 #ifdef INF_AMAZON_SE
2599 struct semaphore UsbVendorReq_semaphore;
2600 PVOID UsbVendorReqBuf;
2601 #endif // INF_AMAZON_SE //
2602 struct completion TimerQComplete;
2603 struct completion mlmeComplete;
2604 struct completion CmdQComplete;
2605 wait_queue_head_t *wait;
2609 /*****************************************************************************************/
2610 /* Both PCI/USB related parameters */
2611 /*****************************************************************************************/
2614 /*****************************************************************************************/
2615 /* Tx related parameters */
2616 /*****************************************************************************************/
2617 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2618 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2621 // Data related context and AC specified, 4 AC supported
2622 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2623 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2625 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2626 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2628 // 4 sets of Bulk Out index and pending flag
2629 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2631 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2632 UCHAR bulkResetPipeid;
2633 BOOLEAN MgmtBulkPending;
2634 ULONG bulkResetReq[6];
2637 // resource for software backlog queues
2638 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2639 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2641 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2642 RTMP_MGMT_RING MgmtRing;
2643 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2646 /*****************************************************************************************/
2647 /* Rx related parameters */
2648 /*****************************************************************************************/
2652 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2653 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2654 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2655 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2656 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2657 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2658 ULONG TransferBufferLength; // current length of the packet buffer
2659 ULONG ReadPosition; // current read position in a packet buffer
2663 /*****************************************************************************************/
2664 /* ASIC related parameters */
2665 /*****************************************************************************************/
2666 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2668 // ---------------------------
2670 // ---------------------------
2671 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2672 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2673 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2674 BOOLEAN EepromAccess;
2676 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2678 // ---------------------------
2680 // ---------------------------
2681 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2682 UCHAR BbpRssiToDbmDelta;
2683 BBP_R66_TUNING BbpTuning;
2685 // ----------------------------
2687 // ----------------------------
2688 UCHAR RfIcType; // RFIC_xxx
2689 ULONG RfFreqOffset; // Frequency offset for channel switching
2690 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2692 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2693 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2695 // This soft Rx Antenna Diversity mechanism is used only when user set
2696 // RX Antenna = DIVERSITY ON
2697 SOFT_RX_ANT_DIVERSITY RxAnt;
2700 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2701 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2702 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2703 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2705 UCHAR ChannelListNum; // number of channel in ChannelList[]
2708 ULONG Tx20MPwrCfgABand[5];
2709 ULONG Tx20MPwrCfgGBand[5];
2710 ULONG Tx40MPwrCfgABand[5];
2711 ULONG Tx40MPwrCfgGBand[5];
2713 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2714 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2715 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2716 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2717 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2718 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2720 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2721 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2722 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2723 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2724 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2725 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2727 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2728 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2729 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2730 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2733 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2734 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2735 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2736 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2739 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2740 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2741 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2742 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2744 // ----------------------------
2746 // ----------------------------
2747 MCU_LEDCS_STRUC LedCntl;
2748 USHORT Led1; // read from EEPROM 0x3c
2749 USHORT Led2; // EEPROM 0x3e
2750 USHORT Led3; // EEPROM 0x40
2751 UCHAR LedIndicatorStregth;
2752 UCHAR RssiSingalstrengthOffet;
2753 BOOLEAN bLedOnScanning;
2756 /*****************************************************************************************/
2757 /* 802.11 related parameters */
2758 /*****************************************************************************************/
2759 // outgoing BEACON frame buffer and corresponding TXD
2760 TXWI_STRUC BeaconTxWI;
2762 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2764 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2765 PSPOLL_FRAME PsPollFrame;
2766 HEADER_802_11 NullFrame;
2769 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2770 TX_CONTEXT NullContext;
2771 TX_CONTEXT PsPollContext;
2772 TX_CONTEXT RTSContext;
2777 //=========AP===========
2780 //=======STA===========
2781 #ifdef CONFIG_STA_SUPPORT
2782 /* Modified by Wu Xi-Kun 4/21/2006 */
2783 // -----------------------------------------------
2784 // STA specific configuration & operation status
2785 // used only when pAd->OpMode == OPMODE_STA
2786 // -----------------------------------------------
2787 STA_ADMIN_CONFIG StaCfg; // user desired settings
2788 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2789 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2790 NDIS_MEDIA_STATE PreMediaState;
2791 #endif // CONFIG_STA_SUPPORT //
2793 //=======Common===========
2794 // OP mode: either AP or STA
2795 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2797 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2800 // MAT related parameters
2802 // configuration: read from Registry & E2PROM
2803 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2804 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2805 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2807 // ------------------------------------------------------
2808 // common configuration to both OPMODE_STA and OPMODE_AP
2809 // ------------------------------------------------------
2810 COMMON_CONFIG CommonCfg;
2813 // AP needs those vaiables for site survey feature.
2814 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2815 BSS_TABLE ScanTab; // store the latest SCAN result
2817 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2818 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2819 NDIS_SPIN_LOCK MacTabLock;
2821 #ifdef DOT11_N_SUPPORT
2823 #endif // DOT11_N_SUPPORT //
2824 NDIS_SPIN_LOCK BATabLock;
2825 RALINK_TIMER_STRUCT RECBATimer;
2827 // encryption/decryption KEY tables
2828 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2830 // RX re-assembly buffer for fragmentation
2831 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2834 COUNTER_802_3 Counters8023; // 802.3 counters
2835 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2836 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2837 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2838 PRIVATE_STRUC PrivateInfo; // Private information & counters
2840 // flags, see fRTMP_ADAPTER_xxx flags
2841 ULONG Flags; // Represent current device status
2843 // current TX sequence #
2846 // Control disconnect / connect event generation
2847 //+++Didn't used anymore
2852 //+++Used only for Station
2853 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2856 ULONG ExtraInfo; // Extra information for displaying status
2857 ULONG SystemErrorBitmap; // b0: E2PROM version error
2859 //+++Didn't used anymore
2860 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2863 // ---------------------------
2865 // ---------------------------
2866 RT_802_11_EVENT_TABLE EventTab;
2871 /*****************************************************************************************/
2872 /* Statistic related parameters */
2873 /*****************************************************************************************/
2875 ULONG BulkOutDataOneSecCount;
2876 ULONG BulkInDataOneSecCount;
2877 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2878 ULONG watchDogRxCnt;
2879 ULONG watchDogRxOverFlowCnt;
2880 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2883 BOOLEAN bUpdateBcnCntDone;
2884 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2885 // ----------------------------
2887 // ----------------------------
2888 //ULONG DebugSetting[4];
2889 BOOLEAN bBanAllBaSetup;
2890 BOOLEAN bPromiscuous;
2892 // ----------------------------
2893 // rt2860c emulation-use Parameters
2894 // ----------------------------
2897 ULONG cfendaccu[30];
2898 ULONG bacontent[16];
2899 ULONG rxint[RX_RING_SIZE+1];
2902 BOOLEAN bForcePrintTX;
2903 BOOLEAN bForcePrintRX;
2904 BOOLEAN bDisablescanning; //defined in RT2870 USB
2905 BOOLEAN bStaFifoTest;
2906 BOOLEAN bProtectionTest;
2908 BOOLEAN bGenOneHCCA;
2909 BOOLEAN bBroadComHT;
2910 //+++Following add from RT2870 USB.
2912 ULONG BulkOutComplete;
2913 ULONG BulkOutCompleteOther;
2914 ULONG BulkOutCompleteCancel; // seems not use now?
2916 ULONG BulkInComplete;
2917 ULONG BulkInCompleteFail;
2920 struct wificonf WIFItestbed;
2922 #ifdef DOT11_N_SUPPORT
2923 struct reordering_mpdu_pool mpdu_blk_pool;
2924 #endif // DOT11_N_SUPPORT //
2926 ULONG OneSecondnonBEpackets; // record non BE packets per second
2928 #if WIRELESS_EXT >= 12
2929 struct iw_statistics iw_stats;
2932 struct net_device_stats stats;
2934 ULONG TbttTickCount;
2935 #ifdef PCI_MSI_SUPPORT
2937 #endif // PCI_MSI_SUPPORT //
2942 #define TIME_BASE (1000000/OS_HZ)
2943 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2944 UCHAR flg_be_adjust;
2945 ULONG be_adjust_last_time;
2947 #ifdef IKANOS_VX_1X0
2948 struct IKANOS_TX_INFO IkanosTxInfo;
2949 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2950 #endif // IKANOS_VX_1X0 //
2954 RtmpDiagStruct DiagStruct;
2955 #endif // DBG_DIAGNOSE //
2958 UINT8 PM_FlgSuspend;
2963 BOOLEAN bEEPROMFile;
2966 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2969 // Cisco IAPP format
2971 typedef struct _CISCO_IAPP_CONTENT_
2973 USHORT Length; //IAPP Length
2974 UCHAR MessageType; //IAPP type
2975 UCHAR FunctionCode; //IAPP function type
2976 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2977 UCHAR SourceMAC[MAC_ADDR_LEN];
2978 USHORT Tag; //Tag(element IE) - Adjacent AP report
2979 USHORT TagLength; //Length of element not including 4 byte header
2980 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2981 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2984 UCHAR Ssid[MAX_LEN_OF_SSID];
2985 USHORT Seconds; //Seconds that the client has been disassociated.
2986 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2988 #define DELAYINTMASK 0x0003fffb
2989 #define INTMASK 0x0003fffb
2990 #define IndMask 0x0003fffc
2991 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2992 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2993 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2994 #define TxCoherent 0x00020000 // tx coherent
2995 #define RxCoherent 0x00010000 // rx coherent
2996 #define McuCommand 0x00000200 // mcu
2997 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2998 #define TBTTInt 0x00000800 // TBTT interrupt
2999 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3000 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3001 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3004 typedef struct _RX_BLK_
3006 // RXD_STRUC RxD; // sample
3007 RT28XX_RXD_STRUC RxD;
3009 PHEADER_802_11 pHeader;
3010 PNDIS_PACKET pRxPacket;
3014 UCHAR UserPriority; // for calculate TKIP MIC using
3018 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3019 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3020 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3023 #define fRX_WDS 0x0001
3024 #define fRX_AMSDU 0x0002
3025 #define fRX_ARALINK 0x0004
3026 #define fRX_HTC 0x0008
3027 #define fRX_PAD 0x0010
3028 #define fRX_AMPDU 0x0020
3029 #define fRX_QOS 0x0040
3030 #define fRX_INFRA 0x0080
3031 #define fRX_EAP 0x0100
3032 #define fRX_MESH 0x0200
3033 #define fRX_APCLI 0x0400
3034 #define fRX_DLS 0x0800
3035 #define fRX_WPI 0x1000
3037 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3038 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3039 #define LENGTH_ARALINK_HEADER_FIELD 2
3041 #define TX_UNKOWN_FRAME 0x00
3042 #define TX_MCAST_FRAME 0x01
3043 #define TX_LEGACY_FRAME 0x02
3044 #define TX_AMPDU_FRAME 0x04
3045 #define TX_AMSDU_FRAME 0x08
3046 #define TX_RALINK_FRAME 0x10
3047 #define TX_FRAG_FRAME 0x20
3050 // Currently the sizeof(TX_BLK) is 148 bytes.
3051 typedef struct _TX_BLK_
3054 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3055 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3056 USHORT TotalFragNum; // Total frame fragments required in one batch
3057 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3059 QUEUE_HEADER TxPacketList;
3060 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3061 HTTRANSMIT_SETTING *pTransmit;
3063 // Following structure used for the characteristics of a specific packet.
3064 PNDIS_PACKET pPacket;
3065 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3066 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3067 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3068 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3069 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3070 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3071 UCHAR HdrPadLen; // recording Header Padding Length;
3072 UCHAR apidx; // The interface associated to this packet
3073 UCHAR Wcid; // The MAC entry associated to this packet
3074 UCHAR UserPriority; // priority class of packet
3075 UCHAR FrameGap; // what kind of IFS this packet use
3076 UCHAR MpduReqNum; // number of fragments of this frame
3077 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3078 UCHAR CipherAlg; // cipher alogrithm
3083 USHORT Flags; //See following definitions for detail.
3085 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3086 ULONG Priv; // Hardware specific value saved in here.
3090 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3091 #define fTX_bAckRequired 0x0002 // the packet need ack response
3092 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3093 #define fTX_bHTRate 0x0008 // allow to use HT rate
3094 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3095 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3096 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3097 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3098 #define fTX_bWMM 0x0080 // QOS Data
3100 #define fTX_bClearEAPFrame 0x0100
3103 #ifdef CONFIG_STA_SUPPORT
3104 #endif // CONFIG_STA_SUPPORT //
3108 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3111 (_pTxBlk->Flags |= _flag) \
3113 (_pTxBlk->Flags &= ~(_flag)) \
3116 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3117 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3118 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3124 //------------------------------------------------------------------------------------------
3128 #ifdef RT_BIG_ENDIAN
3129 static inline VOID WriteBackToDescriptor(
3132 IN BOOLEAN DoEncrypt,
3133 IN ULONG DescriptorType)
3137 p1 = ((UINT32 *)Dest);
3138 p2 = ((UINT32 *)Src);
3143 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3147 ========================================================================
3149 Routine Description:
3150 Endian conversion of Tx/Rx descriptor .
3153 pAd Pointer to our adapter
3154 pData Pointer to Tx/Rx descriptor
3155 DescriptorType Direction of the frame
3161 Call this function when read or update descriptor
3162 ========================================================================
3164 static inline VOID RTMPWIEndianChange(
3166 IN ULONG DescriptorType)
3171 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3173 if(DescriptorType == TYPE_TXWI)
3175 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3176 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3180 for(i=0; i < size/4 ; i++)
3181 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3186 ========================================================================
3188 Routine Description:
3189 Endian conversion of Tx/Rx descriptor .
3192 pAd Pointer to our adapter
3193 pData Pointer to Tx/Rx descriptor
3194 DescriptorType Direction of the frame
3200 Call this function when read or update descriptor
3201 ========================================================================
3205 static inline VOID RTMPDescriptorEndianChange(
3207 IN ULONG DescriptorType)
3209 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3213 ========================================================================
3215 Routine Description:
3216 Endian conversion of all kinds of 802.11 frames .
3219 pAd Pointer to our adapter
3220 pData Pointer to the 802.11 frame structure
3221 Dir Direction of the frame
3222 FromRxDoneInt Caller is from RxDone interrupt
3228 Call this function when read or update buffer data
3229 ========================================================================
3231 static inline VOID RTMPFrameEndianChange(
3232 IN PRTMP_ADAPTER pAd,
3235 IN BOOLEAN FromRxDoneInt)
3237 PHEADER_802_11 pFrame;
3240 // swab 16 bit fields - Frame Control field
3243 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3246 pFrame = (PHEADER_802_11) pData;
3247 pMacHdr = (PUCHAR) pFrame;
3249 // swab 16 bit fields - Duration/ID field
3250 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3252 // swab 16 bit fields - Sequence Control field
3253 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3255 if(pFrame->FC.Type == BTYPE_MGMT)
3257 switch(pFrame->FC.SubType)
3259 case SUBTYPE_ASSOC_REQ:
3260 case SUBTYPE_REASSOC_REQ:
3261 // swab 16 bit fields - CapabilityInfo field
3262 pMacHdr += sizeof(HEADER_802_11);
3263 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3265 // swab 16 bit fields - Listen Interval field
3267 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3270 case SUBTYPE_ASSOC_RSP:
3271 case SUBTYPE_REASSOC_RSP:
3272 // swab 16 bit fields - CapabilityInfo field
3273 pMacHdr += sizeof(HEADER_802_11);
3274 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3276 // swab 16 bit fields - Status Code field
3278 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3280 // swab 16 bit fields - AID field
3282 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3286 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3287 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3288 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3292 // swab 16 bit fields - Auth Alg No. field
3293 pMacHdr += sizeof(HEADER_802_11);
3294 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3296 // swab 16 bit fields - Auth Seq No. field
3298 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3300 // swab 16 bit fields - Status Code field
3302 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3306 case SUBTYPE_BEACON:
3307 case SUBTYPE_PROBE_RSP:
3308 // swab 16 bit fields - BeaconInterval field
3309 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3310 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3312 // swab 16 bit fields - CapabilityInfo field
3313 pMacHdr += sizeof(USHORT);
3314 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3317 case SUBTYPE_DEAUTH:
3318 case SUBTYPE_DISASSOC:
3319 // swab 16 bit fields - Reason code field
3320 pMacHdr += sizeof(HEADER_802_11);
3321 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3325 else if( pFrame->FC.Type == BTYPE_DATA )
3328 else if(pFrame->FC.Type == BTYPE_CNTL)
3330 switch(pFrame->FC.SubType)
3332 case SUBTYPE_BLOCK_ACK_REQ:
3334 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3335 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3336 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3339 case SUBTYPE_BLOCK_ACK:
3340 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3341 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3345 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3346 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3352 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3355 // swab 16 bit fields - Frame Control
3356 if(Dir == DIR_WRITE)
3358 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3361 #endif // RT_BIG_ENDIAN //
3364 static inline VOID ConvertMulticastIP2MAC(
3366 IN PUCHAR *ppMacAddr,
3367 IN UINT16 ProtoType)
3369 if (pIpAddr == NULL)
3372 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3378 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3379 *(*ppMacAddr) = 0x33;
3380 *(*ppMacAddr + 1) = 0x33;
3381 *(*ppMacAddr + 2) = pIpAddr[12];
3382 *(*ppMacAddr + 3) = pIpAddr[13];
3383 *(*ppMacAddr + 4) = pIpAddr[14];
3384 *(*ppMacAddr + 5) = pIpAddr[15];
3389 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3390 *(*ppMacAddr) = 0x01;
3391 *(*ppMacAddr + 1) = 0x00;
3392 *(*ppMacAddr + 2) = 0x5e;
3393 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3394 *(*ppMacAddr + 4) = pIpAddr[2];
3395 *(*ppMacAddr + 5) = pIpAddr[3];
3402 BOOLEAN RTMPCheckForHang(
3403 IN NDIS_HANDLE MiniportAdapterContext
3407 IN NDIS_HANDLE MiniportAdapterContext
3411 // Private routines in rtmp_init.c
3413 NDIS_STATUS RTMPAllocAdapterBlock(
3415 OUT PRTMP_ADAPTER *ppAdapter
3418 NDIS_STATUS RTMPAllocTxRxRingMemory(
3419 IN PRTMP_ADAPTER pAd
3422 NDIS_STATUS RTMPFindAdapter(
3423 IN PRTMP_ADAPTER pAd,
3424 IN NDIS_HANDLE WrapperConfigurationContext
3427 NDIS_STATUS RTMPReadParametersHook(
3428 IN PRTMP_ADAPTER pAd
3431 VOID RTMPFreeAdapter(
3432 IN PRTMP_ADAPTER pAd
3435 NDIS_STATUS NICReadRegParameters(
3436 IN PRTMP_ADAPTER pAd,
3437 IN NDIS_HANDLE WrapperConfigurationContext
3441 VOID NICInitRT30xxRFRegisters(
3442 IN PRTMP_ADAPTER pAd);
3445 VOID NICReadEEPROMParameters(
3446 IN PRTMP_ADAPTER pAd,
3447 IN PUCHAR mac_addr);
3449 VOID NICInitAsicFromEEPROM(
3450 IN PRTMP_ADAPTER pAd);
3452 VOID NICInitTxRxRingAndBacklogQueue(
3453 IN PRTMP_ADAPTER pAd);
3455 NDIS_STATUS NICInitializeAdapter(
3456 IN PRTMP_ADAPTER pAd,
3457 IN BOOLEAN bHardReset);
3459 NDIS_STATUS NICInitializeAsic(
3460 IN PRTMP_ADAPTER pAd,
3461 IN BOOLEAN bHardReset);
3464 IN PRTMP_ADAPTER pAd);
3466 VOID RTMPRingCleanUp(
3467 IN PRTMP_ADAPTER pAd,
3471 IN PRTMP_ADAPTER pAd);
3473 NDIS_STATUS DbgSendPacket(
3474 IN PRTMP_ADAPTER pAd,
3475 IN PNDIS_PACKET pPacket);
3478 IN PRTMP_ADAPTER pAd);
3480 VOID NICResetFromError(
3481 IN PRTMP_ADAPTER pAd);
3483 VOID NICEraseFirmware(
3484 IN PRTMP_ADAPTER pAd);
3486 NDIS_STATUS NICLoadFirmware(
3487 IN PRTMP_ADAPTER pAd);
3489 NDIS_STATUS NICLoadRateSwitchingParams(
3490 IN PRTMP_ADAPTER pAd);
3492 BOOLEAN NICCheckForHang(
3493 IN PRTMP_ADAPTER pAd);
3495 VOID NICUpdateFifoStaCounters(
3496 IN PRTMP_ADAPTER pAd);
3498 VOID NICUpdateRawCounters(
3499 IN PRTMP_ADAPTER pAd);
3501 ULONG RTMPNotAllZero(
3505 VOID RTMPZeroMemory(
3509 ULONG RTMPCompareMemory(
3514 VOID RTMPMoveMemory(
3527 VOID RTMPPatchMacBbpBug(
3528 IN PRTMP_ADAPTER pAd);
3530 VOID RTMPPatchCardBus(
3531 IN PRTMP_ADAPTER pAdapter);
3533 VOID RTMPPatchRalinkCardBus(
3534 IN PRTMP_ADAPTER pAdapter,
3537 ULONG RTMPReadCBConfig(
3543 VOID RTMPWriteCBConfig(
3551 IN PRTMP_ADAPTER pAd,
3552 IN PRALINK_TIMER_STRUCT pTimer,
3553 IN PVOID pTimerFunc,
3558 IN PRALINK_TIMER_STRUCT pTimer,
3563 IN PRALINK_TIMER_STRUCT pTimer,
3566 VOID RTMPCancelTimer(
3567 IN PRALINK_TIMER_STRUCT pTimer,
3568 OUT BOOLEAN *pCancelled);
3571 IN PRTMP_ADAPTER pAd,
3574 VOID RTMPSetSignalLED(
3575 IN PRTMP_ADAPTER pAd,
3576 IN NDIS_802_11_RSSI Dbm);
3578 VOID RTMPEnableRxTx(
3579 IN PRTMP_ADAPTER pAd);
3582 // prototype in action.c
3584 VOID ActionStateMachineInit(
3585 IN PRTMP_ADAPTER pAd,
3586 IN STATE_MACHINE *S,
3587 OUT STATE_MACHINE_FUNC Trans[]);
3589 VOID MlmeADDBAAction(
3590 IN PRTMP_ADAPTER pAd,
3591 IN MLME_QUEUE_ELEM *Elem);
3593 VOID MlmeDELBAAction(
3594 IN PRTMP_ADAPTER pAd,
3595 IN MLME_QUEUE_ELEM *Elem);
3598 IN PRTMP_ADAPTER pAd,
3599 IN MLME_QUEUE_ELEM *Elem);
3601 VOID MlmeInvalidAction(
3602 IN PRTMP_ADAPTER pAd,
3603 IN MLME_QUEUE_ELEM *Elem);
3606 IN PRTMP_ADAPTER pAd,
3607 IN MLME_QUEUE_ELEM *Elem);
3609 #ifdef DOT11_N_SUPPORT
3610 VOID PeerAddBAReqAction(
3611 IN PRTMP_ADAPTER pAd,
3612 IN MLME_QUEUE_ELEM *Elem);
3614 VOID PeerAddBARspAction(
3615 IN PRTMP_ADAPTER pAd,
3616 IN MLME_QUEUE_ELEM *Elem);
3618 VOID PeerDelBAAction(
3619 IN PRTMP_ADAPTER pAd,
3620 IN MLME_QUEUE_ELEM *Elem);
3623 IN PRTMP_ADAPTER pAd,
3624 IN MLME_QUEUE_ELEM *Elem);
3625 #endif // DOT11_N_SUPPORT //
3627 VOID SendPSMPAction(
3628 IN PRTMP_ADAPTER pAd,
3633 #ifdef DOT11N_DRAFT3
3634 VOID SendBSS2040CoexistMgmtAction(
3635 IN PRTMP_ADAPTER pAd,
3640 VOID SendNotifyBWActionFrame(
3641 IN PRTMP_ADAPTER pAd,
3645 BOOLEAN ChannelSwitchSanityCheck(
3646 IN PRTMP_ADAPTER pAd,
3648 IN UCHAR NewChannel,
3649 IN UCHAR Secondary);
3651 VOID ChannelSwitchAction(
3652 IN PRTMP_ADAPTER pAd,
3655 IN UCHAR Secondary);
3657 ULONG BuildIntolerantChannelRep(
3658 IN PRTMP_ADAPTER pAd,
3661 VOID Update2040CoexistFrameAndNotify(
3662 IN PRTMP_ADAPTER pAd,
3664 IN BOOLEAN bAddIntolerantCha);
3666 VOID Send2040CoexistAction(
3667 IN PRTMP_ADAPTER pAd,
3669 IN BOOLEAN bAddIntolerantCha);
3670 #endif // DOT11N_DRAFT3 //
3673 IN PRTMP_ADAPTER pAd,
3674 IN MLME_QUEUE_ELEM *Elem);
3676 VOID PeerPublicAction(
3677 IN PRTMP_ADAPTER pAd,
3678 IN MLME_QUEUE_ELEM *Elem);
3680 #ifdef CONFIG_STA_SUPPORT
3681 VOID StaPublicAction(
3682 IN PRTMP_ADAPTER pAd,
3683 IN UCHAR Bss2040Coexist);
3684 #endif // CONFIG_STA_SUPPORT //
3687 VOID PeerBSSTranAction(
3688 IN PRTMP_ADAPTER pAd,
3689 IN MLME_QUEUE_ELEM *Elem);
3691 #ifdef DOT11_N_SUPPORT
3693 IN PRTMP_ADAPTER pAd,
3694 IN MLME_QUEUE_ELEM *Elem);
3695 #endif // DOT11_N_SUPPORT //
3698 IN PRTMP_ADAPTER pAd,
3699 IN MLME_QUEUE_ELEM *Elem);
3701 #ifdef DOT11_N_SUPPORT
3702 VOID RECBATimerTimeout(
3703 IN PVOID SystemSpecific1,
3704 IN PVOID FunctionContext,
3705 IN PVOID SystemSpecific2,
3706 IN PVOID SystemSpecific3);
3708 VOID ORIBATimerTimeout(
3709 IN PRTMP_ADAPTER pAd);
3711 VOID SendRefreshBAR(
3712 IN PRTMP_ADAPTER pAd,
3713 IN MAC_TABLE_ENTRY *pEntry);
3714 #endif // DOT11_N_SUPPORT //
3717 IN PRTMP_ADAPTER pAd,
3718 IN OUT PHEADER_802_11 pHdr80211,
3724 IN PRTMP_ADAPTER pAd,
3725 IN OUT PFRAME_BAR pCntlBar,
3729 VOID InsertActField(
3730 IN PRTMP_ADAPTER pAd,
3731 OUT PUCHAR pFrameBuf,
3732 OUT PULONG pFrameLen,
3736 BOOLEAN QosBADataParse(
3737 IN PRTMP_ADAPTER pAd,
3739 IN PUCHAR p8023Header,
3743 IN UCHAR DataOffset,
3745 IN UINT CurRxIndex);
3747 #ifdef DOT11_N_SUPPORT
3748 BOOLEAN CntlEnqueueForRecv(
3749 IN PRTMP_ADAPTER pAd,
3752 IN PFRAME_BA_REQ pMsg);
3754 VOID BaAutoManSwitch(
3755 IN PRTMP_ADAPTER pAd);
3756 #endif // DOT11_N_SUPPORT //
3759 IN PRTMP_ADAPTER pAd,
3760 IN UCHAR BatRecIdx);
3763 // Private routines in rtmp_data.c
3765 BOOLEAN RTMPHandleRxDoneInterrupt(
3766 IN PRTMP_ADAPTER pAd);
3768 VOID RTMPHandleTxDoneInterrupt(
3769 IN PRTMP_ADAPTER pAd);
3771 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3772 IN PRTMP_ADAPTER pAd,
3773 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3775 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3776 IN PRTMP_ADAPTER pAd);
3778 VOID RTMPHandleTBTTInterrupt(
3779 IN PRTMP_ADAPTER pAd);
3781 VOID RTMPHandlePreTBTTInterrupt(
3782 IN PRTMP_ADAPTER pAd);
3784 void RTMPHandleTwakeupInterrupt(
3785 IN PRTMP_ADAPTER pAd);
3787 VOID RTMPHandleRxCoherentInterrupt(
3788 IN PRTMP_ADAPTER pAd);
3790 BOOLEAN TxFrameIsAggregatible(
3791 IN PRTMP_ADAPTER pAd,
3792 IN PUCHAR pPrevAddr1,
3793 IN PUCHAR p8023hdr);
3795 BOOLEAN PeerIsAggreOn(
3796 IN PRTMP_ADAPTER pAd,
3798 IN PMAC_TABLE_ENTRY pMacEntry);
3800 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3801 IN PNDIS_BUFFER pFirstBuffer,
3802 IN UCHAR DesiredOffset,
3806 NDIS_STATUS STASendPacket(
3807 IN PRTMP_ADAPTER pAd,
3808 IN PNDIS_PACKET pPacket);
3810 VOID STASendPackets(
3811 IN NDIS_HANDLE MiniportAdapterContext,
3812 IN PPNDIS_PACKET ppPacketArray,
3813 IN UINT NumberOfPackets);
3815 VOID RTMPDeQueuePacket(
3816 IN PRTMP_ADAPTER pAd,
3817 IN BOOLEAN bIntContext,
3819 IN UCHAR Max_Tx_Packets);
3821 NDIS_STATUS RTMPHardTransmit(
3822 IN PRTMP_ADAPTER pAd,
3823 IN PNDIS_PACKET pPacket,
3825 OUT PULONG pFreeTXDLeft);
3827 NDIS_STATUS STAHardTransmit(
3828 IN PRTMP_ADAPTER pAd,
3832 VOID STARxEAPOLFrameIndicate(
3833 IN PRTMP_ADAPTER pAd,
3834 IN MAC_TABLE_ENTRY *pEntry,
3836 IN UCHAR FromWhichBSSID);
3838 NDIS_STATUS RTMPFreeTXDRequest(
3839 IN PRTMP_ADAPTER pAd,
3841 IN UCHAR NumberRequired,
3842 IN PUCHAR FreeNumberIs);
3844 NDIS_STATUS MlmeHardTransmit(
3845 IN PRTMP_ADAPTER pAd,
3847 IN PNDIS_PACKET pPacket);
3849 NDIS_STATUS MlmeHardTransmitMgmtRing(
3850 IN PRTMP_ADAPTER pAd,
3852 IN PNDIS_PACKET pPacket);
3854 NDIS_STATUS MlmeHardTransmitTxRing(
3855 IN PRTMP_ADAPTER pAd,
3857 IN PNDIS_PACKET pPacket);
3859 USHORT RTMPCalcDuration(
3860 IN PRTMP_ADAPTER pAd,
3865 IN PRTMP_ADAPTER pAd,
3866 IN PTXWI_STRUC pTxWI,
3869 IN BOOLEAN InsTimestamp,
3872 IN BOOLEAN NSeq, // HW new a sequence.
3881 IN HTTRANSMIT_SETTING *pTransmit);
3884 VOID RTMPWriteTxWI_Data(
3885 IN PRTMP_ADAPTER pAd,
3886 IN OUT PTXWI_STRUC pTxWI,
3890 VOID RTMPWriteTxWI_Cache(
3891 IN PRTMP_ADAPTER pAd,
3892 IN OUT PTXWI_STRUC pTxWI,
3895 VOID RTMPWriteTxDescriptor(
3896 IN PRTMP_ADAPTER pAd,
3901 VOID RTMPSuspendMsduTransmission(
3902 IN PRTMP_ADAPTER pAd);
3904 VOID RTMPResumeMsduTransmission(
3905 IN PRTMP_ADAPTER pAd);
3907 NDIS_STATUS MiniportMMRequest(
3908 IN PRTMP_ADAPTER pAd,
3913 NDIS_STATUS MiniportDataMMRequest(
3914 IN PRTMP_ADAPTER pAd,
3919 VOID RTMPSendNullFrame(
3920 IN PRTMP_ADAPTER pAd,
3922 IN BOOLEAN bQosNull);
3924 VOID RTMPSendDisassociationFrame(
3925 IN PRTMP_ADAPTER pAd);
3927 VOID RTMPSendRTSFrame(
3928 IN PRTMP_ADAPTER pAd,
3930 IN unsigned int NextMpduSize,
3933 IN USHORT AckDuration,
3938 NDIS_STATUS RTMPApplyPacketFilter(
3939 IN PRTMP_ADAPTER pAd,
3940 IN PRT28XX_RXD_STRUC pRxD,
3941 IN PHEADER_802_11 pHeader);
3943 PQUEUE_HEADER RTMPCheckTxSwQueue(
3944 IN PRTMP_ADAPTER pAd,
3947 #ifdef CONFIG_STA_SUPPORT
3948 VOID RTMPReportMicError(
3949 IN PRTMP_ADAPTER pAd,
3950 IN PCIPHER_KEY pWpaKey);
3952 VOID WpaMicFailureReportFrame(
3953 IN PRTMP_ADAPTER pAd,
3954 IN MLME_QUEUE_ELEM *Elem);
3956 VOID WpaDisassocApAndBlockAssoc(
3957 IN PVOID SystemSpecific1,
3958 IN PVOID FunctionContext,
3959 IN PVOID SystemSpecific2,
3960 IN PVOID SystemSpecific3);
3961 #endif // CONFIG_STA_SUPPORT //
3963 NDIS_STATUS RTMPCloneNdisPacket(
3964 IN PRTMP_ADAPTER pAd,
3965 IN BOOLEAN pInsAMSDUHdr,
3966 IN PNDIS_PACKET pInPacket,
3967 OUT PNDIS_PACKET *ppOutPacket);
3969 NDIS_STATUS RTMPAllocateNdisPacket(
3970 IN PRTMP_ADAPTER pAd,
3971 IN PNDIS_PACKET *pPacket,
3977 VOID RTMPFreeNdisPacket(
3978 IN PRTMP_ADAPTER pAd,
3979 IN PNDIS_PACKET pPacket);
3981 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3982 IN PRTMP_ADAPTER pAd,
3985 BOOLEAN RTMPCheckDHCPFrame(
3986 IN PRTMP_ADAPTER pAd,
3987 IN PNDIS_PACKET pPacket);
3990 BOOLEAN RTMPCheckEtherType(
3991 IN PRTMP_ADAPTER pAd,
3992 IN PNDIS_PACKET pPacket);
3995 VOID RTMPCckBbpTuning(
3996 IN PRTMP_ADAPTER pAd,
4000 // Private routines in rtmp_wep.c
4002 VOID RTMPInitWepEngine(
4003 IN PRTMP_ADAPTER pAd,
4009 VOID RTMPEncryptData(
4010 IN PRTMP_ADAPTER pAd,
4015 BOOLEAN RTMPDecryptData(
4016 IN PRTMP_ADAPTER pAdapter,
4021 BOOLEAN RTMPSoftDecryptWEP(
4022 IN PRTMP_ADAPTER pAd,
4024 IN ULONG DataByteCnt,
4025 IN PCIPHER_KEY pGroupKey);
4028 IN PRTMP_ADAPTER pAd,
4032 IN PARCFOURCONTEXT Ctx,
4037 IN PARCFOURCONTEXT Ctx);
4039 VOID ARCFOUR_DECRYPT(
4040 IN PARCFOURCONTEXT Ctx,
4045 VOID ARCFOUR_ENCRYPT(
4046 IN PARCFOURCONTEXT Ctx,
4051 VOID WPAARCFOUR_ENCRYPT(
4052 IN PARCFOURCONTEXT Ctx,
4057 UINT RTMP_CALC_FCS32(
4066 // Asic/RF/BBP related functions
4068 VOID AsicAdjustTxPower(
4069 IN PRTMP_ADAPTER pAd);
4071 VOID AsicUpdateProtect(
4072 IN PRTMP_ADAPTER pAd,
4073 IN USHORT OperaionMode,
4075 IN BOOLEAN bDisableBGProtect,
4076 IN BOOLEAN bNonGFExist);
4078 VOID AsicSwitchChannel(
4079 IN PRTMP_ADAPTER pAd,
4083 VOID AsicLockChannel(
4084 IN PRTMP_ADAPTER pAd,
4087 VOID AsicAntennaSelect(
4088 IN PRTMP_ADAPTER pAd,
4091 VOID AsicAntennaSetting(
4092 IN PRTMP_ADAPTER pAd,
4093 IN ABGBAND_STATE BandState);
4095 VOID AsicRfTuningExec(
4096 IN PVOID SystemSpecific1,
4097 IN PVOID FunctionContext,
4098 IN PVOID SystemSpecific2,
4099 IN PVOID SystemSpecific3);
4101 #ifdef CONFIG_STA_SUPPORT
4102 VOID AsicSleepThenAutoWakeup(
4103 IN PRTMP_ADAPTER pAd,
4104 IN USHORT TbttNumToNextWakeUp);
4106 VOID AsicForceSleep(
4107 IN PRTMP_ADAPTER pAd);
4109 VOID AsicForceWakeup(
4110 IN PRTMP_ADAPTER pAd,
4111 IN BOOLEAN bFromTx);
4112 #endif // CONFIG_STA_SUPPORT //
4115 IN PRTMP_ADAPTER pAd,
4118 VOID AsicSetMcastWC(
4119 IN PRTMP_ADAPTER pAd);
4121 VOID AsicDelWcidTab(
4122 IN PRTMP_ADAPTER pAd,
4126 IN PRTMP_ADAPTER pAd);
4128 VOID AsicDisableRDG(
4129 IN PRTMP_ADAPTER pAd);
4131 VOID AsicDisableSync(
4132 IN PRTMP_ADAPTER pAd);
4134 VOID AsicEnableBssSync(
4135 IN PRTMP_ADAPTER pAd);
4137 VOID AsicEnableIbssSync(
4138 IN PRTMP_ADAPTER pAd);
4140 VOID AsicSetEdcaParm(
4141 IN PRTMP_ADAPTER pAd,
4142 IN PEDCA_PARM pEdcaParm);
4144 VOID AsicSetSlotTime(
4145 IN PRTMP_ADAPTER pAd,
4146 IN BOOLEAN bUseShortSlotTime);
4148 VOID AsicAddSharedKeyEntry(
4149 IN PRTMP_ADAPTER pAd,
4157 VOID AsicRemoveSharedKeyEntry(
4158 IN PRTMP_ADAPTER pAd,
4162 VOID AsicUpdateWCIDAttribute(
4163 IN PRTMP_ADAPTER pAd,
4167 IN BOOLEAN bUsePairewiseKeyTable);
4169 VOID AsicUpdateWCIDIVEIV(
4170 IN PRTMP_ADAPTER pAd,
4175 VOID AsicUpdateRxWCIDTable(
4176 IN PRTMP_ADAPTER pAd,
4180 VOID AsicAddKeyEntry(
4181 IN PRTMP_ADAPTER pAd,
4185 IN PCIPHER_KEY pCipherKey,
4186 IN BOOLEAN bUsePairewiseKeyTable,
4189 VOID AsicAddPairwiseKeyEntry(
4190 IN PRTMP_ADAPTER pAd,
4193 IN CIPHER_KEY *pCipherKey);
4195 VOID AsicRemovePairwiseKeyEntry(
4196 IN PRTMP_ADAPTER pAd,
4200 BOOLEAN AsicSendCommandToMcu(
4201 IN PRTMP_ADAPTER pAd,
4208 VOID MacAddrRandomBssid(
4209 IN PRTMP_ADAPTER pAd,
4212 VOID MgtMacHeaderInit(
4213 IN PRTMP_ADAPTER pAd,
4214 IN OUT PHEADER_802_11 pHdr80211,
4221 IN PRTMP_ADAPTER pAd);
4224 IN PRTMP_ADAPTER pAd);
4230 #ifdef DOT11_N_SUPPORT
4232 IN PRTMP_ADAPTER pAd,
4234 #endif // DOT11_N_SUPPORT //
4236 ULONG BssTableSearch(
4241 ULONG BssSsidTableSearch(
4248 ULONG BssTableSearchWithSSID(
4255 VOID BssTableDeleteEntry(
4256 IN OUT PBSS_TABLE pTab,
4260 #ifdef DOT11_N_SUPPORT
4261 VOID BATableDeleteORIEntry(
4262 IN OUT PRTMP_ADAPTER pAd,
4263 IN BA_ORI_ENTRY *pBAORIEntry);
4265 VOID BATableDeleteRECEntry(
4266 IN OUT PRTMP_ADAPTER pAd,
4267 IN BA_REC_ENTRY *pBARECEntry);
4269 VOID BATableTearORIEntry(
4270 IN OUT PRTMP_ADAPTER pAd,
4273 IN BOOLEAN bForceDelete,
4276 VOID BATableTearRECEntry(
4277 IN OUT PRTMP_ADAPTER pAd,
4281 #endif // DOT11_N_SUPPORT //
4284 IN PRTMP_ADAPTER pAd,
4285 OUT PBSS_ENTRY pBss,
4290 IN USHORT BeaconPeriod,
4293 IN USHORT CapabilityInfo,
4295 IN UCHAR SupRateLen,
4297 IN UCHAR ExtRateLen,
4298 IN HT_CAPABILITY_IE *pHtCapability,
4299 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4300 IN UCHAR HtCapabilityLen,
4301 IN UCHAR AddHtInfoLen,
4302 IN UCHAR NewExtChanOffset,
4305 IN LARGE_INTEGER TimeStamp,
4307 IN PEDCA_PARM pEdcaParm,
4308 IN PQOS_CAPABILITY_PARM pQosCapability,
4309 IN PQBSS_LOAD_PARM pQbssLoad,
4310 IN USHORT LengthVIE,
4311 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4313 ULONG BssTableSetEntry(
4314 IN PRTMP_ADAPTER pAd,
4315 OUT PBSS_TABLE pTab,
4320 IN USHORT BeaconPeriod,
4323 IN USHORT CapabilityInfo,
4325 IN UCHAR SupRateLen,
4327 IN UCHAR ExtRateLen,
4328 IN HT_CAPABILITY_IE *pHtCapability,
4329 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4330 IN UCHAR HtCapabilityLen,
4331 IN UCHAR AddHtInfoLen,
4332 IN UCHAR NewExtChanOffset,
4335 IN LARGE_INTEGER TimeStamp,
4337 IN PEDCA_PARM pEdcaParm,
4338 IN PQOS_CAPABILITY_PARM pQosCapability,
4339 IN PQBSS_LOAD_PARM pQbssLoad,
4340 IN USHORT LengthVIE,
4341 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4343 #ifdef DOT11_N_SUPPORT
4344 VOID BATableInsertEntry(
4345 IN PRTMP_ADAPTER pAd,
4347 IN USHORT TimeOutValue,
4348 IN USHORT StartingSeq,
4351 IN UCHAR OriginatorStatus,
4352 IN BOOLEAN IsRecipient);
4354 #ifdef DOT11N_DRAFT3
4355 VOID Bss2040CoexistTimeOut(
4356 IN PVOID SystemSpecific1,
4357 IN PVOID FunctionContext,
4358 IN PVOID SystemSpecific2,
4359 IN PVOID SystemSpecific3);
4363 IN PRTMP_ADAPTER pAd);
4365 ULONG TriEventTableSetEntry(
4366 IN PRTMP_ADAPTER pAd,
4367 OUT TRIGGER_EVENT_TAB *Tab,
4369 IN HT_CAPABILITY_IE *pHtCapability,
4370 IN UCHAR HtCapabilityLen,
4372 IN UCHAR ChannelNo);
4374 VOID TriEventCounterMaintenance(
4375 IN PRTMP_ADAPTER pAd);
4376 #endif // DOT11N_DRAFT3 //
4377 #endif // DOT11_N_SUPPORT //
4379 VOID BssTableSsidSort(
4380 IN PRTMP_ADAPTER pAd,
4381 OUT BSS_TABLE *OutTab,
4385 VOID BssTableSortByRssi(
4386 IN OUT BSS_TABLE *OutTab);
4388 VOID BssCipherParse(
4389 IN OUT PBSS_ENTRY pBss);
4391 NDIS_STATUS MlmeQueueInit(
4392 IN MLME_QUEUE *Queue);
4394 VOID MlmeQueueDestroy(
4395 IN MLME_QUEUE *Queue);
4397 BOOLEAN MlmeEnqueue(
4398 IN PRTMP_ADAPTER pAd,
4404 BOOLEAN MlmeEnqueueForRecv(
4405 IN PRTMP_ADAPTER pAd,
4407 IN ULONG TimeStampHigh,
4408 IN ULONG TimeStampLow,
4417 BOOLEAN MlmeDequeue(
4418 IN MLME_QUEUE *Queue,
4419 OUT MLME_QUEUE_ELEM **Elem);
4421 VOID MlmeRestartStateMachine(
4422 IN PRTMP_ADAPTER pAd);
4424 BOOLEAN MlmeQueueEmpty(
4425 IN MLME_QUEUE *Queue);
4427 BOOLEAN MlmeQueueFull(
4428 IN MLME_QUEUE *Queue);
4430 BOOLEAN MsgTypeSubst(
4431 IN PRTMP_ADAPTER pAd,
4432 IN PFRAME_802_11 pFrame,
4436 VOID StateMachineInit(
4437 IN STATE_MACHINE *Sm,
4438 IN STATE_MACHINE_FUNC Trans[],
4441 IN STATE_MACHINE_FUNC DefFunc,
4445 VOID StateMachineSetAction(
4446 IN STATE_MACHINE *S,
4449 IN STATE_MACHINE_FUNC F);
4451 VOID StateMachinePerformAction(
4452 IN PRTMP_ADAPTER pAd,
4453 IN STATE_MACHINE *S,
4454 IN MLME_QUEUE_ELEM *Elem);
4457 IN PRTMP_ADAPTER pAd,
4458 IN MLME_QUEUE_ELEM *Elem);
4460 VOID AssocStateMachineInit(
4461 IN PRTMP_ADAPTER pAd,
4462 IN STATE_MACHINE *Sm,
4463 OUT STATE_MACHINE_FUNC Trans[]);
4465 VOID ReassocTimeout(
4466 IN PVOID SystemSpecific1,
4467 IN PVOID FunctionContext,
4468 IN PVOID SystemSpecific2,
4469 IN PVOID SystemSpecific3);
4472 IN PVOID SystemSpecific1,
4473 IN PVOID FunctionContext,
4474 IN PVOID SystemSpecific2,
4475 IN PVOID SystemSpecific3);
4477 VOID DisassocTimeout(
4478 IN PVOID SystemSpecific1,
4479 IN PVOID FunctionContext,
4480 IN PVOID SystemSpecific2,
4481 IN PVOID SystemSpecific3);
4483 //----------------------------------------------
4484 VOID MlmeDisassocReqAction(
4485 IN PRTMP_ADAPTER pAd,
4486 IN MLME_QUEUE_ELEM *Elem);
4488 VOID MlmeAssocReqAction(
4489 IN PRTMP_ADAPTER pAd,
4490 IN MLME_QUEUE_ELEM *Elem);
4492 VOID MlmeReassocReqAction(
4493 IN PRTMP_ADAPTER pAd,
4494 IN MLME_QUEUE_ELEM *Elem);
4496 VOID MlmeDisassocReqAction(
4497 IN PRTMP_ADAPTER pAd,
4498 IN MLME_QUEUE_ELEM *Elem);
4500 VOID PeerAssocRspAction(
4501 IN PRTMP_ADAPTER pAd,
4502 IN MLME_QUEUE_ELEM *Elem);
4504 VOID PeerReassocRspAction(
4505 IN PRTMP_ADAPTER pAd,
4506 IN MLME_QUEUE_ELEM *Elem);
4508 VOID PeerDisassocAction(
4509 IN PRTMP_ADAPTER pAd,
4510 IN MLME_QUEUE_ELEM *Elem);
4512 VOID DisassocTimeoutAction(
4513 IN PRTMP_ADAPTER pAd,
4514 IN MLME_QUEUE_ELEM *Elem);
4516 VOID AssocTimeoutAction(
4517 IN PRTMP_ADAPTER pAd,
4518 IN MLME_QUEUE_ELEM *Elem);
4520 VOID ReassocTimeoutAction(
4521 IN PRTMP_ADAPTER pAd,
4522 IN MLME_QUEUE_ELEM *Elem);
4525 IN PRTMP_ADAPTER pAd,
4528 VOID SwitchBetweenWepAndCkip(
4529 IN PRTMP_ADAPTER pAd);
4531 VOID InvalidStateWhenAssoc(
4532 IN PRTMP_ADAPTER pAd,
4533 IN MLME_QUEUE_ELEM *Elem);
4535 VOID InvalidStateWhenReassoc(
4536 IN PRTMP_ADAPTER pAd,
4537 IN MLME_QUEUE_ELEM *Elem);
4539 VOID InvalidStateWhenDisassociate(
4540 IN PRTMP_ADAPTER pAd,
4541 IN MLME_QUEUE_ELEM *Elem);
4544 VOID MlmeCntlConfirm(
4545 IN PRTMP_ADAPTER pAd,
4551 IN PRTMP_ADAPTER pAd);
4553 VOID ComposeNullFrame(
4554 IN PRTMP_ADAPTER pAd);
4557 IN PRTMP_ADAPTER pAd,
4559 IN USHORT CapabilityInfo,
4562 IN UCHAR SupRateLen,
4564 IN UCHAR ExtRateLen,
4565 IN PEDCA_PARM pEdcaParm,
4566 IN HT_CAPABILITY_IE *pHtCapability,
4567 IN UCHAR HtCapabilityLen,
4568 IN ADD_HT_INFO_IE *pAddHtInfo);
4570 VOID AuthStateMachineInit(
4571 IN PRTMP_ADAPTER pAd,
4572 IN PSTATE_MACHINE sm,
4573 OUT STATE_MACHINE_FUNC Trans[]);
4576 IN PVOID SystemSpecific1,
4577 IN PVOID FunctionContext,
4578 IN PVOID SystemSpecific2,
4579 IN PVOID SystemSpecific3);
4581 VOID MlmeAuthReqAction(
4582 IN PRTMP_ADAPTER pAd,
4583 IN MLME_QUEUE_ELEM *Elem);
4585 VOID PeerAuthRspAtSeq2Action(
4586 IN PRTMP_ADAPTER pAd,
4587 IN MLME_QUEUE_ELEM *Elem);
4589 VOID PeerAuthRspAtSeq4Action(
4590 IN PRTMP_ADAPTER pAd,
4591 IN MLME_QUEUE_ELEM *Elem);
4593 VOID AuthTimeoutAction(
4594 IN PRTMP_ADAPTER pAd,
4595 IN MLME_QUEUE_ELEM *Elem);
4598 IN PRTMP_ADAPTER pAd,
4601 VOID MlmeDeauthReqAction(
4602 IN PRTMP_ADAPTER pAd,
4603 IN MLME_QUEUE_ELEM *Elem);
4605 VOID InvalidStateWhenAuth(
4606 IN PRTMP_ADAPTER pAd,
4607 IN MLME_QUEUE_ELEM *Elem);
4609 //=============================================
4611 VOID AuthRspStateMachineInit(
4612 IN PRTMP_ADAPTER pAd,
4613 IN PSTATE_MACHINE Sm,
4614 IN STATE_MACHINE_FUNC Trans[]);
4616 VOID PeerDeauthAction(
4617 IN PRTMP_ADAPTER pAd,
4618 IN MLME_QUEUE_ELEM *Elem);
4620 VOID PeerAuthSimpleRspGenAndSend(
4621 IN PRTMP_ADAPTER pAd,
4622 IN PHEADER_802_11 pHdr80211,
4629 // Private routines in dls.c
4632 //========================================
4634 VOID SyncStateMachineInit(
4635 IN PRTMP_ADAPTER pAd,
4636 IN STATE_MACHINE *Sm,
4637 OUT STATE_MACHINE_FUNC Trans[]);
4640 IN PVOID SystemSpecific1,
4641 IN PVOID FunctionContext,
4642 IN PVOID SystemSpecific2,
4643 IN PVOID SystemSpecific3);
4646 IN PVOID SystemSpecific1,
4647 IN PVOID FunctionContext,
4648 IN PVOID SystemSpecific2,
4649 IN PVOID SystemSpecific3);
4651 VOID MlmeScanReqAction(
4652 IN PRTMP_ADAPTER pAd,
4653 IN MLME_QUEUE_ELEM *Elem);
4655 VOID InvalidStateWhenScan(
4656 IN PRTMP_ADAPTER pAd,
4657 IN MLME_QUEUE_ELEM *Elem);
4659 VOID InvalidStateWhenJoin(
4660 IN PRTMP_ADAPTER pAd,
4661 IN MLME_QUEUE_ELEM *Elem);
4663 VOID InvalidStateWhenStart(
4664 IN PRTMP_ADAPTER pAd,
4665 IN MLME_QUEUE_ELEM *Elem);
4668 IN PRTMP_ADAPTER pAd,
4669 IN MLME_QUEUE_ELEM *Elem);
4671 VOID EnqueueProbeRequest(
4672 IN PRTMP_ADAPTER pAd);
4674 BOOLEAN ScanRunning(
4675 IN PRTMP_ADAPTER pAd);
4676 //=========================================
4679 IN PRTMP_ADAPTER pAd,
4680 IN STATE_MACHINE *S,
4681 OUT STATE_MACHINE_FUNC Trans[]);
4683 VOID MlmeCntlMachinePerformAction(
4684 IN PRTMP_ADAPTER pAd,
4685 IN STATE_MACHINE *S,
4686 IN MLME_QUEUE_ELEM *Elem);
4689 IN PRTMP_ADAPTER pAd,
4690 IN MLME_QUEUE_ELEM *Elem);
4692 VOID CntlOidScanProc(
4693 IN PRTMP_ADAPTER pAd,
4694 IN MLME_QUEUE_ELEM *Elem);
4696 VOID CntlOidSsidProc(
4697 IN PRTMP_ADAPTER pAd,
4698 IN MLME_QUEUE_ELEM * Elem);
4700 VOID CntlOidRTBssidProc(
4701 IN PRTMP_ADAPTER pAd,
4702 IN MLME_QUEUE_ELEM * Elem);
4704 VOID CntlMlmeRoamingProc(
4705 IN PRTMP_ADAPTER pAd,
4706 IN MLME_QUEUE_ELEM * Elem);
4708 VOID CntlWaitDisassocProc(
4709 IN PRTMP_ADAPTER pAd,
4710 IN MLME_QUEUE_ELEM *Elem);
4712 VOID CntlWaitJoinProc(
4713 IN PRTMP_ADAPTER pAd,
4714 IN MLME_QUEUE_ELEM *Elem);
4716 VOID CntlWaitReassocProc(
4717 IN PRTMP_ADAPTER pAd,
4718 IN MLME_QUEUE_ELEM *Elem);
4720 VOID CntlWaitStartProc(
4721 IN PRTMP_ADAPTER pAd,
4722 IN MLME_QUEUE_ELEM *Elem);
4724 VOID CntlWaitAuthProc(
4725 IN PRTMP_ADAPTER pAd,
4726 IN MLME_QUEUE_ELEM *Elem);
4728 VOID CntlWaitAuthProc2(
4729 IN PRTMP_ADAPTER pAd,
4730 IN MLME_QUEUE_ELEM *Elem);
4732 VOID CntlWaitAssocProc(
4733 IN PRTMP_ADAPTER pAd,
4734 IN MLME_QUEUE_ELEM *Elem);
4737 IN PRTMP_ADAPTER pAd,
4741 IN PRTMP_ADAPTER pAd,
4742 IN BOOLEAN IsReqFromAP);
4744 VOID IterateOnBssTab(
4745 IN PRTMP_ADAPTER pAd);
4747 VOID IterateOnBssTab2(
4748 IN PRTMP_ADAPTER pAd);;
4751 IN PRTMP_ADAPTER pAd,
4752 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4756 IN PRTMP_ADAPTER pAd,
4757 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4759 IN USHORT CapabilityInfo,
4761 IN USHORT ListenIntv);
4764 IN PRTMP_ADAPTER pAd,
4765 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4771 VOID DisassocParmFill(
4772 IN PRTMP_ADAPTER pAd,
4773 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4778 IN PRTMP_ADAPTER pAd,
4779 IN OUT MLME_START_REQ_STRUCT *StartReq,
4784 IN PRTMP_ADAPTER pAd,
4785 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4790 IN PRTMP_ADAPTER pAd);
4792 VOID EnqueueBeaconFrame(
4793 IN PRTMP_ADAPTER pAd);
4795 VOID MlmeJoinReqAction(
4796 IN PRTMP_ADAPTER pAd,
4797 IN MLME_QUEUE_ELEM *Elem);
4799 VOID MlmeScanReqAction(
4800 IN PRTMP_ADAPTER pAd,
4801 IN MLME_QUEUE_ELEM *Elem);
4803 VOID MlmeStartReqAction(
4804 IN PRTMP_ADAPTER pAd,
4805 IN MLME_QUEUE_ELEM *Elem);
4807 VOID ScanTimeoutAction(
4808 IN PRTMP_ADAPTER pAd,
4809 IN MLME_QUEUE_ELEM *Elem);
4811 VOID BeaconTimeoutAtJoinAction(
4812 IN PRTMP_ADAPTER pAd,
4813 IN MLME_QUEUE_ELEM *Elem);
4815 VOID PeerBeaconAtScanAction(
4816 IN PRTMP_ADAPTER pAd,
4817 IN MLME_QUEUE_ELEM *Elem);
4819 VOID PeerBeaconAtJoinAction(
4820 IN PRTMP_ADAPTER pAd,
4821 IN MLME_QUEUE_ELEM *Elem);
4824 IN PRTMP_ADAPTER pAd,
4825 IN MLME_QUEUE_ELEM *Elem);
4827 VOID PeerProbeReqAction(
4828 IN PRTMP_ADAPTER pAd,
4829 IN MLME_QUEUE_ELEM *Elem);
4831 VOID ScanNextChannel(
4832 IN PRTMP_ADAPTER pAd);
4834 ULONG MakeIbssBeacon(
4835 IN PRTMP_ADAPTER pAd);
4837 VOID CCXAdjacentAPReport(
4838 IN PRTMP_ADAPTER pAd);
4840 BOOLEAN MlmeScanReqSanity(
4841 IN PRTMP_ADAPTER pAd,
4847 OUT UCHAR *ScanType);
4849 BOOLEAN PeerBeaconAndProbeRspSanity(
4850 IN PRTMP_ADAPTER pAd,
4853 IN UCHAR MsgChannel,
4857 OUT UCHAR *pSsidLen,
4858 OUT UCHAR *pBssType,
4859 OUT USHORT *pBeaconPeriod,
4860 OUT UCHAR *pChannel,
4861 OUT UCHAR *pNewChannel,
4862 OUT LARGE_INTEGER *pTimestamp,
4863 OUT CF_PARM *pCfParm,
4864 OUT USHORT *pAtimWin,
4865 OUT USHORT *pCapabilityInfo,
4867 OUT UCHAR *pDtimCount,
4868 OUT UCHAR *pDtimPeriod,
4869 OUT UCHAR *pBcastFlag,
4870 OUT UCHAR *pMessageToMe,
4871 OUT UCHAR SupRate[],
4872 OUT UCHAR *pSupRateLen,
4873 OUT UCHAR ExtRate[],
4874 OUT UCHAR *pExtRateLen,
4875 OUT UCHAR *pCkipFlag,
4876 OUT UCHAR *pAironetCellPowerLimit,
4877 OUT PEDCA_PARM pEdcaParm,
4878 OUT PQBSS_LOAD_PARM pQbssLoad,
4879 OUT PQOS_CAPABILITY_PARM pQosCapability,
4880 OUT ULONG *pRalinkIe,
4881 OUT UCHAR *pHtCapabilityLen,
4882 #ifdef CONFIG_STA_SUPPORT
4883 OUT UCHAR *pPreNHtCapabilityLen,
4884 #endif // CONFIG_STA_SUPPORT //
4885 OUT HT_CAPABILITY_IE *pHtCapability,
4886 OUT UCHAR *AddHtInfoLen,
4887 OUT ADD_HT_INFO_IE *AddHtInfo,
4888 OUT UCHAR *NewExtChannel,
4889 OUT USHORT *LengthVIE,
4890 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4892 BOOLEAN PeerAddBAReqActionSanity(
4893 IN PRTMP_ADAPTER pAd,
4898 BOOLEAN PeerAddBARspActionSanity(
4899 IN PRTMP_ADAPTER pAd,
4903 BOOLEAN PeerDelBAActionSanity(
4904 IN PRTMP_ADAPTER pAd,
4909 BOOLEAN MlmeAssocReqSanity(
4910 IN PRTMP_ADAPTER pAd,
4914 OUT USHORT *CapabilityInfo,
4916 OUT USHORT *ListenIntv);
4918 BOOLEAN MlmeAuthReqSanity(
4919 IN PRTMP_ADAPTER pAd,
4926 BOOLEAN MlmeStartReqSanity(
4927 IN PRTMP_ADAPTER pAd,
4931 OUT UCHAR *Ssidlen);
4933 BOOLEAN PeerAuthSanity(
4934 IN PRTMP_ADAPTER pAd,
4941 OUT CHAR ChlgText[]);
4943 BOOLEAN PeerAssocRspSanity(
4944 IN PRTMP_ADAPTER pAd,
4948 OUT USHORT *pCapabilityInfo,
4949 OUT USHORT *pStatus,
4951 OUT UCHAR SupRate[],
4952 OUT UCHAR *pSupRateLen,
4953 OUT UCHAR ExtRate[],
4954 OUT UCHAR *pExtRateLen,
4955 OUT HT_CAPABILITY_IE *pHtCapability,
4956 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4957 OUT UCHAR *pHtCapabilityLen,
4958 OUT UCHAR *pAddHtInfoLen,
4959 OUT UCHAR *pNewExtChannelOffset,
4960 OUT PEDCA_PARM pEdcaParm,
4961 OUT UCHAR *pCkipFlag);
4963 BOOLEAN PeerDisassocSanity(
4964 IN PRTMP_ADAPTER pAd,
4968 OUT USHORT *Reason);
4970 BOOLEAN PeerWpaMessageSanity(
4971 IN PRTMP_ADAPTER pAd,
4972 IN PEAPOL_PACKET pMsg,
4975 IN MAC_TABLE_ENTRY *pEntry);
4977 BOOLEAN PeerDeauthSanity(
4978 IN PRTMP_ADAPTER pAd,
4982 OUT USHORT *Reason);
4984 BOOLEAN PeerProbeReqSanity(
4985 IN PRTMP_ADAPTER pAd,
4990 OUT UCHAR *pSsidLen);
4996 OUT UCHAR *BcastFlag,
4997 OUT UCHAR *DtimCount,
4998 OUT UCHAR *DtimPeriod,
4999 OUT UCHAR *MessageToMe);
5001 UCHAR ChannelSanity(
5002 IN PRTMP_ADAPTER pAd,
5005 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5006 IN PBSS_ENTRY pBss);
5008 BOOLEAN MlmeDelBAReqSanity(
5009 IN PRTMP_ADAPTER pAd,
5013 BOOLEAN MlmeAddBAReqSanity(
5014 IN PRTMP_ADAPTER pAd,
5019 ULONG MakeOutgoingFrame(
5021 OUT ULONG *Length, ...);
5024 IN PRTMP_ADAPTER pAd,
5028 IN PRTMP_ADAPTER pAd);
5030 VOID AsicUpdateAutoFallBackTable(
5031 IN PRTMP_ADAPTER pAd,
5034 VOID MlmePeriodicExec(
5035 IN PVOID SystemSpecific1,
5036 IN PVOID FunctionContext,
5037 IN PVOID SystemSpecific2,
5038 IN PVOID SystemSpecific3);
5041 IN PVOID SystemSpecific1,
5042 IN PVOID FunctionContext,
5043 IN PVOID SystemSpecific2,
5044 IN PVOID SystemSpecific3);
5047 IN PVOID SystemSpecific1,
5048 IN PVOID FunctionContext,
5049 IN PVOID SystemSpecific2,
5050 IN PVOID SystemSpecific3);
5052 VOID STAMlmePeriodicExec(
5056 IN PRTMP_ADAPTER pAd);
5058 VOID MlmeAutoReconnectLastSSID(
5059 IN PRTMP_ADAPTER pAd);
5061 BOOLEAN MlmeValidateSSID(
5065 VOID MlmeCheckForRoaming(
5066 IN PRTMP_ADAPTER pAd,
5069 VOID MlmeCheckForFastRoaming(
5070 IN PRTMP_ADAPTER pAd,
5073 VOID MlmeDynamicTxRateSwitching(
5074 IN PRTMP_ADAPTER pAd);
5077 IN PRTMP_ADAPTER pAd,
5078 IN PMAC_TABLE_ENTRY pEntry,
5079 IN PRTMP_TX_RATE_SWITCH pTxRate);
5081 VOID MlmeSelectTxRateTable(
5082 IN PRTMP_ADAPTER pAd,
5083 IN PMAC_TABLE_ENTRY pEntry,
5085 IN PUCHAR pTableSize,
5086 IN PUCHAR pInitTxRateIdx);
5088 VOID MlmeCalculateChannelQuality(
5089 IN PRTMP_ADAPTER pAd,
5092 VOID MlmeCheckPsmChange(
5093 IN PRTMP_ADAPTER pAd,
5097 IN PRTMP_ADAPTER pAd,
5100 VOID MlmeSetTxPreamble(
5101 IN PRTMP_ADAPTER pAd,
5102 IN USHORT TxPreamble);
5104 VOID UpdateBasicRateBitmap(
5105 IN PRTMP_ADAPTER pAd);
5107 VOID MlmeUpdateTxRates(
5108 IN PRTMP_ADAPTER pAd,
5112 #ifdef DOT11_N_SUPPORT
5113 VOID MlmeUpdateHtTxRates(
5114 IN PRTMP_ADAPTER pAd,
5116 #endif // DOT11_N_SUPPORT //
5118 VOID RTMPCheckRates(
5119 IN PRTMP_ADAPTER pAd,
5120 IN OUT UCHAR SupRate[],
5121 IN OUT UCHAR *SupRateLen);
5123 #ifdef CONFIG_STA_SUPPORT
5124 BOOLEAN RTMPCheckChannel(
5125 IN PRTMP_ADAPTER pAd,
5126 IN UCHAR CentralChannel,
5128 #endif // CONFIG_STA_SUPPORT //
5130 BOOLEAN RTMPCheckHt(
5131 IN PRTMP_ADAPTER pAd,
5133 IN OUT HT_CAPABILITY_IE *pHtCapability,
5134 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5136 VOID StaQuickResponeForRateUpExec(
5137 IN PVOID SystemSpecific1,
5138 IN PVOID FunctionContext,
5139 IN PVOID SystemSpecific2,
5140 IN PVOID SystemSpecific3);
5142 VOID AsicBbpTuning1(
5143 IN PRTMP_ADAPTER pAd);
5145 VOID AsicBbpTuning2(
5146 IN PRTMP_ADAPTER pAd);
5148 VOID RTMPUpdateMlmeRate(
5149 IN PRTMP_ADAPTER pAd);
5152 IN PRTMP_ADAPTER pAd,
5158 IN PRTMP_ADAPTER pAd,
5161 VOID AsicEvaluateRxAnt(
5162 IN PRTMP_ADAPTER pAd);
5164 VOID AsicRxAntEvalTimeout(
5165 IN PVOID SystemSpecific1,
5166 IN PVOID FunctionContext,
5167 IN PVOID SystemSpecific2,
5168 IN PVOID SystemSpecific3);
5170 VOID APSDPeriodicExec(
5171 IN PVOID SystemSpecific1,
5172 IN PVOID FunctionContext,
5173 IN PVOID SystemSpecific2,
5174 IN PVOID SystemSpecific3);
5176 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5177 IN PRTMP_ADAPTER pAd,
5178 IN PMAC_TABLE_ENTRY pEntry);
5180 UCHAR RTMPStaFixedTxMode(
5181 IN PRTMP_ADAPTER pAd,
5182 IN PMAC_TABLE_ENTRY pEntry);
5184 VOID RTMPUpdateLegacyTxSetting(
5185 UCHAR fixed_tx_mode,
5186 PMAC_TABLE_ENTRY pEntry);
5188 BOOLEAN RTMPAutoRateSwitchCheck(
5189 IN PRTMP_ADAPTER pAd);
5191 NDIS_STATUS MlmeInit(
5192 IN PRTMP_ADAPTER pAd);
5195 IN PRTMP_ADAPTER pAd);
5198 IN PRTMP_ADAPTER pAd);
5200 VOID MlmeResetRalinkCounters(
5201 IN PRTMP_ADAPTER pAd);
5203 VOID BuildChannelList(
5204 IN PRTMP_ADAPTER pAd);
5207 IN PRTMP_ADAPTER pAd);
5210 IN PRTMP_ADAPTER pAd,
5213 VOID ChangeToCellPowerLimit(
5214 IN PRTMP_ADAPTER pAd,
5215 IN UCHAR AironetCellPowerLimit);
5218 IN PRTMP_ADAPTER pAd,
5222 IN PRTMP_ADAPTER pAd,
5226 IN PRTMP_ADAPTER pAd);
5229 IN PRTMP_ADAPTER pAd,
5234 IN PRTMP_ADAPTER pAd);
5237 IN PRTMP_ADAPTER pAd);
5240 IN PRTMP_ADAPTER pAd);
5242 USHORT RTMP_EEPROM_READ16(
5243 IN PRTMP_ADAPTER pAd,
5246 VOID RTMP_EEPROM_WRITE16(
5247 IN PRTMP_ADAPTER pAd,
5252 // Prototypes of function definition in rtmp_tkip.c
5254 VOID RTMPInitTkipEngine(
5255 IN PRTMP_ADAPTER pAd,
5264 VOID RTMPInitMICEngine(
5265 IN PRTMP_ADAPTER pAd,
5269 IN UCHAR UserPriority,
5272 BOOLEAN RTMPTkipCompareMICValue(
5273 IN PRTMP_ADAPTER pAd,
5278 IN UCHAR UserPriority,
5281 VOID RTMPCalculateMICValue(
5282 IN PRTMP_ADAPTER pAd,
5283 IN PNDIS_PACKET pPacket,
5285 IN PCIPHER_KEY pKey,
5288 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5289 IN PRTMP_ADAPTER pAd,
5297 VOID RTMPTkipAppendByte(
5298 IN PTKIP_KEY_INFO pTkip,
5301 VOID RTMPTkipAppend(
5302 IN PTKIP_KEY_INFO pTkip,
5306 VOID RTMPTkipGetMIC(
5307 IN PTKIP_KEY_INFO pTkip);
5309 BOOLEAN RTMPSoftDecryptTKIP(
5310 IN PRTMP_ADAPTER pAd,
5312 IN ULONG DataByteCnt,
5313 IN UCHAR UserPriority,
5314 IN PCIPHER_KEY pWpaKey);
5316 BOOLEAN RTMPSoftDecryptAES(
5317 IN PRTMP_ADAPTER pAd,
5319 IN ULONG DataByteCnt,
5320 IN PCIPHER_KEY pWpaKey);
5323 // Prototypes of function definition in cmm_info.c
5325 NDIS_STATUS RTMPWPARemoveKeyProc(
5326 IN PRTMP_ADAPTER pAd,
5329 VOID RTMPWPARemoveAllKeys(
5330 IN PRTMP_ADAPTER pAd);
5332 BOOLEAN RTMPCheckStrPrintAble(
5336 VOID RTMPSetPhyMode(
5337 IN PRTMP_ADAPTER pAd,
5340 VOID RTMPUpdateHTIE(
5341 IN RT_HT_CAPABILITY *pRtHt,
5343 OUT HT_CAPABILITY_IE *pHtCapability,
5344 OUT ADD_HT_INFO_IE *pAddHtInfo);
5346 VOID RTMPAddWcidAttributeEntry(
5347 IN PRTMP_ADAPTER pAd,
5351 IN MAC_TABLE_ENTRY *pEntry);
5353 CHAR *GetEncryptType(
5359 VOID RTMPIoctlGetSiteSurvey(
5360 IN PRTMP_ADAPTER pAdapter,
5361 IN struct iwreq *wrq);
5363 VOID RTMPIoctlGetMacTable(
5364 IN PRTMP_ADAPTER pAd,
5365 IN struct iwreq *wrq);
5367 VOID RTMPIndicateWPA2Status(
5368 IN PRTMP_ADAPTER pAdapter);
5370 VOID RTMPOPModeSwitching(
5371 IN PRTMP_ADAPTER pAd);
5373 #ifdef CONFIG_STA_SUPPORT
5374 VOID RTMPAddBSSIDCipher(
5375 IN PRTMP_ADAPTER pAd,
5377 IN PNDIS_802_11_KEY pKey,
5378 IN UCHAR CipherAlg);
5379 #endif // CONFIG_STA_SUPPORT //
5381 #ifdef DOT11_N_SUPPORT
5383 IN PRTMP_ADAPTER pAd,
5384 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5386 VOID RTMPSetIndividualHT(
5387 IN PRTMP_ADAPTER pAd,
5389 #endif // DOT11_N_SUPPORT //
5391 VOID RTMPSendWirelessEvent(
5392 IN PRTMP_ADAPTER pAd,
5393 IN USHORT Event_flag,
5398 VOID NICUpdateCntlCounters(
5399 IN PRTMP_ADAPTER pAd,
5400 IN PHEADER_802_11 pHeader,
5402 IN PRXWI_STRUC pRxWI);
5404 // prototype in wpa.c
5406 BOOLEAN WpaMsgTypeSubst(
5410 VOID WpaPskStateMachineInit(
5411 IN PRTMP_ADAPTER pAd,
5412 IN STATE_MACHINE *S,
5413 OUT STATE_MACHINE_FUNC Trans[]);
5415 VOID WpaEAPOLKeyAction(
5416 IN PRTMP_ADAPTER pAd,
5417 IN MLME_QUEUE_ELEM *Elem);
5419 VOID WpaPairMsg1Action(
5420 IN PRTMP_ADAPTER pAd,
5421 IN MLME_QUEUE_ELEM *Elem);
5423 VOID WpaPairMsg3Action(
5424 IN PRTMP_ADAPTER pAd,
5425 IN MLME_QUEUE_ELEM *Elem);
5427 VOID WpaGroupMsg1Action(
5428 IN PRTMP_ADAPTER pAd,
5429 IN MLME_QUEUE_ELEM *Elem);
5431 VOID WpaMacHeaderInit(
5432 IN PRTMP_ADAPTER pAd,
5433 IN OUT PHEADER_802_11 pHdr80211,
5437 VOID Wpa2PairMsg1Action(
5438 IN PRTMP_ADAPTER pAd,
5439 IN MLME_QUEUE_ELEM *Elem);
5441 VOID Wpa2PairMsg3Action(
5442 IN PRTMP_ADAPTER pAd,
5443 IN MLME_QUEUE_ELEM *Elem);
5445 BOOLEAN ParseKeyData(
5446 IN PRTMP_ADAPTER pAd,
5448 IN UCHAR KeyDataLen,
5449 IN UCHAR bPairewise);
5451 VOID RTMPToWirelessSta(
5452 IN PRTMP_ADAPTER pAd,
5453 IN PUCHAR pHeader802_3,
5457 IN BOOLEAN is4wayFrame);
5485 IN PRTMP_ADAPTER pAd,
5495 IN PRTMP_ADAPTER pAd,
5500 // prototype in aironet.c
5502 VOID AironetStateMachineInit(
5503 IN PRTMP_ADAPTER pAd,
5504 IN STATE_MACHINE *S,
5505 OUT STATE_MACHINE_FUNC Trans[]);
5507 VOID AironetMsgAction(
5508 IN PRTMP_ADAPTER pAd,
5509 IN MLME_QUEUE_ELEM *Elem);
5511 VOID AironetRequestAction(
5512 IN PRTMP_ADAPTER pAd,
5513 IN MLME_QUEUE_ELEM *Elem);
5515 VOID ChannelLoadRequestAction(
5516 IN PRTMP_ADAPTER pAd,
5519 VOID NoiseHistRequestAction(
5520 IN PRTMP_ADAPTER pAd,
5523 VOID BeaconRequestAction(
5524 IN PRTMP_ADAPTER pAd,
5527 VOID AironetReportAction(
5528 IN PRTMP_ADAPTER pAd,
5529 IN MLME_QUEUE_ELEM *Elem);
5531 VOID ChannelLoadReportAction(
5532 IN PRTMP_ADAPTER pAd,
5535 VOID NoiseHistReportAction(
5536 IN PRTMP_ADAPTER pAd,
5539 VOID AironetFinalReportAction(
5540 IN PRTMP_ADAPTER pAd);
5542 VOID BeaconReportAction(
5543 IN PRTMP_ADAPTER pAd,
5546 VOID AironetAddBeaconReport(
5547 IN PRTMP_ADAPTER pAd,
5549 IN PMLME_QUEUE_ELEM pElem);
5551 VOID AironetCreateBeaconReportFromBssTable(
5552 IN PRTMP_ADAPTER pAd);
5554 VOID DBGPRINT_TX_RING(
5555 IN PRTMP_ADAPTER pAd,
5558 VOID DBGPRINT_RX_RING(
5559 IN PRTMP_ADAPTER pAd);
5562 IN PRTMP_ADAPTER pAd,
5564 IN UCHAR RssiNumber);
5567 #ifdef DOT11N_DRAFT3
5568 VOID BuildEffectedChannelList(
5569 IN PRTMP_ADAPTER pAd);
5570 #endif // DOT11N_DRAFT3 //
5573 VOID APAsicEvaluateRxAnt(
5574 IN PRTMP_ADAPTER pAd);
5577 VOID APAsicRxAntEvalTimeout(
5578 IN PRTMP_ADAPTER pAd);
5581 // function prototype in cmm_wpa.c
5583 BOOLEAN RTMPCheckWPAframe(
5584 IN PRTMP_ADAPTER pAd,
5585 IN PMAC_TABLE_ENTRY pEntry,
5587 IN ULONG DataByteCount,
5588 IN UCHAR FromWhichBSSID);
5590 VOID AES_GTK_KEY_UNWRAP(
5592 OUT UCHAR *plaintext,
5594 IN UCHAR *ciphertext);
5596 BOOLEAN RTMPCheckRSNIE(
5597 IN PRTMP_ADAPTER pAd,
5600 IN MAC_TABLE_ENTRY *pEntry,
5603 BOOLEAN RTMPParseEapolKeyData(
5604 IN PRTMP_ADAPTER pAd,
5606 IN UCHAR KeyDataLen,
5607 IN UCHAR GroupKeyIndex,
5610 IN MAC_TABLE_ENTRY *pEntry);
5612 VOID ConstructEapolMsg(
5613 IN PRTMP_ADAPTER pAd,
5614 IN UCHAR PeerAuthMode,
5615 IN UCHAR PeerWepStatus,
5616 IN UCHAR MyGroupKeyWepStatus,
5618 IN UCHAR DefaultKeyIdx,
5619 IN UCHAR *ReplayCounter,
5626 OUT PEAPOL_PACKET pMsg);
5629 IN PRTMP_ADAPTER pAd,
5630 IN UCHAR PeerWepStatus,
5632 OUT PEAPOL_PACKET pMsg);
5634 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5635 IN PRTMP_ADAPTER pAd,
5637 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5638 IN PCIPHER_KEY pShard_key);
5640 VOID ConstructEapolKeyData(
5641 IN PRTMP_ADAPTER pAd,
5642 IN UCHAR PeerAuthMode,
5643 IN UCHAR PeerWepStatus,
5644 IN UCHAR GroupKeyWepStatus,
5646 IN UCHAR DefaultKeyIdx,
5647 IN BOOLEAN bWPA2Capable,
5652 OUT PEAPOL_PACKET pMsg);
5655 IN PRTMP_ADAPTER pAd,
5661 // function prototype in ap_wpa.c
5664 BOOLEAN APWpaMsgTypeSubst(
5668 MAC_TABLE_ENTRY *PACInquiry(
5669 IN PRTMP_ADAPTER pAd,
5672 BOOLEAN RTMPCheckMcast(
5673 IN PRTMP_ADAPTER pAd,
5674 IN PEID_STRUCT eid_ptr,
5675 IN MAC_TABLE_ENTRY *pEntry);
5677 BOOLEAN RTMPCheckUcast(
5678 IN PRTMP_ADAPTER pAd,
5679 IN PEID_STRUCT eid_ptr,
5680 IN MAC_TABLE_ENTRY *pEntry);
5682 BOOLEAN RTMPCheckAUTH(
5683 IN PRTMP_ADAPTER pAd,
5684 IN PEID_STRUCT eid_ptr,
5685 IN MAC_TABLE_ENTRY *pEntry);
5687 VOID WPAStart4WayHS(
5688 IN PRTMP_ADAPTER pAd,
5689 IN MAC_TABLE_ENTRY *pEntry,
5690 IN ULONG TimeInterval);
5692 VOID WPAStart2WayGroupHS(
5693 IN PRTMP_ADAPTER pAd,
5694 IN MAC_TABLE_ENTRY *pEntry);
5696 VOID APWpaEAPPacketAction(
5697 IN PRTMP_ADAPTER pAd,
5698 IN MLME_QUEUE_ELEM *Elem);
5700 VOID APWpaEAPOLStartAction(
5701 IN PRTMP_ADAPTER pAd,
5702 IN MLME_QUEUE_ELEM *Elem);
5704 VOID APWpaEAPOLLogoffAction(
5705 IN PRTMP_ADAPTER pAd,
5706 IN MLME_QUEUE_ELEM *Elem);
5708 VOID APWpaEAPOLKeyAction(
5709 IN PRTMP_ADAPTER pAd,
5710 IN MLME_QUEUE_ELEM *Elem);
5712 VOID APWpaEAPOLASFAlertAction(
5713 IN PRTMP_ADAPTER pAd,
5714 IN MLME_QUEUE_ELEM *Elem);
5716 VOID HandleCounterMeasure(
5717 IN PRTMP_ADAPTER pAd,
5718 IN MAC_TABLE_ENTRY *pEntry);
5720 VOID PeerPairMsg2Action(
5721 IN PRTMP_ADAPTER pAd,
5722 IN MAC_TABLE_ENTRY *pEntry,
5723 IN MLME_QUEUE_ELEM *Elem);
5725 VOID PeerPairMsg4Action(
5726 IN PRTMP_ADAPTER pAd,
5727 IN MAC_TABLE_ENTRY *pEntry,
5728 IN MLME_QUEUE_ELEM *Elem);
5731 IN PVOID SystemSpecific1,
5732 IN PVOID FunctionContext,
5733 IN PVOID SystemSpecific2,
5734 IN PVOID SystemSpecific3);
5737 IN PVOID SystemSpecific1,
5738 IN PVOID FunctionContext,
5739 IN PVOID SystemSpecific2,
5740 IN PVOID SystemSpecific3);
5742 VOID EnqueueStartForPSKExec(
5743 IN PVOID SystemSpecific1,
5744 IN PVOID FunctionContext,
5745 IN PVOID SystemSpecific2,
5746 IN PVOID SystemSpecific3);
5748 VOID RTMPHandleSTAKey(
5749 IN PRTMP_ADAPTER pAdapter,
5750 IN MAC_TABLE_ENTRY *pEntry,
5751 IN MLME_QUEUE_ELEM *Elem);
5753 VOID PeerGroupMsg2Action(
5754 IN PRTMP_ADAPTER pAd,
5755 IN PMAC_TABLE_ENTRY pEntry,
5759 VOID PairDisAssocAction(
5760 IN PRTMP_ADAPTER pAd,
5761 IN PMAC_TABLE_ENTRY pEntry,
5764 VOID MlmeDeAuthAction(
5765 IN PRTMP_ADAPTER pAd,
5766 IN PMAC_TABLE_ENTRY pEntry,
5769 VOID GREKEYPeriodicExec(
5770 IN PVOID SystemSpecific1,
5771 IN PVOID FunctionContext,
5772 IN PVOID SystemSpecific2,
5773 IN PVOID SystemSpecific3);
5795 IN PRTMP_ADAPTER pAd,
5798 VOID AES_GTK_KEY_WRAP(
5800 IN UCHAR *plaintext,
5802 OUT UCHAR *ciphertext);
5805 IN PRTMP_ADAPTER pAdapter,
5809 VOID APToWirelessSta(
5810 IN PRTMP_ADAPTER pAd,
5811 IN MAC_TABLE_ENTRY *pEntry,
5812 IN PUCHAR pHeader802_3,
5816 IN BOOLEAN bClearFrame);
5818 VOID RTMPAddPMKIDCache(
5819 IN PRTMP_ADAPTER pAd,
5825 INT RTMPSearchPMKIDCache(
5826 IN PRTMP_ADAPTER pAd,
5830 VOID RTMPDeletePMKIDCache(
5831 IN PRTMP_ADAPTER pAd,
5835 VOID RTMPMaintainPMKIDCache(
5836 IN PRTMP_ADAPTER pAd);
5838 VOID RTMPSendTriggerFrame(
5839 IN PRTMP_ADAPTER pAd,
5843 IN BOOLEAN bQosNull);
5846 VOID RTMPFilterCalibration(
5847 IN PRTMP_ADAPTER pAd);
5851 //typedef void (*TIMER_FUNCTION)(unsigned long);
5855 VOID RTMP_SetPeriodicTimer(
5856 IN NDIS_MINIPORT_TIMER *pTimer,
5857 IN unsigned long timeout);
5859 VOID RTMP_OS_Init_Timer(
5860 IN PRTMP_ADAPTER pAd,
5861 IN NDIS_MINIPORT_TIMER *pTimer,
5862 IN TIMER_FUNCTION function,
5865 VOID RTMP_OS_Add_Timer(
5866 IN NDIS_MINIPORT_TIMER *pTimer,
5867 IN unsigned long timeout);
5869 VOID RTMP_OS_Mod_Timer(
5870 IN NDIS_MINIPORT_TIMER *pTimer,
5871 IN unsigned long timeout);
5874 VOID RTMP_OS_Del_Timer(
5875 IN NDIS_MINIPORT_TIMER *pTimer,
5876 OUT BOOLEAN *pCancelled);
5879 VOID RTMP_OS_Release_Packet(
5880 IN PRTMP_ADAPTER pAd,
5881 IN PQUEUE_ENTRY pEntry);
5886 NDIS_STATUS os_alloc_mem(
5887 IN PRTMP_ADAPTER pAd,
5891 NDIS_STATUS os_free_mem(
5892 IN PRTMP_ADAPTER pAd,
5896 void RTMP_AllocateSharedMemory(
5897 IN PRTMP_ADAPTER pAd,
5900 OUT PVOID *VirtualAddress,
5901 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5903 VOID RTMPFreeTxRxRingMemory(
5904 IN PRTMP_ADAPTER pAd);
5906 NDIS_STATUS AdapterBlockAllocateMemory(
5910 void RTMP_AllocateTxDescMemory(
5911 IN PRTMP_ADAPTER pAd,
5915 OUT PVOID *VirtualAddress,
5916 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5918 void RTMP_AllocateFirstTxBuffer(
5919 IN PRTMP_ADAPTER pAd,
5923 OUT PVOID *VirtualAddress,
5924 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5926 void RTMP_AllocateMgmtDescMemory(
5927 IN PRTMP_ADAPTER pAd,
5930 OUT PVOID *VirtualAddress,
5931 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5933 void RTMP_AllocateRxDescMemory(
5934 IN PRTMP_ADAPTER pAd,
5937 OUT PVOID *VirtualAddress,
5938 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5940 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5941 IN PRTMP_ADAPTER pAd,
5944 OUT PVOID *VirtualAddress,
5945 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5947 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5948 IN PRTMP_ADAPTER pAd,
5951 OUT PVOID *VirtualAddress);
5953 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5954 IN PRTMP_ADAPTER pAd,
5957 void RTMP_QueryPacketInfo(
5958 IN PNDIS_PACKET pPacket,
5959 OUT PACKET_INFO *pPacketInfo,
5960 OUT PUCHAR *pSrcBufVA,
5961 OUT UINT *pSrcBufLen);
5963 void RTMP_QueryNextPacketInfo(
5964 IN PNDIS_PACKET *ppPacket,
5965 OUT PACKET_INFO *pPacketInfo,
5966 OUT PUCHAR *pSrcBufVA,
5967 OUT UINT *pSrcBufLen);
5970 BOOLEAN RTMP_FillTxBlkInfo(
5971 IN RTMP_ADAPTER *pAd,
5975 PRTMP_SCATTER_GATHER_LIST
5976 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5979 void announce_802_3_packet(
5980 IN PRTMP_ADAPTER pAd,
5981 IN PNDIS_PACKET pPacket);
5984 UINT BA_Reorder_AMSDU_Annnounce(
5985 IN PRTMP_ADAPTER pAd,
5986 IN PNDIS_PACKET pPacket);
5989 UINT Handle_AMSDU_Packet(
5990 IN PRTMP_ADAPTER pAd,
5993 IN UCHAR FromWhichBSSID);
5996 void convert_802_11_to_802_3_packet(
5997 IN PRTMP_ADAPTER pAd,
5998 IN PNDIS_PACKET pPacket,
6002 IN UCHAR FromWhichBSSID);
6005 PNET_DEV get_netdev_from_bssid(
6006 IN PRTMP_ADAPTER pAd,
6007 IN UCHAR FromWhichBSSID);
6010 PNDIS_PACKET duplicate_pkt(
6011 IN PRTMP_ADAPTER pAd,
6012 IN PUCHAR pHeader802_3,
6016 IN UCHAR FromWhichBSSID);
6019 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6020 IN PRTMP_ADAPTER pAd,
6021 IN PNDIS_PACKET pOldPkt);
6023 PNDIS_PACKET duplicate_pkt_with_VLAN(
6024 IN PRTMP_ADAPTER pAd,
6025 IN PUCHAR pHeader802_3,
6029 IN UCHAR FromWhichBSSID);
6031 PNDIS_PACKET duplicate_pkt_with_WPI(
6032 IN PRTMP_ADAPTER pAd,
6033 IN PNDIS_PACKET pPacket,
6034 IN UINT32 ext_head_len,
6035 IN UINT32 ext_tail_len);
6037 UCHAR VLAN_8023_Header_Copy(
6038 IN PRTMP_ADAPTER pAd,
6039 IN PUCHAR pHeader802_3,
6042 IN UCHAR FromWhichBSSID);
6044 #ifdef DOT11_N_SUPPORT
6045 void ba_flush_reordering_timeout_mpdus(
6046 IN PRTMP_ADAPTER pAd,
6047 IN PBA_REC_ENTRY pBAEntry,
6051 VOID BAOriSessionSetUp(
6052 IN PRTMP_ADAPTER pAd,
6053 IN MAC_TABLE_ENTRY *pEntry,
6057 IN BOOLEAN isForced);
6059 VOID BASessionTearDownALL(
6060 IN OUT PRTMP_ADAPTER pAd,
6062 #endif // DOT11_N_SUPPORT //
6064 BOOLEAN OS_Need_Clone_Packet(void);
6067 VOID build_tx_packet(
6068 IN PRTMP_ADAPTER pAd,
6069 IN PNDIS_PACKET pPacket,
6074 VOID BAOriSessionTearDown(
6075 IN OUT PRTMP_ADAPTER pAd,
6078 IN BOOLEAN bPassive,
6079 IN BOOLEAN bForceSend);
6081 VOID BARecSessionTearDown(
6082 IN OUT PRTMP_ADAPTER pAd,
6085 IN BOOLEAN bPassive);
6087 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6088 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6090 ULONG AutoChBssInsertEntry(
6091 IN PRTMP_ADAPTER pAd,
6098 void AutoChBssTableInit(
6099 IN PRTMP_ADAPTER pAd);
6101 void ChannelInfoInit(
6102 IN PRTMP_ADAPTER pAd);
6104 void AutoChBssTableDestroy(
6105 IN PRTMP_ADAPTER pAd);
6107 void ChannelInfoDestroy(
6108 IN PRTMP_ADAPTER pAd);
6110 UCHAR New_ApAutoSelectChannel(
6111 IN PRTMP_ADAPTER pAd);
6113 BOOLEAN rtstrmactohex(
6117 BOOLEAN rtstrcasecmp(
6121 char *rtstrstruncasecmp(
6127 IN const char * s2);
6131 IN const char * ct);
6135 unsigned int *addr);
6137 ////////// common ioctl functions //////////
6138 INT Set_DriverVersion_Proc(
6139 IN PRTMP_ADAPTER pAd,
6142 INT Set_CountryRegion_Proc(
6143 IN PRTMP_ADAPTER pAd,
6146 INT Set_CountryRegionABand_Proc(
6147 IN PRTMP_ADAPTER pAd,
6150 INT Set_WirelessMode_Proc(
6151 IN PRTMP_ADAPTER pAd,
6154 INT Set_Channel_Proc(
6155 IN PRTMP_ADAPTER pAd,
6158 INT Set_ShortSlot_Proc(
6159 IN PRTMP_ADAPTER pAd,
6162 INT Set_TxPower_Proc(
6163 IN PRTMP_ADAPTER pAd,
6166 INT Set_BGProtection_Proc(
6167 IN PRTMP_ADAPTER pAd,
6170 INT Set_TxPreamble_Proc(
6171 IN PRTMP_ADAPTER pAd,
6174 INT Set_RTSThreshold_Proc(
6175 IN PRTMP_ADAPTER pAd,
6178 INT Set_FragThreshold_Proc(
6179 IN PRTMP_ADAPTER pAd,
6182 INT Set_TxBurst_Proc(
6183 IN PRTMP_ADAPTER pAd,
6186 #ifdef AGGREGATION_SUPPORT
6187 INT Set_PktAggregate_Proc(
6188 IN PRTMP_ADAPTER pAd,
6192 INT Set_IEEE80211H_Proc(
6193 IN PRTMP_ADAPTER pAd,
6198 IN PRTMP_ADAPTER pAd,
6202 INT Show_DescInfo_Proc(
6203 IN PRTMP_ADAPTER pAd,
6206 INT Set_ResetStatCounter_Proc(
6207 IN PRTMP_ADAPTER pAd,
6210 #ifdef DOT11_N_SUPPORT
6211 INT Set_BASetup_Proc(
6212 IN PRTMP_ADAPTER pAd,
6215 INT Set_BADecline_Proc(
6216 IN PRTMP_ADAPTER pAd,
6219 INT Set_BAOriTearDown_Proc(
6220 IN PRTMP_ADAPTER pAd,
6223 INT Set_BARecTearDown_Proc(
6224 IN PRTMP_ADAPTER pAd,
6228 IN PRTMP_ADAPTER pAd,
6232 IN PRTMP_ADAPTER pAd,
6236 IN PRTMP_ADAPTER pAd,
6239 INT Set_HtOpMode_Proc(
6240 IN PRTMP_ADAPTER pAd,
6243 INT Set_HtStbc_Proc(
6244 IN PRTMP_ADAPTER pAd,
6248 IN PRTMP_ADAPTER pAd,
6251 INT Set_HtExtcha_Proc(
6252 IN PRTMP_ADAPTER pAd,
6255 INT Set_HtMpduDensity_Proc(
6256 IN PRTMP_ADAPTER pAd,
6259 INT Set_HtBaWinSize_Proc(
6260 IN PRTMP_ADAPTER pAd,
6264 IN PRTMP_ADAPTER pAd,
6267 INT Set_HtLinkAdapt_Proc(
6268 IN PRTMP_ADAPTER pAd,
6271 INT Set_HtAmsdu_Proc(
6272 IN PRTMP_ADAPTER pAd,
6275 INT Set_HtAutoBa_Proc(
6276 IN PRTMP_ADAPTER pAd,
6279 INT Set_HtProtect_Proc(
6280 IN PRTMP_ADAPTER pAd,
6283 INT Set_HtMimoPs_Proc(
6284 IN PRTMP_ADAPTER pAd,
6288 INT Set_ForceShortGI_Proc(
6289 IN PRTMP_ADAPTER pAd,
6292 INT Set_ForceGF_Proc(
6293 IN PRTMP_ADAPTER pAd,
6297 IN PRTMP_ADAPTER pAd);
6299 INT Set_SendPSMPAction_Proc(
6300 IN PRTMP_ADAPTER pAd,
6303 INT Set_HtMIMOPSmode_Proc(
6304 IN PRTMP_ADAPTER pAd,
6308 INT Set_HtTxBASize_Proc(
6309 IN PRTMP_ADAPTER pAd,
6311 #endif // DOT11_N_SUPPORT //
6315 #ifdef CONFIG_STA_SUPPORT
6317 VOID RTMPSendDLSTearDownFrame(
6318 IN PRTMP_ADAPTER pAd,
6321 #ifdef DOT11_N_SUPPORT
6324 IN PRTMP_ADAPTER pAd,
6325 OUT PQUERYBA_TABLE pBAT);
6326 #endif // DOT11_N_SUPPORT //
6328 #ifdef WPA_SUPPLICANT_SUPPORT
6329 INT WpaCheckEapCode(
6330 IN PRTMP_ADAPTER pAd,
6335 VOID WpaSendMicFailureToWpaSupplicant(
6336 IN PRTMP_ADAPTER pAd,
6337 IN BOOLEAN bUnicast);
6339 VOID SendAssocIEsToWpaSupplicant(
6340 IN PRTMP_ADAPTER pAd);
6341 #endif // WPA_SUPPLICANT_SUPPORT //
6343 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6344 int wext_notify_event_assoc(
6345 IN RTMP_ADAPTER *pAd);
6346 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6348 #endif // CONFIG_STA_SUPPORT //
6352 #ifdef DOT11_N_SUPPORT
6353 VOID Handle_BSS_Width_Trigger_Events(
6354 IN PRTMP_ADAPTER pAd);
6356 void build_ext_channel_switch_ie(
6357 IN PRTMP_ADAPTER pAd,
6358 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6359 #endif // DOT11_N_SUPPORT //
6362 BOOLEAN APRxDoneInterruptHandle(
6363 IN PRTMP_ADAPTER pAd);
6365 BOOLEAN STARxDoneInterruptHandle(
6366 IN PRTMP_ADAPTER pAd,
6369 #ifdef DOT11_N_SUPPORT
6370 // AMPDU packet indication
6371 VOID Indicate_AMPDU_Packet(
6372 IN PRTMP_ADAPTER pAd,
6374 IN UCHAR FromWhichBSSID);
6376 // AMSDU packet indication
6377 VOID Indicate_AMSDU_Packet(
6378 IN PRTMP_ADAPTER pAd,
6380 IN UCHAR FromWhichBSSID);
6381 #endif // DOT11_N_SUPPORT //
6383 // Normal legacy Rx packet indication
6384 VOID Indicate_Legacy_Packet(
6385 IN PRTMP_ADAPTER pAd,
6387 IN UCHAR FromWhichBSSID);
6389 VOID Indicate_EAPOL_Packet(
6390 IN PRTMP_ADAPTER pAd,
6392 IN UCHAR FromWhichBSSID);
6394 void update_os_packet_info(
6395 IN PRTMP_ADAPTER pAd,
6397 IN UCHAR FromWhichBSSID);
6399 void wlan_802_11_to_802_3_packet(
6400 IN PRTMP_ADAPTER pAd,
6402 IN PUCHAR pHeader802_3,
6403 IN UCHAR FromWhichBSSID);
6405 UINT deaggregate_AMSDU_announce(
6406 IN PRTMP_ADAPTER pAd,
6407 PNDIS_PACKET pPacket,
6412 #ifdef CONFIG_STA_SUPPORT
6413 // remove LLC and get 802_3 Header
6414 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6416 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6418 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6420 _pDA = _pRxBlk->pHeader->Addr3; \
6421 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6425 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6427 _pDA = _pRxBlk->pHeader->Addr1; \
6428 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6429 _pSA = _pRxBlk->pHeader->Addr2; \
6431 _pSA = _pRxBlk->pHeader->Addr3; \
6435 _pDA = _pRxBlk->pHeader->Addr1; \
6436 _pSA = _pRxBlk->pHeader->Addr2; \
6440 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6441 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6443 #endif // CONFIG_STA_SUPPORT //
6446 BOOLEAN APFowardWirelessStaToWirelessSta(
6447 IN PRTMP_ADAPTER pAd,
6448 IN PNDIS_PACKET pPacket,
6449 IN ULONG FromWhichBSSID);
6451 VOID Announce_or_Forward_802_3_Packet(
6452 IN PRTMP_ADAPTER pAd,
6453 IN PNDIS_PACKET pPacket,
6454 IN UCHAR FromWhichBSSID);
6456 VOID Sta_Announce_or_Forward_802_3_Packet(
6457 IN PRTMP_ADAPTER pAd,
6458 IN PNDIS_PACKET pPacket,
6459 IN UCHAR FromWhichBSSID);
6462 #ifdef CONFIG_STA_SUPPORT
6463 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6464 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6465 //announce_802_3_packet(_pAd, _pPacket);
6466 #endif // CONFIG_STA_SUPPORT //
6469 PNDIS_PACKET DuplicatePacket(
6470 IN PRTMP_ADAPTER pAd,
6471 IN PNDIS_PACKET pPacket,
6472 IN UCHAR FromWhichBSSID);
6475 PNDIS_PACKET ClonePacket(
6476 IN PRTMP_ADAPTER pAd,
6477 IN PNDIS_PACKET pPacket,
6482 // Normal, AMPDU or AMSDU
6483 VOID CmmRxnonRalinkFrameIndicate(
6484 IN PRTMP_ADAPTER pAd,
6486 IN UCHAR FromWhichBSSID);
6488 VOID CmmRxRalinkFrameIndicate(
6489 IN PRTMP_ADAPTER pAd,
6490 IN MAC_TABLE_ENTRY *pEntry,
6492 IN UCHAR FromWhichBSSID);
6494 VOID Update_Rssi_Sample(
6495 IN PRTMP_ADAPTER pAd,
6496 IN RSSI_SAMPLE *pRssi,
6497 IN PRXWI_STRUC pRxWI);
6499 PNDIS_PACKET GetPacketFromRxRing(
6500 IN PRTMP_ADAPTER pAd,
6501 OUT PRT28XX_RXD_STRUC pSaveRxD,
6502 OUT BOOLEAN *pbReschedule,
6503 IN OUT UINT32 *pRxPending);
6505 PNDIS_PACKET RTMPDeFragmentDataFrame(
6506 IN PRTMP_ADAPTER pAd,
6509 ////////////////////////////////////////
6511 #ifdef CONFIG_STA_SUPPORT
6513 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6514 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6515 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6516 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6517 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6518 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6519 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6520 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6521 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6522 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6523 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6526 P80211ENUM_msgitem_status_no_value = 0x00
6529 P80211ENUM_truth_false = 0x00,
6530 P80211ENUM_truth_true = 0x01
6533 /* Definition from madwifi */
6539 } p80211item_uint32_t;
6544 #define WLAN_DEVNAMELEN_MAX 16
6545 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6546 p80211item_uint32_t hosttime;
6547 p80211item_uint32_t mactime;
6548 p80211item_uint32_t channel;
6549 p80211item_uint32_t rssi;
6550 p80211item_uint32_t sq;
6551 p80211item_uint32_t signal;
6552 p80211item_uint32_t noise;
6553 p80211item_uint32_t rate;
6554 p80211item_uint32_t istx;
6555 p80211item_uint32_t frmlen;
6556 } wlan_ng_prism2_header;
6558 /* The radio capture header precedes the 802.11 header. */
6559 typedef struct PACKED _ieee80211_radiotap_header {
6560 UINT8 it_version; /* Version 0. Only increases
6561 * for drastic changes,
6562 * introduction of compatible
6563 * new fields does not count.
6566 UINT16 it_len; /* length of the whole
6567 * header in bytes, including
6568 * it_version, it_pad,
6569 * it_len, and data fields.
6571 UINT32 it_present; /* A bitmap telling which
6572 * fields are present. Set bit 31
6573 * (0x80000000) to extend the
6574 * bitmap by another 32 bits.
6575 * Additional extensions are made
6576 * by setting bit 31.
6578 }ieee80211_radiotap_header ;
6580 enum ieee80211_radiotap_type {
6581 IEEE80211_RADIOTAP_TSFT = 0,
6582 IEEE80211_RADIOTAP_FLAGS = 1,
6583 IEEE80211_RADIOTAP_RATE = 2,
6584 IEEE80211_RADIOTAP_CHANNEL = 3,
6585 IEEE80211_RADIOTAP_FHSS = 4,
6586 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6587 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6588 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6589 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6590 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6591 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6592 IEEE80211_RADIOTAP_ANTENNA = 11,
6593 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6594 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6597 #define WLAN_RADIOTAP_PRESENT ( \
6598 (1 << IEEE80211_RADIOTAP_TSFT) | \
6599 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6600 (1 << IEEE80211_RADIOTAP_RATE) | \
6603 typedef struct _wlan_radiotap_header {
6604 ieee80211_radiotap_header wt_ihdr;
6608 } wlan_radiotap_header;
6609 /* Definition from madwifi */
6611 void send_monitor_packets(
6612 IN PRTMP_ADAPTER pAd,
6615 #if WIRELESS_EXT >= 12
6616 // This function will be called when query /proc
6617 struct iw_statistics *rt28xx_get_wireless_stats(
6618 IN struct net_device *net_dev);
6621 VOID RTMPSetDesiredRates(
6622 IN PRTMP_ADAPTER pAdapter,
6624 #endif // CONFIG_STA_SUPPORT //
6626 INT Set_FixedTxMode_Proc(
6627 IN PRTMP_ADAPTER pAd,
6630 static inline char* GetPhyMode(
6640 #ifdef DOT11_N_SUPPORT
6644 case MODE_HTGREENFIELD:
6646 #endif // DOT11_N_SUPPORT //
6653 static inline char* GetBW(
6663 #ifdef DOT11_N_SUPPORT
6666 #endif // DOT11_N_SUPPORT //
6673 VOID RT28xxThreadTerminate(
6674 IN RTMP_ADAPTER *pAd);
6676 BOOLEAN RT28XXChipsetCheck(
6679 BOOLEAN RT28XXNetDevInit(
6681 IN struct net_device *net_dev,
6682 IN RTMP_ADAPTER *pAd);
6684 BOOLEAN RT28XXProbePostConfig(
6686 IN RTMP_ADAPTER *pAd,
6689 VOID RT28XXDMADisable(
6690 IN RTMP_ADAPTER *pAd);
6692 VOID RT28XXDMAEnable(
6693 IN RTMP_ADAPTER *pAd);
6695 VOID RT28xx_UpdateBeaconToAsic(
6696 IN RTMP_ADAPTER * pAd,
6699 IN ULONG UpdatePos);
6702 IN struct net_device *net_dev,
6703 IN OUT struct ifreq *rq,
6707 #ifdef CONFIG_STA_SUPPORT
6708 INT rt28xx_sta_ioctl(
6709 IN struct net_device *net_dev,
6710 IN OUT struct ifreq *rq,
6712 #endif // CONFIG_STA_SUPPORT //
6714 BOOLEAN RT28XXSecurityKeyAdd(
6715 IN PRTMP_ADAPTER pAd,
6718 IN MAC_TABLE_ENTRY *pEntry);
6720 ////////////////////////////////////////
6721 PNDIS_PACKET GetPacketFromRxRing(
6722 IN PRTMP_ADAPTER pAd,
6723 OUT PRT28XX_RXD_STRUC pSaveRxD,
6724 OUT BOOLEAN *pbReschedule,
6725 IN OUT UINT32 *pRxPending);
6728 void kill_thread_task(PRTMP_ADAPTER pAd);
6730 void tbtt_tasklet(unsigned long data);
6733 VOID AsicTurnOffRFClk(
6734 IN PRTMP_ADAPTER pAd,
6737 VOID AsicTurnOnRFClk(
6738 IN PRTMP_ADAPTER pAd,
6742 NTSTATUS RT30xxWriteRFRegister(
6743 IN PRTMP_ADAPTER pAd,
6747 NTSTATUS RT30xxReadRFRegister(
6748 IN PRTMP_ADAPTER pAd,
6752 //2008/09/11:KH add to support efuse<--
6753 UCHAR eFuseReadRegisters(
6754 IN PRTMP_ADAPTER pAd,
6759 VOID eFuseReadPhysical(
6760 IN PRTMP_ADAPTER pAd,
6761 IN PUSHORT lpInBuffer,
6762 IN ULONG nInBufferSize,
6763 OUT PUSHORT lpOutBuffer,
6764 IN ULONG nOutBufferSize
6768 IN PRTMP_ADAPTER pAd,
6773 VOID eFusePhysicalWriteRegisters(
6774 IN PRTMP_ADAPTER pAd,
6779 NTSTATUS eFuseWriteRegisters(
6780 IN PRTMP_ADAPTER pAd,
6785 VOID eFuseWritePhysical(
6786 IN PRTMP_ADAPTER pAd,
6788 ULONG nInBufferSize,
6790 ULONG nOutBufferSize
6793 NTSTATUS eFuseWrite(
6794 IN PRTMP_ADAPTER pAd,
6799 INT set_eFuseGetFreeBlockCount_Proc(
6800 IN PRTMP_ADAPTER pAd,
6803 INT set_eFusedump_Proc(
6804 IN PRTMP_ADAPTER pAd,
6807 INT set_eFuseLoadFromBin_Proc(
6808 IN PRTMP_ADAPTER pAd,
6811 NTSTATUS eFuseWriteRegistersFromBin(
6812 IN PRTMP_ADAPTER pAd,
6817 VOID eFusePhysicalReadRegisters(
6818 IN PRTMP_ADAPTER pAd,
6823 NDIS_STATUS NICLoadEEPROM(
6824 IN PRTMP_ADAPTER pAd);
6826 BOOLEAN bNeedLoadEEPROM(
6827 IN PRTMP_ADAPTER pAd);
6828 //2008/09/11:KH add to support efuse-->
6832 // add by johnli, RF power sequence setup
6833 VOID RT30xxLoadRFNormalModeSetup(
6834 IN PRTMP_ADAPTER pAd);
6836 VOID RT30xxLoadRFSleepModeSetup(
6837 IN PRTMP_ADAPTER pAd);
6839 VOID RT30xxReverseRFSleepModeSetup(
6840 IN PRTMP_ADAPTER pAd);
6846 // Function Prototype in rtusb_bulk.c
6848 VOID RTUSBInitTxDesc(
6849 IN PRTMP_ADAPTER pAd,
6850 IN PTX_CONTEXT pTxContext,
6851 IN UCHAR BulkOutPipeId,
6852 IN usb_complete_t Func);
6854 VOID RTUSBInitHTTxDesc(
6855 IN PRTMP_ADAPTER pAd,
6856 IN PHT_TX_CONTEXT pTxContext,
6857 IN UCHAR BulkOutPipeId,
6858 IN ULONG BulkOutSize,
6859 IN usb_complete_t Func);
6861 VOID RTUSBInitRxDesc(
6862 IN PRTMP_ADAPTER pAd,
6863 IN PRX_CONTEXT pRxContext);
6865 VOID RTUSBCleanUpDataBulkOutQueue(
6866 IN PRTMP_ADAPTER pAd);
6868 VOID RTUSBCancelPendingBulkOutIRP(
6869 IN PRTMP_ADAPTER pAd);
6871 VOID RTUSBBulkOutDataPacket(
6872 IN PRTMP_ADAPTER pAd,
6873 IN UCHAR BulkOutPipeId,
6876 VOID RTUSBBulkOutNullFrame(
6877 IN PRTMP_ADAPTER pAd);
6879 VOID RTUSBBulkOutRTSFrame(
6880 IN PRTMP_ADAPTER pAd);
6882 VOID RTUSBCancelPendingBulkInIRP(
6883 IN PRTMP_ADAPTER pAd);
6885 VOID RTUSBCancelPendingIRPs(
6886 IN PRTMP_ADAPTER pAd);
6888 VOID RTUSBBulkOutMLMEPacket(
6889 IN PRTMP_ADAPTER pAd,
6892 VOID RTUSBBulkOutPsPoll(
6893 IN PRTMP_ADAPTER pAd);
6895 VOID RTUSBCleanUpMLMEBulkOutQueue(
6896 IN PRTMP_ADAPTER pAd);
6898 VOID RTUSBKickBulkOut(
6899 IN PRTMP_ADAPTER pAd);
6901 VOID RTUSBBulkReceive(
6902 IN PRTMP_ADAPTER pAd);
6905 IN RTMP_ADAPTER *pAd);
6907 VOID RTUSBInitRxDesc(
6908 IN PRTMP_ADAPTER pAd,
6909 IN PRX_CONTEXT pRxContext);
6911 VOID RTUSBBulkRxHandle(
6912 IN unsigned long data);
6915 // Function Prototype in rtusb_io.c
6917 NTSTATUS RTUSBMultiRead(
6918 IN PRTMP_ADAPTER pAd,
6923 NTSTATUS RTUSBMultiWrite(
6924 IN PRTMP_ADAPTER pAd,
6929 NTSTATUS RTUSBMultiWrite_OneByte(
6930 IN PRTMP_ADAPTER pAd,
6934 NTSTATUS RTUSBReadBBPRegister(
6935 IN PRTMP_ADAPTER pAd,
6939 NTSTATUS RTUSBWriteBBPRegister(
6940 IN PRTMP_ADAPTER pAd,
6944 NTSTATUS RTUSBWriteRFRegister(
6945 IN PRTMP_ADAPTER pAd,
6948 NTSTATUS RTUSB_VendorRequest(
6949 IN PRTMP_ADAPTER pAd,
6950 IN UINT32 TransferFlags,
6951 IN UCHAR ReservedBits,
6955 IN PVOID TransferBuffer,
6956 IN UINT32 TransferBufferLength);
6958 NTSTATUS RTUSBReadEEPROM(
6959 IN PRTMP_ADAPTER pAd,
6964 NTSTATUS RTUSBWriteEEPROM(
6965 IN PRTMP_ADAPTER pAd,
6970 VOID RTUSBPutToSleep(
6971 IN PRTMP_ADAPTER pAd);
6973 NTSTATUS RTUSBWakeUp(
6974 IN PRTMP_ADAPTER pAd);
6976 VOID RTUSBInitializeCmdQ(
6979 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6980 IN PRTMP_ADAPTER pAd,
6982 IN BOOLEAN SetInformation,
6983 IN PVOID pInformationBuffer,
6984 IN UINT32 InformationBufferLength);
6986 NDIS_STATUS RTUSBEnqueueInternalCmd(
6987 IN PRTMP_ADAPTER pAd,
6989 IN PVOID pInformationBuffer,
6990 IN UINT32 InformationBufferLength);
6992 VOID RTUSBDequeueCmd(
6994 OUT PCmdQElmt *pcmdqelmt);
6997 IN OUT PVOID Context);
7000 IN OUT PVOID Context);
7002 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7003 IN RTMP_ADAPTER *pAd,
7004 IN RALINK_TIMER_STRUCT *pTimer);
7006 BOOLEAN RT2870_TimerQ_Remove(
7007 IN RTMP_ADAPTER *pAd,
7008 IN RALINK_TIMER_STRUCT *pTimer);
7010 void RT2870_TimerQ_Exit(
7011 IN RTMP_ADAPTER *pAd);
7013 void RT2870_TimerQ_Init(
7014 IN RTMP_ADAPTER *pAd);
7016 VOID RT2870_BssBeaconExit(
7017 IN RTMP_ADAPTER *pAd);
7019 VOID RT2870_BssBeaconStop(
7020 IN RTMP_ADAPTER *pAd);
7022 VOID RT2870_BssBeaconStart(
7023 IN RTMP_ADAPTER * pAd);
7025 VOID RT2870_BssBeaconInit(
7026 IN RTMP_ADAPTER *pAd);
7028 VOID RT2870_WatchDog(
7029 IN RTMP_ADAPTER *pAd);
7031 NTSTATUS RTUSBWriteMACRegister(
7032 IN PRTMP_ADAPTER pAd,
7036 NTSTATUS RTUSBReadMACRegister(
7037 IN PRTMP_ADAPTER pAd,
7039 OUT PUINT32 pValue);
7041 NTSTATUS RTUSBSingleWrite(
7042 IN RTMP_ADAPTER *pAd,
7046 NTSTATUS RTUSBFirmwareRun(
7047 IN PRTMP_ADAPTER pAd);
7049 NTSTATUS RTUSBFirmwareWrite(
7050 IN PRTMP_ADAPTER pAd,
7054 NTSTATUS RTUSBFirmwareOpmode(
7055 IN PRTMP_ADAPTER pAd,
7056 OUT PUINT32 pValue);
7058 NTSTATUS RTUSBVenderReset(
7059 IN PRTMP_ADAPTER pAd);
7061 NDIS_STATUS RTUSBSetHardWareRegister(
7062 IN PRTMP_ADAPTER pAdapter,
7065 NDIS_STATUS RTUSBQueryHardWareRegister(
7066 IN PRTMP_ADAPTER pAdapter,
7070 IN PRTMP_ADAPTER pAd);
7073 NDIS_STATUS CreateThreads(
7074 IN struct net_device *net_dev );
7077 VOID MacTableInitialize(
7078 IN PRTMP_ADAPTER pAd);
7081 IN PRTMP_ADAPTER pAd,
7084 NDIS_STATUS RTMPWPAAddKeyProc(
7085 IN PRTMP_ADAPTER pAd,
7088 VOID AsicRxAntEvalAction(
7089 IN PRTMP_ADAPTER pAd);
7092 IN PRTMP_ADAPTER pAd,
7093 IN PUCHAR pHeader802_3,
7097 OUT PNDIS_PACKET *ppPacket);
7099 UINT deaggregate_AMSDU_announce(
7100 IN PRTMP_ADAPTER pAd,
7101 PNDIS_PACKET pPacket,
7105 NDIS_STATUS RTMPCheckRxError(
7106 IN PRTMP_ADAPTER pAd,
7107 IN PHEADER_802_11 pHeader,
7108 IN PRXWI_STRUC pRxWI,
7109 IN PRT28XX_RXD_STRUC pRxINFO);
7112 VOID RTUSBMlmeHardTransmit(
7113 IN PRTMP_ADAPTER pAd,
7114 IN PMGMT_STRUC pMgmt);
7120 // Function Prototype in rtusb_data.c
7122 NDIS_STATUS RTUSBFreeDescriptorRequest(
7123 IN PRTMP_ADAPTER pAd,
7124 IN UCHAR BulkOutPipeId,
7125 IN UINT32 NumberRequired);
7128 BOOLEAN RTUSBNeedQueueBackForAgg(
7129 IN RTMP_ADAPTER *pAd,
7130 IN UCHAR BulkOutPipeId);
7133 VOID RTMPWriteTxInfo(
7134 IN PRTMP_ADAPTER pAd,
7135 IN PTXINFO_STRUC pTxInfo,
7136 IN USHORT USBDMApktLen,
7143 // Function Prototype in cmm_data_2870.c
7145 USHORT RtmpUSB_WriteSubTxResource(
7146 IN PRTMP_ADAPTER pAd,
7149 OUT USHORT *FreeNumber);
7151 USHORT RtmpUSB_WriteSingleTxResource(
7152 IN PRTMP_ADAPTER pAd,
7155 OUT USHORT *FreeNumber);
7157 USHORT RtmpUSB_WriteFragTxResource(
7158 IN PRTMP_ADAPTER pAd,
7161 OUT USHORT *FreeNumber);
7163 USHORT RtmpUSB_WriteMultiTxResource(
7164 IN PRTMP_ADAPTER pAd,
7167 OUT USHORT *FreeNumber);
7169 VOID RtmpUSB_FinalWriteTxResource(
7170 IN PRTMP_ADAPTER pAd,
7172 IN USHORT totalMPDUSize,
7175 VOID RtmpUSBDataLastTxIdx(
7176 IN PRTMP_ADAPTER pAd,
7180 VOID RtmpUSBDataKickOut(
7181 IN PRTMP_ADAPTER pAd,
7186 int RtmpUSBMgmtKickOut(
7187 IN RTMP_ADAPTER *pAd,
7189 IN PNDIS_PACKET pPacket,
7190 IN PUCHAR pSrcBufVA,
7193 VOID RtmpUSBNullFrameKickOut(
7194 IN RTMP_ADAPTER *pAd,
7196 IN UCHAR *pNullFrame,
7197 IN UINT32 frameLen);
7199 VOID RT28xxUsbStaAsicForceWakeup(
7200 IN PRTMP_ADAPTER pAd,
7201 IN BOOLEAN bFromTx);
7203 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7204 IN PRTMP_ADAPTER pAd,
7205 IN USHORT TbttNumToNextWakeUp);
7207 VOID RT28xxUsbMlmeRadioOn(
7208 IN PRTMP_ADAPTER pAd);
7210 VOID RT28xxUsbMlmeRadioOFF(
7211 IN PRTMP_ADAPTER pAd);
7214 ////////////////////////////////////////
7217 IN RTMP_ADAPTER *pAd);
7219 UINT32 QBSS_LoadElementAppend(
7220 IN RTMP_ADAPTER *pAd,
7223 VOID QBSS_LoadUpdate(
7224 IN RTMP_ADAPTER *pAd);
7226 ///////////////////////////////////////
7227 INT RTMPShowCfgValue(
7228 IN PRTMP_ADAPTER pAd,
7232 PCHAR RTMPGetRalinkAuthModeStr(
7233 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7235 PCHAR RTMPGetRalinkEncryModeStr(
7236 IN USHORT encryMode);
7237 //////////////////////////////////////
7239 #ifdef CONFIG_STA_SUPPORT
7240 VOID AsicStaBbpTuning(
7241 IN PRTMP_ADAPTER pAd);
7243 BOOLEAN StaAddMacTableEntry(
7244 IN PRTMP_ADAPTER pAd,
7245 IN PMAC_TABLE_ENTRY pEntry,
7246 IN UCHAR MaxSupportedRateIn500Kbps,
7247 IN HT_CAPABILITY_IE *pHtCapability,
7248 IN UCHAR HtCapabilityLen,
7249 IN USHORT CapabilityInfo);
7250 #endif // CONFIG_STA_SUPPORT //
7252 void RTMP_IndicateMediaState(
7253 IN PRTMP_ADAPTER pAd);
7255 VOID ReSyncBeaconTime(
7256 IN PRTMP_ADAPTER pAd);
7258 VOID RTMPSetAGCInitValue(
7259 IN PRTMP_ADAPTER pAd,
7260 IN UCHAR BandWidth);
7262 int rt28xx_close(IN PNET_DEV dev);
7263 int rt28xx_open(IN PNET_DEV dev);
7265 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7267 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7268 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7270 if (VIRTUAL_IF_NUM(pAd) == 0)
7272 if (rt28xx_open(pAd->net_dev) != 0)
7278 VIRTUAL_IF_INC(pAd);
7282 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7284 VIRTUAL_IF_DEC(pAd);
7285 if (VIRTUAL_IF_NUM(pAd) == 0)
7286 rt28xx_close(pAd->net_dev);
7291 #endif // __RTMP_H__