aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/rt3070/rtmp.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rt3070/rtmp.h')
-rw-r--r--drivers/staging/rt3070/rtmp.h7728
1 files changed, 7728 insertions, 0 deletions
diff --git a/drivers/staging/rt3070/rtmp.h b/drivers/staging/rt3070/rtmp.h
new file mode 100644
index 00000000000..d80d74ffbc8
--- /dev/null
+++ b/drivers/staging/rt3070/rtmp.h
@@ -0,0 +1,7728 @@
1/*
2 *************************************************************************
3 * Ralink Tech Inc.
4 * 5F., No.36, Taiyuan St., Jhubei City,
5 * Hsinchu County 302,
6 * Taiwan, R.O.C.
7 *
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
9 *
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 *************************************************************************
26
27 Module Name:
28 rtmp.h
29
30 Abstract:
31 Miniport generic portion header file
32
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
39*/
40#ifndef __RTMP_H__
41#define __RTMP_H__
42
43#include "link_list.h"
44#include "spectrum_def.h"
45
46#ifdef MLME_EX
47#include "mlme_ex_def.h"
48#endif // MLME_EX //
49
50#ifdef CONFIG_STA_SUPPORT
51#include "aironet.h"
52#endif // CONFIG_STA_SUPPORT //
53
54#undef AP_WSC_INCLUDED
55#undef STA_WSC_INCLUDED
56#undef WSC_INCLUDED
57
58
59#ifdef CONFIG_STA_SUPPORT
60#endif // CONFIG_STA_SUPPORT //
61
62#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED)
63#define WSC_INCLUDED
64#endif
65
66
67
68
69
70//#define DBG 1
71
72//#define DBG_DIAGNOSE 1
73
74#if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
75#define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
76#define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
77#else
78#define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
79#define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
80#endif
81
82#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
83#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
84#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
85
86#ifdef RT2870
87////////////////////////////////////////////////////////////////////////////
88// The TX_BUFFER structure forms the transmitted USB packet to the device
89////////////////////////////////////////////////////////////////////////////
90typedef struct __TX_BUFFER{
91 union {
92 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
93 HEADER_802_11 NullFrame;
94 PSPOLL_FRAME PsPollPacket;
95 RTS_FRAME RTSFrame;
96 }field;
97 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
98} TX_BUFFER, *PTX_BUFFER;
99
100typedef struct __HTTX_BUFFER{
101 union {
102 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
103 HEADER_802_11 NullFrame;
104 PSPOLL_FRAME PsPollPacket;
105 RTS_FRAME RTSFrame;
106 }field;
107 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
108} HTTX_BUFFER, *PHTTX_BUFFER;
109
110
111// used to track driver-generated write irps
112typedef struct _TX_CONTEXT
113{
114 PVOID pAd; //Initialized in MiniportInitialize
115 PURB pUrb; //Initialized in MiniportInitialize
116 PIRP pIrp; //used to cancel pending bulk out.
117 //Initialized in MiniportInitialize
118 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
119 ULONG BulkOutSize;
120 UCHAR BulkOutPipeId;
121 UCHAR SelfIdx;
122 BOOLEAN InUse;
123 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
124 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
125 BOOLEAN IRPPending;
126 BOOLEAN LastOne;
127 BOOLEAN bAggregatible;
128 UCHAR Header_802_3[LENGTH_802_3];
129 UCHAR Rsv[2];
130 ULONG DataOffset;
131 UINT TxRate;
132 dma_addr_t data_dma; // urb dma on linux
133
134} TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
135
136
137// used to track driver-generated write irps
138typedef struct _HT_TX_CONTEXT
139{
140 PVOID pAd; //Initialized in MiniportInitialize
141 PURB pUrb; //Initialized in MiniportInitialize
142 PIRP pIrp; //used to cancel pending bulk out.
143 //Initialized in MiniportInitialize
144 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
145 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
146 UCHAR BulkOutPipeId;
147 BOOLEAN IRPPending;
148 BOOLEAN LastOne;
149 BOOLEAN bCurWriting;
150 BOOLEAN bRingEmpty;
151 BOOLEAN bCopySavePad;
152 UCHAR SavedPad[8];
153 UCHAR Header_802_3[LENGTH_802_3];
154 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
155 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
156 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
157 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
158 UINT TxRate;
159 dma_addr_t data_dma; // urb dma on linux
160} HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
161
162
163//
164// Structure to keep track of receive packets and buffers to indicate
165// receive data to the protocol.
166//
167typedef struct _RX_CONTEXT
168{
169 PUCHAR TransferBuffer;
170 PVOID pAd;
171 PIRP pIrp;//used to cancel pending bulk in.
172 PURB pUrb;
173 //These 2 Boolean shouldn't both be 1 at the same time.
174 ULONG BulkInOffset; // number of packets waiting for reordering .
175// BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
176 BOOLEAN bRxHandling; // Notify this packet is being process now.
177 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
178 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
179 BOOLEAN IRPPending; // TODO: To be removed
180 atomic_t IrpLock;
181 NDIS_SPIN_LOCK RxContextLock;
182 dma_addr_t data_dma; // urb dma on linux
183} RX_CONTEXT, *PRX_CONTEXT;
184#endif // RT2870 //
185
186
187//
188// NDIS Version definitions
189//
190#ifdef NDIS50_MINIPORT
191#define RTMP_NDIS_MAJOR_VERSION 5
192#define RTMP_NDIS_MINOR_VERSION 0
193#endif
194
195#ifdef NDIS51_MINIPORT
196#define RTMP_NDIS_MAJOR_VERSION 5
197#define RTMP_NDIS_MINOR_VERSION 1
198#endif
199
200extern char NIC_VENDOR_DESC[];
201extern int NIC_VENDOR_DESC_LEN;
202
203extern unsigned char SNAP_AIRONET[];
204extern unsigned char CipherSuiteCiscoCCKM[];
205extern unsigned char CipherSuiteCiscoCCKMLen;
206extern unsigned char CipherSuiteCiscoCCKM24[];
207extern unsigned char CipherSuiteCiscoCCKM24Len;
208extern unsigned char CipherSuiteCCXTkip[];
209extern unsigned char CipherSuiteCCXTkipLen;
210extern unsigned char CISCO_OUI[];
211extern UCHAR BaSizeArray[4];
212
213extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
214extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
215extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
216extern ULONG BIT32[32];
217extern UCHAR BIT8[8];
218extern char* CipherName[];
219extern char* MCSToMbps[];
220extern UCHAR RxwiMCSToOfdmRate[12];
221extern UCHAR SNAP_802_1H[6];
222extern UCHAR SNAP_BRIDGE_TUNNEL[6];
223extern UCHAR SNAP_AIRONET[8];
224extern UCHAR CKIP_LLC_SNAP[8];
225extern UCHAR EAPOL_LLC_SNAP[8];
226extern UCHAR EAPOL[2];
227extern UCHAR IPX[2];
228extern UCHAR APPLE_TALK[2];
229extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
230extern UCHAR OfdmRateToRxwiMCS[];
231extern UCHAR OfdmSignalToRateId[16] ;
232extern UCHAR default_cwmin[4];
233extern UCHAR default_cwmax[4];
234extern UCHAR default_sta_aifsn[4];
235extern UCHAR MapUserPriorityToAccessCategory[8];
236
237extern USHORT RateUpPER[];
238extern USHORT RateDownPER[];
239extern UCHAR Phy11BNextRateDownward[];
240extern UCHAR Phy11BNextRateUpward[];
241extern UCHAR Phy11BGNextRateDownward[];
242extern UCHAR Phy11BGNextRateUpward[];
243extern UCHAR Phy11ANextRateDownward[];
244extern UCHAR Phy11ANextRateUpward[];
245extern CHAR RssiSafeLevelForTxRate[];
246extern UCHAR RateIdToMbps[];
247extern USHORT RateIdTo500Kbps[];
248
249extern UCHAR CipherSuiteWpaNoneTkip[];
250extern UCHAR CipherSuiteWpaNoneTkipLen;
251
252extern UCHAR CipherSuiteWpaNoneAes[];
253extern UCHAR CipherSuiteWpaNoneAesLen;
254
255extern UCHAR SsidIe;
256extern UCHAR SupRateIe;
257extern UCHAR ExtRateIe;
258
259#ifdef DOT11_N_SUPPORT
260extern UCHAR HtCapIe;
261extern UCHAR AddHtInfoIe;
262extern UCHAR NewExtChanIe;
263#ifdef DOT11N_DRAFT3
264extern UCHAR ExtHtCapIe;
265#endif // DOT11N_DRAFT3 //
266#endif // DOT11_N_SUPPORT //
267
268extern UCHAR ErpIe;
269extern UCHAR DsIe;
270extern UCHAR TimIe;
271extern UCHAR WpaIe;
272extern UCHAR Wpa2Ie;
273extern UCHAR IbssIe;
274extern UCHAR Ccx2Ie;
275extern UCHAR WapiIe;
276
277extern UCHAR WPA_OUI[];
278extern UCHAR RSN_OUI[];
279extern UCHAR WAPI_OUI[];
280extern UCHAR WME_INFO_ELEM[];
281extern UCHAR WME_PARM_ELEM[];
282extern UCHAR Ccx2QosInfo[];
283extern UCHAR Ccx2IeInfo[];
284extern UCHAR RALINK_OUI[];
285extern UCHAR PowerConstraintIE[];
286
287
288extern UCHAR RateSwitchTable[];
289extern UCHAR RateSwitchTable11B[];
290extern UCHAR RateSwitchTable11G[];
291extern UCHAR RateSwitchTable11BG[];
292
293#ifdef DOT11_N_SUPPORT
294extern UCHAR RateSwitchTable11BGN1S[];
295extern UCHAR RateSwitchTable11BGN2S[];
296extern UCHAR RateSwitchTable11BGN2SForABand[];
297extern UCHAR RateSwitchTable11N1S[];
298extern UCHAR RateSwitchTable11N2S[];
299extern UCHAR RateSwitchTable11N2SForABand[];
300
301#ifdef CONFIG_STA_SUPPORT
302extern UCHAR PRE_N_HT_OUI[];
303#endif // CONFIG_STA_SUPPORT //
304#endif // DOT11_N_SUPPORT //
305
306#define MAXSEQ (0xFFF)
307
308#ifdef RALINK_ATE
309typedef struct _ATE_INFO {
310 UCHAR Mode;
311 CHAR TxPower0;
312 CHAR TxPower1;
313 CHAR TxAntennaSel;
314 CHAR RxAntennaSel;
315 TXWI_STRUC TxWI; // TXWI
316 USHORT QID;
317 UCHAR Addr1[MAC_ADDR_LEN];
318 UCHAR Addr2[MAC_ADDR_LEN];
319 UCHAR Addr3[MAC_ADDR_LEN];
320 UCHAR Channel;
321 UINT32 TxLength;
322 UINT32 TxCount;
323 UINT32 TxDoneCount; // Tx DMA Done
324 UINT32 RFFreqOffset;
325 BOOLEAN bRxFer;
326 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
327 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
328 UINT32 RxTotalCnt;
329 UINT32 RxCntPerSec;
330
331 CHAR LastSNR0; // last received SNR
332 CHAR LastSNR1; // last received SNR for 2nd antenna
333 CHAR LastRssi0; // last received RSSI
334 CHAR LastRssi1; // last received RSSI for 2nd antenna
335 CHAR LastRssi2; // last received RSSI for 3rd antenna
336 CHAR AvgRssi0; // last 8 frames' average RSSI
337 CHAR AvgRssi1; // last 8 frames' average RSSI
338 CHAR AvgRssi2; // last 8 frames' average RSSI
339 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
340 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
341 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
342
343 UINT32 NumOfAvgRssiSample;
344
345#ifdef RALINK_28xx_QA
346 // Tx frame
347#ifdef RT2870
348 /* not used in RT2860 */
349 TXINFO_STRUC TxInfo; // TxInfo
350#endif // RT2870 //
351 USHORT HLen; // Header Length
352 USHORT PLen; // Pattern Length
353 UCHAR Header[32]; // Header buffer
354 UCHAR Pattern[32]; // Pattern buffer
355 USHORT DLen; // Data Length
356 USHORT seq;
357 UINT32 CID;
358 pid_t AtePid;
359 // counters
360 UINT32 U2M;
361 UINT32 OtherData;
362 UINT32 Beacon;
363 UINT32 OtherCount;
364 UINT32 TxAc0;
365 UINT32 TxAc1;
366 UINT32 TxAc2;
367 UINT32 TxAc3;
368 UINT32 TxHCCA;
369 UINT32 TxMgmt;
370 UINT32 RSSI0;
371 UINT32 RSSI1;
372 UINT32 RSSI2;
373 UINT32 SNR0;
374 UINT32 SNR1;
375 // control
376 //UINT32 Repeat; // Tx Cpu count
377 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
378#endif // RALINK_28xx_QA //
379} ATE_INFO, *PATE_INFO;
380
381#ifdef RALINK_28xx_QA
382struct ate_racfghdr {
383 UINT32 magic_no;
384 USHORT command_type;
385 USHORT command_id;
386 USHORT length;
387 USHORT sequence;
388 USHORT status;
389 UCHAR data[2046];
390} __attribute__((packed));
391#endif // RALINK_28xx_QA //
392#endif // RALINK_ATE //
393
394#ifdef DOT11_N_SUPPORT
395struct reordering_mpdu
396{
397 struct reordering_mpdu *next;
398 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
399 int Sequence; /* sequence number of MPDU */
400 BOOLEAN bAMSDU;
401};
402
403struct reordering_list
404{
405 struct reordering_mpdu *next;
406 int qlen;
407};
408
409struct reordering_mpdu_pool
410{
411 PVOID mem;
412 NDIS_SPIN_LOCK lock;
413 struct reordering_list freelist;
414};
415#endif // DOT11_N_SUPPORT //
416
417typedef struct _RSSI_SAMPLE {
418 CHAR LastRssi0; // last received RSSI
419 CHAR LastRssi1; // last received RSSI
420 CHAR LastRssi2; // last received RSSI
421 CHAR AvgRssi0;
422 CHAR AvgRssi1;
423 CHAR AvgRssi2;
424 SHORT AvgRssi0X8;
425 SHORT AvgRssi1X8;
426 SHORT AvgRssi2X8;
427} RSSI_SAMPLE;
428
429//
430// Queue structure and macros
431//
432typedef struct _QUEUE_ENTRY {
433 struct _QUEUE_ENTRY *Next;
434} QUEUE_ENTRY, *PQUEUE_ENTRY;
435
436// Queue structure
437typedef struct _QUEUE_HEADER {
438 PQUEUE_ENTRY Head;
439 PQUEUE_ENTRY Tail;
440 ULONG Number;
441} QUEUE_HEADER, *PQUEUE_HEADER;
442
443#define InitializeQueueHeader(QueueHeader) \
444{ \
445 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
446 (QueueHeader)->Number = 0; \
447}
448
449#define RemoveHeadQueue(QueueHeader) \
450(QueueHeader)->Head; \
451{ \
452 PQUEUE_ENTRY pNext; \
453 if ((QueueHeader)->Head != NULL) \
454 { \
455 pNext = (QueueHeader)->Head->Next; \
456 (QueueHeader)->Head = pNext; \
457 if (pNext == NULL) \
458 (QueueHeader)->Tail = NULL; \
459 (QueueHeader)->Number--; \
460 } \
461}
462
463#define InsertHeadQueue(QueueHeader, QueueEntry) \
464{ \
465 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
466 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
467 if ((QueueHeader)->Tail == NULL) \
468 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
469 (QueueHeader)->Number++; \
470}
471
472#define InsertTailQueue(QueueHeader, QueueEntry) \
473{ \
474 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
475 if ((QueueHeader)->Tail) \
476 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
477 else \
478 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
479 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
480 (QueueHeader)->Number++; \
481}
482
483//
484// Macros for flag and ref count operations
485//
486#define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
487#define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
488#define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
489#define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
490#define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
491
492#define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
493#define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
494#define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
495
496#define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
497#define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
498#define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
499
500#define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
501#define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
502#define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
503
504#ifdef CONFIG_STA_SUPPORT
505#define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
506#define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
507#define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
508#define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
509
510#define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
511#endif // CONFIG_STA_SUPPORT //
512
513#define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
514#define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
515
516
517#define INC_RING_INDEX(_idx, _RingSize) \
518{ \
519 (_idx) = (_idx+1) % (_RingSize); \
520}
521
522// We will have a cost down version which mac version is 0x3090xxxx
523#define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
524
525#define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
526#define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
527#define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
528
529#define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
530
531#define RING_PACKET_INIT(_TxRing, _idx) \
532{ \
533 _TxRing->Cell[_idx].pNdisPacket = NULL; \
534 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
535}
536
537#define TXDT_INIT(_TxD) \
538{ \
539 NdisZeroMemory(_TxD, TXD_SIZE); \
540 _TxD->DMADONE = 1; \
541}
542
543//Set last data segment
544#define RING_SET_LASTDS(_TxD, _IsSD0) \
545{ \
546 if (_IsSD0) {_TxD->LastSec0 = 1;} \
547 else {_TxD->LastSec1 = 1;} \
548}
549
550// Increase TxTsc value for next transmission
551// TODO:
552// When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
553// Should send a special event microsoft defined to request re-key
554#define INC_TX_TSC(_tsc) \
555{ \
556 int i=0; \
557 while (++_tsc[i] == 0x0) \
558 { \
559 i++; \
560 if (i == 6) \
561 break; \
562 } \
563}
564
565#ifdef DOT11_N_SUPPORT
566// StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
567#define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
568{ \
569 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
570 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
571 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
572 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
573 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
574 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
575 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
576 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
577 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
578 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
579 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
580 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
581}
582
583#define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
584{ \
585 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
586 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
587 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
588}
589#endif // DOT11_N_SUPPORT //
590
591//
592// MACRO for 32-bit PCI register read / write
593//
594// Usage : RTMP_IO_READ32(
595// PRTMP_ADAPTER pAd,
596// ULONG Register_Offset,
597// PULONG pValue)
598//
599// RTMP_IO_WRITE32(
600// PRTMP_ADAPTER pAd,
601// ULONG Register_Offset,
602// ULONG Value)
603//
604
605//
606// BBP & RF are using indirect access. Before write any value into it.
607// We have to make sure there is no outstanding command pending via checking busy bit.
608//
609#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
610//
611
612#ifdef RT2870
613#define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
614#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
615#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
616
617#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
618#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
619#endif // RT2870 //
620
621#ifdef RT30xx
622#define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
623#define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
624#endif // RT30xx //
625
626#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
627 switch (ch) \
628 { \
629 case 1: khz = 2412000; break; \
630 case 2: khz = 2417000; break; \
631 case 3: khz = 2422000; break; \
632 case 4: khz = 2427000; break; \
633 case 5: khz = 2432000; break; \
634 case 6: khz = 2437000; break; \
635 case 7: khz = 2442000; break; \
636 case 8: khz = 2447000; break; \
637 case 9: khz = 2452000; break; \
638 case 10: khz = 2457000; break; \
639 case 11: khz = 2462000; break; \
640 case 12: khz = 2467000; break; \
641 case 13: khz = 2472000; break; \
642 case 14: khz = 2484000; break; \
643 case 36: /* UNII */ khz = 5180000; break; \
644 case 40: /* UNII */ khz = 5200000; break; \
645 case 44: /* UNII */ khz = 5220000; break; \
646 case 48: /* UNII */ khz = 5240000; break; \
647 case 52: /* UNII */ khz = 5260000; break; \
648 case 56: /* UNII */ khz = 5280000; break; \
649 case 60: /* UNII */ khz = 5300000; break; \
650 case 64: /* UNII */ khz = 5320000; break; \
651 case 149: /* UNII */ khz = 5745000; break; \
652 case 153: /* UNII */ khz = 5765000; break; \
653 case 157: /* UNII */ khz = 5785000; break; \
654 case 161: /* UNII */ khz = 5805000; break; \
655 case 165: /* UNII */ khz = 5825000; break; \
656 case 100: /* HiperLAN2 */ khz = 5500000; break; \
657 case 104: /* HiperLAN2 */ khz = 5520000; break; \
658 case 108: /* HiperLAN2 */ khz = 5540000; break; \
659 case 112: /* HiperLAN2 */ khz = 5560000; break; \
660 case 116: /* HiperLAN2 */ khz = 5580000; break; \
661 case 120: /* HiperLAN2 */ khz = 5600000; break; \
662 case 124: /* HiperLAN2 */ khz = 5620000; break; \
663 case 128: /* HiperLAN2 */ khz = 5640000; break; \
664 case 132: /* HiperLAN2 */ khz = 5660000; break; \
665 case 136: /* HiperLAN2 */ khz = 5680000; break; \
666 case 140: /* HiperLAN2 */ khz = 5700000; break; \
667 case 34: /* Japan MMAC */ khz = 5170000; break; \
668 case 38: /* Japan MMAC */ khz = 5190000; break; \
669 case 42: /* Japan MMAC */ khz = 5210000; break; \
670 case 46: /* Japan MMAC */ khz = 5230000; break; \
671 case 184: /* Japan */ khz = 4920000; break; \
672 case 188: /* Japan */ khz = 4940000; break; \
673 case 192: /* Japan */ khz = 4960000; break; \
674 case 196: /* Japan */ khz = 4980000; break; \
675 case 208: /* Japan, means J08 */ khz = 5040000; break; \
676 case 212: /* Japan, means J12 */ khz = 5060000; break; \
677 case 216: /* Japan, means J16 */ khz = 5080000; break; \
678 default: khz = 2412000; break; \
679 } \
680 }
681
682#define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
683 switch (khz) \
684 { \
685 case 2412000: ch = 1; break; \
686 case 2417000: ch = 2; break; \
687 case 2422000: ch = 3; break; \
688 case 2427000: ch = 4; break; \
689 case 2432000: ch = 5; break; \
690 case 2437000: ch = 6; break; \
691 case 2442000: ch = 7; break; \
692 case 2447000: ch = 8; break; \
693 case 2452000: ch = 9; break; \
694 case 2457000: ch = 10; break; \
695 case 2462000: ch = 11; break; \
696 case 2467000: ch = 12; break; \
697 case 2472000: ch = 13; break; \
698 case 2484000: ch = 14; break; \
699 case 5180000: ch = 36; /* UNII */ break; \
700 case 5200000: ch = 40; /* UNII */ break; \
701 case 5220000: ch = 44; /* UNII */ break; \
702 case 5240000: ch = 48; /* UNII */ break; \
703 case 5260000: ch = 52; /* UNII */ break; \
704 case 5280000: ch = 56; /* UNII */ break; \
705 case 5300000: ch = 60; /* UNII */ break; \
706 case 5320000: ch = 64; /* UNII */ break; \
707 case 5745000: ch = 149; /* UNII */ break; \
708 case 5765000: ch = 153; /* UNII */ break; \
709 case 5785000: ch = 157; /* UNII */ break; \
710 case 5805000: ch = 161; /* UNII */ break; \
711 case 5825000: ch = 165; /* UNII */ break; \
712 case 5500000: ch = 100; /* HiperLAN2 */ break; \
713 case 5520000: ch = 104; /* HiperLAN2 */ break; \
714 case 5540000: ch = 108; /* HiperLAN2 */ break; \
715 case 5560000: ch = 112; /* HiperLAN2 */ break; \
716 case 5580000: ch = 116; /* HiperLAN2 */ break; \
717 case 5600000: ch = 120; /* HiperLAN2 */ break; \
718 case 5620000: ch = 124; /* HiperLAN2 */ break; \
719 case 5640000: ch = 128; /* HiperLAN2 */ break; \
720 case 5660000: ch = 132; /* HiperLAN2 */ break; \
721 case 5680000: ch = 136; /* HiperLAN2 */ break; \
722 case 5700000: ch = 140; /* HiperLAN2 */ break; \
723 case 5170000: ch = 34; /* Japan MMAC */ break; \
724 case 5190000: ch = 38; /* Japan MMAC */ break; \
725 case 5210000: ch = 42; /* Japan MMAC */ break; \
726 case 5230000: ch = 46; /* Japan MMAC */ break; \
727 case 4920000: ch = 184; /* Japan */ break; \
728 case 4940000: ch = 188; /* Japan */ break; \
729 case 4960000: ch = 192; /* Japan */ break; \
730 case 4980000: ch = 196; /* Japan */ break; \
731 case 5040000: ch = 208; /* Japan, means J08 */ break; \
732 case 5060000: ch = 212; /* Japan, means J12 */ break; \
733 case 5080000: ch = 216; /* Japan, means J16 */ break; \
734 default: ch = 1; break; \
735 } \
736 }
737
738//
739// Common fragment list structure - Identical to the scatter gather frag list structure
740//
741//#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
742//#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
743#define NIC_MAX_PHYS_BUF_COUNT 8
744
745typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
746 PVOID Address;
747 ULONG Length;
748 PULONG Reserved;
749} RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
750
751
752typedef struct _RTMP_SCATTER_GATHER_LIST {
753 ULONG NumberOfElements;
754 PULONG Reserved;
755 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
756} RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
757
758//
759// Some utility macros
760//
761#ifndef min
762#define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
763#endif
764
765#ifndef max
766#define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
767#endif
768
769#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))))
770
771#define INC_COUNTER64(Val) (Val.QuadPart++)
772
773#define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
774#define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
775#define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
776#define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
777
778// Check LEAP & CCKM flags
779#define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
780#define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
781
782// if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
783#define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
784{ \
785 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
786 { \
787 _pExtraLlcSnapEncap = SNAP_802_1H; \
788 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
789 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
790 { \
791 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
792 } \
793 } \
794 else \
795 { \
796 _pExtraLlcSnapEncap = NULL; \
797 } \
798}
799
800// New Define for new Tx Path.
801#define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
802{ \
803 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
804 { \
805 _pExtraLlcSnapEncap = SNAP_802_1H; \
806 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
807 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
808 { \
809 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
810 } \
811 } \
812 else \
813 { \
814 _pExtraLlcSnapEncap = NULL; \
815 } \
816}
817
818
819#define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
820{ \
821 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
822 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
823 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
824}
825
826// if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
827// else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
828// else remove the LLC/SNAP field from the result Ethernet frame
829// Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
830// Note:
831// _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
832// _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
833#define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
834{ \
835 char LLC_Len[2]; \
836 \
837 _pRemovedLLCSNAP = NULL; \
838 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
839 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
840 { \
841 PUCHAR pProto = _pData + 6; \
842 \
843 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
844 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
845 { \
846 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
847 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
848 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
849 } \
850 else \
851 { \
852 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
853 _pRemovedLLCSNAP = _pData; \
854 _DataSize -= LENGTH_802_1_H; \
855 _pData += LENGTH_802_1_H; \
856 } \
857 } \
858 else \
859 { \
860 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
861 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
862 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
863 } \
864}
865
866#define SWITCH_AB( _pAA, _pBB) \
867{ \
868 PVOID pCC; \
869 pCC = _pBB; \
870 _pBB = _pAA; \
871 _pAA = pCC; \
872}
873
874// Enqueue this frame to MLME engine
875// We need to enqueue the whole frame because MLME need to pass data type
876// information from 802.11 header
877#ifdef RT2870
878#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
879{ \
880 UINT32 High32TSF=0, Low32TSF=0; \
881 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
882}
883#endif // RT2870 //
884
885#ifdef RT30xx
886//Need to collect each ant's rssi concurrently
887//rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
888#define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
889{ \
890 SHORT AvgRssi; \
891 UCHAR UsedAnt; \
892 if (_pAd->RxAnt.EvaluatePeriod == 0) \
893 { \
894 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
895 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
896 if (AvgRssi < 0) \
897 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
898 else \
899 AvgRssi = _rssi1 << 3; \
900 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
901 } \
902 else \
903 { \
904 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
905 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
906 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
907 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
908 else \
909 { \
910 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
911 AvgRssi = _rssi1 << 3; \
912 } \
913 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
914 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
915 } \
916}
917#endif // RT30xx //
918
919
920#define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
921 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
922
923#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
924#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
925
926//
927// Check if it is Japan W53(ch52,56,60,64) channel.
928//
929#define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
930
931#ifdef CONFIG_STA_SUPPORT
932#define STA_PORT_SECURED(_pAd) \
933{ \
934 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
935 NdisAcquireSpinLock(&_pAd->MacTabLock); \
936 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
937 NdisReleaseSpinLock(&_pAd->MacTabLock); \
938}
939#endif // CONFIG_STA_SUPPORT //
940
941
942//
943// Register set pair for initialzation register set definition
944//
945typedef struct _RTMP_REG_PAIR
946{
947 ULONG Register;
948 ULONG Value;
949} RTMP_REG_PAIR, *PRTMP_REG_PAIR;
950
951typedef struct _REG_PAIR
952{
953 UCHAR Register;
954 UCHAR Value;
955} REG_PAIR, *PREG_PAIR;
956
957//
958// Register set pair for initialzation register set definition
959//
960typedef struct _RTMP_RF_REGS
961{
962 UCHAR Channel;
963 ULONG R1;
964 ULONG R2;
965 ULONG R3;
966 ULONG R4;
967} RTMP_RF_REGS, *PRTMP_RF_REGS;
968
969typedef struct _FREQUENCY_ITEM {
970 UCHAR Channel;
971 UCHAR N;
972 UCHAR R;
973 UCHAR K;
974} FREQUENCY_ITEM, *PFREQUENCY_ITEM;
975
976//
977// Data buffer for DMA operation, the buffer must be contiguous physical memory
978// Both DMA to / from CPU use the same structure.
979//
980typedef struct _RTMP_DMABUF
981{
982 ULONG AllocSize;
983 PVOID AllocVa; // TxBuf virtual address
984 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
985} RTMP_DMABUF, *PRTMP_DMABUF;
986
987
988typedef union _HEADER_802_11_SEQ{
989#ifdef RT_BIG_ENDIAN
990 struct {
991 USHORT Sequence:12;
992 USHORT Frag:4;
993 } field;
994#else
995 struct {
996 USHORT Frag:4;
997 USHORT Sequence:12;
998 } field;
999#endif
1000 USHORT value;
1001} HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
1002
1003//
1004// Data buffer for DMA operation, the buffer must be contiguous physical memory
1005// Both DMA to / from CPU use the same structure.
1006//
1007typedef struct _RTMP_REORDERBUF
1008{
1009 BOOLEAN IsFull;
1010 PVOID AllocVa; // TxBuf virtual address
1011 UCHAR Header802_3[14];
1012 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
1013 UCHAR DataOffset;
1014 USHORT Datasize;
1015 ULONG AllocSize;
1016#ifdef RT2870
1017 PUCHAR AllocPa;
1018#endif // RT2870 //
1019} RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1020
1021//
1022// Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1023// contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1024// which won't be released, driver has to wait until upper layer return the packet
1025// before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1026// to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1027// which driver should ACK upper layer when the tx is physically done or failed.
1028//
1029typedef struct _RTMP_DMACB
1030{
1031 ULONG AllocSize; // Control block size
1032 PVOID AllocVa; // Control block virtual address
1033 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1034 PNDIS_PACKET pNdisPacket;
1035 PNDIS_PACKET pNextNdisPacket;
1036
1037 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1038} RTMP_DMACB, *PRTMP_DMACB;
1039
1040typedef struct _RTMP_TX_BUF
1041{
1042 PQUEUE_ENTRY Next;
1043 UCHAR Index;
1044 ULONG AllocSize; // Control block size
1045 PVOID AllocVa; // Control block virtual address
1046 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1047} RTMP_TXBUF, *PRTMP_TXBUF;
1048
1049typedef struct _RTMP_RX_BUF
1050{
1051 BOOLEAN InUse;
1052 ULONG ByBaRecIndex;
1053 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1054} RTMP_RXBUF, *PRTMP_RXBUF;
1055typedef struct _RTMP_TX_RING
1056{
1057 RTMP_DMACB Cell[TX_RING_SIZE];
1058 UINT32 TxCpuIdx;
1059 UINT32 TxDmaIdx;
1060 UINT32 TxSwFreeIdx; // software next free tx index
1061} RTMP_TX_RING, *PRTMP_TX_RING;
1062
1063typedef struct _RTMP_RX_RING
1064{
1065 RTMP_DMACB Cell[RX_RING_SIZE];
1066 UINT32 RxCpuIdx;
1067 UINT32 RxDmaIdx;
1068 INT32 RxSwReadIdx; // software next read index
1069} RTMP_RX_RING, *PRTMP_RX_RING;
1070
1071typedef struct _RTMP_MGMT_RING
1072{
1073 RTMP_DMACB Cell[MGMT_RING_SIZE];
1074 UINT32 TxCpuIdx;
1075 UINT32 TxDmaIdx;
1076 UINT32 TxSwFreeIdx; // software next free tx index
1077} RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1078
1079//
1080// Statistic counter structure
1081//
1082typedef struct _COUNTER_802_3
1083{
1084 // General Stats
1085 ULONG GoodTransmits;
1086 ULONG GoodReceives;
1087 ULONG TxErrors;
1088 ULONG RxErrors;
1089 ULONG RxNoBuffer;
1090
1091 // Ethernet Stats
1092 ULONG RcvAlignmentErrors;
1093 ULONG OneCollision;
1094 ULONG MoreCollisions;
1095
1096} COUNTER_802_3, *PCOUNTER_802_3;
1097
1098typedef struct _COUNTER_802_11 {
1099 ULONG Length;
1100 LARGE_INTEGER LastTransmittedFragmentCount;
1101 LARGE_INTEGER TransmittedFragmentCount;
1102 LARGE_INTEGER MulticastTransmittedFrameCount;
1103 LARGE_INTEGER FailedCount;
1104 LARGE_INTEGER RetryCount;
1105 LARGE_INTEGER MultipleRetryCount;
1106 LARGE_INTEGER RTSSuccessCount;
1107 LARGE_INTEGER RTSFailureCount;
1108 LARGE_INTEGER ACKFailureCount;
1109 LARGE_INTEGER FrameDuplicateCount;
1110 LARGE_INTEGER ReceivedFragmentCount;
1111 LARGE_INTEGER MulticastReceivedFrameCount;
1112 LARGE_INTEGER FCSErrorCount;
1113} COUNTER_802_11, *PCOUNTER_802_11;
1114
1115typedef struct _COUNTER_RALINK {
1116 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1117 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1118 ULONG BeenDisassociatedCount;
1119 ULONG BadCQIAutoRecoveryCount;
1120 ULONG PoorCQIRoamingCount;
1121 ULONG MgmtRingFullCount;
1122 ULONG RxCountSinceLastNULL;
1123 ULONG RxCount;
1124 ULONG RxRingErrCount;
1125 ULONG KickTxCount;
1126 ULONG TxRingErrCount;
1127 LARGE_INTEGER RealFcsErrCount;
1128 ULONG PendingNdisPacketCount;
1129
1130 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1131 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1132 UINT32 OneSecTxDoneCount;
1133 ULONG OneSecRxCount;
1134 UINT32 OneSecTxAggregationCount;
1135 UINT32 OneSecRxAggregationCount;
1136
1137 UINT32 OneSecFrameDuplicateCount;
1138
1139#ifdef RT2870
1140 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1141#endif // RT2870 //
1142
1143 UINT32 OneSecTxNoRetryOkCount;
1144 UINT32 OneSecTxRetryOkCount;
1145 UINT32 OneSecTxFailCount;
1146 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1147 UINT32 OneSecRxOkCnt; // RX without error
1148 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1149 UINT32 OneSecRxFcsErrCnt; // CRC error
1150 UINT32 OneSecBeaconSentCnt;
1151 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1152 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1153 ULONG DuplicateRcv;
1154 ULONG TxAggCount;
1155 ULONG TxNonAggCount;
1156 ULONG TxAgg1MPDUCount;
1157 ULONG TxAgg2MPDUCount;
1158 ULONG TxAgg3MPDUCount;
1159 ULONG TxAgg4MPDUCount;
1160 ULONG TxAgg5MPDUCount;
1161 ULONG TxAgg6MPDUCount;
1162 ULONG TxAgg7MPDUCount;
1163 ULONG TxAgg8MPDUCount;
1164 ULONG TxAgg9MPDUCount;
1165 ULONG TxAgg10MPDUCount;
1166 ULONG TxAgg11MPDUCount;
1167 ULONG TxAgg12MPDUCount;
1168 ULONG TxAgg13MPDUCount;
1169 ULONG TxAgg14MPDUCount;
1170 ULONG TxAgg15MPDUCount;
1171 ULONG TxAgg16MPDUCount;
1172
1173 LARGE_INTEGER TransmittedOctetsInAMSDU;
1174 LARGE_INTEGER TransmittedAMSDUCount;
1175 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1176 LARGE_INTEGER ReceivedAMSDUCount;
1177 LARGE_INTEGER TransmittedAMPDUCount;
1178 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1179 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1180 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1181} COUNTER_RALINK, *PCOUNTER_RALINK;
1182
1183typedef struct _PID_COUNTER {
1184 ULONG TxAckRequiredCount; // CRC error
1185 ULONG TxAggreCount;
1186 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1187 ULONG LastSuccessRate;
1188} PID_COUNTER, *PPID_COUNTER;
1189
1190typedef struct _COUNTER_DRS {
1191 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1192 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1193 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1194 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1195 ULONG CurrTxRateStableTime; // # of second in current TX rate
1196 BOOLEAN fNoisyEnvironment;
1197 BOOLEAN fLastSecAccordingRSSI;
1198 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1199 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1200 ULONG LastTxOkCount;
1201} COUNTER_DRS, *PCOUNTER_DRS;
1202
1203//
1204// Arcfour Structure Added by PaulWu
1205//
1206typedef struct _ARCFOUR
1207{
1208 UINT X;
1209 UINT Y;
1210 UCHAR STATE[256];
1211} ARCFOURCONTEXT, *PARCFOURCONTEXT;
1212
1213// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1214typedef struct _RECEIVE_SETTING {
1215#ifdef RT_BIG_ENDIAN
1216 USHORT MIMO:1;
1217 USHORT OFDM:1;
1218 USHORT rsv:3;
1219 USHORT STBC:2; //SPACE
1220 USHORT ShortGI:1;
1221 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1222 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1223#else
1224 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1225 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1226 USHORT ShortGI:1;
1227 USHORT STBC:2; //SPACE
1228 USHORT rsv:3;
1229 USHORT OFDM:1;
1230 USHORT MIMO:1;
1231#endif
1232 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1233
1234// Shared key data structure
1235typedef struct _WEP_KEY {
1236 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1237 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1238} WEP_KEY, *PWEP_KEY;
1239
1240typedef struct _CIPHER_KEY {
1241 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1242 UCHAR RxMic[8]; // make alignment
1243 UCHAR TxMic[8];
1244 UCHAR TxTsc[6]; // 48bit TSC value
1245 UCHAR RxTsc[6]; // 48bit TSC value
1246 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1247 UCHAR KeyLen;
1248#ifdef CONFIG_STA_SUPPORT
1249 UCHAR BssId[6];
1250#endif // CONFIG_STA_SUPPORT //
1251 // Key length for each key, 0: entry is invalid
1252 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1253} CIPHER_KEY, *PCIPHER_KEY;
1254
1255typedef struct _BBP_TUNING_STRUCT {
1256 BOOLEAN Enable;
1257 UCHAR FalseCcaCountUpperBound; // 100 per sec
1258 UCHAR FalseCcaCountLowerBound; // 10 per sec
1259 UCHAR R17LowerBound; // specified in E2PROM
1260 UCHAR R17UpperBound; // 0x68 according to David Tung
1261 UCHAR CurrentR17Value;
1262} BBP_TUNING, *PBBP_TUNING;
1263
1264typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1265 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1266 UCHAR EvaluateStableCnt;
1267 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1268 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1269 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1270 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1271 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1272 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1273 SHORT Pair1LastAvgRssi; //
1274 SHORT Pair2LastAvgRssi; //
1275 ULONG RcvPktNumWhenEvaluate;
1276 BOOLEAN FirstPktArrivedWhenEvaluate;
1277 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1278} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1279
1280typedef struct _LEAP_AUTH_INFO {
1281 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1282 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1283 UCHAR Reserve[2];
1284 UCHAR UserName[256]; //LEAP, User name
1285 ULONG UserNameLen;
1286 UCHAR Password[256]; //LEAP, User Password
1287 ULONG PasswordLen;
1288} LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1289
1290typedef struct {
1291 UCHAR Addr[MAC_ADDR_LEN];
1292 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1293 //00 02-Authentication timeout
1294 //00 03-Challenge from AP failed
1295 //00 04-Challenge to AP failed
1296 BOOLEAN Reported;
1297} ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1298
1299typedef struct {
1300 UCHAR RogueApNr;
1301 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1302} ROGUEAP_TABLE, *PROGUEAP_TABLE;
1303
1304typedef struct {
1305 BOOLEAN Enable;
1306 UCHAR Delta;
1307 BOOLEAN PlusSign;
1308} CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1309
1310//
1311// Receive Tuple Cache Format
1312//
1313typedef struct _TUPLE_CACHE {
1314 BOOLEAN Valid;
1315 UCHAR MacAddress[MAC_ADDR_LEN];
1316 USHORT Sequence;
1317 USHORT Frag;
1318} TUPLE_CACHE, *PTUPLE_CACHE;
1319
1320//
1321// Fragment Frame structure
1322//
1323typedef struct _FRAGMENT_FRAME {
1324 PNDIS_PACKET pFragPacket;
1325 ULONG RxSize;
1326 USHORT Sequence;
1327 USHORT LastFrag;
1328 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1329} FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1330
1331
1332//
1333// Packet information for NdisQueryPacket
1334//
1335typedef struct _PACKET_INFO {
1336 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1337 UINT BufferCount ; // Number of Buffer descriptor chained
1338 UINT TotalPacketLength ; // Self explained
1339 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1340} PACKET_INFO, *PPACKET_INFO;
1341
1342//
1343// Tkip Key structure which RC4 key & MIC calculation
1344//
1345typedef struct _TKIP_KEY_INFO {
1346 UINT nBytesInM; // # bytes in M for MICKEY
1347 ULONG IV16;
1348 ULONG IV32;
1349 ULONG K0; // for MICKEY Low
1350 ULONG K1; // for MICKEY Hig
1351 ULONG L; // Current state for MICKEY
1352 ULONG R; // Current state for MICKEY
1353 ULONG M; // Message accumulator for MICKEY
1354 UCHAR RC4KEY[16];
1355 UCHAR MIC[8];
1356} TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1357
1358//
1359// Private / Misc data, counters for driver internal use
1360//
1361typedef struct __PRIVATE_STRUC {
1362 UINT SystemResetCnt; // System reset counter
1363 UINT TxRingFullCnt; // Tx ring full occurrance number
1364 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1365 // Variables for WEP encryption / decryption in rtmp_wep.c
1366 UINT FCSCRC32;
1367 ARCFOURCONTEXT WEPCONTEXT;
1368 // Tkip stuff
1369 TKIP_KEY_INFO Tx;
1370 TKIP_KEY_INFO Rx;
1371} PRIVATE_STRUC, *PPRIVATE_STRUC;
1372
1373// structure to tune BBP R66 (BBP TUNING)
1374typedef struct _BBP_R66_TUNING {
1375 BOOLEAN bEnable;
1376 USHORT FalseCcaLowerThreshold; // default 100
1377 USHORT FalseCcaUpperThreshold; // default 512
1378 UCHAR R66Delta;
1379 UCHAR R66CurrentValue;
1380 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1381} BBP_R66_TUNING, *PBBP_R66_TUNING;
1382
1383// structure to store channel TX power
1384typedef struct _CHANNEL_TX_POWER {
1385 USHORT RemainingTimeForUse; //unit: sec
1386 UCHAR Channel;
1387#ifdef DOT11N_DRAFT3
1388 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1389#endif // DOT11N_DRAFT3 //
1390 CHAR Power;
1391 CHAR Power2;
1392 UCHAR MaxTxPwr;
1393 UCHAR DfsReq;
1394} CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1395
1396// structure to store 802.11j channel TX power
1397typedef struct _CHANNEL_11J_TX_POWER {
1398 UCHAR Channel;
1399 UCHAR BW; // BW_10 or BW_20
1400 CHAR Power;
1401 CHAR Power2;
1402 USHORT RemainingTimeForUse; //unit: sec
1403} CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1404
1405typedef enum _ABGBAND_STATE_ {
1406 UNKNOWN_BAND,
1407 BG_BAND,
1408 A_BAND,
1409} ABGBAND_STATE;
1410
1411typedef struct _MLME_STRUCT {
1412#ifdef CONFIG_STA_SUPPORT
1413 // STA state machines
1414 STATE_MACHINE CntlMachine;
1415 STATE_MACHINE AssocMachine;
1416 STATE_MACHINE AuthMachine;
1417 STATE_MACHINE AuthRspMachine;
1418 STATE_MACHINE SyncMachine;
1419 STATE_MACHINE WpaPskMachine;
1420 STATE_MACHINE LeapMachine;
1421 STATE_MACHINE AironetMachine;
1422 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1423 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1424 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1425 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1426 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1427 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1428#endif // CONFIG_STA_SUPPORT //
1429 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1430 // Action
1431 STATE_MACHINE ActMachine;
1432
1433
1434#ifdef QOS_DLS_SUPPORT
1435 STATE_MACHINE DlsMachine;
1436 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1437#endif // QOS_DLS_SUPPORT //
1438
1439
1440
1441
1442 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1443 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1444 ULONG LastSendNULLpsmTime;
1445
1446 BOOLEAN bRunning;
1447 NDIS_SPIN_LOCK TaskLock;
1448 MLME_QUEUE Queue;
1449
1450 UINT ShiftReg;
1451
1452 RALINK_TIMER_STRUCT PeriodicTimer;
1453 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1454 RALINK_TIMER_STRUCT LinkDownTimer;
1455 RALINK_TIMER_STRUCT LinkUpTimer;
1456 ULONG PeriodicRound;
1457 ULONG OneSecPeriodicRound;
1458
1459 UCHAR RealRxPath;
1460 BOOLEAN bLowThroughput;
1461 BOOLEAN bEnableAutoAntennaCheck;
1462 RALINK_TIMER_STRUCT RxAntEvalTimer;
1463
1464#ifdef RT30xx
1465 UCHAR CaliBW40RfR24;
1466 UCHAR CaliBW20RfR24;
1467#endif // RT30xx //
1468
1469} MLME_STRUCT, *PMLME_STRUCT;
1470
1471// structure for radar detection and channel switch
1472typedef struct _RADAR_DETECT_STRUCT {
1473 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1474 UCHAR CSCount; //Channel switch counter
1475 UCHAR CSPeriod; //Channel switch period (beacon count)
1476 UCHAR RDCount; //Radar detection counter
1477 UCHAR RDMode; //Radar Detection mode
1478 UCHAR RDDurRegion; //Radar detection duration region
1479 UCHAR BBPR16;
1480 UCHAR BBPR17;
1481 UCHAR BBPR18;
1482 UCHAR BBPR21;
1483 UCHAR BBPR22;
1484 UCHAR BBPR64;
1485 ULONG InServiceMonitorCount; // unit: sec
1486 UINT8 DfsSessionTime;
1487 BOOLEAN bFastDfs;
1488 UINT8 ChMovingTime;
1489 UINT8 LongPulseRadarTh;
1490} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1491
1492#ifdef CARRIER_DETECTION_SUPPORT
1493typedef enum CD_STATE_n
1494{
1495 CD_NORMAL,
1496 CD_SILENCE,
1497 CD_MAX_STATE
1498} CD_STATE;
1499
1500typedef struct CARRIER_DETECTION_s
1501{
1502 BOOLEAN Enable;
1503 UINT8 CDSessionTime;
1504 UINT8 CDPeriod;
1505 CD_STATE CD_State;
1506} CARRIER_DETECTION, *PCARRIER_DETECTION;
1507#endif // CARRIER_DETECTION_SUPPORT //
1508
1509typedef enum _REC_BLOCKACK_STATUS
1510{
1511 Recipient_NONE=0,
1512 Recipient_USED,
1513 Recipient_HandleRes,
1514 Recipient_Accept
1515} REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1516
1517typedef enum _ORI_BLOCKACK_STATUS
1518{
1519 Originator_NONE=0,
1520 Originator_USED,
1521 Originator_WaitRes,
1522 Originator_Done
1523} ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1524
1525#ifdef DOT11_N_SUPPORT
1526typedef struct _BA_ORI_ENTRY{
1527 UCHAR Wcid;
1528 UCHAR TID;
1529 UCHAR BAWinSize;
1530 UCHAR Token;
1531// Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1532 USHORT Sequence;
1533 USHORT TimeOutValue;
1534 ORI_BLOCKACK_STATUS ORI_BA_Status;
1535 RALINK_TIMER_STRUCT ORIBATimer;
1536 PVOID pAdapter;
1537} BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1538
1539typedef struct _BA_REC_ENTRY {
1540 UCHAR Wcid;
1541 UCHAR TID;
1542 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1543 //UCHAR NumOfRxPkt;
1544 //UCHAR Curindidx; // the head in the RX reordering buffer
1545 USHORT LastIndSeq;
1546// USHORT LastIndSeqAtTimer;
1547 USHORT TimeOutValue;
1548 RALINK_TIMER_STRUCT RECBATimer;
1549 ULONG LastIndSeqAtTimer;
1550 ULONG nDropPacket;
1551 ULONG rcvSeq;
1552 REC_BLOCKACK_STATUS REC_BA_Status;
1553// UCHAR RxBufIdxUsed;
1554 // corresponding virtual address for RX reordering packet storage.
1555 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1556 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1557// struct _BA_REC_ENTRY *pNext;
1558 PVOID pAdapter;
1559 struct reordering_list list;
1560} BA_REC_ENTRY, *PBA_REC_ENTRY;
1561
1562
1563typedef struct {
1564 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1565 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1566 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1567 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1568} BA_TABLE, *PBA_TABLE;
1569
1570//For QureyBATableOID use;
1571typedef struct PACKED _OID_BA_REC_ENTRY{
1572 UCHAR MACAddr[MAC_ADDR_LEN];
1573 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1574 UCHAR rsv;
1575 UCHAR BufSize[8];
1576 REC_BLOCKACK_STATUS REC_BA_Status[8];
1577} OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1578
1579//For QureyBATableOID use;
1580typedef struct PACKED _OID_BA_ORI_ENTRY{
1581 UCHAR MACAddr[MAC_ADDR_LEN];
1582 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
1583 UCHAR rsv;
1584 UCHAR BufSize[8];
1585 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1586} OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1587
1588typedef struct _QUERYBA_TABLE{
1589 OID_BA_ORI_ENTRY BAOriEntry[32];
1590 OID_BA_REC_ENTRY BARecEntry[32];
1591 UCHAR OriNum;// Number of below BAOriEntry
1592 UCHAR RecNum;// Number of below BARecEntry
1593} QUERYBA_TABLE, *PQUERYBA_TABLE;
1594
1595typedef union _BACAP_STRUC {
1596#ifdef RT_BIG_ENDIAN
1597 struct {
1598 UINT32 :4;
1599 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.
1600 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1601 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1602 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1603 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1604 UINT32 MpduDensity:3;
1605 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1606 UINT32 AutoBA:1; // automatically BA
1607 UINT32 TxBAWinLimit:8;
1608 UINT32 RxBAWinLimit:8;
1609 } field;
1610#else
1611 struct {
1612 UINT32 RxBAWinLimit:8;
1613 UINT32 TxBAWinLimit:8;
1614 UINT32 AutoBA:1; // automatically BA
1615 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1616 UINT32 MpduDensity:3;
1617 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1618 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1619 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1620 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1621 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.
1622 UINT32 :4;
1623 } field;
1624#endif
1625 UINT32 word;
1626} BACAP_STRUC, *PBACAP_STRUC;
1627#endif // DOT11_N_SUPPORT //
1628
1629//This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1630typedef struct _IOT_STRUC {
1631 UCHAR Threshold[2];
1632 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1633 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1634 ULONG OneSecInWindowCount;
1635 ULONG OneSecFrameDuplicateCount;
1636 ULONG OneSecOutWindowCount;
1637 UCHAR DelOriAct;
1638 UCHAR DelRecAct;
1639 UCHAR RTSShortProt;
1640 UCHAR RTSLongProt;
1641 BOOLEAN bRTSLongProtOn;
1642#ifdef CONFIG_STA_SUPPORT
1643 BOOLEAN bLastAtheros;
1644 BOOLEAN bCurrentAtheros;
1645 BOOLEAN bNowAtherosBurstOn;
1646 BOOLEAN bNextDisableRxBA;
1647 BOOLEAN bToggle;
1648#endif // CONFIG_STA_SUPPORT //
1649} IOT_STRUC, *PIOT_STRUC;
1650
1651// This is the registry setting for 802.11n transmit setting. Used in advanced page.
1652typedef union _REG_TRANSMIT_SETTING {
1653#ifdef RT_BIG_ENDIAN
1654 struct {
1655 UINT32 rsv:13;
1656 UINT32 EXTCHA:2;
1657 UINT32 HTMODE:1;
1658 UINT32 TRANSNO:2;
1659 UINT32 STBC:1; //SPACE
1660 UINT32 ShortGI:1;
1661 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1662 UINT32 TxBF:1; // 3*3
1663 UINT32 rsv0:10;
1664 //UINT32 MCS:7; // MCS
1665 //UINT32 PhyMode:4;
1666 } field;
1667#else
1668 struct {
1669 //UINT32 PhyMode:4;
1670 //UINT32 MCS:7; // MCS
1671 UINT32 rsv0:10;
1672 UINT32 TxBF:1;
1673 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1674 UINT32 ShortGI:1;
1675 UINT32 STBC:1; //SPACE
1676 UINT32 TRANSNO:2;
1677 UINT32 HTMODE:1;
1678 UINT32 EXTCHA:2;
1679 UINT32 rsv:13;
1680 } field;
1681#endif
1682 UINT32 word;
1683} REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1684
1685typedef union _DESIRED_TRANSMIT_SETTING {
1686#ifdef RT_BIG_ENDIAN
1687 struct {
1688 USHORT rsv:3;
1689 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1690 USHORT PhyMode:4;
1691 USHORT MCS:7; // MCS
1692 } field;
1693#else
1694 struct {
1695 USHORT MCS:7; // MCS
1696 USHORT PhyMode:4;
1697 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1698 USHORT rsv:3;
1699 } field;
1700#endif
1701 USHORT word;
1702 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1703
1704typedef struct {
1705 BOOLEAN IsRecipient;
1706 UCHAR MACAddr[MAC_ADDR_LEN];
1707 UCHAR TID;
1708 UCHAR nMSDU;
1709 USHORT TimeOut;
1710 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1711} OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1712
1713//
1714// Multiple SSID structure
1715//
1716#define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1717#define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1718
1719/* clear bcmc TIM bit */
1720#define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1721 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1722
1723/* set bcmc TIM bit */
1724#define WLAN_MR_TIM_BCMC_SET(apidx) \
1725 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1726
1727/* clear a station PS TIM bit */
1728#define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1729 { UCHAR tim_offset = wcid >> 3; \
1730 UCHAR bit_offset = wcid & 0x7; \
1731 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1732
1733/* set a station PS TIM bit */
1734#define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1735 { UCHAR tim_offset = wcid >> 3; \
1736 UCHAR bit_offset = wcid & 0x7; \
1737 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1738
1739#ifdef RT2870
1740#define BEACON_BITMAP_MASK 0xff
1741typedef struct _BEACON_SYNC_STRUCT_
1742{
1743 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1744 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1745 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1746 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1747 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1748 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1749 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1750}BEACON_SYNC_STRUCT;
1751#endif // RT2870 //
1752
1753typedef struct _MULTISSID_STRUCT {
1754 UCHAR Bssid[MAC_ADDR_LEN];
1755 UCHAR SsidLen;
1756 CHAR Ssid[MAX_LEN_OF_SSID];
1757 USHORT CapabilityInfo;
1758
1759 PNET_DEV MSSIDDev;
1760
1761 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1762 NDIS_802_11_WEP_STATUS WepStatus;
1763 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1764 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1765
1766 ULONG TxCount;
1767 ULONG RxCount;
1768 ULONG ReceivedByteCount;
1769 ULONG TransmittedByteCount;
1770 ULONG RxErrorCount;
1771 ULONG RxDropCount;
1772
1773 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1774 RT_HT_PHY_INFO DesiredHtPhyInfo;
1775 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1776 BOOLEAN bAutoTxRateSwitch;
1777
1778 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1779 UCHAR DefaultKeyId;
1780
1781 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1782 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1783 UCHAR DesiredRatesIndex;
1784 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1785
1786// ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1787// ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1788 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1789
1790 // WPA
1791 UCHAR GMK[32];
1792 UCHAR PMK[32];
1793 UCHAR GTK[32];
1794 BOOLEAN IEEE8021X;
1795 BOOLEAN PreAuth;
1796 UCHAR GNonce[32];
1797 UCHAR PortSecured;
1798 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1799 UCHAR BANClass3Data;
1800 ULONG IsolateInterStaTraffic;
1801
1802 UCHAR RSNIE_Len[2];
1803 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1804
1805
1806 UCHAR TimIELocationInBeacon;
1807 UCHAR CapabilityInfoLocationInBeacon;
1808 // outgoing BEACON frame buffer and corresponding TXWI
1809 // PTXWI_STRUC BeaconTxWI; //
1810 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1811
1812 BOOLEAN bHideSsid;
1813 UINT16 StationKeepAliveTime; // unit: second
1814
1815 USHORT VLAN_VID;
1816 USHORT VLAN_Priority;
1817
1818 RT_802_11_ACL AccessControlList;
1819
1820 // EDCA Qos
1821 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1822 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1823
1824 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1825
1826 // For 802.1x daemon setting per BSS
1827 UCHAR radius_srv_num;
1828 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1829
1830#ifdef RTL865X_SOC
1831 unsigned int mylinkid;
1832#endif
1833
1834
1835 UINT32 RcvdConflictSsidCount;
1836 UINT32 RcvdSpoofedAssocRespCount;
1837 UINT32 RcvdSpoofedReassocRespCount;
1838 UINT32 RcvdSpoofedProbeRespCount;
1839 UINT32 RcvdSpoofedBeaconCount;
1840 UINT32 RcvdSpoofedDisassocCount;
1841 UINT32 RcvdSpoofedAuthCount;
1842 UINT32 RcvdSpoofedDeauthCount;
1843 UINT32 RcvdSpoofedUnknownMgmtCount;
1844 UINT32 RcvdReplayAttackCount;
1845
1846 CHAR RssiOfRcvdConflictSsid;
1847 CHAR RssiOfRcvdSpoofedAssocResp;
1848 CHAR RssiOfRcvdSpoofedReassocResp;
1849 CHAR RssiOfRcvdSpoofedProbeResp;
1850 CHAR RssiOfRcvdSpoofedBeacon;
1851 CHAR RssiOfRcvdSpoofedDisassoc;
1852 CHAR RssiOfRcvdSpoofedAuth;
1853 CHAR RssiOfRcvdSpoofedDeauth;
1854 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1855 CHAR RssiOfRcvdReplayAttack;
1856
1857 BOOLEAN bBcnSntReq;
1858 UCHAR BcnBufIdx;
1859} MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1860
1861
1862
1863#ifdef DOT11N_DRAFT3
1864typedef enum _BSS2040COEXIST_FLAG{
1865 BSS_2040_COEXIST_DISABLE = 0,
1866 BSS_2040_COEXIST_TIMER_FIRED = 1,
1867 BSS_2040_COEXIST_INFO_SYNC = 2,
1868 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1869}BSS2040COEXIST_FLAG;
1870#endif // DOT11N_DRAFT3 //
1871
1872// configuration common to OPMODE_AP as well as OPMODE_STA
1873typedef struct _COMMON_CONFIG {
1874
1875 BOOLEAN bCountryFlag;
1876 UCHAR CountryCode[3];
1877 UCHAR Geography;
1878 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1879 UCHAR CountryRegionForABand; // Enum of country region for A band
1880 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1881 USHORT Dsifs; // in units of usec
1882 ULONG PacketFilter; // Packet filter for receiving
1883
1884 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1885 UCHAR SsidLen; // the actual ssid length in used
1886 UCHAR LastSsidLen; // the actual ssid length in used
1887 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1888 UCHAR LastBssid[MAC_ADDR_LEN];
1889
1890 UCHAR Bssid[MAC_ADDR_LEN];
1891 USHORT BeaconPeriod;
1892 UCHAR Channel;
1893 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1894
1895 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1896 UCHAR SupRateLen;
1897 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1898 UCHAR ExtRateLen;
1899 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1900 UCHAR MaxDesiredRate;
1901 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1902
1903 ULONG BasicRateBitmap; // backup basic ratebitmap
1904
1905 BOOLEAN bAPSDCapable;
1906 BOOLEAN bInServicePeriod;
1907 BOOLEAN bAPSDAC_BE;
1908 BOOLEAN bAPSDAC_BK;
1909 BOOLEAN bAPSDAC_VI;
1910 BOOLEAN bAPSDAC_VO;
1911 BOOLEAN bNeedSendTriggerFrame;
1912 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1913 ULONG TriggerTimerCount;
1914 UCHAR MaxSPLength;
1915 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1916 // move to MULTISSID_STRUCT for MBSS
1917 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1918 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1919 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1920 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1921 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1922 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1923 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1924 //BOOLEAN bAutoTxRateSwitch;
1925 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1926 UCHAR RtsRate; // RATE_xxx
1927 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1928 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1929 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1930
1931 USHORT RtsThreshold; // in unit of BYTE
1932 USHORT FragmentThreshold; // in unit of BYTE
1933
1934 UCHAR TxPower; // in unit of mW
1935 ULONG TxPowerPercentage; // 0~100 %
1936 ULONG TxPowerDefault; // keep for TxPowerPercentage
1937
1938#ifdef DOT11_N_SUPPORT
1939 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1940 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1941#endif // DOT11_N_SUPPORT //
1942 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1943 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1944 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1945 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1946 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1947 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1948 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1949 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1950 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1951 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1952
1953#ifdef DOT11_N_SUPPORT
1954 BOOLEAN bRdg;
1955#endif // DOT11_N_SUPPORT //
1956 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1957 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1958 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1959 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1960 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1961#ifdef CONFIG_STA_SUPPORT
1962 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1963#endif // CONFIG_STA_SUPPORT //
1964 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1965 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1966 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1967 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1968 ULONG OpStatusFlags;
1969
1970 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1971 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1972 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1973
1974 // IEEE802.11H--DFS.
1975 RADAR_DETECT_STRUCT RadarDetect;
1976
1977#ifdef CARRIER_DETECTION_SUPPORT
1978 CARRIER_DETECTION CarrierDetect;
1979#endif // CARRIER_DETECTION_SUPPORT //
1980
1981#ifdef DOT11_N_SUPPORT
1982 // HT
1983 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1984 //RT_HT_CAPABILITY SupportedHtPhy;
1985 RT_HT_CAPABILITY DesiredHtPhy;
1986 HT_CAPABILITY_IE HtCapability;
1987 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1988 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1989 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1990 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
1991
1992#ifdef DOT11N_DRAFT3
1993 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1994 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1995
1996 //This IE is used for 20/40 BSS Coexistence.
1997 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1998 // ====== 11n D3.0 =======================>
1999 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
2000 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
2001 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
2002 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
2003 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
2004 USHORT Dot11BssWidthChanTranDelayFactor;
2005 USHORT Dot11OBssScanActivityThre; // Unit : percentage
2006
2007 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
2008 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
2009
2010 NDIS_SPIN_LOCK TriggerEventTabLock;
2011 BSS_2040_COEXIST_IE LastBSSCoexist2040;
2012 BSS_2040_COEXIST_IE BSSCoexist2040;
2013 TRIGGER_EVENT_TAB TriggerEventTab;
2014 UCHAR ChannelListIdx;
2015 // <====== 11n D3.0 =======================
2016 BOOLEAN bOverlapScanning;
2017#endif // DOT11N_DRAFT3 //
2018
2019 BOOLEAN bHTProtect;
2020 BOOLEAN bMIMOPSEnable;
2021 BOOLEAN bBADecline;
2022 BOOLEAN bDisableReordering;
2023 BOOLEAN bForty_Mhz_Intolerant;
2024 BOOLEAN bExtChannelSwitchAnnouncement;
2025 BOOLEAN bRcvBSSWidthTriggerEvents;
2026 ULONG LastRcvBSSWidthTriggerEventsTime;
2027
2028 UCHAR TxBASize;
2029#endif // DOT11_N_SUPPORT //
2030
2031 // Enable wireless event
2032 BOOLEAN bWirelessEvent;
2033 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
2034
2035 // Tx & Rx Stream number selection
2036 UCHAR TxStream;
2037 UCHAR RxStream;
2038
2039 // transmit phy mode, trasmit rate for Multicast.
2040#ifdef MCAST_RATE_SPECIFIC
2041 UCHAR McastTransmitMcs;
2042 UCHAR McastTransmitPhyMode;
2043#endif // MCAST_RATE_SPECIFIC //
2044
2045 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2046
2047#ifdef RT2870
2048 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
2049 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
2050 RT_HT_CAPABILITY SupportedHtPhy;
2051 ULONG MaxPktOneTxBulk;
2052 UCHAR TxBulkFactor;
2053 UCHAR RxBulkFactor;
2054
2055 BEACON_SYNC_STRUCT *pBeaconSync;
2056 RALINK_TIMER_STRUCT BeaconUpdateTimer;
2057 UINT32 BeaconAdjust;
2058 UINT32 BeaconFactor;
2059 UINT32 BeaconRemain;
2060#endif // RT2870 //
2061
2062
2063 NDIS_SPIN_LOCK MeasureReqTabLock;
2064 PMEASURE_REQ_TAB pMeasureReqTab;
2065
2066 NDIS_SPIN_LOCK TpcReqTabLock;
2067 PTPC_REQ_TAB pTpcReqTab;
2068
2069 // transmit phy mode, trasmit rate for Multicast.
2070#ifdef MCAST_RATE_SPECIFIC
2071 HTTRANSMIT_SETTING MCastPhyMode;
2072#endif // MCAST_RATE_SPECIFIC //
2073
2074#ifdef SINGLE_SKU
2075 UINT16 DefineMaxTxPwr;
2076#endif // SINGLE_SKU //
2077
2078
2079} COMMON_CONFIG, *PCOMMON_CONFIG;
2080
2081
2082#ifdef CONFIG_STA_SUPPORT
2083/* Modified by Wu Xi-Kun 4/21/2006 */
2084// STA configuration and status
2085typedef struct _STA_ADMIN_CONFIG {
2086 // GROUP 1 -
2087 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2088 // the user intended configuration, but not necessary fully equal to the final
2089 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2090 // AP or IBSS holder).
2091 // Once initialized, user configuration can only be changed via OID_xxx
2092 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2093 USHORT AtimWin; // used when starting a new IBSS
2094
2095 // GROUP 2 -
2096 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2097 // the user intended configuration, and should be always applied to the final
2098 // settings in ACTIVE BSS without compromising with the BSS holder.
2099 // Once initialized, user configuration can only be changed via OID_xxx
2100 UCHAR RssiTrigger;
2101 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2102 USHORT DefaultListenCount; // default listen count;
2103 ULONG WindowsPowerMode; // Power mode for AC power
2104 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2105 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2106 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2107 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2108
2109 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2110 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2111 USHORT DisassocReason;
2112 UCHAR DisassocSta[MAC_ADDR_LEN];
2113 USHORT DeauthReason;
2114 UCHAR DeauthSta[MAC_ADDR_LEN];
2115 USHORT AuthFailReason;
2116 UCHAR AuthFailSta[MAC_ADDR_LEN];
2117
2118 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2119 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2120 NDIS_802_11_WEP_STATUS WepStatus;
2121 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2122
2123 // Add to support different cipher suite for WPA2/WPA mode
2124 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2125 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2126 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2127 USHORT RsnCapability;
2128
2129 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2130
2131 UCHAR PMK[32]; // WPA PSK mode PMK
2132 UCHAR PTK[64]; // WPA PSK mode PTK
2133 UCHAR GTK[32]; // GTK from authenticator
2134 BSSID_INFO SavedPMK[PMKID_NO];
2135 UINT SavedPMKNum; // Saved PMKID number
2136
2137 UCHAR DefaultKeyId;
2138
2139
2140 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2141 UCHAR PortSecured;
2142
2143 // For WPA countermeasures
2144 ULONG LastMicErrorTime; // record last MIC error time
2145 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2146 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2147 // For WPA-PSK supplicant state
2148 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2149 UCHAR ReplayCounter[8];
2150 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2151 UCHAR SNonce[32]; // SNonce for WPA-PSK
2152
2153 UCHAR LastSNR0; // last received BEACON's SNR
2154 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2155 RSSI_SAMPLE RssiSample;
2156 ULONG NumOfAvgRssiSample;
2157
2158 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2159 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2160 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2161 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2162
2163 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2164 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2165 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2166 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2167 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2168 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2169 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2170
2171 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2172 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2173 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2174
2175 // New for WPA, windows want us to to keep association information and
2176 // Fixed IEs from last association response
2177 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2178 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2179 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2180 USHORT ResVarIELen; // Length of next VIE include EID & Length
2181 UCHAR ResVarIEs[MAX_VIE_LEN];
2182
2183 UCHAR RSNIE_Len;
2184 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2185
2186 // New variables used for CCX 1.0
2187 BOOLEAN bCkipOn;
2188 BOOLEAN bCkipCmicOn;
2189 UCHAR CkipFlag;
2190 UCHAR GIV[3]; //for CCX iv
2191 UCHAR RxSEQ[4];
2192 UCHAR TxSEQ[4];
2193 UCHAR CKIPMIC[4];
2194 UCHAR LeapAuthMode;
2195 LEAP_AUTH_INFO LeapAuthInfo;
2196 UCHAR HashPwd[16];
2197 UCHAR NetworkChallenge[8];
2198 UCHAR NetworkChallengeResponse[24];
2199 UCHAR PeerChallenge[8];
2200
2201 UCHAR PeerChallengeResponse[24];
2202 UCHAR SessionKey[16]; //Network session keys (NSK)
2203 RALINK_TIMER_STRUCT LeapAuthTimer;
2204 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2205
2206 // New control flags for CCX
2207 CCX_CONTROL CCXControl; // Master administration state
2208 BOOLEAN CCXEnable; // Actual CCX state
2209 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2210 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2211 UCHAR CCXReqType; // Current processing CCX request type
2212 BSS_TABLE CCXBssTab; // BSS Table
2213 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2214 USHORT FrameReportLen; // Current Frame report length
2215 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2216 USHORT RPIDensity[8]; // Array for RPI density collection
2217 // Start address of each BSS table within FrameReportBuf
2218 // It's important to update the RxPower of the corresponding Bss
2219 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2220 USHORT BeaconToken; // Token for beacon report
2221 ULONG LastBssIndex; // Most current reported Bss index
2222 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2223 UCHAR RMReqCnt; // Number of measurement request saved.
2224 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2225 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2226 // It must be the same channel with maximum duration
2227 USHORT ParallelDuration; // Maximum duration for parallel measurement
2228 UCHAR ParallelChannel; // Only one channel with parallel measurement
2229 USHORT IAPPToken; // IAPP dialog token
2230 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2231 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2232 // Hack for channel load and noise histogram parameters
2233 UCHAR NHFactor; // Parameter for Noise histogram
2234 UCHAR CLFactor; // Parameter for channel load
2235
2236 UCHAR KRK[16]; //Key Refresh Key.
2237 UCHAR BTK[32]; //Base Transient Key
2238 BOOLEAN CCKMLinkUpFlag;
2239 ULONG CCKMRN; //(Re)Association request number.
2240 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2241 UCHAR AironetCellPowerLimit; //in dBm
2242 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2243 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2244 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2245 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2246 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2247 USHORT CCXAdjacentAPChannel;
2248 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2249
2250 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2251 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2252
2253 UCHAR DtimCount; // 0.. DtimPeriod-1
2254 UCHAR DtimPeriod; // default = 3
2255
2256#ifdef QOS_DLS_SUPPORT
2257 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2258 UCHAR DlsReplayCounter[8];
2259#endif // QOS_DLS_SUPPORT //
2260 ////////////////////////////////////////////////////////////////////////////////////////
2261 // This is only for WHQL test.
2262 BOOLEAN WhqlTest;
2263 ////////////////////////////////////////////////////////////////////////////////////////
2264
2265 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2266 // Fast Roaming
2267 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2268 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2269
2270#ifdef WPA_SUPPLICANT_SUPPORT
2271 BOOLEAN IEEE8021X;
2272 BOOLEAN IEEE8021x_required_keys;
2273 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2274 UCHAR DesireSharedKeyId;
2275
2276 // 0: driver ignores wpa_supplicant
2277 // 1: wpa_supplicant initiates scanning and AP selection
2278 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2279 UCHAR WpaSupplicantUP;
2280 UCHAR WpaSupplicantScanCount;
2281#endif // WPA_SUPPLICANT_SUPPORT //
2282
2283 CHAR dev_name[16];
2284 USHORT OriDevType;
2285
2286 BOOLEAN bTGnWifiTest;
2287 BOOLEAN bScanReqIsFromWebUI;
2288
2289 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2290 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2291 RT_HT_PHY_INFO DesiredHtPhyInfo;
2292 BOOLEAN bAutoTxRateSwitch;
2293
2294
2295#ifdef EXT_BUILD_CHANNEL_LIST
2296 UCHAR IEEE80211dClientMode;
2297 UCHAR StaOriCountryCode[3];
2298 UCHAR StaOriGeography;
2299#endif // EXT_BUILD_CHANNEL_LIST //
2300} STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2301
2302// This data structure keep the current active BSS/IBSS's configuration that this STA
2303// had agreed upon joining the network. Which means these parameters are usually decided
2304// by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2305// is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2306// Normally, after SCAN or failed roaming attempts, we need to recover back to
2307// the current active settings.
2308typedef struct _STA_ACTIVE_CONFIG {
2309 USHORT Aid;
2310 USHORT AtimWin; // in kusec; IBSS parameter set element
2311 USHORT CapabilityInfo;
2312 USHORT CfpMaxDuration;
2313 USHORT CfpPeriod;
2314
2315 // Copy supported rate from desired AP's beacon. We are trying to match
2316 // AP's supported and extended rate settings.
2317 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2318 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2319 UCHAR SupRateLen;
2320 UCHAR ExtRateLen;
2321 // Copy supported ht from desired AP's beacon. We are trying to match
2322 RT_HT_PHY_INFO SupportedPhyInfo;
2323 RT_HT_CAPABILITY SupportedHtPhy;
2324} STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2325#endif // CONFIG_STA_SUPPORT //
2326
2327#ifdef RT2870
2328typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2329 NDIS_802_11_MAC_ADDRESS MacAddr;
2330 USHORT MacTabMatchWCID; // ASIC
2331 CIPHER_KEY CipherKey;
2332} RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2333#endif // RT2870 //
2334
2335// ----------- start of AP --------------------------
2336// AUTH-RSP State Machine Aux data structure
2337typedef struct _AP_MLME_AUX {
2338 UCHAR Addr[MAC_ADDR_LEN];
2339 USHORT Alg;
2340 CHAR Challenge[CIPHER_TEXT_LEN];
2341} AP_MLME_AUX, *PAP_MLME_AUX;
2342
2343// structure to define WPA Group Key Rekey Interval
2344typedef struct PACKED _RT_802_11_WPA_REKEY {
2345 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2346 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2347} RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2348
2349typedef struct _MAC_TABLE_ENTRY {
2350 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2351 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2352 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2353 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2354 BOOLEAN ValidAsMesh;
2355 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2356 BOOLEAN isCached;
2357 BOOLEAN bIAmBadAtheros;
2358
2359 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2360 //jan for wpa
2361 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2362 UCHAR CMTimerRunning;
2363 UCHAR apidx; // MBSS number
2364 UCHAR RSNIE_Len;
2365 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2366 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2367 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2368 UCHAR PTK[64];
2369 UCHAR ReTryCounter;
2370 RALINK_TIMER_STRUCT RetryTimer;
2371 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2372 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2373 NDIS_802_11_WEP_STATUS WepStatus;
2374 AP_WPA_STATE WpaState;
2375 GTK_STATE GTKState;
2376 USHORT PortSecured;
2377 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2378 CIPHER_KEY PairwiseKey;
2379 PVOID pAd;
2380 INT PMKID_CacheIdx;
2381 UCHAR PMKID[LEN_PMKID];
2382
2383
2384 UCHAR Addr[MAC_ADDR_LEN];
2385 UCHAR PsMode;
2386 SST Sst;
2387 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2388 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2389 USHORT Aid;
2390 USHORT CapabilityInfo;
2391 UCHAR LastRssi;
2392 ULONG NoDataIdleCount;
2393 UINT16 StationKeepAliveCount; // unit: second
2394 ULONG PsQIdleCount;
2395 QUEUE_HEADER PsQueue;
2396
2397 UINT32 StaConnectTime; // the live time of this station since associated with AP
2398
2399
2400#ifdef DOT11_N_SUPPORT
2401 BOOLEAN bSendBAR;
2402 USHORT NoBADataCountDown;
2403
2404 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2405 UINT TxBFCount; // 3*3
2406#endif // DOT11_N_SUPPORT //
2407 UINT FIFOCount;
2408 UINT DebugFIFOCount;
2409 UINT DebugTxCount;
2410 BOOLEAN bDlsInit;
2411
2412
2413//====================================================
2414//WDS entry needs these
2415// rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2416 UINT MatchWDSTabIdx;
2417 UCHAR MaxSupportedRate;
2418 UCHAR CurrTxRate;
2419 UCHAR CurrTxRateIndex;
2420 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2421 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2422// USHORT OneSecTxOkCount;
2423 UINT32 OneSecTxNoRetryOkCount;
2424 UINT32 OneSecTxRetryOkCount;
2425 UINT32 OneSecTxFailCount;
2426 UINT32 ContinueTxFailCnt;
2427 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2428 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2429//====================================================
2430
2431
2432
2433#ifdef CONFIG_STA_SUPPORT
2434#ifdef QOS_DLS_SUPPORT
2435 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2436#endif // QOS_DLS_SUPPORT //
2437#endif // CONFIG_STA_SUPPORT //
2438
2439 BOOLEAN fNoisyEnvironment;
2440 BOOLEAN fLastSecAccordingRSSI;
2441 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2442 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2443 ULONG LastTxOkCount;
2444 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2445
2446 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2447 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2448 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2449 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2450 ULONG ClientStatusFlags;
2451
2452 // TODO: Shall we move that to DOT11_N_SUPPORT???
2453 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2454
2455#ifdef DOT11_N_SUPPORT
2456 // HT EWC MIMO-N used parameters
2457 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2458 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2459 USHORT TXAutoBAbitmap;
2460 USHORT BADeclineBitmap;
2461 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2462 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2463 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2464
2465 // 802.11n features.
2466 UCHAR MpduDensity;
2467 UCHAR MaxRAmpduFactor;
2468 UCHAR AMsduSize;
2469 UCHAR MmpsMode; // MIMO power save more.
2470
2471 HT_CAPABILITY_IE HTCapability;
2472
2473#ifdef DOT11N_DRAFT3
2474 UCHAR BSS2040CoexistenceMgmtSupport;
2475#endif // DOT11N_DRAFT3 //
2476#endif // DOT11_N_SUPPORT //
2477
2478 BOOLEAN bAutoTxRateSwitch;
2479
2480 UCHAR RateLen;
2481 struct _MAC_TABLE_ENTRY *pNext;
2482 USHORT TxSeq[NUM_OF_TID];
2483 USHORT NonQosDataSeq;
2484
2485 RSSI_SAMPLE RssiSample;
2486
2487 UINT32 TXMCSExpected[16];
2488 UINT32 TXMCSSuccessful[16];
2489 UINT32 TXMCSFailed[16];
2490 UINT32 TXMCSAutoFallBack[16][16];
2491
2492#ifdef CONFIG_STA_SUPPORT
2493 ULONG LastBeaconRxTime;
2494#endif // CONFIG_STA_SUPPORT //
2495} MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2496
2497typedef struct _MAC_TABLE {
2498 USHORT Size;
2499 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2500 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2501 QUEUE_HEADER McastPsQueue;
2502 ULONG PsQIdleCount;
2503 BOOLEAN fAnyStationInPsm;
2504 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2505 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2506 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2507#ifdef DOT11_N_SUPPORT
2508 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2509 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2510 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2511 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2512 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2513#endif // DOT11_N_SUPPORT //
2514} MAC_TABLE, *PMAC_TABLE;
2515
2516#ifdef DOT11_N_SUPPORT
2517#define IS_HT_STA(_pMacEntry) \
2518 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2519
2520#define IS_HT_RATE(_pMacEntry) \
2521 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2522
2523#define PEER_IS_HT_RATE(_pMacEntry) \
2524 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2525#endif // DOT11_N_SUPPORT //
2526
2527typedef struct _WDS_ENTRY {
2528 BOOLEAN Valid;
2529 UCHAR Addr[MAC_ADDR_LEN];
2530 ULONG NoDataIdleCount;
2531 struct _WDS_ENTRY *pNext;
2532} WDS_ENTRY, *PWDS_ENTRY;
2533
2534typedef struct _WDS_TABLE_ENTRY {
2535 USHORT Size;
2536 UCHAR WdsAddr[MAC_ADDR_LEN];
2537 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2538 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2539 UCHAR MaxSupportedRate;
2540 UCHAR CurrTxRate;
2541 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2542 USHORT OneSecTxOkCount;
2543 USHORT OneSecTxRetryOkCount;
2544 USHORT OneSecTxFailCount;
2545 ULONG CurrTxRateStableTime; // # of second in current TX rate
2546 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2547} WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2548
2549typedef struct _RT_802_11_WDS_ENTRY {
2550 PNET_DEV dev;
2551 UCHAR Valid;
2552 UCHAR PhyMode;
2553 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2554 UCHAR MacTabMatchWCID; // ASIC
2555 NDIS_802_11_WEP_STATUS WepStatus;
2556 UCHAR KeyIdx;
2557 CIPHER_KEY WdsKey;
2558 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2559 RT_HT_PHY_INFO DesiredHtPhyInfo;
2560 BOOLEAN bAutoTxRateSwitch;
2561 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2562} RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2563
2564typedef struct _WDS_TABLE {
2565 UCHAR Mode;
2566 ULONG Size;
2567 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2568} WDS_TABLE, *PWDS_TABLE;
2569
2570typedef struct _APCLI_STRUCT {
2571 PNET_DEV dev;
2572#ifdef RTL865X_SOC
2573 unsigned int mylinkid;
2574#endif
2575 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2576 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2577 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2578 UCHAR SsidLen;
2579 CHAR Ssid[MAX_LEN_OF_SSID];
2580
2581 UCHAR CfgSsidLen;
2582 CHAR CfgSsid[MAX_LEN_OF_SSID];
2583 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2584 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2585
2586 ULONG ApCliRcvBeaconTime;
2587
2588 ULONG CtrlCurrState;
2589 ULONG SyncCurrState;
2590 ULONG AuthCurrState;
2591 ULONG AssocCurrState;
2592 ULONG WpaPskCurrState;
2593
2594 USHORT AuthReqCnt;
2595 USHORT AssocReqCnt;
2596
2597 ULONG ClientStatusFlags;
2598 UCHAR MpduDensity;
2599
2600 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2601 NDIS_802_11_WEP_STATUS WepStatus;
2602
2603 // Add to support different cipher suite for WPA2/WPA mode
2604 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2605 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2606 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2607 USHORT RsnCapability;
2608
2609 UCHAR PSK[100]; // reserve PSK key material
2610 UCHAR PSKLen;
2611 UCHAR PMK[32]; // WPA PSK mode PMK
2612 //UCHAR PTK[64]; // WPA PSK mode PTK
2613 UCHAR GTK[32]; // GTK from authenticator
2614
2615 //CIPHER_KEY PairwiseKey;
2616 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2617 UCHAR DefaultKeyId;
2618
2619 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2620 //UCHAR PortSecured;
2621
2622 // store RSN_IE built by driver
2623 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2624 UCHAR RSNIE_Len;
2625
2626 // For WPA countermeasures
2627 ULONG LastMicErrorTime; // record last MIC error time
2628 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2629 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2630
2631 // For WPA-PSK supplicant state
2632 //WPA_STATE WpaState; // Default is SS_NOTUSE
2633 //UCHAR ReplayCounter[8];
2634 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2635 UCHAR SNonce[32]; // SNonce for WPA-PSK
2636 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2637
2638 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2639 RT_HT_PHY_INFO DesiredHtPhyInfo;
2640 BOOLEAN bAutoTxRateSwitch;
2641 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2642} APCLI_STRUCT, *PAPCLI_STRUCT;
2643
2644// ----------- end of AP ----------------------------
2645
2646#ifdef BLOCK_NET_IF
2647typedef struct _BLOCK_QUEUE_ENTRY
2648{
2649 BOOLEAN SwTxQueueBlockFlag;
2650 LIST_HEADER NetIfList;
2651} BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2652#endif // BLOCK_NET_IF //
2653
2654
2655struct wificonf
2656{
2657 BOOLEAN bShortGI;
2658 BOOLEAN bGreenField;
2659};
2660
2661
2662
2663
2664typedef struct _INF_PCI_CONFIG
2665{
2666 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2667}INF_PCI_CONFIG;
2668
2669typedef struct _INF_USB_CONFIG
2670{
2671 UINT BulkInEpAddr; // bulk-in endpoint address
2672 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2673
2674}INF_USB_CONFIG;
2675
2676#ifdef IKANOS_VX_1X0
2677 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2678
2679 struct IKANOS_TX_INFO
2680 {
2681 struct net_device *netdev;
2682 IkanosWlanTxCbFuncP *fp;
2683 };
2684#endif // IKANOS_VX_1X0 //
2685
2686#ifdef NINTENDO_AP
2687typedef struct _NINDO_CTRL_BLOCK {
2688
2689 RT_NINTENDO_TABLE DS_TABLE;
2690
2691#ifdef CHIP25XX
2692 spinlock_t NINTENDO_TABLE_Lock;
2693#else
2694 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
2695#endif // CHIP25XX //
2696
2697 UCHAR NINTENDO_UP_BUFFER[512];
2698 UCHAR Local_KeyIdx;
2699 CIPHER_KEY Local_SharedKey;
2700 UCHAR Local_bHideSsid;
2701 UCHAR Local_AuthMode;
2702 UCHAR Local_WepStatus;
2703 USHORT Local_CapabilityInfo;
2704} NINDO_CTRL_BLOCK;
2705#endif // NINTENDO_AP //
2706
2707
2708#ifdef DBG_DIAGNOSE
2709#define DIAGNOSE_TIME 10 // 10 sec
2710typedef struct _RtmpDiagStrcut_
2711{ // Diagnosis Related element
2712 unsigned char inited;
2713 unsigned char qIdx;
2714 unsigned char ArrayStartIdx;
2715 unsigned char ArrayCurIdx;
2716 // Tx Related Count
2717 USHORT TxDataCnt[DIAGNOSE_TIME];
2718 USHORT TxFailCnt[DIAGNOSE_TIME];
2719// USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2720 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2721// USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2722 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2723 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2724
2725 USHORT TxAggCnt[DIAGNOSE_TIME];
2726 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2727// USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2728 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2729 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2730 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2731
2732 // Rx Related Count
2733 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2734 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2735// USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2736 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2737}RtmpDiagStruct;
2738#endif // DBG_DIAGNOSE //
2739
2740
2741//
2742// The miniport adapter structure
2743//
2744typedef struct _RTMP_ADAPTER
2745{
2746 PVOID OS_Cookie; // save specific structure relative to OS
2747 PNET_DEV net_dev;
2748 ULONG VirtualIfCnt;
2749
2750
2751
2752 NDIS_SPIN_LOCK irq_lock;
2753 UCHAR irq_disabled;
2754
2755#ifdef RT2870
2756/*****************************************************************************************/
2757/* USB related parameters */
2758/*****************************************************************************************/
2759 struct usb_config_descriptor *config;
2760 UINT BulkInEpAddr; // bulk-in endpoint address
2761 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2762
2763 UINT NumberOfPipes;
2764 USHORT BulkOutMaxPacketSize;
2765 USHORT BulkInMaxPacketSize;
2766
2767 //======Control Flags
2768 LONG PendingIoCount;
2769 ULONG BulkFlags;
2770 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2771
2772
2773 //======Timer Thread
2774 RT2870_TIMER_QUEUE TimerQ;
2775 NDIS_SPIN_LOCK TimerQLock;
2776
2777
2778 //======Cmd Thread
2779 CmdQ CmdQ;
2780 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2781
2782 BOOLEAN TimerFunc_kill;
2783 BOOLEAN mlme_kill;
2784
2785
2786 //======Semaphores (event)
2787 struct semaphore mlme_semaphore; /* to sleep thread on */
2788 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2789 struct semaphore RTUSBTimer_semaphore;
2790#ifdef INF_AMAZON_SE
2791 struct semaphore UsbVendorReq_semaphore;
2792 PVOID UsbVendorReqBuf;
2793#endif // INF_AMAZON_SE //
2794 struct completion TimerQComplete;
2795 struct completion mlmeComplete;
2796 struct completion CmdQComplete;
2797 wait_queue_head_t *wait;
2798
2799 //======Lock for 2870 ATE
2800#ifdef RALINK_ATE
2801 NDIS_SPIN_LOCK GenericLock; // ATE Tx/Rx generic spinlock
2802#endif // RALINK_ATE //
2803
2804#endif // RT2870 //
2805
2806
2807/*****************************************************************************************/
2808 /* Both PCI/USB related parameters */
2809/*****************************************************************************************/
2810
2811
2812/*****************************************************************************************/
2813/* Tx related parameters */
2814/*****************************************************************************************/
2815 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2816 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2817
2818#ifdef RT2870
2819 // Data related context and AC specified, 4 AC supported
2820 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2821 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2822
2823 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2824 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2825
2826 // 4 sets of Bulk Out index and pending flag
2827 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2828
2829 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2830 UCHAR bulkResetPipeid;
2831 BOOLEAN MgmtBulkPending;
2832 ULONG bulkResetReq[6];
2833#endif // RT2870 //
2834
2835 // resource for software backlog queues
2836 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2837 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2838
2839 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2840 RTMP_MGMT_RING MgmtRing;
2841 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2842
2843
2844/*****************************************************************************************/
2845/* Rx related parameters */
2846/*****************************************************************************************/
2847
2848
2849#ifdef RT2870
2850 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2851 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2852 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2853 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2854 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2855 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2856 ULONG TransferBufferLength; // current length of the packet buffer
2857 ULONG ReadPosition; // current read position in a packet buffer
2858#endif // RT2870 //
2859
2860
2861/*****************************************************************************************/
2862/* ASIC related parameters */
2863/*****************************************************************************************/
2864 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2865
2866 // ---------------------------
2867 // E2PROM
2868 // ---------------------------
2869 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2870 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2871 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2872 BOOLEAN EepromAccess;
2873 UCHAR EFuseTag;
2874 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2875
2876 // ---------------------------
2877 // BBP Control
2878 // ---------------------------
2879 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2880 UCHAR BbpRssiToDbmDelta;
2881 BBP_R66_TUNING BbpTuning;
2882
2883 // ----------------------------
2884 // RFIC control
2885 // ----------------------------
2886 UCHAR RfIcType; // RFIC_xxx
2887 ULONG RfFreqOffset; // Frequency offset for channel switching
2888 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2889
2890 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2891 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2892
2893 // This soft Rx Antenna Diversity mechanism is used only when user set
2894 // RX Antenna = DIVERSITY ON
2895 SOFT_RX_ANT_DIVERSITY RxAnt;
2896
2897 UCHAR RFProgSeq;
2898 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2899 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2900 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2901 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2902
2903 UCHAR ChannelListNum; // number of channel in ChannelList[]
2904 UCHAR Bbp94;
2905 BOOLEAN BbpForCCK;
2906 ULONG Tx20MPwrCfgABand[5];
2907 ULONG Tx20MPwrCfgGBand[5];
2908 ULONG Tx40MPwrCfgABand[5];
2909 ULONG Tx40MPwrCfgGBand[5];
2910
2911 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2912 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2913 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2914 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2915 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2916 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2917
2918 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2919 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2920 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2921 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2922 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2923 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2924
2925 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2926 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2927 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2928 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2929 //---
2930
2931 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2932 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2933 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2934 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2935 //---
2936
2937 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2938 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2939 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2940 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2941
2942 // ----------------------------
2943 // LED control
2944 // ----------------------------
2945 MCU_LEDCS_STRUC LedCntl;
2946 USHORT Led1; // read from EEPROM 0x3c
2947 USHORT Led2; // EEPROM 0x3e
2948 USHORT Led3; // EEPROM 0x40
2949 UCHAR LedIndicatorStregth;
2950 UCHAR RssiSingalstrengthOffet;
2951 BOOLEAN bLedOnScanning;
2952 UCHAR LedStatus;
2953
2954/*****************************************************************************************/
2955/* 802.11 related parameters */
2956/*****************************************************************************************/
2957 // outgoing BEACON frame buffer and corresponding TXD
2958 TXWI_STRUC BeaconTxWI;
2959 PUCHAR BeaconBuf;
2960 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2961
2962 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2963 PSPOLL_FRAME PsPollFrame;
2964 HEADER_802_11 NullFrame;
2965
2966#ifdef RT2870
2967 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2968 TX_CONTEXT NullContext;
2969 TX_CONTEXT PsPollContext;
2970 TX_CONTEXT RTSContext;
2971#endif // RT2870 //
2972
2973
2974
2975//=========AP===========
2976
2977
2978//=======STA===========
2979#ifdef CONFIG_STA_SUPPORT
2980/* Modified by Wu Xi-Kun 4/21/2006 */
2981 // -----------------------------------------------
2982 // STA specific configuration & operation status
2983 // used only when pAd->OpMode == OPMODE_STA
2984 // -----------------------------------------------
2985 STA_ADMIN_CONFIG StaCfg; // user desired settings
2986 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2987 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2988 NDIS_MEDIA_STATE PreMediaState;
2989#endif // CONFIG_STA_SUPPORT //
2990
2991//=======Common===========
2992 // OP mode: either AP or STA
2993 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2994
2995 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2996
2997
2998 // MAT related parameters
2999
3000 // configuration: read from Registry & E2PROM
3001 BOOLEAN bLocalAdminMAC; // Use user changed MAC
3002 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
3003 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
3004
3005 // ------------------------------------------------------
3006 // common configuration to both OPMODE_STA and OPMODE_AP
3007 // ------------------------------------------------------
3008 COMMON_CONFIG CommonCfg;
3009 MLME_STRUCT Mlme;
3010
3011 // AP needs those vaiables for site survey feature.
3012 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
3013 BSS_TABLE ScanTab; // store the latest SCAN result
3014
3015 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
3016 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
3017 NDIS_SPIN_LOCK MacTabLock;
3018
3019#ifdef DOT11_N_SUPPORT
3020 BA_TABLE BATable;
3021#endif // DOT11_N_SUPPORT //
3022 NDIS_SPIN_LOCK BATabLock;
3023 RALINK_TIMER_STRUCT RECBATimer;
3024
3025 // encryption/decryption KEY tables
3026 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
3027
3028 // RX re-assembly buffer for fragmentation
3029 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
3030
3031 // various Counters
3032 COUNTER_802_3 Counters8023; // 802.3 counters
3033 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
3034 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
3035 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
3036 PRIVATE_STRUC PrivateInfo; // Private information & counters
3037
3038 // flags, see fRTMP_ADAPTER_xxx flags
3039 ULONG Flags; // Represent current device status
3040
3041 // current TX sequence #
3042 USHORT Sequence;
3043
3044#ifdef UNDER_CE
3045 NDIS_HANDLE hGiISR;
3046#endif
3047
3048
3049 // Control disconnect / connect event generation
3050 //+++Didn't used anymore
3051 ULONG LinkDownTime;
3052 //---
3053 ULONG LastRxRate;
3054 ULONG LastTxRate;
3055 //+++Used only for Station
3056 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
3057 //---
3058
3059 ULONG ExtraInfo; // Extra information for displaying status
3060 ULONG SystemErrorBitmap; // b0: E2PROM version error
3061
3062 //+++Didn't used anymore
3063 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
3064 //---
3065
3066 // ---------------------------
3067 // System event log
3068 // ---------------------------
3069 RT_802_11_EVENT_TABLE EventTab;
3070
3071
3072 BOOLEAN HTCEnable;
3073
3074 /*****************************************************************************************/
3075 /* Statistic related parameters */
3076 /*****************************************************************************************/
3077#ifdef RT2870
3078 ULONG BulkOutDataOneSecCount;
3079 ULONG BulkInDataOneSecCount;
3080 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
3081 ULONG watchDogRxCnt;
3082 ULONG watchDogRxOverFlowCnt;
3083 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
3084#endif // RT2870 //
3085
3086 BOOLEAN bUpdateBcnCntDone;
3087 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
3088 // ----------------------------
3089 // DEBUG paramerts
3090 // ----------------------------
3091 //ULONG DebugSetting[4];
3092 BOOLEAN bBanAllBaSetup;
3093 BOOLEAN bPromiscuous;
3094
3095 // ----------------------------
3096 // rt2860c emulation-use Parameters
3097 // ----------------------------
3098 ULONG rtsaccu[30];
3099 ULONG ctsaccu[30];
3100 ULONG cfendaccu[30];
3101 ULONG bacontent[16];
3102 ULONG rxint[RX_RING_SIZE+1];
3103 UCHAR rcvba[60];
3104 BOOLEAN bLinkAdapt;
3105 BOOLEAN bForcePrintTX;
3106 BOOLEAN bForcePrintRX;
3107 BOOLEAN bDisablescanning; //defined in RT2870 USB
3108 BOOLEAN bStaFifoTest;
3109 BOOLEAN bProtectionTest;
3110 BOOLEAN bHCCATest;
3111 BOOLEAN bGenOneHCCA;
3112 BOOLEAN bBroadComHT;
3113 //+++Following add from RT2870 USB.
3114 ULONG BulkOutReq;
3115 ULONG BulkOutComplete;
3116 ULONG BulkOutCompleteOther;
3117 ULONG BulkOutCompleteCancel; // seems not use now?
3118 ULONG BulkInReq;
3119 ULONG BulkInComplete;
3120 ULONG BulkInCompleteFail;
3121 //---
3122
3123 struct wificonf WIFItestbed;
3124
3125#ifdef RALINK_ATE
3126 ATE_INFO ate;
3127#ifdef RT2870
3128 BOOLEAN ContinBulkOut; //ATE bulk out control
3129 BOOLEAN ContinBulkIn; //ATE bulk in control
3130 atomic_t BulkOutRemained;
3131 atomic_t BulkInRemained;
3132#endif // RT2870 //
3133#endif // RALINK_ATE //
3134
3135#ifdef DOT11_N_SUPPORT
3136 struct reordering_mpdu_pool mpdu_blk_pool;
3137#endif // DOT11_N_SUPPORT //
3138
3139 ULONG OneSecondnonBEpackets; // record non BE packets per second
3140
3141#if WIRELESS_EXT >= 12
3142 struct iw_statistics iw_stats;
3143#endif
3144
3145 struct net_device_stats stats;
3146
3147#ifdef BLOCK_NET_IF
3148 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3149#endif // BLOCK_NET_IF //
3150
3151
3152
3153#ifdef MULTIPLE_CARD_SUPPORT
3154 INT32 MC_RowID;
3155 UCHAR MC_FileName[256];
3156#endif // MULTIPLE_CARD_SUPPORT //
3157
3158 ULONG TbttTickCount;
3159#ifdef PCI_MSI_SUPPORT
3160 BOOLEAN HaveMsi;
3161#endif // PCI_MSI_SUPPORT //
3162
3163
3164 UCHAR is_on;
3165
3166#define TIME_BASE (1000000/OS_HZ)
3167#define TIME_ONE_SECOND (1000000/TIME_BASE)
3168 UCHAR flg_be_adjust;
3169 ULONG be_adjust_last_time;
3170
3171#ifdef NINTENDO_AP
3172 NINDO_CTRL_BLOCK nindo_ctrl_block;
3173#endif // NINTENDO_AP //
3174
3175
3176#ifdef IKANOS_VX_1X0
3177 struct IKANOS_TX_INFO IkanosTxInfo;
3178 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3179#endif // IKANOS_VX_1X0 //
3180
3181
3182#ifdef DBG_DIAGNOSE
3183 RtmpDiagStruct DiagStruct;
3184#endif // DBG_DIAGNOSE //
3185
3186
3187 UINT8 PM_FlgSuspend;
3188
3189#ifdef RT30xx
3190//======efuse
3191 BOOLEAN bUseEfuse;
3192 BOOLEAN bEEPROMFile;
3193#endif // RT30xx //
3194
3195} RTMP_ADAPTER, *PRTMP_ADAPTER;
3196
3197//
3198// Cisco IAPP format
3199//
3200typedef struct _CISCO_IAPP_CONTENT_
3201{
3202 USHORT Length; //IAPP Length
3203 UCHAR MessageType; //IAPP type
3204 UCHAR FunctionCode; //IAPP function type
3205 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3206 UCHAR SourceMAC[MAC_ADDR_LEN];
3207 USHORT Tag; //Tag(element IE) - Adjacent AP report
3208 USHORT TagLength; //Length of element not including 4 byte header
3209 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3210 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3211 USHORT Channel;
3212 USHORT SsidLen;
3213 UCHAR Ssid[MAX_LEN_OF_SSID];
3214 USHORT Seconds; //Seconds that the client has been disassociated.
3215} CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3216
3217#define DELAYINTMASK 0x0003fffb
3218#define INTMASK 0x0003fffb
3219#define IndMask 0x0003fffc
3220#define RxINT 0x00000005 // Delayed Rx or indivi rx
3221#define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3222#define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3223#define TxCoherent 0x00020000 // tx coherent
3224#define RxCoherent 0x00010000 // rx coherent
3225#define McuCommand 0x00000200 // mcu
3226#define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3227#define TBTTInt 0x00000800 // TBTT interrupt
3228#define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3229#define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3230#define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3231
3232
3233typedef struct _RX_BLK_
3234{
3235// RXD_STRUC RxD; // sample
3236 RT28XX_RXD_STRUC RxD;
3237 PRXWI_STRUC pRxWI;
3238 PHEADER_802_11 pHeader;
3239 PNDIS_PACKET pRxPacket;
3240 UCHAR *pData;
3241 USHORT DataSize;
3242 USHORT Flags;
3243 UCHAR UserPriority; // for calculate TKIP MIC using
3244} RX_BLK;
3245
3246
3247#define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3248#define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3249#define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3250
3251
3252#define fRX_WDS 0x0001
3253#define fRX_AMSDU 0x0002
3254#define fRX_ARALINK 0x0004
3255#define fRX_HTC 0x0008
3256#define fRX_PAD 0x0010
3257#define fRX_AMPDU 0x0020
3258#define fRX_QOS 0x0040
3259#define fRX_INFRA 0x0080
3260#define fRX_EAP 0x0100
3261#define fRX_MESH 0x0200
3262#define fRX_APCLI 0x0400
3263#define fRX_DLS 0x0800
3264#define fRX_WPI 0x1000
3265
3266#define LENGTH_AMSDU_SUBFRAMEHEAD 14
3267#define LENGTH_ARALINK_SUBFRAMEHEAD 14
3268#define LENGTH_ARALINK_HEADER_FIELD 2
3269
3270#define TX_UNKOWN_FRAME 0x00
3271#define TX_MCAST_FRAME 0x01
3272#define TX_LEGACY_FRAME 0x02
3273#define TX_AMPDU_FRAME 0x04
3274#define TX_AMSDU_FRAME 0x08
3275#define TX_RALINK_FRAME 0x10
3276#define TX_FRAG_FRAME 0x20
3277
3278
3279// Currently the sizeof(TX_BLK) is 148 bytes.
3280typedef struct _TX_BLK_
3281{
3282 UCHAR QueIdx;
3283 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3284 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3285 USHORT TotalFragNum; // Total frame fragments required in one batch
3286 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3287
3288 QUEUE_HEADER TxPacketList;
3289 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3290 HTTRANSMIT_SETTING *pTransmit;
3291
3292 // Following structure used for the characteristics of a specific packet.
3293 PNDIS_PACKET pPacket;
3294 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3295 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3296 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3297 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3298 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3299 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3300 UCHAR HdrPadLen; // recording Header Padding Length;
3301 UCHAR apidx; // The interface associated to this packet
3302 UCHAR Wcid; // The MAC entry associated to this packet
3303 UCHAR UserPriority; // priority class of packet
3304 UCHAR FrameGap; // what kind of IFS this packet use
3305 UCHAR MpduReqNum; // number of fragments of this frame
3306 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3307 UCHAR CipherAlg; // cipher alogrithm
3308 PCIPHER_KEY pKey;
3309
3310
3311
3312 USHORT Flags; //See following definitions for detail.
3313
3314 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3315 ULONG Priv; // Hardware specific value saved in here.
3316} TX_BLK, *PTX_BLK;
3317
3318
3319#define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3320#define fTX_bAckRequired 0x0002 // the packet need ack response
3321#define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3322#define fTX_bHTRate 0x0008 // allow to use HT rate
3323//#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3324#define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3325#define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3326#define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3327#define fTX_bWMM 0x0080 // QOS Data
3328
3329#define fTX_bClearEAPFrame 0x0100
3330
3331
3332#ifdef CONFIG_STA_SUPPORT
3333#endif // CONFIG_STA_SUPPORT //
3334
3335
3336
3337#define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3338 do { \
3339 if (value) \
3340 (_pTxBlk->Flags |= _flag) \
3341 else \
3342 (_pTxBlk->Flags &= ~(_flag)) \
3343 }while(0)
3344
3345#define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3346#define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3347#define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3348
3349
3350
3351
3352
3353//------------------------------------------------------------------------------------------
3354
3355
3356
3357#ifdef RT_BIG_ENDIAN
3358static inline VOID WriteBackToDescriptor(
3359 IN PUCHAR Dest,
3360 IN PUCHAR Src,
3361 IN BOOLEAN DoEncrypt,
3362 IN ULONG DescriptorType)
3363{
3364 UINT32 *p1, *p2;
3365
3366 p1 = ((UINT32 *)Dest);
3367 p2 = ((UINT32 *)Src);
3368
3369 *p1 = *p2;
3370 *(p1+2) = *(p2+2);
3371 *(p1+3) = *(p2+3);
3372 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3373}
3374
3375/*
3376 ========================================================================
3377
3378 Routine Description:
3379 Endian conversion of Tx/Rx descriptor .
3380
3381 Arguments:
3382 pAd Pointer to our adapter
3383 pData Pointer to Tx/Rx descriptor
3384 DescriptorType Direction of the frame
3385
3386 Return Value:
3387 None
3388
3389 Note:
3390 Call this function when read or update descriptor
3391 ========================================================================
3392*/
3393static inline VOID RTMPWIEndianChange(
3394 IN PUCHAR pData,
3395 IN ULONG DescriptorType)
3396{
3397 int size;
3398 int i;
3399
3400 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3401
3402 if(DescriptorType == TYPE_TXWI)
3403 {
3404 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3405 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3406 }
3407 else
3408 {
3409 for(i=0; i < size/4 ; i++)
3410 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3411 }
3412}
3413
3414/*
3415 ========================================================================
3416
3417 Routine Description:
3418 Endian conversion of Tx/Rx descriptor .
3419
3420 Arguments:
3421 pAd Pointer to our adapter
3422 pData Pointer to Tx/Rx descriptor
3423 DescriptorType Direction of the frame
3424
3425 Return Value:
3426 None
3427
3428 Note:
3429 Call this function when read or update descriptor
3430 ========================================================================
3431*/
3432
3433#ifdef RT2870
3434static inline VOID RTMPDescriptorEndianChange(
3435 IN PUCHAR pData,
3436 IN ULONG DescriptorType)
3437{
3438 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3439}
3440#endif // RT2870 //
3441/*
3442 ========================================================================
3443
3444 Routine Description:
3445 Endian conversion of all kinds of 802.11 frames .
3446
3447 Arguments:
3448 pAd Pointer to our adapter
3449 pData Pointer to the 802.11 frame structure
3450 Dir Direction of the frame
3451 FromRxDoneInt Caller is from RxDone interrupt
3452
3453 Return Value:
3454 None
3455
3456 Note:
3457 Call this function when read or update buffer data
3458 ========================================================================
3459*/
3460static inline VOID RTMPFrameEndianChange(
3461 IN PRTMP_ADAPTER pAd,
3462 IN PUCHAR pData,
3463 IN ULONG Dir,
3464 IN BOOLEAN FromRxDoneInt)
3465{
3466 PHEADER_802_11 pFrame;
3467 PUCHAR pMacHdr;
3468
3469 // swab 16 bit fields - Frame Control field
3470 if(Dir == DIR_READ)
3471 {
3472 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3473 }
3474
3475 pFrame = (PHEADER_802_11) pData;
3476 pMacHdr = (PUCHAR) pFrame;
3477
3478 // swab 16 bit fields - Duration/ID field
3479 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3480
3481 // swab 16 bit fields - Sequence Control field
3482 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3483
3484 if(pFrame->FC.Type == BTYPE_MGMT)
3485 {
3486 switch(pFrame->FC.SubType)
3487 {
3488 case SUBTYPE_ASSOC_REQ:
3489 case SUBTYPE_REASSOC_REQ:
3490 // swab 16 bit fields - CapabilityInfo field
3491 pMacHdr += sizeof(HEADER_802_11);
3492 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3493
3494 // swab 16 bit fields - Listen Interval field
3495 pMacHdr += 2;
3496 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3497 break;
3498
3499 case SUBTYPE_ASSOC_RSP:
3500 case SUBTYPE_REASSOC_RSP:
3501 // swab 16 bit fields - CapabilityInfo field
3502 pMacHdr += sizeof(HEADER_802_11);
3503 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3504
3505 // swab 16 bit fields - Status Code field
3506 pMacHdr += 2;
3507 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3508
3509 // swab 16 bit fields - AID field
3510 pMacHdr += 2;
3511 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3512 break;
3513
3514 case SUBTYPE_AUTH:
3515 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3516 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3517 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3518 break;
3519 else
3520 {
3521 // swab 16 bit fields - Auth Alg No. field
3522 pMacHdr += sizeof(HEADER_802_11);
3523 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3524
3525 // swab 16 bit fields - Auth Seq No. field
3526 pMacHdr += 2;
3527 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3528
3529 // swab 16 bit fields - Status Code field
3530 pMacHdr += 2;
3531 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3532 }
3533 break;
3534
3535 case SUBTYPE_BEACON:
3536 case SUBTYPE_PROBE_RSP:
3537 // swab 16 bit fields - BeaconInterval field
3538 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3539 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3540
3541 // swab 16 bit fields - CapabilityInfo field
3542 pMacHdr += sizeof(USHORT);
3543 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3544 break;
3545
3546 case SUBTYPE_DEAUTH:
3547 case SUBTYPE_DISASSOC:
3548 // swab 16 bit fields - Reason code field
3549 pMacHdr += sizeof(HEADER_802_11);
3550 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3551 break;
3552 }
3553 }
3554 else if( pFrame->FC.Type == BTYPE_DATA )
3555 {
3556 }
3557 else if(pFrame->FC.Type == BTYPE_CNTL)
3558 {
3559 switch(pFrame->FC.SubType)
3560 {
3561 case SUBTYPE_BLOCK_ACK_REQ:
3562 {
3563 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3564 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3565 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3566 }
3567 break;
3568 case SUBTYPE_BLOCK_ACK:
3569 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3570 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3571 break;
3572
3573 case SUBTYPE_ACK:
3574 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3575 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3576 break;
3577 }
3578 }
3579 else
3580 {
3581 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3582 }
3583
3584 // swab 16 bit fields - Frame Control
3585 if(Dir == DIR_WRITE)
3586 {
3587 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3588 }
3589}
3590#endif // RT_BIG_ENDIAN //
3591
3592
3593static inline VOID ConvertMulticastIP2MAC(
3594 IN PUCHAR pIpAddr,
3595 IN PUCHAR *ppMacAddr,
3596 IN UINT16 ProtoType)
3597{
3598 if (pIpAddr == NULL)
3599 return;
3600
3601 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3602 return;
3603
3604 switch (ProtoType)
3605 {
3606 case ETH_P_IPV6:
3607// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3608 *(*ppMacAddr) = 0x33;
3609 *(*ppMacAddr + 1) = 0x33;
3610 *(*ppMacAddr + 2) = pIpAddr[12];
3611 *(*ppMacAddr + 3) = pIpAddr[13];
3612 *(*ppMacAddr + 4) = pIpAddr[14];
3613 *(*ppMacAddr + 5) = pIpAddr[15];
3614 break;
3615
3616 case ETH_P_IP:
3617 default:
3618// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3619 *(*ppMacAddr) = 0x01;
3620 *(*ppMacAddr + 1) = 0x00;
3621 *(*ppMacAddr + 2) = 0x5e;
3622 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3623 *(*ppMacAddr + 4) = pIpAddr[2];
3624 *(*ppMacAddr + 5) = pIpAddr[3];
3625 break;
3626 }
3627
3628 return;
3629}
3630
3631BOOLEAN RTMPCheckForHang(
3632 IN NDIS_HANDLE MiniportAdapterContext
3633 );
3634
3635VOID RTMPHalt(
3636 IN NDIS_HANDLE MiniportAdapterContext
3637 );
3638
3639//
3640// Private routines in rtmp_init.c
3641//
3642NDIS_STATUS RTMPAllocAdapterBlock(
3643 IN PVOID handle,
3644 OUT PRTMP_ADAPTER *ppAdapter
3645 );
3646
3647NDIS_STATUS RTMPAllocTxRxRingMemory(
3648 IN PRTMP_ADAPTER pAd
3649 );
3650
3651NDIS_STATUS RTMPFindAdapter(
3652 IN PRTMP_ADAPTER pAd,
3653 IN NDIS_HANDLE WrapperConfigurationContext
3654 );
3655
3656NDIS_STATUS RTMPReadParametersHook(
3657 IN PRTMP_ADAPTER pAd
3658 );
3659
3660VOID RTMPFreeAdapter(
3661 IN PRTMP_ADAPTER pAd
3662 );
3663
3664NDIS_STATUS NICReadRegParameters(
3665 IN PRTMP_ADAPTER pAd,
3666 IN NDIS_HANDLE WrapperConfigurationContext
3667 );
3668
3669#ifdef RT30xx
3670VOID NICInitRT30xxRFRegisters(
3671 IN PRTMP_ADAPTER pAd);
3672#endif // RT30xx //
3673
3674VOID NICReadEEPROMParameters(
3675 IN PRTMP_ADAPTER pAd,
3676 IN PUCHAR mac_addr);
3677
3678VOID NICInitAsicFromEEPROM(
3679 IN PRTMP_ADAPTER pAd);
3680
3681VOID NICInitTxRxRingAndBacklogQueue(
3682 IN PRTMP_ADAPTER pAd);
3683
3684NDIS_STATUS NICInitializeAdapter(
3685 IN PRTMP_ADAPTER pAd,
3686 IN BOOLEAN bHardReset);
3687
3688NDIS_STATUS NICInitializeAsic(
3689 IN PRTMP_ADAPTER pAd,
3690 IN BOOLEAN bHardReset);
3691
3692VOID NICIssueReset(
3693 IN PRTMP_ADAPTER pAd);
3694
3695VOID RTMPRingCleanUp(
3696 IN PRTMP_ADAPTER pAd,
3697 IN UCHAR RingType);
3698
3699VOID RxTest(
3700 IN PRTMP_ADAPTER pAd);
3701
3702NDIS_STATUS DbgSendPacket(
3703 IN PRTMP_ADAPTER pAd,
3704 IN PNDIS_PACKET pPacket);
3705
3706VOID UserCfgInit(
3707 IN PRTMP_ADAPTER pAd);
3708
3709VOID NICResetFromError(
3710 IN PRTMP_ADAPTER pAd);
3711
3712VOID NICEraseFirmware(
3713 IN PRTMP_ADAPTER pAd);
3714
3715NDIS_STATUS NICLoadFirmware(
3716 IN PRTMP_ADAPTER pAd);
3717
3718NDIS_STATUS NICLoadRateSwitchingParams(
3719 IN PRTMP_ADAPTER pAd);
3720
3721BOOLEAN NICCheckForHang(
3722 IN PRTMP_ADAPTER pAd);
3723
3724VOID NICUpdateFifoStaCounters(
3725 IN PRTMP_ADAPTER pAd);
3726
3727VOID NICUpdateRawCounters(
3728 IN PRTMP_ADAPTER pAd);
3729
3730ULONG RTMPNotAllZero(
3731 IN PVOID pSrc1,
3732 IN ULONG Length);
3733
3734VOID RTMPZeroMemory(
3735 IN PVOID pSrc,
3736 IN ULONG Length);
3737
3738ULONG RTMPCompareMemory(
3739 IN PVOID pSrc1,
3740 IN PVOID pSrc2,
3741 IN ULONG Length);
3742
3743VOID RTMPMoveMemory(
3744 OUT PVOID pDest,
3745 IN PVOID pSrc,
3746 IN ULONG Length);
3747
3748VOID AtoH(
3749 char *src,
3750 UCHAR *dest,
3751 int destlen);
3752
3753UCHAR BtoH(
3754 char ch);
3755
3756VOID RTMPPatchMacBbpBug(
3757 IN PRTMP_ADAPTER pAd);
3758
3759VOID RTMPPatchCardBus(
3760 IN PRTMP_ADAPTER pAdapter);
3761
3762VOID RTMPPatchRalinkCardBus(
3763 IN PRTMP_ADAPTER pAdapter,
3764 IN ULONG Bus);
3765
3766ULONG RTMPReadCBConfig(
3767 IN ULONG Bus,
3768 IN ULONG Slot,
3769 IN ULONG Func,
3770 IN ULONG Offset);
3771
3772VOID RTMPWriteCBConfig(
3773 IN ULONG Bus,
3774 IN ULONG Slot,
3775 IN ULONG Func,
3776 IN ULONG Offset,
3777 IN ULONG Value);
3778
3779VOID RTMPInitTimer(
3780 IN PRTMP_ADAPTER pAd,
3781 IN PRALINK_TIMER_STRUCT pTimer,
3782 IN PVOID pTimerFunc,
3783 IN PVOID pData,
3784 IN BOOLEAN Repeat);
3785
3786VOID RTMPSetTimer(
3787 IN PRALINK_TIMER_STRUCT pTimer,
3788 IN ULONG Value);
3789
3790
3791VOID RTMPModTimer(
3792 IN PRALINK_TIMER_STRUCT pTimer,
3793 IN ULONG Value);
3794
3795VOID RTMPCancelTimer(
3796 IN PRALINK_TIMER_STRUCT pTimer,
3797 OUT BOOLEAN *pCancelled);
3798
3799VOID RTMPSetLED(
3800 IN PRTMP_ADAPTER pAd,
3801 IN UCHAR Status);
3802
3803VOID RTMPSetSignalLED(
3804 IN PRTMP_ADAPTER pAd,
3805 IN NDIS_802_11_RSSI Dbm);
3806
3807VOID RTMPEnableRxTx(
3808 IN PRTMP_ADAPTER pAd);
3809
3810//
3811// prototype in action.c
3812//
3813VOID ActionStateMachineInit(
3814 IN PRTMP_ADAPTER pAd,
3815 IN STATE_MACHINE *S,
3816 OUT STATE_MACHINE_FUNC Trans[]);
3817
3818VOID MlmeADDBAAction(
3819 IN PRTMP_ADAPTER pAd,
3820 IN MLME_QUEUE_ELEM *Elem);
3821
3822VOID MlmeDELBAAction(
3823 IN PRTMP_ADAPTER pAd,
3824 IN MLME_QUEUE_ELEM *Elem);
3825
3826VOID MlmeDLSAction(
3827 IN PRTMP_ADAPTER pAd,
3828 IN MLME_QUEUE_ELEM *Elem);
3829
3830VOID MlmeInvalidAction(
3831 IN PRTMP_ADAPTER pAd,
3832 IN MLME_QUEUE_ELEM *Elem);
3833
3834VOID MlmeQOSAction(
3835 IN PRTMP_ADAPTER pAd,
3836 IN MLME_QUEUE_ELEM *Elem);
3837
3838#ifdef DOT11_N_SUPPORT
3839VOID PeerAddBAReqAction(
3840 IN PRTMP_ADAPTER pAd,
3841 IN MLME_QUEUE_ELEM *Elem);
3842
3843VOID PeerAddBARspAction(
3844 IN PRTMP_ADAPTER pAd,
3845 IN MLME_QUEUE_ELEM *Elem);
3846
3847VOID PeerDelBAAction(
3848 IN PRTMP_ADAPTER pAd,
3849 IN MLME_QUEUE_ELEM *Elem);
3850
3851VOID PeerBAAction(
3852 IN PRTMP_ADAPTER pAd,
3853 IN MLME_QUEUE_ELEM *Elem);
3854#endif // DOT11_N_SUPPORT //
3855
3856VOID SendPSMPAction(
3857 IN PRTMP_ADAPTER pAd,
3858 IN UCHAR Wcid,
3859 IN UCHAR Psmp);
3860
3861
3862#ifdef DOT11N_DRAFT3
3863VOID SendBSS2040CoexistMgmtAction(
3864 IN PRTMP_ADAPTER pAd,
3865 IN UCHAR Wcid,
3866 IN UCHAR apidx,
3867 IN UCHAR InfoReq);
3868
3869VOID SendNotifyBWActionFrame(
3870 IN PRTMP_ADAPTER pAd,
3871 IN UCHAR Wcid,
3872 IN UCHAR apidx);
3873
3874BOOLEAN ChannelSwitchSanityCheck(
3875 IN PRTMP_ADAPTER pAd,
3876 IN UCHAR Wcid,
3877 IN UCHAR NewChannel,
3878 IN UCHAR Secondary);
3879
3880VOID ChannelSwitchAction(
3881 IN PRTMP_ADAPTER pAd,
3882 IN UCHAR Wcid,
3883 IN UCHAR Channel,
3884 IN UCHAR Secondary);
3885
3886ULONG BuildIntolerantChannelRep(
3887 IN PRTMP_ADAPTER pAd,
3888 IN PUCHAR pDest);
3889
3890VOID Update2040CoexistFrameAndNotify(
3891 IN PRTMP_ADAPTER pAd,
3892 IN UCHAR Wcid,
3893 IN BOOLEAN bAddIntolerantCha);
3894
3895VOID Send2040CoexistAction(
3896 IN PRTMP_ADAPTER pAd,
3897 IN UCHAR Wcid,
3898 IN BOOLEAN bAddIntolerantCha);
3899#endif // DOT11N_DRAFT3 //
3900
3901VOID PeerRMAction(
3902 IN PRTMP_ADAPTER pAd,
3903 IN MLME_QUEUE_ELEM *Elem);
3904
3905VOID PeerPublicAction(
3906 IN PRTMP_ADAPTER pAd,
3907 IN MLME_QUEUE_ELEM *Elem);
3908
3909#ifdef CONFIG_STA_SUPPORT
3910VOID StaPublicAction(
3911 IN PRTMP_ADAPTER pAd,
3912 IN UCHAR Bss2040Coexist);
3913#endif // CONFIG_STA_SUPPORT //
3914
3915
3916VOID PeerBSSTranAction(
3917 IN PRTMP_ADAPTER pAd,
3918 IN MLME_QUEUE_ELEM *Elem);
3919
3920#ifdef DOT11_N_SUPPORT
3921VOID PeerHTAction(
3922 IN PRTMP_ADAPTER pAd,
3923 IN MLME_QUEUE_ELEM *Elem);
3924#endif // DOT11_N_SUPPORT //
3925
3926VOID PeerQOSAction(
3927 IN PRTMP_ADAPTER pAd,
3928 IN MLME_QUEUE_ELEM *Elem);
3929
3930#ifdef QOS_DLS_SUPPORT
3931VOID PeerDLSAction(
3932 IN PRTMP_ADAPTER pAd,
3933 IN MLME_QUEUE_ELEM *Elem);
3934#endif // QOS_DLS_SUPPORT //
3935
3936#ifdef CONFIG_STA_SUPPORT
3937#ifdef QOS_DLS_SUPPORT
3938VOID DlsParmFill(
3939 IN PRTMP_ADAPTER pAd,
3940 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3941 IN PRT_802_11_DLS pDls,
3942 IN USHORT reason);
3943#endif // QOS_DLS_SUPPORT //
3944#endif // CONFIG_STA_SUPPORT //
3945
3946#ifdef DOT11_N_SUPPORT
3947VOID RECBATimerTimeout(
3948 IN PVOID SystemSpecific1,
3949 IN PVOID FunctionContext,
3950 IN PVOID SystemSpecific2,
3951 IN PVOID SystemSpecific3);
3952
3953VOID ORIBATimerTimeout(
3954 IN PRTMP_ADAPTER pAd);
3955
3956VOID SendRefreshBAR(
3957 IN PRTMP_ADAPTER pAd,
3958 IN MAC_TABLE_ENTRY *pEntry);
3959#endif // DOT11_N_SUPPORT //
3960
3961VOID ActHeaderInit(
3962 IN PRTMP_ADAPTER pAd,
3963 IN OUT PHEADER_802_11 pHdr80211,
3964 IN PUCHAR Addr1,
3965 IN PUCHAR Addr2,
3966 IN PUCHAR Addr3);
3967
3968VOID BarHeaderInit(
3969 IN PRTMP_ADAPTER pAd,
3970 IN OUT PFRAME_BAR pCntlBar,
3971 IN PUCHAR pDA,
3972 IN PUCHAR pSA);
3973
3974VOID InsertActField(
3975 IN PRTMP_ADAPTER pAd,
3976 OUT PUCHAR pFrameBuf,
3977 OUT PULONG pFrameLen,
3978 IN UINT8 Category,
3979 IN UINT8 ActCode);
3980
3981BOOLEAN QosBADataParse(
3982 IN PRTMP_ADAPTER pAd,
3983 IN BOOLEAN bAMSDU,
3984 IN PUCHAR p8023Header,
3985 IN UCHAR WCID,
3986 IN UCHAR TID,
3987 IN USHORT Sequence,
3988 IN UCHAR DataOffset,
3989 IN USHORT Datasize,
3990 IN UINT CurRxIndex);
3991
3992#ifdef DOT11_N_SUPPORT
3993BOOLEAN CntlEnqueueForRecv(
3994 IN PRTMP_ADAPTER pAd,
3995 IN ULONG Wcid,
3996 IN ULONG MsgLen,
3997 IN PFRAME_BA_REQ pMsg);
3998
3999VOID BaAutoManSwitch(
4000 IN PRTMP_ADAPTER pAd);
4001#endif // DOT11_N_SUPPORT //
4002
4003VOID HTIOTCheck(
4004 IN PRTMP_ADAPTER pAd,
4005 IN UCHAR BatRecIdx);
4006
4007//
4008// Private routines in rtmp_data.c
4009//
4010BOOLEAN RTMPHandleRxDoneInterrupt(
4011 IN PRTMP_ADAPTER pAd);
4012
4013VOID RTMPHandleTxDoneInterrupt(
4014 IN PRTMP_ADAPTER pAd);
4015
4016BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
4017 IN PRTMP_ADAPTER pAd,
4018 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
4019
4020VOID RTMPHandleMgmtRingDmaDoneInterrupt(
4021 IN PRTMP_ADAPTER pAd);
4022
4023VOID RTMPHandleTBTTInterrupt(
4024 IN PRTMP_ADAPTER pAd);
4025
4026VOID RTMPHandlePreTBTTInterrupt(
4027 IN PRTMP_ADAPTER pAd);
4028
4029void RTMPHandleTwakeupInterrupt(
4030 IN PRTMP_ADAPTER pAd);
4031
4032VOID RTMPHandleRxCoherentInterrupt(
4033 IN PRTMP_ADAPTER pAd);
4034
4035BOOLEAN TxFrameIsAggregatible(
4036 IN PRTMP_ADAPTER pAd,
4037 IN PUCHAR pPrevAddr1,
4038 IN PUCHAR p8023hdr);
4039
4040BOOLEAN PeerIsAggreOn(
4041 IN PRTMP_ADAPTER pAd,
4042 IN ULONG TxRate,
4043 IN PMAC_TABLE_ENTRY pMacEntry);
4044
4045NDIS_STATUS Sniff2BytesFromNdisBuffer(
4046 IN PNDIS_BUFFER pFirstBuffer,
4047 IN UCHAR DesiredOffset,
4048 OUT PUCHAR pByte0,
4049 OUT PUCHAR pByte1);
4050
4051NDIS_STATUS STASendPacket(
4052 IN PRTMP_ADAPTER pAd,
4053 IN PNDIS_PACKET pPacket);
4054
4055VOID STASendPackets(
4056 IN NDIS_HANDLE MiniportAdapterContext,
4057 IN PPNDIS_PACKET ppPacketArray,
4058 IN UINT NumberOfPackets);
4059
4060VOID RTMPDeQueuePacket(
4061 IN PRTMP_ADAPTER pAd,
4062 IN BOOLEAN bIntContext,
4063 IN UCHAR QueIdx,
4064 IN UCHAR Max_Tx_Packets);
4065
4066NDIS_STATUS RTMPHardTransmit(
4067 IN PRTMP_ADAPTER pAd,
4068 IN PNDIS_PACKET pPacket,
4069 IN UCHAR QueIdx,
4070 OUT PULONG pFreeTXDLeft);
4071
4072NDIS_STATUS STAHardTransmit(
4073 IN PRTMP_ADAPTER pAd,
4074 IN TX_BLK *pTxBlk,
4075 IN UCHAR QueIdx);
4076
4077VOID STARxEAPOLFrameIndicate(
4078 IN PRTMP_ADAPTER pAd,
4079 IN MAC_TABLE_ENTRY *pEntry,
4080 IN RX_BLK *pRxBlk,
4081 IN UCHAR FromWhichBSSID);
4082
4083NDIS_STATUS RTMPFreeTXDRequest(
4084 IN PRTMP_ADAPTER pAd,
4085 IN UCHAR RingType,
4086 IN UCHAR NumberRequired,
4087 IN PUCHAR FreeNumberIs);
4088
4089NDIS_STATUS MlmeHardTransmit(
4090 IN PRTMP_ADAPTER pAd,
4091 IN UCHAR QueIdx,
4092 IN PNDIS_PACKET pPacket);
4093
4094NDIS_STATUS MlmeHardTransmitMgmtRing(
4095 IN PRTMP_ADAPTER pAd,
4096 IN UCHAR QueIdx,
4097 IN PNDIS_PACKET pPacket);
4098
4099NDIS_STATUS MlmeHardTransmitTxRing(
4100 IN PRTMP_ADAPTER pAd,
4101 IN UCHAR QueIdx,
4102 IN PNDIS_PACKET pPacket);
4103
4104USHORT RTMPCalcDuration(
4105 IN PRTMP_ADAPTER pAd,
4106 IN UCHAR Rate,
4107 IN ULONG Size);
4108
4109VOID RTMPWriteTxWI(
4110 IN PRTMP_ADAPTER pAd,
4111 IN PTXWI_STRUC pTxWI,
4112 IN BOOLEAN FRAG,
4113 IN BOOLEAN CFACK,
4114 IN BOOLEAN InsTimestamp,
4115 IN BOOLEAN AMPDU,
4116 IN BOOLEAN Ack,
4117 IN BOOLEAN NSeq, // HW new a sequence.
4118 IN UCHAR BASize,
4119 IN UCHAR WCID,
4120 IN ULONG Length,
4121 IN UCHAR PID,
4122 IN UCHAR TID,
4123 IN UCHAR TxRate,
4124 IN UCHAR Txopmode,
4125 IN BOOLEAN CfAck,
4126 IN HTTRANSMIT_SETTING *pTransmit);
4127
4128
4129VOID RTMPWriteTxWI_Data(
4130 IN PRTMP_ADAPTER pAd,
4131 IN OUT PTXWI_STRUC pTxWI,
4132 IN TX_BLK *pTxBlk);
4133
4134
4135VOID RTMPWriteTxWI_Cache(
4136 IN PRTMP_ADAPTER pAd,
4137 IN OUT PTXWI_STRUC pTxWI,
4138 IN TX_BLK *pTxBlk);
4139
4140VOID RTMPWriteTxDescriptor(
4141 IN PRTMP_ADAPTER pAd,
4142 IN PTXD_STRUC pTxD,
4143 IN BOOLEAN bWIV,
4144 IN UCHAR QSEL);
4145
4146VOID RTMPSuspendMsduTransmission(
4147 IN PRTMP_ADAPTER pAd);
4148
4149VOID RTMPResumeMsduTransmission(
4150 IN PRTMP_ADAPTER pAd);
4151
4152NDIS_STATUS MiniportMMRequest(
4153 IN PRTMP_ADAPTER pAd,
4154 IN UCHAR QueIdx,
4155 IN PUCHAR pData,
4156 IN UINT Length);
4157
4158NDIS_STATUS MiniportDataMMRequest(
4159 IN PRTMP_ADAPTER pAd,
4160 IN UCHAR QueIdx,
4161 IN PUCHAR pData,
4162 IN UINT Length);
4163
4164VOID RTMPSendNullFrame(
4165 IN PRTMP_ADAPTER pAd,
4166 IN UCHAR TxRate,
4167 IN BOOLEAN bQosNull);
4168
4169VOID RTMPSendDisassociationFrame(
4170 IN PRTMP_ADAPTER pAd);
4171
4172VOID RTMPSendRTSFrame(
4173 IN PRTMP_ADAPTER pAd,
4174 IN PUCHAR pDA,
4175 IN unsigned int NextMpduSize,
4176 IN UCHAR TxRate,
4177 IN UCHAR RTSRate,
4178 IN USHORT AckDuration,
4179 IN UCHAR QueIdx,
4180 IN UCHAR FrameGap);
4181
4182
4183NDIS_STATUS RTMPApplyPacketFilter(
4184 IN PRTMP_ADAPTER pAd,
4185 IN PRT28XX_RXD_STRUC pRxD,
4186 IN PHEADER_802_11 pHeader);
4187
4188PQUEUE_HEADER RTMPCheckTxSwQueue(
4189 IN PRTMP_ADAPTER pAd,
4190 OUT UCHAR *QueIdx);
4191
4192#ifdef CONFIG_STA_SUPPORT
4193VOID RTMPReportMicError(
4194 IN PRTMP_ADAPTER pAd,
4195 IN PCIPHER_KEY pWpaKey);
4196
4197VOID WpaMicFailureReportFrame(
4198 IN PRTMP_ADAPTER pAd,
4199 IN MLME_QUEUE_ELEM *Elem);
4200
4201VOID WpaDisassocApAndBlockAssoc(
4202 IN PVOID SystemSpecific1,
4203 IN PVOID FunctionContext,
4204 IN PVOID SystemSpecific2,
4205 IN PVOID SystemSpecific3);
4206#endif // CONFIG_STA_SUPPORT //
4207
4208NDIS_STATUS RTMPCloneNdisPacket(
4209 IN PRTMP_ADAPTER pAd,
4210 IN BOOLEAN pInsAMSDUHdr,
4211 IN PNDIS_PACKET pInPacket,
4212 OUT PNDIS_PACKET *ppOutPacket);
4213
4214NDIS_STATUS RTMPAllocateNdisPacket(
4215 IN PRTMP_ADAPTER pAd,
4216 IN PNDIS_PACKET *pPacket,
4217 IN PUCHAR pHeader,
4218 IN UINT HeaderLen,
4219 IN PUCHAR pData,
4220 IN UINT DataLen);
4221
4222VOID RTMPFreeNdisPacket(
4223 IN PRTMP_ADAPTER pAd,
4224 IN PNDIS_PACKET pPacket);
4225
4226BOOLEAN RTMPFreeTXDUponTxDmaDone(
4227 IN PRTMP_ADAPTER pAd,
4228 IN UCHAR QueIdx);
4229
4230BOOLEAN RTMPCheckDHCPFrame(
4231 IN PRTMP_ADAPTER pAd,
4232 IN PNDIS_PACKET pPacket);
4233
4234
4235BOOLEAN RTMPCheckEtherType(
4236 IN PRTMP_ADAPTER pAd,
4237 IN PNDIS_PACKET pPacket);
4238
4239
4240VOID RTMPCckBbpTuning(
4241 IN PRTMP_ADAPTER pAd,
4242 IN UINT TxRate);
4243
4244//
4245// Private routines in rtmp_wep.c
4246//
4247VOID RTMPInitWepEngine(
4248 IN PRTMP_ADAPTER pAd,
4249 IN PUCHAR pKey,
4250 IN UCHAR KeyId,
4251 IN UCHAR KeyLen,
4252 IN PUCHAR pDest);
4253
4254VOID RTMPEncryptData(
4255 IN PRTMP_ADAPTER pAd,
4256 IN PUCHAR pSrc,
4257 IN PUCHAR pDest,
4258 IN UINT Len);
4259
4260BOOLEAN RTMPDecryptData(
4261 IN PRTMP_ADAPTER pAdapter,
4262 IN PUCHAR pSrc,
4263 IN UINT Len,
4264 IN UINT idx);
4265
4266BOOLEAN RTMPSoftDecryptWEP(
4267 IN PRTMP_ADAPTER pAd,
4268 IN PUCHAR pData,
4269 IN ULONG DataByteCnt,
4270 IN PCIPHER_KEY pGroupKey);
4271
4272VOID RTMPSetICV(
4273 IN PRTMP_ADAPTER pAd,
4274 IN PUCHAR pDest);
4275
4276VOID ARCFOUR_INIT(
4277 IN PARCFOURCONTEXT Ctx,
4278 IN PUCHAR pKey,
4279 IN UINT KeyLen);
4280
4281UCHAR ARCFOUR_BYTE(
4282 IN PARCFOURCONTEXT Ctx);
4283
4284VOID ARCFOUR_DECRYPT(
4285 IN PARCFOURCONTEXT Ctx,
4286 IN PUCHAR pDest,
4287 IN PUCHAR pSrc,
4288 IN UINT Len);
4289
4290VOID ARCFOUR_ENCRYPT(
4291 IN PARCFOURCONTEXT Ctx,
4292 IN PUCHAR pDest,
4293 IN PUCHAR pSrc,
4294 IN UINT Len);
4295
4296VOID WPAARCFOUR_ENCRYPT(
4297 IN PARCFOURCONTEXT Ctx,
4298 IN PUCHAR pDest,
4299 IN PUCHAR pSrc,
4300 IN UINT Len);
4301
4302UINT RTMP_CALC_FCS32(
4303 IN UINT Fcs,
4304 IN PUCHAR Cp,
4305 IN INT Len);
4306
4307//
4308// MLME routines
4309//
4310
4311// Asic/RF/BBP related functions
4312
4313VOID AsicAdjustTxPower(
4314 IN PRTMP_ADAPTER pAd);
4315
4316VOID AsicUpdateProtect(
4317 IN PRTMP_ADAPTER pAd,
4318 IN USHORT OperaionMode,
4319 IN UCHAR SetMask,
4320 IN BOOLEAN bDisableBGProtect,
4321 IN BOOLEAN bNonGFExist);
4322
4323VOID AsicSwitchChannel(
4324 IN PRTMP_ADAPTER pAd,
4325 IN UCHAR Channel,
4326 IN BOOLEAN bScan);
4327
4328VOID AsicLockChannel(
4329 IN PRTMP_ADAPTER pAd,
4330 IN UCHAR Channel) ;
4331
4332VOID AsicAntennaSelect(
4333 IN PRTMP_ADAPTER pAd,
4334 IN UCHAR Channel);
4335
4336VOID AsicAntennaSetting(
4337 IN PRTMP_ADAPTER pAd,
4338 IN ABGBAND_STATE BandState);
4339
4340VOID AsicRfTuningExec(
4341 IN PVOID SystemSpecific1,
4342 IN PVOID FunctionContext,
4343 IN PVOID SystemSpecific2,
4344 IN PVOID SystemSpecific3);
4345
4346#ifdef CONFIG_STA_SUPPORT
4347VOID AsicSleepThenAutoWakeup(
4348 IN PRTMP_ADAPTER pAd,
4349 IN USHORT TbttNumToNextWakeUp);
4350
4351VOID AsicForceSleep(
4352 IN PRTMP_ADAPTER pAd);
4353
4354VOID AsicForceWakeup(
4355 IN PRTMP_ADAPTER pAd,
4356 IN BOOLEAN bFromTx);
4357#endif // CONFIG_STA_SUPPORT //
4358
4359VOID AsicSetBssid(
4360 IN PRTMP_ADAPTER pAd,
4361 IN PUCHAR pBssid);
4362
4363VOID AsicSetMcastWC(
4364 IN PRTMP_ADAPTER pAd);
4365
4366VOID AsicDelWcidTab(
4367 IN PRTMP_ADAPTER pAd,
4368 IN UCHAR Wcid);
4369
4370VOID AsicEnableRDG(
4371 IN PRTMP_ADAPTER pAd);
4372
4373VOID AsicDisableRDG(
4374 IN PRTMP_ADAPTER pAd);
4375
4376VOID AsicDisableSync(
4377 IN PRTMP_ADAPTER pAd);
4378
4379VOID AsicEnableBssSync(
4380 IN PRTMP_ADAPTER pAd);
4381
4382VOID AsicEnableIbssSync(
4383 IN PRTMP_ADAPTER pAd);
4384
4385VOID AsicSetEdcaParm(
4386 IN PRTMP_ADAPTER pAd,
4387 IN PEDCA_PARM pEdcaParm);
4388
4389VOID AsicSetSlotTime(
4390 IN PRTMP_ADAPTER pAd,
4391 IN BOOLEAN bUseShortSlotTime);
4392
4393VOID AsicAddSharedKeyEntry(
4394 IN PRTMP_ADAPTER pAd,
4395 IN UCHAR BssIndex,
4396 IN UCHAR KeyIdx,
4397 IN UCHAR CipherAlg,
4398 IN PUCHAR pKey,
4399 IN PUCHAR pTxMic,
4400 IN PUCHAR pRxMic);
4401
4402VOID AsicRemoveSharedKeyEntry(
4403 IN PRTMP_ADAPTER pAd,
4404 IN UCHAR BssIndex,
4405 IN UCHAR KeyIdx);
4406
4407VOID AsicUpdateWCIDAttribute(
4408 IN PRTMP_ADAPTER pAd,
4409 IN USHORT WCID,
4410 IN UCHAR BssIndex,
4411 IN UCHAR CipherAlg,
4412 IN BOOLEAN bUsePairewiseKeyTable);
4413
4414VOID AsicUpdateWCIDIVEIV(
4415 IN PRTMP_ADAPTER pAd,
4416 IN USHORT WCID,
4417 IN ULONG uIV,
4418 IN ULONG uEIV);
4419
4420VOID AsicUpdateRxWCIDTable(
4421 IN PRTMP_ADAPTER pAd,
4422 IN USHORT WCID,
4423 IN PUCHAR pAddr);
4424
4425VOID AsicAddKeyEntry(
4426 IN PRTMP_ADAPTER pAd,
4427 IN USHORT WCID,
4428 IN UCHAR BssIndex,
4429 IN UCHAR KeyIdx,
4430 IN PCIPHER_KEY pCipherKey,
4431 IN BOOLEAN bUsePairewiseKeyTable,
4432 IN BOOLEAN bTxKey);
4433
4434VOID AsicAddPairwiseKeyEntry(
4435 IN PRTMP_ADAPTER pAd,
4436 IN PUCHAR pAddr,
4437 IN UCHAR WCID,
4438 IN CIPHER_KEY *pCipherKey);
4439
4440VOID AsicRemovePairwiseKeyEntry(
4441 IN PRTMP_ADAPTER pAd,
4442 IN UCHAR BssIdx,
4443 IN UCHAR Wcid);
4444
4445BOOLEAN AsicSendCommandToMcu(
4446 IN PRTMP_ADAPTER pAd,
4447 IN UCHAR Command,
4448 IN UCHAR Token,
4449 IN UCHAR Arg0,
4450 IN UCHAR Arg1);
4451
4452
4453VOID MacAddrRandomBssid(
4454 IN PRTMP_ADAPTER pAd,
4455 OUT PUCHAR pAddr);
4456
4457VOID MgtMacHeaderInit(
4458 IN PRTMP_ADAPTER pAd,
4459 IN OUT PHEADER_802_11 pHdr80211,
4460 IN UCHAR SubType,
4461 IN UCHAR ToDs,
4462 IN PUCHAR pDA,
4463 IN PUCHAR pBssid);
4464
4465VOID MlmeRadioOff(
4466 IN PRTMP_ADAPTER pAd);
4467
4468VOID MlmeRadioOn(
4469 IN PRTMP_ADAPTER pAd);
4470
4471
4472VOID BssTableInit(
4473 IN BSS_TABLE *Tab);
4474
4475#ifdef DOT11_N_SUPPORT
4476VOID BATableInit(
4477 IN PRTMP_ADAPTER pAd,
4478 IN BA_TABLE *Tab);
4479#endif // DOT11_N_SUPPORT //
4480
4481ULONG BssTableSearch(
4482 IN BSS_TABLE *Tab,
4483 IN PUCHAR pBssid,
4484 IN UCHAR Channel);
4485
4486ULONG BssSsidTableSearch(
4487 IN BSS_TABLE *Tab,
4488 IN PUCHAR pBssid,
4489 IN PUCHAR pSsid,
4490 IN UCHAR SsidLen,
4491 IN UCHAR Channel);
4492
4493ULONG BssTableSearchWithSSID(
4494 IN BSS_TABLE *Tab,
4495 IN PUCHAR Bssid,
4496 IN PUCHAR pSsid,
4497 IN UCHAR SsidLen,
4498 IN UCHAR Channel);
4499
4500VOID BssTableDeleteEntry(
4501 IN OUT PBSS_TABLE pTab,
4502 IN PUCHAR pBssid,
4503 IN UCHAR Channel);
4504
4505#ifdef DOT11_N_SUPPORT
4506VOID BATableDeleteORIEntry(
4507 IN OUT PRTMP_ADAPTER pAd,
4508 IN BA_ORI_ENTRY *pBAORIEntry);
4509
4510VOID BATableDeleteRECEntry(
4511 IN OUT PRTMP_ADAPTER pAd,
4512 IN BA_REC_ENTRY *pBARECEntry);
4513
4514VOID BATableTearORIEntry(
4515 IN OUT PRTMP_ADAPTER pAd,
4516 IN UCHAR TID,
4517 IN UCHAR Wcid,
4518 IN BOOLEAN bForceDelete,
4519 IN BOOLEAN ALL);
4520
4521VOID BATableTearRECEntry(
4522 IN OUT PRTMP_ADAPTER pAd,
4523 IN UCHAR TID,
4524 IN UCHAR WCID,
4525 IN BOOLEAN ALL);
4526#endif // DOT11_N_SUPPORT //
4527
4528VOID BssEntrySet(
4529 IN PRTMP_ADAPTER pAd,
4530 OUT PBSS_ENTRY pBss,
4531 IN PUCHAR pBssid,
4532 IN CHAR Ssid[],
4533 IN UCHAR SsidLen,
4534 IN UCHAR BssType,
4535 IN USHORT BeaconPeriod,
4536 IN PCF_PARM CfParm,
4537 IN USHORT AtimWin,
4538 IN USHORT CapabilityInfo,
4539 IN UCHAR SupRate[],
4540 IN UCHAR SupRateLen,
4541 IN UCHAR ExtRate[],
4542 IN UCHAR ExtRateLen,
4543 IN HT_CAPABILITY_IE *pHtCapability,
4544 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4545 IN UCHAR HtCapabilityLen,
4546 IN UCHAR AddHtInfoLen,
4547 IN UCHAR NewExtChanOffset,
4548 IN UCHAR Channel,
4549 IN CHAR Rssi,
4550 IN LARGE_INTEGER TimeStamp,
4551 IN UCHAR CkipFlag,
4552 IN PEDCA_PARM pEdcaParm,
4553 IN PQOS_CAPABILITY_PARM pQosCapability,
4554 IN PQBSS_LOAD_PARM pQbssLoad,
4555 IN USHORT LengthVIE,
4556 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4557
4558ULONG BssTableSetEntry(
4559 IN PRTMP_ADAPTER pAd,
4560 OUT PBSS_TABLE pTab,
4561 IN PUCHAR pBssid,
4562 IN CHAR Ssid[],
4563 IN UCHAR SsidLen,
4564 IN UCHAR BssType,
4565 IN USHORT BeaconPeriod,
4566 IN CF_PARM *CfParm,
4567 IN USHORT AtimWin,
4568 IN USHORT CapabilityInfo,
4569 IN UCHAR SupRate[],
4570 IN UCHAR SupRateLen,
4571 IN UCHAR ExtRate[],
4572 IN UCHAR ExtRateLen,
4573 IN HT_CAPABILITY_IE *pHtCapability,
4574 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4575 IN UCHAR HtCapabilityLen,
4576 IN UCHAR AddHtInfoLen,
4577 IN UCHAR NewExtChanOffset,
4578 IN UCHAR Channel,
4579 IN CHAR Rssi,
4580 IN LARGE_INTEGER TimeStamp,
4581 IN UCHAR CkipFlag,
4582 IN PEDCA_PARM pEdcaParm,
4583 IN PQOS_CAPABILITY_PARM pQosCapability,
4584 IN PQBSS_LOAD_PARM pQbssLoad,
4585 IN USHORT LengthVIE,
4586 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4587
4588#ifdef DOT11_N_SUPPORT
4589VOID BATableInsertEntry(
4590 IN PRTMP_ADAPTER pAd,
4591 IN USHORT Aid,
4592 IN USHORT TimeOutValue,
4593 IN USHORT StartingSeq,
4594 IN UCHAR TID,
4595 IN UCHAR BAWinSize,
4596 IN UCHAR OriginatorStatus,
4597 IN BOOLEAN IsRecipient);
4598
4599#ifdef DOT11N_DRAFT3
4600VOID Bss2040CoexistTimeOut(
4601 IN PVOID SystemSpecific1,
4602 IN PVOID FunctionContext,
4603 IN PVOID SystemSpecific2,
4604 IN PVOID SystemSpecific3);
4605
4606
4607VOID TriEventInit(
4608 IN PRTMP_ADAPTER pAd);
4609
4610ULONG TriEventTableSetEntry(
4611 IN PRTMP_ADAPTER pAd,
4612 OUT TRIGGER_EVENT_TAB *Tab,
4613 IN PUCHAR pBssid,
4614 IN HT_CAPABILITY_IE *pHtCapability,
4615 IN UCHAR HtCapabilityLen,
4616 IN UCHAR RegClass,
4617 IN UCHAR ChannelNo);
4618
4619VOID TriEventCounterMaintenance(
4620 IN PRTMP_ADAPTER pAd);
4621#endif // DOT11N_DRAFT3 //
4622#endif // DOT11_N_SUPPORT //
4623
4624VOID BssTableSsidSort(
4625 IN PRTMP_ADAPTER pAd,
4626 OUT BSS_TABLE *OutTab,
4627 IN CHAR Ssid[],
4628 IN UCHAR SsidLen);
4629
4630VOID BssTableSortByRssi(
4631 IN OUT BSS_TABLE *OutTab);
4632
4633VOID BssCipherParse(
4634 IN OUT PBSS_ENTRY pBss);
4635
4636NDIS_STATUS MlmeQueueInit(
4637 IN MLME_QUEUE *Queue);
4638
4639VOID MlmeQueueDestroy(
4640 IN MLME_QUEUE *Queue);
4641
4642BOOLEAN MlmeEnqueue(
4643 IN PRTMP_ADAPTER pAd,
4644 IN ULONG Machine,
4645 IN ULONG MsgType,
4646 IN ULONG MsgLen,
4647 IN VOID *Msg);
4648
4649BOOLEAN MlmeEnqueueForRecv(
4650 IN PRTMP_ADAPTER pAd,
4651 IN ULONG Wcid,
4652 IN ULONG TimeStampHigh,
4653 IN ULONG TimeStampLow,
4654 IN UCHAR Rssi0,
4655 IN UCHAR Rssi1,
4656 IN UCHAR Rssi2,
4657 IN ULONG MsgLen,
4658 IN PVOID Msg,
4659 IN UCHAR Signal);
4660
4661
4662BOOLEAN MlmeDequeue(
4663 IN MLME_QUEUE *Queue,
4664 OUT MLME_QUEUE_ELEM **Elem);
4665
4666VOID MlmeRestartStateMachine(
4667 IN PRTMP_ADAPTER pAd);
4668
4669BOOLEAN MlmeQueueEmpty(
4670 IN MLME_QUEUE *Queue);
4671
4672BOOLEAN MlmeQueueFull(
4673 IN MLME_QUEUE *Queue);
4674
4675BOOLEAN MsgTypeSubst(
4676 IN PRTMP_ADAPTER pAd,
4677 IN PFRAME_802_11 pFrame,
4678 OUT INT *Machine,
4679 OUT INT *MsgType);
4680
4681VOID StateMachineInit(
4682 IN STATE_MACHINE *Sm,
4683 IN STATE_MACHINE_FUNC Trans[],
4684 IN ULONG StNr,
4685 IN ULONG MsgNr,
4686 IN STATE_MACHINE_FUNC DefFunc,
4687 IN ULONG InitState,
4688 IN ULONG Base);
4689
4690VOID StateMachineSetAction(
4691 IN STATE_MACHINE *S,
4692 IN ULONG St,
4693 ULONG Msg,
4694 IN STATE_MACHINE_FUNC F);
4695
4696VOID StateMachinePerformAction(
4697 IN PRTMP_ADAPTER pAd,
4698 IN STATE_MACHINE *S,
4699 IN MLME_QUEUE_ELEM *Elem);
4700
4701VOID Drop(
4702 IN PRTMP_ADAPTER pAd,
4703 IN MLME_QUEUE_ELEM *Elem);
4704
4705VOID AssocStateMachineInit(
4706 IN PRTMP_ADAPTER pAd,
4707 IN STATE_MACHINE *Sm,
4708 OUT STATE_MACHINE_FUNC Trans[]);
4709
4710VOID ReassocTimeout(
4711 IN PVOID SystemSpecific1,
4712 IN PVOID FunctionContext,
4713 IN PVOID SystemSpecific2,
4714 IN PVOID SystemSpecific3);
4715
4716VOID AssocTimeout(
4717 IN PVOID SystemSpecific1,
4718 IN PVOID FunctionContext,
4719 IN PVOID SystemSpecific2,
4720 IN PVOID SystemSpecific3);
4721
4722VOID DisassocTimeout(
4723 IN PVOID SystemSpecific1,
4724 IN PVOID FunctionContext,
4725 IN PVOID SystemSpecific2,
4726 IN PVOID SystemSpecific3);
4727
4728//----------------------------------------------
4729VOID MlmeDisassocReqAction(
4730 IN PRTMP_ADAPTER pAd,
4731 IN MLME_QUEUE_ELEM *Elem);
4732
4733VOID MlmeAssocReqAction(
4734 IN PRTMP_ADAPTER pAd,
4735 IN MLME_QUEUE_ELEM *Elem);
4736
4737VOID MlmeReassocReqAction(
4738 IN PRTMP_ADAPTER pAd,
4739 IN MLME_QUEUE_ELEM *Elem);
4740
4741VOID MlmeDisassocReqAction(
4742 IN PRTMP_ADAPTER pAd,
4743 IN MLME_QUEUE_ELEM *Elem);
4744
4745VOID PeerAssocRspAction(
4746 IN PRTMP_ADAPTER pAd,
4747 IN MLME_QUEUE_ELEM *Elem);
4748
4749VOID PeerReassocRspAction(
4750 IN PRTMP_ADAPTER pAd,
4751 IN MLME_QUEUE_ELEM *Elem);
4752
4753VOID PeerDisassocAction(
4754 IN PRTMP_ADAPTER pAd,
4755 IN MLME_QUEUE_ELEM *Elem);
4756
4757VOID DisassocTimeoutAction(
4758 IN PRTMP_ADAPTER pAd,
4759 IN MLME_QUEUE_ELEM *Elem);
4760
4761VOID AssocTimeoutAction(
4762 IN PRTMP_ADAPTER pAd,
4763 IN MLME_QUEUE_ELEM *Elem);
4764
4765VOID ReassocTimeoutAction(
4766 IN PRTMP_ADAPTER pAd,
4767 IN MLME_QUEUE_ELEM *Elem);
4768
4769VOID Cls3errAction(
4770 IN PRTMP_ADAPTER pAd,
4771 IN PUCHAR pAddr);
4772
4773VOID SwitchBetweenWepAndCkip(
4774 IN PRTMP_ADAPTER pAd);
4775
4776VOID InvalidStateWhenAssoc(
4777 IN PRTMP_ADAPTER pAd,
4778 IN MLME_QUEUE_ELEM *Elem);
4779
4780VOID InvalidStateWhenReassoc(
4781 IN PRTMP_ADAPTER pAd,
4782 IN MLME_QUEUE_ELEM *Elem);
4783
4784VOID InvalidStateWhenDisassociate(
4785 IN PRTMP_ADAPTER pAd,
4786 IN MLME_QUEUE_ELEM *Elem);
4787
4788#ifdef RT2870
4789VOID MlmeCntlConfirm(
4790 IN PRTMP_ADAPTER pAd,
4791 IN ULONG MsgType,
4792 IN USHORT Msg);
4793#endif // RT2870 //
4794
4795VOID ComposePsPoll(
4796 IN PRTMP_ADAPTER pAd);
4797
4798VOID ComposeNullFrame(
4799 IN PRTMP_ADAPTER pAd);
4800
4801VOID AssocPostProc(
4802 IN PRTMP_ADAPTER pAd,
4803 IN PUCHAR pAddr2,
4804 IN USHORT CapabilityInfo,
4805 IN USHORT Aid,
4806 IN UCHAR SupRate[],
4807 IN UCHAR SupRateLen,
4808 IN UCHAR ExtRate[],
4809 IN UCHAR ExtRateLen,
4810 IN PEDCA_PARM pEdcaParm,
4811 IN HT_CAPABILITY_IE *pHtCapability,
4812 IN UCHAR HtCapabilityLen,
4813 IN ADD_HT_INFO_IE *pAddHtInfo);
4814
4815VOID AuthStateMachineInit(
4816 IN PRTMP_ADAPTER pAd,
4817 IN PSTATE_MACHINE sm,
4818 OUT STATE_MACHINE_FUNC Trans[]);
4819
4820VOID AuthTimeout(
4821 IN PVOID SystemSpecific1,
4822 IN PVOID FunctionContext,
4823 IN PVOID SystemSpecific2,
4824 IN PVOID SystemSpecific3);
4825
4826VOID MlmeAuthReqAction(
4827 IN PRTMP_ADAPTER pAd,
4828 IN MLME_QUEUE_ELEM *Elem);
4829
4830VOID PeerAuthRspAtSeq2Action(
4831 IN PRTMP_ADAPTER pAd,
4832 IN MLME_QUEUE_ELEM *Elem);
4833
4834VOID PeerAuthRspAtSeq4Action(
4835 IN PRTMP_ADAPTER pAd,
4836 IN MLME_QUEUE_ELEM *Elem);
4837
4838VOID AuthTimeoutAction(
4839 IN PRTMP_ADAPTER pAd,
4840 IN MLME_QUEUE_ELEM *Elem);
4841
4842VOID Cls2errAction(
4843 IN PRTMP_ADAPTER pAd,
4844 IN PUCHAR pAddr);
4845
4846VOID MlmeDeauthReqAction(
4847 IN PRTMP_ADAPTER pAd,
4848 IN MLME_QUEUE_ELEM *Elem);
4849
4850VOID InvalidStateWhenAuth(
4851 IN PRTMP_ADAPTER pAd,
4852 IN MLME_QUEUE_ELEM *Elem);
4853
4854//=============================================
4855
4856VOID AuthRspStateMachineInit(
4857 IN PRTMP_ADAPTER pAd,
4858 IN PSTATE_MACHINE Sm,
4859 IN STATE_MACHINE_FUNC Trans[]);
4860
4861VOID PeerDeauthAction(
4862 IN PRTMP_ADAPTER pAd,
4863 IN MLME_QUEUE_ELEM *Elem);
4864
4865VOID PeerAuthSimpleRspGenAndSend(
4866 IN PRTMP_ADAPTER pAd,
4867 IN PHEADER_802_11 pHdr80211,
4868 IN USHORT Alg,
4869 IN USHORT Seq,
4870 IN USHORT Reason,
4871 IN USHORT Status);
4872
4873//
4874// Private routines in dls.c
4875//
4876
4877#ifdef CONFIG_STA_SUPPORT
4878#ifdef QOS_DLS_SUPPORT
4879void DlsStateMachineInit(
4880 IN PRTMP_ADAPTER pAd,
4881 IN STATE_MACHINE *Sm,
4882 OUT STATE_MACHINE_FUNC Trans[]);
4883
4884VOID MlmeDlsReqAction(
4885 IN PRTMP_ADAPTER pAd,
4886 IN MLME_QUEUE_ELEM *Elem);
4887
4888VOID PeerDlsReqAction(
4889 IN PRTMP_ADAPTER pAd,
4890 IN MLME_QUEUE_ELEM *Elem);
4891
4892VOID PeerDlsRspAction(
4893 IN PRTMP_ADAPTER pAd,
4894 IN MLME_QUEUE_ELEM *Elem);
4895
4896VOID MlmeDlsTearDownAction(
4897 IN PRTMP_ADAPTER pAd,
4898 IN MLME_QUEUE_ELEM *Elem);
4899
4900VOID PeerDlsTearDownAction(
4901 IN PRTMP_ADAPTER pAd,
4902 IN MLME_QUEUE_ELEM *Elem);
4903
4904VOID RTMPCheckDLSTimeOut(
4905 IN PRTMP_ADAPTER pAd);
4906
4907BOOLEAN RTMPRcvFrameDLSCheck(
4908 IN PRTMP_ADAPTER pAd,
4909 IN PHEADER_802_11 pHeader,
4910 IN ULONG Len,
4911 IN PRT28XX_RXD_STRUC pRxD);
4912
4913INT RTMPCheckDLSFrame(
4914 IN PRTMP_ADAPTER pAd,
4915 IN PUCHAR pDA);
4916
4917VOID RTMPSendDLSTearDownFrame(
4918 IN PRTMP_ADAPTER pAd,
4919 IN PUCHAR pDA);
4920
4921NDIS_STATUS RTMPSendSTAKeyRequest(
4922 IN PRTMP_ADAPTER pAd,
4923 IN PUCHAR pDA);
4924
4925NDIS_STATUS RTMPSendSTAKeyHandShake(
4926 IN PRTMP_ADAPTER pAd,
4927 IN PUCHAR pDA);
4928
4929VOID DlsTimeoutAction(
4930 IN PVOID SystemSpecific1,
4931 IN PVOID FunctionContext,
4932 IN PVOID SystemSpecific2,
4933 IN PVOID SystemSpecific3);
4934
4935BOOLEAN MlmeDlsReqSanity(
4936 IN PRTMP_ADAPTER pAd,
4937 IN VOID *Msg,
4938 IN ULONG MsgLen,
4939 OUT PRT_802_11_DLS *pDLS,
4940 OUT PUSHORT pReason);
4941
4942INT Set_DlsEntryInfo_Display_Proc(
4943 IN PRTMP_ADAPTER pAd,
4944 IN PUCHAR arg);
4945
4946MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4947 IN PRTMP_ADAPTER pAd,
4948 IN PUCHAR pAddr,
4949 IN UINT DlsEntryIdx);
4950
4951BOOLEAN MacTableDeleteDlsEntry(
4952 IN PRTMP_ADAPTER pAd,
4953 IN USHORT wcid,
4954 IN PUCHAR pAddr);
4955
4956MAC_TABLE_ENTRY *DlsEntryTableLookup(
4957 IN PRTMP_ADAPTER pAd,
4958 IN PUCHAR pAddr,
4959 IN BOOLEAN bResetIdelCount);
4960
4961MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4962 IN PRTMP_ADAPTER pAd,
4963 IN UCHAR wcid,
4964 IN PUCHAR pAddr,
4965 IN BOOLEAN bResetIdelCount);
4966
4967INT Set_DlsAddEntry_Proc(
4968 IN PRTMP_ADAPTER pAd,
4969 IN PUCHAR arg);
4970
4971INT Set_DlsTearDownEntry_Proc(
4972 IN PRTMP_ADAPTER pAd,
4973 IN PUCHAR arg);
4974#endif // QOS_DLS_SUPPORT //
4975#endif // CONFIG_STA_SUPPORT //
4976
4977#ifdef QOS_DLS_SUPPORT
4978BOOLEAN PeerDlsReqSanity(
4979 IN PRTMP_ADAPTER pAd,
4980 IN VOID *Msg,
4981 IN ULONG MsgLen,
4982 OUT PUCHAR pDA,
4983 OUT PUCHAR pSA,
4984 OUT USHORT *pCapabilityInfo,
4985 OUT USHORT *pDlsTimeout,
4986 OUT UCHAR *pRatesLen,
4987 OUT UCHAR Rates[],
4988 OUT UCHAR *pHtCapabilityLen,
4989 OUT HT_CAPABILITY_IE *pHtCapability);
4990
4991BOOLEAN PeerDlsRspSanity(
4992 IN PRTMP_ADAPTER pAd,
4993 IN VOID *Msg,
4994 IN ULONG MsgLen,
4995 OUT PUCHAR pDA,
4996 OUT PUCHAR pSA,
4997 OUT USHORT *pCapabilityInfo,
4998 OUT USHORT *pStatus,
4999 OUT UCHAR *pRatesLen,
5000 OUT UCHAR Rates[],
5001 OUT UCHAR *pHtCapabilityLen,
5002 OUT HT_CAPABILITY_IE *pHtCapability);
5003
5004BOOLEAN PeerDlsTearDownSanity(
5005 IN PRTMP_ADAPTER pAd,
5006 IN VOID *Msg,
5007 IN ULONG MsgLen,
5008 OUT PUCHAR pDA,
5009 OUT PUCHAR pSA,
5010 OUT USHORT *pReason);
5011#endif // QOS_DLS_SUPPORT //
5012
5013//========================================
5014
5015VOID SyncStateMachineInit(
5016 IN PRTMP_ADAPTER pAd,
5017 IN STATE_MACHINE *Sm,
5018 OUT STATE_MACHINE_FUNC Trans[]);
5019
5020VOID BeaconTimeout(
5021 IN PVOID SystemSpecific1,
5022 IN PVOID FunctionContext,
5023 IN PVOID SystemSpecific2,
5024 IN PVOID SystemSpecific3);
5025
5026VOID ScanTimeout(
5027 IN PVOID SystemSpecific1,
5028 IN PVOID FunctionContext,
5029 IN PVOID SystemSpecific2,
5030 IN PVOID SystemSpecific3);
5031
5032VOID MlmeScanReqAction(
5033 IN PRTMP_ADAPTER pAd,
5034 IN MLME_QUEUE_ELEM *Elem);
5035
5036VOID InvalidStateWhenScan(
5037 IN PRTMP_ADAPTER pAd,
5038 IN MLME_QUEUE_ELEM *Elem);
5039
5040VOID InvalidStateWhenJoin(
5041 IN PRTMP_ADAPTER pAd,
5042 IN MLME_QUEUE_ELEM *Elem);
5043
5044VOID InvalidStateWhenStart(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5047
5048VOID PeerBeacon(
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5051
5052VOID EnqueueProbeRequest(
5053 IN PRTMP_ADAPTER pAd);
5054
5055BOOLEAN ScanRunning(
5056 IN PRTMP_ADAPTER pAd);
5057//=========================================
5058
5059VOID MlmeCntlInit(
5060 IN PRTMP_ADAPTER pAd,
5061 IN STATE_MACHINE *S,
5062 OUT STATE_MACHINE_FUNC Trans[]);
5063
5064VOID MlmeCntlMachinePerformAction(
5065 IN PRTMP_ADAPTER pAd,
5066 IN STATE_MACHINE *S,
5067 IN MLME_QUEUE_ELEM *Elem);
5068
5069VOID CntlIdleProc(
5070 IN PRTMP_ADAPTER pAd,
5071 IN MLME_QUEUE_ELEM *Elem);
5072
5073VOID CntlOidScanProc(
5074 IN PRTMP_ADAPTER pAd,
5075 IN MLME_QUEUE_ELEM *Elem);
5076
5077VOID CntlOidSsidProc(
5078 IN PRTMP_ADAPTER pAd,
5079 IN MLME_QUEUE_ELEM * Elem);
5080
5081VOID CntlOidRTBssidProc(
5082 IN PRTMP_ADAPTER pAd,
5083 IN MLME_QUEUE_ELEM * Elem);
5084
5085VOID CntlMlmeRoamingProc(
5086 IN PRTMP_ADAPTER pAd,
5087 IN MLME_QUEUE_ELEM * Elem);
5088
5089VOID CntlWaitDisassocProc(
5090 IN PRTMP_ADAPTER pAd,
5091 IN MLME_QUEUE_ELEM *Elem);
5092
5093VOID CntlWaitJoinProc(
5094 IN PRTMP_ADAPTER pAd,
5095 IN MLME_QUEUE_ELEM *Elem);
5096
5097VOID CntlWaitReassocProc(
5098 IN PRTMP_ADAPTER pAd,
5099 IN MLME_QUEUE_ELEM *Elem);
5100
5101VOID CntlWaitStartProc(
5102 IN PRTMP_ADAPTER pAd,
5103 IN MLME_QUEUE_ELEM *Elem);
5104
5105VOID CntlWaitAuthProc(
5106 IN PRTMP_ADAPTER pAd,
5107 IN MLME_QUEUE_ELEM *Elem);
5108
5109VOID CntlWaitAuthProc2(
5110 IN PRTMP_ADAPTER pAd,
5111 IN MLME_QUEUE_ELEM *Elem);
5112
5113VOID CntlWaitAssocProc(
5114 IN PRTMP_ADAPTER pAd,
5115 IN MLME_QUEUE_ELEM *Elem);
5116
5117#ifdef QOS_DLS_SUPPORT
5118VOID CntlOidDLSSetupProc(
5119 IN PRTMP_ADAPTER pAd,
5120 IN MLME_QUEUE_ELEM *Elem);
5121#endif // QOS_DLS_SUPPORT //
5122
5123VOID LinkUp(
5124 IN PRTMP_ADAPTER pAd,
5125 IN UCHAR BssType);
5126
5127VOID LinkDown(
5128 IN PRTMP_ADAPTER pAd,
5129 IN BOOLEAN IsReqFromAP);
5130
5131VOID IterateOnBssTab(
5132 IN PRTMP_ADAPTER pAd);
5133
5134VOID IterateOnBssTab2(
5135 IN PRTMP_ADAPTER pAd);;
5136
5137VOID JoinParmFill(
5138 IN PRTMP_ADAPTER pAd,
5139 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5140 IN ULONG BssIdx);
5141
5142VOID AssocParmFill(
5143 IN PRTMP_ADAPTER pAd,
5144 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5145 IN PUCHAR pAddr,
5146 IN USHORT CapabilityInfo,
5147 IN ULONG Timeout,
5148 IN USHORT ListenIntv);
5149
5150VOID ScanParmFill(
5151 IN PRTMP_ADAPTER pAd,
5152 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5153 IN CHAR Ssid[],
5154 IN UCHAR SsidLen,
5155 IN UCHAR BssType,
5156 IN UCHAR ScanType);
5157
5158VOID DisassocParmFill(
5159 IN PRTMP_ADAPTER pAd,
5160 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5161 IN PUCHAR pAddr,
5162 IN USHORT Reason);
5163
5164VOID StartParmFill(
5165 IN PRTMP_ADAPTER pAd,
5166 IN OUT MLME_START_REQ_STRUCT *StartReq,
5167 IN CHAR Ssid[],
5168 IN UCHAR SsidLen);
5169
5170VOID AuthParmFill(
5171 IN PRTMP_ADAPTER pAd,
5172 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5173 IN PUCHAR pAddr,
5174 IN USHORT Alg);
5175
5176VOID EnqueuePsPoll(
5177 IN PRTMP_ADAPTER pAd);
5178
5179VOID EnqueueBeaconFrame(
5180 IN PRTMP_ADAPTER pAd);
5181
5182VOID MlmeJoinReqAction(
5183 IN PRTMP_ADAPTER pAd,
5184 IN MLME_QUEUE_ELEM *Elem);
5185
5186VOID MlmeScanReqAction(
5187 IN PRTMP_ADAPTER pAd,
5188 IN MLME_QUEUE_ELEM *Elem);
5189
5190VOID MlmeStartReqAction(
5191 IN PRTMP_ADAPTER pAd,
5192 IN MLME_QUEUE_ELEM *Elem);
5193
5194VOID ScanTimeoutAction(
5195 IN PRTMP_ADAPTER pAd,
5196 IN MLME_QUEUE_ELEM *Elem);
5197
5198VOID BeaconTimeoutAtJoinAction(
5199 IN PRTMP_ADAPTER pAd,
5200 IN MLME_QUEUE_ELEM *Elem);
5201
5202VOID PeerBeaconAtScanAction(
5203 IN PRTMP_ADAPTER pAd,
5204 IN MLME_QUEUE_ELEM *Elem);
5205
5206VOID PeerBeaconAtJoinAction(
5207 IN PRTMP_ADAPTER pAd,
5208 IN MLME_QUEUE_ELEM *Elem);
5209
5210VOID PeerBeacon(
5211 IN PRTMP_ADAPTER pAd,
5212 IN MLME_QUEUE_ELEM *Elem);
5213
5214VOID PeerProbeReqAction(
5215 IN PRTMP_ADAPTER pAd,
5216 IN MLME_QUEUE_ELEM *Elem);
5217
5218VOID ScanNextChannel(
5219 IN PRTMP_ADAPTER pAd);
5220
5221ULONG MakeIbssBeacon(
5222 IN PRTMP_ADAPTER pAd);
5223
5224VOID CCXAdjacentAPReport(
5225 IN PRTMP_ADAPTER pAd);
5226
5227BOOLEAN MlmeScanReqSanity(
5228 IN PRTMP_ADAPTER pAd,
5229 IN VOID *Msg,
5230 IN ULONG MsgLen,
5231 OUT UCHAR *BssType,
5232 OUT CHAR ssid[],
5233 OUT UCHAR *SsidLen,
5234 OUT UCHAR *ScanType);
5235
5236BOOLEAN PeerBeaconAndProbeRspSanity(
5237 IN PRTMP_ADAPTER pAd,
5238 IN VOID *Msg,
5239 IN ULONG MsgLen,
5240 IN UCHAR MsgChannel,
5241 OUT PUCHAR pAddr2,
5242 OUT PUCHAR pBssid,
5243 OUT CHAR Ssid[],
5244 OUT UCHAR *pSsidLen,
5245 OUT UCHAR *pBssType,
5246 OUT USHORT *pBeaconPeriod,
5247 OUT UCHAR *pChannel,
5248 OUT UCHAR *pNewChannel,
5249 OUT LARGE_INTEGER *pTimestamp,
5250 OUT CF_PARM *pCfParm,
5251 OUT USHORT *pAtimWin,
5252 OUT USHORT *pCapabilityInfo,
5253 OUT UCHAR *pErp,
5254 OUT UCHAR *pDtimCount,
5255 OUT UCHAR *pDtimPeriod,
5256 OUT UCHAR *pBcastFlag,
5257 OUT UCHAR *pMessageToMe,
5258 OUT UCHAR SupRate[],
5259 OUT UCHAR *pSupRateLen,
5260 OUT UCHAR ExtRate[],
5261 OUT UCHAR *pExtRateLen,
5262 OUT UCHAR *pCkipFlag,
5263 OUT UCHAR *pAironetCellPowerLimit,
5264 OUT PEDCA_PARM pEdcaParm,
5265 OUT PQBSS_LOAD_PARM pQbssLoad,
5266 OUT PQOS_CAPABILITY_PARM pQosCapability,
5267 OUT ULONG *pRalinkIe,
5268 OUT UCHAR *pHtCapabilityLen,
5269#ifdef CONFIG_STA_SUPPORT
5270 OUT UCHAR *pPreNHtCapabilityLen,
5271#endif // CONFIG_STA_SUPPORT //
5272 OUT HT_CAPABILITY_IE *pHtCapability,
5273 OUT UCHAR *AddHtInfoLen,
5274 OUT ADD_HT_INFO_IE *AddHtInfo,
5275 OUT UCHAR *NewExtChannel,
5276 OUT USHORT *LengthVIE,
5277 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5278
5279BOOLEAN PeerAddBAReqActionSanity(
5280 IN PRTMP_ADAPTER pAd,
5281 IN VOID *pMsg,
5282 IN ULONG MsgLen,
5283 OUT PUCHAR pAddr2);
5284
5285BOOLEAN PeerAddBARspActionSanity(
5286 IN PRTMP_ADAPTER pAd,
5287 IN VOID *pMsg,
5288 IN ULONG MsgLen);
5289
5290BOOLEAN PeerDelBAActionSanity(
5291 IN PRTMP_ADAPTER pAd,
5292 IN UCHAR Wcid,
5293 IN VOID *pMsg,
5294 IN ULONG MsgLen);
5295
5296BOOLEAN MlmeAssocReqSanity(
5297 IN PRTMP_ADAPTER pAd,
5298 IN VOID *Msg,
5299 IN ULONG MsgLen,
5300 OUT PUCHAR pApAddr,
5301 OUT USHORT *CapabilityInfo,
5302 OUT ULONG *Timeout,
5303 OUT USHORT *ListenIntv);
5304
5305BOOLEAN MlmeAuthReqSanity(
5306 IN PRTMP_ADAPTER pAd,
5307 IN VOID *Msg,
5308 IN ULONG MsgLen,
5309 OUT PUCHAR pAddr,
5310 OUT ULONG *Timeout,
5311 OUT USHORT *Alg);
5312
5313BOOLEAN MlmeStartReqSanity(
5314 IN PRTMP_ADAPTER pAd,
5315 IN VOID *Msg,
5316 IN ULONG MsgLen,
5317 OUT CHAR Ssid[],
5318 OUT UCHAR *Ssidlen);
5319
5320BOOLEAN PeerAuthSanity(
5321 IN PRTMP_ADAPTER pAd,
5322 IN VOID *Msg,
5323 IN ULONG MsgLen,
5324 OUT PUCHAR pAddr,
5325 OUT USHORT *Alg,
5326 OUT USHORT *Seq,
5327 OUT USHORT *Status,
5328 OUT CHAR ChlgText[]);
5329
5330BOOLEAN PeerAssocRspSanity(
5331 IN PRTMP_ADAPTER pAd,
5332 IN VOID *pMsg,
5333 IN ULONG MsgLen,
5334 OUT PUCHAR pAddr2,
5335 OUT USHORT *pCapabilityInfo,
5336 OUT USHORT *pStatus,
5337 OUT USHORT *pAid,
5338 OUT UCHAR SupRate[],
5339 OUT UCHAR *pSupRateLen,
5340 OUT UCHAR ExtRate[],
5341 OUT UCHAR *pExtRateLen,
5342 OUT HT_CAPABILITY_IE *pHtCapability,
5343 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5344 OUT UCHAR *pHtCapabilityLen,
5345 OUT UCHAR *pAddHtInfoLen,
5346 OUT UCHAR *pNewExtChannelOffset,
5347 OUT PEDCA_PARM pEdcaParm,
5348 OUT UCHAR *pCkipFlag);
5349
5350BOOLEAN PeerDisassocSanity(
5351 IN PRTMP_ADAPTER pAd,
5352 IN VOID *Msg,
5353 IN ULONG MsgLen,
5354 OUT PUCHAR pAddr2,
5355 OUT USHORT *Reason);
5356
5357BOOLEAN PeerWpaMessageSanity(
5358 IN PRTMP_ADAPTER pAd,
5359 IN PEAPOL_PACKET pMsg,
5360 IN ULONG MsgLen,
5361 IN UCHAR MsgType,
5362 IN MAC_TABLE_ENTRY *pEntry);
5363
5364BOOLEAN PeerDeauthSanity(
5365 IN PRTMP_ADAPTER pAd,
5366 IN VOID *Msg,
5367 IN ULONG MsgLen,
5368 OUT PUCHAR pAddr2,
5369 OUT USHORT *Reason);
5370
5371BOOLEAN PeerProbeReqSanity(
5372 IN PRTMP_ADAPTER pAd,
5373 IN VOID *Msg,
5374 IN ULONG MsgLen,
5375 OUT PUCHAR pAddr2,
5376 OUT CHAR Ssid[],
5377 OUT UCHAR *pSsidLen);
5378
5379BOOLEAN GetTimBit(
5380 IN CHAR *Ptr,
5381 IN USHORT Aid,
5382 OUT UCHAR *TimLen,
5383 OUT UCHAR *BcastFlag,
5384 OUT UCHAR *DtimCount,
5385 OUT UCHAR *DtimPeriod,
5386 OUT UCHAR *MessageToMe);
5387
5388UCHAR ChannelSanity(
5389 IN PRTMP_ADAPTER pAd,
5390 IN UCHAR channel);
5391
5392NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5393 IN PBSS_ENTRY pBss);
5394
5395BOOLEAN MlmeDelBAReqSanity(
5396 IN PRTMP_ADAPTER pAd,
5397 IN VOID *Msg,
5398 IN ULONG MsgLen);
5399
5400BOOLEAN MlmeAddBAReqSanity(
5401 IN PRTMP_ADAPTER pAd,
5402 IN VOID *Msg,
5403 IN ULONG MsgLen,
5404 OUT PUCHAR pAddr2);
5405
5406ULONG MakeOutgoingFrame(
5407 OUT CHAR *Buffer,
5408 OUT ULONG *Length, ...);
5409
5410VOID LfsrInit(
5411 IN PRTMP_ADAPTER pAd,
5412 IN ULONG Seed);
5413
5414UCHAR RandomByte(
5415 IN PRTMP_ADAPTER pAd);
5416
5417VOID AsicUpdateAutoFallBackTable(
5418 IN PRTMP_ADAPTER pAd,
5419 IN PUCHAR pTxRate);
5420
5421VOID MlmePeriodicExec(
5422 IN PVOID SystemSpecific1,
5423 IN PVOID FunctionContext,
5424 IN PVOID SystemSpecific2,
5425 IN PVOID SystemSpecific3);
5426
5427VOID LinkDownExec(
5428 IN PVOID SystemSpecific1,
5429 IN PVOID FunctionContext,
5430 IN PVOID SystemSpecific2,
5431 IN PVOID SystemSpecific3);
5432
5433VOID LinkUpExec(
5434 IN PVOID SystemSpecific1,
5435 IN PVOID FunctionContext,
5436 IN PVOID SystemSpecific2,
5437 IN PVOID SystemSpecific3);
5438
5439VOID STAMlmePeriodicExec(
5440 PRTMP_ADAPTER pAd);
5441
5442VOID MlmeAutoScan(
5443 IN PRTMP_ADAPTER pAd);
5444
5445VOID MlmeAutoReconnectLastSSID(
5446 IN PRTMP_ADAPTER pAd);
5447
5448BOOLEAN MlmeValidateSSID(
5449 IN PUCHAR pSsid,
5450 IN UCHAR SsidLen);
5451
5452VOID MlmeCheckForRoaming(
5453 IN PRTMP_ADAPTER pAd,
5454 IN ULONG Now32);
5455
5456VOID MlmeCheckForFastRoaming(
5457 IN PRTMP_ADAPTER pAd,
5458 IN ULONG Now);
5459
5460VOID MlmeDynamicTxRateSwitching(
5461 IN PRTMP_ADAPTER pAd);
5462
5463VOID MlmeSetTxRate(
5464 IN PRTMP_ADAPTER pAd,
5465 IN PMAC_TABLE_ENTRY pEntry,
5466 IN PRTMP_TX_RATE_SWITCH pTxRate);
5467
5468VOID MlmeSelectTxRateTable(
5469 IN PRTMP_ADAPTER pAd,
5470 IN PMAC_TABLE_ENTRY pEntry,
5471 IN PUCHAR *ppTable,
5472 IN PUCHAR pTableSize,
5473 IN PUCHAR pInitTxRateIdx);
5474
5475VOID MlmeCalculateChannelQuality(
5476 IN PRTMP_ADAPTER pAd,
5477 IN ULONG Now);
5478
5479VOID MlmeCheckPsmChange(
5480 IN PRTMP_ADAPTER pAd,
5481 IN ULONG Now32);
5482
5483VOID MlmeSetPsmBit(
5484 IN PRTMP_ADAPTER pAd,
5485 IN USHORT psm);
5486
5487VOID MlmeSetTxPreamble(
5488 IN PRTMP_ADAPTER pAd,
5489 IN USHORT TxPreamble);
5490
5491VOID UpdateBasicRateBitmap(
5492 IN PRTMP_ADAPTER pAd);
5493
5494VOID MlmeUpdateTxRates(
5495 IN PRTMP_ADAPTER pAd,
5496 IN BOOLEAN bLinkUp,
5497 IN UCHAR apidx);
5498
5499#ifdef DOT11_N_SUPPORT
5500VOID MlmeUpdateHtTxRates(
5501 IN PRTMP_ADAPTER pAd,
5502 IN UCHAR apidx);
5503#endif // DOT11_N_SUPPORT //
5504
5505VOID RTMPCheckRates(
5506 IN PRTMP_ADAPTER pAd,
5507 IN OUT UCHAR SupRate[],
5508 IN OUT UCHAR *SupRateLen);
5509
5510#ifdef CONFIG_STA_SUPPORT
5511BOOLEAN RTMPCheckChannel(
5512 IN PRTMP_ADAPTER pAd,
5513 IN UCHAR CentralChannel,
5514 IN UCHAR Channel);
5515#endif // CONFIG_STA_SUPPORT //
5516
5517BOOLEAN RTMPCheckHt(
5518 IN PRTMP_ADAPTER pAd,
5519 IN UCHAR Wcid,
5520 IN OUT HT_CAPABILITY_IE *pHtCapability,
5521 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5522
5523VOID StaQuickResponeForRateUpExec(
5524 IN PVOID SystemSpecific1,
5525 IN PVOID FunctionContext,
5526 IN PVOID SystemSpecific2,
5527 IN PVOID SystemSpecific3);
5528
5529VOID AsicBbpTuning1(
5530 IN PRTMP_ADAPTER pAd);
5531
5532VOID AsicBbpTuning2(
5533 IN PRTMP_ADAPTER pAd);
5534
5535VOID RTMPUpdateMlmeRate(
5536 IN PRTMP_ADAPTER pAd);
5537
5538CHAR RTMPMaxRssi(
5539 IN PRTMP_ADAPTER pAd,
5540 IN CHAR Rssi0,
5541 IN CHAR Rssi1,
5542 IN CHAR Rssi2);
5543
5544VOID AsicSetRxAnt(
5545 IN PRTMP_ADAPTER pAd,
5546 IN UCHAR Ant);
5547
5548VOID AsicEvaluateRxAnt(
5549 IN PRTMP_ADAPTER pAd);
5550
5551VOID AsicRxAntEvalTimeout(
5552 IN PVOID SystemSpecific1,
5553 IN PVOID FunctionContext,
5554 IN PVOID SystemSpecific2,
5555 IN PVOID SystemSpecific3);
5556
5557VOID APSDPeriodicExec(
5558 IN PVOID SystemSpecific1,
5559 IN PVOID FunctionContext,
5560 IN PVOID SystemSpecific2,
5561 IN PVOID SystemSpecific3);
5562
5563BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5564 IN PRTMP_ADAPTER pAd,
5565 IN PMAC_TABLE_ENTRY pEntry);
5566
5567UCHAR RTMPStaFixedTxMode(
5568 IN PRTMP_ADAPTER pAd,
5569 IN PMAC_TABLE_ENTRY pEntry);
5570
5571VOID RTMPUpdateLegacyTxSetting(
5572 UCHAR fixed_tx_mode,
5573 PMAC_TABLE_ENTRY pEntry);
5574
5575BOOLEAN RTMPAutoRateSwitchCheck(
5576 IN PRTMP_ADAPTER pAd);
5577
5578NDIS_STATUS MlmeInit(
5579 IN PRTMP_ADAPTER pAd);
5580
5581VOID MlmeHandler(
5582 IN PRTMP_ADAPTER pAd);
5583
5584VOID MlmeHalt(
5585 IN PRTMP_ADAPTER pAd);
5586
5587VOID MlmeResetRalinkCounters(
5588 IN PRTMP_ADAPTER pAd);
5589
5590VOID BuildChannelList(
5591 IN PRTMP_ADAPTER pAd);
5592
5593UCHAR FirstChannel(
5594 IN PRTMP_ADAPTER pAd);
5595
5596UCHAR NextChannel(
5597 IN PRTMP_ADAPTER pAd,
5598 IN UCHAR channel);
5599
5600VOID ChangeToCellPowerLimit(
5601 IN PRTMP_ADAPTER pAd,
5602 IN UCHAR AironetCellPowerLimit);
5603
5604VOID RaiseClock(
5605 IN PRTMP_ADAPTER pAd,
5606 IN UINT32 *x);
5607
5608VOID LowerClock(
5609 IN PRTMP_ADAPTER pAd,
5610 IN UINT32 *x);
5611
5612USHORT ShiftInBits(
5613 IN PRTMP_ADAPTER pAd);
5614
5615VOID ShiftOutBits(
5616 IN PRTMP_ADAPTER pAd,
5617 IN USHORT data,
5618 IN USHORT count);
5619
5620VOID EEpromCleanup(
5621 IN PRTMP_ADAPTER pAd);
5622
5623VOID EWDS(
5624 IN PRTMP_ADAPTER pAd);
5625
5626VOID EWEN(
5627 IN PRTMP_ADAPTER pAd);
5628
5629USHORT RTMP_EEPROM_READ16(
5630 IN PRTMP_ADAPTER pAd,
5631 IN USHORT Offset);
5632
5633VOID RTMP_EEPROM_WRITE16(
5634 IN PRTMP_ADAPTER pAd,
5635 IN USHORT Offset,
5636 IN USHORT Data);
5637
5638//
5639// Prototypes of function definition in rtmp_tkip.c
5640//
5641VOID RTMPInitTkipEngine(
5642 IN PRTMP_ADAPTER pAd,
5643 IN PUCHAR pTKey,
5644 IN UCHAR KeyId,
5645 IN PUCHAR pTA,
5646 IN PUCHAR pMICKey,
5647 IN PUCHAR pTSC,
5648 OUT PULONG pIV16,
5649 OUT PULONG pIV32);
5650
5651VOID RTMPInitMICEngine(
5652 IN PRTMP_ADAPTER pAd,
5653 IN PUCHAR pKey,
5654 IN PUCHAR pDA,
5655 IN PUCHAR pSA,
5656 IN UCHAR UserPriority,
5657 IN PUCHAR pMICKey);
5658
5659BOOLEAN RTMPTkipCompareMICValue(
5660 IN PRTMP_ADAPTER pAd,
5661 IN PUCHAR pSrc,
5662 IN PUCHAR pDA,
5663 IN PUCHAR pSA,
5664 IN PUCHAR pMICKey,
5665 IN UCHAR UserPriority,
5666 IN UINT Len);
5667
5668VOID RTMPCalculateMICValue(
5669 IN PRTMP_ADAPTER pAd,
5670 IN PNDIS_PACKET pPacket,
5671 IN PUCHAR pEncap,
5672 IN PCIPHER_KEY pKey,
5673 IN UCHAR apidx);
5674
5675BOOLEAN RTMPTkipCompareMICValueWithLLC(
5676 IN PRTMP_ADAPTER pAd,
5677 IN PUCHAR pLLC,
5678 IN PUCHAR pSrc,
5679 IN PUCHAR pDA,
5680 IN PUCHAR pSA,
5681 IN PUCHAR pMICKey,
5682 IN UINT Len);
5683
5684VOID RTMPTkipAppendByte(
5685 IN PTKIP_KEY_INFO pTkip,
5686 IN UCHAR uChar);
5687
5688VOID RTMPTkipAppend(
5689 IN PTKIP_KEY_INFO pTkip,
5690 IN PUCHAR pSrc,
5691 IN UINT nBytes);
5692
5693VOID RTMPTkipGetMIC(
5694 IN PTKIP_KEY_INFO pTkip);
5695
5696BOOLEAN RTMPSoftDecryptTKIP(
5697 IN PRTMP_ADAPTER pAd,
5698 IN PUCHAR pData,
5699 IN ULONG DataByteCnt,
5700 IN UCHAR UserPriority,
5701 IN PCIPHER_KEY pWpaKey);
5702
5703BOOLEAN RTMPSoftDecryptAES(
5704 IN PRTMP_ADAPTER pAd,
5705 IN PUCHAR pData,
5706 IN ULONG DataByteCnt,
5707 IN PCIPHER_KEY pWpaKey);
5708
5709//
5710// Prototypes of function definition in cmm_info.c
5711//
5712NDIS_STATUS RTMPWPARemoveKeyProc(
5713 IN PRTMP_ADAPTER pAd,
5714 IN PVOID pBuf);
5715
5716VOID RTMPWPARemoveAllKeys(
5717 IN PRTMP_ADAPTER pAd);
5718
5719BOOLEAN RTMPCheckStrPrintAble(
5720 IN CHAR *pInPutStr,
5721 IN UCHAR strLen);
5722
5723VOID RTMPSetPhyMode(
5724 IN PRTMP_ADAPTER pAd,
5725 IN ULONG phymode);
5726
5727VOID RTMPUpdateHTIE(
5728 IN RT_HT_CAPABILITY *pRtHt,
5729 IN UCHAR *pMcsSet,
5730 OUT HT_CAPABILITY_IE *pHtCapability,
5731 OUT ADD_HT_INFO_IE *pAddHtInfo);
5732
5733VOID RTMPAddWcidAttributeEntry(
5734 IN PRTMP_ADAPTER pAd,
5735 IN UCHAR BssIdx,
5736 IN UCHAR KeyIdx,
5737 IN UCHAR CipherAlg,
5738 IN MAC_TABLE_ENTRY *pEntry);
5739
5740CHAR *GetEncryptType(
5741 CHAR enc);
5742
5743CHAR *GetAuthMode(
5744 CHAR auth);
5745
5746VOID RTMPIoctlGetSiteSurvey(
5747 IN PRTMP_ADAPTER pAdapter,
5748 IN struct iwreq *wrq);
5749
5750VOID RTMPIoctlGetMacTable(
5751 IN PRTMP_ADAPTER pAd,
5752 IN struct iwreq *wrq);
5753
5754VOID RTMPIndicateWPA2Status(
5755 IN PRTMP_ADAPTER pAdapter);
5756
5757VOID RTMPOPModeSwitching(
5758 IN PRTMP_ADAPTER pAd);
5759
5760#ifdef CONFIG_STA_SUPPORT
5761VOID RTMPAddBSSIDCipher(
5762 IN PRTMP_ADAPTER pAd,
5763 IN UCHAR Aid,
5764 IN PNDIS_802_11_KEY pKey,
5765 IN UCHAR CipherAlg);
5766#endif // CONFIG_STA_SUPPORT //
5767
5768#ifdef DOT11_N_SUPPORT
5769VOID RTMPSetHT(
5770 IN PRTMP_ADAPTER pAd,
5771 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5772
5773VOID RTMPSetIndividualHT(
5774 IN PRTMP_ADAPTER pAd,
5775 IN UCHAR apidx);
5776#endif // DOT11_N_SUPPORT //
5777
5778VOID RTMPSendWirelessEvent(
5779 IN PRTMP_ADAPTER pAd,
5780 IN USHORT Event_flag,
5781 IN PUCHAR pAddr,
5782 IN UCHAR BssIdx,
5783 IN CHAR Rssi);
5784
5785VOID NICUpdateCntlCounters(
5786 IN PRTMP_ADAPTER pAd,
5787 IN PHEADER_802_11 pHeader,
5788 IN UCHAR SubType,
5789 IN PRXWI_STRUC pRxWI);
5790//
5791// prototype in wpa.c
5792//
5793BOOLEAN WpaMsgTypeSubst(
5794 IN UCHAR EAPType,
5795 OUT INT *MsgType);
5796
5797VOID WpaPskStateMachineInit(
5798 IN PRTMP_ADAPTER pAd,
5799 IN STATE_MACHINE *S,
5800 OUT STATE_MACHINE_FUNC Trans[]);
5801
5802VOID WpaEAPOLKeyAction(
5803 IN PRTMP_ADAPTER pAd,
5804 IN MLME_QUEUE_ELEM *Elem);
5805
5806VOID WpaPairMsg1Action(
5807 IN PRTMP_ADAPTER pAd,
5808 IN MLME_QUEUE_ELEM *Elem);
5809
5810VOID WpaPairMsg3Action(
5811 IN PRTMP_ADAPTER pAd,
5812 IN MLME_QUEUE_ELEM *Elem);
5813
5814VOID WpaGroupMsg1Action(
5815 IN PRTMP_ADAPTER pAd,
5816 IN MLME_QUEUE_ELEM *Elem);
5817
5818VOID WpaMacHeaderInit(
5819 IN PRTMP_ADAPTER pAd,
5820 IN OUT PHEADER_802_11 pHdr80211,
5821 IN UCHAR wep,
5822 IN PUCHAR pAddr1);
5823
5824VOID Wpa2PairMsg1Action(
5825 IN PRTMP_ADAPTER pAd,
5826 IN MLME_QUEUE_ELEM *Elem);
5827
5828VOID Wpa2PairMsg3Action(
5829 IN PRTMP_ADAPTER pAd,
5830 IN MLME_QUEUE_ELEM *Elem);
5831
5832BOOLEAN ParseKeyData(
5833 IN PRTMP_ADAPTER pAd,
5834 IN PUCHAR pKeyData,
5835 IN UCHAR KeyDataLen,
5836 IN UCHAR bPairewise);
5837
5838VOID RTMPToWirelessSta(
5839 IN PRTMP_ADAPTER pAd,
5840 IN PUCHAR pHeader802_3,
5841 IN UINT HdrLen,
5842 IN PUCHAR pData,
5843 IN UINT DataLen,
5844 IN BOOLEAN is4wayFrame);
5845
5846VOID HMAC_SHA1(
5847 IN UCHAR *text,
5848 IN UINT text_len,
5849 IN UCHAR *key,
5850 IN UINT key_len,
5851 IN UCHAR *digest);
5852
5853VOID PRF(
5854 IN UCHAR *key,
5855 IN INT key_len,
5856 IN UCHAR *prefix,
5857 IN INT prefix_len,
5858 IN UCHAR *data,
5859 IN INT data_len,
5860 OUT UCHAR *output,
5861 IN INT len);
5862
5863VOID CCKMPRF(
5864 IN UCHAR *key,
5865 IN INT key_len,
5866 IN UCHAR *data,
5867 IN INT data_len,
5868 OUT UCHAR *output,
5869 IN INT len);
5870
5871VOID WpaCountPTK(
5872 IN PRTMP_ADAPTER pAd,
5873 IN UCHAR *PMK,
5874 IN UCHAR *ANonce,
5875 IN UCHAR *AA,
5876 IN UCHAR *SNonce,
5877 IN UCHAR *SA,
5878 OUT UCHAR *output,
5879 IN UINT len);
5880
5881VOID GenRandom(
5882 IN PRTMP_ADAPTER pAd,
5883 IN UCHAR *macAddr,
5884 OUT UCHAR *random);
5885
5886//
5887// prototype in aironet.c
5888//
5889VOID AironetStateMachineInit(
5890 IN PRTMP_ADAPTER pAd,
5891 IN STATE_MACHINE *S,
5892 OUT STATE_MACHINE_FUNC Trans[]);
5893
5894VOID AironetMsgAction(
5895 IN PRTMP_ADAPTER pAd,
5896 IN MLME_QUEUE_ELEM *Elem);
5897
5898VOID AironetRequestAction(
5899 IN PRTMP_ADAPTER pAd,
5900 IN MLME_QUEUE_ELEM *Elem);
5901
5902VOID ChannelLoadRequestAction(
5903 IN PRTMP_ADAPTER pAd,
5904 IN UCHAR Index);
5905
5906VOID NoiseHistRequestAction(
5907 IN PRTMP_ADAPTER pAd,
5908 IN UCHAR Index);
5909
5910VOID BeaconRequestAction(
5911 IN PRTMP_ADAPTER pAd,
5912 IN UCHAR Index);
5913
5914VOID AironetReportAction(
5915 IN PRTMP_ADAPTER pAd,
5916 IN MLME_QUEUE_ELEM *Elem);
5917
5918VOID ChannelLoadReportAction(
5919 IN PRTMP_ADAPTER pAd,
5920 IN UCHAR Index);
5921
5922VOID NoiseHistReportAction(
5923 IN PRTMP_ADAPTER pAd,
5924 IN UCHAR Index);
5925
5926VOID AironetFinalReportAction(
5927 IN PRTMP_ADAPTER pAd);
5928
5929VOID BeaconReportAction(
5930 IN PRTMP_ADAPTER pAd,
5931 IN UCHAR Index);
5932
5933VOID AironetAddBeaconReport(
5934 IN PRTMP_ADAPTER pAd,
5935 IN ULONG Index,
5936 IN PMLME_QUEUE_ELEM pElem);
5937
5938VOID AironetCreateBeaconReportFromBssTable(
5939 IN PRTMP_ADAPTER pAd);
5940
5941VOID DBGPRINT_TX_RING(
5942 IN PRTMP_ADAPTER pAd,
5943 IN UCHAR QueIdx);
5944
5945VOID DBGPRINT_RX_RING(
5946 IN PRTMP_ADAPTER pAd);
5947
5948CHAR ConvertToRssi(
5949 IN PRTMP_ADAPTER pAd,
5950 IN CHAR Rssi,
5951 IN UCHAR RssiNumber);
5952
5953
5954#ifdef DOT11N_DRAFT3
5955VOID BuildEffectedChannelList(
5956 IN PRTMP_ADAPTER pAd);
5957#endif // DOT11N_DRAFT3 //
5958
5959
5960VOID APAsicEvaluateRxAnt(
5961 IN PRTMP_ADAPTER pAd);
5962
5963
5964VOID APAsicRxAntEvalTimeout(
5965 IN PRTMP_ADAPTER pAd);
5966
5967//
5968// function prototype in cmm_wpa.c
5969//
5970BOOLEAN RTMPCheckWPAframe(
5971 IN PRTMP_ADAPTER pAd,
5972 IN PMAC_TABLE_ENTRY pEntry,
5973 IN PUCHAR pData,
5974 IN ULONG DataByteCount,
5975 IN UCHAR FromWhichBSSID);
5976
5977VOID AES_GTK_KEY_UNWRAP(
5978 IN UCHAR *key,
5979 OUT UCHAR *plaintext,
5980 IN UCHAR c_len,
5981 IN UCHAR *ciphertext);
5982
5983BOOLEAN RTMPCheckRSNIE(
5984 IN PRTMP_ADAPTER pAd,
5985 IN PUCHAR pData,
5986 IN UCHAR DataLen,
5987 IN MAC_TABLE_ENTRY *pEntry,
5988 OUT UCHAR *Offset);
5989
5990BOOLEAN RTMPParseEapolKeyData(
5991 IN PRTMP_ADAPTER pAd,
5992 IN PUCHAR pKeyData,
5993 IN UCHAR KeyDataLen,
5994 IN UCHAR GroupKeyIndex,
5995 IN UCHAR MsgType,
5996 IN BOOLEAN bWPA2,
5997 IN MAC_TABLE_ENTRY *pEntry);
5998
5999VOID ConstructEapolMsg(
6000 IN PRTMP_ADAPTER pAd,
6001 IN UCHAR PeerAuthMode,
6002 IN UCHAR PeerWepStatus,
6003 IN UCHAR MyGroupKeyWepStatus,
6004 IN UCHAR MsgType,
6005 IN UCHAR DefaultKeyIdx,
6006 IN UCHAR *ReplayCounter,
6007 IN UCHAR *KeyNonce,
6008 IN UCHAR *TxRSC,
6009 IN UCHAR *PTK,
6010 IN UCHAR *GTK,
6011 IN UCHAR *RSNIE,
6012 IN UCHAR RSNIE_Len,
6013 OUT PEAPOL_PACKET pMsg);
6014
6015VOID CalculateMIC(
6016 IN PRTMP_ADAPTER pAd,
6017 IN UCHAR PeerWepStatus,
6018 IN UCHAR *PTK,
6019 OUT PEAPOL_PACKET pMsg);
6020
6021NDIS_STATUS RTMPSoftDecryptBroadCastData(
6022 IN PRTMP_ADAPTER pAd,
6023 IN RX_BLK *pRxBlk,
6024 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
6025 IN PCIPHER_KEY pShard_key);
6026
6027VOID ConstructEapolKeyData(
6028 IN PRTMP_ADAPTER pAd,
6029 IN UCHAR PeerAuthMode,
6030 IN UCHAR PeerWepStatus,
6031 IN UCHAR GroupKeyWepStatus,
6032 IN UCHAR MsgType,
6033 IN UCHAR DefaultKeyIdx,
6034 IN BOOLEAN bWPA2Capable,
6035 IN UCHAR *PTK,
6036 IN UCHAR *GTK,
6037 IN UCHAR *RSNIE,
6038 IN UCHAR RSNIE_LEN,
6039 OUT PEAPOL_PACKET pMsg);
6040
6041VOID RTMPMakeRSNIE(
6042 IN PRTMP_ADAPTER pAd,
6043 IN UINT AuthMode,
6044 IN UINT WepStatus,
6045 IN UCHAR apidx);
6046
6047//
6048// function prototype in ap_wpa.c
6049//
6050
6051BOOLEAN APWpaMsgTypeSubst(
6052 IN UCHAR EAPType,
6053 OUT INT *MsgType) ;
6054
6055MAC_TABLE_ENTRY *PACInquiry(
6056 IN PRTMP_ADAPTER pAd,
6057 IN ULONG Wcid);
6058
6059BOOLEAN RTMPCheckMcast(
6060 IN PRTMP_ADAPTER pAd,
6061 IN PEID_STRUCT eid_ptr,
6062 IN MAC_TABLE_ENTRY *pEntry);
6063
6064BOOLEAN RTMPCheckUcast(
6065 IN PRTMP_ADAPTER pAd,
6066 IN PEID_STRUCT eid_ptr,
6067 IN MAC_TABLE_ENTRY *pEntry);
6068
6069BOOLEAN RTMPCheckAUTH(
6070 IN PRTMP_ADAPTER pAd,
6071 IN PEID_STRUCT eid_ptr,
6072 IN MAC_TABLE_ENTRY *pEntry);
6073
6074VOID WPAStart4WayHS(
6075 IN PRTMP_ADAPTER pAd,
6076 IN MAC_TABLE_ENTRY *pEntry,
6077 IN ULONG TimeInterval);
6078
6079VOID WPAStart2WayGroupHS(
6080 IN PRTMP_ADAPTER pAd,
6081 IN MAC_TABLE_ENTRY *pEntry);
6082
6083VOID APWpaEAPPacketAction(
6084 IN PRTMP_ADAPTER pAd,
6085 IN MLME_QUEUE_ELEM *Elem);
6086
6087VOID APWpaEAPOLStartAction(
6088 IN PRTMP_ADAPTER pAd,
6089 IN MLME_QUEUE_ELEM *Elem);
6090
6091VOID APWpaEAPOLLogoffAction(
6092 IN PRTMP_ADAPTER pAd,
6093 IN MLME_QUEUE_ELEM *Elem);
6094
6095VOID APWpaEAPOLKeyAction(
6096 IN PRTMP_ADAPTER pAd,
6097 IN MLME_QUEUE_ELEM *Elem);
6098
6099VOID APWpaEAPOLASFAlertAction(
6100 IN PRTMP_ADAPTER pAd,
6101 IN MLME_QUEUE_ELEM *Elem);
6102
6103VOID HandleCounterMeasure(
6104 IN PRTMP_ADAPTER pAd,
6105 IN MAC_TABLE_ENTRY *pEntry);
6106
6107VOID PeerPairMsg2Action(
6108 IN PRTMP_ADAPTER pAd,
6109 IN MAC_TABLE_ENTRY *pEntry,
6110 IN MLME_QUEUE_ELEM *Elem);
6111
6112VOID PeerPairMsg4Action(
6113 IN PRTMP_ADAPTER pAd,
6114 IN MAC_TABLE_ENTRY *pEntry,
6115 IN MLME_QUEUE_ELEM *Elem);
6116
6117VOID CMTimerExec(
6118 IN PVOID SystemSpecific1,
6119 IN PVOID FunctionContext,
6120 IN PVOID SystemSpecific2,
6121 IN PVOID SystemSpecific3);
6122
6123VOID WPARetryExec(
6124 IN PVOID SystemSpecific1,
6125 IN PVOID FunctionContext,
6126 IN PVOID SystemSpecific2,
6127 IN PVOID SystemSpecific3);
6128
6129VOID EnqueueStartForPSKExec(
6130 IN PVOID SystemSpecific1,
6131 IN PVOID FunctionContext,
6132 IN PVOID SystemSpecific2,
6133 IN PVOID SystemSpecific3);
6134
6135VOID RTMPHandleSTAKey(
6136 IN PRTMP_ADAPTER pAdapter,
6137 IN MAC_TABLE_ENTRY *pEntry,
6138 IN MLME_QUEUE_ELEM *Elem);
6139
6140VOID PeerGroupMsg2Action(
6141 IN PRTMP_ADAPTER pAd,
6142 IN PMAC_TABLE_ENTRY pEntry,
6143 IN VOID *Msg,
6144 IN UINT MsgLen);
6145
6146VOID PairDisAssocAction(
6147 IN PRTMP_ADAPTER pAd,
6148 IN PMAC_TABLE_ENTRY pEntry,
6149 IN USHORT Reason);
6150
6151VOID MlmeDeAuthAction(
6152 IN PRTMP_ADAPTER pAd,
6153 IN PMAC_TABLE_ENTRY pEntry,
6154 IN USHORT Reason);
6155
6156VOID GREKEYPeriodicExec(
6157 IN PVOID SystemSpecific1,
6158 IN PVOID FunctionContext,
6159 IN PVOID SystemSpecific2,
6160 IN PVOID SystemSpecific3);
6161
6162VOID CountGTK(
6163 IN UCHAR *PMK,
6164 IN UCHAR *GNonce,
6165 IN UCHAR *AA,
6166 OUT UCHAR *output,
6167 IN UINT len);
6168
6169VOID GetSmall(
6170 IN PVOID pSrc1,
6171 IN PVOID pSrc2,
6172 OUT PUCHAR out,
6173 IN ULONG Length);
6174
6175VOID GetLarge(
6176 IN PVOID pSrc1,
6177 IN PVOID pSrc2,
6178 OUT PUCHAR out,
6179 IN ULONG Length);
6180
6181VOID APGenRandom(
6182 IN PRTMP_ADAPTER pAd,
6183 OUT UCHAR *random);
6184
6185VOID AES_GTK_KEY_WRAP(
6186 IN UCHAR *key,
6187 IN UCHAR *plaintext,
6188 IN UCHAR p_len,
6189 OUT UCHAR *ciphertext);
6190
6191VOID WpaSend(
6192 IN PRTMP_ADAPTER pAdapter,
6193 IN PUCHAR pPacket,
6194 IN ULONG Len);
6195
6196VOID APToWirelessSta(
6197 IN PRTMP_ADAPTER pAd,
6198 IN MAC_TABLE_ENTRY *pEntry,
6199 IN PUCHAR pHeader802_3,
6200 IN UINT HdrLen,
6201 IN PUCHAR pData,
6202 IN UINT DataLen,
6203 IN BOOLEAN bClearFrame);
6204
6205VOID RTMPAddPMKIDCache(
6206 IN PRTMP_ADAPTER pAd,
6207 IN INT apidx,
6208 IN PUCHAR pAddr,
6209 IN UCHAR *PMKID,
6210 IN UCHAR *PMK);
6211
6212INT RTMPSearchPMKIDCache(
6213 IN PRTMP_ADAPTER pAd,
6214 IN INT apidx,
6215 IN PUCHAR pAddr);
6216
6217VOID RTMPDeletePMKIDCache(
6218 IN PRTMP_ADAPTER pAd,
6219 IN INT apidx,
6220 IN INT idx);
6221
6222VOID RTMPMaintainPMKIDCache(
6223 IN PRTMP_ADAPTER pAd);
6224
6225VOID RTMPSendTriggerFrame(
6226 IN PRTMP_ADAPTER pAd,
6227 IN PVOID pBuffer,
6228 IN ULONG Length,
6229 IN UCHAR TxRate,
6230 IN BOOLEAN bQosNull);
6231
6232#ifdef RT30xx
6233VOID RTMPFilterCalibration(
6234 IN PRTMP_ADAPTER pAd);
6235#endif // RT30xx //
6236
6237
6238//typedef void (*TIMER_FUNCTION)(unsigned long);
6239
6240
6241/* timeout -- ms */
6242VOID RTMP_SetPeriodicTimer(
6243 IN NDIS_MINIPORT_TIMER *pTimer,
6244 IN unsigned long timeout);
6245
6246VOID RTMP_OS_Init_Timer(
6247 IN PRTMP_ADAPTER pAd,
6248 IN NDIS_MINIPORT_TIMER *pTimer,
6249 IN TIMER_FUNCTION function,
6250 IN PVOID data);
6251
6252VOID RTMP_OS_Add_Timer(
6253 IN NDIS_MINIPORT_TIMER *pTimer,
6254 IN unsigned long timeout);
6255
6256VOID RTMP_OS_Mod_Timer(
6257 IN NDIS_MINIPORT_TIMER *pTimer,
6258 IN unsigned long timeout);
6259
6260
6261VOID RTMP_OS_Del_Timer(
6262 IN NDIS_MINIPORT_TIMER *pTimer,
6263 OUT BOOLEAN *pCancelled);
6264
6265
6266VOID RTMP_OS_Release_Packet(
6267 IN PRTMP_ADAPTER pAd,
6268 IN PQUEUE_ENTRY pEntry);
6269
6270VOID RTMPusecDelay(
6271 IN ULONG usec);
6272
6273NDIS_STATUS os_alloc_mem(
6274 IN PRTMP_ADAPTER pAd,
6275 OUT PUCHAR *mem,
6276 IN ULONG size);
6277
6278NDIS_STATUS os_free_mem(
6279 IN PRTMP_ADAPTER pAd,
6280 IN PUCHAR mem);
6281
6282
6283void RTMP_AllocateSharedMemory(
6284 IN PRTMP_ADAPTER pAd,
6285 IN ULONG Length,
6286 IN BOOLEAN Cached,
6287 OUT PVOID *VirtualAddress,
6288 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6289
6290VOID RTMPFreeTxRxRingMemory(
6291 IN PRTMP_ADAPTER pAd);
6292
6293NDIS_STATUS AdapterBlockAllocateMemory(
6294 IN PVOID handle,
6295 OUT PVOID *ppAd);
6296
6297void RTMP_AllocateTxDescMemory(
6298 IN PRTMP_ADAPTER pAd,
6299 IN UINT Index,
6300 IN ULONG Length,
6301 IN BOOLEAN Cached,
6302 OUT PVOID *VirtualAddress,
6303 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6304
6305void RTMP_AllocateFirstTxBuffer(
6306 IN PRTMP_ADAPTER pAd,
6307 IN UINT Index,
6308 IN ULONG Length,
6309 IN BOOLEAN Cached,
6310 OUT PVOID *VirtualAddress,
6311 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6312
6313void RTMP_AllocateMgmtDescMemory(
6314 IN PRTMP_ADAPTER pAd,
6315 IN ULONG Length,
6316 IN BOOLEAN Cached,
6317 OUT PVOID *VirtualAddress,
6318 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6319
6320void RTMP_AllocateRxDescMemory(
6321 IN PRTMP_ADAPTER pAd,
6322 IN ULONG Length,
6323 IN BOOLEAN Cached,
6324 OUT PVOID *VirtualAddress,
6325 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6326
6327PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6328 IN PRTMP_ADAPTER pAd,
6329 IN ULONG Length,
6330 IN BOOLEAN Cached,
6331 OUT PVOID *VirtualAddress,
6332 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6333
6334PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6335 IN PRTMP_ADAPTER pAd,
6336 IN ULONG Length,
6337 IN BOOLEAN Cached,
6338 OUT PVOID *VirtualAddress);
6339
6340PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6341 IN PRTMP_ADAPTER pAd,
6342 IN ULONG Length);
6343
6344void RTMP_QueryPacketInfo(
6345 IN PNDIS_PACKET pPacket,
6346 OUT PACKET_INFO *pPacketInfo,
6347 OUT PUCHAR *pSrcBufVA,
6348 OUT UINT *pSrcBufLen);
6349
6350void RTMP_QueryNextPacketInfo(
6351 IN PNDIS_PACKET *ppPacket,
6352 OUT PACKET_INFO *pPacketInfo,
6353 OUT PUCHAR *pSrcBufVA,
6354 OUT UINT *pSrcBufLen);
6355
6356
6357BOOLEAN RTMP_FillTxBlkInfo(
6358 IN RTMP_ADAPTER *pAd,
6359 IN TX_BLK *pTxBlk);
6360
6361
6362PRTMP_SCATTER_GATHER_LIST
6363rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6364
6365
6366 void announce_802_3_packet(
6367 IN PRTMP_ADAPTER pAd,
6368 IN PNDIS_PACKET pPacket);
6369
6370
6371UINT BA_Reorder_AMSDU_Annnounce(
6372 IN PRTMP_ADAPTER pAd,
6373 IN PNDIS_PACKET pPacket);
6374
6375
6376UINT Handle_AMSDU_Packet(
6377 IN PRTMP_ADAPTER pAd,
6378 IN PUCHAR pData,
6379 IN ULONG DataSize,
6380 IN UCHAR FromWhichBSSID);
6381
6382
6383void convert_802_11_to_802_3_packet(
6384 IN PRTMP_ADAPTER pAd,
6385 IN PNDIS_PACKET pPacket,
6386 IN PUCHAR p8023hdr,
6387 IN PUCHAR pData,
6388 IN ULONG DataSize,
6389 IN UCHAR FromWhichBSSID);
6390
6391
6392PNET_DEV get_netdev_from_bssid(
6393 IN PRTMP_ADAPTER pAd,
6394 IN UCHAR FromWhichBSSID);
6395
6396
6397PNDIS_PACKET duplicate_pkt(
6398 IN PRTMP_ADAPTER pAd,
6399 IN PUCHAR pHeader802_3,
6400 IN UINT HdrLen,
6401 IN PUCHAR pData,
6402 IN ULONG DataSize,
6403 IN UCHAR FromWhichBSSID);
6404
6405
6406PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6407 IN PRTMP_ADAPTER pAd,
6408 IN PNDIS_PACKET pOldPkt);
6409
6410PNDIS_PACKET duplicate_pkt_with_VLAN(
6411 IN PRTMP_ADAPTER pAd,
6412 IN PUCHAR pHeader802_3,
6413 IN UINT HdrLen,
6414 IN PUCHAR pData,
6415 IN ULONG DataSize,
6416 IN UCHAR FromWhichBSSID);
6417
6418PNDIS_PACKET duplicate_pkt_with_WPI(
6419 IN PRTMP_ADAPTER pAd,
6420 IN PNDIS_PACKET pPacket,
6421 IN UINT32 ext_head_len,
6422 IN UINT32 ext_tail_len);
6423
6424UCHAR VLAN_8023_Header_Copy(
6425 IN PRTMP_ADAPTER pAd,
6426 IN PUCHAR pHeader802_3,
6427 IN UINT HdrLen,
6428 OUT PUCHAR pData,
6429 IN UCHAR FromWhichBSSID);
6430
6431#ifdef DOT11_N_SUPPORT
6432void ba_flush_reordering_timeout_mpdus(
6433 IN PRTMP_ADAPTER pAd,
6434 IN PBA_REC_ENTRY pBAEntry,
6435 IN ULONG Now32);
6436
6437
6438VOID BAOriSessionSetUp(
6439 IN PRTMP_ADAPTER pAd,
6440 IN MAC_TABLE_ENTRY *pEntry,
6441 IN UCHAR TID,
6442 IN USHORT TimeOut,
6443 IN ULONG DelayTime,
6444 IN BOOLEAN isForced);
6445
6446VOID BASessionTearDownALL(
6447 IN OUT PRTMP_ADAPTER pAd,
6448 IN UCHAR Wcid);
6449#endif // DOT11_N_SUPPORT //
6450
6451BOOLEAN OS_Need_Clone_Packet(void);
6452
6453
6454VOID build_tx_packet(
6455 IN PRTMP_ADAPTER pAd,
6456 IN PNDIS_PACKET pPacket,
6457 IN PUCHAR pFrame,
6458 IN ULONG FrameLen);
6459
6460
6461VOID BAOriSessionTearDown(
6462 IN OUT PRTMP_ADAPTER pAd,
6463 IN UCHAR Wcid,
6464 IN UCHAR TID,
6465 IN BOOLEAN bPassive,
6466 IN BOOLEAN bForceSend);
6467
6468VOID BARecSessionTearDown(
6469 IN OUT PRTMP_ADAPTER pAd,
6470 IN UCHAR Wcid,
6471 IN UCHAR TID,
6472 IN BOOLEAN bPassive);
6473
6474BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6475void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6476
6477ULONG AutoChBssInsertEntry(
6478 IN PRTMP_ADAPTER pAd,
6479 IN PUCHAR pBssid,
6480 IN CHAR Ssid[],
6481 IN UCHAR SsidLen,
6482 IN UCHAR ChannelNo,
6483 IN CHAR Rssi);
6484
6485void AutoChBssTableInit(
6486 IN PRTMP_ADAPTER pAd);
6487
6488void ChannelInfoInit(
6489 IN PRTMP_ADAPTER pAd);
6490
6491void AutoChBssTableDestroy(
6492 IN PRTMP_ADAPTER pAd);
6493
6494void ChannelInfoDestroy(
6495 IN PRTMP_ADAPTER pAd);
6496
6497UCHAR New_ApAutoSelectChannel(
6498 IN PRTMP_ADAPTER pAd);
6499
6500
6501#ifdef NINTENDO_AP
6502VOID InitNINTENDO_TABLE(
6503 IN PRTMP_ADAPTER pAd);
6504
6505UCHAR CheckNINTENDO_TABLE(
6506 IN PRTMP_ADAPTER pAd,
6507 PCHAR pDS_Ssid,
6508 UCHAR DS_SsidLen,
6509 PUCHAR pDS_Addr);
6510
6511UCHAR DelNINTENDO_ENTRY(
6512 IN PRTMP_ADAPTER pAd,
6513 UCHAR * pDS_Addr);
6514
6515VOID RTMPIoctlNintendoCapable(
6516 IN PRTMP_ADAPTER pAd,
6517 IN struct iwreq *wrq);
6518
6519VOID RTMPIoctlNintendoGetTable(
6520 IN PRTMP_ADAPTER pAd,
6521 IN struct iwreq *wrq);
6522
6523VOID RTMPIoctlNintendoSetTable(
6524 IN PRTMP_ADAPTER pAd,
6525 IN struct iwreq *wrq);
6526
6527#endif // NINTENDO_AP //
6528
6529BOOLEAN rtstrmactohex(
6530 IN char *s1,
6531 IN char *s2);
6532
6533BOOLEAN rtstrcasecmp(
6534 IN char *s1,
6535 IN char *s2);
6536
6537char *rtstrstruncasecmp(
6538 IN char *s1,
6539 IN char *s2);
6540
6541char *rtstrstr(
6542 IN const char * s1,
6543 IN const char * s2);
6544
6545char *rstrtok(
6546 IN char * s,
6547 IN const char * ct);
6548
6549int rtinet_aton(
6550 const char *cp,
6551 unsigned int *addr);
6552
6553////////// common ioctl functions //////////
6554INT Set_DriverVersion_Proc(
6555 IN PRTMP_ADAPTER pAd,
6556 IN PUCHAR arg);
6557
6558INT Set_CountryRegion_Proc(
6559 IN PRTMP_ADAPTER pAd,
6560 IN PUCHAR arg);
6561
6562INT Set_CountryRegionABand_Proc(
6563 IN PRTMP_ADAPTER pAd,
6564 IN PUCHAR arg);
6565
6566INT Set_WirelessMode_Proc(
6567 IN PRTMP_ADAPTER pAd,
6568 IN PUCHAR arg);
6569
6570INT Set_Channel_Proc(
6571 IN PRTMP_ADAPTER pAd,
6572 IN PUCHAR arg);
6573
6574INT Set_ShortSlot_Proc(
6575 IN PRTMP_ADAPTER pAd,
6576 IN PUCHAR arg);
6577
6578INT Set_TxPower_Proc(
6579 IN PRTMP_ADAPTER pAd,
6580 IN PUCHAR arg);
6581
6582INT Set_BGProtection_Proc(
6583 IN PRTMP_ADAPTER pAd,
6584 IN PUCHAR arg);
6585
6586INT Set_TxPreamble_Proc(
6587 IN PRTMP_ADAPTER pAd,
6588 IN PUCHAR arg);
6589
6590INT Set_RTSThreshold_Proc(
6591 IN PRTMP_ADAPTER pAd,
6592 IN PUCHAR arg);
6593
6594INT Set_FragThreshold_Proc(
6595 IN PRTMP_ADAPTER pAd,
6596 IN PUCHAR arg);
6597
6598INT Set_TxBurst_Proc(
6599 IN PRTMP_ADAPTER pAd,
6600 IN PUCHAR arg);
6601
6602#ifdef AGGREGATION_SUPPORT
6603INT Set_PktAggregate_Proc(
6604 IN PRTMP_ADAPTER pAd,
6605 IN PUCHAR arg);
6606#endif
6607
6608INT Set_IEEE80211H_Proc(
6609 IN PRTMP_ADAPTER pAd,
6610 IN PUCHAR arg);
6611
6612#ifdef DBG
6613INT Set_Debug_Proc(
6614 IN PRTMP_ADAPTER pAd,
6615 IN PUCHAR arg);
6616#endif
6617
6618INT Show_DescInfo_Proc(
6619 IN PRTMP_ADAPTER pAd,
6620 IN PUCHAR arg);
6621
6622INT Set_ResetStatCounter_Proc(
6623 IN PRTMP_ADAPTER pAd,
6624 IN PUCHAR arg);
6625
6626#ifdef DOT11_N_SUPPORT
6627INT Set_BASetup_Proc(
6628 IN PRTMP_ADAPTER pAd,
6629 IN PUCHAR arg);
6630
6631INT Set_BADecline_Proc(
6632 IN PRTMP_ADAPTER pAd,
6633 IN PUCHAR arg);
6634
6635INT Set_BAOriTearDown_Proc(
6636 IN PRTMP_ADAPTER pAd,
6637 IN PUCHAR arg);
6638
6639INT Set_BARecTearDown_Proc(
6640 IN PRTMP_ADAPTER pAd,
6641 IN PUCHAR arg);
6642
6643INT Set_HtBw_Proc(
6644 IN PRTMP_ADAPTER pAd,
6645 IN PUCHAR arg);
6646
6647INT Set_HtMcs_Proc(
6648 IN PRTMP_ADAPTER pAd,
6649 IN PUCHAR arg);
6650
6651INT Set_HtGi_Proc(
6652 IN PRTMP_ADAPTER pAd,
6653 IN PUCHAR arg);
6654
6655INT Set_HtOpMode_Proc(
6656 IN PRTMP_ADAPTER pAd,
6657 IN PUCHAR arg);
6658
6659INT Set_HtStbc_Proc(
6660 IN PRTMP_ADAPTER pAd,
6661 IN PUCHAR arg);
6662
6663INT Set_HtHtc_Proc(
6664 IN PRTMP_ADAPTER pAd,
6665 IN PUCHAR arg);
6666
6667INT Set_HtExtcha_Proc(
6668 IN PRTMP_ADAPTER pAd,
6669 IN PUCHAR arg);
6670
6671INT Set_HtMpduDensity_Proc(
6672 IN PRTMP_ADAPTER pAd,
6673 IN PUCHAR arg);
6674
6675INT Set_HtBaWinSize_Proc(
6676 IN PRTMP_ADAPTER pAd,
6677 IN PUCHAR arg);
6678
6679INT Set_HtRdg_Proc(
6680 IN PRTMP_ADAPTER pAd,
6681 IN PUCHAR arg);
6682
6683INT Set_HtLinkAdapt_Proc(
6684 IN PRTMP_ADAPTER pAd,
6685 IN PUCHAR arg);
6686
6687INT Set_HtAmsdu_Proc(
6688 IN PRTMP_ADAPTER pAd,
6689 IN PUCHAR arg);
6690
6691INT Set_HtAutoBa_Proc(
6692 IN PRTMP_ADAPTER pAd,
6693 IN PUCHAR arg);
6694
6695INT Set_HtProtect_Proc(
6696 IN PRTMP_ADAPTER pAd,
6697 IN PUCHAR arg);
6698
6699INT Set_HtMimoPs_Proc(
6700 IN PRTMP_ADAPTER pAd,
6701 IN PUCHAR arg);
6702
6703
6704INT Set_ForceShortGI_Proc(
6705 IN PRTMP_ADAPTER pAd,
6706 IN PUCHAR arg);
6707
6708INT Set_ForceGF_Proc(
6709 IN PRTMP_ADAPTER pAd,
6710 IN PUCHAR arg);
6711
6712INT SetCommonHT(
6713 IN PRTMP_ADAPTER pAd);
6714
6715INT Set_SendPSMPAction_Proc(
6716 IN PRTMP_ADAPTER pAd,
6717 IN PUCHAR arg);
6718
6719INT Set_HtMIMOPSmode_Proc(
6720 IN PRTMP_ADAPTER pAd,
6721 IN PUCHAR arg);
6722
6723
6724INT Set_HtTxBASize_Proc(
6725 IN PRTMP_ADAPTER pAd,
6726 IN PUCHAR arg);
6727#endif // DOT11_N_SUPPORT //
6728
6729
6730
6731#ifdef CONFIG_STA_SUPPORT
6732//Dls , kathy
6733VOID RTMPSendDLSTearDownFrame(
6734 IN PRTMP_ADAPTER pAd,
6735 IN PUCHAR pDA);
6736
6737#ifdef DOT11_N_SUPPORT
6738//Block ACK
6739VOID QueryBATABLE(
6740 IN PRTMP_ADAPTER pAd,
6741 OUT PQUERYBA_TABLE pBAT);
6742#endif // DOT11_N_SUPPORT //
6743
6744#ifdef WPA_SUPPLICANT_SUPPORT
6745INT WpaCheckEapCode(
6746 IN PRTMP_ADAPTER pAd,
6747 IN PUCHAR pFrame,
6748 IN USHORT FrameLen,
6749 IN USHORT OffSet);
6750
6751VOID WpaSendMicFailureToWpaSupplicant(
6752 IN PRTMP_ADAPTER pAd,
6753 IN BOOLEAN bUnicast);
6754
6755VOID SendAssocIEsToWpaSupplicant(
6756 IN PRTMP_ADAPTER pAd);
6757#endif // WPA_SUPPLICANT_SUPPORT //
6758
6759#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6760int wext_notify_event_assoc(
6761 IN RTMP_ADAPTER *pAd);
6762#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6763
6764#endif // CONFIG_STA_SUPPORT //
6765
6766
6767
6768#ifdef DOT11_N_SUPPORT
6769VOID Handle_BSS_Width_Trigger_Events(
6770 IN PRTMP_ADAPTER pAd);
6771
6772void build_ext_channel_switch_ie(
6773 IN PRTMP_ADAPTER pAd,
6774 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6775#endif // DOT11_N_SUPPORT //
6776
6777
6778BOOLEAN APRxDoneInterruptHandle(
6779 IN PRTMP_ADAPTER pAd);
6780
6781BOOLEAN STARxDoneInterruptHandle(
6782 IN PRTMP_ADAPTER pAd,
6783 IN BOOLEAN argc);
6784
6785#ifdef DOT11_N_SUPPORT
6786// AMPDU packet indication
6787VOID Indicate_AMPDU_Packet(
6788 IN PRTMP_ADAPTER pAd,
6789 IN RX_BLK *pRxBlk,
6790 IN UCHAR FromWhichBSSID);
6791
6792// AMSDU packet indication
6793VOID Indicate_AMSDU_Packet(
6794 IN PRTMP_ADAPTER pAd,
6795 IN RX_BLK *pRxBlk,
6796 IN UCHAR FromWhichBSSID);
6797#endif // DOT11_N_SUPPORT //
6798
6799// Normal legacy Rx packet indication
6800VOID Indicate_Legacy_Packet(
6801 IN PRTMP_ADAPTER pAd,
6802 IN RX_BLK *pRxBlk,
6803 IN UCHAR FromWhichBSSID);
6804
6805VOID Indicate_EAPOL_Packet(
6806 IN PRTMP_ADAPTER pAd,
6807 IN RX_BLK *pRxBlk,
6808 IN UCHAR FromWhichBSSID);
6809
6810void update_os_packet_info(
6811 IN PRTMP_ADAPTER pAd,
6812 IN RX_BLK *pRxBlk,
6813 IN UCHAR FromWhichBSSID);
6814
6815void wlan_802_11_to_802_3_packet(
6816 IN PRTMP_ADAPTER pAd,
6817 IN RX_BLK *pRxBlk,
6818 IN PUCHAR pHeader802_3,
6819 IN UCHAR FromWhichBSSID);
6820
6821UINT deaggregate_AMSDU_announce(
6822 IN PRTMP_ADAPTER pAd,
6823 PNDIS_PACKET pPacket,
6824 IN PUCHAR pData,
6825 IN ULONG DataSize);
6826
6827
6828#ifdef CONFIG_STA_SUPPORT
6829// remove LLC and get 802_3 Header
6830#define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6831{ \
6832 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6833 \
6834 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6835 { \
6836 _pDA = _pRxBlk->pHeader->Addr3; \
6837 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6838 } \
6839 else \
6840 { \
6841 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6842 { \
6843 _pDA = _pRxBlk->pHeader->Addr1; \
6844 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6845 _pSA = _pRxBlk->pHeader->Addr2; \
6846 else \
6847 _pSA = _pRxBlk->pHeader->Addr3; \
6848 } \
6849 else \
6850 { \
6851 _pDA = _pRxBlk->pHeader->Addr1; \
6852 _pSA = _pRxBlk->pHeader->Addr2; \
6853 } \
6854 } \
6855 \
6856 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6857 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6858}
6859#endif // CONFIG_STA_SUPPORT //
6860
6861
6862BOOLEAN APFowardWirelessStaToWirelessSta(
6863 IN PRTMP_ADAPTER pAd,
6864 IN PNDIS_PACKET pPacket,
6865 IN ULONG FromWhichBSSID);
6866
6867VOID Announce_or_Forward_802_3_Packet(
6868 IN PRTMP_ADAPTER pAd,
6869 IN PNDIS_PACKET pPacket,
6870 IN UCHAR FromWhichBSSID);
6871
6872VOID Sta_Announce_or_Forward_802_3_Packet(
6873 IN PRTMP_ADAPTER pAd,
6874 IN PNDIS_PACKET pPacket,
6875 IN UCHAR FromWhichBSSID);
6876
6877
6878#ifdef CONFIG_STA_SUPPORT
6879#define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6880 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6881 //announce_802_3_packet(_pAd, _pPacket);
6882#endif // CONFIG_STA_SUPPORT //
6883
6884
6885PNDIS_PACKET DuplicatePacket(
6886 IN PRTMP_ADAPTER pAd,
6887 IN PNDIS_PACKET pPacket,
6888 IN UCHAR FromWhichBSSID);
6889
6890
6891PNDIS_PACKET ClonePacket(
6892 IN PRTMP_ADAPTER pAd,
6893 IN PNDIS_PACKET pPacket,
6894 IN PUCHAR pData,
6895 IN ULONG DataSize);
6896
6897
6898// Normal, AMPDU or AMSDU
6899VOID CmmRxnonRalinkFrameIndicate(
6900 IN PRTMP_ADAPTER pAd,
6901 IN RX_BLK *pRxBlk,
6902 IN UCHAR FromWhichBSSID);
6903
6904VOID CmmRxRalinkFrameIndicate(
6905 IN PRTMP_ADAPTER pAd,
6906 IN MAC_TABLE_ENTRY *pEntry,
6907 IN RX_BLK *pRxBlk,
6908 IN UCHAR FromWhichBSSID);
6909
6910VOID Update_Rssi_Sample(
6911 IN PRTMP_ADAPTER pAd,
6912 IN RSSI_SAMPLE *pRssi,
6913 IN PRXWI_STRUC pRxWI);
6914
6915PNDIS_PACKET GetPacketFromRxRing(
6916 IN PRTMP_ADAPTER pAd,
6917 OUT PRT28XX_RXD_STRUC pSaveRxD,
6918 OUT BOOLEAN *pbReschedule,
6919 IN OUT UINT32 *pRxPending);
6920
6921PNDIS_PACKET RTMPDeFragmentDataFrame(
6922 IN PRTMP_ADAPTER pAd,
6923 IN RX_BLK *pRxBlk);
6924
6925////////////////////////////////////////
6926
6927
6928
6929
6930
6931#ifdef SNMP_SUPPORT
6932//for snmp , kathy
6933typedef struct _DefaultKeyIdxValue
6934{
6935 UCHAR KeyIdx;
6936 UCHAR Value[16];
6937} DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6938#endif
6939
6940
6941#ifdef CONFIG_STA_SUPPORT
6942enum {
6943 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6944 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6945 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6946 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6947 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6948 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6949 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6950 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6951 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6952 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6953 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6954};
6955enum {
6956 P80211ENUM_msgitem_status_no_value = 0x00
6957};
6958enum {
6959 P80211ENUM_truth_false = 0x00,
6960 P80211ENUM_truth_true = 0x01
6961};
6962
6963/* Definition from madwifi */
6964typedef struct {
6965 UINT32 did;
6966 UINT16 status;
6967 UINT16 len;
6968 UINT32 data;
6969} p80211item_uint32_t;
6970
6971typedef struct {
6972 UINT32 msgcode;
6973 UINT32 msglen;
6974#define WLAN_DEVNAMELEN_MAX 16
6975 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6976 p80211item_uint32_t hosttime;
6977 p80211item_uint32_t mactime;
6978 p80211item_uint32_t channel;
6979 p80211item_uint32_t rssi;
6980 p80211item_uint32_t sq;
6981 p80211item_uint32_t signal;
6982 p80211item_uint32_t noise;
6983 p80211item_uint32_t rate;
6984 p80211item_uint32_t istx;
6985 p80211item_uint32_t frmlen;
6986} wlan_ng_prism2_header;
6987
6988/* The radio capture header precedes the 802.11 header. */
6989typedef struct PACKED _ieee80211_radiotap_header {
6990 UINT8 it_version; /* Version 0. Only increases
6991 * for drastic changes,
6992 * introduction of compatible
6993 * new fields does not count.
6994 */
6995 UINT8 it_pad;
6996 UINT16 it_len; /* length of the whole
6997 * header in bytes, including
6998 * it_version, it_pad,
6999 * it_len, and data fields.
7000 */
7001 UINT32 it_present; /* A bitmap telling which
7002 * fields are present. Set bit 31
7003 * (0x80000000) to extend the
7004 * bitmap by another 32 bits.
7005 * Additional extensions are made
7006 * by setting bit 31.
7007 */
7008}ieee80211_radiotap_header ;
7009
7010enum ieee80211_radiotap_type {
7011 IEEE80211_RADIOTAP_TSFT = 0,
7012 IEEE80211_RADIOTAP_FLAGS = 1,
7013 IEEE80211_RADIOTAP_RATE = 2,
7014 IEEE80211_RADIOTAP_CHANNEL = 3,
7015 IEEE80211_RADIOTAP_FHSS = 4,
7016 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
7017 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
7018 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
7019 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
7020 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
7021 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
7022 IEEE80211_RADIOTAP_ANTENNA = 11,
7023 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
7024 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
7025};
7026
7027#define WLAN_RADIOTAP_PRESENT ( \
7028 (1 << IEEE80211_RADIOTAP_TSFT) | \
7029 (1 << IEEE80211_RADIOTAP_FLAGS) | \
7030 (1 << IEEE80211_RADIOTAP_RATE) | \
7031 0)
7032
7033typedef struct _wlan_radiotap_header {
7034 ieee80211_radiotap_header wt_ihdr;
7035 INT64 wt_tsft;
7036 UINT8 wt_flags;
7037 UINT8 wt_rate;
7038} wlan_radiotap_header;
7039/* Definition from madwifi */
7040
7041void send_monitor_packets(
7042 IN PRTMP_ADAPTER pAd,
7043 IN RX_BLK *pRxBlk);
7044
7045#if WIRELESS_EXT >= 12
7046// This function will be called when query /proc
7047struct iw_statistics *rt28xx_get_wireless_stats(
7048 IN struct net_device *net_dev);
7049#endif
7050
7051VOID RTMPSetDesiredRates(
7052 IN PRTMP_ADAPTER pAdapter,
7053 IN LONG Rates);
7054#endif // CONFIG_STA_SUPPORT //
7055
7056INT Set_FixedTxMode_Proc(
7057 IN PRTMP_ADAPTER pAd,
7058 IN PUCHAR arg);
7059
7060#ifdef CONFIG_APSTA_MIXED_SUPPORT
7061INT Set_OpMode_Proc(
7062 IN PRTMP_ADAPTER pAd,
7063 IN PUCHAR arg);
7064#endif // CONFIG_APSTA_MIXED_SUPPORT //
7065
7066static inline char* GetPhyMode(
7067 int Mode)
7068{
7069 switch(Mode)
7070 {
7071 case MODE_CCK:
7072 return "CCK";
7073
7074 case MODE_OFDM:
7075 return "OFDM";
7076#ifdef DOT11_N_SUPPORT
7077 case MODE_HTMIX:
7078 return "HTMIX";
7079
7080 case MODE_HTGREENFIELD:
7081 return "GREEN";
7082#endif // DOT11_N_SUPPORT //
7083 default:
7084 return "N/A";
7085 }
7086}
7087
7088
7089static inline char* GetBW(
7090 int BW)
7091{
7092 switch(BW)
7093 {
7094 case BW_10:
7095 return "10M";
7096
7097 case BW_20:
7098 return "20M";
7099#ifdef DOT11_N_SUPPORT
7100 case BW_40:
7101 return "40M";
7102#endif // DOT11_N_SUPPORT //
7103 default:
7104 return "N/A";
7105 }
7106}
7107
7108
7109VOID RT28xxThreadTerminate(
7110 IN RTMP_ADAPTER *pAd);
7111
7112BOOLEAN RT28XXChipsetCheck(
7113 IN void *_dev_p);
7114
7115BOOLEAN RT28XXNetDevInit(
7116 IN void *_dev_p,
7117 IN struct net_device *net_dev,
7118 IN RTMP_ADAPTER *pAd);
7119
7120BOOLEAN RT28XXProbePostConfig(
7121 IN void *_dev_p,
7122 IN RTMP_ADAPTER *pAd,
7123 IN INT32 argc);
7124
7125VOID RT28XXDMADisable(
7126 IN RTMP_ADAPTER *pAd);
7127
7128VOID RT28XXDMAEnable(
7129 IN RTMP_ADAPTER *pAd);
7130
7131VOID RT28xx_UpdateBeaconToAsic(
7132 IN RTMP_ADAPTER * pAd,
7133 IN INT apidx,
7134 IN ULONG BeaconLen,
7135 IN ULONG UpdatePos);
7136
7137INT rt28xx_ioctl(
7138 IN struct net_device *net_dev,
7139 IN OUT struct ifreq *rq,
7140 IN INT cmd);
7141
7142
7143#ifdef CONFIG_STA_SUPPORT
7144INT rt28xx_sta_ioctl(
7145 IN struct net_device *net_dev,
7146 IN OUT struct ifreq *rq,
7147 IN INT cmd);
7148#endif // CONFIG_STA_SUPPORT //
7149
7150BOOLEAN RT28XXSecurityKeyAdd(
7151 IN PRTMP_ADAPTER pAd,
7152 IN ULONG apidx,
7153 IN ULONG KeyIdx,
7154 IN MAC_TABLE_ENTRY *pEntry);
7155
7156////////////////////////////////////////
7157PNDIS_PACKET GetPacketFromRxRing(
7158 IN PRTMP_ADAPTER pAd,
7159 OUT PRT28XX_RXD_STRUC pSaveRxD,
7160 OUT BOOLEAN *pbReschedule,
7161 IN OUT UINT32 *pRxPending);
7162
7163
7164void kill_thread_task(PRTMP_ADAPTER pAd);
7165
7166void tbtt_tasklet(unsigned long data);
7167
7168
7169VOID AsicTurnOffRFClk(
7170 IN PRTMP_ADAPTER pAd,
7171 IN UCHAR Channel);
7172
7173VOID AsicTurnOnRFClk(
7174 IN PRTMP_ADAPTER pAd,
7175 IN UCHAR Channel);
7176
7177#ifdef RT30xx
7178NTSTATUS RT30xxWriteRFRegister(
7179 IN PRTMP_ADAPTER pAd,
7180 IN UCHAR RegID,
7181 IN UCHAR Value);
7182
7183NTSTATUS RT30xxReadRFRegister(
7184 IN PRTMP_ADAPTER pAd,
7185 IN UCHAR RegID,
7186 IN PUCHAR pValue);
7187
7188//2008/09/11:KH add to support efuse<--
7189UCHAR eFuseReadRegisters(
7190 IN PRTMP_ADAPTER pAd,
7191 IN USHORT Offset,
7192 IN USHORT Length,
7193 OUT USHORT* pData);
7194
7195VOID eFuseReadPhysical(
7196 IN PRTMP_ADAPTER pAd,
7197 IN PUSHORT lpInBuffer,
7198 IN ULONG nInBufferSize,
7199 OUT PUSHORT lpOutBuffer,
7200 IN ULONG nOutBufferSize
7201);
7202
7203NTSTATUS eFuseRead(
7204 IN PRTMP_ADAPTER pAd,
7205 IN USHORT Offset,
7206 OUT PUCHAR pData,
7207 IN USHORT Length);
7208
7209VOID eFusePhysicalWriteRegisters(
7210 IN PRTMP_ADAPTER pAd,
7211 IN USHORT Offset,
7212 IN USHORT Length,
7213 OUT USHORT* pData);
7214
7215NTSTATUS eFuseWriteRegisters(
7216 IN PRTMP_ADAPTER pAd,
7217 IN USHORT Offset,
7218 IN USHORT Length,
7219 IN USHORT* pData);
7220
7221VOID eFuseWritePhysical(
7222 IN PRTMP_ADAPTER pAd,
7223 PUSHORT lpInBuffer,
7224 ULONG nInBufferSize,
7225 PUCHAR lpOutBuffer,
7226 ULONG nOutBufferSize
7227);
7228
7229NTSTATUS eFuseWrite(
7230 IN PRTMP_ADAPTER pAd,
7231 IN USHORT Offset,
7232 IN PUCHAR pData,
7233 IN USHORT length);
7234
7235INT set_eFuseGetFreeBlockCount_Proc(
7236 IN PRTMP_ADAPTER pAd,
7237 IN PUCHAR arg);
7238
7239INT set_eFusedump_Proc(
7240 IN PRTMP_ADAPTER pAd,
7241 IN PUCHAR arg);
7242
7243INT set_eFuseLoadFromBin_Proc(
7244 IN PRTMP_ADAPTER pAd,
7245 IN PUCHAR arg);
7246
7247NTSTATUS eFuseWriteRegistersFromBin(
7248 IN PRTMP_ADAPTER pAd,
7249 IN USHORT Offset,
7250 IN USHORT Length,
7251 IN USHORT* pData);
7252
7253VOID eFusePhysicalReadRegisters(
7254 IN PRTMP_ADAPTER pAd,
7255 IN USHORT Offset,
7256 IN USHORT Length,
7257 OUT USHORT* pData);
7258
7259NDIS_STATUS NICLoadEEPROM(
7260 IN PRTMP_ADAPTER pAd);
7261
7262BOOLEAN bNeedLoadEEPROM(
7263 IN PRTMP_ADAPTER pAd);
7264//2008/09/11:KH add to support efuse-->
7265#endif // RT30xx //
7266
7267#ifdef RT30xx
7268// add by johnli, RF power sequence setup
7269VOID RT30xxLoadRFNormalModeSetup(
7270 IN PRTMP_ADAPTER pAd);
7271
7272VOID RT30xxLoadRFSleepModeSetup(
7273 IN PRTMP_ADAPTER pAd);
7274
7275VOID RT30xxReverseRFSleepModeSetup(
7276 IN PRTMP_ADAPTER pAd);
7277// end johnli
7278#endif // RT30xx //
7279
7280#ifdef RT2870
7281//
7282// Function Prototype in rtusb_bulk.c
7283//
7284VOID RTUSBInitTxDesc(
7285 IN PRTMP_ADAPTER pAd,
7286 IN PTX_CONTEXT pTxContext,
7287 IN UCHAR BulkOutPipeId,
7288 IN usb_complete_t Func);
7289
7290VOID RTUSBInitHTTxDesc(
7291 IN PRTMP_ADAPTER pAd,
7292 IN PHT_TX_CONTEXT pTxContext,
7293 IN UCHAR BulkOutPipeId,
7294 IN ULONG BulkOutSize,
7295 IN usb_complete_t Func);
7296
7297VOID RTUSBInitRxDesc(
7298 IN PRTMP_ADAPTER pAd,
7299 IN PRX_CONTEXT pRxContext);
7300
7301VOID RTUSBCleanUpDataBulkOutQueue(
7302 IN PRTMP_ADAPTER pAd);
7303
7304VOID RTUSBCancelPendingBulkOutIRP(
7305 IN PRTMP_ADAPTER pAd);
7306
7307VOID RTUSBBulkOutDataPacket(
7308 IN PRTMP_ADAPTER pAd,
7309 IN UCHAR BulkOutPipeId,
7310 IN UCHAR Index);
7311
7312VOID RTUSBBulkOutNullFrame(
7313 IN PRTMP_ADAPTER pAd);
7314
7315VOID RTUSBBulkOutRTSFrame(
7316 IN PRTMP_ADAPTER pAd);
7317
7318VOID RTUSBCancelPendingBulkInIRP(
7319 IN PRTMP_ADAPTER pAd);
7320
7321VOID RTUSBCancelPendingIRPs(
7322 IN PRTMP_ADAPTER pAd);
7323
7324VOID RTUSBBulkOutMLMEPacket(
7325 IN PRTMP_ADAPTER pAd,
7326 IN UCHAR Index);
7327
7328VOID RTUSBBulkOutPsPoll(
7329 IN PRTMP_ADAPTER pAd);
7330
7331VOID RTUSBCleanUpMLMEBulkOutQueue(
7332 IN PRTMP_ADAPTER pAd);
7333
7334VOID RTUSBKickBulkOut(
7335 IN PRTMP_ADAPTER pAd);
7336
7337VOID RTUSBBulkReceive(
7338 IN PRTMP_ADAPTER pAd);
7339
7340VOID DoBulkIn(
7341 IN RTMP_ADAPTER *pAd);
7342
7343VOID RTUSBInitRxDesc(
7344 IN PRTMP_ADAPTER pAd,
7345 IN PRX_CONTEXT pRxContext);
7346
7347VOID RTUSBBulkRxHandle(
7348 IN unsigned long data);
7349
7350//
7351// Function Prototype in rtusb_io.c
7352//
7353NTSTATUS RTUSBMultiRead(
7354 IN PRTMP_ADAPTER pAd,
7355 IN USHORT Offset,
7356 OUT PUCHAR pData,
7357 IN USHORT length);
7358
7359NTSTATUS RTUSBMultiWrite(
7360 IN PRTMP_ADAPTER pAd,
7361 IN USHORT Offset,
7362 IN PUCHAR pData,
7363 IN USHORT length);
7364
7365NTSTATUS RTUSBMultiWrite_OneByte(
7366 IN PRTMP_ADAPTER pAd,
7367 IN USHORT Offset,
7368 IN PUCHAR pData);
7369
7370NTSTATUS RTUSBReadBBPRegister(
7371 IN PRTMP_ADAPTER pAd,
7372 IN UCHAR Id,
7373 IN PUCHAR pValue);
7374
7375NTSTATUS RTUSBWriteBBPRegister(
7376 IN PRTMP_ADAPTER pAd,
7377 IN UCHAR Id,
7378 IN UCHAR Value);
7379
7380NTSTATUS RTUSBWriteRFRegister(
7381 IN PRTMP_ADAPTER pAd,
7382 IN UINT32 Value);
7383
7384NTSTATUS RTUSB_VendorRequest(
7385 IN PRTMP_ADAPTER pAd,
7386 IN UINT32 TransferFlags,
7387 IN UCHAR ReservedBits,
7388 IN UCHAR Request,
7389 IN USHORT Value,
7390 IN USHORT Index,
7391 IN PVOID TransferBuffer,
7392 IN UINT32 TransferBufferLength);
7393
7394NTSTATUS RTUSBReadEEPROM(
7395 IN PRTMP_ADAPTER pAd,
7396 IN USHORT Offset,
7397 OUT PUCHAR pData,
7398 IN USHORT length);
7399
7400NTSTATUS RTUSBWriteEEPROM(
7401 IN PRTMP_ADAPTER pAd,
7402 IN USHORT Offset,
7403 IN PUCHAR pData,
7404 IN USHORT length);
7405
7406VOID RTUSBPutToSleep(
7407 IN PRTMP_ADAPTER pAd);
7408
7409NTSTATUS RTUSBWakeUp(
7410 IN PRTMP_ADAPTER pAd);
7411
7412VOID RTUSBInitializeCmdQ(
7413 IN PCmdQ cmdq);
7414
7415NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7416 IN PRTMP_ADAPTER pAd,
7417 IN NDIS_OID Oid,
7418 IN BOOLEAN SetInformation,
7419 IN PVOID pInformationBuffer,
7420 IN UINT32 InformationBufferLength);
7421
7422NDIS_STATUS RTUSBEnqueueInternalCmd(
7423 IN PRTMP_ADAPTER pAd,
7424 IN NDIS_OID Oid,
7425 IN PVOID pInformationBuffer,
7426 IN UINT32 InformationBufferLength);
7427
7428VOID RTUSBDequeueCmd(
7429 IN PCmdQ cmdq,
7430 OUT PCmdQElmt *pcmdqelmt);
7431
7432INT RTUSBCmdThread(
7433 IN OUT PVOID Context);
7434
7435INT TimerQThread(
7436 IN OUT PVOID Context);
7437
7438RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7439 IN RTMP_ADAPTER *pAd,
7440 IN RALINK_TIMER_STRUCT *pTimer);
7441
7442BOOLEAN RT2870_TimerQ_Remove(
7443 IN RTMP_ADAPTER *pAd,
7444 IN RALINK_TIMER_STRUCT *pTimer);
7445
7446void RT2870_TimerQ_Exit(
7447 IN RTMP_ADAPTER *pAd);
7448
7449void RT2870_TimerQ_Init(
7450 IN RTMP_ADAPTER *pAd);
7451
7452VOID RT2870_BssBeaconExit(
7453 IN RTMP_ADAPTER *pAd);
7454
7455VOID RT2870_BssBeaconStop(
7456 IN RTMP_ADAPTER *pAd);
7457
7458VOID RT2870_BssBeaconStart(
7459 IN RTMP_ADAPTER * pAd);
7460
7461VOID RT2870_BssBeaconInit(
7462 IN RTMP_ADAPTER *pAd);
7463
7464VOID RT2870_WatchDog(
7465 IN RTMP_ADAPTER *pAd);
7466
7467NTSTATUS RTUSBWriteMACRegister(
7468 IN PRTMP_ADAPTER pAd,
7469 IN USHORT Offset,
7470 IN UINT32 Value);
7471
7472NTSTATUS RTUSBReadMACRegister(
7473 IN PRTMP_ADAPTER pAd,
7474 IN USHORT Offset,
7475 OUT PUINT32 pValue);
7476
7477NTSTATUS RTUSBSingleWrite(
7478 IN RTMP_ADAPTER *pAd,
7479 IN USHORT Offset,
7480 IN USHORT Value);
7481
7482NTSTATUS RTUSBFirmwareRun(
7483 IN PRTMP_ADAPTER pAd);
7484
7485NTSTATUS RTUSBFirmwareWrite(
7486 IN PRTMP_ADAPTER pAd,
7487 IN PUCHAR pFwImage,
7488 IN ULONG FwLen);
7489
7490NTSTATUS RTUSBFirmwareOpmode(
7491 IN PRTMP_ADAPTER pAd,
7492 OUT PUINT32 pValue);
7493
7494NTSTATUS RTUSBVenderReset(
7495 IN PRTMP_ADAPTER pAd);
7496
7497NDIS_STATUS RTUSBSetHardWareRegister(
7498 IN PRTMP_ADAPTER pAdapter,
7499 IN PVOID pBuf);
7500
7501NDIS_STATUS RTUSBQueryHardWareRegister(
7502 IN PRTMP_ADAPTER pAdapter,
7503 IN PVOID pBuf);
7504
7505VOID CMDHandler(
7506 IN PRTMP_ADAPTER pAd);
7507
7508
7509NDIS_STATUS CreateThreads(
7510 IN struct net_device *net_dev );
7511
7512
7513VOID MacTableInitialize(
7514 IN PRTMP_ADAPTER pAd);
7515
7516VOID MlmeSetPsm(
7517 IN PRTMP_ADAPTER pAd,
7518 IN USHORT psm);
7519
7520NDIS_STATUS RTMPWPAAddKeyProc(
7521 IN PRTMP_ADAPTER pAd,
7522 IN PVOID pBuf);
7523
7524VOID AsicRxAntEvalAction(
7525 IN PRTMP_ADAPTER pAd);
7526
7527void append_pkt(
7528 IN PRTMP_ADAPTER pAd,
7529 IN PUCHAR pHeader802_3,
7530 IN UINT HdrLen,
7531 IN PUCHAR pData,
7532 IN ULONG DataSize,
7533 OUT PNDIS_PACKET *ppPacket);
7534
7535UINT deaggregate_AMSDU_announce(
7536 IN PRTMP_ADAPTER pAd,
7537 PNDIS_PACKET pPacket,
7538 IN PUCHAR pData,
7539 IN ULONG DataSize);
7540
7541NDIS_STATUS RTMPCheckRxError(
7542 IN PRTMP_ADAPTER pAd,
7543 IN PHEADER_802_11 pHeader,
7544 IN PRXWI_STRUC pRxWI,
7545 IN PRT28XX_RXD_STRUC pRxINFO);
7546
7547
7548VOID RTUSBMlmeHardTransmit(
7549 IN PRTMP_ADAPTER pAd,
7550 IN PMGMT_STRUC pMgmt);
7551
7552INT MlmeThread(
7553 IN PVOID Context);
7554
7555//
7556// Function Prototype in rtusb_data.c
7557//
7558NDIS_STATUS RTUSBFreeDescriptorRequest(
7559 IN PRTMP_ADAPTER pAd,
7560 IN UCHAR BulkOutPipeId,
7561 IN UINT32 NumberRequired);
7562
7563
7564BOOLEAN RTUSBNeedQueueBackForAgg(
7565 IN RTMP_ADAPTER *pAd,
7566 IN UCHAR BulkOutPipeId);
7567
7568
7569VOID RTMPWriteTxInfo(
7570 IN PRTMP_ADAPTER pAd,
7571 IN PTXINFO_STRUC pTxInfo,
7572 IN USHORT USBDMApktLen,
7573 IN BOOLEAN bWiv,
7574 IN UCHAR QueueSel,
7575 IN UCHAR NextValid,
7576 IN UCHAR TxBurst);
7577
7578//
7579// Function Prototype in cmm_data_2870.c
7580//
7581USHORT RtmpUSB_WriteSubTxResource(
7582 IN PRTMP_ADAPTER pAd,
7583 IN TX_BLK *pTxBlk,
7584 IN BOOLEAN bIsLast,
7585 OUT USHORT *FreeNumber);
7586
7587USHORT RtmpUSB_WriteSingleTxResource(
7588 IN PRTMP_ADAPTER pAd,
7589 IN TX_BLK *pTxBlk,
7590 IN BOOLEAN bIsLast,
7591 OUT USHORT *FreeNumber);
7592
7593USHORT RtmpUSB_WriteFragTxResource(
7594 IN PRTMP_ADAPTER pAd,
7595 IN TX_BLK *pTxBlk,
7596 IN UCHAR fragNum,
7597 OUT USHORT *FreeNumber);
7598
7599USHORT RtmpUSB_WriteMultiTxResource(
7600 IN PRTMP_ADAPTER pAd,
7601 IN TX_BLK *pTxBlk,
7602 IN UCHAR frameNum,
7603 OUT USHORT *FreeNumber);
7604
7605VOID RtmpUSB_FinalWriteTxResource(
7606 IN PRTMP_ADAPTER pAd,
7607 IN TX_BLK *pTxBlk,
7608 IN USHORT totalMPDUSize,
7609 IN USHORT TxIdx);
7610
7611VOID RtmpUSBDataLastTxIdx(
7612 IN PRTMP_ADAPTER pAd,
7613 IN UCHAR QueIdx,
7614 IN USHORT TxIdx);
7615
7616VOID RtmpUSBDataKickOut(
7617 IN PRTMP_ADAPTER pAd,
7618 IN TX_BLK *pTxBlk,
7619 IN UCHAR QueIdx);
7620
7621
7622int RtmpUSBMgmtKickOut(
7623 IN RTMP_ADAPTER *pAd,
7624 IN UCHAR QueIdx,
7625 IN PNDIS_PACKET pPacket,
7626 IN PUCHAR pSrcBufVA,
7627 IN UINT SrcBufLen);
7628
7629VOID RtmpUSBNullFrameKickOut(
7630 IN RTMP_ADAPTER *pAd,
7631 IN UCHAR QueIdx,
7632 IN UCHAR *pNullFrame,
7633 IN UINT32 frameLen);
7634
7635VOID RT28xxUsbStaAsicForceWakeup(
7636 IN PRTMP_ADAPTER pAd,
7637 IN BOOLEAN bFromTx);
7638
7639VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7640 IN PRTMP_ADAPTER pAd,
7641 IN USHORT TbttNumToNextWakeUp);
7642
7643VOID RT28xxUsbMlmeRadioOn(
7644 IN PRTMP_ADAPTER pAd);
7645
7646VOID RT28xxUsbMlmeRadioOFF(
7647 IN PRTMP_ADAPTER pAd);
7648#endif // RT2870 //
7649
7650////////////////////////////////////////
7651
7652VOID QBSS_LoadInit(
7653 IN RTMP_ADAPTER *pAd);
7654
7655UINT32 QBSS_LoadElementAppend(
7656 IN RTMP_ADAPTER *pAd,
7657 OUT UINT8 *buf_p);
7658
7659VOID QBSS_LoadUpdate(
7660 IN RTMP_ADAPTER *pAd);
7661
7662///////////////////////////////////////
7663INT RTMPShowCfgValue(
7664 IN PRTMP_ADAPTER pAd,
7665 IN PUCHAR pName,
7666 IN PUCHAR pBuf);
7667
7668PCHAR RTMPGetRalinkAuthModeStr(
7669 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7670
7671PCHAR RTMPGetRalinkEncryModeStr(
7672 IN USHORT encryMode);
7673//////////////////////////////////////
7674
7675#ifdef CONFIG_STA_SUPPORT
7676VOID AsicStaBbpTuning(
7677 IN PRTMP_ADAPTER pAd);
7678
7679BOOLEAN StaAddMacTableEntry(
7680 IN PRTMP_ADAPTER pAd,
7681 IN PMAC_TABLE_ENTRY pEntry,
7682 IN UCHAR MaxSupportedRateIn500Kbps,
7683 IN HT_CAPABILITY_IE *pHtCapability,
7684 IN UCHAR HtCapabilityLen,
7685 IN USHORT CapabilityInfo);
7686#endif // CONFIG_STA_SUPPORT //
7687
7688void RTMP_IndicateMediaState(
7689 IN PRTMP_ADAPTER pAd);
7690
7691VOID ReSyncBeaconTime(
7692 IN PRTMP_ADAPTER pAd);
7693
7694VOID RTMPSetAGCInitValue(
7695 IN PRTMP_ADAPTER pAd,
7696 IN UCHAR BandWidth);
7697
7698int rt28xx_close(IN PNET_DEV dev);
7699int rt28xx_open(IN PNET_DEV dev);
7700
7701__inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7702{
7703extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7704extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7705
7706 if (VIRTUAL_IF_NUM(pAd) == 0)
7707 {
7708 if (rt28xx_open(pAd->net_dev) != 0)
7709 return -1;
7710 }
7711 else
7712 {
7713 }
7714 VIRTUAL_IF_INC(pAd);
7715 return 0;
7716}
7717
7718__inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7719{
7720 VIRTUAL_IF_DEC(pAd);
7721 if (VIRTUAL_IF_NUM(pAd) == 0)
7722 rt28xx_close(pAd->net_dev);
7723 return;
7724}
7725
7726
7727#endif // __RTMP_H__
7728