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