xref: /dpdk/drivers/net/octeontx/octeontx_ethdev.h (revision 85221a0c7c28e10e6b31504448c37134e8facd55)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Cavium, Inc
3  */
4 
5 #ifndef	__OCTEONTX_ETHDEV_H__
6 #define	__OCTEONTX_ETHDEV_H__
7 
8 #include <stdbool.h>
9 
10 #include <rte_common.h>
11 #include <rte_ethdev_driver.h>
12 #include <rte_eventdev.h>
13 #include <rte_mempool.h>
14 #include <rte_memory.h>
15 
16 #include <octeontx_fpavf.h>
17 
18 #include "base/octeontx_bgx.h"
19 #include "base/octeontx_pki_var.h"
20 #include "base/octeontx_pkivf.h"
21 #include "base/octeontx_pkovf.h"
22 #include "base/octeontx_io.h"
23 
24 #define OCTEONTX_PMD				net_octeontx
25 #define OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT	12
26 #define OCTEONTX_VDEV_NR_PORT_ARG		("nr_port")
27 #define OCTEONTX_MAX_NAME_LEN			32
28 
29 #define OCTEONTX_MAX_BGX_PORTS			4
30 #define OCTEONTX_MAX_LMAC_PER_BGX		4
31 
32 #define OCTEONTX_RX_OFFLOADS			(DEV_RX_OFFLOAD_CHECKSUM     | \
33 						 DEV_RX_OFFLOAD_SCATTER	     | \
34 						 DEV_RX_OFFLOAD_JUMBO_FRAME)
35 
36 #define OCTEONTX_TX_OFFLOADS			(DEV_TX_OFFLOAD_MT_LOCKFREE  | \
37 						 DEV_TX_OFFLOAD_MULTI_SEGS)
38 
39 static inline struct octeontx_nic *
40 octeontx_pmd_priv(struct rte_eth_dev *dev)
41 {
42 	return dev->data->dev_private;
43 }
44 
45 extern uint16_t
46 rte_octeontx_pchan_map[OCTEONTX_MAX_BGX_PORTS][OCTEONTX_MAX_LMAC_PER_BGX];
47 
48 /* Octeontx ethdev nic */
49 struct octeontx_nic {
50 	struct rte_eth_dev *dev;
51 	int node;
52 	int port_id;
53 	int port_ena;
54 	int base_ichan;
55 	int num_ichans;
56 	int base_ochan;
57 	int num_ochans;
58 	uint8_t evdev;
59 	uint8_t bpen;
60 	uint8_t fcs_strip;
61 	uint8_t bcast_mode;
62 	uint8_t mcast_mode;
63 	uint16_t num_tx_queues;
64 	uint64_t hwcap;
65 	uint8_t pko_vfid;
66 	uint8_t link_up;
67 	uint8_t	duplex;
68 	uint8_t speed;
69 	uint16_t mtu;
70 	uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
71 	/* Rx port parameters */
72 	struct {
73 		bool classifier_enable;
74 		bool hash_enable;
75 		bool initialized;
76 	} pki;
77 
78 	uint16_t ev_queues;
79 	uint16_t ev_ports;
80 	uint64_t rx_offloads;
81 	uint16_t rx_offload_flags;
82 	uint64_t tx_offloads;
83 	uint16_t tx_offload_flags;
84 } __rte_cache_aligned;
85 
86 struct octeontx_txq {
87 	uint16_t queue_id;
88 	octeontx_dq_t dq;
89 	struct rte_eth_dev *eth_dev;
90 } __rte_cache_aligned;
91 
92 struct octeontx_rxq {
93 	uint16_t queue_id;
94 	uint16_t port_id;
95 	uint8_t evdev;
96 	struct rte_eth_dev *eth_dev;
97 	uint16_t ev_queues;
98 	uint16_t ev_ports;
99 	struct rte_mempool *pool;
100 } __rte_cache_aligned;
101 
102 #endif /* __OCTEONTX_ETHDEV_H__ */
103