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); */
1793 int (*eewrite)(RTMP_ADAPTER *pAd, USHORT offset, USHORT value);; /* int (*eewrite)(RTMP_ADAPTER *pAd, int offset, USHORT value); */
1795 /* MCU related callback functions */
1796 int (*loadFirmware)(RTMP_ADAPTER *pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */
1797 int (*eraseFirmware)(RTMP_ADAPTER *pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */
1798 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); */
1800 /* RF access related callback functions */
1801 REG_PAIR *pRFRegTable;
1802 void (*AsicRfInit)(RTMP_ADAPTER *pAd);
1803 void (*AsicRfTurnOn)(RTMP_ADAPTER *pAd);
1804 void (*AsicRfTurnOff)(RTMP_ADAPTER *pAd);
1805 void (*AsicReverseRfFromSleepMode)(RTMP_ADAPTER *pAd);
1806 void (*AsicHaltAction)(RTMP_ADAPTER *pAd);
1811 // The miniport adapter structure
1813 struct _RTMP_ADAPTER
1815 PVOID OS_Cookie; // save specific structure relative to OS
1819 RTMP_CHIP_OP chipOps;
1820 USHORT ThisTbttNumToNextWakeUp;
1823 /*****************************************************************************************/
1824 /* PCI related parameters */
1825 /*****************************************************************************************/
1826 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
1827 unsigned int irq_num;
1829 USHORT LnkCtrlBitMask;
1830 USHORT RLnkCtrlConfiguration;
1831 USHORT RLnkCtrlOffset;
1832 USHORT HostLnkCtrlConfiguration;
1833 USHORT HostLnkCtrlOffset;
1834 USHORT PCIePowerSaveLevel;
1835 ULONG Rt3xxHostLinkCtrl; // USed for 3090F chip
1836 ULONG Rt3xxRalinkLinkCtrl; // USed for 3090F chip
1837 USHORT DeviceID; // Read from PCI config
1838 ULONG AccessBBPFailCount;
1839 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
1840 BOOLEAN bPCIclkOffDisableTx; //
1842 BOOLEAN brt30xxBanMcuCmd; //when = 0xff means all commands are ok to set .
1843 BOOLEAN b3090ESpecialChip; //3090E special chip that write EEPROM 0x24=0x9280.
1844 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
1846 UINT int_enable_reg;
1847 UINT int_disable_mask;
1851 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
1852 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
1853 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
1854 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
1855 #endif // RTMP_MAC_PCI //
1858 NDIS_SPIN_LOCK irq_lock;
1862 /*****************************************************************************************/
1863 /* USB related parameters */
1864 /*****************************************************************************************/
1865 struct usb_config_descriptor *config;
1866 UINT BulkInEpAddr; // bulk-in endpoint address
1867 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
1870 USHORT BulkOutMaxPacketSize;
1871 USHORT BulkInMaxPacketSize;
1873 //======Control Flags
1874 LONG PendingIoCount;
1876 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
1880 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
1881 RTMP_OS_TASK cmdQTask;
1883 //======Semaphores (event)
1884 RTMP_OS_SEM UsbVendorReq_semaphore;
1885 PVOID UsbVendorReqBuf;
1886 wait_queue_head_t *wait;
1887 #endif // RTMP_MAC_USB //
1889 /*****************************************************************************************/
1890 /* RBUS related parameters */
1891 /*****************************************************************************************/
1894 /*****************************************************************************************/
1895 /* Both PCI/USB related parameters */
1896 /*****************************************************************************************/
1897 //RTMP_DEV_INFO chipInfo;
1898 RTMP_INF_TYPE infType;
1900 /*****************************************************************************************/
1901 /* Driver Mgmt related parameters */
1902 /*****************************************************************************************/
1903 RTMP_OS_TASK mlmeTask;
1904 #ifdef RTMP_TIMER_TASK_SUPPORT
1905 // If you want use timer task to handle the timer related jobs, enable this.
1906 RTMP_TIMER_TASK_QUEUE TimerQ;
1907 NDIS_SPIN_LOCK TimerQLock;
1908 RTMP_OS_TASK timerTask;
1909 #endif // RTMP_TIMER_TASK_SUPPORT //
1912 /*****************************************************************************************/
1913 /* Tx related parameters */
1914 /*****************************************************************************************/
1915 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
1916 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
1919 // Data related context and AC specified, 4 AC supported
1920 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
1921 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
1923 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
1924 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
1926 // 4 sets of Bulk Out index and pending flag
1927 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
1929 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
1930 UCHAR bulkResetPipeid;
1931 BOOLEAN MgmtBulkPending;
1932 ULONG bulkResetReq[6];
1933 #endif // RTMP_MAC_USB //
1935 // resource for software backlog queues
1936 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
1937 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
1939 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
1940 RTMP_MGMT_RING MgmtRing;
1941 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
1944 /*****************************************************************************************/
1945 /* Rx related parameters */
1946 /*****************************************************************************************/
1949 RTMP_RX_RING RxRing;
1950 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
1952 NDIS_SPIN_LOCK McuCmdLock; //MCU Command Queue spinlock
1954 #endif // RTMP_MAC_PCI //
1956 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
1957 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
1958 UCHAR PendingRx; // The Maximum pending Rx value should be RX_RING_SIZE.
1959 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
1960 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
1961 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
1962 ULONG TransferBufferLength; // current length of the packet buffer
1963 ULONG ReadPosition; // current read position in a packet buffer
1964 #endif // RTMP_MAC_USB //
1966 /*****************************************************************************************/
1967 /* ASIC related parameters */
1968 /*****************************************************************************************/
1969 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
1971 // ---------------------------
1973 // ---------------------------
1974 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
1975 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
1976 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
1977 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
1978 BOOLEAN EepromAccess;
1982 // ---------------------------
1984 // ---------------------------
1985 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
1986 CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power
1987 BBP_R66_TUNING BbpTuning;
1989 // ----------------------------
1991 // ----------------------------
1992 UCHAR RfIcType; // RFIC_xxx
1993 ULONG RfFreqOffset; // Frequency offset for channel switching
1994 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
1996 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
1997 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
1999 // This soft Rx Antenna Diversity mechanism is used only when user set
2000 // RX Antenna = DIVERSITY ON
2001 SOFT_RX_ANT_DIVERSITY RxAnt;
2004 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2005 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2006 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2007 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2009 UCHAR ChannelListNum; // number of channel in ChannelList[]
2012 ULONG Tx20MPwrCfgABand[5];
2013 ULONG Tx20MPwrCfgGBand[5];
2014 ULONG Tx40MPwrCfgABand[5];
2015 ULONG Tx40MPwrCfgGBand[5];
2017 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2018 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2019 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2020 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2021 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2022 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2024 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2025 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2026 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2027 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2028 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2029 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2031 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2032 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2033 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2035 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2036 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2037 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2039 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2040 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2041 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2042 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2048 UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G
2049 UCHAR TxMixerGain5G;
2051 // ----------------------------
2053 // ----------------------------
2054 MCU_LEDCS_STRUC LedCntl;
2055 USHORT Led1; // read from EEPROM 0x3c
2056 USHORT Led2; // EEPROM 0x3e
2057 USHORT Led3; // EEPROM 0x40
2058 UCHAR LedIndicatorStrength;
2059 UCHAR RssiSingalstrengthOffet;
2060 BOOLEAN bLedOnScanning;
2063 /*****************************************************************************************/
2064 /* 802.11 related parameters */
2065 /*****************************************************************************************/
2066 // outgoing BEACON frame buffer and corresponding TXD
2067 TXWI_STRUC BeaconTxWI;
2069 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2071 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2072 PSPOLL_FRAME PsPollFrame;
2073 HEADER_802_11 NullFrame;
2076 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2077 TX_CONTEXT NullContext;
2078 TX_CONTEXT PsPollContext;
2079 TX_CONTEXT RTSContext;
2080 #endif // RTMP_MAC_USB //
2082 //=========AP===========
2085 //=======STA===========
2086 // -----------------------------------------------
2087 // STA specific configuration & operation status
2088 // used only when pAd->OpMode == OPMODE_STA
2089 // -----------------------------------------------
2090 STA_ADMIN_CONFIG StaCfg; // user desired settings
2091 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2092 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2093 NDIS_MEDIA_STATE PreMediaState;
2095 //=======Common===========
2096 // OP mode: either AP or STA
2097 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2099 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2102 /* MAT related parameters */
2104 // configuration: read from Registry & E2PROM
2105 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2106 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2107 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2109 // ------------------------------------------------------
2110 // common configuration to both OPMODE_STA and OPMODE_AP
2111 // ------------------------------------------------------
2112 COMMON_CONFIG CommonCfg;
2115 // AP needs those vaiables for site survey feature.
2116 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2117 BSS_TABLE ScanTab; // store the latest SCAN result
2119 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2120 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2121 NDIS_SPIN_LOCK MacTabLock;
2125 NDIS_SPIN_LOCK BATabLock;
2126 RALINK_TIMER_STRUCT RECBATimer;
2128 // encryption/decryption KEY tables
2129 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2131 // RX re-assembly buffer for fragmentation
2132 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2135 COUNTER_802_3 Counters8023; // 802.3 counters
2136 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2137 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2138 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2139 PRIVATE_STRUC PrivateInfo; // Private information & counters
2141 // flags, see fRTMP_ADAPTER_xxx flags
2142 ULONG Flags; // Represent current device status
2143 ULONG PSFlags; // Power Save operation flag.
2145 // current TX sequence #
2148 // Control disconnect / connect event generation
2149 //+++Didn't used anymore
2154 //+++Used only for Station
2155 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2158 ULONG ExtraInfo; // Extra information for displaying status
2159 ULONG SystemErrorBitmap; // b0: E2PROM version error
2161 //+++Didn't used anymore
2162 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2165 // ---------------------------
2167 // ---------------------------
2168 RT_802_11_EVENT_TABLE EventTab;
2173 /*****************************************************************************************/
2174 /* Statistic related parameters */
2175 /*****************************************************************************************/
2177 ULONG BulkOutDataOneSecCount;
2178 ULONG BulkInDataOneSecCount;
2179 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2180 ULONG watchDogRxCnt;
2181 ULONG watchDogRxOverFlowCnt;
2182 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2183 INT TransferedLength[NUM_OF_TX_RING];
2184 #endif // RTMP_MAC_USB //
2186 BOOLEAN bUpdateBcnCntDone;
2187 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2188 // ----------------------------
2190 // ----------------------------
2191 //ULONG DebugSetting[4];
2192 BOOLEAN bBanAllBaSetup;
2193 BOOLEAN bPromiscuous;
2195 // ----------------------------
2196 // rt2860c emulation-use Parameters
2197 // ----------------------------
2198 //ULONG rtsaccu[30];
2199 //ULONG ctsaccu[30];
2200 //ULONG cfendaccu[30];
2201 //ULONG bacontent[16];
2202 //ULONG rxint[RX_RING_SIZE+1];
2205 BOOLEAN bForcePrintTX;
2206 BOOLEAN bForcePrintRX;
2207 //BOOLEAN bDisablescanning; //defined in RT2870 USB
2208 BOOLEAN bStaFifoTest;
2209 BOOLEAN bProtectionTest;
2210 BOOLEAN bBroadComHT;
2211 //+++Following add from RT2870 USB.
2213 ULONG BulkOutComplete;
2214 ULONG BulkOutCompleteOther;
2215 ULONG BulkOutCompleteCancel; // seems not use now?
2217 ULONG BulkInComplete;
2218 ULONG BulkInCompleteFail;
2221 struct wificonf WIFItestbed;
2223 struct reordering_mpdu_pool mpdu_blk_pool;
2225 ULONG OneSecondnonBEpackets; // record non BE packets per second
2228 struct iw_statistics iw_stats;
2230 struct net_device_stats stats;
2237 ULONG TbttTickCount;
2238 #ifdef PCI_MSI_SUPPORT
2240 #endif // PCI_MSI_SUPPORT //
2245 #define TIME_BASE (1000000/OS_HZ)
2246 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2247 UCHAR flg_be_adjust;
2248 ULONG be_adjust_last_time;
2256 UINT8 FlgCtsEnabled;
2257 UINT8 PM_FlgSuspend;
2260 #ifdef RTMP_EFUSE_SUPPORT
2262 BOOLEAN bEEPROMFile;
2263 BOOLEAN bFroceEEPROMBuffer;
2264 UCHAR EEPROMImage[1024];
2265 #endif // RTMP_EFUSE_SUPPORT //
2271 #define DELAYINTMASK 0x0003fffb
2272 #define INTMASK 0x0003fffb
2273 #define IndMask 0x0003fffc
2274 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2275 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2276 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2277 #define TxCoherent 0x00020000 // tx coherent
2278 #define RxCoherent 0x00010000 // rx coherent
2279 #define McuCommand 0x00000200 // mcu
2280 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2281 #define TBTTInt 0x00000800 // TBTT interrupt
2282 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2283 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2284 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2287 /***************************************************************************
2288 * Rx Path software control block related data structures
2289 **************************************************************************/
2290 typedef struct _RX_BLK_
2292 // RXD_STRUC RxD; // sample
2293 RT28XX_RXD_STRUC RxD;
2295 PHEADER_802_11 pHeader;
2296 PNDIS_PACKET pRxPacket;
2300 UCHAR UserPriority; // for calculate TKIP MIC using
2304 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2305 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2306 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2309 #define fRX_WDS 0x0001
2310 #define fRX_AMSDU 0x0002
2311 #define fRX_ARALINK 0x0004
2312 #define fRX_HTC 0x0008
2313 #define fRX_PAD 0x0010
2314 #define fRX_AMPDU 0x0020
2315 #define fRX_QOS 0x0040
2316 #define fRX_INFRA 0x0080
2317 #define fRX_EAP 0x0100
2318 #define fRX_MESH 0x0200
2319 #define fRX_APCLI 0x0400
2320 #define fRX_DLS 0x0800
2321 #define fRX_WPI 0x1000
2323 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2324 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2325 #define LENGTH_ARALINK_HEADER_FIELD 2
2328 /***************************************************************************
2329 * Tx Path software control block related data structures
2330 **************************************************************************/
2331 #define TX_UNKOWN_FRAME 0x00
2332 #define TX_MCAST_FRAME 0x01
2333 #define TX_LEGACY_FRAME 0x02
2334 #define TX_AMPDU_FRAME 0x04
2335 #define TX_AMSDU_FRAME 0x08
2336 #define TX_RALINK_FRAME 0x10
2337 #define TX_FRAG_FRAME 0x20
2340 // Currently the sizeof(TX_BLK) is 148 bytes.
2341 typedef struct _TX_BLK_
2344 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2345 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2346 USHORT TotalFragNum; // Total frame fragments required in one batch
2347 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2349 QUEUE_HEADER TxPacketList;
2350 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2351 HTTRANSMIT_SETTING *pTransmit;
2353 // Following structure used for the characteristics of a specific packet.
2354 PNDIS_PACKET pPacket;
2355 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2356 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2357 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2358 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2359 UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2360 //RT2870 2.1.0.0 uses only 80 bytes
2361 //RT3070 2.1.1.0 uses only 96 bytes
2362 //RT3090 2.1.0.0 uses only 96 bytes
2363 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2364 UCHAR HdrPadLen; // recording Header Padding Length;
2365 UCHAR apidx; // The interface associated to this packet
2366 UCHAR Wcid; // The MAC entry associated to this packet
2367 UCHAR UserPriority; // priority class of packet
2368 UCHAR FrameGap; // what kind of IFS this packet use
2369 UCHAR MpduReqNum; // number of fragments of this frame
2370 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2371 UCHAR CipherAlg; // cipher alogrithm
2376 USHORT Flags; //See following definitions for detail.
2378 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2379 ULONG Priv; // Hardware specific value saved in here.
2383 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2384 #define fTX_bAckRequired 0x0002 // the packet need ack response
2385 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2386 #define fTX_bHTRate 0x0008 // allow to use HT rate
2387 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2388 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2389 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2390 #define fTX_bWMM 0x0080 // QOS Data
2391 #define fTX_bClearEAPFrame 0x0100
2393 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2394 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2395 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2402 /***************************************************************************
2403 * Other static inline function definitions
2404 **************************************************************************/
2405 static inline VOID ConvertMulticastIP2MAC(
2407 IN PUCHAR *ppMacAddr,
2408 IN UINT16 ProtoType)
2410 if (pIpAddr == NULL)
2413 if (ppMacAddr == NULL || *ppMacAddr == NULL)
2419 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2420 *(*ppMacAddr) = 0x33;
2421 *(*ppMacAddr + 1) = 0x33;
2422 *(*ppMacAddr + 2) = pIpAddr[12];
2423 *(*ppMacAddr + 3) = pIpAddr[13];
2424 *(*ppMacAddr + 4) = pIpAddr[14];
2425 *(*ppMacAddr + 5) = pIpAddr[15];
2430 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2431 *(*ppMacAddr) = 0x01;
2432 *(*ppMacAddr + 1) = 0x00;
2433 *(*ppMacAddr + 2) = 0x5e;
2434 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
2435 *(*ppMacAddr + 4) = pIpAddr[2];
2436 *(*ppMacAddr + 5) = pIpAddr[3];
2444 char *GetPhyMode(int Mode);
2445 char* GetBW(int BW);
2448 // Private routines in rtmp_init.c
2450 NDIS_STATUS RTMPAllocAdapterBlock(
2452 OUT PRTMP_ADAPTER *ppAdapter);
2454 NDIS_STATUS RTMPAllocTxRxRingMemory(
2455 IN PRTMP_ADAPTER pAd);
2457 NDIS_STATUS RTMPReadParametersHook(
2458 IN PRTMP_ADAPTER pAd);
2460 NDIS_STATUS RTMPSetProfileParameters(
2461 IN RTMP_ADAPTER *pAd,
2462 IN PSTRING pBuffer);
2464 INT RTMPGetKeyParameter(
2469 IN BOOLEAN bTrimSpace);
2471 VOID RTMPFreeAdapter(
2472 IN PRTMP_ADAPTER pAd);
2474 NDIS_STATUS NICReadRegParameters(
2475 IN PRTMP_ADAPTER pAd,
2476 IN NDIS_HANDLE WrapperConfigurationContext);
2478 #ifdef RTMP_RF_RW_SUPPORT
2479 VOID NICInitRFRegisters(
2480 IN PRTMP_ADAPTER pAd);
2482 VOID RtmpChipOpsRFHook(
2483 IN RTMP_ADAPTER *pAd);
2485 NDIS_STATUS RT30xxWriteRFRegister(
2486 IN PRTMP_ADAPTER pAd,
2490 NDIS_STATUS RT30xxReadRFRegister(
2491 IN PRTMP_ADAPTER pAd,
2494 #endif // RTMP_RF_RW_SUPPORT //
2496 VOID NICReadEEPROMParameters(
2497 IN PRTMP_ADAPTER pAd,
2498 IN PUCHAR mac_addr);
2500 VOID NICInitAsicFromEEPROM(
2501 IN PRTMP_ADAPTER pAd);
2504 NDIS_STATUS NICInitializeAdapter(
2505 IN PRTMP_ADAPTER pAd,
2506 IN BOOLEAN bHardReset);
2508 NDIS_STATUS NICInitializeAsic(
2509 IN PRTMP_ADAPTER pAd,
2510 IN BOOLEAN bHardReset);
2513 IN PRTMP_ADAPTER pAd);
2515 VOID RTMPRingCleanUp(
2516 IN PRTMP_ADAPTER pAd,
2520 IN PRTMP_ADAPTER pAd);
2522 VOID NICResetFromError(
2523 IN PRTMP_ADAPTER pAd);
2525 NDIS_STATUS NICLoadFirmware(
2526 IN PRTMP_ADAPTER pAd);
2528 VOID NICEraseFirmware(
2529 IN PRTMP_ADAPTER pAd);
2531 NDIS_STATUS NICLoadRateSwitchingParams(
2532 IN PRTMP_ADAPTER pAd);
2534 BOOLEAN NICCheckForHang(
2535 IN PRTMP_ADAPTER pAd);
2537 VOID NICUpdateFifoStaCounters(
2538 IN PRTMP_ADAPTER pAd);
2540 VOID NICUpdateRawCounters(
2541 IN PRTMP_ADAPTER pAd);
2543 VOID RTMPZeroMemory(
2547 ULONG RTMPCompareMemory(
2552 VOID RTMPMoveMemory(
2565 VOID RTMPPatchMacBbpBug(
2566 IN PRTMP_ADAPTER pAd);
2569 IN PRTMP_ADAPTER pAd,
2570 IN PRALINK_TIMER_STRUCT pTimer,
2571 IN PVOID pTimerFunc,
2576 IN PRALINK_TIMER_STRUCT pTimer,
2581 IN PRALINK_TIMER_STRUCT pTimer,
2584 VOID RTMPCancelTimer(
2585 IN PRALINK_TIMER_STRUCT pTimer,
2586 OUT BOOLEAN *pCancelled);
2589 IN PRTMP_ADAPTER pAd,
2592 VOID RTMPSetSignalLED(
2593 IN PRTMP_ADAPTER pAd,
2594 IN NDIS_802_11_RSSI Dbm);
2596 VOID RTMPEnableRxTx(
2597 IN PRTMP_ADAPTER pAd);
2600 // prototype in action.c
2602 VOID ActionStateMachineInit(
2603 IN PRTMP_ADAPTER pAd,
2604 IN STATE_MACHINE *S,
2605 OUT STATE_MACHINE_FUNC Trans[]);
2607 VOID MlmeADDBAAction(
2608 IN PRTMP_ADAPTER pAd,
2609 IN MLME_QUEUE_ELEM *Elem);
2611 VOID MlmeDELBAAction(
2612 IN PRTMP_ADAPTER pAd,
2613 IN MLME_QUEUE_ELEM *Elem);
2616 IN PRTMP_ADAPTER pAd,
2617 IN MLME_QUEUE_ELEM *Elem);
2619 VOID MlmeInvalidAction(
2620 IN PRTMP_ADAPTER pAd,
2621 IN MLME_QUEUE_ELEM *Elem);
2624 IN PRTMP_ADAPTER pAd,
2625 IN MLME_QUEUE_ELEM *Elem);
2627 VOID PeerAddBAReqAction(
2628 IN PRTMP_ADAPTER pAd,
2629 IN MLME_QUEUE_ELEM *Elem);
2631 VOID PeerAddBARspAction(
2632 IN PRTMP_ADAPTER pAd,
2633 IN MLME_QUEUE_ELEM *Elem);
2635 VOID PeerDelBAAction(
2636 IN PRTMP_ADAPTER pAd,
2637 IN MLME_QUEUE_ELEM *Elem);
2640 IN PRTMP_ADAPTER pAd,
2641 IN MLME_QUEUE_ELEM *Elem);
2643 VOID SendPSMPAction(
2644 IN PRTMP_ADAPTER pAd,
2649 IN PRTMP_ADAPTER pAd,
2650 IN MLME_QUEUE_ELEM *Elem);
2652 VOID PeerPublicAction(
2653 IN PRTMP_ADAPTER pAd,
2654 IN MLME_QUEUE_ELEM *Elem);
2657 IN PRTMP_ADAPTER pAd,
2658 IN MLME_QUEUE_ELEM *Elem);
2661 IN PRTMP_ADAPTER pAd,
2662 IN MLME_QUEUE_ELEM *Elem);
2664 VOID RECBATimerTimeout(
2665 IN PVOID SystemSpecific1,
2666 IN PVOID FunctionContext,
2667 IN PVOID SystemSpecific2,
2668 IN PVOID SystemSpecific3);
2670 VOID ORIBATimerTimeout(
2671 IN PRTMP_ADAPTER pAd);
2673 VOID SendRefreshBAR(
2674 IN PRTMP_ADAPTER pAd,
2675 IN MAC_TABLE_ENTRY *pEntry);
2679 IN PRTMP_ADAPTER pAd,
2680 IN OUT PHEADER_802_11 pHdr80211,
2686 IN PRTMP_ADAPTER pAd,
2687 IN OUT PFRAME_BAR pCntlBar,
2691 VOID InsertActField(
2692 IN PRTMP_ADAPTER pAd,
2693 OUT PUCHAR pFrameBuf,
2694 OUT PULONG pFrameLen,
2698 BOOLEAN CntlEnqueueForRecv(
2699 IN PRTMP_ADAPTER pAd,
2702 IN PFRAME_BA_REQ pMsg);
2705 // Private routines in rtmp_data.c
2707 BOOLEAN RTMPHandleRxDoneInterrupt(
2708 IN PRTMP_ADAPTER pAd);
2710 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
2711 IN PRTMP_ADAPTER pAd,
2712 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
2714 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
2715 IN PRTMP_ADAPTER pAd);
2717 VOID RTMPHandleTBTTInterrupt(
2718 IN PRTMP_ADAPTER pAd);
2720 VOID RTMPHandlePreTBTTInterrupt(
2721 IN PRTMP_ADAPTER pAd);
2723 void RTMPHandleTwakeupInterrupt(
2724 IN PRTMP_ADAPTER pAd);
2726 VOID RTMPHandleRxCoherentInterrupt(
2727 IN PRTMP_ADAPTER pAd);
2729 BOOLEAN TxFrameIsAggregatible(
2730 IN PRTMP_ADAPTER pAd,
2731 IN PUCHAR pPrevAddr1,
2732 IN PUCHAR p8023hdr);
2734 BOOLEAN PeerIsAggreOn(
2735 IN PRTMP_ADAPTER pAd,
2737 IN PMAC_TABLE_ENTRY pMacEntry);
2740 NDIS_STATUS Sniff2BytesFromNdisBuffer(
2741 IN PNDIS_BUFFER pFirstBuffer,
2742 IN UCHAR DesiredOffset,
2746 NDIS_STATUS STASendPacket(
2747 IN PRTMP_ADAPTER pAd,
2748 IN PNDIS_PACKET pPacket);
2750 VOID STASendPackets(
2751 IN NDIS_HANDLE MiniportAdapterContext,
2752 IN PPNDIS_PACKET ppPacketArray,
2753 IN UINT NumberOfPackets);
2755 VOID RTMPDeQueuePacket(
2756 IN PRTMP_ADAPTER pAd,
2757 IN BOOLEAN bIntContext,
2759 IN UCHAR Max_Tx_Packets);
2761 NDIS_STATUS RTMPHardTransmit(
2762 IN PRTMP_ADAPTER pAd,
2763 IN PNDIS_PACKET pPacket,
2765 OUT PULONG pFreeTXDLeft);
2767 NDIS_STATUS STAHardTransmit(
2768 IN PRTMP_ADAPTER pAd,
2772 VOID STARxEAPOLFrameIndicate(
2773 IN PRTMP_ADAPTER pAd,
2774 IN MAC_TABLE_ENTRY *pEntry,
2776 IN UCHAR FromWhichBSSID);
2778 NDIS_STATUS RTMPFreeTXDRequest(
2779 IN PRTMP_ADAPTER pAd,
2781 IN UCHAR NumberRequired,
2782 IN PUCHAR FreeNumberIs);
2784 NDIS_STATUS MlmeHardTransmit(
2785 IN PRTMP_ADAPTER pAd,
2787 IN PNDIS_PACKET pPacket);
2789 NDIS_STATUS MlmeHardTransmitMgmtRing(
2790 IN PRTMP_ADAPTER pAd,
2792 IN PNDIS_PACKET pPacket);
2795 NDIS_STATUS MlmeHardTransmitTxRing(
2796 IN PRTMP_ADAPTER pAd,
2798 IN PNDIS_PACKET pPacket);
2800 NDIS_STATUS MlmeDataHardTransmit(
2801 IN PRTMP_ADAPTER pAd,
2803 IN PNDIS_PACKET pPacket);
2805 VOID RTMPWriteTxDescriptor(
2806 IN PRTMP_ADAPTER pAd,
2810 #endif // RTMP_MAC_PCI //
2812 USHORT RTMPCalcDuration(
2813 IN PRTMP_ADAPTER pAd,
2818 IN PRTMP_ADAPTER pAd,
2819 IN PTXWI_STRUC pTxWI,
2822 IN BOOLEAN InsTimestamp,
2825 IN BOOLEAN NSeq, // HW new a sequence.
2834 IN HTTRANSMIT_SETTING *pTransmit);
2837 VOID RTMPWriteTxWI_Data(
2838 IN PRTMP_ADAPTER pAd,
2839 IN OUT PTXWI_STRUC pTxWI,
2843 VOID RTMPWriteTxWI_Cache(
2844 IN PRTMP_ADAPTER pAd,
2845 IN OUT PTXWI_STRUC pTxWI,
2848 VOID RTMPSuspendMsduTransmission(
2849 IN PRTMP_ADAPTER pAd);
2851 VOID RTMPResumeMsduTransmission(
2852 IN PRTMP_ADAPTER pAd);
2854 NDIS_STATUS MiniportMMRequest(
2855 IN PRTMP_ADAPTER pAd,
2860 //+++mark by shiang, now this function merge to MiniportMMRequest()
2861 //---mark by shiang, now this function merge to MiniportMMRequest()
2863 VOID RTMPSendNullFrame(
2864 IN PRTMP_ADAPTER pAd,
2866 IN BOOLEAN bQosNull);
2868 VOID RTMPSendDisassociationFrame(
2869 IN PRTMP_ADAPTER pAd);
2871 VOID RTMPSendRTSFrame(
2872 IN PRTMP_ADAPTER pAd,
2874 IN unsigned int NextMpduSize,
2877 IN USHORT AckDuration,
2881 PQUEUE_HEADER RTMPCheckTxSwQueue(
2882 IN PRTMP_ADAPTER pAd,
2885 VOID RTMPReportMicError(
2886 IN PRTMP_ADAPTER pAd,
2887 IN PCIPHER_KEY pWpaKey);
2889 VOID WpaMicFailureReportFrame(
2890 IN PRTMP_ADAPTER pAd,
2891 IN MLME_QUEUE_ELEM *Elem);
2893 VOID WpaDisassocApAndBlockAssoc(
2894 IN PVOID SystemSpecific1,
2895 IN PVOID FunctionContext,
2896 IN PVOID SystemSpecific2,
2897 IN PVOID SystemSpecific3);
2899 VOID WpaStaPairwiseKeySetting(
2900 IN PRTMP_ADAPTER pAd);
2902 VOID WpaStaGroupKeySetting(
2903 IN PRTMP_ADAPTER pAd);
2905 NDIS_STATUS RTMPCloneNdisPacket(
2906 IN PRTMP_ADAPTER pAd,
2907 IN BOOLEAN pInsAMSDUHdr,
2908 IN PNDIS_PACKET pInPacket,
2909 OUT PNDIS_PACKET *ppOutPacket);
2911 NDIS_STATUS RTMPAllocateNdisPacket(
2912 IN PRTMP_ADAPTER pAd,
2913 IN PNDIS_PACKET *pPacket,
2919 VOID RTMPFreeNdisPacket(
2920 IN PRTMP_ADAPTER pAd,
2921 IN PNDIS_PACKET pPacket);
2923 BOOLEAN RTMPFreeTXDUponTxDmaDone(
2924 IN PRTMP_ADAPTER pAd,
2927 BOOLEAN RTMPCheckDHCPFrame(
2928 IN PRTMP_ADAPTER pAd,
2929 IN PNDIS_PACKET pPacket);
2932 BOOLEAN RTMPCheckEtherType(
2933 IN PRTMP_ADAPTER pAd,
2934 IN PNDIS_PACKET pPacket);
2938 // Private routines in rtmp_wep.c
2940 VOID RTMPInitWepEngine(
2941 IN PRTMP_ADAPTER pAd,
2947 VOID RTMPEncryptData(
2948 IN PRTMP_ADAPTER pAd,
2953 BOOLEAN RTMPSoftDecryptWEP(
2954 IN PRTMP_ADAPTER pAd,
2956 IN ULONG DataByteCnt,
2957 IN PCIPHER_KEY pGroupKey);
2960 IN PRTMP_ADAPTER pAd,
2964 IN PARCFOURCONTEXT Ctx,
2969 IN PARCFOURCONTEXT Ctx);
2971 VOID ARCFOUR_DECRYPT(
2972 IN PARCFOURCONTEXT Ctx,
2977 VOID ARCFOUR_ENCRYPT(
2978 IN PARCFOURCONTEXT Ctx,
2983 VOID WPAARCFOUR_ENCRYPT(
2984 IN PARCFOURCONTEXT Ctx,
2989 UINT RTMP_CALC_FCS32(
2998 // Asic/RF/BBP related functions
3000 VOID AsicAdjustTxPower(
3001 IN PRTMP_ADAPTER pAd);
3003 VOID AsicUpdateProtect(
3004 IN PRTMP_ADAPTER pAd,
3005 IN USHORT OperaionMode,
3007 IN BOOLEAN bDisableBGProtect,
3008 IN BOOLEAN bNonGFExist);
3010 VOID AsicSwitchChannel(
3011 IN PRTMP_ADAPTER pAd,
3015 VOID AsicLockChannel(
3016 IN PRTMP_ADAPTER pAd,
3019 VOID AsicRfTuningExec(
3020 IN PVOID SystemSpecific1,
3021 IN PVOID FunctionContext,
3022 IN PVOID SystemSpecific2,
3023 IN PVOID SystemSpecific3);
3025 VOID AsicResetBBPAgent(
3026 IN PRTMP_ADAPTER pAd);
3028 VOID AsicSleepThenAutoWakeup(
3029 IN PRTMP_ADAPTER pAd,
3030 IN USHORT TbttNumToNextWakeUp);
3032 VOID AsicForceSleep(
3033 IN PRTMP_ADAPTER pAd);
3035 VOID AsicForceWakeup(
3036 IN PRTMP_ADAPTER pAd,
3037 IN BOOLEAN bFromTx);
3040 IN PRTMP_ADAPTER pAd,
3043 VOID AsicSetMcastWC(
3044 IN PRTMP_ADAPTER pAd);
3046 VOID AsicDelWcidTab(
3047 IN PRTMP_ADAPTER pAd,
3051 IN PRTMP_ADAPTER pAd);
3053 VOID AsicDisableRDG(
3054 IN PRTMP_ADAPTER pAd);
3056 VOID AsicDisableSync(
3057 IN PRTMP_ADAPTER pAd);
3059 VOID AsicEnableBssSync(
3060 IN PRTMP_ADAPTER pAd);
3062 VOID AsicEnableIbssSync(
3063 IN PRTMP_ADAPTER pAd);
3065 VOID AsicSetEdcaParm(
3066 IN PRTMP_ADAPTER pAd,
3067 IN PEDCA_PARM pEdcaParm);
3069 VOID AsicSetSlotTime(
3070 IN PRTMP_ADAPTER pAd,
3071 IN BOOLEAN bUseShortSlotTime);
3073 VOID AsicAddSharedKeyEntry(
3074 IN PRTMP_ADAPTER pAd,
3082 VOID AsicRemoveSharedKeyEntry(
3083 IN PRTMP_ADAPTER pAd,
3087 VOID AsicUpdateWCIDAttribute(
3088 IN PRTMP_ADAPTER pAd,
3092 IN BOOLEAN bUsePairewiseKeyTable);
3094 VOID AsicUpdateWCIDIVEIV(
3095 IN PRTMP_ADAPTER pAd,
3100 VOID AsicUpdateRxWCIDTable(
3101 IN PRTMP_ADAPTER pAd,
3105 VOID AsicAddKeyEntry(
3106 IN PRTMP_ADAPTER pAd,
3110 IN PCIPHER_KEY pCipherKey,
3111 IN BOOLEAN bUsePairewiseKeyTable,
3114 VOID AsicAddPairwiseKeyEntry(
3115 IN PRTMP_ADAPTER pAd,
3118 IN CIPHER_KEY *pCipherKey);
3120 VOID AsicRemovePairwiseKeyEntry(
3121 IN PRTMP_ADAPTER pAd,
3125 BOOLEAN AsicSendCommandToMcu(
3126 IN PRTMP_ADAPTER pAd,
3134 BOOLEAN AsicCheckCommanOk(
3135 IN PRTMP_ADAPTER pAd,
3137 #endif // RTMP_MAC_PCI //
3139 VOID MacAddrRandomBssid(
3140 IN PRTMP_ADAPTER pAd,
3143 VOID MgtMacHeaderInit(
3144 IN PRTMP_ADAPTER pAd,
3145 IN OUT PHEADER_802_11 pHdr80211,
3152 IN PRTMP_ADAPTER pAd);
3155 IN PRTMP_ADAPTER pAd);
3162 IN PRTMP_ADAPTER pAd,
3165 ULONG BssTableSearch(
3170 ULONG BssSsidTableSearch(
3177 ULONG BssTableSearchWithSSID(
3184 ULONG BssSsidTableSearchBySSID(
3189 VOID BssTableDeleteEntry(
3190 IN OUT PBSS_TABLE pTab,
3194 VOID BATableDeleteORIEntry(
3195 IN OUT PRTMP_ADAPTER pAd,
3196 IN BA_ORI_ENTRY *pBAORIEntry);
3199 IN PRTMP_ADAPTER pAd,
3200 OUT PBSS_ENTRY pBss,
3205 IN USHORT BeaconPeriod,
3208 IN USHORT CapabilityInfo,
3210 IN UCHAR SupRateLen,
3212 IN UCHAR ExtRateLen,
3213 IN HT_CAPABILITY_IE *pHtCapability,
3214 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3215 IN UCHAR HtCapabilityLen,
3216 IN UCHAR AddHtInfoLen,
3217 IN UCHAR NewExtChanOffset,
3220 IN LARGE_INTEGER TimeStamp,
3222 IN PEDCA_PARM pEdcaParm,
3223 IN PQOS_CAPABILITY_PARM pQosCapability,
3224 IN PQBSS_LOAD_PARM pQbssLoad,
3225 IN USHORT LengthVIE,
3226 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3228 ULONG BssTableSetEntry(
3229 IN PRTMP_ADAPTER pAd,
3230 OUT PBSS_TABLE pTab,
3235 IN USHORT BeaconPeriod,
3238 IN USHORT CapabilityInfo,
3240 IN UCHAR SupRateLen,
3242 IN UCHAR ExtRateLen,
3243 IN HT_CAPABILITY_IE *pHtCapability,
3244 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3245 IN UCHAR HtCapabilityLen,
3246 IN UCHAR AddHtInfoLen,
3247 IN UCHAR NewExtChanOffset,
3250 IN LARGE_INTEGER TimeStamp,
3252 IN PEDCA_PARM pEdcaParm,
3253 IN PQOS_CAPABILITY_PARM pQosCapability,
3254 IN PQBSS_LOAD_PARM pQbssLoad,
3255 IN USHORT LengthVIE,
3256 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3258 VOID BATableInsertEntry(
3259 IN PRTMP_ADAPTER pAd,
3261 IN USHORT TimeOutValue,
3262 IN USHORT StartingSeq,
3265 IN UCHAR OriginatorStatus,
3266 IN BOOLEAN IsRecipient);
3268 VOID BssTableSsidSort(
3269 IN PRTMP_ADAPTER pAd,
3270 OUT BSS_TABLE *OutTab,
3274 VOID BssTableSortByRssi(
3275 IN OUT BSS_TABLE *OutTab);
3277 VOID BssCipherParse(
3278 IN OUT PBSS_ENTRY pBss);
3280 NDIS_STATUS MlmeQueueInit(
3281 IN MLME_QUEUE *Queue);
3283 VOID MlmeQueueDestroy(
3284 IN MLME_QUEUE *Queue);
3286 BOOLEAN MlmeEnqueue(
3287 IN PRTMP_ADAPTER pAd,
3293 BOOLEAN MlmeEnqueueForRecv(
3294 IN PRTMP_ADAPTER pAd,
3296 IN ULONG TimeStampHigh,
3297 IN ULONG TimeStampLow,
3306 BOOLEAN MlmeDequeue(
3307 IN MLME_QUEUE *Queue,
3308 OUT MLME_QUEUE_ELEM **Elem);
3310 VOID MlmeRestartStateMachine(
3311 IN PRTMP_ADAPTER pAd);
3313 BOOLEAN MlmeQueueEmpty(
3314 IN MLME_QUEUE *Queue);
3316 BOOLEAN MlmeQueueFull(
3317 IN MLME_QUEUE *Queue);
3319 BOOLEAN MsgTypeSubst(
3320 IN PRTMP_ADAPTER pAd,
3321 IN PFRAME_802_11 pFrame,
3325 VOID StateMachineInit(
3326 IN STATE_MACHINE *Sm,
3327 IN STATE_MACHINE_FUNC Trans[],
3330 IN STATE_MACHINE_FUNC DefFunc,
3334 VOID StateMachineSetAction(
3335 IN STATE_MACHINE *S,
3338 IN STATE_MACHINE_FUNC F);
3340 VOID StateMachinePerformAction(
3341 IN PRTMP_ADAPTER pAd,
3342 IN STATE_MACHINE *S,
3343 IN MLME_QUEUE_ELEM *Elem);
3346 IN PRTMP_ADAPTER pAd,
3347 IN MLME_QUEUE_ELEM *Elem);
3349 VOID AssocStateMachineInit(
3350 IN PRTMP_ADAPTER pAd,
3351 IN STATE_MACHINE *Sm,
3352 OUT STATE_MACHINE_FUNC Trans[]);
3354 VOID ReassocTimeout(
3355 IN PVOID SystemSpecific1,
3356 IN PVOID FunctionContext,
3357 IN PVOID SystemSpecific2,
3358 IN PVOID SystemSpecific3);
3361 IN PVOID SystemSpecific1,
3362 IN PVOID FunctionContext,
3363 IN PVOID SystemSpecific2,
3364 IN PVOID SystemSpecific3);
3366 VOID DisassocTimeout(
3367 IN PVOID SystemSpecific1,
3368 IN PVOID FunctionContext,
3369 IN PVOID SystemSpecific2,
3370 IN PVOID SystemSpecific3);
3372 //----------------------------------------------
3373 VOID MlmeAssocReqAction(
3374 IN PRTMP_ADAPTER pAd,
3375 IN MLME_QUEUE_ELEM *Elem);
3377 VOID MlmeReassocReqAction(
3378 IN PRTMP_ADAPTER pAd,
3379 IN MLME_QUEUE_ELEM *Elem);
3381 VOID MlmeDisassocReqAction(
3382 IN PRTMP_ADAPTER pAd,
3383 IN MLME_QUEUE_ELEM *Elem);
3385 VOID PeerAssocRspAction(
3386 IN PRTMP_ADAPTER pAd,
3387 IN MLME_QUEUE_ELEM *Elem);
3389 VOID PeerReassocRspAction(
3390 IN PRTMP_ADAPTER pAd,
3391 IN MLME_QUEUE_ELEM *Elem);
3393 VOID PeerDisassocAction(
3394 IN PRTMP_ADAPTER pAd,
3395 IN MLME_QUEUE_ELEM *Elem);
3397 VOID DisassocTimeoutAction(
3398 IN PRTMP_ADAPTER pAd,
3399 IN MLME_QUEUE_ELEM *Elem);
3401 VOID AssocTimeoutAction(
3402 IN PRTMP_ADAPTER pAd,
3403 IN MLME_QUEUE_ELEM *Elem);
3405 VOID ReassocTimeoutAction(
3406 IN PRTMP_ADAPTER pAd,
3407 IN MLME_QUEUE_ELEM *Elem);
3410 IN PRTMP_ADAPTER pAd,
3413 VOID InvalidStateWhenAssoc(
3414 IN PRTMP_ADAPTER pAd,
3415 IN MLME_QUEUE_ELEM *Elem);
3417 VOID InvalidStateWhenReassoc(
3418 IN PRTMP_ADAPTER pAd,
3419 IN MLME_QUEUE_ELEM *Elem);
3421 VOID InvalidStateWhenDisassociate(
3422 IN PRTMP_ADAPTER pAd,
3423 IN MLME_QUEUE_ELEM *Elem);
3426 VOID MlmeCntlConfirm(
3427 IN PRTMP_ADAPTER pAd,
3430 #endif // RTMP_MAC_USB //
3433 IN PRTMP_ADAPTER pAd);
3435 VOID ComposeNullFrame(
3436 IN PRTMP_ADAPTER pAd);
3439 IN PRTMP_ADAPTER pAd,
3441 IN USHORT CapabilityInfo,
3444 IN UCHAR SupRateLen,
3446 IN UCHAR ExtRateLen,
3447 IN PEDCA_PARM pEdcaParm,
3448 IN HT_CAPABILITY_IE *pHtCapability,
3449 IN UCHAR HtCapabilityLen,
3450 IN ADD_HT_INFO_IE *pAddHtInfo);
3452 VOID AuthStateMachineInit(
3453 IN PRTMP_ADAPTER pAd,
3454 IN PSTATE_MACHINE sm,
3455 OUT STATE_MACHINE_FUNC Trans[]);
3458 IN PVOID SystemSpecific1,
3459 IN PVOID FunctionContext,
3460 IN PVOID SystemSpecific2,
3461 IN PVOID SystemSpecific3);
3463 VOID MlmeAuthReqAction(
3464 IN PRTMP_ADAPTER pAd,
3465 IN MLME_QUEUE_ELEM *Elem);
3467 VOID PeerAuthRspAtSeq2Action(
3468 IN PRTMP_ADAPTER pAd,
3469 IN MLME_QUEUE_ELEM *Elem);
3471 VOID PeerAuthRspAtSeq4Action(
3472 IN PRTMP_ADAPTER pAd,
3473 IN MLME_QUEUE_ELEM *Elem);
3475 VOID AuthTimeoutAction(
3476 IN PRTMP_ADAPTER pAd,
3477 IN MLME_QUEUE_ELEM *Elem);
3480 IN PRTMP_ADAPTER pAd,
3483 VOID MlmeDeauthReqAction(
3484 IN PRTMP_ADAPTER pAd,
3485 IN MLME_QUEUE_ELEM *Elem);
3487 VOID InvalidStateWhenAuth(
3488 IN PRTMP_ADAPTER pAd,
3489 IN MLME_QUEUE_ELEM *Elem);
3491 //=============================================
3493 VOID AuthRspStateMachineInit(
3494 IN PRTMP_ADAPTER pAd,
3495 IN PSTATE_MACHINE Sm,
3496 IN STATE_MACHINE_FUNC Trans[]);
3498 VOID PeerDeauthAction(
3499 IN PRTMP_ADAPTER pAd,
3500 IN MLME_QUEUE_ELEM *Elem);
3502 VOID PeerAuthSimpleRspGenAndSend(
3503 IN PRTMP_ADAPTER pAd,
3504 IN PHEADER_802_11 pHdr80211,
3511 // Private routines in dls.c
3514 //========================================
3516 VOID SyncStateMachineInit(
3517 IN PRTMP_ADAPTER pAd,
3518 IN STATE_MACHINE *Sm,
3519 OUT STATE_MACHINE_FUNC Trans[]);
3522 IN PVOID SystemSpecific1,
3523 IN PVOID FunctionContext,
3524 IN PVOID SystemSpecific2,
3525 IN PVOID SystemSpecific3);
3528 IN PVOID SystemSpecific1,
3529 IN PVOID FunctionContext,
3530 IN PVOID SystemSpecific2,
3531 IN PVOID SystemSpecific3);
3533 VOID InvalidStateWhenScan(
3534 IN PRTMP_ADAPTER pAd,
3535 IN MLME_QUEUE_ELEM *Elem);
3537 VOID InvalidStateWhenJoin(
3538 IN PRTMP_ADAPTER pAd,
3539 IN MLME_QUEUE_ELEM *Elem);
3541 VOID InvalidStateWhenStart(
3542 IN PRTMP_ADAPTER pAd,
3543 IN MLME_QUEUE_ELEM *Elem);
3545 VOID EnqueueProbeRequest(
3546 IN PRTMP_ADAPTER pAd);
3548 BOOLEAN ScanRunning(
3549 IN PRTMP_ADAPTER pAd);
3550 //=========================================
3553 IN PRTMP_ADAPTER pAd,
3554 IN STATE_MACHINE *S,
3555 OUT STATE_MACHINE_FUNC Trans[]);
3557 VOID MlmeCntlMachinePerformAction(
3558 IN PRTMP_ADAPTER pAd,
3559 IN STATE_MACHINE *S,
3560 IN MLME_QUEUE_ELEM *Elem);
3563 IN PRTMP_ADAPTER pAd,
3564 IN MLME_QUEUE_ELEM *Elem);
3566 VOID CntlOidScanProc(
3567 IN PRTMP_ADAPTER pAd,
3568 IN MLME_QUEUE_ELEM *Elem);
3570 VOID CntlOidSsidProc(
3571 IN PRTMP_ADAPTER pAd,
3572 IN MLME_QUEUE_ELEM * Elem);
3574 VOID CntlOidRTBssidProc(
3575 IN PRTMP_ADAPTER pAd,
3576 IN MLME_QUEUE_ELEM * Elem);
3578 VOID CntlMlmeRoamingProc(
3579 IN PRTMP_ADAPTER pAd,
3580 IN MLME_QUEUE_ELEM * Elem);
3582 VOID CntlWaitDisassocProc(
3583 IN PRTMP_ADAPTER pAd,
3584 IN MLME_QUEUE_ELEM *Elem);
3586 VOID CntlWaitJoinProc(
3587 IN PRTMP_ADAPTER pAd,
3588 IN MLME_QUEUE_ELEM *Elem);
3590 VOID CntlWaitReassocProc(
3591 IN PRTMP_ADAPTER pAd,
3592 IN MLME_QUEUE_ELEM *Elem);
3594 VOID CntlWaitStartProc(
3595 IN PRTMP_ADAPTER pAd,
3596 IN MLME_QUEUE_ELEM *Elem);
3598 VOID CntlWaitAuthProc(
3599 IN PRTMP_ADAPTER pAd,
3600 IN MLME_QUEUE_ELEM *Elem);
3602 VOID CntlWaitAuthProc2(
3603 IN PRTMP_ADAPTER pAd,
3604 IN MLME_QUEUE_ELEM *Elem);
3606 VOID CntlWaitAssocProc(
3607 IN PRTMP_ADAPTER pAd,
3608 IN MLME_QUEUE_ELEM *Elem);
3611 IN PRTMP_ADAPTER pAd,
3615 IN PRTMP_ADAPTER pAd,
3616 IN BOOLEAN IsReqFromAP);
3618 VOID IterateOnBssTab(
3619 IN PRTMP_ADAPTER pAd);
3621 VOID IterateOnBssTab2(
3622 IN PRTMP_ADAPTER pAd);;
3625 IN PRTMP_ADAPTER pAd,
3626 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
3630 IN PRTMP_ADAPTER pAd,
3631 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
3633 IN USHORT CapabilityInfo,
3635 IN USHORT ListenIntv);
3638 IN PRTMP_ADAPTER pAd,
3639 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
3645 VOID DisassocParmFill(
3646 IN PRTMP_ADAPTER pAd,
3647 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
3652 IN PRTMP_ADAPTER pAd,
3653 IN OUT MLME_START_REQ_STRUCT *StartReq,
3658 IN PRTMP_ADAPTER pAd,
3659 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
3664 IN PRTMP_ADAPTER pAd);
3666 VOID EnqueueBeaconFrame(
3667 IN PRTMP_ADAPTER pAd);
3669 VOID MlmeJoinReqAction(
3670 IN PRTMP_ADAPTER pAd,
3671 IN MLME_QUEUE_ELEM *Elem);
3673 VOID MlmeScanReqAction(
3674 IN PRTMP_ADAPTER pAd,
3675 IN MLME_QUEUE_ELEM *Elem);
3677 VOID MlmeStartReqAction(
3678 IN PRTMP_ADAPTER pAd,
3679 IN MLME_QUEUE_ELEM *Elem);
3681 VOID ScanTimeoutAction(
3682 IN PRTMP_ADAPTER pAd,
3683 IN MLME_QUEUE_ELEM *Elem);
3685 VOID BeaconTimeoutAtJoinAction(
3686 IN PRTMP_ADAPTER pAd,
3687 IN MLME_QUEUE_ELEM *Elem);
3689 VOID PeerBeaconAtScanAction(
3690 IN PRTMP_ADAPTER pAd,
3691 IN MLME_QUEUE_ELEM *Elem);
3693 VOID PeerBeaconAtJoinAction(
3694 IN PRTMP_ADAPTER pAd,
3695 IN MLME_QUEUE_ELEM *Elem);
3698 IN PRTMP_ADAPTER pAd,
3699 IN MLME_QUEUE_ELEM *Elem);
3701 VOID PeerProbeReqAction(
3702 IN PRTMP_ADAPTER pAd,
3703 IN MLME_QUEUE_ELEM *Elem);
3705 VOID ScanNextChannel(
3706 IN PRTMP_ADAPTER pAd);
3708 ULONG MakeIbssBeacon(
3709 IN PRTMP_ADAPTER pAd);
3711 BOOLEAN MlmeScanReqSanity(
3712 IN PRTMP_ADAPTER pAd,
3718 OUT UCHAR *ScanType);
3720 BOOLEAN PeerBeaconAndProbeRspSanity(
3721 IN PRTMP_ADAPTER pAd,
3724 IN UCHAR MsgChannel,
3728 OUT UCHAR *pSsidLen,
3729 OUT UCHAR *pBssType,
3730 OUT USHORT *pBeaconPeriod,
3731 OUT UCHAR *pChannel,
3732 OUT UCHAR *pNewChannel,
3733 OUT LARGE_INTEGER *pTimestamp,
3734 OUT CF_PARM *pCfParm,
3735 OUT USHORT *pAtimWin,
3736 OUT USHORT *pCapabilityInfo,
3738 OUT UCHAR *pDtimCount,
3739 OUT UCHAR *pDtimPeriod,
3740 OUT UCHAR *pBcastFlag,
3741 OUT UCHAR *pMessageToMe,
3742 OUT UCHAR SupRate[],
3743 OUT UCHAR *pSupRateLen,
3744 OUT UCHAR ExtRate[],
3745 OUT UCHAR *pExtRateLen,
3746 OUT UCHAR *pCkipFlag,
3747 OUT UCHAR *pAironetCellPowerLimit,
3748 OUT PEDCA_PARM pEdcaParm,
3749 OUT PQBSS_LOAD_PARM pQbssLoad,
3750 OUT PQOS_CAPABILITY_PARM pQosCapability,
3751 OUT ULONG *pRalinkIe,
3752 OUT UCHAR *pHtCapabilityLen,
3753 OUT UCHAR *pPreNHtCapabilityLen,
3754 OUT HT_CAPABILITY_IE *pHtCapability,
3755 OUT UCHAR *AddHtInfoLen,
3756 OUT ADD_HT_INFO_IE *AddHtInfo,
3757 OUT UCHAR *NewExtChannel,
3758 OUT USHORT *LengthVIE,
3759 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
3761 BOOLEAN PeerAddBAReqActionSanity(
3762 IN PRTMP_ADAPTER pAd,
3767 BOOLEAN PeerAddBARspActionSanity(
3768 IN PRTMP_ADAPTER pAd,
3772 BOOLEAN PeerDelBAActionSanity(
3773 IN PRTMP_ADAPTER pAd,
3778 BOOLEAN MlmeAssocReqSanity(
3779 IN PRTMP_ADAPTER pAd,
3783 OUT USHORT *CapabilityInfo,
3785 OUT USHORT *ListenIntv);
3787 BOOLEAN MlmeAuthReqSanity(
3788 IN PRTMP_ADAPTER pAd,
3795 BOOLEAN MlmeStartReqSanity(
3796 IN PRTMP_ADAPTER pAd,
3800 OUT UCHAR *Ssidlen);
3802 BOOLEAN PeerAuthSanity(
3803 IN PRTMP_ADAPTER pAd,
3810 OUT CHAR ChlgText[]);
3812 BOOLEAN PeerAssocRspSanity(
3813 IN PRTMP_ADAPTER pAd,
3817 OUT USHORT *pCapabilityInfo,
3818 OUT USHORT *pStatus,
3820 OUT UCHAR SupRate[],
3821 OUT UCHAR *pSupRateLen,
3822 OUT UCHAR ExtRate[],
3823 OUT UCHAR *pExtRateLen,
3824 OUT HT_CAPABILITY_IE *pHtCapability,
3825 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3826 OUT UCHAR *pHtCapabilityLen,
3827 OUT UCHAR *pAddHtInfoLen,
3828 OUT UCHAR *pNewExtChannelOffset,
3829 OUT PEDCA_PARM pEdcaParm,
3830 OUT UCHAR *pCkipFlag);
3832 BOOLEAN PeerDisassocSanity(
3833 IN PRTMP_ADAPTER pAd,
3837 OUT USHORT *Reason);
3839 BOOLEAN PeerWpaMessageSanity(
3840 IN PRTMP_ADAPTER pAd,
3841 IN PEAPOL_PACKET pMsg,
3844 IN MAC_TABLE_ENTRY *pEntry);
3846 BOOLEAN PeerDeauthSanity(
3847 IN PRTMP_ADAPTER pAd,
3851 OUT USHORT *Reason);
3853 BOOLEAN PeerProbeReqSanity(
3854 IN PRTMP_ADAPTER pAd,
3859 OUT UCHAR *pSsidLen);
3865 OUT UCHAR *BcastFlag,
3866 OUT UCHAR *DtimCount,
3867 OUT UCHAR *DtimPeriod,
3868 OUT UCHAR *MessageToMe);
3870 UCHAR ChannelSanity(
3871 IN PRTMP_ADAPTER pAd,
3874 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
3875 IN PBSS_ENTRY pBss);
3877 BOOLEAN MlmeDelBAReqSanity(
3878 IN PRTMP_ADAPTER pAd,
3882 BOOLEAN MlmeAddBAReqSanity(
3883 IN PRTMP_ADAPTER pAd,
3888 ULONG MakeOutgoingFrame(
3890 OUT ULONG *Length, ...);
3893 IN PRTMP_ADAPTER pAd,
3897 IN PRTMP_ADAPTER pAd);
3899 VOID AsicUpdateAutoFallBackTable(
3900 IN PRTMP_ADAPTER pAd,
3903 VOID MlmePeriodicExec(
3904 IN PVOID SystemSpecific1,
3905 IN PVOID FunctionContext,
3906 IN PVOID SystemSpecific2,
3907 IN PVOID SystemSpecific3);
3910 IN PVOID SystemSpecific1,
3911 IN PVOID FunctionContext,
3912 IN PVOID SystemSpecific2,
3913 IN PVOID SystemSpecific3);
3915 VOID STAMlmePeriodicExec(
3919 IN PRTMP_ADAPTER pAd);
3921 VOID MlmeAutoReconnectLastSSID(
3922 IN PRTMP_ADAPTER pAd);
3924 BOOLEAN MlmeValidateSSID(
3928 VOID MlmeCheckForRoaming(
3929 IN PRTMP_ADAPTER pAd,
3932 BOOLEAN MlmeCheckForFastRoaming(
3933 IN PRTMP_ADAPTER pAd);
3935 VOID MlmeDynamicTxRateSwitching(
3936 IN PRTMP_ADAPTER pAd);
3939 IN PRTMP_ADAPTER pAd,
3940 IN PMAC_TABLE_ENTRY pEntry,
3941 IN PRTMP_TX_RATE_SWITCH pTxRate);
3943 VOID MlmeSelectTxRateTable(
3944 IN PRTMP_ADAPTER pAd,
3945 IN PMAC_TABLE_ENTRY pEntry,
3947 IN PUCHAR pTableSize,
3948 IN PUCHAR pInitTxRateIdx);
3950 VOID MlmeCalculateChannelQuality(
3951 IN PRTMP_ADAPTER pAd,
3952 IN PMAC_TABLE_ENTRY pMacEntry,
3955 VOID MlmeCheckPsmChange(
3956 IN PRTMP_ADAPTER pAd,
3960 IN PRTMP_ADAPTER pAd,
3963 VOID MlmeSetTxPreamble(
3964 IN PRTMP_ADAPTER pAd,
3965 IN USHORT TxPreamble);
3967 VOID UpdateBasicRateBitmap(
3968 IN PRTMP_ADAPTER pAd);
3970 VOID MlmeUpdateTxRates(
3971 IN PRTMP_ADAPTER pAd,
3975 VOID MlmeUpdateHtTxRates(
3976 IN PRTMP_ADAPTER pAd,
3979 VOID RTMPCheckRates(
3980 IN PRTMP_ADAPTER pAd,
3981 IN OUT UCHAR SupRate[],
3982 IN OUT UCHAR *SupRateLen);
3984 BOOLEAN RTMPCheckChannel(
3985 IN PRTMP_ADAPTER pAd,
3986 IN UCHAR CentralChannel,
3989 BOOLEAN RTMPCheckHt(
3990 IN PRTMP_ADAPTER pAd,
3992 IN OUT HT_CAPABILITY_IE *pHtCapability,
3993 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
3995 VOID StaQuickResponeForRateUpExec(
3996 IN PVOID SystemSpecific1,
3997 IN PVOID FunctionContext,
3998 IN PVOID SystemSpecific2,
3999 IN PVOID SystemSpecific3);
4001 VOID RTMPUpdateMlmeRate(
4002 IN PRTMP_ADAPTER pAd);
4005 IN PRTMP_ADAPTER pAd,
4012 IN PRTMP_ADAPTER pAd,
4015 VOID RTMPFilterCalibration(
4016 IN PRTMP_ADAPTER pAd);
4018 #ifdef RTMP_EFUSE_SUPPORT
4019 //2008/09/11:KH add to support efuse<--
4020 INT set_eFuseGetFreeBlockCount_Proc(
4021 IN PRTMP_ADAPTER pAd,
4024 INT set_eFusedump_Proc(
4025 IN PRTMP_ADAPTER pAd,
4028 INT set_eFuseLoadFromBin_Proc(
4029 IN PRTMP_ADAPTER pAd,
4032 VOID eFusePhysicalReadRegisters(
4033 IN PRTMP_ADAPTER pAd,
4038 int RtmpEfuseSupportCheck(
4039 IN RTMP_ADAPTER *pAd);
4041 INT set_eFuseBufferModeWriteBack_Proc(
4042 IN PRTMP_ADAPTER pAd,
4045 INT eFuseLoadEEPROM(
4046 IN PRTMP_ADAPTER pAd);
4048 INT eFuseWriteEeeppromBuf(
4049 IN PRTMP_ADAPTER pAd);
4051 VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd,
4052 PUINT EfuseFreeBlock);
4055 IN PRTMP_ADAPTER pAd);
4058 IN PRTMP_ADAPTER pAd,
4063 NTSTATUS eFuseWrite(
4064 IN PRTMP_ADAPTER pAd,
4068 //2008/09/11:KH add to support efuse-->
4069 #endif // RTMP_EFUSE_SUPPORT //
4071 // add by johnli, RF power sequence setup
4072 VOID RT30xxLoadRFNormalModeSetup(
4073 IN PRTMP_ADAPTER pAd);
4075 VOID RT30xxLoadRFSleepModeSetup(
4076 IN PRTMP_ADAPTER pAd);
4078 VOID RT30xxReverseRFSleepModeSetup(
4079 IN PRTMP_ADAPTER pAd);
4083 VOID NICInitRT3070RFRegisters(
4084 IN RTMP_ADAPTER *pAd);
4087 VOID NICInitRT3090RFRegisters(
4088 IN RTMP_ADAPTER *pAd);
4091 VOID RT30xxHaltAction(
4092 IN PRTMP_ADAPTER pAd);
4094 VOID RT30xxSetRxAnt(
4095 IN PRTMP_ADAPTER pAd,
4099 VOID AsicEvaluateRxAnt(
4100 IN PRTMP_ADAPTER pAd);
4102 VOID AsicRxAntEvalTimeout(
4103 IN PVOID SystemSpecific1,
4104 IN PVOID FunctionContext,
4105 IN PVOID SystemSpecific2,
4106 IN PVOID SystemSpecific3);
4108 VOID APSDPeriodicExec(
4109 IN PVOID SystemSpecific1,
4110 IN PVOID FunctionContext,
4111 IN PVOID SystemSpecific2,
4112 IN PVOID SystemSpecific3);
4114 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4115 IN PRTMP_ADAPTER pAd,
4116 IN PMAC_TABLE_ENTRY pEntry);
4118 UCHAR RTMPStaFixedTxMode(
4119 IN PRTMP_ADAPTER pAd,
4120 IN PMAC_TABLE_ENTRY pEntry);
4122 VOID RTMPUpdateLegacyTxSetting(
4123 UCHAR fixed_tx_mode,
4124 PMAC_TABLE_ENTRY pEntry);
4126 BOOLEAN RTMPAutoRateSwitchCheck(
4127 IN PRTMP_ADAPTER pAd);
4129 NDIS_STATUS MlmeInit(
4130 IN PRTMP_ADAPTER pAd);
4133 IN PRTMP_ADAPTER pAd);
4136 IN PRTMP_ADAPTER pAd);
4138 VOID MlmeResetRalinkCounters(
4139 IN PRTMP_ADAPTER pAd);
4141 VOID BuildChannelList(
4142 IN PRTMP_ADAPTER pAd);
4145 IN PRTMP_ADAPTER pAd);
4148 IN PRTMP_ADAPTER pAd,
4151 VOID ChangeToCellPowerLimit(
4152 IN PRTMP_ADAPTER pAd,
4153 IN UCHAR AironetCellPowerLimit);
4156 // Prototypes of function definition in rtmp_tkip.c
4158 VOID RTMPInitTkipEngine(
4159 IN PRTMP_ADAPTER pAd,
4168 VOID RTMPInitMICEngine(
4169 IN PRTMP_ADAPTER pAd,
4173 IN UCHAR UserPriority,
4176 BOOLEAN RTMPTkipCompareMICValue(
4177 IN PRTMP_ADAPTER pAd,
4182 IN UCHAR UserPriority,
4185 VOID RTMPCalculateMICValue(
4186 IN PRTMP_ADAPTER pAd,
4187 IN PNDIS_PACKET pPacket,
4189 IN PCIPHER_KEY pKey,
4192 VOID RTMPTkipAppendByte(
4193 IN PTKIP_KEY_INFO pTkip,
4196 VOID RTMPTkipAppend(
4197 IN PTKIP_KEY_INFO pTkip,
4201 VOID RTMPTkipGetMIC(
4202 IN PTKIP_KEY_INFO pTkip);
4204 BOOLEAN RTMPSoftDecryptTKIP(
4205 IN PRTMP_ADAPTER pAd,
4207 IN ULONG DataByteCnt,
4208 IN UCHAR UserPriority,
4209 IN PCIPHER_KEY pWpaKey);
4211 BOOLEAN RTMPSoftDecryptAES(
4212 IN PRTMP_ADAPTER pAd,
4214 IN ULONG DataByteCnt,
4215 IN PCIPHER_KEY pWpaKey);
4220 // Prototypes of function definition in cmm_info.c
4222 INT RT_CfgSetCountryRegion(
4223 IN PRTMP_ADAPTER pAd,
4227 INT RT_CfgSetWirelessMode(
4228 IN PRTMP_ADAPTER pAd,
4231 INT RT_CfgSetShortSlot(
4232 IN PRTMP_ADAPTER pAd,
4235 INT RT_CfgSetWepKey(
4236 IN PRTMP_ADAPTER pAd,
4237 IN PSTRING keyString,
4238 IN CIPHER_KEY *pSharedKey,
4241 INT RT_CfgSetWPAPSKKey(
4242 IN RTMP_ADAPTER *pAd,
4243 IN PSTRING keyString,
4246 OUT PUCHAR pPMKBuf);
4251 // Prototypes of function definition in cmm_info.c
4253 NDIS_STATUS RTMPWPARemoveKeyProc(
4254 IN PRTMP_ADAPTER pAd,
4257 VOID RTMPWPARemoveAllKeys(
4258 IN PRTMP_ADAPTER pAd);
4260 BOOLEAN RTMPCheckStrPrintAble(
4264 VOID RTMPSetPhyMode(
4265 IN PRTMP_ADAPTER pAd,
4268 VOID RTMPUpdateHTIE(
4269 IN RT_HT_CAPABILITY *pRtHt,
4271 OUT HT_CAPABILITY_IE *pHtCapability,
4272 OUT ADD_HT_INFO_IE *pAddHtInfo);
4274 VOID RTMPAddWcidAttributeEntry(
4275 IN PRTMP_ADAPTER pAd,
4279 IN MAC_TABLE_ENTRY *pEntry);
4281 PSTRING GetEncryptType(
4284 PSTRING GetAuthMode(
4288 IN PRTMP_ADAPTER pAd,
4289 IN OID_SET_HT_PHYMODE *pHTPhyMode);
4291 VOID RTMPSetIndividualHT(
4292 IN PRTMP_ADAPTER pAd,
4295 VOID RTMPSendWirelessEvent(
4296 IN PRTMP_ADAPTER pAd,
4297 IN USHORT Event_flag,
4303 IN PRTMP_ADAPTER pAd,
4305 IN UCHAR RssiNumber);
4307 /*===================================
4308 Function prototype in cmm_wpa.c
4309 =================================== */
4310 VOID RTMPToWirelessSta(
4311 IN PRTMP_ADAPTER pAd,
4312 IN PMAC_TABLE_ENTRY pEntry,
4313 IN PUCHAR pHeader802_3,
4317 IN BOOLEAN bClearFrame);
4320 IN PRTMP_ADAPTER pAd,
4330 IN PRTMP_ADAPTER pAd,
4334 BOOLEAN RTMPCheckWPAframe(
4335 IN PRTMP_ADAPTER pAd,
4336 IN PMAC_TABLE_ENTRY pEntry,
4338 IN ULONG DataByteCount,
4339 IN UCHAR FromWhichBSSID);
4341 VOID AES_GTK_KEY_UNWRAP(
4343 OUT UCHAR *plaintext,
4345 IN UCHAR *ciphertext);
4347 BOOLEAN RTMPParseEapolKeyData(
4348 IN PRTMP_ADAPTER pAd,
4350 IN UCHAR KeyDataLen,
4351 IN UCHAR GroupKeyIndex,
4354 IN MAC_TABLE_ENTRY *pEntry);
4356 VOID ConstructEapolMsg(
4357 IN PMAC_TABLE_ENTRY pEntry,
4358 IN UCHAR GroupKeyWepStatus,
4360 IN UCHAR DefaultKeyIdx,
4366 OUT PEAPOL_PACKET pMsg);
4368 NDIS_STATUS RTMPSoftDecryptBroadCastData(
4369 IN PRTMP_ADAPTER pAd,
4371 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
4372 IN PCIPHER_KEY pShard_key);
4375 IN PRTMP_ADAPTER pAd,
4381 // function prototype in ap_wpa.c
4383 VOID RTMPGetTxTscFromAsic(
4384 IN PRTMP_ADAPTER pAd,
4388 VOID APInstallPairwiseKey(
4390 PMAC_TABLE_ENTRY pEntry);
4392 UINT APValidateRSNIE(
4393 IN PRTMP_ADAPTER pAd,
4394 IN PMAC_TABLE_ENTRY pEntry,
4396 IN UCHAR rsnie_len);
4398 VOID HandleCounterMeasure(
4399 IN PRTMP_ADAPTER pAd,
4400 IN MAC_TABLE_ENTRY *pEntry);
4402 VOID WPAStart4WayHS(
4403 IN PRTMP_ADAPTER pAd,
4404 IN MAC_TABLE_ENTRY *pEntry,
4405 IN ULONG TimeInterval);
4407 VOID WPAStart2WayGroupHS(
4408 IN PRTMP_ADAPTER pAd,
4409 IN MAC_TABLE_ENTRY *pEntry);
4411 VOID PeerPairMsg1Action(
4412 IN PRTMP_ADAPTER pAd,
4413 IN MAC_TABLE_ENTRY *pEntry,
4414 IN MLME_QUEUE_ELEM *Elem);
4416 VOID PeerPairMsg2Action(
4417 IN PRTMP_ADAPTER pAd,
4418 IN MAC_TABLE_ENTRY *pEntry,
4419 IN MLME_QUEUE_ELEM *Elem);
4421 VOID PeerPairMsg3Action(
4422 IN PRTMP_ADAPTER pAd,
4423 IN MAC_TABLE_ENTRY *pEntry,
4424 IN MLME_QUEUE_ELEM *Elem);
4426 VOID PeerPairMsg4Action(
4427 IN PRTMP_ADAPTER pAd,
4428 IN MAC_TABLE_ENTRY *pEntry,
4429 IN MLME_QUEUE_ELEM *Elem);
4431 VOID PeerGroupMsg1Action(
4432 IN PRTMP_ADAPTER pAd,
4433 IN PMAC_TABLE_ENTRY pEntry,
4434 IN MLME_QUEUE_ELEM *Elem);
4436 VOID PeerGroupMsg2Action(
4437 IN PRTMP_ADAPTER pAd,
4438 IN PMAC_TABLE_ENTRY pEntry,
4449 VOID AES_GTK_KEY_WRAP(
4451 IN UCHAR *plaintext,
4453 OUT UCHAR *ciphertext);
4455 //typedef void (*TIMER_FUNCTION)(unsigned long);
4459 VOID RTMP_SetPeriodicTimer(
4460 IN NDIS_MINIPORT_TIMER *pTimer,
4461 IN unsigned long timeout);
4463 VOID RTMP_OS_Init_Timer(
4464 IN PRTMP_ADAPTER pAd,
4465 IN NDIS_MINIPORT_TIMER *pTimer,
4466 IN TIMER_FUNCTION function,
4469 VOID RTMP_OS_Add_Timer(
4470 IN NDIS_MINIPORT_TIMER *pTimer,
4471 IN unsigned long timeout);
4473 VOID RTMP_OS_Mod_Timer(
4474 IN NDIS_MINIPORT_TIMER *pTimer,
4475 IN unsigned long timeout);
4478 VOID RTMP_OS_Del_Timer(
4479 IN NDIS_MINIPORT_TIMER *pTimer,
4480 OUT BOOLEAN *pCancelled);
4483 VOID RTMP_OS_Release_Packet(
4484 IN PRTMP_ADAPTER pAd,
4485 IN PQUEUE_ENTRY pEntry);
4490 NDIS_STATUS os_alloc_mem(
4491 IN RTMP_ADAPTER *pAd,
4495 NDIS_STATUS os_free_mem(
4496 IN PRTMP_ADAPTER pAd,
4500 void RTMP_AllocateSharedMemory(
4501 IN PRTMP_ADAPTER pAd,
4504 OUT PVOID *VirtualAddress,
4505 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4507 VOID RTMPFreeTxRxRingMemory(
4508 IN PRTMP_ADAPTER pAd);
4510 NDIS_STATUS AdapterBlockAllocateMemory(
4514 void RTMP_AllocateTxDescMemory(
4515 IN PRTMP_ADAPTER pAd,
4519 OUT PVOID *VirtualAddress,
4520 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4522 void RTMP_AllocateFirstTxBuffer(
4523 IN PRTMP_ADAPTER pAd,
4527 OUT PVOID *VirtualAddress,
4528 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4530 void RTMP_FreeFirstTxBuffer(
4531 IN PRTMP_ADAPTER pAd,
4534 IN PVOID VirtualAddress,
4535 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4537 void RTMP_AllocateMgmtDescMemory(
4538 IN PRTMP_ADAPTER pAd,
4541 OUT PVOID *VirtualAddress,
4542 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4544 void RTMP_AllocateRxDescMemory(
4545 IN PRTMP_ADAPTER pAd,
4548 OUT PVOID *VirtualAddress,
4549 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4551 void RTMP_FreeDescMemory(
4552 IN PRTMP_ADAPTER pAd,
4554 IN PVOID VirtualAddress,
4555 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4557 PNDIS_PACKET RtmpOSNetPktAlloc(
4558 IN RTMP_ADAPTER *pAd,
4561 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
4562 IN PRTMP_ADAPTER pAd,
4565 OUT PVOID *VirtualAddress,
4566 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4568 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
4569 IN PRTMP_ADAPTER pAd,
4572 OUT PVOID *VirtualAddress);
4574 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
4575 IN PRTMP_ADAPTER pAd,
4578 void RTMP_QueryPacketInfo(
4579 IN PNDIS_PACKET pPacket,
4580 OUT PACKET_INFO *pPacketInfo,
4581 OUT PUCHAR *pSrcBufVA,
4582 OUT UINT *pSrcBufLen);
4584 void RTMP_QueryNextPacketInfo(
4585 IN PNDIS_PACKET *ppPacket,
4586 OUT PACKET_INFO *pPacketInfo,
4587 OUT PUCHAR *pSrcBufVA,
4588 OUT UINT *pSrcBufLen);
4591 BOOLEAN RTMP_FillTxBlkInfo(
4592 IN RTMP_ADAPTER *pAd,
4596 PRTMP_SCATTER_GATHER_LIST
4597 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
4600 void announce_802_3_packet(
4601 IN PRTMP_ADAPTER pAd,
4602 IN PNDIS_PACKET pPacket);
4605 UINT BA_Reorder_AMSDU_Annnounce(
4606 IN PRTMP_ADAPTER pAd,
4607 IN PNDIS_PACKET pPacket);
4609 PNET_DEV get_netdev_from_bssid(
4610 IN PRTMP_ADAPTER pAd,
4611 IN UCHAR FromWhichBSSID);
4614 PNDIS_PACKET duplicate_pkt(
4615 IN PRTMP_ADAPTER pAd,
4616 IN PUCHAR pHeader802_3,
4620 IN UCHAR FromWhichBSSID);
4623 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
4624 IN PRTMP_ADAPTER pAd,
4625 IN PNDIS_PACKET pOldPkt);
4627 void ba_flush_reordering_timeout_mpdus(
4628 IN PRTMP_ADAPTER pAd,
4629 IN PBA_REC_ENTRY pBAEntry,
4633 VOID BAOriSessionSetUp(
4634 IN PRTMP_ADAPTER pAd,
4635 IN MAC_TABLE_ENTRY *pEntry,
4639 IN BOOLEAN isForced);
4641 VOID BASessionTearDownALL(
4642 IN OUT PRTMP_ADAPTER pAd,
4645 BOOLEAN OS_Need_Clone_Packet(void);
4648 VOID build_tx_packet(
4649 IN PRTMP_ADAPTER pAd,
4650 IN PNDIS_PACKET pPacket,
4655 VOID BAOriSessionTearDown(
4656 IN OUT PRTMP_ADAPTER pAd,
4659 IN BOOLEAN bPassive,
4660 IN BOOLEAN bForceSend);
4662 VOID BARecSessionTearDown(
4663 IN OUT PRTMP_ADAPTER pAd,
4666 IN BOOLEAN bPassive);
4668 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
4669 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
4674 BOOLEAN rtstrmactohex(
4678 BOOLEAN rtstrcasecmp(
4682 PSTRING rtstrstruncasecmp(
4687 IN const PSTRING s1,
4688 IN const PSTRING s2);
4692 IN const PSTRING ct);
4696 unsigned int *addr);
4698 ////////// common ioctl functions //////////
4699 INT Set_DriverVersion_Proc(
4700 IN PRTMP_ADAPTER pAd,
4703 INT Set_CountryRegion_Proc(
4704 IN PRTMP_ADAPTER pAd,
4707 INT Set_CountryRegionABand_Proc(
4708 IN PRTMP_ADAPTER pAd,
4711 INT Set_WirelessMode_Proc(
4712 IN PRTMP_ADAPTER pAd,
4715 INT Set_Channel_Proc(
4716 IN PRTMP_ADAPTER pAd,
4719 INT Set_ShortSlot_Proc(
4720 IN PRTMP_ADAPTER pAd,
4723 INT Set_TxPower_Proc(
4724 IN PRTMP_ADAPTER pAd,
4727 INT Set_BGProtection_Proc(
4728 IN PRTMP_ADAPTER pAd,
4731 INT Set_TxPreamble_Proc(
4732 IN PRTMP_ADAPTER pAd,
4735 INT Set_RTSThreshold_Proc(
4736 IN PRTMP_ADAPTER pAd,
4739 INT Set_FragThreshold_Proc(
4740 IN PRTMP_ADAPTER pAd,
4743 INT Set_TxBurst_Proc(
4744 IN PRTMP_ADAPTER pAd,
4747 #ifdef AGGREGATION_SUPPORT
4748 INT Set_PktAggregate_Proc(
4749 IN PRTMP_ADAPTER pAd,
4751 #endif // AGGREGATION_SUPPORT //
4753 INT Set_IEEE80211H_Proc(
4754 IN PRTMP_ADAPTER pAd,
4759 IN PRTMP_ADAPTER pAd,
4763 INT Show_DescInfo_Proc(
4764 IN PRTMP_ADAPTER pAd,
4767 INT Set_ResetStatCounter_Proc(
4768 IN PRTMP_ADAPTER pAd,
4771 INT Set_BASetup_Proc(
4772 IN PRTMP_ADAPTER pAd,
4775 INT Set_BADecline_Proc(
4776 IN PRTMP_ADAPTER pAd,
4779 INT Set_BAOriTearDown_Proc(
4780 IN PRTMP_ADAPTER pAd,
4783 INT Set_BARecTearDown_Proc(
4784 IN PRTMP_ADAPTER pAd,
4788 IN PRTMP_ADAPTER pAd,
4792 IN PRTMP_ADAPTER pAd,
4796 IN PRTMP_ADAPTER pAd,
4799 INT Set_HtOpMode_Proc(
4800 IN PRTMP_ADAPTER pAd,
4803 INT Set_HtStbc_Proc(
4804 IN PRTMP_ADAPTER pAd,
4808 IN PRTMP_ADAPTER pAd,
4811 INT Set_HtExtcha_Proc(
4812 IN PRTMP_ADAPTER pAd,
4815 INT Set_HtMpduDensity_Proc(
4816 IN PRTMP_ADAPTER pAd,
4819 INT Set_HtBaWinSize_Proc(
4820 IN PRTMP_ADAPTER pAd,
4824 IN PRTMP_ADAPTER pAd,
4827 INT Set_HtLinkAdapt_Proc(
4828 IN PRTMP_ADAPTER pAd,
4831 INT Set_HtAmsdu_Proc(
4832 IN PRTMP_ADAPTER pAd,
4835 INT Set_HtAutoBa_Proc(
4836 IN PRTMP_ADAPTER pAd,
4839 INT Set_HtProtect_Proc(
4840 IN PRTMP_ADAPTER pAd,
4843 INT Set_HtMimoPs_Proc(
4844 IN PRTMP_ADAPTER pAd,
4848 INT Set_ForceShortGI_Proc(
4849 IN PRTMP_ADAPTER pAd,
4852 INT Set_ForceGF_Proc(
4853 IN PRTMP_ADAPTER pAd,
4857 IN PRTMP_ADAPTER pAd);
4859 INT Set_SendPSMPAction_Proc(
4860 IN PRTMP_ADAPTER pAd,
4863 INT Set_HtMIMOPSmode_Proc(
4864 IN PRTMP_ADAPTER pAd,
4868 INT Set_HtTxBASize_Proc(
4869 IN PRTMP_ADAPTER pAd,
4872 INT Set_HtDisallowTKIP_Proc(
4873 IN PRTMP_ADAPTER pAd,
4876 INT WpaCheckEapCode(
4877 IN PRTMP_ADAPTER pAd,
4882 VOID WpaSendMicFailureToWpaSupplicant(
4883 IN PRTMP_ADAPTER pAd,
4884 IN BOOLEAN bUnicast);
4886 int wext_notify_event_assoc(
4887 IN RTMP_ADAPTER *pAd);
4889 BOOLEAN STARxDoneInterruptHandle(
4890 IN PRTMP_ADAPTER pAd,
4893 // AMPDU packet indication
4894 VOID Indicate_AMPDU_Packet(
4895 IN PRTMP_ADAPTER pAd,
4897 IN UCHAR FromWhichBSSID);
4899 // AMSDU packet indication
4900 VOID Indicate_AMSDU_Packet(
4901 IN PRTMP_ADAPTER pAd,
4903 IN UCHAR FromWhichBSSID);
4905 // Normal legacy Rx packet indication
4906 VOID Indicate_Legacy_Packet(
4907 IN PRTMP_ADAPTER pAd,
4909 IN UCHAR FromWhichBSSID);
4911 VOID Indicate_EAPOL_Packet(
4912 IN PRTMP_ADAPTER pAd,
4914 IN UCHAR FromWhichBSSID);
4916 void update_os_packet_info(
4917 IN PRTMP_ADAPTER pAd,
4919 IN UCHAR FromWhichBSSID);
4921 void wlan_802_11_to_802_3_packet(
4922 IN PRTMP_ADAPTER pAd,
4924 IN PUCHAR pHeader802_3,
4925 IN UCHAR FromWhichBSSID);
4927 // remove LLC and get 802_3 Header
4928 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
4930 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
4932 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
4934 _pDA = _pRxBlk->pHeader->Addr3; \
4935 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
4939 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
4941 _pDA = _pRxBlk->pHeader->Addr1; \
4942 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
4943 _pSA = _pRxBlk->pHeader->Addr2; \
4945 _pSA = _pRxBlk->pHeader->Addr3; \
4949 _pDA = _pRxBlk->pHeader->Addr1; \
4950 _pSA = _pRxBlk->pHeader->Addr2; \
4954 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
4955 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
4958 VOID Sta_Announce_or_Forward_802_3_Packet(
4959 IN PRTMP_ADAPTER pAd,
4960 IN PNDIS_PACKET pPacket,
4961 IN UCHAR FromWhichBSSID);
4963 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
4964 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
4965 //announce_802_3_packet(_pAd, _pPacket);
4967 PNDIS_PACKET DuplicatePacket(
4968 IN PRTMP_ADAPTER pAd,
4969 IN PNDIS_PACKET pPacket,
4970 IN UCHAR FromWhichBSSID);
4973 PNDIS_PACKET ClonePacket(
4974 IN PRTMP_ADAPTER pAd,
4975 IN PNDIS_PACKET pPacket,
4980 // Normal, AMPDU or AMSDU
4981 VOID CmmRxnonRalinkFrameIndicate(
4982 IN PRTMP_ADAPTER pAd,
4984 IN UCHAR FromWhichBSSID);
4986 VOID CmmRxRalinkFrameIndicate(
4987 IN PRTMP_ADAPTER pAd,
4988 IN MAC_TABLE_ENTRY *pEntry,
4990 IN UCHAR FromWhichBSSID);
4992 VOID Update_Rssi_Sample(
4993 IN PRTMP_ADAPTER pAd,
4994 IN RSSI_SAMPLE *pRssi,
4995 IN PRXWI_STRUC pRxWI);
4997 PNDIS_PACKET GetPacketFromRxRing(
4998 IN PRTMP_ADAPTER pAd,
4999 OUT PRT28XX_RXD_STRUC pSaveRxD,
5000 OUT BOOLEAN *pbReschedule,
5001 IN OUT UINT32 *pRxPending);
5003 PNDIS_PACKET RTMPDeFragmentDataFrame(
5004 IN PRTMP_ADAPTER pAd,
5007 ////////////////////////////////////////
5009 VOID RTMPIoctlGetSiteSurvey(
5010 IN PRTMP_ADAPTER pAdapter,
5011 IN struct iwreq *wrq);
5020 DIDmsg_lnxind_wlansniffrm = 0x00000044,
5021 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
5022 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
5023 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
5024 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
5025 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
5026 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
5027 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
5028 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
5029 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
5030 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
5033 P80211ENUM_msgitem_status_no_value = 0x00
5036 P80211ENUM_truth_false = 0x00,
5037 P80211ENUM_truth_true = 0x01
5040 /* Definition from madwifi */
5046 } p80211item_uint32_t;
5051 #define WLAN_DEVNAMELEN_MAX 16
5052 UINT8 devname[WLAN_DEVNAMELEN_MAX];
5053 p80211item_uint32_t hosttime;
5054 p80211item_uint32_t mactime;
5055 p80211item_uint32_t channel;
5056 p80211item_uint32_t rssi;
5057 p80211item_uint32_t sq;
5058 p80211item_uint32_t signal;
5059 p80211item_uint32_t noise;
5060 p80211item_uint32_t rate;
5061 p80211item_uint32_t istx;
5062 p80211item_uint32_t frmlen;
5063 } wlan_ng_prism2_header;
5065 /* The radio capture header precedes the 802.11 header. */
5066 typedef struct PACKED _ieee80211_radiotap_header {
5067 UINT8 it_version; /* Version 0. Only increases
5068 * for drastic changes,
5069 * introduction of compatible
5070 * new fields does not count.
5073 UINT16 it_len; /* length of the whole
5074 * header in bytes, including
5075 * it_version, it_pad,
5076 * it_len, and data fields.
5078 UINT32 it_present; /* A bitmap telling which
5079 * fields are present. Set bit 31
5080 * (0x80000000) to extend the
5081 * bitmap by another 32 bits.
5082 * Additional extensions are made
5083 * by setting bit 31.
5085 }ieee80211_radiotap_header ;
5087 enum ieee80211_radiotap_type {
5088 IEEE80211_RADIOTAP_TSFT = 0,
5089 IEEE80211_RADIOTAP_FLAGS = 1,
5090 IEEE80211_RADIOTAP_RATE = 2,
5091 IEEE80211_RADIOTAP_CHANNEL = 3,
5092 IEEE80211_RADIOTAP_FHSS = 4,
5093 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
5094 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
5095 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
5096 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
5097 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
5098 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
5099 IEEE80211_RADIOTAP_ANTENNA = 11,
5100 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
5101 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
5104 #define WLAN_RADIOTAP_PRESENT ( \
5105 (1 << IEEE80211_RADIOTAP_TSFT) | \
5106 (1 << IEEE80211_RADIOTAP_FLAGS) | \
5107 (1 << IEEE80211_RADIOTAP_RATE) | \
5110 typedef struct _wlan_radiotap_header {
5111 ieee80211_radiotap_header wt_ihdr;
5115 } wlan_radiotap_header;
5116 /* Definition from madwifi */
5118 void send_monitor_packets(
5119 IN PRTMP_ADAPTER pAd,
5123 VOID RTMPSetDesiredRates(
5124 IN PRTMP_ADAPTER pAdapter,
5127 INT Set_FixedTxMode_Proc(
5128 IN PRTMP_ADAPTER pAd,
5132 INT Set_LongRetryLimit_Proc(
5133 IN PRTMP_ADAPTER pAdapter,
5136 INT Set_ShortRetryLimit_Proc(
5137 IN PRTMP_ADAPTER pAdapter,
5140 BOOLEAN RT28XXChipsetCheck(
5144 VOID RT28XXDMADisable(
5145 IN RTMP_ADAPTER *pAd);
5147 VOID RT28XXDMAEnable(
5148 IN RTMP_ADAPTER *pAd);
5150 VOID RT28xx_UpdateBeaconToAsic(
5151 IN RTMP_ADAPTER * pAd,
5154 IN ULONG UpdatePos);
5157 IN PRTMP_ADAPTER pAd,
5158 IN PSTRING pDefaultMac,
5159 IN PSTRING pHostName);
5161 NDIS_STATUS RtmpNetTaskInit(
5162 IN RTMP_ADAPTER *pAd);
5164 VOID RtmpNetTaskExit(
5165 IN PRTMP_ADAPTER pAd);
5167 NDIS_STATUS RtmpMgmtTaskInit(
5168 IN RTMP_ADAPTER *pAd);
5170 VOID RtmpMgmtTaskExit(
5171 IN RTMP_ADAPTER *pAd);
5173 void tbtt_tasklet(unsigned long data);
5176 PNET_DEV RtmpPhyNetDevInit(
5177 IN RTMP_ADAPTER *pAd,
5178 IN RTMP_OS_NETDEV_OP_HOOK *pNetHook);
5180 BOOLEAN RtmpPhyNetDevExit(
5181 IN RTMP_ADAPTER *pAd,
5182 IN PNET_DEV net_dev);
5184 INT RtmpRaDevCtrlInit(
5185 IN RTMP_ADAPTER *pAd,
5186 IN RTMP_INF_TYPE infType);
5188 BOOLEAN RtmpRaDevCtrlExit(
5189 IN RTMP_ADAPTER *pAd);
5194 // Function Prototype in cmm_data_pci.c
5196 USHORT RtmpPCI_WriteTxResource(
5197 IN PRTMP_ADAPTER pAd,
5200 OUT USHORT *FreeNumber);
5202 USHORT RtmpPCI_WriteSingleTxResource(
5203 IN PRTMP_ADAPTER pAd,
5206 OUT USHORT *FreeNumber);
5208 USHORT RtmpPCI_WriteMultiTxResource(
5209 IN PRTMP_ADAPTER pAd,
5212 OUT USHORT *FreeNumber);
5214 USHORT RtmpPCI_WriteFragTxResource(
5215 IN PRTMP_ADAPTER pAd,
5218 OUT USHORT *FreeNumber);
5220 USHORT RtmpPCI_WriteSubTxResource(
5221 IN PRTMP_ADAPTER pAd,
5224 OUT USHORT *FreeNumber);
5226 VOID RtmpPCI_FinalWriteTxResource(
5227 IN PRTMP_ADAPTER pAd,
5229 IN USHORT totalMPDUSize,
5230 IN USHORT FirstTxIdx);
5232 VOID RtmpPCIDataLastTxIdx(
5233 IN PRTMP_ADAPTER pAd,
5235 IN USHORT LastTxIdx);
5237 VOID RtmpPCIDataKickOut(
5238 IN PRTMP_ADAPTER pAd,
5243 int RtmpPCIMgmtKickOut(
5244 IN RTMP_ADAPTER *pAd,
5246 IN PNDIS_PACKET pPacket,
5247 IN PUCHAR pSrcBufVA,
5251 NDIS_STATUS RTMPCheckRxError(
5252 IN PRTMP_ADAPTER pAd,
5253 IN PHEADER_802_11 pHeader,
5254 IN PRXWI_STRUC pRxWI,
5255 IN PRT28XX_RXD_STRUC pRxD);
5257 BOOLEAN RT28xxPciAsicRadioOff(
5258 IN PRTMP_ADAPTER pAd,
5260 IN USHORT TbttNumToNextWakeUp);
5262 BOOLEAN RT28xxPciAsicRadioOn(
5263 IN PRTMP_ADAPTER pAd,
5266 VOID RTMPInitPCIeLinkCtrlValue(
5267 IN PRTMP_ADAPTER pAd);
5269 VOID RTMPFindHostPCIDev(
5270 IN PRTMP_ADAPTER pAd);
5272 VOID RTMPPCIeLinkCtrlValueRestore(
5273 IN PRTMP_ADAPTER pAd,
5276 VOID RTMPPCIeLinkCtrlSetting(
5277 IN PRTMP_ADAPTER pAd,
5280 VOID RTMPrt3xSetPCIePowerLinkCtrl(
5281 IN PRTMP_ADAPTER pAd);
5283 VOID PsPollWakeExec(
5284 IN PVOID SystemSpecific1,
5285 IN PVOID FunctionContext,
5286 IN PVOID SystemSpecific2,
5287 IN PVOID SystemSpecific3);
5290 IN PVOID SystemSpecific1,
5291 IN PVOID FunctionContext,
5292 IN PVOID SystemSpecific2,
5293 IN PVOID SystemSpecific3);
5295 VOID RT28xxPciStaAsicForceWakeup(
5296 IN PRTMP_ADAPTER pAd,
5297 IN BOOLEAN bFromTx);
5299 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
5300 IN PRTMP_ADAPTER pAd,
5301 IN USHORT TbttNumToNextWakeUp);
5304 VOID RT28xxPciMlmeRadioOn(
5305 IN PRTMP_ADAPTER pAd);
5307 VOID RT28xxPciMlmeRadioOFF(
5308 IN PRTMP_ADAPTER pAd);
5309 #endif // RTMP_MAC_PCI //
5313 // Function Prototype in rtusb_bulk.c
5315 VOID RTUSBInitTxDesc(
5316 IN PRTMP_ADAPTER pAd,
5317 IN PTX_CONTEXT pTxContext,
5318 IN UCHAR BulkOutPipeId,
5319 IN usb_complete_t Func);
5321 VOID RTUSBInitHTTxDesc(
5322 IN PRTMP_ADAPTER pAd,
5323 IN PHT_TX_CONTEXT pTxContext,
5324 IN UCHAR BulkOutPipeId,
5325 IN ULONG BulkOutSize,
5326 IN usb_complete_t Func);
5328 VOID RTUSBInitRxDesc(
5329 IN PRTMP_ADAPTER pAd,
5330 IN PRX_CONTEXT pRxContext);
5332 VOID RTUSBCleanUpDataBulkOutQueue(
5333 IN PRTMP_ADAPTER pAd);
5335 VOID RTUSBCancelPendingBulkOutIRP(
5336 IN PRTMP_ADAPTER pAd);
5338 VOID RTUSBBulkOutDataPacket(
5339 IN PRTMP_ADAPTER pAd,
5340 IN UCHAR BulkOutPipeId,
5343 VOID RTUSBBulkOutNullFrame(
5344 IN PRTMP_ADAPTER pAd);
5346 VOID RTUSBBulkOutRTSFrame(
5347 IN PRTMP_ADAPTER pAd);
5349 VOID RTUSBCancelPendingBulkInIRP(
5350 IN PRTMP_ADAPTER pAd);
5352 VOID RTUSBCancelPendingIRPs(
5353 IN PRTMP_ADAPTER pAd);
5355 VOID RTUSBBulkOutMLMEPacket(
5356 IN PRTMP_ADAPTER pAd,
5359 VOID RTUSBBulkOutPsPoll(
5360 IN PRTMP_ADAPTER pAd);
5362 VOID RTUSBCleanUpMLMEBulkOutQueue(
5363 IN PRTMP_ADAPTER pAd);
5365 VOID RTUSBKickBulkOut(
5366 IN PRTMP_ADAPTER pAd);
5368 VOID RTUSBBulkReceive(
5369 IN PRTMP_ADAPTER pAd);
5372 IN RTMP_ADAPTER *pAd);
5374 VOID RTUSBInitRxDesc(
5375 IN PRTMP_ADAPTER pAd,
5376 IN PRX_CONTEXT pRxContext);
5378 VOID RTUSBBulkRxHandle(
5379 IN unsigned long data);
5382 // Function Prototype in rtusb_io.c
5384 NTSTATUS RTUSBMultiRead(
5385 IN PRTMP_ADAPTER pAd,
5390 NTSTATUS RTUSBMultiWrite(
5391 IN PRTMP_ADAPTER pAd,
5396 NTSTATUS RTUSBMultiWrite_OneByte(
5397 IN PRTMP_ADAPTER pAd,
5401 NTSTATUS RTUSBReadBBPRegister(
5402 IN PRTMP_ADAPTER pAd,
5406 NTSTATUS RTUSBWriteBBPRegister(
5407 IN PRTMP_ADAPTER pAd,
5411 NTSTATUS RTUSBWriteRFRegister(
5412 IN PRTMP_ADAPTER pAd,
5415 NTSTATUS RTUSB_VendorRequest(
5416 IN PRTMP_ADAPTER pAd,
5417 IN UINT32 TransferFlags,
5418 IN UCHAR ReservedBits,
5422 IN PVOID TransferBuffer,
5423 IN UINT32 TransferBufferLength);
5425 NTSTATUS RTUSBReadEEPROM(
5426 IN PRTMP_ADAPTER pAd,
5431 NTSTATUS RTUSBWriteEEPROM(
5432 IN PRTMP_ADAPTER pAd,
5437 VOID RTUSBPutToSleep(
5438 IN PRTMP_ADAPTER pAd);
5440 NTSTATUS RTUSBWakeUp(
5441 IN PRTMP_ADAPTER pAd);
5443 VOID RTUSBInitializeCmdQ(
5446 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
5447 IN PRTMP_ADAPTER pAd,
5449 IN BOOLEAN SetInformation,
5450 IN PVOID pInformationBuffer,
5451 IN UINT32 InformationBufferLength);
5453 NDIS_STATUS RTUSBEnqueueInternalCmd(
5454 IN PRTMP_ADAPTER pAd,
5456 IN PVOID pInformationBuffer,
5457 IN UINT32 InformationBufferLength);
5459 VOID RTUSBDequeueCmd(
5461 OUT PCmdQElmt *pcmdqelmt);
5464 IN OUT PVOID Context);
5466 VOID RTUSBBssBeaconExit(
5467 IN RTMP_ADAPTER *pAd);
5469 VOID RTUSBBssBeaconStop(
5470 IN RTMP_ADAPTER *pAd);
5472 VOID RTUSBBssBeaconStart(
5473 IN RTMP_ADAPTER * pAd);
5475 VOID RTUSBBssBeaconInit(
5476 IN RTMP_ADAPTER *pAd);
5479 IN RTMP_ADAPTER *pAd);
5481 NTSTATUS RTUSBWriteMACRegister(
5482 IN PRTMP_ADAPTER pAd,
5486 NTSTATUS RTUSBReadMACRegister(
5487 IN PRTMP_ADAPTER pAd,
5489 OUT PUINT32 pValue);
5491 NTSTATUS RTUSBSingleWrite(
5492 IN RTMP_ADAPTER *pAd,
5496 NTSTATUS RTUSBFirmwareWrite(
5497 IN PRTMP_ADAPTER pAd,
5501 NTSTATUS RTUSBVenderReset(
5502 IN PRTMP_ADAPTER pAd);
5504 NDIS_STATUS RTUSBSetHardWareRegister(
5505 IN PRTMP_ADAPTER pAdapter,
5508 NDIS_STATUS RTUSBQueryHardWareRegister(
5509 IN PRTMP_ADAPTER pAdapter,
5513 IN PRTMP_ADAPTER pAd);
5515 NDIS_STATUS RTUSBWriteHWMACAddress(
5516 IN PRTMP_ADAPTER pAdapter);
5518 VOID MacTableInitialize(
5519 IN PRTMP_ADAPTER pAd);
5522 IN PRTMP_ADAPTER pAd,
5525 NDIS_STATUS RTMPWPAAddKeyProc(
5526 IN PRTMP_ADAPTER pAd,
5529 VOID AsicRxAntEvalAction(
5530 IN PRTMP_ADAPTER pAd);
5533 IN PRTMP_ADAPTER pAd,
5534 IN PUCHAR pHeader802_3,
5538 OUT PNDIS_PACKET *ppPacket);
5540 UINT deaggregate_AMSDU_announce(
5541 IN PRTMP_ADAPTER pAd,
5542 PNDIS_PACKET pPacket,
5546 NDIS_STATUS RTMPCheckRxError(
5547 IN PRTMP_ADAPTER pAd,
5548 IN PHEADER_802_11 pHeader,
5549 IN PRXWI_STRUC pRxWI,
5550 IN PRT28XX_RXD_STRUC pRxINFO);
5552 VOID RTUSBMlmeHardTransmit(
5553 IN PRTMP_ADAPTER pAd,
5554 IN PMGMT_STRUC pMgmt);
5560 // Function Prototype in rtusb_data.c
5562 NDIS_STATUS RTUSBFreeDescriptorRequest(
5563 IN PRTMP_ADAPTER pAd,
5564 IN UCHAR BulkOutPipeId,
5565 IN UINT32 NumberRequired);
5568 BOOLEAN RTUSBNeedQueueBackForAgg(
5569 IN RTMP_ADAPTER *pAd,
5570 IN UCHAR BulkOutPipeId);
5573 VOID RTMPWriteTxInfo(
5574 IN PRTMP_ADAPTER pAd,
5575 IN PTXINFO_STRUC pTxInfo,
5576 IN USHORT USBDMApktLen,
5583 // Function Prototype in cmm_data_usb.c
5585 USHORT RtmpUSB_WriteSubTxResource(
5586 IN PRTMP_ADAPTER pAd,
5589 OUT USHORT *FreeNumber);
5591 USHORT RtmpUSB_WriteSingleTxResource(
5592 IN PRTMP_ADAPTER pAd,
5595 OUT USHORT *FreeNumber);
5597 USHORT RtmpUSB_WriteFragTxResource(
5598 IN PRTMP_ADAPTER pAd,
5601 OUT USHORT *FreeNumber);
5603 USHORT RtmpUSB_WriteMultiTxResource(
5604 IN PRTMP_ADAPTER pAd,
5607 OUT USHORT *FreeNumber);
5609 VOID RtmpUSB_FinalWriteTxResource(
5610 IN PRTMP_ADAPTER pAd,
5612 IN USHORT totalMPDUSize,
5615 VOID RtmpUSBDataLastTxIdx(
5616 IN PRTMP_ADAPTER pAd,
5620 VOID RtmpUSBDataKickOut(
5621 IN PRTMP_ADAPTER pAd,
5626 int RtmpUSBMgmtKickOut(
5627 IN RTMP_ADAPTER *pAd,
5629 IN PNDIS_PACKET pPacket,
5630 IN PUCHAR pSrcBufVA,
5633 VOID RtmpUSBNullFrameKickOut(
5634 IN RTMP_ADAPTER *pAd,
5636 IN UCHAR *pNullFrame,
5637 IN UINT32 frameLen);
5639 VOID RtmpUsbStaAsicForceWakeupTimeout(
5640 IN PVOID SystemSpecific1,
5641 IN PVOID FunctionContext,
5642 IN PVOID SystemSpecific2,
5643 IN PVOID SystemSpecific3);
5645 VOID RT28xxUsbStaAsicForceWakeup(
5646 IN PRTMP_ADAPTER pAd,
5647 IN BOOLEAN bFromTx);
5649 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
5650 IN PRTMP_ADAPTER pAd,
5651 IN USHORT TbttNumToNextWakeUp);
5653 VOID RT28xxUsbMlmeRadioOn(
5654 IN PRTMP_ADAPTER pAd);
5656 VOID RT28xxUsbMlmeRadioOFF(
5657 IN PRTMP_ADAPTER pAd);
5658 #endif // RTMP_MAC_USB //
5660 VOID AsicTurnOffRFClk(
5661 IN PRTMP_ADAPTER pAd,
5664 VOID AsicTurnOnRFClk(
5665 IN PRTMP_ADAPTER pAd,
5670 #ifdef RTMP_TIMER_TASK_SUPPORT
5671 INT RtmpTimerQThread(
5672 IN OUT PVOID Context);
5674 RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(
5675 IN RTMP_ADAPTER *pAd,
5676 IN RALINK_TIMER_STRUCT *pTimer);
5678 BOOLEAN RtmpTimerQRemove(
5679 IN RTMP_ADAPTER *pAd,
5680 IN RALINK_TIMER_STRUCT *pTimer);
5682 void RtmpTimerQExit(
5683 IN RTMP_ADAPTER *pAd);
5685 void RtmpTimerQInit(
5686 IN RTMP_ADAPTER *pAd);
5687 #endif // RTMP_TIMER_TASK_SUPPORT //
5689 ///////////////////////////////////////
5690 INT RTMPShowCfgValue(
5691 IN PRTMP_ADAPTER pAd,
5695 PSTRING RTMPGetRalinkAuthModeStr(
5696 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
5698 PSTRING RTMPGetRalinkEncryModeStr(
5699 IN USHORT encryMode);
5700 //////////////////////////////////////
5702 VOID AsicStaBbpTuning(
5703 IN PRTMP_ADAPTER pAd);
5705 BOOLEAN StaAddMacTableEntry(
5706 IN PRTMP_ADAPTER pAd,
5707 IN PMAC_TABLE_ENTRY pEntry,
5708 IN UCHAR MaxSupportedRateIn500Kbps,
5709 IN HT_CAPABILITY_IE *pHtCapability,
5710 IN UCHAR HtCapabilityLen,
5711 IN ADD_HT_INFO_IE *pAddHtInfo,
5712 IN UCHAR AddHtInfoLen,
5713 IN USHORT CapabilityInfo);
5716 BOOLEAN AUTH_ReqSend(
5717 IN PRTMP_ADAPTER pAd,
5718 IN PMLME_QUEUE_ELEM pElem,
5719 IN PRALINK_TIMER_STRUCT pAuthTimer,
5722 IN PUCHAR pNewElement,
5723 IN ULONG ElementLen);
5725 void RTMP_IndicateMediaState(
5726 IN PRTMP_ADAPTER pAd);
5728 VOID ReSyncBeaconTime(
5729 IN PRTMP_ADAPTER pAd);
5731 VOID RTMPSetAGCInitValue(
5732 IN PRTMP_ADAPTER pAd,
5733 IN UCHAR BandWidth);
5735 int rt28xx_close(IN PNET_DEV dev);
5736 int rt28xx_open(IN PNET_DEV dev);
5739 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
5740 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
5741 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
5745 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
5747 if (VIRTUAL_IF_NUM(pAd) == 0)
5749 if (rt28xx_open(pAd->net_dev) != 0)
5751 DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n"));
5758 VIRTUAL_IF_INC(pAd);
5762 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
5764 VIRTUAL_IF_DEC(pAd);
5765 if (VIRTUAL_IF_NUM(pAd) == 0)
5766 rt28xx_close(pAd->net_dev);
5773 OS Related funciton prototype definitions.
5774 TODO: Maybe we need to move these function prototypes to other proper place.
5776 int RtmpOSWrielessEventSend(
5777 IN RTMP_ADAPTER *pAd,
5778 IN UINT32 eventType,
5784 int RtmpOSNetDevAddrSet(
5785 IN PNET_DEV pNetDev,
5786 IN PUCHAR pMacAddr);
5788 int RtmpOSNetDevAttach(
5789 IN PNET_DEV pNetDev,
5790 IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook);
5792 void RtmpOSNetDevClose(
5793 IN PNET_DEV pNetDev);
5795 void RtmpOSNetDevDetach(
5796 IN PNET_DEV pNetDev);
5798 INT RtmpOSNetDevAlloc(
5799 IN PNET_DEV *pNewNetDev,
5800 IN UINT32 privDataSize);
5802 void RtmpOSNetDevFree(
5803 IN PNET_DEV pNetDev);
5805 PNET_DEV RtmpOSNetDevGetByName(
5806 IN PNET_DEV pNetDev,
5807 IN PSTRING pDevName);
5809 void RtmpOSNetDeviceRefPut(
5810 IN PNET_DEV pNetDev);
5812 PNET_DEV RtmpOSNetDevCreate(
5813 IN RTMP_ADAPTER *pAd,
5817 IN PSTRING pNamePrefix);
5820 Task operation related function prototypes
5822 void RtmpOSTaskCustomize(
5823 IN RTMP_OS_TASK *pTask);
5825 INT RtmpOSTaskNotifyToExit(
5826 IN RTMP_OS_TASK *pTask);
5828 NDIS_STATUS RtmpOSTaskKill(
5829 IN RTMP_OS_TASK *pTask);
5831 NDIS_STATUS RtmpOSTaskInit(
5832 IN RTMP_OS_TASK *pTask,
5836 NDIS_STATUS RtmpOSTaskAttach(
5837 IN RTMP_OS_TASK *pTask,
5838 IN int (*fn)(void *),
5843 File operation related function prototypes
5845 RTMP_OS_FD RtmpOSFileOpen(
5850 int RtmpOSFileClose(
5851 IN RTMP_OS_FD osfd);
5853 void RtmpOSFileSeek(
5862 int RtmpOSFileWrite(
5867 void RtmpOSFSInfoChange(
5868 IN RTMP_OS_FS_INFO *pOSFSInfo,
5872 #endif // __RTMP_H__