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