199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 299a2dd95SBruce Richardson * Copyright(c) 2017 Intel Corporation 399a2dd95SBruce Richardson */ 499a2dd95SBruce Richardson 599a2dd95SBruce Richardson #ifndef _RTE_ETHDEV_CORE_H_ 699a2dd95SBruce Richardson #define _RTE_ETHDEV_CORE_H_ 799a2dd95SBruce Richardson 899a2dd95SBruce Richardson #include <pthread.h> 999a2dd95SBruce Richardson 1099a2dd95SBruce Richardson /** 1199a2dd95SBruce Richardson * @file 1299a2dd95SBruce Richardson * 1399a2dd95SBruce Richardson * RTE Ethernet Device internal header. 1499a2dd95SBruce Richardson * 1599a2dd95SBruce Richardson * This header contains internal data types. But they are still part of the 1699a2dd95SBruce Richardson * public API because they are used by inline functions in the published API. 1799a2dd95SBruce Richardson * 1899a2dd95SBruce Richardson * Applications should not use these directly. 1999a2dd95SBruce Richardson * 2099a2dd95SBruce Richardson */ 2199a2dd95SBruce Richardson 2299a2dd95SBruce Richardson struct rte_eth_dev_callback; 2399a2dd95SBruce Richardson /** @internal Structure to keep track of registered callbacks */ 24f1f6ebc0SWilliam Tu RTE_TAILQ_HEAD(rte_eth_dev_cb_list, rte_eth_dev_callback); 2599a2dd95SBruce Richardson 2699a2dd95SBruce Richardson struct rte_eth_dev; 2799a2dd95SBruce Richardson 283c2ca0a9SAndrew Rybchenko /** 293c2ca0a9SAndrew Rybchenko * @internal Retrieve input packets from a receive queue of an Ethernet device. 303c2ca0a9SAndrew Rybchenko */ 3199a2dd95SBruce Richardson typedef uint16_t (*eth_rx_burst_t)(void *rxq, 3299a2dd95SBruce Richardson struct rte_mbuf **rx_pkts, 3399a2dd95SBruce Richardson uint16_t nb_pkts); 3499a2dd95SBruce Richardson 353c2ca0a9SAndrew Rybchenko /** 363c2ca0a9SAndrew Rybchenko * @internal Send output packets on a transmit queue of an Ethernet device. 373c2ca0a9SAndrew Rybchenko */ 3899a2dd95SBruce Richardson typedef uint16_t (*eth_tx_burst_t)(void *txq, 3999a2dd95SBruce Richardson struct rte_mbuf **tx_pkts, 4099a2dd95SBruce Richardson uint16_t nb_pkts); 4199a2dd95SBruce Richardson 423c2ca0a9SAndrew Rybchenko /** 433c2ca0a9SAndrew Rybchenko * @internal Prepare output packets on a transmit queue of an Ethernet device. 443c2ca0a9SAndrew Rybchenko */ 4599a2dd95SBruce Richardson typedef uint16_t (*eth_tx_prep_t)(void *txq, 4699a2dd95SBruce Richardson struct rte_mbuf **tx_pkts, 4799a2dd95SBruce Richardson uint16_t nb_pkts); 4899a2dd95SBruce Richardson 4999a2dd95SBruce Richardson 503c2ca0a9SAndrew Rybchenko /** @internal Get number of used descriptors on a receive queue. */ 518d7d4fcdSKonstantin Ananyev typedef uint32_t (*eth_rx_queue_count_t)(void *rxq); 5299a2dd95SBruce Richardson 533c2ca0a9SAndrew Rybchenko /** @internal Check the status of a Rx descriptor */ 5499a2dd95SBruce Richardson typedef int (*eth_rx_descriptor_status_t)(void *rxq, uint16_t offset); 5599a2dd95SBruce Richardson 563c2ca0a9SAndrew Rybchenko /** @internal Check the status of a Tx descriptor */ 5799a2dd95SBruce Richardson typedef int (*eth_tx_descriptor_status_t)(void *txq, uint16_t offset); 5899a2dd95SBruce Richardson 59c87d435aSKonstantin Ananyev /** 60c87d435aSKonstantin Ananyev * @internal 61c87d435aSKonstantin Ananyev * Structure used to hold opaque pointers to internal ethdev Rx/Tx 62c87d435aSKonstantin Ananyev * queues data. 63c87d435aSKonstantin Ananyev * The main purpose to expose these pointers at all - allow compiler 64c87d435aSKonstantin Ananyev * to fetch this data for fast-path ethdev inline functions in advance. 65c87d435aSKonstantin Ananyev */ 66c87d435aSKonstantin Ananyev struct rte_ethdev_qdata { 67c87d435aSKonstantin Ananyev /** points to array of internal queue data pointers */ 68c87d435aSKonstantin Ananyev void **data; 69c87d435aSKonstantin Ananyev /** points to array of queue callback data pointers */ 70c87d435aSKonstantin Ananyev void **clbk; 71c87d435aSKonstantin Ananyev }; 72c87d435aSKonstantin Ananyev 73c87d435aSKonstantin Ananyev /** 74c87d435aSKonstantin Ananyev * @internal 75c87d435aSKonstantin Ananyev * fast-path ethdev functions and related data are hold in a flat array. 76c87d435aSKonstantin Ananyev * One entry per ethdev. 77c87d435aSKonstantin Ananyev * On 64-bit systems contents of this structure occupy exactly two 64B lines. 78c87d435aSKonstantin Ananyev * On 32-bit systems contents of this structure fits into one 64B line. 79c87d435aSKonstantin Ananyev */ 80c87d435aSKonstantin Ananyev struct rte_eth_fp_ops { 81c87d435aSKonstantin Ananyev 82c87d435aSKonstantin Ananyev /**@{*/ 83c87d435aSKonstantin Ananyev /** 84c87d435aSKonstantin Ananyev * Rx fast-path functions and related data. 85c87d435aSKonstantin Ananyev * 64-bit systems: occupies first 64B line 86c87d435aSKonstantin Ananyev */ 87c87d435aSKonstantin Ananyev /** PMD receive function. */ 88c87d435aSKonstantin Ananyev eth_rx_burst_t rx_pkt_burst; 89*09fd4227SAndrew Rybchenko /** Get the number of used Rx descriptors. */ 90c87d435aSKonstantin Ananyev eth_rx_queue_count_t rx_queue_count; 91c87d435aSKonstantin Ananyev /** Check the status of a Rx descriptor. */ 92c87d435aSKonstantin Ananyev eth_rx_descriptor_status_t rx_descriptor_status; 93c87d435aSKonstantin Ananyev /** Rx queues data. */ 94c87d435aSKonstantin Ananyev struct rte_ethdev_qdata rxq; 95c87d435aSKonstantin Ananyev uintptr_t reserved1[3]; 96c87d435aSKonstantin Ananyev /**@}*/ 97c87d435aSKonstantin Ananyev 98c87d435aSKonstantin Ananyev /**@{*/ 99c87d435aSKonstantin Ananyev /** 100c87d435aSKonstantin Ananyev * Tx fast-path functions and related data. 101c87d435aSKonstantin Ananyev * 64-bit systems: occupies second 64B line 102c87d435aSKonstantin Ananyev */ 103c87d435aSKonstantin Ananyev /** PMD transmit function. */ 104c87d435aSKonstantin Ananyev eth_tx_burst_t tx_pkt_burst; 105c87d435aSKonstantin Ananyev /** PMD transmit prepare function. */ 106c87d435aSKonstantin Ananyev eth_tx_prep_t tx_pkt_prepare; 107c87d435aSKonstantin Ananyev /** Check the status of a Tx descriptor. */ 108c87d435aSKonstantin Ananyev eth_tx_descriptor_status_t tx_descriptor_status; 109c87d435aSKonstantin Ananyev /** Tx queues data. */ 110c87d435aSKonstantin Ananyev struct rte_ethdev_qdata txq; 111c87d435aSKonstantin Ananyev uintptr_t reserved2[3]; 112c87d435aSKonstantin Ananyev /**@}*/ 113c87d435aSKonstantin Ananyev 114c87d435aSKonstantin Ananyev } __rte_cache_aligned; 115c87d435aSKonstantin Ananyev 116c87d435aSKonstantin Ananyev extern struct rte_eth_fp_ops rte_eth_fp_ops[RTE_MAX_ETHPORTS]; 117c87d435aSKonstantin Ananyev 11899a2dd95SBruce Richardson #endif /* _RTE_ETHDEV_CORE_H_ */ 119