xref: /dpdk/drivers/net/octeontx/octeontx_ethdev.h (revision a92870896b4a133b51fd476d748fed95911bfa6b)
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_VDEV_DEFAULT_MAX_NR_PORT	12
25 #define OCTEONTX_VDEV_NR_PORT_ARG		("nr_port")
26 #define OCTEONTX_MAX_NAME_LEN			32
27 
28 #define OCTEONTX_MAX_BGX_PORTS			4
29 #define OCTEONTX_MAX_LMAC_PER_BGX		4
30 
31 #define OCTEONTX_RX_OFFLOADS			DEV_RX_OFFLOAD_CRC_STRIP
32 #define OCTEONTX_TX_OFFLOADS			DEV_TX_OFFLOAD_MT_LOCKFREE
33 
34 static inline struct octeontx_nic *
35 octeontx_pmd_priv(struct rte_eth_dev *dev)
36 {
37 	return dev->data->dev_private;
38 }
39 
40 extern uint16_t
41 rte_octeontx_pchan_map[OCTEONTX_MAX_BGX_PORTS][OCTEONTX_MAX_LMAC_PER_BGX];
42 
43 /* Octeontx ethdev nic */
44 struct octeontx_nic {
45 	struct rte_eth_dev *dev;
46 	int node;
47 	int port_id;
48 	int port_ena;
49 	int base_ichan;
50 	int num_ichans;
51 	int base_ochan;
52 	int num_ochans;
53 	uint8_t evdev;
54 	uint8_t bpen;
55 	uint8_t fcs_strip;
56 	uint8_t bcast_mode;
57 	uint8_t mcast_mode;
58 	uint16_t num_tx_queues;
59 	uint64_t hwcap;
60 	uint8_t link_up;
61 	uint8_t	duplex;
62 	uint8_t speed;
63 	uint16_t mtu;
64 	uint8_t mac_addr[ETHER_ADDR_LEN];
65 	/* Rx port parameters */
66 	struct {
67 		bool classifier_enable;
68 		bool hash_enable;
69 		bool initialized;
70 	} pki;
71 
72 	uint16_t ev_queues;
73 	uint16_t ev_ports;
74 } __rte_cache_aligned;
75 
76 struct octeontx_txq {
77 	uint16_t queue_id;
78 	octeontx_dq_t dq;
79 	struct rte_eth_dev *eth_dev;
80 } __rte_cache_aligned;
81 
82 struct octeontx_rxq {
83 	uint16_t queue_id;
84 	uint16_t port_id;
85 	uint8_t evdev;
86 	struct rte_eth_dev *eth_dev;
87 	uint16_t ev_queues;
88 	uint16_t ev_ports;
89 } __rte_cache_aligned;
90 
91 #endif /* __OCTEONTX_ETHDEV_H__ */
92