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