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