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 = ¶ms->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 c8ae924cf0..c70e1c5215 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, ®val)) { + 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, ®val)) { + 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 1abc8ecdd4..ddf82c4abe 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;