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