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