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