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