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