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