/******************************************************************************
 *
 * 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;

    /*------------------------------------------------------------------------*/
	/* 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
};

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 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;

#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;
	KAL_WAKE_LOCK_T rWakeLock;
	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;

/*
 * 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

	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;

	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_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 fgIsSupportGetTxPower;
	BOOLEAN fgIsEnableLpdvt;

	/* SER related info */
	UINT_8 ucSerState;

	WIFI_FEM_CFG_T rWifiFemCfg;
};				/* 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 */
