blob: cc75f51c43391363c05a2f9d1423ad2f13365a12 [file]
/******************************************************************************
*
* This file is provided under a dual license. When you use or
* distribute this software, you may choose to be licensed under
* version 2 of the GNU General Public License ("GPLv2 License")
* or BSD License.
*
* GPLv2 License
*
* Copyright(C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*
* BSD LICENSE
*
* Copyright(C) 2016 MediaTek Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*****************************************************************************/
/*! \file adapter.h
* \brief Definition of internal data structure for driver manipulation.
*
* In this file we define the internal data structure - ADAPTER_T which stands
* for MiniPort ADAPTER(From Windows point of view) or stands for
* Network ADAPTER.
*/
#ifndef _ADAPTER_H
#define _ADAPTER_H
/*******************************************************************************
* C O M P I L E R F L A G S
*******************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
*******************************************************************************
*/
#if CFG_SUPPORT_PASSPOINT
#include "hs20.h"
#endif /* CFG_SUPPORT_PASSPOINT */
/*******************************************************************************
* C O N S T A N T S
*******************************************************************************
*/
#if CFG_SUPPORT_CSI
#define CSI_RING_SIZE 1000
#define CSI_MAX_DATA_COUNT 256
#define CSI_MAX_RSVD1_COUNT 10
#define CSI_H_max_Index 4 /* for 2x2 support*/
#define CSI_MAX_RSVD2_COUNT 10
#define Max_Stream_Bytes 3000
#endif
/*******************************************************************************
* D A T A T Y P E S
*******************************************************************************
*/
enum {
ENUM_SW_TEST_MODE_NONE = 0,
ENUM_SW_TEST_MODE_SIGMA_AC = 0x1,
ENUM_SW_TEST_MODE_SIGMA_WFD = 0x2,
ENUM_SW_TEST_MODE_CTIA = 0x3,
ENUM_SW_TEST_MODE_SIGMA_TDLS = 0x4,
ENUM_SW_TEST_MODE_SIGMA_P2P = 0x5,
ENUM_SW_TEST_MODE_SIGMA_N = 0x6,
ENUM_SW_TEST_MODE_SIGMA_HS20_R1 = 0x7,
ENUM_SW_TEST_MODE_SIGMA_HS20_R2 = 0x8,
ENUM_SW_TEST_MODE_SIGMA_PMF = 0x9,
ENUM_SW_TEST_MODE_SIGMA_WMMPS = 0xA,
ENUM_SW_TEST_MODE_SIGMA_AC_R2 = 0xB,
ENUM_SW_TEST_MODE_SIGMA_NAN = 0xC,
ENUM_SW_TEST_MODE_SIGMA_AC_AP = 0xD,
ENUM_SW_TEST_MODE_SIGMA_N_AP = 0xE,
ENUM_SW_TEST_MODE_SIGMA_WFDS = 0xF,
ENUM_SW_TEST_MODE_SIGMA_WFD_R2 = 0x10,
ENUM_SW_TEST_MODE_SIGMA_LOCATION = 0x11,
ENUM_SW_TEST_MODE_SIGMA_TIMING_MANAGEMENT = 0x12,
ENUM_SW_TEST_MODE_SIGMA_WMMAC = 0x13,
ENUM_SW_TEST_MODE_SIGMA_VOICE_ENT = 0x14
};
struct ESS_SCAN_RESULT_T {
uint8_t aucBSSID[MAC_ADDR_LEN];
uint16_t u2SSIDLen;
uint8_t aucSSID[32];
};
struct WLAN_INFO {
struct PARAM_BSSID_EX rCurrBssId;
/* Scan Result */
struct PARAM_BSSID_EX arScanResult[CFG_MAX_NUM_BSS_LIST];
uint8_t *apucScanResultIEs[CFG_MAX_NUM_BSS_LIST];
uint32_t u4ScanResultNum;
struct ESS_SCAN_RESULT_T arScanResultEss[CFG_MAX_NUM_BSS_LIST];
uint32_t u4ScanResultEssNum;
uint32_t u4ScanDbgTimes1;
uint32_t u4ScanDbgTimes2;
uint32_t u4ScanDbgTimes3;
uint32_t u4ScanDbgTimes4;
/* IE pool for Scanning Result */
uint8_t aucScanIEBuf[CFG_MAX_COMMON_IE_BUF_LEN];
uint32_t u4ScanIEBufferUsage;
OS_SYSTIME u4SysTime;
/* connection parameter (for Ad-Hoc) */
uint16_t u2BeaconPeriod;
uint16_t u2AtimWindow;
uint8_t eDesiredRates[PARAM_MAX_LEN_RATES];
struct CMD_LINK_ATTRIB eLinkAttr;
/* CMD_PS_PROFILE_T ePowerSaveMode; */
struct CMD_PS_PROFILE arPowerSaveMode[MAX_BSSID_NUM];
struct CMD_PS_PROFILE arPowerSaveWowMode[MAX_BSSID_NUM];
/* Support power save flag for the caller */
uint32_t u4PowerSaveFlag[MAX_BSSID_NUM];
/* trigger parameter */
enum ENUM_RSSI_TRIGGER_TYPE eRssiTriggerType;
int32_t rRssiTriggerValue;
/* Privacy Filter */
enum ENUM_PARAM_PRIVACY_FILTER ePrivacyFilter;
/* RTS Threshold */
uint32_t eRtsThreshold;
/* Network Type */
uint8_t ucNetworkType;
/* Network Type In Use */
uint8_t ucNetworkTypeInUse;
/* Force enable/disable power save mode*/
u_int8_t fgEnSpecPwrMgt;
};
/* Session for CONNECTION SETTINGS */
struct CONNECTION_SETTINGS {
uint8_t aucMacAddress[MAC_ADDR_LEN];
uint8_t ucDelayTimeOfDisconnectEvent;
u_int8_t fgIsConnByBssidIssued;
uint8_t aucBSSID[MAC_ADDR_LEN];
uint8_t aucBSSIDHint[MAC_ADDR_LEN];
u_int8_t fgIsConnReqIssued;
u_int8_t fgIsDisconnectedByNonRequest;
enum ENUM_RECONNECT_LEVEL_T eReConnectLevel;
uint8_t ucSSIDLen;
uint8_t aucSSID[ELEM_MAX_LEN_SSID];
enum ENUM_PARAM_OP_MODE eOPMode;
enum ENUM_PARAM_CONNECTION_POLICY eConnectionPolicy;
enum ENUM_PARAM_AD_HOC_MODE eAdHocMode;
enum ENUM_PARAM_AUTH_MODE eAuthMode;
enum ENUM_WEP_STATUS eEncStatus;
u_int8_t fgIsScanReqIssued;
/* MIB attributes */
uint16_t u2BeaconPeriod;
uint16_t u2RTSThreshold; /* User desired setting */
uint16_t u2DesiredNonHTRateSet; /* User desired setting */
uint8_t ucAdHocChannelNum; /* For AdHoc */
enum ENUM_BAND eAdHocBand; /* For AdHoc */
uint32_t u4FreqInKHz; /* Center frequency */
/* ATIM windows using for IBSS power saving function */
uint16_t u2AtimWindow;
/* Features */
u_int8_t fgIsEnableRoaming;
u_int8_t fgIsAdHocQoSEnable;
/* Indicates if OKC feature is enabled in wpa_supplicant for this ESS */
u_int8_t fgOkcEnabled;
/* Indicates that there's a PMKSA associated with this ESS
** in supplicant to generate PMKID for each BSS
*/
u_int8_t fgOkcPmksaReady;
enum ENUM_PARAM_PHY_CONFIG eDesiredPhyConfig;
/* Used for AP mode for desired channel and bandwidth */
uint16_t u2CountryCode;
uint8_t uc2G4BandwidthMode; /* 20/40M or 20M only *//* Not used */
uint8_t uc5GBandwidthMode; /* 20/40M or 20M only *//* Not used */
#if CFG_SUPPORT_802_11D
u_int8_t fgMultiDomainCapabilityEnabled;
#endif /* CFG_SUPPORT_802_11D */
#if 1 /* CFG_SUPPORT_WAPI */
u_int8_t fgWapiMode;
uint32_t u4WapiSelectedGroupCipher;
uint32_t u4WapiSelectedPairwiseCipher;
uint32_t u4WapiSelectedAKMSuite;
#endif
/* CR1486, CR1640 */
/* for WPS, disable the privacy check for AP selection policy */
u_int8_t fgPrivacyCheckDisable;
/* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */
uint8_t bmfgApsdEnAc;
/* for RSN info store, when upper layer set rsn info */
struct RSN_INFO rRsnInfo;
u_int8_t fgSecModeChangeStartTimer;
/* Support AP Selection */
struct LINK_MGMT rBlackList;
#if CFG_SUPPORT_CFG80211_AUTH
struct cfg80211_bss *bss;
u_int8_t fgIsConnInitialized;
u_int8_t fgIsSendAssoc;
u_int8_t ucAuthDataLen;
/* Temp assign a fixed large number
* Additional elements for Authentication frame,
* starts with the Authentication transaction sequence number field
*/
u_int8_t aucAuthData[AUTH_DATA_MAX_LEN];
u_int8_t ucChannelNum;
uint8_t ucRoleIdx;
#endif
#if CFG_SUPPORT_OWE
/* for OWE info store, when upper layer set rsn info */
struct OWE_INFO_T rOweInfo;
#endif
struct RSNXE rRsnXE;
u_int8_t fgAuthOsenWithRSN;
};
struct BSS_INFO {
enum ENUM_NETWORK_TYPE eNetworkType;
/* Private data parameter for each NETWORK type usage. */
uint32_t u4PrivateData;
/* P2P network type has 3 network interface to distinguish. */
/* Connected Flag used in AIS_NORMAL_TR */
enum ENUM_PARAM_MEDIA_STATE eConnectionState;
/* The Media State that report to HOST */
enum ENUM_PARAM_MEDIA_STATE eConnectionStateIndicated;
/* Current Operation Mode - Infra/IBSS */
enum ENUM_OP_MODE eCurrentOPMode;
#if CFG_ENABLE_WIFI_DIRECT
enum ENUM_OP_MODE eIntendOPMode;
#endif
#if (CFG_SUPPORT_DFS_MASTER == 1)
u_int8_t fgIsDfsActive;
#endif
u_int8_t fgIsInUse; /* For CNM to assign BSS_INFO */
u_int8_t fgIsNetActive; /* TRUE if this network has been activated */
uint8_t ucBssIndex; /* BSS_INFO_T index */
uint8_t ucReasonOfDisconnect; /* Used by media state indication */
uint8_t ucSSIDLen; /* Length of SSID */
#if CFG_ENABLE_WIFI_DIRECT
/* For Hidden SSID usage. */
enum ENUM_HIDDEN_SSID_TYPE eHiddenSsidType;
#endif
uint8_t aucSSID[ELEM_MAX_LEN_SSID]; /* SSID used in this BSS */
uint8_t aucBSSID[MAC_ADDR_LEN]; /* The BSSID of the associated BSS */
/* Owned MAC Address used in this BSS */
uint8_t aucOwnMacAddr[MAC_ADDR_LEN];
uint8_t ucOwnMacIndex; /* Owned MAC index used in this BSS */
/* For Infra Mode, and valid only if
* eConnectionState == MEDIA_STATE_CONNECTED
*/
struct STA_RECORD *prStaRecOfAP;
/* For IBSS/AP Mode, all known STAs in current BSS */
struct LINK rStaRecOfClientList;
/* For open Mode, BC/MC Tx wlan index, For STA, BC/MC Rx wlan index */
uint8_t ucBMCWlanIndex;
/* For AP Mode, BC/MC Tx wlan index, For STA, BC/MC Rx wlan index */
uint8_t ucBMCWlanIndexS[MAX_KEY_NUM];
uint8_t ucBMCWlanIndexSUsed[MAX_KEY_NUM];
u_int8_t fgBcDefaultKeyExist; /* Bc Transmit key exist or not */
/* Bc default key idx, for STA, the Rx just set,
* for AP, the tx key id
*/
uint8_t ucBcDefaultKeyIdx;
uint8_t wepkeyUsed[MAX_KEY_NUM];
uint8_t wepkeyWlanIdx; /* wlan index of the wep key */
uint16_t u2CapInfo; /* Change Detection */
uint16_t u2BeaconInterval; /* The Beacon Interval of this BSS */
uint16_t u2ATIMWindow; /* For IBSS Mode */
/* For Infra Mode, it is the Assoc ID assigned by AP. */
uint16_t u2AssocId;
uint8_t ucDTIMPeriod; /* For Infra/AP Mode */
u_int8_t fgTIMPresent;
/* For AP Mode, it is the DTIM value we should carried in
* the Beacon of next TBTT.
*/
uint8_t ucDTIMCount;
/* Available PHY Type Set of this peer
* (This is deduced from received struct BSS_DESC)
*/
uint8_t ucPhyTypeSet;
/* The Basic PHY Type Index, used to setup Phy Capability */
uint8_t ucNonHTBasicPhyType;
/* The configuration of AdHoc/AP Mode. e.g. 11g or 11b */
uint8_t ucConfigAdHocAPMode;
u_int8_t fgIsWepCipherGroup;
/* For Infra/AP Mode, it is a threshold of Beacon Lost Count to
* confirm connection was lost
*/
uint8_t ucBeaconTimeoutCount;
/* For IBSS Mode, to keep use same BSSID
* to extend the life cycle of an IBSS
*/
u_int8_t fgHoldSameBssidForIBSS;
/* For AP/IBSS Mode, it is used to indicate that Beacon is sending */
u_int8_t fgIsBeaconActivated;
struct MSDU_INFO *prBeacon; /* For AP/IBSS Mode - Beacon Frame */
/* For IBSS Mode - To indicate that we can reply ProbeResp Frame.
* In current TBTT interval
*/
u_int8_t fgIsIBSSMaster;
/* From Capability Info. of AssocResp Frame
* AND of Beacon/ProbeResp Frame
*/
u_int8_t fgIsShortPreambleAllowed;
/* Short Preamble is enabled in current BSS. */
u_int8_t fgUseShortPreamble;
/* Short Slot Time is enabled in current BSS. */
u_int8_t fgUseShortSlotTime;
/* Operational Rate Set of current BSS */
uint16_t u2OperationalRateSet;
uint16_t u2BSSBasicRateSet; /* Basic Rate Set of current BSS */
/* Used for composing Beacon Frame in AdHoc or AP Mode */
uint8_t ucAllSupportedRatesLen;
uint8_t aucAllSupportedRates[RATE_NUM_SW];
/* TODO(Kevin): Number of associated clients */
uint8_t ucAssocClientCnt;
u_int8_t fgIsProtection;
/* For Infra/AP/IBSS Mode, it is used to indicate if we support WMM in
* current BSS.
*/
u_int8_t fgIsQBSS;
u_int8_t fgIsNetAbsent; /* TRUE: BSS is absent, FALSE: BSS is present */
uint32_t u4RsnSelectedGroupCipher;
uint32_t u4RsnSelectedPairwiseCipher;
uint32_t u4RsnSelectedAKMSuite;
uint16_t u2RsnSelectedCapInfo;
/*-------------------------------------------------------------------*/
/* Operation mode change notification */
/*-------------------------------------------------------------------*/
/*Need to change OpMode channel width*/
u_int8_t fgIsOpChangeChannelWidth;
/* The OpMode channel width that we want to change to*/
/* 0:20MHz, 1:40MHz, 2:80MHz, 3:160MHz 4:80+80MHz*/
uint8_t ucOpChangeChannelWidth;
u_int8_t fgIsOpChangeNss; /*Need to change OpMode Nss*/
uint8_t ucOpChangeNss; /* The OpMode Nss that we want to change to */
PFN_OPMODE_NOTIFY_DONE_FUNC pfOpChangeHandler;
enum ENUM_OP_NOTIFY_STATE_T aucOpModeChangeState[OP_NOTIFY_TYPE_NUM];
uint8_t aucOpModeChangeRetryCnt[OP_NOTIFY_TYPE_NUM];
/*-------------------------------------------------------------------*/
/* Power Management related information */
/*-------------------------------------------------------------------*/
struct PM_PROFILE_SETUP_INFO rPmProfSetupInfo;
/*-------------------------------------------------------------------*/
/* WMM/QoS related information */
/*-------------------------------------------------------------------*/
/* Used to detect the change of EDCA parameters. For AP mode,
* the value is used in WMM IE
*/
uint8_t ucWmmParamSetCount;
struct AC_QUE_PARMS arACQueParms[WMM_AC_INDEX_NUM];
/* For AP mode, broadcast the CWminLog2 */
uint8_t aucCWminLog2ForBcast[WMM_AC_INDEX_NUM];
/* For AP mode, broadcast the CWmaxLog2 */
uint8_t aucCWmaxLog2ForBcast[WMM_AC_INDEX_NUM];
/* For AP mode, broadcast the value */
struct AC_QUE_PARMS arACQueParmsForBcast[WMM_AC_INDEX_NUM];
uint8_t ucWmmQueSet;
#if (CFG_HW_WMM_BY_BSS == 1)
u_int8_t fgIsWmmInited;
#endif
/*-------------------------------------------------------------------*/
/* 802.11n HT operation IE when (prStaRec->ucPhyTypeSet */
/* & PHY_TYPE_BIT_HT) is true. They have the same definition with */
/* fields of information element (CM) */
/*-------------------------------------------------------------------*/
enum ENUM_BAND eBand;
uint8_t ucPrimaryChannel;
uint8_t ucHtOpInfo1;
uint16_t u2HtOpInfo2;
uint16_t u2HtOpInfo3;
uint8_t ucNss; /* Own OP Nss */
/*-------------------------------------------------------------------*/
/* 802.11ac VHT operation IE when (prStaRec->ucPhyTypeSet */
/* & PHY_TYPE_BIT_VHT) is true. They have the same definition with */
/* fields of information element (EASON) */
/*-------------------------------------------------------------------*/
#if 1 /* CFG_SUPPORT_802_11AC */
uint8_t ucVhtChannelWidth;
uint8_t ucVhtChannelFrequencyS1;
uint8_t ucVhtChannelFrequencyS2;
uint16_t u2VhtBasicMcsSet;
#endif
/*-------------------------------------------------------------------*/
/* Required protection modes (CM) */
/*-------------------------------------------------------------------*/
u_int8_t fgErpProtectMode;
enum ENUM_HT_PROTECT_MODE eHtProtectMode;
enum ENUM_GF_MODE eGfOperationMode;
enum ENUM_RIFS_MODE eRifsOperationMode;
u_int8_t fgObssErpProtectMode; /* GO only */
enum ENUM_HT_PROTECT_MODE eObssHtProtectMode; /* GO only */
enum ENUM_GF_MODE eObssGfOperationMode; /* GO only */
u_int8_t fgObssRifsOperationMode; /* GO only */
/*-------------------------------------------------------------------*/
/* OBSS to decide if 20/40M bandwidth is permitted. */
/* The first member indicates the following channel list length. */
/*-------------------------------------------------------------------*/
u_int8_t fgAssoc40mBwAllowed;
u_int8_t fg40mBwAllowed;
enum ENUM_CHNL_EXT eBssSCO; /* Real setting for HW
* 20/40M AP mode will always set 40M,
* but its OP IE can be changed.
*/
uint8_t auc2G_20mReqChnlList[CHNL_LIST_SZ_2G + 1];
uint8_t auc2G_NonHtChnlList[CHNL_LIST_SZ_2G + 1];
uint8_t auc2G_PriChnlList[CHNL_LIST_SZ_2G + 1];
uint8_t auc2G_SecChnlList[CHNL_LIST_SZ_2G + 1];
uint8_t auc5G_20mReqChnlList[CHNL_LIST_SZ_5G + 1];
uint8_t auc5G_NonHtChnlList[CHNL_LIST_SZ_5G + 1];
uint8_t auc5G_PriChnlList[CHNL_LIST_SZ_5G + 1];
uint8_t auc5G_SecChnlList[CHNL_LIST_SZ_5G + 1];
/*-------------------------------------------------------------------*/
/* Scan related information */
/*-------------------------------------------------------------------*/
/* Set scanning MAC OUI */
u_int8_t fgIsScanOuiSet;
uint8_t ucScanOui[MAC_OUI_LEN];
struct TIMER rObssScanTimer;
uint16_t u2ObssScanInterval; /* in unit of sec */
u_int8_t fgObssActionForcedTo20M; /* GO only */
u_int8_t fgObssBeaconForcedTo20M; /* GO only */
/*--------------------------------------------------------------------*/
/* HW Related Fields (Kevin) */
/*--------------------------------------------------------------------*/
/* The default rate code copied to MAC TX Desc */
uint16_t u2HwDefaultFixedRateCode;
uint16_t u2HwLPWakeupGuardTimeUsec;
uint8_t ucBssFreeQuota; /* The value is updated from FW */
#if CFG_ENABLE_GTK_FRAME_FILTER
struct IPV4_NETWORK_ADDRESS_LIST *prIpV4NetAddrList;
#endif
uint16_t u2DeauthReason;
#if CFG_SUPPORT_TDLS
u_int8_t fgTdlsIsProhibited;
u_int8_t fgTdlsIsChSwProhibited;
#endif
#if CFG_SUPPORT_PNO
u_int8_t fgIsPNOEnable;
u_int8_t fgIsNetRequestInActive;
#endif
/*link layer statistics */
struct WIFI_WMM_AC_STAT arLinkStatistics[WMM_AC_INDEX_NUM];
uint32_t u4CoexPhyRateLimit;
#if CFG_SUPPORT_ROAMING_SKIP_ONE_AP
uint8_t ucRoamSkipTimes;
u_int8_t fgGoodRcpiArea;
u_int8_t fgPoorRcpiArea;
#endif
u_int8_t fgIsGranted;
enum ENUM_BAND eBandGranted;
uint8_t ucPrimaryChannelGranted;
struct PARAM_CUSTOM_ACL rACL;
#if CFG_SUPPORT_802_11W
/* AP PMF */
struct AP_PMF_CFG rApPmfCfg;
#endif
#if IS_ENABLED(CFG_CCN7_SAP_EASYMESH)
uint32_t u4ChanUtil;
int32_t i4NoiseHistogram;
struct T_MULTI_AP_STA_UNASSOC_METRICS
arUnAssocSTA[SAP_UNASSOC_METRICS_STA_MAX];
struct TIMER rUnassocStaMeasureTimer;
#endif
uint8_t ucCountryIELen;
uint8_t aucCountryStr[3];
uint8_t aucSubbandTriplet[253];
enum ENUM_KEY_ACTION_TYPE_T eKeyAction;
enum ENUM_IFTYPE eIftype;
enum PARAM_POWER_MODE ePowerModeFromUser;
};
/* Support AP Selection */
struct ESS_CHNL_INFO {
uint8_t ucChannel;
uint8_t ucUtilization;
uint8_t ucApNum;
};
/* end Support AP Selection */
struct NEIGHBOR_AP_T {
struct LINK_ENTRY rLinkEntry;
uint8_t aucBssid[MAC_ADDR_LEN];
u_int8_t fgHT:1;
u_int8_t fgSameMD:1;
u_int8_t fgRmEnabled:1;
u_int8_t fgFromBtm:1;
u_int8_t fgQoS:1;
uint8_t ucReserved:3;
u_int8_t fgPrefPresence;
uint8_t ucPreference;
uint8_t ucChannel;
uint64_t u8TermTsf;
};
struct AIS_SPECIFIC_BSS_INFO {
/* This value indicate the roaming type used in AIS_JOIN */
uint8_t ucRoamingAuthTypes;
u_int8_t fgIsIBSSActive;
/*! \brief Global flag to let arbiter stay at standby
* and not connect to any network
*/
u_int8_t fgCounterMeasure;
#if 0
u_int8_t fgWepWapiBcKeyExist; /* WEP WAPI BC key exist flag */
uint8_t ucWepWapiBcWlanIndex; /* WEP WAPI BC wlan index */
/* RSN BC key exist flag, map to key id 0, 1, 2, 3 */
u_int8_t fgRsnBcKeyExist[4];
/* RSN BC wlan index, map to key id 0, 1, 2, 3 */
uint8_t ucRsnBcWlanIndex[4];
#endif
/* While Do CounterMeasure procedure,
* check the EAPoL Error report have send out
*/
u_int8_t fgCheckEAPoLTxDone;
uint32_t u4RsnaLastMICFailTime;
/* Stored the current bss wpa rsn cap filed, used for roaming policy */
/* UINT_16 u2RsnCap; */
struct TIMER rPreauthenticationTimer;
/* By the flow chart of 802.11i,
* wait 60 sec before associating to same AP
* or roaming to a new AP
* or sending data in IBSS,
* keep a timer for handle the 60 sec counterMeasure
*/
struct TIMER rRsnaBlockTrafficTimer;
struct TIMER rRsnaEAPoLReportTimeoutTimer;
/* For Keep the Tx/Rx Mic key for TKIP SW Calculate Mic */
/* This is only one for AIS/AP */
uint8_t aucTxMicKey[8];
uint8_t aucRxMicKey[8];
/* Buffer for WPA2 PMKID */
/* The PMKID cache lifetime is expire by media_disconnect_indication */
uint32_t u4PmkidCandicateCount;
struct PMKID_CANDICATE arPmkidCandicate[CFG_MAX_PMKID_CACHE];
uint32_t u4PmkidCacheCount;
struct PMKID_ENTRY arPmkidCache[CFG_MAX_PMKID_CACHE];
u_int8_t fgIndicatePMKID;
#if CFG_SUPPORT_802_11W
u_int8_t fgMgmtProtection;
uint32_t u4SaQueryStart;
uint32_t u4SaQueryCount;
uint8_t ucSaQueryTimedOut;
uint8_t *pucSaQueryTransId;
struct TIMER rSaQueryTimer;
u_int8_t fgBipKeyInstalled;
#endif
uint8_t ucKeyAlgorithmId;
/* Support AP Selection */
struct ESS_CHNL_INFO arCurEssChnlInfo[CFG_MAX_NUM_OF_CHNL_INFO];
uint8_t ucCurEssChnlInfoNum;
struct LINK rCurEssLink;
/* end Support AP Selection */
struct BSS_TRANSITION_MGT_PARAM_T rBTMParam;
struct LINK_MGMT rNeighborApList;
OS_SYSTIME rNeiApRcvTime;
uint32_t u4NeiApValidInterval;
};
struct BOW_SPECIFIC_BSS_INFO {
uint16_t u2Reserved; /* Reserved for Data Type Check */
};
#if CFG_SLT_SUPPORT
struct SLT_INFO {
struct BSS_DESC *prPseudoBssDesc;
uint16_t u2SiteID;
uint8_t ucChannel2G4;
uint8_t ucChannel5G;
u_int8_t fgIsDUT;
uint32_t u4BeaconReceiveCnt;
/* ///////Deprecated///////// */
struct STA_RECORD *prPseudoStaRec;
};
#endif
struct WLAN_TABLE {
uint8_t ucUsed;
uint8_t ucBssIndex;
uint8_t ucKeyId;
uint8_t ucPairwise;
uint8_t aucMacAddr[MAC_ADDR_LEN];
uint8_t ucStaIndex;
};
/* Major member variables for WiFi FW operation.
* Variables within this region will be ready for
* access after WIFI function is enabled.
*/
struct WIFI_VAR {
u_int8_t fgIsRadioOff;
u_int8_t fgIsEnterD3ReqIssued;
u_int8_t fgDebugCmdResp;
struct CONNECTION_SETTINGS rConnSettings;
struct SCAN_INFO rScanInfo;
#if CFG_SUPPORT_ROAMING
struct ROAMING_INFO rRoamingInfo;
#endif /* CFG_SUPPORT_ROAMING */
struct AIS_FSM_INFO rAisFsmInfo;
enum ENUM_PWR_STATE aePwrState[MAX_BSSID_NUM + 1];
struct BSS_INFO arBssInfoPool[MAX_BSSID_NUM];
struct BSS_INFO rP2pDevInfo;
struct AIS_SPECIFIC_BSS_INFO rAisSpecificBssInfo;
#if CFG_ENABLE_WIFI_DIRECT
struct P2P_CONNECTION_SETTINGS *prP2PConnSettings[BSS_P2P_NUM];
struct P2P_SPECIFIC_BSS_INFO *prP2pSpecificBssInfo[BSS_P2P_NUM];
/* P_P2P_FSM_INFO_T prP2pFsmInfo; */
struct P2P_DEV_FSM_INFO *prP2pDevFsmInfo;
/* Currently we only support 2 p2p interface. */
struct P2P_ROLE_FSM_INFO *aprP2pRoleFsmInfo[BSS_P2P_NUM];
#if CFG_ENABLE_PER_STA_STATISTICS_LOG
struct PARAM_GET_STA_STATISTICS *prP2pQueryStaStatistics[BSS_P2P_NUM];
#endif
#endif /* CFG_ENABLE_WIFI_DIRECT */
#if CFG_ENABLE_BT_OVER_WIFI
struct BOW_SPECIFIC_BSS_INFO rBowSpecificBssInfo;
struct BOW_FSM_INFO rBowFsmInfo;
#endif /* CFG_ENABLE_BT_OVER_WIFI */
struct WLAN_TABLE arWtbl[WTBL_SIZE];
struct DEAUTH_INFO arDeauthInfo[MAX_DEAUTH_INFO_COUNT];
/* Current Wi-Fi Settings and Flags */
uint8_t aucPermanentAddress[MAC_ADDR_LEN];
uint8_t aucMacAddress[MAC_ADDR_LEN];
uint8_t aucDeviceAddress[MAC_ADDR_LEN];
uint8_t aucInterfaceAddress[MAC_ADDR_LEN];
uint8_t ucAvailablePhyTypeSet;
/* Basic Phy Type used by SCN according
* to the set of Available PHY Types
*/
enum ENUM_PHY_TYPE_INDEX eNonHTBasicPhyType2G4;
enum ENUM_PARAM_PREAMBLE_TYPE ePreambleType;
enum ENUM_REGISTRY_FIXED_RATE eRateSetting;
u_int8_t fgIsShortSlotTimeOptionEnable;
/* User desired setting, but will honor the capability of AP */
u_int8_t fgEnableJoinToHiddenSSID;
u_int8_t fgSupportWZCDisassociation;
#if CFG_SUPPORT_WFD
struct WFD_CFG_SETTINGS rWfdConfigureSettings;
#endif
#if CFG_SLT_SUPPORT
struct SLT_INFO rSltInfo;
#endif
#if CFG_SUPPORT_PASSPOINT
struct HS20_INFO rHS20Info;
#endif /* CFG_SUPPORT_PASSPOINT */
uint8_t aucMediatekOuiIE[64];
uint16_t u2MediatekOuiIELen;
/* Feature Options */
uint8_t ucQoS;
uint8_t ucStaHt;
uint8_t ucStaVht;
uint8_t ucApHt;
uint8_t ucApVht;
uint8_t ucP2pGoHt;
uint8_t ucP2pGoVht;
uint8_t ucP2pGcHt;
uint8_t ucP2pGcVht;
uint8_t ucDisP2pPs;
/* NIC capability from FW event*/
uint8_t ucHwNotSupportAC;
uint8_t ucAmpduTx;
uint8_t ucAmpduRx;
uint8_t ucAmsduInAmpduTx;
uint8_t ucAmsduInAmpduRx;
uint8_t ucHtAmsduInAmpduTx;
uint8_t ucHtAmsduInAmpduRx;
uint8_t ucVhtAmsduInAmpduTx;
uint8_t ucVhtAmsduInAmpduRx;
uint8_t ucTspec;
uint8_t ucUapsd;
uint8_t ucStaUapsd;
uint8_t ucApUapsd;
uint8_t ucP2pUapsd;
uint8_t ucTxShortGI;
uint8_t ucRxShortGI;
uint8_t ucTxLdpc;
uint8_t ucRxLdpc;
uint8_t ucTxStbc;
uint8_t ucRxStbc;
uint8_t ucRxStbcNss;
uint8_t ucTxGf;
uint8_t ucRxGf;
uint8_t ucMCS32;
uint8_t ucTxopPsTx;
uint8_t ucSigTaRts;
uint8_t ucDynBwRts;
uint8_t ucStaHtBfee;
uint8_t ucStaVhtBfee;
uint8_t ucStaHtBfer;
uint8_t ucStaVhtBfer;
uint8_t ucStaVhtMuBfee;
uint8_t fgForceSTSNum;
uint8_t ucDataTxDone;
uint8_t ucDataTxRateMode;
uint32_t u4DataTxRateCode;
uint8_t ucApWpsMode;
uint8_t ucApChannel;
uint8_t ucApSco;
uint8_t ucP2pGoSco;
uint8_t ucStaBandwidth;
uint8_t ucSta5gBandwidth;
uint8_t ucSta2gBandwidth;
uint8_t ucApBandwidth;
uint8_t ucAp2gBandwidth;
uint8_t ucAp5gBandwidth;
uint8_t ucP2p5gBandwidth;
uint8_t ucP2p2gBandwidth;
/* If enable, AP channel bandwidth Channel
* Center Frequency Segment 0/1
*/
/* and secondary channel offset will align wifi.cfg */
/* Otherwise align cfg80211 */
uint8_t ucApChnlDefFromCfg;
/*
* According TGn/TGac 4.2.44, AP should not connect
* with TKIP client with HT/VHT capabilities. We leave
* a wifi.cfg item for user to decide whether to
* enable HT/VHT capabilities in that case
*/
uint8_t ucApAllowHtVhtTkip;
uint8_t fgReuseRSNIE;
uint8_t ucNSS;
uint8_t ucRxMaxMpduLen;
uint32_t u4TxMaxAmsduInAmpduLen;
uint8_t ucTxBaSize;
uint8_t ucRxHtBaSize;
uint8_t ucRxVhtBaSize;
uint8_t ucThreadScheduling;
uint8_t ucThreadPriority;
int8_t cThreadNice;
uint8_t ucTcRestrict;
uint32_t u4MaxTxDeQLimit;
uint8_t ucAlwaysResetUsedRes;
uint32_t u4NetifStopTh;
uint32_t u4NetifStartTh;
#if CFG_AUTO_CHANNEL_SEL_SUPPORT
struct PARAM_GET_CHN_INFO rChnLoadInfo;
#endif
#if CFG_SUPPORT_MTK_SYNERGY
uint8_t ucMtkOui;
uint32_t u4MtkOuiCap;
uint8_t aucMtkFeature[4];
u_int8_t ucGbandProbe256QAM;
#endif
#if CFG_SUPPORT_VHT_IE_IN_2G
uint8_t ucVhtIeIn2g;
#endif
u_int8_t fgCsaInProgress;
uint8_t ucChannelSwitchMode;
uint8_t ucNewChannelNumber;
uint8_t ucChannelSwitchCount;
uint32_t u4HifIstLoopCount;
uint32_t u4Rx2OsLoopCount;
uint32_t u4HifTxloopCount;
uint32_t u4TxRxLoopCount;
uint32_t u4TxFromOsLoopCount;
uint32_t u4TxIntThCount;
uint32_t au4TcPageCount[TC_NUM];
uint32_t au4TcPageCountPle[TC_NUM];
uint8_t ucExtraTxDone;
uint8_t ucTxDbg;
uint8_t ucCmdRsvResource;
uint32_t u4MgmtQueueDelayTimeout;
uint32_t u4StatsLogTimeout;
uint32_t u4StatsLogDuration;
uint8_t ucDhcpTxDone;
uint8_t ucArpTxDone;
uint8_t ucMacAddrOverride;
uint8_t aucMacAddrStr[32];
uint8_t ucCtiaMode;
uint8_t ucTpTestMode;
uint8_t ucSigmaTestMode;
#if CFG_SUPPORT_DBDC
enum ENUM_CNM_DBDC_MODE eDbdcMode;
u_int8_t fgDbDcModeEn;
#endif
uint8_t u4ScanCtrl;
uint8_t ucScanChannelListenTime;
#if (CFG_EFUSE_BUFFER_MODE_DELAY_CAL == 1)
uint8_t ucEfuseBufferModeCal;
#endif
uint8_t ucCalTimingCtrl;
uint8_t ucWow;
uint8_t ucOffload;
uint8_t ucAdvPws; /* enable LP multiple DTIM function, default enable */
uint8_t ucWowOnMdtim; /* multiple DTIM if WOW enable, default 1 */
uint8_t ucWowOffMdtim; /* multiple DTIM if WOW disable, default 3 */
uint8_t ucWowPwsMode; /* when enter wow, auto enter power mode */
uint8_t ucListenDtimInterval; /* the times of the dtim interval */
uint8_t ucEapolOffload; /* eapol offload when active mode / wow mode */
uint8_t ucEnforcePSMode; /* Enforce power mode */
uint8_t ucDisSuspendScrOff; /* Do NOT suspend when screen off */
uint8_t ucMobileLikeSuspend; /* allow mobile like suspend */
#if CFG_SUPPORT_REPLAY_DETECTION
uint8_t ucRpyDetectOffload; /* replay detection eapol offload */
#endif
#if (CFG_SUPPORT_APF == 1)
uint8_t ucApfEnable;
#endif
uint8_t u4SwTestMode;
uint8_t ucCtrlFlagAssertPath;
uint8_t ucCtrlFlagDebugLevel;
uint32_t u4WakeLockRxTimeout;
uint32_t u4WakeLockThreadWakeup;
uint32_t u4RegP2pIfAtProbe; /* register p2p interface during probe */
/* p2p group interface use the same mac addr as p2p device interface */
uint8_t ucP2pShareMacAddr;
uint8_t ucSmartRTS;
/* The duration in ms to check TRX while the beacon timeout event */
uint32_t u4BeaconTimoutFilterDurationMs;
uint32_t u4UapsdAcBmp;
uint32_t u4MaxSpLen;
/* 0: enable online scan, non-zero: disable online scan */
uint32_t fgDisOnlineScan;
uint32_t fgDisBcnLostDetection;
uint32_t fgDisRoaming; /* 0:enable roaming 1:disable */
uint32_t fgEnArpFilter;
uint8_t uDeQuePercentEnable;
uint32_t u4DeQuePercentVHT80Nss1;
uint32_t u4DeQuePercentVHT40Nss1;
uint32_t u4DeQuePercentVHT20Nss1;
uint32_t u4DeQuePercentHT40Nss1;
uint32_t u4DeQuePercentHT20Nss1;
uint32_t u4PerfMonUpdatePeriod;
uint32_t u4PerfMonTpTh[PERF_MON_TP_MAX_THRESHOLD];
uint32_t u4BoostCpuTh;
u_int8_t fgTdlsBufferSTASleep; /* Support TDLS 5.5.4.2 optional case */
u_int8_t fgChipResetRecover;
enum PARAM_POWER_MODE ePowerMode;
u_int8_t fgActiveModeCam;
u_int8_t fgNvramCheckEn; /* nvram checking in scan result*/
#if CFG_SUPPORT_SPE_IDX_CONTROL
u_int8_t ucSpeIdxCtrl; /* 0: WF0, 1: WF1, 2: duplicate */
#if CFG_SUPPORT_COEX_NON_COTX
u_int8_t ucSpeIdxCtrl2g; /* 0:WF0, 1:WF1, 2: both WF0/1 only in 2G*/
u_int8_t fgCoexNonCoTx; /* 0(default):allow co-Tx,1:disallow co-Tx*/
#endif
#endif
int32_t ucEd2GNonEU;
int32_t ucEd5GNonEU;
int32_t ucEd2GEU;
int32_t ucEd5GEU;
uint8_t ucEnforceCAM2G;
#if CFG_SUPPORT_LOWLATENCY_MODE
uint8_t ucLowLatencyModeScan;
uint8_t ucLowLatencyModeReOrder;
uint8_t ucLowLatencyModePower;
#endif /* CFG_SUPPORT_LOWLATENCY_MODE */
/* 11K */
struct RADIO_MEASUREMENT_REQ_PARAMS rRmReqParams;
struct RADIO_MEASUREMENT_REPORT_PARAMS rRmRepParams;
/* WMMAC */
struct WMM_INFO rWmmInfo;
#ifdef CFG_SUPPORT_ADJUST_JOIN_CH_REQ_INTERVAL
uint32_t u4AisJoinChReqIntervel;
#endif
#if CFG_SUPPORT_TPENHANCE_MODE
uint8_t ucTpEnhanceEnable;
uint8_t ucTpEnhancePktNum;
uint32_t u4TpEnhanceInterval; /* in us */
int8_t cTpEnhanceRSSI;
uint32_t u4TpEnhanceThreshold;
#endif /* CFG_SUPPORT_TPENHANCE_MODE */
uint32_t ucTputThresholdMbps;
#if IS_ENABLED(CFG_RX_NAPI_SUPPORT)
uint8_t ucRxNapiEnable;
uint8_t ucRxNapiPktChk;
uint8_t ucRxNapiThread;
uint8_t ucRxNapiNoTx;
uint32_t ucRxNapiThreshold;
#endif /* CFG_RX_NAPI_SUPPORT */
#if CFG_SUPPORT_WAC
uint16_t u2WACIELen;
uint8_t aucWACIECache[ELEM_MAX_LEN_WAC_INFO];
bool fgEnableWACIE;
#endif
uint32_t u4ForceEdca;
uint32_t u4P2pGoWmmParamAC0;
uint32_t u4P2pGoWmmParamAC1;
uint32_t u4P2pGoWmmParamAC2;
uint32_t u4P2pGoWmmParamAC3;
uint8_t ucDisMixRegionSetup;
#if CFG_SCAN_TIMEOUT_RST
uint8_t ucScanTimeoutRstCnt;
#endif /* CFG_SCAN_TIMEOUT_RST */
};
/* cnm_timer module */
struct ROOT_TIMER {
struct LINK rLinkHead;
OS_SYSTIME rNextExpiredSysTime;
KAL_WAKE_LOCK_T *prWakeLock;
u_int8_t fgWakeLocked;
};
/* FW/DRV/NVRAM version information */
struct WIFI_VER_INFO {
/* NVRAM or Registry */
uint16_t u2Part1CfgOwnVersion;
uint16_t u2Part1CfgPeerVersion;
uint16_t u2Part2CfgOwnVersion;
uint16_t u2Part2CfgPeerVersion;
/* Firmware */
uint8_t aucReleaseManifest[256];
/* N9 SW */
uint16_t u2FwProductID;
uint16_t u2FwOwnVersion;
uint16_t u2FwPeerVersion;
uint8_t ucFwBuildNumber;
uint8_t aucFwBranchInfo[4];
uint8_t aucFwDateCode[16];
struct TAILER_COMMON_FORMAT_T rCommonTailer;
struct TAILER_REGION_FORMAT_T rRegionTailers[MAX_FWDL_SECTION_NUM];
/* N9 tailer */
struct TAILER_FORMAT_T rN9tailer[N9_FWDL_SECTION_NUM];
/* CR4 tailer */
struct TAILER_FORMAT_T rCR4tailer[CR4_FWDL_SECTION_NUM];
#if CFG_SUPPORT_COMPRESSION_FW_OPTION
/* N9 Compressed tailer */
struct TAILER_FORMAT_T_2 rN9Compressedtailer;
/* CR4 tailer */
struct TAILER_FORMAT_T_2 rCR4Compressedtailer;
u_int8_t fgIsN9CompressedFW;
u_int8_t fgIsCR4CompressedFW;
#endif
/* Patch header */
struct PATCH_FORMAT_T rPatchHeader;
u_int8_t fgPatchIsDlByDrv;
};
#if CFG_ENABLE_WIFI_DIRECT
/*
* p2p function pointer structure
*/
struct P2P_FUNCTION_LINKER {
P2P_REMOVE prP2pRemove;
P2P_GENERATE_P2P_IE prP2pGenerateWSC_IEForBeacon;
P2P_NET_REGISTER prP2pNetRegister;
P2P_NET_UNREGISTER prP2pNetUnregister;
/* All IEs generated from supplicant. */
P2P_CALCULATE_P2P_IE_LEN prP2pCalculateP2p_IELenForAssocReq;
/* All IEs generated from supplicant. */
P2P_GENERATE_P2P_IE prP2pGenerateP2p_IEForAssocReq;
};
#endif
#if CFG_SUPPORT_NCHO
enum _ENUM_NCHO_ITEM_SET_TYPE_T {
ITEM_SET_TYPE_NUM,
ITEM_SET_TYPE_STR
};
enum _ENUM_NCHO_BAND_T {
NCHO_BAND_AUTO = 0,
NCHO_BAND_5G,
NCHO_BAND_2G4,
NCHO_BAND_NUM
};
enum _ENUM_NCHO_DFS_SCN_MODE_T {
NCHO_DFS_SCN_DISABLE = 0,
NCHO_DFS_SCN_ENABLE1,
NCHO_DFS_SCN_ENABLE2,
NCHO_DFS_SCN_NUM
};
struct _CFG_NCHO_RE_ASSOC_T {
/*!< SSID length in bytes. Zero length is broadcast(any) SSID */
uint32_t u4SsidLen;
uint8_t aucSsid[ELEM_MAX_LEN_SSID];
uint8_t aucBssid[MAC_ADDR_LEN];
uint32_t u4CenterFreq;
};
struct _CFG_NCHO_SCAN_CHNL_T {
uint8_t ucChannelListNum;
struct RF_CHANNEL_INFO arChnlInfoList[MAXIMUM_OPERATION_CHANNEL_LIST];
};
struct _NCHO_ACTION_FRAME_PARAMS_T {
uint8_t aucBssid[MAC_ADDR_LEN];
int32_t i4channel;
int32_t i4DwellTime;
int32_t i4len;
uint8_t aucData[520];
};
struct _NCHO_AF_INFO_T {
uint8_t *aucBssid;
int32_t i4channel;
int32_t i4DwellTime;
int32_t i4len;
uint8_t *pucData;
};
struct _NCHO_INFO_T {
u_int8_t fgECHOEnabled;
u_int8_t fgChGranted;
u_int8_t fgIsSendingAF;
int32_t i4RoamTrigger; /* db */
int32_t i4RoamDelta; /* db */
uint32_t u4RoamScanPeriod; /* ms */
uint32_t u4ScanChannelTime; /* ms */
uint32_t u4ScanHomeTime; /* ms */
uint32_t u4ScanHomeawayTime; /* ms */
uint32_t u4ScanNProbes;
uint32_t u4WesMode;
enum _ENUM_NCHO_BAND_T eBand;
enum _ENUM_NCHO_DFS_SCN_MODE_T eDFSScnMode;
uint32_t u4RoamScanControl;
struct _CFG_NCHO_SCAN_CHNL_T rRoamScnChnl;
struct _NCHO_ACTION_FRAME_PARAMS_T rParamActionFrame;
};
#endif
struct WIFI_FEM_CFG {
/* WiFi FEM path */
uint16_t u2WifiPath;
uint16_t u2Reserved;
/* Reserved */
uint32_t au4Reserved[4];
};
/*
* State Machine:
* -->STOP: No Tx/Rx traffic
* -->DISABLE: Screen is off
* -->RUNNING: Screen is on && Tx/Rx traffic is active
*/
struct PERF_MONITOR_T {
struct TIMER rPerfMonTimer;
unsigned long ulPerfMonFlag;
unsigned long ulLastTxBytes;
unsigned long ulLastRxBytes;
unsigned long ulP2PLastRxBytes;
unsigned long ulP2PLastTxBytes;
unsigned long ulThroughput; /* in bps */
unsigned long ulWlanTxTp; /* in Bps */
unsigned long ulWlanRxTp; /* in Bps */
unsigned long ulP2PTxTp; /* in Bps */
unsigned long ulP2PRxTp; /* in Bps */
uint32_t u4UpdatePeriod; /* in ms */
uint32_t u4TarPerfLevel;
uint32_t u4CurrPerfLevel;
uint32_t u4UsedCnt;
unsigned long ulTotalTxSuccessCount;
unsigned long ulTotalTxFailCount;
};
#if CFG_SUPPORT_CSI
/*
* CSI_DATA_T is used for representing
* the CSI and other useful * information
* for application usage
*/
struct CSI_DATA_T {
uint8_t ucFwVer;
uint8_t ucBw;
bool bIsCck;
uint16_t u2DataCount;
int16_t ac2IData[CSI_MAX_DATA_COUNT];
int16_t ac2QData[CSI_MAX_DATA_COUNT];
uint8_t ucDbdcIdx;
int8_t cRssi;
uint8_t ucSNR;
uint64_t u8TimeStamp;
uint8_t ucDataBw;
uint8_t ucPrimaryChIdx;
uint8_t aucTA[MAC_ADDR_LEN];
uint32_t u4ExtraInfo;
uint8_t ucRxMode;
uint16_t u2RxRate;
int32_t ai4Rsvd1[CSI_MAX_RSVD1_COUNT];
int32_t au4Rsvd2[CSI_MAX_RSVD2_COUNT];
uint8_t ucRsvd1Cnt;
uint8_t ucRsvd2Cnt;
int32_t i4Rsvd3;
uint8_t ucRsvd4;
uint32_t Antenna_pattern;
uint32_t u4TRxIdx;
};
/*
* CSI_INFO_T is used to store the CSI
* settings and CSI event data
*/
struct CSI_INFO_T {
/* Variables for manipulate the CSI data in g_aucProcBuf */
bool bIncomplete;
int32_t u4CopiedDataSize;
int32_t u4RemainingDataSize;
wait_queue_head_t waitq;
/* Variable for recording the CSI function config */
uint8_t ucMode;
uint8_t ucValue1[CSI_CONFIG_ITEM_NUM];
uint8_t ucValue2[CSI_CONFIG_ITEM_NUM];
/* Variable for manipulating the CSI ring buffer */
struct CSI_DATA_T arCSIBuffer[CSI_RING_SIZE];
uint32_t u4CSIBufferHead;
uint32_t u4CSIBufferTail;
uint32_t u4CSIBufferUsed;
int16_t ai2TempIData[CSI_MAX_DATA_COUNT];
int16_t ai2TempQData[CSI_MAX_DATA_COUNT];
/*for usr to get the specific H(jw), 0 for all */
uint16_t Matrix_Get_Bit;
uint8_t byte_stream[Max_Stream_Bytes];/*send bytes to proc interfacel */
};
#endif
/*
* Major ADAPTER structure
* Major data structure for driver operation
*/
struct ADAPTER {
struct mt66xx_chip_info *chip_info;
uint8_t ucRevID;
u_int8_t fgIsReadRevID;
uint16_t u2NicOpChnlNum;
u_int8_t fgIsEnableWMM;
/* This flag is used to indicate that WMM is enable in current BSS */
u_int8_t fgIsWmmAssoc;
uint32_t u4OsPacketFilter; /* packet filter used by OS */
u_int8_t fgAllMulicastFilter; /* mDNS filter used by OS */
struct BSS_INFO *aprBssInfo[MAX_BSSID_NUM + 1];
struct BSS_INFO *prAisBssInfo;
uint8_t ucHwBssIdNum;
uint8_t ucWmmSetNum;
uint8_t ucWtblEntryNum;
uint8_t ucTxDefaultWlanIndex;
uint8_t ucP2PDevBssIdx;
#if CFG_TCP_IP_CHKSUM_OFFLOAD
/* Does FW support Checksum Offload feature */
u_int8_t fgIsSupportCsumOffload;
uint32_t u4CSUMFlags;
#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */
enum ENUM_BAND aePreferBand[NETWORK_TYPE_NUM];
/* ADAPTER flags */
uint32_t u4Flags;
uint32_t u4HwFlags;
u_int8_t fgIsRadioOff;
u_int8_t fgIsEnterD3ReqIssued;
uint8_t aucMacAddress[MAC_ADDR_LEN];
/* Current selection basing on the set of Available PHY Types */
enum ENUM_PHY_TYPE_INDEX eCurrentPhyType;
uint32_t u4CoalescingBufCachedSize;
uint8_t *pucCoalescingBufCached;
/* Buffer for CMD_INFO_T, Mgt packet and mailbox message */
struct BUF_INFO rMgtBufInfo;
struct BUF_INFO rMsgBufInfo;
uint8_t *pucMgtBufCached;
uint32_t u4MgtBufCachedSize;
uint8_t aucMsgBuf[MSG_BUFFER_SIZE];
#if CFG_DBG_MGT_BUF
uint32_t u4MemAllocDynamicCount; /* Debug only */
uint32_t u4MemFreeDynamicCount; /* Debug only */
#endif
struct STA_RECORD arStaRec[CFG_STA_REC_NUM];
/* Element for TX PATH */
struct TX_CTRL rTxCtrl;
struct QUE rFreeCmdList;
struct CMD_INFO arHifCmdDesc[CFG_TX_MAX_CMD_PKT_NUM];
/* Element for RX PATH */
struct RX_CTRL rRxCtrl;
/* Timer for restarting RFB setup procedure */
struct TIMER rPacketDelaySetupTimer;
/* Buffer for Authentication Event */
/* <Todo> Move to glue layer and refine the kal function */
/* Reference to rsnGeneratePmkidIndication function at rsn.c */
uint8_t aucIndicationEventBuffer[(CFG_MAX_PMKID_CACHE * 20) + 8];
uint32_t u4IntStatus;
enum ENUM_ACPI_STATE rAcpiState;
u_int8_t fgIsIntEnable;
u_int8_t fgIsIntEnableWithLPOwnSet;
u_int8_t fgIsFwOwn;
u_int8_t fgWiFiInSleepyState;
/* Set by callback to make sure WOW process done before system suspend */
u_int8_t fgSetPfCapabilityDone;
u_int8_t fgSetWowDone;
u_int8_t fgSetMdnsDone;
u_int8_t fgForceFwOwn;
OS_SYSTIME rLastOwnFailedLogTime;
uint32_t u4OwnFailedCount;
uint32_t u4OwnFailedLogCount;
uint32_t u4PwrCtrlBlockCnt;
/* TX Direct related : BEGIN */
u_int8_t fgTxDirectInited;
#define TX_DIRECT_CHECK_INTERVAL (1000 * HZ / USEC_PER_SEC)
/* check if an empty MsduInfo is available */
struct timer_list rTxDirectSkbTimer;
/* check if HIF port is ready to accept a new Msdu */
struct timer_list rTxDirectHifTimer;
struct sk_buff_head rTxDirectSkbQueue;
struct QUE rTxDirectHifQueue[TX_PORT_NUM];
#if (CFG_SUPPORT_TX_TSO_SW == 1)
struct sk_buff_head rTsoQueue;
uint32_t u4TsoQueueCnt;
#endif
struct QUE rStaPsQueue[CFG_STA_REC_NUM];
uint32_t u4StaPsBitmap;
struct QUE rBssAbsentQueue[MAX_BSSID_NUM + 1];
uint32_t u4BssAbsentBitmap;
struct QUE rStaPendQueue[CFG_STA_REC_NUM];
uint32_t u4StaPendBitmap;
/* TX Direct related : END */
struct QUE rPendingCmdQueue;
#if CFG_SUPPORT_MULTITHREAD
struct QUE rTxCmdQueue;
struct QUE rTxCmdDoneQueue;
#if CFG_FIX_2_TX_PORT
struct QUE rTxP0Queue;
struct QUE rTxP1Queue;
#else
struct QUE rTxPQueue[TX_PORT_NUM];
#endif
#if CFG_SUPPORT_CFG80211_AUTH
#if CFG_SUPPORT_CFG80211_QUEUE
struct QUE rCfg80211Queue;
#endif
#endif
struct QUE rRxQueue;
struct QUE rTxDataDoneQueue;
#endif
struct GLUE_INFO *prGlueInfo;
uint8_t ucCmdSeqNum;
uint8_t ucTxSeqNum;
uint8_t aucPidPool[WTBL_SIZE];
#if 1 /* CFG_SUPPORT_WAPI */
u_int8_t fgUseWapi;
#endif
/* RF Test flags */
u_int8_t fgTestMode;
u_int8_t fgIcapMode;
/* WLAN Info for DRIVER_CORE OID query */
struct WLAN_INFO rWlanInfo;
#if CFG_ENABLE_WIFI_DIRECT
u_int8_t fgIsP2PRegistered;
/* flag to report all networks in p2p scan */
u_int8_t p2p_scan_report_all_bss;
enum ENUM_NET_REG_STATE rP2PNetRegState;
/* BOOLEAN fgIsWlanLaunched; */
struct P2P_INFO *prP2pInfo;
#if CFG_SUPPORT_P2P_RSSI_QUERY
OS_SYSTIME rP2pLinkQualityUpdateTime;
u_int8_t fgIsP2pLinkQualityValid;
struct EVENT_LINK_QUALITY rP2pLinkQuality;
#endif
#endif
/* Online Scan Option */
u_int8_t fgEnOnlineScan;
/* Online Scan Option */
u_int8_t fgDisBcnLostDetection;
/* MAC address */
uint8_t rMyMacAddr[PARAM_MAC_ADDR_LEN];
/* Wake-up Event for WOL */
uint32_t u4WakeupEventEnable;
/* Event Buffering */
struct EVENT_STATISTICS rStatStruct;
OS_SYSTIME rStatUpdateTime;
u_int8_t fgIsStatValid;
#if CFG_SUPPORT_MSP
struct EVENT_WLAN_INFO rEventWlanInfo;
#endif
struct EVENT_LINK_QUALITY rLinkQuality;
OS_SYSTIME rLinkQualityUpdateTime;
u_int8_t fgIsLinkQualityValid;
OS_SYSTIME rLinkRateUpdateTime;
u_int8_t fgIsLinkRateValid;
/* WIFI_VAR_T */
struct WIFI_VAR rWifiVar;
/* MTK WLAN NIC driver IEEE 802.11 MIB */
struct IEEE_802_11_MIB rMib;
/* Mailboxs for inter-module communication */
struct MBOX arMbox[MBOX_ID_TOTAL_NUM];
/* Timers for OID Pending Handling */
struct TIMER rOidTimeoutTimer;
uint8_t ucOidTimeoutCount;
/* Root Timer for cnm_timer module */
struct ROOT_TIMER rRootTimer;
u_int8_t fgIsChipNoAck;
u_int8_t fgIsChipAssert;
/* RLM maintenance */
enum ENUM_CHNL_EXT eRfSco;
enum ENUM_SYS_PROTECT_MODE eSysProtectMode;
enum ENUM_GF_MODE eSysHtGfMode;
enum ENUM_RIFS_MODE eSysTxRifsMode;
enum ENUM_SYS_PCO_PHASE eSysPcoPhase;
struct DOMAIN_INFO_ENTRY *prDomainInfo;
/* QM */
struct QUE_MGT rQM;
struct CNM_INFO rCnmInfo;
uint32_t u4PowerMode;
uint32_t u4CtiaPowerMode;
u_int8_t fgEnCtiaPowerMode;
/* Bitmap is defined as
* #define KEEP_FULL_PWR_{FEATURE}_BIT in wlan_lib.h
* Each feature controls KeepFullPwr(CMD_ID_KEEP_FULL_PWR) should
* register bitmap to ensure low power during suspend.
*/
uint32_t u4IsKeepFullPwrBitmap;
uint32_t fgEnArpFilter;
uint32_t u4UapsdAcBmp;
uint32_t u4MaxSpLen;
uint32_t u4PsCurrentMeasureEn;
/* Version Information */
struct WIFI_VER_INFO rVerInfo;
/* 5GHz support (from F/W) */
u_int8_t fgIsHw5GBandDisabled;
u_int8_t fgEnable5GBand;
u_int8_t fgIsEepromUsed;
u_int8_t fgIsEfuseValid;
u_int8_t fgIsEmbbededMacAddrValid;
#if CFG_SUPPORT_PWR_LIMIT_COUNTRY
u_int8_t fgIsPowerLimitTableValid;
#endif
/* Packet Forwarding Tracking */
int32_t i4PendingFwdFrameCount;
#if CFG_SUPPORT_RDD_TEST_MODE
uint8_t ucRddStatus;
#endif
u_int8_t fgDisStaAgingTimeoutDetection;
uint32_t u4FwCompileFlag0;
uint32_t u4FwCompileFlag1;
uint32_t u4FwFeatureFlag0;
uint32_t u4FwFeatureFlag1;
#if CFG_SUPPORT_CFG_FILE
struct WLAN_CFG *prWlanCfg;
struct WLAN_CFG rWlanCfg;
struct WLAN_CFG_REC *prWlanCfgRec;
struct WLAN_CFG_REC rWlanCfgRec;
#endif
#if CFG_M0VE_BA_TO_DRIVER
struct TIMER rMqmIdleRxBaDetectionTimer;
uint32_t u4FlagBitmap;
#endif
#if CFG_ASSERT_DUMP
struct TIMER rN9CorDumpTimer;
struct TIMER rCr4CorDumpTimer;
u_int8_t fgN9CorDumpFileOpend;
u_int8_t fgCr4CorDumpFileOpend;
u_int8_t fgN9AssertDumpOngoing;
u_int8_t fgCr4AssertDumpOngoing;
u_int8_t fgKeepPrintCoreDump;
#endif
/* Tx resource information */
u_int8_t fgIsNicTxReousrceValid;
struct tx_resource_info nicTxReousrce;
/* Efuse Start and End address */
uint32_t u4EfuseStartAddress;
uint32_t u4EfuseEndAddress;
/* Buffer Mode Info */
struct CAP_BUFFER_MODE_INFO_T rBufferModeInfo;
/* COEX feature */
uint32_t u4FddMode;
#if CFG_WOW_SUPPORT
struct WOW_CTRL rWowCtrl;
#if CFG_SUPPORT_MDNS_OFFLOAD
struct MDNS_INFO_T rMdnsInfo;
uint8_t mdns_offload_enable;
uint8_t mdns_wake_flag;
#endif
#endif
#if CFG_SUPPORT_WOW_EINT
struct WOWLAN_DEV_NODE rWowlanDevNode;
#endif
#if CFG_SUPPORT_NCHO /* NCHO information */
struct _NCHO_INFO_T rNchoInfo;
#endif
/*#if (CFG_EEPROM_PAGE_ACCESS == 1)*/
uint8_t aucEepromVaule[16]; /* HQA CMD for Efuse Block size contents */
uint32_t u4FreeBlockNum;
uint32_t u4GetTxPower;
/*#endif*/
u_int8_t fgIsCr4FwDownloaded;
u_int8_t fgIsFwDownloaded;
u_int8_t fgIsSupportBufferBinSize16Byte;
u_int8_t fgIsSupportDelayCal;
u_int8_t fgIsSupportGetFreeEfuseBlockCount;
u_int8_t fgIsSupportQAAccessEfuse;
u_int8_t fgIsSupportPowerOnSendBufferModeCMD;
u_int8_t fgIsSupportGetTxPower;
u_int8_t fgIsEnableLpdvt;
/* SER related info */
uint8_t ucSerState;
#if CFG_SUPPORT_SER
#if defined(_HIF_USB)
struct TIMER rSerSyncTimer;
uint8_t ucSerNoAckCount;
#endif /* _HIF_USB */
#endif /* CFG_SUPPORT_SER */
#if (CFG_HW_WMM_BY_BSS == 1)
uint8_t ucHwWmmEnBit;
#endif
unsigned long ulSuspendFlag;
struct WIFI_FEM_CFG rWifiFemCfg;
/* Smar Gear */
uint8_t ucSmarGearSupportSisoOnly;
uint8_t ucSmartGearWfPathSupport;
struct PERF_MONITOR_T rPerMonitor;
struct ICAP_INFO_T rIcapInfo;
struct RECAL_INFO_T rReCalInfo;
/* Support change QM RX BA entry miss timeout (unit: ms) dynamically */
uint32_t u4QmRxBaMissTimeout;
#if CFG_SUPPORT_LOWLATENCY_MODE
u_int8_t fgEnLowLatencyMode;
u_int8_t fgEnCfg80211Scan;
#endif /* CFG_SUPPORT_LOWLATENCY_MODE */
bool fgEnHifDbgInfo;
uint32_t u4HifDbgFlag;
uint32_t u4HifChkFlag;
#if CFG_SUPPORT_OSHARE
bool fgEnOshareMode;
#endif
struct WLAN_DEBUG_INFO rDebugInfo;
bool fgIsStartApDone;
bool fgIsStopApDone;
bool fgIsChSwitchDone;
bool fgIsAddKeyDone;
#if CFG_SUPPORT_ADJUST_MCC_MODE_SET
u_int8_t ucModeMCC;
#endif
#if CFG_SUPPORT_RX_DYNAMIC_MCC_PRIORITY
bool fgMccFirstIn;
uint32_t ucModeMCC_STA_time;
uint32_t ucModeMCC_P2P_time;
uint64_t u8StaRxCount;
uint64_t u8P2pRxCount;
struct TIMER rRxCntMonitorTimer;
uint32_t u4SetStaMccTime;
uint32_t u4SetP2pMccTime;
#endif /*CFG_SUPPORT_RX_DYNAMIC_MCC_PRIORITY*/
#if CFG_SUPPORT_CSI
struct CSI_INFO_T rCSIInfo;
#endif
#if CFG_SUPPORT_GET_MCS_INFO
struct TIMER rRxMcsInfoTimer;
bool fgIsMcsInfoValid;
#endif /* CFG_SUPPORT_GET_MCS_INFO */
#if CFG_SUPPORT_HW_1T2R
bool fgIsHW1T2R;
#endif
#if CFG_SUPPORT_SCHED_SCAN
uint8_t ucCusMspEntryNum;
uint16_t au2CusMspList[10];
/* In TU. 1024us. Customized Max Dwell time */
uint16_t u2ChannelCusDwellTime;
/* In TU. 1024us. CUstmtomized Min Dwell time */
uint16_t u2ChannelCusMinDwellTime;
/* In TU. 1024us. CUstmtomized Passive Dwell time */
uint16_t u2ChannelCusPassiveDwellTime;
/* RSSI threshold for PNO Wake */
int32_t i4RssiThreshold;
#endif
#if defined(_HIF_SDIO)
u_int8_t fgGetMailBoxRWAck;
#endif
bool fgIsPostponeTxEAPOLM3;
#if (CFG_SUPPORT_APF == 1)
struct TIMER rAPFDropCntTimer;
#endif
}; /* end of _ADAPTER_T */
/*******************************************************************************
* P U B L I C D A T A
*******************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
*******************************************************************************
*/
/*******************************************************************************
* M A C R O S
*******************************************************************************
*/
#define SUSPEND_FLAG_FOR_WAKEUP_REASON (0)
#define SUSPEND_FLAG_CLEAR_WHEN_RESUME (1)
/* Macros for argument _BssIndex */
#define IS_NET_ACTIVE(_prAdapter, _BssIndex) \
((_prAdapter)->aprBssInfo[(_BssIndex)]->fgIsNetActive)
/* Macros for argument _prBssInfo */
#define IS_BSS_ACTIVE(_prBssInfo) ((_prBssInfo)->fgIsNetActive)
#define IS_BSS_AIS(_prBssInfo) \
((_prBssInfo)->eNetworkType == NETWORK_TYPE_AIS)
#define IS_BSS_P2P(_prBssInfo) \
((_prBssInfo)->eNetworkType == NETWORK_TYPE_P2P)
#define IS_BSS_BOW(_prBssInfo) \
((_prBssInfo)->eNetworkType == NETWORK_TYPE_BOW)
#define IS_BSS_APGO(_prBssInfo) \
(IS_BSS_P2P(_prBssInfo) && \
(_prBssInfo)->eCurrentOPMode == OP_MODE_ACCESS_POINT)
#define SET_NET_ACTIVE(_prAdapter, _BssIndex) \
{(_prAdapter)->aprBssInfo[(_BssIndex)]->fgIsNetActive = TRUE; }
#define UNSET_NET_ACTIVE(_prAdapter, _BssIndex) \
{(_prAdapter)->aprBssInfo[(_BssIndex)]->fgIsNetActive = FALSE; }
#define BSS_INFO_INIT(_prAdapter, _prBssInfo) \
{ uint8_t _aucZeroMacAddr[] = NULL_MAC_ADDR; \
\
(_prBssInfo)->eConnectionState = PARAM_MEDIA_STATE_DISCONNECTED; \
(_prBssInfo)->eConnectionStateIndicated = \
PARAM_MEDIA_STATE_DISCONNECTED; \
(_prBssInfo)->eCurrentOPMode = OP_MODE_INFRASTRUCTURE; \
(_prBssInfo)->ucReasonOfDisconnect = DISCONNECT_REASON_CODE_RESERVED; \
COPY_MAC_ADDR((_prBssInfo)->aucBSSID, _aucZeroMacAddr); \
LINK_INITIALIZE(&((_prBssInfo)->rStaRecOfClientList)); \
(_prBssInfo)->fgIsBeaconActivated = FALSE; \
(_prBssInfo)->u2HwDefaultFixedRateCode = RATE_CCK_1M_LONG; \
(_prBssInfo)->ePowerModeFromUser = Param_PowerModeFast_PSP; \
}
/*----------------------------------------------------------------------------*/
/* Macros for Power State */
/*----------------------------------------------------------------------------*/
#define SET_NET_PWR_STATE_IDLE(_prAdapter, _BssIndex) \
{_prAdapter->rWifiVar.aePwrState[(_BssIndex)] = PWR_STATE_IDLE; }
#define SET_NET_PWR_STATE_ACTIVE(_prAdapter, _BssIndex) \
{_prAdapter->rWifiVar.aePwrState[(_BssIndex)] = PWR_STATE_ACTIVE; }
#define SET_NET_PWR_STATE_PS(_prAdapter, _BssIndex) \
{_prAdapter->rWifiVar.aePwrState[(_BssIndex)] = PWR_STATE_PS; }
#define IS_NET_PWR_STATE_ACTIVE(_prAdapter, _BssIndex) \
(_prAdapter->rWifiVar.aePwrState[(_BssIndex)] == PWR_STATE_ACTIVE)
#define IS_NET_PWR_STATE_IDLE(_prAdapter, _BssIndex) \
(_prAdapter->rWifiVar.aePwrState[(_BssIndex)] == PWR_STATE_IDLE)
#define IS_SCN_PWR_STATE_ACTIVE(_prAdapter) \
(_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_ACTIVE)
#define IS_SCN_PWR_STATE_IDLE(_prAdapter) \
(_prAdapter->rWifiVar.rScanInfo.eScanPwrState == SCAN_PWR_STATE_IDLE)
#define IS_WIFI_2G4_WF0_SUPPORT(_prAdapter) \
((_prAdapter)->rWifiFemCfg.u2WifiPath & WLAN_FLAG_2G4_WF0)
#define IS_WIFI_5G_WF0_SUPPORT(_prAdapter) \
((_prAdapter)->rWifiFemCfg.u2WifiPath & WLAN_FLAG_5G_WF0)
#define IS_WIFI_2G4_WF1_SUPPORT(_prAdapter) \
((_prAdapter)->rWifiFemCfg.u2WifiPath & WLAN_FLAG_2G4_WF1)
#define IS_WIFI_5G_WF1_SUPPORT(_prAdapter) \
((_prAdapter)->rWifiFemCfg.u2WifiPath & WLAN_FLAG_5G_WF1)
#define IS_WIFI_2G4_SISO(_prAdapter) \
((IS_WIFI_2G4_WF0_SUPPORT(_prAdapter) && \
!(IS_WIFI_2G4_WF1_SUPPORT(_prAdapter))) || \
(IS_WIFI_2G4_WF1_SUPPORT(_prAdapter) && \
!(IS_WIFI_2G4_WF0_SUPPORT(_prAdapter))))
#define IS_WIFI_5G_SISO(_prAdapter) \
((IS_WIFI_5G_WF0_SUPPORT(_prAdapter) && \
!(IS_WIFI_5G_WF1_SUPPORT(_prAdapter))) || \
(IS_WIFI_5G_WF1_SUPPORT(_prAdapter) && \
!(IS_WIFI_5G_WF0_SUPPORT(_prAdapter))))
#define IS_WIFI_SMART_GEAR_SUPPORT_WF0_SISO(_prAdapter) \
((_prAdapter)->ucSmarGearSupportSisoOnly && \
((_prAdapter)->ucSmartGearWfPathSupport == BIT(ANTENNA_WF0)))
#define IS_WIFI_SMART_GEAR_SUPPORT_WF1_SISO(_prAdapter) \
((_prAdapter)->ucSmarGearSupportSisoOnly && \
((_prAdapter)->ucSmartGearWfPathSupport == BIT(ANTENNA_WF1)))
#if CFG_SUPPORT_HW_1T2R
#define IS_HW_1T2R(_prAdapter) \
((_prAdapter)->fgIsHW1T2R)
#else
#define IS_HW_1T2R(_prAdapter) (FALSE)
#endif
#if CFG_SUPPORT_SPE_IDX_CONTROL
/* 0: WF0, 1: WF1, 2: duplicate */
#define GET_SPE_IDX_CTRL(_prAdapter) \
(IS_HW_1T2R(_prAdapter) ? (1) : (_prAdapter->rWifiVar.ucSpeIdxCtrl))
#if CFG_SUPPORT_COEX_NON_COTX
/* 0(default):allow co-Tx,1:disallow co-Tx*/
#define GET_COEX_NON_COTX(_prAdapter) \
(IS_HW_1T2R(_prAdapter) ? FALSE : (_prAdapter->rWifiVar.fgCoexNonCoTx))
#endif
#endif
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
*******************************************************************************
*/
/*******************************************************************************
* F U N C T I O N S
*******************************************************************************
*/
#endif /* _ADAPTER_H */