1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2017 Intel Corporation 3 */ 4 5 #ifndef _RTE_ETHDEV_CORE_H_ 6 #define _RTE_ETHDEV_CORE_H_ 7 8 /** 9 * @file 10 * 11 * RTE Ethernet Device internal header. 12 * 13 * This header contains internal data types. But they are still part of the 14 * public API because they are used by inline functions in the published API. 15 * 16 * Applications should not use these directly. 17 */ 18 19 struct rte_eth_dev_callback; 20 /** @internal Structure to keep track of registered callbacks */ 21 RTE_TAILQ_HEAD(rte_eth_dev_cb_list, rte_eth_dev_callback); 22 23 struct rte_eth_dev; 24 25 /** 26 * @internal Retrieve input packets from a receive queue of an Ethernet device. 27 */ 28 typedef uint16_t (*eth_rx_burst_t)(void *rxq, 29 struct rte_mbuf **rx_pkts, 30 uint16_t nb_pkts); 31 32 /** 33 * @internal Send output packets on a transmit queue of an Ethernet device. 34 */ 35 typedef uint16_t (*eth_tx_burst_t)(void *txq, 36 struct rte_mbuf **tx_pkts, 37 uint16_t nb_pkts); 38 39 /** 40 * @internal Prepare output packets on a transmit queue of an Ethernet device. 41 */ 42 typedef uint16_t (*eth_tx_prep_t)(void *txq, 43 struct rte_mbuf **tx_pkts, 44 uint16_t nb_pkts); 45 46 47 /** @internal Get number of used descriptors on a receive queue. */ 48 typedef uint32_t (*eth_rx_queue_count_t)(void *rxq); 49 50 /** @internal Check the status of a Rx descriptor */ 51 typedef int (*eth_rx_descriptor_status_t)(void *rxq, uint16_t offset); 52 53 /** @internal Check the status of a Tx descriptor */ 54 typedef int (*eth_tx_descriptor_status_t)(void *txq, uint16_t offset); 55 56 /** @internal Copy used mbufs from Tx mbuf ring into Rx mbuf ring */ 57 typedef uint16_t (*eth_recycle_tx_mbufs_reuse_t)(void *txq, 58 struct rte_eth_recycle_rxq_info *recycle_rxq_info); 59 60 /** @internal Refill Rx descriptors with the recycling mbufs */ 61 typedef void (*eth_recycle_rx_descriptors_refill_t)(void *rxq, uint16_t nb); 62 63 /** 64 * @internal 65 * Structure used to hold opaque pointers to internal ethdev Rx/Tx 66 * queues data. 67 * The main purpose to expose these pointers at all - allow compiler 68 * to fetch this data for fast-path ethdev inline functions in advance. 69 */ 70 struct rte_ethdev_qdata { 71 /** points to array of internal queue data pointers */ 72 void **data; 73 /** points to array of queue callback data pointers */ 74 RTE_ATOMIC(void *) *clbk; 75 }; 76 77 /** 78 * @internal 79 * fast-path ethdev functions and related data are hold in a flat array. 80 * One entry per ethdev. 81 * On 64-bit systems contents of this structure occupy exactly two 64B lines. 82 * On 32-bit systems contents of this structure fits into one 64B line. 83 */ 84 struct rte_eth_fp_ops { 85 86 /**@{*/ 87 /** 88 * Rx fast-path functions and related data. 89 * 64-bit systems: occupies first 64B line 90 */ 91 /** Rx queues data. */ 92 struct rte_ethdev_qdata rxq; 93 /** PMD receive function. */ 94 eth_rx_burst_t rx_pkt_burst; 95 /** Get the number of used Rx descriptors. */ 96 eth_rx_queue_count_t rx_queue_count; 97 /** Check the status of a Rx descriptor. */ 98 eth_rx_descriptor_status_t rx_descriptor_status; 99 /** Refill Rx descriptors with the recycling mbufs. */ 100 eth_recycle_rx_descriptors_refill_t recycle_rx_descriptors_refill; 101 uintptr_t reserved1[2]; 102 /**@}*/ 103 104 /**@{*/ 105 /** 106 * Tx fast-path functions and related data. 107 * 64-bit systems: occupies second 64B line 108 */ 109 /** Tx queues data. */ 110 struct rte_ethdev_qdata txq; 111 /** PMD transmit function. */ 112 eth_tx_burst_t tx_pkt_burst; 113 /** PMD transmit prepare function. */ 114 eth_tx_prep_t tx_pkt_prepare; 115 /** Check the status of a Tx descriptor. */ 116 eth_tx_descriptor_status_t tx_descriptor_status; 117 /** Copy used mbufs from Tx mbuf ring into Rx. */ 118 eth_recycle_tx_mbufs_reuse_t recycle_tx_mbufs_reuse; 119 uintptr_t reserved2[2]; 120 /**@}*/ 121 122 } __rte_cache_aligned; 123 124 extern struct rte_eth_fp_ops rte_eth_fp_ops[RTE_MAX_ETHPORTS]; 125 126 #endif /* _RTE_ETHDEV_CORE_H_ */ 127