wlan: LFR Roaming on Infra STA during concurrency
This is a new requirement to support legacy fast roaming for
infra STA link during concurrency. (Either SCC or MCC)
1. This feature is configurable via config item
2. This feature is disabled if Roam Scan offload is disabled
Change-Id: I4598ce5c4006a16fbcf6090e37becd09cbb17a35
CRs-Fixed: 454729
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index d61a066..7f1f1ec 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1791,6 +1791,16 @@
#define CFG_SCAN_OFFLOAD_ENABLE ( 1 )
#define CFG_SCAN_OFFLOAD_DEFAULT ( CFG_SCAN_OFFLOAD_DISABLE )
+/*
+ * Enable legacy fast roaming (LFR) on STA link during concurrent sessions
+ */
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+#define CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY "gEnableFastRoamInConcurrency"
+#define CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MIN ( 0 )
+#define CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MAX ( 1 )
+#define CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_DEFAULT ( 1 )
+#endif
+
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
@@ -2173,6 +2183,10 @@
v_U32_t trafficIdleTimeout;
v_BOOL_t enableVhtFor24GHzBand;
v_U8_t fScanOffload;
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ /* Flag indicating whether legacy fast roam during concurrency is enabled in cfg.ini or not */
+ v_BOOL_t bFastRoamInConIniFeatureEnabled;
+#endif
} hdd_config_t;
/*---------------------------------------------------------------------------
Function declarations and documenation
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 10a3a6f..a49c0db 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -195,7 +195,18 @@
static void cbNotifyUpdateRoamScanOffloadEnabled(hdd_context_t *pHddCtx, unsigned long NotifyId)
{
sme_UpdateRoamScanOffloadEnabled((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->isRoamOffloadScanEnabled);
+ if (0 == pHddCtx->cfg_ini->isRoamOffloadScanEnabled)
+ {
+ pHddCtx->cfg_ini->bFastRoamInConIniFeatureEnabled = 0;
+ sme_UpdateEnableFastRoamInConcurrency((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->bFastRoamInConIniFeatureEnabled );
+ }
}
+
+static void cbNotifySetEnableFastRoamInConcurrency(hdd_context_t *pHddCtx, unsigned long NotifyId)
+{
+ sme_UpdateEnableFastRoamInConcurrency((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->bFastRoamInConIniFeatureEnabled );
+}
+
#endif
REG_TABLE_ENTRY g_registry_table[] =
@@ -2325,6 +2336,17 @@
CFG_SCAN_OFFLOAD_DEFAULT,
CFG_SCAN_OFFLOAD_DISABLE,
CFG_SCAN_OFFLOAD_ENABLE ),
+
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ REG_DYNAMIC_VARIABLE( CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY, WLAN_PARAM_Integer,
+ hdd_config_t, bFastRoamInConIniFeatureEnabled,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_DEFAULT,
+ CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MIN,
+ CFG_ENABLE_FAST_ROAM_IN_CONCURRENCY_MAX,
+ cbNotifySetEnableFastRoamInConcurrency, 0 ),
+#endif
+
};
/*
@@ -4014,6 +4036,13 @@
#endif
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
smeConfig.csrConfig.isRoamOffloadScanEnabled = pConfig->isRoamOffloadScanEnabled;
+ smeConfig.csrConfig.bFastRoamInConIniFeatureEnabled = pConfig->bFastRoamInConIniFeatureEnabled;
+
+ if (0 == smeConfig.csrConfig.isRoamOffloadScanEnabled)
+ {
+ /* Disable roaming in concurrency if roam scan offload is disabled */
+ smeConfig.csrConfig.bFastRoamInConIniFeatureEnabled = 0;
+ }
#endif
#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
smeConfig.csrConfig.neighborRoamConfig.nNeighborReassocRssiThreshold = pConfig->nNeighborReassocRssiThreshold;
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index bfdf93c..61179c0 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1101,11 +1101,13 @@
tANI_BOOLEAN nRoamIntraBand;
tANI_U8 nProbes;
tANI_U16 nRoamScanHomeAwayTime;
-#endif
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
tANI_BOOLEAN isRoamOffloadScanEnabled;
+ tANI_BOOLEAN bFastRoamInConIniFeatureEnabled;
#endif
+#endif
+
tANI_U8 scanCfgAgingTime;
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 86377bb..9a5dfea 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -110,6 +110,11 @@
( \
(((pMac)->roam.configParam.isRoamOffloadScanEnabled)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \
)
+
+#define CSR_IS_FASTROAM_IN_CONCURRENCY_INI_FEATURE_ENABLED( pMac ) \
+( \
+ (((pMac)->roam.configParam.bFastRoamInConIniFeatureEnabled)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \
+)
#endif
//Support for "Fast roaming" (i.e., CCX, LFR, or 802.11r.)
@@ -602,9 +607,10 @@
#endif
#ifdef FEATURE_WLAN_LFR
- tANI_U8 isFastRoamIniFeatureEnabled;
+ tANI_U8 isFastRoamIniFeatureEnabled;
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- tANI_U8 isRoamOffloadScanEnabled;
+ tANI_U8 isRoamOffloadScanEnabled;
+ tANI_BOOLEAN bFastRoamInConIniFeatureEnabled;
#endif
#endif
diff --git a/CORE/SME/inc/csrNeighborRoam.h b/CORE/SME/inc/csrNeighborRoam.h
index 9f0126f..e196de0 100644
--- a/CORE/SME/inc/csrNeighborRoam.h
+++ b/CORE/SME/inc/csrNeighborRoam.h
@@ -212,10 +212,12 @@
tANI_U8 uScanMode;
tANI_U8 uOsRequestedHandoff; /* upper layer requested
a reassoc */
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
tCsrHandoffRequest handoffReqInfo; /* handoff related info came
with upper layer's req for
reassoc */
#endif
+#endif
} tCsrNeighborRoamControlInfo, *tpCsrNeighborRoamControlInfo;
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 6766298..a590bdd 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -2389,6 +2389,21 @@
eHalStatus sme_UpdateIsFastRoamIniFeatureEnabled(tHalHandle hHal,
const v_BOOL_t isFastRoamIniFeatureEnabled);
+
+
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+/*--------------------------------------------------------------------------
+ \brief sme_UpdateEnableFastRoamInConcurrency() - enable/disable LFR if Concurrent session exists
+ This is a synchronuous call
+ \param hHal - The handle returned by macOpen.
+ \return eHAL_STATUS_SUCCESS
+ Other status means SME is failed
+ \sa
+ --------------------------------------------------------------------------*/
+
+eHalStatus sme_UpdateEnableFastRoamInConcurrency(tHalHandle hHal,
+ v_BOOL_t bFastRoamInConIniFeatureEnabled);
+#endif
#endif /* FEATURE_WLAN_LFR */
#ifdef FEATURE_WLAN_CCX
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 471e6f4..f1d0587 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1601,6 +1601,7 @@
#endif
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
pMac->roam.configParam.isRoamOffloadScanEnabled = pParam->isRoamOffloadScanEnabled;
+ pMac->roam.configParam.bFastRoamInConIniFeatureEnabled = pParam->bFastRoamInConIniFeatureEnabled;
#endif
#ifdef FEATURE_WLAN_LFR
pMac->roam.configParam.isFastRoamIniFeatureEnabled = pParam->isFastRoamIniFeatureEnabled;
@@ -1737,6 +1738,41 @@
pParam->enableTxBF = pMac->roam.configParam.txBFEnable;
pParam->txBFCsnValue = pMac->roam.configParam.txBFCsnValue;
#endif
+#ifdef WLAN_FEATURE_VOWIFI_11R
+ palCopyMemory( pMac->hHdd, &pMac->roam.configParam.csr11rConfig, &pParam->csr11rConfig, sizeof(tCsr11rConfigParams) );
+#endif
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+ pParam->isFastTransitionEnabled = pMac->roam.configParam.isFastTransitionEnabled;
+ pParam->RoamRssiDiff = pMac->roam.configParam.RoamRssiDiff;
+ pParam->nImmediateRoamRssiDiff = pMac->roam.configParam.nImmediateRoamRssiDiff;
+ pParam->nRoamPrefer5GHz = pMac->roam.configParam.nRoamPrefer5GHz;
+ pParam->nRoamIntraBand = pMac->roam.configParam.nRoamIntraBand;
+ pParam->isWESModeEnabled = pMac->roam.configParam.isWESModeEnabled;
+#endif
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ pParam->isRoamOffloadScanEnabled = pMac->roam.configParam.isRoamOffloadScanEnabled;
+ pParam->bFastRoamInConIniFeatureEnabled = pMac->roam.configParam.bFastRoamInConIniFeatureEnabled;
+#endif
+#ifdef FEATURE_WLAN_LFR
+ pParam->isFastRoamIniFeatureEnabled = pMac->roam.configParam.isFastRoamIniFeatureEnabled;
+#endif
+
+#ifdef FEATURE_WLAN_CCX
+ pParam->isCcxIniFeatureEnabled = pMac->roam.configParam.isCcxIniFeatureEnabled;
+#endif
+#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
+ palCopyMemory( pMac->hHdd, &pParam->neighborRoamConfig, &pMac->roam.configParam.neighborRoamConfig, sizeof(tCsrNeighborRoamConfigParams) );
+ {
+ int i;
+ smsLog( pMac, LOG1, FL("Num of Channels in CFG Channel List: %d"), pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.numChannels);
+ for( i=0; i< pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.numChannels; i++)
+ {
+ smsLog( pMac, LOG1, "%d ", pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.channelList[i] );
+ }
+ smsLog( pMac, LOG1, "");
+ }
+#endif
+
pParam->enableTxLdpc = pMac->roam.configParam.txLdpcEnable;
csrSetChannels(pMac, pParam);
@@ -4946,9 +4982,19 @@
}
}
- return (pMac->roam.configParam.isFastRoamIniFeatureEnabled &&
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ if (eANI_BOOLEAN_TRUE == CSR_IS_FASTROAM_IN_CONCURRENCY_INI_FEATURE_ENABLED(pMac))
+ {
+ return (pMac->roam.configParam.isFastRoamIniFeatureEnabled);
+ }
+ else
+#endif
+ {
+ return (pMac->roam.configParam.isFastRoamIniFeatureEnabled &&
(!csrIsConcurrentSessionRunning(pMac)));
+ }
}
+
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
//Returns whether "FW based BG scan" is currently enabled...or not
tANI_BOOLEAN csrRoamIsRoamOffloadScanEnabled(tpAniSirGlobal pMac)
@@ -14767,7 +14813,7 @@
tpCsrChannelInfo currChannelListInfo;
currChannelListInfo = &pNeighborRoamInfo->roamChannelInfo.currentChannelListInfo;
- if (0 == pMac->roam.configParam.isRoamOffloadScanEnabled)
+ if (0 == csrRoamIsRoamOffloadScanEnabled(pMac))
{
smsLog( pMac, LOGE,"isRoamOffloadScanEnabled not set \n");
return eHAL_STATUS_FAILURE;
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index b4840bd..9047fe9 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -334,8 +334,8 @@
}
else
{
- smsLog(pMac, LOGE, FL("Non-11R Reassoc indication received in unexpected state %d"), pNeighborRoamInfo->neighborRoamState);
- VOS_ASSERT(0);
+ smsLog(pMac, LOGE, FL("Non-11R Reassoc indication received in unexpected state %d"
+ " or Roaming is disabled"), pNeighborRoamInfo->neighborRoamState);
}
}
}
@@ -2088,6 +2088,15 @@
if (NULL != pContext)
{
sessionId = *((tANI_U32*)pContext);
+
+ if (!csrRoamIsStaMode(pMac, sessionId))
+ {
+ smsLog(pMac, LOGE, FL("%s: Ignoring scan request callback on non-infra session %d in state %d"),
+ __FUNCTION__, sessionId, pNeighborRoamInfo->neighborRoamState);
+ vos_mem_free(pContext);
+ return eHAL_STATUS_SUCCESS;
+ }
+
if (!csrRoamIsFastRoamEnabled(pMac,sessionId))
{
smsLog(pMac, LOGE, FL("Received when fast roam is disabled. Ignore it"));
@@ -2111,7 +2120,7 @@
currentChanIndex = (pMac->roam.neighborRoamInfo.roamChannelInfo.currentChanIndex) ? (pMac->roam.neighborRoamInfo.roamChannelInfo.currentChanIndex - 1) : 0;
/* Validate inputs */
- if (pMac->roam.neighborRoamInfo.roamChannelInfo.currentChannelListInfo.ChannelList) {
+ if (pMac->roam.neighborRoamInfo.roamChannelInfo.currentChannelListInfo.ChannelList) {
NEIGHBOR_ROAM_DEBUG(pMac, LOGW, FL("csrNeighborRoamScanRequestCallback received for Channel = %d, ChanIndex = %d"),
pMac->roam.neighborRoamInfo.roamChannelInfo.currentChannelListInfo.ChannelList[currentChanIndex], currentChanIndex);
}
@@ -2125,7 +2134,7 @@
if (eANI_BOOLEAN_FALSE == pNeighborRoamInfo->roamChannelInfo.chanListScanInProgress)
{
- /* Scan is completed in the CFG_CHAN_SCAN state. We can transition to REPORT_SCAN state
+ /* Scan is completed in the CFG_CHAN_SCAN state. We can transition to REPORT_SCAN state
just to get the results and perform PREAUTH */
/* Now we have completed scanning the channel list. We have get the result by applying appropriate filter
sort the results based on neighborScore and RSSI and select the best candidate out of the list */
@@ -2146,10 +2155,10 @@
{
/* Restart the timer for the next scan sequence as scanning is not over */
- hstatus = palTimerStart(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer,
- pNeighborRoamInfo->cfgParams.neighborScanPeriod * PAL_TIMER_TO_MS_UNIT,
+ hstatus = palTimerStart(pMac->hHdd, pNeighborRoamInfo->neighborScanTimer,
+ pNeighborRoamInfo->cfgParams.neighborScanPeriod * PAL_TIMER_TO_MS_UNIT,
eANI_BOOLEAN_FALSE);
-
+
if (eHAL_STATUS_SUCCESS != hstatus)
{
/* Timer start failed.. Should we ASSERT here??? */
@@ -2217,7 +2226,7 @@
#endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD
#ifdef FEATURE_WLAN_LFR
-static eHalStatus csrNeighborRoamContiguousScanRequestCallback(tHalHandle halHandle,
+static eHalStatus csrNeighborRoamContiguousScanRequestCallback(tHalHandle halHandle,
void *pContext, tANI_U32 scanId, eCsrScanStatus status)
{
tpAniSirGlobal pMac = (tpAniSirGlobal) halHandle;
@@ -2237,7 +2246,7 @@
}
pMac->roam.neighborRoamInfo.scanRspPending = eANI_BOOLEAN_FALSE;
-
+
/* This can happen when we receive a UP event from TL in any of the scan states. Silently ignore it */
if (eCSR_NEIGHBOR_ROAM_STATE_CONNECTED == pNeighborRoamInfo->neighborRoamState)
{
@@ -2257,12 +2266,12 @@
NEIGHBOR_ROAM_DEBUG(pMac, LOGW, "%s: process scan results", __func__);
hstatus = csrNeighborRoamProcessScanComplete(pMac);
-
+
if (eHAL_STATUS_SUCCESS != hstatus)
{
smsLog(pMac, LOGE, FL("Neighbor scan process complete failed with status %d"), hstatus);
}
-
+
if (NULL != pContext)
vos_mem_free(pContext);
@@ -2988,7 +2997,7 @@
pNeighborRoamInfo->neighborRoamState);
pNeighborRoamInfo->roamChannelInfo.IAPPNeighborListReceived = eANI_BOOLEAN_TRUE;
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- if (pMac->roam.configParam.isRoamOffloadScanEnabled)
+ if (csrRoamIsRoamOffloadScanEnabled(pMac))
{
csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG, REASON_CHANNEL_LIST_CHANGED);
}
@@ -3894,7 +3903,7 @@
case eCSR_NEIGHBOR_ROAM_STATE_INIT:
csrNeighborRoamResetInitStateControlInfo(pMac);
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- if(!pMac->roam.configParam.isRoamOffloadScanEnabled)
+ if (!csrRoamIsRoamOffloadScanEnabled(pMac))
{
#endif
csrNeighborRoamDeregAllRssiIndication(pMac);
@@ -3907,7 +3916,7 @@
CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT)
csrNeighborRoamResetConnectedStateControlInfo(pMac);
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- if(!pMac->roam.configParam.isRoamOffloadScanEnabled)
+ if (!csrRoamIsRoamOffloadScanEnabled(pMac))
{
#endif
csrNeighborRoamDeregAllRssiIndication(pMac);
@@ -3920,7 +3929,7 @@
CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_INIT);
csrNeighborRoamResetCfgListChanScanControlInfo(pMac);
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- if (!pMac->roam.configParam.isRoamOffloadScanEnabled)
+ if (!csrRoamIsRoamOffloadScanEnabled(pMac))
{
#endif
csrNeighborRoamDeregAllRssiIndication(pMac);
@@ -3938,7 +3947,7 @@
csrNeighborRoamResetPreauthControlInfo(pMac);
csrNeighborRoamResetReportScanStateControlInfo(pMac);
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- if (!pMac->roam.configParam.isRoamOffloadScanEnabled)
+ if (!csrRoamIsRoamOffloadScanEnabled(pMac))
{
#endif
csrNeighborRoamDeregAllRssiIndication(pMac);
@@ -3990,18 +3999,31 @@
smsLog(pMac, LOG2, FL("Connect indication received with session id %d in state %d"), sessionId, pNeighborRoamInfo->neighborRoamState);
- // Bail out if this is NOT a STA persona or if a concurrent session is running
- if ((pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona != VOS_STA_MODE)||
- csrIsConcurrentSessionRunning(pMac))
+ // Bail out if this is NOT a STA persona
+ if (pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona != VOS_STA_MODE)
{
smsLog(pMac, LOGE, FL("Ignoring Connect indication received from a non STA persona."
- "sessionId: %d, csrPersonna %d, is multisession %d"),
+ "sessionId: %d, csrPersonna %d"),
sessionId,
- (int)pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona,
- csrIsConcurrentSessionRunning(pMac));
+ (int)pMac->roam.roamSession[sessionId].pCurRoamProfile->csrPersona);
return eHAL_STATUS_SUCCESS;
}
+ // if a concurrent session is running
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ if (eANI_BOOLEAN_FALSE == CSR_IS_FASTROAM_IN_CONCURRENCY_INI_FEATURE_ENABLED(pMac))
+ {
+#endif
+ if (csrIsConcurrentSessionRunning(pMac))
+ {
+ smsLog(pMac, LOGE, FL("Ignoring Connect indication received in multisession %d"),
+ csrIsConcurrentSessionRunning(pMac));
+ return eHAL_STATUS_SUCCESS;
+ }
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ }
+#endif
+
switch (pNeighborRoamInfo->neighborRoamState)
{
case eCSR_NEIGHBOR_ROAM_STATE_REASSOCIATING:
@@ -4091,7 +4113,7 @@
pNeighborRoamInfo->FTRoamInfo.currentNeighborRptRetryNum = 0;
csrNeighborRoamPurgePreauthFailedList(pMac);
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
- if (pMac->roam.configParam.isRoamOffloadScanEnabled)
+ if (csrRoamIsRoamOffloadScanEnabled(pMac))
{
/*If this is not a INFRA type BSS, then do not send the command
* down to firmware.Do not send the START command for other session
@@ -4099,7 +4121,7 @@
if(csrRoamIsStaMode(pMac, sessionId))
{
pNeighborRoamInfo->uOsRequestedHandoff = 0;
- csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_CONNECT);
+ csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_CONNECT);
}
} else {
#endif
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 215d839..6cc86a2 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -7372,6 +7372,38 @@
return eHAL_STATUS_SUCCESS;
}
+
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+/*--------------------------------------------------------------------------
+ \brief sme_UpdateEnableFastRoamInConcurrency() - enable/disable LFR if Concurrent session exists
+ This is a synchronuous call
+ \param hHal - The handle returned by macOpen.
+ \return eHAL_STATUS_SUCCESS
+ Other status means SME is failed
+ \sa
+ --------------------------------------------------------------------------*/
+
+eHalStatus sme_UpdateEnableFastRoamInConcurrency(tHalHandle hHal,
+ v_BOOL_t bFastRoamInConIniFeatureEnabled)
+{
+
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) )
+ {
+ pMac->roam.configParam.bFastRoamInConIniFeatureEnabled = bFastRoamInConIniFeatureEnabled;
+ if (0 == pMac->roam.configParam.isRoamOffloadScanEnabled)
+ {
+ pMac->roam.configParam.bFastRoamInConIniFeatureEnabled = 0;
+ }
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+
+ return status;
+}
+#endif
#endif /* FEATURE_WLAN_LFR */
#ifdef FEATURE_WLAN_CCX
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index e50c542..556fb9c 100644
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -379,6 +379,8 @@
#Enable thermal mitigation
gThermalMitigationEnable=1
+gEnableFastRoamInConcurrency=1
+
#List of Country codes for which 11ac needs to be disabled
#Each country code must be delimited by comma(,)
gListOfNon11acCountryCode=RU,UA,ZA