xref: /dpdk/drivers/net/ntnic/include/hw_mod_backend.h (revision 98e40f83f49d1b37c33d59a196e20bd66c83cd81)
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 enum frame_offs_e {
1366fec9a9aSSerhii Iliushyk 	DYN_L2 = 1,
13756232827SDanylo Vodopianov 	DYN_FIRST_VLAN = 2,
1386fec9a9aSSerhii Iliushyk 	DYN_L3 = 4,
1396fec9a9aSSerhii Iliushyk 	DYN_L4 = 7,
1406fec9a9aSSerhii Iliushyk 	DYN_L4_PAYLOAD = 8,
1416fec9a9aSSerhii Iliushyk 	DYN_TUN_L3 = 13,
1426fec9a9aSSerhii Iliushyk 	DYN_TUN_L4 = 16,
143339ca124SDanylo Vodopianov 	DYN_TUN_L4_PAYLOAD = 17,
1446fec9a9aSSerhii Iliushyk };
1456fec9a9aSSerhii Iliushyk 
1466fec9a9aSSerhii Iliushyk /* Sideband info bit indicator */
1476fec9a9aSSerhii Iliushyk 
1486e8b7f11SOleksandr Kolomeiets enum km_flm_if_select_e {
1496e8b7f11SOleksandr Kolomeiets 	KM_FLM_IF_FIRST = 0,
1506e8b7f11SOleksandr Kolomeiets 	KM_FLM_IF_SECOND = 1
1516e8b7f11SOleksandr Kolomeiets };
1526e8b7f11SOleksandr Kolomeiets 
1536e8b7f11SOleksandr Kolomeiets #define FIELD_START_INDEX 100
1546e8b7f11SOleksandr Kolomeiets 
155636b2cfeSOleksandr Kolomeiets #define COMMON_FUNC_INFO_S                                                                        \
156636b2cfeSOleksandr Kolomeiets 	int ver;                                                                                  \
157636b2cfeSOleksandr Kolomeiets 	void *base;                                                                               \
158636b2cfeSOleksandr Kolomeiets 	unsigned int alloced_size;                                                                \
159636b2cfeSOleksandr Kolomeiets 	int debug
160636b2cfeSOleksandr Kolomeiets 
1616fec9a9aSSerhii Iliushyk enum {
1626fec9a9aSSerhii Iliushyk 	PROT_OTHER = 0,
1636fec9a9aSSerhii Iliushyk 	PROT_L2_ETH2 = 1,
1646fec9a9aSSerhii Iliushyk };
1656fec9a9aSSerhii Iliushyk 
1666fec9a9aSSerhii Iliushyk enum {
1676fec9a9aSSerhii Iliushyk 	PROT_L3_IPV4 = 1,
168b199509aSDanylo Vodopianov 	PROT_L3_IPV6 = 2
1696fec9a9aSSerhii Iliushyk };
1706fec9a9aSSerhii Iliushyk 
1716fec9a9aSSerhii Iliushyk enum {
172a8fbe919SDanylo Vodopianov 	PROT_L4_TCP = 1,
173e872a0c9SDanylo Vodopianov 	PROT_L4_UDP = 2,
174af7ae7aaSDanylo Vodopianov 	PROT_L4_SCTP = 3,
1756fec9a9aSSerhii Iliushyk 	PROT_L4_ICMP = 4
1766fec9a9aSSerhii Iliushyk };
1776fec9a9aSSerhii Iliushyk 
1786fec9a9aSSerhii Iliushyk enum {
179c6821abfSDanylo Vodopianov 	PROT_TUN_GTPV1U = 6,
180c6821abfSDanylo Vodopianov };
181c6821abfSDanylo Vodopianov 
182c6821abfSDanylo Vodopianov enum {
1836fec9a9aSSerhii Iliushyk 	PROT_TUN_L3_OTHER = 0,
1846fec9a9aSSerhii Iliushyk 	PROT_TUN_L3_IPV4 = 1,
185b199509aSDanylo Vodopianov 	PROT_TUN_L3_IPV6 = 2
1866fec9a9aSSerhii Iliushyk };
1876fec9a9aSSerhii Iliushyk 
1886fec9a9aSSerhii Iliushyk enum {
1896fec9a9aSSerhii Iliushyk 	PROT_TUN_L4_OTHER = 0,
190a8fbe919SDanylo Vodopianov 	PROT_TUN_L4_TCP = 1,
191e872a0c9SDanylo Vodopianov 	PROT_TUN_L4_UDP = 2,
192af7ae7aaSDanylo Vodopianov 	PROT_TUN_L4_SCTP = 3,
1936fec9a9aSSerhii Iliushyk 	PROT_TUN_L4_ICMP = 4
1946fec9a9aSSerhii Iliushyk };
1956fec9a9aSSerhii Iliushyk 
1966fec9a9aSSerhii Iliushyk 
1976fec9a9aSSerhii Iliushyk enum {
1986fec9a9aSSerhii Iliushyk 	CPY_SELECT_DSCP_IPV4 = 0,
1996fec9a9aSSerhii Iliushyk 	CPY_SELECT_DSCP_IPV6 = 1,
2006fec9a9aSSerhii Iliushyk 	CPY_SELECT_RQI_QFI = 2,
2016fec9a9aSSerhii Iliushyk 	CPY_SELECT_IPV4 = 3,
2026fec9a9aSSerhii Iliushyk 	CPY_SELECT_PORT = 4,
2036fec9a9aSSerhii Iliushyk 	CPY_SELECT_TEID = 5,
2046fec9a9aSSerhii Iliushyk };
2056fec9a9aSSerhii Iliushyk 
2066e8b7f11SOleksandr Kolomeiets struct common_func_s {
2076e8b7f11SOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
2086e8b7f11SOleksandr Kolomeiets };
2096e8b7f11SOleksandr Kolomeiets 
210636b2cfeSOleksandr Kolomeiets struct cat_func_s {
211636b2cfeSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
212636b2cfeSOleksandr Kolomeiets 	uint32_t nb_cat_funcs;
213636b2cfeSOleksandr Kolomeiets 	uint32_t nb_flow_types;
214636b2cfeSOleksandr Kolomeiets 	uint32_t nb_pm_ext;
215636b2cfeSOleksandr Kolomeiets 	uint32_t nb_len;
216636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_size;
217636b2cfeSOleksandr Kolomeiets 	uint32_t cts_num;
218636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_banks;
219636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_id_bit_size;
220636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_records;
221636b2cfeSOleksandr Kolomeiets 	uint32_t km_if_count;
222636b2cfeSOleksandr Kolomeiets 	int32_t km_if_m0;
223636b2cfeSOleksandr Kolomeiets 	int32_t km_if_m1;
224636b2cfeSOleksandr Kolomeiets 
225636b2cfeSOleksandr Kolomeiets 	union {
226636b2cfeSOleksandr Kolomeiets 		struct hw_mod_cat_v18_s v18;
227636b2cfeSOleksandr Kolomeiets 		struct hw_mod_cat_v21_s v21;
228636b2cfeSOleksandr Kolomeiets 	};
229636b2cfeSOleksandr Kolomeiets };
2306e8b7f11SOleksandr Kolomeiets enum hw_cat_e {
2316e8b7f11SOleksandr Kolomeiets 	/*
2326e8b7f11SOleksandr Kolomeiets 	 * functions initial CAT v18
2336e8b7f11SOleksandr Kolomeiets 	 */
2346e8b7f11SOleksandr Kolomeiets 	/* 00 */ HW_CAT_CFN_SET_ALL_DEFAULTS = 0,
2356e8b7f11SOleksandr Kolomeiets 	/* 01 */ HW_CAT_CFN_PRESET_ALL,
2366e8b7f11SOleksandr Kolomeiets 	/* 02 */ HW_CAT_CFN_COMPARE,
2376e8b7f11SOleksandr Kolomeiets 	/* 03 */ HW_CAT_CFN_FIND,
2386e8b7f11SOleksandr Kolomeiets 	/* 04 */ HW_CAT_CFN_COPY_FROM,
2396e8b7f11SOleksandr Kolomeiets 	/* 05 */ HW_CAT_COT_PRESET_ALL,
2406e8b7f11SOleksandr Kolomeiets 	/* 06 */ HW_CAT_COT_COMPARE,
2416e8b7f11SOleksandr Kolomeiets 	/* 07 */ HW_CAT_COT_FIND,
2426e8b7f11SOleksandr Kolomeiets 	/* 08 */ HW_CAT_COT_COPY_FROM,
2436e8b7f11SOleksandr Kolomeiets 	/* fields */
2446e8b7f11SOleksandr Kolomeiets 	/* 00 */ HW_CAT_CFN_ENABLE = FIELD_START_INDEX,
2456e8b7f11SOleksandr Kolomeiets 	/* 01 */ HW_CAT_CFN_INV,
2466e8b7f11SOleksandr Kolomeiets 	/* 02 */ HW_CAT_CFN_PTC_INV,
2476e8b7f11SOleksandr Kolomeiets 	/* 03 */ HW_CAT_CFN_PTC_ISL,
2486e8b7f11SOleksandr Kolomeiets 	/* 04 */ HW_CAT_CFN_PTC_CFP,
2496e8b7f11SOleksandr Kolomeiets 	/* 05 */ HW_CAT_CFN_PTC_MAC,
2506e8b7f11SOleksandr Kolomeiets 	/* 06 */ HW_CAT_CFN_PTC_L2,
2516e8b7f11SOleksandr Kolomeiets 	/* 07 */ HW_CAT_CFN_PTC_VNTAG,
2526e8b7f11SOleksandr Kolomeiets 	/* 08 */ HW_CAT_CFN_PTC_VLAN,
2536e8b7f11SOleksandr Kolomeiets 	/* 09 */ HW_CAT_CFN_PTC_MPLS,
2546e8b7f11SOleksandr Kolomeiets 	/* 10 */ HW_CAT_CFN_PTC_L3,
2556e8b7f11SOleksandr Kolomeiets 	/* 11 */ HW_CAT_CFN_PTC_FRAG,
2566e8b7f11SOleksandr Kolomeiets 	/* 12 */ HW_CAT_CFN_PTC_IP_PROT,
2576e8b7f11SOleksandr Kolomeiets 	/* 13 */ HW_CAT_CFN_PTC_L4,
2586e8b7f11SOleksandr Kolomeiets 	/* 14 */ HW_CAT_CFN_PTC_TUNNEL,
2596e8b7f11SOleksandr Kolomeiets 	/* 15 */ HW_CAT_CFN_PTC_TNL_L2,
2606e8b7f11SOleksandr Kolomeiets 	/* 16 */ HW_CAT_CFN_PTC_TNL_VLAN,
2616e8b7f11SOleksandr Kolomeiets 	/* 17 */ HW_CAT_CFN_PTC_TNL_MPLS,
2626e8b7f11SOleksandr Kolomeiets 	/* 18 */ HW_CAT_CFN_PTC_TNL_L3,
2636e8b7f11SOleksandr Kolomeiets 	/* 19 */ HW_CAT_CFN_PTC_TNL_FRAG,
2646e8b7f11SOleksandr Kolomeiets 	/* 20 */ HW_CAT_CFN_PTC_TNL_IP_PROT,
2656e8b7f11SOleksandr Kolomeiets 	/* 21 */ HW_CAT_CFN_PTC_TNL_L4,
2666e8b7f11SOleksandr Kolomeiets 	/* 22 */ HW_CAT_CFN_ERR_INV,
2676e8b7f11SOleksandr Kolomeiets 	/* 23 */ HW_CAT_CFN_ERR_CV,
2686e8b7f11SOleksandr Kolomeiets 	/* 24 */ HW_CAT_CFN_ERR_FCS,
2696e8b7f11SOleksandr Kolomeiets 	/* 25 */ HW_CAT_CFN_ERR_TRUNC,
2706e8b7f11SOleksandr Kolomeiets 	/* 26 */ HW_CAT_CFN_ERR_L3_CS,
2716e8b7f11SOleksandr Kolomeiets 	/* 27 */ HW_CAT_CFN_ERR_L4_CS,
2726e8b7f11SOleksandr Kolomeiets 	/* 28 */ HW_CAT_CFN_MAC_PORT,
2736e8b7f11SOleksandr Kolomeiets 	/* 29 */ HW_CAT_CFN_PM_CMP,
2746e8b7f11SOleksandr Kolomeiets 	/* 30 */ HW_CAT_CFN_PM_DCT,
2756e8b7f11SOleksandr Kolomeiets 	/* 31 */ HW_CAT_CFN_PM_EXT_INV,
2766e8b7f11SOleksandr Kolomeiets 	/* 32 */ HW_CAT_CFN_PM_CMB,
2776e8b7f11SOleksandr Kolomeiets 	/* 33 */ HW_CAT_CFN_PM_AND_INV,
2786e8b7f11SOleksandr Kolomeiets 	/* 34 */ HW_CAT_CFN_PM_OR_INV,
2796e8b7f11SOleksandr Kolomeiets 	/* 35 */ HW_CAT_CFN_PM_INV,
2806e8b7f11SOleksandr Kolomeiets 	/* 36 */ HW_CAT_CFN_LC,
2816e8b7f11SOleksandr Kolomeiets 	/* 37 */ HW_CAT_CFN_LC_INV,
2826e8b7f11SOleksandr Kolomeiets 	/* 38 */ HW_CAT_CFN_KM0_OR,
2836e8b7f11SOleksandr Kolomeiets 	/* 39 */ HW_CAT_CFN_KM1_OR,
2846e8b7f11SOleksandr Kolomeiets 	/* 40 */ HW_CAT_KCE_ENABLE_BM,
2856e8b7f11SOleksandr Kolomeiets 	/* 41 */ HW_CAT_KCS_CATEGORY,
2866e8b7f11SOleksandr Kolomeiets 	/* 42 */ HW_CAT_FTE_ENABLE_BM,
2876e8b7f11SOleksandr Kolomeiets 	/* 43 */ HW_CAT_CTE_ENABLE_BM,
2886e8b7f11SOleksandr Kolomeiets 	/* 44 */ HW_CAT_CTS_CAT_A,
2896e8b7f11SOleksandr Kolomeiets 	/* 45 */ HW_CAT_CTS_CAT_B,
2906e8b7f11SOleksandr Kolomeiets 	/* 46 */ HW_CAT_COT_COLOR,
2916e8b7f11SOleksandr Kolomeiets 	/* 47 */ HW_CAT_COT_KM,
2926e8b7f11SOleksandr Kolomeiets 	/* 48 */ HW_CAT_CCT_COLOR,
2936e8b7f11SOleksandr Kolomeiets 	/* 49 */ HW_CAT_CCT_KM,
2946e8b7f11SOleksandr Kolomeiets 	/* 50 */ HW_CAT_KCC_KEY,
2956e8b7f11SOleksandr Kolomeiets 	/* 51 */ HW_CAT_KCC_CATEGORY,
2966e8b7f11SOleksandr Kolomeiets 	/* 52 */ HW_CAT_KCC_ID,
2976e8b7f11SOleksandr Kolomeiets 	/* 53 */ HW_CAT_EXO_DYN,
2986e8b7f11SOleksandr Kolomeiets 	/* 54 */ HW_CAT_EXO_OFS,
2996e8b7f11SOleksandr Kolomeiets 	/* 55 */ HW_CAT_RCK_DATA,
3006e8b7f11SOleksandr Kolomeiets 	/* 56 */ HW_CAT_LEN_LOWER,
3016e8b7f11SOleksandr Kolomeiets 	/* 57 */ HW_CAT_LEN_UPPER,
3026e8b7f11SOleksandr Kolomeiets 	/* 58 */ HW_CAT_LEN_DYN1,
3036e8b7f11SOleksandr Kolomeiets 	/* 59 */ HW_CAT_LEN_DYN2,
3046e8b7f11SOleksandr Kolomeiets 	/* 60 */ HW_CAT_LEN_INV,
3056e8b7f11SOleksandr Kolomeiets 	/* 61 */ HW_CAT_CFN_ERR_TNL_L3_CS,
3066e8b7f11SOleksandr Kolomeiets 	/* 62 */ HW_CAT_CFN_ERR_TNL_L4_CS,
3076e8b7f11SOleksandr Kolomeiets 	/* 63 */ HW_CAT_CFN_ERR_TTL_EXP,
3086e8b7f11SOleksandr Kolomeiets 	/* 64 */ HW_CAT_CFN_ERR_TNL_TTL_EXP,
3096e8b7f11SOleksandr Kolomeiets };
3106e8b7f11SOleksandr Kolomeiets 
3116e8b7f11SOleksandr Kolomeiets bool hw_mod_cat_present(struct flow_api_backend_s *be);
3126e8b7f11SOleksandr Kolomeiets int hw_mod_cat_alloc(struct flow_api_backend_s *be);
3136e8b7f11SOleksandr Kolomeiets void hw_mod_cat_free(struct flow_api_backend_s *be);
3146e8b7f11SOleksandr Kolomeiets int hw_mod_cat_reset(struct flow_api_backend_s *be);
3156e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_flush(struct flow_api_backend_s *be, int start_idx, int count);
3166e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cfn_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index, int word_off,
3176e8b7f11SOleksandr Kolomeiets 	uint32_t value);
318833962ebSDanylo Vodopianov /* KCE/KCS/FTE KM */
319833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num,
320833962ebSDanylo Vodopianov 	int start_idx, int count);
321833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_set(struct flow_api_backend_s *be, enum hw_cat_e field,
322833962ebSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t value);
323833962ebSDanylo Vodopianov int hw_mod_cat_fte_km_get(struct flow_api_backend_s *be, enum hw_cat_e field,
324833962ebSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t *value);
325833962ebSDanylo Vodopianov /* KCE/KCS/FTE FLM */
326833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_flush(struct flow_api_backend_s *be, enum km_flm_if_select_e if_num,
327833962ebSDanylo Vodopianov 	int start_idx, int count);
328833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_set(struct flow_api_backend_s *be, enum hw_cat_e field,
329833962ebSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t value);
330833962ebSDanylo Vodopianov int hw_mod_cat_fte_flm_get(struct flow_api_backend_s *be, enum hw_cat_e field,
331833962ebSDanylo Vodopianov 	enum km_flm_if_select_e if_num, int index, uint32_t *value);
3326e8b7f11SOleksandr Kolomeiets 
3336e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cte_flush(struct flow_api_backend_s *be, int start_idx, int count);
334833962ebSDanylo Vodopianov int hw_mod_cat_cte_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index,
335833962ebSDanylo Vodopianov 	uint32_t value);
336833962ebSDanylo Vodopianov 
3376e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cts_flush(struct flow_api_backend_s *be, int start_idx, int count);
338833962ebSDanylo Vodopianov int hw_mod_cat_cts_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index,
339833962ebSDanylo Vodopianov 	uint32_t value);
340833962ebSDanylo Vodopianov 
3416e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cot_flush(struct flow_api_backend_s *be, int start_idx, int count);
342833962ebSDanylo Vodopianov int hw_mod_cat_cot_set(struct flow_api_backend_s *be, enum hw_cat_e field, int index,
343833962ebSDanylo Vodopianov 	uint32_t value);
344833962ebSDanylo Vodopianov 
3456e8b7f11SOleksandr Kolomeiets int hw_mod_cat_cct_flush(struct flow_api_backend_s *be, int start_idx, int count);
346833962ebSDanylo Vodopianov 
3476e8b7f11SOleksandr Kolomeiets int hw_mod_cat_kcc_flush(struct flow_api_backend_s *be, int start_idx, int count);
3486e8b7f11SOleksandr Kolomeiets 
3496e8b7f11SOleksandr Kolomeiets int hw_mod_cat_exo_flush(struct flow_api_backend_s *be, int start_idx, int count);
3506e8b7f11SOleksandr Kolomeiets int hw_mod_cat_rck_flush(struct flow_api_backend_s *be, int start_idx, int count);
3516e8b7f11SOleksandr Kolomeiets int hw_mod_cat_len_flush(struct flow_api_backend_s *be, int start_idx, int count);
352636b2cfeSOleksandr Kolomeiets 
3533005c75dSOleksandr Kolomeiets struct km_func_s {
3543005c75dSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
3553005c75dSOleksandr Kolomeiets 	uint32_t nb_categories;
3563005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_banks;
3573005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_record_words;
3583005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_records;
3593005c75dSOleksandr Kolomeiets 	uint32_t nb_tcam_banks;
3603005c75dSOleksandr Kolomeiets 	uint32_t nb_tcam_bank_width;
3613005c75dSOleksandr Kolomeiets 	/* not read from backend, but rather set using version */
3623005c75dSOleksandr Kolomeiets 	uint32_t nb_km_rcp_mask_a_word_size;
3633005c75dSOleksandr Kolomeiets 	/* --- || --- */
3643005c75dSOleksandr Kolomeiets 	uint32_t nb_km_rcp_mask_b_word_size;
3653005c75dSOleksandr Kolomeiets 	union {
3663005c75dSOleksandr Kolomeiets 		struct hw_mod_km_v7_s v7;
3673005c75dSOleksandr Kolomeiets 	};
3683005c75dSOleksandr Kolomeiets };
369fbe2726fSOleksandr Kolomeiets enum hw_km_e {
370fbe2726fSOleksandr Kolomeiets 	/* functions */
371fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_PRESET_ALL = 0,
372fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_PRESET_ALL,
373fbe2726fSOleksandr Kolomeiets 	/* to sync and reset hw with cache - force write all entries in a bank */
374fbe2726fSOleksandr Kolomeiets 	HW_KM_TCAM_BANK_RESET,
375fbe2726fSOleksandr Kolomeiets 	/* fields */
376fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW0_DYN = FIELD_START_INDEX,
377fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW0_OFS,
378fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW0_SEL_A,
379fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW0_SEL_B,
380fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW4_DYN,
381fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW4_OFS,
382fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW4_SEL_A,
383fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_QW4_SEL_B,
384fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW8_DYN,
385fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW8_OFS,
386fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW8_SEL_A,
387fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW8_SEL_B,
388fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW10_DYN,
389fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW10_OFS,
390fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW10_SEL_A,
391fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW10_SEL_B,
392fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SWX_CCH,
393fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SWX_SEL_A,
394fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SWX_SEL_B,
395fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_MASK_A,
396fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_MASK_B,
397fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DUAL,
398fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_PAIRED,
399fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_EL_A,
400fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_EL_B,
401fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_INFO_A,
402fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_INFO_B,
403fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_FTM_A,
404fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_FTM_B,
405fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_BANK_A,
406fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_BANK_B,
407fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_KL_A,
408fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_KL_B,
409fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_KEYWAY_A,
410fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_KEYWAY_B,
411fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SYNERGY_MODE,
412fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW0_B_DYN,
413fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW0_B_OFS,
414fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW2_B_DYN,
415fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_DW2_B_OFS,
416fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SW4_B_DYN,
417fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SW4_B_OFS,
418fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SW5_B_DYN,
419fbe2726fSOleksandr Kolomeiets 	HW_KM_RCP_SW5_B_OFS,
420fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W0,
421fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W1,
422fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W2,
423fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W3,
424fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W4,
425fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_W5,
426fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT0,
427fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT1,
428fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT2,
429fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT3,
430fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT4,
431fbe2726fSOleksandr Kolomeiets 	HW_KM_CAM_FT5,
432fbe2726fSOleksandr Kolomeiets 	HW_KM_TCAM_T,
433fbe2726fSOleksandr Kolomeiets 	HW_KM_TCI_COLOR,
434fbe2726fSOleksandr Kolomeiets 	HW_KM_TCI_FT,
435fbe2726fSOleksandr Kolomeiets 	HW_KM_TCQ_BANK_MASK,
436fbe2726fSOleksandr Kolomeiets 	HW_KM_TCQ_QUAL
437fbe2726fSOleksandr Kolomeiets };
438fbe2726fSOleksandr Kolomeiets bool hw_mod_km_present(struct flow_api_backend_s *be);
439fbe2726fSOleksandr Kolomeiets int hw_mod_km_alloc(struct flow_api_backend_s *be);
440fbe2726fSOleksandr Kolomeiets void hw_mod_km_free(struct flow_api_backend_s *be);
441fbe2726fSOleksandr Kolomeiets int hw_mod_km_reset(struct flow_api_backend_s *be);
442fbe2726fSOleksandr Kolomeiets int hw_mod_km_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
443fbe2726fSOleksandr Kolomeiets int hw_mod_km_cam_flush(struct flow_api_backend_s *be, int start_bank, int start_record,
444fbe2726fSOleksandr Kolomeiets 	int count);
445fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_flush(struct flow_api_backend_s *be, int start_bank, int count);
446fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcam_set(struct flow_api_backend_s *be, enum hw_km_e field, int bank, int byte,
447fbe2726fSOleksandr Kolomeiets 	int byte_val, uint32_t *value_set);
448fbe2726fSOleksandr Kolomeiets int hw_mod_km_tci_flush(struct flow_api_backend_s *be, int start_bank, int start_record,
449fbe2726fSOleksandr Kolomeiets 	int count);
450fbe2726fSOleksandr Kolomeiets int hw_mod_km_tcq_flush(struct flow_api_backend_s *be, int start_bank, int start_record,
451fbe2726fSOleksandr Kolomeiets 	int count);
4523005c75dSOleksandr Kolomeiets 
453cec43fabSOleksandr Kolomeiets struct flm_func_s {
454cec43fabSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
455cec43fabSOleksandr Kolomeiets 	uint32_t nb_categories;
456cec43fabSOleksandr Kolomeiets 	uint32_t nb_size_mb;
457cec43fabSOleksandr Kolomeiets 	uint32_t nb_entry_size;
458cec43fabSOleksandr Kolomeiets 	uint32_t nb_variant;
459cec43fabSOleksandr Kolomeiets 	uint32_t nb_prios;
460cec43fabSOleksandr Kolomeiets 	uint32_t nb_pst_profiles;
461cec43fabSOleksandr Kolomeiets 	uint32_t nb_scrub_profiles;
462cec43fabSOleksandr Kolomeiets 	uint32_t nb_rpp_clock_in_ps;
463cec43fabSOleksandr Kolomeiets 	uint32_t nb_load_aps_max;
464cec43fabSOleksandr Kolomeiets 	union {
465cec43fabSOleksandr Kolomeiets 		struct hw_mod_flm_v25_s v25;
466cec43fabSOleksandr Kolomeiets 	};
467cec43fabSOleksandr Kolomeiets };
468059dfc39SOleksandr Kolomeiets enum hw_flm_e {
469059dfc39SOleksandr Kolomeiets 	/* functions */
470059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_PRESET_ALL = 0,
471059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_PRESET_ALL,
472059dfc39SOleksandr Kolomeiets 	HW_FLM_FLOW_LRN_DATA,
473059dfc39SOleksandr Kolomeiets 	HW_FLM_FLOW_INF_STA_DATA,
474059dfc39SOleksandr Kolomeiets 	/* Control fields */
475059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_ENABLE = FIELD_START_INDEX,
476059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_INIT,
477059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_LDS,
478059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_LFS,
479059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_LIS,
480059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_UDS,
481059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_UIS,
482059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_RDS,
483059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_RIS,
484059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_PDS,
485059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_PIS,
486059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_CRCWR,
487059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_CRCRD,
488059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_RBL,
489059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_EAB,
490059dfc39SOleksandr Kolomeiets 	HW_FLM_CONTROL_SPLIT_SDRAM_USAGE,
491059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CALIB_SUCCESS,
492059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CALIB_FAIL,
493059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_INITDONE,
494059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_IDLE,
495059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CRITICAL,
496059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_PANIC,
497059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CRCERR,
498059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_EFT_BP,
499059dfc39SOleksandr Kolomeiets 	HW_FLM_STATUS_CACHE_BUFFER_CRITICAL,
500059dfc39SOleksandr Kolomeiets 	HW_FLM_LOAD_BIN,
501059dfc39SOleksandr Kolomeiets 	HW_FLM_LOAD_LPS,
502059dfc39SOleksandr Kolomeiets 	HW_FLM_LOAD_APS,
503059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_LIMIT0,
504059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_FT0,
505059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_LIMIT1,
506059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_FT1,
507059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_LIMIT2,
508059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_FT2,
509059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_LIMIT3,
510059dfc39SOleksandr Kolomeiets 	HW_FLM_PRIO_FT3,
511059dfc39SOleksandr Kolomeiets 	HW_FLM_PST_PRESET_ALL,
512059dfc39SOleksandr Kolomeiets 	HW_FLM_PST_BP,
513059dfc39SOleksandr Kolomeiets 	HW_FLM_PST_PP,
514059dfc39SOleksandr Kolomeiets 	HW_FLM_PST_TP,
515059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_LOOKUP,
516059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW0_DYN,
517059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW0_OFS,
518059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW0_SEL,
519059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW4_DYN,
520059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_QW4_OFS,
521059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW8_DYN,
522059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW8_OFS,
523059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW8_SEL,
524059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW9_DYN,
525059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_SW9_OFS,
526059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_MASK,
527059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_KID,
528059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_OPN,
529059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_IPN,
530059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_BYT_DYN,
531059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_BYT_OFS,
532059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_TXPLM,
533059dfc39SOleksandr Kolomeiets 	HW_FLM_RCP_AUTO_IPV4_MASK,
534059dfc39SOleksandr Kolomeiets 	HW_FLM_BUF_CTRL_LRN_FREE,
535059dfc39SOleksandr Kolomeiets 	HW_FLM_BUF_CTRL_INF_AVAIL,
536059dfc39SOleksandr Kolomeiets 	HW_FLM_BUF_CTRL_STA_AVAIL,
537059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_LRN_DONE,
538059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_LRN_IGNORE,
539059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_LRN_FAIL,
540059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_UNL_DONE,
541059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_UNL_IGNORE,
542059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_REL_DONE,
543059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_REL_IGNORE,
544059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PRB_DONE,
545059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PRB_IGNORE,
546059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_AUL_DONE,
547059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_AUL_IGNORE,
548059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_AUL_FAIL,
549059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_TUL_DONE,
550059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_FLOWS,
551059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_STA_DONE,	/* module ver 0.20 */
552059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_INF_DONE,	/* module ver 0.20 */
553059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_INF_SKIP,	/* module ver 0.20 */
554059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PCK_HIT,	/* module ver 0.20 */
555059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PCK_MISS,	/* module ver 0.20 */
556059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PCK_UNH,	/* module ver 0.20 */
557059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_PCK_DIS,	/* module ver 0.20 */
558059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CSH_HIT,	/* module ver 0.20 */
559059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CSH_MISS,	/* module ver 0.20 */
560059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CSH_UNH,	/* module ver 0.20 */
561059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CUC_START,	/* module ver 0.20 */
562059dfc39SOleksandr Kolomeiets 	HW_FLM_STAT_CUC_MOVE,	/* module ver 0.20 */
563059dfc39SOleksandr Kolomeiets 	HW_FLM_SCAN_I,	/* module ver 0.22 */
564059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_PRESET_ALL,
565059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_T,	/* module ver 0.22 */
566059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_R,	/* module ver 0.24 */
567059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_DEL,	/* module ver 0.24 */
568059dfc39SOleksandr Kolomeiets 	HW_FLM_SCRUB_INF,	/* module ver 0.24 */
569059dfc39SOleksandr Kolomeiets };
570059dfc39SOleksandr Kolomeiets 
571059dfc39SOleksandr Kolomeiets bool hw_mod_flm_present(struct flow_api_backend_s *be);
572059dfc39SOleksandr Kolomeiets int hw_mod_flm_alloc(struct flow_api_backend_s *be);
573059dfc39SOleksandr Kolomeiets void hw_mod_flm_free(struct flow_api_backend_s *be);
574059dfc39SOleksandr Kolomeiets int hw_mod_flm_reset(struct flow_api_backend_s *be);
575059dfc39SOleksandr Kolomeiets 
576059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_flush(struct flow_api_backend_s *be);
577059dfc39SOleksandr Kolomeiets int hw_mod_flm_control_set(struct flow_api_backend_s *be, enum hw_flm_e field, uint32_t value);
578059dfc39SOleksandr Kolomeiets 
579059dfc39SOleksandr Kolomeiets int hw_mod_flm_scan_flush(struct flow_api_backend_s *be);
580059dfc39SOleksandr Kolomeiets 
581059dfc39SOleksandr Kolomeiets int hw_mod_flm_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
582059dfc39SOleksandr Kolomeiets 
583059dfc39SOleksandr Kolomeiets int hw_mod_flm_scrub_flush(struct flow_api_backend_s *be, int start_idx, int count);
584cec43fabSOleksandr Kolomeiets 
585a5a5d5bbSOleksandr Kolomeiets struct hsh_func_s {
586a5a5d5bbSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
587a5a5d5bbSOleksandr Kolomeiets 	uint32_t nb_rcp;/* number of HSH recipes supported by FPGA */
588a5a5d5bbSOleksandr Kolomeiets 	/* indication if Toeplitz is supported by FPGA, i.e. 0 - unsupported, 1 - supported */
589a5a5d5bbSOleksandr Kolomeiets 	uint32_t toeplitz;
590a5a5d5bbSOleksandr Kolomeiets 	union {
591a5a5d5bbSOleksandr Kolomeiets 		struct hw_mod_hsh_v5_s v5;
592a5a5d5bbSOleksandr Kolomeiets 	};
593a5a5d5bbSOleksandr Kolomeiets };
594afad5ac4SOleksandr Kolomeiets enum hw_hsh_e {
595afad5ac4SOleksandr Kolomeiets 	/* functions */
596afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_PRESET_ALL = 0,
597afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_COMPARE,
598afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_FIND,
599afad5ac4SOleksandr Kolomeiets 	/* fields */
600afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_LOAD_DIST_TYPE = FIELD_START_INDEX,
601afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_MAC_PORT_MASK,
602afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_SORT,
603afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_QW0_PE,
604afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_QW0_OFS,
605afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_QW4_PE,
606afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_QW4_OFS,
607afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W8_PE,
608afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W8_OFS,
609afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W8_SORT,
610afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W9_PE,
611afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W9_OFS,
612afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W9_SORT,
613afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_W9_P,
614afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_P_MASK,
615afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_WORD_MASK,
616afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_SEED,
617afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_TNL_P,
618afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_HSH_VALID,
619afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_HSH_TYPE,
620afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_TOEPLITZ,
621afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_K,
622afad5ac4SOleksandr Kolomeiets 	HW_HSH_RCP_AUTO_IPV4_MASK
623afad5ac4SOleksandr Kolomeiets };
624afad5ac4SOleksandr Kolomeiets bool hw_mod_hsh_present(struct flow_api_backend_s *be);
625afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_alloc(struct flow_api_backend_s *be);
626afad5ac4SOleksandr Kolomeiets void hw_mod_hsh_free(struct flow_api_backend_s *be);
627afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_reset(struct flow_api_backend_s *be);
628afad5ac4SOleksandr Kolomeiets int hw_mod_hsh_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
629a5a5d5bbSOleksandr Kolomeiets 
630b95f1cd0SOleksandr Kolomeiets struct qsl_func_s {
631b95f1cd0SOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
632b95f1cd0SOleksandr Kolomeiets 	uint32_t nb_rcp_categories;
633b95f1cd0SOleksandr Kolomeiets 	uint32_t nb_qst_entries;
634b95f1cd0SOleksandr Kolomeiets 	union {
635b95f1cd0SOleksandr Kolomeiets 		struct hw_mod_qsl_v7_s v7;
636b95f1cd0SOleksandr Kolomeiets 	};
637b95f1cd0SOleksandr Kolomeiets };
6380e474ae5SOleksandr Kolomeiets enum hw_qsl_e {
6390e474ae5SOleksandr Kolomeiets 	/* functions */
6400e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_PRESET_ALL = 0,
6410e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_COMPARE,
6420e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_FIND,
6430e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_PRESET_ALL,
6440e474ae5SOleksandr Kolomeiets 	/* fields */
6450e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_DISCARD = FIELD_START_INDEX,
6460e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_DROP,
6470e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TBL_LO,
6480e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TBL_HI,
6490e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TBL_IDX,
6500e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TBL_MSK,
6510e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_LR,
6520e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_TSA,
6530e474ae5SOleksandr Kolomeiets 	HW_QSL_RCP_VLI,
6540e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_QUEUE,
6550e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_EN,	/* Alias: HW_QSL_QST_QEN */
6560e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_TX_PORT,
6570e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_LRE,
6580e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_TCI,
6590e474ae5SOleksandr Kolomeiets 	HW_QSL_QST_VEN,
6600e474ae5SOleksandr Kolomeiets 	HW_QSL_QEN_EN,
6610e474ae5SOleksandr Kolomeiets 	HW_QSL_UNMQ_DEST_QUEUE,
6620e474ae5SOleksandr Kolomeiets 	HW_QSL_UNMQ_EN,
6630e474ae5SOleksandr Kolomeiets };
6640e474ae5SOleksandr Kolomeiets bool hw_mod_qsl_present(struct flow_api_backend_s *be);
6650e474ae5SOleksandr Kolomeiets int hw_mod_qsl_alloc(struct flow_api_backend_s *be);
6660e474ae5SOleksandr Kolomeiets void hw_mod_qsl_free(struct flow_api_backend_s *be);
6670e474ae5SOleksandr Kolomeiets int hw_mod_qsl_reset(struct flow_api_backend_s *be);
6680e474ae5SOleksandr Kolomeiets int hw_mod_qsl_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
669*98e40f83SDanylo Vodopianov int hw_mod_qsl_rcp_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
670*98e40f83SDanylo Vodopianov 	uint32_t value);
6710e474ae5SOleksandr Kolomeiets int hw_mod_qsl_qst_flush(struct flow_api_backend_s *be, int start_idx, int count);
672*98e40f83SDanylo Vodopianov int hw_mod_qsl_qst_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
673*98e40f83SDanylo Vodopianov 	uint32_t value);
6740e474ae5SOleksandr Kolomeiets int hw_mod_qsl_qen_flush(struct flow_api_backend_s *be, int start_idx, int count);
675*98e40f83SDanylo Vodopianov int hw_mod_qsl_qen_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
676*98e40f83SDanylo Vodopianov 	uint32_t value);
677*98e40f83SDanylo Vodopianov int hw_mod_qsl_qen_get(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
678*98e40f83SDanylo Vodopianov 	uint32_t *value);
6790e474ae5SOleksandr Kolomeiets int hw_mod_qsl_unmq_flush(struct flow_api_backend_s *be, int start_idx, int count);
6800e474ae5SOleksandr Kolomeiets int hw_mod_qsl_unmq_set(struct flow_api_backend_s *be, enum hw_qsl_e field, uint32_t index,
6810e474ae5SOleksandr Kolomeiets 	uint32_t value);
682b95f1cd0SOleksandr Kolomeiets 
6838c545325SOleksandr Kolomeiets struct slc_lr_func_s {
6848c545325SOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
6858c545325SOleksandr Kolomeiets 	union {
6868c545325SOleksandr Kolomeiets 		struct hw_mod_slc_lr_v2_s v2;
6878c545325SOleksandr Kolomeiets 	};
6888c545325SOleksandr Kolomeiets };
6897fadd2baSOleksandr Kolomeiets enum hw_slc_lr_e {
6907fadd2baSOleksandr Kolomeiets 	/* functions */
6917fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_PRESET_ALL = 0,
6927fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_COMPARE,
6937fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_FIND,
6947fadd2baSOleksandr Kolomeiets 	/* fields */
6957fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_HEAD_SLC_EN = FIELD_START_INDEX,
6967fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_HEAD_DYN,
6977fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_HEAD_OFS,
6987fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_TAIL_SLC_EN,
6997fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_TAIL_DYN,
7007fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_TAIL_OFS,
7017fadd2baSOleksandr Kolomeiets 	HW_SLC_LR_RCP_PCAP
7027fadd2baSOleksandr Kolomeiets };
7037fadd2baSOleksandr Kolomeiets bool hw_mod_slc_lr_present(struct flow_api_backend_s *be);
7047fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_alloc(struct flow_api_backend_s *be);
7057fadd2baSOleksandr Kolomeiets void hw_mod_slc_lr_free(struct flow_api_backend_s *be);
7067fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_reset(struct flow_api_backend_s *be);
7077fadd2baSOleksandr Kolomeiets int hw_mod_slc_lr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
708c4d1272bSDanylo Vodopianov int hw_mod_slc_lr_rcp_set(struct flow_api_backend_s *be, enum hw_slc_lr_e field, uint32_t index,
709c4d1272bSDanylo Vodopianov 	uint32_t value);
7108c545325SOleksandr Kolomeiets 
7117d65ee1aSOleksandr Kolomeiets struct pdb_func_s {
7127d65ee1aSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
7137d65ee1aSOleksandr Kolomeiets 	uint32_t nb_pdb_rcp_categories;
7147d65ee1aSOleksandr Kolomeiets 
7157d65ee1aSOleksandr Kolomeiets 	union {
7167d65ee1aSOleksandr Kolomeiets 		struct hw_mod_pdb_v9_s v9;
7177d65ee1aSOleksandr Kolomeiets 	};
7187d65ee1aSOleksandr Kolomeiets };
71987ad2151SOleksandr Kolomeiets enum hw_pdb_e {
72087ad2151SOleksandr Kolomeiets 	/* functions */
72187ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_PRESET_ALL = 0,
72287ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_COMPARE,
72387ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_FIND,
72487ad2151SOleksandr Kolomeiets 	/* fields */
72587ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_DESCRIPTOR = FIELD_START_INDEX,
72687ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_DESC_LEN,
72787ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_TX_PORT,
72887ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_TX_IGNORE,
72987ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_TX_NOW,
73087ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_CRC_OVERWRITE,
73187ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_ALIGN,
73287ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS0_DYN,
73387ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS0_REL,
73487ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS1_DYN,
73587ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS1_REL,
73687ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS2_DYN,
73787ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_OFS2_REL,
73887ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_IP_PROT_TNL,
73987ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_PPC_HSH,
74087ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_DUPLICATE_EN,
74187ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_DUPLICATE_BIT,
74287ad2151SOleksandr Kolomeiets 	HW_PDB_RCP_PCAP_KEEP_FCS,
74387ad2151SOleksandr Kolomeiets 	HW_PDB_CONFIG_TS_FORMAT,
74487ad2151SOleksandr Kolomeiets 	HW_PDB_CONFIG_PORT_OFS,
74587ad2151SOleksandr Kolomeiets };
74687ad2151SOleksandr Kolomeiets bool hw_mod_pdb_present(struct flow_api_backend_s *be);
74787ad2151SOleksandr Kolomeiets int hw_mod_pdb_alloc(struct flow_api_backend_s *be);
74887ad2151SOleksandr Kolomeiets void hw_mod_pdb_free(struct flow_api_backend_s *be);
74987ad2151SOleksandr Kolomeiets int hw_mod_pdb_reset(struct flow_api_backend_s *be);
75087ad2151SOleksandr Kolomeiets int hw_mod_pdb_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
751ef6e148bSDanylo Vodopianov int hw_mod_pdb_rcp_set(struct flow_api_backend_s *be, enum hw_pdb_e field, uint32_t index,
752ef6e148bSDanylo Vodopianov 	uint32_t value);
753ef6e148bSDanylo Vodopianov 
75487ad2151SOleksandr Kolomeiets int hw_mod_pdb_config_flush(struct flow_api_backend_s *be);
7557d65ee1aSOleksandr Kolomeiets 
7567f058028SSerhii Iliushyk struct tpe_func_s {
7577f058028SSerhii Iliushyk 	COMMON_FUNC_INFO_S;
7587f058028SSerhii Iliushyk 	uint32_t nb_rcp_categories;
7597f058028SSerhii Iliushyk 	uint32_t nb_ifr_categories;
7607f058028SSerhii Iliushyk 	uint32_t nb_cpy_writers;
7617f058028SSerhii Iliushyk 	uint32_t nb_rpl_depth;
7627f058028SSerhii Iliushyk 	uint32_t nb_rpl_ext_categories;
7637f058028SSerhii Iliushyk 	union {
7647f058028SSerhii Iliushyk 		struct hw_mod_tpe_v3_s v3;
7657f058028SSerhii Iliushyk 	};
7667f058028SSerhii Iliushyk };
7674d4e9018SOleksandr Kolomeiets enum hw_tpe_e {
7684d4e9018SOleksandr Kolomeiets 	/* functions */
7694d4e9018SOleksandr Kolomeiets 	HW_TPE_PRESET_ALL = 0,
7704d4e9018SOleksandr Kolomeiets 	HW_TPE_FIND,
7714d4e9018SOleksandr Kolomeiets 	HW_TPE_COMPARE,
7724d4e9018SOleksandr Kolomeiets 	/* Control fields */
7734d4e9018SOleksandr Kolomeiets 	HW_TPE_RPP_RCP_EXP = FIELD_START_INDEX,
7744d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_IPV4_EN,
7754d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_IPV4_DF_DROP,
7764d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_IPV6_EN,
7774d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_IPV6_DROP,
7784d4e9018SOleksandr Kolomeiets 	HW_TPE_IFR_RCP_MTU,
7794d4e9018SOleksandr Kolomeiets 	HW_TPE_INS_RCP_DYN,
7804d4e9018SOleksandr Kolomeiets 	HW_TPE_INS_RCP_OFS,
7814d4e9018SOleksandr Kolomeiets 	HW_TPE_INS_RCP_LEN,
7824d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_DYN,
7834d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_OFS,
7844d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_LEN,
7854d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_RPL_PTR,
7864d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_EXT_PRIO,
7874d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RCP_ETH_TYPE_WR,
7884d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_EXT_RPL_PTR,
7894d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_EXT_META_RPL_LEN,	/* SW only */
7904d4e9018SOleksandr Kolomeiets 	HW_TPE_RPL_RPL_VALUE,
7914d4e9018SOleksandr Kolomeiets 	HW_TPE_CPY_RCP_READER_SELECT,
7924d4e9018SOleksandr Kolomeiets 	HW_TPE_CPY_RCP_DYN,
7934d4e9018SOleksandr Kolomeiets 	HW_TPE_CPY_RCP_OFS,
7944d4e9018SOleksandr Kolomeiets 	HW_TPE_CPY_RCP_LEN,
7954d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_WR,
7964d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_OUTER_L4_LEN,
7974d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_POS_DYN,
7984d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_POS_OFS,
7994d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_ADD_DYN,
8004d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_ADD_OFS,
8014d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_A_SUB_DYN,
8024d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_WR,
8034d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_POS_DYN,
8044d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_POS_OFS,
8054d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_ADD_DYN,
8064d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_ADD_OFS,
8074d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_B_SUB_DYN,
8084d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_WR,
8094d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_POS_DYN,
8104d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_POS_OFS,
8114d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_ADD_DYN,
8124d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_ADD_OFS,
8134d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_LEN_C_SUB_DYN,
8144d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_TTL_WR,
8154d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_TTL_POS_DYN,
8164d4e9018SOleksandr Kolomeiets 	HW_TPE_HFU_RCP_TTL_POS_OFS,
8174d4e9018SOleksandr Kolomeiets 	HW_TPE_CSU_RCP_OUTER_L3_CMD,
8184d4e9018SOleksandr Kolomeiets 	HW_TPE_CSU_RCP_OUTER_L4_CMD,
8194d4e9018SOleksandr Kolomeiets 	HW_TPE_CSU_RCP_INNER_L3_CMD,
8204d4e9018SOleksandr Kolomeiets 	HW_TPE_CSU_RCP_INNER_L4_CMD,
8214d4e9018SOleksandr Kolomeiets };
8224d4e9018SOleksandr Kolomeiets bool hw_mod_tpe_present(struct flow_api_backend_s *be);
8234d4e9018SOleksandr Kolomeiets int hw_mod_tpe_alloc(struct flow_api_backend_s *be);
8244d4e9018SOleksandr Kolomeiets void hw_mod_tpe_free(struct flow_api_backend_s *be);
8254d4e9018SOleksandr Kolomeiets int hw_mod_tpe_reset(struct flow_api_backend_s *be);
8264d4e9018SOleksandr Kolomeiets 
8274d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpp_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
8284d4e9018SOleksandr Kolomeiets 
8294d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpp_ifr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
8304d4e9018SOleksandr Kolomeiets 
8314d4e9018SOleksandr Kolomeiets int hw_mod_tpe_ifr_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
8324d4e9018SOleksandr Kolomeiets 
8334d4e9018SOleksandr Kolomeiets int hw_mod_tpe_ins_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
8344d4e9018SOleksandr Kolomeiets 
8354d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
8364d4e9018SOleksandr Kolomeiets 
8374d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_ext_flush(struct flow_api_backend_s *be, int start_idx, int count);
8384d4e9018SOleksandr Kolomeiets 
8394d4e9018SOleksandr Kolomeiets int hw_mod_tpe_rpl_rpl_flush(struct flow_api_backend_s *be, int start_idx, int count);
8404d4e9018SOleksandr Kolomeiets 
8414d4e9018SOleksandr Kolomeiets int hw_mod_tpe_cpy_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
8424d4e9018SOleksandr Kolomeiets 
8434d4e9018SOleksandr Kolomeiets int hw_mod_tpe_hfu_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
8444d4e9018SOleksandr Kolomeiets 
8454d4e9018SOleksandr Kolomeiets int hw_mod_tpe_csu_rcp_flush(struct flow_api_backend_s *be, int start_idx, int count);
8467f058028SSerhii Iliushyk 
847e3723ca6SOleksandr Kolomeiets enum debug_mode_e {
848e3723ca6SOleksandr Kolomeiets 	FLOW_BACKEND_DEBUG_MODE_NONE = 0x0000,
849e3723ca6SOleksandr Kolomeiets 	FLOW_BACKEND_DEBUG_MODE_WRITE = 0x0001
850e3723ca6SOleksandr Kolomeiets };
851e3723ca6SOleksandr Kolomeiets 
852e3723ca6SOleksandr Kolomeiets struct flow_api_backend_ops {
853e3723ca6SOleksandr Kolomeiets 	int version;
854e3723ca6SOleksandr Kolomeiets 	int (*set_debug_mode)(void *dev, enum debug_mode_e mode);
855e3723ca6SOleksandr Kolomeiets 	int (*get_nb_phy_port)(void *dev);
856e3723ca6SOleksandr Kolomeiets 	int (*get_nb_rx_port)(void *dev);
857e3723ca6SOleksandr Kolomeiets 	int (*get_ltx_avail)(void *dev);
858e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_funcs)(void *dev);
859e3723ca6SOleksandr Kolomeiets 	int (*get_nb_categories)(void *dev);
860e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_cnt)(void *dev);
861e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_m0)(void *dev);
862e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_m1)(void *dev);
863e3723ca6SOleksandr Kolomeiets 
864e3723ca6SOleksandr Kolomeiets 	int (*get_nb_queues)(void *dev);
865e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_flow_types)(void *dev);
866e3723ca6SOleksandr Kolomeiets 	int (*get_nb_pm_ext)(void *dev);
867e3723ca6SOleksandr Kolomeiets 	int (*get_nb_len)(void *dev);
868e3723ca6SOleksandr Kolomeiets 	int (*get_kcc_size)(void *dev);
869e3723ca6SOleksandr Kolomeiets 	int (*get_kcc_banks)(void *dev);
870e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_categories)(void *dev);
871e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_banks)(void *dev);
872e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_record_words)(void *dev);
873e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_records)(void *dev);
874e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_tcam_banks)(void *dev);
875e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_tcam_bank_width)(void *dev);
876e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_categories)(void *dev);
877e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_size_mb)(void *dev);
878e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_entry_size)(void *dev);
879e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_variant)(void *dev);
880e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_prios)(void *dev);
881e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_pst_profiles)(void *dev);
882e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_scrub_profiles)(void *dev);
883e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_load_aps_max)(void *dev);
884e3723ca6SOleksandr Kolomeiets 	int (*get_nb_qsl_categories)(void *dev);
885e3723ca6SOleksandr Kolomeiets 	int (*get_nb_qsl_qst_entries)(void *dev);
886e3723ca6SOleksandr Kolomeiets 	int (*get_nb_pdb_categories)(void *dev);
887e3723ca6SOleksandr Kolomeiets 	int (*get_nb_roa_categories)(void *dev);
888e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tpe_categories)(void *dev);
889e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_cpy_writers)(void *dev);
890e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_cpy_mask_mem)(void *dev);
891e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_rpl_depth)(void *dev);
892e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_rpl_ext_categories)(void *dev);
893e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tpe_ifr_categories)(void *dev);
894e3723ca6SOleksandr Kolomeiets 	int (*get_nb_rpp_per_ps)(void *dev);
895e3723ca6SOleksandr Kolomeiets 	int (*get_nb_hsh_categories)(void *dev);
896e3723ca6SOleksandr Kolomeiets 	int (*get_nb_hsh_toeplitz)(void *dev);
897e3723ca6SOleksandr Kolomeiets 
898e3723ca6SOleksandr Kolomeiets 	int (*alloc_rx_queue)(void *dev, int queue_id);
899e3723ca6SOleksandr Kolomeiets 	int (*free_rx_queue)(void *dev, int hw_queue);
900636b2cfeSOleksandr Kolomeiets 
901636b2cfeSOleksandr Kolomeiets 	/* CAT */
902636b2cfeSOleksandr Kolomeiets 	bool (*get_cat_present)(void *dev);
903636b2cfeSOleksandr Kolomeiets 	uint32_t (*get_cat_version)(void *dev);
904636b2cfeSOleksandr Kolomeiets 	int (*cat_cfn_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
905636b2cfeSOleksandr Kolomeiets 	int (*cat_kce_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index,
906636b2cfeSOleksandr Kolomeiets 		int cnt);
907636b2cfeSOleksandr Kolomeiets 	int (*cat_kcs_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int cat_func,
908636b2cfeSOleksandr Kolomeiets 		int cnt);
909636b2cfeSOleksandr Kolomeiets 	int (*cat_fte_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index,
910636b2cfeSOleksandr Kolomeiets 		int cnt);
911636b2cfeSOleksandr Kolomeiets 	int (*cat_cte_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
912636b2cfeSOleksandr Kolomeiets 	int (*cat_cts_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
913636b2cfeSOleksandr Kolomeiets 	int (*cat_cot_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
914636b2cfeSOleksandr Kolomeiets 	int (*cat_cct_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
915636b2cfeSOleksandr Kolomeiets 	int (*cat_exo_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
916636b2cfeSOleksandr Kolomeiets 	int (*cat_rck_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
917636b2cfeSOleksandr Kolomeiets 	int (*cat_len_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
918636b2cfeSOleksandr Kolomeiets 	int (*cat_kcc_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
9193005c75dSOleksandr Kolomeiets 
9203005c75dSOleksandr Kolomeiets 	/* KM */
9213005c75dSOleksandr Kolomeiets 	bool (*get_km_present)(void *dev);
9223005c75dSOleksandr Kolomeiets 	uint32_t (*get_km_version)(void *dev);
9233005c75dSOleksandr Kolomeiets 	int (*km_rcp_flush)(void *dev, const struct km_func_s *km, int category, int cnt);
9243005c75dSOleksandr Kolomeiets 	int (*km_cam_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
9253005c75dSOleksandr Kolomeiets 	int (*km_tcam_flush)(void *dev, const struct km_func_s *km, int bank, int byte, int value,
9263005c75dSOleksandr Kolomeiets 		int cnt);
9273005c75dSOleksandr Kolomeiets 	int (*km_tci_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
9283005c75dSOleksandr Kolomeiets 	int (*km_tcq_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
929cec43fabSOleksandr Kolomeiets 
930cec43fabSOleksandr Kolomeiets 	/* FLM */
931cec43fabSOleksandr Kolomeiets 	bool (*get_flm_present)(void *dev);
932cec43fabSOleksandr Kolomeiets 	uint32_t (*get_flm_version)(void *dev);
933cec43fabSOleksandr Kolomeiets 	int (*flm_control_flush)(void *dev, const struct flm_func_s *flm);
934cec43fabSOleksandr Kolomeiets 	int (*flm_status_flush)(void *dev, const struct flm_func_s *flm);
935cec43fabSOleksandr Kolomeiets 	int (*flm_status_update)(void *dev, const struct flm_func_s *flm);
936cec43fabSOleksandr Kolomeiets 	int (*flm_scan_flush)(void *dev, const struct flm_func_s *flm);
937cec43fabSOleksandr Kolomeiets 	int (*flm_load_bin_flush)(void *dev, const struct flm_func_s *flm);
938cec43fabSOleksandr Kolomeiets 	int (*flm_prio_flush)(void *dev, const struct flm_func_s *flm);
939cec43fabSOleksandr Kolomeiets 	int (*flm_pst_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
940cec43fabSOleksandr Kolomeiets 	int (*flm_rcp_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
941cec43fabSOleksandr Kolomeiets 	int (*flm_scrub_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
942cec43fabSOleksandr Kolomeiets 	int (*flm_buf_ctrl_update)(void *dev, const struct flm_func_s *flm);
943cec43fabSOleksandr Kolomeiets 	int (*flm_stat_update)(void *dev, const struct flm_func_s *flm);
944cec43fabSOleksandr Kolomeiets 	int (*flm_lrn_data_flush)(void *be_dev, const struct flm_func_s *flm,
945cec43fabSOleksandr Kolomeiets 		const uint32_t *lrn_data, uint32_t records,
946cec43fabSOleksandr Kolomeiets 		uint32_t *handled_records, uint32_t words_per_record,
947cec43fabSOleksandr Kolomeiets 		uint32_t *inf_word_cnt, uint32_t *sta_word_cnt);
948cec43fabSOleksandr Kolomeiets 	int (*flm_inf_sta_data_update)(void *be_dev, const struct flm_func_s *flm,
949cec43fabSOleksandr Kolomeiets 		uint32_t *inf_data, uint32_t inf_size,
950cec43fabSOleksandr Kolomeiets 		uint32_t *inf_word_cnt, uint32_t *sta_data,
951cec43fabSOleksandr Kolomeiets 		uint32_t sta_size, uint32_t *sta_word_cnt);
952a5a5d5bbSOleksandr Kolomeiets 
953a5a5d5bbSOleksandr Kolomeiets 	/* HSH */
954a5a5d5bbSOleksandr Kolomeiets 	bool (*get_hsh_present)(void *dev);
955a5a5d5bbSOleksandr Kolomeiets 	uint32_t (*get_hsh_version)(void *dev);
956a5a5d5bbSOleksandr Kolomeiets 	int (*hsh_rcp_flush)(void *dev, const struct hsh_func_s *hsh, int category, int cnt);
957b95f1cd0SOleksandr Kolomeiets 
958b95f1cd0SOleksandr Kolomeiets 	/* QSL */
959b95f1cd0SOleksandr Kolomeiets 	bool (*get_qsl_present)(void *dev);
960b95f1cd0SOleksandr Kolomeiets 	uint32_t (*get_qsl_version)(void *dev);
961b95f1cd0SOleksandr Kolomeiets 	int (*qsl_rcp_flush)(void *dev, const struct qsl_func_s *qsl, int category, int cnt);
962b95f1cd0SOleksandr Kolomeiets 	int (*qsl_qst_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
963b95f1cd0SOleksandr Kolomeiets 	int (*qsl_qen_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
964b95f1cd0SOleksandr Kolomeiets 	int (*qsl_unmq_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
9658c545325SOleksandr Kolomeiets 
9668c545325SOleksandr Kolomeiets 	/* SLC LR */
9678c545325SOleksandr Kolomeiets 	bool (*get_slc_lr_present)(void *dev);
9688c545325SOleksandr Kolomeiets 	uint32_t (*get_slc_lr_version)(void *dev);
9698c545325SOleksandr Kolomeiets 	int (*slc_lr_rcp_flush)(void *dev, const struct slc_lr_func_s *slc_lr, int category,
9708c545325SOleksandr Kolomeiets 		int cnt);
9717d65ee1aSOleksandr Kolomeiets 
9727d65ee1aSOleksandr Kolomeiets 	/* PDB */
9737d65ee1aSOleksandr Kolomeiets 	bool (*get_pdb_present)(void *dev);
9747d65ee1aSOleksandr Kolomeiets 	uint32_t (*get_pdb_version)(void *dev);
9757d65ee1aSOleksandr Kolomeiets 	int (*pdb_rcp_flush)(void *dev, const struct pdb_func_s *pdb, int category, int cnt);
9767d65ee1aSOleksandr Kolomeiets 	int (*pdb_config_flush)(void *dev, const struct pdb_func_s *pdb);
9777f058028SSerhii Iliushyk 
9787f058028SSerhii Iliushyk 	/* TPE */
9797f058028SSerhii Iliushyk 	bool (*get_tpe_present)(void *dev);
9807f058028SSerhii Iliushyk 	uint32_t (*get_tpe_version)(void *dev);
9817f058028SSerhii Iliushyk 	int (*tpe_rpp_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9827f058028SSerhii Iliushyk 	int (*tpe_rpp_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9837f058028SSerhii Iliushyk 	int (*tpe_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9847f058028SSerhii Iliushyk 	int (*tpe_ins_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9857f058028SSerhii Iliushyk 	int (*tpe_rpl_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9867f058028SSerhii Iliushyk 	int (*tpe_rpl_ext_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9877f058028SSerhii Iliushyk 	int (*tpe_rpl_rpl_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9887f058028SSerhii Iliushyk 	int (*tpe_cpy_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9897f058028SSerhii Iliushyk 	int (*tpe_hfu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
9907f058028SSerhii Iliushyk 	int (*tpe_csu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
991e3723ca6SOleksandr Kolomeiets };
992e3723ca6SOleksandr Kolomeiets 
9938df4a5f8SOleksandr Kolomeiets struct flow_api_backend_s {
9948df4a5f8SOleksandr Kolomeiets 	void *be_dev;
9951d3f62a0SOleksandr Kolomeiets 	const struct flow_api_backend_ops *iface;
9967917b0d3SOleksandr Kolomeiets 
9976e8b7f11SOleksandr Kolomeiets 	/* flow filter FPGA modules */
9986e8b7f11SOleksandr Kolomeiets 	struct cat_func_s cat;
999fbe2726fSOleksandr Kolomeiets 	struct km_func_s km;
1000059dfc39SOleksandr Kolomeiets 	struct flm_func_s flm;
1001afad5ac4SOleksandr Kolomeiets 	struct hsh_func_s hsh;
10020e474ae5SOleksandr Kolomeiets 	struct qsl_func_s qsl;
10037fadd2baSOleksandr Kolomeiets 	struct slc_lr_func_s slc_lr;
100487ad2151SOleksandr Kolomeiets 	struct pdb_func_s pdb;
10054d4e9018SOleksandr Kolomeiets 	struct tpe_func_s tpe;
10066e8b7f11SOleksandr Kolomeiets 
10077917b0d3SOleksandr Kolomeiets 	/* NIC attributes */
10087917b0d3SOleksandr Kolomeiets 	unsigned int num_phy_ports;
10097917b0d3SOleksandr Kolomeiets 	unsigned int num_rx_ports;
10107917b0d3SOleksandr Kolomeiets 
10117917b0d3SOleksandr Kolomeiets 	/* flow filter resource capacities */
10127917b0d3SOleksandr Kolomeiets 	unsigned int max_categories;
10137917b0d3SOleksandr Kolomeiets 	unsigned int max_queues;
10148df4a5f8SOleksandr Kolomeiets };
10158df4a5f8SOleksandr Kolomeiets 
10167917b0d3SOleksandr Kolomeiets int flow_api_backend_init(struct flow_api_backend_s *dev, const struct flow_api_backend_ops *iface,
10177917b0d3SOleksandr Kolomeiets 	void *be_dev);
10187917b0d3SOleksandr Kolomeiets int flow_api_backend_done(struct flow_api_backend_s *dev);
10197917b0d3SOleksandr Kolomeiets 
10208df4a5f8SOleksandr Kolomeiets #endif  /* _HW_MOD_BACKEND_H_ */
1021