Staging: rt2860: remove dead SNMP_SUPPORT code
[safe/jmp/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
1897 #ifdef SINGLE_SKU
1898         UINT16                                  DefineMaxTxPwr;
1899 #endif // SINGLE_SKU //
1900
1901
1902 } COMMON_CONFIG, *PCOMMON_CONFIG;
1903
1904
1905 #ifdef CONFIG_STA_SUPPORT
1906 /* Modified by Wu Xi-Kun 4/21/2006 */
1907 // STA configuration and status
1908 typedef struct _STA_ADMIN_CONFIG {
1909         // GROUP 1 -
1910         //   User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1911         //   the user intended configuration, but not necessary fully equal to the final
1912         //   settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1913         //   AP or IBSS holder).
1914         //   Once initialized, user configuration can only be changed via OID_xxx
1915         UCHAR       BssType;              // BSS_INFRA or BSS_ADHOC
1916         USHORT      AtimWin;          // used when starting a new IBSS
1917
1918         // GROUP 2 -
1919         //   User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1920         //   the user intended configuration, and should be always applied to the final
1921         //   settings in ACTIVE BSS without compromising with the BSS holder.
1922         //   Once initialized, user configuration can only be changed via OID_xxx
1923         UCHAR       RssiTrigger;
1924         UCHAR       RssiTriggerMode;      // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1925         USHORT      DefaultListenCount;   // default listen count;
1926         ULONG       WindowsPowerMode;           // Power mode for AC power
1927         ULONG       WindowsBatteryPowerMode;    // Power mode for battery if exists
1928         BOOLEAN     bWindowsACCAMEnable;        // Enable CAM power mode when AC on
1929         BOOLEAN     bAutoReconnect;         // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1930         ULONG       WindowsPowerProfile;    // Windows power profile, for NDIS5.1 PnP
1931
1932         // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1933         USHORT      Psm;                  // power management mode   (PWR_ACTIVE|PWR_SAVE)
1934         USHORT      DisassocReason;
1935         UCHAR       DisassocSta[MAC_ADDR_LEN];
1936         USHORT      DeauthReason;
1937         UCHAR       DeauthSta[MAC_ADDR_LEN];
1938         USHORT      AuthFailReason;
1939         UCHAR       AuthFailSta[MAC_ADDR_LEN];
1940
1941         NDIS_802_11_PRIVACY_FILTER          PrivacyFilter;  // PrivacyFilter enum for 802.1X
1942         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;       // This should match to whatever microsoft defined
1943         NDIS_802_11_WEP_STATUS              WepStatus;
1944         NDIS_802_11_WEP_STATUS                          OrigWepStatus;  // Original wep status set from OID
1945
1946         // Add to support different cipher suite for WPA2/WPA mode
1947         NDIS_802_11_ENCRYPTION_STATUS           GroupCipher;            // Multicast cipher suite
1948         NDIS_802_11_ENCRYPTION_STATUS           PairCipher;                     // Unicast cipher suite
1949         BOOLEAN                                                         bMixCipher;                     // Indicate current Pair & Group use different cipher suites
1950         USHORT                                                          RsnCapability;
1951
1952         NDIS_802_11_WEP_STATUS              GroupKeyWepStatus;
1953
1954         UCHAR           PMK[32];                // WPA PSK mode PMK
1955         UCHAR       PTK[64];                // WPA PSK mode PTK
1956         UCHAR           GTK[32];                                // GTK from authenticator
1957         BSSID_INFO      SavedPMK[PMKID_NO];
1958         UINT            SavedPMKNum;                    // Saved PMKID number
1959
1960         UCHAR           DefaultKeyId;
1961
1962
1963         // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1964         UCHAR       PortSecured;
1965
1966         // For WPA countermeasures
1967         ULONG       LastMicErrorTime;   // record last MIC error time
1968         ULONG       MicErrCnt;          // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1969         BOOLEAN     bBlockAssoc;        // Block associate attempt for 60 seconds after counter measure occurred.
1970         // For WPA-PSK supplicant state
1971         WPA_STATE   WpaState;           // Default is SS_NOTUSE and handled by microsoft 802.1x
1972         UCHAR       ReplayCounter[8];
1973         UCHAR       ANonce[32];         // ANonce for WPA-PSK from aurhenticator
1974         UCHAR       SNonce[32];         // SNonce for WPA-PSK
1975
1976         UCHAR       LastSNR0;             // last received BEACON's SNR
1977         UCHAR       LastSNR1;            // last received BEACON's SNR for 2nd  antenna
1978         RSSI_SAMPLE RssiSample;
1979         ULONG       NumOfAvgRssiSample;
1980
1981         ULONG       LastBeaconRxTime;     // OS's timestamp of the last BEACON RX time
1982         ULONG       Last11bBeaconRxTime;  // OS's timestamp of the last 11B BEACON RX time
1983         ULONG           Last11gBeaconRxTime;    // OS's timestamp of the last 11G BEACON RX time
1984         ULONG           Last20NBeaconRxTime;    // OS's timestamp of the last 20MHz N BEACON RX time
1985
1986         ULONG       LastScanTime;       // Record last scan time for issue BSSID_SCAN_LIST
1987         ULONG       ScanCnt;            // Scan counts since most recent SSID, BSSID, SCAN OID request
1988         BOOLEAN     bSwRadio;           // Software controlled Radio On/Off, TRUE: On
1989         BOOLEAN     bHwRadio;           // Hardware controlled Radio On/Off, TRUE: On
1990         BOOLEAN     bRadio;             // Radio state, And of Sw & Hw radio state
1991         BOOLEAN     bHardwareRadio;     // Hardware controlled Radio enabled
1992         BOOLEAN     bShowHiddenSSID;    // Show all known SSID in SSID list get operation
1993
1994     BOOLEAN             AdhocBOnlyJoined;       // Indicate Adhoc B Join.
1995     BOOLEAN             AdhocBGJoined;          // Indicate Adhoc B/G Join.
1996     BOOLEAN             Adhoc20NJoined;         // Indicate Adhoc 20MHz N Join.
1997
1998         // New for WPA, windows want us to to keep association information and
1999         // Fixed IEs from last association response
2000         NDIS_802_11_ASSOCIATION_INFORMATION     AssocInfo;
2001         USHORT       ReqVarIELen;                // Length of next VIE include EID & Length
2002         UCHAR       ReqVarIEs[MAX_VIE_LEN];             // The content saved here should be little-endian format.
2003         USHORT       ResVarIELen;                // Length of next VIE include EID & Length
2004         UCHAR       ResVarIEs[MAX_VIE_LEN];
2005
2006         UCHAR       RSNIE_Len;
2007         UCHAR       RSN_IE[MAX_LEN_OF_RSNIE];   // The content saved here should be little-endian format.
2008
2009         // New variables used for CCX 1.0
2010         BOOLEAN             bCkipOn;
2011         BOOLEAN             bCkipCmicOn;
2012         UCHAR               CkipFlag;
2013         UCHAR               GIV[3];  //for CCX iv
2014         UCHAR               RxSEQ[4];
2015         UCHAR               TxSEQ[4];
2016         UCHAR               CKIPMIC[4];
2017         UCHAR               LeapAuthMode;
2018         LEAP_AUTH_INFO      LeapAuthInfo;
2019         UCHAR               HashPwd[16];
2020         UCHAR               NetworkChallenge[8];
2021         UCHAR               NetworkChallengeResponse[24];
2022         UCHAR               PeerChallenge[8];
2023
2024         UCHAR               PeerChallengeResponse[24];
2025         UCHAR               SessionKey[16]; //Network session keys (NSK)
2026         RALINK_TIMER_STRUCT LeapAuthTimer;
2027         ROGUEAP_TABLE       RogueApTab;   //Cisco CCX1 Rogue AP Detection
2028
2029         // New control flags for CCX
2030         CCX_CONTROL         CCXControl;                 // Master administration state
2031         BOOLEAN             CCXEnable;                  // Actual CCX state
2032         UCHAR               CCXScanChannel;             // Selected channel for CCX beacon request
2033         USHORT              CCXScanTime;                // Time out to wait for beacon and probe response
2034         UCHAR               CCXReqType;                 // Current processing CCX request type
2035         BSS_TABLE           CCXBssTab;                  // BSS Table
2036         UCHAR               FrameReportBuf[2048];       // Buffer for creating frame report
2037         USHORT              FrameReportLen;             // Current Frame report length
2038         ULONG               CLBusyBytes;                // Save the total bytes received durning channel load scan time
2039         USHORT              RPIDensity[8];              // Array for RPI density collection
2040         // Start address of each BSS table within FrameReportBuf
2041         // It's important to update the RxPower of the corresponding Bss
2042         USHORT              BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2043         USHORT              BeaconToken;                // Token for beacon report
2044         ULONG               LastBssIndex;               // Most current reported Bss index
2045         RM_REQUEST_ACTION   MeasurementRequest[16];     // Saved measurement request
2046         UCHAR               RMReqCnt;                   // Number of measurement request saved.
2047         UCHAR               CurrentRMReqIdx;            // Number of measurement request saved.
2048         BOOLEAN             ParallelReq;                // Parallel measurement, only one request performed,
2049                                                                                                         // It must be the same channel with maximum duration
2050         USHORT              ParallelDuration;           // Maximum duration for parallel measurement
2051         UCHAR               ParallelChannel;            // Only one channel with parallel measurement
2052         USHORT              IAPPToken;                  // IAPP dialog token
2053         UCHAR               CCXQosECWMin;               // Cisco QOS ECWMin for AC 0
2054         UCHAR               CCXQosECWMax;               // Cisco QOS ECWMax for AC 0
2055         // Hack for channel load and noise histogram parameters
2056         UCHAR               NHFactor;                   // Parameter for Noise histogram
2057         UCHAR               CLFactor;                   // Parameter for channel load
2058
2059         UCHAR               KRK[16];        //Key Refresh Key.
2060         UCHAR               BTK[32];        //Base Transient Key
2061         BOOLEAN             CCKMLinkUpFlag;
2062         ULONG               CCKMRN;    //(Re)Association request number.
2063         LARGE_INTEGER       CCKMBeaconAtJoinTimeStamp;  //TSF timer for Re-assocaite to the new AP
2064         UCHAR               AironetCellPowerLimit;      //in dBm
2065         UCHAR               AironetIPAddress[4];        //eg. 192.168.1.1
2066         BOOLEAN             CCXAdjacentAPReportFlag;    //flag for determining report Assoc Lost time
2067         CHAR                CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2068         UCHAR               CCXAdjacentAPSsidLen;               // the actual ssid length in used
2069         UCHAR               CCXAdjacentAPBssid[MAC_ADDR_LEN];         //Adjacent AP's BSSID report
2070         USHORT              CCXAdjacentAPChannel;
2071         ULONG               CCXAdjacentAPLinkDownTime;  //for Spec S32.
2072
2073         RALINK_TIMER_STRUCT     StaQuickResponeForRateUpTimer;
2074         BOOLEAN                         StaQuickResponeForRateUpTimerRunning;
2075
2076         UCHAR                   DtimCount;      // 0.. DtimPeriod-1
2077         UCHAR                   DtimPeriod;     // default = 3
2078
2079         ////////////////////////////////////////////////////////////////////////////////////////
2080         // This is only for WHQL test.
2081         BOOLEAN                         WhqlTest;
2082         ////////////////////////////////////////////////////////////////////////////////////////
2083
2084     RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2085     // Fast Roaming
2086         BOOLEAN                 bFastRoaming;       // 0:disable fast roaming, 1:enable fast roaming
2087         CHAR                    dBmToRoam;          // the condition to roam when receiving Rssi less than this value. It's negative value.
2088
2089 #ifdef WPA_SUPPLICANT_SUPPORT
2090     BOOLEAN             IEEE8021X;
2091     BOOLEAN             IEEE8021x_required_keys;
2092     CIPHER_KEY          DesireSharedKey[4];     // Record user desired WEP keys
2093     UCHAR               DesireSharedKeyId;
2094
2095     // 0: driver ignores wpa_supplicant
2096     // 1: wpa_supplicant initiates scanning and AP selection
2097     // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2098     UCHAR               WpaSupplicantUP;
2099         UCHAR                           WpaSupplicantScanCount;
2100 #endif // WPA_SUPPLICANT_SUPPORT //
2101
2102     CHAR                dev_name[16];
2103     USHORT              OriDevType;
2104
2105     BOOLEAN             bTGnWifiTest;
2106         BOOLEAN                     bScanReqIsFromWebUI;
2107
2108         HTTRANSMIT_SETTING                              HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2109         DESIRED_TRANSMIT_SETTING        DesiredTransmitSetting;
2110         RT_HT_PHY_INFO                                  DesiredHtPhyInfo;
2111         BOOLEAN                                                 bAutoTxRateSwitch;
2112
2113     UCHAR       BBPR3;
2114 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2115
2116 // This data structure keep the current active BSS/IBSS's configuration that this STA
2117 // had agreed upon joining the network. Which means these parameters are usually decided
2118 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2119 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2120 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2121 // the current active settings.
2122 typedef struct _STA_ACTIVE_CONFIG {
2123         USHORT      Aid;
2124         USHORT      AtimWin;                // in kusec; IBSS parameter set element
2125         USHORT      CapabilityInfo;
2126         USHORT      CfpMaxDuration;
2127         USHORT      CfpPeriod;
2128
2129         // Copy supported rate from desired AP's beacon. We are trying to match
2130         // AP's supported and extended rate settings.
2131         UCHAR       SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2132         UCHAR       ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2133         UCHAR       SupRateLen;
2134         UCHAR       ExtRateLen;
2135         // Copy supported ht from desired AP's beacon. We are trying to match
2136         RT_HT_PHY_INFO          SupportedPhyInfo;
2137         RT_HT_CAPABILITY        SupportedHtPhy;
2138 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2139 #endif // CONFIG_STA_SUPPORT //
2140
2141 // ----------- start of AP --------------------------
2142 // AUTH-RSP State Machine Aux data structure
2143 typedef struct _AP_MLME_AUX {
2144         UCHAR               Addr[MAC_ADDR_LEN];
2145         USHORT              Alg;
2146         CHAR                Challenge[CIPHER_TEXT_LEN];
2147 } AP_MLME_AUX, *PAP_MLME_AUX;
2148
2149 // structure to define WPA Group Key Rekey Interval
2150 typedef struct PACKED _RT_802_11_WPA_REKEY {
2151         ULONG ReKeyMethod;          // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2152         ULONG ReKeyInterval;        // time-based: seconds, packet-based: kilo-packets
2153 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2154
2155 typedef struct _MAC_TABLE_ENTRY {
2156         //Choose 1 from ValidAsWDS and ValidAsCLI  to validize.
2157         BOOLEAN         ValidAsCLI;             // Sta mode, set this TRUE after Linkup,too.
2158         BOOLEAN         ValidAsWDS;     // This is WDS Entry. only for AP mode.
2159         BOOLEAN         ValidAsApCli;   //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2160         BOOLEAN         ValidAsMesh;
2161         BOOLEAN         ValidAsDls;     // This is DLS Entry. only for STA mode.
2162         BOOLEAN         isCached;
2163         BOOLEAN         bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem.  We need to turn on RTS/CTS protection.
2164
2165         UCHAR           EnqueueEapolStartTimerRunning;  // Enqueue EAPoL-Start for triggering EAP SM
2166         //jan for wpa
2167         // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2168         UCHAR           CMTimerRunning;
2169         UCHAR           apidx;                  // MBSS number
2170         UCHAR           RSNIE_Len;
2171         UCHAR           RSN_IE[MAX_LEN_OF_RSNIE];
2172         UCHAR           ANonce[LEN_KEY_DESC_NONCE];
2173         UCHAR           R_Counter[LEN_KEY_DESC_REPLAY];
2174         UCHAR           PTK[64];
2175         UCHAR           ReTryCounter;
2176         RALINK_TIMER_STRUCT                 RetryTimer;
2177         RALINK_TIMER_STRUCT                                     EnqueueStartForPSKTimer;        // A timer which enqueue EAPoL-Start for triggering PSK SM
2178         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;   // This should match to whatever microsoft defined
2179         NDIS_802_11_WEP_STATUS              WepStatus;
2180         AP_WPA_STATE    WpaState;
2181         GTK_STATE       GTKState;
2182         USHORT          PortSecured;
2183         NDIS_802_11_PRIVACY_FILTER  PrivacyFilter;      // PrivacyFilter enum for 802.1X
2184         CIPHER_KEY      PairwiseKey;
2185         PVOID           pAd;
2186     INT                         PMKID_CacheIdx;
2187     UCHAR                       PMKID[LEN_PMKID];
2188
2189
2190         UCHAR           Addr[MAC_ADDR_LEN];
2191         UCHAR           PsMode;
2192         SST             Sst;
2193         AUTH_STATE      AuthState; // for SHARED KEY authentication state machine used only
2194         BOOLEAN                 IsReassocSta;   // Indicate whether this is a reassociation procedure
2195         USHORT          Aid;
2196         USHORT          CapabilityInfo;
2197         UCHAR           LastRssi;
2198         ULONG           NoDataIdleCount;
2199         UINT16                  StationKeepAliveCount; // unit: second
2200         ULONG           PsQIdleCount;
2201         QUEUE_HEADER    PsQueue;
2202
2203         UINT32                  StaConnectTime;         // the live time of this station since associated with AP
2204
2205
2206 #ifdef DOT11_N_SUPPORT
2207         BOOLEAN                 bSendBAR;
2208         USHORT                  NoBADataCountDown;
2209
2210         UINT32                  CachedBuf[16];          // UINT (4 bytes) for alignment
2211         UINT                    TxBFCount; // 3*3
2212 #endif // DOT11_N_SUPPORT //
2213         UINT                    FIFOCount;
2214         UINT                    DebugFIFOCount;
2215         UINT                    DebugTxCount;
2216     BOOLEAN                     bDlsInit;
2217
2218
2219 //====================================================
2220 //WDS entry needs these
2221 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2222         UINT                    MatchWDSTabIdx;
2223         UCHAR           MaxSupportedRate;
2224         UCHAR           CurrTxRate;
2225         UCHAR           CurrTxRateIndex;
2226         // to record the each TX rate's quality. 0 is best, the bigger the worse.
2227         USHORT          TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2228         UINT32                  OneSecTxNoRetryOkCount;
2229         UINT32          OneSecTxRetryOkCount;
2230         UINT32          OneSecTxFailCount;
2231         UINT32                  ContinueTxFailCnt;
2232         UINT32          CurrTxRateStableTime; // # of second in current TX rate
2233         UCHAR           TxRateUpPenalty;      // extra # of second penalty due to last unstable condition
2234 //====================================================
2235
2236         BOOLEAN         fNoisyEnvironment;
2237         BOOLEAN                 fLastSecAccordingRSSI;
2238         UCHAR           LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2239         CHAR                    LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2240         ULONG                   LastTxOkCount;
2241         UCHAR           PER[MAX_STEP_OF_TX_RATE_SWITCH];
2242
2243         // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2244         // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2245         // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2246         // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2247         ULONG           ClientStatusFlags;
2248
2249         // TODO: Shall we move that to DOT11_N_SUPPORT???
2250         HTTRANSMIT_SETTING      HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2251
2252 #ifdef DOT11_N_SUPPORT
2253         // HT EWC MIMO-N used parameters
2254         USHORT          RXBAbitmap;     // fill to on-chip  RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2255         USHORT          TXBAbitmap;     // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2256         USHORT          TXAutoBAbitmap;
2257         USHORT          BADeclineBitmap;
2258         USHORT          BARecWcidArray[NUM_OF_TID];     // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2259         USHORT          BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2260         USHORT          BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2261
2262         // 802.11n features.
2263         UCHAR           MpduDensity;
2264         UCHAR           MaxRAmpduFactor;
2265         UCHAR           AMsduSize;
2266         UCHAR           MmpsMode;       // MIMO power save more.
2267
2268         HT_CAPABILITY_IE                HTCapability;
2269
2270 #ifdef DOT11N_DRAFT3
2271         UCHAR           BSS2040CoexistenceMgmtSupport;
2272 #endif // DOT11N_DRAFT3 //
2273 #endif // DOT11_N_SUPPORT //
2274
2275         BOOLEAN         bAutoTxRateSwitch;
2276
2277         UCHAR       RateLen;
2278         struct _MAC_TABLE_ENTRY *pNext;
2279     USHORT      TxSeq[NUM_OF_TID];
2280         USHORT          NonQosDataSeq;
2281
2282         RSSI_SAMPLE     RssiSample;
2283
2284         UINT32                  TXMCSExpected[16];
2285         UINT32                  TXMCSSuccessful[16];
2286         UINT32                  TXMCSFailed[16];
2287         UINT32                  TXMCSAutoFallBack[16][16];
2288 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2289
2290 typedef struct _MAC_TABLE {
2291         USHORT                  Size;
2292         MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2293         MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2294         QUEUE_HEADER    McastPsQueue;
2295         ULONG           PsQIdleCount;
2296         BOOLEAN         fAnyStationInPsm;
2297         BOOLEAN         fAnyStationBadAtheros;  // Check if any Station is atheros 802.11n Chip.  We need to use RTS/CTS with Atheros 802,.11n chip.
2298         BOOLEAN                 fAnyTxOPForceDisable;   // Check if it is necessary to disable BE TxOP
2299 #ifdef DOT11_N_SUPPORT
2300         BOOLEAN         fAnyStationIsLegacy;    // Check if I use legacy rate to transmit to my BSS Station/
2301         BOOLEAN         fAnyStationNonGF;               // Check if any Station can't support GF.
2302         BOOLEAN         fAnyStation20Only;              // Check if any Station can't support GF.
2303         BOOLEAN                 fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2304         BOOLEAN         fAnyBASession;   // Check if there is BA session.  Force turn on RTS/CTS
2305 #endif // DOT11_N_SUPPORT //
2306 } MAC_TABLE, *PMAC_TABLE;
2307
2308 #ifdef DOT11_N_SUPPORT
2309 #define IS_HT_STA(_pMacEntry)   \
2310         (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2311
2312 #define IS_HT_RATE(_pMacEntry)  \
2313         (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2314
2315 #define PEER_IS_HT_RATE(_pMacEntry)     \
2316         (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2317 #endif // DOT11_N_SUPPORT //
2318
2319 typedef struct _WDS_ENTRY {
2320         BOOLEAN         Valid;
2321         UCHAR           Addr[MAC_ADDR_LEN];
2322         ULONG           NoDataIdleCount;
2323         struct _WDS_ENTRY *pNext;
2324 } WDS_ENTRY, *PWDS_ENTRY;
2325
2326 typedef struct  _WDS_TABLE_ENTRY {
2327         USHORT                  Size;
2328         UCHAR           WdsAddr[MAC_ADDR_LEN];
2329         WDS_ENTRY       *Hash[HASH_TABLE_SIZE];
2330         WDS_ENTRY       Content[MAX_LEN_OF_MAC_TABLE];
2331         UCHAR           MaxSupportedRate;
2332         UCHAR           CurrTxRate;
2333         USHORT          TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2334         USHORT          OneSecTxOkCount;
2335         USHORT          OneSecTxRetryOkCount;
2336         USHORT          OneSecTxFailCount;
2337         ULONG           CurrTxRateStableTime; // # of second in current TX rate
2338         UCHAR           TxRateUpPenalty;      // extra # of second penalty due to last unstable condition
2339 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2340
2341 typedef struct _RT_802_11_WDS_ENTRY {
2342         PNET_DEV                        dev;
2343         UCHAR                           Valid;
2344         UCHAR                           PhyMode;
2345         UCHAR                           PeerWdsAddr[MAC_ADDR_LEN];
2346         UCHAR                           MacTabMatchWCID;        // ASIC
2347         NDIS_802_11_WEP_STATUS  WepStatus;
2348         UCHAR                                   KeyIdx;
2349         CIPHER_KEY              WdsKey;
2350         HTTRANSMIT_SETTING                              HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2351         RT_HT_PHY_INFO                                  DesiredHtPhyInfo;
2352         BOOLEAN                                                 bAutoTxRateSwitch;
2353         DESIRED_TRANSMIT_SETTING        DesiredTransmitSetting; // Desired transmit setting.
2354 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2355
2356 typedef struct _WDS_TABLE {
2357         UCHAR               Mode;
2358         ULONG               Size;
2359         RT_802_11_WDS_ENTRY     WdsEntry[MAX_WDS_ENTRY];
2360 } WDS_TABLE, *PWDS_TABLE;
2361
2362 typedef struct _APCLI_STRUCT {
2363         PNET_DEV                                dev;
2364 #ifdef RTL865X_SOC
2365         unsigned int            mylinkid;
2366 #endif
2367         BOOLEAN                 Enable; // Set it as 1 if the apcli interface was configured to "1"  or by iwpriv cmd "ApCliEnable"
2368         BOOLEAN                 Valid;  // Set it as 1 if the apcli interface associated success to remote AP.
2369         UCHAR                                   MacTabWCID;     //WCID value, which point to the entry of ASIC Mac table.
2370         UCHAR                   SsidLen;
2371         CHAR                    Ssid[MAX_LEN_OF_SSID];
2372
2373         UCHAR                   CfgSsidLen;
2374         CHAR                    CfgSsid[MAX_LEN_OF_SSID];
2375         UCHAR                   CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2376         UCHAR                   CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2377
2378         ULONG                   ApCliRcvBeaconTime;
2379
2380         ULONG                   CtrlCurrState;
2381         ULONG                   SyncCurrState;
2382         ULONG                   AuthCurrState;
2383         ULONG                   AssocCurrState;
2384         ULONG                                   WpaPskCurrState;
2385
2386         USHORT                  AuthReqCnt;
2387         USHORT                  AssocReqCnt;
2388
2389         ULONG                   ClientStatusFlags;
2390         UCHAR                   MpduDensity;
2391
2392         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;   // This should match to whatever microsoft defined
2393         NDIS_802_11_WEP_STATUS              WepStatus;
2394
2395         // Add to support different cipher suite for WPA2/WPA mode
2396         NDIS_802_11_ENCRYPTION_STATUS           GroupCipher;            // Multicast cipher suite
2397         NDIS_802_11_ENCRYPTION_STATUS           PairCipher;                     // Unicast cipher suite
2398         BOOLEAN                                                         bMixCipher;                     // Indicate current Pair & Group use different cipher suites
2399         USHORT                                                          RsnCapability;
2400
2401         UCHAR           PSK[100];                               // reserve PSK key material
2402         UCHAR       PSKLen;
2403         UCHAR       PMK[32];                // WPA PSK mode PMK
2404         UCHAR           GTK[32];                                // GTK from authenticator
2405
2406         CIPHER_KEY      SharedKey[SHARE_KEY_NUM];
2407         UCHAR           DefaultKeyId;
2408
2409         // store RSN_IE built by driver
2410         UCHAR           RSN_IE[MAX_LEN_OF_RSNIE];  // The content saved here should be convert to little-endian format.
2411         UCHAR           RSNIE_Len;
2412
2413         // For WPA countermeasures
2414         ULONG       LastMicErrorTime;   // record last MIC error time
2415         BOOLEAN                 bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2416
2417         // For WPA-PSK supplicant state
2418         UCHAR           SNonce[32];         // SNonce for WPA-PSK
2419         UCHAR                   GNonce[32];                     // GNonce for WPA-PSK from authenticator
2420
2421         HTTRANSMIT_SETTING                              HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2422         RT_HT_PHY_INFO                                  DesiredHtPhyInfo;
2423         BOOLEAN                                                 bAutoTxRateSwitch;
2424         DESIRED_TRANSMIT_SETTING        DesiredTransmitSetting; // Desired transmit setting.
2425 } APCLI_STRUCT, *PAPCLI_STRUCT;
2426
2427 // ----------- end of AP ----------------------------
2428
2429 struct wificonf
2430 {
2431         BOOLEAN bShortGI;
2432         BOOLEAN bGreenField;
2433 };
2434
2435
2436
2437
2438 typedef struct _INF_PCI_CONFIG
2439 {
2440         PUCHAR                  CSRBaseAddress;     // PCI MMIO Base Address, all access will use
2441 }INF_PCI_CONFIG;
2442
2443 typedef struct _INF_USB_CONFIG
2444 {
2445         UINT                BulkInEpAddr;               // bulk-in endpoint address
2446         UINT                BulkOutEpAddr[6];   // bulk-out endpoint address
2447
2448 }INF_USB_CONFIG;
2449
2450 #ifdef IKANOS_VX_1X0
2451         typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2452
2453         struct IKANOS_TX_INFO
2454         {
2455                 struct net_device *netdev;
2456                 IkanosWlanTxCbFuncP *fp;
2457         };
2458 #endif // IKANOS_VX_1X0 //
2459
2460 #ifdef DBG_DIAGNOSE
2461 #define DIAGNOSE_TIME   10   // 10 sec
2462 typedef struct _RtmpDiagStrcut_
2463 {       // Diagnosis Related element
2464         unsigned char           inited;
2465         unsigned char   qIdx;
2466         unsigned char   ArrayStartIdx;
2467         unsigned char           ArrayCurIdx;
2468         // Tx Related Count
2469         USHORT                  TxDataCnt[DIAGNOSE_TIME];
2470         USHORT                  TxFailCnt[DIAGNOSE_TIME];
2471         USHORT                  TxDescCnt[DIAGNOSE_TIME][24]; // 3*3    // TxDesc queue length in scale of 0~14, >=15
2472         USHORT                  TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2473         USHORT                  TxSWQueCnt[DIAGNOSE_TIME][9];           // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2474
2475         USHORT                  TxAggCnt[DIAGNOSE_TIME];
2476         USHORT                  TxNonAggCnt[DIAGNOSE_TIME];
2477         USHORT                  TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2478         USHORT                  TxRalinkCnt[DIAGNOSE_TIME];                     // TxRalink Aggregation Count in 1 sec scale.
2479         USHORT                  TxAMSDUCnt[DIAGNOSE_TIME];                      // TxAMSUD Aggregation Count in 1 sec scale.
2480
2481         // Rx Related Count
2482         USHORT                  RxDataCnt[DIAGNOSE_TIME];                       // Rx Total Data count.
2483         USHORT                  RxCrcErrCnt[DIAGNOSE_TIME];
2484         USHORT                  RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2485 }RtmpDiagStruct;
2486 #endif // DBG_DIAGNOSE //
2487
2488
2489 //
2490 //  The miniport adapter structure
2491 //
2492 typedef struct _RTMP_ADAPTER
2493 {
2494         PVOID                                   OS_Cookie;      // save specific structure relative to OS
2495         PNET_DEV                                net_dev;
2496         ULONG                                   VirtualIfCnt;
2497
2498     USHORT                          LnkCtrlBitMask;
2499     USHORT                          RLnkCtrlConfiguration;
2500     USHORT                  RLnkCtrlOffset;
2501     USHORT                          HostLnkCtrlConfiguration;
2502     USHORT                  HostLnkCtrlOffset;
2503         USHORT                      PCIePowerSaveLevel;
2504         BOOLEAN                                 bPCIclkOff;                                             // flag that indicate if the PICE power status in Configuration SPace..
2505         ULONG                                   CheckDmaBusyCount;  // Check Interrupt Status Register Count.
2506         USHORT                                  ThisTbttNumToNextWakeUp;
2507         ULONG                                   SameRxByteCount;
2508
2509
2510 /*****************************************************************************************/
2511 /*      PCI related parameters                                                           */
2512 /*****************************************************************************************/
2513         PUCHAR                  CSRBaseAddress;     // PCI MMIO Base Address, all access will use
2514
2515         UINT                                    int_enable_reg;
2516         UINT                                    int_disable_mask;
2517         UINT                                    int_pending;
2518
2519
2520         RTMP_DMABUF             TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2521         RTMP_DMABUF             RxDescRing;                 // Shared memory for RX descriptors
2522         RTMP_DMABUF             TxDescRing[NUM_OF_TX_RING];     // Shared memory for Tx descriptors
2523         RTMP_TX_RING            TxRing[NUM_OF_TX_RING];         // AC0~4 + HCCA
2524
2525
2526         NDIS_SPIN_LOCK          irq_lock;
2527         UCHAR                   irq_disabled;
2528
2529
2530
2531 /*****************************************************************************************/
2532         /*      Both PCI/USB related parameters                                                  */
2533 /*****************************************************************************************/
2534
2535
2536 /*****************************************************************************************/
2537 /*      Tx related parameters                                                           */
2538 /*****************************************************************************************/
2539         BOOLEAN                 DeQueueRunning[NUM_OF_TX_RING];  // for ensuring RTUSBDeQueuePacket get call once
2540         NDIS_SPIN_LOCK          DeQueueLock[NUM_OF_TX_RING];
2541
2542
2543         // resource for software backlog queues
2544         QUEUE_HEADER            TxSwQueue[NUM_OF_TX_RING];  // 4 AC + 1 HCCA
2545         NDIS_SPIN_LOCK          TxSwQueueLock[NUM_OF_TX_RING];  // TxSwQueue spinlock
2546
2547         RTMP_DMABUF             MgmtDescRing;                   // Shared memory for MGMT descriptors
2548         RTMP_MGMT_RING          MgmtRing;
2549         NDIS_SPIN_LOCK          MgmtRingLock;                   // Prio Ring spinlock
2550
2551
2552 /*****************************************************************************************/
2553 /*      Rx related parameters                                                           */
2554 /*****************************************************************************************/
2555
2556         RTMP_RX_RING            RxRing;
2557         NDIS_SPIN_LOCK          RxRingLock;                 // Rx Ring spinlock
2558
2559
2560
2561 /*****************************************************************************************/
2562 /*      ASIC related parameters                                                          */
2563 /*****************************************************************************************/
2564         UINT32                  MACVersion;             // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2565
2566         // ---------------------------
2567         // E2PROM
2568         // ---------------------------
2569         ULONG                   EepromVersion;          // byte 0: version, byte 1: revision, byte 2~3: unused
2570         UCHAR                   EEPROMAddressNum;       // 93c46=6  93c66=8
2571         USHORT                  EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2572         ULONG                   FirmwareVersion;        // byte 0: Minor version, byte 1: Major version, otherwise unused.
2573
2574         // ---------------------------
2575         // BBP Control
2576         // ---------------------------
2577         UCHAR                   BbpWriteLatch[140];     // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2578         UCHAR                   BbpRssiToDbmDelta;
2579         BBP_R66_TUNING          BbpTuning;
2580
2581         // ----------------------------
2582         // RFIC control
2583         // ----------------------------
2584         UCHAR                   RfIcType;       // RFIC_xxx
2585         ULONG                   RfFreqOffset;   // Frequency offset for channel switching
2586         RTMP_RF_REGS            LatchRfRegs;    // latch th latest RF programming value since RF IC doesn't support READ
2587
2588         EEPROM_ANTENNA_STRUC    Antenna;                            // Since ANtenna definition is different for a & g. We need to save it for future reference.
2589         EEPROM_NIC_CONFIG2_STRUC    NicConfig2;
2590
2591         // This soft Rx Antenna Diversity mechanism is used only when user set
2592         // RX Antenna = DIVERSITY ON
2593         SOFT_RX_ANT_DIVERSITY   RxAnt;
2594
2595         UCHAR                   RFProgSeq;
2596         CHANNEL_TX_POWER        TxPower[MAX_NUM_OF_CHANNELS];       // Store Tx power value for all channels.
2597         CHANNEL_TX_POWER        ChannelList[MAX_NUM_OF_CHANNELS];   // list all supported channels for site survey
2598         CHANNEL_11J_TX_POWER    TxPower11J[MAX_NUM_OF_11JCHANNELS];       // 802.11j channel and bw
2599         CHANNEL_11J_TX_POWER    ChannelList11J[MAX_NUM_OF_11JCHANNELS];   // list all supported channels for site survey
2600
2601         UCHAR                   ChannelListNum;                     // number of channel in ChannelList[]
2602         UCHAR                                   Bbp94;
2603         BOOLEAN                                 BbpForCCK;
2604         ULONG           Tx20MPwrCfgABand[5];
2605         ULONG           Tx20MPwrCfgGBand[5];
2606         ULONG           Tx40MPwrCfgABand[5];
2607         ULONG           Tx40MPwrCfgGBand[5];
2608
2609         BOOLEAN     bAutoTxAgcA;                // Enable driver auto Tx Agc control
2610         UCHAR       TssiRefA;                                   // Store Tssi reference value as 25 temperature.
2611         UCHAR       TssiPlusBoundaryA[5];               // Tssi boundary for increase Tx power to compensate.
2612         UCHAR       TssiMinusBoundaryA[5];              // Tssi boundary for decrease Tx power to compensate.
2613         UCHAR       TxAgcStepA;                                 // Store Tx TSSI delta increment / decrement value
2614         CHAR            TxAgcCompensateA;                       // Store the compensation (TxAgcStep * (idx-1))
2615
2616         BOOLEAN     bAutoTxAgcG;                // Enable driver auto Tx Agc control
2617         UCHAR       TssiRefG;                                   // Store Tssi reference value as 25 temperature.
2618         UCHAR       TssiPlusBoundaryG[5];               // Tssi boundary for increase Tx power to compensate.
2619         UCHAR       TssiMinusBoundaryG[5];              // Tssi boundary for decrease Tx power to compensate.
2620         UCHAR       TxAgcStepG;                                 // Store Tx TSSI delta increment / decrement value
2621         CHAR            TxAgcCompensateG;                       // Store the compensation (TxAgcStep * (idx-1))
2622
2623         //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2624         CHAR            BGRssiOffset0;                          // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2625         CHAR            BGRssiOffset1;                          // Store B/G RSSI#1 Offset value
2626         CHAR            BGRssiOffset2;                          // Store B/G RSSI#2 Offset value
2627         //---
2628
2629         //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2630         CHAR            ARssiOffset0;                           // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2631         CHAR            ARssiOffset1;                           // Store A RSSI#1 Offset value
2632         CHAR            ARssiOffset2;                           // Store A RSSI#2 Offset value
2633         //---
2634
2635         CHAR            BLNAGain;                                       // Store B/G external LNA#0 value on EEPROM 0x44h
2636         CHAR            ALNAGain0;                                      // Store A external LNA#0 value for ch36~64
2637         CHAR            ALNAGain1;                                      // Store A external LNA#1 value for ch100~128
2638         CHAR            ALNAGain2;                                      // Store A external LNA#2 value for ch132~165
2639
2640         // ----------------------------
2641         // LED control
2642         // ----------------------------
2643         MCU_LEDCS_STRUC         LedCntl;
2644         USHORT                          Led1;   // read from EEPROM 0x3c
2645         USHORT                          Led2;   // EEPROM 0x3e
2646         USHORT                          Led3;   // EEPROM 0x40
2647         UCHAR                           LedIndicatorStregth;
2648         UCHAR                           RssiSingalstrengthOffet;
2649     BOOLEAN                             bLedOnScanning;
2650         UCHAR                           LedStatus;
2651
2652 /*****************************************************************************************/
2653 /*      802.11 related parameters                                                        */
2654 /*****************************************************************************************/
2655         // outgoing BEACON frame buffer and corresponding TXD
2656         TXWI_STRUC                      BeaconTxWI;
2657         PUCHAR                                          BeaconBuf;
2658         USHORT                                          BeaconOffset[HW_BEACON_MAX_COUNT];
2659
2660         // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2661         PSPOLL_FRAME                    PsPollFrame;
2662         HEADER_802_11                   NullFrame;
2663
2664 //=========AP===========
2665
2666
2667 //=======STA===========
2668 #ifdef CONFIG_STA_SUPPORT
2669 /* Modified by Wu Xi-Kun 4/21/2006 */
2670         // -----------------------------------------------
2671         // STA specific configuration & operation status
2672         // used only when pAd->OpMode == OPMODE_STA
2673         // -----------------------------------------------
2674         STA_ADMIN_CONFIG        StaCfg;           // user desired settings
2675         STA_ACTIVE_CONFIG       StaActive;         // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2676         CHAR                    nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2677         NDIS_MEDIA_STATE        PreMediaState;
2678 #endif // CONFIG_STA_SUPPORT //
2679
2680 //=======Common===========
2681         // OP mode: either AP or STA
2682         UCHAR                   OpMode;                     // OPMODE_STA, OPMODE_AP
2683
2684         NDIS_MEDIA_STATE        IndicateMediaState;                     // Base on Indication state, default is NdisMediaStateDisConnected
2685
2686         // MAT related parameters
2687
2688         // configuration: read from Registry & E2PROM
2689         BOOLEAN                 bLocalAdminMAC;             // Use user changed MAC
2690         UCHAR                   PermanentAddress[MAC_ADDR_LEN];    // Factory default MAC address
2691         UCHAR                   CurrentAddress[MAC_ADDR_LEN];      // User changed MAC address
2692
2693         // ------------------------------------------------------
2694         // common configuration to both OPMODE_STA and OPMODE_AP
2695         // ------------------------------------------------------
2696         COMMON_CONFIG           CommonCfg;
2697         MLME_STRUCT             Mlme;
2698
2699         // AP needs those vaiables for site survey feature.
2700         MLME_AUX                MlmeAux;           // temporary settings used during MLME state machine
2701         BSS_TABLE               ScanTab;           // store the latest SCAN result
2702
2703         //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2704         MAC_TABLE                 MacTab;     // ASIC on-chip WCID entry table.  At TX, ASIC always use key according to this on-chip table.
2705         NDIS_SPIN_LOCK          MacTabLock;
2706
2707 #ifdef DOT11_N_SUPPORT
2708         BA_TABLE                        BATable;
2709 #endif // DOT11_N_SUPPORT //
2710         NDIS_SPIN_LOCK          BATabLock;
2711         RALINK_TIMER_STRUCT RECBATimer;
2712
2713         // encryption/decryption KEY tables
2714         CIPHER_KEY              SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2715
2716                 // RX re-assembly buffer for fragmentation
2717         FRAGMENT_FRAME          FragFrame;                  // Frame storage for fragment frame
2718
2719         // various Counters
2720         COUNTER_802_3           Counters8023;               // 802.3 counters
2721         COUNTER_802_11          WlanCounters;               // 802.11 MIB counters
2722         COUNTER_RALINK          RalinkCounters;             // Ralink propriety counters
2723         COUNTER_DRS             DrsCounters;                // counters for Dynamic TX Rate Switching
2724         PRIVATE_STRUC           PrivateInfo;                // Private information & counters
2725
2726         // flags, see fRTMP_ADAPTER_xxx flags
2727         ULONG                   Flags;                      // Represent current device status
2728         ULONG                   PSFlags;                    // Power Save operation flag.
2729
2730         // current TX sequence #
2731         USHORT                  Sequence;
2732
2733         // Control disconnect / connect event generation
2734         //+++Didn't used anymore
2735         ULONG                   LinkDownTime;
2736         //---
2737         ULONG                   LastRxRate;
2738         ULONG                   LastTxRate;
2739         //+++Used only for Station
2740         BOOLEAN                 bConfigChanged;         // Config Change flag for the same SSID setting
2741         //---
2742
2743         ULONG                   ExtraInfo;              // Extra information for displaying status
2744         ULONG                   SystemErrorBitmap;      // b0: E2PROM version error
2745
2746         //+++Didn't used anymore
2747         ULONG                   MacIcVersion;           // MAC/BBP serial interface issue solved after ver.D
2748         //---
2749
2750         // ---------------------------
2751         // System event log
2752         // ---------------------------
2753         RT_802_11_EVENT_TABLE   EventTab;
2754
2755
2756         BOOLEAN         HTCEnable;
2757
2758         /*****************************************************************************************/
2759         /*      Statistic related parameters                                                     */
2760         /*****************************************************************************************/
2761
2762         BOOLEAN                                         bUpdateBcnCntDone;
2763         ULONG                                           watchDogMacDeadlock;    // prevent MAC/BBP into deadlock condition
2764         // ----------------------------
2765         // DEBUG paramerts
2766         // ----------------------------
2767         BOOLEAN         bBanAllBaSetup;
2768         BOOLEAN         bPromiscuous;
2769
2770         // ----------------------------
2771         // rt2860c emulation-use Parameters
2772         // ----------------------------
2773         ULONG           rtsaccu[30];
2774         ULONG           ctsaccu[30];
2775         ULONG           cfendaccu[30];
2776         ULONG           bacontent[16];
2777         ULONG           rxint[RX_RING_SIZE+1];
2778         UCHAR           rcvba[60];
2779         BOOLEAN         bLinkAdapt;
2780         BOOLEAN         bForcePrintTX;
2781         BOOLEAN         bForcePrintRX;
2782         BOOLEAN         bDisablescanning;               //defined in RT2870 USB
2783         BOOLEAN         bStaFifoTest;
2784         BOOLEAN         bProtectionTest;
2785         BOOLEAN         bHCCATest;
2786         BOOLEAN         bGenOneHCCA;
2787         BOOLEAN         bBroadComHT;
2788         //+++Following add from RT2870 USB.
2789         ULONG           BulkOutReq;
2790         ULONG           BulkOutComplete;
2791         ULONG           BulkOutCompleteOther;
2792         ULONG           BulkOutCompleteCancel;  // seems not use now?
2793         ULONG           BulkInReq;
2794         ULONG           BulkInComplete;
2795         ULONG           BulkInCompleteFail;
2796         //---
2797
2798     struct wificonf                     WIFItestbed;
2799
2800 #ifdef DOT11_N_SUPPORT
2801         struct reordering_mpdu_pool mpdu_blk_pool;
2802 #endif // DOT11_N_SUPPORT //
2803
2804         ULONG                                   OneSecondnonBEpackets;          // record non BE packets per second
2805
2806 #if WIRELESS_EXT >= 12
2807     struct iw_statistics    iw_stats;
2808 #endif
2809
2810         struct net_device_stats stats;
2811
2812         ULONG                                   TbttTickCount;
2813 #ifdef PCI_MSI_SUPPORT
2814         BOOLEAN                                 HaveMsi;
2815 #endif // PCI_MSI_SUPPORT //
2816
2817
2818         UCHAR                                   is_on;
2819
2820 #define TIME_BASE                       (1000000/OS_HZ)
2821 #define TIME_ONE_SECOND         (1000000/TIME_BASE)
2822         UCHAR                                   flg_be_adjust;
2823         ULONG                                   be_adjust_last_time;
2824
2825 #ifdef IKANOS_VX_1X0
2826         struct IKANOS_TX_INFO   IkanosTxInfo;
2827         struct IKANOS_TX_INFO   IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2828 #endif // IKANOS_VX_1X0 //
2829
2830
2831 #ifdef DBG_DIAGNOSE
2832         RtmpDiagStruct  DiagStruct;
2833 #endif // DBG_DIAGNOSE //
2834
2835
2836         UINT8                                   PM_FlgSuspend;
2837 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2838
2839 //
2840 // Cisco IAPP format
2841 //
2842 typedef struct  _CISCO_IAPP_CONTENT_
2843 {
2844         USHORT     Length;        //IAPP Length
2845         UCHAR      MessageType;      //IAPP type
2846         UCHAR      FunctionCode;     //IAPP function type
2847         UCHAR      DestinaionMAC[MAC_ADDR_LEN];
2848         UCHAR      SourceMAC[MAC_ADDR_LEN];
2849         USHORT     Tag;           //Tag(element IE) - Adjacent AP report
2850         USHORT     TagLength;     //Length of element not including 4 byte header
2851         UCHAR      OUI[4];           //0x00, 0x40, 0x96, 0x00
2852         UCHAR      PreviousAP[MAC_ADDR_LEN];       //MAC Address of access point
2853         USHORT     Channel;
2854         USHORT     SsidLen;
2855         UCHAR      Ssid[MAX_LEN_OF_SSID];
2856         USHORT     Seconds;          //Seconds that the client has been disassociated.
2857 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2858
2859 #define DELAYINTMASK            0x0003fffb
2860 #define INTMASK                         0x0003fffb
2861 #define IndMask                         0x0003fffc
2862 #define RxINT                           0x00000005      // Delayed Rx or indivi rx
2863 #define TxDataInt                       0x000000fa      // Delayed Tx or indivi tx
2864 #define TxMgmtInt                       0x00000102      // Delayed Tx or indivi tx
2865 #define TxCoherent                      0x00020000      // tx coherent
2866 #define RxCoherent                      0x00010000      // rx coherent
2867 #define McuCommand                      0x00000200      // mcu
2868 #define PreTBTTInt                      0x00001000      // Pre-TBTT interrupt
2869 #define TBTTInt                         0x00000800              // TBTT interrupt
2870 #define GPTimeOutInt                    0x00008000              // GPtimeout interrupt
2871 #define AutoWakeupInt           0x00004000              // AutoWakeupInt interrupt
2872 #define FifoStaFullInt                  0x00002000      //  fifo statistics full interrupt
2873
2874
2875 typedef struct _RX_BLK_
2876 {
2877         RT28XX_RXD_STRUC        RxD;
2878         PRXWI_STRUC                     pRxWI;
2879         PHEADER_802_11          pHeader;
2880         PNDIS_PACKET            pRxPacket;
2881         UCHAR                           *pData;
2882         USHORT                          DataSize;
2883         USHORT                          Flags;
2884         UCHAR                           UserPriority;   // for calculate TKIP MIC using
2885 } RX_BLK;
2886
2887
2888 #define RX_BLK_SET_FLAG(_pRxBlk, _flag)         (_pRxBlk->Flags |= _flag)
2889 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag)        (_pRxBlk->Flags & _flag)
2890 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag)       (_pRxBlk->Flags &= ~(_flag))
2891
2892
2893 #define fRX_WDS                 0x0001
2894 #define fRX_AMSDU       0x0002
2895 #define fRX_ARALINK     0x0004
2896 #define fRX_HTC         0x0008
2897 #define fRX_PAD         0x0010
2898 #define fRX_AMPDU       0x0020
2899 #define fRX_QOS                 0x0040
2900 #define fRX_INFRA               0x0080
2901 #define fRX_EAP                 0x0100
2902 #define fRX_MESH                0x0200
2903 #define fRX_APCLI               0x0400
2904 #define fRX_DLS                 0x0800
2905 #define fRX_WPI                 0x1000
2906
2907 #define LENGTH_AMSDU_SUBFRAMEHEAD       14
2908 #define LENGTH_ARALINK_SUBFRAMEHEAD     14
2909 #define LENGTH_ARALINK_HEADER_FIELD      2
2910
2911 #define TX_UNKOWN_FRAME                 0x00
2912 #define TX_MCAST_FRAME                  0x01
2913 #define TX_LEGACY_FRAME                 0x02
2914 #define TX_AMPDU_FRAME                  0x04
2915 #define TX_AMSDU_FRAME                  0x08
2916 #define TX_RALINK_FRAME                 0x10
2917 #define TX_FRAG_FRAME                   0x20
2918
2919
2920 //      Currently the sizeof(TX_BLK) is 148 bytes.
2921 typedef struct _TX_BLK_
2922 {
2923         UCHAR                           QueIdx;
2924         UCHAR                           TxFrameType;                            // Indicate the Transmission type of the all frames in one batch
2925         UCHAR                           TotalFrameNum;                          // Total frame number want to send-out in one batch
2926         USHORT                          TotalFragNum;                           // Total frame fragments required in one batch
2927         USHORT                          TotalFrameLen;                          // Total length of all frames want to send-out in one batch
2928
2929         QUEUE_HEADER            TxPacketList;
2930         MAC_TABLE_ENTRY         *pMacEntry;                                     // NULL: packet with 802.11 RA field is multicast/broadcast address
2931         HTTRANSMIT_SETTING      *pTransmit;
2932
2933         // Following structure used for the characteristics of a specific packet.
2934         PNDIS_PACKET            pPacket;
2935         PUCHAR                          pSrcBufHeader;                          // Reference to the head of sk_buff->data
2936         PUCHAR                          pSrcBufData;                            // Reference to the sk_buff->data, will changed depends on hanlding progresss
2937         UINT                            SrcBufLen;                                      // Length of packet payload which not including Layer 2 header
2938         PUCHAR                          pExtraLlcSnapEncap;                     // NULL means no extra LLC/SNAP is required
2939         UCHAR                           HeaderBuf[80];                          // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2940         UCHAR                           MpduHeaderLen;                          // 802.11 header length NOT including the padding
2941         UCHAR                           HdrPadLen;                                      // recording Header Padding Length;
2942         UCHAR                           apidx;                                          // The interface associated to this packet
2943         UCHAR                           Wcid;                                           // The MAC entry associated to this packet
2944         UCHAR                           UserPriority;                           // priority class of packet
2945         UCHAR                           FrameGap;                                       // what kind of IFS this packet use
2946         UCHAR                           MpduReqNum;                                     // number of fragments of this frame
2947         UCHAR                           TxRate;                                         // TODO: Obsoleted? Should change to MCS?
2948         UCHAR                           CipherAlg;                                      // cipher alogrithm
2949         PCIPHER_KEY                     pKey;
2950
2951
2952
2953         USHORT                          Flags;                                          //See following definitions for detail.
2954
2955         //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2956         ULONG                           Priv;                                           // Hardware specific value saved in here.
2957 } TX_BLK, *PTX_BLK;
2958
2959
2960 #define fTX_bRtsRequired                0x0001  // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2961 #define fTX_bAckRequired        0x0002  // the packet need ack response
2962 #define fTX_bPiggyBack                  0x0004  // Legacy device use Piggback or not
2963 #define fTX_bHTRate             0x0008  // allow to use HT rate
2964 #define fTX_bForceNonQoS        0x0010  // force to transmit frame without WMM-QoS in HT mode
2965 #define fTX_bAllowFrag          0x0020  // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2966 #define fTX_bMoreData                   0x0040  // there are more data packets in PowerSave Queue
2967 #define fTX_bWMM                                0x0080  // QOS Data
2968
2969 #define fTX_bClearEAPFrame              0x0100
2970
2971 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value)       \
2972                 do {                                                                            \
2973                         if (value)                                                              \
2974                                 (_pTxBlk->Flags |= _flag)                       \
2975                         else                                                                    \
2976                                 (_pTxBlk->Flags &= ~(_flag))            \
2977                 }while(0)
2978
2979 #define TX_BLK_SET_FLAG(_pTxBlk, _flag)         (_pTxBlk->Flags |= _flag)
2980 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag)        (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2981 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag)       (_pTxBlk->Flags &= ~(_flag))
2982
2983
2984
2985
2986
2987 //------------------------------------------------------------------------------------------
2988
2989
2990 //
2991 // Enable & Disable NIC interrupt via writing interrupt mask register
2992 // Since it use ADAPTER structure, it have to be put after structure definition.
2993 //
2994 __inline    VOID    NICDisableInterrupt(
2995     IN  PRTMP_ADAPTER   pAd)
2996 {
2997         RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0);     // 0: disable
2998         //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0);               // 0x418 is for firmware . SW doesn't handle here.
2999         RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3000 }
3001
3002 __inline    VOID    NICEnableInterrupt(
3003     IN  PRTMP_ADAPTER   pAd)
3004 {
3005         //
3006         // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3007         // To prevent System hang, we should enalbe the interrupt when
3008         // ASIC is already Wake Up.
3009         //
3010     // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3011         // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3012         //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3013         {
3014                 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/);     // 1:enable
3015         }
3016         //else
3017         //      DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3018
3019         //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3020         RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3021 }
3022
3023 #ifdef RT_BIG_ENDIAN
3024 static inline VOID      WriteBackToDescriptor(
3025         IN  PUCHAR                      Dest,
3026         IN      PUCHAR                  Src,
3027     IN  BOOLEAN                 DoEncrypt,
3028         IN  ULONG           DescriptorType)
3029 {
3030         UINT32 *p1, *p2;
3031
3032         p1 = ((UINT32 *)Dest);
3033         p2 = ((UINT32 *)Src);
3034
3035         *p1 = *p2;
3036         *(p1+2) = *(p2+2);
3037         *(p1+3) = *(p2+3);
3038         *(p1+1) = *(p2+1); // Word 1; this must be written back last
3039 }
3040
3041 /*
3042         ========================================================================
3043
3044         Routine Description:
3045                 Endian conversion of Tx/Rx descriptor .
3046
3047         Arguments:
3048                 pAd     Pointer to our adapter
3049                 pData                   Pointer to Tx/Rx descriptor
3050                 DescriptorType  Direction of the frame
3051
3052         Return Value:
3053                 None
3054
3055         Note:
3056                 Call this function when read or update descriptor
3057         ========================================================================
3058 */
3059 static inline VOID      RTMPWIEndianChange(
3060         IN      PUCHAR                  pData,
3061         IN      ULONG                   DescriptorType)
3062 {
3063         int size;
3064         int i;
3065
3066         size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3067
3068         if(DescriptorType == TYPE_TXWI)
3069         {
3070                 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));            // Byte 0~3
3071                 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4)));      // Byte 4~7
3072         }
3073         else
3074         {
3075                 for(i=0; i < size/4 ; i++)
3076                         *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3077         }
3078 }
3079
3080 /*
3081         ========================================================================
3082
3083         Routine Description:
3084                 Endian conversion of Tx/Rx descriptor .
3085
3086         Arguments:
3087                 pAd     Pointer to our adapter
3088                 pData                   Pointer to Tx/Rx descriptor
3089                 DescriptorType  Direction of the frame
3090
3091         Return Value:
3092                 None
3093
3094         Note:
3095                 Call this function when read or update descriptor
3096         ========================================================================
3097 */
3098 static inline VOID      RTMPDescriptorEndianChange(
3099         IN      PUCHAR                  pData,
3100         IN      ULONG                   DescriptorType)
3101 {
3102         *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));            // Byte 0~3
3103         *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8)));      // Byte 8~11
3104         *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12)));   // Byte 12~15
3105         *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4)));                            // Byte 4~7, this must be swapped last
3106 }
3107
3108 /*
3109         ========================================================================
3110
3111         Routine Description:
3112                 Endian conversion of all kinds of 802.11 frames .
3113
3114         Arguments:
3115                 pAd     Pointer to our adapter
3116                 pData                   Pointer to the 802.11 frame structure
3117                 Dir                     Direction of the frame
3118                 FromRxDoneInt   Caller is from RxDone interrupt
3119
3120         Return Value:
3121                 None
3122
3123         Note:
3124                 Call this function when read or update buffer data
3125         ========================================================================
3126 */
3127 static inline VOID      RTMPFrameEndianChange(
3128         IN      PRTMP_ADAPTER   pAd,
3129         IN      PUCHAR                  pData,
3130         IN      ULONG                   Dir,
3131         IN      BOOLEAN                 FromRxDoneInt)
3132 {
3133         PHEADER_802_11 pFrame;
3134         PUCHAR  pMacHdr;
3135
3136         // swab 16 bit fields - Frame Control field
3137         if(Dir == DIR_READ)
3138         {
3139                 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3140         }
3141
3142         pFrame = (PHEADER_802_11) pData;
3143         pMacHdr = (PUCHAR) pFrame;
3144
3145         // swab 16 bit fields - Duration/ID field
3146         *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3147
3148         // swab 16 bit fields - Sequence Control field
3149         *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3150
3151         if(pFrame->FC.Type == BTYPE_MGMT)
3152         {
3153                 switch(pFrame->FC.SubType)
3154                 {
3155                         case SUBTYPE_ASSOC_REQ:
3156                         case SUBTYPE_REASSOC_REQ:
3157                                 // swab 16 bit fields - CapabilityInfo field
3158                                 pMacHdr += sizeof(HEADER_802_11);
3159                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3160
3161                                 // swab 16 bit fields - Listen Interval field
3162                                 pMacHdr += 2;
3163                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3164                                 break;
3165
3166                         case SUBTYPE_ASSOC_RSP:
3167                         case SUBTYPE_REASSOC_RSP:
3168                                 // swab 16 bit fields - CapabilityInfo field
3169                                 pMacHdr += sizeof(HEADER_802_11);
3170                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3171
3172                                 // swab 16 bit fields - Status Code field
3173                                 pMacHdr += 2;
3174                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3175
3176                                 // swab 16 bit fields - AID field
3177                                 pMacHdr += 2;
3178                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3179                                 break;
3180
3181                         case SUBTYPE_AUTH:
3182                                 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3183                                 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3184                                 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3185                                         break;
3186                                 else
3187                                 {
3188                                         // swab 16 bit fields - Auth Alg No. field
3189                                         pMacHdr += sizeof(HEADER_802_11);
3190                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3191
3192                                         // swab 16 bit fields - Auth Seq No. field
3193                                         pMacHdr += 2;
3194                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3195
3196                                         // swab 16 bit fields - Status Code field
3197                                         pMacHdr += 2;
3198                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3199                                 }
3200                                 break;
3201
3202                         case SUBTYPE_BEACON:
3203                         case SUBTYPE_PROBE_RSP:
3204                                 // swab 16 bit fields - BeaconInterval field
3205                                 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3206                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3207
3208                                 // swab 16 bit fields - CapabilityInfo field
3209                                 pMacHdr += sizeof(USHORT);
3210                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3211                                 break;
3212
3213                         case SUBTYPE_DEAUTH:
3214                         case SUBTYPE_DISASSOC:
3215                                 // swab 16 bit fields - Reason code field
3216                                 pMacHdr += sizeof(HEADER_802_11);
3217                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3218                                 break;
3219                 }
3220         }
3221         else if( pFrame->FC.Type == BTYPE_DATA )
3222         {
3223         }
3224         else if(pFrame->FC.Type == BTYPE_CNTL)
3225         {
3226                 switch(pFrame->FC.SubType)
3227                 {
3228                         case SUBTYPE_BLOCK_ACK_REQ:
3229                                 {
3230                                         PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3231                                         *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3232                                         pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3233                                 }
3234                                 break;
3235                         case SUBTYPE_BLOCK_ACK:
3236                                 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3237                                 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3238                                 break;
3239
3240                         case SUBTYPE_ACK:
3241                                 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3242                                 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3243                                 break;
3244                 }
3245         }
3246         else
3247         {
3248                 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3249         }
3250
3251         // swab 16 bit fields - Frame Control
3252         if(Dir == DIR_WRITE)
3253         {
3254                 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3255         }
3256 }
3257 #endif // RT_BIG_ENDIAN //
3258
3259
3260 static inline VOID ConvertMulticastIP2MAC(
3261         IN PUCHAR pIpAddr,
3262         IN PUCHAR *ppMacAddr,
3263         IN UINT16 ProtoType)
3264 {
3265         if (pIpAddr == NULL)
3266                 return;
3267
3268         if (ppMacAddr == NULL || *ppMacAddr == NULL)
3269                 return;
3270
3271         switch (ProtoType)
3272         {
3273                 case ETH_P_IPV6:
3274 //                      memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3275                         *(*ppMacAddr) = 0x33;
3276                         *(*ppMacAddr + 1) = 0x33;
3277                         *(*ppMacAddr + 2) = pIpAddr[12];
3278                         *(*ppMacAddr + 3) = pIpAddr[13];
3279                         *(*ppMacAddr + 4) = pIpAddr[14];
3280                         *(*ppMacAddr + 5) = pIpAddr[15];
3281                         break;
3282
3283                 case ETH_P_IP:
3284                 default:
3285 //                      memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3286                         *(*ppMacAddr) = 0x01;
3287                         *(*ppMacAddr + 1) = 0x00;
3288                         *(*ppMacAddr + 2) = 0x5e;
3289                         *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3290                         *(*ppMacAddr + 4) = pIpAddr[2];
3291                         *(*ppMacAddr + 5) = pIpAddr[3];
3292                         break;
3293         }
3294
3295         return;
3296 }
3297
3298 BOOLEAN RTMPCheckForHang(
3299         IN  NDIS_HANDLE MiniportAdapterContext
3300         );
3301
3302 VOID  RTMPHalt(
3303         IN  NDIS_HANDLE MiniportAdapterContext
3304         );
3305
3306 //
3307 //  Private routines in rtmp_init.c
3308 //
3309 NDIS_STATUS RTMPAllocAdapterBlock(
3310         IN PVOID                        handle,
3311         OUT PRTMP_ADAPTER   *ppAdapter
3312         );
3313
3314 NDIS_STATUS RTMPAllocTxRxRingMemory(
3315         IN  PRTMP_ADAPTER   pAd
3316         );
3317
3318 NDIS_STATUS RTMPFindAdapter(
3319         IN  PRTMP_ADAPTER   pAd,
3320         IN  NDIS_HANDLE     WrapperConfigurationContext
3321         );
3322
3323 NDIS_STATUS     RTMPReadParametersHook(
3324         IN      PRTMP_ADAPTER pAd
3325         );
3326
3327 VOID RTMPFreeAdapter(
3328         IN  PRTMP_ADAPTER   pAd
3329         );
3330
3331 NDIS_STATUS NICReadRegParameters(
3332         IN  PRTMP_ADAPTER       pAd,
3333         IN  NDIS_HANDLE         WrapperConfigurationContext
3334         );
3335
3336
3337 VOID NICReadEEPROMParameters(
3338         IN  PRTMP_ADAPTER       pAd,
3339         IN      PUCHAR                          mac_addr);
3340
3341 VOID NICInitAsicFromEEPROM(
3342         IN  PRTMP_ADAPTER       pAd);
3343
3344 VOID NICInitTxRxRingAndBacklogQueue(
3345         IN  PRTMP_ADAPTER   pAd);
3346
3347 NDIS_STATUS NICInitializeAdapter(
3348         IN  PRTMP_ADAPTER   pAd,
3349         IN   BOOLEAN    bHardReset);
3350
3351 NDIS_STATUS NICInitializeAsic(
3352         IN  PRTMP_ADAPTER   pAd,
3353         IN  BOOLEAN             bHardReset);
3354
3355 VOID NICRestoreBBPValue(
3356         IN PRTMP_ADAPTER pAd);
3357
3358 VOID NICIssueReset(
3359         IN  PRTMP_ADAPTER   pAd);
3360
3361 VOID RTMPRingCleanUp(
3362         IN  PRTMP_ADAPTER   pAd,
3363         IN  UCHAR           RingType);
3364
3365 VOID RxTest(
3366         IN  PRTMP_ADAPTER   pAd);
3367
3368 NDIS_STATUS DbgSendPacket(
3369         IN  PRTMP_ADAPTER   pAd,
3370         IN  PNDIS_PACKET    pPacket);
3371
3372 VOID UserCfgInit(
3373         IN  PRTMP_ADAPTER   pAd);
3374
3375 VOID NICResetFromError(
3376         IN  PRTMP_ADAPTER   pAd);
3377
3378 VOID NICEraseFirmware(
3379         IN PRTMP_ADAPTER pAd);
3380
3381 NDIS_STATUS NICLoadFirmware(
3382         IN  PRTMP_ADAPTER   pAd);
3383
3384 NDIS_STATUS NICLoadRateSwitchingParams(
3385         IN PRTMP_ADAPTER pAd);
3386
3387 BOOLEAN NICCheckForHang(
3388         IN  PRTMP_ADAPTER   pAd);
3389
3390 VOID NICUpdateFifoStaCounters(
3391         IN PRTMP_ADAPTER pAd);
3392
3393 VOID NICUpdateRawCounters(
3394         IN  PRTMP_ADAPTER   pAd);
3395
3396 ULONG   RTMPNotAllZero(
3397         IN      PVOID   pSrc1,
3398         IN      ULONG   Length);
3399
3400 VOID RTMPZeroMemory(
3401         IN  PVOID   pSrc,
3402         IN  ULONG   Length);
3403
3404 ULONG RTMPCompareMemory(
3405         IN  PVOID   pSrc1,
3406         IN  PVOID   pSrc2,
3407         IN  ULONG   Length);
3408
3409 VOID RTMPMoveMemory(
3410         OUT PVOID   pDest,
3411         IN  PVOID   pSrc,
3412         IN  ULONG   Length);
3413
3414 VOID AtoH(
3415         char    *src,
3416         UCHAR   *dest,
3417         int             destlen);
3418
3419 UCHAR BtoH(
3420         char ch);
3421
3422 VOID RTMPPatchMacBbpBug(
3423         IN  PRTMP_ADAPTER   pAd);
3424
3425 VOID RTMPPatchCardBus(
3426         IN      PRTMP_ADAPTER   pAdapter);
3427
3428 VOID RTMPPatchRalinkCardBus(
3429         IN      PRTMP_ADAPTER   pAdapter,
3430         IN      ULONG                   Bus);
3431
3432 ULONG RTMPReadCBConfig(
3433         IN      ULONG   Bus,
3434         IN      ULONG   Slot,
3435         IN      ULONG   Func,
3436         IN      ULONG   Offset);
3437
3438 VOID RTMPWriteCBConfig(
3439         IN      ULONG   Bus,
3440         IN      ULONG   Slot,
3441         IN      ULONG   Func,
3442         IN      ULONG   Offset,
3443         IN      ULONG   Value);
3444
3445 VOID RTMPInitTimer(
3446         IN  PRTMP_ADAPTER           pAd,
3447         IN  PRALINK_TIMER_STRUCT    pTimer,
3448         IN  PVOID                   pTimerFunc,
3449         IN      PVOID                                   pData,
3450         IN  BOOLEAN                 Repeat);
3451
3452 VOID RTMPSetTimer(
3453         IN  PRALINK_TIMER_STRUCT    pTimer,
3454         IN  ULONG                   Value);
3455
3456
3457 VOID RTMPModTimer(
3458         IN      PRALINK_TIMER_STRUCT    pTimer,
3459         IN      ULONG                                   Value);
3460
3461 VOID RTMPCancelTimer(
3462         IN  PRALINK_TIMER_STRUCT    pTimer,
3463         OUT BOOLEAN                 *pCancelled);
3464
3465 VOID RTMPSetLED(
3466         IN PRTMP_ADAPTER        pAd,
3467         IN UCHAR                        Status);
3468
3469 VOID RTMPSetSignalLED(
3470         IN PRTMP_ADAPTER        pAd,
3471         IN NDIS_802_11_RSSI Dbm);
3472
3473 VOID RTMPEnableRxTx(
3474         IN PRTMP_ADAPTER        pAd);
3475
3476 //
3477 // prototype in action.c
3478 //
3479 VOID ActionStateMachineInit(
3480     IN  PRTMP_ADAPTER   pAd,
3481     IN  STATE_MACHINE *S,
3482     OUT STATE_MACHINE_FUNC Trans[]);
3483
3484 VOID MlmeADDBAAction(
3485     IN PRTMP_ADAPTER pAd,
3486     IN MLME_QUEUE_ELEM *Elem);
3487
3488 VOID MlmeDELBAAction(
3489     IN PRTMP_ADAPTER pAd,
3490     IN MLME_QUEUE_ELEM *Elem);
3491
3492 VOID MlmeDLSAction(
3493     IN PRTMP_ADAPTER pAd,
3494     IN MLME_QUEUE_ELEM *Elem);
3495
3496 VOID MlmeInvalidAction(
3497     IN PRTMP_ADAPTER pAd,
3498     IN MLME_QUEUE_ELEM *Elem);
3499
3500 VOID MlmeQOSAction(
3501     IN PRTMP_ADAPTER pAd,
3502     IN MLME_QUEUE_ELEM *Elem);
3503
3504 #ifdef DOT11_N_SUPPORT
3505 VOID PeerAddBAReqAction(
3506         IN PRTMP_ADAPTER pAd,
3507         IN MLME_QUEUE_ELEM *Elem);
3508
3509 VOID PeerAddBARspAction(
3510         IN PRTMP_ADAPTER pAd,
3511         IN MLME_QUEUE_ELEM *Elem);
3512
3513 VOID PeerDelBAAction(
3514         IN PRTMP_ADAPTER pAd,
3515         IN MLME_QUEUE_ELEM *Elem);
3516
3517 VOID PeerBAAction(
3518     IN PRTMP_ADAPTER pAd,
3519     IN MLME_QUEUE_ELEM *Elem);
3520 #endif // DOT11_N_SUPPORT //
3521
3522 VOID SendPSMPAction(
3523         IN PRTMP_ADAPTER        pAd,
3524         IN UCHAR                        Wcid,
3525         IN UCHAR                        Psmp);
3526
3527
3528 #ifdef DOT11N_DRAFT3
3529 VOID SendBSS2040CoexistMgmtAction(
3530         IN      PRTMP_ADAPTER   pAd,
3531         IN      UCHAR   Wcid,
3532         IN      UCHAR   apidx,
3533         IN      UCHAR   InfoReq);
3534
3535 VOID SendNotifyBWActionFrame(
3536         IN PRTMP_ADAPTER pAd,
3537         IN UCHAR  Wcid,
3538         IN UCHAR apidx);
3539
3540 BOOLEAN ChannelSwitchSanityCheck(
3541         IN      PRTMP_ADAPTER   pAd,
3542         IN    UCHAR  Wcid,
3543         IN    UCHAR  NewChannel,
3544         IN    UCHAR  Secondary);
3545
3546 VOID ChannelSwitchAction(
3547         IN      PRTMP_ADAPTER   pAd,
3548         IN    UCHAR  Wcid,
3549         IN    UCHAR  Channel,
3550         IN    UCHAR  Secondary);
3551
3552 ULONG BuildIntolerantChannelRep(
3553         IN      PRTMP_ADAPTER   pAd,
3554         IN    PUCHAR  pDest);
3555
3556 VOID Update2040CoexistFrameAndNotify(
3557         IN      PRTMP_ADAPTER   pAd,
3558         IN    UCHAR  Wcid,
3559         IN      BOOLEAN bAddIntolerantCha);
3560
3561 VOID Send2040CoexistAction(
3562         IN      PRTMP_ADAPTER   pAd,
3563         IN    UCHAR  Wcid,
3564         IN      BOOLEAN bAddIntolerantCha);
3565 #endif // DOT11N_DRAFT3 //
3566
3567 VOID PeerRMAction(
3568         IN PRTMP_ADAPTER pAd,
3569         IN MLME_QUEUE_ELEM *Elem);
3570
3571 VOID PeerPublicAction(
3572         IN PRTMP_ADAPTER pAd,
3573         IN MLME_QUEUE_ELEM *Elem);
3574
3575 #ifdef CONFIG_STA_SUPPORT
3576 VOID StaPublicAction(
3577         IN PRTMP_ADAPTER pAd,
3578         IN UCHAR Bss2040Coexist);
3579 #endif // CONFIG_STA_SUPPORT //
3580
3581
3582 VOID PeerBSSTranAction(
3583         IN PRTMP_ADAPTER pAd,
3584         IN MLME_QUEUE_ELEM *Elem);
3585
3586 #ifdef DOT11_N_SUPPORT
3587 VOID PeerHTAction(
3588         IN PRTMP_ADAPTER pAd,
3589         IN MLME_QUEUE_ELEM *Elem);
3590 #endif // DOT11_N_SUPPORT //
3591
3592 VOID PeerQOSAction(
3593     IN PRTMP_ADAPTER pAd,
3594     IN MLME_QUEUE_ELEM *Elem);
3595
3596 #ifdef DOT11_N_SUPPORT
3597 VOID RECBATimerTimeout(
3598     IN PVOID SystemSpecific1,
3599     IN PVOID FunctionContext,
3600     IN PVOID SystemSpecific2,
3601     IN PVOID SystemSpecific3);
3602
3603 VOID ORIBATimerTimeout(
3604         IN      PRTMP_ADAPTER   pAd);
3605
3606 VOID SendRefreshBAR(
3607         IN      PRTMP_ADAPTER   pAd,
3608         IN      MAC_TABLE_ENTRY *pEntry);
3609 #endif // DOT11_N_SUPPORT //
3610
3611 VOID ActHeaderInit(
3612     IN  PRTMP_ADAPTER   pAd,
3613     IN OUT PHEADER_802_11 pHdr80211,
3614     IN PUCHAR Addr1,
3615     IN PUCHAR Addr2,
3616     IN PUCHAR Addr3);
3617
3618 VOID BarHeaderInit(
3619         IN      PRTMP_ADAPTER   pAd,
3620         IN OUT PFRAME_BAR pCntlBar,
3621         IN PUCHAR pDA,
3622         IN PUCHAR pSA);
3623
3624 VOID InsertActField(
3625         IN PRTMP_ADAPTER pAd,
3626         OUT PUCHAR pFrameBuf,
3627         OUT PULONG pFrameLen,
3628         IN UINT8 Category,
3629         IN UINT8 ActCode);
3630
3631 BOOLEAN QosBADataParse(
3632         IN PRTMP_ADAPTER        pAd,
3633         IN BOOLEAN bAMSDU,
3634         IN PUCHAR p8023Header,
3635         IN UCHAR        WCID,
3636         IN UCHAR        TID,
3637         IN USHORT Sequence,
3638         IN UCHAR DataOffset,
3639         IN USHORT Datasize,
3640         IN UINT   CurRxIndex);
3641
3642 #ifdef DOT11_N_SUPPORT
3643 BOOLEAN CntlEnqueueForRecv(
3644     IN  PRTMP_ADAPTER   pAd,
3645         IN ULONG Wcid,
3646     IN ULONG MsgLen,
3647         IN PFRAME_BA_REQ pMsg);
3648
3649 VOID BaAutoManSwitch(
3650         IN      PRTMP_ADAPTER   pAd);
3651 #endif // DOT11_N_SUPPORT //
3652
3653 VOID HTIOTCheck(
3654         IN      PRTMP_ADAPTER   pAd,
3655         IN    UCHAR     BatRecIdx);
3656
3657 //
3658 // Private routines in rtmp_data.c
3659 //
3660 BOOLEAN RTMPHandleRxDoneInterrupt(
3661         IN  PRTMP_ADAPTER   pAd);
3662
3663 VOID RTMPHandleTxDoneInterrupt(
3664         IN  PRTMP_ADAPTER   pAd);
3665
3666 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3667         IN  PRTMP_ADAPTER   pAd,
3668         IN  INT_SOURCE_CSR_STRUC TxRingBitmap);
3669
3670 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3671         IN  PRTMP_ADAPTER   pAd);
3672
3673 VOID RTMPHandleTBTTInterrupt(
3674         IN  PRTMP_ADAPTER   pAd);
3675
3676 VOID RTMPHandlePreTBTTInterrupt(
3677         IN  PRTMP_ADAPTER   pAd);
3678
3679 void RTMPHandleTwakeupInterrupt(
3680         IN PRTMP_ADAPTER pAd);
3681
3682 VOID    RTMPHandleRxCoherentInterrupt(
3683         IN      PRTMP_ADAPTER   pAd);
3684
3685 BOOLEAN TxFrameIsAggregatible(
3686         IN  PRTMP_ADAPTER   pAd,
3687         IN  PUCHAR          pPrevAddr1,
3688         IN  PUCHAR          p8023hdr);
3689
3690 BOOLEAN PeerIsAggreOn(
3691     IN  PRTMP_ADAPTER   pAd,
3692     IN  ULONG          TxRate,
3693     IN  PMAC_TABLE_ENTRY pMacEntry);
3694
3695 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3696         IN  PNDIS_BUFFER    pFirstBuffer,
3697         IN  UCHAR           DesiredOffset,
3698         OUT PUCHAR          pByte0,
3699         OUT PUCHAR          pByte1);
3700
3701 NDIS_STATUS STASendPacket(
3702         IN  PRTMP_ADAPTER   pAd,
3703         IN  PNDIS_PACKET    pPacket);
3704
3705 VOID STASendPackets(
3706         IN  NDIS_HANDLE     MiniportAdapterContext,
3707         IN  PPNDIS_PACKET   ppPacketArray,
3708         IN  UINT            NumberOfPackets);
3709
3710 VOID RTMPDeQueuePacket(
3711         IN  PRTMP_ADAPTER   pAd,
3712         IN      BOOLEAN                 bIntContext,
3713         IN  UCHAR                       QueIdx,
3714         IN      UCHAR                   Max_Tx_Packets);
3715
3716 NDIS_STATUS     RTMPHardTransmit(
3717         IN PRTMP_ADAPTER        pAd,
3718         IN PNDIS_PACKET         pPacket,
3719         IN  UCHAR                       QueIdx,
3720         OUT     PULONG                  pFreeTXDLeft);
3721
3722 NDIS_STATUS     STAHardTransmit(
3723         IN PRTMP_ADAPTER        pAd,
3724         IN TX_BLK                       *pTxBlk,
3725         IN  UCHAR                       QueIdx);
3726
3727 VOID STARxEAPOLFrameIndicate(
3728         IN      PRTMP_ADAPTER   pAd,
3729         IN      MAC_TABLE_ENTRY *pEntry,
3730         IN      RX_BLK                  *pRxBlk,
3731         IN      UCHAR                   FromWhichBSSID);
3732
3733 NDIS_STATUS RTMPFreeTXDRequest(
3734         IN  PRTMP_ADAPTER   pAd,
3735         IN  UCHAR           RingType,
3736         IN  UCHAR           NumberRequired,
3737         IN      PUCHAR          FreeNumberIs);
3738
3739 NDIS_STATUS MlmeHardTransmit(
3740         IN  PRTMP_ADAPTER   pAd,
3741         IN  UCHAR       QueIdx,
3742         IN  PNDIS_PACKET    pPacket);
3743
3744 NDIS_STATUS MlmeHardTransmitMgmtRing(
3745         IN  PRTMP_ADAPTER   pAd,
3746         IN  UCHAR       QueIdx,
3747         IN  PNDIS_PACKET    pPacket);
3748
3749 NDIS_STATUS MlmeHardTransmitTxRing(
3750         IN  PRTMP_ADAPTER   pAd,
3751         IN  UCHAR       QueIdx,
3752         IN  PNDIS_PACKET    pPacket);
3753
3754 USHORT  RTMPCalcDuration(
3755         IN  PRTMP_ADAPTER   pAd,
3756         IN  UCHAR           Rate,
3757         IN  ULONG           Size);
3758
3759 VOID RTMPWriteTxWI(
3760         IN      PRTMP_ADAPTER   pAd,
3761         IN      PTXWI_STRUC             pTxWI,
3762         IN  BOOLEAN             FRAG,
3763         IN  BOOLEAN             CFACK,
3764         IN  BOOLEAN             InsTimestamp,
3765         IN      BOOLEAN                 AMPDU,
3766         IN      BOOLEAN                 Ack,
3767         IN      BOOLEAN                 NSeq,           // HW new a sequence.
3768         IN      UCHAR                   BASize,
3769         IN      UCHAR                   WCID,
3770         IN      ULONG                   Length,
3771         IN  UCHAR               PID,
3772         IN      UCHAR                   TID,
3773         IN      UCHAR                   TxRate,
3774         IN      UCHAR                   Txopmode,
3775         IN      BOOLEAN                 CfAck,
3776         IN      HTTRANSMIT_SETTING      *pTransmit);
3777
3778
3779 VOID RTMPWriteTxWI_Data(
3780         IN      PRTMP_ADAPTER           pAd,
3781         IN      OUT PTXWI_STRUC         pTxWI,
3782         IN      TX_BLK                          *pTxBlk);
3783
3784
3785 VOID RTMPWriteTxWI_Cache(
3786         IN      PRTMP_ADAPTER           pAd,
3787         IN      OUT PTXWI_STRUC         pTxWI,
3788         IN      TX_BLK                          *pTxBlk);
3789
3790 VOID RTMPWriteTxDescriptor(
3791         IN      PRTMP_ADAPTER   pAd,
3792         IN      PTXD_STRUC              pTxD,
3793         IN      BOOLEAN                 bWIV,
3794         IN      UCHAR                   QSEL);
3795
3796 VOID RTMPSuspendMsduTransmission(
3797         IN  PRTMP_ADAPTER   pAd);
3798
3799 VOID RTMPResumeMsduTransmission(
3800         IN  PRTMP_ADAPTER   pAd);
3801
3802 NDIS_STATUS MiniportMMRequest(
3803         IN  PRTMP_ADAPTER   pAd,
3804         IN      UCHAR                   QueIdx,
3805         IN      PUCHAR                  pData,
3806         IN  UINT            Length);
3807
3808 VOID RTMPSendNullFrame(
3809         IN  PRTMP_ADAPTER   pAd,
3810         IN  UCHAR           TxRate,
3811         IN      BOOLEAN                 bQosNull);
3812
3813 VOID RTMPSendDisassociationFrame(
3814         IN      PRTMP_ADAPTER   pAd);
3815
3816 VOID RTMPSendRTSFrame(
3817         IN  PRTMP_ADAPTER   pAd,
3818         IN  PUCHAR          pDA,
3819         IN      unsigned int    NextMpduSize,
3820         IN  UCHAR           TxRate,
3821         IN  UCHAR           RTSRate,
3822         IN  USHORT          AckDuration,
3823         IN  UCHAR           QueIdx,
3824         IN  UCHAR                       FrameGap);
3825
3826
3827 NDIS_STATUS RTMPApplyPacketFilter(
3828         IN  PRTMP_ADAPTER   pAd,
3829         IN  PRT28XX_RXD_STRUC      pRxD,
3830         IN  PHEADER_802_11  pHeader);
3831
3832 PQUEUE_HEADER   RTMPCheckTxSwQueue(
3833         IN  PRTMP_ADAPTER   pAd,
3834         OUT UCHAR           *QueIdx);
3835
3836 #ifdef CONFIG_STA_SUPPORT
3837 VOID RTMPReportMicError(
3838         IN  PRTMP_ADAPTER   pAd,
3839         IN  PCIPHER_KEY     pWpaKey);
3840
3841 VOID    WpaMicFailureReportFrame(
3842         IN  PRTMP_ADAPTER    pAd,
3843         IN  MLME_QUEUE_ELEM *Elem);
3844
3845 VOID    WpaDisassocApAndBlockAssoc(
3846     IN  PVOID SystemSpecific1,
3847     IN  PVOID FunctionContext,
3848     IN  PVOID SystemSpecific2,
3849     IN  PVOID SystemSpecific3);
3850 #endif // CONFIG_STA_SUPPORT //
3851
3852 NDIS_STATUS RTMPCloneNdisPacket(
3853         IN  PRTMP_ADAPTER   pAd,
3854         IN      BOOLEAN    pInsAMSDUHdr,
3855         IN  PNDIS_PACKET    pInPacket,
3856         OUT PNDIS_PACKET   *ppOutPacket);
3857
3858 NDIS_STATUS RTMPAllocateNdisPacket(
3859         IN  PRTMP_ADAPTER   pAd,
3860         IN  PNDIS_PACKET    *pPacket,
3861         IN  PUCHAR          pHeader,
3862         IN  UINT            HeaderLen,
3863         IN  PUCHAR          pData,
3864         IN  UINT            DataLen);
3865
3866 VOID RTMPFreeNdisPacket(
3867         IN  PRTMP_ADAPTER   pAd,
3868         IN  PNDIS_PACKET    pPacket);
3869
3870 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3871         IN PRTMP_ADAPTER    pAd,
3872         IN UCHAR            QueIdx);
3873
3874 BOOLEAN RTMPCheckDHCPFrame(
3875         IN      PRTMP_ADAPTER   pAd,
3876         IN      PNDIS_PACKET    pPacket);
3877
3878
3879 BOOLEAN RTMPCheckEtherType(
3880         IN      PRTMP_ADAPTER   pAd,
3881         IN      PNDIS_PACKET    pPacket);
3882
3883
3884 VOID RTMPCckBbpTuning(
3885         IN      PRTMP_ADAPTER   pAd,
3886         IN      UINT                    TxRate);
3887
3888 //
3889 // Private routines in rtmp_wep.c
3890 //
3891 VOID RTMPInitWepEngine(
3892         IN  PRTMP_ADAPTER   pAd,
3893         IN  PUCHAR          pKey,
3894         IN  UCHAR           KeyId,
3895         IN  UCHAR           KeyLen,
3896         IN  PUCHAR          pDest);
3897
3898 VOID RTMPEncryptData(
3899         IN  PRTMP_ADAPTER   pAd,
3900         IN  PUCHAR          pSrc,
3901         IN  PUCHAR          pDest,
3902         IN  UINT            Len);
3903
3904 BOOLEAN RTMPDecryptData(
3905         IN      PRTMP_ADAPTER   pAdapter,
3906         IN      PUCHAR                  pSrc,
3907         IN      UINT                    Len,
3908         IN      UINT                    idx);
3909
3910 BOOLEAN RTMPSoftDecryptWEP(
3911         IN PRTMP_ADAPTER        pAd,
3912         IN PUCHAR                       pData,
3913         IN ULONG                        DataByteCnt,
3914         IN PCIPHER_KEY          pGroupKey);
3915
3916 VOID RTMPSetICV(
3917         IN  PRTMP_ADAPTER   pAd,
3918         IN  PUCHAR          pDest);
3919
3920 VOID ARCFOUR_INIT(
3921         IN  PARCFOURCONTEXT Ctx,
3922         IN  PUCHAR          pKey,
3923         IN  UINT            KeyLen);
3924
3925 UCHAR   ARCFOUR_BYTE(
3926         IN  PARCFOURCONTEXT     Ctx);
3927
3928 VOID ARCFOUR_DECRYPT(
3929         IN  PARCFOURCONTEXT Ctx,
3930         IN  PUCHAR          pDest,
3931         IN  PUCHAR          pSrc,
3932         IN  UINT            Len);
3933
3934 VOID ARCFOUR_ENCRYPT(
3935         IN  PARCFOURCONTEXT Ctx,
3936         IN  PUCHAR          pDest,
3937         IN  PUCHAR          pSrc,
3938         IN  UINT            Len);
3939
3940 VOID WPAARCFOUR_ENCRYPT(
3941         IN  PARCFOURCONTEXT Ctx,
3942         IN  PUCHAR          pDest,
3943         IN  PUCHAR          pSrc,
3944         IN  UINT            Len);
3945
3946 UINT RTMP_CALC_FCS32(
3947         IN  UINT   Fcs,
3948         IN  PUCHAR  Cp,
3949         IN  INT     Len);
3950
3951 //
3952 // MLME routines
3953 //
3954
3955 // Asic/RF/BBP related functions
3956
3957 VOID AsicAdjustTxPower(
3958         IN PRTMP_ADAPTER pAd);
3959
3960 VOID    AsicUpdateProtect(
3961         IN              PRTMP_ADAPTER   pAd,
3962         IN              USHORT                  OperaionMode,
3963         IN              UCHAR                   SetMask,
3964         IN              BOOLEAN                 bDisableBGProtect,
3965         IN              BOOLEAN                 bNonGFExist);
3966
3967 VOID AsicSwitchChannel(
3968         IN  PRTMP_ADAPTER   pAd,
3969         IN      UCHAR                   Channel,
3970         IN      BOOLEAN                 bScan);
3971
3972 VOID AsicLockChannel(
3973         IN PRTMP_ADAPTER pAd,
3974         IN UCHAR Channel) ;
3975
3976 VOID AsicAntennaSelect(
3977         IN  PRTMP_ADAPTER   pAd,
3978         IN  UCHAR           Channel);
3979
3980 VOID AsicAntennaSetting(
3981         IN      PRTMP_ADAPTER   pAd,
3982         IN      ABGBAND_STATE   BandState);
3983
3984 VOID AsicRfTuningExec(
3985         IN PVOID SystemSpecific1,
3986         IN PVOID FunctionContext,
3987         IN PVOID SystemSpecific2,
3988         IN PVOID SystemSpecific3);
3989
3990 #ifdef CONFIG_STA_SUPPORT
3991 VOID AsicSleepThenAutoWakeup(
3992         IN  PRTMP_ADAPTER   pAd,
3993         IN  USHORT TbttNumToNextWakeUp);
3994
3995 VOID AsicForceSleep(
3996         IN PRTMP_ADAPTER pAd);
3997
3998 VOID AsicForceWakeup(
3999         IN PRTMP_ADAPTER pAd,
4000         IN UCHAR         Level);
4001 #endif // CONFIG_STA_SUPPORT //
4002
4003 VOID AsicSetBssid(
4004         IN  PRTMP_ADAPTER   pAd,
4005         IN  PUCHAR pBssid);
4006
4007 VOID AsicSetMcastWC(
4008         IN PRTMP_ADAPTER pAd);
4009
4010 VOID AsicDelWcidTab(
4011         IN PRTMP_ADAPTER pAd,
4012         IN UCHAR        Wcid);
4013
4014 VOID AsicEnableRDG(
4015         IN PRTMP_ADAPTER pAd);
4016
4017 VOID AsicDisableRDG(
4018         IN PRTMP_ADAPTER pAd);
4019
4020 VOID AsicDisableSync(
4021         IN  PRTMP_ADAPTER   pAd);
4022
4023 VOID AsicEnableBssSync(
4024         IN  PRTMP_ADAPTER   pAd);
4025
4026 VOID AsicEnableIbssSync(
4027         IN  PRTMP_ADAPTER   pAd);
4028
4029 VOID AsicSetEdcaParm(
4030         IN PRTMP_ADAPTER pAd,
4031         IN PEDCA_PARM    pEdcaParm);
4032
4033 VOID AsicSetSlotTime(
4034         IN PRTMP_ADAPTER pAd,
4035         IN BOOLEAN bUseShortSlotTime);
4036
4037 VOID AsicAddSharedKeyEntry(
4038         IN PRTMP_ADAPTER pAd,
4039         IN UCHAR         BssIndex,
4040         IN UCHAR         KeyIdx,
4041         IN UCHAR         CipherAlg,
4042         IN PUCHAR        pKey,
4043         IN PUCHAR        pTxMic,
4044         IN PUCHAR        pRxMic);
4045
4046 VOID AsicRemoveSharedKeyEntry(
4047         IN PRTMP_ADAPTER pAd,
4048         IN UCHAR         BssIndex,
4049         IN UCHAR         KeyIdx);
4050
4051 VOID AsicUpdateWCIDAttribute(
4052         IN PRTMP_ADAPTER pAd,
4053         IN USHORT               WCID,
4054         IN UCHAR                BssIndex,
4055         IN UCHAR        CipherAlg,
4056         IN BOOLEAN              bUsePairewiseKeyTable);
4057
4058 VOID AsicUpdateWCIDIVEIV(
4059         IN PRTMP_ADAPTER pAd,
4060         IN USHORT               WCID,
4061         IN ULONG        uIV,
4062         IN ULONG        uEIV);
4063
4064 VOID AsicUpdateRxWCIDTable(
4065         IN PRTMP_ADAPTER pAd,
4066         IN USHORT               WCID,
4067         IN PUCHAR        pAddr);
4068
4069 VOID AsicAddKeyEntry(
4070         IN PRTMP_ADAPTER pAd,
4071         IN USHORT               WCID,
4072         IN UCHAR                BssIndex,
4073         IN UCHAR                KeyIdx,
4074         IN PCIPHER_KEY  pCipherKey,
4075         IN BOOLEAN              bUsePairewiseKeyTable,
4076         IN BOOLEAN              bTxKey);
4077
4078 VOID AsicAddPairwiseKeyEntry(
4079         IN PRTMP_ADAPTER pAd,
4080         IN PUCHAR        pAddr,
4081         IN UCHAR                WCID,
4082         IN CIPHER_KEY            *pCipherKey);
4083
4084 VOID AsicRemovePairwiseKeyEntry(
4085         IN PRTMP_ADAPTER  pAd,
4086         IN UCHAR                 BssIdx,
4087         IN UCHAR                 Wcid);
4088
4089 BOOLEAN AsicSendCommandToMcu(
4090         IN PRTMP_ADAPTER pAd,
4091         IN UCHAR         Command,
4092         IN UCHAR         Token,
4093         IN UCHAR         Arg0,
4094         IN UCHAR         Arg1);
4095
4096 BOOLEAN AsicCheckCommanOk(
4097         IN PRTMP_ADAPTER pAd,
4098         IN UCHAR                 Command);
4099
4100 VOID MacAddrRandomBssid(
4101         IN  PRTMP_ADAPTER   pAd,
4102         OUT PUCHAR pAddr);
4103
4104 VOID MgtMacHeaderInit(
4105         IN  PRTMP_ADAPTER     pAd,
4106         IN OUT PHEADER_802_11 pHdr80211,
4107         IN UCHAR SubType,
4108         IN UCHAR ToDs,
4109         IN PUCHAR pDA,
4110         IN PUCHAR pBssid);
4111
4112 VOID MlmeRadioOff(
4113         IN PRTMP_ADAPTER pAd);
4114
4115 VOID MlmeRadioOn(
4116         IN PRTMP_ADAPTER pAd);
4117
4118
4119 VOID BssTableInit(
4120         IN BSS_TABLE *Tab);
4121
4122 #ifdef DOT11_N_SUPPORT
4123 VOID BATableInit(
4124         IN PRTMP_ADAPTER pAd,
4125     IN BA_TABLE *Tab);
4126 #endif // DOT11_N_SUPPORT //
4127
4128 ULONG BssTableSearch(
4129         IN BSS_TABLE *Tab,
4130         IN PUCHAR pBssid,
4131         IN UCHAR Channel);
4132
4133 ULONG BssSsidTableSearch(
4134         IN BSS_TABLE *Tab,
4135         IN PUCHAR    pBssid,
4136         IN PUCHAR    pSsid,
4137         IN UCHAR     SsidLen,
4138         IN UCHAR     Channel);
4139
4140 ULONG BssTableSearchWithSSID(
4141         IN BSS_TABLE *Tab,
4142         IN PUCHAR    Bssid,
4143         IN PUCHAR    pSsid,
4144         IN UCHAR     SsidLen,
4145         IN UCHAR     Channel);
4146
4147 VOID BssTableDeleteEntry(
4148         IN OUT  PBSS_TABLE pTab,
4149         IN      PUCHAR pBssid,
4150         IN      UCHAR Channel);
4151
4152 #ifdef DOT11_N_SUPPORT
4153 VOID BATableDeleteORIEntry(
4154         IN OUT  PRTMP_ADAPTER pAd,
4155         IN              BA_ORI_ENTRY    *pBAORIEntry);
4156
4157 VOID BATableDeleteRECEntry(
4158         IN OUT  PRTMP_ADAPTER pAd,
4159         IN              BA_REC_ENTRY    *pBARECEntry);
4160
4161 VOID BATableTearORIEntry(
4162         IN OUT  PRTMP_ADAPTER pAd,
4163         IN              UCHAR TID,
4164         IN              UCHAR Wcid,
4165         IN              BOOLEAN bForceDelete,
4166         IN              BOOLEAN ALL);
4167
4168 VOID BATableTearRECEntry(
4169         IN OUT  PRTMP_ADAPTER pAd,
4170         IN              UCHAR TID,
4171         IN              UCHAR WCID,
4172         IN              BOOLEAN ALL);
4173 #endif // DOT11_N_SUPPORT //
4174
4175 VOID  BssEntrySet(
4176         IN  PRTMP_ADAPTER   pAd,
4177         OUT PBSS_ENTRY pBss,
4178         IN PUCHAR pBssid,
4179         IN CHAR Ssid[],
4180         IN UCHAR SsidLen,
4181         IN UCHAR BssType,
4182         IN USHORT BeaconPeriod,
4183         IN PCF_PARM CfParm,
4184         IN USHORT AtimWin,
4185         IN USHORT CapabilityInfo,
4186         IN UCHAR SupRate[],
4187         IN UCHAR SupRateLen,
4188         IN UCHAR ExtRate[],
4189         IN UCHAR ExtRateLen,
4190         IN HT_CAPABILITY_IE *pHtCapability,
4191         IN ADD_HT_INFO_IE *pAddHtInfo,  // AP might use this additional ht info IE
4192         IN UCHAR                        HtCapabilityLen,
4193         IN UCHAR                        AddHtInfoLen,
4194         IN UCHAR                        NewExtChanOffset,
4195         IN UCHAR Channel,
4196         IN CHAR Rssi,
4197         IN LARGE_INTEGER TimeStamp,
4198         IN UCHAR CkipFlag,
4199         IN PEDCA_PARM pEdcaParm,
4200         IN PQOS_CAPABILITY_PARM pQosCapability,
4201         IN PQBSS_LOAD_PARM pQbssLoad,
4202         IN USHORT LengthVIE,
4203         IN PNDIS_802_11_VARIABLE_IEs pVIE);
4204
4205 ULONG  BssTableSetEntry(
4206         IN  PRTMP_ADAPTER   pAd,
4207         OUT PBSS_TABLE pTab,
4208         IN PUCHAR pBssid,
4209         IN CHAR Ssid[],
4210         IN UCHAR SsidLen,
4211         IN UCHAR BssType,
4212         IN USHORT BeaconPeriod,
4213         IN CF_PARM *CfParm,
4214         IN USHORT AtimWin,
4215         IN USHORT CapabilityInfo,
4216         IN UCHAR SupRate[],
4217         IN UCHAR SupRateLen,
4218         IN UCHAR ExtRate[],
4219         IN UCHAR ExtRateLen,
4220         IN HT_CAPABILITY_IE *pHtCapability,
4221         IN ADD_HT_INFO_IE *pAddHtInfo,  // AP might use this additional ht info IE
4222         IN UCHAR                        HtCapabilityLen,
4223         IN UCHAR                        AddHtInfoLen,
4224         IN UCHAR                        NewExtChanOffset,
4225         IN UCHAR Channel,
4226         IN CHAR Rssi,
4227         IN LARGE_INTEGER TimeStamp,
4228         IN UCHAR CkipFlag,
4229         IN PEDCA_PARM pEdcaParm,
4230         IN PQOS_CAPABILITY_PARM pQosCapability,
4231         IN PQBSS_LOAD_PARM pQbssLoad,
4232         IN USHORT LengthVIE,
4233         IN PNDIS_802_11_VARIABLE_IEs pVIE);
4234
4235 #ifdef DOT11_N_SUPPORT
4236 VOID BATableInsertEntry(
4237     IN  PRTMP_ADAPTER   pAd,
4238         IN USHORT Aid,
4239     IN USHORT           TimeOutValue,
4240         IN USHORT               StartingSeq,
4241     IN UCHAR TID,
4242         IN UCHAR BAWinSize,
4243         IN UCHAR OriginatorStatus,
4244     IN BOOLEAN IsRecipient);
4245
4246 #ifdef DOT11N_DRAFT3
4247 VOID Bss2040CoexistTimeOut(
4248         IN PVOID SystemSpecific1,
4249         IN PVOID FunctionContext,
4250         IN PVOID SystemSpecific2,
4251         IN PVOID SystemSpecific3);
4252
4253
4254 VOID  TriEventInit(
4255         IN      PRTMP_ADAPTER   pAd);
4256
4257 ULONG TriEventTableSetEntry(
4258         IN      PRTMP_ADAPTER   pAd,
4259         OUT TRIGGER_EVENT_TAB *Tab,
4260         IN PUCHAR pBssid,
4261         IN HT_CAPABILITY_IE *pHtCapability,
4262         IN UCHAR                        HtCapabilityLen,
4263         IN UCHAR                        RegClass,
4264         IN UCHAR ChannelNo);
4265
4266 VOID TriEventCounterMaintenance(
4267         IN      PRTMP_ADAPTER   pAd);
4268 #endif // DOT11N_DRAFT3 //
4269 #endif // DOT11_N_SUPPORT //
4270
4271 VOID BssTableSsidSort(
4272         IN  PRTMP_ADAPTER   pAd,
4273         OUT BSS_TABLE *OutTab,
4274         IN  CHAR Ssid[],
4275         IN  UCHAR SsidLen);
4276
4277 VOID  BssTableSortByRssi(
4278         IN OUT BSS_TABLE *OutTab);
4279
4280 VOID BssCipherParse(
4281         IN OUT  PBSS_ENTRY  pBss);
4282
4283 NDIS_STATUS  MlmeQueueInit(
4284         IN MLME_QUEUE *Queue);
4285
4286 VOID  MlmeQueueDestroy(
4287         IN MLME_QUEUE *Queue);
4288
4289 BOOLEAN MlmeEnqueue(
4290         IN PRTMP_ADAPTER pAd,
4291         IN ULONG Machine,
4292         IN ULONG MsgType,
4293         IN ULONG MsgLen,
4294         IN VOID *Msg);
4295
4296 BOOLEAN MlmeEnqueueForRecv(
4297         IN  PRTMP_ADAPTER   pAd,
4298         IN ULONG Wcid,
4299         IN ULONG TimeStampHigh,
4300         IN ULONG TimeStampLow,
4301         IN UCHAR Rssi0,
4302         IN UCHAR Rssi1,
4303         IN UCHAR Rssi2,
4304         IN ULONG MsgLen,
4305         IN PVOID Msg,
4306         IN UCHAR Signal);
4307
4308
4309 BOOLEAN MlmeDequeue(
4310         IN MLME_QUEUE *Queue,
4311         OUT MLME_QUEUE_ELEM **Elem);
4312
4313 VOID    MlmeRestartStateMachine(
4314         IN  PRTMP_ADAPTER   pAd);
4315
4316 BOOLEAN  MlmeQueueEmpty(
4317         IN MLME_QUEUE *Queue);
4318
4319 BOOLEAN  MlmeQueueFull(
4320         IN MLME_QUEUE *Queue);
4321
4322 BOOLEAN  MsgTypeSubst(
4323         IN PRTMP_ADAPTER pAd,
4324         IN PFRAME_802_11 pFrame,
4325         OUT INT *Machine,
4326         OUT INT *MsgType);
4327
4328 VOID StateMachineInit(
4329         IN STATE_MACHINE *Sm,
4330         IN STATE_MACHINE_FUNC Trans[],
4331         IN ULONG StNr,
4332         IN ULONG MsgNr,
4333         IN STATE_MACHINE_FUNC DefFunc,
4334         IN ULONG InitState,
4335         IN ULONG Base);
4336
4337 VOID StateMachineSetAction(
4338         IN STATE_MACHINE *S,
4339         IN ULONG St,
4340         ULONG Msg,
4341         IN STATE_MACHINE_FUNC F);
4342
4343 VOID StateMachinePerformAction(
4344         IN  PRTMP_ADAPTER   pAd,
4345         IN STATE_MACHINE *S,
4346         IN MLME_QUEUE_ELEM *Elem);
4347
4348 VOID Drop(
4349         IN  PRTMP_ADAPTER   pAd,
4350         IN MLME_QUEUE_ELEM *Elem);
4351
4352 VOID AssocStateMachineInit(
4353         IN  PRTMP_ADAPTER   pAd,
4354         IN  STATE_MACHINE *Sm,
4355         OUT STATE_MACHINE_FUNC Trans[]);
4356
4357 VOID ReassocTimeout(
4358         IN PVOID SystemSpecific1,
4359         IN PVOID FunctionContext,
4360         IN PVOID SystemSpecific2,
4361         IN PVOID SystemSpecific3);
4362
4363 VOID AssocTimeout(
4364         IN PVOID SystemSpecific1,
4365         IN PVOID FunctionContext,
4366         IN PVOID SystemSpecific2,
4367         IN PVOID SystemSpecific3);
4368
4369 VOID DisassocTimeout(
4370         IN PVOID SystemSpecific1,
4371         IN PVOID FunctionContext,
4372         IN PVOID SystemSpecific2,
4373         IN PVOID SystemSpecific3);
4374
4375 //----------------------------------------------
4376 VOID MlmeDisassocReqAction(
4377         IN  PRTMP_ADAPTER   pAd,
4378         IN  MLME_QUEUE_ELEM *Elem);
4379
4380 VOID MlmeAssocReqAction(
4381         IN  PRTMP_ADAPTER   pAd,
4382         IN  MLME_QUEUE_ELEM *Elem);
4383
4384 VOID MlmeReassocReqAction(
4385         IN  PRTMP_ADAPTER   pAd,
4386         IN  MLME_QUEUE_ELEM *Elem);
4387
4388 VOID MlmeDisassocReqAction(
4389         IN  PRTMP_ADAPTER   pAd,
4390         IN  MLME_QUEUE_ELEM *Elem);
4391
4392 VOID PeerAssocRspAction(
4393         IN  PRTMP_ADAPTER   pAd,
4394         IN  MLME_QUEUE_ELEM *Elem);
4395
4396 VOID PeerReassocRspAction(
4397         IN  PRTMP_ADAPTER   pAd,
4398         IN  MLME_QUEUE_ELEM *Elem);
4399
4400 VOID PeerDisassocAction(
4401         IN  PRTMP_ADAPTER   pAd,
4402         IN  MLME_QUEUE_ELEM *Elem);
4403
4404 VOID DisassocTimeoutAction(
4405         IN  PRTMP_ADAPTER   pAd,
4406         IN  MLME_QUEUE_ELEM *Elem);
4407
4408 VOID AssocTimeoutAction(
4409         IN  PRTMP_ADAPTER   pAd,
4410         IN  MLME_QUEUE_ELEM *Elem);
4411
4412 VOID  ReassocTimeoutAction(
4413         IN  PRTMP_ADAPTER   pAd,
4414         IN  MLME_QUEUE_ELEM *Elem);
4415
4416 VOID  Cls3errAction(
4417         IN  PRTMP_ADAPTER   pAd,
4418         IN  PUCHAR pAddr);
4419
4420 VOID SwitchBetweenWepAndCkip(
4421         IN PRTMP_ADAPTER pAd);
4422
4423 VOID  InvalidStateWhenAssoc(
4424         IN  PRTMP_ADAPTER   pAd,
4425         IN  MLME_QUEUE_ELEM *Elem);
4426
4427 VOID  InvalidStateWhenReassoc(
4428         IN  PRTMP_ADAPTER   pAd,
4429         IN  MLME_QUEUE_ELEM *Elem);
4430
4431 VOID InvalidStateWhenDisassociate(
4432         IN  PRTMP_ADAPTER pAd,
4433         IN  MLME_QUEUE_ELEM *Elem);
4434
4435
4436 VOID  ComposePsPoll(
4437         IN  PRTMP_ADAPTER   pAd);
4438
4439 VOID  ComposeNullFrame(
4440         IN  PRTMP_ADAPTER pAd);
4441
4442 VOID  AssocPostProc(
4443         IN  PRTMP_ADAPTER   pAd,
4444         IN  PUCHAR pAddr2,
4445         IN  USHORT CapabilityInfo,
4446         IN  USHORT Aid,
4447         IN  UCHAR SupRate[],
4448         IN  UCHAR SupRateLen,
4449         IN  UCHAR ExtRate[],
4450         IN  UCHAR ExtRateLen,
4451         IN PEDCA_PARM pEdcaParm,
4452         IN HT_CAPABILITY_IE             *pHtCapability,
4453         IN  UCHAR HtCapabilityLen,
4454         IN ADD_HT_INFO_IE               *pAddHtInfo);
4455
4456 VOID AuthStateMachineInit(
4457         IN  PRTMP_ADAPTER   pAd,
4458         IN PSTATE_MACHINE sm,
4459         OUT STATE_MACHINE_FUNC Trans[]);
4460
4461 VOID AuthTimeout(
4462         IN PVOID SystemSpecific1,
4463         IN PVOID FunctionContext,
4464         IN PVOID SystemSpecific2,
4465         IN PVOID SystemSpecific3);
4466
4467 VOID MlmeAuthReqAction(
4468         IN  PRTMP_ADAPTER   pAd,
4469         IN  MLME_QUEUE_ELEM *Elem);
4470
4471 VOID PeerAuthRspAtSeq2Action(
4472         IN  PRTMP_ADAPTER   pAd,
4473         IN  MLME_QUEUE_ELEM *Elem);
4474
4475 VOID PeerAuthRspAtSeq4Action(
4476         IN  PRTMP_ADAPTER   pAd,
4477         IN  MLME_QUEUE_ELEM *Elem);
4478
4479 VOID AuthTimeoutAction(
4480         IN  PRTMP_ADAPTER   pAd,
4481         IN  MLME_QUEUE_ELEM *Elem);
4482
4483 VOID Cls2errAction(
4484         IN  PRTMP_ADAPTER   pAd,
4485         IN  PUCHAR pAddr);
4486
4487 VOID MlmeDeauthReqAction(
4488         IN  PRTMP_ADAPTER   pAd,
4489         IN  MLME_QUEUE_ELEM *Elem);
4490
4491 VOID InvalidStateWhenAuth(
4492         IN  PRTMP_ADAPTER   pAd,
4493         IN  MLME_QUEUE_ELEM *Elem);
4494
4495 //=============================================
4496
4497 VOID AuthRspStateMachineInit(
4498         IN  PRTMP_ADAPTER   pAd,
4499         IN  PSTATE_MACHINE Sm,
4500         IN  STATE_MACHINE_FUNC Trans[]);
4501
4502 VOID PeerDeauthAction(
4503         IN PRTMP_ADAPTER pAd,
4504         IN MLME_QUEUE_ELEM *Elem);
4505
4506 VOID PeerAuthSimpleRspGenAndSend(
4507         IN  PRTMP_ADAPTER   pAd,
4508         IN  PHEADER_802_11  pHdr80211,
4509         IN  USHORT Alg,
4510         IN  USHORT Seq,
4511         IN  USHORT Reason,
4512         IN  USHORT Status);
4513
4514 //
4515 // Private routines in dls.c
4516 //
4517
4518 //========================================
4519
4520 VOID SyncStateMachineInit(
4521         IN  PRTMP_ADAPTER   pAd,
4522         IN  STATE_MACHINE *Sm,
4523         OUT STATE_MACHINE_FUNC Trans[]);
4524
4525 VOID BeaconTimeout(
4526         IN PVOID SystemSpecific1,
4527         IN PVOID FunctionContext,
4528         IN PVOID SystemSpecific2,
4529         IN PVOID SystemSpecific3);
4530
4531 VOID ScanTimeout(
4532         IN PVOID SystemSpecific1,
4533         IN PVOID FunctionContext,
4534         IN PVOID SystemSpecific2,
4535         IN PVOID SystemSpecific3);
4536
4537 VOID MlmeScanReqAction(
4538         IN  PRTMP_ADAPTER   pAd,
4539         IN  MLME_QUEUE_ELEM *Elem);
4540
4541 VOID InvalidStateWhenScan(
4542         IN  PRTMP_ADAPTER   pAd,
4543         IN  MLME_QUEUE_ELEM *Elem);
4544
4545 VOID InvalidStateWhenJoin(
4546         IN  PRTMP_ADAPTER   pAd,
4547         IN  MLME_QUEUE_ELEM *Elem);
4548
4549 VOID InvalidStateWhenStart(
4550         IN  PRTMP_ADAPTER   pAd,
4551         IN  MLME_QUEUE_ELEM *Elem);
4552
4553 VOID PeerBeacon(
4554         IN  PRTMP_ADAPTER   pAd,
4555         IN  MLME_QUEUE_ELEM *Elem);
4556
4557 VOID EnqueueProbeRequest(
4558         IN PRTMP_ADAPTER pAd);
4559
4560 BOOLEAN ScanRunning(
4561                 IN PRTMP_ADAPTER pAd);
4562 //=========================================
4563
4564 VOID MlmeCntlInit(
4565         IN  PRTMP_ADAPTER   pAd,
4566         IN  STATE_MACHINE *S,
4567         OUT STATE_MACHINE_FUNC Trans[]);
4568
4569 VOID MlmeCntlMachinePerformAction(
4570         IN  PRTMP_ADAPTER   pAd,
4571         IN  STATE_MACHINE *S,
4572         IN  MLME_QUEUE_ELEM *Elem);
4573
4574 VOID CntlIdleProc(
4575         IN  PRTMP_ADAPTER   pAd,
4576         IN  MLME_QUEUE_ELEM *Elem);
4577
4578 VOID CntlOidScanProc(
4579         IN  PRTMP_ADAPTER pAd,
4580         IN  MLME_QUEUE_ELEM *Elem);
4581
4582 VOID CntlOidSsidProc(
4583         IN  PRTMP_ADAPTER   pAd,
4584         IN  MLME_QUEUE_ELEM * Elem);
4585
4586 VOID CntlOidRTBssidProc(
4587         IN  PRTMP_ADAPTER   pAd,
4588         IN  MLME_QUEUE_ELEM * Elem);
4589
4590 VOID CntlMlmeRoamingProc(
4591         IN  PRTMP_ADAPTER   pAd,
4592         IN  MLME_QUEUE_ELEM * Elem);
4593
4594 VOID CntlWaitDisassocProc(
4595         IN  PRTMP_ADAPTER   pAd,
4596         IN  MLME_QUEUE_ELEM *Elem);
4597
4598 VOID CntlWaitJoinProc(
4599         IN  PRTMP_ADAPTER   pAd,
4600         IN  MLME_QUEUE_ELEM *Elem);
4601
4602 VOID CntlWaitReassocProc(
4603         IN  PRTMP_ADAPTER   pAd,
4604         IN  MLME_QUEUE_ELEM *Elem);
4605
4606 VOID CntlWaitStartProc(
4607         IN  PRTMP_ADAPTER   pAd,
4608         IN  MLME_QUEUE_ELEM *Elem);
4609
4610 VOID CntlWaitAuthProc(
4611         IN  PRTMP_ADAPTER   pAd,
4612         IN  MLME_QUEUE_ELEM *Elem);
4613
4614 VOID CntlWaitAuthProc2(
4615         IN  PRTMP_ADAPTER pAd,
4616         IN  MLME_QUEUE_ELEM *Elem);
4617
4618 VOID CntlWaitAssocProc(
4619         IN  PRTMP_ADAPTER   pAd,
4620         IN  MLME_QUEUE_ELEM *Elem);
4621
4622 VOID LinkUp(
4623         IN  PRTMP_ADAPTER   pAd,
4624         IN  UCHAR BssType);
4625
4626 VOID LinkDown(
4627         IN  PRTMP_ADAPTER   pAd,
4628         IN  BOOLEAN         IsReqFromAP);
4629
4630 VOID IterateOnBssTab(
4631         IN  PRTMP_ADAPTER   pAd);
4632
4633 VOID IterateOnBssTab2(
4634         IN  PRTMP_ADAPTER   pAd);;
4635
4636 VOID JoinParmFill(
4637         IN  PRTMP_ADAPTER   pAd,
4638         IN  OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4639         IN  ULONG BssIdx);
4640
4641 VOID AssocParmFill(
4642         IN  PRTMP_ADAPTER   pAd,
4643         IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4644         IN  PUCHAR pAddr,
4645         IN  USHORT CapabilityInfo,
4646         IN  ULONG Timeout,
4647         IN  USHORT ListenIntv);
4648
4649 VOID ScanParmFill(
4650         IN  PRTMP_ADAPTER   pAd,
4651         IN  OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4652         IN  CHAR Ssid[],
4653         IN  UCHAR SsidLen,
4654         IN  UCHAR BssType,
4655         IN  UCHAR ScanType);
4656
4657 VOID DisassocParmFill(
4658         IN  PRTMP_ADAPTER   pAd,
4659         IN  OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4660         IN  PUCHAR pAddr,
4661         IN  USHORT Reason);
4662
4663 VOID StartParmFill(
4664         IN  PRTMP_ADAPTER   pAd,
4665         IN  OUT MLME_START_REQ_STRUCT *StartReq,
4666         IN  CHAR Ssid[],
4667         IN  UCHAR SsidLen);
4668
4669 VOID AuthParmFill(
4670         IN  PRTMP_ADAPTER   pAd,
4671         IN  OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4672         IN  PUCHAR pAddr,
4673         IN  USHORT Alg);
4674
4675 VOID EnqueuePsPoll(
4676         IN  PRTMP_ADAPTER   pAd);
4677
4678 VOID EnqueueBeaconFrame(
4679         IN  PRTMP_ADAPTER   pAd);
4680
4681 VOID MlmeJoinReqAction(
4682         IN  PRTMP_ADAPTER   pAd,
4683         IN  MLME_QUEUE_ELEM *Elem);
4684
4685 VOID MlmeScanReqAction(
4686         IN  PRTMP_ADAPTER   pAd,
4687         IN  MLME_QUEUE_ELEM *Elem);
4688
4689 VOID MlmeStartReqAction(
4690         IN  PRTMP_ADAPTER   pAd,
4691         IN  MLME_QUEUE_ELEM *Elem);
4692
4693 VOID ScanTimeoutAction(
4694         IN  PRTMP_ADAPTER   pAd,
4695         IN  MLME_QUEUE_ELEM *Elem);
4696
4697 VOID BeaconTimeoutAtJoinAction(
4698         IN  PRTMP_ADAPTER   pAd,
4699         IN  MLME_QUEUE_ELEM *Elem);
4700
4701 VOID PeerBeaconAtScanAction(
4702         IN  PRTMP_ADAPTER   pAd,
4703         IN  MLME_QUEUE_ELEM *Elem);
4704
4705 VOID PeerBeaconAtJoinAction(
4706         IN  PRTMP_ADAPTER   pAd,
4707         IN  MLME_QUEUE_ELEM *Elem);
4708
4709 VOID PeerBeacon(
4710         IN  PRTMP_ADAPTER   pAd,
4711         IN  MLME_QUEUE_ELEM *Elem);
4712
4713 VOID PeerProbeReqAction(
4714         IN  PRTMP_ADAPTER pAd,
4715         IN  MLME_QUEUE_ELEM *Elem);
4716
4717 VOID ScanNextChannel(
4718         IN  PRTMP_ADAPTER   pAd);
4719
4720 ULONG MakeIbssBeacon(
4721         IN  PRTMP_ADAPTER   pAd);
4722
4723 VOID CCXAdjacentAPReport(
4724         IN  PRTMP_ADAPTER   pAd);
4725
4726 BOOLEAN MlmeScanReqSanity(
4727         IN  PRTMP_ADAPTER   pAd,
4728         IN  VOID *Msg,
4729         IN  ULONG MsgLen,
4730         OUT UCHAR *BssType,
4731         OUT CHAR ssid[],
4732         OUT UCHAR *SsidLen,
4733         OUT UCHAR *ScanType);
4734
4735 BOOLEAN PeerBeaconAndProbeRspSanity(
4736         IN  PRTMP_ADAPTER   pAd,
4737         IN  VOID *Msg,
4738         IN  ULONG MsgLen,
4739         IN  UCHAR MsgChannel,
4740         OUT PUCHAR pAddr2,
4741         OUT PUCHAR pBssid,
4742         OUT CHAR Ssid[],
4743         OUT UCHAR *pSsidLen,
4744         OUT UCHAR *pBssType,
4745         OUT USHORT *pBeaconPeriod,
4746         OUT UCHAR *pChannel,
4747         OUT UCHAR *pNewChannel,
4748         OUT LARGE_INTEGER *pTimestamp,
4749         OUT CF_PARM *pCfParm,
4750         OUT USHORT *pAtimWin,
4751         OUT USHORT *pCapabilityInfo,
4752         OUT UCHAR *pErp,
4753         OUT UCHAR *pDtimCount,
4754         OUT UCHAR *pDtimPeriod,
4755         OUT UCHAR *pBcastFlag,
4756         OUT UCHAR *pMessageToMe,
4757         OUT UCHAR SupRate[],
4758         OUT UCHAR *pSupRateLen,
4759         OUT UCHAR ExtRate[],
4760         OUT UCHAR *pExtRateLen,
4761         OUT     UCHAR *pCkipFlag,
4762         OUT     UCHAR *pAironetCellPowerLimit,
4763         OUT PEDCA_PARM       pEdcaParm,
4764         OUT PQBSS_LOAD_PARM  pQbssLoad,
4765         OUT PQOS_CAPABILITY_PARM pQosCapability,
4766         OUT ULONG *pRalinkIe,
4767         OUT UCHAR                *pHtCapabilityLen,
4768 #ifdef CONFIG_STA_SUPPORT
4769         OUT UCHAR                *pPreNHtCapabilityLen,
4770 #endif // CONFIG_STA_SUPPORT //
4771         OUT HT_CAPABILITY_IE *pHtCapability,
4772         OUT UCHAR                *AddHtInfoLen,
4773         OUT ADD_HT_INFO_IE *AddHtInfo,
4774         OUT UCHAR *NewExtChannel,
4775         OUT USHORT *LengthVIE,
4776         OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4777
4778 BOOLEAN PeerAddBAReqActionSanity(
4779     IN PRTMP_ADAPTER pAd,
4780     IN VOID *pMsg,
4781     IN ULONG MsgLen,
4782         OUT PUCHAR pAddr2);
4783
4784 BOOLEAN PeerAddBARspActionSanity(
4785     IN PRTMP_ADAPTER pAd,
4786     IN VOID *pMsg,
4787     IN ULONG MsgLen);
4788
4789 BOOLEAN PeerDelBAActionSanity(
4790     IN PRTMP_ADAPTER pAd,
4791     IN UCHAR Wcid,
4792     IN VOID *pMsg,
4793     IN ULONG MsgLen);
4794
4795 BOOLEAN MlmeAssocReqSanity(
4796         IN  PRTMP_ADAPTER   pAd,
4797         IN  VOID *Msg,
4798         IN  ULONG MsgLen,
4799         OUT PUCHAR pApAddr,
4800         OUT USHORT *CapabilityInfo,
4801         OUT ULONG *Timeout,
4802         OUT USHORT *ListenIntv);
4803
4804 BOOLEAN MlmeAuthReqSanity(
4805         IN  PRTMP_ADAPTER   pAd,
4806         IN  VOID *Msg,
4807         IN  ULONG MsgLen,
4808         OUT PUCHAR pAddr,
4809         OUT ULONG *Timeout,
4810         OUT USHORT *Alg);
4811
4812 BOOLEAN MlmeStartReqSanity(
4813         IN  PRTMP_ADAPTER   pAd,
4814         IN  VOID *Msg,
4815         IN  ULONG MsgLen,
4816         OUT CHAR Ssid[],
4817         OUT UCHAR *Ssidlen);
4818
4819 BOOLEAN PeerAuthSanity(
4820         IN  PRTMP_ADAPTER   pAd,
4821         IN  VOID *Msg,
4822         IN  ULONG MsgLen,
4823         OUT PUCHAR pAddr,
4824         OUT USHORT *Alg,
4825         OUT USHORT *Seq,
4826         OUT USHORT *Status,
4827         OUT CHAR ChlgText[]);
4828
4829 BOOLEAN PeerAssocRspSanity(
4830         IN  PRTMP_ADAPTER   pAd,
4831     IN VOID *pMsg,
4832         IN  ULONG MsgLen,
4833         OUT PUCHAR pAddr2,
4834         OUT USHORT *pCapabilityInfo,
4835         OUT USHORT *pStatus,
4836         OUT USHORT *pAid,
4837         OUT UCHAR SupRate[],
4838         OUT UCHAR *pSupRateLen,
4839         OUT UCHAR ExtRate[],
4840         OUT UCHAR *pExtRateLen,
4841     OUT HT_CAPABILITY_IE                *pHtCapability,
4842     OUT ADD_HT_INFO_IE          *pAddHtInfo,    // AP might use this additional ht info IE
4843     OUT UCHAR                   *pHtCapabilityLen,
4844     OUT UCHAR                   *pAddHtInfoLen,
4845     OUT UCHAR                   *pNewExtChannelOffset,
4846         OUT PEDCA_PARM pEdcaParm,
4847         OUT UCHAR *pCkipFlag);
4848
4849 BOOLEAN PeerDisassocSanity(
4850         IN  PRTMP_ADAPTER   pAd,
4851         IN  VOID *Msg,
4852         IN  ULONG MsgLen,
4853         OUT PUCHAR pAddr2,
4854         OUT USHORT *Reason);
4855
4856 BOOLEAN PeerWpaMessageSanity(
4857     IN  PRTMP_ADAPTER           pAd,
4858     IN  PEAPOL_PACKET           pMsg,
4859     IN  ULONG                           MsgLen,
4860     IN  UCHAR                           MsgType,
4861     IN  MAC_TABLE_ENTRY         *pEntry);
4862
4863 BOOLEAN PeerDeauthSanity(
4864         IN  PRTMP_ADAPTER   pAd,
4865         IN  VOID *Msg,
4866         IN  ULONG MsgLen,
4867         OUT PUCHAR pAddr2,
4868         OUT USHORT *Reason);
4869
4870 BOOLEAN PeerProbeReqSanity(
4871         IN  PRTMP_ADAPTER   pAd,
4872         IN  VOID *Msg,
4873         IN  ULONG MsgLen,
4874         OUT PUCHAR pAddr2,
4875         OUT CHAR Ssid[],
4876         OUT UCHAR *pSsidLen);
4877
4878 BOOLEAN GetTimBit(
4879         IN  CHAR *Ptr,
4880         IN  USHORT Aid,
4881         OUT UCHAR *TimLen,
4882         OUT UCHAR *BcastFlag,
4883         OUT UCHAR *DtimCount,
4884         OUT UCHAR *DtimPeriod,
4885         OUT UCHAR *MessageToMe);
4886
4887 UCHAR ChannelSanity(
4888         IN PRTMP_ADAPTER pAd,
4889         IN UCHAR channel);
4890
4891 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4892         IN PBSS_ENTRY pBss);
4893
4894 BOOLEAN MlmeDelBAReqSanity(
4895     IN PRTMP_ADAPTER pAd,
4896     IN VOID *Msg,
4897     IN ULONG MsgLen);
4898
4899 BOOLEAN MlmeAddBAReqSanity(
4900     IN PRTMP_ADAPTER pAd,
4901     IN VOID *Msg,
4902     IN ULONG MsgLen,
4903     OUT PUCHAR pAddr2);
4904
4905 ULONG MakeOutgoingFrame(
4906         OUT CHAR *Buffer,
4907         OUT ULONG *Length, ...);
4908
4909 VOID  LfsrInit(
4910         IN  PRTMP_ADAPTER   pAd,
4911         IN  ULONG Seed);
4912
4913 UCHAR RandomByte(
4914         IN  PRTMP_ADAPTER   pAd);
4915
4916 VOID AsicUpdateAutoFallBackTable(
4917         IN      PRTMP_ADAPTER   pAd,
4918         IN      PUCHAR                  pTxRate);
4919
4920 VOID  MlmePeriodicExec(
4921         IN PVOID SystemSpecific1,
4922         IN PVOID FunctionContext,
4923         IN PVOID SystemSpecific2,
4924         IN PVOID SystemSpecific3);
4925
4926 VOID LinkDownExec(
4927         IN PVOID SystemSpecific1,
4928         IN PVOID FunctionContext,
4929         IN PVOID SystemSpecific2,
4930         IN PVOID SystemSpecific3);
4931
4932 VOID LinkUpExec(
4933         IN PVOID SystemSpecific1,
4934         IN PVOID FunctionContext,
4935         IN PVOID SystemSpecific2,
4936         IN PVOID SystemSpecific3);
4937
4938 VOID STAMlmePeriodicExec(
4939         PRTMP_ADAPTER pAd);
4940
4941 VOID MlmeAutoScan(
4942         IN PRTMP_ADAPTER pAd);
4943
4944 VOID MlmeAutoReconnectLastSSID(
4945         IN PRTMP_ADAPTER pAd);
4946
4947 BOOLEAN MlmeValidateSSID(
4948         IN PUCHAR pSsid,
4949         IN UCHAR  SsidLen);
4950
4951 VOID MlmeCheckForRoaming(
4952         IN PRTMP_ADAPTER pAd,
4953         IN ULONG    Now32);
4954
4955 VOID MlmeCheckForFastRoaming(
4956         IN  PRTMP_ADAPTER   pAd,
4957         IN  ULONG           Now);
4958
4959 VOID MlmeDynamicTxRateSwitching(
4960         IN PRTMP_ADAPTER pAd);
4961
4962 VOID MlmeSetTxRate(
4963         IN PRTMP_ADAPTER                pAd,
4964         IN PMAC_TABLE_ENTRY             pEntry,
4965         IN PRTMP_TX_RATE_SWITCH pTxRate);
4966
4967 VOID MlmeSelectTxRateTable(
4968         IN PRTMP_ADAPTER                pAd,
4969         IN PMAC_TABLE_ENTRY             pEntry,
4970         IN PUCHAR                               *ppTable,
4971         IN PUCHAR                               pTableSize,
4972         IN PUCHAR                               pInitTxRateIdx);
4973
4974 VOID MlmeCalculateChannelQuality(
4975         IN PRTMP_ADAPTER pAd,
4976         IN ULONG Now);
4977
4978 VOID MlmeCheckPsmChange(
4979         IN PRTMP_ADAPTER pAd,
4980         IN ULONG    Now32);
4981
4982 VOID MlmeSetPsmBit(
4983         IN PRTMP_ADAPTER pAd,
4984         IN USHORT psm);
4985
4986 VOID MlmeSetTxPreamble(
4987         IN PRTMP_ADAPTER pAd,
4988         IN USHORT TxPreamble);
4989
4990 VOID UpdateBasicRateBitmap(
4991         IN      PRTMP_ADAPTER   pAd);
4992
4993 VOID MlmeUpdateTxRates(
4994         IN PRTMP_ADAPTER        pAd,
4995         IN      BOOLEAN                 bLinkUp,
4996         IN      UCHAR                   apidx);
4997
4998 #ifdef DOT11_N_SUPPORT
4999 VOID MlmeUpdateHtTxRates(
5000         IN PRTMP_ADAPTER                pAd,
5001         IN      UCHAR                           apidx);
5002 #endif // DOT11_N_SUPPORT //
5003
5004 VOID    RTMPCheckRates(
5005         IN      PRTMP_ADAPTER   pAd,
5006         IN OUT  UCHAR           SupRate[],
5007         IN OUT  UCHAR           *SupRateLen);
5008
5009 #ifdef CONFIG_STA_SUPPORT
5010 BOOLEAN RTMPCheckChannel(
5011         IN PRTMP_ADAPTER pAd,
5012         IN UCHAR                CentralChannel,
5013         IN UCHAR                Channel);
5014 #endif // CONFIG_STA_SUPPORT //
5015
5016 BOOLEAN         RTMPCheckHt(
5017         IN              PRTMP_ADAPTER   pAd,
5018         IN              UCHAR   Wcid,
5019         IN OUT  HT_CAPABILITY_IE                        *pHtCapability,
5020         IN OUT  ADD_HT_INFO_IE                  *pAddHtInfo);
5021
5022 VOID StaQuickResponeForRateUpExec(
5023         IN PVOID SystemSpecific1,
5024         IN PVOID FunctionContext,
5025         IN PVOID SystemSpecific2,
5026         IN PVOID SystemSpecific3);
5027
5028 VOID AsicBbpTuning1(
5029         IN PRTMP_ADAPTER pAd);
5030
5031 VOID AsicBbpTuning2(
5032         IN PRTMP_ADAPTER pAd);
5033
5034 VOID RTMPUpdateMlmeRate(
5035         IN PRTMP_ADAPTER        pAd);
5036
5037 CHAR RTMPMaxRssi(
5038         IN PRTMP_ADAPTER        pAd,
5039         IN CHAR                         Rssi0,
5040         IN CHAR                         Rssi1,
5041         IN CHAR                         Rssi2);
5042
5043 VOID AsicEvaluateRxAnt(
5044         IN PRTMP_ADAPTER        pAd);
5045
5046 VOID AsicRxAntEvalTimeout(
5047         IN PVOID SystemSpecific1,
5048         IN PVOID FunctionContext,
5049         IN PVOID SystemSpecific2,
5050         IN PVOID SystemSpecific3);
5051
5052 VOID APSDPeriodicExec(
5053         IN PVOID SystemSpecific1,
5054         IN PVOID FunctionContext,
5055         IN PVOID SystemSpecific2,
5056         IN PVOID SystemSpecific3);
5057
5058 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5059         IN PRTMP_ADAPTER    pAd,
5060         IN PMAC_TABLE_ENTRY     pEntry);
5061
5062 UCHAR RTMPStaFixedTxMode(
5063         IN PRTMP_ADAPTER    pAd,
5064         IN PMAC_TABLE_ENTRY     pEntry);
5065
5066 VOID RTMPUpdateLegacyTxSetting(
5067                 UCHAR                           fixed_tx_mode,
5068                 PMAC_TABLE_ENTRY        pEntry);
5069
5070 BOOLEAN RTMPAutoRateSwitchCheck(
5071         IN PRTMP_ADAPTER    pAd);
5072
5073 NDIS_STATUS MlmeInit(
5074         IN  PRTMP_ADAPTER   pAd);
5075
5076 VOID MlmeHandler(
5077         IN  PRTMP_ADAPTER   pAd);
5078
5079 VOID MlmeHalt(
5080         IN  PRTMP_ADAPTER   pAd);
5081
5082 VOID MlmeResetRalinkCounters(
5083         IN  PRTMP_ADAPTER   pAd);
5084
5085 VOID BuildChannelList(
5086         IN PRTMP_ADAPTER pAd);
5087
5088 UCHAR FirstChannel(
5089         IN  PRTMP_ADAPTER   pAd);
5090
5091 UCHAR NextChannel(
5092         IN  PRTMP_ADAPTER   pAd,
5093         IN  UCHAR channel);
5094
5095 VOID ChangeToCellPowerLimit(
5096         IN PRTMP_ADAPTER pAd,
5097         IN UCHAR         AironetCellPowerLimit);
5098
5099 VOID RaiseClock(
5100         IN  PRTMP_ADAPTER   pAd,
5101         IN  UINT32 *x);
5102
5103 VOID LowerClock(
5104         IN  PRTMP_ADAPTER   pAd,
5105         IN  UINT32 *x);
5106
5107 USHORT ShiftInBits(
5108         IN  PRTMP_ADAPTER   pAd);
5109
5110 VOID ShiftOutBits(
5111         IN  PRTMP_ADAPTER   pAd,
5112         IN  USHORT data,
5113         IN  USHORT count);
5114
5115 VOID EEpromCleanup(
5116         IN  PRTMP_ADAPTER   pAd);
5117
5118 VOID EWDS(
5119         IN  PRTMP_ADAPTER   pAd);
5120
5121 VOID EWEN(
5122         IN  PRTMP_ADAPTER   pAd);
5123
5124 USHORT RTMP_EEPROM_READ16(
5125         IN  PRTMP_ADAPTER   pAd,
5126         IN  USHORT Offset);
5127
5128 VOID RTMP_EEPROM_WRITE16(
5129         IN  PRTMP_ADAPTER   pAd,
5130         IN  USHORT Offset,
5131         IN  USHORT Data);
5132
5133 //
5134 // Prototypes of function definition in rtmp_tkip.c
5135 //
5136 VOID    RTMPInitTkipEngine(
5137         IN  PRTMP_ADAPTER   pAd,
5138         IN  PUCHAR          pTKey,
5139         IN  UCHAR           KeyId,
5140         IN  PUCHAR          pTA,
5141         IN  PUCHAR          pMICKey,
5142         IN  PUCHAR          pTSC,
5143         OUT PULONG          pIV16,
5144         OUT PULONG          pIV32);
5145
5146 VOID    RTMPInitMICEngine(
5147         IN  PRTMP_ADAPTER   pAd,
5148         IN  PUCHAR          pKey,
5149         IN  PUCHAR          pDA,
5150         IN  PUCHAR          pSA,
5151         IN  UCHAR           UserPriority,
5152         IN  PUCHAR          pMICKey);
5153
5154 BOOLEAN RTMPTkipCompareMICValue(
5155         IN  PRTMP_ADAPTER   pAd,
5156         IN  PUCHAR          pSrc,
5157         IN  PUCHAR          pDA,
5158         IN  PUCHAR          pSA,
5159         IN  PUCHAR          pMICKey,
5160         IN      UCHAR                   UserPriority,
5161         IN  UINT            Len);
5162
5163 VOID    RTMPCalculateMICValue(
5164         IN  PRTMP_ADAPTER   pAd,
5165         IN  PNDIS_PACKET    pPacket,
5166         IN  PUCHAR          pEncap,
5167         IN  PCIPHER_KEY     pKey,
5168         IN      UCHAR                   apidx);
5169
5170 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5171         IN  PRTMP_ADAPTER   pAd,
5172         IN  PUCHAR          pLLC,
5173         IN  PUCHAR          pSrc,
5174         IN  PUCHAR          pDA,
5175         IN  PUCHAR          pSA,
5176         IN  PUCHAR          pMICKey,
5177         IN  UINT            Len);
5178
5179 VOID    RTMPTkipAppendByte(
5180         IN  PTKIP_KEY_INFO  pTkip,
5181         IN  UCHAR           uChar);
5182
5183 VOID    RTMPTkipAppend(
5184         IN  PTKIP_KEY_INFO  pTkip,
5185         IN  PUCHAR          pSrc,
5186         IN  UINT            nBytes);
5187
5188 VOID    RTMPTkipGetMIC(
5189         IN  PTKIP_KEY_INFO  pTkip);
5190
5191 BOOLEAN RTMPSoftDecryptTKIP(
5192         IN PRTMP_ADAPTER pAd,
5193         IN PUCHAR       pData,
5194         IN ULONG        DataByteCnt,
5195         IN UCHAR    UserPriority,
5196         IN PCIPHER_KEY  pWpaKey);
5197
5198 BOOLEAN RTMPSoftDecryptAES(
5199         IN PRTMP_ADAPTER pAd,
5200         IN PUCHAR       pData,
5201         IN ULONG        DataByteCnt,
5202         IN PCIPHER_KEY  pWpaKey);
5203
5204 //
5205 // Prototypes of function definition in cmm_info.c
5206 //
5207 NDIS_STATUS RTMPWPARemoveKeyProc(
5208         IN  PRTMP_ADAPTER   pAd,
5209         IN  PVOID           pBuf);
5210
5211 VOID    RTMPWPARemoveAllKeys(
5212         IN  PRTMP_ADAPTER   pAd);
5213
5214 BOOLEAN RTMPCheckStrPrintAble(
5215     IN  CHAR *pInPutStr,
5216     IN  UCHAR strLen);
5217
5218 VOID    RTMPSetPhyMode(
5219         IN  PRTMP_ADAPTER   pAd,
5220         IN  ULONG phymode);
5221
5222 VOID    RTMPUpdateHTIE(
5223         IN      RT_HT_CAPABILITY        *pRtHt,
5224         IN              UCHAR                           *pMcsSet,
5225         OUT             HT_CAPABILITY_IE *pHtCapability,
5226         OUT             ADD_HT_INFO_IE          *pAddHtInfo);
5227
5228 VOID    RTMPAddWcidAttributeEntry(
5229         IN      PRTMP_ADAPTER   pAd,
5230         IN      UCHAR                   BssIdx,
5231         IN      UCHAR                   KeyIdx,
5232         IN      UCHAR                   CipherAlg,
5233         IN      MAC_TABLE_ENTRY *pEntry);
5234
5235 CHAR *GetEncryptType(
5236         CHAR enc);
5237
5238 CHAR *GetAuthMode(
5239         CHAR auth);
5240
5241 VOID RTMPIoctlGetSiteSurvey(
5242         IN      PRTMP_ADAPTER   pAdapter,
5243         IN      struct iwreq    *wrq);
5244
5245 VOID RTMPIoctlGetMacTable(
5246         IN PRTMP_ADAPTER pAd,
5247         IN struct iwreq *wrq);
5248
5249 VOID RTMPIndicateWPA2Status(
5250         IN  PRTMP_ADAPTER  pAdapter);
5251
5252 VOID    RTMPOPModeSwitching(
5253         IN      PRTMP_ADAPTER   pAd);
5254
5255 #ifdef CONFIG_STA_SUPPORT
5256 VOID    RTMPAddBSSIDCipher(
5257     IN  PRTMP_ADAPTER   pAd,
5258         IN      UCHAR   Aid,
5259     IN  PNDIS_802_11_KEY    pKey,
5260     IN  UCHAR   CipherAlg);
5261 #endif // CONFIG_STA_SUPPORT //
5262
5263 #ifdef DOT11_N_SUPPORT
5264 VOID    RTMPSetHT(
5265         IN      PRTMP_ADAPTER   pAd,
5266         IN      OID_SET_HT_PHYMODE *pHTPhyMode);
5267
5268 VOID    RTMPSetIndividualHT(
5269         IN      PRTMP_ADAPTER           pAd,
5270         IN      UCHAR                           apidx);
5271 #endif // DOT11_N_SUPPORT //
5272
5273 VOID RTMPSendWirelessEvent(
5274         IN      PRTMP_ADAPTER   pAd,
5275         IN      USHORT                  Event_flag,
5276         IN      PUCHAR                  pAddr,
5277         IN  UCHAR                       BssIdx,
5278         IN      CHAR                    Rssi);
5279
5280 VOID    NICUpdateCntlCounters(
5281         IN      PRTMP_ADAPTER   pAd,
5282         IN      PHEADER_802_11  pHeader,
5283         IN    UCHAR                     SubType,
5284         IN      PRXWI_STRUC     pRxWI);
5285 //
5286 // prototype in wpa.c
5287 //
5288 BOOLEAN WpaMsgTypeSubst(
5289         IN  UCHAR   EAPType,
5290         OUT INT         *MsgType);
5291
5292 VOID WpaPskStateMachineInit(
5293         IN  PRTMP_ADAPTER       pAd,
5294         IN  STATE_MACHINE       *S,
5295         OUT STATE_MACHINE_FUNC Trans[]);
5296
5297 VOID WpaEAPOLKeyAction(
5298         IN  PRTMP_ADAPTER   pAd,
5299         IN  MLME_QUEUE_ELEM *Elem);
5300
5301 VOID    WpaPairMsg1Action(
5302         IN  PRTMP_ADAPTER   pAd,
5303         IN  MLME_QUEUE_ELEM *Elem);
5304
5305 VOID    WpaPairMsg3Action(
5306         IN  PRTMP_ADAPTER   pAd,
5307         IN  MLME_QUEUE_ELEM *Elem);
5308
5309 VOID    WpaGroupMsg1Action(
5310         IN  PRTMP_ADAPTER   pAd,
5311         IN  MLME_QUEUE_ELEM *Elem);
5312
5313 VOID    WpaMacHeaderInit(
5314         IN      PRTMP_ADAPTER   pAd,
5315         IN OUT  PHEADER_802_11  pHdr80211,
5316         IN      UCHAR           wep,
5317         IN      PUCHAR          pAddr1);
5318
5319 VOID    Wpa2PairMsg1Action(
5320     IN  PRTMP_ADAPTER   pAd,
5321     IN  MLME_QUEUE_ELEM *Elem);
5322
5323 VOID    Wpa2PairMsg3Action(
5324     IN  PRTMP_ADAPTER   pAd,
5325     IN  MLME_QUEUE_ELEM *Elem);
5326
5327 BOOLEAN ParseKeyData(
5328     IN  PRTMP_ADAPTER   pAd,
5329     IN  PUCHAR          pKeyData,
5330     IN  UCHAR           KeyDataLen,
5331         IN      UCHAR                   bPairewise);
5332
5333 VOID    RTMPToWirelessSta(
5334         IN  PRTMP_ADAPTER   pAd,
5335         IN  PUCHAR          pHeader802_3,
5336     IN  UINT            HdrLen,
5337         IN  PUCHAR          pData,
5338     IN  UINT            DataLen,
5339     IN  BOOLEAN                 is4wayFrame);
5340
5341 VOID    HMAC_SHA1(
5342         IN  UCHAR   *text,
5343         IN  UINT    text_len,
5344         IN  UCHAR   *key,
5345         IN  UINT    key_len,
5346         IN  UCHAR   *digest);
5347
5348 VOID    PRF(
5349         IN  UCHAR   *key,
5350         IN  INT     key_len,
5351         IN  UCHAR   *prefix,
5352         IN  INT     prefix_len,
5353         IN  UCHAR   *data,
5354         IN  INT     data_len,
5355         OUT UCHAR   *output,
5356         IN  INT     len);
5357
5358 VOID    CCKMPRF(
5359         IN  UCHAR   *key,
5360         IN  INT     key_len,
5361         IN  UCHAR   *data,
5362         IN  INT     data_len,
5363         OUT UCHAR   *output,
5364         IN  INT     len);
5365
5366 VOID WpaCountPTK(
5367         IN  PRTMP_ADAPTER   pAd,
5368         IN  UCHAR   *PMK,
5369         IN  UCHAR   *ANonce,
5370         IN  UCHAR   *AA,
5371         IN  UCHAR   *SNonce,
5372         IN  UCHAR   *SA,
5373         OUT UCHAR   *output,
5374         IN  UINT    len);
5375
5376 VOID    GenRandom(
5377         IN  PRTMP_ADAPTER   pAd,
5378         IN      UCHAR                   *macAddr,
5379         OUT     UCHAR                   *random);
5380
5381 //
5382 // prototype in aironet.c
5383 //
5384 VOID    AironetStateMachineInit(
5385         IN  PRTMP_ADAPTER       pAd,
5386         IN  STATE_MACHINE       *S,
5387         OUT STATE_MACHINE_FUNC  Trans[]);
5388
5389 VOID    AironetMsgAction(
5390         IN  PRTMP_ADAPTER   pAd,
5391         IN  MLME_QUEUE_ELEM *Elem);
5392
5393 VOID    AironetRequestAction(
5394         IN  PRTMP_ADAPTER   pAd,
5395         IN  MLME_QUEUE_ELEM *Elem);
5396
5397 VOID    ChannelLoadRequestAction(
5398         IN  PRTMP_ADAPTER   pAd,
5399         IN  UCHAR           Index);
5400
5401 VOID    NoiseHistRequestAction(
5402         IN  PRTMP_ADAPTER   pAd,
5403         IN  UCHAR           Index);
5404
5405 VOID    BeaconRequestAction(
5406         IN  PRTMP_ADAPTER   pAd,
5407         IN  UCHAR           Index);
5408
5409 VOID    AironetReportAction(
5410         IN  PRTMP_ADAPTER   pAd,
5411         IN  MLME_QUEUE_ELEM *Elem);
5412
5413 VOID    ChannelLoadReportAction(
5414         IN  PRTMP_ADAPTER   pAd,
5415         IN  UCHAR           Index);
5416
5417 VOID    NoiseHistReportAction(
5418         IN  PRTMP_ADAPTER   pAd,
5419         IN  UCHAR           Index);
5420
5421 VOID    AironetFinalReportAction(
5422         IN  PRTMP_ADAPTER   pAd);
5423
5424 VOID    BeaconReportAction(
5425         IN  PRTMP_ADAPTER   pAd,
5426         IN  UCHAR           Index);
5427
5428 VOID    AironetAddBeaconReport(
5429         IN  PRTMP_ADAPTER       pAd,
5430         IN  ULONG               Index,
5431         IN  PMLME_QUEUE_ELEM    pElem);
5432
5433 VOID    AironetCreateBeaconReportFromBssTable(
5434         IN  PRTMP_ADAPTER       pAd);
5435
5436 VOID    DBGPRINT_TX_RING(
5437         IN PRTMP_ADAPTER  pAd,
5438         IN UCHAR          QueIdx);
5439
5440 VOID DBGPRINT_RX_RING(
5441         IN PRTMP_ADAPTER  pAd);
5442
5443 CHAR    ConvertToRssi(
5444         IN PRTMP_ADAPTER  pAd,
5445         IN CHAR                         Rssi,
5446         IN UCHAR    RssiNumber);
5447
5448
5449 #ifdef DOT11N_DRAFT3
5450 VOID BuildEffectedChannelList(
5451         IN PRTMP_ADAPTER pAd);
5452 #endif // DOT11N_DRAFT3 //
5453
5454
5455 VOID APAsicEvaluateRxAnt(
5456         IN PRTMP_ADAPTER        pAd);
5457
5458
5459 VOID APAsicRxAntEvalTimeout(
5460         IN PRTMP_ADAPTER        pAd);
5461
5462 //
5463 // function prototype in cmm_wpa.c
5464 //
5465 BOOLEAN RTMPCheckWPAframe(
5466         IN PRTMP_ADAPTER pAd,
5467         IN PMAC_TABLE_ENTRY     pEntry,
5468         IN PUCHAR                       pData,
5469         IN ULONG                        DataByteCount,
5470         IN UCHAR                        FromWhichBSSID);
5471
5472 VOID AES_GTK_KEY_UNWRAP(
5473         IN  UCHAR   *key,
5474         OUT UCHAR   *plaintext,
5475         IN      UCHAR   c_len,
5476         IN  UCHAR   *ciphertext);
5477
5478 BOOLEAN RTMPCheckRSNIE(
5479         IN  PRTMP_ADAPTER   pAd,
5480         IN  PUCHAR          pData,
5481         IN  UCHAR           DataLen,
5482         IN  MAC_TABLE_ENTRY *pEntry,
5483         OUT     UCHAR                   *Offset);
5484
5485 BOOLEAN RTMPParseEapolKeyData(
5486         IN  PRTMP_ADAPTER   pAd,
5487         IN  PUCHAR          pKeyData,
5488         IN  UCHAR           KeyDataLen,
5489         IN      UCHAR                   GroupKeyIndex,
5490         IN      UCHAR                   MsgType,
5491         IN      BOOLEAN                 bWPA2,
5492         IN  MAC_TABLE_ENTRY *pEntry);
5493
5494 VOID    ConstructEapolMsg(
5495         IN      PRTMP_ADAPTER           pAd,
5496     IN  UCHAR                           PeerAuthMode,
5497     IN  UCHAR                           PeerWepStatus,
5498     IN  UCHAR                           MyGroupKeyWepStatus,
5499     IN  UCHAR                           MsgType,
5500     IN  UCHAR                           DefaultKeyIdx,
5501     IN  UCHAR                           *ReplayCounter,
5502         IN      UCHAR                           *KeyNonce,
5503         IN      UCHAR                           *TxRSC,
5504         IN      UCHAR                           *PTK,
5505         IN      UCHAR                           *GTK,
5506         IN      UCHAR                           *RSNIE,
5507         IN      UCHAR                           RSNIE_Len,
5508     OUT PEAPOL_PACKET       pMsg);
5509
5510 VOID    CalculateMIC(
5511         IN      PRTMP_ADAPTER   pAd,
5512         IN      UCHAR                   PeerWepStatus,
5513         IN      UCHAR                   *PTK,
5514         OUT PEAPOL_PACKET   pMsg);
5515
5516 NDIS_STATUS     RTMPSoftDecryptBroadCastData(
5517         IN      PRTMP_ADAPTER                                   pAd,
5518         IN      RX_BLK                                                  *pRxBlk,
5519         IN  NDIS_802_11_ENCRYPTION_STATUS       GroupCipher,
5520         IN  PCIPHER_KEY                                         pShard_key);
5521
5522 VOID    ConstructEapolKeyData(
5523         IN      PRTMP_ADAPTER   pAd,
5524         IN      UCHAR                   PeerAuthMode,
5525         IN      UCHAR                   PeerWepStatus,
5526         IN      UCHAR                   GroupKeyWepStatus,
5527         IN      UCHAR                   MsgType,
5528         IN      UCHAR                   DefaultKeyIdx,
5529         IN      BOOLEAN                 bWPA2Capable,
5530         IN      UCHAR                   *PTK,
5531         IN      UCHAR                   *GTK,
5532         IN      UCHAR                   *RSNIE,
5533         IN      UCHAR                   RSNIE_LEN,
5534         OUT PEAPOL_PACKET   pMsg);
5535
5536 VOID RTMPMakeRSNIE(
5537         IN  PRTMP_ADAPTER   pAd,
5538         IN  UINT            AuthMode,
5539         IN  UINT            WepStatus,
5540         IN      UCHAR                   apidx);
5541
5542 //
5543 // function prototype in ap_wpa.c
5544 //
5545
5546 BOOLEAN APWpaMsgTypeSubst(
5547         IN UCHAR    EAPType,
5548         OUT INT *MsgType) ;
5549
5550 MAC_TABLE_ENTRY *PACInquiry(
5551         IN  PRTMP_ADAPTER   pAd,
5552         IN  ULONG           Wcid);
5553
5554 BOOLEAN RTMPCheckMcast(
5555         IN PRTMP_ADAPTER pAd,
5556         IN PEID_STRUCT      eid_ptr,
5557         IN MAC_TABLE_ENTRY  *pEntry);
5558
5559 BOOLEAN RTMPCheckUcast(
5560         IN PRTMP_ADAPTER pAd,
5561         IN PEID_STRUCT      eid_ptr,
5562         IN MAC_TABLE_ENTRY  *pEntry);
5563
5564 BOOLEAN RTMPCheckAUTH(
5565         IN PRTMP_ADAPTER pAd,
5566         IN PEID_STRUCT      eid_ptr,
5567         IN MAC_TABLE_ENTRY  *pEntry);
5568
5569 VOID WPAStart4WayHS(
5570         IN  PRTMP_ADAPTER   pAd,
5571         IN  MAC_TABLE_ENTRY *pEntry,
5572         IN      ULONG                   TimeInterval);
5573
5574 VOID WPAStart2WayGroupHS(
5575         IN  PRTMP_ADAPTER   pAd,
5576         IN  MAC_TABLE_ENTRY *pEntry);
5577
5578 VOID APWpaEAPPacketAction(
5579         IN PRTMP_ADAPTER pAd,
5580         IN MLME_QUEUE_ELEM *Elem);
5581
5582 VOID APWpaEAPOLStartAction(
5583         IN PRTMP_ADAPTER pAd,
5584         IN MLME_QUEUE_ELEM *Elem);
5585
5586 VOID APWpaEAPOLLogoffAction(
5587         IN PRTMP_ADAPTER pAd,
5588         IN MLME_QUEUE_ELEM *Elem);
5589
5590 VOID APWpaEAPOLKeyAction(
5591         IN PRTMP_ADAPTER pAd,
5592         IN MLME_QUEUE_ELEM *Elem);
5593
5594 VOID APWpaEAPOLASFAlertAction(
5595         IN  PRTMP_ADAPTER    pAd,
5596         IN  MLME_QUEUE_ELEM  *Elem);
5597
5598 VOID HandleCounterMeasure(
5599         IN PRTMP_ADAPTER pAd,
5600         IN MAC_TABLE_ENTRY  *pEntry);
5601
5602 VOID PeerPairMsg2Action(
5603         IN PRTMP_ADAPTER pAd,
5604         IN MAC_TABLE_ENTRY  *pEntry,
5605         IN MLME_QUEUE_ELEM *Elem);
5606
5607 VOID PeerPairMsg4Action(
5608         IN PRTMP_ADAPTER pAd,
5609         IN MAC_TABLE_ENTRY  *pEntry,
5610         IN MLME_QUEUE_ELEM *Elem);
5611
5612 VOID CMTimerExec(
5613         IN PVOID SystemSpecific1,
5614         IN PVOID FunctionContext,
5615         IN PVOID SystemSpecific2,
5616         IN PVOID SystemSpecific3);
5617
5618 VOID WPARetryExec(
5619         IN PVOID SystemSpecific1,
5620         IN PVOID FunctionContext,
5621         IN PVOID SystemSpecific2,
5622         IN PVOID SystemSpecific3);
5623
5624 VOID EnqueueStartForPSKExec(
5625     IN PVOID SystemSpecific1,
5626     IN PVOID FunctionContext,
5627     IN PVOID SystemSpecific2,
5628     IN PVOID SystemSpecific3);
5629
5630 VOID RTMPHandleSTAKey(
5631     IN PRTMP_ADAPTER    pAdapter,
5632     IN MAC_TABLE_ENTRY  *pEntry,
5633     IN MLME_QUEUE_ELEM  *Elem);
5634
5635 VOID PeerGroupMsg2Action(
5636         IN  PRTMP_ADAPTER    pAd,
5637         IN  PMAC_TABLE_ENTRY pEntry,
5638         IN  VOID             *Msg,
5639         IN  UINT             MsgLen);
5640
5641 VOID PairDisAssocAction(
5642         IN  PRTMP_ADAPTER    pAd,
5643         IN  PMAC_TABLE_ENTRY pEntry,
5644         IN  USHORT           Reason);
5645
5646 VOID MlmeDeAuthAction(
5647         IN  PRTMP_ADAPTER    pAd,
5648         IN  PMAC_TABLE_ENTRY pEntry,
5649         IN  USHORT           Reason);
5650
5651 VOID GREKEYPeriodicExec(
5652         IN  PVOID   SystemSpecific1,
5653         IN  PVOID   FunctionContext,
5654         IN  PVOID   SystemSpecific2,
5655         IN  PVOID   SystemSpecific3);
5656
5657 VOID CountGTK(
5658         IN  UCHAR   *PMK,
5659         IN  UCHAR   *GNonce,
5660         IN  UCHAR   *AA,
5661         OUT UCHAR   *output,
5662         IN  UINT    len);
5663
5664 VOID    GetSmall(
5665         IN  PVOID   pSrc1,
5666         IN  PVOID   pSrc2,
5667         OUT PUCHAR  out,
5668         IN  ULONG   Length);
5669
5670 VOID    GetLarge(
5671         IN  PVOID   pSrc1,
5672         IN  PVOID   pSrc2,
5673         OUT PUCHAR  out,
5674         IN  ULONG   Length);
5675
5676 VOID APGenRandom(
5677         IN PRTMP_ADAPTER pAd,
5678         OUT UCHAR       *random);
5679
5680 VOID AES_GTK_KEY_WRAP(
5681         IN UCHAR *key,
5682         IN UCHAR *plaintext,
5683         IN UCHAR p_len,
5684         OUT UCHAR *ciphertext);
5685
5686 VOID    WpaSend(
5687     IN  PRTMP_ADAPTER   pAdapter,
5688     IN  PUCHAR          pPacket,
5689     IN  ULONG           Len);
5690
5691 VOID    APToWirelessSta(
5692         IN  PRTMP_ADAPTER   pAd,
5693         IN  MAC_TABLE_ENTRY *pEntry,
5694         IN  PUCHAR          pHeader802_3,
5695         IN  UINT            HdrLen,
5696         IN  PUCHAR          pData,
5697         IN  UINT            DataLen,
5698     IN  BOOLEAN                 bClearFrame);
5699
5700 VOID RTMPAddPMKIDCache(
5701         IN  PRTMP_ADAPTER               pAd,
5702         IN      INT                                             apidx,
5703         IN      PUCHAR                          pAddr,
5704         IN      UCHAR                                   *PMKID,
5705         IN      UCHAR                                   *PMK);
5706
5707 INT RTMPSearchPMKIDCache(
5708         IN  PRTMP_ADAPTER   pAd,
5709         IN      INT                             apidx,
5710         IN      PUCHAR          pAddr);
5711
5712 VOID RTMPDeletePMKIDCache(
5713         IN  PRTMP_ADAPTER   pAd,
5714         IN      INT                             apidx,
5715         IN  INT                         idx);
5716
5717 VOID RTMPMaintainPMKIDCache(
5718         IN  PRTMP_ADAPTER   pAd);
5719
5720 VOID    RTMPSendTriggerFrame(
5721         IN      PRTMP_ADAPTER   pAd,
5722         IN      PVOID                   pBuffer,
5723         IN      ULONG                   Length,
5724         IN  UCHAR           TxRate,
5725         IN      BOOLEAN                 bQosNull);
5726
5727
5728 /* timeout -- ms */
5729 VOID RTMP_SetPeriodicTimer(
5730         IN      NDIS_MINIPORT_TIMER *pTimer,
5731         IN      unsigned long timeout);
5732
5733 VOID RTMP_OS_Init_Timer(
5734         IN      PRTMP_ADAPTER pAd,
5735         IN      NDIS_MINIPORT_TIMER *pTimer,
5736         IN      TIMER_FUNCTION function,
5737         IN      PVOID data);
5738
5739 VOID RTMP_OS_Add_Timer(
5740         IN      NDIS_MINIPORT_TIMER     *pTimer,
5741         IN      unsigned long timeout);
5742
5743 VOID RTMP_OS_Mod_Timer(
5744         IN      NDIS_MINIPORT_TIMER     *pTimer,
5745         IN      unsigned long timeout);
5746
5747
5748 VOID RTMP_OS_Del_Timer(
5749         IN      NDIS_MINIPORT_TIMER     *pTimer,
5750         OUT     BOOLEAN                          *pCancelled);
5751
5752
5753 VOID RTMP_OS_Release_Packet(
5754         IN      PRTMP_ADAPTER pAd,
5755         IN      PQUEUE_ENTRY  pEntry);
5756
5757 VOID RTMPusecDelay(
5758         IN      ULONG   usec);
5759
5760 NDIS_STATUS os_alloc_mem(
5761         IN      PRTMP_ADAPTER pAd,
5762         OUT     PUCHAR *mem,
5763         IN      ULONG  size);
5764
5765 NDIS_STATUS os_free_mem(
5766         IN      PRTMP_ADAPTER pAd,
5767         IN      PUCHAR mem);
5768
5769
5770 void RTMP_AllocateSharedMemory(
5771         IN      PRTMP_ADAPTER pAd,
5772         IN      ULONG   Length,
5773         IN      BOOLEAN Cached,
5774         OUT     PVOID   *VirtualAddress,
5775         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5776
5777 VOID RTMPFreeTxRxRingMemory(
5778     IN  PRTMP_ADAPTER   pAd);
5779
5780 NDIS_STATUS AdapterBlockAllocateMemory(
5781         IN PVOID        handle,
5782         OUT     PVOID   *ppAd);
5783
5784 void RTMP_AllocateTxDescMemory(
5785         IN      PRTMP_ADAPTER pAd,
5786         IN      UINT    Index,
5787         IN      ULONG   Length,
5788         IN      BOOLEAN Cached,
5789         OUT     PVOID   *VirtualAddress,
5790         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5791
5792 void RTMP_AllocateFirstTxBuffer(
5793         IN      PRTMP_ADAPTER pAd,
5794         IN      UINT    Index,
5795         IN      ULONG   Length,
5796         IN      BOOLEAN Cached,
5797         OUT     PVOID   *VirtualAddress,
5798         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5799
5800 void RTMP_AllocateMgmtDescMemory(
5801         IN      PRTMP_ADAPTER pAd,
5802         IN      ULONG   Length,
5803         IN      BOOLEAN Cached,
5804         OUT     PVOID   *VirtualAddress,
5805         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5806
5807 void RTMP_AllocateRxDescMemory(
5808         IN      PRTMP_ADAPTER pAd,
5809         IN      ULONG   Length,
5810         IN      BOOLEAN Cached,
5811         OUT     PVOID   *VirtualAddress,
5812         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5813
5814 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5815         IN      PRTMP_ADAPTER pAd,
5816         IN      ULONG   Length,
5817         IN      BOOLEAN Cached,
5818         OUT     PVOID   *VirtualAddress,
5819         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5820
5821 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5822         IN      PRTMP_ADAPTER pAd,
5823         IN      ULONG   Length,
5824         IN      BOOLEAN Cached,
5825         OUT     PVOID   *VirtualAddress);
5826
5827 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5828         IN      PRTMP_ADAPTER pAd,
5829         IN      ULONG   Length);
5830
5831 void RTMP_QueryPacketInfo(
5832         IN  PNDIS_PACKET pPacket,
5833         OUT PACKET_INFO  *pPacketInfo,
5834         OUT PUCHAR               *pSrcBufVA,
5835         OUT     UINT             *pSrcBufLen);
5836
5837 void RTMP_QueryNextPacketInfo(
5838         IN  PNDIS_PACKET *ppPacket,
5839         OUT PACKET_INFO  *pPacketInfo,
5840         OUT PUCHAR               *pSrcBufVA,
5841         OUT     UINT             *pSrcBufLen);
5842
5843
5844 BOOLEAN RTMP_FillTxBlkInfo(
5845         IN RTMP_ADAPTER *pAd,
5846         IN TX_BLK *pTxBlk);
5847
5848
5849 PRTMP_SCATTER_GATHER_LIST
5850 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5851
5852
5853  void announce_802_3_packet(
5854         IN      PRTMP_ADAPTER   pAd,
5855         IN      PNDIS_PACKET    pPacket);
5856
5857
5858 UINT BA_Reorder_AMSDU_Annnounce(
5859         IN      PRTMP_ADAPTER   pAd,
5860         IN      PNDIS_PACKET    pPacket);
5861
5862
5863 UINT Handle_AMSDU_Packet(
5864         IN      PRTMP_ADAPTER   pAd,
5865         IN      PUCHAR                  pData,
5866         IN      ULONG                   DataSize,
5867         IN  UCHAR                       FromWhichBSSID);
5868
5869
5870 void convert_802_11_to_802_3_packet(
5871         IN      PRTMP_ADAPTER   pAd,
5872         IN      PNDIS_PACKET    pPacket,
5873         IN      PUCHAR                  p8023hdr,
5874         IN      PUCHAR                  pData,
5875         IN      ULONG                   DataSize,
5876         IN  UCHAR                       FromWhichBSSID);
5877
5878
5879 PNET_DEV get_netdev_from_bssid(
5880         IN      PRTMP_ADAPTER   pAd,
5881         IN      UCHAR                   FromWhichBSSID);
5882
5883
5884 PNDIS_PACKET duplicate_pkt(
5885         IN      PRTMP_ADAPTER   pAd,
5886         IN      PUCHAR                  pHeader802_3,
5887     IN  UINT            HdrLen,
5888         IN      PUCHAR                  pData,
5889         IN      ULONG                   DataSize,
5890         IN      UCHAR                   FromWhichBSSID);
5891
5892
5893 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5894         IN      PRTMP_ADAPTER   pAd,
5895         IN      PNDIS_PACKET    pOldPkt);
5896
5897 PNDIS_PACKET duplicate_pkt_with_VLAN(
5898         IN      PRTMP_ADAPTER   pAd,
5899         IN      PUCHAR                  pHeader802_3,
5900     IN  UINT            HdrLen,
5901         IN      PUCHAR                  pData,
5902         IN      ULONG                   DataSize,
5903         IN      UCHAR                   FromWhichBSSID);
5904
5905 PNDIS_PACKET duplicate_pkt_with_WPI(
5906         IN      PRTMP_ADAPTER   pAd,
5907         IN      PNDIS_PACKET    pPacket,
5908         IN      UINT32                  ext_head_len,
5909         IN      UINT32                  ext_tail_len);
5910
5911 UCHAR VLAN_8023_Header_Copy(
5912         IN      PRTMP_ADAPTER   pAd,
5913         IN      PUCHAR                  pHeader802_3,
5914         IN      UINT            HdrLen,
5915         OUT PUCHAR                      pData,
5916         IN      UCHAR                   FromWhichBSSID);
5917
5918 #ifdef DOT11_N_SUPPORT
5919 void ba_flush_reordering_timeout_mpdus(
5920         IN PRTMP_ADAPTER        pAd,
5921         IN PBA_REC_ENTRY        pBAEntry,
5922         IN ULONG                        Now32);
5923
5924
5925 VOID BAOriSessionSetUp(
5926                         IN PRTMP_ADAPTER    pAd,
5927                         IN MAC_TABLE_ENTRY      *pEntry,
5928                         IN UCHAR                        TID,
5929                         IN USHORT                       TimeOut,
5930                         IN ULONG                        DelayTime,
5931                         IN BOOLEAN              isForced);
5932
5933 VOID BASessionTearDownALL(
5934         IN OUT  PRTMP_ADAPTER pAd,
5935         IN              UCHAR Wcid);
5936 #endif // DOT11_N_SUPPORT //
5937
5938 BOOLEAN OS_Need_Clone_Packet(void);
5939
5940
5941 VOID build_tx_packet(
5942         IN      PRTMP_ADAPTER   pAd,
5943         IN      PNDIS_PACKET    pPacket,
5944         IN      PUCHAR  pFrame,
5945         IN      ULONG   FrameLen);
5946
5947
5948 VOID BAOriSessionTearDown(
5949         IN OUT  PRTMP_ADAPTER   pAd,
5950         IN              UCHAR                   Wcid,
5951         IN              UCHAR                   TID,
5952         IN              BOOLEAN                 bPassive,
5953         IN              BOOLEAN                 bForceSend);
5954
5955 VOID BARecSessionTearDown(
5956         IN OUT  PRTMP_ADAPTER   pAd,
5957         IN              UCHAR                   Wcid,
5958         IN              UCHAR                   TID,
5959         IN              BOOLEAN                 bPassive);
5960
5961 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5962 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5963
5964 ULONG AutoChBssInsertEntry(
5965         IN PRTMP_ADAPTER pAd,
5966         IN PUCHAR pBssid,
5967         IN CHAR Ssid[],
5968         IN UCHAR SsidLen,
5969         IN UCHAR ChannelNo,
5970         IN CHAR Rssi);
5971
5972 void AutoChBssTableInit(
5973         IN PRTMP_ADAPTER pAd);
5974
5975 void ChannelInfoInit(
5976         IN PRTMP_ADAPTER pAd);
5977
5978 void AutoChBssTableDestroy(
5979         IN PRTMP_ADAPTER pAd);
5980
5981 void ChannelInfoDestroy(
5982         IN PRTMP_ADAPTER pAd);
5983
5984 UCHAR New_ApAutoSelectChannel(
5985         IN PRTMP_ADAPTER pAd);
5986
5987 BOOLEAN rtstrmactohex(
5988         IN char *s1,
5989         IN char *s2);
5990
5991 BOOLEAN rtstrcasecmp(
5992         IN char *s1,
5993         IN char *s2);
5994
5995 char *rtstrstruncasecmp(
5996         IN char *s1,
5997         IN char *s2);
5998
5999 char    *rtstrstr(
6000         IN      const char * s1,
6001         IN      const char * s2);
6002
6003 char *rstrtok(
6004         IN char * s,
6005         IN const char * ct);
6006
6007 int rtinet_aton(
6008         const char *cp,
6009         unsigned int *addr);
6010
6011 ////////// common ioctl functions //////////
6012 INT Set_DriverVersion_Proc(
6013         IN      PRTMP_ADAPTER   pAd,
6014         IN      PUCHAR                  arg);
6015
6016 INT Set_CountryRegion_Proc(
6017         IN      PRTMP_ADAPTER   pAd,
6018         IN      PUCHAR                  arg);
6019
6020 INT Set_CountryRegionABand_Proc(
6021         IN      PRTMP_ADAPTER   pAd,
6022         IN      PUCHAR                  arg);
6023
6024 INT Set_WirelessMode_Proc(
6025         IN      PRTMP_ADAPTER   pAd,
6026         IN      PUCHAR                  arg);
6027
6028 INT Set_Channel_Proc(
6029         IN      PRTMP_ADAPTER   pAd,
6030         IN      PUCHAR                  arg);
6031
6032 INT     Set_ShortSlot_Proc(
6033         IN      PRTMP_ADAPTER   pAd,
6034         IN      PUCHAR                  arg);
6035
6036 INT     Set_TxPower_Proc(
6037         IN      PRTMP_ADAPTER   pAd,
6038         IN      PUCHAR                  arg);
6039
6040 INT Set_BGProtection_Proc(
6041         IN  PRTMP_ADAPTER               pAd,
6042         IN  PUCHAR                      arg);
6043
6044 INT Set_TxPreamble_Proc(
6045         IN  PRTMP_ADAPTER               pAd,
6046         IN  PUCHAR                      arg);
6047
6048 INT Set_RTSThreshold_Proc(
6049         IN  PRTMP_ADAPTER               pAd,
6050         IN  PUCHAR                      arg);
6051
6052 INT Set_FragThreshold_Proc(
6053         IN  PRTMP_ADAPTER               pAd,
6054         IN  PUCHAR                      arg);
6055
6056 INT Set_TxBurst_Proc(
6057         IN  PRTMP_ADAPTER               pAd,
6058         IN  PUCHAR                      arg);
6059
6060 #ifdef AGGREGATION_SUPPORT
6061 INT     Set_PktAggregate_Proc(
6062         IN  PRTMP_ADAPTER               pAd,
6063         IN  PUCHAR                      arg);
6064 #endif
6065
6066 INT     Set_IEEE80211H_Proc(
6067         IN      PRTMP_ADAPTER   pAd,
6068         IN      PUCHAR                  arg);
6069
6070 #ifdef DBG
6071 INT     Set_Debug_Proc(
6072         IN      PRTMP_ADAPTER   pAd,
6073         IN      PUCHAR                  arg);
6074 #endif
6075
6076 INT     Show_DescInfo_Proc(
6077         IN      PRTMP_ADAPTER   pAd,
6078         IN      PUCHAR                  arg);
6079
6080 INT     Set_ResetStatCounter_Proc(
6081         IN      PRTMP_ADAPTER   pAd,
6082         IN      PUCHAR                  arg);
6083
6084 #ifdef DOT11_N_SUPPORT
6085 INT     Set_BASetup_Proc(
6086         IN      PRTMP_ADAPTER   pAd,
6087         IN      PUCHAR                  arg);
6088
6089 INT     Set_BADecline_Proc(
6090         IN      PRTMP_ADAPTER   pAd,
6091         IN      PUCHAR                  arg);
6092
6093 INT     Set_BAOriTearDown_Proc(
6094         IN      PRTMP_ADAPTER   pAd,
6095         IN      PUCHAR                  arg);
6096
6097 INT     Set_BARecTearDown_Proc(
6098         IN      PRTMP_ADAPTER   pAd,
6099         IN      PUCHAR                  arg);
6100
6101 INT     Set_HtBw_Proc(
6102         IN      PRTMP_ADAPTER   pAd,
6103         IN      PUCHAR                  arg);
6104
6105 INT     Set_HtMcs_Proc(
6106         IN      PRTMP_ADAPTER   pAd,
6107         IN      PUCHAR                  arg);
6108
6109 INT     Set_HtGi_Proc(
6110         IN      PRTMP_ADAPTER   pAd,
6111         IN      PUCHAR                  arg);
6112
6113 INT     Set_HtOpMode_Proc(
6114         IN      PRTMP_ADAPTER   pAd,
6115         IN      PUCHAR                  arg);
6116
6117 INT     Set_HtStbc_Proc(
6118         IN      PRTMP_ADAPTER   pAd,
6119         IN      PUCHAR                  arg);
6120
6121 INT     Set_HtHtc_Proc(
6122         IN      PRTMP_ADAPTER   pAd,
6123         IN      PUCHAR                  arg);
6124
6125 INT     Set_HtExtcha_Proc(
6126         IN      PRTMP_ADAPTER   pAd,
6127         IN      PUCHAR                  arg);
6128
6129 INT     Set_HtMpduDensity_Proc(
6130         IN      PRTMP_ADAPTER   pAd,
6131         IN      PUCHAR                  arg);
6132
6133 INT     Set_HtBaWinSize_Proc(
6134         IN      PRTMP_ADAPTER   pAd,
6135         IN      PUCHAR                  arg);
6136
6137 INT     Set_HtRdg_Proc(
6138         IN      PRTMP_ADAPTER   pAd,
6139         IN      PUCHAR                  arg);
6140
6141 INT     Set_HtLinkAdapt_Proc(
6142         IN      PRTMP_ADAPTER   pAd,
6143         IN      PUCHAR                  arg);
6144
6145 INT     Set_HtAmsdu_Proc(
6146         IN      PRTMP_ADAPTER   pAd,
6147         IN      PUCHAR                  arg);
6148
6149 INT     Set_HtAutoBa_Proc(
6150         IN      PRTMP_ADAPTER   pAd,
6151         IN      PUCHAR                  arg);
6152
6153 INT     Set_HtProtect_Proc(
6154         IN      PRTMP_ADAPTER   pAd,
6155         IN      PUCHAR                  arg);
6156
6157 INT     Set_HtMimoPs_Proc(
6158         IN      PRTMP_ADAPTER   pAd,
6159         IN      PUCHAR                  arg);
6160
6161
6162 INT     Set_ForceShortGI_Proc(
6163         IN      PRTMP_ADAPTER   pAd,
6164         IN      PUCHAR                  arg);
6165
6166 INT     Set_ForceGF_Proc(
6167         IN      PRTMP_ADAPTER   pAd,
6168         IN      PUCHAR                  arg);
6169
6170 INT     SetCommonHT(
6171         IN      PRTMP_ADAPTER   pAd);
6172
6173 INT     Set_SendPSMPAction_Proc(
6174         IN      PRTMP_ADAPTER   pAd,
6175         IN      PUCHAR                  arg);
6176
6177 INT     Set_HtMIMOPSmode_Proc(
6178         IN      PRTMP_ADAPTER   pAd,
6179         IN      PUCHAR                  arg);
6180
6181
6182 INT     Set_HtTxBASize_Proc(
6183         IN      PRTMP_ADAPTER   pAd,
6184         IN      PUCHAR                  arg);
6185 #endif // DOT11_N_SUPPORT //
6186
6187
6188
6189 #ifdef CONFIG_STA_SUPPORT
6190 //Dls , kathy
6191 VOID RTMPSendDLSTearDownFrame(
6192         IN      PRTMP_ADAPTER   pAd,
6193         IN      PUCHAR                  pDA);
6194
6195 #ifdef DOT11_N_SUPPORT
6196 //Block ACK
6197 VOID QueryBATABLE(
6198         IN  PRTMP_ADAPTER pAd,
6199         OUT PQUERYBA_TABLE pBAT);
6200 #endif // DOT11_N_SUPPORT //
6201
6202 #ifdef WPA_SUPPLICANT_SUPPORT
6203 INT         WpaCheckEapCode(
6204         IN  PRTMP_ADAPTER       pAd,
6205         IN  PUCHAR                              pFrame,
6206         IN  USHORT                              FrameLen,
6207         IN  USHORT                              OffSet);
6208
6209 VOID    WpaSendMicFailureToWpaSupplicant(
6210     IN  PRTMP_ADAPTER       pAd,
6211     IN  BOOLEAN             bUnicast);
6212
6213 VOID    SendAssocIEsToWpaSupplicant(
6214     IN  PRTMP_ADAPTER       pAd);
6215 #endif // WPA_SUPPLICANT_SUPPORT //
6216
6217 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6218 int wext_notify_event_assoc(
6219         IN  RTMP_ADAPTER *pAd);
6220 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6221
6222 #endif // CONFIG_STA_SUPPORT //
6223
6224
6225
6226 #ifdef DOT11_N_SUPPORT
6227 VOID Handle_BSS_Width_Trigger_Events(
6228         IN PRTMP_ADAPTER pAd);
6229
6230 void build_ext_channel_switch_ie(
6231         IN PRTMP_ADAPTER pAd,
6232         IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6233 #endif // DOT11_N_SUPPORT //
6234
6235
6236 BOOLEAN APRxDoneInterruptHandle(
6237         IN      PRTMP_ADAPTER   pAd);
6238
6239 BOOLEAN STARxDoneInterruptHandle(
6240         IN      PRTMP_ADAPTER   pAd,
6241         IN      BOOLEAN                 argc);
6242
6243 #ifdef DOT11_N_SUPPORT
6244 // AMPDU packet indication
6245 VOID Indicate_AMPDU_Packet(
6246         IN      PRTMP_ADAPTER   pAd,
6247         IN      RX_BLK                  *pRxBlk,
6248         IN      UCHAR                   FromWhichBSSID);
6249
6250 // AMSDU packet indication
6251 VOID Indicate_AMSDU_Packet(
6252         IN      PRTMP_ADAPTER   pAd,
6253         IN      RX_BLK                  *pRxBlk,
6254         IN      UCHAR                   FromWhichBSSID);
6255 #endif // DOT11_N_SUPPORT //
6256
6257 // Normal legacy Rx packet indication
6258 VOID Indicate_Legacy_Packet(
6259         IN      PRTMP_ADAPTER   pAd,
6260         IN      RX_BLK                  *pRxBlk,
6261         IN      UCHAR                   FromWhichBSSID);
6262
6263 VOID Indicate_EAPOL_Packet(
6264         IN      PRTMP_ADAPTER   pAd,
6265         IN      RX_BLK                  *pRxBlk,
6266         IN      UCHAR                   FromWhichBSSID);
6267
6268 void  update_os_packet_info(
6269         IN      PRTMP_ADAPTER   pAd,
6270         IN      RX_BLK                  *pRxBlk,
6271         IN      UCHAR                   FromWhichBSSID);
6272
6273 void wlan_802_11_to_802_3_packet(
6274         IN      PRTMP_ADAPTER   pAd,
6275         IN      RX_BLK                  *pRxBlk,
6276         IN      PUCHAR                  pHeader802_3,
6277         IN  UCHAR                       FromWhichBSSID);
6278
6279 UINT deaggregate_AMSDU_announce(
6280         IN      PRTMP_ADAPTER   pAd,
6281         PNDIS_PACKET            pPacket,
6282         IN      PUCHAR                  pData,
6283         IN      ULONG                   DataSize);
6284
6285
6286 #ifdef CONFIG_STA_SUPPORT
6287 // remove LLC and get 802_3 Header
6288 #define  RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3)    \
6289 {                                                                                                                                                               \
6290         PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA;                                 \
6291                                                                                                                                                                 \
6292         if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH))                                    \
6293         {                                                                           \
6294                 _pDA = _pRxBlk->pHeader->Addr3;                                         \
6295                 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11);                \
6296         }                                                                           \
6297         else                                                                        \
6298         {                                                                           \
6299                 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA))                               \
6300                 {                                                                       \
6301                         _pDA = _pRxBlk->pHeader->Addr1;                                     \
6302                 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS))                                                                 \
6303                         _pSA = _pRxBlk->pHeader->Addr2;                                                                         \
6304                 else                                                                                                                                    \
6305                         _pSA = _pRxBlk->pHeader->Addr3;                                     \
6306                 }                                                                       \
6307                 else                                                                    \
6308                 {                                                                       \
6309                         _pDA = _pRxBlk->pHeader->Addr1;                                     \
6310                         _pSA = _pRxBlk->pHeader->Addr2;                                     \
6311                 }                                                                       \
6312         }                                                                           \
6313                                                                                                                                                                 \
6314         CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData,                             \
6315                 _pRxBlk->DataSize, _pRemovedLLCSNAP);                                   \
6316 }
6317 #endif // CONFIG_STA_SUPPORT //
6318
6319
6320 BOOLEAN APFowardWirelessStaToWirelessSta(
6321         IN      PRTMP_ADAPTER   pAd,
6322         IN      PNDIS_PACKET    pPacket,
6323         IN      ULONG                   FromWhichBSSID);
6324
6325 VOID Announce_or_Forward_802_3_Packet(
6326         IN      PRTMP_ADAPTER   pAd,
6327         IN      PNDIS_PACKET    pPacket,
6328         IN      UCHAR                   FromWhichBSSID);
6329
6330 VOID Sta_Announce_or_Forward_802_3_Packet(
6331         IN      PRTMP_ADAPTER   pAd,
6332         IN      PNDIS_PACKET    pPacket,
6333         IN      UCHAR                   FromWhichBSSID);
6334
6335
6336 #ifdef CONFIG_STA_SUPPORT
6337 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6338                         Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6339                         //announce_802_3_packet(_pAd, _pPacket);
6340 #endif // CONFIG_STA_SUPPORT //
6341
6342
6343 PNDIS_PACKET DuplicatePacket(
6344         IN      PRTMP_ADAPTER   pAd,
6345         IN      PNDIS_PACKET    pPacket,
6346         IN      UCHAR                   FromWhichBSSID);
6347
6348
6349 PNDIS_PACKET ClonePacket(
6350         IN      PRTMP_ADAPTER   pAd,
6351         IN      PNDIS_PACKET    pPacket,
6352         IN      PUCHAR                  pData,
6353         IN      ULONG                   DataSize);
6354
6355
6356 // Normal, AMPDU or AMSDU
6357 VOID CmmRxnonRalinkFrameIndicate(
6358         IN      PRTMP_ADAPTER   pAd,
6359         IN      RX_BLK                  *pRxBlk,
6360         IN      UCHAR                   FromWhichBSSID);
6361
6362 VOID CmmRxRalinkFrameIndicate(
6363         IN      PRTMP_ADAPTER   pAd,
6364         IN      MAC_TABLE_ENTRY *pEntry,
6365         IN      RX_BLK                  *pRxBlk,
6366         IN      UCHAR                   FromWhichBSSID);
6367
6368 VOID Update_Rssi_Sample(
6369         IN PRTMP_ADAPTER        pAd,
6370         IN RSSI_SAMPLE          *pRssi,
6371         IN PRXWI_STRUC          pRxWI);
6372
6373 PNDIS_PACKET GetPacketFromRxRing(
6374         IN              PRTMP_ADAPTER   pAd,
6375         OUT             PRT28XX_RXD_STRUC               pSaveRxD,
6376         OUT             BOOLEAN                 *pbReschedule,
6377         IN OUT  UINT32                  *pRxPending);
6378
6379 PNDIS_PACKET RTMPDeFragmentDataFrame(
6380         IN      PRTMP_ADAPTER   pAd,
6381         IN      RX_BLK                  *pRxBlk);
6382
6383 ////////////////////////////////////////
6384
6385 #ifdef CONFIG_STA_SUPPORT
6386 enum {
6387         DIDmsg_lnxind_wlansniffrm               = 0x00000044,
6388         DIDmsg_lnxind_wlansniffrm_hosttime      = 0x00010044,
6389         DIDmsg_lnxind_wlansniffrm_mactime       = 0x00020044,
6390         DIDmsg_lnxind_wlansniffrm_channel       = 0x00030044,
6391         DIDmsg_lnxind_wlansniffrm_rssi          = 0x00040044,
6392         DIDmsg_lnxind_wlansniffrm_sq            = 0x00050044,
6393         DIDmsg_lnxind_wlansniffrm_signal        = 0x00060044,
6394         DIDmsg_lnxind_wlansniffrm_noise         = 0x00070044,
6395         DIDmsg_lnxind_wlansniffrm_rate          = 0x00080044,
6396         DIDmsg_lnxind_wlansniffrm_istx          = 0x00090044,
6397         DIDmsg_lnxind_wlansniffrm_frmlen        = 0x000A0044
6398 };
6399 enum {
6400         P80211ENUM_msgitem_status_no_value      = 0x00
6401 };
6402 enum {
6403         P80211ENUM_truth_false                  = 0x00,
6404         P80211ENUM_truth_true                   = 0x01
6405 };
6406
6407 /* Definition from madwifi */
6408 typedef struct {
6409         UINT32 did;
6410         UINT16 status;
6411         UINT16 len;
6412         UINT32 data;
6413 } p80211item_uint32_t;
6414
6415 typedef struct {
6416         UINT32 msgcode;
6417         UINT32 msglen;
6418 #define WLAN_DEVNAMELEN_MAX 16
6419         UINT8 devname[WLAN_DEVNAMELEN_MAX];
6420         p80211item_uint32_t hosttime;
6421         p80211item_uint32_t mactime;
6422         p80211item_uint32_t channel;
6423         p80211item_uint32_t rssi;
6424         p80211item_uint32_t sq;
6425         p80211item_uint32_t signal;
6426         p80211item_uint32_t noise;
6427         p80211item_uint32_t rate;
6428         p80211item_uint32_t istx;
6429         p80211item_uint32_t frmlen;
6430 } wlan_ng_prism2_header;
6431
6432 /* The radio capture header precedes the 802.11 header. */
6433 typedef struct PACKED _ieee80211_radiotap_header {
6434     UINT8       it_version;     /* Version 0. Only increases
6435                                  * for drastic changes,
6436                                  * introduction of compatible
6437                                  * new fields does not count.
6438                                  */
6439     UINT8       it_pad;
6440     UINT16     it_len;         /* length of the whole
6441                                  * header in bytes, including
6442                                  * it_version, it_pad,
6443                                  * it_len, and data fields.
6444                                  */
6445     UINT32   it_present;        /* A bitmap telling which
6446                                          * fields are present. Set bit 31
6447                                          * (0x80000000) to extend the
6448                                          * bitmap by another 32 bits.
6449                                          * Additional extensions are made
6450                                          * by setting bit 31.
6451                                          */
6452 }ieee80211_radiotap_header ;
6453
6454 enum ieee80211_radiotap_type {
6455     IEEE80211_RADIOTAP_TSFT = 0,
6456     IEEE80211_RADIOTAP_FLAGS = 1,
6457     IEEE80211_RADIOTAP_RATE = 2,
6458     IEEE80211_RADIOTAP_CHANNEL = 3,
6459     IEEE80211_RADIOTAP_FHSS = 4,
6460     IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6461     IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6462     IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6463     IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6464     IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6465     IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6466     IEEE80211_RADIOTAP_ANTENNA = 11,
6467     IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6468     IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6469 };
6470
6471 #define WLAN_RADIOTAP_PRESENT (                 \
6472         (1 << IEEE80211_RADIOTAP_TSFT)  |       \
6473         (1 << IEEE80211_RADIOTAP_FLAGS) |       \
6474         (1 << IEEE80211_RADIOTAP_RATE)  |       \
6475          0)
6476
6477 typedef struct _wlan_radiotap_header {
6478         ieee80211_radiotap_header wt_ihdr;
6479         INT64 wt_tsft;
6480         UINT8 wt_flags;
6481         UINT8 wt_rate;
6482 } wlan_radiotap_header;
6483 /* Definition from madwifi */
6484
6485 void send_monitor_packets(
6486         IN      PRTMP_ADAPTER   pAd,
6487         IN      RX_BLK                  *pRxBlk);
6488
6489 #if WIRELESS_EXT >= 12
6490 // This function will be called when query /proc
6491 struct iw_statistics *rt28xx_get_wireless_stats(
6492     IN struct net_device *net_dev);
6493 #endif
6494
6495 VOID    RTMPSetDesiredRates(
6496     IN  PRTMP_ADAPTER   pAdapter,
6497     IN  LONG            Rates);
6498 #endif // CONFIG_STA_SUPPORT //
6499
6500 INT     Set_FixedTxMode_Proc(
6501         IN      PRTMP_ADAPTER   pAd,
6502         IN      PUCHAR                  arg);
6503
6504 static inline char* GetPhyMode(
6505         int Mode)
6506 {
6507         switch(Mode)
6508         {
6509                 case MODE_CCK:
6510                         return "CCK";
6511
6512                 case MODE_OFDM:
6513                         return "OFDM";
6514 #ifdef DOT11_N_SUPPORT
6515                 case MODE_HTMIX:
6516                         return "HTMIX";
6517
6518                 case MODE_HTGREENFIELD:
6519                         return "GREEN";
6520 #endif // DOT11_N_SUPPORT //
6521                 default:
6522                         return "N/A";
6523         }
6524 }
6525
6526
6527 static inline char* GetBW(
6528         int BW)
6529 {
6530         switch(BW)
6531         {
6532                 case BW_10:
6533                         return "10M";
6534
6535                 case BW_20:
6536                         return "20M";
6537 #ifdef DOT11_N_SUPPORT
6538                 case BW_40:
6539                         return "40M";
6540 #endif // DOT11_N_SUPPORT //
6541                 default:
6542                         return "N/A";
6543         }
6544 }
6545
6546
6547 VOID RT28xxThreadTerminate(
6548         IN RTMP_ADAPTER *pAd);
6549
6550 BOOLEAN RT28XXChipsetCheck(
6551         IN void *_dev_p);
6552
6553 BOOLEAN RT28XXNetDevInit(
6554         IN void                                 *_dev_p,
6555         IN struct  net_device   *net_dev,
6556         IN RTMP_ADAPTER                 *pAd);
6557
6558 BOOLEAN RT28XXProbePostConfig(
6559         IN void                                 *_dev_p,
6560         IN RTMP_ADAPTER                 *pAd,
6561         IN INT32                                argc);
6562
6563 VOID RT28XXDMADisable(
6564         IN RTMP_ADAPTER                 *pAd);
6565
6566 VOID RT28XXDMAEnable(
6567         IN RTMP_ADAPTER                 *pAd);
6568
6569 VOID RT28xx_UpdateBeaconToAsic(
6570         IN RTMP_ADAPTER * pAd,
6571         IN INT apidx,
6572         IN ULONG BeaconLen,
6573         IN ULONG UpdatePos);
6574
6575 INT rt28xx_ioctl(
6576         IN      struct net_device       *net_dev,
6577         IN      OUT     struct ifreq    *rq,
6578         IN      INT                     cmd);
6579
6580
6581 #ifdef CONFIG_STA_SUPPORT
6582 INT rt28xx_sta_ioctl(
6583         IN      struct net_device       *net_dev,
6584         IN      OUT     struct ifreq    *rq,
6585         IN      INT                     cmd);
6586 #endif // CONFIG_STA_SUPPORT //
6587
6588 BOOLEAN RT28XXSecurityKeyAdd(
6589         IN              PRTMP_ADAPTER           pAd,
6590         IN              ULONG                           apidx,
6591         IN              ULONG                           KeyIdx,
6592         IN              MAC_TABLE_ENTRY         *pEntry);
6593
6594 ////////////////////////////////////////
6595 PNDIS_PACKET GetPacketFromRxRing(
6596         IN              PRTMP_ADAPTER   pAd,
6597         OUT             PRT28XX_RXD_STRUC       pSaveRxD,
6598         OUT             BOOLEAN                 *pbReschedule,
6599         IN OUT  UINT32                  *pRxPending);
6600
6601
6602 void kill_thread_task(PRTMP_ADAPTER pAd);
6603
6604 void tbtt_tasklet(unsigned long data);
6605
6606 //
6607 // Function Prototype in cmm_data_2860.c
6608 //
6609 USHORT RtmpPCI_WriteTxResource(
6610         IN      PRTMP_ADAPTER   pAd,
6611         IN      TX_BLK                  *pTxBlk,
6612         IN      BOOLEAN                 bIsLast,
6613         OUT     USHORT                  *FreeNumber);
6614
6615 USHORT RtmpPCI_WriteSingleTxResource(
6616         IN      PRTMP_ADAPTER   pAd,
6617         IN      TX_BLK                  *pTxBlk,
6618         IN      BOOLEAN                 bIsLast,
6619         OUT     USHORT                  *FreeNumber);
6620
6621 USHORT RtmpPCI_WriteMultiTxResource(
6622         IN      PRTMP_ADAPTER   pAd,
6623         IN      TX_BLK                  *pTxBlk,
6624         IN      UCHAR                   frameNum,
6625         OUT     USHORT                  *FreeNumber);
6626
6627 USHORT  RtmpPCI_WriteFragTxResource(
6628         IN      PRTMP_ADAPTER   pAd,
6629         IN      TX_BLK                  *pTxBlk,
6630         IN      UCHAR                   fragNum,
6631         OUT     USHORT                  *FreeNumber);
6632
6633 USHORT RtmpPCI_WriteSubTxResource(
6634         IN      PRTMP_ADAPTER   pAd,
6635         IN      TX_BLK                  *pTxBlk,
6636         IN      BOOLEAN                 bIsLast,
6637         OUT     USHORT                  *FreeNumber);
6638
6639 VOID RtmpPCI_FinalWriteTxResource(
6640         IN      PRTMP_ADAPTER   pAd,
6641         IN      TX_BLK                  *pTxBlk,
6642         IN      USHORT                  totalMPDUSize,
6643         IN      USHORT                  FirstTxIdx);
6644
6645 VOID RtmpPCIDataLastTxIdx(
6646         IN      PRTMP_ADAPTER   pAd,
6647         IN      UCHAR                   QueIdx,
6648         IN      USHORT                  LastTxIdx);
6649
6650 VOID RtmpPCIDataKickOut(
6651         IN      PRTMP_ADAPTER   pAd,
6652         IN      TX_BLK                  *pTxBlk,
6653         IN      UCHAR                   QueIdx);
6654
6655
6656 int RtmpPCIMgmtKickOut(
6657         IN RTMP_ADAPTER         *pAd,
6658         IN UCHAR                        QueIdx,
6659         IN PNDIS_PACKET         pPacket,
6660         IN PUCHAR                       pSrcBufVA,
6661         IN UINT                         SrcBufLen);
6662
6663
6664 NDIS_STATUS RTMPCheckRxError(
6665         IN  PRTMP_ADAPTER   pAd,
6666         IN  PHEADER_802_11  pHeader,
6667         IN      PRXWI_STRUC     pRxWI,
6668         IN  PRT28XX_RXD_STRUC      pRxD);
6669
6670 #ifdef CONFIG_STA_SUPPORT
6671 VOID RTMPInitPCIeLinkCtrlValue(
6672         IN      PRTMP_ADAPTER   pAd);
6673
6674 VOID RTMPFindHostPCIDev(
6675     IN  PRTMP_ADAPTER   pAd);
6676
6677 VOID RTMPPCIeLinkCtrlValueRestore(
6678         IN      PRTMP_ADAPTER   pAd,
6679         IN   UCHAR              Level);
6680
6681 VOID RTMPPCIeLinkCtrlSetting(
6682         IN      PRTMP_ADAPTER   pAd,
6683         IN      USHORT          Max);
6684
6685 VOID RT28xxPciAsicRadioOff(
6686         IN PRTMP_ADAPTER    pAd,
6687         IN UCHAR            Level,
6688         IN USHORT           TbttNumToNextWakeUp);
6689
6690 BOOLEAN RT28xxPciAsicRadioOn(
6691         IN PRTMP_ADAPTER pAd,
6692         IN UCHAR     Level);
6693
6694 VOID RT28xxPciStaAsicForceWakeup(
6695         IN PRTMP_ADAPTER pAd,
6696         IN UCHAR         Level);
6697
6698 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6699         IN PRTMP_ADAPTER pAd,
6700         IN USHORT TbttNumToNextWakeUp);
6701
6702 VOID PsPollWakeExec(
6703         IN PVOID SystemSpecific1,
6704         IN PVOID FunctionContext,
6705         IN PVOID SystemSpecific2,
6706         IN PVOID SystemSpecific3);
6707
6708 VOID  RadioOnExec(
6709         IN PVOID SystemSpecific1,
6710         IN PVOID FunctionContext,
6711         IN PVOID SystemSpecific2,
6712         IN PVOID SystemSpecific3);
6713 #endif // CONFIG_STA_SUPPORT //
6714
6715 VOID RT28xxPciMlmeRadioOn(
6716         IN PRTMP_ADAPTER pAd);
6717
6718 VOID RT28xxPciMlmeRadioOFF(
6719         IN PRTMP_ADAPTER pAd);
6720
6721 VOID AsicTurnOffRFClk(
6722         IN PRTMP_ADAPTER    pAd,
6723         IN      UCHAR           Channel);
6724
6725 VOID AsicTurnOnRFClk(
6726         IN PRTMP_ADAPTER        pAd,
6727         IN      UCHAR                   Channel);
6728
6729
6730 ////////////////////////////////////////
6731
6732 VOID QBSS_LoadInit(
6733         IN              RTMP_ADAPTER    *pAd);
6734
6735 UINT32 QBSS_LoadElementAppend(
6736         IN              RTMP_ADAPTER    *pAd,
6737         OUT             UINT8                   *buf_p);
6738
6739 VOID QBSS_LoadUpdate(
6740         IN              RTMP_ADAPTER    *pAd);
6741
6742 ///////////////////////////////////////
6743 INT RTMPShowCfgValue(
6744         IN      PRTMP_ADAPTER   pAd,
6745         IN      PUCHAR                  pName,
6746         IN      PUCHAR                  pBuf);
6747
6748 PCHAR   RTMPGetRalinkAuthModeStr(
6749     IN  NDIS_802_11_AUTHENTICATION_MODE authMode);
6750
6751 PCHAR   RTMPGetRalinkEncryModeStr(
6752     IN  USHORT encryMode);
6753 //////////////////////////////////////
6754
6755 #ifdef CONFIG_STA_SUPPORT
6756 VOID AsicStaBbpTuning(
6757         IN PRTMP_ADAPTER pAd);
6758
6759 VOID AsicResetFromDMABusy(
6760         IN PRTMP_ADAPTER pAd);
6761
6762 VOID AsicResetBBP(
6763         IN PRTMP_ADAPTER pAd);
6764
6765 VOID AsicResetMAC(
6766         IN PRTMP_ADAPTER pAd);
6767
6768 VOID AsicResetPBF(
6769         IN PRTMP_ADAPTER pAd);
6770 #endif // CONFIG_STA_SUPPORT //
6771
6772 void RTMP_IndicateMediaState(
6773         IN      PRTMP_ADAPTER   pAd);
6774
6775 VOID ReSyncBeaconTime(
6776         IN  PRTMP_ADAPTER   pAd);
6777
6778 VOID RTMPSetAGCInitValue(
6779         IN PRTMP_ADAPTER        pAd,
6780         IN UCHAR                        BandWidth);
6781
6782 int rt28xx_close(IN PNET_DEV dev);
6783 int rt28xx_open(IN PNET_DEV dev);
6784
6785 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6786 {
6787 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6788 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6789
6790         if (VIRTUAL_IF_NUM(pAd) == 0)
6791         {
6792                 if (rt28xx_open(pAd->net_dev) != 0)
6793                         return -1;
6794         }
6795         else
6796         {
6797         }
6798         VIRTUAL_IF_INC(pAd);
6799         return 0;
6800 }
6801
6802 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6803 {
6804         VIRTUAL_IF_DEC(pAd);
6805         if (VIRTUAL_IF_NUM(pAd) == 0)
6806                 rt28xx_close(pAd->net_dev);
6807         return;
6808 }
6809
6810
6811 #endif  // __RTMP_H__
6812