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