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