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