xref: /dpdk/drivers/net/ntnic/include/ntos_drv.h (revision c35c06fb4ac1aee609fbca05116655628a844172)
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