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