2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
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. *
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. *
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. *
25 *************************************************************************
31 Miniport generic portion header file
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
43 #include "spectrum_def.h"
45 #include "rtmp_dot11.h"
47 #undef AP_WSC_INCLUDED
48 #undef STA_WSC_INCLUDED
53 #if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED)
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
;
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];
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];
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
;
125 extern UCHAR SupRateIe
;
126 extern UCHAR ExtRateIe
;
128 extern UCHAR HtCapIe
;
129 extern UCHAR AddHtInfoIe
;
130 extern UCHAR NewExtChanIe
;
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
182 // Queue structure and macros
184 typedef struct _QUEUE_ENTRY
{
185 struct _QUEUE_ENTRY
*Next
;
186 } QUEUE_ENTRY
, *PQUEUE_ENTRY
;
189 typedef struct _QUEUE_HEADER
{
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; \
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); \
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); \
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,
326 // PRTMP_ADAPTER pAd,
327 // ULONG Register_Offset,
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
{
343 } RTMP_SCATTER_GATHER_ELEMENT
, *PRTMP_SCATTER_GATHER_ELEMENT
;
346 typedef struct _RTMP_SCATTER_GATHER_LIST
{
347 ULONG NumberOfElements
;
349 RTMP_SCATTER_GATHER_ELEMENT Elements
[NIC_MAX_PHYS_BUF_COUNT
];
350 } RTMP_SCATTER_GATHER_LIST
, *PRTMP_SCATTER_GATHER_LIST
;
353 // Some utility macros
356 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
360 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
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; \
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; \
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
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) \
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); \
446 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
447 _pRemovedLLCSNAP = _pData; \
448 _DataSize -= LENGTH_802_1_H; \
449 _pData += LENGTH_802_1_H; \
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
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 //
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) \
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
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
];
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
];
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
];
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
574 ULONG RcvAlignmentErrors
;
576 ULONG MoreCollisions
;
578 } COUNTER_802_3
, *PCOUNTER_802_3
;
580 typedef struct _COUNTER_802_11
{
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
;
606 ULONG RxRingErrCount
;
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
;
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
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
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
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
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
;
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
{
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
{
734 } RT_802_11_CIPHER_SUITE_TYPE
, *PRT_802_11_CIPHER_SUITE_TYPE
;
735 #endif // RTMP_MAC_USB //
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
744 } ROGUEAP_ENTRY
, *PROGUEAP_ENTRY
;
748 ROGUEAP_ENTRY RogueApEntry
[MAX_LEN_OF_BSS_TABLE
];
749 } ROGUEAP_TABLE
, *PROGUEAP_TABLE
;
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
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
;
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
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
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
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
831 ARCFOURCONTEXT WEPCONTEXT
;
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
{
844 USHORT FalseCcaLowerThreshold
; // default 100
845 USHORT FalseCcaUpperThreshold
; // default 512
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
859 } CHANNEL_TX_POWER
, *PCHANNEL_TX_POWER
;
861 // structure to store 802.11j channel TX power
862 typedef struct _CHANNEL_11J_TX_POWER
{
864 UCHAR BW
; // BW_10 or BW_20
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
903 ULONG InServiceMonitorCount
; // unit: sec
904 UINT8 DfsSessionTime
;
907 UINT8 LongPulseRadarTh
;
908 } RADAR_DETECT_STRUCT
, *PRADAR_DETECT_STRUCT
;
910 typedef enum _ABGBAND_STATE_
{
917 // Power save method control
918 typedef union _PS_CONTROL
{
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
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
];
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
;
965 NDIS_SPIN_LOCK TaskLock
;
970 RALINK_TIMER_STRUCT PeriodicTimer
;
971 RALINK_TIMER_STRUCT APSDPeriodicTimer
;
972 RALINK_TIMER_STRUCT LinkDownTimer
;
973 RALINK_TIMER_STRUCT LinkUpTimer
;
975 UCHAR bPsPollTimerRunning
;
976 RALINK_TIMER_STRUCT PsPollTimer
;
977 RALINK_TIMER_STRUCT RadioOnOffTimer
;
978 #endif // RTMP_MAC_PCI //
980 ULONG OneSecPeriodicRound
;
983 BOOLEAN bLowThroughput
;
984 BOOLEAN bEnableAutoAntennaCheck
;
985 RALINK_TIMER_STRUCT RxAntEvalTimer
;
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 */
1010 struct reordering_list
1012 struct reordering_mpdu
*next
;
1016 struct reordering_mpdu_pool
1019 NDIS_SPIN_LOCK lock
;
1020 struct reordering_list freelist
;
1023 typedef enum _REC_BLOCKACK_STATUS
1027 Recipient_HandleRes
,
1029 } REC_BLOCKACK_STATUS
, *PREC_BLOCKACK_STATUS
;
1031 typedef enum _ORI_BLOCKACK_STATUS
1037 } ORI_BLOCKACK_STATUS
, *PORI_BLOCKACK_STATUS
;
1039 typedef struct _BA_ORI_ENTRY
{
1044 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1046 USHORT TimeOutValue
;
1047 ORI_BLOCKACK_STATUS ORI_BA_Status
;
1048 RALINK_TIMER_STRUCT ORIBATimer
;
1050 } BA_ORI_ENTRY
, *PBA_ORI_ENTRY
;
1052 typedef struct _BA_REC_ENTRY
{
1055 UCHAR BAWinSize
; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1057 //UCHAR Curindidx; // the head in the RX reordering buffer
1059 // USHORT LastIndSeqAtTimer;
1060 USHORT TimeOutValue
;
1061 RALINK_TIMER_STRUCT RECBATimer
;
1062 ULONG LastIndSeqAtTimer
;
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;
1072 struct reordering_list list
;
1073 } BA_REC_ENTRY
, *PBA_REC_ENTRY
;
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
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
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
{
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.
1124 } BACAP_STRUC
, *PBACAP_STRUC
;
1128 BOOLEAN IsRecipient
;
1129 UCHAR MACAddr
[MAC_ADDR_LEN
];
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
{
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
;
1161 BOOLEAN bRTSLongProtOn
;
1162 BOOLEAN bLastAtheros
;
1163 BOOLEAN bCurrentAtheros
;
1164 BOOLEAN bNowAtherosBurstOn
;
1165 BOOLEAN bNextDisableRxBA
;
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
{
1173 //UINT32 MCS:7; // MCS
1176 UINT32 BW
:1; //channel bandwidth 20MHz or 40 MHz
1178 UINT32 STBC
:1; //SPACE
1185 } REG_TRANSMIT_SETTING
, *PREG_TRANSMIT_SETTING
;
1187 typedef union _DESIRED_TRANSMIT_SETTING
{
1189 USHORT MCS
:7; // MCS
1191 USHORT FixedTxMode
:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1195 } DESIRED_TRANSMIT_SETTING
, *PDESIRED_TRANSMIT_SETTING
;
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];
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
;
1263 UCHAR CentralChannel
; // Central Channel when using 40MHz is indicating. not real channel.
1265 UCHAR SupRate
[MAX_LEN_OF_SUPPORTED_RATES
];
1267 UCHAR ExtRate
[MAX_LEN_OF_SUPPORTED_RATES
];
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
;
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
;
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
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
;
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
1361 BOOLEAN bMIMOPSEnable
;
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
;
1374 // Enable wireless event
1375 BOOLEAN bWirelessEvent
;
1376 BOOLEAN bWiFiTest
; // Enable this parameter for WiFi test
1378 // Tx & Rx Stream number selection
1382 BOOLEAN bHardwareRadio
; // Hardware controlled Radio enabled
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
;
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
;
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
{
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
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
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
1476 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
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
];
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.
1541 ////////////////////////////////////////////////////////////////////////////////////////
1543 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer
;
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.
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
;
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
;
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
{
1595 USHORT AtimWin
; // in kusec; IBSS parameter set element
1596 USHORT CapabilityInfo
;
1597 USHORT CfpMaxDuration
;
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
];
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.
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
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
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
];
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
;
1646 NDIS_802_11_PRIVACY_FILTER PrivacyFilter
; // PrivacyFilter enum for 802.1X
1647 CIPHER_KEY PairwiseKey
;
1650 UCHAR PMKID
[LEN_PMKID
];
1653 UCHAR Addr
[MAC_ADDR_LEN
];
1656 AUTH_STATE AuthState
; // for SHARED KEY authentication state machine used only
1657 BOOLEAN IsReassocSta
; // Indicate whether this is a reassociation procedure
1659 USHORT CapabilityInfo
;
1661 ULONG NoDataIdleCount
;
1662 UINT16 StationKeepAliveCount
; // unit: second
1664 QUEUE_HEADER PsQueue
;
1666 UINT32 StaConnectTime
; // the live time of this station since associated with AP
1669 USHORT NoBADataCountDown
;
1671 UINT32 CachedBuf
[16]; // UINT (4 bytes) for alignment
1672 UINT TxBFCount
; // 3*3
1674 UINT DebugFIFOCount
;
1679 //====================================================
1680 //WDS entry needs these
1681 // if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
1682 UINT MatchWDSTabIdx
;
1683 UCHAR MaxSupportedRate
;
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.
1723 UCHAR MaxRAmpduFactor
;
1725 UCHAR MmpsMode
; // MIMO power save more.
1727 HT_CAPABILITY_IE HTCapability
;
1729 BOOLEAN bAutoTxRateSwitch
;
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
{
1750 MAC_TABLE_ENTRY
*Hash
[HASH_TABLE_SIZE
];
1751 MAC_TABLE_ENTRY Content
[MAX_LEN_OF_MAC_TABLE
];
1752 QUEUE_HEADER McastPsQueue
;
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
;
1775 BOOLEAN bGreenField
;
1779 typedef struct _RTMP_DEV_INFO_
1782 RTMP_INF_TYPE infType
;
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
1818 RTMP_CHIP_OP chipOps
;
1819 USHORT ThisTbttNumToNextWakeUp
;
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
;
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
;
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
1869 USHORT BulkOutMaxPacketSize
;
1870 USHORT BulkInMaxPacketSize
;
1872 //======Control Flags
1873 LONG PendingIoCount
;
1875 BOOLEAN bUsbTxBulkAggre
; // Flags for bulk out data priority
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
];
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 /*****************************************************************************************/
1948 RTMP_RX_RING RxRing
;
1949 NDIS_SPIN_LOCK RxRingLock
; // Rx Ring spinlock
1951 NDIS_SPIN_LOCK McuCmdLock
; //MCU Command Queue spinlock
1953 #endif // RTMP_MAC_PCI //
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 // ---------------------------
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
;
1981 // ---------------------------
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 // ----------------------------
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
;
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[]
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
2047 UCHAR TxMixerGain24G
; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G
2048 UCHAR TxMixerGain5G
;
2050 // ----------------------------
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
;
2062 /*****************************************************************************************/
2063 /* 802.11 related parameters */
2064 /*****************************************************************************************/
2065 // outgoing BEACON frame buffer and corresponding TXD
2066 TXWI_STRUC BeaconTxWI
;
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
;
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
;
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
;
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
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 #
2147 // Control disconnect / connect event generation
2148 //+++Didn't used anymore
2153 //+++Used only for Station
2154 BOOLEAN bConfigChanged
; // Config Change flag for the same SSID setting
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
2164 // ---------------------------
2166 // ---------------------------
2167 RT_802_11_EVENT_TABLE EventTab
;
2172 /*****************************************************************************************/
2173 /* Statistic related parameters */
2174 /*****************************************************************************************/
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 // ----------------------------
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];
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.
2212 ULONG BulkOutComplete
;
2213 ULONG BulkOutCompleteOther
;
2214 ULONG BulkOutCompleteCancel
; // seems not use now?
2216 ULONG BulkInComplete
;
2217 ULONG BulkInCompleteFail
;
2220 struct wificonf WIFItestbed
;
2222 struct reordering_mpdu_pool mpdu_blk_pool
;
2224 ULONG OneSecondnonBEpackets
; // record non BE packets per second
2227 struct iw_statistics iw_stats
;
2229 struct net_device_stats stats
;
2236 ULONG TbttTickCount
;
2237 #ifdef PCI_MSI_SUPPORT
2239 #endif // PCI_MSI_SUPPORT //
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
;
2259 #ifdef RTMP_EFUSE_SUPPORT
2261 BOOLEAN bEEPROMFile
;
2262 BOOLEAN bFroceEEPROMBuffer
;
2263 UCHAR EEPROMImage
[1024];
2264 #endif // RTMP_EFUSE_SUPPORT //
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
;
2294 PHEADER_802_11 pHeader
;
2295 PNDIS_PACKET pRxPacket
;
2299 UCHAR UserPriority
; // for calculate TKIP MIC using
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_
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
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.
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(
2406 IN PUCHAR
*ppMacAddr
,
2407 IN UINT16 ProtoType
)
2409 if (pIpAddr
== NULL
)
2412 if (ppMacAddr
== NULL
|| *ppMacAddr
== NULL
)
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];
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];
2443 char *GetPhyMode(int Mode
);
2444 char* GetBW(int BW
);
2447 // Private routines in rtmp_init.c
2449 NDIS_STATUS
RTMPAllocAdapterBlock(
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(
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
,
2489 NDIS_STATUS
RT30xxReadRFRegister(
2490 IN PRTMP_ADAPTER pAd
,
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
);
2512 IN PRTMP_ADAPTER pAd
);
2514 VOID
RTMPRingCleanUp(
2515 IN PRTMP_ADAPTER pAd
,
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(
2546 ULONG
RTMPCompareMemory(
2551 VOID
RTMPMoveMemory(
2564 VOID
RTMPPatchMacBbpBug(
2565 IN PRTMP_ADAPTER pAd
);
2568 IN PRTMP_ADAPTER pAd
,
2569 IN PRALINK_TIMER_STRUCT pTimer
,
2570 IN PVOID pTimerFunc
,
2575 IN PRALINK_TIMER_STRUCT pTimer
,
2580 IN PRALINK_TIMER_STRUCT pTimer
,
2583 VOID
RTMPCancelTimer(
2584 IN PRALINK_TIMER_STRUCT pTimer
,
2585 OUT BOOLEAN
*pCancelled
);
2588 IN PRTMP_ADAPTER pAd
,
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
);
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
);
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
);
2639 IN PRTMP_ADAPTER pAd
,
2640 IN MLME_QUEUE_ELEM
*Elem
);
2642 VOID
SendPSMPAction(
2643 IN PRTMP_ADAPTER pAd
,
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
);
2656 IN PRTMP_ADAPTER pAd
,
2657 IN MLME_QUEUE_ELEM
*Elem
);
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
);
2678 IN PRTMP_ADAPTER pAd
,
2679 IN OUT PHEADER_802_11 pHdr80211
,
2685 IN PRTMP_ADAPTER pAd
,
2686 IN OUT PFRAME_BAR pCntlBar
,
2690 VOID
InsertActField(
2691 IN PRTMP_ADAPTER pAd
,
2692 OUT PUCHAR pFrameBuf
,
2693 OUT PULONG pFrameLen
,
2697 BOOLEAN
CntlEnqueueForRecv(
2698 IN PRTMP_ADAPTER pAd
,
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
,
2736 IN PMAC_TABLE_ENTRY pMacEntry
);
2739 NDIS_STATUS
Sniff2BytesFromNdisBuffer(
2740 IN PNDIS_BUFFER pFirstBuffer
,
2741 IN UCHAR DesiredOffset
,
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
,
2758 IN UCHAR Max_Tx_Packets
);
2760 NDIS_STATUS
RTMPHardTransmit(
2761 IN PRTMP_ADAPTER pAd
,
2762 IN PNDIS_PACKET pPacket
,
2764 OUT PULONG pFreeTXDLeft
);
2766 NDIS_STATUS
STAHardTransmit(
2767 IN PRTMP_ADAPTER pAd
,
2771 VOID
STARxEAPOLFrameIndicate(
2772 IN PRTMP_ADAPTER pAd
,
2773 IN MAC_TABLE_ENTRY
*pEntry
,
2775 IN UCHAR FromWhichBSSID
);
2777 NDIS_STATUS
RTMPFreeTXDRequest(
2778 IN PRTMP_ADAPTER pAd
,
2780 IN UCHAR NumberRequired
,
2781 IN PUCHAR FreeNumberIs
);
2783 NDIS_STATUS
MlmeHardTransmit(
2784 IN PRTMP_ADAPTER pAd
,
2786 IN PNDIS_PACKET pPacket
);
2788 NDIS_STATUS
MlmeHardTransmitMgmtRing(
2789 IN PRTMP_ADAPTER pAd
,
2791 IN PNDIS_PACKET pPacket
);
2794 NDIS_STATUS
MlmeHardTransmitTxRing(
2795 IN PRTMP_ADAPTER pAd
,
2797 IN PNDIS_PACKET pPacket
);
2799 NDIS_STATUS
MlmeDataHardTransmit(
2800 IN PRTMP_ADAPTER pAd
,
2802 IN PNDIS_PACKET pPacket
);
2804 VOID
RTMPWriteTxDescriptor(
2805 IN PRTMP_ADAPTER pAd
,
2809 #endif // RTMP_MAC_PCI //
2811 USHORT
RTMPCalcDuration(
2812 IN PRTMP_ADAPTER pAd
,
2817 IN PRTMP_ADAPTER pAd
,
2818 IN PTXWI_STRUC pTxWI
,
2821 IN BOOLEAN InsTimestamp
,
2824 IN BOOLEAN NSeq
, // HW new a sequence.
2833 IN HTTRANSMIT_SETTING
*pTransmit
);
2836 VOID
RTMPWriteTxWI_Data(
2837 IN PRTMP_ADAPTER pAd
,
2838 IN OUT PTXWI_STRUC pTxWI
,
2842 VOID
RTMPWriteTxWI_Cache(
2843 IN PRTMP_ADAPTER pAd
,
2844 IN OUT PTXWI_STRUC pTxWI
,
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
,
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
,
2865 IN BOOLEAN bQosNull
);
2867 VOID
RTMPSendDisassociationFrame(
2868 IN PRTMP_ADAPTER pAd
);
2870 VOID
RTMPSendRTSFrame(
2871 IN PRTMP_ADAPTER pAd
,
2873 IN
unsigned int NextMpduSize
,
2876 IN USHORT AckDuration
,
2880 PQUEUE_HEADER
RTMPCheckTxSwQueue(
2881 IN PRTMP_ADAPTER pAd
,
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
,
2918 VOID
RTMPFreeNdisPacket(
2919 IN PRTMP_ADAPTER pAd
,
2920 IN PNDIS_PACKET pPacket
);
2922 BOOLEAN
RTMPFreeTXDUponTxDmaDone(
2923 IN PRTMP_ADAPTER pAd
,
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
,
2946 VOID
RTMPEncryptData(
2947 IN PRTMP_ADAPTER pAd
,
2952 BOOLEAN
RTMPSoftDecryptWEP(
2953 IN PRTMP_ADAPTER pAd
,
2955 IN ULONG DataByteCnt
,
2956 IN PCIPHER_KEY pGroupKey
);
2959 IN PRTMP_ADAPTER pAd
,
2963 IN PARCFOURCONTEXT Ctx
,
2968 IN PARCFOURCONTEXT Ctx
);
2970 VOID
ARCFOUR_DECRYPT(
2971 IN PARCFOURCONTEXT Ctx
,
2976 VOID
ARCFOUR_ENCRYPT(
2977 IN PARCFOURCONTEXT Ctx
,
2982 VOID
WPAARCFOUR_ENCRYPT(
2983 IN PARCFOURCONTEXT Ctx
,
2988 UINT
RTMP_CALC_FCS32(
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
,
3006 IN BOOLEAN bDisableBGProtect
,
3007 IN BOOLEAN bNonGFExist
);
3009 VOID
AsicSwitchChannel(
3010 IN PRTMP_ADAPTER pAd
,
3014 VOID
AsicLockChannel(
3015 IN PRTMP_ADAPTER pAd
,
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
);
3039 IN PRTMP_ADAPTER pAd
,
3042 VOID
AsicSetMcastWC(
3043 IN PRTMP_ADAPTER pAd
);
3045 VOID
AsicDelWcidTab(
3046 IN PRTMP_ADAPTER pAd
,
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
,
3081 VOID
AsicRemoveSharedKeyEntry(
3082 IN PRTMP_ADAPTER pAd
,
3086 VOID
AsicUpdateWCIDAttribute(
3087 IN PRTMP_ADAPTER pAd
,
3091 IN BOOLEAN bUsePairewiseKeyTable
);
3093 VOID
AsicUpdateWCIDIVEIV(
3094 IN PRTMP_ADAPTER pAd
,
3099 VOID
AsicUpdateRxWCIDTable(
3100 IN PRTMP_ADAPTER pAd
,
3104 VOID
AsicAddKeyEntry(
3105 IN PRTMP_ADAPTER pAd
,
3109 IN PCIPHER_KEY pCipherKey
,
3110 IN BOOLEAN bUsePairewiseKeyTable
,
3113 VOID
AsicAddPairwiseKeyEntry(
3114 IN PRTMP_ADAPTER pAd
,
3117 IN CIPHER_KEY
*pCipherKey
);
3119 VOID
AsicRemovePairwiseKeyEntry(
3120 IN PRTMP_ADAPTER pAd
,
3124 BOOLEAN
AsicSendCommandToMcu(
3125 IN PRTMP_ADAPTER pAd
,
3133 BOOLEAN
AsicCheckCommanOk(
3134 IN PRTMP_ADAPTER pAd
,
3136 #endif // RTMP_MAC_PCI //
3138 VOID
MacAddrRandomBssid(
3139 IN PRTMP_ADAPTER pAd
,
3142 VOID
MgtMacHeaderInit(
3143 IN PRTMP_ADAPTER pAd
,
3144 IN OUT PHEADER_802_11 pHdr80211
,
3151 IN PRTMP_ADAPTER pAd
);
3154 IN PRTMP_ADAPTER pAd
);
3161 IN PRTMP_ADAPTER pAd
,
3164 ULONG
BssTableSearch(
3169 ULONG
BssSsidTableSearch(
3176 ULONG
BssTableSearchWithSSID(
3183 ULONG
BssSsidTableSearchBySSID(
3188 VOID
BssTableDeleteEntry(
3189 IN OUT PBSS_TABLE pTab
,
3193 VOID
BATableDeleteORIEntry(
3194 IN OUT PRTMP_ADAPTER pAd
,
3195 IN BA_ORI_ENTRY
*pBAORIEntry
);
3198 IN PRTMP_ADAPTER pAd
,
3199 OUT PBSS_ENTRY pBss
,
3204 IN USHORT BeaconPeriod
,
3207 IN USHORT CapabilityInfo
,
3209 IN UCHAR SupRateLen
,
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
,
3219 IN LARGE_INTEGER TimeStamp
,
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
,
3234 IN USHORT BeaconPeriod
,
3237 IN USHORT CapabilityInfo
,
3239 IN UCHAR SupRateLen
,
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
,
3249 IN LARGE_INTEGER TimeStamp
,
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
,
3260 IN USHORT TimeOutValue
,
3261 IN USHORT StartingSeq
,
3264 IN UCHAR OriginatorStatus
,
3265 IN BOOLEAN IsRecipient
);
3267 VOID
BssTableSsidSort(
3268 IN PRTMP_ADAPTER pAd
,
3269 OUT BSS_TABLE
*OutTab
,
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
,
3292 BOOLEAN
MlmeEnqueueForRecv(
3293 IN PRTMP_ADAPTER pAd
,
3295 IN ULONG TimeStampHigh
,
3296 IN ULONG TimeStampLow
,
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
,
3324 VOID
StateMachineInit(
3325 IN STATE_MACHINE
*Sm
,
3326 IN STATE_MACHINE_FUNC Trans
[],
3329 IN STATE_MACHINE_FUNC DefFunc
,
3333 VOID
StateMachineSetAction(
3334 IN STATE_MACHINE
*S
,
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
);
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
);
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
);
3409 IN PRTMP_ADAPTER pAd
,
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
);
3425 VOID
MlmeCntlConfirm(
3426 IN PRTMP_ADAPTER pAd
,
3429 #endif // RTMP_MAC_USB //
3432 IN PRTMP_ADAPTER pAd
);
3434 VOID
ComposeNullFrame(
3435 IN PRTMP_ADAPTER pAd
);
3438 IN PRTMP_ADAPTER pAd
,
3440 IN USHORT CapabilityInfo
,
3443 IN UCHAR SupRateLen
,
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
[]);
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
);
3479 IN PRTMP_ADAPTER pAd
,
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
,
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
[]);
3521 IN PVOID SystemSpecific1
,
3522 IN PVOID FunctionContext
,
3523 IN PVOID SystemSpecific2
,
3524 IN PVOID SystemSpecific3
);
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 //=========================================
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
);
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
);
3610 IN PRTMP_ADAPTER pAd
,
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
);;
3624 IN PRTMP_ADAPTER pAd
,
3625 IN OUT MLME_JOIN_REQ_STRUCT
*JoinReq
,
3629 IN PRTMP_ADAPTER pAd
,
3630 IN OUT MLME_ASSOC_REQ_STRUCT
*AssocReq
,
3632 IN USHORT CapabilityInfo
,
3634 IN USHORT ListenIntv
);
3637 IN PRTMP_ADAPTER pAd
,
3638 IN OUT MLME_SCAN_REQ_STRUCT
*ScanReq
,
3644 VOID
DisassocParmFill(
3645 IN PRTMP_ADAPTER pAd
,
3646 IN OUT MLME_DISASSOC_REQ_STRUCT
*DisassocReq
,
3651 IN PRTMP_ADAPTER pAd
,
3652 IN OUT MLME_START_REQ_STRUCT
*StartReq
,
3657 IN PRTMP_ADAPTER pAd
,
3658 IN OUT MLME_AUTH_REQ_STRUCT
*AuthReq
,
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
);
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
,
3717 OUT UCHAR
*ScanType
);
3719 BOOLEAN
PeerBeaconAndProbeRspSanity(
3720 IN PRTMP_ADAPTER pAd
,
3723 IN UCHAR MsgChannel
,
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
,
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
,
3766 BOOLEAN
PeerAddBARspActionSanity(
3767 IN PRTMP_ADAPTER pAd
,
3771 BOOLEAN
PeerDelBAActionSanity(
3772 IN PRTMP_ADAPTER pAd
,
3777 BOOLEAN
MlmeAssocReqSanity(
3778 IN PRTMP_ADAPTER pAd
,
3782 OUT USHORT
*CapabilityInfo
,
3784 OUT USHORT
*ListenIntv
);
3786 BOOLEAN
MlmeAuthReqSanity(
3787 IN PRTMP_ADAPTER pAd
,
3794 BOOLEAN
MlmeStartReqSanity(
3795 IN PRTMP_ADAPTER pAd
,
3799 OUT UCHAR
*Ssidlen
);
3801 BOOLEAN
PeerAuthSanity(
3802 IN PRTMP_ADAPTER pAd
,
3809 OUT CHAR ChlgText
[]);
3811 BOOLEAN
PeerAssocRspSanity(
3812 IN PRTMP_ADAPTER pAd
,
3816 OUT USHORT
*pCapabilityInfo
,
3817 OUT USHORT
*pStatus
,
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
,
3836 OUT USHORT
*Reason
);
3838 BOOLEAN
PeerWpaMessageSanity(
3839 IN PRTMP_ADAPTER pAd
,
3840 IN PEAPOL_PACKET pMsg
,
3843 IN MAC_TABLE_ENTRY
*pEntry
);
3845 BOOLEAN
PeerDeauthSanity(
3846 IN PRTMP_ADAPTER pAd
,
3850 OUT USHORT
*Reason
);
3852 BOOLEAN
PeerProbeReqSanity(
3853 IN PRTMP_ADAPTER pAd
,
3858 OUT UCHAR
*pSsidLen
);
3864 OUT UCHAR
*BcastFlag
,
3865 OUT UCHAR
*DtimCount
,
3866 OUT UCHAR
*DtimPeriod
,
3867 OUT UCHAR
*MessageToMe
);
3869 UCHAR
ChannelSanity(
3870 IN PRTMP_ADAPTER pAd
,
3873 NDIS_802_11_NETWORK_TYPE
NetworkTypeInUseSanity(
3874 IN PBSS_ENTRY pBss
);
3876 BOOLEAN
MlmeDelBAReqSanity(
3877 IN PRTMP_ADAPTER pAd
,
3881 BOOLEAN
MlmeAddBAReqSanity(
3882 IN PRTMP_ADAPTER pAd
,
3887 ULONG
MakeOutgoingFrame(
3889 OUT ULONG
*Length
, ...);
3892 IN PRTMP_ADAPTER pAd
,
3896 IN PRTMP_ADAPTER pAd
);
3898 VOID
AsicUpdateAutoFallBackTable(
3899 IN PRTMP_ADAPTER pAd
,
3902 VOID
MlmePeriodicExec(
3903 IN PVOID SystemSpecific1
,
3904 IN PVOID FunctionContext
,
3905 IN PVOID SystemSpecific2
,
3906 IN PVOID SystemSpecific3
);
3909 IN PVOID SystemSpecific1
,
3910 IN PVOID FunctionContext
,
3911 IN PVOID SystemSpecific2
,
3912 IN PVOID SystemSpecific3
);
3914 VOID
STAMlmePeriodicExec(
3918 IN PRTMP_ADAPTER pAd
);
3920 VOID
MlmeAutoReconnectLastSSID(
3921 IN PRTMP_ADAPTER pAd
);
3923 BOOLEAN
MlmeValidateSSID(
3927 VOID
MlmeCheckForRoaming(
3928 IN PRTMP_ADAPTER pAd
,
3931 BOOLEAN
MlmeCheckForFastRoaming(
3932 IN PRTMP_ADAPTER pAd
);
3934 VOID
MlmeDynamicTxRateSwitching(
3935 IN PRTMP_ADAPTER pAd
);
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
,
3946 IN PUCHAR pTableSize
,
3947 IN PUCHAR pInitTxRateIdx
);
3949 VOID
MlmeCalculateChannelQuality(
3950 IN PRTMP_ADAPTER pAd
,
3951 IN PMAC_TABLE_ENTRY pMacEntry
,
3954 VOID
MlmeCheckPsmChange(
3955 IN PRTMP_ADAPTER pAd
,
3959 IN PRTMP_ADAPTER pAd
,
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
,
3974 VOID
MlmeUpdateHtTxRates(
3975 IN PRTMP_ADAPTER pAd
,
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
,
3988 BOOLEAN
RTMPCheckHt(
3989 IN PRTMP_ADAPTER pAd
,
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
);
4004 IN PRTMP_ADAPTER pAd
,
4011 IN PRTMP_ADAPTER pAd
,
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
,
4023 INT
set_eFusedump_Proc(
4024 IN PRTMP_ADAPTER pAd
,
4027 INT
set_eFuseLoadFromBin_Proc(
4028 IN PRTMP_ADAPTER pAd
,
4031 VOID
eFusePhysicalReadRegisters(
4032 IN PRTMP_ADAPTER pAd
,
4037 int RtmpEfuseSupportCheck(
4038 IN RTMP_ADAPTER
*pAd
);
4040 INT
set_eFuseBufferModeWriteBack_Proc(
4041 IN PRTMP_ADAPTER pAd
,
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
);
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
);
4070 VOID
NICInitRT3070RFRegisters(
4071 IN RTMP_ADAPTER
*pAd
);
4074 VOID
NICInitRT3090RFRegisters(
4075 IN RTMP_ADAPTER
*pAd
);
4078 VOID
RT30xxHaltAction(
4079 IN PRTMP_ADAPTER pAd
);
4081 VOID
RT30xxSetRxAnt(
4082 IN PRTMP_ADAPTER pAd
,
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
);
4120 IN PRTMP_ADAPTER pAd
);
4123 IN PRTMP_ADAPTER pAd
);
4125 VOID
MlmeResetRalinkCounters(
4126 IN PRTMP_ADAPTER pAd
);
4128 VOID
BuildChannelList(
4129 IN PRTMP_ADAPTER pAd
);
4132 IN PRTMP_ADAPTER pAd
);
4135 IN PRTMP_ADAPTER pAd
,
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
,
4155 VOID
RTMPInitMICEngine(
4156 IN PRTMP_ADAPTER pAd
,
4160 IN UCHAR UserPriority
,
4163 BOOLEAN
RTMPTkipCompareMICValue(
4164 IN PRTMP_ADAPTER pAd
,
4169 IN UCHAR UserPriority
,
4172 VOID
RTMPCalculateMICValue(
4173 IN PRTMP_ADAPTER pAd
,
4174 IN PNDIS_PACKET pPacket
,
4176 IN PCIPHER_KEY pKey
,
4179 VOID
RTMPTkipAppendByte(
4180 IN PTKIP_KEY_INFO pTkip
,
4183 VOID
RTMPTkipAppend(
4184 IN PTKIP_KEY_INFO pTkip
,
4188 VOID
RTMPTkipGetMIC(
4189 IN PTKIP_KEY_INFO pTkip
);
4191 BOOLEAN
RTMPSoftDecryptTKIP(
4192 IN PRTMP_ADAPTER pAd
,
4194 IN ULONG DataByteCnt
,
4195 IN UCHAR UserPriority
,
4196 IN PCIPHER_KEY pWpaKey
);
4198 BOOLEAN
RTMPSoftDecryptAES(
4199 IN PRTMP_ADAPTER pAd
,
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
,
4214 INT
RT_CfgSetWirelessMode(
4215 IN PRTMP_ADAPTER pAd
,
4218 INT
RT_CfgSetShortSlot(
4219 IN PRTMP_ADAPTER pAd
,
4222 INT
RT_CfgSetWepKey(
4223 IN PRTMP_ADAPTER pAd
,
4224 IN PSTRING keyString
,
4225 IN CIPHER_KEY
*pSharedKey
,
4228 INT
RT_CfgSetWPAPSKKey(
4229 IN RTMP_ADAPTER
*pAd
,
4230 IN PSTRING keyString
,
4233 OUT PUCHAR pPMKBuf
);
4238 // Prototypes of function definition in cmm_info.c
4240 NDIS_STATUS
RTMPWPARemoveKeyProc(
4241 IN PRTMP_ADAPTER pAd
,
4244 VOID
RTMPWPARemoveAllKeys(
4245 IN PRTMP_ADAPTER pAd
);
4247 BOOLEAN
RTMPCheckStrPrintAble(
4251 VOID
RTMPSetPhyMode(
4252 IN PRTMP_ADAPTER pAd
,
4255 VOID
RTMPUpdateHTIE(
4256 IN RT_HT_CAPABILITY
*pRtHt
,
4258 OUT HT_CAPABILITY_IE
*pHtCapability
,
4259 OUT ADD_HT_INFO_IE
*pAddHtInfo
);
4261 VOID
RTMPAddWcidAttributeEntry(
4262 IN PRTMP_ADAPTER pAd
,
4266 IN MAC_TABLE_ENTRY
*pEntry
);
4268 PSTRING
GetEncryptType(
4271 PSTRING
GetAuthMode(
4275 IN PRTMP_ADAPTER pAd
,
4276 IN OID_SET_HT_PHYMODE
*pHTPhyMode
);
4278 VOID
RTMPSetIndividualHT(
4279 IN PRTMP_ADAPTER pAd
,
4282 VOID
RTMPSendWirelessEvent(
4283 IN PRTMP_ADAPTER pAd
,
4284 IN USHORT Event_flag
,
4290 IN PRTMP_ADAPTER pAd
,
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
,
4304 IN BOOLEAN bClearFrame
);
4307 IN PRTMP_ADAPTER pAd
,
4317 IN PRTMP_ADAPTER pAd
,
4321 BOOLEAN
RTMPCheckWPAframe(
4322 IN PRTMP_ADAPTER pAd
,
4323 IN PMAC_TABLE_ENTRY pEntry
,
4325 IN ULONG DataByteCount
,
4326 IN UCHAR FromWhichBSSID
);
4328 VOID
AES_GTK_KEY_UNWRAP(
4330 OUT UCHAR
*plaintext
,
4332 IN UCHAR
*ciphertext
);
4334 BOOLEAN
RTMPParseEapolKeyData(
4335 IN PRTMP_ADAPTER pAd
,
4337 IN UCHAR KeyDataLen
,
4338 IN UCHAR GroupKeyIndex
,
4341 IN MAC_TABLE_ENTRY
*pEntry
);
4343 VOID
ConstructEapolMsg(
4344 IN PMAC_TABLE_ENTRY pEntry
,
4345 IN UCHAR GroupKeyWepStatus
,
4347 IN UCHAR DefaultKeyIdx
,
4353 OUT PEAPOL_PACKET pMsg
);
4355 NDIS_STATUS
RTMPSoftDecryptBroadCastData(
4356 IN PRTMP_ADAPTER pAd
,
4358 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher
,
4359 IN PCIPHER_KEY pShard_key
);
4362 IN PRTMP_ADAPTER pAd
,
4368 // function prototype in ap_wpa.c
4370 VOID
RTMPGetTxTscFromAsic(
4371 IN PRTMP_ADAPTER pAd
,
4375 VOID
APInstallPairwiseKey(
4377 PMAC_TABLE_ENTRY pEntry
);
4379 UINT
APValidateRSNIE(
4380 IN PRTMP_ADAPTER pAd
,
4381 IN PMAC_TABLE_ENTRY pEntry
,
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
,
4436 VOID
AES_GTK_KEY_WRAP(
4438 IN UCHAR
*plaintext
,
4440 OUT UCHAR
*ciphertext
);
4442 //typedef void (*TIMER_FUNCTION)(unsigned long);
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
,
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
);
4477 NDIS_STATUS
os_alloc_mem(
4478 IN RTMP_ADAPTER
*pAd
,
4482 NDIS_STATUS
os_free_mem(
4483 IN PRTMP_ADAPTER pAd
,
4487 void RTMP_AllocateSharedMemory(
4488 IN PRTMP_ADAPTER pAd
,
4491 OUT PVOID
*VirtualAddress
,
4492 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
4494 VOID
RTMPFreeTxRxRingMemory(
4495 IN PRTMP_ADAPTER pAd
);
4497 NDIS_STATUS
AdapterBlockAllocateMemory(
4501 void RTMP_AllocateTxDescMemory(
4502 IN PRTMP_ADAPTER pAd
,
4506 OUT PVOID
*VirtualAddress
,
4507 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
4509 void RTMP_AllocateFirstTxBuffer(
4510 IN PRTMP_ADAPTER pAd
,
4514 OUT PVOID
*VirtualAddress
,
4515 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
4517 void RTMP_FreeFirstTxBuffer(
4518 IN PRTMP_ADAPTER pAd
,
4521 IN PVOID VirtualAddress
,
4522 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
4524 void RTMP_AllocateMgmtDescMemory(
4525 IN PRTMP_ADAPTER pAd
,
4528 OUT PVOID
*VirtualAddress
,
4529 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
4531 void RTMP_AllocateRxDescMemory(
4532 IN PRTMP_ADAPTER pAd
,
4535 OUT PVOID
*VirtualAddress
,
4536 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
4538 void RTMP_FreeDescMemory(
4539 IN PRTMP_ADAPTER pAd
,
4541 IN PVOID VirtualAddress
,
4542 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress
);
4544 PNDIS_PACKET
RtmpOSNetPktAlloc(
4545 IN RTMP_ADAPTER
*pAd
,
4548 PNDIS_PACKET
RTMP_AllocateRxPacketBuffer(
4549 IN PRTMP_ADAPTER pAd
,
4552 OUT PVOID
*VirtualAddress
,
4553 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress
);
4555 PNDIS_PACKET
RTMP_AllocateTxPacketBuffer(
4556 IN PRTMP_ADAPTER pAd
,
4559 OUT PVOID
*VirtualAddress
);
4561 PNDIS_PACKET
RTMP_AllocateFragPacketBuffer(
4562 IN PRTMP_ADAPTER pAd
,
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
,
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
,
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
,
4620 VOID
BAOriSessionSetUp(
4621 IN PRTMP_ADAPTER pAd
,
4622 IN MAC_TABLE_ENTRY
*pEntry
,
4626 IN BOOLEAN isForced
);
4628 VOID
BASessionTearDownALL(
4629 IN OUT PRTMP_ADAPTER pAd
,
4632 BOOLEAN
OS_Need_Clone_Packet(void);
4635 VOID
build_tx_packet(
4636 IN PRTMP_ADAPTER pAd
,
4637 IN PNDIS_PACKET pPacket
,
4642 VOID
BAOriSessionTearDown(
4643 IN OUT PRTMP_ADAPTER pAd
,
4646 IN BOOLEAN bPassive
,
4647 IN BOOLEAN bForceSend
);
4649 VOID
BARecSessionTearDown(
4650 IN OUT PRTMP_ADAPTER pAd
,
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(
4665 BOOLEAN
rtstrcasecmp(
4669 PSTRING
rtstrstruncasecmp(
4674 IN
const PSTRING s1
,
4675 IN
const PSTRING s2
);
4679 IN
const PSTRING ct
);
4683 unsigned int *addr
);
4685 ////////// common ioctl functions //////////
4686 INT
Set_DriverVersion_Proc(
4687 IN PRTMP_ADAPTER pAd
,
4690 INT
Set_CountryRegion_Proc(
4691 IN PRTMP_ADAPTER pAd
,
4694 INT
Set_CountryRegionABand_Proc(
4695 IN PRTMP_ADAPTER pAd
,
4698 INT
Set_WirelessMode_Proc(
4699 IN PRTMP_ADAPTER pAd
,
4702 INT
Set_Channel_Proc(
4703 IN PRTMP_ADAPTER pAd
,
4706 INT
Set_ShortSlot_Proc(
4707 IN PRTMP_ADAPTER pAd
,
4710 INT
Set_TxPower_Proc(
4711 IN PRTMP_ADAPTER pAd
,
4714 INT
Set_BGProtection_Proc(
4715 IN PRTMP_ADAPTER pAd
,
4718 INT
Set_TxPreamble_Proc(
4719 IN PRTMP_ADAPTER pAd
,
4722 INT
Set_RTSThreshold_Proc(
4723 IN PRTMP_ADAPTER pAd
,
4726 INT
Set_FragThreshold_Proc(
4727 IN PRTMP_ADAPTER pAd
,
4730 INT
Set_TxBurst_Proc(
4731 IN PRTMP_ADAPTER pAd
,
4734 #ifdef AGGREGATION_SUPPORT
4735 INT
Set_PktAggregate_Proc(
4736 IN PRTMP_ADAPTER pAd
,
4738 #endif // AGGREGATION_SUPPORT //
4740 INT
Set_IEEE80211H_Proc(
4741 IN PRTMP_ADAPTER pAd
,
4746 IN PRTMP_ADAPTER pAd
,
4750 INT
Show_DescInfo_Proc(
4751 IN PRTMP_ADAPTER pAd
,
4754 INT
Set_ResetStatCounter_Proc(
4755 IN PRTMP_ADAPTER pAd
,
4758 INT
Set_BASetup_Proc(
4759 IN PRTMP_ADAPTER pAd
,
4762 INT
Set_BADecline_Proc(
4763 IN PRTMP_ADAPTER pAd
,
4766 INT
Set_BAOriTearDown_Proc(
4767 IN PRTMP_ADAPTER pAd
,
4770 INT
Set_BARecTearDown_Proc(
4771 IN PRTMP_ADAPTER pAd
,
4775 IN PRTMP_ADAPTER pAd
,
4779 IN PRTMP_ADAPTER pAd
,
4783 IN PRTMP_ADAPTER pAd
,
4786 INT
Set_HtOpMode_Proc(
4787 IN PRTMP_ADAPTER pAd
,
4790 INT
Set_HtStbc_Proc(
4791 IN PRTMP_ADAPTER pAd
,
4795 IN PRTMP_ADAPTER pAd
,
4798 INT
Set_HtExtcha_Proc(
4799 IN PRTMP_ADAPTER pAd
,
4802 INT
Set_HtMpduDensity_Proc(
4803 IN PRTMP_ADAPTER pAd
,
4806 INT
Set_HtBaWinSize_Proc(
4807 IN PRTMP_ADAPTER pAd
,
4811 IN PRTMP_ADAPTER pAd
,
4814 INT
Set_HtLinkAdapt_Proc(
4815 IN PRTMP_ADAPTER pAd
,
4818 INT
Set_HtAmsdu_Proc(
4819 IN PRTMP_ADAPTER pAd
,
4822 INT
Set_HtAutoBa_Proc(
4823 IN PRTMP_ADAPTER pAd
,
4826 INT
Set_HtProtect_Proc(
4827 IN PRTMP_ADAPTER pAd
,
4830 INT
Set_HtMimoPs_Proc(
4831 IN PRTMP_ADAPTER pAd
,
4835 INT
Set_ForceShortGI_Proc(
4836 IN PRTMP_ADAPTER pAd
,
4839 INT
Set_ForceGF_Proc(
4840 IN PRTMP_ADAPTER pAd
,
4844 IN PRTMP_ADAPTER pAd
);
4846 INT
Set_SendPSMPAction_Proc(
4847 IN PRTMP_ADAPTER pAd
,
4850 INT
Set_HtMIMOPSmode_Proc(
4851 IN PRTMP_ADAPTER pAd
,
4855 INT
Set_HtTxBASize_Proc(
4856 IN PRTMP_ADAPTER pAd
,
4859 INT
Set_HtDisallowTKIP_Proc(
4860 IN PRTMP_ADAPTER pAd
,
4863 INT
WpaCheckEapCode(
4864 IN PRTMP_ADAPTER pAd
,
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
,
4880 // AMPDU packet indication
4881 VOID
Indicate_AMPDU_Packet(
4882 IN PRTMP_ADAPTER pAd
,
4884 IN UCHAR FromWhichBSSID
);
4886 // AMSDU packet indication
4887 VOID
Indicate_AMSDU_Packet(
4888 IN PRTMP_ADAPTER pAd
,
4890 IN UCHAR FromWhichBSSID
);
4892 // Normal legacy Rx packet indication
4893 VOID
Indicate_Legacy_Packet(
4894 IN PRTMP_ADAPTER pAd
,
4896 IN UCHAR FromWhichBSSID
);
4898 VOID
Indicate_EAPOL_Packet(
4899 IN PRTMP_ADAPTER pAd
,
4901 IN UCHAR FromWhichBSSID
);
4903 void update_os_packet_info(
4904 IN PRTMP_ADAPTER pAd
,
4906 IN UCHAR FromWhichBSSID
);
4908 void wlan_802_11_to_802_3_packet(
4909 IN PRTMP_ADAPTER pAd
,
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); \
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; \
4932 _pSA = _pRxBlk->pHeader->Addr3; \
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
,
4967 // Normal, AMPDU or AMSDU
4968 VOID
CmmRxnonRalinkFrameIndicate(
4969 IN PRTMP_ADAPTER pAd
,
4971 IN UCHAR FromWhichBSSID
);
4973 VOID
CmmRxRalinkFrameIndicate(
4974 IN PRTMP_ADAPTER pAd
,
4975 IN MAC_TABLE_ENTRY
*pEntry
,
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
,
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
5008 P80211ENUM_msgitem_status_no_value
= 0x00
5011 P80211ENUM_truth_false
= 0x00,
5012 P80211ENUM_truth_true
= 0x01
5015 /* Definition from madwifi */
5021 } p80211item_uint32_t
;
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.
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
;
5090 } wlan_radiotap_header
;
5091 /* Definition from madwifi */
5093 void send_monitor_packets(
5094 IN PRTMP_ADAPTER pAd
,
5098 VOID
RTMPSetDesiredRates(
5099 IN PRTMP_ADAPTER pAdapter
,
5102 INT
Set_FixedTxMode_Proc(
5103 IN PRTMP_ADAPTER pAd
,
5107 INT
Set_LongRetryLimit_Proc(
5108 IN PRTMP_ADAPTER pAdapter
,
5111 INT
Set_ShortRetryLimit_Proc(
5112 IN PRTMP_ADAPTER pAdapter
,
5115 BOOLEAN
RT28XXChipsetCheck(
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
,
5129 IN ULONG UpdatePos
);
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
);
5169 // Function Prototype in cmm_data_pci.c
5171 USHORT
RtmpPCI_WriteTxResource(
5172 IN PRTMP_ADAPTER pAd
,
5175 OUT USHORT
*FreeNumber
);
5177 USHORT
RtmpPCI_WriteSingleTxResource(
5178 IN PRTMP_ADAPTER pAd
,
5181 OUT USHORT
*FreeNumber
);
5183 USHORT
RtmpPCI_WriteMultiTxResource(
5184 IN PRTMP_ADAPTER pAd
,
5187 OUT USHORT
*FreeNumber
);
5189 USHORT
RtmpPCI_WriteFragTxResource(
5190 IN PRTMP_ADAPTER pAd
,
5193 OUT USHORT
*FreeNumber
);
5195 USHORT
RtmpPCI_WriteSubTxResource(
5196 IN PRTMP_ADAPTER pAd
,
5199 OUT USHORT
*FreeNumber
);
5201 VOID
RtmpPCI_FinalWriteTxResource(
5202 IN PRTMP_ADAPTER pAd
,
5204 IN USHORT totalMPDUSize
,
5205 IN USHORT FirstTxIdx
);
5207 VOID
RtmpPCIDataLastTxIdx(
5208 IN PRTMP_ADAPTER pAd
,
5210 IN USHORT LastTxIdx
);
5212 VOID
RtmpPCIDataKickOut(
5213 IN PRTMP_ADAPTER pAd
,
5218 int RtmpPCIMgmtKickOut(
5219 IN RTMP_ADAPTER
*pAd
,
5221 IN PNDIS_PACKET pPacket
,
5222 IN PUCHAR pSrcBufVA
,
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
,
5235 IN USHORT TbttNumToNextWakeUp
);
5237 BOOLEAN
RT28xxPciAsicRadioOn(
5238 IN PRTMP_ADAPTER pAd
,
5241 VOID
RTMPInitPCIeLinkCtrlValue(
5242 IN PRTMP_ADAPTER pAd
);
5244 VOID
RTMPFindHostPCIDev(
5245 IN PRTMP_ADAPTER pAd
);
5247 VOID
RTMPPCIeLinkCtrlValueRestore(
5248 IN PRTMP_ADAPTER pAd
,
5251 VOID
RTMPPCIeLinkCtrlSetting(
5252 IN PRTMP_ADAPTER pAd
,
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
);
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 //
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
,
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
,
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
);
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
,
5365 NTSTATUS
RTUSBMultiWrite(
5366 IN PRTMP_ADAPTER pAd
,
5371 NTSTATUS
RTUSBMultiWrite_OneByte(
5372 IN PRTMP_ADAPTER pAd
,
5376 NTSTATUS
RTUSBReadBBPRegister(
5377 IN PRTMP_ADAPTER pAd
,
5381 NTSTATUS
RTUSBWriteBBPRegister(
5382 IN PRTMP_ADAPTER pAd
,
5386 NTSTATUS
RTUSBWriteRFRegister(
5387 IN PRTMP_ADAPTER pAd
,
5390 NTSTATUS
RTUSB_VendorRequest(
5391 IN PRTMP_ADAPTER pAd
,
5392 IN UINT32 TransferFlags
,
5393 IN UCHAR ReservedBits
,
5397 IN PVOID TransferBuffer
,
5398 IN UINT32 TransferBufferLength
);
5400 NTSTATUS
RTUSBReadEEPROM(
5401 IN PRTMP_ADAPTER pAd
,
5406 NTSTATUS
RTUSBWriteEEPROM(
5407 IN PRTMP_ADAPTER pAd
,
5412 VOID
RTUSBPutToSleep(
5413 IN PRTMP_ADAPTER pAd
);
5415 NTSTATUS
RTUSBWakeUp(
5416 IN PRTMP_ADAPTER pAd
);
5418 VOID
RTUSBInitializeCmdQ(
5421 NDIS_STATUS
RTUSBEnqueueCmdFromNdis(
5422 IN PRTMP_ADAPTER pAd
,
5424 IN BOOLEAN SetInformation
,
5425 IN PVOID pInformationBuffer
,
5426 IN UINT32 InformationBufferLength
);
5428 NDIS_STATUS
RTUSBEnqueueInternalCmd(
5429 IN PRTMP_ADAPTER pAd
,
5431 IN PVOID pInformationBuffer
,
5432 IN UINT32 InformationBufferLength
);
5434 VOID
RTUSBDequeueCmd(
5436 OUT PCmdQElmt
*pcmdqelmt
);
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
);
5454 IN RTMP_ADAPTER
*pAd
);
5456 NTSTATUS
RTUSBWriteMACRegister(
5457 IN PRTMP_ADAPTER pAd
,
5461 NTSTATUS
RTUSBReadMACRegister(
5462 IN PRTMP_ADAPTER pAd
,
5464 OUT PUINT32 pValue
);
5466 NTSTATUS
RTUSBSingleWrite(
5467 IN RTMP_ADAPTER
*pAd
,
5471 NTSTATUS
RTUSBFirmwareWrite(
5472 IN PRTMP_ADAPTER pAd
,
5476 NTSTATUS
RTUSBVenderReset(
5477 IN PRTMP_ADAPTER pAd
);
5479 NDIS_STATUS
RTUSBSetHardWareRegister(
5480 IN PRTMP_ADAPTER pAdapter
,
5483 NDIS_STATUS
RTUSBQueryHardWareRegister(
5484 IN PRTMP_ADAPTER pAdapter
,
5488 IN PRTMP_ADAPTER pAd
);
5490 NDIS_STATUS
RTUSBWriteHWMACAddress(
5491 IN PRTMP_ADAPTER pAdapter
);
5493 VOID
MacTableInitialize(
5494 IN PRTMP_ADAPTER pAd
);
5497 IN PRTMP_ADAPTER pAd
,
5500 NDIS_STATUS
RTMPWPAAddKeyProc(
5501 IN PRTMP_ADAPTER pAd
,
5504 VOID
AsicRxAntEvalAction(
5505 IN PRTMP_ADAPTER pAd
);
5508 IN PRTMP_ADAPTER pAd
,
5509 IN PUCHAR pHeader802_3
,
5513 OUT PNDIS_PACKET
*ppPacket
);
5515 UINT
deaggregate_AMSDU_announce(
5516 IN PRTMP_ADAPTER pAd
,
5517 PNDIS_PACKET pPacket
,
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
);
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
,
5558 // Function Prototype in cmm_data_usb.c
5560 USHORT
RtmpUSB_WriteSubTxResource(
5561 IN PRTMP_ADAPTER pAd
,
5564 OUT USHORT
*FreeNumber
);
5566 USHORT
RtmpUSB_WriteSingleTxResource(
5567 IN PRTMP_ADAPTER pAd
,
5570 OUT USHORT
*FreeNumber
);
5572 USHORT
RtmpUSB_WriteFragTxResource(
5573 IN PRTMP_ADAPTER pAd
,
5576 OUT USHORT
*FreeNumber
);
5578 USHORT
RtmpUSB_WriteMultiTxResource(
5579 IN PRTMP_ADAPTER pAd
,
5582 OUT USHORT
*FreeNumber
);
5584 VOID
RtmpUSB_FinalWriteTxResource(
5585 IN PRTMP_ADAPTER pAd
,
5587 IN USHORT totalMPDUSize
,
5590 VOID
RtmpUSBDataLastTxIdx(
5591 IN PRTMP_ADAPTER pAd
,
5595 VOID
RtmpUSBDataKickOut(
5596 IN PRTMP_ADAPTER pAd
,
5601 int RtmpUSBMgmtKickOut(
5602 IN RTMP_ADAPTER
*pAd
,
5604 IN PNDIS_PACKET pPacket
,
5605 IN PUCHAR pSrcBufVA
,
5608 VOID
RtmpUSBNullFrameKickOut(
5609 IN RTMP_ADAPTER
*pAd
,
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
,
5639 VOID
AsicTurnOnRFClk(
5640 IN PRTMP_ADAPTER pAd
,
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
,
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
,
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)
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"));
5733 VIRTUAL_IF_INC(pAd
);
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
);
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
,
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
,
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
,
5811 NDIS_STATUS
RtmpOSTaskAttach(
5812 IN RTMP_OS_TASK
*pTask
,
5813 IN
int (*fn
)(void *),
5818 File operation related function prototypes
5820 RTMP_OS_FD
RtmpOSFileOpen(
5825 int RtmpOSFileClose(
5826 IN RTMP_OS_FD osfd
);
5828 void RtmpOSFileSeek(
5837 int RtmpOSFileWrite(
5842 void RtmpOSFSInfoChange(
5843 IN RTMP_OS_FS_INFO
*pOSFSInfo
,
5847 #endif // __RTMP_H__