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