Staging: rt2860: remove dead NINTENDO_AP code
[linux-2.6.git] / drivers / staging / rt2860 / rtmp.h
blobfb97dbbf3c64a93d90b967321a5434ef87c58b50
1 /*
2 *************************************************************************
3 * Ralink Tech Inc.
4 * 5F., No.36, Taiyuan St., Jhubei City,
5 * Hsinchu County 302,
6 * Taiwan, R.O.C.
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
19 * *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
24 * *
25 *************************************************************************
27 Module Name:
28 rtmp.h
30 Abstract:
31 Miniport generic portion header file
33 Revision History:
34 Who When What
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
40 #ifndef __RTMP_H__
41 #define __RTMP_H__
43 #include "link_list.h"
44 #include "spectrum_def.h"
47 #ifdef CONFIG_STA_SUPPORT
48 #include "aironet.h"
49 #endif // CONFIG_STA_SUPPORT //
51 //#define DBG_DIAGNOSE 1
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
61 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
62 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
63 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
68 // NDIS Version definitions
70 #ifdef NDIS50_MINIPORT
71 #define RTMP_NDIS_MAJOR_VERSION 5
72 #define RTMP_NDIS_MINOR_VERSION 0
73 #endif
75 #ifdef NDIS51_MINIPORT
76 #define RTMP_NDIS_MAJOR_VERSION 5
77 #define RTMP_NDIS_MINOR_VERSION 1
78 #endif
80 extern char NIC_VENDOR_DESC[];
81 extern int NIC_VENDOR_DESC_LEN;
83 extern unsigned char SNAP_AIRONET[];
84 extern unsigned char CipherSuiteCiscoCCKM[];
85 extern unsigned char CipherSuiteCiscoCCKMLen;
86 extern unsigned char CipherSuiteCiscoCCKM24[];
87 extern unsigned char CipherSuiteCiscoCCKM24Len;
88 extern unsigned char CipherSuiteCCXTkip[];
89 extern unsigned char CipherSuiteCCXTkipLen;
90 extern unsigned char CISCO_OUI[];
91 extern UCHAR BaSizeArray[4];
93 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
94 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
95 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
96 extern ULONG BIT32[32];
97 extern UCHAR BIT8[8];
98 extern char* CipherName[];
99 extern char* MCSToMbps[];
100 extern UCHAR RxwiMCSToOfdmRate[12];
101 extern UCHAR SNAP_802_1H[6];
102 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
103 extern UCHAR SNAP_AIRONET[8];
104 extern UCHAR CKIP_LLC_SNAP[8];
105 extern UCHAR EAPOL_LLC_SNAP[8];
106 extern UCHAR EAPOL[2];
107 extern UCHAR IPX[2];
108 extern UCHAR APPLE_TALK[2];
109 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
110 extern UCHAR OfdmRateToRxwiMCS[];
111 extern UCHAR OfdmSignalToRateId[16] ;
112 extern UCHAR default_cwmin[4];
113 extern UCHAR default_cwmax[4];
114 extern UCHAR default_sta_aifsn[4];
115 extern UCHAR MapUserPriorityToAccessCategory[8];
117 extern USHORT RateUpPER[];
118 extern USHORT RateDownPER[];
119 extern UCHAR Phy11BNextRateDownward[];
120 extern UCHAR Phy11BNextRateUpward[];
121 extern UCHAR Phy11BGNextRateDownward[];
122 extern UCHAR Phy11BGNextRateUpward[];
123 extern UCHAR Phy11ANextRateDownward[];
124 extern UCHAR Phy11ANextRateUpward[];
125 extern CHAR RssiSafeLevelForTxRate[];
126 extern UCHAR RateIdToMbps[];
127 extern USHORT RateIdTo500Kbps[];
129 extern UCHAR CipherSuiteWpaNoneTkip[];
130 extern UCHAR CipherSuiteWpaNoneTkipLen;
132 extern UCHAR CipherSuiteWpaNoneAes[];
133 extern UCHAR CipherSuiteWpaNoneAesLen;
135 extern UCHAR SsidIe;
136 extern UCHAR SupRateIe;
137 extern UCHAR ExtRateIe;
139 #ifdef DOT11_N_SUPPORT
140 extern UCHAR HtCapIe;
141 extern UCHAR AddHtInfoIe;
142 extern UCHAR NewExtChanIe;
143 #ifdef DOT11N_DRAFT3
144 extern UCHAR ExtHtCapIe;
145 #endif // DOT11N_DRAFT3 //
146 #endif // DOT11_N_SUPPORT //
148 extern UCHAR ErpIe;
149 extern UCHAR DsIe;
150 extern UCHAR TimIe;
151 extern UCHAR WpaIe;
152 extern UCHAR Wpa2Ie;
153 extern UCHAR IbssIe;
154 extern UCHAR Ccx2Ie;
156 extern UCHAR WPA_OUI[];
157 extern UCHAR RSN_OUI[];
158 extern UCHAR WME_INFO_ELEM[];
159 extern UCHAR WME_PARM_ELEM[];
160 extern UCHAR Ccx2QosInfo[];
161 extern UCHAR Ccx2IeInfo[];
162 extern UCHAR RALINK_OUI[];
163 extern UCHAR PowerConstraintIE[];
166 extern UCHAR RateSwitchTable[];
167 extern UCHAR RateSwitchTable11B[];
168 extern UCHAR RateSwitchTable11G[];
169 extern UCHAR RateSwitchTable11BG[];
171 #ifdef DOT11_N_SUPPORT
172 extern UCHAR RateSwitchTable11BGN1S[];
173 extern UCHAR RateSwitchTable11BGN2S[];
174 extern UCHAR RateSwitchTable11BGN2SForABand[];
175 extern UCHAR RateSwitchTable11N1S[];
176 extern UCHAR RateSwitchTable11N2S[];
177 extern UCHAR RateSwitchTable11N2SForABand[];
179 #ifdef CONFIG_STA_SUPPORT
180 extern UCHAR PRE_N_HT_OUI[];
181 #endif // CONFIG_STA_SUPPORT //
182 #endif // DOT11_N_SUPPORT //
184 #define MAXSEQ (0xFFF)
186 #ifdef RALINK_ATE
187 typedef 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.
206 BOOLEAN bFWLoading; // Reload firmware when ATE is done.
207 UINT32 RxTotalCnt;
208 UINT32 RxCntPerSec;
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
222 UINT32 NumOfAvgRssiSample;
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;
256 #ifdef RALINK_28xx_QA
257 struct 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 //
269 #ifdef DOT11_N_SUPPORT
270 struct reordering_mpdu
272 struct reordering_mpdu *next;
273 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
274 int Sequence; /* sequence number of MPDU */
275 BOOLEAN bAMSDU;
278 struct reordering_list
280 struct reordering_mpdu *next;
281 int qlen;
284 struct reordering_mpdu_pool
286 PVOID mem;
287 NDIS_SPIN_LOCK lock;
288 struct reordering_list freelist;
290 #endif // DOT11_N_SUPPORT //
292 typedef 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;
305 // Queue structure and macros
307 typedef struct _QUEUE_ENTRY {
308 struct _QUEUE_ENTRY *Next;
309 } QUEUE_ENTRY, *PQUEUE_ENTRY;
311 // Queue structure
312 typedef struct _QUEUE_HEADER {
313 PQUEUE_ENTRY Head;
314 PQUEUE_ENTRY Tail;
315 ULONG Number;
316 } QUEUE_HEADER, *PQUEUE_HEADER;
318 #define InitializeQueueHeader(QueueHeader) \
320 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
321 (QueueHeader)->Number = 0; \
324 #define RemoveHeadQueue(QueueHeader) \
325 (QueueHeader)->Head; \
327 PQUEUE_ENTRY pNext; \
328 if ((QueueHeader)->Head != NULL) \
330 pNext = (QueueHeader)->Head->Next; \
331 (QueueHeader)->Head = pNext; \
332 if (pNext == NULL) \
333 (QueueHeader)->Tail = NULL; \
334 (QueueHeader)->Number--; \
338 #define InsertHeadQueue(QueueHeader, QueueEntry) \
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++; \
347 #define InsertTailQueue(QueueHeader, QueueEntry) \
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++; \
359 // Macros for flag and ref count operations
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))
367 // 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))
374 #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)
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)
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)
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)
392 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
393 #endif // CONFIG_STA_SUPPORT //
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))
399 #define INC_RING_INDEX(_idx, _RingSize) \
401 (_idx) = (_idx+1) % (_RingSize); \
404 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
406 #define RING_PACKET_INIT(_TxRing, _idx) \
408 _TxRing->Cell[_idx].pNdisPacket = NULL; \
409 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
412 #define TXDT_INIT(_TxD) \
414 NdisZeroMemory(_TxD, TXD_SIZE); \
415 _TxD->DMADONE = 1; \
418 //Set last data segment
419 #define RING_SET_LASTDS(_TxD, _IsSD0) \
421 if (_IsSD0) {_TxD->LastSec0 = 1;} \
422 else {_TxD->LastSec1 = 1;} \
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) \
431 int i=0; \
432 while (++_tsc[i] == 0x0) \
434 i++; \
435 if (i == 6) \
436 break; \
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) \
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);\
458 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
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); \
464 #endif // DOT11_N_SUPPORT //
467 // MACRO for 32-bit PCI register read / write
469 // Usage : RTMP_IO_READ32(
470 // PRTMP_ADAPTER pAd,
471 // ULONG Register_Offset,
472 // PULONG pValue)
474 // RTMP_IO_WRITE32(
475 // PRTMP_ADAPTER pAd,
476 // ULONG Register_Offset,
477 // ULONG Value)
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.
484 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
486 #define RTMP_RF_IO_WRITE32(_A, _V) \
488 PHY_CSR4_STRUC Value; \
489 ULONG BusyCnt = 0; \
490 if ((_A)->bPCIclkOff) \
492 return; \
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) \
502 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
506 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
508 BBP_CSR_CFG_STRUC BbpCsr; \
509 int i, k; \
510 for (i=0; i<MAX_BUSY_COUNT; i++) \
512 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
513 if (BbpCsr.field.Busy == BUSY) \
515 continue; \
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++) \
525 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
526 if (BbpCsr.field.Busy == IDLE) \
527 break; \
529 if ((BbpCsr.field.Busy == IDLE) && \
530 (BbpCsr.field.RegNum == _I)) \
532 *(_pV) = (UCHAR)BbpCsr.field.Value; \
533 break; \
536 if (BbpCsr.field.Busy == BUSY) \
538 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
539 *(_pV) = (_A)->BbpWriteLatch[_I]; \
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) \
547 BBP_CSR_CFG_STRUC BbpCsr; \
548 int i, k; \
549 if ((_A)->bPCIclkOff == FALSE) \
551 for (i=0; i<MAX_BUSY_COUNT; i++) \
553 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
554 if (BbpCsr.field.Busy == BUSY) \
556 continue; \
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++) \
568 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
569 if (BbpCsr.field.Busy == IDLE) \
570 break; \
572 if ((BbpCsr.field.Busy == IDLE) && \
573 (BbpCsr.field.RegNum == _I)) \
575 *(_pV) = (UCHAR)BbpCsr.field.Value; \
576 break; \
579 if (BbpCsr.field.Busy == BUSY) \
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); \
590 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
592 BBP_CSR_CFG_STRUC BbpCsr; \
593 int BusyCnt; \
594 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
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; \
609 if (BusyCnt == MAX_BUSY_COUNT) \
611 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
615 // Write BBP register by register's ID & value
616 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
618 BBP_CSR_CFG_STRUC BbpCsr; \
619 int BusyCnt; \
620 if ((_A)->bPCIclkOff == FALSE) \
622 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
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; \
640 if (BusyCnt == MAX_BUSY_COUNT) \
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); \
651 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
652 switch (ch) \
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; \
707 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
708 switch (khz) \
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; \
764 // Common fragment list structure - Identical to the scatter gather frag list structure
766 #define NIC_MAX_PHYS_BUF_COUNT 8
768 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
769 PVOID Address;
770 ULONG Length;
771 PULONG Reserved;
772 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
775 typedef 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;
782 // Some utility macros
784 #ifndef min
785 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
786 #endif
788 #ifndef max
789 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
790 #endif
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))))
794 #define INC_COUNTER64(Val) (Val.QuadPart++)
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))
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))
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) \
808 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
810 _pExtraLlcSnapEncap = SNAP_802_1H; \
811 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
812 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
814 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
817 else \
819 _pExtraLlcSnapEncap = NULL; \
823 // New Define for new Tx Path.
824 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
826 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
828 _pExtraLlcSnapEncap = SNAP_802_1H; \
829 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
830 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
832 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
835 else \
837 _pExtraLlcSnapEncap = NULL; \
842 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
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); \
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) \
858 char LLC_Len[2]; \
860 _pRemovedLLCSNAP = NULL; \
861 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
862 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
864 PUCHAR pProto = _pData + 6; \
866 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
867 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
869 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
870 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
871 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
873 else \
875 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
876 _pRemovedLLCSNAP = _pData; \
877 _DataSize -= LENGTH_802_1_H; \
878 _pData += LENGTH_802_1_H; \
881 else \
883 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
884 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
885 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
889 #define SWITCH_AB( _pAA, _pBB) \
891 PVOID pCC; \
892 pCC = _pBB; \
893 _pBB = _pAA; \
894 _pAA = pCC; \
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
900 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
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); \
908 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
909 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
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)))
915 // Check if it is Japan W53(ch52,56,60,64) channel.
917 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
919 #ifdef CONFIG_STA_SUPPORT
920 #define STA_PORT_SECURED(_pAd) \
922 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
923 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
924 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
925 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
926 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
928 #endif // CONFIG_STA_SUPPORT //
932 // Register set pair for initialzation register set definition
934 typedef struct _RTMP_REG_PAIR
936 ULONG Register;
937 ULONG Value;
938 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
940 typedef struct _REG_PAIR
942 UCHAR Register;
943 UCHAR Value;
944 } REG_PAIR, *PREG_PAIR;
947 // Register set pair for initialzation register set definition
949 typedef struct _RTMP_RF_REGS
951 UCHAR Channel;
952 ULONG R1;
953 ULONG R2;
954 ULONG R3;
955 ULONG R4;
956 } RTMP_RF_REGS, *PRTMP_RF_REGS;
958 typedef struct _FREQUENCY_ITEM {
959 UCHAR Channel;
960 UCHAR N;
961 UCHAR R;
962 UCHAR K;
963 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
966 // Data buffer for DMA operation, the buffer must be contiguous physical memory
967 // Both DMA to / from CPU use the same structure.
969 typedef struct _RTMP_DMABUF
971 ULONG AllocSize;
972 PVOID AllocVa; // TxBuf virtual address
973 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
974 } RTMP_DMABUF, *PRTMP_DMABUF;
977 typedef 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;
993 // Data buffer for DMA operation, the buffer must be contiguous physical memory
994 // Both DMA to / from CPU use the same structure.
996 typedef struct _RTMP_REORDERBUF
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;
1005 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1006 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
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.
1016 typedef struct _RTMP_DMACB
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;
1024 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1025 } RTMP_DMACB, *PRTMP_DMACB;
1027 typedef struct _RTMP_TX_BUF
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;
1036 typedef struct _RTMP_RX_BUF
1038 BOOLEAN InUse;
1039 ULONG ByBaRecIndex;
1040 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1041 } RTMP_RXBUF, *PRTMP_RXBUF;
1042 typedef struct _RTMP_TX_RING
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;
1050 typedef struct _RTMP_RX_RING
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;
1058 typedef struct _RTMP_MGMT_RING
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;
1067 // Statistic counter structure
1069 typedef struct _COUNTER_802_3
1071 // General Stats
1072 ULONG GoodTransmits;
1073 ULONG GoodReceives;
1074 ULONG TxErrors;
1075 ULONG RxErrors;
1076 ULONG RxNoBuffer;
1078 // Ethernet Stats
1079 ULONG RcvAlignmentErrors;
1080 ULONG OneCollision;
1081 ULONG MoreCollisions;
1083 } COUNTER_802_3, *PCOUNTER_802_3;
1085 typedef 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;
1102 typedef struct _COUNTER_RALINK {
1103 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1104 ULONG LastReceivedByteCount;
1105 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;
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;
1125 UINT32 OneSecFrameDuplicateCount;
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;
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;
1168 typedef 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;
1175 typedef 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;
1189 // Arcfour Structure Added by PaulWu
1191 typedef struct _ARCFOUR
1193 UINT X;
1194 UINT Y;
1195 UCHAR STATE[256];
1196 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1198 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1199 typedef 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;
1219 // Shared key data structure
1220 typedef 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;
1225 typedef 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;
1240 typedef 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;
1249 typedef 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;
1264 typedef 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;
1274 typedef 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;
1283 typedef struct {
1284 UCHAR RogueApNr;
1285 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1286 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1288 typedef struct {
1289 BOOLEAN Enable;
1290 UCHAR Delta;
1291 BOOLEAN PlusSign;
1292 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1295 // Receive Tuple Cache Format
1297 typedef struct _TUPLE_CACHE {
1298 BOOLEAN Valid;
1299 UCHAR MacAddress[MAC_ADDR_LEN];
1300 USHORT Sequence;
1301 USHORT Frag;
1302 } TUPLE_CACHE, *PTUPLE_CACHE;
1305 // Fragment Frame structure
1307 typedef 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;
1317 // Packet information for NdisQueryPacket
1319 typedef 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;
1327 // Tkip Key structure which RC4 key & MIC calculation
1329 typedef 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;
1343 // Private / Misc data, counters for driver internal use
1345 typedef 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;
1357 // structure to tune BBP R66 (BBP TUNING)
1358 typedef 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;
1367 // structure to store channel TX power
1368 typedef 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;
1380 // structure to store 802.11j channel TX power
1381 typedef 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;
1389 typedef enum _ABGBAND_STATE_ {
1390 UNKNOWN_BAND,
1391 BG_BAND,
1392 A_BAND,
1393 } ABGBAND_STATE;
1395 typedef 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;
1418 #ifdef QOS_DLS_SUPPORT
1419 STATE_MACHINE DlsMachine;
1420 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1421 #endif // QOS_DLS_SUPPORT //
1426 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1427 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1428 ULONG LastSendNULLpsmTime;
1430 BOOLEAN bRunning;
1431 NDIS_SPIN_LOCK TaskLock;
1432 MLME_QUEUE Queue;
1434 UINT ShiftReg;
1436 RALINK_TIMER_STRUCT PeriodicTimer;
1437 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1438 RALINK_TIMER_STRUCT LinkDownTimer;
1439 RALINK_TIMER_STRUCT LinkUpTimer;
1440 UCHAR bPsPollTimerRunning;
1441 RALINK_TIMER_STRUCT PsPollTimer;
1442 RALINK_TIMER_STRUCT RadioOnOffTimer;
1443 ULONG PeriodicRound;
1444 ULONG OneSecPeriodicRound;
1446 UCHAR RealRxPath;
1447 BOOLEAN bLowThroughput;
1448 BOOLEAN bEnableAutoAntennaCheck;
1449 RALINK_TIMER_STRUCT RxAntEvalTimer;
1452 } MLME_STRUCT, *PMLME_STRUCT;
1454 // structure for radar detection and channel switch
1455 typedef 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;
1474 #ifdef CARRIER_DETECTION_SUPPORT
1475 typedef enum CD_STATE_n
1477 CD_NORMAL,
1478 CD_SILENCE,
1479 CD_MAX_STATE
1480 } CD_STATE;
1482 typedef struct CARRIER_DETECTION_s
1484 BOOLEAN Enable;
1485 UINT8 CDSessionTime;
1486 UINT8 CDPeriod;
1487 CD_STATE CD_State;
1488 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1489 #endif // CARRIER_DETECTION_SUPPORT //
1491 typedef enum _REC_BLOCKACK_STATUS
1493 Recipient_NONE=0,
1494 Recipient_USED,
1495 Recipient_HandleRes,
1496 Recipient_Accept
1497 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1499 typedef enum _ORI_BLOCKACK_STATUS
1501 Originator_NONE=0,
1502 Originator_USED,
1503 Originator_WaitRes,
1504 Originator_Done
1505 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1507 #ifdef DOT11_N_SUPPORT
1508 typedef 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;
1521 typedef 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;
1538 typedef 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;
1545 //For QureyBATableOID use;
1546 typedef 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;
1554 //For QureyBATableOID use;
1555 typedef 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;
1563 typedef 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;
1570 typedef 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 //
1604 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1605 typedef 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;
1626 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1627 typedef 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;
1656 typedef 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;
1675 typedef 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;
1685 // Multiple SSID structure
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 */
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];
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];
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]); }
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]; }
1711 typedef struct _MULTISSID_STRUCT {
1712 UCHAR Bssid[MAC_ADDR_LEN];
1713 UCHAR SsidLen;
1714 CHAR Ssid[MAX_LEN_OF_SSID];
1715 USHORT CapabilityInfo;
1717 PNET_DEV MSSIDDev;
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;
1724 ULONG TxCount;
1725 ULONG RxCount;
1726 ULONG ReceivedByteCount;
1727 ULONG TransmittedByteCount;
1728 ULONG RxErrorCount;
1729 ULONG RxDropCount;
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;
1736 UCHAR DefaultKeyId;
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
1743 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
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;
1757 UCHAR RSNIE_Len[2];
1758 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
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
1767 BOOLEAN bHideSsid;
1768 UINT16 StationKeepAliveTime; // unit: second
1770 USHORT VLAN_VID;
1771 USHORT VLAN_Priority;
1773 RT_802_11_ACL AccessControlList;
1775 // EDCA Qos
1776 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1777 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1779 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1781 // For 802.1x daemon setting per BSS
1782 UCHAR radius_srv_num;
1783 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1785 #ifdef RTL865X_SOC
1786 unsigned int mylinkid;
1787 #endif
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;
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;
1812 BOOLEAN bBcnSntReq;
1813 UCHAR BcnBufIdx;
1814 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1818 #ifdef DOT11N_DRAFT3
1819 typedef 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 //
1827 // configuration common to OPMODE_AP as well as OPMODE_STA
1828 typedef struct _COMMON_CONFIG {
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
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];
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.
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];
1858 ULONG BasicRateBitmap; // backup basic ratebitmap
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
1882 USHORT RtsThreshold; // in unit of BYTE
1883 USHORT FragmentThreshold; // in unit of BYTE
1885 UCHAR TxPower; // in unit of mW
1886 ULONG TxPowerPercentage; // 0~100 %
1887 ULONG TxPowerDefault; // keep for TxPowerPercentage
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
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;
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.
1924 // IEEE802.11H--DFS.
1925 RADAR_DETECT_STRUCT RadarDetect;
1927 #ifdef CARRIER_DETECTION_SUPPORT
1928 CARRIER_DETECTION CarrierDetect;
1929 #endif // CARRIER_DETECTION_SUPPORT //
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
1942 #ifdef DOT11N_DRAFT3
1943 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1944 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
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
1957 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1958 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
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 //
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;
1978 UCHAR TxBASize;
1979 #endif // DOT11_N_SUPPORT //
1981 // Enable wireless event
1982 BOOLEAN bWirelessEvent;
1983 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1985 // Tx & Rx Stream number selection
1986 UCHAR TxStream;
1987 UCHAR RxStream;
1989 // transmit phy mode, trasmit rate for Multicast.
1990 #ifdef MCAST_RATE_SPECIFIC
1991 UCHAR McastTransmitMcs;
1992 UCHAR McastTransmitPhyMode;
1993 #endif // MCAST_RATE_SPECIFIC //
1995 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1999 NDIS_SPIN_LOCK MeasureReqTabLock;
2000 PMEASURE_REQ_TAB pMeasureReqTab;
2002 NDIS_SPIN_LOCK TpcReqTabLock;
2003 PTPC_REQ_TAB pTpcReqTab;
2005 // transmit phy mode, trasmit rate for Multicast.
2006 #ifdef MCAST_RATE_SPECIFIC
2007 HTTRANSMIT_SETTING MCastPhyMode;
2008 #endif // MCAST_RATE_SPECIFIC //
2010 #ifdef SINGLE_SKU
2011 UINT16 DefineMaxTxPwr;
2012 #endif // SINGLE_SKU //
2015 } COMMON_CONFIG, *PCOMMON_CONFIG;
2018 #ifdef CONFIG_STA_SUPPORT
2019 /* Modified by Wu Xi-Kun 4/21/2006 */
2020 // STA configuration and status
2021 typedef 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
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
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];
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
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;
2065 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
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
2073 UCHAR DefaultKeyId;
2076 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2077 UCHAR PortSecured;
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
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;
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
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
2107 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2108 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2109 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
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];
2119 UCHAR RSNIE_Len;
2120 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
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];
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
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
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.
2186 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2187 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2189 UCHAR DtimCount; // 0.. DtimPeriod-1
2190 UCHAR DtimPeriod; // default = 3
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 ////////////////////////////////////////////////////////////////////////////////////////
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.
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;
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 //
2219 CHAR dev_name[16];
2220 USHORT OriDevType;
2222 BOOLEAN bTGnWifiTest;
2223 BOOLEAN bScanReqIsFromWebUI;
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;
2230 UCHAR BBPR3;
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;
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.
2245 typedef 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;
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 //
2264 // ----------- start of AP --------------------------
2265 // AUTH-RSP State Machine Aux data structure
2266 typedef 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;
2272 // structure to define WPA Group Key Rekey Interval
2273 typedef 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;
2278 typedef 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.
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];
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;
2326 UINT32 StaConnectTime; // the live time of this station since associated with AP
2329 #ifdef DOT11_N_SUPPORT
2330 BOOLEAN bSendBAR;
2331 USHORT NoBADataCountDown;
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;
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 //====================================================
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 //
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];
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;
2380 // TODO: Shall we move that to DOT11_N_SUPPORT???
2381 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
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
2393 // 802.11n features.
2394 UCHAR MpduDensity;
2395 UCHAR MaxRAmpduFactor;
2396 UCHAR AMsduSize;
2397 UCHAR MmpsMode; // MIMO power save more.
2399 HT_CAPABILITY_IE HTCapability;
2401 #ifdef DOT11N_DRAFT3
2402 UCHAR BSS2040CoexistenceMgmtSupport;
2403 #endif // DOT11N_DRAFT3 //
2404 #endif // DOT11_N_SUPPORT //
2406 BOOLEAN bAutoTxRateSwitch;
2408 UCHAR RateLen;
2409 struct _MAC_TABLE_ENTRY *pNext;
2410 USHORT TxSeq[NUM_OF_TID];
2411 USHORT NonQosDataSeq;
2413 RSSI_SAMPLE RssiSample;
2415 UINT32 TXMCSExpected[16];
2416 UINT32 TXMCSSuccessful[16];
2417 UINT32 TXMCSFailed[16];
2418 UINT32 TXMCSAutoFallBack[16][16];
2419 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2421 typedef 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;
2439 #ifdef DOT11_N_SUPPORT
2440 #define IS_HT_STA(_pMacEntry) \
2441 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2443 #define IS_HT_RATE(_pMacEntry) \
2444 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2446 #define PEER_IS_HT_RATE(_pMacEntry) \
2447 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2448 #endif // DOT11_N_SUPPORT //
2450 typedef 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;
2457 typedef 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;
2472 typedef 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;
2487 typedef struct _WDS_TABLE {
2488 UCHAR Mode;
2489 ULONG Size;
2490 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2491 } WDS_TABLE, *PWDS_TABLE;
2493 typedef 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];
2504 UCHAR CfgSsidLen;
2505 CHAR CfgSsid[MAX_LEN_OF_SSID];
2506 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2507 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2509 ULONG ApCliRcvBeaconTime;
2511 ULONG CtrlCurrState;
2512 ULONG SyncCurrState;
2513 ULONG AuthCurrState;
2514 ULONG AssocCurrState;
2515 ULONG WpaPskCurrState;
2517 USHORT AuthReqCnt;
2518 USHORT AssocReqCnt;
2520 ULONG ClientStatusFlags;
2521 UCHAR MpduDensity;
2523 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2524 NDIS_802_11_WEP_STATUS WepStatus;
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;
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
2537 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2538 UCHAR DefaultKeyId;
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;
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.
2548 // For WPA-PSK supplicant state
2549 UCHAR SNonce[32]; // SNonce for WPA-PSK
2550 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2552 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2553 RT_HT_PHY_INFO DesiredHtPhyInfo;
2554 BOOLEAN bAutoTxRateSwitch;
2555 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2556 } APCLI_STRUCT, *PAPCLI_STRUCT;
2558 // ----------- end of AP ----------------------------
2560 #ifdef BLOCK_NET_IF
2561 typedef struct _BLOCK_QUEUE_ENTRY
2563 BOOLEAN SwTxQueueBlockFlag;
2564 LIST_HEADER NetIfList;
2565 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2566 #endif // BLOCK_NET_IF //
2568 struct wificonf
2570 BOOLEAN bShortGI;
2571 BOOLEAN bGreenField;
2577 typedef struct _INF_PCI_CONFIG
2579 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2580 }INF_PCI_CONFIG;
2582 typedef struct _INF_USB_CONFIG
2584 UINT BulkInEpAddr; // bulk-in endpoint address
2585 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2587 }INF_USB_CONFIG;
2589 #ifdef IKANOS_VX_1X0
2590 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2592 struct IKANOS_TX_INFO
2594 struct net_device *netdev;
2595 IkanosWlanTxCbFuncP *fp;
2597 #endif // IKANOS_VX_1X0 //
2599 #ifdef DBG_DIAGNOSE
2600 #define DIAGNOSE_TIME 10 // 10 sec
2601 typedef struct _RtmpDiagStrcut_
2602 { // Diagnosis Related element
2603 unsigned char inited;
2604 unsigned char qIdx;
2605 unsigned char ArrayStartIdx;
2606 unsigned char ArrayCurIdx;
2607 // Tx Related Count
2608 USHORT TxDataCnt[DIAGNOSE_TIME];
2609 USHORT TxFailCnt[DIAGNOSE_TIME];
2610 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2611 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2612 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2614 USHORT TxAggCnt[DIAGNOSE_TIME];
2615 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2616 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2617 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2618 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2620 // Rx Related Count
2621 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2622 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2623 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2624 }RtmpDiagStruct;
2625 #endif // DBG_DIAGNOSE //
2629 // The miniport adapter structure
2631 typedef struct _RTMP_ADAPTER
2633 PVOID OS_Cookie; // save specific structure relative to OS
2634 PNET_DEV net_dev;
2635 ULONG VirtualIfCnt;
2637 USHORT LnkCtrlBitMask;
2638 USHORT RLnkCtrlConfiguration;
2639 USHORT RLnkCtrlOffset;
2640 USHORT HostLnkCtrlConfiguration;
2641 USHORT HostLnkCtrlOffset;
2642 USHORT PCIePowerSaveLevel;
2643 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2644 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2645 USHORT ThisTbttNumToNextWakeUp;
2646 ULONG SameRxByteCount;
2649 /*****************************************************************************************/
2650 /* PCI related parameters */
2651 /*****************************************************************************************/
2652 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2654 UINT int_enable_reg;
2655 UINT int_disable_mask;
2656 UINT int_pending;
2659 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2660 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2661 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2662 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2665 NDIS_SPIN_LOCK irq_lock;
2666 UCHAR irq_disabled;
2670 /*****************************************************************************************/
2671 /* Both PCI/USB related parameters */
2672 /*****************************************************************************************/
2675 /*****************************************************************************************/
2676 /* Tx related parameters */
2677 /*****************************************************************************************/
2678 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2679 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2682 // resource for software backlog queues
2683 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2684 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2686 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2687 RTMP_MGMT_RING MgmtRing;
2688 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2691 /*****************************************************************************************/
2692 /* Rx related parameters */
2693 /*****************************************************************************************/
2695 RTMP_RX_RING RxRing;
2696 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2700 /*****************************************************************************************/
2701 /* ASIC related parameters */
2702 /*****************************************************************************************/
2703 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2705 // ---------------------------
2706 // E2PROM
2707 // ---------------------------
2708 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2709 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2710 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2711 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2713 // ---------------------------
2714 // BBP Control
2715 // ---------------------------
2716 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2717 UCHAR BbpRssiToDbmDelta;
2718 BBP_R66_TUNING BbpTuning;
2720 // ----------------------------
2721 // RFIC control
2722 // ----------------------------
2723 UCHAR RfIcType; // RFIC_xxx
2724 ULONG RfFreqOffset; // Frequency offset for channel switching
2725 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2727 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2728 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2730 // This soft Rx Antenna Diversity mechanism is used only when user set
2731 // RX Antenna = DIVERSITY ON
2732 SOFT_RX_ANT_DIVERSITY RxAnt;
2734 UCHAR RFProgSeq;
2735 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2736 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2737 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2738 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2740 UCHAR ChannelListNum; // number of channel in ChannelList[]
2741 UCHAR Bbp94;
2742 BOOLEAN BbpForCCK;
2743 ULONG Tx20MPwrCfgABand[5];
2744 ULONG Tx20MPwrCfgGBand[5];
2745 ULONG Tx40MPwrCfgABand[5];
2746 ULONG Tx40MPwrCfgGBand[5];
2748 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2749 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2750 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2751 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2752 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2753 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2755 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2756 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2757 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2758 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2759 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2760 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2762 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2763 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2764 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2765 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2766 //---
2768 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2769 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2770 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2771 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2772 //---
2774 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2775 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2776 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2777 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2779 // ----------------------------
2780 // LED control
2781 // ----------------------------
2782 MCU_LEDCS_STRUC LedCntl;
2783 USHORT Led1; // read from EEPROM 0x3c
2784 USHORT Led2; // EEPROM 0x3e
2785 USHORT Led3; // EEPROM 0x40
2786 UCHAR LedIndicatorStregth;
2787 UCHAR RssiSingalstrengthOffet;
2788 BOOLEAN bLedOnScanning;
2789 UCHAR LedStatus;
2791 /*****************************************************************************************/
2792 /* 802.11 related parameters */
2793 /*****************************************************************************************/
2794 // outgoing BEACON frame buffer and corresponding TXD
2795 TXWI_STRUC BeaconTxWI;
2796 PUCHAR BeaconBuf;
2797 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2799 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2800 PSPOLL_FRAME PsPollFrame;
2801 HEADER_802_11 NullFrame;
2803 //=========AP===========
2806 //=======STA===========
2807 #ifdef CONFIG_STA_SUPPORT
2808 /* Modified by Wu Xi-Kun 4/21/2006 */
2809 // -----------------------------------------------
2810 // STA specific configuration & operation status
2811 // used only when pAd->OpMode == OPMODE_STA
2812 // -----------------------------------------------
2813 STA_ADMIN_CONFIG StaCfg; // user desired settings
2814 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2815 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2816 NDIS_MEDIA_STATE PreMediaState;
2817 #endif // CONFIG_STA_SUPPORT //
2819 //=======Common===========
2820 // OP mode: either AP or STA
2821 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2823 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2825 // MAT related parameters
2827 // configuration: read from Registry & E2PROM
2828 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2829 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2830 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2832 // ------------------------------------------------------
2833 // common configuration to both OPMODE_STA and OPMODE_AP
2834 // ------------------------------------------------------
2835 COMMON_CONFIG CommonCfg;
2836 MLME_STRUCT Mlme;
2838 // AP needs those vaiables for site survey feature.
2839 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2840 BSS_TABLE ScanTab; // store the latest SCAN result
2842 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2843 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2844 NDIS_SPIN_LOCK MacTabLock;
2846 #ifdef DOT11_N_SUPPORT
2847 BA_TABLE BATable;
2848 #endif // DOT11_N_SUPPORT //
2849 NDIS_SPIN_LOCK BATabLock;
2850 RALINK_TIMER_STRUCT RECBATimer;
2852 // encryption/decryption KEY tables
2853 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2855 // RX re-assembly buffer for fragmentation
2856 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2858 // various Counters
2859 COUNTER_802_3 Counters8023; // 802.3 counters
2860 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2861 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2862 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2863 PRIVATE_STRUC PrivateInfo; // Private information & counters
2865 // flags, see fRTMP_ADAPTER_xxx flags
2866 ULONG Flags; // Represent current device status
2867 ULONG PSFlags; // Power Save operation flag.
2869 // current TX sequence #
2870 USHORT Sequence;
2872 // Control disconnect / connect event generation
2873 //+++Didn't used anymore
2874 ULONG LinkDownTime;
2875 //---
2876 ULONG LastRxRate;
2877 ULONG LastTxRate;
2878 //+++Used only for Station
2879 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2880 //---
2882 ULONG ExtraInfo; // Extra information for displaying status
2883 ULONG SystemErrorBitmap; // b0: E2PROM version error
2885 //+++Didn't used anymore
2886 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2887 //---
2889 // ---------------------------
2890 // System event log
2891 // ---------------------------
2892 RT_802_11_EVENT_TABLE EventTab;
2895 BOOLEAN HTCEnable;
2897 /*****************************************************************************************/
2898 /* Statistic related parameters */
2899 /*****************************************************************************************/
2901 BOOLEAN bUpdateBcnCntDone;
2902 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2903 // ----------------------------
2904 // DEBUG paramerts
2905 // ----------------------------
2906 BOOLEAN bBanAllBaSetup;
2907 BOOLEAN bPromiscuous;
2909 // ----------------------------
2910 // rt2860c emulation-use Parameters
2911 // ----------------------------
2912 ULONG rtsaccu[30];
2913 ULONG ctsaccu[30];
2914 ULONG cfendaccu[30];
2915 ULONG bacontent[16];
2916 ULONG rxint[RX_RING_SIZE+1];
2917 UCHAR rcvba[60];
2918 BOOLEAN bLinkAdapt;
2919 BOOLEAN bForcePrintTX;
2920 BOOLEAN bForcePrintRX;
2921 BOOLEAN bDisablescanning; //defined in RT2870 USB
2922 BOOLEAN bStaFifoTest;
2923 BOOLEAN bProtectionTest;
2924 BOOLEAN bHCCATest;
2925 BOOLEAN bGenOneHCCA;
2926 BOOLEAN bBroadComHT;
2927 //+++Following add from RT2870 USB.
2928 ULONG BulkOutReq;
2929 ULONG BulkOutComplete;
2930 ULONG BulkOutCompleteOther;
2931 ULONG BulkOutCompleteCancel; // seems not use now?
2932 ULONG BulkInReq;
2933 ULONG BulkInComplete;
2934 ULONG BulkInCompleteFail;
2935 //---
2937 struct wificonf WIFItestbed;
2939 #ifdef RALINK_ATE
2940 ATE_INFO ate;
2941 #endif // RALINK_ATE //
2943 #ifdef DOT11_N_SUPPORT
2944 struct reordering_mpdu_pool mpdu_blk_pool;
2945 #endif // DOT11_N_SUPPORT //
2947 ULONG OneSecondnonBEpackets; // record non BE packets per second
2949 #if WIRELESS_EXT >= 12
2950 struct iw_statistics iw_stats;
2951 #endif
2953 struct net_device_stats stats;
2955 #ifdef BLOCK_NET_IF
2956 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
2957 #endif // BLOCK_NET_IF //
2961 #ifdef MULTIPLE_CARD_SUPPORT
2962 INT32 MC_RowID;
2963 UCHAR MC_FileName[256];
2964 #endif // MULTIPLE_CARD_SUPPORT //
2966 ULONG TbttTickCount;
2967 #ifdef PCI_MSI_SUPPORT
2968 BOOLEAN HaveMsi;
2969 #endif // PCI_MSI_SUPPORT //
2972 UCHAR is_on;
2974 #define TIME_BASE (1000000/OS_HZ)
2975 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2976 UCHAR flg_be_adjust;
2977 ULONG be_adjust_last_time;
2979 #ifdef IKANOS_VX_1X0
2980 struct IKANOS_TX_INFO IkanosTxInfo;
2981 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2982 #endif // IKANOS_VX_1X0 //
2985 #ifdef DBG_DIAGNOSE
2986 RtmpDiagStruct DiagStruct;
2987 #endif // DBG_DIAGNOSE //
2990 UINT8 PM_FlgSuspend;
2991 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2994 // Cisco IAPP format
2996 typedef struct _CISCO_IAPP_CONTENT_
2998 USHORT Length; //IAPP Length
2999 UCHAR MessageType; //IAPP type
3000 UCHAR FunctionCode; //IAPP function type
3001 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3002 UCHAR SourceMAC[MAC_ADDR_LEN];
3003 USHORT Tag; //Tag(element IE) - Adjacent AP report
3004 USHORT TagLength; //Length of element not including 4 byte header
3005 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3006 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3007 USHORT Channel;
3008 USHORT SsidLen;
3009 UCHAR Ssid[MAX_LEN_OF_SSID];
3010 USHORT Seconds; //Seconds that the client has been disassociated.
3011 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3013 #define DELAYINTMASK 0x0003fffb
3014 #define INTMASK 0x0003fffb
3015 #define IndMask 0x0003fffc
3016 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3017 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3018 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3019 #define TxCoherent 0x00020000 // tx coherent
3020 #define RxCoherent 0x00010000 // rx coherent
3021 #define McuCommand 0x00000200 // mcu
3022 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3023 #define TBTTInt 0x00000800 // TBTT interrupt
3024 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3025 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3026 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3029 typedef struct _RX_BLK_
3031 RT28XX_RXD_STRUC RxD;
3032 PRXWI_STRUC pRxWI;
3033 PHEADER_802_11 pHeader;
3034 PNDIS_PACKET pRxPacket;
3035 UCHAR *pData;
3036 USHORT DataSize;
3037 USHORT Flags;
3038 UCHAR UserPriority; // for calculate TKIP MIC using
3039 } RX_BLK;
3042 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3043 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3044 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3047 #define fRX_WDS 0x0001
3048 #define fRX_AMSDU 0x0002
3049 #define fRX_ARALINK 0x0004
3050 #define fRX_HTC 0x0008
3051 #define fRX_PAD 0x0010
3052 #define fRX_AMPDU 0x0020
3053 #define fRX_QOS 0x0040
3054 #define fRX_INFRA 0x0080
3055 #define fRX_EAP 0x0100
3056 #define fRX_MESH 0x0200
3057 #define fRX_APCLI 0x0400
3058 #define fRX_DLS 0x0800
3059 #define fRX_WPI 0x1000
3061 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3062 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3063 #define LENGTH_ARALINK_HEADER_FIELD 2
3065 #define TX_UNKOWN_FRAME 0x00
3066 #define TX_MCAST_FRAME 0x01
3067 #define TX_LEGACY_FRAME 0x02
3068 #define TX_AMPDU_FRAME 0x04
3069 #define TX_AMSDU_FRAME 0x08
3070 #define TX_RALINK_FRAME 0x10
3071 #define TX_FRAG_FRAME 0x20
3074 // Currently the sizeof(TX_BLK) is 148 bytes.
3075 typedef struct _TX_BLK_
3077 UCHAR QueIdx;
3078 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3079 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3080 USHORT TotalFragNum; // Total frame fragments required in one batch
3081 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3083 QUEUE_HEADER TxPacketList;
3084 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3085 HTTRANSMIT_SETTING *pTransmit;
3087 // Following structure used for the characteristics of a specific packet.
3088 PNDIS_PACKET pPacket;
3089 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3090 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3091 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3092 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3093 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3094 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3095 UCHAR HdrPadLen; // recording Header Padding Length;
3096 UCHAR apidx; // The interface associated to this packet
3097 UCHAR Wcid; // The MAC entry associated to this packet
3098 UCHAR UserPriority; // priority class of packet
3099 UCHAR FrameGap; // what kind of IFS this packet use
3100 UCHAR MpduReqNum; // number of fragments of this frame
3101 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3102 UCHAR CipherAlg; // cipher alogrithm
3103 PCIPHER_KEY pKey;
3107 USHORT Flags; //See following definitions for detail.
3109 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3110 ULONG Priv; // Hardware specific value saved in here.
3111 } TX_BLK, *PTX_BLK;
3114 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3115 #define fTX_bAckRequired 0x0002 // the packet need ack response
3116 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3117 #define fTX_bHTRate 0x0008 // allow to use HT rate
3118 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3119 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3120 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3121 #define fTX_bWMM 0x0080 // QOS Data
3123 #define fTX_bClearEAPFrame 0x0100
3125 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3126 do { \
3127 if (value) \
3128 (_pTxBlk->Flags |= _flag) \
3129 else \
3130 (_pTxBlk->Flags &= ~(_flag)) \
3131 }while(0)
3133 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3134 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3135 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3141 //------------------------------------------------------------------------------------------
3145 // Enable & Disable NIC interrupt via writing interrupt mask register
3146 // Since it use ADAPTER structure, it have to be put after structure definition.
3148 __inline VOID NICDisableInterrupt(
3149 IN PRTMP_ADAPTER pAd)
3151 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3152 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3153 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3156 __inline VOID NICEnableInterrupt(
3157 IN PRTMP_ADAPTER pAd)
3160 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3161 // To prevent System hang, we should enalbe the interrupt when
3162 // ASIC is already Wake Up.
3164 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3165 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3166 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3168 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3170 //else
3171 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3173 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3174 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3177 #ifdef RT_BIG_ENDIAN
3178 static inline VOID WriteBackToDescriptor(
3179 IN PUCHAR Dest,
3180 IN PUCHAR Src,
3181 IN BOOLEAN DoEncrypt,
3182 IN ULONG DescriptorType)
3184 UINT32 *p1, *p2;
3186 p1 = ((UINT32 *)Dest);
3187 p2 = ((UINT32 *)Src);
3189 *p1 = *p2;
3190 *(p1+2) = *(p2+2);
3191 *(p1+3) = *(p2+3);
3192 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3196 ========================================================================
3198 Routine Description:
3199 Endian conversion of Tx/Rx descriptor .
3201 Arguments:
3202 pAd Pointer to our adapter
3203 pData Pointer to Tx/Rx descriptor
3204 DescriptorType Direction of the frame
3206 Return Value:
3207 None
3209 Note:
3210 Call this function when read or update descriptor
3211 ========================================================================
3213 static inline VOID RTMPWIEndianChange(
3214 IN PUCHAR pData,
3215 IN ULONG DescriptorType)
3217 int size;
3218 int i;
3220 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3222 if(DescriptorType == TYPE_TXWI)
3224 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3225 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3227 else
3229 for(i=0; i < size/4 ; i++)
3230 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3235 ========================================================================
3237 Routine Description:
3238 Endian conversion of Tx/Rx descriptor .
3240 Arguments:
3241 pAd Pointer to our adapter
3242 pData Pointer to Tx/Rx descriptor
3243 DescriptorType Direction of the frame
3245 Return Value:
3246 None
3248 Note:
3249 Call this function when read or update descriptor
3250 ========================================================================
3252 static inline VOID RTMPDescriptorEndianChange(
3253 IN PUCHAR pData,
3254 IN ULONG DescriptorType)
3256 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3257 *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11
3258 *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15
3259 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last
3263 ========================================================================
3265 Routine Description:
3266 Endian conversion of all kinds of 802.11 frames .
3268 Arguments:
3269 pAd Pointer to our adapter
3270 pData Pointer to the 802.11 frame structure
3271 Dir Direction of the frame
3272 FromRxDoneInt Caller is from RxDone interrupt
3274 Return Value:
3275 None
3277 Note:
3278 Call this function when read or update buffer data
3279 ========================================================================
3281 static inline VOID RTMPFrameEndianChange(
3282 IN PRTMP_ADAPTER pAd,
3283 IN PUCHAR pData,
3284 IN ULONG Dir,
3285 IN BOOLEAN FromRxDoneInt)
3287 PHEADER_802_11 pFrame;
3288 PUCHAR pMacHdr;
3290 // swab 16 bit fields - Frame Control field
3291 if(Dir == DIR_READ)
3293 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3296 pFrame = (PHEADER_802_11) pData;
3297 pMacHdr = (PUCHAR) pFrame;
3299 // swab 16 bit fields - Duration/ID field
3300 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3302 // swab 16 bit fields - Sequence Control field
3303 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3305 if(pFrame->FC.Type == BTYPE_MGMT)
3307 switch(pFrame->FC.SubType)
3309 case SUBTYPE_ASSOC_REQ:
3310 case SUBTYPE_REASSOC_REQ:
3311 // swab 16 bit fields - CapabilityInfo field
3312 pMacHdr += sizeof(HEADER_802_11);
3313 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3315 // swab 16 bit fields - Listen Interval field
3316 pMacHdr += 2;
3317 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3318 break;
3320 case SUBTYPE_ASSOC_RSP:
3321 case SUBTYPE_REASSOC_RSP:
3322 // swab 16 bit fields - CapabilityInfo field
3323 pMacHdr += sizeof(HEADER_802_11);
3324 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3326 // swab 16 bit fields - Status Code field
3327 pMacHdr += 2;
3328 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3330 // swab 16 bit fields - AID field
3331 pMacHdr += 2;
3332 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3333 break;
3335 case SUBTYPE_AUTH:
3336 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3337 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3338 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3339 break;
3340 else
3342 // swab 16 bit fields - Auth Alg No. field
3343 pMacHdr += sizeof(HEADER_802_11);
3344 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3346 // swab 16 bit fields - Auth Seq No. field
3347 pMacHdr += 2;
3348 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3350 // swab 16 bit fields - Status Code field
3351 pMacHdr += 2;
3352 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3354 break;
3356 case SUBTYPE_BEACON:
3357 case SUBTYPE_PROBE_RSP:
3358 // swab 16 bit fields - BeaconInterval field
3359 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3360 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3362 // swab 16 bit fields - CapabilityInfo field
3363 pMacHdr += sizeof(USHORT);
3364 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3365 break;
3367 case SUBTYPE_DEAUTH:
3368 case SUBTYPE_DISASSOC:
3369 // swab 16 bit fields - Reason code field
3370 pMacHdr += sizeof(HEADER_802_11);
3371 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3372 break;
3375 else if( pFrame->FC.Type == BTYPE_DATA )
3378 else if(pFrame->FC.Type == BTYPE_CNTL)
3380 switch(pFrame->FC.SubType)
3382 case SUBTYPE_BLOCK_ACK_REQ:
3384 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3385 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3386 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3388 break;
3389 case SUBTYPE_BLOCK_ACK:
3390 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3391 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3392 break;
3394 case SUBTYPE_ACK:
3395 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3396 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3397 break;
3400 else
3402 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3405 // swab 16 bit fields - Frame Control
3406 if(Dir == DIR_WRITE)
3408 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3411 #endif // RT_BIG_ENDIAN //
3414 static inline VOID ConvertMulticastIP2MAC(
3415 IN PUCHAR pIpAddr,
3416 IN PUCHAR *ppMacAddr,
3417 IN UINT16 ProtoType)
3419 if (pIpAddr == NULL)
3420 return;
3422 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3423 return;
3425 switch (ProtoType)
3427 case ETH_P_IPV6:
3428 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3429 *(*ppMacAddr) = 0x33;
3430 *(*ppMacAddr + 1) = 0x33;
3431 *(*ppMacAddr + 2) = pIpAddr[12];
3432 *(*ppMacAddr + 3) = pIpAddr[13];
3433 *(*ppMacAddr + 4) = pIpAddr[14];
3434 *(*ppMacAddr + 5) = pIpAddr[15];
3435 break;
3437 case ETH_P_IP:
3438 default:
3439 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3440 *(*ppMacAddr) = 0x01;
3441 *(*ppMacAddr + 1) = 0x00;
3442 *(*ppMacAddr + 2) = 0x5e;
3443 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3444 *(*ppMacAddr + 4) = pIpAddr[2];
3445 *(*ppMacAddr + 5) = pIpAddr[3];
3446 break;
3449 return;
3452 BOOLEAN RTMPCheckForHang(
3453 IN NDIS_HANDLE MiniportAdapterContext
3456 VOID RTMPHalt(
3457 IN NDIS_HANDLE MiniportAdapterContext
3461 // Private routines in rtmp_init.c
3463 NDIS_STATUS RTMPAllocAdapterBlock(
3464 IN PVOID handle,
3465 OUT PRTMP_ADAPTER *ppAdapter
3468 NDIS_STATUS RTMPAllocTxRxRingMemory(
3469 IN PRTMP_ADAPTER pAd
3472 NDIS_STATUS RTMPFindAdapter(
3473 IN PRTMP_ADAPTER pAd,
3474 IN NDIS_HANDLE WrapperConfigurationContext
3477 NDIS_STATUS RTMPReadParametersHook(
3478 IN PRTMP_ADAPTER pAd
3481 VOID RTMPFreeAdapter(
3482 IN PRTMP_ADAPTER pAd
3485 NDIS_STATUS NICReadRegParameters(
3486 IN PRTMP_ADAPTER pAd,
3487 IN NDIS_HANDLE WrapperConfigurationContext
3491 VOID NICReadEEPROMParameters(
3492 IN PRTMP_ADAPTER pAd,
3493 IN PUCHAR mac_addr);
3495 VOID NICInitAsicFromEEPROM(
3496 IN PRTMP_ADAPTER pAd);
3498 VOID NICInitTxRxRingAndBacklogQueue(
3499 IN PRTMP_ADAPTER pAd);
3501 NDIS_STATUS NICInitializeAdapter(
3502 IN PRTMP_ADAPTER pAd,
3503 IN BOOLEAN bHardReset);
3505 NDIS_STATUS NICInitializeAsic(
3506 IN PRTMP_ADAPTER pAd,
3507 IN BOOLEAN bHardReset);
3509 VOID NICRestoreBBPValue(
3510 IN PRTMP_ADAPTER pAd);
3512 VOID NICIssueReset(
3513 IN PRTMP_ADAPTER pAd);
3515 VOID RTMPRingCleanUp(
3516 IN PRTMP_ADAPTER pAd,
3517 IN UCHAR RingType);
3519 VOID RxTest(
3520 IN PRTMP_ADAPTER pAd);
3522 NDIS_STATUS DbgSendPacket(
3523 IN PRTMP_ADAPTER pAd,
3524 IN PNDIS_PACKET pPacket);
3526 VOID UserCfgInit(
3527 IN PRTMP_ADAPTER pAd);
3529 VOID NICResetFromError(
3530 IN PRTMP_ADAPTER pAd);
3532 VOID NICEraseFirmware(
3533 IN PRTMP_ADAPTER pAd);
3535 NDIS_STATUS NICLoadFirmware(
3536 IN PRTMP_ADAPTER pAd);
3538 NDIS_STATUS NICLoadRateSwitchingParams(
3539 IN PRTMP_ADAPTER pAd);
3541 BOOLEAN NICCheckForHang(
3542 IN PRTMP_ADAPTER pAd);
3544 VOID NICUpdateFifoStaCounters(
3545 IN PRTMP_ADAPTER pAd);
3547 VOID NICUpdateRawCounters(
3548 IN PRTMP_ADAPTER pAd);
3550 ULONG RTMPNotAllZero(
3551 IN PVOID pSrc1,
3552 IN ULONG Length);
3554 VOID RTMPZeroMemory(
3555 IN PVOID pSrc,
3556 IN ULONG Length);
3558 ULONG RTMPCompareMemory(
3559 IN PVOID pSrc1,
3560 IN PVOID pSrc2,
3561 IN ULONG Length);
3563 VOID RTMPMoveMemory(
3564 OUT PVOID pDest,
3565 IN PVOID pSrc,
3566 IN ULONG Length);
3568 VOID AtoH(
3569 char *src,
3570 UCHAR *dest,
3571 int destlen);
3573 UCHAR BtoH(
3574 char ch);
3576 VOID RTMPPatchMacBbpBug(
3577 IN PRTMP_ADAPTER pAd);
3579 VOID RTMPPatchCardBus(
3580 IN PRTMP_ADAPTER pAdapter);
3582 VOID RTMPPatchRalinkCardBus(
3583 IN PRTMP_ADAPTER pAdapter,
3584 IN ULONG Bus);
3586 ULONG RTMPReadCBConfig(
3587 IN ULONG Bus,
3588 IN ULONG Slot,
3589 IN ULONG Func,
3590 IN ULONG Offset);
3592 VOID RTMPWriteCBConfig(
3593 IN ULONG Bus,
3594 IN ULONG Slot,
3595 IN ULONG Func,
3596 IN ULONG Offset,
3597 IN ULONG Value);
3599 VOID RTMPInitTimer(
3600 IN PRTMP_ADAPTER pAd,
3601 IN PRALINK_TIMER_STRUCT pTimer,
3602 IN PVOID pTimerFunc,
3603 IN PVOID pData,
3604 IN BOOLEAN Repeat);
3606 VOID RTMPSetTimer(
3607 IN PRALINK_TIMER_STRUCT pTimer,
3608 IN ULONG Value);
3611 VOID RTMPModTimer(
3612 IN PRALINK_TIMER_STRUCT pTimer,
3613 IN ULONG Value);
3615 VOID RTMPCancelTimer(
3616 IN PRALINK_TIMER_STRUCT pTimer,
3617 OUT BOOLEAN *pCancelled);
3619 VOID RTMPSetLED(
3620 IN PRTMP_ADAPTER pAd,
3621 IN UCHAR Status);
3623 VOID RTMPSetSignalLED(
3624 IN PRTMP_ADAPTER pAd,
3625 IN NDIS_802_11_RSSI Dbm);
3627 VOID RTMPEnableRxTx(
3628 IN PRTMP_ADAPTER pAd);
3631 // prototype in action.c
3633 VOID ActionStateMachineInit(
3634 IN PRTMP_ADAPTER pAd,
3635 IN STATE_MACHINE *S,
3636 OUT STATE_MACHINE_FUNC Trans[]);
3638 VOID MlmeADDBAAction(
3639 IN PRTMP_ADAPTER pAd,
3640 IN MLME_QUEUE_ELEM *Elem);
3642 VOID MlmeDELBAAction(
3643 IN PRTMP_ADAPTER pAd,
3644 IN MLME_QUEUE_ELEM *Elem);
3646 VOID MlmeDLSAction(
3647 IN PRTMP_ADAPTER pAd,
3648 IN MLME_QUEUE_ELEM *Elem);
3650 VOID MlmeInvalidAction(
3651 IN PRTMP_ADAPTER pAd,
3652 IN MLME_QUEUE_ELEM *Elem);
3654 VOID MlmeQOSAction(
3655 IN PRTMP_ADAPTER pAd,
3656 IN MLME_QUEUE_ELEM *Elem);
3658 #ifdef DOT11_N_SUPPORT
3659 VOID PeerAddBAReqAction(
3660 IN PRTMP_ADAPTER pAd,
3661 IN MLME_QUEUE_ELEM *Elem);
3663 VOID PeerAddBARspAction(
3664 IN PRTMP_ADAPTER pAd,
3665 IN MLME_QUEUE_ELEM *Elem);
3667 VOID PeerDelBAAction(
3668 IN PRTMP_ADAPTER pAd,
3669 IN MLME_QUEUE_ELEM *Elem);
3671 VOID PeerBAAction(
3672 IN PRTMP_ADAPTER pAd,
3673 IN MLME_QUEUE_ELEM *Elem);
3674 #endif // DOT11_N_SUPPORT //
3676 VOID SendPSMPAction(
3677 IN PRTMP_ADAPTER pAd,
3678 IN UCHAR Wcid,
3679 IN UCHAR Psmp);
3682 #ifdef DOT11N_DRAFT3
3683 VOID SendBSS2040CoexistMgmtAction(
3684 IN PRTMP_ADAPTER pAd,
3685 IN UCHAR Wcid,
3686 IN UCHAR apidx,
3687 IN UCHAR InfoReq);
3689 VOID SendNotifyBWActionFrame(
3690 IN PRTMP_ADAPTER pAd,
3691 IN UCHAR Wcid,
3692 IN UCHAR apidx);
3694 BOOLEAN ChannelSwitchSanityCheck(
3695 IN PRTMP_ADAPTER pAd,
3696 IN UCHAR Wcid,
3697 IN UCHAR NewChannel,
3698 IN UCHAR Secondary);
3700 VOID ChannelSwitchAction(
3701 IN PRTMP_ADAPTER pAd,
3702 IN UCHAR Wcid,
3703 IN UCHAR Channel,
3704 IN UCHAR Secondary);
3706 ULONG BuildIntolerantChannelRep(
3707 IN PRTMP_ADAPTER pAd,
3708 IN PUCHAR pDest);
3710 VOID Update2040CoexistFrameAndNotify(
3711 IN PRTMP_ADAPTER pAd,
3712 IN UCHAR Wcid,
3713 IN BOOLEAN bAddIntolerantCha);
3715 VOID Send2040CoexistAction(
3716 IN PRTMP_ADAPTER pAd,
3717 IN UCHAR Wcid,
3718 IN BOOLEAN bAddIntolerantCha);
3719 #endif // DOT11N_DRAFT3 //
3721 VOID PeerRMAction(
3722 IN PRTMP_ADAPTER pAd,
3723 IN MLME_QUEUE_ELEM *Elem);
3725 VOID PeerPublicAction(
3726 IN PRTMP_ADAPTER pAd,
3727 IN MLME_QUEUE_ELEM *Elem);
3729 #ifdef CONFIG_STA_SUPPORT
3730 VOID StaPublicAction(
3731 IN PRTMP_ADAPTER pAd,
3732 IN UCHAR Bss2040Coexist);
3733 #endif // CONFIG_STA_SUPPORT //
3736 VOID PeerBSSTranAction(
3737 IN PRTMP_ADAPTER pAd,
3738 IN MLME_QUEUE_ELEM *Elem);
3740 #ifdef DOT11_N_SUPPORT
3741 VOID PeerHTAction(
3742 IN PRTMP_ADAPTER pAd,
3743 IN MLME_QUEUE_ELEM *Elem);
3744 #endif // DOT11_N_SUPPORT //
3746 VOID PeerQOSAction(
3747 IN PRTMP_ADAPTER pAd,
3748 IN MLME_QUEUE_ELEM *Elem);
3750 #ifdef QOS_DLS_SUPPORT
3751 VOID PeerDLSAction(
3752 IN PRTMP_ADAPTER pAd,
3753 IN MLME_QUEUE_ELEM *Elem);
3754 #endif // QOS_DLS_SUPPORT //
3756 #ifdef CONFIG_STA_SUPPORT
3757 #ifdef QOS_DLS_SUPPORT
3758 VOID DlsParmFill(
3759 IN PRTMP_ADAPTER pAd,
3760 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3761 IN PRT_802_11_DLS pDls,
3762 IN USHORT reason);
3763 #endif // QOS_DLS_SUPPORT //
3764 #endif // CONFIG_STA_SUPPORT //
3766 #ifdef DOT11_N_SUPPORT
3767 VOID RECBATimerTimeout(
3768 IN PVOID SystemSpecific1,
3769 IN PVOID FunctionContext,
3770 IN PVOID SystemSpecific2,
3771 IN PVOID SystemSpecific3);
3773 VOID ORIBATimerTimeout(
3774 IN PRTMP_ADAPTER pAd);
3776 VOID SendRefreshBAR(
3777 IN PRTMP_ADAPTER pAd,
3778 IN MAC_TABLE_ENTRY *pEntry);
3779 #endif // DOT11_N_SUPPORT //
3781 VOID ActHeaderInit(
3782 IN PRTMP_ADAPTER pAd,
3783 IN OUT PHEADER_802_11 pHdr80211,
3784 IN PUCHAR Addr1,
3785 IN PUCHAR Addr2,
3786 IN PUCHAR Addr3);
3788 VOID BarHeaderInit(
3789 IN PRTMP_ADAPTER pAd,
3790 IN OUT PFRAME_BAR pCntlBar,
3791 IN PUCHAR pDA,
3792 IN PUCHAR pSA);
3794 VOID InsertActField(
3795 IN PRTMP_ADAPTER pAd,
3796 OUT PUCHAR pFrameBuf,
3797 OUT PULONG pFrameLen,
3798 IN UINT8 Category,
3799 IN UINT8 ActCode);
3801 BOOLEAN QosBADataParse(
3802 IN PRTMP_ADAPTER pAd,
3803 IN BOOLEAN bAMSDU,
3804 IN PUCHAR p8023Header,
3805 IN UCHAR WCID,
3806 IN UCHAR TID,
3807 IN USHORT Sequence,
3808 IN UCHAR DataOffset,
3809 IN USHORT Datasize,
3810 IN UINT CurRxIndex);
3812 #ifdef DOT11_N_SUPPORT
3813 BOOLEAN CntlEnqueueForRecv(
3814 IN PRTMP_ADAPTER pAd,
3815 IN ULONG Wcid,
3816 IN ULONG MsgLen,
3817 IN PFRAME_BA_REQ pMsg);
3819 VOID BaAutoManSwitch(
3820 IN PRTMP_ADAPTER pAd);
3821 #endif // DOT11_N_SUPPORT //
3823 VOID HTIOTCheck(
3824 IN PRTMP_ADAPTER pAd,
3825 IN UCHAR BatRecIdx);
3828 // Private routines in rtmp_data.c
3830 BOOLEAN RTMPHandleRxDoneInterrupt(
3831 IN PRTMP_ADAPTER pAd);
3833 VOID RTMPHandleTxDoneInterrupt(
3834 IN PRTMP_ADAPTER pAd);
3836 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3837 IN PRTMP_ADAPTER pAd,
3838 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3840 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3841 IN PRTMP_ADAPTER pAd);
3843 VOID RTMPHandleTBTTInterrupt(
3844 IN PRTMP_ADAPTER pAd);
3846 VOID RTMPHandlePreTBTTInterrupt(
3847 IN PRTMP_ADAPTER pAd);
3849 void RTMPHandleTwakeupInterrupt(
3850 IN PRTMP_ADAPTER pAd);
3852 VOID RTMPHandleRxCoherentInterrupt(
3853 IN PRTMP_ADAPTER pAd);
3855 BOOLEAN TxFrameIsAggregatible(
3856 IN PRTMP_ADAPTER pAd,
3857 IN PUCHAR pPrevAddr1,
3858 IN PUCHAR p8023hdr);
3860 BOOLEAN PeerIsAggreOn(
3861 IN PRTMP_ADAPTER pAd,
3862 IN ULONG TxRate,
3863 IN PMAC_TABLE_ENTRY pMacEntry);
3865 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3866 IN PNDIS_BUFFER pFirstBuffer,
3867 IN UCHAR DesiredOffset,
3868 OUT PUCHAR pByte0,
3869 OUT PUCHAR pByte1);
3871 NDIS_STATUS STASendPacket(
3872 IN PRTMP_ADAPTER pAd,
3873 IN PNDIS_PACKET pPacket);
3875 VOID STASendPackets(
3876 IN NDIS_HANDLE MiniportAdapterContext,
3877 IN PPNDIS_PACKET ppPacketArray,
3878 IN UINT NumberOfPackets);
3880 VOID RTMPDeQueuePacket(
3881 IN PRTMP_ADAPTER pAd,
3882 IN BOOLEAN bIntContext,
3883 IN UCHAR QueIdx,
3884 IN UCHAR Max_Tx_Packets);
3886 NDIS_STATUS RTMPHardTransmit(
3887 IN PRTMP_ADAPTER pAd,
3888 IN PNDIS_PACKET pPacket,
3889 IN UCHAR QueIdx,
3890 OUT PULONG pFreeTXDLeft);
3892 NDIS_STATUS STAHardTransmit(
3893 IN PRTMP_ADAPTER pAd,
3894 IN TX_BLK *pTxBlk,
3895 IN UCHAR QueIdx);
3897 VOID STARxEAPOLFrameIndicate(
3898 IN PRTMP_ADAPTER pAd,
3899 IN MAC_TABLE_ENTRY *pEntry,
3900 IN RX_BLK *pRxBlk,
3901 IN UCHAR FromWhichBSSID);
3903 NDIS_STATUS RTMPFreeTXDRequest(
3904 IN PRTMP_ADAPTER pAd,
3905 IN UCHAR RingType,
3906 IN UCHAR NumberRequired,
3907 IN PUCHAR FreeNumberIs);
3909 NDIS_STATUS MlmeHardTransmit(
3910 IN PRTMP_ADAPTER pAd,
3911 IN UCHAR QueIdx,
3912 IN PNDIS_PACKET pPacket);
3914 NDIS_STATUS MlmeHardTransmitMgmtRing(
3915 IN PRTMP_ADAPTER pAd,
3916 IN UCHAR QueIdx,
3917 IN PNDIS_PACKET pPacket);
3919 NDIS_STATUS MlmeHardTransmitTxRing(
3920 IN PRTMP_ADAPTER pAd,
3921 IN UCHAR QueIdx,
3922 IN PNDIS_PACKET pPacket);
3924 USHORT RTMPCalcDuration(
3925 IN PRTMP_ADAPTER pAd,
3926 IN UCHAR Rate,
3927 IN ULONG Size);
3929 VOID RTMPWriteTxWI(
3930 IN PRTMP_ADAPTER pAd,
3931 IN PTXWI_STRUC pTxWI,
3932 IN BOOLEAN FRAG,
3933 IN BOOLEAN CFACK,
3934 IN BOOLEAN InsTimestamp,
3935 IN BOOLEAN AMPDU,
3936 IN BOOLEAN Ack,
3937 IN BOOLEAN NSeq, // HW new a sequence.
3938 IN UCHAR BASize,
3939 IN UCHAR WCID,
3940 IN ULONG Length,
3941 IN UCHAR PID,
3942 IN UCHAR TID,
3943 IN UCHAR TxRate,
3944 IN UCHAR Txopmode,
3945 IN BOOLEAN CfAck,
3946 IN HTTRANSMIT_SETTING *pTransmit);
3949 VOID RTMPWriteTxWI_Data(
3950 IN PRTMP_ADAPTER pAd,
3951 IN OUT PTXWI_STRUC pTxWI,
3952 IN TX_BLK *pTxBlk);
3955 VOID RTMPWriteTxWI_Cache(
3956 IN PRTMP_ADAPTER pAd,
3957 IN OUT PTXWI_STRUC pTxWI,
3958 IN TX_BLK *pTxBlk);
3960 VOID RTMPWriteTxDescriptor(
3961 IN PRTMP_ADAPTER pAd,
3962 IN PTXD_STRUC pTxD,
3963 IN BOOLEAN bWIV,
3964 IN UCHAR QSEL);
3966 VOID RTMPSuspendMsduTransmission(
3967 IN PRTMP_ADAPTER pAd);
3969 VOID RTMPResumeMsduTransmission(
3970 IN PRTMP_ADAPTER pAd);
3972 NDIS_STATUS MiniportMMRequest(
3973 IN PRTMP_ADAPTER pAd,
3974 IN UCHAR QueIdx,
3975 IN PUCHAR pData,
3976 IN UINT Length);
3978 VOID RTMPSendNullFrame(
3979 IN PRTMP_ADAPTER pAd,
3980 IN UCHAR TxRate,
3981 IN BOOLEAN bQosNull);
3983 VOID RTMPSendDisassociationFrame(
3984 IN PRTMP_ADAPTER pAd);
3986 VOID RTMPSendRTSFrame(
3987 IN PRTMP_ADAPTER pAd,
3988 IN PUCHAR pDA,
3989 IN unsigned int NextMpduSize,
3990 IN UCHAR TxRate,
3991 IN UCHAR RTSRate,
3992 IN USHORT AckDuration,
3993 IN UCHAR QueIdx,
3994 IN UCHAR FrameGap);
3997 NDIS_STATUS RTMPApplyPacketFilter(
3998 IN PRTMP_ADAPTER pAd,
3999 IN PRT28XX_RXD_STRUC pRxD,
4000 IN PHEADER_802_11 pHeader);
4002 PQUEUE_HEADER RTMPCheckTxSwQueue(
4003 IN PRTMP_ADAPTER pAd,
4004 OUT UCHAR *QueIdx);
4006 #ifdef CONFIG_STA_SUPPORT
4007 VOID RTMPReportMicError(
4008 IN PRTMP_ADAPTER pAd,
4009 IN PCIPHER_KEY pWpaKey);
4011 VOID WpaMicFailureReportFrame(
4012 IN PRTMP_ADAPTER pAd,
4013 IN MLME_QUEUE_ELEM *Elem);
4015 VOID WpaDisassocApAndBlockAssoc(
4016 IN PVOID SystemSpecific1,
4017 IN PVOID FunctionContext,
4018 IN PVOID SystemSpecific2,
4019 IN PVOID SystemSpecific3);
4020 #endif // CONFIG_STA_SUPPORT //
4022 NDIS_STATUS RTMPCloneNdisPacket(
4023 IN PRTMP_ADAPTER pAd,
4024 IN BOOLEAN pInsAMSDUHdr,
4025 IN PNDIS_PACKET pInPacket,
4026 OUT PNDIS_PACKET *ppOutPacket);
4028 NDIS_STATUS RTMPAllocateNdisPacket(
4029 IN PRTMP_ADAPTER pAd,
4030 IN PNDIS_PACKET *pPacket,
4031 IN PUCHAR pHeader,
4032 IN UINT HeaderLen,
4033 IN PUCHAR pData,
4034 IN UINT DataLen);
4036 VOID RTMPFreeNdisPacket(
4037 IN PRTMP_ADAPTER pAd,
4038 IN PNDIS_PACKET pPacket);
4040 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4041 IN PRTMP_ADAPTER pAd,
4042 IN UCHAR QueIdx);
4044 BOOLEAN RTMPCheckDHCPFrame(
4045 IN PRTMP_ADAPTER pAd,
4046 IN PNDIS_PACKET pPacket);
4049 BOOLEAN RTMPCheckEtherType(
4050 IN PRTMP_ADAPTER pAd,
4051 IN PNDIS_PACKET pPacket);
4054 VOID RTMPCckBbpTuning(
4055 IN PRTMP_ADAPTER pAd,
4056 IN UINT TxRate);
4059 // Private routines in rtmp_wep.c
4061 VOID RTMPInitWepEngine(
4062 IN PRTMP_ADAPTER pAd,
4063 IN PUCHAR pKey,
4064 IN UCHAR KeyId,
4065 IN UCHAR KeyLen,
4066 IN PUCHAR pDest);
4068 VOID RTMPEncryptData(
4069 IN PRTMP_ADAPTER pAd,
4070 IN PUCHAR pSrc,
4071 IN PUCHAR pDest,
4072 IN UINT Len);
4074 BOOLEAN RTMPDecryptData(
4075 IN PRTMP_ADAPTER pAdapter,
4076 IN PUCHAR pSrc,
4077 IN UINT Len,
4078 IN UINT idx);
4080 BOOLEAN RTMPSoftDecryptWEP(
4081 IN PRTMP_ADAPTER pAd,
4082 IN PUCHAR pData,
4083 IN ULONG DataByteCnt,
4084 IN PCIPHER_KEY pGroupKey);
4086 VOID RTMPSetICV(
4087 IN PRTMP_ADAPTER pAd,
4088 IN PUCHAR pDest);
4090 VOID ARCFOUR_INIT(
4091 IN PARCFOURCONTEXT Ctx,
4092 IN PUCHAR pKey,
4093 IN UINT KeyLen);
4095 UCHAR ARCFOUR_BYTE(
4096 IN PARCFOURCONTEXT Ctx);
4098 VOID ARCFOUR_DECRYPT(
4099 IN PARCFOURCONTEXT Ctx,
4100 IN PUCHAR pDest,
4101 IN PUCHAR pSrc,
4102 IN UINT Len);
4104 VOID ARCFOUR_ENCRYPT(
4105 IN PARCFOURCONTEXT Ctx,
4106 IN PUCHAR pDest,
4107 IN PUCHAR pSrc,
4108 IN UINT Len);
4110 VOID WPAARCFOUR_ENCRYPT(
4111 IN PARCFOURCONTEXT Ctx,
4112 IN PUCHAR pDest,
4113 IN PUCHAR pSrc,
4114 IN UINT Len);
4116 UINT RTMP_CALC_FCS32(
4117 IN UINT Fcs,
4118 IN PUCHAR Cp,
4119 IN INT Len);
4122 // MLME routines
4125 // Asic/RF/BBP related functions
4127 VOID AsicAdjustTxPower(
4128 IN PRTMP_ADAPTER pAd);
4130 VOID AsicUpdateProtect(
4131 IN PRTMP_ADAPTER pAd,
4132 IN USHORT OperaionMode,
4133 IN UCHAR SetMask,
4134 IN BOOLEAN bDisableBGProtect,
4135 IN BOOLEAN bNonGFExist);
4137 VOID AsicSwitchChannel(
4138 IN PRTMP_ADAPTER pAd,
4139 IN UCHAR Channel,
4140 IN BOOLEAN bScan);
4142 VOID AsicLockChannel(
4143 IN PRTMP_ADAPTER pAd,
4144 IN UCHAR Channel) ;
4146 VOID AsicAntennaSelect(
4147 IN PRTMP_ADAPTER pAd,
4148 IN UCHAR Channel);
4150 VOID AsicAntennaSetting(
4151 IN PRTMP_ADAPTER pAd,
4152 IN ABGBAND_STATE BandState);
4154 VOID AsicRfTuningExec(
4155 IN PVOID SystemSpecific1,
4156 IN PVOID FunctionContext,
4157 IN PVOID SystemSpecific2,
4158 IN PVOID SystemSpecific3);
4160 #ifdef CONFIG_STA_SUPPORT
4161 VOID AsicSleepThenAutoWakeup(
4162 IN PRTMP_ADAPTER pAd,
4163 IN USHORT TbttNumToNextWakeUp);
4165 VOID AsicForceSleep(
4166 IN PRTMP_ADAPTER pAd);
4168 VOID AsicForceWakeup(
4169 IN PRTMP_ADAPTER pAd,
4170 IN UCHAR Level);
4171 #endif // CONFIG_STA_SUPPORT //
4173 VOID AsicSetBssid(
4174 IN PRTMP_ADAPTER pAd,
4175 IN PUCHAR pBssid);
4177 VOID AsicSetMcastWC(
4178 IN PRTMP_ADAPTER pAd);
4180 VOID AsicDelWcidTab(
4181 IN PRTMP_ADAPTER pAd,
4182 IN UCHAR Wcid);
4184 VOID AsicEnableRDG(
4185 IN PRTMP_ADAPTER pAd);
4187 VOID AsicDisableRDG(
4188 IN PRTMP_ADAPTER pAd);
4190 VOID AsicDisableSync(
4191 IN PRTMP_ADAPTER pAd);
4193 VOID AsicEnableBssSync(
4194 IN PRTMP_ADAPTER pAd);
4196 VOID AsicEnableIbssSync(
4197 IN PRTMP_ADAPTER pAd);
4199 VOID AsicSetEdcaParm(
4200 IN PRTMP_ADAPTER pAd,
4201 IN PEDCA_PARM pEdcaParm);
4203 VOID AsicSetSlotTime(
4204 IN PRTMP_ADAPTER pAd,
4205 IN BOOLEAN bUseShortSlotTime);
4207 VOID AsicAddSharedKeyEntry(
4208 IN PRTMP_ADAPTER pAd,
4209 IN UCHAR BssIndex,
4210 IN UCHAR KeyIdx,
4211 IN UCHAR CipherAlg,
4212 IN PUCHAR pKey,
4213 IN PUCHAR pTxMic,
4214 IN PUCHAR pRxMic);
4216 VOID AsicRemoveSharedKeyEntry(
4217 IN PRTMP_ADAPTER pAd,
4218 IN UCHAR BssIndex,
4219 IN UCHAR KeyIdx);
4221 VOID AsicUpdateWCIDAttribute(
4222 IN PRTMP_ADAPTER pAd,
4223 IN USHORT WCID,
4224 IN UCHAR BssIndex,
4225 IN UCHAR CipherAlg,
4226 IN BOOLEAN bUsePairewiseKeyTable);
4228 VOID AsicUpdateWCIDIVEIV(
4229 IN PRTMP_ADAPTER pAd,
4230 IN USHORT WCID,
4231 IN ULONG uIV,
4232 IN ULONG uEIV);
4234 VOID AsicUpdateRxWCIDTable(
4235 IN PRTMP_ADAPTER pAd,
4236 IN USHORT WCID,
4237 IN PUCHAR pAddr);
4239 VOID AsicAddKeyEntry(
4240 IN PRTMP_ADAPTER pAd,
4241 IN USHORT WCID,
4242 IN UCHAR BssIndex,
4243 IN UCHAR KeyIdx,
4244 IN PCIPHER_KEY pCipherKey,
4245 IN BOOLEAN bUsePairewiseKeyTable,
4246 IN BOOLEAN bTxKey);
4248 VOID AsicAddPairwiseKeyEntry(
4249 IN PRTMP_ADAPTER pAd,
4250 IN PUCHAR pAddr,
4251 IN UCHAR WCID,
4252 IN CIPHER_KEY *pCipherKey);
4254 VOID AsicRemovePairwiseKeyEntry(
4255 IN PRTMP_ADAPTER pAd,
4256 IN UCHAR BssIdx,
4257 IN UCHAR Wcid);
4259 BOOLEAN AsicSendCommandToMcu(
4260 IN PRTMP_ADAPTER pAd,
4261 IN UCHAR Command,
4262 IN UCHAR Token,
4263 IN UCHAR Arg0,
4264 IN UCHAR Arg1);
4266 BOOLEAN AsicCheckCommanOk(
4267 IN PRTMP_ADAPTER pAd,
4268 IN UCHAR Command);
4270 VOID MacAddrRandomBssid(
4271 IN PRTMP_ADAPTER pAd,
4272 OUT PUCHAR pAddr);
4274 VOID MgtMacHeaderInit(
4275 IN PRTMP_ADAPTER pAd,
4276 IN OUT PHEADER_802_11 pHdr80211,
4277 IN UCHAR SubType,
4278 IN UCHAR ToDs,
4279 IN PUCHAR pDA,
4280 IN PUCHAR pBssid);
4282 VOID MlmeRadioOff(
4283 IN PRTMP_ADAPTER pAd);
4285 VOID MlmeRadioOn(
4286 IN PRTMP_ADAPTER pAd);
4289 VOID BssTableInit(
4290 IN BSS_TABLE *Tab);
4292 #ifdef DOT11_N_SUPPORT
4293 VOID BATableInit(
4294 IN PRTMP_ADAPTER pAd,
4295 IN BA_TABLE *Tab);
4296 #endif // DOT11_N_SUPPORT //
4298 ULONG BssTableSearch(
4299 IN BSS_TABLE *Tab,
4300 IN PUCHAR pBssid,
4301 IN UCHAR Channel);
4303 ULONG BssSsidTableSearch(
4304 IN BSS_TABLE *Tab,
4305 IN PUCHAR pBssid,
4306 IN PUCHAR pSsid,
4307 IN UCHAR SsidLen,
4308 IN UCHAR Channel);
4310 ULONG BssTableSearchWithSSID(
4311 IN BSS_TABLE *Tab,
4312 IN PUCHAR Bssid,
4313 IN PUCHAR pSsid,
4314 IN UCHAR SsidLen,
4315 IN UCHAR Channel);
4317 VOID BssTableDeleteEntry(
4318 IN OUT PBSS_TABLE pTab,
4319 IN PUCHAR pBssid,
4320 IN UCHAR Channel);
4322 #ifdef DOT11_N_SUPPORT
4323 VOID BATableDeleteORIEntry(
4324 IN OUT PRTMP_ADAPTER pAd,
4325 IN BA_ORI_ENTRY *pBAORIEntry);
4327 VOID BATableDeleteRECEntry(
4328 IN OUT PRTMP_ADAPTER pAd,
4329 IN BA_REC_ENTRY *pBARECEntry);
4331 VOID BATableTearORIEntry(
4332 IN OUT PRTMP_ADAPTER pAd,
4333 IN UCHAR TID,
4334 IN UCHAR Wcid,
4335 IN BOOLEAN bForceDelete,
4336 IN BOOLEAN ALL);
4338 VOID BATableTearRECEntry(
4339 IN OUT PRTMP_ADAPTER pAd,
4340 IN UCHAR TID,
4341 IN UCHAR WCID,
4342 IN BOOLEAN ALL);
4343 #endif // DOT11_N_SUPPORT //
4345 VOID BssEntrySet(
4346 IN PRTMP_ADAPTER pAd,
4347 OUT PBSS_ENTRY pBss,
4348 IN PUCHAR pBssid,
4349 IN CHAR Ssid[],
4350 IN UCHAR SsidLen,
4351 IN UCHAR BssType,
4352 IN USHORT BeaconPeriod,
4353 IN PCF_PARM CfParm,
4354 IN USHORT AtimWin,
4355 IN USHORT CapabilityInfo,
4356 IN UCHAR SupRate[],
4357 IN UCHAR SupRateLen,
4358 IN UCHAR ExtRate[],
4359 IN UCHAR ExtRateLen,
4360 IN HT_CAPABILITY_IE *pHtCapability,
4361 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4362 IN UCHAR HtCapabilityLen,
4363 IN UCHAR AddHtInfoLen,
4364 IN UCHAR NewExtChanOffset,
4365 IN UCHAR Channel,
4366 IN CHAR Rssi,
4367 IN LARGE_INTEGER TimeStamp,
4368 IN UCHAR CkipFlag,
4369 IN PEDCA_PARM pEdcaParm,
4370 IN PQOS_CAPABILITY_PARM pQosCapability,
4371 IN PQBSS_LOAD_PARM pQbssLoad,
4372 IN USHORT LengthVIE,
4373 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4375 ULONG BssTableSetEntry(
4376 IN PRTMP_ADAPTER pAd,
4377 OUT PBSS_TABLE pTab,
4378 IN PUCHAR pBssid,
4379 IN CHAR Ssid[],
4380 IN UCHAR SsidLen,
4381 IN UCHAR BssType,
4382 IN USHORT BeaconPeriod,
4383 IN CF_PARM *CfParm,
4384 IN USHORT AtimWin,
4385 IN USHORT CapabilityInfo,
4386 IN UCHAR SupRate[],
4387 IN UCHAR SupRateLen,
4388 IN UCHAR ExtRate[],
4389 IN UCHAR ExtRateLen,
4390 IN HT_CAPABILITY_IE *pHtCapability,
4391 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4392 IN UCHAR HtCapabilityLen,
4393 IN UCHAR AddHtInfoLen,
4394 IN UCHAR NewExtChanOffset,
4395 IN UCHAR Channel,
4396 IN CHAR Rssi,
4397 IN LARGE_INTEGER TimeStamp,
4398 IN UCHAR CkipFlag,
4399 IN PEDCA_PARM pEdcaParm,
4400 IN PQOS_CAPABILITY_PARM pQosCapability,
4401 IN PQBSS_LOAD_PARM pQbssLoad,
4402 IN USHORT LengthVIE,
4403 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4405 #ifdef DOT11_N_SUPPORT
4406 VOID BATableInsertEntry(
4407 IN PRTMP_ADAPTER pAd,
4408 IN USHORT Aid,
4409 IN USHORT TimeOutValue,
4410 IN USHORT StartingSeq,
4411 IN UCHAR TID,
4412 IN UCHAR BAWinSize,
4413 IN UCHAR OriginatorStatus,
4414 IN BOOLEAN IsRecipient);
4416 #ifdef DOT11N_DRAFT3
4417 VOID Bss2040CoexistTimeOut(
4418 IN PVOID SystemSpecific1,
4419 IN PVOID FunctionContext,
4420 IN PVOID SystemSpecific2,
4421 IN PVOID SystemSpecific3);
4424 VOID TriEventInit(
4425 IN PRTMP_ADAPTER pAd);
4427 ULONG TriEventTableSetEntry(
4428 IN PRTMP_ADAPTER pAd,
4429 OUT TRIGGER_EVENT_TAB *Tab,
4430 IN PUCHAR pBssid,
4431 IN HT_CAPABILITY_IE *pHtCapability,
4432 IN UCHAR HtCapabilityLen,
4433 IN UCHAR RegClass,
4434 IN UCHAR ChannelNo);
4436 VOID TriEventCounterMaintenance(
4437 IN PRTMP_ADAPTER pAd);
4438 #endif // DOT11N_DRAFT3 //
4439 #endif // DOT11_N_SUPPORT //
4441 VOID BssTableSsidSort(
4442 IN PRTMP_ADAPTER pAd,
4443 OUT BSS_TABLE *OutTab,
4444 IN CHAR Ssid[],
4445 IN UCHAR SsidLen);
4447 VOID BssTableSortByRssi(
4448 IN OUT BSS_TABLE *OutTab);
4450 VOID BssCipherParse(
4451 IN OUT PBSS_ENTRY pBss);
4453 NDIS_STATUS MlmeQueueInit(
4454 IN MLME_QUEUE *Queue);
4456 VOID MlmeQueueDestroy(
4457 IN MLME_QUEUE *Queue);
4459 BOOLEAN MlmeEnqueue(
4460 IN PRTMP_ADAPTER pAd,
4461 IN ULONG Machine,
4462 IN ULONG MsgType,
4463 IN ULONG MsgLen,
4464 IN VOID *Msg);
4466 BOOLEAN MlmeEnqueueForRecv(
4467 IN PRTMP_ADAPTER pAd,
4468 IN ULONG Wcid,
4469 IN ULONG TimeStampHigh,
4470 IN ULONG TimeStampLow,
4471 IN UCHAR Rssi0,
4472 IN UCHAR Rssi1,
4473 IN UCHAR Rssi2,
4474 IN ULONG MsgLen,
4475 IN PVOID Msg,
4476 IN UCHAR Signal);
4479 BOOLEAN MlmeDequeue(
4480 IN MLME_QUEUE *Queue,
4481 OUT MLME_QUEUE_ELEM **Elem);
4483 VOID MlmeRestartStateMachine(
4484 IN PRTMP_ADAPTER pAd);
4486 BOOLEAN MlmeQueueEmpty(
4487 IN MLME_QUEUE *Queue);
4489 BOOLEAN MlmeQueueFull(
4490 IN MLME_QUEUE *Queue);
4492 BOOLEAN MsgTypeSubst(
4493 IN PRTMP_ADAPTER pAd,
4494 IN PFRAME_802_11 pFrame,
4495 OUT INT *Machine,
4496 OUT INT *MsgType);
4498 VOID StateMachineInit(
4499 IN STATE_MACHINE *Sm,
4500 IN STATE_MACHINE_FUNC Trans[],
4501 IN ULONG StNr,
4502 IN ULONG MsgNr,
4503 IN STATE_MACHINE_FUNC DefFunc,
4504 IN ULONG InitState,
4505 IN ULONG Base);
4507 VOID StateMachineSetAction(
4508 IN STATE_MACHINE *S,
4509 IN ULONG St,
4510 ULONG Msg,
4511 IN STATE_MACHINE_FUNC F);
4513 VOID StateMachinePerformAction(
4514 IN PRTMP_ADAPTER pAd,
4515 IN STATE_MACHINE *S,
4516 IN MLME_QUEUE_ELEM *Elem);
4518 VOID Drop(
4519 IN PRTMP_ADAPTER pAd,
4520 IN MLME_QUEUE_ELEM *Elem);
4522 VOID AssocStateMachineInit(
4523 IN PRTMP_ADAPTER pAd,
4524 IN STATE_MACHINE *Sm,
4525 OUT STATE_MACHINE_FUNC Trans[]);
4527 VOID ReassocTimeout(
4528 IN PVOID SystemSpecific1,
4529 IN PVOID FunctionContext,
4530 IN PVOID SystemSpecific2,
4531 IN PVOID SystemSpecific3);
4533 VOID AssocTimeout(
4534 IN PVOID SystemSpecific1,
4535 IN PVOID FunctionContext,
4536 IN PVOID SystemSpecific2,
4537 IN PVOID SystemSpecific3);
4539 VOID DisassocTimeout(
4540 IN PVOID SystemSpecific1,
4541 IN PVOID FunctionContext,
4542 IN PVOID SystemSpecific2,
4543 IN PVOID SystemSpecific3);
4545 //----------------------------------------------
4546 VOID MlmeDisassocReqAction(
4547 IN PRTMP_ADAPTER pAd,
4548 IN MLME_QUEUE_ELEM *Elem);
4550 VOID MlmeAssocReqAction(
4551 IN PRTMP_ADAPTER pAd,
4552 IN MLME_QUEUE_ELEM *Elem);
4554 VOID MlmeReassocReqAction(
4555 IN PRTMP_ADAPTER pAd,
4556 IN MLME_QUEUE_ELEM *Elem);
4558 VOID MlmeDisassocReqAction(
4559 IN PRTMP_ADAPTER pAd,
4560 IN MLME_QUEUE_ELEM *Elem);
4562 VOID PeerAssocRspAction(
4563 IN PRTMP_ADAPTER pAd,
4564 IN MLME_QUEUE_ELEM *Elem);
4566 VOID PeerReassocRspAction(
4567 IN PRTMP_ADAPTER pAd,
4568 IN MLME_QUEUE_ELEM *Elem);
4570 VOID PeerDisassocAction(
4571 IN PRTMP_ADAPTER pAd,
4572 IN MLME_QUEUE_ELEM *Elem);
4574 VOID DisassocTimeoutAction(
4575 IN PRTMP_ADAPTER pAd,
4576 IN MLME_QUEUE_ELEM *Elem);
4578 VOID AssocTimeoutAction(
4579 IN PRTMP_ADAPTER pAd,
4580 IN MLME_QUEUE_ELEM *Elem);
4582 VOID ReassocTimeoutAction(
4583 IN PRTMP_ADAPTER pAd,
4584 IN MLME_QUEUE_ELEM *Elem);
4586 VOID Cls3errAction(
4587 IN PRTMP_ADAPTER pAd,
4588 IN PUCHAR pAddr);
4590 VOID SwitchBetweenWepAndCkip(
4591 IN PRTMP_ADAPTER pAd);
4593 VOID InvalidStateWhenAssoc(
4594 IN PRTMP_ADAPTER pAd,
4595 IN MLME_QUEUE_ELEM *Elem);
4597 VOID InvalidStateWhenReassoc(
4598 IN PRTMP_ADAPTER pAd,
4599 IN MLME_QUEUE_ELEM *Elem);
4601 VOID InvalidStateWhenDisassociate(
4602 IN PRTMP_ADAPTER pAd,
4603 IN MLME_QUEUE_ELEM *Elem);
4606 VOID ComposePsPoll(
4607 IN PRTMP_ADAPTER pAd);
4609 VOID ComposeNullFrame(
4610 IN PRTMP_ADAPTER pAd);
4612 VOID AssocPostProc(
4613 IN PRTMP_ADAPTER pAd,
4614 IN PUCHAR pAddr2,
4615 IN USHORT CapabilityInfo,
4616 IN USHORT Aid,
4617 IN UCHAR SupRate[],
4618 IN UCHAR SupRateLen,
4619 IN UCHAR ExtRate[],
4620 IN UCHAR ExtRateLen,
4621 IN PEDCA_PARM pEdcaParm,
4622 IN HT_CAPABILITY_IE *pHtCapability,
4623 IN UCHAR HtCapabilityLen,
4624 IN ADD_HT_INFO_IE *pAddHtInfo);
4626 VOID AuthStateMachineInit(
4627 IN PRTMP_ADAPTER pAd,
4628 IN PSTATE_MACHINE sm,
4629 OUT STATE_MACHINE_FUNC Trans[]);
4631 VOID AuthTimeout(
4632 IN PVOID SystemSpecific1,
4633 IN PVOID FunctionContext,
4634 IN PVOID SystemSpecific2,
4635 IN PVOID SystemSpecific3);
4637 VOID MlmeAuthReqAction(
4638 IN PRTMP_ADAPTER pAd,
4639 IN MLME_QUEUE_ELEM *Elem);
4641 VOID PeerAuthRspAtSeq2Action(
4642 IN PRTMP_ADAPTER pAd,
4643 IN MLME_QUEUE_ELEM *Elem);
4645 VOID PeerAuthRspAtSeq4Action(
4646 IN PRTMP_ADAPTER pAd,
4647 IN MLME_QUEUE_ELEM *Elem);
4649 VOID AuthTimeoutAction(
4650 IN PRTMP_ADAPTER pAd,
4651 IN MLME_QUEUE_ELEM *Elem);
4653 VOID Cls2errAction(
4654 IN PRTMP_ADAPTER pAd,
4655 IN PUCHAR pAddr);
4657 VOID MlmeDeauthReqAction(
4658 IN PRTMP_ADAPTER pAd,
4659 IN MLME_QUEUE_ELEM *Elem);
4661 VOID InvalidStateWhenAuth(
4662 IN PRTMP_ADAPTER pAd,
4663 IN MLME_QUEUE_ELEM *Elem);
4665 //=============================================
4667 VOID AuthRspStateMachineInit(
4668 IN PRTMP_ADAPTER pAd,
4669 IN PSTATE_MACHINE Sm,
4670 IN STATE_MACHINE_FUNC Trans[]);
4672 VOID PeerDeauthAction(
4673 IN PRTMP_ADAPTER pAd,
4674 IN MLME_QUEUE_ELEM *Elem);
4676 VOID PeerAuthSimpleRspGenAndSend(
4677 IN PRTMP_ADAPTER pAd,
4678 IN PHEADER_802_11 pHdr80211,
4679 IN USHORT Alg,
4680 IN USHORT Seq,
4681 IN USHORT Reason,
4682 IN USHORT Status);
4685 // Private routines in dls.c
4688 #ifdef CONFIG_STA_SUPPORT
4689 #ifdef QOS_DLS_SUPPORT
4690 void DlsStateMachineInit(
4691 IN PRTMP_ADAPTER pAd,
4692 IN STATE_MACHINE *Sm,
4693 OUT STATE_MACHINE_FUNC Trans[]);
4695 VOID MlmeDlsReqAction(
4696 IN PRTMP_ADAPTER pAd,
4697 IN MLME_QUEUE_ELEM *Elem);
4699 VOID PeerDlsReqAction(
4700 IN PRTMP_ADAPTER pAd,
4701 IN MLME_QUEUE_ELEM *Elem);
4703 VOID PeerDlsRspAction(
4704 IN PRTMP_ADAPTER pAd,
4705 IN MLME_QUEUE_ELEM *Elem);
4707 VOID MlmeDlsTearDownAction(
4708 IN PRTMP_ADAPTER pAd,
4709 IN MLME_QUEUE_ELEM *Elem);
4711 VOID PeerDlsTearDownAction(
4712 IN PRTMP_ADAPTER pAd,
4713 IN MLME_QUEUE_ELEM *Elem);
4715 VOID RTMPCheckDLSTimeOut(
4716 IN PRTMP_ADAPTER pAd);
4718 BOOLEAN RTMPRcvFrameDLSCheck(
4719 IN PRTMP_ADAPTER pAd,
4720 IN PHEADER_802_11 pHeader,
4721 IN ULONG Len,
4722 IN PRT28XX_RXD_STRUC pRxD);
4724 INT RTMPCheckDLSFrame(
4725 IN PRTMP_ADAPTER pAd,
4726 IN PUCHAR pDA);
4728 VOID RTMPSendDLSTearDownFrame(
4729 IN PRTMP_ADAPTER pAd,
4730 IN PUCHAR pDA);
4732 NDIS_STATUS RTMPSendSTAKeyRequest(
4733 IN PRTMP_ADAPTER pAd,
4734 IN PUCHAR pDA);
4736 NDIS_STATUS RTMPSendSTAKeyHandShake(
4737 IN PRTMP_ADAPTER pAd,
4738 IN PUCHAR pDA);
4740 VOID DlsTimeoutAction(
4741 IN PVOID SystemSpecific1,
4742 IN PVOID FunctionContext,
4743 IN PVOID SystemSpecific2,
4744 IN PVOID SystemSpecific3);
4746 BOOLEAN MlmeDlsReqSanity(
4747 IN PRTMP_ADAPTER pAd,
4748 IN VOID *Msg,
4749 IN ULONG MsgLen,
4750 OUT PRT_802_11_DLS *pDLS,
4751 OUT PUSHORT pReason);
4753 INT Set_DlsEntryInfo_Display_Proc(
4754 IN PRTMP_ADAPTER pAd,
4755 IN PUCHAR arg);
4757 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4758 IN PRTMP_ADAPTER pAd,
4759 IN PUCHAR pAddr,
4760 IN UINT DlsEntryIdx);
4762 BOOLEAN MacTableDeleteDlsEntry(
4763 IN PRTMP_ADAPTER pAd,
4764 IN USHORT wcid,
4765 IN PUCHAR pAddr);
4767 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4768 IN PRTMP_ADAPTER pAd,
4769 IN PUCHAR pAddr,
4770 IN BOOLEAN bResetIdelCount);
4772 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4773 IN PRTMP_ADAPTER pAd,
4774 IN UCHAR wcid,
4775 IN PUCHAR pAddr,
4776 IN BOOLEAN bResetIdelCount);
4778 INT Set_DlsAddEntry_Proc(
4779 IN PRTMP_ADAPTER pAd,
4780 IN PUCHAR arg);
4782 INT Set_DlsTearDownEntry_Proc(
4783 IN PRTMP_ADAPTER pAd,
4784 IN PUCHAR arg);
4785 #endif // QOS_DLS_SUPPORT //
4786 #endif // CONFIG_STA_SUPPORT //
4788 #ifdef QOS_DLS_SUPPORT
4789 BOOLEAN PeerDlsReqSanity(
4790 IN PRTMP_ADAPTER pAd,
4791 IN VOID *Msg,
4792 IN ULONG MsgLen,
4793 OUT PUCHAR pDA,
4794 OUT PUCHAR pSA,
4795 OUT USHORT *pCapabilityInfo,
4796 OUT USHORT *pDlsTimeout,
4797 OUT UCHAR *pRatesLen,
4798 OUT UCHAR Rates[],
4799 OUT UCHAR *pHtCapabilityLen,
4800 OUT HT_CAPABILITY_IE *pHtCapability);
4802 BOOLEAN PeerDlsRspSanity(
4803 IN PRTMP_ADAPTER pAd,
4804 IN VOID *Msg,
4805 IN ULONG MsgLen,
4806 OUT PUCHAR pDA,
4807 OUT PUCHAR pSA,
4808 OUT USHORT *pCapabilityInfo,
4809 OUT USHORT *pStatus,
4810 OUT UCHAR *pRatesLen,
4811 OUT UCHAR Rates[],
4812 OUT UCHAR *pHtCapabilityLen,
4813 OUT HT_CAPABILITY_IE *pHtCapability);
4815 BOOLEAN PeerDlsTearDownSanity(
4816 IN PRTMP_ADAPTER pAd,
4817 IN VOID *Msg,
4818 IN ULONG MsgLen,
4819 OUT PUCHAR pDA,
4820 OUT PUCHAR pSA,
4821 OUT USHORT *pReason);
4822 #endif // QOS_DLS_SUPPORT //
4824 //========================================
4826 VOID SyncStateMachineInit(
4827 IN PRTMP_ADAPTER pAd,
4828 IN STATE_MACHINE *Sm,
4829 OUT STATE_MACHINE_FUNC Trans[]);
4831 VOID BeaconTimeout(
4832 IN PVOID SystemSpecific1,
4833 IN PVOID FunctionContext,
4834 IN PVOID SystemSpecific2,
4835 IN PVOID SystemSpecific3);
4837 VOID ScanTimeout(
4838 IN PVOID SystemSpecific1,
4839 IN PVOID FunctionContext,
4840 IN PVOID SystemSpecific2,
4841 IN PVOID SystemSpecific3);
4843 VOID MlmeScanReqAction(
4844 IN PRTMP_ADAPTER pAd,
4845 IN MLME_QUEUE_ELEM *Elem);
4847 VOID InvalidStateWhenScan(
4848 IN PRTMP_ADAPTER pAd,
4849 IN MLME_QUEUE_ELEM *Elem);
4851 VOID InvalidStateWhenJoin(
4852 IN PRTMP_ADAPTER pAd,
4853 IN MLME_QUEUE_ELEM *Elem);
4855 VOID InvalidStateWhenStart(
4856 IN PRTMP_ADAPTER pAd,
4857 IN MLME_QUEUE_ELEM *Elem);
4859 VOID PeerBeacon(
4860 IN PRTMP_ADAPTER pAd,
4861 IN MLME_QUEUE_ELEM *Elem);
4863 VOID EnqueueProbeRequest(
4864 IN PRTMP_ADAPTER pAd);
4866 BOOLEAN ScanRunning(
4867 IN PRTMP_ADAPTER pAd);
4868 //=========================================
4870 VOID MlmeCntlInit(
4871 IN PRTMP_ADAPTER pAd,
4872 IN STATE_MACHINE *S,
4873 OUT STATE_MACHINE_FUNC Trans[]);
4875 VOID MlmeCntlMachinePerformAction(
4876 IN PRTMP_ADAPTER pAd,
4877 IN STATE_MACHINE *S,
4878 IN MLME_QUEUE_ELEM *Elem);
4880 VOID CntlIdleProc(
4881 IN PRTMP_ADAPTER pAd,
4882 IN MLME_QUEUE_ELEM *Elem);
4884 VOID CntlOidScanProc(
4885 IN PRTMP_ADAPTER pAd,
4886 IN MLME_QUEUE_ELEM *Elem);
4888 VOID CntlOidSsidProc(
4889 IN PRTMP_ADAPTER pAd,
4890 IN MLME_QUEUE_ELEM * Elem);
4892 VOID CntlOidRTBssidProc(
4893 IN PRTMP_ADAPTER pAd,
4894 IN MLME_QUEUE_ELEM * Elem);
4896 VOID CntlMlmeRoamingProc(
4897 IN PRTMP_ADAPTER pAd,
4898 IN MLME_QUEUE_ELEM * Elem);
4900 VOID CntlWaitDisassocProc(
4901 IN PRTMP_ADAPTER pAd,
4902 IN MLME_QUEUE_ELEM *Elem);
4904 VOID CntlWaitJoinProc(
4905 IN PRTMP_ADAPTER pAd,
4906 IN MLME_QUEUE_ELEM *Elem);
4908 VOID CntlWaitReassocProc(
4909 IN PRTMP_ADAPTER pAd,
4910 IN MLME_QUEUE_ELEM *Elem);
4912 VOID CntlWaitStartProc(
4913 IN PRTMP_ADAPTER pAd,
4914 IN MLME_QUEUE_ELEM *Elem);
4916 VOID CntlWaitAuthProc(
4917 IN PRTMP_ADAPTER pAd,
4918 IN MLME_QUEUE_ELEM *Elem);
4920 VOID CntlWaitAuthProc2(
4921 IN PRTMP_ADAPTER pAd,
4922 IN MLME_QUEUE_ELEM *Elem);
4924 VOID CntlWaitAssocProc(
4925 IN PRTMP_ADAPTER pAd,
4926 IN MLME_QUEUE_ELEM *Elem);
4928 #ifdef QOS_DLS_SUPPORT
4929 VOID CntlOidDLSSetupProc(
4930 IN PRTMP_ADAPTER pAd,
4931 IN MLME_QUEUE_ELEM *Elem);
4932 #endif // QOS_DLS_SUPPORT //
4934 VOID LinkUp(
4935 IN PRTMP_ADAPTER pAd,
4936 IN UCHAR BssType);
4938 VOID LinkDown(
4939 IN PRTMP_ADAPTER pAd,
4940 IN BOOLEAN IsReqFromAP);
4942 VOID IterateOnBssTab(
4943 IN PRTMP_ADAPTER pAd);
4945 VOID IterateOnBssTab2(
4946 IN PRTMP_ADAPTER pAd);;
4948 VOID JoinParmFill(
4949 IN PRTMP_ADAPTER pAd,
4950 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4951 IN ULONG BssIdx);
4953 VOID AssocParmFill(
4954 IN PRTMP_ADAPTER pAd,
4955 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4956 IN PUCHAR pAddr,
4957 IN USHORT CapabilityInfo,
4958 IN ULONG Timeout,
4959 IN USHORT ListenIntv);
4961 VOID ScanParmFill(
4962 IN PRTMP_ADAPTER pAd,
4963 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4964 IN CHAR Ssid[],
4965 IN UCHAR SsidLen,
4966 IN UCHAR BssType,
4967 IN UCHAR ScanType);
4969 VOID DisassocParmFill(
4970 IN PRTMP_ADAPTER pAd,
4971 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4972 IN PUCHAR pAddr,
4973 IN USHORT Reason);
4975 VOID StartParmFill(
4976 IN PRTMP_ADAPTER pAd,
4977 IN OUT MLME_START_REQ_STRUCT *StartReq,
4978 IN CHAR Ssid[],
4979 IN UCHAR SsidLen);
4981 VOID AuthParmFill(
4982 IN PRTMP_ADAPTER pAd,
4983 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4984 IN PUCHAR pAddr,
4985 IN USHORT Alg);
4987 VOID EnqueuePsPoll(
4988 IN PRTMP_ADAPTER pAd);
4990 VOID EnqueueBeaconFrame(
4991 IN PRTMP_ADAPTER pAd);
4993 VOID MlmeJoinReqAction(
4994 IN PRTMP_ADAPTER pAd,
4995 IN MLME_QUEUE_ELEM *Elem);
4997 VOID MlmeScanReqAction(
4998 IN PRTMP_ADAPTER pAd,
4999 IN MLME_QUEUE_ELEM *Elem);
5001 VOID MlmeStartReqAction(
5002 IN PRTMP_ADAPTER pAd,
5003 IN MLME_QUEUE_ELEM *Elem);
5005 VOID ScanTimeoutAction(
5006 IN PRTMP_ADAPTER pAd,
5007 IN MLME_QUEUE_ELEM *Elem);
5009 VOID BeaconTimeoutAtJoinAction(
5010 IN PRTMP_ADAPTER pAd,
5011 IN MLME_QUEUE_ELEM *Elem);
5013 VOID PeerBeaconAtScanAction(
5014 IN PRTMP_ADAPTER pAd,
5015 IN MLME_QUEUE_ELEM *Elem);
5017 VOID PeerBeaconAtJoinAction(
5018 IN PRTMP_ADAPTER pAd,
5019 IN MLME_QUEUE_ELEM *Elem);
5021 VOID PeerBeacon(
5022 IN PRTMP_ADAPTER pAd,
5023 IN MLME_QUEUE_ELEM *Elem);
5025 VOID PeerProbeReqAction(
5026 IN PRTMP_ADAPTER pAd,
5027 IN MLME_QUEUE_ELEM *Elem);
5029 VOID ScanNextChannel(
5030 IN PRTMP_ADAPTER pAd);
5032 ULONG MakeIbssBeacon(
5033 IN PRTMP_ADAPTER pAd);
5035 VOID CCXAdjacentAPReport(
5036 IN PRTMP_ADAPTER pAd);
5038 BOOLEAN MlmeScanReqSanity(
5039 IN PRTMP_ADAPTER pAd,
5040 IN VOID *Msg,
5041 IN ULONG MsgLen,
5042 OUT UCHAR *BssType,
5043 OUT CHAR ssid[],
5044 OUT UCHAR *SsidLen,
5045 OUT UCHAR *ScanType);
5047 BOOLEAN PeerBeaconAndProbeRspSanity(
5048 IN PRTMP_ADAPTER pAd,
5049 IN VOID *Msg,
5050 IN ULONG MsgLen,
5051 IN UCHAR MsgChannel,
5052 OUT PUCHAR pAddr2,
5053 OUT PUCHAR pBssid,
5054 OUT CHAR Ssid[],
5055 OUT UCHAR *pSsidLen,
5056 OUT UCHAR *pBssType,
5057 OUT USHORT *pBeaconPeriod,
5058 OUT UCHAR *pChannel,
5059 OUT UCHAR *pNewChannel,
5060 OUT LARGE_INTEGER *pTimestamp,
5061 OUT CF_PARM *pCfParm,
5062 OUT USHORT *pAtimWin,
5063 OUT USHORT *pCapabilityInfo,
5064 OUT UCHAR *pErp,
5065 OUT UCHAR *pDtimCount,
5066 OUT UCHAR *pDtimPeriod,
5067 OUT UCHAR *pBcastFlag,
5068 OUT UCHAR *pMessageToMe,
5069 OUT UCHAR SupRate[],
5070 OUT UCHAR *pSupRateLen,
5071 OUT UCHAR ExtRate[],
5072 OUT UCHAR *pExtRateLen,
5073 OUT UCHAR *pCkipFlag,
5074 OUT UCHAR *pAironetCellPowerLimit,
5075 OUT PEDCA_PARM pEdcaParm,
5076 OUT PQBSS_LOAD_PARM pQbssLoad,
5077 OUT PQOS_CAPABILITY_PARM pQosCapability,
5078 OUT ULONG *pRalinkIe,
5079 OUT UCHAR *pHtCapabilityLen,
5080 #ifdef CONFIG_STA_SUPPORT
5081 OUT UCHAR *pPreNHtCapabilityLen,
5082 #endif // CONFIG_STA_SUPPORT //
5083 OUT HT_CAPABILITY_IE *pHtCapability,
5084 OUT UCHAR *AddHtInfoLen,
5085 OUT ADD_HT_INFO_IE *AddHtInfo,
5086 OUT UCHAR *NewExtChannel,
5087 OUT USHORT *LengthVIE,
5088 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5090 BOOLEAN PeerAddBAReqActionSanity(
5091 IN PRTMP_ADAPTER pAd,
5092 IN VOID *pMsg,
5093 IN ULONG MsgLen,
5094 OUT PUCHAR pAddr2);
5096 BOOLEAN PeerAddBARspActionSanity(
5097 IN PRTMP_ADAPTER pAd,
5098 IN VOID *pMsg,
5099 IN ULONG MsgLen);
5101 BOOLEAN PeerDelBAActionSanity(
5102 IN PRTMP_ADAPTER pAd,
5103 IN UCHAR Wcid,
5104 IN VOID *pMsg,
5105 IN ULONG MsgLen);
5107 BOOLEAN MlmeAssocReqSanity(
5108 IN PRTMP_ADAPTER pAd,
5109 IN VOID *Msg,
5110 IN ULONG MsgLen,
5111 OUT PUCHAR pApAddr,
5112 OUT USHORT *CapabilityInfo,
5113 OUT ULONG *Timeout,
5114 OUT USHORT *ListenIntv);
5116 BOOLEAN MlmeAuthReqSanity(
5117 IN PRTMP_ADAPTER pAd,
5118 IN VOID *Msg,
5119 IN ULONG MsgLen,
5120 OUT PUCHAR pAddr,
5121 OUT ULONG *Timeout,
5122 OUT USHORT *Alg);
5124 BOOLEAN MlmeStartReqSanity(
5125 IN PRTMP_ADAPTER pAd,
5126 IN VOID *Msg,
5127 IN ULONG MsgLen,
5128 OUT CHAR Ssid[],
5129 OUT UCHAR *Ssidlen);
5131 BOOLEAN PeerAuthSanity(
5132 IN PRTMP_ADAPTER pAd,
5133 IN VOID *Msg,
5134 IN ULONG MsgLen,
5135 OUT PUCHAR pAddr,
5136 OUT USHORT *Alg,
5137 OUT USHORT *Seq,
5138 OUT USHORT *Status,
5139 OUT CHAR ChlgText[]);
5141 BOOLEAN PeerAssocRspSanity(
5142 IN PRTMP_ADAPTER pAd,
5143 IN VOID *pMsg,
5144 IN ULONG MsgLen,
5145 OUT PUCHAR pAddr2,
5146 OUT USHORT *pCapabilityInfo,
5147 OUT USHORT *pStatus,
5148 OUT USHORT *pAid,
5149 OUT UCHAR SupRate[],
5150 OUT UCHAR *pSupRateLen,
5151 OUT UCHAR ExtRate[],
5152 OUT UCHAR *pExtRateLen,
5153 OUT HT_CAPABILITY_IE *pHtCapability,
5154 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5155 OUT UCHAR *pHtCapabilityLen,
5156 OUT UCHAR *pAddHtInfoLen,
5157 OUT UCHAR *pNewExtChannelOffset,
5158 OUT PEDCA_PARM pEdcaParm,
5159 OUT UCHAR *pCkipFlag);
5161 BOOLEAN PeerDisassocSanity(
5162 IN PRTMP_ADAPTER pAd,
5163 IN VOID *Msg,
5164 IN ULONG MsgLen,
5165 OUT PUCHAR pAddr2,
5166 OUT USHORT *Reason);
5168 BOOLEAN PeerWpaMessageSanity(
5169 IN PRTMP_ADAPTER pAd,
5170 IN PEAPOL_PACKET pMsg,
5171 IN ULONG MsgLen,
5172 IN UCHAR MsgType,
5173 IN MAC_TABLE_ENTRY *pEntry);
5175 BOOLEAN PeerDeauthSanity(
5176 IN PRTMP_ADAPTER pAd,
5177 IN VOID *Msg,
5178 IN ULONG MsgLen,
5179 OUT PUCHAR pAddr2,
5180 OUT USHORT *Reason);
5182 BOOLEAN PeerProbeReqSanity(
5183 IN PRTMP_ADAPTER pAd,
5184 IN VOID *Msg,
5185 IN ULONG MsgLen,
5186 OUT PUCHAR pAddr2,
5187 OUT CHAR Ssid[],
5188 OUT UCHAR *pSsidLen);
5190 BOOLEAN GetTimBit(
5191 IN CHAR *Ptr,
5192 IN USHORT Aid,
5193 OUT UCHAR *TimLen,
5194 OUT UCHAR *BcastFlag,
5195 OUT UCHAR *DtimCount,
5196 OUT UCHAR *DtimPeriod,
5197 OUT UCHAR *MessageToMe);
5199 UCHAR ChannelSanity(
5200 IN PRTMP_ADAPTER pAd,
5201 IN UCHAR channel);
5203 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5204 IN PBSS_ENTRY pBss);
5206 BOOLEAN MlmeDelBAReqSanity(
5207 IN PRTMP_ADAPTER pAd,
5208 IN VOID *Msg,
5209 IN ULONG MsgLen);
5211 BOOLEAN MlmeAddBAReqSanity(
5212 IN PRTMP_ADAPTER pAd,
5213 IN VOID *Msg,
5214 IN ULONG MsgLen,
5215 OUT PUCHAR pAddr2);
5217 ULONG MakeOutgoingFrame(
5218 OUT CHAR *Buffer,
5219 OUT ULONG *Length, ...);
5221 VOID LfsrInit(
5222 IN PRTMP_ADAPTER pAd,
5223 IN ULONG Seed);
5225 UCHAR RandomByte(
5226 IN PRTMP_ADAPTER pAd);
5228 VOID AsicUpdateAutoFallBackTable(
5229 IN PRTMP_ADAPTER pAd,
5230 IN PUCHAR pTxRate);
5232 VOID MlmePeriodicExec(
5233 IN PVOID SystemSpecific1,
5234 IN PVOID FunctionContext,
5235 IN PVOID SystemSpecific2,
5236 IN PVOID SystemSpecific3);
5238 VOID LinkDownExec(
5239 IN PVOID SystemSpecific1,
5240 IN PVOID FunctionContext,
5241 IN PVOID SystemSpecific2,
5242 IN PVOID SystemSpecific3);
5244 VOID LinkUpExec(
5245 IN PVOID SystemSpecific1,
5246 IN PVOID FunctionContext,
5247 IN PVOID SystemSpecific2,
5248 IN PVOID SystemSpecific3);
5250 VOID STAMlmePeriodicExec(
5251 PRTMP_ADAPTER pAd);
5253 VOID MlmeAutoScan(
5254 IN PRTMP_ADAPTER pAd);
5256 VOID MlmeAutoReconnectLastSSID(
5257 IN PRTMP_ADAPTER pAd);
5259 BOOLEAN MlmeValidateSSID(
5260 IN PUCHAR pSsid,
5261 IN UCHAR SsidLen);
5263 VOID MlmeCheckForRoaming(
5264 IN PRTMP_ADAPTER pAd,
5265 IN ULONG Now32);
5267 VOID MlmeCheckForFastRoaming(
5268 IN PRTMP_ADAPTER pAd,
5269 IN ULONG Now);
5271 VOID MlmeDynamicTxRateSwitching(
5272 IN PRTMP_ADAPTER pAd);
5274 VOID MlmeSetTxRate(
5275 IN PRTMP_ADAPTER pAd,
5276 IN PMAC_TABLE_ENTRY pEntry,
5277 IN PRTMP_TX_RATE_SWITCH pTxRate);
5279 VOID MlmeSelectTxRateTable(
5280 IN PRTMP_ADAPTER pAd,
5281 IN PMAC_TABLE_ENTRY pEntry,
5282 IN PUCHAR *ppTable,
5283 IN PUCHAR pTableSize,
5284 IN PUCHAR pInitTxRateIdx);
5286 VOID MlmeCalculateChannelQuality(
5287 IN PRTMP_ADAPTER pAd,
5288 IN ULONG Now);
5290 VOID MlmeCheckPsmChange(
5291 IN PRTMP_ADAPTER pAd,
5292 IN ULONG Now32);
5294 VOID MlmeSetPsmBit(
5295 IN PRTMP_ADAPTER pAd,
5296 IN USHORT psm);
5298 VOID MlmeSetTxPreamble(
5299 IN PRTMP_ADAPTER pAd,
5300 IN USHORT TxPreamble);
5302 VOID UpdateBasicRateBitmap(
5303 IN PRTMP_ADAPTER pAd);
5305 VOID MlmeUpdateTxRates(
5306 IN PRTMP_ADAPTER pAd,
5307 IN BOOLEAN bLinkUp,
5308 IN UCHAR apidx);
5310 #ifdef DOT11_N_SUPPORT
5311 VOID MlmeUpdateHtTxRates(
5312 IN PRTMP_ADAPTER pAd,
5313 IN UCHAR apidx);
5314 #endif // DOT11_N_SUPPORT //
5316 VOID RTMPCheckRates(
5317 IN PRTMP_ADAPTER pAd,
5318 IN OUT UCHAR SupRate[],
5319 IN OUT UCHAR *SupRateLen);
5321 #ifdef CONFIG_STA_SUPPORT
5322 BOOLEAN RTMPCheckChannel(
5323 IN PRTMP_ADAPTER pAd,
5324 IN UCHAR CentralChannel,
5325 IN UCHAR Channel);
5326 #endif // CONFIG_STA_SUPPORT //
5328 BOOLEAN RTMPCheckHt(
5329 IN PRTMP_ADAPTER pAd,
5330 IN UCHAR Wcid,
5331 IN OUT HT_CAPABILITY_IE *pHtCapability,
5332 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5334 VOID StaQuickResponeForRateUpExec(
5335 IN PVOID SystemSpecific1,
5336 IN PVOID FunctionContext,
5337 IN PVOID SystemSpecific2,
5338 IN PVOID SystemSpecific3);
5340 VOID AsicBbpTuning1(
5341 IN PRTMP_ADAPTER pAd);
5343 VOID AsicBbpTuning2(
5344 IN PRTMP_ADAPTER pAd);
5346 VOID RTMPUpdateMlmeRate(
5347 IN PRTMP_ADAPTER pAd);
5349 CHAR RTMPMaxRssi(
5350 IN PRTMP_ADAPTER pAd,
5351 IN CHAR Rssi0,
5352 IN CHAR Rssi1,
5353 IN CHAR Rssi2);
5355 VOID AsicEvaluateRxAnt(
5356 IN PRTMP_ADAPTER pAd);
5358 VOID AsicRxAntEvalTimeout(
5359 IN PVOID SystemSpecific1,
5360 IN PVOID FunctionContext,
5361 IN PVOID SystemSpecific2,
5362 IN PVOID SystemSpecific3);
5364 VOID APSDPeriodicExec(
5365 IN PVOID SystemSpecific1,
5366 IN PVOID FunctionContext,
5367 IN PVOID SystemSpecific2,
5368 IN PVOID SystemSpecific3);
5370 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5371 IN PRTMP_ADAPTER pAd,
5372 IN PMAC_TABLE_ENTRY pEntry);
5374 UCHAR RTMPStaFixedTxMode(
5375 IN PRTMP_ADAPTER pAd,
5376 IN PMAC_TABLE_ENTRY pEntry);
5378 VOID RTMPUpdateLegacyTxSetting(
5379 UCHAR fixed_tx_mode,
5380 PMAC_TABLE_ENTRY pEntry);
5382 BOOLEAN RTMPAutoRateSwitchCheck(
5383 IN PRTMP_ADAPTER pAd);
5385 NDIS_STATUS MlmeInit(
5386 IN PRTMP_ADAPTER pAd);
5388 VOID MlmeHandler(
5389 IN PRTMP_ADAPTER pAd);
5391 VOID MlmeHalt(
5392 IN PRTMP_ADAPTER pAd);
5394 VOID MlmeResetRalinkCounters(
5395 IN PRTMP_ADAPTER pAd);
5397 VOID BuildChannelList(
5398 IN PRTMP_ADAPTER pAd);
5400 UCHAR FirstChannel(
5401 IN PRTMP_ADAPTER pAd);
5403 UCHAR NextChannel(
5404 IN PRTMP_ADAPTER pAd,
5405 IN UCHAR channel);
5407 VOID ChangeToCellPowerLimit(
5408 IN PRTMP_ADAPTER pAd,
5409 IN UCHAR AironetCellPowerLimit);
5411 VOID RaiseClock(
5412 IN PRTMP_ADAPTER pAd,
5413 IN UINT32 *x);
5415 VOID LowerClock(
5416 IN PRTMP_ADAPTER pAd,
5417 IN UINT32 *x);
5419 USHORT ShiftInBits(
5420 IN PRTMP_ADAPTER pAd);
5422 VOID ShiftOutBits(
5423 IN PRTMP_ADAPTER pAd,
5424 IN USHORT data,
5425 IN USHORT count);
5427 VOID EEpromCleanup(
5428 IN PRTMP_ADAPTER pAd);
5430 VOID EWDS(
5431 IN PRTMP_ADAPTER pAd);
5433 VOID EWEN(
5434 IN PRTMP_ADAPTER pAd);
5436 USHORT RTMP_EEPROM_READ16(
5437 IN PRTMP_ADAPTER pAd,
5438 IN USHORT Offset);
5440 VOID RTMP_EEPROM_WRITE16(
5441 IN PRTMP_ADAPTER pAd,
5442 IN USHORT Offset,
5443 IN USHORT Data);
5446 // Prototypes of function definition in rtmp_tkip.c
5448 VOID RTMPInitTkipEngine(
5449 IN PRTMP_ADAPTER pAd,
5450 IN PUCHAR pTKey,
5451 IN UCHAR KeyId,
5452 IN PUCHAR pTA,
5453 IN PUCHAR pMICKey,
5454 IN PUCHAR pTSC,
5455 OUT PULONG pIV16,
5456 OUT PULONG pIV32);
5458 VOID RTMPInitMICEngine(
5459 IN PRTMP_ADAPTER pAd,
5460 IN PUCHAR pKey,
5461 IN PUCHAR pDA,
5462 IN PUCHAR pSA,
5463 IN UCHAR UserPriority,
5464 IN PUCHAR pMICKey);
5466 BOOLEAN RTMPTkipCompareMICValue(
5467 IN PRTMP_ADAPTER pAd,
5468 IN PUCHAR pSrc,
5469 IN PUCHAR pDA,
5470 IN PUCHAR pSA,
5471 IN PUCHAR pMICKey,
5472 IN UCHAR UserPriority,
5473 IN UINT Len);
5475 VOID RTMPCalculateMICValue(
5476 IN PRTMP_ADAPTER pAd,
5477 IN PNDIS_PACKET pPacket,
5478 IN PUCHAR pEncap,
5479 IN PCIPHER_KEY pKey,
5480 IN UCHAR apidx);
5482 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5483 IN PRTMP_ADAPTER pAd,
5484 IN PUCHAR pLLC,
5485 IN PUCHAR pSrc,
5486 IN PUCHAR pDA,
5487 IN PUCHAR pSA,
5488 IN PUCHAR pMICKey,
5489 IN UINT Len);
5491 VOID RTMPTkipAppendByte(
5492 IN PTKIP_KEY_INFO pTkip,
5493 IN UCHAR uChar);
5495 VOID RTMPTkipAppend(
5496 IN PTKIP_KEY_INFO pTkip,
5497 IN PUCHAR pSrc,
5498 IN UINT nBytes);
5500 VOID RTMPTkipGetMIC(
5501 IN PTKIP_KEY_INFO pTkip);
5503 BOOLEAN RTMPSoftDecryptTKIP(
5504 IN PRTMP_ADAPTER pAd,
5505 IN PUCHAR pData,
5506 IN ULONG DataByteCnt,
5507 IN UCHAR UserPriority,
5508 IN PCIPHER_KEY pWpaKey);
5510 BOOLEAN RTMPSoftDecryptAES(
5511 IN PRTMP_ADAPTER pAd,
5512 IN PUCHAR pData,
5513 IN ULONG DataByteCnt,
5514 IN PCIPHER_KEY pWpaKey);
5517 // Prototypes of function definition in cmm_info.c
5519 NDIS_STATUS RTMPWPARemoveKeyProc(
5520 IN PRTMP_ADAPTER pAd,
5521 IN PVOID pBuf);
5523 VOID RTMPWPARemoveAllKeys(
5524 IN PRTMP_ADAPTER pAd);
5526 BOOLEAN RTMPCheckStrPrintAble(
5527 IN CHAR *pInPutStr,
5528 IN UCHAR strLen);
5530 VOID RTMPSetPhyMode(
5531 IN PRTMP_ADAPTER pAd,
5532 IN ULONG phymode);
5534 VOID RTMPUpdateHTIE(
5535 IN RT_HT_CAPABILITY *pRtHt,
5536 IN UCHAR *pMcsSet,
5537 OUT HT_CAPABILITY_IE *pHtCapability,
5538 OUT ADD_HT_INFO_IE *pAddHtInfo);
5540 VOID RTMPAddWcidAttributeEntry(
5541 IN PRTMP_ADAPTER pAd,
5542 IN UCHAR BssIdx,
5543 IN UCHAR KeyIdx,
5544 IN UCHAR CipherAlg,
5545 IN MAC_TABLE_ENTRY *pEntry);
5547 CHAR *GetEncryptType(
5548 CHAR enc);
5550 CHAR *GetAuthMode(
5551 CHAR auth);
5553 VOID RTMPIoctlGetSiteSurvey(
5554 IN PRTMP_ADAPTER pAdapter,
5555 IN struct iwreq *wrq);
5557 VOID RTMPIoctlGetMacTable(
5558 IN PRTMP_ADAPTER pAd,
5559 IN struct iwreq *wrq);
5561 VOID RTMPIndicateWPA2Status(
5562 IN PRTMP_ADAPTER pAdapter);
5564 VOID RTMPOPModeSwitching(
5565 IN PRTMP_ADAPTER pAd);
5567 #ifdef CONFIG_STA_SUPPORT
5568 VOID RTMPAddBSSIDCipher(
5569 IN PRTMP_ADAPTER pAd,
5570 IN UCHAR Aid,
5571 IN PNDIS_802_11_KEY pKey,
5572 IN UCHAR CipherAlg);
5573 #endif // CONFIG_STA_SUPPORT //
5575 #ifdef DOT11_N_SUPPORT
5576 VOID RTMPSetHT(
5577 IN PRTMP_ADAPTER pAd,
5578 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5580 VOID RTMPSetIndividualHT(
5581 IN PRTMP_ADAPTER pAd,
5582 IN UCHAR apidx);
5583 #endif // DOT11_N_SUPPORT //
5585 VOID RTMPSendWirelessEvent(
5586 IN PRTMP_ADAPTER pAd,
5587 IN USHORT Event_flag,
5588 IN PUCHAR pAddr,
5589 IN UCHAR BssIdx,
5590 IN CHAR Rssi);
5592 VOID NICUpdateCntlCounters(
5593 IN PRTMP_ADAPTER pAd,
5594 IN PHEADER_802_11 pHeader,
5595 IN UCHAR SubType,
5596 IN PRXWI_STRUC pRxWI);
5598 // prototype in wpa.c
5600 BOOLEAN WpaMsgTypeSubst(
5601 IN UCHAR EAPType,
5602 OUT INT *MsgType);
5604 VOID WpaPskStateMachineInit(
5605 IN PRTMP_ADAPTER pAd,
5606 IN STATE_MACHINE *S,
5607 OUT STATE_MACHINE_FUNC Trans[]);
5609 VOID WpaEAPOLKeyAction(
5610 IN PRTMP_ADAPTER pAd,
5611 IN MLME_QUEUE_ELEM *Elem);
5613 VOID WpaPairMsg1Action(
5614 IN PRTMP_ADAPTER pAd,
5615 IN MLME_QUEUE_ELEM *Elem);
5617 VOID WpaPairMsg3Action(
5618 IN PRTMP_ADAPTER pAd,
5619 IN MLME_QUEUE_ELEM *Elem);
5621 VOID WpaGroupMsg1Action(
5622 IN PRTMP_ADAPTER pAd,
5623 IN MLME_QUEUE_ELEM *Elem);
5625 VOID WpaMacHeaderInit(
5626 IN PRTMP_ADAPTER pAd,
5627 IN OUT PHEADER_802_11 pHdr80211,
5628 IN UCHAR wep,
5629 IN PUCHAR pAddr1);
5631 VOID Wpa2PairMsg1Action(
5632 IN PRTMP_ADAPTER pAd,
5633 IN MLME_QUEUE_ELEM *Elem);
5635 VOID Wpa2PairMsg3Action(
5636 IN PRTMP_ADAPTER pAd,
5637 IN MLME_QUEUE_ELEM *Elem);
5639 BOOLEAN ParseKeyData(
5640 IN PRTMP_ADAPTER pAd,
5641 IN PUCHAR pKeyData,
5642 IN UCHAR KeyDataLen,
5643 IN UCHAR bPairewise);
5645 VOID RTMPToWirelessSta(
5646 IN PRTMP_ADAPTER pAd,
5647 IN PUCHAR pHeader802_3,
5648 IN UINT HdrLen,
5649 IN PUCHAR pData,
5650 IN UINT DataLen,
5651 IN BOOLEAN is4wayFrame);
5653 VOID HMAC_SHA1(
5654 IN UCHAR *text,
5655 IN UINT text_len,
5656 IN UCHAR *key,
5657 IN UINT key_len,
5658 IN UCHAR *digest);
5660 VOID PRF(
5661 IN UCHAR *key,
5662 IN INT key_len,
5663 IN UCHAR *prefix,
5664 IN INT prefix_len,
5665 IN UCHAR *data,
5666 IN INT data_len,
5667 OUT UCHAR *output,
5668 IN INT len);
5670 VOID CCKMPRF(
5671 IN UCHAR *key,
5672 IN INT key_len,
5673 IN UCHAR *data,
5674 IN INT data_len,
5675 OUT UCHAR *output,
5676 IN INT len);
5678 VOID WpaCountPTK(
5679 IN PRTMP_ADAPTER pAd,
5680 IN UCHAR *PMK,
5681 IN UCHAR *ANonce,
5682 IN UCHAR *AA,
5683 IN UCHAR *SNonce,
5684 IN UCHAR *SA,
5685 OUT UCHAR *output,
5686 IN UINT len);
5688 VOID GenRandom(
5689 IN PRTMP_ADAPTER pAd,
5690 IN UCHAR *macAddr,
5691 OUT UCHAR *random);
5694 // prototype in aironet.c
5696 VOID AironetStateMachineInit(
5697 IN PRTMP_ADAPTER pAd,
5698 IN STATE_MACHINE *S,
5699 OUT STATE_MACHINE_FUNC Trans[]);
5701 VOID AironetMsgAction(
5702 IN PRTMP_ADAPTER pAd,
5703 IN MLME_QUEUE_ELEM *Elem);
5705 VOID AironetRequestAction(
5706 IN PRTMP_ADAPTER pAd,
5707 IN MLME_QUEUE_ELEM *Elem);
5709 VOID ChannelLoadRequestAction(
5710 IN PRTMP_ADAPTER pAd,
5711 IN UCHAR Index);
5713 VOID NoiseHistRequestAction(
5714 IN PRTMP_ADAPTER pAd,
5715 IN UCHAR Index);
5717 VOID BeaconRequestAction(
5718 IN PRTMP_ADAPTER pAd,
5719 IN UCHAR Index);
5721 VOID AironetReportAction(
5722 IN PRTMP_ADAPTER pAd,
5723 IN MLME_QUEUE_ELEM *Elem);
5725 VOID ChannelLoadReportAction(
5726 IN PRTMP_ADAPTER pAd,
5727 IN UCHAR Index);
5729 VOID NoiseHistReportAction(
5730 IN PRTMP_ADAPTER pAd,
5731 IN UCHAR Index);
5733 VOID AironetFinalReportAction(
5734 IN PRTMP_ADAPTER pAd);
5736 VOID BeaconReportAction(
5737 IN PRTMP_ADAPTER pAd,
5738 IN UCHAR Index);
5740 VOID AironetAddBeaconReport(
5741 IN PRTMP_ADAPTER pAd,
5742 IN ULONG Index,
5743 IN PMLME_QUEUE_ELEM pElem);
5745 VOID AironetCreateBeaconReportFromBssTable(
5746 IN PRTMP_ADAPTER pAd);
5748 VOID DBGPRINT_TX_RING(
5749 IN PRTMP_ADAPTER pAd,
5750 IN UCHAR QueIdx);
5752 VOID DBGPRINT_RX_RING(
5753 IN PRTMP_ADAPTER pAd);
5755 CHAR ConvertToRssi(
5756 IN PRTMP_ADAPTER pAd,
5757 IN CHAR Rssi,
5758 IN UCHAR RssiNumber);
5761 #ifdef DOT11N_DRAFT3
5762 VOID BuildEffectedChannelList(
5763 IN PRTMP_ADAPTER pAd);
5764 #endif // DOT11N_DRAFT3 //
5767 VOID APAsicEvaluateRxAnt(
5768 IN PRTMP_ADAPTER pAd);
5771 VOID APAsicRxAntEvalTimeout(
5772 IN PRTMP_ADAPTER pAd);
5775 // function prototype in cmm_wpa.c
5777 BOOLEAN RTMPCheckWPAframe(
5778 IN PRTMP_ADAPTER pAd,
5779 IN PMAC_TABLE_ENTRY pEntry,
5780 IN PUCHAR pData,
5781 IN ULONG DataByteCount,
5782 IN UCHAR FromWhichBSSID);
5784 VOID AES_GTK_KEY_UNWRAP(
5785 IN UCHAR *key,
5786 OUT UCHAR *plaintext,
5787 IN UCHAR c_len,
5788 IN UCHAR *ciphertext);
5790 BOOLEAN RTMPCheckRSNIE(
5791 IN PRTMP_ADAPTER pAd,
5792 IN PUCHAR pData,
5793 IN UCHAR DataLen,
5794 IN MAC_TABLE_ENTRY *pEntry,
5795 OUT UCHAR *Offset);
5797 BOOLEAN RTMPParseEapolKeyData(
5798 IN PRTMP_ADAPTER pAd,
5799 IN PUCHAR pKeyData,
5800 IN UCHAR KeyDataLen,
5801 IN UCHAR GroupKeyIndex,
5802 IN UCHAR MsgType,
5803 IN BOOLEAN bWPA2,
5804 IN MAC_TABLE_ENTRY *pEntry);
5806 VOID ConstructEapolMsg(
5807 IN PRTMP_ADAPTER pAd,
5808 IN UCHAR PeerAuthMode,
5809 IN UCHAR PeerWepStatus,
5810 IN UCHAR MyGroupKeyWepStatus,
5811 IN UCHAR MsgType,
5812 IN UCHAR DefaultKeyIdx,
5813 IN UCHAR *ReplayCounter,
5814 IN UCHAR *KeyNonce,
5815 IN UCHAR *TxRSC,
5816 IN UCHAR *PTK,
5817 IN UCHAR *GTK,
5818 IN UCHAR *RSNIE,
5819 IN UCHAR RSNIE_Len,
5820 OUT PEAPOL_PACKET pMsg);
5822 VOID CalculateMIC(
5823 IN PRTMP_ADAPTER pAd,
5824 IN UCHAR PeerWepStatus,
5825 IN UCHAR *PTK,
5826 OUT PEAPOL_PACKET pMsg);
5828 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5829 IN PRTMP_ADAPTER pAd,
5830 IN RX_BLK *pRxBlk,
5831 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5832 IN PCIPHER_KEY pShard_key);
5834 VOID ConstructEapolKeyData(
5835 IN PRTMP_ADAPTER pAd,
5836 IN UCHAR PeerAuthMode,
5837 IN UCHAR PeerWepStatus,
5838 IN UCHAR GroupKeyWepStatus,
5839 IN UCHAR MsgType,
5840 IN UCHAR DefaultKeyIdx,
5841 IN BOOLEAN bWPA2Capable,
5842 IN UCHAR *PTK,
5843 IN UCHAR *GTK,
5844 IN UCHAR *RSNIE,
5845 IN UCHAR RSNIE_LEN,
5846 OUT PEAPOL_PACKET pMsg);
5848 VOID RTMPMakeRSNIE(
5849 IN PRTMP_ADAPTER pAd,
5850 IN UINT AuthMode,
5851 IN UINT WepStatus,
5852 IN UCHAR apidx);
5855 // function prototype in ap_wpa.c
5858 BOOLEAN APWpaMsgTypeSubst(
5859 IN UCHAR EAPType,
5860 OUT INT *MsgType) ;
5862 MAC_TABLE_ENTRY *PACInquiry(
5863 IN PRTMP_ADAPTER pAd,
5864 IN ULONG Wcid);
5866 BOOLEAN RTMPCheckMcast(
5867 IN PRTMP_ADAPTER pAd,
5868 IN PEID_STRUCT eid_ptr,
5869 IN MAC_TABLE_ENTRY *pEntry);
5871 BOOLEAN RTMPCheckUcast(
5872 IN PRTMP_ADAPTER pAd,
5873 IN PEID_STRUCT eid_ptr,
5874 IN MAC_TABLE_ENTRY *pEntry);
5876 BOOLEAN RTMPCheckAUTH(
5877 IN PRTMP_ADAPTER pAd,
5878 IN PEID_STRUCT eid_ptr,
5879 IN MAC_TABLE_ENTRY *pEntry);
5881 VOID WPAStart4WayHS(
5882 IN PRTMP_ADAPTER pAd,
5883 IN MAC_TABLE_ENTRY *pEntry,
5884 IN ULONG TimeInterval);
5886 VOID WPAStart2WayGroupHS(
5887 IN PRTMP_ADAPTER pAd,
5888 IN MAC_TABLE_ENTRY *pEntry);
5890 VOID APWpaEAPPacketAction(
5891 IN PRTMP_ADAPTER pAd,
5892 IN MLME_QUEUE_ELEM *Elem);
5894 VOID APWpaEAPOLStartAction(
5895 IN PRTMP_ADAPTER pAd,
5896 IN MLME_QUEUE_ELEM *Elem);
5898 VOID APWpaEAPOLLogoffAction(
5899 IN PRTMP_ADAPTER pAd,
5900 IN MLME_QUEUE_ELEM *Elem);
5902 VOID APWpaEAPOLKeyAction(
5903 IN PRTMP_ADAPTER pAd,
5904 IN MLME_QUEUE_ELEM *Elem);
5906 VOID APWpaEAPOLASFAlertAction(
5907 IN PRTMP_ADAPTER pAd,
5908 IN MLME_QUEUE_ELEM *Elem);
5910 VOID HandleCounterMeasure(
5911 IN PRTMP_ADAPTER pAd,
5912 IN MAC_TABLE_ENTRY *pEntry);
5914 VOID PeerPairMsg2Action(
5915 IN PRTMP_ADAPTER pAd,
5916 IN MAC_TABLE_ENTRY *pEntry,
5917 IN MLME_QUEUE_ELEM *Elem);
5919 VOID PeerPairMsg4Action(
5920 IN PRTMP_ADAPTER pAd,
5921 IN MAC_TABLE_ENTRY *pEntry,
5922 IN MLME_QUEUE_ELEM *Elem);
5924 VOID CMTimerExec(
5925 IN PVOID SystemSpecific1,
5926 IN PVOID FunctionContext,
5927 IN PVOID SystemSpecific2,
5928 IN PVOID SystemSpecific3);
5930 VOID WPARetryExec(
5931 IN PVOID SystemSpecific1,
5932 IN PVOID FunctionContext,
5933 IN PVOID SystemSpecific2,
5934 IN PVOID SystemSpecific3);
5936 VOID EnqueueStartForPSKExec(
5937 IN PVOID SystemSpecific1,
5938 IN PVOID FunctionContext,
5939 IN PVOID SystemSpecific2,
5940 IN PVOID SystemSpecific3);
5942 VOID RTMPHandleSTAKey(
5943 IN PRTMP_ADAPTER pAdapter,
5944 IN MAC_TABLE_ENTRY *pEntry,
5945 IN MLME_QUEUE_ELEM *Elem);
5947 VOID PeerGroupMsg2Action(
5948 IN PRTMP_ADAPTER pAd,
5949 IN PMAC_TABLE_ENTRY pEntry,
5950 IN VOID *Msg,
5951 IN UINT MsgLen);
5953 VOID PairDisAssocAction(
5954 IN PRTMP_ADAPTER pAd,
5955 IN PMAC_TABLE_ENTRY pEntry,
5956 IN USHORT Reason);
5958 VOID MlmeDeAuthAction(
5959 IN PRTMP_ADAPTER pAd,
5960 IN PMAC_TABLE_ENTRY pEntry,
5961 IN USHORT Reason);
5963 VOID GREKEYPeriodicExec(
5964 IN PVOID SystemSpecific1,
5965 IN PVOID FunctionContext,
5966 IN PVOID SystemSpecific2,
5967 IN PVOID SystemSpecific3);
5969 VOID CountGTK(
5970 IN UCHAR *PMK,
5971 IN UCHAR *GNonce,
5972 IN UCHAR *AA,
5973 OUT UCHAR *output,
5974 IN UINT len);
5976 VOID GetSmall(
5977 IN PVOID pSrc1,
5978 IN PVOID pSrc2,
5979 OUT PUCHAR out,
5980 IN ULONG Length);
5982 VOID GetLarge(
5983 IN PVOID pSrc1,
5984 IN PVOID pSrc2,
5985 OUT PUCHAR out,
5986 IN ULONG Length);
5988 VOID APGenRandom(
5989 IN PRTMP_ADAPTER pAd,
5990 OUT UCHAR *random);
5992 VOID AES_GTK_KEY_WRAP(
5993 IN UCHAR *key,
5994 IN UCHAR *plaintext,
5995 IN UCHAR p_len,
5996 OUT UCHAR *ciphertext);
5998 VOID WpaSend(
5999 IN PRTMP_ADAPTER pAdapter,
6000 IN PUCHAR pPacket,
6001 IN ULONG Len);
6003 VOID APToWirelessSta(
6004 IN PRTMP_ADAPTER pAd,
6005 IN MAC_TABLE_ENTRY *pEntry,
6006 IN PUCHAR pHeader802_3,
6007 IN UINT HdrLen,
6008 IN PUCHAR pData,
6009 IN UINT DataLen,
6010 IN BOOLEAN bClearFrame);
6012 VOID RTMPAddPMKIDCache(
6013 IN PRTMP_ADAPTER pAd,
6014 IN INT apidx,
6015 IN PUCHAR pAddr,
6016 IN UCHAR *PMKID,
6017 IN UCHAR *PMK);
6019 INT RTMPSearchPMKIDCache(
6020 IN PRTMP_ADAPTER pAd,
6021 IN INT apidx,
6022 IN PUCHAR pAddr);
6024 VOID RTMPDeletePMKIDCache(
6025 IN PRTMP_ADAPTER pAd,
6026 IN INT apidx,
6027 IN INT idx);
6029 VOID RTMPMaintainPMKIDCache(
6030 IN PRTMP_ADAPTER pAd);
6032 VOID RTMPSendTriggerFrame(
6033 IN PRTMP_ADAPTER pAd,
6034 IN PVOID pBuffer,
6035 IN ULONG Length,
6036 IN UCHAR TxRate,
6037 IN BOOLEAN bQosNull);
6040 /* timeout -- ms */
6041 VOID RTMP_SetPeriodicTimer(
6042 IN NDIS_MINIPORT_TIMER *pTimer,
6043 IN unsigned long timeout);
6045 VOID RTMP_OS_Init_Timer(
6046 IN PRTMP_ADAPTER pAd,
6047 IN NDIS_MINIPORT_TIMER *pTimer,
6048 IN TIMER_FUNCTION function,
6049 IN PVOID data);
6051 VOID RTMP_OS_Add_Timer(
6052 IN NDIS_MINIPORT_TIMER *pTimer,
6053 IN unsigned long timeout);
6055 VOID RTMP_OS_Mod_Timer(
6056 IN NDIS_MINIPORT_TIMER *pTimer,
6057 IN unsigned long timeout);
6060 VOID RTMP_OS_Del_Timer(
6061 IN NDIS_MINIPORT_TIMER *pTimer,
6062 OUT BOOLEAN *pCancelled);
6065 VOID RTMP_OS_Release_Packet(
6066 IN PRTMP_ADAPTER pAd,
6067 IN PQUEUE_ENTRY pEntry);
6069 VOID RTMPusecDelay(
6070 IN ULONG usec);
6072 NDIS_STATUS os_alloc_mem(
6073 IN PRTMP_ADAPTER pAd,
6074 OUT PUCHAR *mem,
6075 IN ULONG size);
6077 NDIS_STATUS os_free_mem(
6078 IN PRTMP_ADAPTER pAd,
6079 IN PUCHAR mem);
6082 void RTMP_AllocateSharedMemory(
6083 IN PRTMP_ADAPTER pAd,
6084 IN ULONG Length,
6085 IN BOOLEAN Cached,
6086 OUT PVOID *VirtualAddress,
6087 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6089 VOID RTMPFreeTxRxRingMemory(
6090 IN PRTMP_ADAPTER pAd);
6092 NDIS_STATUS AdapterBlockAllocateMemory(
6093 IN PVOID handle,
6094 OUT PVOID *ppAd);
6096 void RTMP_AllocateTxDescMemory(
6097 IN PRTMP_ADAPTER pAd,
6098 IN UINT Index,
6099 IN ULONG Length,
6100 IN BOOLEAN Cached,
6101 OUT PVOID *VirtualAddress,
6102 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6104 void RTMP_AllocateFirstTxBuffer(
6105 IN PRTMP_ADAPTER pAd,
6106 IN UINT Index,
6107 IN ULONG Length,
6108 IN BOOLEAN Cached,
6109 OUT PVOID *VirtualAddress,
6110 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6112 void RTMP_AllocateMgmtDescMemory(
6113 IN PRTMP_ADAPTER pAd,
6114 IN ULONG Length,
6115 IN BOOLEAN Cached,
6116 OUT PVOID *VirtualAddress,
6117 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6119 void RTMP_AllocateRxDescMemory(
6120 IN PRTMP_ADAPTER pAd,
6121 IN ULONG Length,
6122 IN BOOLEAN Cached,
6123 OUT PVOID *VirtualAddress,
6124 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6126 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6127 IN PRTMP_ADAPTER pAd,
6128 IN ULONG Length,
6129 IN BOOLEAN Cached,
6130 OUT PVOID *VirtualAddress,
6131 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6133 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6134 IN PRTMP_ADAPTER pAd,
6135 IN ULONG Length,
6136 IN BOOLEAN Cached,
6137 OUT PVOID *VirtualAddress);
6139 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6140 IN PRTMP_ADAPTER pAd,
6141 IN ULONG Length);
6143 void RTMP_QueryPacketInfo(
6144 IN PNDIS_PACKET pPacket,
6145 OUT PACKET_INFO *pPacketInfo,
6146 OUT PUCHAR *pSrcBufVA,
6147 OUT UINT *pSrcBufLen);
6149 void RTMP_QueryNextPacketInfo(
6150 IN PNDIS_PACKET *ppPacket,
6151 OUT PACKET_INFO *pPacketInfo,
6152 OUT PUCHAR *pSrcBufVA,
6153 OUT UINT *pSrcBufLen);
6156 BOOLEAN RTMP_FillTxBlkInfo(
6157 IN RTMP_ADAPTER *pAd,
6158 IN TX_BLK *pTxBlk);
6161 PRTMP_SCATTER_GATHER_LIST
6162 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6165 void announce_802_3_packet(
6166 IN PRTMP_ADAPTER pAd,
6167 IN PNDIS_PACKET pPacket);
6170 UINT BA_Reorder_AMSDU_Annnounce(
6171 IN PRTMP_ADAPTER pAd,
6172 IN PNDIS_PACKET pPacket);
6175 UINT Handle_AMSDU_Packet(
6176 IN PRTMP_ADAPTER pAd,
6177 IN PUCHAR pData,
6178 IN ULONG DataSize,
6179 IN UCHAR FromWhichBSSID);
6182 void convert_802_11_to_802_3_packet(
6183 IN PRTMP_ADAPTER pAd,
6184 IN PNDIS_PACKET pPacket,
6185 IN PUCHAR p8023hdr,
6186 IN PUCHAR pData,
6187 IN ULONG DataSize,
6188 IN UCHAR FromWhichBSSID);
6191 PNET_DEV get_netdev_from_bssid(
6192 IN PRTMP_ADAPTER pAd,
6193 IN UCHAR FromWhichBSSID);
6196 PNDIS_PACKET duplicate_pkt(
6197 IN PRTMP_ADAPTER pAd,
6198 IN PUCHAR pHeader802_3,
6199 IN UINT HdrLen,
6200 IN PUCHAR pData,
6201 IN ULONG DataSize,
6202 IN UCHAR FromWhichBSSID);
6205 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6206 IN PRTMP_ADAPTER pAd,
6207 IN PNDIS_PACKET pOldPkt);
6209 PNDIS_PACKET duplicate_pkt_with_VLAN(
6210 IN PRTMP_ADAPTER pAd,
6211 IN PUCHAR pHeader802_3,
6212 IN UINT HdrLen,
6213 IN PUCHAR pData,
6214 IN ULONG DataSize,
6215 IN UCHAR FromWhichBSSID);
6217 PNDIS_PACKET duplicate_pkt_with_WPI(
6218 IN PRTMP_ADAPTER pAd,
6219 IN PNDIS_PACKET pPacket,
6220 IN UINT32 ext_head_len,
6221 IN UINT32 ext_tail_len);
6223 UCHAR VLAN_8023_Header_Copy(
6224 IN PRTMP_ADAPTER pAd,
6225 IN PUCHAR pHeader802_3,
6226 IN UINT HdrLen,
6227 OUT PUCHAR pData,
6228 IN UCHAR FromWhichBSSID);
6230 #ifdef DOT11_N_SUPPORT
6231 void ba_flush_reordering_timeout_mpdus(
6232 IN PRTMP_ADAPTER pAd,
6233 IN PBA_REC_ENTRY pBAEntry,
6234 IN ULONG Now32);
6237 VOID BAOriSessionSetUp(
6238 IN PRTMP_ADAPTER pAd,
6239 IN MAC_TABLE_ENTRY *pEntry,
6240 IN UCHAR TID,
6241 IN USHORT TimeOut,
6242 IN ULONG DelayTime,
6243 IN BOOLEAN isForced);
6245 VOID BASessionTearDownALL(
6246 IN OUT PRTMP_ADAPTER pAd,
6247 IN UCHAR Wcid);
6248 #endif // DOT11_N_SUPPORT //
6250 BOOLEAN OS_Need_Clone_Packet(void);
6253 VOID build_tx_packet(
6254 IN PRTMP_ADAPTER pAd,
6255 IN PNDIS_PACKET pPacket,
6256 IN PUCHAR pFrame,
6257 IN ULONG FrameLen);
6260 VOID BAOriSessionTearDown(
6261 IN OUT PRTMP_ADAPTER pAd,
6262 IN UCHAR Wcid,
6263 IN UCHAR TID,
6264 IN BOOLEAN bPassive,
6265 IN BOOLEAN bForceSend);
6267 VOID BARecSessionTearDown(
6268 IN OUT PRTMP_ADAPTER pAd,
6269 IN UCHAR Wcid,
6270 IN UCHAR TID,
6271 IN BOOLEAN bPassive);
6273 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6274 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6276 ULONG AutoChBssInsertEntry(
6277 IN PRTMP_ADAPTER pAd,
6278 IN PUCHAR pBssid,
6279 IN CHAR Ssid[],
6280 IN UCHAR SsidLen,
6281 IN UCHAR ChannelNo,
6282 IN CHAR Rssi);
6284 void AutoChBssTableInit(
6285 IN PRTMP_ADAPTER pAd);
6287 void ChannelInfoInit(
6288 IN PRTMP_ADAPTER pAd);
6290 void AutoChBssTableDestroy(
6291 IN PRTMP_ADAPTER pAd);
6293 void ChannelInfoDestroy(
6294 IN PRTMP_ADAPTER pAd);
6296 UCHAR New_ApAutoSelectChannel(
6297 IN PRTMP_ADAPTER pAd);
6299 BOOLEAN rtstrmactohex(
6300 IN char *s1,
6301 IN char *s2);
6303 BOOLEAN rtstrcasecmp(
6304 IN char *s1,
6305 IN char *s2);
6307 char *rtstrstruncasecmp(
6308 IN char *s1,
6309 IN char *s2);
6311 char *rtstrstr(
6312 IN const char * s1,
6313 IN const char * s2);
6315 char *rstrtok(
6316 IN char * s,
6317 IN const char * ct);
6319 int rtinet_aton(
6320 const char *cp,
6321 unsigned int *addr);
6323 ////////// common ioctl functions //////////
6324 INT Set_DriverVersion_Proc(
6325 IN PRTMP_ADAPTER pAd,
6326 IN PUCHAR arg);
6328 INT Set_CountryRegion_Proc(
6329 IN PRTMP_ADAPTER pAd,
6330 IN PUCHAR arg);
6332 INT Set_CountryRegionABand_Proc(
6333 IN PRTMP_ADAPTER pAd,
6334 IN PUCHAR arg);
6336 INT Set_WirelessMode_Proc(
6337 IN PRTMP_ADAPTER pAd,
6338 IN PUCHAR arg);
6340 INT Set_Channel_Proc(
6341 IN PRTMP_ADAPTER pAd,
6342 IN PUCHAR arg);
6344 INT Set_ShortSlot_Proc(
6345 IN PRTMP_ADAPTER pAd,
6346 IN PUCHAR arg);
6348 INT Set_TxPower_Proc(
6349 IN PRTMP_ADAPTER pAd,
6350 IN PUCHAR arg);
6352 INT Set_BGProtection_Proc(
6353 IN PRTMP_ADAPTER pAd,
6354 IN PUCHAR arg);
6356 INT Set_TxPreamble_Proc(
6357 IN PRTMP_ADAPTER pAd,
6358 IN PUCHAR arg);
6360 INT Set_RTSThreshold_Proc(
6361 IN PRTMP_ADAPTER pAd,
6362 IN PUCHAR arg);
6364 INT Set_FragThreshold_Proc(
6365 IN PRTMP_ADAPTER pAd,
6366 IN PUCHAR arg);
6368 INT Set_TxBurst_Proc(
6369 IN PRTMP_ADAPTER pAd,
6370 IN PUCHAR arg);
6372 #ifdef AGGREGATION_SUPPORT
6373 INT Set_PktAggregate_Proc(
6374 IN PRTMP_ADAPTER pAd,
6375 IN PUCHAR arg);
6376 #endif
6378 INT Set_IEEE80211H_Proc(
6379 IN PRTMP_ADAPTER pAd,
6380 IN PUCHAR arg);
6382 #ifdef DBG
6383 INT Set_Debug_Proc(
6384 IN PRTMP_ADAPTER pAd,
6385 IN PUCHAR arg);
6386 #endif
6388 INT Show_DescInfo_Proc(
6389 IN PRTMP_ADAPTER pAd,
6390 IN PUCHAR arg);
6392 INT Set_ResetStatCounter_Proc(
6393 IN PRTMP_ADAPTER pAd,
6394 IN PUCHAR arg);
6396 #ifdef DOT11_N_SUPPORT
6397 INT Set_BASetup_Proc(
6398 IN PRTMP_ADAPTER pAd,
6399 IN PUCHAR arg);
6401 INT Set_BADecline_Proc(
6402 IN PRTMP_ADAPTER pAd,
6403 IN PUCHAR arg);
6405 INT Set_BAOriTearDown_Proc(
6406 IN PRTMP_ADAPTER pAd,
6407 IN PUCHAR arg);
6409 INT Set_BARecTearDown_Proc(
6410 IN PRTMP_ADAPTER pAd,
6411 IN PUCHAR arg);
6413 INT Set_HtBw_Proc(
6414 IN PRTMP_ADAPTER pAd,
6415 IN PUCHAR arg);
6417 INT Set_HtMcs_Proc(
6418 IN PRTMP_ADAPTER pAd,
6419 IN PUCHAR arg);
6421 INT Set_HtGi_Proc(
6422 IN PRTMP_ADAPTER pAd,
6423 IN PUCHAR arg);
6425 INT Set_HtOpMode_Proc(
6426 IN PRTMP_ADAPTER pAd,
6427 IN PUCHAR arg);
6429 INT Set_HtStbc_Proc(
6430 IN PRTMP_ADAPTER pAd,
6431 IN PUCHAR arg);
6433 INT Set_HtHtc_Proc(
6434 IN PRTMP_ADAPTER pAd,
6435 IN PUCHAR arg);
6437 INT Set_HtExtcha_Proc(
6438 IN PRTMP_ADAPTER pAd,
6439 IN PUCHAR arg);
6441 INT Set_HtMpduDensity_Proc(
6442 IN PRTMP_ADAPTER pAd,
6443 IN PUCHAR arg);
6445 INT Set_HtBaWinSize_Proc(
6446 IN PRTMP_ADAPTER pAd,
6447 IN PUCHAR arg);
6449 INT Set_HtRdg_Proc(
6450 IN PRTMP_ADAPTER pAd,
6451 IN PUCHAR arg);
6453 INT Set_HtLinkAdapt_Proc(
6454 IN PRTMP_ADAPTER pAd,
6455 IN PUCHAR arg);
6457 INT Set_HtAmsdu_Proc(
6458 IN PRTMP_ADAPTER pAd,
6459 IN PUCHAR arg);
6461 INT Set_HtAutoBa_Proc(
6462 IN PRTMP_ADAPTER pAd,
6463 IN PUCHAR arg);
6465 INT Set_HtProtect_Proc(
6466 IN PRTMP_ADAPTER pAd,
6467 IN PUCHAR arg);
6469 INT Set_HtMimoPs_Proc(
6470 IN PRTMP_ADAPTER pAd,
6471 IN PUCHAR arg);
6474 INT Set_ForceShortGI_Proc(
6475 IN PRTMP_ADAPTER pAd,
6476 IN PUCHAR arg);
6478 INT Set_ForceGF_Proc(
6479 IN PRTMP_ADAPTER pAd,
6480 IN PUCHAR arg);
6482 INT SetCommonHT(
6483 IN PRTMP_ADAPTER pAd);
6485 INT Set_SendPSMPAction_Proc(
6486 IN PRTMP_ADAPTER pAd,
6487 IN PUCHAR arg);
6489 INT Set_HtMIMOPSmode_Proc(
6490 IN PRTMP_ADAPTER pAd,
6491 IN PUCHAR arg);
6494 INT Set_HtTxBASize_Proc(
6495 IN PRTMP_ADAPTER pAd,
6496 IN PUCHAR arg);
6497 #endif // DOT11_N_SUPPORT //
6501 #ifdef CONFIG_STA_SUPPORT
6502 //Dls , kathy
6503 VOID RTMPSendDLSTearDownFrame(
6504 IN PRTMP_ADAPTER pAd,
6505 IN PUCHAR pDA);
6507 #ifdef DOT11_N_SUPPORT
6508 //Block ACK
6509 VOID QueryBATABLE(
6510 IN PRTMP_ADAPTER pAd,
6511 OUT PQUERYBA_TABLE pBAT);
6512 #endif // DOT11_N_SUPPORT //
6514 #ifdef WPA_SUPPLICANT_SUPPORT
6515 INT WpaCheckEapCode(
6516 IN PRTMP_ADAPTER pAd,
6517 IN PUCHAR pFrame,
6518 IN USHORT FrameLen,
6519 IN USHORT OffSet);
6521 VOID WpaSendMicFailureToWpaSupplicant(
6522 IN PRTMP_ADAPTER pAd,
6523 IN BOOLEAN bUnicast);
6525 VOID SendAssocIEsToWpaSupplicant(
6526 IN PRTMP_ADAPTER pAd);
6527 #endif // WPA_SUPPLICANT_SUPPORT //
6529 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6530 int wext_notify_event_assoc(
6531 IN RTMP_ADAPTER *pAd);
6532 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6534 #endif // CONFIG_STA_SUPPORT //
6538 #ifdef DOT11_N_SUPPORT
6539 VOID Handle_BSS_Width_Trigger_Events(
6540 IN PRTMP_ADAPTER pAd);
6542 void build_ext_channel_switch_ie(
6543 IN PRTMP_ADAPTER pAd,
6544 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6545 #endif // DOT11_N_SUPPORT //
6548 BOOLEAN APRxDoneInterruptHandle(
6549 IN PRTMP_ADAPTER pAd);
6551 BOOLEAN STARxDoneInterruptHandle(
6552 IN PRTMP_ADAPTER pAd,
6553 IN BOOLEAN argc);
6555 #ifdef DOT11_N_SUPPORT
6556 // AMPDU packet indication
6557 VOID Indicate_AMPDU_Packet(
6558 IN PRTMP_ADAPTER pAd,
6559 IN RX_BLK *pRxBlk,
6560 IN UCHAR FromWhichBSSID);
6562 // AMSDU packet indication
6563 VOID Indicate_AMSDU_Packet(
6564 IN PRTMP_ADAPTER pAd,
6565 IN RX_BLK *pRxBlk,
6566 IN UCHAR FromWhichBSSID);
6567 #endif // DOT11_N_SUPPORT //
6569 // Normal legacy Rx packet indication
6570 VOID Indicate_Legacy_Packet(
6571 IN PRTMP_ADAPTER pAd,
6572 IN RX_BLK *pRxBlk,
6573 IN UCHAR FromWhichBSSID);
6575 VOID Indicate_EAPOL_Packet(
6576 IN PRTMP_ADAPTER pAd,
6577 IN RX_BLK *pRxBlk,
6578 IN UCHAR FromWhichBSSID);
6580 void update_os_packet_info(
6581 IN PRTMP_ADAPTER pAd,
6582 IN RX_BLK *pRxBlk,
6583 IN UCHAR FromWhichBSSID);
6585 void wlan_802_11_to_802_3_packet(
6586 IN PRTMP_ADAPTER pAd,
6587 IN RX_BLK *pRxBlk,
6588 IN PUCHAR pHeader802_3,
6589 IN UCHAR FromWhichBSSID);
6591 UINT deaggregate_AMSDU_announce(
6592 IN PRTMP_ADAPTER pAd,
6593 PNDIS_PACKET pPacket,
6594 IN PUCHAR pData,
6595 IN ULONG DataSize);
6598 #ifdef CONFIG_STA_SUPPORT
6599 // remove LLC and get 802_3 Header
6600 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6602 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6604 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6606 _pDA = _pRxBlk->pHeader->Addr3; \
6607 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6609 else \
6611 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6613 _pDA = _pRxBlk->pHeader->Addr1; \
6614 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6615 _pSA = _pRxBlk->pHeader->Addr2; \
6616 else \
6617 _pSA = _pRxBlk->pHeader->Addr3; \
6619 else \
6621 _pDA = _pRxBlk->pHeader->Addr1; \
6622 _pSA = _pRxBlk->pHeader->Addr2; \
6626 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6627 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6629 #endif // CONFIG_STA_SUPPORT //
6632 BOOLEAN APFowardWirelessStaToWirelessSta(
6633 IN PRTMP_ADAPTER pAd,
6634 IN PNDIS_PACKET pPacket,
6635 IN ULONG FromWhichBSSID);
6637 VOID Announce_or_Forward_802_3_Packet(
6638 IN PRTMP_ADAPTER pAd,
6639 IN PNDIS_PACKET pPacket,
6640 IN UCHAR FromWhichBSSID);
6642 VOID Sta_Announce_or_Forward_802_3_Packet(
6643 IN PRTMP_ADAPTER pAd,
6644 IN PNDIS_PACKET pPacket,
6645 IN UCHAR FromWhichBSSID);
6648 #ifdef CONFIG_STA_SUPPORT
6649 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6650 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6651 //announce_802_3_packet(_pAd, _pPacket);
6652 #endif // CONFIG_STA_SUPPORT //
6655 PNDIS_PACKET DuplicatePacket(
6656 IN PRTMP_ADAPTER pAd,
6657 IN PNDIS_PACKET pPacket,
6658 IN UCHAR FromWhichBSSID);
6661 PNDIS_PACKET ClonePacket(
6662 IN PRTMP_ADAPTER pAd,
6663 IN PNDIS_PACKET pPacket,
6664 IN PUCHAR pData,
6665 IN ULONG DataSize);
6668 // Normal, AMPDU or AMSDU
6669 VOID CmmRxnonRalinkFrameIndicate(
6670 IN PRTMP_ADAPTER pAd,
6671 IN RX_BLK *pRxBlk,
6672 IN UCHAR FromWhichBSSID);
6674 VOID CmmRxRalinkFrameIndicate(
6675 IN PRTMP_ADAPTER pAd,
6676 IN MAC_TABLE_ENTRY *pEntry,
6677 IN RX_BLK *pRxBlk,
6678 IN UCHAR FromWhichBSSID);
6680 VOID Update_Rssi_Sample(
6681 IN PRTMP_ADAPTER pAd,
6682 IN RSSI_SAMPLE *pRssi,
6683 IN PRXWI_STRUC pRxWI);
6685 PNDIS_PACKET GetPacketFromRxRing(
6686 IN PRTMP_ADAPTER pAd,
6687 OUT PRT28XX_RXD_STRUC pSaveRxD,
6688 OUT BOOLEAN *pbReschedule,
6689 IN OUT UINT32 *pRxPending);
6691 PNDIS_PACKET RTMPDeFragmentDataFrame(
6692 IN PRTMP_ADAPTER pAd,
6693 IN RX_BLK *pRxBlk);
6695 ////////////////////////////////////////
6701 #ifdef SNMP_SUPPORT
6702 //for snmp , kathy
6703 typedef struct _DefaultKeyIdxValue
6705 UCHAR KeyIdx;
6706 UCHAR Value[16];
6707 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6708 #endif
6711 #ifdef CONFIG_STA_SUPPORT
6712 enum {
6713 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6714 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6715 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6716 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6717 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6718 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6719 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6720 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6721 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6722 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6723 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6725 enum {
6726 P80211ENUM_msgitem_status_no_value = 0x00
6728 enum {
6729 P80211ENUM_truth_false = 0x00,
6730 P80211ENUM_truth_true = 0x01
6733 /* Definition from madwifi */
6734 typedef struct {
6735 UINT32 did;
6736 UINT16 status;
6737 UINT16 len;
6738 UINT32 data;
6739 } p80211item_uint32_t;
6741 typedef struct {
6742 UINT32 msgcode;
6743 UINT32 msglen;
6744 #define WLAN_DEVNAMELEN_MAX 16
6745 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6746 p80211item_uint32_t hosttime;
6747 p80211item_uint32_t mactime;
6748 p80211item_uint32_t channel;
6749 p80211item_uint32_t rssi;
6750 p80211item_uint32_t sq;
6751 p80211item_uint32_t signal;
6752 p80211item_uint32_t noise;
6753 p80211item_uint32_t rate;
6754 p80211item_uint32_t istx;
6755 p80211item_uint32_t frmlen;
6756 } wlan_ng_prism2_header;
6758 /* The radio capture header precedes the 802.11 header. */
6759 typedef struct PACKED _ieee80211_radiotap_header {
6760 UINT8 it_version; /* Version 0. Only increases
6761 * for drastic changes,
6762 * introduction of compatible
6763 * new fields does not count.
6765 UINT8 it_pad;
6766 UINT16 it_len; /* length of the whole
6767 * header in bytes, including
6768 * it_version, it_pad,
6769 * it_len, and data fields.
6771 UINT32 it_present; /* A bitmap telling which
6772 * fields are present. Set bit 31
6773 * (0x80000000) to extend the
6774 * bitmap by another 32 bits.
6775 * Additional extensions are made
6776 * by setting bit 31.
6778 }ieee80211_radiotap_header ;
6780 enum ieee80211_radiotap_type {
6781 IEEE80211_RADIOTAP_TSFT = 0,
6782 IEEE80211_RADIOTAP_FLAGS = 1,
6783 IEEE80211_RADIOTAP_RATE = 2,
6784 IEEE80211_RADIOTAP_CHANNEL = 3,
6785 IEEE80211_RADIOTAP_FHSS = 4,
6786 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6787 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6788 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6789 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6790 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6791 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6792 IEEE80211_RADIOTAP_ANTENNA = 11,
6793 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6794 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6797 #define WLAN_RADIOTAP_PRESENT ( \
6798 (1 << IEEE80211_RADIOTAP_TSFT) | \
6799 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6800 (1 << IEEE80211_RADIOTAP_RATE) | \
6803 typedef struct _wlan_radiotap_header {
6804 ieee80211_radiotap_header wt_ihdr;
6805 INT64 wt_tsft;
6806 UINT8 wt_flags;
6807 UINT8 wt_rate;
6808 } wlan_radiotap_header;
6809 /* Definition from madwifi */
6811 void send_monitor_packets(
6812 IN PRTMP_ADAPTER pAd,
6813 IN RX_BLK *pRxBlk);
6815 #if WIRELESS_EXT >= 12
6816 // This function will be called when query /proc
6817 struct iw_statistics *rt28xx_get_wireless_stats(
6818 IN struct net_device *net_dev);
6819 #endif
6821 VOID RTMPSetDesiredRates(
6822 IN PRTMP_ADAPTER pAdapter,
6823 IN LONG Rates);
6824 #endif // CONFIG_STA_SUPPORT //
6826 INT Set_FixedTxMode_Proc(
6827 IN PRTMP_ADAPTER pAd,
6828 IN PUCHAR arg);
6830 static inline char* GetPhyMode(
6831 int Mode)
6833 switch(Mode)
6835 case MODE_CCK:
6836 return "CCK";
6838 case MODE_OFDM:
6839 return "OFDM";
6840 #ifdef DOT11_N_SUPPORT
6841 case MODE_HTMIX:
6842 return "HTMIX";
6844 case MODE_HTGREENFIELD:
6845 return "GREEN";
6846 #endif // DOT11_N_SUPPORT //
6847 default:
6848 return "N/A";
6853 static inline char* GetBW(
6854 int BW)
6856 switch(BW)
6858 case BW_10:
6859 return "10M";
6861 case BW_20:
6862 return "20M";
6863 #ifdef DOT11_N_SUPPORT
6864 case BW_40:
6865 return "40M";
6866 #endif // DOT11_N_SUPPORT //
6867 default:
6868 return "N/A";
6873 VOID RT28xxThreadTerminate(
6874 IN RTMP_ADAPTER *pAd);
6876 BOOLEAN RT28XXChipsetCheck(
6877 IN void *_dev_p);
6879 BOOLEAN RT28XXNetDevInit(
6880 IN void *_dev_p,
6881 IN struct net_device *net_dev,
6882 IN RTMP_ADAPTER *pAd);
6884 BOOLEAN RT28XXProbePostConfig(
6885 IN void *_dev_p,
6886 IN RTMP_ADAPTER *pAd,
6887 IN INT32 argc);
6889 VOID RT28XXDMADisable(
6890 IN RTMP_ADAPTER *pAd);
6892 VOID RT28XXDMAEnable(
6893 IN RTMP_ADAPTER *pAd);
6895 VOID RT28xx_UpdateBeaconToAsic(
6896 IN RTMP_ADAPTER * pAd,
6897 IN INT apidx,
6898 IN ULONG BeaconLen,
6899 IN ULONG UpdatePos);
6901 INT rt28xx_ioctl(
6902 IN struct net_device *net_dev,
6903 IN OUT struct ifreq *rq,
6904 IN INT cmd);
6907 #ifdef CONFIG_STA_SUPPORT
6908 INT rt28xx_sta_ioctl(
6909 IN struct net_device *net_dev,
6910 IN OUT struct ifreq *rq,
6911 IN INT cmd);
6912 #endif // CONFIG_STA_SUPPORT //
6914 BOOLEAN RT28XXSecurityKeyAdd(
6915 IN PRTMP_ADAPTER pAd,
6916 IN ULONG apidx,
6917 IN ULONG KeyIdx,
6918 IN MAC_TABLE_ENTRY *pEntry);
6920 ////////////////////////////////////////
6921 PNDIS_PACKET GetPacketFromRxRing(
6922 IN PRTMP_ADAPTER pAd,
6923 OUT PRT28XX_RXD_STRUC pSaveRxD,
6924 OUT BOOLEAN *pbReschedule,
6925 IN OUT UINT32 *pRxPending);
6928 void kill_thread_task(PRTMP_ADAPTER pAd);
6930 void tbtt_tasklet(unsigned long data);
6933 // Function Prototype in cmm_data_2860.c
6935 USHORT RtmpPCI_WriteTxResource(
6936 IN PRTMP_ADAPTER pAd,
6937 IN TX_BLK *pTxBlk,
6938 IN BOOLEAN bIsLast,
6939 OUT USHORT *FreeNumber);
6941 USHORT RtmpPCI_WriteSingleTxResource(
6942 IN PRTMP_ADAPTER pAd,
6943 IN TX_BLK *pTxBlk,
6944 IN BOOLEAN bIsLast,
6945 OUT USHORT *FreeNumber);
6947 USHORT RtmpPCI_WriteMultiTxResource(
6948 IN PRTMP_ADAPTER pAd,
6949 IN TX_BLK *pTxBlk,
6950 IN UCHAR frameNum,
6951 OUT USHORT *FreeNumber);
6953 USHORT RtmpPCI_WriteFragTxResource(
6954 IN PRTMP_ADAPTER pAd,
6955 IN TX_BLK *pTxBlk,
6956 IN UCHAR fragNum,
6957 OUT USHORT *FreeNumber);
6959 USHORT RtmpPCI_WriteSubTxResource(
6960 IN PRTMP_ADAPTER pAd,
6961 IN TX_BLK *pTxBlk,
6962 IN BOOLEAN bIsLast,
6963 OUT USHORT *FreeNumber);
6965 VOID RtmpPCI_FinalWriteTxResource(
6966 IN PRTMP_ADAPTER pAd,
6967 IN TX_BLK *pTxBlk,
6968 IN USHORT totalMPDUSize,
6969 IN USHORT FirstTxIdx);
6971 VOID RtmpPCIDataLastTxIdx(
6972 IN PRTMP_ADAPTER pAd,
6973 IN UCHAR QueIdx,
6974 IN USHORT LastTxIdx);
6976 VOID RtmpPCIDataKickOut(
6977 IN PRTMP_ADAPTER pAd,
6978 IN TX_BLK *pTxBlk,
6979 IN UCHAR QueIdx);
6982 int RtmpPCIMgmtKickOut(
6983 IN RTMP_ADAPTER *pAd,
6984 IN UCHAR QueIdx,
6985 IN PNDIS_PACKET pPacket,
6986 IN PUCHAR pSrcBufVA,
6987 IN UINT SrcBufLen);
6990 NDIS_STATUS RTMPCheckRxError(
6991 IN PRTMP_ADAPTER pAd,
6992 IN PHEADER_802_11 pHeader,
6993 IN PRXWI_STRUC pRxWI,
6994 IN PRT28XX_RXD_STRUC pRxD);
6996 #ifdef CONFIG_STA_SUPPORT
6997 VOID RTMPInitPCIeLinkCtrlValue(
6998 IN PRTMP_ADAPTER pAd);
7000 VOID RTMPFindHostPCIDev(
7001 IN PRTMP_ADAPTER pAd);
7003 VOID RTMPPCIeLinkCtrlValueRestore(
7004 IN PRTMP_ADAPTER pAd,
7005 IN UCHAR Level);
7007 VOID RTMPPCIeLinkCtrlSetting(
7008 IN PRTMP_ADAPTER pAd,
7009 IN USHORT Max);
7011 VOID RT28xxPciAsicRadioOff(
7012 IN PRTMP_ADAPTER pAd,
7013 IN UCHAR Level,
7014 IN USHORT TbttNumToNextWakeUp);
7016 BOOLEAN RT28xxPciAsicRadioOn(
7017 IN PRTMP_ADAPTER pAd,
7018 IN UCHAR Level);
7020 VOID RT28xxPciStaAsicForceWakeup(
7021 IN PRTMP_ADAPTER pAd,
7022 IN UCHAR Level);
7024 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
7025 IN PRTMP_ADAPTER pAd,
7026 IN USHORT TbttNumToNextWakeUp);
7028 VOID PsPollWakeExec(
7029 IN PVOID SystemSpecific1,
7030 IN PVOID FunctionContext,
7031 IN PVOID SystemSpecific2,
7032 IN PVOID SystemSpecific3);
7034 VOID RadioOnExec(
7035 IN PVOID SystemSpecific1,
7036 IN PVOID FunctionContext,
7037 IN PVOID SystemSpecific2,
7038 IN PVOID SystemSpecific3);
7039 #endif // CONFIG_STA_SUPPORT //
7041 VOID RT28xxPciMlmeRadioOn(
7042 IN PRTMP_ADAPTER pAd);
7044 VOID RT28xxPciMlmeRadioOFF(
7045 IN PRTMP_ADAPTER pAd);
7047 VOID AsicTurnOffRFClk(
7048 IN PRTMP_ADAPTER pAd,
7049 IN UCHAR Channel);
7051 VOID AsicTurnOnRFClk(
7052 IN PRTMP_ADAPTER pAd,
7053 IN UCHAR Channel);
7056 ////////////////////////////////////////
7058 VOID QBSS_LoadInit(
7059 IN RTMP_ADAPTER *pAd);
7061 UINT32 QBSS_LoadElementAppend(
7062 IN RTMP_ADAPTER *pAd,
7063 OUT UINT8 *buf_p);
7065 VOID QBSS_LoadUpdate(
7066 IN RTMP_ADAPTER *pAd);
7068 ///////////////////////////////////////
7069 INT RTMPShowCfgValue(
7070 IN PRTMP_ADAPTER pAd,
7071 IN PUCHAR pName,
7072 IN PUCHAR pBuf);
7074 PCHAR RTMPGetRalinkAuthModeStr(
7075 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7077 PCHAR RTMPGetRalinkEncryModeStr(
7078 IN USHORT encryMode);
7079 //////////////////////////////////////
7081 #ifdef CONFIG_STA_SUPPORT
7082 VOID AsicStaBbpTuning(
7083 IN PRTMP_ADAPTER pAd);
7085 VOID AsicResetFromDMABusy(
7086 IN PRTMP_ADAPTER pAd);
7088 VOID AsicResetBBP(
7089 IN PRTMP_ADAPTER pAd);
7091 VOID AsicResetMAC(
7092 IN PRTMP_ADAPTER pAd);
7094 VOID AsicResetPBF(
7095 IN PRTMP_ADAPTER pAd);
7096 #endif // CONFIG_STA_SUPPORT //
7098 void RTMP_IndicateMediaState(
7099 IN PRTMP_ADAPTER pAd);
7101 VOID ReSyncBeaconTime(
7102 IN PRTMP_ADAPTER pAd);
7104 VOID RTMPSetAGCInitValue(
7105 IN PRTMP_ADAPTER pAd,
7106 IN UCHAR BandWidth);
7108 int rt28xx_close(IN PNET_DEV dev);
7109 int rt28xx_open(IN PNET_DEV dev);
7111 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7113 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7114 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7116 if (VIRTUAL_IF_NUM(pAd) == 0)
7118 if (rt28xx_open(pAd->net_dev) != 0)
7119 return -1;
7121 else
7124 VIRTUAL_IF_INC(pAd);
7125 return 0;
7128 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7130 VIRTUAL_IF_DEC(pAd);
7131 if (VIRTUAL_IF_NUM(pAd) == 0)
7132 rt28xx_close(pAd->net_dev);
7133 return;
7137 #endif // __RTMP_H__