1d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2d30ea906Sjfb8856606  * Copyright(c) 2016 Cavium, Inc
32bfe3f2eSlogwang  */
42bfe3f2eSlogwang 
52bfe3f2eSlogwang #ifndef _RTE_EVENTDEV_PMD_H_
62bfe3f2eSlogwang #define _RTE_EVENTDEV_PMD_H_
72bfe3f2eSlogwang 
82bfe3f2eSlogwang /** @file
92bfe3f2eSlogwang  * RTE Event PMD APIs
102bfe3f2eSlogwang  *
112bfe3f2eSlogwang  * @note
122bfe3f2eSlogwang  * These API are from event PMD only and user applications should not call
132bfe3f2eSlogwang  * them directly.
142bfe3f2eSlogwang  */
152bfe3f2eSlogwang 
162bfe3f2eSlogwang #ifdef __cplusplus
172bfe3f2eSlogwang extern "C" {
182bfe3f2eSlogwang #endif
192bfe3f2eSlogwang 
202bfe3f2eSlogwang #include <string.h>
212bfe3f2eSlogwang 
222bfe3f2eSlogwang #include <rte_common.h>
23*2d9fd380Sjfb8856606 #include <rte_compat.h>
242bfe3f2eSlogwang #include <rte_config.h>
252bfe3f2eSlogwang #include <rte_dev.h>
262bfe3f2eSlogwang #include <rte_log.h>
272bfe3f2eSlogwang #include <rte_malloc.h>
28*2d9fd380Sjfb8856606 #include <rte_mbuf.h>
29*2d9fd380Sjfb8856606 #include <rte_mbuf_dyn.h>
302bfe3f2eSlogwang 
312bfe3f2eSlogwang #include "rte_eventdev.h"
32d30ea906Sjfb8856606 #include "rte_event_timer_adapter_pmd.h"
332bfe3f2eSlogwang 
342bfe3f2eSlogwang /* Logging Macros */
352bfe3f2eSlogwang #define RTE_EDEV_LOG_ERR(...) \
362bfe3f2eSlogwang 	RTE_LOG(ERR, EVENTDEV, \
372bfe3f2eSlogwang 		RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
382bfe3f2eSlogwang 			__func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
392bfe3f2eSlogwang 
402bfe3f2eSlogwang #ifdef RTE_LIBRTE_EVENTDEV_DEBUG
412bfe3f2eSlogwang #define RTE_EDEV_LOG_DEBUG(...) \
422bfe3f2eSlogwang 	RTE_LOG(DEBUG, EVENTDEV, \
432bfe3f2eSlogwang 		RTE_FMT("%s() line %u: " RTE_FMT_HEAD(__VA_ARGS__,) "\n", \
442bfe3f2eSlogwang 			__func__, __LINE__, RTE_FMT_TAIL(__VA_ARGS__,)))
452bfe3f2eSlogwang #else
462bfe3f2eSlogwang #define RTE_EDEV_LOG_DEBUG(...) (void)0
472bfe3f2eSlogwang #endif
482bfe3f2eSlogwang 
492bfe3f2eSlogwang /* Macros to check for valid device */
502bfe3f2eSlogwang #define RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, retval) do { \
512bfe3f2eSlogwang 	if (!rte_event_pmd_is_valid_dev((dev_id))) { \
522bfe3f2eSlogwang 		RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
532bfe3f2eSlogwang 		return retval; \
542bfe3f2eSlogwang 	} \
552bfe3f2eSlogwang } while (0)
562bfe3f2eSlogwang 
572bfe3f2eSlogwang #define RTE_EVENTDEV_VALID_DEVID_OR_ERRNO_RET(dev_id, errno, retval) do { \
582bfe3f2eSlogwang 	if (!rte_event_pmd_is_valid_dev((dev_id))) { \
592bfe3f2eSlogwang 		RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
602bfe3f2eSlogwang 		rte_errno = errno; \
612bfe3f2eSlogwang 		return retval; \
622bfe3f2eSlogwang 	} \
632bfe3f2eSlogwang } while (0)
642bfe3f2eSlogwang 
652bfe3f2eSlogwang #define RTE_EVENTDEV_VALID_DEVID_OR_RET(dev_id) do { \
662bfe3f2eSlogwang 	if (!rte_event_pmd_is_valid_dev((dev_id))) { \
672bfe3f2eSlogwang 		RTE_EDEV_LOG_ERR("Invalid dev_id=%d\n", dev_id); \
682bfe3f2eSlogwang 		return; \
692bfe3f2eSlogwang 	} \
702bfe3f2eSlogwang } while (0)
712bfe3f2eSlogwang 
722bfe3f2eSlogwang #define RTE_EVENT_ETH_RX_ADAPTER_SW_CAP \
732bfe3f2eSlogwang 		((RTE_EVENT_ETH_RX_ADAPTER_CAP_OVERRIDE_FLOW_ID) | \
742bfe3f2eSlogwang 			(RTE_EVENT_ETH_RX_ADAPTER_CAP_MULTI_EVENTQ))
752bfe3f2eSlogwang 
76d30ea906Sjfb8856606 #define RTE_EVENT_CRYPTO_ADAPTER_SW_CAP \
77d30ea906Sjfb8856606 		RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA
78d30ea906Sjfb8856606 
792bfe3f2eSlogwang /**< Ethernet Rx adapter cap to return If the packet transfers from
802bfe3f2eSlogwang  * the ethdev to eventdev use a SW service function
812bfe3f2eSlogwang  */
822bfe3f2eSlogwang 
832bfe3f2eSlogwang #define RTE_EVENTDEV_DETACHED  (0)
842bfe3f2eSlogwang #define RTE_EVENTDEV_ATTACHED  (1)
852bfe3f2eSlogwang 
862bfe3f2eSlogwang struct rte_eth_dev;
872bfe3f2eSlogwang 
882bfe3f2eSlogwang /** Global structure used for maintaining state of allocated event devices */
892bfe3f2eSlogwang struct rte_eventdev_global {
902bfe3f2eSlogwang 	uint8_t nb_devs;	/**< Number of devices found */
912bfe3f2eSlogwang };
922bfe3f2eSlogwang 
932bfe3f2eSlogwang extern struct rte_eventdev *rte_eventdevs;
942bfe3f2eSlogwang /** The pool of rte_eventdev structures. */
952bfe3f2eSlogwang 
962bfe3f2eSlogwang /**
972bfe3f2eSlogwang  * Get the rte_eventdev structure device pointer for the named device.
982bfe3f2eSlogwang  *
992bfe3f2eSlogwang  * @param name
1002bfe3f2eSlogwang  *   device name to select the device structure.
1012bfe3f2eSlogwang  *
1022bfe3f2eSlogwang  * @return
1032bfe3f2eSlogwang  *   - The rte_eventdev structure pointer for the given device ID.
1042bfe3f2eSlogwang  */
1052bfe3f2eSlogwang static inline struct rte_eventdev *
rte_event_pmd_get_named_dev(const char * name)1062bfe3f2eSlogwang rte_event_pmd_get_named_dev(const char *name)
1072bfe3f2eSlogwang {
1082bfe3f2eSlogwang 	struct rte_eventdev *dev;
1092bfe3f2eSlogwang 	unsigned int i;
1102bfe3f2eSlogwang 
1112bfe3f2eSlogwang 	if (name == NULL)
1122bfe3f2eSlogwang 		return NULL;
1132bfe3f2eSlogwang 
1142bfe3f2eSlogwang 	for (i = 0; i < RTE_EVENT_MAX_DEVS; i++) {
1152bfe3f2eSlogwang 		dev = &rte_eventdevs[i];
1162bfe3f2eSlogwang 		if ((dev->attached == RTE_EVENTDEV_ATTACHED) &&
1172bfe3f2eSlogwang 				(strcmp(dev->data->name, name) == 0))
1182bfe3f2eSlogwang 			return dev;
1192bfe3f2eSlogwang 	}
1202bfe3f2eSlogwang 
1212bfe3f2eSlogwang 	return NULL;
1222bfe3f2eSlogwang }
1232bfe3f2eSlogwang 
1242bfe3f2eSlogwang /**
1252bfe3f2eSlogwang  * Validate if the event device index is valid attached event device.
1262bfe3f2eSlogwang  *
1272bfe3f2eSlogwang  * @param dev_id
1282bfe3f2eSlogwang  *   Event device index.
1292bfe3f2eSlogwang  *
1302bfe3f2eSlogwang  * @return
1312bfe3f2eSlogwang  *   - If the device index is valid (1) or not (0).
1322bfe3f2eSlogwang  */
1332bfe3f2eSlogwang static inline unsigned
rte_event_pmd_is_valid_dev(uint8_t dev_id)1342bfe3f2eSlogwang rte_event_pmd_is_valid_dev(uint8_t dev_id)
1352bfe3f2eSlogwang {
1362bfe3f2eSlogwang 	struct rte_eventdev *dev;
1372bfe3f2eSlogwang 
1382bfe3f2eSlogwang 	if (dev_id >= RTE_EVENT_MAX_DEVS)
1392bfe3f2eSlogwang 		return 0;
1402bfe3f2eSlogwang 
1412bfe3f2eSlogwang 	dev = &rte_eventdevs[dev_id];
1422bfe3f2eSlogwang 	if (dev->attached != RTE_EVENTDEV_ATTACHED)
1432bfe3f2eSlogwang 		return 0;
1442bfe3f2eSlogwang 	else
1452bfe3f2eSlogwang 		return 1;
1462bfe3f2eSlogwang }
1472bfe3f2eSlogwang 
1482bfe3f2eSlogwang /**
1492bfe3f2eSlogwang  * Definitions of all functions exported by a driver through the
1502bfe3f2eSlogwang  * the generic structure of type *event_dev_ops* supplied in the
1512bfe3f2eSlogwang  * *rte_eventdev* structure associated with a device.
1522bfe3f2eSlogwang  */
1532bfe3f2eSlogwang 
1542bfe3f2eSlogwang /**
1552bfe3f2eSlogwang  * Get device information of a device.
1562bfe3f2eSlogwang  *
1572bfe3f2eSlogwang  * @param dev
1582bfe3f2eSlogwang  *   Event device pointer
1592bfe3f2eSlogwang  * @param dev_info
1602bfe3f2eSlogwang  *   Event device information structure
1612bfe3f2eSlogwang  *
1622bfe3f2eSlogwang  * @return
1632bfe3f2eSlogwang  *   Returns 0 on success
1642bfe3f2eSlogwang  */
1652bfe3f2eSlogwang typedef void (*eventdev_info_get_t)(struct rte_eventdev *dev,
1662bfe3f2eSlogwang 		struct rte_event_dev_info *dev_info);
1672bfe3f2eSlogwang 
1682bfe3f2eSlogwang /**
1692bfe3f2eSlogwang  * Configure a device.
1702bfe3f2eSlogwang  *
1712bfe3f2eSlogwang  * @param dev
1722bfe3f2eSlogwang  *   Event device pointer
1732bfe3f2eSlogwang  *
1742bfe3f2eSlogwang  * @return
1752bfe3f2eSlogwang  *   Returns 0 on success
1762bfe3f2eSlogwang  */
1772bfe3f2eSlogwang typedef int (*eventdev_configure_t)(const struct rte_eventdev *dev);
1782bfe3f2eSlogwang 
1792bfe3f2eSlogwang /**
1802bfe3f2eSlogwang  * Start a configured device.
1812bfe3f2eSlogwang  *
1822bfe3f2eSlogwang  * @param dev
1832bfe3f2eSlogwang  *   Event device pointer
1842bfe3f2eSlogwang  *
1852bfe3f2eSlogwang  * @return
1862bfe3f2eSlogwang  *   Returns 0 on success
1872bfe3f2eSlogwang  */
1882bfe3f2eSlogwang typedef int (*eventdev_start_t)(struct rte_eventdev *dev);
1892bfe3f2eSlogwang 
1902bfe3f2eSlogwang /**
1912bfe3f2eSlogwang  * Stop a configured device.
1922bfe3f2eSlogwang  *
1932bfe3f2eSlogwang  * @param dev
1942bfe3f2eSlogwang  *   Event device pointer
1952bfe3f2eSlogwang  */
1962bfe3f2eSlogwang typedef void (*eventdev_stop_t)(struct rte_eventdev *dev);
1972bfe3f2eSlogwang 
1982bfe3f2eSlogwang /**
1992bfe3f2eSlogwang  * Close a configured device.
2002bfe3f2eSlogwang  *
2012bfe3f2eSlogwang  * @param dev
2022bfe3f2eSlogwang  *   Event device pointer
2032bfe3f2eSlogwang  *
2042bfe3f2eSlogwang  * @return
2052bfe3f2eSlogwang  * - 0 on success
2062bfe3f2eSlogwang  * - (-EAGAIN) if can't close as device is busy
2072bfe3f2eSlogwang  */
2082bfe3f2eSlogwang typedef int (*eventdev_close_t)(struct rte_eventdev *dev);
2092bfe3f2eSlogwang 
2102bfe3f2eSlogwang /**
2112bfe3f2eSlogwang  * Retrieve the default event queue configuration.
2122bfe3f2eSlogwang  *
2132bfe3f2eSlogwang  * @param dev
2142bfe3f2eSlogwang  *   Event device pointer
2152bfe3f2eSlogwang  * @param queue_id
2162bfe3f2eSlogwang  *   Event queue index
2172bfe3f2eSlogwang  * @param[out] queue_conf
2182bfe3f2eSlogwang  *   Event queue configuration structure
2192bfe3f2eSlogwang  *
2202bfe3f2eSlogwang  */
2212bfe3f2eSlogwang typedef void (*eventdev_queue_default_conf_get_t)(struct rte_eventdev *dev,
2222bfe3f2eSlogwang 		uint8_t queue_id, struct rte_event_queue_conf *queue_conf);
2232bfe3f2eSlogwang 
2242bfe3f2eSlogwang /**
2252bfe3f2eSlogwang  * Setup an event queue.
2262bfe3f2eSlogwang  *
2272bfe3f2eSlogwang  * @param dev
2282bfe3f2eSlogwang  *   Event device pointer
2292bfe3f2eSlogwang  * @param queue_id
2302bfe3f2eSlogwang  *   Event queue index
2312bfe3f2eSlogwang  * @param queue_conf
2322bfe3f2eSlogwang  *   Event queue configuration structure
2332bfe3f2eSlogwang  *
2342bfe3f2eSlogwang  * @return
2352bfe3f2eSlogwang  *   Returns 0 on success.
2362bfe3f2eSlogwang  */
2372bfe3f2eSlogwang typedef int (*eventdev_queue_setup_t)(struct rte_eventdev *dev,
2382bfe3f2eSlogwang 		uint8_t queue_id,
2392bfe3f2eSlogwang 		const struct rte_event_queue_conf *queue_conf);
2402bfe3f2eSlogwang 
2412bfe3f2eSlogwang /**
2422bfe3f2eSlogwang  * Release resources allocated by given event queue.
2432bfe3f2eSlogwang  *
2442bfe3f2eSlogwang  * @param dev
2452bfe3f2eSlogwang  *   Event device pointer
2462bfe3f2eSlogwang  * @param queue_id
2472bfe3f2eSlogwang  *   Event queue index
2482bfe3f2eSlogwang  *
2492bfe3f2eSlogwang  */
2502bfe3f2eSlogwang typedef void (*eventdev_queue_release_t)(struct rte_eventdev *dev,
2512bfe3f2eSlogwang 		uint8_t queue_id);
2522bfe3f2eSlogwang 
2532bfe3f2eSlogwang /**
2542bfe3f2eSlogwang  * Retrieve the default event port configuration.
2552bfe3f2eSlogwang  *
2562bfe3f2eSlogwang  * @param dev
2572bfe3f2eSlogwang  *   Event device pointer
2582bfe3f2eSlogwang  * @param port_id
2592bfe3f2eSlogwang  *   Event port index
2602bfe3f2eSlogwang  * @param[out] port_conf
2612bfe3f2eSlogwang  *   Event port configuration structure
2622bfe3f2eSlogwang  *
2632bfe3f2eSlogwang  */
2642bfe3f2eSlogwang typedef void (*eventdev_port_default_conf_get_t)(struct rte_eventdev *dev,
2652bfe3f2eSlogwang 		uint8_t port_id, struct rte_event_port_conf *port_conf);
2662bfe3f2eSlogwang 
2672bfe3f2eSlogwang /**
2682bfe3f2eSlogwang  * Setup an event port.
2692bfe3f2eSlogwang  *
2702bfe3f2eSlogwang  * @param dev
2712bfe3f2eSlogwang  *   Event device pointer
2722bfe3f2eSlogwang  * @param port_id
2732bfe3f2eSlogwang  *   Event port index
2742bfe3f2eSlogwang  * @param port_conf
2752bfe3f2eSlogwang  *   Event port configuration structure
2762bfe3f2eSlogwang  *
2772bfe3f2eSlogwang  * @return
2782bfe3f2eSlogwang  *   Returns 0 on success.
2792bfe3f2eSlogwang  */
2802bfe3f2eSlogwang typedef int (*eventdev_port_setup_t)(struct rte_eventdev *dev,
2812bfe3f2eSlogwang 		uint8_t port_id,
2822bfe3f2eSlogwang 		const struct rte_event_port_conf *port_conf);
2832bfe3f2eSlogwang 
2842bfe3f2eSlogwang /**
2852bfe3f2eSlogwang  * Release memory resources allocated by given event port.
2862bfe3f2eSlogwang  *
2872bfe3f2eSlogwang  * @param port
2882bfe3f2eSlogwang  *   Event port pointer
2892bfe3f2eSlogwang  *
2902bfe3f2eSlogwang  */
2912bfe3f2eSlogwang typedef void (*eventdev_port_release_t)(void *port);
2922bfe3f2eSlogwang 
2932bfe3f2eSlogwang /**
2942bfe3f2eSlogwang  * Link multiple source event queues to destination event port.
2952bfe3f2eSlogwang  *
2962bfe3f2eSlogwang  * @param dev
2972bfe3f2eSlogwang  *   Event device pointer
2982bfe3f2eSlogwang  * @param port
2992bfe3f2eSlogwang  *   Event port pointer
3002bfe3f2eSlogwang  * @param link
3012bfe3f2eSlogwang  *   Points to an array of *nb_links* event queues to be linked
3022bfe3f2eSlogwang  *   to the event port.
3032bfe3f2eSlogwang  * @param priorities
3042bfe3f2eSlogwang  *   Points to an array of *nb_links* service priorities associated with each
3052bfe3f2eSlogwang  *   event queue link to event port.
3062bfe3f2eSlogwang  * @param nb_links
3072bfe3f2eSlogwang  *   The number of links to establish
3082bfe3f2eSlogwang  *
3092bfe3f2eSlogwang  * @return
3102bfe3f2eSlogwang  *   Returns 0 on success.
3112bfe3f2eSlogwang  *
3122bfe3f2eSlogwang  */
3132bfe3f2eSlogwang typedef int (*eventdev_port_link_t)(struct rte_eventdev *dev, void *port,
3142bfe3f2eSlogwang 		const uint8_t queues[], const uint8_t priorities[],
3152bfe3f2eSlogwang 		uint16_t nb_links);
3162bfe3f2eSlogwang 
3172bfe3f2eSlogwang /**
3182bfe3f2eSlogwang  * Unlink multiple source event queues from destination event port.
3192bfe3f2eSlogwang  *
3202bfe3f2eSlogwang  * @param dev
3212bfe3f2eSlogwang  *   Event device pointer
3222bfe3f2eSlogwang  * @param port
3232bfe3f2eSlogwang  *   Event port pointer
3242bfe3f2eSlogwang  * @param queues
3252bfe3f2eSlogwang  *   An array of *nb_unlinks* event queues to be unlinked from the event port.
3262bfe3f2eSlogwang  * @param nb_unlinks
3272bfe3f2eSlogwang  *   The number of unlinks to establish
3282bfe3f2eSlogwang  *
3292bfe3f2eSlogwang  * @return
3302bfe3f2eSlogwang  *   Returns 0 on success.
3312bfe3f2eSlogwang  *
3322bfe3f2eSlogwang  */
3332bfe3f2eSlogwang typedef int (*eventdev_port_unlink_t)(struct rte_eventdev *dev, void *port,
3342bfe3f2eSlogwang 		uint8_t queues[], uint16_t nb_unlinks);
3352bfe3f2eSlogwang 
3362bfe3f2eSlogwang /**
337d30ea906Sjfb8856606  * Unlinks in progress. Returns number of unlinks that the PMD is currently
338d30ea906Sjfb8856606  * performing, but have not yet been completed.
339d30ea906Sjfb8856606  *
340d30ea906Sjfb8856606  * @param dev
341d30ea906Sjfb8856606  *   Event device pointer
342d30ea906Sjfb8856606  *
343d30ea906Sjfb8856606  * @param port
344d30ea906Sjfb8856606  *   Event port pointer
345d30ea906Sjfb8856606  *
346d30ea906Sjfb8856606  * @return
347d30ea906Sjfb8856606  *   Returns the number of in-progress unlinks. Zero is returned if none are
348d30ea906Sjfb8856606  *   in progress.
349d30ea906Sjfb8856606  */
350d30ea906Sjfb8856606 typedef int (*eventdev_port_unlinks_in_progress_t)(struct rte_eventdev *dev,
351d30ea906Sjfb8856606 		void *port);
352d30ea906Sjfb8856606 
353d30ea906Sjfb8856606 /**
3542bfe3f2eSlogwang  * Converts nanoseconds to *timeout_ticks* value for rte_event_dequeue()
3552bfe3f2eSlogwang  *
3562bfe3f2eSlogwang  * @param dev
3572bfe3f2eSlogwang  *   Event device pointer
3582bfe3f2eSlogwang  * @param ns
3592bfe3f2eSlogwang  *   Wait time in nanosecond
3602bfe3f2eSlogwang  * @param[out] timeout_ticks
3612bfe3f2eSlogwang  *   Value for the *timeout_ticks* parameter in rte_event_dequeue() function
3622bfe3f2eSlogwang  *
3632bfe3f2eSlogwang  * @return
3642bfe3f2eSlogwang  *   Returns 0 on success.
3652bfe3f2eSlogwang  *
3662bfe3f2eSlogwang  */
3672bfe3f2eSlogwang typedef int (*eventdev_dequeue_timeout_ticks_t)(struct rte_eventdev *dev,
3682bfe3f2eSlogwang 		uint64_t ns, uint64_t *timeout_ticks);
3692bfe3f2eSlogwang 
3702bfe3f2eSlogwang /**
3712bfe3f2eSlogwang  * Dump internal information
3722bfe3f2eSlogwang  *
3732bfe3f2eSlogwang  * @param dev
3742bfe3f2eSlogwang  *   Event device pointer
3752bfe3f2eSlogwang  * @param f
3762bfe3f2eSlogwang  *   A pointer to a file for output
3772bfe3f2eSlogwang  *
3782bfe3f2eSlogwang  */
3792bfe3f2eSlogwang typedef void (*eventdev_dump_t)(struct rte_eventdev *dev, FILE *f);
3802bfe3f2eSlogwang 
3812bfe3f2eSlogwang /**
3822bfe3f2eSlogwang  * Retrieve a set of statistics from device
3832bfe3f2eSlogwang  *
3842bfe3f2eSlogwang  * @param dev
3852bfe3f2eSlogwang  *   Event device pointer
3862bfe3f2eSlogwang  * @param ids
3872bfe3f2eSlogwang  *   The stat ids to retrieve
3882bfe3f2eSlogwang  * @param values
3892bfe3f2eSlogwang  *   The returned stat values
3902bfe3f2eSlogwang  * @param n
3912bfe3f2eSlogwang  *   The number of id values and entries in the values array
3922bfe3f2eSlogwang  * @return
3932bfe3f2eSlogwang  *   The number of stat values successfully filled into the values array
3942bfe3f2eSlogwang  */
3952bfe3f2eSlogwang typedef int (*eventdev_xstats_get_t)(const struct rte_eventdev *dev,
3962bfe3f2eSlogwang 		enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
3972bfe3f2eSlogwang 		const unsigned int ids[], uint64_t values[], unsigned int n);
3982bfe3f2eSlogwang 
3992bfe3f2eSlogwang /**
4002bfe3f2eSlogwang  * Resets the statistic values in xstats for the device, based on mode.
4012bfe3f2eSlogwang  */
4022bfe3f2eSlogwang typedef int (*eventdev_xstats_reset_t)(struct rte_eventdev *dev,
4032bfe3f2eSlogwang 		enum rte_event_dev_xstats_mode mode,
4042bfe3f2eSlogwang 		int16_t queue_port_id,
4052bfe3f2eSlogwang 		const uint32_t ids[],
4062bfe3f2eSlogwang 		uint32_t nb_ids);
4072bfe3f2eSlogwang 
4082bfe3f2eSlogwang /**
4092bfe3f2eSlogwang  * Get names of extended stats of an event device
4102bfe3f2eSlogwang  *
4112bfe3f2eSlogwang  * @param dev
4122bfe3f2eSlogwang  *   Event device pointer
4132bfe3f2eSlogwang  * @param xstats_names
4142bfe3f2eSlogwang  *   Array of name values to be filled in
4152bfe3f2eSlogwang  * @param size
4162bfe3f2eSlogwang  *   Number of values in the xstats_names array
4172bfe3f2eSlogwang  * @return
4182bfe3f2eSlogwang  *   When size >= the number of stats, return the number of stat values filled
4192bfe3f2eSlogwang  *   into the array.
4202bfe3f2eSlogwang  *   When size < the number of available stats, return the number of stats
4212bfe3f2eSlogwang  *   values, and do not fill in any data into xstats_names.
4222bfe3f2eSlogwang  */
4232bfe3f2eSlogwang typedef int (*eventdev_xstats_get_names_t)(const struct rte_eventdev *dev,
4242bfe3f2eSlogwang 		enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
4252bfe3f2eSlogwang 		struct rte_event_dev_xstats_name *xstats_names,
4262bfe3f2eSlogwang 		unsigned int *ids, unsigned int size);
4272bfe3f2eSlogwang 
4282bfe3f2eSlogwang /**
4292bfe3f2eSlogwang  * Get value of one stats and optionally return its id
4302bfe3f2eSlogwang  *
4312bfe3f2eSlogwang  * @param dev
4322bfe3f2eSlogwang  *   Event device pointer
4332bfe3f2eSlogwang  * @param name
4342bfe3f2eSlogwang  *   The name of the stat to retrieve
4352bfe3f2eSlogwang  * @param id
4362bfe3f2eSlogwang  *   Pointer to an unsigned int where we store the stat-id for future reference.
4372bfe3f2eSlogwang  *   This pointer may be null if the id is not required.
4382bfe3f2eSlogwang  * @return
4392bfe3f2eSlogwang  *   The value of the stat, or (uint64_t)-1 if the stat is not found.
4402bfe3f2eSlogwang  *   If the stat is not found, the id value will be returned as (unsigned)-1,
4412bfe3f2eSlogwang  *   if id pointer is non-NULL
4422bfe3f2eSlogwang  */
4432bfe3f2eSlogwang typedef uint64_t (*eventdev_xstats_get_by_name)(const struct rte_eventdev *dev,
4442bfe3f2eSlogwang 		const char *name, unsigned int *id);
4452bfe3f2eSlogwang 
4462bfe3f2eSlogwang 
4472bfe3f2eSlogwang /**
4482bfe3f2eSlogwang  * Retrieve the event device's ethdev Rx adapter capabilities for the
4492bfe3f2eSlogwang  * specified ethernet port
4502bfe3f2eSlogwang  *
4512bfe3f2eSlogwang  * @param dev
4522bfe3f2eSlogwang  *   Event device pointer
4532bfe3f2eSlogwang  *
4542bfe3f2eSlogwang  * @param eth_dev
4552bfe3f2eSlogwang  *   Ethernet device pointer
4562bfe3f2eSlogwang  *
4572bfe3f2eSlogwang  * @param[out] caps
4582bfe3f2eSlogwang  *   A pointer to memory filled with Rx event adapter capabilities.
4592bfe3f2eSlogwang  *
4602bfe3f2eSlogwang  * @return
4612bfe3f2eSlogwang  *   - 0: Success, driver provides Rx event adapter capabilities for the
4622bfe3f2eSlogwang  *	ethernet device.
4632bfe3f2eSlogwang  *   - <0: Error code returned by the driver function.
4642bfe3f2eSlogwang  *
4652bfe3f2eSlogwang  */
4662bfe3f2eSlogwang typedef int (*eventdev_eth_rx_adapter_caps_get_t)
4672bfe3f2eSlogwang 					(const struct rte_eventdev *dev,
4682bfe3f2eSlogwang 					const struct rte_eth_dev *eth_dev,
4692bfe3f2eSlogwang 					uint32_t *caps);
4702bfe3f2eSlogwang 
471d30ea906Sjfb8856606 struct rte_event_eth_rx_adapter_queue_conf;
472d30ea906Sjfb8856606 
473d30ea906Sjfb8856606 /**
474d30ea906Sjfb8856606  * Retrieve the event device's timer adapter capabilities, as well as the ops
475d30ea906Sjfb8856606  * structure that an event timer adapter should call through to enter the
476d30ea906Sjfb8856606  * driver
477d30ea906Sjfb8856606  *
478d30ea906Sjfb8856606  * @param dev
479d30ea906Sjfb8856606  *   Event device pointer
480d30ea906Sjfb8856606  *
481d30ea906Sjfb8856606  * @param flags
482d30ea906Sjfb8856606  *   Flags that can be used to determine how to select an event timer
483d30ea906Sjfb8856606  *   adapter ops structure
484d30ea906Sjfb8856606  *
485d30ea906Sjfb8856606  * @param[out] caps
486d30ea906Sjfb8856606  *   A pointer to memory filled with Rx event adapter capabilities.
487d30ea906Sjfb8856606  *
488d30ea906Sjfb8856606  * @param[out] ops
489d30ea906Sjfb8856606  *   A pointer to the ops pointer to set with the address of the desired ops
490d30ea906Sjfb8856606  *   structure
491d30ea906Sjfb8856606  *
492d30ea906Sjfb8856606  * @return
493d30ea906Sjfb8856606  *   - 0: Success, driver provides Rx event adapter capabilities for the
494d30ea906Sjfb8856606  *	ethernet device.
495d30ea906Sjfb8856606  *   - <0: Error code returned by the driver function.
496d30ea906Sjfb8856606  *
497d30ea906Sjfb8856606  */
498d30ea906Sjfb8856606 typedef int (*eventdev_timer_adapter_caps_get_t)(
499d30ea906Sjfb8856606 				const struct rte_eventdev *dev,
500d30ea906Sjfb8856606 				uint64_t flags,
501d30ea906Sjfb8856606 				uint32_t *caps,
502d30ea906Sjfb8856606 				const struct rte_event_timer_adapter_ops **ops);
5032bfe3f2eSlogwang 
5042bfe3f2eSlogwang /**
5052bfe3f2eSlogwang  * Add ethernet Rx queues to event device. This callback is invoked if
5062bfe3f2eSlogwang  * the caps returned from rte_eventdev_eth_rx_adapter_caps_get(, eth_port_id)
5072bfe3f2eSlogwang  * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set.
5082bfe3f2eSlogwang  *
5092bfe3f2eSlogwang  * @param dev
5102bfe3f2eSlogwang  *   Event device pointer
5112bfe3f2eSlogwang  *
5122bfe3f2eSlogwang  * @param eth_dev
5132bfe3f2eSlogwang  *   Ethernet device pointer
5142bfe3f2eSlogwang  *
5152bfe3f2eSlogwang  * @param rx_queue_id
5162bfe3f2eSlogwang  *   Ethernet device receive queue index
5172bfe3f2eSlogwang  *
5182bfe3f2eSlogwang  * @param queue_conf
5192bfe3f2eSlogwang  *  Additional configuration structure
5202bfe3f2eSlogwang 
5212bfe3f2eSlogwang  * @return
5222bfe3f2eSlogwang  *   - 0: Success, ethernet receive queue added successfully.
5232bfe3f2eSlogwang  *   - <0: Error code returned by the driver function.
5242bfe3f2eSlogwang  *
5252bfe3f2eSlogwang  */
5262bfe3f2eSlogwang typedef int (*eventdev_eth_rx_adapter_queue_add_t)(
5272bfe3f2eSlogwang 		const struct rte_eventdev *dev,
5282bfe3f2eSlogwang 		const struct rte_eth_dev *eth_dev,
5292bfe3f2eSlogwang 		int32_t rx_queue_id,
5302bfe3f2eSlogwang 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
5312bfe3f2eSlogwang 
5322bfe3f2eSlogwang /**
5332bfe3f2eSlogwang  * Delete ethernet Rx queues from event device. This callback is invoked if
5342bfe3f2eSlogwang  * the caps returned from eventdev_eth_rx_adapter_caps_get(, eth_port_id)
5352bfe3f2eSlogwang  * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set.
5362bfe3f2eSlogwang  *
5372bfe3f2eSlogwang  * @param dev
5382bfe3f2eSlogwang  *   Event device pointer
5392bfe3f2eSlogwang  *
5402bfe3f2eSlogwang  * @param eth_dev
5412bfe3f2eSlogwang  *   Ethernet device pointer
5422bfe3f2eSlogwang  *
5432bfe3f2eSlogwang  * @param rx_queue_id
5442bfe3f2eSlogwang  *   Ethernet device receive queue index
5452bfe3f2eSlogwang  *
5462bfe3f2eSlogwang  * @return
5472bfe3f2eSlogwang  *   - 0: Success, ethernet receive queue deleted successfully.
5482bfe3f2eSlogwang  *   - <0: Error code returned by the driver function.
5492bfe3f2eSlogwang  *
5502bfe3f2eSlogwang  */
5512bfe3f2eSlogwang typedef int (*eventdev_eth_rx_adapter_queue_del_t)
5522bfe3f2eSlogwang 					(const struct rte_eventdev *dev,
5532bfe3f2eSlogwang 					const struct rte_eth_dev *eth_dev,
5542bfe3f2eSlogwang 					int32_t rx_queue_id);
5552bfe3f2eSlogwang 
5562bfe3f2eSlogwang /**
5572bfe3f2eSlogwang  * Start ethernet Rx adapter. This callback is invoked if
5582bfe3f2eSlogwang  * the caps returned from eventdev_eth_rx_adapter_caps_get(.., eth_port_id)
5592bfe3f2eSlogwang  * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set and Rx queues
5602bfe3f2eSlogwang  * from eth_port_id have been added to the event device.
5612bfe3f2eSlogwang  *
5622bfe3f2eSlogwang  * @param dev
5632bfe3f2eSlogwang  *   Event device pointer
5642bfe3f2eSlogwang  *
5652bfe3f2eSlogwang  * @param eth_dev
5662bfe3f2eSlogwang  *   Ethernet device pointer
5672bfe3f2eSlogwang  *
5682bfe3f2eSlogwang  * @return
5692bfe3f2eSlogwang  *   - 0: Success, ethernet Rx adapter started successfully.
5702bfe3f2eSlogwang  *   - <0: Error code returned by the driver function.
5712bfe3f2eSlogwang  */
5722bfe3f2eSlogwang typedef int (*eventdev_eth_rx_adapter_start_t)
5732bfe3f2eSlogwang 					(const struct rte_eventdev *dev,
5742bfe3f2eSlogwang 					const struct rte_eth_dev *eth_dev);
5752bfe3f2eSlogwang 
5762bfe3f2eSlogwang /**
5772bfe3f2eSlogwang  * Stop ethernet Rx adapter. This callback is invoked if
5782bfe3f2eSlogwang  * the caps returned from eventdev_eth_rx_adapter_caps_get(..,eth_port_id)
5792bfe3f2eSlogwang  * has RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT set and Rx queues
5802bfe3f2eSlogwang  * from eth_port_id have been added to the event device.
5812bfe3f2eSlogwang  *
5822bfe3f2eSlogwang  * @param dev
5832bfe3f2eSlogwang  *   Event device pointer
5842bfe3f2eSlogwang  *
5852bfe3f2eSlogwang  * @param eth_dev
5862bfe3f2eSlogwang  *   Ethernet device pointer
5872bfe3f2eSlogwang  *
5882bfe3f2eSlogwang  * @return
5892bfe3f2eSlogwang  *   - 0: Success, ethernet Rx adapter stopped successfully.
5902bfe3f2eSlogwang  *   - <0: Error code returned by the driver function.
5912bfe3f2eSlogwang  */
5922bfe3f2eSlogwang typedef int (*eventdev_eth_rx_adapter_stop_t)
5932bfe3f2eSlogwang 					(const struct rte_eventdev *dev,
5942bfe3f2eSlogwang 					const struct rte_eth_dev *eth_dev);
5952bfe3f2eSlogwang 
596d30ea906Sjfb8856606 struct rte_event_eth_rx_adapter_stats;
5972bfe3f2eSlogwang 
5982bfe3f2eSlogwang /**
5992bfe3f2eSlogwang  * Retrieve ethernet Rx adapter statistics.
6002bfe3f2eSlogwang  *
6012bfe3f2eSlogwang  * @param dev
6022bfe3f2eSlogwang  *   Event device pointer
6032bfe3f2eSlogwang  *
6042bfe3f2eSlogwang  * @param eth_dev
6052bfe3f2eSlogwang  *   Ethernet device pointer
6062bfe3f2eSlogwang  *
6072bfe3f2eSlogwang  * @param[out] stats
6082bfe3f2eSlogwang  *   Pointer to stats structure
6092bfe3f2eSlogwang  *
6102bfe3f2eSlogwang  * @return
6112bfe3f2eSlogwang  *   Return 0 on success.
6122bfe3f2eSlogwang  */
6132bfe3f2eSlogwang 
6142bfe3f2eSlogwang typedef int (*eventdev_eth_rx_adapter_stats_get)
6152bfe3f2eSlogwang 			(const struct rte_eventdev *dev,
6162bfe3f2eSlogwang 			const struct rte_eth_dev *eth_dev,
6172bfe3f2eSlogwang 			struct rte_event_eth_rx_adapter_stats *stats);
6182bfe3f2eSlogwang /**
6192bfe3f2eSlogwang  * Reset ethernet Rx adapter statistics.
6202bfe3f2eSlogwang  *
6212bfe3f2eSlogwang  * @param dev
6222bfe3f2eSlogwang  *   Event device pointer
6232bfe3f2eSlogwang  *
6242bfe3f2eSlogwang  * @param eth_dev
6252bfe3f2eSlogwang  *   Ethernet device pointer
6262bfe3f2eSlogwang  *
6272bfe3f2eSlogwang  * @return
6282bfe3f2eSlogwang  *   Return 0 on success.
6292bfe3f2eSlogwang  */
6302bfe3f2eSlogwang typedef int (*eventdev_eth_rx_adapter_stats_reset)
6312bfe3f2eSlogwang 			(const struct rte_eventdev *dev,
6322bfe3f2eSlogwang 			const struct rte_eth_dev *eth_dev);
633d30ea906Sjfb8856606 /**
634d30ea906Sjfb8856606  * Start eventdev selftest.
635d30ea906Sjfb8856606  *
636d30ea906Sjfb8856606  * @return
637d30ea906Sjfb8856606  *   Return 0 on success.
638d30ea906Sjfb8856606  */
639d30ea906Sjfb8856606 typedef int (*eventdev_selftest)(void);
640d30ea906Sjfb8856606 
641*2d9fd380Sjfb8856606 typedef uint32_t rte_event_pmd_selftest_seqn_t;
642*2d9fd380Sjfb8856606 extern int rte_event_pmd_selftest_seqn_dynfield_offset;
643*2d9fd380Sjfb8856606 
644*2d9fd380Sjfb8856606 /**
645*2d9fd380Sjfb8856606  * Read test sequence number from mbuf.
646*2d9fd380Sjfb8856606  *
647*2d9fd380Sjfb8856606  * @param mbuf Structure to read from.
648*2d9fd380Sjfb8856606  * @return pointer to test sequence number.
649*2d9fd380Sjfb8856606  */
650*2d9fd380Sjfb8856606 __rte_internal
651*2d9fd380Sjfb8856606 static inline rte_event_pmd_selftest_seqn_t *
rte_event_pmd_selftest_seqn(struct rte_mbuf * mbuf)652*2d9fd380Sjfb8856606 rte_event_pmd_selftest_seqn(struct rte_mbuf *mbuf)
653*2d9fd380Sjfb8856606 {
654*2d9fd380Sjfb8856606 	return RTE_MBUF_DYNFIELD(mbuf,
655*2d9fd380Sjfb8856606 		rte_event_pmd_selftest_seqn_dynfield_offset,
656*2d9fd380Sjfb8856606 		rte_event_pmd_selftest_seqn_t *);
657*2d9fd380Sjfb8856606 }
658d30ea906Sjfb8856606 
659d30ea906Sjfb8856606 struct rte_cryptodev;
660d30ea906Sjfb8856606 
661d30ea906Sjfb8856606 /**
662d30ea906Sjfb8856606  * This API may change without prior notice
663d30ea906Sjfb8856606  *
664d30ea906Sjfb8856606  * Retrieve the event device's crypto adapter capabilities for the
665d30ea906Sjfb8856606  * specified cryptodev
666d30ea906Sjfb8856606  *
667d30ea906Sjfb8856606  * @param dev
668d30ea906Sjfb8856606  *   Event device pointer
669d30ea906Sjfb8856606  *
670d30ea906Sjfb8856606  * @param cdev
671d30ea906Sjfb8856606  *   cryptodev pointer
672d30ea906Sjfb8856606  *
673d30ea906Sjfb8856606  * @param[out] caps
674d30ea906Sjfb8856606  *   A pointer to memory filled with event adapter capabilities.
675d30ea906Sjfb8856606  *   It is expected to be pre-allocated & initialized by caller.
676d30ea906Sjfb8856606  *
677d30ea906Sjfb8856606  * @return
678d30ea906Sjfb8856606  *   - 0: Success, driver provides event adapter capabilities for the
679d30ea906Sjfb8856606  *	cryptodev.
680d30ea906Sjfb8856606  *   - <0: Error code returned by the driver function.
681d30ea906Sjfb8856606  *
682d30ea906Sjfb8856606  */
683d30ea906Sjfb8856606 typedef int (*eventdev_crypto_adapter_caps_get_t)
684d30ea906Sjfb8856606 					(const struct rte_eventdev *dev,
685d30ea906Sjfb8856606 					 const struct rte_cryptodev *cdev,
686d30ea906Sjfb8856606 					 uint32_t *caps);
687d30ea906Sjfb8856606 
688d30ea906Sjfb8856606 /**
689d30ea906Sjfb8856606  * This API may change without prior notice
690d30ea906Sjfb8856606  *
691d30ea906Sjfb8856606  * Add crypto queue pair to event device. This callback is invoked if
692d30ea906Sjfb8856606  * the caps returned from rte_event_crypto_adapter_caps_get(, cdev_id)
693d30ea906Sjfb8856606  * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set.
694d30ea906Sjfb8856606  *
695d30ea906Sjfb8856606  * @param dev
696d30ea906Sjfb8856606  *   Event device pointer
697d30ea906Sjfb8856606  *
698d30ea906Sjfb8856606  * @param cdev
699d30ea906Sjfb8856606  *   cryptodev pointer
700d30ea906Sjfb8856606  *
701d30ea906Sjfb8856606  * @param queue_pair_id
702d30ea906Sjfb8856606  *   cryptodev queue pair identifier.
703d30ea906Sjfb8856606  *
704d30ea906Sjfb8856606  * @param event
705d30ea906Sjfb8856606  *  Event information required for binding cryptodev queue pair to event queue.
706d30ea906Sjfb8856606  *  This structure will have a valid value for only those HW PMDs supporting
707d30ea906Sjfb8856606  *  @see RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND capability.
708d30ea906Sjfb8856606  *
709d30ea906Sjfb8856606  * @return
710d30ea906Sjfb8856606  *   - 0: Success, cryptodev queue pair added successfully.
711d30ea906Sjfb8856606  *   - <0: Error code returned by the driver function.
712d30ea906Sjfb8856606  *
713d30ea906Sjfb8856606  */
714d30ea906Sjfb8856606 typedef int (*eventdev_crypto_adapter_queue_pair_add_t)
715d30ea906Sjfb8856606 			(const struct rte_eventdev *dev,
716d30ea906Sjfb8856606 			 const struct rte_cryptodev *cdev,
717d30ea906Sjfb8856606 			 int32_t queue_pair_id,
718d30ea906Sjfb8856606 			 const struct rte_event *event);
719d30ea906Sjfb8856606 
720d30ea906Sjfb8856606 
721d30ea906Sjfb8856606 /**
722d30ea906Sjfb8856606  * This API may change without prior notice
723d30ea906Sjfb8856606  *
724d30ea906Sjfb8856606  * Delete crypto queue pair to event device. This callback is invoked if
725d30ea906Sjfb8856606  * the caps returned from rte_event_crypto_adapter_caps_get(, cdev_id)
726d30ea906Sjfb8856606  * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set.
727d30ea906Sjfb8856606  *
728d30ea906Sjfb8856606  * @param dev
729d30ea906Sjfb8856606  *   Event device pointer
730d30ea906Sjfb8856606  *
731d30ea906Sjfb8856606  * @param cdev
732d30ea906Sjfb8856606  *   cryptodev pointer
733d30ea906Sjfb8856606  *
734d30ea906Sjfb8856606  * @param queue_pair_id
735d30ea906Sjfb8856606  *   cryptodev queue pair identifier.
736d30ea906Sjfb8856606  *
737d30ea906Sjfb8856606  * @return
738d30ea906Sjfb8856606  *   - 0: Success, cryptodev queue pair deleted successfully.
739d30ea906Sjfb8856606  *   - <0: Error code returned by the driver function.
740d30ea906Sjfb8856606  *
741d30ea906Sjfb8856606  */
742d30ea906Sjfb8856606 typedef int (*eventdev_crypto_adapter_queue_pair_del_t)
743d30ea906Sjfb8856606 					(const struct rte_eventdev *dev,
744d30ea906Sjfb8856606 					 const struct rte_cryptodev *cdev,
745d30ea906Sjfb8856606 					 int32_t queue_pair_id);
746d30ea906Sjfb8856606 
747d30ea906Sjfb8856606 /**
748d30ea906Sjfb8856606  * Start crypto adapter. This callback is invoked if
749d30ea906Sjfb8856606  * the caps returned from rte_event_crypto_adapter_caps_get(.., cdev_id)
750d30ea906Sjfb8856606  * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set and queue pairs
751d30ea906Sjfb8856606  * from cdev_id have been added to the event device.
752d30ea906Sjfb8856606  *
753d30ea906Sjfb8856606  * @param dev
754d30ea906Sjfb8856606  *   Event device pointer
755d30ea906Sjfb8856606  *
756d30ea906Sjfb8856606  * @param cdev
757d30ea906Sjfb8856606  *   Crypto device pointer
758d30ea906Sjfb8856606  *
759d30ea906Sjfb8856606  * @return
760d30ea906Sjfb8856606  *   - 0: Success, crypto adapter started successfully.
761d30ea906Sjfb8856606  *   - <0: Error code returned by the driver function.
762d30ea906Sjfb8856606  */
763d30ea906Sjfb8856606 typedef int (*eventdev_crypto_adapter_start_t)
764d30ea906Sjfb8856606 					(const struct rte_eventdev *dev,
765d30ea906Sjfb8856606 					 const struct rte_cryptodev *cdev);
766d30ea906Sjfb8856606 
767d30ea906Sjfb8856606 /**
768d30ea906Sjfb8856606  * Stop crypto adapter. This callback is invoked if
769d30ea906Sjfb8856606  * the caps returned from rte_event_crypto_adapter_caps_get(.., cdev_id)
770d30ea906Sjfb8856606  * has RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_* set and queue pairs
771d30ea906Sjfb8856606  * from cdev_id have been added to the event device.
772d30ea906Sjfb8856606  *
773d30ea906Sjfb8856606  * @param dev
774d30ea906Sjfb8856606  *   Event device pointer
775d30ea906Sjfb8856606  *
776d30ea906Sjfb8856606  * @param cdev
777d30ea906Sjfb8856606  *   Crypto device pointer
778d30ea906Sjfb8856606  *
779d30ea906Sjfb8856606  * @return
780d30ea906Sjfb8856606  *   - 0: Success, crypto adapter stopped successfully.
781d30ea906Sjfb8856606  *   - <0: Error code returned by the driver function.
782d30ea906Sjfb8856606  */
783d30ea906Sjfb8856606 typedef int (*eventdev_crypto_adapter_stop_t)
784d30ea906Sjfb8856606 					(const struct rte_eventdev *dev,
785d30ea906Sjfb8856606 					 const struct rte_cryptodev *cdev);
786d30ea906Sjfb8856606 
787d30ea906Sjfb8856606 struct rte_event_crypto_adapter_stats;
788d30ea906Sjfb8856606 
789d30ea906Sjfb8856606 /**
790d30ea906Sjfb8856606  * Retrieve crypto adapter statistics.
791d30ea906Sjfb8856606  *
792d30ea906Sjfb8856606  * @param dev
793d30ea906Sjfb8856606  *   Event device pointer
794d30ea906Sjfb8856606  *
795d30ea906Sjfb8856606  * @param cdev
796d30ea906Sjfb8856606  *   Crypto device pointer
797d30ea906Sjfb8856606  *
798d30ea906Sjfb8856606  * @param[out] stats
799d30ea906Sjfb8856606  *   Pointer to stats structure
800d30ea906Sjfb8856606  *
801d30ea906Sjfb8856606  * @return
802d30ea906Sjfb8856606  *   Return 0 on success.
803d30ea906Sjfb8856606  */
804d30ea906Sjfb8856606 
805d30ea906Sjfb8856606 typedef int (*eventdev_crypto_adapter_stats_get)
806d30ea906Sjfb8856606 			(const struct rte_eventdev *dev,
807d30ea906Sjfb8856606 			 const struct rte_cryptodev *cdev,
808d30ea906Sjfb8856606 			 struct rte_event_crypto_adapter_stats *stats);
809d30ea906Sjfb8856606 
810d30ea906Sjfb8856606 /**
811d30ea906Sjfb8856606  * Reset crypto adapter statistics.
812d30ea906Sjfb8856606  *
813d30ea906Sjfb8856606  * @param dev
814d30ea906Sjfb8856606  *   Event device pointer
815d30ea906Sjfb8856606  *
816d30ea906Sjfb8856606  * @param cdev
817d30ea906Sjfb8856606  *   Crypto device pointer
818d30ea906Sjfb8856606  *
819d30ea906Sjfb8856606  * @return
820d30ea906Sjfb8856606  *   Return 0 on success.
821d30ea906Sjfb8856606  */
822d30ea906Sjfb8856606 
823d30ea906Sjfb8856606 typedef int (*eventdev_crypto_adapter_stats_reset)
824d30ea906Sjfb8856606 			(const struct rte_eventdev *dev,
825d30ea906Sjfb8856606 			 const struct rte_cryptodev *cdev);
826d30ea906Sjfb8856606 
827d30ea906Sjfb8856606 /**
828d30ea906Sjfb8856606  * Retrieve the event device's eth Tx adapter capabilities.
829d30ea906Sjfb8856606  *
830d30ea906Sjfb8856606  * @param dev
831d30ea906Sjfb8856606  *   Event device pointer
832d30ea906Sjfb8856606  *
833d30ea906Sjfb8856606  * @param eth_dev
834d30ea906Sjfb8856606  *   Ethernet device pointer
835d30ea906Sjfb8856606  *
836d30ea906Sjfb8856606  * @param[out] caps
837d30ea906Sjfb8856606  *   A pointer to memory filled with eth Tx adapter capabilities.
838d30ea906Sjfb8856606  *
839d30ea906Sjfb8856606  * @return
840d30ea906Sjfb8856606  *   - 0: Success, driver provides eth Tx adapter capabilities
841d30ea906Sjfb8856606  *   - <0: Error code returned by the driver function.
842d30ea906Sjfb8856606  *
843d30ea906Sjfb8856606  */
844d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_caps_get_t)
845d30ea906Sjfb8856606 					(const struct rte_eventdev *dev,
846d30ea906Sjfb8856606 					const struct rte_eth_dev *eth_dev,
847d30ea906Sjfb8856606 					uint32_t *caps);
848d30ea906Sjfb8856606 
849d30ea906Sjfb8856606 /**
850d30ea906Sjfb8856606  * Create adapter callback.
851d30ea906Sjfb8856606  *
852d30ea906Sjfb8856606  * @param id
853d30ea906Sjfb8856606  *   Adapter identifier
854d30ea906Sjfb8856606  *
855d30ea906Sjfb8856606  * @param dev
856d30ea906Sjfb8856606  *   Event device pointer
857d30ea906Sjfb8856606  *
858d30ea906Sjfb8856606  * @return
859d30ea906Sjfb8856606  *   - 0: Success.
860d30ea906Sjfb8856606  *   - <0: Error code on failure.
861d30ea906Sjfb8856606  */
862d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_create_t)(uint8_t id,
863d30ea906Sjfb8856606 					const struct rte_eventdev *dev);
864d30ea906Sjfb8856606 
865d30ea906Sjfb8856606 /**
866d30ea906Sjfb8856606  * Free adapter callback.
867d30ea906Sjfb8856606  *
868d30ea906Sjfb8856606  * @param id
869d30ea906Sjfb8856606  *   Adapter identifier
870d30ea906Sjfb8856606  *
871d30ea906Sjfb8856606  * @param dev
872d30ea906Sjfb8856606  *   Event device pointer
873d30ea906Sjfb8856606  *
874d30ea906Sjfb8856606  * @return
875d30ea906Sjfb8856606  *   - 0: Success.
876d30ea906Sjfb8856606  *   - <0: Error code on failure.
877d30ea906Sjfb8856606  */
878d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_free_t)(uint8_t id,
879d30ea906Sjfb8856606 					const struct rte_eventdev *dev);
880d30ea906Sjfb8856606 
881d30ea906Sjfb8856606 /**
882d30ea906Sjfb8856606  * Add a Tx queue to the adapter.
883d30ea906Sjfb8856606  * A queue value of -1 is used to indicate all
884d30ea906Sjfb8856606  * queues within the device.
885d30ea906Sjfb8856606  *
886d30ea906Sjfb8856606  * @param id
887d30ea906Sjfb8856606  *   Adapter identifier
888d30ea906Sjfb8856606  *
889d30ea906Sjfb8856606  * @param dev
890d30ea906Sjfb8856606  *   Event device pointer
891d30ea906Sjfb8856606  *
892d30ea906Sjfb8856606  * @param eth_dev
893d30ea906Sjfb8856606  *   Ethernet device pointer
894d30ea906Sjfb8856606  *
895d30ea906Sjfb8856606  * @param tx_queue_id
8961646932aSjfb8856606  *   Transmit queue index
897d30ea906Sjfb8856606  *
898d30ea906Sjfb8856606  * @return
899d30ea906Sjfb8856606  *   - 0: Success.
900d30ea906Sjfb8856606  *   - <0: Error code on failure.
901d30ea906Sjfb8856606  */
902d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_queue_add_t)(
903d30ea906Sjfb8856606 					uint8_t id,
904d30ea906Sjfb8856606 					const struct rte_eventdev *dev,
905d30ea906Sjfb8856606 					const struct rte_eth_dev *eth_dev,
906d30ea906Sjfb8856606 					int32_t tx_queue_id);
907d30ea906Sjfb8856606 
908d30ea906Sjfb8856606 /**
909d30ea906Sjfb8856606  * Delete a Tx queue from the adapter.
910d30ea906Sjfb8856606  * A queue value of -1 is used to indicate all
911d30ea906Sjfb8856606  * queues within the device, that have been added to this
912d30ea906Sjfb8856606  * adapter.
913d30ea906Sjfb8856606  *
914d30ea906Sjfb8856606  * @param id
915d30ea906Sjfb8856606  *   Adapter identifier
916d30ea906Sjfb8856606  *
917d30ea906Sjfb8856606  * @param dev
918d30ea906Sjfb8856606  *   Event device pointer
919d30ea906Sjfb8856606  *
920d30ea906Sjfb8856606  * @param eth_dev
921d30ea906Sjfb8856606  *   Ethernet device pointer
922d30ea906Sjfb8856606  *
923d30ea906Sjfb8856606  * @param tx_queue_id
924d30ea906Sjfb8856606  *   Transmit queue index
925d30ea906Sjfb8856606  *
926d30ea906Sjfb8856606  * @return
927d30ea906Sjfb8856606  *  - 0: Success, Queues deleted successfully.
928d30ea906Sjfb8856606  *  - <0: Error code on failure.
929d30ea906Sjfb8856606  */
930d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_queue_del_t)(
931d30ea906Sjfb8856606 					uint8_t id,
932d30ea906Sjfb8856606 					const struct rte_eventdev *dev,
933d30ea906Sjfb8856606 					const struct rte_eth_dev *eth_dev,
934d30ea906Sjfb8856606 					int32_t tx_queue_id);
935d30ea906Sjfb8856606 
936d30ea906Sjfb8856606 /**
937d30ea906Sjfb8856606  * Start the adapter.
938d30ea906Sjfb8856606  *
939d30ea906Sjfb8856606  * @param id
940d30ea906Sjfb8856606  *   Adapter identifier
941d30ea906Sjfb8856606  *
942d30ea906Sjfb8856606  * @param dev
943d30ea906Sjfb8856606  *   Event device pointer
944d30ea906Sjfb8856606  *
945d30ea906Sjfb8856606  * @return
946d30ea906Sjfb8856606  *  - 0: Success, Adapter started correctly.
947d30ea906Sjfb8856606  *  - <0: Error code on failure.
948d30ea906Sjfb8856606  */
949d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_start_t)(uint8_t id,
950d30ea906Sjfb8856606 					const struct rte_eventdev *dev);
951d30ea906Sjfb8856606 
952d30ea906Sjfb8856606 /**
953d30ea906Sjfb8856606  * Stop the adapter.
954d30ea906Sjfb8856606  *
955d30ea906Sjfb8856606  * @param id
956d30ea906Sjfb8856606  *  Adapter identifier
957d30ea906Sjfb8856606  *
958d30ea906Sjfb8856606  * @param dev
959d30ea906Sjfb8856606  *   Event device pointer
960d30ea906Sjfb8856606  *
961d30ea906Sjfb8856606  * @return
962d30ea906Sjfb8856606  *  - 0: Success.
963d30ea906Sjfb8856606  *  - <0: Error code on failure.
964d30ea906Sjfb8856606  */
965d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_stop_t)(uint8_t id,
966d30ea906Sjfb8856606 					const struct rte_eventdev *dev);
967d30ea906Sjfb8856606 
968d30ea906Sjfb8856606 struct rte_event_eth_tx_adapter_stats;
969d30ea906Sjfb8856606 
970d30ea906Sjfb8856606 /**
971d30ea906Sjfb8856606  * Retrieve statistics for an adapter
972d30ea906Sjfb8856606  *
973d30ea906Sjfb8856606  * @param id
974d30ea906Sjfb8856606  *  Adapter identifier
975d30ea906Sjfb8856606  *
976d30ea906Sjfb8856606  * @param dev
977d30ea906Sjfb8856606  *   Event device pointer
978d30ea906Sjfb8856606  *
979d30ea906Sjfb8856606  * @param [out] stats
980d30ea906Sjfb8856606  *  A pointer to structure used to retrieve statistics for an adapter
981d30ea906Sjfb8856606  *
982d30ea906Sjfb8856606  * @return
983d30ea906Sjfb8856606  *  - 0: Success, statistics retrieved successfully.
984d30ea906Sjfb8856606  *  - <0: Error code on failure.
985d30ea906Sjfb8856606  */
986d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_stats_get_t)(
987d30ea906Sjfb8856606 				uint8_t id,
988d30ea906Sjfb8856606 				const struct rte_eventdev *dev,
989d30ea906Sjfb8856606 				struct rte_event_eth_tx_adapter_stats *stats);
990d30ea906Sjfb8856606 
991d30ea906Sjfb8856606 /**
992d30ea906Sjfb8856606  * Reset statistics for an adapter
993d30ea906Sjfb8856606  *
994d30ea906Sjfb8856606  * @param id
995d30ea906Sjfb8856606  *  Adapter identifier
996d30ea906Sjfb8856606  *
997d30ea906Sjfb8856606  * @param dev
998d30ea906Sjfb8856606  *   Event device pointer
999d30ea906Sjfb8856606  *
1000d30ea906Sjfb8856606  * @return
1001d30ea906Sjfb8856606  *  - 0: Success, statistics retrieved successfully.
1002d30ea906Sjfb8856606  *  - <0: Error code on failure.
1003d30ea906Sjfb8856606  */
1004d30ea906Sjfb8856606 typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id,
1005d30ea906Sjfb8856606 					const struct rte_eventdev *dev);
10062bfe3f2eSlogwang 
10072bfe3f2eSlogwang /** Event device operations function pointer table */
10082bfe3f2eSlogwang struct rte_eventdev_ops {
10092bfe3f2eSlogwang 	eventdev_info_get_t dev_infos_get;	/**< Get device info. */
10102bfe3f2eSlogwang 	eventdev_configure_t dev_configure;	/**< Configure device. */
10112bfe3f2eSlogwang 	eventdev_start_t dev_start;		/**< Start device. */
10122bfe3f2eSlogwang 	eventdev_stop_t dev_stop;		/**< Stop device. */
10132bfe3f2eSlogwang 	eventdev_close_t dev_close;		/**< Close device. */
10142bfe3f2eSlogwang 
10152bfe3f2eSlogwang 	eventdev_queue_default_conf_get_t queue_def_conf;
10162bfe3f2eSlogwang 	/**< Get default queue configuration. */
10172bfe3f2eSlogwang 	eventdev_queue_setup_t queue_setup;
10182bfe3f2eSlogwang 	/**< Set up an event queue. */
10192bfe3f2eSlogwang 	eventdev_queue_release_t queue_release;
10202bfe3f2eSlogwang 	/**< Release an event queue. */
10212bfe3f2eSlogwang 
10222bfe3f2eSlogwang 	eventdev_port_default_conf_get_t port_def_conf;
10232bfe3f2eSlogwang 	/**< Get default port configuration. */
10242bfe3f2eSlogwang 	eventdev_port_setup_t port_setup;
10252bfe3f2eSlogwang 	/**< Set up an event port. */
10262bfe3f2eSlogwang 	eventdev_port_release_t port_release;
10272bfe3f2eSlogwang 	/**< Release an event port. */
10282bfe3f2eSlogwang 
10292bfe3f2eSlogwang 	eventdev_port_link_t port_link;
10302bfe3f2eSlogwang 	/**< Link event queues to an event port. */
10312bfe3f2eSlogwang 	eventdev_port_unlink_t port_unlink;
10322bfe3f2eSlogwang 	/**< Unlink event queues from an event port. */
1033d30ea906Sjfb8856606 	eventdev_port_unlinks_in_progress_t port_unlinks_in_progress;
1034d30ea906Sjfb8856606 	/**< Unlinks in progress on an event port. */
10352bfe3f2eSlogwang 	eventdev_dequeue_timeout_ticks_t timeout_ticks;
10362bfe3f2eSlogwang 	/**< Converts ns to *timeout_ticks* value for rte_event_dequeue() */
10372bfe3f2eSlogwang 	eventdev_dump_t dump;
10382bfe3f2eSlogwang 	/* Dump internal information */
10392bfe3f2eSlogwang 
10402bfe3f2eSlogwang 	eventdev_xstats_get_t xstats_get;
10412bfe3f2eSlogwang 	/**< Get extended device statistics. */
10422bfe3f2eSlogwang 	eventdev_xstats_get_names_t xstats_get_names;
10432bfe3f2eSlogwang 	/**< Get names of extended stats. */
10442bfe3f2eSlogwang 	eventdev_xstats_get_by_name xstats_get_by_name;
10452bfe3f2eSlogwang 	/**< Get one value by name. */
10462bfe3f2eSlogwang 	eventdev_xstats_reset_t xstats_reset;
10472bfe3f2eSlogwang 	/**< Reset the statistics values in xstats. */
10482bfe3f2eSlogwang 
10492bfe3f2eSlogwang 	eventdev_eth_rx_adapter_caps_get_t eth_rx_adapter_caps_get;
10502bfe3f2eSlogwang 	/**< Get ethernet Rx adapter capabilities */
10512bfe3f2eSlogwang 	eventdev_eth_rx_adapter_queue_add_t eth_rx_adapter_queue_add;
10522bfe3f2eSlogwang 	/**< Add Rx queues to ethernet Rx adapter */
10532bfe3f2eSlogwang 	eventdev_eth_rx_adapter_queue_del_t eth_rx_adapter_queue_del;
10542bfe3f2eSlogwang 	/**< Delete Rx queues from ethernet Rx adapter */
10552bfe3f2eSlogwang 	eventdev_eth_rx_adapter_start_t eth_rx_adapter_start;
10562bfe3f2eSlogwang 	/**< Start ethernet Rx adapter */
10572bfe3f2eSlogwang 	eventdev_eth_rx_adapter_stop_t eth_rx_adapter_stop;
10582bfe3f2eSlogwang 	/**< Stop ethernet Rx adapter */
10592bfe3f2eSlogwang 	eventdev_eth_rx_adapter_stats_get eth_rx_adapter_stats_get;
10602bfe3f2eSlogwang 	/**< Get ethernet Rx stats */
10612bfe3f2eSlogwang 	eventdev_eth_rx_adapter_stats_reset eth_rx_adapter_stats_reset;
10622bfe3f2eSlogwang 	/**< Reset ethernet Rx stats */
1063d30ea906Sjfb8856606 
1064d30ea906Sjfb8856606 	eventdev_timer_adapter_caps_get_t timer_adapter_caps_get;
1065d30ea906Sjfb8856606 	/**< Get timer adapter capabilities */
1066d30ea906Sjfb8856606 
1067d30ea906Sjfb8856606 	eventdev_crypto_adapter_caps_get_t crypto_adapter_caps_get;
1068d30ea906Sjfb8856606 	/**< Get crypto adapter capabilities */
1069d30ea906Sjfb8856606 	eventdev_crypto_adapter_queue_pair_add_t crypto_adapter_queue_pair_add;
1070d30ea906Sjfb8856606 	/**< Add queue pair to crypto adapter */
1071d30ea906Sjfb8856606 	eventdev_crypto_adapter_queue_pair_del_t crypto_adapter_queue_pair_del;
1072d30ea906Sjfb8856606 	/**< Delete queue pair from crypto adapter */
1073d30ea906Sjfb8856606 	eventdev_crypto_adapter_start_t crypto_adapter_start;
1074d30ea906Sjfb8856606 	/**< Start crypto adapter */
1075d30ea906Sjfb8856606 	eventdev_crypto_adapter_stop_t crypto_adapter_stop;
1076d30ea906Sjfb8856606 	/**< Stop crypto adapter */
1077d30ea906Sjfb8856606 	eventdev_crypto_adapter_stats_get crypto_adapter_stats_get;
1078d30ea906Sjfb8856606 	/**< Get crypto stats */
1079d30ea906Sjfb8856606 	eventdev_crypto_adapter_stats_reset crypto_adapter_stats_reset;
1080d30ea906Sjfb8856606 	/**< Reset crypto stats */
1081d30ea906Sjfb8856606 
1082d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_caps_get_t eth_tx_adapter_caps_get;
1083d30ea906Sjfb8856606 	/**< Get ethernet Tx adapter capabilities */
1084d30ea906Sjfb8856606 
1085d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_create_t eth_tx_adapter_create;
1086d30ea906Sjfb8856606 	/**< Create adapter callback */
1087d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_free_t eth_tx_adapter_free;
1088d30ea906Sjfb8856606 	/**< Free adapter callback */
1089d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_queue_add_t eth_tx_adapter_queue_add;
1090d30ea906Sjfb8856606 	/**< Add Tx queues to the eth Tx adapter */
1091d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_queue_del_t eth_tx_adapter_queue_del;
1092d30ea906Sjfb8856606 	/**< Delete Tx queues from the eth Tx adapter */
1093d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_start_t eth_tx_adapter_start;
1094d30ea906Sjfb8856606 	/**< Start eth Tx adapter */
1095d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_stop_t eth_tx_adapter_stop;
1096d30ea906Sjfb8856606 	/**< Stop eth Tx adapter */
1097d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_stats_get_t eth_tx_adapter_stats_get;
1098d30ea906Sjfb8856606 	/**< Get eth Tx adapter statistics */
1099d30ea906Sjfb8856606 	eventdev_eth_tx_adapter_stats_reset_t eth_tx_adapter_stats_reset;
1100d30ea906Sjfb8856606 	/**< Reset eth Tx adapter statistics */
1101d30ea906Sjfb8856606 
1102d30ea906Sjfb8856606 	eventdev_selftest dev_selftest;
1103d30ea906Sjfb8856606 	/**< Start eventdev Selftest */
1104d30ea906Sjfb8856606 
1105d30ea906Sjfb8856606 	eventdev_stop_flush_t dev_stop_flush;
1106d30ea906Sjfb8856606 	/**< User-provided event flush function */
11072bfe3f2eSlogwang };
11082bfe3f2eSlogwang 
11092bfe3f2eSlogwang /**
11102bfe3f2eSlogwang  * Allocates a new eventdev slot for an event device and returns the pointer
11112bfe3f2eSlogwang  * to that slot for the driver to use.
11122bfe3f2eSlogwang  *
11132bfe3f2eSlogwang  * @param name
11142bfe3f2eSlogwang  *   Unique identifier name for each device
11152bfe3f2eSlogwang  * @param socket_id
11162bfe3f2eSlogwang  *   Socket to allocate resources on.
11172bfe3f2eSlogwang  * @return
11182bfe3f2eSlogwang  *   - Slot in the rte_dev_devices array for a new device;
11192bfe3f2eSlogwang  */
11202bfe3f2eSlogwang struct rte_eventdev *
11212bfe3f2eSlogwang rte_event_pmd_allocate(const char *name, int socket_id);
11222bfe3f2eSlogwang 
11232bfe3f2eSlogwang /**
11242bfe3f2eSlogwang  * Release the specified eventdev device.
11252bfe3f2eSlogwang  *
11262bfe3f2eSlogwang  * @param eventdev
11272bfe3f2eSlogwang  * The *eventdev* pointer is the address of the *rte_eventdev* structure.
11282bfe3f2eSlogwang  * @return
11292bfe3f2eSlogwang  *   - 0 on success, negative on error
11302bfe3f2eSlogwang  */
11312bfe3f2eSlogwang int
11322bfe3f2eSlogwang rte_event_pmd_release(struct rte_eventdev *eventdev);
11332bfe3f2eSlogwang 
11342bfe3f2eSlogwang #ifdef __cplusplus
11352bfe3f2eSlogwang }
11362bfe3f2eSlogwang #endif
11372bfe3f2eSlogwang 
11382bfe3f2eSlogwang #endif /* _RTE_EVENTDEV_PMD_H_ */
1139