]> Pileus Git - ~andy/linux/blob - drivers/staging/rt3070/rtmp.h
6e2c2bf5452f700e11c71205f5d06f63b4696f25
[~andy/linux] / 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
1328 #ifdef QOS_DLS_SUPPORT
1329         STATE_MACHINE                   DlsMachine;
1330         STATE_MACHINE_FUNC      DlsFunc[DLS_FUNC_SIZE];
1331 #endif // QOS_DLS_SUPPORT //
1332
1333
1334
1335
1336         ULONG                   ChannelQuality;  // 0..100, Channel Quality Indication for Roaming
1337         ULONG                   Now32;           // latch the value of NdisGetSystemUpTime()
1338         ULONG                   LastSendNULLpsmTime;
1339
1340         BOOLEAN                 bRunning;
1341         NDIS_SPIN_LOCK          TaskLock;
1342         MLME_QUEUE              Queue;
1343
1344         UINT                    ShiftReg;
1345
1346         RALINK_TIMER_STRUCT     PeriodicTimer;
1347         RALINK_TIMER_STRUCT     APSDPeriodicTimer;
1348         RALINK_TIMER_STRUCT     LinkDownTimer;
1349         RALINK_TIMER_STRUCT     LinkUpTimer;
1350         ULONG                   PeriodicRound;
1351         ULONG                   OneSecPeriodicRound;
1352
1353         UCHAR                                   RealRxPath;
1354         BOOLEAN                                 bLowThroughput;
1355         BOOLEAN                                 bEnableAutoAntennaCheck;
1356         RALINK_TIMER_STRUCT             RxAntEvalTimer;
1357
1358 #ifdef RT30xx
1359         UCHAR CaliBW40RfR24;
1360         UCHAR CaliBW20RfR24;
1361 #endif // RT30xx //
1362
1363 } MLME_STRUCT, *PMLME_STRUCT;
1364
1365 // structure for radar detection and channel switch
1366 typedef struct _RADAR_DETECT_STRUCT {
1367     //BOOLEAN           IEEE80211H;                     // 0: disable, 1: enable IEEE802.11h
1368         UCHAR           CSCount;                        //Channel switch counter
1369         UCHAR           CSPeriod;                       //Channel switch period (beacon count)
1370         UCHAR           RDCount;                        //Radar detection counter
1371         UCHAR           RDMode;                         //Radar Detection mode
1372         UCHAR           RDDurRegion;            //Radar detection duration region
1373         UCHAR           BBPR16;
1374         UCHAR           BBPR17;
1375         UCHAR           BBPR18;
1376         UCHAR           BBPR21;
1377         UCHAR           BBPR22;
1378         UCHAR           BBPR64;
1379         ULONG           InServiceMonitorCount; // unit: sec
1380         UINT8           DfsSessionTime;
1381         BOOLEAN         bFastDfs;
1382         UINT8           ChMovingTime;
1383         UINT8           LongPulseRadarTh;
1384 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1385
1386 #ifdef CARRIER_DETECTION_SUPPORT
1387 typedef enum CD_STATE_n
1388 {
1389         CD_NORMAL,
1390         CD_SILENCE,
1391         CD_MAX_STATE
1392 } CD_STATE;
1393
1394 typedef struct CARRIER_DETECTION_s
1395 {
1396         BOOLEAN                                 Enable;
1397         UINT8                                   CDSessionTime;
1398         UINT8                                   CDPeriod;
1399         CD_STATE                                CD_State;
1400 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1401 #endif // CARRIER_DETECTION_SUPPORT //
1402
1403 typedef enum _REC_BLOCKACK_STATUS
1404 {
1405     Recipient_NONE=0,
1406         Recipient_USED,
1407         Recipient_HandleRes,
1408     Recipient_Accept
1409 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1410
1411 typedef enum _ORI_BLOCKACK_STATUS
1412 {
1413     Originator_NONE=0,
1414         Originator_USED,
1415     Originator_WaitRes,
1416     Originator_Done
1417 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1418
1419 #ifdef DOT11_N_SUPPORT
1420 typedef struct _BA_ORI_ENTRY{
1421         UCHAR   Wcid;
1422         UCHAR   TID;
1423         UCHAR   BAWinSize;
1424         UCHAR   Token;
1425 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1426         USHORT  Sequence;
1427         USHORT  TimeOutValue;
1428         ORI_BLOCKACK_STATUS  ORI_BA_Status;
1429         RALINK_TIMER_STRUCT ORIBATimer;
1430         PVOID   pAdapter;
1431 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1432
1433 typedef struct _BA_REC_ENTRY {
1434         UCHAR   Wcid;
1435         UCHAR   TID;
1436         UCHAR   BAWinSize;      // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1437         //UCHAR NumOfRxPkt;
1438         //UCHAR    Curindidx; // the head in the RX reordering buffer
1439         USHORT          LastIndSeq;
1440 //      USHORT          LastIndSeqAtTimer;
1441         USHORT          TimeOutValue;
1442         RALINK_TIMER_STRUCT RECBATimer;
1443         ULONG           LastIndSeqAtTimer;
1444         ULONG           nDropPacket;
1445         ULONG           rcvSeq;
1446         REC_BLOCKACK_STATUS  REC_BA_Status;
1447 //      UCHAR   RxBufIdxUsed;
1448         // corresponding virtual address for RX reordering packet storage.
1449         //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1450         NDIS_SPIN_LOCK          RxReRingLock;                 // Rx Ring spinlock
1451 //      struct _BA_REC_ENTRY *pNext;
1452         PVOID   pAdapter;
1453         struct reordering_list  list;
1454 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1455
1456
1457 typedef struct {
1458         ULONG           numAsRecipient;         // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1459         ULONG           numAsOriginator;        // I am originator of   numAsOriginator clients. These clients are in the BAOriEntry[]
1460         BA_ORI_ENTRY       BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1461         BA_REC_ENTRY       BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1462 } BA_TABLE, *PBA_TABLE;
1463
1464 //For QureyBATableOID use;
1465 typedef struct  PACKED _OID_BA_REC_ENTRY{
1466         UCHAR   MACAddr[MAC_ADDR_LEN];
1467         UCHAR   BaBitmap;   // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1468         UCHAR   rsv;
1469         UCHAR   BufSize[8];
1470         REC_BLOCKACK_STATUS     REC_BA_Status[8];
1471 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1472
1473 //For QureyBATableOID use;
1474 typedef struct  PACKED _OID_BA_ORI_ENTRY{
1475         UCHAR   MACAddr[MAC_ADDR_LEN];
1476         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
1477         UCHAR   rsv;
1478         UCHAR   BufSize[8];
1479         ORI_BLOCKACK_STATUS  ORI_BA_Status[8];
1480 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1481
1482 typedef struct _QUERYBA_TABLE{
1483         OID_BA_ORI_ENTRY       BAOriEntry[32];
1484         OID_BA_REC_ENTRY       BARecEntry[32];
1485         UCHAR   OriNum;// Number of below BAOriEntry
1486         UCHAR   RecNum;// Number of below BARecEntry
1487 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1488
1489 typedef union   _BACAP_STRUC    {
1490 #ifdef RT_BIG_ENDIAN
1491         struct  {
1492                 UINT32     :4;
1493                 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.
1494                 UINT32     bHtAdhoc:1;                  // adhoc can use ht rate.
1495                 UINT32     MMPSmode:2;  // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1496                 UINT32     AmsduSize:1; // 0:3839, 1:7935 bytes. UINT  MSDUSizeToBytes[]        = { 3839, 7935};
1497                 UINT32     AmsduEnable:1;       //Enable AMSDU transmisstion
1498                 UINT32          MpduDensity:3;
1499                 UINT32          Policy:2;       // 0: DELAY_BA 1:IMMED_BA  (//BA Policy subfiled value in ADDBA frame)   2:BA-not use
1500                 UINT32          AutoBA:1;       // automatically BA
1501                 UINT32          TxBAWinLimit:8;
1502                 UINT32          RxBAWinLimit:8;
1503         }       field;
1504 #else
1505         struct  {
1506                 UINT32          RxBAWinLimit:8;
1507                 UINT32          TxBAWinLimit:8;
1508                 UINT32          AutoBA:1;       // automatically BA
1509                 UINT32          Policy:2;       // 0: DELAY_BA 1:IMMED_BA  (//BA Policy subfiled value in ADDBA frame)   2:BA-not use
1510                 UINT32          MpduDensity:3;
1511                 UINT32          AmsduEnable:1;  //Enable AMSDU transmisstion
1512                 UINT32          AmsduSize:1;    // 0:3839, 1:7935 bytes. UINT  MSDUSizeToBytes[]        = { 3839, 7935};
1513                 UINT32          MMPSmode:2;     // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1514                 UINT32          bHtAdhoc:1;                     // adhoc can use ht rate.
1515                 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.
1516                 UINT32          :4;
1517         }       field;
1518 #endif
1519         UINT32                  word;
1520 } BACAP_STRUC, *PBACAP_STRUC;
1521 #endif // DOT11_N_SUPPORT //
1522
1523 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second.  (Details see MLMEPeriodic)
1524 typedef struct  _IOT_STRUC      {
1525         UCHAR                   Threshold[2];
1526         UCHAR                   ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE];     // compare with threshold[0]
1527         UCHAR                   RefreshNum[MAX_LEN_OF_BA_REC_TABLE];    // compare with threshold[1]
1528         ULONG                   OneSecInWindowCount;
1529         ULONG                   OneSecFrameDuplicateCount;
1530         ULONG                   OneSecOutWindowCount;
1531         UCHAR                   DelOriAct;
1532         UCHAR                   DelRecAct;
1533         UCHAR                   RTSShortProt;
1534         UCHAR                   RTSLongProt;
1535         BOOLEAN                 bRTSLongProtOn;
1536 #ifdef CONFIG_STA_SUPPORT
1537         BOOLEAN                 bLastAtheros;
1538     BOOLEAN                     bCurrentAtheros;
1539     BOOLEAN         bNowAtherosBurstOn;
1540         BOOLEAN                 bNextDisableRxBA;
1541     BOOLEAN                     bToggle;
1542 #endif // CONFIG_STA_SUPPORT //
1543 } IOT_STRUC, *PIOT_STRUC;
1544
1545 // This is the registry setting for 802.11n transmit setting.  Used in advanced page.
1546 typedef union _REG_TRANSMIT_SETTING {
1547 #ifdef RT_BIG_ENDIAN
1548  struct {
1549          UINT32  rsv:13;
1550                  UINT32  EXTCHA:2;
1551                  UINT32  HTMODE:1;
1552                  UINT32  TRANSNO:2;
1553                  UINT32  STBC:1; //SPACE
1554                  UINT32  ShortGI:1;
1555                  UINT32  BW:1; //channel bandwidth 20MHz or 40 MHz
1556                  UINT32  TxBF:1; // 3*3
1557                  UINT32  rsv0:10;
1558                  //UINT32  MCS:7;                 // MCS
1559          //UINT32  PhyMode:4;
1560     } field;
1561 #else
1562  struct {
1563          //UINT32  PhyMode:4;
1564          //UINT32  MCS:7;                 // MCS
1565                  UINT32  rsv0:10;
1566                  UINT32  TxBF:1;
1567          UINT32  BW:1; //channel bandwidth 20MHz or 40 MHz
1568          UINT32  ShortGI:1;
1569          UINT32  STBC:1; //SPACE
1570          UINT32  TRANSNO:2;
1571          UINT32  HTMODE:1;
1572          UINT32  EXTCHA:2;
1573          UINT32  rsv:13;
1574     } field;
1575 #endif
1576  UINT32   word;
1577 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1578
1579 typedef union  _DESIRED_TRANSMIT_SETTING {
1580 #ifdef RT_BIG_ENDIAN
1581         struct  {
1582                         USHORT          rsv:3;
1583                         USHORT          FixedTxMode:2;                  // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1584                         USHORT          PhyMode:4;
1585                         USHORT          MCS:7;                 // MCS
1586         }       field;
1587 #else
1588         struct  {
1589                         USHORT          MCS:7;                  // MCS
1590                         USHORT          PhyMode:4;
1591                         USHORT          FixedTxMode:2;                  // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1592                         USHORT          rsv:3;
1593         }       field;
1594 #endif
1595         USHORT          word;
1596  } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1597
1598 typedef struct {
1599         BOOLEAN         IsRecipient;
1600         UCHAR   MACAddr[MAC_ADDR_LEN];
1601         UCHAR   TID;
1602         UCHAR   nMSDU;
1603         USHORT   TimeOut;
1604         BOOLEAN bAllTid;  // If True, delete all TID for BA sessions with this MACaddr.
1605 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1606
1607 //
1608 // Multiple SSID structure
1609 //
1610 #define WLAN_MAX_NUM_OF_TIM                     ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1611 #define WLAN_CT_TIM_BCMC_OFFSET         0 /* unit: 32B */
1612
1613 /* clear bcmc TIM bit */
1614 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1615         pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1616
1617 /* set bcmc TIM bit */
1618 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1619         pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1620
1621 /* clear a station PS TIM bit */
1622 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1623         {       UCHAR tim_offset = wcid >> 3; \
1624                 UCHAR bit_offset = wcid & 0x7; \
1625                 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1626
1627 /* set a station PS TIM bit */
1628 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1629         {       UCHAR tim_offset = wcid >> 3; \
1630                 UCHAR bit_offset = wcid & 0x7; \
1631                 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1632
1633 #ifdef RT2870
1634 #define BEACON_BITMAP_MASK              0xff
1635 typedef struct _BEACON_SYNC_STRUCT_
1636 {
1637         UCHAR                           BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1638         UCHAR                                   BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1639         ULONG                                   TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1640         ULONG                                   CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1641         BOOLEAN                                 EnableBeacon;           // trigger to enable beacon transmission.
1642         UCHAR                                   BeaconBitMap;           // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1643         UCHAR                                   DtimBitOn;                      // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1644 }BEACON_SYNC_STRUCT;
1645 #endif // RT2870 //
1646
1647 typedef struct _MULTISSID_STRUCT {
1648         UCHAR                                                           Bssid[MAC_ADDR_LEN];
1649     UCHAR                               SsidLen;
1650     CHAR                                Ssid[MAX_LEN_OF_SSID];
1651     USHORT                              CapabilityInfo;
1652
1653     PNET_DEV                                    MSSIDDev;
1654
1655         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;
1656         NDIS_802_11_WEP_STATUS              WepStatus;
1657         NDIS_802_11_WEP_STATUS                          GroupKeyWepStatus;
1658         WPA_MIX_PAIR_CIPHER                                     WpaMixPairCipher;
1659
1660         ULONG                                                           TxCount;
1661         ULONG                                                           RxCount;
1662         ULONG                                                           ReceivedByteCount;
1663         ULONG                                                           TransmittedByteCount;
1664         ULONG                                                           RxErrorCount;
1665         ULONG                                                           RxDropCount;
1666
1667         HTTRANSMIT_SETTING                                      HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1668         RT_HT_PHY_INFO                                          DesiredHtPhyInfo;
1669         DESIRED_TRANSMIT_SETTING                DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1670         BOOLEAN                                                         bAutoTxRateSwitch;
1671
1672         //CIPHER_KEY                          SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1673         UCHAR                               DefaultKeyId;
1674
1675         UCHAR                                                           TxRate;       // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1676         UCHAR                                                           DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1677         UCHAR                                                           DesiredRatesIndex;
1678         UCHAR                                                           MaxTxRate;            // RATE_1, RATE_2, RATE_5_5, RATE_11
1679
1680 //      ULONG                                                   TimBitmap;      // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1681 //    ULONG                                             TimBitmap2;     // b0 for AID32, b1 for AID33, ... and so on
1682         UCHAR                                                           TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1683
1684     // WPA
1685     UCHAR                               GMK[32];
1686     UCHAR                               PMK[32];
1687         UCHAR                                                           GTK[32];
1688     BOOLEAN                             IEEE8021X;
1689     BOOLEAN                             PreAuth;
1690     UCHAR                               GNonce[32];
1691     UCHAR                               PortSecured;
1692     NDIS_802_11_PRIVACY_FILTER          PrivacyFilter;
1693     UCHAR                               BANClass3Data;
1694     ULONG                               IsolateInterStaTraffic;
1695
1696     UCHAR                               RSNIE_Len[2];
1697     UCHAR                               RSN_IE[2][MAX_LEN_OF_RSNIE];
1698
1699
1700     UCHAR                                       TimIELocationInBeacon;
1701     UCHAR                                       CapabilityInfoLocationInBeacon;
1702     // outgoing BEACON frame buffer and corresponding TXWI
1703         // PTXWI_STRUC                           BeaconTxWI; //
1704     CHAR                                BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1705
1706     BOOLEAN                             bHideSsid;
1707         UINT16                                                          StationKeepAliveTime; // unit: second
1708
1709     USHORT                              VLAN_VID;
1710     USHORT                              VLAN_Priority;
1711
1712     RT_802_11_ACL                                               AccessControlList;
1713
1714         // EDCA Qos
1715     BOOLEAN                                                             bWmmCapable;    // 0:disable WMM, 1:enable WMM
1716     BOOLEAN                                                             bDLSCapable;    // 0:disable DLS, 1:enable DLS
1717
1718         UCHAR                                                   DlsPTK[64];             // Due to windows dirver count on meetinghouse to handle 4-way shake
1719
1720         // For 802.1x daemon setting per BSS
1721         UCHAR                                                           radius_srv_num;
1722         RADIUS_SRV_INFO                                         radius_srv_info[MAX_RADIUS_SRV_NUM];
1723
1724 #ifdef RTL865X_SOC
1725         unsigned int                                            mylinkid;
1726 #endif
1727
1728
1729         UINT32                                  RcvdConflictSsidCount;
1730         UINT32                                  RcvdSpoofedAssocRespCount;
1731         UINT32                                  RcvdSpoofedReassocRespCount;
1732         UINT32                                  RcvdSpoofedProbeRespCount;
1733         UINT32                                  RcvdSpoofedBeaconCount;
1734         UINT32                                  RcvdSpoofedDisassocCount;
1735         UINT32                                  RcvdSpoofedAuthCount;
1736         UINT32                                  RcvdSpoofedDeauthCount;
1737         UINT32                                  RcvdSpoofedUnknownMgmtCount;
1738         UINT32                                  RcvdReplayAttackCount;
1739
1740         CHAR                                    RssiOfRcvdConflictSsid;
1741         CHAR                                    RssiOfRcvdSpoofedAssocResp;
1742         CHAR                                    RssiOfRcvdSpoofedReassocResp;
1743         CHAR                                    RssiOfRcvdSpoofedProbeResp;
1744         CHAR                                    RssiOfRcvdSpoofedBeacon;
1745         CHAR                                    RssiOfRcvdSpoofedDisassoc;
1746         CHAR                                    RssiOfRcvdSpoofedAuth;
1747         CHAR                                    RssiOfRcvdSpoofedDeauth;
1748         CHAR                                    RssiOfRcvdSpoofedUnknownMgmt;
1749         CHAR                                    RssiOfRcvdReplayAttack;
1750
1751         BOOLEAN                                 bBcnSntReq;
1752         UCHAR                                   BcnBufIdx;
1753 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1754
1755
1756
1757 #ifdef DOT11N_DRAFT3
1758 typedef enum _BSS2040COEXIST_FLAG{
1759         BSS_2040_COEXIST_DISABLE = 0,
1760         BSS_2040_COEXIST_TIMER_FIRED  = 1,
1761         BSS_2040_COEXIST_INFO_SYNC = 2,
1762         BSS_2040_COEXIST_INFO_NOTIFY = 4,
1763 }BSS2040COEXIST_FLAG;
1764 #endif // DOT11N_DRAFT3 //
1765
1766 // configuration common to OPMODE_AP as well as OPMODE_STA
1767 typedef struct _COMMON_CONFIG {
1768
1769         BOOLEAN         bCountryFlag;
1770         UCHAR           CountryCode[3];
1771         UCHAR           Geography;
1772         UCHAR       CountryRegion;      // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1773         UCHAR       CountryRegionForABand;      // Enum of country region for A band
1774         UCHAR       PhyMode;            // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1775         USHORT      Dsifs;              // in units of usec
1776         ULONG       PacketFilter;       // Packet filter for receiving
1777
1778         CHAR        Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1779         UCHAR       SsidLen;               // the actual ssid length in used
1780         UCHAR       LastSsidLen;               // the actual ssid length in used
1781         CHAR        LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1782         UCHAR           LastBssid[MAC_ADDR_LEN];
1783
1784         UCHAR       Bssid[MAC_ADDR_LEN];
1785         USHORT      BeaconPeriod;
1786         UCHAR       Channel;
1787         UCHAR       CentralChannel;     // Central Channel when using 40MHz is indicating. not real channel.
1788
1789         UCHAR       SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1790         UCHAR       SupRateLen;
1791         UCHAR       ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1792         UCHAR       ExtRateLen;
1793         UCHAR       DesireRate[MAX_LEN_OF_SUPPORTED_RATES];      // OID_802_11_DESIRED_RATES
1794         UCHAR       MaxDesiredRate;
1795         UCHAR       ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1796
1797         ULONG       BasicRateBitmap;        // backup basic ratebitmap
1798
1799         BOOLEAN         bAPSDCapable;
1800         BOOLEAN         bInServicePeriod;
1801         BOOLEAN         bAPSDAC_BE;
1802         BOOLEAN         bAPSDAC_BK;
1803         BOOLEAN         bAPSDAC_VI;
1804         BOOLEAN         bAPSDAC_VO;
1805         BOOLEAN         bNeedSendTriggerFrame;
1806         BOOLEAN         bAPSDForcePowerSave;    // Force power save mode, should only use in APSD-STAUT
1807         ULONG           TriggerTimerCount;
1808         UCHAR           MaxSPLength;
1809         UCHAR           BBPCurrentBW;   // BW_10,       BW_20, BW_40
1810         // move to MULTISSID_STRUCT for MBSS
1811         //HTTRANSMIT_SETTING    HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1812         REG_TRANSMIT_SETTING        RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1813         //UCHAR       FixedTxMode;              // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1814         UCHAR       TxRate;                 // Same value to fill in TXD. TxRate is 6-bit
1815         UCHAR       MaxTxRate;              // RATE_1, RATE_2, RATE_5_5, RATE_11
1816         UCHAR       TxRateIndex;            // Tx rate index in RateSwitchTable
1817         UCHAR       TxRateTableSize;        // Valid Tx rate table size in RateSwitchTable
1818         //BOOLEAN               bAutoTxRateSwitch;
1819         UCHAR       MinTxRate;              // RATE_1, RATE_2, RATE_5_5, RATE_11
1820         UCHAR       RtsRate;                // RATE_xxx
1821         HTTRANSMIT_SETTING      MlmeTransmit;   // MGMT frame PHY rate setting when operatin at Ht rate.
1822         UCHAR       MlmeRate;               // RATE_xxx, used to send MLME frames
1823         UCHAR       BasicMlmeRate;          // Default Rate for sending MLME frames
1824
1825         USHORT      RtsThreshold;           // in unit of BYTE
1826         USHORT      FragmentThreshold;      // in unit of BYTE
1827
1828         UCHAR       TxPower;                // in unit of mW
1829         ULONG       TxPowerPercentage;      // 0~100 %
1830         ULONG       TxPowerDefault;         // keep for TxPowerPercentage
1831
1832 #ifdef DOT11_N_SUPPORT
1833         BACAP_STRUC        BACapability; //   NO USE = 0XFF  ;  IMMED_BA =1  ;  DELAY_BA=0
1834         BACAP_STRUC        REGBACapability; //   NO USE = 0XFF  ;  IMMED_BA =1  ;  DELAY_BA=0
1835 #endif // DOT11_N_SUPPORT //
1836         IOT_STRUC               IOTestParm;     // 802.11n InterOpbility Test Parameter;
1837         ULONG       TxPreamble;             // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1838         BOOLEAN     bUseZeroToDisableFragment;     // Microsoft use 0 as disable
1839         ULONG       UseBGProtection;        // 0: auto, 1: always use, 2: always not use
1840         BOOLEAN     bUseShortSlotTime;      // 0: disable, 1 - use short slot (9us)
1841         BOOLEAN     bEnableTxBurst;         // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1842         BOOLEAN     bAggregationCapable;      // 1: enable TX aggregation when the peer supports it
1843         BOOLEAN     bPiggyBackCapable;          // 1: enable TX piggy-back according MAC's version
1844         BOOLEAN     bIEEE80211H;                        // 1: enable IEEE802.11h spec.
1845         ULONG           DisableOLBCDetect;              // 0: enable OLBC detect; 1 disable OLBC detect
1846
1847 #ifdef DOT11_N_SUPPORT
1848         BOOLEAN                         bRdg;
1849 #endif // DOT11_N_SUPPORT //
1850         BOOLEAN             bWmmCapable;        // 0:disable WMM, 1:enable WMM
1851         QOS_CAPABILITY_PARM APQosCapability;    // QOS capability of the current associated AP
1852         EDCA_PARM           APEdcaParm;         // EDCA parameters of the current associated AP
1853         QBSS_LOAD_PARM      APQbssLoad;         // QBSS load of the current associated AP
1854         UCHAR               AckPolicy[4];       // ACK policy of the specified AC. see ACK_xxx
1855 #ifdef CONFIG_STA_SUPPORT
1856         BOOLEAN                         bDLSCapable;            // 0:disable DLS, 1:enable DLS
1857 #endif // CONFIG_STA_SUPPORT //
1858         // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1859         // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1860         // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1861         // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1862         ULONG               OpStatusFlags;
1863
1864         BOOLEAN                         NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1865         ABGBAND_STATE           BandState;              // For setting BBP used on B/G or A mode.
1866         BOOLEAN                         bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1867
1868         // IEEE802.11H--DFS.
1869         RADAR_DETECT_STRUCT     RadarDetect;
1870
1871 #ifdef CARRIER_DETECTION_SUPPORT
1872         CARRIER_DETECTION               CarrierDetect;
1873 #endif // CARRIER_DETECTION_SUPPORT //
1874
1875 #ifdef DOT11_N_SUPPORT
1876         // HT
1877         UCHAR                   BASize;         // USer desired BAWindowSize. Should not exceed our max capability
1878         //RT_HT_CAPABILITY      SupportedHtPhy;
1879         RT_HT_CAPABILITY        DesiredHtPhy;
1880         HT_CAPABILITY_IE                HtCapability;
1881         ADD_HT_INFO_IE          AddHTInfo;      // Useful as AP.
1882         //This IE is used with channel switch announcement element when changing to a new 40MHz.
1883         //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1884         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
1885
1886 #ifdef DOT11N_DRAFT3
1887         UCHAR                                   Bss2040CoexistFlag;             // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1888         RALINK_TIMER_STRUCT     Bss2040CoexistTimer;
1889
1890         //This IE is used for 20/40 BSS Coexistence.
1891         BSS_2040_COEXIST_IE             BSS2040CoexistInfo;
1892         // ====== 11n D3.0 =======================>
1893         USHORT                                  Dot11OBssScanPassiveDwell;                              // Unit : TU. 5~1000
1894         USHORT                                  Dot11OBssScanActiveDwell;                               // Unit : TU. 10~1000
1895         USHORT                                  Dot11BssWidthTriggerScanInt;                    // Unit : Second
1896         USHORT                                  Dot11OBssScanPassiveTotalPerChannel;    // Unit : TU. 200~10000
1897         USHORT                                  Dot11OBssScanActiveTotalPerChannel;     // Unit : TU. 20~10000
1898         USHORT                                  Dot11BssWidthChanTranDelayFactor;
1899         USHORT                                  Dot11OBssScanActivityThre;                              // Unit : percentage
1900
1901         ULONG                                   Dot11BssWidthChanTranDelay;                     // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1902         ULONG                                   CountDownCtr;   // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1903
1904         NDIS_SPIN_LOCK          TriggerEventTabLock;
1905         BSS_2040_COEXIST_IE             LastBSSCoexist2040;
1906         BSS_2040_COEXIST_IE             BSSCoexist2040;
1907         TRIGGER_EVENT_TAB               TriggerEventTab;
1908         UCHAR                                   ChannelListIdx;
1909         // <====== 11n D3.0 =======================
1910         BOOLEAN                                 bOverlapScanning;
1911 #endif // DOT11N_DRAFT3 //
1912
1913     BOOLEAN                 bHTProtect;
1914     BOOLEAN                 bMIMOPSEnable;
1915     BOOLEAN                                     bBADecline;
1916         BOOLEAN                                 bDisableReordering;
1917         BOOLEAN                                 bForty_Mhz_Intolerant;
1918         BOOLEAN                                 bExtChannelSwitchAnnouncement;
1919         BOOLEAN                                 bRcvBSSWidthTriggerEvents;
1920         ULONG                                   LastRcvBSSWidthTriggerEventsTime;
1921
1922         UCHAR                                   TxBASize;
1923 #endif // DOT11_N_SUPPORT //
1924
1925         // Enable wireless event
1926         BOOLEAN                         bWirelessEvent;
1927         BOOLEAN                         bWiFiTest;                              // Enable this parameter for WiFi test
1928
1929         // Tx & Rx Stream number selection
1930         UCHAR                           TxStream;
1931         UCHAR                           RxStream;
1932
1933         // transmit phy mode, trasmit rate for Multicast.
1934 #ifdef MCAST_RATE_SPECIFIC
1935         UCHAR                           McastTransmitMcs;
1936         UCHAR                           McastTransmitPhyMode;
1937 #endif // MCAST_RATE_SPECIFIC //
1938
1939         BOOLEAN                 bHardwareRadio;     // Hardware controlled Radio enabled
1940
1941 #ifdef RT2870
1942         BOOLEAN                 bMultipleIRP;       // Multiple Bulk IN flag
1943         UCHAR                   NumOfBulkInIRP;     // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1944         RT_HT_CAPABILITY        SupportedHtPhy;
1945         ULONG                           MaxPktOneTxBulk;
1946         UCHAR                           TxBulkFactor;
1947         UCHAR                           RxBulkFactor;
1948
1949         BEACON_SYNC_STRUCT      *pBeaconSync;
1950         RALINK_TIMER_STRUCT     BeaconUpdateTimer;
1951         UINT32                          BeaconAdjust;
1952         UINT32                          BeaconFactor;
1953         UINT32                          BeaconRemain;
1954 #endif // RT2870 //
1955
1956
1957         NDIS_SPIN_LOCK                  MeasureReqTabLock;
1958         PMEASURE_REQ_TAB                pMeasureReqTab;
1959
1960         NDIS_SPIN_LOCK                  TpcReqTabLock;
1961         PTPC_REQ_TAB                    pTpcReqTab;
1962
1963         // transmit phy mode, trasmit rate for Multicast.
1964 #ifdef MCAST_RATE_SPECIFIC
1965         HTTRANSMIT_SETTING              MCastPhyMode;
1966 #endif // MCAST_RATE_SPECIFIC //
1967
1968 #ifdef SINGLE_SKU
1969         UINT16                                  DefineMaxTxPwr;
1970 #endif // SINGLE_SKU //
1971
1972
1973 } COMMON_CONFIG, *PCOMMON_CONFIG;
1974
1975
1976 #ifdef CONFIG_STA_SUPPORT
1977 /* Modified by Wu Xi-Kun 4/21/2006 */
1978 // STA configuration and status
1979 typedef struct _STA_ADMIN_CONFIG {
1980         // GROUP 1 -
1981         //   User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1982         //   the user intended configuration, but not necessary fully equal to the final
1983         //   settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1984         //   AP or IBSS holder).
1985         //   Once initialized, user configuration can only be changed via OID_xxx
1986         UCHAR       BssType;              // BSS_INFRA or BSS_ADHOC
1987         USHORT      AtimWin;          // used when starting a new IBSS
1988
1989         // GROUP 2 -
1990         //   User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1991         //   the user intended configuration, and should be always applied to the final
1992         //   settings in ACTIVE BSS without compromising with the BSS holder.
1993         //   Once initialized, user configuration can only be changed via OID_xxx
1994         UCHAR       RssiTrigger;
1995         UCHAR       RssiTriggerMode;      // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1996         USHORT      DefaultListenCount;   // default listen count;
1997         ULONG       WindowsPowerMode;           // Power mode for AC power
1998         ULONG       WindowsBatteryPowerMode;    // Power mode for battery if exists
1999         BOOLEAN     bWindowsACCAMEnable;        // Enable CAM power mode when AC on
2000         BOOLEAN     bAutoReconnect;         // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2001         ULONG       WindowsPowerProfile;    // Windows power profile, for NDIS5.1 PnP
2002
2003         // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2004         USHORT      Psm;                  // power management mode   (PWR_ACTIVE|PWR_SAVE)
2005         USHORT      DisassocReason;
2006         UCHAR       DisassocSta[MAC_ADDR_LEN];
2007         USHORT      DeauthReason;
2008         UCHAR       DeauthSta[MAC_ADDR_LEN];
2009         USHORT      AuthFailReason;
2010         UCHAR       AuthFailSta[MAC_ADDR_LEN];
2011
2012         NDIS_802_11_PRIVACY_FILTER          PrivacyFilter;  // PrivacyFilter enum for 802.1X
2013         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;       // This should match to whatever microsoft defined
2014         NDIS_802_11_WEP_STATUS              WepStatus;
2015         NDIS_802_11_WEP_STATUS                          OrigWepStatus;  // Original wep status set from OID
2016
2017         // Add to support different cipher suite for WPA2/WPA mode
2018         NDIS_802_11_ENCRYPTION_STATUS           GroupCipher;            // Multicast cipher suite
2019         NDIS_802_11_ENCRYPTION_STATUS           PairCipher;                     // Unicast cipher suite
2020         BOOLEAN                                                         bMixCipher;                     // Indicate current Pair & Group use different cipher suites
2021         USHORT                                                          RsnCapability;
2022
2023         NDIS_802_11_WEP_STATUS              GroupKeyWepStatus;
2024
2025         UCHAR           PMK[32];                // WPA PSK mode PMK
2026         UCHAR       PTK[64];                // WPA PSK mode PTK
2027         UCHAR           GTK[32];                                // GTK from authenticator
2028         BSSID_INFO      SavedPMK[PMKID_NO];
2029         UINT            SavedPMKNum;                    // Saved PMKID number
2030
2031         UCHAR           DefaultKeyId;
2032
2033
2034         // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2035         UCHAR       PortSecured;
2036
2037         // For WPA countermeasures
2038         ULONG       LastMicErrorTime;   // record last MIC error time
2039         ULONG       MicErrCnt;          // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2040         BOOLEAN     bBlockAssoc;        // Block associate attempt for 60 seconds after counter measure occurred.
2041         // For WPA-PSK supplicant state
2042         WPA_STATE   WpaState;           // Default is SS_NOTUSE and handled by microsoft 802.1x
2043         UCHAR       ReplayCounter[8];
2044         UCHAR       ANonce[32];         // ANonce for WPA-PSK from aurhenticator
2045         UCHAR       SNonce[32];         // SNonce for WPA-PSK
2046
2047         UCHAR       LastSNR0;             // last received BEACON's SNR
2048         UCHAR       LastSNR1;            // last received BEACON's SNR for 2nd  antenna
2049         RSSI_SAMPLE RssiSample;
2050         ULONG       NumOfAvgRssiSample;
2051
2052         ULONG       LastBeaconRxTime;     // OS's timestamp of the last BEACON RX time
2053         ULONG       Last11bBeaconRxTime;  // OS's timestamp of the last 11B BEACON RX time
2054         ULONG           Last11gBeaconRxTime;    // OS's timestamp of the last 11G BEACON RX time
2055         ULONG           Last20NBeaconRxTime;    // OS's timestamp of the last 20MHz N BEACON RX time
2056
2057         ULONG       LastScanTime;       // Record last scan time for issue BSSID_SCAN_LIST
2058         ULONG       ScanCnt;            // Scan counts since most recent SSID, BSSID, SCAN OID request
2059         BOOLEAN     bSwRadio;           // Software controlled Radio On/Off, TRUE: On
2060         BOOLEAN     bHwRadio;           // Hardware controlled Radio On/Off, TRUE: On
2061         BOOLEAN     bRadio;             // Radio state, And of Sw & Hw radio state
2062         BOOLEAN     bHardwareRadio;     // Hardware controlled Radio enabled
2063         BOOLEAN     bShowHiddenSSID;    // Show all known SSID in SSID list get operation
2064
2065     //BOOLEAN           AdhocBOnlyJoined;       // Indicate Adhoc B Join.
2066     //BOOLEAN           AdhocBGJoined;          // Indicate Adhoc B/G Join.
2067     //BOOLEAN           Adhoc20NJoined;         // Indicate Adhoc 20MHz N Join.
2068
2069         // New for WPA, windows want us to to keep association information and
2070         // Fixed IEs from last association response
2071         NDIS_802_11_ASSOCIATION_INFORMATION     AssocInfo;
2072         USHORT       ReqVarIELen;                // Length of next VIE include EID & Length
2073         UCHAR       ReqVarIEs[MAX_VIE_LEN];             // The content saved here should be little-endian format.
2074         USHORT       ResVarIELen;                // Length of next VIE include EID & Length
2075         UCHAR       ResVarIEs[MAX_VIE_LEN];
2076
2077         UCHAR       RSNIE_Len;
2078         UCHAR       RSN_IE[MAX_LEN_OF_RSNIE];   // The content saved here should be little-endian format.
2079
2080         // New variables used for CCX 1.0
2081         BOOLEAN             bCkipOn;
2082         BOOLEAN             bCkipCmicOn;
2083         UCHAR               CkipFlag;
2084         UCHAR               GIV[3];  //for CCX iv
2085         UCHAR               RxSEQ[4];
2086         UCHAR               TxSEQ[4];
2087         UCHAR               CKIPMIC[4];
2088         UCHAR               LeapAuthMode;
2089         LEAP_AUTH_INFO      LeapAuthInfo;
2090         UCHAR               HashPwd[16];
2091         UCHAR               NetworkChallenge[8];
2092         UCHAR               NetworkChallengeResponse[24];
2093         UCHAR               PeerChallenge[8];
2094
2095         UCHAR               PeerChallengeResponse[24];
2096         UCHAR               SessionKey[16]; //Network session keys (NSK)
2097         RALINK_TIMER_STRUCT LeapAuthTimer;
2098         ROGUEAP_TABLE       RogueApTab;   //Cisco CCX1 Rogue AP Detection
2099
2100         // New control flags for CCX
2101         CCX_CONTROL         CCXControl;                 // Master administration state
2102         BOOLEAN             CCXEnable;                  // Actual CCX state
2103         UCHAR               CCXScanChannel;             // Selected channel for CCX beacon request
2104         USHORT              CCXScanTime;                // Time out to wait for beacon and probe response
2105         UCHAR               CCXReqType;                 // Current processing CCX request type
2106         BSS_TABLE           CCXBssTab;                  // BSS Table
2107         UCHAR               FrameReportBuf[2048];       // Buffer for creating frame report
2108         USHORT              FrameReportLen;             // Current Frame report length
2109         ULONG               CLBusyBytes;                // Save the total bytes received durning channel load scan time
2110         USHORT              RPIDensity[8];              // Array for RPI density collection
2111         // Start address of each BSS table within FrameReportBuf
2112         // It's important to update the RxPower of the corresponding Bss
2113         USHORT              BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2114         USHORT              BeaconToken;                // Token for beacon report
2115         ULONG               LastBssIndex;               // Most current reported Bss index
2116         RM_REQUEST_ACTION   MeasurementRequest[16];     // Saved measurement request
2117         UCHAR               RMReqCnt;                   // Number of measurement request saved.
2118         UCHAR               CurrentRMReqIdx;            // Number of measurement request saved.
2119         BOOLEAN             ParallelReq;                // Parallel measurement, only one request performed,
2120                                                                                                         // It must be the same channel with maximum duration
2121         USHORT              ParallelDuration;           // Maximum duration for parallel measurement
2122         UCHAR               ParallelChannel;            // Only one channel with parallel measurement
2123         USHORT              IAPPToken;                  // IAPP dialog token
2124         UCHAR               CCXQosECWMin;               // Cisco QOS ECWMin for AC 0
2125         UCHAR               CCXQosECWMax;               // Cisco QOS ECWMax for AC 0
2126         // Hack for channel load and noise histogram parameters
2127         UCHAR               NHFactor;                   // Parameter for Noise histogram
2128         UCHAR               CLFactor;                   // Parameter for channel load
2129
2130         UCHAR               KRK[16];        //Key Refresh Key.
2131         UCHAR               BTK[32];        //Base Transient Key
2132         BOOLEAN             CCKMLinkUpFlag;
2133         ULONG               CCKMRN;    //(Re)Association request number.
2134         LARGE_INTEGER       CCKMBeaconAtJoinTimeStamp;  //TSF timer for Re-assocaite to the new AP
2135         UCHAR               AironetCellPowerLimit;      //in dBm
2136         UCHAR               AironetIPAddress[4];        //eg. 192.168.1.1
2137         BOOLEAN             CCXAdjacentAPReportFlag;    //flag for determining report Assoc Lost time
2138         CHAR                CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2139         UCHAR               CCXAdjacentAPSsidLen;               // the actual ssid length in used
2140         UCHAR               CCXAdjacentAPBssid[MAC_ADDR_LEN];         //Adjacent AP's BSSID report
2141         USHORT              CCXAdjacentAPChannel;
2142         ULONG               CCXAdjacentAPLinkDownTime;  //for Spec S32.
2143
2144         RALINK_TIMER_STRUCT     StaQuickResponeForRateUpTimer;
2145         BOOLEAN                         StaQuickResponeForRateUpTimerRunning;
2146
2147         UCHAR                   DtimCount;      // 0.. DtimPeriod-1
2148         UCHAR                   DtimPeriod;     // default = 3
2149
2150 #ifdef QOS_DLS_SUPPORT
2151         RT_802_11_DLS           DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2152         UCHAR                           DlsReplayCounter[8];
2153 #endif // QOS_DLS_SUPPORT //
2154         ////////////////////////////////////////////////////////////////////////////////////////
2155         // This is only for WHQL test.
2156         BOOLEAN                         WhqlTest;
2157         ////////////////////////////////////////////////////////////////////////////////////////
2158
2159     RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2160     // Fast Roaming
2161         BOOLEAN                 bFastRoaming;       // 0:disable fast roaming, 1:enable fast roaming
2162         CHAR                    dBmToRoam;          // the condition to roam when receiving Rssi less than this value. It's negative value.
2163
2164 #ifdef WPA_SUPPLICANT_SUPPORT
2165     BOOLEAN             IEEE8021X;
2166     BOOLEAN             IEEE8021x_required_keys;
2167     CIPHER_KEY          DesireSharedKey[4];     // Record user desired WEP keys
2168     UCHAR               DesireSharedKeyId;
2169
2170     // 0: driver ignores wpa_supplicant
2171     // 1: wpa_supplicant initiates scanning and AP selection
2172     // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2173     UCHAR               WpaSupplicantUP;
2174         UCHAR                           WpaSupplicantScanCount;
2175 #endif // WPA_SUPPLICANT_SUPPORT //
2176
2177     CHAR                dev_name[16];
2178     USHORT              OriDevType;
2179
2180     BOOLEAN             bTGnWifiTest;
2181         BOOLEAN                     bScanReqIsFromWebUI;
2182
2183         HTTRANSMIT_SETTING                              HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2184         DESIRED_TRANSMIT_SETTING        DesiredTransmitSetting;
2185         RT_HT_PHY_INFO                                  DesiredHtPhyInfo;
2186         BOOLEAN                                                 bAutoTxRateSwitch;
2187
2188
2189 #ifdef EXT_BUILD_CHANNEL_LIST
2190         UCHAR                           IEEE80211dClientMode;
2191         UCHAR                           StaOriCountryCode[3];
2192         UCHAR                           StaOriGeography;
2193 #endif // EXT_BUILD_CHANNEL_LIST //
2194 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2195
2196 // This data structure keep the current active BSS/IBSS's configuration that this STA
2197 // had agreed upon joining the network. Which means these parameters are usually decided
2198 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2199 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2200 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2201 // the current active settings.
2202 typedef struct _STA_ACTIVE_CONFIG {
2203         USHORT      Aid;
2204         USHORT      AtimWin;                // in kusec; IBSS parameter set element
2205         USHORT      CapabilityInfo;
2206         USHORT      CfpMaxDuration;
2207         USHORT      CfpPeriod;
2208
2209         // Copy supported rate from desired AP's beacon. We are trying to match
2210         // AP's supported and extended rate settings.
2211         UCHAR       SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2212         UCHAR       ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2213         UCHAR       SupRateLen;
2214         UCHAR       ExtRateLen;
2215         // Copy supported ht from desired AP's beacon. We are trying to match
2216         RT_HT_PHY_INFO          SupportedPhyInfo;
2217         RT_HT_CAPABILITY        SupportedHtPhy;
2218 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2219 #endif // CONFIG_STA_SUPPORT //
2220
2221 #ifdef RT2870
2222 typedef struct   RT_ADD_PAIRWISE_KEY_ENTRY {
2223         NDIS_802_11_MAC_ADDRESS         MacAddr;
2224         USHORT                          MacTabMatchWCID;        // ASIC
2225         CIPHER_KEY      CipherKey;
2226 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2227 #endif // RT2870 //
2228
2229 // ----------- start of AP --------------------------
2230 // AUTH-RSP State Machine Aux data structure
2231 typedef struct _AP_MLME_AUX {
2232         UCHAR               Addr[MAC_ADDR_LEN];
2233         USHORT              Alg;
2234         CHAR                Challenge[CIPHER_TEXT_LEN];
2235 } AP_MLME_AUX, *PAP_MLME_AUX;
2236
2237 // structure to define WPA Group Key Rekey Interval
2238 typedef struct PACKED _RT_802_11_WPA_REKEY {
2239         ULONG ReKeyMethod;          // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2240         ULONG ReKeyInterval;        // time-based: seconds, packet-based: kilo-packets
2241 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2242
2243 typedef struct _MAC_TABLE_ENTRY {
2244         //Choose 1 from ValidAsWDS and ValidAsCLI  to validize.
2245         BOOLEAN         ValidAsCLI;             // Sta mode, set this TRUE after Linkup,too.
2246         BOOLEAN         ValidAsWDS;     // This is WDS Entry. only for AP mode.
2247         BOOLEAN         ValidAsApCli;   //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2248         BOOLEAN         ValidAsMesh;
2249         BOOLEAN         ValidAsDls;     // This is DLS Entry. only for STA mode.
2250         BOOLEAN         isCached;
2251         BOOLEAN         bIAmBadAtheros;
2252
2253         UCHAR           EnqueueEapolStartTimerRunning;  // Enqueue EAPoL-Start for triggering EAP SM
2254         //jan for wpa
2255         // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2256         UCHAR           CMTimerRunning;
2257         UCHAR           apidx;                  // MBSS number
2258         UCHAR           RSNIE_Len;
2259         UCHAR           RSN_IE[MAX_LEN_OF_RSNIE];
2260         UCHAR           ANonce[LEN_KEY_DESC_NONCE];
2261         UCHAR           R_Counter[LEN_KEY_DESC_REPLAY];
2262         UCHAR           PTK[64];
2263         UCHAR           ReTryCounter;
2264         RALINK_TIMER_STRUCT                 RetryTimer;
2265         RALINK_TIMER_STRUCT                                     EnqueueStartForPSKTimer;        // A timer which enqueue EAPoL-Start for triggering PSK SM
2266         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;   // This should match to whatever microsoft defined
2267         NDIS_802_11_WEP_STATUS              WepStatus;
2268         AP_WPA_STATE    WpaState;
2269         GTK_STATE       GTKState;
2270         USHORT          PortSecured;
2271         NDIS_802_11_PRIVACY_FILTER  PrivacyFilter;      // PrivacyFilter enum for 802.1X
2272         CIPHER_KEY      PairwiseKey;
2273         PVOID           pAd;
2274     INT                         PMKID_CacheIdx;
2275     UCHAR                       PMKID[LEN_PMKID];
2276
2277
2278         UCHAR           Addr[MAC_ADDR_LEN];
2279         UCHAR           PsMode;
2280         SST             Sst;
2281         AUTH_STATE      AuthState; // for SHARED KEY authentication state machine used only
2282         BOOLEAN                 IsReassocSta;   // Indicate whether this is a reassociation procedure
2283         USHORT          Aid;
2284         USHORT          CapabilityInfo;
2285         UCHAR           LastRssi;
2286         ULONG           NoDataIdleCount;
2287         UINT16                  StationKeepAliveCount; // unit: second
2288         ULONG           PsQIdleCount;
2289         QUEUE_HEADER    PsQueue;
2290
2291         UINT32                  StaConnectTime;         // the live time of this station since associated with AP
2292
2293
2294 #ifdef DOT11_N_SUPPORT
2295         BOOLEAN                 bSendBAR;
2296         USHORT                  NoBADataCountDown;
2297
2298         UINT32                  CachedBuf[16];          // UINT (4 bytes) for alignment
2299         UINT                    TxBFCount; // 3*3
2300 #endif // DOT11_N_SUPPORT //
2301         UINT                    FIFOCount;
2302         UINT                    DebugFIFOCount;
2303         UINT                    DebugTxCount;
2304     BOOLEAN                     bDlsInit;
2305
2306
2307 //====================================================
2308 //WDS entry needs these
2309 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2310         UINT                    MatchWDSTabIdx;
2311         UCHAR           MaxSupportedRate;
2312         UCHAR           CurrTxRate;
2313         UCHAR           CurrTxRateIndex;
2314         // to record the each TX rate's quality. 0 is best, the bigger the worse.
2315         USHORT          TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2316 //      USHORT          OneSecTxOkCount;
2317         UINT32                  OneSecTxNoRetryOkCount;
2318         UINT32          OneSecTxRetryOkCount;
2319         UINT32          OneSecTxFailCount;
2320         UINT32                  ContinueTxFailCnt;
2321         UINT32          CurrTxRateStableTime; // # of second in current TX rate
2322         UCHAR           TxRateUpPenalty;      // extra # of second penalty due to last unstable condition
2323 //====================================================
2324
2325
2326
2327 #ifdef CONFIG_STA_SUPPORT
2328 #ifdef QOS_DLS_SUPPORT
2329         UINT                    MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2330 #endif // QOS_DLS_SUPPORT //
2331 #endif // CONFIG_STA_SUPPORT //
2332
2333         BOOLEAN         fNoisyEnvironment;
2334         BOOLEAN                 fLastSecAccordingRSSI;
2335         UCHAR           LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2336         CHAR                    LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2337         ULONG                   LastTxOkCount;
2338         UCHAR           PER[MAX_STEP_OF_TX_RATE_SWITCH];
2339
2340         // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2341         // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2342         // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2343         // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2344         ULONG           ClientStatusFlags;
2345
2346         // TODO: Shall we move that to DOT11_N_SUPPORT???
2347         HTTRANSMIT_SETTING      HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2348
2349 #ifdef DOT11_N_SUPPORT
2350         // HT EWC MIMO-N used parameters
2351         USHORT          RXBAbitmap;     // fill to on-chip  RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2352         USHORT          TXBAbitmap;     // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2353         USHORT          TXAutoBAbitmap;
2354         USHORT          BADeclineBitmap;
2355         USHORT          BARecWcidArray[NUM_OF_TID];     // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2356         USHORT          BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2357         USHORT          BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2358
2359         // 802.11n features.
2360         UCHAR           MpduDensity;
2361         UCHAR           MaxRAmpduFactor;
2362         UCHAR           AMsduSize;
2363         UCHAR           MmpsMode;       // MIMO power save more.
2364
2365         HT_CAPABILITY_IE                HTCapability;
2366
2367 #ifdef DOT11N_DRAFT3
2368         UCHAR           BSS2040CoexistenceMgmtSupport;
2369 #endif // DOT11N_DRAFT3 //
2370 #endif // DOT11_N_SUPPORT //
2371
2372         BOOLEAN         bAutoTxRateSwitch;
2373
2374         UCHAR       RateLen;
2375         struct _MAC_TABLE_ENTRY *pNext;
2376     USHORT      TxSeq[NUM_OF_TID];
2377         USHORT          NonQosDataSeq;
2378
2379         RSSI_SAMPLE     RssiSample;
2380
2381         UINT32                  TXMCSExpected[16];
2382         UINT32                  TXMCSSuccessful[16];
2383         UINT32                  TXMCSFailed[16];
2384         UINT32                  TXMCSAutoFallBack[16][16];
2385
2386 #ifdef CONFIG_STA_SUPPORT
2387         ULONG                   LastBeaconRxTime;
2388 #endif // CONFIG_STA_SUPPORT //
2389 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2390
2391 typedef struct _MAC_TABLE {
2392         USHORT                  Size;
2393         MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2394         MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2395         QUEUE_HEADER    McastPsQueue;
2396         ULONG           PsQIdleCount;
2397         BOOLEAN         fAnyStationInPsm;
2398         BOOLEAN         fAnyStationBadAtheros;  // Check if any Station is atheros 802.11n Chip.  We need to use RTS/CTS with Atheros 802,.11n chip.
2399         BOOLEAN                 fAnyTxOPForceDisable;   // Check if it is necessary to disable BE TxOP
2400         BOOLEAN                 fAllStationAsRalink;    // Check if all stations are ralink-chipset
2401 #ifdef DOT11_N_SUPPORT
2402         BOOLEAN         fAnyStationIsLegacy;    // Check if I use legacy rate to transmit to my BSS Station/
2403         BOOLEAN         fAnyStationNonGF;               // Check if any Station can't support GF.
2404         BOOLEAN         fAnyStation20Only;              // Check if any Station can't support GF.
2405         BOOLEAN                 fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2406         BOOLEAN         fAnyBASession;   // Check if there is BA session.  Force turn on RTS/CTS
2407 #endif // DOT11_N_SUPPORT //
2408 } MAC_TABLE, *PMAC_TABLE;
2409
2410 #ifdef DOT11_N_SUPPORT
2411 #define IS_HT_STA(_pMacEntry)   \
2412         (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2413
2414 #define IS_HT_RATE(_pMacEntry)  \
2415         (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2416
2417 #define PEER_IS_HT_RATE(_pMacEntry)     \
2418         (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2419 #endif // DOT11_N_SUPPORT //
2420
2421 typedef struct _WDS_ENTRY {
2422         BOOLEAN         Valid;
2423         UCHAR           Addr[MAC_ADDR_LEN];
2424         ULONG           NoDataIdleCount;
2425         struct _WDS_ENTRY *pNext;
2426 } WDS_ENTRY, *PWDS_ENTRY;
2427
2428 typedef struct  _WDS_TABLE_ENTRY {
2429         USHORT                  Size;
2430         UCHAR           WdsAddr[MAC_ADDR_LEN];
2431         WDS_ENTRY       *Hash[HASH_TABLE_SIZE];
2432         WDS_ENTRY       Content[MAX_LEN_OF_MAC_TABLE];
2433         UCHAR           MaxSupportedRate;
2434         UCHAR           CurrTxRate;
2435         USHORT          TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2436         USHORT          OneSecTxOkCount;
2437         USHORT          OneSecTxRetryOkCount;
2438         USHORT          OneSecTxFailCount;
2439         ULONG           CurrTxRateStableTime; // # of second in current TX rate
2440         UCHAR           TxRateUpPenalty;      // extra # of second penalty due to last unstable condition
2441 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2442
2443 typedef struct _RT_802_11_WDS_ENTRY {
2444         PNET_DEV                        dev;
2445         UCHAR                           Valid;
2446         UCHAR                           PhyMode;
2447         UCHAR                           PeerWdsAddr[MAC_ADDR_LEN];
2448         UCHAR                           MacTabMatchWCID;        // ASIC
2449         NDIS_802_11_WEP_STATUS  WepStatus;
2450         UCHAR                                   KeyIdx;
2451         CIPHER_KEY              WdsKey;
2452         HTTRANSMIT_SETTING                              HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2453         RT_HT_PHY_INFO                                  DesiredHtPhyInfo;
2454         BOOLEAN                                                 bAutoTxRateSwitch;
2455         DESIRED_TRANSMIT_SETTING        DesiredTransmitSetting; // Desired transmit setting.
2456 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2457
2458 typedef struct _WDS_TABLE {
2459         UCHAR               Mode;
2460         ULONG               Size;
2461         RT_802_11_WDS_ENTRY     WdsEntry[MAX_WDS_ENTRY];
2462 } WDS_TABLE, *PWDS_TABLE;
2463
2464 typedef struct _APCLI_STRUCT {
2465         PNET_DEV                                dev;
2466 #ifdef RTL865X_SOC
2467         unsigned int            mylinkid;
2468 #endif
2469         BOOLEAN                 Enable; // Set it as 1 if the apcli interface was configured to "1"  or by iwpriv cmd "ApCliEnable"
2470         BOOLEAN                 Valid;  // Set it as 1 if the apcli interface associated success to remote AP.
2471         UCHAR                                   MacTabWCID;     //WCID value, which point to the entry of ASIC Mac table.
2472         UCHAR                   SsidLen;
2473         CHAR                    Ssid[MAX_LEN_OF_SSID];
2474
2475         UCHAR                   CfgSsidLen;
2476         CHAR                    CfgSsid[MAX_LEN_OF_SSID];
2477         UCHAR                   CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2478         UCHAR                   CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2479
2480         ULONG                   ApCliRcvBeaconTime;
2481
2482         ULONG                   CtrlCurrState;
2483         ULONG                   SyncCurrState;
2484         ULONG                   AuthCurrState;
2485         ULONG                   AssocCurrState;
2486         ULONG                                   WpaPskCurrState;
2487
2488         USHORT                  AuthReqCnt;
2489         USHORT                  AssocReqCnt;
2490
2491         ULONG                   ClientStatusFlags;
2492         UCHAR                   MpduDensity;
2493
2494         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;   // This should match to whatever microsoft defined
2495         NDIS_802_11_WEP_STATUS              WepStatus;
2496
2497         // Add to support different cipher suite for WPA2/WPA mode
2498         NDIS_802_11_ENCRYPTION_STATUS           GroupCipher;            // Multicast cipher suite
2499         NDIS_802_11_ENCRYPTION_STATUS           PairCipher;                     // Unicast cipher suite
2500         BOOLEAN                                                         bMixCipher;                     // Indicate current Pair & Group use different cipher suites
2501         USHORT                                                          RsnCapability;
2502
2503         UCHAR           PSK[100];                               // reserve PSK key material
2504         UCHAR       PSKLen;
2505         UCHAR       PMK[32];                // WPA PSK mode PMK
2506         //UCHAR       PTK[64];                // WPA PSK mode PTK
2507         UCHAR           GTK[32];                                // GTK from authenticator
2508
2509         //CIPHER_KEY            PairwiseKey;
2510         CIPHER_KEY      SharedKey[SHARE_KEY_NUM];
2511         UCHAR           DefaultKeyId;
2512
2513         // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2514         //UCHAR       PortSecured;
2515
2516         // store RSN_IE built by driver
2517         UCHAR           RSN_IE[MAX_LEN_OF_RSNIE];  // The content saved here should be convert to little-endian format.
2518         UCHAR           RSNIE_Len;
2519
2520         // For WPA countermeasures
2521         ULONG       LastMicErrorTime;   // record last MIC error time
2522         //ULONG       MicErrCnt;          // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2523         BOOLEAN                 bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2524
2525         // For WPA-PSK supplicant state
2526         //WPA_STATE     WpaState;           // Default is SS_NOTUSE
2527         //UCHAR         ReplayCounter[8];
2528         //UCHAR         ANonce[32];         // ANonce for WPA-PSK from authenticator
2529         UCHAR           SNonce[32];         // SNonce for WPA-PSK
2530         UCHAR                   GNonce[32];                     // GNonce for WPA-PSK from authenticator
2531
2532         HTTRANSMIT_SETTING                              HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2533         RT_HT_PHY_INFO                                  DesiredHtPhyInfo;
2534         BOOLEAN                                                 bAutoTxRateSwitch;
2535         DESIRED_TRANSMIT_SETTING        DesiredTransmitSetting; // Desired transmit setting.
2536 } APCLI_STRUCT, *PAPCLI_STRUCT;
2537
2538 // ----------- end of AP ----------------------------
2539
2540 #ifdef BLOCK_NET_IF
2541 typedef struct _BLOCK_QUEUE_ENTRY
2542 {
2543         BOOLEAN SwTxQueueBlockFlag;
2544         LIST_HEADER NetIfList;
2545 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2546 #endif // BLOCK_NET_IF //
2547
2548
2549 struct wificonf
2550 {
2551         BOOLEAN bShortGI;
2552         BOOLEAN bGreenField;
2553 };
2554
2555
2556
2557
2558 typedef struct _INF_PCI_CONFIG
2559 {
2560         PUCHAR                  CSRBaseAddress;     // PCI MMIO Base Address, all access will use
2561 }INF_PCI_CONFIG;
2562
2563 typedef struct _INF_USB_CONFIG
2564 {
2565         UINT                BulkInEpAddr;               // bulk-in endpoint address
2566         UINT                BulkOutEpAddr[6];   // bulk-out endpoint address
2567
2568 }INF_USB_CONFIG;
2569
2570 #ifdef IKANOS_VX_1X0
2571         typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2572
2573         struct IKANOS_TX_INFO
2574         {
2575                 struct net_device *netdev;
2576                 IkanosWlanTxCbFuncP *fp;
2577         };
2578 #endif // IKANOS_VX_1X0 //
2579
2580 #ifdef DBG_DIAGNOSE
2581 #define DIAGNOSE_TIME   10   // 10 sec
2582 typedef struct _RtmpDiagStrcut_
2583 {       // Diagnosis Related element
2584         unsigned char           inited;
2585         unsigned char   qIdx;
2586         unsigned char   ArrayStartIdx;
2587         unsigned char           ArrayCurIdx;
2588         // Tx Related Count
2589         USHORT                  TxDataCnt[DIAGNOSE_TIME];
2590         USHORT                  TxFailCnt[DIAGNOSE_TIME];
2591 //      USHORT                  TxDescCnt[DIAGNOSE_TIME][16];           // TxDesc queue length in scale of 0~14, >=15
2592         USHORT                  TxDescCnt[DIAGNOSE_TIME][24]; // 3*3    // TxDesc queue length in scale of 0~14, >=15
2593 //      USHORT                  TxMcsCnt[DIAGNOSE_TIME][16];                    // TxDate MCS Count in range from 0 to 15, step in 1.
2594         USHORT                  TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2595         USHORT                  TxSWQueCnt[DIAGNOSE_TIME][9];           // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2596
2597         USHORT                  TxAggCnt[DIAGNOSE_TIME];
2598         USHORT                  TxNonAggCnt[DIAGNOSE_TIME];
2599 //      USHORT                  TxAMPDUCnt[DIAGNOSE_TIME][16];          // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2600         USHORT                  TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2601         USHORT                  TxRalinkCnt[DIAGNOSE_TIME];                     // TxRalink Aggregation Count in 1 sec scale.
2602         USHORT                  TxAMSDUCnt[DIAGNOSE_TIME];                      // TxAMSUD Aggregation Count in 1 sec scale.
2603
2604         // Rx Related Count
2605         USHORT                  RxDataCnt[DIAGNOSE_TIME];                       // Rx Total Data count.
2606         USHORT                  RxCrcErrCnt[DIAGNOSE_TIME];
2607 //      USHORT                  RxMcsCnt[DIAGNOSE_TIME][16];            // Rx MCS Count in range from 0 to 15, step in 1.
2608         USHORT                  RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2609 }RtmpDiagStruct;
2610 #endif // DBG_DIAGNOSE //
2611
2612
2613 //
2614 //  The miniport adapter structure
2615 //
2616 typedef struct _RTMP_ADAPTER
2617 {
2618         PVOID                                   OS_Cookie;      // save specific structure relative to OS
2619         PNET_DEV                                net_dev;
2620         ULONG                                   VirtualIfCnt;
2621
2622
2623
2624         NDIS_SPIN_LOCK          irq_lock;
2625         UCHAR                   irq_disabled;
2626
2627 #ifdef RT2870
2628 /*****************************************************************************************/
2629 /*      USB related parameters                                                           */
2630 /*****************************************************************************************/
2631         struct usb_config_descriptor            *config;
2632         UINT                                                            BulkInEpAddr;           // bulk-in endpoint address
2633         UINT                                                            BulkOutEpAddr[6];       // bulk-out endpoint address
2634
2635         UINT                                                            NumberOfPipes;
2636         USHORT                                                          BulkOutMaxPacketSize;
2637         USHORT                                                          BulkInMaxPacketSize;
2638
2639         //======Control Flags
2640         LONG                            PendingIoCount;
2641         ULONG                                           BulkFlags;
2642         BOOLEAN                     bUsbTxBulkAggre;    // Flags for bulk out data priority
2643
2644
2645         //======Timer Thread
2646         RT2870_TIMER_QUEUE              TimerQ;
2647         NDIS_SPIN_LOCK                  TimerQLock;
2648
2649
2650         //======Cmd Thread
2651         CmdQ                                    CmdQ;
2652         NDIS_SPIN_LOCK                  CmdQLock;                               // CmdQLock spinlock
2653
2654         BOOLEAN                                 TimerFunc_kill;
2655         BOOLEAN                                 mlme_kill;
2656
2657
2658         //======Semaphores (event)
2659         struct semaphore                        mlme_semaphore;                 /* to sleep thread on   */
2660         struct semaphore                        RTUSBCmd_semaphore;             /* to sleep thread on   */
2661         struct semaphore                        RTUSBTimer_semaphore;
2662 #ifdef INF_AMAZON_SE
2663         struct semaphore                        UsbVendorReq_semaphore;
2664         PVOID                                           UsbVendorReqBuf;
2665 #endif // INF_AMAZON_SE //
2666         struct completion                       TimerQComplete;
2667         struct completion                       mlmeComplete;
2668         struct completion                       CmdQComplete;
2669         wait_queue_head_t                       *wait;
2670 #endif // RT2870 //
2671
2672
2673 /*****************************************************************************************/
2674         /*      Both PCI/USB related parameters                                                  */
2675 /*****************************************************************************************/
2676
2677
2678 /*****************************************************************************************/
2679 /*      Tx related parameters                                                           */
2680 /*****************************************************************************************/
2681         BOOLEAN                 DeQueueRunning[NUM_OF_TX_RING];  // for ensuring RTUSBDeQueuePacket get call once
2682         NDIS_SPIN_LOCK          DeQueueLock[NUM_OF_TX_RING];
2683
2684 #ifdef RT2870
2685         // Data related context and AC specified, 4 AC supported
2686         NDIS_SPIN_LOCK                  BulkOutLock[6];                 // BulkOut spinlock for 4 ACs
2687         NDIS_SPIN_LOCK                  MLMEBulkOutLock;        // MLME BulkOut lock
2688
2689         HT_TX_CONTEXT                   TxContext[NUM_OF_TX_RING];
2690         NDIS_SPIN_LOCK                  TxContextQueueLock[NUM_OF_TX_RING];             // TxContextQueue spinlock
2691
2692         // 4 sets of Bulk Out index and pending flag
2693         UCHAR                                   NextBulkOutIndex[4];    // only used for 4 EDCA bulkout pipe
2694
2695         BOOLEAN                                 BulkOutPending[6];      // used for total 6 bulkout pipe
2696         UCHAR                                   bulkResetPipeid;
2697         BOOLEAN                                 MgmtBulkPending;
2698         ULONG                                   bulkResetReq[6];
2699 #endif // RT2870 //
2700
2701         // resource for software backlog queues
2702         QUEUE_HEADER            TxSwQueue[NUM_OF_TX_RING];  // 4 AC + 1 HCCA
2703         NDIS_SPIN_LOCK          TxSwQueueLock[NUM_OF_TX_RING];  // TxSwQueue spinlock
2704
2705         RTMP_DMABUF             MgmtDescRing;                   // Shared memory for MGMT descriptors
2706         RTMP_MGMT_RING          MgmtRing;
2707         NDIS_SPIN_LOCK          MgmtRingLock;                   // Prio Ring spinlock
2708
2709
2710 /*****************************************************************************************/
2711 /*      Rx related parameters                                                           */
2712 /*****************************************************************************************/
2713
2714
2715 #ifdef RT2870
2716         RX_CONTEXT                              RxContext[RX_RING_SIZE];  // 1 for redundant multiple IRP bulk in.
2717         NDIS_SPIN_LOCK                  BulkInLock;                             // BulkIn spinlock for 4 ACs
2718         UCHAR                                   PendingRx;                              // The Maxima pending Rx value should be        RX_RING_SIZE.
2719         UCHAR                                   NextRxBulkInIndex;              // Indicate the current RxContext Index which hold by Host controller.
2720         UCHAR                                   NextRxBulkInReadIndex;  // Indicate the current RxContext Index which driver can read & process it.
2721         ULONG                                   NextRxBulkInPosition;   // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2722         ULONG                                   TransferBufferLength;   // current length of the packet buffer
2723         ULONG                                   ReadPosition;                   // current read position in a packet buffer
2724 #endif // RT2870 //
2725
2726
2727 /*****************************************************************************************/
2728 /*      ASIC related parameters                                                          */
2729 /*****************************************************************************************/
2730         UINT32                  MACVersion;             // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2731
2732         // ---------------------------
2733         // E2PROM
2734         // ---------------------------
2735         ULONG                   EepromVersion;          // byte 0: version, byte 1: revision, byte 2~3: unused
2736         UCHAR                   EEPROMAddressNum;       // 93c46=6  93c66=8
2737         USHORT                  EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2738         BOOLEAN                 EepromAccess;
2739         UCHAR                   EFuseTag;
2740         ULONG                   FirmwareVersion;        // byte 0: Minor version, byte 1: Major version, otherwise unused.
2741
2742         // ---------------------------
2743         // BBP Control
2744         // ---------------------------
2745         UCHAR                   BbpWriteLatch[140];     // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2746         UCHAR                   BbpRssiToDbmDelta;
2747         BBP_R66_TUNING          BbpTuning;
2748
2749         // ----------------------------
2750         // RFIC control
2751         // ----------------------------
2752         UCHAR                   RfIcType;       // RFIC_xxx
2753         ULONG                   RfFreqOffset;   // Frequency offset for channel switching
2754         RTMP_RF_REGS            LatchRfRegs;    // latch th latest RF programming value since RF IC doesn't support READ
2755
2756         EEPROM_ANTENNA_STRUC    Antenna;                            // Since ANtenna definition is different for a & g. We need to save it for future reference.
2757         EEPROM_NIC_CONFIG2_STRUC    NicConfig2;
2758
2759         // This soft Rx Antenna Diversity mechanism is used only when user set
2760         // RX Antenna = DIVERSITY ON
2761         SOFT_RX_ANT_DIVERSITY   RxAnt;
2762
2763         UCHAR                   RFProgSeq;
2764         CHANNEL_TX_POWER        TxPower[MAX_NUM_OF_CHANNELS];       // Store Tx power value for all channels.
2765         CHANNEL_TX_POWER        ChannelList[MAX_NUM_OF_CHANNELS];   // list all supported channels for site survey
2766         CHANNEL_11J_TX_POWER    TxPower11J[MAX_NUM_OF_11JCHANNELS];       // 802.11j channel and bw
2767         CHANNEL_11J_TX_POWER    ChannelList11J[MAX_NUM_OF_11JCHANNELS];   // list all supported channels for site survey
2768
2769         UCHAR                   ChannelListNum;                     // number of channel in ChannelList[]
2770         UCHAR                                   Bbp94;
2771         BOOLEAN                                 BbpForCCK;
2772         ULONG           Tx20MPwrCfgABand[5];
2773         ULONG           Tx20MPwrCfgGBand[5];
2774         ULONG           Tx40MPwrCfgABand[5];
2775         ULONG           Tx40MPwrCfgGBand[5];
2776
2777         BOOLEAN     bAutoTxAgcA;                // Enable driver auto Tx Agc control
2778         UCHAR       TssiRefA;                                   // Store Tssi reference value as 25 temperature.
2779         UCHAR       TssiPlusBoundaryA[5];               // Tssi boundary for increase Tx power to compensate.
2780         UCHAR       TssiMinusBoundaryA[5];              // Tssi boundary for decrease Tx power to compensate.
2781         UCHAR       TxAgcStepA;                                 // Store Tx TSSI delta increment / decrement value
2782         CHAR            TxAgcCompensateA;                       // Store the compensation (TxAgcStep * (idx-1))
2783
2784         BOOLEAN     bAutoTxAgcG;                // Enable driver auto Tx Agc control
2785         UCHAR       TssiRefG;                                   // Store Tssi reference value as 25 temperature.
2786         UCHAR       TssiPlusBoundaryG[5];               // Tssi boundary for increase Tx power to compensate.
2787         UCHAR       TssiMinusBoundaryG[5];              // Tssi boundary for decrease Tx power to compensate.
2788         UCHAR       TxAgcStepG;                                 // Store Tx TSSI delta increment / decrement value
2789         CHAR            TxAgcCompensateG;                       // Store the compensation (TxAgcStep * (idx-1))
2790
2791         //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2792         CHAR            BGRssiOffset0;                          // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2793         CHAR            BGRssiOffset1;                          // Store B/G RSSI#1 Offset value
2794         CHAR            BGRssiOffset2;                          // Store B/G RSSI#2 Offset value
2795         //---
2796
2797         //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2798         CHAR            ARssiOffset0;                           // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2799         CHAR            ARssiOffset1;                           // Store A RSSI#1 Offset value
2800         CHAR            ARssiOffset2;                           // Store A RSSI#2 Offset value
2801         //---
2802
2803         CHAR            BLNAGain;                                       // Store B/G external LNA#0 value on EEPROM 0x44h
2804         CHAR            ALNAGain0;                                      // Store A external LNA#0 value for ch36~64
2805         CHAR            ALNAGain1;                                      // Store A external LNA#1 value for ch100~128
2806         CHAR            ALNAGain2;                                      // Store A external LNA#2 value for ch132~165
2807
2808         // ----------------------------
2809         // LED control
2810         // ----------------------------
2811         MCU_LEDCS_STRUC         LedCntl;
2812         USHORT                          Led1;   // read from EEPROM 0x3c
2813         USHORT                          Led2;   // EEPROM 0x3e
2814         USHORT                          Led3;   // EEPROM 0x40
2815         UCHAR                           LedIndicatorStregth;
2816         UCHAR                           RssiSingalstrengthOffet;
2817     BOOLEAN                             bLedOnScanning;
2818         UCHAR                           LedStatus;
2819
2820 /*****************************************************************************************/
2821 /*      802.11 related parameters                                                        */
2822 /*****************************************************************************************/
2823         // outgoing BEACON frame buffer and corresponding TXD
2824         TXWI_STRUC                      BeaconTxWI;
2825         PUCHAR                                          BeaconBuf;
2826         USHORT                                          BeaconOffset[HW_BEACON_MAX_COUNT];
2827
2828         // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2829         PSPOLL_FRAME                    PsPollFrame;
2830         HEADER_802_11                   NullFrame;
2831
2832 #ifdef RT2870
2833         TX_CONTEXT                              BeaconContext[BEACON_RING_SIZE];
2834         TX_CONTEXT                              NullContext;
2835         TX_CONTEXT                              PsPollContext;
2836         TX_CONTEXT                              RTSContext;
2837 #endif // RT2870 //
2838
2839
2840
2841 //=========AP===========
2842
2843
2844 //=======STA===========
2845 #ifdef CONFIG_STA_SUPPORT
2846 /* Modified by Wu Xi-Kun 4/21/2006 */
2847         // -----------------------------------------------
2848         // STA specific configuration & operation status
2849         // used only when pAd->OpMode == OPMODE_STA
2850         // -----------------------------------------------
2851         STA_ADMIN_CONFIG        StaCfg;           // user desired settings
2852         STA_ACTIVE_CONFIG       StaActive;         // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2853         CHAR                    nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2854         NDIS_MEDIA_STATE        PreMediaState;
2855 #endif // CONFIG_STA_SUPPORT //
2856
2857 //=======Common===========
2858         // OP mode: either AP or STA
2859         UCHAR                   OpMode;                     // OPMODE_STA, OPMODE_AP
2860
2861         NDIS_MEDIA_STATE        IndicateMediaState;                     // Base on Indication state, default is NdisMediaStateDisConnected
2862
2863
2864         // MAT related parameters
2865
2866         // configuration: read from Registry & E2PROM
2867         BOOLEAN                 bLocalAdminMAC;             // Use user changed MAC
2868         UCHAR                   PermanentAddress[MAC_ADDR_LEN];    // Factory default MAC address
2869         UCHAR                   CurrentAddress[MAC_ADDR_LEN];      // User changed MAC address
2870
2871         // ------------------------------------------------------
2872         // common configuration to both OPMODE_STA and OPMODE_AP
2873         // ------------------------------------------------------
2874         COMMON_CONFIG           CommonCfg;
2875         MLME_STRUCT             Mlme;
2876
2877         // AP needs those vaiables for site survey feature.
2878         MLME_AUX                MlmeAux;           // temporary settings used during MLME state machine
2879         BSS_TABLE               ScanTab;           // store the latest SCAN result
2880
2881         //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2882         MAC_TABLE                 MacTab;     // ASIC on-chip WCID entry table.  At TX, ASIC always use key according to this on-chip table.
2883         NDIS_SPIN_LOCK          MacTabLock;
2884
2885 #ifdef DOT11_N_SUPPORT
2886         BA_TABLE                        BATable;
2887 #endif // DOT11_N_SUPPORT //
2888         NDIS_SPIN_LOCK          BATabLock;
2889         RALINK_TIMER_STRUCT RECBATimer;
2890
2891         // encryption/decryption KEY tables
2892         CIPHER_KEY              SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2893
2894                 // RX re-assembly buffer for fragmentation
2895         FRAGMENT_FRAME          FragFrame;                  // Frame storage for fragment frame
2896
2897         // various Counters
2898         COUNTER_802_3           Counters8023;               // 802.3 counters
2899         COUNTER_802_11          WlanCounters;               // 802.11 MIB counters
2900         COUNTER_RALINK          RalinkCounters;             // Ralink propriety counters
2901         COUNTER_DRS             DrsCounters;                // counters for Dynamic TX Rate Switching
2902         PRIVATE_STRUC           PrivateInfo;                // Private information & counters
2903
2904         // flags, see fRTMP_ADAPTER_xxx flags
2905         ULONG                   Flags;                      // Represent current device status
2906
2907         // current TX sequence #
2908         USHORT                  Sequence;
2909
2910         // Control disconnect / connect event generation
2911         //+++Didn't used anymore
2912         ULONG                   LinkDownTime;
2913         //---
2914         ULONG                   LastRxRate;
2915         ULONG                   LastTxRate;
2916         //+++Used only for Station
2917         BOOLEAN                 bConfigChanged;         // Config Change flag for the same SSID setting
2918         //---
2919
2920         ULONG                   ExtraInfo;              // Extra information for displaying status
2921         ULONG                   SystemErrorBitmap;      // b0: E2PROM version error
2922
2923         //+++Didn't used anymore
2924         ULONG                   MacIcVersion;           // MAC/BBP serial interface issue solved after ver.D
2925         //---
2926
2927         // ---------------------------
2928         // System event log
2929         // ---------------------------
2930         RT_802_11_EVENT_TABLE   EventTab;
2931
2932
2933         BOOLEAN         HTCEnable;
2934
2935         /*****************************************************************************************/
2936         /*      Statistic related parameters                                                     */
2937         /*****************************************************************************************/
2938 #ifdef RT2870
2939         ULONG                                           BulkOutDataOneSecCount;
2940         ULONG                                           BulkInDataOneSecCount;
2941         ULONG                                           BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2942         ULONG                                           watchDogRxCnt;
2943         ULONG                                           watchDogRxOverFlowCnt;
2944         ULONG                                           watchDogTxPendingCnt[NUM_OF_TX_RING];
2945 #endif // RT2870 //
2946
2947         BOOLEAN                                         bUpdateBcnCntDone;
2948         ULONG                                           watchDogMacDeadlock;    // prevent MAC/BBP into deadlock condition
2949         // ----------------------------
2950         // DEBUG paramerts
2951         // ----------------------------
2952         //ULONG         DebugSetting[4];
2953         BOOLEAN         bBanAllBaSetup;
2954         BOOLEAN         bPromiscuous;
2955
2956         // ----------------------------
2957         // rt2860c emulation-use Parameters
2958         // ----------------------------
2959         ULONG           rtsaccu[30];
2960         ULONG           ctsaccu[30];
2961         ULONG           cfendaccu[30];
2962         ULONG           bacontent[16];
2963         ULONG           rxint[RX_RING_SIZE+1];
2964         UCHAR           rcvba[60];
2965         BOOLEAN         bLinkAdapt;
2966         BOOLEAN         bForcePrintTX;
2967         BOOLEAN         bForcePrintRX;
2968         BOOLEAN         bDisablescanning;               //defined in RT2870 USB
2969         BOOLEAN         bStaFifoTest;
2970         BOOLEAN         bProtectionTest;
2971         BOOLEAN         bHCCATest;
2972         BOOLEAN         bGenOneHCCA;
2973         BOOLEAN         bBroadComHT;
2974         //+++Following add from RT2870 USB.
2975         ULONG           BulkOutReq;
2976         ULONG           BulkOutComplete;
2977         ULONG           BulkOutCompleteOther;
2978         ULONG           BulkOutCompleteCancel;  // seems not use now?
2979         ULONG           BulkInReq;
2980         ULONG           BulkInComplete;
2981         ULONG           BulkInCompleteFail;
2982         //---
2983
2984     struct wificonf                     WIFItestbed;
2985
2986 #ifdef DOT11_N_SUPPORT
2987         struct reordering_mpdu_pool mpdu_blk_pool;
2988 #endif // DOT11_N_SUPPORT //
2989
2990         ULONG                                   OneSecondnonBEpackets;          // record non BE packets per second
2991
2992 #if WIRELESS_EXT >= 12
2993     struct iw_statistics    iw_stats;
2994 #endif
2995
2996         struct net_device_stats stats;
2997
2998 #ifdef BLOCK_NET_IF
2999         BLOCK_QUEUE_ENTRY               blockQueueTab[NUM_OF_TX_RING];
3000 #endif // BLOCK_NET_IF //
3001
3002
3003
3004 #ifdef MULTIPLE_CARD_SUPPORT
3005         INT32                                   MC_RowID;
3006         UCHAR                                   MC_FileName[256];
3007 #endif // MULTIPLE_CARD_SUPPORT //
3008
3009         ULONG                                   TbttTickCount;
3010 #ifdef PCI_MSI_SUPPORT
3011         BOOLEAN                                 HaveMsi;
3012 #endif // PCI_MSI_SUPPORT //
3013
3014
3015         UCHAR                                   is_on;
3016
3017 #define TIME_BASE                       (1000000/OS_HZ)
3018 #define TIME_ONE_SECOND         (1000000/TIME_BASE)
3019         UCHAR                                   flg_be_adjust;
3020         ULONG                                   be_adjust_last_time;
3021
3022 #ifdef IKANOS_VX_1X0
3023         struct IKANOS_TX_INFO   IkanosTxInfo;
3024         struct IKANOS_TX_INFO   IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3025 #endif // IKANOS_VX_1X0 //
3026
3027
3028 #ifdef DBG_DIAGNOSE
3029         RtmpDiagStruct  DiagStruct;
3030 #endif // DBG_DIAGNOSE //
3031
3032
3033         UINT8                                   PM_FlgSuspend;
3034
3035 #ifdef RT30xx
3036 //======efuse
3037         BOOLEAN         bUseEfuse;
3038         BOOLEAN         bEEPROMFile;
3039 #endif // RT30xx //
3040
3041 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3042
3043 //
3044 // Cisco IAPP format
3045 //
3046 typedef struct  _CISCO_IAPP_CONTENT_
3047 {
3048         USHORT     Length;        //IAPP Length
3049         UCHAR      MessageType;      //IAPP type
3050         UCHAR      FunctionCode;     //IAPP function type
3051         UCHAR      DestinaionMAC[MAC_ADDR_LEN];
3052         UCHAR      SourceMAC[MAC_ADDR_LEN];
3053         USHORT     Tag;           //Tag(element IE) - Adjacent AP report
3054         USHORT     TagLength;     //Length of element not including 4 byte header
3055         UCHAR      OUI[4];           //0x00, 0x40, 0x96, 0x00
3056         UCHAR      PreviousAP[MAC_ADDR_LEN];       //MAC Address of access point
3057         USHORT     Channel;
3058         USHORT     SsidLen;
3059         UCHAR      Ssid[MAX_LEN_OF_SSID];
3060         USHORT     Seconds;          //Seconds that the client has been disassociated.
3061 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3062
3063 #define DELAYINTMASK            0x0003fffb
3064 #define INTMASK                         0x0003fffb
3065 #define IndMask                         0x0003fffc
3066 #define RxINT                           0x00000005      // Delayed Rx or indivi rx
3067 #define TxDataInt                       0x000000fa      // Delayed Tx or indivi tx
3068 #define TxMgmtInt                       0x00000102      // Delayed Tx or indivi tx
3069 #define TxCoherent                      0x00020000      // tx coherent
3070 #define RxCoherent                      0x00010000      // rx coherent
3071 #define McuCommand                      0x00000200      // mcu
3072 #define PreTBTTInt                      0x00001000      // Pre-TBTT interrupt
3073 #define TBTTInt                         0x00000800              // TBTT interrupt
3074 #define GPTimeOutInt                    0x00008000              // GPtimeout interrupt
3075 #define AutoWakeupInt           0x00004000              // AutoWakeupInt interrupt
3076 #define FifoStaFullInt                  0x00002000      //  fifo statistics full interrupt
3077
3078
3079 typedef struct _RX_BLK_
3080 {
3081 //      RXD_STRUC               RxD; // sample
3082         RT28XX_RXD_STRUC        RxD;
3083         PRXWI_STRUC                     pRxWI;
3084         PHEADER_802_11          pHeader;
3085         PNDIS_PACKET            pRxPacket;
3086         UCHAR                           *pData;
3087         USHORT                          DataSize;
3088         USHORT                          Flags;
3089         UCHAR                           UserPriority;   // for calculate TKIP MIC using
3090 } RX_BLK;
3091
3092
3093 #define RX_BLK_SET_FLAG(_pRxBlk, _flag)         (_pRxBlk->Flags |= _flag)
3094 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag)        (_pRxBlk->Flags & _flag)
3095 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag)       (_pRxBlk->Flags &= ~(_flag))
3096
3097
3098 #define fRX_WDS                 0x0001
3099 #define fRX_AMSDU       0x0002
3100 #define fRX_ARALINK     0x0004
3101 #define fRX_HTC         0x0008
3102 #define fRX_PAD         0x0010
3103 #define fRX_AMPDU       0x0020
3104 #define fRX_QOS                 0x0040
3105 #define fRX_INFRA               0x0080
3106 #define fRX_EAP                 0x0100
3107 #define fRX_MESH                0x0200
3108 #define fRX_APCLI               0x0400
3109 #define fRX_DLS                 0x0800
3110 #define fRX_WPI                 0x1000
3111
3112 #define LENGTH_AMSDU_SUBFRAMEHEAD       14
3113 #define LENGTH_ARALINK_SUBFRAMEHEAD     14
3114 #define LENGTH_ARALINK_HEADER_FIELD      2
3115
3116 #define TX_UNKOWN_FRAME                 0x00
3117 #define TX_MCAST_FRAME                  0x01
3118 #define TX_LEGACY_FRAME                 0x02
3119 #define TX_AMPDU_FRAME                  0x04
3120 #define TX_AMSDU_FRAME                  0x08
3121 #define TX_RALINK_FRAME                 0x10
3122 #define TX_FRAG_FRAME                   0x20
3123
3124
3125 //      Currently the sizeof(TX_BLK) is 148 bytes.
3126 typedef struct _TX_BLK_
3127 {
3128         UCHAR                           QueIdx;
3129         UCHAR                           TxFrameType;                            // Indicate the Transmission type of the all frames in one batch
3130         UCHAR                           TotalFrameNum;                          // Total frame number want to send-out in one batch
3131         USHORT                          TotalFragNum;                           // Total frame fragments required in one batch
3132         USHORT                          TotalFrameLen;                          // Total length of all frames want to send-out in one batch
3133
3134         QUEUE_HEADER            TxPacketList;
3135         MAC_TABLE_ENTRY         *pMacEntry;                                     // NULL: packet with 802.11 RA field is multicast/broadcast address
3136         HTTRANSMIT_SETTING      *pTransmit;
3137
3138         // Following structure used for the characteristics of a specific packet.
3139         PNDIS_PACKET            pPacket;
3140         PUCHAR                          pSrcBufHeader;                          // Reference to the head of sk_buff->data
3141         PUCHAR                          pSrcBufData;                            // Reference to the sk_buff->data, will changed depends on hanlding progresss
3142         UINT                            SrcBufLen;                                      // Length of packet payload which not including Layer 2 header
3143         PUCHAR                          pExtraLlcSnapEncap;                     // NULL means no extra LLC/SNAP is required
3144         UCHAR                           HeaderBuf[80];                          // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3145         UCHAR                           MpduHeaderLen;                          // 802.11 header length NOT including the padding
3146         UCHAR                           HdrPadLen;                                      // recording Header Padding Length;
3147         UCHAR                           apidx;                                          // The interface associated to this packet
3148         UCHAR                           Wcid;                                           // The MAC entry associated to this packet
3149         UCHAR                           UserPriority;                           // priority class of packet
3150         UCHAR                           FrameGap;                                       // what kind of IFS this packet use
3151         UCHAR                           MpduReqNum;                                     // number of fragments of this frame
3152         UCHAR                           TxRate;                                         // TODO: Obsoleted? Should change to MCS?
3153         UCHAR                           CipherAlg;                                      // cipher alogrithm
3154         PCIPHER_KEY                     pKey;
3155
3156
3157
3158         USHORT                          Flags;                                          //See following definitions for detail.
3159
3160         //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3161         ULONG                           Priv;                                           // Hardware specific value saved in here.
3162 } TX_BLK, *PTX_BLK;
3163
3164
3165 #define fTX_bRtsRequired                0x0001  // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3166 #define fTX_bAckRequired        0x0002  // the packet need ack response
3167 #define fTX_bPiggyBack                  0x0004  // Legacy device use Piggback or not
3168 #define fTX_bHTRate             0x0008  // allow to use HT rate
3169 //#define fTX_bForceLowRate       0x0010        // force to use Low Rate
3170 #define fTX_bForceNonQoS        0x0010  // force to transmit frame without WMM-QoS in HT mode
3171 #define fTX_bAllowFrag          0x0020  // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3172 #define fTX_bMoreData                   0x0040  // there are more data packets in PowerSave Queue
3173 #define fTX_bWMM                                0x0080  // QOS Data
3174
3175 #define fTX_bClearEAPFrame              0x0100
3176
3177
3178 #ifdef CONFIG_STA_SUPPORT
3179 #endif // CONFIG_STA_SUPPORT //
3180
3181
3182
3183 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value)       \
3184                 do {                                                                            \
3185                         if (value)                                                              \
3186                                 (_pTxBlk->Flags |= _flag)                       \
3187                         else                                                                    \
3188                                 (_pTxBlk->Flags &= ~(_flag))            \
3189                 }while(0)
3190
3191 #define TX_BLK_SET_FLAG(_pTxBlk, _flag)         (_pTxBlk->Flags |= _flag)
3192 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag)        (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3193 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag)       (_pTxBlk->Flags &= ~(_flag))
3194
3195
3196
3197
3198
3199 //------------------------------------------------------------------------------------------
3200
3201
3202
3203 #ifdef RT_BIG_ENDIAN
3204 static inline VOID      WriteBackToDescriptor(
3205         IN  PUCHAR                      Dest,
3206         IN      PUCHAR                  Src,
3207     IN  BOOLEAN                 DoEncrypt,
3208         IN  ULONG           DescriptorType)
3209 {
3210         UINT32 *p1, *p2;
3211
3212         p1 = ((UINT32 *)Dest);
3213         p2 = ((UINT32 *)Src);
3214
3215         *p1 = *p2;
3216         *(p1+2) = *(p2+2);
3217         *(p1+3) = *(p2+3);
3218         *(p1+1) = *(p2+1); // Word 1; this must be written back last
3219 }
3220
3221 /*
3222         ========================================================================
3223
3224         Routine Description:
3225                 Endian conversion of Tx/Rx descriptor .
3226
3227         Arguments:
3228                 pAd     Pointer to our adapter
3229                 pData                   Pointer to Tx/Rx descriptor
3230                 DescriptorType  Direction of the frame
3231
3232         Return Value:
3233                 None
3234
3235         Note:
3236                 Call this function when read or update descriptor
3237         ========================================================================
3238 */
3239 static inline VOID      RTMPWIEndianChange(
3240         IN      PUCHAR                  pData,
3241         IN      ULONG                   DescriptorType)
3242 {
3243         int size;
3244         int i;
3245
3246         size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3247
3248         if(DescriptorType == TYPE_TXWI)
3249         {
3250                 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));            // Byte 0~3
3251                 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4)));      // Byte 4~7
3252         }
3253         else
3254         {
3255                 for(i=0; i < size/4 ; i++)
3256                         *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3257         }
3258 }
3259
3260 /*
3261         ========================================================================
3262
3263         Routine Description:
3264                 Endian conversion of Tx/Rx descriptor .
3265
3266         Arguments:
3267                 pAd     Pointer to our adapter
3268                 pData                   Pointer to Tx/Rx descriptor
3269                 DescriptorType  Direction of the frame
3270
3271         Return Value:
3272                 None
3273
3274         Note:
3275                 Call this function when read or update descriptor
3276         ========================================================================
3277 */
3278
3279 #ifdef RT2870
3280 static inline VOID      RTMPDescriptorEndianChange(
3281         IN      PUCHAR                  pData,
3282         IN      ULONG                   DescriptorType)
3283 {
3284         *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3285 }
3286 #endif // RT2870 //
3287 /*
3288         ========================================================================
3289
3290         Routine Description:
3291                 Endian conversion of all kinds of 802.11 frames .
3292
3293         Arguments:
3294                 pAd     Pointer to our adapter
3295                 pData                   Pointer to the 802.11 frame structure
3296                 Dir                     Direction of the frame
3297                 FromRxDoneInt   Caller is from RxDone interrupt
3298
3299         Return Value:
3300                 None
3301
3302         Note:
3303                 Call this function when read or update buffer data
3304         ========================================================================
3305 */
3306 static inline VOID      RTMPFrameEndianChange(
3307         IN      PRTMP_ADAPTER   pAd,
3308         IN      PUCHAR                  pData,
3309         IN      ULONG                   Dir,
3310         IN      BOOLEAN                 FromRxDoneInt)
3311 {
3312         PHEADER_802_11 pFrame;
3313         PUCHAR  pMacHdr;
3314
3315         // swab 16 bit fields - Frame Control field
3316         if(Dir == DIR_READ)
3317         {
3318                 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3319         }
3320
3321         pFrame = (PHEADER_802_11) pData;
3322         pMacHdr = (PUCHAR) pFrame;
3323
3324         // swab 16 bit fields - Duration/ID field
3325         *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3326
3327         // swab 16 bit fields - Sequence Control field
3328         *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3329
3330         if(pFrame->FC.Type == BTYPE_MGMT)
3331         {
3332                 switch(pFrame->FC.SubType)
3333                 {
3334                         case SUBTYPE_ASSOC_REQ:
3335                         case SUBTYPE_REASSOC_REQ:
3336                                 // swab 16 bit fields - CapabilityInfo field
3337                                 pMacHdr += sizeof(HEADER_802_11);
3338                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3339
3340                                 // swab 16 bit fields - Listen Interval field
3341                                 pMacHdr += 2;
3342                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3343                                 break;
3344
3345                         case SUBTYPE_ASSOC_RSP:
3346                         case SUBTYPE_REASSOC_RSP:
3347                                 // swab 16 bit fields - CapabilityInfo field
3348                                 pMacHdr += sizeof(HEADER_802_11);
3349                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3350
3351                                 // swab 16 bit fields - Status Code field
3352                                 pMacHdr += 2;
3353                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3354
3355                                 // swab 16 bit fields - AID field
3356                                 pMacHdr += 2;
3357                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3358                                 break;
3359
3360                         case SUBTYPE_AUTH:
3361                                 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3362                                 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3363                                 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3364                                         break;
3365                                 else
3366                                 {
3367                                         // swab 16 bit fields - Auth Alg No. field
3368                                         pMacHdr += sizeof(HEADER_802_11);
3369                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3370
3371                                         // swab 16 bit fields - Auth Seq No. field
3372                                         pMacHdr += 2;
3373                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3374
3375                                         // swab 16 bit fields - Status Code field
3376                                         pMacHdr += 2;
3377                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3378                                 }
3379                                 break;
3380
3381                         case SUBTYPE_BEACON:
3382                         case SUBTYPE_PROBE_RSP:
3383                                 // swab 16 bit fields - BeaconInterval field
3384                                 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3385                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3386
3387                                 // swab 16 bit fields - CapabilityInfo field
3388                                 pMacHdr += sizeof(USHORT);
3389                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3390                                 break;
3391
3392                         case SUBTYPE_DEAUTH:
3393                         case SUBTYPE_DISASSOC:
3394                                 // swab 16 bit fields - Reason code field
3395                                 pMacHdr += sizeof(HEADER_802_11);
3396                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3397                                 break;
3398                 }
3399         }
3400         else if( pFrame->FC.Type == BTYPE_DATA )
3401         {
3402         }
3403         else if(pFrame->FC.Type == BTYPE_CNTL)
3404         {
3405                 switch(pFrame->FC.SubType)
3406                 {
3407                         case SUBTYPE_BLOCK_ACK_REQ:
3408                                 {
3409                                         PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3410                                         *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3411                                         pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3412                                 }
3413                                 break;
3414                         case SUBTYPE_BLOCK_ACK:
3415                                 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3416                                 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3417                                 break;
3418
3419                         case SUBTYPE_ACK:
3420                                 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3421                                 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3422                                 break;
3423                 }
3424         }
3425         else
3426         {
3427                 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3428         }
3429
3430         // swab 16 bit fields - Frame Control
3431         if(Dir == DIR_WRITE)
3432         {
3433                 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3434         }
3435 }
3436 #endif // RT_BIG_ENDIAN //
3437
3438
3439 static inline VOID ConvertMulticastIP2MAC(
3440         IN PUCHAR pIpAddr,
3441         IN PUCHAR *ppMacAddr,
3442         IN UINT16 ProtoType)
3443 {
3444         if (pIpAddr == NULL)
3445                 return;
3446
3447         if (ppMacAddr == NULL || *ppMacAddr == NULL)
3448                 return;
3449
3450         switch (ProtoType)
3451         {
3452                 case ETH_P_IPV6:
3453 //                      memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3454                         *(*ppMacAddr) = 0x33;
3455                         *(*ppMacAddr + 1) = 0x33;
3456                         *(*ppMacAddr + 2) = pIpAddr[12];
3457                         *(*ppMacAddr + 3) = pIpAddr[13];
3458                         *(*ppMacAddr + 4) = pIpAddr[14];
3459                         *(*ppMacAddr + 5) = pIpAddr[15];
3460                         break;
3461
3462                 case ETH_P_IP:
3463                 default:
3464 //                      memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3465                         *(*ppMacAddr) = 0x01;
3466                         *(*ppMacAddr + 1) = 0x00;
3467                         *(*ppMacAddr + 2) = 0x5e;
3468                         *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3469                         *(*ppMacAddr + 4) = pIpAddr[2];
3470                         *(*ppMacAddr + 5) = pIpAddr[3];
3471                         break;
3472         }
3473
3474         return;
3475 }
3476
3477 BOOLEAN RTMPCheckForHang(
3478         IN  NDIS_HANDLE MiniportAdapterContext
3479         );
3480
3481 VOID  RTMPHalt(
3482         IN  NDIS_HANDLE MiniportAdapterContext
3483         );
3484
3485 //
3486 //  Private routines in rtmp_init.c
3487 //
3488 NDIS_STATUS RTMPAllocAdapterBlock(
3489         IN PVOID                        handle,
3490         OUT PRTMP_ADAPTER   *ppAdapter
3491         );
3492
3493 NDIS_STATUS RTMPAllocTxRxRingMemory(
3494         IN  PRTMP_ADAPTER   pAd
3495         );
3496
3497 NDIS_STATUS RTMPFindAdapter(
3498         IN  PRTMP_ADAPTER   pAd,
3499         IN  NDIS_HANDLE     WrapperConfigurationContext
3500         );
3501
3502 NDIS_STATUS     RTMPReadParametersHook(
3503         IN      PRTMP_ADAPTER pAd
3504         );
3505
3506 VOID RTMPFreeAdapter(
3507         IN  PRTMP_ADAPTER   pAd
3508         );
3509
3510 NDIS_STATUS NICReadRegParameters(
3511         IN  PRTMP_ADAPTER       pAd,
3512         IN  NDIS_HANDLE         WrapperConfigurationContext
3513         );
3514
3515 #ifdef RT30xx
3516 VOID NICInitRT30xxRFRegisters(
3517         IN PRTMP_ADAPTER pAd);
3518 #endif // RT30xx //
3519
3520 VOID NICReadEEPROMParameters(
3521         IN  PRTMP_ADAPTER       pAd,
3522         IN      PUCHAR                          mac_addr);
3523
3524 VOID NICInitAsicFromEEPROM(
3525         IN  PRTMP_ADAPTER       pAd);
3526
3527 VOID NICInitTxRxRingAndBacklogQueue(
3528         IN  PRTMP_ADAPTER   pAd);
3529
3530 NDIS_STATUS NICInitializeAdapter(
3531         IN  PRTMP_ADAPTER   pAd,
3532         IN   BOOLEAN    bHardReset);
3533
3534 NDIS_STATUS NICInitializeAsic(
3535         IN  PRTMP_ADAPTER   pAd,
3536         IN  BOOLEAN             bHardReset);
3537
3538 VOID NICIssueReset(
3539         IN  PRTMP_ADAPTER   pAd);
3540
3541 VOID RTMPRingCleanUp(
3542         IN  PRTMP_ADAPTER   pAd,
3543         IN  UCHAR           RingType);
3544
3545 VOID RxTest(
3546         IN  PRTMP_ADAPTER   pAd);
3547
3548 NDIS_STATUS DbgSendPacket(
3549         IN  PRTMP_ADAPTER   pAd,
3550         IN  PNDIS_PACKET    pPacket);
3551
3552 VOID UserCfgInit(
3553         IN  PRTMP_ADAPTER   pAd);
3554
3555 VOID NICResetFromError(
3556         IN  PRTMP_ADAPTER   pAd);
3557
3558 VOID NICEraseFirmware(
3559         IN PRTMP_ADAPTER pAd);
3560
3561 NDIS_STATUS NICLoadFirmware(
3562         IN  PRTMP_ADAPTER   pAd);
3563
3564 NDIS_STATUS NICLoadRateSwitchingParams(
3565         IN PRTMP_ADAPTER pAd);
3566
3567 BOOLEAN NICCheckForHang(
3568         IN  PRTMP_ADAPTER   pAd);
3569
3570 VOID NICUpdateFifoStaCounters(
3571         IN PRTMP_ADAPTER pAd);
3572
3573 VOID NICUpdateRawCounters(
3574         IN  PRTMP_ADAPTER   pAd);
3575
3576 ULONG   RTMPNotAllZero(
3577         IN      PVOID   pSrc1,
3578         IN      ULONG   Length);
3579
3580 VOID RTMPZeroMemory(
3581         IN  PVOID   pSrc,
3582         IN  ULONG   Length);
3583
3584 ULONG RTMPCompareMemory(
3585         IN  PVOID   pSrc1,
3586         IN  PVOID   pSrc2,
3587         IN  ULONG   Length);
3588
3589 VOID RTMPMoveMemory(
3590         OUT PVOID   pDest,
3591         IN  PVOID   pSrc,
3592         IN  ULONG   Length);
3593
3594 VOID AtoH(
3595         char    *src,
3596         UCHAR   *dest,
3597         int             destlen);
3598
3599 UCHAR BtoH(
3600         char ch);
3601
3602 VOID RTMPPatchMacBbpBug(
3603         IN  PRTMP_ADAPTER   pAd);
3604
3605 VOID RTMPPatchCardBus(
3606         IN      PRTMP_ADAPTER   pAdapter);
3607
3608 VOID RTMPPatchRalinkCardBus(
3609         IN      PRTMP_ADAPTER   pAdapter,
3610         IN      ULONG                   Bus);
3611
3612 ULONG RTMPReadCBConfig(
3613         IN      ULONG   Bus,
3614         IN      ULONG   Slot,
3615         IN      ULONG   Func,
3616         IN      ULONG   Offset);
3617
3618 VOID RTMPWriteCBConfig(
3619         IN      ULONG   Bus,
3620         IN      ULONG   Slot,
3621         IN      ULONG   Func,
3622         IN      ULONG   Offset,
3623         IN      ULONG   Value);
3624
3625 VOID RTMPInitTimer(
3626         IN  PRTMP_ADAPTER           pAd,
3627         IN  PRALINK_TIMER_STRUCT    pTimer,
3628         IN  PVOID                   pTimerFunc,
3629         IN      PVOID                                   pData,
3630         IN  BOOLEAN                 Repeat);
3631
3632 VOID RTMPSetTimer(
3633         IN  PRALINK_TIMER_STRUCT    pTimer,
3634         IN  ULONG                   Value);
3635
3636
3637 VOID RTMPModTimer(
3638         IN      PRALINK_TIMER_STRUCT    pTimer,
3639         IN      ULONG                                   Value);
3640
3641 VOID RTMPCancelTimer(
3642         IN  PRALINK_TIMER_STRUCT    pTimer,
3643         OUT BOOLEAN                 *pCancelled);
3644
3645 VOID RTMPSetLED(
3646         IN PRTMP_ADAPTER        pAd,
3647         IN UCHAR                        Status);
3648
3649 VOID RTMPSetSignalLED(
3650         IN PRTMP_ADAPTER        pAd,
3651         IN NDIS_802_11_RSSI Dbm);
3652
3653 VOID RTMPEnableRxTx(
3654         IN PRTMP_ADAPTER        pAd);
3655
3656 //
3657 // prototype in action.c
3658 //
3659 VOID ActionStateMachineInit(
3660     IN  PRTMP_ADAPTER   pAd,
3661     IN  STATE_MACHINE *S,
3662     OUT STATE_MACHINE_FUNC Trans[]);
3663
3664 VOID MlmeADDBAAction(
3665     IN PRTMP_ADAPTER pAd,
3666     IN MLME_QUEUE_ELEM *Elem);
3667
3668 VOID MlmeDELBAAction(
3669     IN PRTMP_ADAPTER pAd,
3670     IN MLME_QUEUE_ELEM *Elem);
3671
3672 VOID MlmeDLSAction(
3673     IN PRTMP_ADAPTER pAd,
3674     IN MLME_QUEUE_ELEM *Elem);
3675
3676 VOID MlmeInvalidAction(
3677     IN PRTMP_ADAPTER pAd,
3678     IN MLME_QUEUE_ELEM *Elem);
3679
3680 VOID MlmeQOSAction(
3681     IN PRTMP_ADAPTER pAd,
3682     IN MLME_QUEUE_ELEM *Elem);
3683
3684 #ifdef DOT11_N_SUPPORT
3685 VOID PeerAddBAReqAction(
3686         IN PRTMP_ADAPTER pAd,
3687         IN MLME_QUEUE_ELEM *Elem);
3688
3689 VOID PeerAddBARspAction(
3690         IN PRTMP_ADAPTER pAd,
3691         IN MLME_QUEUE_ELEM *Elem);
3692
3693 VOID PeerDelBAAction(
3694         IN PRTMP_ADAPTER pAd,
3695         IN MLME_QUEUE_ELEM *Elem);
3696
3697 VOID PeerBAAction(
3698     IN PRTMP_ADAPTER pAd,
3699     IN MLME_QUEUE_ELEM *Elem);
3700 #endif // DOT11_N_SUPPORT //
3701
3702 VOID SendPSMPAction(
3703         IN PRTMP_ADAPTER        pAd,
3704         IN UCHAR                        Wcid,
3705         IN UCHAR                        Psmp);
3706
3707
3708 #ifdef DOT11N_DRAFT3
3709 VOID SendBSS2040CoexistMgmtAction(
3710         IN      PRTMP_ADAPTER   pAd,
3711         IN      UCHAR   Wcid,
3712         IN      UCHAR   apidx,
3713         IN      UCHAR   InfoReq);
3714
3715 VOID SendNotifyBWActionFrame(
3716         IN PRTMP_ADAPTER pAd,
3717         IN UCHAR  Wcid,
3718         IN UCHAR apidx);
3719
3720 BOOLEAN ChannelSwitchSanityCheck(
3721         IN      PRTMP_ADAPTER   pAd,
3722         IN    UCHAR  Wcid,
3723         IN    UCHAR  NewChannel,
3724         IN    UCHAR  Secondary);
3725
3726 VOID ChannelSwitchAction(
3727         IN      PRTMP_ADAPTER   pAd,
3728         IN    UCHAR  Wcid,
3729         IN    UCHAR  Channel,
3730         IN    UCHAR  Secondary);
3731
3732 ULONG BuildIntolerantChannelRep(
3733         IN      PRTMP_ADAPTER   pAd,
3734         IN    PUCHAR  pDest);
3735
3736 VOID Update2040CoexistFrameAndNotify(
3737         IN      PRTMP_ADAPTER   pAd,
3738         IN    UCHAR  Wcid,
3739         IN      BOOLEAN bAddIntolerantCha);
3740
3741 VOID Send2040CoexistAction(
3742         IN      PRTMP_ADAPTER   pAd,
3743         IN    UCHAR  Wcid,
3744         IN      BOOLEAN bAddIntolerantCha);
3745 #endif // DOT11N_DRAFT3 //
3746
3747 VOID PeerRMAction(
3748         IN PRTMP_ADAPTER pAd,
3749         IN MLME_QUEUE_ELEM *Elem);
3750
3751 VOID PeerPublicAction(
3752         IN PRTMP_ADAPTER pAd,
3753         IN MLME_QUEUE_ELEM *Elem);
3754
3755 #ifdef CONFIG_STA_SUPPORT
3756 VOID StaPublicAction(
3757         IN PRTMP_ADAPTER pAd,
3758         IN UCHAR Bss2040Coexist);
3759 #endif // CONFIG_STA_SUPPORT //
3760
3761
3762 VOID PeerBSSTranAction(
3763         IN PRTMP_ADAPTER pAd,
3764         IN MLME_QUEUE_ELEM *Elem);
3765
3766 #ifdef DOT11_N_SUPPORT
3767 VOID PeerHTAction(
3768         IN PRTMP_ADAPTER pAd,
3769         IN MLME_QUEUE_ELEM *Elem);
3770 #endif // DOT11_N_SUPPORT //
3771
3772 VOID PeerQOSAction(
3773     IN PRTMP_ADAPTER pAd,
3774     IN MLME_QUEUE_ELEM *Elem);
3775
3776 #ifdef QOS_DLS_SUPPORT
3777 VOID PeerDLSAction(
3778     IN PRTMP_ADAPTER pAd,
3779     IN MLME_QUEUE_ELEM *Elem);
3780 #endif // QOS_DLS_SUPPORT //
3781
3782 #ifdef CONFIG_STA_SUPPORT
3783 #ifdef QOS_DLS_SUPPORT
3784 VOID DlsParmFill(
3785         IN PRTMP_ADAPTER pAd,
3786         IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3787         IN PRT_802_11_DLS pDls,
3788         IN USHORT reason);
3789 #endif // QOS_DLS_SUPPORT //
3790 #endif // CONFIG_STA_SUPPORT //
3791
3792 #ifdef DOT11_N_SUPPORT
3793 VOID RECBATimerTimeout(
3794     IN PVOID SystemSpecific1,
3795     IN PVOID FunctionContext,
3796     IN PVOID SystemSpecific2,
3797     IN PVOID SystemSpecific3);
3798
3799 VOID ORIBATimerTimeout(
3800         IN      PRTMP_ADAPTER   pAd);
3801
3802 VOID SendRefreshBAR(
3803         IN      PRTMP_ADAPTER   pAd,
3804         IN      MAC_TABLE_ENTRY *pEntry);
3805 #endif // DOT11_N_SUPPORT //
3806
3807 VOID ActHeaderInit(
3808     IN  PRTMP_ADAPTER   pAd,
3809     IN OUT PHEADER_802_11 pHdr80211,
3810     IN PUCHAR Addr1,
3811     IN PUCHAR Addr2,
3812     IN PUCHAR Addr3);
3813
3814 VOID BarHeaderInit(
3815         IN      PRTMP_ADAPTER   pAd,
3816         IN OUT PFRAME_BAR pCntlBar,
3817         IN PUCHAR pDA,
3818         IN PUCHAR pSA);
3819
3820 VOID InsertActField(
3821         IN PRTMP_ADAPTER pAd,
3822         OUT PUCHAR pFrameBuf,
3823         OUT PULONG pFrameLen,
3824         IN UINT8 Category,
3825         IN UINT8 ActCode);
3826
3827 BOOLEAN QosBADataParse(
3828         IN PRTMP_ADAPTER        pAd,
3829         IN BOOLEAN bAMSDU,
3830         IN PUCHAR p8023Header,
3831         IN UCHAR        WCID,
3832         IN UCHAR        TID,
3833         IN USHORT Sequence,
3834         IN UCHAR DataOffset,
3835         IN USHORT Datasize,
3836         IN UINT   CurRxIndex);
3837
3838 #ifdef DOT11_N_SUPPORT
3839 BOOLEAN CntlEnqueueForRecv(
3840     IN  PRTMP_ADAPTER   pAd,
3841         IN ULONG Wcid,
3842     IN ULONG MsgLen,
3843         IN PFRAME_BA_REQ pMsg);
3844
3845 VOID BaAutoManSwitch(
3846         IN      PRTMP_ADAPTER   pAd);
3847 #endif // DOT11_N_SUPPORT //
3848
3849 VOID HTIOTCheck(
3850         IN      PRTMP_ADAPTER   pAd,
3851         IN    UCHAR     BatRecIdx);
3852
3853 //
3854 // Private routines in rtmp_data.c
3855 //
3856 BOOLEAN RTMPHandleRxDoneInterrupt(
3857         IN  PRTMP_ADAPTER   pAd);
3858
3859 VOID RTMPHandleTxDoneInterrupt(
3860         IN  PRTMP_ADAPTER   pAd);
3861
3862 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3863         IN  PRTMP_ADAPTER   pAd,
3864         IN  INT_SOURCE_CSR_STRUC TxRingBitmap);
3865
3866 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3867         IN  PRTMP_ADAPTER   pAd);
3868
3869 VOID RTMPHandleTBTTInterrupt(
3870         IN  PRTMP_ADAPTER   pAd);
3871
3872 VOID RTMPHandlePreTBTTInterrupt(
3873         IN  PRTMP_ADAPTER   pAd);
3874
3875 void RTMPHandleTwakeupInterrupt(
3876         IN PRTMP_ADAPTER pAd);
3877
3878 VOID    RTMPHandleRxCoherentInterrupt(
3879         IN      PRTMP_ADAPTER   pAd);
3880
3881 BOOLEAN TxFrameIsAggregatible(
3882         IN  PRTMP_ADAPTER   pAd,
3883         IN  PUCHAR          pPrevAddr1,
3884         IN  PUCHAR          p8023hdr);
3885
3886 BOOLEAN PeerIsAggreOn(
3887     IN  PRTMP_ADAPTER   pAd,
3888     IN  ULONG          TxRate,
3889     IN  PMAC_TABLE_ENTRY pMacEntry);
3890
3891 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3892         IN  PNDIS_BUFFER    pFirstBuffer,
3893         IN  UCHAR           DesiredOffset,
3894         OUT PUCHAR          pByte0,
3895         OUT PUCHAR          pByte1);
3896
3897 NDIS_STATUS STASendPacket(
3898         IN  PRTMP_ADAPTER   pAd,
3899         IN  PNDIS_PACKET    pPacket);
3900
3901 VOID STASendPackets(
3902         IN  NDIS_HANDLE     MiniportAdapterContext,
3903         IN  PPNDIS_PACKET   ppPacketArray,
3904         IN  UINT            NumberOfPackets);
3905
3906 VOID RTMPDeQueuePacket(
3907         IN  PRTMP_ADAPTER   pAd,
3908         IN      BOOLEAN                 bIntContext,
3909         IN  UCHAR                       QueIdx,
3910         IN      UCHAR                   Max_Tx_Packets);
3911
3912 NDIS_STATUS     RTMPHardTransmit(
3913         IN PRTMP_ADAPTER        pAd,
3914         IN PNDIS_PACKET         pPacket,
3915         IN  UCHAR                       QueIdx,
3916         OUT     PULONG                  pFreeTXDLeft);
3917
3918 NDIS_STATUS     STAHardTransmit(
3919         IN PRTMP_ADAPTER        pAd,
3920         IN TX_BLK                       *pTxBlk,
3921         IN  UCHAR                       QueIdx);
3922
3923 VOID STARxEAPOLFrameIndicate(
3924         IN      PRTMP_ADAPTER   pAd,
3925         IN      MAC_TABLE_ENTRY *pEntry,
3926         IN      RX_BLK                  *pRxBlk,
3927         IN      UCHAR                   FromWhichBSSID);
3928
3929 NDIS_STATUS RTMPFreeTXDRequest(
3930         IN  PRTMP_ADAPTER   pAd,
3931         IN  UCHAR           RingType,
3932         IN  UCHAR           NumberRequired,
3933         IN      PUCHAR          FreeNumberIs);
3934
3935 NDIS_STATUS MlmeHardTransmit(
3936         IN  PRTMP_ADAPTER   pAd,
3937         IN  UCHAR       QueIdx,
3938         IN  PNDIS_PACKET    pPacket);
3939
3940 NDIS_STATUS MlmeHardTransmitMgmtRing(
3941         IN  PRTMP_ADAPTER   pAd,
3942         IN  UCHAR       QueIdx,
3943         IN  PNDIS_PACKET    pPacket);
3944
3945 NDIS_STATUS MlmeHardTransmitTxRing(
3946         IN  PRTMP_ADAPTER   pAd,
3947         IN  UCHAR       QueIdx,
3948         IN  PNDIS_PACKET    pPacket);
3949
3950 USHORT  RTMPCalcDuration(
3951         IN  PRTMP_ADAPTER   pAd,
3952         IN  UCHAR           Rate,
3953         IN  ULONG           Size);
3954
3955 VOID RTMPWriteTxWI(
3956         IN      PRTMP_ADAPTER   pAd,
3957         IN      PTXWI_STRUC             pTxWI,
3958         IN  BOOLEAN             FRAG,
3959         IN  BOOLEAN             CFACK,
3960         IN  BOOLEAN             InsTimestamp,
3961         IN      BOOLEAN                 AMPDU,
3962         IN      BOOLEAN                 Ack,
3963         IN      BOOLEAN                 NSeq,           // HW new a sequence.
3964         IN      UCHAR                   BASize,
3965         IN      UCHAR                   WCID,
3966         IN      ULONG                   Length,
3967         IN  UCHAR               PID,
3968         IN      UCHAR                   TID,
3969         IN      UCHAR                   TxRate,
3970         IN      UCHAR                   Txopmode,
3971         IN      BOOLEAN                 CfAck,
3972         IN      HTTRANSMIT_SETTING      *pTransmit);
3973
3974
3975 VOID RTMPWriteTxWI_Data(
3976         IN      PRTMP_ADAPTER           pAd,
3977         IN      OUT PTXWI_STRUC         pTxWI,
3978         IN      TX_BLK                          *pTxBlk);
3979
3980
3981 VOID RTMPWriteTxWI_Cache(
3982         IN      PRTMP_ADAPTER           pAd,
3983         IN      OUT PTXWI_STRUC         pTxWI,
3984         IN      TX_BLK                          *pTxBlk);
3985
3986 VOID RTMPWriteTxDescriptor(
3987         IN      PRTMP_ADAPTER   pAd,
3988         IN      PTXD_STRUC              pTxD,
3989         IN      BOOLEAN                 bWIV,
3990         IN      UCHAR                   QSEL);
3991
3992 VOID RTMPSuspendMsduTransmission(
3993         IN  PRTMP_ADAPTER   pAd);
3994
3995 VOID RTMPResumeMsduTransmission(
3996         IN  PRTMP_ADAPTER   pAd);
3997
3998 NDIS_STATUS MiniportMMRequest(
3999         IN  PRTMP_ADAPTER   pAd,
4000         IN      UCHAR                   QueIdx,
4001         IN      PUCHAR                  pData,
4002         IN  UINT            Length);
4003
4004 NDIS_STATUS MiniportDataMMRequest(
4005          IN  PRTMP_ADAPTER   pAd,
4006          IN  UCHAR           QueIdx,
4007          IN  PUCHAR          pData,
4008          IN  UINT            Length);
4009
4010 VOID RTMPSendNullFrame(
4011         IN  PRTMP_ADAPTER   pAd,
4012         IN  UCHAR           TxRate,
4013         IN      BOOLEAN                 bQosNull);
4014
4015 VOID RTMPSendDisassociationFrame(
4016         IN      PRTMP_ADAPTER   pAd);
4017
4018 VOID RTMPSendRTSFrame(
4019         IN  PRTMP_ADAPTER   pAd,
4020         IN  PUCHAR          pDA,
4021         IN      unsigned int    NextMpduSize,
4022         IN  UCHAR           TxRate,
4023         IN  UCHAR           RTSRate,
4024         IN  USHORT          AckDuration,
4025         IN  UCHAR           QueIdx,
4026         IN  UCHAR                       FrameGap);
4027
4028
4029 NDIS_STATUS RTMPApplyPacketFilter(
4030         IN  PRTMP_ADAPTER   pAd,
4031         IN  PRT28XX_RXD_STRUC      pRxD,
4032         IN  PHEADER_802_11  pHeader);
4033
4034 PQUEUE_HEADER   RTMPCheckTxSwQueue(
4035         IN  PRTMP_ADAPTER   pAd,
4036         OUT UCHAR           *QueIdx);
4037
4038 #ifdef CONFIG_STA_SUPPORT
4039 VOID RTMPReportMicError(
4040         IN  PRTMP_ADAPTER   pAd,
4041         IN  PCIPHER_KEY     pWpaKey);
4042
4043 VOID    WpaMicFailureReportFrame(
4044         IN  PRTMP_ADAPTER    pAd,
4045         IN  MLME_QUEUE_ELEM *Elem);
4046
4047 VOID    WpaDisassocApAndBlockAssoc(
4048     IN  PVOID SystemSpecific1,
4049     IN  PVOID FunctionContext,
4050     IN  PVOID SystemSpecific2,
4051     IN  PVOID SystemSpecific3);
4052 #endif // CONFIG_STA_SUPPORT //
4053
4054 NDIS_STATUS RTMPCloneNdisPacket(
4055         IN  PRTMP_ADAPTER   pAd,
4056         IN      BOOLEAN    pInsAMSDUHdr,
4057         IN  PNDIS_PACKET    pInPacket,
4058         OUT PNDIS_PACKET   *ppOutPacket);
4059
4060 NDIS_STATUS RTMPAllocateNdisPacket(
4061         IN  PRTMP_ADAPTER   pAd,
4062         IN  PNDIS_PACKET    *pPacket,
4063         IN  PUCHAR          pHeader,
4064         IN  UINT            HeaderLen,
4065         IN  PUCHAR          pData,
4066         IN  UINT            DataLen);
4067
4068 VOID RTMPFreeNdisPacket(
4069         IN  PRTMP_ADAPTER   pAd,
4070         IN  PNDIS_PACKET    pPacket);
4071
4072 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4073         IN PRTMP_ADAPTER    pAd,
4074         IN UCHAR            QueIdx);
4075
4076 BOOLEAN RTMPCheckDHCPFrame(
4077         IN      PRTMP_ADAPTER   pAd,
4078         IN      PNDIS_PACKET    pPacket);
4079
4080
4081 BOOLEAN RTMPCheckEtherType(
4082         IN      PRTMP_ADAPTER   pAd,
4083         IN      PNDIS_PACKET    pPacket);
4084
4085
4086 VOID RTMPCckBbpTuning(
4087         IN      PRTMP_ADAPTER   pAd,
4088         IN      UINT                    TxRate);
4089
4090 //
4091 // Private routines in rtmp_wep.c
4092 //
4093 VOID RTMPInitWepEngine(
4094         IN  PRTMP_ADAPTER   pAd,
4095         IN  PUCHAR          pKey,
4096         IN  UCHAR           KeyId,
4097         IN  UCHAR           KeyLen,
4098         IN  PUCHAR          pDest);
4099
4100 VOID RTMPEncryptData(
4101         IN  PRTMP_ADAPTER   pAd,
4102         IN  PUCHAR          pSrc,
4103         IN  PUCHAR          pDest,
4104         IN  UINT            Len);
4105
4106 BOOLEAN RTMPDecryptData(
4107         IN      PRTMP_ADAPTER   pAdapter,
4108         IN      PUCHAR                  pSrc,
4109         IN      UINT                    Len,
4110         IN      UINT                    idx);
4111
4112 BOOLEAN RTMPSoftDecryptWEP(
4113         IN PRTMP_ADAPTER        pAd,
4114         IN PUCHAR                       pData,
4115         IN ULONG                        DataByteCnt,
4116         IN PCIPHER_KEY          pGroupKey);
4117
4118 VOID RTMPSetICV(
4119         IN  PRTMP_ADAPTER   pAd,
4120         IN  PUCHAR          pDest);
4121
4122 VOID ARCFOUR_INIT(
4123         IN  PARCFOURCONTEXT Ctx,
4124         IN  PUCHAR          pKey,
4125         IN  UINT            KeyLen);
4126
4127 UCHAR   ARCFOUR_BYTE(
4128         IN  PARCFOURCONTEXT     Ctx);
4129
4130 VOID ARCFOUR_DECRYPT(
4131         IN  PARCFOURCONTEXT Ctx,
4132         IN  PUCHAR          pDest,
4133         IN  PUCHAR          pSrc,
4134         IN  UINT            Len);
4135
4136 VOID ARCFOUR_ENCRYPT(
4137         IN  PARCFOURCONTEXT Ctx,
4138         IN  PUCHAR          pDest,
4139         IN  PUCHAR          pSrc,
4140         IN  UINT            Len);
4141
4142 VOID WPAARCFOUR_ENCRYPT(
4143         IN  PARCFOURCONTEXT Ctx,
4144         IN  PUCHAR          pDest,
4145         IN  PUCHAR          pSrc,
4146         IN  UINT            Len);
4147
4148 UINT RTMP_CALC_FCS32(
4149         IN  UINT   Fcs,
4150         IN  PUCHAR  Cp,
4151         IN  INT     Len);
4152
4153 //
4154 // MLME routines
4155 //
4156
4157 // Asic/RF/BBP related functions
4158
4159 VOID AsicAdjustTxPower(
4160         IN PRTMP_ADAPTER pAd);
4161
4162 VOID    AsicUpdateProtect(
4163         IN              PRTMP_ADAPTER   pAd,
4164         IN              USHORT                  OperaionMode,
4165         IN              UCHAR                   SetMask,
4166         IN              BOOLEAN                 bDisableBGProtect,
4167         IN              BOOLEAN                 bNonGFExist);
4168
4169 VOID AsicSwitchChannel(
4170         IN  PRTMP_ADAPTER   pAd,
4171         IN      UCHAR                   Channel,
4172         IN      BOOLEAN                 bScan);
4173
4174 VOID AsicLockChannel(
4175         IN PRTMP_ADAPTER pAd,
4176         IN UCHAR Channel) ;
4177
4178 VOID AsicAntennaSelect(
4179         IN  PRTMP_ADAPTER   pAd,
4180         IN  UCHAR           Channel);
4181
4182 VOID AsicAntennaSetting(
4183         IN      PRTMP_ADAPTER   pAd,
4184         IN      ABGBAND_STATE   BandState);
4185
4186 VOID AsicRfTuningExec(
4187         IN PVOID SystemSpecific1,
4188         IN PVOID FunctionContext,
4189         IN PVOID SystemSpecific2,
4190         IN PVOID SystemSpecific3);
4191
4192 #ifdef CONFIG_STA_SUPPORT
4193 VOID AsicSleepThenAutoWakeup(
4194         IN  PRTMP_ADAPTER   pAd,
4195         IN  USHORT TbttNumToNextWakeUp);
4196
4197 VOID AsicForceSleep(
4198         IN PRTMP_ADAPTER pAd);
4199
4200 VOID AsicForceWakeup(
4201         IN PRTMP_ADAPTER pAd,
4202         IN BOOLEAN    bFromTx);
4203 #endif // CONFIG_STA_SUPPORT //
4204
4205 VOID AsicSetBssid(
4206         IN  PRTMP_ADAPTER   pAd,
4207         IN  PUCHAR pBssid);
4208
4209 VOID AsicSetMcastWC(
4210         IN PRTMP_ADAPTER pAd);
4211
4212 VOID AsicDelWcidTab(
4213         IN PRTMP_ADAPTER pAd,
4214         IN UCHAR        Wcid);
4215
4216 VOID AsicEnableRDG(
4217         IN PRTMP_ADAPTER pAd);
4218
4219 VOID AsicDisableRDG(
4220         IN PRTMP_ADAPTER pAd);
4221
4222 VOID AsicDisableSync(
4223         IN  PRTMP_ADAPTER   pAd);
4224
4225 VOID AsicEnableBssSync(
4226         IN  PRTMP_ADAPTER   pAd);
4227
4228 VOID AsicEnableIbssSync(
4229         IN  PRTMP_ADAPTER   pAd);
4230
4231 VOID AsicSetEdcaParm(
4232         IN PRTMP_ADAPTER pAd,
4233         IN PEDCA_PARM    pEdcaParm);
4234
4235 VOID AsicSetSlotTime(
4236         IN PRTMP_ADAPTER pAd,
4237         IN BOOLEAN bUseShortSlotTime);
4238
4239 VOID AsicAddSharedKeyEntry(
4240         IN PRTMP_ADAPTER pAd,
4241         IN UCHAR         BssIndex,
4242         IN UCHAR         KeyIdx,
4243         IN UCHAR         CipherAlg,
4244         IN PUCHAR        pKey,
4245         IN PUCHAR        pTxMic,
4246         IN PUCHAR        pRxMic);
4247
4248 VOID AsicRemoveSharedKeyEntry(
4249         IN PRTMP_ADAPTER pAd,
4250         IN UCHAR         BssIndex,
4251         IN UCHAR         KeyIdx);
4252
4253 VOID AsicUpdateWCIDAttribute(
4254         IN PRTMP_ADAPTER pAd,
4255         IN USHORT               WCID,
4256         IN UCHAR                BssIndex,
4257         IN UCHAR        CipherAlg,
4258         IN BOOLEAN              bUsePairewiseKeyTable);
4259
4260 VOID AsicUpdateWCIDIVEIV(
4261         IN PRTMP_ADAPTER pAd,
4262         IN USHORT               WCID,
4263         IN ULONG        uIV,
4264         IN ULONG        uEIV);
4265
4266 VOID AsicUpdateRxWCIDTable(
4267         IN PRTMP_ADAPTER pAd,
4268         IN USHORT               WCID,
4269         IN PUCHAR        pAddr);
4270
4271 VOID AsicAddKeyEntry(
4272         IN PRTMP_ADAPTER pAd,
4273         IN USHORT               WCID,
4274         IN UCHAR                BssIndex,
4275         IN UCHAR                KeyIdx,
4276         IN PCIPHER_KEY  pCipherKey,
4277         IN BOOLEAN              bUsePairewiseKeyTable,
4278         IN BOOLEAN              bTxKey);
4279
4280 VOID AsicAddPairwiseKeyEntry(
4281         IN PRTMP_ADAPTER pAd,
4282         IN PUCHAR        pAddr,
4283         IN UCHAR                WCID,
4284         IN CIPHER_KEY            *pCipherKey);
4285
4286 VOID AsicRemovePairwiseKeyEntry(
4287         IN PRTMP_ADAPTER  pAd,
4288         IN UCHAR                 BssIdx,
4289         IN UCHAR                 Wcid);
4290
4291 BOOLEAN AsicSendCommandToMcu(
4292         IN PRTMP_ADAPTER pAd,
4293         IN UCHAR         Command,
4294         IN UCHAR         Token,
4295         IN UCHAR         Arg0,
4296         IN UCHAR         Arg1);
4297
4298
4299 VOID MacAddrRandomBssid(
4300         IN  PRTMP_ADAPTER   pAd,
4301         OUT PUCHAR pAddr);
4302
4303 VOID MgtMacHeaderInit(
4304         IN  PRTMP_ADAPTER     pAd,
4305         IN OUT PHEADER_802_11 pHdr80211,
4306         IN UCHAR SubType,
4307         IN UCHAR ToDs,
4308         IN PUCHAR pDA,
4309         IN PUCHAR pBssid);
4310
4311 VOID MlmeRadioOff(
4312         IN PRTMP_ADAPTER pAd);
4313
4314 VOID MlmeRadioOn(
4315         IN PRTMP_ADAPTER pAd);
4316
4317
4318 VOID BssTableInit(
4319         IN BSS_TABLE *Tab);
4320
4321 #ifdef DOT11_N_SUPPORT
4322 VOID BATableInit(
4323         IN PRTMP_ADAPTER pAd,
4324     IN BA_TABLE *Tab);
4325 #endif // DOT11_N_SUPPORT //
4326
4327 ULONG BssTableSearch(
4328         IN BSS_TABLE *Tab,
4329         IN PUCHAR pBssid,
4330         IN UCHAR Channel);
4331
4332 ULONG BssSsidTableSearch(
4333         IN BSS_TABLE *Tab,
4334         IN PUCHAR    pBssid,
4335         IN PUCHAR    pSsid,
4336         IN UCHAR     SsidLen,
4337         IN UCHAR     Channel);
4338
4339 ULONG BssTableSearchWithSSID(
4340         IN BSS_TABLE *Tab,
4341         IN PUCHAR    Bssid,
4342         IN PUCHAR    pSsid,
4343         IN UCHAR     SsidLen,
4344         IN UCHAR     Channel);
4345
4346 VOID BssTableDeleteEntry(
4347         IN OUT  PBSS_TABLE pTab,
4348         IN      PUCHAR pBssid,
4349         IN      UCHAR Channel);
4350
4351 #ifdef DOT11_N_SUPPORT
4352 VOID BATableDeleteORIEntry(
4353         IN OUT  PRTMP_ADAPTER pAd,
4354         IN              BA_ORI_ENTRY    *pBAORIEntry);
4355
4356 VOID BATableDeleteRECEntry(
4357         IN OUT  PRTMP_ADAPTER pAd,
4358         IN              BA_REC_ENTRY    *pBARECEntry);
4359
4360 VOID BATableTearORIEntry(
4361         IN OUT  PRTMP_ADAPTER pAd,
4362         IN              UCHAR TID,
4363         IN              UCHAR Wcid,
4364         IN              BOOLEAN bForceDelete,
4365         IN              BOOLEAN ALL);
4366
4367 VOID BATableTearRECEntry(
4368         IN OUT  PRTMP_ADAPTER pAd,
4369         IN              UCHAR TID,
4370         IN              UCHAR WCID,
4371         IN              BOOLEAN ALL);
4372 #endif // DOT11_N_SUPPORT //
4373
4374 VOID  BssEntrySet(
4375         IN  PRTMP_ADAPTER   pAd,
4376         OUT PBSS_ENTRY pBss,
4377         IN PUCHAR pBssid,
4378         IN CHAR Ssid[],
4379         IN UCHAR SsidLen,
4380         IN UCHAR BssType,
4381         IN USHORT BeaconPeriod,
4382         IN PCF_PARM CfParm,
4383         IN USHORT AtimWin,
4384         IN USHORT CapabilityInfo,
4385         IN UCHAR SupRate[],
4386         IN UCHAR SupRateLen,
4387         IN UCHAR ExtRate[],
4388         IN UCHAR ExtRateLen,
4389         IN HT_CAPABILITY_IE *pHtCapability,
4390         IN ADD_HT_INFO_IE *pAddHtInfo,  // AP might use this additional ht info IE
4391         IN UCHAR                        HtCapabilityLen,
4392         IN UCHAR                        AddHtInfoLen,
4393         IN UCHAR                        NewExtChanOffset,
4394         IN UCHAR Channel,
4395         IN CHAR Rssi,
4396         IN LARGE_INTEGER TimeStamp,
4397         IN UCHAR CkipFlag,
4398         IN PEDCA_PARM pEdcaParm,
4399         IN PQOS_CAPABILITY_PARM pQosCapability,
4400         IN PQBSS_LOAD_PARM pQbssLoad,
4401         IN USHORT LengthVIE,
4402         IN PNDIS_802_11_VARIABLE_IEs pVIE);
4403
4404 ULONG  BssTableSetEntry(
4405         IN  PRTMP_ADAPTER   pAd,
4406         OUT PBSS_TABLE pTab,
4407         IN PUCHAR pBssid,
4408         IN CHAR Ssid[],
4409         IN UCHAR SsidLen,
4410         IN UCHAR BssType,
4411         IN USHORT BeaconPeriod,
4412         IN CF_PARM *CfParm,
4413         IN USHORT AtimWin,
4414         IN USHORT CapabilityInfo,
4415         IN UCHAR SupRate[],
4416         IN UCHAR SupRateLen,
4417         IN UCHAR ExtRate[],
4418         IN UCHAR ExtRateLen,
4419         IN HT_CAPABILITY_IE *pHtCapability,
4420         IN ADD_HT_INFO_IE *pAddHtInfo,  // AP might use this additional ht info IE
4421         IN UCHAR                        HtCapabilityLen,
4422         IN UCHAR                        AddHtInfoLen,
4423         IN UCHAR                        NewExtChanOffset,
4424         IN UCHAR Channel,
4425         IN CHAR Rssi,
4426         IN LARGE_INTEGER TimeStamp,
4427         IN UCHAR CkipFlag,
4428         IN PEDCA_PARM pEdcaParm,
4429         IN PQOS_CAPABILITY_PARM pQosCapability,
4430         IN PQBSS_LOAD_PARM pQbssLoad,
4431         IN USHORT LengthVIE,
4432         IN PNDIS_802_11_VARIABLE_IEs pVIE);
4433
4434 #ifdef DOT11_N_SUPPORT
4435 VOID BATableInsertEntry(
4436     IN  PRTMP_ADAPTER   pAd,
4437         IN USHORT Aid,
4438     IN USHORT           TimeOutValue,
4439         IN USHORT               StartingSeq,
4440     IN UCHAR TID,
4441         IN UCHAR BAWinSize,
4442         IN UCHAR OriginatorStatus,
4443     IN BOOLEAN IsRecipient);
4444
4445 #ifdef DOT11N_DRAFT3
4446 VOID Bss2040CoexistTimeOut(
4447         IN PVOID SystemSpecific1,
4448         IN PVOID FunctionContext,
4449         IN PVOID SystemSpecific2,
4450         IN PVOID SystemSpecific3);
4451
4452
4453 VOID  TriEventInit(
4454         IN      PRTMP_ADAPTER   pAd);
4455
4456 ULONG TriEventTableSetEntry(
4457         IN      PRTMP_ADAPTER   pAd,
4458         OUT TRIGGER_EVENT_TAB *Tab,
4459         IN PUCHAR pBssid,
4460         IN HT_CAPABILITY_IE *pHtCapability,
4461         IN UCHAR                        HtCapabilityLen,
4462         IN UCHAR                        RegClass,
4463         IN UCHAR ChannelNo);
4464
4465 VOID TriEventCounterMaintenance(
4466         IN      PRTMP_ADAPTER   pAd);
4467 #endif // DOT11N_DRAFT3 //
4468 #endif // DOT11_N_SUPPORT //
4469
4470 VOID BssTableSsidSort(
4471         IN  PRTMP_ADAPTER   pAd,
4472         OUT BSS_TABLE *OutTab,
4473         IN  CHAR Ssid[],
4474         IN  UCHAR SsidLen);
4475
4476 VOID  BssTableSortByRssi(
4477         IN OUT BSS_TABLE *OutTab);
4478
4479 VOID BssCipherParse(
4480         IN OUT  PBSS_ENTRY  pBss);
4481
4482 NDIS_STATUS  MlmeQueueInit(
4483         IN MLME_QUEUE *Queue);
4484
4485 VOID  MlmeQueueDestroy(
4486         IN MLME_QUEUE *Queue);
4487
4488 BOOLEAN MlmeEnqueue(
4489         IN PRTMP_ADAPTER pAd,
4490         IN ULONG Machine,
4491         IN ULONG MsgType,
4492         IN ULONG MsgLen,
4493         IN VOID *Msg);
4494
4495 BOOLEAN MlmeEnqueueForRecv(
4496         IN  PRTMP_ADAPTER   pAd,
4497         IN ULONG Wcid,
4498         IN ULONG TimeStampHigh,
4499         IN ULONG TimeStampLow,
4500         IN UCHAR Rssi0,
4501         IN UCHAR Rssi1,
4502         IN UCHAR Rssi2,
4503         IN ULONG MsgLen,
4504         IN PVOID Msg,
4505         IN UCHAR Signal);
4506
4507
4508 BOOLEAN MlmeDequeue(
4509         IN MLME_QUEUE *Queue,
4510         OUT MLME_QUEUE_ELEM **Elem);
4511
4512 VOID    MlmeRestartStateMachine(
4513         IN  PRTMP_ADAPTER   pAd);
4514
4515 BOOLEAN  MlmeQueueEmpty(
4516         IN MLME_QUEUE *Queue);
4517
4518 BOOLEAN  MlmeQueueFull(
4519         IN MLME_QUEUE *Queue);
4520
4521 BOOLEAN  MsgTypeSubst(
4522         IN PRTMP_ADAPTER pAd,
4523         IN PFRAME_802_11 pFrame,
4524         OUT INT *Machine,
4525         OUT INT *MsgType);
4526
4527 VOID StateMachineInit(
4528         IN STATE_MACHINE *Sm,
4529         IN STATE_MACHINE_FUNC Trans[],
4530         IN ULONG StNr,
4531         IN ULONG MsgNr,
4532         IN STATE_MACHINE_FUNC DefFunc,
4533         IN ULONG InitState,
4534         IN ULONG Base);
4535
4536 VOID StateMachineSetAction(
4537         IN STATE_MACHINE *S,
4538         IN ULONG St,
4539         ULONG Msg,
4540         IN STATE_MACHINE_FUNC F);
4541
4542 VOID StateMachinePerformAction(
4543         IN  PRTMP_ADAPTER   pAd,
4544         IN STATE_MACHINE *S,
4545         IN MLME_QUEUE_ELEM *Elem);
4546
4547 VOID Drop(
4548         IN  PRTMP_ADAPTER   pAd,
4549         IN MLME_QUEUE_ELEM *Elem);
4550
4551 VOID AssocStateMachineInit(
4552         IN  PRTMP_ADAPTER   pAd,
4553         IN  STATE_MACHINE *Sm,
4554         OUT STATE_MACHINE_FUNC Trans[]);
4555
4556 VOID ReassocTimeout(
4557         IN PVOID SystemSpecific1,
4558         IN PVOID FunctionContext,
4559         IN PVOID SystemSpecific2,
4560         IN PVOID SystemSpecific3);
4561
4562 VOID AssocTimeout(
4563         IN PVOID SystemSpecific1,
4564         IN PVOID FunctionContext,
4565         IN PVOID SystemSpecific2,
4566         IN PVOID SystemSpecific3);
4567
4568 VOID DisassocTimeout(
4569         IN PVOID SystemSpecific1,
4570         IN PVOID FunctionContext,
4571         IN PVOID SystemSpecific2,
4572         IN PVOID SystemSpecific3);
4573
4574 //----------------------------------------------
4575 VOID MlmeDisassocReqAction(
4576         IN  PRTMP_ADAPTER   pAd,
4577         IN  MLME_QUEUE_ELEM *Elem);
4578
4579 VOID MlmeAssocReqAction(
4580         IN  PRTMP_ADAPTER   pAd,
4581         IN  MLME_QUEUE_ELEM *Elem);
4582
4583 VOID MlmeReassocReqAction(
4584         IN  PRTMP_ADAPTER   pAd,
4585         IN  MLME_QUEUE_ELEM *Elem);
4586
4587 VOID MlmeDisassocReqAction(
4588         IN  PRTMP_ADAPTER   pAd,
4589         IN  MLME_QUEUE_ELEM *Elem);
4590
4591 VOID PeerAssocRspAction(
4592         IN  PRTMP_ADAPTER   pAd,
4593         IN  MLME_QUEUE_ELEM *Elem);
4594
4595 VOID PeerReassocRspAction(
4596         IN  PRTMP_ADAPTER   pAd,
4597         IN  MLME_QUEUE_ELEM *Elem);
4598
4599 VOID PeerDisassocAction(
4600         IN  PRTMP_ADAPTER   pAd,
4601         IN  MLME_QUEUE_ELEM *Elem);
4602
4603 VOID DisassocTimeoutAction(
4604         IN  PRTMP_ADAPTER   pAd,
4605         IN  MLME_QUEUE_ELEM *Elem);
4606
4607 VOID AssocTimeoutAction(
4608         IN  PRTMP_ADAPTER   pAd,
4609         IN  MLME_QUEUE_ELEM *Elem);
4610
4611 VOID  ReassocTimeoutAction(
4612         IN  PRTMP_ADAPTER   pAd,
4613         IN  MLME_QUEUE_ELEM *Elem);
4614
4615 VOID  Cls3errAction(
4616         IN  PRTMP_ADAPTER   pAd,
4617         IN  PUCHAR pAddr);
4618
4619 VOID SwitchBetweenWepAndCkip(
4620         IN PRTMP_ADAPTER pAd);
4621
4622 VOID  InvalidStateWhenAssoc(
4623         IN  PRTMP_ADAPTER   pAd,
4624         IN  MLME_QUEUE_ELEM *Elem);
4625
4626 VOID  InvalidStateWhenReassoc(
4627         IN  PRTMP_ADAPTER   pAd,
4628         IN  MLME_QUEUE_ELEM *Elem);
4629
4630 VOID InvalidStateWhenDisassociate(
4631         IN  PRTMP_ADAPTER pAd,
4632         IN  MLME_QUEUE_ELEM *Elem);
4633
4634 #ifdef RT2870
4635 VOID MlmeCntlConfirm(
4636         IN PRTMP_ADAPTER pAd,
4637         IN ULONG MsgType,
4638         IN USHORT Msg);
4639 #endif // RT2870 //
4640
4641 VOID  ComposePsPoll(
4642         IN  PRTMP_ADAPTER   pAd);
4643
4644 VOID  ComposeNullFrame(
4645         IN  PRTMP_ADAPTER pAd);
4646
4647 VOID  AssocPostProc(
4648         IN  PRTMP_ADAPTER   pAd,
4649         IN  PUCHAR pAddr2,
4650         IN  USHORT CapabilityInfo,
4651         IN  USHORT Aid,
4652         IN  UCHAR SupRate[],
4653         IN  UCHAR SupRateLen,
4654         IN  UCHAR ExtRate[],
4655         IN  UCHAR ExtRateLen,
4656         IN PEDCA_PARM pEdcaParm,
4657         IN HT_CAPABILITY_IE             *pHtCapability,
4658         IN  UCHAR HtCapabilityLen,
4659         IN ADD_HT_INFO_IE               *pAddHtInfo);
4660
4661 VOID AuthStateMachineInit(
4662         IN  PRTMP_ADAPTER   pAd,
4663         IN PSTATE_MACHINE sm,
4664         OUT STATE_MACHINE_FUNC Trans[]);
4665
4666 VOID AuthTimeout(
4667         IN PVOID SystemSpecific1,
4668         IN PVOID FunctionContext,
4669         IN PVOID SystemSpecific2,
4670         IN PVOID SystemSpecific3);
4671
4672 VOID MlmeAuthReqAction(
4673         IN  PRTMP_ADAPTER   pAd,
4674         IN  MLME_QUEUE_ELEM *Elem);
4675
4676 VOID PeerAuthRspAtSeq2Action(
4677         IN  PRTMP_ADAPTER   pAd,
4678         IN  MLME_QUEUE_ELEM *Elem);
4679
4680 VOID PeerAuthRspAtSeq4Action(
4681         IN  PRTMP_ADAPTER   pAd,
4682         IN  MLME_QUEUE_ELEM *Elem);
4683
4684 VOID AuthTimeoutAction(
4685         IN  PRTMP_ADAPTER   pAd,
4686         IN  MLME_QUEUE_ELEM *Elem);
4687
4688 VOID Cls2errAction(
4689         IN  PRTMP_ADAPTER   pAd,
4690         IN  PUCHAR pAddr);
4691
4692 VOID MlmeDeauthReqAction(
4693         IN  PRTMP_ADAPTER   pAd,
4694         IN  MLME_QUEUE_ELEM *Elem);
4695
4696 VOID InvalidStateWhenAuth(
4697         IN  PRTMP_ADAPTER   pAd,
4698         IN  MLME_QUEUE_ELEM *Elem);
4699
4700 //=============================================
4701
4702 VOID AuthRspStateMachineInit(
4703         IN  PRTMP_ADAPTER   pAd,
4704         IN  PSTATE_MACHINE Sm,
4705         IN  STATE_MACHINE_FUNC Trans[]);
4706
4707 VOID PeerDeauthAction(
4708         IN PRTMP_ADAPTER pAd,
4709         IN MLME_QUEUE_ELEM *Elem);
4710
4711 VOID PeerAuthSimpleRspGenAndSend(
4712         IN  PRTMP_ADAPTER   pAd,
4713         IN  PHEADER_802_11  pHdr80211,
4714         IN  USHORT Alg,
4715         IN  USHORT Seq,
4716         IN  USHORT Reason,
4717         IN  USHORT Status);
4718
4719 //
4720 // Private routines in dls.c
4721 //
4722
4723 #ifdef CONFIG_STA_SUPPORT
4724 #ifdef QOS_DLS_SUPPORT
4725 void DlsStateMachineInit(
4726     IN PRTMP_ADAPTER pAd,
4727     IN STATE_MACHINE *Sm,
4728     OUT STATE_MACHINE_FUNC Trans[]);
4729
4730 VOID MlmeDlsReqAction(
4731     IN PRTMP_ADAPTER pAd,
4732     IN MLME_QUEUE_ELEM *Elem);
4733
4734 VOID PeerDlsReqAction(
4735     IN PRTMP_ADAPTER    pAd,
4736     IN MLME_QUEUE_ELEM  *Elem);
4737
4738 VOID PeerDlsRspAction(
4739     IN PRTMP_ADAPTER    pAd,
4740     IN MLME_QUEUE_ELEM  *Elem);
4741
4742 VOID MlmeDlsTearDownAction(
4743     IN PRTMP_ADAPTER pAd,
4744     IN MLME_QUEUE_ELEM *Elem);
4745
4746 VOID PeerDlsTearDownAction(
4747     IN PRTMP_ADAPTER    pAd,
4748     IN MLME_QUEUE_ELEM  *Elem);
4749
4750 VOID RTMPCheckDLSTimeOut(
4751         IN PRTMP_ADAPTER        pAd);
4752
4753 BOOLEAN RTMPRcvFrameDLSCheck(
4754         IN PRTMP_ADAPTER        pAd,
4755         IN PHEADER_802_11       pHeader,
4756         IN ULONG                        Len,
4757         IN PRT28XX_RXD_STRUC    pRxD);
4758
4759 INT     RTMPCheckDLSFrame(
4760         IN      PRTMP_ADAPTER   pAd,
4761         IN  PUCHAR          pDA);
4762
4763 VOID RTMPSendDLSTearDownFrame(
4764         IN      PRTMP_ADAPTER   pAd,
4765         IN  PUCHAR          pDA);
4766
4767 NDIS_STATUS RTMPSendSTAKeyRequest(
4768         IN      PRTMP_ADAPTER   pAd,
4769         IN      PUCHAR                  pDA);
4770
4771 NDIS_STATUS RTMPSendSTAKeyHandShake(
4772         IN      PRTMP_ADAPTER   pAd,
4773         IN      PUCHAR                  pDA);
4774
4775 VOID DlsTimeoutAction(
4776         IN PVOID SystemSpecific1,
4777         IN PVOID FunctionContext,
4778         IN PVOID SystemSpecific2,
4779         IN PVOID SystemSpecific3);
4780
4781 BOOLEAN MlmeDlsReqSanity(
4782         IN PRTMP_ADAPTER pAd,
4783     IN VOID *Msg,
4784     IN ULONG MsgLen,
4785     OUT PRT_802_11_DLS *pDLS,
4786     OUT PUSHORT pReason);
4787
4788 INT Set_DlsEntryInfo_Display_Proc(
4789         IN PRTMP_ADAPTER pAd,
4790         IN PUCHAR arg);
4791
4792 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4793         IN  PRTMP_ADAPTER   pAd,
4794         IN  PUCHAR      pAddr,
4795         IN  UINT        DlsEntryIdx);
4796
4797 BOOLEAN MacTableDeleteDlsEntry(
4798         IN PRTMP_ADAPTER pAd,
4799         IN USHORT wcid,
4800         IN PUCHAR pAddr);
4801
4802 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4803         IN PRTMP_ADAPTER pAd,
4804         IN PUCHAR       pAddr,
4805         IN BOOLEAN      bResetIdelCount);
4806
4807 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4808         IN PRTMP_ADAPTER pAd,
4809         IN UCHAR        wcid,
4810         IN PUCHAR       pAddr,
4811         IN BOOLEAN      bResetIdelCount);
4812
4813 INT     Set_DlsAddEntry_Proc(
4814         IN      PRTMP_ADAPTER   pAd,
4815         IN      PUCHAR                  arg);
4816
4817 INT     Set_DlsTearDownEntry_Proc(
4818         IN      PRTMP_ADAPTER   pAd,
4819         IN      PUCHAR                  arg);
4820 #endif // QOS_DLS_SUPPORT //
4821 #endif // CONFIG_STA_SUPPORT //
4822
4823 #ifdef QOS_DLS_SUPPORT
4824 BOOLEAN PeerDlsReqSanity(
4825     IN PRTMP_ADAPTER pAd,
4826     IN VOID *Msg,
4827     IN ULONG MsgLen,
4828     OUT PUCHAR pDA,
4829     OUT PUCHAR pSA,
4830     OUT USHORT *pCapabilityInfo,
4831     OUT USHORT *pDlsTimeout,
4832     OUT UCHAR *pRatesLen,
4833     OUT UCHAR Rates[],
4834     OUT UCHAR *pHtCapabilityLen,
4835     OUT HT_CAPABILITY_IE *pHtCapability);
4836
4837 BOOLEAN PeerDlsRspSanity(
4838     IN PRTMP_ADAPTER pAd,
4839     IN VOID *Msg,
4840     IN ULONG MsgLen,
4841     OUT PUCHAR pDA,
4842     OUT PUCHAR pSA,
4843     OUT USHORT *pCapabilityInfo,
4844     OUT USHORT *pStatus,
4845     OUT UCHAR *pRatesLen,
4846     OUT UCHAR Rates[],
4847     OUT UCHAR *pHtCapabilityLen,
4848     OUT HT_CAPABILITY_IE *pHtCapability);
4849
4850 BOOLEAN PeerDlsTearDownSanity(
4851     IN PRTMP_ADAPTER pAd,
4852     IN VOID *Msg,
4853     IN ULONG MsgLen,
4854     OUT PUCHAR pDA,
4855     OUT PUCHAR pSA,
4856     OUT USHORT *pReason);
4857 #endif // QOS_DLS_SUPPORT //
4858
4859 //========================================
4860
4861 VOID SyncStateMachineInit(
4862         IN  PRTMP_ADAPTER   pAd,
4863         IN  STATE_MACHINE *Sm,
4864         OUT STATE_MACHINE_FUNC Trans[]);
4865
4866 VOID BeaconTimeout(
4867         IN PVOID SystemSpecific1,
4868         IN PVOID FunctionContext,
4869         IN PVOID SystemSpecific2,
4870         IN PVOID SystemSpecific3);
4871
4872 VOID ScanTimeout(
4873         IN PVOID SystemSpecific1,
4874         IN PVOID FunctionContext,
4875         IN PVOID SystemSpecific2,
4876         IN PVOID SystemSpecific3);
4877
4878 VOID MlmeScanReqAction(
4879         IN  PRTMP_ADAPTER   pAd,
4880         IN  MLME_QUEUE_ELEM *Elem);
4881
4882 VOID InvalidStateWhenScan(
4883         IN  PRTMP_ADAPTER   pAd,
4884         IN  MLME_QUEUE_ELEM *Elem);
4885
4886 VOID InvalidStateWhenJoin(
4887         IN  PRTMP_ADAPTER   pAd,
4888         IN  MLME_QUEUE_ELEM *Elem);
4889
4890 VOID InvalidStateWhenStart(
4891         IN  PRTMP_ADAPTER   pAd,
4892         IN  MLME_QUEUE_ELEM *Elem);
4893
4894 VOID PeerBeacon(
4895         IN  PRTMP_ADAPTER   pAd,
4896         IN  MLME_QUEUE_ELEM *Elem);
4897
4898 VOID EnqueueProbeRequest(
4899         IN PRTMP_ADAPTER pAd);
4900
4901 BOOLEAN ScanRunning(
4902                 IN PRTMP_ADAPTER pAd);
4903 //=========================================
4904
4905 VOID MlmeCntlInit(
4906         IN  PRTMP_ADAPTER   pAd,
4907         IN  STATE_MACHINE *S,
4908         OUT STATE_MACHINE_FUNC Trans[]);
4909
4910 VOID MlmeCntlMachinePerformAction(
4911         IN  PRTMP_ADAPTER   pAd,
4912         IN  STATE_MACHINE *S,
4913         IN  MLME_QUEUE_ELEM *Elem);
4914
4915 VOID CntlIdleProc(
4916         IN  PRTMP_ADAPTER   pAd,
4917         IN  MLME_QUEUE_ELEM *Elem);
4918
4919 VOID CntlOidScanProc(
4920         IN  PRTMP_ADAPTER pAd,
4921         IN  MLME_QUEUE_ELEM *Elem);
4922
4923 VOID CntlOidSsidProc(
4924         IN  PRTMP_ADAPTER   pAd,
4925         IN  MLME_QUEUE_ELEM * Elem);
4926
4927 VOID CntlOidRTBssidProc(
4928         IN  PRTMP_ADAPTER   pAd,
4929         IN  MLME_QUEUE_ELEM * Elem);
4930
4931 VOID CntlMlmeRoamingProc(
4932         IN  PRTMP_ADAPTER   pAd,
4933         IN  MLME_QUEUE_ELEM * Elem);
4934
4935 VOID CntlWaitDisassocProc(
4936         IN  PRTMP_ADAPTER   pAd,
4937         IN  MLME_QUEUE_ELEM *Elem);
4938
4939 VOID CntlWaitJoinProc(
4940         IN  PRTMP_ADAPTER   pAd,
4941         IN  MLME_QUEUE_ELEM *Elem);
4942
4943 VOID CntlWaitReassocProc(
4944         IN  PRTMP_ADAPTER   pAd,
4945         IN  MLME_QUEUE_ELEM *Elem);
4946
4947 VOID CntlWaitStartProc(
4948         IN  PRTMP_ADAPTER   pAd,
4949         IN  MLME_QUEUE_ELEM *Elem);
4950
4951 VOID CntlWaitAuthProc(
4952         IN  PRTMP_ADAPTER   pAd,
4953         IN  MLME_QUEUE_ELEM *Elem);
4954
4955 VOID CntlWaitAuthProc2(
4956         IN  PRTMP_ADAPTER pAd,
4957         IN  MLME_QUEUE_ELEM *Elem);
4958
4959 VOID CntlWaitAssocProc(
4960         IN  PRTMP_ADAPTER   pAd,
4961         IN  MLME_QUEUE_ELEM *Elem);
4962
4963 #ifdef QOS_DLS_SUPPORT
4964 VOID CntlOidDLSSetupProc(
4965         IN PRTMP_ADAPTER pAd,
4966         IN MLME_QUEUE_ELEM *Elem);
4967 #endif // QOS_DLS_SUPPORT //
4968
4969 VOID LinkUp(
4970         IN  PRTMP_ADAPTER   pAd,
4971         IN  UCHAR BssType);
4972
4973 VOID LinkDown(
4974         IN  PRTMP_ADAPTER   pAd,
4975         IN  BOOLEAN         IsReqFromAP);
4976
4977 VOID IterateOnBssTab(
4978         IN  PRTMP_ADAPTER   pAd);
4979
4980 VOID IterateOnBssTab2(
4981         IN  PRTMP_ADAPTER   pAd);;
4982
4983 VOID JoinParmFill(
4984         IN  PRTMP_ADAPTER   pAd,
4985         IN  OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4986         IN  ULONG BssIdx);
4987
4988 VOID AssocParmFill(
4989         IN  PRTMP_ADAPTER   pAd,
4990         IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4991         IN  PUCHAR pAddr,
4992         IN  USHORT CapabilityInfo,
4993         IN  ULONG Timeout,
4994         IN  USHORT ListenIntv);
4995
4996 VOID ScanParmFill(
4997         IN  PRTMP_ADAPTER   pAd,
4998         IN  OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4999         IN  CHAR Ssid[],
5000         IN  UCHAR SsidLen,
5001         IN  UCHAR BssType,
5002         IN  UCHAR ScanType);
5003
5004 VOID DisassocParmFill(
5005         IN  PRTMP_ADAPTER   pAd,
5006         IN  OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5007         IN  PUCHAR pAddr,
5008         IN  USHORT Reason);
5009
5010 VOID StartParmFill(
5011         IN  PRTMP_ADAPTER   pAd,
5012         IN  OUT MLME_START_REQ_STRUCT *StartReq,
5013         IN  CHAR Ssid[],
5014         IN  UCHAR SsidLen);
5015
5016 VOID AuthParmFill(
5017         IN  PRTMP_ADAPTER   pAd,
5018         IN  OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5019         IN  PUCHAR pAddr,
5020         IN  USHORT Alg);
5021
5022 VOID EnqueuePsPoll(
5023         IN  PRTMP_ADAPTER   pAd);
5024
5025 VOID EnqueueBeaconFrame(
5026         IN  PRTMP_ADAPTER   pAd);
5027
5028 VOID MlmeJoinReqAction(
5029         IN  PRTMP_ADAPTER   pAd,
5030         IN  MLME_QUEUE_ELEM *Elem);
5031
5032 VOID MlmeScanReqAction(
5033         IN  PRTMP_ADAPTER   pAd,
5034         IN  MLME_QUEUE_ELEM *Elem);
5035
5036 VOID MlmeStartReqAction(
5037         IN  PRTMP_ADAPTER   pAd,
5038         IN  MLME_QUEUE_ELEM *Elem);
5039
5040 VOID ScanTimeoutAction(
5041         IN  PRTMP_ADAPTER   pAd,
5042         IN  MLME_QUEUE_ELEM *Elem);
5043
5044 VOID BeaconTimeoutAtJoinAction(
5045         IN  PRTMP_ADAPTER   pAd,
5046         IN  MLME_QUEUE_ELEM *Elem);
5047
5048 VOID PeerBeaconAtScanAction(
5049         IN  PRTMP_ADAPTER   pAd,
5050         IN  MLME_QUEUE_ELEM *Elem);
5051
5052 VOID PeerBeaconAtJoinAction(
5053         IN  PRTMP_ADAPTER   pAd,
5054         IN  MLME_QUEUE_ELEM *Elem);
5055
5056 VOID PeerBeacon(
5057         IN  PRTMP_ADAPTER   pAd,
5058         IN  MLME_QUEUE_ELEM *Elem);
5059
5060 VOID PeerProbeReqAction(
5061         IN  PRTMP_ADAPTER pAd,
5062         IN  MLME_QUEUE_ELEM *Elem);
5063
5064 VOID ScanNextChannel(
5065         IN  PRTMP_ADAPTER   pAd);
5066
5067 ULONG MakeIbssBeacon(
5068         IN  PRTMP_ADAPTER   pAd);
5069
5070 VOID CCXAdjacentAPReport(
5071         IN  PRTMP_ADAPTER   pAd);
5072
5073 BOOLEAN MlmeScanReqSanity(
5074         IN  PRTMP_ADAPTER   pAd,
5075         IN  VOID *Msg,
5076         IN  ULONG MsgLen,
5077         OUT UCHAR *BssType,
5078         OUT CHAR ssid[],
5079         OUT UCHAR *SsidLen,
5080         OUT UCHAR *ScanType);
5081
5082 BOOLEAN PeerBeaconAndProbeRspSanity(
5083         IN  PRTMP_ADAPTER   pAd,
5084         IN  VOID *Msg,
5085         IN  ULONG MsgLen,
5086         IN  UCHAR MsgChannel,
5087         OUT PUCHAR pAddr2,
5088         OUT PUCHAR pBssid,
5089         OUT CHAR Ssid[],
5090         OUT UCHAR *pSsidLen,
5091         OUT UCHAR *pBssType,
5092         OUT USHORT *pBeaconPeriod,
5093         OUT UCHAR *pChannel,
5094         OUT UCHAR *pNewChannel,
5095         OUT LARGE_INTEGER *pTimestamp,
5096         OUT CF_PARM *pCfParm,
5097         OUT USHORT *pAtimWin,
5098         OUT USHORT *pCapabilityInfo,
5099         OUT UCHAR *pErp,
5100         OUT UCHAR *pDtimCount,
5101         OUT UCHAR *pDtimPeriod,
5102         OUT UCHAR *pBcastFlag,
5103         OUT UCHAR *pMessageToMe,
5104         OUT UCHAR SupRate[],
5105         OUT UCHAR *pSupRateLen,
5106         OUT UCHAR ExtRate[],
5107         OUT UCHAR *pExtRateLen,
5108         OUT     UCHAR *pCkipFlag,
5109         OUT     UCHAR *pAironetCellPowerLimit,
5110         OUT PEDCA_PARM       pEdcaParm,
5111         OUT PQBSS_LOAD_PARM  pQbssLoad,
5112         OUT PQOS_CAPABILITY_PARM pQosCapability,
5113         OUT ULONG *pRalinkIe,
5114         OUT UCHAR                *pHtCapabilityLen,
5115 #ifdef CONFIG_STA_SUPPORT
5116         OUT UCHAR                *pPreNHtCapabilityLen,
5117 #endif // CONFIG_STA_SUPPORT //
5118         OUT HT_CAPABILITY_IE *pHtCapability,
5119         OUT UCHAR                *AddHtInfoLen,
5120         OUT ADD_HT_INFO_IE *AddHtInfo,
5121         OUT UCHAR *NewExtChannel,
5122         OUT USHORT *LengthVIE,
5123         OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5124
5125 BOOLEAN PeerAddBAReqActionSanity(
5126     IN PRTMP_ADAPTER pAd,
5127     IN VOID *pMsg,
5128     IN ULONG MsgLen,
5129         OUT PUCHAR pAddr2);
5130
5131 BOOLEAN PeerAddBARspActionSanity(
5132     IN PRTMP_ADAPTER pAd,
5133     IN VOID *pMsg,
5134     IN ULONG MsgLen);
5135
5136 BOOLEAN PeerDelBAActionSanity(
5137     IN PRTMP_ADAPTER pAd,
5138     IN UCHAR Wcid,
5139     IN VOID *pMsg,
5140     IN ULONG MsgLen);
5141
5142 BOOLEAN MlmeAssocReqSanity(
5143         IN  PRTMP_ADAPTER   pAd,
5144         IN  VOID *Msg,
5145         IN  ULONG MsgLen,
5146         OUT PUCHAR pApAddr,
5147         OUT USHORT *CapabilityInfo,
5148         OUT ULONG *Timeout,
5149         OUT USHORT *ListenIntv);
5150
5151 BOOLEAN MlmeAuthReqSanity(
5152         IN  PRTMP_ADAPTER   pAd,
5153         IN  VOID *Msg,
5154         IN  ULONG MsgLen,
5155         OUT PUCHAR pAddr,
5156         OUT ULONG *Timeout,
5157         OUT USHORT *Alg);
5158
5159 BOOLEAN MlmeStartReqSanity(
5160         IN  PRTMP_ADAPTER   pAd,
5161         IN  VOID *Msg,
5162         IN  ULONG MsgLen,
5163         OUT CHAR Ssid[],
5164         OUT UCHAR *Ssidlen);
5165
5166 BOOLEAN PeerAuthSanity(
5167         IN  PRTMP_ADAPTER   pAd,
5168         IN  VOID *Msg,
5169         IN  ULONG MsgLen,
5170         OUT PUCHAR pAddr,
5171         OUT USHORT *Alg,
5172         OUT USHORT *Seq,
5173         OUT USHORT *Status,
5174         OUT CHAR ChlgText[]);
5175
5176 BOOLEAN PeerAssocRspSanity(
5177         IN  PRTMP_ADAPTER   pAd,
5178     IN VOID *pMsg,
5179         IN  ULONG MsgLen,
5180         OUT PUCHAR pAddr2,
5181         OUT USHORT *pCapabilityInfo,
5182         OUT USHORT *pStatus,
5183         OUT USHORT *pAid,
5184         OUT UCHAR SupRate[],
5185         OUT UCHAR *pSupRateLen,
5186         OUT UCHAR ExtRate[],
5187         OUT UCHAR *pExtRateLen,
5188     OUT HT_CAPABILITY_IE                *pHtCapability,
5189     OUT ADD_HT_INFO_IE          *pAddHtInfo,    // AP might use this additional ht info IE
5190     OUT UCHAR                   *pHtCapabilityLen,
5191     OUT UCHAR                   *pAddHtInfoLen,
5192     OUT UCHAR                   *pNewExtChannelOffset,
5193         OUT PEDCA_PARM pEdcaParm,
5194         OUT UCHAR *pCkipFlag);
5195
5196 BOOLEAN PeerDisassocSanity(
5197         IN  PRTMP_ADAPTER   pAd,
5198         IN  VOID *Msg,
5199         IN  ULONG MsgLen,
5200         OUT PUCHAR pAddr2,
5201         OUT USHORT *Reason);
5202
5203 BOOLEAN PeerWpaMessageSanity(
5204     IN  PRTMP_ADAPTER           pAd,
5205     IN  PEAPOL_PACKET           pMsg,
5206     IN  ULONG                           MsgLen,
5207     IN  UCHAR                           MsgType,
5208     IN  MAC_TABLE_ENTRY         *pEntry);
5209
5210 BOOLEAN PeerDeauthSanity(
5211         IN  PRTMP_ADAPTER   pAd,
5212         IN  VOID *Msg,
5213         IN  ULONG MsgLen,
5214         OUT PUCHAR pAddr2,
5215         OUT USHORT *Reason);
5216
5217 BOOLEAN PeerProbeReqSanity(
5218         IN  PRTMP_ADAPTER   pAd,
5219         IN  VOID *Msg,
5220         IN  ULONG MsgLen,
5221         OUT PUCHAR pAddr2,
5222         OUT CHAR Ssid[],
5223         OUT UCHAR *pSsidLen);
5224
5225 BOOLEAN GetTimBit(
5226         IN  CHAR *Ptr,
5227         IN  USHORT Aid,
5228         OUT UCHAR *TimLen,
5229         OUT UCHAR *BcastFlag,
5230         OUT UCHAR *DtimCount,
5231         OUT UCHAR *DtimPeriod,
5232         OUT UCHAR *MessageToMe);
5233
5234 UCHAR ChannelSanity(
5235         IN PRTMP_ADAPTER pAd,
5236         IN UCHAR channel);
5237
5238 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5239         IN PBSS_ENTRY pBss);
5240
5241 BOOLEAN MlmeDelBAReqSanity(
5242     IN PRTMP_ADAPTER pAd,
5243     IN VOID *Msg,
5244     IN ULONG MsgLen);
5245
5246 BOOLEAN MlmeAddBAReqSanity(
5247     IN PRTMP_ADAPTER pAd,
5248     IN VOID *Msg,
5249     IN ULONG MsgLen,
5250     OUT PUCHAR pAddr2);
5251
5252 ULONG MakeOutgoingFrame(
5253         OUT CHAR *Buffer,
5254         OUT ULONG *Length, ...);
5255
5256 VOID  LfsrInit(
5257         IN  PRTMP_ADAPTER   pAd,
5258         IN  ULONG Seed);
5259
5260 UCHAR RandomByte(
5261         IN  PRTMP_ADAPTER   pAd);
5262
5263 VOID AsicUpdateAutoFallBackTable(
5264         IN      PRTMP_ADAPTER   pAd,
5265         IN      PUCHAR                  pTxRate);
5266
5267 VOID  MlmePeriodicExec(
5268         IN PVOID SystemSpecific1,
5269         IN PVOID FunctionContext,
5270         IN PVOID SystemSpecific2,
5271         IN PVOID SystemSpecific3);
5272
5273 VOID LinkDownExec(
5274         IN PVOID SystemSpecific1,
5275         IN PVOID FunctionContext,
5276         IN PVOID SystemSpecific2,
5277         IN PVOID SystemSpecific3);
5278
5279 VOID LinkUpExec(
5280         IN PVOID SystemSpecific1,
5281         IN PVOID FunctionContext,
5282         IN PVOID SystemSpecific2,
5283         IN PVOID SystemSpecific3);
5284
5285 VOID STAMlmePeriodicExec(
5286         PRTMP_ADAPTER pAd);
5287
5288 VOID MlmeAutoScan(
5289         IN PRTMP_ADAPTER pAd);
5290
5291 VOID MlmeAutoReconnectLastSSID(
5292         IN PRTMP_ADAPTER pAd);
5293
5294 BOOLEAN MlmeValidateSSID(
5295         IN PUCHAR pSsid,
5296         IN UCHAR  SsidLen);
5297
5298 VOID MlmeCheckForRoaming(
5299         IN PRTMP_ADAPTER pAd,
5300         IN ULONG    Now32);
5301
5302 VOID MlmeCheckForFastRoaming(
5303         IN  PRTMP_ADAPTER   pAd,
5304         IN  ULONG           Now);
5305
5306 VOID MlmeDynamicTxRateSwitching(
5307         IN PRTMP_ADAPTER pAd);
5308
5309 VOID MlmeSetTxRate(
5310         IN PRTMP_ADAPTER                pAd,
5311         IN PMAC_TABLE_ENTRY             pEntry,
5312         IN PRTMP_TX_RATE_SWITCH pTxRate);
5313
5314 VOID MlmeSelectTxRateTable(
5315         IN PRTMP_ADAPTER                pAd,
5316         IN PMAC_TABLE_ENTRY             pEntry,
5317         IN PUCHAR                               *ppTable,
5318         IN PUCHAR                               pTableSize,
5319         IN PUCHAR                               pInitTxRateIdx);
5320
5321 VOID MlmeCalculateChannelQuality(
5322         IN PRTMP_ADAPTER pAd,
5323         IN ULONG Now);
5324
5325 VOID MlmeCheckPsmChange(
5326         IN PRTMP_ADAPTER pAd,
5327         IN ULONG    Now32);
5328
5329 VOID MlmeSetPsmBit(
5330         IN PRTMP_ADAPTER pAd,
5331         IN USHORT psm);
5332
5333 VOID MlmeSetTxPreamble(
5334         IN PRTMP_ADAPTER pAd,
5335         IN USHORT TxPreamble);
5336
5337 VOID UpdateBasicRateBitmap(
5338         IN      PRTMP_ADAPTER   pAd);
5339
5340 VOID MlmeUpdateTxRates(
5341         IN PRTMP_ADAPTER        pAd,
5342         IN      BOOLEAN                 bLinkUp,
5343         IN      UCHAR                   apidx);
5344
5345 #ifdef DOT11_N_SUPPORT
5346 VOID MlmeUpdateHtTxRates(
5347         IN PRTMP_ADAPTER                pAd,
5348         IN      UCHAR                           apidx);
5349 #endif // DOT11_N_SUPPORT //
5350
5351 VOID    RTMPCheckRates(
5352         IN      PRTMP_ADAPTER   pAd,
5353         IN OUT  UCHAR           SupRate[],
5354         IN OUT  UCHAR           *SupRateLen);
5355
5356 #ifdef CONFIG_STA_SUPPORT
5357 BOOLEAN RTMPCheckChannel(
5358         IN PRTMP_ADAPTER pAd,
5359         IN UCHAR                CentralChannel,
5360         IN UCHAR                Channel);
5361 #endif // CONFIG_STA_SUPPORT //
5362
5363 BOOLEAN         RTMPCheckHt(
5364         IN              PRTMP_ADAPTER   pAd,
5365         IN              UCHAR   Wcid,
5366         IN OUT  HT_CAPABILITY_IE                        *pHtCapability,
5367         IN OUT  ADD_HT_INFO_IE                  *pAddHtInfo);
5368
5369 VOID StaQuickResponeForRateUpExec(
5370         IN PVOID SystemSpecific1,
5371         IN PVOID FunctionContext,
5372         IN PVOID SystemSpecific2,
5373         IN PVOID SystemSpecific3);
5374
5375 VOID AsicBbpTuning1(
5376         IN PRTMP_ADAPTER pAd);
5377
5378 VOID AsicBbpTuning2(
5379         IN PRTMP_ADAPTER pAd);
5380
5381 VOID RTMPUpdateMlmeRate(
5382         IN PRTMP_ADAPTER        pAd);
5383
5384 CHAR RTMPMaxRssi(
5385         IN PRTMP_ADAPTER        pAd,
5386         IN CHAR                         Rssi0,
5387         IN CHAR                         Rssi1,
5388         IN CHAR                         Rssi2);
5389
5390 VOID AsicSetRxAnt(
5391         IN PRTMP_ADAPTER        pAd,
5392         IN UCHAR                        Ant);
5393
5394 VOID AsicEvaluateRxAnt(
5395         IN PRTMP_ADAPTER        pAd);
5396
5397 VOID AsicRxAntEvalTimeout(
5398         IN PVOID SystemSpecific1,
5399         IN PVOID FunctionContext,
5400         IN PVOID SystemSpecific2,
5401         IN PVOID SystemSpecific3);
5402
5403 VOID APSDPeriodicExec(
5404         IN PVOID SystemSpecific1,
5405         IN PVOID FunctionContext,
5406         IN PVOID SystemSpecific2,
5407         IN PVOID SystemSpecific3);
5408
5409 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5410         IN PRTMP_ADAPTER    pAd,
5411         IN PMAC_TABLE_ENTRY     pEntry);
5412
5413 UCHAR RTMPStaFixedTxMode(
5414         IN PRTMP_ADAPTER    pAd,
5415         IN PMAC_TABLE_ENTRY     pEntry);
5416
5417 VOID RTMPUpdateLegacyTxSetting(
5418                 UCHAR                           fixed_tx_mode,
5419                 PMAC_TABLE_ENTRY        pEntry);
5420
5421 BOOLEAN RTMPAutoRateSwitchCheck(
5422         IN PRTMP_ADAPTER    pAd);
5423
5424 NDIS_STATUS MlmeInit(
5425         IN  PRTMP_ADAPTER   pAd);
5426
5427 VOID MlmeHandler(
5428         IN  PRTMP_ADAPTER   pAd);
5429
5430 VOID MlmeHalt(
5431         IN  PRTMP_ADAPTER   pAd);
5432
5433 VOID MlmeResetRalinkCounters(
5434         IN  PRTMP_ADAPTER   pAd);
5435
5436 VOID BuildChannelList(
5437         IN PRTMP_ADAPTER pAd);
5438
5439 UCHAR FirstChannel(
5440         IN  PRTMP_ADAPTER   pAd);
5441
5442 UCHAR NextChannel(
5443         IN  PRTMP_ADAPTER   pAd,
5444         IN  UCHAR channel);
5445
5446 VOID ChangeToCellPowerLimit(
5447         IN PRTMP_ADAPTER pAd,
5448         IN UCHAR         AironetCellPowerLimit);
5449
5450 VOID RaiseClock(
5451         IN  PRTMP_ADAPTER   pAd,
5452         IN  UINT32 *x);
5453
5454 VOID LowerClock(
5455         IN  PRTMP_ADAPTER   pAd,
5456         IN  UINT32 *x);
5457
5458 USHORT ShiftInBits(
5459         IN  PRTMP_ADAPTER   pAd);
5460
5461 VOID ShiftOutBits(
5462         IN  PRTMP_ADAPTER   pAd,
5463         IN  USHORT data,
5464         IN  USHORT count);
5465
5466 VOID EEpromCleanup(
5467         IN  PRTMP_ADAPTER   pAd);
5468
5469 VOID EWDS(
5470         IN  PRTMP_ADAPTER   pAd);
5471
5472 VOID EWEN(
5473         IN  PRTMP_ADAPTER   pAd);
5474
5475 USHORT RTMP_EEPROM_READ16(
5476         IN  PRTMP_ADAPTER   pAd,
5477         IN  USHORT Offset);
5478
5479 VOID RTMP_EEPROM_WRITE16(
5480         IN  PRTMP_ADAPTER   pAd,
5481         IN  USHORT Offset,
5482         IN  USHORT Data);
5483
5484 //
5485 // Prototypes of function definition in rtmp_tkip.c
5486 //
5487 VOID    RTMPInitTkipEngine(
5488         IN  PRTMP_ADAPTER   pAd,
5489         IN  PUCHAR          pTKey,
5490         IN  UCHAR           KeyId,
5491         IN  PUCHAR          pTA,
5492         IN  PUCHAR          pMICKey,
5493         IN  PUCHAR          pTSC,
5494         OUT PULONG          pIV16,
5495         OUT PULONG          pIV32);
5496
5497 VOID    RTMPInitMICEngine(
5498         IN  PRTMP_ADAPTER   pAd,
5499         IN  PUCHAR          pKey,
5500         IN  PUCHAR          pDA,
5501         IN  PUCHAR          pSA,
5502         IN  UCHAR           UserPriority,
5503         IN  PUCHAR          pMICKey);
5504
5505 BOOLEAN RTMPTkipCompareMICValue(
5506         IN  PRTMP_ADAPTER   pAd,
5507         IN  PUCHAR          pSrc,
5508         IN  PUCHAR          pDA,
5509         IN  PUCHAR          pSA,
5510         IN  PUCHAR          pMICKey,
5511         IN      UCHAR                   UserPriority,
5512         IN  UINT            Len);
5513
5514 VOID    RTMPCalculateMICValue(
5515         IN  PRTMP_ADAPTER   pAd,
5516         IN  PNDIS_PACKET    pPacket,
5517         IN  PUCHAR          pEncap,
5518         IN  PCIPHER_KEY     pKey,
5519         IN      UCHAR                   apidx);
5520
5521 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5522         IN  PRTMP_ADAPTER   pAd,
5523         IN  PUCHAR          pLLC,
5524         IN  PUCHAR          pSrc,
5525         IN  PUCHAR          pDA,
5526         IN  PUCHAR          pSA,
5527         IN  PUCHAR          pMICKey,
5528         IN  UINT            Len);
5529
5530 VOID    RTMPTkipAppendByte(
5531         IN  PTKIP_KEY_INFO  pTkip,
5532         IN  UCHAR           uChar);
5533
5534 VOID    RTMPTkipAppend(
5535         IN  PTKIP_KEY_INFO  pTkip,
5536         IN  PUCHAR          pSrc,
5537         IN  UINT            nBytes);
5538
5539 VOID    RTMPTkipGetMIC(
5540         IN  PTKIP_KEY_INFO  pTkip);
5541
5542 BOOLEAN RTMPSoftDecryptTKIP(
5543         IN PRTMP_ADAPTER pAd,
5544         IN PUCHAR       pData,
5545         IN ULONG        DataByteCnt,
5546         IN UCHAR    UserPriority,
5547         IN PCIPHER_KEY  pWpaKey);
5548
5549 BOOLEAN RTMPSoftDecryptAES(
5550         IN PRTMP_ADAPTER pAd,
5551         IN PUCHAR       pData,
5552         IN ULONG        DataByteCnt,
5553         IN PCIPHER_KEY  pWpaKey);
5554
5555 //
5556 // Prototypes of function definition in cmm_info.c
5557 //
5558 NDIS_STATUS RTMPWPARemoveKeyProc(
5559         IN  PRTMP_ADAPTER   pAd,
5560         IN  PVOID           pBuf);
5561
5562 VOID    RTMPWPARemoveAllKeys(
5563         IN  PRTMP_ADAPTER   pAd);
5564
5565 BOOLEAN RTMPCheckStrPrintAble(
5566     IN  CHAR *pInPutStr,
5567     IN  UCHAR strLen);
5568
5569 VOID    RTMPSetPhyMode(
5570         IN  PRTMP_ADAPTER   pAd,
5571         IN  ULONG phymode);
5572
5573 VOID    RTMPUpdateHTIE(
5574         IN      RT_HT_CAPABILITY        *pRtHt,
5575         IN              UCHAR                           *pMcsSet,
5576         OUT             HT_CAPABILITY_IE *pHtCapability,
5577         OUT             ADD_HT_INFO_IE          *pAddHtInfo);
5578
5579 VOID    RTMPAddWcidAttributeEntry(
5580         IN      PRTMP_ADAPTER   pAd,
5581         IN      UCHAR                   BssIdx,
5582         IN      UCHAR                   KeyIdx,
5583         IN      UCHAR                   CipherAlg,
5584         IN      MAC_TABLE_ENTRY *pEntry);
5585
5586 CHAR *GetEncryptType(
5587         CHAR enc);
5588
5589 CHAR *GetAuthMode(
5590         CHAR auth);
5591
5592 VOID RTMPIoctlGetSiteSurvey(
5593         IN      PRTMP_ADAPTER   pAdapter,
5594         IN      struct iwreq    *wrq);
5595
5596 VOID RTMPIoctlGetMacTable(
5597         IN PRTMP_ADAPTER pAd,
5598         IN struct iwreq *wrq);
5599
5600 VOID RTMPIndicateWPA2Status(
5601         IN  PRTMP_ADAPTER  pAdapter);
5602
5603 VOID    RTMPOPModeSwitching(
5604         IN      PRTMP_ADAPTER   pAd);
5605
5606 #ifdef CONFIG_STA_SUPPORT
5607 VOID    RTMPAddBSSIDCipher(
5608     IN  PRTMP_ADAPTER   pAd,
5609         IN      UCHAR   Aid,
5610     IN  PNDIS_802_11_KEY    pKey,
5611     IN  UCHAR   CipherAlg);
5612 #endif // CONFIG_STA_SUPPORT //
5613
5614 #ifdef DOT11_N_SUPPORT
5615 VOID    RTMPSetHT(
5616         IN      PRTMP_ADAPTER   pAd,
5617         IN      OID_SET_HT_PHYMODE *pHTPhyMode);
5618
5619 VOID    RTMPSetIndividualHT(
5620         IN      PRTMP_ADAPTER           pAd,
5621         IN      UCHAR                           apidx);
5622 #endif // DOT11_N_SUPPORT //
5623
5624 VOID RTMPSendWirelessEvent(
5625         IN      PRTMP_ADAPTER   pAd,
5626         IN      USHORT                  Event_flag,
5627         IN      PUCHAR                  pAddr,
5628         IN  UCHAR                       BssIdx,
5629         IN      CHAR                    Rssi);
5630
5631 VOID    NICUpdateCntlCounters(
5632         IN      PRTMP_ADAPTER   pAd,
5633         IN      PHEADER_802_11  pHeader,
5634         IN    UCHAR                     SubType,
5635         IN      PRXWI_STRUC     pRxWI);
5636 //
5637 // prototype in wpa.c
5638 //
5639 BOOLEAN WpaMsgTypeSubst(
5640         IN  UCHAR   EAPType,
5641         OUT INT         *MsgType);
5642
5643 VOID WpaPskStateMachineInit(
5644         IN  PRTMP_ADAPTER       pAd,
5645         IN  STATE_MACHINE       *S,
5646         OUT STATE_MACHINE_FUNC Trans[]);
5647
5648 VOID WpaEAPOLKeyAction(
5649         IN  PRTMP_ADAPTER   pAd,
5650         IN  MLME_QUEUE_ELEM *Elem);
5651
5652 VOID    WpaPairMsg1Action(
5653         IN  PRTMP_ADAPTER   pAd,
5654         IN  MLME_QUEUE_ELEM *Elem);
5655
5656 VOID    WpaPairMsg3Action(
5657         IN  PRTMP_ADAPTER   pAd,
5658         IN  MLME_QUEUE_ELEM *Elem);
5659
5660 VOID    WpaGroupMsg1Action(
5661         IN  PRTMP_ADAPTER   pAd,
5662         IN  MLME_QUEUE_ELEM *Elem);
5663
5664 VOID    WpaMacHeaderInit(
5665         IN      PRTMP_ADAPTER   pAd,
5666         IN OUT  PHEADER_802_11  pHdr80211,
5667         IN      UCHAR           wep,
5668         IN      PUCHAR          pAddr1);
5669
5670 VOID    Wpa2PairMsg1Action(
5671     IN  PRTMP_ADAPTER   pAd,
5672     IN  MLME_QUEUE_ELEM *Elem);
5673
5674 VOID    Wpa2PairMsg3Action(
5675     IN  PRTMP_ADAPTER   pAd,
5676     IN  MLME_QUEUE_ELEM *Elem);
5677
5678 BOOLEAN ParseKeyData(
5679     IN  PRTMP_ADAPTER   pAd,
5680     IN  PUCHAR          pKeyData,
5681     IN  UCHAR           KeyDataLen,
5682         IN      UCHAR                   bPairewise);
5683
5684 VOID    RTMPToWirelessSta(
5685         IN  PRTMP_ADAPTER   pAd,
5686         IN  PUCHAR          pHeader802_3,
5687     IN  UINT            HdrLen,
5688         IN  PUCHAR          pData,
5689     IN  UINT            DataLen,
5690     IN  BOOLEAN                 is4wayFrame);
5691
5692 VOID    HMAC_SHA1(
5693         IN  UCHAR   *text,
5694         IN  UINT    text_len,
5695         IN  UCHAR   *key,
5696         IN  UINT    key_len,
5697         IN  UCHAR   *digest);
5698
5699 VOID    PRF(
5700         IN  UCHAR   *key,
5701         IN  INT     key_len,
5702         IN  UCHAR   *prefix,
5703         IN  INT     prefix_len,
5704         IN  UCHAR   *data,
5705         IN  INT     data_len,
5706         OUT UCHAR   *output,
5707         IN  INT     len);
5708
5709 VOID    CCKMPRF(
5710         IN  UCHAR   *key,
5711         IN  INT     key_len,
5712         IN  UCHAR   *data,
5713         IN  INT     data_len,
5714         OUT UCHAR   *output,
5715         IN  INT     len);
5716
5717 VOID WpaCountPTK(
5718         IN  PRTMP_ADAPTER   pAd,
5719         IN  UCHAR   *PMK,
5720         IN  UCHAR   *ANonce,
5721         IN  UCHAR   *AA,
5722         IN  UCHAR   *SNonce,
5723         IN  UCHAR   *SA,
5724         OUT UCHAR   *output,
5725         IN  UINT    len);
5726
5727 VOID    GenRandom(
5728         IN  PRTMP_ADAPTER   pAd,
5729         IN      UCHAR                   *macAddr,
5730         OUT     UCHAR                   *random);
5731
5732 //
5733 // prototype in aironet.c
5734 //
5735 VOID    AironetStateMachineInit(
5736         IN  PRTMP_ADAPTER       pAd,
5737         IN  STATE_MACHINE       *S,
5738         OUT STATE_MACHINE_FUNC  Trans[]);
5739
5740 VOID    AironetMsgAction(
5741         IN  PRTMP_ADAPTER   pAd,
5742         IN  MLME_QUEUE_ELEM *Elem);
5743
5744 VOID    AironetRequestAction(
5745         IN  PRTMP_ADAPTER   pAd,
5746         IN  MLME_QUEUE_ELEM *Elem);
5747
5748 VOID    ChannelLoadRequestAction(
5749         IN  PRTMP_ADAPTER   pAd,
5750         IN  UCHAR           Index);
5751
5752 VOID    NoiseHistRequestAction(
5753         IN  PRTMP_ADAPTER   pAd,
5754         IN  UCHAR           Index);
5755
5756 VOID    BeaconRequestAction(
5757         IN  PRTMP_ADAPTER   pAd,
5758         IN  UCHAR           Index);
5759
5760 VOID    AironetReportAction(
5761         IN  PRTMP_ADAPTER   pAd,
5762         IN  MLME_QUEUE_ELEM *Elem);
5763
5764 VOID    ChannelLoadReportAction(
5765         IN  PRTMP_ADAPTER   pAd,
5766         IN  UCHAR           Index);
5767
5768 VOID    NoiseHistReportAction(
5769         IN  PRTMP_ADAPTER   pAd,
5770         IN  UCHAR           Index);
5771
5772 VOID    AironetFinalReportAction(
5773         IN  PRTMP_ADAPTER   pAd);
5774
5775 VOID    BeaconReportAction(
5776         IN  PRTMP_ADAPTER   pAd,
5777         IN  UCHAR           Index);
5778
5779 VOID    AironetAddBeaconReport(
5780         IN  PRTMP_ADAPTER       pAd,
5781         IN  ULONG               Index,
5782         IN  PMLME_QUEUE_ELEM    pElem);
5783
5784 VOID    AironetCreateBeaconReportFromBssTable(
5785         IN  PRTMP_ADAPTER       pAd);
5786
5787 VOID    DBGPRINT_TX_RING(
5788         IN PRTMP_ADAPTER  pAd,
5789         IN UCHAR          QueIdx);
5790
5791 VOID DBGPRINT_RX_RING(
5792         IN PRTMP_ADAPTER  pAd);
5793
5794 CHAR    ConvertToRssi(
5795         IN PRTMP_ADAPTER  pAd,
5796         IN CHAR                         Rssi,
5797         IN UCHAR    RssiNumber);
5798
5799
5800 #ifdef DOT11N_DRAFT3
5801 VOID BuildEffectedChannelList(
5802         IN PRTMP_ADAPTER pAd);
5803 #endif // DOT11N_DRAFT3 //
5804
5805
5806 VOID APAsicEvaluateRxAnt(
5807         IN PRTMP_ADAPTER        pAd);
5808
5809
5810 VOID APAsicRxAntEvalTimeout(
5811         IN PRTMP_ADAPTER        pAd);
5812
5813 //
5814 // function prototype in cmm_wpa.c
5815 //
5816 BOOLEAN RTMPCheckWPAframe(
5817         IN PRTMP_ADAPTER pAd,
5818         IN PMAC_TABLE_ENTRY     pEntry,
5819         IN PUCHAR                       pData,
5820         IN ULONG                        DataByteCount,
5821         IN UCHAR                        FromWhichBSSID);
5822
5823 VOID AES_GTK_KEY_UNWRAP(
5824         IN  UCHAR   *key,
5825         OUT UCHAR   *plaintext,
5826         IN      UCHAR   c_len,
5827         IN  UCHAR   *ciphertext);
5828
5829 BOOLEAN RTMPCheckRSNIE(
5830         IN  PRTMP_ADAPTER   pAd,
5831         IN  PUCHAR          pData,
5832         IN  UCHAR           DataLen,
5833         IN  MAC_TABLE_ENTRY *pEntry,
5834         OUT     UCHAR                   *Offset);
5835
5836 BOOLEAN RTMPParseEapolKeyData(
5837         IN  PRTMP_ADAPTER   pAd,
5838         IN  PUCHAR          pKeyData,
5839         IN  UCHAR           KeyDataLen,
5840         IN      UCHAR                   GroupKeyIndex,
5841         IN      UCHAR                   MsgType,
5842         IN      BOOLEAN                 bWPA2,
5843         IN  MAC_TABLE_ENTRY *pEntry);
5844
5845 VOID    ConstructEapolMsg(
5846         IN      PRTMP_ADAPTER           pAd,
5847     IN  UCHAR                           PeerAuthMode,
5848     IN  UCHAR                           PeerWepStatus,
5849     IN  UCHAR                           MyGroupKeyWepStatus,
5850     IN  UCHAR                           MsgType,
5851     IN  UCHAR                           DefaultKeyIdx,
5852     IN  UCHAR                           *ReplayCounter,
5853         IN      UCHAR                           *KeyNonce,
5854         IN      UCHAR                           *TxRSC,
5855         IN      UCHAR                           *PTK,
5856         IN      UCHAR                           *GTK,
5857         IN      UCHAR                           *RSNIE,
5858         IN      UCHAR                           RSNIE_Len,
5859     OUT PEAPOL_PACKET       pMsg);
5860
5861 VOID    CalculateMIC(
5862         IN      PRTMP_ADAPTER   pAd,
5863         IN      UCHAR                   PeerWepStatus,
5864         IN      UCHAR                   *PTK,
5865         OUT PEAPOL_PACKET   pMsg);
5866
5867 NDIS_STATUS     RTMPSoftDecryptBroadCastData(
5868         IN      PRTMP_ADAPTER                                   pAd,
5869         IN      RX_BLK                                                  *pRxBlk,
5870         IN  NDIS_802_11_ENCRYPTION_STATUS       GroupCipher,
5871         IN  PCIPHER_KEY                                         pShard_key);
5872
5873 VOID    ConstructEapolKeyData(
5874         IN      PRTMP_ADAPTER   pAd,
5875         IN      UCHAR                   PeerAuthMode,
5876         IN      UCHAR                   PeerWepStatus,
5877         IN      UCHAR                   GroupKeyWepStatus,
5878         IN      UCHAR                   MsgType,
5879         IN      UCHAR                   DefaultKeyIdx,
5880         IN      BOOLEAN                 bWPA2Capable,
5881         IN      UCHAR                   *PTK,
5882         IN      UCHAR                   *GTK,
5883         IN      UCHAR                   *RSNIE,
5884         IN      UCHAR                   RSNIE_LEN,
5885         OUT PEAPOL_PACKET   pMsg);
5886
5887 VOID RTMPMakeRSNIE(
5888         IN  PRTMP_ADAPTER   pAd,
5889         IN  UINT            AuthMode,
5890         IN  UINT            WepStatus,
5891         IN      UCHAR                   apidx);
5892
5893 //
5894 // function prototype in ap_wpa.c
5895 //
5896
5897 BOOLEAN APWpaMsgTypeSubst(
5898         IN UCHAR    EAPType,
5899         OUT INT *MsgType) ;
5900
5901 MAC_TABLE_ENTRY *PACInquiry(
5902         IN  PRTMP_ADAPTER   pAd,
5903         IN  ULONG           Wcid);
5904
5905 BOOLEAN RTMPCheckMcast(
5906         IN PRTMP_ADAPTER pAd,
5907         IN PEID_STRUCT      eid_ptr,
5908         IN MAC_TABLE_ENTRY  *pEntry);
5909
5910 BOOLEAN RTMPCheckUcast(
5911         IN PRTMP_ADAPTER pAd,
5912         IN PEID_STRUCT      eid_ptr,
5913         IN MAC_TABLE_ENTRY  *pEntry);
5914
5915 BOOLEAN RTMPCheckAUTH(
5916         IN PRTMP_ADAPTER pAd,
5917         IN PEID_STRUCT      eid_ptr,
5918         IN MAC_TABLE_ENTRY  *pEntry);
5919
5920 VOID WPAStart4WayHS(
5921         IN  PRTMP_ADAPTER   pAd,
5922         IN  MAC_TABLE_ENTRY *pEntry,
5923         IN      ULONG                   TimeInterval);
5924
5925 VOID WPAStart2WayGroupHS(
5926         IN  PRTMP_ADAPTER   pAd,
5927         IN  MAC_TABLE_ENTRY *pEntry);
5928
5929 VOID APWpaEAPPacketAction(
5930         IN PRTMP_ADAPTER pAd,
5931         IN MLME_QUEUE_ELEM *Elem);
5932
5933 VOID APWpaEAPOLStartAction(
5934         IN PRTMP_ADAPTER pAd,
5935         IN MLME_QUEUE_ELEM *Elem);
5936
5937 VOID APWpaEAPOLLogoffAction(
5938         IN PRTMP_ADAPTER pAd,
5939         IN MLME_QUEUE_ELEM *Elem);
5940
5941 VOID APWpaEAPOLKeyAction(
5942         IN PRTMP_ADAPTER pAd,
5943         IN MLME_QUEUE_ELEM *Elem);
5944
5945 VOID APWpaEAPOLASFAlertAction(
5946         IN  PRTMP_ADAPTER    pAd,
5947         IN  MLME_QUEUE_ELEM  *Elem);
5948
5949 VOID HandleCounterMeasure(
5950         IN PRTMP_ADAPTER pAd,
5951         IN MAC_TABLE_ENTRY  *pEntry);
5952
5953 VOID PeerPairMsg2Action(
5954         IN PRTMP_ADAPTER pAd,
5955         IN MAC_TABLE_ENTRY  *pEntry,
5956         IN MLME_QUEUE_ELEM *Elem);
5957
5958 VOID PeerPairMsg4Action(
5959         IN PRTMP_ADAPTER pAd,
5960         IN MAC_TABLE_ENTRY  *pEntry,
5961         IN MLME_QUEUE_ELEM *Elem);
5962
5963 VOID CMTimerExec(
5964         IN PVOID SystemSpecific1,
5965         IN PVOID FunctionContext,
5966         IN PVOID SystemSpecific2,
5967         IN PVOID SystemSpecific3);
5968
5969 VOID WPARetryExec(
5970         IN PVOID SystemSpecific1,
5971         IN PVOID FunctionContext,
5972         IN PVOID SystemSpecific2,
5973         IN PVOID SystemSpecific3);
5974
5975 VOID EnqueueStartForPSKExec(
5976     IN PVOID SystemSpecific1,
5977     IN PVOID FunctionContext,
5978     IN PVOID SystemSpecific2,
5979     IN PVOID SystemSpecific3);
5980
5981 VOID RTMPHandleSTAKey(
5982     IN PRTMP_ADAPTER    pAdapter,
5983     IN MAC_TABLE_ENTRY  *pEntry,
5984     IN MLME_QUEUE_ELEM  *Elem);
5985
5986 VOID PeerGroupMsg2Action(
5987         IN  PRTMP_ADAPTER    pAd,
5988         IN  PMAC_TABLE_ENTRY pEntry,
5989         IN  VOID             *Msg,
5990         IN  UINT             MsgLen);
5991
5992 VOID PairDisAssocAction(
5993         IN  PRTMP_ADAPTER    pAd,
5994         IN  PMAC_TABLE_ENTRY pEntry,
5995         IN  USHORT           Reason);
5996
5997 VOID MlmeDeAuthAction(
5998         IN  PRTMP_ADAPTER    pAd,
5999         IN  PMAC_TABLE_ENTRY pEntry,
6000         IN  USHORT           Reason);
6001
6002 VOID GREKEYPeriodicExec(
6003         IN  PVOID   SystemSpecific1,
6004         IN  PVOID   FunctionContext,
6005         IN  PVOID   SystemSpecific2,
6006         IN  PVOID   SystemSpecific3);
6007
6008 VOID CountGTK(
6009         IN  UCHAR   *PMK,
6010         IN  UCHAR   *GNonce,
6011         IN  UCHAR   *AA,
6012         OUT UCHAR   *output,
6013         IN  UINT    len);
6014
6015 VOID    GetSmall(
6016         IN  PVOID   pSrc1,
6017         IN  PVOID   pSrc2,
6018         OUT PUCHAR  out,
6019         IN  ULONG   Length);
6020
6021 VOID    GetLarge(
6022         IN  PVOID   pSrc1,
6023         IN  PVOID   pSrc2,
6024         OUT PUCHAR  out,
6025         IN  ULONG   Length);
6026
6027 VOID APGenRandom(
6028         IN PRTMP_ADAPTER pAd,
6029         OUT UCHAR       *random);
6030
6031 VOID AES_GTK_KEY_WRAP(
6032         IN UCHAR *key,
6033         IN UCHAR *plaintext,
6034         IN UCHAR p_len,
6035         OUT UCHAR *ciphertext);
6036
6037 VOID    WpaSend(
6038     IN  PRTMP_ADAPTER   pAdapter,
6039     IN  PUCHAR          pPacket,
6040     IN  ULONG           Len);
6041
6042 VOID    APToWirelessSta(
6043         IN  PRTMP_ADAPTER   pAd,
6044         IN  MAC_TABLE_ENTRY *pEntry,
6045         IN  PUCHAR          pHeader802_3,
6046         IN  UINT            HdrLen,
6047         IN  PUCHAR          pData,
6048         IN  UINT            DataLen,
6049     IN  BOOLEAN                 bClearFrame);
6050
6051 VOID RTMPAddPMKIDCache(
6052         IN  PRTMP_ADAPTER               pAd,
6053         IN      INT                                             apidx,
6054         IN      PUCHAR                          pAddr,
6055         IN      UCHAR                                   *PMKID,
6056         IN      UCHAR                                   *PMK);
6057
6058 INT RTMPSearchPMKIDCache(
6059         IN  PRTMP_ADAPTER   pAd,
6060         IN      INT                             apidx,
6061         IN      PUCHAR          pAddr);
6062
6063 VOID RTMPDeletePMKIDCache(
6064         IN  PRTMP_ADAPTER   pAd,
6065         IN      INT                             apidx,
6066         IN  INT                         idx);
6067
6068 VOID RTMPMaintainPMKIDCache(
6069         IN  PRTMP_ADAPTER   pAd);
6070
6071 VOID    RTMPSendTriggerFrame(
6072         IN      PRTMP_ADAPTER   pAd,
6073         IN      PVOID                   pBuffer,
6074         IN      ULONG                   Length,
6075         IN  UCHAR           TxRate,
6076         IN      BOOLEAN                 bQosNull);
6077
6078 #ifdef RT30xx
6079 VOID RTMPFilterCalibration(
6080         IN PRTMP_ADAPTER pAd);
6081 #endif // RT30xx //
6082
6083
6084 //typedef void (*TIMER_FUNCTION)(unsigned long);
6085
6086
6087 /* timeout -- ms */
6088 VOID RTMP_SetPeriodicTimer(
6089         IN      NDIS_MINIPORT_TIMER *pTimer,
6090         IN      unsigned long timeout);
6091
6092 VOID RTMP_OS_Init_Timer(
6093         IN      PRTMP_ADAPTER pAd,
6094         IN      NDIS_MINIPORT_TIMER *pTimer,
6095         IN      TIMER_FUNCTION function,
6096         IN      PVOID data);
6097
6098 VOID RTMP_OS_Add_Timer(
6099         IN      NDIS_MINIPORT_TIMER     *pTimer,
6100         IN      unsigned long timeout);
6101
6102 VOID RTMP_OS_Mod_Timer(
6103         IN      NDIS_MINIPORT_TIMER     *pTimer,
6104         IN      unsigned long timeout);
6105
6106
6107 VOID RTMP_OS_Del_Timer(
6108         IN      NDIS_MINIPORT_TIMER     *pTimer,
6109         OUT     BOOLEAN                          *pCancelled);
6110
6111
6112 VOID RTMP_OS_Release_Packet(
6113         IN      PRTMP_ADAPTER pAd,
6114         IN      PQUEUE_ENTRY  pEntry);
6115
6116 VOID RTMPusecDelay(
6117         IN      ULONG   usec);
6118
6119 NDIS_STATUS os_alloc_mem(
6120         IN      PRTMP_ADAPTER pAd,
6121         OUT     PUCHAR *mem,
6122         IN      ULONG  size);
6123
6124 NDIS_STATUS os_free_mem(
6125         IN      PRTMP_ADAPTER pAd,
6126         IN      PUCHAR mem);
6127
6128
6129 void RTMP_AllocateSharedMemory(
6130         IN      PRTMP_ADAPTER pAd,
6131         IN      ULONG   Length,
6132         IN      BOOLEAN Cached,
6133         OUT     PVOID   *VirtualAddress,
6134         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6135
6136 VOID RTMPFreeTxRxRingMemory(
6137     IN  PRTMP_ADAPTER   pAd);
6138
6139 NDIS_STATUS AdapterBlockAllocateMemory(
6140         IN PVOID        handle,
6141         OUT     PVOID   *ppAd);
6142
6143 void RTMP_AllocateTxDescMemory(
6144         IN      PRTMP_ADAPTER pAd,
6145         IN      UINT    Index,
6146         IN      ULONG   Length,
6147         IN      BOOLEAN Cached,
6148         OUT     PVOID   *VirtualAddress,
6149         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6150
6151 void RTMP_AllocateFirstTxBuffer(
6152         IN      PRTMP_ADAPTER pAd,
6153         IN      UINT    Index,
6154         IN      ULONG   Length,
6155         IN      BOOLEAN Cached,
6156         OUT     PVOID   *VirtualAddress,
6157         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6158
6159 void RTMP_AllocateMgmtDescMemory(
6160         IN      PRTMP_ADAPTER pAd,
6161         IN      ULONG   Length,
6162         IN      BOOLEAN Cached,
6163         OUT     PVOID   *VirtualAddress,
6164         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6165
6166 void RTMP_AllocateRxDescMemory(
6167         IN      PRTMP_ADAPTER pAd,
6168         IN      ULONG   Length,
6169         IN      BOOLEAN Cached,
6170         OUT     PVOID   *VirtualAddress,
6171         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6172
6173 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6174         IN      PRTMP_ADAPTER pAd,
6175         IN      ULONG   Length,
6176         IN      BOOLEAN Cached,
6177         OUT     PVOID   *VirtualAddress,
6178         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6179
6180 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6181         IN      PRTMP_ADAPTER pAd,
6182         IN      ULONG   Length,
6183         IN      BOOLEAN Cached,
6184         OUT     PVOID   *VirtualAddress);
6185
6186 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6187         IN      PRTMP_ADAPTER pAd,
6188         IN      ULONG   Length);
6189
6190 void RTMP_QueryPacketInfo(
6191         IN  PNDIS_PACKET pPacket,
6192         OUT PACKET_INFO  *pPacketInfo,
6193         OUT PUCHAR               *pSrcBufVA,
6194         OUT     UINT             *pSrcBufLen);
6195
6196 void RTMP_QueryNextPacketInfo(
6197         IN  PNDIS_PACKET *ppPacket,
6198         OUT PACKET_INFO  *pPacketInfo,
6199         OUT PUCHAR               *pSrcBufVA,
6200         OUT     UINT             *pSrcBufLen);
6201
6202
6203 BOOLEAN RTMP_FillTxBlkInfo(
6204         IN RTMP_ADAPTER *pAd,
6205         IN TX_BLK *pTxBlk);
6206
6207
6208 PRTMP_SCATTER_GATHER_LIST
6209 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6210
6211
6212  void announce_802_3_packet(
6213         IN      PRTMP_ADAPTER   pAd,
6214         IN      PNDIS_PACKET    pPacket);
6215
6216
6217 UINT BA_Reorder_AMSDU_Annnounce(
6218         IN      PRTMP_ADAPTER   pAd,
6219         IN      PNDIS_PACKET    pPacket);
6220
6221
6222 UINT Handle_AMSDU_Packet(
6223         IN      PRTMP_ADAPTER   pAd,
6224         IN      PUCHAR                  pData,
6225         IN      ULONG                   DataSize,
6226         IN  UCHAR                       FromWhichBSSID);
6227
6228
6229 void convert_802_11_to_802_3_packet(
6230         IN      PRTMP_ADAPTER   pAd,
6231         IN      PNDIS_PACKET    pPacket,
6232         IN      PUCHAR                  p8023hdr,
6233         IN      PUCHAR                  pData,
6234         IN      ULONG                   DataSize,
6235         IN  UCHAR                       FromWhichBSSID);
6236
6237
6238 PNET_DEV get_netdev_from_bssid(
6239         IN      PRTMP_ADAPTER   pAd,
6240         IN      UCHAR                   FromWhichBSSID);
6241
6242
6243 PNDIS_PACKET duplicate_pkt(
6244         IN      PRTMP_ADAPTER   pAd,
6245         IN      PUCHAR                  pHeader802_3,
6246     IN  UINT            HdrLen,
6247         IN      PUCHAR                  pData,
6248         IN      ULONG                   DataSize,
6249         IN      UCHAR                   FromWhichBSSID);
6250
6251
6252 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6253         IN      PRTMP_ADAPTER   pAd,
6254         IN      PNDIS_PACKET    pOldPkt);
6255
6256 PNDIS_PACKET duplicate_pkt_with_VLAN(
6257         IN      PRTMP_ADAPTER   pAd,
6258         IN      PUCHAR                  pHeader802_3,
6259     IN  UINT            HdrLen,
6260         IN      PUCHAR                  pData,
6261         IN      ULONG                   DataSize,
6262         IN      UCHAR                   FromWhichBSSID);
6263
6264 PNDIS_PACKET duplicate_pkt_with_WPI(
6265         IN      PRTMP_ADAPTER   pAd,
6266         IN      PNDIS_PACKET    pPacket,
6267         IN      UINT32                  ext_head_len,
6268         IN      UINT32                  ext_tail_len);
6269
6270 UCHAR VLAN_8023_Header_Copy(
6271         IN      PRTMP_ADAPTER   pAd,
6272         IN      PUCHAR                  pHeader802_3,
6273         IN      UINT            HdrLen,
6274         OUT PUCHAR                      pData,
6275         IN      UCHAR                   FromWhichBSSID);
6276
6277 #ifdef DOT11_N_SUPPORT
6278 void ba_flush_reordering_timeout_mpdus(
6279         IN PRTMP_ADAPTER        pAd,
6280         IN PBA_REC_ENTRY        pBAEntry,
6281         IN ULONG                        Now32);
6282
6283
6284 VOID BAOriSessionSetUp(
6285                         IN PRTMP_ADAPTER    pAd,
6286                         IN MAC_TABLE_ENTRY      *pEntry,
6287                         IN UCHAR                        TID,
6288                         IN USHORT                       TimeOut,
6289                         IN ULONG                        DelayTime,
6290                         IN BOOLEAN              isForced);
6291
6292 VOID BASessionTearDownALL(
6293         IN OUT  PRTMP_ADAPTER pAd,
6294         IN              UCHAR Wcid);
6295 #endif // DOT11_N_SUPPORT //
6296
6297 BOOLEAN OS_Need_Clone_Packet(void);
6298
6299
6300 VOID build_tx_packet(
6301         IN      PRTMP_ADAPTER   pAd,
6302         IN      PNDIS_PACKET    pPacket,
6303         IN      PUCHAR  pFrame,
6304         IN      ULONG   FrameLen);
6305
6306
6307 VOID BAOriSessionTearDown(
6308         IN OUT  PRTMP_ADAPTER   pAd,
6309         IN              UCHAR                   Wcid,
6310         IN              UCHAR                   TID,
6311         IN              BOOLEAN                 bPassive,
6312         IN              BOOLEAN                 bForceSend);
6313
6314 VOID BARecSessionTearDown(
6315         IN OUT  PRTMP_ADAPTER   pAd,
6316         IN              UCHAR                   Wcid,
6317         IN              UCHAR                   TID,
6318         IN              BOOLEAN                 bPassive);
6319
6320 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6321 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6322
6323 ULONG AutoChBssInsertEntry(
6324         IN PRTMP_ADAPTER pAd,
6325         IN PUCHAR pBssid,
6326         IN CHAR Ssid[],
6327         IN UCHAR SsidLen,
6328         IN UCHAR ChannelNo,
6329         IN CHAR Rssi);
6330
6331 void AutoChBssTableInit(
6332         IN PRTMP_ADAPTER pAd);
6333
6334 void ChannelInfoInit(
6335         IN PRTMP_ADAPTER pAd);
6336
6337 void AutoChBssTableDestroy(
6338         IN PRTMP_ADAPTER pAd);
6339
6340 void ChannelInfoDestroy(
6341         IN PRTMP_ADAPTER pAd);
6342
6343 UCHAR New_ApAutoSelectChannel(
6344         IN PRTMP_ADAPTER pAd);
6345
6346 BOOLEAN rtstrmactohex(
6347         IN char *s1,
6348         IN char *s2);
6349
6350 BOOLEAN rtstrcasecmp(
6351         IN char *s1,
6352         IN char *s2);
6353
6354 char *rtstrstruncasecmp(
6355         IN char *s1,
6356         IN char *s2);
6357
6358 char    *rtstrstr(
6359         IN      const char * s1,
6360         IN      const char * s2);
6361
6362 char *rstrtok(
6363         IN char * s,
6364         IN const char * ct);
6365
6366 int rtinet_aton(
6367         const char *cp,
6368         unsigned int *addr);
6369
6370 ////////// common ioctl functions //////////
6371 INT Set_DriverVersion_Proc(
6372         IN      PRTMP_ADAPTER   pAd,
6373         IN      PUCHAR                  arg);
6374
6375 INT Set_CountryRegion_Proc(
6376         IN      PRTMP_ADAPTER   pAd,
6377         IN      PUCHAR                  arg);
6378
6379 INT Set_CountryRegionABand_Proc(
6380         IN      PRTMP_ADAPTER   pAd,
6381         IN      PUCHAR                  arg);
6382
6383 INT Set_WirelessMode_Proc(
6384         IN      PRTMP_ADAPTER   pAd,
6385         IN      PUCHAR                  arg);
6386
6387 INT Set_Channel_Proc(
6388         IN      PRTMP_ADAPTER   pAd,
6389         IN      PUCHAR                  arg);
6390
6391 INT     Set_ShortSlot_Proc(
6392         IN      PRTMP_ADAPTER   pAd,
6393         IN      PUCHAR                  arg);
6394
6395 INT     Set_TxPower_Proc(
6396         IN      PRTMP_ADAPTER   pAd,
6397         IN      PUCHAR                  arg);
6398
6399 INT Set_BGProtection_Proc(
6400         IN  PRTMP_ADAPTER               pAd,
6401         IN  PUCHAR                      arg);
6402
6403 INT Set_TxPreamble_Proc(
6404         IN  PRTMP_ADAPTER               pAd,
6405         IN  PUCHAR                      arg);
6406
6407 INT Set_RTSThreshold_Proc(
6408         IN  PRTMP_ADAPTER               pAd,
6409         IN  PUCHAR                      arg);
6410
6411 INT Set_FragThreshold_Proc(
6412         IN  PRTMP_ADAPTER               pAd,
6413         IN  PUCHAR                      arg);
6414
6415 INT Set_TxBurst_Proc(
6416         IN  PRTMP_ADAPTER               pAd,
6417         IN  PUCHAR                      arg);
6418
6419 #ifdef AGGREGATION_SUPPORT
6420 INT     Set_PktAggregate_Proc(
6421         IN  PRTMP_ADAPTER               pAd,
6422         IN  PUCHAR                      arg);
6423 #endif
6424
6425 INT     Set_IEEE80211H_Proc(
6426         IN      PRTMP_ADAPTER   pAd,
6427         IN      PUCHAR                  arg);
6428
6429 #ifdef DBG
6430 INT     Set_Debug_Proc(
6431         IN      PRTMP_ADAPTER   pAd,
6432         IN      PUCHAR                  arg);
6433 #endif
6434
6435 INT     Show_DescInfo_Proc(
6436         IN      PRTMP_ADAPTER   pAd,
6437         IN      PUCHAR                  arg);
6438
6439 INT     Set_ResetStatCounter_Proc(
6440         IN      PRTMP_ADAPTER   pAd,
6441         IN      PUCHAR                  arg);
6442
6443 #ifdef DOT11_N_SUPPORT
6444 INT     Set_BASetup_Proc(
6445         IN      PRTMP_ADAPTER   pAd,
6446         IN      PUCHAR                  arg);
6447
6448 INT     Set_BADecline_Proc(
6449         IN      PRTMP_ADAPTER   pAd,
6450         IN      PUCHAR                  arg);
6451
6452 INT     Set_BAOriTearDown_Proc(
6453         IN      PRTMP_ADAPTER   pAd,
6454         IN      PUCHAR                  arg);
6455
6456 INT     Set_BARecTearDown_Proc(
6457         IN      PRTMP_ADAPTER   pAd,
6458         IN      PUCHAR                  arg);
6459
6460 INT     Set_HtBw_Proc(
6461         IN      PRTMP_ADAPTER   pAd,
6462         IN      PUCHAR                  arg);
6463
6464 INT     Set_HtMcs_Proc(
6465         IN      PRTMP_ADAPTER   pAd,
6466         IN      PUCHAR                  arg);
6467
6468 INT     Set_HtGi_Proc(
6469         IN      PRTMP_ADAPTER   pAd,
6470         IN      PUCHAR                  arg);
6471
6472 INT     Set_HtOpMode_Proc(
6473         IN      PRTMP_ADAPTER   pAd,
6474         IN      PUCHAR                  arg);
6475
6476 INT     Set_HtStbc_Proc(
6477         IN      PRTMP_ADAPTER   pAd,
6478         IN      PUCHAR                  arg);
6479
6480 INT     Set_HtHtc_Proc(
6481         IN      PRTMP_ADAPTER   pAd,
6482         IN      PUCHAR                  arg);
6483
6484 INT     Set_HtExtcha_Proc(
6485         IN      PRTMP_ADAPTER   pAd,
6486         IN      PUCHAR                  arg);
6487
6488 INT     Set_HtMpduDensity_Proc(
6489         IN      PRTMP_ADAPTER   pAd,
6490         IN      PUCHAR                  arg);
6491
6492 INT     Set_HtBaWinSize_Proc(
6493         IN      PRTMP_ADAPTER   pAd,
6494         IN      PUCHAR                  arg);
6495
6496 INT     Set_HtRdg_Proc(
6497         IN      PRTMP_ADAPTER   pAd,
6498         IN      PUCHAR                  arg);
6499
6500 INT     Set_HtLinkAdapt_Proc(
6501         IN      PRTMP_ADAPTER   pAd,
6502         IN      PUCHAR                  arg);
6503
6504 INT     Set_HtAmsdu_Proc(
6505         IN      PRTMP_ADAPTER   pAd,
6506         IN      PUCHAR                  arg);
6507
6508 INT     Set_HtAutoBa_Proc(
6509         IN      PRTMP_ADAPTER   pAd,
6510         IN      PUCHAR                  arg);
6511
6512 INT     Set_HtProtect_Proc(
6513         IN      PRTMP_ADAPTER   pAd,
6514         IN      PUCHAR                  arg);
6515
6516 INT     Set_HtMimoPs_Proc(
6517         IN      PRTMP_ADAPTER   pAd,
6518         IN      PUCHAR                  arg);
6519
6520
6521 INT     Set_ForceShortGI_Proc(
6522         IN      PRTMP_ADAPTER   pAd,
6523         IN      PUCHAR                  arg);
6524
6525 INT     Set_ForceGF_Proc(
6526         IN      PRTMP_ADAPTER   pAd,
6527         IN      PUCHAR                  arg);
6528
6529 INT     SetCommonHT(
6530         IN      PRTMP_ADAPTER   pAd);
6531
6532 INT     Set_SendPSMPAction_Proc(
6533         IN      PRTMP_ADAPTER   pAd,
6534         IN      PUCHAR                  arg);
6535
6536 INT     Set_HtMIMOPSmode_Proc(
6537         IN      PRTMP_ADAPTER   pAd,
6538         IN      PUCHAR                  arg);
6539
6540
6541 INT     Set_HtTxBASize_Proc(
6542         IN      PRTMP_ADAPTER   pAd,
6543         IN      PUCHAR                  arg);
6544 #endif // DOT11_N_SUPPORT //
6545
6546
6547
6548 #ifdef CONFIG_STA_SUPPORT
6549 //Dls , kathy
6550 VOID RTMPSendDLSTearDownFrame(
6551         IN      PRTMP_ADAPTER   pAd,
6552         IN      PUCHAR                  pDA);
6553
6554 #ifdef DOT11_N_SUPPORT
6555 //Block ACK
6556 VOID QueryBATABLE(
6557         IN  PRTMP_ADAPTER pAd,
6558         OUT PQUERYBA_TABLE pBAT);
6559 #endif // DOT11_N_SUPPORT //
6560
6561 #ifdef WPA_SUPPLICANT_SUPPORT
6562 INT         WpaCheckEapCode(
6563         IN  PRTMP_ADAPTER       pAd,
6564         IN  PUCHAR                              pFrame,
6565         IN  USHORT                              FrameLen,
6566         IN  USHORT                              OffSet);
6567
6568 VOID    WpaSendMicFailureToWpaSupplicant(
6569     IN  PRTMP_ADAPTER       pAd,
6570     IN  BOOLEAN             bUnicast);
6571
6572 VOID    SendAssocIEsToWpaSupplicant(
6573     IN  PRTMP_ADAPTER       pAd);
6574 #endif // WPA_SUPPLICANT_SUPPORT //
6575
6576 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6577 int wext_notify_event_assoc(
6578         IN  RTMP_ADAPTER *pAd);
6579 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6580
6581 #endif // CONFIG_STA_SUPPORT //
6582
6583
6584
6585 #ifdef DOT11_N_SUPPORT
6586 VOID Handle_BSS_Width_Trigger_Events(
6587         IN PRTMP_ADAPTER pAd);
6588
6589 void build_ext_channel_switch_ie(
6590         IN PRTMP_ADAPTER pAd,
6591         IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6592 #endif // DOT11_N_SUPPORT //
6593
6594
6595 BOOLEAN APRxDoneInterruptHandle(
6596         IN      PRTMP_ADAPTER   pAd);
6597
6598 BOOLEAN STARxDoneInterruptHandle(
6599         IN      PRTMP_ADAPTER   pAd,
6600         IN      BOOLEAN                 argc);
6601
6602 #ifdef DOT11_N_SUPPORT
6603 // AMPDU packet indication
6604 VOID Indicate_AMPDU_Packet(
6605         IN      PRTMP_ADAPTER   pAd,
6606         IN      RX_BLK                  *pRxBlk,
6607         IN      UCHAR                   FromWhichBSSID);
6608
6609 // AMSDU packet indication
6610 VOID Indicate_AMSDU_Packet(
6611         IN      PRTMP_ADAPTER   pAd,
6612         IN      RX_BLK                  *pRxBlk,
6613         IN      UCHAR                   FromWhichBSSID);
6614 #endif // DOT11_N_SUPPORT //
6615
6616 // Normal legacy Rx packet indication
6617 VOID Indicate_Legacy_Packet(
6618         IN      PRTMP_ADAPTER   pAd,
6619         IN      RX_BLK                  *pRxBlk,
6620         IN      UCHAR                   FromWhichBSSID);
6621
6622 VOID Indicate_EAPOL_Packet(
6623         IN      PRTMP_ADAPTER   pAd,
6624         IN      RX_BLK                  *pRxBlk,
6625         IN      UCHAR                   FromWhichBSSID);
6626
6627 void  update_os_packet_info(
6628         IN      PRTMP_ADAPTER   pAd,
6629         IN      RX_BLK                  *pRxBlk,
6630         IN      UCHAR                   FromWhichBSSID);
6631
6632 void wlan_802_11_to_802_3_packet(
6633         IN      PRTMP_ADAPTER   pAd,
6634         IN      RX_BLK                  *pRxBlk,
6635         IN      PUCHAR                  pHeader802_3,
6636         IN  UCHAR                       FromWhichBSSID);
6637
6638 UINT deaggregate_AMSDU_announce(
6639         IN      PRTMP_ADAPTER   pAd,
6640         PNDIS_PACKET            pPacket,
6641         IN      PUCHAR                  pData,
6642         IN      ULONG                   DataSize);
6643
6644
6645 #ifdef CONFIG_STA_SUPPORT
6646 // remove LLC and get 802_3 Header
6647 #define  RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3)    \
6648 {                                                                                                                                                               \
6649         PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA;                                 \
6650                                                                                                                                                                 \
6651         if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH))                                    \
6652         {                                                                           \
6653                 _pDA = _pRxBlk->pHeader->Addr3;                                         \
6654                 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11);                \
6655         }                                                                           \
6656         else                                                                        \
6657         {                                                                           \
6658                 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA))                               \
6659                 {                                                                       \
6660                         _pDA = _pRxBlk->pHeader->Addr1;                                     \
6661                 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS))                                                                 \
6662                         _pSA = _pRxBlk->pHeader->Addr2;                                                                         \
6663                 else                                                                                                                                    \
6664                         _pSA = _pRxBlk->pHeader->Addr3;                                     \
6665                 }                                                                       \
6666                 else                                                                    \
6667                 {                                                                       \
6668                         _pDA = _pRxBlk->pHeader->Addr1;                                     \
6669                         _pSA = _pRxBlk->pHeader->Addr2;                                     \
6670                 }                                                                       \
6671         }                                                                           \
6672                                                                                                                                                                 \
6673         CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData,                             \
6674                 _pRxBlk->DataSize, _pRemovedLLCSNAP);                                   \
6675 }
6676 #endif // CONFIG_STA_SUPPORT //
6677
6678
6679 BOOLEAN APFowardWirelessStaToWirelessSta(
6680         IN      PRTMP_ADAPTER   pAd,
6681         IN      PNDIS_PACKET    pPacket,
6682         IN      ULONG                   FromWhichBSSID);
6683
6684 VOID Announce_or_Forward_802_3_Packet(
6685         IN      PRTMP_ADAPTER   pAd,
6686         IN      PNDIS_PACKET    pPacket,
6687         IN      UCHAR                   FromWhichBSSID);
6688
6689 VOID Sta_Announce_or_Forward_802_3_Packet(
6690         IN      PRTMP_ADAPTER   pAd,
6691         IN      PNDIS_PACKET    pPacket,
6692         IN      UCHAR                   FromWhichBSSID);
6693
6694
6695 #ifdef CONFIG_STA_SUPPORT
6696 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6697                         Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6698                         //announce_802_3_packet(_pAd, _pPacket);
6699 #endif // CONFIG_STA_SUPPORT //
6700
6701
6702 PNDIS_PACKET DuplicatePacket(
6703         IN      PRTMP_ADAPTER   pAd,
6704         IN      PNDIS_PACKET    pPacket,
6705         IN      UCHAR                   FromWhichBSSID);
6706
6707
6708 PNDIS_PACKET ClonePacket(
6709         IN      PRTMP_ADAPTER   pAd,
6710         IN      PNDIS_PACKET    pPacket,
6711         IN      PUCHAR                  pData,
6712         IN      ULONG                   DataSize);
6713
6714
6715 // Normal, AMPDU or AMSDU
6716 VOID CmmRxnonRalinkFrameIndicate(
6717         IN      PRTMP_ADAPTER   pAd,
6718         IN      RX_BLK                  *pRxBlk,
6719         IN      UCHAR                   FromWhichBSSID);
6720
6721 VOID CmmRxRalinkFrameIndicate(
6722         IN      PRTMP_ADAPTER   pAd,
6723         IN      MAC_TABLE_ENTRY *pEntry,
6724         IN      RX_BLK                  *pRxBlk,
6725         IN      UCHAR                   FromWhichBSSID);
6726
6727 VOID Update_Rssi_Sample(
6728         IN PRTMP_ADAPTER        pAd,
6729         IN RSSI_SAMPLE          *pRssi,
6730         IN PRXWI_STRUC          pRxWI);
6731
6732 PNDIS_PACKET GetPacketFromRxRing(
6733         IN              PRTMP_ADAPTER   pAd,
6734         OUT             PRT28XX_RXD_STRUC               pSaveRxD,
6735         OUT             BOOLEAN                 *pbReschedule,
6736         IN OUT  UINT32                  *pRxPending);
6737
6738 PNDIS_PACKET RTMPDeFragmentDataFrame(
6739         IN      PRTMP_ADAPTER   pAd,
6740         IN      RX_BLK                  *pRxBlk);
6741
6742 ////////////////////////////////////////
6743
6744
6745
6746
6747
6748 #ifdef SNMP_SUPPORT
6749 //for snmp , kathy
6750 typedef struct _DefaultKeyIdxValue
6751 {
6752         UCHAR   KeyIdx;
6753         UCHAR   Value[16];
6754 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6755 #endif
6756
6757
6758 #ifdef CONFIG_STA_SUPPORT
6759 enum {
6760         DIDmsg_lnxind_wlansniffrm               = 0x00000044,
6761         DIDmsg_lnxind_wlansniffrm_hosttime      = 0x00010044,
6762         DIDmsg_lnxind_wlansniffrm_mactime       = 0x00020044,
6763         DIDmsg_lnxind_wlansniffrm_channel       = 0x00030044,
6764         DIDmsg_lnxind_wlansniffrm_rssi          = 0x00040044,
6765         DIDmsg_lnxind_wlansniffrm_sq            = 0x00050044,
6766         DIDmsg_lnxind_wlansniffrm_signal        = 0x00060044,
6767         DIDmsg_lnxind_wlansniffrm_noise         = 0x00070044,
6768         DIDmsg_lnxind_wlansniffrm_rate          = 0x00080044,
6769         DIDmsg_lnxind_wlansniffrm_istx          = 0x00090044,
6770         DIDmsg_lnxind_wlansniffrm_frmlen        = 0x000A0044
6771 };
6772 enum {
6773         P80211ENUM_msgitem_status_no_value      = 0x00
6774 };
6775 enum {
6776         P80211ENUM_truth_false                  = 0x00,
6777         P80211ENUM_truth_true                   = 0x01
6778 };
6779
6780 /* Definition from madwifi */
6781 typedef struct {
6782         UINT32 did;
6783         UINT16 status;
6784         UINT16 len;
6785         UINT32 data;
6786 } p80211item_uint32_t;
6787
6788 typedef struct {
6789         UINT32 msgcode;
6790         UINT32 msglen;
6791 #define WLAN_DEVNAMELEN_MAX 16
6792         UINT8 devname[WLAN_DEVNAMELEN_MAX];
6793         p80211item_uint32_t hosttime;
6794         p80211item_uint32_t mactime;
6795         p80211item_uint32_t channel;
6796         p80211item_uint32_t rssi;
6797         p80211item_uint32_t sq;
6798         p80211item_uint32_t signal;
6799         p80211item_uint32_t noise;
6800         p80211item_uint32_t rate;
6801         p80211item_uint32_t istx;
6802         p80211item_uint32_t frmlen;
6803 } wlan_ng_prism2_header;
6804
6805 /* The radio capture header precedes the 802.11 header. */
6806 typedef struct PACKED _ieee80211_radiotap_header {
6807     UINT8       it_version;     /* Version 0. Only increases
6808                                  * for drastic changes,
6809                                  * introduction of compatible
6810                                  * new fields does not count.
6811                                  */
6812     UINT8       it_pad;
6813     UINT16     it_len;         /* length of the whole
6814                                  * header in bytes, including
6815                                  * it_version, it_pad,
6816                                  * it_len, and data fields.
6817                                  */
6818     UINT32   it_present;        /* A bitmap telling which
6819                                          * fields are present. Set bit 31
6820                                          * (0x80000000) to extend the
6821                                          * bitmap by another 32 bits.
6822                                          * Additional extensions are made
6823                                          * by setting bit 31.
6824                                          */
6825 }ieee80211_radiotap_header ;
6826
6827 enum ieee80211_radiotap_type {
6828     IEEE80211_RADIOTAP_TSFT = 0,
6829     IEEE80211_RADIOTAP_FLAGS = 1,
6830     IEEE80211_RADIOTAP_RATE = 2,
6831     IEEE80211_RADIOTAP_CHANNEL = 3,
6832     IEEE80211_RADIOTAP_FHSS = 4,
6833     IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6834     IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6835     IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6836     IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6837     IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6838     IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6839     IEEE80211_RADIOTAP_ANTENNA = 11,
6840     IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6841     IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6842 };
6843
6844 #define WLAN_RADIOTAP_PRESENT (                 \
6845         (1 << IEEE80211_RADIOTAP_TSFT)  |       \
6846         (1 << IEEE80211_RADIOTAP_FLAGS) |       \
6847         (1 << IEEE80211_RADIOTAP_RATE)  |       \
6848          0)
6849
6850 typedef struct _wlan_radiotap_header {
6851         ieee80211_radiotap_header wt_ihdr;
6852         INT64 wt_tsft;
6853         UINT8 wt_flags;
6854         UINT8 wt_rate;
6855 } wlan_radiotap_header;
6856 /* Definition from madwifi */
6857
6858 void send_monitor_packets(
6859         IN      PRTMP_ADAPTER   pAd,
6860         IN      RX_BLK                  *pRxBlk);
6861
6862 #if WIRELESS_EXT >= 12
6863 // This function will be called when query /proc
6864 struct iw_statistics *rt28xx_get_wireless_stats(
6865     IN struct net_device *net_dev);
6866 #endif
6867
6868 VOID    RTMPSetDesiredRates(
6869     IN  PRTMP_ADAPTER   pAdapter,
6870     IN  LONG            Rates);
6871 #endif // CONFIG_STA_SUPPORT //
6872
6873 INT     Set_FixedTxMode_Proc(
6874         IN      PRTMP_ADAPTER   pAd,
6875         IN      PUCHAR                  arg);
6876
6877 static inline char* GetPhyMode(
6878         int Mode)
6879 {
6880         switch(Mode)
6881         {
6882                 case MODE_CCK:
6883                         return "CCK";
6884
6885                 case MODE_OFDM:
6886                         return "OFDM";
6887 #ifdef DOT11_N_SUPPORT
6888                 case MODE_HTMIX:
6889                         return "HTMIX";
6890
6891                 case MODE_HTGREENFIELD:
6892                         return "GREEN";
6893 #endif // DOT11_N_SUPPORT //
6894                 default:
6895                         return "N/A";
6896         }
6897 }
6898
6899
6900 static inline char* GetBW(
6901         int BW)
6902 {
6903         switch(BW)
6904         {
6905                 case BW_10:
6906                         return "10M";
6907
6908                 case BW_20:
6909                         return "20M";
6910 #ifdef DOT11_N_SUPPORT
6911                 case BW_40:
6912                         return "40M";
6913 #endif // DOT11_N_SUPPORT //
6914                 default:
6915                         return "N/A";
6916         }
6917 }
6918
6919
6920 VOID RT28xxThreadTerminate(
6921         IN RTMP_ADAPTER *pAd);
6922
6923 BOOLEAN RT28XXChipsetCheck(
6924         IN void *_dev_p);
6925
6926 BOOLEAN RT28XXNetDevInit(
6927         IN void                                 *_dev_p,
6928         IN struct  net_device   *net_dev,
6929         IN RTMP_ADAPTER                 *pAd);
6930
6931 BOOLEAN RT28XXProbePostConfig(
6932         IN void                                 *_dev_p,
6933         IN RTMP_ADAPTER                 *pAd,
6934         IN INT32                                argc);
6935
6936 VOID RT28XXDMADisable(
6937         IN RTMP_ADAPTER                 *pAd);
6938
6939 VOID RT28XXDMAEnable(
6940         IN RTMP_ADAPTER                 *pAd);
6941
6942 VOID RT28xx_UpdateBeaconToAsic(
6943         IN RTMP_ADAPTER * pAd,
6944         IN INT apidx,
6945         IN ULONG BeaconLen,
6946         IN ULONG UpdatePos);
6947
6948 INT rt28xx_ioctl(
6949         IN      struct net_device       *net_dev,
6950         IN      OUT     struct ifreq    *rq,
6951         IN      INT                     cmd);
6952
6953
6954 #ifdef CONFIG_STA_SUPPORT
6955 INT rt28xx_sta_ioctl(
6956         IN      struct net_device       *net_dev,
6957         IN      OUT     struct ifreq    *rq,
6958         IN      INT                     cmd);
6959 #endif // CONFIG_STA_SUPPORT //
6960
6961 BOOLEAN RT28XXSecurityKeyAdd(
6962         IN              PRTMP_ADAPTER           pAd,
6963         IN              ULONG                           apidx,
6964         IN              ULONG                           KeyIdx,
6965         IN              MAC_TABLE_ENTRY         *pEntry);
6966
6967 ////////////////////////////////////////
6968 PNDIS_PACKET GetPacketFromRxRing(
6969         IN              PRTMP_ADAPTER   pAd,
6970         OUT             PRT28XX_RXD_STRUC       pSaveRxD,
6971         OUT             BOOLEAN                 *pbReschedule,
6972         IN OUT  UINT32                  *pRxPending);
6973
6974
6975 void kill_thread_task(PRTMP_ADAPTER pAd);
6976
6977 void tbtt_tasklet(unsigned long data);
6978
6979
6980 VOID AsicTurnOffRFClk(
6981         IN PRTMP_ADAPTER    pAd,
6982         IN      UCHAR           Channel);
6983
6984 VOID AsicTurnOnRFClk(
6985         IN PRTMP_ADAPTER        pAd,
6986         IN      UCHAR                   Channel);
6987
6988 #ifdef RT30xx
6989 NTSTATUS RT30xxWriteRFRegister(
6990         IN      PRTMP_ADAPTER   pAd,
6991         IN      UCHAR                   RegID,
6992         IN      UCHAR                   Value);
6993
6994 NTSTATUS RT30xxReadRFRegister(
6995         IN      PRTMP_ADAPTER   pAd,
6996         IN      UCHAR                   RegID,
6997         IN      PUCHAR                  pValue);
6998
6999 //2008/09/11:KH add to support efuse<--
7000 UCHAR eFuseReadRegisters(
7001         IN      PRTMP_ADAPTER   pAd,
7002         IN      USHORT Offset,
7003         IN      USHORT Length,
7004         OUT     USHORT* pData);
7005
7006 VOID eFuseReadPhysical(
7007         IN      PRTMP_ADAPTER   pAd,
7008         IN      PUSHORT lpInBuffer,
7009         IN      ULONG nInBufferSize,
7010         OUT     PUSHORT lpOutBuffer,
7011         IN      ULONG nOutBufferSize
7012 );
7013
7014 NTSTATUS eFuseRead(
7015         IN      PRTMP_ADAPTER   pAd,
7016         IN      USHORT                  Offset,
7017         OUT     PUCHAR                  pData,
7018         IN      USHORT                  Length);
7019
7020 VOID eFusePhysicalWriteRegisters(
7021         IN      PRTMP_ADAPTER   pAd,
7022         IN      USHORT Offset,
7023         IN      USHORT Length,
7024         OUT     USHORT* pData);
7025
7026 NTSTATUS eFuseWriteRegisters(
7027         IN      PRTMP_ADAPTER   pAd,
7028         IN      USHORT Offset,
7029         IN      USHORT Length,
7030         IN      USHORT* pData);
7031
7032 VOID eFuseWritePhysical(
7033         IN      PRTMP_ADAPTER   pAd,
7034         PUSHORT lpInBuffer,
7035         ULONG nInBufferSize,
7036         PUCHAR lpOutBuffer,
7037         ULONG nOutBufferSize
7038 );
7039
7040 NTSTATUS eFuseWrite(
7041         IN      PRTMP_ADAPTER   pAd,
7042         IN      USHORT                  Offset,
7043         IN      PUCHAR                  pData,
7044         IN      USHORT                  length);
7045
7046 INT set_eFuseGetFreeBlockCount_Proc(
7047         IN      PRTMP_ADAPTER   pAd,
7048         IN      PUCHAR                  arg);
7049
7050 INT set_eFusedump_Proc(
7051         IN      PRTMP_ADAPTER   pAd,
7052         IN      PUCHAR                  arg);
7053
7054 INT set_eFuseLoadFromBin_Proc(
7055         IN      PRTMP_ADAPTER   pAd,
7056         IN      PUCHAR                  arg);
7057
7058 NTSTATUS eFuseWriteRegistersFromBin(
7059         IN      PRTMP_ADAPTER   pAd,
7060         IN      USHORT Offset,
7061         IN      USHORT Length,
7062         IN      USHORT* pData);
7063
7064 VOID eFusePhysicalReadRegisters(
7065         IN      PRTMP_ADAPTER   pAd,
7066         IN      USHORT Offset,
7067         IN      USHORT Length,
7068         OUT     USHORT* pData);
7069
7070 NDIS_STATUS NICLoadEEPROM(
7071         IN PRTMP_ADAPTER pAd);
7072
7073 BOOLEAN bNeedLoadEEPROM(
7074         IN      PRTMP_ADAPTER   pAd);
7075 //2008/09/11:KH add to support efuse-->
7076 #endif // RT30xx //
7077
7078 #ifdef RT30xx
7079 // add by johnli, RF power sequence setup
7080 VOID RT30xxLoadRFNormalModeSetup(
7081         IN PRTMP_ADAPTER        pAd);
7082
7083 VOID RT30xxLoadRFSleepModeSetup(
7084         IN PRTMP_ADAPTER        pAd);
7085
7086 VOID RT30xxReverseRFSleepModeSetup(
7087         IN PRTMP_ADAPTER        pAd);
7088 // end johnli
7089 #endif // RT30xx //
7090
7091 #ifdef RT2870
7092 //
7093 // Function Prototype in rtusb_bulk.c
7094 //
7095 VOID    RTUSBInitTxDesc(
7096         IN      PRTMP_ADAPTER   pAd,
7097         IN      PTX_CONTEXT             pTxContext,
7098         IN      UCHAR                   BulkOutPipeId,
7099         IN      usb_complete_t  Func);
7100
7101 VOID    RTUSBInitHTTxDesc(
7102         IN      PRTMP_ADAPTER   pAd,
7103         IN      PHT_TX_CONTEXT  pTxContext,
7104         IN      UCHAR                   BulkOutPipeId,
7105         IN      ULONG                   BulkOutSize,
7106         IN      usb_complete_t  Func);
7107
7108 VOID    RTUSBInitRxDesc(
7109         IN      PRTMP_ADAPTER   pAd,
7110         IN      PRX_CONTEXT             pRxContext);
7111
7112 VOID RTUSBCleanUpDataBulkOutQueue(
7113         IN      PRTMP_ADAPTER   pAd);
7114
7115 VOID RTUSBCancelPendingBulkOutIRP(
7116         IN      PRTMP_ADAPTER   pAd);
7117
7118 VOID RTUSBBulkOutDataPacket(
7119         IN      PRTMP_ADAPTER   pAd,
7120         IN      UCHAR                   BulkOutPipeId,
7121         IN      UCHAR                   Index);
7122
7123 VOID RTUSBBulkOutNullFrame(
7124         IN      PRTMP_ADAPTER   pAd);
7125
7126 VOID RTUSBBulkOutRTSFrame(
7127         IN      PRTMP_ADAPTER   pAd);
7128
7129 VOID RTUSBCancelPendingBulkInIRP(
7130         IN      PRTMP_ADAPTER   pAd);
7131
7132 VOID RTUSBCancelPendingIRPs(
7133         IN      PRTMP_ADAPTER   pAd);
7134
7135 VOID RTUSBBulkOutMLMEPacket(
7136         IN      PRTMP_ADAPTER   pAd,
7137         IN      UCHAR                   Index);
7138
7139 VOID RTUSBBulkOutPsPoll(
7140         IN      PRTMP_ADAPTER   pAd);
7141
7142 VOID RTUSBCleanUpMLMEBulkOutQueue(
7143         IN      PRTMP_ADAPTER   pAd);
7144
7145 VOID RTUSBKickBulkOut(
7146         IN      PRTMP_ADAPTER pAd);
7147
7148 VOID    RTUSBBulkReceive(
7149         IN      PRTMP_ADAPTER   pAd);
7150
7151 VOID DoBulkIn(
7152         IN RTMP_ADAPTER *pAd);
7153
7154 VOID RTUSBInitRxDesc(
7155         IN      PRTMP_ADAPTER   pAd,
7156         IN  PRX_CONTEXT         pRxContext);
7157
7158 VOID RTUSBBulkRxHandle(
7159         IN unsigned long data);
7160
7161 //
7162 // Function Prototype in rtusb_io.c
7163 //
7164 NTSTATUS RTUSBMultiRead(
7165         IN      PRTMP_ADAPTER   pAd,
7166         IN      USHORT                  Offset,
7167         OUT     PUCHAR                  pData,
7168         IN      USHORT                  length);
7169
7170 NTSTATUS RTUSBMultiWrite(
7171         IN      PRTMP_ADAPTER   pAd,
7172         IN      USHORT                  Offset,
7173         IN      PUCHAR                  pData,
7174         IN      USHORT                  length);
7175
7176 NTSTATUS RTUSBMultiWrite_OneByte(
7177         IN      PRTMP_ADAPTER   pAd,
7178         IN      USHORT                  Offset,
7179         IN      PUCHAR                  pData);
7180
7181 NTSTATUS RTUSBReadBBPRegister(
7182         IN      PRTMP_ADAPTER   pAd,
7183         IN      UCHAR                   Id,
7184         IN      PUCHAR                  pValue);
7185
7186 NTSTATUS RTUSBWriteBBPRegister(
7187         IN      PRTMP_ADAPTER   pAd,
7188         IN      UCHAR                   Id,
7189         IN      UCHAR                   Value);
7190
7191 NTSTATUS RTUSBWriteRFRegister(
7192         IN      PRTMP_ADAPTER   pAd,
7193         IN      UINT32                  Value);
7194
7195 NTSTATUS RTUSB_VendorRequest(
7196         IN      PRTMP_ADAPTER   pAd,
7197         IN      UINT32                  TransferFlags,
7198         IN      UCHAR                   ReservedBits,
7199         IN      UCHAR                   Request,
7200         IN      USHORT                  Value,
7201         IN      USHORT                  Index,
7202         IN      PVOID                   TransferBuffer,
7203         IN      UINT32                  TransferBufferLength);
7204
7205 NTSTATUS RTUSBReadEEPROM(
7206         IN      PRTMP_ADAPTER   pAd,
7207         IN      USHORT                  Offset,
7208         OUT     PUCHAR                  pData,
7209         IN      USHORT                  length);
7210
7211 NTSTATUS RTUSBWriteEEPROM(
7212         IN      PRTMP_ADAPTER   pAd,
7213         IN      USHORT                  Offset,
7214         IN      PUCHAR                  pData,
7215         IN      USHORT                  length);
7216
7217 VOID RTUSBPutToSleep(
7218         IN      PRTMP_ADAPTER   pAd);
7219
7220 NTSTATUS RTUSBWakeUp(
7221         IN      PRTMP_ADAPTER   pAd);
7222
7223 VOID RTUSBInitializeCmdQ(
7224         IN      PCmdQ   cmdq);
7225
7226 NDIS_STATUS     RTUSBEnqueueCmdFromNdis(
7227         IN      PRTMP_ADAPTER   pAd,
7228         IN      NDIS_OID                Oid,
7229         IN      BOOLEAN                 SetInformation,
7230         IN      PVOID                   pInformationBuffer,
7231         IN      UINT32                  InformationBufferLength);
7232
7233 NDIS_STATUS RTUSBEnqueueInternalCmd(
7234         IN      PRTMP_ADAPTER   pAd,
7235         IN NDIS_OID                     Oid,
7236         IN PVOID                        pInformationBuffer,
7237         IN UINT32                       InformationBufferLength);
7238
7239 VOID RTUSBDequeueCmd(
7240         IN      PCmdQ           cmdq,
7241         OUT     PCmdQElmt       *pcmdqelmt);
7242
7243 INT RTUSBCmdThread(
7244         IN OUT PVOID Context);
7245
7246 INT TimerQThread(
7247         IN OUT PVOID Context);
7248
7249 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7250         IN RTMP_ADAPTER *pAd,
7251         IN RALINK_TIMER_STRUCT *pTimer);
7252
7253 BOOLEAN RT2870_TimerQ_Remove(
7254         IN RTMP_ADAPTER *pAd,
7255         IN RALINK_TIMER_STRUCT *pTimer);
7256
7257 void RT2870_TimerQ_Exit(
7258         IN RTMP_ADAPTER *pAd);
7259
7260 void RT2870_TimerQ_Init(
7261         IN RTMP_ADAPTER *pAd);
7262
7263 VOID RT2870_BssBeaconExit(
7264         IN RTMP_ADAPTER *pAd);
7265
7266 VOID RT2870_BssBeaconStop(
7267         IN RTMP_ADAPTER *pAd);
7268
7269 VOID RT2870_BssBeaconStart(
7270         IN RTMP_ADAPTER * pAd);
7271
7272 VOID RT2870_BssBeaconInit(
7273         IN RTMP_ADAPTER *pAd);
7274
7275 VOID RT2870_WatchDog(
7276         IN RTMP_ADAPTER *pAd);
7277
7278 NTSTATUS RTUSBWriteMACRegister(
7279         IN      PRTMP_ADAPTER   pAd,
7280         IN      USHORT                  Offset,
7281         IN      UINT32                  Value);
7282
7283 NTSTATUS RTUSBReadMACRegister(
7284         IN      PRTMP_ADAPTER   pAd,
7285         IN      USHORT                  Offset,
7286         OUT     PUINT32                 pValue);
7287
7288 NTSTATUS RTUSBSingleWrite(
7289         IN      RTMP_ADAPTER    *pAd,
7290         IN      USHORT                  Offset,
7291         IN      USHORT                  Value);
7292
7293 NTSTATUS RTUSBFirmwareRun(
7294         IN      PRTMP_ADAPTER   pAd);
7295
7296 NTSTATUS RTUSBFirmwareWrite(
7297         IN PRTMP_ADAPTER pAd,
7298         IN PUCHAR               pFwImage,
7299         IN ULONG                FwLen);
7300
7301 NTSTATUS        RTUSBFirmwareOpmode(
7302         IN      PRTMP_ADAPTER   pAd,
7303         OUT     PUINT32                 pValue);
7304
7305 NTSTATUS        RTUSBVenderReset(
7306         IN      PRTMP_ADAPTER   pAd);
7307
7308 NDIS_STATUS RTUSBSetHardWareRegister(
7309         IN      PRTMP_ADAPTER   pAdapter,
7310         IN      PVOID                   pBuf);
7311
7312 NDIS_STATUS RTUSBQueryHardWareRegister(
7313         IN      PRTMP_ADAPTER   pAdapter,
7314         IN      PVOID                   pBuf);
7315
7316 VOID CMDHandler(
7317     IN PRTMP_ADAPTER pAd);
7318
7319
7320 NDIS_STATUS      CreateThreads(
7321         IN      struct net_device *net_dev );
7322
7323
7324 VOID MacTableInitialize(
7325         IN  PRTMP_ADAPTER   pAd);
7326
7327 VOID MlmeSetPsm(
7328         IN PRTMP_ADAPTER pAd,
7329         IN USHORT psm);
7330
7331 NDIS_STATUS RTMPWPAAddKeyProc(
7332         IN  PRTMP_ADAPTER   pAd,
7333         IN  PVOID           pBuf);
7334
7335 VOID AsicRxAntEvalAction(
7336         IN PRTMP_ADAPTER pAd);
7337
7338 void append_pkt(
7339         IN      PRTMP_ADAPTER   pAd,
7340         IN      PUCHAR                  pHeader802_3,
7341     IN  UINT            HdrLen,
7342         IN      PUCHAR                  pData,
7343         IN      ULONG                   DataSize,
7344         OUT  PNDIS_PACKET       *ppPacket);
7345
7346 UINT deaggregate_AMSDU_announce(
7347         IN      PRTMP_ADAPTER   pAd,
7348         PNDIS_PACKET            pPacket,
7349         IN      PUCHAR                  pData,
7350         IN      ULONG                   DataSize);
7351
7352 NDIS_STATUS     RTMPCheckRxError(
7353         IN      PRTMP_ADAPTER   pAd,
7354         IN      PHEADER_802_11  pHeader,
7355         IN      PRXWI_STRUC     pRxWI,
7356         IN      PRT28XX_RXD_STRUC       pRxINFO);
7357
7358
7359 VOID RTUSBMlmeHardTransmit(
7360         IN      PRTMP_ADAPTER   pAd,
7361         IN      PMGMT_STRUC             pMgmt);
7362
7363 INT MlmeThread(
7364         IN PVOID Context);
7365
7366 //
7367 // Function Prototype in rtusb_data.c
7368 //
7369 NDIS_STATUS     RTUSBFreeDescriptorRequest(
7370         IN      PRTMP_ADAPTER   pAd,
7371         IN      UCHAR                   BulkOutPipeId,
7372         IN      UINT32                  NumberRequired);
7373
7374
7375 BOOLEAN RTUSBNeedQueueBackForAgg(
7376         IN RTMP_ADAPTER *pAd,
7377         IN UCHAR                BulkOutPipeId);
7378
7379
7380 VOID RTMPWriteTxInfo(
7381         IN      PRTMP_ADAPTER   pAd,
7382         IN      PTXINFO_STRUC   pTxInfo,
7383         IN        USHORT                USBDMApktLen,
7384         IN        BOOLEAN               bWiv,
7385         IN        UCHAR                 QueueSel,
7386         IN        UCHAR                 NextValid,
7387         IN        UCHAR                 TxBurst);
7388
7389 //
7390 // Function Prototype in cmm_data_2870.c
7391 //
7392 USHORT RtmpUSB_WriteSubTxResource(
7393         IN      PRTMP_ADAPTER   pAd,
7394         IN      TX_BLK                  *pTxBlk,
7395         IN      BOOLEAN                 bIsLast,
7396         OUT     USHORT                  *FreeNumber);
7397
7398 USHORT RtmpUSB_WriteSingleTxResource(
7399         IN      PRTMP_ADAPTER   pAd,
7400         IN      TX_BLK                  *pTxBlk,
7401         IN      BOOLEAN                 bIsLast,
7402         OUT     USHORT                  *FreeNumber);
7403
7404 USHORT  RtmpUSB_WriteFragTxResource(
7405         IN      PRTMP_ADAPTER   pAd,
7406         IN      TX_BLK                  *pTxBlk,
7407         IN      UCHAR                   fragNum,
7408         OUT     USHORT                  *FreeNumber);
7409
7410 USHORT RtmpUSB_WriteMultiTxResource(
7411         IN      PRTMP_ADAPTER   pAd,
7412         IN      TX_BLK                  *pTxBlk,
7413         IN      UCHAR                   frameNum,
7414         OUT     USHORT                  *FreeNumber);
7415
7416 VOID RtmpUSB_FinalWriteTxResource(
7417         IN      PRTMP_ADAPTER   pAd,
7418         IN      TX_BLK                  *pTxBlk,
7419         IN      USHORT                  totalMPDUSize,
7420         IN      USHORT                  TxIdx);
7421
7422 VOID RtmpUSBDataLastTxIdx(
7423         IN      PRTMP_ADAPTER   pAd,
7424         IN      UCHAR                   QueIdx,
7425         IN      USHORT                  TxIdx);
7426
7427 VOID RtmpUSBDataKickOut(
7428         IN      PRTMP_ADAPTER   pAd,
7429         IN      TX_BLK                  *pTxBlk,
7430         IN      UCHAR                   QueIdx);
7431
7432
7433 int RtmpUSBMgmtKickOut(
7434         IN RTMP_ADAPTER         *pAd,
7435         IN UCHAR                        QueIdx,
7436         IN PNDIS_PACKET         pPacket,
7437         IN PUCHAR                       pSrcBufVA,
7438         IN UINT                         SrcBufLen);
7439
7440 VOID RtmpUSBNullFrameKickOut(
7441         IN RTMP_ADAPTER *pAd,
7442         IN UCHAR                QueIdx,
7443         IN UCHAR                *pNullFrame,
7444         IN UINT32               frameLen);
7445
7446 VOID RT28xxUsbStaAsicForceWakeup(
7447         IN PRTMP_ADAPTER pAd,
7448         IN BOOLEAN       bFromTx);
7449
7450 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7451         IN PRTMP_ADAPTER pAd,
7452         IN USHORT TbttNumToNextWakeUp);
7453
7454 VOID RT28xxUsbMlmeRadioOn(
7455         IN PRTMP_ADAPTER pAd);
7456
7457 VOID RT28xxUsbMlmeRadioOFF(
7458         IN PRTMP_ADAPTER pAd);
7459 #endif // RT2870 //
7460
7461 ////////////////////////////////////////
7462
7463 VOID QBSS_LoadInit(
7464         IN              RTMP_ADAPTER    *pAd);
7465
7466 UINT32 QBSS_LoadElementAppend(
7467         IN              RTMP_ADAPTER    *pAd,
7468         OUT             UINT8                   *buf_p);
7469
7470 VOID QBSS_LoadUpdate(
7471         IN              RTMP_ADAPTER    *pAd);
7472
7473 ///////////////////////////////////////
7474 INT RTMPShowCfgValue(
7475         IN      PRTMP_ADAPTER   pAd,
7476         IN      PUCHAR                  pName,
7477         IN      PUCHAR                  pBuf);
7478
7479 PCHAR   RTMPGetRalinkAuthModeStr(
7480     IN  NDIS_802_11_AUTHENTICATION_MODE authMode);
7481
7482 PCHAR   RTMPGetRalinkEncryModeStr(
7483     IN  USHORT encryMode);
7484 //////////////////////////////////////
7485
7486 #ifdef CONFIG_STA_SUPPORT
7487 VOID AsicStaBbpTuning(
7488         IN PRTMP_ADAPTER pAd);
7489
7490 BOOLEAN StaAddMacTableEntry(
7491         IN  PRTMP_ADAPTER               pAd,
7492         IN  PMAC_TABLE_ENTRY    pEntry,
7493         IN  UCHAR                               MaxSupportedRateIn500Kbps,
7494         IN  HT_CAPABILITY_IE    *pHtCapability,
7495         IN  UCHAR                               HtCapabilityLen,
7496         IN  USHORT                      CapabilityInfo);
7497 #endif // CONFIG_STA_SUPPORT //
7498
7499 void RTMP_IndicateMediaState(
7500         IN      PRTMP_ADAPTER   pAd);
7501
7502 VOID ReSyncBeaconTime(
7503         IN  PRTMP_ADAPTER   pAd);
7504
7505 VOID RTMPSetAGCInitValue(
7506         IN PRTMP_ADAPTER        pAd,
7507         IN UCHAR                        BandWidth);
7508
7509 int rt28xx_close(IN PNET_DEV dev);
7510 int rt28xx_open(IN PNET_DEV dev);
7511
7512 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7513 {
7514 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7515 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7516
7517         if (VIRTUAL_IF_NUM(pAd) == 0)
7518         {
7519                 if (rt28xx_open(pAd->net_dev) != 0)
7520                         return -1;
7521         }
7522         else
7523         {
7524         }
7525         VIRTUAL_IF_INC(pAd);
7526         return 0;
7527 }
7528
7529 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7530 {
7531         VIRTUAL_IF_DEC(pAd);
7532         if (VIRTUAL_IF_NUM(pAd) == 0)
7533                 rt28xx_close(pAd->net_dev);
7534         return;
7535 }
7536
7537
7538 #endif  // __RTMP_H__
7539