xref: /dpdk/lib/ethdev/rte_ethdev_core.h (revision 09fd4227)
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