Browse Source

qcacld-3.0: Modify APIs to get per link Tx/Rx NSS config

To get the Tx/Rx NSS configuration per link in adapter, modify
the following function prototype to take link info as argument.
Existing callers moved to deflink pointer.

1) hdd_get_sta_rx_nss()
2) hdd_get_sap_rx_nss()
3) hdd_get_sap_tx_nss()
4) hdd_get_sta_tx_nss()

Change-Id: I735ab21d5c0d49a570721cc2993ab7e7c76a2089
CRs-Fixed: 3517793
Vinod Kumar Pirla 2 years ago
parent
commit
86bff6137d
1 changed files with 54 additions and 52 deletions
  1. 54 52
      core/hdd/src/wlan_hdd_cfg.c

+ 54 - 52
core/hdd/src/wlan_hdd_cfg.c

@@ -1426,20 +1426,18 @@ QDF_STATUS hdd_get_nss(struct hdd_adapter *adapter, uint8_t *nss)
 
 /**
  * hdd_get_sap_tx_nss() - get the sap tx nss
- * @adapter: Pointer to adapter
- * @hdd_ctx: Pointer to hdd context
- * @vdev: Pointer to vdev
+ * @link_info: Pointer of link_info
  * @tx_nss: pointer to tx_nss
  *
  * get the sap tx nss
  *
  * Return: None
  */
-static QDF_STATUS hdd_get_sap_tx_nss(struct hdd_adapter *adapter,
-				     struct hdd_context *hdd_ctx,
-				     struct wlan_objmgr_vdev *vdev,
-				     uint8_t *tx_nss)
+static QDF_STATUS
+hdd_get_sap_tx_nss(struct wlan_hdd_link_info *link_info, uint8_t *tx_nss)
 {
+	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
+	struct wlan_objmgr_vdev *vdev;
 	struct wlan_mlme_nss_chains *dynamic_cfg;
 	enum band_info operating_band;
 	mac_handle_t mac_handle;
@@ -1451,14 +1449,19 @@ static QDF_STATUS hdd_get_sap_tx_nss(struct hdd_adapter *adapter,
 		return QDF_STATUS_E_INVAL;
 	}
 
-	operating_band =
-		hdd_get_sap_operating_band_by_link_info(adapter->deflink);
+	operating_band = hdd_get_sap_operating_band_by_link_info(link_info);
 	if (operating_band == BAND_UNKNOWN)
 		return QDF_STATUS_E_INVAL;
+
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
 	sme_get_sap_vdev_type_nss(mac_handle, &vdev_nss, operating_band);
 	if (hdd_ctx->dynamic_nss_chains_support) {
 		dynamic_cfg = mlme_get_dynamic_vdev_config(vdev);
 		if (!dynamic_cfg) {
+			hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
 			hdd_debug("nss chain dynamic config NULL");
 			return QDF_STATUS_E_INVAL;
 		}
@@ -1477,37 +1480,41 @@ static QDF_STATUS hdd_get_sap_tx_nss(struct hdd_adapter *adapter,
 		*tx_nss = vdev_nss;
 	}
 
+	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
 	return  QDF_STATUS_SUCCESS;
 }
 
 /**
  * hdd_get_sta_tx_nss() - get the sta tx nss
- * @hdd_ctx: Pointer to hdd context
- * @adapter: Pointer to adapter
- * @vdev: Pointer to vdev
+ * @link_info: Pointer of link_info
  * @tx_nss: pointer to tx_nss
  *
  * get the STA tx nss
  *
  * Return: None
  */
-static QDF_STATUS hdd_get_sta_tx_nss(struct hdd_adapter *adapter,
-				     struct hdd_context *hdd_ctx,
-				     struct wlan_objmgr_vdev *vdev,
-				     uint8_t *tx_nss)
+static QDF_STATUS
+hdd_get_sta_tx_nss(struct wlan_hdd_link_info *link_info, uint8_t *tx_nss)
 {
+	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
+	struct wlan_objmgr_vdev *vdev;
 	struct wlan_mlme_nss_chains *dynamic_cfg;
 	enum band_info operating_band;
 	uint8_t proto_generic_nss;
 
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
 	proto_generic_nss = wlan_vdev_mlme_get_nss(vdev);
 	if (hdd_ctx->dynamic_nss_chains_support) {
 		dynamic_cfg = mlme_get_dynamic_vdev_config(vdev);
 		if (!dynamic_cfg) {
+			hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
 			hdd_debug("nss chain dynamic config NULL");
 			return QDF_STATUS_E_INVAL;
 		}
-		operating_band = hdd_conn_get_connected_band(adapter->deflink);
+		operating_band = hdd_conn_get_connected_band(link_info);
 		switch (operating_band) {
 		case BAND_2G:
 			*tx_nss = dynamic_cfg->tx_nss[NSS_CHAINS_BAND_2GHZ];
@@ -1524,45 +1531,37 @@ static QDF_STATUS hdd_get_sta_tx_nss(struct hdd_adapter *adapter,
 	} else
 		*tx_nss = proto_generic_nss;
 
+	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
 	return QDF_STATUS_SUCCESS;
 }
 
 QDF_STATUS hdd_get_tx_nss(struct hdd_adapter *adapter, uint8_t *tx_nss)
 {
-	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
-	struct wlan_objmgr_vdev *vdev;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink, WLAN_OSIF_ID);
-	if (!vdev)
-		return QDF_STATUS_E_INVAL;
-
 	if (adapter->device_mode == QDF_SAP_MODE ||
 	    adapter->device_mode == QDF_P2P_GO_MODE)
-		status = hdd_get_sap_tx_nss(adapter, hdd_ctx, vdev, tx_nss);
+		status = hdd_get_sap_tx_nss(adapter->deflink, tx_nss);
 	else
-		status = hdd_get_sta_tx_nss(adapter, hdd_ctx, vdev, tx_nss);
-	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
+		status = hdd_get_sta_tx_nss(adapter->deflink, tx_nss);
 
 	return status;
 }
 
 /**
  * hdd_get_sap_rx_nss() - get the sap rx nss
- * @adapter: Pointer to adapter
- * @hdd_ctx: Pointer to hdd context
- * @vdev: Pointer to vdev
+ * @link_info: Pointer to link_info
  * @rx_nss: pointer to rx_nss
  *
  * get the sap tx nss
  *
  * Return: None
  */
-static QDF_STATUS hdd_get_sap_rx_nss(struct hdd_adapter *adapter,
-				     struct hdd_context *hdd_ctx,
-				     struct wlan_objmgr_vdev *vdev,
-				     uint8_t *rx_nss)
+static QDF_STATUS
+hdd_get_sap_rx_nss(struct wlan_hdd_link_info *link_info, uint8_t *rx_nss)
 {
+	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
+	struct wlan_objmgr_vdev *vdev;
 	struct wlan_mlme_nss_chains *dynamic_cfg;
 	enum band_info operating_band;
 	mac_handle_t mac_handle;
@@ -1574,14 +1573,19 @@ static QDF_STATUS hdd_get_sap_rx_nss(struct hdd_adapter *adapter,
 		return QDF_STATUS_E_INVAL;
 	}
 
-	operating_band =
-		hdd_get_sap_operating_band_by_link_info(adapter->deflink);
+	operating_band = hdd_get_sap_operating_band_by_link_info(link_info);
 	if (operating_band == BAND_UNKNOWN)
 		return QDF_STATUS_E_INVAL;
+
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
 	sme_get_sap_vdev_type_nss(mac_handle, &vdev_nss, operating_band);
 	if (hdd_ctx->dynamic_nss_chains_support) {
 		dynamic_cfg = mlme_get_dynamic_vdev_config(vdev);
 		if (!dynamic_cfg) {
+			hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
 			hdd_debug("nss chain dynamic config NULL");
 			return QDF_STATUS_E_INVAL;
 		}
@@ -1600,14 +1604,13 @@ static QDF_STATUS hdd_get_sap_rx_nss(struct hdd_adapter *adapter,
 		*rx_nss = vdev_nss;
 	}
 
+	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
 	return  QDF_STATUS_SUCCESS;
 }
 
 /**
  * hdd_get_sta_rx_nss() - get the sta rx nss
- * @hdd_ctx: Pointer to hdd context
- * @adapter: Pointer to adapter
- * @vdev: Pointer to vdev
+ * @link_info: Pointer to link_info in adapter
  * @rx_nss: pointer to rx_nss
  *
  * get the STA rx nss
@@ -1615,23 +1618,28 @@ static QDF_STATUS hdd_get_sap_rx_nss(struct hdd_adapter *adapter,
  * Return: QDF_STATUS_SUCCESS if the RX NSS is returned, otherwise a suitable
  *         QDF_STATUS_E_* error code
  */
-static QDF_STATUS hdd_get_sta_rx_nss(struct hdd_adapter *adapter,
-				     struct hdd_context *hdd_ctx,
-				     struct wlan_objmgr_vdev *vdev,
-				     uint8_t *rx_nss)
+static QDF_STATUS
+hdd_get_sta_rx_nss(struct wlan_hdd_link_info *link_info, uint8_t *rx_nss)
 {
+	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(link_info->adapter);
+	struct wlan_objmgr_vdev *vdev;
 	struct wlan_mlme_nss_chains *dynamic_cfg;
 	enum band_info operating_band;
 	uint8_t proto_generic_nss;
 
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
+	if (!vdev)
+		return QDF_STATUS_E_INVAL;
+
 	proto_generic_nss = wlan_vdev_mlme_get_nss(vdev);
 	if (hdd_ctx->dynamic_nss_chains_support) {
 		dynamic_cfg = mlme_get_dynamic_vdev_config(vdev);
 		if (!dynamic_cfg) {
+			hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
 			hdd_debug("nss chain dynamic config NULL");
 			return QDF_STATUS_E_INVAL;
 		}
-		operating_band = hdd_conn_get_connected_band(adapter->deflink);
+		operating_band = hdd_conn_get_connected_band(link_info);
 		switch (operating_band) {
 		case BAND_2G:
 			*rx_nss = dynamic_cfg->rx_nss[NSS_CHAINS_BAND_2GHZ];
@@ -1648,25 +1656,19 @@ static QDF_STATUS hdd_get_sta_rx_nss(struct hdd_adapter *adapter,
 	} else
 		*rx_nss = proto_generic_nss;
 
+	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
 	return QDF_STATUS_SUCCESS;
 }
 
 QDF_STATUS hdd_get_rx_nss(struct hdd_adapter *adapter, uint8_t *rx_nss)
 {
-	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
-	struct wlan_objmgr_vdev *vdev;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink, WLAN_OSIF_ID);
-	if (!vdev)
-		return QDF_STATUS_E_INVAL;
-
 	if (adapter->device_mode == QDF_SAP_MODE ||
 	    adapter->device_mode == QDF_P2P_GO_MODE)
-		status = hdd_get_sap_rx_nss(adapter, hdd_ctx, vdev, rx_nss);
+		status = hdd_get_sap_rx_nss(adapter->deflink, rx_nss);
 	else
-		status = hdd_get_sta_rx_nss(adapter, hdd_ctx, vdev, rx_nss);
-	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
+		status = hdd_get_sta_rx_nss(adapter->deflink, rx_nss);
 
 	return status;
 }