Staging: rt2870: remove dead DOT11N_DRAFT3 code
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / staging / rt2870 / rtmp.h
blob5e22a3aa7eab95ceb46d5b20feaa9046869caed5
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"
47 #ifdef CONFIG_STA_SUPPORT
48 #include "aironet.h"
49 #endif // CONFIG_STA_SUPPORT //
51 //#define DBG 1
53 //#define DBG_DIAGNOSE 1
55 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
56 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
57 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
58 #else
59 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
60 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
61 #endif
63 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
64 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
65 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
67 #ifdef RT2870
68 ////////////////////////////////////////////////////////////////////////////
69 // The TX_BUFFER structure forms the transmitted USB packet to the device
70 ////////////////////////////////////////////////////////////////////////////
71 typedef struct __TX_BUFFER{
72 union {
73 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
74 HEADER_802_11 NullFrame;
75 PSPOLL_FRAME PsPollPacket;
76 RTS_FRAME RTSFrame;
77 }field;
78 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
79 } TX_BUFFER, *PTX_BUFFER;
81 typedef struct __HTTX_BUFFER{
82 union {
83 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
84 HEADER_802_11 NullFrame;
85 PSPOLL_FRAME PsPollPacket;
86 RTS_FRAME RTSFrame;
87 }field;
88 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
89 } HTTX_BUFFER, *PHTTX_BUFFER;
92 // used to track driver-generated write irps
93 typedef struct _TX_CONTEXT
95 PVOID pAd; //Initialized in MiniportInitialize
96 PURB pUrb; //Initialized in MiniportInitialize
97 PIRP pIrp; //used to cancel pending bulk out.
98 //Initialized in MiniportInitialize
99 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
100 ULONG BulkOutSize;
101 UCHAR BulkOutPipeId;
102 UCHAR SelfIdx;
103 BOOLEAN InUse;
104 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
105 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
106 BOOLEAN IRPPending;
107 BOOLEAN LastOne;
108 BOOLEAN bAggregatible;
109 UCHAR Header_802_3[LENGTH_802_3];
110 UCHAR Rsv[2];
111 ULONG DataOffset;
112 UINT TxRate;
113 dma_addr_t data_dma; // urb dma on linux
115 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
118 // used to track driver-generated write irps
119 typedef struct _HT_TX_CONTEXT
121 PVOID pAd; //Initialized in MiniportInitialize
122 PURB pUrb; //Initialized in MiniportInitialize
123 PIRP pIrp; //used to cancel pending bulk out.
124 //Initialized in MiniportInitialize
125 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
126 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
127 UCHAR BulkOutPipeId;
128 BOOLEAN IRPPending;
129 BOOLEAN LastOne;
130 BOOLEAN bCurWriting;
131 BOOLEAN bRingEmpty;
132 BOOLEAN bCopySavePad;
133 UCHAR SavedPad[8];
134 UCHAR Header_802_3[LENGTH_802_3];
135 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
136 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
137 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
138 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
139 UINT TxRate;
140 dma_addr_t data_dma; // urb dma on linux
141 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
145 // Structure to keep track of receive packets and buffers to indicate
146 // receive data to the protocol.
148 typedef struct _RX_CONTEXT
150 PUCHAR TransferBuffer;
151 PVOID pAd;
152 PIRP pIrp;//used to cancel pending bulk in.
153 PURB pUrb;
154 //These 2 Boolean shouldn't both be 1 at the same time.
155 ULONG BulkInOffset; // number of packets waiting for reordering .
156 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
157 BOOLEAN bRxHandling; // Notify this packet is being process now.
158 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
159 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
160 BOOLEAN IRPPending; // TODO: To be removed
161 atomic_t IrpLock;
162 NDIS_SPIN_LOCK RxContextLock;
163 dma_addr_t data_dma; // urb dma on linux
164 } RX_CONTEXT, *PRX_CONTEXT;
165 #endif // RT2870 //
169 // NDIS Version definitions
171 #ifdef NDIS50_MINIPORT
172 #define RTMP_NDIS_MAJOR_VERSION 5
173 #define RTMP_NDIS_MINOR_VERSION 0
174 #endif
176 #ifdef NDIS51_MINIPORT
177 #define RTMP_NDIS_MAJOR_VERSION 5
178 #define RTMP_NDIS_MINOR_VERSION 1
179 #endif
181 extern char NIC_VENDOR_DESC[];
182 extern int NIC_VENDOR_DESC_LEN;
184 extern unsigned char SNAP_AIRONET[];
185 extern unsigned char CipherSuiteCiscoCCKM[];
186 extern unsigned char CipherSuiteCiscoCCKMLen;
187 extern unsigned char CipherSuiteCiscoCCKM24[];
188 extern unsigned char CipherSuiteCiscoCCKM24Len;
189 extern unsigned char CipherSuiteCCXTkip[];
190 extern unsigned char CipherSuiteCCXTkipLen;
191 extern unsigned char CISCO_OUI[];
192 extern UCHAR BaSizeArray[4];
194 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
196 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
197 extern ULONG BIT32[32];
198 extern UCHAR BIT8[8];
199 extern char* CipherName[];
200 extern char* MCSToMbps[];
201 extern UCHAR RxwiMCSToOfdmRate[12];
202 extern UCHAR SNAP_802_1H[6];
203 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
204 extern UCHAR SNAP_AIRONET[8];
205 extern UCHAR CKIP_LLC_SNAP[8];
206 extern UCHAR EAPOL_LLC_SNAP[8];
207 extern UCHAR EAPOL[2];
208 extern UCHAR IPX[2];
209 extern UCHAR APPLE_TALK[2];
210 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
211 extern UCHAR OfdmRateToRxwiMCS[];
212 extern UCHAR OfdmSignalToRateId[16] ;
213 extern UCHAR default_cwmin[4];
214 extern UCHAR default_cwmax[4];
215 extern UCHAR default_sta_aifsn[4];
216 extern UCHAR MapUserPriorityToAccessCategory[8];
218 extern USHORT RateUpPER[];
219 extern USHORT RateDownPER[];
220 extern UCHAR Phy11BNextRateDownward[];
221 extern UCHAR Phy11BNextRateUpward[];
222 extern UCHAR Phy11BGNextRateDownward[];
223 extern UCHAR Phy11BGNextRateUpward[];
224 extern UCHAR Phy11ANextRateDownward[];
225 extern UCHAR Phy11ANextRateUpward[];
226 extern CHAR RssiSafeLevelForTxRate[];
227 extern UCHAR RateIdToMbps[];
228 extern USHORT RateIdTo500Kbps[];
230 extern UCHAR CipherSuiteWpaNoneTkip[];
231 extern UCHAR CipherSuiteWpaNoneTkipLen;
233 extern UCHAR CipherSuiteWpaNoneAes[];
234 extern UCHAR CipherSuiteWpaNoneAesLen;
236 extern UCHAR SsidIe;
237 extern UCHAR SupRateIe;
238 extern UCHAR ExtRateIe;
240 #ifdef DOT11_N_SUPPORT
241 extern UCHAR HtCapIe;
242 extern UCHAR AddHtInfoIe;
243 extern UCHAR NewExtChanIe;
244 #endif // DOT11_N_SUPPORT //
246 extern UCHAR ErpIe;
247 extern UCHAR DsIe;
248 extern UCHAR TimIe;
249 extern UCHAR WpaIe;
250 extern UCHAR Wpa2Ie;
251 extern UCHAR IbssIe;
252 extern UCHAR Ccx2Ie;
254 extern UCHAR WPA_OUI[];
255 extern UCHAR RSN_OUI[];
256 extern UCHAR WME_INFO_ELEM[];
257 extern UCHAR WME_PARM_ELEM[];
258 extern UCHAR Ccx2QosInfo[];
259 extern UCHAR Ccx2IeInfo[];
260 extern UCHAR RALINK_OUI[];
261 extern UCHAR PowerConstraintIE[];
264 extern UCHAR RateSwitchTable[];
265 extern UCHAR RateSwitchTable11B[];
266 extern UCHAR RateSwitchTable11G[];
267 extern UCHAR RateSwitchTable11BG[];
269 #ifdef DOT11_N_SUPPORT
270 extern UCHAR RateSwitchTable11BGN1S[];
271 extern UCHAR RateSwitchTable11BGN2S[];
272 extern UCHAR RateSwitchTable11BGN2SForABand[];
273 extern UCHAR RateSwitchTable11N1S[];
274 extern UCHAR RateSwitchTable11N2S[];
275 extern UCHAR RateSwitchTable11N2SForABand[];
277 #ifdef CONFIG_STA_SUPPORT
278 extern UCHAR PRE_N_HT_OUI[];
279 #endif // CONFIG_STA_SUPPORT //
280 #endif // DOT11_N_SUPPORT //
282 #define MAXSEQ (0xFFF)
284 #ifdef DOT11_N_SUPPORT
285 struct reordering_mpdu
287 struct reordering_mpdu *next;
288 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
289 int Sequence; /* sequence number of MPDU */
290 BOOLEAN bAMSDU;
293 struct reordering_list
295 struct reordering_mpdu *next;
296 int qlen;
299 struct reordering_mpdu_pool
301 PVOID mem;
302 NDIS_SPIN_LOCK lock;
303 struct reordering_list freelist;
305 #endif // DOT11_N_SUPPORT //
307 typedef struct _RSSI_SAMPLE {
308 CHAR LastRssi0; // last received RSSI
309 CHAR LastRssi1; // last received RSSI
310 CHAR LastRssi2; // last received RSSI
311 CHAR AvgRssi0;
312 CHAR AvgRssi1;
313 CHAR AvgRssi2;
314 SHORT AvgRssi0X8;
315 SHORT AvgRssi1X8;
316 SHORT AvgRssi2X8;
317 } RSSI_SAMPLE;
320 // Queue structure and macros
322 typedef struct _QUEUE_ENTRY {
323 struct _QUEUE_ENTRY *Next;
324 } QUEUE_ENTRY, *PQUEUE_ENTRY;
326 // Queue structure
327 typedef struct _QUEUE_HEADER {
328 PQUEUE_ENTRY Head;
329 PQUEUE_ENTRY Tail;
330 ULONG Number;
331 } QUEUE_HEADER, *PQUEUE_HEADER;
333 #define InitializeQueueHeader(QueueHeader) \
335 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
336 (QueueHeader)->Number = 0; \
339 #define RemoveHeadQueue(QueueHeader) \
340 (QueueHeader)->Head; \
342 PQUEUE_ENTRY pNext; \
343 if ((QueueHeader)->Head != NULL) \
345 pNext = (QueueHeader)->Head->Next; \
346 (QueueHeader)->Head = pNext; \
347 if (pNext == NULL) \
348 (QueueHeader)->Tail = NULL; \
349 (QueueHeader)->Number--; \
353 #define InsertHeadQueue(QueueHeader, QueueEntry) \
355 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
356 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
357 if ((QueueHeader)->Tail == NULL) \
358 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
359 (QueueHeader)->Number++; \
362 #define InsertTailQueue(QueueHeader, QueueEntry) \
364 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
365 if ((QueueHeader)->Tail) \
366 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
367 else \
368 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
369 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
370 (QueueHeader)->Number++; \
374 // Macros for flag and ref count operations
376 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
377 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
378 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
379 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
380 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
382 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
383 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
384 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
386 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
387 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
388 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
390 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
391 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
392 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
394 #ifdef CONFIG_STA_SUPPORT
395 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
396 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
397 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
398 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
400 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
401 #endif // CONFIG_STA_SUPPORT //
403 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
404 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
407 #define INC_RING_INDEX(_idx, _RingSize) \
409 (_idx) = (_idx+1) % (_RingSize); \
412 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
414 #define RING_PACKET_INIT(_TxRing, _idx) \
416 _TxRing->Cell[_idx].pNdisPacket = NULL; \
417 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
420 #define TXDT_INIT(_TxD) \
422 NdisZeroMemory(_TxD, TXD_SIZE); \
423 _TxD->DMADONE = 1; \
426 //Set last data segment
427 #define RING_SET_LASTDS(_TxD, _IsSD0) \
429 if (_IsSD0) {_TxD->LastSec0 = 1;} \
430 else {_TxD->LastSec1 = 1;} \
433 // Increase TxTsc value for next transmission
434 // TODO:
435 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
436 // Should send a special event microsoft defined to request re-key
437 #define INC_TX_TSC(_tsc) \
439 int i=0; \
440 while (++_tsc[i] == 0x0) \
442 i++; \
443 if (i == 6) \
444 break; \
448 #ifdef DOT11_N_SUPPORT
449 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
450 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
452 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
453 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
454 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
455 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
456 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
457 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
458 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
459 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
460 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
461 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
462 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
463 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
466 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
468 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
469 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
470 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
472 #endif // DOT11_N_SUPPORT //
475 // BBP & RF are using indirect access. Before write any value into it.
476 // We have to make sure there is no outstanding command pending via checking busy bit.
478 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
481 #ifdef RT2870
482 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
483 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
484 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
486 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
487 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
488 #endif // RT2870 //
490 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
491 switch (ch) \
493 case 1: khz = 2412000; break; \
494 case 2: khz = 2417000; break; \
495 case 3: khz = 2422000; break; \
496 case 4: khz = 2427000; break; \
497 case 5: khz = 2432000; break; \
498 case 6: khz = 2437000; break; \
499 case 7: khz = 2442000; break; \
500 case 8: khz = 2447000; break; \
501 case 9: khz = 2452000; break; \
502 case 10: khz = 2457000; break; \
503 case 11: khz = 2462000; break; \
504 case 12: khz = 2467000; break; \
505 case 13: khz = 2472000; break; \
506 case 14: khz = 2484000; break; \
507 case 36: /* UNII */ khz = 5180000; break; \
508 case 40: /* UNII */ khz = 5200000; break; \
509 case 44: /* UNII */ khz = 5220000; break; \
510 case 48: /* UNII */ khz = 5240000; break; \
511 case 52: /* UNII */ khz = 5260000; break; \
512 case 56: /* UNII */ khz = 5280000; break; \
513 case 60: /* UNII */ khz = 5300000; break; \
514 case 64: /* UNII */ khz = 5320000; break; \
515 case 149: /* UNII */ khz = 5745000; break; \
516 case 153: /* UNII */ khz = 5765000; break; \
517 case 157: /* UNII */ khz = 5785000; break; \
518 case 161: /* UNII */ khz = 5805000; break; \
519 case 165: /* UNII */ khz = 5825000; break; \
520 case 100: /* HiperLAN2 */ khz = 5500000; break; \
521 case 104: /* HiperLAN2 */ khz = 5520000; break; \
522 case 108: /* HiperLAN2 */ khz = 5540000; break; \
523 case 112: /* HiperLAN2 */ khz = 5560000; break; \
524 case 116: /* HiperLAN2 */ khz = 5580000; break; \
525 case 120: /* HiperLAN2 */ khz = 5600000; break; \
526 case 124: /* HiperLAN2 */ khz = 5620000; break; \
527 case 128: /* HiperLAN2 */ khz = 5640000; break; \
528 case 132: /* HiperLAN2 */ khz = 5660000; break; \
529 case 136: /* HiperLAN2 */ khz = 5680000; break; \
530 case 140: /* HiperLAN2 */ khz = 5700000; break; \
531 case 34: /* Japan MMAC */ khz = 5170000; break; \
532 case 38: /* Japan MMAC */ khz = 5190000; break; \
533 case 42: /* Japan MMAC */ khz = 5210000; break; \
534 case 46: /* Japan MMAC */ khz = 5230000; break; \
535 case 184: /* Japan */ khz = 4920000; break; \
536 case 188: /* Japan */ khz = 4940000; break; \
537 case 192: /* Japan */ khz = 4960000; break; \
538 case 196: /* Japan */ khz = 4980000; break; \
539 case 208: /* Japan, means J08 */ khz = 5040000; break; \
540 case 212: /* Japan, means J12 */ khz = 5060000; break; \
541 case 216: /* Japan, means J16 */ khz = 5080000; break; \
542 default: khz = 2412000; break; \
546 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
547 switch (khz) \
549 case 2412000: ch = 1; break; \
550 case 2417000: ch = 2; break; \
551 case 2422000: ch = 3; break; \
552 case 2427000: ch = 4; break; \
553 case 2432000: ch = 5; break; \
554 case 2437000: ch = 6; break; \
555 case 2442000: ch = 7; break; \
556 case 2447000: ch = 8; break; \
557 case 2452000: ch = 9; break; \
558 case 2457000: ch = 10; break; \
559 case 2462000: ch = 11; break; \
560 case 2467000: ch = 12; break; \
561 case 2472000: ch = 13; break; \
562 case 2484000: ch = 14; break; \
563 case 5180000: ch = 36; /* UNII */ break; \
564 case 5200000: ch = 40; /* UNII */ break; \
565 case 5220000: ch = 44; /* UNII */ break; \
566 case 5240000: ch = 48; /* UNII */ break; \
567 case 5260000: ch = 52; /* UNII */ break; \
568 case 5280000: ch = 56; /* UNII */ break; \
569 case 5300000: ch = 60; /* UNII */ break; \
570 case 5320000: ch = 64; /* UNII */ break; \
571 case 5745000: ch = 149; /* UNII */ break; \
572 case 5765000: ch = 153; /* UNII */ break; \
573 case 5785000: ch = 157; /* UNII */ break; \
574 case 5805000: ch = 161; /* UNII */ break; \
575 case 5825000: ch = 165; /* UNII */ break; \
576 case 5500000: ch = 100; /* HiperLAN2 */ break; \
577 case 5520000: ch = 104; /* HiperLAN2 */ break; \
578 case 5540000: ch = 108; /* HiperLAN2 */ break; \
579 case 5560000: ch = 112; /* HiperLAN2 */ break; \
580 case 5580000: ch = 116; /* HiperLAN2 */ break; \
581 case 5600000: ch = 120; /* HiperLAN2 */ break; \
582 case 5620000: ch = 124; /* HiperLAN2 */ break; \
583 case 5640000: ch = 128; /* HiperLAN2 */ break; \
584 case 5660000: ch = 132; /* HiperLAN2 */ break; \
585 case 5680000: ch = 136; /* HiperLAN2 */ break; \
586 case 5700000: ch = 140; /* HiperLAN2 */ break; \
587 case 5170000: ch = 34; /* Japan MMAC */ break; \
588 case 5190000: ch = 38; /* Japan MMAC */ break; \
589 case 5210000: ch = 42; /* Japan MMAC */ break; \
590 case 5230000: ch = 46; /* Japan MMAC */ break; \
591 case 4920000: ch = 184; /* Japan */ break; \
592 case 4940000: ch = 188; /* Japan */ break; \
593 case 4960000: ch = 192; /* Japan */ break; \
594 case 4980000: ch = 196; /* Japan */ break; \
595 case 5040000: ch = 208; /* Japan, means J08 */ break; \
596 case 5060000: ch = 212; /* Japan, means J12 */ break; \
597 case 5080000: ch = 216; /* Japan, means J16 */ break; \
598 default: ch = 1; break; \
603 // Common fragment list structure - Identical to the scatter gather frag list structure
605 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
606 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
607 #define NIC_MAX_PHYS_BUF_COUNT 8
609 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
610 PVOID Address;
611 ULONG Length;
612 PULONG Reserved;
613 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
616 typedef struct _RTMP_SCATTER_GATHER_LIST {
617 ULONG NumberOfElements;
618 PULONG Reserved;
619 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
620 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
623 // Some utility macros
625 #ifndef min
626 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
627 #endif
629 #ifndef max
630 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
631 #endif
633 #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))))
635 #define INC_COUNTER64(Val) (Val.QuadPart++)
637 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
638 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
639 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
640 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
642 // Check LEAP & CCKM flags
643 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
644 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
646 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
647 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
649 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
651 _pExtraLlcSnapEncap = SNAP_802_1H; \
652 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
653 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
655 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
658 else \
660 _pExtraLlcSnapEncap = NULL; \
664 // New Define for new Tx Path.
665 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
667 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
669 _pExtraLlcSnapEncap = SNAP_802_1H; \
670 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
671 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
673 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
676 else \
678 _pExtraLlcSnapEncap = NULL; \
683 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
685 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
686 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
687 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
690 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
691 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
692 // else remove the LLC/SNAP field from the result Ethernet frame
693 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
694 // Note:
695 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
696 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
697 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
699 char LLC_Len[2]; \
701 _pRemovedLLCSNAP = NULL; \
702 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
703 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
705 PUCHAR pProto = _pData + 6; \
707 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
708 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
710 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
711 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
712 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
714 else \
716 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
717 _pRemovedLLCSNAP = _pData; \
718 _DataSize -= LENGTH_802_1_H; \
719 _pData += LENGTH_802_1_H; \
722 else \
724 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
725 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
726 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
730 #define SWITCH_AB( _pAA, _pBB) \
732 PVOID pCC; \
733 pCC = _pBB; \
734 _pBB = _pAA; \
735 _pAA = pCC; \
738 // Enqueue this frame to MLME engine
739 // We need to enqueue the whole frame because MLME need to pass data type
740 // information from 802.11 header
741 #ifdef RT2870
742 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
744 UINT32 High32TSF=0, Low32TSF=0; \
745 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
747 #endif // RT2870 //
749 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
750 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
752 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
753 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
756 // Check if it is Japan W53(ch52,56,60,64) channel.
758 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
760 #ifdef CONFIG_STA_SUPPORT
761 #define STA_PORT_SECURED(_pAd) \
763 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
764 NdisAcquireSpinLock(&_pAd->MacTabLock); \
765 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
766 NdisReleaseSpinLock(&_pAd->MacTabLock); \
768 #endif // CONFIG_STA_SUPPORT //
772 // Register set pair for initialzation register set definition
774 typedef struct _RTMP_REG_PAIR
776 ULONG Register;
777 ULONG Value;
778 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
780 typedef struct _REG_PAIR
782 UCHAR Register;
783 UCHAR Value;
784 } REG_PAIR, *PREG_PAIR;
787 // Register set pair for initialzation register set definition
789 typedef struct _RTMP_RF_REGS
791 UCHAR Channel;
792 ULONG R1;
793 ULONG R2;
794 ULONG R3;
795 ULONG R4;
796 } RTMP_RF_REGS, *PRTMP_RF_REGS;
798 typedef struct _FREQUENCY_ITEM {
799 UCHAR Channel;
800 UCHAR N;
801 UCHAR R;
802 UCHAR K;
803 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
806 // Data buffer for DMA operation, the buffer must be contiguous physical memory
807 // Both DMA to / from CPU use the same structure.
809 typedef struct _RTMP_DMABUF
811 ULONG AllocSize;
812 PVOID AllocVa; // TxBuf virtual address
813 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
814 } RTMP_DMABUF, *PRTMP_DMABUF;
817 typedef union _HEADER_802_11_SEQ{
818 #ifdef RT_BIG_ENDIAN
819 struct {
820 USHORT Sequence:12;
821 USHORT Frag:4;
822 } field;
823 #else
824 struct {
825 USHORT Frag:4;
826 USHORT Sequence:12;
827 } field;
828 #endif
829 USHORT value;
830 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
833 // Data buffer for DMA operation, the buffer must be contiguous physical memory
834 // Both DMA to / from CPU use the same structure.
836 typedef struct _RTMP_REORDERBUF
838 BOOLEAN IsFull;
839 PVOID AllocVa; // TxBuf virtual address
840 UCHAR Header802_3[14];
841 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
842 UCHAR DataOffset;
843 USHORT Datasize;
844 ULONG AllocSize;
845 #ifdef RT2870
846 PUCHAR AllocPa;
847 #endif // RT2870 //
848 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
851 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
852 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
853 // which won't be released, driver has to wait until upper layer return the packet
854 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
855 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
856 // which driver should ACK upper layer when the tx is physically done or failed.
858 typedef struct _RTMP_DMACB
860 ULONG AllocSize; // Control block size
861 PVOID AllocVa; // Control block virtual address
862 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
863 PNDIS_PACKET pNdisPacket;
864 PNDIS_PACKET pNextNdisPacket;
866 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
867 } RTMP_DMACB, *PRTMP_DMACB;
869 typedef struct _RTMP_TX_BUF
871 PQUEUE_ENTRY Next;
872 UCHAR Index;
873 ULONG AllocSize; // Control block size
874 PVOID AllocVa; // Control block virtual address
875 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
876 } RTMP_TXBUF, *PRTMP_TXBUF;
878 typedef struct _RTMP_RX_BUF
880 BOOLEAN InUse;
881 ULONG ByBaRecIndex;
882 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
883 } RTMP_RXBUF, *PRTMP_RXBUF;
884 typedef struct _RTMP_TX_RING
886 RTMP_DMACB Cell[TX_RING_SIZE];
887 UINT32 TxCpuIdx;
888 UINT32 TxDmaIdx;
889 UINT32 TxSwFreeIdx; // software next free tx index
890 } RTMP_TX_RING, *PRTMP_TX_RING;
892 typedef struct _RTMP_RX_RING
894 RTMP_DMACB Cell[RX_RING_SIZE];
895 UINT32 RxCpuIdx;
896 UINT32 RxDmaIdx;
897 INT32 RxSwReadIdx; // software next read index
898 } RTMP_RX_RING, *PRTMP_RX_RING;
900 typedef struct _RTMP_MGMT_RING
902 RTMP_DMACB Cell[MGMT_RING_SIZE];
903 UINT32 TxCpuIdx;
904 UINT32 TxDmaIdx;
905 UINT32 TxSwFreeIdx; // software next free tx index
906 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
909 // Statistic counter structure
911 typedef struct _COUNTER_802_3
913 // General Stats
914 ULONG GoodTransmits;
915 ULONG GoodReceives;
916 ULONG TxErrors;
917 ULONG RxErrors;
918 ULONG RxNoBuffer;
920 // Ethernet Stats
921 ULONG RcvAlignmentErrors;
922 ULONG OneCollision;
923 ULONG MoreCollisions;
925 } COUNTER_802_3, *PCOUNTER_802_3;
927 typedef struct _COUNTER_802_11 {
928 ULONG Length;
929 LARGE_INTEGER LastTransmittedFragmentCount;
930 LARGE_INTEGER TransmittedFragmentCount;
931 LARGE_INTEGER MulticastTransmittedFrameCount;
932 LARGE_INTEGER FailedCount;
933 LARGE_INTEGER RetryCount;
934 LARGE_INTEGER MultipleRetryCount;
935 LARGE_INTEGER RTSSuccessCount;
936 LARGE_INTEGER RTSFailureCount;
937 LARGE_INTEGER ACKFailureCount;
938 LARGE_INTEGER FrameDuplicateCount;
939 LARGE_INTEGER ReceivedFragmentCount;
940 LARGE_INTEGER MulticastReceivedFrameCount;
941 LARGE_INTEGER FCSErrorCount;
942 } COUNTER_802_11, *PCOUNTER_802_11;
944 typedef struct _COUNTER_RALINK {
945 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
946 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
947 ULONG BeenDisassociatedCount;
948 ULONG BadCQIAutoRecoveryCount;
949 ULONG PoorCQIRoamingCount;
950 ULONG MgmtRingFullCount;
951 ULONG RxCountSinceLastNULL;
952 ULONG RxCount;
953 ULONG RxRingErrCount;
954 ULONG KickTxCount;
955 ULONG TxRingErrCount;
956 LARGE_INTEGER RealFcsErrCount;
957 ULONG PendingNdisPacketCount;
959 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
960 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
961 UINT32 OneSecTxDoneCount;
962 ULONG OneSecRxCount;
963 UINT32 OneSecTxAggregationCount;
964 UINT32 OneSecRxAggregationCount;
966 UINT32 OneSecFrameDuplicateCount;
968 #ifdef RT2870
969 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
970 #endif // RT2870 //
972 UINT32 OneSecTxNoRetryOkCount;
973 UINT32 OneSecTxRetryOkCount;
974 UINT32 OneSecTxFailCount;
975 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
976 UINT32 OneSecRxOkCnt; // RX without error
977 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
978 UINT32 OneSecRxFcsErrCnt; // CRC error
979 UINT32 OneSecBeaconSentCnt;
980 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
981 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
982 ULONG DuplicateRcv;
983 ULONG TxAggCount;
984 ULONG TxNonAggCount;
985 ULONG TxAgg1MPDUCount;
986 ULONG TxAgg2MPDUCount;
987 ULONG TxAgg3MPDUCount;
988 ULONG TxAgg4MPDUCount;
989 ULONG TxAgg5MPDUCount;
990 ULONG TxAgg6MPDUCount;
991 ULONG TxAgg7MPDUCount;
992 ULONG TxAgg8MPDUCount;
993 ULONG TxAgg9MPDUCount;
994 ULONG TxAgg10MPDUCount;
995 ULONG TxAgg11MPDUCount;
996 ULONG TxAgg12MPDUCount;
997 ULONG TxAgg13MPDUCount;
998 ULONG TxAgg14MPDUCount;
999 ULONG TxAgg15MPDUCount;
1000 ULONG TxAgg16MPDUCount;
1002 LARGE_INTEGER TransmittedOctetsInAMSDU;
1003 LARGE_INTEGER TransmittedAMSDUCount;
1004 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1005 LARGE_INTEGER ReceivedAMSDUCount;
1006 LARGE_INTEGER TransmittedAMPDUCount;
1007 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1008 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1009 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1010 } COUNTER_RALINK, *PCOUNTER_RALINK;
1012 typedef struct _PID_COUNTER {
1013 ULONG TxAckRequiredCount; // CRC error
1014 ULONG TxAggreCount;
1015 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1016 ULONG LastSuccessRate;
1017 } PID_COUNTER, *PPID_COUNTER;
1019 typedef struct _COUNTER_DRS {
1020 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1021 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1022 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1023 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1024 ULONG CurrTxRateStableTime; // # of second in current TX rate
1025 BOOLEAN fNoisyEnvironment;
1026 BOOLEAN fLastSecAccordingRSSI;
1027 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1028 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1029 ULONG LastTxOkCount;
1030 } COUNTER_DRS, *PCOUNTER_DRS;
1033 // Arcfour Structure Added by PaulWu
1035 typedef struct _ARCFOUR
1037 UINT X;
1038 UINT Y;
1039 UCHAR STATE[256];
1040 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1042 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1043 typedef struct _RECEIVE_SETTING {
1044 #ifdef RT_BIG_ENDIAN
1045 USHORT MIMO:1;
1046 USHORT OFDM:1;
1047 USHORT rsv:3;
1048 USHORT STBC:2; //SPACE
1049 USHORT ShortGI:1;
1050 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1051 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1052 #else
1053 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1054 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1055 USHORT ShortGI:1;
1056 USHORT STBC:2; //SPACE
1057 USHORT rsv:3;
1058 USHORT OFDM:1;
1059 USHORT MIMO:1;
1060 #endif
1061 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1063 // Shared key data structure
1064 typedef struct _WEP_KEY {
1065 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1066 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1067 } WEP_KEY, *PWEP_KEY;
1069 typedef struct _CIPHER_KEY {
1070 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1071 UCHAR RxMic[8]; // make alignment
1072 UCHAR TxMic[8];
1073 UCHAR TxTsc[6]; // 48bit TSC value
1074 UCHAR RxTsc[6]; // 48bit TSC value
1075 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1076 UCHAR KeyLen;
1077 #ifdef CONFIG_STA_SUPPORT
1078 UCHAR BssId[6];
1079 #endif // CONFIG_STA_SUPPORT //
1080 // Key length for each key, 0: entry is invalid
1081 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1082 } CIPHER_KEY, *PCIPHER_KEY;
1084 typedef struct _BBP_TUNING_STRUCT {
1085 BOOLEAN Enable;
1086 UCHAR FalseCcaCountUpperBound; // 100 per sec
1087 UCHAR FalseCcaCountLowerBound; // 10 per sec
1088 UCHAR R17LowerBound; // specified in E2PROM
1089 UCHAR R17UpperBound; // 0x68 according to David Tung
1090 UCHAR CurrentR17Value;
1091 } BBP_TUNING, *PBBP_TUNING;
1093 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1094 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1095 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1096 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1097 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1098 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1099 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1100 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1101 SHORT Pair1LastAvgRssi; //
1102 SHORT Pair2LastAvgRssi; //
1103 ULONG RcvPktNumWhenEvaluate;
1104 BOOLEAN FirstPktArrivedWhenEvaluate;
1105 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1106 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1108 typedef struct _LEAP_AUTH_INFO {
1109 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1110 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1111 UCHAR Reserve[2];
1112 UCHAR UserName[256]; //LEAP, User name
1113 ULONG UserNameLen;
1114 UCHAR Password[256]; //LEAP, User Password
1115 ULONG PasswordLen;
1116 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1118 typedef struct {
1119 UCHAR Addr[MAC_ADDR_LEN];
1120 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1121 //00 02-Authentication timeout
1122 //00 03-Challenge from AP failed
1123 //00 04-Challenge to AP failed
1124 BOOLEAN Reported;
1125 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1127 typedef struct {
1128 UCHAR RogueApNr;
1129 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1130 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1132 typedef struct {
1133 BOOLEAN Enable;
1134 UCHAR Delta;
1135 BOOLEAN PlusSign;
1136 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1139 // Receive Tuple Cache Format
1141 typedef struct _TUPLE_CACHE {
1142 BOOLEAN Valid;
1143 UCHAR MacAddress[MAC_ADDR_LEN];
1144 USHORT Sequence;
1145 USHORT Frag;
1146 } TUPLE_CACHE, *PTUPLE_CACHE;
1149 // Fragment Frame structure
1151 typedef struct _FRAGMENT_FRAME {
1152 PNDIS_PACKET pFragPacket;
1153 ULONG RxSize;
1154 USHORT Sequence;
1155 USHORT LastFrag;
1156 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1157 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1161 // Packet information for NdisQueryPacket
1163 typedef struct _PACKET_INFO {
1164 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1165 UINT BufferCount ; // Number of Buffer descriptor chained
1166 UINT TotalPacketLength ; // Self explained
1167 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1168 } PACKET_INFO, *PPACKET_INFO;
1171 // Tkip Key structure which RC4 key & MIC calculation
1173 typedef struct _TKIP_KEY_INFO {
1174 UINT nBytesInM; // # bytes in M for MICKEY
1175 ULONG IV16;
1176 ULONG IV32;
1177 ULONG K0; // for MICKEY Low
1178 ULONG K1; // for MICKEY Hig
1179 ULONG L; // Current state for MICKEY
1180 ULONG R; // Current state for MICKEY
1181 ULONG M; // Message accumulator for MICKEY
1182 UCHAR RC4KEY[16];
1183 UCHAR MIC[8];
1184 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1187 // Private / Misc data, counters for driver internal use
1189 typedef struct __PRIVATE_STRUC {
1190 UINT SystemResetCnt; // System reset counter
1191 UINT TxRingFullCnt; // Tx ring full occurrance number
1192 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1193 // Variables for WEP encryption / decryption in rtmp_wep.c
1194 UINT FCSCRC32;
1195 ARCFOURCONTEXT WEPCONTEXT;
1196 // Tkip stuff
1197 TKIP_KEY_INFO Tx;
1198 TKIP_KEY_INFO Rx;
1199 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1201 // structure to tune BBP R66 (BBP TUNING)
1202 typedef struct _BBP_R66_TUNING {
1203 BOOLEAN bEnable;
1204 USHORT FalseCcaLowerThreshold; // default 100
1205 USHORT FalseCcaUpperThreshold; // default 512
1206 UCHAR R66Delta;
1207 UCHAR R66CurrentValue;
1208 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1209 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1211 // structure to store channel TX power
1212 typedef struct _CHANNEL_TX_POWER {
1213 USHORT RemainingTimeForUse; //unit: sec
1214 UCHAR Channel;
1215 CHAR Power;
1216 CHAR Power2;
1217 UCHAR MaxTxPwr;
1218 UCHAR DfsReq;
1219 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1221 // structure to store 802.11j channel TX power
1222 typedef struct _CHANNEL_11J_TX_POWER {
1223 UCHAR Channel;
1224 UCHAR BW; // BW_10 or BW_20
1225 CHAR Power;
1226 CHAR Power2;
1227 USHORT RemainingTimeForUse; //unit: sec
1228 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1230 typedef enum _ABGBAND_STATE_ {
1231 UNKNOWN_BAND,
1232 BG_BAND,
1233 A_BAND,
1234 } ABGBAND_STATE;
1236 typedef struct _MLME_STRUCT {
1237 #ifdef CONFIG_STA_SUPPORT
1238 // STA state machines
1239 STATE_MACHINE CntlMachine;
1240 STATE_MACHINE AssocMachine;
1241 STATE_MACHINE AuthMachine;
1242 STATE_MACHINE AuthRspMachine;
1243 STATE_MACHINE SyncMachine;
1244 STATE_MACHINE WpaPskMachine;
1245 STATE_MACHINE LeapMachine;
1246 STATE_MACHINE AironetMachine;
1247 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1248 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1249 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1250 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1251 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1252 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1253 #endif // CONFIG_STA_SUPPORT //
1254 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1255 // Action
1256 STATE_MACHINE ActMachine;
1258 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1259 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1260 ULONG LastSendNULLpsmTime;
1262 BOOLEAN bRunning;
1263 NDIS_SPIN_LOCK TaskLock;
1264 MLME_QUEUE Queue;
1266 UINT ShiftReg;
1268 RALINK_TIMER_STRUCT PeriodicTimer;
1269 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1270 RALINK_TIMER_STRUCT LinkDownTimer;
1271 RALINK_TIMER_STRUCT LinkUpTimer;
1272 ULONG PeriodicRound;
1273 ULONG OneSecPeriodicRound;
1275 UCHAR RealRxPath;
1276 BOOLEAN bLowThroughput;
1277 BOOLEAN bEnableAutoAntennaCheck;
1278 RALINK_TIMER_STRUCT RxAntEvalTimer;
1280 #ifdef RT2870
1281 UCHAR CaliBW40RfR24;
1282 UCHAR CaliBW20RfR24;
1283 #endif // RT2870 //
1285 } MLME_STRUCT, *PMLME_STRUCT;
1287 // structure for radar detection and channel switch
1288 typedef struct _RADAR_DETECT_STRUCT {
1289 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1290 UCHAR CSCount; //Channel switch counter
1291 UCHAR CSPeriod; //Channel switch period (beacon count)
1292 UCHAR RDCount; //Radar detection counter
1293 UCHAR RDMode; //Radar Detection mode
1294 UCHAR RDDurRegion; //Radar detection duration region
1295 UCHAR BBPR16;
1296 UCHAR BBPR17;
1297 UCHAR BBPR18;
1298 UCHAR BBPR21;
1299 UCHAR BBPR22;
1300 UCHAR BBPR64;
1301 ULONG InServiceMonitorCount; // unit: sec
1302 UINT8 DfsSessionTime;
1303 BOOLEAN bFastDfs;
1304 UINT8 ChMovingTime;
1305 UINT8 LongPulseRadarTh;
1306 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1308 typedef enum _REC_BLOCKACK_STATUS
1310 Recipient_NONE=0,
1311 Recipient_USED,
1312 Recipient_HandleRes,
1313 Recipient_Accept
1314 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1316 typedef enum _ORI_BLOCKACK_STATUS
1318 Originator_NONE=0,
1319 Originator_USED,
1320 Originator_WaitRes,
1321 Originator_Done
1322 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1324 #ifdef DOT11_N_SUPPORT
1325 typedef struct _BA_ORI_ENTRY{
1326 UCHAR Wcid;
1327 UCHAR TID;
1328 UCHAR BAWinSize;
1329 UCHAR Token;
1330 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1331 USHORT Sequence;
1332 USHORT TimeOutValue;
1333 ORI_BLOCKACK_STATUS ORI_BA_Status;
1334 RALINK_TIMER_STRUCT ORIBATimer;
1335 PVOID pAdapter;
1336 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1338 typedef struct _BA_REC_ENTRY {
1339 UCHAR Wcid;
1340 UCHAR TID;
1341 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1342 //UCHAR NumOfRxPkt;
1343 //UCHAR Curindidx; // the head in the RX reordering buffer
1344 USHORT LastIndSeq;
1345 // USHORT LastIndSeqAtTimer;
1346 USHORT TimeOutValue;
1347 RALINK_TIMER_STRUCT RECBATimer;
1348 ULONG LastIndSeqAtTimer;
1349 ULONG nDropPacket;
1350 ULONG rcvSeq;
1351 REC_BLOCKACK_STATUS REC_BA_Status;
1352 // UCHAR RxBufIdxUsed;
1353 // corresponding virtual address for RX reordering packet storage.
1354 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1355 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1356 // struct _BA_REC_ENTRY *pNext;
1357 PVOID pAdapter;
1358 struct reordering_list list;
1359 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1362 typedef struct {
1363 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1364 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1365 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1366 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1367 } BA_TABLE, *PBA_TABLE;
1369 //For QureyBATableOID use;
1370 typedef struct PACKED _OID_BA_REC_ENTRY{
1371 UCHAR MACAddr[MAC_ADDR_LEN];
1372 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1373 UCHAR rsv;
1374 UCHAR BufSize[8];
1375 REC_BLOCKACK_STATUS REC_BA_Status[8];
1376 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1378 //For QureyBATableOID use;
1379 typedef struct PACKED _OID_BA_ORI_ENTRY{
1380 UCHAR MACAddr[MAC_ADDR_LEN];
1381 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
1382 UCHAR rsv;
1383 UCHAR BufSize[8];
1384 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1385 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1387 typedef struct _QUERYBA_TABLE{
1388 OID_BA_ORI_ENTRY BAOriEntry[32];
1389 OID_BA_REC_ENTRY BARecEntry[32];
1390 UCHAR OriNum;// Number of below BAOriEntry
1391 UCHAR RecNum;// Number of below BARecEntry
1392 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1394 typedef union _BACAP_STRUC {
1395 #ifdef RT_BIG_ENDIAN
1396 struct {
1397 UINT32 :4;
1398 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.
1399 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1400 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1401 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1402 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1403 UINT32 MpduDensity:3;
1404 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1405 UINT32 AutoBA:1; // automatically BA
1406 UINT32 TxBAWinLimit:8;
1407 UINT32 RxBAWinLimit:8;
1408 } field;
1409 #else
1410 struct {
1411 UINT32 RxBAWinLimit:8;
1412 UINT32 TxBAWinLimit:8;
1413 UINT32 AutoBA:1; // automatically BA
1414 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1415 UINT32 MpduDensity:3;
1416 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1417 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1418 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1419 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1420 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.
1421 UINT32 :4;
1422 } field;
1423 #endif
1424 UINT32 word;
1425 } BACAP_STRUC, *PBACAP_STRUC;
1426 #endif // DOT11_N_SUPPORT //
1428 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1429 typedef struct _IOT_STRUC {
1430 UCHAR Threshold[2];
1431 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1432 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1433 ULONG OneSecInWindowCount;
1434 ULONG OneSecFrameDuplicateCount;
1435 ULONG OneSecOutWindowCount;
1436 UCHAR DelOriAct;
1437 UCHAR DelRecAct;
1438 UCHAR RTSShortProt;
1439 UCHAR RTSLongProt;
1440 BOOLEAN bRTSLongProtOn;
1441 #ifdef CONFIG_STA_SUPPORT
1442 BOOLEAN bLastAtheros;
1443 BOOLEAN bCurrentAtheros;
1444 BOOLEAN bNowAtherosBurstOn;
1445 BOOLEAN bNextDisableRxBA;
1446 BOOLEAN bToggle;
1447 #endif // CONFIG_STA_SUPPORT //
1448 } IOT_STRUC, *PIOT_STRUC;
1450 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1451 typedef union _REG_TRANSMIT_SETTING {
1452 #ifdef RT_BIG_ENDIAN
1453 struct {
1454 UINT32 rsv:13;
1455 UINT32 EXTCHA:2;
1456 UINT32 HTMODE:1;
1457 UINT32 TRANSNO:2;
1458 UINT32 STBC:1; //SPACE
1459 UINT32 ShortGI:1;
1460 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1461 UINT32 TxBF:1; // 3*3
1462 UINT32 rsv0:10;
1463 //UINT32 MCS:7; // MCS
1464 //UINT32 PhyMode:4;
1465 } field;
1466 #else
1467 struct {
1468 //UINT32 PhyMode:4;
1469 //UINT32 MCS:7; // MCS
1470 UINT32 rsv0:10;
1471 UINT32 TxBF:1;
1472 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1473 UINT32 ShortGI:1;
1474 UINT32 STBC:1; //SPACE
1475 UINT32 TRANSNO:2;
1476 UINT32 HTMODE:1;
1477 UINT32 EXTCHA:2;
1478 UINT32 rsv:13;
1479 } field;
1480 #endif
1481 UINT32 word;
1482 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1484 typedef union _DESIRED_TRANSMIT_SETTING {
1485 #ifdef RT_BIG_ENDIAN
1486 struct {
1487 USHORT rsv:3;
1488 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1489 USHORT PhyMode:4;
1490 USHORT MCS:7; // MCS
1491 } field;
1492 #else
1493 struct {
1494 USHORT MCS:7; // MCS
1495 USHORT PhyMode:4;
1496 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1497 USHORT rsv:3;
1498 } field;
1499 #endif
1500 USHORT word;
1501 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1503 typedef struct {
1504 BOOLEAN IsRecipient;
1505 UCHAR MACAddr[MAC_ADDR_LEN];
1506 UCHAR TID;
1507 UCHAR nMSDU;
1508 USHORT TimeOut;
1509 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1510 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1513 // Multiple SSID structure
1515 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1516 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1518 /* clear bcmc TIM bit */
1519 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1520 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1522 /* set bcmc TIM bit */
1523 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1524 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1526 /* clear a station PS TIM bit */
1527 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1528 { UCHAR tim_offset = wcid >> 3; \
1529 UCHAR bit_offset = wcid & 0x7; \
1530 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1532 /* set a station PS TIM bit */
1533 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1534 { UCHAR tim_offset = wcid >> 3; \
1535 UCHAR bit_offset = wcid & 0x7; \
1536 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1538 #ifdef RT2870
1539 #define BEACON_BITMAP_MASK 0xff
1540 typedef struct _BEACON_SYNC_STRUCT_
1542 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1543 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1544 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1545 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1546 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1547 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1548 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1549 }BEACON_SYNC_STRUCT;
1550 #endif // RT2870 //
1552 typedef struct _MULTISSID_STRUCT {
1553 UCHAR Bssid[MAC_ADDR_LEN];
1554 UCHAR SsidLen;
1555 CHAR Ssid[MAX_LEN_OF_SSID];
1556 USHORT CapabilityInfo;
1558 PNET_DEV MSSIDDev;
1560 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1561 NDIS_802_11_WEP_STATUS WepStatus;
1562 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1563 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1565 ULONG TxCount;
1566 ULONG RxCount;
1567 ULONG ReceivedByteCount;
1568 ULONG TransmittedByteCount;
1569 ULONG RxErrorCount;
1570 ULONG RxDropCount;
1572 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1573 RT_HT_PHY_INFO DesiredHtPhyInfo;
1574 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1575 BOOLEAN bAutoTxRateSwitch;
1577 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1578 UCHAR DefaultKeyId;
1580 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1581 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1582 UCHAR DesiredRatesIndex;
1583 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1585 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1586 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1587 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1589 // WPA
1590 UCHAR GMK[32];
1591 UCHAR PMK[32];
1592 UCHAR GTK[32];
1593 BOOLEAN IEEE8021X;
1594 BOOLEAN PreAuth;
1595 UCHAR GNonce[32];
1596 UCHAR PortSecured;
1597 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1598 UCHAR BANClass3Data;
1599 ULONG IsolateInterStaTraffic;
1601 UCHAR RSNIE_Len[2];
1602 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1605 UCHAR TimIELocationInBeacon;
1606 UCHAR CapabilityInfoLocationInBeacon;
1607 // outgoing BEACON frame buffer and corresponding TXWI
1608 // PTXWI_STRUC BeaconTxWI; //
1609 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1611 BOOLEAN bHideSsid;
1612 UINT16 StationKeepAliveTime; // unit: second
1614 USHORT VLAN_VID;
1615 USHORT VLAN_Priority;
1617 RT_802_11_ACL AccessControlList;
1619 // EDCA Qos
1620 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1621 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1623 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1625 // For 802.1x daemon setting per BSS
1626 UCHAR radius_srv_num;
1627 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1629 #ifdef RTL865X_SOC
1630 unsigned int mylinkid;
1631 #endif
1634 UINT32 RcvdConflictSsidCount;
1635 UINT32 RcvdSpoofedAssocRespCount;
1636 UINT32 RcvdSpoofedReassocRespCount;
1637 UINT32 RcvdSpoofedProbeRespCount;
1638 UINT32 RcvdSpoofedBeaconCount;
1639 UINT32 RcvdSpoofedDisassocCount;
1640 UINT32 RcvdSpoofedAuthCount;
1641 UINT32 RcvdSpoofedDeauthCount;
1642 UINT32 RcvdSpoofedUnknownMgmtCount;
1643 UINT32 RcvdReplayAttackCount;
1645 CHAR RssiOfRcvdConflictSsid;
1646 CHAR RssiOfRcvdSpoofedAssocResp;
1647 CHAR RssiOfRcvdSpoofedReassocResp;
1648 CHAR RssiOfRcvdSpoofedProbeResp;
1649 CHAR RssiOfRcvdSpoofedBeacon;
1650 CHAR RssiOfRcvdSpoofedDisassoc;
1651 CHAR RssiOfRcvdSpoofedAuth;
1652 CHAR RssiOfRcvdSpoofedDeauth;
1653 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1654 CHAR RssiOfRcvdReplayAttack;
1656 BOOLEAN bBcnSntReq;
1657 UCHAR BcnBufIdx;
1658 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1660 // configuration common to OPMODE_AP as well as OPMODE_STA
1661 typedef struct _COMMON_CONFIG {
1663 BOOLEAN bCountryFlag;
1664 UCHAR CountryCode[3];
1665 UCHAR Geography;
1666 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1667 UCHAR CountryRegionForABand; // Enum of country region for A band
1668 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1669 USHORT Dsifs; // in units of usec
1670 ULONG PacketFilter; // Packet filter for receiving
1672 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1673 UCHAR SsidLen; // the actual ssid length in used
1674 UCHAR LastSsidLen; // the actual ssid length in used
1675 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1676 UCHAR LastBssid[MAC_ADDR_LEN];
1678 UCHAR Bssid[MAC_ADDR_LEN];
1679 USHORT BeaconPeriod;
1680 UCHAR Channel;
1681 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1683 #if 0 // move to STA_ADMIN_CONFIG
1684 UCHAR DefaultKeyId;
1686 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1687 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1688 NDIS_802_11_WEP_STATUS WepStatus;
1689 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1691 // Add to support different cipher suite for WPA2/WPA mode
1692 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1693 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1694 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1695 USHORT RsnCapability;
1697 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1698 #endif
1700 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1701 UCHAR SupRateLen;
1702 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1703 UCHAR ExtRateLen;
1704 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1705 UCHAR MaxDesiredRate;
1706 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1708 ULONG BasicRateBitmap; // backup basic ratebitmap
1710 BOOLEAN bAPSDCapable;
1711 BOOLEAN bInServicePeriod;
1712 BOOLEAN bAPSDAC_BE;
1713 BOOLEAN bAPSDAC_BK;
1714 BOOLEAN bAPSDAC_VI;
1715 BOOLEAN bAPSDAC_VO;
1716 BOOLEAN bNeedSendTriggerFrame;
1717 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1718 ULONG TriggerTimerCount;
1719 UCHAR MaxSPLength;
1720 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1721 // move to MULTISSID_STRUCT for MBSS
1722 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1723 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1724 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1725 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1726 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1727 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1728 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1729 //BOOLEAN bAutoTxRateSwitch;
1730 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1731 UCHAR RtsRate; // RATE_xxx
1732 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1733 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1734 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1736 USHORT RtsThreshold; // in unit of BYTE
1737 USHORT FragmentThreshold; // in unit of BYTE
1739 UCHAR TxPower; // in unit of mW
1740 ULONG TxPowerPercentage; // 0~100 %
1741 ULONG TxPowerDefault; // keep for TxPowerPercentage
1743 #ifdef DOT11_N_SUPPORT
1744 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1745 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1746 #endif // DOT11_N_SUPPORT //
1747 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1748 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1749 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1750 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1751 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1752 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1753 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1754 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1755 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1756 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1758 #ifdef DOT11_N_SUPPORT
1759 BOOLEAN bRdg;
1760 #endif // DOT11_N_SUPPORT //
1761 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1762 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1763 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1764 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1765 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1766 #ifdef CONFIG_STA_SUPPORT
1767 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1768 #endif // CONFIG_STA_SUPPORT //
1769 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1770 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1771 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1772 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1773 ULONG OpStatusFlags;
1775 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1776 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1778 // IEEE802.11H--DFS.
1779 RADAR_DETECT_STRUCT RadarDetect;
1781 #ifdef DOT11_N_SUPPORT
1782 // HT
1783 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1784 //RT_HT_CAPABILITY SupportedHtPhy;
1785 RT_HT_CAPABILITY DesiredHtPhy;
1786 HT_CAPABILITY_IE HtCapability;
1787 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1788 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1789 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1790 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
1792 BOOLEAN bHTProtect;
1793 BOOLEAN bMIMOPSEnable;
1794 BOOLEAN bBADecline;
1795 BOOLEAN bDisableReordering;
1796 BOOLEAN bForty_Mhz_Intolerant;
1797 BOOLEAN bExtChannelSwitchAnnouncement;
1798 BOOLEAN bRcvBSSWidthTriggerEvents;
1799 ULONG LastRcvBSSWidthTriggerEventsTime;
1801 UCHAR TxBASize;
1802 #endif // DOT11_N_SUPPORT //
1804 // Enable wireless event
1805 BOOLEAN bWirelessEvent;
1806 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1808 // Tx & Rx Stream number selection
1809 UCHAR TxStream;
1810 UCHAR RxStream;
1812 // transmit phy mode, trasmit rate for Multicast.
1813 #ifdef MCAST_RATE_SPECIFIC
1814 UCHAR McastTransmitMcs;
1815 UCHAR McastTransmitPhyMode;
1816 #endif // MCAST_RATE_SPECIFIC //
1818 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1820 #ifdef RT2870
1821 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1822 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1823 RT_HT_CAPABILITY SupportedHtPhy;
1824 ULONG MaxPktOneTxBulk;
1825 UCHAR TxBulkFactor;
1826 UCHAR RxBulkFactor;
1828 BEACON_SYNC_STRUCT *pBeaconSync;
1829 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1830 UINT32 BeaconAdjust;
1831 UINT32 BeaconFactor;
1832 UINT32 BeaconRemain;
1833 #endif // RT2870 //
1836 NDIS_SPIN_LOCK MeasureReqTabLock;
1837 PMEASURE_REQ_TAB pMeasureReqTab;
1839 NDIS_SPIN_LOCK TpcReqTabLock;
1840 PTPC_REQ_TAB pTpcReqTab;
1842 // transmit phy mode, trasmit rate for Multicast.
1843 #ifdef MCAST_RATE_SPECIFIC
1844 HTTRANSMIT_SETTING MCastPhyMode;
1845 #endif // MCAST_RATE_SPECIFIC //
1846 } COMMON_CONFIG, *PCOMMON_CONFIG;
1849 #ifdef CONFIG_STA_SUPPORT
1850 /* Modified by Wu Xi-Kun 4/21/2006 */
1851 // STA configuration and status
1852 typedef struct _STA_ADMIN_CONFIG {
1853 // GROUP 1 -
1854 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1855 // the user intended configuration, but not necessary fully equal to the final
1856 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1857 // AP or IBSS holder).
1858 // Once initialized, user configuration can only be changed via OID_xxx
1859 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1860 USHORT AtimWin; // used when starting a new IBSS
1862 // GROUP 2 -
1863 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1864 // the user intended configuration, and should be always applied to the final
1865 // settings in ACTIVE BSS without compromising with the BSS holder.
1866 // Once initialized, user configuration can only be changed via OID_xxx
1867 UCHAR RssiTrigger;
1868 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1869 USHORT DefaultListenCount; // default listen count;
1870 ULONG WindowsPowerMode; // Power mode for AC power
1871 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1872 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1873 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1874 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1876 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1877 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1878 USHORT DisassocReason;
1879 UCHAR DisassocSta[MAC_ADDR_LEN];
1880 USHORT DeauthReason;
1881 UCHAR DeauthSta[MAC_ADDR_LEN];
1882 USHORT AuthFailReason;
1883 UCHAR AuthFailSta[MAC_ADDR_LEN];
1885 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1886 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1887 NDIS_802_11_WEP_STATUS WepStatus;
1888 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1890 // Add to support different cipher suite for WPA2/WPA mode
1891 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1892 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1893 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1894 USHORT RsnCapability;
1896 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1898 UCHAR PMK[32]; // WPA PSK mode PMK
1899 UCHAR PTK[64]; // WPA PSK mode PTK
1900 UCHAR GTK[32]; // GTK from authenticator
1901 BSSID_INFO SavedPMK[PMKID_NO];
1902 UINT SavedPMKNum; // Saved PMKID number
1904 UCHAR DefaultKeyId;
1907 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1908 UCHAR PortSecured;
1910 // For WPA countermeasures
1911 ULONG LastMicErrorTime; // record last MIC error time
1912 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1913 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1914 // For WPA-PSK supplicant state
1915 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1916 UCHAR ReplayCounter[8];
1917 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1918 UCHAR SNonce[32]; // SNonce for WPA-PSK
1920 UCHAR LastSNR0; // last received BEACON's SNR
1921 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1922 RSSI_SAMPLE RssiSample;
1923 ULONG NumOfAvgRssiSample;
1925 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1926 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1927 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1928 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1930 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1931 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1932 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1933 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1934 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1935 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1936 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1939 // New for WPA, windows want us to to keep association information and
1940 // Fixed IEs from last association response
1941 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1942 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1943 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1944 USHORT ResVarIELen; // Length of next VIE include EID & Length
1945 UCHAR ResVarIEs[MAX_VIE_LEN];
1947 UCHAR RSNIE_Len;
1948 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
1950 // New variables used for CCX 1.0
1951 BOOLEAN bCkipOn;
1952 BOOLEAN bCkipCmicOn;
1953 UCHAR CkipFlag;
1954 UCHAR GIV[3]; //for CCX iv
1955 UCHAR RxSEQ[4];
1956 UCHAR TxSEQ[4];
1957 UCHAR CKIPMIC[4];
1958 UCHAR LeapAuthMode;
1959 LEAP_AUTH_INFO LeapAuthInfo;
1960 UCHAR HashPwd[16];
1961 UCHAR NetworkChallenge[8];
1962 UCHAR NetworkChallengeResponse[24];
1963 UCHAR PeerChallenge[8];
1965 UCHAR PeerChallengeResponse[24];
1966 UCHAR SessionKey[16]; //Network session keys (NSK)
1967 RALINK_TIMER_STRUCT LeapAuthTimer;
1968 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
1970 // New control flags for CCX
1971 CCX_CONTROL CCXControl; // Master administration state
1972 BOOLEAN CCXEnable; // Actual CCX state
1973 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
1974 USHORT CCXScanTime; // Time out to wait for beacon and probe response
1975 UCHAR CCXReqType; // Current processing CCX request type
1976 BSS_TABLE CCXBssTab; // BSS Table
1977 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
1978 USHORT FrameReportLen; // Current Frame report length
1979 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
1980 USHORT RPIDensity[8]; // Array for RPI density collection
1981 // Start address of each BSS table within FrameReportBuf
1982 // It's important to update the RxPower of the corresponding Bss
1983 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
1984 USHORT BeaconToken; // Token for beacon report
1985 ULONG LastBssIndex; // Most current reported Bss index
1986 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
1987 UCHAR RMReqCnt; // Number of measurement request saved.
1988 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
1989 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
1990 // It must be the same channel with maximum duration
1991 USHORT ParallelDuration; // Maximum duration for parallel measurement
1992 UCHAR ParallelChannel; // Only one channel with parallel measurement
1993 USHORT IAPPToken; // IAPP dialog token
1994 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
1995 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
1996 // Hack for channel load and noise histogram parameters
1997 UCHAR NHFactor; // Parameter for Noise histogram
1998 UCHAR CLFactor; // Parameter for channel load
2000 UCHAR KRK[16]; //Key Refresh Key.
2001 UCHAR BTK[32]; //Base Transient Key
2002 BOOLEAN CCKMLinkUpFlag;
2003 ULONG CCKMRN; //(Re)Association request number.
2004 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2005 UCHAR AironetCellPowerLimit; //in dBm
2006 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2007 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2008 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2009 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2010 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2011 USHORT CCXAdjacentAPChannel;
2012 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2014 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2015 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2017 UCHAR DtimCount; // 0.. DtimPeriod-1
2018 UCHAR DtimPeriod; // default = 3
2020 ////////////////////////////////////////////////////////////////////////////////////////
2021 // This is only for WHQL test.
2022 BOOLEAN WhqlTest;
2023 ////////////////////////////////////////////////////////////////////////////////////////
2025 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2026 // Fast Roaming
2027 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2028 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2030 #ifdef WPA_SUPPLICANT_SUPPORT
2031 BOOLEAN IEEE8021X;
2032 BOOLEAN IEEE8021x_required_keys;
2033 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2034 UCHAR DesireSharedKeyId;
2036 // 0: driver ignores wpa_supplicant
2037 // 1: wpa_supplicant initiates scanning and AP selection
2038 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2039 UCHAR WpaSupplicantUP;
2040 UCHAR WpaSupplicantScanCount;
2041 #endif // WPA_SUPPLICANT_SUPPORT //
2043 CHAR dev_name[16];
2044 USHORT OriDevType;
2046 BOOLEAN bTGnWifiTest;
2047 BOOLEAN bScanReqIsFromWebUI;
2049 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2050 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2051 RT_HT_PHY_INFO DesiredHtPhyInfo;
2052 BOOLEAN bAutoTxRateSwitch;
2053 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2055 // This data structure keep the current active BSS/IBSS's configuration that this STA
2056 // had agreed upon joining the network. Which means these parameters are usually decided
2057 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2058 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2059 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2060 // the current active settings.
2061 typedef struct _STA_ACTIVE_CONFIG {
2062 USHORT Aid;
2063 USHORT AtimWin; // in kusec; IBSS parameter set element
2064 USHORT CapabilityInfo;
2065 USHORT CfpMaxDuration;
2066 USHORT CfpPeriod;
2068 // Copy supported rate from desired AP's beacon. We are trying to match
2069 // AP's supported and extended rate settings.
2070 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2071 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2072 UCHAR SupRateLen;
2073 UCHAR ExtRateLen;
2074 // Copy supported ht from desired AP's beacon. We are trying to match
2075 RT_HT_PHY_INFO SupportedPhyInfo;
2076 RT_HT_CAPABILITY SupportedHtPhy;
2077 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2079 #ifdef RT2870
2080 // for USB interface, avoid in interrupt when write key
2081 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2082 NDIS_802_11_MAC_ADDRESS MacAddr;
2083 USHORT MacTabMatchWCID; // ASIC
2084 CIPHER_KEY CipherKey;
2085 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2086 #endif // RT2870 //
2087 #endif // CONFIG_STA_SUPPORT //
2089 // ----------- start of AP --------------------------
2090 // AUTH-RSP State Machine Aux data structure
2091 typedef struct _AP_MLME_AUX {
2092 UCHAR Addr[MAC_ADDR_LEN];
2093 USHORT Alg;
2094 CHAR Challenge[CIPHER_TEXT_LEN];
2095 } AP_MLME_AUX, *PAP_MLME_AUX;
2097 // structure to define WPA Group Key Rekey Interval
2098 typedef struct PACKED _RT_802_11_WPA_REKEY {
2099 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2100 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2101 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2103 typedef struct _MAC_TABLE_ENTRY {
2104 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2105 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2106 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2107 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2108 BOOLEAN ValidAsMesh;
2109 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2110 BOOLEAN isCached;
2111 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2113 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2114 //jan for wpa
2115 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2116 UCHAR CMTimerRunning;
2117 UCHAR apidx; // MBSS number
2118 UCHAR RSNIE_Len;
2119 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2120 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2121 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2122 UCHAR PTK[64];
2123 UCHAR ReTryCounter;
2124 RALINK_TIMER_STRUCT RetryTimer;
2125 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2126 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2127 NDIS_802_11_WEP_STATUS WepStatus;
2128 AP_WPA_STATE WpaState;
2129 GTK_STATE GTKState;
2130 USHORT PortSecured;
2131 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2132 CIPHER_KEY PairwiseKey;
2133 PVOID pAd;
2134 INT PMKID_CacheIdx;
2135 UCHAR PMKID[LEN_PMKID];
2138 UCHAR Addr[MAC_ADDR_LEN];
2139 UCHAR PsMode;
2140 SST Sst;
2141 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2142 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2143 USHORT Aid;
2144 USHORT CapabilityInfo;
2145 UCHAR LastRssi;
2146 ULONG NoDataIdleCount;
2147 UINT16 StationKeepAliveCount; // unit: second
2148 ULONG PsQIdleCount;
2149 QUEUE_HEADER PsQueue;
2151 UINT32 StaConnectTime; // the live time of this station since associated with AP
2154 #ifdef DOT11_N_SUPPORT
2155 BOOLEAN bSendBAR;
2156 USHORT NoBADataCountDown;
2158 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2159 UINT TxBFCount; // 3*3
2160 #endif // DOT11_N_SUPPORT //
2161 UINT FIFOCount;
2162 UINT DebugFIFOCount;
2163 UINT DebugTxCount;
2164 BOOLEAN bDlsInit;
2167 //====================================================
2168 //WDS entry needs these
2169 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2170 UINT MatchWDSTabIdx;
2171 UCHAR MaxSupportedRate;
2172 UCHAR CurrTxRate;
2173 UCHAR CurrTxRateIndex;
2174 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2175 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2176 // USHORT OneSecTxOkCount;
2177 UINT32 OneSecTxNoRetryOkCount;
2178 UINT32 OneSecTxRetryOkCount;
2179 UINT32 OneSecTxFailCount;
2180 UINT32 ContinueTxFailCnt;
2181 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2182 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2183 //====================================================
2185 BOOLEAN fNoisyEnvironment;
2186 BOOLEAN fLastSecAccordingRSSI;
2187 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2188 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2189 ULONG LastTxOkCount;
2190 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2192 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2193 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2194 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2195 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2196 ULONG ClientStatusFlags;
2198 // TODO: Shall we move that to DOT11_N_SUPPORT???
2199 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2201 #ifdef DOT11_N_SUPPORT
2202 // HT EWC MIMO-N used parameters
2203 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2204 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2205 USHORT TXAutoBAbitmap;
2206 USHORT BADeclineBitmap;
2207 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2208 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2209 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2211 // 802.11n features.
2212 UCHAR MpduDensity;
2213 UCHAR MaxRAmpduFactor;
2214 UCHAR AMsduSize;
2215 UCHAR MmpsMode; // MIMO power save more.
2217 HT_CAPABILITY_IE HTCapability;
2218 #endif // DOT11_N_SUPPORT //
2220 BOOLEAN bAutoTxRateSwitch;
2222 UCHAR RateLen;
2223 struct _MAC_TABLE_ENTRY *pNext;
2224 USHORT TxSeq[NUM_OF_TID];
2225 USHORT NonQosDataSeq;
2227 RSSI_SAMPLE RssiSample;
2229 UINT32 TXMCSExpected[16];
2230 UINT32 TXMCSSuccessful[16];
2231 UINT32 TXMCSFailed[16];
2232 UINT32 TXMCSAutoFallBack[16][16];
2234 #ifdef CONFIG_STA_SUPPORT
2235 ULONG LastBeaconRxTime;
2236 #endif // CONFIG_STA_SUPPORT //
2237 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2239 typedef struct _MAC_TABLE {
2240 USHORT Size;
2241 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2242 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2243 QUEUE_HEADER McastPsQueue;
2244 ULONG PsQIdleCount;
2245 BOOLEAN fAnyStationInPsm;
2246 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2247 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2248 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2249 #ifdef DOT11_N_SUPPORT
2250 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2251 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2252 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2253 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2254 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2255 #endif // DOT11_N_SUPPORT //
2256 } MAC_TABLE, *PMAC_TABLE;
2258 #ifdef DOT11_N_SUPPORT
2259 #define IS_HT_STA(_pMacEntry) \
2260 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2262 #define IS_HT_RATE(_pMacEntry) \
2263 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2265 #define PEER_IS_HT_RATE(_pMacEntry) \
2266 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2267 #endif // DOT11_N_SUPPORT //
2269 typedef struct _WDS_ENTRY {
2270 BOOLEAN Valid;
2271 UCHAR Addr[MAC_ADDR_LEN];
2272 ULONG NoDataIdleCount;
2273 struct _WDS_ENTRY *pNext;
2274 } WDS_ENTRY, *PWDS_ENTRY;
2276 typedef struct _WDS_TABLE_ENTRY {
2277 USHORT Size;
2278 UCHAR WdsAddr[MAC_ADDR_LEN];
2279 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2280 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2281 UCHAR MaxSupportedRate;
2282 UCHAR CurrTxRate;
2283 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2284 USHORT OneSecTxOkCount;
2285 USHORT OneSecTxRetryOkCount;
2286 USHORT OneSecTxFailCount;
2287 ULONG CurrTxRateStableTime; // # of second in current TX rate
2288 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2289 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2291 typedef struct _RT_802_11_WDS_ENTRY {
2292 PNET_DEV dev;
2293 UCHAR Valid;
2294 UCHAR PhyMode;
2295 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2296 UCHAR MacTabMatchWCID; // ASIC
2297 NDIS_802_11_WEP_STATUS WepStatus;
2298 UCHAR KeyIdx;
2299 CIPHER_KEY WdsKey;
2300 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2301 RT_HT_PHY_INFO DesiredHtPhyInfo;
2302 BOOLEAN bAutoTxRateSwitch;
2303 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2304 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2306 typedef struct _WDS_TABLE {
2307 UCHAR Mode;
2308 ULONG Size;
2309 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2310 } WDS_TABLE, *PWDS_TABLE;
2312 typedef struct _APCLI_STRUCT {
2313 PNET_DEV dev;
2314 #ifdef RTL865X_SOC
2315 unsigned int mylinkid;
2316 #endif
2317 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2318 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2319 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2320 UCHAR SsidLen;
2321 CHAR Ssid[MAX_LEN_OF_SSID];
2323 UCHAR CfgSsidLen;
2324 CHAR CfgSsid[MAX_LEN_OF_SSID];
2325 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2326 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2328 ULONG ApCliRcvBeaconTime;
2330 ULONG CtrlCurrState;
2331 ULONG SyncCurrState;
2332 ULONG AuthCurrState;
2333 ULONG AssocCurrState;
2334 ULONG WpaPskCurrState;
2336 USHORT AuthReqCnt;
2337 USHORT AssocReqCnt;
2339 ULONG ClientStatusFlags;
2340 UCHAR MpduDensity;
2342 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2343 NDIS_802_11_WEP_STATUS WepStatus;
2345 // Add to support different cipher suite for WPA2/WPA mode
2346 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2347 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2348 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2349 USHORT RsnCapability;
2351 UCHAR PSK[100]; // reserve PSK key material
2352 UCHAR PSKLen;
2353 UCHAR PMK[32]; // WPA PSK mode PMK
2354 //UCHAR PTK[64]; // WPA PSK mode PTK
2355 UCHAR GTK[32]; // GTK from authenticator
2357 //CIPHER_KEY PairwiseKey;
2358 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2359 UCHAR DefaultKeyId;
2361 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2362 //UCHAR PortSecured;
2364 // store RSN_IE built by driver
2365 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2366 UCHAR RSNIE_Len;
2368 // For WPA countermeasures
2369 ULONG LastMicErrorTime; // record last MIC error time
2370 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2371 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2373 // For WPA-PSK supplicant state
2374 //WPA_STATE WpaState; // Default is SS_NOTUSE
2375 //UCHAR ReplayCounter[8];
2376 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2377 UCHAR SNonce[32]; // SNonce for WPA-PSK
2378 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2380 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2381 RT_HT_PHY_INFO DesiredHtPhyInfo;
2382 BOOLEAN bAutoTxRateSwitch;
2383 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2384 } APCLI_STRUCT, *PAPCLI_STRUCT;
2386 // ----------- end of AP ----------------------------
2388 struct wificonf
2390 BOOLEAN bShortGI;
2391 BOOLEAN bGreenField;
2396 typedef struct _INF_PCI_CONFIG
2398 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2399 }INF_PCI_CONFIG;
2401 typedef struct _INF_USB_CONFIG
2403 UINT BulkInEpAddr; // bulk-in endpoint address
2404 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2406 }INF_USB_CONFIG;
2408 #ifdef IKANOS_VX_1X0
2409 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2411 struct IKANOS_TX_INFO
2413 struct net_device *netdev;
2414 IkanosWlanTxCbFuncP *fp;
2416 #endif // IKANOS_VX_1X0 //
2418 #ifdef DBG_DIAGNOSE
2419 #define DIAGNOSE_TIME 10 // 10 sec
2420 typedef struct _RtmpDiagStrcut_
2421 { // Diagnosis Related element
2422 unsigned char inited;
2423 unsigned char qIdx;
2424 unsigned char ArrayStartIdx;
2425 unsigned char ArrayCurIdx;
2426 // Tx Related Count
2427 USHORT TxDataCnt[DIAGNOSE_TIME];
2428 USHORT TxFailCnt[DIAGNOSE_TIME];
2429 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2430 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2431 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2432 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2433 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2435 USHORT TxAggCnt[DIAGNOSE_TIME];
2436 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2437 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2438 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2439 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2440 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2442 // Rx Related Count
2443 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2444 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2445 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2446 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2447 }RtmpDiagStruct;
2448 #endif // DBG_DIAGNOSE //
2452 // The miniport adapter structure
2454 typedef struct _RTMP_ADAPTER
2456 PVOID OS_Cookie; // save specific structure relative to OS
2457 PNET_DEV net_dev;
2458 ULONG VirtualIfCnt;
2462 NDIS_SPIN_LOCK irq_lock;
2463 UCHAR irq_disabled;
2465 #ifdef RT2870
2466 /*****************************************************************************************/
2467 /* USB related parameters */
2468 /*****************************************************************************************/
2469 struct usb_config_descriptor *config;
2470 UINT BulkInEpAddr; // bulk-in endpoint address
2471 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2473 UINT NumberOfPipes;
2474 USHORT BulkOutMaxPacketSize;
2475 USHORT BulkInMaxPacketSize;
2477 //======Control Flags
2478 LONG PendingIoCount;
2479 ULONG BulkFlags;
2480 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2483 //======Timer Thread
2484 RT2870_TIMER_QUEUE TimerQ;
2485 NDIS_SPIN_LOCK TimerQLock;
2488 //======Cmd Thread
2489 CmdQ CmdQ;
2490 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2492 BOOLEAN TimerFunc_kill;
2493 BOOLEAN mlme_kill;
2496 //======Semaphores (event)
2497 struct semaphore mlme_semaphore; /* to sleep thread on */
2498 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2499 struct semaphore RTUSBTimer_semaphore;
2500 #ifdef INF_AMAZON_SE
2501 struct semaphore UsbVendorReq_semaphore;
2502 PVOID UsbVendorReqBuf;
2503 #endif // INF_AMAZON_SE //
2504 struct completion TimerQComplete;
2505 struct completion mlmeComplete;
2506 struct completion CmdQComplete;
2507 wait_queue_head_t *wait;
2508 #endif // RT2870 //
2511 /*****************************************************************************************/
2512 /* Both PCI/USB related parameters */
2513 /*****************************************************************************************/
2516 /*****************************************************************************************/
2517 /* Tx related parameters */
2518 /*****************************************************************************************/
2519 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2520 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2522 #ifdef RT2870
2523 // Data related context and AC specified, 4 AC supported
2524 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2525 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2527 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2528 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2530 // 4 sets of Bulk Out index and pending flag
2531 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2533 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2534 UCHAR bulkResetPipeid;
2535 BOOLEAN MgmtBulkPending;
2536 ULONG bulkResetReq[6];
2537 #endif // RT2870 //
2539 // resource for software backlog queues
2540 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2541 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2543 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2544 RTMP_MGMT_RING MgmtRing;
2545 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2548 /*****************************************************************************************/
2549 /* Rx related parameters */
2550 /*****************************************************************************************/
2553 #ifdef RT2870
2554 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2555 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2556 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2557 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2558 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2559 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2560 ULONG TransferBufferLength; // current length of the packet buffer
2561 ULONG ReadPosition; // current read position in a packet buffer
2562 #endif // RT2870 //
2565 /*****************************************************************************************/
2566 /* ASIC related parameters */
2567 /*****************************************************************************************/
2568 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2570 // ---------------------------
2571 // E2PROM
2572 // ---------------------------
2573 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2574 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2575 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2576 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2578 // ---------------------------
2579 // BBP Control
2580 // ---------------------------
2581 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2582 UCHAR BbpRssiToDbmDelta;
2583 BBP_R66_TUNING BbpTuning;
2585 // ----------------------------
2586 // RFIC control
2587 // ----------------------------
2588 UCHAR RfIcType; // RFIC_xxx
2589 ULONG RfFreqOffset; // Frequency offset for channel switching
2590 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2592 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2593 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2595 // This soft Rx Antenna Diversity mechanism is used only when user set
2596 // RX Antenna = DIVERSITY ON
2597 SOFT_RX_ANT_DIVERSITY RxAnt;
2599 UCHAR RFProgSeq;
2600 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2601 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2602 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2603 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2605 UCHAR ChannelListNum; // number of channel in ChannelList[]
2606 UCHAR Bbp94;
2607 BOOLEAN BbpForCCK;
2608 ULONG Tx20MPwrCfgABand[5];
2609 ULONG Tx20MPwrCfgGBand[5];
2610 ULONG Tx40MPwrCfgABand[5];
2611 ULONG Tx40MPwrCfgGBand[5];
2613 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2614 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2615 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2616 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2617 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2618 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2620 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2621 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2622 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2623 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2624 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2625 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2627 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2628 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2629 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2630 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2631 //---
2633 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2634 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2635 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2636 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2637 //---
2639 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2640 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2641 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2642 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2644 // ----------------------------
2645 // LED control
2646 // ----------------------------
2647 MCU_LEDCS_STRUC LedCntl;
2648 USHORT Led1; // read from EEPROM 0x3c
2649 USHORT Led2; // EEPROM 0x3e
2650 USHORT Led3; // EEPROM 0x40
2651 UCHAR LedIndicatorStregth;
2652 UCHAR RssiSingalstrengthOffet;
2653 BOOLEAN bLedOnScanning;
2654 UCHAR LedStatus;
2656 /*****************************************************************************************/
2657 /* 802.11 related parameters */
2658 /*****************************************************************************************/
2659 // outgoing BEACON frame buffer and corresponding TXD
2660 TXWI_STRUC BeaconTxWI;
2661 PUCHAR BeaconBuf;
2662 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2664 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2665 PSPOLL_FRAME PsPollFrame;
2666 HEADER_802_11 NullFrame;
2668 #ifdef RT2870
2669 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2670 TX_CONTEXT NullContext;
2671 TX_CONTEXT PsPollContext;
2672 TX_CONTEXT RTSContext;
2673 #endif // RT2870 //
2677 //=========AP===========
2680 //=======STA===========
2681 #ifdef CONFIG_STA_SUPPORT
2682 /* Modified by Wu Xi-Kun 4/21/2006 */
2683 // -----------------------------------------------
2684 // STA specific configuration & operation status
2685 // used only when pAd->OpMode == OPMODE_STA
2686 // -----------------------------------------------
2687 STA_ADMIN_CONFIG StaCfg; // user desired settings
2688 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2689 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2690 NDIS_MEDIA_STATE PreMediaState;
2691 #endif // CONFIG_STA_SUPPORT //
2693 //=======Common===========
2694 // OP mode: either AP or STA
2695 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2697 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2700 // configuration: read from Registry & E2PROM
2701 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2702 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2703 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2705 // ------------------------------------------------------
2706 // common configuration to both OPMODE_STA and OPMODE_AP
2707 // ------------------------------------------------------
2708 COMMON_CONFIG CommonCfg;
2709 MLME_STRUCT Mlme;
2711 // AP needs those vaiables for site survey feature.
2712 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2713 BSS_TABLE ScanTab; // store the latest SCAN result
2715 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2716 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2717 NDIS_SPIN_LOCK MacTabLock;
2719 #ifdef DOT11_N_SUPPORT
2720 BA_TABLE BATable;
2721 #endif // DOT11_N_SUPPORT //
2722 NDIS_SPIN_LOCK BATabLock;
2723 RALINK_TIMER_STRUCT RECBATimer;
2725 // encryption/decryption KEY tables
2726 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2728 // RX re-assembly buffer for fragmentation
2729 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2731 // various Counters
2732 COUNTER_802_3 Counters8023; // 802.3 counters
2733 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2734 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2735 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2736 PRIVATE_STRUC PrivateInfo; // Private information & counters
2738 // flags, see fRTMP_ADAPTER_xxx flags
2739 ULONG Flags; // Represent current device status
2741 // current TX sequence #
2742 USHORT Sequence;
2744 // Control disconnect / connect event generation
2745 //+++Didn't used anymore
2746 ULONG LinkDownTime;
2747 //---
2748 ULONG LastRxRate;
2749 ULONG LastTxRate;
2750 //+++Used only for Station
2751 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2752 //---
2754 ULONG ExtraInfo; // Extra information for displaying status
2755 ULONG SystemErrorBitmap; // b0: E2PROM version error
2757 //+++Didn't used anymore
2758 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2759 //---
2761 // ---------------------------
2762 // System event log
2763 // ---------------------------
2764 RT_802_11_EVENT_TABLE EventTab;
2767 BOOLEAN HTCEnable;
2769 /*****************************************************************************************/
2770 /* Statistic related parameters */
2771 /*****************************************************************************************/
2772 #ifdef RT2870
2773 ULONG BulkOutDataOneSecCount;
2774 ULONG BulkInDataOneSecCount;
2775 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2776 ULONG watchDogRxCnt;
2777 ULONG watchDogRxOverFlowCnt;
2778 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2779 #endif // RT2870 //
2781 BOOLEAN bUpdateBcnCntDone;
2782 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2783 // ----------------------------
2784 // DEBUG paramerts
2785 // ----------------------------
2786 //ULONG DebugSetting[4];
2787 BOOLEAN bBanAllBaSetup;
2788 BOOLEAN bPromiscuous;
2790 // ----------------------------
2791 // rt2860c emulation-use Parameters
2792 // ----------------------------
2793 ULONG rtsaccu[30];
2794 ULONG ctsaccu[30];
2795 ULONG cfendaccu[30];
2796 ULONG bacontent[16];
2797 ULONG rxint[RX_RING_SIZE+1];
2798 UCHAR rcvba[60];
2799 BOOLEAN bLinkAdapt;
2800 BOOLEAN bForcePrintTX;
2801 BOOLEAN bForcePrintRX;
2802 BOOLEAN bDisablescanning; //defined in RT2870 USB
2803 BOOLEAN bStaFifoTest;
2804 BOOLEAN bProtectionTest;
2805 BOOLEAN bHCCATest;
2806 BOOLEAN bGenOneHCCA;
2807 BOOLEAN bBroadComHT;
2808 //+++Following add from RT2870 USB.
2809 ULONG BulkOutReq;
2810 ULONG BulkOutComplete;
2811 ULONG BulkOutCompleteOther;
2812 ULONG BulkOutCompleteCancel; // seems not use now?
2813 ULONG BulkInReq;
2814 ULONG BulkInComplete;
2815 ULONG BulkInCompleteFail;
2816 //---
2818 struct wificonf WIFItestbed;
2820 #ifdef DOT11_N_SUPPORT
2821 struct reordering_mpdu_pool mpdu_blk_pool;
2822 #endif // DOT11_N_SUPPORT //
2824 ULONG OneSecondnonBEpackets; // record non BE packets per second
2826 #if WIRELESS_EXT >= 12
2827 struct iw_statistics iw_stats;
2828 #endif
2830 struct net_device_stats stats;
2832 ULONG TbttTickCount;
2833 #ifdef PCI_MSI_SUPPORT
2834 BOOLEAN HaveMsi;
2835 #endif // PCI_MSI_SUPPORT //
2838 UCHAR is_on;
2840 #define TIME_BASE (1000000/OS_HZ)
2841 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2842 UCHAR flg_be_adjust;
2843 ULONG be_adjust_last_time;
2846 #ifdef IKANOS_VX_1X0
2847 struct IKANOS_TX_INFO IkanosTxInfo;
2848 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2849 #endif // IKANOS_VX_1X0 //
2852 #ifdef DBG_DIAGNOSE
2853 RtmpDiagStruct DiagStruct;
2854 #endif // DBG_DIAGNOSE //
2857 UINT8 PM_FlgSuspend;
2858 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2861 // Cisco IAPP format
2863 typedef struct _CISCO_IAPP_CONTENT_
2865 USHORT Length; //IAPP Length
2866 UCHAR MessageType; //IAPP type
2867 UCHAR FunctionCode; //IAPP function type
2868 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2869 UCHAR SourceMAC[MAC_ADDR_LEN];
2870 USHORT Tag; //Tag(element IE) - Adjacent AP report
2871 USHORT TagLength; //Length of element not including 4 byte header
2872 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2873 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2874 USHORT Channel;
2875 USHORT SsidLen;
2876 UCHAR Ssid[MAX_LEN_OF_SSID];
2877 USHORT Seconds; //Seconds that the client has been disassociated.
2878 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2880 #define DELAYINTMASK 0x0003fffb
2881 #define INTMASK 0x0003fffb
2882 #define IndMask 0x0003fffc
2883 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2884 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2885 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2886 #define TxCoherent 0x00020000 // tx coherent
2887 #define RxCoherent 0x00010000 // rx coherent
2888 #define McuCommand 0x00000200 // mcu
2889 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2890 #define TBTTInt 0x00000800 // TBTT interrupt
2891 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2892 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2893 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2896 typedef struct _RX_BLK_
2898 // RXD_STRUC RxD; // sample
2899 RT28XX_RXD_STRUC RxD;
2900 PRXWI_STRUC pRxWI;
2901 PHEADER_802_11 pHeader;
2902 PNDIS_PACKET pRxPacket;
2903 UCHAR *pData;
2904 USHORT DataSize;
2905 USHORT Flags;
2906 UCHAR UserPriority; // for calculate TKIP MIC using
2907 } RX_BLK;
2910 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2911 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2912 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2915 #define fRX_WDS 0x0001
2916 #define fRX_AMSDU 0x0002
2917 #define fRX_ARALINK 0x0004
2918 #define fRX_HTC 0x0008
2919 #define fRX_PAD 0x0010
2920 #define fRX_AMPDU 0x0020
2921 #define fRX_QOS 0x0040
2922 #define fRX_INFRA 0x0080
2923 #define fRX_EAP 0x0100
2924 #define fRX_MESH 0x0200
2925 #define fRX_APCLI 0x0400
2926 #define fRX_DLS 0x0800
2927 #define fRX_WPI 0x1000
2929 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2930 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2931 #define LENGTH_ARALINK_HEADER_FIELD 2
2933 #define TX_UNKOWN_FRAME 0x00
2934 #define TX_MCAST_FRAME 0x01
2935 #define TX_LEGACY_FRAME 0x02
2936 #define TX_AMPDU_FRAME 0x04
2937 #define TX_AMSDU_FRAME 0x08
2938 #define TX_RALINK_FRAME 0x10
2939 #define TX_FRAG_FRAME 0x20
2942 // Currently the sizeof(TX_BLK) is 148 bytes.
2943 typedef struct _TX_BLK_
2945 UCHAR QueIdx;
2946 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2947 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2948 USHORT TotalFragNum; // Total frame fragments required in one batch
2949 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2951 QUEUE_HEADER TxPacketList;
2952 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2953 HTTRANSMIT_SETTING *pTransmit;
2955 // Following structure used for the characteristics of a specific packet.
2956 PNDIS_PACKET pPacket;
2957 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2958 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2959 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2960 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2961 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2962 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2963 UCHAR HdrPadLen; // recording Header Padding Length;
2964 UCHAR apidx; // The interface associated to this packet
2965 UCHAR Wcid; // The MAC entry associated to this packet
2966 UCHAR UserPriority; // priority class of packet
2967 UCHAR FrameGap; // what kind of IFS this packet use
2968 UCHAR MpduReqNum; // number of fragments of this frame
2969 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2970 UCHAR CipherAlg; // cipher alogrithm
2971 PCIPHER_KEY pKey;
2975 USHORT Flags; //See following definitions for detail.
2977 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2978 ULONG Priv; // Hardware specific value saved in here.
2979 } TX_BLK, *PTX_BLK;
2982 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2983 #define fTX_bAckRequired 0x0002 // the packet need ack response
2984 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2985 #define fTX_bHTRate 0x0008 // allow to use HT rate
2986 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
2987 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2988 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2989 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2990 #define fTX_bWMM 0x0080 // QOS Data
2992 #define fTX_bClearEAPFrame 0x0100
2995 #ifdef CONFIG_STA_SUPPORT
2996 #endif // CONFIG_STA_SUPPORT //
3000 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3001 do { \
3002 if (value) \
3003 (_pTxBlk->Flags |= _flag) \
3004 else \
3005 (_pTxBlk->Flags &= ~(_flag)) \
3006 }while(0)
3008 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3009 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3010 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3016 //------------------------------------------------------------------------------------------
3020 #ifdef RT_BIG_ENDIAN
3021 static inline VOID WriteBackToDescriptor(
3022 IN PUCHAR Dest,
3023 IN PUCHAR Src,
3024 IN BOOLEAN DoEncrypt,
3025 IN ULONG DescriptorType)
3027 UINT32 *p1, *p2;
3029 p1 = ((UINT32 *)Dest);
3030 p2 = ((UINT32 *)Src);
3032 *p1 = *p2;
3033 *(p1+2) = *(p2+2);
3034 *(p1+3) = *(p2+3);
3035 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3039 ========================================================================
3041 Routine Description:
3042 Endian conversion of Tx/Rx descriptor .
3044 Arguments:
3045 pAd Pointer to our adapter
3046 pData Pointer to Tx/Rx descriptor
3047 DescriptorType Direction of the frame
3049 Return Value:
3050 None
3052 Note:
3053 Call this function when read or update descriptor
3054 ========================================================================
3056 static inline VOID RTMPWIEndianChange(
3057 IN PUCHAR pData,
3058 IN ULONG DescriptorType)
3060 int size;
3061 int i;
3063 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3065 if(DescriptorType == TYPE_TXWI)
3067 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3068 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3070 else
3072 for(i=0; i < size/4 ; i++)
3073 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3078 ========================================================================
3080 Routine Description:
3081 Endian conversion of Tx/Rx descriptor .
3083 Arguments:
3084 pAd Pointer to our adapter
3085 pData Pointer to Tx/Rx descriptor
3086 DescriptorType Direction of the frame
3088 Return Value:
3089 None
3091 Note:
3092 Call this function when read or update descriptor
3093 ========================================================================
3096 #ifdef RT2870
3097 static inline VOID RTMPDescriptorEndianChange(
3098 IN PUCHAR pData,
3099 IN ULONG DescriptorType)
3101 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3103 #endif // RT2870 //
3105 ========================================================================
3107 Routine Description:
3108 Endian conversion of all kinds of 802.11 frames .
3110 Arguments:
3111 pAd Pointer to our adapter
3112 pData Pointer to the 802.11 frame structure
3113 Dir Direction of the frame
3114 FromRxDoneInt Caller is from RxDone interrupt
3116 Return Value:
3117 None
3119 Note:
3120 Call this function when read or update buffer data
3121 ========================================================================
3123 static inline VOID RTMPFrameEndianChange(
3124 IN PRTMP_ADAPTER pAd,
3125 IN PUCHAR pData,
3126 IN ULONG Dir,
3127 IN BOOLEAN FromRxDoneInt)
3129 PHEADER_802_11 pFrame;
3130 PUCHAR pMacHdr;
3132 // swab 16 bit fields - Frame Control field
3133 if(Dir == DIR_READ)
3135 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3138 pFrame = (PHEADER_802_11) pData;
3139 pMacHdr = (PUCHAR) pFrame;
3141 // swab 16 bit fields - Duration/ID field
3142 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3144 // swab 16 bit fields - Sequence Control field
3145 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3147 if(pFrame->FC.Type == BTYPE_MGMT)
3149 switch(pFrame->FC.SubType)
3151 case SUBTYPE_ASSOC_REQ:
3152 case SUBTYPE_REASSOC_REQ:
3153 // swab 16 bit fields - CapabilityInfo field
3154 pMacHdr += sizeof(HEADER_802_11);
3155 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3157 // swab 16 bit fields - Listen Interval field
3158 pMacHdr += 2;
3159 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3160 break;
3162 case SUBTYPE_ASSOC_RSP:
3163 case SUBTYPE_REASSOC_RSP:
3164 // swab 16 bit fields - CapabilityInfo field
3165 pMacHdr += sizeof(HEADER_802_11);
3166 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3168 // swab 16 bit fields - Status Code field
3169 pMacHdr += 2;
3170 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3172 // swab 16 bit fields - AID field
3173 pMacHdr += 2;
3174 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3175 break;
3177 case SUBTYPE_AUTH:
3178 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3179 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3180 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3181 break;
3182 else
3184 // swab 16 bit fields - Auth Alg No. field
3185 pMacHdr += sizeof(HEADER_802_11);
3186 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3188 // swab 16 bit fields - Auth Seq No. field
3189 pMacHdr += 2;
3190 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3192 // swab 16 bit fields - Status Code field
3193 pMacHdr += 2;
3194 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3196 break;
3198 case SUBTYPE_BEACON:
3199 case SUBTYPE_PROBE_RSP:
3200 // swab 16 bit fields - BeaconInterval field
3201 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3202 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3204 // swab 16 bit fields - CapabilityInfo field
3205 pMacHdr += sizeof(USHORT);
3206 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3207 break;
3209 case SUBTYPE_DEAUTH:
3210 case SUBTYPE_DISASSOC:
3211 // swab 16 bit fields - Reason code field
3212 pMacHdr += sizeof(HEADER_802_11);
3213 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3214 break;
3217 else if( pFrame->FC.Type == BTYPE_DATA )
3220 else if(pFrame->FC.Type == BTYPE_CNTL)
3222 switch(pFrame->FC.SubType)
3224 case SUBTYPE_BLOCK_ACK_REQ:
3226 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3227 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3228 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3230 break;
3231 case SUBTYPE_BLOCK_ACK:
3232 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3233 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3234 break;
3236 case SUBTYPE_ACK:
3237 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3238 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3239 break;
3242 else
3244 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3247 // swab 16 bit fields - Frame Control
3248 if(Dir == DIR_WRITE)
3250 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3253 #endif // RT_BIG_ENDIAN //
3256 static inline VOID ConvertMulticastIP2MAC(
3257 IN PUCHAR pIpAddr,
3258 IN PUCHAR *ppMacAddr,
3259 IN UINT16 ProtoType)
3261 if (pIpAddr == NULL)
3262 return;
3264 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3265 return;
3267 switch (ProtoType)
3269 case ETH_P_IPV6:
3270 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3271 *(*ppMacAddr) = 0x33;
3272 *(*ppMacAddr + 1) = 0x33;
3273 *(*ppMacAddr + 2) = pIpAddr[12];
3274 *(*ppMacAddr + 3) = pIpAddr[13];
3275 *(*ppMacAddr + 4) = pIpAddr[14];
3276 *(*ppMacAddr + 5) = pIpAddr[15];
3277 break;
3279 case ETH_P_IP:
3280 default:
3281 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3282 *(*ppMacAddr) = 0x01;
3283 *(*ppMacAddr + 1) = 0x00;
3284 *(*ppMacAddr + 2) = 0x5e;
3285 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3286 *(*ppMacAddr + 4) = pIpAddr[2];
3287 *(*ppMacAddr + 5) = pIpAddr[3];
3288 break;
3291 return;
3294 BOOLEAN RTMPCheckForHang(
3295 IN NDIS_HANDLE MiniportAdapterContext
3298 VOID RTMPHalt(
3299 IN NDIS_HANDLE MiniportAdapterContext
3303 // Private routines in rtmp_init.c
3305 NDIS_STATUS RTMPAllocAdapterBlock(
3306 IN PVOID handle,
3307 OUT PRTMP_ADAPTER *ppAdapter
3310 NDIS_STATUS RTMPAllocTxRxRingMemory(
3311 IN PRTMP_ADAPTER pAd
3314 NDIS_STATUS RTMPFindAdapter(
3315 IN PRTMP_ADAPTER pAd,
3316 IN NDIS_HANDLE WrapperConfigurationContext
3319 NDIS_STATUS RTMPReadParametersHook(
3320 IN PRTMP_ADAPTER pAd
3323 VOID RTMPFreeAdapter(
3324 IN PRTMP_ADAPTER pAd
3327 NDIS_STATUS NICReadRegParameters(
3328 IN PRTMP_ADAPTER pAd,
3329 IN NDIS_HANDLE WrapperConfigurationContext
3332 #ifdef RT2870
3333 VOID NICInitRT30xxRFRegisters(
3334 IN PRTMP_ADAPTER pAd);
3335 #endif // RT2870 //
3337 VOID NICReadEEPROMParameters(
3338 IN PRTMP_ADAPTER pAd,
3339 IN PUCHAR mac_addr);
3341 VOID NICInitAsicFromEEPROM(
3342 IN PRTMP_ADAPTER pAd);
3344 VOID NICInitTxRxRingAndBacklogQueue(
3345 IN PRTMP_ADAPTER pAd);
3347 NDIS_STATUS NICInitializeAdapter(
3348 IN PRTMP_ADAPTER pAd,
3349 IN BOOLEAN bHardReset);
3351 NDIS_STATUS NICInitializeAsic(
3352 IN PRTMP_ADAPTER pAd,
3353 IN BOOLEAN bHardReset);
3355 VOID NICIssueReset(
3356 IN PRTMP_ADAPTER pAd);
3358 VOID RTMPRingCleanUp(
3359 IN PRTMP_ADAPTER pAd,
3360 IN UCHAR RingType);
3362 VOID RxTest(
3363 IN PRTMP_ADAPTER pAd);
3365 NDIS_STATUS DbgSendPacket(
3366 IN PRTMP_ADAPTER pAd,
3367 IN PNDIS_PACKET pPacket);
3369 VOID UserCfgInit(
3370 IN PRTMP_ADAPTER pAd);
3372 VOID NICResetFromError(
3373 IN PRTMP_ADAPTER pAd);
3375 VOID NICEraseFirmware(
3376 IN PRTMP_ADAPTER pAd);
3378 NDIS_STATUS NICLoadFirmware(
3379 IN PRTMP_ADAPTER pAd);
3381 NDIS_STATUS NICLoadRateSwitchingParams(
3382 IN PRTMP_ADAPTER pAd);
3384 BOOLEAN NICCheckForHang(
3385 IN PRTMP_ADAPTER pAd);
3387 VOID NICUpdateFifoStaCounters(
3388 IN PRTMP_ADAPTER pAd);
3390 VOID NICUpdateRawCounters(
3391 IN PRTMP_ADAPTER pAd);
3393 #if 0
3394 ULONG RTMPEqualMemory(
3395 IN PVOID pSrc1,
3396 IN PVOID pSrc2,
3397 IN ULONG Length);
3398 #endif
3400 ULONG RTMPNotAllZero(
3401 IN PVOID pSrc1,
3402 IN ULONG Length);
3404 VOID RTMPZeroMemory(
3405 IN PVOID pSrc,
3406 IN ULONG Length);
3408 ULONG RTMPCompareMemory(
3409 IN PVOID pSrc1,
3410 IN PVOID pSrc2,
3411 IN ULONG Length);
3413 VOID RTMPMoveMemory(
3414 OUT PVOID pDest,
3415 IN PVOID pSrc,
3416 IN ULONG Length);
3418 VOID AtoH(
3419 char *src,
3420 UCHAR *dest,
3421 int destlen);
3423 UCHAR BtoH(
3424 char ch);
3426 VOID RTMPPatchMacBbpBug(
3427 IN PRTMP_ADAPTER pAd);
3429 VOID RTMPPatchCardBus(
3430 IN PRTMP_ADAPTER pAdapter);
3432 VOID RTMPPatchRalinkCardBus(
3433 IN PRTMP_ADAPTER pAdapter,
3434 IN ULONG Bus);
3436 ULONG RTMPReadCBConfig(
3437 IN ULONG Bus,
3438 IN ULONG Slot,
3439 IN ULONG Func,
3440 IN ULONG Offset);
3442 VOID RTMPWriteCBConfig(
3443 IN ULONG Bus,
3444 IN ULONG Slot,
3445 IN ULONG Func,
3446 IN ULONG Offset,
3447 IN ULONG Value);
3449 VOID RTMPInitTimer(
3450 IN PRTMP_ADAPTER pAd,
3451 IN PRALINK_TIMER_STRUCT pTimer,
3452 IN PVOID pTimerFunc,
3453 IN PVOID pData,
3454 IN BOOLEAN Repeat);
3456 VOID RTMPSetTimer(
3457 IN PRALINK_TIMER_STRUCT pTimer,
3458 IN ULONG Value);
3461 VOID RTMPModTimer(
3462 IN PRALINK_TIMER_STRUCT pTimer,
3463 IN ULONG Value);
3465 VOID RTMPCancelTimer(
3466 IN PRALINK_TIMER_STRUCT pTimer,
3467 OUT BOOLEAN *pCancelled);
3469 VOID RTMPSetLED(
3470 IN PRTMP_ADAPTER pAd,
3471 IN UCHAR Status);
3473 VOID RTMPSetSignalLED(
3474 IN PRTMP_ADAPTER pAd,
3475 IN NDIS_802_11_RSSI Dbm);
3477 VOID RTMPEnableRxTx(
3478 IN PRTMP_ADAPTER pAd);
3481 // prototype in action.c
3483 VOID ActionStateMachineInit(
3484 IN PRTMP_ADAPTER pAd,
3485 IN STATE_MACHINE *S,
3486 OUT STATE_MACHINE_FUNC Trans[]);
3488 VOID MlmeADDBAAction(
3489 IN PRTMP_ADAPTER pAd,
3490 IN MLME_QUEUE_ELEM *Elem);
3492 VOID MlmeDELBAAction(
3493 IN PRTMP_ADAPTER pAd,
3494 IN MLME_QUEUE_ELEM *Elem);
3496 VOID MlmeDLSAction(
3497 IN PRTMP_ADAPTER pAd,
3498 IN MLME_QUEUE_ELEM *Elem);
3500 VOID MlmeInvalidAction(
3501 IN PRTMP_ADAPTER pAd,
3502 IN MLME_QUEUE_ELEM *Elem);
3504 VOID MlmeQOSAction(
3505 IN PRTMP_ADAPTER pAd,
3506 IN MLME_QUEUE_ELEM *Elem);
3508 #ifdef DOT11_N_SUPPORT
3509 VOID PeerAddBAReqAction(
3510 IN PRTMP_ADAPTER pAd,
3511 IN MLME_QUEUE_ELEM *Elem);
3513 VOID PeerAddBARspAction(
3514 IN PRTMP_ADAPTER pAd,
3515 IN MLME_QUEUE_ELEM *Elem);
3517 VOID PeerDelBAAction(
3518 IN PRTMP_ADAPTER pAd,
3519 IN MLME_QUEUE_ELEM *Elem);
3521 VOID PeerBAAction(
3522 IN PRTMP_ADAPTER pAd,
3523 IN MLME_QUEUE_ELEM *Elem);
3524 #endif // DOT11_N_SUPPORT //
3526 VOID SendPSMPAction(
3527 IN PRTMP_ADAPTER pAd,
3528 IN UCHAR Wcid,
3529 IN UCHAR Psmp);
3531 VOID PeerRMAction(
3532 IN PRTMP_ADAPTER pAd,
3533 IN MLME_QUEUE_ELEM *Elem);
3535 VOID PeerPublicAction(
3536 IN PRTMP_ADAPTER pAd,
3537 IN MLME_QUEUE_ELEM *Elem);
3539 #ifdef CONFIG_STA_SUPPORT
3540 VOID StaPublicAction(
3541 IN PRTMP_ADAPTER pAd,
3542 IN UCHAR Bss2040Coexist);
3543 #endif // CONFIG_STA_SUPPORT //
3546 VOID PeerBSSTranAction(
3547 IN PRTMP_ADAPTER pAd,
3548 IN MLME_QUEUE_ELEM *Elem);
3550 #ifdef DOT11_N_SUPPORT
3551 VOID PeerHTAction(
3552 IN PRTMP_ADAPTER pAd,
3553 IN MLME_QUEUE_ELEM *Elem);
3554 #endif // DOT11_N_SUPPORT //
3556 VOID PeerQOSAction(
3557 IN PRTMP_ADAPTER pAd,
3558 IN MLME_QUEUE_ELEM *Elem);
3560 #ifdef DOT11_N_SUPPORT
3561 VOID RECBATimerTimeout(
3562 IN PVOID SystemSpecific1,
3563 IN PVOID FunctionContext,
3564 IN PVOID SystemSpecific2,
3565 IN PVOID SystemSpecific3);
3567 VOID ORIBATimerTimeout(
3568 IN PRTMP_ADAPTER pAd);
3570 VOID SendRefreshBAR(
3571 IN PRTMP_ADAPTER pAd,
3572 IN MAC_TABLE_ENTRY *pEntry);
3573 #endif // DOT11_N_SUPPORT //
3575 VOID ActHeaderInit(
3576 IN PRTMP_ADAPTER pAd,
3577 IN OUT PHEADER_802_11 pHdr80211,
3578 IN PUCHAR Addr1,
3579 IN PUCHAR Addr2,
3580 IN PUCHAR Addr3);
3582 VOID BarHeaderInit(
3583 IN PRTMP_ADAPTER pAd,
3584 IN OUT PFRAME_BAR pCntlBar,
3585 IN PUCHAR pDA,
3586 IN PUCHAR pSA);
3588 VOID InsertActField(
3589 IN PRTMP_ADAPTER pAd,
3590 OUT PUCHAR pFrameBuf,
3591 OUT PULONG pFrameLen,
3592 IN UINT8 Category,
3593 IN UINT8 ActCode);
3595 BOOLEAN QosBADataParse(
3596 IN PRTMP_ADAPTER pAd,
3597 IN BOOLEAN bAMSDU,
3598 IN PUCHAR p8023Header,
3599 IN UCHAR WCID,
3600 IN UCHAR TID,
3601 IN USHORT Sequence,
3602 IN UCHAR DataOffset,
3603 IN USHORT Datasize,
3604 IN UINT CurRxIndex);
3606 #ifdef DOT11_N_SUPPORT
3607 BOOLEAN CntlEnqueueForRecv(
3608 IN PRTMP_ADAPTER pAd,
3609 IN ULONG Wcid,
3610 IN ULONG MsgLen,
3611 IN PFRAME_BA_REQ pMsg);
3613 VOID BaAutoManSwitch(
3614 IN PRTMP_ADAPTER pAd);
3615 #endif // DOT11_N_SUPPORT //
3617 VOID HTIOTCheck(
3618 IN PRTMP_ADAPTER pAd,
3619 IN UCHAR BatRecIdx);
3622 // Private routines in rtmp_data.c
3624 BOOLEAN RTMPHandleRxDoneInterrupt(
3625 IN PRTMP_ADAPTER pAd);
3627 VOID RTMPHandleTxDoneInterrupt(
3628 IN PRTMP_ADAPTER pAd);
3630 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3631 IN PRTMP_ADAPTER pAd,
3632 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3634 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3635 IN PRTMP_ADAPTER pAd);
3637 VOID RTMPHandleTBTTInterrupt(
3638 IN PRTMP_ADAPTER pAd);
3640 VOID RTMPHandlePreTBTTInterrupt(
3641 IN PRTMP_ADAPTER pAd);
3643 void RTMPHandleTwakeupInterrupt(
3644 IN PRTMP_ADAPTER pAd);
3646 VOID RTMPHandleRxCoherentInterrupt(
3647 IN PRTMP_ADAPTER pAd);
3649 BOOLEAN TxFrameIsAggregatible(
3650 IN PRTMP_ADAPTER pAd,
3651 IN PUCHAR pPrevAddr1,
3652 IN PUCHAR p8023hdr);
3654 BOOLEAN PeerIsAggreOn(
3655 IN PRTMP_ADAPTER pAd,
3656 IN ULONG TxRate,
3657 IN PMAC_TABLE_ENTRY pMacEntry);
3659 #if 0 // It's not be used
3660 HTTRANSMIT_SETTING *GetTxMode(
3661 IN PRTMP_ADAPTER pAd,
3662 IN TX_BLK *pTxBlk);
3663 #endif
3665 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3666 IN PNDIS_BUFFER pFirstBuffer,
3667 IN UCHAR DesiredOffset,
3668 OUT PUCHAR pByte0,
3669 OUT PUCHAR pByte1);
3671 NDIS_STATUS STASendPacket(
3672 IN PRTMP_ADAPTER pAd,
3673 IN PNDIS_PACKET pPacket);
3675 VOID STASendPackets(
3676 IN NDIS_HANDLE MiniportAdapterContext,
3677 IN PPNDIS_PACKET ppPacketArray,
3678 IN UINT NumberOfPackets);
3680 VOID RTMPDeQueuePacket(
3681 IN PRTMP_ADAPTER pAd,
3682 IN BOOLEAN bIntContext,
3683 IN UCHAR QueIdx,
3684 IN UCHAR Max_Tx_Packets);
3686 NDIS_STATUS RTMPHardTransmit(
3687 IN PRTMP_ADAPTER pAd,
3688 IN PNDIS_PACKET pPacket,
3689 IN UCHAR QueIdx,
3690 OUT PULONG pFreeTXDLeft);
3692 NDIS_STATUS STAHardTransmit(
3693 IN PRTMP_ADAPTER pAd,
3694 IN TX_BLK *pTxBlk,
3695 IN UCHAR QueIdx);
3697 VOID STARxEAPOLFrameIndicate(
3698 IN PRTMP_ADAPTER pAd,
3699 IN MAC_TABLE_ENTRY *pEntry,
3700 IN RX_BLK *pRxBlk,
3701 IN UCHAR FromWhichBSSID);
3703 NDIS_STATUS RTMPFreeTXDRequest(
3704 IN PRTMP_ADAPTER pAd,
3705 IN UCHAR RingType,
3706 IN UCHAR NumberRequired,
3707 IN PUCHAR FreeNumberIs);
3709 NDIS_STATUS MlmeHardTransmit(
3710 IN PRTMP_ADAPTER pAd,
3711 IN UCHAR QueIdx,
3712 IN PNDIS_PACKET pPacket);
3714 NDIS_STATUS MlmeHardTransmitMgmtRing(
3715 IN PRTMP_ADAPTER pAd,
3716 IN UCHAR QueIdx,
3717 IN PNDIS_PACKET pPacket);
3719 NDIS_STATUS MlmeHardTransmitTxRing(
3720 IN PRTMP_ADAPTER pAd,
3721 IN UCHAR QueIdx,
3722 IN PNDIS_PACKET pPacket);
3724 USHORT RTMPCalcDuration(
3725 IN PRTMP_ADAPTER pAd,
3726 IN UCHAR Rate,
3727 IN ULONG Size);
3729 VOID RTMPWriteTxWI(
3730 IN PRTMP_ADAPTER pAd,
3731 IN PTXWI_STRUC pTxWI,
3732 IN BOOLEAN FRAG,
3733 IN BOOLEAN CFACK,
3734 IN BOOLEAN InsTimestamp,
3735 IN BOOLEAN AMPDU,
3736 IN BOOLEAN Ack,
3737 IN BOOLEAN NSeq, // HW new a sequence.
3738 IN UCHAR BASize,
3739 IN UCHAR WCID,
3740 IN ULONG Length,
3741 IN UCHAR PID,
3742 IN UCHAR TID,
3743 IN UCHAR TxRate,
3744 IN UCHAR Txopmode,
3745 IN BOOLEAN CfAck,
3746 IN HTTRANSMIT_SETTING *pTransmit);
3749 VOID RTMPWriteTxWI_Data(
3750 IN PRTMP_ADAPTER pAd,
3751 IN OUT PTXWI_STRUC pTxWI,
3752 IN TX_BLK *pTxBlk);
3755 VOID RTMPWriteTxWI_Cache(
3756 IN PRTMP_ADAPTER pAd,
3757 IN OUT PTXWI_STRUC pTxWI,
3758 IN TX_BLK *pTxBlk);
3760 VOID RTMPWriteTxDescriptor(
3761 IN PRTMP_ADAPTER pAd,
3762 IN PTXD_STRUC pTxD,
3763 IN BOOLEAN bWIV,
3764 IN UCHAR QSEL);
3766 VOID RTMPSuspendMsduTransmission(
3767 IN PRTMP_ADAPTER pAd);
3769 VOID RTMPResumeMsduTransmission(
3770 IN PRTMP_ADAPTER pAd);
3772 NDIS_STATUS MiniportMMRequest(
3773 IN PRTMP_ADAPTER pAd,
3774 IN UCHAR QueIdx,
3775 IN PUCHAR pData,
3776 IN UINT Length);
3778 NDIS_STATUS MiniportDataMMRequest(
3779 IN PRTMP_ADAPTER pAd,
3780 IN UCHAR QueIdx,
3781 IN PUCHAR pData,
3782 IN UINT Length);
3784 VOID RTMPSendNullFrame(
3785 IN PRTMP_ADAPTER pAd,
3786 IN UCHAR TxRate,
3787 IN BOOLEAN bQosNull);
3789 VOID RTMPSendDisassociationFrame(
3790 IN PRTMP_ADAPTER pAd);
3792 VOID RTMPSendRTSFrame(
3793 IN PRTMP_ADAPTER pAd,
3794 IN PUCHAR pDA,
3795 IN unsigned int NextMpduSize,
3796 IN UCHAR TxRate,
3797 IN UCHAR RTSRate,
3798 IN USHORT AckDuration,
3799 IN UCHAR QueIdx,
3800 IN UCHAR FrameGap);
3803 NDIS_STATUS RTMPApplyPacketFilter(
3804 IN PRTMP_ADAPTER pAd,
3805 IN PRT28XX_RXD_STRUC pRxD,
3806 IN PHEADER_802_11 pHeader);
3808 PQUEUE_HEADER RTMPCheckTxSwQueue(
3809 IN PRTMP_ADAPTER pAd,
3810 OUT UCHAR *QueIdx);
3812 #ifdef CONFIG_STA_SUPPORT
3813 VOID RTMPReportMicError(
3814 IN PRTMP_ADAPTER pAd,
3815 IN PCIPHER_KEY pWpaKey);
3817 VOID WpaMicFailureReportFrame(
3818 IN PRTMP_ADAPTER pAd,
3819 IN MLME_QUEUE_ELEM *Elem);
3821 VOID WpaDisassocApAndBlockAssoc(
3822 IN PVOID SystemSpecific1,
3823 IN PVOID FunctionContext,
3824 IN PVOID SystemSpecific2,
3825 IN PVOID SystemSpecific3);
3826 #endif // CONFIG_STA_SUPPORT //
3828 NDIS_STATUS RTMPCloneNdisPacket(
3829 IN PRTMP_ADAPTER pAd,
3830 IN BOOLEAN pInsAMSDUHdr,
3831 IN PNDIS_PACKET pInPacket,
3832 OUT PNDIS_PACKET *ppOutPacket);
3834 NDIS_STATUS RTMPAllocateNdisPacket(
3835 IN PRTMP_ADAPTER pAd,
3836 IN PNDIS_PACKET *pPacket,
3837 IN PUCHAR pHeader,
3838 IN UINT HeaderLen,
3839 IN PUCHAR pData,
3840 IN UINT DataLen);
3842 VOID RTMPFreeNdisPacket(
3843 IN PRTMP_ADAPTER pAd,
3844 IN PNDIS_PACKET pPacket);
3846 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3847 IN PRTMP_ADAPTER pAd,
3848 IN UCHAR QueIdx);
3850 BOOLEAN RTMPCheckDHCPFrame(
3851 IN PRTMP_ADAPTER pAd,
3852 IN PNDIS_PACKET pPacket);
3855 BOOLEAN RTMPCheckEtherType(
3856 IN PRTMP_ADAPTER pAd,
3857 IN PNDIS_PACKET pPacket);
3860 VOID RTMPCckBbpTuning(
3861 IN PRTMP_ADAPTER pAd,
3862 IN UINT TxRate);
3865 // Private routines in rtmp_wep.c
3867 VOID RTMPInitWepEngine(
3868 IN PRTMP_ADAPTER pAd,
3869 IN PUCHAR pKey,
3870 IN UCHAR KeyId,
3871 IN UCHAR KeyLen,
3872 IN PUCHAR pDest);
3874 VOID RTMPEncryptData(
3875 IN PRTMP_ADAPTER pAd,
3876 IN PUCHAR pSrc,
3877 IN PUCHAR pDest,
3878 IN UINT Len);
3880 BOOLEAN RTMPDecryptData(
3881 IN PRTMP_ADAPTER pAdapter,
3882 IN PUCHAR pSrc,
3883 IN UINT Len,
3884 IN UINT idx);
3886 BOOLEAN RTMPSoftDecryptWEP(
3887 IN PRTMP_ADAPTER pAd,
3888 IN PUCHAR pData,
3889 IN ULONG DataByteCnt,
3890 IN PCIPHER_KEY pGroupKey);
3892 VOID RTMPSetICV(
3893 IN PRTMP_ADAPTER pAd,
3894 IN PUCHAR pDest);
3896 VOID ARCFOUR_INIT(
3897 IN PARCFOURCONTEXT Ctx,
3898 IN PUCHAR pKey,
3899 IN UINT KeyLen);
3901 UCHAR ARCFOUR_BYTE(
3902 IN PARCFOURCONTEXT Ctx);
3904 VOID ARCFOUR_DECRYPT(
3905 IN PARCFOURCONTEXT Ctx,
3906 IN PUCHAR pDest,
3907 IN PUCHAR pSrc,
3908 IN UINT Len);
3910 VOID ARCFOUR_ENCRYPT(
3911 IN PARCFOURCONTEXT Ctx,
3912 IN PUCHAR pDest,
3913 IN PUCHAR pSrc,
3914 IN UINT Len);
3916 VOID WPAARCFOUR_ENCRYPT(
3917 IN PARCFOURCONTEXT Ctx,
3918 IN PUCHAR pDest,
3919 IN PUCHAR pSrc,
3920 IN UINT Len);
3922 UINT RTMP_CALC_FCS32(
3923 IN UINT Fcs,
3924 IN PUCHAR Cp,
3925 IN INT Len);
3928 // MLME routines
3931 // Asic/RF/BBP related functions
3933 VOID AsicAdjustTxPower(
3934 IN PRTMP_ADAPTER pAd);
3936 VOID AsicUpdateProtect(
3937 IN PRTMP_ADAPTER pAd,
3938 IN USHORT OperaionMode,
3939 IN UCHAR SetMask,
3940 IN BOOLEAN bDisableBGProtect,
3941 IN BOOLEAN bNonGFExist);
3943 VOID AsicSwitchChannel(
3944 IN PRTMP_ADAPTER pAd,
3945 IN UCHAR Channel,
3946 IN BOOLEAN bScan);
3948 VOID AsicLockChannel(
3949 IN PRTMP_ADAPTER pAd,
3950 IN UCHAR Channel) ;
3952 VOID AsicAntennaSelect(
3953 IN PRTMP_ADAPTER pAd,
3954 IN UCHAR Channel);
3956 VOID AsicAntennaSetting(
3957 IN PRTMP_ADAPTER pAd,
3958 IN ABGBAND_STATE BandState);
3960 VOID AsicRfTuningExec(
3961 IN PVOID SystemSpecific1,
3962 IN PVOID FunctionContext,
3963 IN PVOID SystemSpecific2,
3964 IN PVOID SystemSpecific3);
3966 #ifdef CONFIG_STA_SUPPORT
3967 VOID AsicSleepThenAutoWakeup(
3968 IN PRTMP_ADAPTER pAd,
3969 IN USHORT TbttNumToNextWakeUp);
3971 VOID AsicForceSleep(
3972 IN PRTMP_ADAPTER pAd);
3974 VOID AsicForceWakeup(
3975 IN PRTMP_ADAPTER pAd,
3976 IN BOOLEAN bFromTx);
3977 #endif // CONFIG_STA_SUPPORT //
3979 VOID AsicSetBssid(
3980 IN PRTMP_ADAPTER pAd,
3981 IN PUCHAR pBssid);
3983 VOID AsicSetMcastWC(
3984 IN PRTMP_ADAPTER pAd);
3986 #if 0 // removed by AlbertY
3987 VOID AsicSetBssidWC(
3988 IN PRTMP_ADAPTER pAd,
3989 IN PUCHAR pBssid);
3990 #endif
3992 VOID AsicDelWcidTab(
3993 IN PRTMP_ADAPTER pAd,
3994 IN UCHAR Wcid);
3996 VOID AsicEnableRDG(
3997 IN PRTMP_ADAPTER pAd);
3999 VOID AsicDisableRDG(
4000 IN PRTMP_ADAPTER pAd);
4002 VOID AsicDisableSync(
4003 IN PRTMP_ADAPTER pAd);
4005 VOID AsicEnableBssSync(
4006 IN PRTMP_ADAPTER pAd);
4008 VOID AsicEnableIbssSync(
4009 IN PRTMP_ADAPTER pAd);
4011 VOID AsicSetEdcaParm(
4012 IN PRTMP_ADAPTER pAd,
4013 IN PEDCA_PARM pEdcaParm);
4015 VOID AsicSetSlotTime(
4016 IN PRTMP_ADAPTER pAd,
4017 IN BOOLEAN bUseShortSlotTime);
4019 #if 0
4020 VOID AsicAddWcidCipherEntry(
4021 IN PRTMP_ADAPTER pAd,
4022 IN UCHAR WCID,
4023 IN UCHAR BssIndex,
4024 IN UCHAR KeyTable,
4025 IN UCHAR CipherAlg,
4026 IN PUCHAR pAddr,
4027 IN CIPHER_KEY *pCipherKey);
4028 #endif
4030 VOID AsicAddSharedKeyEntry(
4031 IN PRTMP_ADAPTER pAd,
4032 IN UCHAR BssIndex,
4033 IN UCHAR KeyIdx,
4034 IN UCHAR CipherAlg,
4035 IN PUCHAR pKey,
4036 IN PUCHAR pTxMic,
4037 IN PUCHAR pRxMic);
4039 VOID AsicRemoveSharedKeyEntry(
4040 IN PRTMP_ADAPTER pAd,
4041 IN UCHAR BssIndex,
4042 IN UCHAR KeyIdx);
4044 VOID AsicUpdateWCIDAttribute(
4045 IN PRTMP_ADAPTER pAd,
4046 IN USHORT WCID,
4047 IN UCHAR BssIndex,
4048 IN UCHAR CipherAlg,
4049 IN BOOLEAN bUsePairewiseKeyTable);
4051 VOID AsicUpdateWCIDIVEIV(
4052 IN PRTMP_ADAPTER pAd,
4053 IN USHORT WCID,
4054 IN ULONG uIV,
4055 IN ULONG uEIV);
4057 VOID AsicUpdateRxWCIDTable(
4058 IN PRTMP_ADAPTER pAd,
4059 IN USHORT WCID,
4060 IN PUCHAR pAddr);
4062 VOID AsicAddKeyEntry(
4063 IN PRTMP_ADAPTER pAd,
4064 IN USHORT WCID,
4065 IN UCHAR BssIndex,
4066 IN UCHAR KeyIdx,
4067 IN PCIPHER_KEY pCipherKey,
4068 IN BOOLEAN bUsePairewiseKeyTable,
4069 IN BOOLEAN bTxKey);
4071 VOID AsicAddPairwiseKeyEntry(
4072 IN PRTMP_ADAPTER pAd,
4073 IN PUCHAR pAddr,
4074 IN UCHAR WCID,
4075 IN CIPHER_KEY *pCipherKey);
4077 VOID AsicRemovePairwiseKeyEntry(
4078 IN PRTMP_ADAPTER pAd,
4079 IN UCHAR BssIdx,
4080 IN UCHAR Wcid);
4082 BOOLEAN AsicSendCommandToMcu(
4083 IN PRTMP_ADAPTER pAd,
4084 IN UCHAR Command,
4085 IN UCHAR Token,
4086 IN UCHAR Arg0,
4087 IN UCHAR Arg1);
4090 VOID MacAddrRandomBssid(
4091 IN PRTMP_ADAPTER pAd,
4092 OUT PUCHAR pAddr);
4094 VOID MgtMacHeaderInit(
4095 IN PRTMP_ADAPTER pAd,
4096 IN OUT PHEADER_802_11 pHdr80211,
4097 IN UCHAR SubType,
4098 IN UCHAR ToDs,
4099 IN PUCHAR pDA,
4100 IN PUCHAR pBssid);
4102 VOID MlmeRadioOff(
4103 IN PRTMP_ADAPTER pAd);
4105 VOID MlmeRadioOn(
4106 IN PRTMP_ADAPTER pAd);
4109 VOID BssTableInit(
4110 IN BSS_TABLE *Tab);
4112 #ifdef DOT11_N_SUPPORT
4113 VOID BATableInit(
4114 IN PRTMP_ADAPTER pAd,
4115 IN BA_TABLE *Tab);
4116 #endif // DOT11_N_SUPPORT //
4118 ULONG BssTableSearch(
4119 IN BSS_TABLE *Tab,
4120 IN PUCHAR pBssid,
4121 IN UCHAR Channel);
4123 ULONG BssSsidTableSearch(
4124 IN BSS_TABLE *Tab,
4125 IN PUCHAR pBssid,
4126 IN PUCHAR pSsid,
4127 IN UCHAR SsidLen,
4128 IN UCHAR Channel);
4130 ULONG BssTableSearchWithSSID(
4131 IN BSS_TABLE *Tab,
4132 IN PUCHAR Bssid,
4133 IN PUCHAR pSsid,
4134 IN UCHAR SsidLen,
4135 IN UCHAR Channel);
4137 VOID BssTableDeleteEntry(
4138 IN OUT PBSS_TABLE pTab,
4139 IN PUCHAR pBssid,
4140 IN UCHAR Channel);
4142 #ifdef DOT11_N_SUPPORT
4143 VOID BATableDeleteORIEntry(
4144 IN OUT PRTMP_ADAPTER pAd,
4145 IN BA_ORI_ENTRY *pBAORIEntry);
4147 VOID BATableDeleteRECEntry(
4148 IN OUT PRTMP_ADAPTER pAd,
4149 IN BA_REC_ENTRY *pBARECEntry);
4151 VOID BATableTearORIEntry(
4152 IN OUT PRTMP_ADAPTER pAd,
4153 IN UCHAR TID,
4154 IN UCHAR Wcid,
4155 IN BOOLEAN bForceDelete,
4156 IN BOOLEAN ALL);
4158 VOID BATableTearRECEntry(
4159 IN OUT PRTMP_ADAPTER pAd,
4160 IN UCHAR TID,
4161 IN UCHAR WCID,
4162 IN BOOLEAN ALL);
4163 #endif // DOT11_N_SUPPORT //
4165 VOID BssEntrySet(
4166 IN PRTMP_ADAPTER pAd,
4167 OUT PBSS_ENTRY pBss,
4168 IN PUCHAR pBssid,
4169 IN CHAR Ssid[],
4170 IN UCHAR SsidLen,
4171 IN UCHAR BssType,
4172 IN USHORT BeaconPeriod,
4173 IN PCF_PARM CfParm,
4174 IN USHORT AtimWin,
4175 IN USHORT CapabilityInfo,
4176 IN UCHAR SupRate[],
4177 IN UCHAR SupRateLen,
4178 IN UCHAR ExtRate[],
4179 IN UCHAR ExtRateLen,
4180 IN HT_CAPABILITY_IE *pHtCapability,
4181 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4182 IN UCHAR HtCapabilityLen,
4183 IN UCHAR AddHtInfoLen,
4184 IN UCHAR NewExtChanOffset,
4185 IN UCHAR Channel,
4186 IN CHAR Rssi,
4187 IN LARGE_INTEGER TimeStamp,
4188 IN UCHAR CkipFlag,
4189 IN PEDCA_PARM pEdcaParm,
4190 IN PQOS_CAPABILITY_PARM pQosCapability,
4191 IN PQBSS_LOAD_PARM pQbssLoad,
4192 IN USHORT LengthVIE,
4193 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4195 ULONG BssTableSetEntry(
4196 IN PRTMP_ADAPTER pAd,
4197 OUT PBSS_TABLE pTab,
4198 IN PUCHAR pBssid,
4199 IN CHAR Ssid[],
4200 IN UCHAR SsidLen,
4201 IN UCHAR BssType,
4202 IN USHORT BeaconPeriod,
4203 IN CF_PARM *CfParm,
4204 IN USHORT AtimWin,
4205 IN USHORT CapabilityInfo,
4206 IN UCHAR SupRate[],
4207 IN UCHAR SupRateLen,
4208 IN UCHAR ExtRate[],
4209 IN UCHAR ExtRateLen,
4210 IN HT_CAPABILITY_IE *pHtCapability,
4211 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4212 IN UCHAR HtCapabilityLen,
4213 IN UCHAR AddHtInfoLen,
4214 IN UCHAR NewExtChanOffset,
4215 IN UCHAR Channel,
4216 IN CHAR Rssi,
4217 IN LARGE_INTEGER TimeStamp,
4218 IN UCHAR CkipFlag,
4219 IN PEDCA_PARM pEdcaParm,
4220 IN PQOS_CAPABILITY_PARM pQosCapability,
4221 IN PQBSS_LOAD_PARM pQbssLoad,
4222 IN USHORT LengthVIE,
4223 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4225 #ifdef DOT11_N_SUPPORT
4226 VOID BATableInsertEntry(
4227 IN PRTMP_ADAPTER pAd,
4228 IN USHORT Aid,
4229 IN USHORT TimeOutValue,
4230 IN USHORT StartingSeq,
4231 IN UCHAR TID,
4232 IN UCHAR BAWinSize,
4233 IN UCHAR OriginatorStatus,
4234 IN BOOLEAN IsRecipient);
4235 #endif // DOT11_N_SUPPORT //
4237 VOID BssTableSsidSort(
4238 IN PRTMP_ADAPTER pAd,
4239 OUT BSS_TABLE *OutTab,
4240 IN CHAR Ssid[],
4241 IN UCHAR SsidLen);
4243 VOID BssTableSortByRssi(
4244 IN OUT BSS_TABLE *OutTab);
4246 VOID BssCipherParse(
4247 IN OUT PBSS_ENTRY pBss);
4249 NDIS_STATUS MlmeQueueInit(
4250 IN MLME_QUEUE *Queue);
4252 VOID MlmeQueueDestroy(
4253 IN MLME_QUEUE *Queue);
4255 BOOLEAN MlmeEnqueue(
4256 IN PRTMP_ADAPTER pAd,
4257 IN ULONG Machine,
4258 IN ULONG MsgType,
4259 IN ULONG MsgLen,
4260 IN VOID *Msg);
4262 BOOLEAN MlmeEnqueueForRecv(
4263 IN PRTMP_ADAPTER pAd,
4264 IN ULONG Wcid,
4265 IN ULONG TimeStampHigh,
4266 IN ULONG TimeStampLow,
4267 IN UCHAR Rssi0,
4268 IN UCHAR Rssi1,
4269 IN UCHAR Rssi2,
4270 IN ULONG MsgLen,
4271 IN PVOID Msg,
4272 IN UCHAR Signal);
4275 BOOLEAN MlmeDequeue(
4276 IN MLME_QUEUE *Queue,
4277 OUT MLME_QUEUE_ELEM **Elem);
4279 VOID MlmeRestartStateMachine(
4280 IN PRTMP_ADAPTER pAd);
4282 BOOLEAN MlmeQueueEmpty(
4283 IN MLME_QUEUE *Queue);
4285 BOOLEAN MlmeQueueFull(
4286 IN MLME_QUEUE *Queue);
4288 BOOLEAN MsgTypeSubst(
4289 IN PRTMP_ADAPTER pAd,
4290 IN PFRAME_802_11 pFrame,
4291 OUT INT *Machine,
4292 OUT INT *MsgType);
4294 VOID StateMachineInit(
4295 IN STATE_MACHINE *Sm,
4296 IN STATE_MACHINE_FUNC Trans[],
4297 IN ULONG StNr,
4298 IN ULONG MsgNr,
4299 IN STATE_MACHINE_FUNC DefFunc,
4300 IN ULONG InitState,
4301 IN ULONG Base);
4303 VOID StateMachineSetAction(
4304 IN STATE_MACHINE *S,
4305 IN ULONG St,
4306 ULONG Msg,
4307 IN STATE_MACHINE_FUNC F);
4309 VOID StateMachinePerformAction(
4310 IN PRTMP_ADAPTER pAd,
4311 IN STATE_MACHINE *S,
4312 IN MLME_QUEUE_ELEM *Elem);
4314 VOID Drop(
4315 IN PRTMP_ADAPTER pAd,
4316 IN MLME_QUEUE_ELEM *Elem);
4318 VOID AssocStateMachineInit(
4319 IN PRTMP_ADAPTER pAd,
4320 IN STATE_MACHINE *Sm,
4321 OUT STATE_MACHINE_FUNC Trans[]);
4323 VOID ReassocTimeout(
4324 IN PVOID SystemSpecific1,
4325 IN PVOID FunctionContext,
4326 IN PVOID SystemSpecific2,
4327 IN PVOID SystemSpecific3);
4329 VOID AssocTimeout(
4330 IN PVOID SystemSpecific1,
4331 IN PVOID FunctionContext,
4332 IN PVOID SystemSpecific2,
4333 IN PVOID SystemSpecific3);
4335 VOID DisassocTimeout(
4336 IN PVOID SystemSpecific1,
4337 IN PVOID FunctionContext,
4338 IN PVOID SystemSpecific2,
4339 IN PVOID SystemSpecific3);
4341 //----------------------------------------------
4342 VOID MlmeDisassocReqAction(
4343 IN PRTMP_ADAPTER pAd,
4344 IN MLME_QUEUE_ELEM *Elem);
4346 VOID MlmeAssocReqAction(
4347 IN PRTMP_ADAPTER pAd,
4348 IN MLME_QUEUE_ELEM *Elem);
4350 VOID MlmeReassocReqAction(
4351 IN PRTMP_ADAPTER pAd,
4352 IN MLME_QUEUE_ELEM *Elem);
4354 VOID MlmeDisassocReqAction(
4355 IN PRTMP_ADAPTER pAd,
4356 IN MLME_QUEUE_ELEM *Elem);
4358 VOID PeerAssocRspAction(
4359 IN PRTMP_ADAPTER pAd,
4360 IN MLME_QUEUE_ELEM *Elem);
4362 VOID PeerReassocRspAction(
4363 IN PRTMP_ADAPTER pAd,
4364 IN MLME_QUEUE_ELEM *Elem);
4366 VOID PeerDisassocAction(
4367 IN PRTMP_ADAPTER pAd,
4368 IN MLME_QUEUE_ELEM *Elem);
4370 VOID DisassocTimeoutAction(
4371 IN PRTMP_ADAPTER pAd,
4372 IN MLME_QUEUE_ELEM *Elem);
4374 VOID AssocTimeoutAction(
4375 IN PRTMP_ADAPTER pAd,
4376 IN MLME_QUEUE_ELEM *Elem);
4378 VOID ReassocTimeoutAction(
4379 IN PRTMP_ADAPTER pAd,
4380 IN MLME_QUEUE_ELEM *Elem);
4382 VOID Cls3errAction(
4383 IN PRTMP_ADAPTER pAd,
4384 IN PUCHAR pAddr);
4386 VOID SwitchBetweenWepAndCkip(
4387 IN PRTMP_ADAPTER pAd);
4389 VOID InvalidStateWhenAssoc(
4390 IN PRTMP_ADAPTER pAd,
4391 IN MLME_QUEUE_ELEM *Elem);
4393 VOID InvalidStateWhenReassoc(
4394 IN PRTMP_ADAPTER pAd,
4395 IN MLME_QUEUE_ELEM *Elem);
4397 VOID InvalidStateWhenDisassociate(
4398 IN PRTMP_ADAPTER pAd,
4399 IN MLME_QUEUE_ELEM *Elem);
4401 #ifdef RT2870
4402 VOID MlmeCntlConfirm(
4403 IN PRTMP_ADAPTER pAd,
4404 IN ULONG MsgType,
4405 IN USHORT Msg);
4406 #endif // RT2870 //
4408 VOID ComposePsPoll(
4409 IN PRTMP_ADAPTER pAd);
4411 VOID ComposeNullFrame(
4412 IN PRTMP_ADAPTER pAd);
4414 VOID AssocPostProc(
4415 IN PRTMP_ADAPTER pAd,
4416 IN PUCHAR pAddr2,
4417 IN USHORT CapabilityInfo,
4418 IN USHORT Aid,
4419 IN UCHAR SupRate[],
4420 IN UCHAR SupRateLen,
4421 IN UCHAR ExtRate[],
4422 IN UCHAR ExtRateLen,
4423 IN PEDCA_PARM pEdcaParm,
4424 IN HT_CAPABILITY_IE *pHtCapability,
4425 IN UCHAR HtCapabilityLen,
4426 IN ADD_HT_INFO_IE *pAddHtInfo);
4428 VOID AuthStateMachineInit(
4429 IN PRTMP_ADAPTER pAd,
4430 IN PSTATE_MACHINE sm,
4431 OUT STATE_MACHINE_FUNC Trans[]);
4433 VOID AuthTimeout(
4434 IN PVOID SystemSpecific1,
4435 IN PVOID FunctionContext,
4436 IN PVOID SystemSpecific2,
4437 IN PVOID SystemSpecific3);
4439 VOID MlmeAuthReqAction(
4440 IN PRTMP_ADAPTER pAd,
4441 IN MLME_QUEUE_ELEM *Elem);
4443 VOID PeerAuthRspAtSeq2Action(
4444 IN PRTMP_ADAPTER pAd,
4445 IN MLME_QUEUE_ELEM *Elem);
4447 VOID PeerAuthRspAtSeq4Action(
4448 IN PRTMP_ADAPTER pAd,
4449 IN MLME_QUEUE_ELEM *Elem);
4451 VOID AuthTimeoutAction(
4452 IN PRTMP_ADAPTER pAd,
4453 IN MLME_QUEUE_ELEM *Elem);
4455 VOID Cls2errAction(
4456 IN PRTMP_ADAPTER pAd,
4457 IN PUCHAR pAddr);
4459 VOID MlmeDeauthReqAction(
4460 IN PRTMP_ADAPTER pAd,
4461 IN MLME_QUEUE_ELEM *Elem);
4463 VOID InvalidStateWhenAuth(
4464 IN PRTMP_ADAPTER pAd,
4465 IN MLME_QUEUE_ELEM *Elem);
4467 //=============================================
4469 VOID AuthRspStateMachineInit(
4470 IN PRTMP_ADAPTER pAd,
4471 IN PSTATE_MACHINE Sm,
4472 IN STATE_MACHINE_FUNC Trans[]);
4474 VOID PeerDeauthAction(
4475 IN PRTMP_ADAPTER pAd,
4476 IN MLME_QUEUE_ELEM *Elem);
4478 VOID PeerAuthSimpleRspGenAndSend(
4479 IN PRTMP_ADAPTER pAd,
4480 IN PHEADER_802_11 pHdr80211,
4481 IN USHORT Alg,
4482 IN USHORT Seq,
4483 IN USHORT Reason,
4484 IN USHORT Status);
4487 // Private routines in dls.c
4490 //========================================
4492 VOID SyncStateMachineInit(
4493 IN PRTMP_ADAPTER pAd,
4494 IN STATE_MACHINE *Sm,
4495 OUT STATE_MACHINE_FUNC Trans[]);
4497 VOID BeaconTimeout(
4498 IN PVOID SystemSpecific1,
4499 IN PVOID FunctionContext,
4500 IN PVOID SystemSpecific2,
4501 IN PVOID SystemSpecific3);
4503 VOID ScanTimeout(
4504 IN PVOID SystemSpecific1,
4505 IN PVOID FunctionContext,
4506 IN PVOID SystemSpecific2,
4507 IN PVOID SystemSpecific3);
4509 VOID MlmeScanReqAction(
4510 IN PRTMP_ADAPTER pAd,
4511 IN MLME_QUEUE_ELEM *Elem);
4513 VOID InvalidStateWhenScan(
4514 IN PRTMP_ADAPTER pAd,
4515 IN MLME_QUEUE_ELEM *Elem);
4517 VOID InvalidStateWhenJoin(
4518 IN PRTMP_ADAPTER pAd,
4519 IN MLME_QUEUE_ELEM *Elem);
4521 VOID InvalidStateWhenStart(
4522 IN PRTMP_ADAPTER pAd,
4523 IN MLME_QUEUE_ELEM *Elem);
4525 VOID PeerBeacon(
4526 IN PRTMP_ADAPTER pAd,
4527 IN MLME_QUEUE_ELEM *Elem);
4529 VOID EnqueueProbeRequest(
4530 IN PRTMP_ADAPTER pAd);
4532 BOOLEAN ScanRunning(
4533 IN PRTMP_ADAPTER pAd);
4534 //=========================================
4536 VOID MlmeCntlInit(
4537 IN PRTMP_ADAPTER pAd,
4538 IN STATE_MACHINE *S,
4539 OUT STATE_MACHINE_FUNC Trans[]);
4541 VOID MlmeCntlMachinePerformAction(
4542 IN PRTMP_ADAPTER pAd,
4543 IN STATE_MACHINE *S,
4544 IN MLME_QUEUE_ELEM *Elem);
4546 VOID CntlIdleProc(
4547 IN PRTMP_ADAPTER pAd,
4548 IN MLME_QUEUE_ELEM *Elem);
4550 VOID CntlOidScanProc(
4551 IN PRTMP_ADAPTER pAd,
4552 IN MLME_QUEUE_ELEM *Elem);
4554 VOID CntlOidSsidProc(
4555 IN PRTMP_ADAPTER pAd,
4556 IN MLME_QUEUE_ELEM * Elem);
4558 VOID CntlOidRTBssidProc(
4559 IN PRTMP_ADAPTER pAd,
4560 IN MLME_QUEUE_ELEM * Elem);
4562 VOID CntlMlmeRoamingProc(
4563 IN PRTMP_ADAPTER pAd,
4564 IN MLME_QUEUE_ELEM * Elem);
4566 VOID CntlWaitDisassocProc(
4567 IN PRTMP_ADAPTER pAd,
4568 IN MLME_QUEUE_ELEM *Elem);
4570 VOID CntlWaitJoinProc(
4571 IN PRTMP_ADAPTER pAd,
4572 IN MLME_QUEUE_ELEM *Elem);
4574 VOID CntlWaitReassocProc(
4575 IN PRTMP_ADAPTER pAd,
4576 IN MLME_QUEUE_ELEM *Elem);
4578 VOID CntlWaitStartProc(
4579 IN PRTMP_ADAPTER pAd,
4580 IN MLME_QUEUE_ELEM *Elem);
4582 VOID CntlWaitAuthProc(
4583 IN PRTMP_ADAPTER pAd,
4584 IN MLME_QUEUE_ELEM *Elem);
4586 VOID CntlWaitAuthProc2(
4587 IN PRTMP_ADAPTER pAd,
4588 IN MLME_QUEUE_ELEM *Elem);
4590 VOID CntlWaitAssocProc(
4591 IN PRTMP_ADAPTER pAd,
4592 IN MLME_QUEUE_ELEM *Elem);
4594 VOID LinkUp(
4595 IN PRTMP_ADAPTER pAd,
4596 IN UCHAR BssType);
4598 VOID LinkDown(
4599 IN PRTMP_ADAPTER pAd,
4600 IN BOOLEAN IsReqFromAP);
4602 VOID IterateOnBssTab(
4603 IN PRTMP_ADAPTER pAd);
4605 VOID IterateOnBssTab2(
4606 IN PRTMP_ADAPTER pAd);;
4608 VOID JoinParmFill(
4609 IN PRTMP_ADAPTER pAd,
4610 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4611 IN ULONG BssIdx);
4613 VOID AssocParmFill(
4614 IN PRTMP_ADAPTER pAd,
4615 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4616 IN PUCHAR pAddr,
4617 IN USHORT CapabilityInfo,
4618 IN ULONG Timeout,
4619 IN USHORT ListenIntv);
4621 VOID ScanParmFill(
4622 IN PRTMP_ADAPTER pAd,
4623 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4624 IN CHAR Ssid[],
4625 IN UCHAR SsidLen,
4626 IN UCHAR BssType,
4627 IN UCHAR ScanType);
4629 VOID DisassocParmFill(
4630 IN PRTMP_ADAPTER pAd,
4631 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4632 IN PUCHAR pAddr,
4633 IN USHORT Reason);
4635 VOID StartParmFill(
4636 IN PRTMP_ADAPTER pAd,
4637 IN OUT MLME_START_REQ_STRUCT *StartReq,
4638 IN CHAR Ssid[],
4639 IN UCHAR SsidLen);
4641 VOID AuthParmFill(
4642 IN PRTMP_ADAPTER pAd,
4643 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4644 IN PUCHAR pAddr,
4645 IN USHORT Alg);
4647 VOID EnqueuePsPoll(
4648 IN PRTMP_ADAPTER pAd);
4650 VOID EnqueueBeaconFrame(
4651 IN PRTMP_ADAPTER pAd);
4653 VOID MlmeJoinReqAction(
4654 IN PRTMP_ADAPTER pAd,
4655 IN MLME_QUEUE_ELEM *Elem);
4657 VOID MlmeScanReqAction(
4658 IN PRTMP_ADAPTER pAd,
4659 IN MLME_QUEUE_ELEM *Elem);
4661 VOID MlmeStartReqAction(
4662 IN PRTMP_ADAPTER pAd,
4663 IN MLME_QUEUE_ELEM *Elem);
4665 VOID ScanTimeoutAction(
4666 IN PRTMP_ADAPTER pAd,
4667 IN MLME_QUEUE_ELEM *Elem);
4669 VOID BeaconTimeoutAtJoinAction(
4670 IN PRTMP_ADAPTER pAd,
4671 IN MLME_QUEUE_ELEM *Elem);
4673 VOID PeerBeaconAtScanAction(
4674 IN PRTMP_ADAPTER pAd,
4675 IN MLME_QUEUE_ELEM *Elem);
4677 VOID PeerBeaconAtJoinAction(
4678 IN PRTMP_ADAPTER pAd,
4679 IN MLME_QUEUE_ELEM *Elem);
4681 VOID PeerBeacon(
4682 IN PRTMP_ADAPTER pAd,
4683 IN MLME_QUEUE_ELEM *Elem);
4685 VOID PeerProbeReqAction(
4686 IN PRTMP_ADAPTER pAd,
4687 IN MLME_QUEUE_ELEM *Elem);
4689 VOID ScanNextChannel(
4690 IN PRTMP_ADAPTER pAd);
4692 ULONG MakeIbssBeacon(
4693 IN PRTMP_ADAPTER pAd);
4695 VOID CCXAdjacentAPReport(
4696 IN PRTMP_ADAPTER pAd);
4698 BOOLEAN MlmeScanReqSanity(
4699 IN PRTMP_ADAPTER pAd,
4700 IN VOID *Msg,
4701 IN ULONG MsgLen,
4702 OUT UCHAR *BssType,
4703 OUT CHAR ssid[],
4704 OUT UCHAR *SsidLen,
4705 OUT UCHAR *ScanType);
4707 BOOLEAN PeerBeaconAndProbeRspSanity(
4708 IN PRTMP_ADAPTER pAd,
4709 IN VOID *Msg,
4710 IN ULONG MsgLen,
4711 IN UCHAR MsgChannel,
4712 OUT PUCHAR pAddr2,
4713 OUT PUCHAR pBssid,
4714 OUT CHAR Ssid[],
4715 OUT UCHAR *pSsidLen,
4716 OUT UCHAR *pBssType,
4717 OUT USHORT *pBeaconPeriod,
4718 OUT UCHAR *pChannel,
4719 OUT UCHAR *pNewChannel,
4720 OUT LARGE_INTEGER *pTimestamp,
4721 OUT CF_PARM *pCfParm,
4722 OUT USHORT *pAtimWin,
4723 OUT USHORT *pCapabilityInfo,
4724 OUT UCHAR *pErp,
4725 OUT UCHAR *pDtimCount,
4726 OUT UCHAR *pDtimPeriod,
4727 OUT UCHAR *pBcastFlag,
4728 OUT UCHAR *pMessageToMe,
4729 OUT UCHAR SupRate[],
4730 OUT UCHAR *pSupRateLen,
4731 OUT UCHAR ExtRate[],
4732 OUT UCHAR *pExtRateLen,
4733 OUT UCHAR *pCkipFlag,
4734 OUT UCHAR *pAironetCellPowerLimit,
4735 OUT PEDCA_PARM pEdcaParm,
4736 OUT PQBSS_LOAD_PARM pQbssLoad,
4737 OUT PQOS_CAPABILITY_PARM pQosCapability,
4738 OUT ULONG *pRalinkIe,
4739 OUT UCHAR *pHtCapabilityLen,
4740 #ifdef CONFIG_STA_SUPPORT
4741 OUT UCHAR *pPreNHtCapabilityLen,
4742 #endif // CONFIG_STA_SUPPORT //
4743 OUT HT_CAPABILITY_IE *pHtCapability,
4744 OUT UCHAR *AddHtInfoLen,
4745 OUT ADD_HT_INFO_IE *AddHtInfo,
4746 OUT UCHAR *NewExtChannel,
4747 OUT USHORT *LengthVIE,
4748 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4750 BOOLEAN PeerAddBAReqActionSanity(
4751 IN PRTMP_ADAPTER pAd,
4752 IN VOID *pMsg,
4753 IN ULONG MsgLen,
4754 OUT PUCHAR pAddr2);
4756 BOOLEAN PeerAddBARspActionSanity(
4757 IN PRTMP_ADAPTER pAd,
4758 IN VOID *pMsg,
4759 IN ULONG MsgLen);
4761 BOOLEAN PeerDelBAActionSanity(
4762 IN PRTMP_ADAPTER pAd,
4763 IN UCHAR Wcid,
4764 IN VOID *pMsg,
4765 IN ULONG MsgLen);
4767 BOOLEAN MlmeAssocReqSanity(
4768 IN PRTMP_ADAPTER pAd,
4769 IN VOID *Msg,
4770 IN ULONG MsgLen,
4771 OUT PUCHAR pApAddr,
4772 OUT USHORT *CapabilityInfo,
4773 OUT ULONG *Timeout,
4774 OUT USHORT *ListenIntv);
4776 BOOLEAN MlmeAuthReqSanity(
4777 IN PRTMP_ADAPTER pAd,
4778 IN VOID *Msg,
4779 IN ULONG MsgLen,
4780 OUT PUCHAR pAddr,
4781 OUT ULONG *Timeout,
4782 OUT USHORT *Alg);
4784 BOOLEAN MlmeStartReqSanity(
4785 IN PRTMP_ADAPTER pAd,
4786 IN VOID *Msg,
4787 IN ULONG MsgLen,
4788 OUT CHAR Ssid[],
4789 OUT UCHAR *Ssidlen);
4791 BOOLEAN PeerAuthSanity(
4792 IN PRTMP_ADAPTER pAd,
4793 IN VOID *Msg,
4794 IN ULONG MsgLen,
4795 OUT PUCHAR pAddr,
4796 OUT USHORT *Alg,
4797 OUT USHORT *Seq,
4798 OUT USHORT *Status,
4799 OUT CHAR ChlgText[]);
4801 BOOLEAN PeerAssocRspSanity(
4802 IN PRTMP_ADAPTER pAd,
4803 IN VOID *pMsg,
4804 IN ULONG MsgLen,
4805 OUT PUCHAR pAddr2,
4806 OUT USHORT *pCapabilityInfo,
4807 OUT USHORT *pStatus,
4808 OUT USHORT *pAid,
4809 OUT UCHAR SupRate[],
4810 OUT UCHAR *pSupRateLen,
4811 OUT UCHAR ExtRate[],
4812 OUT UCHAR *pExtRateLen,
4813 OUT HT_CAPABILITY_IE *pHtCapability,
4814 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4815 OUT UCHAR *pHtCapabilityLen,
4816 OUT UCHAR *pAddHtInfoLen,
4817 OUT UCHAR *pNewExtChannelOffset,
4818 OUT PEDCA_PARM pEdcaParm,
4819 OUT UCHAR *pCkipFlag);
4821 BOOLEAN PeerDisassocSanity(
4822 IN PRTMP_ADAPTER pAd,
4823 IN VOID *Msg,
4824 IN ULONG MsgLen,
4825 OUT PUCHAR pAddr2,
4826 OUT USHORT *Reason);
4828 BOOLEAN PeerWpaMessageSanity(
4829 IN PRTMP_ADAPTER pAd,
4830 IN PEAPOL_PACKET pMsg,
4831 IN ULONG MsgLen,
4832 IN UCHAR MsgType,
4833 IN MAC_TABLE_ENTRY *pEntry);
4835 BOOLEAN PeerDeauthSanity(
4836 IN PRTMP_ADAPTER pAd,
4837 IN VOID *Msg,
4838 IN ULONG MsgLen,
4839 OUT PUCHAR pAddr2,
4840 OUT USHORT *Reason);
4842 BOOLEAN PeerProbeReqSanity(
4843 IN PRTMP_ADAPTER pAd,
4844 IN VOID *Msg,
4845 IN ULONG MsgLen,
4846 OUT PUCHAR pAddr2,
4847 OUT CHAR Ssid[],
4848 OUT UCHAR *pSsidLen);
4850 BOOLEAN GetTimBit(
4851 IN CHAR *Ptr,
4852 IN USHORT Aid,
4853 OUT UCHAR *TimLen,
4854 OUT UCHAR *BcastFlag,
4855 OUT UCHAR *DtimCount,
4856 OUT UCHAR *DtimPeriod,
4857 OUT UCHAR *MessageToMe);
4859 UCHAR ChannelSanity(
4860 IN PRTMP_ADAPTER pAd,
4861 IN UCHAR channel);
4863 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4864 IN PBSS_ENTRY pBss);
4866 #if 0 // It's omitted
4867 NDIS_STATUS RTMPWepKeySanity(
4868 IN PRTMP_ADAPTER pAdapter,
4869 IN PVOID pBuf);
4870 #endif
4872 BOOLEAN MlmeDelBAReqSanity(
4873 IN PRTMP_ADAPTER pAd,
4874 IN VOID *Msg,
4875 IN ULONG MsgLen);
4877 BOOLEAN MlmeAddBAReqSanity(
4878 IN PRTMP_ADAPTER pAd,
4879 IN VOID *Msg,
4880 IN ULONG MsgLen,
4881 OUT PUCHAR pAddr2);
4883 ULONG MakeOutgoingFrame(
4884 OUT CHAR *Buffer,
4885 OUT ULONG *Length, ...);
4887 VOID LfsrInit(
4888 IN PRTMP_ADAPTER pAd,
4889 IN ULONG Seed);
4891 UCHAR RandomByte(
4892 IN PRTMP_ADAPTER pAd);
4894 VOID AsicUpdateAutoFallBackTable(
4895 IN PRTMP_ADAPTER pAd,
4896 IN PUCHAR pTxRate);
4898 VOID MlmePeriodicExec(
4899 IN PVOID SystemSpecific1,
4900 IN PVOID FunctionContext,
4901 IN PVOID SystemSpecific2,
4902 IN PVOID SystemSpecific3);
4904 VOID LinkDownExec(
4905 IN PVOID SystemSpecific1,
4906 IN PVOID FunctionContext,
4907 IN PVOID SystemSpecific2,
4908 IN PVOID SystemSpecific3);
4910 VOID LinkUpExec(
4911 IN PVOID SystemSpecific1,
4912 IN PVOID FunctionContext,
4913 IN PVOID SystemSpecific2,
4914 IN PVOID SystemSpecific3);
4916 VOID STAMlmePeriodicExec(
4917 PRTMP_ADAPTER pAd);
4919 VOID MlmeAutoScan(
4920 IN PRTMP_ADAPTER pAd);
4922 VOID MlmeAutoReconnectLastSSID(
4923 IN PRTMP_ADAPTER pAd);
4925 BOOLEAN MlmeValidateSSID(
4926 IN PUCHAR pSsid,
4927 IN UCHAR SsidLen);
4929 VOID MlmeCheckForRoaming(
4930 IN PRTMP_ADAPTER pAd,
4931 IN ULONG Now32);
4933 VOID MlmeCheckForFastRoaming(
4934 IN PRTMP_ADAPTER pAd,
4935 IN ULONG Now);
4937 VOID MlmeDynamicTxRateSwitching(
4938 IN PRTMP_ADAPTER pAd);
4940 VOID MlmeSetTxRate(
4941 IN PRTMP_ADAPTER pAd,
4942 IN PMAC_TABLE_ENTRY pEntry,
4943 IN PRTMP_TX_RATE_SWITCH pTxRate);
4945 VOID MlmeSelectTxRateTable(
4946 IN PRTMP_ADAPTER pAd,
4947 IN PMAC_TABLE_ENTRY pEntry,
4948 IN PUCHAR *ppTable,
4949 IN PUCHAR pTableSize,
4950 IN PUCHAR pInitTxRateIdx);
4952 VOID MlmeCalculateChannelQuality(
4953 IN PRTMP_ADAPTER pAd,
4954 IN ULONG Now);
4956 VOID MlmeCheckPsmChange(
4957 IN PRTMP_ADAPTER pAd,
4958 IN ULONG Now32);
4960 VOID MlmeSetPsmBit(
4961 IN PRTMP_ADAPTER pAd,
4962 IN USHORT psm);
4964 VOID MlmeSetTxPreamble(
4965 IN PRTMP_ADAPTER pAd,
4966 IN USHORT TxPreamble);
4968 VOID UpdateBasicRateBitmap(
4969 IN PRTMP_ADAPTER pAd);
4971 VOID MlmeUpdateTxRates(
4972 IN PRTMP_ADAPTER pAd,
4973 IN BOOLEAN bLinkUp,
4974 IN UCHAR apidx);
4976 #ifdef DOT11_N_SUPPORT
4977 VOID MlmeUpdateHtTxRates(
4978 IN PRTMP_ADAPTER pAd,
4979 IN UCHAR apidx);
4980 #endif // DOT11_N_SUPPORT //
4982 VOID RTMPCheckRates(
4983 IN PRTMP_ADAPTER pAd,
4984 IN OUT UCHAR SupRate[],
4985 IN OUT UCHAR *SupRateLen);
4987 #ifdef CONFIG_STA_SUPPORT
4988 BOOLEAN RTMPCheckChannel(
4989 IN PRTMP_ADAPTER pAd,
4990 IN UCHAR CentralChannel,
4991 IN UCHAR Channel);
4992 #endif // CONFIG_STA_SUPPORT //
4994 BOOLEAN RTMPCheckHt(
4995 IN PRTMP_ADAPTER pAd,
4996 IN UCHAR Wcid,
4997 IN OUT HT_CAPABILITY_IE *pHtCapability,
4998 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5000 VOID StaQuickResponeForRateUpExec(
5001 IN PVOID SystemSpecific1,
5002 IN PVOID FunctionContext,
5003 IN PVOID SystemSpecific2,
5004 IN PVOID SystemSpecific3);
5006 VOID AsicBbpTuning1(
5007 IN PRTMP_ADAPTER pAd);
5009 VOID AsicBbpTuning2(
5010 IN PRTMP_ADAPTER pAd);
5012 VOID RTMPUpdateMlmeRate(
5013 IN PRTMP_ADAPTER pAd);
5015 CHAR RTMPMaxRssi(
5016 IN PRTMP_ADAPTER pAd,
5017 IN CHAR Rssi0,
5018 IN CHAR Rssi1,
5019 IN CHAR Rssi2);
5021 VOID AsicEvaluateRxAnt(
5022 IN PRTMP_ADAPTER pAd);
5024 VOID AsicRxAntEvalTimeout(
5025 IN PVOID SystemSpecific1,
5026 IN PVOID FunctionContext,
5027 IN PVOID SystemSpecific2,
5028 IN PVOID SystemSpecific3);
5030 VOID APSDPeriodicExec(
5031 IN PVOID SystemSpecific1,
5032 IN PVOID FunctionContext,
5033 IN PVOID SystemSpecific2,
5034 IN PVOID SystemSpecific3);
5036 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5037 IN PRTMP_ADAPTER pAd,
5038 IN PMAC_TABLE_ENTRY pEntry);
5040 UCHAR RTMPStaFixedTxMode(
5041 IN PRTMP_ADAPTER pAd,
5042 IN PMAC_TABLE_ENTRY pEntry);
5044 VOID RTMPUpdateLegacyTxSetting(
5045 UCHAR fixed_tx_mode,
5046 PMAC_TABLE_ENTRY pEntry);
5048 BOOLEAN RTMPAutoRateSwitchCheck(
5049 IN PRTMP_ADAPTER pAd);
5051 NDIS_STATUS MlmeInit(
5052 IN PRTMP_ADAPTER pAd);
5054 VOID MlmeHandler(
5055 IN PRTMP_ADAPTER pAd);
5057 VOID MlmeHalt(
5058 IN PRTMP_ADAPTER pAd);
5060 VOID MlmeResetRalinkCounters(
5061 IN PRTMP_ADAPTER pAd);
5063 VOID BuildChannelList(
5064 IN PRTMP_ADAPTER pAd);
5066 UCHAR FirstChannel(
5067 IN PRTMP_ADAPTER pAd);
5069 UCHAR NextChannel(
5070 IN PRTMP_ADAPTER pAd,
5071 IN UCHAR channel);
5073 VOID ChangeToCellPowerLimit(
5074 IN PRTMP_ADAPTER pAd,
5075 IN UCHAR AironetCellPowerLimit);
5077 VOID RaiseClock(
5078 IN PRTMP_ADAPTER pAd,
5079 IN UINT32 *x);
5081 VOID LowerClock(
5082 IN PRTMP_ADAPTER pAd,
5083 IN UINT32 *x);
5085 USHORT ShiftInBits(
5086 IN PRTMP_ADAPTER pAd);
5088 VOID ShiftOutBits(
5089 IN PRTMP_ADAPTER pAd,
5090 IN USHORT data,
5091 IN USHORT count);
5093 VOID EEpromCleanup(
5094 IN PRTMP_ADAPTER pAd);
5096 VOID EWDS(
5097 IN PRTMP_ADAPTER pAd);
5099 VOID EWEN(
5100 IN PRTMP_ADAPTER pAd);
5102 USHORT RTMP_EEPROM_READ16(
5103 IN PRTMP_ADAPTER pAd,
5104 IN USHORT Offset);
5106 VOID RTMP_EEPROM_WRITE16(
5107 IN PRTMP_ADAPTER pAd,
5108 IN USHORT Offset,
5109 IN USHORT Data);
5112 // Prototypes of function definition in rtmp_tkip.c
5114 VOID RTMPInitTkipEngine(
5115 IN PRTMP_ADAPTER pAd,
5116 IN PUCHAR pTKey,
5117 IN UCHAR KeyId,
5118 IN PUCHAR pTA,
5119 IN PUCHAR pMICKey,
5120 IN PUCHAR pTSC,
5121 OUT PULONG pIV16,
5122 OUT PULONG pIV32);
5124 VOID RTMPInitMICEngine(
5125 IN PRTMP_ADAPTER pAd,
5126 IN PUCHAR pKey,
5127 IN PUCHAR pDA,
5128 IN PUCHAR pSA,
5129 IN UCHAR UserPriority,
5130 IN PUCHAR pMICKey);
5132 BOOLEAN RTMPTkipCompareMICValue(
5133 IN PRTMP_ADAPTER pAd,
5134 IN PUCHAR pSrc,
5135 IN PUCHAR pDA,
5136 IN PUCHAR pSA,
5137 IN PUCHAR pMICKey,
5138 IN UCHAR UserPriority,
5139 IN UINT Len);
5141 VOID RTMPCalculateMICValue(
5142 IN PRTMP_ADAPTER pAd,
5143 IN PNDIS_PACKET pPacket,
5144 IN PUCHAR pEncap,
5145 IN PCIPHER_KEY pKey,
5146 IN UCHAR apidx);
5148 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5149 IN PRTMP_ADAPTER pAd,
5150 IN PUCHAR pLLC,
5151 IN PUCHAR pSrc,
5152 IN PUCHAR pDA,
5153 IN PUCHAR pSA,
5154 IN PUCHAR pMICKey,
5155 IN UINT Len);
5157 VOID RTMPTkipAppendByte(
5158 IN PTKIP_KEY_INFO pTkip,
5159 IN UCHAR uChar);
5161 VOID RTMPTkipAppend(
5162 IN PTKIP_KEY_INFO pTkip,
5163 IN PUCHAR pSrc,
5164 IN UINT nBytes);
5166 VOID RTMPTkipGetMIC(
5167 IN PTKIP_KEY_INFO pTkip);
5169 BOOLEAN RTMPSoftDecryptTKIP(
5170 IN PRTMP_ADAPTER pAd,
5171 IN PUCHAR pData,
5172 IN ULONG DataByteCnt,
5173 IN UCHAR UserPriority,
5174 IN PCIPHER_KEY pWpaKey);
5176 BOOLEAN RTMPSoftDecryptAES(
5177 IN PRTMP_ADAPTER pAd,
5178 IN PUCHAR pData,
5179 IN ULONG DataByteCnt,
5180 IN PCIPHER_KEY pWpaKey);
5182 #if 0 // removed by AlbertY
5183 NDIS_STATUS RTMPWPAAddKeyProc(
5184 IN PRTMP_ADAPTER pAd,
5185 IN PVOID pBuf);
5186 #endif
5189 // Prototypes of function definition in cmm_info.c
5191 NDIS_STATUS RTMPWPARemoveKeyProc(
5192 IN PRTMP_ADAPTER pAd,
5193 IN PVOID pBuf);
5195 VOID RTMPWPARemoveAllKeys(
5196 IN PRTMP_ADAPTER pAd);
5198 BOOLEAN RTMPCheckStrPrintAble(
5199 IN CHAR *pInPutStr,
5200 IN UCHAR strLen);
5202 VOID RTMPSetPhyMode(
5203 IN PRTMP_ADAPTER pAd,
5204 IN ULONG phymode);
5206 VOID RTMPUpdateHTIE(
5207 IN RT_HT_CAPABILITY *pRtHt,
5208 IN UCHAR *pMcsSet,
5209 OUT HT_CAPABILITY_IE *pHtCapability,
5210 OUT ADD_HT_INFO_IE *pAddHtInfo);
5212 VOID RTMPAddWcidAttributeEntry(
5213 IN PRTMP_ADAPTER pAd,
5214 IN UCHAR BssIdx,
5215 IN UCHAR KeyIdx,
5216 IN UCHAR CipherAlg,
5217 IN MAC_TABLE_ENTRY *pEntry);
5219 CHAR *GetEncryptType(
5220 CHAR enc);
5222 CHAR *GetAuthMode(
5223 CHAR auth);
5225 VOID RTMPIoctlGetSiteSurvey(
5226 IN PRTMP_ADAPTER pAdapter,
5227 IN struct iwreq *wrq);
5229 VOID RTMPIoctlGetMacTable(
5230 IN PRTMP_ADAPTER pAd,
5231 IN struct iwreq *wrq);
5233 VOID RTMPIndicateWPA2Status(
5234 IN PRTMP_ADAPTER pAdapter);
5236 VOID RTMPOPModeSwitching(
5237 IN PRTMP_ADAPTER pAd);
5239 #ifdef CONFIG_STA_SUPPORT
5240 VOID RTMPAddBSSIDCipher(
5241 IN PRTMP_ADAPTER pAd,
5242 IN UCHAR Aid,
5243 IN PNDIS_802_11_KEY pKey,
5244 IN UCHAR CipherAlg);
5245 #endif // CONFIG_STA_SUPPORT //
5247 #ifdef DOT11_N_SUPPORT
5248 VOID RTMPSetHT(
5249 IN PRTMP_ADAPTER pAd,
5250 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5252 VOID RTMPSetIndividualHT(
5253 IN PRTMP_ADAPTER pAd,
5254 IN UCHAR apidx);
5255 #endif // DOT11_N_SUPPORT //
5257 VOID RTMPSendWirelessEvent(
5258 IN PRTMP_ADAPTER pAd,
5259 IN USHORT Event_flag,
5260 IN PUCHAR pAddr,
5261 IN UCHAR BssIdx,
5262 IN CHAR Rssi);
5264 VOID NICUpdateCntlCounters(
5265 IN PRTMP_ADAPTER pAd,
5266 IN PHEADER_802_11 pHeader,
5267 IN UCHAR SubType,
5268 IN PRXWI_STRUC pRxWI);
5270 // prototype in wpa.c
5272 BOOLEAN WpaMsgTypeSubst(
5273 IN UCHAR EAPType,
5274 OUT INT *MsgType);
5276 VOID WpaPskStateMachineInit(
5277 IN PRTMP_ADAPTER pAd,
5278 IN STATE_MACHINE *S,
5279 OUT STATE_MACHINE_FUNC Trans[]);
5281 VOID WpaEAPOLKeyAction(
5282 IN PRTMP_ADAPTER pAd,
5283 IN MLME_QUEUE_ELEM *Elem);
5285 VOID WpaPairMsg1Action(
5286 IN PRTMP_ADAPTER pAd,
5287 IN MLME_QUEUE_ELEM *Elem);
5289 VOID WpaPairMsg3Action(
5290 IN PRTMP_ADAPTER pAd,
5291 IN MLME_QUEUE_ELEM *Elem);
5293 VOID WpaGroupMsg1Action(
5294 IN PRTMP_ADAPTER pAd,
5295 IN MLME_QUEUE_ELEM *Elem);
5297 VOID WpaMacHeaderInit(
5298 IN PRTMP_ADAPTER pAd,
5299 IN OUT PHEADER_802_11 pHdr80211,
5300 IN UCHAR wep,
5301 IN PUCHAR pAddr1);
5303 VOID Wpa2PairMsg1Action(
5304 IN PRTMP_ADAPTER pAd,
5305 IN MLME_QUEUE_ELEM *Elem);
5307 VOID Wpa2PairMsg3Action(
5308 IN PRTMP_ADAPTER pAd,
5309 IN MLME_QUEUE_ELEM *Elem);
5311 BOOLEAN ParseKeyData(
5312 IN PRTMP_ADAPTER pAd,
5313 IN PUCHAR pKeyData,
5314 IN UCHAR KeyDataLen,
5315 IN UCHAR bPairewise);
5317 VOID RTMPToWirelessSta(
5318 IN PRTMP_ADAPTER pAd,
5319 IN PUCHAR pHeader802_3,
5320 IN UINT HdrLen,
5321 IN PUCHAR pData,
5322 IN UINT DataLen,
5323 IN BOOLEAN is4wayFrame);
5325 VOID HMAC_SHA1(
5326 IN UCHAR *text,
5327 IN UINT text_len,
5328 IN UCHAR *key,
5329 IN UINT key_len,
5330 IN UCHAR *digest);
5332 VOID PRF(
5333 IN UCHAR *key,
5334 IN INT key_len,
5335 IN UCHAR *prefix,
5336 IN INT prefix_len,
5337 IN UCHAR *data,
5338 IN INT data_len,
5339 OUT UCHAR *output,
5340 IN INT len);
5342 VOID CCKMPRF(
5343 IN UCHAR *key,
5344 IN INT key_len,
5345 IN UCHAR *data,
5346 IN INT data_len,
5347 OUT UCHAR *output,
5348 IN INT len);
5350 VOID WpaCountPTK(
5351 IN PRTMP_ADAPTER pAd,
5352 IN UCHAR *PMK,
5353 IN UCHAR *ANonce,
5354 IN UCHAR *AA,
5355 IN UCHAR *SNonce,
5356 IN UCHAR *SA,
5357 OUT UCHAR *output,
5358 IN UINT len);
5360 VOID GenRandom(
5361 IN PRTMP_ADAPTER pAd,
5362 IN UCHAR *macAddr,
5363 OUT UCHAR *random);
5366 // prototype in aironet.c
5368 VOID AironetStateMachineInit(
5369 IN PRTMP_ADAPTER pAd,
5370 IN STATE_MACHINE *S,
5371 OUT STATE_MACHINE_FUNC Trans[]);
5373 VOID AironetMsgAction(
5374 IN PRTMP_ADAPTER pAd,
5375 IN MLME_QUEUE_ELEM *Elem);
5377 VOID AironetRequestAction(
5378 IN PRTMP_ADAPTER pAd,
5379 IN MLME_QUEUE_ELEM *Elem);
5381 VOID ChannelLoadRequestAction(
5382 IN PRTMP_ADAPTER pAd,
5383 IN UCHAR Index);
5385 VOID NoiseHistRequestAction(
5386 IN PRTMP_ADAPTER pAd,
5387 IN UCHAR Index);
5389 VOID BeaconRequestAction(
5390 IN PRTMP_ADAPTER pAd,
5391 IN UCHAR Index);
5393 VOID AironetReportAction(
5394 IN PRTMP_ADAPTER pAd,
5395 IN MLME_QUEUE_ELEM *Elem);
5397 VOID ChannelLoadReportAction(
5398 IN PRTMP_ADAPTER pAd,
5399 IN UCHAR Index);
5401 VOID NoiseHistReportAction(
5402 IN PRTMP_ADAPTER pAd,
5403 IN UCHAR Index);
5405 VOID AironetFinalReportAction(
5406 IN PRTMP_ADAPTER pAd);
5408 VOID BeaconReportAction(
5409 IN PRTMP_ADAPTER pAd,
5410 IN UCHAR Index);
5412 VOID AironetAddBeaconReport(
5413 IN PRTMP_ADAPTER pAd,
5414 IN ULONG Index,
5415 IN PMLME_QUEUE_ELEM pElem);
5417 VOID AironetCreateBeaconReportFromBssTable(
5418 IN PRTMP_ADAPTER pAd);
5420 VOID DBGPRINT_TX_RING(
5421 IN PRTMP_ADAPTER pAd,
5422 IN UCHAR QueIdx);
5424 VOID DBGPRINT_RX_RING(
5425 IN PRTMP_ADAPTER pAd);
5427 CHAR ConvertToRssi(
5428 IN PRTMP_ADAPTER pAd,
5429 IN CHAR Rssi,
5430 IN UCHAR RssiNumber);
5432 VOID APAsicEvaluateRxAnt(
5433 IN PRTMP_ADAPTER pAd);
5436 VOID APAsicRxAntEvalTimeout(
5437 IN PRTMP_ADAPTER pAd);
5440 // function prototype in cmm_wpa.c
5442 BOOLEAN RTMPCheckWPAframe(
5443 IN PRTMP_ADAPTER pAd,
5444 IN PMAC_TABLE_ENTRY pEntry,
5445 IN PUCHAR pData,
5446 IN ULONG DataByteCount,
5447 IN UCHAR FromWhichBSSID);
5449 VOID AES_GTK_KEY_UNWRAP(
5450 IN UCHAR *key,
5451 OUT UCHAR *plaintext,
5452 IN UCHAR c_len,
5453 IN UCHAR *ciphertext);
5455 BOOLEAN RTMPCheckRSNIE(
5456 IN PRTMP_ADAPTER pAd,
5457 IN PUCHAR pData,
5458 IN UCHAR DataLen,
5459 IN MAC_TABLE_ENTRY *pEntry,
5460 OUT UCHAR *Offset);
5462 BOOLEAN RTMPParseEapolKeyData(
5463 IN PRTMP_ADAPTER pAd,
5464 IN PUCHAR pKeyData,
5465 IN UCHAR KeyDataLen,
5466 IN UCHAR GroupKeyIndex,
5467 IN UCHAR MsgType,
5468 IN BOOLEAN bWPA2,
5469 IN MAC_TABLE_ENTRY *pEntry);
5471 VOID ConstructEapolMsg(
5472 IN PRTMP_ADAPTER pAd,
5473 IN UCHAR PeerAuthMode,
5474 IN UCHAR PeerWepStatus,
5475 IN UCHAR MyGroupKeyWepStatus,
5476 IN UCHAR MsgType,
5477 IN UCHAR DefaultKeyIdx,
5478 IN UCHAR *ReplayCounter,
5479 IN UCHAR *KeyNonce,
5480 IN UCHAR *TxRSC,
5481 IN UCHAR *PTK,
5482 IN UCHAR *GTK,
5483 IN UCHAR *RSNIE,
5484 IN UCHAR RSNIE_Len,
5485 OUT PEAPOL_PACKET pMsg);
5487 VOID CalculateMIC(
5488 IN PRTMP_ADAPTER pAd,
5489 IN UCHAR PeerWepStatus,
5490 IN UCHAR *PTK,
5491 OUT PEAPOL_PACKET pMsg);
5493 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5494 IN PRTMP_ADAPTER pAd,
5495 IN RX_BLK *pRxBlk,
5496 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5497 IN PCIPHER_KEY pShard_key);
5499 VOID ConstructEapolKeyData(
5500 IN PRTMP_ADAPTER pAd,
5501 IN UCHAR PeerAuthMode,
5502 IN UCHAR PeerWepStatus,
5503 IN UCHAR GroupKeyWepStatus,
5504 IN UCHAR MsgType,
5505 IN UCHAR DefaultKeyIdx,
5506 IN BOOLEAN bWPA2Capable,
5507 IN UCHAR *PTK,
5508 IN UCHAR *GTK,
5509 IN UCHAR *RSNIE,
5510 IN UCHAR RSNIE_LEN,
5511 OUT PEAPOL_PACKET pMsg);
5513 VOID RTMPMakeRSNIE(
5514 IN PRTMP_ADAPTER pAd,
5515 IN UINT AuthMode,
5516 IN UINT WepStatus,
5517 IN UCHAR apidx);
5520 // function prototype in ap_wpa.c
5523 BOOLEAN APWpaMsgTypeSubst(
5524 IN UCHAR EAPType,
5525 OUT INT *MsgType) ;
5527 MAC_TABLE_ENTRY *PACInquiry(
5528 IN PRTMP_ADAPTER pAd,
5529 IN ULONG Wcid);
5531 BOOLEAN RTMPCheckMcast(
5532 IN PRTMP_ADAPTER pAd,
5533 IN PEID_STRUCT eid_ptr,
5534 IN MAC_TABLE_ENTRY *pEntry);
5536 BOOLEAN RTMPCheckUcast(
5537 IN PRTMP_ADAPTER pAd,
5538 IN PEID_STRUCT eid_ptr,
5539 IN MAC_TABLE_ENTRY *pEntry);
5541 BOOLEAN RTMPCheckAUTH(
5542 IN PRTMP_ADAPTER pAd,
5543 IN PEID_STRUCT eid_ptr,
5544 IN MAC_TABLE_ENTRY *pEntry);
5546 VOID WPAStart4WayHS(
5547 IN PRTMP_ADAPTER pAd,
5548 IN MAC_TABLE_ENTRY *pEntry,
5549 IN ULONG TimeInterval);
5551 VOID WPAStart2WayGroupHS(
5552 IN PRTMP_ADAPTER pAd,
5553 IN MAC_TABLE_ENTRY *pEntry);
5555 VOID APWpaEAPPacketAction(
5556 IN PRTMP_ADAPTER pAd,
5557 IN MLME_QUEUE_ELEM *Elem);
5559 VOID APWpaEAPOLStartAction(
5560 IN PRTMP_ADAPTER pAd,
5561 IN MLME_QUEUE_ELEM *Elem);
5563 VOID APWpaEAPOLLogoffAction(
5564 IN PRTMP_ADAPTER pAd,
5565 IN MLME_QUEUE_ELEM *Elem);
5567 VOID APWpaEAPOLKeyAction(
5568 IN PRTMP_ADAPTER pAd,
5569 IN MLME_QUEUE_ELEM *Elem);
5571 VOID APWpaEAPOLASFAlertAction(
5572 IN PRTMP_ADAPTER pAd,
5573 IN MLME_QUEUE_ELEM *Elem);
5575 VOID HandleCounterMeasure(
5576 IN PRTMP_ADAPTER pAd,
5577 IN MAC_TABLE_ENTRY *pEntry);
5579 VOID PeerPairMsg2Action(
5580 IN PRTMP_ADAPTER pAd,
5581 IN MAC_TABLE_ENTRY *pEntry,
5582 IN MLME_QUEUE_ELEM *Elem);
5584 VOID PeerPairMsg4Action(
5585 IN PRTMP_ADAPTER pAd,
5586 IN MAC_TABLE_ENTRY *pEntry,
5587 IN MLME_QUEUE_ELEM *Elem);
5589 VOID CMTimerExec(
5590 IN PVOID SystemSpecific1,
5591 IN PVOID FunctionContext,
5592 IN PVOID SystemSpecific2,
5593 IN PVOID SystemSpecific3);
5595 VOID WPARetryExec(
5596 IN PVOID SystemSpecific1,
5597 IN PVOID FunctionContext,
5598 IN PVOID SystemSpecific2,
5599 IN PVOID SystemSpecific3);
5601 VOID EnqueueStartForPSKExec(
5602 IN PVOID SystemSpecific1,
5603 IN PVOID FunctionContext,
5604 IN PVOID SystemSpecific2,
5605 IN PVOID SystemSpecific3);
5607 VOID RTMPHandleSTAKey(
5608 IN PRTMP_ADAPTER pAdapter,
5609 IN MAC_TABLE_ENTRY *pEntry,
5610 IN MLME_QUEUE_ELEM *Elem);
5612 #if 0 // merge into PeerPairMsg4Action
5613 VOID Wpa1PeerPairMsg4Action(
5614 IN PRTMP_ADAPTER pAd,
5615 IN MAC_TABLE_ENTRY *pEntry,
5616 IN MLME_QUEUE_ELEM *Elem);
5618 VOID Wpa2PeerPairMsg4Action(
5619 IN PRTMP_ADAPTER pAd,
5620 IN PMAC_TABLE_ENTRY pEntry,
5621 IN MLME_QUEUE_ELEM *Elem);
5622 #endif // 0 //
5624 VOID PeerGroupMsg2Action(
5625 IN PRTMP_ADAPTER pAd,
5626 IN PMAC_TABLE_ENTRY pEntry,
5627 IN VOID *Msg,
5628 IN UINT MsgLen);
5630 #if 0 // replaced by WPAStart2WayGroupHS
5631 NDIS_STATUS APWpaHardTransmit(
5632 IN PRTMP_ADAPTER pAd,
5633 IN PMAC_TABLE_ENTRY pEntry);
5634 #endif // 0 //
5636 VOID PairDisAssocAction(
5637 IN PRTMP_ADAPTER pAd,
5638 IN PMAC_TABLE_ENTRY pEntry,
5639 IN USHORT Reason);
5641 VOID MlmeDeAuthAction(
5642 IN PRTMP_ADAPTER pAd,
5643 IN PMAC_TABLE_ENTRY pEntry,
5644 IN USHORT Reason);
5646 VOID GREKEYPeriodicExec(
5647 IN PVOID SystemSpecific1,
5648 IN PVOID FunctionContext,
5649 IN PVOID SystemSpecific2,
5650 IN PVOID SystemSpecific3);
5652 VOID CountGTK(
5653 IN UCHAR *PMK,
5654 IN UCHAR *GNonce,
5655 IN UCHAR *AA,
5656 OUT UCHAR *output,
5657 IN UINT len);
5659 VOID GetSmall(
5660 IN PVOID pSrc1,
5661 IN PVOID pSrc2,
5662 OUT PUCHAR out,
5663 IN ULONG Length);
5665 VOID GetLarge(
5666 IN PVOID pSrc1,
5667 IN PVOID pSrc2,
5668 OUT PUCHAR out,
5669 IN ULONG Length);
5671 VOID APGenRandom(
5672 IN PRTMP_ADAPTER pAd,
5673 OUT UCHAR *random);
5675 VOID AES_GTK_KEY_WRAP(
5676 IN UCHAR *key,
5677 IN UCHAR *plaintext,
5678 IN UCHAR p_len,
5679 OUT UCHAR *ciphertext);
5681 VOID WpaSend(
5682 IN PRTMP_ADAPTER pAdapter,
5683 IN PUCHAR pPacket,
5684 IN ULONG Len);
5686 VOID APToWirelessSta(
5687 IN PRTMP_ADAPTER pAd,
5688 IN MAC_TABLE_ENTRY *pEntry,
5689 IN PUCHAR pHeader802_3,
5690 IN UINT HdrLen,
5691 IN PUCHAR pData,
5692 IN UINT DataLen,
5693 IN BOOLEAN bClearFrame);
5695 VOID RTMPAddPMKIDCache(
5696 IN PRTMP_ADAPTER pAd,
5697 IN INT apidx,
5698 IN PUCHAR pAddr,
5699 IN UCHAR *PMKID,
5700 IN UCHAR *PMK);
5702 INT RTMPSearchPMKIDCache(
5703 IN PRTMP_ADAPTER pAd,
5704 IN INT apidx,
5705 IN PUCHAR pAddr);
5707 VOID RTMPDeletePMKIDCache(
5708 IN PRTMP_ADAPTER pAd,
5709 IN INT apidx,
5710 IN INT idx);
5712 VOID RTMPMaintainPMKIDCache(
5713 IN PRTMP_ADAPTER pAd);
5715 VOID RTMPSendTriggerFrame(
5716 IN PRTMP_ADAPTER pAd,
5717 IN PVOID pBuffer,
5718 IN ULONG Length,
5719 IN UCHAR TxRate,
5720 IN BOOLEAN bQosNull);
5723 //typedef void (*TIMER_FUNCTION)(unsigned long);
5726 /* timeout -- ms */
5727 VOID RTMP_SetPeriodicTimer(
5728 IN NDIS_MINIPORT_TIMER *pTimer,
5729 IN unsigned long timeout);
5731 VOID RTMP_OS_Init_Timer(
5732 IN PRTMP_ADAPTER pAd,
5733 IN NDIS_MINIPORT_TIMER *pTimer,
5734 IN TIMER_FUNCTION function,
5735 IN PVOID data);
5737 VOID RTMP_OS_Add_Timer(
5738 IN NDIS_MINIPORT_TIMER *pTimer,
5739 IN unsigned long timeout);
5741 VOID RTMP_OS_Mod_Timer(
5742 IN NDIS_MINIPORT_TIMER *pTimer,
5743 IN unsigned long timeout);
5746 VOID RTMP_OS_Del_Timer(
5747 IN NDIS_MINIPORT_TIMER *pTimer,
5748 OUT BOOLEAN *pCancelled);
5751 VOID RTMP_OS_Release_Packet(
5752 IN PRTMP_ADAPTER pAd,
5753 IN PQUEUE_ENTRY pEntry);
5755 VOID RTMPusecDelay(
5756 IN ULONG usec);
5758 NDIS_STATUS os_alloc_mem(
5759 IN PRTMP_ADAPTER pAd,
5760 OUT PUCHAR *mem,
5761 IN ULONG size);
5763 NDIS_STATUS os_free_mem(
5764 IN PRTMP_ADAPTER pAd,
5765 IN PUCHAR mem);
5768 void RTMP_AllocateSharedMemory(
5769 IN PRTMP_ADAPTER pAd,
5770 IN ULONG Length,
5771 IN BOOLEAN Cached,
5772 OUT PVOID *VirtualAddress,
5773 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5775 VOID RTMPFreeTxRxRingMemory(
5776 IN PRTMP_ADAPTER pAd);
5778 NDIS_STATUS AdapterBlockAllocateMemory(
5779 IN PVOID handle,
5780 OUT PVOID *ppAd);
5782 void RTMP_AllocateTxDescMemory(
5783 IN PRTMP_ADAPTER pAd,
5784 IN UINT Index,
5785 IN ULONG Length,
5786 IN BOOLEAN Cached,
5787 OUT PVOID *VirtualAddress,
5788 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5790 void RTMP_AllocateFirstTxBuffer(
5791 IN PRTMP_ADAPTER pAd,
5792 IN UINT Index,
5793 IN ULONG Length,
5794 IN BOOLEAN Cached,
5795 OUT PVOID *VirtualAddress,
5796 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5798 void RTMP_AllocateMgmtDescMemory(
5799 IN PRTMP_ADAPTER pAd,
5800 IN ULONG Length,
5801 IN BOOLEAN Cached,
5802 OUT PVOID *VirtualAddress,
5803 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5805 void RTMP_AllocateRxDescMemory(
5806 IN PRTMP_ADAPTER pAd,
5807 IN ULONG Length,
5808 IN BOOLEAN Cached,
5809 OUT PVOID *VirtualAddress,
5810 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5812 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5813 IN PRTMP_ADAPTER pAd,
5814 IN ULONG Length,
5815 IN BOOLEAN Cached,
5816 OUT PVOID *VirtualAddress,
5817 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5819 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5820 IN PRTMP_ADAPTER pAd,
5821 IN ULONG Length,
5822 IN BOOLEAN Cached,
5823 OUT PVOID *VirtualAddress);
5825 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5826 IN PRTMP_ADAPTER pAd,
5827 IN ULONG Length);
5829 void RTMP_QueryPacketInfo(
5830 IN PNDIS_PACKET pPacket,
5831 OUT PACKET_INFO *pPacketInfo,
5832 OUT PUCHAR *pSrcBufVA,
5833 OUT UINT *pSrcBufLen);
5835 void RTMP_QueryNextPacketInfo(
5836 IN PNDIS_PACKET *ppPacket,
5837 OUT PACKET_INFO *pPacketInfo,
5838 OUT PUCHAR *pSrcBufVA,
5839 OUT UINT *pSrcBufLen);
5842 BOOLEAN RTMP_FillTxBlkInfo(
5843 IN RTMP_ADAPTER *pAd,
5844 IN TX_BLK *pTxBlk);
5847 PRTMP_SCATTER_GATHER_LIST
5848 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5851 void announce_802_3_packet(
5852 IN PRTMP_ADAPTER pAd,
5853 IN PNDIS_PACKET pPacket);
5856 UINT BA_Reorder_AMSDU_Annnounce(
5857 IN PRTMP_ADAPTER pAd,
5858 IN PNDIS_PACKET pPacket);
5861 UINT Handle_AMSDU_Packet(
5862 IN PRTMP_ADAPTER pAd,
5863 IN PUCHAR pData,
5864 IN ULONG DataSize,
5865 IN UCHAR FromWhichBSSID);
5868 void convert_802_11_to_802_3_packet(
5869 IN PRTMP_ADAPTER pAd,
5870 IN PNDIS_PACKET pPacket,
5871 IN PUCHAR p8023hdr,
5872 IN PUCHAR pData,
5873 IN ULONG DataSize,
5874 IN UCHAR FromWhichBSSID);
5877 PNET_DEV get_netdev_from_bssid(
5878 IN PRTMP_ADAPTER pAd,
5879 IN UCHAR FromWhichBSSID);
5882 PNDIS_PACKET duplicate_pkt(
5883 IN PRTMP_ADAPTER pAd,
5884 IN PUCHAR pHeader802_3,
5885 IN UINT HdrLen,
5886 IN PUCHAR pData,
5887 IN ULONG DataSize,
5888 IN UCHAR FromWhichBSSID);
5891 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5892 IN PRTMP_ADAPTER pAd,
5893 IN PNDIS_PACKET pOldPkt);
5895 PNDIS_PACKET duplicate_pkt_with_VLAN(
5896 IN PRTMP_ADAPTER pAd,
5897 IN PUCHAR pHeader802_3,
5898 IN UINT HdrLen,
5899 IN PUCHAR pData,
5900 IN ULONG DataSize,
5901 IN UCHAR FromWhichBSSID);
5903 PNDIS_PACKET duplicate_pkt_with_WPI(
5904 IN PRTMP_ADAPTER pAd,
5905 IN PNDIS_PACKET pPacket,
5906 IN UINT32 ext_head_len,
5907 IN UINT32 ext_tail_len);
5909 UCHAR VLAN_8023_Header_Copy(
5910 IN PRTMP_ADAPTER pAd,
5911 IN PUCHAR pHeader802_3,
5912 IN UINT HdrLen,
5913 OUT PUCHAR pData,
5914 IN UCHAR FromWhichBSSID);
5916 #ifdef DOT11_N_SUPPORT
5917 void ba_flush_reordering_timeout_mpdus(
5918 IN PRTMP_ADAPTER pAd,
5919 IN PBA_REC_ENTRY pBAEntry,
5920 IN ULONG Now32);
5923 VOID BAOriSessionSetUp(
5924 IN PRTMP_ADAPTER pAd,
5925 IN MAC_TABLE_ENTRY *pEntry,
5926 IN UCHAR TID,
5927 IN USHORT TimeOut,
5928 IN ULONG DelayTime,
5929 IN BOOLEAN isForced);
5931 VOID BASessionTearDownALL(
5932 IN OUT PRTMP_ADAPTER pAd,
5933 IN UCHAR Wcid);
5934 #endif // DOT11_N_SUPPORT //
5936 BOOLEAN OS_Need_Clone_Packet(void);
5939 VOID build_tx_packet(
5940 IN PRTMP_ADAPTER pAd,
5941 IN PNDIS_PACKET pPacket,
5942 IN PUCHAR pFrame,
5943 IN ULONG FrameLen);
5946 VOID BAOriSessionTearDown(
5947 IN OUT PRTMP_ADAPTER pAd,
5948 IN UCHAR Wcid,
5949 IN UCHAR TID,
5950 IN BOOLEAN bPassive,
5951 IN BOOLEAN bForceSend);
5953 VOID BARecSessionTearDown(
5954 IN OUT PRTMP_ADAPTER pAd,
5955 IN UCHAR Wcid,
5956 IN UCHAR TID,
5957 IN BOOLEAN bPassive);
5959 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5960 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5962 ULONG AutoChBssInsertEntry(
5963 IN PRTMP_ADAPTER pAd,
5964 IN PUCHAR pBssid,
5965 IN CHAR Ssid[],
5966 IN UCHAR SsidLen,
5967 IN UCHAR ChannelNo,
5968 IN CHAR Rssi);
5970 void AutoChBssTableInit(
5971 IN PRTMP_ADAPTER pAd);
5973 void ChannelInfoInit(
5974 IN PRTMP_ADAPTER pAd);
5976 void AutoChBssTableDestroy(
5977 IN PRTMP_ADAPTER pAd);
5979 void ChannelInfoDestroy(
5980 IN PRTMP_ADAPTER pAd);
5982 UCHAR New_ApAutoSelectChannel(
5983 IN PRTMP_ADAPTER pAd);
5985 BOOLEAN rtstrmactohex(
5986 IN char *s1,
5987 IN char *s2);
5989 BOOLEAN rtstrcasecmp(
5990 IN char *s1,
5991 IN char *s2);
5993 char *rtstrstruncasecmp(
5994 IN char *s1,
5995 IN char *s2);
5997 char *rtstrstr(
5998 IN const char * s1,
5999 IN const char * s2);
6001 char *rstrtok(
6002 IN char * s,
6003 IN const char * ct);
6005 int rtinet_aton(
6006 const char *cp,
6007 unsigned int *addr);
6009 ////////// common ioctl functions //////////
6010 INT Set_DriverVersion_Proc(
6011 IN PRTMP_ADAPTER pAd,
6012 IN PUCHAR arg);
6014 INT Set_CountryRegion_Proc(
6015 IN PRTMP_ADAPTER pAd,
6016 IN PUCHAR arg);
6018 INT Set_CountryRegionABand_Proc(
6019 IN PRTMP_ADAPTER pAd,
6020 IN PUCHAR arg);
6022 INT Set_WirelessMode_Proc(
6023 IN PRTMP_ADAPTER pAd,
6024 IN PUCHAR arg);
6026 INT Set_Channel_Proc(
6027 IN PRTMP_ADAPTER pAd,
6028 IN PUCHAR arg);
6030 INT Set_ShortSlot_Proc(
6031 IN PRTMP_ADAPTER pAd,
6032 IN PUCHAR arg);
6034 INT Set_TxPower_Proc(
6035 IN PRTMP_ADAPTER pAd,
6036 IN PUCHAR arg);
6038 INT Set_BGProtection_Proc(
6039 IN PRTMP_ADAPTER pAd,
6040 IN PUCHAR arg);
6042 INT Set_TxPreamble_Proc(
6043 IN PRTMP_ADAPTER pAd,
6044 IN PUCHAR arg);
6046 INT Set_RTSThreshold_Proc(
6047 IN PRTMP_ADAPTER pAd,
6048 IN PUCHAR arg);
6050 INT Set_FragThreshold_Proc(
6051 IN PRTMP_ADAPTER pAd,
6052 IN PUCHAR arg);
6054 INT Set_TxBurst_Proc(
6055 IN PRTMP_ADAPTER pAd,
6056 IN PUCHAR arg);
6058 #ifdef AGGREGATION_SUPPORT
6059 INT Set_PktAggregate_Proc(
6060 IN PRTMP_ADAPTER pAd,
6061 IN PUCHAR arg);
6062 #endif
6064 INT Set_IEEE80211H_Proc(
6065 IN PRTMP_ADAPTER pAd,
6066 IN PUCHAR arg);
6068 #ifdef DBG
6069 INT Set_Debug_Proc(
6070 IN PRTMP_ADAPTER pAd,
6071 IN PUCHAR arg);
6072 #endif
6074 INT Show_DescInfo_Proc(
6075 IN PRTMP_ADAPTER pAd,
6076 IN PUCHAR arg);
6078 INT Set_ResetStatCounter_Proc(
6079 IN PRTMP_ADAPTER pAd,
6080 IN PUCHAR arg);
6082 #ifdef DOT11_N_SUPPORT
6083 INT Set_BASetup_Proc(
6084 IN PRTMP_ADAPTER pAd,
6085 IN PUCHAR arg);
6087 INT Set_BADecline_Proc(
6088 IN PRTMP_ADAPTER pAd,
6089 IN PUCHAR arg);
6091 INT Set_BAOriTearDown_Proc(
6092 IN PRTMP_ADAPTER pAd,
6093 IN PUCHAR arg);
6095 INT Set_BARecTearDown_Proc(
6096 IN PRTMP_ADAPTER pAd,
6097 IN PUCHAR arg);
6099 INT Set_HtBw_Proc(
6100 IN PRTMP_ADAPTER pAd,
6101 IN PUCHAR arg);
6103 INT Set_HtMcs_Proc(
6104 IN PRTMP_ADAPTER pAd,
6105 IN PUCHAR arg);
6107 INT Set_HtGi_Proc(
6108 IN PRTMP_ADAPTER pAd,
6109 IN PUCHAR arg);
6111 INT Set_HtOpMode_Proc(
6112 IN PRTMP_ADAPTER pAd,
6113 IN PUCHAR arg);
6115 INT Set_HtStbc_Proc(
6116 IN PRTMP_ADAPTER pAd,
6117 IN PUCHAR arg);
6119 INT Set_HtHtc_Proc(
6120 IN PRTMP_ADAPTER pAd,
6121 IN PUCHAR arg);
6123 INT Set_HtExtcha_Proc(
6124 IN PRTMP_ADAPTER pAd,
6125 IN PUCHAR arg);
6127 INT Set_HtMpduDensity_Proc(
6128 IN PRTMP_ADAPTER pAd,
6129 IN PUCHAR arg);
6131 INT Set_HtBaWinSize_Proc(
6132 IN PRTMP_ADAPTER pAd,
6133 IN PUCHAR arg);
6135 INT Set_HtRdg_Proc(
6136 IN PRTMP_ADAPTER pAd,
6137 IN PUCHAR arg);
6139 INT Set_HtLinkAdapt_Proc(
6140 IN PRTMP_ADAPTER pAd,
6141 IN PUCHAR arg);
6143 INT Set_HtAmsdu_Proc(
6144 IN PRTMP_ADAPTER pAd,
6145 IN PUCHAR arg);
6147 INT Set_HtAutoBa_Proc(
6148 IN PRTMP_ADAPTER pAd,
6149 IN PUCHAR arg);
6151 INT Set_HtProtect_Proc(
6152 IN PRTMP_ADAPTER pAd,
6153 IN PUCHAR arg);
6155 INT Set_HtMimoPs_Proc(
6156 IN PRTMP_ADAPTER pAd,
6157 IN PUCHAR arg);
6160 INT Set_ForceShortGI_Proc(
6161 IN PRTMP_ADAPTER pAd,
6162 IN PUCHAR arg);
6164 INT Set_ForceGF_Proc(
6165 IN PRTMP_ADAPTER pAd,
6166 IN PUCHAR arg);
6168 INT SetCommonHT(
6169 IN PRTMP_ADAPTER pAd);
6171 INT Set_SendPSMPAction_Proc(
6172 IN PRTMP_ADAPTER pAd,
6173 IN PUCHAR arg);
6175 INT Set_HtMIMOPSmode_Proc(
6176 IN PRTMP_ADAPTER pAd,
6177 IN PUCHAR arg);
6180 INT Set_HtTxBASize_Proc(
6181 IN PRTMP_ADAPTER pAd,
6182 IN PUCHAR arg);
6183 #endif // DOT11_N_SUPPORT //
6187 #ifdef CONFIG_STA_SUPPORT
6188 //Dls , kathy
6189 VOID RTMPSendDLSTearDownFrame(
6190 IN PRTMP_ADAPTER pAd,
6191 IN PUCHAR pDA);
6193 #ifdef DOT11_N_SUPPORT
6194 //Block ACK
6195 VOID QueryBATABLE(
6196 IN PRTMP_ADAPTER pAd,
6197 OUT PQUERYBA_TABLE pBAT);
6198 #endif // DOT11_N_SUPPORT //
6200 #ifdef WPA_SUPPLICANT_SUPPORT
6201 INT WpaCheckEapCode(
6202 IN PRTMP_ADAPTER pAd,
6203 IN PUCHAR pFrame,
6204 IN USHORT FrameLen,
6205 IN USHORT OffSet);
6207 VOID WpaSendMicFailureToWpaSupplicant(
6208 IN PRTMP_ADAPTER pAd,
6209 IN BOOLEAN bUnicast);
6211 VOID SendAssocIEsToWpaSupplicant(
6212 IN PRTMP_ADAPTER pAd);
6213 #endif // WPA_SUPPLICANT_SUPPORT //
6215 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6216 int wext_notify_event_assoc(
6217 IN RTMP_ADAPTER *pAd);
6218 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6220 #endif // CONFIG_STA_SUPPORT //
6224 #ifdef DOT11_N_SUPPORT
6225 VOID Handle_BSS_Width_Trigger_Events(
6226 IN PRTMP_ADAPTER pAd);
6228 void build_ext_channel_switch_ie(
6229 IN PRTMP_ADAPTER pAd,
6230 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6231 #endif // DOT11_N_SUPPORT //
6234 BOOLEAN APRxDoneInterruptHandle(
6235 IN PRTMP_ADAPTER pAd);
6237 BOOLEAN STARxDoneInterruptHandle(
6238 IN PRTMP_ADAPTER pAd,
6239 IN BOOLEAN argc);
6241 #ifdef DOT11_N_SUPPORT
6242 // AMPDU packet indication
6243 VOID Indicate_AMPDU_Packet(
6244 IN PRTMP_ADAPTER pAd,
6245 IN RX_BLK *pRxBlk,
6246 IN UCHAR FromWhichBSSID);
6248 // AMSDU packet indication
6249 VOID Indicate_AMSDU_Packet(
6250 IN PRTMP_ADAPTER pAd,
6251 IN RX_BLK *pRxBlk,
6252 IN UCHAR FromWhichBSSID);
6253 #endif // DOT11_N_SUPPORT //
6255 // Normal legacy Rx packet indication
6256 VOID Indicate_Legacy_Packet(
6257 IN PRTMP_ADAPTER pAd,
6258 IN RX_BLK *pRxBlk,
6259 IN UCHAR FromWhichBSSID);
6261 VOID Indicate_EAPOL_Packet(
6262 IN PRTMP_ADAPTER pAd,
6263 IN RX_BLK *pRxBlk,
6264 IN UCHAR FromWhichBSSID);
6266 void update_os_packet_info(
6267 IN PRTMP_ADAPTER pAd,
6268 IN RX_BLK *pRxBlk,
6269 IN UCHAR FromWhichBSSID);
6271 void wlan_802_11_to_802_3_packet(
6272 IN PRTMP_ADAPTER pAd,
6273 IN RX_BLK *pRxBlk,
6274 IN PUCHAR pHeader802_3,
6275 IN UCHAR FromWhichBSSID);
6277 UINT deaggregate_AMSDU_announce(
6278 IN PRTMP_ADAPTER pAd,
6279 PNDIS_PACKET pPacket,
6280 IN PUCHAR pData,
6281 IN ULONG DataSize);
6284 #ifdef CONFIG_STA_SUPPORT
6285 // remove LLC and get 802_3 Header
6286 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6288 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6290 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6292 _pDA = _pRxBlk->pHeader->Addr3; \
6293 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6295 else \
6297 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6299 _pDA = _pRxBlk->pHeader->Addr1; \
6300 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6301 _pSA = _pRxBlk->pHeader->Addr2; \
6302 else \
6303 _pSA = _pRxBlk->pHeader->Addr3; \
6305 else \
6307 _pDA = _pRxBlk->pHeader->Addr1; \
6308 _pSA = _pRxBlk->pHeader->Addr2; \
6312 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6313 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6315 #endif // CONFIG_STA_SUPPORT //
6318 BOOLEAN APFowardWirelessStaToWirelessSta(
6319 IN PRTMP_ADAPTER pAd,
6320 IN PNDIS_PACKET pPacket,
6321 IN ULONG FromWhichBSSID);
6323 VOID Announce_or_Forward_802_3_Packet(
6324 IN PRTMP_ADAPTER pAd,
6325 IN PNDIS_PACKET pPacket,
6326 IN UCHAR FromWhichBSSID);
6328 VOID Sta_Announce_or_Forward_802_3_Packet(
6329 IN PRTMP_ADAPTER pAd,
6330 IN PNDIS_PACKET pPacket,
6331 IN UCHAR FromWhichBSSID);
6334 #ifdef CONFIG_STA_SUPPORT
6335 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6336 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6337 //announce_802_3_packet(_pAd, _pPacket);
6338 #endif // CONFIG_STA_SUPPORT //
6341 PNDIS_PACKET DuplicatePacket(
6342 IN PRTMP_ADAPTER pAd,
6343 IN PNDIS_PACKET pPacket,
6344 IN UCHAR FromWhichBSSID);
6347 PNDIS_PACKET ClonePacket(
6348 IN PRTMP_ADAPTER pAd,
6349 IN PNDIS_PACKET pPacket,
6350 IN PUCHAR pData,
6351 IN ULONG DataSize);
6354 // Normal, AMPDU or AMSDU
6355 VOID CmmRxnonRalinkFrameIndicate(
6356 IN PRTMP_ADAPTER pAd,
6357 IN RX_BLK *pRxBlk,
6358 IN UCHAR FromWhichBSSID);
6360 VOID CmmRxRalinkFrameIndicate(
6361 IN PRTMP_ADAPTER pAd,
6362 IN MAC_TABLE_ENTRY *pEntry,
6363 IN RX_BLK *pRxBlk,
6364 IN UCHAR FromWhichBSSID);
6366 VOID Update_Rssi_Sample(
6367 IN PRTMP_ADAPTER pAd,
6368 IN RSSI_SAMPLE *pRssi,
6369 IN PRXWI_STRUC pRxWI);
6371 PNDIS_PACKET GetPacketFromRxRing(
6372 IN PRTMP_ADAPTER pAd,
6373 OUT PRT28XX_RXD_STRUC pSaveRxD,
6374 OUT BOOLEAN *pbReschedule,
6375 IN OUT UINT32 *pRxPending);
6377 PNDIS_PACKET RTMPDeFragmentDataFrame(
6378 IN PRTMP_ADAPTER pAd,
6379 IN RX_BLK *pRxBlk);
6381 ////////////////////////////////////////
6383 #ifdef CONFIG_STA_SUPPORT
6384 enum {
6385 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6386 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6387 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6388 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6389 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6390 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6391 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6392 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6393 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6394 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6395 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6397 enum {
6398 P80211ENUM_msgitem_status_no_value = 0x00
6400 enum {
6401 P80211ENUM_truth_false = 0x00,
6402 P80211ENUM_truth_true = 0x01
6405 /* Definition from madwifi */
6406 typedef struct {
6407 UINT32 did;
6408 UINT16 status;
6409 UINT16 len;
6410 UINT32 data;
6411 } p80211item_uint32_t;
6413 typedef struct {
6414 UINT32 msgcode;
6415 UINT32 msglen;
6416 #define WLAN_DEVNAMELEN_MAX 16
6417 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6418 p80211item_uint32_t hosttime;
6419 p80211item_uint32_t mactime;
6420 p80211item_uint32_t channel;
6421 p80211item_uint32_t rssi;
6422 p80211item_uint32_t sq;
6423 p80211item_uint32_t signal;
6424 p80211item_uint32_t noise;
6425 p80211item_uint32_t rate;
6426 p80211item_uint32_t istx;
6427 p80211item_uint32_t frmlen;
6428 } wlan_ng_prism2_header;
6430 /* The radio capture header precedes the 802.11 header. */
6431 typedef struct PACKED _ieee80211_radiotap_header {
6432 UINT8 it_version; /* Version 0. Only increases
6433 * for drastic changes,
6434 * introduction of compatible
6435 * new fields does not count.
6437 UINT8 it_pad;
6438 UINT16 it_len; /* length of the whole
6439 * header in bytes, including
6440 * it_version, it_pad,
6441 * it_len, and data fields.
6443 UINT32 it_present; /* A bitmap telling which
6444 * fields are present. Set bit 31
6445 * (0x80000000) to extend the
6446 * bitmap by another 32 bits.
6447 * Additional extensions are made
6448 * by setting bit 31.
6450 }ieee80211_radiotap_header ;
6452 enum ieee80211_radiotap_type {
6453 IEEE80211_RADIOTAP_TSFT = 0,
6454 IEEE80211_RADIOTAP_FLAGS = 1,
6455 IEEE80211_RADIOTAP_RATE = 2,
6456 IEEE80211_RADIOTAP_CHANNEL = 3,
6457 IEEE80211_RADIOTAP_FHSS = 4,
6458 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6459 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6460 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6461 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6462 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6463 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6464 IEEE80211_RADIOTAP_ANTENNA = 11,
6465 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6466 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6469 #define WLAN_RADIOTAP_PRESENT ( \
6470 (1 << IEEE80211_RADIOTAP_TSFT) | \
6471 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6472 (1 << IEEE80211_RADIOTAP_RATE) | \
6475 typedef struct _wlan_radiotap_header {
6476 ieee80211_radiotap_header wt_ihdr;
6477 INT64 wt_tsft;
6478 UINT8 wt_flags;
6479 UINT8 wt_rate;
6480 } wlan_radiotap_header;
6481 /* Definition from madwifi */
6483 void send_monitor_packets(
6484 IN PRTMP_ADAPTER pAd,
6485 IN RX_BLK *pRxBlk);
6487 #if WIRELESS_EXT >= 12
6488 // This function will be called when query /proc
6489 struct iw_statistics *rt28xx_get_wireless_stats(
6490 IN struct net_device *net_dev);
6491 #endif
6493 VOID RTMPSetDesiredRates(
6494 IN PRTMP_ADAPTER pAdapter,
6495 IN LONG Rates);
6496 #endif // CONFIG_STA_SUPPORT //
6498 INT Set_FixedTxMode_Proc(
6499 IN PRTMP_ADAPTER pAd,
6500 IN PUCHAR arg);
6502 static inline char* GetPhyMode(
6503 int Mode)
6505 switch(Mode)
6507 case MODE_CCK:
6508 return "CCK";
6510 case MODE_OFDM:
6511 return "OFDM";
6512 #ifdef DOT11_N_SUPPORT
6513 case MODE_HTMIX:
6514 return "HTMIX";
6516 case MODE_HTGREENFIELD:
6517 return "GREEN";
6518 #endif // DOT11_N_SUPPORT //
6519 default:
6520 return "N/A";
6525 static inline char* GetBW(
6526 int BW)
6528 switch(BW)
6530 case BW_10:
6531 return "10M";
6533 case BW_20:
6534 return "20M";
6535 #ifdef DOT11_N_SUPPORT
6536 case BW_40:
6537 return "40M";
6538 #endif // DOT11_N_SUPPORT //
6539 default:
6540 return "N/A";
6545 VOID RT28xxThreadTerminate(
6546 IN RTMP_ADAPTER *pAd);
6548 BOOLEAN RT28XXChipsetCheck(
6549 IN void *_dev_p);
6551 BOOLEAN RT28XXNetDevInit(
6552 IN void *_dev_p,
6553 IN struct net_device *net_dev,
6554 IN RTMP_ADAPTER *pAd);
6556 BOOLEAN RT28XXProbePostConfig(
6557 IN void *_dev_p,
6558 IN RTMP_ADAPTER *pAd,
6559 IN INT32 argc);
6561 VOID RT28XXDMADisable(
6562 IN RTMP_ADAPTER *pAd);
6564 VOID RT28XXDMAEnable(
6565 IN RTMP_ADAPTER *pAd);
6567 VOID RT28xx_UpdateBeaconToAsic(
6568 IN RTMP_ADAPTER * pAd,
6569 IN INT apidx,
6570 IN ULONG BeaconLen,
6571 IN ULONG UpdatePos);
6573 INT rt28xx_ioctl(
6574 IN struct net_device *net_dev,
6575 IN OUT struct ifreq *rq,
6576 IN INT cmd);
6579 #ifdef CONFIG_STA_SUPPORT
6580 INT rt28xx_sta_ioctl(
6581 IN struct net_device *net_dev,
6582 IN OUT struct ifreq *rq,
6583 IN INT cmd);
6584 #endif // CONFIG_STA_SUPPORT //
6586 BOOLEAN RT28XXSecurityKeyAdd(
6587 IN PRTMP_ADAPTER pAd,
6588 IN ULONG apidx,
6589 IN ULONG KeyIdx,
6590 IN MAC_TABLE_ENTRY *pEntry);
6592 ////////////////////////////////////////
6593 PNDIS_PACKET GetPacketFromRxRing(
6594 IN PRTMP_ADAPTER pAd,
6595 OUT PRT28XX_RXD_STRUC pSaveRxD,
6596 OUT BOOLEAN *pbReschedule,
6597 IN OUT UINT32 *pRxPending);
6600 void kill_thread_task(PRTMP_ADAPTER pAd);
6602 void tbtt_tasklet(unsigned long data);
6605 VOID AsicTurnOffRFClk(
6606 IN PRTMP_ADAPTER pAd,
6607 IN UCHAR Channel);
6609 VOID AsicTurnOnRFClk(
6610 IN PRTMP_ADAPTER pAd,
6611 IN UCHAR Channel);
6613 #ifdef RT2870
6615 // Function Prototype in rtusb_bulk.c
6617 VOID RTUSBInitTxDesc(
6618 IN PRTMP_ADAPTER pAd,
6619 IN PTX_CONTEXT pTxContext,
6620 IN UCHAR BulkOutPipeId,
6621 IN usb_complete_t Func);
6623 VOID RTUSBInitHTTxDesc(
6624 IN PRTMP_ADAPTER pAd,
6625 IN PHT_TX_CONTEXT pTxContext,
6626 IN UCHAR BulkOutPipeId,
6627 IN ULONG BulkOutSize,
6628 IN usb_complete_t Func);
6630 VOID RTUSBInitRxDesc(
6631 IN PRTMP_ADAPTER pAd,
6632 IN PRX_CONTEXT pRxContext);
6634 VOID RTUSBCleanUpDataBulkOutQueue(
6635 IN PRTMP_ADAPTER pAd);
6637 VOID RTUSBCancelPendingBulkOutIRP(
6638 IN PRTMP_ADAPTER pAd);
6640 VOID RTUSBBulkOutDataPacket(
6641 IN PRTMP_ADAPTER pAd,
6642 IN UCHAR BulkOutPipeId,
6643 IN UCHAR Index);
6645 VOID RTUSBBulkOutNullFrame(
6646 IN PRTMP_ADAPTER pAd);
6648 VOID RTUSBBulkOutRTSFrame(
6649 IN PRTMP_ADAPTER pAd);
6651 VOID RTUSBCancelPendingBulkInIRP(
6652 IN PRTMP_ADAPTER pAd);
6654 VOID RTUSBCancelPendingIRPs(
6655 IN PRTMP_ADAPTER pAd);
6657 VOID RTUSBBulkOutMLMEPacket(
6658 IN PRTMP_ADAPTER pAd,
6659 IN UCHAR Index);
6661 VOID RTUSBBulkOutPsPoll(
6662 IN PRTMP_ADAPTER pAd);
6664 VOID RTUSBCleanUpMLMEBulkOutQueue(
6665 IN PRTMP_ADAPTER pAd);
6667 VOID RTUSBKickBulkOut(
6668 IN PRTMP_ADAPTER pAd);
6670 VOID RTUSBBulkReceive(
6671 IN PRTMP_ADAPTER pAd);
6673 VOID DoBulkIn(
6674 IN RTMP_ADAPTER *pAd);
6676 VOID RTUSBInitRxDesc(
6677 IN PRTMP_ADAPTER pAd,
6678 IN PRX_CONTEXT pRxContext);
6680 VOID RTUSBBulkRxHandle(
6681 IN unsigned long data);
6684 // Function Prototype in rtusb_io.c
6686 NTSTATUS RTUSBMultiRead(
6687 IN PRTMP_ADAPTER pAd,
6688 IN USHORT Offset,
6689 OUT PUCHAR pData,
6690 IN USHORT length);
6692 NTSTATUS RTUSBMultiWrite(
6693 IN PRTMP_ADAPTER pAd,
6694 IN USHORT Offset,
6695 IN PUCHAR pData,
6696 IN USHORT length);
6698 NTSTATUS RTUSBMultiWrite_OneByte(
6699 IN PRTMP_ADAPTER pAd,
6700 IN USHORT Offset,
6701 IN PUCHAR pData);
6703 NTSTATUS RTUSBReadBBPRegister(
6704 IN PRTMP_ADAPTER pAd,
6705 IN UCHAR Id,
6706 IN PUCHAR pValue);
6708 NTSTATUS RTUSBWriteBBPRegister(
6709 IN PRTMP_ADAPTER pAd,
6710 IN UCHAR Id,
6711 IN UCHAR Value);
6713 NTSTATUS RTUSBWriteRFRegister(
6714 IN PRTMP_ADAPTER pAd,
6715 IN UINT32 Value);
6717 NTSTATUS RT30xxWriteRFRegister(
6718 IN PRTMP_ADAPTER pAd,
6719 IN UCHAR RegID,
6720 IN UCHAR Value);
6722 NTSTATUS RT30xxReadRFRegister(
6723 IN PRTMP_ADAPTER pAd,
6724 IN UCHAR RegID,
6725 IN PUCHAR pValue);
6727 NTSTATUS RTUSB_VendorRequest(
6728 IN PRTMP_ADAPTER pAd,
6729 IN UINT32 TransferFlags,
6730 IN UCHAR ReservedBits,
6731 IN UCHAR Request,
6732 IN USHORT Value,
6733 IN USHORT Index,
6734 IN PVOID TransferBuffer,
6735 IN UINT32 TransferBufferLength);
6737 NTSTATUS RTUSBReadEEPROM(
6738 IN PRTMP_ADAPTER pAd,
6739 IN USHORT Offset,
6740 OUT PUCHAR pData,
6741 IN USHORT length);
6743 NTSTATUS RTUSBWriteEEPROM(
6744 IN PRTMP_ADAPTER pAd,
6745 IN USHORT Offset,
6746 IN PUCHAR pData,
6747 IN USHORT length);
6749 VOID RTUSBPutToSleep(
6750 IN PRTMP_ADAPTER pAd);
6752 NTSTATUS RTUSBWakeUp(
6753 IN PRTMP_ADAPTER pAd);
6755 VOID RTUSBInitializeCmdQ(
6756 IN PCmdQ cmdq);
6758 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6759 IN PRTMP_ADAPTER pAd,
6760 IN NDIS_OID Oid,
6761 IN BOOLEAN SetInformation,
6762 IN PVOID pInformationBuffer,
6763 IN UINT32 InformationBufferLength);
6765 NDIS_STATUS RTUSBEnqueueInternalCmd(
6766 IN PRTMP_ADAPTER pAd,
6767 IN NDIS_OID Oid,
6768 IN PVOID pInformationBuffer,
6769 IN UINT32 InformationBufferLength);
6771 VOID RTUSBDequeueCmd(
6772 IN PCmdQ cmdq,
6773 OUT PCmdQElmt *pcmdqelmt);
6775 INT RTUSBCmdThread(
6776 IN OUT PVOID Context);
6778 INT TimerQThread(
6779 IN OUT PVOID Context);
6781 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6782 IN RTMP_ADAPTER *pAd,
6783 IN RALINK_TIMER_STRUCT *pTimer);
6785 BOOLEAN RT2870_TimerQ_Remove(
6786 IN RTMP_ADAPTER *pAd,
6787 IN RALINK_TIMER_STRUCT *pTimer);
6789 void RT2870_TimerQ_Exit(
6790 IN RTMP_ADAPTER *pAd);
6792 void RT2870_TimerQ_Init(
6793 IN RTMP_ADAPTER *pAd);
6795 VOID RT2870_BssBeaconExit(
6796 IN RTMP_ADAPTER *pAd);
6798 VOID RT2870_BssBeaconStop(
6799 IN RTMP_ADAPTER *pAd);
6801 VOID RT2870_BssBeaconStart(
6802 IN RTMP_ADAPTER * pAd);
6804 VOID RT2870_BssBeaconInit(
6805 IN RTMP_ADAPTER *pAd);
6807 VOID RT2870_WatchDog(
6808 IN RTMP_ADAPTER *pAd);
6810 NTSTATUS RTUSBWriteMACRegister(
6811 IN PRTMP_ADAPTER pAd,
6812 IN USHORT Offset,
6813 IN UINT32 Value);
6815 NTSTATUS RTUSBReadMACRegister(
6816 IN PRTMP_ADAPTER pAd,
6817 IN USHORT Offset,
6818 OUT PUINT32 pValue);
6820 NTSTATUS RTUSBSingleWrite(
6821 IN RTMP_ADAPTER *pAd,
6822 IN USHORT Offset,
6823 IN USHORT Value);
6825 NTSTATUS RTUSBFirmwareRun(
6826 IN PRTMP_ADAPTER pAd);
6828 NTSTATUS RTUSBFirmwareWrite(
6829 IN PRTMP_ADAPTER pAd,
6830 IN PUCHAR pFwImage,
6831 IN ULONG FwLen);
6833 NTSTATUS RTUSBFirmwareOpmode(
6834 IN PRTMP_ADAPTER pAd,
6835 OUT PUINT32 pValue);
6837 NTSTATUS RTUSBVenderReset(
6838 IN PRTMP_ADAPTER pAd);
6840 NDIS_STATUS RTUSBSetHardWareRegister(
6841 IN PRTMP_ADAPTER pAdapter,
6842 IN PVOID pBuf);
6844 NDIS_STATUS RTUSBQueryHardWareRegister(
6845 IN PRTMP_ADAPTER pAdapter,
6846 IN PVOID pBuf);
6848 VOID CMDHandler(
6849 IN PRTMP_ADAPTER pAd);
6852 NDIS_STATUS CreateThreads(
6853 IN struct net_device *net_dev );
6856 VOID MacTableInitialize(
6857 IN PRTMP_ADAPTER pAd);
6859 VOID MlmeSetPsm(
6860 IN PRTMP_ADAPTER pAd,
6861 IN USHORT psm);
6863 NDIS_STATUS RTMPWPAAddKeyProc(
6864 IN PRTMP_ADAPTER pAd,
6865 IN PVOID pBuf);
6867 VOID AsicRxAntEvalAction(
6868 IN PRTMP_ADAPTER pAd);
6870 #if 0 // Mark because not used in RT28xx.
6871 NTSTATUS RTUSBRxPacket(
6872 IN PRTMP_ADAPTER pAd,
6873 IN BOOLEAN bBulkReceive);
6875 VOID RTUSBDequeueMLMEPacket(
6876 IN PRTMP_ADAPTER pAd);
6878 VOID RTUSBCleanUpMLMEWaitQueue(
6879 IN PRTMP_ADAPTER pAd);
6880 #endif
6882 void append_pkt(
6883 IN PRTMP_ADAPTER pAd,
6884 IN PUCHAR pHeader802_3,
6885 IN UINT HdrLen,
6886 IN PUCHAR pData,
6887 IN ULONG DataSize,
6888 OUT PNDIS_PACKET *ppPacket);
6890 UINT deaggregate_AMSDU_announce(
6891 IN PRTMP_ADAPTER pAd,
6892 PNDIS_PACKET pPacket,
6893 IN PUCHAR pData,
6894 IN ULONG DataSize);
6896 NDIS_STATUS RTMPCheckRxError(
6897 IN PRTMP_ADAPTER pAd,
6898 IN PHEADER_802_11 pHeader,
6899 IN PRXWI_STRUC pRxWI,
6900 IN PRT28XX_RXD_STRUC pRxINFO);
6903 VOID RTUSBMlmeHardTransmit(
6904 IN PRTMP_ADAPTER pAd,
6905 IN PMGMT_STRUC pMgmt);
6907 INT MlmeThread(
6908 IN PVOID Context);
6910 #if 0
6911 VOID RTUSBResumeMsduTransmission(
6912 IN PRTMP_ADAPTER pAd);
6914 VOID RTUSBSuspendMsduTransmission(
6915 IN PRTMP_ADAPTER pAd);
6916 #endif
6919 // Function Prototype in rtusb_data.c
6921 NDIS_STATUS RTUSBFreeDescriptorRequest(
6922 IN PRTMP_ADAPTER pAd,
6923 IN UCHAR BulkOutPipeId,
6924 IN UINT32 NumberRequired);
6927 BOOLEAN RTUSBNeedQueueBackForAgg(
6928 IN RTMP_ADAPTER *pAd,
6929 IN UCHAR BulkOutPipeId);
6932 VOID RTMPWriteTxInfo(
6933 IN PRTMP_ADAPTER pAd,
6934 IN PTXINFO_STRUC pTxInfo,
6935 IN USHORT USBDMApktLen,
6936 IN BOOLEAN bWiv,
6937 IN UCHAR QueueSel,
6938 IN UCHAR NextValid,
6939 IN UCHAR TxBurst);
6942 // Function Prototype in cmm_data_2870.c
6944 USHORT RtmpUSB_WriteSubTxResource(
6945 IN PRTMP_ADAPTER pAd,
6946 IN TX_BLK *pTxBlk,
6947 IN BOOLEAN bIsLast,
6948 OUT USHORT *FreeNumber);
6950 USHORT RtmpUSB_WriteSingleTxResource(
6951 IN PRTMP_ADAPTER pAd,
6952 IN TX_BLK *pTxBlk,
6953 IN BOOLEAN bIsLast,
6954 OUT USHORT *FreeNumber);
6956 USHORT RtmpUSB_WriteFragTxResource(
6957 IN PRTMP_ADAPTER pAd,
6958 IN TX_BLK *pTxBlk,
6959 IN UCHAR fragNum,
6960 OUT USHORT *FreeNumber);
6962 USHORT RtmpUSB_WriteMultiTxResource(
6963 IN PRTMP_ADAPTER pAd,
6964 IN TX_BLK *pTxBlk,
6965 IN UCHAR frameNum,
6966 OUT USHORT *FreeNumber);
6968 VOID RtmpUSB_FinalWriteTxResource(
6969 IN PRTMP_ADAPTER pAd,
6970 IN TX_BLK *pTxBlk,
6971 IN USHORT totalMPDUSize,
6972 IN USHORT TxIdx);
6974 VOID RtmpUSBDataLastTxIdx(
6975 IN PRTMP_ADAPTER pAd,
6976 IN UCHAR QueIdx,
6977 IN USHORT TxIdx);
6979 VOID RtmpUSBDataKickOut(
6980 IN PRTMP_ADAPTER pAd,
6981 IN TX_BLK *pTxBlk,
6982 IN UCHAR QueIdx);
6985 int RtmpUSBMgmtKickOut(
6986 IN RTMP_ADAPTER *pAd,
6987 IN UCHAR QueIdx,
6988 IN PNDIS_PACKET pPacket,
6989 IN PUCHAR pSrcBufVA,
6990 IN UINT SrcBufLen);
6992 VOID RtmpUSBNullFrameKickOut(
6993 IN RTMP_ADAPTER *pAd,
6994 IN UCHAR QueIdx,
6995 IN UCHAR *pNullFrame,
6996 IN UINT32 frameLen);
6998 VOID RT28xxUsbStaAsicForceWakeup(
6999 IN PRTMP_ADAPTER pAd,
7000 IN BOOLEAN bFromTx);
7002 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7003 IN PRTMP_ADAPTER pAd,
7004 IN USHORT TbttNumToNextWakeUp);
7006 VOID RT28xxUsbMlmeRadioOn(
7007 IN PRTMP_ADAPTER pAd);
7009 VOID RT28xxUsbMlmeRadioOFF(
7010 IN PRTMP_ADAPTER pAd);
7011 #endif // RT2870 //
7013 ////////////////////////////////////////
7015 VOID QBSS_LoadInit(
7016 IN RTMP_ADAPTER *pAd);
7018 UINT32 QBSS_LoadElementAppend(
7019 IN RTMP_ADAPTER *pAd,
7020 OUT UINT8 *buf_p);
7022 VOID QBSS_LoadUpdate(
7023 IN RTMP_ADAPTER *pAd);
7025 ///////////////////////////////////////
7026 INT RTMPShowCfgValue(
7027 IN PRTMP_ADAPTER pAd,
7028 IN PUCHAR pName,
7029 IN PUCHAR pBuf);
7031 PCHAR RTMPGetRalinkAuthModeStr(
7032 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7034 PCHAR RTMPGetRalinkEncryModeStr(
7035 IN USHORT encryMode);
7036 //////////////////////////////////////
7038 #ifdef CONFIG_STA_SUPPORT
7039 VOID AsicStaBbpTuning(
7040 IN PRTMP_ADAPTER pAd);
7042 BOOLEAN StaAddMacTableEntry(
7043 IN PRTMP_ADAPTER pAd,
7044 IN PMAC_TABLE_ENTRY pEntry,
7045 IN UCHAR MaxSupportedRateIn500Kbps,
7046 IN HT_CAPABILITY_IE *pHtCapability,
7047 IN UCHAR HtCapabilityLen,
7048 IN USHORT CapabilityInfo);
7049 #endif // CONFIG_STA_SUPPORT //
7051 void RTMP_IndicateMediaState(
7052 IN PRTMP_ADAPTER pAd);
7054 VOID ReSyncBeaconTime(
7055 IN PRTMP_ADAPTER pAd);
7057 VOID RTMPSetAGCInitValue(
7058 IN PRTMP_ADAPTER pAd,
7059 IN UCHAR BandWidth);
7061 int rt28xx_close(IN PNET_DEV dev);
7062 int rt28xx_open(IN PNET_DEV dev);
7064 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7066 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7067 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7069 if (VIRTUAL_IF_NUM(pAd) == 0)
7071 if (rt28xx_open(pAd->net_dev) != 0)
7072 return -1;
7074 else
7077 VIRTUAL_IF_INC(pAd);
7078 return 0;
7081 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7083 VIRTUAL_IF_DEC(pAd);
7084 if (VIRTUAL_IF_NUM(pAd) == 0)
7085 rt28xx_close(pAd->net_dev);
7086 return;
7090 #endif // __RTMP_H__