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