diff options
| author | Rajesh Chauhan <rajeshc@qca.qualcomm.com> | 2014-03-31 14:05:57 -0700 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-04-01 09:28:47 -0700 |
| commit | 882a2b1514bd449dd76aa91b19fbb36087148420 (patch) | |
| tree | 201904905b91f8480abe5421278cffbff5d206e6 | |
| parent | bf1a1f034beb693958c3768b7b1c30e916ff64c0 (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.h | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_tdls.c | 62 |
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); |
