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