1313ac35aSVenkat Duvvuru /* SPDX-License-Identifier: BSD-3-Clause 22addc463SAjit Khaparde * Copyright(c) 2014-2021 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" 19313ac35aSVenkat Duvvuru 2053a0d4f7SKishore Padmanabha /* Number of fields for each protocol */ 21a2417601SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_SVIF_NUM 2 2253a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_ETH_NUM 3 2353a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_S_VLAN_NUM 3 2453a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_VLAN_NUM 6 2553a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_IPV4_NUM 10 268d9978d7SVenkat Duvvuru #define BNXT_ULP_PROTO_HDR_IPV6_NUM 8 2753a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_UDP_NUM 4 2853a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_TCP_NUM 9 2953a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_VXLAN_NUM 4 307891de8dSVenkat Duvvuru #define BNXT_ULP_PROTO_HDR_GRE_NUM 6 313fe124d2SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_ICMP_NUM 5 3253a0d4f7SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_MAX 128 33f63aa27dSKishore Padmanabha #define BNXT_ULP_PROTO_HDR_ENCAP_MAX 64 34a2417601SKishore Padmanabha #define BNXT_ULP_PROTO_HDR_FIELD_SVIF_IDX 1 3553a0d4f7SKishore Padmanabha 3677b359eeSKishore Padmanabha /* Direction attributes */ 3777b359eeSKishore Padmanabha #define BNXT_ULP_FLOW_ATTR_TRANSFER 0x1 3877b359eeSKishore Padmanabha #define BNXT_ULP_FLOW_ATTR_INGRESS 0x2 3977b359eeSKishore Padmanabha #define BNXT_ULP_FLOW_ATTR_EGRESS 0x4 4077b359eeSKishore Padmanabha 418f153057SMike Baucom struct ulp_rte_hdr_bitmap { 428f153057SMike Baucom uint64_t bits; 438f153057SMike Baucom }; 448f153057SMike Baucom 452bbcdee8SKishore Padmanabha struct ulp_rte_field_bitmap { 462bbcdee8SKishore Padmanabha uint64_t bits; 472bbcdee8SKishore Padmanabha }; 482bbcdee8SKishore Padmanabha 49ae905028SMike Baucom /* Structure to store the protocol fields */ 50ae905028SMike Baucom #define RTE_PARSER_FLOW_HDR_FIELD_SIZE 16 51ae905028SMike Baucom struct ulp_rte_hdr_field { 52ae905028SMike Baucom uint8_t spec[RTE_PARSER_FLOW_HDR_FIELD_SIZE]; 53ae905028SMike Baucom uint8_t mask[RTE_PARSER_FLOW_HDR_FIELD_SIZE]; 54ae905028SMike Baucom uint32_t size; 55ae905028SMike Baucom }; 56ae905028SMike Baucom 573d6ba7cbSKishore Padmanabha struct ulp_rte_act_bitmap { 583d6ba7cbSKishore Padmanabha uint64_t bits; 593d6ba7cbSKishore Padmanabha }; 603d6ba7cbSKishore Padmanabha 613d6ba7cbSKishore Padmanabha /* Structure to hold the action property details. */ 623d6ba7cbSKishore Padmanabha struct ulp_rte_act_prop { 633d6ba7cbSKishore Padmanabha uint8_t act_details[BNXT_ULP_ACT_PROP_IDX_LAST]; 643d6ba7cbSKishore Padmanabha }; 653d6ba7cbSKishore Padmanabha 663d6ba7cbSKishore Padmanabha /* Structure to be used for passing all the parser functions */ 673d6ba7cbSKishore Padmanabha struct ulp_rte_parser_params { 683d6ba7cbSKishore Padmanabha struct ulp_rte_hdr_bitmap hdr_bitmap; 69f63aa27dSKishore Padmanabha struct ulp_rte_hdr_bitmap enc_hdr_bitmap; 700c0f5a98SKishore Padmanabha struct ulp_rte_hdr_bitmap hdr_fp_bit; 712bbcdee8SKishore Padmanabha struct ulp_rte_field_bitmap fld_bitmap; 72741172beSKishore Padmanabha struct ulp_rte_field_bitmap fld_s_bitmap; 733d6ba7cbSKishore Padmanabha struct ulp_rte_hdr_field hdr_field[BNXT_ULP_PROTO_HDR_MAX]; 74f63aa27dSKishore Padmanabha struct ulp_rte_hdr_field enc_field[BNXT_ULP_PROTO_HDR_ENCAP_MAX]; 751993b267SShahaji Bhosle uint64_t comp_fld[BNXT_ULP_CF_IDX_LAST]; 763d6ba7cbSKishore Padmanabha uint32_t field_idx; 773d6ba7cbSKishore Padmanabha struct ulp_rte_act_bitmap act_bitmap; 783d6ba7cbSKishore Padmanabha struct ulp_rte_act_prop act_prop; 7977b359eeSKishore Padmanabha uint32_t dir_attr; 80675e31d8SVenkat Duvvuru uint32_t priority; 81675e31d8SVenkat Duvvuru uint32_t fid; 82675e31d8SVenkat Duvvuru uint32_t parent_flow; 83bdf4a3c6SKishore Padmanabha uint32_t child_flow; 84675e31d8SVenkat Duvvuru uint16_t func_id; 857891de8dSVenkat Duvvuru uint16_t port_id; 86675e31d8SVenkat Duvvuru uint32_t class_id; 87675e31d8SVenkat Duvvuru uint32_t act_tmpl; 88dc8ee812SKishore Padmanabha struct bnxt_ulp_context *ulp_ctx; 89a2417601SKishore Padmanabha uint32_t hdr_sig_id; 90bdf4a3c6SKishore Padmanabha uint64_t flow_sig_id; 91255add67SKishore Padmanabha uint32_t flow_pattern_id; 92255add67SKishore Padmanabha uint32_t act_pattern_id; 935b73c859SKishore Padmanabha uint8_t app_id; 94bdf4a3c6SKishore Padmanabha uint8_t tun_idx; 95bdf4a3c6SKishore Padmanabha 963d6ba7cbSKishore Padmanabha }; 973d6ba7cbSKishore Padmanabha 9853a0d4f7SKishore Padmanabha /* Flow Parser Header Information Structure */ 9953a0d4f7SKishore Padmanabha struct bnxt_ulp_rte_hdr_info { 10053a0d4f7SKishore Padmanabha enum bnxt_ulp_hdr_type hdr_type; 10153a0d4f7SKishore Padmanabha /* Flow Parser Protocol Header Function Prototype */ 10253a0d4f7SKishore Padmanabha int (*proto_hdr_func)(const struct rte_flow_item *item_list, 1033d6ba7cbSKishore Padmanabha struct ulp_rte_parser_params *params); 10453a0d4f7SKishore Padmanabha }; 10553a0d4f7SKishore Padmanabha 10653a0d4f7SKishore Padmanabha /* Flow Parser Header Information Structure Array defined in template source*/ 10753a0d4f7SKishore Padmanabha extern struct bnxt_ulp_rte_hdr_info ulp_hdr_info[]; 108bdf4a3c6SKishore Padmanabha extern struct bnxt_ulp_rte_hdr_info ulp_vendor_hdr_info[]; 10953a0d4f7SKishore Padmanabha 11011c854e2SKishore Padmanabha /* Flow Parser Action Information Structure */ 11111c854e2SKishore Padmanabha struct bnxt_ulp_rte_act_info { 11211c854e2SKishore Padmanabha enum bnxt_ulp_act_type act_type; 11311c854e2SKishore Padmanabha /* Flow Parser Protocol Action Function Prototype */ 11411c854e2SKishore Padmanabha int32_t (*proto_act_func) 11511c854e2SKishore Padmanabha (const struct rte_flow_action *action_item, 1163d6ba7cbSKishore Padmanabha struct ulp_rte_parser_params *params); 11711c854e2SKishore Padmanabha }; 11811c854e2SKishore Padmanabha 11911c854e2SKishore Padmanabha /* Flow Parser Action Information Structure Array defined in template source*/ 12011c854e2SKishore Padmanabha extern struct bnxt_ulp_rte_act_info ulp_act_info[]; 121bdf4a3c6SKishore Padmanabha extern struct bnxt_ulp_rte_act_info ulp_vendor_act_info[]; 12211c854e2SKishore Padmanabha 123c7520059SKishore Padmanabha /* Flow Matcher structures */ 124c7520059SKishore Padmanabha struct bnxt_ulp_header_match_info { 125c7520059SKishore Padmanabha struct ulp_rte_hdr_bitmap hdr_bitmap; 126c7520059SKishore Padmanabha uint32_t start_idx; 127c7520059SKishore Padmanabha uint32_t num_entries; 128c7520059SKishore Padmanabha uint32_t class_tmpl_id; 129c7520059SKishore Padmanabha uint32_t act_vnic; 130c7520059SKishore Padmanabha }; 131c7520059SKishore Padmanabha 1322bbcdee8SKishore Padmanabha struct ulp_rte_bitmap { 1332bbcdee8SKishore Padmanabha uint64_t bits; 1342bbcdee8SKishore Padmanabha }; 135c7520059SKishore Padmanabha 1362bbcdee8SKishore Padmanabha struct bnxt_ulp_class_match_info { 1372bbcdee8SKishore Padmanabha struct ulp_rte_bitmap hdr_sig; 1382bbcdee8SKishore Padmanabha struct ulp_rte_bitmap field_sig; 1392bbcdee8SKishore Padmanabha uint32_t class_hid; 1402bbcdee8SKishore Padmanabha uint32_t class_tid; 1412bbcdee8SKishore Padmanabha uint8_t act_vnic; 1422bbcdee8SKishore Padmanabha uint8_t wc_pri; 1435b73c859SKishore Padmanabha uint8_t app_sig; 144a2417601SKishore Padmanabha uint32_t hdr_sig_id; 145bdf4a3c6SKishore Padmanabha uint64_t flow_sig_id; 146255add67SKishore Padmanabha uint32_t flow_pattern_id; 1472bbcdee8SKishore Padmanabha }; 1482bbcdee8SKishore Padmanabha 1492bbcdee8SKishore Padmanabha /* Flow Matcher templates Structure for class entries */ 1502bbcdee8SKishore Padmanabha extern uint16_t ulp_class_sig_tbl[]; 1512bbcdee8SKishore Padmanabha extern struct bnxt_ulp_class_match_info ulp_class_match_list[]; 152c7520059SKishore Padmanabha 15300fa81b7SKishore Padmanabha /* Flow Matcher Action structures */ 15400fa81b7SKishore Padmanabha struct bnxt_ulp_action_match_info { 15500fa81b7SKishore Padmanabha struct ulp_rte_act_bitmap act_bitmap; 15600fa81b7SKishore Padmanabha uint32_t act_tmpl_id; 15700fa81b7SKishore Padmanabha }; 15800fa81b7SKishore Padmanabha 1592bbcdee8SKishore Padmanabha struct bnxt_ulp_act_match_info { 1602bbcdee8SKishore Padmanabha struct ulp_rte_bitmap act_sig; 1612bbcdee8SKishore Padmanabha uint32_t act_hid; 1622bbcdee8SKishore Padmanabha uint32_t act_tid; 163255add67SKishore Padmanabha uint32_t act_pattern_id; 1645b73c859SKishore Padmanabha uint8_t app_sig; 1652bbcdee8SKishore Padmanabha }; 1662bbcdee8SKishore Padmanabha 1672bbcdee8SKishore Padmanabha /* Flow Matcher templates Structure for action entries */ 1682bbcdee8SKishore Padmanabha extern uint16_t ulp_act_sig_tbl[]; 1692bbcdee8SKishore Padmanabha extern struct bnxt_ulp_act_match_info ulp_act_match_list[]; 17000fa81b7SKishore Padmanabha 171a4638284SMike Baucom /* Device Specific Tables for mapper */ 172c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_info { 173c5d06df4SMike Baucom enum bnxt_ulp_cond_opc cond_opcode; 174c5d06df4SMike Baucom uint32_t cond_operand; 175c5d06df4SMike Baucom }; 176c5d06df4SMike Baucom 177c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_list_info { 178c5d06df4SMike Baucom enum bnxt_ulp_cond_list_opc cond_list_opcode; 179c5d06df4SMike Baucom uint32_t cond_start_idx; 180c5d06df4SMike Baucom uint32_t cond_nums; 181255add67SKishore Padmanabha int32_t cond_true_goto; 182255add67SKishore Padmanabha int32_t cond_false_goto; 183c5d06df4SMike Baucom }; 184c5d06df4SMike Baucom 1851993b267SShahaji Bhosle struct bnxt_ulp_mapper_func_info { 1861993b267SShahaji Bhosle enum bnxt_ulp_func_opc func_opc; 1871993b267SShahaji Bhosle enum bnxt_ulp_func_src func_src1; 1881993b267SShahaji Bhosle enum bnxt_ulp_func_src func_src2; 1891993b267SShahaji Bhosle uint16_t func_opr1; 1901993b267SShahaji Bhosle uint16_t func_opr2; 1911993b267SShahaji Bhosle uint16_t func_dst_opr; 192741172beSKishore Padmanabha }; 193741172beSKishore Padmanabha 1949cbfa4cfSKishore Padmanabha struct bnxt_ulp_template_device_tbls { 1959cbfa4cfSKishore Padmanabha struct bnxt_ulp_mapper_tmpl_info *tmpl_list; 196a2417601SKishore Padmanabha uint32_t tmpl_list_size; 1970c9fe336SMike Baucom struct bnxt_ulp_mapper_tbl_info *tbl_list; 198a2417601SKishore Padmanabha uint32_t tbl_list_size; 199a2417601SKishore Padmanabha struct bnxt_ulp_mapper_key_info *key_info_list; 200a2417601SKishore Padmanabha uint32_t key_info_list_size; 201a2417601SKishore Padmanabha struct bnxt_ulp_mapper_field_info *result_field_list; 202a2417601SKishore Padmanabha uint32_t result_field_list_size; 203a4638284SMike Baucom struct bnxt_ulp_mapper_ident_info *ident_list; 204a2417601SKishore Padmanabha uint32_t ident_list_size; 205c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_info *cond_list; 206a2417601SKishore Padmanabha uint32_t cond_list_size; 207a4638284SMike Baucom }; 208a4638284SMike Baucom 209*dbd29c42SKishore Padmanabha struct bnxt_ulp_dyn_size_map { 210*dbd29c42SKishore Padmanabha uint32_t slab_size; 211*dbd29c42SKishore Padmanabha enum tf_tbl_type tbl_type; 212*dbd29c42SKishore Padmanabha }; 213*dbd29c42SKishore Padmanabha 214696843ccSMike Baucom /* Device specific parameters */ 215313ac35aSVenkat Duvvuru struct bnxt_ulp_device_params { 216313ac35aSVenkat Duvvuru uint8_t description[16]; 217f63aa27dSKishore Padmanabha enum bnxt_ulp_byte_order key_byte_order; 218f63aa27dSKishore Padmanabha enum bnxt_ulp_byte_order result_byte_order; 219f63aa27dSKishore Padmanabha enum bnxt_ulp_byte_order encap_byte_order; 2201f7f7c3cSKishore Padmanabha enum bnxt_ulp_byte_order wc_key_byte_order; 2212730e7f9SKishore Padmanabha enum bnxt_ulp_byte_order em_byte_order; 222313ac35aSVenkat Duvvuru uint8_t encap_byte_swap; 223cd01ecffSKishore Padmanabha uint8_t num_phy_ports; 224cd01ecffSKishore Padmanabha uint32_t mark_db_lfid_entries; 225cd01ecffSKishore Padmanabha uint64_t mark_db_gfid_entries; 226191f19ceSMike Baucom uint64_t int_flow_db_num_entries; 227191f19ceSMike Baucom uint64_t ext_flow_db_num_entries; 228cd01ecffSKishore Padmanabha uint32_t flow_count_db_entries; 229f4a4421cSKishore Padmanabha uint32_t fdb_parent_flow_entries; 230313ac35aSVenkat Duvvuru uint32_t num_resources_per_flow; 231bbc5f1a0SKishore Padmanabha uint32_t ext_cntr_table_type; 232bbc5f1a0SKishore Padmanabha uint64_t byte_count_mask; 233bbc5f1a0SKishore Padmanabha uint64_t packet_count_mask; 234bbc5f1a0SKishore Padmanabha uint32_t byte_count_shift; 235bbc5f1a0SKishore Padmanabha uint32_t packet_count_shift; 2363fe124d2SKishore Padmanabha uint32_t dynamic_pad_en; 237*dbd29c42SKishore Padmanabha uint32_t dynamic_sram_en; 238*dbd29c42SKishore Padmanabha uint32_t dyn_encap_list_size; 239*dbd29c42SKishore Padmanabha struct bnxt_ulp_dyn_size_map dyn_encap_sizes[4]; 240*dbd29c42SKishore Padmanabha uint32_t dyn_modify_list_size; 241*dbd29c42SKishore Padmanabha struct bnxt_ulp_dyn_size_map dyn_modify_sizes[4]; 2423fe124d2SKishore Padmanabha uint16_t em_blk_size_bits; 2433fe124d2SKishore Padmanabha uint16_t em_blk_align_bits; 2443fe124d2SKishore Padmanabha uint16_t em_key_align_bytes; 2453fe124d2SKishore Padmanabha uint16_t em_result_size_bits; 2463fe124d2SKishore Padmanabha uint16_t wc_slice_width; 2473fe124d2SKishore Padmanabha uint16_t wc_max_slices; 2483fe124d2SKishore Padmanabha uint32_t wc_mode_list[4]; 2493fe124d2SKishore Padmanabha uint32_t wc_mod_list_max_size; 2503fe124d2SKishore Padmanabha uint32_t wc_ctl_size_bits; 2519cbfa4cfSKishore Padmanabha const struct bnxt_ulp_template_device_tbls *dev_tbls; 252313ac35aSVenkat Duvvuru }; 253313ac35aSVenkat Duvvuru 2548f153057SMike Baucom /* Flow Mapper */ 2559cbfa4cfSKishore Padmanabha struct bnxt_ulp_mapper_tmpl_info { 2568f153057SMike Baucom uint32_t device_name; 2578f153057SMike Baucom uint32_t start_tbl_idx; 2588f153057SMike Baucom uint32_t num_tbls; 259c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_list_info reject_info; 2608f153057SMike Baucom }; 2618f153057SMike Baucom 2628608c099SKishore Padmanabha struct bnxt_ulp_mapper_tbl_info { 263ae905028SMike Baucom enum bnxt_ulp_resource_func resource_func; 264642feef8SKishore Padmanabha uint32_t resource_type; /* TF_ enum type */ 265642feef8SKishore Padmanabha enum bnxt_ulp_resource_sub_type resource_sub_type; 266c5d06df4SMike Baucom struct bnxt_ulp_mapper_cond_list_info execute_info; 2671993b267SShahaji Bhosle struct bnxt_ulp_mapper_func_info func_info; 268c5d06df4SMike Baucom enum bnxt_ulp_cond_opc cond_opcode; 2694c4e86faSKishore Padmanabha uint32_t cond_operand; 270ae905028SMike Baucom uint8_t direction; 2719cbfa4cfSKishore Padmanabha enum bnxt_ulp_pri_opc pri_opcode; 2729cbfa4cfSKishore Padmanabha uint32_t pri_operand; 273a2417601SKishore Padmanabha 274a2417601SKishore Padmanabha /* conflict resolution opcode */ 275a2417601SKishore Padmanabha enum bnxt_ulp_accept_opc accept_opcode; 276a2417601SKishore Padmanabha 277f4875133SKishore Padmanabha enum bnxt_ulp_critical_resource critical_resource; 278ae905028SMike Baucom 279ae905028SMike Baucom /* Information for accessing the ulp_key_field_list */ 280ae905028SMike Baucom uint32_t key_start_idx; 281ae905028SMike Baucom uint16_t key_bit_size; 282ae905028SMike Baucom uint16_t key_num_fields; 283ae905028SMike Baucom /* Size of the blob that holds the key */ 284ae905028SMike Baucom uint16_t blob_key_bit_size; 285f63aa27dSKishore Padmanabha uint16_t record_size; 286ae905028SMike Baucom 287ae905028SMike Baucom /* Information for accessing the ulp_class_result_field_list */ 288ae905028SMike Baucom uint32_t result_start_idx; 289ae905028SMike Baucom uint16_t result_bit_size; 290ae905028SMike Baucom uint16_t result_num_fields; 2918608c099SKishore Padmanabha uint16_t encap_num_fields; 292ae905028SMike Baucom 293ae905028SMike Baucom /* Information for accessing the ulp_ident_list */ 294ae905028SMike Baucom uint32_t ident_start_idx; 295ae905028SMike Baucom uint16_t ident_nums; 296ae905028SMike Baucom 2979cbfa4cfSKishore Padmanabha enum bnxt_ulp_mark_db_opc mark_db_opcode; 298f634204bSKishore Padmanabha 299f634204bSKishore Padmanabha /* Table opcode for table operations */ 300f634204bSKishore Padmanabha uint32_t tbl_opcode; 3015952b1ccSKishore Padmanabha uint32_t tbl_operand; 3020001cc58SKishore Padmanabha enum bnxt_ulp_generic_tbl_lkup_type gen_tbl_lkup_type; 3030117293cSKishore Padmanabha 3040117293cSKishore Padmanabha /* FDB table opcode */ 3050117293cSKishore Padmanabha enum bnxt_ulp_fdb_opc fdb_opcode; 306a2417601SKishore Padmanabha uint32_t fdb_operand; 30719994cc7SKishore Padmanabha 30819994cc7SKishore Padmanabha /* Shared session */ 30919994cc7SKishore Padmanabha enum bnxt_ulp_shared_session shared_session; 310ae905028SMike Baucom }; 311ae905028SMike Baucom 312a2417601SKishore Padmanabha struct bnxt_ulp_mapper_field_info { 3132bbcdee8SKishore Padmanabha uint8_t description[64]; 314ae905028SMike Baucom uint16_t field_bit_size; 3156167c20cSKishore Padmanabha enum bnxt_ulp_field_opc field_opc; 31659ae4961SKishore Padmanabha enum bnxt_ulp_field_src field_src1; 31759ae4961SKishore Padmanabha uint8_t field_opr1[16]; 31859ae4961SKishore Padmanabha enum bnxt_ulp_field_src field_src2; 31959ae4961SKishore Padmanabha uint8_t field_opr2[16]; 320286569d5SKishore Padmanabha enum bnxt_ulp_field_src field_src3; 321286569d5SKishore Padmanabha uint8_t field_opr3[16]; 322ae905028SMike Baucom }; 323ae905028SMike Baucom 324a2417601SKishore Padmanabha struct bnxt_ulp_mapper_key_info { 325a2417601SKishore Padmanabha struct bnxt_ulp_mapper_field_info field_info_spec; 326a2417601SKishore Padmanabha struct bnxt_ulp_mapper_field_info field_info_mask; 327696843ccSMike Baucom }; 328696843ccSMike Baucom 329ae905028SMike Baucom struct bnxt_ulp_mapper_ident_info { 3302bbcdee8SKishore Padmanabha uint8_t description[64]; 331ae905028SMike Baucom uint32_t resource_func; 332ae905028SMike Baucom 333ae905028SMike Baucom uint16_t ident_type; 334ae905028SMike Baucom uint16_t ident_bit_size; 335ae905028SMike Baucom uint16_t ident_bit_pos; 336a2417601SKishore Padmanabha enum bnxt_ulp_rf_idx regfile_idx; 337ae905028SMike Baucom }; 338ae905028SMike Baucom 339bfcaae8fSKishore Padmanabha struct bnxt_ulp_glb_resource_info { 340c6062ec0SMike Baucom uint8_t app_id; 341741172beSKishore Padmanabha enum bnxt_ulp_device_id device_id; 342c6062ec0SMike Baucom enum tf_dir direction; 343bfcaae8fSKishore Padmanabha enum bnxt_ulp_resource_func resource_func; 344bfcaae8fSKishore Padmanabha uint32_t resource_type; /* TF_ enum type */ 345a2417601SKishore Padmanabha enum bnxt_ulp_glb_rf_idx glb_regfile_index; 346c6062ec0SMike Baucom }; 347c6062ec0SMike Baucom 348c6062ec0SMike Baucom struct bnxt_ulp_resource_resv_info { 349c6062ec0SMike Baucom uint8_t app_id; 350c6062ec0SMike Baucom enum bnxt_ulp_device_id device_id; 351072cb4a8SMike Baucom enum tf_dir direction; 352c6062ec0SMike Baucom enum bnxt_ulp_resource_func resource_func; 353c6062ec0SMike Baucom uint32_t resource_type; /* TF_ enum type */ 354c6062ec0SMike Baucom uint32_t count; 355c6062ec0SMike Baucom }; 356c6062ec0SMike Baucom 357c6062ec0SMike Baucom struct bnxt_ulp_app_capabilities_info { 358c6062ec0SMike Baucom uint8_t app_id; 359c6062ec0SMike Baucom enum bnxt_ulp_device_id device_id; 360c6062ec0SMike Baucom uint32_t flags; 361072cb4a8SMike Baucom }; 362072cb4a8SMike Baucom 3634bc32a80SMike Baucom struct bnxt_ulp_cache_tbl_params { 3644bc32a80SMike Baucom uint16_t num_entries; 3654bc32a80SMike Baucom }; 3664bc32a80SMike Baucom 367f634204bSKishore Padmanabha struct bnxt_ulp_generic_tbl_params { 3680001cc58SKishore Padmanabha const char *name; 369f634204bSKishore Padmanabha uint16_t result_num_entries; 370a2417601SKishore Padmanabha uint16_t result_num_bytes; 371f634204bSKishore Padmanabha enum bnxt_ulp_byte_order result_byte_order; 3720001cc58SKishore Padmanabha uint32_t hash_tbl_entries; 3730001cc58SKishore Padmanabha uint16_t num_buckets; 3740001cc58SKishore Padmanabha uint16_t key_num_bytes; 375f634204bSKishore Padmanabha }; 376f634204bSKishore Padmanabha 377a2417601SKishore Padmanabha struct bnxt_ulp_shared_act_info { 378a2417601SKishore Padmanabha uint64_t act_bitmask; 379a2417601SKishore Padmanabha }; 380a2417601SKishore Padmanabha 381313ac35aSVenkat Duvvuru /* 382ae905028SMike Baucom * Flow Mapper Static Data Externs: 383ae905028SMike Baucom * Access to the below static data should be done through access functions and 384ae905028SMike Baucom * directly throughout the code. 385ae905028SMike Baucom */ 386ae905028SMike Baucom 387ae905028SMike Baucom /* 388ae905028SMike Baucom * The ulp_device_params is indexed by the dev_id. 389ae905028SMike Baucom * This table maintains the device specific parameters. 390313ac35aSVenkat Duvvuru */ 391313ac35aSVenkat Duvvuru extern struct bnxt_ulp_device_params ulp_device_params[]; 392313ac35aSVenkat Duvvuru 393696843ccSMike Baucom /* 394ae905028SMike Baucom * The ulp_act_prop_map_table provides the mapping to index and size of action 395696843ccSMike Baucom * properties. 396696843ccSMike Baucom */ 397696843ccSMike Baucom extern uint32_t ulp_act_prop_map_table[]; 398696843ccSMike Baucom 399072cb4a8SMike Baucom /* 400bfcaae8fSKishore Padmanabha * The ulp_glb_resource_tbl provides the list of global resources that need to 401072cb4a8SMike Baucom * be initialized and where to store them. 402072cb4a8SMike Baucom */ 403bfcaae8fSKishore Padmanabha extern struct bnxt_ulp_glb_resource_info ulp_glb_resource_tbl[]; 4044bc32a80SMike Baucom 4054bc32a80SMike Baucom /* 406c6062ec0SMike Baucom * The ulp_app_glb_resource_tbl provides the list of shared resources required 407c6062ec0SMike Baucom * in the event that shared session is enabled. 408c6062ec0SMike Baucom */ 409c6062ec0SMike Baucom extern struct bnxt_ulp_glb_resource_info ulp_app_glb_resource_tbl[]; 410c6062ec0SMike Baucom 411c6062ec0SMike Baucom /* 412c6062ec0SMike Baucom * The ulp_resource_resv_list provides the list of tf resources required when 413c6062ec0SMike Baucom * calling tf_open. 414c6062ec0SMike Baucom */ 415c6062ec0SMike Baucom extern struct bnxt_ulp_resource_resv_info ulp_resource_resv_list[]; 416c6062ec0SMike Baucom 417c6062ec0SMike Baucom /* 4186b70a956SMike Baucom * The ulp_app_resource_resv_list provides the list of tf resources required 4196b70a956SMike Baucom * when calling tf_open. 4206b70a956SMike Baucom */ 4216b70a956SMike Baucom extern struct bnxt_ulp_resource_resv_info ulp_app_resource_resv_list[]; 4226b70a956SMike Baucom 4236b70a956SMike Baucom /* 424c6062ec0SMike Baucom * The_app_cap_info_list provides the list of ULP capabilities per app/device. 425c6062ec0SMike Baucom */ 426c6062ec0SMike Baucom extern struct bnxt_ulp_app_capabilities_info ulp_app_cap_info_list[]; 427c6062ec0SMike Baucom 428c6062ec0SMike Baucom /* 4294bc32a80SMike Baucom * The ulp_cache_tbl_parms table provides the sizes of the cache tables the 4304bc32a80SMike Baucom * mapper must dynamically allocate during initialization. 4314bc32a80SMike Baucom */ 4324bc32a80SMike Baucom extern struct bnxt_ulp_cache_tbl_params ulp_cache_tbl_params[]; 4334bc32a80SMike Baucom 434d097b460SKishore Padmanabha /* 435f634204bSKishore Padmanabha * The ulp_generic_tbl_parms table provides the sizes of the generic tables the 436f634204bSKishore Padmanabha * mapper must dynamically allocate during initialization. 437f634204bSKishore Padmanabha */ 438f634204bSKishore Padmanabha extern struct bnxt_ulp_generic_tbl_params ulp_generic_tbl_params[]; 439f634204bSKishore Padmanabha /* 440d097b460SKishore Padmanabha * The ulp_global template table is used to initialize default entries 441d097b460SKishore Padmanabha * that could be reused by other templates. 442d097b460SKishore Padmanabha */ 443d097b460SKishore Padmanabha extern uint32_t ulp_glb_template_tbl[]; 444d097b460SKishore Padmanabha 445313ac35aSVenkat Duvvuru #endif /* _ULP_TEMPLATE_STRUCT_H_ */ 446