net/bnxt: add conditional processing of templates
authorMike Baucom <michael.baucom@broadcom.com>
Sun, 30 May 2021 08:59:00 +0000 (14:29 +0530)
committerAjit Khaparde <ajit.khaparde@broadcom.com>
Thu, 8 Jul 2021 00:01:58 +0000 (02:01 +0200)
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>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c
drivers/net/bnxt/tf_ulp/ulp_mapper.c
drivers/net/bnxt/tf_ulp/ulp_mapper.h
drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_act.c
drivers/net/bnxt/tf_ulp/ulp_template_db_stingray_class.c
drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.c
drivers/net/bnxt/tf_ulp/ulp_template_db_tbl.h
drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_act.c
drivers/net/bnxt/tf_ulp/ulp_template_db_wh_plus_class.c
drivers/net/bnxt/tf_ulp/ulp_template_struct.h

index 777a6ba..ddf38ed 100644 (file)
@@ -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. */
index c8ae924..c70e1c5 100644 (file)
@@ -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) {
index 8422f44..8bc6cdb 100644 (file)
@@ -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;
index f16651a..e4b8c56 100644 (file)
@@ -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 {
index b370da2..6ad6263 100644 (file)
@@ -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,
index a8f26e8..c11d1ad 100644 (file)
@@ -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,
index 3a66d59..4fe90d8 100644 (file)
@@ -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
index 684e93f..a656f3d 100644 (file)
@@ -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
index 26eba56..be6149b 100644 (file)
@@ -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,
index 1abc8ec..ddf82c4 100644 (file)
@@ -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,
index 167116a..9a15968 100644 (file)
@@ -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;