xref: /dpdk/drivers/net/bnxt/tf_ulp/ulp_template_struct.h (revision 2aa70990392930426d92192c59d237dd16de31e5)
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