Browse Source

qcacld-3.0: Move DP init code in CDS layer to DP component

Currently the CDS layer calls the cdp functions
directly to initialize common DP.

Move these calls to DP component, so that DP
component can handle other DP related initialization
inside the DP component itself.

Change-Id: Ib257ac4f41d468706078cd34a8cbec004a9a622e
CRs-Fixed: 3499726
Rakesh Pillai 1 year ago
parent
commit
b8f4110c6e

+ 46 - 0
components/dp/core/inc/wlan_dp_main.h

@@ -169,6 +169,52 @@ void dp_wait_complete_tasks(struct wlan_dp_psoc_context *dp_ctx);
 #define dp_enter() QDF_TRACE_ENTER(QDF_MODULE_ID_DP, "enter")
 #define dp_exit() QDF_TRACE_EXIT(QDF_MODULE_ID_DP, "exit")
 
+/**
+ * wlan_dp_txrx_soc_attach() - Datapath soc attach
+ * @params: SoC attach params
+ * @is_wifi3_0_target: [OUT] Pointer to update if the target is wifi3.0
+ *
+ * Return: SoC handle
+ */
+void *wlan_dp_txrx_soc_attach(struct dp_txrx_soc_attach_params *params,
+			      bool *is_wifi3_0_target);
+
+/**
+ * wlan_dp_txrx_soc_detach() - Datapath SoC detach
+ * @soc: DP SoC handle
+ *
+ * Return: None
+ */
+void wlan_dp_txrx_soc_detach(ol_txrx_soc_handle soc);
+
+/**
+ * wlan_dp_txrx_attach_target() - DP target attach
+ * @soc: DP SoC handle
+ * @pdev_id: DP pdev id
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_dp_txrx_attach_target(ol_txrx_soc_handle soc, uint8_t pdev_id);
+
+/**
+ * wlan_dp_txrx_pdev_attach() - DP pdev attach
+ * @soc: DP SoC handle
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_dp_txrx_pdev_attach(ol_txrx_soc_handle soc);
+
+/**
+ * wlan_dp_txrx_pdev_detach() - DP pdev detach
+ * @soc: DP SoC handle
+ * @pdev_id: DP pdev id
+ * @force: indicates if force detach is to be done or not
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS wlan_dp_txrx_pdev_detach(ol_txrx_soc_handle soc, uint8_t pdev_id,
+				    int force);
+
 /**
  * dp_peer_obj_create_notification(): dp peer create handler
  * @peer: peer which is going to created by objmgr

+ 120 - 0
components/dp/core/src/wlan_dp_main.c

@@ -36,6 +36,7 @@
 #include "init_deinit_lmac.h"
 #include <hif.h>
 #include <htc_api.h>
+#include <cdp_txrx_cmn_reg.h>
 #ifdef FEATURE_DIRECT_LINK
 #include "dp_internal.h"
 #include "cdp_txrx_ctrl.h"
@@ -1554,6 +1555,125 @@ bool dp_is_data_stall_event_enabled(uint32_t evt)
 	return false;
 }
 
+void *wlan_dp_txrx_soc_attach(struct dp_txrx_soc_attach_params *params,
+			      bool *is_wifi3_0_target)
+{
+	void *dp_soc = NULL;
+	struct hif_opaque_softc *hif_context;
+	HTC_HANDLE htc_ctx = cds_get_context(QDF_MODULE_ID_HTC);
+	qdf_device_t qdf_ctx = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
+
+	hif_context = cds_get_context(QDF_MODULE_ID_HIF);
+
+	if (TARGET_TYPE_QCA6290 == params->target_type ||
+	    TARGET_TYPE_QCA6390 == params->target_type ||
+	    TARGET_TYPE_QCA6490 == params->target_type ||
+	    TARGET_TYPE_QCA6750 == params->target_type) {
+		dp_soc = cdp_soc_attach(LITHIUM_DP, hif_context,
+					params->target_psoc, htc_ctx,
+					qdf_ctx, params->dp_ol_if_ops);
+
+		if (dp_soc)
+			if (!cdp_soc_init(dp_soc, LITHIUM_DP,
+					  hif_context, params->target_psoc,
+					  htc_ctx, qdf_ctx,
+					  params->dp_ol_if_ops))
+				goto err_soc_detach;
+		*is_wifi3_0_target = true;
+	} else if (params->target_type == TARGET_TYPE_KIWI ||
+		   params->target_type == TARGET_TYPE_MANGO ||
+		   params->target_type == TARGET_TYPE_PEACH) {
+		dp_soc = cdp_soc_attach(BERYLLIUM_DP, hif_context,
+					params->target_psoc,
+					htc_ctx, qdf_ctx,
+					params->dp_ol_if_ops);
+		if (dp_soc)
+			if (!cdp_soc_init(dp_soc, BERYLLIUM_DP, hif_context,
+					  params->target_psoc, htc_ctx,
+					  qdf_ctx, params->dp_ol_if_ops))
+				goto err_soc_detach;
+		*is_wifi3_0_target = true;
+	} else if (params->target_type == TARGET_TYPE_WCN6450) {
+		dp_soc =
+			cdp_soc_attach(RHINE_DP, hif_context,
+				       params->target_psoc, htc_ctx,
+				       qdf_ctx, params->dp_ol_if_ops);
+		if (dp_soc)
+			if (!cdp_soc_init(dp_soc, RHINE_DP, hif_context,
+					  params->target_psoc, htc_ctx,
+					  qdf_ctx, params->dp_ol_if_ops))
+				goto err_soc_detach;
+		*is_wifi3_0_target = true;
+	} else {
+		dp_soc = cdp_soc_attach(MOB_DRV_LEGACY_DP, hif_context,
+					params->target_psoc, htc_ctx, qdf_ctx,
+					params->dp_ol_if_ops);
+	}
+
+	return dp_soc;
+
+err_soc_detach:
+	cdp_soc_detach(dp_soc);
+	dp_soc = NULL;
+
+	return dp_soc;
+}
+
+void wlan_dp_txrx_soc_detach(ol_txrx_soc_handle soc)
+{
+	cdp_soc_deinit(soc);
+	cdp_soc_detach(soc);
+}
+
+QDF_STATUS wlan_dp_txrx_attach_target(ol_txrx_soc_handle soc, uint8_t pdev_id)
+{
+	QDF_STATUS qdf_status;
+	int errno;
+
+	qdf_status = cdp_soc_attach_target(soc);
+	if (QDF_IS_STATUS_ERROR(qdf_status)) {
+		dp_err("Failed to attach soc target; status:%d", qdf_status);
+		return qdf_status;
+	}
+
+	errno = cdp_pdev_attach_target(soc, pdev_id);
+	if (errno) {
+		dp_err("Failed to attach pdev target; errno:%d", errno);
+		qdf_status = QDF_STATUS_E_FAILURE;
+		goto err_soc_detach_target;
+	}
+
+	return qdf_status;
+
+err_soc_detach_target:
+	/* NOP */
+	return qdf_status;
+}
+
+QDF_STATUS wlan_dp_txrx_pdev_attach(ol_txrx_soc_handle soc)
+{
+	struct wlan_dp_psoc_context *dp_ctx;
+	struct cdp_pdev_attach_params pdev_params = { 0 };
+
+	dp_ctx =  dp_get_context();
+
+	pdev_params.htc_handle = cds_get_context(QDF_MODULE_ID_HTC);
+	pdev_params.qdf_osdev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
+	pdev_params.pdev_id = 0;
+
+	return cdp_pdev_attach(cds_get_context(QDF_MODULE_ID_SOC),
+			       &pdev_params);
+}
+
+QDF_STATUS wlan_dp_txrx_pdev_detach(ol_txrx_soc_handle soc, uint8_t pdev_id,
+				    int force)
+{
+	struct wlan_dp_psoc_context *dp_ctx;
+
+	dp_ctx =  dp_get_context();
+	return cdp_pdev_detach(soc, pdev_id, force);
+}
+
 #ifdef FEATURE_DIRECT_LINK
 /**
  * dp_lpass_h2t_tx_complete() - Copy completion handler for LPASS data

+ 12 - 0
components/dp/dispatcher/inc/wlan_dp_public_struct.h

@@ -293,6 +293,18 @@ struct dp_rsp_stats {
 	uint32_t icmpv4_rsp_recvd;
 };
 
+/**
+ * struct dp_txrx_soc_attach_params - SoC attach params
+ * @dp_ol_if_ops: DP ol_if ops
+ * @target_psoc: target psoc
+ * @target_type: Target type
+ */
+struct dp_txrx_soc_attach_params {
+	struct ol_if_ops *dp_ol_if_ops;
+	void *target_psoc;
+	uint32_t target_type;
+};
+
 struct dp_tx_rx_stats {
 	struct {
 		/* start_xmit stats */

+ 46 - 0
components/dp/dispatcher/inc/wlan_dp_ucfg_api.h

@@ -1435,6 +1435,52 @@ QDF_STATUS ucfg_dp_config_direct_link(struct wlan_objmgr_vdev *vdev,
 }
 #endif
 
+/**
+ * ucfg_dp_txrx_soc_attach() - Datapath soc attach
+ * @params: SoC attach params
+ * @is_wifi3_0_target: [OUT] Pointer to update if the target is wifi3.0
+ *
+ * Return: SoC handle
+ */
+void *ucfg_dp_txrx_soc_attach(struct dp_txrx_soc_attach_params *params,
+			      bool *is_wifi3_0_target);
+
+/**
+ * ucfg_dp_txrx_soc_detach() - Datapath SoC detach
+ * @soc: DP SoC handle
+ *
+ * Return: None
+ */
+void ucfg_dp_txrx_soc_detach(ol_txrx_soc_handle soc);
+
+/**
+ * ucfg_dp_txrx_attach_target() - DP target attach
+ * @soc: DP SoC handle
+ * @pdev_id: DP pdev id
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS ucfg_dp_txrx_attach_target(ol_txrx_soc_handle soc, uint8_t pdev_id);
+
+/**
+ * ucfg_dp_txrx_pdev_attach() - DP pdev attach
+ * @soc: DP SoC handle
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS ucfg_dp_txrx_pdev_attach(ol_txrx_soc_handle soc);
+
+/**
+ * ucfg_dp_txrx_pdev_detach() - DP pdev detach
+ * @soc: DP SoC handle
+ * @pdev_id: DP pdev id
+ * @force: indicates if force detach is to be done or not
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS ucfg_dp_txrx_pdev_detach(ol_txrx_soc_handle soc, uint8_t pdev_id,
+				    int force);
+
 /**
  * ucfg_dp_txrx_init() - initialize DP TXRX module
  * @soc: ol_txrx_soc_handle

+ 27 - 0
components/dp/dispatcher/src/wlan_dp_ucfg_api.c

@@ -2395,6 +2395,33 @@ QDF_STATUS ucfg_dp_config_direct_link(struct wlan_objmgr_vdev *vdev,
 }
 #endif
 
+void *ucfg_dp_txrx_soc_attach(struct dp_txrx_soc_attach_params *params,
+			      bool *is_wifi3_0_target)
+{
+	return wlan_dp_txrx_soc_attach(params, is_wifi3_0_target);
+}
+
+void ucfg_dp_txrx_soc_detach(ol_txrx_soc_handle soc)
+{
+	return wlan_dp_txrx_soc_detach(soc);
+}
+
+QDF_STATUS ucfg_dp_txrx_attach_target(ol_txrx_soc_handle soc, uint8_t pdev_id)
+{
+	return wlan_dp_txrx_attach_target(soc, pdev_id);
+}
+
+QDF_STATUS ucfg_dp_txrx_pdev_attach(ol_txrx_soc_handle soc)
+{
+	return wlan_dp_txrx_pdev_attach(soc);
+}
+
+QDF_STATUS ucfg_dp_txrx_pdev_detach(ol_txrx_soc_handle soc, uint8_t pdev_id,
+				    int force)
+{
+	return wlan_dp_txrx_pdev_detach(soc, pdev_id, force);
+}
+
 QDF_STATUS ucfg_dp_txrx_init(ol_txrx_soc_handle soc, uint8_t pdev_id,
 			     struct dp_txrx_config *config)
 {

+ 20 - 94
core/cds/src/cds_api.c

@@ -710,6 +710,7 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
 	struct cds_config_info *cds_cfg;
 	qdf_device_t qdf_ctx;
 	struct htc_init_info htcInfo = { 0 };
+	struct dp_txrx_soc_attach_params soc_attach_params = {0};
 	struct ol_context *ol_ctx;
 	struct hif_opaque_softc *scn;
 	void *HTCHandle;
@@ -850,73 +851,12 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
 	/* Set default value to false */
 	hdd_ctx->is_wifi3_0_target = false;
 
-	if (TARGET_TYPE_QCA6290 == hdd_ctx->target_type ||
-	    TARGET_TYPE_QCA6390 == hdd_ctx->target_type ||
-	    TARGET_TYPE_QCA6490 == hdd_ctx->target_type ||
-	    TARGET_TYPE_QCA6750 == hdd_ctx->target_type) {
-		gp_cds_context->dp_soc = cdp_soc_attach(LITHIUM_DP,
-			gp_cds_context->hif_context, htcInfo.target_psoc,
-			gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
-			&dp_ol_if_ops);
-
-		if (gp_cds_context->dp_soc)
-			if (!cdp_soc_init(gp_cds_context->dp_soc, LITHIUM_DP,
-					  gp_cds_context->hif_context,
-					  htcInfo.target_psoc,
-					  gp_cds_context->htc_ctx,
-					  gp_cds_context->qdf_ctx,
-					  &dp_ol_if_ops)) {
-				status = QDF_STATUS_E_FAILURE;
-				goto err_soc_detach;
-			}
-		hdd_ctx->is_wifi3_0_target = true;
-	} else if (hdd_ctx->target_type == TARGET_TYPE_KIWI ||
-		   hdd_ctx->target_type == TARGET_TYPE_MANGO ||
-		   hdd_ctx->target_type == TARGET_TYPE_PEACH) {
-		gp_cds_context->dp_soc =
-			cdp_soc_attach(BERYLLIUM_DP,
-				       gp_cds_context->hif_context,
-				       htcInfo.target_psoc,
-				       gp_cds_context->htc_ctx,
-				       gp_cds_context->qdf_ctx,
-				       &dp_ol_if_ops);
-		if (gp_cds_context->dp_soc)
-			if (!cdp_soc_init(gp_cds_context->dp_soc, BERYLLIUM_DP,
-					  gp_cds_context->hif_context,
-					  htcInfo.target_psoc,
-					  gp_cds_context->htc_ctx,
-					  gp_cds_context->qdf_ctx,
-					  &dp_ol_if_ops)) {
-				status = QDF_STATUS_E_FAILURE;
-				goto err_soc_detach;
-			}
-		hdd_ctx->is_wifi3_0_target = true;
-	} else if (hdd_ctx->target_type == TARGET_TYPE_WCN6450) {
-		gp_cds_context->dp_soc =
-			cdp_soc_attach(RHINE_DP,
-				       gp_cds_context->hif_context,
-				       htcInfo.target_psoc,
-				       gp_cds_context->htc_ctx,
-				       gp_cds_context->qdf_ctx,
-				       &dp_ol_if_ops);
-		if (gp_cds_context->dp_soc)
-			if (!cdp_soc_init(gp_cds_context->dp_soc, RHINE_DP,
-					  gp_cds_context->hif_context,
-					  htcInfo.target_psoc,
-					  gp_cds_context->htc_ctx,
-					  gp_cds_context->qdf_ctx,
-					  &dp_ol_if_ops)) {
-				status = QDF_STATUS_E_FAILURE;
-				goto err_soc_detach;
-			}
-		hdd_ctx->is_wifi3_0_target = true;
-	} else {
-		gp_cds_context->dp_soc = cdp_soc_attach(MOB_DRV_LEGACY_DP,
-			gp_cds_context->hif_context, htcInfo.target_psoc,
-			gp_cds_context->htc_ctx, gp_cds_context->qdf_ctx,
-			&dp_ol_if_ops);
-	}
-
+	soc_attach_params.target_type = hdd_ctx->target_type;
+	soc_attach_params.target_psoc = htcInfo.target_psoc;
+	soc_attach_params.dp_ol_if_ops = &dp_ol_if_ops;
+	gp_cds_context->dp_soc =
+		ucfg_dp_txrx_soc_attach(&soc_attach_params,
+					&hdd_ctx->is_wifi3_0_target);
 	if (!gp_cds_context->dp_soc) {
 		status = QDF_STATUS_E_FAILURE;
 		goto err_wma_close;
@@ -939,7 +879,7 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc)
 
 	if (QDF_STATUS_SUCCESS != status) {
 		cds_alert("Failed to open MAC");
-		goto err_soc_deinit;
+		goto err_soc_detach;
 	}
 	gp_cds_context->mac_context = mac_handle;
 
@@ -971,11 +911,8 @@ err_mac_close:
 	mac_close(mac_handle);
 	gp_cds_context->mac_context = NULL;
 
-err_soc_deinit:
-	cdp_soc_deinit(gp_cds_context->dp_soc);
-
 err_soc_detach:
-	cdp_soc_detach(gp_cds_context->dp_soc);
+	ucfg_dp_txrx_soc_detach(gp_cds_context->dp_soc);
 	gp_cds_context->dp_soc = NULL;
 
 	ucfg_ocb_update_dp_handle(psoc, NULL);
@@ -1013,8 +950,6 @@ QDF_STATUS cds_dp_open(struct wlan_objmgr_psoc *psoc)
 	QDF_STATUS qdf_status;
 	struct dp_txrx_config dp_config;
 	struct hdd_context *hdd_ctx;
-	struct cdp_pdev_attach_params pdev_params = { 0 };
-
 
 	hdd_ctx = gp_cds_context->hdd_context;
 	if (!hdd_ctx) {
@@ -1022,11 +957,8 @@ QDF_STATUS cds_dp_open(struct wlan_objmgr_psoc *psoc)
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	pdev_params.htc_handle = gp_cds_context->htc_ctx;
-	pdev_params.qdf_osdev = gp_cds_context->qdf_ctx;
-	pdev_params.pdev_id = 0;
-	qdf_status = cdp_pdev_attach(cds_get_context(QDF_MODULE_ID_SOC),
-				     &pdev_params);
+	qdf_status =
+		ucfg_dp_txrx_pdev_attach(cds_get_context(QDF_MODULE_ID_SOC));
 	if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
 		/* Critical Error ...  Cannot proceed further */
 		cds_alert("Failed to open TXRX");
@@ -1096,8 +1028,8 @@ pdev_deinit:
 			OL_TXRX_PDEV_ID, false);
 
 pdev_detach:
-	cdp_pdev_detach(gp_cds_context->dp_soc,
-			OL_TXRX_PDEV_ID, false);
+	ucfg_dp_txrx_pdev_detach(gp_cds_context->dp_soc, OL_TXRX_PDEV_ID,
+				 false);
 
 close:
 	return QDF_STATUS_E_FAILURE;
@@ -1267,7 +1199,6 @@ QDF_STATUS cds_enable(struct wlan_objmgr_psoc *psoc)
 {
 	QDF_STATUS qdf_status;
 	struct mac_start_params mac_params;
-	int errno;
 
 	/* We support only one instance for now ... */
 	if (!gp_cds_context) {
@@ -1309,19 +1240,14 @@ QDF_STATUS cds_enable(struct wlan_objmgr_psoc *psoc)
 		goto err_mac_stop;
 	}
 
-	qdf_status = cdp_soc_attach_target(cds_get_context(QDF_MODULE_ID_SOC));
+	qdf_status =
+		ucfg_dp_txrx_attach_target(cds_get_context(QDF_MODULE_ID_SOC),
+					   OL_TXRX_PDEV_ID);
 	if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
-		cds_err("Failed to attach soc target; status:%d", qdf_status);
+		cds_err("Failed to attach DP target; status:%d", qdf_status);
 		goto err_sme_stop;
 	}
 
-	errno = cdp_pdev_attach_target(cds_get_context(QDF_MODULE_ID_SOC),
-				       OL_TXRX_PDEV_ID);
-	if (errno) {
-		cds_err("Failed to attach pdev target; errno:%d", errno);
-		goto err_soc_target_detach;
-	}
-
 	qdf_status = dispatcher_psoc_enable(psoc);
 	if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
 		cds_err("dispatcher_psoc_enable failed; status:%d", qdf_status);
@@ -1503,8 +1429,7 @@ QDF_STATUS cds_close(struct wlan_objmgr_psoc *psoc)
 
 	gp_cds_context->mac_context = NULL;
 
-	cdp_soc_deinit(gp_cds_context->dp_soc);
-	cdp_soc_detach(gp_cds_context->dp_soc);
+	ucfg_dp_txrx_soc_detach(gp_cds_context->dp_soc);
 	gp_cds_context->dp_soc = NULL;
 
 	ucfg_pmo_psoc_update_dp_handle(psoc, NULL);
@@ -1541,7 +1466,8 @@ QDF_STATUS cds_dp_close(struct wlan_objmgr_psoc *psoc)
 
 	cdp_pdev_deinit(cds_get_context(QDF_MODULE_ID_SOC), OL_TXRX_PDEV_ID, 1);
 
-	cdp_pdev_detach(cds_get_context(QDF_MODULE_ID_SOC), OL_TXRX_PDEV_ID, 1);
+	ucfg_dp_txrx_pdev_detach(cds_get_context(QDF_MODULE_ID_SOC),
+				 OL_TXRX_PDEV_ID, 1);
 
 	ucfg_pmo_psoc_set_txrx_pdev_id(psoc, OL_TXRX_INVALID_PDEV_ID);