xref: /dpdk/lib/eventdev/eventdev_pmd.h (revision 44516e6b38d9f00f445a751193f1df84de3b9929)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(c) 2016 Cavium, Inc
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef _RTE_EVENTDEV_PMD_H_
699a2dd95SBruce Richardson #define _RTE_EVENTDEV_PMD_H_
799a2dd95SBruce Richardson 
82c552933SBrian Dooley #ifdef __cplusplus
92c552933SBrian Dooley extern "C" {
102c552933SBrian Dooley #endif
112c552933SBrian Dooley 
1299a2dd95SBruce Richardson /** @file
1399a2dd95SBruce Richardson  * RTE Event PMD APIs
1499a2dd95SBruce Richardson  *
1599a2dd95SBruce Richardson  * @note
1699a2dd95SBruce Richardson  * These API are from event PMD only and user applications should not call
1799a2dd95SBruce Richardson  * them directly.
1899a2dd95SBruce Richardson  */
1999a2dd95SBruce Richardson 
2099a2dd95SBruce Richardson #include <string.h>
2199a2dd95SBruce Richardson 
2299a2dd95SBruce Richardson #include <rte_common.h>
2399a2dd95SBruce Richardson #include <rte_compat.h>
2499a2dd95SBruce Richardson #include <rte_config.h>
2599a2dd95SBruce Richardson #include <rte_dev.h>
2699a2dd95SBruce Richardson #include <rte_log.h>
2799a2dd95SBruce Richardson #include <rte_malloc.h>
2899a2dd95SBruce Richardson #include <rte_mbuf.h>
2999a2dd95SBruce Richardson #include <rte_mbuf_dyn.h>
3099a2dd95SBruce Richardson 
3153548ad3SPavan Nikhilesh #include "event_timer_adapter_pmd.h"
3299a2dd95SBruce Richardson #include "rte_eventdev.h"
3399a2dd95SBruce Richardson 
3499a2dd95SBruce Richardson /* Logging Macros */
3599a2dd95SBruce Richardson #define RTE_EDEV_LOG_ERR(...) \
3699a2dd95SBruce Richardson 	RTE_LOG(ERR, EVENTDEV, \
3799a2dd95SBruce Richardson 		RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
3899a2dd95SBruce Richardson 			__func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
3999a2dd95SBruce Richardson 
4099a2dd95SBruce Richardson #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
4199a2dd95SBruce Richardson #define RTE_EDEV_LOG_DEBUG(...) \
4299a2dd95SBruce Richardson 	RTE_LOG(DEBUG, EVENTDEV, \
4399a2dd95SBruce Richardson 		RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
4499a2dd95SBruce Richardson 			__func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
4599a2dd95SBruce Richardson #else
4699a2dd95SBruce Richardson #define RTE_EDEV_LOG_DEBUG(...) (void)0
4799a2dd95SBruce Richardson #endif
4899a2dd95SBruce Richardson 
4999a2dd95SBruce Richardson /* Macros to check for valid device */
5099a2dd95SBruce Richardson #define RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, retval) do { \
5199a2dd95SBruce Richardson 	if (!rte_event_pmd_is_valid_dev((dev_id))) { \
5299a2dd95SBruce Richardson 		RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
5399a2dd95SBruce Richardson 		return retval; \
5499a2dd95SBruce Richardson 	} \
5599a2dd95SBruce Richardson } while (0)
5699a2dd95SBruce Richardson 
5799a2dd95SBruce Richardson #define RTE_EVENTDEV_VALID_DEVID_OR_ERRNO_RET(dev_id, errno, retval) do { \
5899a2dd95SBruce Richardson 	if (!rte_event_pmd_is_valid_dev((dev_id))) { \
5999a2dd95SBruce Richardson 		RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
6099a2dd95SBruce Richardson 		rte_errno = errno; \
6199a2dd95SBruce Richardson 		return retval; \
6299a2dd95SBruce Richardson 	} \
6399a2dd95SBruce Richardson } while (0)
6499a2dd95SBruce Richardson 
6599a2dd95SBruce Richardson #define RTE_EVENTDEV_VALID_DEVID_OR_RET(dev_id) do { \
6699a2dd95SBruce Richardson 	if (!rte_event_pmd_is_valid_dev((dev_id))) { \
6799a2dd95SBruce Richardson 		RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
6899a2dd95SBruce Richardson 		return; \
6999a2dd95SBruce Richardson 	} \
7099a2dd95SBruce Richardson } while (0)
7199a2dd95SBruce Richardson 
7299a2dd95SBruce Richardson #define RTE_EVENT_ETH_RX_ADAPTER_SW_CAP                                        \
7399a2dd95SBruce Richardson 	((RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) |                     \
7499a2dd95SBruce Richardson 	 (RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ) |                         \
7599a2dd95SBruce Richardson 	 (RTE_EVENT_ETH_RX_ADAPTER_CAP_EVENT_VECTOR))
7699a2dd95SBruce Richardson 
7799a2dd95SBruce Richardson #define RTE_EVENT_CRYPTO_ADAPTER_SW_CAP \
7899a2dd95SBruce Richardson 		RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA
7999a2dd95SBruce Richardson 
8099a2dd95SBruce Richardson /**< Ethernet Rx adapter cap to return If the packet transfers from
8199a2dd95SBruce Richardson  * the ethdev to eventdev use a SW service function
8299a2dd95SBruce Richardson  */
8399a2dd95SBruce Richardson 
8499a2dd95SBruce Richardson #define RTE_EVENTDEV_DETACHED  (0)
8599a2dd95SBruce Richardson #define RTE_EVENTDEV_ATTACHED  (1)
8699a2dd95SBruce Richardson 
87295c053fSPavan Nikhilesh #define RTE_EVENTDEV_NAME_MAX_LEN (64)
88295c053fSPavan Nikhilesh /**< @internal Max length of name of event PMD */
89295c053fSPavan Nikhilesh 
9099a2dd95SBruce Richardson struct rte_eth_dev;
9199a2dd95SBruce Richardson 
9299a2dd95SBruce Richardson /** Global structure used for maintaining state of allocated event devices */
9399a2dd95SBruce Richardson struct rte_eventdev_global {
9499a2dd95SBruce Richardson 	uint8_t nb_devs;	/**< Number of devices found */
9599a2dd95SBruce Richardson };
9699a2dd95SBruce Richardson 
9799a2dd95SBruce Richardson /**
98295c053fSPavan Nikhilesh  * @internal
99295c053fSPavan Nikhilesh  * The data part, with no function pointers, associated with each device.
100295c053fSPavan Nikhilesh  *
101295c053fSPavan Nikhilesh  * This structure is safe to place in shared memory to be common among
102295c053fSPavan Nikhilesh  * different processes in a multi-process configuration.
103295c053fSPavan Nikhilesh  */
104295c053fSPavan Nikhilesh struct rte_eventdev_data {
105295c053fSPavan Nikhilesh 	int socket_id;
106295c053fSPavan Nikhilesh 	/**< Socket ID where memory is allocated */
107295c053fSPavan Nikhilesh 	uint8_t dev_id;
108295c053fSPavan Nikhilesh 	/**< Device ID for this instance */
109295c053fSPavan Nikhilesh 	uint8_t nb_queues;
110295c053fSPavan Nikhilesh 	/**< Number of event queues. */
111295c053fSPavan Nikhilesh 	uint8_t nb_ports;
112295c053fSPavan Nikhilesh 	/**< Number of event ports. */
113295c053fSPavan Nikhilesh 	void *ports[RTE_EVENT_MAX_PORTS_PER_DEV];
114295c053fSPavan Nikhilesh 	/**< Array of pointers to ports. */
115295c053fSPavan Nikhilesh 	struct rte_event_port_conf ports_cfg[RTE_EVENT_MAX_PORTS_PER_DEV];
116295c053fSPavan Nikhilesh 	/**< Array of port configuration structures. */
117295c053fSPavan Nikhilesh 	struct rte_event_queue_conf queues_cfg[RTE_EVENT_MAX_QUEUES_PER_DEV];
118295c053fSPavan Nikhilesh 	/**< Array of queue configuration structures. */
119295c053fSPavan Nikhilesh 	uint16_t links_map[RTE_EVENT_MAX_PORTS_PER_DEV *
120295c053fSPavan Nikhilesh 			   RTE_EVENT_MAX_QUEUES_PER_DEV];
121295c053fSPavan Nikhilesh 	/**< Memory to store queues to port connections. */
122295c053fSPavan Nikhilesh 	void *dev_private;
123295c053fSPavan Nikhilesh 	/**< PMD-specific private data */
124295c053fSPavan Nikhilesh 	uint32_t event_dev_cap;
125295c053fSPavan Nikhilesh 	/**< Event device capabilities(RTE_EVENT_DEV_CAP_)*/
126295c053fSPavan Nikhilesh 	struct rte_event_dev_config dev_conf;
127295c053fSPavan Nikhilesh 	/**< Configuration applied to device. */
128295c053fSPavan Nikhilesh 	uint8_t service_inited;
129295c053fSPavan Nikhilesh 	/* Service initialization state */
130295c053fSPavan Nikhilesh 	uint32_t service_id;
131295c053fSPavan Nikhilesh 	/* Service ID*/
132295c053fSPavan Nikhilesh 	void *dev_stop_flush_arg;
133295c053fSPavan Nikhilesh 	/**< User-provided argument for event flush function */
134295c053fSPavan Nikhilesh 
135295c053fSPavan Nikhilesh 	RTE_STD_C11
136295c053fSPavan Nikhilesh 	uint8_t dev_started : 1;
137295c053fSPavan Nikhilesh 	/**< Device state: STARTED(1)/STOPPED(0) */
138295c053fSPavan Nikhilesh 
139295c053fSPavan Nikhilesh 	char name[RTE_EVENTDEV_NAME_MAX_LEN];
140295c053fSPavan Nikhilesh 	/**< Unique identifier name */
141295c053fSPavan Nikhilesh 
142295c053fSPavan Nikhilesh 	uint64_t reserved_64s[4]; /**< Reserved for future fields */
143295c053fSPavan Nikhilesh 	void *reserved_ptrs[4];	  /**< Reserved for future fields */
144295c053fSPavan Nikhilesh } __rte_cache_aligned;
145295c053fSPavan Nikhilesh 
146295c053fSPavan Nikhilesh /** @internal The data structure associated with each event device. */
147295c053fSPavan Nikhilesh struct rte_eventdev {
148295c053fSPavan Nikhilesh 	struct rte_eventdev_data *data;
149295c053fSPavan Nikhilesh 	/**< Pointer to device data */
150295c053fSPavan Nikhilesh 	struct eventdev_ops *dev_ops;
151295c053fSPavan Nikhilesh 	/**< Functions exported by PMD */
152295c053fSPavan Nikhilesh 	struct rte_device *dev;
153295c053fSPavan Nikhilesh 	/**< Device info. supplied by probing */
154295c053fSPavan Nikhilesh 
155295c053fSPavan Nikhilesh 	RTE_STD_C11
156295c053fSPavan Nikhilesh 	uint8_t attached : 1;
157295c053fSPavan Nikhilesh 	/**< Flag indicating the device is attached */
158295c053fSPavan Nikhilesh 
159295c053fSPavan Nikhilesh 	event_enqueue_t enqueue;
160295c053fSPavan Nikhilesh 	/**< Pointer to PMD enqueue function. */
161295c053fSPavan Nikhilesh 	event_enqueue_burst_t enqueue_burst;
162295c053fSPavan Nikhilesh 	/**< Pointer to PMD enqueue burst function. */
163295c053fSPavan Nikhilesh 	event_enqueue_burst_t enqueue_new_burst;
164295c053fSPavan Nikhilesh 	/**< Pointer to PMD enqueue burst function(op new variant) */
165295c053fSPavan Nikhilesh 	event_enqueue_burst_t enqueue_forward_burst;
166295c053fSPavan Nikhilesh 	/**< Pointer to PMD enqueue burst function(op forward variant) */
167295c053fSPavan Nikhilesh 	event_dequeue_t dequeue;
168295c053fSPavan Nikhilesh 	/**< Pointer to PMD dequeue function. */
169295c053fSPavan Nikhilesh 	event_dequeue_burst_t dequeue_burst;
170295c053fSPavan Nikhilesh 	/**< Pointer to PMD dequeue burst function. */
17154f17843SMattias Rönnblom 	event_maintain_t maintain;
17254f17843SMattias Rönnblom 	/**< Pointer to PMD port maintenance function. */
173295c053fSPavan Nikhilesh 	event_tx_adapter_enqueue_t txa_enqueue_same_dest;
174295c053fSPavan Nikhilesh 	/**< Pointer to PMD eth Tx adapter burst enqueue function with
175295c053fSPavan Nikhilesh 	 * events destined to same Eth port & Tx queue.
176295c053fSPavan Nikhilesh 	 */
177295c053fSPavan Nikhilesh 	event_tx_adapter_enqueue_t txa_enqueue;
178295c053fSPavan Nikhilesh 	/**< Pointer to PMD eth Tx adapter enqueue function. */
179295c053fSPavan Nikhilesh 	event_crypto_adapter_enqueue_t ca_enqueue;
180295c053fSPavan Nikhilesh 
181295c053fSPavan Nikhilesh 	uint64_t reserved_64s[4]; /**< Reserved for future fields */
182295c053fSPavan Nikhilesh 	void *reserved_ptrs[3];	  /**< Reserved for future fields */
183295c053fSPavan Nikhilesh } __rte_cache_aligned;
184295c053fSPavan Nikhilesh 
185295c053fSPavan Nikhilesh extern struct rte_eventdev *rte_eventdevs;
186295c053fSPavan Nikhilesh /** @internal The pool of rte_eventdev structures. */
187295c053fSPavan Nikhilesh 
188295c053fSPavan Nikhilesh /**
18999a2dd95SBruce Richardson  * Get the rte_eventdev structure device pointer for the named device.
19099a2dd95SBruce Richardson  *
19199a2dd95SBruce Richardson  * @param name
19299a2dd95SBruce Richardson  *   device name to select the device structure.
19399a2dd95SBruce Richardson  *
19499a2dd95SBruce Richardson  * @return
19599a2dd95SBruce Richardson  *   - The rte_eventdev structure pointer for the given device ID.
19699a2dd95SBruce Richardson  */
19723d06e37SPavan Nikhilesh __rte_internal
19899a2dd95SBruce Richardson static inline struct rte_eventdev *
19999a2dd95SBruce Richardson rte_event_pmd_get_named_dev(const char *name)
20099a2dd95SBruce Richardson {
20199a2dd95SBruce Richardson 	struct rte_eventdev *dev;
20299a2dd95SBruce Richardson 	unsigned int i;
20399a2dd95SBruce Richardson 
20499a2dd95SBruce Richardson 	if (name == NULL)
20599a2dd95SBruce Richardson 		return NULL;
20699a2dd95SBruce Richardson 
20799a2dd95SBruce Richardson 	for (i = 0; i < RTE_EVENT_MAX_DEVS; i++) {
20899a2dd95SBruce Richardson 		dev = &rte_eventdevs[i];
20999a2dd95SBruce Richardson 		if ((dev->attached == RTE_EVENTDEV_ATTACHED) &&
21099a2dd95SBruce Richardson 				(strcmp(dev->data->name, name) == 0))
21199a2dd95SBruce Richardson 			return dev;
21299a2dd95SBruce Richardson 	}
21399a2dd95SBruce Richardson 
21499a2dd95SBruce Richardson 	return NULL;
21599a2dd95SBruce Richardson }
21699a2dd95SBruce Richardson 
21799a2dd95SBruce Richardson /**
21899a2dd95SBruce Richardson  * Validate if the event device index is valid attached event device.
21999a2dd95SBruce Richardson  *
22099a2dd95SBruce Richardson  * @param dev_id
22199a2dd95SBruce Richardson  *   Event device index.
22299a2dd95SBruce Richardson  *
22399a2dd95SBruce Richardson  * @return
22499a2dd95SBruce Richardson  *   - If the device index is valid (1) or not (0).
22599a2dd95SBruce Richardson  */
22623d06e37SPavan Nikhilesh __rte_internal
22799a2dd95SBruce Richardson static inline unsigned
22899a2dd95SBruce Richardson rte_event_pmd_is_valid_dev(uint8_t dev_id)
22999a2dd95SBruce Richardson {
23099a2dd95SBruce Richardson 	struct rte_eventdev *dev;
23199a2dd95SBruce Richardson 
23299a2dd95SBruce Richardson 	if (dev_id >= RTE_EVENT_MAX_DEVS)
23399a2dd95SBruce Richardson 		return 0;
23499a2dd95SBruce Richardson 
23599a2dd95SBruce Richardson 	dev = &rte_eventdevs[dev_id];
23699a2dd95SBruce Richardson 	if (dev->attached != RTE_EVENTDEV_ATTACHED)
23799a2dd95SBruce Richardson 		return 0;
23899a2dd95SBruce Richardson 	else
23999a2dd95SBruce Richardson 		return 1;
24099a2dd95SBruce Richardson }
24199a2dd95SBruce Richardson 
24299a2dd95SBruce Richardson /**
24399a2dd95SBruce Richardson  * Definitions of all functions exported by a driver through the
244b53d106dSSean Morrissey  * generic structure of type *event_dev_ops* supplied in the
24599a2dd95SBruce Richardson  * *rte_eventdev* structure associated with a device.
24699a2dd95SBruce Richardson  */
24799a2dd95SBruce Richardson 
24899a2dd95SBruce Richardson /**
24999a2dd95SBruce Richardson  * Get device information of a device.
25099a2dd95SBruce Richardson  *
25199a2dd95SBruce Richardson  * @param dev
25299a2dd95SBruce Richardson  *   Event device pointer
25399a2dd95SBruce Richardson  * @param dev_info
25499a2dd95SBruce Richardson  *   Event device information structure
25599a2dd95SBruce Richardson  */
25699a2dd95SBruce Richardson typedef void (*eventdev_info_get_t)(struct rte_eventdev *dev,
25799a2dd95SBruce Richardson 		struct rte_event_dev_info *dev_info);
25899a2dd95SBruce Richardson 
25999a2dd95SBruce Richardson /**
26099a2dd95SBruce Richardson  * Configure a device.
26199a2dd95SBruce Richardson  *
26299a2dd95SBruce Richardson  * @param dev
26399a2dd95SBruce Richardson  *   Event device pointer
26499a2dd95SBruce Richardson  *
26599a2dd95SBruce Richardson  * @return
26699a2dd95SBruce Richardson  *   Returns 0 on success
26799a2dd95SBruce Richardson  */
26899a2dd95SBruce Richardson typedef int (*eventdev_configure_t)(const struct rte_eventdev *dev);
26999a2dd95SBruce Richardson 
27099a2dd95SBruce Richardson /**
27199a2dd95SBruce Richardson  * Start a configured device.
27299a2dd95SBruce Richardson  *
27399a2dd95SBruce Richardson  * @param dev
27499a2dd95SBruce Richardson  *   Event device pointer
27599a2dd95SBruce Richardson  *
27699a2dd95SBruce Richardson  * @return
27799a2dd95SBruce Richardson  *   Returns 0 on success
27899a2dd95SBruce Richardson  */
27999a2dd95SBruce Richardson typedef int (*eventdev_start_t)(struct rte_eventdev *dev);
28099a2dd95SBruce Richardson 
28199a2dd95SBruce Richardson /**
28299a2dd95SBruce Richardson  * Stop a configured device.
28399a2dd95SBruce Richardson  *
28499a2dd95SBruce Richardson  * @param dev
28599a2dd95SBruce Richardson  *   Event device pointer
28699a2dd95SBruce Richardson  */
28799a2dd95SBruce Richardson typedef void (*eventdev_stop_t)(struct rte_eventdev *dev);
28899a2dd95SBruce Richardson 
28999a2dd95SBruce Richardson /**
29099a2dd95SBruce Richardson  * Close a configured device.
29199a2dd95SBruce Richardson  *
29299a2dd95SBruce Richardson  * @param dev
29399a2dd95SBruce Richardson  *   Event device pointer
29499a2dd95SBruce Richardson  *
29599a2dd95SBruce Richardson  * @return
29699a2dd95SBruce Richardson  * - 0 on success
29799a2dd95SBruce Richardson  * - (-EAGAIN) if can't close as device is busy
29899a2dd95SBruce Richardson  */
29999a2dd95SBruce Richardson typedef int (*eventdev_close_t)(struct rte_eventdev *dev);
30099a2dd95SBruce Richardson 
30199a2dd95SBruce Richardson /**
30299a2dd95SBruce Richardson  * Retrieve the default event queue configuration.
30399a2dd95SBruce Richardson  *
30499a2dd95SBruce Richardson  * @param dev
30599a2dd95SBruce Richardson  *   Event device pointer
30699a2dd95SBruce Richardson  * @param queue_id
30799a2dd95SBruce Richardson  *   Event queue index
30899a2dd95SBruce Richardson  * @param[out] queue_conf
30999a2dd95SBruce Richardson  *   Event queue configuration structure
31099a2dd95SBruce Richardson  *
31199a2dd95SBruce Richardson  */
31299a2dd95SBruce Richardson typedef void (*eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev,
31399a2dd95SBruce Richardson 		uint8_t queue_id, struct rte_event_queue_conf *queue_conf);
31499a2dd95SBruce Richardson 
31599a2dd95SBruce Richardson /**
31699a2dd95SBruce Richardson  * Setup an event queue.
31799a2dd95SBruce Richardson  *
31899a2dd95SBruce Richardson  * @param dev
31999a2dd95SBruce Richardson  *   Event device pointer
32099a2dd95SBruce Richardson  * @param queue_id
32199a2dd95SBruce Richardson  *   Event queue index
32299a2dd95SBruce Richardson  * @param queue_conf
32399a2dd95SBruce Richardson  *   Event queue configuration structure
32499a2dd95SBruce Richardson  *
32599a2dd95SBruce Richardson  * @return
32699a2dd95SBruce Richardson  *   Returns 0 on success.
32799a2dd95SBruce Richardson  */
32899a2dd95SBruce Richardson typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
32999a2dd95SBruce Richardson 		uint8_t queue_id,
33099a2dd95SBruce Richardson 		const struct rte_event_queue_conf *queue_conf);
33199a2dd95SBruce Richardson 
33299a2dd95SBruce Richardson /**
33399a2dd95SBruce Richardson  * Release resources allocated by given event queue.
33499a2dd95SBruce Richardson  *
33599a2dd95SBruce Richardson  * @param dev
33699a2dd95SBruce Richardson  *   Event device pointer
33799a2dd95SBruce Richardson  * @param queue_id
33899a2dd95SBruce Richardson  *   Event queue index
33999a2dd95SBruce Richardson  *
34099a2dd95SBruce Richardson  */
34199a2dd95SBruce Richardson typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
34299a2dd95SBruce Richardson 		uint8_t queue_id);
34399a2dd95SBruce Richardson 
34499a2dd95SBruce Richardson /**
345*44516e6bSShijith Thotton  * Get an event queue attribute at runtime.
346*44516e6bSShijith Thotton  *
347*44516e6bSShijith Thotton  * @param dev
348*44516e6bSShijith Thotton  *   Event device pointer
349*44516e6bSShijith Thotton  * @param queue_id
350*44516e6bSShijith Thotton  *   Event queue index
351*44516e6bSShijith Thotton  * @param attr_id
352*44516e6bSShijith Thotton  *   Event queue attribute id
353*44516e6bSShijith Thotton  * @param[out] attr_value
354*44516e6bSShijith Thotton  *   Event queue attribute value
355*44516e6bSShijith Thotton  *
356*44516e6bSShijith Thotton  * @return
357*44516e6bSShijith Thotton  *  - 0: Success.
358*44516e6bSShijith Thotton  *  - <0: Error code on failure.
359*44516e6bSShijith Thotton  */
360*44516e6bSShijith Thotton typedef int (*eventdev_queue_attr_get_t)(struct rte_eventdev *dev,
361*44516e6bSShijith Thotton 					 uint8_t queue_id, uint32_t attr_id,
362*44516e6bSShijith Thotton 					 uint32_t *attr_value);
363*44516e6bSShijith Thotton 
364*44516e6bSShijith Thotton /**
36597b914f4SShijith Thotton  * Set an event queue attribute at runtime.
36697b914f4SShijith Thotton  *
36797b914f4SShijith Thotton  * @param dev
36897b914f4SShijith Thotton  *   Event device pointer
36997b914f4SShijith Thotton  * @param queue_id
37097b914f4SShijith Thotton  *   Event queue index
37197b914f4SShijith Thotton  * @param attr_id
37297b914f4SShijith Thotton  *   Event queue attribute id
37397b914f4SShijith Thotton  * @param attr_value
37497b914f4SShijith Thotton  *   Event queue attribute value
37597b914f4SShijith Thotton  *
37697b914f4SShijith Thotton  * @return
37797b914f4SShijith Thotton  *  - 0: Success.
37897b914f4SShijith Thotton  *  - <0: Error code on failure.
37997b914f4SShijith Thotton  */
38097b914f4SShijith Thotton typedef int (*eventdev_queue_attr_set_t)(struct rte_eventdev *dev,
38197b914f4SShijith Thotton 					 uint8_t queue_id, uint32_t attr_id,
38297b914f4SShijith Thotton 					 uint64_t attr_value);
38397b914f4SShijith Thotton 
38497b914f4SShijith Thotton /**
38599a2dd95SBruce Richardson  * Retrieve the default event port configuration.
38699a2dd95SBruce Richardson  *
38799a2dd95SBruce Richardson  * @param dev
38899a2dd95SBruce Richardson  *   Event device pointer
38999a2dd95SBruce Richardson  * @param port_id
39099a2dd95SBruce Richardson  *   Event port index
39199a2dd95SBruce Richardson  * @param[out] port_conf
39299a2dd95SBruce Richardson  *   Event port configuration structure
39399a2dd95SBruce Richardson  *
39499a2dd95SBruce Richardson  */
39599a2dd95SBruce Richardson typedef void (*eventdev_port_default_conf_get_t)(struct rte_eventdev *dev,
39699a2dd95SBruce Richardson 		uint8_t port_id, struct rte_event_port_conf *port_conf);
39799a2dd95SBruce Richardson 
39899a2dd95SBruce Richardson /**
39999a2dd95SBruce Richardson  * Setup an event port.
40099a2dd95SBruce Richardson  *
40199a2dd95SBruce Richardson  * @param dev
40299a2dd95SBruce Richardson  *   Event device pointer
40399a2dd95SBruce Richardson  * @param port_id
40499a2dd95SBruce Richardson  *   Event port index
40599a2dd95SBruce Richardson  * @param port_conf
40699a2dd95SBruce Richardson  *   Event port configuration structure
40799a2dd95SBruce Richardson  *
40899a2dd95SBruce Richardson  * @return
40999a2dd95SBruce Richardson  *   Returns 0 on success.
41099a2dd95SBruce Richardson  */
41199a2dd95SBruce Richardson typedef int (*eventdev_port_setup_t)(struct rte_eventdev *dev,
41299a2dd95SBruce Richardson 		uint8_t port_id,
41399a2dd95SBruce Richardson 		const struct rte_event_port_conf *port_conf);
41499a2dd95SBruce Richardson 
41599a2dd95SBruce Richardson /**
41699a2dd95SBruce Richardson  * Release memory resources allocated by given event port.
41799a2dd95SBruce Richardson  *
41899a2dd95SBruce Richardson  * @param port
41999a2dd95SBruce Richardson  *   Event port pointer
42099a2dd95SBruce Richardson  *
42199a2dd95SBruce Richardson  */
42299a2dd95SBruce Richardson typedef void (*eventdev_port_release_t)(void *port);
42399a2dd95SBruce Richardson 
42499a2dd95SBruce Richardson /**
4251ff23ce6SPavan Nikhilesh  * Quiesce any core specific resources consumed by the event port
4261ff23ce6SPavan Nikhilesh  *
4271ff23ce6SPavan Nikhilesh  * @param dev
4281ff23ce6SPavan Nikhilesh  *   Event device pointer.
4291ff23ce6SPavan Nikhilesh  * @param port
4301ff23ce6SPavan Nikhilesh  *   Event port pointer.
4311ff23ce6SPavan Nikhilesh  * @param flush_cb
4321ff23ce6SPavan Nikhilesh  *   User-provided event flush function.
4331ff23ce6SPavan Nikhilesh  * @param args
4341ff23ce6SPavan Nikhilesh  *   Arguments to be passed to the user-provided event flush function.
4351ff23ce6SPavan Nikhilesh  *
4361ff23ce6SPavan Nikhilesh  */
4371ff23ce6SPavan Nikhilesh typedef void (*eventdev_port_quiesce_t)(struct rte_eventdev *dev, void *port,
4381ff23ce6SPavan Nikhilesh 					rte_eventdev_port_flush_t flush_cb,
4391ff23ce6SPavan Nikhilesh 					void *args);
4401ff23ce6SPavan Nikhilesh 
4411ff23ce6SPavan Nikhilesh /**
44299a2dd95SBruce Richardson  * Link multiple source event queues to destination event port.
44399a2dd95SBruce Richardson  *
44499a2dd95SBruce Richardson  * @param dev
44599a2dd95SBruce Richardson  *   Event device pointer
44699a2dd95SBruce Richardson  * @param port
44799a2dd95SBruce Richardson  *   Event port pointer
44899a2dd95SBruce Richardson  * @param queues
44999a2dd95SBruce Richardson  *   Points to an array of *nb_links* event queues to be linked
45099a2dd95SBruce Richardson  *   to the event port.
45199a2dd95SBruce Richardson  * @param priorities
45299a2dd95SBruce Richardson  *   Points to an array of *nb_links* service priorities associated with each
45399a2dd95SBruce Richardson  *   event queue link to event port.
45499a2dd95SBruce Richardson  * @param nb_links
45599a2dd95SBruce Richardson  *   The number of links to establish
45699a2dd95SBruce Richardson  *
45799a2dd95SBruce Richardson  * @return
45899a2dd95SBruce Richardson  *   Returns 0 on success.
45999a2dd95SBruce Richardson  *
46099a2dd95SBruce Richardson  */
46199a2dd95SBruce Richardson typedef int (*eventdev_port_link_t)(struct rte_eventdev *dev, void *port,
46299a2dd95SBruce Richardson 		const uint8_t queues[], const uint8_t priorities[],
46399a2dd95SBruce Richardson 		uint16_t nb_links);
46499a2dd95SBruce Richardson 
46599a2dd95SBruce Richardson /**
46699a2dd95SBruce Richardson  * Unlink multiple source event queues from destination event port.
46799a2dd95SBruce Richardson  *
46899a2dd95SBruce Richardson  * @param dev
46999a2dd95SBruce Richardson  *   Event device pointer
47099a2dd95SBruce Richardson  * @param port
47199a2dd95SBruce Richardson  *   Event port pointer
47299a2dd95SBruce Richardson  * @param queues
47399a2dd95SBruce Richardson  *   An array of *nb_unlinks* event queues to be unlinked from the event port.
47499a2dd95SBruce Richardson  * @param nb_unlinks
47599a2dd95SBruce Richardson  *   The number of unlinks to establish
47699a2dd95SBruce Richardson  *
47799a2dd95SBruce Richardson  * @return
47899a2dd95SBruce Richardson  *   Returns 0 on success.
47999a2dd95SBruce Richardson  *
48099a2dd95SBruce Richardson  */
48199a2dd95SBruce Richardson typedef int (*eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port,
48299a2dd95SBruce Richardson 		uint8_t queues[], uint16_t nb_unlinks);
48399a2dd95SBruce Richardson 
48499a2dd95SBruce Richardson /**
48599a2dd95SBruce Richardson  * Unlinks in progress. Returns number of unlinks that the PMD is currently
48699a2dd95SBruce Richardson  * performing, but have not yet been completed.
48799a2dd95SBruce Richardson  *
48899a2dd95SBruce Richardson  * @param dev
48999a2dd95SBruce Richardson  *   Event device pointer
49099a2dd95SBruce Richardson  *
49199a2dd95SBruce Richardson  * @param port
49299a2dd95SBruce Richardson  *   Event port pointer
49399a2dd95SBruce Richardson  *
49499a2dd95SBruce Richardson  * @return
49599a2dd95SBruce Richardson  *   Returns the number of in-progress unlinks. Zero is returned if none are
49699a2dd95SBruce Richardson  *   in progress.
49799a2dd95SBruce Richardson  */
49899a2dd95SBruce Richardson typedef int (*eventdev_port_unlinks_in_progress_t)(struct rte_eventdev *dev,
49999a2dd95SBruce Richardson 		void *port);
50099a2dd95SBruce Richardson 
50199a2dd95SBruce Richardson /**
50299a2dd95SBruce Richardson  * Converts nanoseconds to *timeout_ticks* value for rte_event_dequeue()
50399a2dd95SBruce Richardson  *
50499a2dd95SBruce Richardson  * @param dev
50599a2dd95SBruce Richardson  *   Event device pointer
50699a2dd95SBruce Richardson  * @param ns
50799a2dd95SBruce Richardson  *   Wait time in nanosecond
50899a2dd95SBruce Richardson  * @param[out] timeout_ticks
50999a2dd95SBruce Richardson  *   Value for the *timeout_ticks* parameter in rte_event_dequeue() function
51099a2dd95SBruce Richardson  *
51199a2dd95SBruce Richardson  * @return
51299a2dd95SBruce Richardson  *   Returns 0 on success.
51399a2dd95SBruce Richardson  *
51499a2dd95SBruce Richardson  */
51599a2dd95SBruce Richardson typedef int (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
51699a2dd95SBruce Richardson 		uint64_t ns, uint64_t *timeout_ticks);
51799a2dd95SBruce Richardson 
51899a2dd95SBruce Richardson /**
51999a2dd95SBruce Richardson  * Dump internal information
52099a2dd95SBruce Richardson  *
52199a2dd95SBruce Richardson  * @param dev
52299a2dd95SBruce Richardson  *   Event device pointer
52399a2dd95SBruce Richardson  * @param f
52499a2dd95SBruce Richardson  *   A pointer to a file for output
52599a2dd95SBruce Richardson  *
52699a2dd95SBruce Richardson  */
52799a2dd95SBruce Richardson typedef void (*eventdev_dump_t)(struct rte_eventdev *dev, FILE *f);
52899a2dd95SBruce Richardson 
52999a2dd95SBruce Richardson /**
53099a2dd95SBruce Richardson  * Retrieve a set of statistics from device
53199a2dd95SBruce Richardson  *
53299a2dd95SBruce Richardson  * @param dev
53399a2dd95SBruce Richardson  *   Event device pointer
53499a2dd95SBruce Richardson  * @param mode
53599a2dd95SBruce Richardson  *   Level (device, port or queue)
53699a2dd95SBruce Richardson  * @param queue_port_id
53799a2dd95SBruce Richardson  *   Queue or port number depending on mode
53899a2dd95SBruce Richardson  * @param ids
53999a2dd95SBruce Richardson  *   The stat ids to retrieve
54099a2dd95SBruce Richardson  * @param values
54199a2dd95SBruce Richardson  *   The returned stat values
54299a2dd95SBruce Richardson  * @param n
54399a2dd95SBruce Richardson  *   The number of id values and entries in the values array
54499a2dd95SBruce Richardson  * @return
54599a2dd95SBruce Richardson  *   The number of stat values successfully filled into the values array
54699a2dd95SBruce Richardson  */
54799a2dd95SBruce Richardson typedef int (*eventdev_xstats_get_t)(const struct rte_eventdev *dev,
54899a2dd95SBruce Richardson 		enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
54999a2dd95SBruce Richardson 		const unsigned int ids[], uint64_t values[], unsigned int n);
55099a2dd95SBruce Richardson 
55199a2dd95SBruce Richardson /**
55299a2dd95SBruce Richardson  * Resets the statistic values in xstats for the device, based on mode.
55399a2dd95SBruce Richardson  */
55499a2dd95SBruce Richardson typedef int (*eventdev_xstats_reset_t)(struct rte_eventdev *dev,
55599a2dd95SBruce Richardson 		enum rte_event_dev_xstats_mode mode,
55699a2dd95SBruce Richardson 		int16_t queue_port_id,
55799a2dd95SBruce Richardson 		const uint32_t ids[],
55899a2dd95SBruce Richardson 		uint32_t nb_ids);
55999a2dd95SBruce Richardson 
56099a2dd95SBruce Richardson /**
56199a2dd95SBruce Richardson  * Get names of extended stats of an event device
56299a2dd95SBruce Richardson  *
56399a2dd95SBruce Richardson  * @param dev
56499a2dd95SBruce Richardson  *   Event device pointer
56599a2dd95SBruce Richardson  * @param mode
56699a2dd95SBruce Richardson  *   Level (device, port or queue)
56799a2dd95SBruce Richardson  * @param queue_port_id
56899a2dd95SBruce Richardson  *   Queue or port number depending on mode
56999a2dd95SBruce Richardson  * @param xstats_names
57099a2dd95SBruce Richardson  *   Array of name values to be filled in
57199a2dd95SBruce Richardson  * @param ids
57299a2dd95SBruce Richardson  *   The stat ids to retrieve
57399a2dd95SBruce Richardson  * @param size
57499a2dd95SBruce Richardson  *   Number of values in the xstats_names array
57599a2dd95SBruce Richardson  * @return
57699a2dd95SBruce Richardson  *   When size >= the number of stats, return the number of stat values filled
57799a2dd95SBruce Richardson  *   into the array.
57899a2dd95SBruce Richardson  *   When size < the number of available stats, return the number of stats
57999a2dd95SBruce Richardson  *   values, and do not fill in any data into xstats_names.
58099a2dd95SBruce Richardson  */
58199a2dd95SBruce Richardson typedef int (*eventdev_xstats_get_names_t)(const struct rte_eventdev *dev,
58299a2dd95SBruce Richardson 		enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
58399a2dd95SBruce Richardson 		struct rte_event_dev_xstats_name *xstats_names,
58499a2dd95SBruce Richardson 		unsigned int *ids, unsigned int size);
58599a2dd95SBruce Richardson 
58699a2dd95SBruce Richardson /**
58799a2dd95SBruce Richardson  * Get value of one stats and optionally return its id
58899a2dd95SBruce Richardson  *
58999a2dd95SBruce Richardson  * @param dev
59099a2dd95SBruce Richardson  *   Event device pointer
59199a2dd95SBruce Richardson  * @param name
59299a2dd95SBruce Richardson  *   The name of the stat to retrieve
59399a2dd95SBruce Richardson  * @param id
59499a2dd95SBruce Richardson  *   Pointer to an unsigned int where we store the stat-id for future reference.
59599a2dd95SBruce Richardson  *   This pointer may be null if the id is not required.
59699a2dd95SBruce Richardson  * @return
59799a2dd95SBruce Richardson  *   The value of the stat, or (uint64_t)-1 if the stat is not found.
59899a2dd95SBruce Richardson  *   If the stat is not found, the id value will be returned as (unsigned)-1,
59999a2dd95SBruce Richardson  *   if id pointer is non-NULL
60099a2dd95SBruce Richardson  */
60199a2dd95SBruce Richardson typedef uint64_t (*eventdev_xstats_get_by_name)(const struct rte_eventdev *dev,
60299a2dd95SBruce Richardson 		const char *name, unsigned int *id);
60399a2dd95SBruce Richardson 
60499a2dd95SBruce Richardson 
60599a2dd95SBruce Richardson /**
60699a2dd95SBruce Richardson  * Retrieve the event device's ethdev Rx adapter capabilities for the
60799a2dd95SBruce Richardson  * specified ethernet port
60899a2dd95SBruce Richardson  *
60999a2dd95SBruce Richardson  * @param dev
61099a2dd95SBruce Richardson  *   Event device pointer
61199a2dd95SBruce Richardson  *
61299a2dd95SBruce Richardson  * @param eth_dev
61399a2dd95SBruce Richardson  *   Ethernet device pointer
61499a2dd95SBruce Richardson  *
61599a2dd95SBruce Richardson  * @param[out] caps
61699a2dd95SBruce Richardson  *   A pointer to memory filled with Rx event adapter capabilities.
61799a2dd95SBruce Richardson  *
61899a2dd95SBruce Richardson  * @return
61999a2dd95SBruce Richardson  *   - 0: Success, driver provides Rx event adapter capabilities for the
62099a2dd95SBruce Richardson  *	ethernet device.
62199a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
62299a2dd95SBruce Richardson  *
62399a2dd95SBruce Richardson  */
62499a2dd95SBruce Richardson typedef int (*eventdev_eth_rx_adapter_caps_get_t)
62599a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
62699a2dd95SBruce Richardson 					const struct rte_eth_dev *eth_dev,
62799a2dd95SBruce Richardson 					uint32_t *caps);
62899a2dd95SBruce Richardson 
62999a2dd95SBruce Richardson struct rte_event_eth_rx_adapter_queue_conf;
63099a2dd95SBruce Richardson 
63199a2dd95SBruce Richardson /**
63299a2dd95SBruce Richardson  * Retrieve the event device's timer adapter capabilities, as well as the ops
63399a2dd95SBruce Richardson  * structure that an event timer adapter should call through to enter the
63499a2dd95SBruce Richardson  * driver
63599a2dd95SBruce Richardson  *
63699a2dd95SBruce Richardson  * @param dev
63799a2dd95SBruce Richardson  *   Event device pointer
63899a2dd95SBruce Richardson  *
63999a2dd95SBruce Richardson  * @param flags
64099a2dd95SBruce Richardson  *   Flags that can be used to determine how to select an event timer
64199a2dd95SBruce Richardson  *   adapter ops structure
64299a2dd95SBruce Richardson  *
64399a2dd95SBruce Richardson  * @param[out] caps
64499a2dd95SBruce Richardson  *   A pointer to memory filled with Rx event adapter capabilities.
64599a2dd95SBruce Richardson  *
64699a2dd95SBruce Richardson  * @param[out] ops
64799a2dd95SBruce Richardson  *   A pointer to the ops pointer to set with the address of the desired ops
64899a2dd95SBruce Richardson  *   structure
64999a2dd95SBruce Richardson  *
65099a2dd95SBruce Richardson  * @return
65199a2dd95SBruce Richardson  *   - 0: Success, driver provides Rx event adapter capabilities for the
65299a2dd95SBruce Richardson  *	ethernet device.
65399a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
65499a2dd95SBruce Richardson  *
65599a2dd95SBruce Richardson  */
65699a2dd95SBruce Richardson typedef int (*eventdev_timer_adapter_caps_get_t)(
65753548ad3SPavan Nikhilesh 	const struct rte_eventdev *dev, uint64_t flags, uint32_t *caps,
65853548ad3SPavan Nikhilesh 	const struct event_timer_adapter_ops **ops);
65999a2dd95SBruce Richardson 
66099a2dd95SBruce Richardson /**
66199a2dd95SBruce Richardson  * Add ethernet Rx queues to event device. This callback is invoked if
66299a2dd95SBruce Richardson  * the caps returned from rte_eventdev_eth_rx_adapter_caps_get(, eth_port_id)
66399a2dd95SBruce Richardson  * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set.
66499a2dd95SBruce Richardson  *
66599a2dd95SBruce Richardson  * @param dev
66699a2dd95SBruce Richardson  *   Event device pointer
66799a2dd95SBruce Richardson  *
66899a2dd95SBruce Richardson  * @param eth_dev
66999a2dd95SBruce Richardson  *   Ethernet device pointer
67099a2dd95SBruce Richardson  *
67199a2dd95SBruce Richardson  * @param rx_queue_id
67299a2dd95SBruce Richardson  *   Ethernet device receive queue index
67399a2dd95SBruce Richardson  *
67499a2dd95SBruce Richardson  * @param queue_conf
67599a2dd95SBruce Richardson  *  Additional configuration structure
67699a2dd95SBruce Richardson 
67799a2dd95SBruce Richardson  * @return
67899a2dd95SBruce Richardson  *   - 0: Success, ethernet receive queue added successfully.
67999a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
68099a2dd95SBruce Richardson  *
68199a2dd95SBruce Richardson  */
68299a2dd95SBruce Richardson typedef int (*eventdev_eth_rx_adapter_queue_add_t)(
68399a2dd95SBruce Richardson 		const struct rte_eventdev *dev,
68499a2dd95SBruce Richardson 		const struct rte_eth_dev *eth_dev,
68599a2dd95SBruce Richardson 		int32_t rx_queue_id,
68699a2dd95SBruce Richardson 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
68799a2dd95SBruce Richardson 
68899a2dd95SBruce Richardson /**
68999a2dd95SBruce Richardson  * Delete ethernet Rx queues from event device. This callback is invoked if
69099a2dd95SBruce Richardson  * the caps returned from eventdev_eth_rx_adapter_caps_get(, eth_port_id)
69199a2dd95SBruce Richardson  * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set.
69299a2dd95SBruce Richardson  *
69399a2dd95SBruce Richardson  * @param dev
69499a2dd95SBruce Richardson  *   Event device pointer
69599a2dd95SBruce Richardson  *
69699a2dd95SBruce Richardson  * @param eth_dev
69799a2dd95SBruce Richardson  *   Ethernet device pointer
69899a2dd95SBruce Richardson  *
69999a2dd95SBruce Richardson  * @param rx_queue_id
70099a2dd95SBruce Richardson  *   Ethernet device receive queue index
70199a2dd95SBruce Richardson  *
70299a2dd95SBruce Richardson  * @return
70399a2dd95SBruce Richardson  *   - 0: Success, ethernet receive queue deleted successfully.
70499a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
70599a2dd95SBruce Richardson  *
70699a2dd95SBruce Richardson  */
70799a2dd95SBruce Richardson typedef int (*eventdev_eth_rx_adapter_queue_del_t)
70899a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
70999a2dd95SBruce Richardson 					const struct rte_eth_dev *eth_dev,
71099a2dd95SBruce Richardson 					int32_t rx_queue_id);
71199a2dd95SBruce Richardson 
71299a2dd95SBruce Richardson /**
713da781e64SGanapati Kundapura  * Retrieve Rx adapter queue config information for the specified
714da781e64SGanapati Kundapura  * rx queue ID.
715da781e64SGanapati Kundapura  *
716da781e64SGanapati Kundapura  * @param dev
717da781e64SGanapati Kundapura  *  Event device pointer
718da781e64SGanapati Kundapura  *
719da781e64SGanapati Kundapura  * @param eth_dev
720da781e64SGanapati Kundapura  *  Ethernet device pointer
721da781e64SGanapati Kundapura  *
722da781e64SGanapati Kundapura  * @param rx_queue_id
723da781e64SGanapati Kundapura  *  Ethernet device receive queue index.
724da781e64SGanapati Kundapura  *
725da781e64SGanapati Kundapura  * @param[out] queue_conf
726da781e64SGanapati Kundapura  *  Pointer to rte_event_eth_rx_adapter_queue_conf structure
727da781e64SGanapati Kundapura  *
728da781e64SGanapati Kundapura  * @return
729da781e64SGanapati Kundapura  *  - 0: Success
730da781e64SGanapati Kundapura  *  - <0: Error code on failure.
731da781e64SGanapati Kundapura  */
732da781e64SGanapati Kundapura typedef int (*eventdev_eth_rx_adapter_queue_conf_get_t)
733da781e64SGanapati Kundapura 			(const struct rte_eventdev *dev,
734da781e64SGanapati Kundapura 			const struct rte_eth_dev *eth_dev,
735da781e64SGanapati Kundapura 			uint16_t rx_queue_id,
736da781e64SGanapati Kundapura 			struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
737da781e64SGanapati Kundapura 
738da781e64SGanapati Kundapura /**
73999a2dd95SBruce Richardson  * Start ethernet Rx adapter. This callback is invoked if
74099a2dd95SBruce Richardson  * the caps returned from eventdev_eth_rx_adapter_caps_get(.., eth_port_id)
74199a2dd95SBruce Richardson  * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set and Rx queues
74299a2dd95SBruce Richardson  * from eth_port_id have been added to the event device.
74399a2dd95SBruce Richardson  *
74499a2dd95SBruce Richardson  * @param dev
74599a2dd95SBruce Richardson  *   Event device pointer
74699a2dd95SBruce Richardson  *
74799a2dd95SBruce Richardson  * @param eth_dev
74899a2dd95SBruce Richardson  *   Ethernet device pointer
74999a2dd95SBruce Richardson  *
75099a2dd95SBruce Richardson  * @return
75199a2dd95SBruce Richardson  *   - 0: Success, ethernet Rx adapter started successfully.
75299a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
75399a2dd95SBruce Richardson  */
75499a2dd95SBruce Richardson typedef int (*eventdev_eth_rx_adapter_start_t)
75599a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
75699a2dd95SBruce Richardson 					const struct rte_eth_dev *eth_dev);
75799a2dd95SBruce Richardson 
75899a2dd95SBruce Richardson /**
75999a2dd95SBruce Richardson  * Stop ethernet Rx adapter. This callback is invoked if
76099a2dd95SBruce Richardson  * the caps returned from eventdev_eth_rx_adapter_caps_get(..,eth_port_id)
76199a2dd95SBruce Richardson  * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set and Rx queues
76299a2dd95SBruce Richardson  * from eth_port_id have been added to the event device.
76399a2dd95SBruce Richardson  *
76499a2dd95SBruce Richardson  * @param dev
76599a2dd95SBruce Richardson  *   Event device pointer
76699a2dd95SBruce Richardson  *
76799a2dd95SBruce Richardson  * @param eth_dev
76899a2dd95SBruce Richardson  *   Ethernet device pointer
76999a2dd95SBruce Richardson  *
77099a2dd95SBruce Richardson  * @return
77199a2dd95SBruce Richardson  *   - 0: Success, ethernet Rx adapter stopped successfully.
77299a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
77399a2dd95SBruce Richardson  */
77499a2dd95SBruce Richardson typedef int (*eventdev_eth_rx_adapter_stop_t)
77599a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
77699a2dd95SBruce Richardson 					const struct rte_eth_dev *eth_dev);
77799a2dd95SBruce Richardson 
77899a2dd95SBruce Richardson struct rte_event_eth_rx_adapter_stats;
77999a2dd95SBruce Richardson 
78099a2dd95SBruce Richardson /**
78199a2dd95SBruce Richardson  * Retrieve ethernet Rx adapter statistics.
78299a2dd95SBruce Richardson  *
78399a2dd95SBruce Richardson  * @param dev
78499a2dd95SBruce Richardson  *   Event device pointer
78599a2dd95SBruce Richardson  *
78699a2dd95SBruce Richardson  * @param eth_dev
78799a2dd95SBruce Richardson  *   Ethernet device pointer
78899a2dd95SBruce Richardson  *
78999a2dd95SBruce Richardson  * @param[out] stats
79099a2dd95SBruce Richardson  *   Pointer to stats structure
79199a2dd95SBruce Richardson  *
79299a2dd95SBruce Richardson  * @return
79399a2dd95SBruce Richardson  *   Return 0 on success.
79499a2dd95SBruce Richardson  */
79599a2dd95SBruce Richardson 
79699a2dd95SBruce Richardson typedef int (*eventdev_eth_rx_adapter_stats_get)
79799a2dd95SBruce Richardson 			(const struct rte_eventdev *dev,
79899a2dd95SBruce Richardson 			const struct rte_eth_dev *eth_dev,
79999a2dd95SBruce Richardson 			struct rte_event_eth_rx_adapter_stats *stats);
80099a2dd95SBruce Richardson /**
80199a2dd95SBruce Richardson  * Reset ethernet Rx adapter statistics.
80299a2dd95SBruce Richardson  *
80399a2dd95SBruce Richardson  * @param dev
80499a2dd95SBruce Richardson  *   Event device pointer
80599a2dd95SBruce Richardson  *
80699a2dd95SBruce Richardson  * @param eth_dev
80799a2dd95SBruce Richardson  *   Ethernet device pointer
80899a2dd95SBruce Richardson  *
80999a2dd95SBruce Richardson  * @return
81099a2dd95SBruce Richardson  *   Return 0 on success.
81199a2dd95SBruce Richardson  */
81299a2dd95SBruce Richardson typedef int (*eventdev_eth_rx_adapter_stats_reset)
81399a2dd95SBruce Richardson 			(const struct rte_eventdev *dev,
81499a2dd95SBruce Richardson 			const struct rte_eth_dev *eth_dev);
815995b150cSNaga Harish K S V 
816995b150cSNaga Harish K S V struct rte_event_eth_rx_adapter_queue_stats;
817995b150cSNaga Harish K S V 
818995b150cSNaga Harish K S V /**
819995b150cSNaga Harish K S V  * Retrieve ethernet Rx adapter queue statistics.
820995b150cSNaga Harish K S V  *
821995b150cSNaga Harish K S V  * @param dev
822995b150cSNaga Harish K S V  *   Event device pointer
823995b150cSNaga Harish K S V  *
824995b150cSNaga Harish K S V  * @param eth_dev
825995b150cSNaga Harish K S V  *   Ethernet device pointer
826995b150cSNaga Harish K S V  *
827995b150cSNaga Harish K S V  * @param rx_queue_id
828995b150cSNaga Harish K S V  *  Ethernet device receive queue index.
829995b150cSNaga Harish K S V  *
830995b150cSNaga Harish K S V  * @param[out] q_stats
831995b150cSNaga Harish K S V  *   Pointer to queue stats structure
832995b150cSNaga Harish K S V  *
833995b150cSNaga Harish K S V  * @return
834995b150cSNaga Harish K S V  *   Return 0 on success.
835995b150cSNaga Harish K S V  */
836995b150cSNaga Harish K S V typedef int (*eventdev_eth_rx_adapter_q_stats_get)
837995b150cSNaga Harish K S V 			(const struct rte_eventdev *dev,
838995b150cSNaga Harish K S V 			 const struct rte_eth_dev *eth_dev,
839995b150cSNaga Harish K S V 			 uint16_t rx_queue_id,
840995b150cSNaga Harish K S V 			 struct rte_event_eth_rx_adapter_queue_stats *q_stats);
841995b150cSNaga Harish K S V 
842995b150cSNaga Harish K S V /**
843995b150cSNaga Harish K S V  * Reset ethernet Rx adapter queue statistics.
844995b150cSNaga Harish K S V  *
845995b150cSNaga Harish K S V  * @param dev
846995b150cSNaga Harish K S V  *   Event device pointer
847995b150cSNaga Harish K S V  *
848995b150cSNaga Harish K S V  * @param eth_dev
849995b150cSNaga Harish K S V  *   Ethernet device pointer
850995b150cSNaga Harish K S V  *
851995b150cSNaga Harish K S V  * @param rx_queue_id
852995b150cSNaga Harish K S V  *  Ethernet device receive queue index.
853995b150cSNaga Harish K S V  *
854995b150cSNaga Harish K S V  * @return
855995b150cSNaga Harish K S V  *   Return 0 on success.
856995b150cSNaga Harish K S V  */
857995b150cSNaga Harish K S V typedef int (*eventdev_eth_rx_adapter_q_stats_reset)
858995b150cSNaga Harish K S V 			(const struct rte_eventdev *dev,
859995b150cSNaga Harish K S V 			 const struct rte_eth_dev *eth_dev,
860995b150cSNaga Harish K S V 			 uint16_t rx_queue_id);
861995b150cSNaga Harish K S V 
86299a2dd95SBruce Richardson /**
86399a2dd95SBruce Richardson  * Start eventdev selftest.
86499a2dd95SBruce Richardson  *
86599a2dd95SBruce Richardson  * @return
86699a2dd95SBruce Richardson  *   Return 0 on success.
86799a2dd95SBruce Richardson  */
86899a2dd95SBruce Richardson typedef int (*eventdev_selftest)(void);
86999a2dd95SBruce Richardson 
87099a2dd95SBruce Richardson struct rte_event_eth_rx_adapter_vector_limits;
87199a2dd95SBruce Richardson /**
87299a2dd95SBruce Richardson  * Get event vector limits for a given event, ethernet device pair.
87399a2dd95SBruce Richardson  *
87499a2dd95SBruce Richardson  * @param dev
87599a2dd95SBruce Richardson  *   Event device pointer
87699a2dd95SBruce Richardson  *
87799a2dd95SBruce Richardson  * @param eth_dev
87899a2dd95SBruce Richardson  *   Ethernet device pointer
87999a2dd95SBruce Richardson  *
88099a2dd95SBruce Richardson  * @param[out] limits
88199a2dd95SBruce Richardson  *   Pointer to the limits structure to be filled.
88299a2dd95SBruce Richardson  *
88399a2dd95SBruce Richardson  * @return
88499a2dd95SBruce Richardson  *   - 0: Success.
88599a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
88699a2dd95SBruce Richardson  */
88799a2dd95SBruce Richardson typedef int (*eventdev_eth_rx_adapter_vector_limits_get_t)(
88899a2dd95SBruce Richardson 	const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev,
88999a2dd95SBruce Richardson 	struct rte_event_eth_rx_adapter_vector_limits *limits);
89099a2dd95SBruce Richardson 
89199a2dd95SBruce Richardson typedef uint32_t rte_event_pmd_selftest_seqn_t;
89299a2dd95SBruce Richardson extern int rte_event_pmd_selftest_seqn_dynfield_offset;
89399a2dd95SBruce Richardson 
89499a2dd95SBruce Richardson /**
89599a2dd95SBruce Richardson  * Read test sequence number from mbuf.
89699a2dd95SBruce Richardson  *
89799a2dd95SBruce Richardson  * @param mbuf Structure to read from.
89899a2dd95SBruce Richardson  * @return pointer to test sequence number.
89999a2dd95SBruce Richardson  */
90099a2dd95SBruce Richardson __rte_internal
90199a2dd95SBruce Richardson static inline rte_event_pmd_selftest_seqn_t *
90299a2dd95SBruce Richardson rte_event_pmd_selftest_seqn(struct rte_mbuf *mbuf)
90399a2dd95SBruce Richardson {
90499a2dd95SBruce Richardson 	return RTE_MBUF_DYNFIELD(mbuf,
90599a2dd95SBruce Richardson 		rte_event_pmd_selftest_seqn_dynfield_offset,
90699a2dd95SBruce Richardson 		rte_event_pmd_selftest_seqn_t *);
90799a2dd95SBruce Richardson }
90899a2dd95SBruce Richardson 
90999a2dd95SBruce Richardson struct rte_cryptodev;
91099a2dd95SBruce Richardson 
91199a2dd95SBruce Richardson /**
91299a2dd95SBruce Richardson  * This API may change without prior notice
91399a2dd95SBruce Richardson  *
91499a2dd95SBruce Richardson  * Retrieve the event device's crypto adapter capabilities for the
91599a2dd95SBruce Richardson  * specified cryptodev
91699a2dd95SBruce Richardson  *
91799a2dd95SBruce Richardson  * @param dev
91899a2dd95SBruce Richardson  *   Event device pointer
91999a2dd95SBruce Richardson  *
92099a2dd95SBruce Richardson  * @param cdev
92199a2dd95SBruce Richardson  *   cryptodev pointer
92299a2dd95SBruce Richardson  *
92399a2dd95SBruce Richardson  * @param[out] caps
92499a2dd95SBruce Richardson  *   A pointer to memory filled with event adapter capabilities.
92599a2dd95SBruce Richardson  *   It is expected to be pre-allocated & initialized by caller.
92699a2dd95SBruce Richardson  *
92799a2dd95SBruce Richardson  * @return
92899a2dd95SBruce Richardson  *   - 0: Success, driver provides event adapter capabilities for the
92999a2dd95SBruce Richardson  *	cryptodev.
93099a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
93199a2dd95SBruce Richardson  *
93299a2dd95SBruce Richardson  */
93399a2dd95SBruce Richardson typedef int (*eventdev_crypto_adapter_caps_get_t)
93499a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
93599a2dd95SBruce Richardson 					 const struct rte_cryptodev *cdev,
93699a2dd95SBruce Richardson 					 uint32_t *caps);
93799a2dd95SBruce Richardson 
93899a2dd95SBruce Richardson /**
93999a2dd95SBruce Richardson  * This API may change without prior notice
94099a2dd95SBruce Richardson  *
94199a2dd95SBruce Richardson  * Add crypto queue pair to event device. This callback is invoked if
94299a2dd95SBruce Richardson  * the caps returned from rte_event_crypto_adapter_caps_get(, cdev_id)
94399a2dd95SBruce Richardson  * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set.
94499a2dd95SBruce Richardson  *
94599a2dd95SBruce Richardson  * @param dev
94699a2dd95SBruce Richardson  *   Event device pointer
94799a2dd95SBruce Richardson  *
94899a2dd95SBruce Richardson  * @param cdev
94999a2dd95SBruce Richardson  *   cryptodev pointer
95099a2dd95SBruce Richardson  *
95199a2dd95SBruce Richardson  * @param queue_pair_id
95299a2dd95SBruce Richardson  *   cryptodev queue pair identifier.
95399a2dd95SBruce Richardson  *
95499a2dd95SBruce Richardson  * @param event
95599a2dd95SBruce Richardson  *  Event information required for binding cryptodev queue pair to event queue.
95699a2dd95SBruce Richardson  *  This structure will have a valid value for only those HW PMDs supporting
95799a2dd95SBruce Richardson  *  @see RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND capability.
95899a2dd95SBruce Richardson  *
95999a2dd95SBruce Richardson  * @return
96099a2dd95SBruce Richardson  *   - 0: Success, cryptodev queue pair added successfully.
96199a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
96299a2dd95SBruce Richardson  *
96399a2dd95SBruce Richardson  */
96499a2dd95SBruce Richardson typedef int (*eventdev_crypto_adapter_queue_pair_add_t)
96599a2dd95SBruce Richardson 			(const struct rte_eventdev *dev,
96699a2dd95SBruce Richardson 			 const struct rte_cryptodev *cdev,
96799a2dd95SBruce Richardson 			 int32_t queue_pair_id,
96899a2dd95SBruce Richardson 			 const struct rte_event *event);
96999a2dd95SBruce Richardson 
97099a2dd95SBruce Richardson 
97199a2dd95SBruce Richardson /**
97299a2dd95SBruce Richardson  * This API may change without prior notice
97399a2dd95SBruce Richardson  *
97499a2dd95SBruce Richardson  * Delete crypto queue pair to event device. This callback is invoked if
97599a2dd95SBruce Richardson  * the caps returned from rte_event_crypto_adapter_caps_get(, cdev_id)
97699a2dd95SBruce Richardson  * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set.
97799a2dd95SBruce Richardson  *
97899a2dd95SBruce Richardson  * @param dev
97999a2dd95SBruce Richardson  *   Event device pointer
98099a2dd95SBruce Richardson  *
98199a2dd95SBruce Richardson  * @param cdev
98299a2dd95SBruce Richardson  *   cryptodev pointer
98399a2dd95SBruce Richardson  *
98499a2dd95SBruce Richardson  * @param queue_pair_id
98599a2dd95SBruce Richardson  *   cryptodev queue pair identifier.
98699a2dd95SBruce Richardson  *
98799a2dd95SBruce Richardson  * @return
98899a2dd95SBruce Richardson  *   - 0: Success, cryptodev queue pair deleted successfully.
98999a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
99099a2dd95SBruce Richardson  *
99199a2dd95SBruce Richardson  */
99299a2dd95SBruce Richardson typedef int (*eventdev_crypto_adapter_queue_pair_del_t)
99399a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
99499a2dd95SBruce Richardson 					 const struct rte_cryptodev *cdev,
99599a2dd95SBruce Richardson 					 int32_t queue_pair_id);
99699a2dd95SBruce Richardson 
99799a2dd95SBruce Richardson /**
99899a2dd95SBruce Richardson  * Start crypto adapter. This callback is invoked if
99999a2dd95SBruce Richardson  * the caps returned from rte_event_crypto_adapter_caps_get(.., cdev_id)
100099a2dd95SBruce Richardson  * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set and queue pairs
100199a2dd95SBruce Richardson  * from cdev_id have been added to the event device.
100299a2dd95SBruce Richardson  *
100399a2dd95SBruce Richardson  * @param dev
100499a2dd95SBruce Richardson  *   Event device pointer
100599a2dd95SBruce Richardson  *
100699a2dd95SBruce Richardson  * @param cdev
100799a2dd95SBruce Richardson  *   Crypto device pointer
100899a2dd95SBruce Richardson  *
100999a2dd95SBruce Richardson  * @return
101099a2dd95SBruce Richardson  *   - 0: Success, crypto adapter started successfully.
101199a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
101299a2dd95SBruce Richardson  */
101399a2dd95SBruce Richardson typedef int (*eventdev_crypto_adapter_start_t)
101499a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
101599a2dd95SBruce Richardson 					 const struct rte_cryptodev *cdev);
101699a2dd95SBruce Richardson 
101799a2dd95SBruce Richardson /**
101899a2dd95SBruce Richardson  * Stop crypto adapter. This callback is invoked if
101999a2dd95SBruce Richardson  * the caps returned from rte_event_crypto_adapter_caps_get(.., cdev_id)
102099a2dd95SBruce Richardson  * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set and queue pairs
102199a2dd95SBruce Richardson  * from cdev_id have been added to the event device.
102299a2dd95SBruce Richardson  *
102399a2dd95SBruce Richardson  * @param dev
102499a2dd95SBruce Richardson  *   Event device pointer
102599a2dd95SBruce Richardson  *
102699a2dd95SBruce Richardson  * @param cdev
102799a2dd95SBruce Richardson  *   Crypto device pointer
102899a2dd95SBruce Richardson  *
102999a2dd95SBruce Richardson  * @return
103099a2dd95SBruce Richardson  *   - 0: Success, crypto adapter stopped successfully.
103199a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
103299a2dd95SBruce Richardson  */
103399a2dd95SBruce Richardson typedef int (*eventdev_crypto_adapter_stop_t)
103499a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
103599a2dd95SBruce Richardson 					 const struct rte_cryptodev *cdev);
103699a2dd95SBruce Richardson 
103799a2dd95SBruce Richardson struct rte_event_crypto_adapter_stats;
103899a2dd95SBruce Richardson 
103999a2dd95SBruce Richardson /**
104099a2dd95SBruce Richardson  * Retrieve crypto adapter statistics.
104199a2dd95SBruce Richardson  *
104299a2dd95SBruce Richardson  * @param dev
104399a2dd95SBruce Richardson  *   Event device pointer
104499a2dd95SBruce Richardson  *
104599a2dd95SBruce Richardson  * @param cdev
104699a2dd95SBruce Richardson  *   Crypto device pointer
104799a2dd95SBruce Richardson  *
104899a2dd95SBruce Richardson  * @param[out] stats
104999a2dd95SBruce Richardson  *   Pointer to stats structure
105099a2dd95SBruce Richardson  *
105199a2dd95SBruce Richardson  * @return
105299a2dd95SBruce Richardson  *   Return 0 on success.
105399a2dd95SBruce Richardson  */
105499a2dd95SBruce Richardson 
105599a2dd95SBruce Richardson typedef int (*eventdev_crypto_adapter_stats_get)
105699a2dd95SBruce Richardson 			(const struct rte_eventdev *dev,
105799a2dd95SBruce Richardson 			 const struct rte_cryptodev *cdev,
105899a2dd95SBruce Richardson 			 struct rte_event_crypto_adapter_stats *stats);
105999a2dd95SBruce Richardson 
106099a2dd95SBruce Richardson /**
106199a2dd95SBruce Richardson  * Reset crypto adapter statistics.
106299a2dd95SBruce Richardson  *
106399a2dd95SBruce Richardson  * @param dev
106499a2dd95SBruce Richardson  *   Event device pointer
106599a2dd95SBruce Richardson  *
106699a2dd95SBruce Richardson  * @param cdev
106799a2dd95SBruce Richardson  *   Crypto device pointer
106899a2dd95SBruce Richardson  *
106999a2dd95SBruce Richardson  * @return
107099a2dd95SBruce Richardson  *   Return 0 on success.
107199a2dd95SBruce Richardson  */
107299a2dd95SBruce Richardson 
107399a2dd95SBruce Richardson typedef int (*eventdev_crypto_adapter_stats_reset)
107499a2dd95SBruce Richardson 			(const struct rte_eventdev *dev,
107599a2dd95SBruce Richardson 			 const struct rte_cryptodev *cdev);
107699a2dd95SBruce Richardson 
107799a2dd95SBruce Richardson /**
107899a2dd95SBruce Richardson  * Retrieve the event device's eth Tx adapter capabilities.
107999a2dd95SBruce Richardson  *
108099a2dd95SBruce Richardson  * @param dev
108199a2dd95SBruce Richardson  *   Event device pointer
108299a2dd95SBruce Richardson  *
108399a2dd95SBruce Richardson  * @param eth_dev
108499a2dd95SBruce Richardson  *   Ethernet device pointer
108599a2dd95SBruce Richardson  *
108699a2dd95SBruce Richardson  * @param[out] caps
108799a2dd95SBruce Richardson  *   A pointer to memory filled with eth Tx adapter capabilities.
108899a2dd95SBruce Richardson  *
108999a2dd95SBruce Richardson  * @return
109099a2dd95SBruce Richardson  *   - 0: Success, driver provides eth Tx adapter capabilities
109199a2dd95SBruce Richardson  *   - <0: Error code returned by the driver function.
109299a2dd95SBruce Richardson  *
109399a2dd95SBruce Richardson  */
109499a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_caps_get_t)
109599a2dd95SBruce Richardson 					(const struct rte_eventdev *dev,
109699a2dd95SBruce Richardson 					const struct rte_eth_dev *eth_dev,
109799a2dd95SBruce Richardson 					uint32_t *caps);
109899a2dd95SBruce Richardson 
109999a2dd95SBruce Richardson /**
110099a2dd95SBruce Richardson  * Create adapter callback.
110199a2dd95SBruce Richardson  *
110299a2dd95SBruce Richardson  * @param id
110399a2dd95SBruce Richardson  *   Adapter identifier
110499a2dd95SBruce Richardson  *
110599a2dd95SBruce Richardson  * @param dev
110699a2dd95SBruce Richardson  *   Event device pointer
110799a2dd95SBruce Richardson  *
110899a2dd95SBruce Richardson  * @return
110999a2dd95SBruce Richardson  *   - 0: Success.
111099a2dd95SBruce Richardson  *   - <0: Error code on failure.
111199a2dd95SBruce Richardson  */
111299a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_create_t)(uint8_t id,
111399a2dd95SBruce Richardson 					const struct rte_eventdev *dev);
111499a2dd95SBruce Richardson 
111599a2dd95SBruce Richardson /**
111699a2dd95SBruce Richardson  * Free adapter callback.
111799a2dd95SBruce Richardson  *
111899a2dd95SBruce Richardson  * @param id
111999a2dd95SBruce Richardson  *   Adapter identifier
112099a2dd95SBruce Richardson  *
112199a2dd95SBruce Richardson  * @param dev
112299a2dd95SBruce Richardson  *   Event device pointer
112399a2dd95SBruce Richardson  *
112499a2dd95SBruce Richardson  * @return
112599a2dd95SBruce Richardson  *   - 0: Success.
112699a2dd95SBruce Richardson  *   - <0: Error code on failure.
112799a2dd95SBruce Richardson  */
112899a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_free_t)(uint8_t id,
112999a2dd95SBruce Richardson 					const struct rte_eventdev *dev);
113099a2dd95SBruce Richardson 
113199a2dd95SBruce Richardson /**
113299a2dd95SBruce Richardson  * Add a Tx queue to the adapter.
113399a2dd95SBruce Richardson  * A queue value of -1 is used to indicate all
113499a2dd95SBruce Richardson  * queues within the device.
113599a2dd95SBruce Richardson  *
113699a2dd95SBruce Richardson  * @param id
113799a2dd95SBruce Richardson  *   Adapter identifier
113899a2dd95SBruce Richardson  *
113999a2dd95SBruce Richardson  * @param dev
114099a2dd95SBruce Richardson  *   Event device pointer
114199a2dd95SBruce Richardson  *
114299a2dd95SBruce Richardson  * @param eth_dev
114399a2dd95SBruce Richardson  *   Ethernet device pointer
114499a2dd95SBruce Richardson  *
114599a2dd95SBruce Richardson  * @param tx_queue_id
114699a2dd95SBruce Richardson  *   Transmit queue index
114799a2dd95SBruce Richardson  *
114899a2dd95SBruce Richardson  * @return
114999a2dd95SBruce Richardson  *   - 0: Success.
115099a2dd95SBruce Richardson  *   - <0: Error code on failure.
115199a2dd95SBruce Richardson  */
115299a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_queue_add_t)(
115399a2dd95SBruce Richardson 					uint8_t id,
115499a2dd95SBruce Richardson 					const struct rte_eventdev *dev,
115599a2dd95SBruce Richardson 					const struct rte_eth_dev *eth_dev,
115699a2dd95SBruce Richardson 					int32_t tx_queue_id);
115799a2dd95SBruce Richardson 
115899a2dd95SBruce Richardson /**
115999a2dd95SBruce Richardson  * Delete a Tx queue from the adapter.
116099a2dd95SBruce Richardson  * A queue value of -1 is used to indicate all
116199a2dd95SBruce Richardson  * queues within the device, that have been added to this
116299a2dd95SBruce Richardson  * adapter.
116399a2dd95SBruce Richardson  *
116499a2dd95SBruce Richardson  * @param id
116599a2dd95SBruce Richardson  *   Adapter identifier
116699a2dd95SBruce Richardson  *
116799a2dd95SBruce Richardson  * @param dev
116899a2dd95SBruce Richardson  *   Event device pointer
116999a2dd95SBruce Richardson  *
117099a2dd95SBruce Richardson  * @param eth_dev
117199a2dd95SBruce Richardson  *   Ethernet device pointer
117299a2dd95SBruce Richardson  *
117399a2dd95SBruce Richardson  * @param tx_queue_id
117499a2dd95SBruce Richardson  *   Transmit queue index
117599a2dd95SBruce Richardson  *
117699a2dd95SBruce Richardson  * @return
117799a2dd95SBruce Richardson  *  - 0: Success, Queues deleted successfully.
117899a2dd95SBruce Richardson  *  - <0: Error code on failure.
117999a2dd95SBruce Richardson  */
118099a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_queue_del_t)(
118199a2dd95SBruce Richardson 					uint8_t id,
118299a2dd95SBruce Richardson 					const struct rte_eventdev *dev,
118399a2dd95SBruce Richardson 					const struct rte_eth_dev *eth_dev,
118499a2dd95SBruce Richardson 					int32_t tx_queue_id);
118599a2dd95SBruce Richardson 
118699a2dd95SBruce Richardson /**
118799a2dd95SBruce Richardson  * Start the adapter.
118899a2dd95SBruce Richardson  *
118999a2dd95SBruce Richardson  * @param id
119099a2dd95SBruce Richardson  *   Adapter identifier
119199a2dd95SBruce Richardson  *
119299a2dd95SBruce Richardson  * @param dev
119399a2dd95SBruce Richardson  *   Event device pointer
119499a2dd95SBruce Richardson  *
119599a2dd95SBruce Richardson  * @return
119699a2dd95SBruce Richardson  *  - 0: Success, Adapter started correctly.
119799a2dd95SBruce Richardson  *  - <0: Error code on failure.
119899a2dd95SBruce Richardson  */
119999a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_start_t)(uint8_t id,
120099a2dd95SBruce Richardson 					const struct rte_eventdev *dev);
120199a2dd95SBruce Richardson 
120299a2dd95SBruce Richardson /**
120399a2dd95SBruce Richardson  * Stop the adapter.
120499a2dd95SBruce Richardson  *
120599a2dd95SBruce Richardson  * @param id
120699a2dd95SBruce Richardson  *  Adapter identifier
120799a2dd95SBruce Richardson  *
120899a2dd95SBruce Richardson  * @param dev
120999a2dd95SBruce Richardson  *   Event device pointer
121099a2dd95SBruce Richardson  *
121199a2dd95SBruce Richardson  * @return
121299a2dd95SBruce Richardson  *  - 0: Success.
121399a2dd95SBruce Richardson  *  - <0: Error code on failure.
121499a2dd95SBruce Richardson  */
121599a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_stop_t)(uint8_t id,
121699a2dd95SBruce Richardson 					const struct rte_eventdev *dev);
121799a2dd95SBruce Richardson 
121899a2dd95SBruce Richardson struct rte_event_eth_tx_adapter_stats;
121999a2dd95SBruce Richardson 
122099a2dd95SBruce Richardson /**
122199a2dd95SBruce Richardson  * Retrieve statistics for an adapter
122299a2dd95SBruce Richardson  *
122399a2dd95SBruce Richardson  * @param id
122499a2dd95SBruce Richardson  *  Adapter identifier
122599a2dd95SBruce Richardson  *
122699a2dd95SBruce Richardson  * @param dev
122799a2dd95SBruce Richardson  *   Event device pointer
122899a2dd95SBruce Richardson  *
122999a2dd95SBruce Richardson  * @param [out] stats
123099a2dd95SBruce Richardson  *  A pointer to structure used to retrieve statistics for an adapter
123199a2dd95SBruce Richardson  *
123299a2dd95SBruce Richardson  * @return
123399a2dd95SBruce Richardson  *  - 0: Success, statistics retrieved successfully.
123499a2dd95SBruce Richardson  *  - <0: Error code on failure.
123599a2dd95SBruce Richardson  */
123699a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_stats_get_t)(
123799a2dd95SBruce Richardson 				uint8_t id,
123899a2dd95SBruce Richardson 				const struct rte_eventdev *dev,
123999a2dd95SBruce Richardson 				struct rte_event_eth_tx_adapter_stats *stats);
124099a2dd95SBruce Richardson 
124199a2dd95SBruce Richardson /**
124299a2dd95SBruce Richardson  * Reset statistics for an adapter
124399a2dd95SBruce Richardson  *
124499a2dd95SBruce Richardson  * @param id
124599a2dd95SBruce Richardson  *  Adapter identifier
124699a2dd95SBruce Richardson  *
124799a2dd95SBruce Richardson  * @param dev
124899a2dd95SBruce Richardson  *   Event device pointer
124999a2dd95SBruce Richardson  *
125099a2dd95SBruce Richardson  * @return
125199a2dd95SBruce Richardson  *  - 0: Success, statistics retrieved successfully.
125299a2dd95SBruce Richardson  *  - <0: Error code on failure.
125399a2dd95SBruce Richardson  */
125499a2dd95SBruce Richardson typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id,
125599a2dd95SBruce Richardson 					const struct rte_eventdev *dev);
125699a2dd95SBruce Richardson 
125799a2dd95SBruce Richardson /** Event device operations function pointer table */
125823d06e37SPavan Nikhilesh struct eventdev_ops {
125999a2dd95SBruce Richardson 	eventdev_info_get_t dev_infos_get;	/**< Get device info. */
126099a2dd95SBruce Richardson 	eventdev_configure_t dev_configure;	/**< Configure device. */
126199a2dd95SBruce Richardson 	eventdev_start_t dev_start;		/**< Start device. */
126299a2dd95SBruce Richardson 	eventdev_stop_t dev_stop;		/**< Stop device. */
126399a2dd95SBruce Richardson 	eventdev_close_t dev_close;		/**< Close device. */
126499a2dd95SBruce Richardson 
126599a2dd95SBruce Richardson 	eventdev_queue_default_conf_get_t queue_def_conf;
126699a2dd95SBruce Richardson 	/**< Get default queue configuration. */
126799a2dd95SBruce Richardson 	eventdev_queue_setup_t queue_setup;
126899a2dd95SBruce Richardson 	/**< Set up an event queue. */
126999a2dd95SBruce Richardson 	eventdev_queue_release_t queue_release;
127099a2dd95SBruce Richardson 	/**< Release an event queue. */
1271*44516e6bSShijith Thotton 	eventdev_queue_attr_get_t queue_attr_get;
1272*44516e6bSShijith Thotton 	/**< Get an event queue attribute. */
127397b914f4SShijith Thotton 	eventdev_queue_attr_set_t queue_attr_set;
127497b914f4SShijith Thotton 	/**< Set an event queue attribute. */
127599a2dd95SBruce Richardson 
127699a2dd95SBruce Richardson 	eventdev_port_default_conf_get_t port_def_conf;
127799a2dd95SBruce Richardson 	/**< Get default port configuration. */
127899a2dd95SBruce Richardson 	eventdev_port_setup_t port_setup;
127999a2dd95SBruce Richardson 	/**< Set up an event port. */
128099a2dd95SBruce Richardson 	eventdev_port_release_t port_release;
128199a2dd95SBruce Richardson 	/**< Release an event port. */
12821ff23ce6SPavan Nikhilesh 	eventdev_port_quiesce_t port_quiesce;
12831ff23ce6SPavan Nikhilesh 	/**< Quiesce an event port. */
128499a2dd95SBruce Richardson 
128599a2dd95SBruce Richardson 	eventdev_port_link_t port_link;
128699a2dd95SBruce Richardson 	/**< Link event queues to an event port. */
128799a2dd95SBruce Richardson 	eventdev_port_unlink_t port_unlink;
128899a2dd95SBruce Richardson 	/**< Unlink event queues from an event port. */
128999a2dd95SBruce Richardson 	eventdev_port_unlinks_in_progress_t port_unlinks_in_progress;
129099a2dd95SBruce Richardson 	/**< Unlinks in progress on an event port. */
129199a2dd95SBruce Richardson 	eventdev_dequeue_timeout_ticks_t timeout_ticks;
129299a2dd95SBruce Richardson 	/**< Converts ns to *timeout_ticks* value for rte_event_dequeue() */
129399a2dd95SBruce Richardson 	eventdev_dump_t dump;
129499a2dd95SBruce Richardson 	/* Dump internal information */
129599a2dd95SBruce Richardson 
129699a2dd95SBruce Richardson 	eventdev_xstats_get_t xstats_get;
129799a2dd95SBruce Richardson 	/**< Get extended device statistics. */
129899a2dd95SBruce Richardson 	eventdev_xstats_get_names_t xstats_get_names;
129999a2dd95SBruce Richardson 	/**< Get names of extended stats. */
130099a2dd95SBruce Richardson 	eventdev_xstats_get_by_name xstats_get_by_name;
130199a2dd95SBruce Richardson 	/**< Get one value by name. */
130299a2dd95SBruce Richardson 	eventdev_xstats_reset_t xstats_reset;
130399a2dd95SBruce Richardson 	/**< Reset the statistics values in xstats. */
130499a2dd95SBruce Richardson 
130599a2dd95SBruce Richardson 	eventdev_eth_rx_adapter_caps_get_t eth_rx_adapter_caps_get;
130699a2dd95SBruce Richardson 	/**< Get ethernet Rx adapter capabilities */
130799a2dd95SBruce Richardson 	eventdev_eth_rx_adapter_queue_add_t eth_rx_adapter_queue_add;
130899a2dd95SBruce Richardson 	/**< Add Rx queues to ethernet Rx adapter */
130999a2dd95SBruce Richardson 	eventdev_eth_rx_adapter_queue_del_t eth_rx_adapter_queue_del;
131099a2dd95SBruce Richardson 	/**< Delete Rx queues from ethernet Rx adapter */
1311da781e64SGanapati Kundapura 	eventdev_eth_rx_adapter_queue_conf_get_t eth_rx_adapter_queue_conf_get;
1312da781e64SGanapati Kundapura 	/**< Get Rx adapter queue info */
131399a2dd95SBruce Richardson 	eventdev_eth_rx_adapter_start_t eth_rx_adapter_start;
131499a2dd95SBruce Richardson 	/**< Start ethernet Rx adapter */
131599a2dd95SBruce Richardson 	eventdev_eth_rx_adapter_stop_t eth_rx_adapter_stop;
131699a2dd95SBruce Richardson 	/**< Stop ethernet Rx adapter */
131799a2dd95SBruce Richardson 	eventdev_eth_rx_adapter_stats_get eth_rx_adapter_stats_get;
131899a2dd95SBruce Richardson 	/**< Get ethernet Rx stats */
131999a2dd95SBruce Richardson 	eventdev_eth_rx_adapter_stats_reset eth_rx_adapter_stats_reset;
132099a2dd95SBruce Richardson 	/**< Reset ethernet Rx stats */
132199a2dd95SBruce Richardson 	eventdev_eth_rx_adapter_vector_limits_get_t
132299a2dd95SBruce Richardson 		eth_rx_adapter_vector_limits_get;
132399a2dd95SBruce Richardson 	/**< Get event vector limits for the Rx adapter */
132499a2dd95SBruce Richardson 
132599a2dd95SBruce Richardson 	eventdev_timer_adapter_caps_get_t timer_adapter_caps_get;
132699a2dd95SBruce Richardson 	/**< Get timer adapter capabilities */
132799a2dd95SBruce Richardson 
132899a2dd95SBruce Richardson 	eventdev_crypto_adapter_caps_get_t crypto_adapter_caps_get;
132999a2dd95SBruce Richardson 	/**< Get crypto adapter capabilities */
133099a2dd95SBruce Richardson 	eventdev_crypto_adapter_queue_pair_add_t crypto_adapter_queue_pair_add;
133199a2dd95SBruce Richardson 	/**< Add queue pair to crypto adapter */
133299a2dd95SBruce Richardson 	eventdev_crypto_adapter_queue_pair_del_t crypto_adapter_queue_pair_del;
133399a2dd95SBruce Richardson 	/**< Delete queue pair from crypto adapter */
133499a2dd95SBruce Richardson 	eventdev_crypto_adapter_start_t crypto_adapter_start;
133599a2dd95SBruce Richardson 	/**< Start crypto adapter */
133699a2dd95SBruce Richardson 	eventdev_crypto_adapter_stop_t crypto_adapter_stop;
133799a2dd95SBruce Richardson 	/**< Stop crypto adapter */
133899a2dd95SBruce Richardson 	eventdev_crypto_adapter_stats_get crypto_adapter_stats_get;
133999a2dd95SBruce Richardson 	/**< Get crypto stats */
134099a2dd95SBruce Richardson 	eventdev_crypto_adapter_stats_reset crypto_adapter_stats_reset;
134199a2dd95SBruce Richardson 	/**< Reset crypto stats */
134299a2dd95SBruce Richardson 
1343995b150cSNaga Harish K S V 	eventdev_eth_rx_adapter_q_stats_get eth_rx_adapter_queue_stats_get;
1344995b150cSNaga Harish K S V 	/**< Get ethernet Rx queue stats */
1345995b150cSNaga Harish K S V 	eventdev_eth_rx_adapter_q_stats_reset eth_rx_adapter_queue_stats_reset;
1346995b150cSNaga Harish K S V 	/**< Reset ethernet Rx queue stats */
1347995b150cSNaga Harish K S V 
134899a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_caps_get_t eth_tx_adapter_caps_get;
134999a2dd95SBruce Richardson 	/**< Get ethernet Tx adapter capabilities */
135099a2dd95SBruce Richardson 
135199a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_create_t eth_tx_adapter_create;
135299a2dd95SBruce Richardson 	/**< Create adapter callback */
135399a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_free_t eth_tx_adapter_free;
135499a2dd95SBruce Richardson 	/**< Free adapter callback */
135599a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_queue_add_t eth_tx_adapter_queue_add;
135699a2dd95SBruce Richardson 	/**< Add Tx queues to the eth Tx adapter */
135799a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_queue_del_t eth_tx_adapter_queue_del;
135899a2dd95SBruce Richardson 	/**< Delete Tx queues from the eth Tx adapter */
135999a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_start_t eth_tx_adapter_start;
136099a2dd95SBruce Richardson 	/**< Start eth Tx adapter */
136199a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_stop_t eth_tx_adapter_stop;
136299a2dd95SBruce Richardson 	/**< Stop eth Tx adapter */
136399a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_stats_get_t eth_tx_adapter_stats_get;
136499a2dd95SBruce Richardson 	/**< Get eth Tx adapter statistics */
136599a2dd95SBruce Richardson 	eventdev_eth_tx_adapter_stats_reset_t eth_tx_adapter_stats_reset;
136699a2dd95SBruce Richardson 	/**< Reset eth Tx adapter statistics */
136799a2dd95SBruce Richardson 
136899a2dd95SBruce Richardson 	eventdev_selftest dev_selftest;
136999a2dd95SBruce Richardson 	/**< Start eventdev Selftest */
137099a2dd95SBruce Richardson 
137199a2dd95SBruce Richardson 	eventdev_stop_flush_t dev_stop_flush;
137299a2dd95SBruce Richardson 	/**< User-provided event flush function */
137399a2dd95SBruce Richardson };
137499a2dd95SBruce Richardson 
137599a2dd95SBruce Richardson /**
137699a2dd95SBruce Richardson  * Allocates a new eventdev slot for an event device and returns the pointer
137799a2dd95SBruce Richardson  * to that slot for the driver to use.
137899a2dd95SBruce Richardson  *
137999a2dd95SBruce Richardson  * @param name
138099a2dd95SBruce Richardson  *   Unique identifier name for each device
138199a2dd95SBruce Richardson  * @param socket_id
138299a2dd95SBruce Richardson  *   Socket to allocate resources on.
138399a2dd95SBruce Richardson  * @return
138499a2dd95SBruce Richardson  *   - Slot in the rte_dev_devices array for a new device;
138599a2dd95SBruce Richardson  */
138623d06e37SPavan Nikhilesh __rte_internal
138799a2dd95SBruce Richardson struct rte_eventdev *
138899a2dd95SBruce Richardson rte_event_pmd_allocate(const char *name, int socket_id);
138999a2dd95SBruce Richardson 
139099a2dd95SBruce Richardson /**
139199a2dd95SBruce Richardson  * Release the specified eventdev device.
139299a2dd95SBruce Richardson  *
139399a2dd95SBruce Richardson  * @param eventdev
139499a2dd95SBruce Richardson  * The *eventdev* pointer is the address of the *rte_eventdev* structure.
139599a2dd95SBruce Richardson  * @return
139699a2dd95SBruce Richardson  *   - 0 on success, negative on error
139799a2dd95SBruce Richardson  */
139823d06e37SPavan Nikhilesh __rte_internal
139999a2dd95SBruce Richardson int
140099a2dd95SBruce Richardson rte_event_pmd_release(struct rte_eventdev *eventdev);
140199a2dd95SBruce Richardson 
1402d35e6132SPavan Nikhilesh /**
1403d35e6132SPavan Nikhilesh  *
1404d35e6132SPavan Nikhilesh  * @internal
1405d35e6132SPavan Nikhilesh  * This is the last step of device probing.
1406d35e6132SPavan Nikhilesh  * It must be called after a port is allocated and initialized successfully.
1407d35e6132SPavan Nikhilesh  *
1408d35e6132SPavan Nikhilesh  * @param eventdev
1409d35e6132SPavan Nikhilesh  *  New event device.
1410d35e6132SPavan Nikhilesh  */
1411d35e6132SPavan Nikhilesh __rte_internal
1412d35e6132SPavan Nikhilesh void
1413d35e6132SPavan Nikhilesh event_dev_probing_finish(struct rte_eventdev *eventdev);
1414d35e6132SPavan Nikhilesh 
1415d35e6132SPavan Nikhilesh /**
1416d35e6132SPavan Nikhilesh  * Reset eventdevice fastpath APIs to dummy values.
1417d35e6132SPavan Nikhilesh  *
1418d35e6132SPavan Nikhilesh  * @param fp_ops
1419d35e6132SPavan Nikhilesh  * The *fp_ops* pointer to reset.
1420d35e6132SPavan Nikhilesh  */
1421d35e6132SPavan Nikhilesh __rte_internal
1422d35e6132SPavan Nikhilesh void
1423d35e6132SPavan Nikhilesh event_dev_fp_ops_reset(struct rte_event_fp_ops *fp_op);
1424d35e6132SPavan Nikhilesh 
1425d35e6132SPavan Nikhilesh /**
1426d35e6132SPavan Nikhilesh  * Set eventdevice fastpath APIs to event device values.
1427d35e6132SPavan Nikhilesh  *
1428d35e6132SPavan Nikhilesh  * @param fp_ops
1429d35e6132SPavan Nikhilesh  * The *fp_ops* pointer to set.
1430d35e6132SPavan Nikhilesh  */
1431d35e6132SPavan Nikhilesh __rte_internal
1432d35e6132SPavan Nikhilesh void
1433d35e6132SPavan Nikhilesh event_dev_fp_ops_set(struct rte_event_fp_ops *fp_ops,
1434d35e6132SPavan Nikhilesh 		     const struct rte_eventdev *dev);
1435d35e6132SPavan Nikhilesh 
14362c552933SBrian Dooley #ifdef __cplusplus
14372c552933SBrian Dooley }
14382c552933SBrian Dooley #endif
14392c552933SBrian Dooley 
144099a2dd95SBruce Richardson #endif /* _RTE_EVENTDEV_PMD_H_ */
1441