Staging: rt2870: remove DOT11_N_SUPPORT ifdefs
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / staging / rt2870 / rtmp.h
bloba51aa8b36595909cf4425e528791f4d3bb0f905d
1 /*
2 *************************************************************************
3 * Ralink Tech Inc.
4 * 5F., No.36, Taiyuan St., Jhubei City,
5 * Hsinchu County 302,
6 * Taiwan, R.O.C.
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. *
14 * *
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. *
19 * *
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. *
24 * *
25 *************************************************************************
27 Module Name:
28 rtmp.h
30 Abstract:
31 Miniport generic portion header file
33 Revision History:
34 Who When What
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
40 #ifndef __RTMP_H__
41 #define __RTMP_H__
43 #include "link_list.h"
44 #include "spectrum_def.h"
46 #include "aironet.h"
48 //#define DBG 1
50 //#define DBG_DIAGNOSE 1
52 #if defined(CONFIG_AP_SUPPORT)
53 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
54 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
55 #else
56 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
57 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
58 #endif
60 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
61 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
62 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
64 #ifdef RT2870
65 ////////////////////////////////////////////////////////////////////////////
66 // The TX_BUFFER structure forms the transmitted USB packet to the device
67 ////////////////////////////////////////////////////////////////////////////
68 typedef struct __TX_BUFFER{
69 union {
70 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
71 HEADER_802_11 NullFrame;
72 PSPOLL_FRAME PsPollPacket;
73 RTS_FRAME RTSFrame;
74 }field;
75 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
76 } TX_BUFFER, *PTX_BUFFER;
78 typedef struct __HTTX_BUFFER{
79 union {
80 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
81 HEADER_802_11 NullFrame;
82 PSPOLL_FRAME PsPollPacket;
83 RTS_FRAME RTSFrame;
84 }field;
85 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
86 } HTTX_BUFFER, *PHTTX_BUFFER;
89 // used to track driver-generated write irps
90 typedef struct _TX_CONTEXT
92 PVOID pAd; //Initialized in MiniportInitialize
93 PURB pUrb; //Initialized in MiniportInitialize
94 PIRP pIrp; //used to cancel pending bulk out.
95 //Initialized in MiniportInitialize
96 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
97 ULONG BulkOutSize;
98 UCHAR BulkOutPipeId;
99 UCHAR SelfIdx;
100 BOOLEAN InUse;
101 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
102 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
103 BOOLEAN IRPPending;
104 BOOLEAN LastOne;
105 BOOLEAN bAggregatible;
106 UCHAR Header_802_3[LENGTH_802_3];
107 UCHAR Rsv[2];
108 ULONG DataOffset;
109 UINT TxRate;
110 dma_addr_t data_dma; // urb dma on linux
112 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
115 // used to track driver-generated write irps
116 typedef struct _HT_TX_CONTEXT
118 PVOID pAd; //Initialized in MiniportInitialize
119 PURB pUrb; //Initialized in MiniportInitialize
120 PIRP pIrp; //used to cancel pending bulk out.
121 //Initialized in MiniportInitialize
122 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
123 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
124 UCHAR BulkOutPipeId;
125 BOOLEAN IRPPending;
126 BOOLEAN LastOne;
127 BOOLEAN bCurWriting;
128 BOOLEAN bRingEmpty;
129 BOOLEAN bCopySavePad;
130 UCHAR SavedPad[8];
131 UCHAR Header_802_3[LENGTH_802_3];
132 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
133 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
134 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
135 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
136 UINT TxRate;
137 dma_addr_t data_dma; // urb dma on linux
138 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
142 // Structure to keep track of receive packets and buffers to indicate
143 // receive data to the protocol.
145 typedef struct _RX_CONTEXT
147 PUCHAR TransferBuffer;
148 PVOID pAd;
149 PIRP pIrp;//used to cancel pending bulk in.
150 PURB pUrb;
151 //These 2 Boolean shouldn't both be 1 at the same time.
152 ULONG BulkInOffset; // number of packets waiting for reordering .
153 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
154 BOOLEAN bRxHandling; // Notify this packet is being process now.
155 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
156 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
157 BOOLEAN IRPPending; // TODO: To be removed
158 atomic_t IrpLock;
159 NDIS_SPIN_LOCK RxContextLock;
160 dma_addr_t data_dma; // urb dma on linux
161 } RX_CONTEXT, *PRX_CONTEXT;
162 #endif // RT2870 //
166 // NDIS Version definitions
168 #ifdef NDIS50_MINIPORT
169 #define RTMP_NDIS_MAJOR_VERSION 5
170 #define RTMP_NDIS_MINOR_VERSION 0
171 #endif
173 #ifdef NDIS51_MINIPORT
174 #define RTMP_NDIS_MAJOR_VERSION 5
175 #define RTMP_NDIS_MINOR_VERSION 1
176 #endif
178 extern char NIC_VENDOR_DESC[];
179 extern int NIC_VENDOR_DESC_LEN;
181 extern unsigned char SNAP_AIRONET[];
182 extern unsigned char CipherSuiteCiscoCCKM[];
183 extern unsigned char CipherSuiteCiscoCCKMLen;
184 extern unsigned char CipherSuiteCiscoCCKM24[];
185 extern unsigned char CipherSuiteCiscoCCKM24Len;
186 extern unsigned char CipherSuiteCCXTkip[];
187 extern unsigned char CipherSuiteCCXTkipLen;
188 extern unsigned char CISCO_OUI[];
189 extern UCHAR BaSizeArray[4];
191 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
192 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
193 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
194 extern ULONG BIT32[32];
195 extern UCHAR BIT8[8];
196 extern char* CipherName[];
197 extern char* MCSToMbps[];
198 extern UCHAR RxwiMCSToOfdmRate[12];
199 extern UCHAR SNAP_802_1H[6];
200 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
201 extern UCHAR SNAP_AIRONET[8];
202 extern UCHAR CKIP_LLC_SNAP[8];
203 extern UCHAR EAPOL_LLC_SNAP[8];
204 extern UCHAR EAPOL[2];
205 extern UCHAR IPX[2];
206 extern UCHAR APPLE_TALK[2];
207 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
208 extern UCHAR OfdmRateToRxwiMCS[];
209 extern UCHAR OfdmSignalToRateId[16] ;
210 extern UCHAR default_cwmin[4];
211 extern UCHAR default_cwmax[4];
212 extern UCHAR default_sta_aifsn[4];
213 extern UCHAR MapUserPriorityToAccessCategory[8];
215 extern USHORT RateUpPER[];
216 extern USHORT RateDownPER[];
217 extern UCHAR Phy11BNextRateDownward[];
218 extern UCHAR Phy11BNextRateUpward[];
219 extern UCHAR Phy11BGNextRateDownward[];
220 extern UCHAR Phy11BGNextRateUpward[];
221 extern UCHAR Phy11ANextRateDownward[];
222 extern UCHAR Phy11ANextRateUpward[];
223 extern CHAR RssiSafeLevelForTxRate[];
224 extern UCHAR RateIdToMbps[];
225 extern USHORT RateIdTo500Kbps[];
227 extern UCHAR CipherSuiteWpaNoneTkip[];
228 extern UCHAR CipherSuiteWpaNoneTkipLen;
230 extern UCHAR CipherSuiteWpaNoneAes[];
231 extern UCHAR CipherSuiteWpaNoneAesLen;
233 extern UCHAR SsidIe;
234 extern UCHAR SupRateIe;
235 extern UCHAR ExtRateIe;
237 extern UCHAR HtCapIe;
238 extern UCHAR AddHtInfoIe;
239 extern UCHAR NewExtChanIe;
241 extern UCHAR ErpIe;
242 extern UCHAR DsIe;
243 extern UCHAR TimIe;
244 extern UCHAR WpaIe;
245 extern UCHAR Wpa2Ie;
246 extern UCHAR IbssIe;
247 extern UCHAR Ccx2Ie;
249 extern UCHAR WPA_OUI[];
250 extern UCHAR RSN_OUI[];
251 extern UCHAR WME_INFO_ELEM[];
252 extern UCHAR WME_PARM_ELEM[];
253 extern UCHAR Ccx2QosInfo[];
254 extern UCHAR Ccx2IeInfo[];
255 extern UCHAR RALINK_OUI[];
256 extern UCHAR PowerConstraintIE[];
259 extern UCHAR RateSwitchTable[];
260 extern UCHAR RateSwitchTable11B[];
261 extern UCHAR RateSwitchTable11G[];
262 extern UCHAR RateSwitchTable11BG[];
264 extern UCHAR RateSwitchTable11BGN1S[];
265 extern UCHAR RateSwitchTable11BGN2S[];
266 extern UCHAR RateSwitchTable11BGN2SForABand[];
267 extern UCHAR RateSwitchTable11N1S[];
268 extern UCHAR RateSwitchTable11N2S[];
269 extern UCHAR RateSwitchTable11N2SForABand[];
271 extern UCHAR PRE_N_HT_OUI[];
273 #define MAXSEQ (0xFFF)
275 struct reordering_mpdu
277 struct reordering_mpdu *next;
278 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
279 int Sequence; /* sequence number of MPDU */
280 BOOLEAN bAMSDU;
283 struct reordering_list
285 struct reordering_mpdu *next;
286 int qlen;
289 struct reordering_mpdu_pool
291 PVOID mem;
292 NDIS_SPIN_LOCK lock;
293 struct reordering_list freelist;
296 typedef struct _RSSI_SAMPLE {
297 CHAR LastRssi0; // last received RSSI
298 CHAR LastRssi1; // last received RSSI
299 CHAR LastRssi2; // last received RSSI
300 CHAR AvgRssi0;
301 CHAR AvgRssi1;
302 CHAR AvgRssi2;
303 SHORT AvgRssi0X8;
304 SHORT AvgRssi1X8;
305 SHORT AvgRssi2X8;
306 } RSSI_SAMPLE;
309 // Queue structure and macros
311 typedef struct _QUEUE_ENTRY {
312 struct _QUEUE_ENTRY *Next;
313 } QUEUE_ENTRY, *PQUEUE_ENTRY;
315 // Queue structure
316 typedef struct _QUEUE_HEADER {
317 PQUEUE_ENTRY Head;
318 PQUEUE_ENTRY Tail;
319 ULONG Number;
320 } QUEUE_HEADER, *PQUEUE_HEADER;
322 #define InitializeQueueHeader(QueueHeader) \
324 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
325 (QueueHeader)->Number = 0; \
328 #define RemoveHeadQueue(QueueHeader) \
329 (QueueHeader)->Head; \
331 PQUEUE_ENTRY pNext; \
332 if ((QueueHeader)->Head != NULL) \
334 pNext = (QueueHeader)->Head->Next; \
335 (QueueHeader)->Head = pNext; \
336 if (pNext == NULL) \
337 (QueueHeader)->Tail = NULL; \
338 (QueueHeader)->Number--; \
342 #define InsertHeadQueue(QueueHeader, QueueEntry) \
344 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
345 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
346 if ((QueueHeader)->Tail == NULL) \
347 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
348 (QueueHeader)->Number++; \
351 #define InsertTailQueue(QueueHeader, QueueEntry) \
353 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
354 if ((QueueHeader)->Tail) \
355 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
356 else \
357 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
358 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
359 (QueueHeader)->Number++; \
363 // Macros for flag and ref count operations
365 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
366 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
367 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
368 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
369 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
371 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
372 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
373 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
375 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
376 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
377 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
379 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
380 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
381 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
383 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
384 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
385 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
386 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
388 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
390 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
391 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
394 #define INC_RING_INDEX(_idx, _RingSize) \
396 (_idx) = (_idx+1) % (_RingSize); \
399 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
401 #define RING_PACKET_INIT(_TxRing, _idx) \
403 _TxRing->Cell[_idx].pNdisPacket = NULL; \
404 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
407 #define TXDT_INIT(_TxD) \
409 NdisZeroMemory(_TxD, TXD_SIZE); \
410 _TxD->DMADONE = 1; \
413 //Set last data segment
414 #define RING_SET_LASTDS(_TxD, _IsSD0) \
416 if (_IsSD0) {_TxD->LastSec0 = 1;} \
417 else {_TxD->LastSec1 = 1;} \
420 // Increase TxTsc value for next transmission
421 // TODO:
422 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
423 // Should send a special event microsoft defined to request re-key
424 #define INC_TX_TSC(_tsc) \
426 int i=0; \
427 while (++_tsc[i] == 0x0) \
429 i++; \
430 if (i == 6) \
431 break; \
435 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
436 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
438 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
439 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
440 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
441 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
442 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
443 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
444 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
445 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
446 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
447 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
448 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
449 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
452 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
454 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
455 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
456 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
460 // BBP & RF are using indirect access. Before write any value into it.
461 // We have to make sure there is no outstanding command pending via checking busy bit.
463 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
466 #ifdef RT2870
467 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
468 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
469 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
471 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
472 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
473 #endif // RT2870 //
475 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
476 switch (ch) \
478 case 1: khz = 2412000; break; \
479 case 2: khz = 2417000; break; \
480 case 3: khz = 2422000; break; \
481 case 4: khz = 2427000; break; \
482 case 5: khz = 2432000; break; \
483 case 6: khz = 2437000; break; \
484 case 7: khz = 2442000; break; \
485 case 8: khz = 2447000; break; \
486 case 9: khz = 2452000; break; \
487 case 10: khz = 2457000; break; \
488 case 11: khz = 2462000; break; \
489 case 12: khz = 2467000; break; \
490 case 13: khz = 2472000; break; \
491 case 14: khz = 2484000; break; \
492 case 36: /* UNII */ khz = 5180000; break; \
493 case 40: /* UNII */ khz = 5200000; break; \
494 case 44: /* UNII */ khz = 5220000; break; \
495 case 48: /* UNII */ khz = 5240000; break; \
496 case 52: /* UNII */ khz = 5260000; break; \
497 case 56: /* UNII */ khz = 5280000; break; \
498 case 60: /* UNII */ khz = 5300000; break; \
499 case 64: /* UNII */ khz = 5320000; break; \
500 case 149: /* UNII */ khz = 5745000; break; \
501 case 153: /* UNII */ khz = 5765000; break; \
502 case 157: /* UNII */ khz = 5785000; break; \
503 case 161: /* UNII */ khz = 5805000; break; \
504 case 165: /* UNII */ khz = 5825000; break; \
505 case 100: /* HiperLAN2 */ khz = 5500000; break; \
506 case 104: /* HiperLAN2 */ khz = 5520000; break; \
507 case 108: /* HiperLAN2 */ khz = 5540000; break; \
508 case 112: /* HiperLAN2 */ khz = 5560000; break; \
509 case 116: /* HiperLAN2 */ khz = 5580000; break; \
510 case 120: /* HiperLAN2 */ khz = 5600000; break; \
511 case 124: /* HiperLAN2 */ khz = 5620000; break; \
512 case 128: /* HiperLAN2 */ khz = 5640000; break; \
513 case 132: /* HiperLAN2 */ khz = 5660000; break; \
514 case 136: /* HiperLAN2 */ khz = 5680000; break; \
515 case 140: /* HiperLAN2 */ khz = 5700000; break; \
516 case 34: /* Japan MMAC */ khz = 5170000; break; \
517 case 38: /* Japan MMAC */ khz = 5190000; break; \
518 case 42: /* Japan MMAC */ khz = 5210000; break; \
519 case 46: /* Japan MMAC */ khz = 5230000; break; \
520 case 184: /* Japan */ khz = 4920000; break; \
521 case 188: /* Japan */ khz = 4940000; break; \
522 case 192: /* Japan */ khz = 4960000; break; \
523 case 196: /* Japan */ khz = 4980000; break; \
524 case 208: /* Japan, means J08 */ khz = 5040000; break; \
525 case 212: /* Japan, means J12 */ khz = 5060000; break; \
526 case 216: /* Japan, means J16 */ khz = 5080000; break; \
527 default: khz = 2412000; break; \
531 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
532 switch (khz) \
534 case 2412000: ch = 1; break; \
535 case 2417000: ch = 2; break; \
536 case 2422000: ch = 3; break; \
537 case 2427000: ch = 4; break; \
538 case 2432000: ch = 5; break; \
539 case 2437000: ch = 6; break; \
540 case 2442000: ch = 7; break; \
541 case 2447000: ch = 8; break; \
542 case 2452000: ch = 9; break; \
543 case 2457000: ch = 10; break; \
544 case 2462000: ch = 11; break; \
545 case 2467000: ch = 12; break; \
546 case 2472000: ch = 13; break; \
547 case 2484000: ch = 14; break; \
548 case 5180000: ch = 36; /* UNII */ break; \
549 case 5200000: ch = 40; /* UNII */ break; \
550 case 5220000: ch = 44; /* UNII */ break; \
551 case 5240000: ch = 48; /* UNII */ break; \
552 case 5260000: ch = 52; /* UNII */ break; \
553 case 5280000: ch = 56; /* UNII */ break; \
554 case 5300000: ch = 60; /* UNII */ break; \
555 case 5320000: ch = 64; /* UNII */ break; \
556 case 5745000: ch = 149; /* UNII */ break; \
557 case 5765000: ch = 153; /* UNII */ break; \
558 case 5785000: ch = 157; /* UNII */ break; \
559 case 5805000: ch = 161; /* UNII */ break; \
560 case 5825000: ch = 165; /* UNII */ break; \
561 case 5500000: ch = 100; /* HiperLAN2 */ break; \
562 case 5520000: ch = 104; /* HiperLAN2 */ break; \
563 case 5540000: ch = 108; /* HiperLAN2 */ break; \
564 case 5560000: ch = 112; /* HiperLAN2 */ break; \
565 case 5580000: ch = 116; /* HiperLAN2 */ break; \
566 case 5600000: ch = 120; /* HiperLAN2 */ break; \
567 case 5620000: ch = 124; /* HiperLAN2 */ break; \
568 case 5640000: ch = 128; /* HiperLAN2 */ break; \
569 case 5660000: ch = 132; /* HiperLAN2 */ break; \
570 case 5680000: ch = 136; /* HiperLAN2 */ break; \
571 case 5700000: ch = 140; /* HiperLAN2 */ break; \
572 case 5170000: ch = 34; /* Japan MMAC */ break; \
573 case 5190000: ch = 38; /* Japan MMAC */ break; \
574 case 5210000: ch = 42; /* Japan MMAC */ break; \
575 case 5230000: ch = 46; /* Japan MMAC */ break; \
576 case 4920000: ch = 184; /* Japan */ break; \
577 case 4940000: ch = 188; /* Japan */ break; \
578 case 4960000: ch = 192; /* Japan */ break; \
579 case 4980000: ch = 196; /* Japan */ break; \
580 case 5040000: ch = 208; /* Japan, means J08 */ break; \
581 case 5060000: ch = 212; /* Japan, means J12 */ break; \
582 case 5080000: ch = 216; /* Japan, means J16 */ break; \
583 default: ch = 1; break; \
588 // Common fragment list structure - Identical to the scatter gather frag list structure
590 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
591 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
592 #define NIC_MAX_PHYS_BUF_COUNT 8
594 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
595 PVOID Address;
596 ULONG Length;
597 PULONG Reserved;
598 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
601 typedef struct _RTMP_SCATTER_GATHER_LIST {
602 ULONG NumberOfElements;
603 PULONG Reserved;
604 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
605 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
608 // Some utility macros
610 #ifndef min
611 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
612 #endif
614 #ifndef max
615 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
616 #endif
618 #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))))
620 #define INC_COUNTER64(Val) (Val.QuadPart++)
622 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
623 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
624 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
625 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
627 // Check LEAP & CCKM flags
628 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
629 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
631 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
632 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
634 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
636 _pExtraLlcSnapEncap = SNAP_802_1H; \
637 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
638 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
640 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
643 else \
645 _pExtraLlcSnapEncap = NULL; \
649 // New Define for new Tx Path.
650 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
652 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
654 _pExtraLlcSnapEncap = SNAP_802_1H; \
655 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
656 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
658 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
661 else \
663 _pExtraLlcSnapEncap = NULL; \
668 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
670 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
671 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
672 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
675 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
676 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
677 // else remove the LLC/SNAP field from the result Ethernet frame
678 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
679 // Note:
680 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
681 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
682 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
684 char LLC_Len[2]; \
686 _pRemovedLLCSNAP = NULL; \
687 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
688 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
690 PUCHAR pProto = _pData + 6; \
692 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
693 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
695 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
696 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
697 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
699 else \
701 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
702 _pRemovedLLCSNAP = _pData; \
703 _DataSize -= LENGTH_802_1_H; \
704 _pData += LENGTH_802_1_H; \
707 else \
709 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
710 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
711 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
715 #define SWITCH_AB( _pAA, _pBB) \
717 PVOID pCC; \
718 pCC = _pBB; \
719 _pBB = _pAA; \
720 _pAA = pCC; \
723 // Enqueue this frame to MLME engine
724 // We need to enqueue the whole frame because MLME need to pass data type
725 // information from 802.11 header
726 #ifdef RT2870
727 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
729 UINT32 High32TSF=0, Low32TSF=0; \
730 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
732 #endif // RT2870 //
734 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
735 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
737 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
738 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
741 // Check if it is Japan W53(ch52,56,60,64) channel.
743 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
745 #define STA_PORT_SECURED(_pAd) \
747 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
748 NdisAcquireSpinLock(&_pAd->MacTabLock); \
749 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
750 NdisReleaseSpinLock(&_pAd->MacTabLock); \
754 // Register set pair for initialzation register set definition
756 typedef struct _RTMP_REG_PAIR
758 ULONG Register;
759 ULONG Value;
760 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
762 typedef struct _REG_PAIR
764 UCHAR Register;
765 UCHAR Value;
766 } REG_PAIR, *PREG_PAIR;
769 // Register set pair for initialzation register set definition
771 typedef struct _RTMP_RF_REGS
773 UCHAR Channel;
774 ULONG R1;
775 ULONG R2;
776 ULONG R3;
777 ULONG R4;
778 } RTMP_RF_REGS, *PRTMP_RF_REGS;
780 typedef struct _FREQUENCY_ITEM {
781 UCHAR Channel;
782 UCHAR N;
783 UCHAR R;
784 UCHAR K;
785 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
788 // Data buffer for DMA operation, the buffer must be contiguous physical memory
789 // Both DMA to / from CPU use the same structure.
791 typedef struct _RTMP_DMABUF
793 ULONG AllocSize;
794 PVOID AllocVa; // TxBuf virtual address
795 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
796 } RTMP_DMABUF, *PRTMP_DMABUF;
799 typedef union _HEADER_802_11_SEQ{
800 struct {
801 USHORT Frag:4;
802 USHORT Sequence:12;
803 } field;
804 USHORT value;
805 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
808 // Data buffer for DMA operation, the buffer must be contiguous physical memory
809 // Both DMA to / from CPU use the same structure.
811 typedef struct _RTMP_REORDERBUF
813 BOOLEAN IsFull;
814 PVOID AllocVa; // TxBuf virtual address
815 UCHAR Header802_3[14];
816 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
817 UCHAR DataOffset;
818 USHORT Datasize;
819 ULONG AllocSize;
820 #ifdef RT2870
821 PUCHAR AllocPa;
822 #endif // RT2870 //
823 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
826 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
827 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
828 // which won't be released, driver has to wait until upper layer return the packet
829 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
830 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
831 // which driver should ACK upper layer when the tx is physically done or failed.
833 typedef struct _RTMP_DMACB
835 ULONG AllocSize; // Control block size
836 PVOID AllocVa; // Control block virtual address
837 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
838 PNDIS_PACKET pNdisPacket;
839 PNDIS_PACKET pNextNdisPacket;
841 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
842 } RTMP_DMACB, *PRTMP_DMACB;
844 typedef struct _RTMP_TX_BUF
846 PQUEUE_ENTRY Next;
847 UCHAR Index;
848 ULONG AllocSize; // Control block size
849 PVOID AllocVa; // Control block virtual address
850 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
851 } RTMP_TXBUF, *PRTMP_TXBUF;
853 typedef struct _RTMP_RX_BUF
855 BOOLEAN InUse;
856 ULONG ByBaRecIndex;
857 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
858 } RTMP_RXBUF, *PRTMP_RXBUF;
859 typedef struct _RTMP_TX_RING
861 RTMP_DMACB Cell[TX_RING_SIZE];
862 UINT32 TxCpuIdx;
863 UINT32 TxDmaIdx;
864 UINT32 TxSwFreeIdx; // software next free tx index
865 } RTMP_TX_RING, *PRTMP_TX_RING;
867 typedef struct _RTMP_RX_RING
869 RTMP_DMACB Cell[RX_RING_SIZE];
870 UINT32 RxCpuIdx;
871 UINT32 RxDmaIdx;
872 INT32 RxSwReadIdx; // software next read index
873 } RTMP_RX_RING, *PRTMP_RX_RING;
875 typedef struct _RTMP_MGMT_RING
877 RTMP_DMACB Cell[MGMT_RING_SIZE];
878 UINT32 TxCpuIdx;
879 UINT32 TxDmaIdx;
880 UINT32 TxSwFreeIdx; // software next free tx index
881 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
884 // Statistic counter structure
886 typedef struct _COUNTER_802_3
888 // General Stats
889 ULONG GoodTransmits;
890 ULONG GoodReceives;
891 ULONG TxErrors;
892 ULONG RxErrors;
893 ULONG RxNoBuffer;
895 // Ethernet Stats
896 ULONG RcvAlignmentErrors;
897 ULONG OneCollision;
898 ULONG MoreCollisions;
900 } COUNTER_802_3, *PCOUNTER_802_3;
902 typedef struct _COUNTER_802_11 {
903 ULONG Length;
904 LARGE_INTEGER LastTransmittedFragmentCount;
905 LARGE_INTEGER TransmittedFragmentCount;
906 LARGE_INTEGER MulticastTransmittedFrameCount;
907 LARGE_INTEGER FailedCount;
908 LARGE_INTEGER RetryCount;
909 LARGE_INTEGER MultipleRetryCount;
910 LARGE_INTEGER RTSSuccessCount;
911 LARGE_INTEGER RTSFailureCount;
912 LARGE_INTEGER ACKFailureCount;
913 LARGE_INTEGER FrameDuplicateCount;
914 LARGE_INTEGER ReceivedFragmentCount;
915 LARGE_INTEGER MulticastReceivedFrameCount;
916 LARGE_INTEGER FCSErrorCount;
917 } COUNTER_802_11, *PCOUNTER_802_11;
919 typedef struct _COUNTER_RALINK {
920 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
921 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
922 ULONG BeenDisassociatedCount;
923 ULONG BadCQIAutoRecoveryCount;
924 ULONG PoorCQIRoamingCount;
925 ULONG MgmtRingFullCount;
926 ULONG RxCountSinceLastNULL;
927 ULONG RxCount;
928 ULONG RxRingErrCount;
929 ULONG KickTxCount;
930 ULONG TxRingErrCount;
931 LARGE_INTEGER RealFcsErrCount;
932 ULONG PendingNdisPacketCount;
934 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
935 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
936 UINT32 OneSecTxDoneCount;
937 ULONG OneSecRxCount;
938 UINT32 OneSecTxAggregationCount;
939 UINT32 OneSecRxAggregationCount;
941 UINT32 OneSecFrameDuplicateCount;
943 #ifdef RT2870
944 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
945 #endif // RT2870 //
947 UINT32 OneSecTxNoRetryOkCount;
948 UINT32 OneSecTxRetryOkCount;
949 UINT32 OneSecTxFailCount;
950 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
951 UINT32 OneSecRxOkCnt; // RX without error
952 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
953 UINT32 OneSecRxFcsErrCnt; // CRC error
954 UINT32 OneSecBeaconSentCnt;
955 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
956 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
957 ULONG DuplicateRcv;
958 ULONG TxAggCount;
959 ULONG TxNonAggCount;
960 ULONG TxAgg1MPDUCount;
961 ULONG TxAgg2MPDUCount;
962 ULONG TxAgg3MPDUCount;
963 ULONG TxAgg4MPDUCount;
964 ULONG TxAgg5MPDUCount;
965 ULONG TxAgg6MPDUCount;
966 ULONG TxAgg7MPDUCount;
967 ULONG TxAgg8MPDUCount;
968 ULONG TxAgg9MPDUCount;
969 ULONG TxAgg10MPDUCount;
970 ULONG TxAgg11MPDUCount;
971 ULONG TxAgg12MPDUCount;
972 ULONG TxAgg13MPDUCount;
973 ULONG TxAgg14MPDUCount;
974 ULONG TxAgg15MPDUCount;
975 ULONG TxAgg16MPDUCount;
977 LARGE_INTEGER TransmittedOctetsInAMSDU;
978 LARGE_INTEGER TransmittedAMSDUCount;
979 LARGE_INTEGER ReceivedOctesInAMSDUCount;
980 LARGE_INTEGER ReceivedAMSDUCount;
981 LARGE_INTEGER TransmittedAMPDUCount;
982 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
983 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
984 LARGE_INTEGER MPDUInReceivedAMPDUCount;
985 } COUNTER_RALINK, *PCOUNTER_RALINK;
987 typedef struct _PID_COUNTER {
988 ULONG TxAckRequiredCount; // CRC error
989 ULONG TxAggreCount;
990 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
991 ULONG LastSuccessRate;
992 } PID_COUNTER, *PPID_COUNTER;
994 typedef struct _COUNTER_DRS {
995 // to record the each TX rate's quality. 0 is best, the bigger the worse.
996 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
997 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
998 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
999 ULONG CurrTxRateStableTime; // # of second in current TX rate
1000 BOOLEAN fNoisyEnvironment;
1001 BOOLEAN fLastSecAccordingRSSI;
1002 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1003 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1004 ULONG LastTxOkCount;
1005 } COUNTER_DRS, *PCOUNTER_DRS;
1008 // Arcfour Structure Added by PaulWu
1010 typedef struct _ARCFOUR
1012 UINT X;
1013 UINT Y;
1014 UCHAR STATE[256];
1015 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1017 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1018 typedef struct _RECEIVE_SETTING {
1019 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1020 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1021 USHORT ShortGI:1;
1022 USHORT STBC:2; //SPACE
1023 USHORT rsv:3;
1024 USHORT OFDM:1;
1025 USHORT MIMO:1;
1026 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1028 // Shared key data structure
1029 typedef struct _WEP_KEY {
1030 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1031 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1032 } WEP_KEY, *PWEP_KEY;
1034 typedef struct _CIPHER_KEY {
1035 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1036 UCHAR RxMic[8]; // make alignment
1037 UCHAR TxMic[8];
1038 UCHAR TxTsc[6]; // 48bit TSC value
1039 UCHAR RxTsc[6]; // 48bit TSC value
1040 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1041 UCHAR KeyLen;
1042 UCHAR BssId[6];
1043 // Key length for each key, 0: entry is invalid
1044 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1045 } CIPHER_KEY, *PCIPHER_KEY;
1047 typedef struct _BBP_TUNING_STRUCT {
1048 BOOLEAN Enable;
1049 UCHAR FalseCcaCountUpperBound; // 100 per sec
1050 UCHAR FalseCcaCountLowerBound; // 10 per sec
1051 UCHAR R17LowerBound; // specified in E2PROM
1052 UCHAR R17UpperBound; // 0x68 according to David Tung
1053 UCHAR CurrentR17Value;
1054 } BBP_TUNING, *PBBP_TUNING;
1056 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1057 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1058 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1059 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1060 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1061 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1062 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1063 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1064 SHORT Pair1LastAvgRssi; //
1065 SHORT Pair2LastAvgRssi; //
1066 ULONG RcvPktNumWhenEvaluate;
1067 BOOLEAN FirstPktArrivedWhenEvaluate;
1068 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1069 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1071 typedef struct _LEAP_AUTH_INFO {
1072 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1073 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1074 UCHAR Reserve[2];
1075 UCHAR UserName[256]; //LEAP, User name
1076 ULONG UserNameLen;
1077 UCHAR Password[256]; //LEAP, User Password
1078 ULONG PasswordLen;
1079 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1081 typedef struct {
1082 UCHAR Addr[MAC_ADDR_LEN];
1083 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1084 //00 02-Authentication timeout
1085 //00 03-Challenge from AP failed
1086 //00 04-Challenge to AP failed
1087 BOOLEAN Reported;
1088 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1090 typedef struct {
1091 UCHAR RogueApNr;
1092 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1093 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1095 typedef struct {
1096 BOOLEAN Enable;
1097 UCHAR Delta;
1098 BOOLEAN PlusSign;
1099 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1102 // Receive Tuple Cache Format
1104 typedef struct _TUPLE_CACHE {
1105 BOOLEAN Valid;
1106 UCHAR MacAddress[MAC_ADDR_LEN];
1107 USHORT Sequence;
1108 USHORT Frag;
1109 } TUPLE_CACHE, *PTUPLE_CACHE;
1112 // Fragment Frame structure
1114 typedef struct _FRAGMENT_FRAME {
1115 PNDIS_PACKET pFragPacket;
1116 ULONG RxSize;
1117 USHORT Sequence;
1118 USHORT LastFrag;
1119 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1120 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1124 // Packet information for NdisQueryPacket
1126 typedef struct _PACKET_INFO {
1127 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1128 UINT BufferCount ; // Number of Buffer descriptor chained
1129 UINT TotalPacketLength ; // Self explained
1130 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1131 } PACKET_INFO, *PPACKET_INFO;
1134 // Tkip Key structure which RC4 key & MIC calculation
1136 typedef struct _TKIP_KEY_INFO {
1137 UINT nBytesInM; // # bytes in M for MICKEY
1138 ULONG IV16;
1139 ULONG IV32;
1140 ULONG K0; // for MICKEY Low
1141 ULONG K1; // for MICKEY Hig
1142 ULONG L; // Current state for MICKEY
1143 ULONG R; // Current state for MICKEY
1144 ULONG M; // Message accumulator for MICKEY
1145 UCHAR RC4KEY[16];
1146 UCHAR MIC[8];
1147 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1150 // Private / Misc data, counters for driver internal use
1152 typedef struct __PRIVATE_STRUC {
1153 UINT SystemResetCnt; // System reset counter
1154 UINT TxRingFullCnt; // Tx ring full occurrance number
1155 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1156 // Variables for WEP encryption / decryption in rtmp_wep.c
1157 UINT FCSCRC32;
1158 ARCFOURCONTEXT WEPCONTEXT;
1159 // Tkip stuff
1160 TKIP_KEY_INFO Tx;
1161 TKIP_KEY_INFO Rx;
1162 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1164 // structure to tune BBP R66 (BBP TUNING)
1165 typedef struct _BBP_R66_TUNING {
1166 BOOLEAN bEnable;
1167 USHORT FalseCcaLowerThreshold; // default 100
1168 USHORT FalseCcaUpperThreshold; // default 512
1169 UCHAR R66Delta;
1170 UCHAR R66CurrentValue;
1171 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1172 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1174 // structure to store channel TX power
1175 typedef struct _CHANNEL_TX_POWER {
1176 USHORT RemainingTimeForUse; //unit: sec
1177 UCHAR Channel;
1178 CHAR Power;
1179 CHAR Power2;
1180 UCHAR MaxTxPwr;
1181 UCHAR DfsReq;
1182 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1184 // structure to store 802.11j channel TX power
1185 typedef struct _CHANNEL_11J_TX_POWER {
1186 UCHAR Channel;
1187 UCHAR BW; // BW_10 or BW_20
1188 CHAR Power;
1189 CHAR Power2;
1190 USHORT RemainingTimeForUse; //unit: sec
1191 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1193 typedef enum _ABGBAND_STATE_ {
1194 UNKNOWN_BAND,
1195 BG_BAND,
1196 A_BAND,
1197 } ABGBAND_STATE;
1199 typedef struct _MLME_STRUCT {
1200 // STA state machines
1201 STATE_MACHINE CntlMachine;
1202 STATE_MACHINE AssocMachine;
1203 STATE_MACHINE AuthMachine;
1204 STATE_MACHINE AuthRspMachine;
1205 STATE_MACHINE SyncMachine;
1206 STATE_MACHINE WpaPskMachine;
1207 STATE_MACHINE LeapMachine;
1208 STATE_MACHINE AironetMachine;
1209 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1210 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1211 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1212 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1213 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1214 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1215 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1216 // Action
1217 STATE_MACHINE ActMachine;
1219 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1220 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1221 ULONG LastSendNULLpsmTime;
1223 BOOLEAN bRunning;
1224 NDIS_SPIN_LOCK TaskLock;
1225 MLME_QUEUE Queue;
1227 UINT ShiftReg;
1229 RALINK_TIMER_STRUCT PeriodicTimer;
1230 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1231 RALINK_TIMER_STRUCT LinkDownTimer;
1232 RALINK_TIMER_STRUCT LinkUpTimer;
1233 ULONG PeriodicRound;
1234 ULONG OneSecPeriodicRound;
1236 UCHAR RealRxPath;
1237 BOOLEAN bLowThroughput;
1238 BOOLEAN bEnableAutoAntennaCheck;
1239 RALINK_TIMER_STRUCT RxAntEvalTimer;
1241 #ifdef RT2870
1242 UCHAR CaliBW40RfR24;
1243 UCHAR CaliBW20RfR24;
1244 #endif // RT2870 //
1246 } MLME_STRUCT, *PMLME_STRUCT;
1248 // structure for radar detection and channel switch
1249 typedef struct _RADAR_DETECT_STRUCT {
1250 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1251 UCHAR CSCount; //Channel switch counter
1252 UCHAR CSPeriod; //Channel switch period (beacon count)
1253 UCHAR RDCount; //Radar detection counter
1254 UCHAR RDMode; //Radar Detection mode
1255 UCHAR RDDurRegion; //Radar detection duration region
1256 UCHAR BBPR16;
1257 UCHAR BBPR17;
1258 UCHAR BBPR18;
1259 UCHAR BBPR21;
1260 UCHAR BBPR22;
1261 UCHAR BBPR64;
1262 ULONG InServiceMonitorCount; // unit: sec
1263 UINT8 DfsSessionTime;
1264 BOOLEAN bFastDfs;
1265 UINT8 ChMovingTime;
1266 UINT8 LongPulseRadarTh;
1267 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1269 typedef enum _REC_BLOCKACK_STATUS
1271 Recipient_NONE=0,
1272 Recipient_USED,
1273 Recipient_HandleRes,
1274 Recipient_Accept
1275 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1277 typedef enum _ORI_BLOCKACK_STATUS
1279 Originator_NONE=0,
1280 Originator_USED,
1281 Originator_WaitRes,
1282 Originator_Done
1283 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1285 typedef struct _BA_ORI_ENTRY{
1286 UCHAR Wcid;
1287 UCHAR TID;
1288 UCHAR BAWinSize;
1289 UCHAR Token;
1290 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1291 USHORT Sequence;
1292 USHORT TimeOutValue;
1293 ORI_BLOCKACK_STATUS ORI_BA_Status;
1294 RALINK_TIMER_STRUCT ORIBATimer;
1295 PVOID pAdapter;
1296 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1298 typedef struct _BA_REC_ENTRY {
1299 UCHAR Wcid;
1300 UCHAR TID;
1301 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1302 //UCHAR NumOfRxPkt;
1303 //UCHAR Curindidx; // the head in the RX reordering buffer
1304 USHORT LastIndSeq;
1305 // USHORT LastIndSeqAtTimer;
1306 USHORT TimeOutValue;
1307 RALINK_TIMER_STRUCT RECBATimer;
1308 ULONG LastIndSeqAtTimer;
1309 ULONG nDropPacket;
1310 ULONG rcvSeq;
1311 REC_BLOCKACK_STATUS REC_BA_Status;
1312 // UCHAR RxBufIdxUsed;
1313 // corresponding virtual address for RX reordering packet storage.
1314 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1315 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1316 // struct _BA_REC_ENTRY *pNext;
1317 PVOID pAdapter;
1318 struct reordering_list list;
1319 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1322 typedef struct {
1323 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1324 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1325 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1326 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1327 } BA_TABLE, *PBA_TABLE;
1329 //For QureyBATableOID use;
1330 typedef struct PACKED _OID_BA_REC_ENTRY{
1331 UCHAR MACAddr[MAC_ADDR_LEN];
1332 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1333 UCHAR rsv;
1334 UCHAR BufSize[8];
1335 REC_BLOCKACK_STATUS REC_BA_Status[8];
1336 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1338 //For QureyBATableOID use;
1339 typedef struct PACKED _OID_BA_ORI_ENTRY{
1340 UCHAR MACAddr[MAC_ADDR_LEN];
1341 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
1342 UCHAR rsv;
1343 UCHAR BufSize[8];
1344 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1345 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1347 typedef struct _QUERYBA_TABLE{
1348 OID_BA_ORI_ENTRY BAOriEntry[32];
1349 OID_BA_REC_ENTRY BARecEntry[32];
1350 UCHAR OriNum;// Number of below BAOriEntry
1351 UCHAR RecNum;// Number of below BARecEntry
1352 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1354 typedef union _BACAP_STRUC {
1355 struct {
1356 UINT32 RxBAWinLimit:8;
1357 UINT32 TxBAWinLimit:8;
1358 UINT32 AutoBA:1; // automatically BA
1359 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1360 UINT32 MpduDensity:3;
1361 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1362 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1363 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1364 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1365 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.
1366 UINT32 :4;
1367 } field;
1368 UINT32 word;
1369 } BACAP_STRUC, *PBACAP_STRUC;
1371 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1372 typedef struct _IOT_STRUC {
1373 UCHAR Threshold[2];
1374 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1375 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1376 ULONG OneSecInWindowCount;
1377 ULONG OneSecFrameDuplicateCount;
1378 ULONG OneSecOutWindowCount;
1379 UCHAR DelOriAct;
1380 UCHAR DelRecAct;
1381 UCHAR RTSShortProt;
1382 UCHAR RTSLongProt;
1383 BOOLEAN bRTSLongProtOn;
1384 BOOLEAN bLastAtheros;
1385 BOOLEAN bCurrentAtheros;
1386 BOOLEAN bNowAtherosBurstOn;
1387 BOOLEAN bNextDisableRxBA;
1388 BOOLEAN bToggle;
1389 } IOT_STRUC, *PIOT_STRUC;
1391 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1392 typedef union _REG_TRANSMIT_SETTING {
1393 struct {
1394 //UINT32 PhyMode:4;
1395 //UINT32 MCS:7; // MCS
1396 UINT32 rsv0:10;
1397 UINT32 TxBF:1;
1398 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1399 UINT32 ShortGI:1;
1400 UINT32 STBC:1; //SPACE
1401 UINT32 TRANSNO:2;
1402 UINT32 HTMODE:1;
1403 UINT32 EXTCHA:2;
1404 UINT32 rsv:13;
1405 } field;
1406 UINT32 word;
1407 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1409 typedef union _DESIRED_TRANSMIT_SETTING {
1410 struct {
1411 USHORT MCS:7; // MCS
1412 USHORT PhyMode:4;
1413 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1414 USHORT rsv:3;
1415 } field;
1416 USHORT word;
1417 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1419 typedef struct {
1420 BOOLEAN IsRecipient;
1421 UCHAR MACAddr[MAC_ADDR_LEN];
1422 UCHAR TID;
1423 UCHAR nMSDU;
1424 USHORT TimeOut;
1425 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1426 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1429 // Multiple SSID structure
1431 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1432 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1434 /* clear bcmc TIM bit */
1435 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1436 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1438 /* set bcmc TIM bit */
1439 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1440 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1442 /* clear a station PS TIM bit */
1443 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1444 { UCHAR tim_offset = wcid >> 3; \
1445 UCHAR bit_offset = wcid & 0x7; \
1446 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1448 /* set a station PS TIM bit */
1449 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1450 { UCHAR tim_offset = wcid >> 3; \
1451 UCHAR bit_offset = wcid & 0x7; \
1452 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1454 #ifdef RT2870
1455 #define BEACON_BITMAP_MASK 0xff
1456 typedef struct _BEACON_SYNC_STRUCT_
1458 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1459 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1460 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1461 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1462 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1463 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1464 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1465 }BEACON_SYNC_STRUCT;
1466 #endif // RT2870 //
1468 typedef struct _MULTISSID_STRUCT {
1469 UCHAR Bssid[MAC_ADDR_LEN];
1470 UCHAR SsidLen;
1471 CHAR Ssid[MAX_LEN_OF_SSID];
1472 USHORT CapabilityInfo;
1474 PNET_DEV MSSIDDev;
1476 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1477 NDIS_802_11_WEP_STATUS WepStatus;
1478 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1479 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1481 ULONG TxCount;
1482 ULONG RxCount;
1483 ULONG ReceivedByteCount;
1484 ULONG TransmittedByteCount;
1485 ULONG RxErrorCount;
1486 ULONG RxDropCount;
1488 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1489 RT_HT_PHY_INFO DesiredHtPhyInfo;
1490 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1491 BOOLEAN bAutoTxRateSwitch;
1493 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1494 UCHAR DefaultKeyId;
1496 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1497 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1498 UCHAR DesiredRatesIndex;
1499 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1501 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1502 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1503 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1505 // WPA
1506 UCHAR GMK[32];
1507 UCHAR PMK[32];
1508 UCHAR GTK[32];
1509 BOOLEAN IEEE8021X;
1510 BOOLEAN PreAuth;
1511 UCHAR GNonce[32];
1512 UCHAR PortSecured;
1513 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1514 UCHAR BANClass3Data;
1515 ULONG IsolateInterStaTraffic;
1517 UCHAR RSNIE_Len[2];
1518 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1521 UCHAR TimIELocationInBeacon;
1522 UCHAR CapabilityInfoLocationInBeacon;
1523 // outgoing BEACON frame buffer and corresponding TXWI
1524 // PTXWI_STRUC BeaconTxWI; //
1525 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1527 BOOLEAN bHideSsid;
1528 UINT16 StationKeepAliveTime; // unit: second
1530 USHORT VLAN_VID;
1531 USHORT VLAN_Priority;
1533 RT_802_11_ACL AccessControlList;
1535 // EDCA Qos
1536 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1537 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1539 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1541 // For 802.1x daemon setting per BSS
1542 UCHAR radius_srv_num;
1543 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1545 #ifdef RTL865X_SOC
1546 unsigned int mylinkid;
1547 #endif
1550 UINT32 RcvdConflictSsidCount;
1551 UINT32 RcvdSpoofedAssocRespCount;
1552 UINT32 RcvdSpoofedReassocRespCount;
1553 UINT32 RcvdSpoofedProbeRespCount;
1554 UINT32 RcvdSpoofedBeaconCount;
1555 UINT32 RcvdSpoofedDisassocCount;
1556 UINT32 RcvdSpoofedAuthCount;
1557 UINT32 RcvdSpoofedDeauthCount;
1558 UINT32 RcvdSpoofedUnknownMgmtCount;
1559 UINT32 RcvdReplayAttackCount;
1561 CHAR RssiOfRcvdConflictSsid;
1562 CHAR RssiOfRcvdSpoofedAssocResp;
1563 CHAR RssiOfRcvdSpoofedReassocResp;
1564 CHAR RssiOfRcvdSpoofedProbeResp;
1565 CHAR RssiOfRcvdSpoofedBeacon;
1566 CHAR RssiOfRcvdSpoofedDisassoc;
1567 CHAR RssiOfRcvdSpoofedAuth;
1568 CHAR RssiOfRcvdSpoofedDeauth;
1569 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1570 CHAR RssiOfRcvdReplayAttack;
1572 BOOLEAN bBcnSntReq;
1573 UCHAR BcnBufIdx;
1574 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1576 // configuration common to OPMODE_AP as well as OPMODE_STA
1577 typedef struct _COMMON_CONFIG {
1579 BOOLEAN bCountryFlag;
1580 UCHAR CountryCode[3];
1581 UCHAR Geography;
1582 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1583 UCHAR CountryRegionForABand; // Enum of country region for A band
1584 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1585 USHORT Dsifs; // in units of usec
1586 ULONG PacketFilter; // Packet filter for receiving
1588 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1589 UCHAR SsidLen; // the actual ssid length in used
1590 UCHAR LastSsidLen; // the actual ssid length in used
1591 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1592 UCHAR LastBssid[MAC_ADDR_LEN];
1594 UCHAR Bssid[MAC_ADDR_LEN];
1595 USHORT BeaconPeriod;
1596 UCHAR Channel;
1597 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1599 #if 0 // move to STA_ADMIN_CONFIG
1600 UCHAR DefaultKeyId;
1602 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1603 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1604 NDIS_802_11_WEP_STATUS WepStatus;
1605 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1607 // Add to support different cipher suite for WPA2/WPA mode
1608 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1609 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1610 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1611 USHORT RsnCapability;
1613 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1614 #endif
1616 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1617 UCHAR SupRateLen;
1618 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1619 UCHAR ExtRateLen;
1620 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1621 UCHAR MaxDesiredRate;
1622 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1624 ULONG BasicRateBitmap; // backup basic ratebitmap
1626 BOOLEAN bAPSDCapable;
1627 BOOLEAN bInServicePeriod;
1628 BOOLEAN bAPSDAC_BE;
1629 BOOLEAN bAPSDAC_BK;
1630 BOOLEAN bAPSDAC_VI;
1631 BOOLEAN bAPSDAC_VO;
1632 BOOLEAN bNeedSendTriggerFrame;
1633 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1634 ULONG TriggerTimerCount;
1635 UCHAR MaxSPLength;
1636 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1637 // move to MULTISSID_STRUCT for MBSS
1638 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1639 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1640 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1641 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1642 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1643 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1644 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1645 //BOOLEAN bAutoTxRateSwitch;
1646 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1647 UCHAR RtsRate; // RATE_xxx
1648 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1649 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1650 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1652 USHORT RtsThreshold; // in unit of BYTE
1653 USHORT FragmentThreshold; // in unit of BYTE
1655 UCHAR TxPower; // in unit of mW
1656 ULONG TxPowerPercentage; // 0~100 %
1657 ULONG TxPowerDefault; // keep for TxPowerPercentage
1659 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1660 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1662 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1663 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1664 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1665 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1666 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1667 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1668 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1669 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1670 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1671 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1673 BOOLEAN bRdg;
1675 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1676 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1677 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1678 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1679 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1680 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1681 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1682 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1683 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1684 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1685 ULONG OpStatusFlags;
1687 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1688 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1690 // IEEE802.11H--DFS.
1691 RADAR_DETECT_STRUCT RadarDetect;
1693 // HT
1694 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1695 //RT_HT_CAPABILITY SupportedHtPhy;
1696 RT_HT_CAPABILITY DesiredHtPhy;
1697 HT_CAPABILITY_IE HtCapability;
1698 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1699 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1700 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1701 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
1703 BOOLEAN bHTProtect;
1704 BOOLEAN bMIMOPSEnable;
1705 BOOLEAN bBADecline;
1706 BOOLEAN bDisableReordering;
1707 BOOLEAN bForty_Mhz_Intolerant;
1708 BOOLEAN bExtChannelSwitchAnnouncement;
1709 BOOLEAN bRcvBSSWidthTriggerEvents;
1710 ULONG LastRcvBSSWidthTriggerEventsTime;
1712 UCHAR TxBASize;
1714 // Enable wireless event
1715 BOOLEAN bWirelessEvent;
1716 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1718 // Tx & Rx Stream number selection
1719 UCHAR TxStream;
1720 UCHAR RxStream;
1722 // transmit phy mode, trasmit rate for Multicast.
1723 #ifdef MCAST_RATE_SPECIFIC
1724 UCHAR McastTransmitMcs;
1725 UCHAR McastTransmitPhyMode;
1726 #endif // MCAST_RATE_SPECIFIC //
1728 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1730 #ifdef RT2870
1731 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1732 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1733 RT_HT_CAPABILITY SupportedHtPhy;
1734 ULONG MaxPktOneTxBulk;
1735 UCHAR TxBulkFactor;
1736 UCHAR RxBulkFactor;
1738 BEACON_SYNC_STRUCT *pBeaconSync;
1739 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1740 UINT32 BeaconAdjust;
1741 UINT32 BeaconFactor;
1742 UINT32 BeaconRemain;
1743 #endif // RT2870 //
1746 NDIS_SPIN_LOCK MeasureReqTabLock;
1747 PMEASURE_REQ_TAB pMeasureReqTab;
1749 NDIS_SPIN_LOCK TpcReqTabLock;
1750 PTPC_REQ_TAB pTpcReqTab;
1752 // transmit phy mode, trasmit rate for Multicast.
1753 #ifdef MCAST_RATE_SPECIFIC
1754 HTTRANSMIT_SETTING MCastPhyMode;
1755 #endif // MCAST_RATE_SPECIFIC //
1756 } COMMON_CONFIG, *PCOMMON_CONFIG;
1758 /* Modified by Wu Xi-Kun 4/21/2006 */
1759 // STA configuration and status
1760 typedef struct _STA_ADMIN_CONFIG {
1761 // GROUP 1 -
1762 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1763 // the user intended configuration, but not necessary fully equal to the final
1764 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1765 // AP or IBSS holder).
1766 // Once initialized, user configuration can only be changed via OID_xxx
1767 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1768 USHORT AtimWin; // used when starting a new IBSS
1770 // GROUP 2 -
1771 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1772 // the user intended configuration, and should be always applied to the final
1773 // settings in ACTIVE BSS without compromising with the BSS holder.
1774 // Once initialized, user configuration can only be changed via OID_xxx
1775 UCHAR RssiTrigger;
1776 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1777 USHORT DefaultListenCount; // default listen count;
1778 ULONG WindowsPowerMode; // Power mode for AC power
1779 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1780 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1781 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1782 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1784 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1785 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1786 USHORT DisassocReason;
1787 UCHAR DisassocSta[MAC_ADDR_LEN];
1788 USHORT DeauthReason;
1789 UCHAR DeauthSta[MAC_ADDR_LEN];
1790 USHORT AuthFailReason;
1791 UCHAR AuthFailSta[MAC_ADDR_LEN];
1793 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1794 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1795 NDIS_802_11_WEP_STATUS WepStatus;
1796 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1798 // Add to support different cipher suite for WPA2/WPA mode
1799 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1800 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1801 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1802 USHORT RsnCapability;
1804 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1806 UCHAR PMK[32]; // WPA PSK mode PMK
1807 UCHAR PTK[64]; // WPA PSK mode PTK
1808 UCHAR GTK[32]; // GTK from authenticator
1809 BSSID_INFO SavedPMK[PMKID_NO];
1810 UINT SavedPMKNum; // Saved PMKID number
1812 UCHAR DefaultKeyId;
1815 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1816 UCHAR PortSecured;
1818 // For WPA countermeasures
1819 ULONG LastMicErrorTime; // record last MIC error time
1820 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1821 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1822 // For WPA-PSK supplicant state
1823 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1824 UCHAR ReplayCounter[8];
1825 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1826 UCHAR SNonce[32]; // SNonce for WPA-PSK
1828 UCHAR LastSNR0; // last received BEACON's SNR
1829 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1830 RSSI_SAMPLE RssiSample;
1831 ULONG NumOfAvgRssiSample;
1833 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1834 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1835 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1836 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1838 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1839 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1840 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1841 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1842 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1843 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1844 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1847 // New for WPA, windows want us to to keep association information and
1848 // Fixed IEs from last association response
1849 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1850 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1851 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1852 USHORT ResVarIELen; // Length of next VIE include EID & Length
1853 UCHAR ResVarIEs[MAX_VIE_LEN];
1855 UCHAR RSNIE_Len;
1856 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
1858 // New variables used for CCX 1.0
1859 BOOLEAN bCkipOn;
1860 BOOLEAN bCkipCmicOn;
1861 UCHAR CkipFlag;
1862 UCHAR GIV[3]; //for CCX iv
1863 UCHAR RxSEQ[4];
1864 UCHAR TxSEQ[4];
1865 UCHAR CKIPMIC[4];
1866 UCHAR LeapAuthMode;
1867 LEAP_AUTH_INFO LeapAuthInfo;
1868 UCHAR HashPwd[16];
1869 UCHAR NetworkChallenge[8];
1870 UCHAR NetworkChallengeResponse[24];
1871 UCHAR PeerChallenge[8];
1873 UCHAR PeerChallengeResponse[24];
1874 UCHAR SessionKey[16]; //Network session keys (NSK)
1875 RALINK_TIMER_STRUCT LeapAuthTimer;
1876 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
1878 // New control flags for CCX
1879 CCX_CONTROL CCXControl; // Master administration state
1880 BOOLEAN CCXEnable; // Actual CCX state
1881 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
1882 USHORT CCXScanTime; // Time out to wait for beacon and probe response
1883 UCHAR CCXReqType; // Current processing CCX request type
1884 BSS_TABLE CCXBssTab; // BSS Table
1885 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
1886 USHORT FrameReportLen; // Current Frame report length
1887 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
1888 USHORT RPIDensity[8]; // Array for RPI density collection
1889 // Start address of each BSS table within FrameReportBuf
1890 // It's important to update the RxPower of the corresponding Bss
1891 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
1892 USHORT BeaconToken; // Token for beacon report
1893 ULONG LastBssIndex; // Most current reported Bss index
1894 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
1895 UCHAR RMReqCnt; // Number of measurement request saved.
1896 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
1897 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
1898 // It must be the same channel with maximum duration
1899 USHORT ParallelDuration; // Maximum duration for parallel measurement
1900 UCHAR ParallelChannel; // Only one channel with parallel measurement
1901 USHORT IAPPToken; // IAPP dialog token
1902 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
1903 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
1904 // Hack for channel load and noise histogram parameters
1905 UCHAR NHFactor; // Parameter for Noise histogram
1906 UCHAR CLFactor; // Parameter for channel load
1908 UCHAR KRK[16]; //Key Refresh Key.
1909 UCHAR BTK[32]; //Base Transient Key
1910 BOOLEAN CCKMLinkUpFlag;
1911 ULONG CCKMRN; //(Re)Association request number.
1912 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
1913 UCHAR AironetCellPowerLimit; //in dBm
1914 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
1915 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
1916 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
1917 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
1918 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
1919 USHORT CCXAdjacentAPChannel;
1920 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
1922 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
1923 BOOLEAN StaQuickResponeForRateUpTimerRunning;
1925 UCHAR DtimCount; // 0.. DtimPeriod-1
1926 UCHAR DtimPeriod; // default = 3
1928 ////////////////////////////////////////////////////////////////////////////////////////
1929 // This is only for WHQL test.
1930 BOOLEAN WhqlTest;
1931 ////////////////////////////////////////////////////////////////////////////////////////
1933 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
1934 // Fast Roaming
1935 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
1936 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
1938 BOOLEAN IEEE8021X;
1939 BOOLEAN IEEE8021x_required_keys;
1940 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
1941 UCHAR DesireSharedKeyId;
1943 // 0: driver ignores wpa_supplicant
1944 // 1: wpa_supplicant initiates scanning and AP selection
1945 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
1946 UCHAR WpaSupplicantUP;
1947 UCHAR WpaSupplicantScanCount;
1949 CHAR dev_name[16];
1950 USHORT OriDevType;
1952 BOOLEAN bTGnWifiTest;
1953 BOOLEAN bScanReqIsFromWebUI;
1955 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1956 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
1957 RT_HT_PHY_INFO DesiredHtPhyInfo;
1958 BOOLEAN bAutoTxRateSwitch;
1959 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
1961 // This data structure keep the current active BSS/IBSS's configuration that this STA
1962 // had agreed upon joining the network. Which means these parameters are usually decided
1963 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
1964 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
1965 // Normally, after SCAN or failed roaming attempts, we need to recover back to
1966 // the current active settings.
1967 typedef struct _STA_ACTIVE_CONFIG {
1968 USHORT Aid;
1969 USHORT AtimWin; // in kusec; IBSS parameter set element
1970 USHORT CapabilityInfo;
1971 USHORT CfpMaxDuration;
1972 USHORT CfpPeriod;
1974 // Copy supported rate from desired AP's beacon. We are trying to match
1975 // AP's supported and extended rate settings.
1976 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1977 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1978 UCHAR SupRateLen;
1979 UCHAR ExtRateLen;
1980 // Copy supported ht from desired AP's beacon. We are trying to match
1981 RT_HT_PHY_INFO SupportedPhyInfo;
1982 RT_HT_CAPABILITY SupportedHtPhy;
1983 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
1985 #ifdef RT2870
1986 // for USB interface, avoid in interrupt when write key
1987 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
1988 NDIS_802_11_MAC_ADDRESS MacAddr;
1989 USHORT MacTabMatchWCID; // ASIC
1990 CIPHER_KEY CipherKey;
1991 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
1992 #endif // RT2870 //
1994 // ----------- start of AP --------------------------
1995 // AUTH-RSP State Machine Aux data structure
1996 typedef struct _AP_MLME_AUX {
1997 UCHAR Addr[MAC_ADDR_LEN];
1998 USHORT Alg;
1999 CHAR Challenge[CIPHER_TEXT_LEN];
2000 } AP_MLME_AUX, *PAP_MLME_AUX;
2002 // structure to define WPA Group Key Rekey Interval
2003 typedef struct PACKED _RT_802_11_WPA_REKEY {
2004 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2005 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2006 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2008 typedef struct _MAC_TABLE_ENTRY {
2009 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2010 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2011 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2012 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2013 BOOLEAN ValidAsMesh;
2014 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2015 BOOLEAN isCached;
2016 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2018 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2019 //jan for wpa
2020 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2021 UCHAR CMTimerRunning;
2022 UCHAR apidx; // MBSS number
2023 UCHAR RSNIE_Len;
2024 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2025 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2026 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2027 UCHAR PTK[64];
2028 UCHAR ReTryCounter;
2029 RALINK_TIMER_STRUCT RetryTimer;
2030 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2031 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2032 NDIS_802_11_WEP_STATUS WepStatus;
2033 AP_WPA_STATE WpaState;
2034 GTK_STATE GTKState;
2035 USHORT PortSecured;
2036 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2037 CIPHER_KEY PairwiseKey;
2038 PVOID pAd;
2039 INT PMKID_CacheIdx;
2040 UCHAR PMKID[LEN_PMKID];
2043 UCHAR Addr[MAC_ADDR_LEN];
2044 UCHAR PsMode;
2045 SST Sst;
2046 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2047 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2048 USHORT Aid;
2049 USHORT CapabilityInfo;
2050 UCHAR LastRssi;
2051 ULONG NoDataIdleCount;
2052 UINT16 StationKeepAliveCount; // unit: second
2053 ULONG PsQIdleCount;
2054 QUEUE_HEADER PsQueue;
2056 UINT32 StaConnectTime; // the live time of this station since associated with AP
2058 BOOLEAN bSendBAR;
2059 USHORT NoBADataCountDown;
2061 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2062 UINT TxBFCount; // 3*3
2063 UINT FIFOCount;
2064 UINT DebugFIFOCount;
2065 UINT DebugTxCount;
2066 BOOLEAN bDlsInit;
2069 //====================================================
2070 //WDS entry needs these
2071 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2072 UINT MatchWDSTabIdx;
2073 UCHAR MaxSupportedRate;
2074 UCHAR CurrTxRate;
2075 UCHAR CurrTxRateIndex;
2076 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2077 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2078 // USHORT OneSecTxOkCount;
2079 UINT32 OneSecTxNoRetryOkCount;
2080 UINT32 OneSecTxRetryOkCount;
2081 UINT32 OneSecTxFailCount;
2082 UINT32 ContinueTxFailCnt;
2083 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2084 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2085 //====================================================
2087 BOOLEAN fNoisyEnvironment;
2088 BOOLEAN fLastSecAccordingRSSI;
2089 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2090 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2091 ULONG LastTxOkCount;
2092 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2094 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2095 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2096 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2097 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2098 ULONG ClientStatusFlags;
2100 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2102 // HT EWC MIMO-N used parameters
2103 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2104 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2105 USHORT TXAutoBAbitmap;
2106 USHORT BADeclineBitmap;
2107 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2108 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2109 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2111 // 802.11n features.
2112 UCHAR MpduDensity;
2113 UCHAR MaxRAmpduFactor;
2114 UCHAR AMsduSize;
2115 UCHAR MmpsMode; // MIMO power save more.
2117 HT_CAPABILITY_IE HTCapability;
2119 BOOLEAN bAutoTxRateSwitch;
2121 UCHAR RateLen;
2122 struct _MAC_TABLE_ENTRY *pNext;
2123 USHORT TxSeq[NUM_OF_TID];
2124 USHORT NonQosDataSeq;
2126 RSSI_SAMPLE RssiSample;
2128 UINT32 TXMCSExpected[16];
2129 UINT32 TXMCSSuccessful[16];
2130 UINT32 TXMCSFailed[16];
2131 UINT32 TXMCSAutoFallBack[16][16];
2133 ULONG LastBeaconRxTime;
2134 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2136 typedef struct _MAC_TABLE {
2137 USHORT Size;
2138 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2139 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2140 QUEUE_HEADER McastPsQueue;
2141 ULONG PsQIdleCount;
2142 BOOLEAN fAnyStationInPsm;
2143 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2144 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2145 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2146 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2147 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2148 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2149 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2150 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2151 } MAC_TABLE, *PMAC_TABLE;
2153 #define IS_HT_STA(_pMacEntry) \
2154 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2156 #define IS_HT_RATE(_pMacEntry) \
2157 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2159 #define PEER_IS_HT_RATE(_pMacEntry) \
2160 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2162 typedef struct _WDS_ENTRY {
2163 BOOLEAN Valid;
2164 UCHAR Addr[MAC_ADDR_LEN];
2165 ULONG NoDataIdleCount;
2166 struct _WDS_ENTRY *pNext;
2167 } WDS_ENTRY, *PWDS_ENTRY;
2169 typedef struct _WDS_TABLE_ENTRY {
2170 USHORT Size;
2171 UCHAR WdsAddr[MAC_ADDR_LEN];
2172 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2173 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2174 UCHAR MaxSupportedRate;
2175 UCHAR CurrTxRate;
2176 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2177 USHORT OneSecTxOkCount;
2178 USHORT OneSecTxRetryOkCount;
2179 USHORT OneSecTxFailCount;
2180 ULONG CurrTxRateStableTime; // # of second in current TX rate
2181 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2182 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2184 typedef struct _RT_802_11_WDS_ENTRY {
2185 PNET_DEV dev;
2186 UCHAR Valid;
2187 UCHAR PhyMode;
2188 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2189 UCHAR MacTabMatchWCID; // ASIC
2190 NDIS_802_11_WEP_STATUS WepStatus;
2191 UCHAR KeyIdx;
2192 CIPHER_KEY WdsKey;
2193 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2194 RT_HT_PHY_INFO DesiredHtPhyInfo;
2195 BOOLEAN bAutoTxRateSwitch;
2196 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2197 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2199 typedef struct _WDS_TABLE {
2200 UCHAR Mode;
2201 ULONG Size;
2202 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2203 } WDS_TABLE, *PWDS_TABLE;
2205 typedef struct _APCLI_STRUCT {
2206 PNET_DEV dev;
2207 #ifdef RTL865X_SOC
2208 unsigned int mylinkid;
2209 #endif
2210 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2211 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2212 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2213 UCHAR SsidLen;
2214 CHAR Ssid[MAX_LEN_OF_SSID];
2216 UCHAR CfgSsidLen;
2217 CHAR CfgSsid[MAX_LEN_OF_SSID];
2218 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2219 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2221 ULONG ApCliRcvBeaconTime;
2223 ULONG CtrlCurrState;
2224 ULONG SyncCurrState;
2225 ULONG AuthCurrState;
2226 ULONG AssocCurrState;
2227 ULONG WpaPskCurrState;
2229 USHORT AuthReqCnt;
2230 USHORT AssocReqCnt;
2232 ULONG ClientStatusFlags;
2233 UCHAR MpduDensity;
2235 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2236 NDIS_802_11_WEP_STATUS WepStatus;
2238 // Add to support different cipher suite for WPA2/WPA mode
2239 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2240 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2241 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2242 USHORT RsnCapability;
2244 UCHAR PSK[100]; // reserve PSK key material
2245 UCHAR PSKLen;
2246 UCHAR PMK[32]; // WPA PSK mode PMK
2247 //UCHAR PTK[64]; // WPA PSK mode PTK
2248 UCHAR GTK[32]; // GTK from authenticator
2250 //CIPHER_KEY PairwiseKey;
2251 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2252 UCHAR DefaultKeyId;
2254 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2255 //UCHAR PortSecured;
2257 // store RSN_IE built by driver
2258 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2259 UCHAR RSNIE_Len;
2261 // For WPA countermeasures
2262 ULONG LastMicErrorTime; // record last MIC error time
2263 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2264 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2266 // For WPA-PSK supplicant state
2267 //WPA_STATE WpaState; // Default is SS_NOTUSE
2268 //UCHAR ReplayCounter[8];
2269 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2270 UCHAR SNonce[32]; // SNonce for WPA-PSK
2271 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2273 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2274 RT_HT_PHY_INFO DesiredHtPhyInfo;
2275 BOOLEAN bAutoTxRateSwitch;
2276 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2277 } APCLI_STRUCT, *PAPCLI_STRUCT;
2279 // ----------- end of AP ----------------------------
2281 struct wificonf
2283 BOOLEAN bShortGI;
2284 BOOLEAN bGreenField;
2289 typedef struct _INF_PCI_CONFIG
2291 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2292 }INF_PCI_CONFIG;
2294 typedef struct _INF_USB_CONFIG
2296 UINT BulkInEpAddr; // bulk-in endpoint address
2297 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2299 }INF_USB_CONFIG;
2301 #ifdef IKANOS_VX_1X0
2302 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2304 struct IKANOS_TX_INFO
2306 struct net_device *netdev;
2307 IkanosWlanTxCbFuncP *fp;
2309 #endif // IKANOS_VX_1X0 //
2311 #ifdef DBG_DIAGNOSE
2312 #define DIAGNOSE_TIME 10 // 10 sec
2313 typedef struct _RtmpDiagStrcut_
2314 { // Diagnosis Related element
2315 unsigned char inited;
2316 unsigned char qIdx;
2317 unsigned char ArrayStartIdx;
2318 unsigned char ArrayCurIdx;
2319 // Tx Related Count
2320 USHORT TxDataCnt[DIAGNOSE_TIME];
2321 USHORT TxFailCnt[DIAGNOSE_TIME];
2322 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2323 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2324 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2325 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2326 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2328 USHORT TxAggCnt[DIAGNOSE_TIME];
2329 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2330 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2331 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2332 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2333 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2335 // Rx Related Count
2336 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2337 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2338 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2339 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2340 }RtmpDiagStruct;
2341 #endif // DBG_DIAGNOSE //
2345 // The miniport adapter structure
2347 typedef struct _RTMP_ADAPTER
2349 PVOID OS_Cookie; // save specific structure relative to OS
2350 PNET_DEV net_dev;
2351 ULONG VirtualIfCnt;
2355 NDIS_SPIN_LOCK irq_lock;
2356 UCHAR irq_disabled;
2358 #ifdef RT2870
2359 /*****************************************************************************************/
2360 /* USB related parameters */
2361 /*****************************************************************************************/
2362 struct usb_config_descriptor *config;
2363 UINT BulkInEpAddr; // bulk-in endpoint address
2364 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2366 UINT NumberOfPipes;
2367 USHORT BulkOutMaxPacketSize;
2368 USHORT BulkInMaxPacketSize;
2370 //======Control Flags
2371 LONG PendingIoCount;
2372 ULONG BulkFlags;
2373 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2376 //======Timer Thread
2377 RT2870_TIMER_QUEUE TimerQ;
2378 NDIS_SPIN_LOCK TimerQLock;
2381 //======Cmd Thread
2382 CmdQ CmdQ;
2383 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2385 BOOLEAN TimerFunc_kill;
2386 BOOLEAN mlme_kill;
2389 //======Semaphores (event)
2390 struct semaphore mlme_semaphore; /* to sleep thread on */
2391 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2392 struct semaphore RTUSBTimer_semaphore;
2394 struct completion TimerQComplete;
2395 struct completion mlmeComplete;
2396 struct completion CmdQComplete;
2397 wait_queue_head_t *wait;
2398 #endif // RT2870 //
2401 /*****************************************************************************************/
2402 /* Both PCI/USB related parameters */
2403 /*****************************************************************************************/
2406 /*****************************************************************************************/
2407 /* Tx related parameters */
2408 /*****************************************************************************************/
2409 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2410 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2412 #ifdef RT2870
2413 // Data related context and AC specified, 4 AC supported
2414 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2415 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2417 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2418 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2420 // 4 sets of Bulk Out index and pending flag
2421 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2423 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2424 UCHAR bulkResetPipeid;
2425 BOOLEAN MgmtBulkPending;
2426 ULONG bulkResetReq[6];
2427 #endif // RT2870 //
2429 // resource for software backlog queues
2430 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2431 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2433 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2434 RTMP_MGMT_RING MgmtRing;
2435 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2438 /*****************************************************************************************/
2439 /* Rx related parameters */
2440 /*****************************************************************************************/
2443 #ifdef RT2870
2444 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2445 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2446 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2447 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2448 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2449 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2450 ULONG TransferBufferLength; // current length of the packet buffer
2451 ULONG ReadPosition; // current read position in a packet buffer
2452 #endif // RT2870 //
2455 /*****************************************************************************************/
2456 /* ASIC related parameters */
2457 /*****************************************************************************************/
2458 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2460 // ---------------------------
2461 // E2PROM
2462 // ---------------------------
2463 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2464 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2465 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2466 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2468 // ---------------------------
2469 // BBP Control
2470 // ---------------------------
2471 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2472 UCHAR BbpRssiToDbmDelta;
2473 BBP_R66_TUNING BbpTuning;
2475 // ----------------------------
2476 // RFIC control
2477 // ----------------------------
2478 UCHAR RfIcType; // RFIC_xxx
2479 ULONG RfFreqOffset; // Frequency offset for channel switching
2480 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2482 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2483 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2485 // This soft Rx Antenna Diversity mechanism is used only when user set
2486 // RX Antenna = DIVERSITY ON
2487 SOFT_RX_ANT_DIVERSITY RxAnt;
2489 UCHAR RFProgSeq;
2490 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2491 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2492 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2493 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2495 UCHAR ChannelListNum; // number of channel in ChannelList[]
2496 UCHAR Bbp94;
2497 BOOLEAN BbpForCCK;
2498 ULONG Tx20MPwrCfgABand[5];
2499 ULONG Tx20MPwrCfgGBand[5];
2500 ULONG Tx40MPwrCfgABand[5];
2501 ULONG Tx40MPwrCfgGBand[5];
2503 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2504 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2505 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2506 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2507 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2508 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2510 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2511 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2512 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2513 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2514 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2515 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2517 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2518 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2519 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2520 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2521 //---
2523 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2524 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2525 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2526 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2527 //---
2529 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2530 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2531 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2532 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2534 // ----------------------------
2535 // LED control
2536 // ----------------------------
2537 MCU_LEDCS_STRUC LedCntl;
2538 USHORT Led1; // read from EEPROM 0x3c
2539 USHORT Led2; // EEPROM 0x3e
2540 USHORT Led3; // EEPROM 0x40
2541 UCHAR LedIndicatorStregth;
2542 UCHAR RssiSingalstrengthOffet;
2543 BOOLEAN bLedOnScanning;
2544 UCHAR LedStatus;
2546 /*****************************************************************************************/
2547 /* 802.11 related parameters */
2548 /*****************************************************************************************/
2549 // outgoing BEACON frame buffer and corresponding TXD
2550 TXWI_STRUC BeaconTxWI;
2551 PUCHAR BeaconBuf;
2552 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2554 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2555 PSPOLL_FRAME PsPollFrame;
2556 HEADER_802_11 NullFrame;
2558 #ifdef RT2870
2559 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2560 TX_CONTEXT NullContext;
2561 TX_CONTEXT PsPollContext;
2562 TX_CONTEXT RTSContext;
2563 #endif // RT2870 //
2567 //=========AP===========
2570 //=======STA===========
2571 /* Modified by Wu Xi-Kun 4/21/2006 */
2572 // -----------------------------------------------
2573 // STA specific configuration & operation status
2574 // used only when pAd->OpMode == OPMODE_STA
2575 // -----------------------------------------------
2576 STA_ADMIN_CONFIG StaCfg; // user desired settings
2577 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2578 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2579 NDIS_MEDIA_STATE PreMediaState;
2581 //=======Common===========
2582 // OP mode: either AP or STA
2583 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2585 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2588 // configuration: read from Registry & E2PROM
2589 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2590 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2591 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2593 // ------------------------------------------------------
2594 // common configuration to both OPMODE_STA and OPMODE_AP
2595 // ------------------------------------------------------
2596 COMMON_CONFIG CommonCfg;
2597 MLME_STRUCT Mlme;
2599 // AP needs those vaiables for site survey feature.
2600 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2601 BSS_TABLE ScanTab; // store the latest SCAN result
2603 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2604 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2605 NDIS_SPIN_LOCK MacTabLock;
2607 BA_TABLE BATable;
2609 NDIS_SPIN_LOCK BATabLock;
2610 RALINK_TIMER_STRUCT RECBATimer;
2612 // encryption/decryption KEY tables
2613 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2615 // RX re-assembly buffer for fragmentation
2616 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2618 // various Counters
2619 COUNTER_802_3 Counters8023; // 802.3 counters
2620 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2621 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2622 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2623 PRIVATE_STRUC PrivateInfo; // Private information & counters
2625 // flags, see fRTMP_ADAPTER_xxx flags
2626 ULONG Flags; // Represent current device status
2628 // current TX sequence #
2629 USHORT Sequence;
2631 // Control disconnect / connect event generation
2632 //+++Didn't used anymore
2633 ULONG LinkDownTime;
2634 //---
2635 ULONG LastRxRate;
2636 ULONG LastTxRate;
2637 //+++Used only for Station
2638 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2639 //---
2641 ULONG ExtraInfo; // Extra information for displaying status
2642 ULONG SystemErrorBitmap; // b0: E2PROM version error
2644 //+++Didn't used anymore
2645 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2646 //---
2648 // ---------------------------
2649 // System event log
2650 // ---------------------------
2651 RT_802_11_EVENT_TABLE EventTab;
2654 BOOLEAN HTCEnable;
2656 /*****************************************************************************************/
2657 /* Statistic related parameters */
2658 /*****************************************************************************************/
2659 #ifdef RT2870
2660 ULONG BulkOutDataOneSecCount;
2661 ULONG BulkInDataOneSecCount;
2662 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2663 ULONG watchDogRxCnt;
2664 ULONG watchDogRxOverFlowCnt;
2665 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2666 #endif // RT2870 //
2668 BOOLEAN bUpdateBcnCntDone;
2669 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2670 // ----------------------------
2671 // DEBUG paramerts
2672 // ----------------------------
2673 //ULONG DebugSetting[4];
2674 BOOLEAN bBanAllBaSetup;
2675 BOOLEAN bPromiscuous;
2677 // ----------------------------
2678 // rt2860c emulation-use Parameters
2679 // ----------------------------
2680 ULONG rtsaccu[30];
2681 ULONG ctsaccu[30];
2682 ULONG cfendaccu[30];
2683 ULONG bacontent[16];
2684 ULONG rxint[RX_RING_SIZE+1];
2685 UCHAR rcvba[60];
2686 BOOLEAN bLinkAdapt;
2687 BOOLEAN bForcePrintTX;
2688 BOOLEAN bForcePrintRX;
2689 BOOLEAN bDisablescanning; //defined in RT2870 USB
2690 BOOLEAN bStaFifoTest;
2691 BOOLEAN bProtectionTest;
2692 BOOLEAN bHCCATest;
2693 BOOLEAN bGenOneHCCA;
2694 BOOLEAN bBroadComHT;
2695 //+++Following add from RT2870 USB.
2696 ULONG BulkOutReq;
2697 ULONG BulkOutComplete;
2698 ULONG BulkOutCompleteOther;
2699 ULONG BulkOutCompleteCancel; // seems not use now?
2700 ULONG BulkInReq;
2701 ULONG BulkInComplete;
2702 ULONG BulkInCompleteFail;
2703 //---
2705 struct wificonf WIFItestbed;
2707 struct reordering_mpdu_pool mpdu_blk_pool;
2709 ULONG OneSecondnonBEpackets; // record non BE packets per second
2711 #if WIRELESS_EXT >= 12
2712 struct iw_statistics iw_stats;
2713 #endif
2715 struct net_device_stats stats;
2717 ULONG TbttTickCount;
2718 #ifdef PCI_MSI_SUPPORT
2719 BOOLEAN HaveMsi;
2720 #endif // PCI_MSI_SUPPORT //
2723 UCHAR is_on;
2725 #define TIME_BASE (1000000/OS_HZ)
2726 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2727 UCHAR flg_be_adjust;
2728 ULONG be_adjust_last_time;
2731 #ifdef IKANOS_VX_1X0
2732 struct IKANOS_TX_INFO IkanosTxInfo;
2733 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2734 #endif // IKANOS_VX_1X0 //
2737 #ifdef DBG_DIAGNOSE
2738 RtmpDiagStruct DiagStruct;
2739 #endif // DBG_DIAGNOSE //
2742 UINT8 PM_FlgSuspend;
2743 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2746 // Cisco IAPP format
2748 typedef struct _CISCO_IAPP_CONTENT_
2750 USHORT Length; //IAPP Length
2751 UCHAR MessageType; //IAPP type
2752 UCHAR FunctionCode; //IAPP function type
2753 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2754 UCHAR SourceMAC[MAC_ADDR_LEN];
2755 USHORT Tag; //Tag(element IE) - Adjacent AP report
2756 USHORT TagLength; //Length of element not including 4 byte header
2757 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2758 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2759 USHORT Channel;
2760 USHORT SsidLen;
2761 UCHAR Ssid[MAX_LEN_OF_SSID];
2762 USHORT Seconds; //Seconds that the client has been disassociated.
2763 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2765 #define DELAYINTMASK 0x0003fffb
2766 #define INTMASK 0x0003fffb
2767 #define IndMask 0x0003fffc
2768 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2769 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2770 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2771 #define TxCoherent 0x00020000 // tx coherent
2772 #define RxCoherent 0x00010000 // rx coherent
2773 #define McuCommand 0x00000200 // mcu
2774 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2775 #define TBTTInt 0x00000800 // TBTT interrupt
2776 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2777 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2778 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2781 typedef struct _RX_BLK_
2783 // RXD_STRUC RxD; // sample
2784 RT28XX_RXD_STRUC RxD;
2785 PRXWI_STRUC pRxWI;
2786 PHEADER_802_11 pHeader;
2787 PNDIS_PACKET pRxPacket;
2788 UCHAR *pData;
2789 USHORT DataSize;
2790 USHORT Flags;
2791 UCHAR UserPriority; // for calculate TKIP MIC using
2792 } RX_BLK;
2795 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2796 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2797 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2800 #define fRX_WDS 0x0001
2801 #define fRX_AMSDU 0x0002
2802 #define fRX_ARALINK 0x0004
2803 #define fRX_HTC 0x0008
2804 #define fRX_PAD 0x0010
2805 #define fRX_AMPDU 0x0020
2806 #define fRX_QOS 0x0040
2807 #define fRX_INFRA 0x0080
2808 #define fRX_EAP 0x0100
2809 #define fRX_MESH 0x0200
2810 #define fRX_APCLI 0x0400
2811 #define fRX_DLS 0x0800
2812 #define fRX_WPI 0x1000
2814 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2815 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2816 #define LENGTH_ARALINK_HEADER_FIELD 2
2818 #define TX_UNKOWN_FRAME 0x00
2819 #define TX_MCAST_FRAME 0x01
2820 #define TX_LEGACY_FRAME 0x02
2821 #define TX_AMPDU_FRAME 0x04
2822 #define TX_AMSDU_FRAME 0x08
2823 #define TX_RALINK_FRAME 0x10
2824 #define TX_FRAG_FRAME 0x20
2827 // Currently the sizeof(TX_BLK) is 148 bytes.
2828 typedef struct _TX_BLK_
2830 UCHAR QueIdx;
2831 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2832 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2833 USHORT TotalFragNum; // Total frame fragments required in one batch
2834 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2836 QUEUE_HEADER TxPacketList;
2837 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2838 HTTRANSMIT_SETTING *pTransmit;
2840 // Following structure used for the characteristics of a specific packet.
2841 PNDIS_PACKET pPacket;
2842 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2843 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2844 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2845 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2846 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2847 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2848 UCHAR HdrPadLen; // recording Header Padding Length;
2849 UCHAR apidx; // The interface associated to this packet
2850 UCHAR Wcid; // The MAC entry associated to this packet
2851 UCHAR UserPriority; // priority class of packet
2852 UCHAR FrameGap; // what kind of IFS this packet use
2853 UCHAR MpduReqNum; // number of fragments of this frame
2854 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2855 UCHAR CipherAlg; // cipher alogrithm
2856 PCIPHER_KEY pKey;
2860 USHORT Flags; //See following definitions for detail.
2862 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2863 ULONG Priv; // Hardware specific value saved in here.
2864 } TX_BLK, *PTX_BLK;
2867 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2868 #define fTX_bAckRequired 0x0002 // the packet need ack response
2869 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2870 #define fTX_bHTRate 0x0008 // allow to use HT rate
2871 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
2872 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2873 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2874 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2875 #define fTX_bWMM 0x0080 // QOS Data
2877 #define fTX_bClearEAPFrame 0x0100
2879 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
2880 do { \
2881 if (value) \
2882 (_pTxBlk->Flags |= _flag) \
2883 else \
2884 (_pTxBlk->Flags &= ~(_flag)) \
2885 }while(0)
2887 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2888 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2889 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2895 //------------------------------------------------------------------------------------------
2897 static inline VOID ConvertMulticastIP2MAC(
2898 IN PUCHAR pIpAddr,
2899 IN PUCHAR *ppMacAddr,
2900 IN UINT16 ProtoType)
2902 if (pIpAddr == NULL)
2903 return;
2905 if (ppMacAddr == NULL || *ppMacAddr == NULL)
2906 return;
2908 switch (ProtoType)
2910 case ETH_P_IPV6:
2911 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2912 *(*ppMacAddr) = 0x33;
2913 *(*ppMacAddr + 1) = 0x33;
2914 *(*ppMacAddr + 2) = pIpAddr[12];
2915 *(*ppMacAddr + 3) = pIpAddr[13];
2916 *(*ppMacAddr + 4) = pIpAddr[14];
2917 *(*ppMacAddr + 5) = pIpAddr[15];
2918 break;
2920 case ETH_P_IP:
2921 default:
2922 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2923 *(*ppMacAddr) = 0x01;
2924 *(*ppMacAddr + 1) = 0x00;
2925 *(*ppMacAddr + 2) = 0x5e;
2926 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
2927 *(*ppMacAddr + 4) = pIpAddr[2];
2928 *(*ppMacAddr + 5) = pIpAddr[3];
2929 break;
2932 return;
2935 BOOLEAN RTMPCheckForHang(
2936 IN NDIS_HANDLE MiniportAdapterContext
2939 VOID RTMPHalt(
2940 IN NDIS_HANDLE MiniportAdapterContext
2944 // Private routines in rtmp_init.c
2946 NDIS_STATUS RTMPAllocAdapterBlock(
2947 IN PVOID handle,
2948 OUT PRTMP_ADAPTER *ppAdapter
2951 NDIS_STATUS RTMPAllocTxRxRingMemory(
2952 IN PRTMP_ADAPTER pAd
2955 NDIS_STATUS RTMPFindAdapter(
2956 IN PRTMP_ADAPTER pAd,
2957 IN NDIS_HANDLE WrapperConfigurationContext
2960 NDIS_STATUS RTMPReadParametersHook(
2961 IN PRTMP_ADAPTER pAd
2964 VOID RTMPFreeAdapter(
2965 IN PRTMP_ADAPTER pAd
2968 NDIS_STATUS NICReadRegParameters(
2969 IN PRTMP_ADAPTER pAd,
2970 IN NDIS_HANDLE WrapperConfigurationContext
2973 #ifdef RT2870
2974 VOID NICInitRT30xxRFRegisters(
2975 IN PRTMP_ADAPTER pAd);
2976 #endif // RT2870 //
2978 VOID NICReadEEPROMParameters(
2979 IN PRTMP_ADAPTER pAd,
2980 IN PUCHAR mac_addr);
2982 VOID NICInitAsicFromEEPROM(
2983 IN PRTMP_ADAPTER pAd);
2985 VOID NICInitTxRxRingAndBacklogQueue(
2986 IN PRTMP_ADAPTER pAd);
2988 NDIS_STATUS NICInitializeAdapter(
2989 IN PRTMP_ADAPTER pAd,
2990 IN BOOLEAN bHardReset);
2992 NDIS_STATUS NICInitializeAsic(
2993 IN PRTMP_ADAPTER pAd,
2994 IN BOOLEAN bHardReset);
2996 VOID NICIssueReset(
2997 IN PRTMP_ADAPTER pAd);
2999 VOID RTMPRingCleanUp(
3000 IN PRTMP_ADAPTER pAd,
3001 IN UCHAR RingType);
3003 VOID RxTest(
3004 IN PRTMP_ADAPTER pAd);
3006 NDIS_STATUS DbgSendPacket(
3007 IN PRTMP_ADAPTER pAd,
3008 IN PNDIS_PACKET pPacket);
3010 VOID UserCfgInit(
3011 IN PRTMP_ADAPTER pAd);
3013 VOID NICResetFromError(
3014 IN PRTMP_ADAPTER pAd);
3016 VOID NICEraseFirmware(
3017 IN PRTMP_ADAPTER pAd);
3019 NDIS_STATUS NICLoadFirmware(
3020 IN PRTMP_ADAPTER pAd);
3022 NDIS_STATUS NICLoadRateSwitchingParams(
3023 IN PRTMP_ADAPTER pAd);
3025 BOOLEAN NICCheckForHang(
3026 IN PRTMP_ADAPTER pAd);
3028 VOID NICUpdateFifoStaCounters(
3029 IN PRTMP_ADAPTER pAd);
3031 VOID NICUpdateRawCounters(
3032 IN PRTMP_ADAPTER pAd);
3034 #if 0
3035 ULONG RTMPEqualMemory(
3036 IN PVOID pSrc1,
3037 IN PVOID pSrc2,
3038 IN ULONG Length);
3039 #endif
3041 ULONG RTMPNotAllZero(
3042 IN PVOID pSrc1,
3043 IN ULONG Length);
3045 VOID RTMPZeroMemory(
3046 IN PVOID pSrc,
3047 IN ULONG Length);
3049 ULONG RTMPCompareMemory(
3050 IN PVOID pSrc1,
3051 IN PVOID pSrc2,
3052 IN ULONG Length);
3054 VOID RTMPMoveMemory(
3055 OUT PVOID pDest,
3056 IN PVOID pSrc,
3057 IN ULONG Length);
3059 VOID AtoH(
3060 char *src,
3061 UCHAR *dest,
3062 int destlen);
3064 UCHAR BtoH(
3065 char ch);
3067 VOID RTMPPatchMacBbpBug(
3068 IN PRTMP_ADAPTER pAd);
3070 VOID RTMPPatchCardBus(
3071 IN PRTMP_ADAPTER pAdapter);
3073 VOID RTMPPatchRalinkCardBus(
3074 IN PRTMP_ADAPTER pAdapter,
3075 IN ULONG Bus);
3077 ULONG RTMPReadCBConfig(
3078 IN ULONG Bus,
3079 IN ULONG Slot,
3080 IN ULONG Func,
3081 IN ULONG Offset);
3083 VOID RTMPWriteCBConfig(
3084 IN ULONG Bus,
3085 IN ULONG Slot,
3086 IN ULONG Func,
3087 IN ULONG Offset,
3088 IN ULONG Value);
3090 VOID RTMPInitTimer(
3091 IN PRTMP_ADAPTER pAd,
3092 IN PRALINK_TIMER_STRUCT pTimer,
3093 IN PVOID pTimerFunc,
3094 IN PVOID pData,
3095 IN BOOLEAN Repeat);
3097 VOID RTMPSetTimer(
3098 IN PRALINK_TIMER_STRUCT pTimer,
3099 IN ULONG Value);
3102 VOID RTMPModTimer(
3103 IN PRALINK_TIMER_STRUCT pTimer,
3104 IN ULONG Value);
3106 VOID RTMPCancelTimer(
3107 IN PRALINK_TIMER_STRUCT pTimer,
3108 OUT BOOLEAN *pCancelled);
3110 VOID RTMPSetLED(
3111 IN PRTMP_ADAPTER pAd,
3112 IN UCHAR Status);
3114 VOID RTMPSetSignalLED(
3115 IN PRTMP_ADAPTER pAd,
3116 IN NDIS_802_11_RSSI Dbm);
3118 VOID RTMPEnableRxTx(
3119 IN PRTMP_ADAPTER pAd);
3122 // prototype in action.c
3124 VOID ActionStateMachineInit(
3125 IN PRTMP_ADAPTER pAd,
3126 IN STATE_MACHINE *S,
3127 OUT STATE_MACHINE_FUNC Trans[]);
3129 VOID MlmeADDBAAction(
3130 IN PRTMP_ADAPTER pAd,
3131 IN MLME_QUEUE_ELEM *Elem);
3133 VOID MlmeDELBAAction(
3134 IN PRTMP_ADAPTER pAd,
3135 IN MLME_QUEUE_ELEM *Elem);
3137 VOID MlmeDLSAction(
3138 IN PRTMP_ADAPTER pAd,
3139 IN MLME_QUEUE_ELEM *Elem);
3141 VOID MlmeInvalidAction(
3142 IN PRTMP_ADAPTER pAd,
3143 IN MLME_QUEUE_ELEM *Elem);
3145 VOID MlmeQOSAction(
3146 IN PRTMP_ADAPTER pAd,
3147 IN MLME_QUEUE_ELEM *Elem);
3149 VOID PeerAddBAReqAction(
3150 IN PRTMP_ADAPTER pAd,
3151 IN MLME_QUEUE_ELEM *Elem);
3153 VOID PeerAddBARspAction(
3154 IN PRTMP_ADAPTER pAd,
3155 IN MLME_QUEUE_ELEM *Elem);
3157 VOID PeerDelBAAction(
3158 IN PRTMP_ADAPTER pAd,
3159 IN MLME_QUEUE_ELEM *Elem);
3161 VOID PeerBAAction(
3162 IN PRTMP_ADAPTER pAd,
3163 IN MLME_QUEUE_ELEM *Elem);
3165 VOID SendPSMPAction(
3166 IN PRTMP_ADAPTER pAd,
3167 IN UCHAR Wcid,
3168 IN UCHAR Psmp);
3170 VOID PeerRMAction(
3171 IN PRTMP_ADAPTER pAd,
3172 IN MLME_QUEUE_ELEM *Elem);
3174 VOID PeerPublicAction(
3175 IN PRTMP_ADAPTER pAd,
3176 IN MLME_QUEUE_ELEM *Elem);
3178 VOID StaPublicAction(
3179 IN PRTMP_ADAPTER pAd,
3180 IN UCHAR Bss2040Coexist);
3182 VOID PeerBSSTranAction(
3183 IN PRTMP_ADAPTER pAd,
3184 IN MLME_QUEUE_ELEM *Elem);
3186 VOID PeerHTAction(
3187 IN PRTMP_ADAPTER pAd,
3188 IN MLME_QUEUE_ELEM *Elem);
3190 VOID PeerQOSAction(
3191 IN PRTMP_ADAPTER pAd,
3192 IN MLME_QUEUE_ELEM *Elem);
3194 VOID RECBATimerTimeout(
3195 IN PVOID SystemSpecific1,
3196 IN PVOID FunctionContext,
3197 IN PVOID SystemSpecific2,
3198 IN PVOID SystemSpecific3);
3200 VOID ORIBATimerTimeout(
3201 IN PRTMP_ADAPTER pAd);
3203 VOID SendRefreshBAR(
3204 IN PRTMP_ADAPTER pAd,
3205 IN MAC_TABLE_ENTRY *pEntry);
3207 VOID ActHeaderInit(
3208 IN PRTMP_ADAPTER pAd,
3209 IN OUT PHEADER_802_11 pHdr80211,
3210 IN PUCHAR Addr1,
3211 IN PUCHAR Addr2,
3212 IN PUCHAR Addr3);
3214 VOID BarHeaderInit(
3215 IN PRTMP_ADAPTER pAd,
3216 IN OUT PFRAME_BAR pCntlBar,
3217 IN PUCHAR pDA,
3218 IN PUCHAR pSA);
3220 VOID InsertActField(
3221 IN PRTMP_ADAPTER pAd,
3222 OUT PUCHAR pFrameBuf,
3223 OUT PULONG pFrameLen,
3224 IN UINT8 Category,
3225 IN UINT8 ActCode);
3227 BOOLEAN QosBADataParse(
3228 IN PRTMP_ADAPTER pAd,
3229 IN BOOLEAN bAMSDU,
3230 IN PUCHAR p8023Header,
3231 IN UCHAR WCID,
3232 IN UCHAR TID,
3233 IN USHORT Sequence,
3234 IN UCHAR DataOffset,
3235 IN USHORT Datasize,
3236 IN UINT CurRxIndex);
3238 BOOLEAN CntlEnqueueForRecv(
3239 IN PRTMP_ADAPTER pAd,
3240 IN ULONG Wcid,
3241 IN ULONG MsgLen,
3242 IN PFRAME_BA_REQ pMsg);
3244 VOID BaAutoManSwitch(
3245 IN PRTMP_ADAPTER pAd);
3247 VOID HTIOTCheck(
3248 IN PRTMP_ADAPTER pAd,
3249 IN UCHAR BatRecIdx);
3252 // Private routines in rtmp_data.c
3254 BOOLEAN RTMPHandleRxDoneInterrupt(
3255 IN PRTMP_ADAPTER pAd);
3257 VOID RTMPHandleTxDoneInterrupt(
3258 IN PRTMP_ADAPTER pAd);
3260 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3261 IN PRTMP_ADAPTER pAd,
3262 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3264 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3265 IN PRTMP_ADAPTER pAd);
3267 VOID RTMPHandleTBTTInterrupt(
3268 IN PRTMP_ADAPTER pAd);
3270 VOID RTMPHandlePreTBTTInterrupt(
3271 IN PRTMP_ADAPTER pAd);
3273 void RTMPHandleTwakeupInterrupt(
3274 IN PRTMP_ADAPTER pAd);
3276 VOID RTMPHandleRxCoherentInterrupt(
3277 IN PRTMP_ADAPTER pAd);
3279 BOOLEAN TxFrameIsAggregatible(
3280 IN PRTMP_ADAPTER pAd,
3281 IN PUCHAR pPrevAddr1,
3282 IN PUCHAR p8023hdr);
3284 BOOLEAN PeerIsAggreOn(
3285 IN PRTMP_ADAPTER pAd,
3286 IN ULONG TxRate,
3287 IN PMAC_TABLE_ENTRY pMacEntry);
3289 #if 0 // It's not be used
3290 HTTRANSMIT_SETTING *GetTxMode(
3291 IN PRTMP_ADAPTER pAd,
3292 IN TX_BLK *pTxBlk);
3293 #endif
3295 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3296 IN PNDIS_BUFFER pFirstBuffer,
3297 IN UCHAR DesiredOffset,
3298 OUT PUCHAR pByte0,
3299 OUT PUCHAR pByte1);
3301 NDIS_STATUS STASendPacket(
3302 IN PRTMP_ADAPTER pAd,
3303 IN PNDIS_PACKET pPacket);
3305 VOID STASendPackets(
3306 IN NDIS_HANDLE MiniportAdapterContext,
3307 IN PPNDIS_PACKET ppPacketArray,
3308 IN UINT NumberOfPackets);
3310 VOID RTMPDeQueuePacket(
3311 IN PRTMP_ADAPTER pAd,
3312 IN BOOLEAN bIntContext,
3313 IN UCHAR QueIdx,
3314 IN UCHAR Max_Tx_Packets);
3316 NDIS_STATUS RTMPHardTransmit(
3317 IN PRTMP_ADAPTER pAd,
3318 IN PNDIS_PACKET pPacket,
3319 IN UCHAR QueIdx,
3320 OUT PULONG pFreeTXDLeft);
3322 NDIS_STATUS STAHardTransmit(
3323 IN PRTMP_ADAPTER pAd,
3324 IN TX_BLK *pTxBlk,
3325 IN UCHAR QueIdx);
3327 VOID STARxEAPOLFrameIndicate(
3328 IN PRTMP_ADAPTER pAd,
3329 IN MAC_TABLE_ENTRY *pEntry,
3330 IN RX_BLK *pRxBlk,
3331 IN UCHAR FromWhichBSSID);
3333 NDIS_STATUS RTMPFreeTXDRequest(
3334 IN PRTMP_ADAPTER pAd,
3335 IN UCHAR RingType,
3336 IN UCHAR NumberRequired,
3337 IN PUCHAR FreeNumberIs);
3339 NDIS_STATUS MlmeHardTransmit(
3340 IN PRTMP_ADAPTER pAd,
3341 IN UCHAR QueIdx,
3342 IN PNDIS_PACKET pPacket);
3344 NDIS_STATUS MlmeHardTransmitMgmtRing(
3345 IN PRTMP_ADAPTER pAd,
3346 IN UCHAR QueIdx,
3347 IN PNDIS_PACKET pPacket);
3349 NDIS_STATUS MlmeHardTransmitTxRing(
3350 IN PRTMP_ADAPTER pAd,
3351 IN UCHAR QueIdx,
3352 IN PNDIS_PACKET pPacket);
3354 USHORT RTMPCalcDuration(
3355 IN PRTMP_ADAPTER pAd,
3356 IN UCHAR Rate,
3357 IN ULONG Size);
3359 VOID RTMPWriteTxWI(
3360 IN PRTMP_ADAPTER pAd,
3361 IN PTXWI_STRUC pTxWI,
3362 IN BOOLEAN FRAG,
3363 IN BOOLEAN CFACK,
3364 IN BOOLEAN InsTimestamp,
3365 IN BOOLEAN AMPDU,
3366 IN BOOLEAN Ack,
3367 IN BOOLEAN NSeq, // HW new a sequence.
3368 IN UCHAR BASize,
3369 IN UCHAR WCID,
3370 IN ULONG Length,
3371 IN UCHAR PID,
3372 IN UCHAR TID,
3373 IN UCHAR TxRate,
3374 IN UCHAR Txopmode,
3375 IN BOOLEAN CfAck,
3376 IN HTTRANSMIT_SETTING *pTransmit);
3379 VOID RTMPWriteTxWI_Data(
3380 IN PRTMP_ADAPTER pAd,
3381 IN OUT PTXWI_STRUC pTxWI,
3382 IN TX_BLK *pTxBlk);
3385 VOID RTMPWriteTxWI_Cache(
3386 IN PRTMP_ADAPTER pAd,
3387 IN OUT PTXWI_STRUC pTxWI,
3388 IN TX_BLK *pTxBlk);
3390 VOID RTMPWriteTxDescriptor(
3391 IN PRTMP_ADAPTER pAd,
3392 IN PTXD_STRUC pTxD,
3393 IN BOOLEAN bWIV,
3394 IN UCHAR QSEL);
3396 VOID RTMPSuspendMsduTransmission(
3397 IN PRTMP_ADAPTER pAd);
3399 VOID RTMPResumeMsduTransmission(
3400 IN PRTMP_ADAPTER pAd);
3402 NDIS_STATUS MiniportMMRequest(
3403 IN PRTMP_ADAPTER pAd,
3404 IN UCHAR QueIdx,
3405 IN PUCHAR pData,
3406 IN UINT Length);
3408 NDIS_STATUS MiniportDataMMRequest(
3409 IN PRTMP_ADAPTER pAd,
3410 IN UCHAR QueIdx,
3411 IN PUCHAR pData,
3412 IN UINT Length);
3414 VOID RTMPSendNullFrame(
3415 IN PRTMP_ADAPTER pAd,
3416 IN UCHAR TxRate,
3417 IN BOOLEAN bQosNull);
3419 VOID RTMPSendDisassociationFrame(
3420 IN PRTMP_ADAPTER pAd);
3422 VOID RTMPSendRTSFrame(
3423 IN PRTMP_ADAPTER pAd,
3424 IN PUCHAR pDA,
3425 IN unsigned int NextMpduSize,
3426 IN UCHAR TxRate,
3427 IN UCHAR RTSRate,
3428 IN USHORT AckDuration,
3429 IN UCHAR QueIdx,
3430 IN UCHAR FrameGap);
3433 NDIS_STATUS RTMPApplyPacketFilter(
3434 IN PRTMP_ADAPTER pAd,
3435 IN PRT28XX_RXD_STRUC pRxD,
3436 IN PHEADER_802_11 pHeader);
3438 PQUEUE_HEADER RTMPCheckTxSwQueue(
3439 IN PRTMP_ADAPTER pAd,
3440 OUT UCHAR *QueIdx);
3442 VOID RTMPReportMicError(
3443 IN PRTMP_ADAPTER pAd,
3444 IN PCIPHER_KEY pWpaKey);
3446 VOID WpaMicFailureReportFrame(
3447 IN PRTMP_ADAPTER pAd,
3448 IN MLME_QUEUE_ELEM *Elem);
3450 VOID WpaDisassocApAndBlockAssoc(
3451 IN PVOID SystemSpecific1,
3452 IN PVOID FunctionContext,
3453 IN PVOID SystemSpecific2,
3454 IN PVOID SystemSpecific3);
3456 NDIS_STATUS RTMPCloneNdisPacket(
3457 IN PRTMP_ADAPTER pAd,
3458 IN BOOLEAN pInsAMSDUHdr,
3459 IN PNDIS_PACKET pInPacket,
3460 OUT PNDIS_PACKET *ppOutPacket);
3462 NDIS_STATUS RTMPAllocateNdisPacket(
3463 IN PRTMP_ADAPTER pAd,
3464 IN PNDIS_PACKET *pPacket,
3465 IN PUCHAR pHeader,
3466 IN UINT HeaderLen,
3467 IN PUCHAR pData,
3468 IN UINT DataLen);
3470 VOID RTMPFreeNdisPacket(
3471 IN PRTMP_ADAPTER pAd,
3472 IN PNDIS_PACKET pPacket);
3474 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3475 IN PRTMP_ADAPTER pAd,
3476 IN UCHAR QueIdx);
3478 BOOLEAN RTMPCheckDHCPFrame(
3479 IN PRTMP_ADAPTER pAd,
3480 IN PNDIS_PACKET pPacket);
3483 BOOLEAN RTMPCheckEtherType(
3484 IN PRTMP_ADAPTER pAd,
3485 IN PNDIS_PACKET pPacket);
3488 VOID RTMPCckBbpTuning(
3489 IN PRTMP_ADAPTER pAd,
3490 IN UINT TxRate);
3493 // Private routines in rtmp_wep.c
3495 VOID RTMPInitWepEngine(
3496 IN PRTMP_ADAPTER pAd,
3497 IN PUCHAR pKey,
3498 IN UCHAR KeyId,
3499 IN UCHAR KeyLen,
3500 IN PUCHAR pDest);
3502 VOID RTMPEncryptData(
3503 IN PRTMP_ADAPTER pAd,
3504 IN PUCHAR pSrc,
3505 IN PUCHAR pDest,
3506 IN UINT Len);
3508 BOOLEAN RTMPDecryptData(
3509 IN PRTMP_ADAPTER pAdapter,
3510 IN PUCHAR pSrc,
3511 IN UINT Len,
3512 IN UINT idx);
3514 BOOLEAN RTMPSoftDecryptWEP(
3515 IN PRTMP_ADAPTER pAd,
3516 IN PUCHAR pData,
3517 IN ULONG DataByteCnt,
3518 IN PCIPHER_KEY pGroupKey);
3520 VOID RTMPSetICV(
3521 IN PRTMP_ADAPTER pAd,
3522 IN PUCHAR pDest);
3524 VOID ARCFOUR_INIT(
3525 IN PARCFOURCONTEXT Ctx,
3526 IN PUCHAR pKey,
3527 IN UINT KeyLen);
3529 UCHAR ARCFOUR_BYTE(
3530 IN PARCFOURCONTEXT Ctx);
3532 VOID ARCFOUR_DECRYPT(
3533 IN PARCFOURCONTEXT Ctx,
3534 IN PUCHAR pDest,
3535 IN PUCHAR pSrc,
3536 IN UINT Len);
3538 VOID ARCFOUR_ENCRYPT(
3539 IN PARCFOURCONTEXT Ctx,
3540 IN PUCHAR pDest,
3541 IN PUCHAR pSrc,
3542 IN UINT Len);
3544 VOID WPAARCFOUR_ENCRYPT(
3545 IN PARCFOURCONTEXT Ctx,
3546 IN PUCHAR pDest,
3547 IN PUCHAR pSrc,
3548 IN UINT Len);
3550 UINT RTMP_CALC_FCS32(
3551 IN UINT Fcs,
3552 IN PUCHAR Cp,
3553 IN INT Len);
3556 // MLME routines
3559 // Asic/RF/BBP related functions
3561 VOID AsicAdjustTxPower(
3562 IN PRTMP_ADAPTER pAd);
3564 VOID AsicUpdateProtect(
3565 IN PRTMP_ADAPTER pAd,
3566 IN USHORT OperaionMode,
3567 IN UCHAR SetMask,
3568 IN BOOLEAN bDisableBGProtect,
3569 IN BOOLEAN bNonGFExist);
3571 VOID AsicSwitchChannel(
3572 IN PRTMP_ADAPTER pAd,
3573 IN UCHAR Channel,
3574 IN BOOLEAN bScan);
3576 VOID AsicLockChannel(
3577 IN PRTMP_ADAPTER pAd,
3578 IN UCHAR Channel) ;
3580 VOID AsicAntennaSelect(
3581 IN PRTMP_ADAPTER pAd,
3582 IN UCHAR Channel);
3584 VOID AsicAntennaSetting(
3585 IN PRTMP_ADAPTER pAd,
3586 IN ABGBAND_STATE BandState);
3588 VOID AsicRfTuningExec(
3589 IN PVOID SystemSpecific1,
3590 IN PVOID FunctionContext,
3591 IN PVOID SystemSpecific2,
3592 IN PVOID SystemSpecific3);
3594 VOID AsicSleepThenAutoWakeup(
3595 IN PRTMP_ADAPTER pAd,
3596 IN USHORT TbttNumToNextWakeUp);
3598 VOID AsicForceSleep(
3599 IN PRTMP_ADAPTER pAd);
3601 VOID AsicForceWakeup(
3602 IN PRTMP_ADAPTER pAd,
3603 IN BOOLEAN bFromTx);
3605 VOID AsicSetBssid(
3606 IN PRTMP_ADAPTER pAd,
3607 IN PUCHAR pBssid);
3609 VOID AsicSetMcastWC(
3610 IN PRTMP_ADAPTER pAd);
3612 #if 0 // removed by AlbertY
3613 VOID AsicSetBssidWC(
3614 IN PRTMP_ADAPTER pAd,
3615 IN PUCHAR pBssid);
3616 #endif
3618 VOID AsicDelWcidTab(
3619 IN PRTMP_ADAPTER pAd,
3620 IN UCHAR Wcid);
3622 VOID AsicEnableRDG(
3623 IN PRTMP_ADAPTER pAd);
3625 VOID AsicDisableRDG(
3626 IN PRTMP_ADAPTER pAd);
3628 VOID AsicDisableSync(
3629 IN PRTMP_ADAPTER pAd);
3631 VOID AsicEnableBssSync(
3632 IN PRTMP_ADAPTER pAd);
3634 VOID AsicEnableIbssSync(
3635 IN PRTMP_ADAPTER pAd);
3637 VOID AsicSetEdcaParm(
3638 IN PRTMP_ADAPTER pAd,
3639 IN PEDCA_PARM pEdcaParm);
3641 VOID AsicSetSlotTime(
3642 IN PRTMP_ADAPTER pAd,
3643 IN BOOLEAN bUseShortSlotTime);
3645 #if 0
3646 VOID AsicAddWcidCipherEntry(
3647 IN PRTMP_ADAPTER pAd,
3648 IN UCHAR WCID,
3649 IN UCHAR BssIndex,
3650 IN UCHAR KeyTable,
3651 IN UCHAR CipherAlg,
3652 IN PUCHAR pAddr,
3653 IN CIPHER_KEY *pCipherKey);
3654 #endif
3656 VOID AsicAddSharedKeyEntry(
3657 IN PRTMP_ADAPTER pAd,
3658 IN UCHAR BssIndex,
3659 IN UCHAR KeyIdx,
3660 IN UCHAR CipherAlg,
3661 IN PUCHAR pKey,
3662 IN PUCHAR pTxMic,
3663 IN PUCHAR pRxMic);
3665 VOID AsicRemoveSharedKeyEntry(
3666 IN PRTMP_ADAPTER pAd,
3667 IN UCHAR BssIndex,
3668 IN UCHAR KeyIdx);
3670 VOID AsicUpdateWCIDAttribute(
3671 IN PRTMP_ADAPTER pAd,
3672 IN USHORT WCID,
3673 IN UCHAR BssIndex,
3674 IN UCHAR CipherAlg,
3675 IN BOOLEAN bUsePairewiseKeyTable);
3677 VOID AsicUpdateWCIDIVEIV(
3678 IN PRTMP_ADAPTER pAd,
3679 IN USHORT WCID,
3680 IN ULONG uIV,
3681 IN ULONG uEIV);
3683 VOID AsicUpdateRxWCIDTable(
3684 IN PRTMP_ADAPTER pAd,
3685 IN USHORT WCID,
3686 IN PUCHAR pAddr);
3688 VOID AsicAddKeyEntry(
3689 IN PRTMP_ADAPTER pAd,
3690 IN USHORT WCID,
3691 IN UCHAR BssIndex,
3692 IN UCHAR KeyIdx,
3693 IN PCIPHER_KEY pCipherKey,
3694 IN BOOLEAN bUsePairewiseKeyTable,
3695 IN BOOLEAN bTxKey);
3697 VOID AsicAddPairwiseKeyEntry(
3698 IN PRTMP_ADAPTER pAd,
3699 IN PUCHAR pAddr,
3700 IN UCHAR WCID,
3701 IN CIPHER_KEY *pCipherKey);
3703 VOID AsicRemovePairwiseKeyEntry(
3704 IN PRTMP_ADAPTER pAd,
3705 IN UCHAR BssIdx,
3706 IN UCHAR Wcid);
3708 BOOLEAN AsicSendCommandToMcu(
3709 IN PRTMP_ADAPTER pAd,
3710 IN UCHAR Command,
3711 IN UCHAR Token,
3712 IN UCHAR Arg0,
3713 IN UCHAR Arg1);
3716 VOID MacAddrRandomBssid(
3717 IN PRTMP_ADAPTER pAd,
3718 OUT PUCHAR pAddr);
3720 VOID MgtMacHeaderInit(
3721 IN PRTMP_ADAPTER pAd,
3722 IN OUT PHEADER_802_11 pHdr80211,
3723 IN UCHAR SubType,
3724 IN UCHAR ToDs,
3725 IN PUCHAR pDA,
3726 IN PUCHAR pBssid);
3728 VOID MlmeRadioOff(
3729 IN PRTMP_ADAPTER pAd);
3731 VOID MlmeRadioOn(
3732 IN PRTMP_ADAPTER pAd);
3735 VOID BssTableInit(
3736 IN BSS_TABLE *Tab);
3738 VOID BATableInit(
3739 IN PRTMP_ADAPTER pAd,
3740 IN BA_TABLE *Tab);
3742 ULONG BssTableSearch(
3743 IN BSS_TABLE *Tab,
3744 IN PUCHAR pBssid,
3745 IN UCHAR Channel);
3747 ULONG BssSsidTableSearch(
3748 IN BSS_TABLE *Tab,
3749 IN PUCHAR pBssid,
3750 IN PUCHAR pSsid,
3751 IN UCHAR SsidLen,
3752 IN UCHAR Channel);
3754 ULONG BssTableSearchWithSSID(
3755 IN BSS_TABLE *Tab,
3756 IN PUCHAR Bssid,
3757 IN PUCHAR pSsid,
3758 IN UCHAR SsidLen,
3759 IN UCHAR Channel);
3761 VOID BssTableDeleteEntry(
3762 IN OUT PBSS_TABLE pTab,
3763 IN PUCHAR pBssid,
3764 IN UCHAR Channel);
3766 VOID BATableDeleteORIEntry(
3767 IN OUT PRTMP_ADAPTER pAd,
3768 IN BA_ORI_ENTRY *pBAORIEntry);
3770 VOID BATableDeleteRECEntry(
3771 IN OUT PRTMP_ADAPTER pAd,
3772 IN BA_REC_ENTRY *pBARECEntry);
3774 VOID BATableTearORIEntry(
3775 IN OUT PRTMP_ADAPTER pAd,
3776 IN UCHAR TID,
3777 IN UCHAR Wcid,
3778 IN BOOLEAN bForceDelete,
3779 IN BOOLEAN ALL);
3781 VOID BATableTearRECEntry(
3782 IN OUT PRTMP_ADAPTER pAd,
3783 IN UCHAR TID,
3784 IN UCHAR WCID,
3785 IN BOOLEAN ALL);
3787 VOID BssEntrySet(
3788 IN PRTMP_ADAPTER pAd,
3789 OUT PBSS_ENTRY pBss,
3790 IN PUCHAR pBssid,
3791 IN CHAR Ssid[],
3792 IN UCHAR SsidLen,
3793 IN UCHAR BssType,
3794 IN USHORT BeaconPeriod,
3795 IN PCF_PARM CfParm,
3796 IN USHORT AtimWin,
3797 IN USHORT CapabilityInfo,
3798 IN UCHAR SupRate[],
3799 IN UCHAR SupRateLen,
3800 IN UCHAR ExtRate[],
3801 IN UCHAR ExtRateLen,
3802 IN HT_CAPABILITY_IE *pHtCapability,
3803 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3804 IN UCHAR HtCapabilityLen,
3805 IN UCHAR AddHtInfoLen,
3806 IN UCHAR NewExtChanOffset,
3807 IN UCHAR Channel,
3808 IN CHAR Rssi,
3809 IN LARGE_INTEGER TimeStamp,
3810 IN UCHAR CkipFlag,
3811 IN PEDCA_PARM pEdcaParm,
3812 IN PQOS_CAPABILITY_PARM pQosCapability,
3813 IN PQBSS_LOAD_PARM pQbssLoad,
3814 IN USHORT LengthVIE,
3815 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3817 ULONG BssTableSetEntry(
3818 IN PRTMP_ADAPTER pAd,
3819 OUT PBSS_TABLE pTab,
3820 IN PUCHAR pBssid,
3821 IN CHAR Ssid[],
3822 IN UCHAR SsidLen,
3823 IN UCHAR BssType,
3824 IN USHORT BeaconPeriod,
3825 IN CF_PARM *CfParm,
3826 IN USHORT AtimWin,
3827 IN USHORT CapabilityInfo,
3828 IN UCHAR SupRate[],
3829 IN UCHAR SupRateLen,
3830 IN UCHAR ExtRate[],
3831 IN UCHAR ExtRateLen,
3832 IN HT_CAPABILITY_IE *pHtCapability,
3833 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3834 IN UCHAR HtCapabilityLen,
3835 IN UCHAR AddHtInfoLen,
3836 IN UCHAR NewExtChanOffset,
3837 IN UCHAR Channel,
3838 IN CHAR Rssi,
3839 IN LARGE_INTEGER TimeStamp,
3840 IN UCHAR CkipFlag,
3841 IN PEDCA_PARM pEdcaParm,
3842 IN PQOS_CAPABILITY_PARM pQosCapability,
3843 IN PQBSS_LOAD_PARM pQbssLoad,
3844 IN USHORT LengthVIE,
3845 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3847 VOID BATableInsertEntry(
3848 IN PRTMP_ADAPTER pAd,
3849 IN USHORT Aid,
3850 IN USHORT TimeOutValue,
3851 IN USHORT StartingSeq,
3852 IN UCHAR TID,
3853 IN UCHAR BAWinSize,
3854 IN UCHAR OriginatorStatus,
3855 IN BOOLEAN IsRecipient);
3857 VOID BssTableSsidSort(
3858 IN PRTMP_ADAPTER pAd,
3859 OUT BSS_TABLE *OutTab,
3860 IN CHAR Ssid[],
3861 IN UCHAR SsidLen);
3863 VOID BssTableSortByRssi(
3864 IN OUT BSS_TABLE *OutTab);
3866 VOID BssCipherParse(
3867 IN OUT PBSS_ENTRY pBss);
3869 NDIS_STATUS MlmeQueueInit(
3870 IN MLME_QUEUE *Queue);
3872 VOID MlmeQueueDestroy(
3873 IN MLME_QUEUE *Queue);
3875 BOOLEAN MlmeEnqueue(
3876 IN PRTMP_ADAPTER pAd,
3877 IN ULONG Machine,
3878 IN ULONG MsgType,
3879 IN ULONG MsgLen,
3880 IN VOID *Msg);
3882 BOOLEAN MlmeEnqueueForRecv(
3883 IN PRTMP_ADAPTER pAd,
3884 IN ULONG Wcid,
3885 IN ULONG TimeStampHigh,
3886 IN ULONG TimeStampLow,
3887 IN UCHAR Rssi0,
3888 IN UCHAR Rssi1,
3889 IN UCHAR Rssi2,
3890 IN ULONG MsgLen,
3891 IN PVOID Msg,
3892 IN UCHAR Signal);
3895 BOOLEAN MlmeDequeue(
3896 IN MLME_QUEUE *Queue,
3897 OUT MLME_QUEUE_ELEM **Elem);
3899 VOID MlmeRestartStateMachine(
3900 IN PRTMP_ADAPTER pAd);
3902 BOOLEAN MlmeQueueEmpty(
3903 IN MLME_QUEUE *Queue);
3905 BOOLEAN MlmeQueueFull(
3906 IN MLME_QUEUE *Queue);
3908 BOOLEAN MsgTypeSubst(
3909 IN PRTMP_ADAPTER pAd,
3910 IN PFRAME_802_11 pFrame,
3911 OUT INT *Machine,
3912 OUT INT *MsgType);
3914 VOID StateMachineInit(
3915 IN STATE_MACHINE *Sm,
3916 IN STATE_MACHINE_FUNC Trans[],
3917 IN ULONG StNr,
3918 IN ULONG MsgNr,
3919 IN STATE_MACHINE_FUNC DefFunc,
3920 IN ULONG InitState,
3921 IN ULONG Base);
3923 VOID StateMachineSetAction(
3924 IN STATE_MACHINE *S,
3925 IN ULONG St,
3926 ULONG Msg,
3927 IN STATE_MACHINE_FUNC F);
3929 VOID StateMachinePerformAction(
3930 IN PRTMP_ADAPTER pAd,
3931 IN STATE_MACHINE *S,
3932 IN MLME_QUEUE_ELEM *Elem);
3934 VOID Drop(
3935 IN PRTMP_ADAPTER pAd,
3936 IN MLME_QUEUE_ELEM *Elem);
3938 VOID AssocStateMachineInit(
3939 IN PRTMP_ADAPTER pAd,
3940 IN STATE_MACHINE *Sm,
3941 OUT STATE_MACHINE_FUNC Trans[]);
3943 VOID ReassocTimeout(
3944 IN PVOID SystemSpecific1,
3945 IN PVOID FunctionContext,
3946 IN PVOID SystemSpecific2,
3947 IN PVOID SystemSpecific3);
3949 VOID AssocTimeout(
3950 IN PVOID SystemSpecific1,
3951 IN PVOID FunctionContext,
3952 IN PVOID SystemSpecific2,
3953 IN PVOID SystemSpecific3);
3955 VOID DisassocTimeout(
3956 IN PVOID SystemSpecific1,
3957 IN PVOID FunctionContext,
3958 IN PVOID SystemSpecific2,
3959 IN PVOID SystemSpecific3);
3961 //----------------------------------------------
3962 VOID MlmeDisassocReqAction(
3963 IN PRTMP_ADAPTER pAd,
3964 IN MLME_QUEUE_ELEM *Elem);
3966 VOID MlmeAssocReqAction(
3967 IN PRTMP_ADAPTER pAd,
3968 IN MLME_QUEUE_ELEM *Elem);
3970 VOID MlmeReassocReqAction(
3971 IN PRTMP_ADAPTER pAd,
3972 IN MLME_QUEUE_ELEM *Elem);
3974 VOID MlmeDisassocReqAction(
3975 IN PRTMP_ADAPTER pAd,
3976 IN MLME_QUEUE_ELEM *Elem);
3978 VOID PeerAssocRspAction(
3979 IN PRTMP_ADAPTER pAd,
3980 IN MLME_QUEUE_ELEM *Elem);
3982 VOID PeerReassocRspAction(
3983 IN PRTMP_ADAPTER pAd,
3984 IN MLME_QUEUE_ELEM *Elem);
3986 VOID PeerDisassocAction(
3987 IN PRTMP_ADAPTER pAd,
3988 IN MLME_QUEUE_ELEM *Elem);
3990 VOID DisassocTimeoutAction(
3991 IN PRTMP_ADAPTER pAd,
3992 IN MLME_QUEUE_ELEM *Elem);
3994 VOID AssocTimeoutAction(
3995 IN PRTMP_ADAPTER pAd,
3996 IN MLME_QUEUE_ELEM *Elem);
3998 VOID ReassocTimeoutAction(
3999 IN PRTMP_ADAPTER pAd,
4000 IN MLME_QUEUE_ELEM *Elem);
4002 VOID Cls3errAction(
4003 IN PRTMP_ADAPTER pAd,
4004 IN PUCHAR pAddr);
4006 VOID SwitchBetweenWepAndCkip(
4007 IN PRTMP_ADAPTER pAd);
4009 VOID InvalidStateWhenAssoc(
4010 IN PRTMP_ADAPTER pAd,
4011 IN MLME_QUEUE_ELEM *Elem);
4013 VOID InvalidStateWhenReassoc(
4014 IN PRTMP_ADAPTER pAd,
4015 IN MLME_QUEUE_ELEM *Elem);
4017 VOID InvalidStateWhenDisassociate(
4018 IN PRTMP_ADAPTER pAd,
4019 IN MLME_QUEUE_ELEM *Elem);
4021 #ifdef RT2870
4022 VOID MlmeCntlConfirm(
4023 IN PRTMP_ADAPTER pAd,
4024 IN ULONG MsgType,
4025 IN USHORT Msg);
4026 #endif // RT2870 //
4028 VOID ComposePsPoll(
4029 IN PRTMP_ADAPTER pAd);
4031 VOID ComposeNullFrame(
4032 IN PRTMP_ADAPTER pAd);
4034 VOID AssocPostProc(
4035 IN PRTMP_ADAPTER pAd,
4036 IN PUCHAR pAddr2,
4037 IN USHORT CapabilityInfo,
4038 IN USHORT Aid,
4039 IN UCHAR SupRate[],
4040 IN UCHAR SupRateLen,
4041 IN UCHAR ExtRate[],
4042 IN UCHAR ExtRateLen,
4043 IN PEDCA_PARM pEdcaParm,
4044 IN HT_CAPABILITY_IE *pHtCapability,
4045 IN UCHAR HtCapabilityLen,
4046 IN ADD_HT_INFO_IE *pAddHtInfo);
4048 VOID AuthStateMachineInit(
4049 IN PRTMP_ADAPTER pAd,
4050 IN PSTATE_MACHINE sm,
4051 OUT STATE_MACHINE_FUNC Trans[]);
4053 VOID AuthTimeout(
4054 IN PVOID SystemSpecific1,
4055 IN PVOID FunctionContext,
4056 IN PVOID SystemSpecific2,
4057 IN PVOID SystemSpecific3);
4059 VOID MlmeAuthReqAction(
4060 IN PRTMP_ADAPTER pAd,
4061 IN MLME_QUEUE_ELEM *Elem);
4063 VOID PeerAuthRspAtSeq2Action(
4064 IN PRTMP_ADAPTER pAd,
4065 IN MLME_QUEUE_ELEM *Elem);
4067 VOID PeerAuthRspAtSeq4Action(
4068 IN PRTMP_ADAPTER pAd,
4069 IN MLME_QUEUE_ELEM *Elem);
4071 VOID AuthTimeoutAction(
4072 IN PRTMP_ADAPTER pAd,
4073 IN MLME_QUEUE_ELEM *Elem);
4075 VOID Cls2errAction(
4076 IN PRTMP_ADAPTER pAd,
4077 IN PUCHAR pAddr);
4079 VOID MlmeDeauthReqAction(
4080 IN PRTMP_ADAPTER pAd,
4081 IN MLME_QUEUE_ELEM *Elem);
4083 VOID InvalidStateWhenAuth(
4084 IN PRTMP_ADAPTER pAd,
4085 IN MLME_QUEUE_ELEM *Elem);
4087 //=============================================
4089 VOID AuthRspStateMachineInit(
4090 IN PRTMP_ADAPTER pAd,
4091 IN PSTATE_MACHINE Sm,
4092 IN STATE_MACHINE_FUNC Trans[]);
4094 VOID PeerDeauthAction(
4095 IN PRTMP_ADAPTER pAd,
4096 IN MLME_QUEUE_ELEM *Elem);
4098 VOID PeerAuthSimpleRspGenAndSend(
4099 IN PRTMP_ADAPTER pAd,
4100 IN PHEADER_802_11 pHdr80211,
4101 IN USHORT Alg,
4102 IN USHORT Seq,
4103 IN USHORT Reason,
4104 IN USHORT Status);
4107 // Private routines in dls.c
4110 //========================================
4112 VOID SyncStateMachineInit(
4113 IN PRTMP_ADAPTER pAd,
4114 IN STATE_MACHINE *Sm,
4115 OUT STATE_MACHINE_FUNC Trans[]);
4117 VOID BeaconTimeout(
4118 IN PVOID SystemSpecific1,
4119 IN PVOID FunctionContext,
4120 IN PVOID SystemSpecific2,
4121 IN PVOID SystemSpecific3);
4123 VOID ScanTimeout(
4124 IN PVOID SystemSpecific1,
4125 IN PVOID FunctionContext,
4126 IN PVOID SystemSpecific2,
4127 IN PVOID SystemSpecific3);
4129 VOID MlmeScanReqAction(
4130 IN PRTMP_ADAPTER pAd,
4131 IN MLME_QUEUE_ELEM *Elem);
4133 VOID InvalidStateWhenScan(
4134 IN PRTMP_ADAPTER pAd,
4135 IN MLME_QUEUE_ELEM *Elem);
4137 VOID InvalidStateWhenJoin(
4138 IN PRTMP_ADAPTER pAd,
4139 IN MLME_QUEUE_ELEM *Elem);
4141 VOID InvalidStateWhenStart(
4142 IN PRTMP_ADAPTER pAd,
4143 IN MLME_QUEUE_ELEM *Elem);
4145 VOID PeerBeacon(
4146 IN PRTMP_ADAPTER pAd,
4147 IN MLME_QUEUE_ELEM *Elem);
4149 VOID EnqueueProbeRequest(
4150 IN PRTMP_ADAPTER pAd);
4152 BOOLEAN ScanRunning(
4153 IN PRTMP_ADAPTER pAd);
4154 //=========================================
4156 VOID MlmeCntlInit(
4157 IN PRTMP_ADAPTER pAd,
4158 IN STATE_MACHINE *S,
4159 OUT STATE_MACHINE_FUNC Trans[]);
4161 VOID MlmeCntlMachinePerformAction(
4162 IN PRTMP_ADAPTER pAd,
4163 IN STATE_MACHINE *S,
4164 IN MLME_QUEUE_ELEM *Elem);
4166 VOID CntlIdleProc(
4167 IN PRTMP_ADAPTER pAd,
4168 IN MLME_QUEUE_ELEM *Elem);
4170 VOID CntlOidScanProc(
4171 IN PRTMP_ADAPTER pAd,
4172 IN MLME_QUEUE_ELEM *Elem);
4174 VOID CntlOidSsidProc(
4175 IN PRTMP_ADAPTER pAd,
4176 IN MLME_QUEUE_ELEM * Elem);
4178 VOID CntlOidRTBssidProc(
4179 IN PRTMP_ADAPTER pAd,
4180 IN MLME_QUEUE_ELEM * Elem);
4182 VOID CntlMlmeRoamingProc(
4183 IN PRTMP_ADAPTER pAd,
4184 IN MLME_QUEUE_ELEM * Elem);
4186 VOID CntlWaitDisassocProc(
4187 IN PRTMP_ADAPTER pAd,
4188 IN MLME_QUEUE_ELEM *Elem);
4190 VOID CntlWaitJoinProc(
4191 IN PRTMP_ADAPTER pAd,
4192 IN MLME_QUEUE_ELEM *Elem);
4194 VOID CntlWaitReassocProc(
4195 IN PRTMP_ADAPTER pAd,
4196 IN MLME_QUEUE_ELEM *Elem);
4198 VOID CntlWaitStartProc(
4199 IN PRTMP_ADAPTER pAd,
4200 IN MLME_QUEUE_ELEM *Elem);
4202 VOID CntlWaitAuthProc(
4203 IN PRTMP_ADAPTER pAd,
4204 IN MLME_QUEUE_ELEM *Elem);
4206 VOID CntlWaitAuthProc2(
4207 IN PRTMP_ADAPTER pAd,
4208 IN MLME_QUEUE_ELEM *Elem);
4210 VOID CntlWaitAssocProc(
4211 IN PRTMP_ADAPTER pAd,
4212 IN MLME_QUEUE_ELEM *Elem);
4214 VOID LinkUp(
4215 IN PRTMP_ADAPTER pAd,
4216 IN UCHAR BssType);
4218 VOID LinkDown(
4219 IN PRTMP_ADAPTER pAd,
4220 IN BOOLEAN IsReqFromAP);
4222 VOID IterateOnBssTab(
4223 IN PRTMP_ADAPTER pAd);
4225 VOID IterateOnBssTab2(
4226 IN PRTMP_ADAPTER pAd);;
4228 VOID JoinParmFill(
4229 IN PRTMP_ADAPTER pAd,
4230 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4231 IN ULONG BssIdx);
4233 VOID AssocParmFill(
4234 IN PRTMP_ADAPTER pAd,
4235 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4236 IN PUCHAR pAddr,
4237 IN USHORT CapabilityInfo,
4238 IN ULONG Timeout,
4239 IN USHORT ListenIntv);
4241 VOID ScanParmFill(
4242 IN PRTMP_ADAPTER pAd,
4243 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4244 IN CHAR Ssid[],
4245 IN UCHAR SsidLen,
4246 IN UCHAR BssType,
4247 IN UCHAR ScanType);
4249 VOID DisassocParmFill(
4250 IN PRTMP_ADAPTER pAd,
4251 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4252 IN PUCHAR pAddr,
4253 IN USHORT Reason);
4255 VOID StartParmFill(
4256 IN PRTMP_ADAPTER pAd,
4257 IN OUT MLME_START_REQ_STRUCT *StartReq,
4258 IN CHAR Ssid[],
4259 IN UCHAR SsidLen);
4261 VOID AuthParmFill(
4262 IN PRTMP_ADAPTER pAd,
4263 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4264 IN PUCHAR pAddr,
4265 IN USHORT Alg);
4267 VOID EnqueuePsPoll(
4268 IN PRTMP_ADAPTER pAd);
4270 VOID EnqueueBeaconFrame(
4271 IN PRTMP_ADAPTER pAd);
4273 VOID MlmeJoinReqAction(
4274 IN PRTMP_ADAPTER pAd,
4275 IN MLME_QUEUE_ELEM *Elem);
4277 VOID MlmeScanReqAction(
4278 IN PRTMP_ADAPTER pAd,
4279 IN MLME_QUEUE_ELEM *Elem);
4281 VOID MlmeStartReqAction(
4282 IN PRTMP_ADAPTER pAd,
4283 IN MLME_QUEUE_ELEM *Elem);
4285 VOID ScanTimeoutAction(
4286 IN PRTMP_ADAPTER pAd,
4287 IN MLME_QUEUE_ELEM *Elem);
4289 VOID BeaconTimeoutAtJoinAction(
4290 IN PRTMP_ADAPTER pAd,
4291 IN MLME_QUEUE_ELEM *Elem);
4293 VOID PeerBeaconAtScanAction(
4294 IN PRTMP_ADAPTER pAd,
4295 IN MLME_QUEUE_ELEM *Elem);
4297 VOID PeerBeaconAtJoinAction(
4298 IN PRTMP_ADAPTER pAd,
4299 IN MLME_QUEUE_ELEM *Elem);
4301 VOID PeerBeacon(
4302 IN PRTMP_ADAPTER pAd,
4303 IN MLME_QUEUE_ELEM *Elem);
4305 VOID PeerProbeReqAction(
4306 IN PRTMP_ADAPTER pAd,
4307 IN MLME_QUEUE_ELEM *Elem);
4309 VOID ScanNextChannel(
4310 IN PRTMP_ADAPTER pAd);
4312 ULONG MakeIbssBeacon(
4313 IN PRTMP_ADAPTER pAd);
4315 VOID CCXAdjacentAPReport(
4316 IN PRTMP_ADAPTER pAd);
4318 BOOLEAN MlmeScanReqSanity(
4319 IN PRTMP_ADAPTER pAd,
4320 IN VOID *Msg,
4321 IN ULONG MsgLen,
4322 OUT UCHAR *BssType,
4323 OUT CHAR ssid[],
4324 OUT UCHAR *SsidLen,
4325 OUT UCHAR *ScanType);
4327 BOOLEAN PeerBeaconAndProbeRspSanity(
4328 IN PRTMP_ADAPTER pAd,
4329 IN VOID *Msg,
4330 IN ULONG MsgLen,
4331 IN UCHAR MsgChannel,
4332 OUT PUCHAR pAddr2,
4333 OUT PUCHAR pBssid,
4334 OUT CHAR Ssid[],
4335 OUT UCHAR *pSsidLen,
4336 OUT UCHAR *pBssType,
4337 OUT USHORT *pBeaconPeriod,
4338 OUT UCHAR *pChannel,
4339 OUT UCHAR *pNewChannel,
4340 OUT LARGE_INTEGER *pTimestamp,
4341 OUT CF_PARM *pCfParm,
4342 OUT USHORT *pAtimWin,
4343 OUT USHORT *pCapabilityInfo,
4344 OUT UCHAR *pErp,
4345 OUT UCHAR *pDtimCount,
4346 OUT UCHAR *pDtimPeriod,
4347 OUT UCHAR *pBcastFlag,
4348 OUT UCHAR *pMessageToMe,
4349 OUT UCHAR SupRate[],
4350 OUT UCHAR *pSupRateLen,
4351 OUT UCHAR ExtRate[],
4352 OUT UCHAR *pExtRateLen,
4353 OUT UCHAR *pCkipFlag,
4354 OUT UCHAR *pAironetCellPowerLimit,
4355 OUT PEDCA_PARM pEdcaParm,
4356 OUT PQBSS_LOAD_PARM pQbssLoad,
4357 OUT PQOS_CAPABILITY_PARM pQosCapability,
4358 OUT ULONG *pRalinkIe,
4359 OUT UCHAR *pHtCapabilityLen,
4360 OUT UCHAR *pPreNHtCapabilityLen,
4361 OUT HT_CAPABILITY_IE *pHtCapability,
4362 OUT UCHAR *AddHtInfoLen,
4363 OUT ADD_HT_INFO_IE *AddHtInfo,
4364 OUT UCHAR *NewExtChannel,
4365 OUT USHORT *LengthVIE,
4366 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4368 BOOLEAN PeerAddBAReqActionSanity(
4369 IN PRTMP_ADAPTER pAd,
4370 IN VOID *pMsg,
4371 IN ULONG MsgLen,
4372 OUT PUCHAR pAddr2);
4374 BOOLEAN PeerAddBARspActionSanity(
4375 IN PRTMP_ADAPTER pAd,
4376 IN VOID *pMsg,
4377 IN ULONG MsgLen);
4379 BOOLEAN PeerDelBAActionSanity(
4380 IN PRTMP_ADAPTER pAd,
4381 IN UCHAR Wcid,
4382 IN VOID *pMsg,
4383 IN ULONG MsgLen);
4385 BOOLEAN MlmeAssocReqSanity(
4386 IN PRTMP_ADAPTER pAd,
4387 IN VOID *Msg,
4388 IN ULONG MsgLen,
4389 OUT PUCHAR pApAddr,
4390 OUT USHORT *CapabilityInfo,
4391 OUT ULONG *Timeout,
4392 OUT USHORT *ListenIntv);
4394 BOOLEAN MlmeAuthReqSanity(
4395 IN PRTMP_ADAPTER pAd,
4396 IN VOID *Msg,
4397 IN ULONG MsgLen,
4398 OUT PUCHAR pAddr,
4399 OUT ULONG *Timeout,
4400 OUT USHORT *Alg);
4402 BOOLEAN MlmeStartReqSanity(
4403 IN PRTMP_ADAPTER pAd,
4404 IN VOID *Msg,
4405 IN ULONG MsgLen,
4406 OUT CHAR Ssid[],
4407 OUT UCHAR *Ssidlen);
4409 BOOLEAN PeerAuthSanity(
4410 IN PRTMP_ADAPTER pAd,
4411 IN VOID *Msg,
4412 IN ULONG MsgLen,
4413 OUT PUCHAR pAddr,
4414 OUT USHORT *Alg,
4415 OUT USHORT *Seq,
4416 OUT USHORT *Status,
4417 OUT CHAR ChlgText[]);
4419 BOOLEAN PeerAssocRspSanity(
4420 IN PRTMP_ADAPTER pAd,
4421 IN VOID *pMsg,
4422 IN ULONG MsgLen,
4423 OUT PUCHAR pAddr2,
4424 OUT USHORT *pCapabilityInfo,
4425 OUT USHORT *pStatus,
4426 OUT USHORT *pAid,
4427 OUT UCHAR SupRate[],
4428 OUT UCHAR *pSupRateLen,
4429 OUT UCHAR ExtRate[],
4430 OUT UCHAR *pExtRateLen,
4431 OUT HT_CAPABILITY_IE *pHtCapability,
4432 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4433 OUT UCHAR *pHtCapabilityLen,
4434 OUT UCHAR *pAddHtInfoLen,
4435 OUT UCHAR *pNewExtChannelOffset,
4436 OUT PEDCA_PARM pEdcaParm,
4437 OUT UCHAR *pCkipFlag);
4439 BOOLEAN PeerDisassocSanity(
4440 IN PRTMP_ADAPTER pAd,
4441 IN VOID *Msg,
4442 IN ULONG MsgLen,
4443 OUT PUCHAR pAddr2,
4444 OUT USHORT *Reason);
4446 BOOLEAN PeerWpaMessageSanity(
4447 IN PRTMP_ADAPTER pAd,
4448 IN PEAPOL_PACKET pMsg,
4449 IN ULONG MsgLen,
4450 IN UCHAR MsgType,
4451 IN MAC_TABLE_ENTRY *pEntry);
4453 BOOLEAN PeerDeauthSanity(
4454 IN PRTMP_ADAPTER pAd,
4455 IN VOID *Msg,
4456 IN ULONG MsgLen,
4457 OUT PUCHAR pAddr2,
4458 OUT USHORT *Reason);
4460 BOOLEAN PeerProbeReqSanity(
4461 IN PRTMP_ADAPTER pAd,
4462 IN VOID *Msg,
4463 IN ULONG MsgLen,
4464 OUT PUCHAR pAddr2,
4465 OUT CHAR Ssid[],
4466 OUT UCHAR *pSsidLen);
4468 BOOLEAN GetTimBit(
4469 IN CHAR *Ptr,
4470 IN USHORT Aid,
4471 OUT UCHAR *TimLen,
4472 OUT UCHAR *BcastFlag,
4473 OUT UCHAR *DtimCount,
4474 OUT UCHAR *DtimPeriod,
4475 OUT UCHAR *MessageToMe);
4477 UCHAR ChannelSanity(
4478 IN PRTMP_ADAPTER pAd,
4479 IN UCHAR channel);
4481 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4482 IN PBSS_ENTRY pBss);
4484 #if 0 // It's omitted
4485 NDIS_STATUS RTMPWepKeySanity(
4486 IN PRTMP_ADAPTER pAdapter,
4487 IN PVOID pBuf);
4488 #endif
4490 BOOLEAN MlmeDelBAReqSanity(
4491 IN PRTMP_ADAPTER pAd,
4492 IN VOID *Msg,
4493 IN ULONG MsgLen);
4495 BOOLEAN MlmeAddBAReqSanity(
4496 IN PRTMP_ADAPTER pAd,
4497 IN VOID *Msg,
4498 IN ULONG MsgLen,
4499 OUT PUCHAR pAddr2);
4501 ULONG MakeOutgoingFrame(
4502 OUT CHAR *Buffer,
4503 OUT ULONG *Length, ...);
4505 VOID LfsrInit(
4506 IN PRTMP_ADAPTER pAd,
4507 IN ULONG Seed);
4509 UCHAR RandomByte(
4510 IN PRTMP_ADAPTER pAd);
4512 VOID AsicUpdateAutoFallBackTable(
4513 IN PRTMP_ADAPTER pAd,
4514 IN PUCHAR pTxRate);
4516 VOID MlmePeriodicExec(
4517 IN PVOID SystemSpecific1,
4518 IN PVOID FunctionContext,
4519 IN PVOID SystemSpecific2,
4520 IN PVOID SystemSpecific3);
4522 VOID LinkDownExec(
4523 IN PVOID SystemSpecific1,
4524 IN PVOID FunctionContext,
4525 IN PVOID SystemSpecific2,
4526 IN PVOID SystemSpecific3);
4528 VOID LinkUpExec(
4529 IN PVOID SystemSpecific1,
4530 IN PVOID FunctionContext,
4531 IN PVOID SystemSpecific2,
4532 IN PVOID SystemSpecific3);
4534 VOID STAMlmePeriodicExec(
4535 PRTMP_ADAPTER pAd);
4537 VOID MlmeAutoScan(
4538 IN PRTMP_ADAPTER pAd);
4540 VOID MlmeAutoReconnectLastSSID(
4541 IN PRTMP_ADAPTER pAd);
4543 BOOLEAN MlmeValidateSSID(
4544 IN PUCHAR pSsid,
4545 IN UCHAR SsidLen);
4547 VOID MlmeCheckForRoaming(
4548 IN PRTMP_ADAPTER pAd,
4549 IN ULONG Now32);
4551 VOID MlmeCheckForFastRoaming(
4552 IN PRTMP_ADAPTER pAd,
4553 IN ULONG Now);
4555 VOID MlmeDynamicTxRateSwitching(
4556 IN PRTMP_ADAPTER pAd);
4558 VOID MlmeSetTxRate(
4559 IN PRTMP_ADAPTER pAd,
4560 IN PMAC_TABLE_ENTRY pEntry,
4561 IN PRTMP_TX_RATE_SWITCH pTxRate);
4563 VOID MlmeSelectTxRateTable(
4564 IN PRTMP_ADAPTER pAd,
4565 IN PMAC_TABLE_ENTRY pEntry,
4566 IN PUCHAR *ppTable,
4567 IN PUCHAR pTableSize,
4568 IN PUCHAR pInitTxRateIdx);
4570 VOID MlmeCalculateChannelQuality(
4571 IN PRTMP_ADAPTER pAd,
4572 IN ULONG Now);
4574 VOID MlmeCheckPsmChange(
4575 IN PRTMP_ADAPTER pAd,
4576 IN ULONG Now32);
4578 VOID MlmeSetPsmBit(
4579 IN PRTMP_ADAPTER pAd,
4580 IN USHORT psm);
4582 VOID MlmeSetTxPreamble(
4583 IN PRTMP_ADAPTER pAd,
4584 IN USHORT TxPreamble);
4586 VOID UpdateBasicRateBitmap(
4587 IN PRTMP_ADAPTER pAd);
4589 VOID MlmeUpdateTxRates(
4590 IN PRTMP_ADAPTER pAd,
4591 IN BOOLEAN bLinkUp,
4592 IN UCHAR apidx);
4594 VOID MlmeUpdateHtTxRates(
4595 IN PRTMP_ADAPTER pAd,
4596 IN UCHAR apidx);
4598 VOID RTMPCheckRates(
4599 IN PRTMP_ADAPTER pAd,
4600 IN OUT UCHAR SupRate[],
4601 IN OUT UCHAR *SupRateLen);
4603 BOOLEAN RTMPCheckChannel(
4604 IN PRTMP_ADAPTER pAd,
4605 IN UCHAR CentralChannel,
4606 IN UCHAR Channel);
4608 BOOLEAN RTMPCheckHt(
4609 IN PRTMP_ADAPTER pAd,
4610 IN UCHAR Wcid,
4611 IN OUT HT_CAPABILITY_IE *pHtCapability,
4612 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
4614 VOID StaQuickResponeForRateUpExec(
4615 IN PVOID SystemSpecific1,
4616 IN PVOID FunctionContext,
4617 IN PVOID SystemSpecific2,
4618 IN PVOID SystemSpecific3);
4620 VOID AsicBbpTuning1(
4621 IN PRTMP_ADAPTER pAd);
4623 VOID AsicBbpTuning2(
4624 IN PRTMP_ADAPTER pAd);
4626 VOID RTMPUpdateMlmeRate(
4627 IN PRTMP_ADAPTER pAd);
4629 CHAR RTMPMaxRssi(
4630 IN PRTMP_ADAPTER pAd,
4631 IN CHAR Rssi0,
4632 IN CHAR Rssi1,
4633 IN CHAR Rssi2);
4635 VOID AsicEvaluateRxAnt(
4636 IN PRTMP_ADAPTER pAd);
4638 VOID AsicRxAntEvalTimeout(
4639 IN PVOID SystemSpecific1,
4640 IN PVOID FunctionContext,
4641 IN PVOID SystemSpecific2,
4642 IN PVOID SystemSpecific3);
4644 VOID APSDPeriodicExec(
4645 IN PVOID SystemSpecific1,
4646 IN PVOID FunctionContext,
4647 IN PVOID SystemSpecific2,
4648 IN PVOID SystemSpecific3);
4650 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4651 IN PRTMP_ADAPTER pAd,
4652 IN PMAC_TABLE_ENTRY pEntry);
4654 UCHAR RTMPStaFixedTxMode(
4655 IN PRTMP_ADAPTER pAd,
4656 IN PMAC_TABLE_ENTRY pEntry);
4658 VOID RTMPUpdateLegacyTxSetting(
4659 UCHAR fixed_tx_mode,
4660 PMAC_TABLE_ENTRY pEntry);
4662 BOOLEAN RTMPAutoRateSwitchCheck(
4663 IN PRTMP_ADAPTER pAd);
4665 NDIS_STATUS MlmeInit(
4666 IN PRTMP_ADAPTER pAd);
4668 VOID MlmeHandler(
4669 IN PRTMP_ADAPTER pAd);
4671 VOID MlmeHalt(
4672 IN PRTMP_ADAPTER pAd);
4674 VOID MlmeResetRalinkCounters(
4675 IN PRTMP_ADAPTER pAd);
4677 VOID BuildChannelList(
4678 IN PRTMP_ADAPTER pAd);
4680 UCHAR FirstChannel(
4681 IN PRTMP_ADAPTER pAd);
4683 UCHAR NextChannel(
4684 IN PRTMP_ADAPTER pAd,
4685 IN UCHAR channel);
4687 VOID ChangeToCellPowerLimit(
4688 IN PRTMP_ADAPTER pAd,
4689 IN UCHAR AironetCellPowerLimit);
4691 VOID RaiseClock(
4692 IN PRTMP_ADAPTER pAd,
4693 IN UINT32 *x);
4695 VOID LowerClock(
4696 IN PRTMP_ADAPTER pAd,
4697 IN UINT32 *x);
4699 USHORT ShiftInBits(
4700 IN PRTMP_ADAPTER pAd);
4702 VOID ShiftOutBits(
4703 IN PRTMP_ADAPTER pAd,
4704 IN USHORT data,
4705 IN USHORT count);
4707 VOID EEpromCleanup(
4708 IN PRTMP_ADAPTER pAd);
4710 VOID EWDS(
4711 IN PRTMP_ADAPTER pAd);
4713 VOID EWEN(
4714 IN PRTMP_ADAPTER pAd);
4716 USHORT RTMP_EEPROM_READ16(
4717 IN PRTMP_ADAPTER pAd,
4718 IN USHORT Offset);
4720 VOID RTMP_EEPROM_WRITE16(
4721 IN PRTMP_ADAPTER pAd,
4722 IN USHORT Offset,
4723 IN USHORT Data);
4726 // Prototypes of function definition in rtmp_tkip.c
4728 VOID RTMPInitTkipEngine(
4729 IN PRTMP_ADAPTER pAd,
4730 IN PUCHAR pTKey,
4731 IN UCHAR KeyId,
4732 IN PUCHAR pTA,
4733 IN PUCHAR pMICKey,
4734 IN PUCHAR pTSC,
4735 OUT PULONG pIV16,
4736 OUT PULONG pIV32);
4738 VOID RTMPInitMICEngine(
4739 IN PRTMP_ADAPTER pAd,
4740 IN PUCHAR pKey,
4741 IN PUCHAR pDA,
4742 IN PUCHAR pSA,
4743 IN UCHAR UserPriority,
4744 IN PUCHAR pMICKey);
4746 BOOLEAN RTMPTkipCompareMICValue(
4747 IN PRTMP_ADAPTER pAd,
4748 IN PUCHAR pSrc,
4749 IN PUCHAR pDA,
4750 IN PUCHAR pSA,
4751 IN PUCHAR pMICKey,
4752 IN UCHAR UserPriority,
4753 IN UINT Len);
4755 VOID RTMPCalculateMICValue(
4756 IN PRTMP_ADAPTER pAd,
4757 IN PNDIS_PACKET pPacket,
4758 IN PUCHAR pEncap,
4759 IN PCIPHER_KEY pKey,
4760 IN UCHAR apidx);
4762 BOOLEAN RTMPTkipCompareMICValueWithLLC(
4763 IN PRTMP_ADAPTER pAd,
4764 IN PUCHAR pLLC,
4765 IN PUCHAR pSrc,
4766 IN PUCHAR pDA,
4767 IN PUCHAR pSA,
4768 IN PUCHAR pMICKey,
4769 IN UINT Len);
4771 VOID RTMPTkipAppendByte(
4772 IN PTKIP_KEY_INFO pTkip,
4773 IN UCHAR uChar);
4775 VOID RTMPTkipAppend(
4776 IN PTKIP_KEY_INFO pTkip,
4777 IN PUCHAR pSrc,
4778 IN UINT nBytes);
4780 VOID RTMPTkipGetMIC(
4781 IN PTKIP_KEY_INFO pTkip);
4783 BOOLEAN RTMPSoftDecryptTKIP(
4784 IN PRTMP_ADAPTER pAd,
4785 IN PUCHAR pData,
4786 IN ULONG DataByteCnt,
4787 IN UCHAR UserPriority,
4788 IN PCIPHER_KEY pWpaKey);
4790 BOOLEAN RTMPSoftDecryptAES(
4791 IN PRTMP_ADAPTER pAd,
4792 IN PUCHAR pData,
4793 IN ULONG DataByteCnt,
4794 IN PCIPHER_KEY pWpaKey);
4796 #if 0 // removed by AlbertY
4797 NDIS_STATUS RTMPWPAAddKeyProc(
4798 IN PRTMP_ADAPTER pAd,
4799 IN PVOID pBuf);
4800 #endif
4803 // Prototypes of function definition in cmm_info.c
4805 NDIS_STATUS RTMPWPARemoveKeyProc(
4806 IN PRTMP_ADAPTER pAd,
4807 IN PVOID pBuf);
4809 VOID RTMPWPARemoveAllKeys(
4810 IN PRTMP_ADAPTER pAd);
4812 BOOLEAN RTMPCheckStrPrintAble(
4813 IN CHAR *pInPutStr,
4814 IN UCHAR strLen);
4816 VOID RTMPSetPhyMode(
4817 IN PRTMP_ADAPTER pAd,
4818 IN ULONG phymode);
4820 VOID RTMPUpdateHTIE(
4821 IN RT_HT_CAPABILITY *pRtHt,
4822 IN UCHAR *pMcsSet,
4823 OUT HT_CAPABILITY_IE *pHtCapability,
4824 OUT ADD_HT_INFO_IE *pAddHtInfo);
4826 VOID RTMPAddWcidAttributeEntry(
4827 IN PRTMP_ADAPTER pAd,
4828 IN UCHAR BssIdx,
4829 IN UCHAR KeyIdx,
4830 IN UCHAR CipherAlg,
4831 IN MAC_TABLE_ENTRY *pEntry);
4833 CHAR *GetEncryptType(
4834 CHAR enc);
4836 CHAR *GetAuthMode(
4837 CHAR auth);
4839 VOID RTMPIoctlGetSiteSurvey(
4840 IN PRTMP_ADAPTER pAdapter,
4841 IN struct iwreq *wrq);
4843 VOID RTMPIoctlGetMacTable(
4844 IN PRTMP_ADAPTER pAd,
4845 IN struct iwreq *wrq);
4847 VOID RTMPIndicateWPA2Status(
4848 IN PRTMP_ADAPTER pAdapter);
4850 VOID RTMPOPModeSwitching(
4851 IN PRTMP_ADAPTER pAd);
4853 VOID RTMPAddBSSIDCipher(
4854 IN PRTMP_ADAPTER pAd,
4855 IN UCHAR Aid,
4856 IN PNDIS_802_11_KEY pKey,
4857 IN UCHAR CipherAlg);
4859 VOID RTMPSetHT(
4860 IN PRTMP_ADAPTER pAd,
4861 IN OID_SET_HT_PHYMODE *pHTPhyMode);
4863 VOID RTMPSetIndividualHT(
4864 IN PRTMP_ADAPTER pAd,
4865 IN UCHAR apidx);
4867 VOID RTMPSendWirelessEvent(
4868 IN PRTMP_ADAPTER pAd,
4869 IN USHORT Event_flag,
4870 IN PUCHAR pAddr,
4871 IN UCHAR BssIdx,
4872 IN CHAR Rssi);
4874 VOID NICUpdateCntlCounters(
4875 IN PRTMP_ADAPTER pAd,
4876 IN PHEADER_802_11 pHeader,
4877 IN UCHAR SubType,
4878 IN PRXWI_STRUC pRxWI);
4880 // prototype in wpa.c
4882 BOOLEAN WpaMsgTypeSubst(
4883 IN UCHAR EAPType,
4884 OUT INT *MsgType);
4886 VOID WpaPskStateMachineInit(
4887 IN PRTMP_ADAPTER pAd,
4888 IN STATE_MACHINE *S,
4889 OUT STATE_MACHINE_FUNC Trans[]);
4891 VOID WpaEAPOLKeyAction(
4892 IN PRTMP_ADAPTER pAd,
4893 IN MLME_QUEUE_ELEM *Elem);
4895 VOID WpaPairMsg1Action(
4896 IN PRTMP_ADAPTER pAd,
4897 IN MLME_QUEUE_ELEM *Elem);
4899 VOID WpaPairMsg3Action(
4900 IN PRTMP_ADAPTER pAd,
4901 IN MLME_QUEUE_ELEM *Elem);
4903 VOID WpaGroupMsg1Action(
4904 IN PRTMP_ADAPTER pAd,
4905 IN MLME_QUEUE_ELEM *Elem);
4907 VOID WpaMacHeaderInit(
4908 IN PRTMP_ADAPTER pAd,
4909 IN OUT PHEADER_802_11 pHdr80211,
4910 IN UCHAR wep,
4911 IN PUCHAR pAddr1);
4913 VOID Wpa2PairMsg1Action(
4914 IN PRTMP_ADAPTER pAd,
4915 IN MLME_QUEUE_ELEM *Elem);
4917 VOID Wpa2PairMsg3Action(
4918 IN PRTMP_ADAPTER pAd,
4919 IN MLME_QUEUE_ELEM *Elem);
4921 BOOLEAN ParseKeyData(
4922 IN PRTMP_ADAPTER pAd,
4923 IN PUCHAR pKeyData,
4924 IN UCHAR KeyDataLen,
4925 IN UCHAR bPairewise);
4927 VOID RTMPToWirelessSta(
4928 IN PRTMP_ADAPTER pAd,
4929 IN PUCHAR pHeader802_3,
4930 IN UINT HdrLen,
4931 IN PUCHAR pData,
4932 IN UINT DataLen,
4933 IN BOOLEAN is4wayFrame);
4935 VOID HMAC_SHA1(
4936 IN UCHAR *text,
4937 IN UINT text_len,
4938 IN UCHAR *key,
4939 IN UINT key_len,
4940 IN UCHAR *digest);
4942 VOID PRF(
4943 IN UCHAR *key,
4944 IN INT key_len,
4945 IN UCHAR *prefix,
4946 IN INT prefix_len,
4947 IN UCHAR *data,
4948 IN INT data_len,
4949 OUT UCHAR *output,
4950 IN INT len);
4952 VOID CCKMPRF(
4953 IN UCHAR *key,
4954 IN INT key_len,
4955 IN UCHAR *data,
4956 IN INT data_len,
4957 OUT UCHAR *output,
4958 IN INT len);
4960 VOID WpaCountPTK(
4961 IN PRTMP_ADAPTER pAd,
4962 IN UCHAR *PMK,
4963 IN UCHAR *ANonce,
4964 IN UCHAR *AA,
4965 IN UCHAR *SNonce,
4966 IN UCHAR *SA,
4967 OUT UCHAR *output,
4968 IN UINT len);
4970 VOID GenRandom(
4971 IN PRTMP_ADAPTER pAd,
4972 IN UCHAR *macAddr,
4973 OUT UCHAR *random);
4976 // prototype in aironet.c
4978 VOID AironetStateMachineInit(
4979 IN PRTMP_ADAPTER pAd,
4980 IN STATE_MACHINE *S,
4981 OUT STATE_MACHINE_FUNC Trans[]);
4983 VOID AironetMsgAction(
4984 IN PRTMP_ADAPTER pAd,
4985 IN MLME_QUEUE_ELEM *Elem);
4987 VOID AironetRequestAction(
4988 IN PRTMP_ADAPTER pAd,
4989 IN MLME_QUEUE_ELEM *Elem);
4991 VOID ChannelLoadRequestAction(
4992 IN PRTMP_ADAPTER pAd,
4993 IN UCHAR Index);
4995 VOID NoiseHistRequestAction(
4996 IN PRTMP_ADAPTER pAd,
4997 IN UCHAR Index);
4999 VOID BeaconRequestAction(
5000 IN PRTMP_ADAPTER pAd,
5001 IN UCHAR Index);
5003 VOID AironetReportAction(
5004 IN PRTMP_ADAPTER pAd,
5005 IN MLME_QUEUE_ELEM *Elem);
5007 VOID ChannelLoadReportAction(
5008 IN PRTMP_ADAPTER pAd,
5009 IN UCHAR Index);
5011 VOID NoiseHistReportAction(
5012 IN PRTMP_ADAPTER pAd,
5013 IN UCHAR Index);
5015 VOID AironetFinalReportAction(
5016 IN PRTMP_ADAPTER pAd);
5018 VOID BeaconReportAction(
5019 IN PRTMP_ADAPTER pAd,
5020 IN UCHAR Index);
5022 VOID AironetAddBeaconReport(
5023 IN PRTMP_ADAPTER pAd,
5024 IN ULONG Index,
5025 IN PMLME_QUEUE_ELEM pElem);
5027 VOID AironetCreateBeaconReportFromBssTable(
5028 IN PRTMP_ADAPTER pAd);
5030 VOID DBGPRINT_TX_RING(
5031 IN PRTMP_ADAPTER pAd,
5032 IN UCHAR QueIdx);
5034 VOID DBGPRINT_RX_RING(
5035 IN PRTMP_ADAPTER pAd);
5037 CHAR ConvertToRssi(
5038 IN PRTMP_ADAPTER pAd,
5039 IN CHAR Rssi,
5040 IN UCHAR RssiNumber);
5042 VOID APAsicEvaluateRxAnt(
5043 IN PRTMP_ADAPTER pAd);
5046 VOID APAsicRxAntEvalTimeout(
5047 IN PRTMP_ADAPTER pAd);
5050 // function prototype in cmm_wpa.c
5052 BOOLEAN RTMPCheckWPAframe(
5053 IN PRTMP_ADAPTER pAd,
5054 IN PMAC_TABLE_ENTRY pEntry,
5055 IN PUCHAR pData,
5056 IN ULONG DataByteCount,
5057 IN UCHAR FromWhichBSSID);
5059 VOID AES_GTK_KEY_UNWRAP(
5060 IN UCHAR *key,
5061 OUT UCHAR *plaintext,
5062 IN UCHAR c_len,
5063 IN UCHAR *ciphertext);
5065 BOOLEAN RTMPCheckRSNIE(
5066 IN PRTMP_ADAPTER pAd,
5067 IN PUCHAR pData,
5068 IN UCHAR DataLen,
5069 IN MAC_TABLE_ENTRY *pEntry,
5070 OUT UCHAR *Offset);
5072 BOOLEAN RTMPParseEapolKeyData(
5073 IN PRTMP_ADAPTER pAd,
5074 IN PUCHAR pKeyData,
5075 IN UCHAR KeyDataLen,
5076 IN UCHAR GroupKeyIndex,
5077 IN UCHAR MsgType,
5078 IN BOOLEAN bWPA2,
5079 IN MAC_TABLE_ENTRY *pEntry);
5081 VOID ConstructEapolMsg(
5082 IN PRTMP_ADAPTER pAd,
5083 IN UCHAR PeerAuthMode,
5084 IN UCHAR PeerWepStatus,
5085 IN UCHAR MyGroupKeyWepStatus,
5086 IN UCHAR MsgType,
5087 IN UCHAR DefaultKeyIdx,
5088 IN UCHAR *ReplayCounter,
5089 IN UCHAR *KeyNonce,
5090 IN UCHAR *TxRSC,
5091 IN UCHAR *PTK,
5092 IN UCHAR *GTK,
5093 IN UCHAR *RSNIE,
5094 IN UCHAR RSNIE_Len,
5095 OUT PEAPOL_PACKET pMsg);
5097 VOID CalculateMIC(
5098 IN PRTMP_ADAPTER pAd,
5099 IN UCHAR PeerWepStatus,
5100 IN UCHAR *PTK,
5101 OUT PEAPOL_PACKET pMsg);
5103 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5104 IN PRTMP_ADAPTER pAd,
5105 IN RX_BLK *pRxBlk,
5106 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5107 IN PCIPHER_KEY pShard_key);
5109 VOID ConstructEapolKeyData(
5110 IN PRTMP_ADAPTER pAd,
5111 IN UCHAR PeerAuthMode,
5112 IN UCHAR PeerWepStatus,
5113 IN UCHAR GroupKeyWepStatus,
5114 IN UCHAR MsgType,
5115 IN UCHAR DefaultKeyIdx,
5116 IN BOOLEAN bWPA2Capable,
5117 IN UCHAR *PTK,
5118 IN UCHAR *GTK,
5119 IN UCHAR *RSNIE,
5120 IN UCHAR RSNIE_LEN,
5121 OUT PEAPOL_PACKET pMsg);
5123 VOID RTMPMakeRSNIE(
5124 IN PRTMP_ADAPTER pAd,
5125 IN UINT AuthMode,
5126 IN UINT WepStatus,
5127 IN UCHAR apidx);
5130 // function prototype in ap_wpa.c
5133 BOOLEAN APWpaMsgTypeSubst(
5134 IN UCHAR EAPType,
5135 OUT INT *MsgType) ;
5137 MAC_TABLE_ENTRY *PACInquiry(
5138 IN PRTMP_ADAPTER pAd,
5139 IN ULONG Wcid);
5141 BOOLEAN RTMPCheckMcast(
5142 IN PRTMP_ADAPTER pAd,
5143 IN PEID_STRUCT eid_ptr,
5144 IN MAC_TABLE_ENTRY *pEntry);
5146 BOOLEAN RTMPCheckUcast(
5147 IN PRTMP_ADAPTER pAd,
5148 IN PEID_STRUCT eid_ptr,
5149 IN MAC_TABLE_ENTRY *pEntry);
5151 BOOLEAN RTMPCheckAUTH(
5152 IN PRTMP_ADAPTER pAd,
5153 IN PEID_STRUCT eid_ptr,
5154 IN MAC_TABLE_ENTRY *pEntry);
5156 VOID WPAStart4WayHS(
5157 IN PRTMP_ADAPTER pAd,
5158 IN MAC_TABLE_ENTRY *pEntry,
5159 IN ULONG TimeInterval);
5161 VOID WPAStart2WayGroupHS(
5162 IN PRTMP_ADAPTER pAd,
5163 IN MAC_TABLE_ENTRY *pEntry);
5165 VOID APWpaEAPPacketAction(
5166 IN PRTMP_ADAPTER pAd,
5167 IN MLME_QUEUE_ELEM *Elem);
5169 VOID APWpaEAPOLStartAction(
5170 IN PRTMP_ADAPTER pAd,
5171 IN MLME_QUEUE_ELEM *Elem);
5173 VOID APWpaEAPOLLogoffAction(
5174 IN PRTMP_ADAPTER pAd,
5175 IN MLME_QUEUE_ELEM *Elem);
5177 VOID APWpaEAPOLKeyAction(
5178 IN PRTMP_ADAPTER pAd,
5179 IN MLME_QUEUE_ELEM *Elem);
5181 VOID APWpaEAPOLASFAlertAction(
5182 IN PRTMP_ADAPTER pAd,
5183 IN MLME_QUEUE_ELEM *Elem);
5185 VOID HandleCounterMeasure(
5186 IN PRTMP_ADAPTER pAd,
5187 IN MAC_TABLE_ENTRY *pEntry);
5189 VOID PeerPairMsg2Action(
5190 IN PRTMP_ADAPTER pAd,
5191 IN MAC_TABLE_ENTRY *pEntry,
5192 IN MLME_QUEUE_ELEM *Elem);
5194 VOID PeerPairMsg4Action(
5195 IN PRTMP_ADAPTER pAd,
5196 IN MAC_TABLE_ENTRY *pEntry,
5197 IN MLME_QUEUE_ELEM *Elem);
5199 VOID CMTimerExec(
5200 IN PVOID SystemSpecific1,
5201 IN PVOID FunctionContext,
5202 IN PVOID SystemSpecific2,
5203 IN PVOID SystemSpecific3);
5205 VOID WPARetryExec(
5206 IN PVOID SystemSpecific1,
5207 IN PVOID FunctionContext,
5208 IN PVOID SystemSpecific2,
5209 IN PVOID SystemSpecific3);
5211 VOID EnqueueStartForPSKExec(
5212 IN PVOID SystemSpecific1,
5213 IN PVOID FunctionContext,
5214 IN PVOID SystemSpecific2,
5215 IN PVOID SystemSpecific3);
5217 VOID RTMPHandleSTAKey(
5218 IN PRTMP_ADAPTER pAdapter,
5219 IN MAC_TABLE_ENTRY *pEntry,
5220 IN MLME_QUEUE_ELEM *Elem);
5222 #if 0 // merge into PeerPairMsg4Action
5223 VOID Wpa1PeerPairMsg4Action(
5224 IN PRTMP_ADAPTER pAd,
5225 IN MAC_TABLE_ENTRY *pEntry,
5226 IN MLME_QUEUE_ELEM *Elem);
5228 VOID Wpa2PeerPairMsg4Action(
5229 IN PRTMP_ADAPTER pAd,
5230 IN PMAC_TABLE_ENTRY pEntry,
5231 IN MLME_QUEUE_ELEM *Elem);
5232 #endif // 0 //
5234 VOID PeerGroupMsg2Action(
5235 IN PRTMP_ADAPTER pAd,
5236 IN PMAC_TABLE_ENTRY pEntry,
5237 IN VOID *Msg,
5238 IN UINT MsgLen);
5240 #if 0 // replaced by WPAStart2WayGroupHS
5241 NDIS_STATUS APWpaHardTransmit(
5242 IN PRTMP_ADAPTER pAd,
5243 IN PMAC_TABLE_ENTRY pEntry);
5244 #endif // 0 //
5246 VOID PairDisAssocAction(
5247 IN PRTMP_ADAPTER pAd,
5248 IN PMAC_TABLE_ENTRY pEntry,
5249 IN USHORT Reason);
5251 VOID MlmeDeAuthAction(
5252 IN PRTMP_ADAPTER pAd,
5253 IN PMAC_TABLE_ENTRY pEntry,
5254 IN USHORT Reason);
5256 VOID GREKEYPeriodicExec(
5257 IN PVOID SystemSpecific1,
5258 IN PVOID FunctionContext,
5259 IN PVOID SystemSpecific2,
5260 IN PVOID SystemSpecific3);
5262 VOID CountGTK(
5263 IN UCHAR *PMK,
5264 IN UCHAR *GNonce,
5265 IN UCHAR *AA,
5266 OUT UCHAR *output,
5267 IN UINT len);
5269 VOID GetSmall(
5270 IN PVOID pSrc1,
5271 IN PVOID pSrc2,
5272 OUT PUCHAR out,
5273 IN ULONG Length);
5275 VOID GetLarge(
5276 IN PVOID pSrc1,
5277 IN PVOID pSrc2,
5278 OUT PUCHAR out,
5279 IN ULONG Length);
5281 VOID APGenRandom(
5282 IN PRTMP_ADAPTER pAd,
5283 OUT UCHAR *random);
5285 VOID AES_GTK_KEY_WRAP(
5286 IN UCHAR *key,
5287 IN UCHAR *plaintext,
5288 IN UCHAR p_len,
5289 OUT UCHAR *ciphertext);
5291 VOID WpaSend(
5292 IN PRTMP_ADAPTER pAdapter,
5293 IN PUCHAR pPacket,
5294 IN ULONG Len);
5296 VOID APToWirelessSta(
5297 IN PRTMP_ADAPTER pAd,
5298 IN MAC_TABLE_ENTRY *pEntry,
5299 IN PUCHAR pHeader802_3,
5300 IN UINT HdrLen,
5301 IN PUCHAR pData,
5302 IN UINT DataLen,
5303 IN BOOLEAN bClearFrame);
5305 VOID RTMPAddPMKIDCache(
5306 IN PRTMP_ADAPTER pAd,
5307 IN INT apidx,
5308 IN PUCHAR pAddr,
5309 IN UCHAR *PMKID,
5310 IN UCHAR *PMK);
5312 INT RTMPSearchPMKIDCache(
5313 IN PRTMP_ADAPTER pAd,
5314 IN INT apidx,
5315 IN PUCHAR pAddr);
5317 VOID RTMPDeletePMKIDCache(
5318 IN PRTMP_ADAPTER pAd,
5319 IN INT apidx,
5320 IN INT idx);
5322 VOID RTMPMaintainPMKIDCache(
5323 IN PRTMP_ADAPTER pAd);
5325 VOID RTMPSendTriggerFrame(
5326 IN PRTMP_ADAPTER pAd,
5327 IN PVOID pBuffer,
5328 IN ULONG Length,
5329 IN UCHAR TxRate,
5330 IN BOOLEAN bQosNull);
5333 //typedef void (*TIMER_FUNCTION)(unsigned long);
5336 /* timeout -- ms */
5337 VOID RTMP_SetPeriodicTimer(
5338 IN NDIS_MINIPORT_TIMER *pTimer,
5339 IN unsigned long timeout);
5341 VOID RTMP_OS_Init_Timer(
5342 IN PRTMP_ADAPTER pAd,
5343 IN NDIS_MINIPORT_TIMER *pTimer,
5344 IN TIMER_FUNCTION function,
5345 IN PVOID data);
5347 VOID RTMP_OS_Add_Timer(
5348 IN NDIS_MINIPORT_TIMER *pTimer,
5349 IN unsigned long timeout);
5351 VOID RTMP_OS_Mod_Timer(
5352 IN NDIS_MINIPORT_TIMER *pTimer,
5353 IN unsigned long timeout);
5356 VOID RTMP_OS_Del_Timer(
5357 IN NDIS_MINIPORT_TIMER *pTimer,
5358 OUT BOOLEAN *pCancelled);
5361 VOID RTMP_OS_Release_Packet(
5362 IN PRTMP_ADAPTER pAd,
5363 IN PQUEUE_ENTRY pEntry);
5365 VOID RTMPusecDelay(
5366 IN ULONG usec);
5368 NDIS_STATUS os_alloc_mem(
5369 IN PRTMP_ADAPTER pAd,
5370 OUT PUCHAR *mem,
5371 IN ULONG size);
5373 NDIS_STATUS os_free_mem(
5374 IN PRTMP_ADAPTER pAd,
5375 IN PUCHAR mem);
5378 void RTMP_AllocateSharedMemory(
5379 IN PRTMP_ADAPTER pAd,
5380 IN ULONG Length,
5381 IN BOOLEAN Cached,
5382 OUT PVOID *VirtualAddress,
5383 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5385 VOID RTMPFreeTxRxRingMemory(
5386 IN PRTMP_ADAPTER pAd);
5388 NDIS_STATUS AdapterBlockAllocateMemory(
5389 IN PVOID handle,
5390 OUT PVOID *ppAd);
5392 void RTMP_AllocateTxDescMemory(
5393 IN PRTMP_ADAPTER pAd,
5394 IN UINT Index,
5395 IN ULONG Length,
5396 IN BOOLEAN Cached,
5397 OUT PVOID *VirtualAddress,
5398 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5400 void RTMP_AllocateFirstTxBuffer(
5401 IN PRTMP_ADAPTER pAd,
5402 IN UINT Index,
5403 IN ULONG Length,
5404 IN BOOLEAN Cached,
5405 OUT PVOID *VirtualAddress,
5406 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5408 void RTMP_AllocateMgmtDescMemory(
5409 IN PRTMP_ADAPTER pAd,
5410 IN ULONG Length,
5411 IN BOOLEAN Cached,
5412 OUT PVOID *VirtualAddress,
5413 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5415 void RTMP_AllocateRxDescMemory(
5416 IN PRTMP_ADAPTER pAd,
5417 IN ULONG Length,
5418 IN BOOLEAN Cached,
5419 OUT PVOID *VirtualAddress,
5420 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5422 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5423 IN PRTMP_ADAPTER pAd,
5424 IN ULONG Length,
5425 IN BOOLEAN Cached,
5426 OUT PVOID *VirtualAddress,
5427 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5429 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5430 IN PRTMP_ADAPTER pAd,
5431 IN ULONG Length,
5432 IN BOOLEAN Cached,
5433 OUT PVOID *VirtualAddress);
5435 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5436 IN PRTMP_ADAPTER pAd,
5437 IN ULONG Length);
5439 void RTMP_QueryPacketInfo(
5440 IN PNDIS_PACKET pPacket,
5441 OUT PACKET_INFO *pPacketInfo,
5442 OUT PUCHAR *pSrcBufVA,
5443 OUT UINT *pSrcBufLen);
5445 void RTMP_QueryNextPacketInfo(
5446 IN PNDIS_PACKET *ppPacket,
5447 OUT PACKET_INFO *pPacketInfo,
5448 OUT PUCHAR *pSrcBufVA,
5449 OUT UINT *pSrcBufLen);
5452 BOOLEAN RTMP_FillTxBlkInfo(
5453 IN RTMP_ADAPTER *pAd,
5454 IN TX_BLK *pTxBlk);
5457 PRTMP_SCATTER_GATHER_LIST
5458 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5461 void announce_802_3_packet(
5462 IN PRTMP_ADAPTER pAd,
5463 IN PNDIS_PACKET pPacket);
5466 UINT BA_Reorder_AMSDU_Annnounce(
5467 IN PRTMP_ADAPTER pAd,
5468 IN PNDIS_PACKET pPacket);
5471 UINT Handle_AMSDU_Packet(
5472 IN PRTMP_ADAPTER pAd,
5473 IN PUCHAR pData,
5474 IN ULONG DataSize,
5475 IN UCHAR FromWhichBSSID);
5478 void convert_802_11_to_802_3_packet(
5479 IN PRTMP_ADAPTER pAd,
5480 IN PNDIS_PACKET pPacket,
5481 IN PUCHAR p8023hdr,
5482 IN PUCHAR pData,
5483 IN ULONG DataSize,
5484 IN UCHAR FromWhichBSSID);
5487 PNET_DEV get_netdev_from_bssid(
5488 IN PRTMP_ADAPTER pAd,
5489 IN UCHAR FromWhichBSSID);
5492 PNDIS_PACKET duplicate_pkt(
5493 IN PRTMP_ADAPTER pAd,
5494 IN PUCHAR pHeader802_3,
5495 IN UINT HdrLen,
5496 IN PUCHAR pData,
5497 IN ULONG DataSize,
5498 IN UCHAR FromWhichBSSID);
5501 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5502 IN PRTMP_ADAPTER pAd,
5503 IN PNDIS_PACKET pOldPkt);
5505 PNDIS_PACKET duplicate_pkt_with_VLAN(
5506 IN PRTMP_ADAPTER pAd,
5507 IN PUCHAR pHeader802_3,
5508 IN UINT HdrLen,
5509 IN PUCHAR pData,
5510 IN ULONG DataSize,
5511 IN UCHAR FromWhichBSSID);
5513 PNDIS_PACKET duplicate_pkt_with_WPI(
5514 IN PRTMP_ADAPTER pAd,
5515 IN PNDIS_PACKET pPacket,
5516 IN UINT32 ext_head_len,
5517 IN UINT32 ext_tail_len);
5519 UCHAR VLAN_8023_Header_Copy(
5520 IN PRTMP_ADAPTER pAd,
5521 IN PUCHAR pHeader802_3,
5522 IN UINT HdrLen,
5523 OUT PUCHAR pData,
5524 IN UCHAR FromWhichBSSID);
5526 void ba_flush_reordering_timeout_mpdus(
5527 IN PRTMP_ADAPTER pAd,
5528 IN PBA_REC_ENTRY pBAEntry,
5529 IN ULONG Now32);
5532 VOID BAOriSessionSetUp(
5533 IN PRTMP_ADAPTER pAd,
5534 IN MAC_TABLE_ENTRY *pEntry,
5535 IN UCHAR TID,
5536 IN USHORT TimeOut,
5537 IN ULONG DelayTime,
5538 IN BOOLEAN isForced);
5540 VOID BASessionTearDownALL(
5541 IN OUT PRTMP_ADAPTER pAd,
5542 IN UCHAR Wcid);
5544 BOOLEAN OS_Need_Clone_Packet(void);
5547 VOID build_tx_packet(
5548 IN PRTMP_ADAPTER pAd,
5549 IN PNDIS_PACKET pPacket,
5550 IN PUCHAR pFrame,
5551 IN ULONG FrameLen);
5554 VOID BAOriSessionTearDown(
5555 IN OUT PRTMP_ADAPTER pAd,
5556 IN UCHAR Wcid,
5557 IN UCHAR TID,
5558 IN BOOLEAN bPassive,
5559 IN BOOLEAN bForceSend);
5561 VOID BARecSessionTearDown(
5562 IN OUT PRTMP_ADAPTER pAd,
5563 IN UCHAR Wcid,
5564 IN UCHAR TID,
5565 IN BOOLEAN bPassive);
5567 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5568 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5570 ULONG AutoChBssInsertEntry(
5571 IN PRTMP_ADAPTER pAd,
5572 IN PUCHAR pBssid,
5573 IN CHAR Ssid[],
5574 IN UCHAR SsidLen,
5575 IN UCHAR ChannelNo,
5576 IN CHAR Rssi);
5578 void AutoChBssTableInit(
5579 IN PRTMP_ADAPTER pAd);
5581 void ChannelInfoInit(
5582 IN PRTMP_ADAPTER pAd);
5584 void AutoChBssTableDestroy(
5585 IN PRTMP_ADAPTER pAd);
5587 void ChannelInfoDestroy(
5588 IN PRTMP_ADAPTER pAd);
5590 UCHAR New_ApAutoSelectChannel(
5591 IN PRTMP_ADAPTER pAd);
5593 BOOLEAN rtstrmactohex(
5594 IN char *s1,
5595 IN char *s2);
5597 BOOLEAN rtstrcasecmp(
5598 IN char *s1,
5599 IN char *s2);
5601 char *rtstrstruncasecmp(
5602 IN char *s1,
5603 IN char *s2);
5605 char *rtstrstr(
5606 IN const char * s1,
5607 IN const char * s2);
5609 char *rstrtok(
5610 IN char * s,
5611 IN const char * ct);
5613 int rtinet_aton(
5614 const char *cp,
5615 unsigned int *addr);
5617 ////////// common ioctl functions //////////
5618 INT Set_DriverVersion_Proc(
5619 IN PRTMP_ADAPTER pAd,
5620 IN PUCHAR arg);
5622 INT Set_CountryRegion_Proc(
5623 IN PRTMP_ADAPTER pAd,
5624 IN PUCHAR arg);
5626 INT Set_CountryRegionABand_Proc(
5627 IN PRTMP_ADAPTER pAd,
5628 IN PUCHAR arg);
5630 INT Set_WirelessMode_Proc(
5631 IN PRTMP_ADAPTER pAd,
5632 IN PUCHAR arg);
5634 INT Set_Channel_Proc(
5635 IN PRTMP_ADAPTER pAd,
5636 IN PUCHAR arg);
5638 INT Set_ShortSlot_Proc(
5639 IN PRTMP_ADAPTER pAd,
5640 IN PUCHAR arg);
5642 INT Set_TxPower_Proc(
5643 IN PRTMP_ADAPTER pAd,
5644 IN PUCHAR arg);
5646 INT Set_BGProtection_Proc(
5647 IN PRTMP_ADAPTER pAd,
5648 IN PUCHAR arg);
5650 INT Set_TxPreamble_Proc(
5651 IN PRTMP_ADAPTER pAd,
5652 IN PUCHAR arg);
5654 INT Set_RTSThreshold_Proc(
5655 IN PRTMP_ADAPTER pAd,
5656 IN PUCHAR arg);
5658 INT Set_FragThreshold_Proc(
5659 IN PRTMP_ADAPTER pAd,
5660 IN PUCHAR arg);
5662 INT Set_TxBurst_Proc(
5663 IN PRTMP_ADAPTER pAd,
5664 IN PUCHAR arg);
5666 #ifdef AGGREGATION_SUPPORT
5667 INT Set_PktAggregate_Proc(
5668 IN PRTMP_ADAPTER pAd,
5669 IN PUCHAR arg);
5670 #endif
5672 INT Set_IEEE80211H_Proc(
5673 IN PRTMP_ADAPTER pAd,
5674 IN PUCHAR arg);
5676 #ifdef DBG
5677 INT Set_Debug_Proc(
5678 IN PRTMP_ADAPTER pAd,
5679 IN PUCHAR arg);
5680 #endif
5682 INT Show_DescInfo_Proc(
5683 IN PRTMP_ADAPTER pAd,
5684 IN PUCHAR arg);
5686 INT Set_ResetStatCounter_Proc(
5687 IN PRTMP_ADAPTER pAd,
5688 IN PUCHAR arg);
5690 INT Set_BASetup_Proc(
5691 IN PRTMP_ADAPTER pAd,
5692 IN PUCHAR arg);
5694 INT Set_BADecline_Proc(
5695 IN PRTMP_ADAPTER pAd,
5696 IN PUCHAR arg);
5698 INT Set_BAOriTearDown_Proc(
5699 IN PRTMP_ADAPTER pAd,
5700 IN PUCHAR arg);
5702 INT Set_BARecTearDown_Proc(
5703 IN PRTMP_ADAPTER pAd,
5704 IN PUCHAR arg);
5706 INT Set_HtBw_Proc(
5707 IN PRTMP_ADAPTER pAd,
5708 IN PUCHAR arg);
5710 INT Set_HtMcs_Proc(
5711 IN PRTMP_ADAPTER pAd,
5712 IN PUCHAR arg);
5714 INT Set_HtGi_Proc(
5715 IN PRTMP_ADAPTER pAd,
5716 IN PUCHAR arg);
5718 INT Set_HtOpMode_Proc(
5719 IN PRTMP_ADAPTER pAd,
5720 IN PUCHAR arg);
5722 INT Set_HtStbc_Proc(
5723 IN PRTMP_ADAPTER pAd,
5724 IN PUCHAR arg);
5726 INT Set_HtHtc_Proc(
5727 IN PRTMP_ADAPTER pAd,
5728 IN PUCHAR arg);
5730 INT Set_HtExtcha_Proc(
5731 IN PRTMP_ADAPTER pAd,
5732 IN PUCHAR arg);
5734 INT Set_HtMpduDensity_Proc(
5735 IN PRTMP_ADAPTER pAd,
5736 IN PUCHAR arg);
5738 INT Set_HtBaWinSize_Proc(
5739 IN PRTMP_ADAPTER pAd,
5740 IN PUCHAR arg);
5742 INT Set_HtRdg_Proc(
5743 IN PRTMP_ADAPTER pAd,
5744 IN PUCHAR arg);
5746 INT Set_HtLinkAdapt_Proc(
5747 IN PRTMP_ADAPTER pAd,
5748 IN PUCHAR arg);
5750 INT Set_HtAmsdu_Proc(
5751 IN PRTMP_ADAPTER pAd,
5752 IN PUCHAR arg);
5754 INT Set_HtAutoBa_Proc(
5755 IN PRTMP_ADAPTER pAd,
5756 IN PUCHAR arg);
5758 INT Set_HtProtect_Proc(
5759 IN PRTMP_ADAPTER pAd,
5760 IN PUCHAR arg);
5762 INT Set_HtMimoPs_Proc(
5763 IN PRTMP_ADAPTER pAd,
5764 IN PUCHAR arg);
5767 INT Set_ForceShortGI_Proc(
5768 IN PRTMP_ADAPTER pAd,
5769 IN PUCHAR arg);
5771 INT Set_ForceGF_Proc(
5772 IN PRTMP_ADAPTER pAd,
5773 IN PUCHAR arg);
5775 INT SetCommonHT(
5776 IN PRTMP_ADAPTER pAd);
5778 INT Set_SendPSMPAction_Proc(
5779 IN PRTMP_ADAPTER pAd,
5780 IN PUCHAR arg);
5782 INT Set_HtMIMOPSmode_Proc(
5783 IN PRTMP_ADAPTER pAd,
5784 IN PUCHAR arg);
5787 INT Set_HtTxBASize_Proc(
5788 IN PRTMP_ADAPTER pAd,
5789 IN PUCHAR arg);
5791 //Dls , kathy
5792 VOID RTMPSendDLSTearDownFrame(
5793 IN PRTMP_ADAPTER pAd,
5794 IN PUCHAR pDA);
5796 //Block ACK
5797 VOID QueryBATABLE(
5798 IN PRTMP_ADAPTER pAd,
5799 OUT PQUERYBA_TABLE pBAT);
5801 INT WpaCheckEapCode(
5802 IN PRTMP_ADAPTER pAd,
5803 IN PUCHAR pFrame,
5804 IN USHORT FrameLen,
5805 IN USHORT OffSet);
5807 VOID WpaSendMicFailureToWpaSupplicant(
5808 IN PRTMP_ADAPTER pAd,
5809 IN BOOLEAN bUnicast);
5811 VOID SendAssocIEsToWpaSupplicant(
5812 IN PRTMP_ADAPTER pAd);
5814 int wext_notify_event_assoc(
5815 IN RTMP_ADAPTER *pAd);
5817 VOID Handle_BSS_Width_Trigger_Events(
5818 IN PRTMP_ADAPTER pAd);
5820 void build_ext_channel_switch_ie(
5821 IN PRTMP_ADAPTER pAd,
5822 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
5824 BOOLEAN APRxDoneInterruptHandle(
5825 IN PRTMP_ADAPTER pAd);
5827 BOOLEAN STARxDoneInterruptHandle(
5828 IN PRTMP_ADAPTER pAd,
5829 IN BOOLEAN argc);
5831 // AMPDU packet indication
5832 VOID Indicate_AMPDU_Packet(
5833 IN PRTMP_ADAPTER pAd,
5834 IN RX_BLK *pRxBlk,
5835 IN UCHAR FromWhichBSSID);
5837 // AMSDU packet indication
5838 VOID Indicate_AMSDU_Packet(
5839 IN PRTMP_ADAPTER pAd,
5840 IN RX_BLK *pRxBlk,
5841 IN UCHAR FromWhichBSSID);
5843 // Normal legacy Rx packet indication
5844 VOID Indicate_Legacy_Packet(
5845 IN PRTMP_ADAPTER pAd,
5846 IN RX_BLK *pRxBlk,
5847 IN UCHAR FromWhichBSSID);
5849 VOID Indicate_EAPOL_Packet(
5850 IN PRTMP_ADAPTER pAd,
5851 IN RX_BLK *pRxBlk,
5852 IN UCHAR FromWhichBSSID);
5854 void update_os_packet_info(
5855 IN PRTMP_ADAPTER pAd,
5856 IN RX_BLK *pRxBlk,
5857 IN UCHAR FromWhichBSSID);
5859 void wlan_802_11_to_802_3_packet(
5860 IN PRTMP_ADAPTER pAd,
5861 IN RX_BLK *pRxBlk,
5862 IN PUCHAR pHeader802_3,
5863 IN UCHAR FromWhichBSSID);
5865 UINT deaggregate_AMSDU_announce(
5866 IN PRTMP_ADAPTER pAd,
5867 PNDIS_PACKET pPacket,
5868 IN PUCHAR pData,
5869 IN ULONG DataSize);
5871 // remove LLC and get 802_3 Header
5872 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
5874 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
5876 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
5878 _pDA = _pRxBlk->pHeader->Addr3; \
5879 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
5881 else \
5883 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
5885 _pDA = _pRxBlk->pHeader->Addr1; \
5886 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
5887 _pSA = _pRxBlk->pHeader->Addr2; \
5888 else \
5889 _pSA = _pRxBlk->pHeader->Addr3; \
5891 else \
5893 _pDA = _pRxBlk->pHeader->Addr1; \
5894 _pSA = _pRxBlk->pHeader->Addr2; \
5898 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
5899 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
5902 BOOLEAN APFowardWirelessStaToWirelessSta(
5903 IN PRTMP_ADAPTER pAd,
5904 IN PNDIS_PACKET pPacket,
5905 IN ULONG FromWhichBSSID);
5907 VOID Announce_or_Forward_802_3_Packet(
5908 IN PRTMP_ADAPTER pAd,
5909 IN PNDIS_PACKET pPacket,
5910 IN UCHAR FromWhichBSSID);
5912 VOID Sta_Announce_or_Forward_802_3_Packet(
5913 IN PRTMP_ADAPTER pAd,
5914 IN PNDIS_PACKET pPacket,
5915 IN UCHAR FromWhichBSSID);
5917 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
5918 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
5919 //announce_802_3_packet(_pAd, _pPacket);
5921 PNDIS_PACKET DuplicatePacket(
5922 IN PRTMP_ADAPTER pAd,
5923 IN PNDIS_PACKET pPacket,
5924 IN UCHAR FromWhichBSSID);
5927 PNDIS_PACKET ClonePacket(
5928 IN PRTMP_ADAPTER pAd,
5929 IN PNDIS_PACKET pPacket,
5930 IN PUCHAR pData,
5931 IN ULONG DataSize);
5934 // Normal, AMPDU or AMSDU
5935 VOID CmmRxnonRalinkFrameIndicate(
5936 IN PRTMP_ADAPTER pAd,
5937 IN RX_BLK *pRxBlk,
5938 IN UCHAR FromWhichBSSID);
5940 VOID CmmRxRalinkFrameIndicate(
5941 IN PRTMP_ADAPTER pAd,
5942 IN MAC_TABLE_ENTRY *pEntry,
5943 IN RX_BLK *pRxBlk,
5944 IN UCHAR FromWhichBSSID);
5946 VOID Update_Rssi_Sample(
5947 IN PRTMP_ADAPTER pAd,
5948 IN RSSI_SAMPLE *pRssi,
5949 IN PRXWI_STRUC pRxWI);
5951 PNDIS_PACKET GetPacketFromRxRing(
5952 IN PRTMP_ADAPTER pAd,
5953 OUT PRT28XX_RXD_STRUC pSaveRxD,
5954 OUT BOOLEAN *pbReschedule,
5955 IN OUT UINT32 *pRxPending);
5957 PNDIS_PACKET RTMPDeFragmentDataFrame(
5958 IN PRTMP_ADAPTER pAd,
5959 IN RX_BLK *pRxBlk);
5961 ////////////////////////////////////////
5962 enum {
5963 DIDmsg_lnxind_wlansniffrm = 0x00000044,
5964 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
5965 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
5966 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
5967 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
5968 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
5969 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
5970 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
5971 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
5972 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
5973 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
5975 enum {
5976 P80211ENUM_msgitem_status_no_value = 0x00
5978 enum {
5979 P80211ENUM_truth_false = 0x00,
5980 P80211ENUM_truth_true = 0x01
5983 /* Definition from madwifi */
5984 typedef struct {
5985 UINT32 did;
5986 UINT16 status;
5987 UINT16 len;
5988 UINT32 data;
5989 } p80211item_uint32_t;
5991 typedef struct {
5992 UINT32 msgcode;
5993 UINT32 msglen;
5994 #define WLAN_DEVNAMELEN_MAX 16
5995 UINT8 devname[WLAN_DEVNAMELEN_MAX];
5996 p80211item_uint32_t hosttime;
5997 p80211item_uint32_t mactime;
5998 p80211item_uint32_t channel;
5999 p80211item_uint32_t rssi;
6000 p80211item_uint32_t sq;
6001 p80211item_uint32_t signal;
6002 p80211item_uint32_t noise;
6003 p80211item_uint32_t rate;
6004 p80211item_uint32_t istx;
6005 p80211item_uint32_t frmlen;
6006 } wlan_ng_prism2_header;
6008 /* The radio capture header precedes the 802.11 header. */
6009 typedef struct PACKED _ieee80211_radiotap_header {
6010 UINT8 it_version; /* Version 0. Only increases
6011 * for drastic changes,
6012 * introduction of compatible
6013 * new fields does not count.
6015 UINT8 it_pad;
6016 UINT16 it_len; /* length of the whole
6017 * header in bytes, including
6018 * it_version, it_pad,
6019 * it_len, and data fields.
6021 UINT32 it_present; /* A bitmap telling which
6022 * fields are present. Set bit 31
6023 * (0x80000000) to extend the
6024 * bitmap by another 32 bits.
6025 * Additional extensions are made
6026 * by setting bit 31.
6028 }ieee80211_radiotap_header ;
6030 enum ieee80211_radiotap_type {
6031 IEEE80211_RADIOTAP_TSFT = 0,
6032 IEEE80211_RADIOTAP_FLAGS = 1,
6033 IEEE80211_RADIOTAP_RATE = 2,
6034 IEEE80211_RADIOTAP_CHANNEL = 3,
6035 IEEE80211_RADIOTAP_FHSS = 4,
6036 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6037 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6038 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6039 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6040 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6041 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6042 IEEE80211_RADIOTAP_ANTENNA = 11,
6043 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6044 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6047 #define WLAN_RADIOTAP_PRESENT ( \
6048 (1 << IEEE80211_RADIOTAP_TSFT) | \
6049 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6050 (1 << IEEE80211_RADIOTAP_RATE) | \
6053 typedef struct _wlan_radiotap_header {
6054 ieee80211_radiotap_header wt_ihdr;
6055 INT64 wt_tsft;
6056 UINT8 wt_flags;
6057 UINT8 wt_rate;
6058 } wlan_radiotap_header;
6059 /* Definition from madwifi */
6061 void send_monitor_packets(
6062 IN PRTMP_ADAPTER pAd,
6063 IN RX_BLK *pRxBlk);
6065 #if WIRELESS_EXT >= 12
6066 // This function will be called when query /proc
6067 struct iw_statistics *rt28xx_get_wireless_stats(
6068 IN struct net_device *net_dev);
6069 #endif
6071 VOID RTMPSetDesiredRates(
6072 IN PRTMP_ADAPTER pAdapter,
6073 IN LONG Rates);
6075 INT Set_FixedTxMode_Proc(
6076 IN PRTMP_ADAPTER pAd,
6077 IN PUCHAR arg);
6079 static inline char* GetPhyMode(
6080 int Mode)
6082 switch(Mode)
6084 case MODE_CCK:
6085 return "CCK";
6087 case MODE_OFDM:
6088 return "OFDM";
6089 case MODE_HTMIX:
6090 return "HTMIX";
6092 case MODE_HTGREENFIELD:
6093 return "GREEN";
6094 default:
6095 return "N/A";
6100 static inline char* GetBW(
6101 int BW)
6103 switch(BW)
6105 case BW_10:
6106 return "10M";
6108 case BW_20:
6109 return "20M";
6110 case BW_40:
6111 return "40M";
6112 default:
6113 return "N/A";
6118 VOID RT28xxThreadTerminate(
6119 IN RTMP_ADAPTER *pAd);
6121 BOOLEAN RT28XXChipsetCheck(
6122 IN void *_dev_p);
6124 BOOLEAN RT28XXNetDevInit(
6125 IN void *_dev_p,
6126 IN struct net_device *net_dev,
6127 IN RTMP_ADAPTER *pAd);
6129 BOOLEAN RT28XXProbePostConfig(
6130 IN void *_dev_p,
6131 IN RTMP_ADAPTER *pAd,
6132 IN INT32 argc);
6134 VOID RT28XXDMADisable(
6135 IN RTMP_ADAPTER *pAd);
6137 VOID RT28XXDMAEnable(
6138 IN RTMP_ADAPTER *pAd);
6140 VOID RT28xx_UpdateBeaconToAsic(
6141 IN RTMP_ADAPTER * pAd,
6142 IN INT apidx,
6143 IN ULONG BeaconLen,
6144 IN ULONG UpdatePos);
6146 INT rt28xx_ioctl(
6147 IN struct net_device *net_dev,
6148 IN OUT struct ifreq *rq,
6149 IN INT cmd);
6151 INT rt28xx_sta_ioctl(
6152 IN struct net_device *net_dev,
6153 IN OUT struct ifreq *rq,
6154 IN INT cmd);
6156 BOOLEAN RT28XXSecurityKeyAdd(
6157 IN PRTMP_ADAPTER pAd,
6158 IN ULONG apidx,
6159 IN ULONG KeyIdx,
6160 IN MAC_TABLE_ENTRY *pEntry);
6162 ////////////////////////////////////////
6163 PNDIS_PACKET GetPacketFromRxRing(
6164 IN PRTMP_ADAPTER pAd,
6165 OUT PRT28XX_RXD_STRUC pSaveRxD,
6166 OUT BOOLEAN *pbReschedule,
6167 IN OUT UINT32 *pRxPending);
6170 void kill_thread_task(PRTMP_ADAPTER pAd);
6172 void tbtt_tasklet(unsigned long data);
6175 VOID AsicTurnOffRFClk(
6176 IN PRTMP_ADAPTER pAd,
6177 IN UCHAR Channel);
6179 VOID AsicTurnOnRFClk(
6180 IN PRTMP_ADAPTER pAd,
6181 IN UCHAR Channel);
6183 #ifdef RT2870
6185 // Function Prototype in rtusb_bulk.c
6187 VOID RTUSBInitTxDesc(
6188 IN PRTMP_ADAPTER pAd,
6189 IN PTX_CONTEXT pTxContext,
6190 IN UCHAR BulkOutPipeId,
6191 IN usb_complete_t Func);
6193 VOID RTUSBInitHTTxDesc(
6194 IN PRTMP_ADAPTER pAd,
6195 IN PHT_TX_CONTEXT pTxContext,
6196 IN UCHAR BulkOutPipeId,
6197 IN ULONG BulkOutSize,
6198 IN usb_complete_t Func);
6200 VOID RTUSBInitRxDesc(
6201 IN PRTMP_ADAPTER pAd,
6202 IN PRX_CONTEXT pRxContext);
6204 VOID RTUSBCleanUpDataBulkOutQueue(
6205 IN PRTMP_ADAPTER pAd);
6207 VOID RTUSBCancelPendingBulkOutIRP(
6208 IN PRTMP_ADAPTER pAd);
6210 VOID RTUSBBulkOutDataPacket(
6211 IN PRTMP_ADAPTER pAd,
6212 IN UCHAR BulkOutPipeId,
6213 IN UCHAR Index);
6215 VOID RTUSBBulkOutNullFrame(
6216 IN PRTMP_ADAPTER pAd);
6218 VOID RTUSBBulkOutRTSFrame(
6219 IN PRTMP_ADAPTER pAd);
6221 VOID RTUSBCancelPendingBulkInIRP(
6222 IN PRTMP_ADAPTER pAd);
6224 VOID RTUSBCancelPendingIRPs(
6225 IN PRTMP_ADAPTER pAd);
6227 VOID RTUSBBulkOutMLMEPacket(
6228 IN PRTMP_ADAPTER pAd,
6229 IN UCHAR Index);
6231 VOID RTUSBBulkOutPsPoll(
6232 IN PRTMP_ADAPTER pAd);
6234 VOID RTUSBCleanUpMLMEBulkOutQueue(
6235 IN PRTMP_ADAPTER pAd);
6237 VOID RTUSBKickBulkOut(
6238 IN PRTMP_ADAPTER pAd);
6240 VOID RTUSBBulkReceive(
6241 IN PRTMP_ADAPTER pAd);
6243 VOID DoBulkIn(
6244 IN RTMP_ADAPTER *pAd);
6246 VOID RTUSBInitRxDesc(
6247 IN PRTMP_ADAPTER pAd,
6248 IN PRX_CONTEXT pRxContext);
6250 VOID RTUSBBulkRxHandle(
6251 IN unsigned long data);
6254 // Function Prototype in rtusb_io.c
6256 NTSTATUS RTUSBMultiRead(
6257 IN PRTMP_ADAPTER pAd,
6258 IN USHORT Offset,
6259 OUT PUCHAR pData,
6260 IN USHORT length);
6262 NTSTATUS RTUSBMultiWrite(
6263 IN PRTMP_ADAPTER pAd,
6264 IN USHORT Offset,
6265 IN PUCHAR pData,
6266 IN USHORT length);
6268 NTSTATUS RTUSBMultiWrite_OneByte(
6269 IN PRTMP_ADAPTER pAd,
6270 IN USHORT Offset,
6271 IN PUCHAR pData);
6273 NTSTATUS RTUSBReadBBPRegister(
6274 IN PRTMP_ADAPTER pAd,
6275 IN UCHAR Id,
6276 IN PUCHAR pValue);
6278 NTSTATUS RTUSBWriteBBPRegister(
6279 IN PRTMP_ADAPTER pAd,
6280 IN UCHAR Id,
6281 IN UCHAR Value);
6283 NTSTATUS RTUSBWriteRFRegister(
6284 IN PRTMP_ADAPTER pAd,
6285 IN UINT32 Value);
6287 NTSTATUS RT30xxWriteRFRegister(
6288 IN PRTMP_ADAPTER pAd,
6289 IN UCHAR RegID,
6290 IN UCHAR Value);
6292 NTSTATUS RT30xxReadRFRegister(
6293 IN PRTMP_ADAPTER pAd,
6294 IN UCHAR RegID,
6295 IN PUCHAR pValue);
6297 NTSTATUS RTUSB_VendorRequest(
6298 IN PRTMP_ADAPTER pAd,
6299 IN UINT32 TransferFlags,
6300 IN UCHAR ReservedBits,
6301 IN UCHAR Request,
6302 IN USHORT Value,
6303 IN USHORT Index,
6304 IN PVOID TransferBuffer,
6305 IN UINT32 TransferBufferLength);
6307 NTSTATUS RTUSBReadEEPROM(
6308 IN PRTMP_ADAPTER pAd,
6309 IN USHORT Offset,
6310 OUT PUCHAR pData,
6311 IN USHORT length);
6313 NTSTATUS RTUSBWriteEEPROM(
6314 IN PRTMP_ADAPTER pAd,
6315 IN USHORT Offset,
6316 IN PUCHAR pData,
6317 IN USHORT length);
6319 VOID RTUSBPutToSleep(
6320 IN PRTMP_ADAPTER pAd);
6322 NTSTATUS RTUSBWakeUp(
6323 IN PRTMP_ADAPTER pAd);
6325 VOID RTUSBInitializeCmdQ(
6326 IN PCmdQ cmdq);
6328 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6329 IN PRTMP_ADAPTER pAd,
6330 IN NDIS_OID Oid,
6331 IN BOOLEAN SetInformation,
6332 IN PVOID pInformationBuffer,
6333 IN UINT32 InformationBufferLength);
6335 NDIS_STATUS RTUSBEnqueueInternalCmd(
6336 IN PRTMP_ADAPTER pAd,
6337 IN NDIS_OID Oid,
6338 IN PVOID pInformationBuffer,
6339 IN UINT32 InformationBufferLength);
6341 VOID RTUSBDequeueCmd(
6342 IN PCmdQ cmdq,
6343 OUT PCmdQElmt *pcmdqelmt);
6345 INT RTUSBCmdThread(
6346 IN OUT PVOID Context);
6348 INT TimerQThread(
6349 IN OUT PVOID Context);
6351 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6352 IN RTMP_ADAPTER *pAd,
6353 IN RALINK_TIMER_STRUCT *pTimer);
6355 BOOLEAN RT2870_TimerQ_Remove(
6356 IN RTMP_ADAPTER *pAd,
6357 IN RALINK_TIMER_STRUCT *pTimer);
6359 void RT2870_TimerQ_Exit(
6360 IN RTMP_ADAPTER *pAd);
6362 void RT2870_TimerQ_Init(
6363 IN RTMP_ADAPTER *pAd);
6365 VOID RT2870_BssBeaconExit(
6366 IN RTMP_ADAPTER *pAd);
6368 VOID RT2870_BssBeaconStop(
6369 IN RTMP_ADAPTER *pAd);
6371 VOID RT2870_BssBeaconStart(
6372 IN RTMP_ADAPTER * pAd);
6374 VOID RT2870_BssBeaconInit(
6375 IN RTMP_ADAPTER *pAd);
6377 VOID RT2870_WatchDog(
6378 IN RTMP_ADAPTER *pAd);
6380 NTSTATUS RTUSBWriteMACRegister(
6381 IN PRTMP_ADAPTER pAd,
6382 IN USHORT Offset,
6383 IN UINT32 Value);
6385 NTSTATUS RTUSBReadMACRegister(
6386 IN PRTMP_ADAPTER pAd,
6387 IN USHORT Offset,
6388 OUT PUINT32 pValue);
6390 NTSTATUS RTUSBSingleWrite(
6391 IN RTMP_ADAPTER *pAd,
6392 IN USHORT Offset,
6393 IN USHORT Value);
6395 NTSTATUS RTUSBFirmwareRun(
6396 IN PRTMP_ADAPTER pAd);
6398 NTSTATUS RTUSBFirmwareWrite(
6399 IN PRTMP_ADAPTER pAd,
6400 IN PUCHAR pFwImage,
6401 IN ULONG FwLen);
6403 NTSTATUS RTUSBFirmwareOpmode(
6404 IN PRTMP_ADAPTER pAd,
6405 OUT PUINT32 pValue);
6407 NTSTATUS RTUSBVenderReset(
6408 IN PRTMP_ADAPTER pAd);
6410 NDIS_STATUS RTUSBSetHardWareRegister(
6411 IN PRTMP_ADAPTER pAdapter,
6412 IN PVOID pBuf);
6414 NDIS_STATUS RTUSBQueryHardWareRegister(
6415 IN PRTMP_ADAPTER pAdapter,
6416 IN PVOID pBuf);
6418 VOID CMDHandler(
6419 IN PRTMP_ADAPTER pAd);
6422 NDIS_STATUS CreateThreads(
6423 IN struct net_device *net_dev );
6426 VOID MacTableInitialize(
6427 IN PRTMP_ADAPTER pAd);
6429 VOID MlmeSetPsm(
6430 IN PRTMP_ADAPTER pAd,
6431 IN USHORT psm);
6433 NDIS_STATUS RTMPWPAAddKeyProc(
6434 IN PRTMP_ADAPTER pAd,
6435 IN PVOID pBuf);
6437 VOID AsicRxAntEvalAction(
6438 IN PRTMP_ADAPTER pAd);
6440 #if 0 // Mark because not used in RT28xx.
6441 NTSTATUS RTUSBRxPacket(
6442 IN PRTMP_ADAPTER pAd,
6443 IN BOOLEAN bBulkReceive);
6445 VOID RTUSBDequeueMLMEPacket(
6446 IN PRTMP_ADAPTER pAd);
6448 VOID RTUSBCleanUpMLMEWaitQueue(
6449 IN PRTMP_ADAPTER pAd);
6450 #endif
6452 void append_pkt(
6453 IN PRTMP_ADAPTER pAd,
6454 IN PUCHAR pHeader802_3,
6455 IN UINT HdrLen,
6456 IN PUCHAR pData,
6457 IN ULONG DataSize,
6458 OUT PNDIS_PACKET *ppPacket);
6460 UINT deaggregate_AMSDU_announce(
6461 IN PRTMP_ADAPTER pAd,
6462 PNDIS_PACKET pPacket,
6463 IN PUCHAR pData,
6464 IN ULONG DataSize);
6466 NDIS_STATUS RTMPCheckRxError(
6467 IN PRTMP_ADAPTER pAd,
6468 IN PHEADER_802_11 pHeader,
6469 IN PRXWI_STRUC pRxWI,
6470 IN PRT28XX_RXD_STRUC pRxINFO);
6473 VOID RTUSBMlmeHardTransmit(
6474 IN PRTMP_ADAPTER pAd,
6475 IN PMGMT_STRUC pMgmt);
6477 INT MlmeThread(
6478 IN PVOID Context);
6480 #if 0
6481 VOID RTUSBResumeMsduTransmission(
6482 IN PRTMP_ADAPTER pAd);
6484 VOID RTUSBSuspendMsduTransmission(
6485 IN PRTMP_ADAPTER pAd);
6486 #endif
6489 // Function Prototype in rtusb_data.c
6491 NDIS_STATUS RTUSBFreeDescriptorRequest(
6492 IN PRTMP_ADAPTER pAd,
6493 IN UCHAR BulkOutPipeId,
6494 IN UINT32 NumberRequired);
6497 BOOLEAN RTUSBNeedQueueBackForAgg(
6498 IN RTMP_ADAPTER *pAd,
6499 IN UCHAR BulkOutPipeId);
6502 VOID RTMPWriteTxInfo(
6503 IN PRTMP_ADAPTER pAd,
6504 IN PTXINFO_STRUC pTxInfo,
6505 IN USHORT USBDMApktLen,
6506 IN BOOLEAN bWiv,
6507 IN UCHAR QueueSel,
6508 IN UCHAR NextValid,
6509 IN UCHAR TxBurst);
6512 // Function Prototype in cmm_data_2870.c
6514 USHORT RtmpUSB_WriteSubTxResource(
6515 IN PRTMP_ADAPTER pAd,
6516 IN TX_BLK *pTxBlk,
6517 IN BOOLEAN bIsLast,
6518 OUT USHORT *FreeNumber);
6520 USHORT RtmpUSB_WriteSingleTxResource(
6521 IN PRTMP_ADAPTER pAd,
6522 IN TX_BLK *pTxBlk,
6523 IN BOOLEAN bIsLast,
6524 OUT USHORT *FreeNumber);
6526 USHORT RtmpUSB_WriteFragTxResource(
6527 IN PRTMP_ADAPTER pAd,
6528 IN TX_BLK *pTxBlk,
6529 IN UCHAR fragNum,
6530 OUT USHORT *FreeNumber);
6532 USHORT RtmpUSB_WriteMultiTxResource(
6533 IN PRTMP_ADAPTER pAd,
6534 IN TX_BLK *pTxBlk,
6535 IN UCHAR frameNum,
6536 OUT USHORT *FreeNumber);
6538 VOID RtmpUSB_FinalWriteTxResource(
6539 IN PRTMP_ADAPTER pAd,
6540 IN TX_BLK *pTxBlk,
6541 IN USHORT totalMPDUSize,
6542 IN USHORT TxIdx);
6544 VOID RtmpUSBDataLastTxIdx(
6545 IN PRTMP_ADAPTER pAd,
6546 IN UCHAR QueIdx,
6547 IN USHORT TxIdx);
6549 VOID RtmpUSBDataKickOut(
6550 IN PRTMP_ADAPTER pAd,
6551 IN TX_BLK *pTxBlk,
6552 IN UCHAR QueIdx);
6555 int RtmpUSBMgmtKickOut(
6556 IN RTMP_ADAPTER *pAd,
6557 IN UCHAR QueIdx,
6558 IN PNDIS_PACKET pPacket,
6559 IN PUCHAR pSrcBufVA,
6560 IN UINT SrcBufLen);
6562 VOID RtmpUSBNullFrameKickOut(
6563 IN RTMP_ADAPTER *pAd,
6564 IN UCHAR QueIdx,
6565 IN UCHAR *pNullFrame,
6566 IN UINT32 frameLen);
6568 VOID RT28xxUsbStaAsicForceWakeup(
6569 IN PRTMP_ADAPTER pAd,
6570 IN BOOLEAN bFromTx);
6572 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
6573 IN PRTMP_ADAPTER pAd,
6574 IN USHORT TbttNumToNextWakeUp);
6576 VOID RT28xxUsbMlmeRadioOn(
6577 IN PRTMP_ADAPTER pAd);
6579 VOID RT28xxUsbMlmeRadioOFF(
6580 IN PRTMP_ADAPTER pAd);
6581 #endif // RT2870 //
6583 ////////////////////////////////////////
6585 VOID QBSS_LoadInit(
6586 IN RTMP_ADAPTER *pAd);
6588 UINT32 QBSS_LoadElementAppend(
6589 IN RTMP_ADAPTER *pAd,
6590 OUT UINT8 *buf_p);
6592 VOID QBSS_LoadUpdate(
6593 IN RTMP_ADAPTER *pAd);
6595 ///////////////////////////////////////
6596 INT RTMPShowCfgValue(
6597 IN PRTMP_ADAPTER pAd,
6598 IN PUCHAR pName,
6599 IN PUCHAR pBuf);
6601 PCHAR RTMPGetRalinkAuthModeStr(
6602 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6604 PCHAR RTMPGetRalinkEncryModeStr(
6605 IN USHORT encryMode);
6606 //////////////////////////////////////
6608 VOID AsicStaBbpTuning(
6609 IN PRTMP_ADAPTER pAd);
6611 BOOLEAN StaAddMacTableEntry(
6612 IN PRTMP_ADAPTER pAd,
6613 IN PMAC_TABLE_ENTRY pEntry,
6614 IN UCHAR MaxSupportedRateIn500Kbps,
6615 IN HT_CAPABILITY_IE *pHtCapability,
6616 IN UCHAR HtCapabilityLen,
6617 IN USHORT CapabilityInfo);
6619 void RTMP_IndicateMediaState(
6620 IN PRTMP_ADAPTER pAd);
6622 VOID ReSyncBeaconTime(
6623 IN PRTMP_ADAPTER pAd);
6625 VOID RTMPSetAGCInitValue(
6626 IN PRTMP_ADAPTER pAd,
6627 IN UCHAR BandWidth);
6629 int rt28xx_close(IN PNET_DEV dev);
6630 int rt28xx_open(IN PNET_DEV dev);
6632 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6634 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6635 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6637 if (VIRTUAL_IF_NUM(pAd) == 0)
6639 if (rt28xx_open(pAd->net_dev) != 0)
6640 return -1;
6642 else
6645 VIRTUAL_IF_INC(pAd);
6646 return 0;
6649 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6651 VIRTUAL_IF_DEC(pAd);
6652 if (VIRTUAL_IF_NUM(pAd) == 0)
6653 rt28xx_close(pAd->net_dev);
6654 return;
6658 #endif // __RTMP_H__