xref: /dpdk/drivers/net/ntnic/ntnic_mod_reg.h (revision 6019656d6f6848c83591f24867538311545776eb)
1d3dc3627SSerhii Iliushyk /*
2d3dc3627SSerhii Iliushyk  * SPDX-License-Identifier: BSD-3-Clause
3d3dc3627SSerhii Iliushyk  * Copyright(c) 2023 Napatech A/S
4d3dc3627SSerhii Iliushyk  */
5d3dc3627SSerhii Iliushyk 
6d3dc3627SSerhii Iliushyk #ifndef __NTNIC_MOD_REG_H__
7d3dc3627SSerhii Iliushyk #define __NTNIC_MOD_REG_H__
8d3dc3627SSerhii Iliushyk 
9d3dc3627SSerhii Iliushyk #include <stdint.h>
1087b3bb06SDanylo Vodopianov #include <rte_flow.h>
11cf6007eaSDanylo Vodopianov 
12cf6007eaSDanylo Vodopianov #include "rte_ethdev.h"
13cf6007eaSDanylo Vodopianov #include "rte_flow_driver.h"
14cf6007eaSDanylo Vodopianov 
1536cf85c8SOleksandr Kolomeiets #include "flow_api.h"
16b01eb812SDanylo Vodopianov #include "stream_binary_flow_api.h"
17ddf184d0SSerhii Iliushyk #include "nthw_fpga_model.h"
18d3dc3627SSerhii Iliushyk #include "nthw_platform_drv.h"
19d3dc3627SSerhii Iliushyk #include "nthw_drv.h"
20d3dc3627SSerhii Iliushyk #include "nt4ga_adapter.h"
213a8d7a49SSerhii Iliushyk #include "ntnic_nthw_fpga_rst_nt200a0x.h"
22b0cd36e9SDanylo Vodopianov #include "ntnic_virt_queue.h"
23ed01e436SSerhii Iliushyk #include "create_elements.h"
24b0cd36e9SDanylo Vodopianov 
25b0cd36e9SDanylo Vodopianov /* sg ops section */
26b0cd36e9SDanylo Vodopianov struct sg_ops_s {
27b0cd36e9SDanylo Vodopianov 	/* Setup a virtQueue for a VM */
28b0cd36e9SDanylo Vodopianov 	struct nthw_virt_queue *(*nthw_setup_rx_virt_queue)(nthw_dbs_t *p_nthw_dbs,
29b0cd36e9SDanylo Vodopianov 		uint32_t index,
30b0cd36e9SDanylo Vodopianov 		uint16_t start_idx,
31b0cd36e9SDanylo Vodopianov 		uint16_t start_ptr,
32b0cd36e9SDanylo Vodopianov 		void *avail_struct_phys_addr,
33b0cd36e9SDanylo Vodopianov 		void *used_struct_phys_addr,
34b0cd36e9SDanylo Vodopianov 		void *desc_struct_phys_addr,
35b0cd36e9SDanylo Vodopianov 		uint16_t queue_size,
36b0cd36e9SDanylo Vodopianov 		uint32_t host_id,
37b0cd36e9SDanylo Vodopianov 		uint32_t header,
38b0cd36e9SDanylo Vodopianov 		uint32_t vq_type,
39b0cd36e9SDanylo Vodopianov 		int irq_vector);
40b0cd36e9SDanylo Vodopianov 	struct nthw_virt_queue *(*nthw_setup_tx_virt_queue)(nthw_dbs_t *p_nthw_dbs,
41b0cd36e9SDanylo Vodopianov 		uint32_t index,
42b0cd36e9SDanylo Vodopianov 		uint16_t start_idx,
43b0cd36e9SDanylo Vodopianov 		uint16_t start_ptr,
44b0cd36e9SDanylo Vodopianov 		void *avail_struct_phys_addr,
45b0cd36e9SDanylo Vodopianov 		void *used_struct_phys_addr,
46b0cd36e9SDanylo Vodopianov 		void *desc_struct_phys_addr,
47b0cd36e9SDanylo Vodopianov 		uint16_t queue_size,
48b0cd36e9SDanylo Vodopianov 		uint32_t host_id,
49b0cd36e9SDanylo Vodopianov 		uint32_t port,
50b0cd36e9SDanylo Vodopianov 		uint32_t virtual_port,
51b0cd36e9SDanylo Vodopianov 		uint32_t header,
52b0cd36e9SDanylo Vodopianov 		uint32_t vq_type,
53b0cd36e9SDanylo Vodopianov 		int irq_vector,
54b0cd36e9SDanylo Vodopianov 		uint32_t in_order);
55b0cd36e9SDanylo Vodopianov 	struct nthw_virt_queue *(*nthw_setup_mngd_rx_virt_queue)(nthw_dbs_t *p_nthw_dbs,
56b0cd36e9SDanylo Vodopianov 		uint32_t index,
57b0cd36e9SDanylo Vodopianov 		uint32_t queue_size,
58b0cd36e9SDanylo Vodopianov 		uint32_t host_id,
59b0cd36e9SDanylo Vodopianov 		uint32_t header,
60b0cd36e9SDanylo Vodopianov 		/*
61b0cd36e9SDanylo Vodopianov 		 * Memory that can be used
62b0cd36e9SDanylo Vodopianov 		 * for virtQueue structs
63b0cd36e9SDanylo Vodopianov 		 */
64b0cd36e9SDanylo Vodopianov 		struct nthw_memory_descriptor *p_virt_struct_area,
65b0cd36e9SDanylo Vodopianov 		/*
66b0cd36e9SDanylo Vodopianov 		 * Memory that can be used for packet
67b0cd36e9SDanylo Vodopianov 		 * buffers - Array must have queue_size
68b0cd36e9SDanylo Vodopianov 		 * entries
69b0cd36e9SDanylo Vodopianov 		 */
70b0cd36e9SDanylo Vodopianov 		struct nthw_memory_descriptor *p_packet_buffers,
71b0cd36e9SDanylo Vodopianov 		uint32_t vq_type,
72b0cd36e9SDanylo Vodopianov 		int irq_vector);
73b0cd36e9SDanylo Vodopianov 	int (*nthw_release_mngd_rx_virt_queue)(struct nthw_virt_queue *rxvq);
74b0cd36e9SDanylo Vodopianov 	struct nthw_virt_queue *(*nthw_setup_mngd_tx_virt_queue)(nthw_dbs_t *p_nthw_dbs,
75b0cd36e9SDanylo Vodopianov 		uint32_t index,
76b0cd36e9SDanylo Vodopianov 		uint32_t queue_size,
77b0cd36e9SDanylo Vodopianov 		uint32_t host_id,
78b0cd36e9SDanylo Vodopianov 		uint32_t port,
79b0cd36e9SDanylo Vodopianov 		uint32_t virtual_port,
80b0cd36e9SDanylo Vodopianov 		uint32_t header,
81b0cd36e9SDanylo Vodopianov 		/*
82b0cd36e9SDanylo Vodopianov 		 * Memory that can be used
83b0cd36e9SDanylo Vodopianov 		 * for virtQueue structs
84b0cd36e9SDanylo Vodopianov 		 */
85b0cd36e9SDanylo Vodopianov 		struct nthw_memory_descriptor *p_virt_struct_area,
86b0cd36e9SDanylo Vodopianov 		/*
87b0cd36e9SDanylo Vodopianov 		 * Memory that can be used for packet
88b0cd36e9SDanylo Vodopianov 		 * buffers - Array must have queue_size
89b0cd36e9SDanylo Vodopianov 		 * entries
90b0cd36e9SDanylo Vodopianov 		 */
91b0cd36e9SDanylo Vodopianov 		struct nthw_memory_descriptor *p_packet_buffers,
92b0cd36e9SDanylo Vodopianov 		uint32_t vq_type,
93b0cd36e9SDanylo Vodopianov 		int irq_vector,
94b0cd36e9SDanylo Vodopianov 		uint32_t in_order);
95b0cd36e9SDanylo Vodopianov 	int (*nthw_release_mngd_tx_virt_queue)(struct nthw_virt_queue *txvq);
96b0cd36e9SDanylo Vodopianov 	/*
97b0cd36e9SDanylo Vodopianov 	 * These functions handles both Split and Packed including merged buffers (jumbo)
98b0cd36e9SDanylo Vodopianov 	 */
99b0cd36e9SDanylo Vodopianov 	uint16_t (*nthw_get_rx_packets)(struct nthw_virt_queue *rxvq,
100b0cd36e9SDanylo Vodopianov 		uint16_t n,
101b0cd36e9SDanylo Vodopianov 		struct nthw_received_packets *rp,
102b0cd36e9SDanylo Vodopianov 		uint16_t *nb_pkts);
103b0cd36e9SDanylo Vodopianov 	void (*nthw_release_rx_packets)(struct nthw_virt_queue *rxvq, uint16_t n);
104b0cd36e9SDanylo Vodopianov 	uint16_t (*nthw_get_tx_packets)(struct nthw_virt_queue *txvq,
105b0cd36e9SDanylo Vodopianov 		uint16_t n,
106b0cd36e9SDanylo Vodopianov 		uint16_t *first_idx,
107b0cd36e9SDanylo Vodopianov 		struct nthw_cvirtq_desc *cvq,
108b0cd36e9SDanylo Vodopianov 		struct nthw_memory_descriptor **p_virt_addr);
109b0cd36e9SDanylo Vodopianov 	void (*nthw_release_tx_packets)(struct nthw_virt_queue *txvq,
110b0cd36e9SDanylo Vodopianov 		uint16_t n,
111b0cd36e9SDanylo Vodopianov 		uint16_t n_segs[]);
112b0cd36e9SDanylo Vodopianov 	int (*nthw_virt_queue_init)(struct fpga_info_s *p_fpga_info);
113b0cd36e9SDanylo Vodopianov };
114b0cd36e9SDanylo Vodopianov 
115576e7721SDanylo Vodopianov void register_sg_ops(struct sg_ops_s *ops);
116b0cd36e9SDanylo Vodopianov const struct sg_ops_s *get_sg_ops(void);
117576e7721SDanylo Vodopianov void sg_init(void);
1189147e9f9SSerhii Iliushyk 
119c35c06fbSDanylo Vodopianov /* Meter ops section */
120c35c06fbSDanylo Vodopianov struct meter_ops_s {
121c35c06fbSDanylo Vodopianov 	int (*eth_mtr_ops_get)(struct rte_eth_dev *eth_dev, void *ops);
122c35c06fbSDanylo Vodopianov };
123c35c06fbSDanylo Vodopianov 
124c35c06fbSDanylo Vodopianov void register_meter_ops(struct meter_ops_s *ops);
125c35c06fbSDanylo Vodopianov const struct meter_ops_s *get_meter_ops(void);
126c35c06fbSDanylo Vodopianov void meter_init(void);
127c35c06fbSDanylo Vodopianov 
128c35c06fbSDanylo Vodopianov /*
129c35c06fbSDanylo Vodopianov  *
130c35c06fbSDanylo Vodopianov  */
131effa0469SDanylo Vodopianov struct ntnic_filter_ops {
132effa0469SDanylo Vodopianov 	int (*poll_statistics)(struct pmd_internals *internals);
133effa0469SDanylo Vodopianov };
134effa0469SDanylo Vodopianov 
135effa0469SDanylo Vodopianov void register_ntnic_filter_ops(const struct ntnic_filter_ops *ops);
136effa0469SDanylo Vodopianov const struct ntnic_filter_ops *get_ntnic_filter_ops(void);
137effa0469SDanylo Vodopianov void ntnic_filter_init(void);
138effa0469SDanylo Vodopianov 
139f3ca229fSSerhii Iliushyk struct link_ops_s {
140f3ca229fSSerhii Iliushyk 	int (*link_init)(struct adapter_info_s *p_adapter_info, nthw_fpga_t *p_fpga);
141f3ca229fSSerhii Iliushyk };
142f3ca229fSSerhii Iliushyk 
143f3ca229fSSerhii Iliushyk void register_100g_link_ops(struct link_ops_s *ops);
144f3ca229fSSerhii Iliushyk const struct link_ops_s *get_100g_link_ops(void);
145f3ca229fSSerhii Iliushyk void link_100g_init(void);
146f3ca229fSSerhii Iliushyk 
1479147e9f9SSerhii Iliushyk struct port_ops {
148eaf1ebdcSSerhii Iliushyk 	bool (*get_nim_present)(struct adapter_info_s *p, int port);
149eaf1ebdcSSerhii Iliushyk 
1509147e9f9SSerhii Iliushyk 	/*
1519147e9f9SSerhii Iliushyk 	 * port:s link mode
1529147e9f9SSerhii Iliushyk 	 */
1539147e9f9SSerhii Iliushyk 	void (*set_adm_state)(struct adapter_info_s *p, int port, bool adm_state);
1549147e9f9SSerhii Iliushyk 	bool (*get_adm_state)(struct adapter_info_s *p, int port);
1559147e9f9SSerhii Iliushyk 
1569147e9f9SSerhii Iliushyk 	/*
1579147e9f9SSerhii Iliushyk 	 * port:s link status
1589147e9f9SSerhii Iliushyk 	 */
1599147e9f9SSerhii Iliushyk 	void (*set_link_status)(struct adapter_info_s *p, int port, bool status);
1609147e9f9SSerhii Iliushyk 	bool (*get_link_status)(struct adapter_info_s *p, int port);
1619147e9f9SSerhii Iliushyk 
1629147e9f9SSerhii Iliushyk 	/*
1639147e9f9SSerhii Iliushyk 	 * port: link autoneg
1649147e9f9SSerhii Iliushyk 	 */
1659147e9f9SSerhii Iliushyk 	void (*set_link_autoneg)(struct adapter_info_s *p, int port, bool autoneg);
1669147e9f9SSerhii Iliushyk 	bool (*get_link_autoneg)(struct adapter_info_s *p, int port);
1679147e9f9SSerhii Iliushyk 
1689147e9f9SSerhii Iliushyk 	/*
1699147e9f9SSerhii Iliushyk 	 * port: link speed
1709147e9f9SSerhii Iliushyk 	 */
1719147e9f9SSerhii Iliushyk 	void (*set_link_speed)(struct adapter_info_s *p, int port, nt_link_speed_t speed);
1729147e9f9SSerhii Iliushyk 	nt_link_speed_t (*get_link_speed)(struct adapter_info_s *p, int port);
1739147e9f9SSerhii Iliushyk 
1749147e9f9SSerhii Iliushyk 	/*
1759147e9f9SSerhii Iliushyk 	 * port: link duplex
1769147e9f9SSerhii Iliushyk 	 */
1779147e9f9SSerhii Iliushyk 	void (*set_link_duplex)(struct adapter_info_s *p, int port, nt_link_duplex_t duplex);
1789147e9f9SSerhii Iliushyk 	nt_link_duplex_t (*get_link_duplex)(struct adapter_info_s *p, int port);
1799147e9f9SSerhii Iliushyk 
1809147e9f9SSerhii Iliushyk 	/*
1819147e9f9SSerhii Iliushyk 	 * port: loopback mode
1829147e9f9SSerhii Iliushyk 	 */
1839147e9f9SSerhii Iliushyk 	void (*set_loopback_mode)(struct adapter_info_s *p, int port, uint32_t mode);
1849147e9f9SSerhii Iliushyk 	uint32_t (*get_loopback_mode)(struct adapter_info_s *p, int port);
1859147e9f9SSerhii Iliushyk 
1869147e9f9SSerhii Iliushyk 	uint32_t (*get_link_speed_capabilities)(struct adapter_info_s *p, int port);
1879147e9f9SSerhii Iliushyk 
1889147e9f9SSerhii Iliushyk 	/*
189eaf1ebdcSSerhii Iliushyk 	 * port: nim capabilities
190eaf1ebdcSSerhii Iliushyk 	 */
191eaf1ebdcSSerhii Iliushyk 	nim_i2c_ctx_t (*get_nim_capabilities)(struct adapter_info_s *p, int port);
192eaf1ebdcSSerhii Iliushyk 
193eaf1ebdcSSerhii Iliushyk 	/*
1949147e9f9SSerhii Iliushyk 	 * port: tx power
1959147e9f9SSerhii Iliushyk 	 */
1969147e9f9SSerhii Iliushyk 	int (*tx_power)(struct adapter_info_s *p, int port, bool disable);
1979147e9f9SSerhii Iliushyk };
1989147e9f9SSerhii Iliushyk 
1999147e9f9SSerhii Iliushyk void register_port_ops(const struct port_ops *ops);
2009147e9f9SSerhii Iliushyk const struct port_ops *get_port_ops(void);
2019147e9f9SSerhii Iliushyk void port_init(void);
202d3dc3627SSerhii Iliushyk 
203effa0469SDanylo Vodopianov struct nt4ga_stat_ops {
204effa0469SDanylo Vodopianov 	int (*nt4ga_stat_init)(struct adapter_info_s *p_adapter_info);
205effa0469SDanylo Vodopianov 	int (*nt4ga_stat_setup)(struct adapter_info_s *p_adapter_info);
206a1ba8c47SDanylo Vodopianov 	int (*nt4ga_stat_collect)(struct adapter_info_s *p_adapter_info,
207a1ba8c47SDanylo Vodopianov 		nt4ga_stat_t *p_nt4ga_stat);
208effa0469SDanylo Vodopianov };
209effa0469SDanylo Vodopianov 
210effa0469SDanylo Vodopianov void register_nt4ga_stat_ops(const struct nt4ga_stat_ops *ops);
211effa0469SDanylo Vodopianov const struct nt4ga_stat_ops *get_nt4ga_stat_ops(void);
212effa0469SDanylo Vodopianov void nt4ga_stat_ops_init(void);
213effa0469SDanylo Vodopianov 
214d3dc3627SSerhii Iliushyk struct adapter_ops {
215d3dc3627SSerhii Iliushyk 	int (*init)(struct adapter_info_s *p_adapter_info);
216d3dc3627SSerhii Iliushyk 	int (*deinit)(struct adapter_info_s *p_adapter_info);
217d3dc3627SSerhii Iliushyk 
218d3dc3627SSerhii Iliushyk 	int (*show_info)(struct adapter_info_s *p_adapter_info, FILE *pfh);
219d3dc3627SSerhii Iliushyk };
220d3dc3627SSerhii Iliushyk 
221d3dc3627SSerhii Iliushyk void register_adapter_ops(const struct adapter_ops *ops);
222d3dc3627SSerhii Iliushyk const struct adapter_ops *get_adapter_ops(void);
223d3dc3627SSerhii Iliushyk void adapter_init(void);
224d3dc3627SSerhii Iliushyk 
225c8662c87SSerhii Iliushyk struct clk9563_ops {
226c8662c87SSerhii Iliushyk 	const int *(*get_n_data_9563_si5340_nt200a02_u23_v5)(void);
227c8662c87SSerhii Iliushyk 	const clk_profile_data_fmt2_t *(*get_p_data_9563_si5340_nt200a02_u23_v5)(void);
228c8662c87SSerhii Iliushyk };
229c8662c87SSerhii Iliushyk 
230c8662c87SSerhii Iliushyk void register_clk9563_ops(struct clk9563_ops *ops);
231c8662c87SSerhii Iliushyk struct clk9563_ops *get_clk9563_ops(void);
232c8662c87SSerhii Iliushyk void clk9563_ops_init(void);
233c8662c87SSerhii Iliushyk 
2343a8d7a49SSerhii Iliushyk struct rst_nt200a0x_ops {
2353a8d7a49SSerhii Iliushyk 	int (*nthw_fpga_rst_nt200a0x_init)(struct fpga_info_s *p_fpga_info,
2363a8d7a49SSerhii Iliushyk 		struct nthw_fpga_rst_nt200a0x *p_rst);
2373a8d7a49SSerhii Iliushyk 	int (*nthw_fpga_rst_nt200a0x_reset)(nthw_fpga_t *p_fpga,
2383a8d7a49SSerhii Iliushyk 		const struct nthw_fpga_rst_nt200a0x *p);
2393a8d7a49SSerhii Iliushyk };
2403a8d7a49SSerhii Iliushyk 
2413a8d7a49SSerhii Iliushyk void register_rst_nt200a0x_ops(struct rst_nt200a0x_ops *ops);
2423a8d7a49SSerhii Iliushyk struct rst_nt200a0x_ops *get_rst_nt200a0x_ops(void);
2433a8d7a49SSerhii Iliushyk void rst_nt200a0x_ops_init(void);
2443a8d7a49SSerhii Iliushyk 
2453a8d7a49SSerhii Iliushyk struct rst9563_ops {
2463a8d7a49SSerhii Iliushyk 	int (*nthw_fpga_rst9563_init)(struct fpga_info_s *p_fpga_info,
2473a8d7a49SSerhii Iliushyk 		struct nthw_fpga_rst_nt200a0x *const p);
2483a8d7a49SSerhii Iliushyk };
2493a8d7a49SSerhii Iliushyk 
2503a8d7a49SSerhii Iliushyk void register_rst9563_ops(struct rst9563_ops *ops);
2513a8d7a49SSerhii Iliushyk struct rst9563_ops *get_rst9563_ops(void);
2523a8d7a49SSerhii Iliushyk void rst9563_ops_init(void);
253d3dc3627SSerhii Iliushyk 
2540ea00f33SOleksandr Kolomeiets struct flow_backend_ops {
2550ea00f33SOleksandr Kolomeiets 	const struct flow_api_backend_ops *(*bin_flow_backend_init)(nthw_fpga_t *p_fpga,
2560ea00f33SOleksandr Kolomeiets 		void **be_dev);
2578df4a5f8SOleksandr Kolomeiets 	void (*bin_flow_backend_done)(void *be_dev);
2580ea00f33SOleksandr Kolomeiets };
2590ea00f33SOleksandr Kolomeiets 
260e3723ca6SOleksandr Kolomeiets void register_flow_backend_ops(const struct flow_backend_ops *ops);
2610ea00f33SOleksandr Kolomeiets const struct flow_backend_ops *get_flow_backend_ops(void);
262e3723ca6SOleksandr Kolomeiets void flow_backend_init(void);
2630ea00f33SOleksandr Kolomeiets 
26411ea9780SSerhii Iliushyk struct profile_inline_ops {
26511ea9780SSerhii Iliushyk 	/*
2662005c549SSerhii Iliushyk 	 * Management
2672005c549SSerhii Iliushyk 	 */
2682005c549SSerhii Iliushyk 
2692005c549SSerhii Iliushyk 	int (*done_flow_management_of_ndev_profile_inline)(struct flow_nic_dev *ndev);
2702005c549SSerhii Iliushyk 
2712005c549SSerhii Iliushyk 	int (*initialize_flow_management_of_ndev_profile_inline)(struct flow_nic_dev *ndev);
2722005c549SSerhii Iliushyk 
2732005c549SSerhii Iliushyk 	/*
27411ea9780SSerhii Iliushyk 	 * Flow functionality
27511ea9780SSerhii Iliushyk 	 */
27611ea9780SSerhii Iliushyk 	int (*flow_destroy_locked_profile_inline)(struct flow_eth_dev *dev,
27711ea9780SSerhii Iliushyk 		struct flow_handle *fh,
27811ea9780SSerhii Iliushyk 		struct rte_flow_error *error);
27911ea9780SSerhii Iliushyk 
28011ea9780SSerhii Iliushyk 	struct flow_handle *(*flow_create_profile_inline)(struct flow_eth_dev *dev,
28111ea9780SSerhii Iliushyk 		const struct rte_flow_attr *attr,
28211ea9780SSerhii Iliushyk 		uint16_t forced_vlan_vid,
28311ea9780SSerhii Iliushyk 		uint16_t caller_id,
28411ea9780SSerhii Iliushyk 		const struct rte_flow_item elem[],
28511ea9780SSerhii Iliushyk 		const struct rte_flow_action action[],
28611ea9780SSerhii Iliushyk 		struct rte_flow_error *error);
28711ea9780SSerhii Iliushyk 
28811ea9780SSerhii Iliushyk 	int (*flow_destroy_profile_inline)(struct flow_eth_dev *dev,
28911ea9780SSerhii Iliushyk 		struct flow_handle *flow,
29011ea9780SSerhii Iliushyk 		struct rte_flow_error *error);
2917fa0bf29SDanylo Vodopianov 
292f7cb8420SOleksandr Kolomeiets 	int (*flow_flush_profile_inline)(struct flow_eth_dev *dev,
293f7cb8420SOleksandr Kolomeiets 		uint16_t caller_id,
294f7cb8420SOleksandr Kolomeiets 		struct rte_flow_error *error);
295f7cb8420SOleksandr Kolomeiets 
29654204eadSDanylo Vodopianov 	int (*flow_actions_update_profile_inline)(struct flow_eth_dev *dev,
29754204eadSDanylo Vodopianov 		struct flow_handle *flow,
29854204eadSDanylo Vodopianov 		const struct rte_flow_action action[],
29954204eadSDanylo Vodopianov 		struct rte_flow_error *error);
30054204eadSDanylo Vodopianov 
3016f0fe142SOleksandr Kolomeiets 	int (*flow_dev_dump_profile_inline)(struct flow_eth_dev *dev,
3026f0fe142SOleksandr Kolomeiets 		struct flow_handle *flow,
3036f0fe142SOleksandr Kolomeiets 		uint16_t caller_id,
3046f0fe142SOleksandr Kolomeiets 		FILE *file,
3056f0fe142SOleksandr Kolomeiets 		struct rte_flow_error *error);
3066f0fe142SOleksandr Kolomeiets 
30741e430deSDanylo Vodopianov 	int (*flow_get_aged_flows_profile_inline)(struct flow_eth_dev *dev,
30841e430deSDanylo Vodopianov 		uint16_t caller_id,
30941e430deSDanylo Vodopianov 		void **context,
31041e430deSDanylo Vodopianov 		uint32_t nb_contexts,
31141e430deSDanylo Vodopianov 		struct rte_flow_error *error);
31241e430deSDanylo Vodopianov 
3131042162dSDanylo Vodopianov 	/*
3141042162dSDanylo Vodopianov 	 * RTE flow asynchronous operations functions
3151042162dSDanylo Vodopianov 	 */
3161042162dSDanylo Vodopianov 
31796d92ae4SDanylo Vodopianov 	struct flow_pattern_template *(*flow_pattern_template_create_profile_inline)
31896d92ae4SDanylo Vodopianov 		(struct flow_eth_dev *dev,
31996d92ae4SDanylo Vodopianov 		const struct rte_flow_pattern_template_attr *template_attr, uint16_t caller_id,
32096d92ae4SDanylo Vodopianov 		const struct rte_flow_item pattern[], struct rte_flow_error *error);
32196d92ae4SDanylo Vodopianov 
32296d92ae4SDanylo Vodopianov 	int (*flow_pattern_template_destroy_profile_inline)(struct flow_eth_dev *dev,
32396d92ae4SDanylo Vodopianov 		struct flow_pattern_template *pattern_template,
32496d92ae4SDanylo Vodopianov 		struct rte_flow_error *error);
32596d92ae4SDanylo Vodopianov 
32696d92ae4SDanylo Vodopianov 	struct flow_actions_template *(*flow_actions_template_create_profile_inline)
32796d92ae4SDanylo Vodopianov 		(struct flow_eth_dev *dev,
32896d92ae4SDanylo Vodopianov 		const struct rte_flow_actions_template_attr *template_attr,
32996d92ae4SDanylo Vodopianov 		uint16_t caller_id, const struct rte_flow_action actions[],
33096d92ae4SDanylo Vodopianov 		const struct rte_flow_action masks[], struct rte_flow_error *error);
33196d92ae4SDanylo Vodopianov 
33296d92ae4SDanylo Vodopianov 	int (*flow_actions_template_destroy_profile_inline)(struct flow_eth_dev *dev,
33396d92ae4SDanylo Vodopianov 		struct flow_actions_template *actions_template,
33496d92ae4SDanylo Vodopianov 		struct rte_flow_error *error);
33596d92ae4SDanylo Vodopianov 
33696d92ae4SDanylo Vodopianov 	struct flow_template_table *(*flow_template_table_create_profile_inline)
33796d92ae4SDanylo Vodopianov 		(struct flow_eth_dev *dev, const struct rte_flow_template_table_attr *table_attr,
33896d92ae4SDanylo Vodopianov 		uint16_t forced_vlan_vid, uint16_t caller_id,
33996d92ae4SDanylo Vodopianov 		struct flow_pattern_template *pattern_templates[], uint8_t nb_pattern_templates,
34096d92ae4SDanylo Vodopianov 		struct flow_actions_template *actions_templates[], uint8_t nb_actions_templates,
34196d92ae4SDanylo Vodopianov 		struct rte_flow_error *error);
34296d92ae4SDanylo Vodopianov 
34396d92ae4SDanylo Vodopianov 	int (*flow_template_table_destroy_profile_inline)(struct flow_eth_dev *dev,
34496d92ae4SDanylo Vodopianov 		struct flow_template_table *template_table,
34596d92ae4SDanylo Vodopianov 		struct rte_flow_error *error);
34696d92ae4SDanylo Vodopianov 
3471042162dSDanylo Vodopianov 	struct flow_handle *(*flow_async_create_profile_inline)(struct flow_eth_dev *dev,
3481042162dSDanylo Vodopianov 		uint32_t queue_id, const struct rte_flow_op_attr *op_attr,
3491042162dSDanylo Vodopianov 		struct flow_template_table *template_table, const struct rte_flow_item pattern[],
3501042162dSDanylo Vodopianov 		uint8_t rte_pattern_template_index, const struct rte_flow_action actions[],
3511042162dSDanylo Vodopianov 		uint8_t rte_actions_template_index, void *user_data, struct rte_flow_error *error);
3521042162dSDanylo Vodopianov 
3531042162dSDanylo Vodopianov 	int (*flow_async_destroy_profile_inline)(struct flow_eth_dev *dev, uint32_t queue_id,
3541042162dSDanylo Vodopianov 		const struct rte_flow_op_attr *op_attr,
3551042162dSDanylo Vodopianov 		struct flow_handle *flow, void *user_data,
3561042162dSDanylo Vodopianov 		struct rte_flow_error *error);
3571042162dSDanylo Vodopianov 
3587fa0bf29SDanylo Vodopianov 	int (*flow_nic_set_hasher_fields_inline)(struct flow_nic_dev *ndev,
3597fa0bf29SDanylo Vodopianov 		int hsh_idx,
3607fa0bf29SDanylo Vodopianov 		struct nt_eth_rss_conf rss_conf);
36196c8249bSDanylo Vodopianov 
36296c8249bSDanylo Vodopianov 	/*
363e7e49ce6SDanylo Vodopianov 	 * Stats
364e7e49ce6SDanylo Vodopianov 	 */
365e7e49ce6SDanylo Vodopianov 	int (*flow_get_flm_stats_profile_inline)(struct flow_nic_dev *ndev,
366e7e49ce6SDanylo Vodopianov 		uint64_t *data,
367e7e49ce6SDanylo Vodopianov 		uint64_t size);
368e7e49ce6SDanylo Vodopianov 
369e7e49ce6SDanylo Vodopianov 	/*
37096c8249bSDanylo Vodopianov 	 * NT Flow FLM queue API
37196c8249bSDanylo Vodopianov 	 */
37296c8249bSDanylo Vodopianov 	void (*flm_setup_queues)(void);
37396c8249bSDanylo Vodopianov 	void (*flm_free_queues)(void);
3744033e053SDanylo Vodopianov 
3754033e053SDanylo Vodopianov 	/*
3764033e053SDanylo Vodopianov 	 * NT Flow FLM Meter API
3774033e053SDanylo Vodopianov 	 */
3784033e053SDanylo Vodopianov 	int (*flow_mtr_supported)(struct flow_eth_dev *dev);
3794033e053SDanylo Vodopianov 	uint64_t (*flow_mtr_meter_policy_n_max)(void);
3804033e053SDanylo Vodopianov 	int (*flow_mtr_set_profile)(struct flow_eth_dev *dev, uint32_t profile_id,
3814033e053SDanylo Vodopianov 		uint64_t bucket_rate_a, uint64_t bucket_size_a,
3824033e053SDanylo Vodopianov 		uint64_t bucket_rate_b, uint64_t bucket_size_b);
3834033e053SDanylo Vodopianov 	int (*flow_mtr_set_policy)(struct flow_eth_dev *dev, uint32_t policy_id, int drop);
3844033e053SDanylo Vodopianov 	int (*flow_mtr_create_meter)(struct flow_eth_dev *dev, uint8_t caller_id, uint32_t mtr_id,
3854033e053SDanylo Vodopianov 		uint32_t profile_id, uint32_t policy_id, uint64_t stats_mask);
3864033e053SDanylo Vodopianov 	int (*flow_mtr_probe_meter)(struct flow_eth_dev *dev, uint8_t caller_id, uint32_t mtr_id);
3874033e053SDanylo Vodopianov 	int (*flow_mtr_destroy_meter)(struct flow_eth_dev *dev, uint8_t caller_id,
3884033e053SDanylo Vodopianov 		uint32_t mtr_id);
3894033e053SDanylo Vodopianov 	int (*flm_mtr_adjust_stats)(struct flow_eth_dev *dev, uint8_t caller_id, uint32_t mtr_id,
3904033e053SDanylo Vodopianov 		uint32_t adjust_value);
3914033e053SDanylo Vodopianov 	uint32_t (*flow_mtr_meters_supported)(struct flow_eth_dev *dev, uint8_t caller_id);
3924033e053SDanylo Vodopianov 
3934033e053SDanylo Vodopianov 	void (*flm_mtr_read_stats)(struct flow_eth_dev *dev,
3944033e053SDanylo Vodopianov 		uint8_t caller_id,
3954033e053SDanylo Vodopianov 		uint32_t id,
3964033e053SDanylo Vodopianov 		uint64_t *stats_mask,
3974033e053SDanylo Vodopianov 		uint64_t *green_pkt,
3984033e053SDanylo Vodopianov 		uint64_t *green_bytes,
3994033e053SDanylo Vodopianov 		int clear);
4004033e053SDanylo Vodopianov 
40196c8249bSDanylo Vodopianov 	uint32_t (*flm_update)(struct flow_eth_dev *dev);
402e7e01fd1SDanylo Vodopianov 
403e7e01fd1SDanylo Vodopianov 	int (*flow_info_get_profile_inline)(struct flow_eth_dev *dev, uint8_t caller_id,
404e7e01fd1SDanylo Vodopianov 		struct rte_flow_port_info *port_info, struct rte_flow_queue_info *queue_info,
405e7e01fd1SDanylo Vodopianov 		struct rte_flow_error *error);
406e7e01fd1SDanylo Vodopianov 
407e7e01fd1SDanylo Vodopianov 	int (*flow_configure_profile_inline)(struct flow_eth_dev *dev, uint8_t caller_id,
408e7e01fd1SDanylo Vodopianov 	const struct rte_flow_port_attr *port_attr, uint16_t nb_queue,
409e7e01fd1SDanylo Vodopianov 	const struct rte_flow_queue_attr *queue_attr[],
410e7e01fd1SDanylo Vodopianov 	struct rte_flow_error *error);
411*6019656dSOleksandr Kolomeiets 
412*6019656dSOleksandr Kolomeiets 	/*
413*6019656dSOleksandr Kolomeiets 	 * Config API
414*6019656dSOleksandr Kolomeiets 	 */
415*6019656dSOleksandr Kolomeiets 	int (*flow_set_mtu_inline)(struct flow_eth_dev *dev, uint32_t port, uint16_t mtu);
41611ea9780SSerhii Iliushyk };
41711ea9780SSerhii Iliushyk 
41811ea9780SSerhii Iliushyk void register_profile_inline_ops(const struct profile_inline_ops *ops);
419b01eb812SDanylo Vodopianov const struct profile_inline_ops *get_profile_inline_ops(void);
42011ea9780SSerhii Iliushyk void profile_inline_init(void);
421b01eb812SDanylo Vodopianov 
42236cf85c8SOleksandr Kolomeiets struct flow_filter_ops {
42336cf85c8SOleksandr Kolomeiets 	int (*flow_filter_init)(nthw_fpga_t *p_fpga, struct flow_nic_dev **p_flow_device,
42436cf85c8SOleksandr Kolomeiets 		int adapter_no);
4250e5e289eSOleksandr Kolomeiets 	int (*flow_filter_done)(struct flow_nic_dev *dev);
426b01eb812SDanylo Vodopianov 	/*
427b01eb812SDanylo Vodopianov 	 * Device Management API
428b01eb812SDanylo Vodopianov 	 */
429b01eb812SDanylo Vodopianov 	struct flow_eth_dev *(*flow_get_eth_dev)(uint8_t adapter_no,
430b01eb812SDanylo Vodopianov 		uint8_t hw_port_no,
431b01eb812SDanylo Vodopianov 		uint32_t port_id,
432b01eb812SDanylo Vodopianov 		int alloc_rx_queues,
433b01eb812SDanylo Vodopianov 		struct flow_queue_id_s queue_ids[],
434b01eb812SDanylo Vodopianov 		int *rss_target_id,
435b01eb812SDanylo Vodopianov 		enum flow_eth_dev_profile flow_profile,
436b01eb812SDanylo Vodopianov 		uint32_t exception_path);
4376f0fe142SOleksandr Kolomeiets 	int (*flow_dev_dump)(struct flow_eth_dev *dev,
4386f0fe142SOleksandr Kolomeiets 		struct flow_handle *flow,
4396f0fe142SOleksandr Kolomeiets 		uint16_t caller_id,
4406f0fe142SOleksandr Kolomeiets 		FILE *file,
4416f0fe142SOleksandr Kolomeiets 		struct rte_flow_error *error);
44252fae3f4SSerhii Iliushyk 	/*
44352fae3f4SSerhii Iliushyk 	 * NT Flow API
44452fae3f4SSerhii Iliushyk 	 */
44552fae3f4SSerhii Iliushyk 	struct flow_handle *(*flow_create)(struct flow_eth_dev *dev,
44652fae3f4SSerhii Iliushyk 		const struct rte_flow_attr *attr,
44752fae3f4SSerhii Iliushyk 		uint16_t forced_vlan_vid,
44852fae3f4SSerhii Iliushyk 		uint16_t caller_id,
44952fae3f4SSerhii Iliushyk 		const struct rte_flow_item item[],
45052fae3f4SSerhii Iliushyk 		const struct rte_flow_action action[],
45152fae3f4SSerhii Iliushyk 		struct rte_flow_error *error);
45252fae3f4SSerhii Iliushyk 
45352fae3f4SSerhii Iliushyk 	int (*flow_destroy)(struct flow_eth_dev *dev,
45452fae3f4SSerhii Iliushyk 		struct flow_handle *flow,
45552fae3f4SSerhii Iliushyk 		struct rte_flow_error *error);
456f7cb8420SOleksandr Kolomeiets 
457f7cb8420SOleksandr Kolomeiets 	int (*flow_flush)(struct flow_eth_dev *dev, uint16_t caller_id,
458f7cb8420SOleksandr Kolomeiets 		struct rte_flow_error *error);
4598eed292bSSerhii Iliushyk 
46054204eadSDanylo Vodopianov 	int (*flow_actions_update)(struct flow_eth_dev *dev,
46154204eadSDanylo Vodopianov 		struct flow_handle *flow,
46254204eadSDanylo Vodopianov 		const struct rte_flow_action action[],
46354204eadSDanylo Vodopianov 		struct rte_flow_error *error);
46454204eadSDanylo Vodopianov 
465971245aaSDanylo Vodopianov 	int (*flow_get_flm_stats)(struct flow_nic_dev *ndev, uint64_t *data, uint64_t size);
466971245aaSDanylo Vodopianov 
4678eed292bSSerhii Iliushyk 	/*
4688eed292bSSerhii Iliushyk 	 * Other
4698eed292bSSerhii Iliushyk 	 */
4708eed292bSSerhii Iliushyk 	int (*flow_nic_set_hasher_fields)(struct flow_nic_dev *ndev, int hsh_idx,
4718eed292bSSerhii Iliushyk 		struct nt_eth_rss_conf rss_conf);
4728eed292bSSerhii Iliushyk 	int (*hw_mod_hsh_rcp_flush)(struct flow_api_backend_s *be, int start_idx, int count);
47341e430deSDanylo Vodopianov 
47441e430deSDanylo Vodopianov 	int (*flow_get_aged_flows)(struct flow_eth_dev *dev,
47541e430deSDanylo Vodopianov 		uint16_t caller_id,
47641e430deSDanylo Vodopianov 		void **context,
47741e430deSDanylo Vodopianov 		uint32_t nb_contexts,
47841e430deSDanylo Vodopianov 		struct rte_flow_error *error);
47941e430deSDanylo Vodopianov 
48087b3bb06SDanylo Vodopianov 	/*
48187b3bb06SDanylo Vodopianov 	 * RTE flow asynchronous operations functions
48287b3bb06SDanylo Vodopianov 	 */
4838195eb04SDanylo Vodopianov 	struct flow_pattern_template *(*flow_pattern_template_create)(struct flow_eth_dev *dev,
4848195eb04SDanylo Vodopianov 		const struct rte_flow_pattern_template_attr *template_attr, uint16_t caller_id,
4858195eb04SDanylo Vodopianov 		const struct rte_flow_item pattern[], struct rte_flow_error *error);
4868195eb04SDanylo Vodopianov 
4878195eb04SDanylo Vodopianov 	int (*flow_pattern_template_destroy)(struct flow_eth_dev *dev,
4888195eb04SDanylo Vodopianov 		struct flow_pattern_template *pattern_template,
4898195eb04SDanylo Vodopianov 		struct rte_flow_error *error);
4908195eb04SDanylo Vodopianov 
4918195eb04SDanylo Vodopianov 	struct flow_actions_template *(*flow_actions_template_create)(struct flow_eth_dev *dev,
4928195eb04SDanylo Vodopianov 		const struct rte_flow_actions_template_attr *template_attr,  uint16_t caller_id,
4938195eb04SDanylo Vodopianov 		const struct rte_flow_action actions[], const struct rte_flow_action masks[],
4948195eb04SDanylo Vodopianov 		struct rte_flow_error *error);
4958195eb04SDanylo Vodopianov 
4968195eb04SDanylo Vodopianov 	int (*flow_actions_template_destroy)(struct flow_eth_dev *dev,
4978195eb04SDanylo Vodopianov 		struct flow_actions_template *actions_template,
4988195eb04SDanylo Vodopianov 		struct rte_flow_error *error);
4998195eb04SDanylo Vodopianov 
5008195eb04SDanylo Vodopianov 	struct flow_template_table *(*flow_template_table_create)(struct flow_eth_dev *dev,
5018195eb04SDanylo Vodopianov 		const struct rte_flow_template_table_attr *table_attr, uint16_t forced_vlan_vid,
5028195eb04SDanylo Vodopianov 		uint16_t caller_id,
5038195eb04SDanylo Vodopianov 		struct flow_pattern_template *pattern_templates[], uint8_t nb_pattern_templates,
5048195eb04SDanylo Vodopianov 		struct flow_actions_template *actions_templates[], uint8_t nb_actions_templates,
5058195eb04SDanylo Vodopianov 		struct rte_flow_error *error);
5068195eb04SDanylo Vodopianov 
5078195eb04SDanylo Vodopianov 	int (*flow_template_table_destroy)(struct flow_eth_dev *dev,
5088195eb04SDanylo Vodopianov 		struct flow_template_table *template_table,
5098195eb04SDanylo Vodopianov 		struct rte_flow_error *error);
5108195eb04SDanylo Vodopianov 
51187b3bb06SDanylo Vodopianov 	struct flow_handle *(*flow_async_create)(struct flow_eth_dev *dev, uint32_t queue_id,
51287b3bb06SDanylo Vodopianov 		const struct rte_flow_op_attr *op_attr,
51387b3bb06SDanylo Vodopianov 		struct flow_template_table *template_table, const struct rte_flow_item pattern[],
51487b3bb06SDanylo Vodopianov 		uint8_t pattern_template_index, const struct rte_flow_action actions[],
51587b3bb06SDanylo Vodopianov 		uint8_t actions_template_index, void *user_data, struct rte_flow_error *error);
51687b3bb06SDanylo Vodopianov 
51787b3bb06SDanylo Vodopianov 	int (*flow_async_destroy)(struct flow_eth_dev *dev, uint32_t queue_id,
51887b3bb06SDanylo Vodopianov 		const struct rte_flow_op_attr *op_attr, struct flow_handle *flow,
51987b3bb06SDanylo Vodopianov 		void *user_data, struct rte_flow_error *error);
52087b3bb06SDanylo Vodopianov 
52141e430deSDanylo Vodopianov 	int (*flow_info_get)(struct flow_eth_dev *dev, uint8_t caller_id,
52241e430deSDanylo Vodopianov 		struct rte_flow_port_info *port_info, struct rte_flow_queue_info *queue_info,
52341e430deSDanylo Vodopianov 		struct rte_flow_error *error);
52441e430deSDanylo Vodopianov 
52541e430deSDanylo Vodopianov 	int (*flow_configure)(struct flow_eth_dev *dev, uint8_t caller_id,
52641e430deSDanylo Vodopianov 		const struct rte_flow_port_attr *port_attr, uint16_t nb_queue,
52741e430deSDanylo Vodopianov 		const struct rte_flow_queue_attr *queue_attr[],
52841e430deSDanylo Vodopianov 		struct rte_flow_error *error);
52936cf85c8SOleksandr Kolomeiets };
53036cf85c8SOleksandr Kolomeiets 
53187b3bb06SDanylo Vodopianov void register_dev_fp_flow_ops(const struct rte_flow_fp_ops *ops);
53287b3bb06SDanylo Vodopianov const struct rte_flow_fp_ops *get_dev_fp_flow_ops(void);
53387b3bb06SDanylo Vodopianov void dev_fp_flow_init(void);
53487b3bb06SDanylo Vodopianov 
535ed01e436SSerhii Iliushyk void register_dev_flow_ops(const struct rte_flow_ops *ops);
536ed01e436SSerhii Iliushyk const struct rte_flow_ops *get_dev_flow_ops(void);
537ed01e436SSerhii Iliushyk void dev_flow_init(void);
538ed01e436SSerhii Iliushyk 
5390ea00f33SOleksandr Kolomeiets void register_flow_filter_ops(const struct flow_filter_ops *ops);
54036cf85c8SOleksandr Kolomeiets const struct flow_filter_ops *get_flow_filter_ops(void);
5410ea00f33SOleksandr Kolomeiets void init_flow_filter(void);
54236cf85c8SOleksandr Kolomeiets 
543cf6007eaSDanylo Vodopianov struct ntnic_xstats_ops {
544cf6007eaSDanylo Vodopianov 	int (*nthw_xstats_get_names)(nt4ga_stat_t *p_nt4ga_stat,
545cf6007eaSDanylo Vodopianov 		struct rte_eth_xstat_name *xstats_names,
546cf6007eaSDanylo Vodopianov 		unsigned int size);
547cf6007eaSDanylo Vodopianov 	int (*nthw_xstats_get)(nt4ga_stat_t *p_nt4ga_stat,
548cf6007eaSDanylo Vodopianov 		struct rte_eth_xstat *stats,
549cf6007eaSDanylo Vodopianov 		unsigned int n,
550cf6007eaSDanylo Vodopianov 		uint8_t port);
551cf6007eaSDanylo Vodopianov 	void (*nthw_xstats_reset)(nt4ga_stat_t *p_nt4ga_stat, uint8_t port);
552cf6007eaSDanylo Vodopianov 	int (*nthw_xstats_get_names_by_id)(nt4ga_stat_t *p_nt4ga_stat,
553cf6007eaSDanylo Vodopianov 		struct rte_eth_xstat_name *xstats_names,
554cf6007eaSDanylo Vodopianov 		const uint64_t *ids,
555cf6007eaSDanylo Vodopianov 		unsigned int size);
556cf6007eaSDanylo Vodopianov 	int (*nthw_xstats_get_by_id)(nt4ga_stat_t *p_nt4ga_stat,
557cf6007eaSDanylo Vodopianov 		const uint64_t *ids,
558cf6007eaSDanylo Vodopianov 		uint64_t *values,
559cf6007eaSDanylo Vodopianov 		unsigned int n,
560cf6007eaSDanylo Vodopianov 		uint8_t port);
561cf6007eaSDanylo Vodopianov };
562cf6007eaSDanylo Vodopianov 
563cf6007eaSDanylo Vodopianov void register_ntnic_xstats_ops(struct ntnic_xstats_ops *ops);
564cf6007eaSDanylo Vodopianov struct ntnic_xstats_ops *get_ntnic_xstats_ops(void);
565cf6007eaSDanylo Vodopianov void ntnic_xstats_ops_init(void);
566cf6007eaSDanylo Vodopianov 
567d3dc3627SSerhii Iliushyk #endif	/* __NTNIC_MOD_REG_H__ */
568