wlan: Support for NProbes, Home away time and Reassoc
This change has support for NProbes, Scan home away
time and HDD/SME level change for reassoc command
Change-Id: I0c050b4e67ca806b405c68c04d6b99e951dc4c5f
CRs-Fixed: 481935
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index f23af70..26bf344 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1547,6 +1547,8 @@
pMac->roam.configParam.nRoamPrefer5GHz = pParam->nRoamPrefer5GHz;
pMac->roam.configParam.nRoamIntraBand = pParam->nRoamIntraBand;
pMac->roam.configParam.isWESModeEnabled = pParam->isWESModeEnabled;
+ pMac->roam.configParam.nProbes = pParam->nProbes;
+ pMac->roam.configParam.nRoamScanHomeAwayTime = pParam->nRoamScanHomeAwayTime;
#endif
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
pMac->roam.configParam.isRoamOffloadScanEnabled = pParam->isRoamOffloadScanEnabled;
@@ -14590,6 +14592,7 @@
tCsrRoamSession *pSession;
tANI_U8 i,num_channels = 0, ucDot11Mode;
tANI_U8 *ChannelList = NULL;
+ tANI_U8 MaxDwellPeriod;
tANI_U32 sessionId;
eHalStatus status = eHAL_STATUS_SUCCESS;
tpCsrChannelInfo currChannelListInfo;
@@ -14768,8 +14771,31 @@
}
pRequestBuf->ValidChannelCount = num_channels;
}
- pRequestBuf->MDID.mdiePresent = pMac->roam.roamSession[sessionId].connectedProfile.MDID.mdiePresent;
- pRequestBuf->MDID.mobilityDomain = pMac->roam.roamSession[sessionId].connectedProfile.MDID.mobilityDomain;
+ pRequestBuf->MDID.mdiePresent =
+ pMac->roam.roamSession[sessionId].connectedProfile.MDID.mdiePresent;
+ pRequestBuf->MDID.mobilityDomain =
+ pMac->roam.roamSession[sessionId].connectedProfile.MDID.mobilityDomain;
+ /*Ensure that the nProbes does not fall below its MIN Value which is 2*/
+ if(pMac->roam.configParam.nProbes < 2)
+ pRequestBuf->nProbes = 2;
+ else
+ pRequestBuf->nProbes = pMac->roam.configParam.nProbes;
+
+ /*Max Dwell Period is calculated here to ensure that,
+ * Home Away Time is atleast equal to (MaxDwellPeriod +
+ * (2*SRF)), where SRF is the RF Switching time.The RF
+ * switching time is considered twice to consider the
+ * time to go off channel and return to the home channel.*/
+ MaxDwellPeriod = pRequestBuf->NeighborScanChannelMaxTime/pRequestBuf->nProbes;
+ if(MaxDwellPeriod < 1)
+ MaxDwellPeriod = 1;
+ if(pMac->roam.configParam.nRoamScanHomeAwayTime <
+ (MaxDwellPeriod + (2 * SIR_ROAM_SCAN_CHANNEL_SWITCH_TIME)))
+ {
+ pRequestBuf->HomeAwayTime = MaxDwellPeriod + (2 * SIR_ROAM_SCAN_CHANNEL_SWITCH_TIME);
+ } else {
+ pRequestBuf->HomeAwayTime = pMac->roam.configParam.nRoamScanHomeAwayTime;
+ }
/*Prepare a probe request for 2.4GHz band and one for 5GHz band*/
ucDot11Mode = (tANI_U8) csrTranslateToWNICfgDot11Mode(pMac,
csrFindBestPhyMode( pMac, pMac->roam.configParam.phyMode ));
@@ -14778,12 +14804,12 @@
csrRoamScanOffloadPrepareProbeReqTemplate(pMac,SIR_ROAM_SCAN_5G_DEFAULT_CH, ucDot11Mode, pSession->selfMacAddr,
pRequestBuf->p5GProbeTemplate, &pRequestBuf->us5GProbeTemplateLen);
- msg.type = WDA_START_ROAM_CANDIDATE_LOOKUP_REQ;
+ msg.type = WDA_ROAM_SCAN_OFFLOAD_REQ;
msg.reserved = 0;
msg.bodyptr = pRequestBuf;
if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(VOS_MODULE_ID_WDA, &msg)))
{
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post WDA_START_ROAM_CANDIDATE_LOOKUP_REQ message to WDA", __func__);
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s: Not able to post WDA_ROAM_SCAN_OFFLOAD_REQ message to WDA", __func__);
vos_mem_free(pRequestBuf);
return eHAL_STATUS_FAILURE;
}
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 66c32b8..b0b0f1b 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -6993,6 +6993,76 @@
}
/* ---------------------------------------------------------------------------
+ \fn sme_UpdateRoamScanNProbes
+ \brief function to update roam scan N probes
+ This function is called through dynamic setConfig callback function
+ to update roam scan N probes
+ \param hHal - HAL handle for device
+ \param nProbes number of probe requests to be sent out
+ \- return Success or failure
+ -------------------------------------------------------------------------*/
+eHalStatus sme_UpdateRoamScanNProbes(tHalHandle hHal, const v_U8_t nProbes)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "%s: gRoamScanNProbes is changed from %d to %d", __func__,
+ pMac->roam.configParam.nProbes,
+ nProbes);
+ pMac->roam.configParam.nProbes = nProbes;
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ if (pMac->roam.configParam.isRoamOffloadScanEnabled)
+ {
+ csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG,
+ REASON_NPROBES_CHANGED);
+ }
+#endif
+ return status ;
+}
+
+/* ---------------------------------------------------------------------------
+ \fn sme_UpdateRoamScanHomeAwayTime
+ \brief function to update roam scan Home away time
+ This function is called through dynamic setConfig callback function
+ to update roam scan home away time
+ \param hHal - HAL handle for device
+ \param nRoamScanAwayTime Scan home away time
+ \- return Success or failure
+ -------------------------------------------------------------------------*/
+eHalStatus sme_UpdateRoamScanHomeAwayTime(tHalHandle hHal, const v_U16_t nRoamScanHomeAwayTime)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+
+ status = sme_AcquireGlobalLock( &pMac->sme );
+ if ( HAL_STATUS_SUCCESS( status ) )
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "%s: gRoamScanHomeAwayTime is changed from %d to %d", __func__,
+ pMac->roam.configParam.nRoamScanHomeAwayTime,
+ nRoamScanHomeAwayTime);
+ pMac->roam.configParam.nRoamScanHomeAwayTime = nRoamScanHomeAwayTime;
+ sme_ReleaseGlobalLock( &pMac->sme );
+ }
+
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ if (pMac->roam.configParam.isRoamOffloadScanEnabled)
+ {
+ csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_UPDATE_CFG,
+ REASON_HOME_AWAY_TIME_CHANGED);
+ }
+#endif
+ return status;
+}
+
+
+/* ---------------------------------------------------------------------------
\fn sme_getRoamIntraBand
\brief get Intra band roaming
\param hHal - HAL handle for device
@@ -7004,6 +7074,30 @@
return pMac->roam.configParam.nRoamIntraBand;
}
+/* ---------------------------------------------------------------------------
+ \fn sme_getRoamScanNProbes
+ \brief get N Probes
+ \param hHal - HAL handle for device
+ \- return Success or failure
+ -------------------------------------------------------------------------*/
+v_U8_t sme_getRoamScanNProbes(tHalHandle hHal)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ return pMac->roam.configParam.nProbes;
+}
+
+/* ---------------------------------------------------------------------------
+ \fn sme_getRoamScanHomeAwayTime
+ \brief get Roam scan home away time
+ \param hHal - HAL handle for device
+ \- return Success or failure
+ -------------------------------------------------------------------------*/
+v_U16_t sme_getRoamScanHomeAwayTime(tHalHandle hHal)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ return pMac->roam.configParam.nRoamScanHomeAwayTime;
+}
+
/* ---------------------------------------------------------------------------
\fn sme_UpdateImmediateRoamRssiDiff