wlan:HT40 support on 2.4GHz band
Following changes are made as part of this gerrit
- Enabling HT40 on 2.4GHz
- Switching of HT40 to HT20
- Added new feature flag HT40_OBSS_SCAN
- Beacon offload extended to detect the changes in secondary
channel offset in HT operation IE.
Change-Id: I0fdafde198f44c0d51a85e9beaade2b60c6ac174
CRs-Fixed: 608188
diff --git a/CORE/MAC/src/include/parserApi.h b/CORE/MAC/src/include/parserApi.h
index 994b02f..3301b1c 100644
--- a/CORE/MAC/src/include/parserApi.h
+++ b/CORE/MAC/src/include/parserApi.h
@@ -885,7 +885,8 @@
PopulateDot11fVHTExtBssLoad(tpAniSirGlobal pMac, tDot11fIEVHTExtBssLoad *pDot11f);
tSirRetStatus
-PopulateDot11fExtCap(tpAniSirGlobal pMac, tDot11fIEExtCap * pDot11f);
+PopulateDot11fExtCap(tpAniSirGlobal pMac, tDot11fIEExtCap * pDot11f,
+ tPESession *sessionEntry);
tSirRetStatus
PopulateDot11fOperatingMode(tpAniSirGlobal pMac, tDot11fIEOperatingMode *pDot11f, tpPESession psessionEntry );
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 33f5d69..a492b6e 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -96,7 +96,10 @@
BATCH_SCAN = 30,
#endif
FW_IN_TX_PATH = 31,
- UPDATE_CHANNEL_LIST = 34,
+ EXTENDED_NSOFFLOAD_SLOT = 32,
+ CH_SWITCH_V1 = 33,
+ HT40_OBSS_SCAN = 34,
+ UPDATE_CHANNEL_LIST = 35,
//MAX_FEATURE_SUPPORTED = 128
} placeHolderInCapBitmap;
diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
index 849158d..5573d39 100644
--- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c
+++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
@@ -224,6 +224,7 @@
tANI_U8 sessionId;
tANI_U8 *p2pIe = NULL;
tANI_U32 txFlag = 0;
+ tANI_U32 chanbond24G = 0;
#ifndef GEN4_SCAN
return eSIR_FAILURE;
@@ -311,13 +312,13 @@
}
}
- /* Set channelbonding information as "disabled" when tunned to a 2.4 GHz channel */
- if( nChannelNum <= SIR_11B_CHANNEL_END)
+ /* Get HT40 capability for 2.4GHz band */
+ wlan_cfgGetInt(pMac,WNI_CFG_CHANNEL_BONDING_24G,&chanbond24G);
+ if( (nChannelNum <= SIR_11B_CHANNEL_END) && chanbond24G != TRUE)
{
pr.HTCaps.supportedChannelWidthSet = eHT_CHANNEL_WIDTH_20MHZ;
pr.HTCaps.shortGI40MHz = 0;
}
-
#ifdef WLAN_FEATURE_11AC
if (psessionEntry != NULL ) {
psessionEntry->vhtCapability = IS_DOT11_MODE_VHT(dot11mode);
@@ -636,10 +637,11 @@
PopulateDot11fVHTOperation( pMac, &pFrm->VHTOperation );
// we do not support multi users yet
//PopulateDot11fVHTExtBssLoad( pMac, &frm.VHTExtBssLoad );
- PopulateDot11fExtCap( pMac, &pFrm->ExtCap);
+ PopulateDot11fExtCap( pMac, &pFrm->ExtCap, psessionEntry);
}
#endif
+
if ( psessionEntry->pLimStartBssReq )
{
PopulateDot11fWPA( pMac, &( psessionEntry->pLimStartBssReq->rsnIE ),
@@ -1324,7 +1326,7 @@
limLog( pMac, LOG1, FL("Populate VHT IEs in Assoc Response"));
PopulateDot11fVHTCaps( pMac, &frm.VHTCaps );
PopulateDot11fVHTOperation( pMac, &frm.VHTOperation);
- PopulateDot11fExtCap( pMac, &frm.ExtCap);
+ PopulateDot11fExtCap( pMac, &frm.ExtCap, psessionEntry);
}
#endif
@@ -2153,10 +2155,9 @@
{
limLog( pMac, LOG1, FL("Populate VHT IEs in Assoc Request"));
PopulateDot11fVHTCaps( pMac, &pFrm->VHTCaps );
- PopulateDot11fExtCap( pMac, &pFrm->ExtCap);
}
#endif
-
+ PopulateDot11fExtCap( pMac, &pFrm->ExtCap, psessionEntry);
#if defined WLAN_FEATURE_VOWIFI_11R
if (psessionEntry->pLimJoinReq->is11Rconnection)
@@ -2585,9 +2586,9 @@
{
limLog( pMac, LOG1, FL("Populate VHT IEs in Re-Assoc Request"));
PopulateDot11fVHTCaps( pMac, &frm.VHTCaps );
- PopulateDot11fExtCap( pMac, &frm.ExtCap);
}
#endif
+ PopulateDot11fExtCap( pMac, &frm.ExtCap, psessionEntry);
nStatus = dot11fGetPackedReAssocRequestSize( pMac, &frm, &nPayload );
if ( DOT11F_FAILED( nStatus ) )
@@ -2998,7 +2999,7 @@
{
limLog( pMac, LOG1, FL("Populate VHT IEs in Re-Assoc Request"));
PopulateDot11fVHTCaps( pMac, &frm.VHTCaps );
- PopulateDot11fExtCap( pMac, &frm.ExtCap);
+ PopulateDot11fExtCap( pMac, &frm.ExtCap, psessionEntry);
}
#endif
diff --git a/CORE/MAC/src/pe/lim/limSendMessages.c b/CORE/MAC/src/pe/lim/limSendMessages.c
index 0c5d5d0..678cf3f 100644
--- a/CORE/MAC/src/pe/lim/limSendMessages.c
+++ b/CORE/MAC/src/pe/lim/limSendMessages.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -19,7 +19,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
- * Copyright (c) 2011-2013 Qualcomm Atheros, Inc.
+ * Copyright (c) 2011-2014 Qualcomm Atheros, Inc.
* All Rights Reserved.
* Qualcomm Atheros Confidential and Proprietary.
*
@@ -56,8 +56,9 @@
{SIR_MAC_EDCA_PARAM_SET_EID, 0, {0, 0, EDCA_FILTER_MASK, 0}},
{SIR_MAC_QOS_CAPABILITY_EID, 0, {0, 0, QOS_FILTER_MASK, 0}},
{SIR_MAC_CHNL_SWITCH_ANN_EID, 1, {0, 0, 0, 0}},
- {SIR_MAC_HT_INFO_EID, 0, {0, 0, HT_BYTE0_FILTER_MASK, 0}},
- {SIR_MAC_HT_INFO_EID, 0, {2, 0, HT_BYTE2_FILTER_MASK, 0}},
+ {SIR_MAC_HT_INFO_EID, 0, {0, 0, HT_BYTE0_FILTER_MASK, 0}}, //primary channel
+ {SIR_MAC_HT_INFO_EID, 0, {1, 0, HT_BYTE1_FILTER_MASK, 0}}, //Secondary Channel
+ {SIR_MAC_HT_INFO_EID, 0, {2, 0, HT_BYTE2_FILTER_MASK, 0}}, //HT protection
{SIR_MAC_HT_INFO_EID, 0, {5, 0, HT_BYTE5_FILTER_MASK, 0}}
#if defined WLAN_FEATURE_VOWIFI
,{SIR_MAC_PWR_CONSTRAINT_EID, 0, {0, 0, 0, 0}}
@@ -704,7 +705,15 @@
return retCode;
}
-#ifdef WLAN_FEATURE_11AC
+/**
+ * \brief Send CB mode update to WDA
+ *
+ * \param pMac Pointer to the global MAC structure
+ *
+ * \param psessionEntry session entry
+ * pTempParam CB mode
+ * \return eSIR_SUCCESS on success, eSIR_FAILURE else
+ */
tSirRetStatus limSendModeUpdate(tpAniSirGlobal pMac,
tUpdateVHTOpMode *pTempParam,
tpPESession psessionEntry )
@@ -745,7 +754,6 @@
return retCode;
}
-#endif
#ifdef FEATURE_WLAN_TDLS_INTERNAL
/** ---------------------------------------------------------
diff --git a/CORE/MAC/src/pe/lim/limSendMessages.h b/CORE/MAC/src/pe/lim/limSendMessages.h
index 37b5b3e..e87df70 100644
--- a/CORE/MAC/src/pe/lim/limSendMessages.h
+++ b/CORE/MAC/src/pe/lim/limSendMessages.h
@@ -63,11 +63,11 @@
tpUpdateBeaconParams pUpdatedBcnParams,
tpPESession psessionEntry );
//tSirRetStatus limSendBeaconParams(tpAniSirGlobal pMac, tpUpdateBeaconParams pUpdatedBcnParams);
-#ifdef WLAN_FEATURE_11AC
tSirRetStatus limSendModeUpdate(tpAniSirGlobal pMac,
tUpdateVHTOpMode *tempParam,
tpPESession psessionEntry );
+#ifdef WLAN_FEATURE_11AC
tANI_U32 limGetCenterChannel(tpAniSirGlobal pMac,
tANI_U8 primarychanNum,
ePhyChanBondState secondaryChanOffset,
@@ -98,6 +98,7 @@
#define EDCA_FILTER_MASK 0xF0
#define QOS_FILTER_MASK 0xF0
#define HT_BYTE0_FILTER_MASK 0x0
+#define HT_BYTE1_FILTER_MASK 0x07
#define HT_BYTE2_FILTER_MASK 0xEB
#define HT_BYTE5_FILTER_MASK 0xFD
#define DS_PARAM_CHANNEL_MASK 0x0
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index 8d285b9..f9cf4c7 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -1280,10 +1280,6 @@
} /****** end limPrintMacAddr() ******/
-
-
-
-
/*
* limResetDeferredMsgQ()
*
@@ -7704,6 +7700,59 @@
}
}
+/**
+ * \brief verify the changes in channel bonding
+ *
+ * \param pMac Pointer to the global MAC structure
+ *
+ * \param psessionEntry session entry
+ * beaconSecChanWidth Secondary channel width
+ * advertized in beacon
+ * currentSecChanWidth Current configured width
+ * staId Station Id
+ * \return eSIR_SUCCESS on success, eSIR_FAILURE else
+ */
+tANI_BOOLEAN limCheckHTChanBondModeChange(tpAniSirGlobal pMac,
+ tpPESession psessionEntry,
+ tANI_U8 beaconSecChanWidth,
+ tANI_U8 currentSecChanWidth,
+ tANI_U8 staId)
+{
+ tUpdateVHTOpMode tempParam;
+ tANI_BOOLEAN fCbMode24G = FALSE;
+ tANI_BOOLEAN status = eANI_BOOLEAN_FALSE;
+
+ /* Moving from HT40 to HT20 operation*/
+ if (((PHY_DOUBLE_CHANNEL_LOW_PRIMARY == currentSecChanWidth) ||
+ (PHY_DOUBLE_CHANNEL_HIGH_PRIMARY == currentSecChanWidth))
+ && (PHY_SINGLE_CHANNEL_CENTERED == beaconSecChanWidth))
+ {
+ tempParam.opMode = eHT_CHANNEL_WIDTH_20MHZ;
+ tempParam.staId = staId;
+ fCbMode24G = TRUE;
+ }
+
+ /* Moving from HT20 to HT40 operation*/
+ if ((( PHY_DOUBLE_CHANNEL_LOW_PRIMARY == beaconSecChanWidth) ||
+ ( PHY_DOUBLE_CHANNEL_HIGH_PRIMARY == beaconSecChanWidth ))
+ && (PHY_SINGLE_CHANNEL_CENTERED == currentSecChanWidth))
+ {
+ tempParam.opMode = eHT_CHANNEL_WIDTH_40MHZ;
+ tempParam.staId = staId;
+ fCbMode24G = TRUE;
+ }
+
+ if (TRUE == fCbMode24G)
+ {
+ VOS_TRACE( VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
+ "Changing CBMODE to = %d staId = %d",
+ tempParam.opMode, tempParam.staId );
+ if( eSIR_SUCCESS == limSendModeUpdate(pMac, &tempParam, psessionEntry))
+ status = eANI_BOOLEAN_TRUE;
+ }
+ return status;
+}
+
#ifdef WLAN_FEATURE_11AC
tANI_BOOLEAN limCheckVHTOpModeChange( tpAniSirGlobal pMac, tpPESession psessionEntry, tANI_U8 chanWidth, tANI_U8 staId)
{
diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h
index 526d577..32ea68a 100644
--- a/CORE/MAC/src/pe/lim/limUtils.h
+++ b/CORE/MAC/src/pe/lim/limUtils.h
@@ -398,10 +398,14 @@
tANI_U8 limGetCurrentOperatingChannel(tpAniSirGlobal pMac);
#ifdef WLAN_FEATURE_11AC
-tANI_BOOLEAN limCheckVHTOpModeChange( tpAniSirGlobal pMac,
+tANI_BOOLEAN limCheckVHTOpModeChange( tpAniSirGlobal pMac,
tpPESession psessionEntry, tANI_U8 chanWidth, tANI_U8 staId);
#endif
-
+tANI_BOOLEAN limCheckHTChanBondModeChange(tpAniSirGlobal pMac,
+ tpPESession psessionEntry,
+ tANI_U8 beaconSecChanWidth,
+ tANI_U8 currentSecChanWidth,
+ tANI_U8 staId);
#ifdef FEATURE_WLAN_DIAG_SUPPORT
typedef enum
diff --git a/CORE/MAC/src/pe/sch/schBeaconGen.c b/CORE/MAC/src/pe/sch/schBeaconGen.c
index 46293b5..ef8d2c8 100644
--- a/CORE/MAC/src/pe/sch/schBeaconGen.c
+++ b/CORE/MAC/src/pe/sch/schBeaconGen.c
@@ -357,7 +357,7 @@
PopulateDot11fVHTOperation( pMac, &pBcn2->VHTOperation);
// we do not support multi users yet
//PopulateDot11fVHTExtBssLoad( pMac, &bcn2.VHTExtBssLoad);
- PopulateDot11fExtCap( pMac, &pBcn2->ExtCap);
+ PopulateDot11fExtCap( pMac, &pBcn2->ExtCap, psessionEntry);
if(psessionEntry->gLimOperatingMode.present)
PopulateDot11fOperatingMode( pMac, &pBcn2->OperatingMode, psessionEntry );
}
diff --git a/CORE/MAC/src/pe/sch/schBeaconProcess.c b/CORE/MAC/src/pe/sch/schBeaconProcess.c
index 8d7260a..e35afe5 100644
--- a/CORE/MAC/src/pe/sch/schBeaconProcess.c
+++ b/CORE/MAC/src/pe/sch/schBeaconProcess.c
@@ -471,8 +471,40 @@
{
limCancelDot11hChannelSwitch(pMac, psessionEntry);
}
+ // check for HT capability
+ pStaDs = dphLookupHashEntry(pMac, pMh->sa, &aid,
+ &psessionEntry->dph.dphHashTable);
+ if (pStaDs != NULL)
+ {
+ /* Following check is related to HT40 on 2.4GHz mode*/
+ if ((pStaDs->htSecondaryChannelOffset !=
+ pBeacon->HTInfo.secondaryChannelOffset) &&
+ (IS_HT40_OBSS_SCAN_FEATURE_ENABLE) &&
+ (psessionEntry->currentOperChannel <= RF_CHAN_14))
+ {
+ VOS_TRACE( VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
+ FL(" Current Secondarychanoffset %d received "
+ " secondaryChannelOffset %d, staIdx = %d"),
+ pStaDs->htSecondaryChannelOffset,
+ pBeacon->HTInfo.secondaryChannelOffset,
+ pStaDs->staIndex);
+ if (eANI_BOOLEAN_TRUE ==(limCheckHTChanBondModeChange(pMac,
+ psessionEntry,
+ pBeacon->HTInfo.secondaryChannelOffset,
+ pStaDs->htSecondaryChannelOffset,
+ pStaDs->staIndex)))
+ {
+ pStaDs->htSupportedChannelWidthSet =
+ pBeacon->HTInfo.recommendedTxWidthSet;
+ pStaDs->htSecondaryChannelOffset =
+ pBeacon->HTInfo.secondaryChannelOffset;
+ }
+ }
+ }
+ else
+ PELOGE(schLog(pMac, LOGE, FL("Self Entry missing in Hash Table"));)
}
-
+ /* TODO : Below condition checks can be merged with the if */
#ifdef WLAN_FEATURE_11AC
if ((psessionEntry->limSystemRole == eLIM_STA_ROLE) ||
(psessionEntry->limSystemRole == eLIM_BT_AMP_STA_ROLE) ||
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 1f8ecad..d7f84ed 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1034,9 +1034,10 @@
{
int i;
pMac->roam.configParam.agingCount = CSR_AGING_COUNT;
- pMac->roam.configParam.channelBondingMode24GHz = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE;
- pMac->roam.configParam.channelBondingMode5GHz = WNI_CFG_CHANNEL_BONDING_MODE_ENABLE;
-
+ pMac->roam.configParam.channelBondingMode24GHz =
+ WNI_CFG_CHANNEL_BONDING_MODE_DISABLE;
+ pMac->roam.configParam.channelBondingMode5GHz =
+ WNI_CFG_CHANNEL_BONDING_MODE_ENABLE;
pMac->roam.configParam.phyMode = eCSR_DOT11_MODE_TAURUS;
pMac->roam.configParam.eBand = eCSR_BAND_ALL;
pMac->roam.configParam.uCfgDot11Mode = eCSR_CFG_DOT11_MODE_TAURUS;
@@ -2989,6 +2990,7 @@
}
//validate CB
pBssConfig->cbMode = csrGetCBModeFromIes(pMac, pBssDesc->channelId, pIes);
+
}while(0);
return (status);
}
@@ -3807,7 +3809,6 @@
//ccmCfgSetInt(pMac, WNI_CFG_RTS_THRESHOLD, csrGetRTSThresh(pMac), NULL, eANI_BOOLEAN_FALSE);
//ccmCfgSetInt(pMac, WNI_CFG_DOT11_MODE, csrTranslateToWNICfgDot11Mode(pMac, pBssConfig->uCfgDot11Mode), NULL, eANI_BOOLEAN_FALSE);
-
//Auth type
ccmCfgSetInt(pMac, WNI_CFG_AUTHENTICATION_TYPE, pBssConfig->authType, NULL, eANI_BOOLEAN_FALSE);
//encryption type
@@ -3837,9 +3838,14 @@
}
if(0 != channel)
{
- if(CSR_IS_CHANNEL_24GHZ(channel))
- {//for now if we are on 2.4 Ghz, CB will be always disabled
+ if(CSR_IS_CHANNEL_24GHZ(channel) &&
+ !pMac->roam.configParam.channelBondingMode24GHz &&
+ !WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
+ {//On 2.4 Ghz, CB will be disabled if it is not configured through .ini
cfgCb = WNI_CFG_CHANNEL_BONDING_MODE_DISABLE;
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH, "%s: "
+ " cbMode disabled cfgCb = %d channelBondingMode24GHz %d",
+ __func__, cfgCb, pMac->roam.configParam.channelBondingMode24GHz);
}
else
{
@@ -3855,7 +3861,7 @@
if(!WDA_getFwWlanFeatCaps(DOT11AC)) {
cfgCb = csrGetHTCBStateFromVHTCBState(cfgCb);
}
- else
+ else
{
ccmCfgSetInt(pMac, WNI_CFG_VHT_CHANNEL_WIDTH, pMac->roam.configParam.nVhtChannelWidth, NULL, eANI_BOOLEAN_FALSE);
}
@@ -11074,6 +11080,7 @@
ePhyChanBondState eRet = PHY_SINGLE_CHANNEL_CENTERED;
tANI_U8 centerChn;
tANI_U32 ChannelBondingMode;
+
if(CSR_IS_CHANNEL_24GHZ(primaryChn))
{
ChannelBondingMode = pMac->roam.configParam.channelBondingMode24GHz;
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index b4be20e..d4b8bea 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -1392,6 +1392,16 @@
/* update the directed scan offload setting */
pMac->fScanOffload = pSmeConfigParams->fScanOffload;
+ /* Enable channel bonding mode in 2.4GHz */
+ if ((pSmeConfigParams->csrConfig.channelBondingMode24GHz == TRUE) &&
+ (IS_HT40_OBSS_SCAN_FEATURE_ENABLE))
+ {
+ ccmCfgSetInt(hHal,WNI_CFG_CHANNEL_BONDING_24G,
+ eANI_BOOLEAN_TRUE, NULL,eANI_BOOLEAN_FALSE);
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_HIGH,
+ "Setting channelBondingMode24GHz:%d " ,
+ pSmeConfigParams->csrConfig.channelBondingMode24GHz);
+ }
if (pMac->fScanOffload)
{
/* If scan offload is enabled then lim has allow the sending of
diff --git a/CORE/SYS/legacy/src/utils/src/parserApi.c b/CORE/SYS/legacy/src/utils/src/parserApi.c
index e281f2a..5d7ecd4 100644
--- a/CORE/SYS/legacy/src/utils/src/parserApi.c
+++ b/CORE/SYS/legacy/src/utils/src/parserApi.c
@@ -943,11 +943,27 @@
tSirRetStatus
PopulateDot11fExtCap(tpAniSirGlobal pMac,
- tDot11fIEExtCap *pDot11f)
+ tDot11fIEExtCap *pDot11f,
+ tpPESession psessionEntry)
{
+ tANI_U32 val;
+
pDot11f->present = 1;
- pDot11f->operModeNotification = 1;
-
+#ifdef WLAN_FEATURE_11AC
+ if (psessionEntry->vhtCapability)
+ pDot11f->operModeNotification = 1;
+#endif
+ /* while operating in 2.4GHz only then STA need to advertize
+ the bss co-ex capability*/
+ if (psessionEntry->currentOperChannel <= RF_CHAN_14)
+ {
+ if (wlan_cfgGetInt(pMac, WNI_CFG_CHANNEL_BONDING_24G, &val) !=
+ eSIR_SUCCESS)
+ PELOGE(limLog(pMac, LOGE, FL("could not retrieve "
+ "24G Chan bond Length \n"));)
+ if (TRUE == val)
+ pDot11f->bssCoexistMgmtSupport = 1;
+ }
return eSIR_SUCCESS;
}
diff --git a/CORE/WDA/inc/legacy/halMsgApi.h b/CORE/WDA/inc/legacy/halMsgApi.h
index 6bb84a3..fba1623 100644
--- a/CORE/WDA/inc/legacy/halMsgApi.h
+++ b/CORE/WDA/inc/legacy/halMsgApi.h
@@ -873,13 +873,11 @@
tANI_U16 paramChangeBitmap;
}tUpdateBeaconParams, *tpUpdateBeaconParams;
-#ifdef WLAN_FEATURE_11AC
typedef struct
{
tANI_U16 opMode;
tANI_U16 staId;
}tUpdateVHTOpMode, *tpUpdateVHTOpMode;
-#endif
//HAL MSG: SIR_HAL_UPDATE_CF_IND
typedef struct
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 0e6dd52..f6f7a96 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -177,6 +177,8 @@
#else
#define IS_ADVANCE_TDLS_ENABLE 0
#endif
+#define IS_HT40_OBSS_SCAN_FEATURE_ENABLE ((WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN)) & (WDI_getHostWlanFeatCaps(HT40_OBSS_SCAN)))
+
/*--------------------------------------------------------------------------
Definitions for Data path APIs
--------------------------------------------------------------------------*/
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index cd0d80a..8df2504 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -12084,10 +12084,15 @@
WDA_ProcessSetTmLevelReq(pWDA, (tAniSetTmLevelReq *)pMsg->bodyptr);
break;
}
-#ifdef WLAN_FEATURE_11AC
+
case WDA_UPDATE_OP_MODE:
{
- if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
+ if(WDA_getHostWlanFeatCaps(HT40_OBSS_SCAN) &&
+ WDA_getFwWlanFeatCaps(HT40_OBSS_SCAN))
+ {
+ WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
+ }
+ else if(WDA_getHostWlanFeatCaps(DOT11AC) && WDA_getFwWlanFeatCaps(DOT11AC))
{
if(WDA_getHostWlanFeatCaps(DOT11AC_OPMODE) && WDA_getFwWlanFeatCaps(DOT11AC_OPMODE))
WDA_ProcessUpdateOpMode(pWDA, (tUpdateVHTOpMode *)pMsg->bodyptr);
@@ -12100,7 +12105,6 @@
" 11AC Feature is Not Supported");
break;
}
-#endif
#ifdef WLAN_FEATURE_11W
case WDA_EXCLUDE_UNENCRYPTED_IND:
{
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index 0c4e315..527b7e1 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -172,6 +172,10 @@
#endif
,FEATURE_NOT_SUPPORTED //30
,FW_IN_TX_PATH //31
+ ,EXTENDED_NSOFFLOAD_SLOT //32
+ ,CH_SWITCH_V1 //33
+ ,HT40_OBSS_SCAN //34
+ ,UPDATE_CHANNEL_LIST //35
};
/*--------------------------------------------------------------------------
@@ -1186,6 +1190,11 @@
case FW_IN_TX_PATH: snprintf(pCapStr, sizeof("FW_IN_TX_PATH"), "%s", "FW_IN_TX_PATH");
pCapStr += strlen("FW_IN_TX_PATH");
break;
+ case HT40_OBSS_SCAN:
+ snprintf(pCapStr, sizeof("HT40_OBSS_SCAN"),
+ "%s", "HT40_OBSS_SCAN");
+ pCapStr += strlen("HT40_OBSS_SCAN");
+ break;
}
*pCapStr++ = ',';
*pCapStr++ = ' ';