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