1c93ef6edSSerhii Iliushyk /* 2c93ef6edSSerhii Iliushyk * SPDX-License-Identifier: BSD-3-Clause 3c93ef6edSSerhii Iliushyk * Copyright(c) 2023 Napatech A/S 4c93ef6edSSerhii Iliushyk */ 5c93ef6edSSerhii Iliushyk 6c93ef6edSSerhii Iliushyk #ifndef __NTOS_DRV_H__ 7c93ef6edSSerhii Iliushyk #define __NTOS_DRV_H__ 8c93ef6edSSerhii Iliushyk 9c93ef6edSSerhii Iliushyk #include <unistd.h> 10c93ef6edSSerhii Iliushyk #include <stdlib.h> 11c93ef6edSSerhii Iliushyk #include <stdint.h> 12c93ef6edSSerhii Iliushyk #include <inttypes.h> 13c93ef6edSSerhii Iliushyk 14c93ef6edSSerhii Iliushyk #include <rte_ether.h> 15*c35c06fbSDanylo Vodopianov #include "rte_mtr.h" 16c93ef6edSSerhii Iliushyk 17fe91ade9SDanylo Vodopianov #include "stream_binary_flow_api.h" 187812b7a7SSerhii Iliushyk #include "nthw_drv.h" 197812b7a7SSerhii Iliushyk 20c93ef6edSSerhii Iliushyk #define NUM_MAC_ADDRS_PER_PORT (16U) 21c93ef6edSSerhii Iliushyk #define NUM_MULTICAST_ADDRS_PER_PORT (16U) 22c93ef6edSSerhii Iliushyk 23c93ef6edSSerhii Iliushyk #define NUM_ADAPTER_MAX (8) 24c93ef6edSSerhii Iliushyk #define NUM_ADAPTER_PORTS_MAX (128) 25c93ef6edSSerhii Iliushyk 26fe91ade9SDanylo Vodopianov 27fe91ade9SDanylo Vodopianov /* Max RSS queues */ 28fe91ade9SDanylo Vodopianov #define MAX_QUEUES 125 29fe91ade9SDanylo Vodopianov 30fe91ade9SDanylo Vodopianov /* Structs: */ 31da25ae3cSDanylo Vodopianov #define SG_HDR_SIZE 12 32da25ae3cSDanylo Vodopianov 33da25ae3cSDanylo Vodopianov struct _pkt_hdr_rx { 34da25ae3cSDanylo Vodopianov uint32_t cap_len:14; 35da25ae3cSDanylo Vodopianov uint32_t fid:10; 36da25ae3cSDanylo Vodopianov uint32_t ofs1:8; 37da25ae3cSDanylo Vodopianov uint32_t ip_prot:8; 38da25ae3cSDanylo Vodopianov uint32_t port:13; 39da25ae3cSDanylo Vodopianov uint32_t descr:8; 40da25ae3cSDanylo Vodopianov uint32_t descr_12b:1; 41da25ae3cSDanylo Vodopianov uint32_t color_type:2; 42da25ae3cSDanylo Vodopianov uint32_t color:32; 43da25ae3cSDanylo Vodopianov }; 44da25ae3cSDanylo Vodopianov 45b0cd36e9SDanylo Vodopianov struct nthw_memory_descriptor { 465284180aSDanylo Vodopianov void *phys_addr; 47b0cd36e9SDanylo Vodopianov void *virt_addr; 48b0cd36e9SDanylo Vodopianov uint32_t len; 49b0cd36e9SDanylo Vodopianov }; 50b0cd36e9SDanylo Vodopianov 51b0cd36e9SDanylo Vodopianov struct hwq_s { 52b0cd36e9SDanylo Vodopianov int vf_num; 53b0cd36e9SDanylo Vodopianov struct nthw_memory_descriptor virt_queues_ctrl; 54b0cd36e9SDanylo Vodopianov struct nthw_memory_descriptor *pkt_buffers; 55b0cd36e9SDanylo Vodopianov }; 56b0cd36e9SDanylo Vodopianov 57fe91ade9SDanylo Vodopianov struct __rte_cache_aligned ntnic_rx_queue { 58fe91ade9SDanylo Vodopianov struct flow_queue_id_s queue; /* queue info - user id and hw queue index */ 59fe91ade9SDanylo Vodopianov struct rte_mempool *mb_pool; /* mbuf memory pool */ 60fe91ade9SDanylo Vodopianov uint16_t buf_size; /* Size of data area in mbuf */ 61effa0469SDanylo Vodopianov unsigned long rx_pkts; /* Rx packet statistics */ 62effa0469SDanylo Vodopianov unsigned long rx_bytes; /* Rx bytes statistics */ 63effa0469SDanylo Vodopianov unsigned long err_pkts; /* Rx error packet statistics */ 64fe91ade9SDanylo Vodopianov int enabled; /* Enabling/disabling of this queue */ 65fe91ade9SDanylo Vodopianov 66b0cd36e9SDanylo Vodopianov struct hwq_s hwq; 67b0cd36e9SDanylo Vodopianov struct nthw_virt_queue *vq; 686b0047faSDanylo Vodopianov int nb_hw_rx_descr; 69fe91ade9SDanylo Vodopianov nt_meta_port_type_t type; 70fe91ade9SDanylo Vodopianov uint32_t port; /* Rx port for this queue */ 71fe91ade9SDanylo Vodopianov enum fpga_info_profile profile; /* Inline / Capture */ 72fe91ade9SDanylo Vodopianov 73fe91ade9SDanylo Vodopianov }; 74fe91ade9SDanylo Vodopianov 75fe91ade9SDanylo Vodopianov struct __rte_cache_aligned ntnic_tx_queue { 76fe91ade9SDanylo Vodopianov struct flow_queue_id_s queue; /* queue info - user id and hw queue index */ 77b0cd36e9SDanylo Vodopianov struct hwq_s hwq; 78b0cd36e9SDanylo Vodopianov struct nthw_virt_queue *vq; 796b0047faSDanylo Vodopianov int nb_hw_tx_descr; 806b0047faSDanylo Vodopianov /* Used for bypass in NTDVIO0 header on Tx - pre calculated */ 816b0047faSDanylo Vodopianov int target_id; 82fe91ade9SDanylo Vodopianov nt_meta_port_type_t type; 836b0047faSDanylo Vodopianov /* only used for exception tx queue from OVS SW switching */ 846b0047faSDanylo Vodopianov int rss_target_id; 85fe91ade9SDanylo Vodopianov 86fe91ade9SDanylo Vodopianov uint32_t port; /* Tx port for this queue */ 87effa0469SDanylo Vodopianov unsigned long tx_pkts; /* Tx packet statistics */ 88effa0469SDanylo Vodopianov unsigned long tx_bytes; /* Tx bytes statistics */ 89effa0469SDanylo Vodopianov unsigned long err_pkts; /* Tx error packet stat */ 90fe91ade9SDanylo Vodopianov int enabled; /* Enabling/disabling of this queue */ 91fe91ade9SDanylo Vodopianov enum fpga_info_profile profile; /* Inline / Capture */ 92fe91ade9SDanylo Vodopianov }; 93fe91ade9SDanylo Vodopianov 94*c35c06fbSDanylo Vodopianov struct nt_mtr_profile { 95*c35c06fbSDanylo Vodopianov LIST_ENTRY(nt_mtr_profile) next; 96*c35c06fbSDanylo Vodopianov uint32_t profile_id; 97*c35c06fbSDanylo Vodopianov struct rte_mtr_meter_profile profile; 98*c35c06fbSDanylo Vodopianov }; 99*c35c06fbSDanylo Vodopianov 100*c35c06fbSDanylo Vodopianov struct nt_mtr { 101*c35c06fbSDanylo Vodopianov LIST_ENTRY(nt_mtr) next; 102*c35c06fbSDanylo Vodopianov uint32_t mtr_id; 103*c35c06fbSDanylo Vodopianov int shared; 104*c35c06fbSDanylo Vodopianov struct nt_mtr_profile *profile; 105*c35c06fbSDanylo Vodopianov }; 106*c35c06fbSDanylo Vodopianov 107c93ef6edSSerhii Iliushyk struct pmd_internals { 108c93ef6edSSerhii Iliushyk const struct rte_pci_device *pci_dev; 109b01eb812SDanylo Vodopianov struct flow_eth_dev *flw_dev; 110c93ef6edSSerhii Iliushyk char name[20]; 111c93ef6edSSerhii Iliushyk int n_intf_no; 1129147e9f9SSerhii Iliushyk int lpbk_mode; 1139147e9f9SSerhii Iliushyk unsigned int nb_rx_queues; 1149147e9f9SSerhii Iliushyk unsigned int nb_tx_queues; 1159147e9f9SSerhii Iliushyk /* Offset of the VF from the PF */ 1169147e9f9SSerhii Iliushyk uint8_t vf_offset; 117fe91ade9SDanylo Vodopianov uint32_t port; 118effa0469SDanylo Vodopianov uint32_t port_id; 1199147e9f9SSerhii Iliushyk nt_meta_port_type_t type; 120fe91ade9SDanylo Vodopianov struct flow_queue_id_s vpq[MAX_QUEUES]; 121fe91ade9SDanylo Vodopianov unsigned int vpq_nb_vq; 122fe91ade9SDanylo Vodopianov /* Array of Rx queues */ 123fe91ade9SDanylo Vodopianov struct ntnic_rx_queue rxq_scg[MAX_QUEUES]; 124fe91ade9SDanylo Vodopianov /* Array of Tx queues */ 125fe91ade9SDanylo Vodopianov struct ntnic_tx_queue txq_scg[MAX_QUEUES]; 126c93ef6edSSerhii Iliushyk struct drv_s *p_drv; 1279147e9f9SSerhii Iliushyk /* Ethernet (MAC) addresses. Element number zero denotes default address. */ 1289147e9f9SSerhii Iliushyk struct rte_ether_addr eth_addrs[NUM_MAC_ADDRS_PER_PORT]; 1299147e9f9SSerhii Iliushyk /* Multicast ethernet (MAC) addresses. */ 1309147e9f9SSerhii Iliushyk struct rte_ether_addr mc_addrs[NUM_MULTICAST_ADDRS_PER_PORT]; 131effa0469SDanylo Vodopianov uint64_t last_stat_rtc; 132effa0469SDanylo Vodopianov uint64_t rx_missed; 133c93ef6edSSerhii Iliushyk struct pmd_internals *next; 134c93ef6edSSerhii Iliushyk }; 135c93ef6edSSerhii Iliushyk 136c93ef6edSSerhii Iliushyk #endif /* __NTOS_DRV_H__ */ 137