net/octeontx: support fast mbuf free
[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_MBUF_FAST_FREE |  \
38                                          DEV_TX_OFFLOAD_MULTI_SEGS)
39
40 static inline struct octeontx_nic *
41 octeontx_pmd_priv(struct rte_eth_dev *dev)
42 {
43         return dev->data->dev_private;
44 }
45
46 extern uint16_t
47 rte_octeontx_pchan_map[OCTEONTX_MAX_BGX_PORTS][OCTEONTX_MAX_LMAC_PER_BGX];
48
49 /* Octeontx ethdev nic */
50 struct octeontx_nic {
51         struct rte_eth_dev *dev;
52         int node;
53         int port_id;
54         int port_ena;
55         int base_ichan;
56         int num_ichans;
57         int base_ochan;
58         int num_ochans;
59         uint8_t evdev;
60         uint8_t bpen;
61         uint8_t fcs_strip;
62         uint8_t bcast_mode;
63         uint8_t mcast_mode;
64         uint16_t num_tx_queues;
65         uint64_t hwcap;
66         uint8_t pko_vfid;
67         uint8_t link_up;
68         uint8_t duplex;
69         uint8_t speed;
70         uint16_t mtu;
71         uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
72         /* Rx port parameters */
73         struct {
74                 bool classifier_enable;
75                 bool hash_enable;
76                 bool initialized;
77         } pki;
78
79         uint16_t ev_queues;
80         uint16_t ev_ports;
81         uint64_t rx_offloads;
82         uint16_t rx_offload_flags;
83         uint64_t tx_offloads;
84         uint16_t tx_offload_flags;
85 } __rte_cache_aligned;
86
87 struct octeontx_txq {
88         uint16_t queue_id;
89         octeontx_dq_t dq;
90         struct rte_eth_dev *eth_dev;
91 } __rte_cache_aligned;
92
93 struct octeontx_rxq {
94         uint16_t queue_id;
95         uint16_t port_id;
96         uint8_t evdev;
97         struct rte_eth_dev *eth_dev;
98         uint16_t ev_queues;
99         uint16_t ev_ports;
100         struct rte_mempool *pool;
101 } __rte_cache_aligned;
102
103 void
104 octeontx_set_tx_function(struct rte_eth_dev *dev);
105 #endif /* __OCTEONTX_ETHDEV_H__ */