wlan: Update weak zone RSSI threshold to firmware
Sometimes STA roams to new AP whose RSSI is poor but better
than current AP. For example if current AP RSSI is -85,
firmware may choose to roam to an AP whose RSSI is -83 and
connection may not go through.
To avoid this add an absolute RSSI param which will disallow
candidates whose RSSI is below this param.
Change-Id: I7309ae05e0f62f252f243b1402a0593a66d800a9
CRs-Fixed: 2052958
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index f3e566c..45b8d39 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1444,6 +1444,16 @@
#define CFG_NEIGHBOR_INITIAL_FORCED_ROAM_TO_5GH_ENABLE_MAX (1)
#define CFG_NEIGHBOR_INITIAL_FORCED_ROAM_TO_5GH_ENABLE_DEFAULT (0)
+/*
+ * gWeakZoneRssiThresholdForRoam is the minimum threshold value to get
+ * candidate list from firmware, firmware filters the received candidate with
+ * this param before sending candidate list to host.
+ */
+#define CFG_NEIGHBOR_WEAK_ZONE_RSSI_THRESHOLD_FOR_ROAM_NAME "gWeakZoneRssiThresholdForRoam"
+#define CFG_NEIGHBOR_WEAK_ZONE_RSSI_THRESHOLD_FOR_ROAM_MIN (40)
+#define CFG_NEIGHBOR_WEAK_ZONE_RSSI_THRESHOLD_FOR_ROAM_MAX (100)
+#define CFG_NEIGHBOR_WEAK_ZONE_RSSI_THRESHOLD_FOR_ROAM_DEFAULT (80)
+
#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
#define CFG_QOS_WMM_BURST_SIZE_DEFN_NAME "burstSizeDefinition"
@@ -3215,6 +3225,7 @@
v_U16_t nNeighborResultsRefreshPeriod;
v_U16_t nEmptyScanRefreshPeriod;
v_U8_t nNeighborInitialForcedRoamTo5GhEnable;
+ v_U8_t nWeakZoneRssiThresholdForRoam;
#endif
//Additional Handoff params
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 41e71e3..f5ebfc2 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -1955,6 +1955,14 @@
CFG_NEIGHBOR_INITIAL_FORCED_ROAM_TO_5GH_ENABLE_MIN,
CFG_NEIGHBOR_INITIAL_FORCED_ROAM_TO_5GH_ENABLE_MAX),
+ REG_VARIABLE(CFG_NEIGHBOR_WEAK_ZONE_RSSI_THRESHOLD_FOR_ROAM_NAME,
+ WLAN_PARAM_Integer,
+ hdd_config_t, nWeakZoneRssiThresholdForRoam,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_NEIGHBOR_WEAK_ZONE_RSSI_THRESHOLD_FOR_ROAM_DEFAULT,
+ CFG_NEIGHBOR_WEAK_ZONE_RSSI_THRESHOLD_FOR_ROAM_MIN,
+ CFG_NEIGHBOR_WEAK_ZONE_RSSI_THRESHOLD_FOR_ROAM_MAX),
+
#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
REG_VARIABLE( CFG_QOS_WMM_BURST_SIZE_DEFN_NAME , WLAN_PARAM_Integer,
@@ -4261,6 +4269,7 @@
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborScanResultsRefreshPeriod] Value = [%u] ",pHddCtx->cfg_ini->nNeighborResultsRefreshPeriod);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nEmptyScanRefreshPeriod] Value = [%u] ",pHddCtx->cfg_ini->nEmptyScanRefreshPeriod);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nNeighborInitialForcedRoamTo5GhEnable] Value = [%u] ",pHddCtx->cfg_ini->nNeighborInitialForcedRoamTo5GhEnable);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [nWeakZoneRssiThresholdForRoam] Value = [%u] ",pHddCtx->cfg_ini->nWeakZoneRssiThresholdForRoam);
#endif
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [burstSizeDefinition] Value = [0x%x] ",pHddCtx->cfg_ini->burstSizeDefinition);
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [tsInfoAckPolicy] Value = [0x%x] ",pHddCtx->cfg_ini->tsInfoAckPolicy);
@@ -6470,6 +6479,8 @@
smeConfig->csrConfig.neighborRoamConfig.nNeighborInitialForcedRoamTo5GhEnable
= pConfig->nNeighborInitialForcedRoamTo5GhEnable;
}
+ smeConfig->csrConfig.neighborRoamConfig.nWeakZoneRssiThresholdForRoam =
+ pConfig->nWeakZoneRssiThresholdForRoam;
hdd_string_to_u8_array( pConfig->neighborScanChanList,
smeConfig->csrConfig.neighborRoamConfig.neighborScanChanList.channelList,
&smeConfig->csrConfig.neighborRoamConfig.neighborScanChanList.numChannels,
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index df39309..b511fa7 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -4119,6 +4119,7 @@
tANI_U8 p5GProbeTemplate[SIR_ROAM_SCAN_MAX_PB_REQ_SIZE];
tANI_U8 nProbes;
tANI_U16 HomeAwayTime;
+ tANI_U8 WeakZoneRssiThresholdForRoam;
tSirRoamNetworkType ConnectedNetwork;
tSirMobilityDomainInfo MDID;
} tSirRoamOffloadScanReq, *tpSirRoamOffloadScanReq;
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index e5b8968..ff4be23 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1033,6 +1033,7 @@
tANI_U16 nNeighborResultsRefreshPeriod;
tANI_U16 nEmptyScanRefreshPeriod;
tANI_U8 nNeighborInitialForcedRoamTo5GhEnable;
+ tANI_U8 nWeakZoneRssiThresholdForRoam;
}tCsrNeighborRoamConfigParams;
#endif
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 3934fd9..3d1fff6 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -520,6 +520,7 @@
tANI_U16 nNeighborResultsRefreshPeriod;
tANI_U16 nEmptyScanRefreshPeriod;
tANI_U8 nNeighborInitialForcedRoamTo5GhEnable;
+ tANI_U8 nWeakZoneRssiThresholdForRoam;
}tCsrNeighborRoamConfig;
#endif
diff --git a/CORE/SME/inc/csrNeighborRoam.h b/CORE/SME/inc/csrNeighborRoam.h
index 8bd7102..93bfc07 100644
--- a/CORE/SME/inc/csrNeighborRoam.h
+++ b/CORE/SME/inc/csrNeighborRoam.h
@@ -81,6 +81,7 @@
tANI_U16 neighborResultsRefreshPeriod;
tANI_U16 emptyScanRefreshPeriod;
tANI_U8 neighborInitialForcedRoamTo5GhEnable;
+ tANI_U8 WeakZoneRssiThresholdForRoam;
} tCsrNeighborRoamCfgParams, *tpCsrNeighborRoamCfgParams;
#define CSR_NEIGHBOR_ROAM_INVALID_CHANNEL_INDEX 255
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 50a3924..de5dd2a 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1275,6 +1275,7 @@
pMac->roam.configParam.neighborRoamConfig.nNeighborResultsRefreshPeriod = 20000; //20 seconds
pMac->roam.configParam.neighborRoamConfig.nEmptyScanRefreshPeriod = 0;
pMac->roam.configParam.neighborRoamConfig.nNeighborInitialForcedRoamTo5GhEnable = 0;
+ pMac->roam.configParam.neighborRoamConfig.nWeakZoneRssiThresholdForRoam = 0;
#endif
#ifdef WLAN_FEATURE_11AC
pMac->roam.configParam.nVhtChannelWidth = WNI_CFG_VHT_CHANNEL_WIDTH_80MHZ + 1;
@@ -2000,6 +2001,7 @@
smsLog( pMac, LOG1, "nNeighborResultsRefreshPeriod = %d", pMac->roam.configParam.neighborRoamConfig.nNeighborResultsRefreshPeriod);
smsLog( pMac, LOG1, "nEmptyScanRefreshPeriod = %d", pMac->roam.configParam.neighborRoamConfig.nEmptyScanRefreshPeriod);
smsLog( pMac, LOG1, "nNeighborInitialForcedRoamTo5GhEnable = %d", pMac->roam.configParam.neighborRoamConfig.nNeighborInitialForcedRoamTo5GhEnable);
+ smsLog( pMac, LOG1, "nWeakZoneRssiThresholdForRoam = %d", pMac->roam.configParam.neighborRoamConfig.nWeakZoneRssiThresholdForRoam);
{
int i;
smsLog( pMac, LOG1, FL("Num of Channels in CFG Channel List: %d"), pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.numChannels);
@@ -18078,6 +18080,8 @@
}
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,"HomeAwayTime:%d",pRequestBuf->HomeAwayTime);
+ pRequestBuf->WeakZoneRssiThresholdForRoam =
+ pMac->roam.configParam.neighborRoamConfig.nWeakZoneRssiThresholdForRoam;
/*Prepare a probe request for 2.4GHz band and one for 5GHz band*/
ucDot11Mode = (tANI_U8) csrTranslateToWNICfgDot11Mode(pMac,
csrFindBestPhyMode( pMac, pMac->roam.configParam.phyMode ));
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index 72aec69..1467f59 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -4876,6 +4876,8 @@
pNeighborRoamInfo->cfgParams.neighborResultsRefreshPeriod = pMac->roam.configParam.neighborRoamConfig.nNeighborResultsRefreshPeriod;
pNeighborRoamInfo->cfgParams.emptyScanRefreshPeriod = pMac->roam.configParam.neighborRoamConfig.nEmptyScanRefreshPeriod;
pNeighborRoamInfo->cfgParams.neighborInitialForcedRoamTo5GhEnable = pMac->roam.configParam.neighborRoamConfig.nNeighborInitialForcedRoamTo5GhEnable;
+ pNeighborRoamInfo->cfgParams.WeakZoneRssiThresholdForRoam =
+ pMac->roam.configParam.neighborRoamConfig.nWeakZoneRssiThresholdForRoam;
pNeighborRoamInfo->cfgParams.channelInfo.numOfChannels =
pMac->roam.configParam.neighborRoamConfig.neighborScanChanList.numChannels;
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index c141d63..9bd87a4 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -19943,6 +19943,8 @@
pRoamOffloadScanReqParams->nProbes;
pwdiRoamOffloadScanInfo->HomeAwayTime =
pRoamOffloadScanReqParams->HomeAwayTime;
+ pwdiRoamOffloadScanInfo->WeakZoneRssiThresholdForRoam =
+ pRoamOffloadScanReqParams->WeakZoneRssiThresholdForRoam;
pwdiRoamScanOffloadReqParams->wdiReqStatusCB = NULL;
/* Store Params pass it to WDI */
pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamScanOffloadReqParams;
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index c591795..6621b22 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -5574,6 +5574,7 @@
WDI_MobilityDomainInfo MDID;
wpt_uint8 nProbes;
wpt_uint16 HomeAwayTime;
+ wpt_uint8 WeakZoneRssiThresholdForRoam;
} WDI_RoamOffloadScanInfo;
typedef struct
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index c6d6e3c..1030ac2 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -27533,6 +27533,8 @@
pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ValidChannelList,
pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ValidChannelCount);
pRoamCandidateListParams->ValidChannelCount = pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.ValidChannelCount;
+ pRoamCandidateListParams->WeakZoneRssiThresholdForRoam =
+ pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.WeakZoneRssiThresholdForRoam;
WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO_HIGH,
"Values are ssid = %s, RoamOffloadScan=%d,Command=%d,"
@@ -27540,7 +27542,7 @@
"NeighborRoamScanRefreshPeriod=%d,NeighborScanChannelMinTime=%d,"
"NeighborScanChannelMaxTime = %d,EmptyRefreshScanPeriod=%d,"
"mdiePresent=%d,MDID=%d, auth=%d, uce=%d, mce=%d, nProbes=%d,"
- "HomeAwayTime=%d",
+ "HomeAwayTime=%d RssiThesholdForRoam=%d",
pRoamCandidateListParams->ConnectedNetwork.ssId.ssId,
pRoamCandidateListParams->RoamScanOffloadEnabled,
pRoamCandidateListParams->Command,
@@ -27556,7 +27558,8 @@
pRoamCandidateListParams->ConnectedNetwork.encryption,
pRoamCandidateListParams->ConnectedNetwork.mcencryption,
pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.nProbes,
- pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.HomeAwayTime);
+ pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.HomeAwayTime,
+ pRoamCandidateListParams->WeakZoneRssiThresholdForRoam);
pRoamCandidateListParams->us24GProbeSize =
(pwdiRoamScanOffloadReqParams->wdiRoamOffloadScanInfo.us24GProbeSize<
WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE)?