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