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