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