From: Shuanglin Wang <[email protected]>

Thor supports offloading MPLS packets and performing drop, forward,
or queue actions for matchied packets.

Signed-off-by: Shuanglin Wang <[email protected]>
Reviewed-by: Kishore Padmanabha <[email protected]>
---
 drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c |   4 +-
 drivers/net/bnxt/tf_ulp/ulp_rte_parser.c      |  52 ++++
 drivers/net/bnxt/tf_ulp/ulp_rte_parser.h      |   5 +
 .../net/bnxt/tf_ulp/ulp_template_db_enum.h    | 239 +++++++++++++++++-
 drivers/net/bnxt/tf_ulp/ulp_template_struct.h |   3 +
 5 files changed, 289 insertions(+), 14 deletions(-)

diff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c 
b/drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c
index 5b9caabe1d..6e1115b985 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c
@@ -297,8 +297,8 @@ struct bnxt_ulp_rte_hdr_info ulp_hdr_info[] = {
        .proto_hdr_func          = NULL
        },
        [RTE_FLOW_ITEM_TYPE_MPLS] = {
-       .hdr_type                = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED,
-       .proto_hdr_func          = NULL
+       .hdr_type                = BNXT_ULP_HDR_TYPE_SUPPORTED,
+       .proto_hdr_func          = ulp_rte_mpls_hdr_handler
        },
        [RTE_FLOW_ITEM_TYPE_GRE] = {
        .hdr_type                = BNXT_ULP_HDR_TYPE_SUPPORTED,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c 
b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c
index bf3a3deb18..af7f8b7ab4 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c
@@ -2159,6 +2159,58 @@ ulp_rte_ecpri_hdr_handler(const struct rte_flow_item 
*item,
        return BNXT_TF_RC_SUCCESS;
 }
 
+/* Function to handle the parsing of RTE Flow item MPLS Header. */
+int32_t
+ulp_rte_mpls_hdr_handler(const struct rte_flow_item *item,
+                        struct ulp_rte_parser_params *params)
+{
+       const struct rte_flow_item_mpls *mpls_spec = item->spec;
+       const struct rte_flow_item_mpls *mpls_mask = item->mask;
+       struct ulp_rte_hdr_bitmap *hdr_bitmap = &params->hdr_bitmap;
+       uint32_t idx = 0;
+       uint32_t size;
+
+       if (unlikely(ulp_rte_prsr_fld_size_validate(params, &idx,
+                                                   
BNXT_ULP_PROTO_HDR_MPLS_NUM))) {
+               BNXT_DRV_DBG(ERR, "Error parsing protocol header");
+               return BNXT_TF_RC_ERROR;
+       }
+
+       if (mpls_spec && !mpls_mask)
+               mpls_mask = &rte_flow_item_mpls_mask;
+
+       if (mpls_spec) {
+               uint8_t spec_label_tc_s[3] = {0};
+               uint8_t mask_label_tc_s[3] = {0};
+               /* right-shift 4 bits */
+               spec_label_tc_s[0] = mpls_spec->label_tc_s[0] >> 4;
+               spec_label_tc_s[1] = mpls_spec->label_tc_s[0] << 4 | 
mpls_spec->label_tc_s[1] >> 4;
+               spec_label_tc_s[2] = mpls_spec->label_tc_s[1] << 4 | 
mpls_spec->label_tc_s[2] >> 4;
+               mask_label_tc_s[0] = mpls_mask->label_tc_s[0] >> 4;
+               mask_label_tc_s[1] = mpls_mask->label_tc_s[0] << 4 | 
mpls_mask->label_tc_s[1] >> 4;
+               mask_label_tc_s[2] = mpls_mask->label_tc_s[1] << 4 | 
mpls_mask->label_tc_s[2] >> 4;
+
+               /* Process mpls label field */
+               size = sizeof(((struct rte_flow_item_mpls *)NULL)->label_tc_s);
+               ulp_rte_prsr_fld_mask(params, &idx, size,
+                                     spec_label_tc_s,
+                                     mask_label_tc_s,
+                                     ULP_PRSR_ACT_DEFAULT);
+
+               /* Process mpls ttl field */
+               size = sizeof(((struct rte_flow_item_mpls *)NULL)->ttl);
+               ulp_rte_prsr_fld_mask(params, &idx, size,
+                                     ulp_deference_struct(mpls_spec, ttl),
+                                     ulp_deference_struct(mpls_mask, ttl),
+                                     ULP_PRSR_ACT_DEFAULT);
+       }
+
+       /* Update the hdr_bitmap with MPLS and cf bitmap*/
+       ULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_T_MPLS);
+       ULP_BITMAP_SET(params->cf_bitmap, BNXT_ULP_CF_BIT_IS_TUNNEL);
+       return BNXT_TF_RC_SUCCESS;
+}
+
 /* Function to handle the parsing of RTE Flow item void Header */
 int32_t
 ulp_rte_void_hdr_handler(const struct rte_flow_item *item __rte_unused,
diff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h 
b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h
index b20cb1ccde..5f451ba404 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h
@@ -164,6 +164,11 @@ int32_t
 ulp_rte_ecpri_hdr_handler(const struct rte_flow_item *item,
                          struct ulp_rte_parser_params *params);
 
+/* Function to handle the parsing of RTE Flow item MPLS Header. */
+int32_t
+ulp_rte_mpls_hdr_handler(const struct rte_flow_item *item,
+                        struct ulp_rte_parser_params *params);
+
 /* Function to handle the parsing of RTE Flow item void Header. */
 int32_t
 ulp_rte_void_hdr_handler(const struct rte_flow_item *item,
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 4e7cb570b0..02534d8fe8 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2014-2024 Broadcom
+ * Copyright(c) 2014-2025 Broadcom
  * All rights reserved.
  */
 
@@ -71,7 +71,8 @@ enum bnxt_ulp_cf_bit {
        BNXT_ULP_CF_BIT_STATIC_VXLAN_IP_PORT = 0x0000000000000800,
        BNXT_ULP_CF_BIT_DYNAMIC_VXLAN_PORT   = 0x0000000000001000,
        BNXT_ULP_CF_BIT_DYNAMIC_GENEVE_PORT  = 0x0000000000002000,
-       BNXT_ULP_CF_BIT_LAST                 = 0x0000000000004000
+       BNXT_ULP_CF_BIT_HOT_UP_SECONDARY     = 0x0000000000004000,
+       BNXT_ULP_CF_BIT_LAST                 = 0x0000000000008000
 };
 
 enum bnxt_ulp_dev_ft {
@@ -117,7 +118,8 @@ enum bnxt_ulp_hdr_bit {
        BNXT_ULP_HDR_BIT_I_L4_FLOW           = 0x0000000200000000,
        BNXT_ULP_HDR_BIT_NON_GENERIC         = 0x0000000400000000,
        BNXT_ULP_HDR_BIT_GENERIC             = 0x0000000800000000,
-       BNXT_ULP_HDR_BIT_LAST                = 0x0000001000000000
+       BNXT_ULP_HDR_BIT_T_MPLS              = 0x0000001000000000,
+       BNXT_ULP_HDR_BIT_LAST                = 0x0000002000000000
 };
 
 enum bnxt_ulp_accept_opc {
@@ -386,7 +388,8 @@ enum bnxt_ulp_enc_field {
        BNXT_ULP_ENC_FIELD_GENEVE_OPT_W3 = 51,
        BNXT_ULP_ENC_FIELD_GENEVE_OPT_W4 = 52,
        BNXT_ULP_ENC_FIELD_GENEVE_OPT_W5 = 53,
-       BNXT_ULP_ENC_FIELD_LAST = 54
+       BNXT_ULP_ENC_FIELD_MPLS_LABEL = 54,
+       BNXT_ULP_ENC_FIELD_LAST = 55
 };
 
 enum bnxt_ulp_fdb_opc {
@@ -479,7 +482,10 @@ enum bnxt_ulp_func_opc {
        BNXT_ULP_FUNC_OPC_COND_LIST = 26,
        BNXT_ULP_FUNC_OPC_PORT_TABLE = 27,
        BNXT_ULP_FUNC_OPC_MTR_ID_TO_STATS_HANDLE = 28,
-       BNXT_ULP_FUNC_OPC_LAST = 29
+       BNXT_ULP_FUNC_OPC_APP_PRIORITY = 29,
+       BNXT_ULP_FUNC_OPC_TCAM_SET_PRIORITY = 30,
+       BNXT_ULP_FUNC_OPC_GET_HA_PRIORITY = 31,
+       BNXT_ULP_FUNC_OPC_LAST = 32
 };
 
 enum bnxt_ulp_func_src {
@@ -511,7 +517,8 @@ enum bnxt_ulp_generic_tbl_opc {
        BNXT_ULP_GENERIC_TBL_OPC_NOT_USED = 0,
        BNXT_ULP_GENERIC_TBL_OPC_READ = 1,
        BNXT_ULP_GENERIC_TBL_OPC_WRITE = 2,
-       BNXT_ULP_GENERIC_TBL_OPC_LAST = 3
+       BNXT_ULP_GENERIC_TBL_OPC_ITERATE = 3,
+       BNXT_ULP_GENERIC_TBL_OPC_LAST = 4
 };
 
 enum bnxt_ulp_glb_rf_idx {
@@ -616,6 +623,18 @@ enum bnxt_ulp_glb_rf_idx {
        BNXT_ULP_GLB_RF_IDX_LAST = 98
 };
 
+enum bnxt_ulp_global_identifier_tbl_opc {
+       BNXT_ULP_GLOBAL_IDENTIFIER_TBL_OPC_NOP = 0,
+       BNXT_ULP_GLOBAL_IDENTIFIER_TBL_OPC_ALLOC = 1,
+       BNXT_ULP_GLOBAL_IDENTIFIER_TBL_OPC_LAST = 2
+};
+
+enum bnxt_ulp_global_idx_tbl_opc {
+       BNXT_ULP_GLOBAL_IDX_TBL_OPC_NOP = 0,
+       BNXT_ULP_GLOBAL_IDX_TBL_OPC_ALLOC = 1,
+       BNXT_ULP_GLOBAL_IDX_TBL_OPC_LAST = 2
+};
+
 enum bnxt_ulp_global_register_tbl_opc {
        BNXT_ULP_GLOBAL_REGISTER_TBL_OPC_NOT_USED = 0,
        BNXT_ULP_GLOBAL_REGISTER_TBL_OPC_WR_REGFILE = 1,
@@ -830,7 +849,13 @@ enum bnxt_ulp_rf_idx {
        BNXT_ULP_RF_IDX_FLOW_CNTR_PTR_MTR = 104,
        BNXT_ULP_RF_IDX_SW_METER_PTR_0 = 105,
        BNXT_ULP_RF_IDX_METER_STATS_HNDL_0 = 106,
-       BNXT_ULP_RF_IDX_LAST = 107
+       BNXT_ULP_RF_IDX_DYN_TUN_TYPE = 107,
+       BNXT_ULP_RF_IDX_DYN_UPAR_TUN = 108,
+       BNXT_ULP_RF_IDX_DYN_UPAR_ID = 109,
+       BNXT_ULP_RF_IDX_GENERIC_TBL_INDEX = 110,
+       BNXT_ULP_RF_IDX_APP_PRIO = 111,
+       BNXT_ULP_RF_IDX_HA_PRIO = 112,
+       BNXT_ULP_RF_IDX_LAST = 113
 };
 
 enum bnxt_ulp_stats_cache_tbl_opc {
@@ -883,7 +908,10 @@ enum bnxt_ulp_feature_bit {
        BNXT_ULP_FEATURE_BIT_PARENT_DMAC = 0x00000001,
        BNXT_ULP_FEATURE_BIT_PORT_DMAC = 0x00000002,
        BNXT_ULP_FEATURE_BIT_MULTI_TUNNEL_FLOW = 0x00000004,
-       BNXT_ULP_FEATURE_BIT_SOCKET_DIRECT = 0x00000008
+       BNXT_ULP_FEATURE_BIT_SOCKET_DIRECT = 0x00000008,
+       BNXT_ULP_FEATURE_BIT_MULTI_INSTANCE = 0x00000010,
+       BNXT_ULP_FEATURE_BIT_SPECIAL_VXLAN = 0x00000020,
+       BNXT_ULP_FEATURE_BIT_HOT_UPGRADE = 0x00000040
 };
 
 enum bnxt_ulp_flow_dir_bitmask {
@@ -909,7 +937,9 @@ enum bnxt_ulp_resource_func {
        BNXT_ULP_RESOURCE_FUNC_GLOBAL_REGISTER_TABLE = 0x8a,
        BNXT_ULP_RESOURCE_FUNC_KEY_RECIPE_TABLE = 0x8b,
        BNXT_ULP_RESOURCE_FUNC_ALLOCATOR_TABLE = 0x8c,
-       BNXT_ULP_RESOURCE_FUNC_STATS_CACHE = 0x8d
+       BNXT_ULP_RESOURCE_FUNC_STATS_CACHE = 0x8d,
+       BNXT_ULP_RESOURCE_FUNC_GLOBAL_IDENTIFIER = 0x8e,
+       BNXT_ULP_RESOURCE_FUNC_GLOBAL_IDX_TBL = 0x8f
 };
 
 enum bnxt_ulp_resource_sub_type {
@@ -951,6 +981,8 @@ enum bnxt_ulp_resource_sub_type {
        BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_PROF_FUNC_CACHE = 28,
        BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_GROUP_MISS_ACTION_CACHE = 29,
        BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_SHARED_METER_STATS_CACHE = 30,
+       BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_HOT_UPGRADE_TCAM_CACHE = 31,
+       BNXT_ULP_RESOURCE_SUB_TYPE_GENERIC_TABLE_GLOBAL_REGFILES_CACHE = 32,
        BNXT_ULP_RESOURCE_SUB_TYPE_ALLOCATOR_TABLE_JUMP_INDEX = 0,
        BNXT_ULP_RESOURCE_SUB_TYPE_VNIC_TABLE_RSS = 0,
        BNXT_ULP_RESOURCE_SUB_TYPE_VNIC_TABLE_QUEUE = 1,
@@ -1374,10 +1406,44 @@ enum ulp_wp_sym {
        ULP_WP_SYM_DECAP_FUNC_THRU_L2 = 11,
        ULP_WP_SYM_DECAP_FUNC_THRU_L3 = 12,
        ULP_WP_SYM_DECAP_FUNC_THRU_L4 = 13,
+       ULP_WP_SYM_DECAP_FUNC_THRU_OL2 = 0,
+       ULP_WP_SYM_DECAP_FUNC_THRU_OL3 = 0,
+       ULP_WP_SYM_DECAP_FUNC_THRU_OL4 = 0,
+       ULP_WP_SYM_DECAP_FUNC_THRU_OTUN = 0,
        ULP_WP_SYM_ECV_VALID_NO = 0,
        ULP_WP_SYM_ECV_VALID_YES = 1,
        ULP_WP_SYM_ECV_CUSTOM_EN_NO = 0,
        ULP_WP_SYM_ECV_CUSTOM_EN_YES = 1,
+       ULP_WP_SYM_ECV_CUSTOM_IPV4_CTRL_ENCREC = 0,
+       ULP_WP_SYM_ECV_CUSTOM_IPV4_CTRL_RSVD = 0,
+       ULP_WP_SYM_ECV_CUSTOM_IPV4_CTRL_INHERIT = 0,
+       ULP_WP_SYM_ECV_CUSTOM_IPV4_CTRL_INCREMENT = 0,
+       ULP_WP_SYM_ECV_SMAC_OVR_USE_SPSMAC = 0,
+       ULP_WP_SYM_ECV_SMAC_OVR_REUSE_IN_L2 = 0,
+       ULP_WP_SYM_ECV_SMAC_OVR_REUSE_TUN_L2 = 0,
+       ULP_WP_SYM_ECV_SMAC_OVR_USE_OUT_L2 = 0,
+       ULP_WP_SYM_ECV_SMAC_OVR_RFU = 0,
+       ULP_WP_SYM_ECV_SMAC_OVR_REUSE_IN_L2_DMAC = 0,
+       ULP_WP_SYM_ECV_SMAC_OVR_REUSE_TUN_L2_DMAC = 0,
+       ULP_WP_SYM_ECV_SMAC_OVR_REUSE_OUT_L2_DMAC = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_ENCREC_VLANS = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_IN_L2_VLANS = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_TUN_L2_VLANS = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_OUT_L2_VLANS = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_IN_VLAN_IN_L2 = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_OUT_VLAN_IN_L2 = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_IN_VLAN_OUT_L2 = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_OUT_VLAN_OUT_L2 = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_ENCREC_DMAC = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_IN_L2_DMAC = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_IN_TUN_DMAC = 0,
+       ULP_WP_SYM_ECV_VLAN_OVR_USE_OUT_L2_DMAC = 0,
+       ULP_WP_SYM_ECV_GRE_SET_K_INCLUDE_OPTIONAL = 0,
+       ULP_WP_SYM_ECV_GRE_SET_K_NONE = 0,
+       ULP_WP_SYM_ECV_IP_TOS_IN_HDR = 0,
+       ULP_WP_SYM_ECV_IP_TOS_ENCREC = 0,
+       ULP_WP_SYM_ECV_IP_TTL_IN_HDR = 0,
+       ULP_WP_SYM_ECV_IP_TTL_ENCREC = 0,
        ULP_WP_SYM_ECV_L2_EN_NO = 0,
        ULP_WP_SYM_ECV_L2_EN_YES = 1,
        ULP_WP_SYM_ECV_VTAG_TYPE_NOP = 0,
@@ -1412,6 +1478,8 @@ enum ulp_wp_sym {
        ULP_WP_SYM_ECV_TUN_TYPE_NGE = 3,
        ULP_WP_SYM_ECV_TUN_TYPE_NVGRE = 4,
        ULP_WP_SYM_ECV_TUN_TYPE_GRE = 5,
+       ULP_WP_SYM_ECV_TUN_TYPE_GA_L4 = 0,
+       ULP_WP_SYM_ECV_TUN_TYPE_GA_TUN = 0,
        ULP_WP_SYM_EEM_ACT_REC_INT = 1,
        ULP_WP_SYM_EEM_EXT_FLOW_CNTR = 0,
        ULP_WP_SYM_UC_ACT_REC = 0,
@@ -1452,6 +1520,7 @@ enum ulp_wp_sym {
        ULP_WP_SYM_DPORT_TUN_TYPE_ECPRI = 4,
        ULP_WP_SYM_DPORT_TUN_TYPE_SRV6 = 5,
        ULP_WP_SYM_DPORT_TUN_TYPE_VXLAN_IPV4 = 6,
+       ULP_WP_SYM_TUN_TYPE_DYN_UPAR = 6,
        ULP_WP_SYM_L3_ECPRI_HDR_SIZE = 0,
        ULP_WP_SYM_L3_ECPRI_HDR_OFFS = 0,
        ULP_WP_SYM_L3_ECPRI_PAT = 0,
@@ -1470,7 +1539,31 @@ enum ulp_wp_sym {
        ULP_WP_SYM_T_ECPRI_ID_MASK = 0,
        ULP_WP_SYM_T_ECPRI_CONTEXT_SIZE = 0,
        ULP_WP_SYM_T_ECPRI_CONTEXT_OFFS = 0,
-       ULP_WP_SYM_T_ECPRI_CONTEXT_MASK = 0
+       ULP_WP_SYM_T_ECPRI_CONTEXT_MASK = 0,
+       ULP_WP_SYM_SRV6_IP_PROTO_IPV6_ROUTE = 0,
+       ULP_WP_SYM_SRV6_IPV6_ENCAP = 0,
+       ULP_WP_SYM_SRV6_HDR_SIZE = 0,
+       ULP_WP_SYM_SRV6_HDR_OFFSET = 0,
+       ULP_WP_SYM_SRV6_V6_ENCAP = 0,
+       ULP_WP_SYM_SRV6_NXT_HDR_EXT_LEN = 0,
+       ULP_WP_SYM_SRV6_8BYTE_UNIT = 0,
+       ULP_WP_SYM_SRV6_8BIT_FLD = 0,
+       ULP_WP_SYM_SRV6_HDR_LEN_OFFSET = 0,
+       ULP_WP_SYM_SRV6_ID_EXTRACTION_LENGTH = 0,
+       ULP_WP_SYM_SRV6_ID_EXTRACTION_OFFSET = 0,
+       ULP_WP_SYM_SRV6_PATTERN = 0,
+       ULP_WP_SYM_SRV6_ID_MASK = 0,
+       ULP_WP_SYM_SRV6_CTXT_EXTRACTION_LENGTH = 0,
+       ULP_WP_SYM_SRV6_CTXT_EXTRACTION_OFFSET = 0,
+       ULP_WP_SYM_SRV6_CTXT_MASK = 0,
+       ULP_WP_SYM_GLB_ID_L2_CNTXT_ID = 0,
+       ULP_WP_SYM_GLB_ID_PROF_FUNC_ID = 1,
+       ULP_WP_SYM_GLB_ID_WC_PROFILE_ID = 2,
+       ULP_WP_SYM_GLB_ID_EM_PROFILE_ID = 3,
+       ULP_WP_SYM_GLB_APP_IDX_TBL_ID = 0,
+       ULP_WP_SYM_GLB_IDX_META_REC_ACT = 4,
+       ULP_WP_SYM_GLB_IDX_META_REC_PROF = 5,
+       ULP_WP_SYM_GLB_IDX_META_REC_LKUP = 6
 };
 
 enum ulp_thor_sym {
@@ -1696,10 +1789,44 @@ enum ulp_thor_sym {
        ULP_THOR_SYM_DECAP_FUNC_THRU_L2 = 11,
        ULP_THOR_SYM_DECAP_FUNC_THRU_L3 = 12,
        ULP_THOR_SYM_DECAP_FUNC_THRU_L4 = 13,
+       ULP_THOR_SYM_DECAP_FUNC_THRU_OL2 = 0,
+       ULP_THOR_SYM_DECAP_FUNC_THRU_OL3 = 0,
+       ULP_THOR_SYM_DECAP_FUNC_THRU_OL4 = 0,
+       ULP_THOR_SYM_DECAP_FUNC_THRU_OTUN = 0,
        ULP_THOR_SYM_ECV_VALID_NO = 0,
        ULP_THOR_SYM_ECV_VALID_YES = 1,
        ULP_THOR_SYM_ECV_CUSTOM_EN_NO = 0,
        ULP_THOR_SYM_ECV_CUSTOM_EN_YES = 1,
+       ULP_THOR_SYM_ECV_CUSTOM_IPV4_CTRL_ENCREC = 0,
+       ULP_THOR_SYM_ECV_CUSTOM_IPV4_CTRL_RSVD = 0,
+       ULP_THOR_SYM_ECV_CUSTOM_IPV4_CTRL_INHERIT = 0,
+       ULP_THOR_SYM_ECV_CUSTOM_IPV4_CTRL_INCREMENT = 0,
+       ULP_THOR_SYM_ECV_SMAC_OVR_USE_SPSMAC = 0,
+       ULP_THOR_SYM_ECV_SMAC_OVR_REUSE_IN_L2 = 0,
+       ULP_THOR_SYM_ECV_SMAC_OVR_REUSE_TUN_L2 = 0,
+       ULP_THOR_SYM_ECV_SMAC_OVR_USE_OUT_L2 = 0,
+       ULP_THOR_SYM_ECV_SMAC_OVR_RFU = 0,
+       ULP_THOR_SYM_ECV_SMAC_OVR_REUSE_IN_L2_DMAC = 0,
+       ULP_THOR_SYM_ECV_SMAC_OVR_REUSE_TUN_L2_DMAC = 0,
+       ULP_THOR_SYM_ECV_SMAC_OVR_REUSE_OUT_L2_DMAC = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_ENCREC_VLANS = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_IN_L2_VLANS = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_TUN_L2_VLANS = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_OUT_L2_VLANS = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_IN_VLAN_IN_L2 = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_OUT_VLAN_IN_L2 = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_IN_VLAN_OUT_L2 = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_OUT_VLAN_OUT_L2 = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_ENCREC_DMAC = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_IN_L2_DMAC = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_IN_TUN_DMAC = 0,
+       ULP_THOR_SYM_ECV_VLAN_OVR_USE_OUT_L2_DMAC = 0,
+       ULP_THOR_SYM_ECV_GRE_SET_K_INCLUDE_OPTIONAL = 0,
+       ULP_THOR_SYM_ECV_GRE_SET_K_NONE = 0,
+       ULP_THOR_SYM_ECV_IP_TOS_IN_HDR = 0,
+       ULP_THOR_SYM_ECV_IP_TOS_ENCREC = 0,
+       ULP_THOR_SYM_ECV_IP_TTL_IN_HDR = 0,
+       ULP_THOR_SYM_ECV_IP_TTL_ENCREC = 0,
        ULP_THOR_SYM_ECV_L2_EN_NO = 0,
        ULP_THOR_SYM_ECV_L2_EN_YES = 1,
        ULP_THOR_SYM_ECV_VTAG_TYPE_NOP = 0,
@@ -1734,6 +1861,8 @@ enum ulp_thor_sym {
        ULP_THOR_SYM_ECV_TUN_TYPE_NGE = 3,
        ULP_THOR_SYM_ECV_TUN_TYPE_NVGRE = 4,
        ULP_THOR_SYM_ECV_TUN_TYPE_GRE = 5,
+       ULP_THOR_SYM_ECV_TUN_TYPE_GA_L4 = 0,
+       ULP_THOR_SYM_ECV_TUN_TYPE_GA_TUN = 0,
        ULP_THOR_SYM_EEM_ACT_REC_INT = 0,
        ULP_THOR_SYM_EEM_EXT_FLOW_CNTR = 0,
        ULP_THOR_SYM_UC_ACT_REC = 0,
@@ -1774,6 +1903,7 @@ enum ulp_thor_sym {
        ULP_THOR_SYM_DPORT_TUN_TYPE_ECPRI = 4,
        ULP_THOR_SYM_DPORT_TUN_TYPE_SRV6 = 5,
        ULP_THOR_SYM_DPORT_TUN_TYPE_VXLAN_IPV4 = 6,
+       ULP_THOR_SYM_TUN_TYPE_DYN_UPAR = 0x12,
        ULP_THOR_SYM_L3_ECPRI_HDR_SIZE = 4,
        ULP_THOR_SYM_L3_ECPRI_HDR_OFFS = 0,
        ULP_THOR_SYM_L3_ECPRI_PAT = 0,
@@ -1792,7 +1922,31 @@ enum ulp_thor_sym {
        ULP_THOR_SYM_T_ECPRI_ID_MASK = 0xffffffff,
        ULP_THOR_SYM_T_ECPRI_CONTEXT_SIZE = 32,
        ULP_THOR_SYM_T_ECPRI_CONTEXT_OFFS = 3,
-       ULP_THOR_SYM_T_ECPRI_CONTEXT_MASK = 0xffffffff
+       ULP_THOR_SYM_T_ECPRI_CONTEXT_MASK = 0xffffffff,
+       ULP_THOR_SYM_SRV6_IP_PROTO_IPV6_ROUTE = 0x2b,
+       ULP_THOR_SYM_SRV6_IPV6_ENCAP = 0x2900,
+       ULP_THOR_SYM_SRV6_HDR_SIZE = 4,
+       ULP_THOR_SYM_SRV6_HDR_OFFSET = 0,
+       ULP_THOR_SYM_SRV6_V6_ENCAP = 3,
+       ULP_THOR_SYM_SRV6_NXT_HDR_EXT_LEN = 0x2900,
+       ULP_THOR_SYM_SRV6_8BYTE_UNIT = 3,
+       ULP_THOR_SYM_SRV6_8BIT_FLD = 8,
+       ULP_THOR_SYM_SRV6_HDR_LEN_OFFSET = 1,
+       ULP_THOR_SYM_SRV6_ID_EXTRACTION_LENGTH = 32,
+       ULP_THOR_SYM_SRV6_ID_EXTRACTION_OFFSET = 3,
+       ULP_THOR_SYM_SRV6_PATTERN = 2,
+       ULP_THOR_SYM_SRV6_ID_MASK = 0xff00ffff,
+       ULP_THOR_SYM_SRV6_CTXT_EXTRACTION_LENGTH = 32,
+       ULP_THOR_SYM_SRV6_CTXT_EXTRACTION_OFFSET = 7,
+       ULP_THOR_SYM_SRV6_CTXT_MASK = 0xffffffff,
+       ULP_THOR_SYM_GLB_ID_L2_CNTXT_ID = 0,
+       ULP_THOR_SYM_GLB_ID_PROF_FUNC_ID = 1,
+       ULP_THOR_SYM_GLB_ID_WC_PROFILE_ID = 2,
+       ULP_THOR_SYM_GLB_ID_EM_PROFILE_ID = 3,
+       ULP_THOR_SYM_GLB_APP_IDX_TBL_ID = 0,
+       ULP_THOR_SYM_GLB_IDX_META_REC_ACT = 4,
+       ULP_THOR_SYM_GLB_IDX_META_REC_PROF = 5,
+       ULP_THOR_SYM_GLB_IDX_META_REC_LKUP = 6
 };
 
 enum ulp_thor2_sym {
@@ -2018,10 +2172,44 @@ enum ulp_thor2_sym {
        ULP_THOR2_SYM_DECAP_FUNC_THRU_L2 = 11,
        ULP_THOR2_SYM_DECAP_FUNC_THRU_L3 = 12,
        ULP_THOR2_SYM_DECAP_FUNC_THRU_L4 = 13,
+       ULP_THOR2_SYM_DECAP_FUNC_THRU_OL2 = 0x14,
+       ULP_THOR2_SYM_DECAP_FUNC_THRU_OL3 = 0x15,
+       ULP_THOR2_SYM_DECAP_FUNC_THRU_OL4 = 0x16,
+       ULP_THOR2_SYM_DECAP_FUNC_THRU_OTUN = 0x17,
        ULP_THOR2_SYM_ECV_VALID_NO = 0,
        ULP_THOR2_SYM_ECV_VALID_YES = 1,
        ULP_THOR2_SYM_ECV_CUSTOM_EN_NO = 0,
        ULP_THOR2_SYM_ECV_CUSTOM_EN_YES = 1,
+       ULP_THOR2_SYM_ECV_CUSTOM_IPV4_CTRL_ENCREC = 0,
+       ULP_THOR2_SYM_ECV_CUSTOM_IPV4_CTRL_RSVD = 1,
+       ULP_THOR2_SYM_ECV_CUSTOM_IPV4_CTRL_INHERIT = 2,
+       ULP_THOR2_SYM_ECV_CUSTOM_IPV4_CTRL_INCREMENT = 3,
+       ULP_THOR2_SYM_ECV_SMAC_OVR_USE_SPSMAC = 0,
+       ULP_THOR2_SYM_ECV_SMAC_OVR_REUSE_IN_L2 = 1,
+       ULP_THOR2_SYM_ECV_SMAC_OVR_REUSE_TUN_L2 = 2,
+       ULP_THOR2_SYM_ECV_SMAC_OVR_USE_OUT_L2 = 3,
+       ULP_THOR2_SYM_ECV_SMAC_OVR_RFU = 4,
+       ULP_THOR2_SYM_ECV_SMAC_OVR_REUSE_IN_L2_DMAC = 5,
+       ULP_THOR2_SYM_ECV_SMAC_OVR_REUSE_TUN_L2_DMAC = 6,
+       ULP_THOR2_SYM_ECV_SMAC_OVR_REUSE_OUT_L2_DMAC = 7,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_ENCREC_VLANS = 0,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_IN_L2_VLANS = 1,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_TUN_L2_VLANS = 0,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_OUT_L2_VLANS = 0,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_IN_VLAN_IN_L2 = 0,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_OUT_VLAN_IN_L2 = 0,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_IN_VLAN_OUT_L2 = 0,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_OUT_VLAN_OUT_L2 = 0,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_ENCREC_DMAC = 0,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_IN_L2_DMAC = 1,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_IN_TUN_DMAC = 2,
+       ULP_THOR2_SYM_ECV_VLAN_OVR_USE_OUT_L2_DMAC = 3,
+       ULP_THOR2_SYM_ECV_GRE_SET_K_INCLUDE_OPTIONAL = 1,
+       ULP_THOR2_SYM_ECV_GRE_SET_K_NONE = 1,
+       ULP_THOR2_SYM_ECV_IP_TOS_IN_HDR = 1,
+       ULP_THOR2_SYM_ECV_IP_TOS_ENCREC = 0,
+       ULP_THOR2_SYM_ECV_IP_TTL_IN_HDR = 1,
+       ULP_THOR2_SYM_ECV_IP_TTL_ENCREC = 0,
        ULP_THOR2_SYM_ECV_L2_EN_NO = 0,
        ULP_THOR2_SYM_ECV_L2_EN_YES = 1,
        ULP_THOR2_SYM_ECV_VTAG_TYPE_NOP = 0,
@@ -2056,6 +2244,8 @@ enum ulp_thor2_sym {
        ULP_THOR2_SYM_ECV_TUN_TYPE_NGE = 3,
        ULP_THOR2_SYM_ECV_TUN_TYPE_NVGRE = 4,
        ULP_THOR2_SYM_ECV_TUN_TYPE_GRE = 5,
+       ULP_THOR2_SYM_ECV_TUN_TYPE_GA_L4 = 6,
+       ULP_THOR2_SYM_ECV_TUN_TYPE_GA_TUN = 7,
        ULP_THOR2_SYM_EEM_ACT_REC_INT = 0,
        ULP_THOR2_SYM_EEM_EXT_FLOW_CNTR = 0,
        ULP_THOR2_SYM_UC_ACT_REC = 0,
@@ -2096,6 +2286,7 @@ enum ulp_thor2_sym {
        ULP_THOR2_SYM_DPORT_TUN_TYPE_ECPRI = 4,
        ULP_THOR2_SYM_DPORT_TUN_TYPE_SRV6 = 5,
        ULP_THOR2_SYM_DPORT_TUN_TYPE_VXLAN_IPV4 = 6,
+       ULP_THOR2_SYM_TUN_TYPE_DYN_UPAR = 0x12,
        ULP_THOR2_SYM_L3_ECPRI_HDR_SIZE = 0,
        ULP_THOR2_SYM_L3_ECPRI_HDR_OFFS = 0,
        ULP_THOR2_SYM_L3_ECPRI_PAT = 0,
@@ -2114,7 +2305,31 @@ enum ulp_thor2_sym {
        ULP_THOR2_SYM_T_ECPRI_ID_MASK = 0,
        ULP_THOR2_SYM_T_ECPRI_CONTEXT_SIZE = 0,
        ULP_THOR2_SYM_T_ECPRI_CONTEXT_OFFS = 0,
-       ULP_THOR2_SYM_T_ECPRI_CONTEXT_MASK = 0
+       ULP_THOR2_SYM_T_ECPRI_CONTEXT_MASK = 0,
+       ULP_THOR2_SYM_SRV6_IP_PROTO_IPV6_ROUTE = 0x2b,
+       ULP_THOR2_SYM_SRV6_IPV6_ENCAP = 0x2900,
+       ULP_THOR2_SYM_SRV6_HDR_SIZE = 4,
+       ULP_THOR2_SYM_SRV6_HDR_OFFSET = 0,
+       ULP_THOR2_SYM_SRV6_V6_ENCAP = 3,
+       ULP_THOR2_SYM_SRV6_NXT_HDR_EXT_LEN = 0x2900,
+       ULP_THOR2_SYM_SRV6_8BYTE_UNIT = 3,
+       ULP_THOR2_SYM_SRV6_8BIT_FLD = 8,
+       ULP_THOR2_SYM_SRV6_HDR_LEN_OFFSET = 1,
+       ULP_THOR2_SYM_SRV6_ID_EXTRACTION_LENGTH = 32,
+       ULP_THOR2_SYM_SRV6_ID_EXTRACTION_OFFSET = 3,
+       ULP_THOR2_SYM_SRV6_PATTERN = 2,
+       ULP_THOR2_SYM_SRV6_ID_MASK = 0xff00ffff,
+       ULP_THOR2_SYM_SRV6_CTXT_EXTRACTION_LENGTH = 32,
+       ULP_THOR2_SYM_SRV6_CTXT_EXTRACTION_OFFSET = 7,
+       ULP_THOR2_SYM_SRV6_CTXT_MASK = 0xffffffff,
+       ULP_THOR2_SYM_GLB_ID_L2_CNTXT_ID = 0,
+       ULP_THOR2_SYM_GLB_ID_PROF_FUNC_ID = 1,
+       ULP_THOR2_SYM_GLB_ID_WC_PROFILE_ID = 2,
+       ULP_THOR2_SYM_GLB_ID_EM_PROFILE_ID = 3,
+       ULP_THOR2_SYM_GLB_APP_IDX_TBL_ID = 0,
+       ULP_THOR2_SYM_GLB_IDX_META_REC_ACT = 4,
+       ULP_THOR2_SYM_GLB_IDX_META_REC_PROF = 5,
+       ULP_THOR2_SYM_GLB_IDX_META_REC_LKUP = 6
 };
 
 #endif
diff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h 
b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
index fbce97269b..5b3e82f336 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h
@@ -34,6 +34,9 @@
 #define BNXT_ULP_PROTO_HDR_GRE_NUM     2
 #define BNXT_ULP_PROTO_HDR_ICMP_NUM    5
 #define BNXT_ULP_PROTO_HDR_ECPRI_NUM   2
+#define        BNXT_ULP_PROTO_HDR_IPV6_EXT_NUM 1
+#define BNXT_ULP_PROTO_HDR_SRV6_NUM    7
+#define BNXT_ULP_PROTO_HDR_MPLS_NUM    2
 #define BNXT_ULP_PROTO_HDR_MAX         128
 #define BNXT_ULP_PROTO_HDR_ENCAP_MAX   64
 #define BNXT_ULP_PROTO_HDR_FIELD_SVIF_IDX      1
-- 
2.39.5 (Apple Git-154)

Reply via email to