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;
243 #endif // DOT11_N_SUPPORT //
254 extern UCHAR WPA_OUI[];
255 extern UCHAR RSN_OUI[];
256 extern UCHAR WAPI_OUI[];
257 extern UCHAR WME_INFO_ELEM[];
258 extern UCHAR WME_PARM_ELEM[];
259 extern UCHAR Ccx2QosInfo[];
260 extern UCHAR Ccx2IeInfo[];
261 extern UCHAR RALINK_OUI[];
262 extern UCHAR PowerConstraintIE[];
265 extern UCHAR RateSwitchTable[];
266 extern UCHAR RateSwitchTable11B[];
267 extern UCHAR RateSwitchTable11G[];
268 extern UCHAR RateSwitchTable11BG[];
270 #ifdef DOT11_N_SUPPORT
271 extern UCHAR RateSwitchTable11BGN1S[];
272 extern UCHAR RateSwitchTable11BGN2S[];
273 extern UCHAR RateSwitchTable11BGN2SForABand[];
274 extern UCHAR RateSwitchTable11N1S[];
275 extern UCHAR RateSwitchTable11N2S[];
276 extern UCHAR RateSwitchTable11N2SForABand[];
278 #ifdef CONFIG_STA_SUPPORT
279 extern UCHAR PRE_N_HT_OUI[];
280 #endif // CONFIG_STA_SUPPORT //
281 #endif // DOT11_N_SUPPORT //
283 #define MAXSEQ (0xFFF)
285 #ifdef DOT11_N_SUPPORT
286 struct reordering_mpdu
288 struct reordering_mpdu *next;
289 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
290 int Sequence; /* sequence number of MPDU */
294 struct reordering_list
296 struct reordering_mpdu *next;
300 struct reordering_mpdu_pool
304 struct reordering_list freelist;
306 #endif // DOT11_N_SUPPORT //
308 typedef struct _RSSI_SAMPLE {
309 CHAR LastRssi0; // last received RSSI
310 CHAR LastRssi1; // last received RSSI
311 CHAR LastRssi2; // last received RSSI
321 // Queue structure and macros
323 typedef struct _QUEUE_ENTRY {
324 struct _QUEUE_ENTRY *Next;
325 } QUEUE_ENTRY, *PQUEUE_ENTRY;
328 typedef struct _QUEUE_HEADER {
332 } QUEUE_HEADER, *PQUEUE_HEADER;
334 #define InitializeQueueHeader(QueueHeader) \
336 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
337 (QueueHeader)->Number = 0; \
340 #define RemoveHeadQueue(QueueHeader) \
341 (QueueHeader)->Head; \
343 PQUEUE_ENTRY pNext; \
344 if ((QueueHeader)->Head != NULL) \
346 pNext = (QueueHeader)->Head->Next; \
347 (QueueHeader)->Head = pNext; \
349 (QueueHeader)->Tail = NULL; \
350 (QueueHeader)->Number--; \
354 #define InsertHeadQueue(QueueHeader, QueueEntry) \
356 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
357 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
358 if ((QueueHeader)->Tail == NULL) \
359 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
360 (QueueHeader)->Number++; \
363 #define InsertTailQueue(QueueHeader, QueueEntry) \
365 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
366 if ((QueueHeader)->Tail) \
367 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
369 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
370 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
371 (QueueHeader)->Number++; \
375 // Macros for flag and ref count operations
377 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
378 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
379 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
380 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
381 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
383 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
384 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
385 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
387 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
388 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
389 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
391 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
392 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
393 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
395 #ifdef CONFIG_STA_SUPPORT
396 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
397 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
398 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
399 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
401 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
402 #endif // CONFIG_STA_SUPPORT //
404 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
405 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
408 #define INC_RING_INDEX(_idx, _RingSize) \
410 (_idx) = (_idx+1) % (_RingSize); \
413 // We will have a cost down version which mac version is 0x3090xxxx
414 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
416 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
417 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
418 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
420 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
422 #define RING_PACKET_INIT(_TxRing, _idx) \
424 _TxRing->Cell[_idx].pNdisPacket = NULL; \
425 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
428 #define TXDT_INIT(_TxD) \
430 NdisZeroMemory(_TxD, TXD_SIZE); \
434 //Set last data segment
435 #define RING_SET_LASTDS(_TxD, _IsSD0) \
437 if (_IsSD0) {_TxD->LastSec0 = 1;} \
438 else {_TxD->LastSec1 = 1;} \
441 // Increase TxTsc value for next transmission
443 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
444 // Should send a special event microsoft defined to request re-key
445 #define INC_TX_TSC(_tsc) \
448 while (++_tsc[i] == 0x0) \
456 #ifdef DOT11_N_SUPPORT
457 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
458 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
460 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
461 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
462 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
463 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
464 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
465 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
466 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
467 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
468 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
469 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
470 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
471 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
474 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
476 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
477 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
478 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
480 #endif // DOT11_N_SUPPORT //
483 // MACRO for 32-bit PCI register read / write
485 // Usage : RTMP_IO_READ32(
486 // PRTMP_ADAPTER pAd,
487 // ULONG Register_Offset,
491 // PRTMP_ADAPTER pAd,
492 // ULONG Register_Offset,
497 // BBP & RF are using indirect access. Before write any value into it.
498 // We have to make sure there is no outstanding command pending via checking busy bit.
500 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
504 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
505 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
506 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
508 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
509 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
513 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
514 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
517 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
520 case 1: khz = 2412000; break; \
521 case 2: khz = 2417000; break; \
522 case 3: khz = 2422000; break; \
523 case 4: khz = 2427000; break; \
524 case 5: khz = 2432000; break; \
525 case 6: khz = 2437000; break; \
526 case 7: khz = 2442000; break; \
527 case 8: khz = 2447000; break; \
528 case 9: khz = 2452000; break; \
529 case 10: khz = 2457000; break; \
530 case 11: khz = 2462000; break; \
531 case 12: khz = 2467000; break; \
532 case 13: khz = 2472000; break; \
533 case 14: khz = 2484000; break; \
534 case 36: /* UNII */ khz = 5180000; break; \
535 case 40: /* UNII */ khz = 5200000; break; \
536 case 44: /* UNII */ khz = 5220000; break; \
537 case 48: /* UNII */ khz = 5240000; break; \
538 case 52: /* UNII */ khz = 5260000; break; \
539 case 56: /* UNII */ khz = 5280000; break; \
540 case 60: /* UNII */ khz = 5300000; break; \
541 case 64: /* UNII */ khz = 5320000; break; \
542 case 149: /* UNII */ khz = 5745000; break; \
543 case 153: /* UNII */ khz = 5765000; break; \
544 case 157: /* UNII */ khz = 5785000; break; \
545 case 161: /* UNII */ khz = 5805000; break; \
546 case 165: /* UNII */ khz = 5825000; break; \
547 case 100: /* HiperLAN2 */ khz = 5500000; break; \
548 case 104: /* HiperLAN2 */ khz = 5520000; break; \
549 case 108: /* HiperLAN2 */ khz = 5540000; break; \
550 case 112: /* HiperLAN2 */ khz = 5560000; break; \
551 case 116: /* HiperLAN2 */ khz = 5580000; break; \
552 case 120: /* HiperLAN2 */ khz = 5600000; break; \
553 case 124: /* HiperLAN2 */ khz = 5620000; break; \
554 case 128: /* HiperLAN2 */ khz = 5640000; break; \
555 case 132: /* HiperLAN2 */ khz = 5660000; break; \
556 case 136: /* HiperLAN2 */ khz = 5680000; break; \
557 case 140: /* HiperLAN2 */ khz = 5700000; break; \
558 case 34: /* Japan MMAC */ khz = 5170000; break; \
559 case 38: /* Japan MMAC */ khz = 5190000; break; \
560 case 42: /* Japan MMAC */ khz = 5210000; break; \
561 case 46: /* Japan MMAC */ khz = 5230000; break; \
562 case 184: /* Japan */ khz = 4920000; break; \
563 case 188: /* Japan */ khz = 4940000; break; \
564 case 192: /* Japan */ khz = 4960000; break; \
565 case 196: /* Japan */ khz = 4980000; break; \
566 case 208: /* Japan, means J08 */ khz = 5040000; break; \
567 case 212: /* Japan, means J12 */ khz = 5060000; break; \
568 case 216: /* Japan, means J16 */ khz = 5080000; break; \
569 default: khz = 2412000; break; \
573 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
576 case 2412000: ch = 1; break; \
577 case 2417000: ch = 2; break; \
578 case 2422000: ch = 3; break; \
579 case 2427000: ch = 4; break; \
580 case 2432000: ch = 5; break; \
581 case 2437000: ch = 6; break; \
582 case 2442000: ch = 7; break; \
583 case 2447000: ch = 8; break; \
584 case 2452000: ch = 9; break; \
585 case 2457000: ch = 10; break; \
586 case 2462000: ch = 11; break; \
587 case 2467000: ch = 12; break; \
588 case 2472000: ch = 13; break; \
589 case 2484000: ch = 14; break; \
590 case 5180000: ch = 36; /* UNII */ break; \
591 case 5200000: ch = 40; /* UNII */ break; \
592 case 5220000: ch = 44; /* UNII */ break; \
593 case 5240000: ch = 48; /* UNII */ break; \
594 case 5260000: ch = 52; /* UNII */ break; \
595 case 5280000: ch = 56; /* UNII */ break; \
596 case 5300000: ch = 60; /* UNII */ break; \
597 case 5320000: ch = 64; /* UNII */ break; \
598 case 5745000: ch = 149; /* UNII */ break; \
599 case 5765000: ch = 153; /* UNII */ break; \
600 case 5785000: ch = 157; /* UNII */ break; \
601 case 5805000: ch = 161; /* UNII */ break; \
602 case 5825000: ch = 165; /* UNII */ break; \
603 case 5500000: ch = 100; /* HiperLAN2 */ break; \
604 case 5520000: ch = 104; /* HiperLAN2 */ break; \
605 case 5540000: ch = 108; /* HiperLAN2 */ break; \
606 case 5560000: ch = 112; /* HiperLAN2 */ break; \
607 case 5580000: ch = 116; /* HiperLAN2 */ break; \
608 case 5600000: ch = 120; /* HiperLAN2 */ break; \
609 case 5620000: ch = 124; /* HiperLAN2 */ break; \
610 case 5640000: ch = 128; /* HiperLAN2 */ break; \
611 case 5660000: ch = 132; /* HiperLAN2 */ break; \
612 case 5680000: ch = 136; /* HiperLAN2 */ break; \
613 case 5700000: ch = 140; /* HiperLAN2 */ break; \
614 case 5170000: ch = 34; /* Japan MMAC */ break; \
615 case 5190000: ch = 38; /* Japan MMAC */ break; \
616 case 5210000: ch = 42; /* Japan MMAC */ break; \
617 case 5230000: ch = 46; /* Japan MMAC */ break; \
618 case 4920000: ch = 184; /* Japan */ break; \
619 case 4940000: ch = 188; /* Japan */ break; \
620 case 4960000: ch = 192; /* Japan */ break; \
621 case 4980000: ch = 196; /* Japan */ break; \
622 case 5040000: ch = 208; /* Japan, means J08 */ break; \
623 case 5060000: ch = 212; /* Japan, means J12 */ break; \
624 case 5080000: ch = 216; /* Japan, means J16 */ break; \
625 default: ch = 1; break; \
630 // Common fragment list structure - Identical to the scatter gather frag list structure
632 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
633 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
634 #define NIC_MAX_PHYS_BUF_COUNT 8
636 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
640 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
643 typedef struct _RTMP_SCATTER_GATHER_LIST {
644 ULONG NumberOfElements;
646 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
647 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
650 // Some utility macros
653 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
657 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
660 #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))))
662 #define INC_COUNTER64(Val) (Val.QuadPart++)
664 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
665 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
666 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
667 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
669 // Check LEAP & CCKM flags
670 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
671 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
673 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
674 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
676 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
678 _pExtraLlcSnapEncap = SNAP_802_1H; \
679 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
680 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
682 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
687 _pExtraLlcSnapEncap = NULL; \
691 // New Define for new Tx Path.
692 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
694 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
696 _pExtraLlcSnapEncap = SNAP_802_1H; \
697 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
698 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
700 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
705 _pExtraLlcSnapEncap = NULL; \
710 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
712 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
713 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
714 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
717 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
718 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
719 // else remove the LLC/SNAP field from the result Ethernet frame
720 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
722 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
723 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
724 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
728 _pRemovedLLCSNAP = NULL; \
729 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
730 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
732 PUCHAR pProto = _pData + 6; \
734 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
735 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
737 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
738 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
739 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
743 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
744 _pRemovedLLCSNAP = _pData; \
745 _DataSize -= LENGTH_802_1_H; \
746 _pData += LENGTH_802_1_H; \
751 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
752 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
753 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
757 #define SWITCH_AB( _pAA, _pBB) \
765 // Enqueue this frame to MLME engine
766 // We need to enqueue the whole frame because MLME need to pass data type
767 // information from 802.11 header
769 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
771 UINT32 High32TSF=0, Low32TSF=0; \
772 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
777 //Need to collect each ant's rssi concurrently
778 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
779 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
783 if (_pAd->RxAnt.EvaluatePeriod == 0) \
785 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
786 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
788 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
790 AvgRssi = _rssi1 << 3; \
791 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
795 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
796 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
797 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
798 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
801 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
802 AvgRssi = _rssi1 << 3; \
804 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
805 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
811 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
812 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
814 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
815 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
818 // Check if it is Japan W53(ch52,56,60,64) channel.
820 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
822 #ifdef CONFIG_STA_SUPPORT
823 #define STA_PORT_SECURED(_pAd) \
825 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
826 NdisAcquireSpinLock(&_pAd->MacTabLock); \
827 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
828 NdisReleaseSpinLock(&_pAd->MacTabLock); \
830 #endif // CONFIG_STA_SUPPORT //
834 // Register set pair for initialzation register set definition
836 typedef struct _RTMP_REG_PAIR
840 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
842 typedef struct _REG_PAIR
846 } REG_PAIR, *PREG_PAIR;
849 // Register set pair for initialzation register set definition
851 typedef struct _RTMP_RF_REGS
858 } RTMP_RF_REGS, *PRTMP_RF_REGS;
860 typedef struct _FREQUENCY_ITEM {
865 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
868 // Data buffer for DMA operation, the buffer must be contiguous physical memory
869 // Both DMA to / from CPU use the same structure.
871 typedef struct _RTMP_DMABUF
874 PVOID AllocVa; // TxBuf virtual address
875 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
876 } RTMP_DMABUF, *PRTMP_DMABUF;
879 typedef union _HEADER_802_11_SEQ{
892 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
895 // Data buffer for DMA operation, the buffer must be contiguous physical memory
896 // Both DMA to / from CPU use the same structure.
898 typedef struct _RTMP_REORDERBUF
901 PVOID AllocVa; // TxBuf virtual address
902 UCHAR Header802_3[14];
903 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
910 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
913 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
914 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
915 // which won't be released, driver has to wait until upper layer return the packet
916 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
917 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
918 // which driver should ACK upper layer when the tx is physically done or failed.
920 typedef struct _RTMP_DMACB
922 ULONG AllocSize; // Control block size
923 PVOID AllocVa; // Control block virtual address
924 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
925 PNDIS_PACKET pNdisPacket;
926 PNDIS_PACKET pNextNdisPacket;
928 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
929 } RTMP_DMACB, *PRTMP_DMACB;
931 typedef struct _RTMP_TX_BUF
935 ULONG AllocSize; // Control block size
936 PVOID AllocVa; // Control block virtual address
937 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
938 } RTMP_TXBUF, *PRTMP_TXBUF;
940 typedef struct _RTMP_RX_BUF
944 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
945 } RTMP_RXBUF, *PRTMP_RXBUF;
946 typedef struct _RTMP_TX_RING
948 RTMP_DMACB Cell[TX_RING_SIZE];
951 UINT32 TxSwFreeIdx; // software next free tx index
952 } RTMP_TX_RING, *PRTMP_TX_RING;
954 typedef struct _RTMP_RX_RING
956 RTMP_DMACB Cell[RX_RING_SIZE];
959 INT32 RxSwReadIdx; // software next read index
960 } RTMP_RX_RING, *PRTMP_RX_RING;
962 typedef struct _RTMP_MGMT_RING
964 RTMP_DMACB Cell[MGMT_RING_SIZE];
967 UINT32 TxSwFreeIdx; // software next free tx index
968 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
971 // Statistic counter structure
973 typedef struct _COUNTER_802_3
983 ULONG RcvAlignmentErrors;
985 ULONG MoreCollisions;
987 } COUNTER_802_3, *PCOUNTER_802_3;
989 typedef struct _COUNTER_802_11 {
991 LARGE_INTEGER LastTransmittedFragmentCount;
992 LARGE_INTEGER TransmittedFragmentCount;
993 LARGE_INTEGER MulticastTransmittedFrameCount;
994 LARGE_INTEGER FailedCount;
995 LARGE_INTEGER RetryCount;
996 LARGE_INTEGER MultipleRetryCount;
997 LARGE_INTEGER RTSSuccessCount;
998 LARGE_INTEGER RTSFailureCount;
999 LARGE_INTEGER ACKFailureCount;
1000 LARGE_INTEGER FrameDuplicateCount;
1001 LARGE_INTEGER ReceivedFragmentCount;
1002 LARGE_INTEGER MulticastReceivedFrameCount;
1003 LARGE_INTEGER FCSErrorCount;
1004 } COUNTER_802_11, *PCOUNTER_802_11;
1006 typedef struct _COUNTER_RALINK {
1007 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1008 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1009 ULONG BeenDisassociatedCount;
1010 ULONG BadCQIAutoRecoveryCount;
1011 ULONG PoorCQIRoamingCount;
1012 ULONG MgmtRingFullCount;
1013 ULONG RxCountSinceLastNULL;
1015 ULONG RxRingErrCount;
1017 ULONG TxRingErrCount;
1018 LARGE_INTEGER RealFcsErrCount;
1019 ULONG PendingNdisPacketCount;
1021 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1022 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1023 UINT32 OneSecTxDoneCount;
1024 ULONG OneSecRxCount;
1025 UINT32 OneSecTxAggregationCount;
1026 UINT32 OneSecRxAggregationCount;
1028 UINT32 OneSecFrameDuplicateCount;
1031 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1034 UINT32 OneSecTxNoRetryOkCount;
1035 UINT32 OneSecTxRetryOkCount;
1036 UINT32 OneSecTxFailCount;
1037 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1038 UINT32 OneSecRxOkCnt; // RX without error
1039 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1040 UINT32 OneSecRxFcsErrCnt; // CRC error
1041 UINT32 OneSecBeaconSentCnt;
1042 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1043 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1046 ULONG TxNonAggCount;
1047 ULONG TxAgg1MPDUCount;
1048 ULONG TxAgg2MPDUCount;
1049 ULONG TxAgg3MPDUCount;
1050 ULONG TxAgg4MPDUCount;
1051 ULONG TxAgg5MPDUCount;
1052 ULONG TxAgg6MPDUCount;
1053 ULONG TxAgg7MPDUCount;
1054 ULONG TxAgg8MPDUCount;
1055 ULONG TxAgg9MPDUCount;
1056 ULONG TxAgg10MPDUCount;
1057 ULONG TxAgg11MPDUCount;
1058 ULONG TxAgg12MPDUCount;
1059 ULONG TxAgg13MPDUCount;
1060 ULONG TxAgg14MPDUCount;
1061 ULONG TxAgg15MPDUCount;
1062 ULONG TxAgg16MPDUCount;
1064 LARGE_INTEGER TransmittedOctetsInAMSDU;
1065 LARGE_INTEGER TransmittedAMSDUCount;
1066 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1067 LARGE_INTEGER ReceivedAMSDUCount;
1068 LARGE_INTEGER TransmittedAMPDUCount;
1069 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1070 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1071 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1072 } COUNTER_RALINK, *PCOUNTER_RALINK;
1074 typedef struct _PID_COUNTER {
1075 ULONG TxAckRequiredCount; // CRC error
1077 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1078 ULONG LastSuccessRate;
1079 } PID_COUNTER, *PPID_COUNTER;
1081 typedef struct _COUNTER_DRS {
1082 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1083 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1084 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1085 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1086 ULONG CurrTxRateStableTime; // # of second in current TX rate
1087 BOOLEAN fNoisyEnvironment;
1088 BOOLEAN fLastSecAccordingRSSI;
1089 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1090 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1091 ULONG LastTxOkCount;
1092 } COUNTER_DRS, *PCOUNTER_DRS;
1095 // Arcfour Structure Added by PaulWu
1097 typedef struct _ARCFOUR
1102 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1104 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1105 typedef struct _RECEIVE_SETTING {
1106 #ifdef RT_BIG_ENDIAN
1110 USHORT STBC:2; //SPACE
1112 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1113 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1115 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1116 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1118 USHORT STBC:2; //SPACE
1123 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1125 // Shared key data structure
1126 typedef struct _WEP_KEY {
1127 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1128 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1129 } WEP_KEY, *PWEP_KEY;
1131 typedef struct _CIPHER_KEY {
1132 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1133 UCHAR RxMic[8]; // make alignment
1135 UCHAR TxTsc[6]; // 48bit TSC value
1136 UCHAR RxTsc[6]; // 48bit TSC value
1137 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1139 #ifdef CONFIG_STA_SUPPORT
1141 #endif // CONFIG_STA_SUPPORT //
1142 // Key length for each key, 0: entry is invalid
1143 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1144 } CIPHER_KEY, *PCIPHER_KEY;
1146 typedef struct _BBP_TUNING_STRUCT {
1148 UCHAR FalseCcaCountUpperBound; // 100 per sec
1149 UCHAR FalseCcaCountLowerBound; // 10 per sec
1150 UCHAR R17LowerBound; // specified in E2PROM
1151 UCHAR R17UpperBound; // 0x68 according to David Tung
1152 UCHAR CurrentR17Value;
1153 } BBP_TUNING, *PBBP_TUNING;
1155 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1156 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1157 UCHAR EvaluateStableCnt;
1158 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1159 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1160 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1161 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1162 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1163 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1164 SHORT Pair1LastAvgRssi; //
1165 SHORT Pair2LastAvgRssi; //
1166 ULONG RcvPktNumWhenEvaluate;
1167 BOOLEAN FirstPktArrivedWhenEvaluate;
1168 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1169 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1171 typedef struct _LEAP_AUTH_INFO {
1172 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1173 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1175 UCHAR UserName[256]; //LEAP, User name
1177 UCHAR Password[256]; //LEAP, User Password
1179 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1182 UCHAR Addr[MAC_ADDR_LEN];
1183 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1184 //00 02-Authentication timeout
1185 //00 03-Challenge from AP failed
1186 //00 04-Challenge to AP failed
1188 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1192 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1193 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1199 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1202 // Receive Tuple Cache Format
1204 typedef struct _TUPLE_CACHE {
1206 UCHAR MacAddress[MAC_ADDR_LEN];
1209 } TUPLE_CACHE, *PTUPLE_CACHE;
1212 // Fragment Frame structure
1214 typedef struct _FRAGMENT_FRAME {
1215 PNDIS_PACKET pFragPacket;
1219 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1220 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1224 // Packet information for NdisQueryPacket
1226 typedef struct _PACKET_INFO {
1227 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1228 UINT BufferCount ; // Number of Buffer descriptor chained
1229 UINT TotalPacketLength ; // Self explained
1230 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1231 } PACKET_INFO, *PPACKET_INFO;
1234 // Tkip Key structure which RC4 key & MIC calculation
1236 typedef struct _TKIP_KEY_INFO {
1237 UINT nBytesInM; // # bytes in M for MICKEY
1240 ULONG K0; // for MICKEY Low
1241 ULONG K1; // for MICKEY Hig
1242 ULONG L; // Current state for MICKEY
1243 ULONG R; // Current state for MICKEY
1244 ULONG M; // Message accumulator for MICKEY
1247 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1250 // Private / Misc data, counters for driver internal use
1252 typedef struct __PRIVATE_STRUC {
1253 UINT SystemResetCnt; // System reset counter
1254 UINT TxRingFullCnt; // Tx ring full occurrance number
1255 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1256 // Variables for WEP encryption / decryption in rtmp_wep.c
1258 ARCFOURCONTEXT WEPCONTEXT;
1262 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1264 // structure to tune BBP R66 (BBP TUNING)
1265 typedef struct _BBP_R66_TUNING {
1267 USHORT FalseCcaLowerThreshold; // default 100
1268 USHORT FalseCcaUpperThreshold; // default 512
1270 UCHAR R66CurrentValue;
1271 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1272 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1274 // structure to store channel TX power
1275 typedef struct _CHANNEL_TX_POWER {
1276 USHORT RemainingTimeForUse; //unit: sec
1282 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1284 // structure to store 802.11j channel TX power
1285 typedef struct _CHANNEL_11J_TX_POWER {
1287 UCHAR BW; // BW_10 or BW_20
1290 USHORT RemainingTimeForUse; //unit: sec
1291 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1293 typedef enum _ABGBAND_STATE_ {
1299 typedef struct _MLME_STRUCT {
1300 #ifdef CONFIG_STA_SUPPORT
1301 // STA state machines
1302 STATE_MACHINE CntlMachine;
1303 STATE_MACHINE AssocMachine;
1304 STATE_MACHINE AuthMachine;
1305 STATE_MACHINE AuthRspMachine;
1306 STATE_MACHINE SyncMachine;
1307 STATE_MACHINE WpaPskMachine;
1308 STATE_MACHINE LeapMachine;
1309 STATE_MACHINE AironetMachine;
1310 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1311 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1312 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1313 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1314 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1315 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1316 #endif // CONFIG_STA_SUPPORT //
1317 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1319 STATE_MACHINE ActMachine;
1321 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1322 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1323 ULONG LastSendNULLpsmTime;
1326 NDIS_SPIN_LOCK TaskLock;
1331 RALINK_TIMER_STRUCT PeriodicTimer;
1332 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1333 RALINK_TIMER_STRUCT LinkDownTimer;
1334 RALINK_TIMER_STRUCT LinkUpTimer;
1335 ULONG PeriodicRound;
1336 ULONG OneSecPeriodicRound;
1339 BOOLEAN bLowThroughput;
1340 BOOLEAN bEnableAutoAntennaCheck;
1341 RALINK_TIMER_STRUCT RxAntEvalTimer;
1344 UCHAR CaliBW40RfR24;
1345 UCHAR CaliBW20RfR24;
1348 } MLME_STRUCT, *PMLME_STRUCT;
1350 // structure for radar detection and channel switch
1351 typedef struct _RADAR_DETECT_STRUCT {
1352 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1353 UCHAR CSCount; //Channel switch counter
1354 UCHAR CSPeriod; //Channel switch period (beacon count)
1355 UCHAR RDCount; //Radar detection counter
1356 UCHAR RDMode; //Radar Detection mode
1357 UCHAR RDDurRegion; //Radar detection duration region
1364 ULONG InServiceMonitorCount; // unit: sec
1365 UINT8 DfsSessionTime;
1368 UINT8 LongPulseRadarTh;
1369 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1371 typedef enum _REC_BLOCKACK_STATUS
1375 Recipient_HandleRes,
1377 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1379 typedef enum _ORI_BLOCKACK_STATUS
1385 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1387 #ifdef DOT11_N_SUPPORT
1388 typedef struct _BA_ORI_ENTRY{
1393 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1395 USHORT TimeOutValue;
1396 ORI_BLOCKACK_STATUS ORI_BA_Status;
1397 RALINK_TIMER_STRUCT ORIBATimer;
1399 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1401 typedef struct _BA_REC_ENTRY {
1404 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1406 //UCHAR Curindidx; // the head in the RX reordering buffer
1408 // USHORT LastIndSeqAtTimer;
1409 USHORT TimeOutValue;
1410 RALINK_TIMER_STRUCT RECBATimer;
1411 ULONG LastIndSeqAtTimer;
1414 REC_BLOCKACK_STATUS REC_BA_Status;
1415 // UCHAR RxBufIdxUsed;
1416 // corresponding virtual address for RX reordering packet storage.
1417 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1418 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1419 // struct _BA_REC_ENTRY *pNext;
1421 struct reordering_list list;
1422 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1426 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1427 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1428 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1429 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1430 } BA_TABLE, *PBA_TABLE;
1432 //For QureyBATableOID use;
1433 typedef struct PACKED _OID_BA_REC_ENTRY{
1434 UCHAR MACAddr[MAC_ADDR_LEN];
1435 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1438 REC_BLOCKACK_STATUS REC_BA_Status[8];
1439 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1441 //For QureyBATableOID use;
1442 typedef struct PACKED _OID_BA_ORI_ENTRY{
1443 UCHAR MACAddr[MAC_ADDR_LEN];
1444 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
1447 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1448 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1450 typedef struct _QUERYBA_TABLE{
1451 OID_BA_ORI_ENTRY BAOriEntry[32];
1452 OID_BA_REC_ENTRY BARecEntry[32];
1453 UCHAR OriNum;// Number of below BAOriEntry
1454 UCHAR RecNum;// Number of below BARecEntry
1455 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1457 typedef union _BACAP_STRUC {
1458 #ifdef RT_BIG_ENDIAN
1461 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.
1462 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1463 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1464 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1465 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1466 UINT32 MpduDensity:3;
1467 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1468 UINT32 AutoBA:1; // automatically BA
1469 UINT32 TxBAWinLimit:8;
1470 UINT32 RxBAWinLimit:8;
1474 UINT32 RxBAWinLimit:8;
1475 UINT32 TxBAWinLimit:8;
1476 UINT32 AutoBA:1; // automatically BA
1477 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1478 UINT32 MpduDensity:3;
1479 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1480 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1481 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1482 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1483 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.
1488 } BACAP_STRUC, *PBACAP_STRUC;
1489 #endif // DOT11_N_SUPPORT //
1491 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1492 typedef struct _IOT_STRUC {
1494 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1495 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1496 ULONG OneSecInWindowCount;
1497 ULONG OneSecFrameDuplicateCount;
1498 ULONG OneSecOutWindowCount;
1503 BOOLEAN bRTSLongProtOn;
1504 #ifdef CONFIG_STA_SUPPORT
1505 BOOLEAN bLastAtheros;
1506 BOOLEAN bCurrentAtheros;
1507 BOOLEAN bNowAtherosBurstOn;
1508 BOOLEAN bNextDisableRxBA;
1510 #endif // CONFIG_STA_SUPPORT //
1511 } IOT_STRUC, *PIOT_STRUC;
1513 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1514 typedef union _REG_TRANSMIT_SETTING {
1515 #ifdef RT_BIG_ENDIAN
1521 UINT32 STBC:1; //SPACE
1523 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1524 UINT32 TxBF:1; // 3*3
1526 //UINT32 MCS:7; // MCS
1532 //UINT32 MCS:7; // MCS
1535 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1537 UINT32 STBC:1; //SPACE
1545 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1547 typedef union _DESIRED_TRANSMIT_SETTING {
1548 #ifdef RT_BIG_ENDIAN
1551 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1553 USHORT MCS:7; // MCS
1557 USHORT MCS:7; // MCS
1559 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1564 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1567 BOOLEAN IsRecipient;
1568 UCHAR MACAddr[MAC_ADDR_LEN];
1572 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1573 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1576 // Multiple SSID structure
1578 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1579 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1581 /* clear bcmc TIM bit */
1582 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1583 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1585 /* set bcmc TIM bit */
1586 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1587 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1589 /* clear a station PS TIM bit */
1590 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1591 { UCHAR tim_offset = wcid >> 3; \
1592 UCHAR bit_offset = wcid & 0x7; \
1593 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1595 /* set a station PS TIM bit */
1596 #define WLAN_MR_TIM_BIT_SET(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]; }
1602 #define BEACON_BITMAP_MASK 0xff
1603 typedef struct _BEACON_SYNC_STRUCT_
1605 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1606 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1607 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1608 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1609 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1610 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1611 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1612 }BEACON_SYNC_STRUCT;
1615 typedef struct _MULTISSID_STRUCT {
1616 UCHAR Bssid[MAC_ADDR_LEN];
1618 CHAR Ssid[MAX_LEN_OF_SSID];
1619 USHORT CapabilityInfo;
1623 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1624 NDIS_802_11_WEP_STATUS WepStatus;
1625 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1626 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1630 ULONG ReceivedByteCount;
1631 ULONG TransmittedByteCount;
1635 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1636 RT_HT_PHY_INFO DesiredHtPhyInfo;
1637 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1638 BOOLEAN bAutoTxRateSwitch;
1640 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1643 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1644 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1645 UCHAR DesiredRatesIndex;
1646 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1648 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1649 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1650 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1660 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1661 UCHAR BANClass3Data;
1662 ULONG IsolateInterStaTraffic;
1665 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1668 UCHAR TimIELocationInBeacon;
1669 UCHAR CapabilityInfoLocationInBeacon;
1670 // outgoing BEACON frame buffer and corresponding TXWI
1671 // PTXWI_STRUC BeaconTxWI; //
1672 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1675 UINT16 StationKeepAliveTime; // unit: second
1678 USHORT VLAN_Priority;
1680 RT_802_11_ACL AccessControlList;
1683 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1684 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1686 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1688 // For 802.1x daemon setting per BSS
1689 UCHAR radius_srv_num;
1690 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1693 unsigned int mylinkid;
1697 UINT32 RcvdConflictSsidCount;
1698 UINT32 RcvdSpoofedAssocRespCount;
1699 UINT32 RcvdSpoofedReassocRespCount;
1700 UINT32 RcvdSpoofedProbeRespCount;
1701 UINT32 RcvdSpoofedBeaconCount;
1702 UINT32 RcvdSpoofedDisassocCount;
1703 UINT32 RcvdSpoofedAuthCount;
1704 UINT32 RcvdSpoofedDeauthCount;
1705 UINT32 RcvdSpoofedUnknownMgmtCount;
1706 UINT32 RcvdReplayAttackCount;
1708 CHAR RssiOfRcvdConflictSsid;
1709 CHAR RssiOfRcvdSpoofedAssocResp;
1710 CHAR RssiOfRcvdSpoofedReassocResp;
1711 CHAR RssiOfRcvdSpoofedProbeResp;
1712 CHAR RssiOfRcvdSpoofedBeacon;
1713 CHAR RssiOfRcvdSpoofedDisassoc;
1714 CHAR RssiOfRcvdSpoofedAuth;
1715 CHAR RssiOfRcvdSpoofedDeauth;
1716 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1717 CHAR RssiOfRcvdReplayAttack;
1721 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1723 // configuration common to OPMODE_AP as well as OPMODE_STA
1724 typedef struct _COMMON_CONFIG {
1726 BOOLEAN bCountryFlag;
1727 UCHAR CountryCode[3];
1729 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1730 UCHAR CountryRegionForABand; // Enum of country region for A band
1731 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1732 USHORT Dsifs; // in units of usec
1733 ULONG PacketFilter; // Packet filter for receiving
1735 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1736 UCHAR SsidLen; // the actual ssid length in used
1737 UCHAR LastSsidLen; // the actual ssid length in used
1738 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1739 UCHAR LastBssid[MAC_ADDR_LEN];
1741 UCHAR Bssid[MAC_ADDR_LEN];
1742 USHORT BeaconPeriod;
1744 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1746 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1748 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1750 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1751 UCHAR MaxDesiredRate;
1752 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1754 ULONG BasicRateBitmap; // backup basic ratebitmap
1756 BOOLEAN bAPSDCapable;
1757 BOOLEAN bInServicePeriod;
1762 BOOLEAN bNeedSendTriggerFrame;
1763 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1764 ULONG TriggerTimerCount;
1766 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1767 // move to MULTISSID_STRUCT for MBSS
1768 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1769 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1770 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1771 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1772 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1773 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1774 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1775 //BOOLEAN bAutoTxRateSwitch;
1776 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1777 UCHAR RtsRate; // RATE_xxx
1778 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1779 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1780 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1782 USHORT RtsThreshold; // in unit of BYTE
1783 USHORT FragmentThreshold; // in unit of BYTE
1785 UCHAR TxPower; // in unit of mW
1786 ULONG TxPowerPercentage; // 0~100 %
1787 ULONG TxPowerDefault; // keep for TxPowerPercentage
1789 #ifdef DOT11_N_SUPPORT
1790 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1791 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1792 #endif // DOT11_N_SUPPORT //
1793 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1794 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1795 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1796 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1797 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1798 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1799 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1800 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1801 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1802 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1804 #ifdef DOT11_N_SUPPORT
1806 #endif // DOT11_N_SUPPORT //
1807 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1808 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1809 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1810 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1811 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1812 #ifdef CONFIG_STA_SUPPORT
1813 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1814 #endif // CONFIG_STA_SUPPORT //
1815 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1816 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1817 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1818 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1819 ULONG OpStatusFlags;
1821 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1822 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1823 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1825 // IEEE802.11H--DFS.
1826 RADAR_DETECT_STRUCT RadarDetect;
1828 #ifdef DOT11_N_SUPPORT
1830 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1831 //RT_HT_CAPABILITY SupportedHtPhy;
1832 RT_HT_CAPABILITY DesiredHtPhy;
1833 HT_CAPABILITY_IE HtCapability;
1834 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1835 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1836 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1837 NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present
1840 BOOLEAN bMIMOPSEnable;
1842 BOOLEAN bDisableReordering;
1843 BOOLEAN bForty_Mhz_Intolerant;
1844 BOOLEAN bExtChannelSwitchAnnouncement;
1845 BOOLEAN bRcvBSSWidthTriggerEvents;
1846 ULONG LastRcvBSSWidthTriggerEventsTime;
1849 #endif // DOT11_N_SUPPORT //
1851 // Enable wireless event
1852 BOOLEAN bWirelessEvent;
1853 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1855 // Tx & Rx Stream number selection
1859 // transmit phy mode, trasmit rate for Multicast.
1860 #ifdef MCAST_RATE_SPECIFIC
1861 UCHAR McastTransmitMcs;
1862 UCHAR McastTransmitPhyMode;
1863 #endif // MCAST_RATE_SPECIFIC //
1865 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1868 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1869 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1870 RT_HT_CAPABILITY SupportedHtPhy;
1871 ULONG MaxPktOneTxBulk;
1875 BEACON_SYNC_STRUCT *pBeaconSync;
1876 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1877 UINT32 BeaconAdjust;
1878 UINT32 BeaconFactor;
1879 UINT32 BeaconRemain;
1883 NDIS_SPIN_LOCK MeasureReqTabLock;
1884 PMEASURE_REQ_TAB pMeasureReqTab;
1886 NDIS_SPIN_LOCK TpcReqTabLock;
1887 PTPC_REQ_TAB pTpcReqTab;
1889 // transmit phy mode, trasmit rate for Multicast.
1890 #ifdef MCAST_RATE_SPECIFIC
1891 HTTRANSMIT_SETTING MCastPhyMode;
1892 #endif // MCAST_RATE_SPECIFIC //
1893 } COMMON_CONFIG, *PCOMMON_CONFIG;
1896 #ifdef CONFIG_STA_SUPPORT
1897 /* Modified by Wu Xi-Kun 4/21/2006 */
1898 // STA configuration and status
1899 typedef struct _STA_ADMIN_CONFIG {
1901 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1902 // the user intended configuration, but not necessary fully equal to the final
1903 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1904 // AP or IBSS holder).
1905 // Once initialized, user configuration can only be changed via OID_xxx
1906 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1907 USHORT AtimWin; // used when starting a new IBSS
1910 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1911 // the user intended configuration, and should be always applied to the final
1912 // settings in ACTIVE BSS without compromising with the BSS holder.
1913 // Once initialized, user configuration can only be changed via OID_xxx
1915 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1916 USHORT DefaultListenCount; // default listen count;
1917 ULONG WindowsPowerMode; // Power mode for AC power
1918 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1919 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1920 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1921 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1923 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1924 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1925 USHORT DisassocReason;
1926 UCHAR DisassocSta[MAC_ADDR_LEN];
1927 USHORT DeauthReason;
1928 UCHAR DeauthSta[MAC_ADDR_LEN];
1929 USHORT AuthFailReason;
1930 UCHAR AuthFailSta[MAC_ADDR_LEN];
1932 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1933 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1934 NDIS_802_11_WEP_STATUS WepStatus;
1935 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1937 // Add to support different cipher suite for WPA2/WPA mode
1938 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1939 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1940 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1941 USHORT RsnCapability;
1943 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1945 UCHAR PMK[32]; // WPA PSK mode PMK
1946 UCHAR PTK[64]; // WPA PSK mode PTK
1947 UCHAR GTK[32]; // GTK from authenticator
1948 BSSID_INFO SavedPMK[PMKID_NO];
1949 UINT SavedPMKNum; // Saved PMKID number
1954 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1957 // For WPA countermeasures
1958 ULONG LastMicErrorTime; // record last MIC error time
1959 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1960 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1961 // For WPA-PSK supplicant state
1962 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1963 UCHAR ReplayCounter[8];
1964 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1965 UCHAR SNonce[32]; // SNonce for WPA-PSK
1967 UCHAR LastSNR0; // last received BEACON's SNR
1968 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1969 RSSI_SAMPLE RssiSample;
1970 ULONG NumOfAvgRssiSample;
1972 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1973 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1974 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1975 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1977 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1978 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1979 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1980 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1981 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1982 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1983 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1985 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
1986 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
1987 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
1989 // New for WPA, windows want us to to keep association information and
1990 // Fixed IEs from last association response
1991 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1992 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1993 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1994 USHORT ResVarIELen; // Length of next VIE include EID & Length
1995 UCHAR ResVarIEs[MAX_VIE_LEN];
1998 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2000 // New variables used for CCX 1.0
2002 BOOLEAN bCkipCmicOn;
2004 UCHAR GIV[3]; //for CCX iv
2009 LEAP_AUTH_INFO LeapAuthInfo;
2011 UCHAR NetworkChallenge[8];
2012 UCHAR NetworkChallengeResponse[24];
2013 UCHAR PeerChallenge[8];
2015 UCHAR PeerChallengeResponse[24];
2016 UCHAR SessionKey[16]; //Network session keys (NSK)
2017 RALINK_TIMER_STRUCT LeapAuthTimer;
2018 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2020 // New control flags for CCX
2021 CCX_CONTROL CCXControl; // Master administration state
2022 BOOLEAN CCXEnable; // Actual CCX state
2023 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2024 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2025 UCHAR CCXReqType; // Current processing CCX request type
2026 BSS_TABLE CCXBssTab; // BSS Table
2027 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2028 USHORT FrameReportLen; // Current Frame report length
2029 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2030 USHORT RPIDensity[8]; // Array for RPI density collection
2031 // Start address of each BSS table within FrameReportBuf
2032 // It's important to update the RxPower of the corresponding Bss
2033 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2034 USHORT BeaconToken; // Token for beacon report
2035 ULONG LastBssIndex; // Most current reported Bss index
2036 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2037 UCHAR RMReqCnt; // Number of measurement request saved.
2038 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2039 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2040 // It must be the same channel with maximum duration
2041 USHORT ParallelDuration; // Maximum duration for parallel measurement
2042 UCHAR ParallelChannel; // Only one channel with parallel measurement
2043 USHORT IAPPToken; // IAPP dialog token
2044 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2045 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2046 // Hack for channel load and noise histogram parameters
2047 UCHAR NHFactor; // Parameter for Noise histogram
2048 UCHAR CLFactor; // Parameter for channel load
2050 UCHAR KRK[16]; //Key Refresh Key.
2051 UCHAR BTK[32]; //Base Transient Key
2052 BOOLEAN CCKMLinkUpFlag;
2053 ULONG CCKMRN; //(Re)Association request number.
2054 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2055 UCHAR AironetCellPowerLimit; //in dBm
2056 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2057 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2058 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2059 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2060 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2061 USHORT CCXAdjacentAPChannel;
2062 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2064 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2065 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2067 UCHAR DtimCount; // 0.. DtimPeriod-1
2068 UCHAR DtimPeriod; // default = 3
2070 ////////////////////////////////////////////////////////////////////////////////////////
2071 // This is only for WHQL test.
2073 ////////////////////////////////////////////////////////////////////////////////////////
2075 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2077 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2078 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2080 #ifdef WPA_SUPPLICANT_SUPPORT
2082 BOOLEAN IEEE8021x_required_keys;
2083 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2084 UCHAR DesireSharedKeyId;
2086 // 0: driver ignores wpa_supplicant
2087 // 1: wpa_supplicant initiates scanning and AP selection
2088 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2089 UCHAR WpaSupplicantUP;
2090 UCHAR WpaSupplicantScanCount;
2091 #endif // WPA_SUPPLICANT_SUPPORT //
2096 BOOLEAN bTGnWifiTest;
2097 BOOLEAN bScanReqIsFromWebUI;
2099 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2100 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2101 RT_HT_PHY_INFO DesiredHtPhyInfo;
2102 BOOLEAN bAutoTxRateSwitch;
2103 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2105 // This data structure keep the current active BSS/IBSS's configuration that this STA
2106 // had agreed upon joining the network. Which means these parameters are usually decided
2107 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2108 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2109 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2110 // the current active settings.
2111 typedef struct _STA_ACTIVE_CONFIG {
2113 USHORT AtimWin; // in kusec; IBSS parameter set element
2114 USHORT CapabilityInfo;
2115 USHORT CfpMaxDuration;
2118 // Copy supported rate from desired AP's beacon. We are trying to match
2119 // AP's supported and extended rate settings.
2120 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2121 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2124 // Copy supported ht from desired AP's beacon. We are trying to match
2125 RT_HT_PHY_INFO SupportedPhyInfo;
2126 RT_HT_CAPABILITY SupportedHtPhy;
2127 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2128 #endif // CONFIG_STA_SUPPORT //
2131 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2132 NDIS_802_11_MAC_ADDRESS MacAddr;
2133 USHORT MacTabMatchWCID; // ASIC
2134 CIPHER_KEY CipherKey;
2135 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2138 // ----------- start of AP --------------------------
2139 // AUTH-RSP State Machine Aux data structure
2140 typedef struct _AP_MLME_AUX {
2141 UCHAR Addr[MAC_ADDR_LEN];
2143 CHAR Challenge[CIPHER_TEXT_LEN];
2144 } AP_MLME_AUX, *PAP_MLME_AUX;
2146 // structure to define WPA Group Key Rekey Interval
2147 typedef struct PACKED _RT_802_11_WPA_REKEY {
2148 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2149 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2150 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2152 typedef struct _MAC_TABLE_ENTRY {
2153 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2154 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2155 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2156 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2157 BOOLEAN ValidAsMesh;
2158 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2160 BOOLEAN bIAmBadAtheros;
2162 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2164 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2165 UCHAR CMTimerRunning;
2166 UCHAR apidx; // MBSS number
2168 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2169 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2170 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2173 RALINK_TIMER_STRUCT RetryTimer;
2174 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2175 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2176 NDIS_802_11_WEP_STATUS WepStatus;
2177 AP_WPA_STATE WpaState;
2180 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2181 CIPHER_KEY PairwiseKey;
2184 UCHAR PMKID[LEN_PMKID];
2187 UCHAR Addr[MAC_ADDR_LEN];
2190 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2191 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2193 USHORT CapabilityInfo;
2195 ULONG NoDataIdleCount;
2196 UINT16 StationKeepAliveCount; // unit: second
2198 QUEUE_HEADER PsQueue;
2200 UINT32 StaConnectTime; // the live time of this station since associated with AP
2203 #ifdef DOT11_N_SUPPORT
2205 USHORT NoBADataCountDown;
2207 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2208 UINT TxBFCount; // 3*3
2209 #endif // DOT11_N_SUPPORT //
2211 UINT DebugFIFOCount;
2216 //====================================================
2217 //WDS entry needs these
2218 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2219 UINT MatchWDSTabIdx;
2220 UCHAR MaxSupportedRate;
2222 UCHAR CurrTxRateIndex;
2223 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2224 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2225 // USHORT OneSecTxOkCount;
2226 UINT32 OneSecTxNoRetryOkCount;
2227 UINT32 OneSecTxRetryOkCount;
2228 UINT32 OneSecTxFailCount;
2229 UINT32 ContinueTxFailCnt;
2230 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2231 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2232 //====================================================
2234 BOOLEAN fNoisyEnvironment;
2235 BOOLEAN fLastSecAccordingRSSI;
2236 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2237 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2238 ULONG LastTxOkCount;
2239 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2241 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2242 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2243 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2244 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2245 ULONG ClientStatusFlags;
2247 // TODO: Shall we move that to DOT11_N_SUPPORT???
2248 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2250 #ifdef DOT11_N_SUPPORT
2251 // HT EWC MIMO-N used parameters
2252 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2253 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2254 USHORT TXAutoBAbitmap;
2255 USHORT BADeclineBitmap;
2256 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2257 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2258 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2260 // 802.11n features.
2262 UCHAR MaxRAmpduFactor;
2264 UCHAR MmpsMode; // MIMO power save more.
2266 HT_CAPABILITY_IE HTCapability;
2267 #endif // DOT11_N_SUPPORT //
2269 BOOLEAN bAutoTxRateSwitch;
2272 struct _MAC_TABLE_ENTRY *pNext;
2273 USHORT TxSeq[NUM_OF_TID];
2274 USHORT NonQosDataSeq;
2276 RSSI_SAMPLE RssiSample;
2278 UINT32 TXMCSExpected[16];
2279 UINT32 TXMCSSuccessful[16];
2280 UINT32 TXMCSFailed[16];
2281 UINT32 TXMCSAutoFallBack[16][16];
2283 #ifdef CONFIG_STA_SUPPORT
2284 ULONG LastBeaconRxTime;
2285 #endif // CONFIG_STA_SUPPORT //
2286 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2288 typedef struct _MAC_TABLE {
2290 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2291 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2292 QUEUE_HEADER McastPsQueue;
2294 BOOLEAN fAnyStationInPsm;
2295 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2296 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2297 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2298 #ifdef DOT11_N_SUPPORT
2299 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2300 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2301 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2302 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2303 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2304 #endif // DOT11_N_SUPPORT //
2305 } MAC_TABLE, *PMAC_TABLE;
2307 #ifdef DOT11_N_SUPPORT
2308 #define IS_HT_STA(_pMacEntry) \
2309 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2311 #define IS_HT_RATE(_pMacEntry) \
2312 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2314 #define PEER_IS_HT_RATE(_pMacEntry) \
2315 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2316 #endif // DOT11_N_SUPPORT //
2318 typedef struct _WDS_ENTRY {
2320 UCHAR Addr[MAC_ADDR_LEN];
2321 ULONG NoDataIdleCount;
2322 struct _WDS_ENTRY *pNext;
2323 } WDS_ENTRY, *PWDS_ENTRY;
2325 typedef struct _WDS_TABLE_ENTRY {
2327 UCHAR WdsAddr[MAC_ADDR_LEN];
2328 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2329 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2330 UCHAR MaxSupportedRate;
2332 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2333 USHORT OneSecTxOkCount;
2334 USHORT OneSecTxRetryOkCount;
2335 USHORT OneSecTxFailCount;
2336 ULONG CurrTxRateStableTime; // # of second in current TX rate
2337 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2338 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2340 typedef struct _RT_802_11_WDS_ENTRY {
2344 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2345 UCHAR MacTabMatchWCID; // ASIC
2346 NDIS_802_11_WEP_STATUS WepStatus;
2349 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2350 RT_HT_PHY_INFO DesiredHtPhyInfo;
2351 BOOLEAN bAutoTxRateSwitch;
2352 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2353 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2355 typedef struct _WDS_TABLE {
2358 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2359 } WDS_TABLE, *PWDS_TABLE;
2361 typedef struct _APCLI_STRUCT {
2364 unsigned int mylinkid;
2366 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2367 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2368 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2370 CHAR Ssid[MAX_LEN_OF_SSID];
2373 CHAR CfgSsid[MAX_LEN_OF_SSID];
2374 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2375 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2377 ULONG ApCliRcvBeaconTime;
2379 ULONG CtrlCurrState;
2380 ULONG SyncCurrState;
2381 ULONG AuthCurrState;
2382 ULONG AssocCurrState;
2383 ULONG WpaPskCurrState;
2388 ULONG ClientStatusFlags;
2391 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2392 NDIS_802_11_WEP_STATUS WepStatus;
2394 // Add to support different cipher suite for WPA2/WPA mode
2395 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2396 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2397 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2398 USHORT RsnCapability;
2400 UCHAR PSK[100]; // reserve PSK key material
2402 UCHAR PMK[32]; // WPA PSK mode PMK
2403 //UCHAR PTK[64]; // WPA PSK mode PTK
2404 UCHAR GTK[32]; // GTK from authenticator
2406 //CIPHER_KEY PairwiseKey;
2407 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2410 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2411 //UCHAR PortSecured;
2413 // store RSN_IE built by driver
2414 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2417 // For WPA countermeasures
2418 ULONG LastMicErrorTime; // record last MIC error time
2419 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2420 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2422 // For WPA-PSK supplicant state
2423 //WPA_STATE WpaState; // Default is SS_NOTUSE
2424 //UCHAR ReplayCounter[8];
2425 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2426 UCHAR SNonce[32]; // SNonce for WPA-PSK
2427 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2429 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2430 RT_HT_PHY_INFO DesiredHtPhyInfo;
2431 BOOLEAN bAutoTxRateSwitch;
2432 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2433 } APCLI_STRUCT, *PAPCLI_STRUCT;
2435 // ----------- end of AP ----------------------------
2440 BOOLEAN bGreenField;
2446 typedef struct _INF_PCI_CONFIG
2448 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2451 typedef struct _INF_USB_CONFIG
2453 UINT BulkInEpAddr; // bulk-in endpoint address
2454 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2458 #ifdef IKANOS_VX_1X0
2459 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2461 struct IKANOS_TX_INFO
2463 struct net_device *netdev;
2464 IkanosWlanTxCbFuncP *fp;
2466 #endif // IKANOS_VX_1X0 //
2469 #define DIAGNOSE_TIME 10 // 10 sec
2470 typedef struct _RtmpDiagStrcut_
2471 { // Diagnosis Related element
2472 unsigned char inited;
2474 unsigned char ArrayStartIdx;
2475 unsigned char ArrayCurIdx;
2477 USHORT TxDataCnt[DIAGNOSE_TIME];
2478 USHORT TxFailCnt[DIAGNOSE_TIME];
2479 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2480 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2481 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2482 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2483 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2485 USHORT TxAggCnt[DIAGNOSE_TIME];
2486 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2487 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2488 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2489 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2490 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2493 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2494 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2495 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2496 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2498 #endif // DBG_DIAGNOSE //
2502 // The miniport adapter structure
2504 typedef struct _RTMP_ADAPTER
2506 PVOID OS_Cookie; // save specific structure relative to OS
2512 NDIS_SPIN_LOCK irq_lock;
2516 /*****************************************************************************************/
2517 /* USB related parameters */
2518 /*****************************************************************************************/
2519 struct usb_config_descriptor *config;
2520 UINT BulkInEpAddr; // bulk-in endpoint address
2521 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2524 USHORT BulkOutMaxPacketSize;
2525 USHORT BulkInMaxPacketSize;
2527 //======Control Flags
2528 LONG PendingIoCount;
2530 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2533 //======Timer Thread
2534 RT2870_TIMER_QUEUE TimerQ;
2535 NDIS_SPIN_LOCK TimerQLock;
2540 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2542 BOOLEAN TimerFunc_kill;
2546 //======Semaphores (event)
2547 struct semaphore mlme_semaphore; /* to sleep thread on */
2548 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2549 struct semaphore RTUSBTimer_semaphore;
2550 #ifdef INF_AMAZON_SE
2551 struct semaphore UsbVendorReq_semaphore;
2552 PVOID UsbVendorReqBuf;
2553 #endif // INF_AMAZON_SE //
2554 struct completion TimerQComplete;
2555 struct completion mlmeComplete;
2556 struct completion CmdQComplete;
2557 wait_queue_head_t *wait;
2561 /*****************************************************************************************/
2562 /* Both PCI/USB related parameters */
2563 /*****************************************************************************************/
2566 /*****************************************************************************************/
2567 /* Tx related parameters */
2568 /*****************************************************************************************/
2569 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2570 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2573 // Data related context and AC specified, 4 AC supported
2574 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2575 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2577 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2578 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2580 // 4 sets of Bulk Out index and pending flag
2581 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2583 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2584 UCHAR bulkResetPipeid;
2585 BOOLEAN MgmtBulkPending;
2586 ULONG bulkResetReq[6];
2589 // resource for software backlog queues
2590 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2591 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2593 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2594 RTMP_MGMT_RING MgmtRing;
2595 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2598 /*****************************************************************************************/
2599 /* Rx related parameters */
2600 /*****************************************************************************************/
2604 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2605 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2606 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2607 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2608 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2609 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2610 ULONG TransferBufferLength; // current length of the packet buffer
2611 ULONG ReadPosition; // current read position in a packet buffer
2615 /*****************************************************************************************/
2616 /* ASIC related parameters */
2617 /*****************************************************************************************/
2618 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2620 // ---------------------------
2622 // ---------------------------
2623 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2624 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2625 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2626 BOOLEAN EepromAccess;
2628 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2630 // ---------------------------
2632 // ---------------------------
2633 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2634 UCHAR BbpRssiToDbmDelta;
2635 BBP_R66_TUNING BbpTuning;
2637 // ----------------------------
2639 // ----------------------------
2640 UCHAR RfIcType; // RFIC_xxx
2641 ULONG RfFreqOffset; // Frequency offset for channel switching
2642 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2644 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2645 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2647 // This soft Rx Antenna Diversity mechanism is used only when user set
2648 // RX Antenna = DIVERSITY ON
2649 SOFT_RX_ANT_DIVERSITY RxAnt;
2652 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2653 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2654 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2655 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2657 UCHAR ChannelListNum; // number of channel in ChannelList[]
2660 ULONG Tx20MPwrCfgABand[5];
2661 ULONG Tx20MPwrCfgGBand[5];
2662 ULONG Tx40MPwrCfgABand[5];
2663 ULONG Tx40MPwrCfgGBand[5];
2665 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2666 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2667 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2668 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2669 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2670 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2672 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2673 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2674 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2675 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2676 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2677 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2679 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2680 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2681 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2682 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2685 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2686 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2687 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2688 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2691 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2692 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2693 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2694 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2696 // ----------------------------
2698 // ----------------------------
2699 MCU_LEDCS_STRUC LedCntl;
2700 USHORT Led1; // read from EEPROM 0x3c
2701 USHORT Led2; // EEPROM 0x3e
2702 USHORT Led3; // EEPROM 0x40
2703 UCHAR LedIndicatorStregth;
2704 UCHAR RssiSingalstrengthOffet;
2705 BOOLEAN bLedOnScanning;
2708 /*****************************************************************************************/
2709 /* 802.11 related parameters */
2710 /*****************************************************************************************/
2711 // outgoing BEACON frame buffer and corresponding TXD
2712 TXWI_STRUC BeaconTxWI;
2714 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2716 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2717 PSPOLL_FRAME PsPollFrame;
2718 HEADER_802_11 NullFrame;
2721 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2722 TX_CONTEXT NullContext;
2723 TX_CONTEXT PsPollContext;
2724 TX_CONTEXT RTSContext;
2729 //=========AP===========
2732 //=======STA===========
2733 #ifdef CONFIG_STA_SUPPORT
2734 /* Modified by Wu Xi-Kun 4/21/2006 */
2735 // -----------------------------------------------
2736 // STA specific configuration & operation status
2737 // used only when pAd->OpMode == OPMODE_STA
2738 // -----------------------------------------------
2739 STA_ADMIN_CONFIG StaCfg; // user desired settings
2740 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2741 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2742 NDIS_MEDIA_STATE PreMediaState;
2743 #endif // CONFIG_STA_SUPPORT //
2745 //=======Common===========
2746 // OP mode: either AP or STA
2747 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2749 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2752 // MAT related parameters
2754 // configuration: read from Registry & E2PROM
2755 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2756 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2757 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2759 // ------------------------------------------------------
2760 // common configuration to both OPMODE_STA and OPMODE_AP
2761 // ------------------------------------------------------
2762 COMMON_CONFIG CommonCfg;
2765 // AP needs those vaiables for site survey feature.
2766 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2767 BSS_TABLE ScanTab; // store the latest SCAN result
2769 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2770 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2771 NDIS_SPIN_LOCK MacTabLock;
2773 #ifdef DOT11_N_SUPPORT
2775 #endif // DOT11_N_SUPPORT //
2776 NDIS_SPIN_LOCK BATabLock;
2777 RALINK_TIMER_STRUCT RECBATimer;
2779 // encryption/decryption KEY tables
2780 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2782 // RX re-assembly buffer for fragmentation
2783 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2786 COUNTER_802_3 Counters8023; // 802.3 counters
2787 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2788 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2789 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2790 PRIVATE_STRUC PrivateInfo; // Private information & counters
2792 // flags, see fRTMP_ADAPTER_xxx flags
2793 ULONG Flags; // Represent current device status
2795 // current TX sequence #
2798 // Control disconnect / connect event generation
2799 //+++Didn't used anymore
2804 //+++Used only for Station
2805 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2808 ULONG ExtraInfo; // Extra information for displaying status
2809 ULONG SystemErrorBitmap; // b0: E2PROM version error
2811 //+++Didn't used anymore
2812 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2815 // ---------------------------
2817 // ---------------------------
2818 RT_802_11_EVENT_TABLE EventTab;
2823 /*****************************************************************************************/
2824 /* Statistic related parameters */
2825 /*****************************************************************************************/
2827 ULONG BulkOutDataOneSecCount;
2828 ULONG BulkInDataOneSecCount;
2829 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2830 ULONG watchDogRxCnt;
2831 ULONG watchDogRxOverFlowCnt;
2832 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2835 BOOLEAN bUpdateBcnCntDone;
2836 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2837 // ----------------------------
2839 // ----------------------------
2840 //ULONG DebugSetting[4];
2841 BOOLEAN bBanAllBaSetup;
2842 BOOLEAN bPromiscuous;
2844 // ----------------------------
2845 // rt2860c emulation-use Parameters
2846 // ----------------------------
2849 ULONG cfendaccu[30];
2850 ULONG bacontent[16];
2851 ULONG rxint[RX_RING_SIZE+1];
2854 BOOLEAN bForcePrintTX;
2855 BOOLEAN bForcePrintRX;
2856 BOOLEAN bDisablescanning; //defined in RT2870 USB
2857 BOOLEAN bStaFifoTest;
2858 BOOLEAN bProtectionTest;
2860 BOOLEAN bGenOneHCCA;
2861 BOOLEAN bBroadComHT;
2862 //+++Following add from RT2870 USB.
2864 ULONG BulkOutComplete;
2865 ULONG BulkOutCompleteOther;
2866 ULONG BulkOutCompleteCancel; // seems not use now?
2868 ULONG BulkInComplete;
2869 ULONG BulkInCompleteFail;
2872 struct wificonf WIFItestbed;
2874 #ifdef DOT11_N_SUPPORT
2875 struct reordering_mpdu_pool mpdu_blk_pool;
2876 #endif // DOT11_N_SUPPORT //
2878 ULONG OneSecondnonBEpackets; // record non BE packets per second
2880 #if WIRELESS_EXT >= 12
2881 struct iw_statistics iw_stats;
2884 struct net_device_stats stats;
2886 ULONG TbttTickCount;
2887 #ifdef PCI_MSI_SUPPORT
2889 #endif // PCI_MSI_SUPPORT //
2894 #define TIME_BASE (1000000/OS_HZ)
2895 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2896 UCHAR flg_be_adjust;
2897 ULONG be_adjust_last_time;
2899 #ifdef IKANOS_VX_1X0
2900 struct IKANOS_TX_INFO IkanosTxInfo;
2901 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2902 #endif // IKANOS_VX_1X0 //
2906 RtmpDiagStruct DiagStruct;
2907 #endif // DBG_DIAGNOSE //
2910 UINT8 PM_FlgSuspend;
2915 BOOLEAN bEEPROMFile;
2918 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2921 // Cisco IAPP format
2923 typedef struct _CISCO_IAPP_CONTENT_
2925 USHORT Length; //IAPP Length
2926 UCHAR MessageType; //IAPP type
2927 UCHAR FunctionCode; //IAPP function type
2928 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2929 UCHAR SourceMAC[MAC_ADDR_LEN];
2930 USHORT Tag; //Tag(element IE) - Adjacent AP report
2931 USHORT TagLength; //Length of element not including 4 byte header
2932 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2933 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2936 UCHAR Ssid[MAX_LEN_OF_SSID];
2937 USHORT Seconds; //Seconds that the client has been disassociated.
2938 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2940 #define DELAYINTMASK 0x0003fffb
2941 #define INTMASK 0x0003fffb
2942 #define IndMask 0x0003fffc
2943 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2944 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2945 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2946 #define TxCoherent 0x00020000 // tx coherent
2947 #define RxCoherent 0x00010000 // rx coherent
2948 #define McuCommand 0x00000200 // mcu
2949 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2950 #define TBTTInt 0x00000800 // TBTT interrupt
2951 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2952 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2953 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2956 typedef struct _RX_BLK_
2958 // RXD_STRUC RxD; // sample
2959 RT28XX_RXD_STRUC RxD;
2961 PHEADER_802_11 pHeader;
2962 PNDIS_PACKET pRxPacket;
2966 UCHAR UserPriority; // for calculate TKIP MIC using
2970 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2971 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2972 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2975 #define fRX_WDS 0x0001
2976 #define fRX_AMSDU 0x0002
2977 #define fRX_ARALINK 0x0004
2978 #define fRX_HTC 0x0008
2979 #define fRX_PAD 0x0010
2980 #define fRX_AMPDU 0x0020
2981 #define fRX_QOS 0x0040
2982 #define fRX_INFRA 0x0080
2983 #define fRX_EAP 0x0100
2984 #define fRX_MESH 0x0200
2985 #define fRX_APCLI 0x0400
2986 #define fRX_DLS 0x0800
2987 #define fRX_WPI 0x1000
2989 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2990 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2991 #define LENGTH_ARALINK_HEADER_FIELD 2
2993 #define TX_UNKOWN_FRAME 0x00
2994 #define TX_MCAST_FRAME 0x01
2995 #define TX_LEGACY_FRAME 0x02
2996 #define TX_AMPDU_FRAME 0x04
2997 #define TX_AMSDU_FRAME 0x08
2998 #define TX_RALINK_FRAME 0x10
2999 #define TX_FRAG_FRAME 0x20
3002 // Currently the sizeof(TX_BLK) is 148 bytes.
3003 typedef struct _TX_BLK_
3006 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3007 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3008 USHORT TotalFragNum; // Total frame fragments required in one batch
3009 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3011 QUEUE_HEADER TxPacketList;
3012 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3013 HTTRANSMIT_SETTING *pTransmit;
3015 // Following structure used for the characteristics of a specific packet.
3016 PNDIS_PACKET pPacket;
3017 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3018 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3019 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3020 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3021 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3022 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3023 UCHAR HdrPadLen; // recording Header Padding Length;
3024 UCHAR apidx; // The interface associated to this packet
3025 UCHAR Wcid; // The MAC entry associated to this packet
3026 UCHAR UserPriority; // priority class of packet
3027 UCHAR FrameGap; // what kind of IFS this packet use
3028 UCHAR MpduReqNum; // number of fragments of this frame
3029 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3030 UCHAR CipherAlg; // cipher alogrithm
3035 USHORT Flags; //See following definitions for detail.
3037 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3038 ULONG Priv; // Hardware specific value saved in here.
3042 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3043 #define fTX_bAckRequired 0x0002 // the packet need ack response
3044 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3045 #define fTX_bHTRate 0x0008 // allow to use HT rate
3046 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3047 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3048 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3049 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3050 #define fTX_bWMM 0x0080 // QOS Data
3052 #define fTX_bClearEAPFrame 0x0100
3055 #ifdef CONFIG_STA_SUPPORT
3056 #endif // CONFIG_STA_SUPPORT //
3060 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3063 (_pTxBlk->Flags |= _flag) \
3065 (_pTxBlk->Flags &= ~(_flag)) \
3068 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3069 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3070 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3076 //------------------------------------------------------------------------------------------
3080 #ifdef RT_BIG_ENDIAN
3081 static inline VOID WriteBackToDescriptor(
3084 IN BOOLEAN DoEncrypt,
3085 IN ULONG DescriptorType)
3089 p1 = ((UINT32 *)Dest);
3090 p2 = ((UINT32 *)Src);
3095 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3099 ========================================================================
3101 Routine Description:
3102 Endian conversion of Tx/Rx descriptor .
3105 pAd Pointer to our adapter
3106 pData Pointer to Tx/Rx descriptor
3107 DescriptorType Direction of the frame
3113 Call this function when read or update descriptor
3114 ========================================================================
3116 static inline VOID RTMPWIEndianChange(
3118 IN ULONG DescriptorType)
3123 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3125 if(DescriptorType == TYPE_TXWI)
3127 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3128 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3132 for(i=0; i < size/4 ; i++)
3133 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3138 ========================================================================
3140 Routine Description:
3141 Endian conversion of Tx/Rx descriptor .
3144 pAd Pointer to our adapter
3145 pData Pointer to Tx/Rx descriptor
3146 DescriptorType Direction of the frame
3152 Call this function when read or update descriptor
3153 ========================================================================
3157 static inline VOID RTMPDescriptorEndianChange(
3159 IN ULONG DescriptorType)
3161 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3165 ========================================================================
3167 Routine Description:
3168 Endian conversion of all kinds of 802.11 frames .
3171 pAd Pointer to our adapter
3172 pData Pointer to the 802.11 frame structure
3173 Dir Direction of the frame
3174 FromRxDoneInt Caller is from RxDone interrupt
3180 Call this function when read or update buffer data
3181 ========================================================================
3183 static inline VOID RTMPFrameEndianChange(
3184 IN PRTMP_ADAPTER pAd,
3187 IN BOOLEAN FromRxDoneInt)
3189 PHEADER_802_11 pFrame;
3192 // swab 16 bit fields - Frame Control field
3195 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3198 pFrame = (PHEADER_802_11) pData;
3199 pMacHdr = (PUCHAR) pFrame;
3201 // swab 16 bit fields - Duration/ID field
3202 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3204 // swab 16 bit fields - Sequence Control field
3205 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3207 if(pFrame->FC.Type == BTYPE_MGMT)
3209 switch(pFrame->FC.SubType)
3211 case SUBTYPE_ASSOC_REQ:
3212 case SUBTYPE_REASSOC_REQ:
3213 // swab 16 bit fields - CapabilityInfo field
3214 pMacHdr += sizeof(HEADER_802_11);
3215 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3217 // swab 16 bit fields - Listen Interval field
3219 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3222 case SUBTYPE_ASSOC_RSP:
3223 case SUBTYPE_REASSOC_RSP:
3224 // swab 16 bit fields - CapabilityInfo field
3225 pMacHdr += sizeof(HEADER_802_11);
3226 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3228 // swab 16 bit fields - Status Code field
3230 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3232 // swab 16 bit fields - AID field
3234 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3238 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3239 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3240 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3244 // swab 16 bit fields - Auth Alg No. field
3245 pMacHdr += sizeof(HEADER_802_11);
3246 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3248 // swab 16 bit fields - Auth Seq No. field
3250 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3252 // swab 16 bit fields - Status Code field
3254 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3258 case SUBTYPE_BEACON:
3259 case SUBTYPE_PROBE_RSP:
3260 // swab 16 bit fields - BeaconInterval field
3261 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3262 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3264 // swab 16 bit fields - CapabilityInfo field
3265 pMacHdr += sizeof(USHORT);
3266 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3269 case SUBTYPE_DEAUTH:
3270 case SUBTYPE_DISASSOC:
3271 // swab 16 bit fields - Reason code field
3272 pMacHdr += sizeof(HEADER_802_11);
3273 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3277 else if( pFrame->FC.Type == BTYPE_DATA )
3280 else if(pFrame->FC.Type == BTYPE_CNTL)
3282 switch(pFrame->FC.SubType)
3284 case SUBTYPE_BLOCK_ACK_REQ:
3286 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3287 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3288 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3291 case SUBTYPE_BLOCK_ACK:
3292 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3293 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3297 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3298 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3304 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3307 // swab 16 bit fields - Frame Control
3308 if(Dir == DIR_WRITE)
3310 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3313 #endif // RT_BIG_ENDIAN //
3316 static inline VOID ConvertMulticastIP2MAC(
3318 IN PUCHAR *ppMacAddr,
3319 IN UINT16 ProtoType)
3321 if (pIpAddr == NULL)
3324 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3330 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3331 *(*ppMacAddr) = 0x33;
3332 *(*ppMacAddr + 1) = 0x33;
3333 *(*ppMacAddr + 2) = pIpAddr[12];
3334 *(*ppMacAddr + 3) = pIpAddr[13];
3335 *(*ppMacAddr + 4) = pIpAddr[14];
3336 *(*ppMacAddr + 5) = pIpAddr[15];
3341 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3342 *(*ppMacAddr) = 0x01;
3343 *(*ppMacAddr + 1) = 0x00;
3344 *(*ppMacAddr + 2) = 0x5e;
3345 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3346 *(*ppMacAddr + 4) = pIpAddr[2];
3347 *(*ppMacAddr + 5) = pIpAddr[3];
3354 BOOLEAN RTMPCheckForHang(
3355 IN NDIS_HANDLE MiniportAdapterContext
3359 IN NDIS_HANDLE MiniportAdapterContext
3363 // Private routines in rtmp_init.c
3365 NDIS_STATUS RTMPAllocAdapterBlock(
3367 OUT PRTMP_ADAPTER *ppAdapter
3370 NDIS_STATUS RTMPAllocTxRxRingMemory(
3371 IN PRTMP_ADAPTER pAd
3374 NDIS_STATUS RTMPFindAdapter(
3375 IN PRTMP_ADAPTER pAd,
3376 IN NDIS_HANDLE WrapperConfigurationContext
3379 NDIS_STATUS RTMPReadParametersHook(
3380 IN PRTMP_ADAPTER pAd
3383 VOID RTMPFreeAdapter(
3384 IN PRTMP_ADAPTER pAd
3387 NDIS_STATUS NICReadRegParameters(
3388 IN PRTMP_ADAPTER pAd,
3389 IN NDIS_HANDLE WrapperConfigurationContext
3393 VOID NICInitRT30xxRFRegisters(
3394 IN PRTMP_ADAPTER pAd);
3397 VOID NICReadEEPROMParameters(
3398 IN PRTMP_ADAPTER pAd,
3399 IN PUCHAR mac_addr);
3401 VOID NICInitAsicFromEEPROM(
3402 IN PRTMP_ADAPTER pAd);
3404 VOID NICInitTxRxRingAndBacklogQueue(
3405 IN PRTMP_ADAPTER pAd);
3407 NDIS_STATUS NICInitializeAdapter(
3408 IN PRTMP_ADAPTER pAd,
3409 IN BOOLEAN bHardReset);
3411 NDIS_STATUS NICInitializeAsic(
3412 IN PRTMP_ADAPTER pAd,
3413 IN BOOLEAN bHardReset);
3416 IN PRTMP_ADAPTER pAd);
3418 VOID RTMPRingCleanUp(
3419 IN PRTMP_ADAPTER pAd,
3423 IN PRTMP_ADAPTER pAd);
3425 NDIS_STATUS DbgSendPacket(
3426 IN PRTMP_ADAPTER pAd,
3427 IN PNDIS_PACKET pPacket);
3430 IN PRTMP_ADAPTER pAd);
3432 VOID NICResetFromError(
3433 IN PRTMP_ADAPTER pAd);
3435 VOID NICEraseFirmware(
3436 IN PRTMP_ADAPTER pAd);
3438 NDIS_STATUS NICLoadFirmware(
3439 IN PRTMP_ADAPTER pAd);
3441 NDIS_STATUS NICLoadRateSwitchingParams(
3442 IN PRTMP_ADAPTER pAd);
3444 BOOLEAN NICCheckForHang(
3445 IN PRTMP_ADAPTER pAd);
3447 VOID NICUpdateFifoStaCounters(
3448 IN PRTMP_ADAPTER pAd);
3450 VOID NICUpdateRawCounters(
3451 IN PRTMP_ADAPTER pAd);
3453 ULONG RTMPNotAllZero(
3457 VOID RTMPZeroMemory(
3461 ULONG RTMPCompareMemory(
3466 VOID RTMPMoveMemory(
3479 VOID RTMPPatchMacBbpBug(
3480 IN PRTMP_ADAPTER pAd);
3482 VOID RTMPPatchCardBus(
3483 IN PRTMP_ADAPTER pAdapter);
3485 VOID RTMPPatchRalinkCardBus(
3486 IN PRTMP_ADAPTER pAdapter,
3489 ULONG RTMPReadCBConfig(
3495 VOID RTMPWriteCBConfig(
3503 IN PRTMP_ADAPTER pAd,
3504 IN PRALINK_TIMER_STRUCT pTimer,
3505 IN PVOID pTimerFunc,
3510 IN PRALINK_TIMER_STRUCT pTimer,
3515 IN PRALINK_TIMER_STRUCT pTimer,
3518 VOID RTMPCancelTimer(
3519 IN PRALINK_TIMER_STRUCT pTimer,
3520 OUT BOOLEAN *pCancelled);
3523 IN PRTMP_ADAPTER pAd,
3526 VOID RTMPSetSignalLED(
3527 IN PRTMP_ADAPTER pAd,
3528 IN NDIS_802_11_RSSI Dbm);
3530 VOID RTMPEnableRxTx(
3531 IN PRTMP_ADAPTER pAd);
3534 // prototype in action.c
3536 VOID ActionStateMachineInit(
3537 IN PRTMP_ADAPTER pAd,
3538 IN STATE_MACHINE *S,
3539 OUT STATE_MACHINE_FUNC Trans[]);
3541 VOID MlmeADDBAAction(
3542 IN PRTMP_ADAPTER pAd,
3543 IN MLME_QUEUE_ELEM *Elem);
3545 VOID MlmeDELBAAction(
3546 IN PRTMP_ADAPTER pAd,
3547 IN MLME_QUEUE_ELEM *Elem);
3550 IN PRTMP_ADAPTER pAd,
3551 IN MLME_QUEUE_ELEM *Elem);
3553 VOID MlmeInvalidAction(
3554 IN PRTMP_ADAPTER pAd,
3555 IN MLME_QUEUE_ELEM *Elem);
3558 IN PRTMP_ADAPTER pAd,
3559 IN MLME_QUEUE_ELEM *Elem);
3561 #ifdef DOT11_N_SUPPORT
3562 VOID PeerAddBAReqAction(
3563 IN PRTMP_ADAPTER pAd,
3564 IN MLME_QUEUE_ELEM *Elem);
3566 VOID PeerAddBARspAction(
3567 IN PRTMP_ADAPTER pAd,
3568 IN MLME_QUEUE_ELEM *Elem);
3570 VOID PeerDelBAAction(
3571 IN PRTMP_ADAPTER pAd,
3572 IN MLME_QUEUE_ELEM *Elem);
3575 IN PRTMP_ADAPTER pAd,
3576 IN MLME_QUEUE_ELEM *Elem);
3577 #endif // DOT11_N_SUPPORT //
3579 VOID SendPSMPAction(
3580 IN PRTMP_ADAPTER pAd,
3585 IN PRTMP_ADAPTER pAd,
3586 IN MLME_QUEUE_ELEM *Elem);
3588 VOID PeerPublicAction(
3589 IN PRTMP_ADAPTER pAd,
3590 IN MLME_QUEUE_ELEM *Elem);
3592 #ifdef CONFIG_STA_SUPPORT
3593 VOID StaPublicAction(
3594 IN PRTMP_ADAPTER pAd,
3595 IN UCHAR Bss2040Coexist);
3596 #endif // CONFIG_STA_SUPPORT //
3599 VOID PeerBSSTranAction(
3600 IN PRTMP_ADAPTER pAd,
3601 IN MLME_QUEUE_ELEM *Elem);
3603 #ifdef DOT11_N_SUPPORT
3605 IN PRTMP_ADAPTER pAd,
3606 IN MLME_QUEUE_ELEM *Elem);
3607 #endif // DOT11_N_SUPPORT //
3610 IN PRTMP_ADAPTER pAd,
3611 IN MLME_QUEUE_ELEM *Elem);
3613 #ifdef DOT11_N_SUPPORT
3614 VOID RECBATimerTimeout(
3615 IN PVOID SystemSpecific1,
3616 IN PVOID FunctionContext,
3617 IN PVOID SystemSpecific2,
3618 IN PVOID SystemSpecific3);
3620 VOID ORIBATimerTimeout(
3621 IN PRTMP_ADAPTER pAd);
3623 VOID SendRefreshBAR(
3624 IN PRTMP_ADAPTER pAd,
3625 IN MAC_TABLE_ENTRY *pEntry);
3626 #endif // DOT11_N_SUPPORT //
3629 IN PRTMP_ADAPTER pAd,
3630 IN OUT PHEADER_802_11 pHdr80211,
3636 IN PRTMP_ADAPTER pAd,
3637 IN OUT PFRAME_BAR pCntlBar,
3641 VOID InsertActField(
3642 IN PRTMP_ADAPTER pAd,
3643 OUT PUCHAR pFrameBuf,
3644 OUT PULONG pFrameLen,
3648 BOOLEAN QosBADataParse(
3649 IN PRTMP_ADAPTER pAd,
3651 IN PUCHAR p8023Header,
3655 IN UCHAR DataOffset,
3657 IN UINT CurRxIndex);
3659 #ifdef DOT11_N_SUPPORT
3660 BOOLEAN CntlEnqueueForRecv(
3661 IN PRTMP_ADAPTER pAd,
3664 IN PFRAME_BA_REQ pMsg);
3666 VOID BaAutoManSwitch(
3667 IN PRTMP_ADAPTER pAd);
3668 #endif // DOT11_N_SUPPORT //
3671 IN PRTMP_ADAPTER pAd,
3672 IN UCHAR BatRecIdx);
3675 // Private routines in rtmp_data.c
3677 BOOLEAN RTMPHandleRxDoneInterrupt(
3678 IN PRTMP_ADAPTER pAd);
3680 VOID RTMPHandleTxDoneInterrupt(
3681 IN PRTMP_ADAPTER pAd);
3683 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3684 IN PRTMP_ADAPTER pAd,
3685 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3687 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3688 IN PRTMP_ADAPTER pAd);
3690 VOID RTMPHandleTBTTInterrupt(
3691 IN PRTMP_ADAPTER pAd);
3693 VOID RTMPHandlePreTBTTInterrupt(
3694 IN PRTMP_ADAPTER pAd);
3696 void RTMPHandleTwakeupInterrupt(
3697 IN PRTMP_ADAPTER pAd);
3699 VOID RTMPHandleRxCoherentInterrupt(
3700 IN PRTMP_ADAPTER pAd);
3702 BOOLEAN TxFrameIsAggregatible(
3703 IN PRTMP_ADAPTER pAd,
3704 IN PUCHAR pPrevAddr1,
3705 IN PUCHAR p8023hdr);
3707 BOOLEAN PeerIsAggreOn(
3708 IN PRTMP_ADAPTER pAd,
3710 IN PMAC_TABLE_ENTRY pMacEntry);
3712 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3713 IN PNDIS_BUFFER pFirstBuffer,
3714 IN UCHAR DesiredOffset,
3718 NDIS_STATUS STASendPacket(
3719 IN PRTMP_ADAPTER pAd,
3720 IN PNDIS_PACKET pPacket);
3722 VOID STASendPackets(
3723 IN NDIS_HANDLE MiniportAdapterContext,
3724 IN PPNDIS_PACKET ppPacketArray,
3725 IN UINT NumberOfPackets);
3727 VOID RTMPDeQueuePacket(
3728 IN PRTMP_ADAPTER pAd,
3729 IN BOOLEAN bIntContext,
3731 IN UCHAR Max_Tx_Packets);
3733 NDIS_STATUS RTMPHardTransmit(
3734 IN PRTMP_ADAPTER pAd,
3735 IN PNDIS_PACKET pPacket,
3737 OUT PULONG pFreeTXDLeft);
3739 NDIS_STATUS STAHardTransmit(
3740 IN PRTMP_ADAPTER pAd,
3744 VOID STARxEAPOLFrameIndicate(
3745 IN PRTMP_ADAPTER pAd,
3746 IN MAC_TABLE_ENTRY *pEntry,
3748 IN UCHAR FromWhichBSSID);
3750 NDIS_STATUS RTMPFreeTXDRequest(
3751 IN PRTMP_ADAPTER pAd,
3753 IN UCHAR NumberRequired,
3754 IN PUCHAR FreeNumberIs);
3756 NDIS_STATUS MlmeHardTransmit(
3757 IN PRTMP_ADAPTER pAd,
3759 IN PNDIS_PACKET pPacket);
3761 NDIS_STATUS MlmeHardTransmitMgmtRing(
3762 IN PRTMP_ADAPTER pAd,
3764 IN PNDIS_PACKET pPacket);
3766 NDIS_STATUS MlmeHardTransmitTxRing(
3767 IN PRTMP_ADAPTER pAd,
3769 IN PNDIS_PACKET pPacket);
3771 USHORT RTMPCalcDuration(
3772 IN PRTMP_ADAPTER pAd,
3777 IN PRTMP_ADAPTER pAd,
3778 IN PTXWI_STRUC pTxWI,
3781 IN BOOLEAN InsTimestamp,
3784 IN BOOLEAN NSeq, // HW new a sequence.
3793 IN HTTRANSMIT_SETTING *pTransmit);
3796 VOID RTMPWriteTxWI_Data(
3797 IN PRTMP_ADAPTER pAd,
3798 IN OUT PTXWI_STRUC pTxWI,
3802 VOID RTMPWriteTxWI_Cache(
3803 IN PRTMP_ADAPTER pAd,
3804 IN OUT PTXWI_STRUC pTxWI,
3807 VOID RTMPWriteTxDescriptor(
3808 IN PRTMP_ADAPTER pAd,
3813 VOID RTMPSuspendMsduTransmission(
3814 IN PRTMP_ADAPTER pAd);
3816 VOID RTMPResumeMsduTransmission(
3817 IN PRTMP_ADAPTER pAd);
3819 NDIS_STATUS MiniportMMRequest(
3820 IN PRTMP_ADAPTER pAd,
3825 NDIS_STATUS MiniportDataMMRequest(
3826 IN PRTMP_ADAPTER pAd,
3831 VOID RTMPSendNullFrame(
3832 IN PRTMP_ADAPTER pAd,
3834 IN BOOLEAN bQosNull);
3836 VOID RTMPSendDisassociationFrame(
3837 IN PRTMP_ADAPTER pAd);
3839 VOID RTMPSendRTSFrame(
3840 IN PRTMP_ADAPTER pAd,
3842 IN unsigned int NextMpduSize,
3845 IN USHORT AckDuration,
3850 NDIS_STATUS RTMPApplyPacketFilter(
3851 IN PRTMP_ADAPTER pAd,
3852 IN PRT28XX_RXD_STRUC pRxD,
3853 IN PHEADER_802_11 pHeader);
3855 PQUEUE_HEADER RTMPCheckTxSwQueue(
3856 IN PRTMP_ADAPTER pAd,
3859 #ifdef CONFIG_STA_SUPPORT
3860 VOID RTMPReportMicError(
3861 IN PRTMP_ADAPTER pAd,
3862 IN PCIPHER_KEY pWpaKey);
3864 VOID WpaMicFailureReportFrame(
3865 IN PRTMP_ADAPTER pAd,
3866 IN MLME_QUEUE_ELEM *Elem);
3868 VOID WpaDisassocApAndBlockAssoc(
3869 IN PVOID SystemSpecific1,
3870 IN PVOID FunctionContext,
3871 IN PVOID SystemSpecific2,
3872 IN PVOID SystemSpecific3);
3873 #endif // CONFIG_STA_SUPPORT //
3875 NDIS_STATUS RTMPCloneNdisPacket(
3876 IN PRTMP_ADAPTER pAd,
3877 IN BOOLEAN pInsAMSDUHdr,
3878 IN PNDIS_PACKET pInPacket,
3879 OUT PNDIS_PACKET *ppOutPacket);
3881 NDIS_STATUS RTMPAllocateNdisPacket(
3882 IN PRTMP_ADAPTER pAd,
3883 IN PNDIS_PACKET *pPacket,
3889 VOID RTMPFreeNdisPacket(
3890 IN PRTMP_ADAPTER pAd,
3891 IN PNDIS_PACKET pPacket);
3893 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3894 IN PRTMP_ADAPTER pAd,
3897 BOOLEAN RTMPCheckDHCPFrame(
3898 IN PRTMP_ADAPTER pAd,
3899 IN PNDIS_PACKET pPacket);
3902 BOOLEAN RTMPCheckEtherType(
3903 IN PRTMP_ADAPTER pAd,
3904 IN PNDIS_PACKET pPacket);
3907 VOID RTMPCckBbpTuning(
3908 IN PRTMP_ADAPTER pAd,
3912 // Private routines in rtmp_wep.c
3914 VOID RTMPInitWepEngine(
3915 IN PRTMP_ADAPTER pAd,
3921 VOID RTMPEncryptData(
3922 IN PRTMP_ADAPTER pAd,
3927 BOOLEAN RTMPDecryptData(
3928 IN PRTMP_ADAPTER pAdapter,
3933 BOOLEAN RTMPSoftDecryptWEP(
3934 IN PRTMP_ADAPTER pAd,
3936 IN ULONG DataByteCnt,
3937 IN PCIPHER_KEY pGroupKey);
3940 IN PRTMP_ADAPTER pAd,
3944 IN PARCFOURCONTEXT Ctx,
3949 IN PARCFOURCONTEXT Ctx);
3951 VOID ARCFOUR_DECRYPT(
3952 IN PARCFOURCONTEXT Ctx,
3957 VOID ARCFOUR_ENCRYPT(
3958 IN PARCFOURCONTEXT Ctx,
3963 VOID WPAARCFOUR_ENCRYPT(
3964 IN PARCFOURCONTEXT Ctx,
3969 UINT RTMP_CALC_FCS32(
3978 // Asic/RF/BBP related functions
3980 VOID AsicAdjustTxPower(
3981 IN PRTMP_ADAPTER pAd);
3983 VOID AsicUpdateProtect(
3984 IN PRTMP_ADAPTER pAd,
3985 IN USHORT OperaionMode,
3987 IN BOOLEAN bDisableBGProtect,
3988 IN BOOLEAN bNonGFExist);
3990 VOID AsicSwitchChannel(
3991 IN PRTMP_ADAPTER pAd,
3995 VOID AsicLockChannel(
3996 IN PRTMP_ADAPTER pAd,
3999 VOID AsicAntennaSelect(
4000 IN PRTMP_ADAPTER pAd,
4003 VOID AsicAntennaSetting(
4004 IN PRTMP_ADAPTER pAd,
4005 IN ABGBAND_STATE BandState);
4007 VOID AsicRfTuningExec(
4008 IN PVOID SystemSpecific1,
4009 IN PVOID FunctionContext,
4010 IN PVOID SystemSpecific2,
4011 IN PVOID SystemSpecific3);
4013 #ifdef CONFIG_STA_SUPPORT
4014 VOID AsicSleepThenAutoWakeup(
4015 IN PRTMP_ADAPTER pAd,
4016 IN USHORT TbttNumToNextWakeUp);
4018 VOID AsicForceSleep(
4019 IN PRTMP_ADAPTER pAd);
4021 VOID AsicForceWakeup(
4022 IN PRTMP_ADAPTER pAd,
4023 IN BOOLEAN bFromTx);
4024 #endif // CONFIG_STA_SUPPORT //
4027 IN PRTMP_ADAPTER pAd,
4030 VOID AsicSetMcastWC(
4031 IN PRTMP_ADAPTER pAd);
4033 VOID AsicDelWcidTab(
4034 IN PRTMP_ADAPTER pAd,
4038 IN PRTMP_ADAPTER pAd);
4040 VOID AsicDisableRDG(
4041 IN PRTMP_ADAPTER pAd);
4043 VOID AsicDisableSync(
4044 IN PRTMP_ADAPTER pAd);
4046 VOID AsicEnableBssSync(
4047 IN PRTMP_ADAPTER pAd);
4049 VOID AsicEnableIbssSync(
4050 IN PRTMP_ADAPTER pAd);
4052 VOID AsicSetEdcaParm(
4053 IN PRTMP_ADAPTER pAd,
4054 IN PEDCA_PARM pEdcaParm);
4056 VOID AsicSetSlotTime(
4057 IN PRTMP_ADAPTER pAd,
4058 IN BOOLEAN bUseShortSlotTime);
4060 VOID AsicAddSharedKeyEntry(
4061 IN PRTMP_ADAPTER pAd,
4069 VOID AsicRemoveSharedKeyEntry(
4070 IN PRTMP_ADAPTER pAd,
4074 VOID AsicUpdateWCIDAttribute(
4075 IN PRTMP_ADAPTER pAd,
4079 IN BOOLEAN bUsePairewiseKeyTable);
4081 VOID AsicUpdateWCIDIVEIV(
4082 IN PRTMP_ADAPTER pAd,
4087 VOID AsicUpdateRxWCIDTable(
4088 IN PRTMP_ADAPTER pAd,
4092 VOID AsicAddKeyEntry(
4093 IN PRTMP_ADAPTER pAd,
4097 IN PCIPHER_KEY pCipherKey,
4098 IN BOOLEAN bUsePairewiseKeyTable,
4101 VOID AsicAddPairwiseKeyEntry(
4102 IN PRTMP_ADAPTER pAd,
4105 IN CIPHER_KEY *pCipherKey);
4107 VOID AsicRemovePairwiseKeyEntry(
4108 IN PRTMP_ADAPTER pAd,
4112 BOOLEAN AsicSendCommandToMcu(
4113 IN PRTMP_ADAPTER pAd,
4120 VOID MacAddrRandomBssid(
4121 IN PRTMP_ADAPTER pAd,
4124 VOID MgtMacHeaderInit(
4125 IN PRTMP_ADAPTER pAd,
4126 IN OUT PHEADER_802_11 pHdr80211,
4133 IN PRTMP_ADAPTER pAd);
4136 IN PRTMP_ADAPTER pAd);
4142 #ifdef DOT11_N_SUPPORT
4144 IN PRTMP_ADAPTER pAd,
4146 #endif // DOT11_N_SUPPORT //
4148 ULONG BssTableSearch(
4153 ULONG BssSsidTableSearch(
4160 ULONG BssTableSearchWithSSID(
4167 VOID BssTableDeleteEntry(
4168 IN OUT PBSS_TABLE pTab,
4172 #ifdef DOT11_N_SUPPORT
4173 VOID BATableDeleteORIEntry(
4174 IN OUT PRTMP_ADAPTER pAd,
4175 IN BA_ORI_ENTRY *pBAORIEntry);
4177 VOID BATableDeleteRECEntry(
4178 IN OUT PRTMP_ADAPTER pAd,
4179 IN BA_REC_ENTRY *pBARECEntry);
4181 VOID BATableTearORIEntry(
4182 IN OUT PRTMP_ADAPTER pAd,
4185 IN BOOLEAN bForceDelete,
4188 VOID BATableTearRECEntry(
4189 IN OUT PRTMP_ADAPTER pAd,
4193 #endif // DOT11_N_SUPPORT //
4196 IN PRTMP_ADAPTER pAd,
4197 OUT PBSS_ENTRY pBss,
4202 IN USHORT BeaconPeriod,
4205 IN USHORT CapabilityInfo,
4207 IN UCHAR SupRateLen,
4209 IN UCHAR ExtRateLen,
4210 IN HT_CAPABILITY_IE *pHtCapability,
4211 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4212 IN UCHAR HtCapabilityLen,
4213 IN UCHAR AddHtInfoLen,
4214 IN UCHAR NewExtChanOffset,
4217 IN LARGE_INTEGER TimeStamp,
4219 IN PEDCA_PARM pEdcaParm,
4220 IN PQOS_CAPABILITY_PARM pQosCapability,
4221 IN PQBSS_LOAD_PARM pQbssLoad,
4222 IN USHORT LengthVIE,
4223 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4225 ULONG BssTableSetEntry(
4226 IN PRTMP_ADAPTER pAd,
4227 OUT PBSS_TABLE pTab,
4232 IN USHORT BeaconPeriod,
4235 IN USHORT CapabilityInfo,
4237 IN UCHAR SupRateLen,
4239 IN UCHAR ExtRateLen,
4240 IN HT_CAPABILITY_IE *pHtCapability,
4241 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4242 IN UCHAR HtCapabilityLen,
4243 IN UCHAR AddHtInfoLen,
4244 IN UCHAR NewExtChanOffset,
4247 IN LARGE_INTEGER TimeStamp,
4249 IN PEDCA_PARM pEdcaParm,
4250 IN PQOS_CAPABILITY_PARM pQosCapability,
4251 IN PQBSS_LOAD_PARM pQbssLoad,
4252 IN USHORT LengthVIE,
4253 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4255 #ifdef DOT11_N_SUPPORT
4256 VOID BATableInsertEntry(
4257 IN PRTMP_ADAPTER pAd,
4259 IN USHORT TimeOutValue,
4260 IN USHORT StartingSeq,
4263 IN UCHAR OriginatorStatus,
4264 IN BOOLEAN IsRecipient);
4265 #endif // DOT11_N_SUPPORT //
4267 VOID BssTableSsidSort(
4268 IN PRTMP_ADAPTER pAd,
4269 OUT BSS_TABLE *OutTab,
4273 VOID BssTableSortByRssi(
4274 IN OUT BSS_TABLE *OutTab);
4276 VOID BssCipherParse(
4277 IN OUT PBSS_ENTRY pBss);
4279 NDIS_STATUS MlmeQueueInit(
4280 IN MLME_QUEUE *Queue);
4282 VOID MlmeQueueDestroy(
4283 IN MLME_QUEUE *Queue);
4285 BOOLEAN MlmeEnqueue(
4286 IN PRTMP_ADAPTER pAd,
4292 BOOLEAN MlmeEnqueueForRecv(
4293 IN PRTMP_ADAPTER pAd,
4295 IN ULONG TimeStampHigh,
4296 IN ULONG TimeStampLow,
4305 BOOLEAN MlmeDequeue(
4306 IN MLME_QUEUE *Queue,
4307 OUT MLME_QUEUE_ELEM **Elem);
4309 VOID MlmeRestartStateMachine(
4310 IN PRTMP_ADAPTER pAd);
4312 BOOLEAN MlmeQueueEmpty(
4313 IN MLME_QUEUE *Queue);
4315 BOOLEAN MlmeQueueFull(
4316 IN MLME_QUEUE *Queue);
4318 BOOLEAN MsgTypeSubst(
4319 IN PRTMP_ADAPTER pAd,
4320 IN PFRAME_802_11 pFrame,
4324 VOID StateMachineInit(
4325 IN STATE_MACHINE *Sm,
4326 IN STATE_MACHINE_FUNC Trans[],
4329 IN STATE_MACHINE_FUNC DefFunc,
4333 VOID StateMachineSetAction(
4334 IN STATE_MACHINE *S,
4337 IN STATE_MACHINE_FUNC F);
4339 VOID StateMachinePerformAction(
4340 IN PRTMP_ADAPTER pAd,
4341 IN STATE_MACHINE *S,
4342 IN MLME_QUEUE_ELEM *Elem);
4345 IN PRTMP_ADAPTER pAd,
4346 IN MLME_QUEUE_ELEM *Elem);
4348 VOID AssocStateMachineInit(
4349 IN PRTMP_ADAPTER pAd,
4350 IN STATE_MACHINE *Sm,
4351 OUT STATE_MACHINE_FUNC Trans[]);
4353 VOID ReassocTimeout(
4354 IN PVOID SystemSpecific1,
4355 IN PVOID FunctionContext,
4356 IN PVOID SystemSpecific2,
4357 IN PVOID SystemSpecific3);
4360 IN PVOID SystemSpecific1,
4361 IN PVOID FunctionContext,
4362 IN PVOID SystemSpecific2,
4363 IN PVOID SystemSpecific3);
4365 VOID DisassocTimeout(
4366 IN PVOID SystemSpecific1,
4367 IN PVOID FunctionContext,
4368 IN PVOID SystemSpecific2,
4369 IN PVOID SystemSpecific3);
4371 //----------------------------------------------
4372 VOID MlmeDisassocReqAction(
4373 IN PRTMP_ADAPTER pAd,
4374 IN MLME_QUEUE_ELEM *Elem);
4376 VOID MlmeAssocReqAction(
4377 IN PRTMP_ADAPTER pAd,
4378 IN MLME_QUEUE_ELEM *Elem);
4380 VOID MlmeReassocReqAction(
4381 IN PRTMP_ADAPTER pAd,
4382 IN MLME_QUEUE_ELEM *Elem);
4384 VOID MlmeDisassocReqAction(
4385 IN PRTMP_ADAPTER pAd,
4386 IN MLME_QUEUE_ELEM *Elem);
4388 VOID PeerAssocRspAction(
4389 IN PRTMP_ADAPTER pAd,
4390 IN MLME_QUEUE_ELEM *Elem);
4392 VOID PeerReassocRspAction(
4393 IN PRTMP_ADAPTER pAd,
4394 IN MLME_QUEUE_ELEM *Elem);
4396 VOID PeerDisassocAction(
4397 IN PRTMP_ADAPTER pAd,
4398 IN MLME_QUEUE_ELEM *Elem);
4400 VOID DisassocTimeoutAction(
4401 IN PRTMP_ADAPTER pAd,
4402 IN MLME_QUEUE_ELEM *Elem);
4404 VOID AssocTimeoutAction(
4405 IN PRTMP_ADAPTER pAd,
4406 IN MLME_QUEUE_ELEM *Elem);
4408 VOID ReassocTimeoutAction(
4409 IN PRTMP_ADAPTER pAd,
4410 IN MLME_QUEUE_ELEM *Elem);
4413 IN PRTMP_ADAPTER pAd,
4416 VOID SwitchBetweenWepAndCkip(
4417 IN PRTMP_ADAPTER pAd);
4419 VOID InvalidStateWhenAssoc(
4420 IN PRTMP_ADAPTER pAd,
4421 IN MLME_QUEUE_ELEM *Elem);
4423 VOID InvalidStateWhenReassoc(
4424 IN PRTMP_ADAPTER pAd,
4425 IN MLME_QUEUE_ELEM *Elem);
4427 VOID InvalidStateWhenDisassociate(
4428 IN PRTMP_ADAPTER pAd,
4429 IN MLME_QUEUE_ELEM *Elem);
4432 VOID MlmeCntlConfirm(
4433 IN PRTMP_ADAPTER pAd,
4439 IN PRTMP_ADAPTER pAd);
4441 VOID ComposeNullFrame(
4442 IN PRTMP_ADAPTER pAd);
4445 IN PRTMP_ADAPTER pAd,
4447 IN USHORT CapabilityInfo,
4450 IN UCHAR SupRateLen,
4452 IN UCHAR ExtRateLen,
4453 IN PEDCA_PARM pEdcaParm,
4454 IN HT_CAPABILITY_IE *pHtCapability,
4455 IN UCHAR HtCapabilityLen,
4456 IN ADD_HT_INFO_IE *pAddHtInfo);
4458 VOID AuthStateMachineInit(
4459 IN PRTMP_ADAPTER pAd,
4460 IN PSTATE_MACHINE sm,
4461 OUT STATE_MACHINE_FUNC Trans[]);
4464 IN PVOID SystemSpecific1,
4465 IN PVOID FunctionContext,
4466 IN PVOID SystemSpecific2,
4467 IN PVOID SystemSpecific3);
4469 VOID MlmeAuthReqAction(
4470 IN PRTMP_ADAPTER pAd,
4471 IN MLME_QUEUE_ELEM *Elem);
4473 VOID PeerAuthRspAtSeq2Action(
4474 IN PRTMP_ADAPTER pAd,
4475 IN MLME_QUEUE_ELEM *Elem);
4477 VOID PeerAuthRspAtSeq4Action(
4478 IN PRTMP_ADAPTER pAd,
4479 IN MLME_QUEUE_ELEM *Elem);
4481 VOID AuthTimeoutAction(
4482 IN PRTMP_ADAPTER pAd,
4483 IN MLME_QUEUE_ELEM *Elem);
4486 IN PRTMP_ADAPTER pAd,
4489 VOID MlmeDeauthReqAction(
4490 IN PRTMP_ADAPTER pAd,
4491 IN MLME_QUEUE_ELEM *Elem);
4493 VOID InvalidStateWhenAuth(
4494 IN PRTMP_ADAPTER pAd,
4495 IN MLME_QUEUE_ELEM *Elem);
4497 //=============================================
4499 VOID AuthRspStateMachineInit(
4500 IN PRTMP_ADAPTER pAd,
4501 IN PSTATE_MACHINE Sm,
4502 IN STATE_MACHINE_FUNC Trans[]);
4504 VOID PeerDeauthAction(
4505 IN PRTMP_ADAPTER pAd,
4506 IN MLME_QUEUE_ELEM *Elem);
4508 VOID PeerAuthSimpleRspGenAndSend(
4509 IN PRTMP_ADAPTER pAd,
4510 IN PHEADER_802_11 pHdr80211,
4517 // Private routines in dls.c
4520 //========================================
4522 VOID SyncStateMachineInit(
4523 IN PRTMP_ADAPTER pAd,
4524 IN STATE_MACHINE *Sm,
4525 OUT STATE_MACHINE_FUNC Trans[]);
4528 IN PVOID SystemSpecific1,
4529 IN PVOID FunctionContext,
4530 IN PVOID SystemSpecific2,
4531 IN PVOID SystemSpecific3);
4534 IN PVOID SystemSpecific1,
4535 IN PVOID FunctionContext,
4536 IN PVOID SystemSpecific2,
4537 IN PVOID SystemSpecific3);
4539 VOID MlmeScanReqAction(
4540 IN PRTMP_ADAPTER pAd,
4541 IN MLME_QUEUE_ELEM *Elem);
4543 VOID InvalidStateWhenScan(
4544 IN PRTMP_ADAPTER pAd,
4545 IN MLME_QUEUE_ELEM *Elem);
4547 VOID InvalidStateWhenJoin(
4548 IN PRTMP_ADAPTER pAd,
4549 IN MLME_QUEUE_ELEM *Elem);
4551 VOID InvalidStateWhenStart(
4552 IN PRTMP_ADAPTER pAd,
4553 IN MLME_QUEUE_ELEM *Elem);
4556 IN PRTMP_ADAPTER pAd,
4557 IN MLME_QUEUE_ELEM *Elem);
4559 VOID EnqueueProbeRequest(
4560 IN PRTMP_ADAPTER pAd);
4562 BOOLEAN ScanRunning(
4563 IN PRTMP_ADAPTER pAd);
4564 //=========================================
4567 IN PRTMP_ADAPTER pAd,
4568 IN STATE_MACHINE *S,
4569 OUT STATE_MACHINE_FUNC Trans[]);
4571 VOID MlmeCntlMachinePerformAction(
4572 IN PRTMP_ADAPTER pAd,
4573 IN STATE_MACHINE *S,
4574 IN MLME_QUEUE_ELEM *Elem);
4577 IN PRTMP_ADAPTER pAd,
4578 IN MLME_QUEUE_ELEM *Elem);
4580 VOID CntlOidScanProc(
4581 IN PRTMP_ADAPTER pAd,
4582 IN MLME_QUEUE_ELEM *Elem);
4584 VOID CntlOidSsidProc(
4585 IN PRTMP_ADAPTER pAd,
4586 IN MLME_QUEUE_ELEM * Elem);
4588 VOID CntlOidRTBssidProc(
4589 IN PRTMP_ADAPTER pAd,
4590 IN MLME_QUEUE_ELEM * Elem);
4592 VOID CntlMlmeRoamingProc(
4593 IN PRTMP_ADAPTER pAd,
4594 IN MLME_QUEUE_ELEM * Elem);
4596 VOID CntlWaitDisassocProc(
4597 IN PRTMP_ADAPTER pAd,
4598 IN MLME_QUEUE_ELEM *Elem);
4600 VOID CntlWaitJoinProc(
4601 IN PRTMP_ADAPTER pAd,
4602 IN MLME_QUEUE_ELEM *Elem);
4604 VOID CntlWaitReassocProc(
4605 IN PRTMP_ADAPTER pAd,
4606 IN MLME_QUEUE_ELEM *Elem);
4608 VOID CntlWaitStartProc(
4609 IN PRTMP_ADAPTER pAd,
4610 IN MLME_QUEUE_ELEM *Elem);
4612 VOID CntlWaitAuthProc(
4613 IN PRTMP_ADAPTER pAd,
4614 IN MLME_QUEUE_ELEM *Elem);
4616 VOID CntlWaitAuthProc2(
4617 IN PRTMP_ADAPTER pAd,
4618 IN MLME_QUEUE_ELEM *Elem);
4620 VOID CntlWaitAssocProc(
4621 IN PRTMP_ADAPTER pAd,
4622 IN MLME_QUEUE_ELEM *Elem);
4625 IN PRTMP_ADAPTER pAd,
4629 IN PRTMP_ADAPTER pAd,
4630 IN BOOLEAN IsReqFromAP);
4632 VOID IterateOnBssTab(
4633 IN PRTMP_ADAPTER pAd);
4635 VOID IterateOnBssTab2(
4636 IN PRTMP_ADAPTER pAd);;
4639 IN PRTMP_ADAPTER pAd,
4640 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4644 IN PRTMP_ADAPTER pAd,
4645 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4647 IN USHORT CapabilityInfo,
4649 IN USHORT ListenIntv);
4652 IN PRTMP_ADAPTER pAd,
4653 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4659 VOID DisassocParmFill(
4660 IN PRTMP_ADAPTER pAd,
4661 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4666 IN PRTMP_ADAPTER pAd,
4667 IN OUT MLME_START_REQ_STRUCT *StartReq,
4672 IN PRTMP_ADAPTER pAd,
4673 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4678 IN PRTMP_ADAPTER pAd);
4680 VOID EnqueueBeaconFrame(
4681 IN PRTMP_ADAPTER pAd);
4683 VOID MlmeJoinReqAction(
4684 IN PRTMP_ADAPTER pAd,
4685 IN MLME_QUEUE_ELEM *Elem);
4687 VOID MlmeScanReqAction(
4688 IN PRTMP_ADAPTER pAd,
4689 IN MLME_QUEUE_ELEM *Elem);
4691 VOID MlmeStartReqAction(
4692 IN PRTMP_ADAPTER pAd,
4693 IN MLME_QUEUE_ELEM *Elem);
4695 VOID ScanTimeoutAction(
4696 IN PRTMP_ADAPTER pAd,
4697 IN MLME_QUEUE_ELEM *Elem);
4699 VOID BeaconTimeoutAtJoinAction(
4700 IN PRTMP_ADAPTER pAd,
4701 IN MLME_QUEUE_ELEM *Elem);
4703 VOID PeerBeaconAtScanAction(
4704 IN PRTMP_ADAPTER pAd,
4705 IN MLME_QUEUE_ELEM *Elem);
4707 VOID PeerBeaconAtJoinAction(
4708 IN PRTMP_ADAPTER pAd,
4709 IN MLME_QUEUE_ELEM *Elem);
4712 IN PRTMP_ADAPTER pAd,
4713 IN MLME_QUEUE_ELEM *Elem);
4715 VOID PeerProbeReqAction(
4716 IN PRTMP_ADAPTER pAd,
4717 IN MLME_QUEUE_ELEM *Elem);
4719 VOID ScanNextChannel(
4720 IN PRTMP_ADAPTER pAd);
4722 ULONG MakeIbssBeacon(
4723 IN PRTMP_ADAPTER pAd);
4725 VOID CCXAdjacentAPReport(
4726 IN PRTMP_ADAPTER pAd);
4728 BOOLEAN MlmeScanReqSanity(
4729 IN PRTMP_ADAPTER pAd,
4735 OUT UCHAR *ScanType);
4737 BOOLEAN PeerBeaconAndProbeRspSanity(
4738 IN PRTMP_ADAPTER pAd,
4741 IN UCHAR MsgChannel,
4745 OUT UCHAR *pSsidLen,
4746 OUT UCHAR *pBssType,
4747 OUT USHORT *pBeaconPeriod,
4748 OUT UCHAR *pChannel,
4749 OUT UCHAR *pNewChannel,
4750 OUT LARGE_INTEGER *pTimestamp,
4751 OUT CF_PARM *pCfParm,
4752 OUT USHORT *pAtimWin,
4753 OUT USHORT *pCapabilityInfo,
4755 OUT UCHAR *pDtimCount,
4756 OUT UCHAR *pDtimPeriod,
4757 OUT UCHAR *pBcastFlag,
4758 OUT UCHAR *pMessageToMe,
4759 OUT UCHAR SupRate[],
4760 OUT UCHAR *pSupRateLen,
4761 OUT UCHAR ExtRate[],
4762 OUT UCHAR *pExtRateLen,
4763 OUT UCHAR *pCkipFlag,
4764 OUT UCHAR *pAironetCellPowerLimit,
4765 OUT PEDCA_PARM pEdcaParm,
4766 OUT PQBSS_LOAD_PARM pQbssLoad,
4767 OUT PQOS_CAPABILITY_PARM pQosCapability,
4768 OUT ULONG *pRalinkIe,
4769 OUT UCHAR *pHtCapabilityLen,
4770 #ifdef CONFIG_STA_SUPPORT
4771 OUT UCHAR *pPreNHtCapabilityLen,
4772 #endif // CONFIG_STA_SUPPORT //
4773 OUT HT_CAPABILITY_IE *pHtCapability,
4774 OUT UCHAR *AddHtInfoLen,
4775 OUT ADD_HT_INFO_IE *AddHtInfo,
4776 OUT UCHAR *NewExtChannel,
4777 OUT USHORT *LengthVIE,
4778 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4780 BOOLEAN PeerAddBAReqActionSanity(
4781 IN PRTMP_ADAPTER pAd,
4786 BOOLEAN PeerAddBARspActionSanity(
4787 IN PRTMP_ADAPTER pAd,
4791 BOOLEAN PeerDelBAActionSanity(
4792 IN PRTMP_ADAPTER pAd,
4797 BOOLEAN MlmeAssocReqSanity(
4798 IN PRTMP_ADAPTER pAd,
4802 OUT USHORT *CapabilityInfo,
4804 OUT USHORT *ListenIntv);
4806 BOOLEAN MlmeAuthReqSanity(
4807 IN PRTMP_ADAPTER pAd,
4814 BOOLEAN MlmeStartReqSanity(
4815 IN PRTMP_ADAPTER pAd,
4819 OUT UCHAR *Ssidlen);
4821 BOOLEAN PeerAuthSanity(
4822 IN PRTMP_ADAPTER pAd,
4829 OUT CHAR ChlgText[]);
4831 BOOLEAN PeerAssocRspSanity(
4832 IN PRTMP_ADAPTER pAd,
4836 OUT USHORT *pCapabilityInfo,
4837 OUT USHORT *pStatus,
4839 OUT UCHAR SupRate[],
4840 OUT UCHAR *pSupRateLen,
4841 OUT UCHAR ExtRate[],
4842 OUT UCHAR *pExtRateLen,
4843 OUT HT_CAPABILITY_IE *pHtCapability,
4844 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4845 OUT UCHAR *pHtCapabilityLen,
4846 OUT UCHAR *pAddHtInfoLen,
4847 OUT UCHAR *pNewExtChannelOffset,
4848 OUT PEDCA_PARM pEdcaParm,
4849 OUT UCHAR *pCkipFlag);
4851 BOOLEAN PeerDisassocSanity(
4852 IN PRTMP_ADAPTER pAd,
4856 OUT USHORT *Reason);
4858 BOOLEAN PeerWpaMessageSanity(
4859 IN PRTMP_ADAPTER pAd,
4860 IN PEAPOL_PACKET pMsg,
4863 IN MAC_TABLE_ENTRY *pEntry);
4865 BOOLEAN PeerDeauthSanity(
4866 IN PRTMP_ADAPTER pAd,
4870 OUT USHORT *Reason);
4872 BOOLEAN PeerProbeReqSanity(
4873 IN PRTMP_ADAPTER pAd,
4878 OUT UCHAR *pSsidLen);
4884 OUT UCHAR *BcastFlag,
4885 OUT UCHAR *DtimCount,
4886 OUT UCHAR *DtimPeriod,
4887 OUT UCHAR *MessageToMe);
4889 UCHAR ChannelSanity(
4890 IN PRTMP_ADAPTER pAd,
4893 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4894 IN PBSS_ENTRY pBss);
4896 BOOLEAN MlmeDelBAReqSanity(
4897 IN PRTMP_ADAPTER pAd,
4901 BOOLEAN MlmeAddBAReqSanity(
4902 IN PRTMP_ADAPTER pAd,
4907 ULONG MakeOutgoingFrame(
4909 OUT ULONG *Length, ...);
4912 IN PRTMP_ADAPTER pAd,
4916 IN PRTMP_ADAPTER pAd);
4918 VOID AsicUpdateAutoFallBackTable(
4919 IN PRTMP_ADAPTER pAd,
4922 VOID MlmePeriodicExec(
4923 IN PVOID SystemSpecific1,
4924 IN PVOID FunctionContext,
4925 IN PVOID SystemSpecific2,
4926 IN PVOID SystemSpecific3);
4929 IN PVOID SystemSpecific1,
4930 IN PVOID FunctionContext,
4931 IN PVOID SystemSpecific2,
4932 IN PVOID SystemSpecific3);
4935 IN PVOID SystemSpecific1,
4936 IN PVOID FunctionContext,
4937 IN PVOID SystemSpecific2,
4938 IN PVOID SystemSpecific3);
4940 VOID STAMlmePeriodicExec(
4944 IN PRTMP_ADAPTER pAd);
4946 VOID MlmeAutoReconnectLastSSID(
4947 IN PRTMP_ADAPTER pAd);
4949 BOOLEAN MlmeValidateSSID(
4953 VOID MlmeCheckForRoaming(
4954 IN PRTMP_ADAPTER pAd,
4957 VOID MlmeCheckForFastRoaming(
4958 IN PRTMP_ADAPTER pAd,
4961 VOID MlmeDynamicTxRateSwitching(
4962 IN PRTMP_ADAPTER pAd);
4965 IN PRTMP_ADAPTER pAd,
4966 IN PMAC_TABLE_ENTRY pEntry,
4967 IN PRTMP_TX_RATE_SWITCH pTxRate);
4969 VOID MlmeSelectTxRateTable(
4970 IN PRTMP_ADAPTER pAd,
4971 IN PMAC_TABLE_ENTRY pEntry,
4973 IN PUCHAR pTableSize,
4974 IN PUCHAR pInitTxRateIdx);
4976 VOID MlmeCalculateChannelQuality(
4977 IN PRTMP_ADAPTER pAd,
4980 VOID MlmeCheckPsmChange(
4981 IN PRTMP_ADAPTER pAd,
4985 IN PRTMP_ADAPTER pAd,
4988 VOID MlmeSetTxPreamble(
4989 IN PRTMP_ADAPTER pAd,
4990 IN USHORT TxPreamble);
4992 VOID UpdateBasicRateBitmap(
4993 IN PRTMP_ADAPTER pAd);
4995 VOID MlmeUpdateTxRates(
4996 IN PRTMP_ADAPTER pAd,
5000 #ifdef DOT11_N_SUPPORT
5001 VOID MlmeUpdateHtTxRates(
5002 IN PRTMP_ADAPTER pAd,
5004 #endif // DOT11_N_SUPPORT //
5006 VOID RTMPCheckRates(
5007 IN PRTMP_ADAPTER pAd,
5008 IN OUT UCHAR SupRate[],
5009 IN OUT UCHAR *SupRateLen);
5011 #ifdef CONFIG_STA_SUPPORT
5012 BOOLEAN RTMPCheckChannel(
5013 IN PRTMP_ADAPTER pAd,
5014 IN UCHAR CentralChannel,
5016 #endif // CONFIG_STA_SUPPORT //
5018 BOOLEAN RTMPCheckHt(
5019 IN PRTMP_ADAPTER pAd,
5021 IN OUT HT_CAPABILITY_IE *pHtCapability,
5022 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5024 VOID StaQuickResponeForRateUpExec(
5025 IN PVOID SystemSpecific1,
5026 IN PVOID FunctionContext,
5027 IN PVOID SystemSpecific2,
5028 IN PVOID SystemSpecific3);
5030 VOID AsicBbpTuning1(
5031 IN PRTMP_ADAPTER pAd);
5033 VOID AsicBbpTuning2(
5034 IN PRTMP_ADAPTER pAd);
5036 VOID RTMPUpdateMlmeRate(
5037 IN PRTMP_ADAPTER pAd);
5040 IN PRTMP_ADAPTER pAd,
5046 IN PRTMP_ADAPTER pAd,
5049 VOID AsicEvaluateRxAnt(
5050 IN PRTMP_ADAPTER pAd);
5052 VOID AsicRxAntEvalTimeout(
5053 IN PVOID SystemSpecific1,
5054 IN PVOID FunctionContext,
5055 IN PVOID SystemSpecific2,
5056 IN PVOID SystemSpecific3);
5058 VOID APSDPeriodicExec(
5059 IN PVOID SystemSpecific1,
5060 IN PVOID FunctionContext,
5061 IN PVOID SystemSpecific2,
5062 IN PVOID SystemSpecific3);
5064 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5065 IN PRTMP_ADAPTER pAd,
5066 IN PMAC_TABLE_ENTRY pEntry);
5068 UCHAR RTMPStaFixedTxMode(
5069 IN PRTMP_ADAPTER pAd,
5070 IN PMAC_TABLE_ENTRY pEntry);
5072 VOID RTMPUpdateLegacyTxSetting(
5073 UCHAR fixed_tx_mode,
5074 PMAC_TABLE_ENTRY pEntry);
5076 BOOLEAN RTMPAutoRateSwitchCheck(
5077 IN PRTMP_ADAPTER pAd);
5079 NDIS_STATUS MlmeInit(
5080 IN PRTMP_ADAPTER pAd);
5083 IN PRTMP_ADAPTER pAd);
5086 IN PRTMP_ADAPTER pAd);
5088 VOID MlmeResetRalinkCounters(
5089 IN PRTMP_ADAPTER pAd);
5091 VOID BuildChannelList(
5092 IN PRTMP_ADAPTER pAd);
5095 IN PRTMP_ADAPTER pAd);
5098 IN PRTMP_ADAPTER pAd,
5101 VOID ChangeToCellPowerLimit(
5102 IN PRTMP_ADAPTER pAd,
5103 IN UCHAR AironetCellPowerLimit);
5106 IN PRTMP_ADAPTER pAd,
5110 IN PRTMP_ADAPTER pAd,
5114 IN PRTMP_ADAPTER pAd);
5117 IN PRTMP_ADAPTER pAd,
5122 IN PRTMP_ADAPTER pAd);
5125 IN PRTMP_ADAPTER pAd);
5128 IN PRTMP_ADAPTER pAd);
5130 USHORT RTMP_EEPROM_READ16(
5131 IN PRTMP_ADAPTER pAd,
5134 VOID RTMP_EEPROM_WRITE16(
5135 IN PRTMP_ADAPTER pAd,
5140 // Prototypes of function definition in rtmp_tkip.c
5142 VOID RTMPInitTkipEngine(
5143 IN PRTMP_ADAPTER pAd,
5152 VOID RTMPInitMICEngine(
5153 IN PRTMP_ADAPTER pAd,
5157 IN UCHAR UserPriority,
5160 BOOLEAN RTMPTkipCompareMICValue(
5161 IN PRTMP_ADAPTER pAd,
5166 IN UCHAR UserPriority,
5169 VOID RTMPCalculateMICValue(
5170 IN PRTMP_ADAPTER pAd,
5171 IN PNDIS_PACKET pPacket,
5173 IN PCIPHER_KEY pKey,
5176 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5177 IN PRTMP_ADAPTER pAd,
5185 VOID RTMPTkipAppendByte(
5186 IN PTKIP_KEY_INFO pTkip,
5189 VOID RTMPTkipAppend(
5190 IN PTKIP_KEY_INFO pTkip,
5194 VOID RTMPTkipGetMIC(
5195 IN PTKIP_KEY_INFO pTkip);
5197 BOOLEAN RTMPSoftDecryptTKIP(
5198 IN PRTMP_ADAPTER pAd,
5200 IN ULONG DataByteCnt,
5201 IN UCHAR UserPriority,
5202 IN PCIPHER_KEY pWpaKey);
5204 BOOLEAN RTMPSoftDecryptAES(
5205 IN PRTMP_ADAPTER pAd,
5207 IN ULONG DataByteCnt,
5208 IN PCIPHER_KEY pWpaKey);
5211 // Prototypes of function definition in cmm_info.c
5213 NDIS_STATUS RTMPWPARemoveKeyProc(
5214 IN PRTMP_ADAPTER pAd,
5217 VOID RTMPWPARemoveAllKeys(
5218 IN PRTMP_ADAPTER pAd);
5220 BOOLEAN RTMPCheckStrPrintAble(
5224 VOID RTMPSetPhyMode(
5225 IN PRTMP_ADAPTER pAd,
5228 VOID RTMPUpdateHTIE(
5229 IN RT_HT_CAPABILITY *pRtHt,
5231 OUT HT_CAPABILITY_IE *pHtCapability,
5232 OUT ADD_HT_INFO_IE *pAddHtInfo);
5234 VOID RTMPAddWcidAttributeEntry(
5235 IN PRTMP_ADAPTER pAd,
5239 IN MAC_TABLE_ENTRY *pEntry);
5241 CHAR *GetEncryptType(
5247 VOID RTMPIoctlGetSiteSurvey(
5248 IN PRTMP_ADAPTER pAdapter,
5249 IN struct iwreq *wrq);
5251 VOID RTMPIoctlGetMacTable(
5252 IN PRTMP_ADAPTER pAd,
5253 IN struct iwreq *wrq);
5255 VOID RTMPIndicateWPA2Status(
5256 IN PRTMP_ADAPTER pAdapter);
5258 VOID RTMPOPModeSwitching(
5259 IN PRTMP_ADAPTER pAd);
5261 #ifdef CONFIG_STA_SUPPORT
5262 VOID RTMPAddBSSIDCipher(
5263 IN PRTMP_ADAPTER pAd,
5265 IN PNDIS_802_11_KEY pKey,
5266 IN UCHAR CipherAlg);
5267 #endif // CONFIG_STA_SUPPORT //
5269 #ifdef DOT11_N_SUPPORT
5271 IN PRTMP_ADAPTER pAd,
5272 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5274 VOID RTMPSetIndividualHT(
5275 IN PRTMP_ADAPTER pAd,
5277 #endif // DOT11_N_SUPPORT //
5279 VOID RTMPSendWirelessEvent(
5280 IN PRTMP_ADAPTER pAd,
5281 IN USHORT Event_flag,
5286 VOID NICUpdateCntlCounters(
5287 IN PRTMP_ADAPTER pAd,
5288 IN PHEADER_802_11 pHeader,
5290 IN PRXWI_STRUC pRxWI);
5292 // prototype in wpa.c
5294 BOOLEAN WpaMsgTypeSubst(
5298 VOID WpaPskStateMachineInit(
5299 IN PRTMP_ADAPTER pAd,
5300 IN STATE_MACHINE *S,
5301 OUT STATE_MACHINE_FUNC Trans[]);
5303 VOID WpaEAPOLKeyAction(
5304 IN PRTMP_ADAPTER pAd,
5305 IN MLME_QUEUE_ELEM *Elem);
5307 VOID WpaPairMsg1Action(
5308 IN PRTMP_ADAPTER pAd,
5309 IN MLME_QUEUE_ELEM *Elem);
5311 VOID WpaPairMsg3Action(
5312 IN PRTMP_ADAPTER pAd,
5313 IN MLME_QUEUE_ELEM *Elem);
5315 VOID WpaGroupMsg1Action(
5316 IN PRTMP_ADAPTER pAd,
5317 IN MLME_QUEUE_ELEM *Elem);
5319 VOID WpaMacHeaderInit(
5320 IN PRTMP_ADAPTER pAd,
5321 IN OUT PHEADER_802_11 pHdr80211,
5325 VOID Wpa2PairMsg1Action(
5326 IN PRTMP_ADAPTER pAd,
5327 IN MLME_QUEUE_ELEM *Elem);
5329 VOID Wpa2PairMsg3Action(
5330 IN PRTMP_ADAPTER pAd,
5331 IN MLME_QUEUE_ELEM *Elem);
5333 BOOLEAN ParseKeyData(
5334 IN PRTMP_ADAPTER pAd,
5336 IN UCHAR KeyDataLen,
5337 IN UCHAR bPairewise);
5339 VOID RTMPToWirelessSta(
5340 IN PRTMP_ADAPTER pAd,
5341 IN PUCHAR pHeader802_3,
5345 IN BOOLEAN is4wayFrame);
5373 IN PRTMP_ADAPTER pAd,
5383 IN PRTMP_ADAPTER pAd,
5388 // prototype in aironet.c
5390 VOID AironetStateMachineInit(
5391 IN PRTMP_ADAPTER pAd,
5392 IN STATE_MACHINE *S,
5393 OUT STATE_MACHINE_FUNC Trans[]);
5395 VOID AironetMsgAction(
5396 IN PRTMP_ADAPTER pAd,
5397 IN MLME_QUEUE_ELEM *Elem);
5399 VOID AironetRequestAction(
5400 IN PRTMP_ADAPTER pAd,
5401 IN MLME_QUEUE_ELEM *Elem);
5403 VOID ChannelLoadRequestAction(
5404 IN PRTMP_ADAPTER pAd,
5407 VOID NoiseHistRequestAction(
5408 IN PRTMP_ADAPTER pAd,
5411 VOID BeaconRequestAction(
5412 IN PRTMP_ADAPTER pAd,
5415 VOID AironetReportAction(
5416 IN PRTMP_ADAPTER pAd,
5417 IN MLME_QUEUE_ELEM *Elem);
5419 VOID ChannelLoadReportAction(
5420 IN PRTMP_ADAPTER pAd,
5423 VOID NoiseHistReportAction(
5424 IN PRTMP_ADAPTER pAd,
5427 VOID AironetFinalReportAction(
5428 IN PRTMP_ADAPTER pAd);
5430 VOID BeaconReportAction(
5431 IN PRTMP_ADAPTER pAd,
5434 VOID AironetAddBeaconReport(
5435 IN PRTMP_ADAPTER pAd,
5437 IN PMLME_QUEUE_ELEM pElem);
5439 VOID AironetCreateBeaconReportFromBssTable(
5440 IN PRTMP_ADAPTER pAd);
5442 VOID DBGPRINT_TX_RING(
5443 IN PRTMP_ADAPTER pAd,
5446 VOID DBGPRINT_RX_RING(
5447 IN PRTMP_ADAPTER pAd);
5450 IN PRTMP_ADAPTER pAd,
5452 IN UCHAR RssiNumber);
5454 VOID APAsicEvaluateRxAnt(
5455 IN PRTMP_ADAPTER pAd);
5458 VOID APAsicRxAntEvalTimeout(
5459 IN PRTMP_ADAPTER pAd);
5462 // function prototype in cmm_wpa.c
5464 BOOLEAN RTMPCheckWPAframe(
5465 IN PRTMP_ADAPTER pAd,
5466 IN PMAC_TABLE_ENTRY pEntry,
5468 IN ULONG DataByteCount,
5469 IN UCHAR FromWhichBSSID);
5471 VOID AES_GTK_KEY_UNWRAP(
5473 OUT UCHAR *plaintext,
5475 IN UCHAR *ciphertext);
5477 BOOLEAN RTMPCheckRSNIE(
5478 IN PRTMP_ADAPTER pAd,
5481 IN MAC_TABLE_ENTRY *pEntry,
5484 BOOLEAN RTMPParseEapolKeyData(
5485 IN PRTMP_ADAPTER pAd,
5487 IN UCHAR KeyDataLen,
5488 IN UCHAR GroupKeyIndex,
5491 IN MAC_TABLE_ENTRY *pEntry);
5493 VOID ConstructEapolMsg(
5494 IN PRTMP_ADAPTER pAd,
5495 IN UCHAR PeerAuthMode,
5496 IN UCHAR PeerWepStatus,
5497 IN UCHAR MyGroupKeyWepStatus,
5499 IN UCHAR DefaultKeyIdx,
5500 IN UCHAR *ReplayCounter,
5507 OUT PEAPOL_PACKET pMsg);
5510 IN PRTMP_ADAPTER pAd,
5511 IN UCHAR PeerWepStatus,
5513 OUT PEAPOL_PACKET pMsg);
5515 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5516 IN PRTMP_ADAPTER pAd,
5518 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5519 IN PCIPHER_KEY pShard_key);
5521 VOID ConstructEapolKeyData(
5522 IN PRTMP_ADAPTER pAd,
5523 IN UCHAR PeerAuthMode,
5524 IN UCHAR PeerWepStatus,
5525 IN UCHAR GroupKeyWepStatus,
5527 IN UCHAR DefaultKeyIdx,
5528 IN BOOLEAN bWPA2Capable,
5533 OUT PEAPOL_PACKET pMsg);
5536 IN PRTMP_ADAPTER pAd,
5542 // function prototype in ap_wpa.c
5545 BOOLEAN APWpaMsgTypeSubst(
5549 MAC_TABLE_ENTRY *PACInquiry(
5550 IN PRTMP_ADAPTER pAd,
5553 BOOLEAN RTMPCheckMcast(
5554 IN PRTMP_ADAPTER pAd,
5555 IN PEID_STRUCT eid_ptr,
5556 IN MAC_TABLE_ENTRY *pEntry);
5558 BOOLEAN RTMPCheckUcast(
5559 IN PRTMP_ADAPTER pAd,
5560 IN PEID_STRUCT eid_ptr,
5561 IN MAC_TABLE_ENTRY *pEntry);
5563 BOOLEAN RTMPCheckAUTH(
5564 IN PRTMP_ADAPTER pAd,
5565 IN PEID_STRUCT eid_ptr,
5566 IN MAC_TABLE_ENTRY *pEntry);
5568 VOID WPAStart4WayHS(
5569 IN PRTMP_ADAPTER pAd,
5570 IN MAC_TABLE_ENTRY *pEntry,
5571 IN ULONG TimeInterval);
5573 VOID WPAStart2WayGroupHS(
5574 IN PRTMP_ADAPTER pAd,
5575 IN MAC_TABLE_ENTRY *pEntry);
5577 VOID APWpaEAPPacketAction(
5578 IN PRTMP_ADAPTER pAd,
5579 IN MLME_QUEUE_ELEM *Elem);
5581 VOID APWpaEAPOLStartAction(
5582 IN PRTMP_ADAPTER pAd,
5583 IN MLME_QUEUE_ELEM *Elem);
5585 VOID APWpaEAPOLLogoffAction(
5586 IN PRTMP_ADAPTER pAd,
5587 IN MLME_QUEUE_ELEM *Elem);
5589 VOID APWpaEAPOLKeyAction(
5590 IN PRTMP_ADAPTER pAd,
5591 IN MLME_QUEUE_ELEM *Elem);
5593 VOID APWpaEAPOLASFAlertAction(
5594 IN PRTMP_ADAPTER pAd,
5595 IN MLME_QUEUE_ELEM *Elem);
5597 VOID HandleCounterMeasure(
5598 IN PRTMP_ADAPTER pAd,
5599 IN MAC_TABLE_ENTRY *pEntry);
5601 VOID PeerPairMsg2Action(
5602 IN PRTMP_ADAPTER pAd,
5603 IN MAC_TABLE_ENTRY *pEntry,
5604 IN MLME_QUEUE_ELEM *Elem);
5606 VOID PeerPairMsg4Action(
5607 IN PRTMP_ADAPTER pAd,
5608 IN MAC_TABLE_ENTRY *pEntry,
5609 IN MLME_QUEUE_ELEM *Elem);
5612 IN PVOID SystemSpecific1,
5613 IN PVOID FunctionContext,
5614 IN PVOID SystemSpecific2,
5615 IN PVOID SystemSpecific3);
5618 IN PVOID SystemSpecific1,
5619 IN PVOID FunctionContext,
5620 IN PVOID SystemSpecific2,
5621 IN PVOID SystemSpecific3);
5623 VOID EnqueueStartForPSKExec(
5624 IN PVOID SystemSpecific1,
5625 IN PVOID FunctionContext,
5626 IN PVOID SystemSpecific2,
5627 IN PVOID SystemSpecific3);
5629 VOID RTMPHandleSTAKey(
5630 IN PRTMP_ADAPTER pAdapter,
5631 IN MAC_TABLE_ENTRY *pEntry,
5632 IN MLME_QUEUE_ELEM *Elem);
5634 VOID PeerGroupMsg2Action(
5635 IN PRTMP_ADAPTER pAd,
5636 IN PMAC_TABLE_ENTRY pEntry,
5640 VOID PairDisAssocAction(
5641 IN PRTMP_ADAPTER pAd,
5642 IN PMAC_TABLE_ENTRY pEntry,
5645 VOID MlmeDeAuthAction(
5646 IN PRTMP_ADAPTER pAd,
5647 IN PMAC_TABLE_ENTRY pEntry,
5650 VOID GREKEYPeriodicExec(
5651 IN PVOID SystemSpecific1,
5652 IN PVOID FunctionContext,
5653 IN PVOID SystemSpecific2,
5654 IN PVOID SystemSpecific3);
5676 IN PRTMP_ADAPTER pAd,
5679 VOID AES_GTK_KEY_WRAP(
5681 IN UCHAR *plaintext,
5683 OUT UCHAR *ciphertext);
5686 IN PRTMP_ADAPTER pAdapter,
5690 VOID APToWirelessSta(
5691 IN PRTMP_ADAPTER pAd,
5692 IN MAC_TABLE_ENTRY *pEntry,
5693 IN PUCHAR pHeader802_3,
5697 IN BOOLEAN bClearFrame);
5699 VOID RTMPAddPMKIDCache(
5700 IN PRTMP_ADAPTER pAd,
5706 INT RTMPSearchPMKIDCache(
5707 IN PRTMP_ADAPTER pAd,
5711 VOID RTMPDeletePMKIDCache(
5712 IN PRTMP_ADAPTER pAd,
5716 VOID RTMPMaintainPMKIDCache(
5717 IN PRTMP_ADAPTER pAd);
5719 VOID RTMPSendTriggerFrame(
5720 IN PRTMP_ADAPTER pAd,
5724 IN BOOLEAN bQosNull);
5727 VOID RTMPFilterCalibration(
5728 IN PRTMP_ADAPTER pAd);
5732 //typedef void (*TIMER_FUNCTION)(unsigned long);
5736 VOID RTMP_SetPeriodicTimer(
5737 IN NDIS_MINIPORT_TIMER *pTimer,
5738 IN unsigned long timeout);
5740 VOID RTMP_OS_Init_Timer(
5741 IN PRTMP_ADAPTER pAd,
5742 IN NDIS_MINIPORT_TIMER *pTimer,
5743 IN TIMER_FUNCTION function,
5746 VOID RTMP_OS_Add_Timer(
5747 IN NDIS_MINIPORT_TIMER *pTimer,
5748 IN unsigned long timeout);
5750 VOID RTMP_OS_Mod_Timer(
5751 IN NDIS_MINIPORT_TIMER *pTimer,
5752 IN unsigned long timeout);
5755 VOID RTMP_OS_Del_Timer(
5756 IN NDIS_MINIPORT_TIMER *pTimer,
5757 OUT BOOLEAN *pCancelled);
5760 VOID RTMP_OS_Release_Packet(
5761 IN PRTMP_ADAPTER pAd,
5762 IN PQUEUE_ENTRY pEntry);
5767 NDIS_STATUS os_alloc_mem(
5768 IN PRTMP_ADAPTER pAd,
5772 NDIS_STATUS os_free_mem(
5773 IN PRTMP_ADAPTER pAd,
5777 void RTMP_AllocateSharedMemory(
5778 IN PRTMP_ADAPTER pAd,
5781 OUT PVOID *VirtualAddress,
5782 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5784 VOID RTMPFreeTxRxRingMemory(
5785 IN PRTMP_ADAPTER pAd);
5787 NDIS_STATUS AdapterBlockAllocateMemory(
5791 void RTMP_AllocateTxDescMemory(
5792 IN PRTMP_ADAPTER pAd,
5796 OUT PVOID *VirtualAddress,
5797 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5799 void RTMP_AllocateFirstTxBuffer(
5800 IN PRTMP_ADAPTER pAd,
5804 OUT PVOID *VirtualAddress,
5805 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5807 void RTMP_AllocateMgmtDescMemory(
5808 IN PRTMP_ADAPTER pAd,
5811 OUT PVOID *VirtualAddress,
5812 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5814 void RTMP_AllocateRxDescMemory(
5815 IN PRTMP_ADAPTER pAd,
5818 OUT PVOID *VirtualAddress,
5819 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5821 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5822 IN PRTMP_ADAPTER pAd,
5825 OUT PVOID *VirtualAddress,
5826 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5828 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5829 IN PRTMP_ADAPTER pAd,
5832 OUT PVOID *VirtualAddress);
5834 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5835 IN PRTMP_ADAPTER pAd,
5838 void RTMP_QueryPacketInfo(
5839 IN PNDIS_PACKET pPacket,
5840 OUT PACKET_INFO *pPacketInfo,
5841 OUT PUCHAR *pSrcBufVA,
5842 OUT UINT *pSrcBufLen);
5844 void RTMP_QueryNextPacketInfo(
5845 IN PNDIS_PACKET *ppPacket,
5846 OUT PACKET_INFO *pPacketInfo,
5847 OUT PUCHAR *pSrcBufVA,
5848 OUT UINT *pSrcBufLen);
5851 BOOLEAN RTMP_FillTxBlkInfo(
5852 IN RTMP_ADAPTER *pAd,
5856 PRTMP_SCATTER_GATHER_LIST
5857 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5860 void announce_802_3_packet(
5861 IN PRTMP_ADAPTER pAd,
5862 IN PNDIS_PACKET pPacket);
5865 UINT BA_Reorder_AMSDU_Annnounce(
5866 IN PRTMP_ADAPTER pAd,
5867 IN PNDIS_PACKET pPacket);
5870 UINT Handle_AMSDU_Packet(
5871 IN PRTMP_ADAPTER pAd,
5874 IN UCHAR FromWhichBSSID);
5877 void convert_802_11_to_802_3_packet(
5878 IN PRTMP_ADAPTER pAd,
5879 IN PNDIS_PACKET pPacket,
5883 IN UCHAR FromWhichBSSID);
5886 PNET_DEV get_netdev_from_bssid(
5887 IN PRTMP_ADAPTER pAd,
5888 IN UCHAR FromWhichBSSID);
5891 PNDIS_PACKET duplicate_pkt(
5892 IN PRTMP_ADAPTER pAd,
5893 IN PUCHAR pHeader802_3,
5897 IN UCHAR FromWhichBSSID);
5900 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5901 IN PRTMP_ADAPTER pAd,
5902 IN PNDIS_PACKET pOldPkt);
5904 PNDIS_PACKET duplicate_pkt_with_VLAN(
5905 IN PRTMP_ADAPTER pAd,
5906 IN PUCHAR pHeader802_3,
5910 IN UCHAR FromWhichBSSID);
5912 PNDIS_PACKET duplicate_pkt_with_WPI(
5913 IN PRTMP_ADAPTER pAd,
5914 IN PNDIS_PACKET pPacket,
5915 IN UINT32 ext_head_len,
5916 IN UINT32 ext_tail_len);
5918 UCHAR VLAN_8023_Header_Copy(
5919 IN PRTMP_ADAPTER pAd,
5920 IN PUCHAR pHeader802_3,
5923 IN UCHAR FromWhichBSSID);
5925 #ifdef DOT11_N_SUPPORT
5926 void ba_flush_reordering_timeout_mpdus(
5927 IN PRTMP_ADAPTER pAd,
5928 IN PBA_REC_ENTRY pBAEntry,
5932 VOID BAOriSessionSetUp(
5933 IN PRTMP_ADAPTER pAd,
5934 IN MAC_TABLE_ENTRY *pEntry,
5938 IN BOOLEAN isForced);
5940 VOID BASessionTearDownALL(
5941 IN OUT PRTMP_ADAPTER pAd,
5943 #endif // DOT11_N_SUPPORT //
5945 BOOLEAN OS_Need_Clone_Packet(void);
5948 VOID build_tx_packet(
5949 IN PRTMP_ADAPTER pAd,
5950 IN PNDIS_PACKET pPacket,
5955 VOID BAOriSessionTearDown(
5956 IN OUT PRTMP_ADAPTER pAd,
5959 IN BOOLEAN bPassive,
5960 IN BOOLEAN bForceSend);
5962 VOID BARecSessionTearDown(
5963 IN OUT PRTMP_ADAPTER pAd,
5966 IN BOOLEAN bPassive);
5968 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5969 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5971 ULONG AutoChBssInsertEntry(
5972 IN PRTMP_ADAPTER pAd,
5979 void AutoChBssTableInit(
5980 IN PRTMP_ADAPTER pAd);
5982 void ChannelInfoInit(
5983 IN PRTMP_ADAPTER pAd);
5985 void AutoChBssTableDestroy(
5986 IN PRTMP_ADAPTER pAd);
5988 void ChannelInfoDestroy(
5989 IN PRTMP_ADAPTER pAd);
5991 UCHAR New_ApAutoSelectChannel(
5992 IN PRTMP_ADAPTER pAd);
5994 BOOLEAN rtstrmactohex(
5998 BOOLEAN rtstrcasecmp(
6002 char *rtstrstruncasecmp(
6008 IN const char * s2);
6012 IN const char * ct);
6016 unsigned int *addr);
6018 ////////// common ioctl functions //////////
6019 INT Set_DriverVersion_Proc(
6020 IN PRTMP_ADAPTER pAd,
6023 INT Set_CountryRegion_Proc(
6024 IN PRTMP_ADAPTER pAd,
6027 INT Set_CountryRegionABand_Proc(
6028 IN PRTMP_ADAPTER pAd,
6031 INT Set_WirelessMode_Proc(
6032 IN PRTMP_ADAPTER pAd,
6035 INT Set_Channel_Proc(
6036 IN PRTMP_ADAPTER pAd,
6039 INT Set_ShortSlot_Proc(
6040 IN PRTMP_ADAPTER pAd,
6043 INT Set_TxPower_Proc(
6044 IN PRTMP_ADAPTER pAd,
6047 INT Set_BGProtection_Proc(
6048 IN PRTMP_ADAPTER pAd,
6051 INT Set_TxPreamble_Proc(
6052 IN PRTMP_ADAPTER pAd,
6055 INT Set_RTSThreshold_Proc(
6056 IN PRTMP_ADAPTER pAd,
6059 INT Set_FragThreshold_Proc(
6060 IN PRTMP_ADAPTER pAd,
6063 INT Set_TxBurst_Proc(
6064 IN PRTMP_ADAPTER pAd,
6067 #ifdef AGGREGATION_SUPPORT
6068 INT Set_PktAggregate_Proc(
6069 IN PRTMP_ADAPTER pAd,
6073 INT Set_IEEE80211H_Proc(
6074 IN PRTMP_ADAPTER pAd,
6079 IN PRTMP_ADAPTER pAd,
6083 INT Show_DescInfo_Proc(
6084 IN PRTMP_ADAPTER pAd,
6087 INT Set_ResetStatCounter_Proc(
6088 IN PRTMP_ADAPTER pAd,
6091 #ifdef DOT11_N_SUPPORT
6092 INT Set_BASetup_Proc(
6093 IN PRTMP_ADAPTER pAd,
6096 INT Set_BADecline_Proc(
6097 IN PRTMP_ADAPTER pAd,
6100 INT Set_BAOriTearDown_Proc(
6101 IN PRTMP_ADAPTER pAd,
6104 INT Set_BARecTearDown_Proc(
6105 IN PRTMP_ADAPTER pAd,
6109 IN PRTMP_ADAPTER pAd,
6113 IN PRTMP_ADAPTER pAd,
6117 IN PRTMP_ADAPTER pAd,
6120 INT Set_HtOpMode_Proc(
6121 IN PRTMP_ADAPTER pAd,
6124 INT Set_HtStbc_Proc(
6125 IN PRTMP_ADAPTER pAd,
6129 IN PRTMP_ADAPTER pAd,
6132 INT Set_HtExtcha_Proc(
6133 IN PRTMP_ADAPTER pAd,
6136 INT Set_HtMpduDensity_Proc(
6137 IN PRTMP_ADAPTER pAd,
6140 INT Set_HtBaWinSize_Proc(
6141 IN PRTMP_ADAPTER pAd,
6145 IN PRTMP_ADAPTER pAd,
6148 INT Set_HtLinkAdapt_Proc(
6149 IN PRTMP_ADAPTER pAd,
6152 INT Set_HtAmsdu_Proc(
6153 IN PRTMP_ADAPTER pAd,
6156 INT Set_HtAutoBa_Proc(
6157 IN PRTMP_ADAPTER pAd,
6160 INT Set_HtProtect_Proc(
6161 IN PRTMP_ADAPTER pAd,
6164 INT Set_HtMimoPs_Proc(
6165 IN PRTMP_ADAPTER pAd,
6169 INT Set_ForceShortGI_Proc(
6170 IN PRTMP_ADAPTER pAd,
6173 INT Set_ForceGF_Proc(
6174 IN PRTMP_ADAPTER pAd,
6178 IN PRTMP_ADAPTER pAd);
6180 INT Set_SendPSMPAction_Proc(
6181 IN PRTMP_ADAPTER pAd,
6184 INT Set_HtMIMOPSmode_Proc(
6185 IN PRTMP_ADAPTER pAd,
6189 INT Set_HtTxBASize_Proc(
6190 IN PRTMP_ADAPTER pAd,
6192 #endif // DOT11_N_SUPPORT //
6196 #ifdef CONFIG_STA_SUPPORT
6198 VOID RTMPSendDLSTearDownFrame(
6199 IN PRTMP_ADAPTER pAd,
6202 #ifdef DOT11_N_SUPPORT
6205 IN PRTMP_ADAPTER pAd,
6206 OUT PQUERYBA_TABLE pBAT);
6207 #endif // DOT11_N_SUPPORT //
6209 #ifdef WPA_SUPPLICANT_SUPPORT
6210 INT WpaCheckEapCode(
6211 IN PRTMP_ADAPTER pAd,
6216 VOID WpaSendMicFailureToWpaSupplicant(
6217 IN PRTMP_ADAPTER pAd,
6218 IN BOOLEAN bUnicast);
6220 VOID SendAssocIEsToWpaSupplicant(
6221 IN PRTMP_ADAPTER pAd);
6222 #endif // WPA_SUPPLICANT_SUPPORT //
6224 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6225 int wext_notify_event_assoc(
6226 IN RTMP_ADAPTER *pAd);
6227 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6229 #endif // CONFIG_STA_SUPPORT //
6233 #ifdef DOT11_N_SUPPORT
6234 VOID Handle_BSS_Width_Trigger_Events(
6235 IN PRTMP_ADAPTER pAd);
6237 void build_ext_channel_switch_ie(
6238 IN PRTMP_ADAPTER pAd,
6239 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6240 #endif // DOT11_N_SUPPORT //
6243 BOOLEAN APRxDoneInterruptHandle(
6244 IN PRTMP_ADAPTER pAd);
6246 BOOLEAN STARxDoneInterruptHandle(
6247 IN PRTMP_ADAPTER pAd,
6250 #ifdef DOT11_N_SUPPORT
6251 // AMPDU packet indication
6252 VOID Indicate_AMPDU_Packet(
6253 IN PRTMP_ADAPTER pAd,
6255 IN UCHAR FromWhichBSSID);
6257 // AMSDU packet indication
6258 VOID Indicate_AMSDU_Packet(
6259 IN PRTMP_ADAPTER pAd,
6261 IN UCHAR FromWhichBSSID);
6262 #endif // DOT11_N_SUPPORT //
6264 // Normal legacy Rx packet indication
6265 VOID Indicate_Legacy_Packet(
6266 IN PRTMP_ADAPTER pAd,
6268 IN UCHAR FromWhichBSSID);
6270 VOID Indicate_EAPOL_Packet(
6271 IN PRTMP_ADAPTER pAd,
6273 IN UCHAR FromWhichBSSID);
6275 void update_os_packet_info(
6276 IN PRTMP_ADAPTER pAd,
6278 IN UCHAR FromWhichBSSID);
6280 void wlan_802_11_to_802_3_packet(
6281 IN PRTMP_ADAPTER pAd,
6283 IN PUCHAR pHeader802_3,
6284 IN UCHAR FromWhichBSSID);
6286 UINT deaggregate_AMSDU_announce(
6287 IN PRTMP_ADAPTER pAd,
6288 PNDIS_PACKET pPacket,
6293 #ifdef CONFIG_STA_SUPPORT
6294 // remove LLC and get 802_3 Header
6295 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6297 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6299 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6301 _pDA = _pRxBlk->pHeader->Addr3; \
6302 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6306 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6308 _pDA = _pRxBlk->pHeader->Addr1; \
6309 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6310 _pSA = _pRxBlk->pHeader->Addr2; \
6312 _pSA = _pRxBlk->pHeader->Addr3; \
6316 _pDA = _pRxBlk->pHeader->Addr1; \
6317 _pSA = _pRxBlk->pHeader->Addr2; \
6321 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6322 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6324 #endif // CONFIG_STA_SUPPORT //
6327 BOOLEAN APFowardWirelessStaToWirelessSta(
6328 IN PRTMP_ADAPTER pAd,
6329 IN PNDIS_PACKET pPacket,
6330 IN ULONG FromWhichBSSID);
6332 VOID Announce_or_Forward_802_3_Packet(
6333 IN PRTMP_ADAPTER pAd,
6334 IN PNDIS_PACKET pPacket,
6335 IN UCHAR FromWhichBSSID);
6337 VOID Sta_Announce_or_Forward_802_3_Packet(
6338 IN PRTMP_ADAPTER pAd,
6339 IN PNDIS_PACKET pPacket,
6340 IN UCHAR FromWhichBSSID);
6343 #ifdef CONFIG_STA_SUPPORT
6344 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6345 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6346 //announce_802_3_packet(_pAd, _pPacket);
6347 #endif // CONFIG_STA_SUPPORT //
6350 PNDIS_PACKET DuplicatePacket(
6351 IN PRTMP_ADAPTER pAd,
6352 IN PNDIS_PACKET pPacket,
6353 IN UCHAR FromWhichBSSID);
6356 PNDIS_PACKET ClonePacket(
6357 IN PRTMP_ADAPTER pAd,
6358 IN PNDIS_PACKET pPacket,
6363 // Normal, AMPDU or AMSDU
6364 VOID CmmRxnonRalinkFrameIndicate(
6365 IN PRTMP_ADAPTER pAd,
6367 IN UCHAR FromWhichBSSID);
6369 VOID CmmRxRalinkFrameIndicate(
6370 IN PRTMP_ADAPTER pAd,
6371 IN MAC_TABLE_ENTRY *pEntry,
6373 IN UCHAR FromWhichBSSID);
6375 VOID Update_Rssi_Sample(
6376 IN PRTMP_ADAPTER pAd,
6377 IN RSSI_SAMPLE *pRssi,
6378 IN PRXWI_STRUC pRxWI);
6380 PNDIS_PACKET GetPacketFromRxRing(
6381 IN PRTMP_ADAPTER pAd,
6382 OUT PRT28XX_RXD_STRUC pSaveRxD,
6383 OUT BOOLEAN *pbReschedule,
6384 IN OUT UINT32 *pRxPending);
6386 PNDIS_PACKET RTMPDeFragmentDataFrame(
6387 IN PRTMP_ADAPTER pAd,
6390 ////////////////////////////////////////
6392 #ifdef CONFIG_STA_SUPPORT
6394 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6395 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6396 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6397 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6398 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6399 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6400 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6401 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6402 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6403 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6404 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6407 P80211ENUM_msgitem_status_no_value = 0x00
6410 P80211ENUM_truth_false = 0x00,
6411 P80211ENUM_truth_true = 0x01
6414 /* Definition from madwifi */
6420 } p80211item_uint32_t;
6425 #define WLAN_DEVNAMELEN_MAX 16
6426 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6427 p80211item_uint32_t hosttime;
6428 p80211item_uint32_t mactime;
6429 p80211item_uint32_t channel;
6430 p80211item_uint32_t rssi;
6431 p80211item_uint32_t sq;
6432 p80211item_uint32_t signal;
6433 p80211item_uint32_t noise;
6434 p80211item_uint32_t rate;
6435 p80211item_uint32_t istx;
6436 p80211item_uint32_t frmlen;
6437 } wlan_ng_prism2_header;
6439 /* The radio capture header precedes the 802.11 header. */
6440 typedef struct PACKED _ieee80211_radiotap_header {
6441 UINT8 it_version; /* Version 0. Only increases
6442 * for drastic changes,
6443 * introduction of compatible
6444 * new fields does not count.
6447 UINT16 it_len; /* length of the whole
6448 * header in bytes, including
6449 * it_version, it_pad,
6450 * it_len, and data fields.
6452 UINT32 it_present; /* A bitmap telling which
6453 * fields are present. Set bit 31
6454 * (0x80000000) to extend the
6455 * bitmap by another 32 bits.
6456 * Additional extensions are made
6457 * by setting bit 31.
6459 }ieee80211_radiotap_header ;
6461 enum ieee80211_radiotap_type {
6462 IEEE80211_RADIOTAP_TSFT = 0,
6463 IEEE80211_RADIOTAP_FLAGS = 1,
6464 IEEE80211_RADIOTAP_RATE = 2,
6465 IEEE80211_RADIOTAP_CHANNEL = 3,
6466 IEEE80211_RADIOTAP_FHSS = 4,
6467 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6468 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6469 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6470 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6471 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6472 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6473 IEEE80211_RADIOTAP_ANTENNA = 11,
6474 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6475 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6478 #define WLAN_RADIOTAP_PRESENT ( \
6479 (1 << IEEE80211_RADIOTAP_TSFT) | \
6480 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6481 (1 << IEEE80211_RADIOTAP_RATE) | \
6484 typedef struct _wlan_radiotap_header {
6485 ieee80211_radiotap_header wt_ihdr;
6489 } wlan_radiotap_header;
6490 /* Definition from madwifi */
6492 void send_monitor_packets(
6493 IN PRTMP_ADAPTER pAd,
6496 #if WIRELESS_EXT >= 12
6497 // This function will be called when query /proc
6498 struct iw_statistics *rt28xx_get_wireless_stats(
6499 IN struct net_device *net_dev);
6502 VOID RTMPSetDesiredRates(
6503 IN PRTMP_ADAPTER pAdapter,
6505 #endif // CONFIG_STA_SUPPORT //
6507 INT Set_FixedTxMode_Proc(
6508 IN PRTMP_ADAPTER pAd,
6511 static inline char* GetPhyMode(
6521 #ifdef DOT11_N_SUPPORT
6525 case MODE_HTGREENFIELD:
6527 #endif // DOT11_N_SUPPORT //
6534 static inline char* GetBW(
6544 #ifdef DOT11_N_SUPPORT
6547 #endif // DOT11_N_SUPPORT //
6554 VOID RT28xxThreadTerminate(
6555 IN RTMP_ADAPTER *pAd);
6557 BOOLEAN RT28XXChipsetCheck(
6560 BOOLEAN RT28XXNetDevInit(
6562 IN struct net_device *net_dev,
6563 IN RTMP_ADAPTER *pAd);
6565 BOOLEAN RT28XXProbePostConfig(
6567 IN RTMP_ADAPTER *pAd,
6570 VOID RT28XXDMADisable(
6571 IN RTMP_ADAPTER *pAd);
6573 VOID RT28XXDMAEnable(
6574 IN RTMP_ADAPTER *pAd);
6576 VOID RT28xx_UpdateBeaconToAsic(
6577 IN RTMP_ADAPTER * pAd,
6580 IN ULONG UpdatePos);
6583 IN struct net_device *net_dev,
6584 IN OUT struct ifreq *rq,
6588 #ifdef CONFIG_STA_SUPPORT
6589 INT rt28xx_sta_ioctl(
6590 IN struct net_device *net_dev,
6591 IN OUT struct ifreq *rq,
6593 #endif // CONFIG_STA_SUPPORT //
6595 BOOLEAN RT28XXSecurityKeyAdd(
6596 IN PRTMP_ADAPTER pAd,
6599 IN MAC_TABLE_ENTRY *pEntry);
6601 ////////////////////////////////////////
6602 PNDIS_PACKET GetPacketFromRxRing(
6603 IN PRTMP_ADAPTER pAd,
6604 OUT PRT28XX_RXD_STRUC pSaveRxD,
6605 OUT BOOLEAN *pbReschedule,
6606 IN OUT UINT32 *pRxPending);
6609 void kill_thread_task(PRTMP_ADAPTER pAd);
6611 void tbtt_tasklet(unsigned long data);
6614 VOID AsicTurnOffRFClk(
6615 IN PRTMP_ADAPTER pAd,
6618 VOID AsicTurnOnRFClk(
6619 IN PRTMP_ADAPTER pAd,
6623 NTSTATUS RT30xxWriteRFRegister(
6624 IN PRTMP_ADAPTER pAd,
6628 NTSTATUS RT30xxReadRFRegister(
6629 IN PRTMP_ADAPTER pAd,
6633 //2008/09/11:KH add to support efuse<--
6634 UCHAR eFuseReadRegisters(
6635 IN PRTMP_ADAPTER pAd,
6640 VOID eFuseReadPhysical(
6641 IN PRTMP_ADAPTER pAd,
6642 IN PUSHORT lpInBuffer,
6643 IN ULONG nInBufferSize,
6644 OUT PUSHORT lpOutBuffer,
6645 IN ULONG nOutBufferSize
6649 IN PRTMP_ADAPTER pAd,
6654 VOID eFusePhysicalWriteRegisters(
6655 IN PRTMP_ADAPTER pAd,
6660 NTSTATUS eFuseWriteRegisters(
6661 IN PRTMP_ADAPTER pAd,
6666 VOID eFuseWritePhysical(
6667 IN PRTMP_ADAPTER pAd,
6669 ULONG nInBufferSize,
6671 ULONG nOutBufferSize
6674 NTSTATUS eFuseWrite(
6675 IN PRTMP_ADAPTER pAd,
6680 INT set_eFuseGetFreeBlockCount_Proc(
6681 IN PRTMP_ADAPTER pAd,
6684 INT set_eFusedump_Proc(
6685 IN PRTMP_ADAPTER pAd,
6688 INT set_eFuseLoadFromBin_Proc(
6689 IN PRTMP_ADAPTER pAd,
6692 NTSTATUS eFuseWriteRegistersFromBin(
6693 IN PRTMP_ADAPTER pAd,
6698 VOID eFusePhysicalReadRegisters(
6699 IN PRTMP_ADAPTER pAd,
6704 NDIS_STATUS NICLoadEEPROM(
6705 IN PRTMP_ADAPTER pAd);
6707 BOOLEAN bNeedLoadEEPROM(
6708 IN PRTMP_ADAPTER pAd);
6709 //2008/09/11:KH add to support efuse-->
6713 // add by johnli, RF power sequence setup
6714 VOID RT30xxLoadRFNormalModeSetup(
6715 IN PRTMP_ADAPTER pAd);
6717 VOID RT30xxLoadRFSleepModeSetup(
6718 IN PRTMP_ADAPTER pAd);
6720 VOID RT30xxReverseRFSleepModeSetup(
6721 IN PRTMP_ADAPTER pAd);
6727 // Function Prototype in rtusb_bulk.c
6729 VOID RTUSBInitTxDesc(
6730 IN PRTMP_ADAPTER pAd,
6731 IN PTX_CONTEXT pTxContext,
6732 IN UCHAR BulkOutPipeId,
6733 IN usb_complete_t Func);
6735 VOID RTUSBInitHTTxDesc(
6736 IN PRTMP_ADAPTER pAd,
6737 IN PHT_TX_CONTEXT pTxContext,
6738 IN UCHAR BulkOutPipeId,
6739 IN ULONG BulkOutSize,
6740 IN usb_complete_t Func);
6742 VOID RTUSBInitRxDesc(
6743 IN PRTMP_ADAPTER pAd,
6744 IN PRX_CONTEXT pRxContext);
6746 VOID RTUSBCleanUpDataBulkOutQueue(
6747 IN PRTMP_ADAPTER pAd);
6749 VOID RTUSBCancelPendingBulkOutIRP(
6750 IN PRTMP_ADAPTER pAd);
6752 VOID RTUSBBulkOutDataPacket(
6753 IN PRTMP_ADAPTER pAd,
6754 IN UCHAR BulkOutPipeId,
6757 VOID RTUSBBulkOutNullFrame(
6758 IN PRTMP_ADAPTER pAd);
6760 VOID RTUSBBulkOutRTSFrame(
6761 IN PRTMP_ADAPTER pAd);
6763 VOID RTUSBCancelPendingBulkInIRP(
6764 IN PRTMP_ADAPTER pAd);
6766 VOID RTUSBCancelPendingIRPs(
6767 IN PRTMP_ADAPTER pAd);
6769 VOID RTUSBBulkOutMLMEPacket(
6770 IN PRTMP_ADAPTER pAd,
6773 VOID RTUSBBulkOutPsPoll(
6774 IN PRTMP_ADAPTER pAd);
6776 VOID RTUSBCleanUpMLMEBulkOutQueue(
6777 IN PRTMP_ADAPTER pAd);
6779 VOID RTUSBKickBulkOut(
6780 IN PRTMP_ADAPTER pAd);
6782 VOID RTUSBBulkReceive(
6783 IN PRTMP_ADAPTER pAd);
6786 IN RTMP_ADAPTER *pAd);
6788 VOID RTUSBInitRxDesc(
6789 IN PRTMP_ADAPTER pAd,
6790 IN PRX_CONTEXT pRxContext);
6792 VOID RTUSBBulkRxHandle(
6793 IN unsigned long data);
6796 // Function Prototype in rtusb_io.c
6798 NTSTATUS RTUSBMultiRead(
6799 IN PRTMP_ADAPTER pAd,
6804 NTSTATUS RTUSBMultiWrite(
6805 IN PRTMP_ADAPTER pAd,
6810 NTSTATUS RTUSBMultiWrite_OneByte(
6811 IN PRTMP_ADAPTER pAd,
6815 NTSTATUS RTUSBReadBBPRegister(
6816 IN PRTMP_ADAPTER pAd,
6820 NTSTATUS RTUSBWriteBBPRegister(
6821 IN PRTMP_ADAPTER pAd,
6825 NTSTATUS RTUSBWriteRFRegister(
6826 IN PRTMP_ADAPTER pAd,
6829 NTSTATUS RTUSB_VendorRequest(
6830 IN PRTMP_ADAPTER pAd,
6831 IN UINT32 TransferFlags,
6832 IN UCHAR ReservedBits,
6836 IN PVOID TransferBuffer,
6837 IN UINT32 TransferBufferLength);
6839 NTSTATUS RTUSBReadEEPROM(
6840 IN PRTMP_ADAPTER pAd,
6845 NTSTATUS RTUSBWriteEEPROM(
6846 IN PRTMP_ADAPTER pAd,
6851 VOID RTUSBPutToSleep(
6852 IN PRTMP_ADAPTER pAd);
6854 NTSTATUS RTUSBWakeUp(
6855 IN PRTMP_ADAPTER pAd);
6857 VOID RTUSBInitializeCmdQ(
6860 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6861 IN PRTMP_ADAPTER pAd,
6863 IN BOOLEAN SetInformation,
6864 IN PVOID pInformationBuffer,
6865 IN UINT32 InformationBufferLength);
6867 NDIS_STATUS RTUSBEnqueueInternalCmd(
6868 IN PRTMP_ADAPTER pAd,
6870 IN PVOID pInformationBuffer,
6871 IN UINT32 InformationBufferLength);
6873 VOID RTUSBDequeueCmd(
6875 OUT PCmdQElmt *pcmdqelmt);
6878 IN OUT PVOID Context);
6881 IN OUT PVOID Context);
6883 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6884 IN RTMP_ADAPTER *pAd,
6885 IN RALINK_TIMER_STRUCT *pTimer);
6887 BOOLEAN RT2870_TimerQ_Remove(
6888 IN RTMP_ADAPTER *pAd,
6889 IN RALINK_TIMER_STRUCT *pTimer);
6891 void RT2870_TimerQ_Exit(
6892 IN RTMP_ADAPTER *pAd);
6894 void RT2870_TimerQ_Init(
6895 IN RTMP_ADAPTER *pAd);
6897 VOID RT2870_BssBeaconExit(
6898 IN RTMP_ADAPTER *pAd);
6900 VOID RT2870_BssBeaconStop(
6901 IN RTMP_ADAPTER *pAd);
6903 VOID RT2870_BssBeaconStart(
6904 IN RTMP_ADAPTER * pAd);
6906 VOID RT2870_BssBeaconInit(
6907 IN RTMP_ADAPTER *pAd);
6909 VOID RT2870_WatchDog(
6910 IN RTMP_ADAPTER *pAd);
6912 NTSTATUS RTUSBWriteMACRegister(
6913 IN PRTMP_ADAPTER pAd,
6917 NTSTATUS RTUSBReadMACRegister(
6918 IN PRTMP_ADAPTER pAd,
6920 OUT PUINT32 pValue);
6922 NTSTATUS RTUSBSingleWrite(
6923 IN RTMP_ADAPTER *pAd,
6927 NTSTATUS RTUSBFirmwareRun(
6928 IN PRTMP_ADAPTER pAd);
6930 NTSTATUS RTUSBFirmwareWrite(
6931 IN PRTMP_ADAPTER pAd,
6935 NTSTATUS RTUSBFirmwareOpmode(
6936 IN PRTMP_ADAPTER pAd,
6937 OUT PUINT32 pValue);
6939 NTSTATUS RTUSBVenderReset(
6940 IN PRTMP_ADAPTER pAd);
6942 NDIS_STATUS RTUSBSetHardWareRegister(
6943 IN PRTMP_ADAPTER pAdapter,
6946 NDIS_STATUS RTUSBQueryHardWareRegister(
6947 IN PRTMP_ADAPTER pAdapter,
6951 IN PRTMP_ADAPTER pAd);
6954 NDIS_STATUS CreateThreads(
6955 IN struct net_device *net_dev );
6958 VOID MacTableInitialize(
6959 IN PRTMP_ADAPTER pAd);
6962 IN PRTMP_ADAPTER pAd,
6965 NDIS_STATUS RTMPWPAAddKeyProc(
6966 IN PRTMP_ADAPTER pAd,
6969 VOID AsicRxAntEvalAction(
6970 IN PRTMP_ADAPTER pAd);
6973 IN PRTMP_ADAPTER pAd,
6974 IN PUCHAR pHeader802_3,
6978 OUT PNDIS_PACKET *ppPacket);
6980 UINT deaggregate_AMSDU_announce(
6981 IN PRTMP_ADAPTER pAd,
6982 PNDIS_PACKET pPacket,
6986 NDIS_STATUS RTMPCheckRxError(
6987 IN PRTMP_ADAPTER pAd,
6988 IN PHEADER_802_11 pHeader,
6989 IN PRXWI_STRUC pRxWI,
6990 IN PRT28XX_RXD_STRUC pRxINFO);
6993 VOID RTUSBMlmeHardTransmit(
6994 IN PRTMP_ADAPTER pAd,
6995 IN PMGMT_STRUC pMgmt);
7001 // Function Prototype in rtusb_data.c
7003 NDIS_STATUS RTUSBFreeDescriptorRequest(
7004 IN PRTMP_ADAPTER pAd,
7005 IN UCHAR BulkOutPipeId,
7006 IN UINT32 NumberRequired);
7009 BOOLEAN RTUSBNeedQueueBackForAgg(
7010 IN RTMP_ADAPTER *pAd,
7011 IN UCHAR BulkOutPipeId);
7014 VOID RTMPWriteTxInfo(
7015 IN PRTMP_ADAPTER pAd,
7016 IN PTXINFO_STRUC pTxInfo,
7017 IN USHORT USBDMApktLen,
7024 // Function Prototype in cmm_data_2870.c
7026 USHORT RtmpUSB_WriteSubTxResource(
7027 IN PRTMP_ADAPTER pAd,
7030 OUT USHORT *FreeNumber);
7032 USHORT RtmpUSB_WriteSingleTxResource(
7033 IN PRTMP_ADAPTER pAd,
7036 OUT USHORT *FreeNumber);
7038 USHORT RtmpUSB_WriteFragTxResource(
7039 IN PRTMP_ADAPTER pAd,
7042 OUT USHORT *FreeNumber);
7044 USHORT RtmpUSB_WriteMultiTxResource(
7045 IN PRTMP_ADAPTER pAd,
7048 OUT USHORT *FreeNumber);
7050 VOID RtmpUSB_FinalWriteTxResource(
7051 IN PRTMP_ADAPTER pAd,
7053 IN USHORT totalMPDUSize,
7056 VOID RtmpUSBDataLastTxIdx(
7057 IN PRTMP_ADAPTER pAd,
7061 VOID RtmpUSBDataKickOut(
7062 IN PRTMP_ADAPTER pAd,
7067 int RtmpUSBMgmtKickOut(
7068 IN RTMP_ADAPTER *pAd,
7070 IN PNDIS_PACKET pPacket,
7071 IN PUCHAR pSrcBufVA,
7074 VOID RtmpUSBNullFrameKickOut(
7075 IN RTMP_ADAPTER *pAd,
7077 IN UCHAR *pNullFrame,
7078 IN UINT32 frameLen);
7080 VOID RT28xxUsbStaAsicForceWakeup(
7081 IN PRTMP_ADAPTER pAd,
7082 IN BOOLEAN bFromTx);
7084 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7085 IN PRTMP_ADAPTER pAd,
7086 IN USHORT TbttNumToNextWakeUp);
7088 VOID RT28xxUsbMlmeRadioOn(
7089 IN PRTMP_ADAPTER pAd);
7091 VOID RT28xxUsbMlmeRadioOFF(
7092 IN PRTMP_ADAPTER pAd);
7095 ////////////////////////////////////////
7098 IN RTMP_ADAPTER *pAd);
7100 UINT32 QBSS_LoadElementAppend(
7101 IN RTMP_ADAPTER *pAd,
7104 VOID QBSS_LoadUpdate(
7105 IN RTMP_ADAPTER *pAd);
7107 ///////////////////////////////////////
7108 INT RTMPShowCfgValue(
7109 IN PRTMP_ADAPTER pAd,
7113 PCHAR RTMPGetRalinkAuthModeStr(
7114 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7116 PCHAR RTMPGetRalinkEncryModeStr(
7117 IN USHORT encryMode);
7118 //////////////////////////////////////
7120 #ifdef CONFIG_STA_SUPPORT
7121 VOID AsicStaBbpTuning(
7122 IN PRTMP_ADAPTER pAd);
7124 BOOLEAN StaAddMacTableEntry(
7125 IN PRTMP_ADAPTER pAd,
7126 IN PMAC_TABLE_ENTRY pEntry,
7127 IN UCHAR MaxSupportedRateIn500Kbps,
7128 IN HT_CAPABILITY_IE *pHtCapability,
7129 IN UCHAR HtCapabilityLen,
7130 IN USHORT CapabilityInfo);
7131 #endif // CONFIG_STA_SUPPORT //
7133 void RTMP_IndicateMediaState(
7134 IN PRTMP_ADAPTER pAd);
7136 VOID ReSyncBeaconTime(
7137 IN PRTMP_ADAPTER pAd);
7139 VOID RTMPSetAGCInitValue(
7140 IN PRTMP_ADAPTER pAd,
7141 IN UCHAR BandWidth);
7143 int rt28xx_close(IN PNET_DEV dev);
7144 int rt28xx_open(IN PNET_DEV dev);
7146 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7148 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7149 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7151 if (VIRTUAL_IF_NUM(pAd) == 0)
7153 if (rt28xx_open(pAd->net_dev) != 0)
7159 VIRTUAL_IF_INC(pAd);
7163 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7165 VIRTUAL_IF_DEC(pAd);
7166 if (VIRTUAL_IF_NUM(pAd) == 0)
7167 rt28xx_close(pAd->net_dev);
7172 #endif // __RTMP_H__