1aaf4363eSJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2aaf4363eSJerin Jacob * Copyright(c) 2017 Cavium, Inc 3f7be70e5SJerin Jacob */ 4aaf4363eSJerin Jacob 5f7be70e5SJerin Jacob #ifndef __OCTEONTX_ETHDEV_H__ 6f7be70e5SJerin Jacob #define __OCTEONTX_ETHDEV_H__ 7f7be70e5SJerin Jacob 8f7be70e5SJerin Jacob #include <stdbool.h> 9f7be70e5SJerin Jacob 10f7be70e5SJerin Jacob #include <rte_common.h> 11ffc905f3SFerruh Yigit #include <rte_ethdev_driver.h> 12f7be70e5SJerin Jacob #include <rte_eventdev.h> 13f7be70e5SJerin Jacob #include <rte_mempool.h> 14f7be70e5SJerin Jacob #include <rte_memory.h> 15f7be70e5SJerin Jacob 16f7be70e5SJerin Jacob #include <octeontx_fpavf.h> 17f7be70e5SJerin Jacob 18f7be70e5SJerin Jacob #include "base/octeontx_bgx.h" 19f7be70e5SJerin Jacob #include "base/octeontx_pki_var.h" 20f7be70e5SJerin Jacob #include "base/octeontx_pkivf.h" 21f7be70e5SJerin Jacob #include "base/octeontx_pkovf.h" 22f7be70e5SJerin Jacob #include "base/octeontx_io.h" 23f7be70e5SJerin Jacob 24b4ec00a2SStephen Hemminger #define OCTEONTX_PMD net_octeontx 25f7be70e5SJerin Jacob #define OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT 12 26f7be70e5SJerin Jacob #define OCTEONTX_VDEV_NR_PORT_ARG ("nr_port") 27f7be70e5SJerin Jacob #define OCTEONTX_MAX_NAME_LEN 32 28f7be70e5SJerin Jacob 29989d4926SPavan Nikhilesh #define OCTEONTX_MAX_BGX_PORTS 4 30989d4926SPavan Nikhilesh #define OCTEONTX_MAX_LMAC_PER_BGX 4 31989d4926SPavan Nikhilesh 32*3151e6a6SHarman Kalra #define OCCTX_RX_NB_SEG_MAX 6 33*3151e6a6SHarman Kalra 34*3151e6a6SHarman Kalra /* VLAN tag inserted by OCCTX_TX_VTAG_ACTION. 35*3151e6a6SHarman Kalra * In Tx space is always reserved for this in FRS. 36*3151e6a6SHarman Kalra */ 37*3151e6a6SHarman Kalra #define OCCTX_MAX_VTAG_INS 2 38*3151e6a6SHarman Kalra #define OCCTX_MAX_VTAG_ACT_SIZE (4 * OCCTX_MAX_VTAG_INS) 39*3151e6a6SHarman Kalra 40*3151e6a6SHarman Kalra /* HW config of frame size doesn't include FCS */ 41*3151e6a6SHarman Kalra #define OCCTX_MAX_HW_FRS 9212 42*3151e6a6SHarman Kalra #define OCCTX_MIN_HW_FRS 60 43*3151e6a6SHarman Kalra 44*3151e6a6SHarman Kalra /* ETH_HLEN+ETH_FCS+2*VLAN_HLEN */ 45*3151e6a6SHarman Kalra #define OCCTX_L2_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + \ 46*3151e6a6SHarman Kalra OCCTX_MAX_VTAG_ACT_SIZE) 47*3151e6a6SHarman Kalra 48*3151e6a6SHarman Kalra /* Since HW FRS includes NPC VTAG insertion space, user has reduced FRS */ 49*3151e6a6SHarman Kalra #define OCCTX_MAX_FRS \ 50*3151e6a6SHarman Kalra (OCCTX_MAX_HW_FRS + RTE_ETHER_CRC_LEN - OCCTX_MAX_VTAG_ACT_SIZE) 51*3151e6a6SHarman Kalra 52*3151e6a6SHarman Kalra #define OCCTX_MIN_FRS (OCCTX_MIN_HW_FRS + RTE_ETHER_CRC_LEN) 53*3151e6a6SHarman Kalra 54*3151e6a6SHarman Kalra #define OCCTX_MAX_MTU (OCCTX_MAX_FRS - OCCTX_L2_OVERHEAD) 55*3151e6a6SHarman Kalra 5685221a0cSHarman Kalra #define OCTEONTX_RX_OFFLOADS (DEV_RX_OFFLOAD_CHECKSUM | \ 5785221a0cSHarman Kalra DEV_RX_OFFLOAD_SCATTER | \ 5885221a0cSHarman Kalra DEV_RX_OFFLOAD_JUMBO_FRAME) 5985221a0cSHarman Kalra 6085221a0cSHarman Kalra #define OCTEONTX_TX_OFFLOADS (DEV_TX_OFFLOAD_MT_LOCKFREE | \ 615cbe1848SHarman Kalra DEV_TX_OFFLOAD_MBUF_FAST_FREE | \ 6285221a0cSHarman Kalra DEV_TX_OFFLOAD_MULTI_SEGS) 63a9287089SPavan Nikhilesh 64f7be70e5SJerin Jacob static inline struct octeontx_nic * 65f7be70e5SJerin Jacob octeontx_pmd_priv(struct rte_eth_dev *dev) 66f7be70e5SJerin Jacob { 67f7be70e5SJerin Jacob return dev->data->dev_private; 68f7be70e5SJerin Jacob } 69f7be70e5SJerin Jacob 70989d4926SPavan Nikhilesh extern uint16_t 71989d4926SPavan Nikhilesh rte_octeontx_pchan_map[OCTEONTX_MAX_BGX_PORTS][OCTEONTX_MAX_LMAC_PER_BGX]; 72989d4926SPavan Nikhilesh 73f7be70e5SJerin Jacob /* Octeontx ethdev nic */ 74f7be70e5SJerin Jacob struct octeontx_nic { 75f7be70e5SJerin Jacob struct rte_eth_dev *dev; 76f7be70e5SJerin Jacob int node; 77f7be70e5SJerin Jacob int port_id; 78f7be70e5SJerin Jacob int port_ena; 79f7be70e5SJerin Jacob int base_ichan; 80f7be70e5SJerin Jacob int num_ichans; 81f7be70e5SJerin Jacob int base_ochan; 82f7be70e5SJerin Jacob int num_ochans; 83f7be70e5SJerin Jacob uint8_t evdev; 84f7be70e5SJerin Jacob uint8_t bpen; 85f7be70e5SJerin Jacob uint8_t fcs_strip; 86f7be70e5SJerin Jacob uint8_t bcast_mode; 87f7be70e5SJerin Jacob uint8_t mcast_mode; 88f7be70e5SJerin Jacob uint16_t num_tx_queues; 89f7be70e5SJerin Jacob uint64_t hwcap; 90a6d6f0afSPavan Nikhilesh uint8_t pko_vfid; 91f7be70e5SJerin Jacob uint8_t link_up; 92f7be70e5SJerin Jacob uint8_t duplex; 93f7be70e5SJerin Jacob uint8_t speed; 94*3151e6a6SHarman Kalra uint16_t bgx_mtu; 95f7be70e5SJerin Jacob uint16_t mtu; 9635b2d13fSOlivier Matz uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; 97f7be70e5SJerin Jacob /* Rx port parameters */ 98f7be70e5SJerin Jacob struct { 99f7be70e5SJerin Jacob bool classifier_enable; 100f7be70e5SJerin Jacob bool hash_enable; 101f7be70e5SJerin Jacob bool initialized; 102f7be70e5SJerin Jacob } pki; 103f7be70e5SJerin Jacob 104f7be70e5SJerin Jacob uint16_t ev_queues; 105f7be70e5SJerin Jacob uint16_t ev_ports; 10685221a0cSHarman Kalra uint64_t rx_offloads; 10785221a0cSHarman Kalra uint16_t rx_offload_flags; 10885221a0cSHarman Kalra uint64_t tx_offloads; 10985221a0cSHarman Kalra uint16_t tx_offload_flags; 110f7be70e5SJerin Jacob } __rte_cache_aligned; 111f7be70e5SJerin Jacob 1127fe7c98fSJerin Jacob struct octeontx_txq { 1137fe7c98fSJerin Jacob uint16_t queue_id; 1147fe7c98fSJerin Jacob octeontx_dq_t dq; 1157fe7c98fSJerin Jacob struct rte_eth_dev *eth_dev; 1167fe7c98fSJerin Jacob } __rte_cache_aligned; 1177fe7c98fSJerin Jacob 118197438eeSJerin Jacob struct octeontx_rxq { 119197438eeSJerin Jacob uint16_t queue_id; 120197438eeSJerin Jacob uint16_t port_id; 121197438eeSJerin Jacob uint8_t evdev; 122197438eeSJerin Jacob struct rte_eth_dev *eth_dev; 123197438eeSJerin Jacob uint16_t ev_queues; 124197438eeSJerin Jacob uint16_t ev_ports; 12585221a0cSHarman Kalra struct rte_mempool *pool; 126197438eeSJerin Jacob } __rte_cache_aligned; 127197438eeSJerin Jacob 1287f4116bdSHarman Kalra void 1297f4116bdSHarman Kalra octeontx_set_tx_function(struct rte_eth_dev *dev); 130f7be70e5SJerin Jacob #endif /* __OCTEONTX_ETHDEV_H__ */ 131