Staging: rt3070: remove dead NINTENDO_AP 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 DBG_DIAGNOSE
2667 #define DIAGNOSE_TIME   10   // 10 sec
2668 typedef struct _RtmpDiagStrcut_
2669 {       // Diagnosis Related element
2670         unsigned char           inited;
2671         unsigned char   qIdx;
2672         unsigned char   ArrayStartIdx;
2673         unsigned char           ArrayCurIdx;
2674         // Tx Related Count
2675         USHORT                  TxDataCnt[DIAGNOSE_TIME];
2676         USHORT                  TxFailCnt[DIAGNOSE_TIME];
2677 //      USHORT                  TxDescCnt[DIAGNOSE_TIME][16];           // TxDesc queue length in scale of 0~14, >=15
2678         USHORT                  TxDescCnt[DIAGNOSE_TIME][24]; // 3*3    // TxDesc queue length in scale of 0~14, >=15
2679 //      USHORT                  TxMcsCnt[DIAGNOSE_TIME][16];                    // TxDate MCS Count in range from 0 to 15, step in 1.
2680         USHORT                  TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2681         USHORT                  TxSWQueCnt[DIAGNOSE_TIME][9];           // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2682
2683         USHORT                  TxAggCnt[DIAGNOSE_TIME];
2684         USHORT                  TxNonAggCnt[DIAGNOSE_TIME];
2685 //      USHORT                  TxAMPDUCnt[DIAGNOSE_TIME][16];          // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2686         USHORT                  TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2687         USHORT                  TxRalinkCnt[DIAGNOSE_TIME];                     // TxRalink Aggregation Count in 1 sec scale.
2688         USHORT                  TxAMSDUCnt[DIAGNOSE_TIME];                      // TxAMSUD Aggregation Count in 1 sec scale.
2689
2690         // Rx Related Count
2691         USHORT                  RxDataCnt[DIAGNOSE_TIME];                       // Rx Total Data count.
2692         USHORT                  RxCrcErrCnt[DIAGNOSE_TIME];
2693 //      USHORT                  RxMcsCnt[DIAGNOSE_TIME][16];            // Rx MCS Count in range from 0 to 15, step in 1.
2694         USHORT                  RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2695 }RtmpDiagStruct;
2696 #endif // DBG_DIAGNOSE //
2697
2698
2699 //
2700 //  The miniport adapter structure
2701 //
2702 typedef struct _RTMP_ADAPTER
2703 {
2704         PVOID                                   OS_Cookie;      // save specific structure relative to OS
2705         PNET_DEV                                net_dev;
2706         ULONG                                   VirtualIfCnt;
2707
2708
2709
2710         NDIS_SPIN_LOCK          irq_lock;
2711         UCHAR                   irq_disabled;
2712
2713 #ifdef RT2870
2714 /*****************************************************************************************/
2715 /*      USB related parameters                                                           */
2716 /*****************************************************************************************/
2717         struct usb_config_descriptor            *config;
2718         UINT                                                            BulkInEpAddr;           // bulk-in endpoint address
2719         UINT                                                            BulkOutEpAddr[6];       // bulk-out endpoint address
2720
2721         UINT                                                            NumberOfPipes;
2722         USHORT                                                          BulkOutMaxPacketSize;
2723         USHORT                                                          BulkInMaxPacketSize;
2724
2725         //======Control Flags
2726         LONG                            PendingIoCount;
2727         ULONG                                           BulkFlags;
2728         BOOLEAN                     bUsbTxBulkAggre;    // Flags for bulk out data priority
2729
2730
2731         //======Timer Thread
2732         RT2870_TIMER_QUEUE              TimerQ;
2733         NDIS_SPIN_LOCK                  TimerQLock;
2734
2735
2736         //======Cmd Thread
2737         CmdQ                                    CmdQ;
2738         NDIS_SPIN_LOCK                  CmdQLock;                               // CmdQLock spinlock
2739
2740         BOOLEAN                                 TimerFunc_kill;
2741         BOOLEAN                                 mlme_kill;
2742
2743
2744         //======Semaphores (event)
2745         struct semaphore                        mlme_semaphore;                 /* to sleep thread on   */
2746         struct semaphore                        RTUSBCmd_semaphore;             /* to sleep thread on   */
2747         struct semaphore                        RTUSBTimer_semaphore;
2748 #ifdef INF_AMAZON_SE
2749         struct semaphore                        UsbVendorReq_semaphore;
2750         PVOID                                           UsbVendorReqBuf;
2751 #endif // INF_AMAZON_SE //
2752         struct completion                       TimerQComplete;
2753         struct completion                       mlmeComplete;
2754         struct completion                       CmdQComplete;
2755         wait_queue_head_t                       *wait;
2756
2757         //======Lock for 2870 ATE
2758 #ifdef RALINK_ATE
2759         NDIS_SPIN_LOCK                  GenericLock;            // ATE Tx/Rx generic spinlock
2760 #endif // RALINK_ATE //
2761
2762 #endif // RT2870 //
2763
2764
2765 /*****************************************************************************************/
2766         /*      Both PCI/USB related parameters                                                  */
2767 /*****************************************************************************************/
2768
2769
2770 /*****************************************************************************************/
2771 /*      Tx related parameters                                                           */
2772 /*****************************************************************************************/
2773         BOOLEAN                 DeQueueRunning[NUM_OF_TX_RING];  // for ensuring RTUSBDeQueuePacket get call once
2774         NDIS_SPIN_LOCK          DeQueueLock[NUM_OF_TX_RING];
2775
2776 #ifdef RT2870
2777         // Data related context and AC specified, 4 AC supported
2778         NDIS_SPIN_LOCK                  BulkOutLock[6];                 // BulkOut spinlock for 4 ACs
2779         NDIS_SPIN_LOCK                  MLMEBulkOutLock;        // MLME BulkOut lock
2780
2781         HT_TX_CONTEXT                   TxContext[NUM_OF_TX_RING];
2782         NDIS_SPIN_LOCK                  TxContextQueueLock[NUM_OF_TX_RING];             // TxContextQueue spinlock
2783
2784         // 4 sets of Bulk Out index and pending flag
2785         UCHAR                                   NextBulkOutIndex[4];    // only used for 4 EDCA bulkout pipe
2786
2787         BOOLEAN                                 BulkOutPending[6];      // used for total 6 bulkout pipe
2788         UCHAR                                   bulkResetPipeid;
2789         BOOLEAN                                 MgmtBulkPending;
2790         ULONG                                   bulkResetReq[6];
2791 #endif // RT2870 //
2792
2793         // resource for software backlog queues
2794         QUEUE_HEADER            TxSwQueue[NUM_OF_TX_RING];  // 4 AC + 1 HCCA
2795         NDIS_SPIN_LOCK          TxSwQueueLock[NUM_OF_TX_RING];  // TxSwQueue spinlock
2796
2797         RTMP_DMABUF             MgmtDescRing;                   // Shared memory for MGMT descriptors
2798         RTMP_MGMT_RING          MgmtRing;
2799         NDIS_SPIN_LOCK          MgmtRingLock;                   // Prio Ring spinlock
2800
2801
2802 /*****************************************************************************************/
2803 /*      Rx related parameters                                                           */
2804 /*****************************************************************************************/
2805
2806
2807 #ifdef RT2870
2808         RX_CONTEXT                              RxContext[RX_RING_SIZE];  // 1 for redundant multiple IRP bulk in.
2809         NDIS_SPIN_LOCK                  BulkInLock;                             // BulkIn spinlock for 4 ACs
2810         UCHAR                                   PendingRx;                              // The Maxima pending Rx value should be        RX_RING_SIZE.
2811         UCHAR                                   NextRxBulkInIndex;              // Indicate the current RxContext Index which hold by Host controller.
2812         UCHAR                                   NextRxBulkInReadIndex;  // Indicate the current RxContext Index which driver can read & process it.
2813         ULONG                                   NextRxBulkInPosition;   // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2814         ULONG                                   TransferBufferLength;   // current length of the packet buffer
2815         ULONG                                   ReadPosition;                   // current read position in a packet buffer
2816 #endif // RT2870 //
2817
2818
2819 /*****************************************************************************************/
2820 /*      ASIC related parameters                                                          */
2821 /*****************************************************************************************/
2822         UINT32                  MACVersion;             // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2823
2824         // ---------------------------
2825         // E2PROM
2826         // ---------------------------
2827         ULONG                   EepromVersion;          // byte 0: version, byte 1: revision, byte 2~3: unused
2828         UCHAR                   EEPROMAddressNum;       // 93c46=6  93c66=8
2829         USHORT                  EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2830         BOOLEAN                 EepromAccess;
2831         UCHAR                   EFuseTag;
2832         ULONG                   FirmwareVersion;        // byte 0: Minor version, byte 1: Major version, otherwise unused.
2833
2834         // ---------------------------
2835         // BBP Control
2836         // ---------------------------
2837         UCHAR                   BbpWriteLatch[140];     // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2838         UCHAR                   BbpRssiToDbmDelta;
2839         BBP_R66_TUNING          BbpTuning;
2840
2841         // ----------------------------
2842         // RFIC control
2843         // ----------------------------
2844         UCHAR                   RfIcType;       // RFIC_xxx
2845         ULONG                   RfFreqOffset;   // Frequency offset for channel switching
2846         RTMP_RF_REGS            LatchRfRegs;    // latch th latest RF programming value since RF IC doesn't support READ
2847
2848         EEPROM_ANTENNA_STRUC    Antenna;                            // Since ANtenna definition is different for a & g. We need to save it for future reference.
2849         EEPROM_NIC_CONFIG2_STRUC    NicConfig2;
2850
2851         // This soft Rx Antenna Diversity mechanism is used only when user set
2852         // RX Antenna = DIVERSITY ON
2853         SOFT_RX_ANT_DIVERSITY   RxAnt;
2854
2855         UCHAR                   RFProgSeq;
2856         CHANNEL_TX_POWER        TxPower[MAX_NUM_OF_CHANNELS];       // Store Tx power value for all channels.
2857         CHANNEL_TX_POWER        ChannelList[MAX_NUM_OF_CHANNELS];   // list all supported channels for site survey
2858         CHANNEL_11J_TX_POWER    TxPower11J[MAX_NUM_OF_11JCHANNELS];       // 802.11j channel and bw
2859         CHANNEL_11J_TX_POWER    ChannelList11J[MAX_NUM_OF_11JCHANNELS];   // list all supported channels for site survey
2860
2861         UCHAR                   ChannelListNum;                     // number of channel in ChannelList[]
2862         UCHAR                                   Bbp94;
2863         BOOLEAN                                 BbpForCCK;
2864         ULONG           Tx20MPwrCfgABand[5];
2865         ULONG           Tx20MPwrCfgGBand[5];
2866         ULONG           Tx40MPwrCfgABand[5];
2867         ULONG           Tx40MPwrCfgGBand[5];
2868
2869         BOOLEAN     bAutoTxAgcA;                // Enable driver auto Tx Agc control
2870         UCHAR       TssiRefA;                                   // Store Tssi reference value as 25 temperature.
2871         UCHAR       TssiPlusBoundaryA[5];               // Tssi boundary for increase Tx power to compensate.
2872         UCHAR       TssiMinusBoundaryA[5];              // Tssi boundary for decrease Tx power to compensate.
2873         UCHAR       TxAgcStepA;                                 // Store Tx TSSI delta increment / decrement value
2874         CHAR            TxAgcCompensateA;                       // Store the compensation (TxAgcStep * (idx-1))
2875
2876         BOOLEAN     bAutoTxAgcG;                // Enable driver auto Tx Agc control
2877         UCHAR       TssiRefG;                                   // Store Tssi reference value as 25 temperature.
2878         UCHAR       TssiPlusBoundaryG[5];               // Tssi boundary for increase Tx power to compensate.
2879         UCHAR       TssiMinusBoundaryG[5];              // Tssi boundary for decrease Tx power to compensate.
2880         UCHAR       TxAgcStepG;                                 // Store Tx TSSI delta increment / decrement value
2881         CHAR            TxAgcCompensateG;                       // Store the compensation (TxAgcStep * (idx-1))
2882
2883         //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2884         CHAR            BGRssiOffset0;                          // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2885         CHAR            BGRssiOffset1;                          // Store B/G RSSI#1 Offset value
2886         CHAR            BGRssiOffset2;                          // Store B/G RSSI#2 Offset value
2887         //---
2888
2889         //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2890         CHAR            ARssiOffset0;                           // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2891         CHAR            ARssiOffset1;                           // Store A RSSI#1 Offset value
2892         CHAR            ARssiOffset2;                           // Store A RSSI#2 Offset value
2893         //---
2894
2895         CHAR            BLNAGain;                                       // Store B/G external LNA#0 value on EEPROM 0x44h
2896         CHAR            ALNAGain0;                                      // Store A external LNA#0 value for ch36~64
2897         CHAR            ALNAGain1;                                      // Store A external LNA#1 value for ch100~128
2898         CHAR            ALNAGain2;                                      // Store A external LNA#2 value for ch132~165
2899
2900         // ----------------------------
2901         // LED control
2902         // ----------------------------
2903         MCU_LEDCS_STRUC         LedCntl;
2904         USHORT                          Led1;   // read from EEPROM 0x3c
2905         USHORT                          Led2;   // EEPROM 0x3e
2906         USHORT                          Led3;   // EEPROM 0x40
2907         UCHAR                           LedIndicatorStregth;
2908         UCHAR                           RssiSingalstrengthOffet;
2909     BOOLEAN                             bLedOnScanning;
2910         UCHAR                           LedStatus;
2911
2912 /*****************************************************************************************/
2913 /*      802.11 related parameters                                                        */
2914 /*****************************************************************************************/
2915         // outgoing BEACON frame buffer and corresponding TXD
2916         TXWI_STRUC                      BeaconTxWI;
2917         PUCHAR                                          BeaconBuf;
2918         USHORT                                          BeaconOffset[HW_BEACON_MAX_COUNT];
2919
2920         // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2921         PSPOLL_FRAME                    PsPollFrame;
2922         HEADER_802_11                   NullFrame;
2923
2924 #ifdef RT2870
2925         TX_CONTEXT                              BeaconContext[BEACON_RING_SIZE];
2926         TX_CONTEXT                              NullContext;
2927         TX_CONTEXT                              PsPollContext;
2928         TX_CONTEXT                              RTSContext;
2929 #endif // RT2870 //
2930
2931
2932
2933 //=========AP===========
2934
2935
2936 //=======STA===========
2937 #ifdef CONFIG_STA_SUPPORT
2938 /* Modified by Wu Xi-Kun 4/21/2006 */
2939         // -----------------------------------------------
2940         // STA specific configuration & operation status
2941         // used only when pAd->OpMode == OPMODE_STA
2942         // -----------------------------------------------
2943         STA_ADMIN_CONFIG        StaCfg;           // user desired settings
2944         STA_ACTIVE_CONFIG       StaActive;         // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2945         CHAR                    nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2946         NDIS_MEDIA_STATE        PreMediaState;
2947 #endif // CONFIG_STA_SUPPORT //
2948
2949 //=======Common===========
2950         // OP mode: either AP or STA
2951         UCHAR                   OpMode;                     // OPMODE_STA, OPMODE_AP
2952
2953         NDIS_MEDIA_STATE        IndicateMediaState;                     // Base on Indication state, default is NdisMediaStateDisConnected
2954
2955
2956         // MAT related parameters
2957
2958         // configuration: read from Registry & E2PROM
2959         BOOLEAN                 bLocalAdminMAC;             // Use user changed MAC
2960         UCHAR                   PermanentAddress[MAC_ADDR_LEN];    // Factory default MAC address
2961         UCHAR                   CurrentAddress[MAC_ADDR_LEN];      // User changed MAC address
2962
2963         // ------------------------------------------------------
2964         // common configuration to both OPMODE_STA and OPMODE_AP
2965         // ------------------------------------------------------
2966         COMMON_CONFIG           CommonCfg;
2967         MLME_STRUCT             Mlme;
2968
2969         // AP needs those vaiables for site survey feature.
2970         MLME_AUX                MlmeAux;           // temporary settings used during MLME state machine
2971         BSS_TABLE               ScanTab;           // store the latest SCAN result
2972
2973         //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2974         MAC_TABLE                 MacTab;     // ASIC on-chip WCID entry table.  At TX, ASIC always use key according to this on-chip table.
2975         NDIS_SPIN_LOCK          MacTabLock;
2976
2977 #ifdef DOT11_N_SUPPORT
2978         BA_TABLE                        BATable;
2979 #endif // DOT11_N_SUPPORT //
2980         NDIS_SPIN_LOCK          BATabLock;
2981         RALINK_TIMER_STRUCT RECBATimer;
2982
2983         // encryption/decryption KEY tables
2984         CIPHER_KEY              SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2985
2986                 // RX re-assembly buffer for fragmentation
2987         FRAGMENT_FRAME          FragFrame;                  // Frame storage for fragment frame
2988
2989         // various Counters
2990         COUNTER_802_3           Counters8023;               // 802.3 counters
2991         COUNTER_802_11          WlanCounters;               // 802.11 MIB counters
2992         COUNTER_RALINK          RalinkCounters;             // Ralink propriety counters
2993         COUNTER_DRS             DrsCounters;                // counters for Dynamic TX Rate Switching
2994         PRIVATE_STRUC           PrivateInfo;                // Private information & counters
2995
2996         // flags, see fRTMP_ADAPTER_xxx flags
2997         ULONG                   Flags;                      // Represent current device status
2998
2999         // current TX sequence #
3000         USHORT                  Sequence;
3001
3002         // Control disconnect / connect event generation
3003         //+++Didn't used anymore
3004         ULONG                   LinkDownTime;
3005         //---
3006         ULONG                   LastRxRate;
3007         ULONG                   LastTxRate;
3008         //+++Used only for Station
3009         BOOLEAN                 bConfigChanged;         // Config Change flag for the same SSID setting
3010         //---
3011
3012         ULONG                   ExtraInfo;              // Extra information for displaying status
3013         ULONG                   SystemErrorBitmap;      // b0: E2PROM version error
3014
3015         //+++Didn't used anymore
3016         ULONG                   MacIcVersion;           // MAC/BBP serial interface issue solved after ver.D
3017         //---
3018
3019         // ---------------------------
3020         // System event log
3021         // ---------------------------
3022         RT_802_11_EVENT_TABLE   EventTab;
3023
3024
3025         BOOLEAN         HTCEnable;
3026
3027         /*****************************************************************************************/
3028         /*      Statistic related parameters                                                     */
3029         /*****************************************************************************************/
3030 #ifdef RT2870
3031         ULONG                                           BulkOutDataOneSecCount;
3032         ULONG                                           BulkInDataOneSecCount;
3033         ULONG                                           BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
3034         ULONG                                           watchDogRxCnt;
3035         ULONG                                           watchDogRxOverFlowCnt;
3036         ULONG                                           watchDogTxPendingCnt[NUM_OF_TX_RING];
3037 #endif // RT2870 //
3038
3039         BOOLEAN                                         bUpdateBcnCntDone;
3040         ULONG                                           watchDogMacDeadlock;    // prevent MAC/BBP into deadlock condition
3041         // ----------------------------
3042         // DEBUG paramerts
3043         // ----------------------------
3044         //ULONG         DebugSetting[4];
3045         BOOLEAN         bBanAllBaSetup;
3046         BOOLEAN         bPromiscuous;
3047
3048         // ----------------------------
3049         // rt2860c emulation-use Parameters
3050         // ----------------------------
3051         ULONG           rtsaccu[30];
3052         ULONG           ctsaccu[30];
3053         ULONG           cfendaccu[30];
3054         ULONG           bacontent[16];
3055         ULONG           rxint[RX_RING_SIZE+1];
3056         UCHAR           rcvba[60];
3057         BOOLEAN         bLinkAdapt;
3058         BOOLEAN         bForcePrintTX;
3059         BOOLEAN         bForcePrintRX;
3060         BOOLEAN         bDisablescanning;               //defined in RT2870 USB
3061         BOOLEAN         bStaFifoTest;
3062         BOOLEAN         bProtectionTest;
3063         BOOLEAN         bHCCATest;
3064         BOOLEAN         bGenOneHCCA;
3065         BOOLEAN         bBroadComHT;
3066         //+++Following add from RT2870 USB.
3067         ULONG           BulkOutReq;
3068         ULONG           BulkOutComplete;
3069         ULONG           BulkOutCompleteOther;
3070         ULONG           BulkOutCompleteCancel;  // seems not use now?
3071         ULONG           BulkInReq;
3072         ULONG           BulkInComplete;
3073         ULONG           BulkInCompleteFail;
3074         //---
3075
3076     struct wificonf                     WIFItestbed;
3077
3078 #ifdef RALINK_ATE
3079         ATE_INFO                                ate;
3080 #ifdef RT2870
3081         BOOLEAN                                 ContinBulkOut;          //ATE bulk out control
3082         BOOLEAN                                 ContinBulkIn;           //ATE bulk in control
3083         atomic_t                                BulkOutRemained;
3084         atomic_t                                BulkInRemained;
3085 #endif // RT2870 //
3086 #endif // RALINK_ATE //
3087
3088 #ifdef DOT11_N_SUPPORT
3089         struct reordering_mpdu_pool mpdu_blk_pool;
3090 #endif // DOT11_N_SUPPORT //
3091
3092         ULONG                                   OneSecondnonBEpackets;          // record non BE packets per second
3093
3094 #if WIRELESS_EXT >= 12
3095     struct iw_statistics    iw_stats;
3096 #endif
3097
3098         struct net_device_stats stats;
3099
3100 #ifdef BLOCK_NET_IF
3101         BLOCK_QUEUE_ENTRY               blockQueueTab[NUM_OF_TX_RING];
3102 #endif // BLOCK_NET_IF //
3103
3104
3105
3106 #ifdef MULTIPLE_CARD_SUPPORT
3107         INT32                                   MC_RowID;
3108         UCHAR                                   MC_FileName[256];
3109 #endif // MULTIPLE_CARD_SUPPORT //
3110
3111         ULONG                                   TbttTickCount;
3112 #ifdef PCI_MSI_SUPPORT
3113         BOOLEAN                                 HaveMsi;
3114 #endif // PCI_MSI_SUPPORT //
3115
3116
3117         UCHAR                                   is_on;
3118
3119 #define TIME_BASE                       (1000000/OS_HZ)
3120 #define TIME_ONE_SECOND         (1000000/TIME_BASE)
3121         UCHAR                                   flg_be_adjust;
3122         ULONG                                   be_adjust_last_time;
3123
3124 #ifdef IKANOS_VX_1X0
3125         struct IKANOS_TX_INFO   IkanosTxInfo;
3126         struct IKANOS_TX_INFO   IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3127 #endif // IKANOS_VX_1X0 //
3128
3129
3130 #ifdef DBG_DIAGNOSE
3131         RtmpDiagStruct  DiagStruct;
3132 #endif // DBG_DIAGNOSE //
3133
3134
3135         UINT8                                   PM_FlgSuspend;
3136
3137 #ifdef RT30xx
3138 //======efuse
3139         BOOLEAN         bUseEfuse;
3140         BOOLEAN         bEEPROMFile;
3141 #endif // RT30xx //
3142
3143 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3144
3145 //
3146 // Cisco IAPP format
3147 //
3148 typedef struct  _CISCO_IAPP_CONTENT_
3149 {
3150         USHORT     Length;        //IAPP Length
3151         UCHAR      MessageType;      //IAPP type
3152         UCHAR      FunctionCode;     //IAPP function type
3153         UCHAR      DestinaionMAC[MAC_ADDR_LEN];
3154         UCHAR      SourceMAC[MAC_ADDR_LEN];
3155         USHORT     Tag;           //Tag(element IE) - Adjacent AP report
3156         USHORT     TagLength;     //Length of element not including 4 byte header
3157         UCHAR      OUI[4];           //0x00, 0x40, 0x96, 0x00
3158         UCHAR      PreviousAP[MAC_ADDR_LEN];       //MAC Address of access point
3159         USHORT     Channel;
3160         USHORT     SsidLen;
3161         UCHAR      Ssid[MAX_LEN_OF_SSID];
3162         USHORT     Seconds;          //Seconds that the client has been disassociated.
3163 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3164
3165 #define DELAYINTMASK            0x0003fffb
3166 #define INTMASK                         0x0003fffb
3167 #define IndMask                         0x0003fffc
3168 #define RxINT                           0x00000005      // Delayed Rx or indivi rx
3169 #define TxDataInt                       0x000000fa      // Delayed Tx or indivi tx
3170 #define TxMgmtInt                       0x00000102      // Delayed Tx or indivi tx
3171 #define TxCoherent                      0x00020000      // tx coherent
3172 #define RxCoherent                      0x00010000      // rx coherent
3173 #define McuCommand                      0x00000200      // mcu
3174 #define PreTBTTInt                      0x00001000      // Pre-TBTT interrupt
3175 #define TBTTInt                         0x00000800              // TBTT interrupt
3176 #define GPTimeOutInt                    0x00008000              // GPtimeout interrupt
3177 #define AutoWakeupInt           0x00004000              // AutoWakeupInt interrupt
3178 #define FifoStaFullInt                  0x00002000      //  fifo statistics full interrupt
3179
3180
3181 typedef struct _RX_BLK_
3182 {
3183 //      RXD_STRUC               RxD; // sample
3184         RT28XX_RXD_STRUC        RxD;
3185         PRXWI_STRUC                     pRxWI;
3186         PHEADER_802_11          pHeader;
3187         PNDIS_PACKET            pRxPacket;
3188         UCHAR                           *pData;
3189         USHORT                          DataSize;
3190         USHORT                          Flags;
3191         UCHAR                           UserPriority;   // for calculate TKIP MIC using
3192 } RX_BLK;
3193
3194
3195 #define RX_BLK_SET_FLAG(_pRxBlk, _flag)         (_pRxBlk->Flags |= _flag)
3196 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag)        (_pRxBlk->Flags & _flag)
3197 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag)       (_pRxBlk->Flags &= ~(_flag))
3198
3199
3200 #define fRX_WDS                 0x0001
3201 #define fRX_AMSDU       0x0002
3202 #define fRX_ARALINK     0x0004
3203 #define fRX_HTC         0x0008
3204 #define fRX_PAD         0x0010
3205 #define fRX_AMPDU       0x0020
3206 #define fRX_QOS                 0x0040
3207 #define fRX_INFRA               0x0080
3208 #define fRX_EAP                 0x0100
3209 #define fRX_MESH                0x0200
3210 #define fRX_APCLI               0x0400
3211 #define fRX_DLS                 0x0800
3212 #define fRX_WPI                 0x1000
3213
3214 #define LENGTH_AMSDU_SUBFRAMEHEAD       14
3215 #define LENGTH_ARALINK_SUBFRAMEHEAD     14
3216 #define LENGTH_ARALINK_HEADER_FIELD      2
3217
3218 #define TX_UNKOWN_FRAME                 0x00
3219 #define TX_MCAST_FRAME                  0x01
3220 #define TX_LEGACY_FRAME                 0x02
3221 #define TX_AMPDU_FRAME                  0x04
3222 #define TX_AMSDU_FRAME                  0x08
3223 #define TX_RALINK_FRAME                 0x10
3224 #define TX_FRAG_FRAME                   0x20
3225
3226
3227 //      Currently the sizeof(TX_BLK) is 148 bytes.
3228 typedef struct _TX_BLK_
3229 {
3230         UCHAR                           QueIdx;
3231         UCHAR                           TxFrameType;                            // Indicate the Transmission type of the all frames in one batch
3232         UCHAR                           TotalFrameNum;                          // Total frame number want to send-out in one batch
3233         USHORT                          TotalFragNum;                           // Total frame fragments required in one batch
3234         USHORT                          TotalFrameLen;                          // Total length of all frames want to send-out in one batch
3235
3236         QUEUE_HEADER            TxPacketList;
3237         MAC_TABLE_ENTRY         *pMacEntry;                                     // NULL: packet with 802.11 RA field is multicast/broadcast address
3238         HTTRANSMIT_SETTING      *pTransmit;
3239
3240         // Following structure used for the characteristics of a specific packet.
3241         PNDIS_PACKET            pPacket;
3242         PUCHAR                          pSrcBufHeader;                          // Reference to the head of sk_buff->data
3243         PUCHAR                          pSrcBufData;                            // Reference to the sk_buff->data, will changed depends on hanlding progresss
3244         UINT                            SrcBufLen;                                      // Length of packet payload which not including Layer 2 header
3245         PUCHAR                          pExtraLlcSnapEncap;                     // NULL means no extra LLC/SNAP is required
3246         UCHAR                           HeaderBuf[80];                          // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3247         UCHAR                           MpduHeaderLen;                          // 802.11 header length NOT including the padding
3248         UCHAR                           HdrPadLen;                                      // recording Header Padding Length;
3249         UCHAR                           apidx;                                          // The interface associated to this packet
3250         UCHAR                           Wcid;                                           // The MAC entry associated to this packet
3251         UCHAR                           UserPriority;                           // priority class of packet
3252         UCHAR                           FrameGap;                                       // what kind of IFS this packet use
3253         UCHAR                           MpduReqNum;                                     // number of fragments of this frame
3254         UCHAR                           TxRate;                                         // TODO: Obsoleted? Should change to MCS?
3255         UCHAR                           CipherAlg;                                      // cipher alogrithm
3256         PCIPHER_KEY                     pKey;
3257
3258
3259
3260         USHORT                          Flags;                                          //See following definitions for detail.
3261
3262         //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3263         ULONG                           Priv;                                           // Hardware specific value saved in here.
3264 } TX_BLK, *PTX_BLK;
3265
3266
3267 #define fTX_bRtsRequired                0x0001  // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3268 #define fTX_bAckRequired        0x0002  // the packet need ack response
3269 #define fTX_bPiggyBack                  0x0004  // Legacy device use Piggback or not
3270 #define fTX_bHTRate             0x0008  // allow to use HT rate
3271 //#define fTX_bForceLowRate       0x0010        // force to use Low Rate
3272 #define fTX_bForceNonQoS        0x0010  // force to transmit frame without WMM-QoS in HT mode
3273 #define fTX_bAllowFrag          0x0020  // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3274 #define fTX_bMoreData                   0x0040  // there are more data packets in PowerSave Queue
3275 #define fTX_bWMM                                0x0080  // QOS Data
3276
3277 #define fTX_bClearEAPFrame              0x0100
3278
3279
3280 #ifdef CONFIG_STA_SUPPORT
3281 #endif // CONFIG_STA_SUPPORT //
3282
3283
3284
3285 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value)       \
3286                 do {                                                                            \
3287                         if (value)                                                              \
3288                                 (_pTxBlk->Flags |= _flag)                       \
3289                         else                                                                    \
3290                                 (_pTxBlk->Flags &= ~(_flag))            \
3291                 }while(0)
3292
3293 #define TX_BLK_SET_FLAG(_pTxBlk, _flag)         (_pTxBlk->Flags |= _flag)
3294 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag)        (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3295 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag)       (_pTxBlk->Flags &= ~(_flag))
3296
3297
3298
3299
3300
3301 //------------------------------------------------------------------------------------------
3302
3303
3304
3305 #ifdef RT_BIG_ENDIAN
3306 static inline VOID      WriteBackToDescriptor(
3307         IN  PUCHAR                      Dest,
3308         IN      PUCHAR                  Src,
3309     IN  BOOLEAN                 DoEncrypt,
3310         IN  ULONG           DescriptorType)
3311 {
3312         UINT32 *p1, *p2;
3313
3314         p1 = ((UINT32 *)Dest);
3315         p2 = ((UINT32 *)Src);
3316
3317         *p1 = *p2;
3318         *(p1+2) = *(p2+2);
3319         *(p1+3) = *(p2+3);
3320         *(p1+1) = *(p2+1); // Word 1; this must be written back last
3321 }
3322
3323 /*
3324         ========================================================================
3325
3326         Routine Description:
3327                 Endian conversion of Tx/Rx descriptor .
3328
3329         Arguments:
3330                 pAd     Pointer to our adapter
3331                 pData                   Pointer to Tx/Rx descriptor
3332                 DescriptorType  Direction of the frame
3333
3334         Return Value:
3335                 None
3336
3337         Note:
3338                 Call this function when read or update descriptor
3339         ========================================================================
3340 */
3341 static inline VOID      RTMPWIEndianChange(
3342         IN      PUCHAR                  pData,
3343         IN      ULONG                   DescriptorType)
3344 {
3345         int size;
3346         int i;
3347
3348         size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3349
3350         if(DescriptorType == TYPE_TXWI)
3351         {
3352                 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));            // Byte 0~3
3353                 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4)));      // Byte 4~7
3354         }
3355         else
3356         {
3357                 for(i=0; i < size/4 ; i++)
3358                         *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3359         }
3360 }
3361
3362 /*
3363         ========================================================================
3364
3365         Routine Description:
3366                 Endian conversion of Tx/Rx descriptor .
3367
3368         Arguments:
3369                 pAd     Pointer to our adapter
3370                 pData                   Pointer to Tx/Rx descriptor
3371                 DescriptorType  Direction of the frame
3372
3373         Return Value:
3374                 None
3375
3376         Note:
3377                 Call this function when read or update descriptor
3378         ========================================================================
3379 */
3380
3381 #ifdef RT2870
3382 static inline VOID      RTMPDescriptorEndianChange(
3383         IN      PUCHAR                  pData,
3384         IN      ULONG                   DescriptorType)
3385 {
3386         *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3387 }
3388 #endif // RT2870 //
3389 /*
3390         ========================================================================
3391
3392         Routine Description:
3393                 Endian conversion of all kinds of 802.11 frames .
3394
3395         Arguments:
3396                 pAd     Pointer to our adapter
3397                 pData                   Pointer to the 802.11 frame structure
3398                 Dir                     Direction of the frame
3399                 FromRxDoneInt   Caller is from RxDone interrupt
3400
3401         Return Value:
3402                 None
3403
3404         Note:
3405                 Call this function when read or update buffer data
3406         ========================================================================
3407 */
3408 static inline VOID      RTMPFrameEndianChange(
3409         IN      PRTMP_ADAPTER   pAd,
3410         IN      PUCHAR                  pData,
3411         IN      ULONG                   Dir,
3412         IN      BOOLEAN                 FromRxDoneInt)
3413 {
3414         PHEADER_802_11 pFrame;
3415         PUCHAR  pMacHdr;
3416
3417         // swab 16 bit fields - Frame Control field
3418         if(Dir == DIR_READ)
3419         {
3420                 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3421         }
3422
3423         pFrame = (PHEADER_802_11) pData;
3424         pMacHdr = (PUCHAR) pFrame;
3425
3426         // swab 16 bit fields - Duration/ID field
3427         *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3428
3429         // swab 16 bit fields - Sequence Control field
3430         *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3431
3432         if(pFrame->FC.Type == BTYPE_MGMT)
3433         {
3434                 switch(pFrame->FC.SubType)
3435                 {
3436                         case SUBTYPE_ASSOC_REQ:
3437                         case SUBTYPE_REASSOC_REQ:
3438                                 // swab 16 bit fields - CapabilityInfo field
3439                                 pMacHdr += sizeof(HEADER_802_11);
3440                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3441
3442                                 // swab 16 bit fields - Listen Interval field
3443                                 pMacHdr += 2;
3444                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3445                                 break;
3446
3447                         case SUBTYPE_ASSOC_RSP:
3448                         case SUBTYPE_REASSOC_RSP:
3449                                 // swab 16 bit fields - CapabilityInfo field
3450                                 pMacHdr += sizeof(HEADER_802_11);
3451                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3452
3453                                 // swab 16 bit fields - Status Code field
3454                                 pMacHdr += 2;
3455                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3456
3457                                 // swab 16 bit fields - AID field
3458                                 pMacHdr += 2;
3459                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3460                                 break;
3461
3462                         case SUBTYPE_AUTH:
3463                                 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3464                                 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3465                                 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3466                                         break;
3467                                 else
3468                                 {
3469                                         // swab 16 bit fields - Auth Alg No. field
3470                                         pMacHdr += sizeof(HEADER_802_11);
3471                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3472
3473                                         // swab 16 bit fields - Auth Seq No. field
3474                                         pMacHdr += 2;
3475                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3476
3477                                         // swab 16 bit fields - Status Code field
3478                                         pMacHdr += 2;
3479                                         *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3480                                 }
3481                                 break;
3482
3483                         case SUBTYPE_BEACON:
3484                         case SUBTYPE_PROBE_RSP:
3485                                 // swab 16 bit fields - BeaconInterval field
3486                                 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3487                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3488
3489                                 // swab 16 bit fields - CapabilityInfo field
3490                                 pMacHdr += sizeof(USHORT);
3491                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3492                                 break;
3493
3494                         case SUBTYPE_DEAUTH:
3495                         case SUBTYPE_DISASSOC:
3496                                 // swab 16 bit fields - Reason code field
3497                                 pMacHdr += sizeof(HEADER_802_11);
3498                                 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3499                                 break;
3500                 }
3501         }
3502         else if( pFrame->FC.Type == BTYPE_DATA )
3503         {
3504         }
3505         else if(pFrame->FC.Type == BTYPE_CNTL)
3506         {
3507                 switch(pFrame->FC.SubType)
3508                 {
3509                         case SUBTYPE_BLOCK_ACK_REQ:
3510                                 {
3511                                         PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3512                                         *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3513                                         pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3514                                 }
3515                                 break;
3516                         case SUBTYPE_BLOCK_ACK:
3517                                 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3518                                 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3519                                 break;
3520
3521                         case SUBTYPE_ACK:
3522                                 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3523                                 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3524                                 break;
3525                 }
3526         }
3527         else
3528         {
3529                 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3530         }
3531
3532         // swab 16 bit fields - Frame Control
3533         if(Dir == DIR_WRITE)
3534         {
3535                 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3536         }
3537 }
3538 #endif // RT_BIG_ENDIAN //
3539
3540
3541 static inline VOID ConvertMulticastIP2MAC(
3542         IN PUCHAR pIpAddr,
3543         IN PUCHAR *ppMacAddr,
3544         IN UINT16 ProtoType)
3545 {
3546         if (pIpAddr == NULL)
3547                 return;
3548
3549         if (ppMacAddr == NULL || *ppMacAddr == NULL)
3550                 return;
3551
3552         switch (ProtoType)
3553         {
3554                 case ETH_P_IPV6:
3555 //                      memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3556                         *(*ppMacAddr) = 0x33;
3557                         *(*ppMacAddr + 1) = 0x33;
3558                         *(*ppMacAddr + 2) = pIpAddr[12];
3559                         *(*ppMacAddr + 3) = pIpAddr[13];
3560                         *(*ppMacAddr + 4) = pIpAddr[14];
3561                         *(*ppMacAddr + 5) = pIpAddr[15];
3562                         break;
3563
3564                 case ETH_P_IP:
3565                 default:
3566 //                      memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3567                         *(*ppMacAddr) = 0x01;
3568                         *(*ppMacAddr + 1) = 0x00;
3569                         *(*ppMacAddr + 2) = 0x5e;
3570                         *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3571                         *(*ppMacAddr + 4) = pIpAddr[2];
3572                         *(*ppMacAddr + 5) = pIpAddr[3];
3573                         break;
3574         }
3575
3576         return;
3577 }
3578
3579 BOOLEAN RTMPCheckForHang(
3580         IN  NDIS_HANDLE MiniportAdapterContext
3581         );
3582
3583 VOID  RTMPHalt(
3584         IN  NDIS_HANDLE MiniportAdapterContext
3585         );
3586
3587 //
3588 //  Private routines in rtmp_init.c
3589 //
3590 NDIS_STATUS RTMPAllocAdapterBlock(
3591         IN PVOID                        handle,
3592         OUT PRTMP_ADAPTER   *ppAdapter
3593         );
3594
3595 NDIS_STATUS RTMPAllocTxRxRingMemory(
3596         IN  PRTMP_ADAPTER   pAd
3597         );
3598
3599 NDIS_STATUS RTMPFindAdapter(
3600         IN  PRTMP_ADAPTER   pAd,
3601         IN  NDIS_HANDLE     WrapperConfigurationContext
3602         );
3603
3604 NDIS_STATUS     RTMPReadParametersHook(
3605         IN      PRTMP_ADAPTER pAd
3606         );
3607
3608 VOID RTMPFreeAdapter(
3609         IN  PRTMP_ADAPTER   pAd
3610         );
3611
3612 NDIS_STATUS NICReadRegParameters(
3613         IN  PRTMP_ADAPTER       pAd,
3614         IN  NDIS_HANDLE         WrapperConfigurationContext
3615         );
3616
3617 #ifdef RT30xx
3618 VOID NICInitRT30xxRFRegisters(
3619         IN PRTMP_ADAPTER pAd);
3620 #endif // RT30xx //
3621
3622 VOID NICReadEEPROMParameters(
3623         IN  PRTMP_ADAPTER       pAd,
3624         IN      PUCHAR                          mac_addr);
3625
3626 VOID NICInitAsicFromEEPROM(
3627         IN  PRTMP_ADAPTER       pAd);
3628
3629 VOID NICInitTxRxRingAndBacklogQueue(
3630         IN  PRTMP_ADAPTER   pAd);
3631
3632 NDIS_STATUS NICInitializeAdapter(
3633         IN  PRTMP_ADAPTER   pAd,
3634         IN   BOOLEAN    bHardReset);
3635
3636 NDIS_STATUS NICInitializeAsic(
3637         IN  PRTMP_ADAPTER   pAd,
3638         IN  BOOLEAN             bHardReset);
3639
3640 VOID NICIssueReset(
3641         IN  PRTMP_ADAPTER   pAd);
3642
3643 VOID RTMPRingCleanUp(
3644         IN  PRTMP_ADAPTER   pAd,
3645         IN  UCHAR           RingType);
3646
3647 VOID RxTest(
3648         IN  PRTMP_ADAPTER   pAd);
3649
3650 NDIS_STATUS DbgSendPacket(
3651         IN  PRTMP_ADAPTER   pAd,
3652         IN  PNDIS_PACKET    pPacket);
3653
3654 VOID UserCfgInit(
3655         IN  PRTMP_ADAPTER   pAd);
3656
3657 VOID NICResetFromError(
3658         IN  PRTMP_ADAPTER   pAd);
3659
3660 VOID NICEraseFirmware(
3661         IN PRTMP_ADAPTER pAd);
3662
3663 NDIS_STATUS NICLoadFirmware(
3664         IN  PRTMP_ADAPTER   pAd);
3665
3666 NDIS_STATUS NICLoadRateSwitchingParams(
3667         IN PRTMP_ADAPTER pAd);
3668
3669 BOOLEAN NICCheckForHang(
3670         IN  PRTMP_ADAPTER   pAd);
3671
3672 VOID NICUpdateFifoStaCounters(
3673         IN PRTMP_ADAPTER pAd);
3674
3675 VOID NICUpdateRawCounters(
3676         IN  PRTMP_ADAPTER   pAd);
3677
3678 ULONG   RTMPNotAllZero(
3679         IN      PVOID   pSrc1,
3680         IN      ULONG   Length);
3681
3682 VOID RTMPZeroMemory(
3683         IN  PVOID   pSrc,
3684         IN  ULONG   Length);
3685
3686 ULONG RTMPCompareMemory(
3687         IN  PVOID   pSrc1,
3688         IN  PVOID   pSrc2,
3689         IN  ULONG   Length);
3690
3691 VOID RTMPMoveMemory(
3692         OUT PVOID   pDest,
3693         IN  PVOID   pSrc,
3694         IN  ULONG   Length);
3695
3696 VOID AtoH(
3697         char    *src,
3698         UCHAR   *dest,
3699         int             destlen);
3700
3701 UCHAR BtoH(
3702         char ch);
3703
3704 VOID RTMPPatchMacBbpBug(
3705         IN  PRTMP_ADAPTER   pAd);
3706
3707 VOID RTMPPatchCardBus(
3708         IN      PRTMP_ADAPTER   pAdapter);
3709
3710 VOID RTMPPatchRalinkCardBus(
3711         IN      PRTMP_ADAPTER   pAdapter,
3712         IN      ULONG                   Bus);
3713
3714 ULONG RTMPReadCBConfig(
3715         IN      ULONG   Bus,
3716         IN      ULONG   Slot,
3717         IN      ULONG   Func,
3718         IN      ULONG   Offset);
3719
3720 VOID RTMPWriteCBConfig(
3721         IN      ULONG   Bus,
3722         IN      ULONG   Slot,
3723         IN      ULONG   Func,
3724         IN      ULONG   Offset,
3725         IN      ULONG   Value);
3726
3727 VOID RTMPInitTimer(
3728         IN  PRTMP_ADAPTER           pAd,
3729         IN  PRALINK_TIMER_STRUCT    pTimer,
3730         IN  PVOID                   pTimerFunc,
3731         IN      PVOID                                   pData,
3732         IN  BOOLEAN                 Repeat);
3733
3734 VOID RTMPSetTimer(
3735         IN  PRALINK_TIMER_STRUCT    pTimer,
3736         IN  ULONG                   Value);
3737
3738
3739 VOID RTMPModTimer(
3740         IN      PRALINK_TIMER_STRUCT    pTimer,
3741         IN      ULONG                                   Value);
3742
3743 VOID RTMPCancelTimer(
3744         IN  PRALINK_TIMER_STRUCT    pTimer,
3745         OUT BOOLEAN                 *pCancelled);
3746
3747 VOID RTMPSetLED(
3748         IN PRTMP_ADAPTER        pAd,
3749         IN UCHAR                        Status);
3750
3751 VOID RTMPSetSignalLED(
3752         IN PRTMP_ADAPTER        pAd,
3753         IN NDIS_802_11_RSSI Dbm);
3754
3755 VOID RTMPEnableRxTx(
3756         IN PRTMP_ADAPTER        pAd);
3757
3758 //
3759 // prototype in action.c
3760 //
3761 VOID ActionStateMachineInit(
3762     IN  PRTMP_ADAPTER   pAd,
3763     IN  STATE_MACHINE *S,
3764     OUT STATE_MACHINE_FUNC Trans[]);
3765
3766 VOID MlmeADDBAAction(
3767     IN PRTMP_ADAPTER pAd,
3768     IN MLME_QUEUE_ELEM *Elem);
3769
3770 VOID MlmeDELBAAction(
3771     IN PRTMP_ADAPTER pAd,
3772     IN MLME_QUEUE_ELEM *Elem);
3773
3774 VOID MlmeDLSAction(
3775     IN PRTMP_ADAPTER pAd,
3776     IN MLME_QUEUE_ELEM *Elem);
3777
3778 VOID MlmeInvalidAction(
3779     IN PRTMP_ADAPTER pAd,
3780     IN MLME_QUEUE_ELEM *Elem);
3781
3782 VOID MlmeQOSAction(
3783     IN PRTMP_ADAPTER pAd,
3784     IN MLME_QUEUE_ELEM *Elem);
3785
3786 #ifdef DOT11_N_SUPPORT
3787 VOID PeerAddBAReqAction(
3788         IN PRTMP_ADAPTER pAd,
3789         IN MLME_QUEUE_ELEM *Elem);
3790
3791 VOID PeerAddBARspAction(
3792         IN PRTMP_ADAPTER pAd,
3793         IN MLME_QUEUE_ELEM *Elem);
3794
3795 VOID PeerDelBAAction(
3796         IN PRTMP_ADAPTER pAd,
3797         IN MLME_QUEUE_ELEM *Elem);
3798
3799 VOID PeerBAAction(
3800     IN PRTMP_ADAPTER pAd,
3801     IN MLME_QUEUE_ELEM *Elem);
3802 #endif // DOT11_N_SUPPORT //
3803
3804 VOID SendPSMPAction(
3805         IN PRTMP_ADAPTER        pAd,
3806         IN UCHAR                        Wcid,
3807         IN UCHAR                        Psmp);
3808
3809
3810 #ifdef DOT11N_DRAFT3
3811 VOID SendBSS2040CoexistMgmtAction(
3812         IN      PRTMP_ADAPTER   pAd,
3813         IN      UCHAR   Wcid,
3814         IN      UCHAR   apidx,
3815         IN      UCHAR   InfoReq);
3816
3817 VOID SendNotifyBWActionFrame(
3818         IN PRTMP_ADAPTER pAd,
3819         IN UCHAR  Wcid,
3820         IN UCHAR apidx);
3821
3822 BOOLEAN ChannelSwitchSanityCheck(
3823         IN      PRTMP_ADAPTER   pAd,
3824         IN    UCHAR  Wcid,
3825         IN    UCHAR  NewChannel,
3826         IN    UCHAR  Secondary);
3827
3828 VOID ChannelSwitchAction(
3829         IN      PRTMP_ADAPTER   pAd,
3830         IN    UCHAR  Wcid,
3831         IN    UCHAR  Channel,
3832         IN    UCHAR  Secondary);
3833
3834 ULONG BuildIntolerantChannelRep(
3835         IN      PRTMP_ADAPTER   pAd,
3836         IN    PUCHAR  pDest);
3837
3838 VOID Update2040CoexistFrameAndNotify(
3839         IN      PRTMP_ADAPTER   pAd,
3840         IN    UCHAR  Wcid,
3841         IN      BOOLEAN bAddIntolerantCha);
3842
3843 VOID Send2040CoexistAction(
3844         IN      PRTMP_ADAPTER   pAd,
3845         IN    UCHAR  Wcid,
3846         IN      BOOLEAN bAddIntolerantCha);
3847 #endif // DOT11N_DRAFT3 //
3848
3849 VOID PeerRMAction(
3850         IN PRTMP_ADAPTER pAd,
3851         IN MLME_QUEUE_ELEM *Elem);
3852
3853 VOID PeerPublicAction(
3854         IN PRTMP_ADAPTER pAd,
3855         IN MLME_QUEUE_ELEM *Elem);
3856
3857 #ifdef CONFIG_STA_SUPPORT
3858 VOID StaPublicAction(
3859         IN PRTMP_ADAPTER pAd,
3860         IN UCHAR Bss2040Coexist);
3861 #endif // CONFIG_STA_SUPPORT //
3862
3863
3864 VOID PeerBSSTranAction(
3865         IN PRTMP_ADAPTER pAd,
3866         IN MLME_QUEUE_ELEM *Elem);
3867
3868 #ifdef DOT11_N_SUPPORT
3869 VOID PeerHTAction(
3870         IN PRTMP_ADAPTER pAd,
3871         IN MLME_QUEUE_ELEM *Elem);
3872 #endif // DOT11_N_SUPPORT //
3873
3874 VOID PeerQOSAction(
3875     IN PRTMP_ADAPTER pAd,
3876     IN MLME_QUEUE_ELEM *Elem);
3877
3878 #ifdef QOS_DLS_SUPPORT
3879 VOID PeerDLSAction(
3880     IN PRTMP_ADAPTER pAd,
3881     IN MLME_QUEUE_ELEM *Elem);
3882 #endif // QOS_DLS_SUPPORT //
3883
3884 #ifdef CONFIG_STA_SUPPORT
3885 #ifdef QOS_DLS_SUPPORT
3886 VOID DlsParmFill(
3887         IN PRTMP_ADAPTER pAd,
3888         IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3889         IN PRT_802_11_DLS pDls,
3890         IN USHORT reason);
3891 #endif // QOS_DLS_SUPPORT //
3892 #endif // CONFIG_STA_SUPPORT //
3893
3894 #ifdef DOT11_N_SUPPORT
3895 VOID RECBATimerTimeout(
3896     IN PVOID SystemSpecific1,
3897     IN PVOID FunctionContext,
3898     IN PVOID SystemSpecific2,
3899     IN PVOID SystemSpecific3);
3900
3901 VOID ORIBATimerTimeout(
3902         IN      PRTMP_ADAPTER   pAd);
3903
3904 VOID SendRefreshBAR(
3905         IN      PRTMP_ADAPTER   pAd,
3906         IN      MAC_TABLE_ENTRY *pEntry);
3907 #endif // DOT11_N_SUPPORT //
3908
3909 VOID ActHeaderInit(
3910     IN  PRTMP_ADAPTER   pAd,
3911     IN OUT PHEADER_802_11 pHdr80211,
3912     IN PUCHAR Addr1,
3913     IN PUCHAR Addr2,
3914     IN PUCHAR Addr3);
3915
3916 VOID BarHeaderInit(
3917         IN      PRTMP_ADAPTER   pAd,
3918         IN OUT PFRAME_BAR pCntlBar,
3919         IN PUCHAR pDA,
3920         IN PUCHAR pSA);
3921
3922 VOID InsertActField(
3923         IN PRTMP_ADAPTER pAd,
3924         OUT PUCHAR pFrameBuf,
3925         OUT PULONG pFrameLen,
3926         IN UINT8 Category,
3927         IN UINT8 ActCode);
3928
3929 BOOLEAN QosBADataParse(
3930         IN PRTMP_ADAPTER        pAd,
3931         IN BOOLEAN bAMSDU,
3932         IN PUCHAR p8023Header,
3933         IN UCHAR        WCID,
3934         IN UCHAR        TID,
3935         IN USHORT Sequence,
3936         IN UCHAR DataOffset,
3937         IN USHORT Datasize,
3938         IN UINT   CurRxIndex);
3939
3940 #ifdef DOT11_N_SUPPORT
3941 BOOLEAN CntlEnqueueForRecv(
3942     IN  PRTMP_ADAPTER   pAd,
3943         IN ULONG Wcid,
3944     IN ULONG MsgLen,
3945         IN PFRAME_BA_REQ pMsg);
3946
3947 VOID BaAutoManSwitch(
3948         IN      PRTMP_ADAPTER   pAd);
3949 #endif // DOT11_N_SUPPORT //
3950
3951 VOID HTIOTCheck(
3952         IN      PRTMP_ADAPTER   pAd,
3953         IN    UCHAR     BatRecIdx);
3954
3955 //
3956 // Private routines in rtmp_data.c
3957 //
3958 BOOLEAN RTMPHandleRxDoneInterrupt(
3959         IN  PRTMP_ADAPTER   pAd);
3960
3961 VOID RTMPHandleTxDoneInterrupt(
3962         IN  PRTMP_ADAPTER   pAd);
3963
3964 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3965         IN  PRTMP_ADAPTER   pAd,
3966         IN  INT_SOURCE_CSR_STRUC TxRingBitmap);
3967
3968 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3969         IN  PRTMP_ADAPTER   pAd);
3970
3971 VOID RTMPHandleTBTTInterrupt(
3972         IN  PRTMP_ADAPTER   pAd);
3973
3974 VOID RTMPHandlePreTBTTInterrupt(
3975         IN  PRTMP_ADAPTER   pAd);
3976
3977 void RTMPHandleTwakeupInterrupt(
3978         IN PRTMP_ADAPTER pAd);
3979
3980 VOID    RTMPHandleRxCoherentInterrupt(
3981         IN      PRTMP_ADAPTER   pAd);
3982
3983 BOOLEAN TxFrameIsAggregatible(
3984         IN  PRTMP_ADAPTER   pAd,
3985         IN  PUCHAR          pPrevAddr1,
3986         IN  PUCHAR          p8023hdr);
3987
3988 BOOLEAN PeerIsAggreOn(
3989     IN  PRTMP_ADAPTER   pAd,
3990     IN  ULONG          TxRate,
3991     IN  PMAC_TABLE_ENTRY pMacEntry);
3992
3993 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3994         IN  PNDIS_BUFFER    pFirstBuffer,
3995         IN  UCHAR           DesiredOffset,
3996         OUT PUCHAR          pByte0,
3997         OUT PUCHAR          pByte1);
3998
3999 NDIS_STATUS STASendPacket(
4000         IN  PRTMP_ADAPTER   pAd,
4001         IN  PNDIS_PACKET    pPacket);
4002
4003 VOID STASendPackets(
4004         IN  NDIS_HANDLE     MiniportAdapterContext,
4005         IN  PPNDIS_PACKET   ppPacketArray,
4006         IN  UINT            NumberOfPackets);
4007
4008 VOID RTMPDeQueuePacket(
4009         IN  PRTMP_ADAPTER   pAd,
4010         IN      BOOLEAN                 bIntContext,
4011         IN  UCHAR                       QueIdx,
4012         IN      UCHAR                   Max_Tx_Packets);
4013
4014 NDIS_STATUS     RTMPHardTransmit(
4015         IN PRTMP_ADAPTER        pAd,
4016         IN PNDIS_PACKET         pPacket,
4017         IN  UCHAR                       QueIdx,
4018         OUT     PULONG                  pFreeTXDLeft);
4019
4020 NDIS_STATUS     STAHardTransmit(
4021         IN PRTMP_ADAPTER        pAd,
4022         IN TX_BLK                       *pTxBlk,
4023         IN  UCHAR                       QueIdx);
4024
4025 VOID STARxEAPOLFrameIndicate(
4026         IN      PRTMP_ADAPTER   pAd,
4027         IN      MAC_TABLE_ENTRY *pEntry,
4028         IN      RX_BLK                  *pRxBlk,
4029         IN      UCHAR                   FromWhichBSSID);
4030
4031 NDIS_STATUS RTMPFreeTXDRequest(
4032         IN  PRTMP_ADAPTER   pAd,
4033         IN  UCHAR           RingType,
4034         IN  UCHAR           NumberRequired,
4035         IN      PUCHAR          FreeNumberIs);
4036
4037 NDIS_STATUS MlmeHardTransmit(
4038         IN  PRTMP_ADAPTER   pAd,
4039         IN  UCHAR       QueIdx,
4040         IN  PNDIS_PACKET    pPacket);
4041
4042 NDIS_STATUS MlmeHardTransmitMgmtRing(
4043         IN  PRTMP_ADAPTER   pAd,
4044         IN  UCHAR       QueIdx,
4045         IN  PNDIS_PACKET    pPacket);
4046
4047 NDIS_STATUS MlmeHardTransmitTxRing(
4048         IN  PRTMP_ADAPTER   pAd,
4049         IN  UCHAR       QueIdx,
4050         IN  PNDIS_PACKET    pPacket);
4051
4052 USHORT  RTMPCalcDuration(
4053         IN  PRTMP_ADAPTER   pAd,
4054         IN  UCHAR           Rate,
4055         IN  ULONG           Size);
4056
4057 VOID RTMPWriteTxWI(
4058         IN      PRTMP_ADAPTER   pAd,
4059         IN      PTXWI_STRUC             pTxWI,
4060         IN  BOOLEAN             FRAG,
4061         IN  BOOLEAN             CFACK,
4062         IN  BOOLEAN             InsTimestamp,
4063         IN      BOOLEAN                 AMPDU,
4064         IN      BOOLEAN                 Ack,
4065         IN      BOOLEAN                 NSeq,           // HW new a sequence.
4066         IN      UCHAR                   BASize,
4067         IN      UCHAR                   WCID,
4068         IN      ULONG                   Length,
4069         IN  UCHAR               PID,
4070         IN      UCHAR                   TID,
4071         IN      UCHAR                   TxRate,
4072         IN      UCHAR                   Txopmode,
4073         IN      BOOLEAN                 CfAck,
4074         IN      HTTRANSMIT_SETTING      *pTransmit);
4075
4076
4077 VOID RTMPWriteTxWI_Data(
4078         IN      PRTMP_ADAPTER           pAd,
4079         IN      OUT PTXWI_STRUC         pTxWI,
4080         IN      TX_BLK                          *pTxBlk);
4081
4082
4083 VOID RTMPWriteTxWI_Cache(
4084         IN      PRTMP_ADAPTER           pAd,
4085         IN      OUT PTXWI_STRUC         pTxWI,
4086         IN      TX_BLK                          *pTxBlk);
4087
4088 VOID RTMPWriteTxDescriptor(
4089         IN      PRTMP_ADAPTER   pAd,
4090         IN      PTXD_STRUC              pTxD,
4091         IN      BOOLEAN                 bWIV,
4092         IN      UCHAR                   QSEL);
4093
4094 VOID RTMPSuspendMsduTransmission(
4095         IN  PRTMP_ADAPTER   pAd);
4096
4097 VOID RTMPResumeMsduTransmission(
4098         IN  PRTMP_ADAPTER   pAd);
4099
4100 NDIS_STATUS MiniportMMRequest(
4101         IN  PRTMP_ADAPTER   pAd,
4102         IN      UCHAR                   QueIdx,
4103         IN      PUCHAR                  pData,
4104         IN  UINT            Length);
4105
4106 NDIS_STATUS MiniportDataMMRequest(
4107          IN  PRTMP_ADAPTER   pAd,
4108          IN  UCHAR           QueIdx,
4109          IN  PUCHAR          pData,
4110          IN  UINT            Length);
4111
4112 VOID RTMPSendNullFrame(
4113         IN  PRTMP_ADAPTER   pAd,
4114         IN  UCHAR           TxRate,
4115         IN      BOOLEAN                 bQosNull);
4116
4117 VOID RTMPSendDisassociationFrame(
4118         IN      PRTMP_ADAPTER   pAd);
4119
4120 VOID RTMPSendRTSFrame(
4121         IN  PRTMP_ADAPTER   pAd,
4122         IN  PUCHAR          pDA,
4123         IN      unsigned int    NextMpduSize,
4124         IN  UCHAR           TxRate,
4125         IN  UCHAR           RTSRate,
4126         IN  USHORT          AckDuration,
4127         IN  UCHAR           QueIdx,
4128         IN  UCHAR                       FrameGap);
4129
4130
4131 NDIS_STATUS RTMPApplyPacketFilter(
4132         IN  PRTMP_ADAPTER   pAd,
4133         IN  PRT28XX_RXD_STRUC      pRxD,
4134         IN  PHEADER_802_11  pHeader);
4135
4136 PQUEUE_HEADER   RTMPCheckTxSwQueue(
4137         IN  PRTMP_ADAPTER   pAd,
4138         OUT UCHAR           *QueIdx);
4139
4140 #ifdef CONFIG_STA_SUPPORT
4141 VOID RTMPReportMicError(
4142         IN  PRTMP_ADAPTER   pAd,
4143         IN  PCIPHER_KEY     pWpaKey);
4144
4145 VOID    WpaMicFailureReportFrame(
4146         IN  PRTMP_ADAPTER    pAd,
4147         IN  MLME_QUEUE_ELEM *Elem);
4148
4149 VOID    WpaDisassocApAndBlockAssoc(
4150     IN  PVOID SystemSpecific1,
4151     IN  PVOID FunctionContext,
4152     IN  PVOID SystemSpecific2,
4153     IN  PVOID SystemSpecific3);
4154 #endif // CONFIG_STA_SUPPORT //
4155
4156 NDIS_STATUS RTMPCloneNdisPacket(
4157         IN  PRTMP_ADAPTER   pAd,
4158         IN      BOOLEAN    pInsAMSDUHdr,
4159         IN  PNDIS_PACKET    pInPacket,
4160         OUT PNDIS_PACKET   *ppOutPacket);
4161
4162 NDIS_STATUS RTMPAllocateNdisPacket(
4163         IN  PRTMP_ADAPTER   pAd,
4164         IN  PNDIS_PACKET    *pPacket,
4165         IN  PUCHAR          pHeader,
4166         IN  UINT            HeaderLen,
4167         IN  PUCHAR          pData,
4168         IN  UINT            DataLen);
4169
4170 VOID RTMPFreeNdisPacket(
4171         IN  PRTMP_ADAPTER   pAd,
4172         IN  PNDIS_PACKET    pPacket);
4173
4174 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4175         IN PRTMP_ADAPTER    pAd,
4176         IN UCHAR            QueIdx);
4177
4178 BOOLEAN RTMPCheckDHCPFrame(
4179         IN      PRTMP_ADAPTER   pAd,
4180         IN      PNDIS_PACKET    pPacket);
4181
4182
4183 BOOLEAN RTMPCheckEtherType(
4184         IN      PRTMP_ADAPTER   pAd,
4185         IN      PNDIS_PACKET    pPacket);
4186
4187
4188 VOID RTMPCckBbpTuning(
4189         IN      PRTMP_ADAPTER   pAd,
4190         IN      UINT                    TxRate);
4191
4192 //
4193 // Private routines in rtmp_wep.c
4194 //
4195 VOID RTMPInitWepEngine(
4196         IN  PRTMP_ADAPTER   pAd,
4197         IN  PUCHAR          pKey,
4198         IN  UCHAR           KeyId,
4199         IN  UCHAR           KeyLen,
4200         IN  PUCHAR          pDest);
4201
4202 VOID RTMPEncryptData(
4203         IN  PRTMP_ADAPTER   pAd,
4204         IN  PUCHAR          pSrc,
4205         IN  PUCHAR          pDest,
4206         IN  UINT            Len);
4207
4208 BOOLEAN RTMPDecryptData(
4209         IN      PRTMP_ADAPTER   pAdapter,
4210         IN      PUCHAR                  pSrc,
4211         IN      UINT                    Len,
4212         IN      UINT                    idx);
4213
4214 BOOLEAN RTMPSoftDecryptWEP(
4215         IN PRTMP_ADAPTER        pAd,
4216         IN PUCHAR                       pData,
4217         IN ULONG                        DataByteCnt,
4218         IN PCIPHER_KEY          pGroupKey);
4219
4220 VOID RTMPSetICV(
4221         IN  PRTMP_ADAPTER   pAd,
4222         IN  PUCHAR          pDest);
4223
4224 VOID ARCFOUR_INIT(
4225         IN  PARCFOURCONTEXT Ctx,
4226         IN  PUCHAR          pKey,
4227         IN  UINT            KeyLen);
4228
4229 UCHAR   ARCFOUR_BYTE(
4230         IN  PARCFOURCONTEXT     Ctx);
4231
4232 VOID ARCFOUR_DECRYPT(
4233         IN  PARCFOURCONTEXT Ctx,
4234         IN  PUCHAR          pDest,
4235         IN  PUCHAR          pSrc,
4236         IN  UINT            Len);
4237
4238 VOID ARCFOUR_ENCRYPT(
4239         IN  PARCFOURCONTEXT Ctx,
4240         IN  PUCHAR          pDest,
4241         IN  PUCHAR          pSrc,
4242         IN  UINT            Len);
4243
4244 VOID WPAARCFOUR_ENCRYPT(
4245         IN  PARCFOURCONTEXT Ctx,
4246         IN  PUCHAR          pDest,
4247         IN  PUCHAR          pSrc,
4248         IN  UINT            Len);
4249
4250 UINT RTMP_CALC_FCS32(
4251         IN  UINT   Fcs,
4252         IN  PUCHAR  Cp,
4253         IN  INT     Len);
4254
4255 //
4256 // MLME routines
4257 //
4258
4259 // Asic/RF/BBP related functions
4260
4261 VOID AsicAdjustTxPower(
4262         IN PRTMP_ADAPTER pAd);
4263
4264 VOID    AsicUpdateProtect(
4265         IN              PRTMP_ADAPTER   pAd,
4266         IN              USHORT                  OperaionMode,
4267         IN              UCHAR                   SetMask,
4268         IN              BOOLEAN                 bDisableBGProtect,
4269         IN              BOOLEAN                 bNonGFExist);
4270
4271 VOID AsicSwitchChannel(
4272         IN  PRTMP_ADAPTER   pAd,
4273         IN      UCHAR                   Channel,
4274         IN      BOOLEAN                 bScan);
4275
4276 VOID AsicLockChannel(
4277         IN PRTMP_ADAPTER pAd,
4278         IN UCHAR Channel) ;
4279
4280 VOID AsicAntennaSelect(
4281         IN  PRTMP_ADAPTER   pAd,
4282         IN  UCHAR           Channel);
4283
4284 VOID AsicAntennaSetting(
4285         IN      PRTMP_ADAPTER   pAd,
4286         IN      ABGBAND_STATE   BandState);
4287
4288 VOID AsicRfTuningExec(
4289         IN PVOID SystemSpecific1,
4290         IN PVOID FunctionContext,
4291         IN PVOID SystemSpecific2,
4292         IN PVOID SystemSpecific3);
4293
4294 #ifdef CONFIG_STA_SUPPORT
4295 VOID AsicSleepThenAutoWakeup(
4296         IN  PRTMP_ADAPTER   pAd,
4297         IN  USHORT TbttNumToNextWakeUp);
4298
4299 VOID AsicForceSleep(
4300         IN PRTMP_ADAPTER pAd);
4301
4302 VOID AsicForceWakeup(
4303         IN PRTMP_ADAPTER pAd,
4304         IN BOOLEAN    bFromTx);
4305 #endif // CONFIG_STA_SUPPORT //
4306
4307 VOID AsicSetBssid(
4308         IN  PRTMP_ADAPTER   pAd,
4309         IN  PUCHAR pBssid);
4310
4311 VOID AsicSetMcastWC(
4312         IN PRTMP_ADAPTER pAd);
4313
4314 VOID AsicDelWcidTab(
4315         IN PRTMP_ADAPTER pAd,
4316         IN UCHAR        Wcid);
4317
4318 VOID AsicEnableRDG(
4319         IN PRTMP_ADAPTER pAd);
4320
4321 VOID AsicDisableRDG(
4322         IN PRTMP_ADAPTER pAd);
4323
4324 VOID AsicDisableSync(
4325         IN  PRTMP_ADAPTER   pAd);
4326
4327 VOID AsicEnableBssSync(
4328         IN  PRTMP_ADAPTER   pAd);
4329
4330 VOID AsicEnableIbssSync(
4331         IN  PRTMP_ADAPTER   pAd);
4332
4333 VOID AsicSetEdcaParm(
4334         IN PRTMP_ADAPTER pAd,
4335         IN PEDCA_PARM    pEdcaParm);
4336
4337 VOID AsicSetSlotTime(
4338         IN PRTMP_ADAPTER pAd,
4339         IN BOOLEAN bUseShortSlotTime);
4340
4341 VOID AsicAddSharedKeyEntry(
4342         IN PRTMP_ADAPTER pAd,
4343         IN UCHAR         BssIndex,
4344         IN UCHAR         KeyIdx,
4345         IN UCHAR         CipherAlg,
4346         IN PUCHAR        pKey,
4347         IN PUCHAR        pTxMic,
4348         IN PUCHAR        pRxMic);
4349
4350 VOID AsicRemoveSharedKeyEntry(
4351         IN PRTMP_ADAPTER pAd,
4352         IN UCHAR         BssIndex,
4353         IN UCHAR         KeyIdx);
4354
4355 VOID AsicUpdateWCIDAttribute(
4356         IN PRTMP_ADAPTER pAd,
4357         IN USHORT               WCID,
4358         IN UCHAR                BssIndex,
4359         IN UCHAR        CipherAlg,
4360         IN BOOLEAN              bUsePairewiseKeyTable);
4361
4362 VOID AsicUpdateWCIDIVEIV(
4363         IN PRTMP_ADAPTER pAd,
4364         IN USHORT               WCID,
4365         IN ULONG        uIV,
4366         IN ULONG        uEIV);
4367
4368 VOID AsicUpdateRxWCIDTable(
4369         IN PRTMP_ADAPTER pAd,
4370         IN USHORT               WCID,
4371         IN PUCHAR        pAddr);
4372
4373 VOID AsicAddKeyEntry(
4374         IN PRTMP_ADAPTER pAd,
4375         IN USHORT               WCID,
4376         IN UCHAR                BssIndex,
4377         IN UCHAR                KeyIdx,
4378         IN PCIPHER_KEY  pCipherKey,
4379         IN BOOLEAN              bUsePairewiseKeyTable,
4380         IN BOOLEAN              bTxKey);
4381
4382 VOID AsicAddPairwiseKeyEntry(
4383         IN PRTMP_ADAPTER pAd,
4384         IN PUCHAR        pAddr,
4385         IN UCHAR                WCID,
4386         IN CIPHER_KEY            *pCipherKey);
4387
4388 VOID AsicRemovePairwiseKeyEntry(
4389         IN PRTMP_ADAPTER  pAd,
4390         IN UCHAR                 BssIdx,
4391         IN UCHAR                 Wcid);
4392
4393 BOOLEAN AsicSendCommandToMcu(
4394         IN PRTMP_ADAPTER pAd,
4395         IN UCHAR         Command,
4396         IN UCHAR         Token,
4397         IN UCHAR         Arg0,
4398         IN UCHAR         Arg1);
4399
4400
4401 VOID MacAddrRandomBssid(
4402         IN  PRTMP_ADAPTER   pAd,
4403         OUT PUCHAR pAddr);
4404
4405 VOID MgtMacHeaderInit(
4406         IN  PRTMP_ADAPTER     pAd,
4407         IN OUT PHEADER_802_11 pHdr80211,
4408         IN UCHAR SubType,
4409         IN UCHAR ToDs,
4410         IN PUCHAR pDA,
4411         IN PUCHAR pBssid);
4412
4413 VOID MlmeRadioOff(
4414         IN PRTMP_ADAPTER pAd);
4415
4416 VOID MlmeRadioOn(
4417         IN PRTMP_ADAPTER pAd);
4418
4419
4420 VOID BssTableInit(
4421         IN BSS_TABLE *Tab);
4422
4423 #ifdef DOT11_N_SUPPORT
4424 VOID BATableInit(
4425         IN PRTMP_ADAPTER pAd,
4426     IN BA_TABLE *Tab);
4427 #endif // DOT11_N_SUPPORT //
4428
4429 ULONG BssTableSearch(
4430         IN BSS_TABLE *Tab,
4431         IN PUCHAR pBssid,
4432         IN UCHAR Channel);
4433
4434 ULONG BssSsidTableSearch(
4435         IN BSS_TABLE *Tab,
4436         IN PUCHAR    pBssid,
4437         IN PUCHAR    pSsid,
4438         IN UCHAR     SsidLen,
4439         IN UCHAR     Channel);
4440
4441 ULONG BssTableSearchWithSSID(
4442         IN BSS_TABLE *Tab,
4443         IN PUCHAR    Bssid,
4444         IN PUCHAR    pSsid,
4445         IN UCHAR     SsidLen,
4446         IN UCHAR     Channel);
4447
4448 VOID BssTableDeleteEntry(
4449         IN OUT  PBSS_TABLE pTab,
4450         IN      PUCHAR pBssid,
4451         IN      UCHAR Channel);
4452
4453 #ifdef DOT11_N_SUPPORT
4454 VOID BATableDeleteORIEntry(
4455         IN OUT  PRTMP_ADAPTER pAd,
4456         IN              BA_ORI_ENTRY    *pBAORIEntry);
4457
4458 VOID BATableDeleteRECEntry(
4459         IN OUT  PRTMP_ADAPTER pAd,
4460         IN              BA_REC_ENTRY    *pBARECEntry);
4461
4462 VOID BATableTearORIEntry(
4463         IN OUT  PRTMP_ADAPTER pAd,
4464         IN              UCHAR TID,
4465         IN              UCHAR Wcid,
4466         IN              BOOLEAN bForceDelete,
4467         IN              BOOLEAN ALL);
4468
4469 VOID BATableTearRECEntry(
4470         IN OUT  PRTMP_ADAPTER pAd,
4471         IN              UCHAR TID,
4472         IN              UCHAR WCID,
4473         IN              BOOLEAN ALL);
4474 #endif // DOT11_N_SUPPORT //
4475
4476 VOID  BssEntrySet(
4477         IN  PRTMP_ADAPTER   pAd,
4478         OUT PBSS_ENTRY pBss,
4479         IN PUCHAR pBssid,
4480         IN CHAR Ssid[],
4481         IN UCHAR SsidLen,
4482         IN UCHAR BssType,
4483         IN USHORT BeaconPeriod,
4484         IN PCF_PARM CfParm,
4485         IN USHORT AtimWin,
4486         IN USHORT CapabilityInfo,
4487         IN UCHAR SupRate[],
4488         IN UCHAR SupRateLen,
4489         IN UCHAR ExtRate[],
4490         IN UCHAR ExtRateLen,
4491         IN HT_CAPABILITY_IE *pHtCapability,
4492         IN ADD_HT_INFO_IE *pAddHtInfo,  // AP might use this additional ht info IE
4493         IN UCHAR                        HtCapabilityLen,
4494         IN UCHAR                        AddHtInfoLen,
4495         IN UCHAR                        NewExtChanOffset,
4496         IN UCHAR Channel,
4497         IN CHAR Rssi,
4498         IN LARGE_INTEGER TimeStamp,
4499         IN UCHAR CkipFlag,
4500         IN PEDCA_PARM pEdcaParm,
4501         IN PQOS_CAPABILITY_PARM pQosCapability,
4502         IN PQBSS_LOAD_PARM pQbssLoad,
4503         IN USHORT LengthVIE,
4504         IN PNDIS_802_11_VARIABLE_IEs pVIE);
4505
4506 ULONG  BssTableSetEntry(
4507         IN  PRTMP_ADAPTER   pAd,
4508         OUT PBSS_TABLE pTab,
4509         IN PUCHAR pBssid,
4510         IN CHAR Ssid[],
4511         IN UCHAR SsidLen,
4512         IN UCHAR BssType,
4513         IN USHORT BeaconPeriod,
4514         IN CF_PARM *CfParm,
4515         IN USHORT AtimWin,
4516         IN USHORT CapabilityInfo,
4517         IN UCHAR SupRate[],
4518         IN UCHAR SupRateLen,
4519         IN UCHAR ExtRate[],
4520         IN UCHAR ExtRateLen,
4521         IN HT_CAPABILITY_IE *pHtCapability,
4522         IN ADD_HT_INFO_IE *pAddHtInfo,  // AP might use this additional ht info IE
4523         IN UCHAR                        HtCapabilityLen,
4524         IN UCHAR                        AddHtInfoLen,
4525         IN UCHAR                        NewExtChanOffset,
4526         IN UCHAR Channel,
4527         IN CHAR Rssi,
4528         IN LARGE_INTEGER TimeStamp,
4529         IN UCHAR CkipFlag,
4530         IN PEDCA_PARM pEdcaParm,
4531         IN PQOS_CAPABILITY_PARM pQosCapability,
4532         IN PQBSS_LOAD_PARM pQbssLoad,
4533         IN USHORT LengthVIE,
4534         IN PNDIS_802_11_VARIABLE_IEs pVIE);
4535
4536 #ifdef DOT11_N_SUPPORT
4537 VOID BATableInsertEntry(
4538     IN  PRTMP_ADAPTER   pAd,
4539         IN USHORT Aid,
4540     IN USHORT           TimeOutValue,
4541         IN USHORT               StartingSeq,
4542     IN UCHAR TID,
4543         IN UCHAR BAWinSize,
4544         IN UCHAR OriginatorStatus,
4545     IN BOOLEAN IsRecipient);
4546
4547 #ifdef DOT11N_DRAFT3
4548 VOID Bss2040CoexistTimeOut(
4549         IN PVOID SystemSpecific1,
4550         IN PVOID FunctionContext,
4551         IN PVOID SystemSpecific2,
4552         IN PVOID SystemSpecific3);
4553
4554
4555 VOID  TriEventInit(
4556         IN      PRTMP_ADAPTER   pAd);
4557
4558 ULONG TriEventTableSetEntry(
4559         IN      PRTMP_ADAPTER   pAd,
4560         OUT TRIGGER_EVENT_TAB *Tab,
4561         IN PUCHAR pBssid,
4562         IN HT_CAPABILITY_IE *pHtCapability,
4563         IN UCHAR                        HtCapabilityLen,
4564         IN UCHAR                        RegClass,
4565         IN UCHAR ChannelNo);
4566
4567 VOID TriEventCounterMaintenance(
4568         IN      PRTMP_ADAPTER   pAd);
4569 #endif // DOT11N_DRAFT3 //
4570 #endif // DOT11_N_SUPPORT //
4571
4572 VOID BssTableSsidSort(
4573         IN  PRTMP_ADAPTER   pAd,
4574         OUT BSS_TABLE *OutTab,
4575         IN  CHAR Ssid[],
4576         IN  UCHAR SsidLen);
4577
4578 VOID  BssTableSortByRssi(
4579         IN OUT BSS_TABLE *OutTab);
4580
4581 VOID BssCipherParse(
4582         IN OUT  PBSS_ENTRY  pBss);
4583
4584 NDIS_STATUS  MlmeQueueInit(
4585         IN MLME_QUEUE *Queue);
4586
4587 VOID  MlmeQueueDestroy(
4588         IN MLME_QUEUE *Queue);
4589
4590 BOOLEAN MlmeEnqueue(
4591         IN PRTMP_ADAPTER pAd,
4592         IN ULONG Machine,
4593         IN ULONG MsgType,
4594         IN ULONG MsgLen,
4595         IN VOID *Msg);
4596
4597 BOOLEAN MlmeEnqueueForRecv(
4598         IN  PRTMP_ADAPTER   pAd,
4599         IN ULONG Wcid,
4600         IN ULONG TimeStampHigh,
4601         IN ULONG TimeStampLow,
4602         IN UCHAR Rssi0,
4603         IN UCHAR Rssi1,
4604         IN UCHAR Rssi2,
4605         IN ULONG MsgLen,
4606         IN PVOID Msg,
4607         IN UCHAR Signal);
4608
4609
4610 BOOLEAN MlmeDequeue(
4611         IN MLME_QUEUE *Queue,
4612         OUT MLME_QUEUE_ELEM **Elem);
4613
4614 VOID    MlmeRestartStateMachine(
4615         IN  PRTMP_ADAPTER   pAd);
4616
4617 BOOLEAN  MlmeQueueEmpty(
4618         IN MLME_QUEUE *Queue);
4619
4620 BOOLEAN  MlmeQueueFull(
4621         IN MLME_QUEUE *Queue);
4622
4623 BOOLEAN  MsgTypeSubst(
4624         IN PRTMP_ADAPTER pAd,
4625         IN PFRAME_802_11 pFrame,
4626         OUT INT *Machine,
4627         OUT INT *MsgType);
4628
4629 VOID StateMachineInit(
4630         IN STATE_MACHINE *Sm,
4631         IN STATE_MACHINE_FUNC Trans[],
4632         IN ULONG StNr,
4633         IN ULONG MsgNr,
4634         IN STATE_MACHINE_FUNC DefFunc,
4635         IN ULONG InitState,
4636         IN ULONG Base);
4637
4638 VOID StateMachineSetAction(
4639         IN STATE_MACHINE *S,
4640         IN ULONG St,
4641         ULONG Msg,
4642         IN STATE_MACHINE_FUNC F);
4643
4644 VOID StateMachinePerformAction(
4645         IN  PRTMP_ADAPTER   pAd,
4646         IN STATE_MACHINE *S,
4647         IN MLME_QUEUE_ELEM *Elem);
4648
4649 VOID Drop(
4650         IN  PRTMP_ADAPTER   pAd,
4651         IN MLME_QUEUE_ELEM *Elem);
4652
4653 VOID AssocStateMachineInit(
4654         IN  PRTMP_ADAPTER   pAd,
4655         IN  STATE_MACHINE *Sm,
4656         OUT STATE_MACHINE_FUNC Trans[]);
4657
4658 VOID ReassocTimeout(
4659         IN PVOID SystemSpecific1,
4660         IN PVOID FunctionContext,
4661         IN PVOID SystemSpecific2,
4662         IN PVOID SystemSpecific3);
4663
4664 VOID AssocTimeout(
4665         IN PVOID SystemSpecific1,
4666         IN PVOID FunctionContext,
4667         IN PVOID SystemSpecific2,
4668         IN PVOID SystemSpecific3);
4669
4670 VOID DisassocTimeout(
4671         IN PVOID SystemSpecific1,
4672         IN PVOID FunctionContext,
4673         IN PVOID SystemSpecific2,
4674         IN PVOID SystemSpecific3);
4675
4676 //----------------------------------------------
4677 VOID MlmeDisassocReqAction(
4678         IN  PRTMP_ADAPTER   pAd,
4679         IN  MLME_QUEUE_ELEM *Elem);
4680
4681 VOID MlmeAssocReqAction(
4682         IN  PRTMP_ADAPTER   pAd,
4683         IN  MLME_QUEUE_ELEM *Elem);
4684
4685 VOID MlmeReassocReqAction(
4686         IN  PRTMP_ADAPTER   pAd,
4687         IN  MLME_QUEUE_ELEM *Elem);
4688
4689 VOID MlmeDisassocReqAction(
4690         IN  PRTMP_ADAPTER   pAd,
4691         IN  MLME_QUEUE_ELEM *Elem);
4692
4693 VOID PeerAssocRspAction(
4694         IN  PRTMP_ADAPTER   pAd,
4695         IN  MLME_QUEUE_ELEM *Elem);
4696
4697 VOID PeerReassocRspAction(
4698         IN  PRTMP_ADAPTER   pAd,
4699         IN  MLME_QUEUE_ELEM *Elem);
4700
4701 VOID PeerDisassocAction(
4702         IN  PRTMP_ADAPTER   pAd,
4703         IN  MLME_QUEUE_ELEM *Elem);
4704
4705 VOID DisassocTimeoutAction(
4706         IN  PRTMP_ADAPTER   pAd,
4707         IN  MLME_QUEUE_ELEM *Elem);
4708
4709 VOID AssocTimeoutAction(
4710         IN  PRTMP_ADAPTER   pAd,
4711         IN  MLME_QUEUE_ELEM *Elem);
4712
4713 VOID  ReassocTimeoutAction(
4714         IN  PRTMP_ADAPTER   pAd,
4715         IN  MLME_QUEUE_ELEM *Elem);
4716
4717 VOID  Cls3errAction(
4718         IN  PRTMP_ADAPTER   pAd,
4719         IN  PUCHAR pAddr);
4720
4721 VOID SwitchBetweenWepAndCkip(
4722         IN PRTMP_ADAPTER pAd);
4723
4724 VOID  InvalidStateWhenAssoc(
4725         IN  PRTMP_ADAPTER   pAd,
4726         IN  MLME_QUEUE_ELEM *Elem);
4727
4728 VOID  InvalidStateWhenReassoc(
4729         IN  PRTMP_ADAPTER   pAd,
4730         IN  MLME_QUEUE_ELEM *Elem);
4731
4732 VOID InvalidStateWhenDisassociate(
4733         IN  PRTMP_ADAPTER pAd,
4734         IN  MLME_QUEUE_ELEM *Elem);
4735
4736 #ifdef RT2870
4737 VOID MlmeCntlConfirm(
4738         IN PRTMP_ADAPTER pAd,
4739         IN ULONG MsgType,
4740         IN USHORT Msg);
4741 #endif // RT2870 //
4742
4743 VOID  ComposePsPoll(
4744         IN  PRTMP_ADAPTER   pAd);
4745
4746 VOID  ComposeNullFrame(
4747         IN  PRTMP_ADAPTER pAd);
4748
4749 VOID  AssocPostProc(
4750         IN  PRTMP_ADAPTER   pAd,
4751         IN  PUCHAR pAddr2,
4752         IN  USHORT CapabilityInfo,
4753         IN  USHORT Aid,
4754         IN  UCHAR SupRate[],
4755         IN  UCHAR SupRateLen,
4756         IN  UCHAR ExtRate[],
4757         IN  UCHAR ExtRateLen,
4758         IN PEDCA_PARM pEdcaParm,
4759         IN HT_CAPABILITY_IE             *pHtCapability,
4760         IN  UCHAR HtCapabilityLen,
4761         IN ADD_HT_INFO_IE               *pAddHtInfo);
4762
4763 VOID AuthStateMachineInit(
4764         IN  PRTMP_ADAPTER   pAd,
4765         IN PSTATE_MACHINE sm,
4766         OUT STATE_MACHINE_FUNC Trans[]);
4767
4768 VOID AuthTimeout(
4769         IN PVOID SystemSpecific1,
4770         IN PVOID FunctionContext,
4771         IN PVOID SystemSpecific2,
4772         IN PVOID SystemSpecific3);
4773
4774 VOID MlmeAuthReqAction(
4775         IN  PRTMP_ADAPTER   pAd,
4776         IN  MLME_QUEUE_ELEM *Elem);
4777
4778 VOID PeerAuthRspAtSeq2Action(
4779         IN  PRTMP_ADAPTER   pAd,
4780         IN  MLME_QUEUE_ELEM *Elem);
4781
4782 VOID PeerAuthRspAtSeq4Action(
4783         IN  PRTMP_ADAPTER   pAd,
4784         IN  MLME_QUEUE_ELEM *Elem);
4785
4786 VOID AuthTimeoutAction(
4787         IN  PRTMP_ADAPTER   pAd,
4788         IN  MLME_QUEUE_ELEM *Elem);
4789
4790 VOID Cls2errAction(
4791         IN  PRTMP_ADAPTER   pAd,
4792         IN  PUCHAR pAddr);
4793
4794 VOID MlmeDeauthReqAction(
4795         IN  PRTMP_ADAPTER   pAd,
4796         IN  MLME_QUEUE_ELEM *Elem);
4797
4798 VOID InvalidStateWhenAuth(
4799         IN  PRTMP_ADAPTER   pAd,
4800         IN  MLME_QUEUE_ELEM *Elem);
4801
4802 //=============================================
4803
4804 VOID AuthRspStateMachineInit(
4805         IN  PRTMP_ADAPTER   pAd,
4806         IN  PSTATE_MACHINE Sm,
4807         IN  STATE_MACHINE_FUNC Trans[]);
4808
4809 VOID PeerDeauthAction(
4810         IN PRTMP_ADAPTER pAd,
4811         IN MLME_QUEUE_ELEM *Elem);
4812
4813 VOID PeerAuthSimpleRspGenAndSend(
4814         IN  PRTMP_ADAPTER   pAd,
4815         IN  PHEADER_802_11  pHdr80211,
4816         IN  USHORT Alg,
4817         IN  USHORT Seq,
4818         IN  USHORT Reason,
4819         IN  USHORT Status);
4820
4821 //
4822 // Private routines in dls.c
4823 //
4824
4825 #ifdef CONFIG_STA_SUPPORT
4826 #ifdef QOS_DLS_SUPPORT
4827 void DlsStateMachineInit(
4828     IN PRTMP_ADAPTER pAd,
4829     IN STATE_MACHINE *Sm,
4830     OUT STATE_MACHINE_FUNC Trans[]);
4831
4832 VOID MlmeDlsReqAction(
4833     IN PRTMP_ADAPTER pAd,
4834     IN MLME_QUEUE_ELEM *Elem);
4835
4836 VOID PeerDlsReqAction(
4837     IN PRTMP_ADAPTER    pAd,
4838     IN MLME_QUEUE_ELEM  *Elem);
4839
4840 VOID PeerDlsRspAction(
4841     IN PRTMP_ADAPTER    pAd,
4842     IN MLME_QUEUE_ELEM  *Elem);
4843
4844 VOID MlmeDlsTearDownAction(
4845     IN PRTMP_ADAPTER pAd,
4846     IN MLME_QUEUE_ELEM *Elem);
4847
4848 VOID PeerDlsTearDownAction(
4849     IN PRTMP_ADAPTER    pAd,
4850     IN MLME_QUEUE_ELEM  *Elem);
4851
4852 VOID RTMPCheckDLSTimeOut(
4853         IN PRTMP_ADAPTER        pAd);
4854
4855 BOOLEAN RTMPRcvFrameDLSCheck(
4856         IN PRTMP_ADAPTER        pAd,
4857         IN PHEADER_802_11       pHeader,
4858         IN ULONG                        Len,
4859         IN PRT28XX_RXD_STRUC    pRxD);
4860
4861 INT     RTMPCheckDLSFrame(
4862         IN      PRTMP_ADAPTER   pAd,
4863         IN  PUCHAR          pDA);
4864
4865 VOID RTMPSendDLSTearDownFrame(
4866         IN      PRTMP_ADAPTER   pAd,
4867         IN  PUCHAR          pDA);
4868
4869 NDIS_STATUS RTMPSendSTAKeyRequest(
4870         IN      PRTMP_ADAPTER   pAd,
4871         IN      PUCHAR                  pDA);
4872
4873 NDIS_STATUS RTMPSendSTAKeyHandShake(
4874         IN      PRTMP_ADAPTER   pAd,
4875         IN      PUCHAR                  pDA);
4876
4877 VOID DlsTimeoutAction(
4878         IN PVOID SystemSpecific1,
4879         IN PVOID FunctionContext,
4880         IN PVOID SystemSpecific2,
4881         IN PVOID SystemSpecific3);
4882
4883 BOOLEAN MlmeDlsReqSanity(
4884         IN PRTMP_ADAPTER pAd,
4885     IN VOID *Msg,
4886     IN ULONG MsgLen,
4887     OUT PRT_802_11_DLS *pDLS,
4888     OUT PUSHORT pReason);
4889
4890 INT Set_DlsEntryInfo_Display_Proc(
4891         IN PRTMP_ADAPTER pAd,
4892         IN PUCHAR arg);
4893
4894 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4895         IN  PRTMP_ADAPTER   pAd,
4896         IN  PUCHAR      pAddr,
4897         IN  UINT        DlsEntryIdx);
4898
4899 BOOLEAN MacTableDeleteDlsEntry(
4900         IN PRTMP_ADAPTER pAd,
4901         IN USHORT wcid,
4902         IN PUCHAR pAddr);
4903
4904 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4905         IN PRTMP_ADAPTER pAd,
4906         IN PUCHAR       pAddr,
4907         IN BOOLEAN      bResetIdelCount);
4908
4909 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4910         IN PRTMP_ADAPTER pAd,
4911         IN UCHAR        wcid,
4912         IN PUCHAR       pAddr,
4913         IN BOOLEAN      bResetIdelCount);
4914
4915 INT     Set_DlsAddEntry_Proc(
4916         IN      PRTMP_ADAPTER   pAd,
4917         IN      PUCHAR                  arg);
4918
4919 INT     Set_DlsTearDownEntry_Proc(
4920         IN      PRTMP_ADAPTER   pAd,
4921         IN      PUCHAR                  arg);
4922 #endif // QOS_DLS_SUPPORT //
4923 #endif // CONFIG_STA_SUPPORT //
4924
4925 #ifdef QOS_DLS_SUPPORT
4926 BOOLEAN PeerDlsReqSanity(
4927     IN PRTMP_ADAPTER pAd,
4928     IN VOID *Msg,
4929     IN ULONG MsgLen,
4930     OUT PUCHAR pDA,
4931     OUT PUCHAR pSA,
4932     OUT USHORT *pCapabilityInfo,
4933     OUT USHORT *pDlsTimeout,
4934     OUT UCHAR *pRatesLen,
4935     OUT UCHAR Rates[],
4936     OUT UCHAR *pHtCapabilityLen,
4937     OUT HT_CAPABILITY_IE *pHtCapability);
4938
4939 BOOLEAN PeerDlsRspSanity(
4940     IN PRTMP_ADAPTER pAd,
4941     IN VOID *Msg,
4942     IN ULONG MsgLen,
4943     OUT PUCHAR pDA,
4944     OUT PUCHAR pSA,
4945     OUT USHORT *pCapabilityInfo,
4946     OUT USHORT *pStatus,
4947     OUT UCHAR *pRatesLen,
4948     OUT UCHAR Rates[],
4949     OUT UCHAR *pHtCapabilityLen,
4950     OUT HT_CAPABILITY_IE *pHtCapability);
4951
4952 BOOLEAN PeerDlsTearDownSanity(
4953     IN PRTMP_ADAPTER pAd,
4954     IN VOID *Msg,
4955     IN ULONG MsgLen,
4956     OUT PUCHAR pDA,
4957     OUT PUCHAR pSA,
4958     OUT USHORT *pReason);
4959 #endif // QOS_DLS_SUPPORT //
4960
4961 //========================================
4962
4963 VOID SyncStateMachineInit(
4964         IN  PRTMP_ADAPTER   pAd,
4965         IN  STATE_MACHINE *Sm,
4966         OUT STATE_MACHINE_FUNC Trans[]);
4967
4968 VOID BeaconTimeout(
4969         IN PVOID SystemSpecific1,
4970         IN PVOID FunctionContext,
4971         IN PVOID SystemSpecific2,
4972         IN PVOID SystemSpecific3);
4973
4974 VOID ScanTimeout(
4975         IN PVOID SystemSpecific1,
4976         IN PVOID FunctionContext,
4977         IN PVOID SystemSpecific2,
4978         IN PVOID SystemSpecific3);
4979
4980 VOID MlmeScanReqAction(
4981         IN  PRTMP_ADAPTER   pAd,
4982         IN  MLME_QUEUE_ELEM *Elem);
4983
4984 VOID InvalidStateWhenScan(
4985         IN  PRTMP_ADAPTER   pAd,
4986         IN  MLME_QUEUE_ELEM *Elem);
4987
4988 VOID InvalidStateWhenJoin(
4989         IN  PRTMP_ADAPTER   pAd,
4990         IN  MLME_QUEUE_ELEM *Elem);
4991
4992 VOID InvalidStateWhenStart(
4993         IN  PRTMP_ADAPTER   pAd,
4994         IN  MLME_QUEUE_ELEM *Elem);
4995
4996 VOID PeerBeacon(
4997         IN  PRTMP_ADAPTER   pAd,
4998         IN  MLME_QUEUE_ELEM *Elem);
4999
5000 VOID EnqueueProbeRequest(
5001         IN PRTMP_ADAPTER pAd);
5002
5003 BOOLEAN ScanRunning(
5004                 IN PRTMP_ADAPTER pAd);
5005 //=========================================
5006
5007 VOID MlmeCntlInit(
5008         IN  PRTMP_ADAPTER   pAd,
5009         IN  STATE_MACHINE *S,
5010         OUT STATE_MACHINE_FUNC Trans[]);
5011
5012 VOID MlmeCntlMachinePerformAction(
5013         IN  PRTMP_ADAPTER   pAd,
5014         IN  STATE_MACHINE *S,
5015         IN  MLME_QUEUE_ELEM *Elem);
5016
5017 VOID CntlIdleProc(
5018         IN  PRTMP_ADAPTER   pAd,
5019         IN  MLME_QUEUE_ELEM *Elem);
5020
5021 VOID CntlOidScanProc(
5022         IN  PRTMP_ADAPTER pAd,
5023         IN  MLME_QUEUE_ELEM *Elem);
5024
5025 VOID CntlOidSsidProc(
5026         IN  PRTMP_ADAPTER   pAd,
5027         IN  MLME_QUEUE_ELEM * Elem);
5028
5029 VOID CntlOidRTBssidProc(
5030         IN  PRTMP_ADAPTER   pAd,
5031         IN  MLME_QUEUE_ELEM * Elem);
5032
5033 VOID CntlMlmeRoamingProc(
5034         IN  PRTMP_ADAPTER   pAd,
5035         IN  MLME_QUEUE_ELEM * Elem);
5036
5037 VOID CntlWaitDisassocProc(
5038         IN  PRTMP_ADAPTER   pAd,
5039         IN  MLME_QUEUE_ELEM *Elem);
5040
5041 VOID CntlWaitJoinProc(
5042         IN  PRTMP_ADAPTER   pAd,
5043         IN  MLME_QUEUE_ELEM *Elem);
5044
5045 VOID CntlWaitReassocProc(
5046         IN  PRTMP_ADAPTER   pAd,
5047         IN  MLME_QUEUE_ELEM *Elem);
5048
5049 VOID CntlWaitStartProc(
5050         IN  PRTMP_ADAPTER   pAd,
5051         IN  MLME_QUEUE_ELEM *Elem);
5052
5053 VOID CntlWaitAuthProc(
5054         IN  PRTMP_ADAPTER   pAd,
5055         IN  MLME_QUEUE_ELEM *Elem);
5056
5057 VOID CntlWaitAuthProc2(
5058         IN  PRTMP_ADAPTER pAd,
5059         IN  MLME_QUEUE_ELEM *Elem);
5060
5061 VOID CntlWaitAssocProc(
5062         IN  PRTMP_ADAPTER   pAd,
5063         IN  MLME_QUEUE_ELEM *Elem);
5064
5065 #ifdef QOS_DLS_SUPPORT
5066 VOID CntlOidDLSSetupProc(
5067         IN PRTMP_ADAPTER pAd,
5068         IN MLME_QUEUE_ELEM *Elem);
5069 #endif // QOS_DLS_SUPPORT //
5070
5071 VOID LinkUp(
5072         IN  PRTMP_ADAPTER   pAd,
5073         IN  UCHAR BssType);
5074
5075 VOID LinkDown(
5076         IN  PRTMP_ADAPTER   pAd,
5077         IN  BOOLEAN         IsReqFromAP);
5078
5079 VOID IterateOnBssTab(
5080         IN  PRTMP_ADAPTER   pAd);
5081
5082 VOID IterateOnBssTab2(
5083         IN  PRTMP_ADAPTER   pAd);;
5084
5085 VOID JoinParmFill(
5086         IN  PRTMP_ADAPTER   pAd,
5087         IN  OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5088         IN  ULONG BssIdx);
5089
5090 VOID AssocParmFill(
5091         IN  PRTMP_ADAPTER   pAd,
5092         IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5093         IN  PUCHAR pAddr,
5094         IN  USHORT CapabilityInfo,
5095         IN  ULONG Timeout,
5096         IN  USHORT ListenIntv);
5097
5098 VOID ScanParmFill(
5099         IN  PRTMP_ADAPTER   pAd,
5100         IN  OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5101         IN  CHAR Ssid[],
5102         IN  UCHAR SsidLen,
5103         IN  UCHAR BssType,
5104         IN  UCHAR ScanType);
5105
5106 VOID DisassocParmFill(
5107         IN  PRTMP_ADAPTER   pAd,
5108         IN  OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5109         IN  PUCHAR pAddr,
5110         IN  USHORT Reason);
5111
5112 VOID StartParmFill(
5113         IN  PRTMP_ADAPTER   pAd,
5114         IN  OUT MLME_START_REQ_STRUCT *StartReq,
5115         IN  CHAR Ssid[],
5116         IN  UCHAR SsidLen);
5117
5118 VOID AuthParmFill(
5119         IN  PRTMP_ADAPTER   pAd,
5120         IN  OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5121         IN  PUCHAR pAddr,
5122         IN  USHORT Alg);
5123
5124 VOID EnqueuePsPoll(
5125         IN  PRTMP_ADAPTER   pAd);
5126
5127 VOID EnqueueBeaconFrame(
5128         IN  PRTMP_ADAPTER   pAd);
5129
5130 VOID MlmeJoinReqAction(
5131         IN  PRTMP_ADAPTER   pAd,
5132         IN  MLME_QUEUE_ELEM *Elem);
5133
5134 VOID MlmeScanReqAction(
5135         IN  PRTMP_ADAPTER   pAd,
5136         IN  MLME_QUEUE_ELEM *Elem);
5137
5138 VOID MlmeStartReqAction(
5139         IN  PRTMP_ADAPTER   pAd,
5140         IN  MLME_QUEUE_ELEM *Elem);
5141
5142 VOID ScanTimeoutAction(
5143         IN  PRTMP_ADAPTER   pAd,
5144         IN  MLME_QUEUE_ELEM *Elem);
5145
5146 VOID BeaconTimeoutAtJoinAction(
5147         IN  PRTMP_ADAPTER   pAd,
5148         IN  MLME_QUEUE_ELEM *Elem);
5149
5150 VOID PeerBeaconAtScanAction(
5151         IN  PRTMP_ADAPTER   pAd,
5152         IN  MLME_QUEUE_ELEM *Elem);
5153
5154 VOID PeerBeaconAtJoinAction(
5155         IN  PRTMP_ADAPTER   pAd,
5156         IN  MLME_QUEUE_ELEM *Elem);
5157
5158 VOID PeerBeacon(
5159         IN  PRTMP_ADAPTER   pAd,
5160         IN  MLME_QUEUE_ELEM *Elem);
5161
5162 VOID PeerProbeReqAction(
5163         IN  PRTMP_ADAPTER pAd,
5164         IN  MLME_QUEUE_ELEM *Elem);
5165
5166 VOID ScanNextChannel(
5167         IN  PRTMP_ADAPTER   pAd);
5168
5169 ULONG MakeIbssBeacon(
5170         IN  PRTMP_ADAPTER   pAd);
5171
5172 VOID CCXAdjacentAPReport(
5173         IN  PRTMP_ADAPTER   pAd);
5174
5175 BOOLEAN MlmeScanReqSanity(
5176         IN  PRTMP_ADAPTER   pAd,
5177         IN  VOID *Msg,
5178         IN  ULONG MsgLen,
5179         OUT UCHAR *BssType,
5180         OUT CHAR ssid[],
5181         OUT UCHAR *SsidLen,
5182         OUT UCHAR *ScanType);
5183
5184 BOOLEAN PeerBeaconAndProbeRspSanity(
5185         IN  PRTMP_ADAPTER   pAd,
5186         IN  VOID *Msg,
5187         IN  ULONG MsgLen,
5188         IN  UCHAR MsgChannel,
5189         OUT PUCHAR pAddr2,
5190         OUT PUCHAR pBssid,
5191         OUT CHAR Ssid[],
5192         OUT UCHAR *pSsidLen,
5193         OUT UCHAR *pBssType,
5194         OUT USHORT *pBeaconPeriod,
5195         OUT UCHAR *pChannel,
5196         OUT UCHAR *pNewChannel,
5197         OUT LARGE_INTEGER *pTimestamp,
5198         OUT CF_PARM *pCfParm,
5199         OUT USHORT *pAtimWin,
5200         OUT USHORT *pCapabilityInfo,
5201         OUT UCHAR *pErp,
5202         OUT UCHAR *pDtimCount,
5203         OUT UCHAR *pDtimPeriod,
5204         OUT UCHAR *pBcastFlag,
5205         OUT UCHAR *pMessageToMe,
5206         OUT UCHAR SupRate[],
5207         OUT UCHAR *pSupRateLen,
5208         OUT UCHAR ExtRate[],
5209         OUT UCHAR *pExtRateLen,
5210         OUT     UCHAR *pCkipFlag,
5211         OUT     UCHAR *pAironetCellPowerLimit,
5212         OUT PEDCA_PARM       pEdcaParm,
5213         OUT PQBSS_LOAD_PARM  pQbssLoad,
5214         OUT PQOS_CAPABILITY_PARM pQosCapability,
5215         OUT ULONG *pRalinkIe,
5216         OUT UCHAR                *pHtCapabilityLen,
5217 #ifdef CONFIG_STA_SUPPORT
5218         OUT UCHAR                *pPreNHtCapabilityLen,
5219 #endif // CONFIG_STA_SUPPORT //
5220         OUT HT_CAPABILITY_IE *pHtCapability,
5221         OUT UCHAR                *AddHtInfoLen,
5222         OUT ADD_HT_INFO_IE *AddHtInfo,
5223         OUT UCHAR *NewExtChannel,
5224         OUT USHORT *LengthVIE,
5225         OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5226
5227 BOOLEAN PeerAddBAReqActionSanity(
5228     IN PRTMP_ADAPTER pAd,
5229     IN VOID *pMsg,
5230     IN ULONG MsgLen,
5231         OUT PUCHAR pAddr2);
5232
5233 BOOLEAN PeerAddBARspActionSanity(
5234     IN PRTMP_ADAPTER pAd,
5235     IN VOID *pMsg,
5236     IN ULONG MsgLen);
5237
5238 BOOLEAN PeerDelBAActionSanity(
5239     IN PRTMP_ADAPTER pAd,
5240     IN UCHAR Wcid,
5241     IN VOID *pMsg,
5242     IN ULONG MsgLen);
5243
5244 BOOLEAN MlmeAssocReqSanity(
5245         IN  PRTMP_ADAPTER   pAd,
5246         IN  VOID *Msg,
5247         IN  ULONG MsgLen,
5248         OUT PUCHAR pApAddr,
5249         OUT USHORT *CapabilityInfo,
5250         OUT ULONG *Timeout,
5251         OUT USHORT *ListenIntv);
5252
5253 BOOLEAN MlmeAuthReqSanity(
5254         IN  PRTMP_ADAPTER   pAd,
5255         IN  VOID *Msg,
5256         IN  ULONG MsgLen,
5257         OUT PUCHAR pAddr,
5258         OUT ULONG *Timeout,
5259         OUT USHORT *Alg);
5260
5261 BOOLEAN MlmeStartReqSanity(
5262         IN  PRTMP_ADAPTER   pAd,
5263         IN  VOID *Msg,
5264         IN  ULONG MsgLen,
5265         OUT CHAR Ssid[],
5266         OUT UCHAR *Ssidlen);
5267
5268 BOOLEAN PeerAuthSanity(
5269         IN  PRTMP_ADAPTER   pAd,
5270         IN  VOID *Msg,
5271         IN  ULONG MsgLen,
5272         OUT PUCHAR pAddr,
5273         OUT USHORT *Alg,
5274         OUT USHORT *Seq,
5275         OUT USHORT *Status,
5276         OUT CHAR ChlgText[]);
5277
5278 BOOLEAN PeerAssocRspSanity(
5279         IN  PRTMP_ADAPTER   pAd,
5280     IN VOID *pMsg,
5281         IN  ULONG MsgLen,
5282         OUT PUCHAR pAddr2,
5283         OUT USHORT *pCapabilityInfo,
5284         OUT USHORT *pStatus,
5285         OUT USHORT *pAid,
5286         OUT UCHAR SupRate[],
5287         OUT UCHAR *pSupRateLen,
5288         OUT UCHAR ExtRate[],
5289         OUT UCHAR *pExtRateLen,
5290     OUT HT_CAPABILITY_IE                *pHtCapability,
5291     OUT ADD_HT_INFO_IE          *pAddHtInfo,    // AP might use this additional ht info IE
5292     OUT UCHAR                   *pHtCapabilityLen,
5293     OUT UCHAR                   *pAddHtInfoLen,
5294     OUT UCHAR                   *pNewExtChannelOffset,
5295         OUT PEDCA_PARM pEdcaParm,
5296         OUT UCHAR *pCkipFlag);
5297
5298 BOOLEAN PeerDisassocSanity(
5299         IN  PRTMP_ADAPTER   pAd,
5300         IN  VOID *Msg,
5301         IN  ULONG MsgLen,
5302         OUT PUCHAR pAddr2,
5303         OUT USHORT *Reason);
5304
5305 BOOLEAN PeerWpaMessageSanity(
5306     IN  PRTMP_ADAPTER           pAd,
5307     IN  PEAPOL_PACKET           pMsg,
5308     IN  ULONG                           MsgLen,
5309     IN  UCHAR                           MsgType,
5310     IN  MAC_TABLE_ENTRY         *pEntry);
5311
5312 BOOLEAN PeerDeauthSanity(
5313         IN  PRTMP_ADAPTER   pAd,
5314         IN  VOID *Msg,
5315         IN  ULONG MsgLen,
5316         OUT PUCHAR pAddr2,
5317         OUT USHORT *Reason);
5318
5319 BOOLEAN PeerProbeReqSanity(
5320         IN  PRTMP_ADAPTER   pAd,
5321         IN  VOID *Msg,
5322         IN  ULONG MsgLen,
5323         OUT PUCHAR pAddr2,
5324         OUT CHAR Ssid[],
5325         OUT UCHAR *pSsidLen);
5326
5327 BOOLEAN GetTimBit(
5328         IN  CHAR *Ptr,
5329         IN  USHORT Aid,
5330         OUT UCHAR *TimLen,
5331         OUT UCHAR *BcastFlag,
5332         OUT UCHAR *DtimCount,
5333         OUT UCHAR *DtimPeriod,
5334         OUT UCHAR *MessageToMe);
5335
5336 UCHAR ChannelSanity(
5337         IN PRTMP_ADAPTER pAd,
5338         IN UCHAR channel);
5339
5340 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5341         IN PBSS_ENTRY pBss);
5342
5343 BOOLEAN MlmeDelBAReqSanity(
5344     IN PRTMP_ADAPTER pAd,
5345     IN VOID *Msg,
5346     IN ULONG MsgLen);
5347
5348 BOOLEAN MlmeAddBAReqSanity(
5349     IN PRTMP_ADAPTER pAd,
5350     IN VOID *Msg,
5351     IN ULONG MsgLen,
5352     OUT PUCHAR pAddr2);
5353
5354 ULONG MakeOutgoingFrame(
5355         OUT CHAR *Buffer,
5356         OUT ULONG *Length, ...);
5357
5358 VOID  LfsrInit(
5359         IN  PRTMP_ADAPTER   pAd,
5360         IN  ULONG Seed);
5361
5362 UCHAR RandomByte(
5363         IN  PRTMP_ADAPTER   pAd);
5364
5365 VOID AsicUpdateAutoFallBackTable(
5366         IN      PRTMP_ADAPTER   pAd,
5367         IN      PUCHAR                  pTxRate);
5368
5369 VOID  MlmePeriodicExec(
5370         IN PVOID SystemSpecific1,
5371         IN PVOID FunctionContext,
5372         IN PVOID SystemSpecific2,
5373         IN PVOID SystemSpecific3);
5374
5375 VOID LinkDownExec(
5376         IN PVOID SystemSpecific1,
5377         IN PVOID FunctionContext,
5378         IN PVOID SystemSpecific2,
5379         IN PVOID SystemSpecific3);
5380
5381 VOID LinkUpExec(
5382         IN PVOID SystemSpecific1,
5383         IN PVOID FunctionContext,
5384         IN PVOID SystemSpecific2,
5385         IN PVOID SystemSpecific3);
5386
5387 VOID STAMlmePeriodicExec(
5388         PRTMP_ADAPTER pAd);
5389
5390 VOID MlmeAutoScan(
5391         IN PRTMP_ADAPTER pAd);
5392
5393 VOID MlmeAutoReconnectLastSSID(
5394         IN PRTMP_ADAPTER pAd);
5395
5396 BOOLEAN MlmeValidateSSID(
5397         IN PUCHAR pSsid,
5398         IN UCHAR  SsidLen);
5399
5400 VOID MlmeCheckForRoaming(
5401         IN PRTMP_ADAPTER pAd,
5402         IN ULONG    Now32);
5403
5404 VOID MlmeCheckForFastRoaming(
5405         IN  PRTMP_ADAPTER   pAd,
5406         IN  ULONG           Now);
5407
5408 VOID MlmeDynamicTxRateSwitching(
5409         IN PRTMP_ADAPTER pAd);
5410
5411 VOID MlmeSetTxRate(
5412         IN PRTMP_ADAPTER                pAd,
5413         IN PMAC_TABLE_ENTRY             pEntry,
5414         IN PRTMP_TX_RATE_SWITCH pTxRate);
5415
5416 VOID MlmeSelectTxRateTable(
5417         IN PRTMP_ADAPTER                pAd,
5418         IN PMAC_TABLE_ENTRY             pEntry,
5419         IN PUCHAR                               *ppTable,
5420         IN PUCHAR                               pTableSize,
5421         IN PUCHAR                               pInitTxRateIdx);
5422
5423 VOID MlmeCalculateChannelQuality(
5424         IN PRTMP_ADAPTER pAd,
5425         IN ULONG Now);
5426
5427 VOID MlmeCheckPsmChange(
5428         IN PRTMP_ADAPTER pAd,
5429         IN ULONG    Now32);
5430
5431 VOID MlmeSetPsmBit(
5432         IN PRTMP_ADAPTER pAd,
5433         IN USHORT psm);
5434
5435 VOID MlmeSetTxPreamble(
5436         IN PRTMP_ADAPTER pAd,
5437         IN USHORT TxPreamble);
5438
5439 VOID UpdateBasicRateBitmap(
5440         IN      PRTMP_ADAPTER   pAd);
5441
5442 VOID MlmeUpdateTxRates(
5443         IN PRTMP_ADAPTER        pAd,
5444         IN      BOOLEAN                 bLinkUp,
5445         IN      UCHAR                   apidx);
5446
5447 #ifdef DOT11_N_SUPPORT
5448 VOID MlmeUpdateHtTxRates(
5449         IN PRTMP_ADAPTER                pAd,
5450         IN      UCHAR                           apidx);
5451 #endif // DOT11_N_SUPPORT //
5452
5453 VOID    RTMPCheckRates(
5454         IN      PRTMP_ADAPTER   pAd,
5455         IN OUT  UCHAR           SupRate[],
5456         IN OUT  UCHAR           *SupRateLen);
5457
5458 #ifdef CONFIG_STA_SUPPORT
5459 BOOLEAN RTMPCheckChannel(
5460         IN PRTMP_ADAPTER pAd,
5461         IN UCHAR                CentralChannel,
5462         IN UCHAR                Channel);
5463 #endif // CONFIG_STA_SUPPORT //
5464
5465 BOOLEAN         RTMPCheckHt(
5466         IN              PRTMP_ADAPTER   pAd,
5467         IN              UCHAR   Wcid,
5468         IN OUT  HT_CAPABILITY_IE                        *pHtCapability,
5469         IN OUT  ADD_HT_INFO_IE                  *pAddHtInfo);
5470
5471 VOID StaQuickResponeForRateUpExec(
5472         IN PVOID SystemSpecific1,
5473         IN PVOID FunctionContext,
5474         IN PVOID SystemSpecific2,
5475         IN PVOID SystemSpecific3);
5476
5477 VOID AsicBbpTuning1(
5478         IN PRTMP_ADAPTER pAd);
5479
5480 VOID AsicBbpTuning2(
5481         IN PRTMP_ADAPTER pAd);
5482
5483 VOID RTMPUpdateMlmeRate(
5484         IN PRTMP_ADAPTER        pAd);
5485
5486 CHAR RTMPMaxRssi(
5487         IN PRTMP_ADAPTER        pAd,
5488         IN CHAR                         Rssi0,
5489         IN CHAR                         Rssi1,
5490         IN CHAR                         Rssi2);
5491
5492 VOID AsicSetRxAnt(
5493         IN PRTMP_ADAPTER        pAd,
5494         IN UCHAR                        Ant);
5495
5496 VOID AsicEvaluateRxAnt(
5497         IN PRTMP_ADAPTER        pAd);
5498
5499 VOID AsicRxAntEvalTimeout(
5500         IN PVOID SystemSpecific1,
5501         IN PVOID FunctionContext,
5502         IN PVOID SystemSpecific2,
5503         IN PVOID SystemSpecific3);
5504
5505 VOID APSDPeriodicExec(
5506         IN PVOID SystemSpecific1,
5507         IN PVOID FunctionContext,
5508         IN PVOID SystemSpecific2,
5509         IN PVOID SystemSpecific3);
5510
5511 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5512         IN PRTMP_ADAPTER    pAd,
5513         IN PMAC_TABLE_ENTRY     pEntry);
5514
5515 UCHAR RTMPStaFixedTxMode(
5516         IN PRTMP_ADAPTER    pAd,
5517         IN PMAC_TABLE_ENTRY     pEntry);
5518
5519 VOID RTMPUpdateLegacyTxSetting(
5520                 UCHAR                           fixed_tx_mode,
5521                 PMAC_TABLE_ENTRY        pEntry);
5522
5523 BOOLEAN RTMPAutoRateSwitchCheck(
5524         IN PRTMP_ADAPTER    pAd);
5525
5526 NDIS_STATUS MlmeInit(
5527         IN  PRTMP_ADAPTER   pAd);
5528
5529 VOID MlmeHandler(
5530         IN  PRTMP_ADAPTER   pAd);
5531
5532 VOID MlmeHalt(
5533         IN  PRTMP_ADAPTER   pAd);
5534
5535 VOID MlmeResetRalinkCounters(
5536         IN  PRTMP_ADAPTER   pAd);
5537
5538 VOID BuildChannelList(
5539         IN PRTMP_ADAPTER pAd);
5540
5541 UCHAR FirstChannel(
5542         IN  PRTMP_ADAPTER   pAd);
5543
5544 UCHAR NextChannel(
5545         IN  PRTMP_ADAPTER   pAd,
5546         IN  UCHAR channel);
5547
5548 VOID ChangeToCellPowerLimit(
5549         IN PRTMP_ADAPTER pAd,
5550         IN UCHAR         AironetCellPowerLimit);
5551
5552 VOID RaiseClock(
5553         IN  PRTMP_ADAPTER   pAd,
5554         IN  UINT32 *x);
5555
5556 VOID LowerClock(
5557         IN  PRTMP_ADAPTER   pAd,
5558         IN  UINT32 *x);
5559
5560 USHORT ShiftInBits(
5561         IN  PRTMP_ADAPTER   pAd);
5562
5563 VOID ShiftOutBits(
5564         IN  PRTMP_ADAPTER   pAd,
5565         IN  USHORT data,
5566         IN  USHORT count);
5567
5568 VOID EEpromCleanup(
5569         IN  PRTMP_ADAPTER   pAd);
5570
5571 VOID EWDS(
5572         IN  PRTMP_ADAPTER   pAd);
5573
5574 VOID EWEN(
5575         IN  PRTMP_ADAPTER   pAd);
5576
5577 USHORT RTMP_EEPROM_READ16(
5578         IN  PRTMP_ADAPTER   pAd,
5579         IN  USHORT Offset);
5580
5581 VOID RTMP_EEPROM_WRITE16(
5582         IN  PRTMP_ADAPTER   pAd,
5583         IN  USHORT Offset,
5584         IN  USHORT Data);
5585
5586 //
5587 // Prototypes of function definition in rtmp_tkip.c
5588 //
5589 VOID    RTMPInitTkipEngine(
5590         IN  PRTMP_ADAPTER   pAd,
5591         IN  PUCHAR          pTKey,
5592         IN  UCHAR           KeyId,
5593         IN  PUCHAR          pTA,
5594         IN  PUCHAR          pMICKey,
5595         IN  PUCHAR          pTSC,
5596         OUT PULONG          pIV16,
5597         OUT PULONG          pIV32);
5598
5599 VOID    RTMPInitMICEngine(
5600         IN  PRTMP_ADAPTER   pAd,
5601         IN  PUCHAR          pKey,
5602         IN  PUCHAR          pDA,
5603         IN  PUCHAR          pSA,
5604         IN  UCHAR           UserPriority,
5605         IN  PUCHAR          pMICKey);
5606
5607 BOOLEAN RTMPTkipCompareMICValue(
5608         IN  PRTMP_ADAPTER   pAd,
5609         IN  PUCHAR          pSrc,
5610         IN  PUCHAR          pDA,
5611         IN  PUCHAR          pSA,
5612         IN  PUCHAR          pMICKey,
5613         IN      UCHAR                   UserPriority,
5614         IN  UINT            Len);
5615
5616 VOID    RTMPCalculateMICValue(
5617         IN  PRTMP_ADAPTER   pAd,
5618         IN  PNDIS_PACKET    pPacket,
5619         IN  PUCHAR          pEncap,
5620         IN  PCIPHER_KEY     pKey,
5621         IN      UCHAR                   apidx);
5622
5623 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5624         IN  PRTMP_ADAPTER   pAd,
5625         IN  PUCHAR          pLLC,
5626         IN  PUCHAR          pSrc,
5627         IN  PUCHAR          pDA,
5628         IN  PUCHAR          pSA,
5629         IN  PUCHAR          pMICKey,
5630         IN  UINT            Len);
5631
5632 VOID    RTMPTkipAppendByte(
5633         IN  PTKIP_KEY_INFO  pTkip,
5634         IN  UCHAR           uChar);
5635
5636 VOID    RTMPTkipAppend(
5637         IN  PTKIP_KEY_INFO  pTkip,
5638         IN  PUCHAR          pSrc,
5639         IN  UINT            nBytes);
5640
5641 VOID    RTMPTkipGetMIC(
5642         IN  PTKIP_KEY_INFO  pTkip);
5643
5644 BOOLEAN RTMPSoftDecryptTKIP(
5645         IN PRTMP_ADAPTER pAd,
5646         IN PUCHAR       pData,
5647         IN ULONG        DataByteCnt,
5648         IN UCHAR    UserPriority,
5649         IN PCIPHER_KEY  pWpaKey);
5650
5651 BOOLEAN RTMPSoftDecryptAES(
5652         IN PRTMP_ADAPTER pAd,
5653         IN PUCHAR       pData,
5654         IN ULONG        DataByteCnt,
5655         IN PCIPHER_KEY  pWpaKey);
5656
5657 //
5658 // Prototypes of function definition in cmm_info.c
5659 //
5660 NDIS_STATUS RTMPWPARemoveKeyProc(
5661         IN  PRTMP_ADAPTER   pAd,
5662         IN  PVOID           pBuf);
5663
5664 VOID    RTMPWPARemoveAllKeys(
5665         IN  PRTMP_ADAPTER   pAd);
5666
5667 BOOLEAN RTMPCheckStrPrintAble(
5668     IN  CHAR *pInPutStr,
5669     IN  UCHAR strLen);
5670
5671 VOID    RTMPSetPhyMode(
5672         IN  PRTMP_ADAPTER   pAd,
5673         IN  ULONG phymode);
5674
5675 VOID    RTMPUpdateHTIE(
5676         IN      RT_HT_CAPABILITY        *pRtHt,
5677         IN              UCHAR                           *pMcsSet,
5678         OUT             HT_CAPABILITY_IE *pHtCapability,
5679         OUT             ADD_HT_INFO_IE          *pAddHtInfo);
5680
5681 VOID    RTMPAddWcidAttributeEntry(
5682         IN      PRTMP_ADAPTER   pAd,
5683         IN      UCHAR                   BssIdx,
5684         IN      UCHAR                   KeyIdx,
5685         IN      UCHAR                   CipherAlg,
5686         IN      MAC_TABLE_ENTRY *pEntry);
5687
5688 CHAR *GetEncryptType(
5689         CHAR enc);
5690
5691 CHAR *GetAuthMode(
5692         CHAR auth);
5693
5694 VOID RTMPIoctlGetSiteSurvey(
5695         IN      PRTMP_ADAPTER   pAdapter,
5696         IN      struct iwreq    *wrq);
5697
5698 VOID RTMPIoctlGetMacTable(
5699         IN PRTMP_ADAPTER pAd,
5700         IN struct iwreq *wrq);
5701
5702 VOID RTMPIndicateWPA2Status(
5703         IN  PRTMP_ADAPTER  pAdapter);
5704
5705 VOID    RTMPOPModeSwitching(
5706         IN      PRTMP_ADAPTER   pAd);
5707
5708 #ifdef CONFIG_STA_SUPPORT
5709 VOID    RTMPAddBSSIDCipher(
5710     IN  PRTMP_ADAPTER   pAd,
5711         IN      UCHAR   Aid,
5712     IN  PNDIS_802_11_KEY    pKey,
5713     IN  UCHAR   CipherAlg);
5714 #endif // CONFIG_STA_SUPPORT //
5715
5716 #ifdef DOT11_N_SUPPORT
5717 VOID    RTMPSetHT(
5718         IN      PRTMP_ADAPTER   pAd,
5719         IN      OID_SET_HT_PHYMODE *pHTPhyMode);
5720
5721 VOID    RTMPSetIndividualHT(
5722         IN      PRTMP_ADAPTER           pAd,
5723         IN      UCHAR                           apidx);
5724 #endif // DOT11_N_SUPPORT //
5725
5726 VOID RTMPSendWirelessEvent(
5727         IN      PRTMP_ADAPTER   pAd,
5728         IN      USHORT                  Event_flag,
5729         IN      PUCHAR                  pAddr,
5730         IN  UCHAR                       BssIdx,
5731         IN      CHAR                    Rssi);
5732
5733 VOID    NICUpdateCntlCounters(
5734         IN      PRTMP_ADAPTER   pAd,
5735         IN      PHEADER_802_11  pHeader,
5736         IN    UCHAR                     SubType,
5737         IN      PRXWI_STRUC     pRxWI);
5738 //
5739 // prototype in wpa.c
5740 //
5741 BOOLEAN WpaMsgTypeSubst(
5742         IN  UCHAR   EAPType,
5743         OUT INT         *MsgType);
5744
5745 VOID WpaPskStateMachineInit(
5746         IN  PRTMP_ADAPTER       pAd,
5747         IN  STATE_MACHINE       *S,
5748         OUT STATE_MACHINE_FUNC Trans[]);
5749
5750 VOID WpaEAPOLKeyAction(
5751         IN  PRTMP_ADAPTER   pAd,
5752         IN  MLME_QUEUE_ELEM *Elem);
5753
5754 VOID    WpaPairMsg1Action(
5755         IN  PRTMP_ADAPTER   pAd,
5756         IN  MLME_QUEUE_ELEM *Elem);
5757
5758 VOID    WpaPairMsg3Action(
5759         IN  PRTMP_ADAPTER   pAd,
5760         IN  MLME_QUEUE_ELEM *Elem);
5761
5762 VOID    WpaGroupMsg1Action(
5763         IN  PRTMP_ADAPTER   pAd,
5764         IN  MLME_QUEUE_ELEM *Elem);
5765
5766 VOID    WpaMacHeaderInit(
5767         IN      PRTMP_ADAPTER   pAd,
5768         IN OUT  PHEADER_802_11  pHdr80211,
5769         IN      UCHAR           wep,
5770         IN      PUCHAR          pAddr1);
5771
5772 VOID    Wpa2PairMsg1Action(
5773     IN  PRTMP_ADAPTER   pAd,
5774     IN  MLME_QUEUE_ELEM *Elem);
5775
5776 VOID    Wpa2PairMsg3Action(
5777     IN  PRTMP_ADAPTER   pAd,
5778     IN  MLME_QUEUE_ELEM *Elem);
5779
5780 BOOLEAN ParseKeyData(
5781     IN  PRTMP_ADAPTER   pAd,
5782     IN  PUCHAR          pKeyData,
5783     IN  UCHAR           KeyDataLen,
5784         IN      UCHAR                   bPairewise);
5785
5786 VOID    RTMPToWirelessSta(
5787         IN  PRTMP_ADAPTER   pAd,
5788         IN  PUCHAR          pHeader802_3,
5789     IN  UINT            HdrLen,
5790         IN  PUCHAR          pData,
5791     IN  UINT            DataLen,
5792     IN  BOOLEAN                 is4wayFrame);
5793
5794 VOID    HMAC_SHA1(
5795         IN  UCHAR   *text,
5796         IN  UINT    text_len,
5797         IN  UCHAR   *key,
5798         IN  UINT    key_len,
5799         IN  UCHAR   *digest);
5800
5801 VOID    PRF(
5802         IN  UCHAR   *key,
5803         IN  INT     key_len,
5804         IN  UCHAR   *prefix,
5805         IN  INT     prefix_len,
5806         IN  UCHAR   *data,
5807         IN  INT     data_len,
5808         OUT UCHAR   *output,
5809         IN  INT     len);
5810
5811 VOID    CCKMPRF(
5812         IN  UCHAR   *key,
5813         IN  INT     key_len,
5814         IN  UCHAR   *data,
5815         IN  INT     data_len,
5816         OUT UCHAR   *output,
5817         IN  INT     len);
5818
5819 VOID WpaCountPTK(
5820         IN  PRTMP_ADAPTER   pAd,
5821         IN  UCHAR   *PMK,
5822         IN  UCHAR   *ANonce,
5823         IN  UCHAR   *AA,
5824         IN  UCHAR   *SNonce,
5825         IN  UCHAR   *SA,
5826         OUT UCHAR   *output,
5827         IN  UINT    len);
5828
5829 VOID    GenRandom(
5830         IN  PRTMP_ADAPTER   pAd,
5831         IN      UCHAR                   *macAddr,
5832         OUT     UCHAR                   *random);
5833
5834 //
5835 // prototype in aironet.c
5836 //
5837 VOID    AironetStateMachineInit(
5838         IN  PRTMP_ADAPTER       pAd,
5839         IN  STATE_MACHINE       *S,
5840         OUT STATE_MACHINE_FUNC  Trans[]);
5841
5842 VOID    AironetMsgAction(
5843         IN  PRTMP_ADAPTER   pAd,
5844         IN  MLME_QUEUE_ELEM *Elem);
5845
5846 VOID    AironetRequestAction(
5847         IN  PRTMP_ADAPTER   pAd,
5848         IN  MLME_QUEUE_ELEM *Elem);
5849
5850 VOID    ChannelLoadRequestAction(
5851         IN  PRTMP_ADAPTER   pAd,
5852         IN  UCHAR           Index);
5853
5854 VOID    NoiseHistRequestAction(
5855         IN  PRTMP_ADAPTER   pAd,
5856         IN  UCHAR           Index);
5857
5858 VOID    BeaconRequestAction(
5859         IN  PRTMP_ADAPTER   pAd,
5860         IN  UCHAR           Index);
5861
5862 VOID    AironetReportAction(
5863         IN  PRTMP_ADAPTER   pAd,
5864         IN  MLME_QUEUE_ELEM *Elem);
5865
5866 VOID    ChannelLoadReportAction(
5867         IN  PRTMP_ADAPTER   pAd,
5868         IN  UCHAR           Index);
5869
5870 VOID    NoiseHistReportAction(
5871         IN  PRTMP_ADAPTER   pAd,
5872         IN  UCHAR           Index);
5873
5874 VOID    AironetFinalReportAction(
5875         IN  PRTMP_ADAPTER   pAd);
5876
5877 VOID    BeaconReportAction(
5878         IN  PRTMP_ADAPTER   pAd,
5879         IN  UCHAR           Index);
5880
5881 VOID    AironetAddBeaconReport(
5882         IN  PRTMP_ADAPTER       pAd,
5883         IN  ULONG               Index,
5884         IN  PMLME_QUEUE_ELEM    pElem);
5885
5886 VOID    AironetCreateBeaconReportFromBssTable(
5887         IN  PRTMP_ADAPTER       pAd);
5888
5889 VOID    DBGPRINT_TX_RING(
5890         IN PRTMP_ADAPTER  pAd,
5891         IN UCHAR          QueIdx);
5892
5893 VOID DBGPRINT_RX_RING(
5894         IN PRTMP_ADAPTER  pAd);
5895
5896 CHAR    ConvertToRssi(
5897         IN PRTMP_ADAPTER  pAd,
5898         IN CHAR                         Rssi,
5899         IN UCHAR    RssiNumber);
5900
5901
5902 #ifdef DOT11N_DRAFT3
5903 VOID BuildEffectedChannelList(
5904         IN PRTMP_ADAPTER pAd);
5905 #endif // DOT11N_DRAFT3 //
5906
5907
5908 VOID APAsicEvaluateRxAnt(
5909         IN PRTMP_ADAPTER        pAd);
5910
5911
5912 VOID APAsicRxAntEvalTimeout(
5913         IN PRTMP_ADAPTER        pAd);
5914
5915 //
5916 // function prototype in cmm_wpa.c
5917 //
5918 BOOLEAN RTMPCheckWPAframe(
5919         IN PRTMP_ADAPTER pAd,
5920         IN PMAC_TABLE_ENTRY     pEntry,
5921         IN PUCHAR                       pData,
5922         IN ULONG                        DataByteCount,
5923         IN UCHAR                        FromWhichBSSID);
5924
5925 VOID AES_GTK_KEY_UNWRAP(
5926         IN  UCHAR   *key,
5927         OUT UCHAR   *plaintext,
5928         IN      UCHAR   c_len,
5929         IN  UCHAR   *ciphertext);
5930
5931 BOOLEAN RTMPCheckRSNIE(
5932         IN  PRTMP_ADAPTER   pAd,
5933         IN  PUCHAR          pData,
5934         IN  UCHAR           DataLen,
5935         IN  MAC_TABLE_ENTRY *pEntry,
5936         OUT     UCHAR                   *Offset);
5937
5938 BOOLEAN RTMPParseEapolKeyData(
5939         IN  PRTMP_ADAPTER   pAd,
5940         IN  PUCHAR          pKeyData,
5941         IN  UCHAR           KeyDataLen,
5942         IN      UCHAR                   GroupKeyIndex,
5943         IN      UCHAR                   MsgType,
5944         IN      BOOLEAN                 bWPA2,
5945         IN  MAC_TABLE_ENTRY *pEntry);
5946
5947 VOID    ConstructEapolMsg(
5948         IN      PRTMP_ADAPTER           pAd,
5949     IN  UCHAR                           PeerAuthMode,
5950     IN  UCHAR                           PeerWepStatus,
5951     IN  UCHAR                           MyGroupKeyWepStatus,
5952     IN  UCHAR                           MsgType,
5953     IN  UCHAR                           DefaultKeyIdx,
5954     IN  UCHAR                           *ReplayCounter,
5955         IN      UCHAR                           *KeyNonce,
5956         IN      UCHAR                           *TxRSC,
5957         IN      UCHAR                           *PTK,
5958         IN      UCHAR                           *GTK,
5959         IN      UCHAR                           *RSNIE,
5960         IN      UCHAR                           RSNIE_Len,
5961     OUT PEAPOL_PACKET       pMsg);
5962
5963 VOID    CalculateMIC(
5964         IN      PRTMP_ADAPTER   pAd,
5965         IN      UCHAR                   PeerWepStatus,
5966         IN      UCHAR                   *PTK,
5967         OUT PEAPOL_PACKET   pMsg);
5968
5969 NDIS_STATUS     RTMPSoftDecryptBroadCastData(
5970         IN      PRTMP_ADAPTER                                   pAd,
5971         IN      RX_BLK                                                  *pRxBlk,
5972         IN  NDIS_802_11_ENCRYPTION_STATUS       GroupCipher,
5973         IN  PCIPHER_KEY                                         pShard_key);
5974
5975 VOID    ConstructEapolKeyData(
5976         IN      PRTMP_ADAPTER   pAd,
5977         IN      UCHAR                   PeerAuthMode,
5978         IN      UCHAR                   PeerWepStatus,
5979         IN      UCHAR                   GroupKeyWepStatus,
5980         IN      UCHAR                   MsgType,
5981         IN      UCHAR                   DefaultKeyIdx,
5982         IN      BOOLEAN                 bWPA2Capable,
5983         IN      UCHAR                   *PTK,
5984         IN      UCHAR                   *GTK,
5985         IN      UCHAR                   *RSNIE,
5986         IN      UCHAR                   RSNIE_LEN,
5987         OUT PEAPOL_PACKET   pMsg);
5988
5989 VOID RTMPMakeRSNIE(
5990         IN  PRTMP_ADAPTER   pAd,
5991         IN  UINT            AuthMode,
5992         IN  UINT            WepStatus,
5993         IN      UCHAR                   apidx);
5994
5995 //
5996 // function prototype in ap_wpa.c
5997 //
5998
5999 BOOLEAN APWpaMsgTypeSubst(
6000         IN UCHAR    EAPType,
6001         OUT INT *MsgType) ;
6002
6003 MAC_TABLE_ENTRY *PACInquiry(
6004         IN  PRTMP_ADAPTER   pAd,
6005         IN  ULONG           Wcid);
6006
6007 BOOLEAN RTMPCheckMcast(
6008         IN PRTMP_ADAPTER pAd,
6009         IN PEID_STRUCT      eid_ptr,
6010         IN MAC_TABLE_ENTRY  *pEntry);
6011
6012 BOOLEAN RTMPCheckUcast(
6013         IN PRTMP_ADAPTER pAd,
6014         IN PEID_STRUCT      eid_ptr,
6015         IN MAC_TABLE_ENTRY  *pEntry);
6016
6017 BOOLEAN RTMPCheckAUTH(
6018         IN PRTMP_ADAPTER pAd,
6019         IN PEID_STRUCT      eid_ptr,
6020         IN MAC_TABLE_ENTRY  *pEntry);
6021
6022 VOID WPAStart4WayHS(
6023         IN  PRTMP_ADAPTER   pAd,
6024         IN  MAC_TABLE_ENTRY *pEntry,
6025         IN      ULONG                   TimeInterval);
6026
6027 VOID WPAStart2WayGroupHS(
6028         IN  PRTMP_ADAPTER   pAd,
6029         IN  MAC_TABLE_ENTRY *pEntry);
6030
6031 VOID APWpaEAPPacketAction(
6032         IN PRTMP_ADAPTER pAd,
6033         IN MLME_QUEUE_ELEM *Elem);
6034
6035 VOID APWpaEAPOLStartAction(
6036         IN PRTMP_ADAPTER pAd,
6037         IN MLME_QUEUE_ELEM *Elem);
6038
6039 VOID APWpaEAPOLLogoffAction(
6040         IN PRTMP_ADAPTER pAd,
6041         IN MLME_QUEUE_ELEM *Elem);
6042
6043 VOID APWpaEAPOLKeyAction(
6044         IN PRTMP_ADAPTER pAd,
6045         IN MLME_QUEUE_ELEM *Elem);
6046
6047 VOID APWpaEAPOLASFAlertAction(
6048         IN  PRTMP_ADAPTER    pAd,
6049         IN  MLME_QUEUE_ELEM  *Elem);
6050
6051 VOID HandleCounterMeasure(
6052         IN PRTMP_ADAPTER pAd,
6053         IN MAC_TABLE_ENTRY  *pEntry);
6054
6055 VOID PeerPairMsg2Action(
6056         IN PRTMP_ADAPTER pAd,
6057         IN MAC_TABLE_ENTRY  *pEntry,
6058         IN MLME_QUEUE_ELEM *Elem);
6059
6060 VOID PeerPairMsg4Action(
6061         IN PRTMP_ADAPTER pAd,
6062         IN MAC_TABLE_ENTRY  *pEntry,
6063         IN MLME_QUEUE_ELEM *Elem);
6064
6065 VOID CMTimerExec(
6066         IN PVOID SystemSpecific1,
6067         IN PVOID FunctionContext,
6068         IN PVOID SystemSpecific2,
6069         IN PVOID SystemSpecific3);
6070
6071 VOID WPARetryExec(
6072         IN PVOID SystemSpecific1,
6073         IN PVOID FunctionContext,
6074         IN PVOID SystemSpecific2,
6075         IN PVOID SystemSpecific3);
6076
6077 VOID EnqueueStartForPSKExec(
6078     IN PVOID SystemSpecific1,
6079     IN PVOID FunctionContext,
6080     IN PVOID SystemSpecific2,
6081     IN PVOID SystemSpecific3);
6082
6083 VOID RTMPHandleSTAKey(
6084     IN PRTMP_ADAPTER    pAdapter,
6085     IN MAC_TABLE_ENTRY  *pEntry,
6086     IN MLME_QUEUE_ELEM  *Elem);
6087
6088 VOID PeerGroupMsg2Action(
6089         IN  PRTMP_ADAPTER    pAd,
6090         IN  PMAC_TABLE_ENTRY pEntry,
6091         IN  VOID             *Msg,
6092         IN  UINT             MsgLen);
6093
6094 VOID PairDisAssocAction(
6095         IN  PRTMP_ADAPTER    pAd,
6096         IN  PMAC_TABLE_ENTRY pEntry,
6097         IN  USHORT           Reason);
6098
6099 VOID MlmeDeAuthAction(
6100         IN  PRTMP_ADAPTER    pAd,
6101         IN  PMAC_TABLE_ENTRY pEntry,
6102         IN  USHORT           Reason);
6103
6104 VOID GREKEYPeriodicExec(
6105         IN  PVOID   SystemSpecific1,
6106         IN  PVOID   FunctionContext,
6107         IN  PVOID   SystemSpecific2,
6108         IN  PVOID   SystemSpecific3);
6109
6110 VOID CountGTK(
6111         IN  UCHAR   *PMK,
6112         IN  UCHAR   *GNonce,
6113         IN  UCHAR   *AA,
6114         OUT UCHAR   *output,
6115         IN  UINT    len);
6116
6117 VOID    GetSmall(
6118         IN  PVOID   pSrc1,
6119         IN  PVOID   pSrc2,
6120         OUT PUCHAR  out,
6121         IN  ULONG   Length);
6122
6123 VOID    GetLarge(
6124         IN  PVOID   pSrc1,
6125         IN  PVOID   pSrc2,
6126         OUT PUCHAR  out,
6127         IN  ULONG   Length);
6128
6129 VOID APGenRandom(
6130         IN PRTMP_ADAPTER pAd,
6131         OUT UCHAR       *random);
6132
6133 VOID AES_GTK_KEY_WRAP(
6134         IN UCHAR *key,
6135         IN UCHAR *plaintext,
6136         IN UCHAR p_len,
6137         OUT UCHAR *ciphertext);
6138
6139 VOID    WpaSend(
6140     IN  PRTMP_ADAPTER   pAdapter,
6141     IN  PUCHAR          pPacket,
6142     IN  ULONG           Len);
6143
6144 VOID    APToWirelessSta(
6145         IN  PRTMP_ADAPTER   pAd,
6146         IN  MAC_TABLE_ENTRY *pEntry,
6147         IN  PUCHAR          pHeader802_3,
6148         IN  UINT            HdrLen,
6149         IN  PUCHAR          pData,
6150         IN  UINT            DataLen,
6151     IN  BOOLEAN                 bClearFrame);
6152
6153 VOID RTMPAddPMKIDCache(
6154         IN  PRTMP_ADAPTER               pAd,
6155         IN      INT                                             apidx,
6156         IN      PUCHAR                          pAddr,
6157         IN      UCHAR                                   *PMKID,
6158         IN      UCHAR                                   *PMK);
6159
6160 INT RTMPSearchPMKIDCache(
6161         IN  PRTMP_ADAPTER   pAd,
6162         IN      INT                             apidx,
6163         IN      PUCHAR          pAddr);
6164
6165 VOID RTMPDeletePMKIDCache(
6166         IN  PRTMP_ADAPTER   pAd,
6167         IN      INT                             apidx,
6168         IN  INT                         idx);
6169
6170 VOID RTMPMaintainPMKIDCache(
6171         IN  PRTMP_ADAPTER   pAd);
6172
6173 VOID    RTMPSendTriggerFrame(
6174         IN      PRTMP_ADAPTER   pAd,
6175         IN      PVOID                   pBuffer,
6176         IN      ULONG                   Length,
6177         IN  UCHAR           TxRate,
6178         IN      BOOLEAN                 bQosNull);
6179
6180 #ifdef RT30xx
6181 VOID RTMPFilterCalibration(
6182         IN PRTMP_ADAPTER pAd);
6183 #endif // RT30xx //
6184
6185
6186 //typedef void (*TIMER_FUNCTION)(unsigned long);
6187
6188
6189 /* timeout -- ms */
6190 VOID RTMP_SetPeriodicTimer(
6191         IN      NDIS_MINIPORT_TIMER *pTimer,
6192         IN      unsigned long timeout);
6193
6194 VOID RTMP_OS_Init_Timer(
6195         IN      PRTMP_ADAPTER pAd,
6196         IN      NDIS_MINIPORT_TIMER *pTimer,
6197         IN      TIMER_FUNCTION function,
6198         IN      PVOID data);
6199
6200 VOID RTMP_OS_Add_Timer(
6201         IN      NDIS_MINIPORT_TIMER     *pTimer,
6202         IN      unsigned long timeout);
6203
6204 VOID RTMP_OS_Mod_Timer(
6205         IN      NDIS_MINIPORT_TIMER     *pTimer,
6206         IN      unsigned long timeout);
6207
6208
6209 VOID RTMP_OS_Del_Timer(
6210         IN      NDIS_MINIPORT_TIMER     *pTimer,
6211         OUT     BOOLEAN                          *pCancelled);
6212
6213
6214 VOID RTMP_OS_Release_Packet(
6215         IN      PRTMP_ADAPTER pAd,
6216         IN      PQUEUE_ENTRY  pEntry);
6217
6218 VOID RTMPusecDelay(
6219         IN      ULONG   usec);
6220
6221 NDIS_STATUS os_alloc_mem(
6222         IN      PRTMP_ADAPTER pAd,
6223         OUT     PUCHAR *mem,
6224         IN      ULONG  size);
6225
6226 NDIS_STATUS os_free_mem(
6227         IN      PRTMP_ADAPTER pAd,
6228         IN      PUCHAR mem);
6229
6230
6231 void RTMP_AllocateSharedMemory(
6232         IN      PRTMP_ADAPTER pAd,
6233         IN      ULONG   Length,
6234         IN      BOOLEAN Cached,
6235         OUT     PVOID   *VirtualAddress,
6236         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6237
6238 VOID RTMPFreeTxRxRingMemory(
6239     IN  PRTMP_ADAPTER   pAd);
6240
6241 NDIS_STATUS AdapterBlockAllocateMemory(
6242         IN PVOID        handle,
6243         OUT     PVOID   *ppAd);
6244
6245 void RTMP_AllocateTxDescMemory(
6246         IN      PRTMP_ADAPTER pAd,
6247         IN      UINT    Index,
6248         IN      ULONG   Length,
6249         IN      BOOLEAN Cached,
6250         OUT     PVOID   *VirtualAddress,
6251         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6252
6253 void RTMP_AllocateFirstTxBuffer(
6254         IN      PRTMP_ADAPTER pAd,
6255         IN      UINT    Index,
6256         IN      ULONG   Length,
6257         IN      BOOLEAN Cached,
6258         OUT     PVOID   *VirtualAddress,
6259         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6260
6261 void RTMP_AllocateMgmtDescMemory(
6262         IN      PRTMP_ADAPTER pAd,
6263         IN      ULONG   Length,
6264         IN      BOOLEAN Cached,
6265         OUT     PVOID   *VirtualAddress,
6266         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6267
6268 void RTMP_AllocateRxDescMemory(
6269         IN      PRTMP_ADAPTER pAd,
6270         IN      ULONG   Length,
6271         IN      BOOLEAN Cached,
6272         OUT     PVOID   *VirtualAddress,
6273         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6274
6275 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6276         IN      PRTMP_ADAPTER pAd,
6277         IN      ULONG   Length,
6278         IN      BOOLEAN Cached,
6279         OUT     PVOID   *VirtualAddress,
6280         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6281
6282 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6283         IN      PRTMP_ADAPTER pAd,
6284         IN      ULONG   Length,
6285         IN      BOOLEAN Cached,
6286         OUT     PVOID   *VirtualAddress);
6287
6288 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6289         IN      PRTMP_ADAPTER pAd,
6290         IN      ULONG   Length);
6291
6292 void RTMP_QueryPacketInfo(
6293         IN  PNDIS_PACKET pPacket,
6294         OUT PACKET_INFO  *pPacketInfo,
6295         OUT PUCHAR               *pSrcBufVA,
6296         OUT     UINT             *pSrcBufLen);
6297
6298 void RTMP_QueryNextPacketInfo(
6299         IN  PNDIS_PACKET *ppPacket,
6300         OUT PACKET_INFO  *pPacketInfo,
6301         OUT PUCHAR               *pSrcBufVA,
6302         OUT     UINT             *pSrcBufLen);
6303
6304
6305 BOOLEAN RTMP_FillTxBlkInfo(
6306         IN RTMP_ADAPTER *pAd,
6307         IN TX_BLK *pTxBlk);
6308
6309
6310 PRTMP_SCATTER_GATHER_LIST
6311 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6312
6313
6314  void announce_802_3_packet(
6315         IN      PRTMP_ADAPTER   pAd,
6316         IN      PNDIS_PACKET    pPacket);
6317
6318
6319 UINT BA_Reorder_AMSDU_Annnounce(
6320         IN      PRTMP_ADAPTER   pAd,
6321         IN      PNDIS_PACKET    pPacket);
6322
6323
6324 UINT Handle_AMSDU_Packet(
6325         IN      PRTMP_ADAPTER   pAd,
6326         IN      PUCHAR                  pData,
6327         IN      ULONG                   DataSize,
6328         IN  UCHAR                       FromWhichBSSID);
6329
6330
6331 void convert_802_11_to_802_3_packet(
6332         IN      PRTMP_ADAPTER   pAd,
6333         IN      PNDIS_PACKET    pPacket,
6334         IN      PUCHAR                  p8023hdr,
6335         IN      PUCHAR                  pData,
6336         IN      ULONG                   DataSize,
6337         IN  UCHAR                       FromWhichBSSID);
6338
6339
6340 PNET_DEV get_netdev_from_bssid(
6341         IN      PRTMP_ADAPTER   pAd,
6342         IN      UCHAR                   FromWhichBSSID);
6343
6344
6345 PNDIS_PACKET duplicate_pkt(
6346         IN      PRTMP_ADAPTER   pAd,
6347         IN      PUCHAR                  pHeader802_3,
6348     IN  UINT            HdrLen,
6349         IN      PUCHAR                  pData,
6350         IN      ULONG                   DataSize,
6351         IN      UCHAR                   FromWhichBSSID);
6352
6353
6354 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6355         IN      PRTMP_ADAPTER   pAd,
6356         IN      PNDIS_PACKET    pOldPkt);
6357
6358 PNDIS_PACKET duplicate_pkt_with_VLAN(
6359         IN      PRTMP_ADAPTER   pAd,
6360         IN      PUCHAR                  pHeader802_3,
6361     IN  UINT            HdrLen,
6362         IN      PUCHAR                  pData,
6363         IN      ULONG                   DataSize,
6364         IN      UCHAR                   FromWhichBSSID);
6365
6366 PNDIS_PACKET duplicate_pkt_with_WPI(
6367         IN      PRTMP_ADAPTER   pAd,
6368         IN      PNDIS_PACKET    pPacket,
6369         IN      UINT32                  ext_head_len,
6370         IN      UINT32                  ext_tail_len);
6371
6372 UCHAR VLAN_8023_Header_Copy(
6373         IN      PRTMP_ADAPTER   pAd,
6374         IN      PUCHAR                  pHeader802_3,
6375         IN      UINT            HdrLen,
6376         OUT PUCHAR                      pData,
6377         IN      UCHAR                   FromWhichBSSID);
6378
6379 #ifdef DOT11_N_SUPPORT
6380 void ba_flush_reordering_timeout_mpdus(
6381         IN PRTMP_ADAPTER        pAd,
6382         IN PBA_REC_ENTRY        pBAEntry,
6383         IN ULONG                        Now32);
6384
6385
6386 VOID BAOriSessionSetUp(
6387                         IN PRTMP_ADAPTER    pAd,
6388                         IN MAC_TABLE_ENTRY      *pEntry,
6389                         IN UCHAR                        TID,
6390                         IN USHORT                       TimeOut,
6391                         IN ULONG                        DelayTime,
6392                         IN BOOLEAN              isForced);
6393
6394 VOID BASessionTearDownALL(
6395         IN OUT  PRTMP_ADAPTER pAd,
6396         IN              UCHAR Wcid);
6397 #endif // DOT11_N_SUPPORT //
6398
6399 BOOLEAN OS_Need_Clone_Packet(void);
6400
6401
6402 VOID build_tx_packet(
6403         IN      PRTMP_ADAPTER   pAd,
6404         IN      PNDIS_PACKET    pPacket,
6405         IN      PUCHAR  pFrame,
6406         IN      ULONG   FrameLen);
6407
6408
6409 VOID BAOriSessionTearDown(
6410         IN OUT  PRTMP_ADAPTER   pAd,
6411         IN              UCHAR                   Wcid,
6412         IN              UCHAR                   TID,
6413         IN              BOOLEAN                 bPassive,
6414         IN              BOOLEAN                 bForceSend);
6415
6416 VOID BARecSessionTearDown(
6417         IN OUT  PRTMP_ADAPTER   pAd,
6418         IN              UCHAR                   Wcid,
6419         IN              UCHAR                   TID,
6420         IN              BOOLEAN                 bPassive);
6421
6422 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6423 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6424
6425 ULONG AutoChBssInsertEntry(
6426         IN PRTMP_ADAPTER pAd,
6427         IN PUCHAR pBssid,
6428         IN CHAR Ssid[],
6429         IN UCHAR SsidLen,
6430         IN UCHAR ChannelNo,
6431         IN CHAR Rssi);
6432
6433 void AutoChBssTableInit(
6434         IN PRTMP_ADAPTER pAd);
6435
6436 void ChannelInfoInit(
6437         IN PRTMP_ADAPTER pAd);
6438
6439 void AutoChBssTableDestroy(
6440         IN PRTMP_ADAPTER pAd);
6441
6442 void ChannelInfoDestroy(
6443         IN PRTMP_ADAPTER pAd);
6444
6445 UCHAR New_ApAutoSelectChannel(
6446         IN PRTMP_ADAPTER pAd);
6447
6448 BOOLEAN rtstrmactohex(
6449         IN char *s1,
6450         IN char *s2);
6451
6452 BOOLEAN rtstrcasecmp(
6453         IN char *s1,
6454         IN char *s2);
6455
6456 char *rtstrstruncasecmp(
6457         IN char *s1,
6458         IN char *s2);
6459
6460 char    *rtstrstr(
6461         IN      const char * s1,
6462         IN      const char * s2);
6463
6464 char *rstrtok(
6465         IN char * s,
6466         IN const char * ct);
6467
6468 int rtinet_aton(
6469         const char *cp,
6470         unsigned int *addr);
6471
6472 ////////// common ioctl functions //////////
6473 INT Set_DriverVersion_Proc(
6474         IN      PRTMP_ADAPTER   pAd,
6475         IN      PUCHAR                  arg);
6476
6477 INT Set_CountryRegion_Proc(
6478         IN      PRTMP_ADAPTER   pAd,
6479         IN      PUCHAR                  arg);
6480
6481 INT Set_CountryRegionABand_Proc(
6482         IN      PRTMP_ADAPTER   pAd,
6483         IN      PUCHAR                  arg);
6484
6485 INT Set_WirelessMode_Proc(
6486         IN      PRTMP_ADAPTER   pAd,
6487         IN      PUCHAR                  arg);
6488
6489 INT Set_Channel_Proc(
6490         IN      PRTMP_ADAPTER   pAd,
6491         IN      PUCHAR                  arg);
6492
6493 INT     Set_ShortSlot_Proc(
6494         IN      PRTMP_ADAPTER   pAd,
6495         IN      PUCHAR                  arg);
6496
6497 INT     Set_TxPower_Proc(
6498         IN      PRTMP_ADAPTER   pAd,
6499         IN      PUCHAR                  arg);
6500
6501 INT Set_BGProtection_Proc(
6502         IN  PRTMP_ADAPTER               pAd,
6503         IN  PUCHAR                      arg);
6504
6505 INT Set_TxPreamble_Proc(
6506         IN  PRTMP_ADAPTER               pAd,
6507         IN  PUCHAR                      arg);
6508
6509 INT Set_RTSThreshold_Proc(
6510         IN  PRTMP_ADAPTER               pAd,
6511         IN  PUCHAR                      arg);
6512
6513 INT Set_FragThreshold_Proc(
6514         IN  PRTMP_ADAPTER               pAd,
6515         IN  PUCHAR                      arg);
6516
6517 INT Set_TxBurst_Proc(
6518         IN  PRTMP_ADAPTER               pAd,
6519         IN  PUCHAR                      arg);
6520
6521 #ifdef AGGREGATION_SUPPORT
6522 INT     Set_PktAggregate_Proc(
6523         IN  PRTMP_ADAPTER               pAd,
6524         IN  PUCHAR                      arg);
6525 #endif
6526
6527 INT     Set_IEEE80211H_Proc(
6528         IN      PRTMP_ADAPTER   pAd,
6529         IN      PUCHAR                  arg);
6530
6531 #ifdef DBG
6532 INT     Set_Debug_Proc(
6533         IN      PRTMP_ADAPTER   pAd,
6534         IN      PUCHAR                  arg);
6535 #endif
6536
6537 INT     Show_DescInfo_Proc(
6538         IN      PRTMP_ADAPTER   pAd,
6539         IN      PUCHAR                  arg);
6540
6541 INT     Set_ResetStatCounter_Proc(
6542         IN      PRTMP_ADAPTER   pAd,
6543         IN      PUCHAR                  arg);
6544
6545 #ifdef DOT11_N_SUPPORT
6546 INT     Set_BASetup_Proc(
6547         IN      PRTMP_ADAPTER   pAd,
6548         IN      PUCHAR                  arg);
6549
6550 INT     Set_BADecline_Proc(
6551         IN      PRTMP_ADAPTER   pAd,
6552         IN      PUCHAR                  arg);
6553
6554 INT     Set_BAOriTearDown_Proc(
6555         IN      PRTMP_ADAPTER   pAd,
6556         IN      PUCHAR                  arg);
6557
6558 INT     Set_BARecTearDown_Proc(
6559         IN      PRTMP_ADAPTER   pAd,
6560         IN      PUCHAR                  arg);
6561
6562 INT     Set_HtBw_Proc(
6563         IN      PRTMP_ADAPTER   pAd,
6564         IN      PUCHAR                  arg);
6565
6566 INT     Set_HtMcs_Proc(
6567         IN      PRTMP_ADAPTER   pAd,
6568         IN      PUCHAR                  arg);
6569
6570 INT     Set_HtGi_Proc(
6571         IN      PRTMP_ADAPTER   pAd,
6572         IN      PUCHAR                  arg);
6573
6574 INT     Set_HtOpMode_Proc(
6575         IN      PRTMP_ADAPTER   pAd,
6576         IN      PUCHAR                  arg);
6577
6578 INT     Set_HtStbc_Proc(
6579         IN      PRTMP_ADAPTER   pAd,
6580         IN      PUCHAR                  arg);
6581
6582 INT     Set_HtHtc_Proc(
6583         IN      PRTMP_ADAPTER   pAd,
6584         IN      PUCHAR                  arg);
6585
6586 INT     Set_HtExtcha_Proc(
6587         IN      PRTMP_ADAPTER   pAd,
6588         IN      PUCHAR                  arg);
6589
6590 INT     Set_HtMpduDensity_Proc(
6591         IN      PRTMP_ADAPTER   pAd,
6592         IN      PUCHAR                  arg);
6593
6594 INT     Set_HtBaWinSize_Proc(
6595         IN      PRTMP_ADAPTER   pAd,
6596         IN      PUCHAR                  arg);
6597
6598 INT     Set_HtRdg_Proc(
6599         IN      PRTMP_ADAPTER   pAd,
6600         IN      PUCHAR                  arg);
6601
6602 INT     Set_HtLinkAdapt_Proc(
6603         IN      PRTMP_ADAPTER   pAd,
6604         IN      PUCHAR                  arg);
6605
6606 INT     Set_HtAmsdu_Proc(
6607         IN      PRTMP_ADAPTER   pAd,
6608         IN      PUCHAR                  arg);
6609
6610 INT     Set_HtAutoBa_Proc(
6611         IN      PRTMP_ADAPTER   pAd,
6612         IN      PUCHAR                  arg);
6613
6614 INT     Set_HtProtect_Proc(
6615         IN      PRTMP_ADAPTER   pAd,
6616         IN      PUCHAR                  arg);
6617
6618 INT     Set_HtMimoPs_Proc(
6619         IN      PRTMP_ADAPTER   pAd,
6620         IN      PUCHAR                  arg);
6621
6622
6623 INT     Set_ForceShortGI_Proc(
6624         IN      PRTMP_ADAPTER   pAd,
6625         IN      PUCHAR                  arg);
6626
6627 INT     Set_ForceGF_Proc(
6628         IN      PRTMP_ADAPTER   pAd,
6629         IN      PUCHAR                  arg);
6630
6631 INT     SetCommonHT(
6632         IN      PRTMP_ADAPTER   pAd);
6633
6634 INT     Set_SendPSMPAction_Proc(
6635         IN      PRTMP_ADAPTER   pAd,
6636         IN      PUCHAR                  arg);
6637
6638 INT     Set_HtMIMOPSmode_Proc(
6639         IN      PRTMP_ADAPTER   pAd,
6640         IN      PUCHAR                  arg);
6641
6642
6643 INT     Set_HtTxBASize_Proc(
6644         IN      PRTMP_ADAPTER   pAd,
6645         IN      PUCHAR                  arg);
6646 #endif // DOT11_N_SUPPORT //
6647
6648
6649
6650 #ifdef CONFIG_STA_SUPPORT
6651 //Dls , kathy
6652 VOID RTMPSendDLSTearDownFrame(
6653         IN      PRTMP_ADAPTER   pAd,
6654         IN      PUCHAR                  pDA);
6655
6656 #ifdef DOT11_N_SUPPORT
6657 //Block ACK
6658 VOID QueryBATABLE(
6659         IN  PRTMP_ADAPTER pAd,
6660         OUT PQUERYBA_TABLE pBAT);
6661 #endif // DOT11_N_SUPPORT //
6662
6663 #ifdef WPA_SUPPLICANT_SUPPORT
6664 INT         WpaCheckEapCode(
6665         IN  PRTMP_ADAPTER       pAd,
6666         IN  PUCHAR                              pFrame,
6667         IN  USHORT                              FrameLen,
6668         IN  USHORT                              OffSet);
6669
6670 VOID    WpaSendMicFailureToWpaSupplicant(
6671     IN  PRTMP_ADAPTER       pAd,
6672     IN  BOOLEAN             bUnicast);
6673
6674 VOID    SendAssocIEsToWpaSupplicant(
6675     IN  PRTMP_ADAPTER       pAd);
6676 #endif // WPA_SUPPLICANT_SUPPORT //
6677
6678 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6679 int wext_notify_event_assoc(
6680         IN  RTMP_ADAPTER *pAd);
6681 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6682
6683 #endif // CONFIG_STA_SUPPORT //
6684
6685
6686
6687 #ifdef DOT11_N_SUPPORT
6688 VOID Handle_BSS_Width_Trigger_Events(
6689         IN PRTMP_ADAPTER pAd);
6690
6691 void build_ext_channel_switch_ie(
6692         IN PRTMP_ADAPTER pAd,
6693         IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6694 #endif // DOT11_N_SUPPORT //
6695
6696
6697 BOOLEAN APRxDoneInterruptHandle(
6698         IN      PRTMP_ADAPTER   pAd);
6699
6700 BOOLEAN STARxDoneInterruptHandle(
6701         IN      PRTMP_ADAPTER   pAd,
6702         IN      BOOLEAN                 argc);
6703
6704 #ifdef DOT11_N_SUPPORT
6705 // AMPDU packet indication
6706 VOID Indicate_AMPDU_Packet(
6707         IN      PRTMP_ADAPTER   pAd,
6708         IN      RX_BLK                  *pRxBlk,
6709         IN      UCHAR                   FromWhichBSSID);
6710
6711 // AMSDU packet indication
6712 VOID Indicate_AMSDU_Packet(
6713         IN      PRTMP_ADAPTER   pAd,
6714         IN      RX_BLK                  *pRxBlk,
6715         IN      UCHAR                   FromWhichBSSID);
6716 #endif // DOT11_N_SUPPORT //
6717
6718 // Normal legacy Rx packet indication
6719 VOID Indicate_Legacy_Packet(
6720         IN      PRTMP_ADAPTER   pAd,
6721         IN      RX_BLK                  *pRxBlk,
6722         IN      UCHAR                   FromWhichBSSID);
6723
6724 VOID Indicate_EAPOL_Packet(
6725         IN      PRTMP_ADAPTER   pAd,
6726         IN      RX_BLK                  *pRxBlk,
6727         IN      UCHAR                   FromWhichBSSID);
6728
6729 void  update_os_packet_info(
6730         IN      PRTMP_ADAPTER   pAd,
6731         IN      RX_BLK                  *pRxBlk,
6732         IN      UCHAR                   FromWhichBSSID);
6733
6734 void wlan_802_11_to_802_3_packet(
6735         IN      PRTMP_ADAPTER   pAd,
6736         IN      RX_BLK                  *pRxBlk,
6737         IN      PUCHAR                  pHeader802_3,
6738         IN  UCHAR                       FromWhichBSSID);
6739
6740 UINT deaggregate_AMSDU_announce(
6741         IN      PRTMP_ADAPTER   pAd,
6742         PNDIS_PACKET            pPacket,
6743         IN      PUCHAR                  pData,
6744         IN      ULONG                   DataSize);
6745
6746
6747 #ifdef CONFIG_STA_SUPPORT
6748 // remove LLC and get 802_3 Header
6749 #define  RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3)    \
6750 {                                                                                                                                                               \
6751         PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA;                                 \
6752                                                                                                                                                                 \
6753         if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH))                                    \
6754         {                                                                           \
6755                 _pDA = _pRxBlk->pHeader->Addr3;                                         \
6756                 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11);                \
6757         }                                                                           \
6758         else                                                                        \
6759         {                                                                           \
6760                 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA))                               \
6761                 {                                                                       \
6762                         _pDA = _pRxBlk->pHeader->Addr1;                                     \
6763                 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS))                                                                 \
6764                         _pSA = _pRxBlk->pHeader->Addr2;                                                                         \
6765                 else                                                                                                                                    \
6766                         _pSA = _pRxBlk->pHeader->Addr3;                                     \
6767                 }                                                                       \
6768                 else                                                                    \
6769                 {                                                                       \
6770                         _pDA = _pRxBlk->pHeader->Addr1;                                     \
6771                         _pSA = _pRxBlk->pHeader->Addr2;                                     \
6772                 }                                                                       \
6773         }                                                                           \
6774                                                                                                                                                                 \
6775         CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData,                             \
6776                 _pRxBlk->DataSize, _pRemovedLLCSNAP);                                   \
6777 }
6778 #endif // CONFIG_STA_SUPPORT //
6779
6780
6781 BOOLEAN APFowardWirelessStaToWirelessSta(
6782         IN      PRTMP_ADAPTER   pAd,
6783         IN      PNDIS_PACKET    pPacket,
6784         IN      ULONG                   FromWhichBSSID);
6785
6786 VOID Announce_or_Forward_802_3_Packet(
6787         IN      PRTMP_ADAPTER   pAd,
6788         IN      PNDIS_PACKET    pPacket,
6789         IN      UCHAR                   FromWhichBSSID);
6790
6791 VOID Sta_Announce_or_Forward_802_3_Packet(
6792         IN      PRTMP_ADAPTER   pAd,
6793         IN      PNDIS_PACKET    pPacket,
6794         IN      UCHAR                   FromWhichBSSID);
6795
6796
6797 #ifdef CONFIG_STA_SUPPORT
6798 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6799                         Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6800                         //announce_802_3_packet(_pAd, _pPacket);
6801 #endif // CONFIG_STA_SUPPORT //
6802
6803
6804 PNDIS_PACKET DuplicatePacket(
6805         IN      PRTMP_ADAPTER   pAd,
6806         IN      PNDIS_PACKET    pPacket,
6807         IN      UCHAR                   FromWhichBSSID);
6808
6809
6810 PNDIS_PACKET ClonePacket(
6811         IN      PRTMP_ADAPTER   pAd,
6812         IN      PNDIS_PACKET    pPacket,
6813         IN      PUCHAR                  pData,
6814         IN      ULONG                   DataSize);
6815
6816
6817 // Normal, AMPDU or AMSDU
6818 VOID CmmRxnonRalinkFrameIndicate(
6819         IN      PRTMP_ADAPTER   pAd,
6820         IN      RX_BLK                  *pRxBlk,
6821         IN      UCHAR                   FromWhichBSSID);
6822
6823 VOID CmmRxRalinkFrameIndicate(
6824         IN      PRTMP_ADAPTER   pAd,
6825         IN      MAC_TABLE_ENTRY *pEntry,
6826         IN      RX_BLK                  *pRxBlk,
6827         IN      UCHAR                   FromWhichBSSID);
6828
6829 VOID Update_Rssi_Sample(
6830         IN PRTMP_ADAPTER        pAd,
6831         IN RSSI_SAMPLE          *pRssi,
6832         IN PRXWI_STRUC          pRxWI);
6833
6834 PNDIS_PACKET GetPacketFromRxRing(
6835         IN              PRTMP_ADAPTER   pAd,
6836         OUT             PRT28XX_RXD_STRUC               pSaveRxD,
6837         OUT             BOOLEAN                 *pbReschedule,
6838         IN OUT  UINT32                  *pRxPending);
6839
6840 PNDIS_PACKET RTMPDeFragmentDataFrame(
6841         IN      PRTMP_ADAPTER   pAd,
6842         IN      RX_BLK                  *pRxBlk);
6843
6844 ////////////////////////////////////////
6845
6846
6847
6848
6849
6850 #ifdef SNMP_SUPPORT
6851 //for snmp , kathy
6852 typedef struct _DefaultKeyIdxValue
6853 {
6854         UCHAR   KeyIdx;
6855         UCHAR   Value[16];
6856 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6857 #endif
6858
6859
6860 #ifdef CONFIG_STA_SUPPORT
6861 enum {
6862         DIDmsg_lnxind_wlansniffrm               = 0x00000044,
6863         DIDmsg_lnxind_wlansniffrm_hosttime      = 0x00010044,
6864         DIDmsg_lnxind_wlansniffrm_mactime       = 0x00020044,
6865         DIDmsg_lnxind_wlansniffrm_channel       = 0x00030044,
6866         DIDmsg_lnxind_wlansniffrm_rssi          = 0x00040044,
6867         DIDmsg_lnxind_wlansniffrm_sq            = 0x00050044,
6868         DIDmsg_lnxind_wlansniffrm_signal        = 0x00060044,
6869         DIDmsg_lnxind_wlansniffrm_noise         = 0x00070044,
6870         DIDmsg_lnxind_wlansniffrm_rate          = 0x00080044,
6871         DIDmsg_lnxind_wlansniffrm_istx          = 0x00090044,
6872         DIDmsg_lnxind_wlansniffrm_frmlen        = 0x000A0044
6873 };
6874 enum {
6875         P80211ENUM_msgitem_status_no_value      = 0x00
6876 };
6877 enum {
6878         P80211ENUM_truth_false                  = 0x00,
6879         P80211ENUM_truth_true                   = 0x01
6880 };
6881
6882 /* Definition from madwifi */
6883 typedef struct {
6884         UINT32 did;
6885         UINT16 status;
6886         UINT16 len;
6887         UINT32 data;
6888 } p80211item_uint32_t;
6889
6890 typedef struct {
6891         UINT32 msgcode;
6892         UINT32 msglen;
6893 #define WLAN_DEVNAMELEN_MAX 16
6894         UINT8 devname[WLAN_DEVNAMELEN_MAX];
6895         p80211item_uint32_t hosttime;
6896         p80211item_uint32_t mactime;
6897         p80211item_uint32_t channel;
6898         p80211item_uint32_t rssi;
6899         p80211item_uint32_t sq;
6900         p80211item_uint32_t signal;
6901         p80211item_uint32_t noise;
6902         p80211item_uint32_t rate;
6903         p80211item_uint32_t istx;
6904         p80211item_uint32_t frmlen;
6905 } wlan_ng_prism2_header;
6906
6907 /* The radio capture header precedes the 802.11 header. */
6908 typedef struct PACKED _ieee80211_radiotap_header {
6909     UINT8       it_version;     /* Version 0. Only increases
6910                                  * for drastic changes,
6911                                  * introduction of compatible
6912                                  * new fields does not count.
6913                                  */
6914     UINT8       it_pad;
6915     UINT16     it_len;         /* length of the whole
6916                                  * header in bytes, including
6917                                  * it_version, it_pad,
6918                                  * it_len, and data fields.
6919                                  */
6920     UINT32   it_present;        /* A bitmap telling which
6921                                          * fields are present. Set bit 31
6922                                          * (0x80000000) to extend the
6923                                          * bitmap by another 32 bits.
6924                                          * Additional extensions are made
6925                                          * by setting bit 31.
6926                                          */
6927 }ieee80211_radiotap_header ;
6928
6929 enum ieee80211_radiotap_type {
6930     IEEE80211_RADIOTAP_TSFT = 0,
6931     IEEE80211_RADIOTAP_FLAGS = 1,
6932     IEEE80211_RADIOTAP_RATE = 2,
6933     IEEE80211_RADIOTAP_CHANNEL = 3,
6934     IEEE80211_RADIOTAP_FHSS = 4,
6935     IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6936     IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6937     IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6938     IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6939     IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6940     IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6941     IEEE80211_RADIOTAP_ANTENNA = 11,
6942     IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6943     IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6944 };
6945
6946 #define WLAN_RADIOTAP_PRESENT (                 \
6947         (1 << IEEE80211_RADIOTAP_TSFT)  |       \
6948         (1 << IEEE80211_RADIOTAP_FLAGS) |       \
6949         (1 << IEEE80211_RADIOTAP_RATE)  |       \
6950          0)
6951
6952 typedef struct _wlan_radiotap_header {
6953         ieee80211_radiotap_header wt_ihdr;
6954         INT64 wt_tsft;
6955         UINT8 wt_flags;
6956         UINT8 wt_rate;
6957 } wlan_radiotap_header;
6958 /* Definition from madwifi */
6959
6960 void send_monitor_packets(
6961         IN      PRTMP_ADAPTER   pAd,
6962         IN      RX_BLK                  *pRxBlk);
6963
6964 #if WIRELESS_EXT >= 12
6965 // This function will be called when query /proc
6966 struct iw_statistics *rt28xx_get_wireless_stats(
6967     IN struct net_device *net_dev);
6968 #endif
6969
6970 VOID    RTMPSetDesiredRates(
6971     IN  PRTMP_ADAPTER   pAdapter,
6972     IN  LONG            Rates);
6973 #endif // CONFIG_STA_SUPPORT //
6974
6975 INT     Set_FixedTxMode_Proc(
6976         IN      PRTMP_ADAPTER   pAd,
6977         IN      PUCHAR                  arg);
6978
6979 static inline char* GetPhyMode(
6980         int Mode)
6981 {
6982         switch(Mode)
6983         {
6984                 case MODE_CCK:
6985                         return "CCK";
6986
6987                 case MODE_OFDM:
6988                         return "OFDM";
6989 #ifdef DOT11_N_SUPPORT
6990                 case MODE_HTMIX:
6991                         return "HTMIX";
6992
6993                 case MODE_HTGREENFIELD:
6994                         return "GREEN";
6995 #endif // DOT11_N_SUPPORT //
6996                 default:
6997                         return "N/A";
6998         }
6999 }
7000
7001
7002 static inline char* GetBW(
7003         int BW)
7004 {
7005         switch(BW)
7006         {
7007                 case BW_10:
7008                         return "10M";
7009
7010                 case BW_20:
7011                         return "20M";
7012 #ifdef DOT11_N_SUPPORT
7013                 case BW_40:
7014                         return "40M";
7015 #endif // DOT11_N_SUPPORT //
7016                 default:
7017                         return "N/A";
7018         }
7019 }
7020
7021
7022 VOID RT28xxThreadTerminate(
7023         IN RTMP_ADAPTER *pAd);
7024
7025 BOOLEAN RT28XXChipsetCheck(
7026         IN void *_dev_p);
7027
7028 BOOLEAN RT28XXNetDevInit(
7029         IN void                                 *_dev_p,
7030         IN struct  net_device   *net_dev,
7031         IN RTMP_ADAPTER                 *pAd);
7032
7033 BOOLEAN RT28XXProbePostConfig(
7034         IN void                                 *_dev_p,
7035         IN RTMP_ADAPTER                 *pAd,
7036         IN INT32                                argc);
7037
7038 VOID RT28XXDMADisable(
7039         IN RTMP_ADAPTER                 *pAd);
7040
7041 VOID RT28XXDMAEnable(
7042         IN RTMP_ADAPTER                 *pAd);
7043
7044 VOID RT28xx_UpdateBeaconToAsic(
7045         IN RTMP_ADAPTER * pAd,
7046         IN INT apidx,
7047         IN ULONG BeaconLen,
7048         IN ULONG UpdatePos);
7049
7050 INT rt28xx_ioctl(
7051         IN      struct net_device       *net_dev,
7052         IN      OUT     struct ifreq    *rq,
7053         IN      INT                     cmd);
7054
7055
7056 #ifdef CONFIG_STA_SUPPORT
7057 INT rt28xx_sta_ioctl(
7058         IN      struct net_device       *net_dev,
7059         IN      OUT     struct ifreq    *rq,
7060         IN      INT                     cmd);
7061 #endif // CONFIG_STA_SUPPORT //
7062
7063 BOOLEAN RT28XXSecurityKeyAdd(
7064         IN              PRTMP_ADAPTER           pAd,
7065         IN              ULONG                           apidx,
7066         IN              ULONG                           KeyIdx,
7067         IN              MAC_TABLE_ENTRY         *pEntry);
7068
7069 ////////////////////////////////////////
7070 PNDIS_PACKET GetPacketFromRxRing(
7071         IN              PRTMP_ADAPTER   pAd,
7072         OUT             PRT28XX_RXD_STRUC       pSaveRxD,
7073         OUT             BOOLEAN                 *pbReschedule,
7074         IN OUT  UINT32                  *pRxPending);
7075
7076
7077 void kill_thread_task(PRTMP_ADAPTER pAd);
7078
7079 void tbtt_tasklet(unsigned long data);
7080
7081
7082 VOID AsicTurnOffRFClk(
7083         IN PRTMP_ADAPTER    pAd,
7084         IN      UCHAR           Channel);
7085
7086 VOID AsicTurnOnRFClk(
7087         IN PRTMP_ADAPTER        pAd,
7088         IN      UCHAR                   Channel);
7089
7090 #ifdef RT30xx
7091 NTSTATUS RT30xxWriteRFRegister(
7092         IN      PRTMP_ADAPTER   pAd,
7093         IN      UCHAR                   RegID,
7094         IN      UCHAR                   Value);
7095
7096 NTSTATUS RT30xxReadRFRegister(
7097         IN      PRTMP_ADAPTER   pAd,
7098         IN      UCHAR                   RegID,
7099         IN      PUCHAR                  pValue);
7100
7101 //2008/09/11:KH add to support efuse<--
7102 UCHAR eFuseReadRegisters(
7103         IN      PRTMP_ADAPTER   pAd,
7104         IN      USHORT Offset,
7105         IN      USHORT Length,
7106         OUT     USHORT* pData);
7107
7108 VOID eFuseReadPhysical(
7109         IN      PRTMP_ADAPTER   pAd,
7110         IN      PUSHORT lpInBuffer,
7111         IN      ULONG nInBufferSize,
7112         OUT     PUSHORT lpOutBuffer,
7113         IN      ULONG nOutBufferSize
7114 );
7115
7116 NTSTATUS eFuseRead(
7117         IN      PRTMP_ADAPTER   pAd,
7118         IN      USHORT                  Offset,
7119         OUT     PUCHAR                  pData,
7120         IN      USHORT                  Length);
7121
7122 VOID eFusePhysicalWriteRegisters(
7123         IN      PRTMP_ADAPTER   pAd,
7124         IN      USHORT Offset,
7125         IN      USHORT Length,
7126         OUT     USHORT* pData);
7127
7128 NTSTATUS eFuseWriteRegisters(
7129         IN      PRTMP_ADAPTER   pAd,
7130         IN      USHORT Offset,
7131         IN      USHORT Length,
7132         IN      USHORT* pData);
7133
7134 VOID eFuseWritePhysical(
7135         IN      PRTMP_ADAPTER   pAd,
7136         PUSHORT lpInBuffer,
7137         ULONG nInBufferSize,
7138         PUCHAR lpOutBuffer,
7139         ULONG nOutBufferSize
7140 );
7141
7142 NTSTATUS eFuseWrite(
7143         IN      PRTMP_ADAPTER   pAd,
7144         IN      USHORT                  Offset,
7145         IN      PUCHAR                  pData,
7146         IN      USHORT                  length);
7147
7148 INT set_eFuseGetFreeBlockCount_Proc(
7149         IN      PRTMP_ADAPTER   pAd,
7150         IN      PUCHAR                  arg);
7151
7152 INT set_eFusedump_Proc(
7153         IN      PRTMP_ADAPTER   pAd,
7154         IN      PUCHAR                  arg);
7155
7156 INT set_eFuseLoadFromBin_Proc(
7157         IN      PRTMP_ADAPTER   pAd,
7158         IN      PUCHAR                  arg);
7159
7160 NTSTATUS eFuseWriteRegistersFromBin(
7161         IN      PRTMP_ADAPTER   pAd,
7162         IN      USHORT Offset,
7163         IN      USHORT Length,
7164         IN      USHORT* pData);
7165
7166 VOID eFusePhysicalReadRegisters(
7167         IN      PRTMP_ADAPTER   pAd,
7168         IN      USHORT Offset,
7169         IN      USHORT Length,
7170         OUT     USHORT* pData);
7171
7172 NDIS_STATUS NICLoadEEPROM(
7173         IN PRTMP_ADAPTER pAd);
7174
7175 BOOLEAN bNeedLoadEEPROM(
7176         IN      PRTMP_ADAPTER   pAd);
7177 //2008/09/11:KH add to support efuse-->
7178 #endif // RT30xx //
7179
7180 #ifdef RT30xx
7181 // add by johnli, RF power sequence setup
7182 VOID RT30xxLoadRFNormalModeSetup(
7183         IN PRTMP_ADAPTER        pAd);
7184
7185 VOID RT30xxLoadRFSleepModeSetup(
7186         IN PRTMP_ADAPTER        pAd);
7187
7188 VOID RT30xxReverseRFSleepModeSetup(
7189         IN PRTMP_ADAPTER        pAd);
7190 // end johnli
7191 #endif // RT30xx //
7192
7193 #ifdef RT2870
7194 //
7195 // Function Prototype in rtusb_bulk.c
7196 //
7197 VOID    RTUSBInitTxDesc(
7198         IN      PRTMP_ADAPTER   pAd,
7199         IN      PTX_CONTEXT             pTxContext,
7200         IN      UCHAR                   BulkOutPipeId,
7201         IN      usb_complete_t  Func);
7202
7203 VOID    RTUSBInitHTTxDesc(
7204         IN      PRTMP_ADAPTER   pAd,
7205         IN      PHT_TX_CONTEXT  pTxContext,
7206         IN      UCHAR                   BulkOutPipeId,
7207         IN      ULONG                   BulkOutSize,
7208         IN      usb_complete_t  Func);
7209
7210 VOID    RTUSBInitRxDesc(
7211         IN      PRTMP_ADAPTER   pAd,
7212         IN      PRX_CONTEXT             pRxContext);
7213
7214 VOID RTUSBCleanUpDataBulkOutQueue(
7215         IN      PRTMP_ADAPTER   pAd);
7216
7217 VOID RTUSBCancelPendingBulkOutIRP(
7218         IN      PRTMP_ADAPTER   pAd);
7219
7220 VOID RTUSBBulkOutDataPacket(
7221         IN      PRTMP_ADAPTER   pAd,
7222         IN      UCHAR                   BulkOutPipeId,
7223         IN      UCHAR                   Index);
7224
7225 VOID RTUSBBulkOutNullFrame(
7226         IN      PRTMP_ADAPTER   pAd);
7227
7228 VOID RTUSBBulkOutRTSFrame(
7229         IN      PRTMP_ADAPTER   pAd);
7230
7231 VOID RTUSBCancelPendingBulkInIRP(
7232         IN      PRTMP_ADAPTER   pAd);
7233
7234 VOID RTUSBCancelPendingIRPs(
7235         IN      PRTMP_ADAPTER   pAd);
7236
7237 VOID RTUSBBulkOutMLMEPacket(
7238         IN      PRTMP_ADAPTER   pAd,
7239         IN      UCHAR                   Index);
7240
7241 VOID RTUSBBulkOutPsPoll(
7242         IN      PRTMP_ADAPTER   pAd);
7243
7244 VOID RTUSBCleanUpMLMEBulkOutQueue(
7245         IN      PRTMP_ADAPTER   pAd);
7246
7247 VOID RTUSBKickBulkOut(
7248         IN      PRTMP_ADAPTER pAd);
7249
7250 VOID    RTUSBBulkReceive(
7251         IN      PRTMP_ADAPTER   pAd);
7252
7253 VOID DoBulkIn(
7254         IN RTMP_ADAPTER *pAd);
7255
7256 VOID RTUSBInitRxDesc(
7257         IN      PRTMP_ADAPTER   pAd,
7258         IN  PRX_CONTEXT         pRxContext);
7259
7260 VOID RTUSBBulkRxHandle(
7261         IN unsigned long data);
7262
7263 //
7264 // Function Prototype in rtusb_io.c
7265 //
7266 NTSTATUS RTUSBMultiRead(
7267         IN      PRTMP_ADAPTER   pAd,
7268         IN      USHORT                  Offset,
7269         OUT     PUCHAR                  pData,
7270         IN      USHORT                  length);
7271
7272 NTSTATUS RTUSBMultiWrite(
7273         IN      PRTMP_ADAPTER   pAd,
7274         IN      USHORT                  Offset,
7275         IN      PUCHAR                  pData,
7276         IN      USHORT                  length);
7277
7278 NTSTATUS RTUSBMultiWrite_OneByte(
7279         IN      PRTMP_ADAPTER   pAd,
7280         IN      USHORT                  Offset,
7281         IN      PUCHAR                  pData);
7282
7283 NTSTATUS RTUSBReadBBPRegister(
7284         IN      PRTMP_ADAPTER   pAd,
7285         IN      UCHAR                   Id,
7286         IN      PUCHAR                  pValue);
7287
7288 NTSTATUS RTUSBWriteBBPRegister(
7289         IN      PRTMP_ADAPTER   pAd,
7290         IN      UCHAR                   Id,
7291         IN      UCHAR                   Value);
7292
7293 NTSTATUS RTUSBWriteRFRegister(
7294         IN      PRTMP_ADAPTER   pAd,
7295         IN      UINT32                  Value);
7296
7297 NTSTATUS RTUSB_VendorRequest(
7298         IN      PRTMP_ADAPTER   pAd,
7299         IN      UINT32                  TransferFlags,
7300         IN      UCHAR                   ReservedBits,
7301         IN      UCHAR                   Request,
7302         IN      USHORT                  Value,
7303         IN      USHORT                  Index,
7304         IN      PVOID                   TransferBuffer,
7305         IN      UINT32                  TransferBufferLength);
7306
7307 NTSTATUS RTUSBReadEEPROM(
7308         IN      PRTMP_ADAPTER   pAd,
7309         IN      USHORT                  Offset,
7310         OUT     PUCHAR                  pData,
7311         IN      USHORT                  length);
7312
7313 NTSTATUS RTUSBWriteEEPROM(
7314         IN      PRTMP_ADAPTER   pAd,
7315         IN      USHORT                  Offset,
7316         IN      PUCHAR                  pData,
7317         IN      USHORT                  length);
7318
7319 VOID RTUSBPutToSleep(
7320         IN      PRTMP_ADAPTER   pAd);
7321
7322 NTSTATUS RTUSBWakeUp(
7323         IN      PRTMP_ADAPTER   pAd);
7324
7325 VOID RTUSBInitializeCmdQ(
7326         IN      PCmdQ   cmdq);
7327
7328 NDIS_STATUS     RTUSBEnqueueCmdFromNdis(
7329         IN      PRTMP_ADAPTER   pAd,
7330         IN      NDIS_OID                Oid,
7331         IN      BOOLEAN                 SetInformation,
7332         IN      PVOID                   pInformationBuffer,
7333         IN      UINT32                  InformationBufferLength);
7334
7335 NDIS_STATUS RTUSBEnqueueInternalCmd(
7336         IN      PRTMP_ADAPTER   pAd,
7337         IN NDIS_OID                     Oid,
7338         IN PVOID                        pInformationBuffer,
7339         IN UINT32                       InformationBufferLength);
7340
7341 VOID RTUSBDequeueCmd(
7342         IN      PCmdQ           cmdq,
7343         OUT     PCmdQElmt       *pcmdqelmt);
7344
7345 INT RTUSBCmdThread(
7346         IN OUT PVOID Context);
7347
7348 INT TimerQThread(
7349         IN OUT PVOID Context);
7350
7351 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7352         IN RTMP_ADAPTER *pAd,
7353         IN RALINK_TIMER_STRUCT *pTimer);
7354
7355 BOOLEAN RT2870_TimerQ_Remove(
7356         IN RTMP_ADAPTER *pAd,
7357         IN RALINK_TIMER_STRUCT *pTimer);
7358
7359 void RT2870_TimerQ_Exit(
7360         IN RTMP_ADAPTER *pAd);
7361
7362 void RT2870_TimerQ_Init(
7363         IN RTMP_ADAPTER *pAd);
7364
7365 VOID RT2870_BssBeaconExit(
7366         IN RTMP_ADAPTER *pAd);
7367
7368 VOID RT2870_BssBeaconStop(
7369         IN RTMP_ADAPTER *pAd);
7370
7371 VOID RT2870_BssBeaconStart(
7372         IN RTMP_ADAPTER * pAd);
7373
7374 VOID RT2870_BssBeaconInit(
7375         IN RTMP_ADAPTER *pAd);
7376
7377 VOID RT2870_WatchDog(
7378         IN RTMP_ADAPTER *pAd);
7379
7380 NTSTATUS RTUSBWriteMACRegister(
7381         IN      PRTMP_ADAPTER   pAd,
7382         IN      USHORT                  Offset,
7383         IN      UINT32                  Value);
7384
7385 NTSTATUS RTUSBReadMACRegister(
7386         IN      PRTMP_ADAPTER   pAd,
7387         IN      USHORT                  Offset,
7388         OUT     PUINT32                 pValue);
7389
7390 NTSTATUS RTUSBSingleWrite(
7391         IN      RTMP_ADAPTER    *pAd,
7392         IN      USHORT                  Offset,
7393         IN      USHORT                  Value);
7394
7395 NTSTATUS RTUSBFirmwareRun(
7396         IN      PRTMP_ADAPTER   pAd);
7397
7398 NTSTATUS RTUSBFirmwareWrite(
7399         IN PRTMP_ADAPTER pAd,
7400         IN PUCHAR               pFwImage,
7401         IN ULONG                FwLen);
7402
7403 NTSTATUS        RTUSBFirmwareOpmode(
7404         IN      PRTMP_ADAPTER   pAd,
7405         OUT     PUINT32                 pValue);
7406
7407 NTSTATUS        RTUSBVenderReset(
7408         IN      PRTMP_ADAPTER   pAd);
7409
7410 NDIS_STATUS RTUSBSetHardWareRegister(
7411         IN      PRTMP_ADAPTER   pAdapter,
7412         IN      PVOID                   pBuf);
7413
7414 NDIS_STATUS RTUSBQueryHardWareRegister(
7415         IN      PRTMP_ADAPTER   pAdapter,
7416         IN      PVOID                   pBuf);
7417
7418 VOID CMDHandler(
7419     IN PRTMP_ADAPTER pAd);
7420
7421
7422 NDIS_STATUS      CreateThreads(
7423         IN      struct net_device *net_dev );
7424
7425
7426 VOID MacTableInitialize(
7427         IN  PRTMP_ADAPTER   pAd);
7428
7429 VOID MlmeSetPsm(
7430         IN PRTMP_ADAPTER pAd,
7431         IN USHORT psm);
7432
7433 NDIS_STATUS RTMPWPAAddKeyProc(
7434         IN  PRTMP_ADAPTER   pAd,
7435         IN  PVOID           pBuf);
7436
7437 VOID AsicRxAntEvalAction(
7438         IN PRTMP_ADAPTER pAd);
7439
7440 void append_pkt(
7441         IN      PRTMP_ADAPTER   pAd,
7442         IN      PUCHAR                  pHeader802_3,
7443     IN  UINT            HdrLen,
7444         IN      PUCHAR                  pData,
7445         IN      ULONG                   DataSize,
7446         OUT  PNDIS_PACKET       *ppPacket);
7447
7448 UINT deaggregate_AMSDU_announce(
7449         IN      PRTMP_ADAPTER   pAd,
7450         PNDIS_PACKET            pPacket,
7451         IN      PUCHAR                  pData,
7452         IN      ULONG                   DataSize);
7453
7454 NDIS_STATUS     RTMPCheckRxError(
7455         IN      PRTMP_ADAPTER   pAd,
7456         IN      PHEADER_802_11  pHeader,
7457         IN      PRXWI_STRUC     pRxWI,
7458         IN      PRT28XX_RXD_STRUC       pRxINFO);
7459
7460
7461 VOID RTUSBMlmeHardTransmit(
7462         IN      PRTMP_ADAPTER   pAd,
7463         IN      PMGMT_STRUC             pMgmt);
7464
7465 INT MlmeThread(
7466         IN PVOID Context);
7467
7468 //
7469 // Function Prototype in rtusb_data.c
7470 //
7471 NDIS_STATUS     RTUSBFreeDescriptorRequest(
7472         IN      PRTMP_ADAPTER   pAd,
7473         IN      UCHAR                   BulkOutPipeId,
7474         IN      UINT32                  NumberRequired);
7475
7476
7477 BOOLEAN RTUSBNeedQueueBackForAgg(
7478         IN RTMP_ADAPTER *pAd,
7479         IN UCHAR                BulkOutPipeId);
7480
7481
7482 VOID RTMPWriteTxInfo(
7483         IN      PRTMP_ADAPTER   pAd,
7484         IN      PTXINFO_STRUC   pTxInfo,
7485         IN        USHORT                USBDMApktLen,
7486         IN        BOOLEAN               bWiv,
7487         IN        UCHAR                 QueueSel,
7488         IN        UCHAR                 NextValid,
7489         IN        UCHAR                 TxBurst);
7490
7491 //
7492 // Function Prototype in cmm_data_2870.c
7493 //
7494 USHORT RtmpUSB_WriteSubTxResource(
7495         IN      PRTMP_ADAPTER   pAd,
7496         IN      TX_BLK                  *pTxBlk,
7497         IN      BOOLEAN                 bIsLast,
7498         OUT     USHORT                  *FreeNumber);
7499
7500 USHORT RtmpUSB_WriteSingleTxResource(
7501         IN      PRTMP_ADAPTER   pAd,
7502         IN      TX_BLK                  *pTxBlk,
7503         IN      BOOLEAN                 bIsLast,
7504         OUT     USHORT                  *FreeNumber);
7505
7506 USHORT  RtmpUSB_WriteFragTxResource(
7507         IN      PRTMP_ADAPTER   pAd,
7508         IN      TX_BLK                  *pTxBlk,
7509         IN      UCHAR                   fragNum,
7510         OUT     USHORT                  *FreeNumber);
7511
7512 USHORT RtmpUSB_WriteMultiTxResource(
7513         IN      PRTMP_ADAPTER   pAd,
7514         IN      TX_BLK                  *pTxBlk,
7515         IN      UCHAR                   frameNum,
7516         OUT     USHORT                  *FreeNumber);
7517
7518 VOID RtmpUSB_FinalWriteTxResource(
7519         IN      PRTMP_ADAPTER   pAd,
7520         IN      TX_BLK                  *pTxBlk,
7521         IN      USHORT                  totalMPDUSize,
7522         IN      USHORT                  TxIdx);
7523
7524 VOID RtmpUSBDataLastTxIdx(
7525         IN      PRTMP_ADAPTER   pAd,
7526         IN      UCHAR                   QueIdx,
7527         IN      USHORT                  TxIdx);
7528
7529 VOID RtmpUSBDataKickOut(
7530         IN      PRTMP_ADAPTER   pAd,
7531         IN      TX_BLK                  *pTxBlk,
7532         IN      UCHAR                   QueIdx);
7533
7534
7535 int RtmpUSBMgmtKickOut(
7536         IN RTMP_ADAPTER         *pAd,
7537         IN UCHAR                        QueIdx,
7538         IN PNDIS_PACKET         pPacket,
7539         IN PUCHAR                       pSrcBufVA,
7540         IN UINT                         SrcBufLen);
7541
7542 VOID RtmpUSBNullFrameKickOut(
7543         IN RTMP_ADAPTER *pAd,
7544         IN UCHAR                QueIdx,
7545         IN UCHAR                *pNullFrame,
7546         IN UINT32               frameLen);
7547
7548 VOID RT28xxUsbStaAsicForceWakeup(
7549         IN PRTMP_ADAPTER pAd,
7550         IN BOOLEAN       bFromTx);
7551
7552 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7553         IN PRTMP_ADAPTER pAd,
7554         IN USHORT TbttNumToNextWakeUp);
7555
7556 VOID RT28xxUsbMlmeRadioOn(
7557         IN PRTMP_ADAPTER pAd);
7558
7559 VOID RT28xxUsbMlmeRadioOFF(
7560         IN PRTMP_ADAPTER pAd);
7561 #endif // RT2870 //
7562
7563 ////////////////////////////////////////
7564
7565 VOID QBSS_LoadInit(
7566         IN              RTMP_ADAPTER    *pAd);
7567
7568 UINT32 QBSS_LoadElementAppend(
7569         IN              RTMP_ADAPTER    *pAd,
7570         OUT             UINT8                   *buf_p);
7571
7572 VOID QBSS_LoadUpdate(
7573         IN              RTMP_ADAPTER    *pAd);
7574
7575 ///////////////////////////////////////
7576 INT RTMPShowCfgValue(
7577         IN      PRTMP_ADAPTER   pAd,
7578         IN      PUCHAR                  pName,
7579         IN      PUCHAR                  pBuf);
7580
7581 PCHAR   RTMPGetRalinkAuthModeStr(
7582     IN  NDIS_802_11_AUTHENTICATION_MODE authMode);
7583
7584 PCHAR   RTMPGetRalinkEncryModeStr(
7585     IN  USHORT encryMode);
7586 //////////////////////////////////////
7587
7588 #ifdef CONFIG_STA_SUPPORT
7589 VOID AsicStaBbpTuning(
7590         IN PRTMP_ADAPTER pAd);
7591
7592 BOOLEAN StaAddMacTableEntry(
7593         IN  PRTMP_ADAPTER               pAd,
7594         IN  PMAC_TABLE_ENTRY    pEntry,
7595         IN  UCHAR                               MaxSupportedRateIn500Kbps,
7596         IN  HT_CAPABILITY_IE    *pHtCapability,
7597         IN  UCHAR                               HtCapabilityLen,
7598         IN  USHORT                      CapabilityInfo);
7599 #endif // CONFIG_STA_SUPPORT //
7600
7601 void RTMP_IndicateMediaState(
7602         IN      PRTMP_ADAPTER   pAd);
7603
7604 VOID ReSyncBeaconTime(
7605         IN  PRTMP_ADAPTER   pAd);
7606
7607 VOID RTMPSetAGCInitValue(
7608         IN PRTMP_ADAPTER        pAd,
7609         IN UCHAR                        BandWidth);
7610
7611 int rt28xx_close(IN PNET_DEV dev);
7612 int rt28xx_open(IN PNET_DEV dev);
7613
7614 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7615 {
7616 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7617 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7618
7619         if (VIRTUAL_IF_NUM(pAd) == 0)
7620         {
7621                 if (rt28xx_open(pAd->net_dev) != 0)
7622                         return -1;
7623         }
7624         else
7625         {
7626         }
7627         VIRTUAL_IF_INC(pAd);
7628         return 0;
7629 }
7630
7631 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7632 {
7633         VIRTUAL_IF_DEC(pAd);
7634         if (VIRTUAL_IF_NUM(pAd) == 0)
7635                 rt28xx_close(pAd->net_dev);
7636         return;
7637 }
7638
7639
7640 #endif  // __RTMP_H__
7641