diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 66c25dff0e3a..3bf0aef7271c 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -4352,6 +4352,41 @@ hdd_populate_vdev_nss(struct wlan_mlme_nss_chains *user_cfg, user_cfg->tx_nss[band] = tx_nss; } +static QDF_STATUS +hdd_set_nss_params(struct hdd_adapter *adapter, + uint8_t tx_nss, + uint8_t rx_nss) +{ + enum nss_chains_band_info band; + struct wlan_mlme_nss_chains user_cfg; + mac_handle_t mac_handle; + struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); + + qdf_mem_zero(&user_cfg, sizeof(user_cfg)); + + mac_handle = hdd_ctx->mac_handle; + if (!mac_handle) { + hdd_err("NULL MAC handle"); + return QDF_STATUS_E_INVAL; + } + + for (band = BAND_2GHZ; band < NUM_OF_BANDS; band++) + hdd_populate_vdev_nss(&user_cfg, tx_nss, + rx_nss, band); + if (QDF_IS_STATUS_ERROR( + sme_nss_chains_update(mac_handle, + &user_cfg, + adapter->session_id))) + return QDF_STATUS_E_FAILURE; + + /* Check TDLS status and update antenna mode */ + if ((adapter->device_mode == QDF_STA_MODE || + adapter->device_mode == QDF_P2P_CLIENT_MODE) && + policy_mgr_is_sta_active_connection_exists(hdd_ctx->psoc)) + wlan_hdd_tdls_antenna_switch(hdd_ctx, adapter, rx_nss); + + return QDF_STATUS_SUCCESS; +} /** * hdd_update_nss() - Update the number of spatial streams supported. * Ensure that nss is either 1 or 2 before calling this. @@ -4378,8 +4413,6 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss) uint8_t enable2x2; mac_handle_t mac_handle; bool bval = 0; - enum nss_chains_band_info band; - struct wlan_mlme_nss_chains user_cfg; uint8_t tx_nss, rx_nss; if ((nss == 2) && (hdd_ctx->num_rf_chains != 2)) { @@ -4402,20 +4435,8 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss) tx_nss = nss; rx_nss = nss; - qdf_mem_zero(&user_cfg, sizeof(user_cfg)); - - if (hdd_ctx->dynamic_nss_chains_support) { - for (band = BAND_2GHZ; band < BAND_MAX; band++) - hdd_populate_vdev_nss(&user_cfg, tx_nss, - rx_nss, band); - if (QDF_IS_STATUS_ERROR( - sme_nss_chains_update(mac_handle, - &user_cfg, - adapter->session_id))) - return QDF_STATUS_E_FAILURE; - - return QDF_STATUS_SUCCESS; - } + if (hdd_ctx->dynamic_nss_chains_support) + return hdd_set_nss_params(adapter, tx_nss, rx_nss); /* * The code below is executed only when fw doesn't support dynamic diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index a4bf3a180825..552dad723865 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -6763,11 +6763,10 @@ int hdd_set_antenna_mode(struct hdd_adapter *adapter, goto exit; } - if (hdd_ctx->dynamic_nss_chains_support) { + if (hdd_ctx->dynamic_nss_chains_support) return hdd_set_dynamic_antenna_mode(adapter, params.num_rx_chains, params.num_tx_chains); - } /* Check TDLS status and update antenna mode */ if ((QDF_STA_MODE == adapter->device_mode) &&