blob: eba76bc2aa50ea4feab488fc3cb0c7b9124fa6ec [file] [log] [blame]
/******************************************************************************
*
* 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.
*
*****************************************************************************/
/*
** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/nic/adapter.h#5
*/
/*! \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
********************************************************************************
*/
/*******************************************************************************
* 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
};
typedef struct _WLAN_INFO_T {
PARAM_BSSID_EX_T rCurrBssId;
/* Scan Result */
PARAM_BSSID_EX_T arScanResult[CFG_MAX_NUM_BSS_LIST];
PUINT_8 apucScanResultIEs[CFG_MAX_NUM_BSS_LIST];
UINT_32 u4ScanResultNum;
/* IE pool for Scanning Result */
UINT_8 aucScanIEBuf[CFG_MAX_COMMON_IE_BUF_LEN];
UINT_32 u4ScanIEBufferUsage;
OS_SYSTIME u4SysTime;
/* connection parameter (for Ad-Hoc) */
UINT_16 u2BeaconPeriod;
UINT_16 u2AtimWindow;
PARAM_RATES eDesiredRates;
CMD_LINK_ATTRIB eLinkAttr;
/* CMD_PS_PROFILE_T ePowerSaveMode; */
CMD_PS_PROFILE_T arPowerSaveMode[BSS_INFO_NUM];
/* trigger parameter */
ENUM_RSSI_TRIGGER_TYPE eRssiTriggerType;
PARAM_RSSI rRssiTriggerValue;
/* Privacy Filter */
ENUM_PARAM_PRIVACY_FILTER_T ePrivacyFilter;
/* RTS Threshold */
PARAM_RTS_THRESHOLD eRtsThreshold;
/* Network Type */
UINT_8 ucNetworkType;
/* Network Type In Use */
UINT_8 ucNetworkTypeInUse;
} WLAN_INFO_T, *P_WLAN_INFO_T;
/* Session for CONNECTION SETTINGS */
typedef struct _CONNECTION_SETTINGS_T {
UINT_8 aucMacAddress[MAC_ADDR_LEN];
UINT_8 ucDelayTimeOfDisconnectEvent;
BOOLEAN fgIsConnByBssidIssued;
UINT_8 aucBSSID[MAC_ADDR_LEN];
BOOLEAN fgIsConnReqIssued;
BOOLEAN fgIsDisconnectedByNonRequest;
UINT_8 ucSSIDLen;
UINT_8 aucSSID[ELEM_MAX_LEN_SSID];
ENUM_PARAM_OP_MODE_T eOPMode;
ENUM_PARAM_CONNECTION_POLICY_T eConnectionPolicy;
ENUM_PARAM_AD_HOC_MODE_T eAdHocMode;
ENUM_PARAM_AUTH_MODE_T eAuthMode;
ENUM_PARAM_ENCRYPTION_STATUS_T eEncStatus;
BOOLEAN fgIsScanReqIssued;
/* MIB attributes */
UINT_16 u2BeaconPeriod;
UINT_16 u2RTSThreshold; /* User desired setting */
UINT_16 u2DesiredNonHTRateSet; /* User desired setting */
UINT_8 ucAdHocChannelNum; /* For AdHoc */
ENUM_BAND_T eAdHocBand; /* For AdHoc */
UINT_32 u4FreqInKHz; /* Center frequency */
/* ATIM windows using for IBSS power saving function */
UINT_16 u2AtimWindow;
/* Features */
BOOLEAN fgIsEnableRoaming;
BOOLEAN fgIsAdHocQoSEnable;
ENUM_PARAM_PHY_CONFIG_T eDesiredPhyConfig;
/* Used for AP mode for desired channel and bandwidth */
UINT_16 u2CountryCode;
UINT_8 uc2G4BandwidthMode; /* 20/40M or 20M only *//* Not used */
UINT_8 uc5GBandwidthMode; /* 20/40M or 20M only *//* Not used */
#if CFG_SUPPORT_802_11D
BOOLEAN fgMultiDomainCapabilityEnabled;
#endif /* CFG_SUPPORT_802_11D */
#if 1 /* CFG_SUPPORT_WAPI */
BOOL fgWapiMode;
UINT_32 u4WapiSelectedGroupCipher;
UINT_32 u4WapiSelectedPairwiseCipher;
UINT_32 u4WapiSelectedAKMSuite;
#endif
/* CR1486, CR1640 */
/* for WPS, disable the privacy check for AP selection policy */
BOOLEAN fgPrivacyCheckDisable;
/* b0~3: trigger-en AC0~3. b4~7: delivery-en AC0~3 */
UINT_8 bmfgApsdEnAc;
/* for RSN info store, when upper layer set rsn info */
RSN_INFO_T rRsnInfo;
} CONNECTION_SETTINGS_T, *P_CONNECTION_SETTINGS_T;
struct _BSS_INFO_T {
ENUM_NETWORK_TYPE_T eNetworkType;
UINT_32 u4PrivateData; /* Private data parameter for each NETWORK type usage. */
/* P2P network type has 3 network interface to distinguish. */
ENUM_PARAM_MEDIA_STATE_T eConnectionState; /* Connected Flag used in AIS_NORMAL_TR */
ENUM_PARAM_MEDIA_STATE_T eConnectionStateIndicated; /* The Media State that report to HOST */
ENUM_OP_MODE_T eCurrentOPMode; /* Current Operation Mode - Infra/IBSS */
#if CFG_ENABLE_WIFI_DIRECT
ENUM_OP_MODE_T eIntendOPMode;
#endif
#if (CFG_SUPPORT_DFS_MASTER == 1)
BOOLEAN fgIsDfsActive;
#endif
BOOLEAN fgIsInUse; /* For CNM to assign BSS_INFO */
BOOLEAN fgIsNetActive; /* TRUE if this network has been activated */
UINT_8 ucBssIndex; /* BSS_INFO_T index */
UINT_8 ucReasonOfDisconnect; /* Used by media state indication */
UINT_8 ucSSIDLen; /* Length of SSID */
#if CFG_ENABLE_WIFI_DIRECT
ENUM_HIDDEN_SSID_TYPE_T eHiddenSsidType; /* For Hidden SSID usage. */
#endif
UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID used in this BSS */
UINT_8 aucBSSID[MAC_ADDR_LEN]; /* The BSSID of the associated BSS */
UINT_8 aucOwnMacAddr[MAC_ADDR_LEN]; /* Owned MAC Address used in this BSS */
UINT_8 ucOwnMacIndex; /* Owned MAC index used in this BSS */
P_STA_RECORD_T prStaRecOfAP; /* For Infra Mode, and valid only if
* eConnectionState == MEDIA_STATE_CONNECTED
*/
LINK_T rStaRecOfClientList; /* For IBSS/AP Mode, all known STAs in current BSS */
UINT_8 ucBMCWlanIndex; /* For open Mode, BC/MC Tx wlan index, For STA, BC/MC Rx wlan index */
UINT_8 ucBMCWlanIndexS[MAX_KEY_NUM]; /* For AP Mode, BC/MC Tx wlan index, For STA, BC/MC Rx wlan index */
UINT_8 ucBMCWlanIndexSUsed[MAX_KEY_NUM];
BOOLEAN fgBcDefaultKeyExist; /* Bc Transmit key exist or not */
UINT_8 ucBcDefaultKeyIdx; /* Bc default key idx, for STA, the Rx just set, for AP, the tx key id */
UINT_8 wepkeyUsed[MAX_KEY_NUM];
UINT_8 wepkeyWlanIdx; /* wlan index of the wep key */
UINT_16 u2CapInfo; /* Change Detection */
UINT_16 u2BeaconInterval; /* The Beacon Interval of this BSS */
UINT_16 u2ATIMWindow; /* For IBSS Mode */
UINT_16 u2AssocId; /* For Infra Mode, it is the Assoc ID assigned by AP.
*/
UINT_8 ucDTIMPeriod; /* For Infra/AP Mode */
UINT_8 ucDTIMCount; /* For AP Mode, it is the DTIM value we should carried in
* the Beacon of next TBTT.
*/
UINT_8 ucPhyTypeSet; /* Available PHY Type Set of this peer
* (This is deduced from received BSS_DESC_T)
*/
UINT_8 ucNonHTBasicPhyType; /* The Basic PHY Type Index, used to setup Phy Capability */
UINT_8 ucConfigAdHocAPMode; /* The configuration of AdHoc/AP Mode. e.g. 11g or 11b */
UINT_8 ucBeaconTimeoutCount; /* For Infra/AP Mode, it is a threshold of Beacon Lost Count to
* confirm connection was lost
*/
BOOLEAN fgHoldSameBssidForIBSS; /* For IBSS Mode, to keep use same BSSID to extend the life cycle of an IBSS */
BOOLEAN fgIsBeaconActivated; /* For AP/IBSS Mode, it is used to indicate that Beacon is sending */
P_MSDU_INFO_T prBeacon; /* For AP/IBSS Mode - Beacon Frame */
BOOLEAN fgIsIBSSMaster; /* For IBSS Mode - To indicate that we can reply ProbeResp Frame.
* In current TBTT interval
*/
BOOLEAN fgIsShortPreambleAllowed; /* From Capability Info. of AssocResp Frame
* AND of Beacon/ProbeResp Frame
*/
BOOLEAN fgUseShortPreamble; /* Short Preamble is enabled in current BSS. */
BOOLEAN fgUseShortSlotTime; /* Short Slot Time is enabled in current BSS. */
UINT_16 u2OperationalRateSet; /* Operational Rate Set of current BSS */
UINT_16 u2BSSBasicRateSet; /* Basic Rate Set of current BSS */
UINT_8 ucAllSupportedRatesLen; /* Used for composing Beacon Frame in AdHoc or AP Mode */
UINT_8 aucAllSupportedRates[RATE_NUM_SW];
UINT_8 ucAssocClientCnt; /* TODO(Kevin): Number of associated clients */
BOOLEAN fgIsProtection;
BOOLEAN fgIsQBSS; /* fgIsWmmBSS; *//* For Infra/AP/IBSS Mode, it is used to indicate if we support WMM in
* current BSS.
*/
BOOLEAN fgIsNetAbsent; /* TRUE: BSS is absent, FALSE: BSS is present */
BOOLEAN fgIsWepCipherGroup;
UINT_32 u4RsnSelectedGroupCipher;
UINT_32 u4RsnSelectedPairwiseCipher;
UINT_32 u4RsnSelectedAKMSuite;
UINT_16 u2RsnSelectedCapInfo;
UINT_8 ucOpChangeChannelWidth; /* The OpMode channel width that we want to change to*/
/* 0:20MHz, 1:40MHz, 2:80MHz, 3:160MHz 4:80+80MHz */
BOOLEAN fgIsOpChangeChannelWidth;
/*------------------------------------------------------------------------*/
/* Power Management related information */
/*------------------------------------------------------------------------*/
PM_PROFILE_SETUP_INFO_T rPmProfSetupInfo;
/*------------------------------------------------------------------------*/
/* WMM/QoS related information */
/*------------------------------------------------------------------------*/
UINT_8 ucWmmParamSetCount; /* Used to detect the change of EDCA parameters. For AP mode,
*the value is used in WMM IE
*/
AC_QUE_PARMS_T arACQueParms[WMM_AC_INDEX_NUM];
UINT_8 aucCWminLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWminLog2 */
UINT_8 aucCWmaxLog2ForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the CWmaxLog2 */
AC_QUE_PARMS_T arACQueParmsForBcast[WMM_AC_INDEX_NUM]; /* For AP mode, broadcast the value */
UINT_8 ucWmmQueSet;
#if (CFG_HW_WMM_BY_BSS == 1)
BOOLEAN 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_BAND_T eBand;
UINT_8 ucPrimaryChannel;
UINT_8 ucHtOpInfo1;
UINT_8 ucHtPeerOpInfo1; /*Backup peer HT OP Info*/
UINT_16 u2HtOpInfo2;
UINT_16 u2HtOpInfo3;
UINT_8 ucNss;
/*------------------------------------------------------------------------*/
/* 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 */
UINT_8 ucVhtChannelWidth;
UINT_8 ucVhtChannelFrequencyS1;
UINT_8 ucVhtChannelFrequencyS2;
UINT_16 u2VhtBasicMcsSet;
/* Backup peer VHT OpInfo */
UINT_8 ucVhtPeerChannelWidth;
UINT_8 ucVhtPeerChannelFrequencyS1;
UINT_8 ucVhtPeerChannelFrequencyS2;
#endif
/*------------------------------------------------------------------------*/
/* Required protection modes (CM) */
/*------------------------------------------------------------------------*/
BOOLEAN fgErpProtectMode;
ENUM_HT_PROTECT_MODE_T eHtProtectMode;
ENUM_GF_MODE_T eGfOperationMode;
ENUM_RIFS_MODE_T eRifsOperationMode;
BOOLEAN fgObssErpProtectMode; /* GO only */
ENUM_HT_PROTECT_MODE_T eObssHtProtectMode; /* GO only */
ENUM_GF_MODE_T eObssGfOperationMode; /* GO only */
BOOLEAN fgObssRifsOperationMode; /* GO only */
/*------------------------------------------------------------------------*/
/* OBSS to decide if 20/40M bandwidth is permitted. */
/* The first member indicates the following channel list length. */
/*------------------------------------------------------------------------*/
BOOLEAN fgAssoc40mBwAllowed;
BOOLEAN fg40mBwAllowed;
ENUM_CHNL_EXT_T eBssSCO; /* Real setting for HW
* 20/40M AP mode will always set 40M,
* but its OP IE can be changed.
*/
UINT_8 auc2G_20mReqChnlList[CHNL_LIST_SZ_2G + 1];
UINT_8 auc2G_NonHtChnlList[CHNL_LIST_SZ_2G + 1];
UINT_8 auc2G_PriChnlList[CHNL_LIST_SZ_2G + 1];
UINT_8 auc2G_SecChnlList[CHNL_LIST_SZ_2G + 1];
UINT_8 auc5G_20mReqChnlList[CHNL_LIST_SZ_5G + 1];
UINT_8 auc5G_NonHtChnlList[CHNL_LIST_SZ_5G + 1];
UINT_8 auc5G_PriChnlList[CHNL_LIST_SZ_5G + 1];
UINT_8 auc5G_SecChnlList[CHNL_LIST_SZ_5G + 1];
TIMER_T rObssScanTimer;
UINT_16 u2ObssScanInterval; /* in unit of sec */
BOOLEAN fgObssActionForcedTo20M; /* GO only */
BOOLEAN fgObssBeaconForcedTo20M; /* GO only */
/*------------------------------------------------------------------------*/
/* HW Related Fields (Kevin) */
/*------------------------------------------------------------------------*/
UINT_16 u2HwDefaultFixedRateCode; /* The default rate code copied to MAC TX Desc */
UINT_16 u2HwLPWakeupGuardTimeUsec;
UINT_8 ucBssFreeQuota; /* The value is updated from FW */
#if CFG_ENABLE_GTK_FRAME_FILTER
P_IPV4_NETWORK_ADDRESS_LIST prIpV4NetAddrList;
#endif
UINT_16 u2DeauthReason;
#if CFG_SUPPORT_TDLS
BOOLEAN fgTdlsIsProhibited;
BOOLEAN fgTdlsIsChSwProhibited;
#endif
#if CFG_SUPPORT_PNO
BOOLEAN fgIsPNOEnable;
BOOLEAN fgIsNetRequestInActive;
#endif
WIFI_WMM_AC_STAT_T arLinkStatistics[WMM_AC_INDEX_NUM]; /*link layer statistics */
ENUM_DBDC_BN_T eDBDCBand;
UINT_32 u4CoexPhyRateLimit;
#if CFG_SUPPORT_ROAMING_SKIP_ONE_AP
UINT_8 ucRoamSkipTimes;
BOOLEAN fgGoodRcpiArea;
BOOLEAN fgPoorRcpiArea;
#endif
BOOLEAN fgIsGranted;
ENUM_BAND_T eBandGranted;
UINT_8 ucPrimaryChannelGranted;
PARAM_CUSTOM_ACL rACL;
#if CFG_SUPPORT_802_11W
/* AP PMF */
struct AP_PMF_CFG rApPmfCfg;
#endif
#if CFG_SUPPORT_REPLAY_DETECTION
struct SEC_DETECT_REPLAY_INFO rDetRplyInfo;
#endif
};
struct _AIS_SPECIFIC_BSS_INFO_T {
UINT_8 ucRoamingAuthTypes; /* This value indicate the roaming type used in AIS_JOIN */
BOOLEAN fgIsIBSSActive;
/*! \brief Global flag to let arbiter stay at standby and not connect to any network */
BOOLEAN fgCounterMeasure;
/* UINT_8 ucTxWlanIndex; *//* Legacy wep, adhoc wep wpa Transmit key wlan index */
/* BOOLEAN fgKeyMaterialExist[4]; */
/* UINT_8 aucKeyMaterial[32][4]; */
#if 0
BOOLEAN fgWepWapiBcKeyExist; /* WEP WAPI BC key exist flag */
UINT_8 ucWepWapiBcWlanIndex; /* WEP WAPI BC wlan index */
BOOLEAN fgRsnBcKeyExist[4]; /* RSN BC key exist flag, map to key id 0, 1, 2, 3 */
UINT_8 ucRsnBcWlanIndex[4]; /* RSN BC wlan index, map to key id 0, 1, 2, 3 */
#endif
/* While Do CounterMeasure procedure, check the EAPoL Error report have send out */
BOOLEAN fgCheckEAPoLTxDone;
UINT_32 u4RsnaLastMICFailTime;
/* Stored the current bss wpa rsn cap filed, used for roaming policy */
/* UINT_16 u2RsnCap; */
TIMER_T 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
*/
TIMER_T rRsnaBlockTrafficTimer;
TIMER_T rRsnaEAPoLReportTimeoutTimer;
/* For Keep the Tx/Rx Mic key for TKIP SW Calculate Mic */
/* This is only one for AIS/AP */
UINT_8 aucTxMicKey[8];
UINT_8 aucRxMicKey[8];
/* Buffer for WPA2 PMKID */
/* The PMKID cache lifetime is expire by media_disconnect_indication */
UINT_32 u4PmkidCandicateCount;
PMKID_CANDICATE_T arPmkidCandicate[CFG_MAX_PMKID_CACHE];
UINT_32 u4PmkidCacheCount;
PMKID_ENTRY_T arPmkidCache[CFG_MAX_PMKID_CACHE];
BOOLEAN fgIndicatePMKID;
#if CFG_SUPPORT_802_11W
BOOLEAN fgMgmtProtection;
BOOLEAN fgAPApplyPmfReq;
UINT_32 u4SaQueryStart;
UINT_32 u4SaQueryCount;
UINT_8 ucSaQueryTimedOut;
PUINT_8 pucSaQueryTransId;
TIMER_T rSaQueryTimer;
BOOLEAN fgBipKeyInstalled;
#endif
};
struct _BOW_SPECIFIC_BSS_INFO_T {
UINT_16 u2Reserved; /* Reserved for Data Type Check */
};
#if CFG_SLT_SUPPORT
typedef struct _SLT_INFO_T {
P_BSS_DESC_T prPseudoBssDesc;
UINT_16 u2SiteID;
UINT_8 ucChannel2G4;
UINT_8 ucChannel5G;
BOOLEAN fgIsDUT;
UINT_32 u4BeaconReceiveCnt;
/* ///////Deprecated///////// */
P_STA_RECORD_T prPseudoStaRec;
} SLT_INFO_T, *P_SLT_INFO_T;
#endif
typedef struct _WLAN_TABLE_T {
UINT_8 ucUsed;
UINT_8 ucBssIndex;
UINT_8 ucKeyId;
UINT_8 ucPairwise;
UINT_8 aucMacAddr[MAC_ADDR_LEN];
UINT_8 ucStaIndex;
} WLAN_TABLE_T, *P_WLAN_TABLE_T;
/* Major member variables for WiFi FW operation.
* Variables within this region will be ready for access after WIFI function is enabled.
*/
typedef struct _WIFI_VAR_T {
BOOLEAN fgIsRadioOff;
BOOLEAN fgIsEnterD3ReqIssued;
BOOLEAN fgDebugCmdResp;
CONNECTION_SETTINGS_T rConnSettings;
SCAN_INFO_T rScanInfo;
#if CFG_SUPPORT_ROAMING
ROAMING_INFO_T rRoamingInfo;
#endif /* CFG_SUPPORT_ROAMING */
AIS_FSM_INFO_T rAisFsmInfo;
ENUM_PWR_STATE_T aePwrState[BSS_INFO_NUM];
BSS_INFO_T arBssInfoPool[BSS_INFO_NUM];
P2P_DEV_INFO_T rP2pDevInfo;
AIS_SPECIFIC_BSS_INFO_T rAisSpecificBssInfo;
#if CFG_ENABLE_WIFI_DIRECT
P_P2P_CONNECTION_SETTINGS_T prP2PConnSettings[BSS_P2P_NUM];
P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo[BSS_P2P_NUM];
/* P_P2P_FSM_INFO_T prP2pFsmInfo; */
P_P2P_DEV_FSM_INFO_T prP2pDevFsmInfo;
/* Currently we only support 2 p2p interface. */
P_P2P_ROLE_FSM_INFO_T aprP2pRoleFsmInfo[BSS_P2P_NUM];
#endif /* CFG_ENABLE_WIFI_DIRECT */
#if CFG_ENABLE_BT_OVER_WIFI
BOW_SPECIFIC_BSS_INFO_T rBowSpecificBssInfo;
BOW_FSM_INFO_T rBowFsmInfo;
#endif /* CFG_ENABLE_BT_OVER_WIFI */
WLAN_TABLE_T arWtbl[WTBL_SIZE];
DEAUTH_INFO_T arDeauthInfo[MAX_DEAUTH_INFO_COUNT];
/* Current Wi-Fi Settings and Flags */
UINT_8 aucPermanentAddress[MAC_ADDR_LEN];
UINT_8 aucMacAddress[MAC_ADDR_LEN];
UINT_8 aucDeviceAddress[MAC_ADDR_LEN];
UINT_8 aucInterfaceAddress[MAC_ADDR_LEN];
UINT_8 ucAvailablePhyTypeSet;
ENUM_PHY_TYPE_INDEX_T eNonHTBasicPhyType2G4; /* Basic Phy Type used by SCN according
* to the set of Available PHY Types
*/
ENUM_PARAM_PREAMBLE_TYPE_T ePreambleType;
ENUM_REGISTRY_FIXED_RATE_T eRateSetting;
BOOLEAN fgIsShortSlotTimeOptionEnable;
/* User desired setting, but will honor the capability of AP */
BOOLEAN fgEnableJoinToHiddenSSID;
BOOLEAN fgSupportWZCDisassociation;
#if CFG_SUPPORT_WFD
WFD_CFG_SETTINGS_T rWfdConfigureSettings;
#endif
#if CFG_SLT_SUPPORT
SLT_INFO_T rSltInfo;
#endif
#if CFG_SUPPORT_PASSPOINT
HS20_INFO_T rHS20Info;
#endif /* CFG_SUPPORT_PASSPOINT */
UINT_8 aucMediatekOuiIE[64];
UINT_16 u2MediatekOuiIELen;
/* Feature Options */
UINT_8 ucQoS;
UINT_8 ucStaHt;
UINT_8 ucStaVht;
UINT_8 ucApHt;
UINT_8 ucApVht;
UINT_8 ucP2pGoHt;
UINT_8 ucP2pGoVht;
UINT_8 ucP2pGcHt;
UINT_8 ucP2pGcVht;
UINT_8 ucAmpduTx;
UINT_8 ucAmpduRx;
UINT_8 ucAmsduInAmpduTx;
UINT_8 ucAmsduInAmpduRx;
UINT_8 ucHtAmsduInAmpduTx;
UINT_8 ucHtAmsduInAmpduRx;
UINT_8 ucVhtAmsduInAmpduTx;
UINT_8 ucVhtAmsduInAmpduRx;
UINT_8 ucTspec;
UINT_8 ucUapsd;
UINT_8 ucStaUapsd;
UINT_8 ucApUapsd;
UINT_8 ucP2pUapsd;
UINT_8 ucTxShortGI;
UINT_8 ucRxShortGI;
UINT_8 ucTxLdpc;
UINT_8 ucRxLdpc;
UINT_8 ucTxStbc;
UINT_8 ucRxStbc;
UINT_8 ucRxStbcNss;
UINT_8 ucTxGf;
UINT_8 ucRxGf;
UINT_8 ucMCS32;
UINT_8 ucTxopPsTx;
UINT_8 ucSigTaRts;
UINT_8 ucDynBwRts;
UINT_8 ucStaHtBfee;
UINT_8 ucStaVhtBfee;
UINT_8 ucStaHtBfer;
UINT_8 ucStaVhtBfer;
UINT_8 ucStaVhtMuBfee;
UINT_8 ucDataTxDone;
UINT_8 ucDataTxRateMode;
UINT_32 u4DataTxRateCode;
UINT_8 ucApWpsMode;
UINT_8 ucApChannel;
UINT_8 ucApSco;
UINT_8 ucP2pGoSco;
UINT_8 ucStaBandwidth;
UINT_8 ucSta5gBandwidth;
UINT_8 ucSta2gBandwidth;
UINT_8 ucApBandwidth;
UINT_8 ucAp2gBandwidth;
UINT_8 ucAp5gBandwidth;
UINT_8 ucP2p5gBandwidth;
UINT_8 ucP2p2gBandwidth;
/* If enable, AP channel bandwidth Channel Center Frequency Segment 0/1 */
/* and secondary channel offset will align wifi.cfg */
/* Otherwise align cfg80211 */
UINT_8 ucApChnlDefFromCfg;
UINT_8 ucNSS;
UINT_8 ucRxMaxMpduLen;
UINT_32 u4TxMaxAmsduInAmpduLen;
UINT_8 ucTxBaSize;
UINT_8 ucRxHtBaSize;
UINT_8 ucRxVhtBaSize;
UINT_8 ucStaDisconnectDetectTh;
UINT_8 ucApDisconnectDetectTh;
UINT_8 ucP2pDisconnectDetectTh;
UINT_8 ucThreadScheduling;
UINT_8 ucThreadPriority;
INT_8 cThreadNice;
UINT_8 ucTcRestrict;
UINT_32 u4MaxTxDeQLimit;
UINT_8 ucAlwaysResetUsedRes;
UINT_32 u4NetifStopTh;
UINT_32 u4NetifStartTh;
#if CFG_AUTO_CHANNEL_SEL_SUPPORT
PARAM_GET_CHN_INFO rChnLoadInfo;
#endif
#if CFG_SUPPORT_MTK_SYNERGY
UINT_8 ucMtkOui;
UINT_32 u4MtkOuiCap;
UINT_8 aucMtkFeature[4];
#endif
BOOLEAN fgCsaInProgress;
UINT_8 ucChannelSwitchMode;
UINT_8 ucNewChannelNumber;
UINT_8 ucChannelSwitchCount;
UINT_32 u4HifIstLoopCount;
UINT_32 u4Rx2OsLoopCount;
UINT_32 u4HifTxloopCount;
UINT_32 u4TxRxLoopCount;
UINT_32 u4TxFromOsLoopCount;
UINT_32 u4TxIntThCount;
UINT_32 au4TcPageCount[TC_NUM];
UINT_8 ucExtraTxDone;
UINT_8 ucTxDbg;
UINT_8 ucCmdRsvResource;
UINT_32 u4MgmtQueueDelayTimeout;
UINT_32 u4StatsLogTimeout;
UINT_32 u4StatsLogDuration;
UINT_8 ucDhcpTxDone;
UINT_8 ucArpTxDone;
UINT_8 ucMacAddrOverride;
UINT_8 aucMacAddrStr[32];
UINT_8 ucCtiaMode;
UINT_8 ucTpTestMode;
UINT_8 ucSigmaTestMode;
#if CFG_SUPPORT_DBDC
UINT_8 ucDbdcMode;
BOOLEAN fgDbDcModeEn;
TIMER_T rDBDCDisableCountdownTimer; /* Prevent continuously trigger by reconnection */
TIMER_T rDBDCSwitchGuardTimer; /* Prevent switch too quick*/
#endif
UINT_8 u4ScanCtrl;
UINT_8 ucScanChannelListenTime;
#if (CFG_EFUSE_BUFFER_MODE_DELAY_CAL == 1)
UINT_8 ucEfuseBufferModeCal;
#endif
UINT_8 ucCalTimingCtrl;
UINT_8 ucWow;
UINT_8 ucOffload;
UINT_8 ucAdvPws; /* enable LP multiple DTIM function, default enable */
UINT_8 ucWowOnMdtim; /* multiple DTIM if WOW enable, default 1 */
UINT_8 ucWowOffMdtim; /* multiple DTIM if WOW disable, default 3 */
UINT_8 ucWowPwsMode; /* when enter wow, automatically enter wow power-saving profile */
UINT_8 ucListenDtimInterval; /* adjust the listen interval by dtim interval */
UINT_8 ucEapolOffload; /* eapol offload when active mode / wow mode */
#if CFG_SUPPORT_REPLAY_DETECTION
UINT_8 ucRpyDetectOffload; /* eapol offload when active mode / wow mode */
#endif
UINT_8 u4SwTestMode;
UINT_8 ucCtrlFlagAssertPath;
UINT_8 ucCtrlFlagDebugLevel;
UINT_32 u4WakeLockRxTimeout;
UINT_32 u4WakeLockThreadWakeup;
UINT_32 u4RegP2pIfAtProbe; /* register p2p interface during probe */
UINT_8 ucP2pShareMacAddr; /* p2p group interface use the same mac addr as p2p device interface */
UINT_8 ucSmartRTS;
UINT_32 u4UapsdAcBmp;
UINT_32 u4MaxSpLen;
UINT_32 fgDisOnlineScan; /* 0: enable online scan, non-zero: disable online scan */
UINT_32 fgDisBcnLostDetection;
UINT_32 fgDisRoaming; /* 0:enable roaming 1:disable */
UINT_32 fgEnArpFilter;
UINT_8 uDeQuePercentEnable;
UINT_32 u4DeQuePercentVHT80Nss1;
UINT_32 u4DeQuePercentVHT40Nss1;
UINT_32 u4DeQuePercentVHT20Nss1;
UINT_32 u4DeQuePercentHT40Nss1;
UINT_32 u4DeQuePercentHT20Nss1;
BOOLEAN fgTdlsBufferSTASleep; /* Support TDLS 5.5.4.2 optional case */
BOOLEAN fgChipResetRecover;
UINT_8 ucN9Log2HostCtrl;
UINT_8 ucCR4Log2HostCtrl;
#if CFG_SUPPORT_ANT_SELECT
UINT_8 ucSpeIdxCtrl; /* 0:WF0, 1:WF1, 2: both WF0/1 */
#endif
} WIFI_VAR_T, *P_WIFI_VAR_T; /* end of _WIFI_VAR_T */
/* cnm_timer module */
typedef struct {
LINK_T rLinkHead;
OS_SYSTIME rNextExpiredSysTime;
#if defined(CONFIG_ANDROID) && (CFG_ENABLE_WAKE_LOCK)
KAL_WAKE_LOCK_T rWakeLock;
#endif
BOOLEAN fgWakeLocked;
} ROOT_TIMER, *P_ROOT_TIMER;
/* FW/DRV/NVRAM version information */
typedef struct {
/* NVRAM or Registry */
UINT_16 u2Part1CfgOwnVersion;
UINT_16 u2Part1CfgPeerVersion;
UINT_16 u2Part2CfgOwnVersion;
UINT_16 u2Part2CfgPeerVersion;
/* Firmware */
/* N9 SW */
UINT_16 u2FwProductID;
UINT_16 u2FwOwnVersion;
UINT_16 u2FwPeerVersion;
UINT_8 ucFwBuildNumber;
UINT_8 aucFwBranchInfo[4];
UINT_8 aucFwDateCode[16];
/* N9 tailer */
tailer_format_t rN9tailer;
/* CR4 tailer */
tailer_format_t rCR4tailer;
#if CFG_SUPPORT_COMPRESSION_FW_OPTION
/* N9 Compressed tailer */
tailer_format_t_2 rN9Compressedtailer;
/* CR4 tailer */
tailer_format_t_2 rCR4Compressedtailer;
BOOLEAN fgIsN9CompressedFW;
BOOLEAN fgIsCR4CompressedFW;
#endif
/* Patch header */
PATCH_FORMAT_T rPatchHeader;
BOOLEAN fgPatchIsDlByDrv;
} WIFI_VER_INFO_T, *P_WIFI_VER_INFO_T;
#if CFG_ENABLE_WIFI_DIRECT
/*
* p2p function pointer structure
*/
typedef struct _P2P_FUNCTION_LINKER {
P2P_REMOVE prP2pRemove;
/* NIC_P2P_MEDIA_STATE_CHANGE prNicP2pMediaStateChange; */
/* SCAN_UPDATE_P2P_DEVICE_DESC prScanUpdateP2pDeviceDesc; */
/* P2P_FSM_RUN_EVENT_RX_PROBE_RESPONSE_FRAME prP2pFsmRunEventRxProbeResponseFrame; */
P2P_GENERATE_P2P_IE prP2pGenerateWSC_IEForBeacon;
/* P2P_CALCULATE_WSC_IE_LEN_FOR_PROBE_RSP prP2pCalculateWSC_IELenForProbeRsp; */
/* P2P_GENERATE_WSC_IE_FOR_PROBE_RSP prP2pGenerateWSC_IEForProbeRsp; */
/* SCAN_REMOVE_P2P_BSS_DESC prScanRemoveP2pBssDesc; */
/* P2P_HANDLE_SEC_CHECK_RSP prP2pHandleSecCheckRsp; */
P2P_NET_REGISTER prP2pNetRegister;
P2P_NET_UNREGISTER prP2pNetUnregister;
P2P_CALCULATE_P2P_IE_LEN prP2pCalculateP2p_IELenForAssocReq; /* All IEs generated from supplicant. */
P2P_GENERATE_P2P_IE prP2pGenerateP2p_IEForAssocReq; /* All IEs generated from supplicant. */
} P2P_FUNCTION_LINKER, *P_P2P_FUNCTION_LINKER;
#endif
typedef struct _WIFI_FEM_CFG_T {
/* WiFi FEM path */
UINT_16 u2WifiPath;
UINT_16 u2Reserved;
/* Reserved */
UINT_32 au4Reserved[4];
} WIFI_FEM_CFG_T, *P_WIFI_FEM_CFG_T;
struct CSI_DATA_T {
UINT_8 ucBw;
BOOLEAN bIsCck;
UINT_16 u2DataCount;
INT_16 ac2IData[256];
INT_16 ac2QData[256];
UINT_8 ucDbdcIdx;
INT_8 cRssi;
UINT_8 ucSNR;
UINT_64 u8TimeStamp;
UINT_8 ucDataOutputted; /* bit 0: I data, bit 1: Q data. Set to 1 if it's ouputted */
BOOLEAN bIsOutputing;
BOOLEAN bIncomplete;
INT_32 u4CopiedDataSize;
INT_32 u4RemainingDataSize;
wait_queue_head_t waitq;
};
/*
* Major ADAPTER structure
* Major data structure for driver operation
*/
struct _ADAPTER_T {
struct mt66xx_chip_info *chip_info;
UINT_8 ucRevID;
BOOLEAN fgIsReadRevID;
UINT_16 u2NicOpChnlNum;
BOOLEAN fgIsEnableWMM;
BOOLEAN fgIsWmmAssoc; /* This flag is used to indicate that WMM is enable in current BSS */
UINT_32 u4OsPacketFilter; /* packet filter used by OS */
BOOLEAN fgAllMulicastFilter; /* mDNS filter used by OS */
P_BSS_INFO_T aprBssInfo[HW_BSSID_NUM + 1];
P_BSS_INFO_T prAisBssInfo;
#if CFG_TCP_IP_CHKSUM_OFFLOAD
BOOLEAN fgIsSupportCsumOffload; /* Does FW support Checksum Offload feature */
UINT_32 u4CSUMFlags;
#endif /* CFG_TCP_IP_CHKSUM_OFFLOAD */
ENUM_BAND_T aePreferBand[BSS_INFO_NUM];
/* ADAPTER flags */
UINT_32 u4Flags;
UINT_32 u4HwFlags;
BOOLEAN fgIsRadioOff;
BOOLEAN fgIsEnterD3ReqIssued;
UINT_8 aucMacAddress[MAC_ADDR_LEN];
ENUM_PHY_TYPE_INDEX_T eCurrentPhyType; /* Current selection basing on the set of Available PHY Types */
UINT_32 u4CoalescingBufCachedSize;
PUINT_8 pucCoalescingBufCached;
/* Buffer for CMD_INFO_T, Mgt packet and mailbox message */
BUF_INFO_T rMgtBufInfo;
BUF_INFO_T rMsgBufInfo;
PUINT_8 pucMgtBufCached;
UINT_32 u4MgtBufCachedSize;
UINT_8 aucMsgBuf[MSG_BUFFER_SIZE];
#if CFG_DBG_MGT_BUF
UINT_32 u4MemAllocDynamicCount; /* Debug only */
UINT_32 u4MemFreeDynamicCount; /* Debug only */
#endif
STA_RECORD_T arStaRec[CFG_STA_REC_NUM];
/* Element for TX PATH */
TX_CTRL_T rTxCtrl;
QUE_T rFreeCmdList;
CMD_INFO_T arHifCmdDesc[CFG_TX_MAX_CMD_PKT_NUM];
/* Element for RX PATH */
RX_CTRL_T rRxCtrl;
/* Timer for restarting RFB setup procedure */
TIMER_T rPacketDelaySetupTimer;
/* Buffer for Authentication Event */
/* <Todo> Move to glue layer and refine the kal function */
/* Reference to rsnGeneratePmkidIndication function at rsn.c */
UINT_8 aucIndicationEventBuffer[(CFG_MAX_PMKID_CACHE * 20) + 8];
UINT_32 u4IntStatus;
ENUM_ACPI_STATE_T rAcpiState;
BOOLEAN fgIsIntEnable;
BOOLEAN fgIsIntEnableWithLPOwnSet;
BOOLEAN fgIsFwOwn;
BOOLEAN fgWiFiInSleepyState;
/* Set by callback to make sure WOW process done before system suspend */
BOOLEAN fgSetPfCapabilityDone;
BOOLEAN fgSetWowDone;
BOOLEAN fgForceFwOwn;
OS_SYSTIME rLastOwnFailedLogTime;
UINT_32 u4OwnFailedCount;
UINT_32 u4OwnFailedLogCount;
UINT_32 u4PwrCtrlBlockCnt;
/* TX Direct related : BEGIN */
BOOLEAN fgTxDirectInited;
#define TX_DIRECT_CHECK_INTERVAL (1000 * HZ / USEC_PER_SEC)
struct timer_list rTxDirectSkbTimer; /* check if an empty MsduInfo is available */
struct timer_list rTxDirectHifTimer; /* check if HIF port is ready to accept a new Msdu */
struct sk_buff_head rTxDirectSkbQueue;
QUE_T rTxDirectHifQueue[TX_PORT_NUM];
QUE_T rStaPsQueue[CFG_STA_REC_NUM];
UINT_32 u4StaPsBitmap;
QUE_T rBssAbsentQueue[HW_BSSID_NUM + 1];
UINT_32 u4BssAbsentBitmap;
/* TX Direct related : END */
QUE_T rPendingCmdQueue;
#if CFG_SUPPORT_MULTITHREAD
QUE_T rTxCmdQueue;
QUE_T rTxCmdDoneQueue;
#if CFG_FIX_2_TX_PORT
QUE_T rTxP0Queue;
QUE_T rTxP1Queue;
#else
QUE_T rTxPQueue[TX_PORT_NUM];
#endif
QUE_T rRxQueue;
QUE_T rTxDataDoneQueue;
#endif
P_GLUE_INFO_T prGlueInfo;
UINT_8 ucCmdSeqNum;
UINT_8 ucTxSeqNum;
UINT_8 aucPidPool[WTBL_SIZE];
#if 1 /* CFG_SUPPORT_WAPI */
BOOLEAN fgUseWapi;
#endif
/* RF Test flags */
BOOLEAN fgTestMode;
BOOLEAN fgIcapMode;
/* WLAN Info for DRIVER_CORE OID query */
WLAN_INFO_T rWlanInfo;
#if CFG_ENABLE_WIFI_DIRECT
BOOLEAN fgIsP2PRegistered;
BOOLEAN p2p_scan_report_all_bss; /* flag to report all networks in p2p scan */
ENUM_NET_REG_STATE_T rP2PNetRegState;
/* BOOLEAN fgIsWlanLaunched; */
P_P2P_INFO_T prP2pInfo;
#if CFG_SUPPORT_P2P_RSSI_QUERY
OS_SYSTIME rP2pLinkQualityUpdateTime;
BOOLEAN fgIsP2pLinkQualityValid;
EVENT_LINK_QUALITY rP2pLinkQuality;
#endif
#endif
/* Online Scan Option */
BOOLEAN fgEnOnlineScan;
/* Online Scan Option */
BOOLEAN fgDisBcnLostDetection;
/* MAC address */
PARAM_MAC_ADDRESS rMyMacAddr;
/* Wake-up Event for WOL */
UINT_32 u4WakeupEventEnable;
/* Event Buffering */
EVENT_STATISTICS rStatStruct;
OS_SYSTIME rStatUpdateTime;
BOOLEAN fgIsStatValid;
#if CFG_SUPPORT_MSP
EVENT_WLAN_INFO rEventWlanInfo;
#endif
#if CFG_SUPPORT_LAST_SEC_MCS_INFO
TIMER_T rRxMcsInfoTimer;
BOOLEAN fgIsMcsInfoValid;
#endif
EVENT_LINK_QUALITY rLinkQuality;
OS_SYSTIME rLinkQualityUpdateTime;
BOOLEAN fgIsLinkQualityValid;
OS_SYSTIME rLinkRateUpdateTime;
BOOLEAN fgIsLinkRateValid;
/* WIFI_VAR_T */
WIFI_VAR_T rWifiVar;
/* MTK WLAN NIC driver IEEE 802.11 MIB */
IEEE_802_11_MIB_T rMib;
/* Mailboxs for inter-module communication */
MBOX_T arMbox[MBOX_ID_TOTAL_NUM];
/* Timers for OID Pending Handling */
TIMER_T rOidTimeoutTimer;
UINT_8 ucOidTimeoutCount;
/* Root Timer for cnm_timer module */
ROOT_TIMER rRootTimer;
BOOLEAN fgIsChipNoAck;
BOOLEAN fgIsChipAssert;
/* RLM maintenance */
ENUM_CHNL_EXT_T eRfSco;
ENUM_SYS_PROTECT_MODE_T eSysProtectMode;
ENUM_GF_MODE_T eSysHtGfMode;
ENUM_RIFS_MODE_T eSysTxRifsMode;
ENUM_SYS_PCO_PHASE_T eSysPcoPhase;
P_DOMAIN_INFO_ENTRY prDomainInfo;
/* QM */
QUE_MGT_T rQM;
CNM_INFO_T rCnmInfo;
UINT_32 u4PowerMode;
UINT_32 u4CtiaPowerMode;
BOOLEAN 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.
*/
UINT_32 u4IsKeepFullPwrBitmap;
UINT_32 fgEnArpFilter;
UINT_32 u4UapsdAcBmp;
UINT_32 u4MaxSpLen;
UINT_32 u4PsCurrentMeasureEn;
/* Version Information */
WIFI_VER_INFO_T rVerInfo;
/* 5GHz support (from F/W) */
BOOLEAN fgIsHw5GBandDisabled;
BOOLEAN fgEnable5GBand;
BOOLEAN fgIsEepromUsed;
BOOLEAN fgIsEfuseValid;
BOOLEAN fgIsEmbbededMacAddrValid;
#if CFG_SUPPORT_PWR_LIMIT_COUNTRY
BOOLEAN fgIsPowerLimitTableValid;
#endif
/* Packet Forwarding Tracking */
INT_32 i4PendingFwdFrameCount;
#if CFG_SUPPORT_RDD_TEST_MODE
UINT_8 ucRddStatus;
#endif
BOOL fgDisStaAgingTimeoutDetection;
UINT_32 u4FwCompileFlag0;
UINT_32 u4FwCompileFlag1;
UINT_32 u4FwFeatureFlag0;
UINT_32 u4FwFeatureFlag1;
#if CFG_SUPPORT_CFG_FILE
P_WLAN_CFG_T prWlanCfg;
WLAN_CFG_T rWlanCfg;
P_WLAN_CFG_REC_T prWlanCfgRec;
WLAN_CFG_REC_T rWlanCfgRec;
#endif
#if CFG_M0VE_BA_TO_DRIVER
TIMER_T rMqmIdleRxBaDetectionTimer;
UINT_32 u4FlagBitmap;
#endif
#if CFG_ASSERT_DUMP
TIMER_T rN9CorDumpTimer;
TIMER_T rCr4CorDumpTimer;
BOOLEAN fgN9CorDumpFileOpend;
BOOLEAN fgCr4CorDumpFileOpend;
BOOLEAN fgN9AssertDumpOngoing;
BOOLEAN fgCr4AssertDumpOngoing;
BOOLEAN fgKeepPrintCoreDump;
#endif
/* Tx resource information */
BOOLEAN fgIsNicTxReousrceValid;
NIC_TX_RESOURCE_T nicTxReousrce;
/* Efuse Start and End address */
UINT_32 u4EfuseStartAddress;
UINT_32 u4EfuseEndAddress;
/* COEX feature */
UINT_32 u4FddMode;
#if (CFG_EFUSE_BUFFER_MODE_DELAY_CAL == 1)
/* MAC address Efuse Offset */
UINT_32 u4EfuseMacAddrOffset;
#endif
#if CFG_WOW_SUPPORT
WOW_CTRL_T rWowCtrl;
#endif
/*#if (CFG_EEPROM_PAGE_ACCESS == 1)*/
UINT_8 aucEepromVaule[16]; /* HQA CMD for Efuse Block size contents */
UINT_32 u4FreeBlockNum;
UINT_32 u4GetTxPower;
/*#endif*/
BOOLEAN fgIsCr4FwDownloaded;
BOOLEAN fgIsFwDownloaded;
BOOLEAN fgIsSupportBufferBinSize16Byte;
BOOLEAN fgIsSupportDelayCal;
BOOLEAN fgIsSupportGetFreeEfuseBlockCount;
BOOLEAN fgIsSupportQAAccessEfuse;
BOOLEAN fgIsSupportPowerOnSendBufferModeCMD;
BOOLEAN fgIsBufferBinExtract;
BOOLEAN fgIsSupportGetTxPower;
BOOLEAN fgIsEnableLpdvt;
/* SER related info */
UINT_8 ucSerState;
#if (CFG_HW_WMM_BY_BSS == 1)
UINT_8 ucHwWmmEnBit;
#endif
WIFI_FEM_CFG_T rWifiFemCfg;
struct CSI_DATA_T rCsiData;
}; /* 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
********************************************************************************
*/
/* 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 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) \
{ UINT_8 _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; \
}
/*----------------------------------------------------------------------------*/
/* 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))))
/*******************************************************************************
* 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 */