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