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