xref: /dpdk/drivers/net/ntnic/include/hw_mod_backend.h (revision 6019656d6f6848c83591f24867538311545776eb)
18df4a5f8SOleksandr Kolomeiets /*
28df4a5f8SOleksandr Kolomeiets  * SPDX-License-Identifier: BSD-3-Clause
38df4a5f8SOleksandr Kolomeiets  * Copyright(c) 2023 Napatech A/S
48df4a5f8SOleksandr Kolomeiets  */
58df4a5f8SOleksandr Kolomeiets 
68df4a5f8SOleksandr Kolomeiets #ifndef _HW_MOD_BACKEND_H_
78df4a5f8SOleksandr Kolomeiets #define _HW_MOD_BACKEND_H_
88df4a5f8SOleksandr Kolomeiets 
9636b2cfeSOleksandr Kolomeiets #include <stdbool.h>
107fadd2baSOleksandr Kolomeiets #include <string.h>
11636b2cfeSOleksandr Kolomeiets 
121d3f62a0SOleksandr Kolomeiets #include "ntlog.h"
131d3f62a0SOleksandr Kolomeiets 
14636b2cfeSOleksandr Kolomeiets #include "hw_mod_cat_v18.h"
15636b2cfeSOleksandr Kolomeiets #include "hw_mod_cat_v21.h"
16cec43fabSOleksandr Kolomeiets #include "hw_mod_flm_v25.h"
173005c75dSOleksandr Kolomeiets #include "hw_mod_km_v7.h"
18b95f1cd0SOleksandr Kolomeiets #include "hw_mod_qsl_v7.h"
197d65ee1aSOleksandr Kolomeiets #include "hw_mod_pdb_v9.h"
208c545325SOleksandr Kolomeiets #include "hw_mod_slc_lr_v2.h"
21a5a5d5bbSOleksandr Kolomeiets #include "hw_mod_hsh_v5.h"
227f058028SSerhii Iliushyk #include "hw_mod_tpe_v3.h"
23636b2cfeSOleksandr Kolomeiets 
24e3723ca6SOleksandr Kolomeiets #define MAX_PHYS_ADAPTERS 8
25e3723ca6SOleksandr Kolomeiets 
266e8b7f11SOleksandr Kolomeiets #define VER_MAJOR(ver) (((ver) >> 16) & 0xffff)
276e8b7f11SOleksandr Kolomeiets #define VER_MINOR(ver) ((ver) & 0xffff)
286e8b7f11SOleksandr Kolomeiets 
296e8b7f11SOleksandr Kolomeiets struct flow_api_backend_s;
306e8b7f11SOleksandr Kolomeiets struct common_func_s;
316e8b7f11SOleksandr Kolomeiets 
326e8b7f11SOleksandr Kolomeiets void *callocate_mod(struct common_func_s *mod, int sets, ...);
336e8b7f11SOleksandr Kolomeiets void zero_module_cache(struct common_func_s *mod);
346e8b7f11SOleksandr Kolomeiets 
356e8b7f11SOleksandr Kolomeiets #define ALL_ENTRIES -1000
36fbe2726fSOleksandr Kolomeiets #define ALL_BANK_ENTRIES -1001
376e8b7f11SOleksandr Kolomeiets 
386e8b7f11SOleksandr Kolomeiets #define INDEX_TOO_LARGE (-2)
396e8b7f11SOleksandr Kolomeiets #define INDEX_TOO_LARGE_LOG NT_LOG(INF, FILTER, "ERROR:%s: Index too large", __func__)
406e8b7f11SOleksandr Kolomeiets 
416e8b7f11SOleksandr Kolomeiets #define WORD_OFF_TOO_LARGE (-3)
426e8b7f11SOleksandr Kolomeiets #define WORD_OFF_TOO_LARGE_LOG NT_LOG(INF, FILTER, "ERROR:%s: Word offset too large", __func__)
436e8b7f11SOleksandr Kolomeiets 
446e8b7f11SOleksandr Kolomeiets #define UNSUP_FIELD (-5)
456e8b7f11SOleksandr Kolomeiets #define UNSUP_FIELD_LOG                                                         \
466e8b7f11SOleksandr Kolomeiets 	NT_LOG(INF, FILTER, "ERROR:%s: Unsupported field in NIC module", __func__)
476e8b7f11SOleksandr Kolomeiets 
486e8b7f11SOleksandr Kolomeiets #define UNSUP_VER (-4)
496e8b7f11SOleksandr Kolomeiets #define UNSUP_VER_LOG                                                                       \
506e8b7f11SOleksandr Kolomeiets 	NT_LOG(INF, FILTER, "ERROR:%s: Unsupported NIC module: %s ver %i.%i", __func__, _MOD_, \
516e8b7f11SOleksandr Kolomeiets 		VER_MAJOR(_VER_), VER_MINOR(_VER_))
526e8b7f11SOleksandr Kolomeiets 
536e8b7f11SOleksandr Kolomeiets #define COUNT_ERROR (-4)
546e8b7f11SOleksandr Kolomeiets #define COUNT_ERROR_LOG(_RESOURCE_)                                                         \
556e8b7f11SOleksandr Kolomeiets 	NT_LOG(INF, FILTER,                                                                      \
566e8b7f11SOleksandr Kolomeiets 		"ERROR:%s: Insufficient resource [ %s ] : NIC module: %s ver %i.%i", __func__,  \
576e8b7f11SOleksandr Kolomeiets 		#_RESOURCE_, _MOD_, VER_MAJOR(_VER_), VER_MINOR(_VER_))                          \
586e8b7f11SOleksandr Kolomeiets 
596e8b7f11SOleksandr Kolomeiets #define NOT_FOUND 0xffffffff
606e8b7f11SOleksandr Kolomeiets 
616e8b7f11SOleksandr Kolomeiets enum {
626e8b7f11SOleksandr Kolomeiets 	EXTRA_INDEXES
636e8b7f11SOleksandr Kolomeiets };
646e8b7f11SOleksandr Kolomeiets 
656e8b7f11SOleksandr Kolomeiets #define GET(cached_val, val) ({ *(val) = *(cached_val); })
666e8b7f11SOleksandr Kolomeiets 
676e8b7f11SOleksandr Kolomeiets #define SET(cached_val, val) ({ *(cached_val) = *(val); })
686e8b7f11SOleksandr Kolomeiets 
696e8b7f11SOleksandr Kolomeiets #define GET_SET(cached_val, val)                                                                  \
706e8b7f11SOleksandr Kolomeiets 	do {                                                                                      \
716e8b7f11SOleksandr Kolomeiets 		uint32_t *temp_val = (val);                                                       \
726e8b7f11SOleksandr Kolomeiets 		typeof(cached_val) *temp_cached_val = &(cached_val);                          \
736e8b7f11SOleksandr Kolomeiets 		if (get)                                                                          \
746e8b7f11SOleksandr Kolomeiets 			GET(temp_cached_val, temp_val);                                           \
756e8b7f11SOleksandr Kolomeiets 		else                                                                              \
766e8b7f11SOleksandr Kolomeiets 			SET(temp_cached_val, temp_val);                                           \
776e8b7f11SOleksandr Kolomeiets 	} while (0)
786e8b7f11SOleksandr Kolomeiets 
796e8b7f11SOleksandr Kolomeiets #define GET_SIGNED(cached_val, val) ({ *(val) = (uint32_t)(*(cached_val)); })
806e8b7f11SOleksandr Kolomeiets 
816e8b7f11SOleksandr Kolomeiets #define SET_SIGNED(cached_val, val) ({ *(cached_val) = (int32_t)(*(val)); })
826e8b7f11SOleksandr Kolomeiets 
836e8b7f11SOleksandr Kolomeiets #define GET_SET_SIGNED(cached_val, val)                                                           \
846e8b7f11SOleksandr Kolomeiets 	do {                                                                                      \
856e8b7f11SOleksandr Kolomeiets 		uint32_t *temp_val = (val);                                                       \
866e8b7f11SOleksandr Kolomeiets 		typeof(cached_val) *temp_cached_val = &(cached_val);                          \
876e8b7f11SOleksandr Kolomeiets 		if (get)                                                                          \
886e8b7f11SOleksandr Kolomeiets 			GET_SIGNED(temp_cached_val, temp_val);                                    \
896e8b7f11SOleksandr Kolomeiets 		else                                                                              \
906e8b7f11SOleksandr Kolomeiets 			SET_SIGNED(temp_cached_val, temp_val);                                    \
916e8b7f11SOleksandr Kolomeiets 	} while (0)
926e8b7f11SOleksandr Kolomeiets 
936e8b7f11SOleksandr Kolomeiets #define FIND_EQUAL_INDEX(be_module_reg, type, idx, start, nb_elements)                            \
946e8b7f11SOleksandr Kolomeiets 	do {                                                                                      \
956e8b7f11SOleksandr Kolomeiets 		typeof(be_module_reg) *temp_be_module =                                       \
966e8b7f11SOleksandr Kolomeiets 			(typeof(be_module_reg) *)be_module_reg;                               \
976e8b7f11SOleksandr Kolomeiets 		typeof(idx) tmp_idx = (idx);                                                  \
986e8b7f11SOleksandr Kolomeiets 		typeof(nb_elements) tmp_nb_elements = (nb_elements);                          \
996e8b7f11SOleksandr Kolomeiets 		unsigned int start_idx = (unsigned int)(start);                                   \
1006e8b7f11SOleksandr Kolomeiets 		*value = NOT_FOUND;                                                               \
1016e8b7f11SOleksandr Kolomeiets 		for (unsigned int i = start_idx; i < tmp_nb_elements; i++) {                      \
1026e8b7f11SOleksandr Kolomeiets 			if ((unsigned int)(tmp_idx) == i)                                         \
1036e8b7f11SOleksandr Kolomeiets 				continue;                                                         \
1046e8b7f11SOleksandr Kolomeiets 			if (memcmp(&temp_be_module[tmp_idx], &temp_be_module[i], sizeof(type)) == \
1056e8b7f11SOleksandr Kolomeiets 			    0) {                                                                  \
1066e8b7f11SOleksandr Kolomeiets 				*value = i;                                                       \
1076e8b7f11SOleksandr Kolomeiets 				break;                                                            \
1086e8b7f11SOleksandr Kolomeiets 			}                                                                         \
1096e8b7f11SOleksandr Kolomeiets 		}                                                                                 \
1106e8b7f11SOleksandr Kolomeiets 	} while (0)
1116e8b7f11SOleksandr Kolomeiets 
1126e8b7f11SOleksandr Kolomeiets #define DO_COMPARE_INDEXS(be_module_reg, type, idx, cmp_idx)                                      \
1136e8b7f11SOleksandr Kolomeiets 	do {                                                                                      \
1146e8b7f11SOleksandr Kolomeiets 		typeof(be_module_reg) *temp_be_module = &(be_module_reg);                     \
1156e8b7f11SOleksandr Kolomeiets 		typeof(idx) tmp_idx = (idx);                                                  \
1166e8b7f11SOleksandr Kolomeiets 		typeof(cmp_idx) tmp_cmp_idx = (cmp_idx);                                      \
1176e8b7f11SOleksandr Kolomeiets 		if ((unsigned int)(tmp_idx) != (unsigned int)(tmp_cmp_idx)) {                     \
1186e8b7f11SOleksandr Kolomeiets 			(void)memcmp(temp_be_module + tmp_idx, &temp_be_module[tmp_cmp_idx],      \
1196e8b7f11SOleksandr Kolomeiets 				     sizeof(type));                                               \
1206e8b7f11SOleksandr Kolomeiets 		}                                                                                 \
1216e8b7f11SOleksandr Kolomeiets 	} while (0)
1226e8b7f11SOleksandr Kolomeiets 
12329584e9dSSerhii Iliushyk static inline int is_non_zero(const void *addr, size_t n)
12429584e9dSSerhii Iliushyk {
12529584e9dSSerhii Iliushyk 	size_t i = 0;
12629584e9dSSerhii Iliushyk 	const uint8_t *p = (const uint8_t *)addr;
12729584e9dSSerhii Iliushyk 
12829584e9dSSerhii Iliushyk 	for (i = 0; i < n; i++)
12929584e9dSSerhii Iliushyk 		if (p[i] != 0)
13029584e9dSSerhii Iliushyk 			return 1;
13129584e9dSSerhii Iliushyk 
13229584e9dSSerhii Iliushyk 	return 0;
13329584e9dSSerhii Iliushyk }
13429584e9dSSerhii Iliushyk 
1356fec9a9aSSerhii Iliushyk /* Sideband info bit indicator */
1369bd46cf2SDanylo Vodopianov #define SWX_INFO (1 << 6)
1376fec9a9aSSerhii Iliushyk 
1386e8b7f11SOleksandr Kolomeiets enum km_flm_if_select_e {
1396e8b7f11SOleksandr Kolomeiets 	KM_FLM_IF_FIRST = 0,
1406e8b7f11SOleksandr Kolomeiets 	KM_FLM_IF_SECOND = 1
1416e8b7f11SOleksandr Kolomeiets };
1426e8b7f11SOleksandr Kolomeiets 
1436e8b7f11SOleksandr Kolomeiets #define FIELD_START_INDEX 100
1446e8b7f11SOleksandr Kolomeiets 
145636b2cfeSOleksandr Kolomeiets #define COMMON_FUNC_INFO_S                                                                        \
146636b2cfeSOleksandr Kolomeiets 	int ver;                                                                                  \
147636b2cfeSOleksandr Kolomeiets 	void *base;                                                                               \
148636b2cfeSOleksandr Kolomeiets 	unsigned int alloced_size;                                                                \
149636b2cfeSOleksandr Kolomeiets 	int debug
150636b2cfeSOleksandr Kolomeiets 
1519bd46cf2SDanylo Vodopianov enum frame_offs_e {
1527fa0bf29SDanylo Vodopianov 	DYN_SOF = 0,
1539bd46cf2SDanylo Vodopianov 	DYN_L2 = 1,
1549bd46cf2SDanylo Vodopianov 	DYN_FIRST_VLAN = 2,
1557fa0bf29SDanylo Vodopianov 	DYN_MPLS = 3,
1569bd46cf2SDanylo Vodopianov 	DYN_L3 = 4,
1577fa0bf29SDanylo Vodopianov 	DYN_ID_IPV4_6 = 5,
1587fa0bf29SDanylo Vodopianov 	DYN_FINAL_IP_DST = 6,
1599bd46cf2SDanylo Vodopianov 	DYN_L4 = 7,
1609bd46cf2SDanylo Vodopianov 	DYN_L4_PAYLOAD = 8,
1617fa0bf29SDanylo Vodopianov 	DYN_TUN_PAYLOAD = 9,
1627fa0bf29SDanylo Vodopianov 	DYN_TUN_L2 = 10,
1637fa0bf29SDanylo Vodopianov 	DYN_TUN_VLAN = 11,
1647fa0bf29SDanylo Vodopianov 	DYN_TUN_MPLS = 12,
1659bd46cf2SDanylo Vodopianov 	DYN_TUN_L3 = 13,
1667fa0bf29SDanylo Vodopianov 	DYN_TUN_ID_IPV4_6 = 14,
1677fa0bf29SDanylo Vodopianov 	DYN_TUN_FINAL_IP_DST = 15,
1689bd46cf2SDanylo Vodopianov 	DYN_TUN_L4 = 16,
1699bd46cf2SDanylo Vodopianov 	DYN_TUN_L4_PAYLOAD = 17,
1707fa0bf29SDanylo Vodopianov 	DYN_EOF = 18,
1717fa0bf29SDanylo Vodopianov 	DYN_L3_PAYLOAD_END = 19,
1727fa0bf29SDanylo Vodopianov 	DYN_TUN_L3_PAYLOAD_END = 20,
1739bd46cf2SDanylo Vodopianov 	SB_VNI = SWX_INFO | 1,
1749bd46cf2SDanylo Vodopianov 	SB_MAC_PORT = SWX_INFO | 2,
1759bd46cf2SDanylo Vodopianov 	SB_KCC_ID = SWX_INFO | 3
1769bd46cf2SDanylo Vodopianov };
1779bd46cf2SDanylo Vodopianov 
1789bd46cf2SDanylo Vodopianov enum {
1799bd46cf2SDanylo Vodopianov 	QW0_SEL_EXCLUDE = 0,
1809bd46cf2SDanylo Vodopianov 	QW0_SEL_FIRST32 = 1,
1819bd46cf2SDanylo Vodopianov 	QW0_SEL_FIRST64 = 3,
1829bd46cf2SDanylo Vodopianov 	QW0_SEL_ALL128 = 4,
1839bd46cf2SDanylo Vodopianov };
1849bd46cf2SDanylo Vodopianov 
1859bd46cf2SDanylo Vodopianov enum {
1869bd46cf2SDanylo Vodopianov 	QW4_SEL_EXCLUDE = 0,
1879bd46cf2SDanylo Vodopianov 	QW4_SEL_FIRST32 = 1,
1889bd46cf2SDanylo Vodopianov 	QW4_SEL_FIRST64 = 2,
1899bd46cf2SDanylo Vodopianov 	QW4_SEL_ALL128 = 3,
1909bd46cf2SDanylo Vodopianov };
1919bd46cf2SDanylo Vodopianov 
1929bd46cf2SDanylo Vodopianov enum {
1939bd46cf2SDanylo Vodopianov 	DW8_SEL_EXCLUDE = 0,
1949bd46cf2SDanylo Vodopianov 	DW8_SEL_FIRST32 = 3,
1959bd46cf2SDanylo Vodopianov };
1969bd46cf2SDanylo Vodopianov 
1979bd46cf2SDanylo Vodopianov enum {
1989bd46cf2SDanylo Vodopianov 	DW10_SEL_EXCLUDE = 0,
1999bd46cf2SDanylo Vodopianov 	DW10_SEL_FIRST32 = 2,
2009bd46cf2SDanylo Vodopianov };
2019bd46cf2SDanylo Vodopianov 
2029bd46cf2SDanylo Vodopianov enum {
2039bd46cf2SDanylo Vodopianov 	SWX_SEL_EXCLUDE = 0,
2049bd46cf2SDanylo Vodopianov 	SWX_SEL_ALL32 = 1,
2059bd46cf2SDanylo Vodopianov };
2069bd46cf2SDanylo Vodopianov 
2076fec9a9aSSerhii Iliushyk enum {
2086fec9a9aSSerhii Iliushyk 	PROT_OTHER = 0,
2096fec9a9aSSerhii Iliushyk 	PROT_L2_ETH2 = 1,
2106fec9a9aSSerhii Iliushyk };
2116fec9a9aSSerhii Iliushyk 
2126fec9a9aSSerhii Iliushyk enum {
2136fec9a9aSSerhii Iliushyk 	PROT_L3_IPV4 = 1,
214b199509aSDanylo Vodopianov 	PROT_L3_IPV6 = 2
2156fec9a9aSSerhii Iliushyk };
2166fec9a9aSSerhii Iliushyk 
2176fec9a9aSSerhii Iliushyk enum {
218a8fbe919SDanylo Vodopianov 	PROT_L4_TCP = 1,
219e872a0c9SDanylo Vodopianov 	PROT_L4_UDP = 2,
220af7ae7aaSDanylo Vodopianov 	PROT_L4_SCTP = 3,
2216fec9a9aSSerhii Iliushyk 	PROT_L4_ICMP = 4
2226fec9a9aSSerhii Iliushyk };
2236fec9a9aSSerhii Iliushyk 
2246fec9a9aSSerhii Iliushyk enum {
225c6821abfSDanylo Vodopianov 	PROT_TUN_GTPV1U = 6,
226c6821abfSDanylo Vodopianov };
227c6821abfSDanylo Vodopianov 
228c6821abfSDanylo Vodopianov enum {
2296fec9a9aSSerhii Iliushyk 	PROT_TUN_L3_OTHER = 0,
2306fec9a9aSSerhii Iliushyk 	PROT_TUN_L3_IPV4 = 1,
231b199509aSDanylo Vodopianov 	PROT_TUN_L3_IPV6 = 2
2326fec9a9aSSerhii Iliushyk };
2336fec9a9aSSerhii Iliushyk 
2346fec9a9aSSerhii Iliushyk enum {
2356fec9a9aSSerhii Iliushyk 	PROT_TUN_L4_OTHER = 0,
236a8fbe919SDanylo Vodopianov 	PROT_TUN_L4_TCP = 1,
237e872a0c9SDanylo Vodopianov 	PROT_TUN_L4_UDP = 2,
238af7ae7aaSDanylo Vodopianov 	PROT_TUN_L4_SCTP = 3,
2396fec9a9aSSerhii Iliushyk 	PROT_TUN_L4_ICMP = 4
2406fec9a9aSSerhii Iliushyk };
2416fec9a9aSSerhii Iliushyk 
2426fec9a9aSSerhii Iliushyk 
2436fec9a9aSSerhii Iliushyk enum {
2447fa0bf29SDanylo Vodopianov 	HASH_HASH_NONE = 0,
2457fa0bf29SDanylo Vodopianov 	HASH_5TUPLE = 8,
2467fa0bf29SDanylo Vodopianov };
2477fa0bf29SDanylo Vodopianov 
2487fa0bf29SDanylo Vodopianov enum {
2496fec9a9aSSerhii Iliushyk 	CPY_SELECT_DSCP_IPV4 = 0,
2506fec9a9aSSerhii Iliushyk 	CPY_SELECT_DSCP_IPV6 = 1,
2516fec9a9aSSerhii Iliushyk 	CPY_SELECT_RQI_QFI = 2,
2526fec9a9aSSerhii Iliushyk 	CPY_SELECT_IPV4 = 3,
2536fec9a9aSSerhii Iliushyk 	CPY_SELECT_PORT = 4,
2546fec9a9aSSerhii Iliushyk 	CPY_SELECT_TEID = 5,
2556fec9a9aSSerhii Iliushyk };
2566fec9a9aSSerhii Iliushyk 
2576e8b7f11SOleksandr Kolomeiets struct common_func_s {
2586e8b7f11SOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
2596e8b7f11SOleksandr Kolomeiets };
2606e8b7f11SOleksandr Kolomeiets 
261636b2cfeSOleksandr Kolomeiets struct cat_func_s {
262636b2cfeSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
263636b2cfeSOleksandr Kolomeiets 	uint32_t nb_cat_funcs;
264636b2cfeSOleksandr Kolomeiets 	uint32_t nb_flow_types;
265636b2cfeSOleksandr Kolomeiets 	uint32_t nb_pm_ext;
266636b2cfeSOleksandr Kolomeiets 	uint32_t nb_len;
267636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_size;
268636b2cfeSOleksandr Kolomeiets 	uint32_t cts_num;
269636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_banks;
270636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_id_bit_size;
271636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_records;
272636b2cfeSOleksandr Kolomeiets 	uint32_t km_if_count;
273636b2cfeSOleksandr Kolomeiets 	int32_t km_if_m0;
274636b2cfeSOleksandr Kolomeiets 	int32_t km_if_m1;
275636b2cfeSOleksandr Kolomeiets 
276636b2cfeSOleksandr Kolomeiets 	union {
277636b2cfeSOleksandr Kolomeiets 		struct hw_mod_cat_v18_s v18;
278636b2cfeSOleksandr Kolomeiets 		struct hw_mod_cat_v21_s v21;
279636b2cfeSOleksandr Kolomeiets 	};
280636b2cfeSOleksandr Kolomeiets };
2816e8b7f11SOleksandr Kolomeiets enum hw_cat_e {
2826e8b7f11SOleksandr Kolomeiets 	/*
2836e8b7f11SOleksandr Kolomeiets 	 * functions initial CAT v18
2846e8b7f11SOleksandr Kolomeiets 	 */
2856e8b7f11SOleksandr Kolomeiets 	/* 00 */ HW_CAT_CFN_SET_ALL_DEFAULTS = 0,
2866e8b7f11SOleksandr Kolomeiets 	/* 01 */ HW_CAT_CFN_PRESET_ALL,
2876e8b7f11SOleksandr Kolomeiets 	/* 02 */ HW_CAT_CFN_COMPARE,
2886e8b7f11SOleksandr Kolomeiets 	/* 03 */ HW_CAT_CFN_FIND,
2896e8b7f11SOleksandr Kolomeiets 	/* 04 */ HW_CAT_CFN_COPY_FROM,
2906e8b7f11SOleksandr Kolomeiets 	/* 05 */ HW_CAT_COT_PRESET_ALL,
2916e8b7f11SOleksandr Kolomeiets 	/* 06 */ HW_CAT_COT_COMPARE,
2926e8b7f11SOleksandr Kolomeiets 	/* 07 */ HW_CAT_COT_FIND,
2936e8b7f11SOleksandr Kolomeiets 	/* 08 */ HW_CAT_COT_COPY_FROM,
2946e8b7f11SOleksandr Kolomeiets 	/* fields */
2956e8b7f11SOleksandr Kolomeiets 	/* 00 */ HW_CAT_CFN_ENABLE = FIELD_START_INDEX,
2966e8b7f11SOleksandr Kolomeiets 	/* 01 */ HW_CAT_CFN_INV,
2976e8b7f11SOleksandr Kolomeiets 	/* 02 */ HW_CAT_CFN_PTC_INV,
2986e8b7f11SOleksandr Kolomeiets 	/* 03 */ HW_CAT_CFN_PTC_ISL,
2996e8b7f11SOleksandr Kolomeiets 	/* 04 */ HW_CAT_CFN_PTC_CFP,
3006e8b7f11SOleksandr Kolomeiets 	/* 05 */ HW_CAT_CFN_PTC_MAC,
3016e8b7f11SOleksandr Kolomeiets 	/* 06 */ HW_CAT_CFN_PTC_L2,
3026e8b7f11SOleksandr Kolomeiets 	/* 07 */ HW_CAT_CFN_PTC_VNTAG,
3036e8b7f11SOleksandr Kolomeiets 	/* 08 */ HW_CAT_CFN_PTC_VLAN,
3046e8b7f11SOleksandr Kolomeiets 	/* 09 */ HW_CAT_CFN_PTC_MPLS,
3056e8b7f11SOleksandr Kolomeiets 	/* 10 */ HW_CAT_CFN_PTC_L3,
3066e8b7f11SOleksandr Kolomeiets 	/* 11 */ HW_CAT_CFN_PTC_FRAG,
3076e8b7f11SOleksandr Kolomeiets 	/* 12 */ HW_CAT_CFN_PTC_IP_PROT,
3086e8b7f11SOleksandr Kolomeiets 	/* 13 */ HW_CAT_CFN_PTC_L4,
3096e8b7f11SOleksandr Kolomeiets 	/* 14 */ HW_CAT_CFN_PTC_TUNNEL,
3106e8b7f11SOleksandr Kolomeiets 	/* 15 */ HW_CAT_CFN_PTC_TNL_L2,
3116e8b7f11SOleksandr Kolomeiets 	/* 16 */ HW_CAT_CFN_PTC_TNL_VLAN,
3126e8b7f11SOleksandr Kolomeiets 	/* 17 */ HW_CAT_CFN_PTC_TNL_MPLS,
3136e8b7f11SOleksandr Kolomeiets 	/* 18 */ HW_CAT_CFN_PTC_TNL_L3,
3146e8b7f11SOleksandr Kolomeiets 	/* 19 */ HW_CAT_CFN_PTC_TNL_FRAG,
3156e8b7f11SOleksandr Kolomeiets 	/* 20 */ HW_CAT_CFN_PTC_TNL_IP_PROT,
3166e8b7f11SOleksandr Kolomeiets 	/* 21 */ HW_CAT_CFN_PTC_TNL_L4,
3176e8b7f11SOleksandr Kolomeiets 	/* 22 */ HW_CAT_CFN_ERR_INV,
3186e8b7f11SOleksandr Kolomeiets 	/* 23 */ HW_CAT_CFN_ERR_CV,
3196e8b7f11SOleksandr Kolomeiets 	/* 24 */ HW_CAT_CFN_ERR_FCS,
3206e8b7f11SOleksandr Kolomeiets 	/* 25 */ HW_CAT_CFN_ERR_TRUNC,
3216e8b7f11SOleksandr Kolomeiets 	/* 26 */ HW_CAT_CFN_ERR_L3_CS,
3226e8b7f11SOleksandr Kolomeiets 	/* 27 */ HW_CAT_CFN_ERR_L4_CS,
3236e8b7f11SOleksandr Kolomeiets 	/* 28 */ HW_CAT_CFN_MAC_PORT,
3246e8b7f11SOleksandr Kolomeiets 	/* 29 */ HW_CAT_CFN_PM_CMP,
3256e8b7f11SOleksandr Kolomeiets 	/* 30 */ HW_CAT_CFN_PM_DCT,
3266e8b7f11SOleksandr Kolomeiets 	/* 31 */ HW_CAT_CFN_PM_EXT_INV,
3276e8b7f11SOleksandr Kolomeiets 	/* 32 */ HW_CAT_CFN_PM_CMB,
3286e8b7f11SOleksandr Kolomeiets 	/* 33 */ HW_CAT_CFN_PM_AND_INV,
3296e8b7f11SOleksandr Kolomeiets 	/* 34 */ HW_CAT_CFN_PM_OR_INV,
3306e8b7f11SOleksandr Kolomeiets 	/* 35 */ HW_CAT_CFN_PM_INV,
3316e8b7f11SOleksandr Kolomeiets 	/* 36 */ HW_CAT_CFN_LC,
3326e8b7f11SOleksandr Kolomeiets 	/* 37 */ HW_CAT_CFN_LC_INV,
3336e8b7f11SOleksandr Kolomeiets 	/* 38 */ HW_CAT_CFN_KM0_OR,
3346e8b7f11SOleksandr Kolomeiets 	/* 39 */ HW_CAT_CFN_KM1_OR,
3356e8b7f11SOleksandr Kolomeiets 	/* 40 */ HW_CAT_KCE_ENABLE_BM,
3366e8b7f11SOleksandr Kolomeiets 	/* 41 */ HW_CAT_KCS_CATEGORY,
3376e8b7f11SOleksandr Kolomeiets 	/* 42 */ HW_CAT_FTE_ENABLE_BM,
3386e8b7f11SOleksandr Kolomeiets 	/* 43 */ HW_CAT_CTE_ENABLE_BM,
3396e8b7f11SOleksandr Kolomeiets 	/* 44 */ HW_CAT_CTS_CAT_A,
3406e8b7f11SOleksandr Kolomeiets 	/* 45 */ HW_CAT_CTS_CAT_B,
3416e8b7f11SOleksandr Kolomeiets 	/* 46 */ HW_CAT_COT_COLOR,
3426e8b7f11SOleksandr Kolomeiets 	/* 47 */ HW_CAT_COT_KM,
3436e8b7f11SOleksandr Kolomeiets 	/* 48 */ HW_CAT_CCT_COLOR,
3446e8b7f11SOleksandr Kolomeiets 	/* 49 */ HW_CAT_CCT_KM,
3456e8b7f11SOleksandr Kolomeiets 	/* 50 */ HW_CAT_KCC_KEY,
3466e8b7f11SOleksandr Kolomeiets 	/* 51 */ HW_CAT_KCC_CATEGORY,
3476e8b7f11SOleksandr Kolomeiets 	/* 52 */ HW_CAT_KCC_ID,
3486e8b7f11SOleksandr Kolomeiets 	/* 53 */ HW_CAT_EXO_DYN,
3496e8b7f11SOleksandr Kolomeiets 	/* 54 */ HW_CAT_EXO_OFS,
3506e8b7f11SOleksandr Kolomeiets 	/* 55 */ HW_CAT_RCK_DATA,
3516e8b7f11SOleksandr Kolomeiets 	/* 56 */ HW_CAT_LEN_LOWER,
3526e8b7f11SOleksandr Kolomeiets 	/* 57 */ HW_CAT_LEN_UPPER,
3536e8b7f11SOleksandr Kolomeiets 	/* 58 */ HW_CAT_LEN_DYN1,
3546e8b7f11SOleksandr Kolomeiets 	/* 59 */ HW_CAT_LEN_DYN2,
3556e8b7f11SOleksandr Kolomeiets 	/* 60 */ HW_CAT_LEN_INV,
3566e8b7f11SOleksandr Kolomeiets 	/* 61 */ HW_CAT_CFN_ERR_TNL_L3_CS,
3576e8b7f11SOleksandr Kolomeiets 	/* 62 */ HW_CAT_CFN_ERR_TNL_L4_CS,
3586e8b7f11SOleksandr Kolomeiets 	/* 63 */ HW_CAT_CFN_ERR_TTL_EXP,
3596e8b7f11SOleksandr Kolomeiets 	/* 64 */ HW_CAT_CFN_ERR_TNL_TTL_EXP,
3606e8b7f11SOleksandr Kolomeiets };
3616e8b7f11SOleksandr Kolomeiets 
3626e8b7f11SOleksandr Kolomeiets bool hw_mod_cat_present(struct flow_api_backend_s *be);
3636e8b7f11SOleksandr Kolomeiets int hw_mod_cat_alloc(struct flow_api_backend_s *be);
3646e8b7f11SOleksandr Kolomeiets void hw_mod_cat_free(struct flow_api_backend_s *be);
3656e8b7f11SOleksandr Kolomeiets int hw_mod_cat_reset(struct flow_api_backend_s *be);
3666e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_flush(struct flow_api_backend_s *be, int start_idx, int count);
3676e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, int word_off,
3686e8b7f11SOleksandr Kolomeiets 	uint32_t value);
369833962ebSDanylo Vodopianov /* KCE/KCS/FTE KM */
370deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_km_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num,
371deda5e0fSDanylo Vodopianov 	int start_idx, int count);
372deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_km_set(struct flow_api_backend_s *be, enum hw_cat_e field,
373deda5e0fSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t value);
374deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_km_get(struct flow_api_backend_s *be, enum hw_cat_e field,
375deda5e0fSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t *value);
376deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_km_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num,
377deda5e0fSDanylo Vodopianov 	int start_idx, int count);
378deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_km_set(struct flow_api_backend_s *be, enum hw_cat_e field,
379deda5e0fSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t value);
380deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_km_get(struct flow_api_backend_s *be, enum hw_cat_e field,
381deda5e0fSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t *value);
382833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num,
383833962ebSDanylo Vodopianov 	int start_idx, int count);
384833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_set(struct flow_api_backend_s *be, enum hw_cat_e field,
385833962ebSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t value);
386833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_get(struct flow_api_backend_s *be, enum hw_cat_e field,
387833962ebSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t *value);
388833962ebSDanylo Vodopianov /* KCE/KCS/FTE FLM */
389deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_flm_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num,
390deda5e0fSDanylo Vodopianov 	int start_idx, int count);
391deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_flm_set(struct flow_api_backend_s *be, enum hw_cat_e field,
392deda5e0fSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t value);
393deda5e0fSDanylo Vodopianov int hw_mod_cat_kce_flm_get(struct flow_api_backend_s *be, enum hw_cat_e field,
394deda5e0fSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t *value);
395deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_flm_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num,
396deda5e0fSDanylo Vodopianov 	int start_idx, int count);
397deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_flm_set(struct flow_api_backend_s *be, enum hw_cat_e field,
398deda5e0fSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t value);
399deda5e0fSDanylo Vodopianov int hw_mod_cat_kcs_flm_get(struct flow_api_backend_s *be, enum hw_cat_e field,
400deda5e0fSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t *value);
401833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num,
402833962ebSDanylo Vodopianov 	int start_idx, int count);
403833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_set(struct flow_api_backend_s *be, enum hw_cat_e field,
404833962ebSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t value);
405833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_get(struct flow_api_backend_s *be, enum hw_cat_e field,
406833962ebSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t *value);
4076e8b7f11SOleksandr Kolomeiets 
4086e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cte_flush(struct flow_api_backend_s *be, int start_idx, int count);
409833962ebSDanylo Vodopianov int hw_mod_cat_cte_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index,
410833962ebSDanylo Vodopianov 	uint32_t value);
411deda5e0fSDanylo Vodopianov int hw_mod_cat_cte_get(struct flow_api_backend_s *be, enum hw_cat_e field, int index,
412deda5e0fSDanylo Vodopianov 	uint32_t *value);
413833962ebSDanylo Vodopianov 
4146e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cts_flush(struct flow_api_backend_s *be, int start_idx, int count);
415833962ebSDanylo Vodopianov int hw_mod_cat_cts_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index,
416833962ebSDanylo Vodopianov 	uint32_t value);
417deda5e0fSDanylo Vodopianov int hw_mod_cat_cts_get(struct flow_api_backend_s *be, enum hw_cat_e field, int index,
418deda5e0fSDanylo Vodopianov 	uint32_t *value);
419833962ebSDanylo Vodopianov 
4206e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cot_flush(struct flow_api_backend_s *be, int start_idx, int count);
421833962ebSDanylo Vodopianov int hw_mod_cat_cot_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index,
422833962ebSDanylo Vodopianov 	uint32_t value);
423833962ebSDanylo Vodopianov 
4246e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cct_flush(struct flow_api_backend_s *be, int start_idx, int count);
425833962ebSDanylo Vodopianov 
4266e8b7f11SOleksandr Kolomeiets int hw_mod_cat_kcc_flush(struct flow_api_backend_s *be, int start_idx, int count);
4276e8b7f11SOleksandr Kolomeiets 
4286e8b7f11SOleksandr Kolomeiets int hw_mod_cat_exo_flush(struct flow_api_backend_s *be, int start_idx, int count);
4296e8b7f11SOleksandr Kolomeiets int hw_mod_cat_rck_flush(struct flow_api_backend_s *be, int start_idx, int count);
4306e8b7f11SOleksandr Kolomeiets int hw_mod_cat_len_flush(struct flow_api_backend_s *be, int start_idx, int count);
431636b2cfeSOleksandr Kolomeiets 
4323005c75dSOleksandr Kolomeiets struct km_func_s {
4333005c75dSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
4343005c75dSOleksandr Kolomeiets 	uint32_t nb_categories;
4353005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_banks;
4363005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_record_words;
4373005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_records;
4383005c75dSOleksandr Kolomeiets 	uint32_t nb_tcam_banks;
4393005c75dSOleksandr Kolomeiets 	uint32_t nb_tcam_bank_width;
4403005c75dSOleksandr Kolomeiets 	/* not read from backend, but rather set using version */
4413005c75dSOleksandr Kolomeiets 	uint32_t nb_km_rcp_mask_a_word_size;
4423005c75dSOleksandr Kolomeiets 	/* --- || --- */
4433005c75dSOleksandr Kolomeiets 	uint32_t nb_km_rcp_mask_b_word_size;
4443005c75dSOleksandr Kolomeiets 	union {
4453005c75dSOleksandr Kolomeiets 		struct hw_mod_km_v7_s v7;
4463005c75dSOleksandr Kolomeiets 	};
4473005c75dSOleksandr Kolomeiets };
448fbe2726fSOleksandr Kolomeiets enum hw_km_e {
449fbe2726fSOleksandr Kolomeiets 	/* functions */
450fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_PRESET_ALL = 0,
451fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_PRESET_ALL,
452fbe2726fSOleksandr Kolomeiets 	/* to sync and reset hw with cache - force write all entries in a bank */
453fbe2726fSOleksandr Kolomeiets 	HW_KM_TCAM_BANK_RESET,
454fbe2726fSOleksandr Kolomeiets 	/* fields */
455fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW0_DYN = FIELD_START_INDEX,
456fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW0_OFS,
457fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW0_SEL_A,
458fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW0_SEL_B,
459fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW4_DYN,
460fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW4_OFS,
461fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW4_SEL_A,
462fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW4_SEL_B,
463fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW8_DYN,
464fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW8_OFS,
465fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW8_SEL_A,
466fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW8_SEL_B,
467fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW10_DYN,
468fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW10_OFS,
469fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW10_SEL_A,
470fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW10_SEL_B,
471fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SWX_CCH,
472fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SWX_SEL_A,
473fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SWX_SEL_B,
474fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_MASK_A,
475fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_MASK_B,
476fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DUAL,
477fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_PAIRED,
478fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_EL_A,
479fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_EL_B,
480fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_INFO_A,
481fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_INFO_B,
482fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_FTM_A,
483fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_FTM_B,
484fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_BANK_A,
485fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_BANK_B,
486fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_KL_A,
487fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_KL_B,
488fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_KEYWAY_A,
489fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_KEYWAY_B,
490fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SYNERGY_MODE,
491fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW0_B_DYN,
492fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW0_B_OFS,
493fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW2_B_DYN,
494fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW2_B_OFS,
495fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SW4_B_DYN,
496fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SW4_B_OFS,
497fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SW5_B_DYN,
498fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SW5_B_OFS,
499fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W0,
500fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W1,
501fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W2,
502fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W3,
503fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W4,
504fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W5,
505fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT0,
506fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT1,
507fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT2,
508fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT3,
509fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT4,
510fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT5,
511fbe2726fSOleksandr Kolomeiets 	HW_KM_TCAM_T,
512fbe2726fSOleksandr Kolomeiets 	HW_KM_TCI_COLOR,
513fbe2726fSOleksandr Kolomeiets 	HW_KM_TCI_FT,
514fbe2726fSOleksandr Kolomeiets 	HW_KM_TCQ_BANK_MASK,
515fbe2726fSOleksandr Kolomeiets 	HW_KM_TCQ_QUAL
516fbe2726fSOleksandr Kolomeiets };
517fbe2726fSOleksandr Kolomeiets bool hw_mod_km_present(struct flow_api_backend_s *be);
518fbe2726fSOleksandr Kolomeiets int hw_mod_km_alloc(struct flow_api_backend_s *be);
519fbe2726fSOleksandr Kolomeiets void hw_mod_km_free(struct flow_api_backend_s *be);
520fbe2726fSOleksandr Kolomeiets int hw_mod_km_reset(struct flow_api_backend_s *be);
521fbe2726fSOleksandr Kolomeiets int hw_mod_km_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
5229bd46cf2SDanylo Vodopianov int hw_mod_km_rcp_set(struct flow_api_backend_s *be, enum hw_km_e field, int index, int word_off,
5239bd46cf2SDanylo Vodopianov 	uint32_t value);
5249bd46cf2SDanylo Vodopianov int hw_mod_km_rcp_get(struct flow_api_backend_s *be, enum hw_km_e field, int index, int word_off,
5259bd46cf2SDanylo Vodopianov 	uint32_t *value);
526fbe2726fSOleksandr Kolomeiets int hw_mod_km_cam_flush(struct flow_api_backend_s *be, int start_bank, int start_record,
527fbe2726fSOleksandr Kolomeiets 	int count);
5289bd46cf2SDanylo Vodopianov int hw_mod_km_cam_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int record,
5299bd46cf2SDanylo Vodopianov 	uint32_t value);
5309bd46cf2SDanylo Vodopianov 
531fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_flush(struct flow_api_backend_s *be, int start_bank, int count);
532fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int byte,
533fbe2726fSOleksandr Kolomeiets 	int byte_val, uint32_t *value_set);
5349bd46cf2SDanylo Vodopianov int hw_mod_km_tcam_get(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int byte,
5359bd46cf2SDanylo Vodopianov 	int byte_val, uint32_t *value_set);
536fbe2726fSOleksandr Kolomeiets int hw_mod_km_tci_flush(struct flow_api_backend_s *be, int start_bank, int start_record,
537fbe2726fSOleksandr Kolomeiets 	int count);
5389bd46cf2SDanylo Vodopianov int hw_mod_km_tci_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int record,
5399bd46cf2SDanylo Vodopianov 	uint32_t value);
540fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcq_flush(struct flow_api_backend_s *be, int start_bank, int start_record,
541fbe2726fSOleksandr Kolomeiets 	int count);
5423005c75dSOleksandr Kolomeiets 
543cec43fabSOleksandr Kolomeiets struct flm_func_s {
544cec43fabSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
545cec43fabSOleksandr Kolomeiets 	uint32_t nb_categories;
546cec43fabSOleksandr Kolomeiets 	uint32_t nb_size_mb;
547cec43fabSOleksandr Kolomeiets 	uint32_t nb_entry_size;
548cec43fabSOleksandr Kolomeiets 	uint32_t nb_variant;
549cec43fabSOleksandr Kolomeiets 	uint32_t nb_prios;
550cec43fabSOleksandr Kolomeiets 	uint32_t nb_pst_profiles;
551cec43fabSOleksandr Kolomeiets 	uint32_t nb_scrub_profiles;
552cec43fabSOleksandr Kolomeiets 	uint32_t nb_rpp_clock_in_ps;
553cec43fabSOleksandr Kolomeiets 	uint32_t nb_load_aps_max;
554cec43fabSOleksandr Kolomeiets 	union {
555cec43fabSOleksandr Kolomeiets 		struct hw_mod_flm_v25_s v25;
556cec43fabSOleksandr Kolomeiets 	};
557cec43fabSOleksandr Kolomeiets };
558059dfc39SOleksandr Kolomeiets enum hw_flm_e {
559059dfc39SOleksandr Kolomeiets 	/* functions */
560059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_PRESET_ALL = 0,
561059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_PRESET_ALL,
562059dfc39SOleksandr Kolomeiets 	HW_FLM_FLOW_LRN_DATA,
563059dfc39SOleksandr Kolomeiets 	HW_FLM_FLOW_INF_STA_DATA,
564059dfc39SOleksandr Kolomeiets 	/* Control fields */
565059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_ENABLE = FIELD_START_INDEX,
566059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_INIT,
567059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_LDS,
568059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_LFS,
569059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_LIS,
570059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_UDS,
571059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_UIS,
572059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_RDS,
573059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_RIS,
574059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_PDS,
575059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_PIS,
576059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_CRCWR,
577059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_CRCRD,
578059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_RBL,
579059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_EAB,
580059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_SPLIT_SDRAM_USAGE,
581059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CALIB_SUCCESS,
582059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CALIB_FAIL,
583059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_INITDONE,
584059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_IDLE,
585059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CRITICAL,
586059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_PANIC,
587059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CRCERR,
588059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_EFT_BP,
589059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CACHE_BUFFER_CRITICAL,
590059dfc39SOleksandr Kolomeiets 	HW_FLM_LOAD_BIN,
591059dfc39SOleksandr Kolomeiets 	HW_FLM_LOAD_LPS,
592059dfc39SOleksandr Kolomeiets 	HW_FLM_LOAD_APS,
593059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_LIMIT0,
594059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_FT0,
595059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_LIMIT1,
596059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_FT1,
597059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_LIMIT2,
598059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_FT2,
599059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_LIMIT3,
600059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_FT3,
601059dfc39SOleksandr Kolomeiets 	HW_FLM_PST_PRESET_ALL,
602059dfc39SOleksandr Kolomeiets 	HW_FLM_PST_BP,
603059dfc39SOleksandr Kolomeiets 	HW_FLM_PST_PP,
604059dfc39SOleksandr Kolomeiets 	HW_FLM_PST_TP,
605059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_LOOKUP,
606059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW0_DYN,
607059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW0_OFS,
608059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW0_SEL,
609059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW4_DYN,
610059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW4_OFS,
611059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW8_DYN,
612059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW8_OFS,
613059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW8_SEL,
614059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW9_DYN,
615059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW9_OFS,
616059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_MASK,
617059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_KID,
618059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_OPN,
619059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_IPN,
620059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_BYT_DYN,
621059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_BYT_OFS,
622059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_TXPLM,
623059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_AUTO_IPV4_MASK,
624059dfc39SOleksandr Kolomeiets 	HW_FLM_BUF_CTRL_LRN_FREE,
625059dfc39SOleksandr Kolomeiets 	HW_FLM_BUF_CTRL_INF_AVAIL,
626059dfc39SOleksandr Kolomeiets 	HW_FLM_BUF_CTRL_STA_AVAIL,
627059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_LRN_DONE,
628059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_LRN_IGNORE,
629059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_LRN_FAIL,
630059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_UNL_DONE,
631059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_UNL_IGNORE,
632059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_REL_DONE,
633059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_REL_IGNORE,
634059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PRB_DONE,
635059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PRB_IGNORE,
636059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_AUL_DONE,
637059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_AUL_IGNORE,
638059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_AUL_FAIL,
639059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_TUL_DONE,
640059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_FLOWS,
641059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_STA_DONE,	/* module ver 0.20 */
642059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_INF_DONE,	/* module ver 0.20 */
643059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_INF_SKIP,	/* module ver 0.20 */
644059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PCK_HIT,	/* module ver 0.20 */
645059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PCK_MISS,	/* module ver 0.20 */
646059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PCK_UNH,	/* module ver 0.20 */
647059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PCK_DIS,	/* module ver 0.20 */
648059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CSH_HIT,	/* module ver 0.20 */
649059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CSH_MISS,	/* module ver 0.20 */
650059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CSH_UNH,	/* module ver 0.20 */
651059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CUC_START,	/* module ver 0.20 */
652059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CUC_MOVE,	/* module ver 0.20 */
653059dfc39SOleksandr Kolomeiets 	HW_FLM_SCAN_I,	/* module ver 0.22 */
654059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_PRESET_ALL,
655059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_T,	/* module ver 0.22 */
656059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_R,	/* module ver 0.24 */
657059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_DEL,	/* module ver 0.24 */
658059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_INF,	/* module ver 0.24 */
659059dfc39SOleksandr Kolomeiets };
660059dfc39SOleksandr Kolomeiets 
661059dfc39SOleksandr Kolomeiets bool hw_mod_flm_present(struct flow_api_backend_s *be);
662059dfc39SOleksandr Kolomeiets int hw_mod_flm_alloc(struct flow_api_backend_s *be);
663059dfc39SOleksandr Kolomeiets void hw_mod_flm_free(struct flow_api_backend_s *be);
664059dfc39SOleksandr Kolomeiets int hw_mod_flm_reset(struct flow_api_backend_s *be);
665059dfc39SOleksandr Kolomeiets 
666059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_flush(struct flow_api_backend_s *be);
667059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value);
668059dfc39SOleksandr Kolomeiets 
669deda5e0fSDanylo Vodopianov int hw_mod_flm_status_update(struct flow_api_backend_s *be);
670deda5e0fSDanylo Vodopianov int hw_mod_flm_status_get(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t *value);
671deda5e0fSDanylo Vodopianov 
672059dfc39SOleksandr Kolomeiets int hw_mod_flm_scan_flush(struct flow_api_backend_s *be);
673deda5e0fSDanylo Vodopianov int hw_mod_flm_scan_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value);
674deda5e0fSDanylo Vodopianov 
675deda5e0fSDanylo Vodopianov int hw_mod_flm_load_bin_flush(struct flow_api_backend_s *be);
676deda5e0fSDanylo Vodopianov int hw_mod_flm_load_bin_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value);
677deda5e0fSDanylo Vodopianov 
678deda5e0fSDanylo Vodopianov int hw_mod_flm_prio_flush(struct flow_api_backend_s *be);
679deda5e0fSDanylo Vodopianov int hw_mod_flm_prio_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value);
680deda5e0fSDanylo Vodopianov 
681deda5e0fSDanylo Vodopianov int hw_mod_flm_pst_flush(struct flow_api_backend_s *be, int start_idx, int count);
682deda5e0fSDanylo Vodopianov int hw_mod_flm_pst_set(struct flow_api_backend_s *be, enum hw_flm_e field, int index,
683deda5e0fSDanylo Vodopianov 	uint32_t value);
684059dfc39SOleksandr Kolomeiets 
685059dfc39SOleksandr Kolomeiets int hw_mod_flm_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
686866d8d06SDanylo Vodopianov int hw_mod_flm_rcp_set_mask(struct flow_api_backend_s *be, enum hw_flm_e field, int index,
687866d8d06SDanylo Vodopianov 	uint32_t *value);
688866d8d06SDanylo Vodopianov int hw_mod_flm_rcp_set(struct flow_api_backend_s *be, enum hw_flm_e field, int index,
689866d8d06SDanylo Vodopianov 	uint32_t value);
690059dfc39SOleksandr Kolomeiets 
691c0d44442SDanylo Vodopianov int hw_mod_flm_buf_ctrl_update(struct flow_api_backend_s *be);
692c0d44442SDanylo Vodopianov int hw_mod_flm_buf_ctrl_get(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t *value);
693c0d44442SDanylo Vodopianov 
694e7e49ce6SDanylo Vodopianov int hw_mod_flm_stat_update(struct flow_api_backend_s *be);
695e7e49ce6SDanylo Vodopianov int hw_mod_flm_stat_get(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t *value);
696e7e49ce6SDanylo Vodopianov 
69796c8249bSDanylo Vodopianov int hw_mod_flm_lrn_data_set_flush(struct flow_api_backend_s *be, enum hw_flm_e field,
69896c8249bSDanylo Vodopianov 	const uint32_t *value, uint32_t records,
69996c8249bSDanylo Vodopianov 	uint32_t *handled_records, uint32_t *inf_word_cnt,
70096c8249bSDanylo Vodopianov 	uint32_t *sta_word_cnt);
701c0d44442SDanylo Vodopianov int hw_mod_flm_inf_sta_data_update_get(struct flow_api_backend_s *be, enum hw_flm_e field,
702c0d44442SDanylo Vodopianov 	uint32_t *inf_value, uint32_t inf_size,
703c0d44442SDanylo Vodopianov 	uint32_t *inf_word_cnt, uint32_t *sta_value,
704c0d44442SDanylo Vodopianov 	uint32_t sta_size, uint32_t *sta_word_cnt);
70596c8249bSDanylo Vodopianov 
706c0d44442SDanylo Vodopianov uint32_t hw_mod_flm_scrub_timeout_decode(uint32_t t_enc);
707c0d44442SDanylo Vodopianov uint32_t hw_mod_flm_scrub_timeout_encode(uint32_t t);
708059dfc39SOleksandr Kolomeiets int hw_mod_flm_scrub_flush(struct flow_api_backend_s *be, int start_idx, int count);
709c0d44442SDanylo Vodopianov int hw_mod_flm_scrub_set(struct flow_api_backend_s *be, enum hw_flm_e field, int index,
710c0d44442SDanylo Vodopianov 	uint32_t value);
711cec43fabSOleksandr Kolomeiets 
712a5a5d5bbSOleksandr Kolomeiets struct hsh_func_s {
713a5a5d5bbSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
714a5a5d5bbSOleksandr Kolomeiets 	uint32_t nb_rcp;/* number of HSH recipes supported by FPGA */
715a5a5d5bbSOleksandr Kolomeiets 	/* indication if Toeplitz is supported by FPGA, i.e. 0 - unsupported, 1 - supported */
716a5a5d5bbSOleksandr Kolomeiets 	uint32_t toeplitz;
717a5a5d5bbSOleksandr Kolomeiets 	union {
718a5a5d5bbSOleksandr Kolomeiets 		struct hw_mod_hsh_v5_s v5;
719a5a5d5bbSOleksandr Kolomeiets 	};
720a5a5d5bbSOleksandr Kolomeiets };
721afad5ac4SOleksandr Kolomeiets enum hw_hsh_e {
722afad5ac4SOleksandr Kolomeiets 	/* functions */
723afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_PRESET_ALL = 0,
724afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_COMPARE,
725afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_FIND,
726afad5ac4SOleksandr Kolomeiets 	/* fields */
727afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_LOAD_DIST_TYPE = FIELD_START_INDEX,
728afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_MAC_PORT_MASK,
729afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_SORT,
730afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_QW0_PE,
731afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_QW0_OFS,
732afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_QW4_PE,
733afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_QW4_OFS,
734afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W8_PE,
735afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W8_OFS,
736afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W8_SORT,
737afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W9_PE,
738afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W9_OFS,
739afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W9_SORT,
740afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W9_P,
741afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_P_MASK,
742afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_WORD_MASK,
743afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_SEED,
744afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_TNL_P,
745afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_HSH_VALID,
746afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_HSH_TYPE,
747afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_TOEPLITZ,
748afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_K,
749afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_AUTO_IPV4_MASK
750afad5ac4SOleksandr Kolomeiets };
751afad5ac4SOleksandr Kolomeiets bool hw_mod_hsh_present(struct flow_api_backend_s *be);
752afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_alloc(struct flow_api_backend_s *be);
753afad5ac4SOleksandr Kolomeiets void hw_mod_hsh_free(struct flow_api_backend_s *be);
754afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_reset(struct flow_api_backend_s *be);
755afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
7567fa0bf29SDanylo Vodopianov int hw_mod_hsh_rcp_set(struct flow_api_backend_s *be, enum hw_hsh_e field, uint32_t index,
7577fa0bf29SDanylo Vodopianov 	uint32_t word_off, uint32_t value);
758a5a5d5bbSOleksandr Kolomeiets 
759b95f1cd0SOleksandr Kolomeiets struct qsl_func_s {
760b95f1cd0SOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
761b95f1cd0SOleksandr Kolomeiets 	uint32_t nb_rcp_categories;
762b95f1cd0SOleksandr Kolomeiets 	uint32_t nb_qst_entries;
763b95f1cd0SOleksandr Kolomeiets 	union {
764b95f1cd0SOleksandr Kolomeiets 		struct hw_mod_qsl_v7_s v7;
765b95f1cd0SOleksandr Kolomeiets 	};
766b95f1cd0SOleksandr Kolomeiets };
7670e474ae5SOleksandr Kolomeiets enum hw_qsl_e {
7680e474ae5SOleksandr Kolomeiets 	/* functions */
7690e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_PRESET_ALL = 0,
7700e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_COMPARE,
7710e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_FIND,
7720e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_PRESET_ALL,
7730e474ae5SOleksandr Kolomeiets 	/* fields */
7740e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_DISCARD = FIELD_START_INDEX,
7750e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_DROP,
7760e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TBL_LO,
7770e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TBL_HI,
7780e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TBL_IDX,
7790e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TBL_MSK,
7800e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_LR,
7810e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TSA,
7820e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_VLI,
7830e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_QUEUE,
7840e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_EN,	/* Alias: HW_QSL_QST_QEN */
7850e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_TX_PORT,
7860e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_LRE,
7870e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_TCI,
7880e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_VEN,
7890e474ae5SOleksandr Kolomeiets 	HW_QSL_QEN_EN,
7900e474ae5SOleksandr Kolomeiets 	HW_QSL_UNMQ_DEST_QUEUE,
7910e474ae5SOleksandr Kolomeiets 	HW_QSL_UNMQ_EN,
7920e474ae5SOleksandr Kolomeiets };
7930e474ae5SOleksandr Kolomeiets bool hw_mod_qsl_present(struct flow_api_backend_s *be);
7940e474ae5SOleksandr Kolomeiets int hw_mod_qsl_alloc(struct flow_api_backend_s *be);
7950e474ae5SOleksandr Kolomeiets void hw_mod_qsl_free(struct flow_api_backend_s *be);
7960e474ae5SOleksandr Kolomeiets int hw_mod_qsl_reset(struct flow_api_backend_s *be);
7970e474ae5SOleksandr Kolomeiets int hw_mod_qsl_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
79898e40f83SDanylo Vodopianov int hw_mod_qsl_rcp_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
79998e40f83SDanylo Vodopianov 	uint32_t value);
8000e474ae5SOleksandr Kolomeiets int hw_mod_qsl_qst_flush(struct flow_api_backend_s *be, int start_idx, int count);
80198e40f83SDanylo Vodopianov int hw_mod_qsl_qst_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
80298e40f83SDanylo Vodopianov 	uint32_t value);
8030e474ae5SOleksandr Kolomeiets int hw_mod_qsl_qen_flush(struct flow_api_backend_s *be, int start_idx, int count);
80498e40f83SDanylo Vodopianov int hw_mod_qsl_qen_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
80598e40f83SDanylo Vodopianov 	uint32_t value);
80698e40f83SDanylo Vodopianov int hw_mod_qsl_qen_get(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
80798e40f83SDanylo Vodopianov 	uint32_t *value);
8080e474ae5SOleksandr Kolomeiets int hw_mod_qsl_unmq_flush(struct flow_api_backend_s *be, int start_idx, int count);
8090e474ae5SOleksandr Kolomeiets int hw_mod_qsl_unmq_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
8100e474ae5SOleksandr Kolomeiets 	uint32_t value);
811b95f1cd0SOleksandr Kolomeiets 
8128c545325SOleksandr Kolomeiets struct slc_lr_func_s {
8138c545325SOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
8148c545325SOleksandr Kolomeiets 	union {
8158c545325SOleksandr Kolomeiets 		struct hw_mod_slc_lr_v2_s v2;
8168c545325SOleksandr Kolomeiets 	};
8178c545325SOleksandr Kolomeiets };
8187fadd2baSOleksandr Kolomeiets enum hw_slc_lr_e {
8197fadd2baSOleksandr Kolomeiets 	/* functions */
8207fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_PRESET_ALL = 0,
8217fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_COMPARE,
8227fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_FIND,
8237fadd2baSOleksandr Kolomeiets 	/* fields */
8247fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_HEAD_SLC_EN = FIELD_START_INDEX,
8257fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_HEAD_DYN,
8267fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_HEAD_OFS,
8277fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_TAIL_SLC_EN,
8287fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_TAIL_DYN,
8297fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_TAIL_OFS,
8307fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_PCAP
8317fadd2baSOleksandr Kolomeiets };
8327fadd2baSOleksandr Kolomeiets bool hw_mod_slc_lr_present(struct flow_api_backend_s *be);
8337fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_alloc(struct flow_api_backend_s *be);
8347fadd2baSOleksandr Kolomeiets void hw_mod_slc_lr_free(struct flow_api_backend_s *be);
8357fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_reset(struct flow_api_backend_s *be);
8367fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
837c4d1272bSDanylo Vodopianov int hw_mod_slc_lr_rcp_set(struct flow_api_backend_s *be, enum hw_slc_lr_e field, uint32_t index,
838c4d1272bSDanylo Vodopianov 	uint32_t value);
8398c545325SOleksandr Kolomeiets 
8407d65ee1aSOleksandr Kolomeiets struct pdb_func_s {
8417d65ee1aSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
8427d65ee1aSOleksandr Kolomeiets 	uint32_t nb_pdb_rcp_categories;
8437d65ee1aSOleksandr Kolomeiets 
8447d65ee1aSOleksandr Kolomeiets 	union {
8457d65ee1aSOleksandr Kolomeiets 		struct hw_mod_pdb_v9_s v9;
8467d65ee1aSOleksandr Kolomeiets 	};
8477d65ee1aSOleksandr Kolomeiets };
84887ad2151SOleksandr Kolomeiets enum hw_pdb_e {
84987ad2151SOleksandr Kolomeiets 	/* functions */
85087ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_PRESET_ALL = 0,
85187ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_COMPARE,
85287ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_FIND,
85387ad2151SOleksandr Kolomeiets 	/* fields */
85487ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_DESCRIPTOR = FIELD_START_INDEX,
85587ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_DESC_LEN,
85687ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_TX_PORT,
85787ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_TX_IGNORE,
85887ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_TX_NOW,
85987ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_CRC_OVERWRITE,
86087ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_ALIGN,
86187ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS0_DYN,
86287ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS0_REL,
86387ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS1_DYN,
86487ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS1_REL,
86587ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS2_DYN,
86687ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS2_REL,
86787ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_IP_PROT_TNL,
86887ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_PPC_HSH,
86987ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_DUPLICATE_EN,
87087ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_DUPLICATE_BIT,
87187ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_PCAP_KEEP_FCS,
87287ad2151SOleksandr Kolomeiets 	HW_PDB_CONFIG_TS_FORMAT,
87387ad2151SOleksandr Kolomeiets 	HW_PDB_CONFIG_PORT_OFS,
87487ad2151SOleksandr Kolomeiets };
87587ad2151SOleksandr Kolomeiets bool hw_mod_pdb_present(struct flow_api_backend_s *be);
87687ad2151SOleksandr Kolomeiets int hw_mod_pdb_alloc(struct flow_api_backend_s *be);
87787ad2151SOleksandr Kolomeiets void hw_mod_pdb_free(struct flow_api_backend_s *be);
87887ad2151SOleksandr Kolomeiets int hw_mod_pdb_reset(struct flow_api_backend_s *be);
87987ad2151SOleksandr Kolomeiets int hw_mod_pdb_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
880ef6e148bSDanylo Vodopianov int hw_mod_pdb_rcp_set(struct flow_api_backend_s *be, enum hw_pdb_e field, uint32_t index,
881ef6e148bSDanylo Vodopianov 	uint32_t value);
882ef6e148bSDanylo Vodopianov 
88387ad2151SOleksandr Kolomeiets int hw_mod_pdb_config_flush(struct flow_api_backend_s *be);
8847d65ee1aSOleksandr Kolomeiets 
8857f058028SSerhii Iliushyk struct tpe_func_s {
8867f058028SSerhii Iliushyk 	COMMON_FUNC_INFO_S;
8877f058028SSerhii Iliushyk 	uint32_t nb_rcp_categories;
8887f058028SSerhii Iliushyk 	uint32_t nb_ifr_categories;
8897f058028SSerhii Iliushyk 	uint32_t nb_cpy_writers;
8907f058028SSerhii Iliushyk 	uint32_t nb_rpl_depth;
8917f058028SSerhii Iliushyk 	uint32_t nb_rpl_ext_categories;
8927f058028SSerhii Iliushyk 	union {
8937f058028SSerhii Iliushyk 		struct hw_mod_tpe_v3_s v3;
8947f058028SSerhii Iliushyk 	};
8957f058028SSerhii Iliushyk };
8964d4e9018SOleksandr Kolomeiets enum hw_tpe_e {
8974d4e9018SOleksandr Kolomeiets 	/* functions */
8984d4e9018SOleksandr Kolomeiets 	HW_TPE_PRESET_ALL = 0,
8994d4e9018SOleksandr Kolomeiets 	HW_TPE_FIND,
9004d4e9018SOleksandr Kolomeiets 	HW_TPE_COMPARE,
9014d4e9018SOleksandr Kolomeiets 	/* Control fields */
9024d4e9018SOleksandr Kolomeiets 	HW_TPE_RPP_RCP_EXP = FIELD_START_INDEX,
9034d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_IPV4_EN,
9044d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_IPV4_DF_DROP,
9054d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_IPV6_EN,
9064d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_IPV6_DROP,
9074d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_MTU,
9084d4e9018SOleksandr Kolomeiets 	HW_TPE_INS_RCP_DYN,
9094d4e9018SOleksandr Kolomeiets 	HW_TPE_INS_RCP_OFS,
9104d4e9018SOleksandr Kolomeiets 	HW_TPE_INS_RCP_LEN,
9114d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_DYN,
9124d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_OFS,
9134d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_LEN,
9144d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_RPL_PTR,
9154d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_EXT_PRIO,
9164d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_ETH_TYPE_WR,
9174d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_EXT_RPL_PTR,
9184d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_EXT_META_RPL_LEN,	/* SW only */
9194d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RPL_VALUE,
9204d4e9018SOleksandr Kolomeiets 	HW_TPE_CPY_RCP_READER_SELECT,
9214d4e9018SOleksandr Kolomeiets 	HW_TPE_CPY_RCP_DYN,
9224d4e9018SOleksandr Kolomeiets 	HW_TPE_CPY_RCP_OFS,
9234d4e9018SOleksandr Kolomeiets 	HW_TPE_CPY_RCP_LEN,
9244d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_WR,
9254d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_OUTER_L4_LEN,
9264d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_POS_DYN,
9274d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_POS_OFS,
9284d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_ADD_DYN,
9294d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_ADD_OFS,
9304d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_SUB_DYN,
9314d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_WR,
9324d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_POS_DYN,
9334d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_POS_OFS,
9344d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_ADD_DYN,
9354d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_ADD_OFS,
9364d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_SUB_DYN,
9374d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_WR,
9384d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_POS_DYN,
9394d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_POS_OFS,
9404d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_ADD_DYN,
9414d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_ADD_OFS,
9424d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_SUB_DYN,
9434d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_TTL_WR,
9444d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_TTL_POS_DYN,
9454d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_TTL_POS_OFS,
9464d4e9018SOleksandr Kolomeiets 	HW_TPE_CSU_RCP_OUTER_L3_CMD,
9474d4e9018SOleksandr Kolomeiets 	HW_TPE_CSU_RCP_OUTER_L4_CMD,
9484d4e9018SOleksandr Kolomeiets 	HW_TPE_CSU_RCP_INNER_L3_CMD,
9494d4e9018SOleksandr Kolomeiets 	HW_TPE_CSU_RCP_INNER_L4_CMD,
9504d4e9018SOleksandr Kolomeiets };
9514d4e9018SOleksandr Kolomeiets bool hw_mod_tpe_present(struct flow_api_backend_s *be);
9524d4e9018SOleksandr Kolomeiets int hw_mod_tpe_alloc(struct flow_api_backend_s *be);
9534d4e9018SOleksandr Kolomeiets void hw_mod_tpe_free(struct flow_api_backend_s *be);
9544d4e9018SOleksandr Kolomeiets int hw_mod_tpe_reset(struct flow_api_backend_s *be);
9554d4e9018SOleksandr Kolomeiets 
9564d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpp_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
9570b98e4c1SDanylo Vodopianov int hw_mod_tpe_rpp_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
9580b98e4c1SDanylo Vodopianov 	uint32_t value);
9594d4e9018SOleksandr Kolomeiets 
9604d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpp_ifr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
961*6019656dSOleksandr Kolomeiets int hw_mod_tpe_rpp_ifr_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
962*6019656dSOleksandr Kolomeiets 	uint32_t value);
9634d4e9018SOleksandr Kolomeiets 
9644d4e9018SOleksandr Kolomeiets int hw_mod_tpe_ifr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
965*6019656dSOleksandr Kolomeiets int hw_mod_tpe_ifr_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
966*6019656dSOleksandr Kolomeiets 	uint32_t value);
9674d4e9018SOleksandr Kolomeiets 
9684d4e9018SOleksandr Kolomeiets int hw_mod_tpe_ins_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
9690b98e4c1SDanylo Vodopianov int hw_mod_tpe_ins_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
9700b98e4c1SDanylo Vodopianov 	uint32_t value);
9714d4e9018SOleksandr Kolomeiets 
9724d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
9730b98e4c1SDanylo Vodopianov int hw_mod_tpe_rpl_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
9740b98e4c1SDanylo Vodopianov 	uint32_t value);
9754d4e9018SOleksandr Kolomeiets 
9764d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_ext_flush(struct flow_api_backend_s *be, int start_idx, int count);
9770b98e4c1SDanylo Vodopianov int hw_mod_tpe_rpl_ext_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
9780b98e4c1SDanylo Vodopianov 	uint32_t value);
9794d4e9018SOleksandr Kolomeiets 
9804d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_rpl_flush(struct flow_api_backend_s *be, int start_idx, int count);
9810b98e4c1SDanylo Vodopianov int hw_mod_tpe_rpl_rpl_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
9820b98e4c1SDanylo Vodopianov 	uint32_t *value);
9834d4e9018SOleksandr Kolomeiets 
9844d4e9018SOleksandr Kolomeiets int hw_mod_tpe_cpy_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
9850b98e4c1SDanylo Vodopianov int hw_mod_tpe_cpy_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
9860b98e4c1SDanylo Vodopianov 	uint32_t value);
9874d4e9018SOleksandr Kolomeiets 
9884d4e9018SOleksandr Kolomeiets int hw_mod_tpe_hfu_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
9890b98e4c1SDanylo Vodopianov int hw_mod_tpe_hfu_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
9900b98e4c1SDanylo Vodopianov 	uint32_t value);
9914d4e9018SOleksandr Kolomeiets 
9924d4e9018SOleksandr Kolomeiets int hw_mod_tpe_csu_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
9930b98e4c1SDanylo Vodopianov int hw_mod_tpe_csu_rcp_set(struct flow_api_backend_s *be, enum hw_tpe_e field, int index,
9940b98e4c1SDanylo Vodopianov 	uint32_t value);
9957f058028SSerhii Iliushyk 
996e3723ca6SOleksandr Kolomeiets enum debug_mode_e {
997e3723ca6SOleksandr Kolomeiets 	FLOW_BACKEND_DEBUG_MODE_NONE = 0x0000,
998e3723ca6SOleksandr Kolomeiets 	FLOW_BACKEND_DEBUG_MODE_WRITE = 0x0001
999e3723ca6SOleksandr Kolomeiets };
1000e3723ca6SOleksandr Kolomeiets 
1001e3723ca6SOleksandr Kolomeiets struct flow_api_backend_ops {
1002e3723ca6SOleksandr Kolomeiets 	int version;
1003e3723ca6SOleksandr Kolomeiets 	int (*set_debug_mode)(void *dev, enum debug_mode_e mode);
1004e3723ca6SOleksandr Kolomeiets 	int (*get_nb_phy_port)(void *dev);
1005e3723ca6SOleksandr Kolomeiets 	int (*get_nb_rx_port)(void *dev);
1006e3723ca6SOleksandr Kolomeiets 	int (*get_ltx_avail)(void *dev);
1007e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_funcs)(void *dev);
1008e3723ca6SOleksandr Kolomeiets 	int (*get_nb_categories)(void *dev);
1009e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_cnt)(void *dev);
1010e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_m0)(void *dev);
1011e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_m1)(void *dev);
1012e3723ca6SOleksandr Kolomeiets 
1013e3723ca6SOleksandr Kolomeiets 	int (*get_nb_queues)(void *dev);
1014e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_flow_types)(void *dev);
1015e3723ca6SOleksandr Kolomeiets 	int (*get_nb_pm_ext)(void *dev);
1016e3723ca6SOleksandr Kolomeiets 	int (*get_nb_len)(void *dev);
1017e3723ca6SOleksandr Kolomeiets 	int (*get_kcc_size)(void *dev);
1018e3723ca6SOleksandr Kolomeiets 	int (*get_kcc_banks)(void *dev);
1019e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_categories)(void *dev);
1020e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_banks)(void *dev);
1021e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_record_words)(void *dev);
1022e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_records)(void *dev);
1023e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_tcam_banks)(void *dev);
1024e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_tcam_bank_width)(void *dev);
1025e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_categories)(void *dev);
1026e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_size_mb)(void *dev);
1027e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_entry_size)(void *dev);
1028e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_variant)(void *dev);
1029e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_prios)(void *dev);
1030e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_pst_profiles)(void *dev);
1031e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_scrub_profiles)(void *dev);
1032e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_load_aps_max)(void *dev);
1033e3723ca6SOleksandr Kolomeiets 	int (*get_nb_qsl_categories)(void *dev);
1034e3723ca6SOleksandr Kolomeiets 	int (*get_nb_qsl_qst_entries)(void *dev);
1035e3723ca6SOleksandr Kolomeiets 	int (*get_nb_pdb_categories)(void *dev);
1036e3723ca6SOleksandr Kolomeiets 	int (*get_nb_roa_categories)(void *dev);
1037e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tpe_categories)(void *dev);
1038e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_cpy_writers)(void *dev);
1039e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_cpy_mask_mem)(void *dev);
1040e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_rpl_depth)(void *dev);
1041e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_rpl_ext_categories)(void *dev);
1042e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tpe_ifr_categories)(void *dev);
1043e3723ca6SOleksandr Kolomeiets 	int (*get_nb_rpp_per_ps)(void *dev);
1044e3723ca6SOleksandr Kolomeiets 	int (*get_nb_hsh_categories)(void *dev);
1045e3723ca6SOleksandr Kolomeiets 	int (*get_nb_hsh_toeplitz)(void *dev);
1046e3723ca6SOleksandr Kolomeiets 
1047e3723ca6SOleksandr Kolomeiets 	int (*alloc_rx_queue)(void *dev, int queue_id);
1048e3723ca6SOleksandr Kolomeiets 	int (*free_rx_queue)(void *dev, int hw_queue);
1049636b2cfeSOleksandr Kolomeiets 
1050636b2cfeSOleksandr Kolomeiets 	/* CAT */
1051636b2cfeSOleksandr Kolomeiets 	bool (*get_cat_present)(void *dev);
1052636b2cfeSOleksandr Kolomeiets 	uint32_t (*get_cat_version)(void *dev);
1053636b2cfeSOleksandr Kolomeiets 	int (*cat_cfn_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
1054636b2cfeSOleksandr Kolomeiets 	int (*cat_kce_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index,
1055636b2cfeSOleksandr Kolomeiets 		int cnt);
1056636b2cfeSOleksandr Kolomeiets 	int (*cat_kcs_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int cat_func,
1057636b2cfeSOleksandr Kolomeiets 		int cnt);
1058636b2cfeSOleksandr Kolomeiets 	int (*cat_fte_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index,
1059636b2cfeSOleksandr Kolomeiets 		int cnt);
1060636b2cfeSOleksandr Kolomeiets 	int (*cat_cte_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
1061636b2cfeSOleksandr Kolomeiets 	int (*cat_cts_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
1062636b2cfeSOleksandr Kolomeiets 	int (*cat_cot_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
1063636b2cfeSOleksandr Kolomeiets 	int (*cat_cct_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
1064636b2cfeSOleksandr Kolomeiets 	int (*cat_exo_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
1065636b2cfeSOleksandr Kolomeiets 	int (*cat_rck_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
1066636b2cfeSOleksandr Kolomeiets 	int (*cat_len_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
1067636b2cfeSOleksandr Kolomeiets 	int (*cat_kcc_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
10683005c75dSOleksandr Kolomeiets 
10693005c75dSOleksandr Kolomeiets 	/* KM */
10703005c75dSOleksandr Kolomeiets 	bool (*get_km_present)(void *dev);
10713005c75dSOleksandr Kolomeiets 	uint32_t (*get_km_version)(void *dev);
10723005c75dSOleksandr Kolomeiets 	int (*km_rcp_flush)(void *dev, const struct km_func_s *km, int category, int cnt);
10733005c75dSOleksandr Kolomeiets 	int (*km_cam_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
10743005c75dSOleksandr Kolomeiets 	int (*km_tcam_flush)(void *dev, const struct km_func_s *km, int bank, int byte, int value,
10753005c75dSOleksandr Kolomeiets 		int cnt);
10763005c75dSOleksandr Kolomeiets 	int (*km_tci_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
10773005c75dSOleksandr Kolomeiets 	int (*km_tcq_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
1078cec43fabSOleksandr Kolomeiets 
1079cec43fabSOleksandr Kolomeiets 	/* FLM */
1080cec43fabSOleksandr Kolomeiets 	bool (*get_flm_present)(void *dev);
1081cec43fabSOleksandr Kolomeiets 	uint32_t (*get_flm_version)(void *dev);
1082cec43fabSOleksandr Kolomeiets 	int (*flm_control_flush)(void *dev, const struct flm_func_s *flm);
1083cec43fabSOleksandr Kolomeiets 	int (*flm_status_flush)(void *dev, const struct flm_func_s *flm);
1084cec43fabSOleksandr Kolomeiets 	int (*flm_status_update)(void *dev, const struct flm_func_s *flm);
1085cec43fabSOleksandr Kolomeiets 	int (*flm_scan_flush)(void *dev, const struct flm_func_s *flm);
1086cec43fabSOleksandr Kolomeiets 	int (*flm_load_bin_flush)(void *dev, const struct flm_func_s *flm);
1087cec43fabSOleksandr Kolomeiets 	int (*flm_prio_flush)(void *dev, const struct flm_func_s *flm);
1088cec43fabSOleksandr Kolomeiets 	int (*flm_pst_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
1089cec43fabSOleksandr Kolomeiets 	int (*flm_rcp_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
1090cec43fabSOleksandr Kolomeiets 	int (*flm_scrub_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
1091cec43fabSOleksandr Kolomeiets 	int (*flm_buf_ctrl_update)(void *dev, const struct flm_func_s *flm);
1092cec43fabSOleksandr Kolomeiets 	int (*flm_stat_update)(void *dev, const struct flm_func_s *flm);
1093cec43fabSOleksandr Kolomeiets 	int (*flm_lrn_data_flush)(void *be_dev, const struct flm_func_s *flm,
1094cec43fabSOleksandr Kolomeiets 		const uint32_t *lrn_data, uint32_t records,
1095cec43fabSOleksandr Kolomeiets 		uint32_t *handled_records, uint32_t words_per_record,
1096cec43fabSOleksandr Kolomeiets 		uint32_t *inf_word_cnt, uint32_t *sta_word_cnt);
1097cec43fabSOleksandr Kolomeiets 	int (*flm_inf_sta_data_update)(void *be_dev, const struct flm_func_s *flm,
1098cec43fabSOleksandr Kolomeiets 		uint32_t *inf_data, uint32_t inf_size,
1099cec43fabSOleksandr Kolomeiets 		uint32_t *inf_word_cnt, uint32_t *sta_data,
1100cec43fabSOleksandr Kolomeiets 		uint32_t sta_size, uint32_t *sta_word_cnt);
1101a5a5d5bbSOleksandr Kolomeiets 
1102a5a5d5bbSOleksandr Kolomeiets 	/* HSH */
1103a5a5d5bbSOleksandr Kolomeiets 	bool (*get_hsh_present)(void *dev);
1104a5a5d5bbSOleksandr Kolomeiets 	uint32_t (*get_hsh_version)(void *dev);
1105a5a5d5bbSOleksandr Kolomeiets 	int (*hsh_rcp_flush)(void *dev, const struct hsh_func_s *hsh, int category, int cnt);
1106b95f1cd0SOleksandr Kolomeiets 
1107b95f1cd0SOleksandr Kolomeiets 	/* QSL */
1108b95f1cd0SOleksandr Kolomeiets 	bool (*get_qsl_present)(void *dev);
1109b95f1cd0SOleksandr Kolomeiets 	uint32_t (*get_qsl_version)(void *dev);
1110b95f1cd0SOleksandr Kolomeiets 	int (*qsl_rcp_flush)(void *dev, const struct qsl_func_s *qsl, int category, int cnt);
1111b95f1cd0SOleksandr Kolomeiets 	int (*qsl_qst_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
1112b95f1cd0SOleksandr Kolomeiets 	int (*qsl_qen_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
1113b95f1cd0SOleksandr Kolomeiets 	int (*qsl_unmq_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
11148c545325SOleksandr Kolomeiets 
11158c545325SOleksandr Kolomeiets 	/* SLC LR */
11168c545325SOleksandr Kolomeiets 	bool (*get_slc_lr_present)(void *dev);
11178c545325SOleksandr Kolomeiets 	uint32_t (*get_slc_lr_version)(void *dev);
11188c545325SOleksandr Kolomeiets 	int (*slc_lr_rcp_flush)(void *dev, const struct slc_lr_func_s *slc_lr, int category,
11198c545325SOleksandr Kolomeiets 		int cnt);
11207d65ee1aSOleksandr Kolomeiets 
11217d65ee1aSOleksandr Kolomeiets 	/* PDB */
11227d65ee1aSOleksandr Kolomeiets 	bool (*get_pdb_present)(void *dev);
11237d65ee1aSOleksandr Kolomeiets 	uint32_t (*get_pdb_version)(void *dev);
11247d65ee1aSOleksandr Kolomeiets 	int (*pdb_rcp_flush)(void *dev, const struct pdb_func_s *pdb, int category, int cnt);
11257d65ee1aSOleksandr Kolomeiets 	int (*pdb_config_flush)(void *dev, const struct pdb_func_s *pdb);
11267f058028SSerhii Iliushyk 
11277f058028SSerhii Iliushyk 	/* TPE */
11287f058028SSerhii Iliushyk 	bool (*get_tpe_present)(void *dev);
11297f058028SSerhii Iliushyk 	uint32_t (*get_tpe_version)(void *dev);
11307f058028SSerhii Iliushyk 	int (*tpe_rpp_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11317f058028SSerhii Iliushyk 	int (*tpe_rpp_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11327f058028SSerhii Iliushyk 	int (*tpe_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11337f058028SSerhii Iliushyk 	int (*tpe_ins_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11347f058028SSerhii Iliushyk 	int (*tpe_rpl_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11357f058028SSerhii Iliushyk 	int (*tpe_rpl_ext_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11367f058028SSerhii Iliushyk 	int (*tpe_rpl_rpl_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11377f058028SSerhii Iliushyk 	int (*tpe_cpy_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11387f058028SSerhii Iliushyk 	int (*tpe_hfu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
11397f058028SSerhii Iliushyk 	int (*tpe_csu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
1140e3723ca6SOleksandr Kolomeiets };
1141e3723ca6SOleksandr Kolomeiets 
11428df4a5f8SOleksandr Kolomeiets struct flow_api_backend_s {
11438df4a5f8SOleksandr Kolomeiets 	void *be_dev;
11441d3f62a0SOleksandr Kolomeiets 	const struct flow_api_backend_ops *iface;
11457917b0d3SOleksandr Kolomeiets 
11466e8b7f11SOleksandr Kolomeiets 	/* flow filter FPGA modules */
11476e8b7f11SOleksandr Kolomeiets 	struct cat_func_s cat;
1148fbe2726fSOleksandr Kolomeiets 	struct km_func_s km;
1149059dfc39SOleksandr Kolomeiets 	struct flm_func_s flm;
1150afad5ac4SOleksandr Kolomeiets 	struct hsh_func_s hsh;
11510e474ae5SOleksandr Kolomeiets 	struct qsl_func_s qsl;
11527fadd2baSOleksandr Kolomeiets 	struct slc_lr_func_s slc_lr;
115387ad2151SOleksandr Kolomeiets 	struct pdb_func_s pdb;
11544d4e9018SOleksandr Kolomeiets 	struct tpe_func_s tpe;
11556e8b7f11SOleksandr Kolomeiets 
11567917b0d3SOleksandr Kolomeiets 	/* NIC attributes */
11577917b0d3SOleksandr Kolomeiets 	unsigned int num_phy_ports;
11587917b0d3SOleksandr Kolomeiets 	unsigned int num_rx_ports;
11597917b0d3SOleksandr Kolomeiets 
11607917b0d3SOleksandr Kolomeiets 	/* flow filter resource capacities */
11617917b0d3SOleksandr Kolomeiets 	unsigned int max_categories;
11627917b0d3SOleksandr Kolomeiets 	unsigned int max_queues;
11638df4a5f8SOleksandr Kolomeiets };
11648df4a5f8SOleksandr Kolomeiets 
11657917b0d3SOleksandr Kolomeiets int flow_api_backend_init(struct flow_api_backend_s *dev, const struct flow_api_backend_ops *iface,
11667917b0d3SOleksandr Kolomeiets 	void *be_dev);
11677917b0d3SOleksandr Kolomeiets int flow_api_backend_done(struct flow_api_backend_s *dev);
11687917b0d3SOleksandr Kolomeiets 
11698df4a5f8SOleksandr Kolomeiets #endif  /* _HW_MOD_BACKEND_H_ */
1170