From patchwork Sun Jun 13 00:06:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 94123 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BC28CA0C41; Sun, 13 Jun 2021 02:11:16 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1CF45410EB; Sun, 13 Jun 2021 02:07:47 +0200 (CEST) Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) by mails.dpdk.org (Postfix) with ESMTP id 49A3141123 for ; Sun, 13 Jun 2021 02:07:45 +0200 (CEST) Received: by mail-pg1-f172.google.com with SMTP id n12so5595428pgs.13 for ; Sat, 12 Jun 2021 17:07:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version; bh=/ADk+bxXqDWZ7WQy2Vs0CA6dwT2D52IEJ4PTDL9h9SY=; b=UXXRAvBcAYFtU0xbCHmUMUwCQ3/F05IYP7faWfJXRSjkr+ldHwnph32l8pOjSy/bY3 SgaWhnp8X68EZIu9ocKjpIEIgO1zpk/DmvK2gHGz0xOC1tt85pyR8AKpV67vlfjVjHGH 5Sm4CBIsQLbZuARvC/hxvkepldYG9x09K+Q0I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version; bh=/ADk+bxXqDWZ7WQy2Vs0CA6dwT2D52IEJ4PTDL9h9SY=; b=o6TrLd+1BP84znI577AZv9c4AymeKaD+8Uzq2T3rMotlSZDJfLx4vjftVkQ91RADwp Lh6s5DQ1vwZqkJje1zFzAVhYbmIeaWotp0eIoiPZK/jnBrBv/I7JMbaqHE7uP32yJPea +1djdluECfAETQivxqsxKsnngqrdKpg6zNfPVsr6h2ujZXgxc7TvQzSw90xcSJgzP5mY PeS9qqm8SQTP8/jbEVKuX9tx2Gt4kej5g4ndwPGfuB8adpvOoAaUkArh09s7RFsp0Qoh uUb6Zv2JzyHor2nHLZGmoQXL46R71H0Pm1ndOeXzvfu4e0pJrfQWv4d82pTwu9MhndLH umSw== X-Gm-Message-State: AOAM5336acc37oABZT9YJT+N39g4yMiiViyG5QXUeGn47QvyptqiY++w D1hlAx9dMeGIi+t5kji5Y0k1DuqdNnvmhjyXE+GCsnvfU7+yPzGuXWjF5m/J9MSaMeXvq6lq0ei W0Wv3vUp3gVQthIDy9KjjGHmEcyiASAPvt/oQ03UYD3A9U0ilgu1cP1p81TQrj+4= X-Google-Smtp-Source: ABdhPJxHqoOvJty0HWSc6mJ0ZQJdIEC4pG1Hwxn3iboERlbwFvVKRDldE8nDjjmpLKsdDEPWgT/dsQ== X-Received: by 2002:a63:e043:: with SMTP id n3mr6065428pgj.106.1623542863632; Sat, 12 Jun 2021 17:07:43 -0700 (PDT) Received: from localhost.localdomain ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id gg22sm12774609pjb.17.2021.06.12.17.07.40 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 12 Jun 2021 17:07:43 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Cc: Mike Baucom , Venkat Duvvuru , Kishore Padmanabha Date: Sat, 12 Jun 2021 17:06:23 -0700 Message-Id: <20210613000652.28191-30-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) In-Reply-To: <20210613000652.28191-1-ajit.khaparde@broadcom.com> References: <20210530085929.29695-1-venkatkumar.duvvuru@broadcom.com> <20210613000652.28191-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-dev] [PATCH v2 29/58] net/bnxt: add conditional processing of templates X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Mike Baucom 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 Signed-off-by: Venkat Duvvuru Reviewed-by: Kishore Padmanabha Reviewed-by: Ajit Khaparde --- 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(-) 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;