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,
4994 ////////////////////////////////////////
4996 VOID RTMPIoctlGetSiteSurvey(
4997 IN PRTMP_ADAPTER pAdapter,
4998 IN struct iwreq *wrq);
5007 DIDmsg_lnxind_wlansniffrm = 0x00000044,
5008 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
5009 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
5010 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
5011 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
5012 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
5013 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
5014 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
5015 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
5016 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
5017 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
5020 P80211ENUM_msgitem_status_no_value = 0x00
5023 P80211ENUM_truth_false = 0x00,
5024 P80211ENUM_truth_true = 0x01
5027 /* Definition from madwifi */
5033 } p80211item_uint32_t;
5038 #define WLAN_DEVNAMELEN_MAX 16
5039 UINT8 devname[WLAN_DEVNAMELEN_MAX];
5040 p80211item_uint32_t hosttime;
5041 p80211item_uint32_t mactime;
5042 p80211item_uint32_t channel;
5043 p80211item_uint32_t rssi;
5044 p80211item_uint32_t sq;
5045 p80211item_uint32_t signal;
5046 p80211item_uint32_t noise;
5047 p80211item_uint32_t rate;
5048 p80211item_uint32_t istx;
5049 p80211item_uint32_t frmlen;
5050 } wlan_ng_prism2_header;
5052 /* The radio capture header precedes the 802.11 header. */
5053 typedef struct PACKED _ieee80211_radiotap_header {
5054 UINT8 it_version; /* Version 0. Only increases
5055 * for drastic changes,
5056 * introduction of compatible
5057 * new fields does not count.
5060 UINT16 it_len; /* length of the whole
5061 * header in bytes, including
5062 * it_version, it_pad,
5063 * it_len, and data fields.
5065 UINT32 it_present; /* A bitmap telling which
5066 * fields are present. Set bit 31
5067 * (0x80000000) to extend the
5068 * bitmap by another 32 bits.
5069 * Additional extensions are made
5070 * by setting bit 31.
5072 }ieee80211_radiotap_header ;
5074 enum ieee80211_radiotap_type {
5075 IEEE80211_RADIOTAP_TSFT = 0,
5076 IEEE80211_RADIOTAP_FLAGS = 1,
5077 IEEE80211_RADIOTAP_RATE = 2,
5078 IEEE80211_RADIOTAP_CHANNEL = 3,
5079 IEEE80211_RADIOTAP_FHSS = 4,
5080 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
5081 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
5082 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
5083 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
5084 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
5085 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
5086 IEEE80211_RADIOTAP_ANTENNA = 11,
5087 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
5088 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
5091 #define WLAN_RADIOTAP_PRESENT ( \
5092 (1 << IEEE80211_RADIOTAP_TSFT) | \
5093 (1 << IEEE80211_RADIOTAP_FLAGS) | \
5094 (1 << IEEE80211_RADIOTAP_RATE) | \
5097 typedef struct _wlan_radiotap_header {
5098 ieee80211_radiotap_header wt_ihdr;
5102 } wlan_radiotap_header;
5103 /* Definition from madwifi */
5105 void send_monitor_packets(
5106 IN PRTMP_ADAPTER pAd,
5110 VOID RTMPSetDesiredRates(
5111 IN PRTMP_ADAPTER pAdapter,
5114 INT Set_FixedTxMode_Proc(
5115 IN PRTMP_ADAPTER pAd,
5119 INT Set_LongRetryLimit_Proc(
5120 IN PRTMP_ADAPTER pAdapter,
5123 INT Set_ShortRetryLimit_Proc(
5124 IN PRTMP_ADAPTER pAdapter,
5127 BOOLEAN RT28XXChipsetCheck(
5131 VOID RT28XXDMADisable(
5132 IN RTMP_ADAPTER *pAd);
5134 VOID RT28XXDMAEnable(
5135 IN RTMP_ADAPTER *pAd);
5137 VOID RT28xx_UpdateBeaconToAsic(
5138 IN RTMP_ADAPTER * pAd,
5141 IN ULONG UpdatePos);
5144 IN PRTMP_ADAPTER pAd,
5145 IN PSTRING pDefaultMac,
5146 IN PSTRING pHostName);
5148 NDIS_STATUS RtmpNetTaskInit(
5149 IN RTMP_ADAPTER *pAd);
5151 VOID RtmpNetTaskExit(
5152 IN PRTMP_ADAPTER pAd);
5154 NDIS_STATUS RtmpMgmtTaskInit(
5155 IN RTMP_ADAPTER *pAd);
5157 VOID RtmpMgmtTaskExit(
5158 IN RTMP_ADAPTER *pAd);
5160 void tbtt_tasklet(unsigned long data);
5163 PNET_DEV RtmpPhyNetDevInit(
5164 IN RTMP_ADAPTER *pAd,
5165 IN RTMP_OS_NETDEV_OP_HOOK *pNetHook);
5167 BOOLEAN RtmpPhyNetDevExit(
5168 IN RTMP_ADAPTER *pAd,
5169 IN PNET_DEV net_dev);
5171 INT RtmpRaDevCtrlInit(
5172 IN RTMP_ADAPTER *pAd,
5173 IN RTMP_INF_TYPE infType);
5175 BOOLEAN RtmpRaDevCtrlExit(
5176 IN RTMP_ADAPTER *pAd);
5181 // Function Prototype in cmm_data_pci.c
5183 USHORT RtmpPCI_WriteTxResource(
5184 IN PRTMP_ADAPTER pAd,
5187 OUT USHORT *FreeNumber);
5189 USHORT RtmpPCI_WriteSingleTxResource(
5190 IN PRTMP_ADAPTER pAd,
5193 OUT USHORT *FreeNumber);
5195 USHORT RtmpPCI_WriteMultiTxResource(
5196 IN PRTMP_ADAPTER pAd,
5199 OUT USHORT *FreeNumber);
5201 USHORT RtmpPCI_WriteFragTxResource(
5202 IN PRTMP_ADAPTER pAd,
5205 OUT USHORT *FreeNumber);
5207 USHORT RtmpPCI_WriteSubTxResource(
5208 IN PRTMP_ADAPTER pAd,
5211 OUT USHORT *FreeNumber);
5213 VOID RtmpPCI_FinalWriteTxResource(
5214 IN PRTMP_ADAPTER pAd,
5216 IN USHORT totalMPDUSize,
5217 IN USHORT FirstTxIdx);
5219 VOID RtmpPCIDataLastTxIdx(
5220 IN PRTMP_ADAPTER pAd,
5222 IN USHORT LastTxIdx);
5224 VOID RtmpPCIDataKickOut(
5225 IN PRTMP_ADAPTER pAd,
5230 int RtmpPCIMgmtKickOut(
5231 IN RTMP_ADAPTER *pAd,
5233 IN PNDIS_PACKET pPacket,
5234 IN PUCHAR pSrcBufVA,
5238 NDIS_STATUS RTMPCheckRxError(
5239 IN PRTMP_ADAPTER pAd,
5240 IN PHEADER_802_11 pHeader,
5241 IN PRXWI_STRUC pRxWI,
5242 IN PRT28XX_RXD_STRUC pRxD);
5244 BOOLEAN RT28xxPciAsicRadioOff(
5245 IN PRTMP_ADAPTER pAd,
5247 IN USHORT TbttNumToNextWakeUp);
5249 BOOLEAN RT28xxPciAsicRadioOn(
5250 IN PRTMP_ADAPTER pAd,
5253 VOID RTMPInitPCIeLinkCtrlValue(
5254 IN PRTMP_ADAPTER pAd);
5256 VOID RTMPFindHostPCIDev(
5257 IN PRTMP_ADAPTER pAd);
5259 VOID RTMPPCIeLinkCtrlValueRestore(
5260 IN PRTMP_ADAPTER pAd,
5263 VOID RTMPPCIeLinkCtrlSetting(
5264 IN PRTMP_ADAPTER pAd,
5267 VOID RTMPrt3xSetPCIePowerLinkCtrl(
5268 IN PRTMP_ADAPTER pAd);
5270 VOID PsPollWakeExec(
5271 IN PVOID SystemSpecific1,
5272 IN PVOID FunctionContext,
5273 IN PVOID SystemSpecific2,
5274 IN PVOID SystemSpecific3);
5277 IN PVOID SystemSpecific1,
5278 IN PVOID FunctionContext,
5279 IN PVOID SystemSpecific2,
5280 IN PVOID SystemSpecific3);
5282 VOID RT28xxPciStaAsicForceWakeup(
5283 IN PRTMP_ADAPTER pAd,
5284 IN BOOLEAN bFromTx);
5286 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
5287 IN PRTMP_ADAPTER pAd,
5288 IN USHORT TbttNumToNextWakeUp);
5291 VOID RT28xxPciMlmeRadioOn(
5292 IN PRTMP_ADAPTER pAd);
5294 VOID RT28xxPciMlmeRadioOFF(
5295 IN PRTMP_ADAPTER pAd);
5296 #endif // RTMP_MAC_PCI //
5300 // Function Prototype in rtusb_bulk.c
5302 VOID RTUSBInitTxDesc(
5303 IN PRTMP_ADAPTER pAd,
5304 IN PTX_CONTEXT pTxContext,
5305 IN UCHAR BulkOutPipeId,
5306 IN usb_complete_t Func);
5308 VOID RTUSBInitHTTxDesc(
5309 IN PRTMP_ADAPTER pAd,
5310 IN PHT_TX_CONTEXT pTxContext,
5311 IN UCHAR BulkOutPipeId,
5312 IN ULONG BulkOutSize,
5313 IN usb_complete_t Func);
5315 VOID RTUSBInitRxDesc(
5316 IN PRTMP_ADAPTER pAd,
5317 IN PRX_CONTEXT pRxContext);
5319 VOID RTUSBCleanUpDataBulkOutQueue(
5320 IN PRTMP_ADAPTER pAd);
5322 VOID RTUSBCancelPendingBulkOutIRP(
5323 IN PRTMP_ADAPTER pAd);
5325 VOID RTUSBBulkOutDataPacket(
5326 IN PRTMP_ADAPTER pAd,
5327 IN UCHAR BulkOutPipeId,
5330 VOID RTUSBBulkOutNullFrame(
5331 IN PRTMP_ADAPTER pAd);
5333 VOID RTUSBBulkOutRTSFrame(
5334 IN PRTMP_ADAPTER pAd);
5336 VOID RTUSBCancelPendingBulkInIRP(
5337 IN PRTMP_ADAPTER pAd);
5339 VOID RTUSBCancelPendingIRPs(
5340 IN PRTMP_ADAPTER pAd);
5342 VOID RTUSBBulkOutMLMEPacket(
5343 IN PRTMP_ADAPTER pAd,
5346 VOID RTUSBBulkOutPsPoll(
5347 IN PRTMP_ADAPTER pAd);
5349 VOID RTUSBCleanUpMLMEBulkOutQueue(
5350 IN PRTMP_ADAPTER pAd);
5352 VOID RTUSBKickBulkOut(
5353 IN PRTMP_ADAPTER pAd);
5355 VOID RTUSBBulkReceive(
5356 IN PRTMP_ADAPTER pAd);
5359 IN RTMP_ADAPTER *pAd);
5361 VOID RTUSBInitRxDesc(
5362 IN PRTMP_ADAPTER pAd,
5363 IN PRX_CONTEXT pRxContext);
5365 VOID RTUSBBulkRxHandle(
5366 IN unsigned long data);
5369 // Function Prototype in rtusb_io.c
5371 NTSTATUS RTUSBMultiRead(
5372 IN PRTMP_ADAPTER pAd,
5377 NTSTATUS RTUSBMultiWrite(
5378 IN PRTMP_ADAPTER pAd,
5383 NTSTATUS RTUSBMultiWrite_OneByte(
5384 IN PRTMP_ADAPTER pAd,
5388 NTSTATUS RTUSBReadBBPRegister(
5389 IN PRTMP_ADAPTER pAd,
5393 NTSTATUS RTUSBWriteBBPRegister(
5394 IN PRTMP_ADAPTER pAd,
5398 NTSTATUS RTUSBWriteRFRegister(
5399 IN PRTMP_ADAPTER pAd,
5402 NTSTATUS RTUSB_VendorRequest(
5403 IN PRTMP_ADAPTER pAd,
5404 IN UINT32 TransferFlags,
5405 IN UCHAR ReservedBits,
5409 IN PVOID TransferBuffer,
5410 IN UINT32 TransferBufferLength);
5412 NTSTATUS RTUSBReadEEPROM(
5413 IN PRTMP_ADAPTER pAd,
5418 NTSTATUS RTUSBWriteEEPROM(
5419 IN PRTMP_ADAPTER pAd,
5424 VOID RTUSBPutToSleep(
5425 IN PRTMP_ADAPTER pAd);
5427 NTSTATUS RTUSBWakeUp(
5428 IN PRTMP_ADAPTER pAd);
5430 VOID RTUSBInitializeCmdQ(
5433 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
5434 IN PRTMP_ADAPTER pAd,
5436 IN BOOLEAN SetInformation,
5437 IN PVOID pInformationBuffer,
5438 IN UINT32 InformationBufferLength);
5440 NDIS_STATUS RTUSBEnqueueInternalCmd(
5441 IN PRTMP_ADAPTER pAd,
5443 IN PVOID pInformationBuffer,
5444 IN UINT32 InformationBufferLength);
5446 VOID RTUSBDequeueCmd(
5448 OUT PCmdQElmt *pcmdqelmt);
5451 IN OUT PVOID Context);
5453 VOID RTUSBBssBeaconExit(
5454 IN RTMP_ADAPTER *pAd);
5456 VOID RTUSBBssBeaconStop(
5457 IN RTMP_ADAPTER *pAd);
5459 VOID RTUSBBssBeaconStart(
5460 IN RTMP_ADAPTER * pAd);
5462 VOID RTUSBBssBeaconInit(
5463 IN RTMP_ADAPTER *pAd);
5466 IN RTMP_ADAPTER *pAd);
5468 NTSTATUS RTUSBWriteMACRegister(
5469 IN PRTMP_ADAPTER pAd,
5473 NTSTATUS RTUSBReadMACRegister(
5474 IN PRTMP_ADAPTER pAd,
5476 OUT PUINT32 pValue);
5478 NTSTATUS RTUSBSingleWrite(
5479 IN RTMP_ADAPTER *pAd,
5483 NTSTATUS RTUSBFirmwareWrite(
5484 IN PRTMP_ADAPTER pAd,
5488 NTSTATUS RTUSBVenderReset(
5489 IN PRTMP_ADAPTER pAd);
5491 NDIS_STATUS RTUSBSetHardWareRegister(
5492 IN PRTMP_ADAPTER pAdapter,
5495 NDIS_STATUS RTUSBQueryHardWareRegister(
5496 IN PRTMP_ADAPTER pAdapter,
5500 IN PRTMP_ADAPTER pAd);
5502 NDIS_STATUS RTUSBWriteHWMACAddress(
5503 IN PRTMP_ADAPTER pAdapter);
5505 VOID MacTableInitialize(
5506 IN PRTMP_ADAPTER pAd);
5509 IN PRTMP_ADAPTER pAd,
5512 NDIS_STATUS RTMPWPAAddKeyProc(
5513 IN PRTMP_ADAPTER pAd,
5516 VOID AsicRxAntEvalAction(
5517 IN PRTMP_ADAPTER pAd);
5520 IN PRTMP_ADAPTER pAd,
5521 IN PUCHAR pHeader802_3,
5525 OUT PNDIS_PACKET *ppPacket);
5527 UINT deaggregate_AMSDU_announce(
5528 IN PRTMP_ADAPTER pAd,
5529 PNDIS_PACKET pPacket,
5533 NDIS_STATUS RTMPCheckRxError(
5534 IN PRTMP_ADAPTER pAd,
5535 IN PHEADER_802_11 pHeader,
5536 IN PRXWI_STRUC pRxWI,
5537 IN PRT28XX_RXD_STRUC pRxINFO);
5539 VOID RTUSBMlmeHardTransmit(
5540 IN PRTMP_ADAPTER pAd,
5541 IN PMGMT_STRUC pMgmt);
5547 // Function Prototype in rtusb_data.c
5549 NDIS_STATUS RTUSBFreeDescriptorRequest(
5550 IN PRTMP_ADAPTER pAd,
5551 IN UCHAR BulkOutPipeId,
5552 IN UINT32 NumberRequired);
5555 BOOLEAN RTUSBNeedQueueBackForAgg(
5556 IN RTMP_ADAPTER *pAd,
5557 IN UCHAR BulkOutPipeId);
5560 VOID RTMPWriteTxInfo(
5561 IN PRTMP_ADAPTER pAd,
5562 IN PTXINFO_STRUC pTxInfo,
5563 IN USHORT USBDMApktLen,
5570 // Function Prototype in cmm_data_usb.c
5572 USHORT RtmpUSB_WriteSubTxResource(
5573 IN PRTMP_ADAPTER pAd,
5576 OUT USHORT *FreeNumber);
5578 USHORT RtmpUSB_WriteSingleTxResource(
5579 IN PRTMP_ADAPTER pAd,
5582 OUT USHORT *FreeNumber);
5584 USHORT RtmpUSB_WriteFragTxResource(
5585 IN PRTMP_ADAPTER pAd,
5588 OUT USHORT *FreeNumber);
5590 USHORT RtmpUSB_WriteMultiTxResource(
5591 IN PRTMP_ADAPTER pAd,
5594 OUT USHORT *FreeNumber);
5596 VOID RtmpUSB_FinalWriteTxResource(
5597 IN PRTMP_ADAPTER pAd,
5599 IN USHORT totalMPDUSize,
5602 VOID RtmpUSBDataLastTxIdx(
5603 IN PRTMP_ADAPTER pAd,
5607 VOID RtmpUSBDataKickOut(
5608 IN PRTMP_ADAPTER pAd,
5613 int RtmpUSBMgmtKickOut(
5614 IN RTMP_ADAPTER *pAd,
5616 IN PNDIS_PACKET pPacket,
5617 IN PUCHAR pSrcBufVA,
5620 VOID RtmpUSBNullFrameKickOut(
5621 IN RTMP_ADAPTER *pAd,
5623 IN UCHAR *pNullFrame,
5624 IN UINT32 frameLen);
5626 VOID RtmpUsbStaAsicForceWakeupTimeout(
5627 IN PVOID SystemSpecific1,
5628 IN PVOID FunctionContext,
5629 IN PVOID SystemSpecific2,
5630 IN PVOID SystemSpecific3);
5632 VOID RT28xxUsbStaAsicForceWakeup(
5633 IN PRTMP_ADAPTER pAd,
5634 IN BOOLEAN bFromTx);
5636 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
5637 IN PRTMP_ADAPTER pAd,
5638 IN USHORT TbttNumToNextWakeUp);
5640 VOID RT28xxUsbMlmeRadioOn(
5641 IN PRTMP_ADAPTER pAd);
5643 VOID RT28xxUsbMlmeRadioOFF(
5644 IN PRTMP_ADAPTER pAd);
5645 #endif // RTMP_MAC_USB //
5647 VOID AsicTurnOffRFClk(
5648 IN PRTMP_ADAPTER pAd,
5651 VOID AsicTurnOnRFClk(
5652 IN PRTMP_ADAPTER pAd,
5657 #ifdef RTMP_TIMER_TASK_SUPPORT
5658 INT RtmpTimerQThread(
5659 IN OUT PVOID Context);
5661 RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(
5662 IN RTMP_ADAPTER *pAd,
5663 IN RALINK_TIMER_STRUCT *pTimer);
5665 BOOLEAN RtmpTimerQRemove(
5666 IN RTMP_ADAPTER *pAd,
5667 IN RALINK_TIMER_STRUCT *pTimer);
5669 void RtmpTimerQExit(
5670 IN RTMP_ADAPTER *pAd);
5672 void RtmpTimerQInit(
5673 IN RTMP_ADAPTER *pAd);
5674 #endif // RTMP_TIMER_TASK_SUPPORT //
5676 ///////////////////////////////////////
5677 INT RTMPShowCfgValue(
5678 IN PRTMP_ADAPTER pAd,
5682 PSTRING RTMPGetRalinkAuthModeStr(
5683 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
5685 PSTRING RTMPGetRalinkEncryModeStr(
5686 IN USHORT encryMode);
5687 //////////////////////////////////////
5689 VOID AsicStaBbpTuning(
5690 IN PRTMP_ADAPTER pAd);
5692 BOOLEAN StaAddMacTableEntry(
5693 IN PRTMP_ADAPTER pAd,
5694 IN PMAC_TABLE_ENTRY pEntry,
5695 IN UCHAR MaxSupportedRateIn500Kbps,
5696 IN HT_CAPABILITY_IE *pHtCapability,
5697 IN UCHAR HtCapabilityLen,
5698 IN ADD_HT_INFO_IE *pAddHtInfo,
5699 IN UCHAR AddHtInfoLen,
5700 IN USHORT CapabilityInfo);
5703 BOOLEAN AUTH_ReqSend(
5704 IN PRTMP_ADAPTER pAd,
5705 IN PMLME_QUEUE_ELEM pElem,
5706 IN PRALINK_TIMER_STRUCT pAuthTimer,
5709 IN PUCHAR pNewElement,
5710 IN ULONG ElementLen);
5712 void RTMP_IndicateMediaState(
5713 IN PRTMP_ADAPTER pAd);
5715 VOID ReSyncBeaconTime(
5716 IN PRTMP_ADAPTER pAd);
5718 VOID RTMPSetAGCInitValue(
5719 IN PRTMP_ADAPTER pAd,
5720 IN UCHAR BandWidth);
5722 int rt28xx_close(IN PNET_DEV dev);
5723 int rt28xx_open(IN PNET_DEV dev);
5726 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
5727 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
5728 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
5732 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
5734 if (VIRTUAL_IF_NUM(pAd) == 0)
5736 if (rt28xx_open(pAd->net_dev) != 0)
5738 DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n"));
5745 VIRTUAL_IF_INC(pAd);
5749 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
5751 VIRTUAL_IF_DEC(pAd);
5752 if (VIRTUAL_IF_NUM(pAd) == 0)
5753 rt28xx_close(pAd->net_dev);
5760 OS Related funciton prototype definitions.
5761 TODO: Maybe we need to move these function prototypes to other proper place.
5763 int RtmpOSWrielessEventSend(
5764 IN RTMP_ADAPTER *pAd,
5765 IN UINT32 eventType,
5771 int RtmpOSNetDevAddrSet(
5772 IN PNET_DEV pNetDev,
5773 IN PUCHAR pMacAddr);
5775 int RtmpOSNetDevAttach(
5776 IN PNET_DEV pNetDev,
5777 IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook);
5779 void RtmpOSNetDevClose(
5780 IN PNET_DEV pNetDev);
5782 void RtmpOSNetDevDetach(
5783 IN PNET_DEV pNetDev);
5785 INT RtmpOSNetDevAlloc(
5786 IN PNET_DEV *pNewNetDev,
5787 IN UINT32 privDataSize);
5789 void RtmpOSNetDevFree(
5790 IN PNET_DEV pNetDev);
5792 PNET_DEV RtmpOSNetDevGetByName(
5793 IN PNET_DEV pNetDev,
5794 IN PSTRING pDevName);
5796 void RtmpOSNetDeviceRefPut(
5797 IN PNET_DEV pNetDev);
5799 PNET_DEV RtmpOSNetDevCreate(
5800 IN RTMP_ADAPTER *pAd,
5804 IN PSTRING pNamePrefix);
5807 Task operation related function prototypes
5809 void RtmpOSTaskCustomize(
5810 IN RTMP_OS_TASK *pTask);
5812 INT RtmpOSTaskNotifyToExit(
5813 IN RTMP_OS_TASK *pTask);
5815 NDIS_STATUS RtmpOSTaskKill(
5816 IN RTMP_OS_TASK *pTask);
5818 NDIS_STATUS RtmpOSTaskInit(
5819 IN RTMP_OS_TASK *pTask,
5823 NDIS_STATUS RtmpOSTaskAttach(
5824 IN RTMP_OS_TASK *pTask,
5825 IN int (*fn)(void *),
5830 File operation related function prototypes
5832 RTMP_OS_FD RtmpOSFileOpen(
5837 int RtmpOSFileClose(
5838 IN RTMP_OS_FD osfd);
5840 void RtmpOSFileSeek(
5849 int RtmpOSFileWrite(
5854 void RtmpOSFSInfoChange(
5855 IN RTMP_OS_FS_INFO *pOSFSInfo,
5859 #endif // __RTMP_H__