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