2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 Miniport generic portion header file
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
43 #include "link_list.h"
44 #include "spectrum_def.h"
46 #ifdef CONFIG_STA_SUPPORT
48 #endif // CONFIG_STA_SUPPORT //
52 //#define DBG_DIAGNOSE 1
54 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
55 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
56 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
58 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
59 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
62 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
63 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
64 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
67 ////////////////////////////////////////////////////////////////////////////
68 // The TX_BUFFER structure forms the transmitted USB packet to the device
69 ////////////////////////////////////////////////////////////////////////////
70 typedef struct __TX_BUFFER{
72 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
73 HEADER_802_11 NullFrame;
74 PSPOLL_FRAME PsPollPacket;
77 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
78 } TX_BUFFER, *PTX_BUFFER;
80 typedef struct __HTTX_BUFFER{
82 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
83 HEADER_802_11 NullFrame;
84 PSPOLL_FRAME PsPollPacket;
87 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
88 } HTTX_BUFFER, *PHTTX_BUFFER;
91 // used to track driver-generated write irps
92 typedef struct _TX_CONTEXT
94 PVOID pAd; //Initialized in MiniportInitialize
95 PURB pUrb; //Initialized in MiniportInitialize
96 PIRP pIrp; //used to cancel pending bulk out.
97 //Initialized in MiniportInitialize
98 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
103 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
104 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
107 BOOLEAN bAggregatible;
108 UCHAR Header_802_3[LENGTH_802_3];
112 dma_addr_t data_dma; // urb dma on linux
114 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
117 // used to track driver-generated write irps
118 typedef struct _HT_TX_CONTEXT
120 PVOID pAd; //Initialized in MiniportInitialize
121 PURB pUrb; //Initialized in MiniportInitialize
122 PIRP pIrp; //used to cancel pending bulk out.
123 //Initialized in MiniportInitialize
124 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
125 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
131 BOOLEAN bCopySavePad;
133 UCHAR Header_802_3[LENGTH_802_3];
134 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
135 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
136 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
137 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
139 dma_addr_t data_dma; // urb dma on linux
140 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
144 // Structure to keep track of receive packets and buffers to indicate
145 // receive data to the protocol.
147 typedef struct _RX_CONTEXT
149 PUCHAR TransferBuffer;
151 PIRP pIrp;//used to cancel pending bulk in.
153 //These 2 Boolean shouldn't both be 1 at the same time.
154 ULONG BulkInOffset; // number of packets waiting for reordering .
155 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
156 BOOLEAN bRxHandling; // Notify this packet is being process now.
157 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
158 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
159 BOOLEAN IRPPending; // TODO: To be removed
161 NDIS_SPIN_LOCK RxContextLock;
162 dma_addr_t data_dma; // urb dma on linux
163 } RX_CONTEXT, *PRX_CONTEXT;
168 // NDIS Version definitions
170 #ifdef NDIS50_MINIPORT
171 #define RTMP_NDIS_MAJOR_VERSION 5
172 #define RTMP_NDIS_MINOR_VERSION 0
175 #ifdef NDIS51_MINIPORT
176 #define RTMP_NDIS_MAJOR_VERSION 5
177 #define RTMP_NDIS_MINOR_VERSION 1
180 extern char NIC_VENDOR_DESC[];
181 extern int NIC_VENDOR_DESC_LEN;
183 extern unsigned char SNAP_AIRONET[];
184 extern unsigned char CipherSuiteCiscoCCKM[];
185 extern unsigned char CipherSuiteCiscoCCKMLen;
186 extern unsigned char CipherSuiteCiscoCCKM24[];
187 extern unsigned char CipherSuiteCiscoCCKM24Len;
188 extern unsigned char CipherSuiteCCXTkip[];
189 extern unsigned char CipherSuiteCCXTkipLen;
190 extern unsigned char CISCO_OUI[];
191 extern UCHAR BaSizeArray[4];
193 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
194 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
196 extern ULONG BIT32[32];
197 extern UCHAR BIT8[8];
198 extern char* CipherName[];
199 extern char* MCSToMbps[];
200 extern UCHAR RxwiMCSToOfdmRate[12];
201 extern UCHAR SNAP_802_1H[6];
202 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
203 extern UCHAR SNAP_AIRONET[8];
204 extern UCHAR CKIP_LLC_SNAP[8];
205 extern UCHAR EAPOL_LLC_SNAP[8];
206 extern UCHAR EAPOL[2];
208 extern UCHAR APPLE_TALK[2];
209 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
210 extern UCHAR OfdmRateToRxwiMCS[];
211 extern UCHAR OfdmSignalToRateId[16] ;
212 extern UCHAR default_cwmin[4];
213 extern UCHAR default_cwmax[4];
214 extern UCHAR default_sta_aifsn[4];
215 extern UCHAR MapUserPriorityToAccessCategory[8];
217 extern USHORT RateUpPER[];
218 extern USHORT RateDownPER[];
219 extern UCHAR Phy11BNextRateDownward[];
220 extern UCHAR Phy11BNextRateUpward[];
221 extern UCHAR Phy11BGNextRateDownward[];
222 extern UCHAR Phy11BGNextRateUpward[];
223 extern UCHAR Phy11ANextRateDownward[];
224 extern UCHAR Phy11ANextRateUpward[];
225 extern CHAR RssiSafeLevelForTxRate[];
226 extern UCHAR RateIdToMbps[];
227 extern USHORT RateIdTo500Kbps[];
229 extern UCHAR CipherSuiteWpaNoneTkip[];
230 extern UCHAR CipherSuiteWpaNoneTkipLen;
232 extern UCHAR CipherSuiteWpaNoneAes[];
233 extern UCHAR CipherSuiteWpaNoneAesLen;
236 extern UCHAR SupRateIe;
237 extern UCHAR ExtRateIe;
239 #ifdef DOT11_N_SUPPORT
240 extern UCHAR HtCapIe;
241 extern UCHAR AddHtInfoIe;
242 extern UCHAR NewExtChanIe;
244 extern UCHAR ExtHtCapIe;
245 #endif // DOT11N_DRAFT3 //
246 #endif // DOT11_N_SUPPORT //
257 extern UCHAR WPA_OUI[];
258 extern UCHAR RSN_OUI[];
259 extern UCHAR WAPI_OUI[];
260 extern UCHAR WME_INFO_ELEM[];
261 extern UCHAR WME_PARM_ELEM[];
262 extern UCHAR Ccx2QosInfo[];
263 extern UCHAR Ccx2IeInfo[];
264 extern UCHAR RALINK_OUI[];
265 extern UCHAR PowerConstraintIE[];
268 extern UCHAR RateSwitchTable[];
269 extern UCHAR RateSwitchTable11B[];
270 extern UCHAR RateSwitchTable11G[];
271 extern UCHAR RateSwitchTable11BG[];
273 #ifdef DOT11_N_SUPPORT
274 extern UCHAR RateSwitchTable11BGN1S[];
275 extern UCHAR RateSwitchTable11BGN2S[];
276 extern UCHAR RateSwitchTable11BGN2SForABand[];
277 extern UCHAR RateSwitchTable11N1S[];
278 extern UCHAR RateSwitchTable11N2S[];
279 extern UCHAR RateSwitchTable11N2SForABand[];
281 #ifdef CONFIG_STA_SUPPORT
282 extern UCHAR PRE_N_HT_OUI[];
283 #endif // CONFIG_STA_SUPPORT //
284 #endif // DOT11_N_SUPPORT //
286 #define MAXSEQ (0xFFF)
288 #ifdef DOT11_N_SUPPORT
289 struct reordering_mpdu
291 struct reordering_mpdu *next;
292 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
293 int Sequence; /* sequence number of MPDU */
297 struct reordering_list
299 struct reordering_mpdu *next;
303 struct reordering_mpdu_pool
307 struct reordering_list freelist;
309 #endif // DOT11_N_SUPPORT //
311 typedef struct _RSSI_SAMPLE {
312 CHAR LastRssi0; // last received RSSI
313 CHAR LastRssi1; // last received RSSI
314 CHAR LastRssi2; // last received RSSI
324 // Queue structure and macros
326 typedef struct _QUEUE_ENTRY {
327 struct _QUEUE_ENTRY *Next;
328 } QUEUE_ENTRY, *PQUEUE_ENTRY;
331 typedef struct _QUEUE_HEADER {
335 } QUEUE_HEADER, *PQUEUE_HEADER;
337 #define InitializeQueueHeader(QueueHeader) \
339 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
340 (QueueHeader)->Number = 0; \
343 #define RemoveHeadQueue(QueueHeader) \
344 (QueueHeader)->Head; \
346 PQUEUE_ENTRY pNext; \
347 if ((QueueHeader)->Head != NULL) \
349 pNext = (QueueHeader)->Head->Next; \
350 (QueueHeader)->Head = pNext; \
352 (QueueHeader)->Tail = NULL; \
353 (QueueHeader)->Number--; \
357 #define InsertHeadQueue(QueueHeader, QueueEntry) \
359 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
360 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
361 if ((QueueHeader)->Tail == NULL) \
362 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
363 (QueueHeader)->Number++; \
366 #define InsertTailQueue(QueueHeader, QueueEntry) \
368 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
369 if ((QueueHeader)->Tail) \
370 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
372 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
373 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
374 (QueueHeader)->Number++; \
378 // Macros for flag and ref count operations
380 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
381 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
382 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
383 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
384 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
386 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
387 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
388 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
390 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
391 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
392 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
394 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
395 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
396 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
398 #ifdef CONFIG_STA_SUPPORT
399 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
400 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
401 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
402 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
404 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
405 #endif // CONFIG_STA_SUPPORT //
407 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
408 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
411 #define INC_RING_INDEX(_idx, _RingSize) \
413 (_idx) = (_idx+1) % (_RingSize); \
416 // We will have a cost down version which mac version is 0x3090xxxx
417 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
419 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
420 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
421 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
423 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
425 #define RING_PACKET_INIT(_TxRing, _idx) \
427 _TxRing->Cell[_idx].pNdisPacket = NULL; \
428 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
431 #define TXDT_INIT(_TxD) \
433 NdisZeroMemory(_TxD, TXD_SIZE); \
437 //Set last data segment
438 #define RING_SET_LASTDS(_TxD, _IsSD0) \
440 if (_IsSD0) {_TxD->LastSec0 = 1;} \
441 else {_TxD->LastSec1 = 1;} \
444 // Increase TxTsc value for next transmission
446 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
447 // Should send a special event microsoft defined to request re-key
448 #define INC_TX_TSC(_tsc) \
451 while (++_tsc[i] == 0x0) \
459 #ifdef DOT11_N_SUPPORT
460 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
461 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
463 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
464 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
465 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
466 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
467 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
468 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
469 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
470 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
471 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
472 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
473 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
474 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
477 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
479 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
480 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
481 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
483 #endif // DOT11_N_SUPPORT //
486 // MACRO for 32-bit PCI register read / write
488 // Usage : RTMP_IO_READ32(
489 // PRTMP_ADAPTER pAd,
490 // ULONG Register_Offset,
494 // PRTMP_ADAPTER pAd,
495 // ULONG Register_Offset,
500 // BBP & RF are using indirect access. Before write any value into it.
501 // We have to make sure there is no outstanding command pending via checking busy bit.
503 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
507 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
508 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
509 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
511 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
512 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
516 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
517 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
520 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
523 case 1: khz = 2412000; break; \
524 case 2: khz = 2417000; break; \
525 case 3: khz = 2422000; break; \
526 case 4: khz = 2427000; break; \
527 case 5: khz = 2432000; break; \
528 case 6: khz = 2437000; break; \
529 case 7: khz = 2442000; break; \
530 case 8: khz = 2447000; break; \
531 case 9: khz = 2452000; break; \
532 case 10: khz = 2457000; break; \
533 case 11: khz = 2462000; break; \
534 case 12: khz = 2467000; break; \
535 case 13: khz = 2472000; break; \
536 case 14: khz = 2484000; break; \
537 case 36: /* UNII */ khz = 5180000; break; \
538 case 40: /* UNII */ khz = 5200000; break; \
539 case 44: /* UNII */ khz = 5220000; break; \
540 case 48: /* UNII */ khz = 5240000; break; \
541 case 52: /* UNII */ khz = 5260000; break; \
542 case 56: /* UNII */ khz = 5280000; break; \
543 case 60: /* UNII */ khz = 5300000; break; \
544 case 64: /* UNII */ khz = 5320000; break; \
545 case 149: /* UNII */ khz = 5745000; break; \
546 case 153: /* UNII */ khz = 5765000; break; \
547 case 157: /* UNII */ khz = 5785000; break; \
548 case 161: /* UNII */ khz = 5805000; break; \
549 case 165: /* UNII */ khz = 5825000; break; \
550 case 100: /* HiperLAN2 */ khz = 5500000; break; \
551 case 104: /* HiperLAN2 */ khz = 5520000; break; \
552 case 108: /* HiperLAN2 */ khz = 5540000; break; \
553 case 112: /* HiperLAN2 */ khz = 5560000; break; \
554 case 116: /* HiperLAN2 */ khz = 5580000; break; \
555 case 120: /* HiperLAN2 */ khz = 5600000; break; \
556 case 124: /* HiperLAN2 */ khz = 5620000; break; \
557 case 128: /* HiperLAN2 */ khz = 5640000; break; \
558 case 132: /* HiperLAN2 */ khz = 5660000; break; \
559 case 136: /* HiperLAN2 */ khz = 5680000; break; \
560 case 140: /* HiperLAN2 */ khz = 5700000; break; \
561 case 34: /* Japan MMAC */ khz = 5170000; break; \
562 case 38: /* Japan MMAC */ khz = 5190000; break; \
563 case 42: /* Japan MMAC */ khz = 5210000; break; \
564 case 46: /* Japan MMAC */ khz = 5230000; break; \
565 case 184: /* Japan */ khz = 4920000; break; \
566 case 188: /* Japan */ khz = 4940000; break; \
567 case 192: /* Japan */ khz = 4960000; break; \
568 case 196: /* Japan */ khz = 4980000; break; \
569 case 208: /* Japan, means J08 */ khz = 5040000; break; \
570 case 212: /* Japan, means J12 */ khz = 5060000; break; \
571 case 216: /* Japan, means J16 */ khz = 5080000; break; \
572 default: khz = 2412000; break; \
576 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
579 case 2412000: ch = 1; break; \
580 case 2417000: ch = 2; break; \
581 case 2422000: ch = 3; break; \
582 case 2427000: ch = 4; break; \
583 case 2432000: ch = 5; break; \
584 case 2437000: ch = 6; break; \
585 case 2442000: ch = 7; break; \
586 case 2447000: ch = 8; break; \
587 case 2452000: ch = 9; break; \
588 case 2457000: ch = 10; break; \
589 case 2462000: ch = 11; break; \
590 case 2467000: ch = 12; break; \
591 case 2472000: ch = 13; break; \
592 case 2484000: ch = 14; break; \
593 case 5180000: ch = 36; /* UNII */ break; \
594 case 5200000: ch = 40; /* UNII */ break; \
595 case 5220000: ch = 44; /* UNII */ break; \
596 case 5240000: ch = 48; /* UNII */ break; \
597 case 5260000: ch = 52; /* UNII */ break; \
598 case 5280000: ch = 56; /* UNII */ break; \
599 case 5300000: ch = 60; /* UNII */ break; \
600 case 5320000: ch = 64; /* UNII */ break; \
601 case 5745000: ch = 149; /* UNII */ break; \
602 case 5765000: ch = 153; /* UNII */ break; \
603 case 5785000: ch = 157; /* UNII */ break; \
604 case 5805000: ch = 161; /* UNII */ break; \
605 case 5825000: ch = 165; /* UNII */ break; \
606 case 5500000: ch = 100; /* HiperLAN2 */ break; \
607 case 5520000: ch = 104; /* HiperLAN2 */ break; \
608 case 5540000: ch = 108; /* HiperLAN2 */ break; \
609 case 5560000: ch = 112; /* HiperLAN2 */ break; \
610 case 5580000: ch = 116; /* HiperLAN2 */ break; \
611 case 5600000: ch = 120; /* HiperLAN2 */ break; \
612 case 5620000: ch = 124; /* HiperLAN2 */ break; \
613 case 5640000: ch = 128; /* HiperLAN2 */ break; \
614 case 5660000: ch = 132; /* HiperLAN2 */ break; \
615 case 5680000: ch = 136; /* HiperLAN2 */ break; \
616 case 5700000: ch = 140; /* HiperLAN2 */ break; \
617 case 5170000: ch = 34; /* Japan MMAC */ break; \
618 case 5190000: ch = 38; /* Japan MMAC */ break; \
619 case 5210000: ch = 42; /* Japan MMAC */ break; \
620 case 5230000: ch = 46; /* Japan MMAC */ break; \
621 case 4920000: ch = 184; /* Japan */ break; \
622 case 4940000: ch = 188; /* Japan */ break; \
623 case 4960000: ch = 192; /* Japan */ break; \
624 case 4980000: ch = 196; /* Japan */ break; \
625 case 5040000: ch = 208; /* Japan, means J08 */ break; \
626 case 5060000: ch = 212; /* Japan, means J12 */ break; \
627 case 5080000: ch = 216; /* Japan, means J16 */ break; \
628 default: ch = 1; break; \
633 // Common fragment list structure - Identical to the scatter gather frag list structure
635 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
636 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
637 #define NIC_MAX_PHYS_BUF_COUNT 8
639 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
643 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
646 typedef struct _RTMP_SCATTER_GATHER_LIST {
647 ULONG NumberOfElements;
649 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
650 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
653 // Some utility macros
656 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
660 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
663 #define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))
665 #define INC_COUNTER64(Val) (Val.QuadPart++)
667 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
668 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
669 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
670 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
672 // Check LEAP & CCKM flags
673 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
674 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
676 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
677 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
679 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
681 _pExtraLlcSnapEncap = SNAP_802_1H; \
682 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
683 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
685 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
690 _pExtraLlcSnapEncap = NULL; \
694 // New Define for new Tx Path.
695 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
697 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
699 _pExtraLlcSnapEncap = SNAP_802_1H; \
700 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
701 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
703 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
708 _pExtraLlcSnapEncap = NULL; \
713 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
715 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
716 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
717 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
720 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
721 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
722 // else remove the LLC/SNAP field from the result Ethernet frame
723 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
725 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
726 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
727 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
731 _pRemovedLLCSNAP = NULL; \
732 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
733 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
735 PUCHAR pProto = _pData + 6; \
737 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
738 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
740 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
741 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
742 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
746 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
747 _pRemovedLLCSNAP = _pData; \
748 _DataSize -= LENGTH_802_1_H; \
749 _pData += LENGTH_802_1_H; \
754 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
755 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
756 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
760 #define SWITCH_AB( _pAA, _pBB) \
768 // Enqueue this frame to MLME engine
769 // We need to enqueue the whole frame because MLME need to pass data type
770 // information from 802.11 header
772 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
774 UINT32 High32TSF=0, Low32TSF=0; \
775 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
780 //Need to collect each ant's rssi concurrently
781 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
782 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
786 if (_pAd->RxAnt.EvaluatePeriod == 0) \
788 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
789 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
791 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
793 AvgRssi = _rssi1 << 3; \
794 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
798 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
799 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
800 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
801 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
804 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
805 AvgRssi = _rssi1 << 3; \
807 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
808 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
814 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
815 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
817 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
818 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
821 // Check if it is Japan W53(ch52,56,60,64) channel.
823 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
825 #ifdef CONFIG_STA_SUPPORT
826 #define STA_PORT_SECURED(_pAd) \
828 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
829 NdisAcquireSpinLock(&_pAd->MacTabLock); \
830 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
831 NdisReleaseSpinLock(&_pAd->MacTabLock); \
833 #endif // CONFIG_STA_SUPPORT //
837 // Register set pair for initialzation register set definition
839 typedef struct _RTMP_REG_PAIR
843 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
845 typedef struct _REG_PAIR
849 } REG_PAIR, *PREG_PAIR;
852 // Register set pair for initialzation register set definition
854 typedef struct _RTMP_RF_REGS
861 } RTMP_RF_REGS, *PRTMP_RF_REGS;
863 typedef struct _FREQUENCY_ITEM {
868 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
871 // Data buffer for DMA operation, the buffer must be contiguous physical memory
872 // Both DMA to / from CPU use the same structure.
874 typedef struct _RTMP_DMABUF
877 PVOID AllocVa; // TxBuf virtual address
878 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
879 } RTMP_DMABUF, *PRTMP_DMABUF;
882 typedef union _HEADER_802_11_SEQ{
895 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
898 // Data buffer for DMA operation, the buffer must be contiguous physical memory
899 // Both DMA to / from CPU use the same structure.
901 typedef struct _RTMP_REORDERBUF
904 PVOID AllocVa; // TxBuf virtual address
905 UCHAR Header802_3[14];
906 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
913 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
916 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
917 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
918 // which won't be released, driver has to wait until upper layer return the packet
919 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
920 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
921 // which driver should ACK upper layer when the tx is physically done or failed.
923 typedef struct _RTMP_DMACB
925 ULONG AllocSize; // Control block size
926 PVOID AllocVa; // Control block virtual address
927 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
928 PNDIS_PACKET pNdisPacket;
929 PNDIS_PACKET pNextNdisPacket;
931 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
932 } RTMP_DMACB, *PRTMP_DMACB;
934 typedef struct _RTMP_TX_BUF
938 ULONG AllocSize; // Control block size
939 PVOID AllocVa; // Control block virtual address
940 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
941 } RTMP_TXBUF, *PRTMP_TXBUF;
943 typedef struct _RTMP_RX_BUF
947 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
948 } RTMP_RXBUF, *PRTMP_RXBUF;
949 typedef struct _RTMP_TX_RING
951 RTMP_DMACB Cell[TX_RING_SIZE];
954 UINT32 TxSwFreeIdx; // software next free tx index
955 } RTMP_TX_RING, *PRTMP_TX_RING;
957 typedef struct _RTMP_RX_RING
959 RTMP_DMACB Cell[RX_RING_SIZE];
962 INT32 RxSwReadIdx; // software next read index
963 } RTMP_RX_RING, *PRTMP_RX_RING;
965 typedef struct _RTMP_MGMT_RING
967 RTMP_DMACB Cell[MGMT_RING_SIZE];
970 UINT32 TxSwFreeIdx; // software next free tx index
971 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
974 // Statistic counter structure
976 typedef struct _COUNTER_802_3
986 ULONG RcvAlignmentErrors;
988 ULONG MoreCollisions;
990 } COUNTER_802_3, *PCOUNTER_802_3;
992 typedef struct _COUNTER_802_11 {
994 LARGE_INTEGER LastTransmittedFragmentCount;
995 LARGE_INTEGER TransmittedFragmentCount;
996 LARGE_INTEGER MulticastTransmittedFrameCount;
997 LARGE_INTEGER FailedCount;
998 LARGE_INTEGER RetryCount;
999 LARGE_INTEGER MultipleRetryCount;
1000 LARGE_INTEGER RTSSuccessCount;
1001 LARGE_INTEGER RTSFailureCount;
1002 LARGE_INTEGER ACKFailureCount;
1003 LARGE_INTEGER FrameDuplicateCount;
1004 LARGE_INTEGER ReceivedFragmentCount;
1005 LARGE_INTEGER MulticastReceivedFrameCount;
1006 LARGE_INTEGER FCSErrorCount;
1007 } COUNTER_802_11, *PCOUNTER_802_11;
1009 typedef struct _COUNTER_RALINK {
1010 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1011 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1012 ULONG BeenDisassociatedCount;
1013 ULONG BadCQIAutoRecoveryCount;
1014 ULONG PoorCQIRoamingCount;
1015 ULONG MgmtRingFullCount;
1016 ULONG RxCountSinceLastNULL;
1018 ULONG RxRingErrCount;
1020 ULONG TxRingErrCount;
1021 LARGE_INTEGER RealFcsErrCount;
1022 ULONG PendingNdisPacketCount;
1024 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1025 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1026 UINT32 OneSecTxDoneCount;
1027 ULONG OneSecRxCount;
1028 UINT32 OneSecTxAggregationCount;
1029 UINT32 OneSecRxAggregationCount;
1031 UINT32 OneSecFrameDuplicateCount;
1034 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1037 UINT32 OneSecTxNoRetryOkCount;
1038 UINT32 OneSecTxRetryOkCount;
1039 UINT32 OneSecTxFailCount;
1040 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1041 UINT32 OneSecRxOkCnt; // RX without error
1042 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1043 UINT32 OneSecRxFcsErrCnt; // CRC error
1044 UINT32 OneSecBeaconSentCnt;
1045 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1046 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1049 ULONG TxNonAggCount;
1050 ULONG TxAgg1MPDUCount;
1051 ULONG TxAgg2MPDUCount;
1052 ULONG TxAgg3MPDUCount;
1053 ULONG TxAgg4MPDUCount;
1054 ULONG TxAgg5MPDUCount;
1055 ULONG TxAgg6MPDUCount;
1056 ULONG TxAgg7MPDUCount;
1057 ULONG TxAgg8MPDUCount;
1058 ULONG TxAgg9MPDUCount;
1059 ULONG TxAgg10MPDUCount;
1060 ULONG TxAgg11MPDUCount;
1061 ULONG TxAgg12MPDUCount;
1062 ULONG TxAgg13MPDUCount;
1063 ULONG TxAgg14MPDUCount;
1064 ULONG TxAgg15MPDUCount;
1065 ULONG TxAgg16MPDUCount;
1067 LARGE_INTEGER TransmittedOctetsInAMSDU;
1068 LARGE_INTEGER TransmittedAMSDUCount;
1069 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1070 LARGE_INTEGER ReceivedAMSDUCount;
1071 LARGE_INTEGER TransmittedAMPDUCount;
1072 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1073 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1074 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1075 } COUNTER_RALINK, *PCOUNTER_RALINK;
1077 typedef struct _PID_COUNTER {
1078 ULONG TxAckRequiredCount; // CRC error
1080 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1081 ULONG LastSuccessRate;
1082 } PID_COUNTER, *PPID_COUNTER;
1084 typedef struct _COUNTER_DRS {
1085 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1086 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1087 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1088 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1089 ULONG CurrTxRateStableTime; // # of second in current TX rate
1090 BOOLEAN fNoisyEnvironment;
1091 BOOLEAN fLastSecAccordingRSSI;
1092 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1093 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1094 ULONG LastTxOkCount;
1095 } COUNTER_DRS, *PCOUNTER_DRS;
1098 // Arcfour Structure Added by PaulWu
1100 typedef struct _ARCFOUR
1105 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1107 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1108 typedef struct _RECEIVE_SETTING {
1109 #ifdef RT_BIG_ENDIAN
1113 USHORT STBC:2; //SPACE
1115 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1116 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1118 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1119 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1121 USHORT STBC:2; //SPACE
1126 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1128 // Shared key data structure
1129 typedef struct _WEP_KEY {
1130 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1131 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1132 } WEP_KEY, *PWEP_KEY;
1134 typedef struct _CIPHER_KEY {
1135 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1136 UCHAR RxMic[8]; // make alignment
1138 UCHAR TxTsc[6]; // 48bit TSC value
1139 UCHAR RxTsc[6]; // 48bit TSC value
1140 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1142 #ifdef CONFIG_STA_SUPPORT
1144 #endif // CONFIG_STA_SUPPORT //
1145 // Key length for each key, 0: entry is invalid
1146 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1147 } CIPHER_KEY, *PCIPHER_KEY;
1149 typedef struct _BBP_TUNING_STRUCT {
1151 UCHAR FalseCcaCountUpperBound; // 100 per sec
1152 UCHAR FalseCcaCountLowerBound; // 10 per sec
1153 UCHAR R17LowerBound; // specified in E2PROM
1154 UCHAR R17UpperBound; // 0x68 according to David Tung
1155 UCHAR CurrentR17Value;
1156 } BBP_TUNING, *PBBP_TUNING;
1158 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1159 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1160 UCHAR EvaluateStableCnt;
1161 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1162 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1163 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1164 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1165 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1166 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1167 SHORT Pair1LastAvgRssi; //
1168 SHORT Pair2LastAvgRssi; //
1169 ULONG RcvPktNumWhenEvaluate;
1170 BOOLEAN FirstPktArrivedWhenEvaluate;
1171 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1172 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1174 typedef struct _LEAP_AUTH_INFO {
1175 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1176 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1178 UCHAR UserName[256]; //LEAP, User name
1180 UCHAR Password[256]; //LEAP, User Password
1182 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1185 UCHAR Addr[MAC_ADDR_LEN];
1186 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1187 //00 02-Authentication timeout
1188 //00 03-Challenge from AP failed
1189 //00 04-Challenge to AP failed
1191 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1195 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1196 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1202 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1205 // Receive Tuple Cache Format
1207 typedef struct _TUPLE_CACHE {
1209 UCHAR MacAddress[MAC_ADDR_LEN];
1212 } TUPLE_CACHE, *PTUPLE_CACHE;
1215 // Fragment Frame structure
1217 typedef struct _FRAGMENT_FRAME {
1218 PNDIS_PACKET pFragPacket;
1222 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1223 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1227 // Packet information for NdisQueryPacket
1229 typedef struct _PACKET_INFO {
1230 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1231 UINT BufferCount ; // Number of Buffer descriptor chained
1232 UINT TotalPacketLength ; // Self explained
1233 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1234 } PACKET_INFO, *PPACKET_INFO;
1237 // Tkip Key structure which RC4 key & MIC calculation
1239 typedef struct _TKIP_KEY_INFO {
1240 UINT nBytesInM; // # bytes in M for MICKEY
1243 ULONG K0; // for MICKEY Low
1244 ULONG K1; // for MICKEY Hig
1245 ULONG L; // Current state for MICKEY
1246 ULONG R; // Current state for MICKEY
1247 ULONG M; // Message accumulator for MICKEY
1250 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1253 // Private / Misc data, counters for driver internal use
1255 typedef struct __PRIVATE_STRUC {
1256 UINT SystemResetCnt; // System reset counter
1257 UINT TxRingFullCnt; // Tx ring full occurrance number
1258 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1259 // Variables for WEP encryption / decryption in rtmp_wep.c
1261 ARCFOURCONTEXT WEPCONTEXT;
1265 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1267 // structure to tune BBP R66 (BBP TUNING)
1268 typedef struct _BBP_R66_TUNING {
1270 USHORT FalseCcaLowerThreshold; // default 100
1271 USHORT FalseCcaUpperThreshold; // default 512
1273 UCHAR R66CurrentValue;
1274 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1275 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1277 // structure to store channel TX power
1278 typedef struct _CHANNEL_TX_POWER {
1279 USHORT RemainingTimeForUse; //unit: sec
1281 #ifdef DOT11N_DRAFT3
1282 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1283 #endif // DOT11N_DRAFT3 //
1288 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1290 // structure to store 802.11j channel TX power
1291 typedef struct _CHANNEL_11J_TX_POWER {
1293 UCHAR BW; // BW_10 or BW_20
1296 USHORT RemainingTimeForUse; //unit: sec
1297 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1299 typedef enum _ABGBAND_STATE_ {
1305 typedef struct _MLME_STRUCT {
1306 #ifdef CONFIG_STA_SUPPORT
1307 // STA state machines
1308 STATE_MACHINE CntlMachine;
1309 STATE_MACHINE AssocMachine;
1310 STATE_MACHINE AuthMachine;
1311 STATE_MACHINE AuthRspMachine;
1312 STATE_MACHINE SyncMachine;
1313 STATE_MACHINE WpaPskMachine;
1314 STATE_MACHINE LeapMachine;
1315 STATE_MACHINE AironetMachine;
1316 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1317 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1318 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1319 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1320 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1321 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1322 #endif // CONFIG_STA_SUPPORT //
1323 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1325 STATE_MACHINE ActMachine;
1327 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1328 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1329 ULONG LastSendNULLpsmTime;
1332 NDIS_SPIN_LOCK TaskLock;
1337 RALINK_TIMER_STRUCT PeriodicTimer;
1338 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1339 RALINK_TIMER_STRUCT LinkDownTimer;
1340 RALINK_TIMER_STRUCT LinkUpTimer;
1341 ULONG PeriodicRound;
1342 ULONG OneSecPeriodicRound;
1345 BOOLEAN bLowThroughput;
1346 BOOLEAN bEnableAutoAntennaCheck;
1347 RALINK_TIMER_STRUCT RxAntEvalTimer;
1350 UCHAR CaliBW40RfR24;
1351 UCHAR CaliBW20RfR24;
1354 } MLME_STRUCT, *PMLME_STRUCT;
1356 // structure for radar detection and channel switch
1357 typedef struct _RADAR_DETECT_STRUCT {
1358 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1359 UCHAR CSCount; //Channel switch counter
1360 UCHAR CSPeriod; //Channel switch period (beacon count)
1361 UCHAR RDCount; //Radar detection counter
1362 UCHAR RDMode; //Radar Detection mode
1363 UCHAR RDDurRegion; //Radar detection duration region
1370 ULONG InServiceMonitorCount; // unit: sec
1371 UINT8 DfsSessionTime;
1374 UINT8 LongPulseRadarTh;
1375 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1377 typedef enum _REC_BLOCKACK_STATUS
1381 Recipient_HandleRes,
1383 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1385 typedef enum _ORI_BLOCKACK_STATUS
1391 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1393 #ifdef DOT11_N_SUPPORT
1394 typedef struct _BA_ORI_ENTRY{
1399 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1401 USHORT TimeOutValue;
1402 ORI_BLOCKACK_STATUS ORI_BA_Status;
1403 RALINK_TIMER_STRUCT ORIBATimer;
1405 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1407 typedef struct _BA_REC_ENTRY {
1410 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1412 //UCHAR Curindidx; // the head in the RX reordering buffer
1414 // USHORT LastIndSeqAtTimer;
1415 USHORT TimeOutValue;
1416 RALINK_TIMER_STRUCT RECBATimer;
1417 ULONG LastIndSeqAtTimer;
1420 REC_BLOCKACK_STATUS REC_BA_Status;
1421 // UCHAR RxBufIdxUsed;
1422 // corresponding virtual address for RX reordering packet storage.
1423 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1424 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1425 // struct _BA_REC_ENTRY *pNext;
1427 struct reordering_list list;
1428 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1432 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1433 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1434 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1435 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1436 } BA_TABLE, *PBA_TABLE;
1438 //For QureyBATableOID use;
1439 typedef struct PACKED _OID_BA_REC_ENTRY{
1440 UCHAR MACAddr[MAC_ADDR_LEN];
1441 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1444 REC_BLOCKACK_STATUS REC_BA_Status[8];
1445 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1447 //For QureyBATableOID use;
1448 typedef struct PACKED _OID_BA_ORI_ENTRY{
1449 UCHAR MACAddr[MAC_ADDR_LEN];
1450 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
1453 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1454 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1456 typedef struct _QUERYBA_TABLE{
1457 OID_BA_ORI_ENTRY BAOriEntry[32];
1458 OID_BA_REC_ENTRY BARecEntry[32];
1459 UCHAR OriNum;// Number of below BAOriEntry
1460 UCHAR RecNum;// Number of below BARecEntry
1461 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1463 typedef union _BACAP_STRUC {
1464 #ifdef RT_BIG_ENDIAN
1467 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1468 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1469 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1470 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1471 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1472 UINT32 MpduDensity:3;
1473 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1474 UINT32 AutoBA:1; // automatically BA
1475 UINT32 TxBAWinLimit:8;
1476 UINT32 RxBAWinLimit:8;
1480 UINT32 RxBAWinLimit:8;
1481 UINT32 TxBAWinLimit:8;
1482 UINT32 AutoBA:1; // automatically BA
1483 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1484 UINT32 MpduDensity:3;
1485 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1486 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1487 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1488 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1489 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1494 } BACAP_STRUC, *PBACAP_STRUC;
1495 #endif // DOT11_N_SUPPORT //
1497 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1498 typedef struct _IOT_STRUC {
1500 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1501 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1502 ULONG OneSecInWindowCount;
1503 ULONG OneSecFrameDuplicateCount;
1504 ULONG OneSecOutWindowCount;
1509 BOOLEAN bRTSLongProtOn;
1510 #ifdef CONFIG_STA_SUPPORT
1511 BOOLEAN bLastAtheros;
1512 BOOLEAN bCurrentAtheros;
1513 BOOLEAN bNowAtherosBurstOn;
1514 BOOLEAN bNextDisableRxBA;
1516 #endif // CONFIG_STA_SUPPORT //
1517 } IOT_STRUC, *PIOT_STRUC;
1519 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1520 typedef union _REG_TRANSMIT_SETTING {
1521 #ifdef RT_BIG_ENDIAN
1527 UINT32 STBC:1; //SPACE
1529 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1530 UINT32 TxBF:1; // 3*3
1532 //UINT32 MCS:7; // MCS
1538 //UINT32 MCS:7; // MCS
1541 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1543 UINT32 STBC:1; //SPACE
1551 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1553 typedef union _DESIRED_TRANSMIT_SETTING {
1554 #ifdef RT_BIG_ENDIAN
1557 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1559 USHORT MCS:7; // MCS
1563 USHORT MCS:7; // MCS
1565 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1570 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1573 BOOLEAN IsRecipient;
1574 UCHAR MACAddr[MAC_ADDR_LEN];
1578 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1579 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1582 // Multiple SSID structure
1584 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1585 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1587 /* clear bcmc TIM bit */
1588 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1589 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1591 /* set bcmc TIM bit */
1592 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1593 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1595 /* clear a station PS TIM bit */
1596 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1597 { UCHAR tim_offset = wcid >> 3; \
1598 UCHAR bit_offset = wcid & 0x7; \
1599 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1601 /* set a station PS TIM bit */
1602 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1603 { UCHAR tim_offset = wcid >> 3; \
1604 UCHAR bit_offset = wcid & 0x7; \
1605 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1608 #define BEACON_BITMAP_MASK 0xff
1609 typedef struct _BEACON_SYNC_STRUCT_
1611 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1612 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1613 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1614 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1615 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1616 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1617 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1618 }BEACON_SYNC_STRUCT;
1621 typedef struct _MULTISSID_STRUCT {
1622 UCHAR Bssid[MAC_ADDR_LEN];
1624 CHAR Ssid[MAX_LEN_OF_SSID];
1625 USHORT CapabilityInfo;
1629 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1630 NDIS_802_11_WEP_STATUS WepStatus;
1631 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1632 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1636 ULONG ReceivedByteCount;
1637 ULONG TransmittedByteCount;
1641 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1642 RT_HT_PHY_INFO DesiredHtPhyInfo;
1643 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1644 BOOLEAN bAutoTxRateSwitch;
1646 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1649 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1650 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1651 UCHAR DesiredRatesIndex;
1652 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1654 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1655 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1656 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1666 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1667 UCHAR BANClass3Data;
1668 ULONG IsolateInterStaTraffic;
1671 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1674 UCHAR TimIELocationInBeacon;
1675 UCHAR CapabilityInfoLocationInBeacon;
1676 // outgoing BEACON frame buffer and corresponding TXWI
1677 // PTXWI_STRUC BeaconTxWI; //
1678 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1681 UINT16 StationKeepAliveTime; // unit: second
1684 USHORT VLAN_Priority;
1686 RT_802_11_ACL AccessControlList;
1689 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1690 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1692 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1694 // For 802.1x daemon setting per BSS
1695 UCHAR radius_srv_num;
1696 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1699 unsigned int mylinkid;
1703 UINT32 RcvdConflictSsidCount;
1704 UINT32 RcvdSpoofedAssocRespCount;
1705 UINT32 RcvdSpoofedReassocRespCount;
1706 UINT32 RcvdSpoofedProbeRespCount;
1707 UINT32 RcvdSpoofedBeaconCount;
1708 UINT32 RcvdSpoofedDisassocCount;
1709 UINT32 RcvdSpoofedAuthCount;
1710 UINT32 RcvdSpoofedDeauthCount;
1711 UINT32 RcvdSpoofedUnknownMgmtCount;
1712 UINT32 RcvdReplayAttackCount;
1714 CHAR RssiOfRcvdConflictSsid;
1715 CHAR RssiOfRcvdSpoofedAssocResp;
1716 CHAR RssiOfRcvdSpoofedReassocResp;
1717 CHAR RssiOfRcvdSpoofedProbeResp;
1718 CHAR RssiOfRcvdSpoofedBeacon;
1719 CHAR RssiOfRcvdSpoofedDisassoc;
1720 CHAR RssiOfRcvdSpoofedAuth;
1721 CHAR RssiOfRcvdSpoofedDeauth;
1722 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1723 CHAR RssiOfRcvdReplayAttack;
1727 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1731 #ifdef DOT11N_DRAFT3
1732 typedef enum _BSS2040COEXIST_FLAG{
1733 BSS_2040_COEXIST_DISABLE = 0,
1734 BSS_2040_COEXIST_TIMER_FIRED = 1,
1735 BSS_2040_COEXIST_INFO_SYNC = 2,
1736 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1737 }BSS2040COEXIST_FLAG;
1738 #endif // DOT11N_DRAFT3 //
1740 // configuration common to OPMODE_AP as well as OPMODE_STA
1741 typedef struct _COMMON_CONFIG {
1743 BOOLEAN bCountryFlag;
1744 UCHAR CountryCode[3];
1746 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1747 UCHAR CountryRegionForABand; // Enum of country region for A band
1748 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1749 USHORT Dsifs; // in units of usec
1750 ULONG PacketFilter; // Packet filter for receiving
1752 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1753 UCHAR SsidLen; // the actual ssid length in used
1754 UCHAR LastSsidLen; // the actual ssid length in used
1755 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1756 UCHAR LastBssid[MAC_ADDR_LEN];
1758 UCHAR Bssid[MAC_ADDR_LEN];
1759 USHORT BeaconPeriod;
1761 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1763 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1765 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1767 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1768 UCHAR MaxDesiredRate;
1769 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1771 ULONG BasicRateBitmap; // backup basic ratebitmap
1773 BOOLEAN bAPSDCapable;
1774 BOOLEAN bInServicePeriod;
1779 BOOLEAN bNeedSendTriggerFrame;
1780 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1781 ULONG TriggerTimerCount;
1783 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1784 // move to MULTISSID_STRUCT for MBSS
1785 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1786 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1787 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1788 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1789 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1790 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1791 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1792 //BOOLEAN bAutoTxRateSwitch;
1793 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1794 UCHAR RtsRate; // RATE_xxx
1795 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1796 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1797 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1799 USHORT RtsThreshold; // in unit of BYTE
1800 USHORT FragmentThreshold; // in unit of BYTE
1802 UCHAR TxPower; // in unit of mW
1803 ULONG TxPowerPercentage; // 0~100 %
1804 ULONG TxPowerDefault; // keep for TxPowerPercentage
1806 #ifdef DOT11_N_SUPPORT
1807 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1808 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1809 #endif // DOT11_N_SUPPORT //
1810 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1811 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1812 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1813 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1814 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1815 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1816 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1817 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1818 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1819 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1821 #ifdef DOT11_N_SUPPORT
1823 #endif // DOT11_N_SUPPORT //
1824 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1825 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1826 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1827 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1828 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1829 #ifdef CONFIG_STA_SUPPORT
1830 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1831 #endif // CONFIG_STA_SUPPORT //
1832 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1833 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1834 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1835 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1836 ULONG OpStatusFlags;
1838 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1839 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1840 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1842 // IEEE802.11H--DFS.
1843 RADAR_DETECT_STRUCT RadarDetect;
1845 #ifdef DOT11_N_SUPPORT
1847 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1848 //RT_HT_CAPABILITY SupportedHtPhy;
1849 RT_HT_CAPABILITY DesiredHtPhy;
1850 HT_CAPABILITY_IE HtCapability;
1851 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1852 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1853 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1854 NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present
1856 #ifdef DOT11N_DRAFT3
1857 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1858 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1860 //This IE is used for 20/40 BSS Coexistence.
1861 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1862 // ====== 11n D3.0 =======================>
1863 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1864 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1865 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1866 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1867 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1868 USHORT Dot11BssWidthChanTranDelayFactor;
1869 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1871 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1872 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1874 NDIS_SPIN_LOCK TriggerEventTabLock;
1875 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1876 BSS_2040_COEXIST_IE BSSCoexist2040;
1877 TRIGGER_EVENT_TAB TriggerEventTab;
1878 UCHAR ChannelListIdx;
1879 // <====== 11n D3.0 =======================
1880 BOOLEAN bOverlapScanning;
1881 #endif // DOT11N_DRAFT3 //
1884 BOOLEAN bMIMOPSEnable;
1886 BOOLEAN bDisableReordering;
1887 BOOLEAN bForty_Mhz_Intolerant;
1888 BOOLEAN bExtChannelSwitchAnnouncement;
1889 BOOLEAN bRcvBSSWidthTriggerEvents;
1890 ULONG LastRcvBSSWidthTriggerEventsTime;
1893 #endif // DOT11_N_SUPPORT //
1895 // Enable wireless event
1896 BOOLEAN bWirelessEvent;
1897 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1899 // Tx & Rx Stream number selection
1903 // transmit phy mode, trasmit rate for Multicast.
1904 #ifdef MCAST_RATE_SPECIFIC
1905 UCHAR McastTransmitMcs;
1906 UCHAR McastTransmitPhyMode;
1907 #endif // MCAST_RATE_SPECIFIC //
1909 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1912 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1913 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1914 RT_HT_CAPABILITY SupportedHtPhy;
1915 ULONG MaxPktOneTxBulk;
1919 BEACON_SYNC_STRUCT *pBeaconSync;
1920 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1921 UINT32 BeaconAdjust;
1922 UINT32 BeaconFactor;
1923 UINT32 BeaconRemain;
1927 NDIS_SPIN_LOCK MeasureReqTabLock;
1928 PMEASURE_REQ_TAB pMeasureReqTab;
1930 NDIS_SPIN_LOCK TpcReqTabLock;
1931 PTPC_REQ_TAB pTpcReqTab;
1933 // transmit phy mode, trasmit rate for Multicast.
1934 #ifdef MCAST_RATE_SPECIFIC
1935 HTTRANSMIT_SETTING MCastPhyMode;
1936 #endif // MCAST_RATE_SPECIFIC //
1939 UINT16 DefineMaxTxPwr;
1940 #endif // SINGLE_SKU //
1943 } COMMON_CONFIG, *PCOMMON_CONFIG;
1946 #ifdef CONFIG_STA_SUPPORT
1947 /* Modified by Wu Xi-Kun 4/21/2006 */
1948 // STA configuration and status
1949 typedef struct _STA_ADMIN_CONFIG {
1951 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1952 // the user intended configuration, but not necessary fully equal to the final
1953 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1954 // AP or IBSS holder).
1955 // Once initialized, user configuration can only be changed via OID_xxx
1956 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1957 USHORT AtimWin; // used when starting a new IBSS
1960 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1961 // the user intended configuration, and should be always applied to the final
1962 // settings in ACTIVE BSS without compromising with the BSS holder.
1963 // Once initialized, user configuration can only be changed via OID_xxx
1965 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1966 USHORT DefaultListenCount; // default listen count;
1967 ULONG WindowsPowerMode; // Power mode for AC power
1968 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1969 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1970 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1971 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1973 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1974 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1975 USHORT DisassocReason;
1976 UCHAR DisassocSta[MAC_ADDR_LEN];
1977 USHORT DeauthReason;
1978 UCHAR DeauthSta[MAC_ADDR_LEN];
1979 USHORT AuthFailReason;
1980 UCHAR AuthFailSta[MAC_ADDR_LEN];
1982 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1983 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1984 NDIS_802_11_WEP_STATUS WepStatus;
1985 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1987 // Add to support different cipher suite for WPA2/WPA mode
1988 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1989 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1990 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1991 USHORT RsnCapability;
1993 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1995 UCHAR PMK[32]; // WPA PSK mode PMK
1996 UCHAR PTK[64]; // WPA PSK mode PTK
1997 UCHAR GTK[32]; // GTK from authenticator
1998 BSSID_INFO SavedPMK[PMKID_NO];
1999 UINT SavedPMKNum; // Saved PMKID number
2004 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2007 // For WPA countermeasures
2008 ULONG LastMicErrorTime; // record last MIC error time
2009 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2010 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2011 // For WPA-PSK supplicant state
2012 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2013 UCHAR ReplayCounter[8];
2014 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2015 UCHAR SNonce[32]; // SNonce for WPA-PSK
2017 UCHAR LastSNR0; // last received BEACON's SNR
2018 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2019 RSSI_SAMPLE RssiSample;
2020 ULONG NumOfAvgRssiSample;
2022 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2023 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2024 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2025 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2027 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2028 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2029 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2030 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2031 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2032 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2033 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2035 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2036 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2037 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2039 // New for WPA, windows want us to to keep association information and
2040 // Fixed IEs from last association response
2041 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2042 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2043 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2044 USHORT ResVarIELen; // Length of next VIE include EID & Length
2045 UCHAR ResVarIEs[MAX_VIE_LEN];
2048 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2050 // New variables used for CCX 1.0
2052 BOOLEAN bCkipCmicOn;
2054 UCHAR GIV[3]; //for CCX iv
2059 LEAP_AUTH_INFO LeapAuthInfo;
2061 UCHAR NetworkChallenge[8];
2062 UCHAR NetworkChallengeResponse[24];
2063 UCHAR PeerChallenge[8];
2065 UCHAR PeerChallengeResponse[24];
2066 UCHAR SessionKey[16]; //Network session keys (NSK)
2067 RALINK_TIMER_STRUCT LeapAuthTimer;
2068 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2070 // New control flags for CCX
2071 CCX_CONTROL CCXControl; // Master administration state
2072 BOOLEAN CCXEnable; // Actual CCX state
2073 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2074 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2075 UCHAR CCXReqType; // Current processing CCX request type
2076 BSS_TABLE CCXBssTab; // BSS Table
2077 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2078 USHORT FrameReportLen; // Current Frame report length
2079 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2080 USHORT RPIDensity[8]; // Array for RPI density collection
2081 // Start address of each BSS table within FrameReportBuf
2082 // It's important to update the RxPower of the corresponding Bss
2083 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2084 USHORT BeaconToken; // Token for beacon report
2085 ULONG LastBssIndex; // Most current reported Bss index
2086 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2087 UCHAR RMReqCnt; // Number of measurement request saved.
2088 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2089 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2090 // It must be the same channel with maximum duration
2091 USHORT ParallelDuration; // Maximum duration for parallel measurement
2092 UCHAR ParallelChannel; // Only one channel with parallel measurement
2093 USHORT IAPPToken; // IAPP dialog token
2094 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2095 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2096 // Hack for channel load and noise histogram parameters
2097 UCHAR NHFactor; // Parameter for Noise histogram
2098 UCHAR CLFactor; // Parameter for channel load
2100 UCHAR KRK[16]; //Key Refresh Key.
2101 UCHAR BTK[32]; //Base Transient Key
2102 BOOLEAN CCKMLinkUpFlag;
2103 ULONG CCKMRN; //(Re)Association request number.
2104 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2105 UCHAR AironetCellPowerLimit; //in dBm
2106 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2107 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2108 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2109 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2110 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2111 USHORT CCXAdjacentAPChannel;
2112 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2114 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2115 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2117 UCHAR DtimCount; // 0.. DtimPeriod-1
2118 UCHAR DtimPeriod; // default = 3
2120 ////////////////////////////////////////////////////////////////////////////////////////
2121 // This is only for WHQL test.
2123 ////////////////////////////////////////////////////////////////////////////////////////
2125 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2127 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2128 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2130 #ifdef WPA_SUPPLICANT_SUPPORT
2132 BOOLEAN IEEE8021x_required_keys;
2133 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2134 UCHAR DesireSharedKeyId;
2136 // 0: driver ignores wpa_supplicant
2137 // 1: wpa_supplicant initiates scanning and AP selection
2138 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2139 UCHAR WpaSupplicantUP;
2140 UCHAR WpaSupplicantScanCount;
2141 #endif // WPA_SUPPLICANT_SUPPORT //
2146 BOOLEAN bTGnWifiTest;
2147 BOOLEAN bScanReqIsFromWebUI;
2149 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2150 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2151 RT_HT_PHY_INFO DesiredHtPhyInfo;
2152 BOOLEAN bAutoTxRateSwitch;
2153 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2155 // This data structure keep the current active BSS/IBSS's configuration that this STA
2156 // had agreed upon joining the network. Which means these parameters are usually decided
2157 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2158 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2159 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2160 // the current active settings.
2161 typedef struct _STA_ACTIVE_CONFIG {
2163 USHORT AtimWin; // in kusec; IBSS parameter set element
2164 USHORT CapabilityInfo;
2165 USHORT CfpMaxDuration;
2168 // Copy supported rate from desired AP's beacon. We are trying to match
2169 // AP's supported and extended rate settings.
2170 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2171 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2174 // Copy supported ht from desired AP's beacon. We are trying to match
2175 RT_HT_PHY_INFO SupportedPhyInfo;
2176 RT_HT_CAPABILITY SupportedHtPhy;
2177 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2178 #endif // CONFIG_STA_SUPPORT //
2181 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2182 NDIS_802_11_MAC_ADDRESS MacAddr;
2183 USHORT MacTabMatchWCID; // ASIC
2184 CIPHER_KEY CipherKey;
2185 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2188 // ----------- start of AP --------------------------
2189 // AUTH-RSP State Machine Aux data structure
2190 typedef struct _AP_MLME_AUX {
2191 UCHAR Addr[MAC_ADDR_LEN];
2193 CHAR Challenge[CIPHER_TEXT_LEN];
2194 } AP_MLME_AUX, *PAP_MLME_AUX;
2196 // structure to define WPA Group Key Rekey Interval
2197 typedef struct PACKED _RT_802_11_WPA_REKEY {
2198 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2199 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2200 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2202 typedef struct _MAC_TABLE_ENTRY {
2203 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2204 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2205 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2206 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2207 BOOLEAN ValidAsMesh;
2208 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2210 BOOLEAN bIAmBadAtheros;
2212 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2214 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2215 UCHAR CMTimerRunning;
2216 UCHAR apidx; // MBSS number
2218 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2219 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2220 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2223 RALINK_TIMER_STRUCT RetryTimer;
2224 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2225 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2226 NDIS_802_11_WEP_STATUS WepStatus;
2227 AP_WPA_STATE WpaState;
2230 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2231 CIPHER_KEY PairwiseKey;
2234 UCHAR PMKID[LEN_PMKID];
2237 UCHAR Addr[MAC_ADDR_LEN];
2240 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2241 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2243 USHORT CapabilityInfo;
2245 ULONG NoDataIdleCount;
2246 UINT16 StationKeepAliveCount; // unit: second
2248 QUEUE_HEADER PsQueue;
2250 UINT32 StaConnectTime; // the live time of this station since associated with AP
2253 #ifdef DOT11_N_SUPPORT
2255 USHORT NoBADataCountDown;
2257 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2258 UINT TxBFCount; // 3*3
2259 #endif // DOT11_N_SUPPORT //
2261 UINT DebugFIFOCount;
2266 //====================================================
2267 //WDS entry needs these
2268 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2269 UINT MatchWDSTabIdx;
2270 UCHAR MaxSupportedRate;
2272 UCHAR CurrTxRateIndex;
2273 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2274 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2275 // USHORT OneSecTxOkCount;
2276 UINT32 OneSecTxNoRetryOkCount;
2277 UINT32 OneSecTxRetryOkCount;
2278 UINT32 OneSecTxFailCount;
2279 UINT32 ContinueTxFailCnt;
2280 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2281 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2282 //====================================================
2284 BOOLEAN fNoisyEnvironment;
2285 BOOLEAN fLastSecAccordingRSSI;
2286 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2287 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2288 ULONG LastTxOkCount;
2289 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2291 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2292 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2293 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2294 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2295 ULONG ClientStatusFlags;
2297 // TODO: Shall we move that to DOT11_N_SUPPORT???
2298 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2300 #ifdef DOT11_N_SUPPORT
2301 // HT EWC MIMO-N used parameters
2302 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2303 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2304 USHORT TXAutoBAbitmap;
2305 USHORT BADeclineBitmap;
2306 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2307 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2308 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2310 // 802.11n features.
2312 UCHAR MaxRAmpduFactor;
2314 UCHAR MmpsMode; // MIMO power save more.
2316 HT_CAPABILITY_IE HTCapability;
2318 #ifdef DOT11N_DRAFT3
2319 UCHAR BSS2040CoexistenceMgmtSupport;
2320 #endif // DOT11N_DRAFT3 //
2321 #endif // DOT11_N_SUPPORT //
2323 BOOLEAN bAutoTxRateSwitch;
2326 struct _MAC_TABLE_ENTRY *pNext;
2327 USHORT TxSeq[NUM_OF_TID];
2328 USHORT NonQosDataSeq;
2330 RSSI_SAMPLE RssiSample;
2332 UINT32 TXMCSExpected[16];
2333 UINT32 TXMCSSuccessful[16];
2334 UINT32 TXMCSFailed[16];
2335 UINT32 TXMCSAutoFallBack[16][16];
2337 #ifdef CONFIG_STA_SUPPORT
2338 ULONG LastBeaconRxTime;
2339 #endif // CONFIG_STA_SUPPORT //
2340 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2342 typedef struct _MAC_TABLE {
2344 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2345 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2346 QUEUE_HEADER McastPsQueue;
2348 BOOLEAN fAnyStationInPsm;
2349 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2350 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2351 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2352 #ifdef DOT11_N_SUPPORT
2353 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2354 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2355 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2356 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2357 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2358 #endif // DOT11_N_SUPPORT //
2359 } MAC_TABLE, *PMAC_TABLE;
2361 #ifdef DOT11_N_SUPPORT
2362 #define IS_HT_STA(_pMacEntry) \
2363 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2365 #define IS_HT_RATE(_pMacEntry) \
2366 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2368 #define PEER_IS_HT_RATE(_pMacEntry) \
2369 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2370 #endif // DOT11_N_SUPPORT //
2372 typedef struct _WDS_ENTRY {
2374 UCHAR Addr[MAC_ADDR_LEN];
2375 ULONG NoDataIdleCount;
2376 struct _WDS_ENTRY *pNext;
2377 } WDS_ENTRY, *PWDS_ENTRY;
2379 typedef struct _WDS_TABLE_ENTRY {
2381 UCHAR WdsAddr[MAC_ADDR_LEN];
2382 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2383 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2384 UCHAR MaxSupportedRate;
2386 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2387 USHORT OneSecTxOkCount;
2388 USHORT OneSecTxRetryOkCount;
2389 USHORT OneSecTxFailCount;
2390 ULONG CurrTxRateStableTime; // # of second in current TX rate
2391 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2392 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2394 typedef struct _RT_802_11_WDS_ENTRY {
2398 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2399 UCHAR MacTabMatchWCID; // ASIC
2400 NDIS_802_11_WEP_STATUS WepStatus;
2403 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2404 RT_HT_PHY_INFO DesiredHtPhyInfo;
2405 BOOLEAN bAutoTxRateSwitch;
2406 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2407 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2409 typedef struct _WDS_TABLE {
2412 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2413 } WDS_TABLE, *PWDS_TABLE;
2415 typedef struct _APCLI_STRUCT {
2418 unsigned int mylinkid;
2420 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2421 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2422 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2424 CHAR Ssid[MAX_LEN_OF_SSID];
2427 CHAR CfgSsid[MAX_LEN_OF_SSID];
2428 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2429 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2431 ULONG ApCliRcvBeaconTime;
2433 ULONG CtrlCurrState;
2434 ULONG SyncCurrState;
2435 ULONG AuthCurrState;
2436 ULONG AssocCurrState;
2437 ULONG WpaPskCurrState;
2442 ULONG ClientStatusFlags;
2445 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2446 NDIS_802_11_WEP_STATUS WepStatus;
2448 // Add to support different cipher suite for WPA2/WPA mode
2449 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2450 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2451 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2452 USHORT RsnCapability;
2454 UCHAR PSK[100]; // reserve PSK key material
2456 UCHAR PMK[32]; // WPA PSK mode PMK
2457 //UCHAR PTK[64]; // WPA PSK mode PTK
2458 UCHAR GTK[32]; // GTK from authenticator
2460 //CIPHER_KEY PairwiseKey;
2461 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2464 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2465 //UCHAR PortSecured;
2467 // store RSN_IE built by driver
2468 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2471 // For WPA countermeasures
2472 ULONG LastMicErrorTime; // record last MIC error time
2473 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2474 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2476 // For WPA-PSK supplicant state
2477 //WPA_STATE WpaState; // Default is SS_NOTUSE
2478 //UCHAR ReplayCounter[8];
2479 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2480 UCHAR SNonce[32]; // SNonce for WPA-PSK
2481 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2483 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2484 RT_HT_PHY_INFO DesiredHtPhyInfo;
2485 BOOLEAN bAutoTxRateSwitch;
2486 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2487 } APCLI_STRUCT, *PAPCLI_STRUCT;
2489 // ----------- end of AP ----------------------------
2494 BOOLEAN bGreenField;
2500 typedef struct _INF_PCI_CONFIG
2502 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2505 typedef struct _INF_USB_CONFIG
2507 UINT BulkInEpAddr; // bulk-in endpoint address
2508 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2512 #ifdef IKANOS_VX_1X0
2513 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2515 struct IKANOS_TX_INFO
2517 struct net_device *netdev;
2518 IkanosWlanTxCbFuncP *fp;
2520 #endif // IKANOS_VX_1X0 //
2523 #define DIAGNOSE_TIME 10 // 10 sec
2524 typedef struct _RtmpDiagStrcut_
2525 { // Diagnosis Related element
2526 unsigned char inited;
2528 unsigned char ArrayStartIdx;
2529 unsigned char ArrayCurIdx;
2531 USHORT TxDataCnt[DIAGNOSE_TIME];
2532 USHORT TxFailCnt[DIAGNOSE_TIME];
2533 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2534 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2535 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2536 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2537 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2539 USHORT TxAggCnt[DIAGNOSE_TIME];
2540 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2541 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2542 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2543 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2544 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2547 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2548 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2549 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2550 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2552 #endif // DBG_DIAGNOSE //
2556 // The miniport adapter structure
2558 typedef struct _RTMP_ADAPTER
2560 PVOID OS_Cookie; // save specific structure relative to OS
2566 NDIS_SPIN_LOCK irq_lock;
2570 /*****************************************************************************************/
2571 /* USB related parameters */
2572 /*****************************************************************************************/
2573 struct usb_config_descriptor *config;
2574 UINT BulkInEpAddr; // bulk-in endpoint address
2575 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2578 USHORT BulkOutMaxPacketSize;
2579 USHORT BulkInMaxPacketSize;
2581 //======Control Flags
2582 LONG PendingIoCount;
2584 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2587 //======Timer Thread
2588 RT2870_TIMER_QUEUE TimerQ;
2589 NDIS_SPIN_LOCK TimerQLock;
2594 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2596 BOOLEAN TimerFunc_kill;
2600 //======Semaphores (event)
2601 struct semaphore mlme_semaphore; /* to sleep thread on */
2602 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2603 struct semaphore RTUSBTimer_semaphore;
2604 #ifdef INF_AMAZON_SE
2605 struct semaphore UsbVendorReq_semaphore;
2606 PVOID UsbVendorReqBuf;
2607 #endif // INF_AMAZON_SE //
2608 struct completion TimerQComplete;
2609 struct completion mlmeComplete;
2610 struct completion CmdQComplete;
2611 wait_queue_head_t *wait;
2615 /*****************************************************************************************/
2616 /* Both PCI/USB related parameters */
2617 /*****************************************************************************************/
2620 /*****************************************************************************************/
2621 /* Tx related parameters */
2622 /*****************************************************************************************/
2623 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2624 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2627 // Data related context and AC specified, 4 AC supported
2628 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2629 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2631 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2632 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2634 // 4 sets of Bulk Out index and pending flag
2635 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2637 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2638 UCHAR bulkResetPipeid;
2639 BOOLEAN MgmtBulkPending;
2640 ULONG bulkResetReq[6];
2643 // resource for software backlog queues
2644 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2645 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2647 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2648 RTMP_MGMT_RING MgmtRing;
2649 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2652 /*****************************************************************************************/
2653 /* Rx related parameters */
2654 /*****************************************************************************************/
2658 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2659 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2660 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2661 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2662 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2663 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2664 ULONG TransferBufferLength; // current length of the packet buffer
2665 ULONG ReadPosition; // current read position in a packet buffer
2669 /*****************************************************************************************/
2670 /* ASIC related parameters */
2671 /*****************************************************************************************/
2672 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2674 // ---------------------------
2676 // ---------------------------
2677 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2678 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2679 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2680 BOOLEAN EepromAccess;
2682 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2684 // ---------------------------
2686 // ---------------------------
2687 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2688 UCHAR BbpRssiToDbmDelta;
2689 BBP_R66_TUNING BbpTuning;
2691 // ----------------------------
2693 // ----------------------------
2694 UCHAR RfIcType; // RFIC_xxx
2695 ULONG RfFreqOffset; // Frequency offset for channel switching
2696 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2698 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2699 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2701 // This soft Rx Antenna Diversity mechanism is used only when user set
2702 // RX Antenna = DIVERSITY ON
2703 SOFT_RX_ANT_DIVERSITY RxAnt;
2706 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2707 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2708 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2709 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2711 UCHAR ChannelListNum; // number of channel in ChannelList[]
2714 ULONG Tx20MPwrCfgABand[5];
2715 ULONG Tx20MPwrCfgGBand[5];
2716 ULONG Tx40MPwrCfgABand[5];
2717 ULONG Tx40MPwrCfgGBand[5];
2719 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2720 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2721 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2722 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2723 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2724 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2726 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2727 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2728 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2729 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2730 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2731 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2733 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2734 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2735 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2736 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2739 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2740 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2741 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2742 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2745 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2746 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2747 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2748 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2750 // ----------------------------
2752 // ----------------------------
2753 MCU_LEDCS_STRUC LedCntl;
2754 USHORT Led1; // read from EEPROM 0x3c
2755 USHORT Led2; // EEPROM 0x3e
2756 USHORT Led3; // EEPROM 0x40
2757 UCHAR LedIndicatorStregth;
2758 UCHAR RssiSingalstrengthOffet;
2759 BOOLEAN bLedOnScanning;
2762 /*****************************************************************************************/
2763 /* 802.11 related parameters */
2764 /*****************************************************************************************/
2765 // outgoing BEACON frame buffer and corresponding TXD
2766 TXWI_STRUC BeaconTxWI;
2768 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2770 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2771 PSPOLL_FRAME PsPollFrame;
2772 HEADER_802_11 NullFrame;
2775 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2776 TX_CONTEXT NullContext;
2777 TX_CONTEXT PsPollContext;
2778 TX_CONTEXT RTSContext;
2783 //=========AP===========
2786 //=======STA===========
2787 #ifdef CONFIG_STA_SUPPORT
2788 /* Modified by Wu Xi-Kun 4/21/2006 */
2789 // -----------------------------------------------
2790 // STA specific configuration & operation status
2791 // used only when pAd->OpMode == OPMODE_STA
2792 // -----------------------------------------------
2793 STA_ADMIN_CONFIG StaCfg; // user desired settings
2794 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2795 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2796 NDIS_MEDIA_STATE PreMediaState;
2797 #endif // CONFIG_STA_SUPPORT //
2799 //=======Common===========
2800 // OP mode: either AP or STA
2801 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2803 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2806 // MAT related parameters
2808 // configuration: read from Registry & E2PROM
2809 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2810 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2811 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2813 // ------------------------------------------------------
2814 // common configuration to both OPMODE_STA and OPMODE_AP
2815 // ------------------------------------------------------
2816 COMMON_CONFIG CommonCfg;
2819 // AP needs those vaiables for site survey feature.
2820 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2821 BSS_TABLE ScanTab; // store the latest SCAN result
2823 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2824 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2825 NDIS_SPIN_LOCK MacTabLock;
2827 #ifdef DOT11_N_SUPPORT
2829 #endif // DOT11_N_SUPPORT //
2830 NDIS_SPIN_LOCK BATabLock;
2831 RALINK_TIMER_STRUCT RECBATimer;
2833 // encryption/decryption KEY tables
2834 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2836 // RX re-assembly buffer for fragmentation
2837 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2840 COUNTER_802_3 Counters8023; // 802.3 counters
2841 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2842 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2843 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2844 PRIVATE_STRUC PrivateInfo; // Private information & counters
2846 // flags, see fRTMP_ADAPTER_xxx flags
2847 ULONG Flags; // Represent current device status
2849 // current TX sequence #
2852 // Control disconnect / connect event generation
2853 //+++Didn't used anymore
2858 //+++Used only for Station
2859 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2862 ULONG ExtraInfo; // Extra information for displaying status
2863 ULONG SystemErrorBitmap; // b0: E2PROM version error
2865 //+++Didn't used anymore
2866 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2869 // ---------------------------
2871 // ---------------------------
2872 RT_802_11_EVENT_TABLE EventTab;
2877 /*****************************************************************************************/
2878 /* Statistic related parameters */
2879 /*****************************************************************************************/
2881 ULONG BulkOutDataOneSecCount;
2882 ULONG BulkInDataOneSecCount;
2883 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2884 ULONG watchDogRxCnt;
2885 ULONG watchDogRxOverFlowCnt;
2886 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2889 BOOLEAN bUpdateBcnCntDone;
2890 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2891 // ----------------------------
2893 // ----------------------------
2894 //ULONG DebugSetting[4];
2895 BOOLEAN bBanAllBaSetup;
2896 BOOLEAN bPromiscuous;
2898 // ----------------------------
2899 // rt2860c emulation-use Parameters
2900 // ----------------------------
2903 ULONG cfendaccu[30];
2904 ULONG bacontent[16];
2905 ULONG rxint[RX_RING_SIZE+1];
2908 BOOLEAN bForcePrintTX;
2909 BOOLEAN bForcePrintRX;
2910 BOOLEAN bDisablescanning; //defined in RT2870 USB
2911 BOOLEAN bStaFifoTest;
2912 BOOLEAN bProtectionTest;
2914 BOOLEAN bGenOneHCCA;
2915 BOOLEAN bBroadComHT;
2916 //+++Following add from RT2870 USB.
2918 ULONG BulkOutComplete;
2919 ULONG BulkOutCompleteOther;
2920 ULONG BulkOutCompleteCancel; // seems not use now?
2922 ULONG BulkInComplete;
2923 ULONG BulkInCompleteFail;
2926 struct wificonf WIFItestbed;
2928 #ifdef DOT11_N_SUPPORT
2929 struct reordering_mpdu_pool mpdu_blk_pool;
2930 #endif // DOT11_N_SUPPORT //
2932 ULONG OneSecondnonBEpackets; // record non BE packets per second
2934 #if WIRELESS_EXT >= 12
2935 struct iw_statistics iw_stats;
2938 struct net_device_stats stats;
2940 ULONG TbttTickCount;
2941 #ifdef PCI_MSI_SUPPORT
2943 #endif // PCI_MSI_SUPPORT //
2948 #define TIME_BASE (1000000/OS_HZ)
2949 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2950 UCHAR flg_be_adjust;
2951 ULONG be_adjust_last_time;
2953 #ifdef IKANOS_VX_1X0
2954 struct IKANOS_TX_INFO IkanosTxInfo;
2955 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2956 #endif // IKANOS_VX_1X0 //
2960 RtmpDiagStruct DiagStruct;
2961 #endif // DBG_DIAGNOSE //
2964 UINT8 PM_FlgSuspend;
2969 BOOLEAN bEEPROMFile;
2972 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2975 // Cisco IAPP format
2977 typedef struct _CISCO_IAPP_CONTENT_
2979 USHORT Length; //IAPP Length
2980 UCHAR MessageType; //IAPP type
2981 UCHAR FunctionCode; //IAPP function type
2982 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2983 UCHAR SourceMAC[MAC_ADDR_LEN];
2984 USHORT Tag; //Tag(element IE) - Adjacent AP report
2985 USHORT TagLength; //Length of element not including 4 byte header
2986 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2987 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2990 UCHAR Ssid[MAX_LEN_OF_SSID];
2991 USHORT Seconds; //Seconds that the client has been disassociated.
2992 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2994 #define DELAYINTMASK 0x0003fffb
2995 #define INTMASK 0x0003fffb
2996 #define IndMask 0x0003fffc
2997 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2998 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2999 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3000 #define TxCoherent 0x00020000 // tx coherent
3001 #define RxCoherent 0x00010000 // rx coherent
3002 #define McuCommand 0x00000200 // mcu
3003 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3004 #define TBTTInt 0x00000800 // TBTT interrupt
3005 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3006 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3007 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3010 typedef struct _RX_BLK_
3012 // RXD_STRUC RxD; // sample
3013 RT28XX_RXD_STRUC RxD;
3015 PHEADER_802_11 pHeader;
3016 PNDIS_PACKET pRxPacket;
3020 UCHAR UserPriority; // for calculate TKIP MIC using
3024 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3025 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3026 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3029 #define fRX_WDS 0x0001
3030 #define fRX_AMSDU 0x0002
3031 #define fRX_ARALINK 0x0004
3032 #define fRX_HTC 0x0008
3033 #define fRX_PAD 0x0010
3034 #define fRX_AMPDU 0x0020
3035 #define fRX_QOS 0x0040
3036 #define fRX_INFRA 0x0080
3037 #define fRX_EAP 0x0100
3038 #define fRX_MESH 0x0200
3039 #define fRX_APCLI 0x0400
3040 #define fRX_DLS 0x0800
3041 #define fRX_WPI 0x1000
3043 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3044 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3045 #define LENGTH_ARALINK_HEADER_FIELD 2
3047 #define TX_UNKOWN_FRAME 0x00
3048 #define TX_MCAST_FRAME 0x01
3049 #define TX_LEGACY_FRAME 0x02
3050 #define TX_AMPDU_FRAME 0x04
3051 #define TX_AMSDU_FRAME 0x08
3052 #define TX_RALINK_FRAME 0x10
3053 #define TX_FRAG_FRAME 0x20
3056 // Currently the sizeof(TX_BLK) is 148 bytes.
3057 typedef struct _TX_BLK_
3060 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3061 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3062 USHORT TotalFragNum; // Total frame fragments required in one batch
3063 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3065 QUEUE_HEADER TxPacketList;
3066 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3067 HTTRANSMIT_SETTING *pTransmit;
3069 // Following structure used for the characteristics of a specific packet.
3070 PNDIS_PACKET pPacket;
3071 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3072 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3073 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3074 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3075 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3076 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3077 UCHAR HdrPadLen; // recording Header Padding Length;
3078 UCHAR apidx; // The interface associated to this packet
3079 UCHAR Wcid; // The MAC entry associated to this packet
3080 UCHAR UserPriority; // priority class of packet
3081 UCHAR FrameGap; // what kind of IFS this packet use
3082 UCHAR MpduReqNum; // number of fragments of this frame
3083 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3084 UCHAR CipherAlg; // cipher alogrithm
3089 USHORT Flags; //See following definitions for detail.
3091 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3092 ULONG Priv; // Hardware specific value saved in here.
3096 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3097 #define fTX_bAckRequired 0x0002 // the packet need ack response
3098 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3099 #define fTX_bHTRate 0x0008 // allow to use HT rate
3100 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3101 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3102 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3103 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3104 #define fTX_bWMM 0x0080 // QOS Data
3106 #define fTX_bClearEAPFrame 0x0100
3109 #ifdef CONFIG_STA_SUPPORT
3110 #endif // CONFIG_STA_SUPPORT //
3114 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3117 (_pTxBlk->Flags |= _flag) \
3119 (_pTxBlk->Flags &= ~(_flag)) \
3122 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3123 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3124 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3130 //------------------------------------------------------------------------------------------
3134 #ifdef RT_BIG_ENDIAN
3135 static inline VOID WriteBackToDescriptor(
3138 IN BOOLEAN DoEncrypt,
3139 IN ULONG DescriptorType)
3143 p1 = ((UINT32 *)Dest);
3144 p2 = ((UINT32 *)Src);
3149 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3153 ========================================================================
3155 Routine Description:
3156 Endian conversion of Tx/Rx descriptor .
3159 pAd Pointer to our adapter
3160 pData Pointer to Tx/Rx descriptor
3161 DescriptorType Direction of the frame
3167 Call this function when read or update descriptor
3168 ========================================================================
3170 static inline VOID RTMPWIEndianChange(
3172 IN ULONG DescriptorType)
3177 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3179 if(DescriptorType == TYPE_TXWI)
3181 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3182 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3186 for(i=0; i < size/4 ; i++)
3187 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3192 ========================================================================
3194 Routine Description:
3195 Endian conversion of Tx/Rx descriptor .
3198 pAd Pointer to our adapter
3199 pData Pointer to Tx/Rx descriptor
3200 DescriptorType Direction of the frame
3206 Call this function when read or update descriptor
3207 ========================================================================
3211 static inline VOID RTMPDescriptorEndianChange(
3213 IN ULONG DescriptorType)
3215 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3219 ========================================================================
3221 Routine Description:
3222 Endian conversion of all kinds of 802.11 frames .
3225 pAd Pointer to our adapter
3226 pData Pointer to the 802.11 frame structure
3227 Dir Direction of the frame
3228 FromRxDoneInt Caller is from RxDone interrupt
3234 Call this function when read or update buffer data
3235 ========================================================================
3237 static inline VOID RTMPFrameEndianChange(
3238 IN PRTMP_ADAPTER pAd,
3241 IN BOOLEAN FromRxDoneInt)
3243 PHEADER_802_11 pFrame;
3246 // swab 16 bit fields - Frame Control field
3249 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3252 pFrame = (PHEADER_802_11) pData;
3253 pMacHdr = (PUCHAR) pFrame;
3255 // swab 16 bit fields - Duration/ID field
3256 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3258 // swab 16 bit fields - Sequence Control field
3259 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3261 if(pFrame->FC.Type == BTYPE_MGMT)
3263 switch(pFrame->FC.SubType)
3265 case SUBTYPE_ASSOC_REQ:
3266 case SUBTYPE_REASSOC_REQ:
3267 // swab 16 bit fields - CapabilityInfo field
3268 pMacHdr += sizeof(HEADER_802_11);
3269 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3271 // swab 16 bit fields - Listen Interval field
3273 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3276 case SUBTYPE_ASSOC_RSP:
3277 case SUBTYPE_REASSOC_RSP:
3278 // swab 16 bit fields - CapabilityInfo field
3279 pMacHdr += sizeof(HEADER_802_11);
3280 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3282 // swab 16 bit fields - Status Code field
3284 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3286 // swab 16 bit fields - AID field
3288 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3292 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3293 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3294 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3298 // swab 16 bit fields - Auth Alg No. field
3299 pMacHdr += sizeof(HEADER_802_11);
3300 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3302 // swab 16 bit fields - Auth Seq No. field
3304 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3306 // swab 16 bit fields - Status Code field
3308 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3312 case SUBTYPE_BEACON:
3313 case SUBTYPE_PROBE_RSP:
3314 // swab 16 bit fields - BeaconInterval field
3315 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3316 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3318 // swab 16 bit fields - CapabilityInfo field
3319 pMacHdr += sizeof(USHORT);
3320 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3323 case SUBTYPE_DEAUTH:
3324 case SUBTYPE_DISASSOC:
3325 // swab 16 bit fields - Reason code field
3326 pMacHdr += sizeof(HEADER_802_11);
3327 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3331 else if( pFrame->FC.Type == BTYPE_DATA )
3334 else if(pFrame->FC.Type == BTYPE_CNTL)
3336 switch(pFrame->FC.SubType)
3338 case SUBTYPE_BLOCK_ACK_REQ:
3340 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3341 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3342 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3345 case SUBTYPE_BLOCK_ACK:
3346 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3347 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3351 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3352 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3358 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3361 // swab 16 bit fields - Frame Control
3362 if(Dir == DIR_WRITE)
3364 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3367 #endif // RT_BIG_ENDIAN //
3370 static inline VOID ConvertMulticastIP2MAC(
3372 IN PUCHAR *ppMacAddr,
3373 IN UINT16 ProtoType)
3375 if (pIpAddr == NULL)
3378 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3384 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3385 *(*ppMacAddr) = 0x33;
3386 *(*ppMacAddr + 1) = 0x33;
3387 *(*ppMacAddr + 2) = pIpAddr[12];
3388 *(*ppMacAddr + 3) = pIpAddr[13];
3389 *(*ppMacAddr + 4) = pIpAddr[14];
3390 *(*ppMacAddr + 5) = pIpAddr[15];
3395 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3396 *(*ppMacAddr) = 0x01;
3397 *(*ppMacAddr + 1) = 0x00;
3398 *(*ppMacAddr + 2) = 0x5e;
3399 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3400 *(*ppMacAddr + 4) = pIpAddr[2];
3401 *(*ppMacAddr + 5) = pIpAddr[3];
3408 BOOLEAN RTMPCheckForHang(
3409 IN NDIS_HANDLE MiniportAdapterContext
3413 IN NDIS_HANDLE MiniportAdapterContext
3417 // Private routines in rtmp_init.c
3419 NDIS_STATUS RTMPAllocAdapterBlock(
3421 OUT PRTMP_ADAPTER *ppAdapter
3424 NDIS_STATUS RTMPAllocTxRxRingMemory(
3425 IN PRTMP_ADAPTER pAd
3428 NDIS_STATUS RTMPFindAdapter(
3429 IN PRTMP_ADAPTER pAd,
3430 IN NDIS_HANDLE WrapperConfigurationContext
3433 NDIS_STATUS RTMPReadParametersHook(
3434 IN PRTMP_ADAPTER pAd
3437 VOID RTMPFreeAdapter(
3438 IN PRTMP_ADAPTER pAd
3441 NDIS_STATUS NICReadRegParameters(
3442 IN PRTMP_ADAPTER pAd,
3443 IN NDIS_HANDLE WrapperConfigurationContext
3447 VOID NICInitRT30xxRFRegisters(
3448 IN PRTMP_ADAPTER pAd);
3451 VOID NICReadEEPROMParameters(
3452 IN PRTMP_ADAPTER pAd,
3453 IN PUCHAR mac_addr);
3455 VOID NICInitAsicFromEEPROM(
3456 IN PRTMP_ADAPTER pAd);
3458 VOID NICInitTxRxRingAndBacklogQueue(
3459 IN PRTMP_ADAPTER pAd);
3461 NDIS_STATUS NICInitializeAdapter(
3462 IN PRTMP_ADAPTER pAd,
3463 IN BOOLEAN bHardReset);
3465 NDIS_STATUS NICInitializeAsic(
3466 IN PRTMP_ADAPTER pAd,
3467 IN BOOLEAN bHardReset);
3470 IN PRTMP_ADAPTER pAd);
3472 VOID RTMPRingCleanUp(
3473 IN PRTMP_ADAPTER pAd,
3477 IN PRTMP_ADAPTER pAd);
3479 NDIS_STATUS DbgSendPacket(
3480 IN PRTMP_ADAPTER pAd,
3481 IN PNDIS_PACKET pPacket);
3484 IN PRTMP_ADAPTER pAd);
3486 VOID NICResetFromError(
3487 IN PRTMP_ADAPTER pAd);
3489 VOID NICEraseFirmware(
3490 IN PRTMP_ADAPTER pAd);
3492 NDIS_STATUS NICLoadFirmware(
3493 IN PRTMP_ADAPTER pAd);
3495 NDIS_STATUS NICLoadRateSwitchingParams(
3496 IN PRTMP_ADAPTER pAd);
3498 BOOLEAN NICCheckForHang(
3499 IN PRTMP_ADAPTER pAd);
3501 VOID NICUpdateFifoStaCounters(
3502 IN PRTMP_ADAPTER pAd);
3504 VOID NICUpdateRawCounters(
3505 IN PRTMP_ADAPTER pAd);
3507 ULONG RTMPNotAllZero(
3511 VOID RTMPZeroMemory(
3515 ULONG RTMPCompareMemory(
3520 VOID RTMPMoveMemory(
3533 VOID RTMPPatchMacBbpBug(
3534 IN PRTMP_ADAPTER pAd);
3536 VOID RTMPPatchCardBus(
3537 IN PRTMP_ADAPTER pAdapter);
3539 VOID RTMPPatchRalinkCardBus(
3540 IN PRTMP_ADAPTER pAdapter,
3543 ULONG RTMPReadCBConfig(
3549 VOID RTMPWriteCBConfig(
3557 IN PRTMP_ADAPTER pAd,
3558 IN PRALINK_TIMER_STRUCT pTimer,
3559 IN PVOID pTimerFunc,
3564 IN PRALINK_TIMER_STRUCT pTimer,
3569 IN PRALINK_TIMER_STRUCT pTimer,
3572 VOID RTMPCancelTimer(
3573 IN PRALINK_TIMER_STRUCT pTimer,
3574 OUT BOOLEAN *pCancelled);
3577 IN PRTMP_ADAPTER pAd,
3580 VOID RTMPSetSignalLED(
3581 IN PRTMP_ADAPTER pAd,
3582 IN NDIS_802_11_RSSI Dbm);
3584 VOID RTMPEnableRxTx(
3585 IN PRTMP_ADAPTER pAd);
3588 // prototype in action.c
3590 VOID ActionStateMachineInit(
3591 IN PRTMP_ADAPTER pAd,
3592 IN STATE_MACHINE *S,
3593 OUT STATE_MACHINE_FUNC Trans[]);
3595 VOID MlmeADDBAAction(
3596 IN PRTMP_ADAPTER pAd,
3597 IN MLME_QUEUE_ELEM *Elem);
3599 VOID MlmeDELBAAction(
3600 IN PRTMP_ADAPTER pAd,
3601 IN MLME_QUEUE_ELEM *Elem);
3604 IN PRTMP_ADAPTER pAd,
3605 IN MLME_QUEUE_ELEM *Elem);
3607 VOID MlmeInvalidAction(
3608 IN PRTMP_ADAPTER pAd,
3609 IN MLME_QUEUE_ELEM *Elem);
3612 IN PRTMP_ADAPTER pAd,
3613 IN MLME_QUEUE_ELEM *Elem);
3615 #ifdef DOT11_N_SUPPORT
3616 VOID PeerAddBAReqAction(
3617 IN PRTMP_ADAPTER pAd,
3618 IN MLME_QUEUE_ELEM *Elem);
3620 VOID PeerAddBARspAction(
3621 IN PRTMP_ADAPTER pAd,
3622 IN MLME_QUEUE_ELEM *Elem);
3624 VOID PeerDelBAAction(
3625 IN PRTMP_ADAPTER pAd,
3626 IN MLME_QUEUE_ELEM *Elem);
3629 IN PRTMP_ADAPTER pAd,
3630 IN MLME_QUEUE_ELEM *Elem);
3631 #endif // DOT11_N_SUPPORT //
3633 VOID SendPSMPAction(
3634 IN PRTMP_ADAPTER pAd,
3639 #ifdef DOT11N_DRAFT3
3640 VOID SendBSS2040CoexistMgmtAction(
3641 IN PRTMP_ADAPTER pAd,
3646 VOID SendNotifyBWActionFrame(
3647 IN PRTMP_ADAPTER pAd,
3651 BOOLEAN ChannelSwitchSanityCheck(
3652 IN PRTMP_ADAPTER pAd,
3654 IN UCHAR NewChannel,
3655 IN UCHAR Secondary);
3657 VOID ChannelSwitchAction(
3658 IN PRTMP_ADAPTER pAd,
3661 IN UCHAR Secondary);
3663 ULONG BuildIntolerantChannelRep(
3664 IN PRTMP_ADAPTER pAd,
3667 VOID Update2040CoexistFrameAndNotify(
3668 IN PRTMP_ADAPTER pAd,
3670 IN BOOLEAN bAddIntolerantCha);
3672 VOID Send2040CoexistAction(
3673 IN PRTMP_ADAPTER pAd,
3675 IN BOOLEAN bAddIntolerantCha);
3676 #endif // DOT11N_DRAFT3 //
3679 IN PRTMP_ADAPTER pAd,
3680 IN MLME_QUEUE_ELEM *Elem);
3682 VOID PeerPublicAction(
3683 IN PRTMP_ADAPTER pAd,
3684 IN MLME_QUEUE_ELEM *Elem);
3686 #ifdef CONFIG_STA_SUPPORT
3687 VOID StaPublicAction(
3688 IN PRTMP_ADAPTER pAd,
3689 IN UCHAR Bss2040Coexist);
3690 #endif // CONFIG_STA_SUPPORT //
3693 VOID PeerBSSTranAction(
3694 IN PRTMP_ADAPTER pAd,
3695 IN MLME_QUEUE_ELEM *Elem);
3697 #ifdef DOT11_N_SUPPORT
3699 IN PRTMP_ADAPTER pAd,
3700 IN MLME_QUEUE_ELEM *Elem);
3701 #endif // DOT11_N_SUPPORT //
3704 IN PRTMP_ADAPTER pAd,
3705 IN MLME_QUEUE_ELEM *Elem);
3707 #ifdef DOT11_N_SUPPORT
3708 VOID RECBATimerTimeout(
3709 IN PVOID SystemSpecific1,
3710 IN PVOID FunctionContext,
3711 IN PVOID SystemSpecific2,
3712 IN PVOID SystemSpecific3);
3714 VOID ORIBATimerTimeout(
3715 IN PRTMP_ADAPTER pAd);
3717 VOID SendRefreshBAR(
3718 IN PRTMP_ADAPTER pAd,
3719 IN MAC_TABLE_ENTRY *pEntry);
3720 #endif // DOT11_N_SUPPORT //
3723 IN PRTMP_ADAPTER pAd,
3724 IN OUT PHEADER_802_11 pHdr80211,
3730 IN PRTMP_ADAPTER pAd,
3731 IN OUT PFRAME_BAR pCntlBar,
3735 VOID InsertActField(
3736 IN PRTMP_ADAPTER pAd,
3737 OUT PUCHAR pFrameBuf,
3738 OUT PULONG pFrameLen,
3742 BOOLEAN QosBADataParse(
3743 IN PRTMP_ADAPTER pAd,
3745 IN PUCHAR p8023Header,
3749 IN UCHAR DataOffset,
3751 IN UINT CurRxIndex);
3753 #ifdef DOT11_N_SUPPORT
3754 BOOLEAN CntlEnqueueForRecv(
3755 IN PRTMP_ADAPTER pAd,
3758 IN PFRAME_BA_REQ pMsg);
3760 VOID BaAutoManSwitch(
3761 IN PRTMP_ADAPTER pAd);
3762 #endif // DOT11_N_SUPPORT //
3765 IN PRTMP_ADAPTER pAd,
3766 IN UCHAR BatRecIdx);
3769 // Private routines in rtmp_data.c
3771 BOOLEAN RTMPHandleRxDoneInterrupt(
3772 IN PRTMP_ADAPTER pAd);
3774 VOID RTMPHandleTxDoneInterrupt(
3775 IN PRTMP_ADAPTER pAd);
3777 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3778 IN PRTMP_ADAPTER pAd,
3779 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3781 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3782 IN PRTMP_ADAPTER pAd);
3784 VOID RTMPHandleTBTTInterrupt(
3785 IN PRTMP_ADAPTER pAd);
3787 VOID RTMPHandlePreTBTTInterrupt(
3788 IN PRTMP_ADAPTER pAd);
3790 void RTMPHandleTwakeupInterrupt(
3791 IN PRTMP_ADAPTER pAd);
3793 VOID RTMPHandleRxCoherentInterrupt(
3794 IN PRTMP_ADAPTER pAd);
3796 BOOLEAN TxFrameIsAggregatible(
3797 IN PRTMP_ADAPTER pAd,
3798 IN PUCHAR pPrevAddr1,
3799 IN PUCHAR p8023hdr);
3801 BOOLEAN PeerIsAggreOn(
3802 IN PRTMP_ADAPTER pAd,
3804 IN PMAC_TABLE_ENTRY pMacEntry);
3806 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3807 IN PNDIS_BUFFER pFirstBuffer,
3808 IN UCHAR DesiredOffset,
3812 NDIS_STATUS STASendPacket(
3813 IN PRTMP_ADAPTER pAd,
3814 IN PNDIS_PACKET pPacket);
3816 VOID STASendPackets(
3817 IN NDIS_HANDLE MiniportAdapterContext,
3818 IN PPNDIS_PACKET ppPacketArray,
3819 IN UINT NumberOfPackets);
3821 VOID RTMPDeQueuePacket(
3822 IN PRTMP_ADAPTER pAd,
3823 IN BOOLEAN bIntContext,
3825 IN UCHAR Max_Tx_Packets);
3827 NDIS_STATUS RTMPHardTransmit(
3828 IN PRTMP_ADAPTER pAd,
3829 IN PNDIS_PACKET pPacket,
3831 OUT PULONG pFreeTXDLeft);
3833 NDIS_STATUS STAHardTransmit(
3834 IN PRTMP_ADAPTER pAd,
3838 VOID STARxEAPOLFrameIndicate(
3839 IN PRTMP_ADAPTER pAd,
3840 IN MAC_TABLE_ENTRY *pEntry,
3842 IN UCHAR FromWhichBSSID);
3844 NDIS_STATUS RTMPFreeTXDRequest(
3845 IN PRTMP_ADAPTER pAd,
3847 IN UCHAR NumberRequired,
3848 IN PUCHAR FreeNumberIs);
3850 NDIS_STATUS MlmeHardTransmit(
3851 IN PRTMP_ADAPTER pAd,
3853 IN PNDIS_PACKET pPacket);
3855 NDIS_STATUS MlmeHardTransmitMgmtRing(
3856 IN PRTMP_ADAPTER pAd,
3858 IN PNDIS_PACKET pPacket);
3860 NDIS_STATUS MlmeHardTransmitTxRing(
3861 IN PRTMP_ADAPTER pAd,
3863 IN PNDIS_PACKET pPacket);
3865 USHORT RTMPCalcDuration(
3866 IN PRTMP_ADAPTER pAd,
3871 IN PRTMP_ADAPTER pAd,
3872 IN PTXWI_STRUC pTxWI,
3875 IN BOOLEAN InsTimestamp,
3878 IN BOOLEAN NSeq, // HW new a sequence.
3887 IN HTTRANSMIT_SETTING *pTransmit);
3890 VOID RTMPWriteTxWI_Data(
3891 IN PRTMP_ADAPTER pAd,
3892 IN OUT PTXWI_STRUC pTxWI,
3896 VOID RTMPWriteTxWI_Cache(
3897 IN PRTMP_ADAPTER pAd,
3898 IN OUT PTXWI_STRUC pTxWI,
3901 VOID RTMPWriteTxDescriptor(
3902 IN PRTMP_ADAPTER pAd,
3907 VOID RTMPSuspendMsduTransmission(
3908 IN PRTMP_ADAPTER pAd);
3910 VOID RTMPResumeMsduTransmission(
3911 IN PRTMP_ADAPTER pAd);
3913 NDIS_STATUS MiniportMMRequest(
3914 IN PRTMP_ADAPTER pAd,
3919 NDIS_STATUS MiniportDataMMRequest(
3920 IN PRTMP_ADAPTER pAd,
3925 VOID RTMPSendNullFrame(
3926 IN PRTMP_ADAPTER pAd,
3928 IN BOOLEAN bQosNull);
3930 VOID RTMPSendDisassociationFrame(
3931 IN PRTMP_ADAPTER pAd);
3933 VOID RTMPSendRTSFrame(
3934 IN PRTMP_ADAPTER pAd,
3936 IN unsigned int NextMpduSize,
3939 IN USHORT AckDuration,
3944 NDIS_STATUS RTMPApplyPacketFilter(
3945 IN PRTMP_ADAPTER pAd,
3946 IN PRT28XX_RXD_STRUC pRxD,
3947 IN PHEADER_802_11 pHeader);
3949 PQUEUE_HEADER RTMPCheckTxSwQueue(
3950 IN PRTMP_ADAPTER pAd,
3953 #ifdef CONFIG_STA_SUPPORT
3954 VOID RTMPReportMicError(
3955 IN PRTMP_ADAPTER pAd,
3956 IN PCIPHER_KEY pWpaKey);
3958 VOID WpaMicFailureReportFrame(
3959 IN PRTMP_ADAPTER pAd,
3960 IN MLME_QUEUE_ELEM *Elem);
3962 VOID WpaDisassocApAndBlockAssoc(
3963 IN PVOID SystemSpecific1,
3964 IN PVOID FunctionContext,
3965 IN PVOID SystemSpecific2,
3966 IN PVOID SystemSpecific3);
3967 #endif // CONFIG_STA_SUPPORT //
3969 NDIS_STATUS RTMPCloneNdisPacket(
3970 IN PRTMP_ADAPTER pAd,
3971 IN BOOLEAN pInsAMSDUHdr,
3972 IN PNDIS_PACKET pInPacket,
3973 OUT PNDIS_PACKET *ppOutPacket);
3975 NDIS_STATUS RTMPAllocateNdisPacket(
3976 IN PRTMP_ADAPTER pAd,
3977 IN PNDIS_PACKET *pPacket,
3983 VOID RTMPFreeNdisPacket(
3984 IN PRTMP_ADAPTER pAd,
3985 IN PNDIS_PACKET pPacket);
3987 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3988 IN PRTMP_ADAPTER pAd,
3991 BOOLEAN RTMPCheckDHCPFrame(
3992 IN PRTMP_ADAPTER pAd,
3993 IN PNDIS_PACKET pPacket);
3996 BOOLEAN RTMPCheckEtherType(
3997 IN PRTMP_ADAPTER pAd,
3998 IN PNDIS_PACKET pPacket);
4001 VOID RTMPCckBbpTuning(
4002 IN PRTMP_ADAPTER pAd,
4006 // Private routines in rtmp_wep.c
4008 VOID RTMPInitWepEngine(
4009 IN PRTMP_ADAPTER pAd,
4015 VOID RTMPEncryptData(
4016 IN PRTMP_ADAPTER pAd,
4021 BOOLEAN RTMPDecryptData(
4022 IN PRTMP_ADAPTER pAdapter,
4027 BOOLEAN RTMPSoftDecryptWEP(
4028 IN PRTMP_ADAPTER pAd,
4030 IN ULONG DataByteCnt,
4031 IN PCIPHER_KEY pGroupKey);
4034 IN PRTMP_ADAPTER pAd,
4038 IN PARCFOURCONTEXT Ctx,
4043 IN PARCFOURCONTEXT Ctx);
4045 VOID ARCFOUR_DECRYPT(
4046 IN PARCFOURCONTEXT Ctx,
4051 VOID ARCFOUR_ENCRYPT(
4052 IN PARCFOURCONTEXT Ctx,
4057 VOID WPAARCFOUR_ENCRYPT(
4058 IN PARCFOURCONTEXT Ctx,
4063 UINT RTMP_CALC_FCS32(
4072 // Asic/RF/BBP related functions
4074 VOID AsicAdjustTxPower(
4075 IN PRTMP_ADAPTER pAd);
4077 VOID AsicUpdateProtect(
4078 IN PRTMP_ADAPTER pAd,
4079 IN USHORT OperaionMode,
4081 IN BOOLEAN bDisableBGProtect,
4082 IN BOOLEAN bNonGFExist);
4084 VOID AsicSwitchChannel(
4085 IN PRTMP_ADAPTER pAd,
4089 VOID AsicLockChannel(
4090 IN PRTMP_ADAPTER pAd,
4093 VOID AsicAntennaSelect(
4094 IN PRTMP_ADAPTER pAd,
4097 VOID AsicAntennaSetting(
4098 IN PRTMP_ADAPTER pAd,
4099 IN ABGBAND_STATE BandState);
4101 VOID AsicRfTuningExec(
4102 IN PVOID SystemSpecific1,
4103 IN PVOID FunctionContext,
4104 IN PVOID SystemSpecific2,
4105 IN PVOID SystemSpecific3);
4107 #ifdef CONFIG_STA_SUPPORT
4108 VOID AsicSleepThenAutoWakeup(
4109 IN PRTMP_ADAPTER pAd,
4110 IN USHORT TbttNumToNextWakeUp);
4112 VOID AsicForceSleep(
4113 IN PRTMP_ADAPTER pAd);
4115 VOID AsicForceWakeup(
4116 IN PRTMP_ADAPTER pAd,
4117 IN BOOLEAN bFromTx);
4118 #endif // CONFIG_STA_SUPPORT //
4121 IN PRTMP_ADAPTER pAd,
4124 VOID AsicSetMcastWC(
4125 IN PRTMP_ADAPTER pAd);
4127 VOID AsicDelWcidTab(
4128 IN PRTMP_ADAPTER pAd,
4132 IN PRTMP_ADAPTER pAd);
4134 VOID AsicDisableRDG(
4135 IN PRTMP_ADAPTER pAd);
4137 VOID AsicDisableSync(
4138 IN PRTMP_ADAPTER pAd);
4140 VOID AsicEnableBssSync(
4141 IN PRTMP_ADAPTER pAd);
4143 VOID AsicEnableIbssSync(
4144 IN PRTMP_ADAPTER pAd);
4146 VOID AsicSetEdcaParm(
4147 IN PRTMP_ADAPTER pAd,
4148 IN PEDCA_PARM pEdcaParm);
4150 VOID AsicSetSlotTime(
4151 IN PRTMP_ADAPTER pAd,
4152 IN BOOLEAN bUseShortSlotTime);
4154 VOID AsicAddSharedKeyEntry(
4155 IN PRTMP_ADAPTER pAd,
4163 VOID AsicRemoveSharedKeyEntry(
4164 IN PRTMP_ADAPTER pAd,
4168 VOID AsicUpdateWCIDAttribute(
4169 IN PRTMP_ADAPTER pAd,
4173 IN BOOLEAN bUsePairewiseKeyTable);
4175 VOID AsicUpdateWCIDIVEIV(
4176 IN PRTMP_ADAPTER pAd,
4181 VOID AsicUpdateRxWCIDTable(
4182 IN PRTMP_ADAPTER pAd,
4186 VOID AsicAddKeyEntry(
4187 IN PRTMP_ADAPTER pAd,
4191 IN PCIPHER_KEY pCipherKey,
4192 IN BOOLEAN bUsePairewiseKeyTable,
4195 VOID AsicAddPairwiseKeyEntry(
4196 IN PRTMP_ADAPTER pAd,
4199 IN CIPHER_KEY *pCipherKey);
4201 VOID AsicRemovePairwiseKeyEntry(
4202 IN PRTMP_ADAPTER pAd,
4206 BOOLEAN AsicSendCommandToMcu(
4207 IN PRTMP_ADAPTER pAd,
4214 VOID MacAddrRandomBssid(
4215 IN PRTMP_ADAPTER pAd,
4218 VOID MgtMacHeaderInit(
4219 IN PRTMP_ADAPTER pAd,
4220 IN OUT PHEADER_802_11 pHdr80211,
4227 IN PRTMP_ADAPTER pAd);
4230 IN PRTMP_ADAPTER pAd);
4236 #ifdef DOT11_N_SUPPORT
4238 IN PRTMP_ADAPTER pAd,
4240 #endif // DOT11_N_SUPPORT //
4242 ULONG BssTableSearch(
4247 ULONG BssSsidTableSearch(
4254 ULONG BssTableSearchWithSSID(
4261 VOID BssTableDeleteEntry(
4262 IN OUT PBSS_TABLE pTab,
4266 #ifdef DOT11_N_SUPPORT
4267 VOID BATableDeleteORIEntry(
4268 IN OUT PRTMP_ADAPTER pAd,
4269 IN BA_ORI_ENTRY *pBAORIEntry);
4271 VOID BATableDeleteRECEntry(
4272 IN OUT PRTMP_ADAPTER pAd,
4273 IN BA_REC_ENTRY *pBARECEntry);
4275 VOID BATableTearORIEntry(
4276 IN OUT PRTMP_ADAPTER pAd,
4279 IN BOOLEAN bForceDelete,
4282 VOID BATableTearRECEntry(
4283 IN OUT PRTMP_ADAPTER pAd,
4287 #endif // DOT11_N_SUPPORT //
4290 IN PRTMP_ADAPTER pAd,
4291 OUT PBSS_ENTRY pBss,
4296 IN USHORT BeaconPeriod,
4299 IN USHORT CapabilityInfo,
4301 IN UCHAR SupRateLen,
4303 IN UCHAR ExtRateLen,
4304 IN HT_CAPABILITY_IE *pHtCapability,
4305 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4306 IN UCHAR HtCapabilityLen,
4307 IN UCHAR AddHtInfoLen,
4308 IN UCHAR NewExtChanOffset,
4311 IN LARGE_INTEGER TimeStamp,
4313 IN PEDCA_PARM pEdcaParm,
4314 IN PQOS_CAPABILITY_PARM pQosCapability,
4315 IN PQBSS_LOAD_PARM pQbssLoad,
4316 IN USHORT LengthVIE,
4317 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4319 ULONG BssTableSetEntry(
4320 IN PRTMP_ADAPTER pAd,
4321 OUT PBSS_TABLE pTab,
4326 IN USHORT BeaconPeriod,
4329 IN USHORT CapabilityInfo,
4331 IN UCHAR SupRateLen,
4333 IN UCHAR ExtRateLen,
4334 IN HT_CAPABILITY_IE *pHtCapability,
4335 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4336 IN UCHAR HtCapabilityLen,
4337 IN UCHAR AddHtInfoLen,
4338 IN UCHAR NewExtChanOffset,
4341 IN LARGE_INTEGER TimeStamp,
4343 IN PEDCA_PARM pEdcaParm,
4344 IN PQOS_CAPABILITY_PARM pQosCapability,
4345 IN PQBSS_LOAD_PARM pQbssLoad,
4346 IN USHORT LengthVIE,
4347 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4349 #ifdef DOT11_N_SUPPORT
4350 VOID BATableInsertEntry(
4351 IN PRTMP_ADAPTER pAd,
4353 IN USHORT TimeOutValue,
4354 IN USHORT StartingSeq,
4357 IN UCHAR OriginatorStatus,
4358 IN BOOLEAN IsRecipient);
4360 #ifdef DOT11N_DRAFT3
4361 VOID Bss2040CoexistTimeOut(
4362 IN PVOID SystemSpecific1,
4363 IN PVOID FunctionContext,
4364 IN PVOID SystemSpecific2,
4365 IN PVOID SystemSpecific3);
4369 IN PRTMP_ADAPTER pAd);
4371 ULONG TriEventTableSetEntry(
4372 IN PRTMP_ADAPTER pAd,
4373 OUT TRIGGER_EVENT_TAB *Tab,
4375 IN HT_CAPABILITY_IE *pHtCapability,
4376 IN UCHAR HtCapabilityLen,
4378 IN UCHAR ChannelNo);
4380 VOID TriEventCounterMaintenance(
4381 IN PRTMP_ADAPTER pAd);
4382 #endif // DOT11N_DRAFT3 //
4383 #endif // DOT11_N_SUPPORT //
4385 VOID BssTableSsidSort(
4386 IN PRTMP_ADAPTER pAd,
4387 OUT BSS_TABLE *OutTab,
4391 VOID BssTableSortByRssi(
4392 IN OUT BSS_TABLE *OutTab);
4394 VOID BssCipherParse(
4395 IN OUT PBSS_ENTRY pBss);
4397 NDIS_STATUS MlmeQueueInit(
4398 IN MLME_QUEUE *Queue);
4400 VOID MlmeQueueDestroy(
4401 IN MLME_QUEUE *Queue);
4403 BOOLEAN MlmeEnqueue(
4404 IN PRTMP_ADAPTER pAd,
4410 BOOLEAN MlmeEnqueueForRecv(
4411 IN PRTMP_ADAPTER pAd,
4413 IN ULONG TimeStampHigh,
4414 IN ULONG TimeStampLow,
4423 BOOLEAN MlmeDequeue(
4424 IN MLME_QUEUE *Queue,
4425 OUT MLME_QUEUE_ELEM **Elem);
4427 VOID MlmeRestartStateMachine(
4428 IN PRTMP_ADAPTER pAd);
4430 BOOLEAN MlmeQueueEmpty(
4431 IN MLME_QUEUE *Queue);
4433 BOOLEAN MlmeQueueFull(
4434 IN MLME_QUEUE *Queue);
4436 BOOLEAN MsgTypeSubst(
4437 IN PRTMP_ADAPTER pAd,
4438 IN PFRAME_802_11 pFrame,
4442 VOID StateMachineInit(
4443 IN STATE_MACHINE *Sm,
4444 IN STATE_MACHINE_FUNC Trans[],
4447 IN STATE_MACHINE_FUNC DefFunc,
4451 VOID StateMachineSetAction(
4452 IN STATE_MACHINE *S,
4455 IN STATE_MACHINE_FUNC F);
4457 VOID StateMachinePerformAction(
4458 IN PRTMP_ADAPTER pAd,
4459 IN STATE_MACHINE *S,
4460 IN MLME_QUEUE_ELEM *Elem);
4463 IN PRTMP_ADAPTER pAd,
4464 IN MLME_QUEUE_ELEM *Elem);
4466 VOID AssocStateMachineInit(
4467 IN PRTMP_ADAPTER pAd,
4468 IN STATE_MACHINE *Sm,
4469 OUT STATE_MACHINE_FUNC Trans[]);
4471 VOID ReassocTimeout(
4472 IN PVOID SystemSpecific1,
4473 IN PVOID FunctionContext,
4474 IN PVOID SystemSpecific2,
4475 IN PVOID SystemSpecific3);
4478 IN PVOID SystemSpecific1,
4479 IN PVOID FunctionContext,
4480 IN PVOID SystemSpecific2,
4481 IN PVOID SystemSpecific3);
4483 VOID DisassocTimeout(
4484 IN PVOID SystemSpecific1,
4485 IN PVOID FunctionContext,
4486 IN PVOID SystemSpecific2,
4487 IN PVOID SystemSpecific3);
4489 //----------------------------------------------
4490 VOID MlmeDisassocReqAction(
4491 IN PRTMP_ADAPTER pAd,
4492 IN MLME_QUEUE_ELEM *Elem);
4494 VOID MlmeAssocReqAction(
4495 IN PRTMP_ADAPTER pAd,
4496 IN MLME_QUEUE_ELEM *Elem);
4498 VOID MlmeReassocReqAction(
4499 IN PRTMP_ADAPTER pAd,
4500 IN MLME_QUEUE_ELEM *Elem);
4502 VOID MlmeDisassocReqAction(
4503 IN PRTMP_ADAPTER pAd,
4504 IN MLME_QUEUE_ELEM *Elem);
4506 VOID PeerAssocRspAction(
4507 IN PRTMP_ADAPTER pAd,
4508 IN MLME_QUEUE_ELEM *Elem);
4510 VOID PeerReassocRspAction(
4511 IN PRTMP_ADAPTER pAd,
4512 IN MLME_QUEUE_ELEM *Elem);
4514 VOID PeerDisassocAction(
4515 IN PRTMP_ADAPTER pAd,
4516 IN MLME_QUEUE_ELEM *Elem);
4518 VOID DisassocTimeoutAction(
4519 IN PRTMP_ADAPTER pAd,
4520 IN MLME_QUEUE_ELEM *Elem);
4522 VOID AssocTimeoutAction(
4523 IN PRTMP_ADAPTER pAd,
4524 IN MLME_QUEUE_ELEM *Elem);
4526 VOID ReassocTimeoutAction(
4527 IN PRTMP_ADAPTER pAd,
4528 IN MLME_QUEUE_ELEM *Elem);
4531 IN PRTMP_ADAPTER pAd,
4534 VOID SwitchBetweenWepAndCkip(
4535 IN PRTMP_ADAPTER pAd);
4537 VOID InvalidStateWhenAssoc(
4538 IN PRTMP_ADAPTER pAd,
4539 IN MLME_QUEUE_ELEM *Elem);
4541 VOID InvalidStateWhenReassoc(
4542 IN PRTMP_ADAPTER pAd,
4543 IN MLME_QUEUE_ELEM *Elem);
4545 VOID InvalidStateWhenDisassociate(
4546 IN PRTMP_ADAPTER pAd,
4547 IN MLME_QUEUE_ELEM *Elem);
4550 VOID MlmeCntlConfirm(
4551 IN PRTMP_ADAPTER pAd,
4557 IN PRTMP_ADAPTER pAd);
4559 VOID ComposeNullFrame(
4560 IN PRTMP_ADAPTER pAd);
4563 IN PRTMP_ADAPTER pAd,
4565 IN USHORT CapabilityInfo,
4568 IN UCHAR SupRateLen,
4570 IN UCHAR ExtRateLen,
4571 IN PEDCA_PARM pEdcaParm,
4572 IN HT_CAPABILITY_IE *pHtCapability,
4573 IN UCHAR HtCapabilityLen,
4574 IN ADD_HT_INFO_IE *pAddHtInfo);
4576 VOID AuthStateMachineInit(
4577 IN PRTMP_ADAPTER pAd,
4578 IN PSTATE_MACHINE sm,
4579 OUT STATE_MACHINE_FUNC Trans[]);
4582 IN PVOID SystemSpecific1,
4583 IN PVOID FunctionContext,
4584 IN PVOID SystemSpecific2,
4585 IN PVOID SystemSpecific3);
4587 VOID MlmeAuthReqAction(
4588 IN PRTMP_ADAPTER pAd,
4589 IN MLME_QUEUE_ELEM *Elem);
4591 VOID PeerAuthRspAtSeq2Action(
4592 IN PRTMP_ADAPTER pAd,
4593 IN MLME_QUEUE_ELEM *Elem);
4595 VOID PeerAuthRspAtSeq4Action(
4596 IN PRTMP_ADAPTER pAd,
4597 IN MLME_QUEUE_ELEM *Elem);
4599 VOID AuthTimeoutAction(
4600 IN PRTMP_ADAPTER pAd,
4601 IN MLME_QUEUE_ELEM *Elem);
4604 IN PRTMP_ADAPTER pAd,
4607 VOID MlmeDeauthReqAction(
4608 IN PRTMP_ADAPTER pAd,
4609 IN MLME_QUEUE_ELEM *Elem);
4611 VOID InvalidStateWhenAuth(
4612 IN PRTMP_ADAPTER pAd,
4613 IN MLME_QUEUE_ELEM *Elem);
4615 //=============================================
4617 VOID AuthRspStateMachineInit(
4618 IN PRTMP_ADAPTER pAd,
4619 IN PSTATE_MACHINE Sm,
4620 IN STATE_MACHINE_FUNC Trans[]);
4622 VOID PeerDeauthAction(
4623 IN PRTMP_ADAPTER pAd,
4624 IN MLME_QUEUE_ELEM *Elem);
4626 VOID PeerAuthSimpleRspGenAndSend(
4627 IN PRTMP_ADAPTER pAd,
4628 IN PHEADER_802_11 pHdr80211,
4635 // Private routines in dls.c
4638 //========================================
4640 VOID SyncStateMachineInit(
4641 IN PRTMP_ADAPTER pAd,
4642 IN STATE_MACHINE *Sm,
4643 OUT STATE_MACHINE_FUNC Trans[]);
4646 IN PVOID SystemSpecific1,
4647 IN PVOID FunctionContext,
4648 IN PVOID SystemSpecific2,
4649 IN PVOID SystemSpecific3);
4652 IN PVOID SystemSpecific1,
4653 IN PVOID FunctionContext,
4654 IN PVOID SystemSpecific2,
4655 IN PVOID SystemSpecific3);
4657 VOID MlmeScanReqAction(
4658 IN PRTMP_ADAPTER pAd,
4659 IN MLME_QUEUE_ELEM *Elem);
4661 VOID InvalidStateWhenScan(
4662 IN PRTMP_ADAPTER pAd,
4663 IN MLME_QUEUE_ELEM *Elem);
4665 VOID InvalidStateWhenJoin(
4666 IN PRTMP_ADAPTER pAd,
4667 IN MLME_QUEUE_ELEM *Elem);
4669 VOID InvalidStateWhenStart(
4670 IN PRTMP_ADAPTER pAd,
4671 IN MLME_QUEUE_ELEM *Elem);
4674 IN PRTMP_ADAPTER pAd,
4675 IN MLME_QUEUE_ELEM *Elem);
4677 VOID EnqueueProbeRequest(
4678 IN PRTMP_ADAPTER pAd);
4680 BOOLEAN ScanRunning(
4681 IN PRTMP_ADAPTER pAd);
4682 //=========================================
4685 IN PRTMP_ADAPTER pAd,
4686 IN STATE_MACHINE *S,
4687 OUT STATE_MACHINE_FUNC Trans[]);
4689 VOID MlmeCntlMachinePerformAction(
4690 IN PRTMP_ADAPTER pAd,
4691 IN STATE_MACHINE *S,
4692 IN MLME_QUEUE_ELEM *Elem);
4695 IN PRTMP_ADAPTER pAd,
4696 IN MLME_QUEUE_ELEM *Elem);
4698 VOID CntlOidScanProc(
4699 IN PRTMP_ADAPTER pAd,
4700 IN MLME_QUEUE_ELEM *Elem);
4702 VOID CntlOidSsidProc(
4703 IN PRTMP_ADAPTER pAd,
4704 IN MLME_QUEUE_ELEM * Elem);
4706 VOID CntlOidRTBssidProc(
4707 IN PRTMP_ADAPTER pAd,
4708 IN MLME_QUEUE_ELEM * Elem);
4710 VOID CntlMlmeRoamingProc(
4711 IN PRTMP_ADAPTER pAd,
4712 IN MLME_QUEUE_ELEM * Elem);
4714 VOID CntlWaitDisassocProc(
4715 IN PRTMP_ADAPTER pAd,
4716 IN MLME_QUEUE_ELEM *Elem);
4718 VOID CntlWaitJoinProc(
4719 IN PRTMP_ADAPTER pAd,
4720 IN MLME_QUEUE_ELEM *Elem);
4722 VOID CntlWaitReassocProc(
4723 IN PRTMP_ADAPTER pAd,
4724 IN MLME_QUEUE_ELEM *Elem);
4726 VOID CntlWaitStartProc(
4727 IN PRTMP_ADAPTER pAd,
4728 IN MLME_QUEUE_ELEM *Elem);
4730 VOID CntlWaitAuthProc(
4731 IN PRTMP_ADAPTER pAd,
4732 IN MLME_QUEUE_ELEM *Elem);
4734 VOID CntlWaitAuthProc2(
4735 IN PRTMP_ADAPTER pAd,
4736 IN MLME_QUEUE_ELEM *Elem);
4738 VOID CntlWaitAssocProc(
4739 IN PRTMP_ADAPTER pAd,
4740 IN MLME_QUEUE_ELEM *Elem);
4743 IN PRTMP_ADAPTER pAd,
4747 IN PRTMP_ADAPTER pAd,
4748 IN BOOLEAN IsReqFromAP);
4750 VOID IterateOnBssTab(
4751 IN PRTMP_ADAPTER pAd);
4753 VOID IterateOnBssTab2(
4754 IN PRTMP_ADAPTER pAd);;
4757 IN PRTMP_ADAPTER pAd,
4758 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4762 IN PRTMP_ADAPTER pAd,
4763 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4765 IN USHORT CapabilityInfo,
4767 IN USHORT ListenIntv);
4770 IN PRTMP_ADAPTER pAd,
4771 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4777 VOID DisassocParmFill(
4778 IN PRTMP_ADAPTER pAd,
4779 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4784 IN PRTMP_ADAPTER pAd,
4785 IN OUT MLME_START_REQ_STRUCT *StartReq,
4790 IN PRTMP_ADAPTER pAd,
4791 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4796 IN PRTMP_ADAPTER pAd);
4798 VOID EnqueueBeaconFrame(
4799 IN PRTMP_ADAPTER pAd);
4801 VOID MlmeJoinReqAction(
4802 IN PRTMP_ADAPTER pAd,
4803 IN MLME_QUEUE_ELEM *Elem);
4805 VOID MlmeScanReqAction(
4806 IN PRTMP_ADAPTER pAd,
4807 IN MLME_QUEUE_ELEM *Elem);
4809 VOID MlmeStartReqAction(
4810 IN PRTMP_ADAPTER pAd,
4811 IN MLME_QUEUE_ELEM *Elem);
4813 VOID ScanTimeoutAction(
4814 IN PRTMP_ADAPTER pAd,
4815 IN MLME_QUEUE_ELEM *Elem);
4817 VOID BeaconTimeoutAtJoinAction(
4818 IN PRTMP_ADAPTER pAd,
4819 IN MLME_QUEUE_ELEM *Elem);
4821 VOID PeerBeaconAtScanAction(
4822 IN PRTMP_ADAPTER pAd,
4823 IN MLME_QUEUE_ELEM *Elem);
4825 VOID PeerBeaconAtJoinAction(
4826 IN PRTMP_ADAPTER pAd,
4827 IN MLME_QUEUE_ELEM *Elem);
4830 IN PRTMP_ADAPTER pAd,
4831 IN MLME_QUEUE_ELEM *Elem);
4833 VOID PeerProbeReqAction(
4834 IN PRTMP_ADAPTER pAd,
4835 IN MLME_QUEUE_ELEM *Elem);
4837 VOID ScanNextChannel(
4838 IN PRTMP_ADAPTER pAd);
4840 ULONG MakeIbssBeacon(
4841 IN PRTMP_ADAPTER pAd);
4843 VOID CCXAdjacentAPReport(
4844 IN PRTMP_ADAPTER pAd);
4846 BOOLEAN MlmeScanReqSanity(
4847 IN PRTMP_ADAPTER pAd,
4853 OUT UCHAR *ScanType);
4855 BOOLEAN PeerBeaconAndProbeRspSanity(
4856 IN PRTMP_ADAPTER pAd,
4859 IN UCHAR MsgChannel,
4863 OUT UCHAR *pSsidLen,
4864 OUT UCHAR *pBssType,
4865 OUT USHORT *pBeaconPeriod,
4866 OUT UCHAR *pChannel,
4867 OUT UCHAR *pNewChannel,
4868 OUT LARGE_INTEGER *pTimestamp,
4869 OUT CF_PARM *pCfParm,
4870 OUT USHORT *pAtimWin,
4871 OUT USHORT *pCapabilityInfo,
4873 OUT UCHAR *pDtimCount,
4874 OUT UCHAR *pDtimPeriod,
4875 OUT UCHAR *pBcastFlag,
4876 OUT UCHAR *pMessageToMe,
4877 OUT UCHAR SupRate[],
4878 OUT UCHAR *pSupRateLen,
4879 OUT UCHAR ExtRate[],
4880 OUT UCHAR *pExtRateLen,
4881 OUT UCHAR *pCkipFlag,
4882 OUT UCHAR *pAironetCellPowerLimit,
4883 OUT PEDCA_PARM pEdcaParm,
4884 OUT PQBSS_LOAD_PARM pQbssLoad,
4885 OUT PQOS_CAPABILITY_PARM pQosCapability,
4886 OUT ULONG *pRalinkIe,
4887 OUT UCHAR *pHtCapabilityLen,
4888 #ifdef CONFIG_STA_SUPPORT
4889 OUT UCHAR *pPreNHtCapabilityLen,
4890 #endif // CONFIG_STA_SUPPORT //
4891 OUT HT_CAPABILITY_IE *pHtCapability,
4892 OUT UCHAR *AddHtInfoLen,
4893 OUT ADD_HT_INFO_IE *AddHtInfo,
4894 OUT UCHAR *NewExtChannel,
4895 OUT USHORT *LengthVIE,
4896 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4898 BOOLEAN PeerAddBAReqActionSanity(
4899 IN PRTMP_ADAPTER pAd,
4904 BOOLEAN PeerAddBARspActionSanity(
4905 IN PRTMP_ADAPTER pAd,
4909 BOOLEAN PeerDelBAActionSanity(
4910 IN PRTMP_ADAPTER pAd,
4915 BOOLEAN MlmeAssocReqSanity(
4916 IN PRTMP_ADAPTER pAd,
4920 OUT USHORT *CapabilityInfo,
4922 OUT USHORT *ListenIntv);
4924 BOOLEAN MlmeAuthReqSanity(
4925 IN PRTMP_ADAPTER pAd,
4932 BOOLEAN MlmeStartReqSanity(
4933 IN PRTMP_ADAPTER pAd,
4937 OUT UCHAR *Ssidlen);
4939 BOOLEAN PeerAuthSanity(
4940 IN PRTMP_ADAPTER pAd,
4947 OUT CHAR ChlgText[]);
4949 BOOLEAN PeerAssocRspSanity(
4950 IN PRTMP_ADAPTER pAd,
4954 OUT USHORT *pCapabilityInfo,
4955 OUT USHORT *pStatus,
4957 OUT UCHAR SupRate[],
4958 OUT UCHAR *pSupRateLen,
4959 OUT UCHAR ExtRate[],
4960 OUT UCHAR *pExtRateLen,
4961 OUT HT_CAPABILITY_IE *pHtCapability,
4962 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4963 OUT UCHAR *pHtCapabilityLen,
4964 OUT UCHAR *pAddHtInfoLen,
4965 OUT UCHAR *pNewExtChannelOffset,
4966 OUT PEDCA_PARM pEdcaParm,
4967 OUT UCHAR *pCkipFlag);
4969 BOOLEAN PeerDisassocSanity(
4970 IN PRTMP_ADAPTER pAd,
4974 OUT USHORT *Reason);
4976 BOOLEAN PeerWpaMessageSanity(
4977 IN PRTMP_ADAPTER pAd,
4978 IN PEAPOL_PACKET pMsg,
4981 IN MAC_TABLE_ENTRY *pEntry);
4983 BOOLEAN PeerDeauthSanity(
4984 IN PRTMP_ADAPTER pAd,
4988 OUT USHORT *Reason);
4990 BOOLEAN PeerProbeReqSanity(
4991 IN PRTMP_ADAPTER pAd,
4996 OUT UCHAR *pSsidLen);
5002 OUT UCHAR *BcastFlag,
5003 OUT UCHAR *DtimCount,
5004 OUT UCHAR *DtimPeriod,
5005 OUT UCHAR *MessageToMe);
5007 UCHAR ChannelSanity(
5008 IN PRTMP_ADAPTER pAd,
5011 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5012 IN PBSS_ENTRY pBss);
5014 BOOLEAN MlmeDelBAReqSanity(
5015 IN PRTMP_ADAPTER pAd,
5019 BOOLEAN MlmeAddBAReqSanity(
5020 IN PRTMP_ADAPTER pAd,
5025 ULONG MakeOutgoingFrame(
5027 OUT ULONG *Length, ...);
5030 IN PRTMP_ADAPTER pAd,
5034 IN PRTMP_ADAPTER pAd);
5036 VOID AsicUpdateAutoFallBackTable(
5037 IN PRTMP_ADAPTER pAd,
5040 VOID MlmePeriodicExec(
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);
5053 IN PVOID SystemSpecific1,
5054 IN PVOID FunctionContext,
5055 IN PVOID SystemSpecific2,
5056 IN PVOID SystemSpecific3);
5058 VOID STAMlmePeriodicExec(
5062 IN PRTMP_ADAPTER pAd);
5064 VOID MlmeAutoReconnectLastSSID(
5065 IN PRTMP_ADAPTER pAd);
5067 BOOLEAN MlmeValidateSSID(
5071 VOID MlmeCheckForRoaming(
5072 IN PRTMP_ADAPTER pAd,
5075 VOID MlmeCheckForFastRoaming(
5076 IN PRTMP_ADAPTER pAd,
5079 VOID MlmeDynamicTxRateSwitching(
5080 IN PRTMP_ADAPTER pAd);
5083 IN PRTMP_ADAPTER pAd,
5084 IN PMAC_TABLE_ENTRY pEntry,
5085 IN PRTMP_TX_RATE_SWITCH pTxRate);
5087 VOID MlmeSelectTxRateTable(
5088 IN PRTMP_ADAPTER pAd,
5089 IN PMAC_TABLE_ENTRY pEntry,
5091 IN PUCHAR pTableSize,
5092 IN PUCHAR pInitTxRateIdx);
5094 VOID MlmeCalculateChannelQuality(
5095 IN PRTMP_ADAPTER pAd,
5098 VOID MlmeCheckPsmChange(
5099 IN PRTMP_ADAPTER pAd,
5103 IN PRTMP_ADAPTER pAd,
5106 VOID MlmeSetTxPreamble(
5107 IN PRTMP_ADAPTER pAd,
5108 IN USHORT TxPreamble);
5110 VOID UpdateBasicRateBitmap(
5111 IN PRTMP_ADAPTER pAd);
5113 VOID MlmeUpdateTxRates(
5114 IN PRTMP_ADAPTER pAd,
5118 #ifdef DOT11_N_SUPPORT
5119 VOID MlmeUpdateHtTxRates(
5120 IN PRTMP_ADAPTER pAd,
5122 #endif // DOT11_N_SUPPORT //
5124 VOID RTMPCheckRates(
5125 IN PRTMP_ADAPTER pAd,
5126 IN OUT UCHAR SupRate[],
5127 IN OUT UCHAR *SupRateLen);
5129 #ifdef CONFIG_STA_SUPPORT
5130 BOOLEAN RTMPCheckChannel(
5131 IN PRTMP_ADAPTER pAd,
5132 IN UCHAR CentralChannel,
5134 #endif // CONFIG_STA_SUPPORT //
5136 BOOLEAN RTMPCheckHt(
5137 IN PRTMP_ADAPTER pAd,
5139 IN OUT HT_CAPABILITY_IE *pHtCapability,
5140 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5142 VOID StaQuickResponeForRateUpExec(
5143 IN PVOID SystemSpecific1,
5144 IN PVOID FunctionContext,
5145 IN PVOID SystemSpecific2,
5146 IN PVOID SystemSpecific3);
5148 VOID AsicBbpTuning1(
5149 IN PRTMP_ADAPTER pAd);
5151 VOID AsicBbpTuning2(
5152 IN PRTMP_ADAPTER pAd);
5154 VOID RTMPUpdateMlmeRate(
5155 IN PRTMP_ADAPTER pAd);
5158 IN PRTMP_ADAPTER pAd,
5164 IN PRTMP_ADAPTER pAd,
5167 VOID AsicEvaluateRxAnt(
5168 IN PRTMP_ADAPTER pAd);
5170 VOID AsicRxAntEvalTimeout(
5171 IN PVOID SystemSpecific1,
5172 IN PVOID FunctionContext,
5173 IN PVOID SystemSpecific2,
5174 IN PVOID SystemSpecific3);
5176 VOID APSDPeriodicExec(
5177 IN PVOID SystemSpecific1,
5178 IN PVOID FunctionContext,
5179 IN PVOID SystemSpecific2,
5180 IN PVOID SystemSpecific3);
5182 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5183 IN PRTMP_ADAPTER pAd,
5184 IN PMAC_TABLE_ENTRY pEntry);
5186 UCHAR RTMPStaFixedTxMode(
5187 IN PRTMP_ADAPTER pAd,
5188 IN PMAC_TABLE_ENTRY pEntry);
5190 VOID RTMPUpdateLegacyTxSetting(
5191 UCHAR fixed_tx_mode,
5192 PMAC_TABLE_ENTRY pEntry);
5194 BOOLEAN RTMPAutoRateSwitchCheck(
5195 IN PRTMP_ADAPTER pAd);
5197 NDIS_STATUS MlmeInit(
5198 IN PRTMP_ADAPTER pAd);
5201 IN PRTMP_ADAPTER pAd);
5204 IN PRTMP_ADAPTER pAd);
5206 VOID MlmeResetRalinkCounters(
5207 IN PRTMP_ADAPTER pAd);
5209 VOID BuildChannelList(
5210 IN PRTMP_ADAPTER pAd);
5213 IN PRTMP_ADAPTER pAd);
5216 IN PRTMP_ADAPTER pAd,
5219 VOID ChangeToCellPowerLimit(
5220 IN PRTMP_ADAPTER pAd,
5221 IN UCHAR AironetCellPowerLimit);
5224 IN PRTMP_ADAPTER pAd,
5228 IN PRTMP_ADAPTER pAd,
5232 IN PRTMP_ADAPTER pAd);
5235 IN PRTMP_ADAPTER pAd,
5240 IN PRTMP_ADAPTER pAd);
5243 IN PRTMP_ADAPTER pAd);
5246 IN PRTMP_ADAPTER pAd);
5248 USHORT RTMP_EEPROM_READ16(
5249 IN PRTMP_ADAPTER pAd,
5252 VOID RTMP_EEPROM_WRITE16(
5253 IN PRTMP_ADAPTER pAd,
5258 // Prototypes of function definition in rtmp_tkip.c
5260 VOID RTMPInitTkipEngine(
5261 IN PRTMP_ADAPTER pAd,
5270 VOID RTMPInitMICEngine(
5271 IN PRTMP_ADAPTER pAd,
5275 IN UCHAR UserPriority,
5278 BOOLEAN RTMPTkipCompareMICValue(
5279 IN PRTMP_ADAPTER pAd,
5284 IN UCHAR UserPriority,
5287 VOID RTMPCalculateMICValue(
5288 IN PRTMP_ADAPTER pAd,
5289 IN PNDIS_PACKET pPacket,
5291 IN PCIPHER_KEY pKey,
5294 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5295 IN PRTMP_ADAPTER pAd,
5303 VOID RTMPTkipAppendByte(
5304 IN PTKIP_KEY_INFO pTkip,
5307 VOID RTMPTkipAppend(
5308 IN PTKIP_KEY_INFO pTkip,
5312 VOID RTMPTkipGetMIC(
5313 IN PTKIP_KEY_INFO pTkip);
5315 BOOLEAN RTMPSoftDecryptTKIP(
5316 IN PRTMP_ADAPTER pAd,
5318 IN ULONG DataByteCnt,
5319 IN UCHAR UserPriority,
5320 IN PCIPHER_KEY pWpaKey);
5322 BOOLEAN RTMPSoftDecryptAES(
5323 IN PRTMP_ADAPTER pAd,
5325 IN ULONG DataByteCnt,
5326 IN PCIPHER_KEY pWpaKey);
5329 // Prototypes of function definition in cmm_info.c
5331 NDIS_STATUS RTMPWPARemoveKeyProc(
5332 IN PRTMP_ADAPTER pAd,
5335 VOID RTMPWPARemoveAllKeys(
5336 IN PRTMP_ADAPTER pAd);
5338 BOOLEAN RTMPCheckStrPrintAble(
5342 VOID RTMPSetPhyMode(
5343 IN PRTMP_ADAPTER pAd,
5346 VOID RTMPUpdateHTIE(
5347 IN RT_HT_CAPABILITY *pRtHt,
5349 OUT HT_CAPABILITY_IE *pHtCapability,
5350 OUT ADD_HT_INFO_IE *pAddHtInfo);
5352 VOID RTMPAddWcidAttributeEntry(
5353 IN PRTMP_ADAPTER pAd,
5357 IN MAC_TABLE_ENTRY *pEntry);
5359 CHAR *GetEncryptType(
5365 VOID RTMPIoctlGetSiteSurvey(
5366 IN PRTMP_ADAPTER pAdapter,
5367 IN struct iwreq *wrq);
5369 VOID RTMPIoctlGetMacTable(
5370 IN PRTMP_ADAPTER pAd,
5371 IN struct iwreq *wrq);
5373 VOID RTMPIndicateWPA2Status(
5374 IN PRTMP_ADAPTER pAdapter);
5376 VOID RTMPOPModeSwitching(
5377 IN PRTMP_ADAPTER pAd);
5379 #ifdef CONFIG_STA_SUPPORT
5380 VOID RTMPAddBSSIDCipher(
5381 IN PRTMP_ADAPTER pAd,
5383 IN PNDIS_802_11_KEY pKey,
5384 IN UCHAR CipherAlg);
5385 #endif // CONFIG_STA_SUPPORT //
5387 #ifdef DOT11_N_SUPPORT
5389 IN PRTMP_ADAPTER pAd,
5390 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5392 VOID RTMPSetIndividualHT(
5393 IN PRTMP_ADAPTER pAd,
5395 #endif // DOT11_N_SUPPORT //
5397 VOID RTMPSendWirelessEvent(
5398 IN PRTMP_ADAPTER pAd,
5399 IN USHORT Event_flag,
5404 VOID NICUpdateCntlCounters(
5405 IN PRTMP_ADAPTER pAd,
5406 IN PHEADER_802_11 pHeader,
5408 IN PRXWI_STRUC pRxWI);
5410 // prototype in wpa.c
5412 BOOLEAN WpaMsgTypeSubst(
5416 VOID WpaPskStateMachineInit(
5417 IN PRTMP_ADAPTER pAd,
5418 IN STATE_MACHINE *S,
5419 OUT STATE_MACHINE_FUNC Trans[]);
5421 VOID WpaEAPOLKeyAction(
5422 IN PRTMP_ADAPTER pAd,
5423 IN MLME_QUEUE_ELEM *Elem);
5425 VOID WpaPairMsg1Action(
5426 IN PRTMP_ADAPTER pAd,
5427 IN MLME_QUEUE_ELEM *Elem);
5429 VOID WpaPairMsg3Action(
5430 IN PRTMP_ADAPTER pAd,
5431 IN MLME_QUEUE_ELEM *Elem);
5433 VOID WpaGroupMsg1Action(
5434 IN PRTMP_ADAPTER pAd,
5435 IN MLME_QUEUE_ELEM *Elem);
5437 VOID WpaMacHeaderInit(
5438 IN PRTMP_ADAPTER pAd,
5439 IN OUT PHEADER_802_11 pHdr80211,
5443 VOID Wpa2PairMsg1Action(
5444 IN PRTMP_ADAPTER pAd,
5445 IN MLME_QUEUE_ELEM *Elem);
5447 VOID Wpa2PairMsg3Action(
5448 IN PRTMP_ADAPTER pAd,
5449 IN MLME_QUEUE_ELEM *Elem);
5451 BOOLEAN ParseKeyData(
5452 IN PRTMP_ADAPTER pAd,
5454 IN UCHAR KeyDataLen,
5455 IN UCHAR bPairewise);
5457 VOID RTMPToWirelessSta(
5458 IN PRTMP_ADAPTER pAd,
5459 IN PUCHAR pHeader802_3,
5463 IN BOOLEAN is4wayFrame);
5491 IN PRTMP_ADAPTER pAd,
5501 IN PRTMP_ADAPTER pAd,
5506 // prototype in aironet.c
5508 VOID AironetStateMachineInit(
5509 IN PRTMP_ADAPTER pAd,
5510 IN STATE_MACHINE *S,
5511 OUT STATE_MACHINE_FUNC Trans[]);
5513 VOID AironetMsgAction(
5514 IN PRTMP_ADAPTER pAd,
5515 IN MLME_QUEUE_ELEM *Elem);
5517 VOID AironetRequestAction(
5518 IN PRTMP_ADAPTER pAd,
5519 IN MLME_QUEUE_ELEM *Elem);
5521 VOID ChannelLoadRequestAction(
5522 IN PRTMP_ADAPTER pAd,
5525 VOID NoiseHistRequestAction(
5526 IN PRTMP_ADAPTER pAd,
5529 VOID BeaconRequestAction(
5530 IN PRTMP_ADAPTER pAd,
5533 VOID AironetReportAction(
5534 IN PRTMP_ADAPTER pAd,
5535 IN MLME_QUEUE_ELEM *Elem);
5537 VOID ChannelLoadReportAction(
5538 IN PRTMP_ADAPTER pAd,
5541 VOID NoiseHistReportAction(
5542 IN PRTMP_ADAPTER pAd,
5545 VOID AironetFinalReportAction(
5546 IN PRTMP_ADAPTER pAd);
5548 VOID BeaconReportAction(
5549 IN PRTMP_ADAPTER pAd,
5552 VOID AironetAddBeaconReport(
5553 IN PRTMP_ADAPTER pAd,
5555 IN PMLME_QUEUE_ELEM pElem);
5557 VOID AironetCreateBeaconReportFromBssTable(
5558 IN PRTMP_ADAPTER pAd);
5560 VOID DBGPRINT_TX_RING(
5561 IN PRTMP_ADAPTER pAd,
5564 VOID DBGPRINT_RX_RING(
5565 IN PRTMP_ADAPTER pAd);
5568 IN PRTMP_ADAPTER pAd,
5570 IN UCHAR RssiNumber);
5573 #ifdef DOT11N_DRAFT3
5574 VOID BuildEffectedChannelList(
5575 IN PRTMP_ADAPTER pAd);
5576 #endif // DOT11N_DRAFT3 //
5579 VOID APAsicEvaluateRxAnt(
5580 IN PRTMP_ADAPTER pAd);
5583 VOID APAsicRxAntEvalTimeout(
5584 IN PRTMP_ADAPTER pAd);
5587 // function prototype in cmm_wpa.c
5589 BOOLEAN RTMPCheckWPAframe(
5590 IN PRTMP_ADAPTER pAd,
5591 IN PMAC_TABLE_ENTRY pEntry,
5593 IN ULONG DataByteCount,
5594 IN UCHAR FromWhichBSSID);
5596 VOID AES_GTK_KEY_UNWRAP(
5598 OUT UCHAR *plaintext,
5600 IN UCHAR *ciphertext);
5602 BOOLEAN RTMPCheckRSNIE(
5603 IN PRTMP_ADAPTER pAd,
5606 IN MAC_TABLE_ENTRY *pEntry,
5609 BOOLEAN RTMPParseEapolKeyData(
5610 IN PRTMP_ADAPTER pAd,
5612 IN UCHAR KeyDataLen,
5613 IN UCHAR GroupKeyIndex,
5616 IN MAC_TABLE_ENTRY *pEntry);
5618 VOID ConstructEapolMsg(
5619 IN PRTMP_ADAPTER pAd,
5620 IN UCHAR PeerAuthMode,
5621 IN UCHAR PeerWepStatus,
5622 IN UCHAR MyGroupKeyWepStatus,
5624 IN UCHAR DefaultKeyIdx,
5625 IN UCHAR *ReplayCounter,
5632 OUT PEAPOL_PACKET pMsg);
5635 IN PRTMP_ADAPTER pAd,
5636 IN UCHAR PeerWepStatus,
5638 OUT PEAPOL_PACKET pMsg);
5640 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5641 IN PRTMP_ADAPTER pAd,
5643 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5644 IN PCIPHER_KEY pShard_key);
5646 VOID ConstructEapolKeyData(
5647 IN PRTMP_ADAPTER pAd,
5648 IN UCHAR PeerAuthMode,
5649 IN UCHAR PeerWepStatus,
5650 IN UCHAR GroupKeyWepStatus,
5652 IN UCHAR DefaultKeyIdx,
5653 IN BOOLEAN bWPA2Capable,
5658 OUT PEAPOL_PACKET pMsg);
5661 IN PRTMP_ADAPTER pAd,
5667 // function prototype in ap_wpa.c
5670 BOOLEAN APWpaMsgTypeSubst(
5674 MAC_TABLE_ENTRY *PACInquiry(
5675 IN PRTMP_ADAPTER pAd,
5678 BOOLEAN RTMPCheckMcast(
5679 IN PRTMP_ADAPTER pAd,
5680 IN PEID_STRUCT eid_ptr,
5681 IN MAC_TABLE_ENTRY *pEntry);
5683 BOOLEAN RTMPCheckUcast(
5684 IN PRTMP_ADAPTER pAd,
5685 IN PEID_STRUCT eid_ptr,
5686 IN MAC_TABLE_ENTRY *pEntry);
5688 BOOLEAN RTMPCheckAUTH(
5689 IN PRTMP_ADAPTER pAd,
5690 IN PEID_STRUCT eid_ptr,
5691 IN MAC_TABLE_ENTRY *pEntry);
5693 VOID WPAStart4WayHS(
5694 IN PRTMP_ADAPTER pAd,
5695 IN MAC_TABLE_ENTRY *pEntry,
5696 IN ULONG TimeInterval);
5698 VOID WPAStart2WayGroupHS(
5699 IN PRTMP_ADAPTER pAd,
5700 IN MAC_TABLE_ENTRY *pEntry);
5702 VOID APWpaEAPPacketAction(
5703 IN PRTMP_ADAPTER pAd,
5704 IN MLME_QUEUE_ELEM *Elem);
5706 VOID APWpaEAPOLStartAction(
5707 IN PRTMP_ADAPTER pAd,
5708 IN MLME_QUEUE_ELEM *Elem);
5710 VOID APWpaEAPOLLogoffAction(
5711 IN PRTMP_ADAPTER pAd,
5712 IN MLME_QUEUE_ELEM *Elem);
5714 VOID APWpaEAPOLKeyAction(
5715 IN PRTMP_ADAPTER pAd,
5716 IN MLME_QUEUE_ELEM *Elem);
5718 VOID APWpaEAPOLASFAlertAction(
5719 IN PRTMP_ADAPTER pAd,
5720 IN MLME_QUEUE_ELEM *Elem);
5722 VOID HandleCounterMeasure(
5723 IN PRTMP_ADAPTER pAd,
5724 IN MAC_TABLE_ENTRY *pEntry);
5726 VOID PeerPairMsg2Action(
5727 IN PRTMP_ADAPTER pAd,
5728 IN MAC_TABLE_ENTRY *pEntry,
5729 IN MLME_QUEUE_ELEM *Elem);
5731 VOID PeerPairMsg4Action(
5732 IN PRTMP_ADAPTER pAd,
5733 IN MAC_TABLE_ENTRY *pEntry,
5734 IN MLME_QUEUE_ELEM *Elem);
5737 IN PVOID SystemSpecific1,
5738 IN PVOID FunctionContext,
5739 IN PVOID SystemSpecific2,
5740 IN PVOID SystemSpecific3);
5743 IN PVOID SystemSpecific1,
5744 IN PVOID FunctionContext,
5745 IN PVOID SystemSpecific2,
5746 IN PVOID SystemSpecific3);
5748 VOID EnqueueStartForPSKExec(
5749 IN PVOID SystemSpecific1,
5750 IN PVOID FunctionContext,
5751 IN PVOID SystemSpecific2,
5752 IN PVOID SystemSpecific3);
5754 VOID RTMPHandleSTAKey(
5755 IN PRTMP_ADAPTER pAdapter,
5756 IN MAC_TABLE_ENTRY *pEntry,
5757 IN MLME_QUEUE_ELEM *Elem);
5759 VOID PeerGroupMsg2Action(
5760 IN PRTMP_ADAPTER pAd,
5761 IN PMAC_TABLE_ENTRY pEntry,
5765 VOID PairDisAssocAction(
5766 IN PRTMP_ADAPTER pAd,
5767 IN PMAC_TABLE_ENTRY pEntry,
5770 VOID MlmeDeAuthAction(
5771 IN PRTMP_ADAPTER pAd,
5772 IN PMAC_TABLE_ENTRY pEntry,
5775 VOID GREKEYPeriodicExec(
5776 IN PVOID SystemSpecific1,
5777 IN PVOID FunctionContext,
5778 IN PVOID SystemSpecific2,
5779 IN PVOID SystemSpecific3);
5801 IN PRTMP_ADAPTER pAd,
5804 VOID AES_GTK_KEY_WRAP(
5806 IN UCHAR *plaintext,
5808 OUT UCHAR *ciphertext);
5811 IN PRTMP_ADAPTER pAdapter,
5815 VOID APToWirelessSta(
5816 IN PRTMP_ADAPTER pAd,
5817 IN MAC_TABLE_ENTRY *pEntry,
5818 IN PUCHAR pHeader802_3,
5822 IN BOOLEAN bClearFrame);
5824 VOID RTMPAddPMKIDCache(
5825 IN PRTMP_ADAPTER pAd,
5831 INT RTMPSearchPMKIDCache(
5832 IN PRTMP_ADAPTER pAd,
5836 VOID RTMPDeletePMKIDCache(
5837 IN PRTMP_ADAPTER pAd,
5841 VOID RTMPMaintainPMKIDCache(
5842 IN PRTMP_ADAPTER pAd);
5844 VOID RTMPSendTriggerFrame(
5845 IN PRTMP_ADAPTER pAd,
5849 IN BOOLEAN bQosNull);
5852 VOID RTMPFilterCalibration(
5853 IN PRTMP_ADAPTER pAd);
5857 //typedef void (*TIMER_FUNCTION)(unsigned long);
5861 VOID RTMP_SetPeriodicTimer(
5862 IN NDIS_MINIPORT_TIMER *pTimer,
5863 IN unsigned long timeout);
5865 VOID RTMP_OS_Init_Timer(
5866 IN PRTMP_ADAPTER pAd,
5867 IN NDIS_MINIPORT_TIMER *pTimer,
5868 IN TIMER_FUNCTION function,
5871 VOID RTMP_OS_Add_Timer(
5872 IN NDIS_MINIPORT_TIMER *pTimer,
5873 IN unsigned long timeout);
5875 VOID RTMP_OS_Mod_Timer(
5876 IN NDIS_MINIPORT_TIMER *pTimer,
5877 IN unsigned long timeout);
5880 VOID RTMP_OS_Del_Timer(
5881 IN NDIS_MINIPORT_TIMER *pTimer,
5882 OUT BOOLEAN *pCancelled);
5885 VOID RTMP_OS_Release_Packet(
5886 IN PRTMP_ADAPTER pAd,
5887 IN PQUEUE_ENTRY pEntry);
5892 NDIS_STATUS os_alloc_mem(
5893 IN PRTMP_ADAPTER pAd,
5897 NDIS_STATUS os_free_mem(
5898 IN PRTMP_ADAPTER pAd,
5902 void RTMP_AllocateSharedMemory(
5903 IN PRTMP_ADAPTER pAd,
5906 OUT PVOID *VirtualAddress,
5907 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5909 VOID RTMPFreeTxRxRingMemory(
5910 IN PRTMP_ADAPTER pAd);
5912 NDIS_STATUS AdapterBlockAllocateMemory(
5916 void RTMP_AllocateTxDescMemory(
5917 IN PRTMP_ADAPTER pAd,
5921 OUT PVOID *VirtualAddress,
5922 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5924 void RTMP_AllocateFirstTxBuffer(
5925 IN PRTMP_ADAPTER pAd,
5929 OUT PVOID *VirtualAddress,
5930 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5932 void RTMP_AllocateMgmtDescMemory(
5933 IN PRTMP_ADAPTER pAd,
5936 OUT PVOID *VirtualAddress,
5937 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5939 void RTMP_AllocateRxDescMemory(
5940 IN PRTMP_ADAPTER pAd,
5943 OUT PVOID *VirtualAddress,
5944 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5946 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5947 IN PRTMP_ADAPTER pAd,
5950 OUT PVOID *VirtualAddress,
5951 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5953 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5954 IN PRTMP_ADAPTER pAd,
5957 OUT PVOID *VirtualAddress);
5959 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5960 IN PRTMP_ADAPTER pAd,
5963 void RTMP_QueryPacketInfo(
5964 IN PNDIS_PACKET pPacket,
5965 OUT PACKET_INFO *pPacketInfo,
5966 OUT PUCHAR *pSrcBufVA,
5967 OUT UINT *pSrcBufLen);
5969 void RTMP_QueryNextPacketInfo(
5970 IN PNDIS_PACKET *ppPacket,
5971 OUT PACKET_INFO *pPacketInfo,
5972 OUT PUCHAR *pSrcBufVA,
5973 OUT UINT *pSrcBufLen);
5976 BOOLEAN RTMP_FillTxBlkInfo(
5977 IN RTMP_ADAPTER *pAd,
5981 PRTMP_SCATTER_GATHER_LIST
5982 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5985 void announce_802_3_packet(
5986 IN PRTMP_ADAPTER pAd,
5987 IN PNDIS_PACKET pPacket);
5990 UINT BA_Reorder_AMSDU_Annnounce(
5991 IN PRTMP_ADAPTER pAd,
5992 IN PNDIS_PACKET pPacket);
5995 UINT Handle_AMSDU_Packet(
5996 IN PRTMP_ADAPTER pAd,
5999 IN UCHAR FromWhichBSSID);
6002 void convert_802_11_to_802_3_packet(
6003 IN PRTMP_ADAPTER pAd,
6004 IN PNDIS_PACKET pPacket,
6008 IN UCHAR FromWhichBSSID);
6011 PNET_DEV get_netdev_from_bssid(
6012 IN PRTMP_ADAPTER pAd,
6013 IN UCHAR FromWhichBSSID);
6016 PNDIS_PACKET duplicate_pkt(
6017 IN PRTMP_ADAPTER pAd,
6018 IN PUCHAR pHeader802_3,
6022 IN UCHAR FromWhichBSSID);
6025 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6026 IN PRTMP_ADAPTER pAd,
6027 IN PNDIS_PACKET pOldPkt);
6029 PNDIS_PACKET duplicate_pkt_with_VLAN(
6030 IN PRTMP_ADAPTER pAd,
6031 IN PUCHAR pHeader802_3,
6035 IN UCHAR FromWhichBSSID);
6037 PNDIS_PACKET duplicate_pkt_with_WPI(
6038 IN PRTMP_ADAPTER pAd,
6039 IN PNDIS_PACKET pPacket,
6040 IN UINT32 ext_head_len,
6041 IN UINT32 ext_tail_len);
6043 UCHAR VLAN_8023_Header_Copy(
6044 IN PRTMP_ADAPTER pAd,
6045 IN PUCHAR pHeader802_3,
6048 IN UCHAR FromWhichBSSID);
6050 #ifdef DOT11_N_SUPPORT
6051 void ba_flush_reordering_timeout_mpdus(
6052 IN PRTMP_ADAPTER pAd,
6053 IN PBA_REC_ENTRY pBAEntry,
6057 VOID BAOriSessionSetUp(
6058 IN PRTMP_ADAPTER pAd,
6059 IN MAC_TABLE_ENTRY *pEntry,
6063 IN BOOLEAN isForced);
6065 VOID BASessionTearDownALL(
6066 IN OUT PRTMP_ADAPTER pAd,
6068 #endif // DOT11_N_SUPPORT //
6070 BOOLEAN OS_Need_Clone_Packet(void);
6073 VOID build_tx_packet(
6074 IN PRTMP_ADAPTER pAd,
6075 IN PNDIS_PACKET pPacket,
6080 VOID BAOriSessionTearDown(
6081 IN OUT PRTMP_ADAPTER pAd,
6084 IN BOOLEAN bPassive,
6085 IN BOOLEAN bForceSend);
6087 VOID BARecSessionTearDown(
6088 IN OUT PRTMP_ADAPTER pAd,
6091 IN BOOLEAN bPassive);
6093 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6094 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6096 ULONG AutoChBssInsertEntry(
6097 IN PRTMP_ADAPTER pAd,
6104 void AutoChBssTableInit(
6105 IN PRTMP_ADAPTER pAd);
6107 void ChannelInfoInit(
6108 IN PRTMP_ADAPTER pAd);
6110 void AutoChBssTableDestroy(
6111 IN PRTMP_ADAPTER pAd);
6113 void ChannelInfoDestroy(
6114 IN PRTMP_ADAPTER pAd);
6116 UCHAR New_ApAutoSelectChannel(
6117 IN PRTMP_ADAPTER pAd);
6119 BOOLEAN rtstrmactohex(
6123 BOOLEAN rtstrcasecmp(
6127 char *rtstrstruncasecmp(
6133 IN const char * s2);
6137 IN const char * ct);
6141 unsigned int *addr);
6143 ////////// common ioctl functions //////////
6144 INT Set_DriverVersion_Proc(
6145 IN PRTMP_ADAPTER pAd,
6148 INT Set_CountryRegion_Proc(
6149 IN PRTMP_ADAPTER pAd,
6152 INT Set_CountryRegionABand_Proc(
6153 IN PRTMP_ADAPTER pAd,
6156 INT Set_WirelessMode_Proc(
6157 IN PRTMP_ADAPTER pAd,
6160 INT Set_Channel_Proc(
6161 IN PRTMP_ADAPTER pAd,
6164 INT Set_ShortSlot_Proc(
6165 IN PRTMP_ADAPTER pAd,
6168 INT Set_TxPower_Proc(
6169 IN PRTMP_ADAPTER pAd,
6172 INT Set_BGProtection_Proc(
6173 IN PRTMP_ADAPTER pAd,
6176 INT Set_TxPreamble_Proc(
6177 IN PRTMP_ADAPTER pAd,
6180 INT Set_RTSThreshold_Proc(
6181 IN PRTMP_ADAPTER pAd,
6184 INT Set_FragThreshold_Proc(
6185 IN PRTMP_ADAPTER pAd,
6188 INT Set_TxBurst_Proc(
6189 IN PRTMP_ADAPTER pAd,
6192 #ifdef AGGREGATION_SUPPORT
6193 INT Set_PktAggregate_Proc(
6194 IN PRTMP_ADAPTER pAd,
6198 INT Set_IEEE80211H_Proc(
6199 IN PRTMP_ADAPTER pAd,
6204 IN PRTMP_ADAPTER pAd,
6208 INT Show_DescInfo_Proc(
6209 IN PRTMP_ADAPTER pAd,
6212 INT Set_ResetStatCounter_Proc(
6213 IN PRTMP_ADAPTER pAd,
6216 #ifdef DOT11_N_SUPPORT
6217 INT Set_BASetup_Proc(
6218 IN PRTMP_ADAPTER pAd,
6221 INT Set_BADecline_Proc(
6222 IN PRTMP_ADAPTER pAd,
6225 INT Set_BAOriTearDown_Proc(
6226 IN PRTMP_ADAPTER pAd,
6229 INT Set_BARecTearDown_Proc(
6230 IN PRTMP_ADAPTER pAd,
6234 IN PRTMP_ADAPTER pAd,
6238 IN PRTMP_ADAPTER pAd,
6242 IN PRTMP_ADAPTER pAd,
6245 INT Set_HtOpMode_Proc(
6246 IN PRTMP_ADAPTER pAd,
6249 INT Set_HtStbc_Proc(
6250 IN PRTMP_ADAPTER pAd,
6254 IN PRTMP_ADAPTER pAd,
6257 INT Set_HtExtcha_Proc(
6258 IN PRTMP_ADAPTER pAd,
6261 INT Set_HtMpduDensity_Proc(
6262 IN PRTMP_ADAPTER pAd,
6265 INT Set_HtBaWinSize_Proc(
6266 IN PRTMP_ADAPTER pAd,
6270 IN PRTMP_ADAPTER pAd,
6273 INT Set_HtLinkAdapt_Proc(
6274 IN PRTMP_ADAPTER pAd,
6277 INT Set_HtAmsdu_Proc(
6278 IN PRTMP_ADAPTER pAd,
6281 INT Set_HtAutoBa_Proc(
6282 IN PRTMP_ADAPTER pAd,
6285 INT Set_HtProtect_Proc(
6286 IN PRTMP_ADAPTER pAd,
6289 INT Set_HtMimoPs_Proc(
6290 IN PRTMP_ADAPTER pAd,
6294 INT Set_ForceShortGI_Proc(
6295 IN PRTMP_ADAPTER pAd,
6298 INT Set_ForceGF_Proc(
6299 IN PRTMP_ADAPTER pAd,
6303 IN PRTMP_ADAPTER pAd);
6305 INT Set_SendPSMPAction_Proc(
6306 IN PRTMP_ADAPTER pAd,
6309 INT Set_HtMIMOPSmode_Proc(
6310 IN PRTMP_ADAPTER pAd,
6314 INT Set_HtTxBASize_Proc(
6315 IN PRTMP_ADAPTER pAd,
6317 #endif // DOT11_N_SUPPORT //
6321 #ifdef CONFIG_STA_SUPPORT
6323 VOID RTMPSendDLSTearDownFrame(
6324 IN PRTMP_ADAPTER pAd,
6327 #ifdef DOT11_N_SUPPORT
6330 IN PRTMP_ADAPTER pAd,
6331 OUT PQUERYBA_TABLE pBAT);
6332 #endif // DOT11_N_SUPPORT //
6334 #ifdef WPA_SUPPLICANT_SUPPORT
6335 INT WpaCheckEapCode(
6336 IN PRTMP_ADAPTER pAd,
6341 VOID WpaSendMicFailureToWpaSupplicant(
6342 IN PRTMP_ADAPTER pAd,
6343 IN BOOLEAN bUnicast);
6345 VOID SendAssocIEsToWpaSupplicant(
6346 IN PRTMP_ADAPTER pAd);
6347 #endif // WPA_SUPPLICANT_SUPPORT //
6349 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6350 int wext_notify_event_assoc(
6351 IN RTMP_ADAPTER *pAd);
6352 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6354 #endif // CONFIG_STA_SUPPORT //
6358 #ifdef DOT11_N_SUPPORT
6359 VOID Handle_BSS_Width_Trigger_Events(
6360 IN PRTMP_ADAPTER pAd);
6362 void build_ext_channel_switch_ie(
6363 IN PRTMP_ADAPTER pAd,
6364 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6365 #endif // DOT11_N_SUPPORT //
6368 BOOLEAN APRxDoneInterruptHandle(
6369 IN PRTMP_ADAPTER pAd);
6371 BOOLEAN STARxDoneInterruptHandle(
6372 IN PRTMP_ADAPTER pAd,
6375 #ifdef DOT11_N_SUPPORT
6376 // AMPDU packet indication
6377 VOID Indicate_AMPDU_Packet(
6378 IN PRTMP_ADAPTER pAd,
6380 IN UCHAR FromWhichBSSID);
6382 // AMSDU packet indication
6383 VOID Indicate_AMSDU_Packet(
6384 IN PRTMP_ADAPTER pAd,
6386 IN UCHAR FromWhichBSSID);
6387 #endif // DOT11_N_SUPPORT //
6389 // Normal legacy Rx packet indication
6390 VOID Indicate_Legacy_Packet(
6391 IN PRTMP_ADAPTER pAd,
6393 IN UCHAR FromWhichBSSID);
6395 VOID Indicate_EAPOL_Packet(
6396 IN PRTMP_ADAPTER pAd,
6398 IN UCHAR FromWhichBSSID);
6400 void update_os_packet_info(
6401 IN PRTMP_ADAPTER pAd,
6403 IN UCHAR FromWhichBSSID);
6405 void wlan_802_11_to_802_3_packet(
6406 IN PRTMP_ADAPTER pAd,
6408 IN PUCHAR pHeader802_3,
6409 IN UCHAR FromWhichBSSID);
6411 UINT deaggregate_AMSDU_announce(
6412 IN PRTMP_ADAPTER pAd,
6413 PNDIS_PACKET pPacket,
6418 #ifdef CONFIG_STA_SUPPORT
6419 // remove LLC and get 802_3 Header
6420 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6422 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6424 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6426 _pDA = _pRxBlk->pHeader->Addr3; \
6427 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6431 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6433 _pDA = _pRxBlk->pHeader->Addr1; \
6434 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6435 _pSA = _pRxBlk->pHeader->Addr2; \
6437 _pSA = _pRxBlk->pHeader->Addr3; \
6441 _pDA = _pRxBlk->pHeader->Addr1; \
6442 _pSA = _pRxBlk->pHeader->Addr2; \
6446 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6447 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6449 #endif // CONFIG_STA_SUPPORT //
6452 BOOLEAN APFowardWirelessStaToWirelessSta(
6453 IN PRTMP_ADAPTER pAd,
6454 IN PNDIS_PACKET pPacket,
6455 IN ULONG FromWhichBSSID);
6457 VOID Announce_or_Forward_802_3_Packet(
6458 IN PRTMP_ADAPTER pAd,
6459 IN PNDIS_PACKET pPacket,
6460 IN UCHAR FromWhichBSSID);
6462 VOID Sta_Announce_or_Forward_802_3_Packet(
6463 IN PRTMP_ADAPTER pAd,
6464 IN PNDIS_PACKET pPacket,
6465 IN UCHAR FromWhichBSSID);
6468 #ifdef CONFIG_STA_SUPPORT
6469 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6470 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6471 //announce_802_3_packet(_pAd, _pPacket);
6472 #endif // CONFIG_STA_SUPPORT //
6475 PNDIS_PACKET DuplicatePacket(
6476 IN PRTMP_ADAPTER pAd,
6477 IN PNDIS_PACKET pPacket,
6478 IN UCHAR FromWhichBSSID);
6481 PNDIS_PACKET ClonePacket(
6482 IN PRTMP_ADAPTER pAd,
6483 IN PNDIS_PACKET pPacket,
6488 // Normal, AMPDU or AMSDU
6489 VOID CmmRxnonRalinkFrameIndicate(
6490 IN PRTMP_ADAPTER pAd,
6492 IN UCHAR FromWhichBSSID);
6494 VOID CmmRxRalinkFrameIndicate(
6495 IN PRTMP_ADAPTER pAd,
6496 IN MAC_TABLE_ENTRY *pEntry,
6498 IN UCHAR FromWhichBSSID);
6500 VOID Update_Rssi_Sample(
6501 IN PRTMP_ADAPTER pAd,
6502 IN RSSI_SAMPLE *pRssi,
6503 IN PRXWI_STRUC pRxWI);
6505 PNDIS_PACKET GetPacketFromRxRing(
6506 IN PRTMP_ADAPTER pAd,
6507 OUT PRT28XX_RXD_STRUC pSaveRxD,
6508 OUT BOOLEAN *pbReschedule,
6509 IN OUT UINT32 *pRxPending);
6511 PNDIS_PACKET RTMPDeFragmentDataFrame(
6512 IN PRTMP_ADAPTER pAd,
6515 ////////////////////////////////////////
6517 #ifdef CONFIG_STA_SUPPORT
6519 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6520 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6521 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6522 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6523 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6524 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6525 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6526 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6527 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6528 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6529 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6532 P80211ENUM_msgitem_status_no_value = 0x00
6535 P80211ENUM_truth_false = 0x00,
6536 P80211ENUM_truth_true = 0x01
6539 /* Definition from madwifi */
6545 } p80211item_uint32_t;
6550 #define WLAN_DEVNAMELEN_MAX 16
6551 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6552 p80211item_uint32_t hosttime;
6553 p80211item_uint32_t mactime;
6554 p80211item_uint32_t channel;
6555 p80211item_uint32_t rssi;
6556 p80211item_uint32_t sq;
6557 p80211item_uint32_t signal;
6558 p80211item_uint32_t noise;
6559 p80211item_uint32_t rate;
6560 p80211item_uint32_t istx;
6561 p80211item_uint32_t frmlen;
6562 } wlan_ng_prism2_header;
6564 /* The radio capture header precedes the 802.11 header. */
6565 typedef struct PACKED _ieee80211_radiotap_header {
6566 UINT8 it_version; /* Version 0. Only increases
6567 * for drastic changes,
6568 * introduction of compatible
6569 * new fields does not count.
6572 UINT16 it_len; /* length of the whole
6573 * header in bytes, including
6574 * it_version, it_pad,
6575 * it_len, and data fields.
6577 UINT32 it_present; /* A bitmap telling which
6578 * fields are present. Set bit 31
6579 * (0x80000000) to extend the
6580 * bitmap by another 32 bits.
6581 * Additional extensions are made
6582 * by setting bit 31.
6584 }ieee80211_radiotap_header ;
6586 enum ieee80211_radiotap_type {
6587 IEEE80211_RADIOTAP_TSFT = 0,
6588 IEEE80211_RADIOTAP_FLAGS = 1,
6589 IEEE80211_RADIOTAP_RATE = 2,
6590 IEEE80211_RADIOTAP_CHANNEL = 3,
6591 IEEE80211_RADIOTAP_FHSS = 4,
6592 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6593 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6594 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6595 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6596 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6597 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6598 IEEE80211_RADIOTAP_ANTENNA = 11,
6599 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6600 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6603 #define WLAN_RADIOTAP_PRESENT ( \
6604 (1 << IEEE80211_RADIOTAP_TSFT) | \
6605 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6606 (1 << IEEE80211_RADIOTAP_RATE) | \
6609 typedef struct _wlan_radiotap_header {
6610 ieee80211_radiotap_header wt_ihdr;
6614 } wlan_radiotap_header;
6615 /* Definition from madwifi */
6617 void send_monitor_packets(
6618 IN PRTMP_ADAPTER pAd,
6621 #if WIRELESS_EXT >= 12
6622 // This function will be called when query /proc
6623 struct iw_statistics *rt28xx_get_wireless_stats(
6624 IN struct net_device *net_dev);
6627 VOID RTMPSetDesiredRates(
6628 IN PRTMP_ADAPTER pAdapter,
6630 #endif // CONFIG_STA_SUPPORT //
6632 INT Set_FixedTxMode_Proc(
6633 IN PRTMP_ADAPTER pAd,
6636 static inline char* GetPhyMode(
6646 #ifdef DOT11_N_SUPPORT
6650 case MODE_HTGREENFIELD:
6652 #endif // DOT11_N_SUPPORT //
6659 static inline char* GetBW(
6669 #ifdef DOT11_N_SUPPORT
6672 #endif // DOT11_N_SUPPORT //
6679 VOID RT28xxThreadTerminate(
6680 IN RTMP_ADAPTER *pAd);
6682 BOOLEAN RT28XXChipsetCheck(
6685 BOOLEAN RT28XXNetDevInit(
6687 IN struct net_device *net_dev,
6688 IN RTMP_ADAPTER *pAd);
6690 BOOLEAN RT28XXProbePostConfig(
6692 IN RTMP_ADAPTER *pAd,
6695 VOID RT28XXDMADisable(
6696 IN RTMP_ADAPTER *pAd);
6698 VOID RT28XXDMAEnable(
6699 IN RTMP_ADAPTER *pAd);
6701 VOID RT28xx_UpdateBeaconToAsic(
6702 IN RTMP_ADAPTER * pAd,
6705 IN ULONG UpdatePos);
6708 IN struct net_device *net_dev,
6709 IN OUT struct ifreq *rq,
6713 #ifdef CONFIG_STA_SUPPORT
6714 INT rt28xx_sta_ioctl(
6715 IN struct net_device *net_dev,
6716 IN OUT struct ifreq *rq,
6718 #endif // CONFIG_STA_SUPPORT //
6720 BOOLEAN RT28XXSecurityKeyAdd(
6721 IN PRTMP_ADAPTER pAd,
6724 IN MAC_TABLE_ENTRY *pEntry);
6726 ////////////////////////////////////////
6727 PNDIS_PACKET GetPacketFromRxRing(
6728 IN PRTMP_ADAPTER pAd,
6729 OUT PRT28XX_RXD_STRUC pSaveRxD,
6730 OUT BOOLEAN *pbReschedule,
6731 IN OUT UINT32 *pRxPending);
6734 void kill_thread_task(PRTMP_ADAPTER pAd);
6736 void tbtt_tasklet(unsigned long data);
6739 VOID AsicTurnOffRFClk(
6740 IN PRTMP_ADAPTER pAd,
6743 VOID AsicTurnOnRFClk(
6744 IN PRTMP_ADAPTER pAd,
6748 NTSTATUS RT30xxWriteRFRegister(
6749 IN PRTMP_ADAPTER pAd,
6753 NTSTATUS RT30xxReadRFRegister(
6754 IN PRTMP_ADAPTER pAd,
6758 //2008/09/11:KH add to support efuse<--
6759 UCHAR eFuseReadRegisters(
6760 IN PRTMP_ADAPTER pAd,
6765 VOID eFuseReadPhysical(
6766 IN PRTMP_ADAPTER pAd,
6767 IN PUSHORT lpInBuffer,
6768 IN ULONG nInBufferSize,
6769 OUT PUSHORT lpOutBuffer,
6770 IN ULONG nOutBufferSize
6774 IN PRTMP_ADAPTER pAd,
6779 VOID eFusePhysicalWriteRegisters(
6780 IN PRTMP_ADAPTER pAd,
6785 NTSTATUS eFuseWriteRegisters(
6786 IN PRTMP_ADAPTER pAd,
6791 VOID eFuseWritePhysical(
6792 IN PRTMP_ADAPTER pAd,
6794 ULONG nInBufferSize,
6796 ULONG nOutBufferSize
6799 NTSTATUS eFuseWrite(
6800 IN PRTMP_ADAPTER pAd,
6805 INT set_eFuseGetFreeBlockCount_Proc(
6806 IN PRTMP_ADAPTER pAd,
6809 INT set_eFusedump_Proc(
6810 IN PRTMP_ADAPTER pAd,
6813 INT set_eFuseLoadFromBin_Proc(
6814 IN PRTMP_ADAPTER pAd,
6817 NTSTATUS eFuseWriteRegistersFromBin(
6818 IN PRTMP_ADAPTER pAd,
6823 VOID eFusePhysicalReadRegisters(
6824 IN PRTMP_ADAPTER pAd,
6829 NDIS_STATUS NICLoadEEPROM(
6830 IN PRTMP_ADAPTER pAd);
6832 BOOLEAN bNeedLoadEEPROM(
6833 IN PRTMP_ADAPTER pAd);
6834 //2008/09/11:KH add to support efuse-->
6838 // add by johnli, RF power sequence setup
6839 VOID RT30xxLoadRFNormalModeSetup(
6840 IN PRTMP_ADAPTER pAd);
6842 VOID RT30xxLoadRFSleepModeSetup(
6843 IN PRTMP_ADAPTER pAd);
6845 VOID RT30xxReverseRFSleepModeSetup(
6846 IN PRTMP_ADAPTER pAd);
6852 // Function Prototype in rtusb_bulk.c
6854 VOID RTUSBInitTxDesc(
6855 IN PRTMP_ADAPTER pAd,
6856 IN PTX_CONTEXT pTxContext,
6857 IN UCHAR BulkOutPipeId,
6858 IN usb_complete_t Func);
6860 VOID RTUSBInitHTTxDesc(
6861 IN PRTMP_ADAPTER pAd,
6862 IN PHT_TX_CONTEXT pTxContext,
6863 IN UCHAR BulkOutPipeId,
6864 IN ULONG BulkOutSize,
6865 IN usb_complete_t Func);
6867 VOID RTUSBInitRxDesc(
6868 IN PRTMP_ADAPTER pAd,
6869 IN PRX_CONTEXT pRxContext);
6871 VOID RTUSBCleanUpDataBulkOutQueue(
6872 IN PRTMP_ADAPTER pAd);
6874 VOID RTUSBCancelPendingBulkOutIRP(
6875 IN PRTMP_ADAPTER pAd);
6877 VOID RTUSBBulkOutDataPacket(
6878 IN PRTMP_ADAPTER pAd,
6879 IN UCHAR BulkOutPipeId,
6882 VOID RTUSBBulkOutNullFrame(
6883 IN PRTMP_ADAPTER pAd);
6885 VOID RTUSBBulkOutRTSFrame(
6886 IN PRTMP_ADAPTER pAd);
6888 VOID RTUSBCancelPendingBulkInIRP(
6889 IN PRTMP_ADAPTER pAd);
6891 VOID RTUSBCancelPendingIRPs(
6892 IN PRTMP_ADAPTER pAd);
6894 VOID RTUSBBulkOutMLMEPacket(
6895 IN PRTMP_ADAPTER pAd,
6898 VOID RTUSBBulkOutPsPoll(
6899 IN PRTMP_ADAPTER pAd);
6901 VOID RTUSBCleanUpMLMEBulkOutQueue(
6902 IN PRTMP_ADAPTER pAd);
6904 VOID RTUSBKickBulkOut(
6905 IN PRTMP_ADAPTER pAd);
6907 VOID RTUSBBulkReceive(
6908 IN PRTMP_ADAPTER pAd);
6911 IN RTMP_ADAPTER *pAd);
6913 VOID RTUSBInitRxDesc(
6914 IN PRTMP_ADAPTER pAd,
6915 IN PRX_CONTEXT pRxContext);
6917 VOID RTUSBBulkRxHandle(
6918 IN unsigned long data);
6921 // Function Prototype in rtusb_io.c
6923 NTSTATUS RTUSBMultiRead(
6924 IN PRTMP_ADAPTER pAd,
6929 NTSTATUS RTUSBMultiWrite(
6930 IN PRTMP_ADAPTER pAd,
6935 NTSTATUS RTUSBMultiWrite_OneByte(
6936 IN PRTMP_ADAPTER pAd,
6940 NTSTATUS RTUSBReadBBPRegister(
6941 IN PRTMP_ADAPTER pAd,
6945 NTSTATUS RTUSBWriteBBPRegister(
6946 IN PRTMP_ADAPTER pAd,
6950 NTSTATUS RTUSBWriteRFRegister(
6951 IN PRTMP_ADAPTER pAd,
6954 NTSTATUS RTUSB_VendorRequest(
6955 IN PRTMP_ADAPTER pAd,
6956 IN UINT32 TransferFlags,
6957 IN UCHAR ReservedBits,
6961 IN PVOID TransferBuffer,
6962 IN UINT32 TransferBufferLength);
6964 NTSTATUS RTUSBReadEEPROM(
6965 IN PRTMP_ADAPTER pAd,
6970 NTSTATUS RTUSBWriteEEPROM(
6971 IN PRTMP_ADAPTER pAd,
6976 VOID RTUSBPutToSleep(
6977 IN PRTMP_ADAPTER pAd);
6979 NTSTATUS RTUSBWakeUp(
6980 IN PRTMP_ADAPTER pAd);
6982 VOID RTUSBInitializeCmdQ(
6985 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6986 IN PRTMP_ADAPTER pAd,
6988 IN BOOLEAN SetInformation,
6989 IN PVOID pInformationBuffer,
6990 IN UINT32 InformationBufferLength);
6992 NDIS_STATUS RTUSBEnqueueInternalCmd(
6993 IN PRTMP_ADAPTER pAd,
6995 IN PVOID pInformationBuffer,
6996 IN UINT32 InformationBufferLength);
6998 VOID RTUSBDequeueCmd(
7000 OUT PCmdQElmt *pcmdqelmt);
7003 IN OUT PVOID Context);
7006 IN OUT PVOID Context);
7008 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7009 IN RTMP_ADAPTER *pAd,
7010 IN RALINK_TIMER_STRUCT *pTimer);
7012 BOOLEAN RT2870_TimerQ_Remove(
7013 IN RTMP_ADAPTER *pAd,
7014 IN RALINK_TIMER_STRUCT *pTimer);
7016 void RT2870_TimerQ_Exit(
7017 IN RTMP_ADAPTER *pAd);
7019 void RT2870_TimerQ_Init(
7020 IN RTMP_ADAPTER *pAd);
7022 VOID RT2870_BssBeaconExit(
7023 IN RTMP_ADAPTER *pAd);
7025 VOID RT2870_BssBeaconStop(
7026 IN RTMP_ADAPTER *pAd);
7028 VOID RT2870_BssBeaconStart(
7029 IN RTMP_ADAPTER * pAd);
7031 VOID RT2870_BssBeaconInit(
7032 IN RTMP_ADAPTER *pAd);
7034 VOID RT2870_WatchDog(
7035 IN RTMP_ADAPTER *pAd);
7037 NTSTATUS RTUSBWriteMACRegister(
7038 IN PRTMP_ADAPTER pAd,
7042 NTSTATUS RTUSBReadMACRegister(
7043 IN PRTMP_ADAPTER pAd,
7045 OUT PUINT32 pValue);
7047 NTSTATUS RTUSBSingleWrite(
7048 IN RTMP_ADAPTER *pAd,
7052 NTSTATUS RTUSBFirmwareRun(
7053 IN PRTMP_ADAPTER pAd);
7055 NTSTATUS RTUSBFirmwareWrite(
7056 IN PRTMP_ADAPTER pAd,
7060 NTSTATUS RTUSBFirmwareOpmode(
7061 IN PRTMP_ADAPTER pAd,
7062 OUT PUINT32 pValue);
7064 NTSTATUS RTUSBVenderReset(
7065 IN PRTMP_ADAPTER pAd);
7067 NDIS_STATUS RTUSBSetHardWareRegister(
7068 IN PRTMP_ADAPTER pAdapter,
7071 NDIS_STATUS RTUSBQueryHardWareRegister(
7072 IN PRTMP_ADAPTER pAdapter,
7076 IN PRTMP_ADAPTER pAd);
7079 NDIS_STATUS CreateThreads(
7080 IN struct net_device *net_dev );
7083 VOID MacTableInitialize(
7084 IN PRTMP_ADAPTER pAd);
7087 IN PRTMP_ADAPTER pAd,
7090 NDIS_STATUS RTMPWPAAddKeyProc(
7091 IN PRTMP_ADAPTER pAd,
7094 VOID AsicRxAntEvalAction(
7095 IN PRTMP_ADAPTER pAd);
7098 IN PRTMP_ADAPTER pAd,
7099 IN PUCHAR pHeader802_3,
7103 OUT PNDIS_PACKET *ppPacket);
7105 UINT deaggregate_AMSDU_announce(
7106 IN PRTMP_ADAPTER pAd,
7107 PNDIS_PACKET pPacket,
7111 NDIS_STATUS RTMPCheckRxError(
7112 IN PRTMP_ADAPTER pAd,
7113 IN PHEADER_802_11 pHeader,
7114 IN PRXWI_STRUC pRxWI,
7115 IN PRT28XX_RXD_STRUC pRxINFO);
7118 VOID RTUSBMlmeHardTransmit(
7119 IN PRTMP_ADAPTER pAd,
7120 IN PMGMT_STRUC pMgmt);
7126 // Function Prototype in rtusb_data.c
7128 NDIS_STATUS RTUSBFreeDescriptorRequest(
7129 IN PRTMP_ADAPTER pAd,
7130 IN UCHAR BulkOutPipeId,
7131 IN UINT32 NumberRequired);
7134 BOOLEAN RTUSBNeedQueueBackForAgg(
7135 IN RTMP_ADAPTER *pAd,
7136 IN UCHAR BulkOutPipeId);
7139 VOID RTMPWriteTxInfo(
7140 IN PRTMP_ADAPTER pAd,
7141 IN PTXINFO_STRUC pTxInfo,
7142 IN USHORT USBDMApktLen,
7149 // Function Prototype in cmm_data_2870.c
7151 USHORT RtmpUSB_WriteSubTxResource(
7152 IN PRTMP_ADAPTER pAd,
7155 OUT USHORT *FreeNumber);
7157 USHORT RtmpUSB_WriteSingleTxResource(
7158 IN PRTMP_ADAPTER pAd,
7161 OUT USHORT *FreeNumber);
7163 USHORT RtmpUSB_WriteFragTxResource(
7164 IN PRTMP_ADAPTER pAd,
7167 OUT USHORT *FreeNumber);
7169 USHORT RtmpUSB_WriteMultiTxResource(
7170 IN PRTMP_ADAPTER pAd,
7173 OUT USHORT *FreeNumber);
7175 VOID RtmpUSB_FinalWriteTxResource(
7176 IN PRTMP_ADAPTER pAd,
7178 IN USHORT totalMPDUSize,
7181 VOID RtmpUSBDataLastTxIdx(
7182 IN PRTMP_ADAPTER pAd,
7186 VOID RtmpUSBDataKickOut(
7187 IN PRTMP_ADAPTER pAd,
7192 int RtmpUSBMgmtKickOut(
7193 IN RTMP_ADAPTER *pAd,
7195 IN PNDIS_PACKET pPacket,
7196 IN PUCHAR pSrcBufVA,
7199 VOID RtmpUSBNullFrameKickOut(
7200 IN RTMP_ADAPTER *pAd,
7202 IN UCHAR *pNullFrame,
7203 IN UINT32 frameLen);
7205 VOID RT28xxUsbStaAsicForceWakeup(
7206 IN PRTMP_ADAPTER pAd,
7207 IN BOOLEAN bFromTx);
7209 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7210 IN PRTMP_ADAPTER pAd,
7211 IN USHORT TbttNumToNextWakeUp);
7213 VOID RT28xxUsbMlmeRadioOn(
7214 IN PRTMP_ADAPTER pAd);
7216 VOID RT28xxUsbMlmeRadioOFF(
7217 IN PRTMP_ADAPTER pAd);
7220 ////////////////////////////////////////
7223 IN RTMP_ADAPTER *pAd);
7225 UINT32 QBSS_LoadElementAppend(
7226 IN RTMP_ADAPTER *pAd,
7229 VOID QBSS_LoadUpdate(
7230 IN RTMP_ADAPTER *pAd);
7232 ///////////////////////////////////////
7233 INT RTMPShowCfgValue(
7234 IN PRTMP_ADAPTER pAd,
7238 PCHAR RTMPGetRalinkAuthModeStr(
7239 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7241 PCHAR RTMPGetRalinkEncryModeStr(
7242 IN USHORT encryMode);
7243 //////////////////////////////////////
7245 #ifdef CONFIG_STA_SUPPORT
7246 VOID AsicStaBbpTuning(
7247 IN PRTMP_ADAPTER pAd);
7249 BOOLEAN StaAddMacTableEntry(
7250 IN PRTMP_ADAPTER pAd,
7251 IN PMAC_TABLE_ENTRY pEntry,
7252 IN UCHAR MaxSupportedRateIn500Kbps,
7253 IN HT_CAPABILITY_IE *pHtCapability,
7254 IN UCHAR HtCapabilityLen,
7255 IN USHORT CapabilityInfo);
7256 #endif // CONFIG_STA_SUPPORT //
7258 void RTMP_IndicateMediaState(
7259 IN PRTMP_ADAPTER pAd);
7261 VOID ReSyncBeaconTime(
7262 IN PRTMP_ADAPTER pAd);
7264 VOID RTMPSetAGCInitValue(
7265 IN PRTMP_ADAPTER pAd,
7266 IN UCHAR BandWidth);
7268 int rt28xx_close(IN PNET_DEV dev);
7269 int rt28xx_open(IN PNET_DEV dev);
7271 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7273 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7274 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7276 if (VIRTUAL_IF_NUM(pAd) == 0)
7278 if (rt28xx_open(pAd->net_dev) != 0)
7284 VIRTUAL_IF_INC(pAd);
7288 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7290 VIRTUAL_IF_DEC(pAd);
7291 if (VIRTUAL_IF_NUM(pAd) == 0)
7292 rt28xx_close(pAd->net_dev);
7297 #endif // __RTMP_H__