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