prima: Revert TDLS mode in scan request failure cases
Invoke wlan_hdd_tdls_scan_done_callback API in scan request failure
conditions to re-enable the tdls mode.
Change-Id: I182693e6fa552daf9d7b2ec43a6f2ebcb328a451
CRs-Fixed: 797524
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index a8c513b..a9e7e96 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -10067,10 +10067,7 @@
hdd_prevent_suspend_timeout(1000);
#ifdef FEATURE_WLAN_TDLS
- if (!(eTDLS_SUPPORT_NOT_ENABLED == pHddCtx->tdls_mode))
- {
- wlan_hdd_tdls_scan_done_callback(pAdapter);
- }
+ wlan_hdd_tdls_scan_done_callback(pAdapter);
#endif
EXIT();
@@ -10278,29 +10275,6 @@
hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Remain On Channel Pending", __func__);
return -EBUSY;
}
-#ifdef FEATURE_WLAN_TDLS
- /* if tdls disagree scan right now, return immediately.
- tdls will schedule the scan when scan is allowed. (return SUCCESS)
- or will reject the scan if any TDLS is in progress. (return -EBUSY)
- */
- status = wlan_hdd_tdls_scan_callback (pAdapter,
- wiphy,
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
- dev,
-#endif
- request);
- if(status <= 0)
- {
- if(!status)
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: TDLS in progress."
- "scan rejected %d", __func__, status);
- else
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s: TDLS teardown is ongoing %d",
- __func__, status);
-
- return status;
- }
-#endif
if (mutex_lock_interruptible(&pHddCtx->tmInfo.tmOperationLock))
{
@@ -10581,6 +10555,30 @@
INIT_COMPLETION(pScanInfo->scan_req_completion_event);
+#ifdef FEATURE_WLAN_TDLS
+ /* if tdls disagree scan right now, return immediately.
+ tdls will schedule the scan when scan is allowed. (return SUCCESS)
+ or will reject the scan if any TDLS is in progress. (return -EBUSY)
+ */
+ status = wlan_hdd_tdls_scan_callback (pAdapter,
+ wiphy,
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
+ dev,
+#endif
+ request);
+ if(status <= 0)
+ {
+ if(!status)
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s: TDLS in progress."
+ "scan rejected %d", __func__, status);
+ else
+ hddLog(VOS_TRACE_LEVEL_ERROR, "%s: TDLS teardown is ongoing %d",
+ __func__, status);
+
+ return status;
+ }
+#endif
+
/* acquire the wakelock to avoid the apps suspend during the scan. To
* address the following issues.
* 1) Disconnected scenario: we are not allowing the suspend as WLAN is not in
@@ -10627,6 +10625,10 @@
status = -EIO;
}
hdd_allow_suspend();
+
+#ifdef FEATURE_WLAN_TDLS
+ wlan_hdd_tdls_scan_done_callback(pAdapter);
+#endif
goto free_mem;
}
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index 3268793..bbae1cb 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -2735,8 +2735,10 @@
return;
}
- if (pHddCtx->is_tdls_btc_enabled == FALSE)
- return;
+ /* if tdls is not enabled or BtCoex is on then don't revert tdls mode */
+ if ((eTDLS_SUPPORT_NOT_ENABLED == pHddCtx->tdls_mode) ||
+ (pHddCtx->is_tdls_btc_enabled == FALSE))
+ return;
/* free allocated memory at scan time */
wlan_hdd_tdls_free_scan_request (&pHddCtx->tdls_scan_ctxt);