summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajesh Chauhan <rajeshc@qca.qualcomm.com>2014-03-31 14:05:57 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-04-01 09:28:47 -0700
commit882a2b1514bd449dd76aa91b19fbb36087148420 (patch)
tree201904905b91f8480abe5421278cffbff5d206e6
parentbf1a1f034beb693958c3768b7b1c30e916ff64c0 (diff)
qcacld: Ignore TDLS discovery trigger when attempt reaches max value
In case of implicit trigger, when discovery attempt for a peer reaches max configured threshold then ignore all the subsequent discovery triggers from FW for that particular peer. Also increased default value of discovery attempt threshold to 5. Change-Id: Icab14d4ab471f46d058428c6a70648496b46c2e5 CRs-Fixed: 641168
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c62
2 files changed, 62 insertions, 2 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 8dfbfd3976c7..5b1ec92df677 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1876,7 +1876,7 @@ typedef enum
#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT "gTDLSMaxDiscoveryAttempt"
#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MIN ( 1 )
#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_MAX ( 100 )
-#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT ( 3 )
+#define CFG_TDLS_MAX_DISCOVERY_ATTEMPT_DEFAULT ( 5 )
#define CFG_TDLS_IDLE_TIMEOUT "gTDLSIdleTimeout"
#define CFG_TDLS_IDLE_TIMEOUT_MIN ( 2000 )
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index c719258bb2a7..e94369696743 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -77,8 +77,31 @@ static u8 wlan_hdd_tdls_hash_key (u8 *mac)
void wlan_hdd_tdls_pre_setup_init_work(tdlsCtx_t * pHddTdlsCtx,
hddTdlsPeer_t *curr_candidate)
{
+ if (!pHddTdlsCtx || !curr_candidate)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: either pHddTdlsCtx or curr_candidate is null",
+ __func__);
+ return;
+ }
+
if (TDLS_CTX_MAGIC != pHddTdlsCtx->magic)
{
+#ifdef QCA_WIFI_2_0
+ /* When TDLS discovery attempt for a peer reaches to max configured
+ * threshold then tdls support for that peer would be disabled and
+ * in that case, ignore discovery trigger from FW for that peer.
+ */
+ if (eTDLS_CAP_NOT_SUPPORTED == curr_candidate->tdls_support)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, TDLS_LOG_LEVEL,
+ "%s: tdls_support is marked disabled for peer: "
+ MAC_ADDRESS_STR ", ignore pre_setup_init_work",
+ __func__, MAC_ADDR_ARRAY(curr_candidate->peerMac));
+ return;
+ }
+#endif /* QCA_WIFI_2_0 */
+
pHddTdlsCtx->curr_candidate = curr_candidate;
pHddTdlsCtx->magic = TDLS_CTX_MAGIC;
@@ -1026,6 +1049,17 @@ void wlan_hdd_tdls_set_peer_link_status(hddTdlsPeer_t *curr_peer, tTDLSLinkStatu
curr_peer->link_status = status;
+#ifdef QCA_WIFI_2_0
+ /* If TDLS link status is already passed the discovery state
+ * then clear discovery attempt count
+ */
+ if (status >= eTDLS_LINK_DISCOVERED)
+ {
+ curr_peer->discovery_attempt = 0;
+ }
+#endif /* QCA_WIFI_2_0 */
+
+ return;
}
void wlan_hdd_tdls_set_link_status(hdd_adapter_t *pAdapter,
@@ -1040,6 +1074,16 @@ void wlan_hdd_tdls_set_link_status(hdd_adapter_t *pAdapter,
curr_peer->link_status= linkStatus;
+#ifdef QCA_WIFI_2_0
+ /* If TDLS link status is already passed the discovery state
+ * then clear discovery attempt count
+ */
+ if (linkStatus >= eTDLS_LINK_DISCOVERED)
+ {
+ curr_peer->discovery_attempt = 0;
+ }
+#endif /* QCA_WIFI_2_0 */
+
return;
}
@@ -2047,7 +2091,19 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work)
curr_peer->link_status = eTDLS_LINK_DISCOVERING;
#ifdef QCA_WIFI_2_0
- curr_peer->link_status = eTDLS_LINK_DISCOVERING;
+ if (curr_peer->discovery_attempt >=
+ pHddTdlsCtx->threshold_config.discovery_tries_n)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s: discovery attempt (%d) reached max (%d) for peer "
+ MAC_ADDRESS_STR ", ignore discovery trigger from fw",
+ __func__, MAC_ADDR_ARRAY(curr_peer->peerMac),
+ curr_peer->discovery_attempt,
+ pHddTdlsCtx->threshold_config.discovery_tries_n);
+ curr_peer->tdls_support = eTDLS_CAP_NOT_SUPPORTED;
+ goto done;
+ }
+ curr_peer->link_status = eTDLS_LINK_DISCOVERING;
#endif
status = wlan_hdd_cfg80211_send_tdls_discover_req(pHddTdlsCtx->pAdapter->wdev.wiphy,
@@ -2065,6 +2121,10 @@ static void wlan_hdd_tdls_pre_setup(struct work_struct *work)
pHddTdlsCtx->discovery_sent_cnt++;
+#ifdef QCA_WIFI_2_0
+ curr_peer->discovery_attempt++;
+#endif /* QCA_WIFI_2_0 */
+
mutex_lock(&pHddCtx->tdls_lock);
wlan_hdd_tdls_check_power_save_prohibited(pHddTdlsCtx->pAdapter);