xref: /dpdk/drivers/net/ntnic/include/flow_api_engine.h (revision e7e01fd15ddee1eb92d68a3aabe800850a8c757a)
11d3f62a0SOleksandr Kolomeiets /*
21d3f62a0SOleksandr Kolomeiets  * SPDX-License-Identifier: BSD-3-Clause
31d3f62a0SOleksandr Kolomeiets  * Copyright(c) 2023 Napatech A/S
41d3f62a0SOleksandr Kolomeiets  */
51d3f62a0SOleksandr Kolomeiets 
61d3f62a0SOleksandr Kolomeiets #ifndef _FLOW_API_ENGINE_H_
71d3f62a0SOleksandr Kolomeiets #define _FLOW_API_ENGINE_H_
81d3f62a0SOleksandr Kolomeiets 
98385ba0eSSerhii Iliushyk #include <stdint.h>
10e02fdb65SSerhii Iliushyk #include <stdatomic.h>
11e02fdb65SSerhii Iliushyk 
12e02fdb65SSerhii Iliushyk #include "hw_mod_backend.h"
13e02fdb65SSerhii Iliushyk #include "stream_binary_flow_api.h"
148385ba0eSSerhii Iliushyk 
151d3f62a0SOleksandr Kolomeiets /*
161d3f62a0SOleksandr Kolomeiets  * Resource management
177917b0d3SOleksandr Kolomeiets  */
187917b0d3SOleksandr Kolomeiets #define BIT_CONTAINER_8_ALIGN(x) (((x) + 7) / 8)
197917b0d3SOleksandr Kolomeiets 
207917b0d3SOleksandr Kolomeiets /*
217917b0d3SOleksandr Kolomeiets  * Resource management
221d3f62a0SOleksandr Kolomeiets  * These are free resources in FPGA
231d3f62a0SOleksandr Kolomeiets  * Other FPGA memory lists are linked to one of these
241d3f62a0SOleksandr Kolomeiets  * and will implicitly follow them
251d3f62a0SOleksandr Kolomeiets  */
261d3f62a0SOleksandr Kolomeiets enum res_type_e {
271d3f62a0SOleksandr Kolomeiets 	RES_QUEUE,
281d3f62a0SOleksandr Kolomeiets 	RES_CAT_CFN,
291d3f62a0SOleksandr Kolomeiets 	RES_CAT_COT,
301d3f62a0SOleksandr Kolomeiets 	RES_CAT_EXO,
311d3f62a0SOleksandr Kolomeiets 	RES_CAT_LEN,
321d3f62a0SOleksandr Kolomeiets 	RES_KM_FLOW_TYPE,
331d3f62a0SOleksandr Kolomeiets 	RES_KM_CATEGORY,
341d3f62a0SOleksandr Kolomeiets 	RES_HSH_RCP,
351d3f62a0SOleksandr Kolomeiets 	RES_PDB_RCP,
361d3f62a0SOleksandr Kolomeiets 	RES_QSL_RCP,
371d3f62a0SOleksandr Kolomeiets 	RES_QSL_QST,
381d3f62a0SOleksandr Kolomeiets 	RES_SLC_LR_RCP,
391d3f62a0SOleksandr Kolomeiets 
401d3f62a0SOleksandr Kolomeiets 	RES_FLM_FLOW_TYPE,
411d3f62a0SOleksandr Kolomeiets 	RES_FLM_RCP,
421d3f62a0SOleksandr Kolomeiets 	RES_TPE_RCP,
431d3f62a0SOleksandr Kolomeiets 	RES_TPE_EXT,
441d3f62a0SOleksandr Kolomeiets 	RES_TPE_RPL,
451d3f62a0SOleksandr Kolomeiets 	RES_SCRUB_RCP,
461d3f62a0SOleksandr Kolomeiets 	RES_COUNT,
471d3f62a0SOleksandr Kolomeiets 	RES_INVALID
481d3f62a0SOleksandr Kolomeiets };
491d3f62a0SOleksandr Kolomeiets 
50b01eb812SDanylo Vodopianov /*
51b01eb812SDanylo Vodopianov  * Flow NIC offload management
52b01eb812SDanylo Vodopianov  */
53b01eb812SDanylo Vodopianov #define MAX_OUTPUT_DEST (128)
54b01eb812SDanylo Vodopianov 
559bd46cf2SDanylo Vodopianov #define MAX_WORD_NUM 24
569bd46cf2SDanylo Vodopianov #define MAX_BANKS 6
579bd46cf2SDanylo Vodopianov 
589bd46cf2SDanylo Vodopianov #define MAX_TCAM_START_OFFSETS 4
599bd46cf2SDanylo Vodopianov 
608385ba0eSSerhii Iliushyk #define MAX_CPY_WRITERS_SUPPORTED 8
618385ba0eSSerhii Iliushyk 
626fec9a9aSSerhii Iliushyk #define MAX_MATCH_FIELDS 16
636fec9a9aSSerhii Iliushyk 
64c6821abfSDanylo Vodopianov /*
659bd46cf2SDanylo Vodopianov  *          128      128     32     32    32
669bd46cf2SDanylo Vodopianov  * Have  |  QW0  ||  QW4  || SW8 || SW9 | SWX   in FPGA
679bd46cf2SDanylo Vodopianov  *
689bd46cf2SDanylo Vodopianov  * Each word may start at any offset, though
699bd46cf2SDanylo Vodopianov  * they are combined in chronological order, with all enabled to
709bd46cf2SDanylo Vodopianov  * build the extracted match data, thus that is how the match key
719bd46cf2SDanylo Vodopianov  * must be build
72c6821abfSDanylo Vodopianov  */
739bd46cf2SDanylo Vodopianov enum extractor_e {
749bd46cf2SDanylo Vodopianov 	KM_USE_EXTRACTOR_UNDEF,
759bd46cf2SDanylo Vodopianov 	KM_USE_EXTRACTOR_QWORD,
769bd46cf2SDanylo Vodopianov 	KM_USE_EXTRACTOR_SWORD,
77c6821abfSDanylo Vodopianov };
78c6821abfSDanylo Vodopianov 
796fec9a9aSSerhii Iliushyk struct match_elem_s {
809bd46cf2SDanylo Vodopianov 	enum extractor_e extr;
816fec9a9aSSerhii Iliushyk 	int masked_for_tcam;	/* if potentially selected for TCAM */
826fec9a9aSSerhii Iliushyk 	uint32_t e_word[4];
836fec9a9aSSerhii Iliushyk 	uint32_t e_mask[4];
846fec9a9aSSerhii Iliushyk 
856fec9a9aSSerhii Iliushyk 	int extr_start_offs_id;
866fec9a9aSSerhii Iliushyk 	int8_t rel_offs;
876fec9a9aSSerhii Iliushyk 	uint32_t word_len;
886fec9a9aSSerhii Iliushyk };
896fec9a9aSSerhii Iliushyk 
909bd46cf2SDanylo Vodopianov enum cam_tech_use_e {
919bd46cf2SDanylo Vodopianov 	KM_CAM,
929bd46cf2SDanylo Vodopianov 	KM_TCAM,
939bd46cf2SDanylo Vodopianov 	KM_SYNERGY
949bd46cf2SDanylo Vodopianov };
959bd46cf2SDanylo Vodopianov 
966fec9a9aSSerhii Iliushyk struct km_flow_def_s {
976fec9a9aSSerhii Iliushyk 	struct flow_api_backend_s *be;
986fec9a9aSSerhii Iliushyk 
999bd46cf2SDanylo Vodopianov 	/* For keeping track of identical entries */
1009bd46cf2SDanylo Vodopianov 	struct km_flow_def_s *reference;
1019bd46cf2SDanylo Vodopianov 	struct km_flow_def_s *root;
1029bd46cf2SDanylo Vodopianov 
1036fec9a9aSSerhii Iliushyk 	/* For collect flow elements and sorting */
1046fec9a9aSSerhii Iliushyk 	struct match_elem_s match[MAX_MATCH_FIELDS];
1059bd46cf2SDanylo Vodopianov 	struct match_elem_s *match_map[MAX_MATCH_FIELDS];
1066fec9a9aSSerhii Iliushyk 	int num_ftype_elem;
1076fec9a9aSSerhii Iliushyk 
1089bd46cf2SDanylo Vodopianov 	/* Finally formatted CAM/TCAM entry */
1099bd46cf2SDanylo Vodopianov 	enum cam_tech_use_e target;
1109bd46cf2SDanylo Vodopianov 	uint32_t entry_word[MAX_WORD_NUM];
1119bd46cf2SDanylo Vodopianov 	uint32_t entry_mask[MAX_WORD_NUM];
1129bd46cf2SDanylo Vodopianov 	int key_word_size;
1139bd46cf2SDanylo Vodopianov 
1149bd46cf2SDanylo Vodopianov 	/* TCAM calculated possible bank start offsets */
1159bd46cf2SDanylo Vodopianov 	int start_offsets[MAX_TCAM_START_OFFSETS];
1169bd46cf2SDanylo Vodopianov 	int num_start_offsets;
1179bd46cf2SDanylo Vodopianov 
1186fec9a9aSSerhii Iliushyk 	/* Flow information */
1196fec9a9aSSerhii Iliushyk 	/* HW input port ID needed for compare. In port must be identical on flow types */
1206fec9a9aSSerhii Iliushyk 	uint32_t port_id;
1219bd46cf2SDanylo Vodopianov 	uint32_t info;	/* used for color (actions) */
1229bd46cf2SDanylo Vodopianov 	int info_set;
1239bd46cf2SDanylo Vodopianov 	int flow_type;	/* 0 is illegal and used as unset */
1249bd46cf2SDanylo Vodopianov 	int flushed_to_target;	/* if this km entry has been finally programmed into NIC hw */
1259bd46cf2SDanylo Vodopianov 
1269bd46cf2SDanylo Vodopianov 	/* CAM specific bank management */
1279bd46cf2SDanylo Vodopianov 	int cam_paired;
1289bd46cf2SDanylo Vodopianov 	int record_indexes[MAX_BANKS];
1299bd46cf2SDanylo Vodopianov 	int bank_used;
1309bd46cf2SDanylo Vodopianov 	uint32_t *cuckoo_moves;	/* for CAM statistics only */
1319bd46cf2SDanylo Vodopianov 	struct cam_distrib_s *cam_dist;
1327fa0bf29SDanylo Vodopianov 	struct hasher_s *hsh;
1339bd46cf2SDanylo Vodopianov 
1349bd46cf2SDanylo Vodopianov 	/* TCAM specific bank management */
1359bd46cf2SDanylo Vodopianov 	struct tcam_distrib_s *tcam_dist;
1369bd46cf2SDanylo Vodopianov 	int tcam_start_bank;
1379bd46cf2SDanylo Vodopianov 	int tcam_record;
1389bd46cf2SDanylo Vodopianov };
1399bd46cf2SDanylo Vodopianov 
1409bd46cf2SDanylo Vodopianov /*
1417fa0bf29SDanylo Vodopianov  * RSS configuration, see struct rte_flow_action_rss
1427fa0bf29SDanylo Vodopianov  */
1437fa0bf29SDanylo Vodopianov struct hsh_def_s {
1447fa0bf29SDanylo Vodopianov 	enum rte_eth_hash_function func;	/* RSS hash function to apply */
1457fa0bf29SDanylo Vodopianov 	/* RSS hash types, see definition of RTE_ETH_RSS_* for hash calculation options */
1467fa0bf29SDanylo Vodopianov 	uint64_t types;
1477fa0bf29SDanylo Vodopianov 	uint32_t key_len;	/* Hash key length in bytes. */
1487fa0bf29SDanylo Vodopianov 	const uint8_t *key;	/* Hash key. */
1497fa0bf29SDanylo Vodopianov };
1507fa0bf29SDanylo Vodopianov 
1517fa0bf29SDanylo Vodopianov /*
1529bd46cf2SDanylo Vodopianov  * Tunnel encapsulation header definition
1539bd46cf2SDanylo Vodopianov  */
1549bd46cf2SDanylo Vodopianov #define MAX_TUN_HDR_SIZE 128
1559bd46cf2SDanylo Vodopianov 
1569bd46cf2SDanylo Vodopianov struct tunnel_header_s {
1579bd46cf2SDanylo Vodopianov 	union {
1589bd46cf2SDanylo Vodopianov 		uint8_t hdr8[MAX_TUN_HDR_SIZE];
1599bd46cf2SDanylo Vodopianov 		uint32_t hdr32[(MAX_TUN_HDR_SIZE + 3) / 4];
1609bd46cf2SDanylo Vodopianov 	} d;
1619bd46cf2SDanylo Vodopianov 
1629bd46cf2SDanylo Vodopianov 	uint8_t len;
1639bd46cf2SDanylo Vodopianov 
1649bd46cf2SDanylo Vodopianov 	uint8_t nb_vlans;
1659bd46cf2SDanylo Vodopianov 
1669bd46cf2SDanylo Vodopianov 	uint8_t ip_version;	/* 4: v4, 6: v6 */
1679bd46cf2SDanylo Vodopianov 
1689bd46cf2SDanylo Vodopianov 	uint8_t new_outer;
1699bd46cf2SDanylo Vodopianov 	uint8_t l2_len;
1709bd46cf2SDanylo Vodopianov 	uint8_t l3_len;
1719bd46cf2SDanylo Vodopianov 	uint8_t l4_len;
1726fec9a9aSSerhii Iliushyk };
1736fec9a9aSSerhii Iliushyk 
174e02fdb65SSerhii Iliushyk enum flow_port_type_e {
175e02fdb65SSerhii Iliushyk 	PORT_NONE,	/* not defined or drop */
176e02fdb65SSerhii Iliushyk 	PORT_INTERNAL,	/* no queues attached */
177e02fdb65SSerhii Iliushyk 	PORT_PHY,	/* MAC phy output queue */
178e02fdb65SSerhii Iliushyk 	PORT_VIRT,	/* Memory queues to Host */
179e02fdb65SSerhii Iliushyk };
180e02fdb65SSerhii Iliushyk 
181e02fdb65SSerhii Iliushyk struct output_s {
182e02fdb65SSerhii Iliushyk 	uint32_t owning_port_id;/* the port who owns this output destination */
183e02fdb65SSerhii Iliushyk 	enum flow_port_type_e type;
184e02fdb65SSerhii Iliushyk 	int id;	/* depending on port type: queue ID or physical port id or not used */
185e02fdb65SSerhii Iliushyk 	int active;	/* activated */
186e02fdb65SSerhii Iliushyk };
187e02fdb65SSerhii Iliushyk 
188e02fdb65SSerhii Iliushyk struct nic_flow_def {
189e02fdb65SSerhii Iliushyk 	/*
190e02fdb65SSerhii Iliushyk 	 * Frame Decoder match info collected
191e02fdb65SSerhii Iliushyk 	 */
192e02fdb65SSerhii Iliushyk 	int l2_prot;
193e02fdb65SSerhii Iliushyk 	int l3_prot;
194e02fdb65SSerhii Iliushyk 	int l4_prot;
195e02fdb65SSerhii Iliushyk 	int tunnel_prot;
196e02fdb65SSerhii Iliushyk 	int tunnel_l3_prot;
197e02fdb65SSerhii Iliushyk 	int tunnel_l4_prot;
198e02fdb65SSerhii Iliushyk 	int vlans;
199e02fdb65SSerhii Iliushyk 	int fragmentation;
200e02fdb65SSerhii Iliushyk 	int ip_prot;
201e02fdb65SSerhii Iliushyk 	int tunnel_ip_prot;
202e02fdb65SSerhii Iliushyk 	/*
203e02fdb65SSerhii Iliushyk 	 * Additional meta data for various functions
204e02fdb65SSerhii Iliushyk 	 */
205e02fdb65SSerhii Iliushyk 	int in_port_override;
206e02fdb65SSerhii Iliushyk 	int non_empty;	/* default value is -1; value 1 means flow actions update */
207e02fdb65SSerhii Iliushyk 	struct output_s dst_id[MAX_OUTPUT_DEST];/* define the output to use */
208e02fdb65SSerhii Iliushyk 	/* total number of available queues defined for all outputs - i.e. number of dst_id's */
209e02fdb65SSerhii Iliushyk 	int dst_num_avail;
210e02fdb65SSerhii Iliushyk 
211e02fdb65SSerhii Iliushyk 	/*
212e02fdb65SSerhii Iliushyk 	 * Mark or Action info collection
213e02fdb65SSerhii Iliushyk 	 */
214e02fdb65SSerhii Iliushyk 	uint32_t mark;
215e02fdb65SSerhii Iliushyk 
216e02fdb65SSerhii Iliushyk 	uint32_t jump_to_group;
217e02fdb65SSerhii Iliushyk 
218e02fdb65SSerhii Iliushyk 	int full_offload;
2196fec9a9aSSerhii Iliushyk 
2206fec9a9aSSerhii Iliushyk 	/*
221c6821abfSDanylo Vodopianov 	 * Action push tunnel
222c6821abfSDanylo Vodopianov 	 */
223c6821abfSDanylo Vodopianov 	struct tunnel_header_s tun_hdr;
224c6821abfSDanylo Vodopianov 
225c6821abfSDanylo Vodopianov 	/*
226c6821abfSDanylo Vodopianov 	 * If DPDK RTE tunnel helper API used
227c6821abfSDanylo Vodopianov 	 * this holds the tunnel if used in flow
228c6821abfSDanylo Vodopianov 	 */
229c6821abfSDanylo Vodopianov 	struct tunnel_s *tnl;
230c6821abfSDanylo Vodopianov 
231c6821abfSDanylo Vodopianov 	/*
232c6821abfSDanylo Vodopianov 	 * Header Stripper
233c6821abfSDanylo Vodopianov 	 */
234c6821abfSDanylo Vodopianov 	int header_strip_end_dyn;
235c6821abfSDanylo Vodopianov 	int header_strip_end_ofs;
236c6821abfSDanylo Vodopianov 
237c6821abfSDanylo Vodopianov 	/*
2386fec9a9aSSerhii Iliushyk 	 * Modify field
2396fec9a9aSSerhii Iliushyk 	 */
2406fec9a9aSSerhii Iliushyk 	struct {
2416fec9a9aSSerhii Iliushyk 		uint32_t select;
242339ca124SDanylo Vodopianov 		uint32_t dyn;
243339ca124SDanylo Vodopianov 		uint32_t ofs;
244339ca124SDanylo Vodopianov 		uint32_t len;
245339ca124SDanylo Vodopianov 		uint32_t level;
2466fec9a9aSSerhii Iliushyk 		union {
2476fec9a9aSSerhii Iliushyk 			uint8_t value8[16];
2486fec9a9aSSerhii Iliushyk 			uint16_t value16[8];
2496fec9a9aSSerhii Iliushyk 			uint32_t value32[4];
2506fec9a9aSSerhii Iliushyk 		};
2516fec9a9aSSerhii Iliushyk 	} modify_field[MAX_CPY_WRITERS_SUPPORTED];
2526fec9a9aSSerhii Iliushyk 
2536fec9a9aSSerhii Iliushyk 	uint32_t modify_field_count;
254339ca124SDanylo Vodopianov 	uint8_t ttl_sub_enable;
255339ca124SDanylo Vodopianov 	uint8_t ttl_sub_ipv4;
256339ca124SDanylo Vodopianov 	uint8_t ttl_sub_outer;
2576fec9a9aSSerhii Iliushyk 
2586fec9a9aSSerhii Iliushyk 	/*
2596fec9a9aSSerhii Iliushyk 	 * Key Matcher flow definitions
2606fec9a9aSSerhii Iliushyk 	 */
2616fec9a9aSSerhii Iliushyk 	struct km_flow_def_s km;
2627fa0bf29SDanylo Vodopianov 
2637fa0bf29SDanylo Vodopianov 	/*
2647fa0bf29SDanylo Vodopianov 	 * Hash module RSS definitions
2657fa0bf29SDanylo Vodopianov 	 */
2667fa0bf29SDanylo Vodopianov 	struct hsh_def_s hsh;
267e02fdb65SSerhii Iliushyk };
268e02fdb65SSerhii Iliushyk 
269e02fdb65SSerhii Iliushyk enum flow_handle_type {
270e02fdb65SSerhii Iliushyk 	FLOW_HANDLE_TYPE_FLOW,
271e02fdb65SSerhii Iliushyk 	FLOW_HANDLE_TYPE_FLM,
272e02fdb65SSerhii Iliushyk };
2738385ba0eSSerhii Iliushyk 
2742005c549SSerhii Iliushyk struct flow_handle {
275e02fdb65SSerhii Iliushyk 	enum flow_handle_type type;
276e02fdb65SSerhii Iliushyk 	uint32_t flm_id;
277e02fdb65SSerhii Iliushyk 	uint16_t caller_id;
278e02fdb65SSerhii Iliushyk 	uint16_t learn_ignored;
279e02fdb65SSerhii Iliushyk 
2802005c549SSerhii Iliushyk 	struct flow_eth_dev *dev;
2812005c549SSerhii Iliushyk 	struct flow_handle *next;
282e02fdb65SSerhii Iliushyk 	struct flow_handle *prev;
283e02fdb65SSerhii Iliushyk 
2846f0fe142SOleksandr Kolomeiets 	/* Flow specific pointer to application data stored during action creation. */
2856f0fe142SOleksandr Kolomeiets 	void *context;
286e02fdb65SSerhii Iliushyk 	void *user_data;
287e02fdb65SSerhii Iliushyk 
288e02fdb65SSerhii Iliushyk 	union {
289e02fdb65SSerhii Iliushyk 		struct {
290e02fdb65SSerhii Iliushyk 			/*
291e02fdb65SSerhii Iliushyk 			 * 1st step conversion and validation of flow
292e02fdb65SSerhii Iliushyk 			 * verified and converted flow match + actions structure
293e02fdb65SSerhii Iliushyk 			 */
294e02fdb65SSerhii Iliushyk 			struct nic_flow_def *fd;
295e02fdb65SSerhii Iliushyk 			/*
296e02fdb65SSerhii Iliushyk 			 * 2nd step NIC HW resource allocation and configuration
297e02fdb65SSerhii Iliushyk 			 * NIC resource management structures
298e02fdb65SSerhii Iliushyk 			 */
299e02fdb65SSerhii Iliushyk 			struct {
300e02fdb65SSerhii Iliushyk 				uint32_t db_idx_counter;
301e02fdb65SSerhii Iliushyk 				uint32_t db_idxs[RES_COUNT];
302e02fdb65SSerhii Iliushyk 			};
303e02fdb65SSerhii Iliushyk 			uint32_t port_id;	/* MAC port ID or override of virtual in_port */
304e02fdb65SSerhii Iliushyk 		};
305e02fdb65SSerhii Iliushyk 
306e02fdb65SSerhii Iliushyk 		struct {
307e02fdb65SSerhii Iliushyk 			uint32_t flm_db_idx_counter;
308e02fdb65SSerhii Iliushyk 			uint32_t flm_db_idxs[RES_COUNT];
309e02fdb65SSerhii Iliushyk 
310e02fdb65SSerhii Iliushyk 			uint32_t flm_data[10];
311e02fdb65SSerhii Iliushyk 			uint8_t flm_prot;
312e02fdb65SSerhii Iliushyk 			uint8_t flm_kid;
313e02fdb65SSerhii Iliushyk 			uint8_t flm_prio;
314e02fdb65SSerhii Iliushyk 			uint8_t flm_ft;
315e02fdb65SSerhii Iliushyk 
316e02fdb65SSerhii Iliushyk 			uint16_t flm_rpl_ext_ptr;
317e02fdb65SSerhii Iliushyk 			uint32_t flm_nat_ipv4;
318e02fdb65SSerhii Iliushyk 			uint16_t flm_nat_port;
319e02fdb65SSerhii Iliushyk 			uint8_t flm_dscp;
320e02fdb65SSerhii Iliushyk 			uint32_t flm_teid;
321e02fdb65SSerhii Iliushyk 			uint8_t flm_rqi;
322e02fdb65SSerhii Iliushyk 			uint8_t flm_qfi;
323*e7e01fd1SDanylo Vodopianov 			uint8_t flm_scrub_prof;
324e02fdb65SSerhii Iliushyk 		};
325e02fdb65SSerhii Iliushyk 	};
3262005c549SSerhii Iliushyk };
3272005c549SSerhii Iliushyk 
3289bd46cf2SDanylo Vodopianov void km_attach_ndev_resource_management(struct km_flow_def_s *km, void **handle);
3291d3f62a0SOleksandr Kolomeiets void km_free_ndev_resource_management(void **handle);
3301d3f62a0SOleksandr Kolomeiets 
3316fec9a9aSSerhii Iliushyk int km_add_match_elem(struct km_flow_def_s *km, uint32_t e_word[4], uint32_t e_mask[4],
3326fec9a9aSSerhii Iliushyk 	uint32_t word_len, enum frame_offs_e start, int8_t offset);
3336fec9a9aSSerhii Iliushyk 
3349bd46cf2SDanylo Vodopianov int km_key_create(struct km_flow_def_s *km, uint32_t port_id);
3359bd46cf2SDanylo Vodopianov /*
3369bd46cf2SDanylo Vodopianov  * Compares 2 KM key definitions after first collect validate and optimization.
3379bd46cf2SDanylo Vodopianov  * km is compared against an existing km1.
3389bd46cf2SDanylo Vodopianov  * if identical, km1 flow_type is returned
3399bd46cf2SDanylo Vodopianov  */
3409bd46cf2SDanylo Vodopianov int km_key_compare(struct km_flow_def_s *km, struct km_flow_def_s *km1);
3419bd46cf2SDanylo Vodopianov 
3429bd46cf2SDanylo Vodopianov int km_rcp_set(struct km_flow_def_s *km, int index);
3439bd46cf2SDanylo Vodopianov 
3449bd46cf2SDanylo Vodopianov int km_write_data_match_entry(struct km_flow_def_s *km, uint32_t color);
3459bd46cf2SDanylo Vodopianov int km_clear_data_match_entry(struct km_flow_def_s *km);
3469bd46cf2SDanylo Vodopianov 
3471d3f62a0SOleksandr Kolomeiets void kcc_free_ndev_resource_management(void **handle);
3481d3f62a0SOleksandr Kolomeiets 
3498385ba0eSSerhii Iliushyk /*
3508385ba0eSSerhii Iliushyk  * Group management
3518385ba0eSSerhii Iliushyk  */
3528385ba0eSSerhii Iliushyk int flow_group_handle_create(void **handle, uint32_t group_count);
3538385ba0eSSerhii Iliushyk int flow_group_handle_destroy(void **handle);
354e02fdb65SSerhii Iliushyk 
355e02fdb65SSerhii Iliushyk int flow_group_translate_get(void *handle, uint8_t owner_id, uint8_t port_id, uint32_t group_in,
356e02fdb65SSerhii Iliushyk 	uint32_t *group_out);
357e02fdb65SSerhii Iliushyk 
3581d3f62a0SOleksandr Kolomeiets #endif  /* _FLOW_API_ENGINE_H_ */
359