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