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