10da6a2a0205d66bc631f70acdad5efc11386345
[dpdk.git] / drivers / net / octeontx / octeontx_ethdev.h
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__ */