qcacld-3.0: Refactor nss update API

Refactor the code to a new API, and
inform the TDLS module about the new
nss change.

Change-Id: Ic478bed0634ba1f862d844994a0836a23eda3f56
CRs-Fixed: 2347496
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index 66c25df..3bf0aef 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -4352,6 +4352,41 @@
 	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 @@
 	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 @@
 	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 a4bf3a1..552dad7 100644
--- a/core/hdd/src/wlan_hdd_ioctl.c
+++ b/core/hdd/src/wlan_hdd_ioctl.c
@@ -6763,11 +6763,10 @@
 		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) &&