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