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