Staging: add rt2860 wireless driver
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / rt2860 / rtmp.h
1 /*
2 *************************************************************************
3 * Ralink Tech Inc.
4 * 5F., No.36, Taiyuan St., Jhubei City,
5 * Hsinchu County 302,
6 * Taiwan, R.O.C.
7 *
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
9 *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
19 * *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
24 * *
25 *************************************************************************
26
27 Module Name:
28 rtmp.h
29
30 Abstract:
31 Miniport generic portion header file
32
33 Revision History:
34 Who When What
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
39 */
40 #ifndef __RTMP_H__
41 #define __RTMP_H__
42
43 #include "link_list.h"
44 #include "spectrum_def.h"
45
46
47 #ifdef CONFIG_STA_SUPPORT
48 #include "aironet.h"
49 #endif // CONFIG_STA_SUPPORT //
50
51 //#define DBG_DIAGNOSE 1
52
53 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
54 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
55 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
56 #else
57 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
58 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
59 #endif
60
61 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
62 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
63 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
64
65
66
67 //
68 // NDIS Version definitions
69 //
70 #ifdef NDIS50_MINIPORT
71 #define RTMP_NDIS_MAJOR_VERSION 5
72 #define RTMP_NDIS_MINOR_VERSION 0
73 #endif
74
75 #ifdef NDIS51_MINIPORT
76 #define RTMP_NDIS_MAJOR_VERSION 5
77 #define RTMP_NDIS_MINOR_VERSION 1
78 #endif
79
80 extern char NIC_VENDOR_DESC[];
81 extern int NIC_VENDOR_DESC_LEN;
82
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];
92
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];
116
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[];
128
129 extern UCHAR CipherSuiteWpaNoneTkip[];
130 extern UCHAR CipherSuiteWpaNoneTkipLen;
131
132 extern UCHAR CipherSuiteWpaNoneAes[];
133 extern UCHAR CipherSuiteWpaNoneAesLen;
134
135 extern UCHAR SsidIe;
136 extern UCHAR SupRateIe;
137 extern UCHAR ExtRateIe;
138
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 //
147
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;
155
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[];
164
165
166 extern UCHAR RateSwitchTable[];
167 extern UCHAR RateSwitchTable11B[];
168 extern UCHAR RateSwitchTable11G[];
169 extern UCHAR RateSwitchTable11BG[];
170
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[];
178
179 #ifdef CONFIG_STA_SUPPORT
180 extern UCHAR PRE_N_HT_OUI[];
181 #endif // CONFIG_STA_SUPPORT //
182 #endif // DOT11_N_SUPPORT //
183
184 #define MAXSEQ (0xFFF)
185
186 #ifdef RALINK_ATE
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;
211
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
223
224 UINT32 NumOfAvgRssiSample;
225
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;
257
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 //
270
271 #ifdef DOT11_N_SUPPORT
272 struct reordering_mpdu
273 {
274 struct reordering_mpdu *next;
275 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
276 int Sequence; /* sequence number of MPDU */
277 BOOLEAN bAMSDU;
278 };
279
280 struct reordering_list
281 {
282 struct reordering_mpdu *next;
283 int qlen;
284 };
285
286 struct reordering_mpdu_pool
287 {
288 PVOID mem;
289 NDIS_SPIN_LOCK lock;
290 struct reordering_list freelist;
291 };
292 #endif // DOT11_N_SUPPORT //
293
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;
305
306 //
307 // Queue structure and macros
308 //
309 typedef struct _QUEUE_ENTRY {
310 struct _QUEUE_ENTRY *Next;
311 } QUEUE_ENTRY, *PQUEUE_ENTRY;
312
313 // Queue structure
314 typedef struct _QUEUE_HEADER {
315 PQUEUE_ENTRY Head;
316 PQUEUE_ENTRY Tail;
317 ULONG Number;
318 } QUEUE_HEADER, *PQUEUE_HEADER;
319
320 #define InitializeQueueHeader(QueueHeader) \
321 { \
322 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
323 (QueueHeader)->Number = 0; \
324 }
325
326 #define RemoveHeadQueue(QueueHeader) \
327 (QueueHeader)->Head; \
328 { \
329 PQUEUE_ENTRY pNext; \
330 if ((QueueHeader)->Head != NULL) \
331 { \
332 pNext = (QueueHeader)->Head->Next; \
333 (QueueHeader)->Head = pNext; \
334 if (pNext == NULL) \
335 (QueueHeader)->Tail = NULL; \
336 (QueueHeader)->Number--; \
337 } \
338 }
339
340 #define InsertHeadQueue(QueueHeader, QueueEntry) \
341 { \
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++; \
347 }
348
349 #define InsertTailQueue(QueueHeader, QueueEntry) \
350 { \
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++; \
358 }
359
360 //
361 // Macros for flag and ref count operations
362 //
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))
368
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)
372
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)
376
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)
380
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)
386
387 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
388 #endif // CONFIG_STA_SUPPORT //
389
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))
392
393
394 #define INC_RING_INDEX(_idx, _RingSize) \
395 { \
396 (_idx) = (_idx+1) % (_RingSize); \
397 }
398
399 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
400
401 #define RING_PACKET_INIT(_TxRing, _idx) \
402 { \
403 _TxRing->Cell[_idx].pNdisPacket = NULL; \
404 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
405 }
406
407 #define TXDT_INIT(_TxD) \
408 { \
409 NdisZeroMemory(_TxD, TXD_SIZE); \
410 _TxD->DMADONE = 1; \
411 }
412
413 //Set last data segment
414 #define RING_SET_LASTDS(_TxD, _IsSD0) \
415 { \
416 if (_IsSD0) {_TxD->LastSec0 = 1;} \
417 else {_TxD->LastSec1 = 1;} \
418 }
419
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) \
425 { \
426 int i=0; \
427 while (++_tsc[i] == 0x0) \
428 { \
429 i++; \
430 if (i == 6) \
431 break; \
432 } \
433 }
434
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) \
438 { \
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);\
451 }
452
453 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
454 { \
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); \
458 }
459 #endif // DOT11_N_SUPPORT //
460
461 //
462 // MACRO for 32-bit PCI register read / write
463 //
464 // Usage : RTMP_IO_READ32(
465 // PRTMP_ADAPTER pAd,
466 // ULONG Register_Offset,
467 // PULONG pValue)
468 //
469 // RTMP_IO_WRITE32(
470 // PRTMP_ADAPTER pAd,
471 // ULONG Register_Offset,
472 // ULONG Value)
473 //
474
475 //
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.
478 //
479 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
480 //
481 #ifdef RT2860
482 #define RTMP_RF_IO_WRITE32(_A, _V) \
483 { \
484 PHY_CSR4_STRUC Value; \
485 ULONG BusyCnt = 0; \
486 if ((_A)->bPCIclkOff) \
487 { \
488 return; \
489 } \
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) \
497 { \
498 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
499 } \
500 }
501
502 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
503 { \
504 BBP_CSR_CFG_STRUC BbpCsr; \
505 int i, k; \
506 for (i=0; i<MAX_BUSY_COUNT; i++) \
507 { \
508 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
509 if (BbpCsr.field.Busy == BUSY) \
510 { \
511 continue; \
512 } \
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++) \
520 { \
521 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
522 if (BbpCsr.field.Busy == IDLE) \
523 break; \
524 } \
525 if ((BbpCsr.field.Busy == IDLE) && \
526 (BbpCsr.field.RegNum == _I)) \
527 { \
528 *(_pV) = (UCHAR)BbpCsr.field.Value; \
529 break; \
530 } \
531 } \
532 if (BbpCsr.field.Busy == BUSY) \
533 { \
534 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
535 *(_pV) = (_A)->BbpWriteLatch[_I]; \
536 } \
537 }
538
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) \
542 { \
543 BBP_CSR_CFG_STRUC BbpCsr; \
544 int i, k; \
545 if ((_A)->bPCIclkOff == FALSE) \
546 { \
547 for (i=0; i<MAX_BUSY_COUNT; i++) \
548 { \
549 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
550 if (BbpCsr.field.Busy == BUSY) \
551 { \
552 continue; \
553 } \
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++) \
563 { \
564 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
565 if (BbpCsr.field.Busy == IDLE) \
566 break; \
567 } \
568 if ((BbpCsr.field.Busy == IDLE) && \
569 (BbpCsr.field.RegNum == _I)) \
570 { \
571 *(_pV) = (UCHAR)BbpCsr.field.Value; \
572 break; \
573 } \
574 } \
575 if (BbpCsr.field.Busy == BUSY) \
576 { \
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); \
582 } \
583 } \
584 }
585
586 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
587 { \
588 BBP_CSR_CFG_STRUC BbpCsr; \
589 int BusyCnt; \
590 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
591 { \
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; \
604 } \
605 if (BusyCnt == MAX_BUSY_COUNT) \
606 { \
607 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
608 } \
609 }
610
611 // Write BBP register by register's ID & value
612 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
613 { \
614 BBP_CSR_CFG_STRUC BbpCsr; \
615 int BusyCnt; \
616 if ((_A)->bPCIclkOff == FALSE) \
617 { \
618 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
619 { \
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; \
635 } \
636 if (BusyCnt == MAX_BUSY_COUNT) \
637 { \
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); \
642 } \
643 } \
644 }
645 #endif // RT2860 //
646
647
648 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
649 switch (ch) \
650 { \
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; \
701 } \
702 }
703
704 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
705 switch (khz) \
706 { \
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; \
757 } \
758 }
759
760 //
761 // Common fragment list structure - Identical to the scatter gather frag list structure
762 //
763 #define NIC_MAX_PHYS_BUF_COUNT 8
764
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;
770
771
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;
777
778 //
779 // Some utility macros
780 //
781 #ifndef min
782 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
783 #endif
784
785 #ifndef max
786 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
787 #endif
788
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))))
790
791 #define INC_COUNTER64(Val) (Val.QuadPart++)
792
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))
797
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))
801
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) \
804 { \
805 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
806 { \
807 _pExtraLlcSnapEncap = SNAP_802_1H; \
808 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
809 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
810 { \
811 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
812 } \
813 } \
814 else \
815 { \
816 _pExtraLlcSnapEncap = NULL; \
817 } \
818 }
819
820 // New Define for new Tx Path.
821 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
822 { \
823 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
824 { \
825 _pExtraLlcSnapEncap = SNAP_802_1H; \
826 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
827 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
828 { \
829 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
830 } \
831 } \
832 else \
833 { \
834 _pExtraLlcSnapEncap = NULL; \
835 } \
836 }
837
838
839 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
840 { \
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); \
844 }
845
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) \
854 { \
855 char LLC_Len[2]; \
856 \
857 _pRemovedLLCSNAP = NULL; \
858 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
859 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
860 { \
861 PUCHAR pProto = _pData + 6; \
862 \
863 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
864 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
865 { \
866 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
867 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
868 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
869 } \
870 else \
871 { \
872 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
873 _pRemovedLLCSNAP = _pData; \
874 _DataSize -= LENGTH_802_1_H; \
875 _pData += LENGTH_802_1_H; \
876 } \
877 } \
878 else \
879 { \
880 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
881 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
882 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
883 } \
884 }
885
886 #define SWITCH_AB( _pAA, _pBB) \
887 { \
888 PVOID pCC; \
889 pCC = _pBB; \
890 _pBB = _pAA; \
891 _pAA = pCC; \
892 }
893
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) \
899 { \
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); \
904 }
905 #endif // RT2860 //
906
907 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
908 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
909
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)))
912
913 //
914 // Check if it is Japan W53(ch52,56,60,64) channel.
915 //
916 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
917
918 #ifdef CONFIG_STA_SUPPORT
919 #define STA_PORT_SECURED(_pAd) \
920 { \
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); \
925 }
926 #endif // CONFIG_STA_SUPPORT //
927
928
929 //
930 // Register set pair for initialzation register set definition
931 //
932 typedef struct _RTMP_REG_PAIR
933 {
934 ULONG Register;
935 ULONG Value;
936 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
937
938 typedef struct _REG_PAIR
939 {
940 UCHAR Register;
941 UCHAR Value;
942 } REG_PAIR, *PREG_PAIR;
943
944 //
945 // Register set pair for initialzation register set definition
946 //
947 typedef struct _RTMP_RF_REGS
948 {
949 UCHAR Channel;
950 ULONG R1;
951 ULONG R2;
952 ULONG R3;
953 ULONG R4;
954 } RTMP_RF_REGS, *PRTMP_RF_REGS;
955
956 typedef struct _FREQUENCY_ITEM {
957 UCHAR Channel;
958 UCHAR N;
959 UCHAR R;
960 UCHAR K;
961 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
962
963 //
964 // Data buffer for DMA operation, the buffer must be contiguous physical memory
965 // Both DMA to / from CPU use the same structure.
966 //
967 typedef struct _RTMP_DMABUF
968 {
969 ULONG AllocSize;
970 PVOID AllocVa; // TxBuf virtual address
971 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
972 } RTMP_DMABUF, *PRTMP_DMABUF;
973
974
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;
989
990 //
991 // Data buffer for DMA operation, the buffer must be contiguous physical memory
992 // Both DMA to / from CPU use the same structure.
993 //
994 typedef struct _RTMP_REORDERBUF
995 {
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;
1007
1008 //
1009 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1010 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1011 // which won't be released, driver has to wait until upper layer return the packet
1012 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1013 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1014 // which driver should ACK upper layer when the tx is physically done or failed.
1015 //
1016 typedef struct _RTMP_DMACB
1017 {
1018 ULONG AllocSize; // Control block size
1019 PVOID AllocVa; // Control block virtual address
1020 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1021 PNDIS_PACKET pNdisPacket;
1022 PNDIS_PACKET pNextNdisPacket;
1023
1024 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1025 } RTMP_DMACB, *PRTMP_DMACB;
1026
1027 typedef struct _RTMP_TX_BUF
1028 {
1029 PQUEUE_ENTRY Next;
1030 UCHAR Index;
1031 ULONG AllocSize; // Control block size
1032 PVOID AllocVa; // Control block virtual address
1033 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1034 } RTMP_TXBUF, *PRTMP_TXBUF;
1035
1036 typedef struct _RTMP_RX_BUF
1037 {
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
1043 {
1044 RTMP_DMACB Cell[TX_RING_SIZE];
1045 UINT32 TxCpuIdx;
1046 UINT32 TxDmaIdx;
1047 UINT32 TxSwFreeIdx; // software next free tx index
1048 } RTMP_TX_RING, *PRTMP_TX_RING;
1049
1050 typedef struct _RTMP_RX_RING
1051 {
1052 RTMP_DMACB Cell[RX_RING_SIZE];
1053 UINT32 RxCpuIdx;
1054 UINT32 RxDmaIdx;
1055 INT32 RxSwReadIdx; // software next read index
1056 } RTMP_RX_RING, *PRTMP_RX_RING;
1057
1058 typedef struct _RTMP_MGMT_RING
1059 {
1060 RTMP_DMACB Cell[MGMT_RING_SIZE];
1061 UINT32 TxCpuIdx;
1062 UINT32 TxDmaIdx;
1063 UINT32 TxSwFreeIdx; // software next free tx index
1064 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1065
1066 //
1067 // Statistic counter structure
1068 //
1069 typedef struct _COUNTER_802_3
1070 {
1071 // General Stats
1072 ULONG GoodTransmits;
1073 ULONG GoodReceives;
1074 ULONG TxErrors;
1075 ULONG RxErrors;
1076 ULONG RxNoBuffer;
1077
1078 // Ethernet Stats
1079 ULONG RcvAlignmentErrors;
1080 ULONG OneCollision;
1081 ULONG MoreCollisions;
1082
1083 } COUNTER_802_3, *PCOUNTER_802_3;
1084
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;
1101
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;
1116
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;
1123
1124 UINT32 OneSecFrameDuplicateCount;
1125
1126
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;
1156
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;
1166
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;
1173
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;
1186
1187 //
1188 // Arcfour Structure Added by PaulWu
1189 //
1190 typedef struct _ARCFOUR
1191 {
1192 UINT X;
1193 UINT Y;
1194 UCHAR STATE[256];
1195 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1196
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;
1217
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;
1223
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;
1238
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;
1247
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;
1262
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;
1272
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;
1281
1282 typedef struct {
1283 UCHAR RogueApNr;
1284 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1285 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1286
1287 typedef struct {
1288 BOOLEAN Enable;
1289 UCHAR Delta;
1290 BOOLEAN PlusSign;
1291 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1292
1293 //
1294 // Receive Tuple Cache Format
1295 //
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;
1302
1303 //
1304 // Fragment Frame structure
1305 //
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;
1313
1314
1315 //
1316 // Packet information for NdisQueryPacket
1317 //
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;
1324
1325 //
1326 // Tkip Key structure which RC4 key & MIC calculation
1327 //
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;
1340
1341 //
1342 // Private / Misc data, counters for driver internal use
1343 //
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;
1355
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;
1365
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;
1378
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;
1387
1388 typedef enum _ABGBAND_STATE_ {
1389 UNKNOWN_BAND,
1390 BG_BAND,
1391 A_BAND,
1392 } ABGBAND_STATE;
1393
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;
1415
1416
1417 #ifdef QOS_DLS_SUPPORT
1418 STATE_MACHINE DlsMachine;
1419 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1420 #endif // QOS_DLS_SUPPORT //
1421
1422
1423
1424
1425 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1426 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1427 ULONG LastSendNULLpsmTime;
1428
1429 BOOLEAN bRunning;
1430 NDIS_SPIN_LOCK TaskLock;
1431 MLME_QUEUE Queue;
1432
1433 UINT ShiftReg;
1434
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;
1446
1447 UCHAR RealRxPath;
1448 BOOLEAN bLowThroughput;
1449 BOOLEAN bEnableAutoAntennaCheck;
1450 RALINK_TIMER_STRUCT RxAntEvalTimer;
1451
1452
1453 } MLME_STRUCT, *PMLME_STRUCT;
1454
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;
1474
1475 #ifdef CARRIER_DETECTION_SUPPORT
1476 typedef enum CD_STATE_n
1477 {
1478 CD_NORMAL,
1479 CD_SILENCE,
1480 CD_MAX_STATE
1481 } CD_STATE;
1482
1483 typedef struct CARRIER_DETECTION_s
1484 {
1485 BOOLEAN Enable;
1486 UINT8 CDSessionTime;
1487 UINT8 CDPeriod;
1488 CD_STATE CD_State;
1489 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1490 #endif // CARRIER_DETECTION_SUPPORT //
1491
1492 typedef enum _REC_BLOCKACK_STATUS
1493 {
1494 Recipient_NONE=0,
1495 Recipient_USED,
1496 Recipient_HandleRes,
1497 Recipient_Accept
1498 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1499
1500 typedef enum _ORI_BLOCKACK_STATUS
1501 {
1502 Originator_NONE=0,
1503 Originator_USED,
1504 Originator_WaitRes,
1505 Originator_Done
1506 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1507
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;
1521
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;
1537
1538
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;
1545
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;
1554
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;
1563
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;
1570
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 //
1604
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;
1626
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;
1656
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;
1675
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;
1684
1685 //
1686 // Multiple SSID structure
1687 //
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 */
1690
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];
1694
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];
1698
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]); }
1704
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]; }
1710
1711
1712 typedef struct _MULTISSID_STRUCT {
1713 UCHAR Bssid[MAC_ADDR_LEN];
1714 UCHAR SsidLen;
1715 CHAR Ssid[MAX_LEN_OF_SSID];
1716 USHORT CapabilityInfo;
1717
1718 PNET_DEV MSSIDDev;
1719
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;
1724
1725 ULONG TxCount;
1726 ULONG RxCount;
1727 ULONG ReceivedByteCount;
1728 ULONG TransmittedByteCount;
1729 ULONG RxErrorCount;
1730 ULONG RxDropCount;
1731
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;
1736
1737 UCHAR DefaultKeyId;
1738
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
1743
1744 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1745
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;
1757
1758 UCHAR RSNIE_Len[2];
1759 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1760
1761
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
1767
1768 BOOLEAN bHideSsid;
1769 UINT16 StationKeepAliveTime; // unit: second
1770
1771 USHORT VLAN_VID;
1772 USHORT VLAN_Priority;
1773
1774 RT_802_11_ACL AccessControlList;
1775
1776 // EDCA Qos
1777 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1778 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1779
1780 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1781
1782 // For 802.1x daemon setting per BSS
1783 UCHAR radius_srv_num;
1784 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1785
1786 #ifdef RTL865X_SOC
1787 unsigned int mylinkid;
1788 #endif
1789
1790
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;
1801
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;
1812
1813 BOOLEAN bBcnSntReq;
1814 UCHAR BcnBufIdx;
1815 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1816
1817
1818
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 //
1827
1828 // configuration common to OPMODE_AP as well as OPMODE_STA
1829 typedef struct _COMMON_CONFIG {
1830
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
1839
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];
1845
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.
1850
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];
1858
1859 ULONG BasicRateBitmap; // backup basic ratebitmap
1860
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
1882
1883 USHORT RtsThreshold; // in unit of BYTE
1884 USHORT FragmentThreshold; // in unit of BYTE
1885
1886 UCHAR TxPower; // in unit of mW
1887 ULONG TxPowerPercentage; // 0~100 %
1888 ULONG TxPowerDefault; // keep for TxPowerPercentage
1889
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
1904
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;
1921
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.
1924
1925 // IEEE802.11H--DFS.
1926 RADAR_DETECT_STRUCT RadarDetect;
1927
1928 #ifdef CARRIER_DETECTION_SUPPORT
1929 CARRIER_DETECTION CarrierDetect;
1930 #endif // CARRIER_DETECTION_SUPPORT //
1931
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
1942
1943 #ifdef DOT11N_DRAFT3
1944 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1945 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1946
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
1957
1958 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1959 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1960
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 //
1969
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;
1978
1979 UCHAR TxBASize;
1980 #endif // DOT11_N_SUPPORT //
1981
1982 // Enable wireless event
1983 BOOLEAN bWirelessEvent;
1984 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1985
1986 // Tx & Rx Stream number selection
1987 UCHAR TxStream;
1988 UCHAR RxStream;
1989
1990 // transmit phy mode, trasmit rate for Multicast.
1991 #ifdef MCAST_RATE_SPECIFIC
1992 UCHAR McastTransmitMcs;
1993 UCHAR McastTransmitPhyMode;
1994 #endif // MCAST_RATE_SPECIFIC //
1995
1996 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1997
1998
1999
2000 NDIS_SPIN_LOCK MeasureReqTabLock;
2001 PMEASURE_REQ_TAB pMeasureReqTab;
2002
2003 NDIS_SPIN_LOCK TpcReqTabLock;
2004 PTPC_REQ_TAB pTpcReqTab;
2005
2006 // transmit phy mode, trasmit rate for Multicast.
2007 #ifdef MCAST_RATE_SPECIFIC
2008 HTTRANSMIT_SETTING MCastPhyMode;
2009 #endif // MCAST_RATE_SPECIFIC //
2010
2011 #ifdef SINGLE_SKU
2012 UINT16 DefineMaxTxPwr;
2013 #endif // SINGLE_SKU //
2014
2015
2016 } COMMON_CONFIG, *PCOMMON_CONFIG;
2017
2018
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
2031
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
2045
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];
2054
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
2059
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;
2065
2066 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2067
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
2073
2074 UCHAR DefaultKeyId;
2075
2076
2077 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2078 UCHAR PortSecured;
2079
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
2089
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;
2094
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
2099
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
2107
2108 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2109 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2110 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2111
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];
2119
2120 UCHAR RSNIE_Len;
2121 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2122
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];
2137
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
2142
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
2172
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.
2186
2187 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2188 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2189
2190 UCHAR DtimCount; // 0.. DtimPeriod-1
2191 UCHAR DtimPeriod; // default = 3
2192
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 ////////////////////////////////////////////////////////////////////////////////////////
2201
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.
2206
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;
2212
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 //
2219
2220 CHAR dev_name[16];
2221 USHORT OriDevType;
2222
2223 BOOLEAN bTGnWifiTest;
2224 BOOLEAN bScanReqIsFromWebUI;
2225
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;
2230
2231 #ifdef RT2860
2232 UCHAR BBPR3;
2233 #endif // RT2860 //
2234
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;
2241
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;
2254
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 //
2266
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;
2274
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;
2280
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.
2290
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];
2314
2315
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;
2328
2329 UINT32 StaConnectTime; // the live time of this station since associated with AP
2330
2331
2332 #ifdef DOT11_N_SUPPORT
2333 BOOLEAN bSendBAR;
2334 USHORT NoBADataCountDown;
2335
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;
2343
2344
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 //====================================================
2361
2362
2363
2364 #ifdef CONFIG_STA_SUPPORT
2365 #ifdef QOS_DLS_SUPPORT
2366 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2367 #endif // QOS_DLS_SUPPORT //
2368 #endif // CONFIG_STA_SUPPORT //
2369
2370 BOOLEAN fNoisyEnvironment;
2371 BOOLEAN fLastSecAccordingRSSI;
2372 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2373 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2374 ULONG LastTxOkCount;
2375 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2376
2377 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2378 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2379 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2380 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2381 ULONG ClientStatusFlags;
2382
2383 // TODO: Shall we move that to DOT11_N_SUPPORT???
2384 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2385
2386 #ifdef DOT11_N_SUPPORT
2387 // HT EWC MIMO-N used parameters
2388 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2389 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2390 USHORT TXAutoBAbitmap;
2391 USHORT BADeclineBitmap;
2392 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2393 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2394 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2395
2396 // 802.11n features.
2397 UCHAR MpduDensity;
2398 UCHAR MaxRAmpduFactor;
2399 UCHAR AMsduSize;
2400 UCHAR MmpsMode; // MIMO power save more.
2401
2402 HT_CAPABILITY_IE HTCapability;
2403
2404 #ifdef DOT11N_DRAFT3
2405 UCHAR BSS2040CoexistenceMgmtSupport;
2406 #endif // DOT11N_DRAFT3 //
2407 #endif // DOT11_N_SUPPORT //
2408
2409 BOOLEAN bAutoTxRateSwitch;
2410
2411 UCHAR RateLen;
2412 struct _MAC_TABLE_ENTRY *pNext;
2413 USHORT TxSeq[NUM_OF_TID];
2414 USHORT NonQosDataSeq;
2415
2416 RSSI_SAMPLE RssiSample;
2417
2418 UINT32 TXMCSExpected[16];
2419 UINT32 TXMCSSuccessful[16];
2420 UINT32 TXMCSFailed[16];
2421 UINT32 TXMCSAutoFallBack[16][16];
2422 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2423
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;
2441
2442 #ifdef DOT11_N_SUPPORT
2443 #define IS_HT_STA(_pMacEntry) \
2444 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2445
2446 #define IS_HT_RATE(_pMacEntry) \
2447 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2448
2449 #define PEER_IS_HT_RATE(_pMacEntry) \
2450 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2451 #endif // DOT11_N_SUPPORT //
2452
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;
2459
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;
2474
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;
2489
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;
2495
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];
2506
2507 UCHAR CfgSsidLen;
2508 CHAR CfgSsid[MAX_LEN_OF_SSID];
2509 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2510 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2511
2512 ULONG ApCliRcvBeaconTime;
2513
2514 ULONG CtrlCurrState;
2515 ULONG SyncCurrState;
2516 ULONG AuthCurrState;
2517 ULONG AssocCurrState;
2518 ULONG WpaPskCurrState;
2519
2520 USHORT AuthReqCnt;
2521 USHORT AssocReqCnt;
2522
2523 ULONG ClientStatusFlags;
2524 UCHAR MpduDensity;
2525
2526 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2527 NDIS_802_11_WEP_STATUS WepStatus;
2528
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;
2534
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
2539
2540 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2541 UCHAR DefaultKeyId;
2542
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;
2546
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.
2550
2551 // For WPA-PSK supplicant state
2552 UCHAR SNonce[32]; // SNonce for WPA-PSK
2553 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2554
2555 #ifdef WSC_AP_SUPPORT
2556 WSC_CTRL WscControl;
2557 #endif // WSC_AP_SUPPORT //
2558
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;
2564
2565 // ----------- end of AP ----------------------------
2566
2567 #ifdef BLOCK_NET_IF
2568 typedef struct _BLOCK_QUEUE_ENTRY
2569 {
2570 BOOLEAN SwTxQueueBlockFlag;
2571 LIST_HEADER NetIfList;
2572 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2573 #endif // BLOCK_NET_IF //
2574
2575 struct wificonf
2576 {
2577 BOOLEAN bShortGI;
2578 BOOLEAN bGreenField;
2579 };
2580
2581
2582
2583
2584 typedef struct _INF_PCI_CONFIG
2585 {
2586 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2587 }INF_PCI_CONFIG;
2588
2589 typedef struct _INF_USB_CONFIG
2590 {
2591 UINT BulkInEpAddr; // bulk-in endpoint address
2592 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2593
2594 }INF_USB_CONFIG;
2595
2596 #ifdef IKANOS_VX_1X0
2597 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2598
2599 struct IKANOS_TX_INFO
2600 {
2601 struct net_device *netdev;
2602 IkanosWlanTxCbFuncP *fp;
2603 };
2604 #endif // IKANOS_VX_1X0 //
2605
2606 #ifdef NINTENDO_AP
2607 typedef struct _NINDO_CTRL_BLOCK {
2608
2609 RT_NINTENDO_TABLE DS_TABLE;
2610
2611 #ifdef CHIP25XX
2612 spinlock_t NINTENDO_TABLE_Lock;
2613 #else
2614 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
2615 #endif // CHIP25XX //
2616
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 //
2626
2627
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
2642
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.
2648
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 //
2655
2656
2657 //
2658 // The miniport adapter structure
2659 //
2660 typedef struct _RTMP_ADAPTER
2661 {
2662 PVOID OS_Cookie; // save specific structure relative to OS
2663 PNET_DEV net_dev;
2664 ULONG VirtualIfCnt;
2665
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; //
2675
2676
2677 /*****************************************************************************************/
2678 /* PCI related parameters */
2679 /*****************************************************************************************/
2680 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2681
2682 UINT int_enable_reg;
2683 UINT int_disable_mask;
2684 UINT int_pending;
2685
2686
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 //
2692
2693
2694 NDIS_SPIN_LOCK irq_lock;
2695 UCHAR irq_disabled;
2696
2697
2698
2699 /*****************************************************************************************/
2700 /* Both PCI/USB related parameters */
2701 /*****************************************************************************************/
2702
2703
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];
2709
2710
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
2714
2715 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2716 RTMP_MGMT_RING MgmtRing;
2717 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2718
2719
2720 /*****************************************************************************************/
2721 /* Rx related parameters */
2722 /*****************************************************************************************/
2723
2724 #ifdef RT2860
2725 RTMP_RX_RING RxRing;
2726 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2727 #endif // RT2860 //
2728
2729
2730
2731 /*****************************************************************************************/
2732 /* ASIC related parameters */
2733 /*****************************************************************************************/
2734 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2735
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.
2743
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;
2750
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
2757
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;
2760
2761 // This soft Rx Antenna Diversity mechanism is used only when user set
2762 // RX Antenna = DIVERSITY ON
2763 SOFT_RX_ANT_DIVERSITY RxAnt;
2764
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
2770
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];
2778
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))
2785
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))
2792
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 //---
2798
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 //---
2804
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
2809
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;
2821
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];
2829
2830 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2831 PSPOLL_FRAME PsPollFrame;
2832 HEADER_802_11 NullFrame;
2833
2834 //=========AP===========
2835
2836
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 //
2849
2850 //=======Common===========
2851 // OP mode: either AP or STA
2852 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2853
2854 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2855
2856 // MAT related parameters
2857
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
2862
2863 // ------------------------------------------------------
2864 // common configuration to both OPMODE_STA and OPMODE_AP
2865 // ------------------------------------------------------
2866 COMMON_CONFIG CommonCfg;
2867 MLME_STRUCT Mlme;
2868
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
2872
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;
2876
2877 #ifdef DOT11_N_SUPPORT
2878 BA_TABLE BATable;
2879 #endif // DOT11_N_SUPPORT //
2880 NDIS_SPIN_LOCK BATabLock;
2881 RALINK_TIMER_STRUCT RECBATimer;
2882
2883 // encryption/decryption KEY tables
2884 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2885
2886 // RX re-assembly buffer for fragmentation
2887 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2888
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
2895
2896 // flags, see fRTMP_ADAPTER_xxx flags
2897 ULONG Flags; // Represent current device status
2898
2899 // current TX sequence #
2900 USHORT Sequence;
2901
2902 #ifdef UNDER_CE
2903 NDIS_HANDLE hGiISR;
2904 #endif
2905
2906
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 //---
2916
2917 ULONG ExtraInfo; // Extra information for displaying status
2918 ULONG SystemErrorBitmap; // b0: E2PROM version error
2919
2920 //+++Didn't used anymore
2921 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2922 //---
2923
2924 // ---------------------------
2925 // System event log
2926 // ---------------------------
2927 RT_802_11_EVENT_TABLE EventTab;
2928
2929
2930 BOOLEAN HTCEnable;
2931
2932 /*****************************************************************************************/
2933 /* Statistic related parameters */
2934 /*****************************************************************************************/
2935
2936 BOOLEAN bUpdateBcnCntDone;
2937 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2938 // ----------------------------
2939 // DEBUG paramerts
2940 // ----------------------------
2941 BOOLEAN bBanAllBaSetup;
2942 BOOLEAN bPromiscuous;
2943
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 //---
2971
2972 struct wificonf WIFItestbed;
2973
2974 #ifdef RALINK_ATE
2975 ATE_INFO ate;
2976 #endif // RALINK_ATE //
2977
2978 #ifdef DOT11_N_SUPPORT
2979 struct reordering_mpdu_pool mpdu_blk_pool;
2980 #endif // DOT11_N_SUPPORT //
2981
2982 ULONG OneSecondnonBEpackets; // record non BE packets per second
2983
2984 #if WIRELESS_EXT >= 12
2985 struct iw_statistics iw_stats;
2986 #endif
2987
2988 struct net_device_stats stats;
2989
2990 #ifdef BLOCK_NET_IF
2991 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
2992 #endif // BLOCK_NET_IF //
2993
2994
2995
2996 #ifdef MULTIPLE_CARD_SUPPORT
2997 INT32 MC_RowID;
2998 UCHAR MC_FileName[256];
2999 #endif // MULTIPLE_CARD_SUPPORT //
3000
3001 ULONG TbttTickCount;
3002 #ifdef PCI_MSI_SUPPORT
3003 BOOLEAN HaveMsi;
3004 #endif // PCI_MSI_SUPPORT //
3005
3006
3007 UCHAR is_on;
3008
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;
3013
3014 #ifdef NINTENDO_AP
3015 NINDO_CTRL_BLOCK nindo_ctrl_block;
3016 #endif // NINTENDO_AP //
3017
3018
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 //
3023
3024
3025 #ifdef DBG_DIAGNOSE
3026 RtmpDiagStruct DiagStruct;
3027 #endif // DBG_DIAGNOSE //
3028
3029
3030 UINT8 PM_FlgSuspend;
3031 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3032
3033 //
3034 // Cisco IAPP format
3035 //
3036 typedef struct _CISCO_IAPP_CONTENT_
3037 {
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;
3052
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
3067
3068
3069 typedef struct _RX_BLK_
3070 {
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;
3080
3081
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))
3085
3086
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
3100
3101 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3102 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3103 #define LENGTH_ARALINK_HEADER_FIELD 2
3104
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
3112
3113
3114 // Currently the sizeof(TX_BLK) is 148 bytes.
3115 typedef struct _TX_BLK_
3116 {
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
3122
3123 QUEUE_HEADER TxPacketList;
3124 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3125 HTTRANSMIT_SETTING *pTransmit;
3126
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;
3144
3145
3146
3147 USHORT Flags; //See following definitions for detail.
3148
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;
3152
3153
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
3162
3163 #define fTX_bClearEAPFrame 0x0100
3164
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)
3172
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))
3176
3177
3178
3179
3180
3181 //------------------------------------------------------------------------------------------
3182
3183
3184 #ifdef RT2860
3185 //
3186 // Enable & Disable NIC interrupt via writing interrupt mask register
3187 // Since it use ADAPTER structure, it have to be put after structure definition.
3188 //
3189 __inline VOID NICDisableInterrupt(
3190 IN PRTMP_ADAPTER pAd)
3191 {
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);
3195 }
3196
3197 __inline VOID NICEnableInterrupt(
3198 IN PRTMP_ADAPTER pAd)
3199 {
3200 //
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.
3204 //
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))
3208 {
3209 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3210 }
3211 //else
3212 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3213
3214 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3215 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3216 }
3217 #endif // RT2860 //
3218
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)
3225 {
3226 UINT32 *p1, *p2;
3227
3228 p1 = ((UINT32 *)Dest);
3229 p2 = ((UINT32 *)Src);
3230
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
3235 }
3236
3237 /*
3238 ========================================================================
3239
3240 Routine Description:
3241 Endian conversion of Tx/Rx descriptor .
3242
3243 Arguments:
3244 pAd Pointer to our adapter
3245 pData Pointer to Tx/Rx descriptor
3246 DescriptorType Direction of the frame
3247
3248 Return Value:
3249 None
3250
3251 Note:
3252 Call this function when read or update descriptor
3253 ========================================================================
3254 */
3255 static inline VOID RTMPWIEndianChange(
3256 IN PUCHAR pData,
3257 IN ULONG DescriptorType)
3258 {
3259 int size;
3260 int i;
3261
3262 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3263
3264 if(DescriptorType == TYPE_TXWI)
3265 {
3266 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3267 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3268 }
3269 else
3270 {
3271 for(i=0; i < size/4 ; i++)
3272 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3273 }
3274 }
3275
3276 /*
3277 ========================================================================
3278
3279 Routine Description:
3280 Endian conversion of Tx/Rx descriptor .
3281
3282 Arguments:
3283 pAd Pointer to our adapter
3284 pData Pointer to Tx/Rx descriptor
3285 DescriptorType Direction of the frame
3286
3287 Return Value:
3288 None
3289
3290 Note:
3291 Call this function when read or update descriptor
3292 ========================================================================
3293 */
3294 #ifdef RT2860
3295 static inline VOID RTMPDescriptorEndianChange(
3296 IN PUCHAR pData,
3297 IN ULONG DescriptorType)
3298 {
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
3303 }
3304 #endif // RT2860 //
3305
3306 /*
3307 ========================================================================
3308
3309 Routine Description:
3310 Endian conversion of all kinds of 802.11 frames .
3311
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
3317
3318 Return Value:
3319 None
3320
3321 Note:
3322 Call this function when read or update buffer data
3323 ========================================================================
3324 */
3325 static inline VOID RTMPFrameEndianChange(
3326 IN PRTMP_ADAPTER pAd,
3327 IN PUCHAR pData,
3328 IN ULONG Dir,
3329 IN BOOLEAN FromRxDoneInt)
3330 {
3331 PHEADER_802_11 pFrame;
3332 PUCHAR pMacHdr;
3333
3334 // swab 16 bit fields - Frame Control field
3335 if(Dir == DIR_READ)
3336 {
3337 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3338 }
3339
3340 pFrame = (PHEADER_802_11) pData;
3341 pMacHdr = (PUCHAR) pFrame;
3342
3343 // swab 16 bit fields - Duration/ID field
3344 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3345
3346 // swab 16 bit fields - Sequence Control field
3347 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3348
3349 if(pFrame->FC.Type == BTYPE_MGMT)
3350 {
3351 switch(pFrame->FC.SubType)
3352 {
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);
3358
3359 // swab 16 bit fields - Listen Interval field
3360 pMacHdr += 2;
3361 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3362 break;
3363
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);
3369
3370 // swab 16 bit fields - Status Code field
3371 pMacHdr += 2;
3372 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3373
3374 // swab 16 bit fields - AID field
3375 pMacHdr += 2;
3376 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3377 break;
3378
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
3385 {
3386 // swab 16 bit fields - Auth Alg No. field
3387 pMacHdr += sizeof(HEADER_802_11);
3388 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3389
3390 // swab 16 bit fields - Auth Seq No. field
3391 pMacHdr += 2;
3392 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3393
3394 // swab 16 bit fields - Status Code field
3395 pMacHdr += 2;
3396 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3397 }
3398 break;
3399
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);
3405
3406 // swab 16 bit fields - CapabilityInfo field
3407 pMacHdr += sizeof(USHORT);
3408 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3409 break;
3410
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;
3417 }
3418 }
3419 else if( pFrame->FC.Type == BTYPE_DATA )
3420 {
3421 }
3422 else if(pFrame->FC.Type == BTYPE_CNTL)
3423 {
3424 switch(pFrame->FC.SubType)
3425 {
3426 case SUBTYPE_BLOCK_ACK_REQ:
3427 {
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);
3431 }
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;
3437
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;
3442 }
3443 }
3444 else
3445 {
3446 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3447 }
3448
3449 // swab 16 bit fields - Frame Control
3450 if(Dir == DIR_WRITE)
3451 {
3452 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3453 }
3454 }
3455 #endif // RT_BIG_ENDIAN //
3456
3457
3458 static inline VOID ConvertMulticastIP2MAC(
3459 IN PUCHAR pIpAddr,
3460 IN PUCHAR *ppMacAddr,
3461 IN UINT16 ProtoType)
3462 {
3463 if (pIpAddr == NULL)
3464 return;
3465
3466 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3467 return;
3468
3469 switch (ProtoType)
3470 {
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;
3480
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;
3491 }
3492
3493 return;
3494 }
3495
3496 BOOLEAN RTMPCheckForHang(
3497 IN NDIS_HANDLE MiniportAdapterContext
3498 );
3499
3500 VOID RTMPHalt(
3501 IN NDIS_HANDLE MiniportAdapterContext
3502 );
3503
3504 //
3505 // Private routines in rtmp_init.c
3506 //
3507 NDIS_STATUS RTMPAllocAdapterBlock(
3508 IN PVOID handle,
3509 OUT PRTMP_ADAPTER *ppAdapter
3510 );
3511
3512 NDIS_STATUS RTMPAllocTxRxRingMemory(
3513 IN PRTMP_ADAPTER pAd
3514 );
3515
3516 NDIS_STATUS RTMPFindAdapter(
3517 IN PRTMP_ADAPTER pAd,
3518 IN NDIS_HANDLE WrapperConfigurationContext
3519 );
3520
3521 NDIS_STATUS RTMPReadParametersHook(
3522 IN PRTMP_ADAPTER pAd
3523 );
3524
3525 VOID RTMPFreeAdapter(
3526 IN PRTMP_ADAPTER pAd
3527 );
3528
3529 NDIS_STATUS NICReadRegParameters(
3530 IN PRTMP_ADAPTER pAd,
3531 IN NDIS_HANDLE WrapperConfigurationContext
3532 );
3533
3534
3535 VOID NICReadEEPROMParameters(
3536 IN PRTMP_ADAPTER pAd,
3537 IN PUCHAR mac_addr);
3538
3539 VOID NICInitAsicFromEEPROM(
3540 IN PRTMP_ADAPTER pAd);
3541
3542 VOID NICInitTxRxRingAndBacklogQueue(
3543 IN PRTMP_ADAPTER pAd);
3544
3545 NDIS_STATUS NICInitializeAdapter(
3546 IN PRTMP_ADAPTER pAd,
3547 IN BOOLEAN bHardReset);
3548
3549 NDIS_STATUS NICInitializeAsic(
3550 IN PRTMP_ADAPTER pAd,
3551 IN BOOLEAN bHardReset);
3552
3553 VOID NICIssueReset(
3554 IN PRTMP_ADAPTER pAd);
3555
3556 VOID RTMPRingCleanUp(
3557 IN PRTMP_ADAPTER pAd,
3558 IN UCHAR RingType);
3559
3560 VOID RxTest(
3561 IN PRTMP_ADAPTER pAd);
3562
3563 NDIS_STATUS DbgSendPacket(
3564 IN PRTMP_ADAPTER pAd,
3565 IN PNDIS_PACKET pPacket);
3566
3567 VOID UserCfgInit(
3568 IN PRTMP_ADAPTER pAd);
3569
3570 VOID NICResetFromError(
3571 IN PRTMP_ADAPTER pAd);
3572
3573 VOID NICEraseFirmware(
3574 IN PRTMP_ADAPTER pAd);
3575
3576 NDIS_STATUS NICLoadFirmware(
3577 IN PRTMP_ADAPTER pAd);
3578
3579 NDIS_STATUS NICLoadRateSwitchingParams(
3580 IN PRTMP_ADAPTER pAd);
3581
3582 BOOLEAN NICCheckForHang(
3583 IN PRTMP_ADAPTER pAd);
3584
3585 VOID NICUpdateFifoStaCounters(
3586 IN PRTMP_ADAPTER pAd);
3587
3588 VOID NICUpdateRawCounters(
3589 IN PRTMP_ADAPTER pAd);
3590
3591 ULONG RTMPNotAllZero(
3592 IN PVOID pSrc1,
3593 IN ULONG Length);
3594
3595 VOID RTMPZeroMemory(
3596 IN PVOID pSrc,
3597 IN ULONG Length);
3598
3599 ULONG RTMPCompareMemory(
3600 IN PVOID pSrc1,
3601 IN PVOID pSrc2,
3602 IN ULONG Length);
3603
3604 VOID RTMPMoveMemory(
3605 OUT PVOID pDest,
3606 IN PVOID pSrc,
3607 IN ULONG Length);
3608
3609 VOID AtoH(
3610 char *src,
3611 UCHAR *dest,
3612 int destlen);
3613
3614 UCHAR BtoH(
3615 char ch);
3616
3617 VOID RTMPPatchMacBbpBug(
3618 IN PRTMP_ADAPTER pAd);
3619
3620 VOID RTMPPatchCardBus(
3621 IN PRTMP_ADAPTER pAdapter);
3622
3623 VOID RTMPPatchRalinkCardBus(
3624 IN PRTMP_ADAPTER pAdapter,
3625 IN ULONG Bus);
3626
3627 ULONG RTMPReadCBConfig(
3628 IN ULONG Bus,
3629 IN ULONG Slot,
3630 IN ULONG Func,
3631 IN ULONG Offset);
3632
3633 VOID RTMPWriteCBConfig(
3634 IN ULONG Bus,
3635 IN ULONG Slot,
3636 IN ULONG Func,
3637 IN ULONG Offset,
3638 IN ULONG Value);
3639
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);
3646
3647 VOID RTMPSetTimer(
3648 IN PRALINK_TIMER_STRUCT pTimer,
3649 IN ULONG Value);
3650
3651
3652 VOID RTMPModTimer(
3653 IN PRALINK_TIMER_STRUCT pTimer,
3654 IN ULONG Value);
3655
3656 VOID RTMPCancelTimer(
3657 IN PRALINK_TIMER_STRUCT pTimer,
3658 OUT BOOLEAN *pCancelled);
3659
3660 VOID RTMPSetLED(
3661 IN PRTMP_ADAPTER pAd,
3662 IN UCHAR Status);
3663
3664 VOID RTMPSetSignalLED(
3665 IN PRTMP_ADAPTER pAd,
3666 IN NDIS_802_11_RSSI Dbm);
3667
3668 VOID RTMPEnableRxTx(
3669 IN PRTMP_ADAPTER pAd);
3670
3671 //
3672 // prototype in action.c
3673 //
3674 VOID ActionStateMachineInit(
3675 IN PRTMP_ADAPTER pAd,
3676 IN STATE_MACHINE *S,
3677 OUT STATE_MACHINE_FUNC Trans[]);
3678
3679 VOID MlmeADDBAAction(
3680 IN PRTMP_ADAPTER pAd,
3681 IN MLME_QUEUE_ELEM *Elem);
3682
3683 VOID MlmeDELBAAction(
3684 IN PRTMP_ADAPTER pAd,
3685 IN MLME_QUEUE_ELEM *Elem);
3686
3687 VOID MlmeDLSAction(
3688 IN PRTMP_ADAPTER pAd,
3689 IN MLME_QUEUE_ELEM *Elem);
3690
3691 VOID MlmeInvalidAction(
3692 IN PRTMP_ADAPTER pAd,
3693 IN MLME_QUEUE_ELEM *Elem);
3694
3695 VOID MlmeQOSAction(
3696 IN PRTMP_ADAPTER pAd,
3697 IN MLME_QUEUE_ELEM *Elem);
3698
3699 #ifdef DOT11_N_SUPPORT
3700 VOID PeerAddBAReqAction(
3701 IN PRTMP_ADAPTER pAd,
3702 IN MLME_QUEUE_ELEM *Elem);
3703
3704 VOID PeerAddBARspAction(
3705 IN PRTMP_ADAPTER pAd,
3706 IN MLME_QUEUE_ELEM *Elem);
3707
3708 VOID PeerDelBAAction(
3709 IN PRTMP_ADAPTER pAd,
3710 IN MLME_QUEUE_ELEM *Elem);
3711
3712 VOID PeerBAAction(
3713 IN PRTMP_ADAPTER pAd,
3714 IN MLME_QUEUE_ELEM *Elem);
3715 #endif // DOT11_N_SUPPORT //
3716
3717 VOID SendPSMPAction(
3718 IN PRTMP_ADAPTER pAd,
3719 IN UCHAR Wcid,
3720 IN UCHAR Psmp);
3721
3722
3723 #ifdef DOT11N_DRAFT3
3724 VOID SendBSS2040CoexistMgmtAction(
3725 IN PRTMP_ADAPTER pAd,
3726 IN UCHAR Wcid,
3727 IN UCHAR apidx,
3728 IN UCHAR InfoReq);
3729
3730 VOID SendNotifyBWActionFrame(
3731 IN PRTMP_ADAPTER pAd,
3732 IN UCHAR Wcid,
3733 IN UCHAR apidx);
3734
3735 BOOLEAN ChannelSwitchSanityCheck(
3736 IN PRTMP_ADAPTER pAd,
3737 IN UCHAR Wcid,
3738 IN UCHAR NewChannel,
3739 IN UCHAR Secondary);
3740
3741 VOID ChannelSwitchAction(
3742 IN PRTMP_ADAPTER pAd,
3743 IN UCHAR Wcid,
3744 IN UCHAR Channel,
3745 IN UCHAR Secondary);
3746
3747 ULONG BuildIntolerantChannelRep(
3748 IN PRTMP_ADAPTER pAd,
3749 IN PUCHAR pDest);
3750
3751 VOID Update2040CoexistFrameAndNotify(
3752 IN PRTMP_ADAPTER pAd,
3753 IN UCHAR Wcid,
3754 IN BOOLEAN bAddIntolerantCha);
3755
3756 VOID Send2040CoexistAction(
3757 IN PRTMP_ADAPTER pAd,
3758 IN UCHAR Wcid,
3759 IN BOOLEAN bAddIntolerantCha);
3760 #endif // DOT11N_DRAFT3 //
3761
3762 VOID PeerRMAction(
3763 IN PRTMP_ADAPTER pAd,
3764 IN MLME_QUEUE_ELEM *Elem);
3765
3766 VOID PeerPublicAction(
3767 IN PRTMP_ADAPTER pAd,
3768 IN MLME_QUEUE_ELEM *Elem);
3769
3770 #ifdef CONFIG_STA_SUPPORT
3771 VOID StaPublicAction(
3772 IN PRTMP_ADAPTER pAd,
3773 IN UCHAR Bss2040Coexist);
3774 #endif // CONFIG_STA_SUPPORT //
3775
3776
3777 VOID PeerBSSTranAction(
3778 IN PRTMP_ADAPTER pAd,
3779 IN MLME_QUEUE_ELEM *Elem);
3780
3781 #ifdef DOT11_N_SUPPORT
3782 VOID PeerHTAction(
3783 IN PRTMP_ADAPTER pAd,
3784 IN MLME_QUEUE_ELEM *Elem);
3785 #endif // DOT11_N_SUPPORT //
3786
3787 VOID PeerQOSAction(
3788 IN PRTMP_ADAPTER pAd,
3789 IN MLME_QUEUE_ELEM *Elem);
3790
3791 #ifdef QOS_DLS_SUPPORT
3792 VOID PeerDLSAction(
3793 IN PRTMP_ADAPTER pAd,
3794 IN MLME_QUEUE_ELEM *Elem);
3795 #endif // QOS_DLS_SUPPORT //
3796
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 //
3806
3807 #ifdef DOT11_N_SUPPORT
3808 VOID RECBATimerTimeout(
3809 IN PVOID SystemSpecific1,
3810 IN PVOID FunctionContext,
3811 IN PVOID SystemSpecific2,
3812 IN PVOID SystemSpecific3);
3813
3814 VOID ORIBATimerTimeout(
3815 IN PRTMP_ADAPTER pAd);
3816
3817 VOID SendRefreshBAR(
3818 IN PRTMP_ADAPTER pAd,
3819 IN MAC_TABLE_ENTRY *pEntry);
3820 #endif // DOT11_N_SUPPORT //
3821
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);
3828
3829 VOID BarHeaderInit(
3830 IN PRTMP_ADAPTER pAd,
3831 IN OUT PFRAME_BAR pCntlBar,
3832 IN PUCHAR pDA,
3833 IN PUCHAR pSA);
3834
3835 VOID InsertActField(
3836 IN PRTMP_ADAPTER pAd,
3837 OUT PUCHAR pFrameBuf,
3838 OUT PULONG pFrameLen,
3839 IN UINT8 Category,
3840 IN UINT8 ActCode);
3841
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);
3852
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);
3859
3860 VOID BaAutoManSwitch(
3861 IN PRTMP_ADAPTER pAd);
3862 #endif // DOT11_N_SUPPORT //
3863
3864 VOID HTIOTCheck(
3865 IN PRTMP_ADAPTER pAd,
3866 IN UCHAR BatRecIdx);
3867
3868 //
3869 // Private routines in rtmp_data.c
3870 //
3871 BOOLEAN RTMPHandleRxDoneInterrupt(
3872 IN PRTMP_ADAPTER pAd);
3873
3874 VOID RTMPHandleTxDoneInterrupt(
3875 IN PRTMP_ADAPTER pAd);
3876
3877 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3878 IN PRTMP_ADAPTER pAd,
3879 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3880
3881 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3882 IN PRTMP_ADAPTER pAd);
3883
3884 VOID RTMPHandleTBTTInterrupt(
3885 IN PRTMP_ADAPTER pAd);
3886
3887 VOID RTMPHandlePreTBTTInterrupt(
3888 IN PRTMP_ADAPTER pAd);
3889
3890 void RTMPHandleTwakeupInterrupt(
3891 IN PRTMP_ADAPTER pAd);
3892
3893 VOID RTMPHandleRxCoherentInterrupt(
3894 IN PRTMP_ADAPTER pAd);
3895
3896 BOOLEAN TxFrameIsAggregatible(
3897 IN PRTMP_ADAPTER pAd,
3898 IN PUCHAR pPrevAddr1,
3899 IN PUCHAR p8023hdr);
3900
3901 BOOLEAN PeerIsAggreOn(
3902 IN PRTMP_ADAPTER pAd,
3903 IN ULONG TxRate,
3904 IN PMAC_TABLE_ENTRY pMacEntry);
3905
3906 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3907 IN PNDIS_BUFFER pFirstBuffer,
3908 IN UCHAR DesiredOffset,
3909 OUT PUCHAR pByte0,
3910 OUT PUCHAR pByte1);
3911
3912 NDIS_STATUS STASendPacket(
3913 IN PRTMP_ADAPTER pAd,
3914 IN PNDIS_PACKET pPacket);
3915
3916 VOID STASendPackets(
3917 IN NDIS_HANDLE MiniportAdapterContext,
3918 IN PPNDIS_PACKET ppPacketArray,
3919 IN UINT NumberOfPackets);
3920
3921 VOID RTMPDeQueuePacket(
3922 IN PRTMP_ADAPTER pAd,
3923 IN BOOLEAN bIntContext,
3924 IN UCHAR QueIdx,
3925 IN UCHAR Max_Tx_Packets);
3926
3927 NDIS_STATUS RTMPHardTransmit(
3928 IN PRTMP_ADAPTER pAd,
3929 IN PNDIS_PACKET pPacket,
3930 IN UCHAR QueIdx,
3931 OUT PULONG pFreeTXDLeft);
3932
3933 NDIS_STATUS STAHardTransmit(
3934 IN PRTMP_ADAPTER pAd,
3935 IN TX_BLK *pTxBlk,
3936 IN UCHAR QueIdx);
3937
3938 VOID STARxEAPOLFrameIndicate(
3939 IN PRTMP_ADAPTER pAd,
3940 IN MAC_TABLE_ENTRY *pEntry,
3941 IN RX_BLK *pRxBlk,
3942 IN UCHAR FromWhichBSSID);
3943
3944 NDIS_STATUS RTMPFreeTXDRequest(
3945 IN PRTMP_ADAPTER pAd,
3946 IN UCHAR RingType,
3947 IN UCHAR NumberRequired,
3948 IN PUCHAR FreeNumberIs);
3949
3950 NDIS_STATUS MlmeHardTransmit(
3951 IN PRTMP_ADAPTER pAd,
3952 IN UCHAR QueIdx,
3953 IN PNDIS_PACKET pPacket);
3954
3955 NDIS_STATUS MlmeHardTransmitMgmtRing(
3956 IN PRTMP_ADAPTER pAd,
3957 IN UCHAR QueIdx,
3958 IN PNDIS_PACKET pPacket);
3959
3960 NDIS_STATUS MlmeHardTransmitTxRing(
3961 IN PRTMP_ADAPTER pAd,
3962 IN UCHAR QueIdx,
3963 IN PNDIS_PACKET pPacket);
3964
3965 USHORT RTMPCalcDuration(
3966 IN PRTMP_ADAPTER pAd,
3967 IN UCHAR Rate,
3968 IN ULONG Size);
3969
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);
3988
3989
3990 VOID RTMPWriteTxWI_Data(
3991 IN PRTMP_ADAPTER pAd,
3992 IN OUT PTXWI_STRUC pTxWI,
3993 IN TX_BLK *pTxBlk);
3994
3995
3996 VOID RTMPWriteTxWI_Cache(
3997 IN PRTMP_ADAPTER pAd,
3998 IN OUT PTXWI_STRUC pTxWI,
3999 IN TX_BLK *pTxBlk);
4000
4001 VOID RTMPWriteTxDescriptor(
4002 IN PRTMP_ADAPTER pAd,
4003 IN PTXD_STRUC pTxD,
4004 IN BOOLEAN bWIV,
4005 IN UCHAR QSEL);
4006
4007 VOID RTMPSuspendMsduTransmission(
4008 IN PRTMP_ADAPTER pAd);
4009
4010 VOID RTMPResumeMsduTransmission(
4011 IN PRTMP_ADAPTER pAd);
4012
4013 NDIS_STATUS MiniportMMRequest(
4014 IN PRTMP_ADAPTER pAd,
4015 IN UCHAR QueIdx,
4016 IN PUCHAR pData,
4017 IN UINT Length);
4018
4019 VOID RTMPSendNullFrame(
4020 IN PRTMP_ADAPTER pAd,
4021 IN UCHAR TxRate,
4022 IN BOOLEAN bQosNull);
4023
4024 VOID RTMPSendDisassociationFrame(
4025 IN PRTMP_ADAPTER pAd);
4026
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);
4036
4037
4038 NDIS_STATUS RTMPApplyPacketFilter(
4039 IN PRTMP_ADAPTER pAd,
4040 IN PRT28XX_RXD_STRUC pRxD,
4041 IN PHEADER_802_11 pHeader);
4042
4043 PQUEUE_HEADER RTMPCheckTxSwQueue(
4044 IN PRTMP_ADAPTER pAd,
4045 OUT UCHAR *QueIdx);
4046
4047 #ifdef CONFIG_STA_SUPPORT
4048 VOID RTMPReportMicError(
4049 IN PRTMP_ADAPTER pAd,
4050 IN PCIPHER_KEY pWpaKey);
4051
4052 VOID WpaMicFailureReportFrame(
4053 IN PRTMP_ADAPTER pAd,
4054 IN MLME_QUEUE_ELEM *Elem);
4055
4056 VOID WpaDisassocApAndBlockAssoc(
4057 IN PVOID SystemSpecific1,
4058 IN PVOID FunctionContext,
4059 IN PVOID SystemSpecific2,
4060 IN PVOID SystemSpecific3);
4061 #endif // CONFIG_STA_SUPPORT //
4062
4063 NDIS_STATUS RTMPCloneNdisPacket(
4064 IN PRTMP_ADAPTER pAd,
4065 IN BOOLEAN pInsAMSDUHdr,
4066 IN PNDIS_PACKET pInPacket,
4067 OUT PNDIS_PACKET *ppOutPacket);
4068
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);
4076
4077 VOID RTMPFreeNdisPacket(
4078 IN PRTMP_ADAPTER pAd,
4079 IN PNDIS_PACKET pPacket);
4080
4081 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4082 IN PRTMP_ADAPTER pAd,
4083 IN UCHAR QueIdx);
4084
4085 BOOLEAN RTMPCheckDHCPFrame(
4086 IN PRTMP_ADAPTER pAd,
4087 IN PNDIS_PACKET pPacket);
4088
4089
4090 BOOLEAN RTMPCheckEtherType(
4091 IN PRTMP_ADAPTER pAd,
4092 IN PNDIS_PACKET pPacket);
4093
4094
4095 VOID RTMPCckBbpTuning(
4096 IN PRTMP_ADAPTER pAd,
4097 IN UINT TxRate);
4098
4099 //
4100 // Private routines in rtmp_wep.c
4101 //
4102 VOID RTMPInitWepEngine(
4103 IN PRTMP_ADAPTER pAd,
4104 IN PUCHAR pKey,
4105 IN UCHAR KeyId,
4106 IN UCHAR KeyLen,
4107 IN PUCHAR pDest);
4108
4109 VOID RTMPEncryptData(
4110 IN PRTMP_ADAPTER pAd,
4111 IN PUCHAR pSrc,
4112 IN PUCHAR pDest,
4113 IN UINT Len);
4114
4115 BOOLEAN RTMPDecryptData(
4116 IN PRTMP_ADAPTER pAdapter,
4117 IN PUCHAR pSrc,
4118 IN UINT Len,
4119 IN UINT idx);
4120
4121 BOOLEAN RTMPSoftDecryptWEP(
4122 IN PRTMP_ADAPTER pAd,
4123 IN PUCHAR pData,
4124 IN ULONG DataByteCnt,
4125 IN PCIPHER_KEY pGroupKey);
4126
4127 VOID RTMPSetICV(
4128 IN PRTMP_ADAPTER pAd,
4129 IN PUCHAR pDest);
4130
4131 VOID ARCFOUR_INIT(
4132 IN PARCFOURCONTEXT Ctx,
4133 IN PUCHAR pKey,
4134 IN UINT KeyLen);
4135
4136 UCHAR ARCFOUR_BYTE(
4137 IN PARCFOURCONTEXT Ctx);
4138
4139 VOID ARCFOUR_DECRYPT(
4140 IN PARCFOURCONTEXT Ctx,
4141 IN PUCHAR pDest,
4142 IN PUCHAR pSrc,
4143 IN UINT Len);
4144
4145 VOID ARCFOUR_ENCRYPT(
4146 IN PARCFOURCONTEXT Ctx,
4147 IN PUCHAR pDest,
4148 IN PUCHAR pSrc,
4149 IN UINT Len);
4150
4151 VOID WPAARCFOUR_ENCRYPT(
4152 IN PARCFOURCONTEXT Ctx,
4153 IN PUCHAR pDest,
4154 IN PUCHAR pSrc,
4155 IN UINT Len);
4156
4157 UINT RTMP_CALC_FCS32(
4158 IN UINT Fcs,
4159 IN PUCHAR Cp,
4160 IN INT Len);
4161
4162 //
4163 // MLME routines
4164 //
4165
4166 // Asic/RF/BBP related functions
4167
4168 VOID AsicAdjustTxPower(
4169 IN PRTMP_ADAPTER pAd);
4170
4171 VOID AsicUpdateProtect(
4172 IN PRTMP_ADAPTER pAd,
4173 IN USHORT OperaionMode,
4174 IN UCHAR SetMask,
4175 IN BOOLEAN bDisableBGProtect,
4176 IN BOOLEAN bNonGFExist);
4177
4178 VOID AsicSwitchChannel(
4179 IN PRTMP_ADAPTER pAd,
4180 IN UCHAR Channel,
4181 IN BOOLEAN bScan);
4182
4183 VOID AsicLockChannel(
4184 IN PRTMP_ADAPTER pAd,
4185 IN UCHAR Channel) ;
4186
4187 VOID AsicAntennaSelect(
4188 IN PRTMP_ADAPTER pAd,
4189 IN UCHAR Channel);
4190
4191 VOID AsicAntennaSetting(
4192 IN PRTMP_ADAPTER pAd,
4193 IN ABGBAND_STATE BandState);
4194
4195 VOID AsicRfTuningExec(
4196 IN PVOID SystemSpecific1,
4197 IN PVOID FunctionContext,
4198 IN PVOID SystemSpecific2,
4199 IN PVOID SystemSpecific3);
4200
4201 #ifdef CONFIG_STA_SUPPORT
4202 VOID AsicSleepThenAutoWakeup(
4203 IN PRTMP_ADAPTER pAd,
4204 IN USHORT TbttNumToNextWakeUp);
4205
4206 VOID AsicForceSleep(
4207 IN PRTMP_ADAPTER pAd);
4208
4209 VOID AsicForceWakeup(
4210 IN PRTMP_ADAPTER pAd,
4211 IN BOOLEAN bFromTx);
4212 #endif // CONFIG_STA_SUPPORT //
4213
4214 VOID AsicSetBssid(
4215 IN PRTMP_ADAPTER pAd,
4216 IN PUCHAR pBssid);
4217
4218 VOID AsicSetMcastWC(
4219 IN PRTMP_ADAPTER pAd);
4220
4221 VOID AsicDelWcidTab(
4222 IN PRTMP_ADAPTER pAd,
4223 IN UCHAR Wcid);
4224
4225 VOID AsicEnableRDG(
4226 IN PRTMP_ADAPTER pAd);
4227
4228 VOID AsicDisableRDG(
4229 IN PRTMP_ADAPTER pAd);
4230
4231 VOID AsicDisableSync(
4232 IN PRTMP_ADAPTER pAd);
4233
4234 VOID AsicEnableBssSync(
4235 IN PRTMP_ADAPTER pAd);
4236
4237 VOID AsicEnableIbssSync(
4238 IN PRTMP_ADAPTER pAd);
4239
4240 VOID AsicSetEdcaParm(
4241 IN PRTMP_ADAPTER pAd,
4242 IN PEDCA_PARM pEdcaParm);
4243
4244 VOID AsicSetSlotTime(
4245 IN PRTMP_ADAPTER pAd,
4246 IN BOOLEAN bUseShortSlotTime);
4247
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);
4256
4257 VOID AsicRemoveSharedKeyEntry(
4258 IN PRTMP_ADAPTER pAd,
4259 IN UCHAR BssIndex,
4260 IN UCHAR KeyIdx);
4261
4262 VOID AsicUpdateWCIDAttribute(
4263 IN PRTMP_ADAPTER pAd,
4264 IN USHORT WCID,
4265 IN UCHAR BssIndex,
4266 IN UCHAR CipherAlg,
4267 IN BOOLEAN bUsePairewiseKeyTable);
4268
4269 VOID AsicUpdateWCIDIVEIV(
4270 IN PRTMP_ADAPTER pAd,
4271 IN USHORT WCID,
4272 IN ULONG uIV,
4273 IN ULONG uEIV);
4274
4275 VOID AsicUpdateRxWCIDTable(
4276 IN PRTMP_ADAPTER pAd,
4277 IN USHORT WCID,
4278 IN PUCHAR pAddr);
4279
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);
4288
4289 VOID AsicAddPairwiseKeyEntry(
4290 IN PRTMP_ADAPTER pAd,
4291 IN PUCHAR pAddr,
4292 IN UCHAR WCID,
4293 IN CIPHER_KEY *pCipherKey);
4294
4295 VOID AsicRemovePairwiseKeyEntry(
4296 IN PRTMP_ADAPTER pAd,
4297 IN UCHAR BssIdx,
4298 IN UCHAR Wcid);
4299
4300 BOOLEAN AsicSendCommandToMcu(
4301 IN PRTMP_ADAPTER pAd,
4302 IN UCHAR Command,
4303 IN UCHAR Token,
4304 IN UCHAR Arg0,
4305 IN UCHAR Arg1);
4306
4307 #ifdef RT2860
4308 BOOLEAN AsicCheckCommanOk(
4309 IN PRTMP_ADAPTER pAd,
4310 IN UCHAR Command);
4311 #endif // RT2860 //
4312
4313 VOID MacAddrRandomBssid(
4314 IN PRTMP_ADAPTER pAd,
4315 OUT PUCHAR pAddr);
4316
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);
4324
4325 VOID MlmeRadioOff(
4326 IN PRTMP_ADAPTER pAd);
4327
4328 VOID MlmeRadioOn(
4329 IN PRTMP_ADAPTER pAd);
4330
4331
4332 VOID BssTableInit(
4333 IN BSS_TABLE *Tab);
4334
4335 #ifdef DOT11_N_SUPPORT
4336 VOID BATableInit(
4337 IN PRTMP_ADAPTER pAd,
4338 IN BA_TABLE *Tab);
4339 #endif // DOT11_N_SUPPORT //
4340
4341 ULONG BssTableSearch(
4342 IN BSS_TABLE *Tab,
4343 IN PUCHAR pBssid,
4344 IN UCHAR Channel);
4345
4346 ULONG BssSsidTableSearch(
4347 IN BSS_TABLE *Tab,
4348 IN PUCHAR pBssid,
4349 IN PUCHAR pSsid,
4350 IN UCHAR SsidLen,
4351 IN UCHAR Channel);
4352
4353 ULONG BssTableSearchWithSSID(
4354 IN BSS_TABLE *Tab,
4355 IN PUCHAR Bssid,
4356 IN PUCHAR pSsid,
4357 IN UCHAR SsidLen,
4358 IN UCHAR Channel);
4359
4360 VOID BssTableDeleteEntry(
4361 IN OUT PBSS_TABLE pTab,
4362 IN PUCHAR pBssid,
4363 IN UCHAR Channel);
4364
4365 #ifdef DOT11_N_SUPPORT
4366 VOID BATableDeleteORIEntry(
4367 IN OUT PRTMP_ADAPTER pAd,
4368 IN BA_ORI_ENTRY *pBAORIEntry);
4369
4370 VOID BATableDeleteRECEntry(
4371 IN OUT PRTMP_ADAPTER pAd,
4372 IN BA_REC_ENTRY *pBARECEntry);
4373
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);
4380
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 //
4387
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);
4417
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);
4447
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);
4458
4459 #ifdef DOT11N_DRAFT3
4460 VOID Bss2040CoexistTimeOut(
4461 IN PVOID SystemSpecific1,
4462 IN PVOID FunctionContext,
4463 IN PVOID SystemSpecific2,
4464 IN PVOID SystemSpecific3);
4465
4466
4467 VOID TriEventInit(
4468 IN PRTMP_ADAPTER pAd);
4469
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);
4478
4479 VOID TriEventCounterMaintenance(
4480 IN PRTMP_ADAPTER pAd);
4481 #endif // DOT11N_DRAFT3 //
4482 #endif // DOT11_N_SUPPORT //
4483
4484 VOID BssTableSsidSort(
4485 IN PRTMP_ADAPTER pAd,
4486 OUT BSS_TABLE *OutTab,
4487 IN CHAR Ssid[],
4488 IN UCHAR SsidLen);
4489
4490 VOID BssTableSortByRssi(
4491 IN OUT BSS_TABLE *OutTab);
4492
4493 VOID BssCipherParse(
4494 IN OUT PBSS_ENTRY pBss);
4495
4496 NDIS_STATUS MlmeQueueInit(
4497 IN MLME_QUEUE *Queue);
4498
4499 VOID MlmeQueueDestroy(
4500 IN MLME_QUEUE *Queue);
4501
4502 BOOLEAN MlmeEnqueue(
4503 IN PRTMP_ADAPTER pAd,
4504 IN ULONG Machine,
4505 IN ULONG MsgType,
4506 IN ULONG MsgLen,
4507 IN VOID *Msg);
4508
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);
4520
4521
4522 BOOLEAN MlmeDequeue(
4523 IN MLME_QUEUE *Queue,
4524 OUT MLME_QUEUE_ELEM **Elem);
4525
4526 VOID MlmeRestartStateMachine(
4527 IN PRTMP_ADAPTER pAd);
4528
4529 BOOLEAN MlmeQueueEmpty(
4530 IN MLME_QUEUE *Queue);
4531
4532 BOOLEAN MlmeQueueFull(
4533 IN MLME_QUEUE *Queue);
4534
4535 BOOLEAN MsgTypeSubst(
4536 IN PRTMP_ADAPTER pAd,
4537 IN PFRAME_802_11 pFrame,
4538 OUT INT *Machine,
4539 OUT INT *MsgType);
4540
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);
4549
4550 VOID StateMachineSetAction(
4551 IN STATE_MACHINE *S,
4552 IN ULONG St,
4553 ULONG Msg,
4554 IN STATE_MACHINE_FUNC F);
4555
4556 VOID StateMachinePerformAction(
4557 IN PRTMP_ADAPTER pAd,
4558 IN STATE_MACHINE *S,
4559 IN MLME_QUEUE_ELEM *Elem);
4560
4561 VOID Drop(
4562 IN PRTMP_ADAPTER pAd,
4563 IN MLME_QUEUE_ELEM *Elem);
4564
4565 VOID AssocStateMachineInit(
4566 IN PRTMP_ADAPTER pAd,
4567 IN STATE_MACHINE *Sm,
4568 OUT STATE_MACHINE_FUNC Trans[]);
4569
4570 VOID ReassocTimeout(
4571 IN PVOID SystemSpecific1,
4572 IN PVOID FunctionContext,
4573 IN PVOID SystemSpecific2,
4574 IN PVOID SystemSpecific3);
4575
4576 VOID AssocTimeout(
4577 IN PVOID SystemSpecific1,
4578 IN PVOID FunctionContext,
4579 IN PVOID SystemSpecific2,
4580 IN PVOID SystemSpecific3);
4581
4582 VOID DisassocTimeout(
4583 IN PVOID SystemSpecific1,
4584 IN PVOID FunctionContext,
4585 IN PVOID SystemSpecific2,
4586 IN PVOID SystemSpecific3);
4587
4588 //----------------------------------------------
4589 VOID MlmeDisassocReqAction(
4590 IN PRTMP_ADAPTER pAd,
4591 IN MLME_QUEUE_ELEM *Elem);
4592
4593 VOID MlmeAssocReqAction(
4594 IN PRTMP_ADAPTER pAd,
4595 IN MLME_QUEUE_ELEM *Elem);
4596
4597 VOID MlmeReassocReqAction(
4598 IN PRTMP_ADAPTER pAd,
4599 IN MLME_QUEUE_ELEM *Elem);
4600
4601 VOID MlmeDisassocReqAction(
4602 IN PRTMP_ADAPTER pAd,
4603 IN MLME_QUEUE_ELEM *Elem);
4604
4605 VOID PeerAssocRspAction(
4606 IN PRTMP_ADAPTER pAd,
4607 IN MLME_QUEUE_ELEM *Elem);
4608
4609 VOID PeerReassocRspAction(
4610 IN PRTMP_ADAPTER pAd,
4611 IN MLME_QUEUE_ELEM *Elem);
4612
4613 VOID PeerDisassocAction(
4614 IN PRTMP_ADAPTER pAd,
4615 IN MLME_QUEUE_ELEM *Elem);
4616
4617 VOID DisassocTimeoutAction(
4618 IN PRTMP_ADAPTER pAd,
4619 IN MLME_QUEUE_ELEM *Elem);
4620
4621 VOID AssocTimeoutAction(
4622 IN PRTMP_ADAPTER pAd,
4623 IN MLME_QUEUE_ELEM *Elem);
4624
4625 VOID ReassocTimeoutAction(
4626 IN PRTMP_ADAPTER pAd,
4627 IN MLME_QUEUE_ELEM *Elem);
4628
4629 VOID Cls3errAction(
4630 IN PRTMP_ADAPTER pAd,
4631 IN PUCHAR pAddr);
4632
4633 VOID SwitchBetweenWepAndCkip(
4634 IN PRTMP_ADAPTER pAd);
4635
4636 VOID InvalidStateWhenAssoc(
4637 IN PRTMP_ADAPTER pAd,
4638 IN MLME_QUEUE_ELEM *Elem);
4639
4640 VOID InvalidStateWhenReassoc(
4641 IN PRTMP_ADAPTER pAd,
4642 IN MLME_QUEUE_ELEM *Elem);
4643
4644 VOID InvalidStateWhenDisassociate(
4645 IN PRTMP_ADAPTER pAd,
4646 IN MLME_QUEUE_ELEM *Elem);
4647
4648
4649 VOID ComposePsPoll(
4650 IN PRTMP_ADAPTER pAd);
4651
4652 VOID ComposeNullFrame(
4653 IN PRTMP_ADAPTER pAd);
4654
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);
4668
4669 VOID AuthStateMachineInit(
4670 IN PRTMP_ADAPTER pAd,
4671 IN PSTATE_MACHINE sm,
4672 OUT STATE_MACHINE_FUNC Trans[]);
4673
4674 VOID AuthTimeout(
4675 IN PVOID SystemSpecific1,
4676 IN PVOID FunctionContext,
4677 IN PVOID SystemSpecific2,
4678 IN PVOID SystemSpecific3);
4679
4680 VOID MlmeAuthReqAction(
4681 IN PRTMP_ADAPTER pAd,
4682 IN MLME_QUEUE_ELEM *Elem);
4683
4684 VOID PeerAuthRspAtSeq2Action(
4685 IN PRTMP_ADAPTER pAd,
4686 IN MLME_QUEUE_ELEM *Elem);
4687
4688 VOID PeerAuthRspAtSeq4Action(
4689 IN PRTMP_ADAPTER pAd,
4690 IN MLME_QUEUE_ELEM *Elem);
4691
4692 VOID AuthTimeoutAction(
4693 IN PRTMP_ADAPTER pAd,
4694 IN MLME_QUEUE_ELEM *Elem);
4695
4696 VOID Cls2errAction(
4697 IN PRTMP_ADAPTER pAd,
4698 IN PUCHAR pAddr);
4699
4700 VOID MlmeDeauthReqAction(
4701 IN PRTMP_ADAPTER pAd,
4702 IN MLME_QUEUE_ELEM *Elem);
4703
4704 VOID InvalidStateWhenAuth(
4705 IN PRTMP_ADAPTER pAd,
4706 IN MLME_QUEUE_ELEM *Elem);
4707
4708 //=============================================
4709
4710 VOID AuthRspStateMachineInit(
4711 IN PRTMP_ADAPTER pAd,
4712 IN PSTATE_MACHINE Sm,
4713 IN STATE_MACHINE_FUNC Trans[]);
4714
4715 VOID PeerDeauthAction(
4716 IN PRTMP_ADAPTER pAd,
4717 IN MLME_QUEUE_ELEM *Elem);
4718
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);
4726
4727 //
4728 // Private routines in dls.c
4729 //
4730
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[]);
4737
4738 VOID MlmeDlsReqAction(
4739 IN PRTMP_ADAPTER pAd,
4740 IN MLME_QUEUE_ELEM *Elem);
4741
4742 VOID PeerDlsReqAction(
4743 IN PRTMP_ADAPTER pAd,
4744 IN MLME_QUEUE_ELEM *Elem);
4745
4746 VOID PeerDlsRspAction(
4747 IN PRTMP_ADAPTER pAd,
4748 IN MLME_QUEUE_ELEM *Elem);
4749
4750 VOID MlmeDlsTearDownAction(
4751 IN PRTMP_ADAPTER pAd,
4752 IN MLME_QUEUE_ELEM *Elem);
4753
4754 VOID PeerDlsTearDownAction(
4755 IN PRTMP_ADAPTER pAd,
4756 IN MLME_QUEUE_ELEM *Elem);
4757
4758 VOID RTMPCheckDLSTimeOut(
4759 IN PRTMP_ADAPTER pAd);
4760
4761 BOOLEAN RTMPRcvFrameDLSCheck(
4762 IN PRTMP_ADAPTER pAd,
4763 IN PHEADER_802_11 pHeader,
4764 IN ULONG Len,
4765 IN PRT28XX_RXD_STRUC pRxD);
4766
4767 INT RTMPCheckDLSFrame(
4768 IN PRTMP_ADAPTER pAd,
4769 IN PUCHAR pDA);
4770
4771 VOID RTMPSendDLSTearDownFrame(
4772 IN PRTMP_ADAPTER pAd,
4773 IN PUCHAR pDA);
4774
4775 NDIS_STATUS RTMPSendSTAKeyRequest(
4776 IN PRTMP_ADAPTER pAd,
4777 IN PUCHAR pDA);
4778
4779 NDIS_STATUS RTMPSendSTAKeyHandShake(
4780 IN PRTMP_ADAPTER pAd,
4781 IN PUCHAR pDA);
4782
4783 VOID DlsTimeoutAction(
4784 IN PVOID SystemSpecific1,
4785 IN PVOID FunctionContext,
4786 IN PVOID SystemSpecific2,
4787 IN PVOID SystemSpecific3);
4788
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);
4795
4796 INT Set_DlsEntryInfo_Display_Proc(
4797 IN PRTMP_ADAPTER pAd,
4798 IN PUCHAR arg);
4799
4800 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4801 IN PRTMP_ADAPTER pAd,
4802 IN PUCHAR pAddr,
4803 IN UINT DlsEntryIdx);
4804
4805 BOOLEAN MacTableDeleteDlsEntry(
4806 IN PRTMP_ADAPTER pAd,
4807 IN USHORT wcid,
4808 IN PUCHAR pAddr);
4809
4810 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4811 IN PRTMP_ADAPTER pAd,
4812 IN PUCHAR pAddr,
4813 IN BOOLEAN bResetIdelCount);
4814
4815 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4816 IN PRTMP_ADAPTER pAd,
4817 IN UCHAR wcid,
4818 IN PUCHAR pAddr,
4819 IN BOOLEAN bResetIdelCount);
4820
4821 INT Set_DlsAddEntry_Proc(
4822 IN PRTMP_ADAPTER pAd,
4823 IN PUCHAR arg);
4824
4825 INT Set_DlsTearDownEntry_Proc(
4826 IN PRTMP_ADAPTER pAd,
4827 IN PUCHAR arg);
4828 #endif // QOS_DLS_SUPPORT //
4829 #endif // CONFIG_STA_SUPPORT //
4830
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);
4844
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);
4857
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 //
4866
4867 //========================================
4868
4869 VOID SyncStateMachineInit(
4870 IN PRTMP_ADAPTER pAd,
4871 IN STATE_MACHINE *Sm,
4872 OUT STATE_MACHINE_FUNC Trans[]);
4873
4874 VOID BeaconTimeout(
4875 IN PVOID SystemSpecific1,
4876 IN PVOID FunctionContext,
4877 IN PVOID SystemSpecific2,
4878 IN PVOID SystemSpecific3);
4879
4880 VOID ScanTimeout(
4881 IN PVOID SystemSpecific1,
4882 IN PVOID FunctionContext,
4883 IN PVOID SystemSpecific2,
4884 IN PVOID SystemSpecific3);
4885
4886 VOID MlmeScanReqAction(
4887 IN PRTMP_ADAPTER pAd,
4888 IN MLME_QUEUE_ELEM *Elem);
4889
4890 VOID InvalidStateWhenScan(
4891 IN PRTMP_ADAPTER pAd,
4892 IN MLME_QUEUE_ELEM *Elem);
4893
4894 VOID InvalidStateWhenJoin(
4895 IN PRTMP_ADAPTER pAd,
4896 IN MLME_QUEUE_ELEM *Elem);
4897
4898 VOID InvalidStateWhenStart(
4899 IN PRTMP_ADAPTER pAd,
4900 IN MLME_QUEUE_ELEM *Elem);
4901
4902 VOID PeerBeacon(
4903 IN PRTMP_ADAPTER pAd,
4904 IN MLME_QUEUE_ELEM *Elem);
4905
4906 VOID EnqueueProbeRequest(
4907 IN PRTMP_ADAPTER pAd);
4908
4909 BOOLEAN ScanRunning(
4910 IN PRTMP_ADAPTER pAd);
4911 //=========================================
4912
4913 VOID MlmeCntlInit(
4914 IN PRTMP_ADAPTER pAd,
4915 IN STATE_MACHINE *S,
4916 OUT STATE_MACHINE_FUNC Trans[]);
4917
4918 VOID MlmeCntlMachinePerformAction(
4919 IN PRTMP_ADAPTER pAd,
4920 IN STATE_MACHINE *S,
4921 IN MLME_QUEUE_ELEM *Elem);
4922
4923 VOID CntlIdleProc(
4924 IN PRTMP_ADAPTER pAd,
4925 IN MLME_QUEUE_ELEM *Elem);
4926
4927 VOID CntlOidScanProc(
4928 IN PRTMP_ADAPTER pAd,
4929 IN MLME_QUEUE_ELEM *Elem);
4930
4931 VOID CntlOidSsidProc(
4932 IN PRTMP_ADAPTER pAd,
4933 IN MLME_QUEUE_ELEM * Elem);
4934
4935 VOID CntlOidRTBssidProc(
4936 IN PRTMP_ADAPTER pAd,
4937 IN MLME_QUEUE_ELEM * Elem);
4938
4939 VOID CntlMlmeRoamingProc(
4940 IN PRTMP_ADAPTER pAd,
4941 IN MLME_QUEUE_ELEM * Elem);
4942
4943 VOID CntlWaitDisassocProc(
4944 IN PRTMP_ADAPTER pAd,
4945 IN MLME_QUEUE_ELEM *Elem);
4946
4947 VOID CntlWaitJoinProc(
4948 IN PRTMP_ADAPTER pAd,
4949 IN MLME_QUEUE_ELEM *Elem);
4950
4951 VOID CntlWaitReassocProc(
4952 IN PRTMP_ADAPTER pAd,
4953 IN MLME_QUEUE_ELEM *Elem);
4954
4955 VOID CntlWaitStartProc(
4956 IN PRTMP_ADAPTER pAd,
4957 IN MLME_QUEUE_ELEM *Elem);
4958
4959 VOID CntlWaitAuthProc(
4960 IN PRTMP_ADAPTER pAd,
4961 IN MLME_QUEUE_ELEM *Elem);
4962
4963 VOID CntlWaitAuthProc2(
4964 IN PRTMP_ADAPTER pAd,
4965 IN MLME_QUEUE_ELEM *Elem);
4966
4967 VOID CntlWaitAssocProc(
4968 IN PRTMP_ADAPTER pAd,
4969 IN MLME_QUEUE_ELEM *Elem);
4970
4971 #ifdef QOS_DLS_SUPPORT
4972 VOID CntlOidDLSSetupProc(
4973 IN PRTMP_ADAPTER pAd,
4974 IN MLME_QUEUE_ELEM *Elem);
4975 #endif // QOS_DLS_SUPPORT //
4976
4977 VOID LinkUp(
4978 IN PRTMP_ADAPTER pAd,
4979 IN UCHAR BssType);
4980
4981 VOID LinkDown(
4982 IN PRTMP_ADAPTER pAd,
4983 IN BOOLEAN IsReqFromAP);
4984
4985 VOID IterateOnBssTab(
4986 IN PRTMP_ADAPTER pAd);
4987
4988 VOID IterateOnBssTab2(
4989 IN PRTMP_ADAPTER pAd);;
4990
4991 VOID JoinParmFill(
4992 IN PRTMP_ADAPTER pAd,
4993 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4994 IN ULONG BssIdx);
4995
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);
5003
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);
5011
5012 VOID DisassocParmFill(
5013 IN PRTMP_ADAPTER pAd,
5014 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5015 IN PUCHAR pAddr,
5016 IN USHORT Reason);
5017
5018 VOID StartParmFill(
5019 IN PRTMP_ADAPTER pAd,
5020 IN OUT MLME_START_REQ_STRUCT *StartReq,
5021 IN CHAR Ssid[],
5022 IN UCHAR SsidLen);
5023
5024 VOID AuthParmFill(
5025 IN PRTMP_ADAPTER pAd,
5026 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5027 IN PUCHAR pAddr,
5028 IN USHORT Alg);
5029
5030 VOID EnqueuePsPoll(
5031 IN PRTMP_ADAPTER pAd);
5032
5033 VOID EnqueueBeaconFrame(
5034 IN PRTMP_ADAPTER pAd);
5035
5036 VOID MlmeJoinReqAction(
5037 IN PRTMP_ADAPTER pAd,
5038 IN MLME_QUEUE_ELEM *Elem);
5039
5040 VOID MlmeScanReqAction(
5041 IN PRTMP_ADAPTER pAd,
5042 IN MLME_QUEUE_ELEM *Elem);
5043
5044 VOID MlmeStartReqAction(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5047
5048 VOID ScanTimeoutAction(
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5051
5052 VOID BeaconTimeoutAtJoinAction(
5053 IN PRTMP_ADAPTER pAd,
5054 IN MLME_QUEUE_ELEM *Elem);
5055
5056 VOID PeerBeaconAtScanAction(
5057 IN PRTMP_ADAPTER pAd,
5058 IN MLME_QUEUE_ELEM *Elem);
5059
5060 VOID PeerBeaconAtJoinAction(
5061 IN PRTMP_ADAPTER pAd,
5062 IN MLME_QUEUE_ELEM *Elem);
5063
5064 VOID PeerBeacon(
5065 IN PRTMP_ADAPTER pAd,
5066 IN MLME_QUEUE_ELEM *Elem);
5067
5068 VOID PeerProbeReqAction(
5069 IN PRTMP_ADAPTER pAd,
5070 IN MLME_QUEUE_ELEM *Elem);
5071
5072 VOID ScanNextChannel(
5073 IN PRTMP_ADAPTER pAd);
5074
5075 ULONG MakeIbssBeacon(
5076 IN PRTMP_ADAPTER pAd);
5077
5078 VOID CCXAdjacentAPReport(
5079 IN PRTMP_ADAPTER pAd);
5080
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);
5089
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);
5132
5133 BOOLEAN PeerAddBAReqActionSanity(
5134 IN PRTMP_ADAPTER pAd,
5135 IN VOID *pMsg,
5136 IN ULONG MsgLen,
5137 OUT PUCHAR pAddr2);
5138
5139 BOOLEAN PeerAddBARspActionSanity(
5140 IN PRTMP_ADAPTER pAd,
5141 IN VOID *pMsg,
5142 IN ULONG MsgLen);
5143
5144 BOOLEAN PeerDelBAActionSanity(
5145 IN PRTMP_ADAPTER pAd,
5146 IN UCHAR Wcid,
5147 IN VOID *pMsg,
5148 IN ULONG MsgLen);
5149
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);
5158
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);
5166
5167 BOOLEAN MlmeStartReqSanity(
5168 IN PRTMP_ADAPTER pAd,
5169 IN VOID *Msg,
5170 IN ULONG MsgLen,
5171 OUT CHAR Ssid[],
5172 OUT UCHAR *Ssidlen);
5173
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[]);
5183
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);
5203
5204 BOOLEAN PeerDisassocSanity(
5205 IN PRTMP_ADAPTER pAd,
5206 IN VOID *Msg,
5207 IN ULONG MsgLen,
5208 OUT PUCHAR pAddr2,
5209 OUT USHORT *Reason);
5210
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);
5217
5218 BOOLEAN PeerDeauthSanity(
5219 IN PRTMP_ADAPTER pAd,
5220 IN VOID *Msg,
5221 IN ULONG MsgLen,
5222 OUT PUCHAR pAddr2,
5223 OUT USHORT *Reason);
5224
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);
5232
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);
5241
5242 UCHAR ChannelSanity(
5243 IN PRTMP_ADAPTER pAd,
5244 IN UCHAR channel);
5245
5246 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5247 IN PBSS_ENTRY pBss);
5248
5249 BOOLEAN MlmeDelBAReqSanity(
5250 IN PRTMP_ADAPTER pAd,
5251 IN VOID *Msg,
5252 IN ULONG MsgLen);
5253
5254 BOOLEAN MlmeAddBAReqSanity(
5255 IN PRTMP_ADAPTER pAd,
5256 IN VOID *Msg,
5257 IN ULONG MsgLen,
5258 OUT PUCHAR pAddr2);
5259
5260 ULONG MakeOutgoingFrame(
5261 OUT CHAR *Buffer,
5262 OUT ULONG *Length, ...);
5263
5264 VOID LfsrInit(
5265 IN PRTMP_ADAPTER pAd,
5266 IN ULONG Seed);
5267
5268 UCHAR RandomByte(
5269 IN PRTMP_ADAPTER pAd);
5270
5271 VOID AsicUpdateAutoFallBackTable(
5272 IN PRTMP_ADAPTER pAd,
5273 IN PUCHAR pTxRate);
5274
5275 VOID MlmePeriodicExec(
5276 IN PVOID SystemSpecific1,
5277 IN PVOID FunctionContext,
5278 IN PVOID SystemSpecific2,
5279 IN PVOID SystemSpecific3);
5280
5281 VOID LinkDownExec(
5282 IN PVOID SystemSpecific1,
5283 IN PVOID FunctionContext,
5284 IN PVOID SystemSpecific2,
5285 IN PVOID SystemSpecific3);
5286
5287 VOID LinkUpExec(
5288 IN PVOID SystemSpecific1,
5289 IN PVOID FunctionContext,
5290 IN PVOID SystemSpecific2,
5291 IN PVOID SystemSpecific3);
5292
5293 VOID STAMlmePeriodicExec(
5294 PRTMP_ADAPTER pAd);
5295
5296 VOID MlmeAutoScan(
5297 IN PRTMP_ADAPTER pAd);
5298
5299 VOID MlmeAutoReconnectLastSSID(
5300 IN PRTMP_ADAPTER pAd);
5301
5302 BOOLEAN MlmeValidateSSID(
5303 IN PUCHAR pSsid,
5304 IN UCHAR SsidLen);
5305
5306 VOID MlmeCheckForRoaming(
5307 IN PRTMP_ADAPTER pAd,
5308 IN ULONG Now32);
5309
5310 VOID MlmeCheckForFastRoaming(
5311 IN PRTMP_ADAPTER pAd,
5312 IN ULONG Now);
5313
5314 VOID MlmeDynamicTxRateSwitching(
5315 IN PRTMP_ADAPTER pAd);
5316
5317 VOID MlmeSetTxRate(
5318 IN PRTMP_ADAPTER pAd,
5319 IN PMAC_TABLE_ENTRY pEntry,
5320 IN PRTMP_TX_RATE_SWITCH pTxRate);
5321
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);
5328
5329 VOID MlmeCalculateChannelQuality(
5330 IN PRTMP_ADAPTER pAd,
5331 IN ULONG Now);
5332
5333 VOID MlmeCheckPsmChange(
5334 IN PRTMP_ADAPTER pAd,
5335 IN ULONG Now32);
5336
5337 VOID MlmeSetPsmBit(
5338 IN PRTMP_ADAPTER pAd,
5339 IN USHORT psm);
5340
5341 VOID MlmeSetTxPreamble(
5342 IN PRTMP_ADAPTER pAd,
5343 IN USHORT TxPreamble);
5344
5345 VOID UpdateBasicRateBitmap(
5346 IN PRTMP_ADAPTER pAd);
5347
5348 VOID MlmeUpdateTxRates(
5349 IN PRTMP_ADAPTER pAd,
5350 IN BOOLEAN bLinkUp,
5351 IN UCHAR apidx);
5352
5353 #ifdef DOT11_N_SUPPORT
5354 VOID MlmeUpdateHtTxRates(
5355 IN PRTMP_ADAPTER pAd,
5356 IN UCHAR apidx);
5357 #endif // DOT11_N_SUPPORT //
5358
5359 VOID RTMPCheckRates(
5360 IN PRTMP_ADAPTER pAd,
5361 IN OUT UCHAR SupRate[],
5362 IN OUT UCHAR *SupRateLen);
5363
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 //
5370
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);
5376
5377 VOID StaQuickResponeForRateUpExec(
5378 IN PVOID SystemSpecific1,
5379 IN PVOID FunctionContext,
5380 IN PVOID SystemSpecific2,
5381 IN PVOID SystemSpecific3);
5382
5383 VOID AsicBbpTuning1(
5384 IN PRTMP_ADAPTER pAd);
5385
5386 VOID AsicBbpTuning2(
5387 IN PRTMP_ADAPTER pAd);
5388
5389 VOID RTMPUpdateMlmeRate(
5390 IN PRTMP_ADAPTER pAd);
5391
5392 CHAR RTMPMaxRssi(
5393 IN PRTMP_ADAPTER pAd,
5394 IN CHAR Rssi0,
5395 IN CHAR Rssi1,
5396 IN CHAR Rssi2);
5397
5398 VOID AsicEvaluateRxAnt(
5399 IN PRTMP_ADAPTER pAd);
5400
5401 VOID AsicRxAntEvalTimeout(
5402 IN PVOID SystemSpecific1,
5403 IN PVOID FunctionContext,
5404 IN PVOID SystemSpecific2,
5405 IN PVOID SystemSpecific3);
5406
5407 VOID APSDPeriodicExec(
5408 IN PVOID SystemSpecific1,
5409 IN PVOID FunctionContext,
5410 IN PVOID SystemSpecific2,
5411 IN PVOID SystemSpecific3);
5412
5413 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5414 IN PRTMP_ADAPTER pAd,
5415 IN PMAC_TABLE_ENTRY pEntry);
5416
5417 UCHAR RTMPStaFixedTxMode(
5418 IN PRTMP_ADAPTER pAd,
5419 IN PMAC_TABLE_ENTRY pEntry);
5420
5421 VOID RTMPUpdateLegacyTxSetting(
5422 UCHAR fixed_tx_mode,
5423 PMAC_TABLE_ENTRY pEntry);
5424
5425 BOOLEAN RTMPAutoRateSwitchCheck(
5426 IN PRTMP_ADAPTER pAd);
5427
5428 NDIS_STATUS MlmeInit(
5429 IN PRTMP_ADAPTER pAd);
5430
5431 VOID MlmeHandler(
5432 IN PRTMP_ADAPTER pAd);
5433
5434 VOID MlmeHalt(
5435 IN PRTMP_ADAPTER pAd);
5436
5437 VOID MlmeResetRalinkCounters(
5438 IN PRTMP_ADAPTER pAd);
5439
5440 VOID BuildChannelList(
5441 IN PRTMP_ADAPTER pAd);
5442
5443 UCHAR FirstChannel(
5444 IN PRTMP_ADAPTER pAd);
5445
5446 UCHAR NextChannel(
5447 IN PRTMP_ADAPTER pAd,
5448 IN UCHAR channel);
5449
5450 VOID ChangeToCellPowerLimit(
5451 IN PRTMP_ADAPTER pAd,
5452 IN UCHAR AironetCellPowerLimit);
5453
5454 VOID RaiseClock(
5455 IN PRTMP_ADAPTER pAd,
5456 IN UINT32 *x);
5457
5458 VOID LowerClock(
5459 IN PRTMP_ADAPTER pAd,
5460 IN UINT32 *x);
5461
5462 USHORT ShiftInBits(
5463 IN PRTMP_ADAPTER pAd);
5464
5465 VOID ShiftOutBits(
5466 IN PRTMP_ADAPTER pAd,
5467 IN USHORT data,
5468 IN USHORT count);
5469
5470 VOID EEpromCleanup(
5471 IN PRTMP_ADAPTER pAd);
5472
5473 VOID EWDS(
5474 IN PRTMP_ADAPTER pAd);
5475
5476 VOID EWEN(
5477 IN PRTMP_ADAPTER pAd);
5478
5479 USHORT RTMP_EEPROM_READ16(
5480 IN PRTMP_ADAPTER pAd,
5481 IN USHORT Offset);
5482
5483 VOID RTMP_EEPROM_WRITE16(
5484 IN PRTMP_ADAPTER pAd,
5485 IN USHORT Offset,
5486 IN USHORT Data);
5487
5488 //
5489 // Prototypes of function definition in rtmp_tkip.c
5490 //
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);
5500
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);
5508
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);
5517
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);
5524
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);
5533
5534 VOID RTMPTkipAppendByte(
5535 IN PTKIP_KEY_INFO pTkip,
5536 IN UCHAR uChar);
5537
5538 VOID RTMPTkipAppend(
5539 IN PTKIP_KEY_INFO pTkip,
5540 IN PUCHAR pSrc,
5541 IN UINT nBytes);
5542
5543 VOID RTMPTkipGetMIC(
5544 IN PTKIP_KEY_INFO pTkip);
5545
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);
5552
5553 BOOLEAN RTMPSoftDecryptAES(
5554 IN PRTMP_ADAPTER pAd,
5555 IN PUCHAR pData,
5556 IN ULONG DataByteCnt,
5557 IN PCIPHER_KEY pWpaKey);
5558
5559 //
5560 // Prototypes of function definition in cmm_info.c
5561 //
5562 NDIS_STATUS RTMPWPARemoveKeyProc(
5563 IN PRTMP_ADAPTER pAd,
5564 IN PVOID pBuf);
5565
5566 VOID RTMPWPARemoveAllKeys(
5567 IN PRTMP_ADAPTER pAd);
5568
5569 BOOLEAN RTMPCheckStrPrintAble(
5570 IN CHAR *pInPutStr,
5571 IN UCHAR strLen);
5572
5573 VOID RTMPSetPhyMode(
5574 IN PRTMP_ADAPTER pAd,
5575 IN ULONG phymode);
5576
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);
5582
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);
5589
5590 CHAR *GetEncryptType(
5591 CHAR enc);
5592
5593 CHAR *GetAuthMode(
5594 CHAR auth);
5595
5596 VOID RTMPIoctlGetSiteSurvey(
5597 IN PRTMP_ADAPTER pAdapter,
5598 IN struct iwreq *wrq);
5599
5600 VOID RTMPIoctlGetMacTable(
5601 IN PRTMP_ADAPTER pAd,
5602 IN struct iwreq *wrq);
5603
5604 VOID RTMPIndicateWPA2Status(
5605 IN PRTMP_ADAPTER pAdapter);
5606
5607 VOID RTMPOPModeSwitching(
5608 IN PRTMP_ADAPTER pAd);
5609
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 //
5617
5618 #ifdef DOT11_N_SUPPORT
5619 VOID RTMPSetHT(
5620 IN PRTMP_ADAPTER pAd,
5621 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5622
5623 VOID RTMPSetIndividualHT(
5624 IN PRTMP_ADAPTER pAd,
5625 IN UCHAR apidx);
5626 #endif // DOT11_N_SUPPORT //
5627
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);
5634
5635 VOID NICUpdateCntlCounters(
5636 IN PRTMP_ADAPTER pAd,
5637 IN PHEADER_802_11 pHeader,
5638 IN UCHAR SubType,
5639 IN PRXWI_STRUC pRxWI);
5640 //
5641 // prototype in wpa.c
5642 //
5643 BOOLEAN WpaMsgTypeSubst(
5644 IN UCHAR EAPType,
5645 OUT INT *MsgType);
5646
5647 VOID WpaPskStateMachineInit(
5648 IN PRTMP_ADAPTER pAd,
5649 IN STATE_MACHINE *S,
5650 OUT STATE_MACHINE_FUNC Trans[]);
5651
5652 VOID WpaEAPOLKeyAction(
5653 IN PRTMP_ADAPTER pAd,
5654 IN MLME_QUEUE_ELEM *Elem);
5655
5656 VOID WpaPairMsg1Action(
5657 IN PRTMP_ADAPTER pAd,
5658 IN MLME_QUEUE_ELEM *Elem);
5659
5660 VOID WpaPairMsg3Action(
5661 IN PRTMP_ADAPTER pAd,
5662 IN MLME_QUEUE_ELEM *Elem);
5663
5664 VOID WpaGroupMsg1Action(
5665 IN PRTMP_ADAPTER pAd,
5666 IN MLME_QUEUE_ELEM *Elem);
5667
5668 VOID WpaMacHeaderInit(
5669 IN PRTMP_ADAPTER pAd,
5670 IN OUT PHEADER_802_11 pHdr80211,
5671 IN UCHAR wep,
5672 IN PUCHAR pAddr1);
5673
5674 VOID Wpa2PairMsg1Action(
5675 IN PRTMP_ADAPTER pAd,
5676 IN MLME_QUEUE_ELEM *Elem);
5677
5678 VOID Wpa2PairMsg3Action(
5679 IN PRTMP_ADAPTER pAd,
5680 IN MLME_QUEUE_ELEM *Elem);
5681
5682 BOOLEAN ParseKeyData(
5683 IN PRTMP_ADAPTER pAd,
5684 IN PUCHAR pKeyData,
5685 IN UCHAR KeyDataLen,
5686 IN UCHAR bPairewise);
5687
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);
5695
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);
5702
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);
5712
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);
5720
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);
5730
5731 VOID GenRandom(
5732 IN PRTMP_ADAPTER pAd,
5733 IN UCHAR *macAddr,
5734 OUT UCHAR *random);
5735
5736 //
5737 // prototype in aironet.c
5738 //
5739 VOID AironetStateMachineInit(
5740 IN PRTMP_ADAPTER pAd,
5741 IN STATE_MACHINE *S,
5742 OUT STATE_MACHINE_FUNC Trans[]);
5743
5744 VOID AironetMsgAction(
5745 IN PRTMP_ADAPTER pAd,
5746 IN MLME_QUEUE_ELEM *Elem);
5747
5748 VOID AironetRequestAction(
5749 IN PRTMP_ADAPTER pAd,
5750 IN MLME_QUEUE_ELEM *Elem);
5751
5752 VOID ChannelLoadRequestAction(
5753 IN PRTMP_ADAPTER pAd,
5754 IN UCHAR Index);
5755
5756 VOID NoiseHistRequestAction(
5757 IN PRTMP_ADAPTER pAd,
5758 IN UCHAR Index);
5759
5760 VOID BeaconRequestAction(
5761 IN PRTMP_ADAPTER pAd,
5762 IN UCHAR Index);
5763
5764 VOID AironetReportAction(
5765 IN PRTMP_ADAPTER pAd,
5766 IN MLME_QUEUE_ELEM *Elem);
5767
5768 VOID ChannelLoadReportAction(
5769 IN PRTMP_ADAPTER pAd,
5770 IN UCHAR Index);
5771
5772 VOID NoiseHistReportAction(
5773 IN PRTMP_ADAPTER pAd,
5774 IN UCHAR Index);
5775
5776 VOID AironetFinalReportAction(
5777 IN PRTMP_ADAPTER pAd);
5778
5779 VOID BeaconReportAction(
5780 IN PRTMP_ADAPTER pAd,
5781 IN UCHAR Index);
5782
5783 VOID AironetAddBeaconReport(
5784 IN PRTMP_ADAPTER pAd,
5785 IN ULONG Index,
5786 IN PMLME_QUEUE_ELEM pElem);
5787
5788 VOID AironetCreateBeaconReportFromBssTable(
5789 IN PRTMP_ADAPTER pAd);
5790
5791 VOID DBGPRINT_TX_RING(
5792 IN PRTMP_ADAPTER pAd,
5793 IN UCHAR QueIdx);
5794
5795 VOID DBGPRINT_RX_RING(
5796 IN PRTMP_ADAPTER pAd);
5797
5798 CHAR ConvertToRssi(
5799 IN PRTMP_ADAPTER pAd,
5800 IN CHAR Rssi,
5801 IN UCHAR RssiNumber);
5802
5803
5804 #ifdef DOT11N_DRAFT3
5805 VOID BuildEffectedChannelList(
5806 IN PRTMP_ADAPTER pAd);
5807 #endif // DOT11N_DRAFT3 //
5808
5809
5810 VOID APAsicEvaluateRxAnt(
5811 IN PRTMP_ADAPTER pAd);
5812
5813
5814 VOID APAsicRxAntEvalTimeout(
5815 IN PRTMP_ADAPTER pAd);
5816
5817 //
5818 // function prototype in cmm_wpa.c
5819 //
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);
5826
5827 VOID AES_GTK_KEY_UNWRAP(
5828 IN UCHAR *key,
5829 OUT UCHAR *plaintext,
5830 IN UCHAR c_len,
5831 IN UCHAR *ciphertext);
5832
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);
5839
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);
5848
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);
5864
5865 VOID CalculateMIC(
5866 IN PRTMP_ADAPTER pAd,
5867 IN UCHAR PeerWepStatus,
5868 IN UCHAR *PTK,
5869 OUT PEAPOL_PACKET pMsg);
5870
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);
5876
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);
5890
5891 VOID RTMPMakeRSNIE(
5892 IN PRTMP_ADAPTER pAd,
5893 IN UINT AuthMode,
5894 IN UINT WepStatus,
5895 IN UCHAR apidx);
5896
5897 //
5898 // function prototype in ap_wpa.c
5899 //
5900
5901 BOOLEAN APWpaMsgTypeSubst(
5902 IN UCHAR EAPType,
5903 OUT INT *MsgType) ;
5904
5905 MAC_TABLE_ENTRY *PACInquiry(
5906 IN PRTMP_ADAPTER pAd,
5907 IN ULONG Wcid);
5908
5909 BOOLEAN RTMPCheckMcast(
5910 IN PRTMP_ADAPTER pAd,
5911 IN PEID_STRUCT eid_ptr,
5912 IN MAC_TABLE_ENTRY *pEntry);
5913
5914 BOOLEAN RTMPCheckUcast(
5915 IN PRTMP_ADAPTER pAd,
5916 IN PEID_STRUCT eid_ptr,
5917 IN MAC_TABLE_ENTRY *pEntry);
5918
5919 BOOLEAN RTMPCheckAUTH(
5920 IN PRTMP_ADAPTER pAd,
5921 IN PEID_STRUCT eid_ptr,
5922 IN MAC_TABLE_ENTRY *pEntry);
5923
5924 VOID WPAStart4WayHS(
5925 IN PRTMP_ADAPTER pAd,
5926 IN MAC_TABLE_ENTRY *pEntry,
5927 IN ULONG TimeInterval);
5928
5929 VOID WPAStart2WayGroupHS(
5930 IN PRTMP_ADAPTER pAd,
5931 IN MAC_TABLE_ENTRY *pEntry);
5932
5933 VOID APWpaEAPPacketAction(
5934 IN PRTMP_ADAPTER pAd,
5935 IN MLME_QUEUE_ELEM *Elem);
5936
5937 VOID APWpaEAPOLStartAction(
5938 IN PRTMP_ADAPTER pAd,
5939 IN MLME_QUEUE_ELEM *Elem);
5940
5941 VOID APWpaEAPOLLogoffAction(
5942 IN PRTMP_ADAPTER pAd,
5943 IN MLME_QUEUE_ELEM *Elem);
5944
5945 VOID APWpaEAPOLKeyAction(
5946 IN PRTMP_ADAPTER pAd,
5947 IN MLME_QUEUE_ELEM *Elem);
5948
5949 VOID APWpaEAPOLASFAlertAction(
5950 IN PRTMP_ADAPTER pAd,
5951 IN MLME_QUEUE_ELEM *Elem);
5952
5953 VOID HandleCounterMeasure(
5954 IN PRTMP_ADAPTER pAd,
5955 IN MAC_TABLE_ENTRY *pEntry);
5956
5957 VOID PeerPairMsg2Action(
5958 IN PRTMP_ADAPTER pAd,
5959 IN MAC_TABLE_ENTRY *pEntry,
5960 IN MLME_QUEUE_ELEM *Elem);
5961
5962 VOID PeerPairMsg4Action(
5963 IN PRTMP_ADAPTER pAd,
5964 IN MAC_TABLE_ENTRY *pEntry,
5965 IN MLME_QUEUE_ELEM *Elem);
5966
5967 VOID CMTimerExec(
5968 IN PVOID SystemSpecific1,
5969 IN PVOID FunctionContext,
5970 IN PVOID SystemSpecific2,
5971 IN PVOID SystemSpecific3);
5972
5973 VOID WPARetryExec(
5974 IN PVOID SystemSpecific1,
5975 IN PVOID FunctionContext,
5976 IN PVOID SystemSpecific2,
5977 IN PVOID SystemSpecific3);
5978
5979 VOID EnqueueStartForPSKExec(
5980 IN PVOID SystemSpecific1,
5981 IN PVOID FunctionContext,
5982 IN PVOID SystemSpecific2,
5983 IN PVOID SystemSpecific3);
5984
5985 VOID RTMPHandleSTAKey(
5986 IN PRTMP_ADAPTER pAdapter,
5987 IN MAC_TABLE_ENTRY *pEntry,
5988 IN MLME_QUEUE_ELEM *Elem);
5989
5990 VOID PeerGroupMsg2Action(
5991 IN PRTMP_ADAPTER pAd,
5992 IN PMAC_TABLE_ENTRY pEntry,
5993 IN VOID *Msg,
5994 IN UINT MsgLen);
5995
5996 VOID PairDisAssocAction(
5997 IN PRTMP_ADAPTER pAd,
5998 IN PMAC_TABLE_ENTRY pEntry,
5999 IN USHORT Reason);
6000
6001 VOID MlmeDeAuthAction(
6002 IN PRTMP_ADAPTER pAd,
6003 IN PMAC_TABLE_ENTRY pEntry,
6004 IN USHORT Reason);
6005
6006 VOID GREKEYPeriodicExec(
6007 IN PVOID SystemSpecific1,
6008 IN PVOID FunctionContext,
6009 IN PVOID SystemSpecific2,
6010 IN PVOID SystemSpecific3);
6011
6012 VOID CountGTK(
6013 IN UCHAR *PMK,
6014 IN UCHAR *GNonce,
6015 IN UCHAR *AA,
6016 OUT UCHAR *output,
6017 IN UINT len);
6018
6019 VOID GetSmall(
6020 IN PVOID pSrc1,
6021 IN PVOID pSrc2,
6022 OUT PUCHAR out,
6023 IN ULONG Length);
6024
6025 VOID GetLarge(
6026 IN PVOID pSrc1,
6027 IN PVOID pSrc2,
6028 OUT PUCHAR out,
6029 IN ULONG Length);
6030
6031 VOID APGenRandom(
6032 IN PRTMP_ADAPTER pAd,
6033 OUT UCHAR *random);
6034
6035 VOID AES_GTK_KEY_WRAP(
6036 IN UCHAR *key,
6037 IN UCHAR *plaintext,
6038 IN UCHAR p_len,
6039 OUT UCHAR *ciphertext);
6040
6041 VOID WpaSend(
6042 IN PRTMP_ADAPTER pAdapter,
6043 IN PUCHAR pPacket,
6044 IN ULONG Len);
6045
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);
6054
6055 VOID RTMPAddPMKIDCache(
6056 IN PRTMP_ADAPTER pAd,
6057 IN INT apidx,
6058 IN PUCHAR pAddr,
6059 IN UCHAR *PMKID,
6060 IN UCHAR *PMK);
6061
6062 INT RTMPSearchPMKIDCache(
6063 IN PRTMP_ADAPTER pAd,
6064 IN INT apidx,
6065 IN PUCHAR pAddr);
6066
6067 VOID RTMPDeletePMKIDCache(
6068 IN PRTMP_ADAPTER pAd,
6069 IN INT apidx,
6070 IN INT idx);
6071
6072 VOID RTMPMaintainPMKIDCache(
6073 IN PRTMP_ADAPTER pAd);
6074
6075 VOID RTMPSendTriggerFrame(
6076 IN PRTMP_ADAPTER pAd,
6077 IN PVOID pBuffer,
6078 IN ULONG Length,
6079 IN UCHAR TxRate,
6080 IN BOOLEAN bQosNull);
6081
6082
6083 /* timeout -- ms */
6084 VOID RTMP_SetPeriodicTimer(
6085 IN NDIS_MINIPORT_TIMER *pTimer,
6086 IN unsigned long timeout);
6087
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);
6093
6094 VOID RTMP_OS_Add_Timer(
6095 IN NDIS_MINIPORT_TIMER *pTimer,
6096 IN unsigned long timeout);
6097
6098 VOID RTMP_OS_Mod_Timer(
6099 IN NDIS_MINIPORT_TIMER *pTimer,
6100 IN unsigned long timeout);
6101
6102
6103 VOID RTMP_OS_Del_Timer(
6104 IN NDIS_MINIPORT_TIMER *pTimer,
6105 OUT BOOLEAN *pCancelled);
6106
6107
6108 VOID RTMP_OS_Release_Packet(
6109 IN PRTMP_ADAPTER pAd,
6110 IN PQUEUE_ENTRY pEntry);
6111
6112 VOID RTMPusecDelay(
6113 IN ULONG usec);
6114
6115 NDIS_STATUS os_alloc_mem(
6116 IN PRTMP_ADAPTER pAd,
6117 OUT PUCHAR *mem,
6118 IN ULONG size);
6119
6120 NDIS_STATUS os_free_mem(
6121 IN PRTMP_ADAPTER pAd,
6122 IN PUCHAR mem);
6123
6124
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);
6131
6132 VOID RTMPFreeTxRxRingMemory(
6133 IN PRTMP_ADAPTER pAd);
6134
6135 NDIS_STATUS AdapterBlockAllocateMemory(
6136 IN PVOID handle,
6137 OUT PVOID *ppAd);
6138
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);
6146
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);
6154
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);
6161
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);
6168
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);
6175
6176 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6177 IN PRTMP_ADAPTER pAd,
6178 IN ULONG Length,
6179 IN BOOLEAN Cached,
6180 OUT PVOID *VirtualAddress);
6181
6182 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6183 IN PRTMP_ADAPTER pAd,
6184 IN ULONG Length);
6185
6186 void RTMP_QueryPacketInfo(
6187 IN PNDIS_PACKET pPacket,
6188 OUT PACKET_INFO *pPacketInfo,
6189 OUT PUCHAR *pSrcBufVA,
6190 OUT UINT *pSrcBufLen);
6191
6192 void RTMP_QueryNextPacketInfo(
6193 IN PNDIS_PACKET *ppPacket,
6194 OUT PACKET_INFO *pPacketInfo,
6195 OUT PUCHAR *pSrcBufVA,
6196 OUT UINT *pSrcBufLen);
6197
6198
6199 BOOLEAN RTMP_FillTxBlkInfo(
6200 IN RTMP_ADAPTER *pAd,
6201 IN TX_BLK *pTxBlk);
6202
6203
6204 PRTMP_SCATTER_GATHER_LIST
6205 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6206
6207
6208 void announce_802_3_packet(
6209 IN PRTMP_ADAPTER pAd,
6210 IN PNDIS_PACKET pPacket);
6211
6212
6213 UINT BA_Reorder_AMSDU_Annnounce(
6214 IN PRTMP_ADAPTER pAd,
6215 IN PNDIS_PACKET pPacket);
6216
6217
6218 UINT Handle_AMSDU_Packet(
6219 IN PRTMP_ADAPTER pAd,
6220 IN PUCHAR pData,
6221 IN ULONG DataSize,
6222 IN UCHAR FromWhichBSSID);
6223
6224
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);
6232
6233
6234 PNET_DEV get_netdev_from_bssid(
6235 IN PRTMP_ADAPTER pAd,
6236 IN UCHAR FromWhichBSSID);
6237
6238
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);
6246
6247
6248 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6249 IN PRTMP_ADAPTER pAd,
6250 IN PNDIS_PACKET pOldPkt);
6251
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);
6259
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);
6265
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);
6272
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);
6278
6279
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);
6287
6288 VOID BASessionTearDownALL(
6289 IN OUT PRTMP_ADAPTER pAd,
6290 IN UCHAR Wcid);
6291 #endif // DOT11_N_SUPPORT //
6292
6293 BOOLEAN OS_Need_Clone_Packet(void);
6294
6295
6296 VOID build_tx_packet(
6297 IN PRTMP_ADAPTER pAd,
6298 IN PNDIS_PACKET pPacket,
6299 IN PUCHAR pFrame,
6300 IN ULONG FrameLen);
6301
6302
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);
6309
6310 VOID BARecSessionTearDown(
6311 IN OUT PRTMP_ADAPTER pAd,
6312 IN UCHAR Wcid,
6313 IN UCHAR TID,
6314 IN BOOLEAN bPassive);
6315
6316 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6317 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6318
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);
6326
6327 void AutoChBssTableInit(
6328 IN PRTMP_ADAPTER pAd);
6329
6330 void ChannelInfoInit(
6331 IN PRTMP_ADAPTER pAd);
6332
6333 void AutoChBssTableDestroy(
6334 IN PRTMP_ADAPTER pAd);
6335
6336 void ChannelInfoDestroy(
6337 IN PRTMP_ADAPTER pAd);
6338
6339 UCHAR New_ApAutoSelectChannel(
6340 IN PRTMP_ADAPTER pAd);
6341
6342 BOOLEAN rtstrmactohex(
6343 IN char *s1,
6344 IN char *s2);
6345
6346 BOOLEAN rtstrcasecmp(
6347 IN char *s1,
6348 IN char *s2);
6349
6350 char *rtstrstruncasecmp(
6351 IN char *s1,
6352 IN char *s2);
6353
6354 char *rtstrstr(
6355 IN const char * s1,
6356 IN const char * s2);
6357
6358 char *rstrtok(
6359 IN char * s,
6360 IN const char * ct);
6361
6362 int rtinet_aton(
6363 const char *cp,
6364 unsigned int *addr);
6365
6366 ////////// common ioctl functions //////////
6367 INT Set_DriverVersion_Proc(
6368 IN PRTMP_ADAPTER pAd,
6369 IN PUCHAR arg);
6370
6371 INT Set_CountryRegion_Proc(
6372 IN PRTMP_ADAPTER pAd,
6373 IN PUCHAR arg);
6374
6375 INT Set_CountryRegionABand_Proc(
6376 IN PRTMP_ADAPTER pAd,
6377 IN PUCHAR arg);
6378
6379 INT Set_WirelessMode_Proc(
6380 IN PRTMP_ADAPTER pAd,
6381 IN PUCHAR arg);
6382
6383 INT Set_Channel_Proc(
6384 IN PRTMP_ADAPTER pAd,
6385 IN PUCHAR arg);
6386
6387 INT Set_ShortSlot_Proc(
6388 IN PRTMP_ADAPTER pAd,
6389 IN PUCHAR arg);
6390
6391 INT Set_TxPower_Proc(
6392 IN PRTMP_ADAPTER pAd,
6393 IN PUCHAR arg);
6394
6395 INT Set_BGProtection_Proc(
6396 IN PRTMP_ADAPTER pAd,
6397 IN PUCHAR arg);
6398
6399 INT Set_TxPreamble_Proc(
6400 IN PRTMP_ADAPTER pAd,
6401 IN PUCHAR arg);
6402
6403 INT Set_RTSThreshold_Proc(
6404 IN PRTMP_ADAPTER pAd,
6405 IN PUCHAR arg);
6406
6407 INT Set_FragThreshold_Proc(
6408 IN PRTMP_ADAPTER pAd,
6409 IN PUCHAR arg);
6410
6411 INT Set_TxBurst_Proc(
6412 IN PRTMP_ADAPTER pAd,
6413 IN PUCHAR arg);
6414
6415 #ifdef AGGREGATION_SUPPORT
6416 INT Set_PktAggregate_Proc(
6417 IN PRTMP_ADAPTER pAd,
6418 IN PUCHAR arg);
6419 #endif
6420
6421 INT Set_IEEE80211H_Proc(
6422 IN PRTMP_ADAPTER pAd,
6423 IN PUCHAR arg);
6424
6425 #ifdef DBG
6426 INT Set_Debug_Proc(
6427 IN PRTMP_ADAPTER pAd,
6428 IN PUCHAR arg);
6429 #endif
6430
6431 INT Show_DescInfo_Proc(
6432 IN PRTMP_ADAPTER pAd,
6433 IN PUCHAR arg);
6434
6435 INT Set_ResetStatCounter_Proc(
6436 IN PRTMP_ADAPTER pAd,
6437 IN PUCHAR arg);
6438
6439 #ifdef DOT11_N_SUPPORT
6440 INT Set_BASetup_Proc(
6441 IN PRTMP_ADAPTER pAd,
6442 IN PUCHAR arg);
6443
6444 INT Set_BADecline_Proc(
6445 IN PRTMP_ADAPTER pAd,
6446 IN PUCHAR arg);
6447
6448 INT Set_BAOriTearDown_Proc(
6449 IN PRTMP_ADAPTER pAd,
6450 IN PUCHAR arg);
6451
6452 INT Set_BARecTearDown_Proc(
6453 IN PRTMP_ADAPTER pAd,
6454 IN PUCHAR arg);
6455
6456 INT Set_HtBw_Proc(
6457 IN PRTMP_ADAPTER pAd,
6458 IN PUCHAR arg);
6459
6460 INT Set_HtMcs_Proc(
6461 IN PRTMP_ADAPTER pAd,
6462 IN PUCHAR arg);
6463
6464 INT Set_HtGi_Proc(
6465 IN PRTMP_ADAPTER pAd,
6466 IN PUCHAR arg);
6467
6468 INT Set_HtOpMode_Proc(
6469 IN PRTMP_ADAPTER pAd,
6470 IN PUCHAR arg);
6471
6472 INT Set_HtStbc_Proc(
6473 IN PRTMP_ADAPTER pAd,
6474 IN PUCHAR arg);
6475
6476 INT Set_HtHtc_Proc(
6477 IN PRTMP_ADAPTER pAd,
6478 IN PUCHAR arg);
6479
6480 INT Set_HtExtcha_Proc(
6481 IN PRTMP_ADAPTER pAd,
6482 IN PUCHAR arg);
6483
6484 INT Set_HtMpduDensity_Proc(
6485 IN PRTMP_ADAPTER pAd,
6486 IN PUCHAR arg);
6487
6488 INT Set_HtBaWinSize_Proc(
6489 IN PRTMP_ADAPTER pAd,
6490 IN PUCHAR arg);
6491
6492 INT Set_HtRdg_Proc(
6493 IN PRTMP_ADAPTER pAd,
6494 IN PUCHAR arg);
6495
6496 INT Set_HtLinkAdapt_Proc(
6497 IN PRTMP_ADAPTER pAd,
6498 IN PUCHAR arg);
6499
6500 INT Set_HtAmsdu_Proc(
6501 IN PRTMP_ADAPTER pAd,
6502 IN PUCHAR arg);
6503
6504 INT Set_HtAutoBa_Proc(
6505 IN PRTMP_ADAPTER pAd,
6506 IN PUCHAR arg);
6507
6508 INT Set_HtProtect_Proc(
6509 IN PRTMP_ADAPTER pAd,
6510 IN PUCHAR arg);
6511
6512 INT Set_HtMimoPs_Proc(
6513 IN PRTMP_ADAPTER pAd,
6514 IN PUCHAR arg);
6515
6516
6517 INT Set_ForceShortGI_Proc(
6518 IN PRTMP_ADAPTER pAd,
6519 IN PUCHAR arg);
6520
6521 INT Set_ForceGF_Proc(
6522 IN PRTMP_ADAPTER pAd,
6523 IN PUCHAR arg);
6524
6525 INT SetCommonHT(
6526 IN PRTMP_ADAPTER pAd);
6527
6528 INT Set_SendPSMPAction_Proc(
6529 IN PRTMP_ADAPTER pAd,
6530 IN PUCHAR arg);
6531
6532 INT Set_HtMIMOPSmode_Proc(
6533 IN PRTMP_ADAPTER pAd,
6534 IN PUCHAR arg);
6535
6536
6537 INT Set_HtTxBASize_Proc(
6538 IN PRTMP_ADAPTER pAd,
6539 IN PUCHAR arg);
6540 #endif // DOT11_N_SUPPORT //
6541
6542
6543
6544 #ifdef CONFIG_STA_SUPPORT
6545 //Dls , kathy
6546 VOID RTMPSendDLSTearDownFrame(
6547 IN PRTMP_ADAPTER pAd,
6548 IN PUCHAR pDA);
6549
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 //
6556
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);
6563
6564 VOID WpaSendMicFailureToWpaSupplicant(
6565 IN PRTMP_ADAPTER pAd,
6566 IN BOOLEAN bUnicast);
6567
6568 VOID SendAssocIEsToWpaSupplicant(
6569 IN PRTMP_ADAPTER pAd);
6570 #endif // WPA_SUPPLICANT_SUPPORT //
6571
6572 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6573 int wext_notify_event_assoc(
6574 IN RTMP_ADAPTER *pAd);
6575 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6576
6577 #endif // CONFIG_STA_SUPPORT //
6578
6579
6580
6581 #ifdef DOT11_N_SUPPORT
6582 VOID Handle_BSS_Width_Trigger_Events(
6583 IN PRTMP_ADAPTER pAd);
6584
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 //
6589
6590
6591 BOOLEAN APRxDoneInterruptHandle(
6592 IN PRTMP_ADAPTER pAd);
6593
6594 BOOLEAN STARxDoneInterruptHandle(
6595 IN PRTMP_ADAPTER pAd,
6596 IN BOOLEAN argc);
6597
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);
6604
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 //
6611
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);
6617
6618 VOID Indicate_EAPOL_Packet(
6619 IN PRTMP_ADAPTER pAd,
6620 IN RX_BLK *pRxBlk,
6621 IN UCHAR FromWhichBSSID);
6622
6623 void update_os_packet_info(
6624 IN PRTMP_ADAPTER pAd,
6625 IN RX_BLK *pRxBlk,
6626 IN UCHAR FromWhichBSSID);
6627
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);
6633
6634 UINT deaggregate_AMSDU_announce(
6635 IN PRTMP_ADAPTER pAd,
6636 PNDIS_PACKET pPacket,
6637 IN PUCHAR pData,
6638 IN ULONG DataSize);
6639
6640
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) \
6644 { \
6645 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6646 \
6647 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6648 { \
6649 _pDA = _pRxBlk->pHeader->Addr3; \
6650 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6651 } \
6652 else \
6653 { \
6654 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6655 { \
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; \
6661 } \
6662 else \
6663 { \
6664 _pDA = _pRxBlk->pHeader->Addr1; \
6665 _pSA = _pRxBlk->pHeader->Addr2; \
6666 } \
6667 } \
6668 \
6669 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6670 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6671 }
6672 #endif // CONFIG_STA_SUPPORT //
6673
6674
6675 BOOLEAN APFowardWirelessStaToWirelessSta(
6676 IN PRTMP_ADAPTER pAd,
6677 IN PNDIS_PACKET pPacket,
6678 IN ULONG FromWhichBSSID);
6679
6680 VOID Announce_or_Forward_802_3_Packet(
6681 IN PRTMP_ADAPTER pAd,
6682 IN PNDIS_PACKET pPacket,
6683 IN UCHAR FromWhichBSSID);
6684
6685 VOID Sta_Announce_or_Forward_802_3_Packet(
6686 IN PRTMP_ADAPTER pAd,
6687 IN PNDIS_PACKET pPacket,
6688 IN UCHAR FromWhichBSSID);
6689
6690
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 //
6696
6697
6698 PNDIS_PACKET DuplicatePacket(
6699 IN PRTMP_ADAPTER pAd,
6700 IN PNDIS_PACKET pPacket,
6701 IN UCHAR FromWhichBSSID);
6702
6703
6704 PNDIS_PACKET ClonePacket(
6705 IN PRTMP_ADAPTER pAd,
6706 IN PNDIS_PACKET pPacket,
6707 IN PUCHAR pData,
6708 IN ULONG DataSize);
6709
6710
6711 // Normal, AMPDU or AMSDU
6712 VOID CmmRxnonRalinkFrameIndicate(
6713 IN PRTMP_ADAPTER pAd,
6714 IN RX_BLK *pRxBlk,
6715 IN UCHAR FromWhichBSSID);
6716
6717 VOID CmmRxRalinkFrameIndicate(
6718 IN PRTMP_ADAPTER pAd,
6719 IN MAC_TABLE_ENTRY *pEntry,
6720 IN RX_BLK *pRxBlk,
6721 IN UCHAR FromWhichBSSID);
6722
6723 VOID Update_Rssi_Sample(
6724 IN PRTMP_ADAPTER pAd,
6725 IN RSSI_SAMPLE *pRssi,
6726 IN PRXWI_STRUC pRxWI);
6727
6728 PNDIS_PACKET GetPacketFromRxRing(
6729 IN PRTMP_ADAPTER pAd,
6730 OUT PRT28XX_RXD_STRUC pSaveRxD,
6731 OUT BOOLEAN *pbReschedule,
6732 IN OUT UINT32 *pRxPending);
6733
6734 PNDIS_PACKET RTMPDeFragmentDataFrame(
6735 IN PRTMP_ADAPTER pAd,
6736 IN RX_BLK *pRxBlk);
6737
6738 ////////////////////////////////////////
6739
6740
6741
6742
6743
6744 #ifdef SNMP_SUPPORT
6745 //for snmp , kathy
6746 typedef struct _DefaultKeyIdxValue
6747 {
6748 UCHAR KeyIdx;
6749 UCHAR Value[16];
6750 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6751 #endif
6752
6753
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
6767 };
6768 enum {
6769 P80211ENUM_msgitem_status_no_value = 0x00
6770 };
6771 enum {
6772 P80211ENUM_truth_false = 0x00,
6773 P80211ENUM_truth_true = 0x01
6774 };
6775
6776 /* Definition from madwifi */
6777 typedef struct {
6778 UINT32 did;
6779 UINT16 status;
6780 UINT16 len;
6781 UINT32 data;
6782 } p80211item_uint32_t;
6783
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;
6800
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.
6807 */
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.
6813 */
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.
6820 */
6821 }ieee80211_radiotap_header ;
6822
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
6838 };
6839
6840 #define WLAN_RADIOTAP_PRESENT ( \
6841 (1 << IEEE80211_RADIOTAP_TSFT) | \
6842 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6843 (1 << IEEE80211_RADIOTAP_RATE) | \
6844 0)
6845
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 */
6853
6854 void send_monitor_packets(
6855 IN PRTMP_ADAPTER pAd,
6856 IN RX_BLK *pRxBlk);
6857
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
6863
6864 VOID RTMPSetDesiredRates(
6865 IN PRTMP_ADAPTER pAdapter,
6866 IN LONG Rates);
6867 #endif // CONFIG_STA_SUPPORT //
6868
6869 INT Set_FixedTxMode_Proc(
6870 IN PRTMP_ADAPTER pAd,
6871 IN PUCHAR arg);
6872
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 //
6878
6879 static inline char* GetPhyMode(
6880 int Mode)
6881 {
6882 switch(Mode)
6883 {
6884 case MODE_CCK:
6885 return "CCK";
6886
6887 case MODE_OFDM:
6888 return "OFDM";
6889 #ifdef DOT11_N_SUPPORT
6890 case MODE_HTMIX:
6891 return "HTMIX";
6892
6893 case MODE_HTGREENFIELD:
6894 return "GREEN";
6895 #endif // DOT11_N_SUPPORT //
6896 default:
6897 return "N/A";
6898 }
6899 }
6900
6901
6902 static inline char* GetBW(
6903 int BW)
6904 {
6905 switch(BW)
6906 {
6907 case BW_10:
6908 return "10M";
6909
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";
6918 }
6919 }
6920
6921
6922 VOID RT28xxThreadTerminate(
6923 IN RTMP_ADAPTER *pAd);
6924
6925 BOOLEAN RT28XXChipsetCheck(
6926 IN void *_dev_p);
6927
6928 BOOLEAN RT28XXNetDevInit(
6929 IN void *_dev_p,
6930 IN struct net_device *net_dev,
6931 IN RTMP_ADAPTER *pAd);
6932
6933 BOOLEAN RT28XXProbePostConfig(
6934 IN void *_dev_p,
6935 IN RTMP_ADAPTER *pAd,
6936 IN INT32 argc);
6937
6938 VOID RT28XXDMADisable(
6939 IN RTMP_ADAPTER *pAd);
6940
6941 VOID RT28XXDMAEnable(
6942 IN RTMP_ADAPTER *pAd);
6943
6944 VOID RT28xx_UpdateBeaconToAsic(
6945 IN RTMP_ADAPTER * pAd,
6946 IN INT apidx,
6947 IN ULONG BeaconLen,
6948 IN ULONG UpdatePos);
6949
6950 INT rt28xx_ioctl(
6951 IN struct net_device *net_dev,
6952 IN OUT struct ifreq *rq,
6953 IN INT cmd);
6954
6955
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 //
6962
6963 BOOLEAN RT28XXSecurityKeyAdd(
6964 IN PRTMP_ADAPTER pAd,
6965 IN ULONG apidx,
6966 IN ULONG KeyIdx,
6967 IN MAC_TABLE_ENTRY *pEntry);
6968
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);
6975
6976
6977 void kill_thread_task(PRTMP_ADAPTER pAd);
6978
6979 void tbtt_tasklet(unsigned long data);
6980
6981 #ifdef RT2860
6982 //
6983 // Function Prototype in cmm_data_2860.c
6984 //
6985 USHORT RtmpPCI_WriteTxResource(
6986 IN PRTMP_ADAPTER pAd,
6987 IN TX_BLK *pTxBlk,
6988 IN BOOLEAN bIsLast,
6989 OUT USHORT *FreeNumber);
6990
6991 USHORT RtmpPCI_WriteSingleTxResource(
6992 IN PRTMP_ADAPTER pAd,
6993 IN TX_BLK *pTxBlk,
6994 IN BOOLEAN bIsLast,
6995 OUT USHORT *FreeNumber);
6996
6997 USHORT RtmpPCI_WriteMultiTxResource(
6998 IN PRTMP_ADAPTER pAd,
6999 IN TX_BLK *pTxBlk,
7000 IN UCHAR frameNum,
7001 OUT USHORT *FreeNumber);
7002
7003 USHORT RtmpPCI_WriteFragTxResource(
7004 IN PRTMP_ADAPTER pAd,
7005 IN TX_BLK *pTxBlk,
7006 IN UCHAR fragNum,
7007 OUT USHORT *FreeNumber);
7008
7009 USHORT RtmpPCI_WriteSubTxResource(
7010 IN PRTMP_ADAPTER pAd,
7011 IN TX_BLK *pTxBlk,
7012 IN BOOLEAN bIsLast,
7013 OUT USHORT *FreeNumber);
7014
7015 VOID RtmpPCI_FinalWriteTxResource(
7016 IN PRTMP_ADAPTER pAd,
7017 IN TX_BLK *pTxBlk,
7018 IN USHORT totalMPDUSize,
7019 IN USHORT FirstTxIdx);
7020
7021 VOID RtmpPCIDataLastTxIdx(
7022 IN PRTMP_ADAPTER pAd,
7023 IN UCHAR QueIdx,
7024 IN USHORT LastTxIdx);
7025
7026 VOID RtmpPCIDataKickOut(
7027 IN PRTMP_ADAPTER pAd,
7028 IN TX_BLK *pTxBlk,
7029 IN UCHAR QueIdx);
7030
7031
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);
7038
7039
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);
7045
7046 #ifdef CONFIG_STA_SUPPORT
7047 VOID RTMPInitPCIeLinkCtrlValue(
7048 IN PRTMP_ADAPTER pAd);
7049
7050 VOID RTMPFindHostPCIDev(
7051 IN PRTMP_ADAPTER pAd);
7052
7053 VOID RTMPPCIeLinkCtrlValueRestore(
7054 IN PRTMP_ADAPTER pAd,
7055 IN UCHAR Level);
7056
7057 VOID RTMPPCIeLinkCtrlSetting(
7058 IN PRTMP_ADAPTER pAd,
7059 IN USHORT Max);
7060
7061 VOID RT28xxPciAsicRadioOff(
7062 IN PRTMP_ADAPTER pAd,
7063 IN UCHAR Level,
7064 IN USHORT TbttNumToNextWakeUp);
7065
7066 BOOLEAN RT28xxPciAsicRadioOn(
7067 IN PRTMP_ADAPTER pAd,
7068 IN UCHAR Level);
7069
7070 VOID RT28xxPciStaAsicForceWakeup(
7071 IN PRTMP_ADAPTER pAd,
7072 IN BOOLEAN bFromTx);
7073
7074 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
7075 IN PRTMP_ADAPTER pAd,
7076 IN USHORT TbttNumToNextWakeUp);
7077
7078 VOID PsPollWakeExec(
7079 IN PVOID SystemSpecific1,
7080 IN PVOID FunctionContext,
7081 IN PVOID SystemSpecific2,
7082 IN PVOID SystemSpecific3);
7083
7084 VOID RadioOnExec(
7085 IN PVOID SystemSpecific1,
7086 IN PVOID FunctionContext,
7087 IN PVOID SystemSpecific2,
7088 IN PVOID SystemSpecific3);
7089 #endif // CONFIG_STA_SUPPORT //
7090
7091 VOID RT28xxPciMlmeRadioOn(
7092 IN PRTMP_ADAPTER pAd);
7093
7094 VOID RT28xxPciMlmeRadioOFF(
7095 IN PRTMP_ADAPTER pAd);
7096 #endif // RT2860 //
7097
7098 VOID AsicTurnOffRFClk(
7099 IN PRTMP_ADAPTER pAd,
7100 IN UCHAR Channel);
7101
7102 VOID AsicTurnOnRFClk(
7103 IN PRTMP_ADAPTER pAd,
7104 IN UCHAR Channel);
7105
7106
7107 ////////////////////////////////////////
7108
7109 VOID QBSS_LoadInit(
7110 IN RTMP_ADAPTER *pAd);
7111
7112 UINT32 QBSS_LoadElementAppend(
7113 IN RTMP_ADAPTER *pAd,
7114 OUT UINT8 *buf_p);
7115
7116 VOID QBSS_LoadUpdate(
7117 IN RTMP_ADAPTER *pAd);
7118
7119 ///////////////////////////////////////
7120 INT RTMPShowCfgValue(
7121 IN PRTMP_ADAPTER pAd,
7122 IN PUCHAR pName,
7123 IN PUCHAR pBuf);
7124
7125 PCHAR RTMPGetRalinkAuthModeStr(
7126 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7127
7128 PCHAR RTMPGetRalinkEncryModeStr(
7129 IN USHORT encryMode);
7130 //////////////////////////////////////
7131
7132 #ifdef CONFIG_STA_SUPPORT
7133 VOID AsicStaBbpTuning(
7134 IN PRTMP_ADAPTER pAd);
7135 #endif // CONFIG_STA_SUPPORT //
7136
7137 void RTMP_IndicateMediaState(
7138 IN PRTMP_ADAPTER pAd);
7139
7140 VOID ReSyncBeaconTime(
7141 IN PRTMP_ADAPTER pAd);
7142
7143 VOID RTMPSetAGCInitValue(
7144 IN PRTMP_ADAPTER pAd,
7145 IN UCHAR BandWidth);
7146
7147 int rt28xx_close(IN PNET_DEV dev);
7148 int rt28xx_open(IN PNET_DEV dev);
7149
7150 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7151 {
7152 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7153 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7154
7155 if (VIRTUAL_IF_NUM(pAd) == 0)
7156 {
7157 if (rt28xx_open(pAd->net_dev) != 0)
7158 return -1;
7159 }
7160 else
7161 {
7162 }
7163 VIRTUAL_IF_INC(pAd);
7164 return 0;
7165 }
7166
7167 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7168 {
7169 VIRTUAL_IF_DEC(pAd);
7170 if (VIRTUAL_IF_NUM(pAd) == 0)
7171 rt28xx_close(pAd->net_dev);
7172 return;
7173 }
7174
7175
7176 #endif // __RTMP_H__
7177