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"
44 #include "rtmp_dot11.h"
45 #include "rtmp_chip.h"
48 typedef struct _RTMP_ADAPTER RTMP_ADAPTER;
49 typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER;
51 typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP;
56 //#define DBG_DIAGNOSE 1
59 //+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function
60 #define MAX_DATAMM_RETRY 3
61 #define MGMT_USE_QUEUE_FLAG 0x80
62 //---Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function
64 #define MAXSEQ (0xFFF)
66 extern unsigned char SNAP_AIRONET[];
67 extern unsigned char CISCO_OUI[];
68 extern UCHAR BaSizeArray[4];
70 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
71 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
72 extern ULONG BIT32[32];
74 extern char* CipherName[];
75 extern char* MCSToMbps[];
76 extern UCHAR RxwiMCSToOfdmRate[12];
77 extern UCHAR SNAP_802_1H[6];
78 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
79 extern UCHAR SNAP_AIRONET[8];
80 extern UCHAR CKIP_LLC_SNAP[8];
81 extern UCHAR EAPOL_LLC_SNAP[8];
82 extern UCHAR EAPOL[2];
84 extern UCHAR APPLE_TALK[2];
85 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
86 extern UCHAR OfdmRateToRxwiMCS[];
87 extern UCHAR OfdmSignalToRateId[16] ;
88 extern UCHAR default_cwmin[4];
89 extern UCHAR default_cwmax[4];
90 extern UCHAR default_sta_aifsn[4];
91 extern UCHAR MapUserPriorityToAccessCategory[8];
93 extern USHORT RateUpPER[];
94 extern USHORT RateDownPER[];
95 extern UCHAR Phy11BNextRateDownward[];
96 extern UCHAR Phy11BNextRateUpward[];
97 extern UCHAR Phy11BGNextRateDownward[];
98 extern UCHAR Phy11BGNextRateUpward[];
99 extern UCHAR Phy11ANextRateDownward[];
100 extern UCHAR Phy11ANextRateUpward[];
101 extern CHAR RssiSafeLevelForTxRate[];
102 extern UCHAR RateIdToMbps[];
103 extern USHORT RateIdTo500Kbps[];
105 extern UCHAR CipherSuiteWpaNoneTkip[];
106 extern UCHAR CipherSuiteWpaNoneTkipLen;
108 extern UCHAR CipherSuiteWpaNoneAes[];
109 extern UCHAR CipherSuiteWpaNoneAesLen;
112 extern UCHAR SupRateIe;
113 extern UCHAR ExtRateIe;
115 extern UCHAR HtCapIe;
116 extern UCHAR AddHtInfoIe;
117 extern UCHAR NewExtChanIe;
128 extern UCHAR WPA_OUI[];
129 extern UCHAR RSN_OUI[];
130 extern UCHAR WAPI_OUI[];
131 extern UCHAR WME_INFO_ELEM[];
132 extern UCHAR WME_PARM_ELEM[];
133 extern UCHAR Ccx2QosInfo[];
134 extern UCHAR Ccx2IeInfo[];
135 extern UCHAR RALINK_OUI[];
136 extern UCHAR PowerConstraintIE[];
139 extern UCHAR RateSwitchTable[];
140 extern UCHAR RateSwitchTable11B[];
141 extern UCHAR RateSwitchTable11G[];
142 extern UCHAR RateSwitchTable11BG[];
144 extern UCHAR RateSwitchTable11BGN1S[];
145 extern UCHAR RateSwitchTable11BGN2S[];
146 extern UCHAR RateSwitchTable11BGN2SForABand[];
147 extern UCHAR RateSwitchTable11N1S[];
148 extern UCHAR RateSwitchTable11N2S[];
149 extern UCHAR RateSwitchTable11N2SForABand[];
151 extern UCHAR PRE_N_HT_OUI[];
156 typedef struct _RSSI_SAMPLE {
157 CHAR LastRssi0; // last received RSSI
158 CHAR LastRssi1; // last received RSSI
159 CHAR LastRssi2; // last received RSSI
169 // Queue structure and macros
171 typedef struct _QUEUE_ENTRY {
172 struct _QUEUE_ENTRY *Next;
173 } QUEUE_ENTRY, *PQUEUE_ENTRY;
176 typedef struct _QUEUE_HEADER {
180 } QUEUE_HEADER, *PQUEUE_HEADER;
182 #define InitializeQueueHeader(QueueHeader) \
184 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
185 (QueueHeader)->Number = 0; \
188 #define RemoveHeadQueue(QueueHeader) \
189 (QueueHeader)->Head; \
191 PQUEUE_ENTRY pNext; \
192 if ((QueueHeader)->Head != NULL) \
194 pNext = (QueueHeader)->Head->Next; \
195 (QueueHeader)->Head->Next = NULL; \
196 (QueueHeader)->Head = pNext; \
198 (QueueHeader)->Tail = NULL; \
199 (QueueHeader)->Number--; \
203 #define InsertHeadQueue(QueueHeader, QueueEntry) \
205 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
206 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
207 if ((QueueHeader)->Tail == NULL) \
208 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
209 (QueueHeader)->Number++; \
212 #define InsertTailQueue(QueueHeader, QueueEntry) \
214 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
215 if ((QueueHeader)->Tail) \
216 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
218 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
219 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
220 (QueueHeader)->Number++; \
223 #define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry) \
225 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
226 if ((QueueHeader)->Tail) \
227 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
229 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
230 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
231 (QueueHeader)->Number++; \
237 // Macros for flag and ref count operations
239 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
240 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
241 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
242 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
243 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
244 // Macro for power save flag.
245 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
246 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
247 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
248 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
249 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
251 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
252 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
253 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
255 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
256 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
257 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
259 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
260 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
261 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
263 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
264 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
265 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
266 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
268 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
270 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
271 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
274 #define INC_RING_INDEX(_idx, _RingSize) \
276 (_idx) = (_idx+1) % (_RingSize); \
280 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
281 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
283 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
284 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
285 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
286 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
287 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
288 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
289 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
290 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
291 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
292 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
293 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
294 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
297 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
299 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
300 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
301 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
305 // MACRO for 32-bit PCI register read / write
307 // Usage : RTMP_IO_READ32(
308 // PRTMP_ADAPTER pAd,
309 // ULONG Register_Offset,
313 // PRTMP_ADAPTER pAd,
314 // ULONG Register_Offset,
320 // Common fragment list structure - Identical to the scatter gather frag list structure
322 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
323 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
324 #define NIC_MAX_PHYS_BUF_COUNT 8
326 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
330 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
333 typedef struct _RTMP_SCATTER_GATHER_LIST {
334 ULONG NumberOfElements;
336 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
337 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
340 // Some utility macros
343 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
347 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
350 #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))))
352 #define INC_COUNTER64(Val) (Val.QuadPart++)
354 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
355 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
356 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
357 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
359 // Check LEAP & CCKM flags
360 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
361 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
363 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
364 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
366 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
368 _pExtraLlcSnapEncap = SNAP_802_1H; \
369 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
370 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
372 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
377 _pExtraLlcSnapEncap = NULL; \
381 // New Define for new Tx Path.
382 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
384 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
386 _pExtraLlcSnapEncap = SNAP_802_1H; \
387 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
388 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
390 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
395 _pExtraLlcSnapEncap = NULL; \
400 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
402 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
403 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
404 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
407 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
408 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
409 // else remove the LLC/SNAP field from the result Ethernet frame
410 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
412 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
413 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
414 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
418 _pRemovedLLCSNAP = NULL; \
419 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
420 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
422 PUCHAR pProto = _pData + 6; \
424 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
425 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
427 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
428 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
429 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
433 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
434 _pRemovedLLCSNAP = _pData; \
435 _DataSize -= LENGTH_802_1_H; \
436 _pData += LENGTH_802_1_H; \
441 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
442 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
443 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
448 // Enqueue this frame to MLME engine
449 // We need to enqueue the whole frame because MLME need to pass data type
450 // information from 802.11 header
452 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
454 UINT32 High32TSF, Low32TSF; \
455 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
456 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
457 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
459 #endif // RTMP_MAC_PCI //
461 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
463 UINT32 High32TSF=0, Low32TSF=0; \
464 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
466 #endif // RTMP_MAC_USB //
468 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
469 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
472 // Check if it is Japan W53(ch52,56,60,64) channel.
474 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
476 #define STA_EXTRA_SETTING(_pAd)
478 #define STA_PORT_SECURED(_pAd) \
481 (_pAd)->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
482 NdisAcquireSpinLock(&((_pAd)->MacTabLock)); \
483 (_pAd)->MacTab.Content[BSSID_WCID].PortSecured = (_pAd)->StaCfg.PortSecured; \
484 (_pAd)->MacTab.Content[BSSID_WCID].PrivacyFilter = Ndis802_11PrivFilterAcceptAll;\
485 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
486 RTMPCancelTimer(&((_pAd)->Mlme.LinkDownTimer), &Cancelled);\
487 STA_EXTRA_SETTING(_pAd); \
493 // Data buffer for DMA operation, the buffer must be contiguous physical memory
494 // Both DMA to / from CPU use the same structure.
496 typedef struct _RTMP_DMABUF
499 PVOID AllocVa; // TxBuf virtual address
500 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
501 } RTMP_DMABUF, *PRTMP_DMABUF;
505 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
506 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
507 // which won't be released, driver has to wait until upper layer return the packet
508 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
509 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
510 // which driver should ACK upper layer when the tx is physically done or failed.
512 typedef struct _RTMP_DMACB
514 ULONG AllocSize; // Control block size
515 PVOID AllocVa; // Control block virtual address
516 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
517 PNDIS_PACKET pNdisPacket;
518 PNDIS_PACKET pNextNdisPacket;
520 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
521 } RTMP_DMACB, *PRTMP_DMACB;
524 typedef struct _RTMP_TX_RING
526 RTMP_DMACB Cell[TX_RING_SIZE];
529 UINT32 TxSwFreeIdx; // software next free tx index
530 } RTMP_TX_RING, *PRTMP_TX_RING;
532 typedef struct _RTMP_RX_RING
534 RTMP_DMACB Cell[RX_RING_SIZE];
537 INT32 RxSwReadIdx; // software next read index
538 } RTMP_RX_RING, *PRTMP_RX_RING;
540 typedef struct _RTMP_MGMT_RING
542 RTMP_DMACB Cell[MGMT_RING_SIZE];
545 UINT32 TxSwFreeIdx; // software next free tx index
546 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
549 // Statistic counter structure
551 typedef struct _COUNTER_802_3
561 ULONG RcvAlignmentErrors;
563 ULONG MoreCollisions;
565 } COUNTER_802_3, *PCOUNTER_802_3;
567 typedef struct _COUNTER_802_11 {
569 LARGE_INTEGER LastTransmittedFragmentCount;
570 LARGE_INTEGER TransmittedFragmentCount;
571 LARGE_INTEGER MulticastTransmittedFrameCount;
572 LARGE_INTEGER FailedCount;
573 LARGE_INTEGER RetryCount;
574 LARGE_INTEGER MultipleRetryCount;
575 LARGE_INTEGER RTSSuccessCount;
576 LARGE_INTEGER RTSFailureCount;
577 LARGE_INTEGER ACKFailureCount;
578 LARGE_INTEGER FrameDuplicateCount;
579 LARGE_INTEGER ReceivedFragmentCount;
580 LARGE_INTEGER MulticastReceivedFrameCount;
581 LARGE_INTEGER FCSErrorCount;
582 } COUNTER_802_11, *PCOUNTER_802_11;
584 typedef struct _COUNTER_RALINK {
585 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
586 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
587 ULONG BeenDisassociatedCount;
588 ULONG BadCQIAutoRecoveryCount;
589 ULONG PoorCQIRoamingCount;
590 ULONG MgmtRingFullCount;
591 ULONG RxCountSinceLastNULL;
593 ULONG RxRingErrCount;
595 ULONG TxRingErrCount;
596 LARGE_INTEGER RealFcsErrCount;
597 ULONG PendingNdisPacketCount;
599 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
600 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
601 UINT32 OneSecTxDoneCount;
603 UINT32 OneSecTxAggregationCount;
604 UINT32 OneSecRxAggregationCount;
605 UINT32 OneSecReceivedByteCount;
606 UINT32 OneSecFrameDuplicateCount;
608 UINT32 OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
609 UINT32 OneSecTxNoRetryOkCount;
610 UINT32 OneSecTxRetryOkCount;
611 UINT32 OneSecTxFailCount;
612 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
613 UINT32 OneSecRxOkCnt; // RX without error
614 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
615 UINT32 OneSecRxFcsErrCnt; // CRC error
616 UINT32 OneSecBeaconSentCnt;
617 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
618 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
622 ULONG TxAgg1MPDUCount;
623 ULONG TxAgg2MPDUCount;
624 ULONG TxAgg3MPDUCount;
625 ULONG TxAgg4MPDUCount;
626 ULONG TxAgg5MPDUCount;
627 ULONG TxAgg6MPDUCount;
628 ULONG TxAgg7MPDUCount;
629 ULONG TxAgg8MPDUCount;
630 ULONG TxAgg9MPDUCount;
631 ULONG TxAgg10MPDUCount;
632 ULONG TxAgg11MPDUCount;
633 ULONG TxAgg12MPDUCount;
634 ULONG TxAgg13MPDUCount;
635 ULONG TxAgg14MPDUCount;
636 ULONG TxAgg15MPDUCount;
637 ULONG TxAgg16MPDUCount;
639 LARGE_INTEGER TransmittedOctetsInAMSDU;
640 LARGE_INTEGER TransmittedAMSDUCount;
641 LARGE_INTEGER ReceivedOctesInAMSDUCount;
642 LARGE_INTEGER ReceivedAMSDUCount;
643 LARGE_INTEGER TransmittedAMPDUCount;
644 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
645 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
646 LARGE_INTEGER MPDUInReceivedAMPDUCount;
647 } COUNTER_RALINK, *PCOUNTER_RALINK;
650 typedef struct _COUNTER_DRS {
651 // to record the each TX rate's quality. 0 is best, the bigger the worse.
652 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
653 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
654 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
655 ULONG CurrTxRateStableTime; // # of second in current TX rate
656 BOOLEAN fNoisyEnvironment;
657 BOOLEAN fLastSecAccordingRSSI;
658 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
659 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
661 } COUNTER_DRS, *PCOUNTER_DRS;
666 /***************************************************************************
667 * security key related data structure
668 **************************************************************************/
669 typedef struct _CIPHER_KEY {
670 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
671 UCHAR RxMic[8]; // make alignment
673 UCHAR TxTsc[6]; // 48bit TSC value
674 UCHAR RxTsc[6]; // 48bit TSC value
675 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
678 // Key length for each key, 0: entry is invalid
679 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
680 } CIPHER_KEY, *PCIPHER_KEY;
683 // structure to define WPA Group Key Rekey Interval
684 typedef struct PACKED _RT_802_11_WPA_REKEY {
685 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
686 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
687 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
690 /***************************************************************************
691 * RTUSB I/O related data structure
692 **************************************************************************/
693 typedef struct _RT_SET_ASIC_WCID {
694 ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
695 ULONG SetTid; // time-based: seconds, packet-based: kilo-packets
696 ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets
697 UCHAR Addr[MAC_ADDR_LEN]; // avoid in interrupt when write key
698 } RT_SET_ASIC_WCID,*PRT_SET_ASIC_WCID;
700 typedef struct _RT_SET_ASIC_WCID_ATTRI {
701 ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
702 ULONG Cipher; // ASIC Cipher definition
703 UCHAR Addr[ETH_LENGTH_OF_ADDRESS];
704 } RT_SET_ASIC_WCID_ATTRI,*PRT_SET_ASIC_WCID_ATTRI;
706 // for USB interface, avoid in interrupt when write key
707 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
709 USHORT MacTabMatchWCID; // ASIC
710 CIPHER_KEY CipherKey;
711 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
713 // Cipher suite type for mixed mode group cipher, P802.11i-2004
714 typedef enum _RT_802_11_CIPHER_SUITE_TYPE {
721 } RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE;
722 #endif // RTMP_MAC_USB //
725 UCHAR Addr[MAC_ADDR_LEN];
726 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
727 //00 02-Authentication timeout
728 //00 03-Challenge from AP failed
729 //00 04-Challenge to AP failed
731 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
735 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
736 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
741 typedef struct _CISCO_IAPP_CONTENT_
743 USHORT Length; //IAPP Length
744 UCHAR MessageType; //IAPP type
745 UCHAR FunctionCode; //IAPP function type
746 UCHAR DestinaionMAC[MAC_ADDR_LEN];
747 UCHAR SourceMAC[MAC_ADDR_LEN];
748 USHORT Tag; //Tag(element IE) - Adjacent AP report
749 USHORT TagLength; //Length of element not including 4 byte header
750 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
751 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
754 UCHAR Ssid[MAX_LEN_OF_SSID];
755 USHORT Seconds; //Seconds that the client has been disassociated.
756 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
760 * Fragment Frame structure
762 typedef struct _FRAGMENT_FRAME {
763 PNDIS_PACKET pFragPacket;
767 ULONG Flags; // Some extra frame information. bit 0: LLC presented
768 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
772 // Packet information for NdisQueryPacket
774 typedef struct _PACKET_INFO {
775 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
776 UINT BufferCount ; // Number of Buffer descriptor chained
777 UINT TotalPacketLength ; // Self explained
778 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
779 } PACKET_INFO, *PPACKET_INFO;
783 // Arcfour Structure Added by PaulWu
785 typedef struct _ARCFOUR
790 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
794 // Tkip Key structure which RC4 key & MIC calculation
796 typedef struct _TKIP_KEY_INFO {
797 UINT nBytesInM; // # bytes in M for MICKEY
800 ULONG K0; // for MICKEY Low
801 ULONG K1; // for MICKEY Hig
802 ULONG L; // Current state for MICKEY
803 ULONG R; // Current state for MICKEY
804 ULONG M; // Message accumulator for MICKEY
807 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
810 // Private / Misc data, counters for driver internal use
812 typedef struct __PRIVATE_STRUC {
813 UINT SystemResetCnt; // System reset counter
814 UINT TxRingFullCnt; // Tx ring full occurrance number
815 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
816 // Variables for WEP encryption / decryption in rtmp_wep.c
818 ARCFOURCONTEXT WEPCONTEXT;
822 } PRIVATE_STRUC, *PPRIVATE_STRUC;
825 /***************************************************************************
826 * Channel and BBP related data structures
827 **************************************************************************/
828 // structure to tune BBP R66 (BBP TUNING)
829 typedef struct _BBP_R66_TUNING {
831 USHORT FalseCcaLowerThreshold; // default 100
832 USHORT FalseCcaUpperThreshold; // default 512
834 UCHAR R66CurrentValue;
835 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
836 } BBP_R66_TUNING, *PBBP_R66_TUNING;
838 // structure to store channel TX power
839 typedef struct _CHANNEL_TX_POWER {
840 USHORT RemainingTimeForUse; //unit: sec
846 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
848 // structure to store 802.11j channel TX power
849 typedef struct _CHANNEL_11J_TX_POWER {
851 UCHAR BW; // BW_10 or BW_20
854 USHORT RemainingTimeForUse; //unit: sec
855 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
857 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
858 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
859 UCHAR EvaluateStableCnt;
860 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
861 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
862 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
863 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
864 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
865 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
866 SHORT Pair1LastAvgRssi; //
867 SHORT Pair2LastAvgRssi; //
868 ULONG RcvPktNumWhenEvaluate;
869 BOOLEAN FirstPktArrivedWhenEvaluate;
870 RALINK_TIMER_STRUCT RxAntDiversityTimer;
871 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
874 /***************************************************************************
875 * structure for radar detection and channel switch
876 **************************************************************************/
877 typedef struct _RADAR_DETECT_STRUCT {
878 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
879 UCHAR CSCount; //Channel switch counter
880 UCHAR CSPeriod; //Channel switch period (beacon count)
881 UCHAR RDCount; //Radar detection counter
882 UCHAR RDMode; //Radar Detection mode
883 UCHAR RDDurRegion; //Radar detection duration region
890 ULONG InServiceMonitorCount; // unit: sec
891 UINT8 DfsSessionTime;
894 UINT8 LongPulseRadarTh;
895 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
897 typedef enum _ABGBAND_STATE_ {
904 // Power save method control
905 typedef union _PS_CONTROL {
907 ULONG EnablePSinIdle:1; // Enable radio off when not connect to AP. radio on only when sitesurvey,
908 ULONG EnableNewPS:1; // Enable new Chip power save fucntion . New method can only be applied in chip version after 2872. and PCIe.
909 ULONG rt30xxPowerMode:2; // Power Level Mode for rt30xx chip
910 ULONG rt30xxFollowHostASPM:1; // Card Follows Host's setting for rt30xx chip.
911 ULONG rt30xxForceASPMTest:1; // Force enable L1 for rt30xx chip. This has higher priority than rt30xxFollowHostASPM Mode.
912 ULONG rsv:26; // Radio Measurement Enable
915 } PS_CONTROL, *PPS_CONTROL;
916 #endif // RTMP_MAC_PCI //
918 /***************************************************************************
919 * structure for MLME state machine
920 **************************************************************************/
921 typedef struct _MLME_STRUCT {
922 // STA state machines
923 STATE_MACHINE CntlMachine;
924 STATE_MACHINE AssocMachine;
925 STATE_MACHINE AuthMachine;
926 STATE_MACHINE AuthRspMachine;
927 STATE_MACHINE SyncMachine;
928 STATE_MACHINE WpaPskMachine;
929 STATE_MACHINE LeapMachine;
930 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
931 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
932 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
933 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
934 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
936 STATE_MACHINE ActMachine;
941 // common WPA state machine
942 STATE_MACHINE WpaMachine;
943 STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE];
947 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
948 ULONG Now32; // latch the value of NdisGetSystemUpTime()
949 ULONG LastSendNULLpsmTime;
952 NDIS_SPIN_LOCK TaskLock;
957 RALINK_TIMER_STRUCT PeriodicTimer;
958 RALINK_TIMER_STRUCT APSDPeriodicTimer;
959 RALINK_TIMER_STRUCT LinkDownTimer;
960 RALINK_TIMER_STRUCT LinkUpTimer;
962 UCHAR bPsPollTimerRunning;
963 RALINK_TIMER_STRUCT PsPollTimer;
964 RALINK_TIMER_STRUCT RadioOnOffTimer;
965 #endif // RTMP_MAC_PCI //
967 ULONG OneSecPeriodicRound;
970 BOOLEAN bLowThroughput;
971 BOOLEAN bEnableAutoAntennaCheck;
972 RALINK_TIMER_STRUCT RxAntEvalTimer;
980 RALINK_TIMER_STRUCT AutoWakeupTimer;
981 BOOLEAN AutoWakeupTimerRunning;
982 #endif // RTMP_MAC_USB //
983 } MLME_STRUCT, *PMLME_STRUCT;
986 /***************************************************************************
987 * 802.11 N related data structures
988 **************************************************************************/
989 struct reordering_mpdu
991 struct reordering_mpdu *next;
992 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
993 int Sequence; /* sequence number of MPDU */
997 struct reordering_list
999 struct reordering_mpdu *next;
1003 struct reordering_mpdu_pool
1006 NDIS_SPIN_LOCK lock;
1007 struct reordering_list freelist;
1010 typedef enum _REC_BLOCKACK_STATUS
1014 Recipient_HandleRes,
1016 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1018 typedef enum _ORI_BLOCKACK_STATUS
1024 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1026 typedef struct _BA_ORI_ENTRY{
1031 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1033 USHORT TimeOutValue;
1034 ORI_BLOCKACK_STATUS ORI_BA_Status;
1035 RALINK_TIMER_STRUCT ORIBATimer;
1037 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1039 typedef struct _BA_REC_ENTRY {
1042 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1044 //UCHAR Curindidx; // the head in the RX reordering buffer
1046 // USHORT LastIndSeqAtTimer;
1047 USHORT TimeOutValue;
1048 RALINK_TIMER_STRUCT RECBATimer;
1049 ULONG LastIndSeqAtTimer;
1052 REC_BLOCKACK_STATUS REC_BA_Status;
1053 // UCHAR RxBufIdxUsed;
1054 // corresponding virtual address for RX reordering packet storage.
1055 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1056 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1057 // struct _BA_REC_ENTRY *pNext;
1059 struct reordering_list list;
1060 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1064 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1065 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1066 ULONG numDoneOriginator; // count Done Originator sessions
1067 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1068 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1069 } BA_TABLE, *PBA_TABLE;
1071 //For QureyBATableOID use;
1072 typedef struct PACKED _OID_BA_REC_ENTRY{
1073 UCHAR MACAddr[MAC_ADDR_LEN];
1074 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1077 REC_BLOCKACK_STATUS REC_BA_Status[8];
1078 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1080 //For QureyBATableOID use;
1081 typedef struct PACKED _OID_BA_ORI_ENTRY{
1082 UCHAR MACAddr[MAC_ADDR_LEN];
1083 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
1086 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1087 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1089 typedef struct _QUERYBA_TABLE{
1090 OID_BA_ORI_ENTRY BAOriEntry[32];
1091 OID_BA_REC_ENTRY BARecEntry[32];
1092 UCHAR OriNum;// Number of below BAOriEntry
1093 UCHAR RecNum;// Number of below BARecEntry
1094 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1096 typedef union _BACAP_STRUC {
1098 UINT32 RxBAWinLimit:8;
1099 UINT32 TxBAWinLimit:8;
1100 UINT32 AutoBA:1; // automatically BA
1101 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1102 UINT32 MpduDensity:3;
1103 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1104 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1105 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1106 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1107 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.
1111 } BACAP_STRUC, *PBACAP_STRUC;
1115 BOOLEAN IsRecipient;
1116 UCHAR MACAddr[MAC_ADDR_LEN];
1120 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1121 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1125 #define IS_HT_STA(_pMacEntry) \
1126 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
1128 #define IS_HT_RATE(_pMacEntry) \
1129 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1131 #define PEER_IS_HT_RATE(_pMacEntry) \
1132 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1136 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1137 typedef struct _IOT_STRUC {
1139 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1140 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1141 ULONG OneSecInWindowCount;
1142 ULONG OneSecFrameDuplicateCount;
1143 ULONG OneSecOutWindowCount;
1148 BOOLEAN bRTSLongProtOn;
1149 BOOLEAN bLastAtheros;
1150 BOOLEAN bCurrentAtheros;
1151 BOOLEAN bNowAtherosBurstOn;
1152 BOOLEAN bNextDisableRxBA;
1154 } IOT_STRUC, *PIOT_STRUC;
1156 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1157 typedef union _REG_TRANSMIT_SETTING {
1160 //UINT32 MCS:7; // MCS
1163 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1165 UINT32 STBC:1; //SPACE
1172 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1174 typedef union _DESIRED_TRANSMIT_SETTING {
1176 USHORT MCS:7; // MCS
1178 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1182 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1185 /***************************************************************************
1186 * USB-based chip Beacon related data structures
1187 **************************************************************************/
1188 #define BEACON_BITMAP_MASK 0xff
1189 typedef struct _BEACON_SYNC_STRUCT_
1191 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1192 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1193 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1194 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1195 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1196 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1197 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1198 }BEACON_SYNC_STRUCT;
1199 #endif // RTMP_MAC_USB //
1201 /***************************************************************************
1202 * Multiple SSID related data structures
1203 **************************************************************************/
1204 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1205 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1207 /* clear bcmc TIM bit */
1208 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1209 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1211 /* set bcmc TIM bit */
1212 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1213 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1215 /* clear a station PS TIM bit */
1216 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1217 { UCHAR tim_offset = wcid >> 3; \
1218 UCHAR bit_offset = wcid & 0x7; \
1219 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1221 /* set a station PS TIM bit */
1222 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1223 { UCHAR tim_offset = wcid >> 3; \
1224 UCHAR bit_offset = wcid & 0x7; \
1225 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1228 // configuration common to OPMODE_AP as well as OPMODE_STA
1229 typedef struct _COMMON_CONFIG {
1231 BOOLEAN bCountryFlag;
1232 UCHAR CountryCode[3];
1234 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1235 UCHAR CountryRegionForABand; // Enum of country region for A band
1236 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1237 USHORT Dsifs; // in units of usec
1238 ULONG PacketFilter; // Packet filter for receiving
1239 UINT8 RegulatoryClass;
1241 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1242 UCHAR SsidLen; // the actual ssid length in used
1243 UCHAR LastSsidLen; // the actual ssid length in used
1244 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1245 UCHAR LastBssid[MAC_ADDR_LEN];
1247 UCHAR Bssid[MAC_ADDR_LEN];
1248 USHORT BeaconPeriod;
1250 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1252 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1254 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1256 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1257 UCHAR MaxDesiredRate;
1258 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1260 ULONG BasicRateBitmap; // backup basic ratebitmap
1262 BOOLEAN bAPSDCapable;
1263 BOOLEAN bInServicePeriod;
1269 /* because TSPEC can modify the APSD flag, we need to keep the APSD flag
1270 requested in association stage from the station;
1271 we need to recover the APSD flag after the TSPEC is deleted. */
1272 BOOLEAN bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */
1273 BOOLEAN bACMAPSDTr[4]; /* no use */
1275 BOOLEAN bNeedSendTriggerFrame;
1276 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1277 ULONG TriggerTimerCount;
1279 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1280 // move to MULTISSID_STRUCT for MBSS
1281 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1282 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1283 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1284 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1285 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1286 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1287 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1288 //BOOLEAN bAutoTxRateSwitch;
1289 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1290 UCHAR RtsRate; // RATE_xxx
1291 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1292 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1293 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1295 USHORT RtsThreshold; // in unit of BYTE
1296 USHORT FragmentThreshold; // in unit of BYTE
1298 UCHAR TxPower; // in unit of mW
1299 ULONG TxPowerPercentage; // 0~100 %
1300 ULONG TxPowerDefault; // keep for TxPowerPercentage
1301 UINT8 PwrConstraint;
1303 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1304 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1306 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1307 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1308 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1309 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1310 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1311 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST
1312 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1313 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1314 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1315 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1319 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1320 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1321 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1322 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1323 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1324 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1325 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1326 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1327 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1328 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1329 ULONG OpStatusFlags;
1331 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1332 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1334 // IEEE802.11H--DFS.
1335 RADAR_DETECT_STRUCT RadarDetect;
1338 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1339 //RT_HT_CAPABILITY SupportedHtPhy;
1340 RT_HT_CAPABILITY DesiredHtPhy;
1341 HT_CAPABILITY_IE HtCapability;
1342 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1343 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1344 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1345 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
1348 BOOLEAN bMIMOPSEnable;
1350 //2008/11/05: KH add to support Antenna power-saving of AP<--
1351 BOOLEAN bGreenAPEnable;
1352 //2008/11/05: KH add to support Antenna power-saving of AP-->
1353 BOOLEAN bDisableReordering;
1354 BOOLEAN bForty_Mhz_Intolerant;
1355 BOOLEAN bExtChannelSwitchAnnouncement;
1356 BOOLEAN bRcvBSSWidthTriggerEvents;
1357 ULONG LastRcvBSSWidthTriggerEventsTime;
1361 // Enable wireless event
1362 BOOLEAN bWirelessEvent;
1363 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1365 // Tx & Rx Stream number selection
1369 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1372 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1373 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1374 RT_HT_CAPABILITY SupportedHtPhy;
1375 ULONG MaxPktOneTxBulk;
1379 BOOLEAN IsUpdateBeacon;
1380 BEACON_SYNC_STRUCT *pBeaconSync;
1381 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1382 UINT32 BeaconAdjust;
1383 UINT32 BeaconFactor;
1384 UINT32 BeaconRemain;
1385 #endif // RTMP_MAC_USB //
1387 NDIS_SPIN_LOCK MeasureReqTabLock;
1388 PMEASURE_REQ_TAB pMeasureReqTab;
1390 NDIS_SPIN_LOCK TpcReqTabLock;
1391 PTPC_REQ_TAB pTpcReqTab;
1393 BOOLEAN PSPXlink; // 0: Disable. 1: Enable
1395 #if defined(RT305x)||defined(RT30xx)
1396 // request by Gary, for High Power issue
1397 UCHAR HighPowerPatchDisabled;
1400 BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */
1401 } COMMON_CONFIG, *PCOMMON_CONFIG;
1404 /* Modified by Wu Xi-Kun 4/21/2006 */
1405 // STA configuration and status
1406 typedef struct _STA_ADMIN_CONFIG {
1408 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1409 // the user intended configuration, but not necessary fully equal to the final
1410 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1411 // AP or IBSS holder).
1412 // Once initialized, user configuration can only be changed via OID_xxx
1413 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1414 USHORT AtimWin; // used when starting a new IBSS
1417 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1418 // the user intended configuration, and should be always applied to the final
1419 // settings in ACTIVE BSS without compromising with the BSS holder.
1420 // Once initialized, user configuration can only be changed via OID_xxx
1422 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1423 USHORT DefaultListenCount; // default listen count;
1424 ULONG WindowsPowerMode; // Power mode for AC power
1425 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1426 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1427 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1428 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1430 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1431 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1432 USHORT DisassocReason;
1433 UCHAR DisassocSta[MAC_ADDR_LEN];
1434 USHORT DeauthReason;
1435 UCHAR DeauthSta[MAC_ADDR_LEN];
1436 USHORT AuthFailReason;
1437 UCHAR AuthFailSta[MAC_ADDR_LEN];
1439 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1440 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1441 NDIS_802_11_WEP_STATUS WepStatus;
1442 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1444 // Add to support different cipher suite for WPA2/WPA mode
1445 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1446 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1447 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1448 USHORT RsnCapability;
1450 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1452 UCHAR WpaPassPhrase[64]; // WPA PSK pass phrase
1453 UINT WpaPassPhraseLen; // the length of WPA PSK pass phrase
1454 UCHAR PMK[32]; // WPA PSK mode PMK
1455 UCHAR PTK[64]; // WPA PSK mode PTK
1456 UCHAR GTK[32]; // GTK from authenticator
1457 BSSID_INFO SavedPMK[PMKID_NO];
1458 UINT SavedPMKNum; // Saved PMKID number
1463 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1466 // For WPA countermeasures
1467 ULONG LastMicErrorTime; // record last MIC error time
1468 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1469 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1470 // For WPA-PSK supplicant state
1471 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1472 UCHAR ReplayCounter[8];
1473 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1474 UCHAR SNonce[32]; // SNonce for WPA-PSK
1476 UCHAR LastSNR0; // last received BEACON's SNR
1477 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1478 RSSI_SAMPLE RssiSample;
1479 ULONG NumOfAvgRssiSample;
1481 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1482 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1483 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1484 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1486 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1487 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1488 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1489 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1490 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1491 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1492 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1494 // New for WPA, windows want us to keep association information and
1495 // Fixed IEs from last association response
1496 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1497 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1498 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1499 USHORT ResVarIELen; // Length of next VIE include EID & Length
1500 UCHAR ResVarIEs[MAX_VIE_LEN];
1503 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
1505 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
1506 USHORT RPIDensity[8]; // Array for RPI density collection
1508 UCHAR RMReqCnt; // Number of measurement request saved.
1509 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
1510 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
1511 // It must be the same channel with maximum duration
1512 USHORT ParallelDuration; // Maximum duration for parallel measurement
1513 UCHAR ParallelChannel; // Only one channel with parallel measurement
1514 USHORT IAPPToken; // IAPP dialog token
1515 // Hack for channel load and noise histogram parameters
1516 UCHAR NHFactor; // Parameter for Noise histogram
1517 UCHAR CLFactor; // Parameter for channel load
1519 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
1520 BOOLEAN StaQuickResponeForRateUpTimerRunning;
1522 UCHAR DtimCount; // 0.. DtimPeriod-1
1523 UCHAR DtimPeriod; // default = 3
1525 ////////////////////////////////////////////////////////////////////////////////////////
1526 // This is only for WHQL test.
1528 ////////////////////////////////////////////////////////////////////////////////////////
1530 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
1532 BOOLEAN bAutoRoaming; // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI
1533 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
1536 BOOLEAN IEEE8021x_required_keys;
1537 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
1538 UCHAR DesireSharedKeyId;
1540 // 0: driver ignores wpa_supplicant
1541 // 1: wpa_supplicant initiates scanning and AP selection
1542 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
1543 UCHAR WpaSupplicantUP;
1544 UCHAR WpaSupplicantScanCount;
1545 BOOLEAN bRSN_IE_FromWpaSupplicant;
1550 BOOLEAN bTGnWifiTest;
1551 BOOLEAN bScanReqIsFromWebUI;
1553 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1554 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
1555 RT_HT_PHY_INFO DesiredHtPhyInfo;
1556 BOOLEAN bAutoTxRateSwitch;
1560 // PS Control has 2 meanings for advanced power save function.
1561 // 1. EnablePSinIdle : When no connection, always radio off except need to do site survey.
1562 // 2. EnableNewPS : will save more current in sleep or radio off mode.
1563 PS_CONTROL PSControl;
1564 #endif // RTMP_MAC_PCI //
1569 BOOLEAN bAutoConnectByBssid;
1570 ULONG BeaconLostTime; // seconds
1571 BOOLEAN bForceTxBurst; // 1: force enble TX PACKET BURST, 0: disable
1572 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
1574 // This data structure keep the current active BSS/IBSS's configuration that this STA
1575 // had agreed upon joining the network. Which means these parameters are usually decided
1576 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
1577 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
1578 // Normally, after SCAN or failed roaming attempts, we need to recover back to
1579 // the current active settings.
1580 typedef struct _STA_ACTIVE_CONFIG {
1582 USHORT AtimWin; // in kusec; IBSS parameter set element
1583 USHORT CapabilityInfo;
1584 USHORT CfpMaxDuration;
1587 // Copy supported rate from desired AP's beacon. We are trying to match
1588 // AP's supported and extended rate settings.
1589 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1590 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1593 // Copy supported ht from desired AP's beacon. We are trying to match
1594 RT_HT_PHY_INFO SupportedPhyInfo;
1595 RT_HT_CAPABILITY SupportedHtPhy;
1596 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
1603 typedef struct _MAC_TABLE_ENTRY {
1604 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
1605 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
1606 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
1607 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
1608 BOOLEAN ValidAsMesh;
1609 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
1611 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
1613 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
1615 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
1616 UCHAR CMTimerRunning;
1617 UCHAR apidx; // MBSS number
1619 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
1620 UCHAR ANonce[LEN_KEY_DESC_NONCE];
1621 UCHAR SNonce[LEN_KEY_DESC_NONCE];
1622 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
1625 RALINK_TIMER_STRUCT RetryTimer;
1626 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
1627 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1628 NDIS_802_11_WEP_STATUS WepStatus;
1629 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1630 AP_WPA_STATE WpaState;
1633 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1634 CIPHER_KEY PairwiseKey;
1637 UCHAR PMKID[LEN_PMKID];
1640 UCHAR Addr[MAC_ADDR_LEN];
1643 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
1644 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
1646 USHORT CapabilityInfo;
1648 ULONG NoDataIdleCount;
1649 UINT16 StationKeepAliveCount; // unit: second
1651 QUEUE_HEADER PsQueue;
1653 UINT32 StaConnectTime; // the live time of this station since associated with AP
1656 USHORT NoBADataCountDown;
1658 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
1659 UINT TxBFCount; // 3*3
1661 UINT DebugFIFOCount;
1666 //====================================================
1667 //WDS entry needs these
1668 // if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
1669 UINT MatchWDSTabIdx;
1670 UCHAR MaxSupportedRate;
1672 UCHAR CurrTxRateIndex;
1673 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1674 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1675 // USHORT OneSecTxOkCount;
1676 UINT32 OneSecTxNoRetryOkCount;
1677 UINT32 OneSecTxRetryOkCount;
1678 UINT32 OneSecTxFailCount;
1679 UINT32 ContinueTxFailCnt;
1680 UINT32 CurrTxRateStableTime; // # of second in current TX rate
1681 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1682 //====================================================
1684 BOOLEAN fNoisyEnvironment;
1685 BOOLEAN fLastSecAccordingRSSI;
1686 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1687 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1688 ULONG LastTxOkCount;
1689 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1691 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1692 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1693 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
1694 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
1695 ULONG ClientStatusFlags;
1697 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1699 // HT EWC MIMO-N used parameters
1700 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
1701 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
1702 USHORT TXAutoBAbitmap;
1703 USHORT BADeclineBitmap;
1704 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
1705 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
1706 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
1708 // 802.11n features.
1710 UCHAR MaxRAmpduFactor;
1712 UCHAR MmpsMode; // MIMO power save more.
1714 HT_CAPABILITY_IE HTCapability;
1716 BOOLEAN bAutoTxRateSwitch;
1719 struct _MAC_TABLE_ENTRY *pNext;
1720 USHORT TxSeq[NUM_OF_TID];
1721 USHORT NonQosDataSeq;
1723 RSSI_SAMPLE RssiSample;
1725 UINT32 TXMCSExpected[16];
1726 UINT32 TXMCSSuccessful[16];
1727 UINT32 TXMCSFailed[16];
1728 UINT32 TXMCSAutoFallBack[16][16];
1730 ULONG LastBeaconRxTime;
1732 ULONG AssocDeadLine;
1733 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
1735 typedef struct _MAC_TABLE {
1737 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
1738 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
1739 QUEUE_HEADER McastPsQueue;
1741 BOOLEAN fAnyStationInPsm;
1742 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
1743 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
1744 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
1745 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
1746 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
1747 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
1748 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
1749 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
1750 //2008/10/28: KH add to support Antenna power-saving of AP<--
1751 //2008/10/28: KH add to support Antenna power-saving of AP-->
1752 } MAC_TABLE, *PMAC_TABLE;
1762 BOOLEAN bGreenField;
1766 typedef struct _RTMP_DEV_INFO_
1769 RTMP_INF_TYPE infType;
1775 struct _RTMP_CHIP_OP_
1777 /* Calibration access related callback functions */
1778 int (*eeinit)(RTMP_ADAPTER *pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */
1779 int (*eeread)(RTMP_ADAPTER *pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */
1781 /* MCU related callback functions */
1782 int (*loadFirmware)(RTMP_ADAPTER *pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */
1783 int (*eraseFirmware)(RTMP_ADAPTER *pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */
1784 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); */
1786 /* RF access related callback functions */
1787 REG_PAIR *pRFRegTable;
1788 void (*AsicRfInit)(RTMP_ADAPTER *pAd);
1789 void (*AsicRfTurnOn)(RTMP_ADAPTER *pAd);
1790 void (*AsicRfTurnOff)(RTMP_ADAPTER *pAd);
1791 void (*AsicReverseRfFromSleepMode)(RTMP_ADAPTER *pAd);
1792 void (*AsicHaltAction)(RTMP_ADAPTER *pAd);
1797 // The miniport adapter structure
1799 struct _RTMP_ADAPTER
1801 PVOID OS_Cookie; // save specific structure relative to OS
1805 RTMP_CHIP_OP chipOps;
1806 USHORT ThisTbttNumToNextWakeUp;
1809 /*****************************************************************************************/
1810 /* PCI related parameters */
1811 /*****************************************************************************************/
1812 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
1813 unsigned int irq_num;
1815 USHORT LnkCtrlBitMask;
1816 USHORT RLnkCtrlConfiguration;
1817 USHORT RLnkCtrlOffset;
1818 USHORT HostLnkCtrlConfiguration;
1819 USHORT HostLnkCtrlOffset;
1820 USHORT PCIePowerSaveLevel;
1821 ULONG Rt3xxHostLinkCtrl; // USed for 3090F chip
1822 ULONG Rt3xxRalinkLinkCtrl; // USed for 3090F chip
1823 USHORT DeviceID; // Read from PCI config
1824 ULONG AccessBBPFailCount;
1825 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
1826 BOOLEAN bPCIclkOffDisableTx; //
1828 BOOLEAN brt30xxBanMcuCmd; //when = 0xff means all commands are ok to set .
1829 BOOLEAN b3090ESpecialChip; //3090E special chip that write EEPROM 0x24=0x9280.
1830 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
1832 UINT int_enable_reg;
1833 UINT int_disable_mask;
1837 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
1838 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
1839 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
1840 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
1841 #endif // RTMP_MAC_PCI //
1844 NDIS_SPIN_LOCK irq_lock;
1848 /*****************************************************************************************/
1849 /* USB related parameters */
1850 /*****************************************************************************************/
1851 struct usb_config_descriptor *config;
1852 UINT BulkInEpAddr; // bulk-in endpoint address
1853 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
1856 USHORT BulkOutMaxPacketSize;
1857 USHORT BulkInMaxPacketSize;
1859 //======Control Flags
1860 LONG PendingIoCount;
1862 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
1866 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
1867 RTMP_OS_TASK cmdQTask;
1869 //======Semaphores (event)
1870 RTMP_OS_SEM UsbVendorReq_semaphore;
1871 PVOID UsbVendorReqBuf;
1872 wait_queue_head_t *wait;
1873 #endif // RTMP_MAC_USB //
1875 /*****************************************************************************************/
1876 /* RBUS related parameters */
1877 /*****************************************************************************************/
1880 /*****************************************************************************************/
1881 /* Both PCI/USB related parameters */
1882 /*****************************************************************************************/
1883 //RTMP_DEV_INFO chipInfo;
1884 RTMP_INF_TYPE infType;
1886 /*****************************************************************************************/
1887 /* Driver Mgmt related parameters */
1888 /*****************************************************************************************/
1889 RTMP_OS_TASK mlmeTask;
1890 #ifdef RTMP_TIMER_TASK_SUPPORT
1891 // If you want use timer task to handle the timer related jobs, enable this.
1892 RTMP_TIMER_TASK_QUEUE TimerQ;
1893 NDIS_SPIN_LOCK TimerQLock;
1894 RTMP_OS_TASK timerTask;
1895 #endif // RTMP_TIMER_TASK_SUPPORT //
1898 /*****************************************************************************************/
1899 /* Tx related parameters */
1900 /*****************************************************************************************/
1901 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
1902 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
1905 // Data related context and AC specified, 4 AC supported
1906 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
1907 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
1909 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
1910 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
1912 // 4 sets of Bulk Out index and pending flag
1913 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
1915 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
1916 UCHAR bulkResetPipeid;
1917 BOOLEAN MgmtBulkPending;
1918 ULONG bulkResetReq[6];
1919 #endif // RTMP_MAC_USB //
1921 // resource for software backlog queues
1922 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
1923 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
1925 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
1926 RTMP_MGMT_RING MgmtRing;
1927 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
1930 /*****************************************************************************************/
1931 /* Rx related parameters */
1932 /*****************************************************************************************/
1935 RTMP_RX_RING RxRing;
1936 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
1938 NDIS_SPIN_LOCK McuCmdLock; //MCU Command Queue spinlock
1940 #endif // RTMP_MAC_PCI //
1942 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
1943 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
1944 UCHAR PendingRx; // The Maximum pending Rx value should be RX_RING_SIZE.
1945 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
1946 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
1947 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
1948 ULONG TransferBufferLength; // current length of the packet buffer
1949 ULONG ReadPosition; // current read position in a packet buffer
1950 #endif // RTMP_MAC_USB //
1952 /*****************************************************************************************/
1953 /* ASIC related parameters */
1954 /*****************************************************************************************/
1955 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
1957 // ---------------------------
1959 // ---------------------------
1960 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
1961 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
1962 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
1963 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
1964 BOOLEAN EepromAccess;
1968 // ---------------------------
1970 // ---------------------------
1971 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
1972 CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power
1973 BBP_R66_TUNING BbpTuning;
1975 // ----------------------------
1977 // ----------------------------
1978 UCHAR RfIcType; // RFIC_xxx
1979 ULONG RfFreqOffset; // Frequency offset for channel switching
1980 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
1982 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
1983 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
1985 // This soft Rx Antenna Diversity mechanism is used only when user set
1986 // RX Antenna = DIVERSITY ON
1987 SOFT_RX_ANT_DIVERSITY RxAnt;
1990 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
1991 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
1992 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
1993 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
1995 UCHAR ChannelListNum; // number of channel in ChannelList[]
1998 ULONG Tx20MPwrCfgABand[5];
1999 ULONG Tx20MPwrCfgGBand[5];
2000 ULONG Tx40MPwrCfgABand[5];
2001 ULONG Tx40MPwrCfgGBand[5];
2003 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2004 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2005 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2006 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2007 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2008 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2010 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2011 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2012 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2013 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2014 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2015 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2017 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2018 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2019 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2021 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2022 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2023 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2025 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2026 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2027 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2028 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2034 UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G
2035 UCHAR TxMixerGain5G;
2037 // ----------------------------
2039 // ----------------------------
2040 MCU_LEDCS_STRUC LedCntl;
2041 USHORT Led1; // read from EEPROM 0x3c
2042 USHORT Led2; // EEPROM 0x3e
2043 USHORT Led3; // EEPROM 0x40
2044 UCHAR LedIndicatorStrength;
2045 UCHAR RssiSingalstrengthOffet;
2046 BOOLEAN bLedOnScanning;
2049 /*****************************************************************************************/
2050 /* 802.11 related parameters */
2051 /*****************************************************************************************/
2052 // outgoing BEACON frame buffer and corresponding TXD
2053 TXWI_STRUC BeaconTxWI;
2055 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2057 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2058 PSPOLL_FRAME PsPollFrame;
2059 HEADER_802_11 NullFrame;
2062 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2063 TX_CONTEXT NullContext;
2064 TX_CONTEXT PsPollContext;
2065 TX_CONTEXT RTSContext;
2066 #endif // RTMP_MAC_USB //
2068 //=========AP===========
2071 //=======STA===========
2072 // -----------------------------------------------
2073 // STA specific configuration & operation status
2074 // used only when pAd->OpMode == OPMODE_STA
2075 // -----------------------------------------------
2076 STA_ADMIN_CONFIG StaCfg; // user desired settings
2077 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2078 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2079 NDIS_MEDIA_STATE PreMediaState;
2081 //=======Common===========
2082 // OP mode: either AP or STA
2083 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2085 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2088 /* MAT related parameters */
2090 // configuration: read from Registry & E2PROM
2091 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2092 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2093 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2095 // ------------------------------------------------------
2096 // common configuration to both OPMODE_STA and OPMODE_AP
2097 // ------------------------------------------------------
2098 COMMON_CONFIG CommonCfg;
2101 // AP needs those vaiables for site survey feature.
2102 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2103 BSS_TABLE ScanTab; // store the latest SCAN result
2105 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2106 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2107 NDIS_SPIN_LOCK MacTabLock;
2111 NDIS_SPIN_LOCK BATabLock;
2112 RALINK_TIMER_STRUCT RECBATimer;
2114 // encryption/decryption KEY tables
2115 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2117 // RX re-assembly buffer for fragmentation
2118 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2121 COUNTER_802_3 Counters8023; // 802.3 counters
2122 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2123 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2124 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2125 PRIVATE_STRUC PrivateInfo; // Private information & counters
2127 // flags, see fRTMP_ADAPTER_xxx flags
2128 ULONG Flags; // Represent current device status
2129 ULONG PSFlags; // Power Save operation flag.
2131 // current TX sequence #
2134 // Control disconnect / connect event generation
2135 //+++Didn't used anymore
2140 //+++Used only for Station
2141 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2144 ULONG ExtraInfo; // Extra information for displaying status
2145 ULONG SystemErrorBitmap; // b0: E2PROM version error
2147 //+++Didn't used anymore
2148 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2151 // ---------------------------
2153 // ---------------------------
2154 RT_802_11_EVENT_TABLE EventTab;
2159 /*****************************************************************************************/
2160 /* Statistic related parameters */
2161 /*****************************************************************************************/
2163 ULONG BulkOutDataOneSecCount;
2164 ULONG BulkInDataOneSecCount;
2165 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2166 ULONG watchDogRxCnt;
2167 ULONG watchDogRxOverFlowCnt;
2168 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2169 INT TransferedLength[NUM_OF_TX_RING];
2170 #endif // RTMP_MAC_USB //
2172 BOOLEAN bUpdateBcnCntDone;
2173 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2174 // ----------------------------
2176 // ----------------------------
2177 //ULONG DebugSetting[4];
2178 BOOLEAN bBanAllBaSetup;
2179 BOOLEAN bPromiscuous;
2181 // ----------------------------
2182 // rt2860c emulation-use Parameters
2183 // ----------------------------
2184 //ULONG rtsaccu[30];
2185 //ULONG ctsaccu[30];
2186 //ULONG cfendaccu[30];
2187 //ULONG bacontent[16];
2188 //ULONG rxint[RX_RING_SIZE+1];
2191 BOOLEAN bForcePrintTX;
2192 BOOLEAN bForcePrintRX;
2193 //BOOLEAN bDisablescanning; //defined in RT2870 USB
2194 BOOLEAN bStaFifoTest;
2195 BOOLEAN bProtectionTest;
2196 BOOLEAN bBroadComHT;
2197 //+++Following add from RT2870 USB.
2199 ULONG BulkOutComplete;
2200 ULONG BulkOutCompleteOther;
2201 ULONG BulkOutCompleteCancel; // seems not use now?
2203 ULONG BulkInComplete;
2204 ULONG BulkInCompleteFail;
2207 struct wificonf WIFItestbed;
2209 struct reordering_mpdu_pool mpdu_blk_pool;
2211 ULONG OneSecondnonBEpackets; // record non BE packets per second
2214 struct iw_statistics iw_stats;
2216 struct net_device_stats stats;
2223 ULONG TbttTickCount;
2224 #ifdef PCI_MSI_SUPPORT
2226 #endif // PCI_MSI_SUPPORT //
2231 #define TIME_BASE (1000000/OS_HZ)
2232 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2233 UCHAR flg_be_adjust;
2234 ULONG be_adjust_last_time;
2242 UINT8 FlgCtsEnabled;
2243 UINT8 PM_FlgSuspend;
2246 #ifdef RTMP_EFUSE_SUPPORT
2248 UCHAR EEPROMImage[1024];
2249 #endif // RTMP_EFUSE_SUPPORT //
2255 #define DELAYINTMASK 0x0003fffb
2256 #define INTMASK 0x0003fffb
2257 #define IndMask 0x0003fffc
2258 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2259 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2260 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2261 #define TxCoherent 0x00020000 // tx coherent
2262 #define RxCoherent 0x00010000 // rx coherent
2263 #define McuCommand 0x00000200 // mcu
2264 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2265 #define TBTTInt 0x00000800 // TBTT interrupt
2266 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2267 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2268 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2271 /***************************************************************************
2272 * Rx Path software control block related data structures
2273 **************************************************************************/
2274 typedef struct _RX_BLK_
2276 // RXD_STRUC RxD; // sample
2277 RT28XX_RXD_STRUC RxD;
2279 PHEADER_802_11 pHeader;
2280 PNDIS_PACKET pRxPacket;
2284 UCHAR UserPriority; // for calculate TKIP MIC using
2288 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2289 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2290 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2293 #define fRX_WDS 0x0001
2294 #define fRX_AMSDU 0x0002
2295 #define fRX_ARALINK 0x0004
2296 #define fRX_HTC 0x0008
2297 #define fRX_PAD 0x0010
2298 #define fRX_AMPDU 0x0020
2299 #define fRX_QOS 0x0040
2300 #define fRX_INFRA 0x0080
2301 #define fRX_EAP 0x0100
2302 #define fRX_MESH 0x0200
2303 #define fRX_APCLI 0x0400
2304 #define fRX_DLS 0x0800
2305 #define fRX_WPI 0x1000
2307 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2308 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2309 #define LENGTH_ARALINK_HEADER_FIELD 2
2312 /***************************************************************************
2313 * Tx Path software control block related data structures
2314 **************************************************************************/
2315 #define TX_UNKOWN_FRAME 0x00
2316 #define TX_MCAST_FRAME 0x01
2317 #define TX_LEGACY_FRAME 0x02
2318 #define TX_AMPDU_FRAME 0x04
2319 #define TX_AMSDU_FRAME 0x08
2320 #define TX_RALINK_FRAME 0x10
2321 #define TX_FRAG_FRAME 0x20
2324 // Currently the sizeof(TX_BLK) is 148 bytes.
2325 typedef struct _TX_BLK_
2328 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2329 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2330 USHORT TotalFragNum; // Total frame fragments required in one batch
2331 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2333 QUEUE_HEADER TxPacketList;
2334 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2335 HTTRANSMIT_SETTING *pTransmit;
2337 // Following structure used for the characteristics of a specific packet.
2338 PNDIS_PACKET pPacket;
2339 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2340 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2341 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2342 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2343 UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2344 //RT2870 2.1.0.0 uses only 80 bytes
2345 //RT3070 2.1.1.0 uses only 96 bytes
2346 //RT3090 2.1.0.0 uses only 96 bytes
2347 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2348 UCHAR HdrPadLen; // recording Header Padding Length;
2349 UCHAR apidx; // The interface associated to this packet
2350 UCHAR Wcid; // The MAC entry associated to this packet
2351 UCHAR UserPriority; // priority class of packet
2352 UCHAR FrameGap; // what kind of IFS this packet use
2353 UCHAR MpduReqNum; // number of fragments of this frame
2354 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2355 UCHAR CipherAlg; // cipher alogrithm
2360 USHORT Flags; //See following definitions for detail.
2362 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2363 ULONG Priv; // Hardware specific value saved in here.
2367 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2368 #define fTX_bAckRequired 0x0002 // the packet need ack response
2369 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2370 #define fTX_bHTRate 0x0008 // allow to use HT rate
2371 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2372 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2373 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2374 #define fTX_bWMM 0x0080 // QOS Data
2375 #define fTX_bClearEAPFrame 0x0100
2377 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2378 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2379 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2386 /***************************************************************************
2387 * Other static inline function definitions
2388 **************************************************************************/
2389 static inline VOID ConvertMulticastIP2MAC(
2391 IN PUCHAR *ppMacAddr,
2392 IN UINT16 ProtoType)
2394 if (pIpAddr == NULL)
2397 if (ppMacAddr == NULL || *ppMacAddr == NULL)
2403 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2404 *(*ppMacAddr) = 0x33;
2405 *(*ppMacAddr + 1) = 0x33;
2406 *(*ppMacAddr + 2) = pIpAddr[12];
2407 *(*ppMacAddr + 3) = pIpAddr[13];
2408 *(*ppMacAddr + 4) = pIpAddr[14];
2409 *(*ppMacAddr + 5) = pIpAddr[15];
2414 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2415 *(*ppMacAddr) = 0x01;
2416 *(*ppMacAddr + 1) = 0x00;
2417 *(*ppMacAddr + 2) = 0x5e;
2418 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
2419 *(*ppMacAddr + 4) = pIpAddr[2];
2420 *(*ppMacAddr + 5) = pIpAddr[3];
2428 char *GetPhyMode(int Mode);
2429 char* GetBW(int BW);
2432 // Private routines in rtmp_init.c
2434 NDIS_STATUS RTMPAllocAdapterBlock(
2436 OUT PRTMP_ADAPTER *ppAdapter);
2438 NDIS_STATUS RTMPAllocTxRxRingMemory(
2439 IN PRTMP_ADAPTER pAd);
2441 VOID RTMPFreeAdapter(
2442 IN PRTMP_ADAPTER pAd);
2444 NDIS_STATUS NICReadRegParameters(
2445 IN PRTMP_ADAPTER pAd,
2446 IN NDIS_HANDLE WrapperConfigurationContext);
2448 #ifdef RTMP_RF_RW_SUPPORT
2449 VOID NICInitRFRegisters(
2450 IN PRTMP_ADAPTER pAd);
2452 VOID RtmpChipOpsRFHook(
2453 IN RTMP_ADAPTER *pAd);
2455 NDIS_STATUS RT30xxWriteRFRegister(
2456 IN PRTMP_ADAPTER pAd,
2460 NDIS_STATUS RT30xxReadRFRegister(
2461 IN PRTMP_ADAPTER pAd,
2464 #endif // RTMP_RF_RW_SUPPORT //
2466 VOID NICReadEEPROMParameters(
2467 IN PRTMP_ADAPTER pAd,
2468 IN PUCHAR mac_addr);
2470 VOID NICInitAsicFromEEPROM(
2471 IN PRTMP_ADAPTER pAd);
2474 NDIS_STATUS NICInitializeAdapter(
2475 IN PRTMP_ADAPTER pAd,
2476 IN BOOLEAN bHardReset);
2478 NDIS_STATUS NICInitializeAsic(
2479 IN PRTMP_ADAPTER pAd,
2480 IN BOOLEAN bHardReset);
2483 IN PRTMP_ADAPTER pAd);
2485 VOID RTMPRingCleanUp(
2486 IN PRTMP_ADAPTER pAd,
2490 IN PRTMP_ADAPTER pAd);
2492 VOID NICResetFromError(
2493 IN PRTMP_ADAPTER pAd);
2495 NDIS_STATUS NICLoadFirmware(
2496 IN PRTMP_ADAPTER pAd);
2498 VOID NICEraseFirmware(
2499 IN PRTMP_ADAPTER pAd);
2501 NDIS_STATUS NICLoadRateSwitchingParams(
2502 IN PRTMP_ADAPTER pAd);
2504 BOOLEAN NICCheckForHang(
2505 IN PRTMP_ADAPTER pAd);
2507 VOID NICUpdateFifoStaCounters(
2508 IN PRTMP_ADAPTER pAd);
2510 VOID NICUpdateRawCounters(
2511 IN PRTMP_ADAPTER pAd);
2513 VOID RTMPZeroMemory(
2517 ULONG RTMPCompareMemory(
2522 VOID RTMPMoveMemory(
2535 VOID RTMPPatchMacBbpBug(
2536 IN PRTMP_ADAPTER pAd);
2539 IN PRTMP_ADAPTER pAd,
2540 IN PRALINK_TIMER_STRUCT pTimer,
2541 IN PVOID pTimerFunc,
2546 IN PRALINK_TIMER_STRUCT pTimer,
2551 IN PRALINK_TIMER_STRUCT pTimer,
2554 VOID RTMPCancelTimer(
2555 IN PRALINK_TIMER_STRUCT pTimer,
2556 OUT BOOLEAN *pCancelled);
2559 IN PRTMP_ADAPTER pAd,
2562 VOID RTMPSetSignalLED(
2563 IN PRTMP_ADAPTER pAd,
2564 IN NDIS_802_11_RSSI Dbm);
2566 VOID RTMPEnableRxTx(
2567 IN PRTMP_ADAPTER pAd);
2570 // prototype in action.c
2572 VOID ActionStateMachineInit(
2573 IN PRTMP_ADAPTER pAd,
2574 IN STATE_MACHINE *S,
2575 OUT STATE_MACHINE_FUNC Trans[]);
2577 VOID MlmeADDBAAction(
2578 IN PRTMP_ADAPTER pAd,
2579 IN MLME_QUEUE_ELEM *Elem);
2581 VOID MlmeDELBAAction(
2582 IN PRTMP_ADAPTER pAd,
2583 IN MLME_QUEUE_ELEM *Elem);
2586 IN PRTMP_ADAPTER pAd,
2587 IN MLME_QUEUE_ELEM *Elem);
2589 VOID MlmeInvalidAction(
2590 IN PRTMP_ADAPTER pAd,
2591 IN MLME_QUEUE_ELEM *Elem);
2594 IN PRTMP_ADAPTER pAd,
2595 IN MLME_QUEUE_ELEM *Elem);
2597 VOID PeerAddBAReqAction(
2598 IN PRTMP_ADAPTER pAd,
2599 IN MLME_QUEUE_ELEM *Elem);
2601 VOID PeerAddBARspAction(
2602 IN PRTMP_ADAPTER pAd,
2603 IN MLME_QUEUE_ELEM *Elem);
2605 VOID PeerDelBAAction(
2606 IN PRTMP_ADAPTER pAd,
2607 IN MLME_QUEUE_ELEM *Elem);
2610 IN PRTMP_ADAPTER pAd,
2611 IN MLME_QUEUE_ELEM *Elem);
2613 VOID SendPSMPAction(
2614 IN PRTMP_ADAPTER pAd,
2619 IN PRTMP_ADAPTER pAd,
2620 IN MLME_QUEUE_ELEM *Elem);
2622 VOID PeerPublicAction(
2623 IN PRTMP_ADAPTER pAd,
2624 IN MLME_QUEUE_ELEM *Elem);
2627 IN PRTMP_ADAPTER pAd,
2628 IN MLME_QUEUE_ELEM *Elem);
2631 IN PRTMP_ADAPTER pAd,
2632 IN MLME_QUEUE_ELEM *Elem);
2634 VOID RECBATimerTimeout(
2635 IN PVOID SystemSpecific1,
2636 IN PVOID FunctionContext,
2637 IN PVOID SystemSpecific2,
2638 IN PVOID SystemSpecific3);
2640 VOID ORIBATimerTimeout(
2641 IN PRTMP_ADAPTER pAd);
2643 VOID SendRefreshBAR(
2644 IN PRTMP_ADAPTER pAd,
2645 IN MAC_TABLE_ENTRY *pEntry);
2649 IN PRTMP_ADAPTER pAd,
2650 IN OUT PHEADER_802_11 pHdr80211,
2656 IN PRTMP_ADAPTER pAd,
2657 IN OUT PFRAME_BAR pCntlBar,
2661 VOID InsertActField(
2662 IN PRTMP_ADAPTER pAd,
2663 OUT PUCHAR pFrameBuf,
2664 OUT PULONG pFrameLen,
2668 BOOLEAN CntlEnqueueForRecv(
2669 IN PRTMP_ADAPTER pAd,
2672 IN PFRAME_BA_REQ pMsg);
2675 // Private routines in rtmp_data.c
2677 BOOLEAN RTMPHandleRxDoneInterrupt(
2678 IN PRTMP_ADAPTER pAd);
2680 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
2681 IN PRTMP_ADAPTER pAd,
2682 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
2684 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
2685 IN PRTMP_ADAPTER pAd);
2687 VOID RTMPHandleTBTTInterrupt(
2688 IN PRTMP_ADAPTER pAd);
2690 VOID RTMPHandlePreTBTTInterrupt(
2691 IN PRTMP_ADAPTER pAd);
2693 void RTMPHandleTwakeupInterrupt(
2694 IN PRTMP_ADAPTER pAd);
2696 VOID RTMPHandleRxCoherentInterrupt(
2697 IN PRTMP_ADAPTER pAd);
2699 BOOLEAN TxFrameIsAggregatible(
2700 IN PRTMP_ADAPTER pAd,
2701 IN PUCHAR pPrevAddr1,
2702 IN PUCHAR p8023hdr);
2704 BOOLEAN PeerIsAggreOn(
2705 IN PRTMP_ADAPTER pAd,
2707 IN PMAC_TABLE_ENTRY pMacEntry);
2710 NDIS_STATUS Sniff2BytesFromNdisBuffer(
2711 IN PNDIS_BUFFER pFirstBuffer,
2712 IN UCHAR DesiredOffset,
2716 NDIS_STATUS STASendPacket(
2717 IN PRTMP_ADAPTER pAd,
2718 IN PNDIS_PACKET pPacket);
2720 VOID STASendPackets(
2721 IN NDIS_HANDLE MiniportAdapterContext,
2722 IN PPNDIS_PACKET ppPacketArray,
2723 IN UINT NumberOfPackets);
2725 VOID RTMPDeQueuePacket(
2726 IN PRTMP_ADAPTER pAd,
2727 IN BOOLEAN bIntContext,
2729 IN UCHAR Max_Tx_Packets);
2731 NDIS_STATUS RTMPHardTransmit(
2732 IN PRTMP_ADAPTER pAd,
2733 IN PNDIS_PACKET pPacket,
2735 OUT PULONG pFreeTXDLeft);
2737 NDIS_STATUS STAHardTransmit(
2738 IN PRTMP_ADAPTER pAd,
2742 VOID STARxEAPOLFrameIndicate(
2743 IN PRTMP_ADAPTER pAd,
2744 IN MAC_TABLE_ENTRY *pEntry,
2746 IN UCHAR FromWhichBSSID);
2748 NDIS_STATUS RTMPFreeTXDRequest(
2749 IN PRTMP_ADAPTER pAd,
2751 IN UCHAR NumberRequired,
2752 IN PUCHAR FreeNumberIs);
2754 NDIS_STATUS MlmeHardTransmit(
2755 IN PRTMP_ADAPTER pAd,
2757 IN PNDIS_PACKET pPacket);
2759 NDIS_STATUS MlmeHardTransmitMgmtRing(
2760 IN PRTMP_ADAPTER pAd,
2762 IN PNDIS_PACKET pPacket);
2765 NDIS_STATUS MlmeHardTransmitTxRing(
2766 IN PRTMP_ADAPTER pAd,
2768 IN PNDIS_PACKET pPacket);
2770 NDIS_STATUS MlmeDataHardTransmit(
2771 IN PRTMP_ADAPTER pAd,
2773 IN PNDIS_PACKET pPacket);
2775 VOID RTMPWriteTxDescriptor(
2776 IN PRTMP_ADAPTER pAd,
2780 #endif // RTMP_MAC_PCI //
2782 USHORT RTMPCalcDuration(
2783 IN PRTMP_ADAPTER pAd,
2788 IN PRTMP_ADAPTER pAd,
2789 IN PTXWI_STRUC pTxWI,
2792 IN BOOLEAN InsTimestamp,
2795 IN BOOLEAN NSeq, // HW new a sequence.
2804 IN HTTRANSMIT_SETTING *pTransmit);
2807 VOID RTMPWriteTxWI_Data(
2808 IN PRTMP_ADAPTER pAd,
2809 IN OUT PTXWI_STRUC pTxWI,
2813 VOID RTMPWriteTxWI_Cache(
2814 IN PRTMP_ADAPTER pAd,
2815 IN OUT PTXWI_STRUC pTxWI,
2818 VOID RTMPSuspendMsduTransmission(
2819 IN PRTMP_ADAPTER pAd);
2821 VOID RTMPResumeMsduTransmission(
2822 IN PRTMP_ADAPTER pAd);
2824 NDIS_STATUS MiniportMMRequest(
2825 IN PRTMP_ADAPTER pAd,
2830 //+++mark by shiang, now this function merge to MiniportMMRequest()
2831 //---mark by shiang, now this function merge to MiniportMMRequest()
2833 VOID RTMPSendNullFrame(
2834 IN PRTMP_ADAPTER pAd,
2836 IN BOOLEAN bQosNull);
2838 VOID RTMPSendDisassociationFrame(
2839 IN PRTMP_ADAPTER pAd);
2841 VOID RTMPSendRTSFrame(
2842 IN PRTMP_ADAPTER pAd,
2844 IN unsigned int NextMpduSize,
2847 IN USHORT AckDuration,
2851 PQUEUE_HEADER RTMPCheckTxSwQueue(
2852 IN PRTMP_ADAPTER pAd,
2855 VOID RTMPReportMicError(
2856 IN PRTMP_ADAPTER pAd,
2857 IN PCIPHER_KEY pWpaKey);
2859 VOID WpaMicFailureReportFrame(
2860 IN PRTMP_ADAPTER pAd,
2861 IN MLME_QUEUE_ELEM *Elem);
2863 VOID WpaDisassocApAndBlockAssoc(
2864 IN PVOID SystemSpecific1,
2865 IN PVOID FunctionContext,
2866 IN PVOID SystemSpecific2,
2867 IN PVOID SystemSpecific3);
2869 VOID WpaStaPairwiseKeySetting(
2870 IN PRTMP_ADAPTER pAd);
2872 VOID WpaStaGroupKeySetting(
2873 IN PRTMP_ADAPTER pAd);
2875 NDIS_STATUS RTMPCloneNdisPacket(
2876 IN PRTMP_ADAPTER pAd,
2877 IN BOOLEAN pInsAMSDUHdr,
2878 IN PNDIS_PACKET pInPacket,
2879 OUT PNDIS_PACKET *ppOutPacket);
2881 NDIS_STATUS RTMPAllocateNdisPacket(
2882 IN PRTMP_ADAPTER pAd,
2883 IN PNDIS_PACKET *pPacket,
2889 VOID RTMPFreeNdisPacket(
2890 IN PRTMP_ADAPTER pAd,
2891 IN PNDIS_PACKET pPacket);
2893 BOOLEAN RTMPFreeTXDUponTxDmaDone(
2894 IN PRTMP_ADAPTER pAd,
2897 BOOLEAN RTMPCheckDHCPFrame(
2898 IN PRTMP_ADAPTER pAd,
2899 IN PNDIS_PACKET pPacket);
2902 BOOLEAN RTMPCheckEtherType(
2903 IN PRTMP_ADAPTER pAd,
2904 IN PNDIS_PACKET pPacket);
2908 // Private routines in rtmp_wep.c
2910 VOID RTMPInitWepEngine(
2911 IN PRTMP_ADAPTER pAd,
2917 VOID RTMPEncryptData(
2918 IN PRTMP_ADAPTER pAd,
2923 BOOLEAN RTMPSoftDecryptWEP(
2924 IN PRTMP_ADAPTER pAd,
2926 IN ULONG DataByteCnt,
2927 IN PCIPHER_KEY pGroupKey);
2930 IN PRTMP_ADAPTER pAd,
2934 IN PARCFOURCONTEXT Ctx,
2939 IN PARCFOURCONTEXT Ctx);
2941 VOID ARCFOUR_DECRYPT(
2942 IN PARCFOURCONTEXT Ctx,
2947 VOID ARCFOUR_ENCRYPT(
2948 IN PARCFOURCONTEXT Ctx,
2953 VOID WPAARCFOUR_ENCRYPT(
2954 IN PARCFOURCONTEXT Ctx,
2959 UINT RTMP_CALC_FCS32(
2968 // Asic/RF/BBP related functions
2970 VOID AsicAdjustTxPower(
2971 IN PRTMP_ADAPTER pAd);
2973 VOID AsicUpdateProtect(
2974 IN PRTMP_ADAPTER pAd,
2975 IN USHORT OperaionMode,
2977 IN BOOLEAN bDisableBGProtect,
2978 IN BOOLEAN bNonGFExist);
2980 VOID AsicSwitchChannel(
2981 IN PRTMP_ADAPTER pAd,
2985 VOID AsicLockChannel(
2986 IN PRTMP_ADAPTER pAd,
2989 VOID AsicRfTuningExec(
2990 IN PVOID SystemSpecific1,
2991 IN PVOID FunctionContext,
2992 IN PVOID SystemSpecific2,
2993 IN PVOID SystemSpecific3);
2995 VOID AsicResetBBPAgent(
2996 IN PRTMP_ADAPTER pAd);
2998 VOID AsicSleepThenAutoWakeup(
2999 IN PRTMP_ADAPTER pAd,
3000 IN USHORT TbttNumToNextWakeUp);
3002 VOID AsicForceSleep(
3003 IN PRTMP_ADAPTER pAd);
3005 VOID AsicForceWakeup(
3006 IN PRTMP_ADAPTER pAd,
3007 IN BOOLEAN bFromTx);
3010 IN PRTMP_ADAPTER pAd,
3013 VOID AsicSetMcastWC(
3014 IN PRTMP_ADAPTER pAd);
3016 VOID AsicDelWcidTab(
3017 IN PRTMP_ADAPTER pAd,
3021 IN PRTMP_ADAPTER pAd);
3023 VOID AsicDisableRDG(
3024 IN PRTMP_ADAPTER pAd);
3026 VOID AsicDisableSync(
3027 IN PRTMP_ADAPTER pAd);
3029 VOID AsicEnableBssSync(
3030 IN PRTMP_ADAPTER pAd);
3032 VOID AsicEnableIbssSync(
3033 IN PRTMP_ADAPTER pAd);
3035 VOID AsicSetEdcaParm(
3036 IN PRTMP_ADAPTER pAd,
3037 IN PEDCA_PARM pEdcaParm);
3039 VOID AsicSetSlotTime(
3040 IN PRTMP_ADAPTER pAd,
3041 IN BOOLEAN bUseShortSlotTime);
3043 VOID AsicAddSharedKeyEntry(
3044 IN PRTMP_ADAPTER pAd,
3052 VOID AsicRemoveSharedKeyEntry(
3053 IN PRTMP_ADAPTER pAd,
3057 VOID AsicUpdateWCIDAttribute(
3058 IN PRTMP_ADAPTER pAd,
3062 IN BOOLEAN bUsePairewiseKeyTable);
3064 VOID AsicUpdateWCIDIVEIV(
3065 IN PRTMP_ADAPTER pAd,
3070 VOID AsicUpdateRxWCIDTable(
3071 IN PRTMP_ADAPTER pAd,
3075 VOID AsicAddKeyEntry(
3076 IN PRTMP_ADAPTER pAd,
3080 IN PCIPHER_KEY pCipherKey,
3081 IN BOOLEAN bUsePairewiseKeyTable,
3084 VOID AsicAddPairwiseKeyEntry(
3085 IN PRTMP_ADAPTER pAd,
3088 IN CIPHER_KEY *pCipherKey);
3090 VOID AsicRemovePairwiseKeyEntry(
3091 IN PRTMP_ADAPTER pAd,
3095 BOOLEAN AsicSendCommandToMcu(
3096 IN PRTMP_ADAPTER pAd,
3104 BOOLEAN AsicCheckCommanOk(
3105 IN PRTMP_ADAPTER pAd,
3107 #endif // RTMP_MAC_PCI //
3109 VOID MacAddrRandomBssid(
3110 IN PRTMP_ADAPTER pAd,
3113 VOID MgtMacHeaderInit(
3114 IN PRTMP_ADAPTER pAd,
3115 IN OUT PHEADER_802_11 pHdr80211,
3122 IN PRTMP_ADAPTER pAd);
3125 IN PRTMP_ADAPTER pAd);
3132 IN PRTMP_ADAPTER pAd,
3135 ULONG BssTableSearch(
3140 ULONG BssSsidTableSearch(
3147 ULONG BssTableSearchWithSSID(
3154 ULONG BssSsidTableSearchBySSID(
3159 VOID BssTableDeleteEntry(
3160 IN OUT PBSS_TABLE pTab,
3164 VOID BATableDeleteORIEntry(
3165 IN OUT PRTMP_ADAPTER pAd,
3166 IN BA_ORI_ENTRY *pBAORIEntry);
3169 IN PRTMP_ADAPTER pAd,
3170 OUT PBSS_ENTRY pBss,
3175 IN USHORT BeaconPeriod,
3178 IN USHORT CapabilityInfo,
3180 IN UCHAR SupRateLen,
3182 IN UCHAR ExtRateLen,
3183 IN HT_CAPABILITY_IE *pHtCapability,
3184 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3185 IN UCHAR HtCapabilityLen,
3186 IN UCHAR AddHtInfoLen,
3187 IN UCHAR NewExtChanOffset,
3190 IN LARGE_INTEGER TimeStamp,
3192 IN PEDCA_PARM pEdcaParm,
3193 IN PQOS_CAPABILITY_PARM pQosCapability,
3194 IN PQBSS_LOAD_PARM pQbssLoad,
3195 IN USHORT LengthVIE,
3196 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3198 ULONG BssTableSetEntry(
3199 IN PRTMP_ADAPTER pAd,
3200 OUT PBSS_TABLE pTab,
3205 IN USHORT BeaconPeriod,
3208 IN USHORT CapabilityInfo,
3210 IN UCHAR SupRateLen,
3212 IN UCHAR ExtRateLen,
3213 IN HT_CAPABILITY_IE *pHtCapability,
3214 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3215 IN UCHAR HtCapabilityLen,
3216 IN UCHAR AddHtInfoLen,
3217 IN UCHAR NewExtChanOffset,
3220 IN LARGE_INTEGER TimeStamp,
3222 IN PEDCA_PARM pEdcaParm,
3223 IN PQOS_CAPABILITY_PARM pQosCapability,
3224 IN PQBSS_LOAD_PARM pQbssLoad,
3225 IN USHORT LengthVIE,
3226 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3228 VOID BATableInsertEntry(
3229 IN PRTMP_ADAPTER pAd,
3231 IN USHORT TimeOutValue,
3232 IN USHORT StartingSeq,
3235 IN UCHAR OriginatorStatus,
3236 IN BOOLEAN IsRecipient);
3238 VOID BssTableSsidSort(
3239 IN PRTMP_ADAPTER pAd,
3240 OUT BSS_TABLE *OutTab,
3244 VOID BssTableSortByRssi(
3245 IN OUT BSS_TABLE *OutTab);
3247 VOID BssCipherParse(
3248 IN OUT PBSS_ENTRY pBss);
3250 NDIS_STATUS MlmeQueueInit(
3251 IN MLME_QUEUE *Queue);
3253 VOID MlmeQueueDestroy(
3254 IN MLME_QUEUE *Queue);
3256 BOOLEAN MlmeEnqueue(
3257 IN PRTMP_ADAPTER pAd,
3263 BOOLEAN MlmeEnqueueForRecv(
3264 IN PRTMP_ADAPTER pAd,
3266 IN ULONG TimeStampHigh,
3267 IN ULONG TimeStampLow,
3276 BOOLEAN MlmeDequeue(
3277 IN MLME_QUEUE *Queue,
3278 OUT MLME_QUEUE_ELEM **Elem);
3280 VOID MlmeRestartStateMachine(
3281 IN PRTMP_ADAPTER pAd);
3283 BOOLEAN MlmeQueueEmpty(
3284 IN MLME_QUEUE *Queue);
3286 BOOLEAN MlmeQueueFull(
3287 IN MLME_QUEUE *Queue);
3289 BOOLEAN MsgTypeSubst(
3290 IN PRTMP_ADAPTER pAd,
3291 IN PFRAME_802_11 pFrame,
3295 VOID StateMachineInit(
3296 IN STATE_MACHINE *Sm,
3297 IN STATE_MACHINE_FUNC Trans[],
3300 IN STATE_MACHINE_FUNC DefFunc,
3304 VOID StateMachineSetAction(
3305 IN STATE_MACHINE *S,
3308 IN STATE_MACHINE_FUNC F);
3310 VOID StateMachinePerformAction(
3311 IN PRTMP_ADAPTER pAd,
3312 IN STATE_MACHINE *S,
3313 IN MLME_QUEUE_ELEM *Elem);
3316 IN PRTMP_ADAPTER pAd,
3317 IN MLME_QUEUE_ELEM *Elem);
3319 VOID AssocStateMachineInit(
3320 IN PRTMP_ADAPTER pAd,
3321 IN STATE_MACHINE *Sm,
3322 OUT STATE_MACHINE_FUNC Trans[]);
3324 VOID ReassocTimeout(
3325 IN PVOID SystemSpecific1,
3326 IN PVOID FunctionContext,
3327 IN PVOID SystemSpecific2,
3328 IN PVOID SystemSpecific3);
3331 IN PVOID SystemSpecific1,
3332 IN PVOID FunctionContext,
3333 IN PVOID SystemSpecific2,
3334 IN PVOID SystemSpecific3);
3336 VOID DisassocTimeout(
3337 IN PVOID SystemSpecific1,
3338 IN PVOID FunctionContext,
3339 IN PVOID SystemSpecific2,
3340 IN PVOID SystemSpecific3);
3342 //----------------------------------------------
3343 VOID MlmeAssocReqAction(
3344 IN PRTMP_ADAPTER pAd,
3345 IN MLME_QUEUE_ELEM *Elem);
3347 VOID MlmeReassocReqAction(
3348 IN PRTMP_ADAPTER pAd,
3349 IN MLME_QUEUE_ELEM *Elem);
3351 VOID MlmeDisassocReqAction(
3352 IN PRTMP_ADAPTER pAd,
3353 IN MLME_QUEUE_ELEM *Elem);
3355 VOID PeerAssocRspAction(
3356 IN PRTMP_ADAPTER pAd,
3357 IN MLME_QUEUE_ELEM *Elem);
3359 VOID PeerReassocRspAction(
3360 IN PRTMP_ADAPTER pAd,
3361 IN MLME_QUEUE_ELEM *Elem);
3363 VOID PeerDisassocAction(
3364 IN PRTMP_ADAPTER pAd,
3365 IN MLME_QUEUE_ELEM *Elem);
3367 VOID DisassocTimeoutAction(
3368 IN PRTMP_ADAPTER pAd,
3369 IN MLME_QUEUE_ELEM *Elem);
3371 VOID AssocTimeoutAction(
3372 IN PRTMP_ADAPTER pAd,
3373 IN MLME_QUEUE_ELEM *Elem);
3375 VOID ReassocTimeoutAction(
3376 IN PRTMP_ADAPTER pAd,
3377 IN MLME_QUEUE_ELEM *Elem);
3380 IN PRTMP_ADAPTER pAd,
3383 VOID InvalidStateWhenAssoc(
3384 IN PRTMP_ADAPTER pAd,
3385 IN MLME_QUEUE_ELEM *Elem);
3387 VOID InvalidStateWhenReassoc(
3388 IN PRTMP_ADAPTER pAd,
3389 IN MLME_QUEUE_ELEM *Elem);
3391 VOID InvalidStateWhenDisassociate(
3392 IN PRTMP_ADAPTER pAd,
3393 IN MLME_QUEUE_ELEM *Elem);
3396 VOID MlmeCntlConfirm(
3397 IN PRTMP_ADAPTER pAd,
3400 #endif // RTMP_MAC_USB //
3403 IN PRTMP_ADAPTER pAd);
3405 VOID ComposeNullFrame(
3406 IN PRTMP_ADAPTER pAd);
3409 IN PRTMP_ADAPTER pAd,
3411 IN USHORT CapabilityInfo,
3414 IN UCHAR SupRateLen,
3416 IN UCHAR ExtRateLen,
3417 IN PEDCA_PARM pEdcaParm,
3418 IN HT_CAPABILITY_IE *pHtCapability,
3419 IN UCHAR HtCapabilityLen,
3420 IN ADD_HT_INFO_IE *pAddHtInfo);
3422 VOID AuthStateMachineInit(
3423 IN PRTMP_ADAPTER pAd,
3424 IN PSTATE_MACHINE sm,
3425 OUT STATE_MACHINE_FUNC Trans[]);
3428 IN PVOID SystemSpecific1,
3429 IN PVOID FunctionContext,
3430 IN PVOID SystemSpecific2,
3431 IN PVOID SystemSpecific3);
3433 VOID MlmeAuthReqAction(
3434 IN PRTMP_ADAPTER pAd,
3435 IN MLME_QUEUE_ELEM *Elem);
3437 VOID PeerAuthRspAtSeq2Action(
3438 IN PRTMP_ADAPTER pAd,
3439 IN MLME_QUEUE_ELEM *Elem);
3441 VOID PeerAuthRspAtSeq4Action(
3442 IN PRTMP_ADAPTER pAd,
3443 IN MLME_QUEUE_ELEM *Elem);
3445 VOID AuthTimeoutAction(
3446 IN PRTMP_ADAPTER pAd,
3447 IN MLME_QUEUE_ELEM *Elem);
3450 IN PRTMP_ADAPTER pAd,
3453 VOID MlmeDeauthReqAction(
3454 IN PRTMP_ADAPTER pAd,
3455 IN MLME_QUEUE_ELEM *Elem);
3457 VOID InvalidStateWhenAuth(
3458 IN PRTMP_ADAPTER pAd,
3459 IN MLME_QUEUE_ELEM *Elem);
3461 //=============================================
3463 VOID AuthRspStateMachineInit(
3464 IN PRTMP_ADAPTER pAd,
3465 IN PSTATE_MACHINE Sm,
3466 IN STATE_MACHINE_FUNC Trans[]);
3468 VOID PeerDeauthAction(
3469 IN PRTMP_ADAPTER pAd,
3470 IN MLME_QUEUE_ELEM *Elem);
3472 VOID PeerAuthSimpleRspGenAndSend(
3473 IN PRTMP_ADAPTER pAd,
3474 IN PHEADER_802_11 pHdr80211,
3481 // Private routines in dls.c
3484 //========================================
3486 VOID SyncStateMachineInit(
3487 IN PRTMP_ADAPTER pAd,
3488 IN STATE_MACHINE *Sm,
3489 OUT STATE_MACHINE_FUNC Trans[]);
3492 IN PVOID SystemSpecific1,
3493 IN PVOID FunctionContext,
3494 IN PVOID SystemSpecific2,
3495 IN PVOID SystemSpecific3);
3498 IN PVOID SystemSpecific1,
3499 IN PVOID FunctionContext,
3500 IN PVOID SystemSpecific2,
3501 IN PVOID SystemSpecific3);
3503 VOID InvalidStateWhenScan(
3504 IN PRTMP_ADAPTER pAd,
3505 IN MLME_QUEUE_ELEM *Elem);
3507 VOID InvalidStateWhenJoin(
3508 IN PRTMP_ADAPTER pAd,
3509 IN MLME_QUEUE_ELEM *Elem);
3511 VOID InvalidStateWhenStart(
3512 IN PRTMP_ADAPTER pAd,
3513 IN MLME_QUEUE_ELEM *Elem);
3515 VOID EnqueueProbeRequest(
3516 IN PRTMP_ADAPTER pAd);
3518 BOOLEAN ScanRunning(
3519 IN PRTMP_ADAPTER pAd);
3520 //=========================================
3523 IN PRTMP_ADAPTER pAd,
3524 IN STATE_MACHINE *S,
3525 OUT STATE_MACHINE_FUNC Trans[]);
3527 VOID MlmeCntlMachinePerformAction(
3528 IN PRTMP_ADAPTER pAd,
3529 IN STATE_MACHINE *S,
3530 IN MLME_QUEUE_ELEM *Elem);
3533 IN PRTMP_ADAPTER pAd,
3534 IN MLME_QUEUE_ELEM *Elem);
3536 VOID CntlOidScanProc(
3537 IN PRTMP_ADAPTER pAd,
3538 IN MLME_QUEUE_ELEM *Elem);
3540 VOID CntlOidSsidProc(
3541 IN PRTMP_ADAPTER pAd,
3542 IN MLME_QUEUE_ELEM * Elem);
3544 VOID CntlOidRTBssidProc(
3545 IN PRTMP_ADAPTER pAd,
3546 IN MLME_QUEUE_ELEM * Elem);
3548 VOID CntlMlmeRoamingProc(
3549 IN PRTMP_ADAPTER pAd,
3550 IN MLME_QUEUE_ELEM * Elem);
3552 VOID CntlWaitDisassocProc(
3553 IN PRTMP_ADAPTER pAd,
3554 IN MLME_QUEUE_ELEM *Elem);
3556 VOID CntlWaitJoinProc(
3557 IN PRTMP_ADAPTER pAd,
3558 IN MLME_QUEUE_ELEM *Elem);
3560 VOID CntlWaitReassocProc(
3561 IN PRTMP_ADAPTER pAd,
3562 IN MLME_QUEUE_ELEM *Elem);
3564 VOID CntlWaitStartProc(
3565 IN PRTMP_ADAPTER pAd,
3566 IN MLME_QUEUE_ELEM *Elem);
3568 VOID CntlWaitAuthProc(
3569 IN PRTMP_ADAPTER pAd,
3570 IN MLME_QUEUE_ELEM *Elem);
3572 VOID CntlWaitAuthProc2(
3573 IN PRTMP_ADAPTER pAd,
3574 IN MLME_QUEUE_ELEM *Elem);
3576 VOID CntlWaitAssocProc(
3577 IN PRTMP_ADAPTER pAd,
3578 IN MLME_QUEUE_ELEM *Elem);
3581 IN PRTMP_ADAPTER pAd,
3585 IN PRTMP_ADAPTER pAd,
3586 IN BOOLEAN IsReqFromAP);
3588 VOID IterateOnBssTab(
3589 IN PRTMP_ADAPTER pAd);
3591 VOID IterateOnBssTab2(
3592 IN PRTMP_ADAPTER pAd);;
3595 IN PRTMP_ADAPTER pAd,
3596 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
3600 IN PRTMP_ADAPTER pAd,
3601 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
3603 IN USHORT CapabilityInfo,
3605 IN USHORT ListenIntv);
3608 IN PRTMP_ADAPTER pAd,
3609 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
3615 VOID DisassocParmFill(
3616 IN PRTMP_ADAPTER pAd,
3617 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
3622 IN PRTMP_ADAPTER pAd,
3623 IN OUT MLME_START_REQ_STRUCT *StartReq,
3628 IN PRTMP_ADAPTER pAd,
3629 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
3634 IN PRTMP_ADAPTER pAd);
3636 VOID EnqueueBeaconFrame(
3637 IN PRTMP_ADAPTER pAd);
3639 VOID MlmeJoinReqAction(
3640 IN PRTMP_ADAPTER pAd,
3641 IN MLME_QUEUE_ELEM *Elem);
3643 VOID MlmeScanReqAction(
3644 IN PRTMP_ADAPTER pAd,
3645 IN MLME_QUEUE_ELEM *Elem);
3647 VOID MlmeStartReqAction(
3648 IN PRTMP_ADAPTER pAd,
3649 IN MLME_QUEUE_ELEM *Elem);
3651 VOID ScanTimeoutAction(
3652 IN PRTMP_ADAPTER pAd,
3653 IN MLME_QUEUE_ELEM *Elem);
3655 VOID BeaconTimeoutAtJoinAction(
3656 IN PRTMP_ADAPTER pAd,
3657 IN MLME_QUEUE_ELEM *Elem);
3659 VOID PeerBeaconAtScanAction(
3660 IN PRTMP_ADAPTER pAd,
3661 IN MLME_QUEUE_ELEM *Elem);
3663 VOID PeerBeaconAtJoinAction(
3664 IN PRTMP_ADAPTER pAd,
3665 IN MLME_QUEUE_ELEM *Elem);
3668 IN PRTMP_ADAPTER pAd,
3669 IN MLME_QUEUE_ELEM *Elem);
3671 VOID PeerProbeReqAction(
3672 IN PRTMP_ADAPTER pAd,
3673 IN MLME_QUEUE_ELEM *Elem);
3675 VOID ScanNextChannel(
3676 IN PRTMP_ADAPTER pAd);
3678 ULONG MakeIbssBeacon(
3679 IN PRTMP_ADAPTER pAd);
3681 BOOLEAN MlmeScanReqSanity(
3682 IN PRTMP_ADAPTER pAd,
3688 OUT UCHAR *ScanType);
3690 BOOLEAN PeerBeaconAndProbeRspSanity(
3691 IN PRTMP_ADAPTER pAd,
3694 IN UCHAR MsgChannel,
3698 OUT UCHAR *pSsidLen,
3699 OUT UCHAR *pBssType,
3700 OUT USHORT *pBeaconPeriod,
3701 OUT UCHAR *pChannel,
3702 OUT UCHAR *pNewChannel,
3703 OUT LARGE_INTEGER *pTimestamp,
3704 OUT CF_PARM *pCfParm,
3705 OUT USHORT *pAtimWin,
3706 OUT USHORT *pCapabilityInfo,
3708 OUT UCHAR *pDtimCount,
3709 OUT UCHAR *pDtimPeriod,
3710 OUT UCHAR *pBcastFlag,
3711 OUT UCHAR *pMessageToMe,
3712 OUT UCHAR SupRate[],
3713 OUT UCHAR *pSupRateLen,
3714 OUT UCHAR ExtRate[],
3715 OUT UCHAR *pExtRateLen,
3716 OUT UCHAR *pCkipFlag,
3717 OUT UCHAR *pAironetCellPowerLimit,
3718 OUT PEDCA_PARM pEdcaParm,
3719 OUT PQBSS_LOAD_PARM pQbssLoad,
3720 OUT PQOS_CAPABILITY_PARM pQosCapability,
3721 OUT ULONG *pRalinkIe,
3722 OUT UCHAR *pHtCapabilityLen,
3723 OUT UCHAR *pPreNHtCapabilityLen,
3724 OUT HT_CAPABILITY_IE *pHtCapability,
3725 OUT UCHAR *AddHtInfoLen,
3726 OUT ADD_HT_INFO_IE *AddHtInfo,
3727 OUT UCHAR *NewExtChannel,
3728 OUT USHORT *LengthVIE,
3729 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
3731 BOOLEAN PeerAddBAReqActionSanity(
3732 IN PRTMP_ADAPTER pAd,
3737 BOOLEAN PeerAddBARspActionSanity(
3738 IN PRTMP_ADAPTER pAd,
3742 BOOLEAN PeerDelBAActionSanity(
3743 IN PRTMP_ADAPTER pAd,
3748 BOOLEAN MlmeAssocReqSanity(
3749 IN PRTMP_ADAPTER pAd,
3753 OUT USHORT *CapabilityInfo,
3755 OUT USHORT *ListenIntv);
3757 BOOLEAN MlmeAuthReqSanity(
3758 IN PRTMP_ADAPTER pAd,
3765 BOOLEAN MlmeStartReqSanity(
3766 IN PRTMP_ADAPTER pAd,
3770 OUT UCHAR *Ssidlen);
3772 BOOLEAN PeerAuthSanity(
3773 IN PRTMP_ADAPTER pAd,
3780 OUT CHAR ChlgText[]);
3782 BOOLEAN PeerAssocRspSanity(
3783 IN PRTMP_ADAPTER pAd,
3787 OUT USHORT *pCapabilityInfo,
3788 OUT USHORT *pStatus,
3790 OUT UCHAR SupRate[],
3791 OUT UCHAR *pSupRateLen,
3792 OUT UCHAR ExtRate[],
3793 OUT UCHAR *pExtRateLen,
3794 OUT HT_CAPABILITY_IE *pHtCapability,
3795 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3796 OUT UCHAR *pHtCapabilityLen,
3797 OUT UCHAR *pAddHtInfoLen,
3798 OUT UCHAR *pNewExtChannelOffset,
3799 OUT PEDCA_PARM pEdcaParm,
3800 OUT UCHAR *pCkipFlag);
3802 BOOLEAN PeerDisassocSanity(
3803 IN PRTMP_ADAPTER pAd,
3807 OUT USHORT *Reason);
3809 BOOLEAN PeerWpaMessageSanity(
3810 IN PRTMP_ADAPTER pAd,
3811 IN PEAPOL_PACKET pMsg,
3814 IN MAC_TABLE_ENTRY *pEntry);
3816 BOOLEAN PeerDeauthSanity(
3817 IN PRTMP_ADAPTER pAd,
3821 OUT USHORT *Reason);
3823 BOOLEAN PeerProbeReqSanity(
3824 IN PRTMP_ADAPTER pAd,
3829 OUT UCHAR *pSsidLen);
3835 OUT UCHAR *BcastFlag,
3836 OUT UCHAR *DtimCount,
3837 OUT UCHAR *DtimPeriod,
3838 OUT UCHAR *MessageToMe);
3840 UCHAR ChannelSanity(
3841 IN PRTMP_ADAPTER pAd,
3844 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
3845 IN PBSS_ENTRY pBss);
3847 BOOLEAN MlmeDelBAReqSanity(
3848 IN PRTMP_ADAPTER pAd,
3852 BOOLEAN MlmeAddBAReqSanity(
3853 IN PRTMP_ADAPTER pAd,
3858 ULONG MakeOutgoingFrame(
3860 OUT ULONG *Length, ...);
3863 IN PRTMP_ADAPTER pAd,
3867 IN PRTMP_ADAPTER pAd);
3869 VOID AsicUpdateAutoFallBackTable(
3870 IN PRTMP_ADAPTER pAd,
3873 VOID MlmePeriodicExec(
3874 IN PVOID SystemSpecific1,
3875 IN PVOID FunctionContext,
3876 IN PVOID SystemSpecific2,
3877 IN PVOID SystemSpecific3);
3880 IN PVOID SystemSpecific1,
3881 IN PVOID FunctionContext,
3882 IN PVOID SystemSpecific2,
3883 IN PVOID SystemSpecific3);
3885 VOID STAMlmePeriodicExec(
3889 IN PRTMP_ADAPTER pAd);
3891 VOID MlmeAutoReconnectLastSSID(
3892 IN PRTMP_ADAPTER pAd);
3894 BOOLEAN MlmeValidateSSID(
3898 VOID MlmeCheckForRoaming(
3899 IN PRTMP_ADAPTER pAd,
3902 BOOLEAN MlmeCheckForFastRoaming(
3903 IN PRTMP_ADAPTER pAd);
3905 VOID MlmeDynamicTxRateSwitching(
3906 IN PRTMP_ADAPTER pAd);
3909 IN PRTMP_ADAPTER pAd,
3910 IN PMAC_TABLE_ENTRY pEntry,
3911 IN PRTMP_TX_RATE_SWITCH pTxRate);
3913 VOID MlmeSelectTxRateTable(
3914 IN PRTMP_ADAPTER pAd,
3915 IN PMAC_TABLE_ENTRY pEntry,
3917 IN PUCHAR pTableSize,
3918 IN PUCHAR pInitTxRateIdx);
3920 VOID MlmeCalculateChannelQuality(
3921 IN PRTMP_ADAPTER pAd,
3922 IN PMAC_TABLE_ENTRY pMacEntry,
3925 VOID MlmeCheckPsmChange(
3926 IN PRTMP_ADAPTER pAd,
3930 IN PRTMP_ADAPTER pAd,
3933 VOID MlmeSetTxPreamble(
3934 IN PRTMP_ADAPTER pAd,
3935 IN USHORT TxPreamble);
3937 VOID UpdateBasicRateBitmap(
3938 IN PRTMP_ADAPTER pAd);
3940 VOID MlmeUpdateTxRates(
3941 IN PRTMP_ADAPTER pAd,
3945 VOID MlmeUpdateHtTxRates(
3946 IN PRTMP_ADAPTER pAd,
3949 VOID RTMPCheckRates(
3950 IN PRTMP_ADAPTER pAd,
3951 IN OUT UCHAR SupRate[],
3952 IN OUT UCHAR *SupRateLen);
3954 BOOLEAN RTMPCheckChannel(
3955 IN PRTMP_ADAPTER pAd,
3956 IN UCHAR CentralChannel,
3959 BOOLEAN RTMPCheckHt(
3960 IN PRTMP_ADAPTER pAd,
3962 IN OUT HT_CAPABILITY_IE *pHtCapability,
3963 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
3965 VOID StaQuickResponeForRateUpExec(
3966 IN PVOID SystemSpecific1,
3967 IN PVOID FunctionContext,
3968 IN PVOID SystemSpecific2,
3969 IN PVOID SystemSpecific3);
3971 VOID RTMPUpdateMlmeRate(
3972 IN PRTMP_ADAPTER pAd);
3975 IN PRTMP_ADAPTER pAd,
3982 IN PRTMP_ADAPTER pAd,
3985 VOID RTMPFilterCalibration(
3986 IN PRTMP_ADAPTER pAd);
3988 #ifdef RTMP_EFUSE_SUPPORT
3989 //2008/09/11:KH add to support efuse<--
3990 INT set_eFuseGetFreeBlockCount_Proc(
3991 IN PRTMP_ADAPTER pAd,
3994 INT set_eFusedump_Proc(
3995 IN PRTMP_ADAPTER pAd,
3998 VOID eFusePhysicalReadRegisters(
3999 IN PRTMP_ADAPTER pAd,
4004 int RtmpEfuseSupportCheck(
4005 IN RTMP_ADAPTER *pAd);
4007 VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd,
4008 PUINT EfuseFreeBlock);
4011 IN PRTMP_ADAPTER pAd);
4012 //2008/09/11:KH add to support efuse-->
4013 #endif // RTMP_EFUSE_SUPPORT //
4015 // add by johnli, RF power sequence setup
4016 VOID RT30xxLoadRFNormalModeSetup(
4017 IN PRTMP_ADAPTER pAd);
4019 VOID RT30xxLoadRFSleepModeSetup(
4020 IN PRTMP_ADAPTER pAd);
4022 VOID RT30xxReverseRFSleepModeSetup(
4023 IN PRTMP_ADAPTER pAd);
4027 VOID NICInitRT3070RFRegisters(
4028 IN RTMP_ADAPTER *pAd);
4031 VOID NICInitRT3090RFRegisters(
4032 IN RTMP_ADAPTER *pAd);
4035 VOID RT30xxHaltAction(
4036 IN PRTMP_ADAPTER pAd);
4038 VOID RT30xxSetRxAnt(
4039 IN PRTMP_ADAPTER pAd,
4043 VOID AsicEvaluateRxAnt(
4044 IN PRTMP_ADAPTER pAd);
4046 VOID AsicRxAntEvalTimeout(
4047 IN PVOID SystemSpecific1,
4048 IN PVOID FunctionContext,
4049 IN PVOID SystemSpecific2,
4050 IN PVOID SystemSpecific3);
4052 VOID APSDPeriodicExec(
4053 IN PVOID SystemSpecific1,
4054 IN PVOID FunctionContext,
4055 IN PVOID SystemSpecific2,
4056 IN PVOID SystemSpecific3);
4058 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4059 IN PRTMP_ADAPTER pAd,
4060 IN PMAC_TABLE_ENTRY pEntry);
4062 UCHAR RTMPStaFixedTxMode(
4063 IN PRTMP_ADAPTER pAd,
4064 IN PMAC_TABLE_ENTRY pEntry);
4066 VOID RTMPUpdateLegacyTxSetting(
4067 UCHAR fixed_tx_mode,
4068 PMAC_TABLE_ENTRY pEntry);
4070 BOOLEAN RTMPAutoRateSwitchCheck(
4071 IN PRTMP_ADAPTER pAd);
4073 NDIS_STATUS MlmeInit(
4074 IN PRTMP_ADAPTER pAd);
4077 IN PRTMP_ADAPTER pAd);
4080 IN PRTMP_ADAPTER pAd);
4082 VOID MlmeResetRalinkCounters(
4083 IN PRTMP_ADAPTER pAd);
4085 VOID BuildChannelList(
4086 IN PRTMP_ADAPTER pAd);
4089 IN PRTMP_ADAPTER pAd);
4092 IN PRTMP_ADAPTER pAd,
4095 VOID ChangeToCellPowerLimit(
4096 IN PRTMP_ADAPTER pAd,
4097 IN UCHAR AironetCellPowerLimit);
4100 // Prototypes of function definition in rtmp_tkip.c
4102 VOID RTMPInitTkipEngine(
4103 IN PRTMP_ADAPTER pAd,
4112 VOID RTMPInitMICEngine(
4113 IN PRTMP_ADAPTER pAd,
4117 IN UCHAR UserPriority,
4120 BOOLEAN RTMPTkipCompareMICValue(
4121 IN PRTMP_ADAPTER pAd,
4126 IN UCHAR UserPriority,
4129 VOID RTMPCalculateMICValue(
4130 IN PRTMP_ADAPTER pAd,
4131 IN PNDIS_PACKET pPacket,
4133 IN PCIPHER_KEY pKey,
4136 VOID RTMPTkipAppendByte(
4137 IN PTKIP_KEY_INFO pTkip,
4140 VOID RTMPTkipAppend(
4141 IN PTKIP_KEY_INFO pTkip,
4145 VOID RTMPTkipGetMIC(
4146 IN PTKIP_KEY_INFO pTkip);
4148 BOOLEAN RTMPSoftDecryptTKIP(
4149 IN PRTMP_ADAPTER pAd,
4151 IN ULONG DataByteCnt,
4152 IN UCHAR UserPriority,
4153 IN PCIPHER_KEY pWpaKey);
4155 BOOLEAN RTMPSoftDecryptAES(
4156 IN PRTMP_ADAPTER pAd,
4158 IN ULONG DataByteCnt,
4159 IN PCIPHER_KEY pWpaKey);
4164 // Prototypes of function definition in cmm_info.c
4166 INT RT_CfgSetCountryRegion(
4167 IN PRTMP_ADAPTER pAd,
4171 INT RT_CfgSetWirelessMode(
4172 IN PRTMP_ADAPTER pAd,
4175 INT RT_CfgSetShortSlot(
4176 IN PRTMP_ADAPTER pAd,
4179 INT RT_CfgSetWepKey(
4180 IN PRTMP_ADAPTER pAd,
4181 IN PSTRING keyString,
4182 IN CIPHER_KEY *pSharedKey,
4185 INT RT_CfgSetWPAPSKKey(
4186 IN RTMP_ADAPTER *pAd,
4187 IN PSTRING keyString,
4190 OUT PUCHAR pPMKBuf);
4195 // Prototypes of function definition in cmm_info.c
4197 VOID RTMPWPARemoveAllKeys(
4198 IN PRTMP_ADAPTER pAd);
4200 VOID RTMPSetPhyMode(
4201 IN PRTMP_ADAPTER pAd,
4204 VOID RTMPUpdateHTIE(
4205 IN RT_HT_CAPABILITY *pRtHt,
4207 OUT HT_CAPABILITY_IE *pHtCapability,
4208 OUT ADD_HT_INFO_IE *pAddHtInfo);
4210 VOID RTMPAddWcidAttributeEntry(
4211 IN PRTMP_ADAPTER pAd,
4215 IN MAC_TABLE_ENTRY *pEntry);
4217 PSTRING GetEncryptType(
4220 PSTRING GetAuthMode(
4224 IN PRTMP_ADAPTER pAd,
4225 IN OID_SET_HT_PHYMODE *pHTPhyMode);
4227 VOID RTMPSetIndividualHT(
4228 IN PRTMP_ADAPTER pAd,
4231 VOID RTMPSendWirelessEvent(
4232 IN PRTMP_ADAPTER pAd,
4233 IN USHORT Event_flag,
4239 IN PRTMP_ADAPTER pAd,
4241 IN UCHAR RssiNumber);
4243 /*===================================
4244 Function prototype in cmm_wpa.c
4245 =================================== */
4246 VOID RTMPToWirelessSta(
4247 IN PRTMP_ADAPTER pAd,
4248 IN PMAC_TABLE_ENTRY pEntry,
4249 IN PUCHAR pHeader802_3,
4253 IN BOOLEAN bClearFrame);
4256 IN PRTMP_ADAPTER pAd,
4266 IN PRTMP_ADAPTER pAd,
4270 BOOLEAN RTMPCheckWPAframe(
4271 IN PRTMP_ADAPTER pAd,
4272 IN PMAC_TABLE_ENTRY pEntry,
4274 IN ULONG DataByteCount,
4275 IN UCHAR FromWhichBSSID);
4277 VOID AES_GTK_KEY_UNWRAP(
4279 OUT UCHAR *plaintext,
4281 IN UCHAR *ciphertext);
4283 BOOLEAN RTMPParseEapolKeyData(
4284 IN PRTMP_ADAPTER pAd,
4286 IN UCHAR KeyDataLen,
4287 IN UCHAR GroupKeyIndex,
4290 IN MAC_TABLE_ENTRY *pEntry);
4292 VOID ConstructEapolMsg(
4293 IN PMAC_TABLE_ENTRY pEntry,
4294 IN UCHAR GroupKeyWepStatus,
4296 IN UCHAR DefaultKeyIdx,
4302 OUT PEAPOL_PACKET pMsg);
4304 NDIS_STATUS RTMPSoftDecryptBroadCastData(
4305 IN PRTMP_ADAPTER pAd,
4307 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
4308 IN PCIPHER_KEY pShard_key);
4311 IN PRTMP_ADAPTER pAd,
4317 // function prototype in ap_wpa.c
4319 VOID RTMPGetTxTscFromAsic(
4320 IN PRTMP_ADAPTER pAd,
4324 VOID APInstallPairwiseKey(
4326 PMAC_TABLE_ENTRY pEntry);
4328 UINT APValidateRSNIE(
4329 IN PRTMP_ADAPTER pAd,
4330 IN PMAC_TABLE_ENTRY pEntry,
4332 IN UCHAR rsnie_len);
4334 VOID HandleCounterMeasure(
4335 IN PRTMP_ADAPTER pAd,
4336 IN MAC_TABLE_ENTRY *pEntry);
4338 VOID WPAStart4WayHS(
4339 IN PRTMP_ADAPTER pAd,
4340 IN MAC_TABLE_ENTRY *pEntry,
4341 IN ULONG TimeInterval);
4343 VOID WPAStart2WayGroupHS(
4344 IN PRTMP_ADAPTER pAd,
4345 IN MAC_TABLE_ENTRY *pEntry);
4347 VOID PeerPairMsg1Action(
4348 IN PRTMP_ADAPTER pAd,
4349 IN MAC_TABLE_ENTRY *pEntry,
4350 IN MLME_QUEUE_ELEM *Elem);
4352 VOID PeerPairMsg2Action(
4353 IN PRTMP_ADAPTER pAd,
4354 IN MAC_TABLE_ENTRY *pEntry,
4355 IN MLME_QUEUE_ELEM *Elem);
4357 VOID PeerPairMsg3Action(
4358 IN PRTMP_ADAPTER pAd,
4359 IN MAC_TABLE_ENTRY *pEntry,
4360 IN MLME_QUEUE_ELEM *Elem);
4362 VOID PeerPairMsg4Action(
4363 IN PRTMP_ADAPTER pAd,
4364 IN MAC_TABLE_ENTRY *pEntry,
4365 IN MLME_QUEUE_ELEM *Elem);
4367 VOID PeerGroupMsg1Action(
4368 IN PRTMP_ADAPTER pAd,
4369 IN PMAC_TABLE_ENTRY pEntry,
4370 IN MLME_QUEUE_ELEM *Elem);
4372 VOID PeerGroupMsg2Action(
4373 IN PRTMP_ADAPTER pAd,
4374 IN PMAC_TABLE_ENTRY pEntry,
4385 VOID AES_GTK_KEY_WRAP(
4387 IN UCHAR *plaintext,
4389 OUT UCHAR *ciphertext);
4391 //typedef void (*TIMER_FUNCTION)(unsigned long);
4395 VOID RTMP_SetPeriodicTimer(
4396 IN NDIS_MINIPORT_TIMER *pTimer,
4397 IN unsigned long timeout);
4399 VOID RTMP_OS_Init_Timer(
4400 IN PRTMP_ADAPTER pAd,
4401 IN NDIS_MINIPORT_TIMER *pTimer,
4402 IN TIMER_FUNCTION function,
4405 VOID RTMP_OS_Add_Timer(
4406 IN NDIS_MINIPORT_TIMER *pTimer,
4407 IN unsigned long timeout);
4409 VOID RTMP_OS_Mod_Timer(
4410 IN NDIS_MINIPORT_TIMER *pTimer,
4411 IN unsigned long timeout);
4414 VOID RTMP_OS_Del_Timer(
4415 IN NDIS_MINIPORT_TIMER *pTimer,
4416 OUT BOOLEAN *pCancelled);
4419 VOID RTMP_OS_Release_Packet(
4420 IN PRTMP_ADAPTER pAd,
4421 IN PQUEUE_ENTRY pEntry);
4426 NDIS_STATUS os_alloc_mem(
4427 IN RTMP_ADAPTER *pAd,
4431 NDIS_STATUS os_free_mem(
4432 IN PRTMP_ADAPTER pAd,
4436 void RTMP_AllocateSharedMemory(
4437 IN PRTMP_ADAPTER pAd,
4440 OUT PVOID *VirtualAddress,
4441 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4443 VOID RTMPFreeTxRxRingMemory(
4444 IN PRTMP_ADAPTER pAd);
4446 NDIS_STATUS AdapterBlockAllocateMemory(
4450 void RTMP_AllocateTxDescMemory(
4451 IN PRTMP_ADAPTER pAd,
4455 OUT PVOID *VirtualAddress,
4456 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4458 void RTMP_AllocateFirstTxBuffer(
4459 IN PRTMP_ADAPTER pAd,
4463 OUT PVOID *VirtualAddress,
4464 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4466 void RTMP_FreeFirstTxBuffer(
4467 IN PRTMP_ADAPTER pAd,
4470 IN PVOID VirtualAddress,
4471 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4473 void RTMP_AllocateMgmtDescMemory(
4474 IN PRTMP_ADAPTER pAd,
4477 OUT PVOID *VirtualAddress,
4478 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4480 void RTMP_AllocateRxDescMemory(
4481 IN PRTMP_ADAPTER pAd,
4484 OUT PVOID *VirtualAddress,
4485 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4487 void RTMP_FreeDescMemory(
4488 IN PRTMP_ADAPTER pAd,
4490 IN PVOID VirtualAddress,
4491 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4493 PNDIS_PACKET RtmpOSNetPktAlloc(
4494 IN RTMP_ADAPTER *pAd,
4497 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
4498 IN PRTMP_ADAPTER pAd,
4501 OUT PVOID *VirtualAddress,
4502 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
4504 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
4505 IN PRTMP_ADAPTER pAd,
4508 OUT PVOID *VirtualAddress);
4510 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
4511 IN PRTMP_ADAPTER pAd,
4514 void RTMP_QueryPacketInfo(
4515 IN PNDIS_PACKET pPacket,
4516 OUT PACKET_INFO *pPacketInfo,
4517 OUT PUCHAR *pSrcBufVA,
4518 OUT UINT *pSrcBufLen);
4520 void RTMP_QueryNextPacketInfo(
4521 IN PNDIS_PACKET *ppPacket,
4522 OUT PACKET_INFO *pPacketInfo,
4523 OUT PUCHAR *pSrcBufVA,
4524 OUT UINT *pSrcBufLen);
4527 BOOLEAN RTMP_FillTxBlkInfo(
4528 IN RTMP_ADAPTER *pAd,
4532 PRTMP_SCATTER_GATHER_LIST
4533 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
4536 void announce_802_3_packet(
4537 IN PRTMP_ADAPTER pAd,
4538 IN PNDIS_PACKET pPacket);
4541 UINT BA_Reorder_AMSDU_Annnounce(
4542 IN PRTMP_ADAPTER pAd,
4543 IN PNDIS_PACKET pPacket);
4545 PNET_DEV get_netdev_from_bssid(
4546 IN PRTMP_ADAPTER pAd,
4547 IN UCHAR FromWhichBSSID);
4550 PNDIS_PACKET duplicate_pkt(
4551 IN PRTMP_ADAPTER pAd,
4552 IN PUCHAR pHeader802_3,
4556 IN UCHAR FromWhichBSSID);
4559 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
4560 IN PRTMP_ADAPTER pAd,
4561 IN PNDIS_PACKET pOldPkt);
4563 void ba_flush_reordering_timeout_mpdus(
4564 IN PRTMP_ADAPTER pAd,
4565 IN PBA_REC_ENTRY pBAEntry,
4569 VOID BAOriSessionSetUp(
4570 IN PRTMP_ADAPTER pAd,
4571 IN MAC_TABLE_ENTRY *pEntry,
4575 IN BOOLEAN isForced);
4577 VOID BASessionTearDownALL(
4578 IN OUT PRTMP_ADAPTER pAd,
4581 BOOLEAN OS_Need_Clone_Packet(void);
4584 VOID build_tx_packet(
4585 IN PRTMP_ADAPTER pAd,
4586 IN PNDIS_PACKET pPacket,
4591 VOID BAOriSessionTearDown(
4592 IN OUT PRTMP_ADAPTER pAd,
4595 IN BOOLEAN bPassive,
4596 IN BOOLEAN bForceSend);
4598 VOID BARecSessionTearDown(
4599 IN OUT PRTMP_ADAPTER pAd,
4602 IN BOOLEAN bPassive);
4604 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
4605 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
4609 IN const PSTRING ct);
4611 ////////// common ioctl functions //////////
4613 IN PRTMP_ADAPTER pAd);
4615 INT WpaCheckEapCode(
4616 IN PRTMP_ADAPTER pAd,
4621 VOID WpaSendMicFailureToWpaSupplicant(
4622 IN PRTMP_ADAPTER pAd,
4623 IN BOOLEAN bUnicast);
4625 int wext_notify_event_assoc(
4626 IN RTMP_ADAPTER *pAd);
4628 BOOLEAN STARxDoneInterruptHandle(
4629 IN PRTMP_ADAPTER pAd,
4632 // AMPDU packet indication
4633 VOID Indicate_AMPDU_Packet(
4634 IN PRTMP_ADAPTER pAd,
4636 IN UCHAR FromWhichBSSID);
4638 // AMSDU packet indication
4639 VOID Indicate_AMSDU_Packet(
4640 IN PRTMP_ADAPTER pAd,
4642 IN UCHAR FromWhichBSSID);
4644 // Normal legacy Rx packet indication
4645 VOID Indicate_Legacy_Packet(
4646 IN PRTMP_ADAPTER pAd,
4648 IN UCHAR FromWhichBSSID);
4650 VOID Indicate_EAPOL_Packet(
4651 IN PRTMP_ADAPTER pAd,
4653 IN UCHAR FromWhichBSSID);
4655 void update_os_packet_info(
4656 IN PRTMP_ADAPTER pAd,
4658 IN UCHAR FromWhichBSSID);
4660 void wlan_802_11_to_802_3_packet(
4661 IN PRTMP_ADAPTER pAd,
4663 IN PUCHAR pHeader802_3,
4664 IN UCHAR FromWhichBSSID);
4666 // remove LLC and get 802_3 Header
4667 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
4669 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
4671 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
4673 _pDA = _pRxBlk->pHeader->Addr3; \
4674 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
4678 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
4680 _pDA = _pRxBlk->pHeader->Addr1; \
4681 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
4682 _pSA = _pRxBlk->pHeader->Addr2; \
4684 _pSA = _pRxBlk->pHeader->Addr3; \
4688 _pDA = _pRxBlk->pHeader->Addr1; \
4689 _pSA = _pRxBlk->pHeader->Addr2; \
4693 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
4694 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
4697 VOID Sta_Announce_or_Forward_802_3_Packet(
4698 IN PRTMP_ADAPTER pAd,
4699 IN PNDIS_PACKET pPacket,
4700 IN UCHAR FromWhichBSSID);
4702 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
4703 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
4704 //announce_802_3_packet(_pAd, _pPacket);
4706 PNDIS_PACKET DuplicatePacket(
4707 IN PRTMP_ADAPTER pAd,
4708 IN PNDIS_PACKET pPacket,
4709 IN UCHAR FromWhichBSSID);
4712 PNDIS_PACKET ClonePacket(
4713 IN PRTMP_ADAPTER pAd,
4714 IN PNDIS_PACKET pPacket,
4719 // Normal, AMPDU or AMSDU
4720 VOID CmmRxnonRalinkFrameIndicate(
4721 IN PRTMP_ADAPTER pAd,
4723 IN UCHAR FromWhichBSSID);
4725 VOID CmmRxRalinkFrameIndicate(
4726 IN PRTMP_ADAPTER pAd,
4727 IN MAC_TABLE_ENTRY *pEntry,
4729 IN UCHAR FromWhichBSSID);
4731 VOID Update_Rssi_Sample(
4732 IN PRTMP_ADAPTER pAd,
4733 IN RSSI_SAMPLE *pRssi,
4734 IN PRXWI_STRUC pRxWI);
4736 PNDIS_PACKET GetPacketFromRxRing(
4737 IN PRTMP_ADAPTER pAd,
4738 OUT PRT28XX_RXD_STRUC pSaveRxD,
4739 OUT BOOLEAN *pbReschedule,
4740 IN OUT UINT32 *pRxPending);
4742 PNDIS_PACKET RTMPDeFragmentDataFrame(
4743 IN PRTMP_ADAPTER pAd,
4747 DIDmsg_lnxind_wlansniffrm = 0x00000044,
4748 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
4749 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
4750 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
4751 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
4752 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
4753 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
4754 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
4755 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
4756 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
4757 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
4760 P80211ENUM_msgitem_status_no_value = 0x00
4763 P80211ENUM_truth_false = 0x00,
4764 P80211ENUM_truth_true = 0x01
4767 /* Definition from madwifi */
4773 } p80211item_uint32_t;
4778 #define WLAN_DEVNAMELEN_MAX 16
4779 UINT8 devname[WLAN_DEVNAMELEN_MAX];
4780 p80211item_uint32_t hosttime;
4781 p80211item_uint32_t mactime;
4782 p80211item_uint32_t channel;
4783 p80211item_uint32_t rssi;
4784 p80211item_uint32_t sq;
4785 p80211item_uint32_t signal;
4786 p80211item_uint32_t noise;
4787 p80211item_uint32_t rate;
4788 p80211item_uint32_t istx;
4789 p80211item_uint32_t frmlen;
4790 } wlan_ng_prism2_header;
4792 /* The radio capture header precedes the 802.11 header. */
4793 typedef struct PACKED _ieee80211_radiotap_header {
4794 UINT8 it_version; /* Version 0. Only increases
4795 * for drastic changes,
4796 * introduction of compatible
4797 * new fields does not count.
4800 UINT16 it_len; /* length of the whole
4801 * header in bytes, including
4802 * it_version, it_pad,
4803 * it_len, and data fields.
4805 UINT32 it_present; /* A bitmap telling which
4806 * fields are present. Set bit 31
4807 * (0x80000000) to extend the
4808 * bitmap by another 32 bits.
4809 * Additional extensions are made
4810 * by setting bit 31.
4812 }ieee80211_radiotap_header ;
4814 enum ieee80211_radiotap_type {
4815 IEEE80211_RADIOTAP_TSFT = 0,
4816 IEEE80211_RADIOTAP_FLAGS = 1,
4817 IEEE80211_RADIOTAP_RATE = 2,
4818 IEEE80211_RADIOTAP_CHANNEL = 3,
4819 IEEE80211_RADIOTAP_FHSS = 4,
4820 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
4821 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
4822 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
4823 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
4824 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
4825 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
4826 IEEE80211_RADIOTAP_ANTENNA = 11,
4827 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
4828 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
4831 #define WLAN_RADIOTAP_PRESENT ( \
4832 (1 << IEEE80211_RADIOTAP_TSFT) | \
4833 (1 << IEEE80211_RADIOTAP_FLAGS) | \
4834 (1 << IEEE80211_RADIOTAP_RATE) | \
4837 typedef struct _wlan_radiotap_header {
4838 ieee80211_radiotap_header wt_ihdr;
4842 } wlan_radiotap_header;
4843 /* Definition from madwifi */
4845 void send_monitor_packets(
4846 IN PRTMP_ADAPTER pAd,
4850 VOID RTMPSetDesiredRates(
4851 IN PRTMP_ADAPTER pAdapter,
4854 INT Set_FixedTxMode_Proc(
4855 IN PRTMP_ADAPTER pAd,
4858 BOOLEAN RT28XXChipsetCheck(
4862 VOID RT28XXDMADisable(
4863 IN RTMP_ADAPTER *pAd);
4865 VOID RT28XXDMAEnable(
4866 IN RTMP_ADAPTER *pAd);
4868 VOID RT28xx_UpdateBeaconToAsic(
4869 IN RTMP_ADAPTER * pAd,
4872 IN ULONG UpdatePos);
4875 IN PRTMP_ADAPTER pAd,
4876 IN PSTRING pDefaultMac,
4877 IN PSTRING pHostName);
4879 NDIS_STATUS RtmpNetTaskInit(
4880 IN RTMP_ADAPTER *pAd);
4882 VOID RtmpNetTaskExit(
4883 IN PRTMP_ADAPTER pAd);
4885 NDIS_STATUS RtmpMgmtTaskInit(
4886 IN RTMP_ADAPTER *pAd);
4888 VOID RtmpMgmtTaskExit(
4889 IN RTMP_ADAPTER *pAd);
4891 void tbtt_tasklet(unsigned long data);
4894 PNET_DEV RtmpPhyNetDevInit(
4895 IN RTMP_ADAPTER *pAd,
4896 IN RTMP_OS_NETDEV_OP_HOOK *pNetHook);
4898 BOOLEAN RtmpPhyNetDevExit(
4899 IN RTMP_ADAPTER *pAd,
4900 IN PNET_DEV net_dev);
4902 INT RtmpRaDevCtrlInit(
4903 IN RTMP_ADAPTER *pAd,
4904 IN RTMP_INF_TYPE infType);
4906 BOOLEAN RtmpRaDevCtrlExit(
4907 IN RTMP_ADAPTER *pAd);
4912 // Function Prototype in cmm_data_pci.c
4914 USHORT RtmpPCI_WriteTxResource(
4915 IN PRTMP_ADAPTER pAd,
4918 OUT USHORT *FreeNumber);
4920 USHORT RtmpPCI_WriteSingleTxResource(
4921 IN PRTMP_ADAPTER pAd,
4924 OUT USHORT *FreeNumber);
4926 USHORT RtmpPCI_WriteMultiTxResource(
4927 IN PRTMP_ADAPTER pAd,
4930 OUT USHORT *FreeNumber);
4932 USHORT RtmpPCI_WriteFragTxResource(
4933 IN PRTMP_ADAPTER pAd,
4936 OUT USHORT *FreeNumber);
4938 USHORT RtmpPCI_WriteSubTxResource(
4939 IN PRTMP_ADAPTER pAd,
4942 OUT USHORT *FreeNumber);
4944 VOID RtmpPCI_FinalWriteTxResource(
4945 IN PRTMP_ADAPTER pAd,
4947 IN USHORT totalMPDUSize,
4948 IN USHORT FirstTxIdx);
4950 VOID RtmpPCIDataLastTxIdx(
4951 IN PRTMP_ADAPTER pAd,
4953 IN USHORT LastTxIdx);
4955 VOID RtmpPCIDataKickOut(
4956 IN PRTMP_ADAPTER pAd,
4961 int RtmpPCIMgmtKickOut(
4962 IN RTMP_ADAPTER *pAd,
4964 IN PNDIS_PACKET pPacket,
4965 IN PUCHAR pSrcBufVA,
4969 NDIS_STATUS RTMPCheckRxError(
4970 IN PRTMP_ADAPTER pAd,
4971 IN PHEADER_802_11 pHeader,
4972 IN PRXWI_STRUC pRxWI,
4973 IN PRT28XX_RXD_STRUC pRxD);
4975 BOOLEAN RT28xxPciAsicRadioOff(
4976 IN PRTMP_ADAPTER pAd,
4978 IN USHORT TbttNumToNextWakeUp);
4980 BOOLEAN RT28xxPciAsicRadioOn(
4981 IN PRTMP_ADAPTER pAd,
4984 VOID RTMPInitPCIeLinkCtrlValue(
4985 IN PRTMP_ADAPTER pAd);
4987 VOID RTMPFindHostPCIDev(
4988 IN PRTMP_ADAPTER pAd);
4990 VOID RTMPPCIeLinkCtrlValueRestore(
4991 IN PRTMP_ADAPTER pAd,
4994 VOID RTMPPCIeLinkCtrlSetting(
4995 IN PRTMP_ADAPTER pAd,
4998 VOID RTMPrt3xSetPCIePowerLinkCtrl(
4999 IN PRTMP_ADAPTER pAd);
5001 VOID PsPollWakeExec(
5002 IN PVOID SystemSpecific1,
5003 IN PVOID FunctionContext,
5004 IN PVOID SystemSpecific2,
5005 IN PVOID SystemSpecific3);
5008 IN PVOID SystemSpecific1,
5009 IN PVOID FunctionContext,
5010 IN PVOID SystemSpecific2,
5011 IN PVOID SystemSpecific3);
5013 VOID RT28xxPciStaAsicForceWakeup(
5014 IN PRTMP_ADAPTER pAd,
5015 IN BOOLEAN bFromTx);
5017 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
5018 IN PRTMP_ADAPTER pAd,
5019 IN USHORT TbttNumToNextWakeUp);
5022 VOID RT28xxPciMlmeRadioOn(
5023 IN PRTMP_ADAPTER pAd);
5025 VOID RT28xxPciMlmeRadioOFF(
5026 IN PRTMP_ADAPTER pAd);
5027 #endif // RTMP_MAC_PCI //
5031 // Function Prototype in rtusb_bulk.c
5033 VOID RTUSBInitTxDesc(
5034 IN PRTMP_ADAPTER pAd,
5035 IN PTX_CONTEXT pTxContext,
5036 IN UCHAR BulkOutPipeId,
5037 IN usb_complete_t Func);
5039 VOID RTUSBInitHTTxDesc(
5040 IN PRTMP_ADAPTER pAd,
5041 IN PHT_TX_CONTEXT pTxContext,
5042 IN UCHAR BulkOutPipeId,
5043 IN ULONG BulkOutSize,
5044 IN usb_complete_t Func);
5046 VOID RTUSBInitRxDesc(
5047 IN PRTMP_ADAPTER pAd,
5048 IN PRX_CONTEXT pRxContext);
5050 VOID RTUSBCleanUpDataBulkOutQueue(
5051 IN PRTMP_ADAPTER pAd);
5053 VOID RTUSBCancelPendingBulkOutIRP(
5054 IN PRTMP_ADAPTER pAd);
5056 VOID RTUSBBulkOutDataPacket(
5057 IN PRTMP_ADAPTER pAd,
5058 IN UCHAR BulkOutPipeId,
5061 VOID RTUSBBulkOutNullFrame(
5062 IN PRTMP_ADAPTER pAd);
5064 VOID RTUSBBulkOutRTSFrame(
5065 IN PRTMP_ADAPTER pAd);
5067 VOID RTUSBCancelPendingBulkInIRP(
5068 IN PRTMP_ADAPTER pAd);
5070 VOID RTUSBCancelPendingIRPs(
5071 IN PRTMP_ADAPTER pAd);
5073 VOID RTUSBBulkOutMLMEPacket(
5074 IN PRTMP_ADAPTER pAd,
5077 VOID RTUSBBulkOutPsPoll(
5078 IN PRTMP_ADAPTER pAd);
5080 VOID RTUSBCleanUpMLMEBulkOutQueue(
5081 IN PRTMP_ADAPTER pAd);
5083 VOID RTUSBKickBulkOut(
5084 IN PRTMP_ADAPTER pAd);
5086 VOID RTUSBBulkReceive(
5087 IN PRTMP_ADAPTER pAd);
5090 IN RTMP_ADAPTER *pAd);
5092 VOID RTUSBInitRxDesc(
5093 IN PRTMP_ADAPTER pAd,
5094 IN PRX_CONTEXT pRxContext);
5096 VOID RTUSBBulkRxHandle(
5097 IN unsigned long data);
5100 // Function Prototype in rtusb_io.c
5102 NTSTATUS RTUSBMultiRead(
5103 IN PRTMP_ADAPTER pAd,
5108 NTSTATUS RTUSBMultiWrite(
5109 IN PRTMP_ADAPTER pAd,
5114 NTSTATUS RTUSBMultiWrite_OneByte(
5115 IN PRTMP_ADAPTER pAd,
5119 NTSTATUS RTUSBReadBBPRegister(
5120 IN PRTMP_ADAPTER pAd,
5124 NTSTATUS RTUSBWriteBBPRegister(
5125 IN PRTMP_ADAPTER pAd,
5129 NTSTATUS RTUSBWriteRFRegister(
5130 IN PRTMP_ADAPTER pAd,
5133 NTSTATUS RTUSB_VendorRequest(
5134 IN PRTMP_ADAPTER pAd,
5135 IN UINT32 TransferFlags,
5136 IN UCHAR ReservedBits,
5140 IN PVOID TransferBuffer,
5141 IN UINT32 TransferBufferLength);
5143 NTSTATUS RTUSBReadEEPROM(
5144 IN PRTMP_ADAPTER pAd,
5149 NTSTATUS RTUSBWriteEEPROM(
5150 IN PRTMP_ADAPTER pAd,
5155 VOID RTUSBPutToSleep(
5156 IN PRTMP_ADAPTER pAd);
5158 NTSTATUS RTUSBWakeUp(
5159 IN PRTMP_ADAPTER pAd);
5161 VOID RTUSBInitializeCmdQ(
5164 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
5165 IN PRTMP_ADAPTER pAd,
5167 IN BOOLEAN SetInformation,
5168 IN PVOID pInformationBuffer,
5169 IN UINT32 InformationBufferLength);
5171 NDIS_STATUS RTUSBEnqueueInternalCmd(
5172 IN PRTMP_ADAPTER pAd,
5174 IN PVOID pInformationBuffer,
5175 IN UINT32 InformationBufferLength);
5177 VOID RTUSBDequeueCmd(
5179 OUT PCmdQElmt *pcmdqelmt);
5182 IN OUT PVOID Context);
5184 VOID RTUSBBssBeaconExit(
5185 IN RTMP_ADAPTER *pAd);
5187 VOID RTUSBBssBeaconStop(
5188 IN RTMP_ADAPTER *pAd);
5190 VOID RTUSBBssBeaconStart(
5191 IN RTMP_ADAPTER * pAd);
5193 VOID RTUSBBssBeaconInit(
5194 IN RTMP_ADAPTER *pAd);
5197 IN RTMP_ADAPTER *pAd);
5199 NTSTATUS RTUSBWriteMACRegister(
5200 IN PRTMP_ADAPTER pAd,
5204 NTSTATUS RTUSBReadMACRegister(
5205 IN PRTMP_ADAPTER pAd,
5207 OUT PUINT32 pValue);
5209 NTSTATUS RTUSBSingleWrite(
5210 IN RTMP_ADAPTER *pAd,
5214 NTSTATUS RTUSBFirmwareWrite(
5215 IN PRTMP_ADAPTER pAd,
5219 NTSTATUS RTUSBVenderReset(
5220 IN PRTMP_ADAPTER pAd);
5222 NDIS_STATUS RTUSBSetHardWareRegister(
5223 IN PRTMP_ADAPTER pAdapter,
5226 NDIS_STATUS RTUSBQueryHardWareRegister(
5227 IN PRTMP_ADAPTER pAdapter,
5231 IN PRTMP_ADAPTER pAd);
5233 NDIS_STATUS RTUSBWriteHWMACAddress(
5234 IN PRTMP_ADAPTER pAdapter);
5236 VOID MacTableInitialize(
5237 IN PRTMP_ADAPTER pAd);
5240 IN PRTMP_ADAPTER pAd,
5243 NDIS_STATUS RTMPWPAAddKeyProc(
5244 IN PRTMP_ADAPTER pAd,
5247 VOID AsicRxAntEvalAction(
5248 IN PRTMP_ADAPTER pAd);
5251 IN PRTMP_ADAPTER pAd,
5252 IN PUCHAR pHeader802_3,
5256 OUT PNDIS_PACKET *ppPacket);
5258 UINT deaggregate_AMSDU_announce(
5259 IN PRTMP_ADAPTER pAd,
5260 PNDIS_PACKET pPacket,
5264 NDIS_STATUS RTMPCheckRxError(
5265 IN PRTMP_ADAPTER pAd,
5266 IN PHEADER_802_11 pHeader,
5267 IN PRXWI_STRUC pRxWI,
5268 IN PRT28XX_RXD_STRUC pRxINFO);
5270 VOID RTUSBMlmeHardTransmit(
5271 IN PRTMP_ADAPTER pAd,
5272 IN PMGMT_STRUC pMgmt);
5278 // Function Prototype in rtusb_data.c
5280 NDIS_STATUS RTUSBFreeDescriptorRequest(
5281 IN PRTMP_ADAPTER pAd,
5282 IN UCHAR BulkOutPipeId,
5283 IN UINT32 NumberRequired);
5286 BOOLEAN RTUSBNeedQueueBackForAgg(
5287 IN RTMP_ADAPTER *pAd,
5288 IN UCHAR BulkOutPipeId);
5291 VOID RTMPWriteTxInfo(
5292 IN PRTMP_ADAPTER pAd,
5293 IN PTXINFO_STRUC pTxInfo,
5294 IN USHORT USBDMApktLen,
5301 // Function Prototype in cmm_data_usb.c
5303 USHORT RtmpUSB_WriteSubTxResource(
5304 IN PRTMP_ADAPTER pAd,
5307 OUT USHORT *FreeNumber);
5309 USHORT RtmpUSB_WriteSingleTxResource(
5310 IN PRTMP_ADAPTER pAd,
5313 OUT USHORT *FreeNumber);
5315 USHORT RtmpUSB_WriteFragTxResource(
5316 IN PRTMP_ADAPTER pAd,
5319 OUT USHORT *FreeNumber);
5321 USHORT RtmpUSB_WriteMultiTxResource(
5322 IN PRTMP_ADAPTER pAd,
5325 OUT USHORT *FreeNumber);
5327 VOID RtmpUSB_FinalWriteTxResource(
5328 IN PRTMP_ADAPTER pAd,
5330 IN USHORT totalMPDUSize,
5333 VOID RtmpUSBDataLastTxIdx(
5334 IN PRTMP_ADAPTER pAd,
5338 VOID RtmpUSBDataKickOut(
5339 IN PRTMP_ADAPTER pAd,
5344 int RtmpUSBMgmtKickOut(
5345 IN RTMP_ADAPTER *pAd,
5347 IN PNDIS_PACKET pPacket,
5348 IN PUCHAR pSrcBufVA,
5351 VOID RtmpUSBNullFrameKickOut(
5352 IN RTMP_ADAPTER *pAd,
5354 IN UCHAR *pNullFrame,
5355 IN UINT32 frameLen);
5357 VOID RtmpUsbStaAsicForceWakeupTimeout(
5358 IN PVOID SystemSpecific1,
5359 IN PVOID FunctionContext,
5360 IN PVOID SystemSpecific2,
5361 IN PVOID SystemSpecific3);
5363 VOID RT28xxUsbStaAsicForceWakeup(
5364 IN PRTMP_ADAPTER pAd,
5365 IN BOOLEAN bFromTx);
5367 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
5368 IN PRTMP_ADAPTER pAd,
5369 IN USHORT TbttNumToNextWakeUp);
5371 VOID RT28xxUsbMlmeRadioOn(
5372 IN PRTMP_ADAPTER pAd);
5374 VOID RT28xxUsbMlmeRadioOFF(
5375 IN PRTMP_ADAPTER pAd);
5376 #endif // RTMP_MAC_USB //
5378 VOID AsicTurnOffRFClk(
5379 IN PRTMP_ADAPTER pAd,
5382 VOID AsicTurnOnRFClk(
5383 IN PRTMP_ADAPTER pAd,
5388 #ifdef RTMP_TIMER_TASK_SUPPORT
5389 INT RtmpTimerQThread(
5390 IN OUT PVOID Context);
5392 RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(
5393 IN RTMP_ADAPTER *pAd,
5394 IN RALINK_TIMER_STRUCT *pTimer);
5396 BOOLEAN RtmpTimerQRemove(
5397 IN RTMP_ADAPTER *pAd,
5398 IN RALINK_TIMER_STRUCT *pTimer);
5400 void RtmpTimerQExit(
5401 IN RTMP_ADAPTER *pAd);
5403 void RtmpTimerQInit(
5404 IN RTMP_ADAPTER *pAd);
5405 #endif // RTMP_TIMER_TASK_SUPPORT //
5407 VOID AsicStaBbpTuning(
5408 IN PRTMP_ADAPTER pAd);
5410 BOOLEAN StaAddMacTableEntry(
5411 IN PRTMP_ADAPTER pAd,
5412 IN PMAC_TABLE_ENTRY pEntry,
5413 IN UCHAR MaxSupportedRateIn500Kbps,
5414 IN HT_CAPABILITY_IE *pHtCapability,
5415 IN UCHAR HtCapabilityLen,
5416 IN ADD_HT_INFO_IE *pAddHtInfo,
5417 IN UCHAR AddHtInfoLen,
5418 IN USHORT CapabilityInfo);
5421 BOOLEAN AUTH_ReqSend(
5422 IN PRTMP_ADAPTER pAd,
5423 IN PMLME_QUEUE_ELEM pElem,
5424 IN PRALINK_TIMER_STRUCT pAuthTimer,
5427 IN PUCHAR pNewElement,
5428 IN ULONG ElementLen);
5430 void RTMP_IndicateMediaState(
5431 IN PRTMP_ADAPTER pAd);
5433 VOID ReSyncBeaconTime(
5434 IN PRTMP_ADAPTER pAd);
5436 VOID RTMPSetAGCInitValue(
5437 IN PRTMP_ADAPTER pAd,
5438 IN UCHAR BandWidth);
5440 int rt28xx_close(IN PNET_DEV dev);
5441 int rt28xx_open(IN PNET_DEV dev);
5444 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
5445 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
5446 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
5450 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
5452 if (VIRTUAL_IF_NUM(pAd) == 0)
5454 if (rt28xx_open(pAd->net_dev) != 0)
5456 DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n"));
5463 VIRTUAL_IF_INC(pAd);
5467 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
5469 VIRTUAL_IF_DEC(pAd);
5470 if (VIRTUAL_IF_NUM(pAd) == 0)
5471 rt28xx_close(pAd->net_dev);
5478 OS Related funciton prototype definitions.
5479 TODO: Maybe we need to move these function prototypes to other proper place.
5481 int RtmpOSWrielessEventSend(
5482 IN RTMP_ADAPTER *pAd,
5483 IN UINT32 eventType,
5489 int RtmpOSNetDevAddrSet(
5490 IN PNET_DEV pNetDev,
5491 IN PUCHAR pMacAddr);
5493 int RtmpOSNetDevAttach(
5494 IN PNET_DEV pNetDev,
5495 IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook);
5497 void RtmpOSNetDevClose(
5498 IN PNET_DEV pNetDev);
5500 void RtmpOSNetDevDetach(
5501 IN PNET_DEV pNetDev);
5503 INT RtmpOSNetDevAlloc(
5504 IN PNET_DEV *pNewNetDev,
5505 IN UINT32 privDataSize);
5507 void RtmpOSNetDevFree(
5508 IN PNET_DEV pNetDev);
5510 PNET_DEV RtmpOSNetDevGetByName(
5511 IN PNET_DEV pNetDev,
5512 IN PSTRING pDevName);
5514 void RtmpOSNetDeviceRefPut(
5515 IN PNET_DEV pNetDev);
5517 PNET_DEV RtmpOSNetDevCreate(
5518 IN RTMP_ADAPTER *pAd,
5522 IN PSTRING pNamePrefix);
5525 Task operation related function prototypes
5527 void RtmpOSTaskCustomize(
5528 IN RTMP_OS_TASK *pTask);
5530 INT RtmpOSTaskNotifyToExit(
5531 IN RTMP_OS_TASK *pTask);
5533 NDIS_STATUS RtmpOSTaskKill(
5534 IN RTMP_OS_TASK *pTask);
5536 NDIS_STATUS RtmpOSTaskInit(
5537 IN RTMP_OS_TASK *pTask,
5541 NDIS_STATUS RtmpOSTaskAttach(
5542 IN RTMP_OS_TASK *pTask,
5543 IN int (*fn)(void *),
5548 File operation related function prototypes
5550 RTMP_OS_FD RtmpOSFileOpen(
5555 int RtmpOSFileClose(
5556 IN RTMP_OS_FD osfd);
5558 void RtmpOSFileSeek(
5567 int RtmpOSFileWrite(
5572 #endif // __RTMP_H__