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