xref: /dpdk/drivers/net/ntnic/include/hw_mod_backend.h (revision 7917b0d38e92e8b9ec5a870415b791420e10f11a)
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>
10636b2cfeSOleksandr Kolomeiets 
111d3f62a0SOleksandr Kolomeiets #include "ntlog.h"
121d3f62a0SOleksandr Kolomeiets 
13636b2cfeSOleksandr Kolomeiets #include "hw_mod_cat_v18.h"
14636b2cfeSOleksandr Kolomeiets #include "hw_mod_cat_v21.h"
15cec43fabSOleksandr Kolomeiets #include "hw_mod_flm_v25.h"
163005c75dSOleksandr Kolomeiets #include "hw_mod_km_v7.h"
17b95f1cd0SOleksandr Kolomeiets #include "hw_mod_qsl_v7.h"
187d65ee1aSOleksandr Kolomeiets #include "hw_mod_pdb_v9.h"
198c545325SOleksandr Kolomeiets #include "hw_mod_slc_lr_v2.h"
20a5a5d5bbSOleksandr Kolomeiets #include "hw_mod_hsh_v5.h"
217f058028SSerhii Iliushyk #include "hw_mod_tpe_v3.h"
22636b2cfeSOleksandr Kolomeiets 
23e3723ca6SOleksandr Kolomeiets #define MAX_PHYS_ADAPTERS 8
24e3723ca6SOleksandr Kolomeiets 
25636b2cfeSOleksandr Kolomeiets #define COMMON_FUNC_INFO_S                                                                        \
26636b2cfeSOleksandr Kolomeiets 	int ver;                                                                                  \
27636b2cfeSOleksandr Kolomeiets 	void *base;                                                                               \
28636b2cfeSOleksandr Kolomeiets 	unsigned int alloced_size;                                                                \
29636b2cfeSOleksandr Kolomeiets 	int debug
30636b2cfeSOleksandr Kolomeiets 
31636b2cfeSOleksandr Kolomeiets struct cat_func_s {
32636b2cfeSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
33636b2cfeSOleksandr Kolomeiets 	uint32_t nb_cat_funcs;
34636b2cfeSOleksandr Kolomeiets 	uint32_t nb_flow_types;
35636b2cfeSOleksandr Kolomeiets 	uint32_t nb_pm_ext;
36636b2cfeSOleksandr Kolomeiets 	uint32_t nb_len;
37636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_size;
38636b2cfeSOleksandr Kolomeiets 	uint32_t cts_num;
39636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_banks;
40636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_id_bit_size;
41636b2cfeSOleksandr Kolomeiets 	uint32_t kcc_records;
42636b2cfeSOleksandr Kolomeiets 	uint32_t km_if_count;
43636b2cfeSOleksandr Kolomeiets 	int32_t km_if_m0;
44636b2cfeSOleksandr Kolomeiets 	int32_t km_if_m1;
45636b2cfeSOleksandr Kolomeiets 
46636b2cfeSOleksandr Kolomeiets 	union {
47636b2cfeSOleksandr Kolomeiets 		struct hw_mod_cat_v18_s v18;
48636b2cfeSOleksandr Kolomeiets 		struct hw_mod_cat_v21_s v21;
49636b2cfeSOleksandr Kolomeiets 	};
50636b2cfeSOleksandr Kolomeiets };
51636b2cfeSOleksandr Kolomeiets 
523005c75dSOleksandr Kolomeiets struct km_func_s {
533005c75dSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
543005c75dSOleksandr Kolomeiets 	uint32_t nb_categories;
553005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_banks;
563005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_record_words;
573005c75dSOleksandr Kolomeiets 	uint32_t nb_cam_records;
583005c75dSOleksandr Kolomeiets 	uint32_t nb_tcam_banks;
593005c75dSOleksandr Kolomeiets 	uint32_t nb_tcam_bank_width;
603005c75dSOleksandr Kolomeiets 	/* not read from backend, but rather set using version */
613005c75dSOleksandr Kolomeiets 	uint32_t nb_km_rcp_mask_a_word_size;
623005c75dSOleksandr Kolomeiets 	/* --- || --- */
633005c75dSOleksandr Kolomeiets 	uint32_t nb_km_rcp_mask_b_word_size;
643005c75dSOleksandr Kolomeiets 	union {
653005c75dSOleksandr Kolomeiets 		struct hw_mod_km_v7_s v7;
663005c75dSOleksandr Kolomeiets 	};
673005c75dSOleksandr Kolomeiets };
683005c75dSOleksandr Kolomeiets 
69cec43fabSOleksandr Kolomeiets struct flm_func_s {
70cec43fabSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
71cec43fabSOleksandr Kolomeiets 	uint32_t nb_categories;
72cec43fabSOleksandr Kolomeiets 	uint32_t nb_size_mb;
73cec43fabSOleksandr Kolomeiets 	uint32_t nb_entry_size;
74cec43fabSOleksandr Kolomeiets 	uint32_t nb_variant;
75cec43fabSOleksandr Kolomeiets 	uint32_t nb_prios;
76cec43fabSOleksandr Kolomeiets 	uint32_t nb_pst_profiles;
77cec43fabSOleksandr Kolomeiets 	uint32_t nb_scrub_profiles;
78cec43fabSOleksandr Kolomeiets 	uint32_t nb_rpp_clock_in_ps;
79cec43fabSOleksandr Kolomeiets 	uint32_t nb_load_aps_max;
80cec43fabSOleksandr Kolomeiets 	union {
81cec43fabSOleksandr Kolomeiets 		struct hw_mod_flm_v25_s v25;
82cec43fabSOleksandr Kolomeiets 	};
83cec43fabSOleksandr Kolomeiets };
84cec43fabSOleksandr Kolomeiets 
85a5a5d5bbSOleksandr Kolomeiets struct hsh_func_s {
86a5a5d5bbSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
87a5a5d5bbSOleksandr Kolomeiets 	uint32_t nb_rcp;/* number of HSH recipes supported by FPGA */
88a5a5d5bbSOleksandr Kolomeiets 	/* indication if Toeplitz is supported by FPGA, i.e. 0 - unsupported, 1 - supported */
89a5a5d5bbSOleksandr Kolomeiets 	uint32_t toeplitz;
90a5a5d5bbSOleksandr Kolomeiets 	union {
91a5a5d5bbSOleksandr Kolomeiets 		struct hw_mod_hsh_v5_s v5;
92a5a5d5bbSOleksandr Kolomeiets 	};
93a5a5d5bbSOleksandr Kolomeiets };
94a5a5d5bbSOleksandr Kolomeiets 
95b95f1cd0SOleksandr Kolomeiets struct qsl_func_s {
96b95f1cd0SOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
97b95f1cd0SOleksandr Kolomeiets 	uint32_t nb_rcp_categories;
98b95f1cd0SOleksandr Kolomeiets 	uint32_t nb_qst_entries;
99b95f1cd0SOleksandr Kolomeiets 	union {
100b95f1cd0SOleksandr Kolomeiets 		struct hw_mod_qsl_v7_s v7;
101b95f1cd0SOleksandr Kolomeiets 	};
102b95f1cd0SOleksandr Kolomeiets };
103b95f1cd0SOleksandr Kolomeiets 
1048c545325SOleksandr Kolomeiets struct slc_lr_func_s {
1058c545325SOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
1068c545325SOleksandr Kolomeiets 	union {
1078c545325SOleksandr Kolomeiets 		struct hw_mod_slc_lr_v2_s v2;
1088c545325SOleksandr Kolomeiets 	};
1098c545325SOleksandr Kolomeiets };
1108c545325SOleksandr Kolomeiets 
1117d65ee1aSOleksandr Kolomeiets struct pdb_func_s {
1127d65ee1aSOleksandr Kolomeiets 	COMMON_FUNC_INFO_S;
1137d65ee1aSOleksandr Kolomeiets 	uint32_t nb_pdb_rcp_categories;
1147d65ee1aSOleksandr Kolomeiets 
1157d65ee1aSOleksandr Kolomeiets 	union {
1167d65ee1aSOleksandr Kolomeiets 		struct hw_mod_pdb_v9_s v9;
1177d65ee1aSOleksandr Kolomeiets 	};
1187d65ee1aSOleksandr Kolomeiets };
1197d65ee1aSOleksandr Kolomeiets 
1207f058028SSerhii Iliushyk struct tpe_func_s {
1217f058028SSerhii Iliushyk 	COMMON_FUNC_INFO_S;
1227f058028SSerhii Iliushyk 	uint32_t nb_rcp_categories;
1237f058028SSerhii Iliushyk 	uint32_t nb_ifr_categories;
1247f058028SSerhii Iliushyk 	uint32_t nb_cpy_writers;
1257f058028SSerhii Iliushyk 	uint32_t nb_rpl_depth;
1267f058028SSerhii Iliushyk 	uint32_t nb_rpl_ext_categories;
1277f058028SSerhii Iliushyk 	union {
1287f058028SSerhii Iliushyk 		struct hw_mod_tpe_v3_s v3;
1297f058028SSerhii Iliushyk 	};
1307f058028SSerhii Iliushyk };
1317f058028SSerhii Iliushyk 
132e3723ca6SOleksandr Kolomeiets enum debug_mode_e {
133e3723ca6SOleksandr Kolomeiets 	FLOW_BACKEND_DEBUG_MODE_NONE = 0x0000,
134e3723ca6SOleksandr Kolomeiets 	FLOW_BACKEND_DEBUG_MODE_WRITE = 0x0001
135e3723ca6SOleksandr Kolomeiets };
136e3723ca6SOleksandr Kolomeiets 
137e3723ca6SOleksandr Kolomeiets struct flow_api_backend_ops {
138e3723ca6SOleksandr Kolomeiets 	int version;
139e3723ca6SOleksandr Kolomeiets 	int (*set_debug_mode)(void *dev, enum debug_mode_e mode);
140e3723ca6SOleksandr Kolomeiets 	int (*get_nb_phy_port)(void *dev);
141e3723ca6SOleksandr Kolomeiets 	int (*get_nb_rx_port)(void *dev);
142e3723ca6SOleksandr Kolomeiets 	int (*get_ltx_avail)(void *dev);
143e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_funcs)(void *dev);
144e3723ca6SOleksandr Kolomeiets 	int (*get_nb_categories)(void *dev);
145e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_cnt)(void *dev);
146e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_m0)(void *dev);
147e3723ca6SOleksandr Kolomeiets 	int (*get_nb_cat_km_if_m1)(void *dev);
148e3723ca6SOleksandr Kolomeiets 
149e3723ca6SOleksandr Kolomeiets 	int (*get_nb_queues)(void *dev);
150e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_flow_types)(void *dev);
151e3723ca6SOleksandr Kolomeiets 	int (*get_nb_pm_ext)(void *dev);
152e3723ca6SOleksandr Kolomeiets 	int (*get_nb_len)(void *dev);
153e3723ca6SOleksandr Kolomeiets 	int (*get_kcc_size)(void *dev);
154e3723ca6SOleksandr Kolomeiets 	int (*get_kcc_banks)(void *dev);
155e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_categories)(void *dev);
156e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_banks)(void *dev);
157e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_record_words)(void *dev);
158e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_cam_records)(void *dev);
159e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_tcam_banks)(void *dev);
160e3723ca6SOleksandr Kolomeiets 	int (*get_nb_km_tcam_bank_width)(void *dev);
161e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_categories)(void *dev);
162e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_size_mb)(void *dev);
163e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_entry_size)(void *dev);
164e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_variant)(void *dev);
165e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_prios)(void *dev);
166e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_pst_profiles)(void *dev);
167e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_scrub_profiles)(void *dev);
168e3723ca6SOleksandr Kolomeiets 	int (*get_nb_flm_load_aps_max)(void *dev);
169e3723ca6SOleksandr Kolomeiets 	int (*get_nb_qsl_categories)(void *dev);
170e3723ca6SOleksandr Kolomeiets 	int (*get_nb_qsl_qst_entries)(void *dev);
171e3723ca6SOleksandr Kolomeiets 	int (*get_nb_pdb_categories)(void *dev);
172e3723ca6SOleksandr Kolomeiets 	int (*get_nb_roa_categories)(void *dev);
173e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tpe_categories)(void *dev);
174e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_cpy_writers)(void *dev);
175e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_cpy_mask_mem)(void *dev);
176e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_rpl_depth)(void *dev);
177e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tx_rpl_ext_categories)(void *dev);
178e3723ca6SOleksandr Kolomeiets 	int (*get_nb_tpe_ifr_categories)(void *dev);
179e3723ca6SOleksandr Kolomeiets 	int (*get_nb_rpp_per_ps)(void *dev);
180e3723ca6SOleksandr Kolomeiets 	int (*get_nb_hsh_categories)(void *dev);
181e3723ca6SOleksandr Kolomeiets 	int (*get_nb_hsh_toeplitz)(void *dev);
182e3723ca6SOleksandr Kolomeiets 
183e3723ca6SOleksandr Kolomeiets 	int (*alloc_rx_queue)(void *dev, int queue_id);
184e3723ca6SOleksandr Kolomeiets 	int (*free_rx_queue)(void *dev, int hw_queue);
185636b2cfeSOleksandr Kolomeiets 
186636b2cfeSOleksandr Kolomeiets 	/* CAT */
187636b2cfeSOleksandr Kolomeiets 	bool (*get_cat_present)(void *dev);
188636b2cfeSOleksandr Kolomeiets 	uint32_t (*get_cat_version)(void *dev);
189636b2cfeSOleksandr Kolomeiets 	int (*cat_cfn_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
190636b2cfeSOleksandr Kolomeiets 	int (*cat_kce_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index,
191636b2cfeSOleksandr Kolomeiets 		int cnt);
192636b2cfeSOleksandr Kolomeiets 	int (*cat_kcs_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int cat_func,
193636b2cfeSOleksandr Kolomeiets 		int cnt);
194636b2cfeSOleksandr Kolomeiets 	int (*cat_fte_flush)(void *dev, const struct cat_func_s *cat, int km_if_idx, int index,
195636b2cfeSOleksandr Kolomeiets 		int cnt);
196636b2cfeSOleksandr Kolomeiets 	int (*cat_cte_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
197636b2cfeSOleksandr Kolomeiets 	int (*cat_cts_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
198636b2cfeSOleksandr Kolomeiets 	int (*cat_cot_flush)(void *dev, const struct cat_func_s *cat, int cat_func, int cnt);
199636b2cfeSOleksandr Kolomeiets 	int (*cat_cct_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
200636b2cfeSOleksandr Kolomeiets 	int (*cat_exo_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
201636b2cfeSOleksandr Kolomeiets 	int (*cat_rck_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
202636b2cfeSOleksandr Kolomeiets 	int (*cat_len_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
203636b2cfeSOleksandr Kolomeiets 	int (*cat_kcc_flush)(void *dev, const struct cat_func_s *cat, int index, int cnt);
2043005c75dSOleksandr Kolomeiets 
2053005c75dSOleksandr Kolomeiets 	/* KM */
2063005c75dSOleksandr Kolomeiets 	bool (*get_km_present)(void *dev);
2073005c75dSOleksandr Kolomeiets 	uint32_t (*get_km_version)(void *dev);
2083005c75dSOleksandr Kolomeiets 	int (*km_rcp_flush)(void *dev, const struct km_func_s *km, int category, int cnt);
2093005c75dSOleksandr Kolomeiets 	int (*km_cam_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
2103005c75dSOleksandr Kolomeiets 	int (*km_tcam_flush)(void *dev, const struct km_func_s *km, int bank, int byte, int value,
2113005c75dSOleksandr Kolomeiets 		int cnt);
2123005c75dSOleksandr Kolomeiets 	int (*km_tci_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
2133005c75dSOleksandr Kolomeiets 	int (*km_tcq_flush)(void *dev, const struct km_func_s *km, int bank, int record, int cnt);
214cec43fabSOleksandr Kolomeiets 
215cec43fabSOleksandr Kolomeiets 	/* FLM */
216cec43fabSOleksandr Kolomeiets 	bool (*get_flm_present)(void *dev);
217cec43fabSOleksandr Kolomeiets 	uint32_t (*get_flm_version)(void *dev);
218cec43fabSOleksandr Kolomeiets 	int (*flm_control_flush)(void *dev, const struct flm_func_s *flm);
219cec43fabSOleksandr Kolomeiets 	int (*flm_status_flush)(void *dev, const struct flm_func_s *flm);
220cec43fabSOleksandr Kolomeiets 	int (*flm_status_update)(void *dev, const struct flm_func_s *flm);
221cec43fabSOleksandr Kolomeiets 	int (*flm_scan_flush)(void *dev, const struct flm_func_s *flm);
222cec43fabSOleksandr Kolomeiets 	int (*flm_load_bin_flush)(void *dev, const struct flm_func_s *flm);
223cec43fabSOleksandr Kolomeiets 	int (*flm_prio_flush)(void *dev, const struct flm_func_s *flm);
224cec43fabSOleksandr Kolomeiets 	int (*flm_pst_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
225cec43fabSOleksandr Kolomeiets 	int (*flm_rcp_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
226cec43fabSOleksandr Kolomeiets 	int (*flm_scrub_flush)(void *dev, const struct flm_func_s *flm, int index, int cnt);
227cec43fabSOleksandr Kolomeiets 	int (*flm_buf_ctrl_update)(void *dev, const struct flm_func_s *flm);
228cec43fabSOleksandr Kolomeiets 	int (*flm_stat_update)(void *dev, const struct flm_func_s *flm);
229cec43fabSOleksandr Kolomeiets 	int (*flm_lrn_data_flush)(void *be_dev, const struct flm_func_s *flm,
230cec43fabSOleksandr Kolomeiets 		const uint32_t *lrn_data, uint32_t records,
231cec43fabSOleksandr Kolomeiets 		uint32_t *handled_records, uint32_t words_per_record,
232cec43fabSOleksandr Kolomeiets 		uint32_t *inf_word_cnt, uint32_t *sta_word_cnt);
233cec43fabSOleksandr Kolomeiets 	int (*flm_inf_sta_data_update)(void *be_dev, const struct flm_func_s *flm,
234cec43fabSOleksandr Kolomeiets 		uint32_t *inf_data, uint32_t inf_size,
235cec43fabSOleksandr Kolomeiets 		uint32_t *inf_word_cnt, uint32_t *sta_data,
236cec43fabSOleksandr Kolomeiets 		uint32_t sta_size, uint32_t *sta_word_cnt);
237a5a5d5bbSOleksandr Kolomeiets 
238a5a5d5bbSOleksandr Kolomeiets 	/* HSH */
239a5a5d5bbSOleksandr Kolomeiets 	bool (*get_hsh_present)(void *dev);
240a5a5d5bbSOleksandr Kolomeiets 	uint32_t (*get_hsh_version)(void *dev);
241a5a5d5bbSOleksandr Kolomeiets 	int (*hsh_rcp_flush)(void *dev, const struct hsh_func_s *hsh, int category, int cnt);
242b95f1cd0SOleksandr Kolomeiets 
243b95f1cd0SOleksandr Kolomeiets 	/* QSL */
244b95f1cd0SOleksandr Kolomeiets 	bool (*get_qsl_present)(void *dev);
245b95f1cd0SOleksandr Kolomeiets 	uint32_t (*get_qsl_version)(void *dev);
246b95f1cd0SOleksandr Kolomeiets 	int (*qsl_rcp_flush)(void *dev, const struct qsl_func_s *qsl, int category, int cnt);
247b95f1cd0SOleksandr Kolomeiets 	int (*qsl_qst_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
248b95f1cd0SOleksandr Kolomeiets 	int (*qsl_qen_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
249b95f1cd0SOleksandr Kolomeiets 	int (*qsl_unmq_flush)(void *dev, const struct qsl_func_s *qsl, int entry, int cnt);
2508c545325SOleksandr Kolomeiets 
2518c545325SOleksandr Kolomeiets 	/* SLC LR */
2528c545325SOleksandr Kolomeiets 	bool (*get_slc_lr_present)(void *dev);
2538c545325SOleksandr Kolomeiets 	uint32_t (*get_slc_lr_version)(void *dev);
2548c545325SOleksandr Kolomeiets 	int (*slc_lr_rcp_flush)(void *dev, const struct slc_lr_func_s *slc_lr, int category,
2558c545325SOleksandr Kolomeiets 		int cnt);
2567d65ee1aSOleksandr Kolomeiets 
2577d65ee1aSOleksandr Kolomeiets 	/* PDB */
2587d65ee1aSOleksandr Kolomeiets 	bool (*get_pdb_present)(void *dev);
2597d65ee1aSOleksandr Kolomeiets 	uint32_t (*get_pdb_version)(void *dev);
2607d65ee1aSOleksandr Kolomeiets 	int (*pdb_rcp_flush)(void *dev, const struct pdb_func_s *pdb, int category, int cnt);
2617d65ee1aSOleksandr Kolomeiets 	int (*pdb_config_flush)(void *dev, const struct pdb_func_s *pdb);
2627f058028SSerhii Iliushyk 
2637f058028SSerhii Iliushyk 	/* TPE */
2647f058028SSerhii Iliushyk 	bool (*get_tpe_present)(void *dev);
2657f058028SSerhii Iliushyk 	uint32_t (*get_tpe_version)(void *dev);
2667f058028SSerhii Iliushyk 	int (*tpe_rpp_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2677f058028SSerhii Iliushyk 	int (*tpe_rpp_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2687f058028SSerhii Iliushyk 	int (*tpe_ifr_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2697f058028SSerhii Iliushyk 	int (*tpe_ins_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2707f058028SSerhii Iliushyk 	int (*tpe_rpl_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2717f058028SSerhii Iliushyk 	int (*tpe_rpl_ext_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2727f058028SSerhii Iliushyk 	int (*tpe_rpl_rpl_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2737f058028SSerhii Iliushyk 	int (*tpe_cpy_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2747f058028SSerhii Iliushyk 	int (*tpe_hfu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
2757f058028SSerhii Iliushyk 	int (*tpe_csu_rcp_flush)(void *dev, const struct tpe_func_s *tpe, int index, int cnt);
276e3723ca6SOleksandr Kolomeiets };
277e3723ca6SOleksandr Kolomeiets 
2788df4a5f8SOleksandr Kolomeiets struct flow_api_backend_s {
2798df4a5f8SOleksandr Kolomeiets 	void *be_dev;
2801d3f62a0SOleksandr Kolomeiets 	const struct flow_api_backend_ops *iface;
281*7917b0d3SOleksandr Kolomeiets 
282*7917b0d3SOleksandr Kolomeiets 	/* NIC attributes */
283*7917b0d3SOleksandr Kolomeiets 	unsigned int num_phy_ports;
284*7917b0d3SOleksandr Kolomeiets 	unsigned int num_rx_ports;
285*7917b0d3SOleksandr Kolomeiets 
286*7917b0d3SOleksandr Kolomeiets 	/* flow filter resource capacities */
287*7917b0d3SOleksandr Kolomeiets 	unsigned int max_categories;
288*7917b0d3SOleksandr Kolomeiets 	unsigned int max_queues;
2898df4a5f8SOleksandr Kolomeiets };
2908df4a5f8SOleksandr Kolomeiets 
291*7917b0d3SOleksandr Kolomeiets int flow_api_backend_init(struct flow_api_backend_s *dev, const struct flow_api_backend_ops *iface,
292*7917b0d3SOleksandr Kolomeiets 	void *be_dev);
293*7917b0d3SOleksandr Kolomeiets int flow_api_backend_done(struct flow_api_backend_s *dev);
294*7917b0d3SOleksandr Kolomeiets 
2958df4a5f8SOleksandr Kolomeiets #endif  /* _HW_MOD_BACKEND_H_ */
296