* The *dequeue* operation gets one or more events from the event ports.
* The application process the events and send to downstream event queue through
* rte_event_enqueue_burst() if it is an intermediate stage of event processing,
- * on the final stage, the application may send to different subsystem like
- * ethdev to send the packet/event on the wire using ethdev
- * rte_eth_tx_burst() API.
+ * on the final stage, the application may use Tx adapter API for maintaining
+ * the ingress order and then send the packet/event on the wire.
*
* The point at which events are scheduled to ports depends on the device.
* For hardware devices, scheduling occurs asynchronously without any software
#include <rte_memory.h>
#include <rte_errno.h>
+#include "rte_eventdev_trace_fp.h"
+
struct rte_mbuf; /* we just use mbuf pointers; no need to include rte_mbuf.h */
struct rte_event;
* - 0: Success, driver provided event timer adapter capabilities.
* - <0: Error code returned by the driver function.
*/
-int __rte_experimental
+int
rte_event_timer_adapter_caps_get(uint8_t dev_id, uint32_t *caps);
/* Crypto adapter capability bitmap flag */
*/
#define RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA 0x8
-/**< Flag indicates HW/SW suports a mechanism to store and retrieve
+/**< Flag indicates HW/SW supports a mechanism to store and retrieve
* the private data information along with the crypto session.
*/
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* Retrieve the event device's crypto adapter capabilities for the
* specified cryptodev device
*
* - <0: Error code returned by the driver function.
*
*/
-int __rte_experimental
+int
rte_event_crypto_adapter_caps_get(uint8_t dev_id, uint8_t cdev_id,
uint32_t *caps);
* - <0: Error code returned by the driver function.
*
*/
-int __rte_experimental
+int
rte_event_eth_tx_adapter_caps_get(uint8_t dev_id, uint16_t eth_port_id,
uint32_t *caps);
struct rte_event ev[], uint16_t nb_events);
/**< @internal Enqueue burst of events on port of a device */
+typedef uint16_t (*event_tx_adapter_enqueue_same_dest)(void *port,
+ struct rte_event ev[], uint16_t nb_events);
+/**< @internal Enqueue burst of events on port of a device supporting
+ * burst having same destination Ethernet port & Tx queue.
+ */
+
#define RTE_EVENTDEV_NAME_MAX_LEN (64)
/**< @internal Max length of name of event PMD */
char name[RTE_EVENTDEV_NAME_MAX_LEN];
/**< Unique identifier name */
+
+ uint64_t reserved_64s[4]; /**< Reserved for future fields */
+ void *reserved_ptrs[4]; /**< Reserved for future fields */
} __rte_cache_aligned;
/** @internal The data structure associated with each event device. */
/**< Pointer to PMD dequeue function. */
event_dequeue_burst_t dequeue_burst;
/**< Pointer to PMD dequeue burst function. */
+ event_tx_adapter_enqueue_same_dest txa_enqueue_same_dest;
+ /**< Pointer to PMD eth Tx adapter burst enqueue function with
+ * events destined to same Eth port & Tx queue.
+ */
event_tx_adapter_enqueue txa_enqueue;
/**< Pointer to PMD eth Tx adapter enqueue function. */
struct rte_eventdev_data *data;
RTE_STD_C11
uint8_t attached : 1;
/**< Flag indicating the device is attached */
+
+ uint64_t reserved_64s[4]; /**< Reserved for future fields */
+ void *reserved_ptrs[4]; /**< Reserved for future fields */
} __rte_cache_aligned;
extern struct rte_eventdev *rte_eventdevs;
#ifdef RTE_LIBRTE_EVENTDEV_DEBUG
if (dev_id >= RTE_EVENT_MAX_DEVS || !rte_eventdevs[dev_id].attached) {
- rte_errno = -EINVAL;
+ rte_errno = EINVAL;
return 0;
}
if (port_id >= dev->data->nb_ports) {
- rte_errno = -EINVAL;
+ rte_errno = EINVAL;
return 0;
}
#endif
+ rte_eventdev_trace_enq_burst(dev_id, port_id, ev, nb_events, fn);
/*
* Allow zero cost non burst mode routine invocation if application
* requests nb_events as const one
* which contain the event object enqueue operations to be processed.
* @param nb_events
* The number of event objects to enqueue, typically number of
- * rte_event_port_enqueue_depth() available for this port.
+ * rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...)
+ * available for this port.
*
* @return
* The number of event objects actually enqueued on the event device. The
* *rte_event*. If the return value is less than *nb_events*, the remaining
* events at the end of ev[] are not consumed and the caller has to take care
* of them, and rte_errno is set accordingly. Possible errno values include:
- * - -EINVAL The port ID is invalid, device ID is invalid, an event's queue
+ * - EINVAL The port ID is invalid, device ID is invalid, an event's queue
* ID is invalid, or an event's sched type doesn't match the
* capabilities of the destination queue.
- * - -ENOSPC The event port was backpressured and unable to enqueue
+ * - ENOSPC The event port was backpressured and unable to enqueue
* one or more events. This error code is only applicable to
* closed systems.
- * @see rte_event_port_enqueue_depth()
+ * @see rte_event_port_attr_get(), RTE_EVENT_PORT_ATTR_ENQ_DEPTH
*/
static inline uint16_t
rte_event_enqueue_burst(uint8_t dev_id, uint8_t port_id,
* which contain the event object enqueue operations to be processed.
* @param nb_events
* The number of event objects to enqueue, typically number of
- * rte_event_port_enqueue_depth() available for this port.
+ * rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...)
+ * available for this port.
*
* @return
* The number of event objects actually enqueued on the event device. The
* *rte_event*. If the return value is less than *nb_events*, the remaining
* events at the end of ev[] are not consumed and the caller has to take care
* of them, and rte_errno is set accordingly. Possible errno values include:
- * - -EINVAL The port ID is invalid, device ID is invalid, an event's queue
+ * - EINVAL The port ID is invalid, device ID is invalid, an event's queue
* ID is invalid, or an event's sched type doesn't match the
* capabilities of the destination queue.
- * - -ENOSPC The event port was backpressured and unable to enqueue
+ * - ENOSPC The event port was backpressured and unable to enqueue
* one or more events. This error code is only applicable to
* closed systems.
- * @see rte_event_port_enqueue_depth() rte_event_enqueue_burst()
+ * @see rte_event_port_attr_get(), RTE_EVENT_PORT_ATTR_ENQ_DEPTH
+ * @see rte_event_enqueue_burst()
*/
static inline uint16_t
rte_event_enqueue_new_burst(uint8_t dev_id, uint8_t port_id,
* which contain the event object enqueue operations to be processed.
* @param nb_events
* The number of event objects to enqueue, typically number of
- * rte_event_port_enqueue_depth() available for this port.
+ * rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...)
+ * available for this port.
*
* @return
* The number of event objects actually enqueued on the event device. The
* *rte_event*. If the return value is less than *nb_events*, the remaining
* events at the end of ev[] are not consumed and the caller has to take care
* of them, and rte_errno is set accordingly. Possible errno values include:
- * - -EINVAL The port ID is invalid, device ID is invalid, an event's queue
+ * - EINVAL The port ID is invalid, device ID is invalid, an event's queue
* ID is invalid, or an event's sched type doesn't match the
* capabilities of the destination queue.
- * - -ENOSPC The event port was backpressured and unable to enqueue
+ * - ENOSPC The event port was backpressured and unable to enqueue
* one or more events. This error code is only applicable to
* closed systems.
- * @see rte_event_port_enqueue_depth() rte_event_enqueue_burst()
+ * @see rte_event_port_attr_get(), RTE_EVENT_PORT_ATTR_ENQ_DEPTH
+ * @see rte_event_enqueue_burst()
*/
static inline uint16_t
rte_event_enqueue_forward_burst(uint8_t dev_id, uint8_t port_id,
#ifdef RTE_LIBRTE_EVENTDEV_DEBUG
if (dev_id >= RTE_EVENT_MAX_DEVS || !rte_eventdevs[dev_id].attached) {
- rte_errno = -EINVAL;
+ rte_errno = EINVAL;
return 0;
}
if (port_id >= dev->data->nb_ports) {
- rte_errno = -EINVAL;
+ rte_errno = EINVAL;
return 0;
}
#endif
-
+ rte_eventdev_trace_deq_burst(dev_id, port_id, ev, nb_events);
/*
* Allow zero cost non burst mode routine invocation if application
* requests nb_events as const one
* of link[] are not established, and the caller has to take care of them.
* If return value is less than *nb_links* then implementation shall update the
* rte_errno accordingly, Possible rte_errno values are
- * (-EDQUOT) Quota exceeded(Application tried to link the queue configured with
+ * (EDQUOT) Quota exceeded(Application tried to link the queue configured with
* RTE_EVENT_QUEUE_CFG_SINGLE_LINK to more than one event ports)
- * (-EINVAL) Invalid parameter
+ * (EINVAL) Invalid parameter
*
*/
int
* end of queues[] are not unlinked, and the caller has to take care of them.
* If return value is less than *nb_unlinks* then implementation shall update
* the rte_errno accordingly, Possible rte_errno values are
- * (-EINVAL) Invalid parameter
+ * (EINVAL) Invalid parameter
*/
int
rte_event_port_unlink(uint8_t dev_id, uint8_t port_id,
uint8_t queues[], uint16_t nb_unlinks);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* Returns the number of unlinks in progress.
*
* This function provides the application with a method to detect when an
* @see rte_event_port_unlink() to issue unlink requests.
*
* @param dev_id
- * The indentifier of the device.
+ * The identifier of the device.
*
* @param port_id
* Event port identifier to select port to check for unlinks in progress.
* A negative return value indicates an error, -EINVAL indicates an invalid
* parameter passed for *dev_id* or *port_id*.
*/
-int __rte_experimental
+int
rte_event_port_unlinks_in_progress(uint8_t dev_id, uint8_t port_id);
/**
* @param ids
* The id numbers of the stats to get. The ids can be got from the stat
* position in the stat list from rte_event_dev_get_xstats_names(), or
- * by using rte_eventdev_get_xstats_by_name()
+ * by using rte_event_dev_xstats_by_name_get().
* @param[out] values
* The values for each stats request by ID.
* @param n
* The stat name to retrieve
* @param[out] id
* If non-NULL, the numerical id of the stat will be returned, so that further
- * requests for the stat can be got using rte_eventdev_xstats_get, which will
+ * requests for the stat can be got using rte_event_dev_xstats_get, which will
* be faster as it doesn't need to scan a list of names for the stat.
* If the stat cannot be found, the id returned will be (unsigned)-1.
* @return