summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 6de81de93677..cf0bf6434197 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -11553,6 +11553,7 @@ static int __wlan_hdd_cfg80211_fast_roaming(struct wiphy *wiphy,
uint32_t is_fast_roam_enabled;
eHalStatus status;
int ret;
+ hdd_station_ctx_t *hddstactx;
ENTER();
@@ -11582,6 +11583,26 @@ static int __wlan_hdd_cfg80211_fast_roaming(struct wiphy *wiphy,
tb[QCA_WLAN_VENDOR_ATTR_ROAMING_POLICY]);
hddLog(LOG1, FL("isFastRoamEnabled %d"), is_fast_roam_enabled);
+ /*
+ * If framework sends pause_roam, host to send WAIT indication to
+ * framework if roaming is in progress. This can help framework to
+ * defer out-network roaming. EBUSY is used to convey wait indication.
+ */
+ if (!is_fast_roam_enabled) {
+ if (sme_staInMiddleOfRoaming(hdd_ctx->hHal,
+ adapter->sessionId)) {
+ hddLog(LOG1, FL("Roaming in progress, do not allow disable"));
+ return -EBUSY;
+ }
+
+ hddstactx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
+ if (hddstactx->hdd_ReassocScenario) {
+ hddLog(LOG1,
+ FL("Roaming in progress, so unable to disable roaming"));
+ return -EBUSY;
+ }
+ }
+
/* Update roaming */
status = sme_config_fast_roaming(hdd_ctx->hHal, adapter->sessionId,
is_fast_roam_enabled);
@@ -11590,6 +11611,7 @@ static int __wlan_hdd_cfg80211_fast_roaming(struct wiphy *wiphy,
FL("sme_config_fast_roaming (err=%d)"), status);
return -EINVAL;
}
+
EXIT();
return 0;
}
@@ -18752,7 +18774,6 @@ int wlan_hdd_cfg80211_connect_start( hdd_adapter_t *pAdapter,
vos_mem_copy((void *)(pRoamProfile->SSIDs.SSIDList->SSID.ssId),
ssid, ssid_len);
- pRoamProfile->do_not_roam = false;
if (bssid)
{
pRoamProfile->BSSIDs.numOfBSSIDs = 1;