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