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