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