/* *************************************************************************** * Ralink Tech Inc. * 4F, No. 2 Technology 5th Rd. * Science-based Industrial Park * Hsin-chu, Taiwan, R.O.C. * * (c) Copyright 2002-2004, Ralink Technology, Inc. * * All rights reserved. Ralink's source code is an unpublished work and the * use of a copyright notice does not imply otherwise. This source code * contains confidential trade secret material of Ralink Tech. Any attemp * or participation in deciphering, decoding, reverse engineering or in any * way altering the source code is stricitly prohibited, unless the prior * written consent of Ralink Technology, Inc. is obtained. *************************************************************************** Module Name: rtmp.h Abstract: Miniport generic portion header file Revision History: Who When What -------- ---------- ---------------------------------------------- Paul Lin 2002-08-01 created James Tan 2002-09-06 modified (Revise NTCRegTable) John Chang 2004-09-06 modified for RT2600 */ #ifndef __RTMP_H__ #define __RTMP_H__ #include "link_list.h" #include "spectrum_def.h" #include "rtmp_dot11.h" #include "wpa_cmm.h" #ifdef CONFIG_AP_SUPPORT #include "ap_autoChSel_cmm.h" #endif /* CONFIG_AP_SUPPORT */ #include "wsc.h" #ifdef MAT_SUPPORT #include "mat.h" #endif /* MAT_SUPPORT */ #ifdef WAPI_SUPPORT #include "wapi_def.h" #endif /* WAPI_SUPPORT */ #ifdef CLIENT_WDS #include "client_wds_cmm.h" #endif /* CLIENT_WDS */ #ifdef WFD_SUPPORT #include "wfd_cmm.h" #endif /* WFD_SUPPORT */ #include "drs_extr.h" struct _RTMP_RA_LEGACY_TB; typedef struct _RTMP_ADAPTER RTMP_ADAPTER; typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER; typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP; typedef struct _RTMP_CHIP_CAP_ RTMP_CHIP_CAP; typedef struct _UAPSD_INFO { BOOLEAN bAPSDCapable; } UAPSD_INFO; #include "rtmp_mcu.h" #include "rtmp_M51.h" #ifdef CONFIG_ANDES_SUPPORT #include "rtmp_and.h" #endif #include "rtmp_chip.h" #include "radar.h" #ifdef CARRIER_DETECTION_SUPPORT #include "cs.h" #endif /* CARRIER_DETECTION_SUPPORT */ #ifdef DFS_SUPPORT #include "dfs.h" #endif /* DFS_SUPPORT */ #ifdef LED_CONTROL_SUPPORT #include "rt_led.h" #endif /* LED_CONTROL_SUPPORT */ #ifdef RALINK_ATE #include "rt_ate.h" #endif /* RALINK_ATE */ /*#define DBG 1 */ BOOLEAN RtmpPktPmBitCheck( IN PRTMP_ADAPTER pAd); /*#define DBG_DIAGNOSE 1 */ /*+++Used for merge MiniportMMRequest() and MiniportDataMMRequest() into one function */ #define MAX_DATAMM_RETRY 3 #define MGMT_USE_QUEUE_FLAG 0x80 /*---Used for merge MiniportMMRequest() and MiniportDataMMRequest() into one function */ /* The number of channels for per-channel Tx power offset */ #define MAXSEQ (0xFFF) #ifdef DOT11N_SS3_SUPPORT #define MAX_MCS_SET 24 /* From MCS 0 ~ MCS 23 */ #else #define MAX_MCS_SET 16 /* From MCS 0 ~ MCS 15 */ #endif /* DOT11N_SS3_SUPPORT */ #define MAX_TXPOWER_ARRAY_SIZE 5 extern unsigned char CISCO_OUI[]; extern UCHAR BaSizeArray[4]; extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN]; extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN]; extern ULONG BIT32[32]; extern char *CipherName[]; extern UCHAR RxwiMCSToOfdmRate[12]; extern UCHAR SNAP_802_1H[6]; extern UCHAR SNAP_BRIDGE_TUNNEL[6]; extern UCHAR EAPOL[2]; extern UCHAR IPX[2]; extern UCHAR TPID[]; extern UCHAR APPLE_TALK[2]; extern UCHAR OfdmRateToRxwiMCS[]; extern UCHAR MapUserPriorityToAccessCategory[8]; extern unsigned char RateIdToMbps[]; extern USHORT RateIdTo500Kbps[]; extern UCHAR CipherSuiteWpaNoneTkip[]; extern UCHAR CipherSuiteWpaNoneTkipLen; extern UCHAR CipherSuiteWpaNoneAes[]; extern UCHAR CipherSuiteWpaNoneAesLen; extern UCHAR SsidIe; extern UCHAR SupRateIe; extern UCHAR ExtRateIe; #ifdef DOT11_N_SUPPORT extern UCHAR HtCapIe; extern UCHAR AddHtInfoIe; extern UCHAR NewExtChanIe; extern UCHAR BssCoexistIe; extern UCHAR ExtHtCapIe; #endif /* DOT11_N_SUPPORT */ extern UCHAR ExtCapIe; extern UCHAR ErpIe; extern UCHAR DsIe; extern UCHAR TimIe; extern UCHAR WpaIe; extern UCHAR Wpa2Ie; extern UCHAR IbssIe; extern UCHAR WapiIe; extern UCHAR WPA_OUI[]; extern UCHAR RSN_OUI[]; extern UCHAR WAPI_OUI[]; extern UCHAR WME_INFO_ELEM[]; extern UCHAR WME_PARM_ELEM[]; extern UCHAR RALINK_OUI[]; extern UCHAR PowerConstraintIE[]; typedef union _CAPTURE_MODE_PACKET_BUFFER { struct { UINT32 BYTE0:8; UINT32 BYTE1:8; UINT32 BYTE2:8; UINT32 BYTE3:8; } field; UINT32 Value; }CAPTURE_MODE_PACKET_BUFFER, *PCAPTURE_MODE_PACKET_BUFFER; typedef struct _RSSI_SAMPLE { CHAR LastRssi0; /* last received RSSI */ CHAR LastRssi1; /* last received RSSI */ CHAR LastRssi2; /* last received RSSI */ CHAR AvgRssi0; CHAR AvgRssi1; CHAR AvgRssi2; SHORT AvgRssi0X8; SHORT AvgRssi1X8; SHORT AvgRssi2X8; CHAR LastSnr0; CHAR LastSnr1; CHAR LastSnr2; CHAR AvgSnr0; CHAR AvgSnr1; CHAR AvgSnr2; SHORT AvgSnr0X8; SHORT AvgSnr1X8; SHORT AvgSnr2X8; CHAR LastNoiseLevel0; CHAR LastNoiseLevel1; CHAR LastNoiseLevel2; } RSSI_SAMPLE; /* */ /* Queue structure and macros */ /* */ #define InitializeQueueHeader(QueueHeader) \ { \ (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \ (QueueHeader)->Number = 0; \ } #define RemoveHeadQueue(QueueHeader) \ (QueueHeader)->Head; \ { \ PQUEUE_ENTRY pNext; \ if ((QueueHeader)->Head != NULL) \ { \ pNext = (QueueHeader)->Head->Next; \ (QueueHeader)->Head->Next = NULL; \ (QueueHeader)->Head = pNext; \ if (pNext == NULL) \ (QueueHeader)->Tail = NULL; \ (QueueHeader)->Number--; \ } \ } #define InsertHeadQueue(QueueHeader, QueueEntry) \ { \ ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \ (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ if ((QueueHeader)->Tail == NULL) \ (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ (QueueHeader)->Number++; \ } #define InsertTailQueue(QueueHeader, QueueEntry) \ { \ ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \ if ((QueueHeader)->Tail) \ (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \ else \ (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ (QueueHeader)->Number++; \ } #define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry) \ { \ ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \ if ((QueueHeader)->Tail) \ (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \ else \ (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ (QueueHeader)->Number++; \ } void DisplayTxAgg (RTMP_ADAPTER *pAd); /* */ /* Macros for flag and ref count operations */ /* */ #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F)) #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F)) #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0) #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0) #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F)) /* Macro for power save flag. */ #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F)) #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F)) #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0) #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0) #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F)) #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F)) #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F)) #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0) #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F)) #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F)) #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0) #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F)) #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F)) #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0) #define RTMP_SET_MORE_FLAG(_M, _F) ((_M)->MoreFlags |= (_F)) #define RTMP_TEST_MORE_FLAG(_M, _F) (((_M)->MoreFlags & (_F)) != 0) #define RTMP_CLEAR_MORE_FLAG(_M, _F) ((_M)->MoreFlags &= ~(_F)) #define SET_ASIC_CAP(_pAd, _caps) ((_pAd)->chipCap.asic_caps |= (_caps)) #define IS_ASIC_CAP(_pAd, _caps) (((_pAd)->chipCap.asic_caps & (_caps)) != 0) #define CLR_ASIC_CAP(_pAd, _caps) ((_pAd)->chipCap.asic_caps &= ~(_caps)) #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE)) #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE)) #define INC_RING_INDEX(_idx, _RingSize) \ { \ (_idx) = (_idx+1) % (_RingSize); \ } #ifdef USB_BULK_BUF_ALIGMENT #define CUR_WRITE_IDX_INC(_idx, _RingSize) \ { \ (_idx) = (_idx+1) % (_RingSize); \ } #endif /* USB_BULK_BUF_ALIGMENT */ #ifdef DOT11_N_SUPPORT /* StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here. */ #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ { \ _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \ _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \ _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \ _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \ _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \ _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \ _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \ _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \ _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \ _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \ _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \ NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\ } #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \ { \ _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \ _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \ _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \ } #endif /* DOT11_N_SUPPORT */ #ifdef DOT11_VHT_AC #define COPY_VHT_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ { \ } #endif /* DOT11_VHT_AC */ /* Common fragment list structure - Identical to the scatter gather frag list structure */ #define NIC_MAX_PHYS_BUF_COUNT 8 typedef struct _RTMP_SCATTER_GATHER_ELEMENT { PVOID Address; ULONG Length; PULONG Reserved; } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT; typedef struct _RTMP_SCATTER_GATHER_LIST { ULONG NumberOfElements; PULONG Reserved; RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT]; } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST; /* Some utility macros */ #ifndef min #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b)) #endif #ifndef max #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b)) #endif #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)))) #define INC_COUNTER64(Val) (Val.QuadPart++) #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON)) #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON)) #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR) #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p)) /* Check LEAP & CCKM flags */ #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE)) /* if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required */ #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \ { \ if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \ { \ _pExtraLlcSnapEncap = SNAP_802_1H; \ if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \ NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \ { \ _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \ } \ } \ else \ { \ _pExtraLlcSnapEncap = NULL; \ } \ } /* New Define for new Tx Path. */ #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \ { \ if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \ { \ _pExtraLlcSnapEncap = SNAP_802_1H; \ if (NdisEqualMemory(IPX, _pBufVA, 2) || \ NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \ { \ _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \ } \ } \ else \ { \ _pExtraLlcSnapEncap = NULL; \ } \ } #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \ { \ NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \ NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \ NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \ } /* if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way. else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field else remove the LLC/SNAP field from the result Ethernet frame Patch for WHQL only, which did not turn on Netbios but use IPX within its payload Note: _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed */ #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \ { \ char LLC_Len[2]; \ \ _pRemovedLLCSNAP = NULL; \ if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \ NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \ { \ PUCHAR pProto = _pData + 6; \ \ if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \ NdisEqualMemory(SNAP_802_1H, _pData, 6)) \ { \ LLC_Len[0] = (UCHAR)(_DataSize >> 8); \ LLC_Len[1] = (UCHAR)(_DataSize & (256 - 1)); \ MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ } \ else \ { \ MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \ _pRemovedLLCSNAP = _pData; \ _DataSize -= LENGTH_802_1_H; \ _pData += LENGTH_802_1_H; \ } \ } \ else \ { \ LLC_Len[0] = (UCHAR)(_DataSize >> 8); \ LLC_Len[1] = (UCHAR)(_DataSize & (256 - 1)); \ MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ } \ } /* Enqueue this frame to MLME engine We need to enqueue the whole frame because MLME need to pass data type information from 802.11 header */ #ifdef RTMP_MAC_USB #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _MinSNR, _AntSel, _OpMode) \ { \ UINT32 High32TSF=0, Low32TSF=0; \ MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2 ,_AntSel, _FrameSize, _pFrame, (UCHAR)_MinSNR, _OpMode); \ } #endif /* RTMP_MAC_USB */ #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN) #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1))) /* */ /* Data buffer for DMA operation, the buffer must be contiguous physical memory */ /* Both DMA to / from CPU use the same structure. */ /* */ typedef struct _RTMP_DMABUF { ULONG AllocSize; PVOID AllocVa; /* TxBuf virtual address */ NDIS_PHYSICAL_ADDRESS AllocPa; /* TxBuf physical address */ } RTMP_DMABUF, *PRTMP_DMABUF; /* */ /* Control block (Descriptor) for all ring descriptor DMA operation, buffer must be */ /* contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor */ /* which won't be released, driver has to wait until upper layer return the packet */ /* before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair */ /* to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor */ /* which driver should ACK upper layer when the tx is physically done or failed. */ /* */ typedef struct _RTMP_DMACB { ULONG AllocSize; /* Control block size */ PVOID AllocVa; /* Control block virtual address */ NDIS_PHYSICAL_ADDRESS AllocPa; /* Control block physical address */ PNDIS_PACKET pNdisPacket; PNDIS_PACKET pNextNdisPacket; RTMP_DMABUF DmaBuf; /* Associated DMA buffer structure */ #ifdef CACHE_LINE_32B RXD_STRUC LastBDInfo; #endif /* CACHE_LINE_32B */ } RTMP_DMACB, *PRTMP_DMACB; typedef struct _RTMP_TX_RING { RTMP_DMACB Cell[TX_RING_SIZE]; UINT32 TxCpuIdx; UINT32 TxDmaIdx; UINT32 TxSwFreeIdx; /* software next free tx index */ } RTMP_TX_RING, *PRTMP_TX_RING; typedef struct _RTMP_RX_RING { RTMP_DMACB Cell[RX_RING_SIZE]; UINT32 RxCpuIdx; UINT32 RxDmaIdx; INT32 RxSwReadIdx; /* software next read index */ } RTMP_RX_RING, *PRTMP_RX_RING; typedef struct _RTMP_MGMT_RING { RTMP_DMACB Cell[MGMT_RING_SIZE]; UINT32 TxCpuIdx; UINT32 TxDmaIdx; UINT32 TxSwFreeIdx; /* software next free tx index */ } RTMP_MGMT_RING, *PRTMP_MGMT_RING; typedef struct _RTMP_CTRL_RING { RTMP_DMACB Cell[16]; UINT32 TxCpuIdx; UINT32 TxDmaIdx; UINT32 TxSwFreeIdx; /* software next free tx index */ } RTMP_CTRL_RING, *PRTMP_CTRL_RING; /* */ /* Statistic counter structure */ /* */ typedef struct _COUNTER_802_3 { /* General Stats */ ULONG GoodTransmits; ULONG GoodReceives; ULONG TxErrors; ULONG RxErrors; ULONG RxNoBuffer; /* Ethernet Stats */ ULONG RcvAlignmentErrors; ULONG OneCollision; ULONG MoreCollisions; } COUNTER_802_3, *PCOUNTER_802_3; typedef struct _COUNTER_802_11 { ULONG Length; /* LARGE_INTEGER LastTransmittedFragmentCount; */ LARGE_INTEGER TransmittedFragmentCount; LARGE_INTEGER MulticastTransmittedFrameCount; LARGE_INTEGER FailedCount; LARGE_INTEGER RetryCount; LARGE_INTEGER MultipleRetryCount; LARGE_INTEGER RTSSuccessCount; LARGE_INTEGER RTSFailureCount; LARGE_INTEGER ACKFailureCount; LARGE_INTEGER FrameDuplicateCount; LARGE_INTEGER ReceivedFragmentCount; LARGE_INTEGER MulticastReceivedFrameCount; LARGE_INTEGER FCSErrorCount; LARGE_INTEGER TransmittedFrameCount; LARGE_INTEGER WEPUndecryptableCount; LARGE_INTEGER TransmitCountFrmOs; } COUNTER_802_11, *PCOUNTER_802_11; #ifdef RT3290 typedef struct _ANT_DIVERSITY { BOOLEAN RateUp; ULONG TrainCounter; ULONG AntennaDiversityState; // 0->Stable state 1->training state ULONG AntennaDiversityPER[2]; // 0 ->main 1->aux ULONG AntennaDiversityTxPacketCount[2]; // 0 ->main 1->aux ULONG AntennaDiversityRxPacketCount[2]; CHAR Rssi[2]; ULONG AntennaDiversityCount; ULONG AntennaDiversityTrigger; }ANT_DIVERSITY, *PANT_DIVERSITY; #endif /* RT3290 */ typedef struct _COUNTER_RALINK { UINT32 OneSecStart; /* for one sec count clear use */ UINT32 OneSecBeaconSentCnt; UINT32 OneSecFalseCCACnt; /* CCA error count, for debug purpose, might move to global counter */ UINT32 OneSecRxFcsErrCnt; /* CRC error */ UINT32 OneSecRxOkCnt; /* RX without error */ UINT32 OneSecTxFailCount; UINT32 OneSecTxNoRetryOkCount; UINT32 OneSecTxRetryOkCount; UINT32 OneSecRxOkDataCnt; /* unicast-to-me DATA frame count */ UINT32 OneSecTransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ ULONG OneSecOsTxCount[NUM_OF_TX_RING]; ULONG OneSecDmaDoneCount[NUM_OF_TX_RING]; UINT32 OneSecTxDoneCount; ULONG OneSecRxCount; UINT32 OneSecReceivedByteCount; UINT32 OneSecTxAggregationCount; UINT32 OneSecRxAggregationCount; UINT32 OneSecEnd; /* for one sec count clear use */ #ifdef MICROWAVE_OVEN_SUPPORT UINT16 FalseCCACnt_100MS[MLME_TASK_EXEC_MULTIPLE]; /* one handred millisecond false CCA Count */ UINT16 PLCPErrCnt_100MS[MLME_TASK_EXEC_MULTIPLE]; /* one handred millisecond PLCP Error Count */ #endif /* MICROWAVE_OVEN_SUPPORT */ ULONG TransmittedByteCount; /* both successful and failure, used to calculate TX throughput */ ULONG ReceivedByteCount; /* both CRC okay and CRC error, used to calculate RX throughput */ #ifdef RT3290 // TODO: shiang, check the purpose of following parameter ULONG OneSecRxOkCnt2; /* RX without error */ #endif /* RT3290 */ ULONG BadCQIAutoRecoveryCount; ULONG PoorCQIRoamingCount; ULONG MgmtRingFullCount; ULONG RxCountSinceLastNULL; ULONG RxCount; ULONG KickTxCount; LARGE_INTEGER RealFcsErrCount; ULONG PendingNdisPacketCount; ULONG FalseCCACnt; /* CCA error count */ UINT32 LastOneSecTotalTxCount; /* OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount */ UINT32 LastOneSecRxOkDataCnt; /* OneSecRxOkDataCnt */ ULONG DuplicateRcv; ULONG TxAggCount; ULONG TxNonAggCount; ULONG TxAgg1MPDUCount; ULONG TxAgg2MPDUCount; ULONG TxAgg3MPDUCount; ULONG TxAgg4MPDUCount; ULONG TxAgg5MPDUCount; ULONG TxAgg6MPDUCount; ULONG TxAgg7MPDUCount; ULONG TxAgg8MPDUCount; ULONG TxAgg9MPDUCount; ULONG TxAgg10MPDUCount; ULONG TxAgg11MPDUCount; ULONG TxAgg12MPDUCount; ULONG TxAgg13MPDUCount; ULONG TxAgg14MPDUCount; ULONG TxAgg15MPDUCount; ULONG TxAgg16MPDUCount; LARGE_INTEGER TransmittedOctetsInAMSDU; LARGE_INTEGER TransmittedAMSDUCount; LARGE_INTEGER ReceivedOctesInAMSDUCount; LARGE_INTEGER ReceivedAMSDUCount; LARGE_INTEGER TransmittedAMPDUCount; LARGE_INTEGER TransmittedMPDUsInAMPDUCount; LARGE_INTEGER TransmittedOctetsInAMPDUCount; LARGE_INTEGER MPDUInReceivedAMPDUCount; } COUNTER_RALINK, *PCOUNTER_RALINK; typedef struct _COUNTER_DRS { /* to record the each TX rate's quality. 0 is best, the bigger the worse. */ USHORT TxQuality[MAX_TX_RATE_INDEX+1]; UCHAR PER[MAX_TX_RATE_INDEX+1]; UCHAR TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ ULONG CurrTxRateStableTime; /* # of second in current TX rate */ /*BOOLEAN fNoisyEnvironment; */ BOOLEAN fLastSecAccordingRSSI; UCHAR LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ UCHAR LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ ULONG LastTxOkCount; } COUNTER_DRS, *PCOUNTER_DRS; #ifdef DOT11_N_SUPPORT #ifdef TXBF_SUPPORT typedef struct { ULONG TxSuccessCount; ULONG TxRetryCount; ULONG TxFailCount; ULONG ETxSuccessCount; ULONG ETxRetryCount; ULONG ETxFailCount; ULONG ITxSuccessCount; ULONG ITxRetryCount; ULONG ITxFailCount; } COUNTER_TXBF; #endif /* TXBF_SUPPORT */ #endif /* DOT11_N_SUPPORT */ #ifdef STREAM_MODE_SUPPORT typedef struct _STREAM_MODE_ENTRY_{ #define STREAM_MODE_STATIC 1 USHORT flag; UCHAR macAddr[MAC_ADDR_LEN]; }STREAM_MODE_ENTRY; #endif /* STREAM_MODE_SUPPORT */ /* for Microwave oven */ #ifdef MICROWAVE_OVEN_SUPPORT typedef struct _MO_CFG_STRUCT { BOOLEAN bEnable; UINT8 nPeriod_Cnt; /* measurement period 100ms, mitigate the interference period 900 ms */ UINT16 nFalseCCACnt; UINT16 nFalseCCATh; /* default is 100 */ #ifdef MT7601 UINT32 Stored_BBP_R65; UCHAR Stored_RF_B5_R6; UCHAR Stored_RF_B5_R7; #endif /* MT7601 */ } MO_CFG_STRUCT, *PMO_CFG_STRUCT; #endif /* MICROWAVE_OVEN_SUPPORT */ /*************************************************************************** * security key related data structure **************************************************************************/ /* structure to define WPA Group Key Rekey Interval */ typedef struct GNU_PACKED _RT_802_11_WPA_REKEY { ULONG ReKeyMethod; /* mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based */ ULONG ReKeyInterval; /* time-based: seconds, packet-based: kilo-packets */ } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY; #ifdef RTMP_MAC_USB /*************************************************************************** * RTUSB I/O related data structure **************************************************************************/ /* for USB interface, avoid in interrupt when write key */ typedef struct RT_ADD_PAIRWISE_KEY_ENTRY { UCHAR MacAddr[6]; USHORT MacTabMatchWCID; /* ASIC */ CIPHER_KEY CipherKey; } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY; /* Cipher suite type for mixed mode group cipher, P802.11i-2004 */ typedef enum _RT_802_11_CIPHER_SUITE_TYPE { Cipher_Type_NONE, Cipher_Type_WEP40, Cipher_Type_TKIP, Cipher_Type_RSVD, Cipher_Type_CCMP, Cipher_Type_WEP104 } RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE; #endif /* RTMP_MAC_USB */ typedef struct { UCHAR Addr[MAC_ADDR_LEN]; UCHAR ErrorCode[2]; /*00 01-Invalid authentication type */ /*00 02-Authentication timeout */ /*00 03-Challenge from AP failed */ /*00 04-Challenge to AP failed */ BOOLEAN Reported; } ROGUEAP_ENTRY, *PROGUEAP_ENTRY; typedef struct { UCHAR RogueApNr; ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; } ROGUEAP_TABLE, *PROGUEAP_TABLE; /* * Fragment Frame structure */ typedef struct _FRAGMENT_FRAME { PNDIS_PACKET pFragPacket; ULONG RxSize; USHORT Sequence; USHORT LastFrag; ULONG Flags; /* Some extra frame information. bit 0: LLC presented */ } FRAGMENT_FRAME, *PFRAGMENT_FRAME; /* */ /* Tkip Key structure which RC4 key & MIC calculation */ /* */ typedef struct _TKIP_KEY_INFO { UINT nBytesInM; /* # bytes in M for MICKEY */ ULONG IV16; ULONG IV32; ULONG K0; /* for MICKEY Low */ ULONG K1; /* for MICKEY Hig */ ULONG L; /* Current state for MICKEY */ ULONG R; /* Current state for MICKEY */ ULONG M; /* Message accumulator for MICKEY */ UCHAR RC4KEY[16]; UCHAR MIC[8]; } TKIP_KEY_INFO, *PTKIP_KEY_INFO; /* */ /* Private / Misc data, counters for driver internal use */ /* */ typedef struct __PRIVATE_STRUC { UINT SystemResetCnt; /* System reset counter */ UINT TxRingFullCnt; /* Tx ring full occurrance number */ UINT PhyRxErrCnt; /* PHY Rx error count, for debug purpose, might move to global counter */ /* Variables for WEP encryption / decryption in rtmp_wep.c */ /* Tkip stuff */ TKIP_KEY_INFO Tx; TKIP_KEY_INFO Rx; } PRIVATE_STRUC, *PPRIVATE_STRUC; /*************************************************************************** * Channel and BBP related data structures **************************************************************************/ /* structure to tune BBP R66 (BBP TUNING) */ typedef struct _BBP_R66_TUNING { BOOLEAN bEnable; USHORT FalseCcaLowerThreshold; /* default 100 */ USHORT FalseCcaUpperThreshold; /* default 512 */ UCHAR R66Delta; UCHAR R66CurrentValue; BOOLEAN R66LowerUpperSelect; /*Before LinkUp, Used LowerBound or UpperBound as R66 value. */ } BBP_R66_TUNING, *PBBP_R66_TUNING; #ifdef DOT11_N_SUPPORT #ifdef DOT11N_DRAFT3 #define EFFECTED_CH_SECONDARY 0x1 #define EFFECTED_CH_PRIMARY 0x2 #define EFFECTED_CH_LEGACY 0x4 #endif /* DOT11N_DRAFT3 */ #endif /* DOT11_N_SUPPORT */ /* structure to store channel TX power */ typedef struct _CHANNEL_TX_POWER { USHORT RemainingTimeForUse; /*unit: sec */ UCHAR Channel; #ifdef DOT11N_DRAFT3 BOOLEAN bEffectedChannel; /* For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz. */ #endif /* DOT11N_DRAFT3 */ CHAR Power; CHAR Power2; #ifdef DOT11N_SS3_SUPPORT CHAR Power3; #endif /* DOT11N_SS3_SUPPORT */ UCHAR MaxTxPwr; UCHAR DfsReq; UCHAR RegulatoryDomain; /* Channel property: CHANNEL_DISABLED: The channel is disabled. CHANNEL_PASSIVE_SCAN: Only passive scanning is allowed. CHANNEL_NO_IBSS: IBSS is not allowed. CHANNEL_RADAR: Radar detection is required. CHANNEL_NO_FAT_ABOVE: Extension channel above this channel is not allowed. CHANNEL_NO_FAT_BELOW: Extension channel below this channel is not allowed. CHANNEL_40M_CAP: 40 BW channel group */ #define CHANNEL_DEFAULT_PROP 0x00 #define CHANNEL_DISABLED 0x01 /* no use */ #define CHANNEL_PASSIVE_SCAN 0x02 #define CHANNEL_NO_IBSS 0x04 #define CHANNEL_RADAR 0x08 #define CHANNEL_NO_FAT_ABOVE 0x10 #define CHANNEL_NO_FAT_BELOW 0x20 #define CHANNEL_40M_CAP 0x40 UCHAR Flags; } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER; /* Channel list subset */ typedef struct _CHANNEL_LIST_SUB { UCHAR Channel; UCHAR IdxMap; /* Index mapping to original channel list */ } CHANNEL_LIST_SUB, *PCHANNEL_LIST_SUB; typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { UCHAR EvaluatePeriod; /* 0:not evalute status, 1: evaluate status, 2: switching status */ UCHAR EvaluateStableCnt; UCHAR Pair1PrimaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ UCHAR Pair1SecondaryRxAnt; /* 0:Ant-E1, 1:Ant-E2 */ SHORT Pair1LastAvgRssi; /* */ SHORT Pair2LastAvgRssi; /* */ ULONG RcvPktNumWhenEvaluate; BOOLEAN FirstPktArrivedWhenEvaluate; #ifdef CONFIG_AP_SUPPORT LONG Pair1AvgRssiGroup1[2]; LONG Pair1AvgRssiGroup2[2]; ULONG RcvPktNum[2]; #endif /* CONFIG_AP_SUPPORT */ } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY; typedef enum _ABGBAND_STATE_ { UNKNOWN_BAND, BG_BAND, A_BAND, } ABGBAND_STATE; /*************************************************************************** * structure for MLME state machine **************************************************************************/ typedef struct _MLME_STRUCT { STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE]; /* Action */ STATE_MACHINE ActMachine; #ifdef WSC_INCLUDED STATE_MACHINE WscMachine; STATE_MACHINE_FUNC WscFunc[WSC_FUNC_SIZE]; #endif /* WSC_INCLUDED */ #ifdef QOS_DLS_SUPPORT STATE_MACHINE DlsMachine; STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE]; #endif /* QOS_DLS_SUPPORT */ #ifdef CONFIG_AP_SUPPORT /* AP state machines */ STATE_MACHINE ApAssocMachine; STATE_MACHINE ApAuthMachine; STATE_MACHINE ApSyncMachine; STATE_MACHINE_FUNC ApAssocFunc[AP_ASSOC_FUNC_SIZE]; /* STATE_MACHINE_FUNC ApDlsFunc[DLS_FUNC_SIZE]; */ STATE_MACHINE_FUNC ApAuthFunc[AP_AUTH_FUNC_SIZE]; STATE_MACHINE_FUNC ApSyncFunc[AP_SYNC_FUNC_SIZE]; #ifdef APCLI_SUPPORT STATE_MACHINE ApCliAuthMachine; STATE_MACHINE ApCliAssocMachine; STATE_MACHINE ApCliCtrlMachine; STATE_MACHINE ApCliSyncMachine; STATE_MACHINE ApCliWpaPskMachine; STATE_MACHINE_FUNC ApCliAuthFunc[APCLI_AUTH_FUNC_SIZE]; STATE_MACHINE_FUNC ApCliAssocFunc[APCLI_ASSOC_FUNC_SIZE]; STATE_MACHINE_FUNC ApCliCtrlFunc[APCLI_CTRL_FUNC_SIZE]; STATE_MACHINE_FUNC ApCliSyncFunc[APCLI_SYNC_FUNC_SIZE]; #endif /* APCLI_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ /* common WPA state machine */ STATE_MACHINE WpaMachine; STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE]; ULONG ChannelQuality; /* 0..100, Channel Quality Indication for Roaming */ ULONG Now32; /* latch the value of NdisGetSystemUpTime() */ ULONG LastSendNULLpsmTime; BOOLEAN bRunning; NDIS_SPIN_LOCK TaskLock; MLME_QUEUE Queue; UINT ShiftReg; RALINK_TIMER_STRUCT PeriodicTimer; RALINK_TIMER_STRUCT APSDPeriodicTimer; RALINK_TIMER_STRUCT LinkDownTimer; RALINK_TIMER_STRUCT LinkUpTimer; ULONG PeriodicRound; ULONG GPIORound; ULONG OneSecPeriodicRound; UCHAR RealRxPath; BOOLEAN bLowThroughput; BOOLEAN bEnableAutoAntennaCheck; RALINK_TIMER_STRUCT RxAntEvalTimer; #ifdef RTMP_MAC_USB RALINK_TIMER_STRUCT AutoWakeupTimer; BOOLEAN AutoWakeupTimerRunning; #endif /* RTMP_MAC_USB */ #ifdef CONFIG_MULTI_CHANNEL RALINK_TIMER_STRUCT MCCTimer; RALINK_TIMER_STRUCT ConcurrentP2PConnectTimer; UINT32 HCCAToEDCATimerValue; UINT32 EDCAToHCCATimerValue; BOOLEAN ConcurrentP2PConnectTimerRunning; UINT32 StaStayTick; UINT32 P2pStayTick; #endif /* CONFIG_MULTI_CHANNEL */ } MLME_STRUCT, *PMLME_STRUCT; #ifdef DOT11_N_SUPPORT /*************************************************************************** * 802.11 N related data structures **************************************************************************/ struct reordering_mpdu { struct reordering_mpdu *next; PNDIS_PACKET pPacket; /* coverted to 802.3 frame */ int Sequence; /* sequence number of MPDU */ BOOLEAN bAMSDU; UCHAR OpMode; }; struct reordering_list { struct reordering_mpdu *next; int qlen; }; struct reordering_mpdu_pool { PVOID mem; NDIS_SPIN_LOCK lock; struct reordering_list freelist; }; typedef enum _REC_BLOCKACK_STATUS { Recipient_NONE = 0, Recipient_USED, Recipient_HandleRes, Recipient_Accept } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS; typedef enum _ORI_BLOCKACK_STATUS { Originator_NONE = 0, Originator_USED, Originator_WaitRes, Originator_Done } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS; typedef struct _BA_ORI_ENTRY { UCHAR Wcid; UCHAR TID; UCHAR BAWinSize; UCHAR Token; /* Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header. */ USHORT Sequence; USHORT TimeOutValue; ORI_BLOCKACK_STATUS ORI_BA_Status; RALINK_TIMER_STRUCT ORIBATimer; PVOID pAdapter; } BA_ORI_ENTRY, *PBA_ORI_ENTRY; typedef struct _BA_REC_ENTRY { UCHAR Wcid; UCHAR TID; UCHAR BAWinSize; /* 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. */ /*UCHAR NumOfRxPkt; */ /*UCHAR Curindidx; // the head in the RX reordering buffer */ USHORT LastIndSeq; /* USHORT LastIndSeqAtTimer; */ USHORT TimeOutValue; RALINK_TIMER_STRUCT RECBATimer; ULONG LastIndSeqAtTimer; ULONG nDropPacket; ULONG rcvSeq; REC_BLOCKACK_STATUS REC_BA_Status; /* UCHAR RxBufIdxUsed; */ /* corresponding virtual address for RX reordering packet storage. */ /*RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF]; */ NDIS_SPIN_LOCK RxReRingLock; /* Rx Ring spinlock */ /* struct _BA_REC_ENTRY *pNext; */ PVOID pAdapter; struct reordering_list list; } BA_REC_ENTRY, *PBA_REC_ENTRY; typedef struct { ULONG numAsRecipient; /* I am recipient of numAsRecipient clients. These client are in the BARecEntry[] */ ULONG numAsOriginator; /* I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] */ ULONG numDoneOriginator; /* count Done Originator sessions */ BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; } BA_TABLE, *PBA_TABLE; /*For QureyBATableOID use; */ typedef struct GNU_PACKED _OID_BA_REC_ENTRY { UCHAR MACAddr[MAC_ADDR_LEN]; UCHAR BaBitmap; /* if (BaBitmap&(1<MaxHTPhyMode.field.MODE >= MODE_HTMIX) #define IS_HT_RATE(_pMacEntry) \ (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) #define PEER_IS_HT_RATE(_pMacEntry) \ (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX) #endif /* DOT11_N_SUPPORT */ /*This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic) */ typedef struct _IOT_STRUC { BOOLEAN bRTSLongProtOn; } IOT_STRUC, *PIOT_STRUC; /* This is the registry setting for 802.11n transmit setting. Used in advanced page. */ typedef union _REG_TRANSMIT_SETTING { #ifdef RT_BIG_ENDIAN struct { UINT32 rsv:13; UINT32 EXTCHA:2; UINT32 HTMODE:1; UINT32 TRANSNO:2; UINT32 STBC:1; /*SPACE */ UINT32 ShortGI:1; UINT32 BW:1; /*channel bandwidth 20MHz or 40 MHz */ UINT32 TxBF:1; /* 3*3 */ UINT32 ITxBfEn:1; UINT32 rsv0:9; /*UINT32 MCS:7; // MCS */ /*UINT32 PhyMode:4; */ } field; #else struct { /*UINT32 PhyMode:4; */ /*UINT32 MCS:7; // MCS */ UINT32 rsv0:9; UINT32 ITxBfEn:1; UINT32 TxBF:1; UINT32 BW:1; /*channel bandwidth 20MHz or 40 MHz */ UINT32 ShortGI:1; UINT32 STBC:1; /*SPACE */ UINT32 TRANSNO:2; UINT32 HTMODE:1; UINT32 EXTCHA:2; UINT32 rsv:13; } field; #endif UINT32 word; } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING; typedef union _DESIRED_TRANSMIT_SETTING { #ifdef RT_BIG_ENDIAN struct { USHORT rsv:3; USHORT FixedTxMode:2; /* If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. */ USHORT PhyMode:4; USHORT MCS:7; /* MCS */ } field; #else struct { USHORT MCS:7; /* MCS */ USHORT PhyMode:4; USHORT FixedTxMode:2; /* If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode. */ USHORT rsv:3; } field; #endif USHORT word; } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING; struct hw_setting{ UCHAR prim_ch; UCHAR cent_ch; UCHAR bbp_bw; UCHAR rf_band; }; struct wifi_dev{ NDIS_802_11_AUTHENTICATION_MODE AuthMode; NDIS_802_11_WEP_STATUS WepStatus; NDIS_802_11_WEP_STATUS GroupKeyWepStatus; WPA_MIX_PAIR_CIPHER WpaMixPairCipher; RT_PHY_INFO DesiredHtPhyInfo; DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; /* Desired transmit setting. this is for reading registry setting only. not useful. */ BOOLEAN bAutoTxRateSwitch; BOOLEAN bWmmCapable; /* 0:disable WMM, 1:enable WMM */ HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; }; #ifdef RTMP_MAC_USB /*************************************************************************** * USB-based chip Beacon related data structures **************************************************************************/ #define BEACON_BITMAP_MASK 0xff typedef struct _BEACON_SYNC_STRUCT_ { UCHAR BeaconBuf[HW_BEACON_MAX_NUM][HW_BEACON_OFFSET]; UCHAR *BeaconTxWI[HW_BEACON_MAX_NUM]; ULONG TimIELocationInBeacon[HW_BEACON_MAX_NUM]; ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_NUM]; BOOLEAN EnableBeacon; /* trigger to enable beacon transmission. */ UCHAR BeaconBitMap; /* NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. */ UCHAR DtimBitOn; /* NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change. */ } BEACON_SYNC_STRUCT; #endif /* RTMP_MAC_USB */ /*************************************************************************** * Multiple SSID related data structures **************************************************************************/ #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */ #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */ /* clear bcmc TIM bit */ #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \ pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~NUM_BIT8[0]; /* set bcmc TIM bit */ #define WLAN_MR_TIM_BCMC_SET(apidx) \ pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= NUM_BIT8[0]; /* clear a station PS TIM bit */ #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \ { UCHAR tim_offset = wcid >> 3; \ UCHAR bit_offset = wcid & 0x7; \ ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~NUM_BIT8[bit_offset]); } /* set a station PS TIM bit */ #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \ { UCHAR tim_offset = wcid >> 3; \ UCHAR bit_offset = wcid & 0x7; \ ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= NUM_BIT8[bit_offset]; } #ifdef CONFIG_AP_SUPPORT typedef struct _MULTISSID_STRUCT { struct wifi_dev wdev; #ifdef HOSTAPD_SUPPORT BOOLEAN Hostapd; BOOLEAN HostapdWPS; #endif UCHAR Bssid[MAC_ADDR_LEN]; UCHAR SsidLen; CHAR Ssid[MAX_LEN_OF_SSID]; USHORT CapabilityInfo; UCHAR MaxStaNum; /* Limit the STA connection number per BSS */ UCHAR StaCount; PNET_DEV MSSIDDev; NDIS_802_11_AUTHENTICATION_MODE AuthMode; NDIS_802_11_WEP_STATUS WepStatus; NDIS_802_11_WEP_STATUS GroupKeyWepStatus; WPA_MIX_PAIR_CIPHER WpaMixPairCipher; HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; /* For transmit phy setting in TXWI. */ RT_PHY_INFO DesiredHtPhyInfo; DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; /* Desired transmit setting. this is for reading registry setting only. not useful. */ BOOLEAN bAutoTxRateSwitch; /*MBSS_STATISTICS MbssStat;*/ ULONG TxCount; ULONG RxCount; ULONG ReceivedByteCount; ULONG TransmittedByteCount; ULONG RxErrorCount; ULONG RxDropCount; ULONG TxErrorCount; ULONG TxDropCount; ULONG ucPktsTx; ULONG ucPktsRx; ULONG mcPktsTx; ULONG mcPktsRx; ULONG bcPktsTx; ULONG bcPktsRx; /*CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4] */ UCHAR DefaultKeyId; UCHAR TxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11, ... */ UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES]; /* OID_802_11_DESIRED_RATES */ UCHAR DesiredRatesIndex; UCHAR MaxTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ /* ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on */ /* ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on */ UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM]; /* WPA */ UCHAR GMK[32]; UCHAR PMK[32]; UCHAR GTK[32]; #ifdef DOT1X_SUPPORT BOOLEAN IEEE8021X; BOOLEAN PreAuth; #endif /* DOT1X_SUPPORT */ UCHAR GNonce[32]; UCHAR PortSecured; NDIS_802_11_PRIVACY_FILTER PrivacyFilter; UCHAR BANClass3Data; ULONG IsolateInterStaTraffic; UCHAR RSNIE_Len[2]; UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE]; /* for Group Rekey */ RT_WPA_REKEY WPAREKEY; ULONG REKEYCOUNTER; RALINK_TIMER_STRUCT REKEYTimer; UCHAR REKEYTimerRunning; UINT8 RekeyCountDown; #ifdef WAPI_SUPPORT UCHAR WAPIPassPhrase[64]; /* WAPI PSK pass phrase */ UINT WAPIPassPhraseLen; /* the length of WAPI PSK pass phrase */ UINT WapiPskType; /* 0 - Hex, 1 - ASCII */ UCHAR WAPI_BK[16]; /* WAPI base key */ UCHAR NMK[LEN_WAPI_NMK]; UCHAR key_announce_flag[LEN_WAPI_TSC]; BOOLEAN sw_wpi_encrypt; /* WPI data encrypt by SW */ #endif /* WAPI_SUPPORT */ UCHAR TimIELocationInBeacon; UCHAR CapabilityInfoLocationInBeacon; /* For PMK Cache using */ ULONG PMKCachePeriod; /* unit : jiffies */ NDIS_AP_802_11_PMKID PMKIDCache; /* outgoing BEACON frame buffer and corresponding TXWI */ /* TXWI_STRUC *BeaconTxWI; */ CHAR BeaconBuf[MAX_BEACON_SIZE]; /* NOTE: BeaconBuf should be 4-byte aligned */ BOOLEAN bHideSsid; UINT16 StationKeepAliveTime; /* unit: second */ /* VLAN related */ BOOLEAN bVLAN_Tag; USHORT VLAN_VID; USHORT VLAN_Priority; RT_802_11_ACL AccessControlList; /* EDCA Qos */ BOOLEAN bWmmCapable; /* 0:disable WMM, 1:enable WMM */ BOOLEAN bDLSCapable; /* 0:disable DLS, 1:enable DLS */ /* Why need the parameter: 2009/09/22 1. iwpriv ra0 set WmmCapable=0 2. iwpriv ra0 set WirelessMode=9 3. iwpriv ra0 set WirelessMode=0 4. iwpriv ra0 set SSID=SampleAP After the 4 commands, WMM is still enabled. So we need the parameter to recover WMM Capable flag. No the problem in station mode. */ BOOLEAN bWmmCapableOrg; /* origin Wmm Capable in non-11n mode */ #ifdef QOS_DLS_SUPPORT UCHAR DlsPTK[64]; /* Due to windows dirver count on meetinghouse to handle 4-way shake */ #endif /* QOS_DLS_SUPPORT */ #ifdef DOT1X_SUPPORT /* For 802.1x daemon setting per BSS */ UINT8 radius_srv_num; RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM]; UINT8 NasId[IFNAMSIZ]; UINT8 NasIdLen; #endif /* DOT1X_SUPPORT */ #ifdef RTL865X_SOC unsigned int mylinkid; #endif #ifdef CONFIG_AP_SUPPORT WSC_LV_INFO WscIEBeacon; WSC_LV_INFO WscIEProbeResp; #ifdef WSC_AP_SUPPORT WSC_CTRL WscControl; WSC_SECURITY_MODE WscSecurityMode; #endif /* WSC_AP_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ #ifdef IDS_SUPPORT UINT32 RcvdConflictSsidCount; UINT32 RcvdSpoofedAssocRespCount; UINT32 RcvdSpoofedReassocRespCount; UINT32 RcvdSpoofedProbeRespCount; UINT32 RcvdSpoofedBeaconCount; UINT32 RcvdSpoofedDisassocCount; UINT32 RcvdSpoofedAuthCount; UINT32 RcvdSpoofedDeauthCount; UINT32 RcvdSpoofedUnknownMgmtCount; UINT32 RcvdReplayAttackCount; CHAR RssiOfRcvdConflictSsid; CHAR RssiOfRcvdSpoofedAssocResp; CHAR RssiOfRcvdSpoofedReassocResp; CHAR RssiOfRcvdSpoofedProbeResp; CHAR RssiOfRcvdSpoofedBeacon; CHAR RssiOfRcvdSpoofedDisassoc; CHAR RssiOfRcvdSpoofedAuth; CHAR RssiOfRcvdSpoofedDeauth; CHAR RssiOfRcvdSpoofedUnknownMgmt; CHAR RssiOfRcvdReplayAttack; #endif /* IDS_SUPPORT */ /* used in if beacon send or stop */ BOOLEAN bBcnSntReq; UCHAR BcnBufIdx; UCHAR PhyMode; /* UAPSD information: such as enable or disable, do not remove */ UAPSD_INFO UapsdInfo; } MULTISSID_STRUCT, *PMULTISSID_STRUCT; #endif /* CONFIG_AP_SUPPORT */ /* configuration common to OPMODE_AP as well as OPMODE_STA */ typedef struct _COMMON_CONFIG { BOOLEAN bCountryFlag; UCHAR CountryCode[3]; #ifdef EXT_BUILD_CHANNEL_LIST UCHAR Geography; UCHAR DfsType; PUCHAR pChDesp; #endif /* EXT_BUILD_CHANNEL_LIST */ UCHAR CountryRegion; /* Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel */ UCHAR CountryRegionForABand; /* Enum of country region for A band */ UCHAR PhyMode; UCHAR cfg_wmode; UCHAR SavedPhyMode; USHORT Dsifs; /* in units of usec */ ULONG PacketFilter; /* Packet filter for receiving */ UINT8 RegulatoryClass[MAX_NUM_OF_REGULATORY_CLASS]; CHAR Ssid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ UCHAR SsidLen; /* the actual ssid length in used */ UCHAR LastSsidLen; /* the actual ssid length in used */ CHAR LastSsid[MAX_LEN_OF_SSID]; /* NOT NULL-terminated */ UCHAR LastBssid[MAC_ADDR_LEN]; UCHAR Bssid[MAC_ADDR_LEN]; USHORT BeaconPeriod; UCHAR Channel; UCHAR CentralChannel; /* Central Channel when using 40MHz is indicating. not real channel. */ UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES]; UCHAR SupRateLen; UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES]; UCHAR ExtRateLen; UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; /* OID_802_11_DESIRED_RATES */ UCHAR MaxDesiredRate; UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES]; ULONG BasicRateBitmap; /* backup basic ratebitmap */ ULONG BasicRateBitmapOld; /* backup basic ratebitmap */ BOOLEAN bInServicePeriod; BOOLEAN bAPSDAC_BE; BOOLEAN bAPSDAC_BK; BOOLEAN bAPSDAC_VI; BOOLEAN bAPSDAC_VO; /* because TSPEC can modify the APSD flag, we need to keep the APSD flag requested in association stage from the station; we need to recover the APSD flag after the TSPEC is deleted. */ BOOLEAN bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */ BOOLEAN bACMAPSDTr[4]; /* no use */ UCHAR MaxSPLength; BOOLEAN bNeedSendTriggerFrame; BOOLEAN bAPSDForcePowerSave; /* Force power save mode, should only use in APSD-STAUT */ ULONG TriggerTimerCount; UCHAR BBPCurrentBW; /* BW_10, BW_20, BW_40, BW_80 */ REG_TRANSMIT_SETTING RegTransmitSetting; /*registry transmit setting. this is for reading registry setting only. not useful. */ UCHAR TxRate; /* Same value to fill in TXD. TxRate is 6-bit */ UCHAR MaxTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ UCHAR TxRateIndex; /* Tx rate index in RateSwitchTable */ UCHAR MinTxRate; /* RATE_1, RATE_2, RATE_5_5, RATE_11 */ UCHAR RtsRate; /* RATE_xxx */ HTTRANSMIT_SETTING MlmeTransmit; /* MGMT frame PHY rate setting when operatin at Ht rate. */ UCHAR MlmeRate; /* RATE_xxx, used to send MLME frames */ UCHAR BasicMlmeRate; /* Default Rate for sending MLME frames */ USHORT RtsThreshold; /* in unit of BYTE */ USHORT FragmentThreshold; /* in unit of BYTE */ UCHAR TxPower; /* in unit of mW */ ULONG TxPowerPercentage; /* 0~100 % */ ULONG TxPowerDefault; /* keep for TxPowerPercentage */ UINT8 PwrConstraint; #ifdef DOT11_N_SUPPORT BACAP_STRUC BACapability; /* NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 */ BACAP_STRUC REGBACapability; /* NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 */ #endif /* DOT11_N_SUPPORT */ #ifdef DOT11_VHT_AC BOOLEAN force_vht; UCHAR vht_bw; UCHAR vht_cent_ch; UCHAR vht_cent_ch2; #endif /* DOT11_VHT_AC */ IOT_STRUC IOTestParm; /* 802.11n InterOpbility Test Parameter; */ ULONG TxPreamble; /* Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto */ BOOLEAN bUseZeroToDisableFragment; /* Microsoft use 0 as disable */ ULONG UseBGProtection; /* 0: auto, 1: always use, 2: always not use */ BOOLEAN bUseShortSlotTime; /* 0: disable, 1 - use short slot (9us) */ BOOLEAN bEnableTxBurst; /* 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST */ BOOLEAN bAggregationCapable; /* 1: enable TX aggregation when the peer supports it */ BOOLEAN bPiggyBackCapable; /* 1: enable TX piggy-back according MAC's version */ BOOLEAN bIEEE80211H; /* 1: enable IEEE802.11h spec. */ UCHAR RDDurRegion; /* Region of radar detection */ ULONG DisableOLBCDetect; /* 0: enable OLBC detect; 1 disable OLBC detect */ #ifdef DOT11_N_SUPPORT BOOLEAN bRdg; #endif /* DOT11_N_SUPPORT */ BOOLEAN bWmmCapable; /* 0:disable WMM, 1:enable WMM */ QOS_CAPABILITY_PARM APQosCapability; /* QOS capability of the current associated AP */ EDCA_PARM APEdcaParm; /* EDCA parameters of the current associated AP */ QBSS_LOAD_PARM APQbssLoad; /* QBSS load of the current associated AP */ UCHAR AckPolicy[4]; /* ACK policy of the specified AC. see ACK_xxx */ /* a bitmap of BOOLEAN flags. each bit represent an operation status of a particular */ /* BOOLEAN control, either ON or OFF. These flags should always be accessed via */ /* OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros. */ /* see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition */ ULONG OpStatusFlags; BOOLEAN NdisRadioStateOff; /*For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff. */ #ifdef DFS_SUPPORT /* IEEE802.11H--DFS. */ RADAR_DETECT_STRUCT RadarDetect; #endif /* DFS_SUPPORT */ #ifdef CARRIER_DETECTION_SUPPORT CARRIER_DETECTION_STRUCT CarrierDetect; #endif /* CARRIER_DETECTION_SUPPORT */ #ifdef DOT11_N_SUPPORT /* HT */ RT_HT_CAPABILITY DesiredHtPhy; HT_CAPABILITY_IE HtCapability; ADD_HT_INFO_IE AddHTInfo; /* Useful as AP. */ /*This IE is used with channel switch announcement element when changing to a new 40MHz. */ /*This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp. */ 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 */ EXT_CAP_INFO_ELEMENT ExtCapIE; /* this is the extened capibility IE appreed in MGMT frames. Doesn't need to update once set in Init. */ #ifdef DOT11N_DRAFT3 BOOLEAN bBssCoexEnable; /* Following two paramters now only used for the initial scan operation. the AP only do bandwidth fallback when BssCoexApCnt > BssCoexApCntThr By default, the "BssCoexApCntThr" is set as 0 in "UserCfgInit()". */ UCHAR BssCoexApCntThr; UCHAR BssCoexApCnt; UCHAR Bss2040CoexistFlag; /* bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo. */ RALINK_TIMER_STRUCT Bss2040CoexistTimer; UCHAR Bss2040NeedFallBack; /* 1: Need Fall back to 20MHz */ /*This IE is used for 20/40 BSS Coexistence. */ BSS_2040_COEXIST_IE BSS2040CoexistInfo; USHORT Dot11OBssScanPassiveDwell; /* Unit : TU. 5~1000 */ USHORT Dot11OBssScanActiveDwell; /* Unit : TU. 10~1000 */ USHORT Dot11BssWidthTriggerScanInt; /* Unit : Second */ USHORT Dot11OBssScanPassiveTotalPerChannel; /* Unit : TU. 200~10000 */ USHORT Dot11OBssScanActiveTotalPerChannel; /* Unit : TU. 20~10000 */ USHORT Dot11BssWidthChanTranDelayFactor; USHORT Dot11OBssScanActivityThre; /* Unit : percentage */ ULONG Dot11BssWidthChanTranDelay; /* multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor) */ ULONG CountDownCtr; /* CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor) */ BSS_2040_COEXIST_IE LastBSSCoexist2040; BSS_2040_COEXIST_IE BSSCoexist2040; TRIGGER_EVENT_TAB TriggerEventTab; UCHAR ChannelListIdx; BOOLEAN bOverlapScanning; BOOLEAN bBssCoexNotify; #endif /* DOT11N_DRAFT3 */ BOOLEAN bHTProtect; BOOLEAN bMIMOPSEnable; BOOLEAN bBADecline; BOOLEAN bDisableReordering; BOOLEAN bForty_Mhz_Intolerant; BOOLEAN bExtChannelSwitchAnnouncement; BOOLEAN bRcvBSSWidthTriggerEvents; ULONG LastRcvBSSWidthTriggerEventsTime; UCHAR TxBASize; BOOLEAN bRalinkBurstMode; UINT32 RestoreBurstMode; #endif /* DOT11_N_SUPPORT */ #ifdef DOT11_VHT_AC UINT32 cfg_vht; VHT_CAP_INFO vht_info; #endif /* DOT11_VHT_AC */ #ifdef SYSTEM_LOG_SUPPORT /* Enable wireless event */ BOOLEAN bWirelessEvent; #endif /* SYSTEM_LOG_SUPPORT */ BOOLEAN bWiFiTest; /* Enable this parameter for WiFi test */ /* Tx & Rx Stream number selection */ UCHAR TxStream; UCHAR RxStream; /* transmit phy mode, trasmit rate for Multicast. */ #ifdef MCAST_RATE_SPECIFIC UCHAR McastTransmitMcs; UCHAR McastTransmitPhyMode; #endif /* MCAST_RATE_SPECIFIC */ BOOLEAN bHardwareRadio; /* Hardware controlled Radio enabled */ #ifdef RTMP_MAC_USB BOOLEAN bMultipleIRP; /* Multiple Bulk IN flag */ UCHAR NumOfBulkInIRP; /* if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 */ RT_HT_CAPABILITY SupportedHtPhy; ULONG MaxPktOneTxBulk; UCHAR TxBulkFactor; UCHAR RxBulkFactor; BOOLEAN IsUpdateBeacon; BEACON_SYNC_STRUCT *pBeaconSync; RALINK_TIMER_STRUCT BeaconUpdateTimer; UINT32 BeaconAdjust; UINT32 BeaconFactor; UINT32 BeaconRemain; #endif /* RTMP_MAC_USB */ #ifdef WSC_INCLUDED /* WSC hardware push button function 0811 */ UINT8 WscHdrPshBtnCheckCount; #endif /* WSC_INCLUDED */ NDIS_SPIN_LOCK MeasureReqTabLock; PMEASURE_REQ_TAB pMeasureReqTab; NDIS_SPIN_LOCK TpcReqTabLock; PTPC_REQ_TAB pTpcReqTab; /* transmit phy mode, trasmit rate for Multicast. */ #ifdef MCAST_RATE_SPECIFIC HTTRANSMIT_SETTING MCastPhyMode; #endif /* MCAST_RATE_SPECIFIC */ #ifdef SINGLE_SKU UINT16 DefineMaxTxPwr; BOOLEAN bSKUMode; UINT16 AntGain; UINT16 BandedgeDelta; UINT16 ModuleTxpower; #endif /* SINGLE_SKU */ #ifdef WAPI_SUPPORT COMMON_WAPI_INFO comm_wapi_info; /* rekey related parameter */ /* USK update parameter */ UINT8 wapi_usk_rekey_method; /* 0:disable , 1:time, 2:packet */ UINT32 wapi_usk_rekey_threshold; /* the rekey threshold */ /* MSK update parameter */ UINT8 wapi_msk_rekey_method; /* 0:disable , 1:time, 2:packet */ UINT32 wapi_msk_rekey_threshold; /* the rekey threshold */ UINT32 wapi_msk_rekey_cnt; RALINK_TIMER_STRUCT WapiMskRekeyTimer; UCHAR WapiMskRekeyTimerRunning; #endif /* WAPI_SUPPORT */ BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */ BOOLEAN HT_Disable; /* 1: disable HT function; 0: enable HT function */ #ifdef PRE_ANT_SWITCH BOOLEAN PreAntSwitch; /* Preamble Antenna Switch */ SHORT PreAntSwitchRSSI; /* Preamble Antenna Switch RSSI threshold */ SHORT PreAntSwitchTimeout; /* Preamble Antenna Switch timeout in seconds */ #endif /* PRE_ANT_SWITCH */ #ifdef CFO_TRACK SHORT CFOTrack; /* CFO Tracking. 0=>use default, 1=>track, 2-7=> track 8-n times, 8=>done tracking */ #endif /* CFO_TRACK */ #ifdef NEW_RATE_ADAPT_SUPPORT USHORT lowTrafficThrd; /* Threshold for reverting to default MCS when traffic is low */ BOOLEAN TrainUpRule; /* QuickDRS train up criterion: 0=>Throughput, 1=>PER, 2=> Throughput & PER */ SHORT TrainUpRuleRSSI; /* If TrainUpRule=2 then use Hybrid rule when RSSI < TrainUpRuleRSSI */ USHORT TrainUpLowThrd; /* QuickDRS Hybrid train up low threshold */ USHORT TrainUpHighThrd; /* QuickDRS Hybrid train up high threshold */ #endif /* NEW_RATE_ADAPT_SUPPORT */ #ifdef STREAM_MODE_SUPPORT #define STREAM_MODE_STA_NUM 4 UCHAR StreamMode; /* 0=disabled, 1=enable for 1SS, 2=enable for 2SS, 3=enable for 1,2SS */ UCHAR StreamModeMac[STREAM_MODE_STA_NUM][MAC_ADDR_LEN]; UINT16 StreamModeMCS; /* Bit map for enabling Stream Mode based on MCS */ #endif /* STREAM_MODE_SUPPORT */ #ifdef DOT11_N_SUPPORT #ifdef TXBF_SUPPORT ULONG ITxBfTimeout; ULONG ETxBfTimeout; ULONG ETxBfEnCond; /* Enable sending of sounding and beamforming */ BOOLEAN ETxBfNoncompress; /* Force non-compressed Sounding Response */ BOOLEAN ETxBfIncapable; /* Report Incapable of BF in TX BF Capabilities */ #endif /* TXBF_SUPPORT */ #endif /* DOT11_N_SUPPORT */ #ifdef DBG_CTRL_SUPPORT ULONG DebugFlags; /* Temporary debug flags */ #endif /* DBG_CTRL_SUPPORT */ #ifdef WSC_INCLUDED BOOLEAN WscPBCOverlap; WSC_STA_PBC_PROBE_INFO WscStaPbcProbeInfo; #endif /* WSC_INCLUDED */ #ifdef MICROWAVE_OVEN_SUPPORT MO_CFG_STRUCT MO_Cfg; /* data structure for mitigating microwave interference */ #endif /* MICROWAVE_OVEN_SUPPORT */ } COMMON_CONFIG, *PCOMMON_CONFIG; #ifdef DBG_CTRL_SUPPORT /* DebugFlag definitions */ #define DBF_NO_BF_AWARE_RA 0x0001 /* Revert to older Rate Adaptation that is not BF aware */ #define DBF_SHOW_BF_STATS 0x0002 /* Display BF statistics in AP "iwpriv stat" display */ #define DBF_NO_TXBF_3SS 0x0004 /* Disable TXBF for MCS > 20 */ #define DBF_UNUSED0008 0x0008 /* Unused */ #define DBF_DBQ_RA_LOG 0x0010 /* Log RA information in DBQ */ #define DBF_INIT_MCS_MARGIN 0x0020 /* Use 6 dB margin when selecting initial MCS */ #define DBF_INIT_MCS_DIS1 0x0040 /* Disable highest MCSs when selecting initial MCS */ #define DBF_FORCE_QUICK_DRS 0x0080 /* Force Quick DRS even if rate didn't change */ #define DBF_FORCE_SGI 0x0100 /* Force Short GI */ #define DBF_DBQ_NO_BCN 0x0200 /* Disable logging of RX Beacon frames */ #define DBF_LOG_VCO_CAL 0x0400 /* Log VCO cal */ #define DBF_DISABLE_CAL 0x0800 /* Disable Divider Calibration at channel change */ #ifdef INCLUDE_DEBUG_QUEUE #define DBF_DBQ_TXFIFO 0x1000 /* Enable logging of TX information from FIFO */ #define DBF_DBQ_TXFRAME 0x2000 /* Enable logging of Frames queued for TX */ #define DBF_DBQ_RXWI_FULL 0x4000 /* Enable logging of full RXWI */ #define DBF_DBQ_RXWI 0x8000 /* Enable logging of partial RXWI */ #endif /* INCLUDE_DEBUG_QUEUE */ #define DBF_SHOW_RA_LOG 0x010000 /* Display concise Rate Adaptation information */ #define DBF_SHOW_ZERO_RA_LOG 0x020000 /* Include RA Log entries when TxCount is 0 */ #define DBF_FORCE_20MHZ 0x040000 /* Force 20 MHz TX */ #define DBF_FORCE_40MHZ 0x080000 /* Force 40 MHz Tx */ #define DBF_DISABLE_CCK 0x100000 /* Disable CCK */ #define DBF_UNUSED200000 0x200000 /* Unused */ #define DBF_ENABLE_HT_DUP 0x400000 /* Allow HT Duplicate mode in TX rate table */ #define DBF_ENABLE_CCK_5G 0x800000 /* Enable CCK rates in 5G band */ #define DBF_UNUSED0100000 0x0100000 /* Unused */ #define DBF_ENABLE_20MHZ_MCS8 0x02000000 /* Substitute 20MHz MCS8 for 40MHz MCS8 */ #define DBF_DISABLE_20MHZ_MCS0 0x04000000 /* Disable substitution of 20MHz MCS0 for 40MHz MCS32 */ #define DBF_DISABLE_20MHZ_MCS1 0x08000000 /* Disable substitution of 20MHz MCS1 for 40MHz MCS0 */ #endif /* DBG_CTRL_SUPPORT */ #ifdef CONFIG_AP_SUPPORT /*************************************************************************** * AP related data structures **************************************************************************/ /* AUTH-RSP State Machine Aux data structure */ typedef struct _AP_MLME_AUX { UCHAR Addr[MAC_ADDR_LEN]; USHORT Alg; CHAR Challenge[CIPHER_TEXT_LEN]; } AP_MLME_AUX, *PAP_MLME_AUX; typedef enum _MAC_ENTRY_OP_MODE_ { ENTRY_OP_MODE_ERROR = 0x00, ENTRY_OP_MODE_CLI = 0x01, /* Sta mode, set this TRUE after Linkup,too. */ ENTRY_OP_MODE_WDS = 0x02, /* This is WDS Entry. only for AP mode. */ ENTRY_OP_MODE_APCLI = 0x04, /* This is a AP-Client entry, only for AP mode which enable AP-Client functions. */ ENTRY_OP_MODE_MESH = 0x08, /* Peer conect with us via mesh. */ ENTRY_OP_MODE_DLS = 0x10, /* This is DLS Entry. only for STA mode. */ ENTRY_OP_MODE_MAX = 0x20 } MAC_ENTRY_OP_MODE; #endif /* CONFIG_AP_SUPPORT */ /* Values of LastSecTxRateChangeAction */ #define RATE_NO_CHANGE 0 /* No change in rate */ #define RATE_UP 1 /* Trying higher rate or same rate with different BF */ #define RATE_DOWN 2 /* Trying lower rate */ typedef struct _MAC_TABLE_ENTRY { /* 0:Invalid, Bit 0: AsCli, Bit 1: AsWds, Bit 2: AsAPCLI, Bit 3: AsMesh, Bit 4: AsDls, Bit 5: AsTDls */ UINT32 EntryType; BOOLEAN isCached; BOOLEAN bIAmBadAtheros; /* Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection. */ /* WPA/WPA2 4-way database */ UCHAR EnqueueEapolStartTimerRunning; /* Enqueue EAPoL-Start for triggering EAP SM */ RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; /* A timer which enqueue EAPoL-Start for triggering PSK SM */ /*jan for wpa */ /* record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB */ UCHAR CMTimerRunning; UCHAR apidx; /* MBSS number */ UCHAR RSNIE_Len; UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; UCHAR ANonce[LEN_KEY_DESC_NONCE]; UCHAR SNonce[LEN_KEY_DESC_NONCE]; UCHAR R_Counter[LEN_KEY_DESC_REPLAY]; UCHAR PTK[64]; UCHAR ReTryCounter; RALINK_TIMER_STRUCT RetryTimer; #ifdef TXBF_SUPPORT RALINK_TIMER_STRUCT eTxBfProbeTimer; #endif /* TXBF_SUPPORT */ NDIS_802_11_AUTHENTICATION_MODE AuthMode; /* This should match to whatever microsoft defined */ NDIS_802_11_WEP_STATUS WepStatus; NDIS_802_11_WEP_STATUS GroupKeyWepStatus; UINT8 WpaState; UINT8 GTKState; USHORT PortSecured; NDIS_802_11_PRIVACY_FILTER PrivacyFilter; /* PrivacyFilter enum for 802.1X */ CIPHER_KEY PairwiseKey; PVOID pAd; INT PMKID_CacheIdx; UCHAR PMKID[LEN_PMKID]; UCHAR NegotiatedAKM[LEN_OUI_SUITE]; /* It indicate the negotiated AKM suite */ #ifdef WAPI_SUPPORT UCHAR usk_id; /* unicast key index for WPI */ #endif /* WAPI_SUPPORT */ UCHAR Addr[MAC_ADDR_LEN]; UCHAR HdrAddr1[MAC_ADDR_LEN]; UCHAR HdrAddr2[MAC_ADDR_LEN]; UCHAR HdrAddr3[MAC_ADDR_LEN]; UCHAR PsMode; UCHAR FlgPsModeIsWakeForAWhile; /* wake up for a while until a condition */ UCHAR VirtualTimeout; /* peer power save virtual timeout */ SST Sst; AUTH_STATE AuthState; /* for SHARED KEY authentication state machine used only */ BOOLEAN IsReassocSta; /* Indicate whether this is a reassociation procedure */ USHORT Aid; USHORT CapabilityInfo; UCHAR LastRssi; ULONG NoDataIdleCount; UINT16 StationKeepAliveCount; /* unit: second */ ULONG PsQIdleCount; QUEUE_HEADER PsQueue; UINT32 StaConnectTime; /* the live time of this station since associated with AP */ UINT32 StaIdleTimeout; /* idle timeout per entry */ #ifdef UAPSD_SUPPORT /* these UAPSD states are used on the fly */ /* 0:AC_BK, 1:AC_BE, 2:AC_VI, 3:AC_VO */ BOOLEAN bAPSDCapablePerAC[4]; /* for trigger-enabled */ BOOLEAN bAPSDDeliverEnabledPerAC[4]; /* for delivery-enabled */ UCHAR MaxSPLength; BOOLEAN bAPSDAllAC; /* 1: all AC are delivery-enabled U-APSD */ QUEUE_HEADER UAPSDQueue[WMM_NUM_OF_AC]; /* queue for each U-APSD */ USHORT UAPSDQIdleCount; /* U-APSD queue timeout */ PQUEUE_ENTRY pUAPSDEOSPFrame; /* the last U-APSD frame */ USHORT UAPSDTxNum; /* total U-APSD frame number */ BOOLEAN bAPSDFlagEOSPOK; /* 1: EOSP frame is tx by ASIC */ BOOLEAN bAPSDFlagSPStart; /* 1: SP is started */ /* need to use unsigned long, because time parameters in OS is defined as unsigned long */ unsigned long UAPSDTimeStampLast; /* unit: 1000000/OS_HZ */ BOOLEAN bAPSDFlagSpRoughUse; /* 1: use rough SP (default: accurate) */ /* we will set the flag when PS-poll frame is received and clear it when statistics handle. if the flag is set when PS-poll frame is received then calling statistics handler to clear it. */ BOOLEAN bAPSDFlagLegacySent; /* 1: Legacy PS sent but yet statistics handle */ #ifdef RTMP_MAC_USB UINT32 UAPSDTagOffset[WMM_NUM_OF_AC]; #endif /* RTMP_MAC_USB */ #endif /* UAPSD_SUPPORT */ #ifdef DOT11_N_SUPPORT BOOLEAN bSendBAR; USHORT NoBADataCountDown; UINT32 CachedBuf[16]; /* UINT (4 bytes) for alignment */ #ifdef TXBF_SUPPORT COUNTER_TXBF TxBFCounters; /* TxBF Statistics */ UINT LastETxCount; /* Used to compute %BF statistics */ UINT LastITxCount; UINT LastTxCount; #endif /* TXBF_SUPPORT */ #endif /* DOT11_N_SUPPORT */ #ifdef STREAM_MODE_SUPPORT UINT32 StreamModeMACReg; /* MAC reg used to control stream mode for this client. 0=>No stream mode */ #endif // STREAM_MODE_SUPPORT // UINT FIFOCount; UINT DebugFIFOCount; UINT DebugTxCount; BOOLEAN bDlsInit; /*==================================================== */ /*WDS entry needs these */ /* If ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab */ UINT MatchWDSTabIdx; UCHAR MaxSupportedRate; UCHAR CurrTxRate; UCHAR CurrTxRateIndex; UCHAR lastRateIdx; UCHAR *pTable; /* Pointer to this entry's Tx Rate Table */ #ifdef NEW_RATE_ADAPT_SUPPORT UCHAR lowTrafficCount; UCHAR fewPktsCnt; BOOLEAN perThrdAdj; UCHAR mcsGroup;/*the mcs group to be tried */ #endif /* NEW_RATE_ADAPT_SUPPORT */ enum RATE_ADAPT_ALG rateAlg; #ifdef MFB_SUPPORT UCHAR lastLegalMfb; /*last legal mfb which is used to set rate */ BOOLEAN isMfbChanged; /*purpose: true when mfb has changed but the new mfb is not adopted for Tx */ struct _RTMP_RA_LEGACY_TB *LegalMfbRS; BOOLEAN fLastChangeAccordingMfb; NDIS_SPIN_LOCK fLastChangeAccordingMfbLock; /*Tx MRQ */ BOOLEAN toTxMrq; UCHAR msiToTx, mrqCnt; /*mrqCnt is used to count down the inverted-BF mrq to be sent */ /*Rx mfb */ UCHAR pendingMfsi; /*Tx MFB */ BOOLEAN toTxMfb; UCHAR mfbToTx; UCHAR mfb0, mfb1; #endif /* MFB_SUPPORT */ #ifdef TXBF_SUPPORT UCHAR TxSndgType; NDIS_SPIN_LOCK TxSndgLock; /* ETxBF */ UCHAR bfState; UCHAR sndgMcs; UCHAR sndgBW; INT sndg0Snr0, sndg0Snr1, sndg0Snr2; UCHAR sndg0Mcs; #ifdef ETXBF_EN_COND3_SUPPORT UCHAR bestMethod; UCHAR sndgRateIdx; UCHAR bf0Mcs, sndg0RateIdx, bf0RateIdx; UCHAR sndg1Mcs, bf1Mcs, sndg1RateIdx, bf1RateIdx; INT sndg1Snr0, sndg1Snr1, sndg1Snr2; #endif /* ETXBF_EN_COND3_SUPPORT */ UCHAR noSndgCnt; UCHAR eTxBfEnCond; UCHAR noSndgCntThrd, ndpSndgStreams; UCHAR iTxBfEn; BOOLEAN phyETxBf; /* True=>Set ETxBF bit in PHY rate */ BOOLEAN phyITxBf; /* True=>Set ITxBF bit in PHY rate */ UCHAR lastNonBfRate; /* Last good non-BF rate */ BOOLEAN lastRatePhyTxBf; /* For Quick Check. True if last rate was BF */ USHORT BfTxQuality[MAX_TX_RATE_INDEX + 1]; /* Beamformed TX Quality */ #endif /* TXBF_SUPPORT */ /* to record the each TX rate's quality. 0 is best, the bigger the worse. */ USHORT TxQuality[MAX_TX_RATE_INDEX + 1]; UINT32 OneSecTxNoRetryOkCount; UINT32 OneSecTxRetryOkCount; UINT32 OneSecTxFailCount; UINT32 OneSecRxLGICount; /* unicast-to-me Long GI count */ UINT32 OneSecRxSGICount; /* unicast-to-me Short GI count */ #ifdef FIFO_EXT_SUPPORT UINT32 fifoTxSucCnt; UINT32 fifoTxRtyCnt; #endif /* FIFO_EXT_SUPPORT */ BOOLEAN fLastSecAccordingRSSI; UCHAR LastSecTxRateChangeAction; /* 0: no change, 1:rate UP, 2:rate down */ CHAR LastTimeTxRateChangeAction; /*Keep last time value of LastSecTxRateChangeAction */ ULONG LastTxOkCount; /* TxSuccess count in last Rate Adaptation interval */ UCHAR LastTxPER; /* Tx PER in last Rate Adaptation interval */ UCHAR PER[MAX_TX_RATE_INDEX + 1]; UINT32 ContinueTxFailCnt; UINT32 CurrTxRateStableTime; /* # of second in current TX rate */ UCHAR TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ #ifdef WDS_SUPPORT BOOLEAN LockEntryTx; /* TRUE = block to WDS Entry traffic, FALSE = not. */ #endif /* WDS_SUPPORT */ ULONG TimeStamp_toTxRing; /*==================================================== */ #ifdef CONFIG_AP_SUPPORT #ifdef APCLI_SUPPORT UINT MatchAPCLITabIdx; /* indicate the index in ApCfg.ApCliTab. */ #endif /* APCLI_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ /* A bitmap of BOOLEAN flags. each bit represent an operation status of a particular BOOLEAN control, either ON or OFF. These flags should always be accessed via CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros. see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED */ ULONG ClientStatusFlags; HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; /* For transmit phy setting in TXWI. */ #ifdef DOT11_N_SUPPORT /* HT EWC MIMO-N used parameters */ USHORT RXBAbitmap; /* fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format */ USHORT TXBAbitmap; /* This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI */ USHORT TXAutoBAbitmap; USHORT BADeclineBitmap; USHORT BARecWcidArray[NUM_OF_TID]; /* The mapping wcid of recipient session. if RXBAbitmap bit is masked */ USHORT BAOriWcidArray[NUM_OF_TID]; /* The mapping wcid of originator session. if TXBAbitmap bit is masked */ USHORT BAOriSequence[NUM_OF_TID]; /* The mapping wcid of originator session. if TXBAbitmap bit is masked */ /* 802.11n features. */ UCHAR MpduDensity; UCHAR MaxRAmpduFactor; UCHAR AMsduSize; UCHAR MmpsMode; /* MIMO power save more. */ HT_CAPABILITY_IE HTCapability; #ifdef DOT11N_DRAFT3 UCHAR BSS2040CoexistenceMgmtSupport; BOOLEAN bForty_Mhz_Intolerant; #endif /* DOT11N_DRAFT3 */ #ifdef DOT11_VHT_AC VHT_CAP_IE vht_cap_ie; #endif /* DOT11_VHT_AC */ #endif /* DOT11_N_SUPPORT */ BOOLEAN bAutoTxRateSwitch; UCHAR RateLen; struct _MAC_TABLE_ENTRY *pNext; USHORT TxSeq[NUM_OF_TID]; USHORT NonQosDataSeq; RSSI_SAMPLE RssiSample; UINT32 LastRxRate; SHORT freqOffset; /* Last RXWI FOFFSET */ SHORT freqOffsetValid; /* Set when freqOffset field has been updated */ BOOLEAN bWscCapable; UCHAR Receive_EapolStart_EapRspId; UINT32 TXMCSExpected[MAX_MCS_SET]; UINT32 TXMCSSuccessful[MAX_MCS_SET]; UINT32 TXMCSFailed[MAX_MCS_SET]; UINT32 TXMCSAutoFallBack[MAX_MCS_SET][MAX_MCS_SET]; #ifdef WAPI_SUPPORT BOOLEAN WapiUskRekeyTimerRunning; RALINK_TIMER_STRUCT WapiUskRekeyTimer; UINT32 wapi_usk_rekey_cnt; #endif /* WAPI_SUPPORT */ ULONG AssocDeadLine; ULONG ChannelQuality; /* 0..100, Channel Quality Indication for Roaming */ #ifdef CONFIG_AP_SUPPORT MULTISSID_STRUCT *pMbss; #endif /* CONFIG_AP_SUPPORT */ #ifdef VENDOR_FEATURE1_SUPPORT /* total 128B, use UINT32 to avoid alignment problem */ UINT32 HeaderBuf[32]; /* (total 128B) TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP */ UCHAR HdrPadLen; /* recording Header Padding Length; */ UCHAR MpduHeaderLen; UINT16 Protocol; #endif /* VENDOR_FEATURE1_SUPPORT */ #ifdef AGS_SUPPORT AGS_CONTROL AGSCtrl; /* AGS control */ #endif /* AGS_SUPPORT */ #ifdef CONFIG_AP_SUPPORT LARGE_INTEGER TxPackets; LARGE_INTEGER RxPackets; ULONG TxBytes; ULONG RxBytes; #endif /* CONFIG_AP_SUPPORT */ #ifdef WFD_SUPPORT BOOLEAN bWfdClient; #endif /* WFD_SUPPORT */ UCHAR SupportRateMode; /* 1: CCK 2:OFDM 4: HT, 8:VHT */ BOOLEAN SupportCCKMCS[MAX_LEN_OF_CCK_RATES]; BOOLEAN SupportOFDMMCS[MAX_LEN_OF_OFDM_RATES]; BOOLEAN SupportHTMCS[MAX_LEN_OF_HT_RATES]; #ifdef DOT11_VHT_AC BOOLEAN SupportVHTMCS[MAX_LEN_OF_VHT_RATES]; #endif /* DOT11_VHT_AC */ #ifdef CONFIG_MULTI_CHANNEL BOOLEAN bDoRateTune; #endif /* CONFIG_MULTI_CHANNEL */ } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY; typedef struct _MAC_TABLE { MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE]; MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE]; USHORT Size; QUEUE_HEADER McastPsQueue; ULONG PsQIdleCount; BOOLEAN fAnyStationInPsm; BOOLEAN fAnyStationBadAtheros; /* Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. */ BOOLEAN fAnyTxOPForceDisable; /* Check if it is necessary to disable BE TxOP */ BOOLEAN fAllStationAsRalink; /* Check if all stations are ralink-chipset */ #ifdef DOT11_N_SUPPORT BOOLEAN fAnyStationIsLegacy; /* Check if I use legacy rate to transmit to my BSS Station/ */ BOOLEAN fAnyStationNonGF; /* Check if any Station can't support GF. */ BOOLEAN fAnyStation20Only; /* Check if any Station can't support GF. */ BOOLEAN fAnyStationMIMOPSDynamic; /* Check if any Station is MIMO Dynamic */ BOOLEAN fAnyBASession; /* Check if there is BA session. Force turn on RTS/CTS */ BOOLEAN fAnyStaFortyIntolerant; /* Check if still has any station set the Intolerant bit on! */ BOOLEAN fAllStationGainGoodMCS; /* Check if all stations more than MCS threshold */ #ifdef CONFIG_AP_SUPPORT BOOLEAN fAnyStationIsHT; /* Check if there is 11n STA. Force turn off AP MIMO PS */ #endif /* CONFIG_AP_SUPPORT */ #endif /* DOT11_N_SUPPORT */ USHORT MsduLifeTime; /* life time for PS packet */ #ifdef WAPI_SUPPORT BOOLEAN fAnyWapiStation; #endif /* WAPI_SUPPORT */ } MAC_TABLE, *PMAC_TABLE; /*************************************************************************** * AP WDS related data structures **************************************************************************/ //#ifdef WDS_SUPPORT typedef struct _WDS_COUNTER { LARGE_INTEGER ReceivedFragmentCount; LARGE_INTEGER TransmittedFragmentCount; ULONG ReceivedByteCount; ULONG TransmittedByteCount; ULONG RxErrors; ULONG TxErrors; LARGE_INTEGER MulticastReceivedFrameCount; ULONG OneCollision; ULONG MoreCollisions; ULONG RxNoBuffer; ULONG RcvAlignmentErrors; } WDS_COUNTER, *PWDS_COUNTER; typedef struct _WDS_ENTRY { BOOLEAN Valid; UCHAR Addr[MAC_ADDR_LEN]; ULONG NoDataIdleCount; struct _WDS_ENTRY *pNext; } WDS_ENTRY, *PWDS_ENTRY; typedef struct _WDS_TABLE_ENTRY { USHORT Size; UCHAR WdsAddr[MAC_ADDR_LEN]; WDS_ENTRY *Hash[HASH_TABLE_SIZE]; WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE]; UCHAR MaxSupportedRate; UCHAR CurrTxRate; USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES]; USHORT OneSecTxOkCount; USHORT OneSecTxRetryOkCount; USHORT OneSecTxFailCount; ULONG CurrTxRateStableTime; /* # of second in current TX rate */ UCHAR TxRateUpPenalty; /* extra # of second penalty due to last unstable condition */ } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY; typedef struct _RT_802_11_WDS_ENTRY { struct wifi_dev wdev; PNET_DEV dev; UCHAR Valid; UCHAR PhyMode; UCHAR PeerWdsAddr[MAC_ADDR_LEN]; UCHAR MacTabMatchWCID; /* ASIC */ NDIS_802_11_WEP_STATUS WepStatus; UCHAR KeyIdx; CIPHER_KEY WdsKey; HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; RT_PHY_INFO DesiredHtPhyInfo; BOOLEAN bAutoTxRateSwitch; DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; /* Desired transmit setting. */ WDS_COUNTER WdsCounter; #ifdef WDS_VLAN_SUPPORT /* VLAN */ USHORT VLAN_VID; USHORT VLAN_Priority; #endif /* WDS_VLAN_SUPPORT */ } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY; typedef struct _WDS_TABLE { UCHAR Mode; ULONG Size; RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY]; } WDS_TABLE, *PWDS_TABLE; //#endif /* WDS_SUPPORT */ #ifdef CONFIG_AP_SUPPORT /*************************************************************************** * AP APCLI related data structures **************************************************************************/ typedef struct _APCLI_STRUCT { struct wifi_dev wdev; PNET_DEV dev; #ifdef RTL865X_SOC unsigned int mylinkid; #endif BOOLEAN Enable; /* Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable" */ BOOLEAN Valid; /* Set it as 1 if the apcli interface associated success to remote AP. */ UCHAR MacTabWCID; /*WCID value, which point to the entry of ASIC Mac table. */ UCHAR SsidLen; CHAR Ssid[MAX_LEN_OF_SSID]; UCHAR CfgSsidLen; CHAR CfgSsid[MAX_LEN_OF_SSID]; UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS]; UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS]; ULONG ApCliRcvBeaconTime; ULONG ApCliLinkUpTime; USHORT ApCliBeaconPeriod; ULONG CtrlCurrState; ULONG SyncCurrState; ULONG AuthCurrState; ULONG AssocCurrState; ULONG WpaPskCurrState; USHORT AuthReqCnt; USHORT AssocReqCnt; ULONG ClientStatusFlags; UCHAR MpduDensity; NDIS_802_11_AUTHENTICATION_MODE AuthMode; /* This should match to whatever microsoft defined */ NDIS_802_11_WEP_STATUS WepStatus; /* Add to support different cipher suite for WPA2/WPA mode */ NDIS_802_11_ENCRYPTION_STATUS GroupCipher; /* Multicast cipher suite */ NDIS_802_11_ENCRYPTION_STATUS PairCipher; /* Unicast cipher suite */ BOOLEAN bMixCipher; /* Indicate current Pair & Group use different cipher suites */ USHORT RsnCapability; UCHAR PSK[100]; /* reserve PSK key material */ UCHAR PSKLen; UCHAR PMK[32]; /* WPA PSK mode PMK */ /*UCHAR PTK[64]; // WPA PSK mode PTK */ UCHAR GTK[32]; /* GTK from authenticator */ /*CIPHER_KEY PairwiseKey; */ CIPHER_KEY SharedKey[SHARE_KEY_NUM]; UCHAR DefaultKeyId; /* WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED */ /*UCHAR PortSecured; */ /* store RSN_IE built by driver */ UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; /* The content saved here should be convert to little-endian format. */ UCHAR RSNIE_Len; /* For WPA countermeasures */ ULONG LastMicErrorTime; /* record last MIC error time */ /*ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation). */ BOOLEAN bBlockAssoc; /* Block associate attempt for 60 seconds after counter measure occurred. */ /* For WPA-PSK supplicant state */ /*WPA_STATE WpaState; // Default is SS_NOTUSE */ /*UCHAR ReplayCounter[8]; */ /*UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator */ UCHAR SNonce[32]; /* SNonce for WPA-PSK */ UCHAR GNonce[32]; /* GNonce for WPA-PSK from authenticator */ #ifdef WSC_AP_SUPPORT WSC_CTRL WscControl; #endif /* WSC_AP_SUPPORT */ HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode; RT_PHY_INFO DesiredHtPhyInfo; BOOLEAN bAutoTxRateSwitch; DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; /* Desired transmit setting. */ UCHAR RxMcsSet[16]; #ifdef APCLI_WPA_SUPPLICANT_SUPPORT BOOLEAN IEEE8021X; BOOLEAN IEEE8021x_required_keys; CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys UCHAR DesireSharedKeyId; UCHAR WpaSupplicantUP; UCHAR WpaSupplicantScanCount; BOOLEAN bRSN_IE_FromWpaSupplicant; BOOLEAN bLostAp; UCHAR *pWpsProbeReqIe; UINT WpsProbeReqIeLen; UCHAR *pWpaAssocIe; UINT WpaAssocIeLen; BOOLEAN bScanReqIsFromWebUI; BSSID_INFO SavedPMK[PMKID_NO]; UINT SavedPMKNum; // Saved PMKID number BOOLEAN bConfigChanged; NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; USHORT ReqVarIELen; // Length of next VIE include EID & Length UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format. USHORT ResVarIELen; // Length of next VIE include EID & Length UCHAR ResVarIEs[MAX_VIE_LEN]; UCHAR LastSsidLen; // the actual ssid length in used CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated UCHAR LastBssid[MAC_ADDR_LEN]; #endif/*APCLI_WPA_SUPPLICANT_SUPPORT*/ PSPOLL_FRAME PsPollFrame; HEADER_802_11 NullFrame; UAPSD_INFO UapsdInfo; } APCLI_STRUCT, *PAPCLI_STRUCT; typedef struct _AP_ADMIN_CONFIG { USHORT CapabilityInfo; /* Multiple SSID */ UCHAR BssidNum; UCHAR MacMask; MULTISSID_STRUCT MBSSID[HW_BEACON_MAX_NUM]; ULONG IsolateInterStaTrafficBTNBSSID; #ifdef APCLI_SUPPORT UCHAR ApCliInfRunned; /* Number of ApClient interface which was running. value from 0 to MAX_APCLI_INTERFACE */ BOOLEAN FlgApCliIsUapsdInfoUpdated; APCLI_STRUCT ApCliTab[MAX_APCLI_NUM]; /*AP-client */ #endif /* APCLI_SUPPORT */ /* for wpa */ RALINK_TIMER_STRUCT CounterMeasureTimer; UCHAR CMTimerRunning; UCHAR BANClass3Data; LARGE_INTEGER aMICFailTime; LARGE_INTEGER PrevaMICFailTime; ULONG MICFailureCounter; RSSI_SAMPLE RssiSample; ULONG NumOfAvgRssiSample; BOOLEAN bAutoChannelAtBootup; /* 0: disable, 1: enable */ ChannelSel_Alg AutoChannelAlg; /* Alg for selecting Channel */ BOOLEAN bAvoidDfsChannel; /* 0: disable, 1: enable */ BOOLEAN bIsolateInterStaTraffic; BOOLEAN bHideSsid; /* temporary latch for Auto channel selection */ ULONG ApCnt; /* max RSSI during Auto Channel Selection period */ UCHAR AutoChannel_Channel; /* channel number during Auto Channel Selection */ UCHAR current_channel_index; /* current index of channel list */ UCHAR AutoChannelSkipListNum; /* number of rejected channel list */ UCHAR AutoChannelSkipList[10]; UCHAR DtimCount; /* 0.. DtimPeriod-1 */ UCHAR DtimPeriod; /* default = 3 */ UCHAR ErpIeContent; ULONG LastOLBCDetectTime; ULONG LastNoneHTOLBCDetectTime; ULONG LastScanTime; /* Record last scan time for issue BSSID_SCAN_LIST */ UCHAR LastSNR0; /* last received BEACON's SNR */ UCHAR LastSNR1; /* last received BEACON's SNR for 2nd antenna */ #ifdef DOT11N_SS3_SUPPORT UCHAR LastSNR2; /* last received BEACON's SNR for 2nd antenna */ #endif /* DOT11N_SS3_SUPPORT */ #ifdef DOT1X_SUPPORT /* dot1x related parameter */ UINT32 own_ip_addr; UINT32 retry_interval; UINT32 session_timeout_interval; UINT32 quiet_interval; UCHAR EAPifname[HW_BEACON_MAX_NUM][IFNAMSIZ]; /* indicate as the binding interface for EAP negotiation. */ UCHAR EAPifname_len[HW_BEACON_MAX_NUM]; UCHAR PreAuthifname[HW_BEACON_MAX_NUM][IFNAMSIZ]; /* indicate as the binding interface for WPA2 Pre-authentication. */ UCHAR PreAuthifname_len[HW_BEACON_MAX_NUM]; #endif /* DOT1X_SUPPORT */ /* EDCA parameters to be announced to its local BSS */ EDCA_PARM BssEdcaParm; RALINK_TIMER_STRUCT ApQuickResponeForRateUpTimer; BOOLEAN ApQuickResponeForRateUpTimerRunning; #ifdef IDS_SUPPORT /* intrusion detection parameter */ BOOLEAN IdsEnable; UINT32 AuthFloodThreshold; /* Authentication frame flood threshold */ UINT32 AssocReqFloodThreshold; /* Association request frame flood threshold */ UINT32 ReassocReqFloodThreshold; /* Re-association request frame flood threshold */ UINT32 ProbeReqFloodThreshold; /* Probe request frame flood threshold */ UINT32 DisassocFloodThreshold; /* Disassociation frame flood threshold */ UINT32 DeauthFloodThreshold; /* Deauthentication frame flood threshold */ UINT32 EapReqFloodThreshold; /* EAP request frame flood threshold */ UINT32 RcvdAuthCount; UINT32 RcvdAssocReqCount; UINT32 RcvdReassocReqCount; UINT32 RcvdProbeReqCount; UINT32 RcvdDisassocCount; UINT32 RcvdDeauthCount; UINT32 RcvdEapReqCount; RALINK_TIMER_STRUCT IDSTimer; BOOLEAN IDSTimerRunning; #endif /* IDS_SUPPORT */ /* Indicate the maximum idle timeout */ UINT32 StaIdleTimeout; ULONG EntryLifeCheck; #ifdef IGMP_SNOOP_SUPPORT BOOLEAN IgmpSnoopEnable; /* 0: disable, 1: enable. */ #endif /* IGMP_SNOOP_SUPPORT */ #ifdef CLIENT_WDS NDIS_SPIN_LOCK CliWdsTabLock; PCLIWDS_PROXY_ENTRY pCliWdsEntryPool; LIST_HEADER CliWdsEntryFreeList; LIST_HEADER CliWdsProxyTab[CLIWDS_HASH_TAB_SIZE]; #endif /* CLIENT_WDS */ #ifdef DOT11_N_SUPPORT #ifdef GREENAP_SUPPORT UCHAR GreenAPLevel; BOOLEAN bGreenAPEnable; BOOLEAN bGreenAPActive; #endif /* GREENAP_SUPPORT */ ULONG MAX_PSDU_LEN; /* Maximum PSDU length */ #endif /* DOT11_N_SUPPORT */ UCHAR EntryClientCount; } AP_ADMIN_CONFIG, *PAP_ADMIN_CONFIG; #ifdef IGMP_SNOOP_SUPPORT typedef enum _IGMP_GROUP_TYPE { MODE_IS_INCLUDE = 1, MODE_IS_EXCLUDE, CHANGE_TO_INCLUDE_MODE, CHANGE_TO_EXCLUDE_MODE, ALLOW_NEW_SOURCES, BLOCK_OLD_SOURCES } IgmpGroupType; typedef enum _MULTICAST_FILTER_ENTRY_TYPE { MCAT_FILTER_STATIC = 0, MCAT_FILTER_DYNAMIC, } MulticastFilterEntryType; typedef struct _MEMBER_ENTRY { struct _MEMBER_ENTRY *pNext; UCHAR Addr[MAC_ADDR_LEN]; /* USHORT Aid; */ } MEMBER_ENTRY, *PMEMBER_ENTRY; typedef struct _MULTICAST_FILTER_TABLE_ENTRY { BOOLEAN Valid; MulticastFilterEntryType type; /* 0: static, 1: dynamic. */ UINT lastTime; PNET_DEV net_dev; UCHAR Addr[MAC_ADDR_LEN]; LIST_HEADER MemberList; struct _MULTICAST_FILTER_TABLE_ENTRY *pNext; } MULTICAST_FILTER_TABLE_ENTRY, *PMULTICAST_FILTER_TABLE_ENTRY; typedef struct _MULTICAST_FILTER_TABLE { UCHAR Size; PMULTICAST_FILTER_TABLE_ENTRY Hash[MAX_LEN_OF_MULTICAST_FILTER_HASH_TABLE]; MULTICAST_FILTER_TABLE_ENTRY Content[MAX_LEN_OF_MULTICAST_FILTER_TABLE]; NDIS_SPIN_LOCK MulticastFilterTabLock; NDIS_SPIN_LOCK FreeMemberPoolTabLock; MEMBER_ENTRY freeMemberPool[FREE_MEMBER_POOL_SIZE]; LIST_HEADER freeEntryList; } MULTICAST_FILTER_TABLE, *PMULTICAST_FILTER_TABLE; #endif /* IGMP_SNOOP_SUPPORT */ #ifdef DOT11_N_SUPPORT #ifdef GREENAP_SUPPORT typedef enum _RT_GREEN_AP_LEVEL { GREENAP_11BGN_STAS = 0, GREENAP_ONLY_11BG_STAS, GREENAP_WITHOUT_ANY_STAS_CONNECT } RT_GREEN_AP_LEVEL; #endif /* DOT11_N_SUPPORT */ #endif /* GREENAP_SUPPORT */ /* ----------- end of AP ---------------------------- */ #endif /* CONFIG_AP_SUPPORT */ #ifdef BLOCK_NET_IF typedef struct _BLOCK_QUEUE_ENTRY { BOOLEAN SwTxQueueBlockFlag; LIST_HEADER NetIfList; } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY; #endif /* BLOCK_NET_IF */ struct wificonf { BOOLEAN bShortGI; BOOLEAN bGreenField; }; typedef struct _RTMP_DEV_INFO_ { UCHAR chipName[16]; RTMP_INF_TYPE infType; } RTMP_DEV_INFO; #ifdef DBG_DIAGNOSE #define DIAGNOSE_TIME 10 /* 10 sec */ typedef struct _RtmpDiagStrcut_ { /* Diagnosis Related element */ unsigned char inited; unsigned char qIdx; unsigned char ArrayStartIdx; unsigned char ArrayCurIdx; /* Tx Related Count */ USHORT TxDataCnt[DIAGNOSE_TIME]; USHORT TxFailCnt[DIAGNOSE_TIME]; /* USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15 */ USHORT TxDescCnt[DIAGNOSE_TIME][24]; /* 3*3 // TxDesc queue length in scale of 0~14, >=15 */ /* USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1. */ USHORT TxMcsCnt[DIAGNOSE_TIME][MAX_MCS_SET]; /* 3*3 */ USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; /* TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8 */ USHORT TxAggCnt[DIAGNOSE_TIME]; USHORT TxNonAggCnt[DIAGNOSE_TIME]; /* USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1. */ USHORT TxAMPDUCnt[DIAGNOSE_TIME][MAX_MCS_SET]; /* 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1. */ USHORT TxRalinkCnt[DIAGNOSE_TIME]; /* TxRalink Aggregation Count in 1 sec scale. */ USHORT TxAMSDUCnt[DIAGNOSE_TIME]; /* TxAMSUD Aggregation Count in 1 sec scale. */ /* Rx Related Count */ USHORT RxDataCnt[DIAGNOSE_TIME]; /* Rx Total Data count. */ USHORT RxCrcErrCnt[DIAGNOSE_TIME]; /* USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1. */ USHORT RxMcsCnt[DIAGNOSE_TIME][MAX_MCS_SET]; /* 3*3 */ } RtmpDiagStruct; #endif /* DBG_DIAGNOSE */ #if defined(RTMP_INTERNAL_TX_ALC) || defined(RTMP_TEMPERATURE_COMPENSATION) /* The number of channels for per-channel Tx power offset */ #define NUM_OF_CH_FOR_PER_CH_TX_PWR_OFFSET 14 /* The Tx power control using the internal ALC */ typedef struct _TX_POWER_CONTROL { BOOLEAN bInternalTxALC; /* Internal Tx ALC */ BOOLEAN bExtendedTssiMode; /* The extended TSSI mode (each channel has different Tx power if needed) */ CHAR PerChTxPwrOffset[NUM_OF_CH_FOR_PER_CH_TX_PWR_OFFSET + 1]; /* Per-channel Tx power offset */ CHAR idxTxPowerTable; /* The index of the Tx power table for ant0 */ CHAR idxTxPowerTable2; /* The index of the Tx power table for ant1 */ CHAR RF_TX_ALC; /* 3390: RF R12[4:0]: Tx0 ALC, 3352: RF R47[4:0]: Tx0 ALC, 5390: RF R49[5:0]: Tx0 ALC */ CHAR MAC_PowerDelta; /* Tx power control over MAC 0x1314~0x1324 */ CHAR MAC_PowerDelta2; /* Tx power control for Tx1 */ CHAR TotalDeltaPower2; /* Tx power control for Tx1 */ #ifdef RTMP_TEMPERATURE_COMPENSATION INT LookupTable[IEEE80211_BAND_NUMS][33]; INT RefTemp[IEEE80211_BAND_NUMS]; UCHAR TssiGain[IEEE80211_BAND_NUMS]; /* Index offset, -7....25. */ INT LookupTableIndex; #endif /* RTMP_TEMPERATURE_COMPENSATION */ } TX_POWER_CONTROL, *PTX_POWER_CONTROL; #endif /* RTMP_INTERNAL_TX_ALC || RTMP_TEMPERATURE_COMPENSATION */ /* */ /* The entry of transmit power control over MAC */ /* */ typedef struct _TX_POWER_CONTROL_OVER_MAC_ENTRY { USHORT MACRegisterOffset; /* MAC register offset */ ULONG RegisterValue; /* Register value */ } TX_POWER_CONTROL_OVER_MAC_ENTRY, *PTX_POWER_CONTROL_OVER_MAC_ENTRY; /* */ /* The maximum registers of transmit power control */ /* */ #define MAX_TX_PWR_CONTROL_OVER_MAC_REGISTERS 5 /* */ /* The configuration of the transmit power control over MAC */ /* */ typedef struct _CONFIGURATION_OF_TX_POWER_CONTROL_OVER_MAC { UCHAR NumOfEntries; /* Number of entries */ TX_POWER_CONTROL_OVER_MAC_ENTRY TxPwrCtrlOverMAC[MAX_TX_PWR_CONTROL_OVER_MAC_REGISTERS]; } CONFIGURATION_OF_TX_POWER_CONTROL_OVER_MAC, *PCONFIGURATION_OF_TX_POWER_CONTROL_OVER_MAC; /* */ /* The extension of the transmit power control over MAC */ /* */ typedef struct _TX_POWER_CONTROL_EXT_OVER_MAC { struct { ULONG TxPwrCfg0; /* MAC 0x1314 */ ULONG TxPwrCfg0Ext; /* MAC 0x1390 */ ULONG TxPwrCfg1; /* MAC 0x1318 */ ULONG TxPwrCfg1Ext; /* MAC 0x1394 */ ULONG TxPwrCfg2; /* MAC 0x131C */ ULONG TxPwrCfg2Ext; /* MAC 0x1398 */ ULONG TxPwrCfg3; /* MAC 0x1320 */ ULONG TxPwrCfg3Ext; /* MAC 0x139C */ ULONG TxPwrCfg4; /* MAC 0x1324 */ ULONG TxPwrCfg4Ext; /* MAC 0x13A0 */ ULONG TxPwrCfg5; /* MAC 0x1384 */ ULONG TxPwrCfg6; /* MAC 0x1388 */ ULONG TxPwrCfg7; /* MAC 0x13D4 */ ULONG TxPwrCfg8; /* MAC 0x13D8 */ ULONG TxPwrCfg9; /* MAC 0x13DC */ } BW20Over2Dot4G; struct { ULONG TxPwrCfg0; /* MAC 0x1314 */ ULONG TxPwrCfg0Ext; /* MAC 0x1390 */ ULONG TxPwrCfg1; /* MAC 0x1318 */ ULONG TxPwrCfg1Ext; /* MAC 0x1394 */ ULONG TxPwrCfg2; /* MAC 0x131C */ ULONG TxPwrCfg2Ext; /* MAC 0x1398 */ ULONG TxPwrCfg3; /* MAC 0x1320 */ ULONG TxPwrCfg3Ext; /* MAC 0x139C */ ULONG TxPwrCfg4; /* MAC 0x1324 */ ULONG TxPwrCfg4Ext; /* MAC 0x13A0 */ ULONG TxPwrCfg5; /* MAC 0x1384 */ ULONG TxPwrCfg6; /* MAC 0x1388 */ ULONG TxPwrCfg7; /* MAC 0x13D4 */ ULONG TxPwrCfg8; /* MAC 0x13D8 */ ULONG TxPwrCfg9; /* MAC 0x13DC */ } BW40Over2Dot4G; struct { ULONG TxPwrCfg0; /* MAC 0x1314 */ ULONG TxPwrCfg0Ext; /* MAC 0x1390 */ ULONG TxPwrCfg1; /* MAC 0x1318 */ ULONG TxPwrCfg1Ext; /* MAC 0x1394 */ ULONG TxPwrCfg2; /* MAC 0x131C */ ULONG TxPwrCfg2Ext; /* MAC 0x1398 */ ULONG TxPwrCfg3; /* MAC 0x1320 */ ULONG TxPwrCfg3Ext; /* MAC 0x139C */ ULONG TxPwrCfg4; /* MAC 0x1324 */ ULONG TxPwrCfg4Ext; /* MAC 0x13A0 */ ULONG TxPwrCfg5; /* MAC 0x1384 */ ULONG TxPwrCfg6; /* MAC 0x1388 */ ULONG TxPwrCfg7; /* MAC 0x13D4 */ ULONG TxPwrCfg8; /* MAC 0x13D8 */ ULONG TxPwrCfg9; /* MAC 0x13DC */ } BW20Over5G; struct { ULONG TxPwrCfg0; /* MAC 0x1314 */ ULONG TxPwrCfg0Ext; /* MAC 0x1390 */ ULONG TxPwrCfg1; /* MAC 0x1318 */ ULONG TxPwrCfg1Ext; /* MAC 0x1394 */ ULONG TxPwrCfg2; /* MAC 0x131C */ ULONG TxPwrCfg2Ext; /* MAC 0x1398 */ ULONG TxPwrCfg3; /* MAC 0x1320 */ ULONG TxPwrCfg3Ext; /* MAC 0x139C */ ULONG TxPwrCfg4; /* MAC 0x1324 */ ULONG TxPwrCfg4Ext; /* MAC 0x13A0 */ ULONG TxPwrCfg5; /* MAC 0x1384 */ ULONG TxPwrCfg6; /* MAC 0x1388 */ ULONG TxPwrCfg7; /* MAC 0x13D4 */ ULONG TxPwrCfg8; /* MAC 0x13D8 */ ULONG TxPwrCfg9; /* MAC 0x13DC */ } BW40Over5G; } TX_POWER_CONTROL_EXT_OVER_MAC, *PTX_POWER_CONTROL_EXT_OVER_MAC; /* For Wake on Wireless LAN */ #if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) typedef struct _WOW_CFG_STRUCT { BOOLEAN bEnable; /* Enable WOW function*/ BOOLEAN bWOWFirmware; /* Enable WOW function, trigger to reload WOW-support firmware */ BOOLEAN bInBand; /* use in-band signal to wakeup system */ UINT8 nSelectedGPIO; /* Side band signal to wake up system */ UINT8 nDelay; /* Delay number is multiple of 3 secs, and it used to postpone the WOW function */ UINT8 nHoldTime; /* GPIO puls hold time, unit: 10ms */ } WOW_CFG_STRUCT, *PWOW_CFG_STRUCT; #endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) */ #ifdef NEW_WOW_SUPPORT typedef enum { WOW_PKT_TO_HOST, WOW_PKT_TO_ANDES } WOW_PKT_FLOW_T; typedef enum { WOW_WAKEUP_BY_PCIE, WOW_WAKEUP_BY_USB, WOW_WAKEUP_BY_GPIO } WOW_WAKEUP_METHOD_T; typedef enum { WOW_ENABLE = 1, WOW_TRAFFIC = 3, WOW_WAKEUP = 4 } WOW_FEATURE_T; typedef enum { WOW_MASK_CFG = 1, WOW_SEC_CFG, WOW_INFRA_CFG, WOW_P2P_CFG, } WOW_CONFIG_T; enum { WOW_MAGIC_PKT, WOW_BITMAP, WOW_IPV4_TCP_SYNC, WOW_IPV6_TCP_SYNC }; typedef struct NEW_WOW_MASK_CFG_STRUCT { UINT32 Config_Type; UINT32 Function_Enable; UINT32 Detect_Mask; UINT32 Event_Mask; } NEW_WOW_MASK_CFG_STRUCT, PNEW_WOW_MASK_CFG_STRUCT; typedef struct NEW_WOW_SEC_CFG_STRUCT { UINT32 Config_Type; UINT32 WPA_Ver; UCHAR PTK[64]; UCHAR R_COUNTER[8]; UCHAR Key_Id; UCHAR Cipher_Alg; UCHAR WCID; UCHAR Group_Cipher; } NEW_WOW_SEC_CFG_STRUCT, PNEW_WOW_SEC_CFG_STRUCT; typedef struct NEW_WOW_INFRA_CFG_STRUCT { UINT32 Config_Type; UCHAR STA_MAC[6]; UCHAR AP_MAC[6]; UINT32 AP_Status; } NEW_WOW_INFRA_CFG_STRUCT, PNEW_WOW_INFRA_CFG_STRUCT; typedef struct _NEW_WOW_P2P_CFG_STRUCT { UINT32 Config_Type; UCHAR GO_MAC[6]; UCHAR CLI_MAC[6]; UINT32 P2P_Status; } NEW_WOW_P2P_CFG_STRUCT, *PNEW_WOW_P2P_CFG_STRUCT; typedef struct _NEW_WOW_PARAM_STRUCT { UINT32 Parameter; UINT32 Value; } NEW_WOW_PARAM_STRUCT, *PNEW_WOW_PARAM_STRUCT; #endif /* NEW_WOW_SUPPORT */ /* Packet drop reason code */ typedef enum{ PKT_ATE_ON = 1 << 8, PKT_RADAR_ON = 2 << 8, PKT_RRM_QUIET = 3 << 8, PKT_TX_STOP = 4 <<8, PKT_TX_JAM = 5 << 8, PKT_NETDEV_DOWN = 6 < 8, PKT_NETDEV_NO_MATCH = 7 << 8, PKT_NOT_ALLOW_SEND = 8 << 8, PKT_INVALID_DST = 9<< 8, PKT_INVALID_SRC = 10 << 8, PKT_INVALID_PKT_DATA = 11 << 8, PKT_INVALID_PKT_LEN = 12 << 8, PKT_INVALID_ETH_TYPE = 13 << 8, PKT_INVALID_TXBLK_INFO = 14 << 8, PKT_INVALID_SW_ENCRYPT = 15 << 8, PKT_INVALID_PKT_TYPE = 16 << 8, PKT_INVALID_PKT_MIC = 17 << 8, PKT_PORT_NOT_SECURE = 18 << 8, PKT_TSPEC_NO_MATCH = 19 << 8, PKT_NO_ASSOCED_STA = 20 << 8, PKT_INVALID_MAC_ENTRY = 21 << 8, PKT_TX_QUE_FULL = 22 << 8, PKT_TX_QUE_ADJUST = 23<<8, PKT_PS_QUE_TIMEOUT = 24 <<8, PKT_PS_QUE_CLEAN = 25 << 8, PKT_MCAST_PS_QUE_FULL = 26 << 8, PKT_UCAST_PS_QUE_FULL = 27 << 8, PKT_RX_EAPOL_SANITY_FAIL = 28 <<8, PKT_RX_NOT_TO_KERNEL = 29 << 8, PKT_RX_MESH_SIG_FAIL = 30 << 8, PKT_APCLI_FAIL = 31 << 8, PKT_ZERO_DATA = 32 <<8, PKT_SW_DECRYPT_FAIL = 33 << 8, PKT_TX_SW_ENC_FAIL = 34 << 8, PKT_ACM_FAIL = 35 << 8, PKT_IGMP_GRP_FAIL = 36 << 8, PKT_MGMT_FAIL = 37 << 8, PKT_AMPDU_OUT_ORDER = 38 << 8, PKT_UAPSD_EOSP = 39 << 8, PKT_UAPSD_Q_FULL = 40 << 8, PKT_DRO_REASON_MAX = 41, }PKT_DROP_REASON; /* Packet drop Direction code */ typedef enum{ PKT_TX = 0, PKT_RX = 1 << 31, }PKT_DROP_DIECTION; typedef struct _BBP_RESET_CTL { #define BBP_RECORD_NUM 47 REG_PAIR BBPRegDB[BBP_RECORD_NUM]; BOOLEAN AsicCheckEn; } BBP_RESET_CTL, *PBBP_RESET_CTL; /* */ /* The miniport adapter structure */ /* */ struct _RTMP_ADAPTER { PVOID OS_Cookie; /* save specific structure relative to OS */ PNET_DEV net_dev; ULONG VirtualIfCnt; RTMP_CHIP_OP chipOps; RTMP_CHIP_CAP chipCap; #ifdef HOSTAPD_SUPPORT UINT32 IoctlIF; #endif /* HOSTAPD_SUPPORT */ #ifdef INF_PPA_SUPPORT UINT32 g_if_id; BOOLEAN PPAEnable; PPA_DIRECTPATH_CB *pDirectpathCb; #endif /* INF_PPA_SUPPORT */ NDIS_SPIN_LOCK irq_lock; /*======Cmd Thread in PCI/RBUS/USB */ CmdQ CmdQ; NDIS_SPIN_LOCK CmdQLock; /* CmdQLock spinlock */ RTMP_OS_TASK cmdQTask; #ifdef RTMP_MAC_USB /*****************************************************************************************/ /* USB related parameters */ /*****************************************************************************************/ /* struct usb_config_descriptor *config; */ VOID *config; UINT NumberOfPipes; USHORT BulkOutMaxPacketSize; USHORT BulkInMaxPacketSize; UINT8 BulkOutEpAddr[6]; UINT8 BulkInEpAddr[2]; /*======Control Flags */ ULONG BulkFlags; BOOLEAN bUsbTxBulkAggre; /* Flags for bulk out data priority */ /*======Cmd Thread */ /* CmdQ CmdQ; */ /* NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock */ /* RTMP_OS_TASK cmdQTask; */ /*======Semaphores (event) */ RTMP_OS_SEM UsbVendorReq_semaphore; RTMP_OS_SEM reg_atomic; RTMP_OS_SEM hw_atomic; PVOID UsbVendorReqBuf; BOOLEAN VendorResetFlag; /* wait_queue_head_t *wait; */ VOID *wait; /* lock for ATE */ #ifdef RALINK_ATE NDIS_SPIN_LOCK GenericLock; /* ATE Tx/Rx generic spinlock */ #endif /* RALINK_ATE */ #endif /* RTMP_MAC_USB */ /*****************************************************************************************/ /* RBUS related parameters */ /*****************************************************************************************/ /*****************************************************************************************/ /* Both PCI/USB related parameters */ /*****************************************************************************************/ /*RTMP_DEV_INFO chipInfo; */ RTMP_INF_TYPE infType; /*****************************************************************************************/ /* Driver Mgmt related parameters */ /*****************************************************************************************/ RTMP_OS_TASK mlmeTask; #ifdef RTMP_TIMER_TASK_SUPPORT /* If you want use timer task to handle the timer related jobs, enable this. */ RTMP_TIMER_TASK_QUEUE TimerQ; NDIS_SPIN_LOCK TimerQLock; RTMP_OS_TASK timerTask; #endif /* RTMP_TIMER_TASK_SUPPORT */ /*****************************************************************************************/ /* Tx related parameters */ /*****************************************************************************************/ BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; /* for ensuring RTUSBDeQueuePacket get call once */ NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING]; #ifdef RTMP_MAC_USB /* Data related context and AC specified, 4 AC supported */ NDIS_SPIN_LOCK BulkOutLock[6]; /* BulkOut spinlock for 4 ACs */ NDIS_SPIN_LOCK MLMEBulkOutLock; /* MLME BulkOut lock */ HT_TX_CONTEXT TxContext[NUM_OF_TX_RING]; NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; /* TxContextQueue spinlock */ /* 4 sets of Bulk Out index and pending flag */ /* array size of NextBulkOutIndex must be larger than or equal to 5; Or BulkOutPending[0] will be overwrited in NICInitTransmit(). */ UCHAR NextBulkOutIndex[NUM_OF_TX_RING]; /* only used for 4 EDCA bulkout pipe */ BOOLEAN BulkOutPending[6]; /* used for total 6 bulkout pipe */ UCHAR bulkResetPipeid; BOOLEAN MgmtBulkPending; ULONG bulkResetReq[6]; #ifdef INF_AMAZON_SE ULONG BulkOutDataSizeCount[NUM_OF_TX_RING]; BOOLEAN BulkOutDataFlag[NUM_OF_TX_RING]; ULONG BulkOutDataSizeLimit[NUM_OF_TX_RING]; UCHAR RunningQueueNoCount; UCHAR LastRunningQueueNo; #endif /* #ifdef INF_AMAZON_SE */ #endif /* RTMP_MAC_USB */ /* resource for software backlog queues */ QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; /* 4 AC + 1 HCCA */ NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; /* TxSwQueue spinlock */ /* Maximum allowed tx software Queue length */ UINT32 TxSwQMaxLen; RTMP_DMABUF MgmtDescRing; /* Shared memory for MGMT descriptors */ RTMP_MGMT_RING MgmtRing; NDIS_SPIN_LOCK MgmtRingLock; /* Prio Ring spinlock */ UCHAR LastMCUCmd; /*****************************************************************************************/ /* Rx related parameters */ /*****************************************************************************************/ #ifdef RTMP_MAC_USB RX_CONTEXT RxContext[RX_RING_SIZE]; /* 1 for redundant multiple IRP bulk in. */ NDIS_SPIN_LOCK BulkInLock; /* BulkIn spinlock for 4 ACs */ NDIS_SPIN_LOCK CmdRspLock; UCHAR PendingRx; /* The Maximum pending Rx value should be RX_RING_SIZE. */ UCHAR NextRxBulkInIndex; /* Indicate the current RxContext Index which hold by Host controller. */ UCHAR NextRxBulkInReadIndex; /* Indicate the current RxContext Index which driver can read & process it. */ ULONG NextRxBulkInPosition; /* Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. */ ULONG TransferBufferLength; /* current length of the packet buffer */ ULONG ReadPosition; /* current read position in a packet buffer */ CMD_RSP_CONTEXT CmdRspEventContext; #endif /* RTMP_MAC_USB */ /*****************************************************************************************/ /* ASIC related parameters */ /*****************************************************************************************/ UINT32 MACVersion; /* MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101).. */ /* --------------------------- */ /* E2PROM */ /* --------------------------- */ ULONG EepromVersion; /* byte 0: version, byte 1: revision, byte 2~3: unused */ ULONG FirmwareVersion; /* byte 0: Minor version, byte 1: Major version, otherwise unused. */ USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; #ifdef TXBF_SUPPORT USHORT EEPROMITxBFCalParams[6]; #endif /* TXBF_SUPPORT */ UCHAR EEPROMAddressNum; /* 93c46=6 93c66=8 */ BOOLEAN EepromAccess; UCHAR EFuseTag; /* --------------------------- */ /* BBP Control */ /* --------------------------- */ UCHAR BbpWriteLatch[MAX_BBP_ID + 1]; /* record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID */ CHAR BbpRssiToDbmDelta; /* change from UCHAR to CHAR for high power */ BBP_R66_TUNING BbpTuning; /* ---------------------------- */ /* RFIC control */ /* ---------------------------- */ UCHAR RfIcType; /* RFIC_xxx */ ULONG RfFreqOffset; /* Frequency offset for channel switching */ RTMP_RF_REGS LatchRfRegs; /* latch th latest RF programming value since RF IC doesn't support READ */ EEPROM_ANTENNA_STRUC Antenna; /* Since ANtenna definition is different for a & g. We need to save it for future reference. */ EEPROM_NIC_CONFIG2_STRUC NicConfig2; #if defined(BT_COEXISTENCE_SUPPORT) || defined(RT3290) EEPROM_NIC_CONFIG3_STRUC NicConfig3; #endif /* defined(BT_COEXISTENCE_SUPPORT) || defined(RT3290) */ /* This soft Rx Antenna Diversity mechanism is used only when user set */ /* RX Antenna = DIVERSITY ON */ SOFT_RX_ANT_DIVERSITY RxAnt; CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; /* Store Tx power value for all channels. */ CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; /* list all supported channels for site survey */ UCHAR ChannelListNum; /* number of channel in ChannelList[] */ UCHAR Bbp94; BOOLEAN BbpForCCK; ULONG Tx20MPwrCfgABand[MAX_TXPOWER_ARRAY_SIZE]; ULONG Tx20MPwrCfgGBand[MAX_TXPOWER_ARRAY_SIZE]; ULONG Tx40MPwrCfgABand[MAX_TXPOWER_ARRAY_SIZE]; ULONG Tx40MPwrCfgGBand[MAX_TXPOWER_ARRAY_SIZE]; #ifdef DOT11_VHT_AC ULONG Tx80MPwrCfgABand[MAX_TXPOWER_ARRAY_SIZE]; // Per-rate Tx power control for VHT BW80 (5GHz only) #endif /* DOT11_VHT_AC */ #ifdef MT7601 UINT32 TxCCKPwrCfg; #endif /* MT7601 */ BOOLEAN bAutoTxAgcA; /* Enable driver auto Tx Agc control */ UCHAR TssiRefA; /* Store Tssi reference value as 25 temperature. */ UCHAR TssiPlusBoundaryA[5]; /* Tssi boundary for increase Tx power to compensate. */ UCHAR TssiMinusBoundaryA[5]; /* Tssi boundary for decrease Tx power to compensate. */ UCHAR TxAgcStepA; /* Store Tx TSSI delta increment / decrement value */ CHAR TxAgcCompensateA; /* Store the compensation (TxAgcStep * (idx-1)) */ BOOLEAN bAutoTxAgcG; /* Enable driver auto Tx Agc control */ UCHAR TssiRefG; /* Store Tssi reference value as 25 temperature. */ UCHAR TssiPlusBoundaryG[5]; /* Tssi boundary for increase Tx power to compensate. */ UCHAR TssiMinusBoundaryG[5]; /* Tssi boundary for decrease Tx power to compensate. */ UCHAR TxAgcStepG; /* Store Tx TSSI delta increment / decrement value */ CHAR TxAgcCompensateG; /* Store the compensation (TxAgcStep * (idx-1)) */ #if defined(RTMP_INTERNAL_TX_ALC) || defined(RTMP_TEMPERATURE_COMPENSATION) TX_POWER_CONTROL TxPowerCtrl; /* The Tx power control using the internal ALC */ #endif /* RTMP_INTERNAL_TX_ALC || RTMP_TEMPERATURE_COMPENSATION */ signed char BGRssiOffset[3]; /* Store B/G RSSI #0/1/2 Offset value on EEPROM 0x46h */ signed char ARssiOffset[3]; /* Store A RSSI 0/1/2 Offset value on EEPROM 0x4Ah */ CHAR BLNAGain; /* Store B/G external LNA#0 value on EEPROM 0x44h */ CHAR ALNAGain0; /* Store A external LNA#0 value for ch36~64 */ CHAR ALNAGain1; /* Store A external LNA#1 value for ch100~128 */ CHAR ALNAGain2; /* Store A external LNA#2 value for ch132~165 */ #ifdef LED_CONTROL_SUPPORT /* LED control */ LED_CONTROL LedCntl; #endif /* LED_CONTROL_SUPPORT */ /* ---------------------------- */ /* MAC control */ /* ---------------------------- */ #ifdef RT8592 // TODO: shiang-6590, temporary get from windows and need to revise it!! /* IQ Calibration */ UCHAR IQGainTx[3][4]; UCHAR IQPhaseTx[3][4]; USHORT IQControl; #endif /* RT8592 */ #if defined(RT3290) || defined(RT65xx) || defined(MT7601) WLAN_FUN_CTRL_STRUC WlanFunCtrl; #endif /* defined(RT3290) || defined(RT65xx) || defined(MT7601) */ #ifdef RT3290 // TODO: shiang, check about the purpose of this parameter CMB_CTRL_STRUC CmbCtrl; WLAN_FUN_INFO_STRUC WlanFunInfo; BT_FUN_CTRL_STRUC BtFunCtrl; WLAN_BT_COEX_SETTING WlanBTCoexInfo; BOOLEAN RateUp; ULONG AntennaDiversityState;/* 0->Stable state 1->training state */ ULONG AntennaDiversityPER[2]; // 0 ->main 1->aux ULONG AntennaDiversityTxPacketCount[2]; // 0 ->main 1->aux ULONG AntennaDiversityRxPacketCount[2]; ULONG AntennaDiversityTrigger; ULONG AntennaDiversityCount; ULONG TrainCounter; ANT_DIVERSITY AntennaDiversityInfo; #endif /* RT3290 */ struct hw_setting hw_cfg; /*****************************************************************************************/ /* 802.11 related parameters */ /*****************************************************************************************/ /* outgoing BEACON frame buffer and corresponding TXD */ TXWI_STRUC BeaconTxWI; PUCHAR BeaconBuf; USHORT BeaconOffset[HW_BEACON_MAX_NUM]; /* pre-build PS-POLL and NULL frame upon link up. for efficiency purpose. */ HEADER_802_11 NullFrame; #ifdef RTMP_MAC_USB TX_CONTEXT NullContext[2]; TX_CONTEXT PsPollContext; #endif /* RTMP_MAC_USB */ #ifdef UAPSD_SUPPORT NDIS_SPIN_LOCK UAPSDEOSPLock; /* EOSP frame access lock use */ BOOLEAN bAPSDFlagSPSuspend; /* 1: SP is suspended; 0: SP is not */ #endif /* UAPSD_SUPPORT */ /*=========AP=========== */ #ifdef CONFIG_AP_SUPPORT /* ----------------------------------------------- */ /* AP specific configuration & operation status */ /* used only when pAd->OpMode == OPMODE_AP */ /* ----------------------------------------------- */ AP_ADMIN_CONFIG ApCfg; /* user configuration when in AP mode */ AP_MLME_AUX ApMlmeAux; #ifdef APCLI_SUPPORT MLME_AUX ApCliMlmeAux; /* temporary settings used during MLME state machine */ #endif /* APCLI_SUPPORT */ #ifdef WDS_SUPPORT WDS_TABLE WdsTab; /* WDS table when working as an AP */ NDIS_SPIN_LOCK WdsTabLock; #endif /* WDS_SUPPORT */ #ifdef MBSS_SUPPORT BOOLEAN FlgMbssInit; #endif /* MBSS_SUPPORT */ #ifdef WDS_SUPPORT BOOLEAN flg_wds_init; #endif /* WDS_SUPPORT */ #ifdef APCLI_SUPPORT BOOLEAN flg_apcli_init; #endif /* APCLI_SUPPORT */ /*#ifdef AUTO_CH_SELECT_ENHANCE */ PBSSINFO pBssInfoTab; PCHANNELINFO pChannelInfo; /*#endif // AUTO_CH_SELECT_ENHANCE */ #endif /* CONFIG_AP_SUPPORT */ WDS_TABLE MulTestTab; /*=======STA=========== */ /*=======Common=========== */ /* OP mode: either AP or STA */ UCHAR OpMode; /* OPMODE_STA, OPMODE_AP */ enum RATE_ADAPT_ALG rateAlg; /* Rate adaptation algorithm */ NDIS_MEDIA_STATE IndicateMediaState; /* Base on Indication state, default is NdisMediaStateDisConnected */ #ifdef CONFIG_MULTI_CHANNEL BOOLEAN Multi_Channel_Enable; #endif /* CONFIG_MULTI_CHANNEL */ #ifdef PROFILE_STORE RTMP_OS_TASK WriteDatTask; BOOLEAN bWriteDat; #endif /* PROFILE_STORE */ #ifdef CREDENTIAL_STORE STA_CONNECT_INFO StaCtIf; #endif /* CREDENTIAL_STORE */ #ifdef WSC_INCLUDED RTMP_OS_TASK wscTask; UCHAR WriteWscCfgToDatFile; BOOLEAN WriteWscCfgToAr9DatFile; NDIS_SPIN_LOCK WscElmeLock; MLME_QUEUE_ELEM *pWscElme; /* WSC hardware push button function 0811 */ BOOLEAN WscHdrPshBtnFlag; /* 1: support, read from EEPROM */ #ifdef CONFIG_AP_SUPPORT BOOLEAN bWscDriverAutoUpdateCfg; #endif /* CONFIG_AP_SUPPORT */ #endif /* WSC_INCLUDED */ /* MAT related parameters */ #ifdef MAT_SUPPORT MAT_STRUCT MatCfg; #endif /* MAT_SUPPORT */ /* Frequency setting for rate adaptation @ra_interval: for baseline time interval @ra_fast_interval: for quick response time interval */ UINT32 ra_interval; UINT32 ra_fast_interval; /* configuration: read from Registry & E2PROM */ BOOLEAN bLocalAdminMAC; /* Use user changed MAC */ UCHAR PermanentAddress[MAC_ADDR_LEN]; /* Factory default MAC address */ UCHAR CurrentAddress[MAC_ADDR_LEN]; /* User changed MAC address */ /* ------------------------------------------------------ */ /* common configuration to both OPMODE_STA and OPMODE_AP */ /* ------------------------------------------------------ */ COMMON_CONFIG CommonCfg; MLME_STRUCT Mlme; /* AP needs those vaiables for site survey feature. */ MLME_AUX MlmeAux; /* temporary settings used during MLME state machine */ #if defined(AP_SCAN_SUPPORT) || defined(CONFIG_STA_SUPPORT) BSS_TABLE ScanTab; /* store the latest SCAN result */ #endif /* defined(AP_SCAN_SUPPORT) || defined(CONFIG_STA_SUPPORT) */ /*About MacTab, the sta driver will use #0 and #1 for multicast and AP. */ MAC_TABLE MacTab; /* ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table. */ NDIS_SPIN_LOCK MacTabLock; #ifdef DOT11_N_SUPPORT BA_TABLE BATable; NDIS_SPIN_LOCK BATabLock; RALINK_TIMER_STRUCT RECBATimer; #endif /* DOT11_N_SUPPORT */ /* DOT11_H */ DOT11_H Dot11_H; /* encryption/decryption KEY tables */ CIPHER_KEY SharedKey[HW_BEACON_MAX_NUM + MAX_P2P_NUM][4]; /* STA always use SharedKey[BSS0][0..3] */ /* RX re-assembly buffer for fragmentation */ FRAGMENT_FRAME FragFrame; /* Frame storage for fragment frame */ /* various Counters */ COUNTER_802_3 Counters8023; /* 802.3 counters */ COUNTER_802_11 WlanCounters; /* 802.11 MIB counters */ COUNTER_RALINK RalinkCounters; /* Ralink propriety counters */ /* COUNTER_DRS DrsCounters; */ /* counters for Dynamic TX Rate Switching */ PRIVATE_STRUC PrivateInfo; /* Private information & counters */ /* flags, see fRTMP_ADAPTER_xxx flags */ ULONG Flags; /* Represent current device status */ ULONG PSFlags; /* Power Save operation flag. */ ULONG MoreFlags; /* Represent specific requirement */ /* current TX sequence # */ USHORT Sequence; /* Control disconnect / connect event generation */ /*+++Didn't used anymore */ ULONG LinkDownTime; /*--- */ ULONG LastRxRate; ULONG LastTxRate; /*+++Used only for Station */ BOOLEAN bConfigChanged; /* Config Change flag for the same SSID setting */ /*--- */ ULONG ExtraInfo; /* Extra information for displaying status */ ULONG SystemErrorBitmap; /* b0: E2PROM version error */ /*+++Didn't used anymore */ ULONG MacIcVersion; /* MAC/BBP serial interface issue solved after ver.D */ /*--- */ #ifdef SYSTEM_LOG_SUPPORT /* --------------------------- */ /* System event log */ /* --------------------------- */ RT_802_11_EVENT_TABLE EventTab; #endif /* SYSTEM_LOG_SUPPORT */ BOOLEAN HTCEnable; /*****************************************************************************************/ /* Statistic related parameters */ /*****************************************************************************************/ #ifdef RTMP_MAC_USB ULONG BulkOutDataOneSecCount; ULONG BulkInDataOneSecCount; ULONG BulkLastOneSecCount; /* BulkOutDataOneSecCount + BulkInDataOneSecCount */ ULONG watchDogRxCnt; ULONG watchDogRxOverFlowCnt; ULONG watchDogTxPendingCnt[NUM_OF_TX_RING]; #endif /* RTMP_MAC_USB */ BOOLEAN bUpdateBcnCntDone; ULONG macwd; /* ---------------------------- */ /* DEBUG paramerts */ /* ---------------------------- */ /* ---------------------------- */ /* rt2860c emulation-use Parameters */ /* ---------------------------- */ /*ULONG rtsaccu[30]; */ /*ULONG ctsaccu[30]; */ /*ULONG cfendaccu[30]; */ /*ULONG bacontent[16]; */ /*ULONG rxint[RX_RING_SIZE+1]; */ /*UCHAR rcvba[60]; */ BOOLEAN bLinkAdapt; BOOLEAN bForcePrintTX; BOOLEAN bForcePrintRX; /*BOOLEAN bDisablescanning; //defined in RT2870 USB */ BOOLEAN bStaFifoTest; BOOLEAN bProtectionTest; BOOLEAN bHCCATest; BOOLEAN bGenOneHCCA; BOOLEAN bBroadComHT; /*+++Following add from RT2870 USB. */ ULONG BulkOutReq; ULONG BulkOutComplete; ULONG BulkOutCompleteOther; ULONG BulkOutCompleteCancel; /* seems not use now? */ ULONG BulkInReq; ULONG BulkInComplete; ULONG BulkInCompleteFail; /*--- */ struct wificonf WIFItestbed; UCHAR TssiGain; #ifdef RALINK_ATE ATE_INFO ate; #ifdef RTMP_MAC_USB BOOLEAN ContinBulkOut; /*ATE bulk out control */ BOOLEAN ContinBulkIn; /*ATE bulk in control */ RTMP_OS_ATOMIC BulkOutRemained; RTMP_OS_ATOMIC BulkInRemained; #endif /* RTMP_MAC_USB */ #endif /* RALINK_ATE */ #ifdef DOT11_N_SUPPORT struct reordering_mpdu_pool mpdu_blk_pool; #endif /* DOT11_N_SUPPORT */ /* statistics count */ VOID *iw_stats; VOID *stats; #ifdef BLOCK_NET_IF BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING]; #endif /* BLOCK_NET_IF */ #ifdef CONFIG_AP_SUPPORT #ifdef IGMP_SNOOP_SUPPORT PMULTICAST_FILTER_TABLE pMulticastFilterTable; UCHAR IgmpGroupTxRate; #endif /* IGMP_SNOOP_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ #ifdef MULTIPLE_CARD_SUPPORT INT32 MC_RowID; STRING MC_FileName[256]; #endif /* MULTIPLE_CARD_SUPPORT */ ULONG TbttTickCount; /* beacon timestamp work-around */ #ifdef PCI_MSI_SUPPORT BOOLEAN HaveMsi; #endif /* PCI_MSI_SUPPORT */ #ifdef CONFIG_AP_SUPPORT RALINK_TIMER_STRUCT PeriodicTimer; #ifdef AP_QLOAD_SUPPORT UINT8 FlgQloadEnable; /* 1: any BSS WMM is enabled */ ULONG QloadUpTimeLast; /* last up time */ UINT8 QloadChanUtil; /* last QBSS Load, unit: us */ UINT32 QloadChanUtilTotal; /* current QBSS Load Total */ UINT8 QloadChanUtilBeaconCnt; /* 1~100, default: 50 */ UINT8 QloadChanUtilBeaconInt; /* 1~100, default: 50 */ UINT32 QloadLatestChannelBusyTimePri; UINT32 QloadLatestChannelBusyTimeSec; /* ex: For 100ms beacon interval, if the busy time in last TBTT is smaller than 5ms, QloadBusyCount[0] ++; if the busy time in last TBTT is between 5 and 10ms, QloadBusyCount[1] ++; ...... if the busy time in last TBTT is larger than 95ms, QloadBusyCount[19] ++; Command: "iwpriv ra0 qload show". */ /* provide busy time statistics for every TBTT */ #define QLOAD_FUNC_BUSY_TIME_STATS /* provide busy time alarm mechanism */ /* use the function to avoid to locate in some noise environments */ #define QLOAD_FUNC_BUSY_TIME_ALARM #ifdef QLOAD_FUNC_BUSY_TIME_STATS #define QLOAD_BUSY_INTERVALS 20 /* partition TBTT to QLOAD_BUSY_INTERVALS */ /* for primary channel & secondary channel */ UINT32 QloadBusyCountPri[QLOAD_BUSY_INTERVALS]; UINT32 QloadBusyCountSec[QLOAD_BUSY_INTERVALS]; #endif /* QLOAD_FUNC_BUSY_TIME_STATS */ #ifdef QLOAD_FUNC_BUSY_TIME_ALARM #define QLOAD_DOES_ALARM_OCCUR(pAd) (pAd->FlgQloadAlarmIsSuspended == TRUE) #define QLOAD_ALARM_EVER_OCCUR(pAd) (pAd->QloadAlarmNumber > 0) BOOLEAN FlgQloadAlarmIsSuspended; /* 1: suspend */ UINT8 QloadAlarmBusyTimeThreshold; /* unit: 1/100 */ UINT8 QloadAlarmBusyNumThreshold; /* unit: 1 */ UINT8 QloadAlarmBusyNum; UINT8 QloadAlarmDuration; /* unit: TBTT */ UINT32 QloadAlarmNumber; /* total alarm times */ BOOLEAN FlgQloadAlarm; /* 1: alarm occurs */ /* speed up use */ UINT32 QloadTimePeriodLast; UINT32 QloadBusyTimeThreshold; #else #define QLOAD_DOES_ALARM_OCCUR(pAd) 0 #endif /* QLOAD_FUNC_BUSY_TIME_ALARM */ #endif /* AP_QLOAD_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ /* for detect_wmm_traffic() BE TXOP use */ ULONG OneSecondnonBEpackets; /* record non BE packets per second */ UCHAR is_on; /* for detect_wmm_traffic() BE/BK TXOP use */ #define TIME_BASE (1000000/OS_HZ) #define TIME_ONE_SECOND (1000000/TIME_BASE) UCHAR flg_be_adjust; ULONG be_adjust_last_time; #ifdef WSC_INCLUDED /* for multiple card */ UCHAR *pHmacData; #endif /* WSC_INCLUDED */ #ifdef IKANOS_VX_1X0 struct IKANOS_TX_INFO IkanosTxInfo; struct IKANOS_TX_INFO IkanosRxInfo[HW_BEACON_MAX_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM]; #endif /* IKANOS_VX_1X0 */ #ifdef DBG_DIAGNOSE RtmpDiagStruct DiagStruct; #endif /* DBG_DIAGNOSE */ UINT8 FlgCtsEnabled; UINT8 PM_FlgSuspend; #ifdef RTMP_EFUSE_SUPPORT BOOLEAN bUseEfuse; BOOLEAN bEEPROMFile; BOOLEAN bFroceEEPROMBuffer; BOOLEAN bCalFreeIC; UCHAR EEPROMImage[1024]; #endif /* RTMP_EFUSE_SUPPORT */ EXT_CAP_INFO_ELEMENT ExtCapInfo; #ifdef VENDOR_FEATURE1_SUPPORT UCHAR FifoUpdateDone, FifoUpdateRx; #endif /* VENDOR_FEATURE1_SUPPORT */ UINT8 RFICType; #ifdef LINUX #ifdef RT_CFG80211_SUPPORT VOID *pCfgDev; VOID *pCfg80211_CB; BOOLEAN FlgCfg80211Scanning; BOOLEAN FlgCfg80211Connecting; UCHAR Cfg80211_Alpha2[2]; #endif /* RT_CFG80211_SUPPORT */ #endif /* LINUX */ #ifdef OS_ABL_SUPPORT #ifdef MAT_SUPPORT /* used in OS_ABL */ BOOLEAN (*MATPktRxNeedConvert) (RTMP_ADAPTER *pAd, PNET_DEV net_dev); PUCHAR (*MATEngineRxHandle)(RTMP_ADAPTER *pAd, PNDIS_PACKET pPkt, UINT infIdx); #endif /* MAT_SUPPORT */ #endif /* OS_ABL_SUPPORT */ UINT32 ContinueMemAllocFailCount; struct { INT IeLen; UCHAR *pIe; } ProbeRespIE[MAX_LEN_OF_BSS_TABLE]; /* purpose: We free all kernel resources when module is removed */ LIST_HEADER RscTimerMemList; /* resource timers memory */ LIST_HEADER RscTaskMemList; /* resource tasks memory */ LIST_HEADER RscLockMemList; /* resource locks memory */ LIST_HEADER RscTaskletMemList; /* resource tasklets memory */ LIST_HEADER RscSemMemList; /* resource semaphore memory */ LIST_HEADER RscAtomicMemList; /* resource atomic memory */ /* purpose: Cancel all timers when module is removed */ LIST_HEADER RscTimerCreateList; /* timers list */ #ifdef OS_ABL_SUPPORT #endif /* OS_ABL_SUPPORT */ #if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) WOW_CFG_STRUCT WOW_Cfg; /* data structure for wake on wireless */ #endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) */ #ifdef WLAN_SKB_RECYCLE struct sk_buff_head rx0_recycle; #endif /* WLAN_SKB_RECYCLE */ #ifdef FPGA_MODE INT tx_kick_cnt; INT phy_rates; INT data_phy; UCHAR data_bw; UCHAR data_mcs; UCHAR data_gi; UCHAR data_basize; BOOLEAN fpga_on; #endif /* FPGA_MODE */ #ifdef WFA_VHT_PF BOOLEAN force_amsdu; #endif /* WFA_VHT_PF */ UCHAR bloopBackTest; BOOLEAN bHwTxLookupRate; TXWI_STRUC NullTxWI; BOOLEAN TestMulMac; struct MCU_CTRL MCUCtrl; #ifdef CONFIG_MULTI_CHANNEL USHORT NullBufOffset[2]; CHAR NullFrBuf[100]; UINT32 NullFrLen; UINT32 MultiChannelFlowCtl; RTMP_OS_TASK MultiChannelTask; UCHAR MultiChannelAction; #endif /* CONFIG_MULTI_CHANNEL */ #ifdef SINGLE_SKU_V2 LIST_HEADER SingleSkuPwrList; UCHAR DefaultTargetPwr; CHAR SingleSkuRatePwrDiff[18]; #endif /* SINGLE_SKU_V2 */ }; #if defined(RTMP_INTERNAL_TX_ALC) || defined(RTMP_TEMPERATURE_COMPENSATION) /* The offset of the Tx power tuning entry (zero-based array) */ #define TX_POWER_TUNING_ENTRY_OFFSET 30 /* The lower-bound of the Tx power tuning entry */ #define LOWERBOUND_TX_POWER_TUNING_ENTRY -30 /* The upper-bound of the Tx power tuning entry in G band */ #define UPPERBOUND_TX_POWER_TUNING_ENTRY(__pAd) ((__pAd)->chipCap.TxAlcTxPowerUpperBound_2G) #ifdef A_BAND_SUPPORT /* The upper-bound of the Tx power tuning entry in A band */ #define UPPERBOUND_TX_POWER_TUNING_ENTRY_5G(__pAd) ((__pAd)->chipCap.TxAlcTxPowerUpperBound_5G) #endif /* A_BAND_SUPPORT */ /* Temperature compensation lookup table */ #define TEMPERATURE_COMPENSATION_LOOKUP_TABLE_OFFSET 7 /* The lower/upper power delta index for the TSSI rate table */ #define LOWER_POWER_DELTA_INDEX 0 #define UPPER_POWER_DELTA_INDEX 24 /* The offset of the TSSI rate table */ #define TSSI_RATIO_TABLE_OFFSET 12 /* Get the power delta bound */ #define GET_TSSI_RATE_TABLE_INDEX(x) (((x) > UPPER_POWER_DELTA_INDEX) ? (UPPER_POWER_DELTA_INDEX) : (((x) < LOWER_POWER_DELTA_INDEX) ? (LOWER_POWER_DELTA_INDEX) : ((x)))) /* 802.11b CCK TSSI information */ typedef union _CCK_TSSI_INFO { #ifdef RT_BIG_ENDIAN struct { UCHAR Reserved:1; UCHAR ShortPreamble:1; UCHAR Rate:2; UCHAR Tx40MSel:2; UCHAR TxType:2; } field; #else struct { UCHAR TxType:2; UCHAR Tx40MSel:2; UCHAR Rate:2; UCHAR ShortPreamble:1; UCHAR Reserved:1; } field; #endif /* RT_BIG_ENDIAN */ UCHAR value; } CCK_TSSI_INFO, *PCCK_TSSI_INFO; /* 802.11a/g OFDM TSSI information */ typedef union _OFDM_TSSI_INFO { #ifdef RT_BIG_ENDIAN struct { UCHAR Rate:4; UCHAR Tx40MSel:2; UCHAR TxType:2; } field; #else struct { UCHAR TxType:2; UCHAR Tx40MSel:2; UCHAR Rate:4; } field; #endif /* RT_BIG_ENDIAN */ UCHAR value; } OFDM_TSSI_INFO, *POFDM_TSSI_INFO; /* 802.11n HT TSSI information */ typedef struct _HT_TSSI_INFO { union { #ifdef RT_BIG_ENDIAN struct { UCHAR SGI:1; UCHAR STBC:2; UCHAR Aggregation:1; UCHAR Tx40MSel:2; UCHAR TxType:2; } field; #else struct { UCHAR TxType:2; UCHAR Tx40MSel:2; UCHAR Aggregation:1; UCHAR STBC:2; UCHAR SGI:1; } field; #endif /* RT_BIG_ENDIAN */ UCHAR value; } PartA; union { #ifdef RT_BIG_ENDIAN struct { UCHAR BW:1; UCHAR MCS:7; } field; #else struct { UCHAR MCS:7; UCHAR BW:1; } field; #endif /* RT_BIG_ENDIAN */ UCHAR value; } PartB; } HT_TSSI_INFO, *PHT_TSSI_INFO; typedef struct _TSSI_INFO_{ UCHAR tssi_info_0; union { CCK_TSSI_INFO cck_tssi_info; OFDM_TSSI_INFO ofdm_tssi_info; HT_TSSI_INFO ht_tssi_info_1; UCHAR byte; }tssi_info_1; HT_TSSI_INFO ht_tssi_info_2; }TSSI_INFO; #endif /* RTMP_INTERNAL_TX_ALC || RTMP_TEMPERATURE_COMPENSATION */ /*************************************************************************** * Rx Path software control block related data structures **************************************************************************/ typedef struct _RX_BLK_ { UCHAR hw_rx_info[RXD_SIZE]; /* include "RXD_STRUC RxD" and "RXINFO_STRUC rx_info " */ RXINFO_STRUC *pRxInfo; #ifdef RLT_MAC RXFCE_INFO *pRxFceInfo; #endif /* RLT_MAC */ RXWI_STRUC *pRxWI; PHEADER_802_11 pHeader; PNDIS_PACKET pRxPacket; UCHAR *pData; USHORT DataSize; USHORT Flags; UCHAR UserPriority; /* for calculate TKIP MIC using */ UCHAR OpMode; /* 0:OPMODE_STA 1:OPMODE_AP */ UCHAR wcid; /* copy of pRxWI->RxWIWirelessCliID */ UCHAR mcs; UCHAR U2M; #ifdef HDR_TRANS_SUPPORT BOOLEAN bHdrRxTrans; /* this packet's header is translated to 802.3 by HW */ BOOLEAN bHdrVlanTaged; /* VLAN tag is added to this header */ UCHAR *pTransData; USHORT TransDataSize; #endif /* HDR_TRANS_SUPPORT */ } RX_BLK; #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag) #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag) #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag)) #define fRX_WDS 0x0001 #define fRX_AMSDU 0x0002 #define fRX_ARALINK 0x0004 #define fRX_HTC 0x0008 #define fRX_PAD 0x0010 #define fRX_AMPDU 0x0020 #define fRX_QOS 0x0040 #define fRX_INFRA 0x0080 #define fRX_EAP 0x0100 #define fRX_MESH 0x0200 #define fRX_APCLI 0x0400 #define fRX_DLS 0x0800 #define fRX_WPI 0x1000 #define fRX_P2PGO 0x2000 #define fRX_P2PCLI 0x4000 #define LENGTH_AMSDU_SUBFRAMEHEAD 14 #define LENGTH_ARALINK_SUBFRAMEHEAD 14 #define LENGTH_ARALINK_HEADER_FIELD 2 /*************************************************************************** * Tx Path software control block related data structures **************************************************************************/ #define TX_UNKOWN_FRAME 0x00 #define TX_MCAST_FRAME 0x01 #define TX_LEGACY_FRAME 0x02 #define TX_AMPDU_FRAME 0x04 #define TX_AMSDU_FRAME 0x08 #define TX_RALINK_FRAME 0x10 #define TX_FRAG_FRAME 0x20 /* Currently the sizeof(TX_BLK) is 148 bytes. */ typedef struct _TX_BLK_ { UCHAR QueIdx; UCHAR TxFrameType; /* Indicate the Transmission type of the all frames in one batch */ UCHAR TotalFrameNum; /* Total frame number want to send-out in one batch */ USHORT TotalFragNum; /* Total frame fragments required in one batch */ USHORT TotalFrameLen; /* Total length of all frames want to send-out in one batch */ QUEUE_HEADER TxPacketList; MAC_TABLE_ENTRY *pMacEntry; /* NULL: packet with 802.11 RA field is multicast/broadcast address */ HTTRANSMIT_SETTING *pTransmit; /* Following structure used for the characteristics of a specific packet. */ PNDIS_PACKET pPacket; PUCHAR pSrcBufHeader; /* Reference to the head of sk_buff->data */ PUCHAR pSrcBufData; /* Reference to the sk_buff->data, will changed depends on hanlding progresss */ UINT SrcBufLen; /* Length of packet payload which not including Layer 2 header */ PUCHAR pExtraLlcSnapEncap; /* NULL means no extra LLC/SNAP is required */ #ifndef VENDOR_FEATURE1_SUPPORT /* Note: Can not insert any other new parameters between pExtraLlcSnapEncap & HeaderBuf; Or the start address of HeaderBuf will not be aligned by 4. But we can not change HeaderBuf[128] to HeaderBuf[32] because many codes use HeaderBuf[index]. */ UCHAR HeaderBuf[128]; /* TempBuffer for TX_INFO + TX_WI + TSO_INFO + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP */ #else UINT32 HeaderBuffer[32]; /* total 128B, use UINT32 to avoid alignment problem */ UCHAR *HeaderBuf; #endif /* VENDOR_FEATURE1_SUPPORT */ UCHAR MpduHeaderLen; /* 802.11 header length NOT including the padding */ UCHAR HdrPadLen; /* recording Header Padding Length; */ UCHAR apidx; /* The interface associated to this packet */ UCHAR Wcid; /* The MAC entry associated to this packet */ UCHAR UserPriority; /* priority class of packet */ UCHAR FrameGap; /* what kind of IFS this packet use */ UCHAR MpduReqNum; /* number of fragments of this frame */ UCHAR TxRate; /* TODO: Obsoleted? Should change to MCS? */ UCHAR CipherAlg; /* cipher alogrithm */ PCIPHER_KEY pKey; UCHAR KeyIdx; /* Indicate the transmit key index */ #ifdef CONFIG_AP_SUPPORT #ifdef APCLI_SUPPORT UINT ApCliIfidx; PAPCLI_STRUCT pApCliEntry; #endif /* APCLI_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ UINT32 Flags; /*See following definitions for detail. */ /*YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer. */ ULONG Priv; /* Hardware specific value saved in here. */ #ifdef CONFIG_AP_SUPPORT MULTISSID_STRUCT *pMbss; #endif /* CONFIG_AP_SUPPORT */ #ifdef TXBF_SUPPORT UCHAR TxSndgPkt; /* 1: sounding 2: NDP sounding */ UCHAR TxNDPSndgBW; UCHAR TxNDPSndgMcs; #endif /* TXBF_SUPPORT */ #ifdef TX_PKT_SG PACKET_INFO pkt_info; #endif /* TX_PKT_SG */ UCHAR OpMode; #ifdef HDR_TRANS_SUPPORT BOOLEAN NeedTrans; /* indicate the packet needs to do hw header translate */ #endif /* HDR_TRANS_SUPPORT */ } TX_BLK, *PTX_BLK; #define fTX_bRtsRequired 0x0001 /* Indicate if need send RTS frame for protection. Not used in RT2860/RT2870. */ #define fTX_bAckRequired 0x0002 /* the packet need ack response */ #define fTX_bPiggyBack 0x0004 /* Legacy device use Piggback or not */ #define fTX_bHTRate 0x0008 /* allow to use HT rate */ #define fTX_bForceNonQoS 0x0010 /* force to transmit frame without WMM-QoS in HT mode */ #define fTX_bAllowFrag 0x0020 /* allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment */ #define fTX_bMoreData 0x0040 /* there are more data packets in PowerSave Queue */ #define fTX_bWMM 0x0080 /* QOS Data */ #define fTX_bClearEAPFrame 0x0100 #define fTX_bSwEncrypt 0x0400 /* this packet need to be encrypted by software before TX */ #ifdef CONFIG_AP_SUPPORT #ifdef APCLI_SUPPORT #define fTX_bApCliPacket 0x0200 #endif /* APCLI_SUPPORT */ #ifdef WDS_SUPPORT #define fTX_bWDSEntry 0x1000 /* Used when WDS_SUPPORT */ #endif /* WDS_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ #ifdef UAPSD_SUPPORT #define fTX_bWMM_UAPSD_EOSP 0x0800 /* Used when UAPSD_SUPPORT */ #endif /* UAPSD_SUPPORT */ #ifdef WAPI_SUPPORT #define fTX_bWPIDataFrame 0x8000 /* indicate this packet is an WPI data frame, it need to be encrypted by software */ #endif /* WAPI_SUPPORT */ #ifdef CLIENT_WDS #define fTX_bClientWDSFrame 0x10000 #endif /* CLIENT_WDS */ #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag) #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0) #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag)) #ifdef RT_BIG_ENDIAN /*************************************************************************** * Endian conversion related functions **************************************************************************/ /* ======================================================================== Routine Description: Endian conversion of Tx/Rx descriptor . Arguments: pAd Pointer to our adapter pData Pointer to Tx/Rx descriptor DescriptorType Direction of the frame Return Value: None Note: Call this function when read or update descriptor ======================================================================== */ static inline VOID RTMPWIEndianChange( IN PRTMP_ADAPTER pAd, IN PUCHAR pData, IN ULONG DescriptorType) { int size; int i; UINT8 TXWISize = pAd->chipCap.TXWISize; UINT8 RXWISize = pAd->chipCap.RXWISize; size = ((DescriptorType == TYPE_TXWI) ? TXWISize : RXWISize); if(DescriptorType == TYPE_TXWI) { *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); /* Byte 0~3 */ *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); /* Byte 4~7 */ } else { for(i=0; i < size/4 ; i++) *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i)); } } /* ======================================================================== Routine Description: Endian conversion of Tx/Rx descriptor . Arguments: pAd Pointer to our adapter pData Pointer to Tx/Rx descriptor DescriptorType Direction of the frame Return Value: None Note: Call this function when read or update descriptor ======================================================================== */ #ifdef RTMP_MAC_USB static inline VOID RTMPDescriptorEndianChange(UCHAR *pData, ULONG DescType) { *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); } #endif /* RTMP_MAC_USB */ /* ======================================================================== Routine Description: Endian conversion of all kinds of 802.11 frames . Arguments: pAd Pointer to our adapter pData Pointer to the 802.11 frame structure Dir Direction of the frame FromRxDoneInt Caller is from RxDone interrupt Return Value: None Note: Call this function when read or update buffer data ======================================================================== */ static inline VOID RTMPFrameEndianChange( IN PRTMP_ADAPTER pAd, IN PUCHAR pData, IN ULONG Dir, IN BOOLEAN FromRxDoneInt) { PHEADER_802_11 pFrame; PUCHAR pMacHdr; /* swab 16 bit fields - Frame Control field */ if(Dir == DIR_READ) { *(USHORT *)pData = SWAP16(*(USHORT *)pData); } pFrame = (PHEADER_802_11) pData; pMacHdr = (PUCHAR) pFrame; /* swab 16 bit fields - Duration/ID field */ *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2)); if (pFrame->FC.Type != BTYPE_CNTL) { /* swab 16 bit fields - Sequence Control field */ *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22)); } if(pFrame->FC.Type == BTYPE_MGMT) { switch(pFrame->FC.SubType) { case SUBTYPE_ASSOC_REQ: case SUBTYPE_REASSOC_REQ: /* swab 16 bit fields - CapabilityInfo field */ pMacHdr += sizeof(HEADER_802_11); *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); /* swab 16 bit fields - Listen Interval field */ pMacHdr += 2; *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); break; case SUBTYPE_ASSOC_RSP: case SUBTYPE_REASSOC_RSP: /* swab 16 bit fields - CapabilityInfo field */ pMacHdr += sizeof(HEADER_802_11); *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); /* swab 16 bit fields - Status Code field */ pMacHdr += 2; *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); /* swab 16 bit fields - AID field */ pMacHdr += 2; *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); break; case SUBTYPE_AUTH: /* When the WEP bit is on, don't do the conversion here. This is only shared WEP can hit this condition. For AP, it shall do conversion after decryption. For STA, it shall do conversion before encryption. */ if (pFrame->FC.Wep == 1) break; else { /* swab 16 bit fields - Auth Alg No. field */ pMacHdr += sizeof(HEADER_802_11); *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); /* swab 16 bit fields - Auth Seq No. field */ pMacHdr += 2; *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); /* swab 16 bit fields - Status Code field */ pMacHdr += 2; *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); } break; case SUBTYPE_BEACON: case SUBTYPE_PROBE_RSP: /* swab 16 bit fields - BeaconInterval field */ pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN); *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); /* swab 16 bit fields - CapabilityInfo field */ pMacHdr += sizeof(USHORT); *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); break; case SUBTYPE_DEAUTH: case SUBTYPE_DISASSOC: /* If the PMF is negotiated, those frames shall be encrypted */ if(!FromRxDoneInt && pFrame->FC.Wep == 1) break; else { /* swab 16 bit fields - Reason code field */ pMacHdr += sizeof(HEADER_802_11); *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr); } break; } } else if( pFrame->FC.Type == BTYPE_DATA ) { } else if(pFrame->FC.Type == BTYPE_CNTL) { switch(pFrame->FC.SubType) { case SUBTYPE_BLOCK_ACK_REQ: { PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame; *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl)); pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word); } break; case SUBTYPE_BLOCK_ACK: /* For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3 */ *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0])); break; case SUBTYPE_ACK: /*For ACK packet, the HT_CONTROL field is in the same offset with Addr2 */ *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0])); break; } } else { DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n")); } /* swab 16 bit fields - Frame Control */ if(Dir == DIR_WRITE) { *(USHORT *)pData = SWAP16(*(USHORT *)pData); } } #endif /* RT_BIG_ENDIAN */ /*************************************************************************** * Other static inline function definitions **************************************************************************/ static inline VOID ConvertMulticastIP2MAC( IN PUCHAR pIpAddr, IN PUCHAR *ppMacAddr, IN UINT16 ProtoType) { if (pIpAddr == NULL) return; if (ppMacAddr == NULL || *ppMacAddr == NULL) return; switch (ProtoType) { case ETH_P_IPV6: /* memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); */ *(*ppMacAddr) = 0x33; *(*ppMacAddr + 1) = 0x33; *(*ppMacAddr + 2) = pIpAddr[12]; *(*ppMacAddr + 3) = pIpAddr[13]; *(*ppMacAddr + 4) = pIpAddr[14]; *(*ppMacAddr + 5) = pIpAddr[15]; break; case ETH_P_IP: default: /* memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS); */ *(*ppMacAddr) = 0x01; *(*ppMacAddr + 1) = 0x00; *(*ppMacAddr + 2) = 0x5e; *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f; *(*ppMacAddr + 4) = pIpAddr[2]; *(*ppMacAddr + 5) = pIpAddr[3]; break; } return; } char *get_phymode_str(int phy_mode); char *get_bw_str(int bandwidth); BOOLEAN RTMPCheckForHang( IN NDIS_HANDLE MiniportAdapterContext); /* Private routines in rtmp_init.c */ NDIS_STATUS RTMPAllocTxRxRingMemory( IN PRTMP_ADAPTER pAd); #ifdef RESOURCE_PRE_ALLOC NDIS_STATUS RTMPInitTxRxRingMemory( IN RTMP_ADAPTER *pAd); #endif /* RESOURCE_PRE_ALLOC */ NDIS_STATUS RTMPReadParametersHook( IN PRTMP_ADAPTER pAd); NDIS_STATUS RTMPSetProfileParameters( IN RTMP_ADAPTER *pAd, IN PSTRING pBuffer); INT RTMPGetKeyParameter( IN PSTRING key, OUT PSTRING dest, IN INT destsize, IN PSTRING buffer, IN BOOLEAN bTrimSpace); #ifdef WSC_INCLUDED VOID rtmp_read_wsc_user_parms_from_file( IN PRTMP_ADAPTER pAd, IN char *tmpbuf, IN char *buffer); #endif/*WSC_INCLUDED*/ VOID rtmp_read_multest_from_file( IN PRTMP_ADAPTER pAd, IN PSTRING tmpbuf, IN PSTRING buffer); #ifdef SINGLE_SKU_V2 NDIS_STATUS RTMPSetSingleSKUParameters( IN RTMP_ADAPTER *pAd); VOID InitSkuRateDiffTable( IN PRTMP_ADAPTER pAd ); UCHAR GetSkuChannelBasePwr( IN PRTMP_ADAPTER pAd, IN UCHAR channel); UCHAR GetSkuRatePwr( IN PRTMP_ADAPTER pAd, IN CHAR phymode, IN UCHAR channel, IN UCHAR bw); VOID UpdateSkuRatePwr( IN PRTMP_ADAPTER pAd, IN UCHAR channel, IN UCHAR bw, IN CHAR base_pwr); #endif /* SINGLE_SKU_V2 */ VOID AP_WDS_KeyNameMakeUp( IN STRING *pKey, IN UINT32 KeyMaxSize, IN INT KeyId); VOID AsicUpdateMulTestRxWCIDTable( IN PRTMP_ADAPTER pAd); MAC_TABLE_ENTRY *MulTestTableLookup( IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr, IN BOOLEAN bResetIdelCount); VOID AsicUpdateMulTestEncryption( IN PRTMP_ADAPTER pAd, IN UCHAR wcid); MAC_TABLE_ENTRY *MacTableInsertMulTestEntry( IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr, UINT WdsTabIdx); #ifdef RLT_RF NDIS_STATUS rlt_rf_write( IN RTMP_ADAPTER *pAd, IN UCHAR bank, IN UCHAR regID, IN UCHAR value); NDIS_STATUS rlt_rf_read( IN RTMP_ADAPTER *pAd, IN UCHAR bank, IN UCHAR regID, IN UCHAR *pValue); #endif /* RLT_RF */ VOID NICReadEEPROMParameters( IN PRTMP_ADAPTER pAd, IN PSTRING mac_addr); VOID NICInitAsicFromEEPROM( IN PRTMP_ADAPTER pAd); NDIS_STATUS NICInitializeAdapter( IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); NDIS_STATUS NICInitializeAsic( IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset); VOID RTMPRingCleanUp( IN PRTMP_ADAPTER pAd, IN UCHAR RingType); VOID UserCfgExit( IN RTMP_ADAPTER *pAd); VOID UserCfgInit( IN PRTMP_ADAPTER pAd); NDIS_STATUS NICLoadFirmware( IN PRTMP_ADAPTER pAd); VOID NICEraseFirmware( IN PRTMP_ADAPTER pAd); VOID NICUpdateFifoStaCounters( IN PRTMP_ADAPTER pAd); VOID NICUpdateRawCounters( IN PRTMP_ADAPTER pAd); #ifdef MICROWAVE_OVEN_SUPPORT VOID NICUpdateRxStatusCnt1( IN PRTMP_ADAPTER pAd, IN UCHAR Idx); UINT32 NICSumFalseCCACnt( IN PRTMP_ADAPTER pAd); UINT32 NICSumPLCPErrCnt( IN PRTMP_ADAPTER pAd); #endif /* MICROWAVE_OVEN_SUPPORT */ #ifdef FIFO_EXT_SUPPORT BOOLEAN NicGetMacFifoTxCnt( IN RTMP_ADAPTER *pAd, IN MAC_TABLE_ENTRY *pEntry); VOID AsicFifoExtSet( IN RTMP_ADAPTER *pAd); VOID AsicFifoExtEntryClean( IN RTMP_ADAPTER * pAd, IN MAC_TABLE_ENTRY *pEntry); #endif /* FIFO_EXT_SUPPORT */ VOID NicResetRawCounters(RTMP_ADAPTER *pAd); VOID NicGetTxRawCounters( IN RTMP_ADAPTER *pAd, IN TX_STA_CNT0_STRUC *pStaTxCnt0, IN TX_STA_CNT1_STRUC *pStaTxCnt1); VOID RTMPZeroMemory( IN PVOID pSrc, IN ULONG Length); ULONG RTMPCompareMemory( IN PVOID pSrc1, IN PVOID pSrc2, IN ULONG Length); VOID RTMPMoveMemory( OUT PVOID pDest, IN PVOID pSrc, IN ULONG Length); VOID AtoH( PSTRING src, PUCHAR dest, int destlen); UCHAR BtoH( char ch); VOID RTMP_TimerListAdd( IN PRTMP_ADAPTER pAd, IN VOID *pRsc); VOID RTMP_TimerListRelease( IN PRTMP_ADAPTER pAd); VOID RTMP_AllTimerListRelease( IN PRTMP_ADAPTER pAd); VOID RTMPInitTimer( IN PRTMP_ADAPTER pAd, IN PRALINK_TIMER_STRUCT pTimer, IN PVOID pTimerFunc, IN PVOID pData, IN BOOLEAN Repeat); VOID RTMPSetTimer( IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value); VOID RTMPModTimer( IN PRALINK_TIMER_STRUCT pTimer, IN ULONG Value); VOID RTMPCancelTimer( IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN *pCancelled); VOID RTMPReleaseTimer( IN PRALINK_TIMER_STRUCT pTimer, OUT BOOLEAN *pCancelled); VOID RTMPEnableRxTx( IN PRTMP_ADAPTER pAd); VOID AntCfgInit( IN PRTMP_ADAPTER pAd); /* */ /* prototype in action.c */ /* */ VOID ActionStateMachineInit( IN PRTMP_ADAPTER pAd, IN STATE_MACHINE *S, OUT STATE_MACHINE_FUNC Trans[]); VOID MlmeADDBAAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeDELBAAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeDLSAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeInvalidAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeQOSAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #ifdef DOT11_N_SUPPORT VOID PeerAddBAReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerAddBARspAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerDelBAAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerBAAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #endif /* DOT11_N_SUPPORT */ VOID SendPSMPAction( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Psmp); #ifdef CONFIG_AP_SUPPORT VOID SendBeaconRequest( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid); #endif /* CONFIG_AP_SUPPORT */ VOID PeerRMAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerPublicAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #ifdef CONFIG_AP_SUPPORT VOID ApPublicAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #endif /* CONFIG_AP_SUPPORT */ VOID PeerBSSTranAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #ifdef DOT11_N_SUPPORT VOID PeerHTAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #endif /* DOT11_N_SUPPORT */ VOID PeerQOSAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #ifdef QOS_DLS_SUPPORT VOID PeerDLSAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #endif /* QOS_DLS_SUPPORT */ #ifdef DOT11_N_SUPPORT VOID RECBATimerTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID ORIBATimerTimeout( IN PRTMP_ADAPTER pAd); VOID SendRefreshBAR( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry); #ifdef DOT11N_DRAFT3 VOID RTMP_11N_D3_TimerInit( IN PRTMP_ADAPTER pAd); VOID SendBSS2040CoexistMgmtAction( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR apidx, IN UCHAR InfoReq); VOID SendNotifyBWActionFrame( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR apidx); BOOLEAN ChannelSwitchSanityCheck( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR NewChannel, IN UCHAR Secondary); VOID ChannelSwitchAction( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR Channel, IN UCHAR Secondary); ULONG BuildIntolerantChannelRep( IN PRTMP_ADAPTER pAd, IN PUCHAR pDest); VOID Update2040CoexistFrameAndNotify( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN BOOLEAN bAddIntolerantCha); VOID Send2040CoexistAction( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN BOOLEAN bAddIntolerantCha); VOID UpdateBssScanParm( IN PRTMP_ADAPTER pAd, IN OVERLAP_BSS_SCAN_IE APBssScan); #endif /* DOT11N_DRAFT3 */ VOID AsicEnableRalinkBurstMode( IN PRTMP_ADAPTER pAd); VOID AsicDisableRalinkBurstMode( IN PRTMP_ADAPTER pAd); #endif /* DOT11_N_SUPPORT */ VOID ActHeaderInit( IN PRTMP_ADAPTER pAd, IN OUT PHEADER_802_11 pHdr80211, IN PUCHAR Addr1, IN PUCHAR Addr2, IN PUCHAR Addr3); VOID BarHeaderInit( IN PRTMP_ADAPTER pAd, IN OUT PFRAME_BAR pCntlBar, IN PUCHAR pDA, IN PUCHAR pSA); VOID InsertActField( IN PRTMP_ADAPTER pAd, OUT PUCHAR pFrameBuf, OUT PULONG pFrameLen, IN UINT8 Category, IN UINT8 ActCode); BOOLEAN QosBADataParse( IN PRTMP_ADAPTER pAd, IN BOOLEAN bAMSDU, IN PUCHAR p8023Header, IN UCHAR WCID, IN UCHAR TID, IN USHORT Sequence, IN UCHAR DataOffset, IN USHORT Datasize, IN UINT CurRxIndex); #ifdef DOT11_N_SUPPORT BOOLEAN CntlEnqueueForRecv( IN PRTMP_ADAPTER pAd, IN ULONG Wcid, IN ULONG MsgLen, IN PFRAME_BA_REQ pMsg); VOID BaAutoManSwitch( IN PRTMP_ADAPTER pAd); #endif /* DOT11_N_SUPPORT */ VOID HTIOTCheck( IN PRTMP_ADAPTER pAd, IN UCHAR BatRecIdx); /* */ /* Private routines in rtmp_data.c */ /* */ BOOLEAN RTMPHandleTxRingDmaDoneInterrupt( IN PRTMP_ADAPTER pAd, IN UINT32 int_reg); VOID RTMPHandleMgmtRingDmaDoneInterrupt( IN PRTMP_ADAPTER pAd); VOID RTMPHandleTBTTInterrupt( IN PRTMP_ADAPTER pAd); VOID RTMPHandlePreTBTTInterrupt( IN PRTMP_ADAPTER pAd); void RTMPHandleTwakeupInterrupt( IN PRTMP_ADAPTER pAd); VOID RTMPHandleRxCoherentInterrupt( IN PRTMP_ADAPTER pAd); #ifdef CONFIG_AP_SUPPORT VOID RTMPHandleMcuInterrupt( IN PRTMP_ADAPTER pAd); #endif /* CONFIG_AP_SUPPORT */ NDIS_STATUS STASendPacket( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket); VOID STASendPackets( IN NDIS_HANDLE MiniportAdapterContext, IN PPNDIS_PACKET ppPacketArray, IN UINT NumberOfPackets); VOID RTMPDeQueuePacket( IN RTMP_ADAPTER *pAd, IN BOOLEAN bIntContext, IN UCHAR QueIdx, IN INT Max_Tx_Packets); NDIS_STATUS RTMPHardTransmit( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket, IN UCHAR QueIdx, OUT PULONG pFreeTXDLeft); NDIS_STATUS STAHardTransmit( IN PRTMP_ADAPTER pAd, IN TX_BLK *pTxBlk, IN UCHAR QueIdx); VOID STARxEAPOLFrameIndicate( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); NDIS_STATUS RTMPFreeTXDRequest( IN PRTMP_ADAPTER pAd, IN UCHAR RingType, IN UCHAR NumberRequired, IN PUCHAR FreeNumberIs); NDIS_STATUS MlmeHardTransmit( IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx, IN PNDIS_PACKET pPacket, IN BOOLEAN FlgDataQForce, IN BOOLEAN FlgIsLocked); NDIS_STATUS MlmeHardTransmitMgmtRing( IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx, IN PNDIS_PACKET pPacket); USHORT RTMPCalcDuration( IN RTMP_ADAPTER *pAd, IN UCHAR Rate, IN ULONG Size); VOID RTMPWriteTxWI( IN RTMP_ADAPTER *pAd, IN TXWI_STRUC *pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq, /* HW new a sequence. */ IN UCHAR BASize, IN UCHAR WCID, IN ULONG Length, IN UCHAR PID, IN UCHAR TID, IN UCHAR TxRate, IN UCHAR Txopmode, IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING *pTransmit); VOID RTMPWriteTxWI_Data( IN RTMP_ADAPTER *pAd, INOUT TXWI_STRUC *pTxWI, IN TX_BLK *pTxBlk); VOID RTMPWriteTxWI_Cache( IN RTMP_ADAPTER *pAd, INOUT TXWI_STRUC *pTxWI, IN TX_BLK *pTxBlk); VOID RTMPSuspendMsduTransmission( IN RTMP_ADAPTER *pAd); VOID RTMPResumeMsduTransmission( IN RTMP_ADAPTER *pAd); NDIS_STATUS MiniportMMRequest( IN RTMP_ADAPTER *pAd, IN UCHAR QueIdx, IN UCHAR *pData, IN UINT Length); VOID RTMPSendNullFrame( IN RTMP_ADAPTER *pAd, IN UCHAR TxRate, IN BOOLEAN bQosNull, IN USHORT PwrMgmt); #ifdef CONFIG_MULTI_CHANNEL VOID RTMPP2PSendNullFrame( IN PRTMP_ADAPTER pAd, IN UCHAR TxRate, IN BOOLEAN bQosNull, IN USHORT PwrMgmt); #endif /*CONFIG_MULTI_CHANNEL*/ BOOLEAN RTMPFreeTXDUponTxDmaDone( IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx); BOOLEAN RTMPCheckEtherType( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket, IN PMAC_TABLE_ENTRY pMacEntry, IN UCHAR OpMode, OUT PUCHAR pUserPriority, OUT PUCHAR pQueIdx); VOID RTMPCckBbpTuning( IN PRTMP_ADAPTER pAd, IN UINT TxRate); /* */ /* MLME routines */ /* */ /* Asic/RF/BBP related functions */ VOID AsicGetTxPowerOffset( IN PRTMP_ADAPTER pAd, IN PULONG TxPwr); VOID AsicGetAutoAgcOffsetForExternalTxAlc( IN PRTMP_ADAPTER pAd, IN PCHAR pDeltaPwr, IN PCHAR pTotalDeltaPwr, IN PCHAR pAgcCompensate, IN PCHAR pDeltaPowerByBbpR1); #ifdef RTMP_TEMPERATURE_COMPENSATION VOID AsicGetAutoAgcOffsetForTemperatureSensor( IN PRTMP_ADAPTER pAd, IN PCHAR pDeltaPwr, IN PCHAR pTotalDeltaPwr, IN PCHAR pAgcCompensate, IN PCHAR pDeltaPowerByBbpR1); #endif /* RTMP_TEMPERATURE_COMPENSATION */ #ifdef SINGLE_SKU VOID GetSingleSkuDeltaPower( IN PRTMP_ADAPTER pAd, IN PCHAR pTotalDeltaPower, INOUT PULONG pSingleSKUTotalDeltaPwr, INOUT PUCHAR pSingleSKUBbpR1Offset); #endif /* SINGLE_SKU*/ VOID AsicPercentageDeltaPower( IN PRTMP_ADAPTER pAd, IN CHAR Rssi, INOUT PCHAR pDeltaPwr, INOUT PCHAR pDeltaPowerByBbpR1); VOID AsicCompensatePowerViaBBP( IN PRTMP_ADAPTER pAd, INOUT PCHAR pTotalDeltaPower); VOID AsicAdjustTxPower( IN PRTMP_ADAPTER pAd); VOID AsicUpdateProtect( IN PRTMP_ADAPTER pAd, IN USHORT OperaionMode, IN UCHAR SetMask, IN BOOLEAN bDisableBGProtect, IN BOOLEAN bNonGFExist); VOID AsicBBPAdjust( IN RTMP_ADAPTER *pAd); VOID AsicSwitchChannel( IN PRTMP_ADAPTER pAd, IN UCHAR Channel, IN BOOLEAN bScan); INT AsicSetChannel( IN RTMP_ADAPTER *pAd, IN UCHAR ch, IN UCHAR bw, IN UCHAR ext_ch, IN BOOLEAN bScan); VOID AsicLockChannel( IN PRTMP_ADAPTER pAd, IN UCHAR Channel) ; VOID AsicAntennaSelect( IN PRTMP_ADAPTER pAd, IN UCHAR Channel); VOID AsicResetBBPAgent( IN PRTMP_ADAPTER pAd); VOID AsicSetBssid( IN PRTMP_ADAPTER pAd, IN PUCHAR pBssid); VOID AsicSetMcastWC( IN PRTMP_ADAPTER pAd); VOID AsicDelWcidTab( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid); #ifdef DOT11_N_SUPPORT VOID AsicEnableRDG( IN PRTMP_ADAPTER pAd); VOID AsicDisableRDG( IN PRTMP_ADAPTER pAd); #endif /* DOT11_N_SUPPORT */ VOID AsicDisableSync( IN PRTMP_ADAPTER pAd); VOID AsicEnableBssSync( IN PRTMP_ADAPTER pAd); VOID AsicEnableIbssSync( IN PRTMP_ADAPTER pAd); VOID AsicSetEdcaParm( IN PRTMP_ADAPTER pAd, IN PEDCA_PARM pEdcaParm); VOID AsicSetSlotTime( IN PRTMP_ADAPTER pAd, IN BOOLEAN bUseShortSlotTime); VOID AsicAddSharedKeyEntry( IN PRTMP_ADAPTER pAd, IN UCHAR BssIndex, IN UCHAR KeyIdx, IN PCIPHER_KEY pCipherKey); VOID AsicRemoveSharedKeyEntry( IN PRTMP_ADAPTER pAd, IN UCHAR BssIndex, IN UCHAR KeyIdx); VOID AsicUpdateWCIDIVEIV( IN PRTMP_ADAPTER pAd, IN USHORT WCID, IN ULONG uIV, IN ULONG uEIV); VOID AsicUpdateRxWCIDTable( IN PRTMP_ADAPTER pAd, IN USHORT WCID, IN PUCHAR pAddr); VOID AsicUpdateWcidAttributeEntry( IN PRTMP_ADAPTER pAd, IN UCHAR BssIdx, IN UCHAR KeyIdx, IN UCHAR CipherAlg, IN UINT8 Wcid, IN UINT8 KeyTabFlag); VOID AsicAddPairwiseKeyEntry( IN PRTMP_ADAPTER pAd, IN UCHAR WCID, IN PCIPHER_KEY pCipherKey); VOID AsicRemovePairwiseKeyEntry( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid); BOOLEAN AsicSendCommandToMcu( IN PRTMP_ADAPTER pAd, IN UCHAR Command, IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1, IN BOOLEAN in_atomic); BOOLEAN AsicSendCommandToMcuBBP( IN PRTMP_ADAPTER pAd, IN UCHAR Command, IN UCHAR Token, IN UCHAR Arg0, IN UCHAR Arg1, IN BOOLEAN FlgIsNeedLocked); #ifdef WAPI_SUPPORT VOID AsicUpdateWAPIPN( IN PRTMP_ADAPTER pAd, IN USHORT WCID, IN ULONG pn_low, IN ULONG pn_high); #endif /* WAPI_SUPPORT */ #ifdef VCORECAL_SUPPORT VOID AsicVCORecalibration( IN PRTMP_ADAPTER pAd); #endif /* VCORECAL_SUPPORT */ #ifdef STREAM_MODE_SUPPORT UINT32 StreamModeRegVal( IN RTMP_ADAPTER *pAd); VOID AsicSetStreamMode( IN RTMP_ADAPTER *pAd, IN PUCHAR pMacAddr, IN INT chainIdx, IN BOOLEAN bEnabled); VOID RtmpStreamModeInit( IN RTMP_ADAPTER *pAd); /* Update the Tx chain address Parameters pAd: The adapter data structure pMacAddress: The MAC address of the peer STA Return Value: None */ VOID AsicUpdateTxChainAddress( IN PRTMP_ADAPTER pAd, IN PUCHAR pMacAddress); INT Set_StreamMode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_StreamModeMac_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_StreamModeMCS_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* STREAM_MODE_SUPPORT */ #ifdef WOW_SUPPORT #ifdef RTMP_MAC_USB /* For WOW, 8051 MUC send full frame */ VOID AsicWOWSendNullFrame( IN PRTMP_ADAPTER pAd, IN UCHAR TxRate, IN BOOLEAN bQosNull); VOID AsicLoadWOWFirmware( IN PRTMP_ADAPTER pAd, IN BOOLEAN WOW); #endif /* RTMP_MAC_USB */ #endif /* WOW_SUPPORT */ VOID MacAddrRandomBssid( IN PRTMP_ADAPTER pAd, OUT PUCHAR pAddr); VOID MgtMacHeaderInit( IN PRTMP_ADAPTER pAd, IN OUT PHEADER_802_11 pHdr80211, IN UCHAR SubType, IN UCHAR ToDs, IN PUCHAR pDA, IN PUCHAR pBssid); VOID MlmeRadioOff( IN PRTMP_ADAPTER pAd); VOID MlmeRadioOn( IN PRTMP_ADAPTER pAd); VOID BssTableInit( IN BSS_TABLE *Tab); #ifdef DOT11_N_SUPPORT VOID BATableInit( IN PRTMP_ADAPTER pAd, IN BA_TABLE *Tab); VOID BATableExit( IN RTMP_ADAPTER *pAd); #endif /* DOT11_N_SUPPORT */ ULONG BssTableSearch( IN BSS_TABLE *Tab, IN PUCHAR pBssid, IN UCHAR Channel); ULONG BssSsidTableSearch( IN BSS_TABLE *Tab, IN PUCHAR pBssid, IN PUCHAR pSsid, IN UCHAR SsidLen, IN UCHAR Channel); ULONG BssTableSearchWithSSID( IN BSS_TABLE *Tab, IN PUCHAR Bssid, IN PUCHAR pSsid, IN UCHAR SsidLen, IN UCHAR Channel); ULONG BssSsidTableSearchBySSID( IN BSS_TABLE *Tab, IN PUCHAR pSsid, IN UCHAR SsidLen); VOID BssTableDeleteEntry( IN OUT PBSS_TABLE pTab, IN PUCHAR pBssid, IN UCHAR Channel); ULONG BssTableSetEntry( IN PRTMP_ADAPTER pAd, OUT BSS_TABLE *Tab, IN BCN_IE_LIST *ie_list, IN CHAR Rssi, IN USHORT LengthVIE, IN PNDIS_802_11_VARIABLE_IEs pVIE); #ifdef DOT11_N_SUPPORT VOID BATableInsertEntry( IN PRTMP_ADAPTER pAd, IN USHORT Aid, IN USHORT TimeOutValue, IN USHORT StartingSeq, IN UCHAR TID, IN UCHAR BAWinSize, IN UCHAR OriginatorStatus, IN BOOLEAN IsRecipient); #ifdef DOT11N_DRAFT3 VOID Bss2040CoexistTimeOut( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID TriEventInit( IN PRTMP_ADAPTER pAd); INT TriEventTableSetEntry( IN PRTMP_ADAPTER pAd, OUT TRIGGER_EVENT_TAB *Tab, IN PUCHAR pBssid, IN HT_CAPABILITY_IE *pHtCapability, IN UCHAR HtCapabilityLen, IN UCHAR RegClass, IN UCHAR ChannelNo); #endif /* DOT11N_DRAFT3 */ #endif /* DOT11_N_SUPPORT */ VOID BssTableSsidSort( IN PRTMP_ADAPTER pAd, OUT BSS_TABLE *OutTab, IN CHAR Ssid[], IN UCHAR SsidLen); VOID BssTableSortByRssi( IN OUT BSS_TABLE *OutTab); VOID BssCipherParse( IN OUT PBSS_ENTRY pBss); NDIS_STATUS MlmeQueueInit( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE *Queue); VOID MlmeQueueDestroy( IN MLME_QUEUE *Queue); BOOLEAN MlmeEnqueue( IN PRTMP_ADAPTER pAd, IN ULONG Machine, IN ULONG MsgType, IN ULONG MsgLen, IN VOID *Msg, IN ULONG Priv); BOOLEAN MlmeEnqueueForRecv( IN PRTMP_ADAPTER pAd, IN ULONG Wcid, IN ULONG TimeStampHigh, IN ULONG TimeStampLow, IN UCHAR Rssi0, IN UCHAR Rssi1, IN UCHAR Rssi2, IN UCHAR AntSel, IN ULONG MsgLen, IN PVOID Msg, IN UCHAR Signal, IN UCHAR OpMode); #ifdef WSC_INCLUDED BOOLEAN MlmeEnqueueForWsc( IN PRTMP_ADAPTER pAd, IN ULONG eventID, IN LONG senderID, IN ULONG Machine, IN ULONG MsgType, IN ULONG MsgLen, IN VOID *Msg); #endif /* WSC_INCLUDED */ BOOLEAN MlmeDequeue( IN MLME_QUEUE *Queue, OUT MLME_QUEUE_ELEM **Elem); VOID MlmeRestartStateMachine( IN PRTMP_ADAPTER pAd); BOOLEAN MlmeQueueEmpty( IN MLME_QUEUE *Queue); BOOLEAN MlmeQueueFull( IN MLME_QUEUE *Queue, IN UCHAR SendId); BOOLEAN MsgTypeSubst( IN PRTMP_ADAPTER pAd, IN PFRAME_802_11 pFrame, OUT INT *Machine, OUT INT *MsgType); VOID StateMachineInit( IN STATE_MACHINE *Sm, IN STATE_MACHINE_FUNC Trans[], IN ULONG StNr, IN ULONG MsgNr, IN STATE_MACHINE_FUNC DefFunc, IN ULONG InitState, IN ULONG Base); VOID StateMachineSetAction( IN STATE_MACHINE *S, IN ULONG St, ULONG Msg, IN STATE_MACHINE_FUNC F); VOID StateMachinePerformAction( IN PRTMP_ADAPTER pAd, IN STATE_MACHINE *S, IN MLME_QUEUE_ELEM *Elem, IN ULONG CurrState); VOID Drop( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID AssocStateMachineInit( IN PRTMP_ADAPTER pAd, IN STATE_MACHINE *Sm, OUT STATE_MACHINE_FUNC Trans[]); VOID ReassocTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID AssocTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID DisassocTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); /*---------------------------------------------- */ VOID MlmeDisassocReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeAssocReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeReassocReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeDisassocReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerAssocRspAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerReassocRspAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerDisassocAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID DisassocTimeoutAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID AssocTimeoutAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID ReassocTimeoutAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID Cls3errAction( IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); VOID InvalidStateWhenAssoc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID InvalidStateWhenReassoc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID InvalidStateWhenDisassociate( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #ifdef RTMP_MAC_USB VOID MlmeCntlConfirm( IN PRTMP_ADAPTER pAd, IN ULONG MsgType, IN USHORT Msg); #endif /* RTMP_MAC_USB */ VOID ComposePsPoll( IN PRTMP_ADAPTER pAd); VOID ComposeNullFrame( IN PRTMP_ADAPTER pAd); VOID AssocPostProc( IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr2, IN USHORT CapabilityInfo, IN USHORT Aid, IN UCHAR SupRate[], IN UCHAR SupRateLen, IN UCHAR ExtRate[], IN UCHAR ExtRateLen, IN PEDCA_PARM pEdcaParm, IN IE_LISTS *ie_list, IN HT_CAPABILITY_IE *pHtCapability, IN UCHAR HtCapabilityLen, IN ADD_HT_INFO_IE *pAddHtInfo); VOID AuthStateMachineInit( IN PRTMP_ADAPTER pAd, IN PSTATE_MACHINE sm, OUT STATE_MACHINE_FUNC Trans[]); VOID AuthTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID MlmeAuthReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerAuthRspAtSeq2Action( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerAuthRspAtSeq4Action( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID AuthTimeoutAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID Cls2errAction( IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr); VOID MlmeDeauthReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID InvalidStateWhenAuth( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); /*============================================= */ VOID AuthRspStateMachineInit( IN PRTMP_ADAPTER pAd, IN PSTATE_MACHINE Sm, IN STATE_MACHINE_FUNC Trans[]); VOID PeerDeauthAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerAuthSimpleRspGenAndSend( IN PRTMP_ADAPTER pAd, IN PHEADER_802_11 pHdr80211, IN USHORT Alg, IN USHORT Seq, IN USHORT Reason, IN USHORT Status); /* */ /* Private routines in dls.c */ /* */ #ifdef CONFIG_AP_SUPPORT #ifdef QOS_DLS_SUPPORT VOID APDLSStateMachineInit( IN PRTMP_ADAPTER pAd, IN STATE_MACHINE *S, OUT STATE_MACHINE_FUNC Trans[]); VOID APPeerDlsReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID APPeerDlsRspAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID APPeerDlsTearDownAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #endif /* QOS_DLS_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ #ifdef QOS_DLS_SUPPORT BOOLEAN PeerDlsReqSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pDA, OUT PUCHAR pSA, OUT USHORT *pCapabilityInfo, OUT USHORT *pDlsTimeout, OUT UCHAR *pRatesLen, OUT UCHAR Rates[], OUT UCHAR *pHtCapabilityLen, OUT HT_CAPABILITY_IE *pHtCapability); BOOLEAN PeerDlsRspSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pDA, OUT PUCHAR pSA, OUT USHORT *pCapabilityInfo, OUT USHORT *pStatus, OUT UCHAR *pRatesLen, OUT UCHAR Rates[], OUT UCHAR *pHtCapabilityLen, OUT HT_CAPABILITY_IE *pHtCapability); BOOLEAN PeerDlsTearDownSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pDA, OUT PUCHAR pSA, OUT USHORT *pReason); #endif /* QOS_DLS_SUPPORT */ BOOLEAN PeerProbeReqSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT CHAR Ssid[], OUT UCHAR *SsidLen, OUT BOOLEAN *bRequestRssi); /*======================================== */ VOID SyncStateMachineInit( IN PRTMP_ADAPTER pAd, IN STATE_MACHINE *Sm, OUT STATE_MACHINE_FUNC Trans[]); VOID BeaconTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID ScanTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID MlmeScanReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID InvalidStateWhenScan( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID InvalidStateWhenJoin( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID InvalidStateWhenStart( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerBeacon( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID EnqueueProbeRequest( IN PRTMP_ADAPTER pAd); BOOLEAN ScanRunning( IN PRTMP_ADAPTER pAd); /*========================================= */ VOID MlmeCntlInit( IN PRTMP_ADAPTER pAd, IN STATE_MACHINE *S, OUT STATE_MACHINE_FUNC Trans[]); VOID MlmeCntlMachinePerformAction( IN PRTMP_ADAPTER pAd, IN STATE_MACHINE *S, IN MLME_QUEUE_ELEM *Elem); VOID CntlIdleProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID CntlOidScanProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID CntlOidSsidProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); VOID CntlOidRTBssidProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); VOID CntlMlmeRoamingProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM * Elem); VOID CntlWaitDisassocProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID CntlWaitJoinProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID CntlWaitReassocProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID CntlWaitStartProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID CntlWaitAuthProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID CntlWaitAuthProc2( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID CntlWaitAssocProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #ifdef QOS_DLS_SUPPORT VOID CntlOidDLSSetupProc( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); #endif /* QOS_DLS_SUPPORT */ VOID LinkUp( IN PRTMP_ADAPTER pAd, IN UCHAR BssType); VOID LinkDown( IN PRTMP_ADAPTER pAd, IN BOOLEAN IsReqFromAP); VOID IterateOnBssTab( IN PRTMP_ADAPTER pAd); VOID IterateOnBssTab2( IN PRTMP_ADAPTER pAd);; VOID JoinParmFill( IN PRTMP_ADAPTER pAd, IN OUT MLME_JOIN_REQ_STRUCT *JoinReq, IN ULONG BssIdx); VOID AssocParmFill( IN PRTMP_ADAPTER pAd, IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq, IN PUCHAR pAddr, IN USHORT CapabilityInfo, IN ULONG Timeout, IN USHORT ListenIntv); VOID ScanParmFill( IN PRTMP_ADAPTER pAd, IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, IN STRING Ssid[], IN UCHAR SsidLen, IN UCHAR BssType, IN UCHAR ScanType); VOID DisassocParmFill( IN PRTMP_ADAPTER pAd, IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq, IN PUCHAR pAddr, IN USHORT Reason); VOID StartParmFill( IN PRTMP_ADAPTER pAd, IN OUT MLME_START_REQ_STRUCT *StartReq, IN CHAR Ssid[], IN UCHAR SsidLen); VOID AuthParmFill( IN PRTMP_ADAPTER pAd, IN OUT MLME_AUTH_REQ_STRUCT *AuthReq, IN PUCHAR pAddr, IN USHORT Alg); VOID EnqueuePsPoll( IN PRTMP_ADAPTER pAd); VOID EnqueueBeaconFrame( IN PRTMP_ADAPTER pAd); VOID MlmeJoinReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeScanReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeStartReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeForceJoinReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID MlmeForceScanReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID ScanTimeoutAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID BeaconTimeoutAtJoinAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerBeaconAtScanAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerBeaconAtJoinAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerBeacon( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID PeerProbeReqAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID ScanNextChannel( IN PRTMP_ADAPTER pAd, IN UCHAR OpMode); ULONG MakeIbssBeacon( IN PRTMP_ADAPTER pAd); BOOLEAN MlmeScanReqSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT UCHAR *BssType, OUT CHAR ssid[], OUT UCHAR *SsidLen, OUT UCHAR *ScanType); BOOLEAN PeerBeaconAndProbeRspSanity_Old( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, IN UCHAR MsgChannel, OUT PUCHAR pAddr2, OUT PUCHAR pBssid, OUT CHAR Ssid[], OUT UCHAR *pSsidLen, OUT UCHAR *pBssType, OUT USHORT *pBeaconPeriod, OUT UCHAR *pChannel, OUT UCHAR *pNewChannel, OUT LARGE_INTEGER *pTimestamp, OUT CF_PARM *pCfParm, OUT USHORT *pAtimWin, OUT USHORT *pCapabilityInfo, OUT UCHAR *pErp, OUT UCHAR *pDtimCount, OUT UCHAR *pDtimPeriod, OUT UCHAR *pBcastFlag, OUT UCHAR *pMessageToMe, OUT UCHAR SupRate[], OUT UCHAR *pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR *pExtRateLen, OUT UCHAR *pCkipFlag, OUT UCHAR *pAironetCellPowerLimit, OUT PEDCA_PARM pEdcaParm, OUT PQBSS_LOAD_PARM pQbssLoad, OUT PQOS_CAPABILITY_PARM pQosCapability, OUT ULONG *pRalinkIe, OUT UCHAR *pHtCapabilityLen, OUT HT_CAPABILITY_IE *pHtCapability, OUT EXT_CAP_INFO_ELEMENT *pExtCapInfo, OUT UCHAR *AddHtInfoLen, OUT ADD_HT_INFO_IE *AddHtInfo, OUT UCHAR *NewExtChannel, OUT USHORT *LengthVIE, OUT PNDIS_802_11_VARIABLE_IEs pVIE); BOOLEAN PeerBeaconAndProbeRspSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, IN UCHAR MsgChannel, OUT BCN_IE_LIST *ie_list, OUT USHORT *LengthVIE, OUT PNDIS_802_11_VARIABLE_IEs pVIE); #ifdef DOT11_N_SUPPORT #ifdef DOT11N_DRAFT3 BOOLEAN PeerBeaconAndProbeRspSanity2( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, IN OVERLAP_BSS_SCAN_IE *BssScan, OUT UCHAR *RegClass); #endif /* DOT11N_DRAFT3 */ #endif /* DOT11_N_SUPPORT */ BOOLEAN PeerAddBAReqActionSanity( IN PRTMP_ADAPTER pAd, IN VOID *pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2); BOOLEAN PeerAddBARspActionSanity( IN PRTMP_ADAPTER pAd, IN VOID *pMsg, IN ULONG MsgLen); BOOLEAN PeerDelBAActionSanity( IN PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN VOID *pMsg, IN ULONG MsgLen); BOOLEAN MlmeAssocReqSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pApAddr, OUT USHORT *CapabilityInfo, OUT ULONG *Timeout, OUT USHORT *ListenIntv); BOOLEAN MlmeAuthReqSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pAddr, OUT ULONG *Timeout, OUT USHORT *Alg); BOOLEAN MlmeStartReqSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT CHAR Ssid[], OUT UCHAR *Ssidlen); BOOLEAN PeerAuthSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pAddr, OUT USHORT *Alg, OUT USHORT *Seq, OUT USHORT *Status, OUT CHAR ChlgText[]); BOOLEAN PeerAssocRspSanity( IN PRTMP_ADAPTER pAd, IN VOID *pMsg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT *pCapabilityInfo, OUT USHORT *pStatus, OUT USHORT *pAid, OUT UCHAR SupRate[], OUT UCHAR *pSupRateLen, OUT UCHAR ExtRate[], OUT UCHAR *pExtRateLen, OUT HT_CAPABILITY_IE *pHtCapability, OUT ADD_HT_INFO_IE *pAddHtInfo, /* AP might use this additional ht info IE */ OUT UCHAR *pHtCapabilityLen, OUT UCHAR *pAddHtInfoLen, OUT UCHAR *pNewExtChannelOffset, OUT PEDCA_PARM pEdcaParm, OUT EXT_CAP_INFO_ELEMENT *pExtCapInfo, OUT UCHAR *pCkipFlag, OUT IE_LISTS *ie_list); BOOLEAN PeerDisassocSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pAddr2, OUT USHORT *Reason); BOOLEAN PeerDeauthSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pAddr1, OUT PUCHAR pAddr2, OUT PUCHAR pAddr3, OUT USHORT *Reason); BOOLEAN GetTimBit( IN CHAR *Ptr, IN USHORT Aid, OUT UCHAR *TimLen, OUT UCHAR *BcastFlag, OUT UCHAR *DtimCount, OUT UCHAR *DtimPeriod, OUT UCHAR *MessageToMe); UCHAR ChannelSanity( IN PRTMP_ADAPTER pAd, IN UCHAR channel); NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity( IN PBSS_ENTRY pBss); BOOLEAN MlmeDelBAReqSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen); BOOLEAN MlmeAddBAReqSanity( IN PRTMP_ADAPTER pAd, IN VOID *Msg, IN ULONG MsgLen, OUT PUCHAR pAddr2); ULONG MakeOutgoingFrame( OUT UCHAR *Buffer, OUT ULONG *Length, ...); UCHAR RandomByte( IN PRTMP_ADAPTER pAd); UCHAR RandomByte2( IN PRTMP_ADAPTER pAd); VOID AsicUpdateAutoFallBackTable( IN PRTMP_ADAPTER pAd, IN PUCHAR pTxRate); VOID MlmePeriodicExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID LinkDownExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID LinkUpExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID STAMlmePeriodicExec( PRTMP_ADAPTER pAd); VOID MlmeAutoScan( IN PRTMP_ADAPTER pAd); VOID MlmeAutoReconnectLastSSID( IN PRTMP_ADAPTER pAd); BOOLEAN MlmeValidateSSID( IN PUCHAR pSsid, IN UCHAR SsidLen); VOID MlmeCheckForRoaming( IN PRTMP_ADAPTER pAd, IN ULONG Now32); BOOLEAN MlmeCheckForFastRoaming( IN PRTMP_ADAPTER pAd); #ifdef TXBF_SUPPORT BOOLEAN MlmeTxBfAllowed( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN struct _RTMP_RA_LEGACY_TB *pTxRate); #endif /* TXBF_SUPPORT */ #ifdef AGS_SUPPORT INT Show_AGS_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef CONFIG_AP_SUPPORT VOID ApMlmeDynamicTxRateSwitchingAGS( IN RTMP_ADAPTER *pAd, IN INT idx); VOID ApQuickResponeForRateUpExecAGS( IN RTMP_ADAPTER *pAd, IN INT idx); #endif /* CONFIG_AP_SUPPORT */ #endif /* AGS_SUPPORT */ VOID MlmeCalculateChannelQuality( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pMacEntry, IN ULONG Now); VOID MlmeCheckPsmChange( IN PRTMP_ADAPTER pAd, IN ULONG Now32); VOID MlmeSetPsmBit( IN PRTMP_ADAPTER pAd, IN USHORT psm); VOID MlmeSetTxPreamble( IN PRTMP_ADAPTER pAd, IN USHORT TxPreamble); VOID UpdateBasicRateBitmap( IN PRTMP_ADAPTER pAd); VOID MlmeUpdateTxRates( IN PRTMP_ADAPTER pAd, IN BOOLEAN bLinkUp, IN UCHAR apidx); #ifdef DOT11_N_SUPPORT VOID MlmeUpdateHtTxRates( IN PRTMP_ADAPTER pAd, IN UCHAR apidx); #endif /* DOT11_N_SUPPORT */ VOID RTMPCheckRates( IN PRTMP_ADAPTER pAd, IN OUT UCHAR SupRate[], IN OUT UCHAR *SupRateLen); BOOLEAN RTMPCheckHt( IN RTMP_ADAPTER *pAd, IN UCHAR Wcid, INOUT HT_CAPABILITY_IE *pHtCapability, INOUT ADD_HT_INFO_IE *pAddHtInfo); #ifdef DOT11_VHT_AC BOOLEAN RTMPCheckVht( IN RTMP_ADAPTER *pAd, IN UCHAR Wcid, IN VHT_CAP_IE *vht_cap, IN VHT_OP_IE *vht_op); #endif /* DOT11_VHT_AC */ VOID RTMPUpdateMlmeRate( IN PRTMP_ADAPTER pAd); CHAR RTMPMaxRssi( IN PRTMP_ADAPTER pAd, IN CHAR Rssi0, IN CHAR Rssi1, IN CHAR Rssi2); CHAR RTMPAvgRssi( IN PRTMP_ADAPTER pAd, IN RSSI_SAMPLE *pRssi); CHAR RTMPMinSnr( IN PRTMP_ADAPTER pAd, IN CHAR Snr0, IN CHAR Snr1); VOID AsicSetRxAnt( IN PRTMP_ADAPTER pAd, IN UCHAR Ant); #ifdef RTMP_EFUSE_SUPPORT INT set_eFuseGetFreeBlockCount_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT set_eFusedump_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT set_eFuseLoadFromBin_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); VOID eFusePhysicalReadRegisters( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN USHORT Length, OUT USHORT* pData); int RtmpEfuseSupportCheck( IN RTMP_ADAPTER *pAd); #ifdef RALINK_ATE INT set_eFuseBufferModeWriteBack_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* RALINK_ATE */ #endif /* RTMP_EFUSE_SUPPORT */ VOID AsicEvaluateRxAnt( IN PRTMP_ADAPTER pAd); VOID AsicRxAntEvalTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID APSDPeriodicExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); BOOLEAN RTMPCheckEntryEnableAutoRateSwitch( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry); UCHAR RTMPStaFixedTxMode( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry); VOID RTMPUpdateLegacyTxSetting( UCHAR fixed_tx_mode, PMAC_TABLE_ENTRY pEntry); BOOLEAN RTMPAutoRateSwitchCheck( IN PRTMP_ADAPTER pAd); NDIS_STATUS MlmeInit( IN PRTMP_ADAPTER pAd); #ifdef RTMP_TEMPERATURE_COMPENSATION VOID InitLookupTable( IN PRTMP_ADAPTER pAd); #endif /* RTMP_TEMPERATURE_COMPENSATION */ VOID MlmeHandler( IN PRTMP_ADAPTER pAd); VOID MlmeHalt( IN PRTMP_ADAPTER pAd); VOID MlmeResetRalinkCounters( IN PRTMP_ADAPTER pAd); VOID BuildChannelList( IN PRTMP_ADAPTER pAd); UCHAR FirstChannel( IN PRTMP_ADAPTER pAd); UCHAR NextChannel( IN PRTMP_ADAPTER pAd, IN UCHAR channel); VOID ChangeToCellPowerLimit( IN PRTMP_ADAPTER pAd, IN UCHAR AironetCellPowerLimit); /* */ /* Prototypes of function definition in cmm_tkip.c */ /* */ VOID RTMPInitMICEngine( IN PRTMP_ADAPTER pAd, IN PUCHAR pKey, IN PUCHAR pDA, IN PUCHAR pSA, IN UCHAR UserPriority, IN PUCHAR pMICKey); BOOLEAN RTMPTkipCompareMICValue( IN PRTMP_ADAPTER pAd, IN PUCHAR pSrc, IN PUCHAR pDA, IN PUCHAR pSA, IN PUCHAR pMICKey, IN UCHAR UserPriority, IN UINT Len); VOID RTMPCalculateMICValue( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket, IN PUCHAR pEncap, IN PCIPHER_KEY pKey, IN UCHAR apidx); VOID RTMPTkipAppendByte( IN PTKIP_KEY_INFO pTkip, IN UCHAR uChar); VOID RTMPTkipAppend( IN PTKIP_KEY_INFO pTkip, IN PUCHAR pSrc, IN UINT nBytes); VOID RTMPTkipGetMIC( IN PTKIP_KEY_INFO pTkip); /* */ /* Prototypes of function definition in cmm_cfg.c */ /* */ INT RT_CfgSetCountryRegion( IN PRTMP_ADAPTER pAd, IN PSTRING arg, IN INT band); INT RT_CfgSetWirelessMode( IN PRTMP_ADAPTER pAd, IN PSTRING arg); UCHAR cfgmode_2_wmode(UCHAR cfg_mode); UCHAR wmode_2_cfgmode(UCHAR wmode); UCHAR *wmode_2_str(UCHAR wmode); #ifdef CONFIG_AP_SUPPORT #ifdef MBSS_SUPPORT INT RT_CfgSetMbssWirelessMode( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* MBSS_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ INT RT_CfgSetShortSlot( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT RT_CfgSetWepKey( IN PRTMP_ADAPTER pAd, IN PSTRING keyString, IN CIPHER_KEY *pSharedKey, IN INT keyIdx); INT RT_CfgSetWPAPSKKey( IN RTMP_ADAPTER *pAd, IN PSTRING keyString, IN INT keyStringLen, IN UCHAR *pHashStr, IN INT hashStrLen, OUT PUCHAR pPMKBuf); INT RT_CfgSetFixedTxPhyMode( IN PSTRING arg); INT RT_CfgSetMacAddress( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT RT_CfgSetTxMCSProc( IN PSTRING arg, OUT BOOLEAN *pAutoRate); INT RT_CfgSetAutoFallBack( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef WSC_INCLUDED INT RT_CfgSetWscPinCode( IN RTMP_ADAPTER *pAd, IN PSTRING pPinCodeStr, OUT PWSC_CTRL pWscControl); #endif /* WSC_INCLUDED */ INT Set_Antenna_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef MICROWAVE_OVEN_SUPPORT INT Set_MO_FalseCCATh_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* MICROWAVE_OVEN_SUPPORT */ /* */ /* Prototypes of function definition in cmm_info.c */ /* */ NDIS_STATUS RTMPWPARemoveKeyProc( IN PRTMP_ADAPTER pAd, IN PVOID pBuf); VOID RTMPWPARemoveAllKeys( IN PRTMP_ADAPTER pAd); BOOLEAN RTMPCheckStrPrintAble( IN CHAR *pInPutStr, IN UCHAR strLen); VOID RTMPSetPhyMode( IN PRTMP_ADAPTER pAd, IN ULONG phymode); VOID RTMPUpdateHTIE( IN RT_HT_CAPABILITY *pRtHt, IN UCHAR *pMcsSet, OUT HT_CAPABILITY_IE *pHtCapability, OUT ADD_HT_INFO_IE *pAddHtInfo); VOID RTMPAddWcidAttributeEntry( IN PRTMP_ADAPTER pAd, IN UCHAR BssIdx, IN UCHAR KeyIdx, IN UCHAR CipherAlg, IN MAC_TABLE_ENTRY *pEntry); PSTRING GetEncryptType( CHAR enc); PSTRING GetAuthMode( CHAR auth); #ifdef DOT11_N_SUPPORT VOID RTMPSetHT( IN PRTMP_ADAPTER pAd, IN OID_SET_HT_PHYMODE *pHTPhyMode); VOID RTMPSetIndividualHT( IN PRTMP_ADAPTER pAd, IN UCHAR apidx); UCHAR get_cent_ch_by_htinfo( RTMP_ADAPTER *pAd, ADD_HT_INFO_IE *ht_op, HT_CAPABILITY_IE *ht_cap); INT get_ht_cent_ch(RTMP_ADAPTER *pAd, UCHAR *rf_bw, UCHAR *ext_ch); INT ht_mode_adjust(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, HT_CAPABILITY_IE *peer, RT_HT_CAPABILITY *my); INT set_ht_fixed_mcs(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, UCHAR fixed_mcs, UCHAR mcs_bound); INT get_ht_max_mcs(RTMP_ADAPTER *pAd, UCHAR *desire_mcs, UCHAR *cap_mcs); #endif /* DOT11_N_SUPPORT */ VOID RTMPDisableDesiredHtInfo( IN PRTMP_ADAPTER pAd); #ifdef SYSTEM_LOG_SUPPORT VOID RtmpDrvSendWirelessEvent( IN VOID *pAdSrc, IN USHORT Event_flag, IN PUCHAR pAddr, IN UCHAR BssIdx, IN CHAR Rssi); #else #define RtmpDrvSendWirelessEvent(_pAd, _Event_flag, _pAddr, _BssIdx, _Rssi) #endif /* SYSTEM_LOG_SUPPORT */ CHAR ConvertToRssi( IN PRTMP_ADAPTER pAd, IN CHAR Rssi, IN UCHAR RssiNumber, IN UCHAR AntSel, IN UCHAR BW); CHAR ConvertToSnr( IN PRTMP_ADAPTER pAd, IN UCHAR Snr); #ifdef DOT11N_DRAFT3 VOID BuildEffectedChannelList( IN PRTMP_ADAPTER pAd); VOID DeleteEffectedChannelList( IN PRTMP_ADAPTER pAd); VOID CntlChannelWidth( IN PRTMP_ADAPTER pAd, IN UCHAR PrimaryChannel, IN UCHAR CentralChannel, IN UCHAR ChannelWidth, IN UCHAR SecondaryChannelOffset); #endif /* DOT11N_DRAFT3 */ VOID APAsicEvaluateRxAnt( IN PRTMP_ADAPTER pAd); VOID APAsicRxAntEvalTimeout( IN PRTMP_ADAPTER pAd); /* */ /* function prototype in ap_wpa.c */ /* */ VOID RTMPGetTxTscFromAsic( IN PRTMP_ADAPTER pAd, IN UCHAR apidx, OUT PUCHAR pTxTsc); MAC_TABLE_ENTRY *PACInquiry( IN PRTMP_ADAPTER pAd, IN ULONG Wcid); UINT APValidateRSNIE( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN PUCHAR pRsnIe, IN UCHAR rsnie_len); VOID HandleCounterMeasure( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry); VOID WPAStart4WayHS( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry, IN ULONG TimeInterval); VOID WPAStart2WayGroupHS( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry); VOID PeerPairMsg1Action( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry, IN MLME_QUEUE_ELEM *Elem); VOID PeerPairMsg2Action( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry, IN MLME_QUEUE_ELEM *Elem); VOID PeerPairMsg3Action( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry, IN MLME_QUEUE_ELEM *Elem); VOID PeerPairMsg4Action( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry, IN MLME_QUEUE_ELEM *Elem); VOID PeerGroupMsg1Action( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN MLME_QUEUE_ELEM *Elem); VOID PeerGroupMsg2Action( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN VOID *Msg, IN UINT MsgLen); VOID CMTimerExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID WPARetryExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); #ifdef TXBF_SUPPORT VOID eTxBfProbeTimerExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); #endif /* TXBF_SUPPORT */ VOID EnqueueStartForPSKExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID RTMPHandleSTAKey( IN PRTMP_ADAPTER pAdapter, IN MAC_TABLE_ENTRY *pEntry, IN MLME_QUEUE_ELEM *Elem); VOID MlmeDeAuthAction( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN USHORT Reason, IN BOOLEAN bDataFrameFirst); VOID GREKEYPeriodicExec( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID AES_128_CMAC( IN PUCHAR key, IN PUCHAR input, IN INT len, OUT PUCHAR mac); #ifdef DOT1X_SUPPORT VOID WpaSend( IN PRTMP_ADAPTER pAdapter, IN PUCHAR pPacket, IN ULONG Len); VOID RTMPAddPMKIDCache( IN PRTMP_ADAPTER pAd, IN INT apidx, IN PUCHAR pAddr, IN UCHAR *PMKID, IN UCHAR *PMK); INT RTMPSearchPMKIDCache( IN PRTMP_ADAPTER pAd, IN INT apidx, IN PUCHAR pAddr); VOID RTMPDeletePMKIDCache( IN PRTMP_ADAPTER pAd, IN INT apidx, IN INT idx); VOID RTMPMaintainPMKIDCache( IN PRTMP_ADAPTER pAd); #else #define RTMPMaintainPMKIDCache(_pAd) #endif /* DOT1X_SUPPORT */ #ifdef RESOURCE_PRE_ALLOC VOID RTMPResetTxRxRingMemory( IN RTMP_ADAPTER *pAd); #endif /* RESOURCE_PRE_ALLOC */ VOID RTMPFreeTxRxRingMemory( IN PRTMP_ADAPTER pAd); BOOLEAN RTMP_FillTxBlkInfo( IN RTMP_ADAPTER *pAd, IN TX_BLK *pTxBlk); void announce_802_3_packet( IN VOID *pAdSrc, IN PNDIS_PACKET pPacket, IN UCHAR OpMode); #ifdef DOT11_N_SUPPORT UINT BA_Reorder_AMSDU_Annnounce( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket, IN UCHAR OpMode); #endif /* DOT11_N_SUPPORT */ PNET_DEV get_netdev_from_bssid( IN PRTMP_ADAPTER pAd, IN UCHAR FromWhichBSSID); #ifdef DOT11_N_SUPPORT void ba_flush_reordering_timeout_mpdus( IN PRTMP_ADAPTER pAd, IN PBA_REC_ENTRY pBAEntry, IN ULONG Now32); VOID BAOriSessionSetUp( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry, IN UCHAR TID, IN USHORT TimeOut, IN ULONG DelayTime, IN BOOLEAN isForced); VOID BASessionTearDownALL( IN OUT PRTMP_ADAPTER pAd, IN UCHAR Wcid); VOID BAOriSessionTearDown( IN OUT PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR TID, IN BOOLEAN bPassive, IN BOOLEAN bForceSend); VOID BARecSessionTearDown( IN OUT PRTMP_ADAPTER pAd, IN UCHAR Wcid, IN UCHAR TID, IN BOOLEAN bPassive); #endif /* DOT11_N_SUPPORT */ BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); void ba_reordering_resource_release(PRTMP_ADAPTER pAd); INT ComputeChecksum( IN UINT PIN); UINT GenerateWpsPinCode( IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromApcli, IN UCHAR apidx); #ifdef WSC_INCLUDED INT Set_WscGenPinCode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_WscVendorPinCode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef WSC_AP_SUPPORT VOID RTMPIoctlSetWSCOOB(IN PRTMP_ADAPTER pAd); #endif #ifdef WSC_STA_SUPPORT VOID CntlWscIterate( IN PRTMP_ADAPTER pAd); USHORT WscGetAuthTypeFromStr( IN PSTRING arg); USHORT WscGetEncrypTypeFromStr( IN PSTRING arg); #endif /* WSC_STA_SUPPORT */ /* */ /* prototype in wsc.c */ /* */ BOOLEAN WscMsgTypeSubst( IN UCHAR EAPType, IN UCHAR EAPCode, OUT INT *MsgType); VOID WscStateMachineInit( IN PRTMP_ADAPTER pAd, IN STATE_MACHINE *S, OUT STATE_MACHINE_FUNC Trans[]); VOID WscEAPOLStartAction( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID WscEAPAction( IN PRTMP_ADAPTER pAdapter, IN MLME_QUEUE_ELEM *Elem); VOID WscEapEnrolleeAction( IN PRTMP_ADAPTER pAdapter, IN MLME_QUEUE_ELEM *Elem, IN UCHAR MsgType, IN MAC_TABLE_ENTRY *pEntry, IN PWSC_CTRL pWscControl); #ifdef CONFIG_AP_SUPPORT VOID WscEapApProxyAction( IN PRTMP_ADAPTER pAdapter, IN MLME_QUEUE_ELEM *Elem, IN UCHAR MsgType, IN MAC_TABLE_ENTRY *pEntry, IN PWSC_CTRL pWscControl); #endif /* CONFIG_AP_SUPPORT */ VOID WscEapRegistrarAction( IN PRTMP_ADAPTER pAdapter, IN MLME_QUEUE_ELEM *Elem, IN UCHAR MsgType, IN MAC_TABLE_ENTRY *pEntry, IN PWSC_CTRL pWscControl); VOID WscEAPOLTimeOutAction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID Wsc2MinsTimeOutAction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); UCHAR WscRxMsgType( IN PRTMP_ADAPTER pAdapter, IN PMLME_QUEUE_ELEM pElem); VOID WscInitRegistrarPair( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN UCHAR apidx); VOID WscSendEapReqId( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN UCHAR CurOpMode); VOID WscSendEapolStart( IN PRTMP_ADAPTER pAd, IN PUCHAR pBssid, IN UCHAR CurOpMode); VOID WscSendEapRspId( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN PWSC_CTRL pWscControl); VOID WscMacHeaderInit( IN PRTMP_ADAPTER pAd, IN OUT PHEADER_802_11 Hdr, IN PUCHAR pAddr1, IN PUCHAR pBSSID, IN BOOLEAN bFromApCli); VOID WscSendMessage( IN PRTMP_ADAPTER pAdapter, IN UCHAR OpCode, IN PUCHAR pData, IN INT Len, IN PWSC_CTRL pWscControl, IN UCHAR OpMode, /* 0: AP Mode, 1: AP Client Mode, 2: STA Mode */ IN UCHAR EapType); VOID WscSendEapReqAck( IN PRTMP_ADAPTER pAdapter, IN PMAC_TABLE_ENTRY pEntry); VOID WscSendEapReqDone( IN PRTMP_ADAPTER pAdapter, IN PMLME_QUEUE_ELEM pElem); VOID WscSendEapFail( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN BOOLEAN bSendDeAuth); VOID WscM2DTimeOutAction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID WscUPnPMsgTimeOutAction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); int WscSendUPnPConfReqMsg( IN PRTMP_ADAPTER pAd, IN UCHAR apIdx, IN PUCHAR ssidStr, IN PUCHAR macAddr, IN INT Status, IN UINT eventID, IN UCHAR CurOpMode); int WscSendUPnPMessage( IN PRTMP_ADAPTER pAd, IN UCHAR apIdx, IN USHORT msgType, IN USHORT msgSubType, IN PUCHAR pData, IN INT dataLen, IN UINT eventID, IN UINT toIPAddr, IN PUCHAR pMACAddr, IN UCHAR CurOpMode); VOID WscUPnPErrHandle( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl, IN UINT eventID); VOID WscBuildBeaconIE( IN PRTMP_ADAPTER pAdapter, IN UCHAR b_configured, IN BOOLEAN b_selRegistrar, IN USHORT devPwdId, IN USHORT selRegCfgMethods, IN UCHAR apidx, IN UCHAR *pAuthorizedMACs, IN UCHAR AuthorizedMACsLen, IN UCHAR CurOpMode); VOID WscBuildProbeRespIE( IN PRTMP_ADAPTER pAdapter, IN UCHAR respType, IN UCHAR scState, IN BOOLEAN b_selRegistrar, IN USHORT devPwdId, IN USHORT selRegCfgMethods, IN UCHAR apidx, IN UCHAR *pAuthorizedMACs, IN INT AuthorizedMACsLen, IN UCHAR CurOpMode); #ifdef CONFIG_AP_SUPPORT VOID WscBuildAssocRespIE( IN PRTMP_ADAPTER pAd, IN UCHAR ApIdx, IN UCHAR Reason, OUT PUCHAR pOutBuf, OUT PUCHAR pIeLen); VOID WscSelectedRegistrar( IN PRTMP_ADAPTER pAd, IN PUCHAR RegInfo, IN UINT length, IN UCHAR apidx); VOID WscInformFromWPA( IN PMAC_TABLE_ENTRY pEntry); #endif /* CONFIG_AP_SUPPORT */ VOID WscProfileRetryTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID WscPBCTimeOutAction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID WscScanTimeOutAction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); INT WscGenerateUUID( RTMP_ADAPTER *pAd, UCHAR *uuidHexStr, UCHAR *uuidAscStr, int apIdx, BOOLEAN bUseCurrentTime); VOID WscStop( IN PRTMP_ADAPTER pAd, #ifdef CONFIG_AP_SUPPORT IN BOOLEAN bFromApcli, #endif /* CONFIG_AP_SUPPORT */ IN PWSC_CTRL pWscControl); VOID WscInit( IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromApcli, IN UCHAR BssIndex); BOOLEAN ValidateChecksum( IN UINT PIN); UINT WscRandomGen4digitPinCode( IN PRTMP_ADAPTER pAd); UINT WscRandomGeneratePinCode( IN PRTMP_ADAPTER pAd, IN UCHAR apidx); int BuildMessageM1( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageM2( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageM2D( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageM3( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageM4( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageM5( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageM6( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageM7( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageM8( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageDONE( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageACK( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int BuildMessageNACK( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, OUT VOID *pbuf); int ProcessMessageM1( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN VOID *precv, IN INT Length, OUT PWSC_REG_DATA pReg); int ProcessMessageM2( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN VOID *precv, IN INT Length, IN UCHAR apidx, OUT PWSC_REG_DATA pReg); int ProcessMessageM2D( IN PRTMP_ADAPTER pAdapter, IN VOID *precv, IN INT Length, OUT PWSC_REG_DATA pReg); int ProcessMessageM3( IN PRTMP_ADAPTER pAdapter, IN VOID *precv, IN INT Length, OUT PWSC_REG_DATA pReg); int ProcessMessageM4( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN VOID *precv, IN INT Length, OUT PWSC_REG_DATA pReg); int ProcessMessageM5( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN VOID *precv, IN INT Length, OUT PWSC_REG_DATA pReg); int ProcessMessageM6( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN VOID *precv, IN INT Length, OUT PWSC_REG_DATA pReg); int ProcessMessageM7( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN VOID *precv, IN INT Length, OUT PWSC_REG_DATA pReg); int ProcessMessageM8( IN PRTMP_ADAPTER pAdapter, IN VOID *precv, IN INT Length, IN PWSC_CTRL pWscControl); USHORT WscGetAuthType( IN NDIS_802_11_AUTHENTICATION_MODE authType); USHORT WscGetEncryType( IN NDIS_802_11_WEP_STATUS encryType); NDIS_STATUS WscThreadInit( IN RTMP_ADAPTER *pAd); BOOLEAN WscThreadExit( IN RTMP_ADAPTER *pAd); int AppendWSCTLV( IN USHORT index, OUT UCHAR * obuf, IN UCHAR * ibuf, IN USHORT varlen); VOID WscGetRegDataPIN( IN PRTMP_ADAPTER pAd, IN UINT PinCode, IN PWSC_CTRL pWscControl); VOID WscPushPBCAction( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl); VOID WscScanExec( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl); BOOLEAN WscPBCExec( IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromM2, IN PWSC_CTRL pWscControl); VOID WscPBCBssTableSort( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl); VOID WscGenRandomKey( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl, INOUT PUCHAR pKey, INOUT PUSHORT pKeyLen); VOID WscCreateProfileFromCfg( IN PRTMP_ADAPTER pAd, IN UCHAR OpMode, /* 0: AP Mode, 1: AP Client Mode, 2: STA Mode */ IN PWSC_CTRL pWscControl, OUT PWSC_PROFILE pWscProfile); void WscWriteConfToPortCfg( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl, IN PWSC_CREDENTIAL pCredential, IN BOOLEAN bEnrollee); #ifdef APCLI_SUPPORT void WscWriteConfToApCliCfg( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl, IN PWSC_CREDENTIAL pCredential, IN BOOLEAN bEnrollee); #endif /* APCLI_SUPPORT */ VOID WpsSmProcess( IN PRTMP_ADAPTER pAd, IN MLME_QUEUE_ELEM *Elem); VOID WscPBCSessionOverlapCheck( IN PRTMP_ADAPTER pAd); VOID WscPBC_DPID_FromSTA( IN PRTMP_ADAPTER pAd, IN PUCHAR pMacAddr); #ifdef CONFIG_AP_SUPPORT INT WscGetConfWithoutTrigger( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl, IN BOOLEAN bFromUPnP); BOOLEAN WscReadProfileFromUfdFile( IN PRTMP_ADAPTER pAd, IN UCHAR ApIdx, IN PSTRING pUfdFileName); BOOLEAN WscWriteProfileToUfdFile( IN PRTMP_ADAPTER pAd, IN UCHAR ApIdx, IN PSTRING pUfdFileName); #endif /* CONFIG_AP_SUPPORT */ VOID WscCheckWpsIeFromWpsAP( IN PRTMP_ADAPTER pAd, IN PEID_STRUCT pEid, OUT PUSHORT pDPIDFromAP); /* WSC hardware push button function 0811 */ VOID WSC_HDR_BTN_Init( IN PRTMP_ADAPTER pAd); VOID WSC_HDR_BTN_Stop( IN PRTMP_ADAPTER pAd); VOID WSC_HDR_BTN_CheckHandler( IN PRTMP_ADAPTER pAd); #ifdef WSC_LED_SUPPORT BOOLEAN WscSupportWPSLEDMode( IN PRTMP_ADAPTER pAdapter); BOOLEAN WscSupportWPSLEDMode10( IN PRTMP_ADAPTER pAdapter); BOOLEAN WscAPHasSecuritySetting( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl); VOID WscLEDTimer( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID WscSkipTurnOffLEDTimer( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); #endif /* WSC_LED_SUPPORT */ #ifdef CONFIG_AP_SUPPORT VOID WscUpdatePortCfgTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); #endif /* CONFIG_AP_SUPPORT */ VOID WscCheckPeerDPID( IN PRTMP_ADAPTER pAd, IN PFRAME_802_11 Fr, IN PUCHAR eid_data, IN INT eid_len); VOID WscClearPeerList( IN PLIST_HEADER pWscEnList); PWSC_PEER_ENTRY WscFindPeerEntry( IN PLIST_HEADER pWscEnList, IN PUCHAR pMacAddr); VOID WscDelListEntryByMAC( PLIST_HEADER pWscEnList, IN PUCHAR pMacAddr);; VOID WscInsertPeerEntryByMAC( IN PLIST_HEADER pWscEnList, IN PUCHAR pMacAddr); #ifdef CONFIG_AP_SUPPORT INT WscApShowPeerList( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* CONFIG_AP_SUPPORT */ VOID WscMaintainPeerList( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWpsCtrl); VOID WscAssignEntryMAC( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWpsCtrl); #ifdef WSC_V2_SUPPORT #ifdef CONFIG_AP_SUPPORT VOID WscOnOff( IN PRTMP_ADAPTER pAd, IN INT ApIdx, IN BOOLEAN bOff); VOID WscAddEntryToAclList( IN PRTMP_ADAPTER pAd, IN INT ApIdx, IN PUCHAR pMacAddr); VOID WscSetupLockTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID WscCheckPinAttackCount( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl); #endif /* CONFIG_AP_SUPPORT */ BOOLEAN WscGenV2Msg( IN PWSC_CTRL pWpsCtrl, IN BOOLEAN bSelRegistrar, IN PUCHAR pAuthorizedMACs, IN INT AuthorizedMACsLen, OUT UCHAR **pOutBuf, OUT INT *pOutBufLen); BOOLEAN WscParseV2SubItem( IN UCHAR SubID, IN PUCHAR pData, IN USHORT DataLen, OUT PUCHAR pOutBuf, OUT PUCHAR pOutBufLen); VOID WscSendEapFragAck( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN PMAC_TABLE_ENTRY pEntry); VOID WscSendEapFragData( IN PRTMP_ADAPTER pAdapter, IN PWSC_CTRL pWscControl, IN PMAC_TABLE_ENTRY pEntry); #endif /* WSC_V2_SUPPORT */ BOOLEAN WscGetDataFromPeerByTag( IN PRTMP_ADAPTER pAd, IN PUCHAR pIeData, IN INT IeDataLen, IN USHORT WscTag, OUT PUCHAR pWscBuf, OUT PUSHORT pWscBufLen); #endif /* WSC_INCLUDED */ BOOLEAN rtstrmactohex( IN PSTRING s1, IN PSTRING s2); BOOLEAN rtstrcasecmp( IN PSTRING s1, IN PSTRING s2); PSTRING rtstrstruncasecmp( IN PSTRING s1, IN PSTRING s2); PSTRING rtstrstr( IN const PSTRING s1, IN const PSTRING s2); PSTRING rstrtok( IN PSTRING s, IN const PSTRING ct); int rtinet_aton( const PSTRING cp, unsigned int *addr); /*//////// common ioctl functions ////////*/ INT Set_DriverVersion_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_CountryRegion_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_CountryRegionABand_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_WirelessMode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_MBSS_WirelessMode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_Channel_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ShortSlot_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_TxPower_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_BGProtection_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_TxPreamble_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_RTSThreshold_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_FragThreshold_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_TxBurst_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef AGGREGATION_SUPPORT INT Set_PktAggregate_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* AGGREGATION_SUPPORT */ #ifdef INF_PPA_SUPPORT INT Set_INF_AMAZON_SE_PPA_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg); INT ifx_ra_start_xmit ( IN struct net_device *rx_dev, IN struct net_device *tx_dev, IN struct sk_buff *skb, IN int len); #endif /* INF_PPA_SUPPORT */ INT Set_IEEE80211H_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef EXT_BUILD_CHANNEL_LIST INT Set_ExtCountryCode_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); INT Set_ExtDfsType_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ChannelListAdd_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ChannelListShow_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ChannelListDel_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* EXT_BUILD_CHANNEL_LIST */ #ifdef DBG INT Set_Debug_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_DebugFunc_Proc( IN RTMP_ADAPTER *pAd, IN PSTRING arg); #endif #ifdef TXBF_SUPPORT INT Set_ReadITxBf_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ReadETxBf_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_WriteITxBf_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_WriteETxBf_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_StatITxBf_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_StatETxBf_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_TxBfTag_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ITxBfTimeout_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ETxBfTimeout_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_InvTxBfTag_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ITxBfCal_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ITxBfDivCal_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ITxBfLnaCal_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ETxBfEnCond_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ETxBfCodebook_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ETxBfCoefficient_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ETxBfGrouping_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ETxBfNoncompress_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ETxBfIncapable_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_NoSndgCntThrd_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_NdpSndgStreams_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_Trigger_Sounding_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ITxBfEn_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* TXBF_SUPPORT */ INT Set_RateAdaptInterval( IN RTMP_ADAPTER *pAd, IN PSTRING arg); #ifdef PRE_ANT_SWITCH INT Set_PreAntSwitch_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_PreAntSwitchRSSI_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_PreAntSwitchTimeout_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* PRE_ANT_SWITCH */ #ifdef CFO_TRACK INT Set_CFOTrack_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef CFO_TRACK #ifdef CONFIG_AP_SUPPORT INT rtmp_cfo_track(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, INT lastClient); #endif /* CONFIG_AP_SUPPORT */ #endif /* CFO_TRACK */ #endif // CFO_TRACK // #ifdef DBG_CTRL_SUPPORT INT Set_DebugFlags_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef INCLUDE_DEBUG_QUEUE INT Set_DebugQueue_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); void dbQueueEnqueue( IN UCHAR type, IN UCHAR *data); void dbQueueEnqueueTxFrame( IN UCHAR *pTxWI, IN UCHAR *pHeader_802_11); void dbQueueEnqueueRxFrame( IN UCHAR *pRxWI, IN UCHAR *pHeader_802_11, IN ULONG flags); #endif /* INCLUDE_DEBUG_QUEUE */ #endif /* DBG_CTRL_SUPPORT */ INT Show_DescInfo_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Show_MacTable_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT show_devinfo_proc(RTMP_ADAPTER *pAd, PSTRING arg); INT Set_ResetStatCounter_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef DOT11_N_SUPPORT INT Set_BASetup_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_BADecline_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_BAOriTearDown_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_BARecTearDown_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtBw_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtMcs_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtGi_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtOpMode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtStbc_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtHtc_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtExtcha_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtMpduDensity_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtBaWinSize_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtRdg_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtLinkAdapt_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtAmsdu_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtAutoBa_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtProtect_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtMimoPs_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef DOT11N_DRAFT3 INT Set_HT_BssCoex_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING pParam); INT Set_HT_BssCoexApCntThr_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING pParam); #endif /* DOT11N_DRAFT3 */ #ifdef CONFIG_AP_SUPPORT INT Set_HtTxStream_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtRxStream_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef DOT11_N_SUPPORT #ifdef GREENAP_SUPPORT INT Set_GreenAP_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* GREENAP_SUPPORT */ #endif /* DOT11_N_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ INT Set_ForceShortGI_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ForceGF_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT SetCommonHT(RTMP_ADAPTER *pAd); INT Set_SendPSMPAction_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); void convert_reordering_packet_to_preAMSDU_or_802_3_packet( IN PRTMP_ADAPTER pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); INT Set_HtMIMOPSmode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtTxBASize_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_HtDisallowTKIP_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_BurstMode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* DOT11_N_SUPPORT */ #ifdef DOT11_VHT_AC INT Set_VhtBw_Proc( IN RTMP_ADAPTER *pAd, IN PSTRING arg); INT Set_VhtStbc_Proc( IN RTMP_ADAPTER *pAd, IN PSTRING arg); #endif /* DOT11_VHT_AC */ #ifdef APCLI_SUPPORT INT RTMPIoctlConnStatus( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); #endif /*APCLI_SUPPORT*/ #ifdef CONFIG_AP_SUPPORT VOID detect_wmm_traffic( IN RTMP_ADAPTER *pAd, IN UCHAR up, IN UCHAR bOutput); VOID dynamic_tune_be_tx_op( IN RTMP_ADAPTER *pAd, IN ULONG nonBEpackets); #endif /* CONFIG_AP_SUPPORT */ #ifdef DOT11_N_SUPPORT VOID Handle_BSS_Width_Trigger_Events(RTMP_ADAPTER *pAd); void build_ext_channel_switch_ie( IN RTMP_ADAPTER *pAd, IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE); void assoc_ht_info_debugshow( IN RTMP_ADAPTER *pAd, IN MAC_TABLE_ENTRY *pEntry, IN UCHAR ht_cap_len, IN HT_CAPABILITY_IE *pHTCapability); #endif /* DOT11_N_SUPPORT */ BOOLEAN APRxDoneInterruptHandle(RTMP_ADAPTER *pAd); BOOLEAN STARxDoneInterruptHandle(RTMP_ADAPTER *pAd, BOOLEAN argc); BOOLEAN RxDoneInterruptHandle(RTMP_ADAPTER *pAd); NTSTATUS StopDmaRx( IN RTMP_ADAPTER *pAd, IN UCHAR Level); NTSTATUS StopDmaTx( IN RTMP_ADAPTER *pAd, IN UCHAR Level); #ifdef DOT11_N_SUPPORT /* AMPDU packet indication */ VOID Indicate_AMPDU_Packet( IN PRTMP_ADAPTER pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); #ifdef HDR_TRANS_SUPPORT VOID Indicate_AMPDU_Packet_Hdr_Trns( IN PRTMP_ADAPTER pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); #endif /* HDR_TRANS_SUPPORT */ /* AMSDU packet indication */ VOID Indicate_AMSDU_Packet( IN PRTMP_ADAPTER pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); VOID BaReOrderingBufferMaintain( IN PRTMP_ADAPTER pAd); #endif /* DOT11_N_SUPPORT */ /* Normal legacy Rx packet indication */ VOID Indicate_Legacy_Packet( IN PRTMP_ADAPTER pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); #ifdef HDR_TRANS_SUPPORT VOID Indicate_Legacy_Packet_Hdr_Trns( IN PRTMP_ADAPTER pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); #endif /* HDR_TRANS_SUPPORT */ VOID Indicate_EAPOL_Packet( IN PRTMP_ADAPTER pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); UINT deaggregate_AMSDU_announce( IN PRTMP_ADAPTER pAd, PNDIS_PACKET pPacket, IN PUCHAR pData, IN ULONG DataSize, IN UCHAR OpMode); #ifdef TXBF_SUPPORT BOOLEAN clientSupportsETxBF(RTMP_ADAPTER *pAd, HT_BF_CAP *pTxBFCap); void setETxBFCap(RTMP_ADAPTER *pAd, HT_BF_CAP *pTxBFCap); #ifdef ETXBF_EN_COND3_SUPPORT VOID txSndgSameMcs(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY * pEnt, UCHAR smoothMfb); VOID txSndgOtherGroup(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry); VOID txMrqInvTxBF(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry); VOID chooseBestMethod(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry, UCHAR mfb); VOID rxBestSndg(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry); #endif /* ETXBF_EN_COND3_SUPPORT */ VOID handleBfFb(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk); VOID TxBFInit( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry, IN BOOLEAN supportsETxBF); VOID eTxBFProbing( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry); VOID Trigger_Sounding_Packet( IN PRTMP_ADAPTER pAd, IN UCHAR SndgType, IN UCHAR SndgBW, IN UCHAR SndgMcs, IN MAC_TABLE_ENTRY *pEntry); VOID rtmp_asic_set_bf( IN RTMP_ADAPTER *pAd); BOOLEAN rtmp_chk_itxbf_calibration( IN RTMP_ADAPTER *pAd); #endif /* TXBF_SUPPORT */ BOOLEAN CmdRspEventCallbackHandle(PRTMP_ADAPTER pAd, PUCHAR pRspBuffer); #ifdef CONFIG_AP_SUPPORT /* remove LLC and get 802_3 Header */ #define RTMP_AP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \ { \ PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \ \ \ if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_WDS) || RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \ { \ _pDA = _pRxBlk->pHeader->Addr3; \ _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \ } \ else if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_APCLI)) \ { \ _pDA = _pRxBlk->pHeader->Addr1; \ _pSA = _pRxBlk->pHeader->Addr3; \ } \ else \ { \ _pDA = _pRxBlk->pHeader->Addr3; \ _pSA = _pRxBlk->pHeader->Addr2; \ } \ \ CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \ _pRxBlk->DataSize, _pRemovedLLCSNAP); \ } #endif /* CONFIG_AP_SUPPORT */ BOOLEAN APFowardWirelessStaToWirelessSta( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket, IN ULONG FromWhichBSSID); VOID Announce_or_Forward_802_3_Packet( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket, IN UCHAR FromWhichBSSID); VOID Sta_Announce_or_Forward_802_3_Packet( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPacket, IN UCHAR FromWhichBSSID); #ifdef CONFIG_AP_SUPPORT #define AP_ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\ Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS); #endif /* CONFIG_AP_SUPPORT */ /* Normal, AMPDU or AMSDU */ VOID CmmRxnonRalinkFrameIndicate( IN RTMP_ADAPTER *pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); #ifdef HDR_TRANS_SUPPORT VOID CmmRxnonRalinkFrameIndicate_Hdr_Trns( IN RTMP_ADAPTER *pAd, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); #endif /* HDR_TRANS_SUPPORT */ VOID CmmRxRalinkFrameIndicate( IN RTMP_ADAPTER *pAd, IN MAC_TABLE_ENTRY *pEntry, IN RX_BLK *pRxBlk, IN UCHAR FromWhichBSSID); VOID Update_Rssi_Sample( IN RTMP_ADAPTER *pAd, IN RSSI_SAMPLE *pRssi, IN RXWI_STRUC *pRxWI); PNDIS_PACKET GetPacketFromRxRing( IN RTMP_ADAPTER *pAd, OUT RX_BLK *pRxBlk, OUT BOOLEAN *pbReschedule, INOUT UINT32 *pRxPending); PNDIS_PACKET RTMPDeFragmentDataFrame( IN RTMP_ADAPTER *pAd, IN RX_BLK *pRxBlk); /*////////////////////////////////////*/ #if defined (AP_SCAN_SUPPORT) || defined (CONFIG_STA_SUPPORT) VOID RTMPIoctlGetSiteSurvey( IN PRTMP_ADAPTER pAdapter, IN RTMP_IOCTL_INPUT_STRUCT *wrq); #endif #ifdef CONFIG_AP_SUPPORT #ifdef APCLI_SUPPORT INT Set_ApCli_AuthMode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); INT Set_ApCli_EncrypType_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* APCLI_SUPPORT */ #endif /* CONFIG_AP_SUPPORT */ #ifdef MAT_SUPPORT VOID getIPv6MacTbInfo(MAT_STRUCT *, char *, ULONG); VOID getIPMacTbInfo( IN MAT_STRUCT *pMatCfg, IN char *pOutBuf, IN ULONG BufLen); NDIS_STATUS MATEngineInit( IN RTMP_ADAPTER *pAd); NDIS_STATUS MATEngineExit( IN RTMP_ADAPTER *pAd); PUCHAR MATEngineRxHandle( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPkt, IN UINT infIdx); PUCHAR MATEngineTxHandle( IN PRTMP_ADAPTER pAd, IN PNDIS_PACKET pPkt, IN UINT infIdx, IN UCHAR OpMode); BOOLEAN MATPktRxNeedConvert( IN PRTMP_ADAPTER pAd, IN PNET_DEV net_dev); #endif /* MAT_SUPPORT */ #ifdef CONFIG_AP_SUPPORT typedef struct CountryCodeToCountryRegion { USHORT CountryNum; UCHAR IsoName[3]; /*UCHAR CountryName[40]; */ PSTRING pCountryName; BOOLEAN SupportABand; /*ULONG RegDomainNum11A; */ UCHAR RegDomainNum11A; BOOLEAN SupportGBand; /*ULONG RegDomainNum11G; */ UCHAR RegDomainNum11G; } COUNTRY_CODE_TO_COUNTRY_REGION; #endif /* CONFIG_AP_SUPPORT */ #ifdef SNMP_SUPPORT /*for snmp */ typedef struct _DefaultKeyIdxValue { UCHAR KeyIdx; UCHAR Value[16]; } DefaultKeyIdxValue, *PDefaultKeyIdxValue; #endif INT Set_FixedTxMode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #ifdef CONFIG_APSTA_MIXED_SUPPORT INT Set_OpMode_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* CONFIG_APSTA_MIXED_SUPPORT */ INT Set_LongRetryLimit_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); INT Set_ShortRetryLimit_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); INT Set_AutoFallBack_Proc( IN PRTMP_ADAPTER pAdapter, IN PSTRING arg); VOID RT28XXDMADisable( IN RTMP_ADAPTER *pAd); VOID RT28XXDMAEnable( IN RTMP_ADAPTER *pAd); VOID RT28xx_UpdateBeaconToAsic( IN RTMP_ADAPTER * pAd, IN INT apidx, IN ULONG BeaconLen, IN ULONG UpdatePos); void CfgInitHook(PRTMP_ADAPTER pAd); NDIS_STATUS RtmpNetTaskInit( IN RTMP_ADAPTER *pAd); VOID RtmpNetTaskExit( IN PRTMP_ADAPTER pAd); NDIS_STATUS RtmpMgmtTaskInit( IN RTMP_ADAPTER *pAd); VOID RtmpMgmtTaskExit( IN RTMP_ADAPTER *pAd); void tbtt_tasklet(unsigned long data); VOID AsicTurnOffRFClk( IN PRTMP_ADAPTER pAd, IN UCHAR Channel); #ifdef RTMP_TIMER_TASK_SUPPORT INT RtmpTimerQThread( IN ULONG Context); RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert( IN RTMP_ADAPTER *pAd, IN RALINK_TIMER_STRUCT *pTimer); BOOLEAN RtmpTimerQRemove( IN RTMP_ADAPTER *pAd, IN RALINK_TIMER_STRUCT *pTimer); void RtmpTimerQExit( IN RTMP_ADAPTER *pAd); void RtmpTimerQInit( IN RTMP_ADAPTER *pAd); #endif /* RTMP_TIMER_TASK_SUPPORT */ #ifdef RTMP_MAC_USB NTSTATUS RTUSBMultiRead( IN PRTMP_ADAPTER pAd, IN USHORT Offset, OUT PUCHAR pData, IN USHORT length); NTSTATUS RTUSBMultiWrite( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN PUCHAR pData, IN USHORT length, IN BOOLEAN bWriteHigh); NTSTATUS RTUSBMultiWrite_nBytes( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN PUCHAR pData, IN USHORT length, IN USHORT batchLen); NTSTATUS RTUSBMultiWrite_OneByte( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN PUCHAR pData); NTSTATUS RTUSBReadBBPRegister( IN PRTMP_ADAPTER pAd, IN UCHAR Id, IN PUCHAR pValue); NTSTATUS RTUSBWriteBBPRegister( IN PRTMP_ADAPTER pAd, IN UCHAR Id, IN UCHAR Value); NTSTATUS RTUSBWriteRFRegister( IN PRTMP_ADAPTER pAd, IN UINT32 Value); NTSTATUS RTUSB_VendorRequest( IN PRTMP_ADAPTER pAd, IN UINT32 TransferFlags, IN UCHAR ReservedBits, IN UCHAR Request, IN USHORT Value, IN USHORT Index, IN PVOID TransferBuffer, IN UINT32 TransferBufferLength); NTSTATUS RTUSBReadEEPROM( IN PRTMP_ADAPTER pAd, IN USHORT Offset, OUT PUCHAR pData, IN USHORT length); NTSTATUS RTUSBWriteEEPROM( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN PUCHAR pData, IN USHORT length); VOID RTUSBPutToSleep( IN PRTMP_ADAPTER pAd); NTSTATUS RTUSBWakeUp( IN PRTMP_ADAPTER pAd); NDIS_STATUS RTUSBEnqueueCmdFromNdis( IN PRTMP_ADAPTER pAd, IN NDIS_OID Oid, IN BOOLEAN SetInformation, IN PVOID pInformationBuffer, IN UINT32 InformationBufferLength); VOID RTUSBDequeueCmd( IN PCmdQ cmdq, OUT PCmdQElmt *pcmdqelmt); INT RTUSBCmdThread( IN ULONG Context); VOID RTUSBBssBeaconExit( IN RTMP_ADAPTER *pAd); VOID RTUSBBssBeaconStop( IN RTMP_ADAPTER *pAd); VOID RTUSBBssBeaconStart( IN RTMP_ADAPTER * pAd); VOID RTUSBBssBeaconInit( IN RTMP_ADAPTER *pAd); VOID RTUSBWatchDog( IN RTMP_ADAPTER *pAd); NTSTATUS RTUSBWriteMACRegister( IN PRTMP_ADAPTER pAd, IN USHORT Offset, IN UINT32 Value, IN BOOLEAN bWriteHigh); NTSTATUS RTUSBReadMACRegister( IN PRTMP_ADAPTER pAd, IN USHORT Offset, OUT PUINT32 pValue); NTSTATUS RTUSBSingleWrite( IN RTMP_ADAPTER *pAd, IN USHORT Offset, IN USHORT Value, IN BOOLEAN bWriteHigh); NTSTATUS RTUSBFirmwareWrite( IN PRTMP_ADAPTER pAd, IN PUCHAR pFwImage, IN ULONG FwLen); NTSTATUS RTUSBVenderReset( IN PRTMP_ADAPTER pAd); NDIS_STATUS RTUSBSetHardWareRegister( IN PRTMP_ADAPTER pAdapter, IN PVOID pBuf); NDIS_STATUS RTUSBQueryHardWareRegister( IN PRTMP_ADAPTER pAdapter, IN PVOID pBuf); /*VOID CMDHandler( */ /* IN PRTMP_ADAPTER pAd); */ NDIS_STATUS RTUSBWriteHWMACAddress( IN RTMP_ADAPTER *pAd); VOID MlmeSetPsm( IN RTMP_ADAPTER *pAd, IN USHORT psm); NDIS_STATUS RTMPWPAAddKeyProc( IN RTMP_ADAPTER *pAd, IN VOID *pBuf); VOID AsicRxAntEvalAction( IN RTMP_ADAPTER *pAd); void append_pkt( IN RTMP_ADAPTER *pAd, IN UCHAR *pHeader802_3, IN UINT HdrLen, IN UCHAR *pData, IN ULONG DataSize, OUT PNDIS_PACKET *ppPacket); VOID RTUSBMlmeHardTransmit( IN RTMP_ADAPTER *pAd, IN MGMT_STRUC *pMgmt); INT MlmeThread(ULONG Context); /* Function Prototype in rtusb_data.c */ NDIS_STATUS RTUSBFreeDescRequest( IN RTMP_ADAPTER *pAd, IN UCHAR BulkOutPipeId, IN UINT32 req_cnt); BOOLEAN RTUSBNeedQueueBackForAgg( IN RTMP_ADAPTER *pAd, IN UCHAR BulkOutPipeId); /* Function Prototype in cmm_data_usb.c */ USHORT RtmpUSB_WriteSubTxResource( IN PRTMP_ADAPTER pAd, IN TX_BLK *pTxBlk, IN BOOLEAN bIsLast, OUT USHORT *FreeNumber); USHORT RtmpUSB_WriteSingleTxResource( IN PRTMP_ADAPTER pAd, IN TX_BLK *pTxBlk, IN BOOLEAN bIsLast, OUT USHORT *FreeNumber); USHORT RtmpUSB_WriteFragTxResource( IN PRTMP_ADAPTER pAd, IN TX_BLK *pTxBlk, IN UCHAR fragNum, OUT USHORT *FreeNumber); USHORT RtmpUSB_WriteMultiTxResource( IN PRTMP_ADAPTER pAd, IN TX_BLK *pTxBlk, IN UCHAR frameNum, OUT USHORT *FreeNumber); VOID RtmpUSB_FinalWriteTxResource( IN PRTMP_ADAPTER pAd, IN TX_BLK *pTxBlk, IN USHORT totalMPDUSize, IN USHORT TxIdx); VOID RtmpUSBDataLastTxIdx( IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx, IN USHORT TxIdx); VOID RtmpUSBDataKickOut( IN PRTMP_ADAPTER pAd, IN TX_BLK *pTxBlk, IN UCHAR QueIdx); int RtmpUSBMgmtKickOut( IN RTMP_ADAPTER *pAd, IN UCHAR QueIdx, IN PNDIS_PACKET pPacket, IN PUCHAR pSrcBufVA, IN UINT SrcBufLen); VOID RtmpUSBNullFrameKickOut( IN RTMP_ADAPTER *pAd, IN UCHAR QueIdx, IN UCHAR *pNullFrame, IN UINT32 frameLen); VOID RtmpUsbStaAsicForceWakeupTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID RT28xxUsbStaAsicForceWakeup( IN PRTMP_ADAPTER pAd, IN BOOLEAN bFromTx); VOID RT28xxUsbStaAsicSleepThenAutoWakeup( IN PRTMP_ADAPTER pAd, IN USHORT TbttNumToNextWakeUp); VOID RT28xxUsbMlmeRadioOn( IN PRTMP_ADAPTER pAd); VOID RT28xxUsbMlmeRadioOFF( IN PRTMP_ADAPTER pAd); VOID RT28xxUsbAsicRadioOff( IN PRTMP_ADAPTER pAd); VOID RT28xxUsbAsicRadioOn( IN PRTMP_ADAPTER pAd); BOOLEAN AsicCheckCommandOk( IN PRTMP_ADAPTER pAd, IN UCHAR Command); VOID RT28xxUsbAsicWOWEnable( IN PRTMP_ADAPTER pAd); VOID RT28xxUsbAsicWOWDisable( IN PRTMP_ADAPTER pAd); #endif /* RTMP_MAC_USB */ #ifdef NEW_WOW_SUPPORT VOID RT28xxAndesWOWEnable( IN PRTMP_ADAPTER pAd); VOID RT28xxAndesWOWDisable( IN PRTMP_ADAPTER pAd); #endif /* NEW_WOW_SUPPORT */ #if (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) VOID RT28xxAsicWOWEnable( IN PRTMP_ADAPTER pAd); VOID RT28xxAsicWOWDisable( IN PRTMP_ADAPTER pAd); #endif /* (defined(WOW_SUPPORT) && defined(RTMP_MAC_USB)) || defined(NEW_WOW_SUPPORT) */ NDIS_STATUS RTMPCheckRxError( IN RTMP_ADAPTER *pAd, IN PHEADER_802_11 pHeader, IN RXWI_STRUC *pRxWI, IN RXINFO_STRUC *pRxInfo); /*////////////////////////////////////*/ #ifdef AP_QLOAD_SUPPORT VOID QBSS_LoadInit( IN RTMP_ADAPTER *pAd); VOID QBSS_LoadAlarmReset( IN RTMP_ADAPTER *pAd); VOID QBSS_LoadAlarmResume( IN RTMP_ADAPTER *pAd); UINT32 QBSS_LoadBusyTimeGet( IN RTMP_ADAPTER *pAd); BOOLEAN QBSS_LoadIsAlarmIssued( IN RTMP_ADAPTER *pAd); BOOLEAN QBSS_LoadIsBusyTimeAccepted( IN RTMP_ADAPTER *pAd, IN UINT32 BusyTime); UINT32 QBSS_LoadElementAppend( IN RTMP_ADAPTER *pAd, OUT UINT8 *buf_p); UINT32 QBSS_LoadElementParse( IN RTMP_ADAPTER *pAd, IN UINT8 *pElement, OUT UINT16 *pStationCount, OUT UINT8 *pChanUtil, OUT UINT16 *pAvalAdmCap); VOID QBSS_LoadUpdate( IN RTMP_ADAPTER *pAd, IN ULONG UpTime); VOID QBSS_LoadStatusClear( IN RTMP_ADAPTER *pAd); INT Show_QoSLoad_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg); #endif /* AP_QLOAD_SUPPORT */ /*///////////////////////////////////*/ INT RTMPShowCfgValue( IN PRTMP_ADAPTER pAd, IN PSTRING pName, IN PSTRING pBuf, IN UINT32 MaxLen); PSTRING RTMPGetRalinkAuthModeStr( IN NDIS_802_11_AUTHENTICATION_MODE authMode); PSTRING RTMPGetRalinkEncryModeStr( IN USHORT encryMode); /*//////////////////////////////////*/ VOID ReSyncBeaconTime(RTMP_ADAPTER *pAd); VOID RTMPSetAGCInitValue(RTMP_ADAPTER *pAd, UCHAR BandWidth); #ifdef TXBF_SUPPORT VOID handleHtcField( IN PRTMP_ADAPTER pAd, IN RX_BLK *pRxBlk); #endif /* TXBF_SUPPORT */ #ifdef MFB_SUPPORT VOID MFB_PerPareMRQ( IN PRTMP_ADAPTER pAd, OUT VOID* pBuf, IN PMAC_TABLE_ENTRY pEntry); VOID MFB_PerPareMFB( IN PRTMP_ADAPTER pAd, OUT VOID* pBuf, IN PMAC_TABLE_ENTRY pEntry); #endif /* MFB_SUPPORT */ #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++) #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--) #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt) #ifdef RTMP_USB_SUPPORT /* * Function Prototype in rtusb_bulk.c */ #ifdef INF_AMAZON_SE VOID SoftwareFlowControl( IN PRTMP_ADAPTER pAd) ; #endif /* INF_AMAZON_SE */ VOID RTUSBInitTxDesc( IN PRTMP_ADAPTER pAd, IN PTX_CONTEXT pTxContext, IN UCHAR BulkOutPipeId, IN usb_complete_t Func); VOID RTUSBInitHTTxDesc( IN PRTMP_ADAPTER pAd, IN PHT_TX_CONTEXT pTxContext, IN UCHAR BulkOutPipeId, IN ULONG BulkOutSize, IN usb_complete_t Func); VOID RTUSBInitRxDesc( IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); VOID RTUSBCleanUpDataBulkOutQueue( IN PRTMP_ADAPTER pAd); VOID RTUSBCancelPendingBulkOutIRP( IN PRTMP_ADAPTER pAd); VOID RTUSBBulkOutDataPacket( IN PRTMP_ADAPTER pAd, IN UCHAR BulkOutPipeId, IN UCHAR Index); VOID RTUSBBulkOutNullFrame( IN PRTMP_ADAPTER pAd); VOID RTUSBBulkOutRTSFrame( IN PRTMP_ADAPTER pAd); VOID RTUSBCancelPendingBulkInIRP( IN PRTMP_ADAPTER pAd); VOID RTUSBCancelPendingIRPs( IN PRTMP_ADAPTER pAd); VOID RTUSBBulkOutMLMEPacket( IN PRTMP_ADAPTER pAd, IN UCHAR Index); VOID RTUSBBulkOutPsPoll( IN PRTMP_ADAPTER pAd); VOID RTUSBCleanUpMLMEBulkOutQueue( IN PRTMP_ADAPTER pAd); VOID RTUSBKickBulkOut( IN PRTMP_ADAPTER pAd); VOID RTUSBBulkReceive( IN PRTMP_ADAPTER pAd); VOID RTUSBBulkCmdRspEventReceive( IN PRTMP_ADAPTER pAd); VOID DoBulkIn( IN RTMP_ADAPTER *pAd); VOID RTUSBInitRxDesc( IN PRTMP_ADAPTER pAd, IN PRX_CONTEXT pRxContext); VOID RTUSBBulkRxHandle( IN unsigned long data); #endif /* RTMP_USB_SUPPORT */ #ifdef SOFT_ENCRYPT BOOLEAN RTMPExpandPacketForSwEncrypt( IN PRTMP_ADAPTER pAd, IN PTX_BLK pTxBlk); VOID RTMPUpdateSwCacheCipherInfo( IN PRTMP_ADAPTER pAd, IN PTX_BLK pTxBlk, IN PUCHAR pHdr); #endif /* SOFT_ENCRYPT */ /* OS Related funciton prototype definitions. TODO: Maybe we need to move these function prototypes to other proper place. */ VOID RTInitializeCmdQ( IN PCmdQ cmdq); INT RTPCICmdThread( IN ULONG Context); VOID CMDHandler( IN PRTMP_ADAPTER pAd); VOID RTThreadDequeueCmd( IN PCmdQ cmdq, OUT PCmdQElmt *pcmdqelmt); NDIS_STATUS RTEnqueueInternalCmd( IN PRTMP_ADAPTER pAd, IN NDIS_OID Oid, IN PVOID pInformationBuffer, IN UINT32 InformationBufferLength); #ifdef HOSTAPD_SUPPORT VOID ieee80211_notify_michael_failure( IN PRTMP_ADAPTER pAd, IN PHEADER_802_11 pHeader, IN UINT keyix, IN INT report); const CHAR* ether_sprintf(const UINT8 *mac); #endif/*HOSTAPD_SUPPORT*/ #ifdef VENDOR_FEATURE3_SUPPORT VOID RTMP_IO_WRITE32( PRTMP_ADAPTER pAd, UINT32 Offset, UINT32 Value); VOID RTMP_BBP_IO_READ8_BY_REG_ID( PRTMP_ADAPTER pAd, UINT32 Offset, UINT8 *pValue); VOID RTMP_BBP_IO_READ8( PRTMP_ADAPTER pAd, UCHAR Offset, UINT8 *pValue, BOOLEAN FlgValidMCR); VOID RTMP_BBP_IO_WRITE8_BY_REG_ID( PRTMP_ADAPTER pAd, UINT32 Offset, UINT8 Value); VOID RTMP_BBP_IO_WRITE8( PRTMP_ADAPTER pAd, UCHAR Offset, UINT8 Value, BOOLEAN FlgValidMCR); #endif /* VENDOR_FEATURE3_SUPPORT */ INT AsicGetMacVersion( IN RTMP_ADAPTER *pAd); INT WaitForAsicReady( IN RTMP_ADAPTER *pAd); BOOLEAN CHAN_PropertyCheck( IN PRTMP_ADAPTER pAd, IN UINT32 ChanNum, IN UCHAR Property); void getRate( IN HTTRANSMIT_SETTING HTSetting, OUT ULONG* fLastTxRxRate); #ifdef APCLI_SUPPORT #ifdef APCLI_WPA_SUPPLICANT_SUPPORT VOID ApcliSendAssocIEsToWpaSupplicant( IN PRTMP_ADAPTER pAd, IN UINT ifIndex); INT ApcliWpaCheckEapCode( IN PRTMP_ADAPTER pAd, IN PUCHAR pFrame, IN USHORT FrameLen, IN USHORT OffSet); VOID ApcliWpaSendEapolStart( IN PRTMP_ADAPTER pAd, IN PUCHAR pBssid, IN PMAC_TABLE_ENTRY pMacEntry, IN PAPCLI_STRUCT pApCliEntry); VOID ApCliRTMPSendNullFrame( IN PRTMP_ADAPTER pAd, IN UCHAR TxRate, IN BOOLEAN bQosNull, IN PMAC_TABLE_ENTRY pMacEntry); #endif/*APCLI_WPA_SUPPLICANT_SUPPORT*/ #endif/*APCLI_SUPPORT*/ void RTMP_IndicateMediaState( IN PRTMP_ADAPTER pAd, IN NDIS_MEDIA_STATE media_state); #if defined(RT3350) || defined(RT33xx) VOID RTMP_TxEvmCalibration( IN PRTMP_ADAPTER pAd); #endif /* defined(RT3350) || defined(RT33xx) */ INT RTMPSetInformation( IN RTMP_ADAPTER *pAd, IN OUT RTMP_IOCTL_INPUT_STRUCT *rq, IN INT cmd); INT RTMPQueryInformation( IN RTMP_ADAPTER *pAd, INOUT RTMP_IOCTL_INPUT_STRUCT *rq, IN INT cmd); VOID RTMPIoctlShow( IN RTMP_ADAPTER *pAd, IN RTMP_IOCTL_INPUT_STRUCT *rq, IN UINT32 subcmd, IN VOID *pData, IN ULONG Data); INT RTMP_COM_IoctlHandle( IN VOID *pAdSrc, IN RTMP_IOCTL_INPUT_STRUCT *wrq, IN INT cmd, IN USHORT subcmd, IN VOID *pData, IN ULONG Data); #ifdef CONFIG_AP_SUPPORT INT RTMP_AP_IoctlPrepare( IN RTMP_ADAPTER *pAd, IN VOID *pCB); #endif /* CONFIG_AP_SUPPORT */ INT Set_VcoPeriod_Proc( IN RTMP_ADAPTER *pAd, IN PSTRING arg); INT Set_RateAlg_Proc( IN RTMP_ADAPTER *pAd, IN PSTRING arg); #ifdef SINGLE_SKU INT Set_ModuleTxpower_Proc( IN RTMP_ADAPTER *pAd, IN PSTRING arg); #endif /* SINGLE_SKU */ VOID RtmpEnqueueNullFrame( IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr, IN UCHAR TxRate, IN UCHAR PID, IN UCHAR apidx, IN BOOLEAN bQosNull, IN BOOLEAN bEOSP, IN UCHAR OldUP); VOID RtmpCleanupPsQueue( IN PRTMP_ADAPTER pAd, IN PQUEUE_HEADER pQueue); #ifdef CONFIG_MULTI_CHANNEL VOID RtmpPrepareHwNullFrame( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN BOOLEAN bQosNull, IN BOOLEAN bEOSP, IN UCHAR OldUP, IN UCHAR OpMode, IN UCHAR PwrMgmt, IN BOOLEAN bWaitACK, IN CHAR Index); VOID RTMPHwSendNullFrame( IN PRTMP_ADAPTER pAd, IN UCHAR TxRate, IN BOOLEAN bQosNull, IN USHORT PwrMgmt, IN CHAR Index); VOID RtmpEnqueueLastNullFrame( IN PRTMP_ADAPTER pAd, IN PUCHAR pAddr, IN UCHAR TxRate, IN UCHAR PID, IN UCHAR apidx, IN BOOLEAN bQosNull, IN BOOLEAN bEOSP, IN UCHAR OldUP, IN UCHAR PwrMgmt, IN UCHAR OpMode); VOID RtmpPrepareHwNullFrame( IN PRTMP_ADAPTER pAd, IN PMAC_TABLE_ENTRY pEntry, IN BOOLEAN bQosNull, IN BOOLEAN bEOSP, IN UCHAR OldUP, IN UCHAR OpMode, IN UCHAR PwrMgmt, IN BOOLEAN bWaitACK, IN CHAR Index); VOID MCC_ChangeAction( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); VOID ConcurrentP2PConnectTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3); NDIS_STATUS MultiChannelThreadInit( IN PRTMP_ADAPTER pAd); BOOLEAN MultiChannelThreadExit( IN PRTMP_ADAPTER pAd); VOID MultiChannelTimerStop( IN PRTMP_ADAPTER pAd); VOID MultiChannelTimerStart( IN PRTMP_ADAPTER pAd, IN MAC_TABLE_ENTRY *pEntry); VOID MultiChannelSwitchToRa( IN PRTMP_ADAPTER pAd); VOID MultiChannelSwitchToP2P( IN PRTMP_ADAPTER pAd); #endif /* CONFIG_MULTI_CHANNEL */ UCHAR dot11_2_ra_rate(UCHAR MaxSupportedRateIn500Kbps); UCHAR dot11_max_sup_rate(INT SupRateLen, UCHAR *SupRate, INT ExtRateLen, UCHAR *ExtRate); VOID set_entry_phy_cfg(RTMP_ADAPTER *pAd, MAC_TABLE_ENTRY *pEntry); VOID MacTableReset(RTMP_ADAPTER *pAd); MAC_TABLE_ENTRY *MacTableLookup(RTMP_ADAPTER *pAd, UCHAR *pAddr); BOOLEAN MacTableDeleteEntry(RTMP_ADAPTER *pAd, USHORT wcid, UCHAR *pAddr); MAC_TABLE_ENTRY *MacTableInsertEntry( IN RTMP_ADAPTER *pAd, IN UCHAR *pAddr, IN UCHAR apidx, IN UCHAR OpMode, IN BOOLEAN CleanAll); VOID dumpTxWI(RTMP_ADAPTER *pAd, TXWI_STRUC *pTxWI); VOID dump_rxwi(RTMP_ADAPTER *pAd, RXWI_STRUC *pRxWI); VOID dump_txinfo(RTMP_ADAPTER *pAd, TXINFO_STRUC *pTxInfo); VOID dump_rxinfo(RTMP_ADAPTER *pAd, RXINFO_STRUC *pRxInfo); #if defined(RT65xx) || defined(MT7601) VOID dumpRxFCEInfo(RTMP_ADAPTER *pAd, RXFCE_INFO *pRxFceInfo); #endif /* defined(RT65xx) || defined(MT7601) */ #ifdef FPGA_MODE INT set_tx_kickcnt(RTMP_ADAPTER *pAd, PSTRING arg); INT set_data_phy_mode(RTMP_ADAPTER *pAd, PSTRING arg); INT set_data_bw(RTMP_ADAPTER *pAd, PSTRING arg); INT set_data_mcs(RTMP_ADAPTER *pAd, PSTRING arg); INT set_data_gi(RTMP_ADAPTER *pAd, PSTRING arg); INT set_data_basize(RTMP_ADAPTER *pAd, PSTRING arg); INT set_fpga_mode(RTMP_ADAPTER *pAd, PSTRING arg); #endif /* FPGA_MODE */ #ifdef WFA_VHT_PF INT set_force_amsdu(RTMP_ADAPTER *pAd, PSTRING arg); #endif /* WFA_VHT_PF */ #ifdef RLT_RF INT set_rf(RTMP_ADAPTER *pAd, PSTRING arg); #endif /* RLT_RF */ BOOLEAN CmdRspEventHandle(RTMP_ADAPTER *pAd); #endif /* __RTMP_H__ */