1313ac35aSVenkat Duvvuru /* SPDX-License-Identifier: BSD-3-Clause 2d9e70b1dSRandy Schacher * Copyright(c) 2014-2023 Broadcom 3313ac35aSVenkat Duvvuru * All rights reserved. 4313ac35aSVenkat Duvvuru */ 5313ac35aSVenkat Duvvuru 6313ac35aSVenkat Duvvuru #ifndef _ULP_TEMPLATE_STRUCT_H_ 7313ac35aSVenkat Duvvuru #define _ULP_TEMPLATE_STRUCT_H_ 8313ac35aSVenkat Duvvuru 9313ac35aSVenkat Duvvuru #include <stdint.h> 10313ac35aSVenkat Duvvuru #include "rte_ether.h" 11313ac35aSVenkat Duvvuru #include "rte_icmp.h" 12313ac35aSVenkat Duvvuru #include "rte_ip.h" 13313ac35aSVenkat Duvvuru #include "rte_tcp.h" 14313ac35aSVenkat Duvvuru #include "rte_udp.h" 15313ac35aSVenkat Duvvuru #include "rte_esp.h" 16313ac35aSVenkat Duvvuru #include "rte_sctp.h" 17313ac35aSVenkat Duvvuru #include "rte_flow.h" 18313ac35aSVenkat Duvvuru #include "tf_core.h" 19dd0191d5SShuanglin Wang #include "cfa_resources.h" 20*2aa70990SKishore Padmanabha #include "cfa_types.h" 21313ac35aSVenkat Duvvuru 2253a0d4f7SKishore Padmanabha /* Number of fields for each protocol */ 23a2417601SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_SVIF_NUM 2 2453a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_ETH_NUM 3 2553a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_S_VLAN_NUM 3 2653a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_VLAN_NUM 6 2753a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_IPV4_NUM 10 288d9978d7SVenkat Duvvuru #define BNXT_ULP_PROTO_HDR_IPV6_NUM 8 2953a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_UDP_NUM 4 3053a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_TCP_NUM 9 3153a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_VXLAN_NUM 4 3274cab005SRandy Schacher #define BNXT_ULP_PROTO_HDR_VXLAN_GPE_NUM 5 33dd0191d5SShuanglin Wang #define BNXT_ULP_PROTO_HDR_GENEVE_NUM 4 3432580839SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_GRE_NUM 2 353fe124d2SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_ICMP_NUM 5 362d344c36SRandy Schacher #define BNXT_ULP_PROTO_HDR_ECPRI_NUM 2 3753a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_MAX 128 38f63aa27dSKishore Padmanabha #define BNXT_ULP_PROTO_HDR_ENCAP_MAX 64 39a2417601SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_FIELD_SVIF_IDX 1 4053a0d4f7SKishore Padmanabha 4177b359eeSKishore Padmanabha /* Direction attributes */ 4277b359eeSKishore Padmanabha #define BNXT_ULP_FLOW_ATTR_TRANSFER 0x1 4377b359eeSKishore Padmanabha #define BNXT_ULP_FLOW_ATTR_INGRESS 0x2 4477b359eeSKishore Padmanabha #define BNXT_ULP_FLOW_ATTR_EGRESS 0x4 4577b359eeSKishore Padmanabha 468f153057SMike Baucom struct ulp_rte_hdr_bitmap { 478f153057SMike Baucom uint64_t bits; 488f153057SMike Baucom }; 498f153057SMike Baucom 502bbcdee8SKishore Padmanabha struct ulp_rte_field_bitmap { 512bbcdee8SKishore Padmanabha uint64_t bits; 522bbcdee8SKishore Padmanabha }; 532bbcdee8SKishore Padmanabha 54ae905028SMike Baucom /* Structure to store the protocol fields */ 55ae905028SMike Baucom #define RTE_PARSER_FLOW_HDR_FIELD_SIZE 16 56ae905028SMike Baucom struct ulp_rte_hdr_field { 57ae905028SMike Baucom uint8_t spec[RTE_PARSER_FLOW_HDR_FIELD_SIZE]; 58ae905028SMike Baucom uint8_t mask[RTE_PARSER_FLOW_HDR_FIELD_SIZE]; 59ae905028SMike Baucom uint32_t size; 60ae905028SMike Baucom }; 61ae905028SMike Baucom 623d6ba7cbSKishore Padmanabha struct ulp_rte_act_bitmap { 633d6ba7cbSKishore Padmanabha uint64_t bits; 643d6ba7cbSKishore Padmanabha }; 653d6ba7cbSKishore Padmanabha 663d6ba7cbSKishore Padmanabha /* Structure to hold the action property details. */ 673d6ba7cbSKishore Padmanabha struct ulp_rte_act_prop { 683d6ba7cbSKishore Padmanabha uint8_t act_details[BNXT_ULP_ACT_PROP_IDX_LAST]; 693d6ba7cbSKishore Padmanabha }; 703d6ba7cbSKishore Padmanabha 713d6ba7cbSKishore Padmanabha /* Structure to be used for passing all the parser functions */ 723d6ba7cbSKishore Padmanabha struct ulp_rte_parser_params { 733d6ba7cbSKishore Padmanabha struct ulp_rte_hdr_bitmap hdr_bitmap; 74f63aa27dSKishore Padmanabha struct ulp_rte_hdr_bitmap enc_hdr_bitmap; 750c0f5a98SKishore Padmanabha struct ulp_rte_hdr_bitmap hdr_fp_bit; 762bbcdee8SKishore Padmanabha struct ulp_rte_field_bitmap fld_bitmap; 77741172beSKishore Padmanabha struct ulp_rte_field_bitmap fld_s_bitmap; 783d6ba7cbSKishore Padmanabha struct ulp_rte_hdr_field hdr_field[BNXT_ULP_PROTO_HDR_MAX]; 79f63aa27dSKishore Padmanabha struct ulp_rte_hdr_field enc_field[BNXT_ULP_PROTO_HDR_ENCAP_MAX]; 801993b267SShahaji Bhosle uint64_t comp_fld[BNXT_ULP_CF_IDX_LAST]; 813d6ba7cbSKishore Padmanabha uint32_t field_idx; 823d6ba7cbSKishore Padmanabha struct ulp_rte_act_bitmap act_bitmap; 833d6ba7cbSKishore Padmanabha struct ulp_rte_act_prop act_prop; 8477b359eeSKishore Padmanabha uint32_t dir_attr; 85675e31d8SVenkat Duvvuru uint32_t priority; 86675e31d8SVenkat Duvvuru uint32_t fid; 87675e31d8SVenkat Duvvuru uint32_t parent_flow; 88bdf4a3c6SKishore Padmanabha uint32_t child_flow; 89675e31d8SVenkat Duvvuru uint16_t func_id; 907891de8dSVenkat Duvvuru uint16_t port_id; 91675e31d8SVenkat Duvvuru uint32_t class_id; 92675e31d8SVenkat Duvvuru uint32_t act_tmpl; 93dc8ee812SKishore Padmanabha struct bnxt_ulp_context *ulp_ctx; 94a2417601SKishore Padmanabha uint32_t hdr_sig_id; 95bdf4a3c6SKishore Padmanabha uint64_t flow_sig_id; 96255add67SKishore Padmanabha uint32_t flow_pattern_id; 97255add67SKishore Padmanabha uint32_t act_pattern_id; 985b73c859SKishore Padmanabha uint8_t app_id; 99bdf4a3c6SKishore Padmanabha uint8_t tun_idx; 100dd0191d5SShuanglin Wang uint16_t class_info_idx; 101dd0191d5SShuanglin Wang uint64_t wc_field_bitmap; 102dd0191d5SShuanglin Wang uint64_t cf_bitmap; 103dd0191d5SShuanglin Wang uint64_t exclude_field_bitmap; 1043d6ba7cbSKishore Padmanabha }; 1053d6ba7cbSKishore Padmanabha 10653a0d4f7SKishore Padmanabha /* Flow Parser Header Information Structure */ 10753a0d4f7SKishore Padmanabha struct bnxt_ulp_rte_hdr_info { 10853a0d4f7SKishore Padmanabha enum bnxt_ulp_hdr_type hdr_type; 10953a0d4f7SKishore Padmanabha /* Flow Parser Protocol Header Function Prototype */ 11053a0d4f7SKishore Padmanabha int (*proto_hdr_func)(const struct rte_flow_item *item_list, 1113d6ba7cbSKishore Padmanabha struct ulp_rte_parser_params *params); 11253a0d4f7SKishore Padmanabha }; 11353a0d4f7SKishore Padmanabha 11453a0d4f7SKishore Padmanabha /* Flow Parser Header Information Structure Array defined in template source*/ 11553a0d4f7SKishore Padmanabha extern struct bnxt_ulp_rte_hdr_info ulp_hdr_info[]; 116bdf4a3c6SKishore Padmanabha extern struct bnxt_ulp_rte_hdr_info ulp_vendor_hdr_info[]; 11753a0d4f7SKishore Padmanabha 11811c854e2SKishore Padmanabha /* Flow Parser Action Information Structure */ 11911c854e2SKishore Padmanabha struct bnxt_ulp_rte_act_info { 12011c854e2SKishore Padmanabha enum bnxt_ulp_act_type act_type; 12111c854e2SKishore Padmanabha /* Flow Parser Protocol Action Function Prototype */ 12211c854e2SKishore Padmanabha int32_t (*proto_act_func) 12311c854e2SKishore Padmanabha (const struct rte_flow_action *action_item, 1243d6ba7cbSKishore Padmanabha struct ulp_rte_parser_params *params); 12511c854e2SKishore Padmanabha }; 12611c854e2SKishore Padmanabha 12711c854e2SKishore Padmanabha /* Flow Parser Action Information Structure Array defined in template source*/ 12811c854e2SKishore Padmanabha extern struct bnxt_ulp_rte_act_info ulp_act_info[]; 129bdf4a3c6SKishore Padmanabha extern struct bnxt_ulp_rte_act_info ulp_vendor_act_info[]; 13011c854e2SKishore Padmanabha 131c7520059SKishore Padmanabha /* Flow Matcher structures */ 132c7520059SKishore Padmanabha struct bnxt_ulp_header_match_info { 133c7520059SKishore Padmanabha struct ulp_rte_hdr_bitmap hdr_bitmap; 134c7520059SKishore Padmanabha uint32_t start_idx; 135c7520059SKishore Padmanabha uint32_t num_entries; 136c7520059SKishore Padmanabha uint32_t class_tmpl_id; 137c7520059SKishore Padmanabha uint32_t act_vnic; 138c7520059SKishore Padmanabha }; 139c7520059SKishore Padmanabha 1402bbcdee8SKishore Padmanabha struct ulp_rte_bitmap { 1412bbcdee8SKishore Padmanabha uint64_t bits; 1422bbcdee8SKishore Padmanabha }; 143c7520059SKishore Padmanabha 1442bbcdee8SKishore Padmanabha struct bnxt_ulp_class_match_info { 1452bbcdee8SKishore Padmanabha struct ulp_rte_bitmap hdr_sig; 1462bbcdee8SKishore Padmanabha struct ulp_rte_bitmap field_sig; 1472bbcdee8SKishore Padmanabha uint32_t class_hid; 1482bbcdee8SKishore Padmanabha uint32_t class_tid; 1492bbcdee8SKishore Padmanabha uint8_t act_vnic; 1502bbcdee8SKishore Padmanabha uint8_t wc_pri; 1515b73c859SKishore Padmanabha uint8_t app_sig; 152a2417601SKishore Padmanabha uint32_t hdr_sig_id; 153bdf4a3c6SKishore Padmanabha uint64_t flow_sig_id; 154255add67SKishore Padmanabha uint32_t flow_pattern_id; 155dd0191d5SShuanglin Wang uint8_t app_id; 156dd0191d5SShuanglin Wang struct ulp_rte_bitmap hdr_bitmap; 157dd0191d5SShuanglin Wang uint64_t field_man_bitmap; 158dd0191d5SShuanglin Wang uint64_t field_opt_bitmap; 159dd0191d5SShuanglin Wang uint64_t field_exclude_bitmap; 160dd0191d5SShuanglin Wang uint8_t field_list[BNXT_ULP_GLB_FIELD_TBL_SIZE + 1]; 1612bbcdee8SKishore Padmanabha }; 1622bbcdee8SKishore Padmanabha 1632bbcdee8SKishore Padmanabha /* Flow Matcher templates Structure for class entries */ 1642bbcdee8SKishore Padmanabha extern uint16_t ulp_class_sig_tbl[]; 1652bbcdee8SKishore Padmanabha extern struct bnxt_ulp_class_match_info ulp_class_match_list[]; 166c7520059SKishore Padmanabha 16700fa81b7SKishore Padmanabha /* Flow Matcher Action structures */ 16800fa81b7SKishore Padmanabha struct bnxt_ulp_action_match_info { 16900fa81b7SKishore Padmanabha struct ulp_rte_act_bitmap act_bitmap; 17000fa81b7SKishore Padmanabha uint32_t act_tmpl_id; 17100fa81b7SKishore Padmanabha }; 17200fa81b7SKishore Padmanabha 1732bbcdee8SKishore Padmanabha struct bnxt_ulp_act_match_info { 174dd0191d5SShuanglin Wang struct ulp_rte_bitmap act_bitmap; 1752bbcdee8SKishore Padmanabha uint32_t act_tid; 1762bbcdee8SKishore Padmanabha }; 1772bbcdee8SKishore Padmanabha 1782bbcdee8SKishore Padmanabha /* Flow Matcher templates Structure for action entries */ 1792bbcdee8SKishore Padmanabha extern uint16_t ulp_act_sig_tbl[]; 1802bbcdee8SKishore Padmanabha extern struct bnxt_ulp_act_match_info ulp_act_match_list[]; 18100fa81b7SKishore Padmanabha 182a4638284SMike Baucom /* Device Specific Tables for mapper */ 183c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_info { 184c5d06df4SMike Baucom enum bnxt_ulp_cond_opc cond_opcode; 185d9e70b1dSRandy Schacher uint64_t cond_operand; 186c5d06df4SMike Baucom }; 187c5d06df4SMike Baucom 188c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_list_info { 189c5d06df4SMike Baucom enum bnxt_ulp_cond_list_opc cond_list_opcode; 190c5d06df4SMike Baucom uint32_t cond_start_idx; 191c5d06df4SMike Baucom uint32_t cond_nums; 192255add67SKishore Padmanabha int32_t cond_true_goto; 193255add67SKishore Padmanabha int32_t cond_false_goto; 194c5d06df4SMike Baucom }; 195c5d06df4SMike Baucom 1961993b267SShahaji Bhosle struct bnxt_ulp_mapper_func_info { 1971993b267SShahaji Bhosle enum bnxt_ulp_func_opc func_opc; 1981993b267SShahaji Bhosle enum bnxt_ulp_func_src func_src1; 1991993b267SShahaji Bhosle enum bnxt_ulp_func_src func_src2; 200dd0191d5SShuanglin Wang uint64_t func_opr1; 201dd0191d5SShuanglin Wang uint64_t func_opr2; 2021993b267SShahaji Bhosle uint16_t func_dst_opr; 20332bdbf44SKishore Padmanabha uint32_t func_oper_size; 204741172beSKishore Padmanabha }; 205741172beSKishore Padmanabha 2069cbfa4cfSKishore Padmanabha struct bnxt_ulp_template_device_tbls { 2079cbfa4cfSKishore Padmanabha struct bnxt_ulp_mapper_tmpl_info *tmpl_list; 208a2417601SKishore Padmanabha uint32_t tmpl_list_size; 2090c9fe336SMike Baucom struct bnxt_ulp_mapper_tbl_info *tbl_list; 210a2417601SKishore Padmanabha uint32_t tbl_list_size; 211a2417601SKishore Padmanabha struct bnxt_ulp_mapper_key_info *key_info_list; 212a2417601SKishore Padmanabha uint32_t key_info_list_size; 213dd0191d5SShuanglin Wang struct bnxt_ulp_mapper_field_info *key_ext_list; 214dd0191d5SShuanglin Wang uint32_t key_ext_list_size; 215a2417601SKishore Padmanabha struct bnxt_ulp_mapper_field_info *result_field_list; 216a2417601SKishore Padmanabha uint32_t result_field_list_size; 217a4638284SMike Baucom struct bnxt_ulp_mapper_ident_info *ident_list; 218a2417601SKishore Padmanabha uint32_t ident_list_size; 219c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_info *cond_list; 220a2417601SKishore Padmanabha uint32_t cond_list_size; 221dd0191d5SShuanglin Wang struct bnxt_ulp_mapper_cond_list_info *cond_oper_list; 222dd0191d5SShuanglin Wang uint32_t cond_oper_list_size; 223dd0191d5SShuanglin Wang 224a4638284SMike Baucom }; 225a4638284SMike Baucom 226dbd29c42SKishore Padmanabha struct bnxt_ulp_dyn_size_map { 227dbd29c42SKishore Padmanabha uint32_t slab_size; 228dbd29c42SKishore Padmanabha enum tf_tbl_type tbl_type; 229dbd29c42SKishore Padmanabha }; 230dbd29c42SKishore Padmanabha 231696843ccSMike Baucom /* Device specific parameters */ 232313ac35aSVenkat Duvvuru struct bnxt_ulp_device_params { 233313ac35aSVenkat Duvvuru uint8_t description[16]; 234f63aa27dSKishore Padmanabha enum bnxt_ulp_byte_order key_byte_order; 235f63aa27dSKishore Padmanabha enum bnxt_ulp_byte_order result_byte_order; 236f63aa27dSKishore Padmanabha enum bnxt_ulp_byte_order encap_byte_order; 2371f7f7c3cSKishore Padmanabha enum bnxt_ulp_byte_order wc_key_byte_order; 2382730e7f9SKishore Padmanabha enum bnxt_ulp_byte_order em_byte_order; 239313ac35aSVenkat Duvvuru uint8_t encap_byte_swap; 240cd01ecffSKishore Padmanabha uint8_t num_phy_ports; 241cd01ecffSKishore Padmanabha uint32_t mark_db_lfid_entries; 242cd01ecffSKishore Padmanabha uint64_t mark_db_gfid_entries; 243191f19ceSMike Baucom uint64_t int_flow_db_num_entries; 244191f19ceSMike Baucom uint64_t ext_flow_db_num_entries; 245cd01ecffSKishore Padmanabha uint32_t flow_count_db_entries; 246f4a4421cSKishore Padmanabha uint32_t fdb_parent_flow_entries; 247313ac35aSVenkat Duvvuru uint32_t num_resources_per_flow; 248bbc5f1a0SKishore Padmanabha uint32_t ext_cntr_table_type; 249bbc5f1a0SKishore Padmanabha uint64_t byte_count_mask; 250bbc5f1a0SKishore Padmanabha uint64_t packet_count_mask; 251bbc5f1a0SKishore Padmanabha uint32_t byte_count_shift; 252bbc5f1a0SKishore Padmanabha uint32_t packet_count_shift; 253d9e70b1dSRandy Schacher uint32_t wc_dynamic_pad_en; 254d9e70b1dSRandy Schacher uint32_t em_dynamic_pad_en; 255dbd29c42SKishore Padmanabha uint32_t dynamic_sram_en; 256dbd29c42SKishore Padmanabha uint32_t dyn_encap_list_size; 257d9e70b1dSRandy Schacher struct bnxt_ulp_dyn_size_map dyn_encap_sizes[5]; 258dbd29c42SKishore Padmanabha uint32_t dyn_modify_list_size; 259dbd29c42SKishore Padmanabha struct bnxt_ulp_dyn_size_map dyn_modify_sizes[4]; 2603fe124d2SKishore Padmanabha uint16_t em_blk_size_bits; 2613fe124d2SKishore Padmanabha uint16_t em_blk_align_bits; 2623fe124d2SKishore Padmanabha uint16_t em_key_align_bytes; 2633fe124d2SKishore Padmanabha uint16_t em_result_size_bits; 2643fe124d2SKishore Padmanabha uint16_t wc_slice_width; 2653fe124d2SKishore Padmanabha uint16_t wc_max_slices; 2663fe124d2SKishore Padmanabha uint32_t wc_mode_list[4]; 2673fe124d2SKishore Padmanabha uint32_t wc_mod_list_max_size; 2683fe124d2SKishore Padmanabha uint32_t wc_ctl_size_bits; 26949cdf043SKishore Padmanabha uint32_t dev_features; 270dd0191d5SShuanglin Wang const struct bnxt_ulp_generic_tbl_params *gen_tbl_params; 27183f916bdSKishore Padmanabha const struct bnxt_ulp_allocator_tbl_params *allocator_tbl_params; 2729cbfa4cfSKishore Padmanabha const struct bnxt_ulp_template_device_tbls *dev_tbls; 273313ac35aSVenkat Duvvuru }; 274313ac35aSVenkat Duvvuru 2758f153057SMike Baucom /* Flow Mapper */ 2769cbfa4cfSKishore Padmanabha struct bnxt_ulp_mapper_tmpl_info { 2778f153057SMike Baucom uint32_t device_name; 2788f153057SMike Baucom uint32_t start_tbl_idx; 2798f153057SMike Baucom uint32_t num_tbls; 280c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_list_info reject_info; 2818f153057SMike Baucom }; 2828f153057SMike Baucom 2838608c099SKishore Padmanabha struct bnxt_ulp_mapper_tbl_info { 284ae905028SMike Baucom enum bnxt_ulp_resource_func resource_func; 285642feef8SKishore Padmanabha uint32_t resource_type; /* TF_ enum type */ 286642feef8SKishore Padmanabha enum bnxt_ulp_resource_sub_type resource_sub_type; 287c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_list_info execute_info; 2881993b267SShahaji Bhosle struct bnxt_ulp_mapper_func_info func_info; 289c5d06df4SMike Baucom enum bnxt_ulp_cond_opc cond_opcode; 2904c4e86faSKishore Padmanabha uint32_t cond_operand; 291ae905028SMike Baucom uint8_t direction; 2929cbfa4cfSKishore Padmanabha enum bnxt_ulp_pri_opc pri_opcode; 2939cbfa4cfSKishore Padmanabha uint32_t pri_operand; 294a2417601SKishore Padmanabha 295a2417601SKishore Padmanabha /* conflict resolution opcode */ 296a2417601SKishore Padmanabha enum bnxt_ulp_accept_opc accept_opcode; 297a2417601SKishore Padmanabha 298f4875133SKishore Padmanabha enum bnxt_ulp_critical_resource critical_resource; 299ae905028SMike Baucom 300af50070eSKishore Padmanabha /* Information for accessing the key in ulp_key_field_list */ 301ae905028SMike Baucom uint32_t key_start_idx; 302ae905028SMike Baucom uint16_t key_bit_size; 303ae905028SMike Baucom uint16_t key_num_fields; 304af50070eSKishore Padmanabha 305af50070eSKishore Padmanabha /* Information for accessing the partial key in ulp_key_field_list */ 306af50070eSKishore Padmanabha uint32_t partial_key_start_idx; 307af50070eSKishore Padmanabha uint16_t partial_key_bit_size; 308af50070eSKishore Padmanabha uint16_t partial_key_num_fields; 309af50070eSKishore Padmanabha 310ae905028SMike Baucom /* Size of the blob that holds the key */ 311ae905028SMike Baucom uint16_t blob_key_bit_size; 312f63aa27dSKishore Padmanabha uint16_t record_size; 313ae905028SMike Baucom 314ae905028SMike Baucom /* Information for accessing the ulp_class_result_field_list */ 315ae905028SMike Baucom uint32_t result_start_idx; 316ae905028SMike Baucom uint16_t result_bit_size; 317ae905028SMike Baucom uint16_t result_num_fields; 3188608c099SKishore Padmanabha uint16_t encap_num_fields; 319ae905028SMike Baucom 320ae905028SMike Baucom /* Information for accessing the ulp_ident_list */ 321ae905028SMike Baucom uint32_t ident_start_idx; 322ae905028SMike Baucom uint16_t ident_nums; 323ae905028SMike Baucom 3249cbfa4cfSKishore Padmanabha enum bnxt_ulp_mark_db_opc mark_db_opcode; 325f634204bSKishore Padmanabha 326f634204bSKishore Padmanabha /* Table opcode for table operations */ 327f634204bSKishore Padmanabha uint32_t tbl_opcode; 3285952b1ccSKishore Padmanabha uint32_t tbl_operand; 3290001cc58SKishore Padmanabha enum bnxt_ulp_generic_tbl_lkup_type gen_tbl_lkup_type; 3300117293cSKishore Padmanabha 3310117293cSKishore Padmanabha /* FDB table opcode */ 3320117293cSKishore Padmanabha enum bnxt_ulp_fdb_opc fdb_opcode; 333a2417601SKishore Padmanabha uint32_t fdb_operand; 33419994cc7SKishore Padmanabha 335d9e70b1dSRandy Schacher /* Manage ref_cnt via opcode for generic tables */ 336d9e70b1dSRandy Schacher enum bnxt_ulp_ref_cnt_opc ref_cnt_opcode; 337d9e70b1dSRandy Schacher 33819994cc7SKishore Padmanabha /* Shared session */ 339d9e70b1dSRandy Schacher enum bnxt_ulp_session_type session_type; 340*2aa70990SKishore Padmanabha enum cfa_track_type track_type; 341dd0191d5SShuanglin Wang 342dd0191d5SShuanglin Wang /* Key recipes for generic templates */ 343dd0191d5SShuanglin Wang enum bnxt_ulp_key_recipe_opc key_recipe_opcode; 344dd0191d5SShuanglin Wang uint32_t key_recipe_operand; 345dd0191d5SShuanglin Wang 346dd0191d5SShuanglin Wang /* control table messages */ 347dd0191d5SShuanglin Wang const char *false_message; 348dd0191d5SShuanglin Wang const char *true_message; 34994dbd6cfSKishore Padmanabha const char *description; 350ae905028SMike Baucom }; 351ae905028SMike Baucom 352a2417601SKishore Padmanabha struct bnxt_ulp_mapper_field_info { 3532bbcdee8SKishore Padmanabha uint8_t description[64]; 354ae905028SMike Baucom uint16_t field_bit_size; 3556167c20cSKishore Padmanabha enum bnxt_ulp_field_opc field_opc; 35659ae4961SKishore Padmanabha enum bnxt_ulp_field_src field_src1; 35759ae4961SKishore Padmanabha uint8_t field_opr1[16]; 35859ae4961SKishore Padmanabha enum bnxt_ulp_field_src field_src2; 35959ae4961SKishore Padmanabha uint8_t field_opr2[16]; 360286569d5SKishore Padmanabha enum bnxt_ulp_field_src field_src3; 361286569d5SKishore Padmanabha uint8_t field_opr3[16]; 362ae905028SMike Baucom }; 363ae905028SMike Baucom 364a2417601SKishore Padmanabha struct bnxt_ulp_mapper_key_info { 365a2417601SKishore Padmanabha struct bnxt_ulp_mapper_field_info field_info_spec; 366a2417601SKishore Padmanabha struct bnxt_ulp_mapper_field_info field_info_mask; 367696843ccSMike Baucom }; 368696843ccSMike Baucom 369ae905028SMike Baucom struct bnxt_ulp_mapper_ident_info { 3702bbcdee8SKishore Padmanabha uint8_t description[64]; 371ae905028SMike Baucom uint32_t resource_func; 372ae905028SMike Baucom 373ae905028SMike Baucom uint16_t ident_type; 374ae905028SMike Baucom uint16_t ident_bit_size; 375ae905028SMike Baucom uint16_t ident_bit_pos; 376a2417601SKishore Padmanabha enum bnxt_ulp_rf_idx regfile_idx; 377ae905028SMike Baucom }; 378ae905028SMike Baucom 379bfcaae8fSKishore Padmanabha struct bnxt_ulp_glb_resource_info { 380c6062ec0SMike Baucom uint8_t app_id; 381741172beSKishore Padmanabha enum bnxt_ulp_device_id device_id; 382c6062ec0SMike Baucom enum tf_dir direction; 383d9e70b1dSRandy Schacher enum bnxt_ulp_session_type session_type; 384bfcaae8fSKishore Padmanabha enum bnxt_ulp_resource_func resource_func; 385bfcaae8fSKishore Padmanabha uint32_t resource_type; /* TF_ enum type */ 386a2417601SKishore Padmanabha enum bnxt_ulp_glb_rf_idx glb_regfile_index; 387c6062ec0SMike Baucom }; 388c6062ec0SMike Baucom 389c6062ec0SMike Baucom struct bnxt_ulp_resource_resv_info { 390c6062ec0SMike Baucom uint8_t app_id; 391c6062ec0SMike Baucom enum bnxt_ulp_device_id device_id; 392072cb4a8SMike Baucom enum tf_dir direction; 393d9e70b1dSRandy Schacher enum bnxt_ulp_session_type session_type; 394c6062ec0SMike Baucom enum bnxt_ulp_resource_func resource_func; 395c6062ec0SMike Baucom uint32_t resource_type; /* TF_ enum type */ 396c6062ec0SMike Baucom uint32_t count; 397c6062ec0SMike Baucom }; 398c6062ec0SMike Baucom 399c6062ec0SMike Baucom struct bnxt_ulp_app_capabilities_info { 400c6062ec0SMike Baucom uint8_t app_id; 40174cab005SRandy Schacher uint32_t default_priority; 40222b65613SKishore Padmanabha uint32_t max_def_priority; 40322b65613SKishore Padmanabha uint32_t min_flow_priority; 40422b65613SKishore Padmanabha uint32_t max_flow_priority; 405d9e70b1dSRandy Schacher uint32_t vxlan_port; 406d9e70b1dSRandy Schacher uint32_t vxlan_ip_port; 4072d344c36SRandy Schacher uint32_t ecpri_udp_port; 408c6062ec0SMike Baucom enum bnxt_ulp_device_id device_id; 409d9e70b1dSRandy Schacher uint32_t upgrade_fw_update; 410d9e70b1dSRandy Schacher uint8_t ha_pool_id; 411d9e70b1dSRandy Schacher uint8_t ha_reg_state; 412d9e70b1dSRandy Schacher uint8_t ha_reg_cnt; 4132921498cSMike Baucom uint8_t tunnel_next_proto; 414c6062ec0SMike Baucom uint32_t flags; 415dd0191d5SShuanglin Wang uint32_t max_pools; 416dd0191d5SShuanglin Wang uint8_t em_multiplier; 417dd0191d5SShuanglin Wang uint32_t num_rx_flows; 418dd0191d5SShuanglin Wang uint32_t num_tx_flows; 419dd0191d5SShuanglin Wang uint16_t act_rx_max_sz; 420dd0191d5SShuanglin Wang uint16_t act_tx_max_sz; 421dd0191d5SShuanglin Wang uint16_t em_rx_key_max_sz; 422dd0191d5SShuanglin Wang uint16_t em_tx_key_max_sz; 423dd0191d5SShuanglin Wang uint32_t pbl_page_sz_in_bytes; 424dd0191d5SShuanglin Wang uint16_t num_key_recipes_per_dir; 42532bdbf44SKishore Padmanabha uint64_t feature_bits; 426*2aa70990SKishore Padmanabha uint64_t default_class_bits; 427*2aa70990SKishore Padmanabha uint64_t default_act_bits; 428072cb4a8SMike Baucom }; 429072cb4a8SMike Baucom 4304bc32a80SMike Baucom struct bnxt_ulp_cache_tbl_params { 4314bc32a80SMike Baucom uint16_t num_entries; 4324bc32a80SMike Baucom }; 4334bc32a80SMike Baucom 434f634204bSKishore Padmanabha struct bnxt_ulp_generic_tbl_params { 4350001cc58SKishore Padmanabha const char *name; 436dd0191d5SShuanglin Wang enum bnxt_ulp_gen_tbl_type gen_tbl_type; 437f634204bSKishore Padmanabha uint16_t result_num_entries; 438a2417601SKishore Padmanabha uint16_t result_num_bytes; 439f634204bSKishore Padmanabha enum bnxt_ulp_byte_order result_byte_order; 4400001cc58SKishore Padmanabha uint32_t hash_tbl_entries; 4410001cc58SKishore Padmanabha uint16_t num_buckets; 4420001cc58SKishore Padmanabha uint16_t key_num_bytes; 443af50070eSKishore Padmanabha uint16_t partial_key_num_bytes; 444f634204bSKishore Padmanabha }; 445f634204bSKishore Padmanabha 44683f916bdSKishore Padmanabha struct bnxt_ulp_allocator_tbl_params { 44783f916bdSKishore Padmanabha const char *name; 44883f916bdSKishore Padmanabha uint16_t num_entries; 44983f916bdSKishore Padmanabha }; 45083f916bdSKishore Padmanabha 451a2417601SKishore Padmanabha struct bnxt_ulp_shared_act_info { 452a2417601SKishore Padmanabha uint64_t act_bitmask; 453a2417601SKishore Padmanabha }; 454a2417601SKishore Padmanabha 455313ac35aSVenkat Duvvuru /* 456ae905028SMike Baucom * Flow Mapper Static Data Externs: 457ae905028SMike Baucom * Access to the below static data should be done through access functions and 458ae905028SMike Baucom * directly throughout the code. 459ae905028SMike Baucom */ 460ae905028SMike Baucom 461ae905028SMike Baucom /* 462ae905028SMike Baucom * The ulp_device_params is indexed by the dev_id. 463ae905028SMike Baucom * This table maintains the device specific parameters. 464313ac35aSVenkat Duvvuru */ 465313ac35aSVenkat Duvvuru extern struct bnxt_ulp_device_params ulp_device_params[]; 466313ac35aSVenkat Duvvuru 467696843ccSMike Baucom /* 468ae905028SMike Baucom * The ulp_act_prop_map_table provides the mapping to index and size of action 469696843ccSMike Baucom * properties. 470696843ccSMike Baucom */ 471696843ccSMike Baucom extern uint32_t ulp_act_prop_map_table[]; 472696843ccSMike Baucom 473072cb4a8SMike Baucom /* 474bfcaae8fSKishore Padmanabha * The ulp_glb_resource_tbl provides the list of global resources that need to 475072cb4a8SMike Baucom * be initialized and where to store them. 476072cb4a8SMike Baucom */ 477bfcaae8fSKishore Padmanabha extern struct bnxt_ulp_glb_resource_info ulp_glb_resource_tbl[]; 4784bc32a80SMike Baucom 4794bc32a80SMike Baucom /* 480c6062ec0SMike Baucom * The ulp_app_glb_resource_tbl provides the list of shared resources required 481c6062ec0SMike Baucom * in the event that shared session is enabled. 482c6062ec0SMike Baucom */ 483c6062ec0SMike Baucom extern struct bnxt_ulp_glb_resource_info ulp_app_glb_resource_tbl[]; 484c6062ec0SMike Baucom 485c6062ec0SMike Baucom /* 486c6062ec0SMike Baucom * The ulp_resource_resv_list provides the list of tf resources required when 487c6062ec0SMike Baucom * calling tf_open. 488c6062ec0SMike Baucom */ 489c6062ec0SMike Baucom extern struct bnxt_ulp_resource_resv_info ulp_resource_resv_list[]; 490c6062ec0SMike Baucom 491c6062ec0SMike Baucom /* 4926b70a956SMike Baucom * The ulp_app_resource_resv_list provides the list of tf resources required 4936b70a956SMike Baucom * when calling tf_open. 4946b70a956SMike Baucom */ 4956b70a956SMike Baucom extern struct bnxt_ulp_resource_resv_info ulp_app_resource_resv_list[]; 4966b70a956SMike Baucom 4976b70a956SMike Baucom /* 498c6062ec0SMike Baucom * The_app_cap_info_list provides the list of ULP capabilities per app/device. 499c6062ec0SMike Baucom */ 500c6062ec0SMike Baucom extern struct bnxt_ulp_app_capabilities_info ulp_app_cap_info_list[]; 501c6062ec0SMike Baucom 502c6062ec0SMike Baucom /* 5034bc32a80SMike Baucom * The ulp_cache_tbl_parms table provides the sizes of the cache tables the 5044bc32a80SMike Baucom * mapper must dynamically allocate during initialization. 5054bc32a80SMike Baucom */ 5064bc32a80SMike Baucom extern struct bnxt_ulp_cache_tbl_params ulp_cache_tbl_params[]; 5074bc32a80SMike Baucom 508d097b460SKishore Padmanabha /* 509f634204bSKishore Padmanabha * The ulp_generic_tbl_parms table provides the sizes of the generic tables the 510f634204bSKishore Padmanabha * mapper must dynamically allocate during initialization. 511f634204bSKishore Padmanabha */ 512f634204bSKishore Padmanabha extern struct bnxt_ulp_generic_tbl_params ulp_generic_tbl_params[]; 513f634204bSKishore Padmanabha /* 514d097b460SKishore Padmanabha * The ulp_global template table is used to initialize default entries 515d097b460SKishore Padmanabha * that could be reused by other templates. 516d097b460SKishore Padmanabha */ 517d097b460SKishore Padmanabha extern uint32_t ulp_glb_template_tbl[]; 518313ac35aSVenkat Duvvuru #endif /* _ULP_TEMPLATE_STRUCT_H_ */ 519