xref: /dpdk/drivers/net/bnxt/tf_ulp/ulp_flow_db.h (revision a089734a026a316994674e3f405ee4d56a114efc)
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_FLOW_DB_H_
7313ac35aSVenkat Duvvuru #define _ULP_FLOW_DB_H_
8313ac35aSVenkat Duvvuru 
9313ac35aSVenkat Duvvuru #include "bnxt_ulp.h"
108ce17d56SKishore Padmanabha #include "ulp_template_db_enum.h"
11be8acb27SKishore Padmanabha #include "ulp_mapper.h"
12313ac35aSVenkat Duvvuru 
1309b23f8bSKishore Padmanabha #define BNXT_FLOW_DB_DEFAULT_NUM_FLOWS		512
1409b23f8bSKishore Padmanabha #define BNXT_FLOW_DB_DEFAULT_NUM_RESOURCES	8
15313ac35aSVenkat Duvvuru 
1619994cc7SKishore Padmanabha /* Defines for the fdb flag */
1719994cc7SKishore Padmanabha #define ULP_FDB_FLAG_SHARED_SESSION	0x1
18d9e70b1dSRandy Schacher #define ULP_FDB_FLAG_SHARED_WC_SESSION	0x2
19f6e12015SKishore Padmanabha #define ULP_FDB_FLAG_SW_ONLY		0x4
20f6e12015SKishore Padmanabha #define ULP_FDB_FLAG_CRITICAL_RES	0x8
2119994cc7SKishore Padmanabha 
22efcb502fSKishore Padmanabha /*
23efcb502fSKishore Padmanabha  * Structure for the flow database resource information
24f63aa27dSKishore Padmanabha  * The below structure is based on the below partitions
25f6e12015SKishore Padmanabha  * nxt_resource_idx = dir[31],nxt_resource_idx[30:0]
26efcb502fSKishore Padmanabha  */
27313ac35aSVenkat Duvvuru struct ulp_fdb_resource_info {
28313ac35aSVenkat Duvvuru 	/* Points to next resource in the chained list. */
29313ac35aSVenkat Duvvuru 	uint32_t	nxt_resource_idx;
30f6e12015SKishore Padmanabha 	uint8_t		resource_func;
31efcb502fSKishore Padmanabha 	uint8_t		resource_type;
32efcb502fSKishore Padmanabha 	uint8_t		resource_sub_type;
3319994cc7SKishore Padmanabha 	uint8_t		fdb_flags;
34f6e12015SKishore Padmanabha 	uint64_t	resource_hndl;
35313ac35aSVenkat Duvvuru };
36313ac35aSVenkat Duvvuru 
37313ac35aSVenkat Duvvuru /* Structure for the flow database resource information. */
38313ac35aSVenkat Duvvuru struct bnxt_ulp_flow_tbl {
39313ac35aSVenkat Duvvuru 	/* Flow tbl is the resource object list for each flow id. */
40313ac35aSVenkat Duvvuru 	struct ulp_fdb_resource_info	*flow_resources;
41313ac35aSVenkat Duvvuru 
42313ac35aSVenkat Duvvuru 	/* Flow table stack to track free list of resources. */
43313ac35aSVenkat Duvvuru 	uint32_t	*flow_tbl_stack;
44313ac35aSVenkat Duvvuru 	uint32_t	head_index;
45313ac35aSVenkat Duvvuru 	uint32_t	tail_index;
46313ac35aSVenkat Duvvuru 
47313ac35aSVenkat Duvvuru 	/* Table to track the active flows. */
4830683082SKishore Padmanabha 	uint64_t	*active_reg_flows;
4930683082SKishore Padmanabha 	uint64_t	*active_dflt_flows;
50313ac35aSVenkat Duvvuru 	uint32_t	num_flows;
51313ac35aSVenkat Duvvuru 	uint32_t	num_resources;
52313ac35aSVenkat Duvvuru };
53313ac35aSVenkat Duvvuru 
54f4a4421cSKishore Padmanabha /* Structure to maintain parent-child flow relationships */
55f4a4421cSKishore Padmanabha struct ulp_fdb_parent_info {
56bdf4a3c6SKishore Padmanabha 	uint32_t	valid;
57f4a4421cSKishore Padmanabha 	uint32_t	parent_fid;
588782e4deSKishore Padmanabha 	uint32_t	parent_ref_cnt;
59640bfd23SKishore Padmanabha 	uint32_t	counter_acc;
60640bfd23SKishore Padmanabha 	uint64_t	pkt_count;
61640bfd23SKishore Padmanabha 	uint64_t	byte_count;
62f4a4421cSKishore Padmanabha 	uint64_t	*child_fid_bitset;
63675e31d8SVenkat Duvvuru 	uint32_t	f2_cnt;
64675e31d8SVenkat Duvvuru 	uint8_t		tun_idx;
65f4a4421cSKishore Padmanabha };
66f4a4421cSKishore Padmanabha 
67f4a4421cSKishore Padmanabha /* Structure to maintain parent-child flow relationships */
68f4a4421cSKishore Padmanabha struct ulp_fdb_parent_child_db {
69f4a4421cSKishore Padmanabha 	struct ulp_fdb_parent_info	*parent_flow_tbl;
70f4a4421cSKishore Padmanabha 	uint32_t			child_bitset_size;
71f4a4421cSKishore Padmanabha 	uint32_t			entries_count;
72f4a4421cSKishore Padmanabha 	uint8_t				*parent_flow_tbl_mem;
73f4a4421cSKishore Padmanabha };
74f4a4421cSKishore Padmanabha 
75313ac35aSVenkat Duvvuru /* Structure for the flow database resource information. */
76313ac35aSVenkat Duvvuru struct bnxt_ulp_flow_db {
7730683082SKishore Padmanabha 	struct bnxt_ulp_flow_tbl	flow_tbl;
7874bcfc06SKishore Padmanabha 	uint16_t			*func_id_tbl;
7974bcfc06SKishore Padmanabha 	uint32_t			func_id_tbl_size;
80f4a4421cSKishore Padmanabha 	struct ulp_fdb_parent_child_db	parent_child_db;
81313ac35aSVenkat Duvvuru };
82313ac35aSVenkat Duvvuru 
83696843ccSMike Baucom /* flow db resource params to add resources */
84696843ccSMike Baucom struct ulp_flow_db_res_params {
85696843ccSMike Baucom 	enum tf_dir			direction;
86696843ccSMike Baucom 	enum bnxt_ulp_resource_func	resource_func;
87efcb502fSKishore Padmanabha 	uint8_t				resource_type;
88efcb502fSKishore Padmanabha 	uint8_t				resource_sub_type;
8919994cc7SKishore Padmanabha 	uint8_t				fdb_flags;
90efcb502fSKishore Padmanabha 	uint8_t				critical_resource;
91696843ccSMike Baucom 	uint64_t			resource_hndl;
92696843ccSMike Baucom };
93696843ccSMike Baucom 
94313ac35aSVenkat Duvvuru /*
95313ac35aSVenkat Duvvuru  * Initialize the flow database. Memory is allocated in this
96313ac35aSVenkat Duvvuru  * call and assigned to the flow database.
97313ac35aSVenkat Duvvuru  *
98313ac35aSVenkat Duvvuru  * ulp_ctxt [in] Ptr to ulp context
99313ac35aSVenkat Duvvuru  *
100313ac35aSVenkat Duvvuru  * Returns 0 on success or negative number on failure.
101313ac35aSVenkat Duvvuru  */
102313ac35aSVenkat Duvvuru int32_t	ulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt);
103313ac35aSVenkat Duvvuru 
104313ac35aSVenkat Duvvuru /*
105313ac35aSVenkat Duvvuru  * Deinitialize the flow database. Memory is deallocated in
106313ac35aSVenkat Duvvuru  * this call and all flows should have been purged before this
107313ac35aSVenkat Duvvuru  * call.
108313ac35aSVenkat Duvvuru  *
109313ac35aSVenkat Duvvuru  * ulp_ctxt [in] Ptr to ulp context
110313ac35aSVenkat Duvvuru  *
111313ac35aSVenkat Duvvuru  * Returns 0 on success.
112313ac35aSVenkat Duvvuru  */
113313ac35aSVenkat Duvvuru int32_t	ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt);
114313ac35aSVenkat Duvvuru 
115696843ccSMike Baucom /*
1168f153057SMike Baucom  * Allocate the flow database entry
1178f153057SMike Baucom  *
1188f153057SMike Baucom  * ulp_ctxt [in] Ptr to ulp_context
1198f153057SMike Baucom  * tbl_idx [in] Specify it is regular or default flow
12074bcfc06SKishore Padmanabha  * func_id [in] The function id of the device.Valid only for regular flows.
1218f153057SMike Baucom  * fid [out] The index to the flow entry
1228f153057SMike Baucom  *
1238f153057SMike Baucom  * returns 0 on success and negative on failure.
1248f153057SMike Baucom  */
12530683082SKishore Padmanabha int32_t
12630683082SKishore Padmanabha ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt,
12730683082SKishore Padmanabha 		      enum bnxt_ulp_fdb_type flow_type,
12874bcfc06SKishore Padmanabha 		      uint16_t func_id,
1298f153057SMike Baucom 		      uint32_t *fid);
1308f153057SMike Baucom 
1318f153057SMike Baucom /*
132696843ccSMike Baucom  * Allocate the flow database entry.
133696843ccSMike Baucom  * The params->critical_resource has to be set to 0 to allocate a new resource.
134696843ccSMike Baucom  *
135696843ccSMike Baucom  * ulp_ctxt [in] Ptr to ulp_context
136696843ccSMike Baucom  * tbl_idx [in] Specify it is regular or default flow
137696843ccSMike Baucom  * fid [in] The index to the flow entry
138696843ccSMike Baucom  * params [in] The contents to be copied into resource
139696843ccSMike Baucom  *
140696843ccSMike Baucom  * returns 0 on success and negative on failure.
141696843ccSMike Baucom  */
14230683082SKishore Padmanabha int32_t
14330683082SKishore Padmanabha ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt,
14430683082SKishore Padmanabha 			 enum bnxt_ulp_fdb_type flow_type,
145696843ccSMike Baucom 			 uint32_t fid,
146696843ccSMike Baucom 			 struct ulp_flow_db_res_params *params);
147696843ccSMike Baucom 
14805a11d7dSMike Baucom /*
14905a11d7dSMike Baucom  * Free the flow database entry.
15005a11d7dSMike Baucom  * The params->critical_resource has to be set to 1 to free the first resource.
15105a11d7dSMike Baucom  *
15205a11d7dSMike Baucom  * ulp_ctxt [in] Ptr to ulp_context
15305a11d7dSMike Baucom  * tbl_idx [in] Specify it is regular or default flow
15405a11d7dSMike Baucom  * fid [in] The index to the flow entry
15505a11d7dSMike Baucom  * params [in/out] The contents to be copied into params.
15605a11d7dSMike Baucom  * Only the critical_resource needs to be set by the caller.
15705a11d7dSMike Baucom  *
15805a11d7dSMike Baucom  * Returns 0 on success and negative on failure.
15905a11d7dSMike Baucom  */
16030683082SKishore Padmanabha int32_t
16130683082SKishore Padmanabha ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt,
16230683082SKishore Padmanabha 			 enum bnxt_ulp_fdb_type flow_type,
16305a11d7dSMike Baucom 			 uint32_t fid,
16405a11d7dSMike Baucom 			 struct ulp_flow_db_res_params *params);
16505a11d7dSMike Baucom 
16605a11d7dSMike Baucom /*
16705a11d7dSMike Baucom  * Free the flow database entry
16805a11d7dSMike Baucom  *
16905a11d7dSMike Baucom  * ulp_ctxt [in] Ptr to ulp_context
17005a11d7dSMike Baucom  * tbl_idx [in] Specify it is regular or default flow
17105a11d7dSMike Baucom  * fid [in] The index to the flow entry
17205a11d7dSMike Baucom  *
17305a11d7dSMike Baucom  * returns 0 on success and negative on failure.
17405a11d7dSMike Baucom  */
17530683082SKishore Padmanabha int32_t
17630683082SKishore Padmanabha ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt,
17730683082SKishore Padmanabha 		     enum bnxt_ulp_fdb_type tbl_idx,
17805a11d7dSMike Baucom 		     uint32_t fid);
17905a11d7dSMike Baucom 
180edc6ca0cSKishore Padmanabha /*
181cd7c298aSKishore Padmanabha  *Get the flow database entry details
182cd7c298aSKishore Padmanabha  *
183cd7c298aSKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
184cd7c298aSKishore Padmanabha  * tbl_idx [in] Specify it is regular or default flow
185cd7c298aSKishore Padmanabha  * fid [in] The index to the flow entry
186cd7c298aSKishore Padmanabha  * nxt_idx [in/out] the index to the next entry
187cd7c298aSKishore Padmanabha  * params [out] The contents to be copied into params.
188cd7c298aSKishore Padmanabha  *
189cd7c298aSKishore Padmanabha  * returns 0 on success and negative on failure.
190cd7c298aSKishore Padmanabha  */
19130683082SKishore Padmanabha int32_t
19230683082SKishore Padmanabha ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt,
19330683082SKishore Padmanabha 			 enum bnxt_ulp_fdb_type flow_type,
194cd7c298aSKishore Padmanabha 			 uint32_t fid,
195cd7c298aSKishore Padmanabha 			 uint32_t *nxt_idx,
196cd7c298aSKishore Padmanabha 			 struct ulp_flow_db_res_params *params);
197cd7c298aSKishore Padmanabha 
198cd7c298aSKishore Padmanabha /*
199edc6ca0cSKishore Padmanabha  * Flush all flows in the flow database.
200edc6ca0cSKishore Padmanabha  *
201edc6ca0cSKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp context
202bb7e1f17SDavid Marchand  * flow_type [in] - specify default or regular
203edc6ca0cSKishore Padmanabha  *
204edc6ca0cSKishore Padmanabha  * returns 0 on success or negative number on failure
205edc6ca0cSKishore Padmanabha  */
20630683082SKishore Padmanabha int32_t
20730683082SKishore Padmanabha ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx,
208bb7e1f17SDavid Marchand 			enum bnxt_ulp_fdb_type flow_type);
209edc6ca0cSKishore Padmanabha 
21074bcfc06SKishore Padmanabha /*
21174bcfc06SKishore Padmanabha  * Flush all flows in the flow database that belong to a device function.
21274bcfc06SKishore Padmanabha  *
21374bcfc06SKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp context
21474bcfc06SKishore Padmanabha  * tbl_idx [in] The index to table
21574bcfc06SKishore Padmanabha  *
21674bcfc06SKishore Padmanabha  * returns 0 on success or negative number on failure
21774bcfc06SKishore Padmanabha  */
21874bcfc06SKishore Padmanabha int32_t
21974bcfc06SKishore Padmanabha ulp_flow_db_function_flow_flush(struct bnxt_ulp_context *ulp_ctx,
22074bcfc06SKishore Padmanabha 				uint16_t func_id);
22174bcfc06SKishore Padmanabha 
22274bcfc06SKishore Padmanabha /*
22374bcfc06SKishore Padmanabha  * Flush all flows in the flow database that are associated with the session.
22474bcfc06SKishore Padmanabha  *
22574bcfc06SKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp context
22674bcfc06SKishore Padmanabha  *
22774bcfc06SKishore Padmanabha  * returns 0 on success or negative number on failure
22874bcfc06SKishore Padmanabha  */
22974bcfc06SKishore Padmanabha int32_t
23074bcfc06SKishore Padmanabha ulp_flow_db_session_flow_flush(struct bnxt_ulp_context *ulp_ctx);
23174bcfc06SKishore Padmanabha 
23274bcfc06SKishore Padmanabha /*
23374bcfc06SKishore Padmanabha  * Check that flow id matches the function id or not
23474bcfc06SKishore Padmanabha  *
23574bcfc06SKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp context
23630683082SKishore Padmanabha  * flow_id [in] flow id of the flow.
23774bcfc06SKishore Padmanabha  * func_id [in] The func_id to be set, for reset pass zero.
23874bcfc06SKishore Padmanabha  *
23974bcfc06SKishore Padmanabha  * returns true on success or false on failure
24074bcfc06SKishore Padmanabha  */
24174bcfc06SKishore Padmanabha bool
24274bcfc06SKishore Padmanabha ulp_flow_db_validate_flow_func(struct bnxt_ulp_context *ulp_ctx,
24374bcfc06SKishore Padmanabha 			       uint32_t flow_id,
24474bcfc06SKishore Padmanabha 			       uint32_t func_id);
24574bcfc06SKishore Padmanabha 
246d310d59cSKishore Padmanabha /*
247d310d59cSKishore Padmanabha  * Api to get the cfa action pointer from a flow.
248d310d59cSKishore Padmanabha  *
249d310d59cSKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp context
250d310d59cSKishore Padmanabha  * flow_id [in] flow id
251d310d59cSKishore Padmanabha  * cfa_action [out] The resource handle stored in the flow database
252d310d59cSKishore Padmanabha  *
253d310d59cSKishore Padmanabha  * returns 0 on success
254d310d59cSKishore Padmanabha  */
255d310d59cSKishore Padmanabha int32_t
256d310d59cSKishore Padmanabha ulp_default_flow_db_cfa_action_get(struct bnxt_ulp_context *ulp_ctx,
257d310d59cSKishore Padmanabha 				   uint32_t flow_id,
258dd0191d5SShuanglin Wang 				   uint32_t *cfa_action);
259f4a4421cSKishore Padmanabha 
260f4a4421cSKishore Padmanabha /*
261bdf4a3c6SKishore Padmanabha  * Set or reset the parent flow in the parent-child database
262f4a4421cSKishore Padmanabha  *
263f4a4421cSKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
264bdf4a3c6SKishore Padmanabha  * pc_idx [in] The index to parent child db
265bdf4a3c6SKishore Padmanabha  * parent_fid [in] The flow id of the parent flow entry
266bdf4a3c6SKishore Padmanabha  * set_flag [in] Use 1 for setting child, 0 to reset
267f4a4421cSKishore Padmanabha  *
268bdf4a3c6SKishore Padmanabha  * returns zero on success and negative on failure.
269f4a4421cSKishore Padmanabha  */
270f4a4421cSKishore Padmanabha int32_t
271bdf4a3c6SKishore Padmanabha ulp_flow_db_pc_db_parent_flow_set(struct bnxt_ulp_context *ulp_ctxt,
272bdf4a3c6SKishore Padmanabha 				  uint32_t pc_idx,
273bdf4a3c6SKishore Padmanabha 				  uint32_t parent_fid,
274bdf4a3c6SKishore Padmanabha 				  uint32_t set_flag);
275f4a4421cSKishore Padmanabha 
276f4a4421cSKishore Padmanabha /*
277f4a4421cSKishore Padmanabha  * Set or reset the child flow in the parent-child database
278f4a4421cSKishore Padmanabha  *
279f4a4421cSKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
280bdf4a3c6SKishore Padmanabha  * pc_idx [in] The index to parent child db
281f4a4421cSKishore Padmanabha  * child_fid [in] The flow id of the child flow entry
282f4a4421cSKishore Padmanabha  * set_flag [in] Use 1 for setting child, 0 to reset
283f4a4421cSKishore Padmanabha  *
284f4a4421cSKishore Padmanabha  * returns zero on success and negative on failure.
285f4a4421cSKishore Padmanabha  */
286f4a4421cSKishore Padmanabha int32_t
287bdf4a3c6SKishore Padmanabha ulp_flow_db_pc_db_child_flow_set(struct bnxt_ulp_context *ulp_ctxt,
288bdf4a3c6SKishore Padmanabha 				 uint32_t pc_idx,
289f4a4421cSKishore Padmanabha 				 uint32_t child_fid,
290f4a4421cSKishore Padmanabha 				 uint32_t set_flag);
291f4a4421cSKishore Padmanabha 
292f4a4421cSKishore Padmanabha /*
293f4a4421cSKishore Padmanabha  * Get the parent index from the parent-child database
294f4a4421cSKishore Padmanabha  *
295f4a4421cSKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
296f4a4421cSKishore Padmanabha  * parent_fid [in] The flow id of the parent flow entry
297f4a4421cSKishore Padmanabha  * parent_idx [out] The parent index of parent flow entry
298f4a4421cSKishore Padmanabha  *
299f4a4421cSKishore Padmanabha  * returns zero on success and negative on failure.
300f4a4421cSKishore Padmanabha  */
301f4a4421cSKishore Padmanabha int32_t
302f4a4421cSKishore Padmanabha ulp_flow_db_parent_flow_idx_get(struct bnxt_ulp_context *ulp_ctxt,
303f4a4421cSKishore Padmanabha 				uint32_t parent_fid,
304f4a4421cSKishore Padmanabha 				uint32_t *parent_idx);
305f4a4421cSKishore Padmanabha 
306f4a4421cSKishore Padmanabha /*
307f4a4421cSKishore Padmanabha  * Get the next child flow in the parent-child database
308f4a4421cSKishore Padmanabha  *
309f4a4421cSKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
310f4a4421cSKishore Padmanabha  * parent_fid [in] The flow id of the parent flow entry
311f4a4421cSKishore Padmanabha  * child_fid [in/out] The flow id of the child flow entry
312f4a4421cSKishore Padmanabha  *
313f4a4421cSKishore Padmanabha  * returns zero on success and negative on failure.
314f4a4421cSKishore Padmanabha  * Pass child_fid as zero for first entry.
315f4a4421cSKishore Padmanabha  */
316f4a4421cSKishore Padmanabha int32_t
317f4a4421cSKishore Padmanabha ulp_flow_db_parent_child_flow_next_entry_get(struct bnxt_ulp_flow_db *flow_db,
318f4a4421cSKishore Padmanabha 					     uint32_t parent_idx,
319f4a4421cSKishore Padmanabha 					     uint32_t *child_fid);
320f4a4421cSKishore Padmanabha 
321be8acb27SKishore Padmanabha /*
322be8acb27SKishore Padmanabha  * Orphan the child flow entry
323be8acb27SKishore Padmanabha  * This is called only for child flows that have
324be8acb27SKishore Padmanabha  * BNXT_ULP_RESOURCE_FUNC_CHILD_FLOW resource
325be8acb27SKishore Padmanabha  *
326be8acb27SKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
327be8acb27SKishore Padmanabha  * flow_type [in] Specify it is regular or default flow
328be8acb27SKishore Padmanabha  * fid [in] The index to the flow entry
329be8acb27SKishore Padmanabha  *
330be8acb27SKishore Padmanabha  * Returns 0 on success and negative on failure.
331be8acb27SKishore Padmanabha  */
332be8acb27SKishore Padmanabha int32_t
333be8acb27SKishore Padmanabha ulp_flow_db_child_flow_reset(struct bnxt_ulp_context *ulp_ctxt,
334be8acb27SKishore Padmanabha 			     enum bnxt_ulp_fdb_type flow_type,
335be8acb27SKishore Padmanabha 			     uint32_t fid);
336be8acb27SKishore Padmanabha 
337be8acb27SKishore Padmanabha /*
338be8acb27SKishore Padmanabha  * Create parent flow in the parent flow tbl
339be8acb27SKishore Padmanabha  *
340be8acb27SKishore Padmanabha  * parms [in] Ptr to mapper params
341be8acb27SKishore Padmanabha  *
342be8acb27SKishore Padmanabha  * Returns 0 on success and negative on failure.
343be8acb27SKishore Padmanabha  */
344be8acb27SKishore Padmanabha int32_t
345be8acb27SKishore Padmanabha ulp_flow_db_parent_flow_create(struct bnxt_ulp_mapper_parms *parms);
346be8acb27SKishore Padmanabha 
347be8acb27SKishore Padmanabha /*
348be8acb27SKishore Padmanabha  * Create child flow in the parent flow tbl
349be8acb27SKishore Padmanabha  *
350be8acb27SKishore Padmanabha  * parms [in] Ptr to mapper params
351be8acb27SKishore Padmanabha  *
352be8acb27SKishore Padmanabha  * Returns 0 on success and negative on failure.
353be8acb27SKishore Padmanabha  */
354be8acb27SKishore Padmanabha int32_t
355be8acb27SKishore Padmanabha ulp_flow_db_child_flow_create(struct bnxt_ulp_mapper_parms *parms);
356d310d59cSKishore Padmanabha 
357640bfd23SKishore Padmanabha /*
358640bfd23SKishore Padmanabha  * Update the parent counters
359640bfd23SKishore Padmanabha  *
360640bfd23SKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
361bdf4a3c6SKishore Padmanabha  * pc_idx [in] The parent flow entry idx
362640bfd23SKishore Padmanabha  * packet_count [in] - packet count
363640bfd23SKishore Padmanabha  * byte_count [in] - byte count
364640bfd23SKishore Padmanabha  *
365640bfd23SKishore Padmanabha  * returns 0 on success
366640bfd23SKishore Padmanabha  */
367640bfd23SKishore Padmanabha int32_t
368640bfd23SKishore Padmanabha ulp_flow_db_parent_flow_count_update(struct bnxt_ulp_context *ulp_ctxt,
369bdf4a3c6SKishore Padmanabha 				     uint32_t pc_idx,
370640bfd23SKishore Padmanabha 				     uint64_t packet_count,
371640bfd23SKishore Padmanabha 				     uint64_t byte_count);
372640bfd23SKishore Padmanabha /*
373640bfd23SKishore Padmanabha  * Get the parent accumulation counters
374640bfd23SKishore Padmanabha  *
375640bfd23SKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
376bdf4a3c6SKishore Padmanabha  * pc_idx [in] The parent flow entry idx
377640bfd23SKishore Padmanabha  * packet_count [out] - packet count
378640bfd23SKishore Padmanabha  * byte_count [out] - byte count
379640bfd23SKishore Padmanabha  *
380640bfd23SKishore Padmanabha  * returns 0 on success
381640bfd23SKishore Padmanabha  */
382640bfd23SKishore Padmanabha int32_t
383640bfd23SKishore Padmanabha ulp_flow_db_parent_flow_count_get(struct bnxt_ulp_context *ulp_ctxt,
3848782e4deSKishore Padmanabha 				  uint32_t flow_id,
385bdf4a3c6SKishore Padmanabha 				  uint32_t pc_idx,
386640bfd23SKishore Padmanabha 				  uint64_t *packet_count,
387ddaf0afaSKishore Padmanabha 				  uint64_t *byte_count,
388ddaf0afaSKishore Padmanabha 				  uint8_t count_reset);
389640bfd23SKishore Padmanabha 
390640bfd23SKishore Padmanabha /*
391640bfd23SKishore Padmanabha  * reset the parent accumulation counters
392640bfd23SKishore Padmanabha  *
393640bfd23SKishore Padmanabha  * ulp_ctxt [in] Ptr to ulp_context
394640bfd23SKishore Padmanabha  *
395640bfd23SKishore Padmanabha  * returns none
396640bfd23SKishore Padmanabha  */
397640bfd23SKishore Padmanabha void
398640bfd23SKishore Padmanabha ulp_flow_db_parent_flow_count_reset(struct bnxt_ulp_context *ulp_ctxt);
399640bfd23SKishore Padmanabha 
40019994cc7SKishore Padmanabha /*
40119994cc7SKishore Padmanabha  * Set the shared bit for the flow db entry
40219994cc7SKishore Padmanabha  *
40319994cc7SKishore Padmanabha  * res [in] Ptr to fdb entry
404d9e70b1dSRandy Schacher  * s_type [in] session flag
40519994cc7SKishore Padmanabha  *
40619994cc7SKishore Padmanabha  * returns none
40719994cc7SKishore Padmanabha  */
40819994cc7SKishore Padmanabha void ulp_flow_db_shared_session_set(struct ulp_flow_db_res_params *res,
409d9e70b1dSRandy Schacher 				    enum bnxt_ulp_session_type s_type);
410d9e70b1dSRandy Schacher 
411d9e70b1dSRandy Schacher /*
412dd0191d5SShuanglin Wang  * get the shared bit for the flow db entry
413d9e70b1dSRandy Schacher  *
414dd0191d5SShuanglin Wang  * res [in] Ptr to fdb entry
415dd0191d5SShuanglin Wang  *
416dd0191d5SShuanglin Wang  * returns session type
417d9e70b1dSRandy Schacher  */
418d9e70b1dSRandy Schacher enum bnxt_ulp_session_type
419d9e70b1dSRandy Schacher ulp_flow_db_shared_session_get(struct ulp_flow_db_res_params *res);
420*a089734aSShuanglin Wang 
421*a089734aSShuanglin Wang /*
422*a089734aSShuanglin Wang  * Get the parent flow table info
423*a089734aSShuanglin Wang  *
424*a089734aSShuanglin Wang  * ulp_ctxt [in] Ptr to ulp_context
425*a089734aSShuanglin Wang  * pc_idx [in] The index to parent child db
426*a089734aSShuanglin Wang  *
427*a089734aSShuanglin Wang  * returns Pointer of parent flow tbl
428*a089734aSShuanglin Wang  */
429*a089734aSShuanglin Wang struct ulp_fdb_parent_info *
430*a089734aSShuanglin Wang ulp_flow_db_pc_db_entry_get(struct bnxt_ulp_context *ulp_ctxt,
431*a089734aSShuanglin Wang 			    uint32_t pc_idx);
432*a089734aSShuanglin Wang 
433313ac35aSVenkat Duvvuru #endif /* _ULP_FLOW_DB_H_ */
434