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