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