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