2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 Miniport generic portion header file
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
43 #include "spectrum_def.h"
45 #include "rtmp_dot11.h"
47 #undef AP_WSC_INCLUDED
48 #undef STA_WSC_INCLUDED
53 #if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED)
57 #include "rtmp_chip.h"
61 typedef struct _RTMP_ADAPTER RTMP_ADAPTER;
62 typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER;
64 typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP;
69 //#define DBG_DIAGNOSE 1
72 //+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function
73 #define MAX_DATAMM_RETRY 3
74 #define MGMT_USE_QUEUE_FLAG 0x80
75 //---Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function
77 #define MAXSEQ (0xFFF)
79 extern unsigned char SNAP_AIRONET[];
80 extern unsigned char CISCO_OUI[];
81 extern UCHAR BaSizeArray[4];
83 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
84 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
85 extern ULONG BIT32[32];
87 extern char* CipherName[];
88 extern char* MCSToMbps[];
89 extern UCHAR RxwiMCSToOfdmRate[12];
90 extern UCHAR SNAP_802_1H[6];
91 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
92 extern UCHAR SNAP_AIRONET[8];
93 extern UCHAR CKIP_LLC_SNAP[8];
94 extern UCHAR EAPOL_LLC_SNAP[8];
95 extern UCHAR EAPOL[2];
97 extern UCHAR APPLE_TALK[2];
98 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
99 extern UCHAR OfdmRateToRxwiMCS[];
100 extern UCHAR OfdmSignalToRateId[16] ;
101 extern UCHAR default_cwmin[4];
102 extern UCHAR default_cwmax[4];
103 extern UCHAR default_sta_aifsn[4];
104 extern UCHAR MapUserPriorityToAccessCategory[8];
106 extern USHORT RateUpPER[];
107 extern USHORT RateDownPER[];
108 extern UCHAR Phy11BNextRateDownward[];
109 extern UCHAR Phy11BNextRateUpward[];
110 extern UCHAR Phy11BGNextRateDownward[];
111 extern UCHAR Phy11BGNextRateUpward[];
112 extern UCHAR Phy11ANextRateDownward[];
113 extern UCHAR Phy11ANextRateUpward[];
114 extern CHAR RssiSafeLevelForTxRate[];
115 extern UCHAR RateIdToMbps[];
116 extern USHORT RateIdTo500Kbps[];
118 extern UCHAR CipherSuiteWpaNoneTkip[];
119 extern UCHAR CipherSuiteWpaNoneTkipLen;
121 extern UCHAR CipherSuiteWpaNoneAes[];
122 extern UCHAR CipherSuiteWpaNoneAesLen;
125 extern UCHAR SupRateIe;
126 extern UCHAR ExtRateIe;
128 extern UCHAR HtCapIe;
129 extern UCHAR AddHtInfoIe;
130 extern UCHAR NewExtChanIe;
141 extern UCHAR WPA_OUI[];
142 extern UCHAR RSN_OUI[];
143 extern UCHAR WAPI_OUI[];
144 extern UCHAR WME_INFO_ELEM[];
145 extern UCHAR WME_PARM_ELEM[];
146 extern UCHAR Ccx2QosInfo[];
147 extern UCHAR Ccx2IeInfo[];
148 extern UCHAR RALINK_OUI[];
149 extern UCHAR PowerConstraintIE[];
152 extern UCHAR RateSwitchTable[];
153 extern UCHAR RateSwitchTable11B[];
154 extern UCHAR RateSwitchTable11G[];
155 extern UCHAR RateSwitchTable11BG[];
157 extern UCHAR RateSwitchTable11BGN1S[];
158 extern UCHAR RateSwitchTable11BGN2S[];
159 extern UCHAR RateSwitchTable11BGN2SForABand[];
160 extern UCHAR RateSwitchTable11N1S[];
161 extern UCHAR RateSwitchTable11N2S[];
162 extern UCHAR RateSwitchTable11N2SForABand[];
164 extern UCHAR PRE_N_HT_OUI[];
169 typedef struct _RSSI_SAMPLE {
170 CHAR LastRssi0; // last received RSSI
171 CHAR LastRssi1; // last received RSSI
172 CHAR LastRssi2; // last received RSSI
182 // Queue structure and macros
184 typedef struct _QUEUE_ENTRY {
185 struct _QUEUE_ENTRY *Next;
186 } QUEUE_ENTRY, *PQUEUE_ENTRY;
189 typedef struct _QUEUE_HEADER {
193 } QUEUE_HEADER, *PQUEUE_HEADER;
195 #define InitializeQueueHeader(QueueHeader) \
197 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
198 (QueueHeader)->Number = 0; \
201 #define RemoveHeadQueue(QueueHeader) \
202 (QueueHeader)->Head; \
204 PQUEUE_ENTRY pNext; \
205 if ((QueueHeader)->Head != NULL) \
207 pNext = (QueueHeader)->Head->Next; \
208 (QueueHeader)->Head->Next = NULL; \
209 (QueueHeader)->Head = pNext; \
211 (QueueHeader)->Tail = NULL; \
212 (QueueHeader)->Number--; \
216 #define InsertHeadQueue(QueueHeader, QueueEntry) \
218 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
219 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
220 if ((QueueHeader)->Tail == NULL) \
221 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
222 (QueueHeader)->Number++; \
225 #define InsertTailQueue(QueueHeader, QueueEntry) \
227 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
228 if ((QueueHeader)->Tail) \
229 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
231 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
232 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
233 (QueueHeader)->Number++; \
236 #define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry) \
238 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
239 if ((QueueHeader)->Tail) \
240 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
242 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
243 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
244 (QueueHeader)->Number++; \
250 // Macros for flag and ref count operations
252 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
253 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
254 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
255 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
256 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
257 // Macro for power save flag.
258 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
259 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
260 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
261 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
262 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
264 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
265 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
266 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
268 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
269 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
270 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
272 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
273 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
274 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
276 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
277 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
278 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
279 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
281 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
283 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
284 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
287 #define INC_RING_INDEX(_idx, _RingSize) \
289 (_idx) = (_idx+1) % (_RingSize); \
293 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
294 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
296 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
297 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
298 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
299 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
300 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
301 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
302 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
303 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
304 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
305 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
306 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
307 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
310 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
312 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
313 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
314 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
318 // MACRO for 32-bit PCI register read / write
320 // Usage : RTMP_IO_READ32(
321 // PRTMP_ADAPTER pAd,
322 // ULONG Register_Offset,
326 // PRTMP_ADAPTER pAd,
327 // ULONG Register_Offset,
333 // Common fragment list structure - Identical to the scatter gather frag list structure
335 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
336 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
337 #define NIC_MAX_PHYS_BUF_COUNT 8
339 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
343 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
346 typedef struct _RTMP_SCATTER_GATHER_LIST {
347 ULONG NumberOfElements;
349 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
350 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
353 // Some utility macros
356 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
360 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
363 #define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))
365 #define INC_COUNTER64(Val) (Val.QuadPart++)
367 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
368 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
369 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
370 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
372 // Check LEAP & CCKM flags
373 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
374 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
376 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
377 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
379 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
381 _pExtraLlcSnapEncap = SNAP_802_1H; \
382 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
383 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
385 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
390 _pExtraLlcSnapEncap = NULL; \
394 // New Define for new Tx Path.
395 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
397 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
399 _pExtraLlcSnapEncap = SNAP_802_1H; \
400 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
401 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
403 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
408 _pExtraLlcSnapEncap = NULL; \
413 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
415 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
416 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
417 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
420 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
421 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
422 // else remove the LLC/SNAP field from the result Ethernet frame
423 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
425 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
426 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
427 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
431 _pRemovedLLCSNAP = NULL; \
432 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
433 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
435 PUCHAR pProto = _pData + 6; \
437 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
438 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
440 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
441 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
442 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
446 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
447 _pRemovedLLCSNAP = _pData; \
448 _DataSize -= LENGTH_802_1_H; \
449 _pData += LENGTH_802_1_H; \
454 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
455 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
456 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
461 // Enqueue this frame to MLME engine
462 // We need to enqueue the whole frame because MLME need to pass data type
463 // information from 802.11 header
465 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
467 UINT32 High32TSF, Low32TSF; \
468 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
469 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
470 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
472 #endif // RTMP_MAC_PCI //
474 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
476 UINT32 High32TSF=0, Low32TSF=0; \
477 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
479 #endif // RTMP_MAC_USB //
481 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
482 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
485 // Check if it is Japan W53(ch52,56,60,64) channel.
487 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
489 #define STA_EXTRA_SETTING(_pAd)
491 #define STA_PORT_SECURED(_pAd) \
494 (_pAd)->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
495 NdisAcquireSpinLock(&((_pAd)->MacTabLock)); \
496 (_pAd)->MacTab.Content[BSSID_WCID].PortSecured = (_pAd)->StaCfg.PortSecured; \
497 (_pAd)->MacTab.Content[BSSID_WCID].PrivacyFilter = Ndis802_11PrivFilterAcceptAll;\
498 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
499 RTMPCancelTimer(&((_pAd)->Mlme.LinkDownTimer), &Cancelled);\
500 STA_EXTRA_SETTING(_pAd); \
506 // Data buffer for DMA operation, the buffer must be contiguous physical memory
507 // Both DMA to / from CPU use the same structure.
509 typedef struct _RTMP_DMABUF
512 PVOID AllocVa; // TxBuf virtual address
513 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
514 } RTMP_DMABUF, *PRTMP_DMABUF;
518 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
519 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
520 // which won't be released, driver has to wait until upper layer return the packet
521 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
522 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
523 // which driver should ACK upper layer when the tx is physically done or failed.
525 typedef struct _RTMP_DMACB
527 ULONG AllocSize; // Control block size
528 PVOID AllocVa; // Control block virtual address
529 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
530 PNDIS_PACKET pNdisPacket;
531 PNDIS_PACKET pNextNdisPacket;
533 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
534 } RTMP_DMACB, *PRTMP_DMACB;
537 typedef struct _RTMP_TX_RING
539 RTMP_DMACB Cell[TX_RING_SIZE];
542 UINT32 TxSwFreeIdx; // software next free tx index
543 } RTMP_TX_RING, *PRTMP_TX_RING;
545 typedef struct _RTMP_RX_RING
547 RTMP_DMACB Cell[RX_RING_SIZE];
550 INT32 RxSwReadIdx; // software next read index
551 } RTMP_RX_RING, *PRTMP_RX_RING;
553 typedef struct _RTMP_MGMT_RING
555 RTMP_DMACB Cell[MGMT_RING_SIZE];
558 UINT32 TxSwFreeIdx; // software next free tx index
559 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
562 // Statistic counter structure
564 typedef struct _COUNTER_802_3
574 ULONG RcvAlignmentErrors;
576 ULONG MoreCollisions;
578 } COUNTER_802_3, *PCOUNTER_802_3;
580 typedef struct _COUNTER_802_11 {
582 LARGE_INTEGER LastTransmittedFragmentCount;
583 LARGE_INTEGER TransmittedFragmentCount;
584 LARGE_INTEGER MulticastTransmittedFrameCount;
585 LARGE_INTEGER FailedCount;
586 LARGE_INTEGER RetryCount;
587 LARGE_INTEGER MultipleRetryCount;
588 LARGE_INTEGER RTSSuccessCount;
589 LARGE_INTEGER RTSFailureCount;
590 LARGE_INTEGER ACKFailureCount;
591 LARGE_INTEGER FrameDuplicateCount;
592 LARGE_INTEGER ReceivedFragmentCount;
593 LARGE_INTEGER MulticastReceivedFrameCount;
594 LARGE_INTEGER FCSErrorCount;
595 } COUNTER_802_11, *PCOUNTER_802_11;
597 typedef struct _COUNTER_RALINK {
598 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
599 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
600 ULONG BeenDisassociatedCount;
601 ULONG BadCQIAutoRecoveryCount;
602 ULONG PoorCQIRoamingCount;
603 ULONG MgmtRingFullCount;
604 ULONG RxCountSinceLastNULL;
606 ULONG RxRingErrCount;
608 ULONG TxRingErrCount;
609 LARGE_INTEGER RealFcsErrCount;
610 ULONG PendingNdisPacketCount;
612 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
613 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
614 UINT32 OneSecTxDoneCount;
616 UINT32 OneSecTxAggregationCount;
617 UINT32 OneSecRxAggregationCount;
618 UINT32 OneSecReceivedByteCount;
619 UINT32 OneSecFrameDuplicateCount;
621 UINT32 OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
622 UINT32 OneSecTxNoRetryOkCount;
623 UINT32 OneSecTxRetryOkCount;
624 UINT32 OneSecTxFailCount;
625 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
626 UINT32 OneSecRxOkCnt; // RX without error
627 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
628 UINT32 OneSecRxFcsErrCnt; // CRC error
629 UINT32 OneSecBeaconSentCnt;
630 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
631 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
635 ULONG TxAgg1MPDUCount;
636 ULONG TxAgg2MPDUCount;
637 ULONG TxAgg3MPDUCount;
638 ULONG TxAgg4MPDUCount;
639 ULONG TxAgg5MPDUCount;
640 ULONG TxAgg6MPDUCount;
641 ULONG TxAgg7MPDUCount;
642 ULONG TxAgg8MPDUCount;
643 ULONG TxAgg9MPDUCount;
644 ULONG TxAgg10MPDUCount;
645 ULONG TxAgg11MPDUCount;
646 ULONG TxAgg12MPDUCount;
647 ULONG TxAgg13MPDUCount;
648 ULONG TxAgg14MPDUCount;
649 ULONG TxAgg15MPDUCount;
650 ULONG TxAgg16MPDUCount;
652 LARGE_INTEGER TransmittedOctetsInAMSDU;
653 LARGE_INTEGER TransmittedAMSDUCount;
654 LARGE_INTEGER ReceivedOctesInAMSDUCount;
655 LARGE_INTEGER ReceivedAMSDUCount;
656 LARGE_INTEGER TransmittedAMPDUCount;
657 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
658 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
659 LARGE_INTEGER MPDUInReceivedAMPDUCount;
660 } COUNTER_RALINK, *PCOUNTER_RALINK;
663 typedef struct _COUNTER_DRS {
664 // to record the each TX rate's quality. 0 is best, the bigger the worse.
665 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
666 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
667 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
668 ULONG CurrTxRateStableTime; // # of second in current TX rate
669 BOOLEAN fNoisyEnvironment;
670 BOOLEAN fLastSecAccordingRSSI;
671 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
672 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
674 } COUNTER_DRS, *PCOUNTER_DRS;
679 /***************************************************************************
680 * security key related data structure
681 **************************************************************************/
682 typedef struct _CIPHER_KEY {
683 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
684 UCHAR RxMic[8]; // make alignment
686 UCHAR TxTsc[6]; // 48bit TSC value
687 UCHAR RxTsc[6]; // 48bit TSC value
688 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
691 // Key length for each key, 0: entry is invalid
692 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
693 } CIPHER_KEY, *PCIPHER_KEY;
696 // structure to define WPA Group Key Rekey Interval
697 typedef struct PACKED _RT_802_11_WPA_REKEY {
698 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
699 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
700 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
703 /***************************************************************************
704 * RTUSB I/O related data structure
705 **************************************************************************/
706 typedef struct _RT_SET_ASIC_WCID {
707 ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
708 ULONG SetTid; // time-based: seconds, packet-based: kilo-packets
709 ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets
710 UCHAR Addr[MAC_ADDR_LEN]; // avoid in interrupt when write key
711 } RT_SET_ASIC_WCID,*PRT_SET_ASIC_WCID;
713 typedef struct _RT_SET_ASIC_WCID_ATTRI {
714 ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
715 ULONG Cipher; // ASIC Cipher definition
716 UCHAR Addr[ETH_LENGTH_OF_ADDRESS];
717 } RT_SET_ASIC_WCID_ATTRI,*PRT_SET_ASIC_WCID_ATTRI;
719 // for USB interface, avoid in interrupt when write key
720 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
722 USHORT MacTabMatchWCID; // ASIC
723 CIPHER_KEY CipherKey;
724 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
726 // Cipher suite type for mixed mode group cipher, P802.11i-2004
727 typedef enum _RT_802_11_CIPHER_SUITE_TYPE {
734 } RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE;
735 #endif // RTMP_MAC_USB //
738 UCHAR Addr[MAC_ADDR_LEN];
739 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
740 //00 02-Authentication timeout
741 //00 03-Challenge from AP failed
742 //00 04-Challenge to AP failed
744 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
748 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
749 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
754 typedef struct _CISCO_IAPP_CONTENT_
756 USHORT Length; //IAPP Length
757 UCHAR MessageType; //IAPP type
758 UCHAR FunctionCode; //IAPP function type
759 UCHAR DestinaionMAC[MAC_ADDR_LEN];
760 UCHAR SourceMAC[MAC_ADDR_LEN];
761 USHORT Tag; //Tag(element IE) - Adjacent AP report
762 USHORT TagLength; //Length of element not including 4 byte header
763 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
764 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
767 UCHAR Ssid[MAX_LEN_OF_SSID];
768 USHORT Seconds; //Seconds that the client has been disassociated.
769 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
773 * Fragment Frame structure
775 typedef struct _FRAGMENT_FRAME {
776 PNDIS_PACKET pFragPacket;
780 ULONG Flags; // Some extra frame information. bit 0: LLC presented
781 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
785 // Packet information for NdisQueryPacket
787 typedef struct _PACKET_INFO {
788 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
789 UINT BufferCount ; // Number of Buffer descriptor chained
790 UINT TotalPacketLength ; // Self explained
791 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
792 } PACKET_INFO, *PPACKET_INFO;
796 // Arcfour Structure Added by PaulWu
798 typedef struct _ARCFOUR
803 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
807 // Tkip Key structure which RC4 key & MIC calculation
809 typedef struct _TKIP_KEY_INFO {
810 UINT nBytesInM; // # bytes in M for MICKEY
813 ULONG K0; // for MICKEY Low
814 ULONG K1; // for MICKEY Hig
815 ULONG L; // Current state for MICKEY
816 ULONG R; // Current state for MICKEY
817 ULONG M; // Message accumulator for MICKEY
820 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
823 // Private / Misc data, counters for driver internal use
825 typedef struct __PRIVATE_STRUC {
826 UINT SystemResetCnt; // System reset counter
827 UINT TxRingFullCnt; // Tx ring full occurrance number
828 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
829 // Variables for WEP encryption / decryption in rtmp_wep.c
831 ARCFOURCONTEXT WEPCONTEXT;
835 } PRIVATE_STRUC, *PPRIVATE_STRUC;
838 /***************************************************************************
839 * Channel and BBP related data structures
840 **************************************************************************/
841 // structure to tune BBP R66 (BBP TUNING)
842 typedef struct _BBP_R66_TUNING {
844 USHORT FalseCcaLowerThreshold; // default 100
845 USHORT FalseCcaUpperThreshold; // default 512
847 UCHAR R66CurrentValue;
848 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
849 } BBP_R66_TUNING, *PBBP_R66_TUNING;
851 // structure to store channel TX power
852 typedef struct _CHANNEL_TX_POWER {
853 USHORT RemainingTimeForUse; //unit: sec
859 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
861 // structure to store 802.11j channel TX power
862 typedef struct _CHANNEL_11J_TX_POWER {
864 UCHAR BW; // BW_10 or BW_20
867 USHORT RemainingTimeForUse; //unit: sec
868 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
870 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
871 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
872 UCHAR EvaluateStableCnt;
873 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
874 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
875 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
876 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
877 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
878 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
879 SHORT Pair1LastAvgRssi; //
880 SHORT Pair2LastAvgRssi; //
881 ULONG RcvPktNumWhenEvaluate;
882 BOOLEAN FirstPktArrivedWhenEvaluate;
883 RALINK_TIMER_STRUCT RxAntDiversityTimer;
884 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
887 /***************************************************************************
888 * structure for radar detection and channel switch
889 **************************************************************************/
890 typedef struct _RADAR_DETECT_STRUCT {
891 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
892 UCHAR CSCount; //Channel switch counter
893 UCHAR CSPeriod; //Channel switch period (beacon count)
894 UCHAR RDCount; //Radar detection counter
895 UCHAR RDMode; //Radar Detection mode
896 UCHAR RDDurRegion; //Radar detection duration region
903 ULONG InServiceMonitorCount; // unit: sec
904 UINT8 DfsSessionTime;
907 UINT8 LongPulseRadarTh;
908 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
910 typedef enum _ABGBAND_STATE_ {
917 // Power save method control
918 typedef union _PS_CONTROL {
920 ULONG EnablePSinIdle:1; // Enable radio off when not connect to AP. radio on only when sitesurvey,
921 ULONG EnableNewPS:1; // Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe.
922 ULONG rt30xxPowerMode:2; // Power Level Mode for rt30xx chip
923 ULONG rt30xxFollowHostASPM:1; // Card Follows Host's setting for rt30xx chip.
924 ULONG rt30xxForceASPMTest:1; // Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode.
925 ULONG rsv:26; // Radio Measurement Enable
928 } PS_CONTROL, *PPS_CONTROL;
929 #endif // RTMP_MAC_PCI //
931 /***************************************************************************
932 * structure for MLME state machine
933 **************************************************************************/
934 typedef struct _MLME_STRUCT {
935 // STA state machines
936 STATE_MACHINE CntlMachine;
937 STATE_MACHINE AssocMachine;
938 STATE_MACHINE AuthMachine;
939 STATE_MACHINE AuthRspMachine;
940 STATE_MACHINE SyncMachine;
941 STATE_MACHINE WpaPskMachine;
942 STATE_MACHINE LeapMachine;
943 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
944 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
945 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
946 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
947 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
949 STATE_MACHINE ActMachine;
954 // common WPA state machine
955 STATE_MACHINE WpaMachine;
956 STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE];
960 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
961 ULONG Now32; // latch the value of NdisGetSystemUpTime()
962 ULONG LastSendNULLpsmTime;
965 NDIS_SPIN_LOCK TaskLock;
970 RALINK_TIMER_STRUCT PeriodicTimer;
971 RALINK_TIMER_STRUCT APSDPeriodicTimer;
972 RALINK_TIMER_STRUCT LinkDownTimer;
973 RALINK_TIMER_STRUCT LinkUpTimer;
975 UCHAR bPsPollTimerRunning;
976 RALINK_TIMER_STRUCT PsPollTimer;
977 RALINK_TIMER_STRUCT RadioOnOffTimer;
978 #endif // RTMP_MAC_PCI //
980 ULONG OneSecPeriodicRound;
983 BOOLEAN bLowThroughput;
984 BOOLEAN bEnableAutoAntennaCheck;
985 RALINK_TIMER_STRUCT RxAntEvalTimer;
993 RALINK_TIMER_STRUCT AutoWakeupTimer;
994 BOOLEAN AutoWakeupTimerRunning;
995 #endif // RTMP_MAC_USB //
996 } MLME_STRUCT, *PMLME_STRUCT;
999 /***************************************************************************
1000 * 802.11 N related data structures
1001 **************************************************************************/
1002 struct reordering_mpdu
1004 struct reordering_mpdu *next;
1005 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
1006 int Sequence; /* sequence number of MPDU */
1010 struct reordering_list
1012 struct reordering_mpdu *next;
1016 struct reordering_mpdu_pool
1019 NDIS_SPIN_LOCK lock;
1020 struct reordering_list freelist;
1023 typedef enum _REC_BLOCKACK_STATUS
1027 Recipient_HandleRes,
1029 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1031 typedef enum _ORI_BLOCKACK_STATUS
1037 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1039 typedef struct _BA_ORI_ENTRY{
1044 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1046 USHORT TimeOutValue;
1047 ORI_BLOCKACK_STATUS ORI_BA_Status;
1048 RALINK_TIMER_STRUCT ORIBATimer;
1050 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1052 typedef struct _BA_REC_ENTRY {
1055 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1057 //UCHAR Curindidx; // the head in the RX reordering buffer
1059 // USHORT LastIndSeqAtTimer;
1060 USHORT TimeOutValue;
1061 RALINK_TIMER_STRUCT RECBATimer;
1062 ULONG LastIndSeqAtTimer;
1065 REC_BLOCKACK_STATUS REC_BA_Status;
1066 // UCHAR RxBufIdxUsed;
1067 // corresponding virtual address for RX reordering packet storage.
1068 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1069 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1070 // struct _BA_REC_ENTRY *pNext;
1072 struct reordering_list list;
1073 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1077 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1078 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1079 ULONG numDoneOriginator; // count Done Originator sessions
1080 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1081 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1082 } BA_TABLE, *PBA_TABLE;
1084 //For QureyBATableOID use;
1085 typedef struct PACKED _OID_BA_REC_ENTRY{
1086 UCHAR MACAddr[MAC_ADDR_LEN];
1087 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1090 REC_BLOCKACK_STATUS REC_BA_Status[8];
1091 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1093 //For QureyBATableOID use;
1094 typedef struct PACKED _OID_BA_ORI_ENTRY{
1095 UCHAR MACAddr[MAC_ADDR_LEN];
1096 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
1099 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1100 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1102 typedef struct _QUERYBA_TABLE{
1103 OID_BA_ORI_ENTRY BAOriEntry[32];
1104 OID_BA_REC_ENTRY BARecEntry[32];
1105 UCHAR OriNum;// Number of below BAOriEntry
1106 UCHAR RecNum;// Number of below BARecEntry
1107 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1109 typedef union _BACAP_STRUC {
1111 UINT32 RxBAWinLimit:8;
1112 UINT32 TxBAWinLimit:8;
1113 UINT32 AutoBA:1; // automatically BA
1114 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1115 UINT32 MpduDensity:3;
1116 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1117 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1118 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1119 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1120 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1124 } BACAP_STRUC, *PBACAP_STRUC;
1128 BOOLEAN IsRecipient;
1129 UCHAR MACAddr[MAC_ADDR_LEN];
1133 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1134 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1138 #define IS_HT_STA(_pMacEntry) \
1139 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
1141 #define IS_HT_RATE(_pMacEntry) \
1142 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1144 #define PEER_IS_HT_RATE(_pMacEntry) \
1145 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1149 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1150 typedef struct _IOT_STRUC {
1152 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1153 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1154 ULONG OneSecInWindowCount;
1155 ULONG OneSecFrameDuplicateCount;
1156 ULONG OneSecOutWindowCount;
1161 BOOLEAN bRTSLongProtOn;
1162 BOOLEAN bLastAtheros;
1163 BOOLEAN bCurrentAtheros;
1164 BOOLEAN bNowAtherosBurstOn;
1165 BOOLEAN bNextDisableRxBA;
1167 } IOT_STRUC, *PIOT_STRUC;
1169 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1170 typedef union _REG_TRANSMIT_SETTING {
1173 //UINT32 MCS:7; // MCS
1176 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1178 UINT32 STBC:1; //SPACE
1185 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1187 typedef union _DESIRED_TRANSMIT_SETTING {
1189 USHORT MCS:7; // MCS
1191 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1195 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1198 /***************************************************************************
1199 * USB-based chip Beacon related data structures
1200 **************************************************************************/
1201 #define BEACON_BITMAP_MASK 0xff
1202 typedef struct _BEACON_SYNC_STRUCT_
1204 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1205 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1206 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1207 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1208 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1209 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1210 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1211 }BEACON_SYNC_STRUCT;
1212 #endif // RTMP_MAC_USB //
1214 /***************************************************************************
1215 * Multiple SSID related data structures
1216 **************************************************************************/
1217 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1218 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1220 /* clear bcmc TIM bit */
1221 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1222 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1224 /* set bcmc TIM bit */
1225 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1226 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1228 /* clear a station PS TIM bit */
1229 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1230 { UCHAR tim_offset = wcid >> 3; \
1231 UCHAR bit_offset = wcid & 0x7; \
1232 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1234 /* set a station PS TIM bit */
1235 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1236 { UCHAR tim_offset = wcid >> 3; \
1237 UCHAR bit_offset = wcid & 0x7; \
1238 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1241 // configuration common to OPMODE_AP as well as OPMODE_STA
1242 typedef struct _COMMON_CONFIG {
1244 BOOLEAN bCountryFlag;
1245 UCHAR CountryCode[3];
1247 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1248 UCHAR CountryRegionForABand; // Enum of country region for A band
1249 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1250 USHORT Dsifs; // in units of usec
1251 ULONG PacketFilter; // Packet filter for receiving
1252 UINT8 RegulatoryClass;
1254 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1255 UCHAR SsidLen; // the actual ssid length in used
1256 UCHAR LastSsidLen; // the actual ssid length in used
1257 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1258 UCHAR LastBssid[MAC_ADDR_LEN];
1260 UCHAR Bssid[MAC_ADDR_LEN];
1261 USHORT BeaconPeriod;
1263 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1265 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1267 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1269 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1270 UCHAR MaxDesiredRate;
1271 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1273 ULONG BasicRateBitmap; // backup basic ratebitmap
1275 BOOLEAN bAPSDCapable;
1276 BOOLEAN bInServicePeriod;
1282 /* because TSPEC can modify the APSD flag, we need to keep the APSD flag
1283 requested in association stage from the station;
1284 we need to recover the APSD flag after the TSPEC is deleted. */
1285 BOOLEAN bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */
1286 BOOLEAN bACMAPSDTr[4]; /* no use */
1288 BOOLEAN bNeedSendTriggerFrame;
1289 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1290 ULONG TriggerTimerCount;
1292 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1293 // move to MULTISSID_STRUCT for MBSS
1294 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1295 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1296 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1297 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1298 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1299 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1300 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1301 //BOOLEAN bAutoTxRateSwitch;
1302 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1303 UCHAR RtsRate; // RATE_xxx
1304 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1305 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1306 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1308 USHORT RtsThreshold; // in unit of BYTE
1309 USHORT FragmentThreshold; // in unit of BYTE
1311 UCHAR TxPower; // in unit of mW
1312 ULONG TxPowerPercentage; // 0~100 %
1313 ULONG TxPowerDefault; // keep for TxPowerPercentage
1314 UINT8 PwrConstraint;
1316 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1317 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1319 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1320 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1321 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1322 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1323 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1324 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST
1325 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1326 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1327 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1328 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1332 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1333 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1334 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1335 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1336 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1337 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1338 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1339 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1340 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1341 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1342 ULONG OpStatusFlags;
1344 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1345 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1347 // IEEE802.11H--DFS.
1348 RADAR_DETECT_STRUCT RadarDetect;
1351 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1352 //RT_HT_CAPABILITY SupportedHtPhy;
1353 RT_HT_CAPABILITY DesiredHtPhy;
1354 HT_CAPABILITY_IE HtCapability;
1355 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1356 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1357 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1358 NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present
1361 BOOLEAN bMIMOPSEnable;
1363 //2008/11/05: KH add to support Antenna power-saving of AP<--
1364 BOOLEAN bGreenAPEnable;
1365 //2008/11/05: KH add to support Antenna power-saving of AP-->
1366 BOOLEAN bDisableReordering;
1367 BOOLEAN bForty_Mhz_Intolerant;
1368 BOOLEAN bExtChannelSwitchAnnouncement;
1369 BOOLEAN bRcvBSSWidthTriggerEvents;
1370 ULONG LastRcvBSSWidthTriggerEventsTime;
1374 // Enable wireless event
1375 BOOLEAN bWirelessEvent;
1376 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1378 // Tx & Rx Stream number selection
1382 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1385 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1386 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1387 RT_HT_CAPABILITY SupportedHtPhy;
1388 ULONG MaxPktOneTxBulk;
1392 BOOLEAN IsUpdateBeacon;
1393 BEACON_SYNC_STRUCT *pBeaconSync;
1394 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1395 UINT32 BeaconAdjust;
1396 UINT32 BeaconFactor;
1397 UINT32 BeaconRemain;
1398 #endif // RTMP_MAC_USB //
1400 NDIS_SPIN_LOCK MeasureReqTabLock;
1401 PMEASURE_REQ_TAB pMeasureReqTab;
1403 NDIS_SPIN_LOCK TpcReqTabLock;
1404 PTPC_REQ_TAB pTpcReqTab;
1406 BOOLEAN PSPXlink; // 0: Disable. 1: Enable
1408 #if defined(RT305x)||defined(RT30xx)
1409 // request by Gary, for High Power issue
1410 UCHAR HighPowerPatchDisabled;
1413 BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */
1414 } COMMON_CONFIG, *PCOMMON_CONFIG;
1417 /* Modified by Wu Xi-Kun 4/21/2006 */
1418 // STA configuration and status
1419 typedef struct _STA_ADMIN_CONFIG {
1421 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1422 // the user intended configuration, but not necessary fully equal to the final
1423 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1424 // AP or IBSS holder).
1425 // Once initialized, user configuration can only be changed via OID_xxx
1426 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1427 USHORT AtimWin; // used when starting a new IBSS
1430 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1431 // the user intended configuration, and should be always applied to the final
1432 // settings in ACTIVE BSS without compromising with the BSS holder.
1433 // Once initialized, user configuration can only be changed via OID_xxx
1435 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1436 USHORT DefaultListenCount; // default listen count;
1437 ULONG WindowsPowerMode; // Power mode for AC power
1438 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1439 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1440 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1441 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1443 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1444 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1445 USHORT DisassocReason;
1446 UCHAR DisassocSta[MAC_ADDR_LEN];
1447 USHORT DeauthReason;
1448 UCHAR DeauthSta[MAC_ADDR_LEN];
1449 USHORT AuthFailReason;
1450 UCHAR AuthFailSta[MAC_ADDR_LEN];
1452 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1453 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1454 NDIS_802_11_WEP_STATUS WepStatus;
1455 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1457 // Add to support different cipher suite for WPA2/WPA mode
1458 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1459 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1460 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1461 USHORT RsnCapability;
1463 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1465 UCHAR WpaPassPhrase[64]; // WPA PSK pass phrase
1466 UINT WpaPassPhraseLen; // the length of WPA PSK pass phrase
1467 UCHAR PMK[32]; // WPA PSK mode PMK
1468 UCHAR PTK[64]; // WPA PSK mode PTK
1469 UCHAR GTK[32]; // GTK from authenticator
1470 BSSID_INFO SavedPMK[PMKID_NO];
1471 UINT SavedPMKNum; // Saved PMKID number
1476 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1479 // For WPA countermeasures
1480 ULONG LastMicErrorTime; // record last MIC error time
1481 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1482 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1483 // For WPA-PSK supplicant state
1484 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1485 UCHAR ReplayCounter[8];
1486 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1487 UCHAR SNonce[32]; // SNonce for WPA-PSK
1489 UCHAR LastSNR0; // last received BEACON's SNR
1490 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1491 RSSI_SAMPLE RssiSample;
1492 ULONG NumOfAvgRssiSample;
1494 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1495 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1496 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1497 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1499 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1500 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1501 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1502 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1503 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1504 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1505 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1507 // New for WPA, windows want us to keep association information and
1508 // Fixed IEs from last association response
1509 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1510 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1511 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1512 USHORT ResVarIELen; // Length of next VIE include EID & Length
1513 UCHAR ResVarIEs[MAX_VIE_LEN];
1516 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
1518 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
1519 USHORT RPIDensity[8]; // Array for RPI density collection
1521 UCHAR RMReqCnt; // Number of measurement request saved.
1522 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
1523 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
1524 // It must be the same channel with maximum duration
1525 USHORT ParallelDuration; // Maximum duration for parallel measurement
1526 UCHAR ParallelChannel; // Only one channel with parallel measurement
1527 USHORT IAPPToken; // IAPP dialog token
1528 // Hack for channel load and noise histogram parameters
1529 UCHAR NHFactor; // Parameter for Noise histogram
1530 UCHAR CLFactor; // Parameter for channel load
1532 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
1533 BOOLEAN StaQuickResponeForRateUpTimerRunning;
1535 UCHAR DtimCount; // 0.. DtimPeriod-1
1536 UCHAR DtimPeriod; // default = 3
1538 ////////////////////////////////////////////////////////////////////////////////////////
1539 // This is only for WHQL test.
1541 ////////////////////////////////////////////////////////////////////////////////////////
1543 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
1545 BOOLEAN bAutoRoaming; // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI
1546 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
1549 BOOLEAN IEEE8021x_required_keys;
1550 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
1551 UCHAR DesireSharedKeyId;
1553 // 0: driver ignores wpa_supplicant
1554 // 1: wpa_supplicant initiates scanning and AP selection
1555 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
1556 UCHAR WpaSupplicantUP;
1557 UCHAR WpaSupplicantScanCount;
1558 BOOLEAN bRSN_IE_FromWpaSupplicant;
1563 BOOLEAN bTGnWifiTest;
1564 BOOLEAN bScanReqIsFromWebUI;
1566 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1567 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
1568 RT_HT_PHY_INFO DesiredHtPhyInfo;
1569 BOOLEAN bAutoTxRateSwitch;
1573 // PS Control has 2 meanings for advanced power save function.
1574 // 1. EnablePSinIdle : When no connection, always radio off except need to do site survey.
1575 // 2. EnableNewPS : will save more current in sleep or radio off mode.
1576 PS_CONTROL PSControl;
1577 #endif // RTMP_MAC_PCI //
1582 BOOLEAN bAutoConnectByBssid;
1583 ULONG BeaconLostTime; // seconds
1584 BOOLEAN bForceTxBurst; // 1: force enble TX PACKET BURST, 0: disable
1585 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
1587 // This data structure keep the current active BSS/IBSS's configuration that this STA
1588 // had agreed upon joining the network. Which means these parameters are usually decided
1589 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
1590 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
1591 // Normally, after SCAN or failed roaming attempts, we need to recover back to
1592 // the current active settings.
1593 typedef struct _STA_ACTIVE_CONFIG {
1595 USHORT AtimWin; // in kusec; IBSS parameter set element
1596 USHORT CapabilityInfo;
1597 USHORT CfpMaxDuration;
1600 // Copy supported rate from desired AP's beacon. We are trying to match
1601 // AP's supported and extended rate settings.
1602 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1603 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1606 // Copy supported ht from desired AP's beacon. We are trying to match
1607 RT_HT_PHY_INFO SupportedPhyInfo;
1608 RT_HT_CAPABILITY SupportedHtPhy;
1609 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
1616 typedef struct _MAC_TABLE_ENTRY {
1617 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
1618 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
1619 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
1620 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
1621 BOOLEAN ValidAsMesh;
1622 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
1624 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
1626 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
1628 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
1629 UCHAR CMTimerRunning;
1630 UCHAR apidx; // MBSS number
1632 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
1633 UCHAR ANonce[LEN_KEY_DESC_NONCE];
1634 UCHAR SNonce[LEN_KEY_DESC_NONCE];
1635 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
1638 RALINK_TIMER_STRUCT RetryTimer;
1639 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
1640 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1641 NDIS_802_11_WEP_STATUS WepStatus;
1642 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1643 AP_WPA_STATE WpaState;
1646 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1647 CIPHER_KEY PairwiseKey;
1650 UCHAR PMKID[LEN_PMKID];
1653 UCHAR Addr[MAC_ADDR_LEN];
1656 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
1657 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
1659 USHORT CapabilityInfo;
1661 ULONG NoDataIdleCount;
1662 UINT16 StationKeepAliveCount; // unit: second
1664 QUEUE_HEADER PsQueue;
1666 UINT32 StaConnectTime; // the live time of this station since associated with AP
1669 USHORT NoBADataCountDown;
1671 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
1672 UINT TxBFCount; // 3*3
1674 UINT DebugFIFOCount;
1679 //====================================================
1680 //WDS entry needs these
1681 // if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
1682 UINT MatchWDSTabIdx;
1683 UCHAR MaxSupportedRate;
1685 UCHAR CurrTxRateIndex;
1686 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1687 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1688 // USHORT OneSecTxOkCount;
1689 UINT32 OneSecTxNoRetryOkCount;
1690 UINT32 OneSecTxRetryOkCount;
1691 UINT32 OneSecTxFailCount;
1692 UINT32 ContinueTxFailCnt;
1693 UINT32 CurrTxRateStableTime; // # of second in current TX rate
1694 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1695 //====================================================
1697 BOOLEAN fNoisyEnvironment;
1698 BOOLEAN fLastSecAccordingRSSI;
1699 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1700 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1701 ULONG LastTxOkCount;
1702 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1704 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1705 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1706 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
1707 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
1708 ULONG ClientStatusFlags;
1710 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1712 // HT EWC MIMO-N used parameters
1713 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
1714 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
1715 USHORT TXAutoBAbitmap;
1716 USHORT BADeclineBitmap;
1717 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
1718 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
1719 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
1721 // 802.11n features.
1723 UCHAR MaxRAmpduFactor;
1725 UCHAR MmpsMode; // MIMO power save more.
1727 HT_CAPABILITY_IE HTCapability;
1729 BOOLEAN bAutoTxRateSwitch;
1732 struct _MAC_TABLE_ENTRY *pNext;
1733 USHORT TxSeq[NUM_OF_TID];
1734 USHORT NonQosDataSeq;
1736 RSSI_SAMPLE RssiSample;
1738 UINT32 TXMCSExpected[16];
1739 UINT32 TXMCSSuccessful[16];
1740 UINT32 TXMCSFailed[16];
1741 UINT32 TXMCSAutoFallBack[16][16];
1743 ULONG LastBeaconRxTime;
1745 ULONG AssocDeadLine;
1746 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
1748 typedef struct _MAC_TABLE {
1750 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
1751 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
1752 QUEUE_HEADER McastPsQueue;
1754 BOOLEAN fAnyStationInPsm;
1755 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
1756 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
1757 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
1758 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
1759 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
1760 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
1761 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
1762 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
1763 //2008/10/28: KH add to support Antenna power-saving of AP<--
1764 //2008/10/28: KH add to support Antenna power-saving of AP-->
1765 } MAC_TABLE, *PMAC_TABLE;
1775 BOOLEAN bGreenField;
1779 typedef struct _RTMP_DEV_INFO_
1782 RTMP_INF_TYPE infType;
1788 struct _RTMP_CHIP_OP_
1790 /* Calibration access related callback functions */
1791 int (*eeinit)(RTMP_ADAPTER *pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */
1792 int (*eeread)(RTMP_ADAPTER *pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */
1794 /* MCU related callback functions */
1795 int (*loadFirmware)(RTMP_ADAPTER *pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */
1796 int (*eraseFirmware)(RTMP_ADAPTER *pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */
1797 int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1); */
1799 /* RF access related callback functions */
1800 REG_PAIR *pRFRegTable;
1801 void (*AsicRfInit)(RTMP_ADAPTER *pAd);
1802 void (*AsicRfTurnOn)(RTMP_ADAPTER *pAd);
1803 void (*AsicRfTurnOff)(RTMP_ADAPTER *pAd);
1804 void (*AsicReverseRfFromSleepMode)(RTMP_ADAPTER *pAd);
1805 void (*AsicHaltAction)(RTMP_ADAPTER *pAd);
1810 // The miniport adapter structure
1812 struct _RTMP_ADAPTER
1814 PVOID OS_Cookie; // save specific structure relative to OS
1818 RTMP_CHIP_OP chipOps;
1819 USHORT ThisTbttNumToNextWakeUp;
1822 /*****************************************************************************************/
1823 /* PCI related parameters */
1824 /*****************************************************************************************/
1825 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
1826 unsigned int irq_num;
1828 USHORT LnkCtrlBitMask;
1829 USHORT RLnkCtrlConfiguration;
1830 USHORT RLnkCtrlOffset;
1831 USHORT HostLnkCtrlConfiguration;
1832 USHORT HostLnkCtrlOffset;
1833 USHORT PCIePowerSaveLevel;
1834 ULONG Rt3xxHostLinkCtrl; // USed for 3090F chip
1835 ULONG Rt3xxRalinkLinkCtrl; // USed for 3090F chip
1836 USHORT DeviceID; // Read from PCI config
1837 ULONG AccessBBPFailCount;
1838 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
1839 BOOLEAN bPCIclkOffDisableTx; //
1841 BOOLEAN brt30xxBanMcuCmd; //when = 0xff means all commands are ok to set .
1842 BOOLEAN b3090ESpecialChip; //3090E special chip that write EEPROM 0x24=0x9280.
1843 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
1845 UINT int_enable_reg;
1846 UINT int_disable_mask;
1850 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
1851 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
1852 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
1853 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
1854 #endif // RTMP_MAC_PCI //
1857 NDIS_SPIN_LOCK irq_lock;
1861 /*****************************************************************************************/
1862 /* USB related parameters */
1863 /*****************************************************************************************/
1864 struct usb_config_descriptor *config;
1865 UINT BulkInEpAddr; // bulk-in endpoint address
1866 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
1869 USHORT BulkOutMaxPacketSize;
1870 USHORT BulkInMaxPacketSize;
1872 //======Control Flags
1873 LONG PendingIoCount;
1875 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
1879 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
1880 RTMP_OS_TASK cmdQTask;
1882 //======Semaphores (event)
1883 RTMP_OS_SEM UsbVendorReq_semaphore;
1884 PVOID UsbVendorReqBuf;
1885 wait_queue_head_t *wait;
1886 #endif // RTMP_MAC_USB //
1888 /*****************************************************************************************/
1889 /* RBUS related parameters */
1890 /*****************************************************************************************/
1893 /*****************************************************************************************/
1894 /* Both PCI/USB related parameters */
1895 /*****************************************************************************************/
1896 //RTMP_DEV_INFO chipInfo;
1897 RTMP_INF_TYPE infType;
1899 /*****************************************************************************************/
1900 /* Driver Mgmt related parameters */
1901 /*****************************************************************************************/
1902 RTMP_OS_TASK mlmeTask;
1903 #ifdef RTMP_TIMER_TASK_SUPPORT
1904 // If you want use timer task to handle the timer related jobs, enable this.
1905 RTMP_TIMER_TASK_QUEUE TimerQ;
1906 NDIS_SPIN_LOCK TimerQLock;
1907 RTMP_OS_TASK timerTask;
1908 #endif // RTMP_TIMER_TASK_SUPPORT //
1911 /*****************************************************************************************/
1912 /* Tx related parameters */
1913 /*****************************************************************************************/
1914 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
1915 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
1918 // Data related context and AC specified, 4 AC supported
1919 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
1920 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
1922 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
1923 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
1925 // 4 sets of Bulk Out index and pending flag
1926 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
1928 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
1929 UCHAR bulkResetPipeid;
1930 BOOLEAN MgmtBulkPending;
1931 ULONG bulkResetReq[6];
1932 #endif // RTMP_MAC_USB //
1934 // resource for software backlog queues
1935 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
1936 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
1938 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
1939 RTMP_MGMT_RING MgmtRing;
1940 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
1943 /*****************************************************************************************/
1944 /* Rx related parameters */
1945 /*****************************************************************************************/
1948 RTMP_RX_RING RxRing;
1949 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
1951 NDIS_SPIN_LOCK McuCmdLock; //MCU Command Queue spinlock
1953 #endif // RTMP_MAC_PCI //
1955 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
1956 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
1957 UCHAR PendingRx; // The Maximum pending Rx value should be RX_RING_SIZE.
1958 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
1959 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
1960 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
1961 ULONG TransferBufferLength; // current length of the packet buffer
1962 ULONG ReadPosition; // current read position in a packet buffer
1963 #endif // RTMP_MAC_USB //
1965 /*****************************************************************************************/
1966 /* ASIC related parameters */
1967 /*****************************************************************************************/
1968 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
1970 // ---------------------------
1972 // ---------------------------
1973 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
1974 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
1975 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
1976 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
1977 BOOLEAN EepromAccess;
1981 // ---------------------------
1983 // ---------------------------
1984 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
1985 CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power
1986 BBP_R66_TUNING BbpTuning;
1988 // ----------------------------
1990 // ----------------------------
1991 UCHAR RfIcType; // RFIC_xxx
1992 ULONG RfFreqOffset; // Frequency offset for channel switching
1993 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
1995 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
1996 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
1998 // This soft Rx Antenna Diversity mechanism is used only when user set
1999 // RX Antenna = DIVERSITY ON
2000 SOFT_RX_ANT_DIVERSITY RxAnt;
2003 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2004 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2005 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2006 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2008 UCHAR ChannelListNum; // number of channel in ChannelList[]
2011 ULONG Tx20MPwrCfgABand[5];
2012 ULONG Tx20MPwrCfgGBand[5];
2013 ULONG Tx40MPwrCfgABand[5];
2014 ULONG Tx40MPwrCfgGBand[5];
2016 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2017 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2018 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2019 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2020 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2021 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2023 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2024 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2025 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2026 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2027 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2028 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2030 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2031 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2032 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2034 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2035 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2036 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2038 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2039 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2040 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2041 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2047 UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G
2048 UCHAR TxMixerGain5G;
2050 // ----------------------------
2052 // ----------------------------
2053 MCU_LEDCS_STRUC LedCntl;
2054 USHORT Led1; // read from EEPROM 0x3c
2055 USHORT Led2; // EEPROM 0x3e
2056 USHORT Led3; // EEPROM 0x40
2057 UCHAR LedIndicatorStrength;
2058 UCHAR RssiSingalstrengthOffet;
2059 BOOLEAN bLedOnScanning;
2062 /*****************************************************************************************/
2063 /* 802.11 related parameters */
2064 /*****************************************************************************************/
2065 // outgoing BEACON frame buffer and corresponding TXD
2066 TXWI_STRUC BeaconTxWI;
2068 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2070 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2071 PSPOLL_FRAME PsPollFrame;
2072 HEADER_802_11 NullFrame;
2075 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2076 TX_CONTEXT NullContext;
2077 TX_CONTEXT PsPollContext;
2078 TX_CONTEXT RTSContext;
2079 #endif // RTMP_MAC_USB //
2081 //=========AP===========
2084 //=======STA===========
2085 // -----------------------------------------------
2086 // STA specific configuration & operation status
2087 // used only when pAd->OpMode == OPMODE_STA
2088 // -----------------------------------------------
2089 STA_ADMIN_CONFIG StaCfg; // user desired settings
2090 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2091 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2092 NDIS_MEDIA_STATE PreMediaState;
2094 //=======Common===========
2095 // OP mode: either AP or STA
2096 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2098 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2101 /* MAT related parameters */
2103 // configuration: read from Registry & E2PROM
2104 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2105 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2106 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2108 // ------------------------------------------------------
2109 // common configuration to both OPMODE_STA and OPMODE_AP
2110 // ------------------------------------------------------
2111 COMMON_CONFIG CommonCfg;
2114 // AP needs those vaiables for site survey feature.
2115 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2116 BSS_TABLE ScanTab; // store the latest SCAN result
2118 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2119 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2120 NDIS_SPIN_LOCK MacTabLock;
2124 NDIS_SPIN_LOCK BATabLock;
2125 RALINK_TIMER_STRUCT RECBATimer;
2127 // encryption/decryption KEY tables
2128 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2130 // RX re-assembly buffer for fragmentation
2131 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2134 COUNTER_802_3 Counters8023; // 802.3 counters
2135 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2136 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2137 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2138 PRIVATE_STRUC PrivateInfo; // Private information & counters
2140 // flags, see fRTMP_ADAPTER_xxx flags
2141 ULONG Flags; // Represent current device status
2142 ULONG PSFlags; // Power Save operation flag.
2144 // current TX sequence #
2147 // Control disconnect / connect event generation
2148 //+++Didn't used anymore
2153 //+++Used only for Station
2154 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2157 ULONG ExtraInfo; // Extra information for displaying status
2158 ULONG SystemErrorBitmap; // b0: E2PROM version error
2160 //+++Didn't used anymore
2161 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2164 // ---------------------------
2166 // ---------------------------
2167 RT_802_11_EVENT_TABLE EventTab;
2172 /*****************************************************************************************/
2173 /* Statistic related parameters */
2174 /*****************************************************************************************/
2176 ULONG BulkOutDataOneSecCount;
2177 ULONG BulkInDataOneSecCount;
2178 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2179 ULONG watchDogRxCnt;
2180 ULONG watchDogRxOverFlowCnt;
2181 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2182 INT TransferedLength[NUM_OF_TX_RING];
2183 #endif // RTMP_MAC_USB //
2185 BOOLEAN bUpdateBcnCntDone;
2186 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2187 // ----------------------------
2189 // ----------------------------
2190 //ULONG DebugSetting[4];
2191 BOOLEAN bBanAllBaSetup;
2192 BOOLEAN bPromiscuous;
2194 // ----------------------------
2195 // rt2860c emulation-use Parameters
2196 // ----------------------------
2197 //ULONG rtsaccu[30];
2198 //ULONG ctsaccu[30];
2199 //ULONG cfendaccu[30];
2200 //ULONG bacontent[16];
2201 //ULONG rxint[RX_RING_SIZE+1];
2204 BOOLEAN bForcePrintTX;
2205 BOOLEAN bForcePrintRX;
2206 //BOOLEAN bDisablescanning; //defined in RT2870 USB
2207 BOOLEAN bStaFifoTest;
2208 BOOLEAN bProtectionTest;
2209 BOOLEAN bBroadComHT;
2210 //+++Following add from RT2870 USB.
2212 ULONG BulkOutComplete;
2213 ULONG BulkOutCompleteOther;
2214 ULONG BulkOutCompleteCancel; // seems not use now?
2216 ULONG BulkInComplete;
2217 ULONG BulkInCompleteFail;
2220 struct wificonf WIFItestbed;
2222 struct reordering_mpdu_pool mpdu_blk_pool;
2224 ULONG OneSecondnonBEpackets; // record non BE packets per second
2227 struct iw_statistics iw_stats;
2229 struct net_device_stats stats;
2236 ULONG TbttTickCount;
2237 #ifdef PCI_MSI_SUPPORT
2239 #endif // PCI_MSI_SUPPORT //
2244 #define TIME_BASE (1000000/OS_HZ)
2245 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2246 UCHAR flg_be_adjust;
2247 ULONG be_adjust_last_time;
2255 UINT8 FlgCtsEnabled;
2256 UINT8 PM_FlgSuspend;
2259 #ifdef RTMP_EFUSE_SUPPORT
2261 BOOLEAN bEEPROMFile;
2262 BOOLEAN bFroceEEPROMBuffer;
2263 UCHAR EEPROMImage[1024];
2264 #endif // RTMP_EFUSE_SUPPORT //
2270 #define DELAYINTMASK 0x0003fffb
2271 #define INTMASK 0x0003fffb
2272 #define IndMask 0x0003fffc
2273 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2274 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2275 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2276 #define TxCoherent 0x00020000 // tx coherent
2277 #define RxCoherent 0x00010000 // rx coherent
2278 #define McuCommand 0x00000200 // mcu
2279 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2280 #define TBTTInt 0x00000800 // TBTT interrupt
2281 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2282 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2283 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2286 /***************************************************************************
2287 * Rx Path software control block related data structures
2288 **************************************************************************/
2289 typedef struct _RX_BLK_
2291 // RXD_STRUC RxD; // sample
2292 RT28XX_RXD_STRUC RxD;
2294 PHEADER_802_11 pHeader;
2295 PNDIS_PACKET pRxPacket;
2299 UCHAR UserPriority; // for calculate TKIP MIC using
2303 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2304 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2305 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2308 #define fRX_WDS 0x0001
2309 #define fRX_AMSDU 0x0002
2310 #define fRX_ARALINK 0x0004
2311 #define fRX_HTC 0x0008
2312 #define fRX_PAD 0x0010
2313 #define fRX_AMPDU 0x0020
2314 #define fRX_QOS 0x0040
2315 #define fRX_INFRA 0x0080
2316 #define fRX_EAP 0x0100
2317 #define fRX_MESH 0x0200
2318 #define fRX_APCLI 0x0400
2319 #define fRX_DLS 0x0800
2320 #define fRX_WPI 0x1000
2322 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2323 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2324 #define LENGTH_ARALINK_HEADER_FIELD 2
2327 /***************************************************************************
2328 * Tx Path software control block related data structures
2329 **************************************************************************/
2330 #define TX_UNKOWN_FRAME 0x00
2331 #define TX_MCAST_FRAME 0x01
2332 #define TX_LEGACY_FRAME 0x02
2333 #define TX_AMPDU_FRAME 0x04
2334 #define TX_AMSDU_FRAME 0x08
2335 #define TX_RALINK_FRAME 0x10
2336 #define TX_FRAG_FRAME 0x20
2339 // Currently the sizeof(TX_BLK) is 148 bytes.
2340 typedef struct _TX_BLK_
2343 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2344 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2345 USHORT TotalFragNum; // Total frame fragments required in one batch
2346 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2348 QUEUE_HEADER TxPacketList;
2349 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2350 HTTRANSMIT_SETTING *pTransmit;
2352 // Following structure used for the characteristics of a specific packet.
2353 PNDIS_PACKET pPacket;
2354 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2355 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2356 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2357 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2358 UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2359 //RT2870 2.1.0.0 uses only 80 bytes
2360 //RT3070 2.1.1.0 uses only 96 bytes
2361 //RT3090 2.1.0.0 uses only 96 bytes
2362 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2363 UCHAR HdrPadLen; // recording Header Padding Length;
2364 UCHAR apidx; // The interface associated to this packet
2365 UCHAR Wcid; // The MAC entry associated to this packet
2366 UCHAR UserPriority; // priority class of packet
2367 UCHAR FrameGap; // what kind of IFS this packet use
2368 UCHAR MpduReqNum; // number of fragments of this frame
2369 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2370 UCHAR CipherAlg; // cipher alogrithm
2375 USHORT Flags; //See following definitions for detail.
2377 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2378 ULONG Priv; // Hardware specific value saved in here.
2382 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2383 #define fTX_bAckRequired 0x0002 // the packet need ack response
2384 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2385 #define fTX_bHTRate 0x0008 // allow to use HT rate
2386 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2387 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2388 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2389 #define fTX_bWMM 0x0080 // QOS Data
2390 #define fTX_bClearEAPFrame 0x0100
2392 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2393 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2394 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2401 /***************************************************************************
2402 * Other static inline function definitions
2403 **************************************************************************/
2404 static inline VOID ConvertMulticastIP2MAC(
2406 IN PUCHAR *ppMacAddr,
2407 IN UINT16 ProtoType)
2409 if (pIpAddr == NULL)
2412 if (ppMacAddr == NULL || *ppMacAddr == NULL)
2418 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2419 *(*ppMacAddr) = 0x33;
2420 *(*ppMacAddr + 1) = 0x33;
2421 *(*ppMacAddr + 2) = pIpAddr[12];
2422 *(*ppMacAddr + 3) = pIpAddr[13];
2423 *(*ppMacAddr + 4) = pIpAddr[14];
2424 *(*ppMacAddr + 5) = pIpAddr[15];
2429 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2430 *(*ppMacAddr) = 0x01;
2431 *(*ppMacAddr + 1) = 0x00;
2432 *(*ppMacAddr + 2) = 0x5e;
2433 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
2434 *(*ppMacAddr + 4) = pIpAddr[2];
2435 *(*ppMacAddr + 5) = pIpAddr[3];
2443 char *GetPhyMode(int Mode);
2444 char* GetBW(int BW);
2447 // Private routines in rtmp_init.c
2449 NDIS_STATUS RTMPAllocAdapterBlock(
2451 OUT PRTMP_ADAPTER *ppAdapter);
2453 NDIS_STATUS RTMPAllocTxRxRingMemory(
2454 IN PRTMP_ADAPTER pAd);
2456 NDIS_STATUS RTMPSetProfileParameters(
2457 IN RTMP_ADAPTER *pAd,
2458 IN PSTRING pBuffer);
2460 INT RTMPGetKeyParameter(
2465 IN BOOLEAN bTrimSpace);
2467 VOID RTMPFreeAdapter(
2468 IN PRTMP_ADAPTER pAd);
2470 NDIS_STATUS NICReadRegParameters(
2471 IN PRTMP_ADAPTER pAd,
2472 IN NDIS_HANDLE WrapperConfigurationContext);
2474 #ifdef RTMP_RF_RW_SUPPORT
2475 VOID NICInitRFRegisters(
2476 IN PRTMP_ADAPTER pAd);
2478 VOID RtmpChipOpsRFHook(
2479 IN RTMP_ADAPTER *pAd);
2481 NDIS_STATUS RT30xxWriteRFRegister(
2482 IN PRTMP_ADAPTER pAd,
2486 NDIS_STATUS RT30xxReadRFRegister(
2487 IN PRTMP_ADAPTER pAd,
2490 #endif // RTMP_RF_RW_SUPPORT //
2492 VOID NICReadEEPROMParameters(
2493 IN PRTMP_ADAPTER pAd,
2494 IN PUCHAR mac_addr);
2496 VOID NICInitAsicFromEEPROM(
2497 IN PRTMP_ADAPTER pAd);
2500 NDIS_STATUS NICInitializeAdapter(
2501 IN PRTMP_ADAPTER pAd,
2502 IN BOOLEAN bHardReset);
2504 NDIS_STATUS NICInitializeAsic(
2505 IN PRTMP_ADAPTER pAd,
2506 IN BOOLEAN bHardReset);
2509 IN PRTMP_ADAPTER pAd);
2511 VOID RTMPRingCleanUp(
2512 IN PRTMP_ADAPTER pAd,
2516 IN PRTMP_ADAPTER pAd);
2518 VOID NICResetFromError(
2519 IN PRTMP_ADAPTER pAd);
2521 NDIS_STATUS NICLoadFirmware(
2522 IN PRTMP_ADAPTER pAd);
2524 VOID NICEraseFirmware(
2525 IN PRTMP_ADAPTER pAd);
2527 NDIS_STATUS NICLoadRateSwitchingParams(
2528 IN PRTMP_ADAPTER pAd);
2530 BOOLEAN NICCheckForHang(
2531 IN PRTMP_ADAPTER pAd);
2533 VOID NICUpdateFifoStaCounters(
2534 IN PRTMP_ADAPTER pAd);
2536 VOID NICUpdateRawCounters(
2537 IN PRTMP_ADAPTER pAd);
2539 VOID RTMPZeroMemory(
2543 ULONG RTMPCompareMemory(
2548 VOID RTMPMoveMemory(
2561 VOID RTMPPatchMacBbpBug(
2562 IN PRTMP_ADAPTER pAd);
2565 IN PRTMP_ADAPTER pAd,
2566 IN PRALINK_TIMER_STRUCT pTimer,
2567 IN PVOID pTimerFunc,
2572 IN PRALINK_TIMER_STRUCT pTimer,
2577 IN PRALINK_TIMER_STRUCT pTimer,
2580 VOID RTMPCancelTimer(
2581 IN PRALINK_TIMER_STRUCT pTimer,
2582 OUT BOOLEAN *pCancelled);
2585 IN PRTMP_ADAPTER pAd,
2588 VOID RTMPSetSignalLED(
2589 IN PRTMP_ADAPTER pAd,
2590 IN NDIS_802_11_RSSI Dbm);
2592 VOID RTMPEnableRxTx(
2593 IN PRTMP_ADAPTER pAd);
2596 // prototype in action.c
2598 VOID ActionStateMachineInit(
2599 IN PRTMP_ADAPTER pAd,
2600 IN STATE_MACHINE *S,
2601 OUT STATE_MACHINE_FUNC Trans[]);
2603 VOID MlmeADDBAAction(
2604 IN PRTMP_ADAPTER pAd,
2605 IN MLME_QUEUE_ELEM *Elem);
2607 VOID MlmeDELBAAction(
2608 IN PRTMP_ADAPTER pAd,
2609 IN MLME_QUEUE_ELEM *Elem);
2612 IN PRTMP_ADAPTER pAd,
2613 IN MLME_QUEUE_ELEM *Elem);
2615 VOID MlmeInvalidAction(
2616 IN PRTMP_ADAPTER pAd,
2617 IN MLME_QUEUE_ELEM *Elem);
2620 IN PRTMP_ADAPTER pAd,
2621 IN MLME_QUEUE_ELEM *Elem);
2623 VOID PeerAddBAReqAction(
2624 IN PRTMP_ADAPTER pAd,
2625 IN MLME_QUEUE_ELEM *Elem);
2627 VOID PeerAddBARspAction(
2628 IN PRTMP_ADAPTER pAd,
2629 IN MLME_QUEUE_ELEM *Elem);
2631 VOID PeerDelBAAction(
2632 IN PRTMP_ADAPTER pAd,
2633 IN MLME_QUEUE_ELEM *Elem);
2636 IN PRTMP_ADAPTER pAd,
2637 IN MLME_QUEUE_ELEM *Elem);
2639 VOID SendPSMPAction(
2640 IN PRTMP_ADAPTER pAd,
2645 IN PRTMP_ADAPTER pAd,
2646 IN MLME_QUEUE_ELEM *Elem);
2648 VOID PeerPublicAction(
2649 IN PRTMP_ADAPTER pAd,
2650 IN MLME_QUEUE_ELEM *Elem);
2653 IN PRTMP_ADAPTER pAd,
2654 IN MLME_QUEUE_ELEM *Elem);
2657 IN PRTMP_ADAPTER pAd,
2658 IN MLME_QUEUE_ELEM *Elem);
2660 VOID RECBATimerTimeout(
2661 IN PVOID SystemSpecific1,
2662 IN PVOID FunctionContext,
2663 IN PVOID SystemSpecific2,
2664 IN PVOID SystemSpecific3);
2666 VOID ORIBATimerTimeout(
2667 IN PRTMP_ADAPTER pAd);
2669 VOID SendRefreshBAR(
2670 IN PRTMP_ADAPTER pAd,
2671 IN MAC_TABLE_ENTRY *pEntry);
2675 IN PRTMP_ADAPTER pAd,
2676 IN OUT PHEADER_802_11 pHdr80211,
2682 IN PRTMP_ADAPTER pAd,
2683 IN OUT PFRAME_BAR pCntlBar,
2687 VOID InsertActField(
2688 IN PRTMP_ADAPTER pAd,
2689 OUT PUCHAR pFrameBuf,
2690 OUT PULONG pFrameLen,
2694 BOOLEAN CntlEnqueueForRecv(
2695 IN PRTMP_ADAPTER pAd,
2698 IN PFRAME_BA_REQ pMsg);
2701 // Private routines in rtmp_data.c
2703 BOOLEAN RTMPHandleRxDoneInterrupt(
2704 IN PRTMP_ADAPTER pAd);
2706 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
2707 IN PRTMP_ADAPTER pAd,
2708 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
2710 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
2711 IN PRTMP_ADAPTER pAd);
2713 VOID RTMPHandleTBTTInterrupt(
2714 IN PRTMP_ADAPTER pAd);
2716 VOID RTMPHandlePreTBTTInterrupt(
2717 IN PRTMP_ADAPTER pAd);
2719 void RTMPHandleTwakeupInterrupt(
2720 IN PRTMP_ADAPTER pAd);
2722 VOID RTMPHandleRxCoherentInterrupt(
2723 IN PRTMP_ADAPTER pAd);
2725 BOOLEAN TxFrameIsAggregatible(
2726 IN PRTMP_ADAPTER pAd,
2727 IN PUCHAR pPrevAddr1,
2728 IN PUCHAR p8023hdr);
2730 BOOLEAN PeerIsAggreOn(
2731 IN PRTMP_ADAPTER pAd,
2733 IN PMAC_TABLE_ENTRY pMacEntry);
2736 NDIS_STATUS Sniff2BytesFromNdisBuffer(
2737 IN PNDIS_BUFFER pFirstBuffer,
2738 IN UCHAR DesiredOffset,
2742 NDIS_STATUS STASendPacket(
2743 IN PRTMP_ADAPTER pAd,
2744 IN PNDIS_PACKET pPacket);
2746 VOID STASendPackets(
2747 IN NDIS_HANDLE MiniportAdapterContext,
2748 IN PPNDIS_PACKET ppPacketArray,
2749 IN UINT NumberOfPackets);
2751 VOID RTMPDeQueuePacket(
2752 IN PRTMP_ADAPTER pAd,
2753 IN BOOLEAN bIntContext,
2755 IN UCHAR Max_Tx_Packets);
2757 NDIS_STATUS RTMPHardTransmit(
2758 IN PRTMP_ADAPTER pAd,
2759 IN PNDIS_PACKET pPacket,
2761 OUT PULONG pFreeTXDLeft);
2763 NDIS_STATUS STAHardTransmit(
2764 IN PRTMP_ADAPTER pAd,
2768 VOID STARxEAPOLFrameIndicate(
2769 IN PRTMP_ADAPTER pAd,
2770 IN MAC_TABLE_ENTRY *pEntry,
2772 IN UCHAR FromWhichBSSID);
2774 NDIS_STATUS RTMPFreeTXDRequest(
2775 IN PRTMP_ADAPTER pAd,
2777 IN UCHAR NumberRequired,
2778 IN PUCHAR FreeNumberIs);
2780 NDIS_STATUS MlmeHardTransmit(
2781 IN PRTMP_ADAPTER pAd,
2783 IN PNDIS_PACKET pPacket);
2785 NDIS_STATUS MlmeHardTransmitMgmtRing(
2786 IN PRTMP_ADAPTER pAd,
2788 IN PNDIS_PACKET pPacket);
2791 NDIS_STATUS MlmeHardTransmitTxRing(
2792 IN PRTMP_ADAPTER pAd,
2794 IN PNDIS_PACKET pPacket);
2796 NDIS_STATUS MlmeDataHardTransmit(
2797 IN PRTMP_ADAPTER pAd,
2799 IN PNDIS_PACKET pPacket);
2801 VOID RTMPWriteTxDescriptor(
2802 IN PRTMP_ADAPTER pAd,
2806 #endif // RTMP_MAC_PCI //
2808 USHORT RTMPCalcDuration(
2809 IN PRTMP_ADAPTER pAd,
2814 IN PRTMP_ADAPTER pAd,
2815 IN PTXWI_STRUC pTxWI,
2818 IN BOOLEAN InsTimestamp,
2821 IN BOOLEAN NSeq, // HW new a sequence.
2830 IN HTTRANSMIT_SETTING *pTransmit);
2833 VOID RTMPWriteTxWI_Data(
2834 IN PRTMP_ADAPTER pAd,
2835 IN OUT PTXWI_STRUC pTxWI,
2839 VOID RTMPWriteTxWI_Cache(
2840 IN PRTMP_ADAPTER pAd,
2841 IN OUT PTXWI_STRUC pTxWI,
2844 VOID RTMPSuspendMsduTransmission(
2845 IN PRTMP_ADAPTER pAd);
2847 VOID RTMPResumeMsduTransmission(
2848 IN PRTMP_ADAPTER pAd);
2850 NDIS_STATUS MiniportMMRequest(
2851 IN PRTMP_ADAPTER pAd,
2856 //+++mark by shiang, now this function merge to MiniportMMRequest()
2857 //---mark by shiang, now this function merge to MiniportMMRequest()
2859 VOID RTMPSendNullFrame(
2860 IN PRTMP_ADAPTER pAd,
2862 IN BOOLEAN bQosNull);
2864 VOID RTMPSendDisassociationFrame(
2865 IN PRTMP_ADAPTER pAd);
2867 VOID RTMPSendRTSFrame(
2868 IN PRTMP_ADAPTER pAd,
2870 IN unsigned int NextMpduSize,
2873 IN USHORT AckDuration,
2877 PQUEUE_HEADER RTMPCheckTxSwQueue(
2878 IN PRTMP_ADAPTER pAd,
2881 VOID RTMPReportMicError(
2882 IN PRTMP_ADAPTER pAd,
2883 IN PCIPHER_KEY pWpaKey);
2885 VOID WpaMicFailureReportFrame(
2886 IN PRTMP_ADAPTER pAd,
2887 IN MLME_QUEUE_ELEM *Elem);
2889 VOID WpaDisassocApAndBlockAssoc(
2890 IN PVOID SystemSpecific1,
2891 IN PVOID FunctionContext,
2892 IN PVOID SystemSpecific2,
2893 IN PVOID SystemSpecific3);
2895 VOID WpaStaPairwiseKeySetting(
2896 IN PRTMP_ADAPTER pAd);
2898 VOID WpaStaGroupKeySetting(
2899 IN PRTMP_ADAPTER pAd);
2901 NDIS_STATUS RTMPCloneNdisPacket(
2902 IN PRTMP_ADAPTER pAd,
2903 IN BOOLEAN pInsAMSDUHdr,
2904 IN PNDIS_PACKET pInPacket,
2905 OUT PNDIS_PACKET *ppOutPacket);
2907 NDIS_STATUS RTMPAllocateNdisPacket(
2908 IN PRTMP_ADAPTER pAd,
2909 IN PNDIS_PACKET *pPacket,
2915 VOID RTMPFreeNdisPacket(
2916 IN PRTMP_ADAPTER pAd,
2917 IN PNDIS_PACKET pPacket);
2919 BOOLEAN RTMPFreeTXDUponTxDmaDone(
2920 IN PRTMP_ADAPTER pAd,
2923 BOOLEAN RTMPCheckDHCPFrame(
2924 IN PRTMP_ADAPTER pAd,
2925 IN PNDIS_PACKET pPacket);
2928 BOOLEAN RTMPCheckEtherType(
2929 IN PRTMP_ADAPTER pAd,
2930 IN PNDIS_PACKET pPacket);
2934 // Private routines in rtmp_wep.c
2936 VOID RTMPInitWepEngine(
2937 IN PRTMP_ADAPTER pAd,
2943 VOID RTMPEncryptData(
2944 IN PRTMP_ADAPTER pAd,
2949 BOOLEAN RTMPSoftDecryptWEP(
2950 IN PRTMP_ADAPTER pAd,
2952 IN ULONG DataByteCnt,
2953 IN PCIPHER_KEY pGroupKey);
2956 IN PRTMP_ADAPTER pAd,
2960 IN PARCFOURCONTEXT Ctx,
2965 IN PARCFOURCONTEXT Ctx);
2967 VOID ARCFOUR_DECRYPT(
2968 IN PARCFOURCONTEXT Ctx,
2973 VOID ARCFOUR_ENCRYPT(
2974 IN PARCFOURCONTEXT Ctx,
2979 VOID WPAARCFOUR_ENCRYPT(
2980 IN PARCFOURCONTEXT Ctx,
2985 UINT RTMP_CALC_FCS32(
2994 // Asic/RF/BBP related functions
2996 VOID AsicAdjustTxPower(
2997 IN PRTMP_ADAPTER pAd);
2999 VOID AsicUpdateProtect(
3000 IN PRTMP_ADAPTER pAd,
3001 IN USHORT OperaionMode,
3003 IN BOOLEAN bDisableBGProtect,
3004 IN BOOLEAN bNonGFExist);
3006 VOID AsicSwitchChannel(
3007 IN PRTMP_ADAPTER pAd,
3011 VOID AsicLockChannel(
3012 IN PRTMP_ADAPTER pAd,
3015 VOID AsicRfTuningExec(
3016 IN PVOID SystemSpecific1,
3017 IN PVOID FunctionContext,
3018 IN PVOID SystemSpecific2,
3019 IN PVOID SystemSpecific3);
3021 VOID AsicResetBBPAgent(
3022 IN PRTMP_ADAPTER pAd);
3024 VOID AsicSleepThenAutoWakeup(
3025 IN PRTMP_ADAPTER pAd,
3026 IN USHORT TbttNumToNextWakeUp);
3028 VOID AsicForceSleep(
3029 IN PRTMP_ADAPTER pAd);
3031 VOID AsicForceWakeup(
3032 IN PRTMP_ADAPTER pAd,
3033 IN BOOLEAN bFromTx);
3036 IN PRTMP_ADAPTER pAd,
3039 VOID AsicSetMcastWC(
3040 IN PRTMP_ADAPTER pAd);
3042 VOID AsicDelWcidTab(
3043 IN PRTMP_ADAPTER pAd,
3047 IN PRTMP_ADAPTER pAd);
3049 VOID AsicDisableRDG(
3050 IN PRTMP_ADAPTER pAd);
3052 VOID AsicDisableSync(
3053 IN PRTMP_ADAPTER pAd);
3055 VOID AsicEnableBssSync(
3056 IN PRTMP_ADAPTER pAd);
3058 VOID AsicEnableIbssSync(
3059 IN PRTMP_ADAPTER pAd);
3061 VOID AsicSetEdcaParm(
3062 IN PRTMP_ADAPTER pAd,
3063 IN PEDCA_PARM pEdcaParm);
3065 VOID AsicSetSlotTime(
3066 IN PRTMP_ADAPTER pAd,
3067 IN BOOLEAN bUseShortSlotTime);
3069 VOID AsicAddSharedKeyEntry(
3070 IN PRTMP_ADAPTER pAd,
3078 VOID AsicRemoveSharedKeyEntry(
3079 IN PRTMP_ADAPTER pAd,
3083 VOID AsicUpdateWCIDAttribute(
3084 IN PRTMP_ADAPTER pAd,
3088 IN BOOLEAN bUsePairewiseKeyTable);
3090 VOID AsicUpdateWCIDIVEIV(
3091 IN PRTMP_ADAPTER pAd,
3096 VOID AsicUpdateRxWCIDTable(
3097 IN PRTMP_ADAPTER pAd,
3101 VOID AsicAddKeyEntry(
3102 IN PRTMP_ADAPTER pAd,
3106 IN PCIPHER_KEY pCipherKey,
3107 IN BOOLEAN bUsePairewiseKeyTable,
3110 VOID AsicAddPairwiseKeyEntry(
3111 IN PRTMP_ADAPTER pAd,
3114 IN CIPHER_KEY *pCipherKey);
3116 VOID AsicRemovePairwiseKeyEntry(
3117 IN PRTMP_ADAPTER pAd,
3121 BOOLEAN AsicSendCommandToMcu(
3122 IN PRTMP_ADAPTER pAd,
3130 BOOLEAN AsicCheckCommanOk(
3131 IN PRTMP_ADAPTER pAd,
3133 #endif // RTMP_MAC_PCI //
3135 VOID MacAddrRandomBssid(
3136 IN PRTMP_ADAPTER pAd,
3139 VOID MgtMacHeaderInit(
3140 IN PRTMP_ADAPTER pAd,
3141 IN OUT PHEADER_802_11 pHdr80211,
3148 IN PRTMP_ADAPTER pAd);
3151 IN PRTMP_ADAPTER pAd);
3158 IN PRTMP_ADAPTER pAd,
3161 ULONG BssTableSearch(
3166 ULONG BssSsidTableSearch(
3173 ULONG BssTableSearchWithSSID(
3180 ULONG BssSsidTableSearchBySSID(
3185 VOID BssTableDeleteEntry(
3186 IN OUT PBSS_TABLE pTab,
3190 VOID BATableDeleteORIEntry(
3191 IN OUT PRTMP_ADAPTER pAd,
3192 IN BA_ORI_ENTRY *pBAORIEntry);
3195 IN PRTMP_ADAPTER pAd,
3196 OUT PBSS_ENTRY pBss,
3201 IN USHORT BeaconPeriod,
3204 IN USHORT CapabilityInfo,
3206 IN UCHAR SupRateLen,
3208 IN UCHAR ExtRateLen,
3209 IN HT_CAPABILITY_IE *pHtCapability,
3210 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3211 IN UCHAR HtCapabilityLen,
3212 IN UCHAR AddHtInfoLen,
3213 IN UCHAR NewExtChanOffset,
3216 IN LARGE_INTEGER TimeStamp,
3218 IN PEDCA_PARM pEdcaParm,
3219 IN PQOS_CAPABILITY_PARM pQosCapability,
3220 IN PQBSS_LOAD_PARM pQbssLoad,
3221 IN USHORT LengthVIE,
3222 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3224 ULONG BssTableSetEntry(
3225 IN PRTMP_ADAPTER pAd,
3226 OUT PBSS_TABLE pTab,
3231 IN USHORT BeaconPeriod,
3234 IN USHORT CapabilityInfo,
3236 IN UCHAR SupRateLen,
3238 IN UCHAR ExtRateLen,
3239 IN HT_CAPABILITY_IE *pHtCapability,
3240 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3241 IN UCHAR HtCapabilityLen,
3242 IN UCHAR AddHtInfoLen,
3243 IN UCHAR NewExtChanOffset,
3246 IN LARGE_INTEGER TimeStamp,
3248 IN PEDCA_PARM pEdcaParm,
3249 IN PQOS_CAPABILITY_PARM pQosCapability,
3250 IN PQBSS_LOAD_PARM pQbssLoad,
3251 IN USHORT LengthVIE,
3252 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3254 VOID BATableInsertEntry(
3255 IN PRTMP_ADAPTER pAd,
3257 IN USHORT TimeOutValue,
3258 IN USHORT StartingSeq,
3261 IN UCHAR OriginatorStatus,
3262 IN BOOLEAN IsRecipient);
3264 VOID BssTableSsidSort(
3265 IN PRTMP_ADAPTER pAd,
3266 OUT BSS_TABLE *OutTab,
3270 VOID BssTableSortByRssi(
3271 IN OUT BSS_TABLE *OutTab);
3273 VOID BssCipherParse(
3274 IN OUT PBSS_ENTRY pBss);
3276 NDIS_STATUS MlmeQueueInit(
3277 IN MLME_QUEUE *Queue);
3279 VOID MlmeQueueDestroy(
3280 IN MLME_QUEUE *Queue);
3282 BOOLEAN MlmeEnqueue(
3283 IN PRTMP_ADAPTER pAd,
3289 BOOLEAN MlmeEnqueueForRecv(
3290 IN PRTMP_ADAPTER pAd,
3292 IN ULONG TimeStampHigh,
3293 IN ULONG TimeStampLow,
3302 BOOLEAN MlmeDequeue(
3303 IN MLME_QUEUE *Queue,
3304 OUT MLME_QUEUE_ELEM **Elem);
3306 VOID MlmeRestartStateMachine(
3307 IN PRTMP_ADAPTER pAd);
3309 BOOLEAN MlmeQueueEmpty(
3310 IN MLME_QUEUE *Queue);
3312 BOOLEAN MlmeQueueFull(
3313 IN MLME_QUEUE *Queue);
3315 BOOLEAN MsgTypeSubst(
3316 IN PRTMP_ADAPTER pAd,
3317 IN PFRAME_802_11 pFrame,
3321 VOID StateMachineInit(
3322 IN STATE_MACHINE *Sm,
3323 IN STATE_MACHINE_FUNC Trans[],
3326 IN STATE_MACHINE_FUNC DefFunc,
3330 VOID StateMachineSetAction(
3331 IN STATE_MACHINE *S,
3334 IN STATE_MACHINE_FUNC F);
3336 VOID StateMachinePerformAction(
3337 IN PRTMP_ADAPTER pAd,
3338 IN STATE_MACHINE *S,
3339 IN MLME_QUEUE_ELEM *Elem);
3342 IN PRTMP_ADAPTER pAd,
3343 IN MLME_QUEUE_ELEM *Elem);
3345 VOID AssocStateMachineInit(
3346 IN PRTMP_ADAPTER pAd,
3347 IN STATE_MACHINE *Sm,
3348 OUT STATE_MACHINE_FUNC Trans[]);
3350 VOID ReassocTimeout(
3351 IN PVOID SystemSpecific1,
3352 IN PVOID FunctionContext,
3353 IN PVOID SystemSpecific2,
3354 IN PVOID SystemSpecific3);
3357 IN PVOID SystemSpecific1,
3358 IN PVOID FunctionContext,
3359 IN PVOID SystemSpecific2,
3360 IN PVOID SystemSpecific3);
3362 VOID DisassocTimeout(
3363 IN PVOID SystemSpecific1,
3364 IN PVOID FunctionContext,
3365 IN PVOID SystemSpecific2,
3366 IN PVOID SystemSpecific3);
3368 //----------------------------------------------
3369 VOID MlmeAssocReqAction(
3370 IN PRTMP_ADAPTER pAd,
3371 IN MLME_QUEUE_ELEM *Elem);
3373 VOID MlmeReassocReqAction(
3374 IN PRTMP_ADAPTER pAd,
3375 IN MLME_QUEUE_ELEM *Elem);
3377 VOID MlmeDisassocReqAction(
3378 IN PRTMP_ADAPTER pAd,
3379 IN MLME_QUEUE_ELEM *Elem);
3381 VOID PeerAssocRspAction(
3382 IN PRTMP_ADAPTER pAd,
3383 IN MLME_QUEUE_ELEM *Elem);
3385 VOID PeerReassocRspAction(
3386 IN PRTMP_ADAPTER pAd,
3387 IN MLME_QUEUE_ELEM *Elem);
3389 VOID PeerDisassocAction(
3390 IN PRTMP_ADAPTER pAd,
3391 IN MLME_QUEUE_ELEM *Elem);
3393 VOID DisassocTimeoutAction(
3394 IN PRTMP_ADAPTER pAd,
3395 IN MLME_QUEUE_ELEM *Elem);
3397 VOID AssocTimeoutAction(
3398 IN PRTMP_ADAPTER pAd,
3399 IN MLME_QUEUE_ELEM *Elem);
3401 VOID ReassocTimeoutAction(
3402 IN PRTMP_ADAPTER pAd,
3403 IN MLME_QUEUE_ELEM *Elem);
3406 IN PRTMP_ADAPTER pAd,
3409 VOID InvalidStateWhenAssoc(
3410 IN PRTMP_ADAPTER pAd,
3411 IN MLME_QUEUE_ELEM *Elem);
3413 VOID InvalidStateWhenReassoc(
3414 IN PRTMP_ADAPTER pAd,
3415 IN MLME_QUEUE_ELEM *Elem);
3417 VOID InvalidStateWhenDisassociate(
3418 IN PRTMP_ADAPTER pAd,
3419 IN MLME_QUEUE_ELEM *Elem);
3422 VOID MlmeCntlConfirm(
3423 IN PRTMP_ADAPTER pAd,
3426 #endif // RTMP_MAC_USB //
3429 IN PRTMP_ADAPTER pAd);
3431 VOID ComposeNullFrame(
3432 IN PRTMP_ADAPTER pAd);
3435 IN PRTMP_ADAPTER pAd,
3437 IN USHORT CapabilityInfo,
3440 IN UCHAR SupRateLen,
3442 IN UCHAR ExtRateLen,
3443 IN PEDCA_PARM pEdcaParm,
3444 IN HT_CAPABILITY_IE *pHtCapability,
3445 IN UCHAR HtCapabilityLen,
3446 IN ADD_HT_INFO_IE *pAddHtInfo);
3448 VOID AuthStateMachineInit(
3449 IN PRTMP_ADAPTER pAd,
3450 IN PSTATE_MACHINE sm,
3451 OUT STATE_MACHINE_FUNC Trans[]);
3454 IN PVOID SystemSpecific1,
3455 IN PVOID FunctionContext,
3456 IN PVOID SystemSpecific2,
3457 IN PVOID SystemSpecific3);
3459 VOID MlmeAuthReqAction(
3460 IN PRTMP_ADAPTER pAd,
3461 IN MLME_QUEUE_ELEM *Elem);
3463 VOID PeerAuthRspAtSeq2Action(
3464 IN PRTMP_ADAPTER pAd,
3465 IN MLME_QUEUE_ELEM *Elem);
3467 VOID PeerAuthRspAtSeq4Action(
3468 IN PRTMP_ADAPTER pAd,
3469 IN MLME_QUEUE_ELEM *Elem);
3471 VOID AuthTimeoutAction(
3472 IN PRTMP_ADAPTER pAd,
3473 IN MLME_QUEUE_ELEM *Elem);
3476 IN PRTMP_ADAPTER pAd,
3479 VOID MlmeDeauthReqAction(
3480 IN PRTMP_ADAPTER pAd,
3481 IN MLME_QUEUE_ELEM *Elem);
3483 VOID InvalidStateWhenAuth(
3484 IN PRTMP_ADAPTER pAd,
3485 IN MLME_QUEUE_ELEM *Elem);
3487 //=============================================
3489 VOID AuthRspStateMachineInit(
3490 IN PRTMP_ADAPTER pAd,
3491 IN PSTATE_MACHINE Sm,
3492 IN STATE_MACHINE_FUNC Trans[]);
3494 VOID PeerDeauthAction(
3495 IN PRTMP_ADAPTER pAd,
3496 IN MLME_QUEUE_ELEM *Elem);
3498 VOID PeerAuthSimpleRspGenAndSend(
3499 IN PRTMP_ADAPTER pAd,
3500 IN PHEADER_802_11 pHdr80211,
3507 // Private routines in dls.c
3510 //========================================
3512 VOID SyncStateMachineInit(
3513 IN PRTMP_ADAPTER pAd,
3514 IN STATE_MACHINE *Sm,
3515 OUT STATE_MACHINE_FUNC Trans[]);
3518 IN PVOID SystemSpecific1,
3519 IN PVOID FunctionContext,
3520 IN PVOID SystemSpecific2,
3521 IN PVOID SystemSpecific3);
3524 IN PVOID SystemSpecific1,
3525 IN PVOID FunctionContext,
3526 IN PVOID SystemSpecific2,
3527 IN PVOID SystemSpecific3);
3529 VOID InvalidStateWhenScan(
3530 IN PRTMP_ADAPTER pAd,
3531 IN MLME_QUEUE_ELEM *Elem);
3533 VOID InvalidStateWhenJoin(
3534 IN PRTMP_ADAPTER pAd,
3535 IN MLME_QUEUE_ELEM *Elem);
3537 VOID InvalidStateWhenStart(
3538 IN PRTMP_ADAPTER pAd,
3539 IN MLME_QUEUE_ELEM *Elem);
3541 VOID EnqueueProbeRequest(
3542 IN PRTMP_ADAPTER pAd);
3544 BOOLEAN ScanRunning(
3545 IN PRTMP_ADAPTER pAd);
3546 //=========================================
3549 IN PRTMP_ADAPTER pAd,
3550 IN STATE_MACHINE *S,
3551 OUT STATE_MACHINE_FUNC Trans[]);
3553 VOID MlmeCntlMachinePerformAction(
3554 IN PRTMP_ADAPTER pAd,
3555 IN STATE_MACHINE *S,
3556 IN MLME_QUEUE_ELEM *Elem);
3559 IN PRTMP_ADAPTER pAd,
3560 IN MLME_QUEUE_ELEM *Elem);
3562 VOID CntlOidScanProc(
3563 IN PRTMP_ADAPTER pAd,
3564 IN MLME_QUEUE_ELEM *Elem);
3566 VOID CntlOidSsidProc(
3567 IN PRTMP_ADAPTER pAd,
3568 IN MLME_QUEUE_ELEM * Elem);
3570 VOID CntlOidRTBssidProc(
3571 IN PRTMP_ADAPTER pAd,
3572 IN MLME_QUEUE_ELEM * Elem);
3574 VOID CntlMlmeRoamingProc(
3575 IN PRTMP_ADAPTER pAd,
3576 IN MLME_QUEUE_ELEM * Elem);
3578 VOID CntlWaitDisassocProc(
3579 IN PRTMP_ADAPTER pAd,
3580 IN MLME_QUEUE_ELEM *Elem);
3582 VOID CntlWaitJoinProc(
3583 IN PRTMP_ADAPTER pAd,
3584 IN MLME_QUEUE_ELEM *Elem);
3586 VOID CntlWaitReassocProc(
3587 IN PRTMP_ADAPTER pAd,
3588 IN MLME_QUEUE_ELEM *Elem);
3590 VOID CntlWaitStartProc(
3591 IN PRTMP_ADAPTER pAd,
3592 IN MLME_QUEUE_ELEM *Elem);
3594 VOID CntlWaitAuthProc(
3595 IN PRTMP_ADAPTER pAd,
3596 IN MLME_QUEUE_ELEM *Elem);
3598 VOID CntlWaitAuthProc2(
3599 IN PRTMP_ADAPTER pAd,
3600 IN MLME_QUEUE_ELEM *Elem);
3602 VOID CntlWaitAssocProc(
3603 IN PRTMP_ADAPTER pAd,
3604 IN MLME_QUEUE_ELEM *Elem);
3607 IN PRTMP_ADAPTER pAd,
3611 IN PRTMP_ADAPTER pAd,
3612 IN BOOLEAN IsReqFromAP);
3614 VOID IterateOnBssTab(
3615 IN PRTMP_ADAPTER pAd);
3617 VOID IterateOnBssTab2(
3618 IN PRTMP_ADAPTER pAd);;
3621 IN PRTMP_ADAPTER pAd,
3622 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
3626 IN PRTMP_ADAPTER pAd,
3627 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
3629 IN USHORT CapabilityInfo,
3631 IN USHORT ListenIntv);
3634 IN PRTMP_ADAPTER pAd,
3635 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
3641 VOID DisassocParmFill(
3642 IN PRTMP_ADAPTER pAd,
3643 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
3648 IN PRTMP_ADAPTER pAd,
3649 IN OUT MLME_START_REQ_STRUCT *StartReq,
3654 IN PRTMP_ADAPTER pAd,
3655 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
3660 IN PRTMP_ADAPTER pAd);
3662 VOID EnqueueBeaconFrame(
3663 IN PRTMP_ADAPTER pAd);
3665 VOID MlmeJoinReqAction(
3666 IN PRTMP_ADAPTER pAd,
3667 IN MLME_QUEUE_ELEM *Elem);
3669 VOID MlmeScanReqAction(
3670 IN PRTMP_ADAPTER pAd,
3671 IN MLME_QUEUE_ELEM *Elem);
3673 VOID MlmeStartReqAction(
3674 IN PRTMP_ADAPTER pAd,
3675 IN MLME_QUEUE_ELEM *Elem);
3677 VOID ScanTimeoutAction(
3678 IN PRTMP_ADAPTER pAd,
3679 IN MLME_QUEUE_ELEM *Elem);
3681 VOID BeaconTimeoutAtJoinAction(
3682 IN PRTMP_ADAPTER pAd,
3683 IN MLME_QUEUE_ELEM *Elem);
3685 VOID PeerBeaconAtScanAction(
3686 IN PRTMP_ADAPTER pAd,
3687 IN MLME_QUEUE_ELEM *Elem);
3689 VOID PeerBeaconAtJoinAction(
3690 IN PRTMP_ADAPTER pAd,
3691 IN MLME_QUEUE_ELEM *Elem);
3694 IN PRTMP_ADAPTER pAd,
3695 IN MLME_QUEUE_ELEM *Elem);
3697 VOID PeerProbeReqAction(
3698 IN PRTMP_ADAPTER pAd,
3699 IN MLME_QUEUE_ELEM *Elem);
3701 VOID ScanNextChannel(
3702 IN PRTMP_ADAPTER pAd);
3704 ULONG MakeIbssBeacon(
3705 IN PRTMP_ADAPTER pAd);
3707 BOOLEAN MlmeScanReqSanity(
3708 IN PRTMP_ADAPTER pAd,
3714 OUT UCHAR *ScanType);
3716 BOOLEAN PeerBeaconAndProbeRspSanity(
3717 IN PRTMP_ADAPTER pAd,
3720 IN UCHAR MsgChannel,
3724 OUT UCHAR *pSsidLen,
3725 OUT UCHAR *pBssType,
3726 OUT USHORT *pBeaconPeriod,
3727 OUT UCHAR *pChannel,
3728 OUT UCHAR *pNewChannel,
3729 OUT LARGE_INTEGER *pTimestamp,
3730 OUT CF_PARM *pCfParm,
3731 OUT USHORT *pAtimWin,
3732 OUT USHORT *pCapabilityInfo,
3734 OUT UCHAR *pDtimCount,
3735 OUT UCHAR *pDtimPeriod,
3736 OUT UCHAR *pBcastFlag,
3737 OUT UCHAR *pMessageToMe,
3738 OUT UCHAR SupRate[],
3739 OUT UCHAR *pSupRateLen,
3740 OUT UCHAR ExtRate[],
3741 OUT UCHAR *pExtRateLen,
3742 OUT UCHAR *pCkipFlag,
3743 OUT UCHAR *pAironetCellPowerLimit,
3744 OUT PEDCA_PARM pEdcaParm,
3745 OUT PQBSS_LOAD_PARM pQbssLoad,
3746 OUT PQOS_CAPABILITY_PARM pQosCapability,
3747 OUT ULONG *pRalinkIe,
3748 OUT UCHAR *pHtCapabilityLen,
3749 OUT UCHAR *pPreNHtCapabilityLen,
3750 OUT HT_CAPABILITY_IE *pHtCapability,
3751 OUT UCHAR *AddHtInfoLen,
3752 OUT ADD_HT_INFO_IE *AddHtInfo,
3753 OUT UCHAR *NewExtChannel,
3754 OUT USHORT *LengthVIE,
3755 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
3757 BOOLEAN PeerAddBAReqActionSanity(
3758 IN PRTMP_ADAPTER pAd,
3763 BOOLEAN PeerAddBARspActionSanity(
3764 IN PRTMP_ADAPTER pAd,
3768 BOOLEAN PeerDelBAActionSanity(
3769 IN PRTMP_ADAPTER pAd,
3774 BOOLEAN MlmeAssocReqSanity(
3775 IN PRTMP_ADAPTER pAd,
3779 OUT USHORT *CapabilityInfo,
3781 OUT USHORT *ListenIntv);
3783 BOOLEAN MlmeAuthReqSanity(
3784 IN PRTMP_ADAPTER pAd,
3791 BOOLEAN MlmeStartReqSanity(
3792 IN PRTMP_ADAPTER pAd,
3796 OUT UCHAR *Ssidlen);
3798 BOOLEAN PeerAuthSanity(
3799 IN PRTMP_ADAPTER pAd,
3806 OUT CHAR ChlgText[]);
3808 BOOLEAN PeerAssocRspSanity(
3809 IN PRTMP_ADAPTER pAd,
3813 OUT USHORT *pCapabilityInfo,
3814 OUT USHORT *pStatus,
3816 OUT UCHAR SupRate[],
3817 OUT UCHAR *pSupRateLen,
3818 OUT UCHAR ExtRate[],
3819 OUT UCHAR *pExtRateLen,
3820 OUT HT_CAPABILITY_IE *pHtCapability,
3821 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3822 OUT UCHAR *pHtCapabilityLen,
3823 OUT UCHAR *pAddHtInfoLen,
3824 OUT UCHAR *pNewExtChannelOffset,
3825 OUT PEDCA_PARM pEdcaParm,
3826 OUT UCHAR *pCkipFlag);
3828 BOOLEAN PeerDisassocSanity(
3829 IN PRTMP_ADAPTER pAd,
3833 OUT USHORT *Reason);
3835 BOOLEAN PeerWpaMessageSanity(
3836 IN PRTMP_ADAPTER pAd,
3837 IN PEAPOL_PACKET pMsg,
3840 IN MAC_TABLE_ENTRY *pEntry);
3842 BOOLEAN PeerDeauthSanity(
3843 IN PRTMP_ADAPTER pAd,
3847 OUT USHORT *Reason);
3849 BOOLEAN PeerProbeReqSanity(
3850 IN PRTMP_ADAPTER pAd,
3855 OUT UCHAR *pSsidLen);
3861 OUT UCHAR *BcastFlag,
3862 OUT UCHAR *DtimCount,
3863 OUT UCHAR *DtimPeriod,
3864 OUT UCHAR *MessageToMe);
3866 UCHAR ChannelSanity(
3867 IN PRTMP_ADAPTER pAd,
3870 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
3871 IN PBSS_ENTRY pBss);
3873 BOOLEAN MlmeDelBAReqSanity(
3874 IN PRTMP_ADAPTER pAd,
3878 BOOLEAN MlmeAddBAReqSanity(
3879 IN PRTMP_ADAPTER pAd,
3884 ULONG MakeOutgoingFrame(
3886 OUT ULONG *Length, ...);
3889 IN PRTMP_ADAPTER pAd,
3893 IN PRTMP_ADAPTER pAd);
3895 VOID AsicUpdateAutoFallBackTable(
3896 IN PRTMP_ADAPTER pAd,
3899 VOID MlmePeriodicExec(
3900 IN PVOID SystemSpecific1,
3901 IN PVOID FunctionContext,
3902 IN PVOID SystemSpecific2,
3903 IN PVOID SystemSpecific3);
3906 IN PVOID SystemSpecific1,
3907 IN PVOID FunctionContext,
3908 IN PVOID SystemSpecific2,
3909 IN PVOID SystemSpecific3);
3911 VOID STAMlmePeriodicExec(
3915 IN PRTMP_ADAPTER pAd);
3917 VOID MlmeAutoReconnectLastSSID(
3918 IN PRTMP_ADAPTER pAd);
3920 BOOLEAN MlmeValidateSSID(
3924 VOID MlmeCheckForRoaming(
3925 IN PRTMP_ADAPTER pAd,
3928 BOOLEAN MlmeCheckForFastRoaming(
3929 IN PRTMP_ADAPTER pAd);
3931 VOID MlmeDynamicTxRateSwitching(
3932 IN PRTMP_ADAPTER pAd);
3935 IN PRTMP_ADAPTER pAd,
3936 IN PMAC_TABLE_ENTRY pEntry,
3937 IN PRTMP_TX_RATE_SWITCH pTxRate);
3939 VOID MlmeSelectTxRateTable(
3940 IN PRTMP_ADAPTER pAd,
3941 IN PMAC_TABLE_ENTRY pEntry,
3943 IN PUCHAR pTableSize,
3944 IN PUCHAR pInitTxRateIdx);
3946 VOID MlmeCalculateChannelQuality(
3947 IN PRTMP_ADAPTER pAd,
3948 IN PMAC_TABLE_ENTRY pMacEntry,
3951 VOID MlmeCheckPsmChange(
3952 IN PRTMP_ADAPTER pAd,
3956 IN PRTMP_ADAPTER pAd,
3959 VOID MlmeSetTxPreamble(
3960 IN PRTMP_ADAPTER pAd,
3961 IN USHORT TxPreamble);
3963 VOID UpdateBasicRateBitmap(
3964 IN PRTMP_ADAPTER pAd);
3966 VOID MlmeUpdateTxRates(
3967 IN PRTMP_ADAPTER pAd,
3971 VOID MlmeUpdateHtTxRates(
3972 IN PRTMP_ADAPTER pAd,
3975 VOID RTMPCheckRates(
3976 IN PRTMP_ADAPTER pAd,
3977 IN OUT UCHAR SupRate[],
3978 IN OUT UCHAR *SupRateLen);
3980 BOOLEAN RTMPCheckChannel(
3981 IN PRTMP_ADAPTER pAd,
3982 IN UCHAR CentralChannel,
3985 BOOLEAN RTMPCheckHt(
3986 IN PRTMP_ADAPTER pAd,
3988 IN OUT HT_CAPABILITY_IE *pHtCapability,
3989 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
3991 VOID StaQuickResponeForRateUpExec(
3992 IN PVOID SystemSpecific1,
3993 IN PVOID FunctionContext,
3994 IN PVOID SystemSpecific2,
3995 IN PVOID SystemSpecific3);
3997 VOID RTMPUpdateMlmeRate(
3998 IN PRTMP_ADAPTER pAd);
4001 IN PRTMP_ADAPTER pAd,
4008 IN PRTMP_ADAPTER pAd,
4011 VOID RTMPFilterCalibration(
4012 IN PRTMP_ADAPTER pAd);
4014 #ifdef RTMP_EFUSE_SUPPORT
4015 //2008/09/11:KH add to support efuse<--
4016 INT set_eFuseGetFreeBlockCount_Proc(
4017 IN PRTMP_ADAPTER pAd,
4020 INT set_eFusedump_Proc(
4021 IN PRTMP_ADAPTER pAd,
4024 INT set_eFuseLoadFromBin_Proc(
4025 IN PRTMP_ADAPTER pAd,
4028 VOID eFusePhysicalReadRegisters(
4029 IN PRTMP_ADAPTER pAd,
4034 int RtmpEfuseSupportCheck(
4035 IN RTMP_ADAPTER *pAd);
4037 INT set_eFuseBufferModeWriteBack_Proc(
4038 IN PRTMP_ADAPTER pAd,
4041 INT eFuseLoadEEPROM(
4042 IN PRTMP_ADAPTER pAd);
4044 INT eFuseWriteEeeppromBuf(
4045 IN PRTMP_ADAPTER pAd);
4047 VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd,
4048 PUINT EfuseFreeBlock);
4051 IN PRTMP_ADAPTER pAd);
4052 //2008/09/11:KH add to support efuse-->
4053 #endif // RTMP_EFUSE_SUPPORT //
4055 // add by johnli, RF power sequence setup
4056 VOID RT30xxLoadRFNormalModeSetup(
4057 IN PRTMP_ADAPTER pAd);
4059 VOID RT30xxLoadRFSleepModeSetup(
4060 IN PRTMP_ADAPTER pAd);
4062 VOID RT30xxReverseRFSleepModeSetup(
4063 IN PRTMP_ADAPTER pAd);
4067 VOID NICInitRT3070RFRegisters(
4068 IN RTMP_ADAPTER *pAd);
4071 VOID NICInitRT3090RFRegisters(
4072 IN RTMP_ADAPTER *pAd);
4075 VOID RT30xxHaltAction(
4076 IN PRTMP_ADAPTER pAd);
4078 VOID RT30xxSetRxAnt(
4079 IN PRTMP_ADAPTER pAd,
4083 VOID AsicEvaluateRxAnt(
4084 IN PRTMP_ADAPTER pAd);
4086 VOID AsicRxAntEvalTimeout(
4087 IN PVOID SystemSpecific1,
4088 IN PVOID FunctionContext,
4089 IN PVOID SystemSpecific2,
4090 IN PVOID SystemSpecific3);
4092 VOID APSDPeriodicExec(
4093 IN PVOID SystemSpecific1,
4094 IN PVOID FunctionContext,
4095 IN PVOID SystemSpecific2,
4096 IN PVOID SystemSpecific3);
4098 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4099 IN PRTMP_ADAPTER pAd,
4100 IN PMAC_TABLE_ENTRY pEntry);
4102 UCHAR RTMPStaFixedTxMode(
4103 IN PRTMP_ADAPTER pAd,
4104 IN PMAC_TABLE_ENTRY pEntry);
4106 VOID RTMPUpdateLegacyTxSetting(
4107 UCHAR fixed_tx_mode,
4108 PMAC_TABLE_ENTRY pEntry);
4110 BOOLEAN RTMPAutoRateSwitchCheck(
4111 IN PRTMP_ADAPTER pAd);
4113 NDIS_STATUS MlmeInit(
4114 IN PRTMP_ADAPTER pAd);
4117 IN PRTMP_ADAPTER pAd);
4120 IN PRTMP_ADAPTER pAd);
4122 VOID MlmeResetRalinkCounters(
4123 IN PRTMP_ADAPTER pAd);
4125 VOID BuildChannelList(
4126 IN PRTMP_ADAPTER pAd);
4129 IN PRTMP_ADAPTER pAd);
4132 IN PRTMP_ADAPTER pAd,
4135 VOID ChangeToCellPowerLimit(
4136 IN PRTMP_ADAPTER pAd,
4137 IN UCHAR AironetCellPowerLimit);
4140 // Prototypes of function definition in rtmp_tkip.c
4142 VOID RTMPInitTkipEngine(
4143 IN PRTMP_ADAPTER pAd,
4152 VOID RTMPInitMICEngine(
4153 IN PRTMP_ADAPTER pAd,
4157 IN UCHAR UserPriority,
4160 BOOLEAN RTMPTkipCompareMICValue(
4161 IN PRTMP_ADAPTER pAd,
4166 IN UCHAR UserPriority,
4169 VOID RTMPCalculateMICValue(
4170 IN PRTMP_ADAPTER pAd,
4171 IN PNDIS_PACKET pPacket,
4173 IN PCIPHER_KEY pKey,
4176 VOID RTMPTkipAppendByte(
4177 IN PTKIP_KEY_INFO pTkip,
4180 VOID RTMPTkipAppend(
4181 IN PTKIP_KEY_INFO pTkip,
4185 VOID RTMPTkipGetMIC(
4186 IN PTKIP_KEY_INFO pTkip);
4188 BOOLEAN RTMPSoftDecryptTKIP(
4189 IN PRTMP_ADAPTER pAd,
4191 IN ULONG DataByteCnt,
4192 IN UCHAR UserPriority,
4193 IN PCIPHER_KEY pWpaKey);
4195 BOOLEAN RTMPSoftDecryptAES(
4196 IN PRTMP_ADAPTER pAd,
4198 IN ULONG DataByteCnt,
4199 IN PCIPHER_KEY pWpaKey);
4204 // Prototypes of function definition in cmm_info.c
4206 INT RT_CfgSetCountryRegion(
4207 IN PRTMP_ADAPTER pAd,
4211 INT RT_CfgSetWirelessMode(
4212 IN PRTMP_ADAPTER pAd,
4215 INT RT_CfgSetShortSlot(
4216 IN PRTMP_ADAPTER pAd,
4219 INT RT_CfgSetWepKey(
4220 IN PRTMP_ADAPTER pAd,
4221 IN PSTRING keyString,
4222 IN CIPHER_KEY *pSharedKey,
4225 INT RT_CfgSetWPAPSKKey(
4226 IN RTMP_ADAPTER *pAd,
4227 IN PSTRING keyString,
4230 OUT PUCHAR pPMKBuf);
4235 // Prototypes of function definition in cmm_info.c
4237 VOID RTMPWPARemoveAllKeys(
4238 IN PRTMP_ADAPTER pAd);
4240 VOID RTMPSetPhyMode(
4241 IN PRTMP_ADAPTER pAd,
4244 VOID RTMPUpdateHTIE(
4245 IN RT_HT_CAPABILITY *pRtHt,
4247 OUT HT_CAPABILITY_IE *pHtCapability,
4248 OUT ADD_HT_INFO_IE *pAddHtInfo);
4250 VOID RTMPAddWcidAttributeEntry(
4251 IN PRTMP_ADAPTER pAd,
4255 IN MAC_TABLE_ENTRY *pEntry);
4257 PSTRING GetEncryptType(
4260 PSTRING GetAuthMode(
4264 IN PRTMP_ADAPTER pAd,
4265 IN OID_SET_HT_PHYMODE *pHTPhyMode);
4267 VOID RTMPSetIndividualHT(
4268 IN PRTMP_ADAPTER pAd,
4271 VOID RTMPSendWirelessEvent(
4272 IN PRTMP_ADAPTER pAd,
4273 IN USHORT Event_flag,
4279 IN PRTMP_ADAPTER pAd,
4281 IN UCHAR RssiNumber);
4283 /*===================================
4284 Function prototype in cmm_wpa.c
4285 =================================== */
4286 VOID RTMPToWirelessSta(
4287 IN PRTMP_ADAPTER pAd,
4288 IN PMAC_TABLE_ENTRY pEntry,
4289 IN PUCHAR pHeader802_3,
4293 IN BOOLEAN bClearFrame);
4296 IN PRTMP_ADAPTER pAd,
4306 IN PRTMP_ADAPTER pAd,
4310 BOOLEAN RTMPCheckWPAframe(
4311 IN PRTMP_ADAPTER pAd,
4312 IN PMAC_TABLE_ENTRY pEntry,
4314 IN ULONG DataByteCount,
4315 IN UCHAR FromWhichBSSID);
4317 VOID AES_GTK_KEY_UNWRAP(
4319 OUT UCHAR *plaintext,
4321 IN UCHAR *ciphertext);
4323 BOOLEAN RTMPParseEapolKeyData(
4324 IN PRTMP_ADAPTER pAd,
4326 IN UCHAR KeyDataLen,
4327 IN UCHAR GroupKeyIndex,
4330 IN MAC_TABLE_ENTRY *pEntry);
4332 VOID ConstructEapolMsg(
4333 IN PMAC_TABLE_ENTRY pEntry,
4334 IN UCHAR GroupKeyWepStatus,
4336 IN UCHAR DefaultKeyIdx,
4342 OUT PEAPOL_PACKET pMsg);
4344 NDIS_STATUS RTMPSoftDecryptBroadCastData(
4345 IN PRTMP_ADAPTER pAd,
4347 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
4348 IN PCIPHER_KEY pShard_key);
4351 IN PRTMP_ADAPTER pAd,
4357 // function prototype in ap_wpa.c
4359 VOID RTMPGetTxTscFromAsic(
4360 IN PRTMP_ADAPTER pAd,
4364 VOID APInstallPairwiseKey(
4366 PMAC_TABLE_ENTRY pEntry);
4368 UINT APValidateRSNIE(
4369 IN PRTMP_ADAPTER pAd,
4370 IN PMAC_TABLE_ENTRY pEntry,
4372 IN UCHAR rsnie_len);
4374 VOID HandleCounterMeasure(
4375 IN PRTMP_ADAPTER pAd,
4376 IN MAC_TABLE_ENTRY *pEntry);
4378 VOID WPAStart4WayHS(
4379 IN PRTMP_ADAPTER pAd,
4380 IN MAC_TABLE_ENTRY *pEntry,
4381 IN ULONG TimeInterval);
4383 VOID WPAStart2WayGroupHS(
4384 IN PRTMP_ADAPTER pAd,
4385 IN MAC_TABLE_ENTRY *pEntry);
4387 VOID PeerPairMsg1Action(
4388 IN PRTMP_ADAPTER pAd,
4389 IN MAC_TABLE_ENTRY *pEntry,
4390 IN MLME_QUEUE_ELEM *Elem);
4392 VOID PeerPairMsg2Action(
4393 IN PRTMP_ADAPTER pAd,
4394 IN MAC_TABLE_ENTRY *pEntry,
4395 IN MLME_QUEUE_ELEM *Elem);
4397 VOID PeerPairMsg3Action(
4398 IN PRTMP_ADAPTER pAd,
4399 IN MAC_TABLE_ENTRY *pEntry,
4400 IN MLME_QUEUE_ELEM *Elem);
4402 VOID PeerPairMsg4Action(
4403 IN PRTMP_ADAPTER pAd,
4404 IN MAC_TABLE_ENTRY *pEntry,
4405 IN MLME_QUEUE_ELEM *Elem);
4407 VOID PeerGroupMsg1Action(
4408 IN PRTMP_ADAPTER pAd,
4409 IN PMAC_TABLE_ENTRY pEntry,
4410 IN MLME_QUEUE_ELEM *Elem);
4412 VOID PeerGroupMsg2Action(
4413 IN PRTMP_ADAPTER pAd,
4414 IN PMAC_TABLE_ENTRY pEntry,
4425 VOID AES_GTK_KEY_WRAP(
4427 IN UCHAR *plaintext,
4429 OUT UCHAR *ciphertext);
4431 //typedef void (*TIMER_FUNCTION)(unsigned long);
4435 VOID RTMP_SetPeriodicTimer(
4436 IN NDIS_MINIPORT_TIMER *pTimer,
4437 IN unsigned long timeout);
4439 VOID RTMP_OS_Init_Timer(
4440 IN PRTMP_ADAPTER pAd,
4441 IN NDIS_MINIPORT_TIMER *pTimer,
4442 IN TIMER_FUNCTION function,
4445 VOID RTMP_OS_Add_Timer(
4446 IN NDIS_MINIPORT_TIMER *pTimer,
4447 IN unsigned long timeout);
4449 VOID RTMP_OS_Mod_Timer(
4450 IN NDIS_MINIPORT_TIMER *pTimer,
4451 IN unsigned long timeout);
4454 VOID RTMP_OS_Del_Timer(
4455 IN NDIS_MINIPORT_TIMER *pTimer,
4456 OUT BOOLEAN *pCancelled);
4459 VOID RTMP_OS_Release_Packet(
4460 IN PRTMP_ADAPTER pAd,
4461 IN PQUEUE_ENTRY pEntry);
4466 NDIS_STATUS os_alloc_mem(
4467 IN RTMP_ADAPTER *pAd,
4471 NDIS_STATUS os_free_mem(
4472 IN PRTMP_ADAPTER pAd,
4476 void RTMP_AllocateSharedMemory(
4477 IN PRTMP_ADAPTER pAd,
4480 OUT PVOID *VirtualAddress,
4481 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4483 VOID RTMPFreeTxRxRingMemory(
4484 IN PRTMP_ADAPTER pAd);
4486 NDIS_STATUS AdapterBlockAllocateMemory(
4490 void RTMP_AllocateTxDescMemory(
4491 IN PRTMP_ADAPTER pAd,
4495 OUT PVOID *VirtualAddress,
4496 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4498 void RTMP_AllocateFirstTxBuffer(
4499 IN PRTMP_ADAPTER pAd,
4503 OUT PVOID *VirtualAddress,
4504 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4506 void RTMP_FreeFirstTxBuffer(
4507 IN PRTMP_ADAPTER pAd,
4510 IN PVOID VirtualAddress,
4511 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4513 void RTMP_AllocateMgmtDescMemory(
4514 IN PRTMP_ADAPTER pAd,
4517 OUT PVOID *VirtualAddress,
4518 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4520 void RTMP_AllocateRxDescMemory(
4521 IN PRTMP_ADAPTER pAd,
4524 OUT PVOID *VirtualAddress,
4525 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4527 void RTMP_FreeDescMemory(
4528 IN PRTMP_ADAPTER pAd,
4530 IN PVOID VirtualAddress,
4531 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4533 PNDIS_PACKET RtmpOSNetPktAlloc(
4534 IN RTMP_ADAPTER *pAd,
4537 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
4538 IN PRTMP_ADAPTER pAd,
4541 OUT PVOID *VirtualAddress,
4542 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4544 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
4545 IN PRTMP_ADAPTER pAd,
4548 OUT PVOID *VirtualAddress);
4550 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
4551 IN PRTMP_ADAPTER pAd,
4554 void RTMP_QueryPacketInfo(
4555 IN PNDIS_PACKET pPacket,
4556 OUT PACKET_INFO *pPacketInfo,
4557 OUT PUCHAR *pSrcBufVA,
4558 OUT UINT *pSrcBufLen);
4560 void RTMP_QueryNextPacketInfo(
4561 IN PNDIS_PACKET *ppPacket,
4562 OUT PACKET_INFO *pPacketInfo,
4563 OUT PUCHAR *pSrcBufVA,
4564 OUT UINT *pSrcBufLen);
4567 BOOLEAN RTMP_FillTxBlkInfo(
4568 IN RTMP_ADAPTER *pAd,
4572 PRTMP_SCATTER_GATHER_LIST
4573 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
4576 void announce_802_3_packet(
4577 IN PRTMP_ADAPTER pAd,
4578 IN PNDIS_PACKET pPacket);
4581 UINT BA_Reorder_AMSDU_Annnounce(
4582 IN PRTMP_ADAPTER pAd,
4583 IN PNDIS_PACKET pPacket);
4585 PNET_DEV get_netdev_from_bssid(
4586 IN PRTMP_ADAPTER pAd,
4587 IN UCHAR FromWhichBSSID);
4590 PNDIS_PACKET duplicate_pkt(
4591 IN PRTMP_ADAPTER pAd,
4592 IN PUCHAR pHeader802_3,
4596 IN UCHAR FromWhichBSSID);
4599 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
4600 IN PRTMP_ADAPTER pAd,
4601 IN PNDIS_PACKET pOldPkt);
4603 void ba_flush_reordering_timeout_mpdus(
4604 IN PRTMP_ADAPTER pAd,
4605 IN PBA_REC_ENTRY pBAEntry,
4609 VOID BAOriSessionSetUp(
4610 IN PRTMP_ADAPTER pAd,
4611 IN MAC_TABLE_ENTRY *pEntry,
4615 IN BOOLEAN isForced);
4617 VOID BASessionTearDownALL(
4618 IN OUT PRTMP_ADAPTER pAd,
4621 BOOLEAN OS_Need_Clone_Packet(void);
4624 VOID build_tx_packet(
4625 IN PRTMP_ADAPTER pAd,
4626 IN PNDIS_PACKET pPacket,
4631 VOID BAOriSessionTearDown(
4632 IN OUT PRTMP_ADAPTER pAd,
4635 IN BOOLEAN bPassive,
4636 IN BOOLEAN bForceSend);
4638 VOID BARecSessionTearDown(
4639 IN OUT PRTMP_ADAPTER pAd,
4642 IN BOOLEAN bPassive);
4644 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
4645 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
4650 BOOLEAN rtstrmactohex(
4654 BOOLEAN rtstrcasecmp(
4658 PSTRING rtstrstruncasecmp(
4663 IN const PSTRING s1,
4664 IN const PSTRING s2);
4668 IN const PSTRING ct);
4672 unsigned int *addr);
4674 ////////// common ioctl functions //////////
4676 IN PRTMP_ADAPTER pAd);
4678 INT WpaCheckEapCode(
4679 IN PRTMP_ADAPTER pAd,
4684 VOID WpaSendMicFailureToWpaSupplicant(
4685 IN PRTMP_ADAPTER pAd,
4686 IN BOOLEAN bUnicast);
4688 int wext_notify_event_assoc(
4689 IN RTMP_ADAPTER *pAd);
4691 BOOLEAN STARxDoneInterruptHandle(
4692 IN PRTMP_ADAPTER pAd,
4695 // AMPDU packet indication
4696 VOID Indicate_AMPDU_Packet(
4697 IN PRTMP_ADAPTER pAd,
4699 IN UCHAR FromWhichBSSID);
4701 // AMSDU packet indication
4702 VOID Indicate_AMSDU_Packet(
4703 IN PRTMP_ADAPTER pAd,
4705 IN UCHAR FromWhichBSSID);
4707 // Normal legacy Rx packet indication
4708 VOID Indicate_Legacy_Packet(
4709 IN PRTMP_ADAPTER pAd,
4711 IN UCHAR FromWhichBSSID);
4713 VOID Indicate_EAPOL_Packet(
4714 IN PRTMP_ADAPTER pAd,
4716 IN UCHAR FromWhichBSSID);
4718 void update_os_packet_info(
4719 IN PRTMP_ADAPTER pAd,
4721 IN UCHAR FromWhichBSSID);
4723 void wlan_802_11_to_802_3_packet(
4724 IN PRTMP_ADAPTER pAd,
4726 IN PUCHAR pHeader802_3,
4727 IN UCHAR FromWhichBSSID);
4729 // remove LLC and get 802_3 Header
4730 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
4732 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
4734 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
4736 _pDA = _pRxBlk->pHeader->Addr3; \
4737 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
4741 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
4743 _pDA = _pRxBlk->pHeader->Addr1; \
4744 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
4745 _pSA = _pRxBlk->pHeader->Addr2; \
4747 _pSA = _pRxBlk->pHeader->Addr3; \
4751 _pDA = _pRxBlk->pHeader->Addr1; \
4752 _pSA = _pRxBlk->pHeader->Addr2; \
4756 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
4757 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
4760 VOID Sta_Announce_or_Forward_802_3_Packet(
4761 IN PRTMP_ADAPTER pAd,
4762 IN PNDIS_PACKET pPacket,
4763 IN UCHAR FromWhichBSSID);
4765 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
4766 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
4767 //announce_802_3_packet(_pAd, _pPacket);
4769 PNDIS_PACKET DuplicatePacket(
4770 IN PRTMP_ADAPTER pAd,
4771 IN PNDIS_PACKET pPacket,
4772 IN UCHAR FromWhichBSSID);
4775 PNDIS_PACKET ClonePacket(
4776 IN PRTMP_ADAPTER pAd,
4777 IN PNDIS_PACKET pPacket,
4782 // Normal, AMPDU or AMSDU
4783 VOID CmmRxnonRalinkFrameIndicate(
4784 IN PRTMP_ADAPTER pAd,
4786 IN UCHAR FromWhichBSSID);
4788 VOID CmmRxRalinkFrameIndicate(
4789 IN PRTMP_ADAPTER pAd,
4790 IN MAC_TABLE_ENTRY *pEntry,
4792 IN UCHAR FromWhichBSSID);
4794 VOID Update_Rssi_Sample(
4795 IN PRTMP_ADAPTER pAd,
4796 IN RSSI_SAMPLE *pRssi,
4797 IN PRXWI_STRUC pRxWI);
4799 PNDIS_PACKET GetPacketFromRxRing(
4800 IN PRTMP_ADAPTER pAd,
4801 OUT PRT28XX_RXD_STRUC pSaveRxD,
4802 OUT BOOLEAN *pbReschedule,
4803 IN OUT UINT32 *pRxPending);
4805 PNDIS_PACKET RTMPDeFragmentDataFrame(
4806 IN PRTMP_ADAPTER pAd,
4810 DIDmsg_lnxind_wlansniffrm = 0x00000044,
4811 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
4812 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
4813 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
4814 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
4815 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
4816 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
4817 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
4818 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
4819 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
4820 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
4823 P80211ENUM_msgitem_status_no_value = 0x00
4826 P80211ENUM_truth_false = 0x00,
4827 P80211ENUM_truth_true = 0x01
4830 /* Definition from madwifi */
4836 } p80211item_uint32_t;
4841 #define WLAN_DEVNAMELEN_MAX 16
4842 UINT8 devname[WLAN_DEVNAMELEN_MAX];
4843 p80211item_uint32_t hosttime;
4844 p80211item_uint32_t mactime;
4845 p80211item_uint32_t channel;
4846 p80211item_uint32_t rssi;
4847 p80211item_uint32_t sq;
4848 p80211item_uint32_t signal;
4849 p80211item_uint32_t noise;
4850 p80211item_uint32_t rate;
4851 p80211item_uint32_t istx;
4852 p80211item_uint32_t frmlen;
4853 } wlan_ng_prism2_header;
4855 /* The radio capture header precedes the 802.11 header. */
4856 typedef struct PACKED _ieee80211_radiotap_header {
4857 UINT8 it_version; /* Version 0. Only increases
4858 * for drastic changes,
4859 * introduction of compatible
4860 * new fields does not count.
4863 UINT16 it_len; /* length of the whole
4864 * header in bytes, including
4865 * it_version, it_pad,
4866 * it_len, and data fields.
4868 UINT32 it_present; /* A bitmap telling which
4869 * fields are present. Set bit 31
4870 * (0x80000000) to extend the
4871 * bitmap by another 32 bits.
4872 * Additional extensions are made
4873 * by setting bit 31.
4875 }ieee80211_radiotap_header ;
4877 enum ieee80211_radiotap_type {
4878 IEEE80211_RADIOTAP_TSFT = 0,
4879 IEEE80211_RADIOTAP_FLAGS = 1,
4880 IEEE80211_RADIOTAP_RATE = 2,
4881 IEEE80211_RADIOTAP_CHANNEL = 3,
4882 IEEE80211_RADIOTAP_FHSS = 4,
4883 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
4884 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
4885 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
4886 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
4887 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
4888 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
4889 IEEE80211_RADIOTAP_ANTENNA = 11,
4890 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
4891 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
4894 #define WLAN_RADIOTAP_PRESENT ( \
4895 (1 << IEEE80211_RADIOTAP_TSFT) | \
4896 (1 << IEEE80211_RADIOTAP_FLAGS) | \
4897 (1 << IEEE80211_RADIOTAP_RATE) | \
4900 typedef struct _wlan_radiotap_header {
4901 ieee80211_radiotap_header wt_ihdr;
4905 } wlan_radiotap_header;
4906 /* Definition from madwifi */
4908 void send_monitor_packets(
4909 IN PRTMP_ADAPTER pAd,
4913 VOID RTMPSetDesiredRates(
4914 IN PRTMP_ADAPTER pAdapter,
4917 INT Set_FixedTxMode_Proc(
4918 IN PRTMP_ADAPTER pAd,
4921 BOOLEAN RT28XXChipsetCheck(
4925 VOID RT28XXDMADisable(
4926 IN RTMP_ADAPTER *pAd);
4928 VOID RT28XXDMAEnable(
4929 IN RTMP_ADAPTER *pAd);
4931 VOID RT28xx_UpdateBeaconToAsic(
4932 IN RTMP_ADAPTER * pAd,
4935 IN ULONG UpdatePos);
4938 IN PRTMP_ADAPTER pAd,
4939 IN PSTRING pDefaultMac,
4940 IN PSTRING pHostName);
4942 NDIS_STATUS RtmpNetTaskInit(
4943 IN RTMP_ADAPTER *pAd);
4945 VOID RtmpNetTaskExit(
4946 IN PRTMP_ADAPTER pAd);
4948 NDIS_STATUS RtmpMgmtTaskInit(
4949 IN RTMP_ADAPTER *pAd);
4951 VOID RtmpMgmtTaskExit(
4952 IN RTMP_ADAPTER *pAd);
4954 void tbtt_tasklet(unsigned long data);
4957 PNET_DEV RtmpPhyNetDevInit(
4958 IN RTMP_ADAPTER *pAd,
4959 IN RTMP_OS_NETDEV_OP_HOOK *pNetHook);
4961 BOOLEAN RtmpPhyNetDevExit(
4962 IN RTMP_ADAPTER *pAd,
4963 IN PNET_DEV net_dev);
4965 INT RtmpRaDevCtrlInit(
4966 IN RTMP_ADAPTER *pAd,
4967 IN RTMP_INF_TYPE infType);
4969 BOOLEAN RtmpRaDevCtrlExit(
4970 IN RTMP_ADAPTER *pAd);
4975 // Function Prototype in cmm_data_pci.c
4977 USHORT RtmpPCI_WriteTxResource(
4978 IN PRTMP_ADAPTER pAd,
4981 OUT USHORT *FreeNumber);
4983 USHORT RtmpPCI_WriteSingleTxResource(
4984 IN PRTMP_ADAPTER pAd,
4987 OUT USHORT *FreeNumber);
4989 USHORT RtmpPCI_WriteMultiTxResource(
4990 IN PRTMP_ADAPTER pAd,
4993 OUT USHORT *FreeNumber);
4995 USHORT RtmpPCI_WriteFragTxResource(
4996 IN PRTMP_ADAPTER pAd,
4999 OUT USHORT *FreeNumber);
5001 USHORT RtmpPCI_WriteSubTxResource(
5002 IN PRTMP_ADAPTER pAd,
5005 OUT USHORT *FreeNumber);
5007 VOID RtmpPCI_FinalWriteTxResource(
5008 IN PRTMP_ADAPTER pAd,
5010 IN USHORT totalMPDUSize,
5011 IN USHORT FirstTxIdx);
5013 VOID RtmpPCIDataLastTxIdx(
5014 IN PRTMP_ADAPTER pAd,
5016 IN USHORT LastTxIdx);
5018 VOID RtmpPCIDataKickOut(
5019 IN PRTMP_ADAPTER pAd,
5024 int RtmpPCIMgmtKickOut(
5025 IN RTMP_ADAPTER *pAd,
5027 IN PNDIS_PACKET pPacket,
5028 IN PUCHAR pSrcBufVA,
5032 NDIS_STATUS RTMPCheckRxError(
5033 IN PRTMP_ADAPTER pAd,
5034 IN PHEADER_802_11 pHeader,
5035 IN PRXWI_STRUC pRxWI,
5036 IN PRT28XX_RXD_STRUC pRxD);
5038 BOOLEAN RT28xxPciAsicRadioOff(
5039 IN PRTMP_ADAPTER pAd,
5041 IN USHORT TbttNumToNextWakeUp);
5043 BOOLEAN RT28xxPciAsicRadioOn(
5044 IN PRTMP_ADAPTER pAd,
5047 VOID RTMPInitPCIeLinkCtrlValue(
5048 IN PRTMP_ADAPTER pAd);
5050 VOID RTMPFindHostPCIDev(
5051 IN PRTMP_ADAPTER pAd);
5053 VOID RTMPPCIeLinkCtrlValueRestore(
5054 IN PRTMP_ADAPTER pAd,
5057 VOID RTMPPCIeLinkCtrlSetting(
5058 IN PRTMP_ADAPTER pAd,
5061 VOID RTMPrt3xSetPCIePowerLinkCtrl(
5062 IN PRTMP_ADAPTER pAd);
5064 VOID PsPollWakeExec(
5065 IN PVOID SystemSpecific1,
5066 IN PVOID FunctionContext,
5067 IN PVOID SystemSpecific2,
5068 IN PVOID SystemSpecific3);
5071 IN PVOID SystemSpecific1,
5072 IN PVOID FunctionContext,
5073 IN PVOID SystemSpecific2,
5074 IN PVOID SystemSpecific3);
5076 VOID RT28xxPciStaAsicForceWakeup(
5077 IN PRTMP_ADAPTER pAd,
5078 IN BOOLEAN bFromTx);
5080 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
5081 IN PRTMP_ADAPTER pAd,
5082 IN USHORT TbttNumToNextWakeUp);
5085 VOID RT28xxPciMlmeRadioOn(
5086 IN PRTMP_ADAPTER pAd);
5088 VOID RT28xxPciMlmeRadioOFF(
5089 IN PRTMP_ADAPTER pAd);
5090 #endif // RTMP_MAC_PCI //
5094 // Function Prototype in rtusb_bulk.c
5096 VOID RTUSBInitTxDesc(
5097 IN PRTMP_ADAPTER pAd,
5098 IN PTX_CONTEXT pTxContext,
5099 IN UCHAR BulkOutPipeId,
5100 IN usb_complete_t Func);
5102 VOID RTUSBInitHTTxDesc(
5103 IN PRTMP_ADAPTER pAd,
5104 IN PHT_TX_CONTEXT pTxContext,
5105 IN UCHAR BulkOutPipeId,
5106 IN ULONG BulkOutSize,
5107 IN usb_complete_t Func);
5109 VOID RTUSBInitRxDesc(
5110 IN PRTMP_ADAPTER pAd,
5111 IN PRX_CONTEXT pRxContext);
5113 VOID RTUSBCleanUpDataBulkOutQueue(
5114 IN PRTMP_ADAPTER pAd);
5116 VOID RTUSBCancelPendingBulkOutIRP(
5117 IN PRTMP_ADAPTER pAd);
5119 VOID RTUSBBulkOutDataPacket(
5120 IN PRTMP_ADAPTER pAd,
5121 IN UCHAR BulkOutPipeId,
5124 VOID RTUSBBulkOutNullFrame(
5125 IN PRTMP_ADAPTER pAd);
5127 VOID RTUSBBulkOutRTSFrame(
5128 IN PRTMP_ADAPTER pAd);
5130 VOID RTUSBCancelPendingBulkInIRP(
5131 IN PRTMP_ADAPTER pAd);
5133 VOID RTUSBCancelPendingIRPs(
5134 IN PRTMP_ADAPTER pAd);
5136 VOID RTUSBBulkOutMLMEPacket(
5137 IN PRTMP_ADAPTER pAd,
5140 VOID RTUSBBulkOutPsPoll(
5141 IN PRTMP_ADAPTER pAd);
5143 VOID RTUSBCleanUpMLMEBulkOutQueue(
5144 IN PRTMP_ADAPTER pAd);
5146 VOID RTUSBKickBulkOut(
5147 IN PRTMP_ADAPTER pAd);
5149 VOID RTUSBBulkReceive(
5150 IN PRTMP_ADAPTER pAd);
5153 IN RTMP_ADAPTER *pAd);
5155 VOID RTUSBInitRxDesc(
5156 IN PRTMP_ADAPTER pAd,
5157 IN PRX_CONTEXT pRxContext);
5159 VOID RTUSBBulkRxHandle(
5160 IN unsigned long data);
5163 // Function Prototype in rtusb_io.c
5165 NTSTATUS RTUSBMultiRead(
5166 IN PRTMP_ADAPTER pAd,
5171 NTSTATUS RTUSBMultiWrite(
5172 IN PRTMP_ADAPTER pAd,
5177 NTSTATUS RTUSBMultiWrite_OneByte(
5178 IN PRTMP_ADAPTER pAd,
5182 NTSTATUS RTUSBReadBBPRegister(
5183 IN PRTMP_ADAPTER pAd,
5187 NTSTATUS RTUSBWriteBBPRegister(
5188 IN PRTMP_ADAPTER pAd,
5192 NTSTATUS RTUSBWriteRFRegister(
5193 IN PRTMP_ADAPTER pAd,
5196 NTSTATUS RTUSB_VendorRequest(
5197 IN PRTMP_ADAPTER pAd,
5198 IN UINT32 TransferFlags,
5199 IN UCHAR ReservedBits,
5203 IN PVOID TransferBuffer,
5204 IN UINT32 TransferBufferLength);
5206 NTSTATUS RTUSBReadEEPROM(
5207 IN PRTMP_ADAPTER pAd,
5212 NTSTATUS RTUSBWriteEEPROM(
5213 IN PRTMP_ADAPTER pAd,
5218 VOID RTUSBPutToSleep(
5219 IN PRTMP_ADAPTER pAd);
5221 NTSTATUS RTUSBWakeUp(
5222 IN PRTMP_ADAPTER pAd);
5224 VOID RTUSBInitializeCmdQ(
5227 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
5228 IN PRTMP_ADAPTER pAd,
5230 IN BOOLEAN SetInformation,
5231 IN PVOID pInformationBuffer,
5232 IN UINT32 InformationBufferLength);
5234 NDIS_STATUS RTUSBEnqueueInternalCmd(
5235 IN PRTMP_ADAPTER pAd,
5237 IN PVOID pInformationBuffer,
5238 IN UINT32 InformationBufferLength);
5240 VOID RTUSBDequeueCmd(
5242 OUT PCmdQElmt *pcmdqelmt);
5245 IN OUT PVOID Context);
5247 VOID RTUSBBssBeaconExit(
5248 IN RTMP_ADAPTER *pAd);
5250 VOID RTUSBBssBeaconStop(
5251 IN RTMP_ADAPTER *pAd);
5253 VOID RTUSBBssBeaconStart(
5254 IN RTMP_ADAPTER * pAd);
5256 VOID RTUSBBssBeaconInit(
5257 IN RTMP_ADAPTER *pAd);
5260 IN RTMP_ADAPTER *pAd);
5262 NTSTATUS RTUSBWriteMACRegister(
5263 IN PRTMP_ADAPTER pAd,
5267 NTSTATUS RTUSBReadMACRegister(
5268 IN PRTMP_ADAPTER pAd,
5270 OUT PUINT32 pValue);
5272 NTSTATUS RTUSBSingleWrite(
5273 IN RTMP_ADAPTER *pAd,
5277 NTSTATUS RTUSBFirmwareWrite(
5278 IN PRTMP_ADAPTER pAd,
5282 NTSTATUS RTUSBVenderReset(
5283 IN PRTMP_ADAPTER pAd);
5285 NDIS_STATUS RTUSBSetHardWareRegister(
5286 IN PRTMP_ADAPTER pAdapter,
5289 NDIS_STATUS RTUSBQueryHardWareRegister(
5290 IN PRTMP_ADAPTER pAdapter,
5294 IN PRTMP_ADAPTER pAd);
5296 NDIS_STATUS RTUSBWriteHWMACAddress(
5297 IN PRTMP_ADAPTER pAdapter);
5299 VOID MacTableInitialize(
5300 IN PRTMP_ADAPTER pAd);
5303 IN PRTMP_ADAPTER pAd,
5306 NDIS_STATUS RTMPWPAAddKeyProc(
5307 IN PRTMP_ADAPTER pAd,
5310 VOID AsicRxAntEvalAction(
5311 IN PRTMP_ADAPTER pAd);
5314 IN PRTMP_ADAPTER pAd,
5315 IN PUCHAR pHeader802_3,
5319 OUT PNDIS_PACKET *ppPacket);
5321 UINT deaggregate_AMSDU_announce(
5322 IN PRTMP_ADAPTER pAd,
5323 PNDIS_PACKET pPacket,
5327 NDIS_STATUS RTMPCheckRxError(
5328 IN PRTMP_ADAPTER pAd,
5329 IN PHEADER_802_11 pHeader,
5330 IN PRXWI_STRUC pRxWI,
5331 IN PRT28XX_RXD_STRUC pRxINFO);
5333 VOID RTUSBMlmeHardTransmit(
5334 IN PRTMP_ADAPTER pAd,
5335 IN PMGMT_STRUC pMgmt);
5341 // Function Prototype in rtusb_data.c
5343 NDIS_STATUS RTUSBFreeDescriptorRequest(
5344 IN PRTMP_ADAPTER pAd,
5345 IN UCHAR BulkOutPipeId,
5346 IN UINT32 NumberRequired);
5349 BOOLEAN RTUSBNeedQueueBackForAgg(
5350 IN RTMP_ADAPTER *pAd,
5351 IN UCHAR BulkOutPipeId);
5354 VOID RTMPWriteTxInfo(
5355 IN PRTMP_ADAPTER pAd,
5356 IN PTXINFO_STRUC pTxInfo,
5357 IN USHORT USBDMApktLen,
5364 // Function Prototype in cmm_data_usb.c
5366 USHORT RtmpUSB_WriteSubTxResource(
5367 IN PRTMP_ADAPTER pAd,
5370 OUT USHORT *FreeNumber);
5372 USHORT RtmpUSB_WriteSingleTxResource(
5373 IN PRTMP_ADAPTER pAd,
5376 OUT USHORT *FreeNumber);
5378 USHORT RtmpUSB_WriteFragTxResource(
5379 IN PRTMP_ADAPTER pAd,
5382 OUT USHORT *FreeNumber);
5384 USHORT RtmpUSB_WriteMultiTxResource(
5385 IN PRTMP_ADAPTER pAd,
5388 OUT USHORT *FreeNumber);
5390 VOID RtmpUSB_FinalWriteTxResource(
5391 IN PRTMP_ADAPTER pAd,
5393 IN USHORT totalMPDUSize,
5396 VOID RtmpUSBDataLastTxIdx(
5397 IN PRTMP_ADAPTER pAd,
5401 VOID RtmpUSBDataKickOut(
5402 IN PRTMP_ADAPTER pAd,
5407 int RtmpUSBMgmtKickOut(
5408 IN RTMP_ADAPTER *pAd,
5410 IN PNDIS_PACKET pPacket,
5411 IN PUCHAR pSrcBufVA,
5414 VOID RtmpUSBNullFrameKickOut(
5415 IN RTMP_ADAPTER *pAd,
5417 IN UCHAR *pNullFrame,
5418 IN UINT32 frameLen);
5420 VOID RtmpUsbStaAsicForceWakeupTimeout(
5421 IN PVOID SystemSpecific1,
5422 IN PVOID FunctionContext,
5423 IN PVOID SystemSpecific2,
5424 IN PVOID SystemSpecific3);
5426 VOID RT28xxUsbStaAsicForceWakeup(
5427 IN PRTMP_ADAPTER pAd,
5428 IN BOOLEAN bFromTx);
5430 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
5431 IN PRTMP_ADAPTER pAd,
5432 IN USHORT TbttNumToNextWakeUp);
5434 VOID RT28xxUsbMlmeRadioOn(
5435 IN PRTMP_ADAPTER pAd);
5437 VOID RT28xxUsbMlmeRadioOFF(
5438 IN PRTMP_ADAPTER pAd);
5439 #endif // RTMP_MAC_USB //
5441 VOID AsicTurnOffRFClk(
5442 IN PRTMP_ADAPTER pAd,
5445 VOID AsicTurnOnRFClk(
5446 IN PRTMP_ADAPTER pAd,
5451 #ifdef RTMP_TIMER_TASK_SUPPORT
5452 INT RtmpTimerQThread(
5453 IN OUT PVOID Context);
5455 RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(
5456 IN RTMP_ADAPTER *pAd,
5457 IN RALINK_TIMER_STRUCT *pTimer);
5459 BOOLEAN RtmpTimerQRemove(
5460 IN RTMP_ADAPTER *pAd,
5461 IN RALINK_TIMER_STRUCT *pTimer);
5463 void RtmpTimerQExit(
5464 IN RTMP_ADAPTER *pAd);
5466 void RtmpTimerQInit(
5467 IN RTMP_ADAPTER *pAd);
5468 #endif // RTMP_TIMER_TASK_SUPPORT //
5470 VOID AsicStaBbpTuning(
5471 IN PRTMP_ADAPTER pAd);
5473 BOOLEAN StaAddMacTableEntry(
5474 IN PRTMP_ADAPTER pAd,
5475 IN PMAC_TABLE_ENTRY pEntry,
5476 IN UCHAR MaxSupportedRateIn500Kbps,
5477 IN HT_CAPABILITY_IE *pHtCapability,
5478 IN UCHAR HtCapabilityLen,
5479 IN ADD_HT_INFO_IE *pAddHtInfo,
5480 IN UCHAR AddHtInfoLen,
5481 IN USHORT CapabilityInfo);
5484 BOOLEAN AUTH_ReqSend(
5485 IN PRTMP_ADAPTER pAd,
5486 IN PMLME_QUEUE_ELEM pElem,
5487 IN PRALINK_TIMER_STRUCT pAuthTimer,
5490 IN PUCHAR pNewElement,
5491 IN ULONG ElementLen);
5493 void RTMP_IndicateMediaState(
5494 IN PRTMP_ADAPTER pAd);
5496 VOID ReSyncBeaconTime(
5497 IN PRTMP_ADAPTER pAd);
5499 VOID RTMPSetAGCInitValue(
5500 IN PRTMP_ADAPTER pAd,
5501 IN UCHAR BandWidth);
5503 int rt28xx_close(IN PNET_DEV dev);
5504 int rt28xx_open(IN PNET_DEV dev);
5507 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
5508 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
5509 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
5513 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
5515 if (VIRTUAL_IF_NUM(pAd) == 0)
5517 if (rt28xx_open(pAd->net_dev) != 0)
5519 DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n"));
5526 VIRTUAL_IF_INC(pAd);
5530 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
5532 VIRTUAL_IF_DEC(pAd);
5533 if (VIRTUAL_IF_NUM(pAd) == 0)
5534 rt28xx_close(pAd->net_dev);
5541 OS Related funciton prototype definitions.
5542 TODO: Maybe we need to move these function prototypes to other proper place.
5544 int RtmpOSWrielessEventSend(
5545 IN RTMP_ADAPTER *pAd,
5546 IN UINT32 eventType,
5552 int RtmpOSNetDevAddrSet(
5553 IN PNET_DEV pNetDev,
5554 IN PUCHAR pMacAddr);
5556 int RtmpOSNetDevAttach(
5557 IN PNET_DEV pNetDev,
5558 IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook);
5560 void RtmpOSNetDevClose(
5561 IN PNET_DEV pNetDev);
5563 void RtmpOSNetDevDetach(
5564 IN PNET_DEV pNetDev);
5566 INT RtmpOSNetDevAlloc(
5567 IN PNET_DEV *pNewNetDev,
5568 IN UINT32 privDataSize);
5570 void RtmpOSNetDevFree(
5571 IN PNET_DEV pNetDev);
5573 PNET_DEV RtmpOSNetDevGetByName(
5574 IN PNET_DEV pNetDev,
5575 IN PSTRING pDevName);
5577 void RtmpOSNetDeviceRefPut(
5578 IN PNET_DEV pNetDev);
5580 PNET_DEV RtmpOSNetDevCreate(
5581 IN RTMP_ADAPTER *pAd,
5585 IN PSTRING pNamePrefix);
5588 Task operation related function prototypes
5590 void RtmpOSTaskCustomize(
5591 IN RTMP_OS_TASK *pTask);
5593 INT RtmpOSTaskNotifyToExit(
5594 IN RTMP_OS_TASK *pTask);
5596 NDIS_STATUS RtmpOSTaskKill(
5597 IN RTMP_OS_TASK *pTask);
5599 NDIS_STATUS RtmpOSTaskInit(
5600 IN RTMP_OS_TASK *pTask,
5604 NDIS_STATUS RtmpOSTaskAttach(
5605 IN RTMP_OS_TASK *pTask,
5606 IN int (*fn)(void *),
5611 File operation related function prototypes
5613 RTMP_OS_FD RtmpOSFileOpen(
5618 int RtmpOSFileClose(
5619 IN RTMP_OS_FD osfd);
5621 void RtmpOSFileSeek(
5630 int RtmpOSFileWrite(
5635 void RtmpOSFSInfoChange(
5636 IN RTMP_OS_FS_INFO *pOSFSInfo,
5640 #endif // __RTMP_H__