All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
To: dev@dpdk.org
Cc: Mike Baucom <michael.baucom@broadcom.com>,
	Kishore Padmanabha <kishore.padmanabha@broadcom.com>
Subject: [dpdk-dev] [PATCH v2 05/12] net/bnxt: consolidate template table processing
Date: Fri,  9 Oct 2020 21:05:14 -0700	[thread overview]
Message-ID: <20201010040520.63049-6-ajit.khaparde@broadcom.com> (raw)
In-Reply-To: <20201009111130.10422-1-somnath.kotur@broadcom.com>

From: Mike Baucom <michael.baucom@broadcom.com>

The table processing has been consolidated to be able to reuse the same
code for action and classification template processing.

Signed-off-by: Mike Baucom <michael.baucom@broadcom.com>
Reviewed-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c       |   1 +
 drivers/net/bnxt/tf_ulp/ulp_def_rules.c       |   1 +
 drivers/net/bnxt/tf_ulp/ulp_mapper.c          | 298 +++++-------------
 drivers/net/bnxt/tf_ulp/ulp_mapper.h          |   4 +-
 .../net/bnxt/tf_ulp/ulp_template_db_enum.h    |   6 +
 .../tf_ulp/ulp_template_db_stingray_class.c   |   2 +-
 drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c |  56 +++-
 drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h |   4 +-
 .../tf_ulp/ulp_template_db_wh_plus_class.c    |   2 +-
 drivers/net/bnxt/tf_ulp/ulp_template_struct.h |  11 +-
 10 files changed, 144 insertions(+), 241 deletions(-)

diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
index 566e1254a..eea39f6b7 100644
--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
@@ -147,6 +147,7 @@ bnxt_ulp_flow_create(struct rte_eth_dev *dev,
 	mapper_cparms.act_prop = &params.act_prop;
 	mapper_cparms.class_tid = class_id;
 	mapper_cparms.act_tid = act_tmpl;
+	mapper_cparms.flow_type = BNXT_ULP_FDB_TYPE_REGULAR;
 
 	/* Get the function id */
 	if (ulp_port_db_port_func_id_get(ulp_ctx,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c
index 8dea235f0..01f4fd087 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c
@@ -351,6 +351,7 @@ ulp_default_flow_create(struct rte_eth_dev *eth_dev,
 	}
 
 	mapper_params.class_tid = ulp_class_tid;
+	mapper_params.flow_type = BNXT_ULP_FDB_TYPE_DEFAULT;
 
 	rc = ulp_mapper_flow_create(ulp_ctx, &mapper_params, flow_id);
 	if (rc) {
diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c
index 44a29629b..5ed481ab3 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c
@@ -216,37 +216,6 @@ ulp_mapper_act_prop_size_get(uint32_t idx)
 	return ulp_act_prop_map_table[idx];
 }
 
-/*
- * Get the list of result fields that implement the flow action.
- * Gets a device dependent list of tables that implement the action template id.
- *
- * mparms [in] The mappers parms with data related to the flow.
- *
- * tid [in] The action template id that matches the flow
- *
- * num_tbls [out] The number of action tables in the returned array
- *
- * Returns An array of action tables to implement the flow, or NULL on error.
- */
-static struct bnxt_ulp_mapper_tbl_info *
-ulp_mapper_action_tbl_list_get(struct bnxt_ulp_mapper_parms *mparms,
-			       uint32_t tid,
-			       uint32_t *num_tbls)
-{
-	uint32_t	idx;
-	const struct ulp_template_device_tbls *dev_tbls;
-
-	dev_tbls = mparms->device_params->dev_tbls;
-
-	/* NOTE: Need to have something from template compiler to help validate
-	 * range of dev_id and act_tid
-	 */
-	idx = dev_tbls->act_tmpl_list[tid].start_tbl_idx;
-	*num_tbls = dev_tbls->act_tmpl_list[tid].num_tbls;
-
-	return &dev_tbls->act_tbl_list[idx];
-}
-
 /*
  * Get a list of classifier tables that implement the flow
  * Gets a device dependent list of tables that implement the class template id
@@ -257,30 +226,23 @@ ulp_mapper_action_tbl_list_get(struct bnxt_ulp_mapper_parms *mparms,
  *
  * num_tbls [out] The number of classifier tables in the returned array
  *
- * fdb_tbl_idx [out] The flow database index Regular or default
- *
  * returns An array of classifier tables to implement the flow, or NULL on
  * error
  */
 static struct bnxt_ulp_mapper_tbl_info *
-ulp_mapper_class_tbl_list_get(struct bnxt_ulp_mapper_parms *mparms,
-			      uint32_t tid,
-			      uint32_t *num_tbls,
-			      uint32_t *fdb_tbl_idx)
+ulp_mapper_tbl_list_get(struct bnxt_ulp_mapper_parms *mparms,
+			uint32_t tid,
+			uint32_t *num_tbls)
 {
 	uint32_t idx;
 	const struct ulp_template_device_tbls *dev_tbls;
 
-	dev_tbls = mparms->device_params->dev_tbls;
+	dev_tbls = &mparms->device_params->dev_tbls[mparms->tmpl_type];
 
-	/* NOTE: Need to have something from template compiler to help validate
-	 * range of dev_id and tid
-	 */
-	idx = dev_tbls->class_tmpl_list[tid].start_tbl_idx;
-	*num_tbls = dev_tbls->class_tmpl_list[tid].num_tbls;
-	*fdb_tbl_idx = dev_tbls->class_tmpl_list[tid].flow_db_table_type;
+	idx = dev_tbls->tmpl_list[tid].start_tbl_idx;
+	*num_tbls = dev_tbls->tmpl_list[tid].num_tbls;
 
-	return &dev_tbls->class_tbl_list[idx];
+	return &dev_tbls->tbl_list[idx];
 }
 
 /*
@@ -302,13 +264,16 @@ ulp_mapper_key_fields_get(struct bnxt_ulp_mapper_parms *mparms,
 	uint32_t idx;
 	const struct ulp_template_device_tbls *dev_tbls;
 
-	dev_tbls = mparms->device_params->dev_tbls;
+	dev_tbls = &mparms->device_params->dev_tbls[mparms->tmpl_type];
+	if (!dev_tbls->key_field_list) {
+		*num_flds = 0;
+		return NULL;
+	}
 
 	idx		= tbl->key_start_idx;
 	*num_flds	= tbl->key_num_fields;
 
-	/* NOTE: Need template to provide range checking define */
-	return &dev_tbls->class_key_field_list[idx];
+	return &dev_tbls->key_field_list[idx];
 }
 
 /*
@@ -333,48 +298,18 @@ ulp_mapper_result_fields_get(struct bnxt_ulp_mapper_parms *mparms,
 	uint32_t idx;
 	const struct ulp_template_device_tbls *dev_tbls;
 
-	dev_tbls = mparms->device_params->dev_tbls;
+	dev_tbls = &mparms->device_params->dev_tbls[mparms->tmpl_type];
+	if (!dev_tbls->result_field_list) {
+		*num_flds = 0;
+		*num_encap_flds = 0;
+		return NULL;
+	}
 
 	idx		= tbl->result_start_idx;
 	*num_flds	= tbl->result_num_fields;
 	*num_encap_flds = tbl->encap_num_fields;
 
-	/* NOTE: Need template to provide range checking define */
-	return &dev_tbls->class_result_field_list[idx];
-}
-
-/*
- * Get the list of result fields that implement the flow action.
- *
- * mparms [in] The mapper parms with information about the flow
- *
- * tbl [in] A single table instance to get the results fields
- * from num_flds
- *
- * num_rslt_flds [out] The number of data fields in the returned
- * array.
- *
- * num_encap_flds [out] The number of encap fields if any.
- *
- * Returns array of data fields, or NULL on error.
- */
-static struct bnxt_ulp_mapper_result_field_info *
-ulp_mapper_act_result_fields_get(struct bnxt_ulp_mapper_parms *mparms,
-				 struct bnxt_ulp_mapper_tbl_info *tbl,
-				 uint32_t *num_rslt_flds,
-				 uint32_t *num_encap_flds)
-{
-	uint32_t idx;
-	const struct ulp_template_device_tbls *dev_tbls;
-
-	dev_tbls = mparms->device_params->dev_tbls;
-
-	idx		= tbl->result_start_idx;
-	*num_rslt_flds	= tbl->result_num_fields;
-	*num_encap_flds = tbl->encap_num_fields;
-
-	/* NOTE: Need template to provide range checking define */
-	return &dev_tbls->act_result_field_list[idx];
+	return &dev_tbls->result_field_list[idx];
 }
 
 /*
@@ -392,12 +327,18 @@ ulp_mapper_ident_fields_get(struct bnxt_ulp_mapper_parms *mparms,
 			    uint32_t *num_flds)
 {
 	uint32_t idx;
+	const struct ulp_template_device_tbls *dev_tbls;
+
+	dev_tbls = &mparms->device_params->dev_tbls[mparms->tmpl_type];
+	if (!dev_tbls->ident_list) {
+		*num_flds = 0;
+		return NULL;
+	}
 
 	idx = tbl->ident_start_idx;
 	*num_flds = tbl->ident_nums;
 
-	/* NOTE: Need template to provide range checking define */
-	return &mparms->device_params->dev_tbls->ident_list[idx];
+	return &dev_tbls->ident_list[idx];
 }
 
 static struct bnxt_ulp_mapper_cache_entry *
@@ -652,7 +593,7 @@ ulp_mapper_ident_process(struct bnxt_ulp_mapper_parms *parms,
 		fid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;
 
 		rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-					      parms->tbl_idx,
+					      parms->flow_type,
 					      parms->fid,
 					      &fid_parms);
 		if (rc) {
@@ -749,7 +690,7 @@ ulp_mapper_ident_extract(struct bnxt_ulp_mapper_parms *parms,
 	fid_parms.resource_hndl = sparms.search_id;
 	fid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;
 	rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-				      parms->tbl_idx,
+				      parms->flow_type,
 				      parms->fid,
 				      &fid_parms);
 	if (rc) {
@@ -1234,7 +1175,7 @@ ulp_mapper_mark_gfid_process(struct bnxt_ulp_mapper_parms *parms,
 	fid_parms.resource_type	= mark_flag;
 	fid_parms.resource_hndl	= gfid;
 	rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-				      parms->tbl_idx,
+				      parms->flow_type,
 				      parms->fid,
 				      &fid_parms);
 	if (rc)
@@ -1283,7 +1224,7 @@ ulp_mapper_mark_act_ptr_process(struct bnxt_ulp_mapper_parms *parms,
 	fid_parms.resource_type	= mark_flag;
 	fid_parms.resource_hndl	= act_idx;
 	rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-				      parms->tbl_idx,
+				      parms->flow_type,
 				      parms->fid,
 				      &fid_parms);
 	if (rc)
@@ -1332,7 +1273,7 @@ ulp_mapper_mark_vfr_idx_process(struct bnxt_ulp_mapper_parms *parms,
 	fid_parms.resource_type	= mark_flag;
 	fid_parms.resource_hndl	= act_idx;
 	rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-				      parms->tbl_idx,
+				      parms->flow_type,
 				      parms->fid,
 				      &fid_parms);
 	if (rc)
@@ -1692,7 +1633,7 @@ ulp_mapper_tcam_tbl_process(struct bnxt_ulp_mapper_parms *parms,
 		fid_parms.critical_resource = tbl->critical_resource;
 		fid_parms.resource_hndl	= idx;
 		rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-					      parms->tbl_idx,
+					      parms->flow_type,
 					      parms->fid,
 					      &fid_parms);
 		if (rc) {
@@ -1849,7 +1790,7 @@ ulp_mapper_em_tbl_process(struct bnxt_ulp_mapper_parms *parms,
 	fid_parms.resource_hndl		= iparms.flow_handle;
 
 	rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-				      parms->tbl_idx,
+				      parms->flow_type,
 				      parms->fid,
 				      &fid_parms);
 	if (rc) {
@@ -1875,8 +1816,7 @@ ulp_mapper_em_tbl_process(struct bnxt_ulp_mapper_parms *parms,
 
 static int32_t
 ulp_mapper_index_tbl_process(struct bnxt_ulp_mapper_parms *parms,
-			     struct bnxt_ulp_mapper_tbl_info *tbl,
-			     bool is_class_tbl)
+			     struct bnxt_ulp_mapper_tbl_info *tbl)
 {
 	struct bnxt_ulp_mapper_result_field_info *flds;
 	struct ulp_flow_db_res_params	fid_parms;
@@ -1915,12 +1855,7 @@ ulp_mapper_index_tbl_process(struct bnxt_ulp_mapper_parms *parms,
 	}
 
 	/* Get the result fields list */
-	if (is_class_tbl)
-		flds = ulp_mapper_result_fields_get(parms, tbl, &num_flds,
-						    &encap_flds);
-	else
-		flds = ulp_mapper_act_result_fields_get(parms, tbl, &num_flds,
-							&encap_flds);
+	flds = ulp_mapper_result_fields_get(parms, tbl, &num_flds, &encap_flds);
 
 	if (!flds || (!num_flds && !encap_flds)) {
 		BNXT_TF_DBG(ERR, "template undefined for the index table\n");
@@ -2083,7 +2018,7 @@ ulp_mapper_index_tbl_process(struct bnxt_ulp_mapper_parms *parms,
 	fid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;
 
 	rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-				      parms->tbl_idx,
+				      parms->flow_type,
 				      parms->fid,
 				      &fid_parms);
 	if (rc) {
@@ -2246,7 +2181,7 @@ ulp_mapper_cache_tbl_process(struct bnxt_ulp_mapper_parms *parms,
 	fid_parms.resource_hndl	= (uint64_t)*ckey;
 	fid_parms.critical_resource = tbl->critical_resource;
 	rc = ulp_flow_db_resource_add(parms->ulp_ctx,
-				      parms->tbl_idx,
+				      parms->flow_type,
 				      parms->fid,
 				      &fid_parms);
 	if (rc)
@@ -2441,65 +2376,23 @@ ulp_mapper_tbl_cond_opcode_process(struct bnxt_ulp_mapper_parms *parms,
 	return rc;
 }
 
-/*
- * Function to process the action template. Iterate through the list
- * action info templates and process it.
- */
 static int32_t
-ulp_mapper_action_tbls_process(struct bnxt_ulp_mapper_parms *parms)
+ulp_mapper_tbls_process(struct bnxt_ulp_mapper_parms *parms, uint32_t tid)
 {
-	uint32_t	i;
-	int32_t		rc = 0;
-	struct bnxt_ulp_mapper_tbl_info *tbl;
-
-	if (!parms->atbls || !parms->num_atbls) {
-		BNXT_TF_DBG(ERR, "No action tables for template[%d][%d].\n",
-			    parms->dev_id, parms->act_tid);
+	struct bnxt_ulp_mapper_tbl_info *tbls;
+	uint32_t num_tbls, i;
+	int32_t rc = -EINVAL;
+
+	tbls = ulp_mapper_tbl_list_get(parms, tid, &num_tbls);
+	if (!tbls || !num_tbls) {
+		BNXT_TF_DBG(ERR, "No %s tables for %d:%d\n",
+			    (parms->tmpl_type = BNXT_ULP_TEMPLATE_TYPE_CLASS) ?
+			    "class" : "action", parms->dev_id, tid);
 		return -EINVAL;
 	}
 
-	for (i = 0; i < parms->num_atbls; i++) {
-		tbl = &parms->atbls[i];
-		if (ulp_mapper_tbl_cond_opcode_process(parms, tbl))
-			continue;
-
-		switch (tbl->resource_func) {
-		case BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE:
-			rc = ulp_mapper_index_tbl_process(parms, tbl, false);
-			if (rc) {
-				BNXT_TF_DBG(ERR, "Resource type %d failed\n",
-					    tbl->resource_func);
-				return rc;
-			}
-			break;
-		default:
-			BNXT_TF_DBG(ERR, "Unexpected action resource %d\n",
-				    tbl->resource_func);
-			return -EINVAL;
-		}
-	}
-
-	return rc;
-}
-
-/* Create the classifier table entries for a flow. */
-static int32_t
-ulp_mapper_class_tbls_process(struct bnxt_ulp_mapper_parms *parms)
-{
-	uint32_t	i;
-	int32_t		rc = 0;
-
-	if (!parms)
-		return -EINVAL;
-
-	if (!parms->ctbls || !parms->num_ctbls) {
-		BNXT_TF_DBG(ERR, "No class tables for template[%d][%d].\n",
-			    parms->dev_id, parms->class_tid);
-		return -EINVAL;
-	}
-
-	for (i = 0; i < parms->num_ctbls; i++) {
-		struct bnxt_ulp_mapper_tbl_info *tbl = &parms->ctbls[i];
+	for (i = 0; i < num_tbls; i++) {
+		struct bnxt_ulp_mapper_tbl_info *tbl = &tbls[i];
 
 		if (ulp_mapper_tbl_cond_opcode_process(parms, tbl))
 			continue;
@@ -2513,7 +2406,7 @@ ulp_mapper_class_tbls_process(struct bnxt_ulp_mapper_parms *parms)
 			rc = ulp_mapper_em_tbl_process(parms, tbl);
 			break;
 		case BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE:
-			rc = ulp_mapper_index_tbl_process(parms, tbl, true);
+			rc = ulp_mapper_index_tbl_process(parms, tbl);
 			break;
 		case BNXT_ULP_RESOURCE_FUNC_CACHE_TABLE:
 			rc = ulp_mapper_cache_tbl_process(parms, tbl);
@@ -2522,19 +2415,25 @@ ulp_mapper_class_tbls_process(struct bnxt_ulp_mapper_parms *parms)
 			rc = ulp_mapper_if_tbl_process(parms, tbl);
 			break;
 		default:
-			BNXT_TF_DBG(ERR, "Unexpected class resource %d\n",
+			BNXT_TF_DBG(ERR, "Unexpected mapper resource %d\n",
 				    tbl->resource_func);
-			return -EINVAL;
+			rc = -EINVAL;
+			goto error;
 		}
 
 		if (rc) {
 			BNXT_TF_DBG(ERR, "Resource type %d failed\n",
 				    tbl->resource_func);
-			return rc;
+			goto error;
 		}
 	}
 
 	return rc;
+error:
+	BNXT_TF_DBG(ERR, "%s tables failed creation for %d:%d\n",
+		    (parms->tmpl_type = BNXT_ULP_TEMPLATE_TYPE_CLASS) ?
+		    "class" : "action", parms->dev_id, tid);
+	return rc;
 }
 
 static int32_t
@@ -2725,6 +2624,8 @@ ulp_mapper_glb_template_table_init(struct bnxt_ulp_context *ulp_ctx)
 		parms.ulp_ctx = ulp_ctx;
 		parms.dev_id = dev_id;
 		parms.mapper_data = mapper_data;
+		parms.flow_type = BNXT_ULP_DEFAULT_FLOW_TABLE;
+		parms.tmpl_type = BNXT_ULP_TEMPLATE_TYPE_CLASS;
 
 		/* Get the class table entry from dev id and class id */
 		parms.class_tid = glbl_tmpl_list[idx];
@@ -2735,22 +2636,10 @@ ulp_mapper_glb_template_table_init(struct bnxt_ulp_context *ulp_ctx)
 				    parms.dev_id);
 			return -EINVAL;
 		}
-		parms.ctbls = ulp_mapper_class_tbl_list_get(&parms,
-							    parms.class_tid,
-							    &parms.num_ctbls,
-							    &parms.tbl_idx);
-		if (!parms.ctbls || !parms.num_ctbls) {
-			BNXT_TF_DBG(ERR, "No class tables for %d:%d\n",
-				    parms.dev_id, parms.class_tid);
-			return -EINVAL;
-		}
-		rc = ulp_mapper_class_tbls_process(&parms);
-		if (rc) {
-			BNXT_TF_DBG(ERR,
-				    "class tables failed creation for %d:%d\n",
-				    parms.dev_id, parms.class_tid);
+
+		rc = ulp_mapper_tbls_process(&parms, parms.class_tid);
+		if (rc)
 			return rc;
-		}
 	}
 	return rc;
 }
@@ -2783,6 +2672,7 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,
 	parms.tcam_tbl_opc = BNXT_ULP_MAPPER_TCAM_TBL_OPC_NORMAL;
 	parms.act_tid = cparms->act_tid;
 	parms.class_tid = cparms->class_tid;
+	parms.flow_type = cparms->flow_type;
 
 	/* Get the device id from the ulp context */
 	if (bnxt_ulp_cntxt_dev_id_get(ulp_ctx, &parms.dev_id)) {
@@ -2809,34 +2699,6 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,
 		return -EINVAL;
 	}
 
-	/* Get the action table entry from device id and act context id */
-	/*
-	 * Perform the action table get only if act template is not zero
-	 * for act template zero like for default rules ignore the action
-	 * table processing.
-	 */
-	if (parms.act_tid) {
-		parms.atbls = ulp_mapper_action_tbl_list_get(&parms,
-							     parms.act_tid,
-							     &parms.num_atbls);
-		if (!parms.atbls || !parms.num_atbls) {
-			BNXT_TF_DBG(ERR, "No action tables for %d:%d\n",
-				    parms.dev_id, parms.act_tid);
-			return -EINVAL;
-		}
-	}
-
-	/* Get the class table entry from device id and act context id */
-	parms.ctbls = ulp_mapper_class_tbl_list_get(&parms,
-						    parms.class_tid,
-						    &parms.num_ctbls,
-						    &parms.tbl_idx);
-	if (!parms.ctbls || !parms.num_ctbls) {
-		BNXT_TF_DBG(ERR, "No class tables for %d:%d\n",
-			    parms.dev_id, parms.class_tid);
-		return -EINVAL;
-	}
-
 	/* initialize the registry file for further processing */
 	if (!ulp_regfile_init(parms.regfile)) {
 		BNXT_TF_DBG(ERR, "regfile initialization failed.\n");
@@ -2862,7 +2724,7 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,
 	 * free each of them.
 	 */
 	rc = ulp_flow_db_fid_alloc(ulp_ctx,
-				   parms.tbl_idx,
+				   parms.flow_type,
 				   cparms->func_id,
 				   &parms.fid);
 	if (rc) {
@@ -2871,23 +2733,21 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,
 		return rc;
 	}
 
-	/* Process the action template list from the selected action table*/
 	if (parms.act_tid) {
-		rc = ulp_mapper_action_tbls_process(&parms);
-		if (rc) {
-			BNXT_TF_DBG(ERR,
-				    "action tables failed creation for %d:%d\n",
-				    parms.dev_id, parms.act_tid);
+		parms.tmpl_type = BNXT_ULP_TEMPLATE_TYPE_ACTION;
+		/* Process the action template tables */
+		rc = ulp_mapper_tbls_process(&parms, parms.act_tid);
+		if (rc)
 			goto flow_error;
-		}
 	}
 
-	/* All good. Now process the class template */
-	rc = ulp_mapper_class_tbls_process(&parms);
-	if (rc) {
-		BNXT_TF_DBG(ERR, "class tables failed creation for %d:%d\n",
-			    parms.dev_id, parms.class_tid);
-		goto flow_error;
+	if (parms.class_tid) {
+		parms.tmpl_type = BNXT_ULP_TEMPLATE_TYPE_CLASS;
+
+		/* Process the class template tables.*/
+		rc = ulp_mapper_tbls_process(&parms, parms.class_tid);
+		if (rc)
+			goto flow_error;
 	}
 
 	*flowid = parms.fid;
diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.h b/drivers/net/bnxt/tf_ulp/ulp_mapper.h
index a19fb0d76..936fb9af4 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.h
@@ -53,6 +53,7 @@ struct bnxt_ulp_mapper_data {
 
 /* Internal Structure for passing the arguments around */
 struct bnxt_ulp_mapper_parms {
+	enum bnxt_ulp_template_type		tmpl_type;
 	uint32_t				dev_id;
 	uint32_t				act_tid;
 	struct bnxt_ulp_mapper_tbl_info		*atbls; /* action table */
@@ -70,7 +71,7 @@ struct bnxt_ulp_mapper_parms {
 	struct bnxt_ulp_context			*ulp_ctx;
 	uint8_t					encap_byte_swap;
 	uint32_t				fid;
-	enum bnxt_ulp_flow_db_tables		tbl_idx;
+	enum bnxt_ulp_fdb_type			flow_type;
 	struct bnxt_ulp_mapper_data		*mapper_data;
 	enum bnxt_ulp_cache_table_opc		tcam_tbl_opc;
 	struct bnxt_ulp_mapper_cache_entry	*cache_ptr;
@@ -88,6 +89,7 @@ struct bnxt_ulp_mapper_create_parms {
 	uint32_t			act_tid;
 	uint16_t			func_id;
 	uint32_t			dir_attr;
+	enum bnxt_ulp_fdb_type		flow_type;
 };
 
 /* Function to initialize any dynamic mapper data. */
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
index de56b7ef9..e083af0ae 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
@@ -278,6 +278,12 @@ enum bnxt_ulp_search_before_alloc {
 	BNXT_ULP_SEARCH_BEFORE_ALLOC_LAST = 3
 };
 
+enum bnxt_ulp_template_type {
+	BNXT_ULP_TEMPLATE_TYPE_CLASS = 0,
+	BNXT_ULP_TEMPLATE_TYPE_ACTION = 1,
+	BNXT_ULP_TEMPLATE_TYPE_LAST = 2
+};
+
 enum bnxt_ulp_fdb_resource_flags {
 	BNXT_ULP_FDB_RESOURCE_FLAGS_DIR_INGR = 0x00,
 	BNXT_ULP_FDB_RESOURCE_FLAGS_DIR_EGR = 0x01
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c
index 2d40cde8e..f365c5c5b 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c
@@ -15980,7 +15980,7 @@ struct bnxt_ulp_mapper_result_field_info ulp_class_stingray_result_field_list[]
 	}
 };
 
-struct bnxt_ulp_mapper_ident_info ulp_stingray_ident_list[] = {
+struct bnxt_ulp_mapper_ident_info ulp_class_stingray_ident_list[] = {
 	{
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
 	.ident_type = TF_IDENT_TYPE_L2_CTXT_HIGH,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
index 9cf62a094..86fd489b9 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
@@ -312,15 +312,34 @@ struct bnxt_ulp_cache_tbl_params ulp_cache_tbl_params[] = {
 	}
 };
 
-const struct ulp_template_device_tbls ulp_template_wh_plus_tbls = {
-	.class_tmpl_list          = ulp_class_wh_plus_tmpl_list,
-	.class_tbl_list           = ulp_class_wh_plus_tbl_list,
-	.class_key_field_list     = ulp_class_wh_plus_key_field_list,
-	.class_result_field_list  = ulp_class_wh_plus_result_field_list,
-	.ident_list               = ulp_wh_plus_ident_list,
-	.act_tmpl_list            = ulp_act_wh_plus_tmpl_list,
-	.act_tbl_list             = ulp_act_wh_plus_tbl_list,
-	.act_result_field_list    = ulp_act_wh_plus_result_field_list
+const struct ulp_template_device_tbls ulp_template_stingray_tbls[] = {
+	[BNXT_ULP_TEMPLATE_TYPE_CLASS] = {
+		.tmpl_list = ulp_class_stingray_tmpl_list,
+		.tbl_list = ulp_class_stingray_tbl_list,
+		.key_field_list = ulp_class_stingray_key_field_list,
+		.result_field_list = ulp_class_stingray_result_field_list,
+		.ident_list = ulp_class_stingray_ident_list
+	},
+	[BNXT_ULP_TEMPLATE_TYPE_ACTION] = {
+		.tmpl_list = ulp_act_stingray_tmpl_list,
+		.tbl_list = ulp_act_stingray_tbl_list,
+		.result_field_list = ulp_act_stingray_result_field_list,
+	}
+};
+
+const struct ulp_template_device_tbls ulp_template_wh_plus_tbls[] = {
+	[BNXT_ULP_TEMPLATE_TYPE_CLASS] = {
+		.tmpl_list = ulp_class_wh_plus_tmpl_list,
+		.tbl_list = ulp_class_wh_plus_tbl_list,
+		.key_field_list = ulp_class_wh_plus_key_field_list,
+		.result_field_list = ulp_class_wh_plus_result_field_list,
+		.ident_list = ulp_class_wh_plus_ident_list,
+	},
+	[BNXT_ULP_TEMPLATE_TYPE_ACTION] = {
+		.tmpl_list = ulp_act_wh_plus_tmpl_list,
+		.tbl_list = ulp_act_wh_plus_tbl_list,
+		.result_field_list = ulp_act_wh_plus_result_field_list
+	}
 };
 
 struct bnxt_ulp_device_params ulp_device_params[BNXT_ULP_DEVICE_ID_LAST] = {
@@ -339,7 +358,24 @@ struct bnxt_ulp_device_params ulp_device_params[BNXT_ULP_DEVICE_ID_LAST] = {
 	.packet_count_mask       = 0xffffffff00000000,
 	.byte_count_shift        = 0,
 	.packet_count_shift      = 36,
-	.dev_tbls		 = &ulp_template_wh_plus_tbls
+	.dev_tbls		 = ulp_template_wh_plus_tbls
+	},
+	[BNXT_ULP_DEVICE_ID_STINGRAY] = {
+	.flow_mem_type           = BNXT_ULP_FLOW_MEM_TYPE_INT,
+	.byte_order              = BNXT_ULP_BYTE_ORDER_LE,
+	.encap_byte_swap         = 1,
+	.flow_db_num_entries     = 16384,
+	.mark_db_lfid_entries    = 65536,
+	.mark_db_gfid_entries    = 0,
+	.flow_count_db_entries   = 16384,
+	.num_resources_per_flow  = 8,
+	.num_phy_ports           = 2,
+	.ext_cntr_table_type     = 0,
+	.byte_count_mask         = 0x0000000fffffffff,
+	.packet_count_mask       = 0xffffffff00000000,
+	.byte_count_shift        = 0,
+	.packet_count_shift      = 36,
+	.dev_tbls		 = ulp_template_stingray_tbls
 	}
 };
 
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
index 93f87f32b..7a541cb8e 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
@@ -18,7 +18,7 @@ bnxt_ulp_mapper_class_key_field_info ulp_class_wh_plus_key_field_list[];
 extern struct
 bnxt_ulp_mapper_result_field_info ulp_class_wh_plus_result_field_list[];
 
-extern struct bnxt_ulp_mapper_ident_info ulp_wh_plus_ident_list[];
+extern struct bnxt_ulp_mapper_ident_info ulp_class_wh_plus_ident_list[];
 
 extern struct bnxt_ulp_mapper_tbl_list_info ulp_act_wh_plus_tmpl_list[];
 
@@ -37,7 +37,7 @@ bnxt_ulp_mapper_class_key_field_info ulp_class_stingray_key_field_list[];
 extern struct
 bnxt_ulp_mapper_result_field_info ulp_class_stingray_result_field_list[];
 
-extern struct bnxt_ulp_mapper_ident_info ulp_stingray_ident_list[];
+extern struct bnxt_ulp_mapper_ident_info ulp_class_stingray_ident_list[];
 
 extern struct bnxt_ulp_mapper_tbl_list_info ulp_act_stingray_tmpl_list[];
 
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c
index 10160f821..b747241cd 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c
@@ -15980,7 +15980,7 @@ struct bnxt_ulp_mapper_result_field_info ulp_class_wh_plus_result_field_list[] =
 	}
 };
 
-struct bnxt_ulp_mapper_ident_info ulp_wh_plus_ident_list[] = {
+struct bnxt_ulp_mapper_ident_info ulp_class_wh_plus_ident_list[] = {
 	{
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_IDENTIFIER,
 	.ident_type = TF_IDENT_TYPE_L2_CTXT_HIGH,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
index 621ccce15..026c42d1c 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
@@ -142,14 +142,11 @@ extern struct bnxt_ulp_act_match_info ulp_act_match_list[];
 
 /* Device Specific Tables for mapper */
 struct ulp_template_device_tbls {
-	struct bnxt_ulp_mapper_tbl_list_info *class_tmpl_list;
-	struct bnxt_ulp_mapper_tbl_info *class_tbl_list;
-	struct bnxt_ulp_mapper_class_key_field_info *class_key_field_list;
-	struct bnxt_ulp_mapper_result_field_info *class_result_field_list;
+	struct bnxt_ulp_mapper_tbl_list_info *tmpl_list;
+	struct bnxt_ulp_mapper_tbl_info *tbl_list;
+	struct bnxt_ulp_mapper_class_key_field_info *key_field_list;
+	struct bnxt_ulp_mapper_result_field_info *result_field_list;
 	struct bnxt_ulp_mapper_ident_info *ident_list;
-	struct bnxt_ulp_mapper_tbl_list_info *act_tmpl_list;
-	struct bnxt_ulp_mapper_tbl_info *act_tbl_list;
-	struct bnxt_ulp_mapper_result_field_info *act_result_field_list;
 };
 
 /* Device specific parameters */
-- 
2.21.1 (Apple Git-122.3)


  parent reply	other threads:[~2020-10-10  4:09 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-09 11:11 [dpdk-dev] [PATCH 00/13] bnxt patches Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 01/13] net/bnxt: fix the corruption of the session details Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 02/13] net/bnxt: add multi-device infrastucture Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 03/13] net/bnxt: add Stingray support to ULP Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 04/13] net/bnxt: fixes for PMD PF support in SR-IOV mode Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 05/13] net/bnxt: consolidate template table processing Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 06/13] net/bnxt: combine default and regular flows in flow database Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 07/13] net/bnxt: register PF for default vnic change async event Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 08/13] net/bnxt: runtime external vs internal em support Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 09/13] net/bnxt: add support for parent child flow database Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 10/13] net/bnxt: consolidate template table processing Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 11/13] net/bnxt: remove flow db table type from templates Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 12/13] net/bnxt: add support for parent child flow create and free Somnath Kotur
2020-10-09 11:11 ` [dpdk-dev] [PATCH 13/13] net/bnxt: remove parent fid validation in vnic change event processing Somnath Kotur
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 00/12] bnxt patches Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 01/12] net/bnxt: fix the corruption of the session details Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 02/12] net/bnxt: add multi-device infrastructure Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 03/12] net/bnxt: add Stingray device support to ULP Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 04/12] net/bnxt: fix PMD PF support in SR-IOV mode Ajit Khaparde
2020-10-10  4:05 ` Ajit Khaparde [this message]
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 06/12] net/bnxt: combine default and regular flows Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 07/12] net/bnxt: handle default vnic change async event Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 08/12] net/bnxt: support runtime EM selection Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 09/12] net/bnxt: add support for parent child flow database Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 10/12] net/bnxt: consolidate template table processing Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 11/12] net/bnxt: remove flow db table type from templates Ajit Khaparde
2020-10-10  4:05 ` [dpdk-dev] [PATCH v2 12/12] net/bnxt: add parent child flow create and free Ajit Khaparde
2020-10-10  4:11 ` [dpdk-dev] [PATCH v2 00/12] bnxt patches Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 01/12] net/bnxt: fix the corruption of the session details Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 02/12] net/bnxt: add multi-device infrastructure Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 03/12] net/bnxt: add Stingray device support to ULP Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 04/12] net/bnxt: fix PMD PF support in SR-IOV mode Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 05/12] net/bnxt: consolidate template table processing Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 06/12] net/bnxt: combine default and regular flows Ajit Khaparde
2022-05-24 15:31     ` Ferruh Yigit
2022-05-24 16:24       ` Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 07/12] net/bnxt: handle default vnic change async event Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 08/12] net/bnxt: support runtime EM selection Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 09/12] net/bnxt: add support for parent child flow database Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 10/12] net/bnxt: consolidate template table processing Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 11/12] net/bnxt: remove flow db table type from templates Ajit Khaparde
2020-10-10  4:11   ` [dpdk-dev] [PATCH v2 12/12] net/bnxt: add parent child flow create and free Ajit Khaparde
2020-10-12  4:31   ` [dpdk-dev] [PATCH v2 00/12] bnxt patches Ajit Khaparde

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201010040520.63049-6-ajit.khaparde@broadcom.com \
    --to=ajit.khaparde@broadcom.com \
    --cc=dev@dpdk.org \
    --cc=kishore.padmanabha@broadcom.com \
    --cc=michael.baucom@broadcom.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.