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