diff options
| -rw-r--r-- | core/hdd/inc/wlan_hdd_tdls.h | 6 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_cfg80211.c | 3 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_tdls.c | 18 | ||||
| -rw-r--r-- | core/mac/inc/sir_api.h | 1 | ||||
| -rw-r--r-- | core/mac/src/pe/lim/lim_process_tdls.c | 24 | ||||
| -rw-r--r-- | core/sme/inc/sme_api.h | 3 | ||||
| -rw-r--r-- | core/sme/src/common/sme_api.c | 5 |
7 files changed, 36 insertions, 24 deletions
diff --git a/core/hdd/inc/wlan_hdd_tdls.h b/core/hdd/inc/wlan_hdd_tdls.h index 3a3dbdb56578..61d08798aa6c 100644 --- a/core/hdd/inc/wlan_hdd_tdls.h +++ b/core/hdd/inc/wlan_hdd_tdls.h @@ -715,7 +715,8 @@ bool wlan_hdd_tdls_check_enable_tdls_scan(hdd_context_t *hdd_ctx); bool wlan_hdd_tdls_check_peer_buf_capable(hdd_context_t *hdd_ctx, uint16_t connectedTdlsPeers); void hdd_update_tdls_ct_and_teardown_links(hdd_context_t *hdd_ctx); -void wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx); +void wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx, + bool disable_tdls_state); hddTdlsPeer_t *wlan_hdd_tdls_find_first_connected_peer(hdd_adapter_t *adapter); int hdd_set_tdls_offchannel(hdd_context_t *hdd_ctx, int offchannel); @@ -851,7 +852,8 @@ static inline void hdd_update_tdls_ct_and_teardown_links(hdd_context_t *hdd_ctx) { } static inline void -wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx) +wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx, + bool disable_tdls_state); { } static inline void wlan_hdd_tdls_exit(hdd_adapter_t *adapter) diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 79949e89b0c7..a3d6c129ab2e 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -16765,7 +16765,8 @@ static int __wlan_hdd_cfg80211_disconnect(struct wiphy *wiphy, /* First clean up the tdls peers * Send Msg to PE for deleting all the TDLS peers */ - sme_delete_all_tdls_peers(pHddCtx->hHal, pAdapter->sessionId); + sme_delete_all_tdls_peers(pHddCtx->hHal, pAdapter->sessionId, + true); #endif hdd_info("Disconnect request from user space with reason: %d (%s) internal reason code: %d", reason, hdd_ieee80211_reason_code_to_str(reason), reasonCode); diff --git a/core/hdd/src/wlan_hdd_tdls.c b/core/hdd/src/wlan_hdd_tdls.c index 1108e989539c..c1a1206112df 100644 --- a/core/hdd/src/wlan_hdd_tdls.c +++ b/core/hdd/src/wlan_hdd_tdls.c @@ -212,10 +212,11 @@ static u8 wlan_hdd_tdls_hash_key(const u8 *mac) * wlan_hdd_tdls_disable_offchan_and_teardown_links - Disable offchannel * and teardown TDLS links * @hddCtx : pointer to hdd context - * + * @disable_tdls_state: disable FW tdls state * Return: None */ -void wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx) +void wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx, + bool disable_tdls_state) { u16 connected_tdls_peers = 0; u8 staidx; @@ -259,7 +260,8 @@ void wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_context_t *hddctx) hdd_set_tdls_offchannelmode(adapter, DISABLE_CHANSWITCH); /* Send Msg to PE for deleting all the TDLS peers */ - sme_delete_all_tdls_peers(hddctx->hHal, adapter->sessionId); + sme_delete_all_tdls_peers(hddctx->hHal, adapter->sessionId, + disable_tdls_state); for (staidx = 0; staidx < hddctx->max_num_tdls_sta; staidx++) { @@ -315,7 +317,7 @@ void hdd_update_tdls_ct_and_teardown_links(hdd_context_t *hdd_ctx) { /* set tdls connection tracker state */ cds_set_tdls_ct_mode(hdd_ctx); - wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_ctx); + wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_ctx, true); } /** @@ -1995,7 +1997,7 @@ void wlan_hdd_update_tdls_info(hdd_adapter_t *adapter, bool tdls_prohibited, !tdls_prohibited) { hdd_warn("Concurrency not allowed in TDLS! set state cnt %d", hdd_ctx->set_state_info.set_state_cnt); - wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_ctx); + wlan_hdd_tdls_disable_offchan_and_teardown_links(hdd_ctx, true); tdls_prohibited = true; hdd_ctx->tdls_mode = eTDLS_SUPPORT_NOT_ENABLED; tdls_param->vdev_id = hdd_ctx->set_state_info.vdev_id; @@ -2179,7 +2181,7 @@ void wlan_hdd_check_conc_and_update_tdls_state(hdd_context_t *hdd_ctx, return; } wlan_hdd_tdls_disable_offchan_and_teardown_links( - hdd_ctx); + hdd_ctx, true); return; } wlan_hdd_update_tdls_info(temp_adapter, false, false); @@ -2936,7 +2938,7 @@ int wlan_hdd_tdls_scan_callback(hdd_adapter_t *pAdapter, struct wiphy *wiphy, if (connectedTdlsPeers) { hdd_debug("teardown all the active tdls links"); wlan_hdd_tdls_disable_offchan_and_teardown_links( - pHddCtx); + pHddCtx, false); } } @@ -6342,7 +6344,7 @@ void hdd_tdls_notify_p2p_roc(hdd_context_t *hdd_ctx, if (!buf_sta) { hdd_debug("teardown tdls links"); wlan_hdd_tdls_disable_offchan_and_teardown_links( - hdd_ctx); + hdd_ctx, false); } } diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index dc8fede6786a..bd5ec5adae89 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -7999,6 +7999,7 @@ struct sir_del_all_tdls_peers { uint16_t msg_type; uint16_t msg_len; struct qdf_mac_addr bssid; + bool disable_tdls_state; }; /** diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index 1e5a93e73502..fc4ff89954a4 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -3344,18 +3344,20 @@ tSirRetStatus lim_process_sme_del_all_tdls_peers(tpAniSirGlobal mac_ctx, lim_check_aid_and_delete_peer(mac_ctx, session_entry); - if (mac_ctx->lim.sme_msg_callback) { - tdls_state_disable = qdf_mem_malloc( - sizeof(*tdls_state_disable)); - if (NULL == tdls_state_disable) { - pe_err("memory allocation failed"); - return eSIR_FAILURE; + if (msg->disable_tdls_state) { + if (mac_ctx->lim.sme_msg_callback) { + tdls_state_disable = qdf_mem_malloc( + sizeof(*tdls_state_disable)); + if (NULL == tdls_state_disable) { + pe_err("memory allocation failed"); + return eSIR_FAILURE; + } + tdls_state_disable->session_id = session_entry->smeSessionId; + cds_msg.type = eWNI_SME_TDLS_NOTIFY_SET_STATE_DISABLE; + cds_msg.bodyptr = tdls_state_disable; + cds_msg.bodyval = 0; + mac_ctx->lim.sme_msg_callback(mac_ctx, &cds_msg); } - tdls_state_disable->session_id = session_entry->smeSessionId; - cds_msg.type = eWNI_SME_TDLS_NOTIFY_SET_STATE_DISABLE; - cds_msg.bodyptr = tdls_state_disable; - cds_msg.bodyval = 0; - mac_ctx->lim.sme_msg_callback(mac_ctx, &cds_msg); } return eSIR_SUCCESS; diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 142eac9fecd1..c0a699c3a87f 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -1599,7 +1599,8 @@ QDF_STATUS sme_congestion_register_callback(tHalHandle hal, tCsrScanResultInfo *sme_scan_get_result_for_bssid(tHalHandle hal_handle, struct qdf_mac_addr *bssid); -QDF_STATUS sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id); +QDF_STATUS sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id, + bool disable_tdls_state); /** * sme_set_random_mac() - Set random mac address filter diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index a06ee3544782..24c5d5928278 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -18061,7 +18061,8 @@ send_flush_cmd: * * Return: QDF_STATUS */ -QDF_STATUS sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id) +QDF_STATUS sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id, + bool disable_tdls_state) { struct sir_del_all_tdls_peers *msg; QDF_STATUS status = QDF_STATUS_SUCCESS; @@ -18082,6 +18083,8 @@ QDF_STATUS sme_delete_all_tdls_peers(tHalHandle hal, uint8_t session_id) qdf_mem_copy(msg->bssid.bytes, session->connectedProfile.bssid.bytes, sizeof(struct qdf_mac_addr)); + msg->disable_tdls_state = disable_tdls_state; + status = cds_send_mb_message_to_mac(msg); if (status != QDF_STATUS_SUCCESS) { |
