[29/58] net/bnxt: add conditional execution and rejection

Message ID 20210530085929.29695-30-venkatkumar.duvvuru@broadcom.com (mailing list archive)
State Superseded, archived
Delegated to: Ajit Khaparde
Headers
Series enhancements to host based flow table management |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Venkat Duvvuru May 30, 2021, 8:59 a.m. UTC
  From: Mike Baucom <michael.baucom@broadcom.com>

Conditional execution and rejection processing added for templates and
tables.  This allows the mapper to skip tables and reject templates
based on the content without having to hard code rules.

Signed-off-by: Mike Baucom <michael.baucom@broadcom.com>
Signed-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>
Reviewed-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com>
---
 drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c       |   1 +
 drivers/net/bnxt/tf_ulp/ulp_mapper.c          | 330 ++++++++++++++----
 drivers/net/bnxt/tf_ulp/ulp_mapper.h          |   2 +
 .../net/bnxt/tf_ulp/ulp_template_db_enum.h    |  30 +-
 .../tf_ulp/ulp_template_db_stingray_act.c     |  30 +-
 .../tf_ulp/ulp_template_db_stingray_class.c   |   8 +-
 drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c | 243 +++++++++++++
 drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h |   2 +
 .../bnxt/tf_ulp/ulp_template_db_wh_plus_act.c |  30 +-
 .../tf_ulp/ulp_template_db_wh_plus_class.c    |   8 +-
 drivers/net/bnxt/tf_ulp/ulp_template_struct.h |  18 +-
 11 files changed, 593 insertions(+), 109 deletions(-)
  

Patch

diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
index 777a6badd9..ddf38ed931 100644
--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
@@ -93,6 +93,7 @@  bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms,
 	mapper_cparms->flow_id		= params->fid;
 	mapper_cparms->parent_flow	= params->parent_flow;
 	mapper_cparms->parent_fid	= params->parent_fid;
+	mapper_cparms->fld_bitmap	= &params->fld_bitmap;
 }
 
 /* Function to create the rte flow. */
diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c
index 4e9211a7ab..d84614fcd1 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c
@@ -17,6 +17,7 @@ 
 #include "ulp_mapper.h"
 #include "ulp_flow_db.h"
 #include "tf_util.h"
+#include "ulp_template_db_tbl.h"
 
 static struct bnxt_ulp_glb_resource_info *
 ulp_mapper_glb_resource_info_list_get(uint32_t *num_entries)
@@ -190,6 +191,12 @@  ulp_mapper_glb_template_table_get(uint32_t *num_entries)
 	return ulp_glb_template_tbl;
 }
 
+static uint8_t *
+ulp_mapper_glb_field_tbl_get(uint32_t idx)
+{
+	return &ulp_glb_field_tbl[idx];
+}
+
 /*
  * Get the size of the action property for a given index.
  *
@@ -205,6 +212,40 @@  ulp_mapper_act_prop_size_get(uint32_t idx)
 	return ulp_act_prop_map_table[idx];
 }
 
+static struct bnxt_ulp_mapper_cond_info *
+ulp_mapper_tmpl_reject_list_get(struct bnxt_ulp_mapper_parms *mparms,
+				uint32_t tid,
+				uint32_t *num_tbls,
+				enum bnxt_ulp_cond_list_opc *opc)
+{
+	uint32_t idx;
+	const struct ulp_template_device_tbls *dev_tbls;
+
+	dev_tbls = &mparms->device_params->dev_tbls[mparms->tmpl_type];
+	*num_tbls = dev_tbls->tmpl_list[tid].reject_info.cond_nums;
+	*opc = dev_tbls->tmpl_list[tid].reject_info.cond_list_opcode;
+	idx = dev_tbls->tmpl_list[tid].reject_info.cond_start_idx;
+
+	return &dev_tbls->cond_list[idx];
+}
+
+static struct bnxt_ulp_mapper_cond_info *
+ulp_mapper_tbl_execute_list_get(struct bnxt_ulp_mapper_parms *mparms,
+				struct bnxt_ulp_mapper_tbl_info *tbl,
+				uint32_t *num_tbls,
+				enum bnxt_ulp_cond_list_opc *opc)
+{
+	uint32_t idx;
+	const struct ulp_template_device_tbls *dev_tbls;
+
+	dev_tbls = &mparms->device_params->dev_tbls[mparms->tmpl_type];
+	*num_tbls = tbl->execute_info.cond_nums;
+	*opc = tbl->execute_info.cond_list_opcode;
+	idx = tbl->execute_info.cond_start_idx;
+
+	return &dev_tbls->cond_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
@@ -2376,61 +2417,6 @@  ulp_mapper_glb_resource_info_init(struct bnxt_ulp_context *ulp_ctx,
 	return rc;
 }
 
-/*
- * Function to process the conditional opcode of the mapper table.
- * returns 1 to skip the table.
- * return 0 to continue processing the table.
- *
- * defaults to skip
- */
-static int32_t
-ulp_mapper_tbl_cond_opcode_process(struct bnxt_ulp_mapper_parms *parms,
-				   struct bnxt_ulp_mapper_tbl_info *tbl)
-{
-	int32_t rc = 1;
-
-	switch (tbl->cond_opcode) {
-	case BNXT_ULP_COND_OPCODE_NOP:
-		rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET:
-		if (tbl->cond_operand < BNXT_ULP_CF_IDX_LAST &&
-		    ULP_COMP_FLD_IDX_RD(parms, tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET:
-		if (ULP_BITMAP_ISSET(parms->act_bitmap->bits,
-				     tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_HDR_BIT_IS_SET:
-		if (ULP_BITMAP_ISSET(parms->hdr_bitmap->bits,
-				     tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET:
-		if (tbl->cond_operand < BNXT_ULP_CF_IDX_LAST &&
-		    !ULP_COMP_FLD_IDX_RD(parms, tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_ACTION_BIT_NOT_SET:
-		if (!ULP_BITMAP_ISSET(parms->act_bitmap->bits,
-				      tbl->cond_operand))
-			rc = 0;
-		break;
-	case BNXT_ULP_COND_OPCODE_HDR_BIT_NOT_SET:
-		if (!ULP_BITMAP_ISSET(parms->hdr_bitmap->bits,
-				      tbl->cond_operand))
-			rc = 0;
-		break;
-	default:
-		BNXT_TF_DBG(ERR,
-			    "Invalid arg in mapper tbl for cond opcode\n");
-		break;
-	}
-	return rc;
-}
-
 /*
  * Function to process the memtype opcode of the mapper table.
  * returns 1 to skip the table.
@@ -2467,27 +2453,251 @@  ulp_mapper_tbl_memtype_opcode_process(struct bnxt_ulp_mapper_parms *parms,
 	return rc;
 }
 
+/*
+ * Common conditional opcode process routine that is used for both the template
+ * rejection and table conditional execution.
+ */
+static int32_t
+ulp_mapper_cond_opc_process(struct bnxt_ulp_mapper_parms *parms,
+			    enum bnxt_ulp_cond_opc opc,
+			    uint32_t operand,
+			    int32_t *res)
+{
+	int32_t rc = 0;
+	uint8_t *bit;
+	uint32_t idx;
+	uint64_t regval;
+
+	switch (opc) {
+	case BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET:
+		if (operand < BNXT_ULP_CF_IDX_LAST) {
+			*res = ULP_COMP_FLD_IDX_RD(parms, operand);
+		} else {
+			BNXT_TF_DBG(ERR, "comp field out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET:
+		if (operand < BNXT_ULP_CF_IDX_LAST) {
+			*res = !ULP_COMP_FLD_IDX_RD(parms, operand);
+		} else {
+			BNXT_TF_DBG(ERR, "comp field out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET:
+		if (operand < BNXT_ULP_ACTION_BIT_LAST) {
+			*res = ULP_BITMAP_ISSET(parms->act_bitmap->bits,
+						operand);
+		} else {
+			BNXT_TF_DBG(ERR, "action bit out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_ACTION_BIT_NOT_SET:
+		if (operand < BNXT_ULP_ACTION_BIT_LAST) {
+			*res = !ULP_BITMAP_ISSET(parms->act_bitmap->bits,
+					       operand);
+		} else {
+			BNXT_TF_DBG(ERR, "action bit out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_HDR_BIT_IS_SET:
+		if (operand < BNXT_ULP_HDR_BIT_LAST) {
+			*res = ULP_BITMAP_ISSET(parms->hdr_bitmap->bits,
+						operand);
+		} else {
+			BNXT_TF_DBG(ERR, "header bit out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_HDR_BIT_NOT_SET:
+		if (operand < BNXT_ULP_HDR_BIT_LAST) {
+			*res = !ULP_BITMAP_ISSET(parms->hdr_bitmap->bits,
+					       operand);
+		} else {
+			BNXT_TF_DBG(ERR, "header bit out of bounds %d\n",
+				    operand);
+			rc = -EINVAL;
+		}
+		break;
+	case BNXT_ULP_COND_OPC_FIELD_BIT_IS_SET:
+		idx = (parms->class_tid << BNXT_ULP_GLB_FIELD_TBL_SHIFT) |
+			operand;
+		bit = ulp_mapper_glb_field_tbl_get(idx);
+		if (!bit) {
+			BNXT_TF_DBG(ERR, "invalid ulp_glb_field_tbl idx %d\n",
+				    idx);
+			return -EINVAL;
+		}
+		*res = ULP_BITMAP_ISSET(parms->fld_bitmap->bits, (1 << *bit));
+		break;
+	case BNXT_ULP_COND_OPC_FIELD_BIT_NOT_SET:
+		idx = (parms->class_tid << BNXT_ULP_GLB_FIELD_TBL_SHIFT) |
+			operand;
+		bit = ulp_mapper_glb_field_tbl_get(idx);
+		if (!bit) {
+			BNXT_TF_DBG(ERR, "invalid ulp_glb_field_tbl idx %d\n",
+				    idx);
+			return -EINVAL;
+		}
+		*res = !ULP_BITMAP_ISSET(parms->fld_bitmap->bits, (1 << *bit));
+		break;
+	case BNXT_ULP_COND_OPC_REGFILE_IS_SET:
+		if (!ulp_regfile_read(parms->regfile, operand, &regval)) {
+			BNXT_TF_DBG(ERR, "regfile[%d] read oob\n", operand);
+			return -EINVAL;
+		}
+		*res = regval != 0;
+		break;
+	case BNXT_ULP_COND_OPC_REGFILE_NOT_SET:
+		if (!ulp_regfile_read(parms->regfile, operand, &regval)) {
+			BNXT_TF_DBG(ERR, "regfile[%d] read oob\n", operand);
+			return -EINVAL;
+		}
+		*res = regval == 0;
+		break;
+	default:
+		BNXT_TF_DBG(ERR, "Invalid conditional opcode %d\n", opc);
+		rc = -EINVAL;
+		break;
+	}
+	return (rc);
+}
+
+/*
+ * Processes a list of conditions and returns both a status and result of the
+ * list.  The status must be checked prior to verifying the result.
+ *
+ * returns 0 for success, negative on failure
+ * returns res = 1 for true, res = 0 for false.
+ */
+static int32_t
+ulp_mapper_cond_opc_list_process(struct bnxt_ulp_mapper_parms *parms,
+				 enum bnxt_ulp_cond_list_opc list_opc,
+				 struct bnxt_ulp_mapper_cond_info *list,
+				 uint32_t num,
+				 int32_t *res)
+{
+	uint32_t i;
+	int32_t rc = 0, trc;
+
+	switch (list_opc) {
+	case BNXT_ULP_COND_LIST_OPC_AND:
+		/* AND Defaults to true. */
+		*res = 1;
+		break;
+	case BNXT_ULP_COND_LIST_OPC_OR:
+		/* OR Defaults to false. */
+		*res = 0;
+		break;
+	case BNXT_ULP_COND_LIST_OPC_TRUE:
+		*res = 1;
+		return rc;
+	case BNXT_ULP_COND_LIST_OPC_FALSE:
+		*res = 0;
+		return rc;
+	default:
+		BNXT_TF_DBG(ERR, "Invalid conditional list opcode %d\n",
+			    list_opc);
+		return -EINVAL;
+	}
+
+	for (i = 0; i < num; i++) {
+		rc = ulp_mapper_cond_opc_process(parms,
+						 list[i].cond_opcode,
+						 list[i].cond_operand,
+						 &trc);
+		if (rc)
+			return rc;
+
+		if (list_opc == BNXT_ULP_COND_LIST_OPC_AND) {
+			/* early return if result is ever zero */
+			if (!trc) {
+				*res = trc;
+				return rc;
+			}
+		} else {
+			/* early return if result is ever non-zero */
+			if (trc) {
+				*res = trc;
+				return rc;
+			}
+		}
+	}
+
+	return rc;
+}
+
 static int32_t
 ulp_mapper_tbls_process(struct bnxt_ulp_mapper_parms *parms, uint32_t tid)
 {
+	struct bnxt_ulp_mapper_cond_info *cond_tbls = NULL;
+	enum bnxt_ulp_cond_list_opc cond_opc;
 	struct bnxt_ulp_mapper_tbl_info *tbls;
-	uint32_t num_tbls, i;
-	int32_t rc = -EINVAL;
+	struct bnxt_ulp_mapper_tbl_info *tbl;
+	uint32_t num_tbls, i, num_cond_tbls;
+	int32_t rc = -EINVAL, cond_rc = 0;
+
+	cond_tbls = ulp_mapper_tmpl_reject_list_get(parms, tid,
+						    &num_cond_tbls,
+						    &cond_opc);
+	/*
+	 * Process the reject list if exists, otherwise assume that the
+	 * template is allowed.
+	 */
+	if (cond_tbls && num_cond_tbls) {
+		rc = ulp_mapper_cond_opc_list_process(parms,
+						      cond_opc,
+						      cond_tbls,
+						      num_cond_tbls,
+						      &cond_rc);
+		if (rc)
+			return rc;
+
+		/* Reject the template if True */
+		if (cond_rc) {
+			BNXT_TF_DBG(ERR, "%s Template %d rejected.\n",
+				    (parms->tmpl_type ==
+				     BNXT_ULP_TEMPLATE_TYPE_CLASS) ?
+				    "class" : "action", tid);
+			return -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) ?
+			    (parms->tmpl_type == BNXT_ULP_TEMPLATE_TYPE_CLASS) ?
 			    "class" : "action", parms->dev_id, tid);
 		return -EINVAL;
 	}
 
 	for (i = 0; i < num_tbls; i++) {
-		struct bnxt_ulp_mapper_tbl_info *tbl = &tbls[i];
+		tbl = &tbls[i];
 
+		/* Handle the table level opcodes to determine if required. */
 		if (ulp_mapper_tbl_memtype_opcode_process(parms, tbl))
 			continue;
-		if (ulp_mapper_tbl_cond_opcode_process(parms, tbl))
+		cond_tbls = ulp_mapper_tbl_execute_list_get(parms, tbl,
+							    &num_cond_tbls,
+							    &cond_opc);
+		rc = ulp_mapper_cond_opc_list_process(parms, cond_opc,
+						      cond_tbls, num_cond_tbls,
+						      &cond_rc);
+		if (rc) {
+			BNXT_TF_DBG(ERR, "Failed to process cond opc list "
+				   "(%d)\n", rc);
+			return rc;
+		}
+		/* Skip the table if False */
+		if (!cond_rc)
 			continue;
 
 		switch (tbl->resource_func) {
diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.h b/drivers/net/bnxt/tf_ulp/ulp_mapper.h
index 8422f44026..8bc6cdbdd5 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.h
@@ -58,6 +58,7 @@  struct bnxt_ulp_mapper_parms {
 	struct ulp_rte_act_bitmap		*act_bitmap;
 	struct ulp_rte_hdr_bitmap		*hdr_bitmap;
 	struct ulp_rte_hdr_field		*hdr_field;
+	struct ulp_rte_field_bitmap		*fld_bitmap;
 	uint32_t				*comp_fld;
 	struct ulp_regfile			*regfile;
 	struct tf				*tfp;
@@ -79,6 +80,7 @@  struct bnxt_ulp_mapper_create_parms {
 	uint32_t			*comp_fld;
 	struct ulp_rte_act_bitmap	*act;
 	struct ulp_rte_act_prop		*act_prop;
+	struct ulp_rte_field_bitmap	*fld_bitmap;
 	uint32_t			class_tid;
 	uint32_t			act_tid;
 	uint16_t			func_id;
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 f16651a821..e4b8c56472 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
@@ -27,6 +27,7 @@ 
 #define BNXT_ULP_CACHE_TBL_IDENT_MAX_NUM 2
 #define BNXT_ULP_GLB_RESOURCE_TBL_MAX_SZ 8
 #define BNXT_ULP_GLB_TEMPLATE_TBL_MAX_SZ 1
+#define BNXT_ULP_GLB_FIELD_TBL_SHIFT 7
 
 enum bnxt_ulp_action_bit {
 	BNXT_ULP_ACTION_BIT_MARK             = 0x0000000000000001,
@@ -143,15 +144,26 @@  enum bnxt_ulp_cf_idx {
 	BNXT_ULP_CF_IDX_LAST = 46
 };
 
-enum bnxt_ulp_cond_opcode {
-	BNXT_ULP_COND_OPCODE_NOP = 0,
-	BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET = 1,
-	BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET = 2,
-	BNXT_ULP_COND_OPCODE_HDR_BIT_IS_SET = 3,
-	BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET = 4,
-	BNXT_ULP_COND_OPCODE_ACTION_BIT_NOT_SET = 5,
-	BNXT_ULP_COND_OPCODE_HDR_BIT_NOT_SET = 6,
-	BNXT_ULP_COND_OPCODE_LAST = 7
+enum bnxt_ulp_cond_list_opc {
+	BNXT_ULP_COND_LIST_OPC_TRUE = 0,
+	BNXT_ULP_COND_LIST_OPC_FALSE = 1,
+	BNXT_ULP_COND_LIST_OPC_OR = 2,
+	BNXT_ULP_COND_LIST_OPC_AND = 3,
+	BNXT_ULP_COND_LIST_OPC_LAST = 4
+};
+
+enum bnxt_ulp_cond_opc {
+	BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET = 0,
+	BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET = 1,
+	BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET = 2,
+	BNXT_ULP_COND_OPC_ACTION_BIT_NOT_SET = 3,
+	BNXT_ULP_COND_OPC_HDR_BIT_IS_SET = 4,
+	BNXT_ULP_COND_OPC_HDR_BIT_NOT_SET = 5,
+	BNXT_ULP_COND_OPC_FIELD_BIT_IS_SET = 6,
+	BNXT_ULP_COND_OPC_FIELD_BIT_NOT_SET = 7,
+	BNXT_ULP_COND_OPC_REGFILE_IS_SET = 8,
+	BNXT_ULP_COND_OPC_REGFILE_NOT_SET = 9,
+	BNXT_ULP_COND_OPC_LAST = 10
 };
 
 enum bnxt_ulp_critical_resource {
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c
index b370da22f7..6ad6263183 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c
@@ -47,7 +47,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -64,7 +64,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_SRC,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -81,7 +81,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_DST,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -146,7 +146,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -195,7 +195,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -244,7 +244,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -261,7 +261,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_SP_SMAC_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_ACT_ENCAP_IPV4_FLAG,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_SEARCH_IF_HIT_SKIP,
@@ -278,7 +278,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_SP_SMAC_IPV6,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_ACT_ENCAP_IPV6_FLAG,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_SEARCH_IF_HIT_SKIP,
@@ -342,7 +342,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -359,7 +359,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_SRC,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -376,7 +376,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_DST,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -441,7 +441,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -459,7 +459,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_INT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -493,7 +493,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_EXT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_NOT_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -511,7 +511,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_EXT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
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 a8f26e8c51..c11d1ad96d 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
@@ -292,7 +292,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_class_tbl_list[] = {
 	{ /* class_tid: 2, stingray, table: l2_cntxt_tcam_vfr_0 */
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -315,7 +315,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_class_tbl_list[] = {
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_CACHE_TYPE_L2_CNTXT_TCAM,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.key_start_idx = 27,
@@ -332,7 +332,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_class_tbl_list[] = {
 	{ /* class_tid: 2, stingray, table: l2_cntxt_tcam_0 */
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -1785,7 +1785,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_stingray_class_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT_ACC,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
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 3a66d59b5d..4fe90d8bb9 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
@@ -98,6 +98,249 @@  uint32_t ulp_act_prop_map_table[] = {
 		BNXT_ULP_ACT_PROP_SZ_LAST
 };
 
+uint8_t ulp_glb_field_tbl[211] = {
+	[0] = 0,
+	[1] = 0,
+	[2] = 0,
+	[3] = 0,
+	[4] = 0,
+	[5] = 0,
+	[6] = 0,
+	[7] = 0,
+	[8] = 0,
+	[9] = 0,
+	[10] = 0,
+	[11] = 0,
+	[12] = 0,
+	[13] = 0,
+	[14] = 0,
+	[15] = 0,
+	[16] = 0,
+	[17] = 0,
+	[18] = 0,
+	[19] = 0,
+	[20] = 0,
+	[21] = 0,
+	[22] = 0,
+	[23] = 0,
+	[24] = 0,
+	[25] = 0,
+	[26] = 0,
+	[27] = 0,
+	[28] = 0,
+	[29] = 0,
+	[30] = 0,
+	[31] = 0,
+	[32] = 0,
+	[33] = 0,
+	[34] = 0,
+	[35] = 0,
+	[36] = 0,
+	[37] = 0,
+	[38] = 0,
+	[39] = 0,
+	[40] = 0,
+	[41] = 0,
+	[42] = 0,
+	[43] = 0,
+	[44] = 0,
+	[45] = 0,
+	[46] = 0,
+	[47] = 0,
+	[48] = 0,
+	[49] = 0,
+	[50] = 0,
+	[51] = 0,
+	[52] = 0,
+	[53] = 0,
+	[54] = 0,
+	[55] = 0,
+	[56] = 0,
+	[57] = 0,
+	[58] = 0,
+	[59] = 0,
+	[60] = 0,
+	[61] = 0,
+	[62] = 0,
+	[63] = 0,
+	[64] = 0,
+	[65] = 0,
+	[66] = 0,
+	[67] = 0,
+	[68] = 0,
+	[69] = 0,
+	[70] = 0,
+	[71] = 0,
+	[72] = 0,
+	[73] = 0,
+	[74] = 0,
+	[75] = 0,
+	[76] = 0,
+	[77] = 0,
+	[78] = 0,
+	[79] = 0,
+	[80] = 0,
+	[81] = 0,
+	[82] = 0,
+	[83] = 0,
+	[84] = 0,
+	[85] = 0,
+	[86] = 0,
+	[87] = 0,
+	[88] = 0,
+	[89] = 0,
+	[90] = 0,
+	[91] = 0,
+	[92] = 0,
+	[93] = 0,
+	[94] = 0,
+	[95] = 0,
+	[96] = 0,
+	[97] = 0,
+	[98] = 0,
+	[99] = 0,
+	[100] = 0,
+	[101] = 0,
+	[102] = 0,
+	[103] = 0,
+	[104] = 0,
+	[105] = 0,
+	[106] = 0,
+	[107] = 0,
+	[108] = 0,
+	[109] = 0,
+	[110] = 0,
+	[111] = 0,
+	[112] = 0,
+	[113] = 0,
+	[114] = 0,
+	[115] = 0,
+	[116] = 0,
+	[117] = 0,
+	[118] = 0,
+	[119] = 0,
+	[120] = 0,
+	[121] = 0,
+	[122] = 0,
+	[123] = 0,
+	[124] = 0,
+	[125] = 0,
+	[126] = 0,
+	[127] = 0,
+	/* svif.index */
+	[128] = 1,
+	/* o_eth.dmac */
+	[129] = 2,
+	[130] = 0,
+	/* o_eth.smac */
+	[131] = 3,
+	[132] = 0,
+	/* o_eth.type */
+	[133] = 4,
+	[134] = 0,
+	/* o_ipv4.ver */
+	[135] = 11,
+	[136] = 0,
+	/* o_ipv4.tos */
+	[137] = 12,
+	[138] = 0,
+	/* o_ipv4.len */
+	[139] = 13,
+	[140] = 0,
+	/* o_ipv4.frag_id */
+	[141] = 14,
+	[142] = 0,
+	/* o_ipv4.frag_off */
+	[143] = 15,
+	[144] = 0,
+	/* o_ipv4.ttl */
+	[145] = 16,
+	[146] = 0,
+	/* o_ipv4.proto_id */
+	[147] = 17,
+	[148] = 0,
+	/* o_ipv4.csum */
+	[149] = 18,
+	[150] = 0,
+	/* o_ipv4.src_addr */
+	[151] = 19,
+	[152] = 0,
+	/* o_ipv4.dst_addr */
+	[153] = 20,
+	[154] = 0,
+	[155] = 0,
+	[156] = 0,
+	[157] = 0,
+	[158] = 0,
+	[159] = 0,
+	[160] = 0,
+	[161] = 0,
+	[162] = 0,
+	[163] = 0,
+	[164] = 0,
+	[165] = 0,
+	[166] = 0,
+	[167] = 0,
+	[168] = 0,
+	[169] = 0,
+	[170] = 0,
+	[171] = 0,
+	[172] = 0,
+	[173] = 0,
+	[174] = 0,
+	/* o_tcp.src_port */
+	[175] = 21,
+	[176] = 0,
+	/* o_tcp.dst_port */
+	[177] = 22,
+	[178] = 0,
+	/* o_tcp.sent_seq */
+	[179] = 23,
+	[180] = 0,
+	/* o_tcp.recv_ack */
+	[181] = 24,
+	[182] = 0,
+	/* o_tcp.data_off */
+	[183] = 25,
+	[184] = 0,
+	/* o_tcp.tcp_flags */
+	[185] = 26,
+	[186] = 0,
+	/* o_tcp.rx_win */
+	[187] = 27,
+	[188] = 0,
+	/* o_tcp.csum */
+	[189] = 28,
+	[190] = 0,
+	/* o_tcp.urp */
+	[191] = 29,
+	[192] = 0,
+	[193] = 0,
+	[194] = 0,
+	[195] = 0,
+	[196] = 0,
+	[197] = 0,
+	[198] = 0,
+	[199] = 0,
+	[200] = 0,
+	/* oo_vlan.cfi_pri */
+	[201] = 5,
+	/* oi_vlan.cfi_pri */
+	[202] = 8,
+	[203] = 0,
+	[204] = 0,
+	/* oo_vlan.vid */
+	[205] = 6,
+	/* oi_vlan.vid */
+	[206] = 9,
+	[207] = 0,
+	[208] = 0,
+	/* oo_vlan.type */
+	[209] = 7,
+	/* oi_vlan.type */
+	[210] = 10
+};
+
 /*
  * This structure has to be indexed based on the rte_flow_action_type that is
  * part of DPDK. The below array is list of parsing functions for each of the
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 684e93f557..a656f3da52 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
@@ -45,4 +45,6 @@  extern struct bnxt_ulp_mapper_tbl_info ulp_stingray_act_tbl_list[];
 
 extern struct
 bnxt_ulp_mapper_result_field_info ulp_stingray_act_result_field_list[];
+
+extern uint8_t ulp_glb_field_tbl[];
 #endif
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c b/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c
index 26eba56516..be6149b9ce 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c
@@ -47,7 +47,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -64,7 +64,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_SRC,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -81,7 +81,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_DST,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -145,7 +145,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -194,7 +194,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -243,7 +243,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -260,7 +260,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_SP_SMAC_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_ACT_ENCAP_IPV4_FLAG,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_SEARCH_IF_HIT_SKIP,
@@ -277,7 +277,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_SP_SMAC_IPV6,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_ACT_ENCAP_IPV6_FLAG,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_SEARCH_IF_HIT_SKIP,
@@ -341,7 +341,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -358,7 +358,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_SRC,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -375,7 +375,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_MODIFY_IPV4,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_SET_IPV4_DST,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -440,7 +440,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -458,7 +458,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_INT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -492,7 +492,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_EXT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_NOT_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -510,7 +510,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_act_tbl_list[] = {
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_NORMAL,
 	.mem_type_opcode = BNXT_ULP_MEM_TYPE_OPCODE_EXECUTE_IF_EXT,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_PUSH_VLAN,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
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 89f1bef75f..f248d33203 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
@@ -292,7 +292,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_class_tbl_list[] = {
 	{ /* class_tid: 2, wh_plus, table: l2_cntxt_tcam_vfr_0 */
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_IS_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -315,7 +315,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_class_tbl_list[] = {
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_CACHE_TYPE_L2_CNTXT_TCAM,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.key_start_idx = 27,
@@ -332,7 +332,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_class_tbl_list[] = {
 	{ /* class_tid: 2, wh_plus, table: l2_cntxt_tcam_0 */
 	.resource_func = BNXT_ULP_RESOURCE_FUNC_TCAM_TABLE,
 	.resource_type = TF_TCAM_TBL_TYPE_L2_CTXT_TCAM_LOW,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_COMP_FIELD_NOT_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_COMP_FIELD_NOT_SET,
 	.cond_operand = BNXT_ULP_CF_IDX_VFR_MODE,
 	.direction = TF_DIR_TX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
@@ -1785,7 +1785,7 @@  struct bnxt_ulp_mapper_tbl_info ulp_wh_plus_class_tbl_list[] = {
 	.resource_type = TF_TBL_TYPE_ACT_STATS_64,
 	.resource_sub_type =
 		BNXT_ULP_RESOURCE_SUB_TYPE_INDEX_TYPE_INT_COUNT_ACC,
-	.cond_opcode = BNXT_ULP_COND_OPCODE_ACTION_BIT_IS_SET,
+	.cond_opcode = BNXT_ULP_COND_OPC_ACTION_BIT_IS_SET,
 	.cond_operand = BNXT_ULP_ACTION_BIT_COUNT,
 	.direction = TF_DIR_RX,
 	.srch_b4_alloc = BNXT_ULP_SEARCH_BEFORE_ALLOC_NO,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
index 167116a2f4..9a15968ea8 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
@@ -149,12 +149,24 @@  extern	uint16_t ulp_act_sig_tbl[];
 extern struct bnxt_ulp_act_match_info ulp_act_match_list[];
 
 /* Device Specific Tables for mapper */
+struct bnxt_ulp_mapper_cond_info {
+	enum bnxt_ulp_cond_opc cond_opcode;
+	uint32_t cond_operand;
+};
+
+struct bnxt_ulp_mapper_cond_list_info {
+	enum bnxt_ulp_cond_list_opc cond_list_opcode;
+	uint32_t cond_start_idx;
+	uint32_t cond_nums;
+};
+
 struct ulp_template_device_tbls {
 	struct bnxt_ulp_mapper_tbl_list_info *tmpl_list;
 	struct bnxt_ulp_mapper_tbl_info *tbl_list;
 	struct bnxt_ulp_mapper_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_cond_info *cond_list;
 };
 
 /* Device specific parameters */
@@ -183,14 +195,16 @@  struct bnxt_ulp_mapper_tbl_list_info {
 	uint32_t		device_name;
 	uint32_t		start_tbl_idx;
 	uint32_t		num_tbls;
+	struct bnxt_ulp_mapper_cond_list_info reject_info;
 };
 
 struct bnxt_ulp_mapper_tbl_info {
 	enum bnxt_ulp_resource_func	resource_func;
 	uint32_t			resource_type; /* TF_ enum type */
 	enum bnxt_ulp_resource_sub_type	resource_sub_type;
-	enum bnxt_ulp_cond_opcode	cond_opcode;
-	uint32_t			cond_operand;
+	struct bnxt_ulp_mapper_cond_list_info execute_info;
+	enum bnxt_ulp_cond_opc cond_opcode;
+	uint32_t cond_operand;
 	enum bnxt_ulp_mem_type_opcode	mem_type_opcode;
 	uint8_t				direction;
 	uint32_t			priority;