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