]> Pileus Git - ~andy/linux/blob - drivers/staging/rt2860/rtmp.h
Staging: rt28x0: remove optional cmm profile parameters
[~andy/linux] / drivers / staging / rt2860 / 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 "spectrum_def.h"
44
45 #include "rtmp_dot11.h"
46
47 #undef AP_WSC_INCLUDED
48 #undef STA_WSC_INCLUDED
49 #undef WSC_INCLUDED
50
51
52
53 #if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED)
54 #define WSC_INCLUDED
55 #endif
56
57 #include "rtmp_chip.h"
58
59
60
61 typedef struct _RTMP_ADAPTER            RTMP_ADAPTER;
62 typedef struct _RTMP_ADAPTER            *PRTMP_ADAPTER;
63
64 typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP;
65
66
67 //#define DBG           1
68
69 //#define DBG_DIAGNOSE          1
70
71
72 //+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function
73 #define MAX_DATAMM_RETRY        3
74 #define MGMT_USE_QUEUE_FLAG     0x80
75 //---Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function
76
77 #define MAXSEQ          (0xFFF)
78
79 extern  unsigned char   SNAP_AIRONET[];
80 extern  unsigned char   CISCO_OUI[];
81 extern  UCHAR   BaSizeArray[4];
82
83 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
84 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
85 extern ULONG BIT32[32];
86 extern UCHAR BIT8[8];
87 extern char* CipherName[];
88 extern char* MCSToMbps[];
89 extern UCHAR     RxwiMCSToOfdmRate[12];
90 extern UCHAR SNAP_802_1H[6];
91 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
92 extern UCHAR SNAP_AIRONET[8];
93 extern UCHAR CKIP_LLC_SNAP[8];
94 extern UCHAR EAPOL_LLC_SNAP[8];
95 extern UCHAR EAPOL[2];
96 extern UCHAR IPX[2];
97 extern UCHAR APPLE_TALK[2];
98 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
99 extern UCHAR     OfdmRateToRxwiMCS[];
100 extern UCHAR OfdmSignalToRateId[16] ;
101 extern UCHAR default_cwmin[4];
102 extern UCHAR default_cwmax[4];
103 extern UCHAR default_sta_aifsn[4];
104 extern UCHAR MapUserPriorityToAccessCategory[8];
105
106 extern USHORT RateUpPER[];
107 extern USHORT RateDownPER[];
108 extern UCHAR  Phy11BNextRateDownward[];
109 extern UCHAR  Phy11BNextRateUpward[];
110 extern UCHAR  Phy11BGNextRateDownward[];
111 extern UCHAR  Phy11BGNextRateUpward[];
112 extern UCHAR  Phy11ANextRateDownward[];
113 extern UCHAR  Phy11ANextRateUpward[];
114 extern CHAR   RssiSafeLevelForTxRate[];
115 extern UCHAR  RateIdToMbps[];
116 extern USHORT RateIdTo500Kbps[];
117
118 extern UCHAR  CipherSuiteWpaNoneTkip[];
119 extern UCHAR  CipherSuiteWpaNoneTkipLen;
120
121 extern UCHAR  CipherSuiteWpaNoneAes[];
122 extern UCHAR  CipherSuiteWpaNoneAesLen;
123
124 extern UCHAR  SsidIe;
125 extern UCHAR  SupRateIe;
126 extern UCHAR  ExtRateIe;
127
128 extern UCHAR  HtCapIe;
129 extern UCHAR  AddHtInfoIe;
130 extern UCHAR  NewExtChanIe;
131
132 extern UCHAR  ErpIe;
133 extern UCHAR  DsIe;
134 extern UCHAR  TimIe;
135 extern UCHAR  WpaIe;
136 extern UCHAR  Wpa2Ie;
137 extern UCHAR  IbssIe;
138 extern UCHAR  Ccx2Ie;
139 extern UCHAR  WapiIe;
140
141 extern UCHAR  WPA_OUI[];
142 extern UCHAR  RSN_OUI[];
143 extern UCHAR  WAPI_OUI[];
144 extern UCHAR  WME_INFO_ELEM[];
145 extern UCHAR  WME_PARM_ELEM[];
146 extern UCHAR  Ccx2QosInfo[];
147 extern UCHAR  Ccx2IeInfo[];
148 extern UCHAR  RALINK_OUI[];
149 extern UCHAR  PowerConstraintIE[];
150
151
152 extern UCHAR  RateSwitchTable[];
153 extern UCHAR  RateSwitchTable11B[];
154 extern UCHAR  RateSwitchTable11G[];
155 extern UCHAR  RateSwitchTable11BG[];
156
157 extern UCHAR  RateSwitchTable11BGN1S[];
158 extern UCHAR  RateSwitchTable11BGN2S[];
159 extern UCHAR  RateSwitchTable11BGN2SForABand[];
160 extern UCHAR  RateSwitchTable11N1S[];
161 extern UCHAR  RateSwitchTable11N2S[];
162 extern UCHAR  RateSwitchTable11N2SForABand[];
163
164 extern UCHAR  PRE_N_HT_OUI[];
165
166
167
168
169 typedef struct  _RSSI_SAMPLE {
170         CHAR                    LastRssi0;             // last received RSSI
171         CHAR                    LastRssi1;             // last received RSSI
172         CHAR                    LastRssi2;             // last received RSSI
173         CHAR                    AvgRssi0;
174         CHAR                    AvgRssi1;
175         CHAR                    AvgRssi2;
176         SHORT                   AvgRssi0X8;
177         SHORT                   AvgRssi1X8;
178         SHORT                   AvgRssi2X8;
179 } RSSI_SAMPLE;
180
181 //
182 //  Queue structure and macros
183 //
184 typedef struct  _QUEUE_ENTRY    {
185         struct _QUEUE_ENTRY     *Next;
186 }   QUEUE_ENTRY, *PQUEUE_ENTRY;
187
188 // Queue structure
189 typedef struct  _QUEUE_HEADER   {
190         PQUEUE_ENTRY    Head;
191         PQUEUE_ENTRY    Tail;
192         ULONG           Number;
193 }   QUEUE_HEADER, *PQUEUE_HEADER;
194
195 #define InitializeQueueHeader(QueueHeader)              \
196 {                                                       \
197         (QueueHeader)->Head = (QueueHeader)->Tail = NULL;   \
198         (QueueHeader)->Number = 0;                          \
199 }
200
201 #define RemoveHeadQueue(QueueHeader)                \
202 (QueueHeader)->Head;                                \
203 {                                                   \
204         PQUEUE_ENTRY pNext;                             \
205         if ((QueueHeader)->Head != NULL)                                \
206         {                                                                                               \
207                 pNext = (QueueHeader)->Head->Next;          \
208                 (QueueHeader)->Head->Next = NULL;               \
209                 (QueueHeader)->Head = pNext;                \
210                 if (pNext == NULL)                          \
211                         (QueueHeader)->Tail = NULL;             \
212                 (QueueHeader)->Number--;                    \
213         }                                                                                               \
214 }
215
216 #define InsertHeadQueue(QueueHeader, QueueEntry)            \
217 {                                                           \
218                 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
219                 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry);       \
220                 if ((QueueHeader)->Tail == NULL)                        \
221                         (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry);   \
222                 (QueueHeader)->Number++;                                \
223 }
224
225 #define InsertTailQueue(QueueHeader, QueueEntry)                \
226 {                                                               \
227         ((PQUEUE_ENTRY)QueueEntry)->Next = NULL;                    \
228         if ((QueueHeader)->Tail)                                    \
229                 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
230         else                                                        \
231                 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry);       \
232         (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry);           \
233         (QueueHeader)->Number++;                                    \
234 }
235
236 #define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry)                 \
237 {                                                                                                                                               \
238         ((PQUEUE_ENTRY)QueueEntry)->Next = NULL;                                                        \
239         if ((QueueHeader)->Tail)                                                                                        \
240                 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry);                 \
241         else                                                                                                                            \
242                 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry);                               \
243         (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry);                                       \
244         (QueueHeader)->Number++;                                                                                        \
245 }
246
247
248
249 //
250 //  Macros for flag and ref count operations
251 //
252 #define RTMP_SET_FLAG(_M, _F)       ((_M)->Flags |= (_F))
253 #define RTMP_CLEAR_FLAG(_M, _F)     ((_M)->Flags &= ~(_F))
254 #define RTMP_CLEAR_FLAGS(_M)        ((_M)->Flags = 0)
255 #define RTMP_TEST_FLAG(_M, _F)      (((_M)->Flags & (_F)) != 0)
256 #define RTMP_TEST_FLAGS(_M, _F)     (((_M)->Flags & (_F)) == (_F))
257 // Macro for power save flag.
258 #define RTMP_SET_PSFLAG(_M, _F)       ((_M)->PSFlags |= (_F))
259 #define RTMP_CLEAR_PSFLAG(_M, _F)     ((_M)->PSFlags &= ~(_F))
260 #define RTMP_CLEAR_PSFLAGS(_M)        ((_M)->PSFlags = 0)
261 #define RTMP_TEST_PSFLAG(_M, _F)      (((_M)->PSFlags & (_F)) != 0)
262 #define RTMP_TEST_PSFLAGS(_M, _F)     (((_M)->PSFlags & (_F)) == (_F))
263
264 #define OPSTATUS_SET_FLAG(_pAd, _F)     ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
265 #define OPSTATUS_CLEAR_FLAG(_pAd, _F)   ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
266 #define OPSTATUS_TEST_FLAG(_pAd, _F)    (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
267
268 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F)      ((_pEntry)->ClientStatusFlags |= (_F))
269 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F)    ((_pEntry)->ClientStatusFlags &= ~(_F))
270 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F)     (((_pEntry)->ClientStatusFlags & (_F)) != 0)
271
272 #define RX_FILTER_SET_FLAG(_pAd, _F)    ((_pAd)->CommonCfg.PacketFilter |= (_F))
273 #define RX_FILTER_CLEAR_FLAG(_pAd, _F)  ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
274 #define RX_FILTER_TEST_FLAG(_pAd, _F)   (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
275
276 #define STA_NO_SECURITY_ON(_p)          (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
277 #define STA_WEP_ON(_p)                  (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
278 #define STA_TKIP_ON(_p)                 (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
279 #define STA_AES_ON(_p)                  (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
280
281 #define STA_TGN_WIFI_ON(_p)             (_p->StaCfg.bTGnWifiTest == TRUE)
282
283 #define CKIP_KP_ON(_p)                          ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
284 #define CKIP_CMIC_ON(_p)                        ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
285
286
287 #define INC_RING_INDEX(_idx, _RingSize)    \
288 {                                          \
289     (_idx) = (_idx+1) % (_RingSize);       \
290 }
291
292
293 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon.  Don't need to update here.
294 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd)                                 \
295 {                                                                                       \
296         _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth;      \
297         _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs;      \
298         _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF;      \
299         _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20;      \
300         _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40;      \
301         _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC;      \
302         _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC;      \
303         _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset;      \
304         _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth;      \
305         _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode;      \
306         _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent;      \
307         NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
308 }
309
310 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability)                                 \
311 {                                                                                       \
312         _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize);      \
313         _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs);   \
314         _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor);  \
315 }
316
317 //
318 // MACRO for 32-bit PCI register read / write
319 //
320 // Usage : RTMP_IO_READ32(
321 //              PRTMP_ADAPTER pAd,
322 //              ULONG Register_Offset,
323 //              PULONG  pValue)
324 //
325 //         RTMP_IO_WRITE32(
326 //              PRTMP_ADAPTER pAd,
327 //              ULONG Register_Offset,
328 //              ULONG Value)
329 //
330
331
332 //
333 // Common fragment list structure -  Identical to the scatter gather frag list structure
334 //
335 //#define RTMP_SCATTER_GATHER_ELEMENT         SCATTER_GATHER_ELEMENT
336 //#define PRTMP_SCATTER_GATHER_ELEMENT        PSCATTER_GATHER_ELEMENT
337 #define NIC_MAX_PHYS_BUF_COUNT              8
338
339 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
340     PVOID               Address;
341     ULONG               Length;
342     PULONG              Reserved;
343 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
344
345
346 typedef struct _RTMP_SCATTER_GATHER_LIST {
347     ULONG  NumberOfElements;
348     PULONG Reserved;
349     RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
350 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
351
352 //
353 //  Some utility macros
354 //
355 #ifndef min
356 #define min(_a, _b)     (((_a) < (_b)) ? (_a) : (_b))
357 #endif
358
359 #ifndef max
360 #define max(_a, _b)     (((_a) > (_b)) ? (_a) : (_b))
361 #endif
362
363 #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))))
364
365 #define INC_COUNTER64(Val)          (Val.QuadPart++)
366
367 #define INFRA_ON(_p)                (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
368 #define ADHOC_ON(_p)                (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
369 #define MONITOR_ON(_p)              (((_p)->StaCfg.BssType) == BSS_MONITOR)
370 #define IDLE_ON(_p)                 (!INFRA_ON(_p) && !ADHOC_ON(_p))
371
372 // Check LEAP & CCKM flags
373 #define LEAP_ON(_p)                 (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
374 #define LEAP_CCKM_ON(_p)            ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
375
376 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
377 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap)                \
378 {                                                                                                                               \
379         if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500)          \
380         {                                                                                                                       \
381                 _pExtraLlcSnapEncap = SNAP_802_1H;                                              \
382                 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) ||                    \
383                         NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2))           \
384                 {                                                                                                               \
385                         _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL;                       \
386                 }                                                                                                               \
387         }                                                                                                                       \
388         else                                                                                                            \
389         {                                                                                                                       \
390                 _pExtraLlcSnapEncap = NULL;                                                             \
391         }                                                                                                                       \
392 }
393
394 // New Define for new Tx Path.
395 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap)       \
396 {                                                                                                                               \
397         if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500)                        \
398         {                                                                                                                       \
399                 _pExtraLlcSnapEncap = SNAP_802_1H;                                              \
400                 if (NdisEqualMemory(IPX, _pBufVA, 2) ||                                 \
401                         NdisEqualMemory(APPLE_TALK, _pBufVA, 2))                        \
402                 {                                                                                                               \
403                         _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL;                       \
404                 }                                                                                                               \
405         }                                                                                                                       \
406         else                                                                                                            \
407         {                                                                                                                       \
408                 _pExtraLlcSnapEncap = NULL;                                                             \
409         }                                                                                                                       \
410 }
411
412
413 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType)                   \
414 {                                                                       \
415     NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN);                           \
416     NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN);          \
417     NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
418 }
419
420 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
421 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
422 // else remove the LLC/SNAP field from the result Ethernet frame
423 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
424 // Note:
425 //     _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
426 //     _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
427 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP)      \
428 {                                                                       \
429     char LLC_Len[2];                                                    \
430                                                                         \
431     _pRemovedLLCSNAP = NULL;                                            \
432     if (NdisEqualMemory(SNAP_802_1H, _pData, 6)  ||                     \
433         NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6))                 \
434     {                                                                   \
435         PUCHAR pProto = _pData + 6;                                     \
436                                                                         \
437         if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) &&  \
438             NdisEqualMemory(SNAP_802_1H, _pData, 6))                    \
439         {                                                               \
440             LLC_Len[0] = (UCHAR)(_DataSize / 256);                      \
441             LLC_Len[1] = (UCHAR)(_DataSize % 256);                      \
442             MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len);          \
443         }                                                               \
444         else                                                            \
445         {                                                               \
446             MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto);           \
447             _pRemovedLLCSNAP = _pData;                                  \
448             _DataSize -= LENGTH_802_1_H;                                \
449             _pData += LENGTH_802_1_H;                                   \
450         }                                                               \
451     }                                                                   \
452     else                                                                \
453     {                                                                   \
454         LLC_Len[0] = (UCHAR)(_DataSize / 256);                          \
455         LLC_Len[1] = (UCHAR)(_DataSize % 256);                          \
456         MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len);              \
457     }                                                                   \
458 }
459
460
461 // Enqueue this frame to MLME engine
462 // We need to enqueue the whole frame because MLME need to pass data type
463 // information from 802.11 header
464 #ifdef RTMP_MAC_PCI
465 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal)        \
466 {                                                                                       \
467     UINT32 High32TSF, Low32TSF;                                                          \
468     RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF);                                       \
469     RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF);                                        \
470     MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal);   \
471 }
472 #endif // RTMP_MAC_PCI //
473 #ifdef RTMP_MAC_USB
474 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal)        \
475 {                                                                                       \
476     UINT32 High32TSF=0, Low32TSF=0;                                                          \
477     MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal);   \
478 }
479 #endif // RTMP_MAC_USB //
480
481 #define MAC_ADDR_EQUAL(pAddr1,pAddr2)           RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
482 #define SSID_EQUAL(ssid1, len1, ssid2, len2)    ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
483
484 //
485 // Check if it is Japan W53(ch52,56,60,64) channel.
486 //
487 #define JapanChannelCheck(channel)  ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
488
489 #define STA_EXTRA_SETTING(_pAd)
490
491 #define STA_PORT_SECURED(_pAd) \
492 { \
493         BOOLEAN Cancelled; \
494         (_pAd)->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
495         NdisAcquireSpinLock(&((_pAd)->MacTabLock)); \
496         (_pAd)->MacTab.Content[BSSID_WCID].PortSecured = (_pAd)->StaCfg.PortSecured; \
497         (_pAd)->MacTab.Content[BSSID_WCID].PrivacyFilter = Ndis802_11PrivFilterAcceptAll;\
498         NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
499         RTMPCancelTimer(&((_pAd)->Mlme.LinkDownTimer), &Cancelled);\
500         STA_EXTRA_SETTING(_pAd); \
501 }
502
503
504
505 //
506 //  Data buffer for DMA operation, the buffer must be contiguous physical memory
507 //  Both DMA to / from CPU use the same structure.
508 //
509 typedef struct  _RTMP_DMABUF
510 {
511         ULONG                   AllocSize;
512         PVOID                   AllocVa;            // TxBuf virtual address
513         NDIS_PHYSICAL_ADDRESS   AllocPa;            // TxBuf physical address
514 } RTMP_DMABUF, *PRTMP_DMABUF;
515
516
517 //
518 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
519 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
520 // which won't be released, driver has to wait until upper layer return the packet
521 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
522 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
523 // which driver should ACK upper layer when the tx is physically done or failed.
524 //
525 typedef struct _RTMP_DMACB
526 {
527         ULONG                   AllocSize;          // Control block size
528         PVOID                   AllocVa;            // Control block virtual address
529         NDIS_PHYSICAL_ADDRESS   AllocPa;            // Control block physical address
530         PNDIS_PACKET pNdisPacket;
531         PNDIS_PACKET pNextNdisPacket;
532
533         RTMP_DMABUF             DmaBuf;             // Associated DMA buffer structure
534 } RTMP_DMACB, *PRTMP_DMACB;
535
536
537 typedef struct _RTMP_TX_RING
538 {
539         RTMP_DMACB  Cell[TX_RING_SIZE];
540         UINT32          TxCpuIdx;
541         UINT32          TxDmaIdx;
542         UINT32          TxSwFreeIdx;    // software next free tx index
543 } RTMP_TX_RING, *PRTMP_TX_RING;
544
545 typedef struct _RTMP_RX_RING
546 {
547         RTMP_DMACB  Cell[RX_RING_SIZE];
548         UINT32          RxCpuIdx;
549         UINT32          RxDmaIdx;
550         INT32           RxSwReadIdx;    // software next read index
551 } RTMP_RX_RING, *PRTMP_RX_RING;
552
553 typedef struct _RTMP_MGMT_RING
554 {
555         RTMP_DMACB  Cell[MGMT_RING_SIZE];
556         UINT32          TxCpuIdx;
557         UINT32          TxDmaIdx;
558         UINT32          TxSwFreeIdx; // software next free tx index
559 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
560
561 //
562 //  Statistic counter structure
563 //
564 typedef struct _COUNTER_802_3
565 {
566         // General Stats
567         ULONG       GoodTransmits;
568         ULONG       GoodReceives;
569         ULONG       TxErrors;
570         ULONG       RxErrors;
571         ULONG       RxNoBuffer;
572
573         // Ethernet Stats
574         ULONG       RcvAlignmentErrors;
575         ULONG       OneCollision;
576         ULONG       MoreCollisions;
577
578 } COUNTER_802_3, *PCOUNTER_802_3;
579
580 typedef struct _COUNTER_802_11 {
581         ULONG           Length;
582         LARGE_INTEGER   LastTransmittedFragmentCount;
583         LARGE_INTEGER   TransmittedFragmentCount;
584         LARGE_INTEGER   MulticastTransmittedFrameCount;
585         LARGE_INTEGER   FailedCount;
586         LARGE_INTEGER   RetryCount;
587         LARGE_INTEGER   MultipleRetryCount;
588         LARGE_INTEGER   RTSSuccessCount;
589         LARGE_INTEGER   RTSFailureCount;
590         LARGE_INTEGER   ACKFailureCount;
591         LARGE_INTEGER   FrameDuplicateCount;
592         LARGE_INTEGER   ReceivedFragmentCount;
593         LARGE_INTEGER   MulticastReceivedFrameCount;
594         LARGE_INTEGER   FCSErrorCount;
595 } COUNTER_802_11, *PCOUNTER_802_11;
596
597 typedef struct _COUNTER_RALINK {
598         ULONG           TransmittedByteCount;   // both successful and failure, used to calculate TX throughput
599         ULONG           ReceivedByteCount;      // both CRC okay and CRC error, used to calculate RX throughput
600         ULONG           BeenDisassociatedCount;
601         ULONG           BadCQIAutoRecoveryCount;
602         ULONG           PoorCQIRoamingCount;
603         ULONG           MgmtRingFullCount;
604         ULONG           RxCountSinceLastNULL;
605         ULONG           RxCount;
606         ULONG           RxRingErrCount;
607         ULONG           KickTxCount;
608         ULONG           TxRingErrCount;
609         LARGE_INTEGER   RealFcsErrCount;
610         ULONG           PendingNdisPacketCount;
611
612         ULONG           OneSecOsTxCount[NUM_OF_TX_RING];
613         ULONG           OneSecDmaDoneCount[NUM_OF_TX_RING];
614         UINT32          OneSecTxDoneCount;
615         ULONG           OneSecRxCount;
616         UINT32          OneSecTxAggregationCount;
617         UINT32          OneSecRxAggregationCount;
618         UINT32          OneSecReceivedByteCount;
619         UINT32                  OneSecFrameDuplicateCount;
620
621         UINT32          OneSecTransmittedByteCount;   // both successful and failure, used to calculate TX throughput
622         UINT32          OneSecTxNoRetryOkCount;
623         UINT32          OneSecTxRetryOkCount;
624         UINT32          OneSecTxFailCount;
625         UINT32          OneSecFalseCCACnt;      // CCA error count, for debug purpose, might move to global counter
626         UINT32          OneSecRxOkCnt;          // RX without error
627         UINT32          OneSecRxOkDataCnt;      // unicast-to-me DATA frame count
628         UINT32          OneSecRxFcsErrCnt;      // CRC error
629         UINT32          OneSecBeaconSentCnt;
630         UINT32          LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
631         UINT32          LastOneSecRxOkDataCnt;  // OneSecRxOkDataCnt
632         ULONG           DuplicateRcv;
633         ULONG           TxAggCount;
634         ULONG           TxNonAggCount;
635         ULONG           TxAgg1MPDUCount;
636         ULONG           TxAgg2MPDUCount;
637         ULONG           TxAgg3MPDUCount;
638         ULONG           TxAgg4MPDUCount;
639         ULONG           TxAgg5MPDUCount;
640         ULONG           TxAgg6MPDUCount;
641         ULONG           TxAgg7MPDUCount;
642         ULONG           TxAgg8MPDUCount;
643         ULONG           TxAgg9MPDUCount;
644         ULONG           TxAgg10MPDUCount;
645         ULONG           TxAgg11MPDUCount;
646         ULONG           TxAgg12MPDUCount;
647         ULONG           TxAgg13MPDUCount;
648         ULONG           TxAgg14MPDUCount;
649         ULONG           TxAgg15MPDUCount;
650         ULONG           TxAgg16MPDUCount;
651
652         LARGE_INTEGER       TransmittedOctetsInAMSDU;
653         LARGE_INTEGER       TransmittedAMSDUCount;
654         LARGE_INTEGER       ReceivedOctesInAMSDUCount;
655         LARGE_INTEGER       ReceivedAMSDUCount;
656         LARGE_INTEGER       TransmittedAMPDUCount;
657         LARGE_INTEGER       TransmittedMPDUsInAMPDUCount;
658         LARGE_INTEGER       TransmittedOctetsInAMPDUCount;
659         LARGE_INTEGER       MPDUInReceivedAMPDUCount;
660 } COUNTER_RALINK, *PCOUNTER_RALINK;
661
662
663 typedef struct _COUNTER_DRS {
664         // to record the each TX rate's quality. 0 is best, the bigger the worse.
665         USHORT          TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
666         UCHAR           PER[MAX_STEP_OF_TX_RATE_SWITCH];
667         UCHAR           TxRateUpPenalty;      // extra # of second penalty due to last unstable condition
668         ULONG           CurrTxRateStableTime; // # of second in current TX rate
669         BOOLEAN         fNoisyEnvironment;
670         BOOLEAN         fLastSecAccordingRSSI;
671         UCHAR           LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
672         UCHAR                   LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
673         ULONG                   LastTxOkCount;
674 } COUNTER_DRS, *PCOUNTER_DRS;
675
676
677
678
679 /***************************************************************************
680   *     security key related data structure
681   **************************************************************************/
682 typedef struct _CIPHER_KEY {
683         UCHAR   Key[16];            // right now we implement 4 keys, 128 bits max
684         UCHAR   RxMic[8];                       // make alignment
685         UCHAR   TxMic[8];
686         UCHAR   TxTsc[6];           // 48bit TSC value
687         UCHAR   RxTsc[6];           // 48bit TSC value
688         UCHAR   CipherAlg;          // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
689         UCHAR   KeyLen;
690         UCHAR   BssId[6];
691             // Key length for each key, 0: entry is invalid
692         UCHAR   Type;               // Indicate Pairwise/Group when reporting MIC error
693 } CIPHER_KEY, *PCIPHER_KEY;
694
695
696 // structure to define WPA Group Key Rekey Interval
697 typedef struct PACKED _RT_802_11_WPA_REKEY {
698         ULONG ReKeyMethod;          // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
699         ULONG ReKeyInterval;        // time-based: seconds, packet-based: kilo-packets
700 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
701
702 #ifdef RTMP_MAC_USB
703 /***************************************************************************
704   *     RTUSB I/O related data structure
705   **************************************************************************/
706 typedef struct   _RT_SET_ASIC_WCID {
707         ULONG WCID;          // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
708         ULONG SetTid;        // time-based: seconds, packet-based: kilo-packets
709         ULONG DeleteTid;        // time-based: seconds, packet-based: kilo-packets
710         UCHAR Addr[MAC_ADDR_LEN];       // avoid in interrupt when write key
711 } RT_SET_ASIC_WCID,*PRT_SET_ASIC_WCID;
712
713 typedef struct   _RT_SET_ASIC_WCID_ATTRI {
714         ULONG   WCID;          // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
715         ULONG   Cipher;        // ASIC Cipher definition
716         UCHAR   Addr[ETH_LENGTH_OF_ADDRESS];
717 } RT_SET_ASIC_WCID_ATTRI,*PRT_SET_ASIC_WCID_ATTRI;
718
719 // for USB interface, avoid in interrupt when write key
720 typedef struct   RT_ADD_PAIRWISE_KEY_ENTRY {
721         UCHAR                   MacAddr[6];
722         USHORT               MacTabMatchWCID;        // ASIC
723         CIPHER_KEY         CipherKey;
724 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
725
726 // Cipher suite type for mixed mode group cipher, P802.11i-2004
727 typedef enum _RT_802_11_CIPHER_SUITE_TYPE {
728         Cipher_Type_NONE,
729         Cipher_Type_WEP40,
730         Cipher_Type_TKIP,
731         Cipher_Type_RSVD,
732         Cipher_Type_CCMP,
733         Cipher_Type_WEP104
734 } RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE;
735 #endif // RTMP_MAC_USB //
736
737 typedef struct {
738         UCHAR        Addr[MAC_ADDR_LEN];
739         UCHAR        ErrorCode[2];  //00 01-Invalid authentication type
740                                                                 //00 02-Authentication timeout
741                                                                 //00 03-Challenge from AP failed
742                                                                 //00 04-Challenge to AP failed
743         BOOLEAN      Reported;
744 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
745
746 typedef struct {
747         UCHAR               RogueApNr;
748         ROGUEAP_ENTRY       RogueApEntry[MAX_LEN_OF_BSS_TABLE];
749 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
750
751 //
752 // Cisco IAPP format
753 //
754 typedef struct  _CISCO_IAPP_CONTENT_
755 {
756         USHORT     Length;        //IAPP Length
757         UCHAR      MessageType;      //IAPP type
758         UCHAR      FunctionCode;     //IAPP function type
759         UCHAR      DestinaionMAC[MAC_ADDR_LEN];
760         UCHAR      SourceMAC[MAC_ADDR_LEN];
761         USHORT     Tag;           //Tag(element IE) - Adjacent AP report
762         USHORT     TagLength;     //Length of element not including 4 byte header
763         UCHAR      OUI[4];           //0x00, 0x40, 0x96, 0x00
764         UCHAR      PreviousAP[MAC_ADDR_LEN];       //MAC Address of access point
765         USHORT     Channel;
766         USHORT     SsidLen;
767         UCHAR      Ssid[MAX_LEN_OF_SSID];
768         USHORT     Seconds;          //Seconds that the client has been disassociated.
769 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
770
771
772 /*
773   *     Fragment Frame structure
774   */
775 typedef struct  _FRAGMENT_FRAME {
776         PNDIS_PACKET    pFragPacket;
777         ULONG       RxSize;
778         USHORT      Sequence;
779         USHORT      LastFrag;
780         ULONG       Flags;          // Some extra frame information. bit 0: LLC presented
781 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
782
783
784 //
785 // Packet information for NdisQueryPacket
786 //
787 typedef struct  _PACKET_INFO    {
788         UINT            PhysicalBufferCount;    // Physical breaks of buffer descripor chained
789         UINT            BufferCount ;           // Number of Buffer descriptor chained
790         UINT            TotalPacketLength ;     // Self explained
791         PNDIS_BUFFER    pFirstBuffer;           // Pointer to first buffer descriptor
792 } PACKET_INFO, *PPACKET_INFO;
793
794
795 //
796 //  Arcfour Structure Added by PaulWu
797 //
798 typedef struct  _ARCFOUR
799 {
800         UINT            X;
801         UINT            Y;
802         UCHAR           STATE[256];
803 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
804
805
806 //
807 // Tkip Key structure which RC4 key & MIC calculation
808 //
809 typedef struct  _TKIP_KEY_INFO  {
810         UINT        nBytesInM;  // # bytes in M for MICKEY
811         ULONG       IV16;
812         ULONG       IV32;
813         ULONG       K0;         // for MICKEY Low
814         ULONG       K1;         // for MICKEY Hig
815         ULONG       L;          // Current state for MICKEY
816         ULONG       R;          // Current state for MICKEY
817         ULONG       M;          // Message accumulator for MICKEY
818         UCHAR       RC4KEY[16];
819         UCHAR       MIC[8];
820 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
821
822 //
823 // Private / Misc data, counters for driver internal use
824 //
825 typedef struct  __PRIVATE_STRUC {
826         UINT       SystemResetCnt;         // System reset counter
827         UINT       TxRingFullCnt;          // Tx ring full occurrance number
828         UINT       PhyRxErrCnt;            // PHY Rx error count, for debug purpose, might move to global counter
829         // Variables for WEP encryption / decryption in rtmp_wep.c
830         UINT       FCSCRC32;
831         ARCFOURCONTEXT  WEPCONTEXT;
832         // Tkip stuff
833         TKIP_KEY_INFO   Tx;
834         TKIP_KEY_INFO   Rx;
835 } PRIVATE_STRUC, *PPRIVATE_STRUC;
836
837
838 /***************************************************************************
839   *     Channel and BBP related data structures
840   **************************************************************************/
841 // structure to tune BBP R66 (BBP TUNING)
842 typedef struct _BBP_R66_TUNING {
843         BOOLEAN     bEnable;
844         USHORT      FalseCcaLowerThreshold;  // default 100
845         USHORT      FalseCcaUpperThreshold;  // default 512
846         UCHAR       R66Delta;
847         UCHAR       R66CurrentValue;
848         BOOLEAN         R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
849 } BBP_R66_TUNING, *PBBP_R66_TUNING;
850
851 // structure to store channel TX power
852 typedef struct _CHANNEL_TX_POWER {
853         USHORT     RemainingTimeForUse;         //unit: sec
854         UCHAR      Channel;
855         CHAR       Power;
856         CHAR       Power2;
857         UCHAR      MaxTxPwr;
858         UCHAR      DfsReq;
859 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
860
861 // structure to store 802.11j channel TX power
862 typedef struct _CHANNEL_11J_TX_POWER {
863         UCHAR      Channel;
864         UCHAR      BW;  // BW_10 or BW_20
865         CHAR       Power;
866         CHAR       Power2;
867         USHORT     RemainingTimeForUse;         //unit: sec
868 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
869
870 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
871         UCHAR     EvaluatePeriod;                // 0:not evalute status, 1: evaluate status, 2: switching status
872         UCHAR     EvaluateStableCnt;
873         UCHAR     Pair1PrimaryRxAnt;     // 0:Ant-E1, 1:Ant-E2
874         UCHAR     Pair1SecondaryRxAnt;   // 0:Ant-E1, 1:Ant-E2
875         UCHAR     Pair2PrimaryRxAnt;     // 0:Ant-E3, 1:Ant-E4
876         UCHAR     Pair2SecondaryRxAnt;   // 0:Ant-E3, 1:Ant-E4
877         SHORT     Pair1AvgRssi[2];       // AvgRssi[0]:E1, AvgRssi[1]:E2
878         SHORT     Pair2AvgRssi[2];       // AvgRssi[0]:E3, AvgRssi[1]:E4
879         SHORT     Pair1LastAvgRssi;      //
880         SHORT     Pair2LastAvgRssi;      //
881         ULONG     RcvPktNumWhenEvaluate;
882         BOOLEAN   FirstPktArrivedWhenEvaluate;
883         RALINK_TIMER_STRUCT    RxAntDiversityTimer;
884 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
885
886
887 /***************************************************************************
888   *     structure for radar detection and channel switch
889   **************************************************************************/
890 typedef struct _RADAR_DETECT_STRUCT {
891     //BOOLEAN           IEEE80211H;                     // 0: disable, 1: enable IEEE802.11h
892         UCHAR           CSCount;                        //Channel switch counter
893         UCHAR           CSPeriod;                       //Channel switch period (beacon count)
894         UCHAR           RDCount;                        //Radar detection counter
895         UCHAR           RDMode;                         //Radar Detection mode
896         UCHAR           RDDurRegion;            //Radar detection duration region
897         UCHAR           BBPR16;
898         UCHAR           BBPR17;
899         UCHAR           BBPR18;
900         UCHAR           BBPR21;
901         UCHAR           BBPR22;
902         UCHAR           BBPR64;
903         ULONG           InServiceMonitorCount; // unit: sec
904         UINT8           DfsSessionTime;
905         BOOLEAN         bFastDfs;
906         UINT8           ChMovingTime;
907         UINT8           LongPulseRadarTh;
908 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
909
910 typedef enum _ABGBAND_STATE_ {
911         UNKNOWN_BAND,
912         BG_BAND,
913         A_BAND,
914 } ABGBAND_STATE;
915
916 #ifdef RTMP_MAC_PCI
917 // Power save method control
918 typedef union   _PS_CONTROL     {
919         struct  {
920                 ULONG           EnablePSinIdle:1;                       // Enable radio off when not connect to AP. radio on only when sitesurvey,
921                 ULONG           EnableNewPS:1;          // Enable new  Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe.
922                 ULONG           rt30xxPowerMode:2;                      // Power Level Mode for rt30xx chip
923                 ULONG           rt30xxFollowHostASPM:1;                 // Card Follows Host's setting for rt30xx chip.
924                 ULONG           rt30xxForceASPMTest:1;                  // Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode.
925                 ULONG           rsv:26;                 // Radio Measurement Enable
926         }       field;
927         ULONG                   word;
928 }       PS_CONTROL, *PPS_CONTROL;
929 #endif // RTMP_MAC_PCI //
930
931 /***************************************************************************
932   *     structure for MLME state machine
933   **************************************************************************/
934 typedef struct _MLME_STRUCT {
935         // STA state machines
936         STATE_MACHINE           CntlMachine;
937         STATE_MACHINE           AssocMachine;
938         STATE_MACHINE           AuthMachine;
939         STATE_MACHINE           AuthRspMachine;
940         STATE_MACHINE           SyncMachine;
941         STATE_MACHINE           WpaPskMachine;
942         STATE_MACHINE           LeapMachine;
943         STATE_MACHINE_FUNC      AssocFunc[ASSOC_FUNC_SIZE];
944         STATE_MACHINE_FUNC      AuthFunc[AUTH_FUNC_SIZE];
945         STATE_MACHINE_FUNC      AuthRspFunc[AUTH_RSP_FUNC_SIZE];
946         STATE_MACHINE_FUNC      SyncFunc[SYNC_FUNC_SIZE];
947         STATE_MACHINE_FUNC      ActFunc[ACT_FUNC_SIZE];
948         // Action
949         STATE_MACHINE           ActMachine;
950
951
952
953
954         // common WPA state machine
955         STATE_MACHINE           WpaMachine;
956         STATE_MACHINE_FUNC      WpaFunc[WPA_FUNC_SIZE];
957
958
959
960         ULONG                   ChannelQuality;  // 0..100, Channel Quality Indication for Roaming
961         ULONG                   Now32;           // latch the value of NdisGetSystemUpTime()
962         ULONG                   LastSendNULLpsmTime;
963
964         BOOLEAN                 bRunning;
965         NDIS_SPIN_LOCK          TaskLock;
966         MLME_QUEUE              Queue;
967
968         UINT                    ShiftReg;
969
970         RALINK_TIMER_STRUCT     PeriodicTimer;
971         RALINK_TIMER_STRUCT     APSDPeriodicTimer;
972         RALINK_TIMER_STRUCT     LinkDownTimer;
973         RALINK_TIMER_STRUCT     LinkUpTimer;
974 #ifdef RTMP_MAC_PCI
975     UCHAR                   bPsPollTimerRunning;
976     RALINK_TIMER_STRUCT     PsPollTimer;
977         RALINK_TIMER_STRUCT     RadioOnOffTimer;
978 #endif // RTMP_MAC_PCI //
979         ULONG                   PeriodicRound;
980         ULONG                   OneSecPeriodicRound;
981
982         UCHAR                                   RealRxPath;
983         BOOLEAN                                 bLowThroughput;
984         BOOLEAN                                 bEnableAutoAntennaCheck;
985         RALINK_TIMER_STRUCT             RxAntEvalTimer;
986
987 #ifdef RT30xx
988         UCHAR CaliBW40RfR24;
989         UCHAR CaliBW20RfR24;
990 #endif // RT30xx //
991
992 #ifdef RTMP_MAC_USB
993         RALINK_TIMER_STRUCT     AutoWakeupTimer;
994         BOOLEAN                                 AutoWakeupTimerRunning;
995 #endif // RTMP_MAC_USB //
996 } MLME_STRUCT, *PMLME_STRUCT;
997
998
999 /***************************************************************************
1000   *     802.11 N related data structures
1001   **************************************************************************/
1002 struct reordering_mpdu
1003 {
1004         struct reordering_mpdu  *next;
1005         PNDIS_PACKET                    pPacket;                /* coverted to 802.3 frame */
1006         int                                             Sequence;               /* sequence number of MPDU */
1007         BOOLEAN                                 bAMSDU;
1008 };
1009
1010 struct reordering_list
1011 {
1012         struct reordering_mpdu *next;
1013         int     qlen;
1014 };
1015
1016 struct reordering_mpdu_pool
1017 {
1018         PVOID                                   mem;
1019         NDIS_SPIN_LOCK                  lock;
1020         struct reordering_list  freelist;
1021 };
1022
1023 typedef enum _REC_BLOCKACK_STATUS
1024 {
1025     Recipient_NONE=0,
1026         Recipient_USED,
1027         Recipient_HandleRes,
1028     Recipient_Accept
1029 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1030
1031 typedef enum _ORI_BLOCKACK_STATUS
1032 {
1033     Originator_NONE=0,
1034         Originator_USED,
1035     Originator_WaitRes,
1036     Originator_Done
1037 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1038
1039 typedef struct _BA_ORI_ENTRY{
1040         UCHAR   Wcid;
1041         UCHAR   TID;
1042         UCHAR   BAWinSize;
1043         UCHAR   Token;
1044 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1045         USHORT  Sequence;
1046         USHORT  TimeOutValue;
1047         ORI_BLOCKACK_STATUS  ORI_BA_Status;
1048         RALINK_TIMER_STRUCT ORIBATimer;
1049         PVOID   pAdapter;
1050 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1051
1052 typedef struct _BA_REC_ENTRY {
1053         UCHAR   Wcid;
1054         UCHAR   TID;
1055         UCHAR   BAWinSize;      // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1056         //UCHAR NumOfRxPkt;
1057         //UCHAR    Curindidx; // the head in the RX reordering buffer
1058         USHORT          LastIndSeq;
1059 //      USHORT          LastIndSeqAtTimer;
1060         USHORT          TimeOutValue;
1061         RALINK_TIMER_STRUCT RECBATimer;
1062         ULONG           LastIndSeqAtTimer;
1063         ULONG           nDropPacket;
1064         ULONG           rcvSeq;
1065         REC_BLOCKACK_STATUS  REC_BA_Status;
1066 //      UCHAR   RxBufIdxUsed;
1067         // corresponding virtual address for RX reordering packet storage.
1068         //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1069         NDIS_SPIN_LOCK          RxReRingLock;                 // Rx Ring spinlock
1070 //      struct _BA_REC_ENTRY *pNext;
1071         PVOID   pAdapter;
1072         struct reordering_list  list;
1073 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1074
1075
1076 typedef struct {
1077         ULONG           numAsRecipient;         // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1078         ULONG           numAsOriginator;        // I am originator of   numAsOriginator clients. These clients are in the BAOriEntry[]
1079         ULONG           numDoneOriginator;      // count Done Originator sessions
1080         BA_ORI_ENTRY       BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1081         BA_REC_ENTRY       BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1082 } BA_TABLE, *PBA_TABLE;
1083
1084 //For QureyBATableOID use;
1085 typedef struct  PACKED _OID_BA_REC_ENTRY{
1086         UCHAR   MACAddr[MAC_ADDR_LEN];
1087         UCHAR   BaBitmap;   // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1088         UCHAR   rsv;
1089         UCHAR   BufSize[8];
1090         REC_BLOCKACK_STATUS     REC_BA_Status[8];
1091 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1092
1093 //For QureyBATableOID use;
1094 typedef struct  PACKED _OID_BA_ORI_ENTRY{
1095         UCHAR   MACAddr[MAC_ADDR_LEN];
1096         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
1097         UCHAR   rsv;
1098         UCHAR   BufSize[8];
1099         ORI_BLOCKACK_STATUS  ORI_BA_Status[8];
1100 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1101
1102 typedef struct _QUERYBA_TABLE{
1103         OID_BA_ORI_ENTRY       BAOriEntry[32];
1104         OID_BA_REC_ENTRY       BARecEntry[32];
1105         UCHAR   OriNum;// Number of below BAOriEntry
1106         UCHAR   RecNum;// Number of below BARecEntry
1107 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1108
1109 typedef union   _BACAP_STRUC    {
1110         struct  {
1111                 UINT32          RxBAWinLimit:8;
1112                 UINT32          TxBAWinLimit:8;
1113                 UINT32          AutoBA:1;       // automatically BA
1114                 UINT32          Policy:2;       // 0: DELAY_BA 1:IMMED_BA  (//BA Policy subfiled value in ADDBA frame)   2:BA-not use
1115                 UINT32          MpduDensity:3;
1116                 UINT32          AmsduEnable:1;  //Enable AMSDU transmisstion
1117                 UINT32          AmsduSize:1;    // 0:3839, 1:7935 bytes. UINT  MSDUSizeToBytes[]        = { 3839, 7935};
1118                 UINT32          MMPSmode:2;     // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1119                 UINT32          bHtAdhoc:1;                     // adhoc can use ht rate.
1120                 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.
1121                 UINT32          :4;
1122         }       field;
1123         UINT32                  word;
1124 } BACAP_STRUC, *PBACAP_STRUC;
1125
1126
1127 typedef struct {
1128         BOOLEAN         IsRecipient;
1129         UCHAR   MACAddr[MAC_ADDR_LEN];
1130         UCHAR   TID;
1131         UCHAR   nMSDU;
1132         USHORT   TimeOut;
1133         BOOLEAN bAllTid;  // If True, delete all TID for BA sessions with this MACaddr.
1134 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1135
1136
1137
1138 #define IS_HT_STA(_pMacEntry)   \
1139         (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
1140
1141 #define IS_HT_RATE(_pMacEntry)  \
1142         (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1143
1144 #define PEER_IS_HT_RATE(_pMacEntry)     \
1145         (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1146
1147
1148
1149 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second.  (Details see MLMEPeriodic)
1150 typedef struct  _IOT_STRUC      {
1151         UCHAR                   Threshold[2];
1152         UCHAR                   ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE];     // compare with threshold[0]
1153         UCHAR                   RefreshNum[MAX_LEN_OF_BA_REC_TABLE];    // compare with threshold[1]
1154         ULONG                   OneSecInWindowCount;
1155         ULONG                   OneSecFrameDuplicateCount;
1156         ULONG                   OneSecOutWindowCount;
1157         UCHAR                   DelOriAct;
1158         UCHAR                   DelRecAct;
1159         UCHAR                   RTSShortProt;
1160         UCHAR                   RTSLongProt;
1161         BOOLEAN                 bRTSLongProtOn;
1162         BOOLEAN                 bLastAtheros;
1163     BOOLEAN                     bCurrentAtheros;
1164     BOOLEAN         bNowAtherosBurstOn;
1165         BOOLEAN                 bNextDisableRxBA;
1166     BOOLEAN                     bToggle;
1167 } IOT_STRUC, *PIOT_STRUC;
1168
1169 // This is the registry setting for 802.11n transmit setting.  Used in advanced page.
1170 typedef union _REG_TRANSMIT_SETTING {
1171  struct {
1172          //UINT32  PhyMode:4;
1173          //UINT32  MCS:7;                 // MCS
1174                  UINT32  rsv0:10;
1175                  UINT32  TxBF:1;
1176          UINT32  BW:1; //channel bandwidth 20MHz or 40 MHz
1177          UINT32  ShortGI:1;
1178          UINT32  STBC:1; //SPACE
1179          UINT32  TRANSNO:2;
1180          UINT32  HTMODE:1;
1181          UINT32  EXTCHA:2;
1182          UINT32  rsv:13;
1183     } field;
1184  UINT32   word;
1185 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1186
1187 typedef union  _DESIRED_TRANSMIT_SETTING {
1188         struct  {
1189                         USHORT          MCS:7;                  // MCS
1190                         USHORT          PhyMode:4;
1191                         USHORT          FixedTxMode:2;                  // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1192                         USHORT          rsv:3;
1193         }       field;
1194         USHORT          word;
1195  } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1196
1197 #ifdef RTMP_MAC_USB
1198 /***************************************************************************
1199   *     USB-based chip Beacon related data structures
1200   **************************************************************************/
1201 #define BEACON_BITMAP_MASK              0xff
1202 typedef struct _BEACON_SYNC_STRUCT_
1203 {
1204         UCHAR                           BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1205         UCHAR                                   BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1206         ULONG                                   TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1207         ULONG                                   CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1208         BOOLEAN                                 EnableBeacon;           // trigger to enable beacon transmission.
1209         UCHAR                                   BeaconBitMap;           // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1210         UCHAR                                   DtimBitOn;                      // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1211 }BEACON_SYNC_STRUCT;
1212 #endif // RTMP_MAC_USB //
1213
1214 /***************************************************************************
1215   *     Multiple SSID related data structures
1216   **************************************************************************/
1217 #define WLAN_MAX_NUM_OF_TIM                     ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1218 #define WLAN_CT_TIM_BCMC_OFFSET         0 /* unit: 32B */
1219
1220 /* clear bcmc TIM bit */
1221 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1222         pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1223
1224 /* set bcmc TIM bit */
1225 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1226         pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1227
1228 /* clear a station PS TIM bit */
1229 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1230         {       UCHAR tim_offset = wcid >> 3; \
1231                 UCHAR bit_offset = wcid & 0x7; \
1232                 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1233
1234 /* set a station PS TIM bit */
1235 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1236         {       UCHAR tim_offset = wcid >> 3; \
1237                 UCHAR bit_offset = wcid & 0x7; \
1238                 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1239
1240
1241 // configuration common to OPMODE_AP as well as OPMODE_STA
1242 typedef struct _COMMON_CONFIG {
1243
1244         BOOLEAN         bCountryFlag;
1245         UCHAR           CountryCode[3];
1246         UCHAR           Geography;
1247         UCHAR       CountryRegion;      // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1248         UCHAR       CountryRegionForABand;      // Enum of country region for A band
1249         UCHAR       PhyMode;            // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1250         USHORT      Dsifs;              // in units of usec
1251         ULONG       PacketFilter;       // Packet filter for receiving
1252         UINT8           RegulatoryClass;
1253
1254         CHAR        Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1255         UCHAR       SsidLen;               // the actual ssid length in used
1256         UCHAR       LastSsidLen;               // the actual ssid length in used
1257         CHAR        LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1258         UCHAR           LastBssid[MAC_ADDR_LEN];
1259
1260         UCHAR       Bssid[MAC_ADDR_LEN];
1261         USHORT      BeaconPeriod;
1262         UCHAR       Channel;
1263         UCHAR       CentralChannel;     // Central Channel when using 40MHz is indicating. not real channel.
1264
1265         UCHAR       SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1266         UCHAR       SupRateLen;
1267         UCHAR       ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1268         UCHAR       ExtRateLen;
1269         UCHAR       DesireRate[MAX_LEN_OF_SUPPORTED_RATES];      // OID_802_11_DESIRED_RATES
1270         UCHAR       MaxDesiredRate;
1271         UCHAR       ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1272
1273         ULONG       BasicRateBitmap;        // backup basic ratebitmap
1274
1275         BOOLEAN         bAPSDCapable;
1276         BOOLEAN         bInServicePeriod;
1277         BOOLEAN         bAPSDAC_BE;
1278         BOOLEAN         bAPSDAC_BK;
1279         BOOLEAN         bAPSDAC_VI;
1280         BOOLEAN         bAPSDAC_VO;
1281
1282         /* because TSPEC can modify the APSD flag, we need to keep the APSD flag
1283                 requested in association stage from the station;
1284                 we need to recover the APSD flag after the TSPEC is deleted. */
1285         BOOLEAN         bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */
1286         BOOLEAN         bACMAPSDTr[4]; /* no use */
1287
1288         BOOLEAN         bNeedSendTriggerFrame;
1289         BOOLEAN         bAPSDForcePowerSave;    // Force power save mode, should only use in APSD-STAUT
1290         ULONG           TriggerTimerCount;
1291         UCHAR           MaxSPLength;
1292         UCHAR           BBPCurrentBW;   // BW_10,       BW_20, BW_40
1293         // move to MULTISSID_STRUCT for MBSS
1294         //HTTRANSMIT_SETTING    HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1295         REG_TRANSMIT_SETTING        RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1296         //UCHAR       FixedTxMode;              // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1297         UCHAR       TxRate;                 // Same value to fill in TXD. TxRate is 6-bit
1298         UCHAR       MaxTxRate;              // RATE_1, RATE_2, RATE_5_5, RATE_11
1299         UCHAR       TxRateIndex;            // Tx rate index in RateSwitchTable
1300         UCHAR       TxRateTableSize;        // Valid Tx rate table size in RateSwitchTable
1301         //BOOLEAN               bAutoTxRateSwitch;
1302         UCHAR       MinTxRate;              // RATE_1, RATE_2, RATE_5_5, RATE_11
1303         UCHAR       RtsRate;                // RATE_xxx
1304         HTTRANSMIT_SETTING      MlmeTransmit;   // MGMT frame PHY rate setting when operatin at Ht rate.
1305         UCHAR       MlmeRate;               // RATE_xxx, used to send MLME frames
1306         UCHAR       BasicMlmeRate;          // Default Rate for sending MLME frames
1307
1308         USHORT      RtsThreshold;           // in unit of BYTE
1309         USHORT      FragmentThreshold;      // in unit of BYTE
1310
1311         UCHAR       TxPower;                // in unit of mW
1312         ULONG       TxPowerPercentage;      // 0~100 %
1313         ULONG       TxPowerDefault;         // keep for TxPowerPercentage
1314         UINT8           PwrConstraint;
1315
1316         BACAP_STRUC        BACapability; //   NO USE = 0XFF  ;  IMMED_BA =1  ;  DELAY_BA=0
1317         BACAP_STRUC        REGBACapability; //   NO USE = 0XFF  ;  IMMED_BA =1  ;  DELAY_BA=0
1318
1319         IOT_STRUC               IOTestParm;     // 802.11n InterOpbility Test Parameter;
1320         ULONG       TxPreamble;             // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1321         BOOLEAN     bUseZeroToDisableFragment;     // Microsoft use 0 as disable
1322         ULONG       UseBGProtection;        // 0: auto, 1: always use, 2: always not use
1323         BOOLEAN     bUseShortSlotTime;      // 0: disable, 1 - use short slot (9us)
1324         BOOLEAN     bEnableTxBurst;         // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST
1325         BOOLEAN     bAggregationCapable;      // 1: enable TX aggregation when the peer supports it
1326         BOOLEAN     bPiggyBackCapable;          // 1: enable TX piggy-back according MAC's version
1327         BOOLEAN     bIEEE80211H;                        // 1: enable IEEE802.11h spec.
1328         ULONG           DisableOLBCDetect;              // 0: enable OLBC detect; 1 disable OLBC detect
1329
1330         BOOLEAN                         bRdg;
1331
1332         BOOLEAN             bWmmCapable;        // 0:disable WMM, 1:enable WMM
1333         QOS_CAPABILITY_PARM APQosCapability;    // QOS capability of the current associated AP
1334         EDCA_PARM           APEdcaParm;         // EDCA parameters of the current associated AP
1335         QBSS_LOAD_PARM      APQbssLoad;         // QBSS load of the current associated AP
1336         UCHAR               AckPolicy[4];       // ACK policy of the specified AC. see ACK_xxx
1337         BOOLEAN                         bDLSCapable;            // 0:disable DLS, 1:enable DLS
1338         // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1339         // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1340         // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1341         // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1342         ULONG               OpStatusFlags;
1343
1344         BOOLEAN                         NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1345         ABGBAND_STATE           BandState;              // For setting BBP used on B/G or A mode.
1346
1347         // IEEE802.11H--DFS.
1348         RADAR_DETECT_STRUCT     RadarDetect;
1349
1350         // HT
1351         UCHAR                   BASize;         // USer desired BAWindowSize. Should not exceed our max capability
1352         //RT_HT_CAPABILITY      SupportedHtPhy;
1353         RT_HT_CAPABILITY        DesiredHtPhy;
1354         HT_CAPABILITY_IE                HtCapability;
1355         ADD_HT_INFO_IE          AddHTInfo;      // Useful as AP.
1356         //This IE is used with channel switch announcement element when changing to a new 40MHz.
1357         //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1358         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
1359
1360     BOOLEAN                 bHTProtect;
1361     BOOLEAN                 bMIMOPSEnable;
1362     BOOLEAN                                     bBADecline;
1363 //2008/11/05: KH add to support Antenna power-saving of AP<--
1364         BOOLEAN                                 bGreenAPEnable;
1365 //2008/11/05: KH add to support Antenna power-saving of AP-->
1366         BOOLEAN                                 bDisableReordering;
1367         BOOLEAN                                 bForty_Mhz_Intolerant;
1368         BOOLEAN                                 bExtChannelSwitchAnnouncement;
1369         BOOLEAN                                 bRcvBSSWidthTriggerEvents;
1370         ULONG                                   LastRcvBSSWidthTriggerEventsTime;
1371
1372         UCHAR                                   TxBASize;
1373
1374         // Enable wireless event
1375         BOOLEAN                         bWirelessEvent;
1376         BOOLEAN                         bWiFiTest;                              // Enable this parameter for WiFi test
1377
1378         // Tx & Rx Stream number selection
1379         UCHAR                           TxStream;
1380         UCHAR                           RxStream;
1381
1382         BOOLEAN                 bHardwareRadio;     // Hardware controlled Radio enabled
1383
1384 #ifdef RTMP_MAC_USB
1385         BOOLEAN                 bMultipleIRP;       // Multiple Bulk IN flag
1386         UCHAR                   NumOfBulkInIRP;     // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1387         RT_HT_CAPABILITY        SupportedHtPhy;
1388         ULONG                           MaxPktOneTxBulk;
1389         UCHAR                           TxBulkFactor;
1390         UCHAR                           RxBulkFactor;
1391
1392         BOOLEAN                         IsUpdateBeacon;
1393         BEACON_SYNC_STRUCT      *pBeaconSync;
1394         RALINK_TIMER_STRUCT     BeaconUpdateTimer;
1395         UINT32                          BeaconAdjust;
1396         UINT32                          BeaconFactor;
1397         UINT32                          BeaconRemain;
1398 #endif // RTMP_MAC_USB //
1399
1400         NDIS_SPIN_LOCK                  MeasureReqTabLock;
1401         PMEASURE_REQ_TAB                pMeasureReqTab;
1402
1403         NDIS_SPIN_LOCK                  TpcReqTabLock;
1404         PTPC_REQ_TAB                    pTpcReqTab;
1405
1406         BOOLEAN                         PSPXlink;  // 0: Disable. 1: Enable
1407
1408 #if defined(RT305x)||defined(RT30xx)
1409         // request by Gary, for High Power issue
1410         UCHAR   HighPowerPatchDisabled;
1411 #endif
1412
1413         BOOLEAN         HT_DisallowTKIP;                /* Restrict the encryption type in 11n HT mode */
1414 } COMMON_CONFIG, *PCOMMON_CONFIG;
1415
1416
1417 /* Modified by Wu Xi-Kun 4/21/2006 */
1418 // STA configuration and status
1419 typedef struct _STA_ADMIN_CONFIG {
1420         // GROUP 1 -
1421         //   User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1422         //   the user intended configuration, but not necessary fully equal to the final
1423         //   settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1424         //   AP or IBSS holder).
1425         //   Once initialized, user configuration can only be changed via OID_xxx
1426         UCHAR       BssType;              // BSS_INFRA or BSS_ADHOC
1427         USHORT      AtimWin;          // used when starting a new IBSS
1428
1429         // GROUP 2 -
1430         //   User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1431         //   the user intended configuration, and should be always applied to the final
1432         //   settings in ACTIVE BSS without compromising with the BSS holder.
1433         //   Once initialized, user configuration can only be changed via OID_xxx
1434         UCHAR       RssiTrigger;
1435         UCHAR       RssiTriggerMode;      // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1436         USHORT      DefaultListenCount;   // default listen count;
1437         ULONG       WindowsPowerMode;           // Power mode for AC power
1438         ULONG       WindowsBatteryPowerMode;    // Power mode for battery if exists
1439         BOOLEAN     bWindowsACCAMEnable;        // Enable CAM power mode when AC on
1440         BOOLEAN     bAutoReconnect;         // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1441         ULONG       WindowsPowerProfile;    // Windows power profile, for NDIS5.1 PnP
1442
1443         // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1444         USHORT      Psm;                  // power management mode   (PWR_ACTIVE|PWR_SAVE)
1445         USHORT      DisassocReason;
1446         UCHAR       DisassocSta[MAC_ADDR_LEN];
1447         USHORT      DeauthReason;
1448         UCHAR       DeauthSta[MAC_ADDR_LEN];
1449         USHORT      AuthFailReason;
1450         UCHAR       AuthFailSta[MAC_ADDR_LEN];
1451
1452         NDIS_802_11_PRIVACY_FILTER          PrivacyFilter;  // PrivacyFilter enum for 802.1X
1453         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;       // This should match to whatever microsoft defined
1454         NDIS_802_11_WEP_STATUS              WepStatus;
1455         NDIS_802_11_WEP_STATUS                          OrigWepStatus;  // Original wep status set from OID
1456
1457         // Add to support different cipher suite for WPA2/WPA mode
1458         NDIS_802_11_ENCRYPTION_STATUS           GroupCipher;            // Multicast cipher suite
1459         NDIS_802_11_ENCRYPTION_STATUS           PairCipher;                     // Unicast cipher suite
1460         BOOLEAN                                                         bMixCipher;                     // Indicate current Pair & Group use different cipher suites
1461         USHORT                                                          RsnCapability;
1462
1463         NDIS_802_11_WEP_STATUS              GroupKeyWepStatus;
1464
1465         UCHAR           WpaPassPhrase[64];              // WPA PSK pass phrase
1466         UINT            WpaPassPhraseLen;               // the length of WPA PSK pass phrase
1467         UCHAR           PMK[32];                // WPA PSK mode PMK
1468         UCHAR       PTK[64];                // WPA PSK mode PTK
1469         UCHAR           GTK[32];                                // GTK from authenticator
1470         BSSID_INFO      SavedPMK[PMKID_NO];
1471         UINT            SavedPMKNum;                    // Saved PMKID number
1472
1473         UCHAR           DefaultKeyId;
1474
1475
1476         // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1477         UCHAR       PortSecured;
1478
1479         // For WPA countermeasures
1480         ULONG       LastMicErrorTime;   // record last MIC error time
1481         ULONG       MicErrCnt;          // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1482         BOOLEAN     bBlockAssoc;        // Block associate attempt for 60 seconds after counter measure occurred.
1483         // For WPA-PSK supplicant state
1484         WPA_STATE   WpaState;           // Default is SS_NOTUSE and handled by microsoft 802.1x
1485         UCHAR       ReplayCounter[8];
1486         UCHAR       ANonce[32];         // ANonce for WPA-PSK from aurhenticator
1487         UCHAR       SNonce[32];         // SNonce for WPA-PSK
1488
1489         UCHAR       LastSNR0;             // last received BEACON's SNR
1490         UCHAR       LastSNR1;            // last received BEACON's SNR for 2nd  antenna
1491         RSSI_SAMPLE RssiSample;
1492         ULONG       NumOfAvgRssiSample;
1493
1494         ULONG       LastBeaconRxTime;     // OS's timestamp of the last BEACON RX time
1495         ULONG       Last11bBeaconRxTime;  // OS's timestamp of the last 11B BEACON RX time
1496         ULONG           Last11gBeaconRxTime;    // OS's timestamp of the last 11G BEACON RX time
1497         ULONG           Last20NBeaconRxTime;    // OS's timestamp of the last 20MHz N BEACON RX time
1498
1499         ULONG       LastScanTime;       // Record last scan time for issue BSSID_SCAN_LIST
1500         ULONG       ScanCnt;            // Scan counts since most recent SSID, BSSID, SCAN OID request
1501         BOOLEAN     bSwRadio;           // Software controlled Radio On/Off, TRUE: On
1502         BOOLEAN     bHwRadio;           // Hardware controlled Radio On/Off, TRUE: On
1503         BOOLEAN     bRadio;             // Radio state, And of Sw & Hw radio state
1504         BOOLEAN     bHardwareRadio;     // Hardware controlled Radio enabled
1505         BOOLEAN     bShowHiddenSSID;    // Show all known SSID in SSID list get operation
1506
1507         // New for WPA, windows want us to keep association information and
1508         // Fixed IEs from last association response
1509         NDIS_802_11_ASSOCIATION_INFORMATION     AssocInfo;
1510         USHORT       ReqVarIELen;                // Length of next VIE include EID & Length
1511         UCHAR       ReqVarIEs[MAX_VIE_LEN];             // The content saved here should be little-endian format.
1512         USHORT       ResVarIELen;                // Length of next VIE include EID & Length
1513         UCHAR       ResVarIEs[MAX_VIE_LEN];
1514
1515         UCHAR       RSNIE_Len;
1516         UCHAR       RSN_IE[MAX_LEN_OF_RSNIE];   // The content saved here should be little-endian format.
1517
1518         ULONG               CLBusyBytes;                // Save the total bytes received durning channel load scan time
1519         USHORT              RPIDensity[8];              // Array for RPI density collection
1520
1521         UCHAR               RMReqCnt;                   // Number of measurement request saved.
1522         UCHAR               CurrentRMReqIdx;            // Number of measurement request saved.
1523         BOOLEAN             ParallelReq;                // Parallel measurement, only one request performed,
1524                                                                                                         // It must be the same channel with maximum duration
1525         USHORT              ParallelDuration;           // Maximum duration for parallel measurement
1526         UCHAR               ParallelChannel;            // Only one channel with parallel measurement
1527         USHORT              IAPPToken;                  // IAPP dialog token
1528         // Hack for channel load and noise histogram parameters
1529         UCHAR               NHFactor;                   // Parameter for Noise histogram
1530         UCHAR               CLFactor;                   // Parameter for channel load
1531
1532         RALINK_TIMER_STRUCT     StaQuickResponeForRateUpTimer;
1533         BOOLEAN                         StaQuickResponeForRateUpTimerRunning;
1534
1535         UCHAR                   DtimCount;      // 0.. DtimPeriod-1
1536         UCHAR                   DtimPeriod;     // default = 3
1537
1538         ////////////////////////////////////////////////////////////////////////////////////////
1539         // This is only for WHQL test.
1540         BOOLEAN                         WhqlTest;
1541         ////////////////////////////////////////////////////////////////////////////////////////
1542
1543     RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
1544     // Fast Roaming
1545         BOOLEAN                 bAutoRoaming;       // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI
1546         CHAR                    dBmToRoam;          // the condition to roam when receiving Rssi less than this value. It's negative value.
1547
1548     BOOLEAN             IEEE8021X;
1549     BOOLEAN             IEEE8021x_required_keys;
1550     CIPHER_KEY          DesireSharedKey[4];     // Record user desired WEP keys
1551     UCHAR               DesireSharedKeyId;
1552
1553     // 0: driver ignores wpa_supplicant
1554     // 1: wpa_supplicant initiates scanning and AP selection
1555     // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
1556     UCHAR               WpaSupplicantUP;
1557         UCHAR                           WpaSupplicantScanCount;
1558         BOOLEAN                         bRSN_IE_FromWpaSupplicant;
1559
1560     CHAR                dev_name[16];
1561     USHORT              OriDevType;
1562
1563     BOOLEAN             bTGnWifiTest;
1564         BOOLEAN                     bScanReqIsFromWebUI;
1565
1566         HTTRANSMIT_SETTING                              HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1567         DESIRED_TRANSMIT_SETTING        DesiredTransmitSetting;
1568         RT_HT_PHY_INFO                                  DesiredHtPhyInfo;
1569         BOOLEAN                                                 bAutoTxRateSwitch;
1570
1571 #ifdef RTMP_MAC_PCI
1572     UCHAR       BBPR3;
1573         // PS Control has 2 meanings for advanced power save function.
1574         // 1. EnablePSinIdle : When no connection, always radio off except need to do site survey.
1575         // 2. EnableNewPS  : will save more current in sleep or radio off mode.
1576         PS_CONTROL                              PSControl;
1577 #endif // RTMP_MAC_PCI //
1578
1579
1580
1581
1582         BOOLEAN                         bAutoConnectByBssid;
1583         ULONG                           BeaconLostTime; // seconds
1584         BOOLEAN                 bForceTxBurst;          // 1: force enble TX PACKET BURST, 0: disable
1585 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
1586
1587 // This data structure keep the current active BSS/IBSS's configuration that this STA
1588 // had agreed upon joining the network. Which means these parameters are usually decided
1589 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
1590 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
1591 // Normally, after SCAN or failed roaming attempts, we need to recover back to
1592 // the current active settings.
1593 typedef struct _STA_ACTIVE_CONFIG {
1594         USHORT      Aid;
1595         USHORT      AtimWin;                // in kusec; IBSS parameter set element
1596         USHORT      CapabilityInfo;
1597         USHORT      CfpMaxDuration;
1598         USHORT      CfpPeriod;
1599
1600         // Copy supported rate from desired AP's beacon. We are trying to match
1601         // AP's supported and extended rate settings.
1602         UCHAR       SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1603         UCHAR       ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1604         UCHAR       SupRateLen;
1605         UCHAR       ExtRateLen;
1606         // Copy supported ht from desired AP's beacon. We are trying to match
1607         RT_HT_PHY_INFO          SupportedPhyInfo;
1608         RT_HT_CAPABILITY        SupportedHtPhy;
1609 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
1610
1611
1612
1613
1614
1615
1616 typedef struct _MAC_TABLE_ENTRY {
1617         //Choose 1 from ValidAsWDS and ValidAsCLI  to validize.
1618         BOOLEAN         ValidAsCLI;             // Sta mode, set this TRUE after Linkup,too.
1619         BOOLEAN         ValidAsWDS;     // This is WDS Entry. only for AP mode.
1620         BOOLEAN         ValidAsApCli;   //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
1621         BOOLEAN         ValidAsMesh;
1622         BOOLEAN         ValidAsDls;     // This is DLS Entry. only for STA mode.
1623         BOOLEAN         isCached;
1624         BOOLEAN         bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem.  We need to turn on RTS/CTS protection.
1625
1626         UCHAR           EnqueueEapolStartTimerRunning;  // Enqueue EAPoL-Start for triggering EAP SM
1627         //jan for wpa
1628         // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
1629         UCHAR           CMTimerRunning;
1630         UCHAR           apidx;                  // MBSS number
1631         UCHAR           RSNIE_Len;
1632         UCHAR           RSN_IE[MAX_LEN_OF_RSNIE];
1633         UCHAR           ANonce[LEN_KEY_DESC_NONCE];
1634         UCHAR           SNonce[LEN_KEY_DESC_NONCE];
1635         UCHAR           R_Counter[LEN_KEY_DESC_REPLAY];
1636         UCHAR           PTK[64];
1637         UCHAR           ReTryCounter;
1638         RALINK_TIMER_STRUCT                 RetryTimer;
1639         RALINK_TIMER_STRUCT                                     EnqueueStartForPSKTimer;        // A timer which enqueue EAPoL-Start for triggering PSK SM
1640         NDIS_802_11_AUTHENTICATION_MODE     AuthMode;   // This should match to whatever microsoft defined
1641         NDIS_802_11_WEP_STATUS              WepStatus;
1642         NDIS_802_11_WEP_STATUS              GroupKeyWepStatus;
1643         AP_WPA_STATE    WpaState;
1644         GTK_STATE       GTKState;
1645         USHORT          PortSecured;
1646         NDIS_802_11_PRIVACY_FILTER  PrivacyFilter;      // PrivacyFilter enum for 802.1X
1647         CIPHER_KEY      PairwiseKey;
1648         PVOID           pAd;
1649     INT                         PMKID_CacheIdx;
1650     UCHAR                       PMKID[LEN_PMKID];
1651
1652
1653         UCHAR           Addr[MAC_ADDR_LEN];
1654         UCHAR           PsMode;
1655         SST             Sst;
1656         AUTH_STATE      AuthState; // for SHARED KEY authentication state machine used only
1657         BOOLEAN                 IsReassocSta;   // Indicate whether this is a reassociation procedure
1658         USHORT          Aid;
1659         USHORT          CapabilityInfo;
1660         UCHAR           LastRssi;
1661         ULONG           NoDataIdleCount;
1662         UINT16                  StationKeepAliveCount; // unit: second
1663         ULONG           PsQIdleCount;
1664         QUEUE_HEADER    PsQueue;
1665
1666         UINT32                  StaConnectTime;         // the live time of this station since associated with AP
1667
1668         BOOLEAN                 bSendBAR;
1669         USHORT                  NoBADataCountDown;
1670
1671         UINT32                  CachedBuf[16];          // UINT (4 bytes) for alignment
1672         UINT                    TxBFCount; // 3*3
1673         UINT                    FIFOCount;
1674         UINT                    DebugFIFOCount;
1675         UINT                    DebugTxCount;
1676     BOOLEAN                     bDlsInit;
1677
1678
1679 //====================================================
1680 //WDS entry needs these
1681 // if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
1682         UINT                    MatchWDSTabIdx;
1683         UCHAR           MaxSupportedRate;
1684         UCHAR           CurrTxRate;
1685         UCHAR           CurrTxRateIndex;
1686         // to record the each TX rate's quality. 0 is best, the bigger the worse.
1687         USHORT          TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1688 //      USHORT          OneSecTxOkCount;
1689         UINT32                  OneSecTxNoRetryOkCount;
1690         UINT32          OneSecTxRetryOkCount;
1691         UINT32          OneSecTxFailCount;
1692         UINT32                  ContinueTxFailCnt;
1693         UINT32          CurrTxRateStableTime; // # of second in current TX rate
1694         UCHAR           TxRateUpPenalty;      // extra # of second penalty due to last unstable condition
1695 //====================================================
1696
1697         BOOLEAN         fNoisyEnvironment;
1698         BOOLEAN                 fLastSecAccordingRSSI;
1699         UCHAR           LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1700         CHAR                    LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1701         ULONG                   LastTxOkCount;
1702         UCHAR           PER[MAX_STEP_OF_TX_RATE_SWITCH];
1703
1704         // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1705         // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1706         // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
1707         // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
1708         ULONG           ClientStatusFlags;
1709
1710         HTTRANSMIT_SETTING      HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1711
1712         // HT EWC MIMO-N used parameters
1713         USHORT          RXBAbitmap;     // fill to on-chip  RXWI_BA_BITMASK in 8.1.3RX attribute entry format
1714         USHORT          TXBAbitmap;     // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
1715         USHORT          TXAutoBAbitmap;
1716         USHORT          BADeclineBitmap;
1717         USHORT          BARecWcidArray[NUM_OF_TID];     // The mapping wcid of recipient session. if RXBAbitmap bit is masked
1718         USHORT          BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
1719         USHORT          BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
1720
1721         // 802.11n features.
1722         UCHAR           MpduDensity;
1723         UCHAR           MaxRAmpduFactor;
1724         UCHAR           AMsduSize;
1725         UCHAR           MmpsMode;       // MIMO power save more.
1726
1727         HT_CAPABILITY_IE                HTCapability;
1728
1729         BOOLEAN         bAutoTxRateSwitch;
1730
1731         UCHAR       RateLen;
1732         struct _MAC_TABLE_ENTRY *pNext;
1733     USHORT      TxSeq[NUM_OF_TID];
1734         USHORT          NonQosDataSeq;
1735
1736         RSSI_SAMPLE     RssiSample;
1737
1738         UINT32                  TXMCSExpected[16];
1739         UINT32                  TXMCSSuccessful[16];
1740         UINT32                  TXMCSFailed[16];
1741         UINT32                  TXMCSAutoFallBack[16][16];
1742
1743         ULONG                   LastBeaconRxTime;
1744
1745         ULONG AssocDeadLine;
1746 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
1747
1748 typedef struct _MAC_TABLE {
1749         USHORT                  Size;
1750         MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
1751         MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
1752         QUEUE_HEADER    McastPsQueue;
1753         ULONG           PsQIdleCount;
1754         BOOLEAN         fAnyStationInPsm;
1755         BOOLEAN         fAnyStationBadAtheros;  // Check if any Station is atheros 802.11n Chip.  We need to use RTS/CTS with Atheros 802,.11n chip.
1756         BOOLEAN                 fAnyTxOPForceDisable;   // Check if it is necessary to disable BE TxOP
1757         BOOLEAN                 fAllStationAsRalink;    // Check if all stations are ralink-chipset
1758         BOOLEAN         fAnyStationIsLegacy;    // Check if I use legacy rate to transmit to my BSS Station/
1759         BOOLEAN         fAnyStationNonGF;               // Check if any Station can't support GF.
1760         BOOLEAN         fAnyStation20Only;              // Check if any Station can't support GF.
1761         BOOLEAN                 fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
1762         BOOLEAN         fAnyBASession;   // Check if there is BA session.  Force turn on RTS/CTS
1763 //2008/10/28: KH add to support Antenna power-saving of AP<--
1764 //2008/10/28: KH add to support Antenna power-saving of AP-->
1765 } MAC_TABLE, *PMAC_TABLE;
1766
1767
1768
1769
1770
1771
1772 struct wificonf
1773 {
1774         BOOLEAN bShortGI;
1775         BOOLEAN bGreenField;
1776 };
1777
1778
1779 typedef struct _RTMP_DEV_INFO_
1780 {
1781         UCHAR                   chipName[16];
1782         RTMP_INF_TYPE   infType;
1783 }RTMP_DEV_INFO;
1784
1785
1786
1787
1788 struct _RTMP_CHIP_OP_
1789 {
1790         /*  Calibration access related callback functions */
1791         int (*eeinit)(RTMP_ADAPTER *pAd);                                                                               /* int (*eeinit)(RTMP_ADAPTER *pAd); */
1792         int (*eeread)(RTMP_ADAPTER *pAd, USHORT offset, PUSHORT pValue);                                /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */
1793
1794         /* MCU related callback functions */
1795         int (*loadFirmware)(RTMP_ADAPTER *pAd);                                                         /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */
1796         int (*eraseFirmware)(RTMP_ADAPTER *pAd);                                                                /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */
1797         int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1);;    /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1); */
1798
1799         /* RF access related callback functions */
1800         REG_PAIR *pRFRegTable;
1801         void (*AsicRfInit)(RTMP_ADAPTER *pAd);
1802         void (*AsicRfTurnOn)(RTMP_ADAPTER *pAd);
1803         void (*AsicRfTurnOff)(RTMP_ADAPTER *pAd);
1804         void (*AsicReverseRfFromSleepMode)(RTMP_ADAPTER *pAd);
1805         void (*AsicHaltAction)(RTMP_ADAPTER *pAd);
1806 };
1807
1808
1809 //
1810 //  The miniport adapter structure
1811 //
1812 struct _RTMP_ADAPTER
1813 {
1814         PVOID                                   OS_Cookie;      // save specific structure relative to OS
1815         PNET_DEV                                net_dev;
1816         ULONG                                   VirtualIfCnt;
1817
1818         RTMP_CHIP_OP                    chipOps;
1819         USHORT                                  ThisTbttNumToNextWakeUp;
1820
1821 #ifdef RTMP_MAC_PCI
1822 /*****************************************************************************************/
1823 /*      PCI related parameters                                                                                                                            */
1824 /*****************************************************************************************/
1825         PUCHAR                  CSRBaseAddress;     // PCI MMIO Base Address, all access will use
1826         unsigned int                    irq_num;
1827
1828     USHORT                          LnkCtrlBitMask;
1829     USHORT                          RLnkCtrlConfiguration;
1830     USHORT                  RLnkCtrlOffset;
1831     USHORT                          HostLnkCtrlConfiguration;
1832     USHORT                  HostLnkCtrlOffset;
1833         USHORT                      PCIePowerSaveLevel;
1834         ULONG                           Rt3xxHostLinkCtrl;      // USed for 3090F chip
1835         ULONG                           Rt3xxRalinkLinkCtrl;    // USed for 3090F chip
1836         USHORT                          DeviceID;           // Read from PCI config
1837         ULONG                           AccessBBPFailCount;
1838         BOOLEAN                                 bPCIclkOff;                                             // flag that indicate if the PICE power status in Configuration SPace..
1839         BOOLEAN                                 bPCIclkOffDisableTx;                    //
1840
1841         BOOLEAN                                 brt30xxBanMcuCmd;       //when = 0xff means all commands are ok to set .
1842         BOOLEAN                                 b3090ESpecialChip;      //3090E special chip that write EEPROM 0x24=0x9280.
1843         ULONG                                   CheckDmaBusyCount;  // Check Interrupt Status Register Count.
1844
1845         UINT                                    int_enable_reg;
1846         UINT                                    int_disable_mask;
1847         UINT                                    int_pending;
1848
1849
1850         RTMP_DMABUF             TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
1851         RTMP_DMABUF             RxDescRing;                 // Shared memory for RX descriptors
1852         RTMP_DMABUF             TxDescRing[NUM_OF_TX_RING];     // Shared memory for Tx descriptors
1853         RTMP_TX_RING            TxRing[NUM_OF_TX_RING];         // AC0~4 + HCCA
1854 #endif // RTMP_MAC_PCI //
1855
1856
1857         NDIS_SPIN_LOCK          irq_lock;
1858         UCHAR                   irq_disabled;
1859
1860 #ifdef RTMP_MAC_USB
1861 /*****************************************************************************************/
1862 /*      USB related parameters                                                           */
1863 /*****************************************************************************************/
1864         struct usb_config_descriptor            *config;
1865         UINT                                                            BulkInEpAddr;           // bulk-in endpoint address
1866         UINT                                                            BulkOutEpAddr[6];       // bulk-out endpoint address
1867
1868         UINT                                                            NumberOfPipes;
1869         USHORT                                                          BulkOutMaxPacketSize;
1870         USHORT                                                          BulkInMaxPacketSize;
1871
1872         //======Control Flags
1873         LONG                            PendingIoCount;
1874         ULONG                                           BulkFlags;
1875         BOOLEAN                     bUsbTxBulkAggre;    // Flags for bulk out data priority
1876
1877         //======Cmd Thread
1878         CmdQ                                    CmdQ;
1879         NDIS_SPIN_LOCK                  CmdQLock;                               // CmdQLock spinlock
1880         RTMP_OS_TASK                    cmdQTask;
1881
1882         //======Semaphores (event)
1883         RTMP_OS_SEM                     UsbVendorReq_semaphore;
1884         PVOID                                   UsbVendorReqBuf;
1885         wait_queue_head_t                       *wait;
1886 #endif // RTMP_MAC_USB //
1887
1888 /*****************************************************************************************/
1889 /*      RBUS related parameters                                                                                                                           */
1890 /*****************************************************************************************/
1891
1892
1893 /*****************************************************************************************/
1894 /*      Both PCI/USB related parameters                                                                                                           */
1895 /*****************************************************************************************/
1896         //RTMP_DEV_INFO                 chipInfo;
1897         RTMP_INF_TYPE                   infType;
1898
1899 /*****************************************************************************************/
1900 /*      Driver Mgmt related parameters                                                                                                            */
1901 /*****************************************************************************************/
1902         RTMP_OS_TASK                    mlmeTask;
1903 #ifdef RTMP_TIMER_TASK_SUPPORT
1904         // If you want use timer task to handle the timer related jobs, enable this.
1905         RTMP_TIMER_TASK_QUEUE   TimerQ;
1906         NDIS_SPIN_LOCK                  TimerQLock;
1907         RTMP_OS_TASK                    timerTask;
1908 #endif // RTMP_TIMER_TASK_SUPPORT //
1909
1910
1911 /*****************************************************************************************/
1912 /*      Tx related parameters                                                           */
1913 /*****************************************************************************************/
1914         BOOLEAN                 DeQueueRunning[NUM_OF_TX_RING];  // for ensuring RTUSBDeQueuePacket get call once
1915         NDIS_SPIN_LOCK          DeQueueLock[NUM_OF_TX_RING];
1916
1917 #ifdef RTMP_MAC_USB
1918         // Data related context and AC specified, 4 AC supported
1919         NDIS_SPIN_LOCK                  BulkOutLock[6];                 // BulkOut spinlock for 4 ACs
1920         NDIS_SPIN_LOCK                  MLMEBulkOutLock;        // MLME BulkOut lock
1921
1922         HT_TX_CONTEXT                   TxContext[NUM_OF_TX_RING];
1923         NDIS_SPIN_LOCK                  TxContextQueueLock[NUM_OF_TX_RING];             // TxContextQueue spinlock
1924
1925         // 4 sets of Bulk Out index and pending flag
1926         UCHAR                                   NextBulkOutIndex[4];    // only used for 4 EDCA bulkout pipe
1927
1928         BOOLEAN                                 BulkOutPending[6];      // used for total 6 bulkout pipe
1929         UCHAR                                   bulkResetPipeid;
1930         BOOLEAN                                 MgmtBulkPending;
1931         ULONG                                   bulkResetReq[6];
1932 #endif // RTMP_MAC_USB //
1933
1934         // resource for software backlog queues
1935         QUEUE_HEADER            TxSwQueue[NUM_OF_TX_RING];  // 4 AC + 1 HCCA
1936         NDIS_SPIN_LOCK          TxSwQueueLock[NUM_OF_TX_RING];  // TxSwQueue spinlock
1937
1938         RTMP_DMABUF             MgmtDescRing;                   // Shared memory for MGMT descriptors
1939         RTMP_MGMT_RING          MgmtRing;
1940         NDIS_SPIN_LOCK          MgmtRingLock;                   // Prio Ring spinlock
1941
1942
1943 /*****************************************************************************************/
1944 /*      Rx related parameters                                                           */
1945 /*****************************************************************************************/
1946
1947 #ifdef RTMP_MAC_PCI
1948         RTMP_RX_RING            RxRing;
1949         NDIS_SPIN_LOCK          RxRingLock;                 // Rx Ring spinlock
1950 #ifdef RT3090
1951         NDIS_SPIN_LOCK          McuCmdLock;              //MCU Command Queue spinlock
1952 #endif // RT3090 //
1953 #endif // RTMP_MAC_PCI //
1954 #ifdef RTMP_MAC_USB
1955         RX_CONTEXT                              RxContext[RX_RING_SIZE];  // 1 for redundant multiple IRP bulk in.
1956         NDIS_SPIN_LOCK                  BulkInLock;                             // BulkIn spinlock for 4 ACs
1957         UCHAR                                   PendingRx;                              // The Maximum pending Rx value should be       RX_RING_SIZE.
1958         UCHAR                                   NextRxBulkInIndex;              // Indicate the current RxContext Index which hold by Host controller.
1959         UCHAR                                   NextRxBulkInReadIndex;  // Indicate the current RxContext Index which driver can read & process it.
1960         ULONG                                   NextRxBulkInPosition;   // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
1961         ULONG                                   TransferBufferLength;   // current length of the packet buffer
1962         ULONG                                   ReadPosition;                   // current read position in a packet buffer
1963 #endif // RTMP_MAC_USB //
1964
1965 /*****************************************************************************************/
1966 /*      ASIC related parameters                                                          */
1967 /*****************************************************************************************/
1968         UINT32                  MACVersion;             // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
1969
1970         // ---------------------------
1971         // E2PROM
1972         // ---------------------------
1973         ULONG                   EepromVersion;          // byte 0: version, byte 1: revision, byte 2~3: unused
1974         ULONG                           FirmwareVersion;        // byte 0: Minor version, byte 1: Major version, otherwise unused.
1975         USHORT                  EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
1976         UCHAR                           EEPROMAddressNum;       // 93c46=6  93c66=8
1977         BOOLEAN                 EepromAccess;
1978         UCHAR                           EFuseTag;
1979
1980
1981         // ---------------------------
1982         // BBP Control
1983         // ---------------------------
1984         UCHAR                   BbpWriteLatch[140];     // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
1985         CHAR                                    BbpRssiToDbmDelta;              // change from UCHAR to CHAR for high power
1986         BBP_R66_TUNING          BbpTuning;
1987
1988         // ----------------------------
1989         // RFIC control
1990         // ----------------------------
1991         UCHAR                   RfIcType;       // RFIC_xxx
1992         ULONG                   RfFreqOffset;   // Frequency offset for channel switching
1993         RTMP_RF_REGS            LatchRfRegs;    // latch th latest RF programming value since RF IC doesn't support READ
1994
1995         EEPROM_ANTENNA_STRUC    Antenna;                            // Since ANtenna definition is different for a & g. We need to save it for future reference.
1996         EEPROM_NIC_CONFIG2_STRUC    NicConfig2;
1997
1998         // This soft Rx Antenna Diversity mechanism is used only when user set
1999         // RX Antenna = DIVERSITY ON
2000         SOFT_RX_ANT_DIVERSITY   RxAnt;
2001
2002         UCHAR                   RFProgSeq;
2003         CHANNEL_TX_POWER        TxPower[MAX_NUM_OF_CHANNELS];       // Store Tx power value for all channels.
2004         CHANNEL_TX_POWER        ChannelList[MAX_NUM_OF_CHANNELS];   // list all supported channels for site survey
2005         CHANNEL_11J_TX_POWER    TxPower11J[MAX_NUM_OF_11JCHANNELS];       // 802.11j channel and bw
2006         CHANNEL_11J_TX_POWER    ChannelList11J[MAX_NUM_OF_11JCHANNELS];   // list all supported channels for site survey
2007
2008         UCHAR                   ChannelListNum;                     // number of channel in ChannelList[]
2009         UCHAR                                   Bbp94;
2010         BOOLEAN                                 BbpForCCK;
2011         ULONG           Tx20MPwrCfgABand[5];
2012         ULONG           Tx20MPwrCfgGBand[5];
2013         ULONG           Tx40MPwrCfgABand[5];
2014         ULONG           Tx40MPwrCfgGBand[5];
2015
2016         BOOLEAN     bAutoTxAgcA;                // Enable driver auto Tx Agc control
2017         UCHAR       TssiRefA;                                   // Store Tssi reference value as 25 temperature.
2018         UCHAR       TssiPlusBoundaryA[5];               // Tssi boundary for increase Tx power to compensate.
2019         UCHAR       TssiMinusBoundaryA[5];              // Tssi boundary for decrease Tx power to compensate.
2020         UCHAR       TxAgcStepA;                                 // Store Tx TSSI delta increment / decrement value
2021         CHAR            TxAgcCompensateA;                       // Store the compensation (TxAgcStep * (idx-1))
2022
2023         BOOLEAN     bAutoTxAgcG;                // Enable driver auto Tx Agc control
2024         UCHAR       TssiRefG;                                   // Store Tssi reference value as 25 temperature.
2025         UCHAR       TssiPlusBoundaryG[5];               // Tssi boundary for increase Tx power to compensate.
2026         UCHAR       TssiMinusBoundaryG[5];              // Tssi boundary for decrease Tx power to compensate.
2027         UCHAR       TxAgcStepG;                                 // Store Tx TSSI delta increment / decrement value
2028         CHAR            TxAgcCompensateG;                       // Store the compensation (TxAgcStep * (idx-1))
2029
2030         CHAR            BGRssiOffset0;                          // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2031         CHAR            BGRssiOffset1;                          // Store B/G RSSI#1 Offset value
2032         CHAR            BGRssiOffset2;                          // Store B/G RSSI#2 Offset value
2033
2034         CHAR            ARssiOffset0;                           // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2035         CHAR            ARssiOffset1;                           // Store A RSSI#1 Offset value
2036         CHAR            ARssiOffset2;                           // Store A RSSI#2 Offset value
2037
2038         CHAR            BLNAGain;                                       // Store B/G external LNA#0 value on EEPROM 0x44h
2039         CHAR            ALNAGain0;                                      // Store A external LNA#0 value for ch36~64
2040         CHAR            ALNAGain1;                                      // Store A external LNA#1 value for ch100~128
2041         CHAR            ALNAGain2;                                      // Store A external LNA#2 value for ch132~165
2042 #ifdef RT30xx
2043         // for 3572
2044         UCHAR           Bbp25;
2045         UCHAR           Bbp26;
2046
2047         UCHAR           TxMixerGain24G;                         // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G
2048         UCHAR           TxMixerGain5G;
2049 #endif // RT30xx //
2050         // ----------------------------
2051         // LED control
2052         // ----------------------------
2053         MCU_LEDCS_STRUC         LedCntl;
2054         USHORT                          Led1;   // read from EEPROM 0x3c
2055         USHORT                          Led2;   // EEPROM 0x3e
2056         USHORT                          Led3;   // EEPROM 0x40
2057         UCHAR                           LedIndicatorStrength;
2058         UCHAR                           RssiSingalstrengthOffet;
2059     BOOLEAN                             bLedOnScanning;
2060         UCHAR                           LedStatus;
2061
2062 /*****************************************************************************************/
2063 /*      802.11 related parameters                                                        */
2064 /*****************************************************************************************/
2065         // outgoing BEACON frame buffer and corresponding TXD
2066         TXWI_STRUC                      BeaconTxWI;
2067         PUCHAR                                          BeaconBuf;
2068         USHORT                                          BeaconOffset[HW_BEACON_MAX_COUNT];
2069
2070         // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2071         PSPOLL_FRAME                    PsPollFrame;
2072         HEADER_802_11                   NullFrame;
2073
2074 #ifdef RTMP_MAC_USB
2075         TX_CONTEXT                              BeaconContext[BEACON_RING_SIZE];
2076         TX_CONTEXT                              NullContext;
2077         TX_CONTEXT                              PsPollContext;
2078         TX_CONTEXT                              RTSContext;
2079 #endif // RTMP_MAC_USB //
2080
2081 //=========AP===========
2082
2083
2084 //=======STA===========
2085         // -----------------------------------------------
2086         // STA specific configuration & operation status
2087         // used only when pAd->OpMode == OPMODE_STA
2088         // -----------------------------------------------
2089         STA_ADMIN_CONFIG        StaCfg;           // user desired settings
2090         STA_ACTIVE_CONFIG       StaActive;         // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2091         CHAR                    nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2092         NDIS_MEDIA_STATE        PreMediaState;
2093
2094 //=======Common===========
2095         // OP mode: either AP or STA
2096         UCHAR                   OpMode;                     // OPMODE_STA, OPMODE_AP
2097
2098         NDIS_MEDIA_STATE        IndicateMediaState;                     // Base on Indication state, default is NdisMediaStateDisConnected
2099
2100
2101         /* MAT related parameters */
2102
2103         // configuration: read from Registry & E2PROM
2104         BOOLEAN                 bLocalAdminMAC;             // Use user changed MAC
2105         UCHAR                   PermanentAddress[MAC_ADDR_LEN];    // Factory default MAC address
2106         UCHAR                   CurrentAddress[MAC_ADDR_LEN];      // User changed MAC address
2107
2108         // ------------------------------------------------------
2109         // common configuration to both OPMODE_STA and OPMODE_AP
2110         // ------------------------------------------------------
2111         COMMON_CONFIG           CommonCfg;
2112         MLME_STRUCT             Mlme;
2113
2114         // AP needs those vaiables for site survey feature.
2115         MLME_AUX                MlmeAux;           // temporary settings used during MLME state machine
2116         BSS_TABLE               ScanTab;           // store the latest SCAN result
2117
2118         //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2119         MAC_TABLE                 MacTab;     // ASIC on-chip WCID entry table.  At TX, ASIC always use key according to this on-chip table.
2120         NDIS_SPIN_LOCK          MacTabLock;
2121
2122         BA_TABLE                        BATable;
2123
2124         NDIS_SPIN_LOCK          BATabLock;
2125         RALINK_TIMER_STRUCT RECBATimer;
2126
2127         // encryption/decryption KEY tables
2128         CIPHER_KEY              SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2129
2130                 // RX re-assembly buffer for fragmentation
2131         FRAGMENT_FRAME          FragFrame;                  // Frame storage for fragment frame
2132
2133         // various Counters
2134         COUNTER_802_3           Counters8023;               // 802.3 counters
2135         COUNTER_802_11          WlanCounters;               // 802.11 MIB counters
2136         COUNTER_RALINK          RalinkCounters;             // Ralink propriety counters
2137         COUNTER_DRS             DrsCounters;                // counters for Dynamic TX Rate Switching
2138         PRIVATE_STRUC           PrivateInfo;                // Private information & counters
2139
2140         // flags, see fRTMP_ADAPTER_xxx flags
2141         ULONG                   Flags;                      // Represent current device status
2142         ULONG                   PSFlags;                    // Power Save operation flag.
2143
2144         // current TX sequence #
2145         USHORT                  Sequence;
2146
2147         // Control disconnect / connect event generation
2148         //+++Didn't used anymore
2149         ULONG                   LinkDownTime;
2150         //---
2151         ULONG                   LastRxRate;
2152         ULONG                   LastTxRate;
2153         //+++Used only for Station
2154         BOOLEAN                 bConfigChanged;         // Config Change flag for the same SSID setting
2155         //---
2156
2157         ULONG                   ExtraInfo;              // Extra information for displaying status
2158         ULONG                   SystemErrorBitmap;      // b0: E2PROM version error
2159
2160         //+++Didn't used anymore
2161         ULONG                   MacIcVersion;           // MAC/BBP serial interface issue solved after ver.D
2162         //---
2163
2164         // ---------------------------
2165         // System event log
2166         // ---------------------------
2167         RT_802_11_EVENT_TABLE   EventTab;
2168
2169
2170         BOOLEAN         HTCEnable;
2171
2172         /*****************************************************************************************/
2173         /*      Statistic related parameters                                                     */
2174         /*****************************************************************************************/
2175 #ifdef RTMP_MAC_USB
2176         ULONG                                           BulkOutDataOneSecCount;
2177         ULONG                                           BulkInDataOneSecCount;
2178         ULONG                                           BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2179         ULONG                                           watchDogRxCnt;
2180         ULONG                                           watchDogRxOverFlowCnt;
2181         ULONG                                           watchDogTxPendingCnt[NUM_OF_TX_RING];
2182         INT                                                     TransferedLength[NUM_OF_TX_RING];
2183 #endif // RTMP_MAC_USB //
2184
2185         BOOLEAN                                         bUpdateBcnCntDone;
2186         ULONG                                           watchDogMacDeadlock;    // prevent MAC/BBP into deadlock condition
2187         // ----------------------------
2188         // DEBUG paramerts
2189         // ----------------------------
2190         //ULONG         DebugSetting[4];
2191         BOOLEAN         bBanAllBaSetup;
2192         BOOLEAN         bPromiscuous;
2193
2194         // ----------------------------
2195         // rt2860c emulation-use Parameters
2196         // ----------------------------
2197         //ULONG         rtsaccu[30];
2198         //ULONG         ctsaccu[30];
2199         //ULONG         cfendaccu[30];
2200         //ULONG         bacontent[16];
2201         //ULONG         rxint[RX_RING_SIZE+1];
2202         //UCHAR         rcvba[60];
2203         BOOLEAN         bLinkAdapt;
2204         BOOLEAN         bForcePrintTX;
2205         BOOLEAN         bForcePrintRX;
2206         //BOOLEAN               bDisablescanning;               //defined in RT2870 USB
2207         BOOLEAN         bStaFifoTest;
2208         BOOLEAN         bProtectionTest;
2209         BOOLEAN         bBroadComHT;
2210         //+++Following add from RT2870 USB.
2211         ULONG           BulkOutReq;
2212         ULONG           BulkOutComplete;
2213         ULONG           BulkOutCompleteOther;
2214         ULONG           BulkOutCompleteCancel;  // seems not use now?
2215         ULONG           BulkInReq;
2216         ULONG           BulkInComplete;
2217         ULONG           BulkInCompleteFail;
2218         //---
2219
2220     struct wificonf                     WIFItestbed;
2221
2222         struct reordering_mpdu_pool mpdu_blk_pool;
2223
2224         ULONG                                   OneSecondnonBEpackets;          // record non BE packets per second
2225
2226 #ifdef LINUX
2227     struct iw_statistics    iw_stats;
2228
2229         struct net_device_stats stats;
2230 #endif // LINUX //
2231
2232
2233
2234
2235
2236         ULONG                                   TbttTickCount;
2237 #ifdef PCI_MSI_SUPPORT
2238         BOOLEAN                                 HaveMsi;
2239 #endif // PCI_MSI_SUPPORT //
2240
2241
2242         UCHAR                                   is_on;
2243
2244 #define TIME_BASE                       (1000000/OS_HZ)
2245 #define TIME_ONE_SECOND         (1000000/TIME_BASE)
2246         UCHAR                                   flg_be_adjust;
2247         ULONG                                   be_adjust_last_time;
2248
2249
2250
2251
2252
2253
2254
2255         UINT8                                   FlgCtsEnabled;
2256         UINT8                                   PM_FlgSuspend;
2257
2258 #ifdef RT30xx
2259 #ifdef RTMP_EFUSE_SUPPORT
2260         BOOLEAN         bUseEfuse;
2261         UCHAR           EEPROMImage[1024];
2262 #endif // RTMP_EFUSE_SUPPORT //
2263 #endif // RT30xx //
2264 };
2265
2266
2267
2268 #define DELAYINTMASK            0x0003fffb
2269 #define INTMASK                         0x0003fffb
2270 #define IndMask                         0x0003fffc
2271 #define RxINT                           0x00000005      // Delayed Rx or indivi rx
2272 #define TxDataInt                       0x000000fa      // Delayed Tx or indivi tx
2273 #define TxMgmtInt                       0x00000102      // Delayed Tx or indivi tx
2274 #define TxCoherent                      0x00020000      // tx coherent
2275 #define RxCoherent                      0x00010000      // rx coherent
2276 #define McuCommand                      0x00000200      // mcu
2277 #define PreTBTTInt                      0x00001000      // Pre-TBTT interrupt
2278 #define TBTTInt                         0x00000800              // TBTT interrupt
2279 #define GPTimeOutInt                    0x00008000              // GPtimeout interrupt
2280 #define AutoWakeupInt           0x00004000              // AutoWakeupInt interrupt
2281 #define FifoStaFullInt                  0x00002000      //  fifo statistics full interrupt
2282
2283
2284 /***************************************************************************
2285   *     Rx Path software control block related data structures
2286   **************************************************************************/
2287 typedef struct _RX_BLK_
2288 {
2289 //      RXD_STRUC               RxD; // sample
2290         RT28XX_RXD_STRUC        RxD;
2291         PRXWI_STRUC                     pRxWI;
2292         PHEADER_802_11          pHeader;
2293         PNDIS_PACKET            pRxPacket;
2294         UCHAR                           *pData;
2295         USHORT                          DataSize;
2296         USHORT                          Flags;
2297         UCHAR                           UserPriority;   // for calculate TKIP MIC using
2298 } RX_BLK;
2299
2300
2301 #define RX_BLK_SET_FLAG(_pRxBlk, _flag)         (_pRxBlk->Flags |= _flag)
2302 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag)        (_pRxBlk->Flags & _flag)
2303 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag)       (_pRxBlk->Flags &= ~(_flag))
2304
2305
2306 #define fRX_WDS                 0x0001
2307 #define fRX_AMSDU       0x0002
2308 #define fRX_ARALINK     0x0004
2309 #define fRX_HTC         0x0008
2310 #define fRX_PAD         0x0010
2311 #define fRX_AMPDU       0x0020
2312 #define fRX_QOS                 0x0040
2313 #define fRX_INFRA               0x0080
2314 #define fRX_EAP                 0x0100
2315 #define fRX_MESH                0x0200
2316 #define fRX_APCLI               0x0400
2317 #define fRX_DLS                 0x0800
2318 #define fRX_WPI                 0x1000
2319
2320 #define LENGTH_AMSDU_SUBFRAMEHEAD       14
2321 #define LENGTH_ARALINK_SUBFRAMEHEAD     14
2322 #define LENGTH_ARALINK_HEADER_FIELD      2
2323
2324
2325 /***************************************************************************
2326   *     Tx Path software control block related data structures
2327   **************************************************************************/
2328 #define TX_UNKOWN_FRAME                 0x00
2329 #define TX_MCAST_FRAME                  0x01
2330 #define TX_LEGACY_FRAME                 0x02
2331 #define TX_AMPDU_FRAME                  0x04
2332 #define TX_AMSDU_FRAME                  0x08
2333 #define TX_RALINK_FRAME                 0x10
2334 #define TX_FRAG_FRAME                   0x20
2335
2336
2337 //      Currently the sizeof(TX_BLK) is 148 bytes.
2338 typedef struct _TX_BLK_
2339 {
2340         UCHAR                           QueIdx;
2341         UCHAR                           TxFrameType;                            // Indicate the Transmission type of the all frames in one batch
2342         UCHAR                           TotalFrameNum;                          // Total frame number want to send-out in one batch
2343         USHORT                          TotalFragNum;                           // Total frame fragments required in one batch
2344         USHORT                          TotalFrameLen;                          // Total length of all frames want to send-out in one batch
2345
2346         QUEUE_HEADER            TxPacketList;
2347         MAC_TABLE_ENTRY         *pMacEntry;                                     // NULL: packet with 802.11 RA field is multicast/broadcast address
2348         HTTRANSMIT_SETTING      *pTransmit;
2349
2350         // Following structure used for the characteristics of a specific packet.
2351         PNDIS_PACKET            pPacket;
2352         PUCHAR                          pSrcBufHeader;                          // Reference to the head of sk_buff->data
2353         PUCHAR                          pSrcBufData;                            // Reference to the sk_buff->data, will changed depends on hanlding progresss
2354         UINT                            SrcBufLen;                                      // Length of packet payload which not including Layer 2 header
2355         PUCHAR                          pExtraLlcSnapEncap;                     // NULL means no extra LLC/SNAP is required
2356         UCHAR                           HeaderBuf[128];                         // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2357         //RT2870 2.1.0.0 uses only 80 bytes
2358         //RT3070 2.1.1.0 uses only 96 bytes
2359         //RT3090 2.1.0.0 uses only 96 bytes
2360         UCHAR                           MpduHeaderLen;                          // 802.11 header length NOT including the padding
2361         UCHAR                           HdrPadLen;                                      // recording Header Padding Length;
2362         UCHAR                           apidx;                                          // The interface associated to this packet
2363         UCHAR                           Wcid;                                           // The MAC entry associated to this packet
2364         UCHAR                           UserPriority;                           // priority class of packet
2365         UCHAR                           FrameGap;                                       // what kind of IFS this packet use
2366         UCHAR                           MpduReqNum;                                     // number of fragments of this frame
2367         UCHAR                           TxRate;                                         // TODO: Obsoleted? Should change to MCS?
2368         UCHAR                           CipherAlg;                                      // cipher alogrithm
2369         PCIPHER_KEY                     pKey;
2370
2371
2372
2373         USHORT                          Flags;                                          //See following definitions for detail.
2374
2375         //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2376         ULONG                           Priv;                                           // Hardware specific value saved in here.
2377 } TX_BLK, *PTX_BLK;
2378
2379
2380 #define fTX_bRtsRequired                0x0001  // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2381 #define fTX_bAckRequired        0x0002  // the packet need ack response
2382 #define fTX_bPiggyBack                  0x0004  // Legacy device use Piggback or not
2383 #define fTX_bHTRate             0x0008  // allow to use HT rate
2384 #define fTX_bForceNonQoS        0x0010  // force to transmit frame without WMM-QoS in HT mode
2385 #define fTX_bAllowFrag          0x0020  // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2386 #define fTX_bMoreData                   0x0040  // there are more data packets in PowerSave Queue
2387 #define fTX_bWMM                                0x0080  // QOS Data
2388 #define fTX_bClearEAPFrame              0x0100
2389
2390 #define TX_BLK_SET_FLAG(_pTxBlk, _flag)         (_pTxBlk->Flags |= _flag)
2391 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag)        (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2392 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag)       (_pTxBlk->Flags &= ~(_flag))
2393
2394
2395
2396
2397
2398
2399 /***************************************************************************
2400   *     Other static inline function definitions
2401   **************************************************************************/
2402 static inline VOID ConvertMulticastIP2MAC(
2403         IN PUCHAR pIpAddr,
2404         IN PUCHAR *ppMacAddr,
2405         IN UINT16 ProtoType)
2406 {
2407         if (pIpAddr == NULL)
2408                 return;
2409
2410         if (ppMacAddr == NULL || *ppMacAddr == NULL)
2411                 return;
2412
2413         switch (ProtoType)
2414         {
2415                 case ETH_P_IPV6:
2416 //                      memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2417                         *(*ppMacAddr) = 0x33;
2418                         *(*ppMacAddr + 1) = 0x33;
2419                         *(*ppMacAddr + 2) = pIpAddr[12];
2420                         *(*ppMacAddr + 3) = pIpAddr[13];
2421                         *(*ppMacAddr + 4) = pIpAddr[14];
2422                         *(*ppMacAddr + 5) = pIpAddr[15];
2423                         break;
2424
2425                 case ETH_P_IP:
2426                 default:
2427 //                      memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2428                         *(*ppMacAddr) = 0x01;
2429                         *(*ppMacAddr + 1) = 0x00;
2430                         *(*ppMacAddr + 2) = 0x5e;
2431                         *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
2432                         *(*ppMacAddr + 4) = pIpAddr[2];
2433                         *(*ppMacAddr + 5) = pIpAddr[3];
2434                         break;
2435         }
2436
2437         return;
2438 }
2439
2440
2441 char *GetPhyMode(int Mode);
2442 char* GetBW(int BW);
2443
2444 //
2445 //  Private routines in rtmp_init.c
2446 //
2447 NDIS_STATUS RTMPAllocAdapterBlock(
2448         IN PVOID                        handle,
2449         OUT PRTMP_ADAPTER   *ppAdapter);
2450
2451 NDIS_STATUS RTMPAllocTxRxRingMemory(
2452         IN  PRTMP_ADAPTER   pAd);
2453
2454 VOID RTMPFreeAdapter(
2455         IN  PRTMP_ADAPTER   pAd);
2456
2457 NDIS_STATUS NICReadRegParameters(
2458         IN  PRTMP_ADAPTER       pAd,
2459         IN  NDIS_HANDLE         WrapperConfigurationContext);
2460
2461 #ifdef RTMP_RF_RW_SUPPORT
2462 VOID NICInitRFRegisters(
2463         IN PRTMP_ADAPTER pAd);
2464
2465 VOID RtmpChipOpsRFHook(
2466         IN RTMP_ADAPTER *pAd);
2467
2468 NDIS_STATUS     RT30xxWriteRFRegister(
2469         IN      PRTMP_ADAPTER   pAd,
2470         IN      UCHAR                   regID,
2471         IN      UCHAR                   value);
2472
2473 NDIS_STATUS     RT30xxReadRFRegister(
2474         IN      PRTMP_ADAPTER   pAd,
2475         IN      UCHAR                   regID,
2476         IN      PUCHAR                  pValue);
2477 #endif // RTMP_RF_RW_SUPPORT //
2478
2479 VOID NICReadEEPROMParameters(
2480         IN  PRTMP_ADAPTER       pAd,
2481         IN      PUCHAR                          mac_addr);
2482
2483 VOID NICInitAsicFromEEPROM(
2484         IN  PRTMP_ADAPTER       pAd);
2485
2486
2487 NDIS_STATUS NICInitializeAdapter(
2488         IN  PRTMP_ADAPTER   pAd,
2489         IN   BOOLEAN    bHardReset);
2490
2491 NDIS_STATUS NICInitializeAsic(
2492         IN  PRTMP_ADAPTER   pAd,
2493         IN  BOOLEAN             bHardReset);
2494
2495 VOID NICIssueReset(
2496         IN  PRTMP_ADAPTER   pAd);
2497
2498 VOID RTMPRingCleanUp(
2499         IN  PRTMP_ADAPTER   pAd,
2500         IN  UCHAR           RingType);
2501
2502 VOID UserCfgInit(
2503         IN  PRTMP_ADAPTER   pAd);
2504
2505 VOID NICResetFromError(
2506         IN  PRTMP_ADAPTER   pAd);
2507
2508 NDIS_STATUS NICLoadFirmware(
2509         IN PRTMP_ADAPTER pAd);
2510
2511 VOID NICEraseFirmware(
2512         IN  PRTMP_ADAPTER   pAd);
2513
2514 NDIS_STATUS NICLoadRateSwitchingParams(
2515         IN PRTMP_ADAPTER pAd);
2516
2517 BOOLEAN NICCheckForHang(
2518         IN  PRTMP_ADAPTER   pAd);
2519
2520 VOID NICUpdateFifoStaCounters(
2521         IN PRTMP_ADAPTER pAd);
2522
2523 VOID NICUpdateRawCounters(
2524         IN  PRTMP_ADAPTER   pAd);
2525
2526 VOID RTMPZeroMemory(
2527         IN  PVOID   pSrc,
2528         IN  ULONG   Length);
2529
2530 ULONG RTMPCompareMemory(
2531         IN  PVOID   pSrc1,
2532         IN  PVOID   pSrc2,
2533         IN  ULONG   Length);
2534
2535 VOID RTMPMoveMemory(
2536         OUT PVOID   pDest,
2537         IN  PVOID   pSrc,
2538         IN  ULONG   Length);
2539
2540 VOID AtoH(
2541         PSTRING src,
2542         PUCHAR dest,
2543         int             destlen);
2544
2545 UCHAR BtoH(
2546         char ch);
2547
2548 VOID RTMPPatchMacBbpBug(
2549         IN  PRTMP_ADAPTER   pAd);
2550
2551 VOID RTMPInitTimer(
2552         IN  PRTMP_ADAPTER           pAd,
2553         IN  PRALINK_TIMER_STRUCT    pTimer,
2554         IN  PVOID                   pTimerFunc,
2555         IN      PVOID                                   pData,
2556         IN  BOOLEAN                 Repeat);
2557
2558 VOID RTMPSetTimer(
2559         IN  PRALINK_TIMER_STRUCT    pTimer,
2560         IN  ULONG                   Value);
2561
2562
2563 VOID RTMPModTimer(
2564         IN      PRALINK_TIMER_STRUCT    pTimer,
2565         IN      ULONG                                   Value);
2566
2567 VOID RTMPCancelTimer(
2568         IN  PRALINK_TIMER_STRUCT    pTimer,
2569         OUT BOOLEAN                 *pCancelled);
2570
2571 VOID RTMPSetLED(
2572         IN PRTMP_ADAPTER        pAd,
2573         IN UCHAR                        Status);
2574
2575 VOID RTMPSetSignalLED(
2576         IN PRTMP_ADAPTER        pAd,
2577         IN NDIS_802_11_RSSI Dbm);
2578
2579 VOID RTMPEnableRxTx(
2580         IN PRTMP_ADAPTER        pAd);
2581
2582 //
2583 // prototype in action.c
2584 //
2585 VOID ActionStateMachineInit(
2586     IN  PRTMP_ADAPTER   pAd,
2587     IN  STATE_MACHINE *S,
2588     OUT STATE_MACHINE_FUNC Trans[]);
2589
2590 VOID MlmeADDBAAction(
2591     IN PRTMP_ADAPTER pAd,
2592     IN MLME_QUEUE_ELEM *Elem);
2593
2594 VOID MlmeDELBAAction(
2595     IN PRTMP_ADAPTER pAd,
2596     IN MLME_QUEUE_ELEM *Elem);
2597
2598 VOID MlmeDLSAction(
2599     IN PRTMP_ADAPTER pAd,
2600     IN MLME_QUEUE_ELEM *Elem);
2601
2602 VOID MlmeInvalidAction(
2603     IN PRTMP_ADAPTER pAd,
2604     IN MLME_QUEUE_ELEM *Elem);
2605
2606 VOID MlmeQOSAction(
2607     IN PRTMP_ADAPTER pAd,
2608     IN MLME_QUEUE_ELEM *Elem);
2609
2610 VOID PeerAddBAReqAction(
2611         IN PRTMP_ADAPTER pAd,
2612         IN MLME_QUEUE_ELEM *Elem);
2613
2614 VOID PeerAddBARspAction(
2615         IN PRTMP_ADAPTER pAd,
2616         IN MLME_QUEUE_ELEM *Elem);
2617
2618 VOID PeerDelBAAction(
2619         IN PRTMP_ADAPTER pAd,
2620         IN MLME_QUEUE_ELEM *Elem);
2621
2622 VOID PeerBAAction(
2623     IN PRTMP_ADAPTER pAd,
2624     IN MLME_QUEUE_ELEM *Elem);
2625
2626 VOID SendPSMPAction(
2627         IN PRTMP_ADAPTER        pAd,
2628         IN UCHAR                        Wcid,
2629         IN UCHAR                        Psmp);
2630
2631 VOID PeerRMAction(
2632         IN PRTMP_ADAPTER pAd,
2633         IN MLME_QUEUE_ELEM *Elem);
2634
2635 VOID PeerPublicAction(
2636         IN PRTMP_ADAPTER pAd,
2637         IN MLME_QUEUE_ELEM *Elem);
2638
2639 VOID PeerHTAction(
2640         IN PRTMP_ADAPTER pAd,
2641         IN MLME_QUEUE_ELEM *Elem);
2642
2643 VOID PeerQOSAction(
2644     IN PRTMP_ADAPTER pAd,
2645     IN MLME_QUEUE_ELEM *Elem);
2646
2647 VOID RECBATimerTimeout(
2648     IN PVOID SystemSpecific1,
2649     IN PVOID FunctionContext,
2650     IN PVOID SystemSpecific2,
2651     IN PVOID SystemSpecific3);
2652
2653 VOID ORIBATimerTimeout(
2654         IN      PRTMP_ADAPTER   pAd);
2655
2656 VOID SendRefreshBAR(
2657         IN      PRTMP_ADAPTER   pAd,
2658         IN      MAC_TABLE_ENTRY *pEntry);
2659
2660
2661 VOID ActHeaderInit(
2662     IN  PRTMP_ADAPTER   pAd,
2663     IN OUT PHEADER_802_11 pHdr80211,
2664     IN PUCHAR Addr1,
2665     IN PUCHAR Addr2,
2666     IN PUCHAR Addr3);
2667
2668 VOID BarHeaderInit(
2669         IN      PRTMP_ADAPTER   pAd,
2670         IN OUT PFRAME_BAR pCntlBar,
2671         IN PUCHAR pDA,
2672         IN PUCHAR pSA);
2673
2674 VOID InsertActField(
2675         IN PRTMP_ADAPTER pAd,
2676         OUT PUCHAR pFrameBuf,
2677         OUT PULONG pFrameLen,
2678         IN UINT8 Category,
2679         IN UINT8 ActCode);
2680
2681 BOOLEAN CntlEnqueueForRecv(
2682     IN  PRTMP_ADAPTER   pAd,
2683         IN ULONG Wcid,
2684     IN ULONG MsgLen,
2685         IN PFRAME_BA_REQ pMsg);
2686
2687 //
2688 // Private routines in rtmp_data.c
2689 //
2690 BOOLEAN RTMPHandleRxDoneInterrupt(
2691         IN  PRTMP_ADAPTER   pAd);
2692
2693 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
2694         IN  PRTMP_ADAPTER   pAd,
2695         IN  INT_SOURCE_CSR_STRUC TxRingBitmap);
2696
2697 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
2698         IN  PRTMP_ADAPTER   pAd);
2699
2700 VOID RTMPHandleTBTTInterrupt(
2701         IN  PRTMP_ADAPTER   pAd);
2702
2703 VOID RTMPHandlePreTBTTInterrupt(
2704         IN  PRTMP_ADAPTER   pAd);
2705
2706 void RTMPHandleTwakeupInterrupt(
2707         IN PRTMP_ADAPTER pAd);
2708
2709 VOID    RTMPHandleRxCoherentInterrupt(
2710         IN      PRTMP_ADAPTER   pAd);
2711
2712 BOOLEAN TxFrameIsAggregatible(
2713         IN  PRTMP_ADAPTER   pAd,
2714         IN  PUCHAR          pPrevAddr1,
2715         IN  PUCHAR          p8023hdr);
2716
2717 BOOLEAN PeerIsAggreOn(
2718     IN  PRTMP_ADAPTER   pAd,
2719     IN  ULONG          TxRate,
2720     IN  PMAC_TABLE_ENTRY pMacEntry);
2721
2722
2723 NDIS_STATUS Sniff2BytesFromNdisBuffer(
2724         IN  PNDIS_BUFFER    pFirstBuffer,
2725         IN  UCHAR           DesiredOffset,
2726         OUT PUCHAR          pByte0,
2727         OUT PUCHAR          pByte1);
2728
2729 NDIS_STATUS STASendPacket(
2730         IN  PRTMP_ADAPTER   pAd,
2731         IN  PNDIS_PACKET    pPacket);
2732
2733 VOID STASendPackets(
2734         IN  NDIS_HANDLE     MiniportAdapterContext,
2735         IN  PPNDIS_PACKET   ppPacketArray,
2736         IN  UINT            NumberOfPackets);
2737
2738 VOID RTMPDeQueuePacket(
2739         IN  PRTMP_ADAPTER   pAd,
2740         IN      BOOLEAN                 bIntContext,
2741         IN  UCHAR                       QueIdx,
2742         IN      UCHAR                   Max_Tx_Packets);
2743
2744 NDIS_STATUS     RTMPHardTransmit(
2745         IN PRTMP_ADAPTER        pAd,
2746         IN PNDIS_PACKET         pPacket,
2747         IN  UCHAR                       QueIdx,
2748         OUT     PULONG                  pFreeTXDLeft);
2749
2750 NDIS_STATUS     STAHardTransmit(
2751         IN PRTMP_ADAPTER        pAd,
2752         IN TX_BLK                       *pTxBlk,
2753         IN  UCHAR                       QueIdx);
2754
2755 VOID STARxEAPOLFrameIndicate(
2756         IN      PRTMP_ADAPTER   pAd,
2757         IN      MAC_TABLE_ENTRY *pEntry,
2758         IN      RX_BLK                  *pRxBlk,
2759         IN      UCHAR                   FromWhichBSSID);
2760
2761 NDIS_STATUS RTMPFreeTXDRequest(
2762         IN  PRTMP_ADAPTER   pAd,
2763         IN  UCHAR           RingType,
2764         IN  UCHAR           NumberRequired,
2765         IN      PUCHAR          FreeNumberIs);
2766
2767 NDIS_STATUS MlmeHardTransmit(
2768         IN  PRTMP_ADAPTER   pAd,
2769         IN  UCHAR       QueIdx,
2770         IN  PNDIS_PACKET    pPacket);
2771
2772 NDIS_STATUS MlmeHardTransmitMgmtRing(
2773         IN  PRTMP_ADAPTER   pAd,
2774         IN  UCHAR       QueIdx,
2775         IN  PNDIS_PACKET    pPacket);
2776
2777 #ifdef RTMP_MAC_PCI
2778 NDIS_STATUS MlmeHardTransmitTxRing(
2779         IN  PRTMP_ADAPTER   pAd,
2780         IN  UCHAR       QueIdx,
2781         IN  PNDIS_PACKET    pPacket);
2782
2783 NDIS_STATUS MlmeDataHardTransmit(
2784         IN      PRTMP_ADAPTER   pAd,
2785         IN      UCHAR   QueIdx,
2786         IN      PNDIS_PACKET    pPacket);
2787
2788 VOID RTMPWriteTxDescriptor(
2789         IN      PRTMP_ADAPTER   pAd,
2790         IN      PTXD_STRUC              pTxD,
2791         IN      BOOLEAN                 bWIV,
2792         IN      UCHAR                   QSEL);
2793 #endif // RTMP_MAC_PCI //
2794
2795 USHORT  RTMPCalcDuration(
2796         IN  PRTMP_ADAPTER   pAd,
2797         IN  UCHAR           Rate,
2798         IN  ULONG           Size);
2799
2800 VOID RTMPWriteTxWI(
2801         IN      PRTMP_ADAPTER   pAd,
2802         IN      PTXWI_STRUC             pTxWI,
2803         IN  BOOLEAN             FRAG,
2804         IN  BOOLEAN             CFACK,
2805         IN  BOOLEAN             InsTimestamp,
2806         IN      BOOLEAN                 AMPDU,
2807         IN      BOOLEAN                 Ack,
2808         IN      BOOLEAN                 NSeq,           // HW new a sequence.
2809         IN      UCHAR                   BASize,
2810         IN      UCHAR                   WCID,
2811         IN      ULONG                   Length,
2812         IN  UCHAR               PID,
2813         IN      UCHAR                   TID,
2814         IN      UCHAR                   TxRate,
2815         IN      UCHAR                   Txopmode,
2816         IN      BOOLEAN                 CfAck,
2817         IN      HTTRANSMIT_SETTING      *pTransmit);
2818
2819
2820 VOID RTMPWriteTxWI_Data(
2821         IN      PRTMP_ADAPTER           pAd,
2822         IN      OUT PTXWI_STRUC         pTxWI,
2823         IN      TX_BLK                          *pTxBlk);
2824
2825
2826 VOID RTMPWriteTxWI_Cache(
2827         IN      PRTMP_ADAPTER           pAd,
2828         IN      OUT PTXWI_STRUC         pTxWI,
2829         IN      TX_BLK                          *pTxBlk);
2830
2831 VOID RTMPSuspendMsduTransmission(
2832         IN  PRTMP_ADAPTER   pAd);
2833
2834 VOID RTMPResumeMsduTransmission(
2835         IN  PRTMP_ADAPTER   pAd);
2836
2837 NDIS_STATUS MiniportMMRequest(
2838         IN  PRTMP_ADAPTER   pAd,
2839         IN      UCHAR                   QueIdx,
2840         IN      PUCHAR                  pData,
2841         IN  UINT            Length);
2842
2843 //+++mark by shiang, now this function merge to MiniportMMRequest()
2844 //---mark by shiang, now this function merge to MiniportMMRequest()
2845
2846 VOID RTMPSendNullFrame(
2847         IN  PRTMP_ADAPTER   pAd,
2848         IN  UCHAR           TxRate,
2849         IN      BOOLEAN                 bQosNull);
2850
2851 VOID RTMPSendDisassociationFrame(
2852         IN      PRTMP_ADAPTER   pAd);
2853
2854 VOID RTMPSendRTSFrame(
2855         IN  PRTMP_ADAPTER   pAd,
2856         IN  PUCHAR          pDA,
2857         IN      unsigned int    NextMpduSize,
2858         IN  UCHAR           TxRate,
2859         IN  UCHAR           RTSRate,
2860         IN  USHORT          AckDuration,
2861         IN  UCHAR           QueIdx,
2862         IN  UCHAR                       FrameGap);
2863
2864 PQUEUE_HEADER   RTMPCheckTxSwQueue(
2865         IN  PRTMP_ADAPTER   pAd,
2866         OUT UCHAR           *QueIdx);
2867
2868 VOID RTMPReportMicError(
2869         IN  PRTMP_ADAPTER   pAd,
2870         IN  PCIPHER_KEY     pWpaKey);
2871
2872 VOID    WpaMicFailureReportFrame(
2873         IN  PRTMP_ADAPTER    pAd,
2874         IN  MLME_QUEUE_ELEM *Elem);
2875
2876 VOID    WpaDisassocApAndBlockAssoc(
2877     IN  PVOID SystemSpecific1,
2878     IN  PVOID FunctionContext,
2879     IN  PVOID SystemSpecific2,
2880     IN  PVOID SystemSpecific3);
2881
2882 VOID WpaStaPairwiseKeySetting(
2883         IN      PRTMP_ADAPTER   pAd);
2884
2885 VOID WpaStaGroupKeySetting(
2886         IN      PRTMP_ADAPTER   pAd);
2887
2888 NDIS_STATUS RTMPCloneNdisPacket(
2889         IN  PRTMP_ADAPTER   pAd,
2890         IN      BOOLEAN    pInsAMSDUHdr,
2891         IN  PNDIS_PACKET    pInPacket,
2892         OUT PNDIS_PACKET   *ppOutPacket);
2893
2894 NDIS_STATUS RTMPAllocateNdisPacket(
2895         IN  PRTMP_ADAPTER   pAd,
2896         IN  PNDIS_PACKET    *pPacket,
2897         IN  PUCHAR          pHeader,
2898         IN  UINT            HeaderLen,
2899         IN  PUCHAR          pData,
2900         IN  UINT            DataLen);
2901
2902 VOID RTMPFreeNdisPacket(
2903         IN  PRTMP_ADAPTER   pAd,
2904         IN  PNDIS_PACKET    pPacket);
2905
2906 BOOLEAN RTMPFreeTXDUponTxDmaDone(
2907         IN PRTMP_ADAPTER    pAd,
2908         IN UCHAR            QueIdx);
2909
2910 BOOLEAN RTMPCheckDHCPFrame(
2911         IN      PRTMP_ADAPTER   pAd,
2912         IN      PNDIS_PACKET    pPacket);
2913
2914
2915 BOOLEAN RTMPCheckEtherType(
2916         IN      PRTMP_ADAPTER   pAd,
2917         IN      PNDIS_PACKET    pPacket);
2918
2919
2920 //
2921 // Private routines in rtmp_wep.c
2922 //
2923 VOID RTMPInitWepEngine(
2924         IN  PRTMP_ADAPTER   pAd,
2925         IN  PUCHAR          pKey,
2926         IN  UCHAR           KeyId,
2927         IN  UCHAR           KeyLen,
2928         IN  PUCHAR          pDest);
2929
2930 VOID RTMPEncryptData(
2931         IN  PRTMP_ADAPTER   pAd,
2932         IN  PUCHAR          pSrc,
2933         IN  PUCHAR          pDest,
2934         IN  UINT            Len);
2935
2936 BOOLEAN RTMPSoftDecryptWEP(
2937         IN PRTMP_ADAPTER        pAd,
2938         IN PUCHAR                       pData,
2939         IN ULONG                        DataByteCnt,
2940         IN PCIPHER_KEY          pGroupKey);
2941
2942 VOID RTMPSetICV(
2943         IN  PRTMP_ADAPTER   pAd,
2944         IN  PUCHAR          pDest);
2945
2946 VOID ARCFOUR_INIT(
2947         IN  PARCFOURCONTEXT Ctx,
2948         IN  PUCHAR          pKey,
2949         IN  UINT            KeyLen);
2950
2951 UCHAR   ARCFOUR_BYTE(
2952         IN  PARCFOURCONTEXT     Ctx);
2953
2954 VOID ARCFOUR_DECRYPT(
2955         IN  PARCFOURCONTEXT Ctx,
2956         IN  PUCHAR          pDest,
2957         IN  PUCHAR          pSrc,
2958         IN  UINT            Len);
2959
2960 VOID ARCFOUR_ENCRYPT(
2961         IN  PARCFOURCONTEXT Ctx,
2962         IN  PUCHAR          pDest,
2963         IN  PUCHAR          pSrc,
2964         IN  UINT            Len);
2965
2966 VOID WPAARCFOUR_ENCRYPT(
2967         IN  PARCFOURCONTEXT Ctx,
2968         IN  PUCHAR          pDest,
2969         IN  PUCHAR          pSrc,
2970         IN  UINT            Len);
2971
2972 UINT RTMP_CALC_FCS32(
2973         IN  UINT   Fcs,
2974         IN  PUCHAR  Cp,
2975         IN  INT     Len);
2976
2977 //
2978 // MLME routines
2979 //
2980
2981 // Asic/RF/BBP related functions
2982
2983 VOID AsicAdjustTxPower(
2984         IN PRTMP_ADAPTER pAd);
2985
2986 VOID    AsicUpdateProtect(
2987         IN              PRTMP_ADAPTER   pAd,
2988         IN              USHORT                  OperaionMode,
2989         IN              UCHAR                   SetMask,
2990         IN              BOOLEAN                 bDisableBGProtect,
2991         IN              BOOLEAN                 bNonGFExist);
2992
2993 VOID AsicSwitchChannel(
2994         IN  PRTMP_ADAPTER   pAd,
2995         IN      UCHAR                   Channel,
2996         IN      BOOLEAN                 bScan);
2997
2998 VOID AsicLockChannel(
2999         IN PRTMP_ADAPTER pAd,
3000         IN UCHAR Channel) ;
3001
3002 VOID AsicRfTuningExec(
3003         IN PVOID SystemSpecific1,
3004         IN PVOID FunctionContext,
3005         IN PVOID SystemSpecific2,
3006         IN PVOID SystemSpecific3);
3007
3008 VOID AsicResetBBPAgent(
3009         IN PRTMP_ADAPTER pAd);
3010
3011 VOID AsicSleepThenAutoWakeup(
3012         IN  PRTMP_ADAPTER   pAd,
3013         IN  USHORT TbttNumToNextWakeUp);
3014
3015 VOID AsicForceSleep(
3016         IN PRTMP_ADAPTER pAd);
3017
3018 VOID AsicForceWakeup(
3019         IN PRTMP_ADAPTER pAd,
3020         IN BOOLEAN    bFromTx);
3021
3022 VOID AsicSetBssid(
3023         IN  PRTMP_ADAPTER   pAd,
3024         IN  PUCHAR pBssid);
3025
3026 VOID AsicSetMcastWC(
3027         IN PRTMP_ADAPTER pAd);
3028
3029 VOID AsicDelWcidTab(
3030         IN PRTMP_ADAPTER pAd,
3031         IN UCHAR        Wcid);
3032
3033 VOID AsicEnableRDG(
3034         IN PRTMP_ADAPTER pAd);
3035
3036 VOID AsicDisableRDG(
3037         IN PRTMP_ADAPTER pAd);
3038
3039 VOID AsicDisableSync(
3040         IN  PRTMP_ADAPTER   pAd);
3041
3042 VOID AsicEnableBssSync(
3043         IN  PRTMP_ADAPTER   pAd);
3044
3045 VOID AsicEnableIbssSync(
3046         IN  PRTMP_ADAPTER   pAd);
3047
3048 VOID AsicSetEdcaParm(
3049         IN PRTMP_ADAPTER pAd,
3050         IN PEDCA_PARM    pEdcaParm);
3051
3052 VOID AsicSetSlotTime(
3053         IN PRTMP_ADAPTER pAd,
3054         IN BOOLEAN bUseShortSlotTime);
3055
3056 VOID AsicAddSharedKeyEntry(
3057         IN PRTMP_ADAPTER pAd,
3058         IN UCHAR         BssIndex,
3059         IN UCHAR         KeyIdx,
3060         IN UCHAR         CipherAlg,
3061         IN PUCHAR        pKey,
3062         IN PUCHAR        pTxMic,
3063         IN PUCHAR        pRxMic);
3064
3065 VOID AsicRemoveSharedKeyEntry(
3066         IN PRTMP_ADAPTER pAd,
3067         IN UCHAR         BssIndex,
3068         IN UCHAR         KeyIdx);
3069
3070 VOID AsicUpdateWCIDAttribute(
3071         IN PRTMP_ADAPTER pAd,
3072         IN USHORT               WCID,
3073         IN UCHAR                BssIndex,
3074         IN UCHAR        CipherAlg,
3075         IN BOOLEAN              bUsePairewiseKeyTable);
3076
3077 VOID AsicUpdateWCIDIVEIV(
3078         IN PRTMP_ADAPTER pAd,
3079         IN USHORT               WCID,
3080         IN ULONG        uIV,
3081         IN ULONG        uEIV);
3082
3083 VOID AsicUpdateRxWCIDTable(
3084         IN PRTMP_ADAPTER pAd,
3085         IN USHORT               WCID,
3086         IN PUCHAR        pAddr);
3087
3088 VOID AsicAddKeyEntry(
3089         IN PRTMP_ADAPTER pAd,
3090         IN USHORT               WCID,
3091         IN UCHAR                BssIndex,
3092         IN UCHAR                KeyIdx,
3093         IN PCIPHER_KEY  pCipherKey,
3094         IN BOOLEAN              bUsePairewiseKeyTable,
3095         IN BOOLEAN              bTxKey);
3096
3097 VOID AsicAddPairwiseKeyEntry(
3098         IN PRTMP_ADAPTER pAd,
3099         IN PUCHAR        pAddr,
3100         IN UCHAR                WCID,
3101         IN CIPHER_KEY            *pCipherKey);
3102
3103 VOID AsicRemovePairwiseKeyEntry(
3104         IN PRTMP_ADAPTER  pAd,
3105         IN UCHAR                 BssIdx,
3106         IN UCHAR                 Wcid);
3107
3108 BOOLEAN AsicSendCommandToMcu(
3109         IN PRTMP_ADAPTER pAd,
3110         IN UCHAR         Command,
3111         IN UCHAR         Token,
3112         IN UCHAR         Arg0,
3113         IN UCHAR         Arg1);
3114
3115
3116 #ifdef RTMP_MAC_PCI
3117 BOOLEAN AsicCheckCommanOk(
3118         IN PRTMP_ADAPTER pAd,
3119         IN UCHAR                 Command);
3120 #endif // RTMP_MAC_PCI //
3121
3122 VOID MacAddrRandomBssid(
3123         IN  PRTMP_ADAPTER   pAd,
3124         OUT PUCHAR pAddr);
3125
3126 VOID MgtMacHeaderInit(
3127         IN  PRTMP_ADAPTER     pAd,
3128         IN OUT PHEADER_802_11 pHdr80211,
3129         IN UCHAR SubType,
3130         IN UCHAR ToDs,
3131         IN PUCHAR pDA,
3132         IN PUCHAR pBssid);
3133
3134 VOID MlmeRadioOff(
3135         IN PRTMP_ADAPTER pAd);
3136
3137 VOID MlmeRadioOn(
3138         IN PRTMP_ADAPTER pAd);
3139
3140
3141 VOID BssTableInit(
3142         IN BSS_TABLE *Tab);
3143
3144 VOID BATableInit(
3145         IN PRTMP_ADAPTER pAd,
3146     IN BA_TABLE *Tab);
3147
3148 ULONG BssTableSearch(
3149         IN BSS_TABLE *Tab,
3150         IN PUCHAR pBssid,
3151         IN UCHAR Channel);
3152
3153 ULONG BssSsidTableSearch(
3154         IN BSS_TABLE *Tab,
3155         IN PUCHAR    pBssid,
3156         IN PUCHAR    pSsid,
3157         IN UCHAR     SsidLen,
3158         IN UCHAR     Channel);
3159
3160 ULONG BssTableSearchWithSSID(
3161         IN BSS_TABLE *Tab,
3162         IN PUCHAR    Bssid,
3163         IN PUCHAR    pSsid,
3164         IN UCHAR     SsidLen,
3165         IN UCHAR     Channel);
3166
3167 ULONG BssSsidTableSearchBySSID(
3168         IN BSS_TABLE *Tab,
3169         IN PUCHAR        pSsid,
3170         IN UCHAR         SsidLen);
3171
3172 VOID BssTableDeleteEntry(
3173         IN OUT  PBSS_TABLE pTab,
3174         IN      PUCHAR pBssid,
3175         IN      UCHAR Channel);
3176
3177 VOID BATableDeleteORIEntry(
3178         IN OUT  PRTMP_ADAPTER pAd,
3179         IN              BA_ORI_ENTRY    *pBAORIEntry);
3180
3181 VOID  BssEntrySet(
3182         IN  PRTMP_ADAPTER   pAd,
3183         OUT PBSS_ENTRY pBss,
3184         IN PUCHAR pBssid,
3185         IN CHAR Ssid[],
3186         IN UCHAR SsidLen,
3187         IN UCHAR BssType,
3188         IN USHORT BeaconPeriod,
3189         IN PCF_PARM CfParm,
3190         IN USHORT AtimWin,
3191         IN USHORT CapabilityInfo,
3192         IN UCHAR SupRate[],
3193         IN UCHAR SupRateLen,
3194         IN UCHAR ExtRate[],
3195         IN UCHAR ExtRateLen,
3196         IN HT_CAPABILITY_IE *pHtCapability,
3197         IN ADD_HT_INFO_IE *pAddHtInfo,  // AP might use this additional ht info IE
3198         IN UCHAR                        HtCapabilityLen,
3199         IN UCHAR                        AddHtInfoLen,
3200         IN UCHAR                        NewExtChanOffset,
3201         IN UCHAR Channel,
3202         IN CHAR Rssi,
3203         IN LARGE_INTEGER TimeStamp,
3204         IN UCHAR CkipFlag,
3205         IN PEDCA_PARM pEdcaParm,
3206         IN PQOS_CAPABILITY_PARM pQosCapability,
3207         IN PQBSS_LOAD_PARM pQbssLoad,
3208         IN USHORT LengthVIE,
3209         IN PNDIS_802_11_VARIABLE_IEs pVIE);
3210
3211 ULONG  BssTableSetEntry(
3212         IN  PRTMP_ADAPTER   pAd,
3213         OUT PBSS_TABLE pTab,
3214         IN PUCHAR pBssid,
3215         IN CHAR Ssid[],
3216         IN UCHAR SsidLen,
3217         IN UCHAR BssType,
3218         IN USHORT BeaconPeriod,
3219         IN CF_PARM *CfParm,
3220         IN USHORT AtimWin,
3221         IN USHORT CapabilityInfo,
3222         IN UCHAR SupRate[],
3223         IN UCHAR SupRateLen,
3224         IN UCHAR ExtRate[],
3225         IN UCHAR ExtRateLen,
3226         IN HT_CAPABILITY_IE *pHtCapability,
3227         IN ADD_HT_INFO_IE *pAddHtInfo,  // AP might use this additional ht info IE
3228         IN UCHAR                        HtCapabilityLen,
3229         IN UCHAR                        AddHtInfoLen,
3230         IN UCHAR                        NewExtChanOffset,
3231         IN UCHAR Channel,
3232         IN CHAR Rssi,
3233         IN LARGE_INTEGER TimeStamp,
3234         IN UCHAR CkipFlag,
3235         IN PEDCA_PARM pEdcaParm,
3236         IN PQOS_CAPABILITY_PARM pQosCapability,
3237         IN PQBSS_LOAD_PARM pQbssLoad,
3238         IN USHORT LengthVIE,
3239         IN PNDIS_802_11_VARIABLE_IEs pVIE);
3240
3241 VOID BATableInsertEntry(
3242     IN  PRTMP_ADAPTER   pAd,
3243         IN USHORT Aid,
3244     IN USHORT           TimeOutValue,
3245         IN USHORT               StartingSeq,
3246     IN UCHAR TID,
3247         IN UCHAR BAWinSize,
3248         IN UCHAR OriginatorStatus,
3249     IN BOOLEAN IsRecipient);
3250
3251 VOID BssTableSsidSort(
3252         IN  PRTMP_ADAPTER   pAd,
3253         OUT BSS_TABLE *OutTab,
3254         IN  CHAR Ssid[],
3255         IN  UCHAR SsidLen);
3256
3257 VOID  BssTableSortByRssi(
3258         IN OUT BSS_TABLE *OutTab);
3259
3260 VOID BssCipherParse(
3261         IN OUT  PBSS_ENTRY  pBss);
3262
3263 NDIS_STATUS  MlmeQueueInit(
3264         IN MLME_QUEUE *Queue);
3265
3266 VOID  MlmeQueueDestroy(
3267         IN MLME_QUEUE *Queue);
3268
3269 BOOLEAN MlmeEnqueue(
3270         IN PRTMP_ADAPTER pAd,
3271         IN ULONG Machine,
3272         IN ULONG MsgType,
3273         IN ULONG MsgLen,
3274         IN VOID *Msg);
3275
3276 BOOLEAN MlmeEnqueueForRecv(
3277         IN  PRTMP_ADAPTER   pAd,
3278         IN ULONG Wcid,
3279         IN ULONG TimeStampHigh,
3280         IN ULONG TimeStampLow,
3281         IN UCHAR Rssi0,
3282         IN UCHAR Rssi1,
3283         IN UCHAR Rssi2,
3284         IN ULONG MsgLen,
3285         IN PVOID Msg,
3286         IN UCHAR Signal);
3287
3288
3289 BOOLEAN MlmeDequeue(
3290         IN MLME_QUEUE *Queue,
3291         OUT MLME_QUEUE_ELEM **Elem);
3292
3293 VOID    MlmeRestartStateMachine(
3294         IN  PRTMP_ADAPTER   pAd);
3295
3296 BOOLEAN  MlmeQueueEmpty(
3297         IN MLME_QUEUE *Queue);
3298
3299 BOOLEAN  MlmeQueueFull(
3300         IN MLME_QUEUE *Queue);
3301
3302 BOOLEAN  MsgTypeSubst(
3303         IN PRTMP_ADAPTER pAd,
3304         IN PFRAME_802_11 pFrame,
3305         OUT INT *Machine,
3306         OUT INT *MsgType);
3307
3308 VOID StateMachineInit(
3309         IN STATE_MACHINE *Sm,
3310         IN STATE_MACHINE_FUNC Trans[],
3311         IN ULONG StNr,
3312         IN ULONG MsgNr,
3313         IN STATE_MACHINE_FUNC DefFunc,
3314         IN ULONG InitState,
3315         IN ULONG Base);
3316
3317 VOID StateMachineSetAction(
3318         IN STATE_MACHINE *S,
3319         IN ULONG St,
3320         ULONG Msg,
3321         IN STATE_MACHINE_FUNC F);
3322
3323 VOID StateMachinePerformAction(
3324         IN  PRTMP_ADAPTER   pAd,
3325         IN STATE_MACHINE *S,
3326         IN MLME_QUEUE_ELEM *Elem);
3327
3328 VOID Drop(
3329         IN  PRTMP_ADAPTER   pAd,
3330         IN MLME_QUEUE_ELEM *Elem);
3331
3332 VOID AssocStateMachineInit(
3333         IN  PRTMP_ADAPTER   pAd,
3334         IN  STATE_MACHINE *Sm,
3335         OUT STATE_MACHINE_FUNC Trans[]);
3336
3337 VOID ReassocTimeout(
3338         IN PVOID SystemSpecific1,
3339         IN PVOID FunctionContext,
3340         IN PVOID SystemSpecific2,
3341         IN PVOID SystemSpecific3);
3342
3343 VOID AssocTimeout(
3344         IN PVOID SystemSpecific1,
3345         IN PVOID FunctionContext,
3346         IN PVOID SystemSpecific2,
3347         IN PVOID SystemSpecific3);
3348
3349 VOID DisassocTimeout(
3350         IN PVOID SystemSpecific1,
3351         IN PVOID FunctionContext,
3352         IN PVOID SystemSpecific2,
3353         IN PVOID SystemSpecific3);
3354
3355 //----------------------------------------------
3356 VOID MlmeAssocReqAction(
3357         IN  PRTMP_ADAPTER   pAd,
3358         IN  MLME_QUEUE_ELEM *Elem);
3359
3360 VOID MlmeReassocReqAction(
3361         IN  PRTMP_ADAPTER   pAd,
3362         IN  MLME_QUEUE_ELEM *Elem);
3363
3364 VOID MlmeDisassocReqAction(
3365         IN  PRTMP_ADAPTER   pAd,
3366         IN  MLME_QUEUE_ELEM *Elem);
3367
3368 VOID PeerAssocRspAction(
3369         IN  PRTMP_ADAPTER   pAd,
3370         IN  MLME_QUEUE_ELEM *Elem);
3371
3372 VOID PeerReassocRspAction(
3373         IN  PRTMP_ADAPTER   pAd,
3374         IN  MLME_QUEUE_ELEM *Elem);
3375
3376 VOID PeerDisassocAction(
3377         IN  PRTMP_ADAPTER   pAd,
3378         IN  MLME_QUEUE_ELEM *Elem);
3379
3380 VOID DisassocTimeoutAction(
3381         IN  PRTMP_ADAPTER   pAd,
3382         IN  MLME_QUEUE_ELEM *Elem);
3383
3384 VOID AssocTimeoutAction(
3385         IN  PRTMP_ADAPTER   pAd,
3386         IN  MLME_QUEUE_ELEM *Elem);
3387
3388 VOID  ReassocTimeoutAction(
3389         IN  PRTMP_ADAPTER   pAd,
3390         IN  MLME_QUEUE_ELEM *Elem);
3391
3392 VOID  Cls3errAction(
3393         IN  PRTMP_ADAPTER   pAd,
3394         IN  PUCHAR pAddr);
3395
3396 VOID  InvalidStateWhenAssoc(
3397         IN  PRTMP_ADAPTER   pAd,
3398         IN  MLME_QUEUE_ELEM *Elem);
3399
3400 VOID  InvalidStateWhenReassoc(
3401         IN  PRTMP_ADAPTER   pAd,
3402         IN  MLME_QUEUE_ELEM *Elem);
3403
3404 VOID InvalidStateWhenDisassociate(
3405         IN  PRTMP_ADAPTER pAd,
3406         IN  MLME_QUEUE_ELEM *Elem);
3407
3408 #ifdef RTMP_MAC_USB
3409 VOID MlmeCntlConfirm(
3410         IN PRTMP_ADAPTER pAd,
3411         IN ULONG MsgType,
3412         IN USHORT Msg);
3413 #endif // RTMP_MAC_USB //
3414
3415 VOID  ComposePsPoll(
3416         IN  PRTMP_ADAPTER   pAd);
3417
3418 VOID  ComposeNullFrame(
3419         IN  PRTMP_ADAPTER pAd);
3420
3421 VOID  AssocPostProc(
3422         IN  PRTMP_ADAPTER   pAd,
3423         IN  PUCHAR pAddr2,
3424         IN  USHORT CapabilityInfo,
3425         IN  USHORT Aid,
3426         IN  UCHAR SupRate[],
3427         IN  UCHAR SupRateLen,
3428         IN  UCHAR ExtRate[],
3429         IN  UCHAR ExtRateLen,
3430         IN PEDCA_PARM pEdcaParm,
3431         IN HT_CAPABILITY_IE             *pHtCapability,
3432         IN  UCHAR HtCapabilityLen,
3433         IN ADD_HT_INFO_IE               *pAddHtInfo);
3434
3435 VOID AuthStateMachineInit(
3436         IN  PRTMP_ADAPTER   pAd,
3437         IN PSTATE_MACHINE sm,
3438         OUT STATE_MACHINE_FUNC Trans[]);
3439
3440 VOID AuthTimeout(
3441         IN PVOID SystemSpecific1,
3442         IN PVOID FunctionContext,
3443         IN PVOID SystemSpecific2,
3444         IN PVOID SystemSpecific3);
3445
3446 VOID MlmeAuthReqAction(
3447         IN  PRTMP_ADAPTER   pAd,
3448         IN  MLME_QUEUE_ELEM *Elem);
3449
3450 VOID PeerAuthRspAtSeq2Action(
3451         IN  PRTMP_ADAPTER   pAd,
3452         IN  MLME_QUEUE_ELEM *Elem);
3453
3454 VOID PeerAuthRspAtSeq4Action(
3455         IN  PRTMP_ADAPTER   pAd,
3456         IN  MLME_QUEUE_ELEM *Elem);
3457
3458 VOID AuthTimeoutAction(
3459         IN  PRTMP_ADAPTER   pAd,
3460         IN  MLME_QUEUE_ELEM *Elem);
3461
3462 VOID Cls2errAction(
3463         IN  PRTMP_ADAPTER   pAd,
3464         IN  PUCHAR pAddr);
3465
3466 VOID MlmeDeauthReqAction(
3467         IN  PRTMP_ADAPTER   pAd,
3468         IN  MLME_QUEUE_ELEM *Elem);
3469
3470 VOID InvalidStateWhenAuth(
3471         IN  PRTMP_ADAPTER   pAd,
3472         IN  MLME_QUEUE_ELEM *Elem);
3473
3474 //=============================================
3475
3476 VOID AuthRspStateMachineInit(
3477         IN  PRTMP_ADAPTER   pAd,
3478         IN  PSTATE_MACHINE Sm,
3479         IN  STATE_MACHINE_FUNC Trans[]);
3480
3481 VOID PeerDeauthAction(
3482         IN PRTMP_ADAPTER pAd,
3483         IN MLME_QUEUE_ELEM *Elem);
3484
3485 VOID PeerAuthSimpleRspGenAndSend(
3486         IN  PRTMP_ADAPTER   pAd,
3487         IN  PHEADER_802_11  pHdr80211,
3488         IN  USHORT Alg,
3489         IN  USHORT Seq,
3490         IN  USHORT Reason,
3491         IN  USHORT Status);
3492
3493 //
3494 // Private routines in dls.c
3495 //
3496
3497 //========================================
3498
3499 VOID SyncStateMachineInit(
3500         IN  PRTMP_ADAPTER   pAd,
3501         IN  STATE_MACHINE *Sm,
3502         OUT STATE_MACHINE_FUNC Trans[]);
3503
3504 VOID BeaconTimeout(
3505         IN PVOID SystemSpecific1,
3506         IN PVOID FunctionContext,
3507         IN PVOID SystemSpecific2,
3508         IN PVOID SystemSpecific3);
3509
3510 VOID ScanTimeout(
3511         IN PVOID SystemSpecific1,
3512         IN PVOID FunctionContext,
3513         IN PVOID SystemSpecific2,
3514         IN PVOID SystemSpecific3);
3515
3516 VOID InvalidStateWhenScan(
3517         IN  PRTMP_ADAPTER   pAd,
3518         IN  MLME_QUEUE_ELEM *Elem);
3519
3520 VOID InvalidStateWhenJoin(
3521         IN  PRTMP_ADAPTER   pAd,
3522         IN  MLME_QUEUE_ELEM *Elem);
3523
3524 VOID InvalidStateWhenStart(
3525         IN  PRTMP_ADAPTER   pAd,
3526         IN  MLME_QUEUE_ELEM *Elem);
3527
3528 VOID EnqueueProbeRequest(
3529         IN PRTMP_ADAPTER pAd);
3530
3531 BOOLEAN ScanRunning(
3532                 IN PRTMP_ADAPTER pAd);
3533 //=========================================
3534
3535 VOID MlmeCntlInit(
3536         IN  PRTMP_ADAPTER   pAd,
3537         IN  STATE_MACHINE *S,
3538         OUT STATE_MACHINE_FUNC Trans[]);
3539
3540 VOID MlmeCntlMachinePerformAction(
3541         IN  PRTMP_ADAPTER   pAd,
3542         IN  STATE_MACHINE *S,
3543         IN  MLME_QUEUE_ELEM *Elem);
3544
3545 VOID CntlIdleProc(
3546         IN  PRTMP_ADAPTER   pAd,
3547         IN  MLME_QUEUE_ELEM *Elem);
3548
3549 VOID CntlOidScanProc(
3550         IN  PRTMP_ADAPTER pAd,
3551         IN  MLME_QUEUE_ELEM *Elem);
3552
3553 VOID CntlOidSsidProc(
3554         IN  PRTMP_ADAPTER   pAd,
3555         IN  MLME_QUEUE_ELEM * Elem);
3556
3557 VOID CntlOidRTBssidProc(
3558         IN  PRTMP_ADAPTER   pAd,
3559         IN  MLME_QUEUE_ELEM * Elem);
3560
3561 VOID CntlMlmeRoamingProc(
3562         IN  PRTMP_ADAPTER   pAd,
3563         IN  MLME_QUEUE_ELEM * Elem);
3564
3565 VOID CntlWaitDisassocProc(
3566         IN  PRTMP_ADAPTER   pAd,
3567         IN  MLME_QUEUE_ELEM *Elem);
3568
3569 VOID CntlWaitJoinProc(
3570         IN  PRTMP_ADAPTER   pAd,
3571         IN  MLME_QUEUE_ELEM *Elem);
3572
3573 VOID CntlWaitReassocProc(
3574         IN  PRTMP_ADAPTER   pAd,
3575         IN  MLME_QUEUE_ELEM *Elem);
3576
3577 VOID CntlWaitStartProc(
3578         IN  PRTMP_ADAPTER   pAd,
3579         IN  MLME_QUEUE_ELEM *Elem);
3580
3581 VOID CntlWaitAuthProc(
3582         IN  PRTMP_ADAPTER   pAd,
3583         IN  MLME_QUEUE_ELEM *Elem);
3584
3585 VOID CntlWaitAuthProc2(
3586         IN  PRTMP_ADAPTER pAd,
3587         IN  MLME_QUEUE_ELEM *Elem);
3588
3589 VOID CntlWaitAssocProc(
3590         IN  PRTMP_ADAPTER   pAd,
3591         IN  MLME_QUEUE_ELEM *Elem);
3592
3593 VOID LinkUp(
3594         IN  PRTMP_ADAPTER   pAd,
3595         IN  UCHAR BssType);
3596
3597 VOID LinkDown(
3598         IN  PRTMP_ADAPTER   pAd,
3599         IN  BOOLEAN         IsReqFromAP);
3600
3601 VOID IterateOnBssTab(
3602         IN  PRTMP_ADAPTER   pAd);
3603
3604 VOID IterateOnBssTab2(
3605         IN  PRTMP_ADAPTER   pAd);;
3606
3607 VOID JoinParmFill(
3608         IN  PRTMP_ADAPTER   pAd,
3609         IN  OUT MLME_JOIN_REQ_STRUCT *JoinReq,
3610         IN  ULONG BssIdx);
3611
3612 VOID AssocParmFill(
3613         IN  PRTMP_ADAPTER   pAd,
3614         IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
3615         IN  PUCHAR pAddr,
3616         IN  USHORT CapabilityInfo,
3617         IN  ULONG Timeout,
3618         IN  USHORT ListenIntv);
3619
3620 VOID ScanParmFill(
3621         IN  PRTMP_ADAPTER   pAd,
3622         IN  OUT MLME_SCAN_REQ_STRUCT *ScanReq,
3623         IN  STRING Ssid[],
3624         IN  UCHAR SsidLen,
3625         IN  UCHAR BssType,
3626         IN  UCHAR ScanType);
3627
3628 VOID DisassocParmFill(
3629         IN  PRTMP_ADAPTER   pAd,
3630         IN  OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
3631         IN  PUCHAR pAddr,
3632         IN  USHORT Reason);
3633
3634 VOID StartParmFill(
3635         IN  PRTMP_ADAPTER   pAd,
3636         IN  OUT MLME_START_REQ_STRUCT *StartReq,
3637         IN  CHAR Ssid[],
3638         IN  UCHAR SsidLen);
3639
3640 VOID AuthParmFill(
3641         IN  PRTMP_ADAPTER   pAd,
3642         IN  OUT MLME_AUTH_REQ_STRUCT *AuthReq,
3643         IN  PUCHAR pAddr,
3644         IN  USHORT Alg);
3645
3646 VOID EnqueuePsPoll(
3647         IN  PRTMP_ADAPTER   pAd);
3648
3649 VOID EnqueueBeaconFrame(
3650         IN  PRTMP_ADAPTER   pAd);
3651
3652 VOID MlmeJoinReqAction(
3653         IN  PRTMP_ADAPTER   pAd,
3654         IN  MLME_QUEUE_ELEM *Elem);
3655
3656 VOID MlmeScanReqAction(
3657         IN  PRTMP_ADAPTER   pAd,
3658         IN  MLME_QUEUE_ELEM *Elem);
3659
3660 VOID MlmeStartReqAction(
3661         IN  PRTMP_ADAPTER   pAd,
3662         IN  MLME_QUEUE_ELEM *Elem);
3663
3664 VOID ScanTimeoutAction(
3665         IN  PRTMP_ADAPTER   pAd,
3666         IN  MLME_QUEUE_ELEM *Elem);
3667
3668 VOID BeaconTimeoutAtJoinAction(
3669         IN  PRTMP_ADAPTER   pAd,
3670         IN  MLME_QUEUE_ELEM *Elem);
3671
3672 VOID PeerBeaconAtScanAction(
3673         IN  PRTMP_ADAPTER   pAd,
3674         IN  MLME_QUEUE_ELEM *Elem);
3675
3676 VOID PeerBeaconAtJoinAction(
3677         IN  PRTMP_ADAPTER   pAd,
3678         IN  MLME_QUEUE_ELEM *Elem);
3679
3680 VOID PeerBeacon(
3681         IN  PRTMP_ADAPTER   pAd,
3682         IN  MLME_QUEUE_ELEM *Elem);
3683
3684 VOID PeerProbeReqAction(
3685         IN  PRTMP_ADAPTER pAd,
3686         IN  MLME_QUEUE_ELEM *Elem);
3687
3688 VOID ScanNextChannel(
3689         IN  PRTMP_ADAPTER   pAd);
3690
3691 ULONG MakeIbssBeacon(
3692         IN  PRTMP_ADAPTER   pAd);
3693
3694 BOOLEAN MlmeScanReqSanity(
3695         IN  PRTMP_ADAPTER   pAd,
3696         IN  VOID *Msg,
3697         IN  ULONG MsgLen,
3698         OUT UCHAR *BssType,
3699         OUT CHAR ssid[],
3700         OUT UCHAR *SsidLen,
3701         OUT UCHAR *ScanType);
3702
3703 BOOLEAN PeerBeaconAndProbeRspSanity(
3704         IN  PRTMP_ADAPTER   pAd,
3705         IN  VOID *Msg,
3706         IN  ULONG MsgLen,
3707         IN  UCHAR MsgChannel,
3708         OUT PUCHAR pAddr2,
3709         OUT PUCHAR pBssid,
3710         OUT CHAR Ssid[],
3711         OUT UCHAR *pSsidLen,
3712         OUT UCHAR *pBssType,
3713         OUT USHORT *pBeaconPeriod,
3714         OUT UCHAR *pChannel,
3715         OUT UCHAR *pNewChannel,
3716         OUT LARGE_INTEGER *pTimestamp,
3717         OUT CF_PARM *pCfParm,
3718         OUT USHORT *pAtimWin,
3719         OUT USHORT *pCapabilityInfo,
3720         OUT UCHAR *pErp,
3721         OUT UCHAR *pDtimCount,
3722         OUT UCHAR *pDtimPeriod,
3723         OUT UCHAR *pBcastFlag,
3724         OUT UCHAR *pMessageToMe,
3725         OUT UCHAR SupRate[],
3726         OUT UCHAR *pSupRateLen,
3727         OUT UCHAR ExtRate[],
3728         OUT UCHAR *pExtRateLen,
3729         OUT     UCHAR *pCkipFlag,
3730         OUT     UCHAR *pAironetCellPowerLimit,
3731         OUT PEDCA_PARM       pEdcaParm,
3732         OUT PQBSS_LOAD_PARM  pQbssLoad,
3733         OUT PQOS_CAPABILITY_PARM pQosCapability,
3734         OUT ULONG *pRalinkIe,
3735         OUT UCHAR                *pHtCapabilityLen,
3736         OUT UCHAR                *pPreNHtCapabilityLen,
3737         OUT HT_CAPABILITY_IE *pHtCapability,
3738         OUT UCHAR                *AddHtInfoLen,
3739         OUT ADD_HT_INFO_IE *AddHtInfo,
3740         OUT UCHAR *NewExtChannel,
3741         OUT USHORT *LengthVIE,
3742         OUT PNDIS_802_11_VARIABLE_IEs pVIE);
3743
3744 BOOLEAN PeerAddBAReqActionSanity(
3745     IN PRTMP_ADAPTER pAd,
3746     IN VOID *pMsg,
3747     IN ULONG MsgLen,
3748         OUT PUCHAR pAddr2);
3749
3750 BOOLEAN PeerAddBARspActionSanity(
3751     IN PRTMP_ADAPTER pAd,
3752     IN VOID *pMsg,
3753     IN ULONG MsgLen);
3754
3755 BOOLEAN PeerDelBAActionSanity(
3756     IN PRTMP_ADAPTER pAd,
3757     IN UCHAR Wcid,
3758     IN VOID *pMsg,
3759     IN ULONG MsgLen);
3760
3761 BOOLEAN MlmeAssocReqSanity(
3762         IN  PRTMP_ADAPTER   pAd,
3763         IN  VOID *Msg,
3764         IN  ULONG MsgLen,
3765         OUT PUCHAR pApAddr,
3766         OUT USHORT *CapabilityInfo,
3767         OUT ULONG *Timeout,
3768         OUT USHORT *ListenIntv);
3769
3770 BOOLEAN MlmeAuthReqSanity(
3771         IN  PRTMP_ADAPTER   pAd,
3772         IN  VOID *Msg,
3773         IN  ULONG MsgLen,
3774         OUT PUCHAR pAddr,
3775         OUT ULONG *Timeout,
3776         OUT USHORT *Alg);
3777
3778 BOOLEAN MlmeStartReqSanity(
3779         IN  PRTMP_ADAPTER   pAd,
3780         IN  VOID *Msg,
3781         IN  ULONG MsgLen,
3782         OUT CHAR Ssid[],
3783         OUT UCHAR *Ssidlen);
3784
3785 BOOLEAN PeerAuthSanity(
3786         IN  PRTMP_ADAPTER   pAd,
3787         IN  VOID *Msg,
3788         IN  ULONG MsgLen,
3789         OUT PUCHAR pAddr,
3790         OUT USHORT *Alg,
3791         OUT USHORT *Seq,
3792         OUT USHORT *Status,
3793         OUT CHAR ChlgText[]);
3794
3795 BOOLEAN PeerAssocRspSanity(
3796         IN  PRTMP_ADAPTER   pAd,
3797     IN VOID *pMsg,
3798         IN  ULONG MsgLen,
3799         OUT PUCHAR pAddr2,
3800         OUT USHORT *pCapabilityInfo,
3801         OUT USHORT *pStatus,
3802         OUT USHORT *pAid,
3803         OUT UCHAR SupRate[],
3804         OUT UCHAR *pSupRateLen,
3805         OUT UCHAR ExtRate[],
3806         OUT UCHAR *pExtRateLen,
3807     OUT HT_CAPABILITY_IE                *pHtCapability,
3808     OUT ADD_HT_INFO_IE          *pAddHtInfo,    // AP might use this additional ht info IE
3809     OUT UCHAR                   *pHtCapabilityLen,
3810     OUT UCHAR                   *pAddHtInfoLen,
3811     OUT UCHAR                   *pNewExtChannelOffset,
3812         OUT PEDCA_PARM pEdcaParm,
3813         OUT UCHAR *pCkipFlag);
3814
3815 BOOLEAN PeerDisassocSanity(
3816         IN  PRTMP_ADAPTER   pAd,
3817         IN  VOID *Msg,
3818         IN  ULONG MsgLen,
3819         OUT PUCHAR pAddr2,
3820         OUT USHORT *Reason);
3821
3822 BOOLEAN PeerWpaMessageSanity(
3823     IN  PRTMP_ADAPTER           pAd,
3824     IN  PEAPOL_PACKET           pMsg,
3825     IN  ULONG                           MsgLen,
3826     IN  UCHAR                           MsgType,
3827     IN  MAC_TABLE_ENTRY         *pEntry);
3828
3829 BOOLEAN PeerDeauthSanity(
3830         IN  PRTMP_ADAPTER   pAd,
3831         IN  VOID *Msg,
3832         IN  ULONG MsgLen,
3833         OUT PUCHAR pAddr2,
3834         OUT USHORT *Reason);
3835
3836 BOOLEAN PeerProbeReqSanity(
3837         IN  PRTMP_ADAPTER   pAd,
3838         IN  VOID *Msg,
3839         IN  ULONG MsgLen,
3840         OUT PUCHAR pAddr2,
3841         OUT CHAR Ssid[],
3842         OUT UCHAR *pSsidLen);
3843
3844 BOOLEAN GetTimBit(
3845         IN  CHAR *Ptr,
3846         IN  USHORT Aid,
3847         OUT UCHAR *TimLen,
3848         OUT UCHAR *BcastFlag,
3849         OUT UCHAR *DtimCount,
3850         OUT UCHAR *DtimPeriod,
3851         OUT UCHAR *MessageToMe);
3852
3853 UCHAR ChannelSanity(
3854         IN PRTMP_ADAPTER pAd,
3855         IN UCHAR channel);
3856
3857 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
3858         IN PBSS_ENTRY pBss);
3859
3860 BOOLEAN MlmeDelBAReqSanity(
3861     IN PRTMP_ADAPTER pAd,
3862     IN VOID *Msg,
3863     IN ULONG MsgLen);
3864
3865 BOOLEAN MlmeAddBAReqSanity(
3866     IN PRTMP_ADAPTER pAd,
3867     IN VOID *Msg,
3868     IN ULONG MsgLen,
3869     OUT PUCHAR pAddr2);
3870
3871 ULONG MakeOutgoingFrame(
3872         OUT UCHAR *Buffer,
3873         OUT ULONG *Length, ...);
3874
3875 VOID  LfsrInit(
3876         IN  PRTMP_ADAPTER   pAd,
3877         IN  ULONG Seed);
3878
3879 UCHAR RandomByte(
3880         IN  PRTMP_ADAPTER   pAd);
3881
3882 VOID AsicUpdateAutoFallBackTable(
3883         IN      PRTMP_ADAPTER   pAd,
3884         IN      PUCHAR                  pTxRate);
3885
3886 VOID  MlmePeriodicExec(
3887         IN PVOID SystemSpecific1,
3888         IN PVOID FunctionContext,
3889         IN PVOID SystemSpecific2,
3890         IN PVOID SystemSpecific3);
3891
3892 VOID LinkDownExec(
3893         IN PVOID SystemSpecific1,
3894         IN PVOID FunctionContext,
3895         IN PVOID SystemSpecific2,
3896         IN PVOID SystemSpecific3);
3897
3898 VOID STAMlmePeriodicExec(
3899         PRTMP_ADAPTER pAd);
3900
3901 VOID MlmeAutoScan(
3902         IN PRTMP_ADAPTER pAd);
3903
3904 VOID MlmeAutoReconnectLastSSID(
3905         IN PRTMP_ADAPTER pAd);
3906
3907 BOOLEAN MlmeValidateSSID(
3908         IN PUCHAR pSsid,
3909         IN UCHAR  SsidLen);
3910
3911 VOID MlmeCheckForRoaming(
3912         IN PRTMP_ADAPTER pAd,
3913         IN ULONG    Now32);
3914
3915 BOOLEAN MlmeCheckForFastRoaming(
3916         IN  PRTMP_ADAPTER   pAd);
3917
3918 VOID MlmeDynamicTxRateSwitching(
3919         IN PRTMP_ADAPTER pAd);
3920
3921 VOID MlmeSetTxRate(
3922         IN PRTMP_ADAPTER                pAd,
3923         IN PMAC_TABLE_ENTRY             pEntry,
3924         IN PRTMP_TX_RATE_SWITCH pTxRate);
3925
3926 VOID MlmeSelectTxRateTable(
3927         IN PRTMP_ADAPTER                pAd,
3928         IN PMAC_TABLE_ENTRY             pEntry,
3929         IN PUCHAR                               *ppTable,
3930         IN PUCHAR                               pTableSize,
3931         IN PUCHAR                               pInitTxRateIdx);
3932
3933 VOID MlmeCalculateChannelQuality(
3934         IN PRTMP_ADAPTER pAd,
3935         IN PMAC_TABLE_ENTRY pMacEntry,
3936         IN ULONG Now);
3937
3938 VOID MlmeCheckPsmChange(
3939         IN PRTMP_ADAPTER pAd,
3940         IN ULONG    Now32);
3941
3942 VOID MlmeSetPsmBit(
3943         IN PRTMP_ADAPTER pAd,
3944         IN USHORT psm);
3945
3946 VOID MlmeSetTxPreamble(
3947         IN PRTMP_ADAPTER pAd,
3948         IN USHORT TxPreamble);
3949
3950 VOID UpdateBasicRateBitmap(
3951         IN      PRTMP_ADAPTER   pAd);
3952
3953 VOID MlmeUpdateTxRates(
3954         IN PRTMP_ADAPTER        pAd,
3955         IN      BOOLEAN                 bLinkUp,
3956         IN      UCHAR                   apidx);
3957
3958 VOID MlmeUpdateHtTxRates(
3959         IN PRTMP_ADAPTER                pAd,
3960         IN      UCHAR                           apidx);
3961
3962 VOID    RTMPCheckRates(
3963         IN      PRTMP_ADAPTER   pAd,
3964         IN OUT  UCHAR           SupRate[],
3965         IN OUT  UCHAR           *SupRateLen);
3966
3967 BOOLEAN RTMPCheckChannel(
3968         IN PRTMP_ADAPTER pAd,
3969         IN UCHAR                CentralChannel,
3970         IN UCHAR                Channel);
3971
3972 BOOLEAN         RTMPCheckHt(
3973         IN              PRTMP_ADAPTER   pAd,
3974         IN              UCHAR   Wcid,
3975         IN OUT  HT_CAPABILITY_IE                        *pHtCapability,
3976         IN OUT  ADD_HT_INFO_IE                  *pAddHtInfo);
3977
3978 VOID StaQuickResponeForRateUpExec(
3979         IN PVOID SystemSpecific1,
3980         IN PVOID FunctionContext,
3981         IN PVOID SystemSpecific2,
3982         IN PVOID SystemSpecific3);
3983
3984 VOID RTMPUpdateMlmeRate(
3985         IN PRTMP_ADAPTER        pAd);
3986
3987 CHAR RTMPMaxRssi(
3988         IN PRTMP_ADAPTER        pAd,
3989         IN CHAR                         Rssi0,
3990         IN CHAR                         Rssi1,
3991         IN CHAR                         Rssi2);
3992
3993 #ifdef RT30xx
3994 VOID AsicSetRxAnt(
3995         IN PRTMP_ADAPTER        pAd,
3996         IN UCHAR                        Ant);
3997
3998 VOID RTMPFilterCalibration(
3999         IN PRTMP_ADAPTER        pAd);
4000
4001 #ifdef RTMP_EFUSE_SUPPORT
4002 //2008/09/11:KH add to support efuse<--
4003 INT set_eFuseGetFreeBlockCount_Proc(
4004         IN      PRTMP_ADAPTER   pAd,
4005         IN      PSTRING                 arg);
4006
4007 INT set_eFusedump_Proc(
4008         IN      PRTMP_ADAPTER   pAd,
4009         IN      PSTRING                 arg);
4010
4011 VOID eFusePhysicalReadRegisters(
4012         IN PRTMP_ADAPTER    pAd,
4013         IN      USHORT Offset,
4014         IN      USHORT Length,
4015         OUT     USHORT* pData);
4016
4017 int RtmpEfuseSupportCheck(
4018         IN RTMP_ADAPTER *pAd);
4019
4020 VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd,
4021         PUINT EfuseFreeBlock);
4022
4023 INT eFuse_init(
4024         IN PRTMP_ADAPTER pAd);
4025 //2008/09/11:KH add to support efuse-->
4026 #endif // RTMP_EFUSE_SUPPORT //
4027
4028 // add by johnli, RF power sequence setup
4029 VOID RT30xxLoadRFNormalModeSetup(
4030         IN PRTMP_ADAPTER        pAd);
4031
4032 VOID RT30xxLoadRFSleepModeSetup(
4033         IN PRTMP_ADAPTER        pAd);
4034
4035 VOID RT30xxReverseRFSleepModeSetup(
4036         IN PRTMP_ADAPTER        pAd);
4037 // end johnli
4038
4039 #ifdef RT3070
4040 VOID NICInitRT3070RFRegisters(
4041         IN RTMP_ADAPTER *pAd);
4042 #endif // RT3070 //
4043 #ifdef RT3090
4044 VOID NICInitRT3090RFRegisters(
4045         IN RTMP_ADAPTER *pAd);
4046 #endif // RT3090 //
4047
4048 VOID RT30xxHaltAction(
4049         IN PRTMP_ADAPTER        pAd);
4050
4051 VOID RT30xxSetRxAnt(
4052         IN PRTMP_ADAPTER        pAd,
4053         IN UCHAR                        Ant);
4054 #endif // RT30xx //
4055
4056 VOID AsicEvaluateRxAnt(
4057         IN PRTMP_ADAPTER        pAd);
4058
4059 VOID AsicRxAntEvalTimeout(
4060         IN PVOID SystemSpecific1,
4061         IN PVOID FunctionContext,
4062         IN PVOID SystemSpecific2,
4063         IN PVOID SystemSpecific3);
4064
4065 VOID APSDPeriodicExec(
4066         IN PVOID SystemSpecific1,
4067         IN PVOID FunctionContext,
4068         IN PVOID SystemSpecific2,
4069         IN PVOID SystemSpecific3);
4070
4071 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4072         IN PRTMP_ADAPTER    pAd,
4073         IN PMAC_TABLE_ENTRY     pEntry);
4074
4075 UCHAR RTMPStaFixedTxMode(
4076         IN PRTMP_ADAPTER    pAd,
4077         IN PMAC_TABLE_ENTRY     pEntry);
4078
4079 VOID RTMPUpdateLegacyTxSetting(
4080                 UCHAR                           fixed_tx_mode,
4081                 PMAC_TABLE_ENTRY        pEntry);
4082
4083 BOOLEAN RTMPAutoRateSwitchCheck(
4084         IN PRTMP_ADAPTER    pAd);
4085
4086 NDIS_STATUS MlmeInit(
4087         IN  PRTMP_ADAPTER   pAd);
4088
4089 VOID MlmeHandler(
4090         IN  PRTMP_ADAPTER   pAd);
4091
4092 VOID MlmeHalt(
4093         IN  PRTMP_ADAPTER   pAd);
4094
4095 VOID MlmeResetRalinkCounters(
4096         IN  PRTMP_ADAPTER   pAd);
4097
4098 VOID BuildChannelList(
4099         IN PRTMP_ADAPTER pAd);
4100
4101 UCHAR FirstChannel(
4102         IN  PRTMP_ADAPTER   pAd);
4103
4104 UCHAR NextChannel(
4105         IN  PRTMP_ADAPTER   pAd,
4106         IN  UCHAR channel);
4107
4108 VOID ChangeToCellPowerLimit(
4109         IN PRTMP_ADAPTER pAd,
4110         IN UCHAR         AironetCellPowerLimit);
4111
4112 //
4113 // Prototypes of function definition in rtmp_tkip.c
4114 //
4115 VOID    RTMPInitTkipEngine(
4116         IN  PRTMP_ADAPTER   pAd,
4117         IN  PUCHAR          pTKey,
4118         IN  UCHAR           KeyId,
4119         IN  PUCHAR          pTA,
4120         IN  PUCHAR          pMICKey,
4121         IN  PUCHAR          pTSC,
4122         OUT PULONG          pIV16,
4123         OUT PULONG          pIV32);
4124
4125 VOID    RTMPInitMICEngine(
4126         IN  PRTMP_ADAPTER   pAd,
4127         IN  PUCHAR          pKey,
4128         IN  PUCHAR          pDA,
4129         IN  PUCHAR          pSA,
4130         IN  UCHAR           UserPriority,
4131         IN  PUCHAR          pMICKey);
4132
4133 BOOLEAN RTMPTkipCompareMICValue(
4134         IN  PRTMP_ADAPTER   pAd,
4135         IN  PUCHAR          pSrc,
4136         IN  PUCHAR          pDA,
4137         IN  PUCHAR          pSA,
4138         IN  PUCHAR          pMICKey,
4139         IN      UCHAR                   UserPriority,
4140         IN  UINT            Len);
4141
4142 VOID    RTMPCalculateMICValue(
4143         IN  PRTMP_ADAPTER   pAd,
4144         IN  PNDIS_PACKET    pPacket,
4145         IN  PUCHAR          pEncap,
4146         IN  PCIPHER_KEY     pKey,
4147         IN      UCHAR                   apidx);
4148
4149 VOID    RTMPTkipAppendByte(
4150         IN  PTKIP_KEY_INFO  pTkip,
4151         IN  UCHAR           uChar);
4152
4153 VOID    RTMPTkipAppend(
4154         IN  PTKIP_KEY_INFO  pTkip,
4155         IN  PUCHAR          pSrc,
4156         IN  UINT            nBytes);
4157
4158 VOID    RTMPTkipGetMIC(
4159         IN  PTKIP_KEY_INFO  pTkip);
4160
4161 BOOLEAN RTMPSoftDecryptTKIP(
4162         IN PRTMP_ADAPTER pAd,
4163         IN PUCHAR       pData,
4164         IN ULONG        DataByteCnt,
4165         IN UCHAR    UserPriority,
4166         IN PCIPHER_KEY  pWpaKey);
4167
4168 BOOLEAN RTMPSoftDecryptAES(
4169         IN PRTMP_ADAPTER pAd,
4170         IN PUCHAR       pData,
4171         IN ULONG        DataByteCnt,
4172         IN PCIPHER_KEY  pWpaKey);
4173
4174
4175
4176 //
4177 // Prototypes of function definition in cmm_info.c
4178 //
4179 INT RT_CfgSetCountryRegion(
4180         IN      PRTMP_ADAPTER   pAd,
4181         IN      PSTRING                 arg,
4182         IN INT                          band);
4183
4184 INT RT_CfgSetWirelessMode(
4185         IN      PRTMP_ADAPTER   pAd,
4186         IN      PSTRING                 arg);
4187
4188 INT RT_CfgSetShortSlot(
4189         IN      PRTMP_ADAPTER   pAd,
4190         IN      PSTRING                 arg);
4191
4192 INT     RT_CfgSetWepKey(
4193         IN      PRTMP_ADAPTER   pAd,
4194         IN      PSTRING                 keyString,
4195         IN      CIPHER_KEY              *pSharedKey,
4196         IN      INT                             keyIdx);
4197
4198 INT RT_CfgSetWPAPSKKey(
4199         IN RTMP_ADAPTER *pAd,
4200         IN PSTRING              keyString,
4201         IN UCHAR                *pHashStr,
4202         IN INT                  hashStrLen,
4203         OUT PUCHAR              pPMKBuf);
4204
4205
4206
4207 //
4208 // Prototypes of function definition in cmm_info.c
4209 //
4210 VOID    RTMPWPARemoveAllKeys(
4211         IN  PRTMP_ADAPTER   pAd);
4212
4213 VOID    RTMPSetPhyMode(
4214         IN  PRTMP_ADAPTER   pAd,
4215         IN  ULONG phymode);
4216
4217 VOID    RTMPUpdateHTIE(
4218         IN      RT_HT_CAPABILITY        *pRtHt,
4219         IN              UCHAR                           *pMcsSet,
4220         OUT             HT_CAPABILITY_IE *pHtCapability,
4221         OUT             ADD_HT_INFO_IE          *pAddHtInfo);
4222
4223 VOID    RTMPAddWcidAttributeEntry(
4224         IN      PRTMP_ADAPTER   pAd,
4225         IN      UCHAR                   BssIdx,
4226         IN      UCHAR                   KeyIdx,
4227         IN      UCHAR                   CipherAlg,
4228         IN      MAC_TABLE_ENTRY *pEntry);
4229
4230 PSTRING GetEncryptType(
4231         CHAR enc);
4232
4233 PSTRING GetAuthMode(
4234         CHAR auth);
4235
4236 VOID    RTMPSetHT(
4237         IN      PRTMP_ADAPTER   pAd,
4238         IN      OID_SET_HT_PHYMODE *pHTPhyMode);
4239
4240 VOID    RTMPSetIndividualHT(
4241         IN      PRTMP_ADAPTER           pAd,
4242         IN      UCHAR                           apidx);
4243
4244 VOID RTMPSendWirelessEvent(
4245         IN      PRTMP_ADAPTER   pAd,
4246         IN      USHORT                  Event_flag,
4247         IN      PUCHAR                  pAddr,
4248         IN  UCHAR                       BssIdx,
4249         IN      CHAR                    Rssi);
4250
4251 CHAR    ConvertToRssi(
4252     IN  PRTMP_ADAPTER   pAd,
4253         IN CHAR                         Rssi,
4254         IN UCHAR    RssiNumber);
4255
4256 /*===================================
4257         Function prototype in cmm_wpa.c
4258   =================================== */
4259 VOID    RTMPToWirelessSta(
4260         IN  PRTMP_ADAPTER   pAd,
4261     IN  PMAC_TABLE_ENTRY        pEntry,
4262         IN  PUCHAR          pHeader802_3,
4263     IN  UINT            HdrLen,
4264         IN  PUCHAR          pData,
4265     IN  UINT            DataLen,
4266     IN  BOOLEAN                         bClearFrame);
4267
4268 VOID WpaDerivePTK(
4269         IN  PRTMP_ADAPTER   pAd,
4270         IN  UCHAR   *PMK,
4271         IN  UCHAR   *ANonce,
4272         IN  UCHAR   *AA,
4273         IN  UCHAR   *SNonce,
4274         IN  UCHAR   *SA,
4275         OUT UCHAR   *output,
4276         IN  UINT    len);
4277
4278 VOID    GenRandom(
4279         IN  PRTMP_ADAPTER   pAd,
4280         IN      UCHAR                   *macAddr,
4281         OUT     UCHAR                   *random);
4282
4283 BOOLEAN RTMPCheckWPAframe(
4284         IN  PRTMP_ADAPTER       pAd,
4285         IN PMAC_TABLE_ENTRY     pEntry,
4286         IN PUCHAR                       pData,
4287         IN ULONG                        DataByteCount,
4288         IN UCHAR                        FromWhichBSSID);
4289
4290 VOID AES_GTK_KEY_UNWRAP(
4291         IN  UCHAR   *key,
4292         OUT UCHAR   *plaintext,
4293         IN      UINT32  c_len,
4294         IN  UCHAR   *ciphertext);
4295
4296 BOOLEAN RTMPParseEapolKeyData(
4297         IN  PRTMP_ADAPTER   pAd,
4298         IN  PUCHAR          pKeyData,
4299         IN  UCHAR           KeyDataLen,
4300         IN      UCHAR                   GroupKeyIndex,
4301         IN      UCHAR                   MsgType,
4302         IN      BOOLEAN                 bWPA2,
4303         IN  MAC_TABLE_ENTRY *pEntry);
4304
4305 VOID    ConstructEapolMsg(
4306         IN      PMAC_TABLE_ENTRY        pEntry,
4307     IN  UCHAR                           GroupKeyWepStatus,
4308     IN  UCHAR                           MsgType,
4309     IN  UCHAR                           DefaultKeyIdx,
4310         IN      UCHAR                           *KeyNonce,
4311         IN      UCHAR                           *TxRSC,
4312         IN      UCHAR                           *GTK,
4313         IN      UCHAR                           *RSNIE,
4314         IN      UCHAR                           RSNIE_Len,
4315     OUT PEAPOL_PACKET       pMsg);
4316
4317 NDIS_STATUS     RTMPSoftDecryptBroadCastData(
4318         IN  PRTMP_ADAPTER   pAd,
4319         IN      RX_BLK                                                  *pRxBlk,
4320         IN  NDIS_802_11_ENCRYPTION_STATUS       GroupCipher,
4321         IN  PCIPHER_KEY                                         pShard_key);
4322
4323 VOID RTMPMakeRSNIE(
4324         IN  PRTMP_ADAPTER   pAd,
4325         IN  UINT            AuthMode,
4326         IN  UINT            WepStatus,
4327         IN      UCHAR                   apidx);
4328
4329 //
4330 // function prototype in ap_wpa.c
4331 //
4332 VOID RTMPGetTxTscFromAsic(
4333         IN  PRTMP_ADAPTER   pAd,
4334         IN      UCHAR                   apidx,
4335         OUT     PUCHAR                  pTxTsc);
4336
4337 VOID APInstallPairwiseKey(
4338         PRTMP_ADAPTER           pAd,
4339         PMAC_TABLE_ENTRY        pEntry);
4340
4341 UINT    APValidateRSNIE(
4342         IN  PRTMP_ADAPTER   pAd,
4343         IN PMAC_TABLE_ENTRY pEntry,
4344         IN PUCHAR                       pRsnIe,
4345         IN UCHAR                        rsnie_len);
4346
4347 VOID HandleCounterMeasure(
4348         IN  PRTMP_ADAPTER   pAd,
4349         IN MAC_TABLE_ENTRY  *pEntry);
4350
4351 VOID WPAStart4WayHS(
4352         IN  PRTMP_ADAPTER   pAd,
4353         IN  MAC_TABLE_ENTRY *pEntry,
4354         IN      ULONG                   TimeInterval);
4355
4356 VOID WPAStart2WayGroupHS(
4357         IN  PRTMP_ADAPTER   pAd,
4358         IN  MAC_TABLE_ENTRY *pEntry);
4359
4360 VOID PeerPairMsg1Action(
4361         IN PRTMP_ADAPTER pAd,
4362         IN MAC_TABLE_ENTRY  *pEntry,
4363         IN MLME_QUEUE_ELEM *Elem);
4364
4365 VOID PeerPairMsg2Action(
4366         IN  PRTMP_ADAPTER   pAd,
4367         IN MAC_TABLE_ENTRY  *pEntry,
4368         IN MLME_QUEUE_ELEM *Elem);
4369
4370 VOID PeerPairMsg3Action(
4371         IN  PRTMP_ADAPTER       pAd,
4372         IN MAC_TABLE_ENTRY  *pEntry,
4373         IN MLME_QUEUE_ELEM *Elem);
4374
4375 VOID PeerPairMsg4Action(
4376         IN PRTMP_ADAPTER pAd,
4377         IN MAC_TABLE_ENTRY  *pEntry,
4378         IN MLME_QUEUE_ELEM *Elem);
4379
4380 VOID PeerGroupMsg1Action(
4381         IN PRTMP_ADAPTER  pAd,
4382         IN  PMAC_TABLE_ENTRY pEntry,
4383     IN  MLME_QUEUE_ELEM  *Elem);
4384
4385 VOID PeerGroupMsg2Action(
4386         IN PRTMP_ADAPTER pAd,
4387         IN PMAC_TABLE_ENTRY     pEntry,
4388         IN  VOID             *Msg,
4389         IN  UINT             MsgLen);
4390
4391 VOID WpaDeriveGTK(
4392         IN  UCHAR   *PMK,
4393         IN  UCHAR   *GNonce,
4394         IN  UCHAR   *AA,
4395         OUT UCHAR   *output,
4396         IN  UINT    len);
4397
4398 VOID AES_GTK_KEY_WRAP(
4399         IN UCHAR *key,
4400         IN UCHAR *plaintext,
4401         IN UINT32 p_len,
4402         OUT UCHAR *ciphertext);
4403
4404 //typedef void (*TIMER_FUNCTION)(unsigned long);
4405
4406
4407 /* timeout -- ms */
4408 VOID RTMP_SetPeriodicTimer(
4409         IN      NDIS_MINIPORT_TIMER *pTimer,
4410         IN      unsigned long timeout);
4411
4412 VOID RTMP_OS_Init_Timer(
4413         IN      PRTMP_ADAPTER pAd,
4414         IN      NDIS_MINIPORT_TIMER *pTimer,
4415         IN      TIMER_FUNCTION function,
4416         IN      PVOID data);
4417
4418 VOID RTMP_OS_Add_Timer(
4419         IN      NDIS_MINIPORT_TIMER     *pTimer,
4420         IN      unsigned long timeout);
4421
4422 VOID RTMP_OS_Mod_Timer(
4423         IN      NDIS_MINIPORT_TIMER     *pTimer,
4424         IN      unsigned long timeout);
4425
4426
4427 VOID RTMP_OS_Del_Timer(
4428         IN      NDIS_MINIPORT_TIMER     *pTimer,
4429         OUT     BOOLEAN                          *pCancelled);
4430
4431
4432 VOID RTMP_OS_Release_Packet(
4433         IN      PRTMP_ADAPTER pAd,
4434         IN      PQUEUE_ENTRY  pEntry);
4435
4436 VOID RTMPusecDelay(
4437         IN      ULONG   usec);
4438
4439 NDIS_STATUS os_alloc_mem(
4440         IN      RTMP_ADAPTER *pAd,
4441         OUT     UCHAR **mem,
4442         IN      ULONG  size);
4443
4444 NDIS_STATUS os_free_mem(
4445         IN      PRTMP_ADAPTER pAd,
4446         IN      PVOID mem);
4447
4448
4449 void RTMP_AllocateSharedMemory(
4450         IN      PRTMP_ADAPTER pAd,
4451         IN      ULONG   Length,
4452         IN      BOOLEAN Cached,
4453         OUT     PVOID   *VirtualAddress,
4454         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4455
4456 VOID RTMPFreeTxRxRingMemory(
4457     IN  PRTMP_ADAPTER   pAd);
4458
4459 NDIS_STATUS AdapterBlockAllocateMemory(
4460         IN PVOID        handle,
4461         OUT     PVOID   *ppAd);
4462
4463 void RTMP_AllocateTxDescMemory(
4464         IN      PRTMP_ADAPTER pAd,
4465         IN      UINT    Index,
4466         IN      ULONG   Length,
4467         IN      BOOLEAN Cached,
4468         OUT     PVOID   *VirtualAddress,
4469         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4470
4471 void RTMP_AllocateFirstTxBuffer(
4472         IN      PRTMP_ADAPTER pAd,
4473         IN      UINT    Index,
4474         IN      ULONG   Length,
4475         IN      BOOLEAN Cached,
4476         OUT     PVOID   *VirtualAddress,
4477         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4478
4479 void RTMP_FreeFirstTxBuffer(
4480         IN      PRTMP_ADAPTER pAd,
4481         IN      ULONG   Length,
4482         IN      BOOLEAN Cached,
4483         IN      PVOID   VirtualAddress,
4484         IN      NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4485
4486 void RTMP_AllocateMgmtDescMemory(
4487         IN      PRTMP_ADAPTER pAd,
4488         IN      ULONG   Length,
4489         IN      BOOLEAN Cached,
4490         OUT     PVOID   *VirtualAddress,
4491         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4492
4493 void RTMP_AllocateRxDescMemory(
4494         IN      PRTMP_ADAPTER pAd,
4495         IN      ULONG   Length,
4496         IN      BOOLEAN Cached,
4497         OUT     PVOID   *VirtualAddress,
4498         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4499
4500 void RTMP_FreeDescMemory(
4501         IN      PRTMP_ADAPTER pAd,
4502         IN      ULONG   Length,
4503         IN      PVOID   VirtualAddress,
4504         IN      NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4505
4506 PNDIS_PACKET RtmpOSNetPktAlloc(
4507         IN RTMP_ADAPTER *pAd,
4508         IN int size);
4509
4510 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
4511         IN      PRTMP_ADAPTER pAd,
4512         IN      ULONG   Length,
4513         IN      BOOLEAN Cached,
4514         OUT     PVOID   *VirtualAddress,
4515         OUT     PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4516
4517 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
4518         IN      PRTMP_ADAPTER pAd,
4519         IN      ULONG   Length,
4520         IN      BOOLEAN Cached,
4521         OUT     PVOID   *VirtualAddress);
4522
4523 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
4524         IN      PRTMP_ADAPTER pAd,
4525         IN      ULONG   Length);
4526
4527 void RTMP_QueryPacketInfo(
4528         IN  PNDIS_PACKET pPacket,
4529         OUT PACKET_INFO  *pPacketInfo,
4530         OUT PUCHAR               *pSrcBufVA,
4531         OUT     UINT             *pSrcBufLen);
4532
4533 void RTMP_QueryNextPacketInfo(
4534         IN  PNDIS_PACKET *ppPacket,
4535         OUT PACKET_INFO  *pPacketInfo,
4536         OUT PUCHAR               *pSrcBufVA,
4537         OUT     UINT             *pSrcBufLen);
4538
4539
4540 BOOLEAN RTMP_FillTxBlkInfo(
4541         IN RTMP_ADAPTER *pAd,
4542         IN TX_BLK *pTxBlk);
4543
4544
4545 PRTMP_SCATTER_GATHER_LIST
4546 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
4547
4548
4549  void announce_802_3_packet(
4550         IN      PRTMP_ADAPTER   pAd,
4551         IN      PNDIS_PACKET    pPacket);
4552
4553
4554 UINT BA_Reorder_AMSDU_Annnounce(
4555         IN      PRTMP_ADAPTER   pAd,
4556         IN      PNDIS_PACKET    pPacket);
4557
4558 PNET_DEV get_netdev_from_bssid(
4559         IN      PRTMP_ADAPTER   pAd,
4560         IN      UCHAR                   FromWhichBSSID);
4561
4562
4563 PNDIS_PACKET duplicate_pkt(
4564         IN      PRTMP_ADAPTER   pAd,
4565         IN      PUCHAR                  pHeader802_3,
4566     IN  UINT            HdrLen,
4567         IN      PUCHAR                  pData,
4568         IN      ULONG                   DataSize,
4569         IN      UCHAR                   FromWhichBSSID);
4570
4571
4572 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
4573         IN      PRTMP_ADAPTER   pAd,
4574         IN      PNDIS_PACKET    pOldPkt);
4575
4576 void ba_flush_reordering_timeout_mpdus(
4577         IN PRTMP_ADAPTER        pAd,
4578         IN PBA_REC_ENTRY        pBAEntry,
4579         IN ULONG                        Now32);
4580
4581
4582 VOID BAOriSessionSetUp(
4583                         IN PRTMP_ADAPTER    pAd,
4584                         IN MAC_TABLE_ENTRY      *pEntry,
4585                         IN UCHAR                        TID,
4586                         IN USHORT                       TimeOut,
4587                         IN ULONG                        DelayTime,
4588                         IN BOOLEAN              isForced);
4589
4590 VOID BASessionTearDownALL(
4591         IN OUT  PRTMP_ADAPTER pAd,
4592         IN              UCHAR Wcid);
4593
4594 BOOLEAN OS_Need_Clone_Packet(void);
4595
4596
4597 VOID build_tx_packet(
4598         IN      PRTMP_ADAPTER   pAd,
4599         IN      PNDIS_PACKET    pPacket,
4600         IN      PUCHAR  pFrame,
4601         IN      ULONG   FrameLen);
4602
4603
4604 VOID BAOriSessionTearDown(
4605         IN OUT  PRTMP_ADAPTER   pAd,
4606         IN              UCHAR                   Wcid,
4607         IN              UCHAR                   TID,
4608         IN              BOOLEAN                 bPassive,
4609         IN              BOOLEAN                 bForceSend);
4610
4611 VOID BARecSessionTearDown(
4612         IN OUT  PRTMP_ADAPTER   pAd,
4613         IN              UCHAR                   Wcid,
4614         IN              UCHAR                   TID,
4615         IN              BOOLEAN                 bPassive);
4616
4617 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
4618 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
4619
4620 PSTRING rstrtok(
4621         IN PSTRING s,
4622         IN const PSTRING ct);
4623
4624 ////////// common ioctl functions //////////
4625 INT     SetCommonHT(
4626         IN      PRTMP_ADAPTER   pAd);
4627
4628 INT         WpaCheckEapCode(
4629         IN  PRTMP_ADAPTER       pAd,
4630         IN  PUCHAR                              pFrame,
4631         IN  USHORT                              FrameLen,
4632         IN  USHORT                              OffSet);
4633
4634 VOID    WpaSendMicFailureToWpaSupplicant(
4635     IN  PRTMP_ADAPTER       pAd,
4636     IN  BOOLEAN             bUnicast);
4637
4638 int wext_notify_event_assoc(
4639         IN  RTMP_ADAPTER *pAd);
4640
4641 BOOLEAN STARxDoneInterruptHandle(
4642         IN      PRTMP_ADAPTER   pAd,
4643         IN      BOOLEAN                 argc);
4644
4645 // AMPDU packet indication
4646 VOID Indicate_AMPDU_Packet(
4647         IN      PRTMP_ADAPTER   pAd,
4648         IN      RX_BLK                  *pRxBlk,
4649         IN      UCHAR                   FromWhichBSSID);
4650
4651 // AMSDU packet indication
4652 VOID Indicate_AMSDU_Packet(
4653         IN      PRTMP_ADAPTER   pAd,
4654         IN      RX_BLK                  *pRxBlk,
4655         IN      UCHAR                   FromWhichBSSID);
4656
4657 // Normal legacy Rx packet indication
4658 VOID Indicate_Legacy_Packet(
4659         IN      PRTMP_ADAPTER   pAd,
4660         IN      RX_BLK                  *pRxBlk,
4661         IN      UCHAR                   FromWhichBSSID);
4662
4663 VOID Indicate_EAPOL_Packet(
4664         IN      PRTMP_ADAPTER   pAd,
4665         IN      RX_BLK                  *pRxBlk,
4666         IN      UCHAR                   FromWhichBSSID);
4667
4668 void  update_os_packet_info(
4669         IN      PRTMP_ADAPTER   pAd,
4670         IN      RX_BLK                  *pRxBlk,
4671         IN      UCHAR                   FromWhichBSSID);
4672
4673 void wlan_802_11_to_802_3_packet(
4674         IN      PRTMP_ADAPTER   pAd,
4675         IN      RX_BLK                  *pRxBlk,
4676         IN      PUCHAR                  pHeader802_3,
4677         IN  UCHAR                       FromWhichBSSID);
4678
4679 // remove LLC and get 802_3 Header
4680 #define  RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3)    \
4681 {                                                                                                                                                               \
4682         PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA;                                 \
4683                                                                                                                                                                 \
4684         if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH))                                    \
4685         {                                                                           \
4686                 _pDA = _pRxBlk->pHeader->Addr3;                                         \
4687                 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11);                \
4688         }                                                                           \
4689         else                                                                        \
4690         {                                                                           \
4691                 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA))                               \
4692                 {                                                                       \
4693                         _pDA = _pRxBlk->pHeader->Addr1;                                     \
4694                 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS))                                                                 \
4695                         _pSA = _pRxBlk->pHeader->Addr2;                                                                         \
4696                 else                                                                                                                                    \
4697                         _pSA = _pRxBlk->pHeader->Addr3;                                     \
4698                 }                                                                       \
4699                 else                                                                    \
4700                 {                                                                       \
4701                         _pDA = _pRxBlk->pHeader->Addr1;                                     \
4702                         _pSA = _pRxBlk->pHeader->Addr2;                                     \
4703                 }                                                                       \
4704         }                                                                           \
4705                                                                                                                                                                 \
4706         CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData,                             \
4707                 _pRxBlk->DataSize, _pRemovedLLCSNAP);                                   \
4708 }
4709
4710 VOID Sta_Announce_or_Forward_802_3_Packet(
4711         IN      PRTMP_ADAPTER   pAd,
4712         IN      PNDIS_PACKET    pPacket,
4713         IN      UCHAR                   FromWhichBSSID);
4714
4715 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
4716                         Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
4717                         //announce_802_3_packet(_pAd, _pPacket);
4718
4719 PNDIS_PACKET DuplicatePacket(
4720         IN      PRTMP_ADAPTER   pAd,
4721         IN      PNDIS_PACKET    pPacket,
4722         IN      UCHAR                   FromWhichBSSID);
4723
4724
4725 PNDIS_PACKET ClonePacket(
4726         IN      PRTMP_ADAPTER   pAd,
4727         IN      PNDIS_PACKET    pPacket,
4728         IN      PUCHAR                  pData,
4729         IN      ULONG                   DataSize);
4730
4731
4732 // Normal, AMPDU or AMSDU
4733 VOID CmmRxnonRalinkFrameIndicate(
4734         IN      PRTMP_ADAPTER   pAd,
4735         IN      RX_BLK                  *pRxBlk,
4736         IN      UCHAR                   FromWhichBSSID);
4737
4738 VOID CmmRxRalinkFrameIndicate(
4739         IN      PRTMP_ADAPTER   pAd,
4740         IN      MAC_TABLE_ENTRY *pEntry,
4741         IN      RX_BLK                  *pRxBlk,
4742         IN      UCHAR                   FromWhichBSSID);
4743
4744 VOID Update_Rssi_Sample(
4745         IN PRTMP_ADAPTER        pAd,
4746         IN RSSI_SAMPLE          *pRssi,
4747         IN PRXWI_STRUC          pRxWI);
4748
4749 PNDIS_PACKET GetPacketFromRxRing(
4750         IN      PRTMP_ADAPTER   pAd,
4751         OUT             PRT28XX_RXD_STRUC               pSaveRxD,
4752         OUT             BOOLEAN                 *pbReschedule,
4753         IN OUT  UINT32                  *pRxPending);
4754
4755 PNDIS_PACKET RTMPDeFragmentDataFrame(
4756         IN      PRTMP_ADAPTER   pAd,
4757         IN      RX_BLK                  *pRxBlk);
4758
4759 enum {
4760         DIDmsg_lnxind_wlansniffrm               = 0x00000044,
4761         DIDmsg_lnxind_wlansniffrm_hosttime      = 0x00010044,
4762         DIDmsg_lnxind_wlansniffrm_mactime       = 0x00020044,
4763         DIDmsg_lnxind_wlansniffrm_channel       = 0x00030044,
4764         DIDmsg_lnxind_wlansniffrm_rssi          = 0x00040044,
4765         DIDmsg_lnxind_wlansniffrm_sq            = 0x00050044,
4766         DIDmsg_lnxind_wlansniffrm_signal        = 0x00060044,
4767         DIDmsg_lnxind_wlansniffrm_noise         = 0x00070044,
4768         DIDmsg_lnxind_wlansniffrm_rate          = 0x00080044,
4769         DIDmsg_lnxind_wlansniffrm_istx          = 0x00090044,
4770         DIDmsg_lnxind_wlansniffrm_frmlen        = 0x000A0044
4771 };
4772 enum {
4773         P80211ENUM_msgitem_status_no_value      = 0x00
4774 };
4775 enum {
4776         P80211ENUM_truth_false                  = 0x00,
4777         P80211ENUM_truth_true                   = 0x01
4778 };
4779
4780 /* Definition from madwifi */
4781 typedef struct {
4782         UINT32 did;
4783         UINT16 status;
4784         UINT16 len;
4785         UINT32 data;
4786 } p80211item_uint32_t;
4787
4788 typedef struct {
4789         UINT32 msgcode;
4790         UINT32 msglen;
4791 #define WLAN_DEVNAMELEN_MAX 16
4792         UINT8 devname[WLAN_DEVNAMELEN_MAX];
4793         p80211item_uint32_t hosttime;
4794         p80211item_uint32_t mactime;
4795         p80211item_uint32_t channel;
4796         p80211item_uint32_t rssi;
4797         p80211item_uint32_t sq;
4798         p80211item_uint32_t signal;
4799         p80211item_uint32_t noise;
4800         p80211item_uint32_t rate;
4801         p80211item_uint32_t istx;
4802         p80211item_uint32_t frmlen;
4803 } wlan_ng_prism2_header;
4804
4805 /* The radio capture header precedes the 802.11 header. */
4806 typedef struct PACKED _ieee80211_radiotap_header {
4807     UINT8       it_version;     /* Version 0. Only increases
4808                                  * for drastic changes,
4809                                  * introduction of compatible
4810                                  * new fields does not count.
4811                                  */
4812     UINT8       it_pad;
4813     UINT16     it_len;         /* length of the whole
4814                                  * header in bytes, including
4815                                  * it_version, it_pad,
4816                                  * it_len, and data fields.
4817                                  */
4818     UINT32   it_present;        /* A bitmap telling which
4819                                          * fields are present. Set bit 31
4820                                          * (0x80000000) to extend the
4821                                          * bitmap by another 32 bits.
4822                                          * Additional extensions are made
4823                                          * by setting bit 31.
4824                                          */
4825 }ieee80211_radiotap_header ;
4826
4827 enum ieee80211_radiotap_type {
4828     IEEE80211_RADIOTAP_TSFT = 0,
4829     IEEE80211_RADIOTAP_FLAGS = 1,
4830     IEEE80211_RADIOTAP_RATE = 2,
4831     IEEE80211_RADIOTAP_CHANNEL = 3,
4832     IEEE80211_RADIOTAP_FHSS = 4,
4833     IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
4834     IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
4835     IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
4836     IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
4837     IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
4838     IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
4839     IEEE80211_RADIOTAP_ANTENNA = 11,
4840     IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
4841     IEEE80211_RADIOTAP_DB_ANTNOISE = 13
4842 };
4843
4844 #define WLAN_RADIOTAP_PRESENT (                 \
4845         (1 << IEEE80211_RADIOTAP_TSFT)  |       \
4846         (1 << IEEE80211_RADIOTAP_FLAGS) |       \
4847         (1 << IEEE80211_RADIOTAP_RATE)  |       \
4848          0)
4849
4850 typedef struct _wlan_radiotap_header {
4851         ieee80211_radiotap_header wt_ihdr;
4852         INT64 wt_tsft;
4853         UINT8 wt_flags;
4854         UINT8 wt_rate;
4855 } wlan_radiotap_header;
4856 /* Definition from madwifi */
4857
4858 void send_monitor_packets(
4859         IN      PRTMP_ADAPTER   pAd,
4860         IN      RX_BLK                  *pRxBlk);
4861
4862
4863 VOID    RTMPSetDesiredRates(
4864     IN  PRTMP_ADAPTER   pAdapter,
4865     IN  LONG            Rates);
4866
4867 INT     Set_FixedTxMode_Proc(
4868         IN      PRTMP_ADAPTER   pAd,
4869         IN      PSTRING                 arg);
4870
4871 BOOLEAN RT28XXChipsetCheck(
4872         IN void *_dev_p);
4873
4874
4875 VOID RT28XXDMADisable(
4876         IN RTMP_ADAPTER                 *pAd);
4877
4878 VOID RT28XXDMAEnable(
4879         IN RTMP_ADAPTER                 *pAd);
4880
4881 VOID RT28xx_UpdateBeaconToAsic(
4882         IN RTMP_ADAPTER * pAd,
4883         IN INT apidx,
4884         IN ULONG BeaconLen,
4885         IN ULONG UpdatePos);
4886
4887 int rt28xx_init(
4888         IN              PRTMP_ADAPTER   pAd,
4889         IN PSTRING pDefaultMac,
4890         IN PSTRING pHostName);
4891
4892 NDIS_STATUS RtmpNetTaskInit(
4893         IN RTMP_ADAPTER *pAd);
4894
4895 VOID RtmpNetTaskExit(
4896         IN PRTMP_ADAPTER pAd);
4897
4898 NDIS_STATUS RtmpMgmtTaskInit(
4899         IN RTMP_ADAPTER *pAd);
4900
4901 VOID RtmpMgmtTaskExit(
4902         IN RTMP_ADAPTER *pAd);
4903
4904 void tbtt_tasklet(unsigned long data);
4905
4906
4907 PNET_DEV RtmpPhyNetDevInit(
4908         IN RTMP_ADAPTER *pAd,
4909         IN RTMP_OS_NETDEV_OP_HOOK *pNetHook);
4910
4911 BOOLEAN RtmpPhyNetDevExit(
4912         IN RTMP_ADAPTER *pAd,
4913         IN PNET_DEV net_dev);
4914
4915 INT RtmpRaDevCtrlInit(
4916         IN RTMP_ADAPTER *pAd,
4917         IN RTMP_INF_TYPE infType);
4918
4919 BOOLEAN RtmpRaDevCtrlExit(
4920         IN RTMP_ADAPTER *pAd);
4921
4922
4923 #ifdef RTMP_MAC_PCI
4924 //
4925 // Function Prototype in cmm_data_pci.c
4926 //
4927 USHORT RtmpPCI_WriteTxResource(
4928         IN      PRTMP_ADAPTER   pAd,
4929         IN      TX_BLK                  *pTxBlk,
4930         IN      BOOLEAN                 bIsLast,
4931         OUT     USHORT                  *FreeNumber);
4932
4933 USHORT RtmpPCI_WriteSingleTxResource(
4934         IN      PRTMP_ADAPTER   pAd,
4935         IN      TX_BLK                  *pTxBlk,
4936         IN      BOOLEAN                 bIsLast,
4937         OUT     USHORT                  *FreeNumber);
4938
4939 USHORT RtmpPCI_WriteMultiTxResource(
4940         IN      PRTMP_ADAPTER   pAd,
4941         IN      TX_BLK                  *pTxBlk,
4942         IN      UCHAR                   frameNum,
4943         OUT     USHORT                  *FreeNumber);
4944
4945 USHORT  RtmpPCI_WriteFragTxResource(
4946         IN      PRTMP_ADAPTER   pAd,
4947         IN      TX_BLK                  *pTxBlk,
4948         IN      UCHAR                   fragNum,
4949         OUT     USHORT                  *FreeNumber);
4950
4951 USHORT RtmpPCI_WriteSubTxResource(
4952         IN      PRTMP_ADAPTER   pAd,
4953         IN      TX_BLK                  *pTxBlk,
4954         IN      BOOLEAN                 bIsLast,
4955         OUT     USHORT                  *FreeNumber);
4956
4957 VOID RtmpPCI_FinalWriteTxResource(
4958         IN      PRTMP_ADAPTER   pAd,
4959         IN      TX_BLK                  *pTxBlk,
4960         IN      USHORT                  totalMPDUSize,
4961         IN      USHORT                  FirstTxIdx);
4962
4963 VOID RtmpPCIDataLastTxIdx(
4964         IN      PRTMP_ADAPTER   pAd,
4965         IN      UCHAR                   QueIdx,
4966         IN      USHORT                  LastTxIdx);
4967
4968 VOID RtmpPCIDataKickOut(
4969         IN      PRTMP_ADAPTER   pAd,
4970         IN      TX_BLK                  *pTxBlk,
4971         IN      UCHAR                   QueIdx);
4972
4973
4974 int RtmpPCIMgmtKickOut(
4975         IN RTMP_ADAPTER         *pAd,
4976         IN UCHAR                        QueIdx,
4977         IN PNDIS_PACKET         pPacket,
4978         IN PUCHAR                       pSrcBufVA,
4979         IN UINT                         SrcBufLen);
4980
4981
4982 NDIS_STATUS RTMPCheckRxError(
4983         IN  PRTMP_ADAPTER   pAd,
4984         IN  PHEADER_802_11  pHeader,
4985         IN      PRXWI_STRUC     pRxWI,
4986         IN  PRT28XX_RXD_STRUC      pRxD);
4987
4988 BOOLEAN RT28xxPciAsicRadioOff(
4989         IN PRTMP_ADAPTER    pAd,
4990         IN UCHAR            Level,
4991         IN USHORT           TbttNumToNextWakeUp);
4992
4993 BOOLEAN RT28xxPciAsicRadioOn(
4994         IN PRTMP_ADAPTER pAd,
4995         IN UCHAR     Level);
4996
4997 VOID RTMPInitPCIeLinkCtrlValue(
4998         IN      PRTMP_ADAPTER   pAd);
4999
5000 VOID RTMPFindHostPCIDev(
5001     IN  PRTMP_ADAPTER   pAd);
5002
5003 VOID RTMPPCIeLinkCtrlValueRestore(
5004         IN      PRTMP_ADAPTER   pAd,
5005         IN   UCHAR              Level);
5006
5007 VOID RTMPPCIeLinkCtrlSetting(
5008         IN      PRTMP_ADAPTER   pAd,
5009         IN      USHORT          Max);
5010
5011 VOID RTMPrt3xSetPCIePowerLinkCtrl(
5012         IN      PRTMP_ADAPTER   pAd);
5013
5014 VOID PsPollWakeExec(
5015         IN PVOID SystemSpecific1,
5016         IN PVOID FunctionContext,
5017         IN PVOID SystemSpecific2,
5018         IN PVOID SystemSpecific3);
5019
5020 VOID  RadioOnExec(
5021         IN PVOID SystemSpecific1,
5022         IN PVOID FunctionContext,
5023         IN PVOID SystemSpecific2,
5024         IN PVOID SystemSpecific3);
5025
5026 VOID RT28xxPciStaAsicForceWakeup(
5027         IN      PRTMP_ADAPTER   pAd,
5028         IN BOOLEAN       bFromTx);
5029
5030 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
5031         IN      PRTMP_ADAPTER   pAd,
5032         IN USHORT TbttNumToNextWakeUp);
5033
5034
5035 VOID RT28xxPciMlmeRadioOn(
5036         IN PRTMP_ADAPTER        pAd);
5037
5038 VOID RT28xxPciMlmeRadioOFF(
5039         IN PRTMP_ADAPTER        pAd);
5040 #endif // RTMP_MAC_PCI //
5041
5042 #ifdef RTMP_MAC_USB
5043 //
5044 // Function Prototype in rtusb_bulk.c
5045 //
5046 VOID    RTUSBInitTxDesc(
5047         IN      PRTMP_ADAPTER   pAd,
5048         IN      PTX_CONTEXT             pTxContext,
5049         IN      UCHAR                   BulkOutPipeId,
5050         IN      usb_complete_t  Func);
5051
5052 VOID    RTUSBInitHTTxDesc(
5053         IN      PRTMP_ADAPTER   pAd,
5054         IN      PHT_TX_CONTEXT  pTxContext,
5055         IN      UCHAR                   BulkOutPipeId,
5056         IN      ULONG                   BulkOutSize,
5057         IN      usb_complete_t  Func);
5058
5059 VOID    RTUSBInitRxDesc(
5060         IN      PRTMP_ADAPTER   pAd,
5061         IN      PRX_CONTEXT             pRxContext);
5062
5063 VOID RTUSBCleanUpDataBulkOutQueue(
5064         IN      PRTMP_ADAPTER   pAd);
5065
5066 VOID RTUSBCancelPendingBulkOutIRP(
5067         IN      PRTMP_ADAPTER   pAd);
5068
5069 VOID RTUSBBulkOutDataPacket(
5070         IN      PRTMP_ADAPTER   pAd,
5071         IN      UCHAR                   BulkOutPipeId,
5072         IN      UCHAR                   Index);
5073
5074 VOID RTUSBBulkOutNullFrame(
5075         IN      PRTMP_ADAPTER   pAd);
5076
5077 VOID RTUSBBulkOutRTSFrame(
5078         IN      PRTMP_ADAPTER   pAd);
5079
5080 VOID RTUSBCancelPendingBulkInIRP(
5081         IN      PRTMP_ADAPTER   pAd);
5082
5083 VOID RTUSBCancelPendingIRPs(
5084         IN      PRTMP_ADAPTER   pAd);
5085
5086 VOID RTUSBBulkOutMLMEPacket(
5087         IN      PRTMP_ADAPTER   pAd,
5088         IN      UCHAR                   Index);
5089
5090 VOID RTUSBBulkOutPsPoll(
5091         IN      PRTMP_ADAPTER   pAd);
5092
5093 VOID RTUSBCleanUpMLMEBulkOutQueue(
5094         IN      PRTMP_ADAPTER   pAd);
5095
5096 VOID RTUSBKickBulkOut(
5097         IN      PRTMP_ADAPTER pAd);
5098
5099 VOID    RTUSBBulkReceive(
5100         IN      PRTMP_ADAPTER   pAd);
5101
5102 VOID DoBulkIn(
5103         IN RTMP_ADAPTER *pAd);
5104
5105 VOID RTUSBInitRxDesc(
5106         IN      PRTMP_ADAPTER   pAd,
5107         IN  PRX_CONTEXT         pRxContext);
5108
5109 VOID RTUSBBulkRxHandle(
5110         IN unsigned long data);
5111
5112 //
5113 // Function Prototype in rtusb_io.c
5114 //
5115 NTSTATUS RTUSBMultiRead(
5116         IN      PRTMP_ADAPTER   pAd,
5117         IN      USHORT                  Offset,
5118         OUT     PUCHAR                  pData,
5119         IN      USHORT                  length);
5120
5121 NTSTATUS RTUSBMultiWrite(
5122         IN      PRTMP_ADAPTER   pAd,
5123         IN      USHORT                  Offset,
5124         IN      PUCHAR                  pData,
5125         IN      USHORT                  length);
5126
5127 NTSTATUS RTUSBMultiWrite_OneByte(
5128         IN      PRTMP_ADAPTER   pAd,
5129         IN      USHORT                  Offset,
5130         IN      PUCHAR                  pData);
5131
5132 NTSTATUS RTUSBReadBBPRegister(
5133         IN      PRTMP_ADAPTER   pAd,
5134         IN      UCHAR                   Id,
5135         IN      PUCHAR                  pValue);
5136
5137 NTSTATUS RTUSBWriteBBPRegister(
5138         IN      PRTMP_ADAPTER   pAd,
5139         IN      UCHAR                   Id,
5140         IN      UCHAR                   Value);
5141
5142 NTSTATUS RTUSBWriteRFRegister(
5143         IN      PRTMP_ADAPTER   pAd,
5144         IN      UINT32                  Value);
5145
5146 NTSTATUS RTUSB_VendorRequest(
5147         IN      PRTMP_ADAPTER   pAd,
5148         IN      UINT32                  TransferFlags,
5149         IN      UCHAR                   ReservedBits,
5150         IN      UCHAR                   Request,
5151         IN      USHORT                  Value,
5152         IN      USHORT                  Index,
5153         IN      PVOID                   TransferBuffer,
5154         IN      UINT32                  TransferBufferLength);
5155
5156 NTSTATUS RTUSBReadEEPROM(
5157         IN      PRTMP_ADAPTER   pAd,
5158         IN      USHORT                  Offset,
5159         OUT     PUCHAR                  pData,
5160         IN      USHORT                  length);
5161
5162 NTSTATUS RTUSBWriteEEPROM(
5163         IN      PRTMP_ADAPTER   pAd,
5164         IN      USHORT                  Offset,
5165         IN      PUCHAR                  pData,
5166         IN      USHORT                  length);
5167
5168 VOID RTUSBPutToSleep(
5169         IN      PRTMP_ADAPTER   pAd);
5170
5171 NTSTATUS RTUSBWakeUp(
5172         IN      PRTMP_ADAPTER   pAd);
5173
5174 VOID RTUSBInitializeCmdQ(
5175         IN      PCmdQ   cmdq);
5176
5177 NDIS_STATUS     RTUSBEnqueueCmdFromNdis(
5178         IN      PRTMP_ADAPTER   pAd,
5179         IN      NDIS_OID                Oid,
5180         IN      BOOLEAN                 SetInformation,
5181         IN      PVOID                   pInformationBuffer,
5182         IN      UINT32                  InformationBufferLength);
5183
5184 NDIS_STATUS RTUSBEnqueueInternalCmd(
5185         IN      PRTMP_ADAPTER   pAd,
5186         IN NDIS_OID                     Oid,
5187         IN PVOID                        pInformationBuffer,
5188         IN UINT32                       InformationBufferLength);
5189
5190 VOID RTUSBDequeueCmd(
5191         IN      PCmdQ           cmdq,
5192         OUT     PCmdQElmt       *pcmdqelmt);
5193
5194 INT RTUSBCmdThread(
5195         IN OUT PVOID Context);
5196
5197 VOID RTUSBBssBeaconExit(
5198         IN RTMP_ADAPTER *pAd);
5199
5200 VOID RTUSBBssBeaconStop(
5201         IN RTMP_ADAPTER *pAd);
5202
5203 VOID RTUSBBssBeaconStart(
5204         IN RTMP_ADAPTER * pAd);
5205
5206 VOID RTUSBBssBeaconInit(
5207         IN RTMP_ADAPTER *pAd);
5208
5209 VOID RTUSBWatchDog(
5210         IN RTMP_ADAPTER *pAd);
5211
5212 NTSTATUS RTUSBWriteMACRegister(
5213         IN      PRTMP_ADAPTER   pAd,
5214         IN      USHORT                  Offset,
5215         IN      UINT32                  Value);
5216
5217 NTSTATUS RTUSBReadMACRegister(
5218         IN      PRTMP_ADAPTER   pAd,
5219         IN      USHORT                  Offset,
5220         OUT     PUINT32                 pValue);
5221
5222 NTSTATUS RTUSBSingleWrite(
5223         IN      RTMP_ADAPTER    *pAd,
5224         IN      USHORT                  Offset,
5225         IN      USHORT                  Value);
5226
5227 NTSTATUS RTUSBFirmwareWrite(
5228         IN PRTMP_ADAPTER pAd,
5229         IN PUCHAR               pFwImage,
5230         IN ULONG                FwLen);
5231
5232 NTSTATUS        RTUSBVenderReset(
5233         IN      PRTMP_ADAPTER   pAd);
5234
5235 NDIS_STATUS RTUSBSetHardWareRegister(
5236         IN      PRTMP_ADAPTER   pAdapter,
5237         IN      PVOID                   pBuf);
5238
5239 NDIS_STATUS RTUSBQueryHardWareRegister(
5240         IN      PRTMP_ADAPTER   pAdapter,
5241         IN      PVOID                   pBuf);
5242
5243 VOID CMDHandler(
5244         IN PRTMP_ADAPTER pAd);
5245
5246 NDIS_STATUS     RTUSBWriteHWMACAddress(
5247         IN      PRTMP_ADAPTER           pAdapter);
5248
5249 VOID MacTableInitialize(
5250         IN  PRTMP_ADAPTER   pAd);
5251
5252 VOID MlmeSetPsm(
5253         IN PRTMP_ADAPTER pAd,
5254         IN USHORT psm);
5255
5256 NDIS_STATUS RTMPWPAAddKeyProc(
5257         IN  PRTMP_ADAPTER   pAd,
5258         IN  PVOID           pBuf);
5259
5260 VOID AsicRxAntEvalAction(
5261         IN PRTMP_ADAPTER pAd);
5262
5263 void append_pkt(
5264         IN      PRTMP_ADAPTER   pAd,
5265         IN      PUCHAR          pHeader802_3,
5266         IN      UINT            HdrLen,
5267         IN      PUCHAR          pData,
5268         IN      ULONG           DataSize,
5269         OUT  PNDIS_PACKET       *ppPacket);
5270
5271 UINT deaggregate_AMSDU_announce(
5272         IN      PRTMP_ADAPTER   pAd,
5273         PNDIS_PACKET            pPacket,
5274         IN      PUCHAR                  pData,
5275         IN      ULONG                   DataSize);
5276
5277 NDIS_STATUS     RTMPCheckRxError(
5278         IN      PRTMP_ADAPTER   pAd,
5279         IN      PHEADER_802_11  pHeader,
5280         IN      PRXWI_STRUC     pRxWI,
5281         IN      PRT28XX_RXD_STRUC       pRxINFO);
5282
5283 VOID RTUSBMlmeHardTransmit(
5284         IN      PRTMP_ADAPTER   pAd,
5285         IN      PMGMT_STRUC             pMgmt);
5286
5287 INT MlmeThread(
5288         IN PVOID Context);
5289
5290 //
5291 // Function Prototype in rtusb_data.c
5292 //
5293 NDIS_STATUS     RTUSBFreeDescriptorRequest(
5294         IN      PRTMP_ADAPTER   pAd,
5295         IN      UCHAR                   BulkOutPipeId,
5296         IN      UINT32                  NumberRequired);
5297
5298
5299 BOOLEAN RTUSBNeedQueueBackForAgg(
5300         IN RTMP_ADAPTER *pAd,
5301         IN UCHAR                BulkOutPipeId);
5302
5303
5304 VOID RTMPWriteTxInfo(
5305         IN      PRTMP_ADAPTER   pAd,
5306         IN      PTXINFO_STRUC   pTxInfo,
5307         IN        USHORT                USBDMApktLen,
5308         IN        BOOLEAN               bWiv,
5309         IN        UCHAR                 QueueSel,
5310         IN        UCHAR                 NextValid,
5311         IN        UCHAR                 TxBurst);
5312
5313 //
5314 // Function Prototype in cmm_data_usb.c
5315 //
5316 USHORT RtmpUSB_WriteSubTxResource(
5317         IN      PRTMP_ADAPTER   pAd,
5318         IN      TX_BLK                  *pTxBlk,
5319         IN      BOOLEAN                 bIsLast,
5320         OUT     USHORT                  *FreeNumber);
5321
5322 USHORT RtmpUSB_WriteSingleTxResource(
5323         IN      PRTMP_ADAPTER   pAd,
5324         IN      TX_BLK                  *pTxBlk,
5325         IN      BOOLEAN                 bIsLast,
5326         OUT     USHORT                  *FreeNumber);
5327
5328 USHORT  RtmpUSB_WriteFragTxResource(
5329         IN      PRTMP_ADAPTER   pAd,
5330         IN      TX_BLK                  *pTxBlk,
5331         IN      UCHAR                   fragNum,
5332         OUT     USHORT                  *FreeNumber);
5333
5334 USHORT RtmpUSB_WriteMultiTxResource(
5335         IN      PRTMP_ADAPTER   pAd,
5336         IN      TX_BLK                  *pTxBlk,
5337         IN      UCHAR                   frameNum,
5338         OUT     USHORT                  *FreeNumber);
5339
5340 VOID RtmpUSB_FinalWriteTxResource(
5341         IN      PRTMP_ADAPTER   pAd,
5342         IN      TX_BLK                  *pTxBlk,
5343         IN      USHORT                  totalMPDUSize,
5344         IN      USHORT                  TxIdx);
5345
5346 VOID RtmpUSBDataLastTxIdx(
5347         IN      PRTMP_ADAPTER   pAd,
5348         IN      UCHAR                   QueIdx,
5349         IN      USHORT                  TxIdx);
5350
5351 VOID RtmpUSBDataKickOut(
5352         IN      PRTMP_ADAPTER   pAd,
5353         IN      TX_BLK                  *pTxBlk,
5354         IN      UCHAR                   QueIdx);
5355
5356
5357 int RtmpUSBMgmtKickOut(
5358         IN RTMP_ADAPTER         *pAd,
5359         IN UCHAR                        QueIdx,
5360         IN PNDIS_PACKET         pPacket,
5361         IN PUCHAR                       pSrcBufVA,
5362         IN UINT                         SrcBufLen);
5363
5364 VOID RtmpUSBNullFrameKickOut(
5365         IN RTMP_ADAPTER *pAd,
5366         IN UCHAR                QueIdx,
5367         IN UCHAR                *pNullFrame,
5368         IN UINT32               frameLen);
5369
5370 VOID RtmpUsbStaAsicForceWakeupTimeout(
5371         IN PVOID SystemSpecific1,
5372         IN PVOID FunctionContext,
5373         IN PVOID SystemSpecific2,
5374         IN PVOID SystemSpecific3);
5375
5376 VOID RT28xxUsbStaAsicForceWakeup(
5377         IN PRTMP_ADAPTER pAd,
5378         IN BOOLEAN       bFromTx);
5379
5380 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
5381         IN PRTMP_ADAPTER pAd,
5382         IN USHORT TbttNumToNextWakeUp);
5383
5384 VOID RT28xxUsbMlmeRadioOn(
5385         IN PRTMP_ADAPTER pAd);
5386
5387 VOID RT28xxUsbMlmeRadioOFF(
5388         IN PRTMP_ADAPTER pAd);
5389 #endif // RTMP_MAC_USB //
5390
5391 VOID AsicTurnOffRFClk(
5392         IN PRTMP_ADAPTER    pAd,
5393         IN      UCHAR           Channel);
5394
5395 VOID AsicTurnOnRFClk(
5396         IN PRTMP_ADAPTER        pAd,
5397         IN      UCHAR                   Channel);
5398
5399
5400
5401 #ifdef RTMP_TIMER_TASK_SUPPORT
5402 INT RtmpTimerQThread(
5403         IN OUT PVOID Context);
5404
5405 RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(
5406         IN RTMP_ADAPTER *pAd,
5407         IN RALINK_TIMER_STRUCT *pTimer);
5408
5409 BOOLEAN RtmpTimerQRemove(
5410         IN RTMP_ADAPTER *pAd,
5411         IN RALINK_TIMER_STRUCT *pTimer);
5412
5413 void RtmpTimerQExit(
5414         IN RTMP_ADAPTER *pAd);
5415
5416 void RtmpTimerQInit(
5417         IN RTMP_ADAPTER *pAd);
5418 #endif // RTMP_TIMER_TASK_SUPPORT //
5419
5420 VOID AsicStaBbpTuning(
5421         IN PRTMP_ADAPTER pAd);
5422
5423 BOOLEAN StaAddMacTableEntry(
5424         IN  PRTMP_ADAPTER               pAd,
5425         IN  PMAC_TABLE_ENTRY    pEntry,
5426         IN  UCHAR                               MaxSupportedRateIn500Kbps,
5427         IN  HT_CAPABILITY_IE    *pHtCapability,
5428         IN  UCHAR                               HtCapabilityLen,
5429         IN  ADD_HT_INFO_IE              *pAddHtInfo,
5430         IN  UCHAR                               AddHtInfoLen,
5431         IN  USHORT                      CapabilityInfo);
5432
5433
5434 BOOLEAN AUTH_ReqSend(
5435         IN  PRTMP_ADAPTER               pAd,
5436         IN  PMLME_QUEUE_ELEM    pElem,
5437         IN  PRALINK_TIMER_STRUCT pAuthTimer,
5438         IN  PSTRING                             pSMName,
5439         IN  USHORT                              SeqNo,
5440         IN  PUCHAR                              pNewElement,
5441         IN  ULONG                               ElementLen);
5442
5443 void RTMP_IndicateMediaState(
5444         IN      PRTMP_ADAPTER   pAd);
5445
5446 VOID ReSyncBeaconTime(
5447         IN  PRTMP_ADAPTER   pAd);
5448
5449 VOID RTMPSetAGCInitValue(
5450         IN PRTMP_ADAPTER        pAd,
5451         IN UCHAR                        BandWidth);
5452
5453 int rt28xx_close(IN PNET_DEV dev);
5454 int rt28xx_open(IN PNET_DEV dev);
5455
5456
5457 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
5458 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
5459 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
5460
5461
5462 #ifdef LINUX
5463 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
5464 {
5465         if (VIRTUAL_IF_NUM(pAd) == 0)
5466         {
5467                 if (rt28xx_open(pAd->net_dev) != 0)
5468                 {
5469                         DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n"));
5470                         return -1;
5471         }
5472         }
5473         else
5474         {
5475         }
5476         VIRTUAL_IF_INC(pAd);
5477         return 0;
5478 }
5479
5480 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
5481 {
5482         VIRTUAL_IF_DEC(pAd);
5483         if (VIRTUAL_IF_NUM(pAd) == 0)
5484                 rt28xx_close(pAd->net_dev);
5485         return;
5486 }
5487 #endif // LINUX //
5488
5489
5490 /*
5491         OS Related funciton prototype definitions.
5492         TODO: Maybe we need to move these function prototypes to other proper place.
5493 */
5494 int RtmpOSWrielessEventSend(
5495         IN RTMP_ADAPTER *pAd,
5496         IN UINT32               eventType,
5497         IN INT                  flags,
5498         IN PUCHAR               pSrcMac,
5499         IN PUCHAR               pData,
5500         IN UINT32               dataLen);
5501
5502 int RtmpOSNetDevAddrSet(
5503         IN PNET_DEV pNetDev,
5504         IN PUCHAR       pMacAddr);
5505
5506 int RtmpOSNetDevAttach(
5507         IN PNET_DEV pNetDev,
5508         IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook);
5509
5510 void RtmpOSNetDevClose(
5511         IN PNET_DEV pNetDev);
5512
5513 void RtmpOSNetDevDetach(
5514         IN PNET_DEV pNetDev);
5515
5516 INT RtmpOSNetDevAlloc(
5517         IN PNET_DEV *pNewNetDev,
5518         IN UINT32       privDataSize);
5519
5520 void RtmpOSNetDevFree(
5521         IN PNET_DEV pNetDev);
5522
5523 PNET_DEV RtmpOSNetDevGetByName(
5524         IN PNET_DEV pNetDev,
5525         IN PSTRING      pDevName);
5526
5527 void RtmpOSNetDeviceRefPut(
5528         IN PNET_DEV pNetDev);
5529
5530 PNET_DEV RtmpOSNetDevCreate(
5531         IN RTMP_ADAPTER *pAd,
5532         IN INT                  devType,
5533         IN INT                  devNum,
5534         IN INT                  privMemSize,
5535         IN PSTRING              pNamePrefix);
5536
5537 /*
5538         Task operation related function prototypes
5539 */
5540 void RtmpOSTaskCustomize(
5541         IN RTMP_OS_TASK *pTask);
5542
5543 INT RtmpOSTaskNotifyToExit(
5544         IN RTMP_OS_TASK *pTask);
5545
5546 NDIS_STATUS RtmpOSTaskKill(
5547         IN RTMP_OS_TASK *pTask);
5548
5549 NDIS_STATUS RtmpOSTaskInit(
5550         IN RTMP_OS_TASK *pTask,
5551         PSTRING                  pTaskName,
5552         VOID                     *pPriv);
5553
5554 NDIS_STATUS RtmpOSTaskAttach(
5555         IN RTMP_OS_TASK *pTask,
5556         IN int (*fn)(void *),
5557         IN void *arg);
5558
5559
5560 /*
5561         File operation related function prototypes
5562 */
5563 RTMP_OS_FD RtmpOSFileOpen(
5564         IN char *pPath,
5565         IN int flag,
5566         IN int mode);
5567
5568 int RtmpOSFileClose(
5569         IN RTMP_OS_FD osfd);
5570
5571 void RtmpOSFileSeek(
5572         IN RTMP_OS_FD osfd,
5573         IN int offset);
5574
5575 int RtmpOSFileRead(
5576         IN RTMP_OS_FD osfd,
5577         IN char *pDataPtr,
5578         IN int readLen);
5579
5580 int RtmpOSFileWrite(
5581         IN RTMP_OS_FD osfd,
5582         IN char *pDataPtr,
5583         IN int writeLen);
5584
5585 #endif  // __RTMP_H__
5586