166a30a29SAmit Prakash Shukla /* SPDX-License-Identifier: BSD-3-Clause 266a30a29SAmit Prakash Shukla * Copyright (c) 2023 Marvell. 366a30a29SAmit Prakash Shukla */ 466a30a29SAmit Prakash Shukla 566a30a29SAmit Prakash Shukla #ifndef RTE_EVENT_DMA_ADAPTER 666a30a29SAmit Prakash Shukla #define RTE_EVENT_DMA_ADAPTER 766a30a29SAmit Prakash Shukla 866a30a29SAmit Prakash Shukla /** 966a30a29SAmit Prakash Shukla * @file rte_event_dma_adapter.h 1066a30a29SAmit Prakash Shukla * 1166a30a29SAmit Prakash Shukla * @warning 1266a30a29SAmit Prakash Shukla * @b EXPERIMENTAL: 1366a30a29SAmit Prakash Shukla * All functions in this file may be changed or removed without prior notice. 1466a30a29SAmit Prakash Shukla * 1566a30a29SAmit Prakash Shukla * DMA Event Adapter API. 1666a30a29SAmit Prakash Shukla * 1766a30a29SAmit Prakash Shukla * Eventdev library provides adapters to bridge between various components for providing new 1866a30a29SAmit Prakash Shukla * event source. The event DMA adapter is one of those adapters which is intended to bridge 1966a30a29SAmit Prakash Shukla * between event devices and DMA devices. 2066a30a29SAmit Prakash Shukla * 2166a30a29SAmit Prakash Shukla * The DMA adapter adds support to enqueue / dequeue DMA operations to / from event device. The 2266a30a29SAmit Prakash Shukla * packet flow between DMA device and the event device can be accomplished using both SW and HW 2366a30a29SAmit Prakash Shukla * based transfer mechanisms. The adapter uses an EAL service core function for SW based packet 2466a30a29SAmit Prakash Shukla * transfer and uses the eventdev PMD functions to configure HW based packet transfer between the 2566a30a29SAmit Prakash Shukla * DMA device and the event device. 2666a30a29SAmit Prakash Shukla * 2766a30a29SAmit Prakash Shukla * The application can choose to submit a DMA operation directly to an DMA device or send it to the 2866a30a29SAmit Prakash Shukla * DMA adapter via eventdev based on RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. The 2966a30a29SAmit Prakash Shukla * first mode is known as the event new (RTE_EVENT_DMA_ADAPTER_OP_NEW) mode and the second as the 3066a30a29SAmit Prakash Shukla * event forward (RTE_EVENT_DMA_ADAPTER_OP_FORWARD) mode. The choice of mode can be specified while 3166a30a29SAmit Prakash Shukla * creating the adapter. In the former mode, it is an application responsibility to enable ingress 3266a30a29SAmit Prakash Shukla * packet ordering. In the latter mode, it is the adapter responsibility to enable the ingress 3366a30a29SAmit Prakash Shukla * packet ordering. 3466a30a29SAmit Prakash Shukla * 3566a30a29SAmit Prakash Shukla * 3666a30a29SAmit Prakash Shukla * Working model of RTE_EVENT_DMA_ADAPTER_OP_NEW mode: 3766a30a29SAmit Prakash Shukla * 3866a30a29SAmit Prakash Shukla * +--------------+ +--------------+ 3966a30a29SAmit Prakash Shukla * | | | DMA stage | 4066a30a29SAmit Prakash Shukla * | Application |---[2]-->| + enqueue to | 4166a30a29SAmit Prakash Shukla * | | | dmadev | 4266a30a29SAmit Prakash Shukla * +--------------+ +--------------+ 4366a30a29SAmit Prakash Shukla * ^ ^ | 4466a30a29SAmit Prakash Shukla * | | [3] 4566a30a29SAmit Prakash Shukla * [6] [1] | 4666a30a29SAmit Prakash Shukla * | | | 4766a30a29SAmit Prakash Shukla * +--------------+ | 4866a30a29SAmit Prakash Shukla * | | | 4966a30a29SAmit Prakash Shukla * | Event device | | 5066a30a29SAmit Prakash Shukla * | | | 5166a30a29SAmit Prakash Shukla * +--------------+ | 5266a30a29SAmit Prakash Shukla * ^ | 5366a30a29SAmit Prakash Shukla * | | 5466a30a29SAmit Prakash Shukla * [5] | 5566a30a29SAmit Prakash Shukla * | v 5666a30a29SAmit Prakash Shukla * +--------------+ +--------------+ 5766a30a29SAmit Prakash Shukla * | | | | 5866a30a29SAmit Prakash Shukla * | DMA adapter |<--[4]---| dmadev | 5966a30a29SAmit Prakash Shukla * | | | | 6066a30a29SAmit Prakash Shukla * +--------------+ +--------------+ 6166a30a29SAmit Prakash Shukla * 6266a30a29SAmit Prakash Shukla * 6366a30a29SAmit Prakash Shukla * [1] Application dequeues events from the previous stage. 6466a30a29SAmit Prakash Shukla * [2] Application prepares the DMA operations. 6566a30a29SAmit Prakash Shukla * [3] DMA operations are submitted to dmadev by application. 6666a30a29SAmit Prakash Shukla * [4] DMA adapter dequeues DMA completions from dmadev. 6766a30a29SAmit Prakash Shukla * [5] DMA adapter enqueues events to the eventdev. 6866a30a29SAmit Prakash Shukla * [6] Application dequeues from eventdev for further processing. 6966a30a29SAmit Prakash Shukla * 7066a30a29SAmit Prakash Shukla * In the RTE_EVENT_DMA_ADAPTER_OP_NEW mode, application submits DMA operations directly to DMA 7166a30a29SAmit Prakash Shukla * device. The DMA adapter then dequeues DMA completions from DMA device and enqueue events to the 7266a30a29SAmit Prakash Shukla * event device. This mode does not ensure ingress ordering, if the application directly enqueues 7366a30a29SAmit Prakash Shukla * to dmadev without going through DMA / atomic stage i.e. removing item [1] and [2]. 7466a30a29SAmit Prakash Shukla * 7566a30a29SAmit Prakash Shukla * Events dequeued from the adapter will be treated as new events. In this mode, application needs 7666a30a29SAmit Prakash Shukla * to specify event information (response information) which is needed to enqueue an event after the 7766a30a29SAmit Prakash Shukla * DMA operation is completed. 7866a30a29SAmit Prakash Shukla * 7966a30a29SAmit Prakash Shukla * 8066a30a29SAmit Prakash Shukla * Working model of RTE_EVENT_DMA_ADAPTER_OP_FORWARD mode: 8166a30a29SAmit Prakash Shukla * 8266a30a29SAmit Prakash Shukla * +--------------+ +--------------+ 8366a30a29SAmit Prakash Shukla * --[1]-->| |---[2]-->| Application | 8466a30a29SAmit Prakash Shukla * | Event device | | in | 8566a30a29SAmit Prakash Shukla * <--[8]--| |<--[3]---| Ordered stage| 8666a30a29SAmit Prakash Shukla * +--------------+ +--------------+ 8766a30a29SAmit Prakash Shukla * ^ | 8866a30a29SAmit Prakash Shukla * | [4] 8966a30a29SAmit Prakash Shukla * [7] | 9066a30a29SAmit Prakash Shukla * | v 9166a30a29SAmit Prakash Shukla * +----------------+ +--------------+ 9266a30a29SAmit Prakash Shukla * | |--[5]->| | 9366a30a29SAmit Prakash Shukla * | DMA adapter | | dmadev | 9466a30a29SAmit Prakash Shukla * | |<-[6]--| | 9566a30a29SAmit Prakash Shukla * +----------------+ +--------------+ 9666a30a29SAmit Prakash Shukla * 9766a30a29SAmit Prakash Shukla * 9866a30a29SAmit Prakash Shukla * [1] Events from the previous stage. 9966a30a29SAmit Prakash Shukla * [2] Application in ordered stage dequeues events from eventdev. 10066a30a29SAmit Prakash Shukla * [3] Application enqueues DMA operations as events to eventdev. 10166a30a29SAmit Prakash Shukla * [4] DMA adapter dequeues event from eventdev. 10266a30a29SAmit Prakash Shukla * [5] DMA adapter submits DMA operations to dmadev (Atomic stage). 10366a30a29SAmit Prakash Shukla * [6] DMA adapter dequeues DMA completions from dmadev 10466a30a29SAmit Prakash Shukla * [7] DMA adapter enqueues events to the eventdev 10566a30a29SAmit Prakash Shukla * [8] Events to the next stage 10666a30a29SAmit Prakash Shukla * 10766a30a29SAmit Prakash Shukla * In the event forward (RTE_EVENT_DMA_ADAPTER_OP_FORWARD) mode, if the HW supports the capability 10866a30a29SAmit Prakash Shukla * RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD, application can directly submit the DMA 10966a30a29SAmit Prakash Shukla * operations to the dmadev. If not, application retrieves the event port of the DMA adapter 11066a30a29SAmit Prakash Shukla * through the API, rte_event_DMA_adapter_event_port_get(). Then, links its event queue to this 11166a30a29SAmit Prakash Shukla * port and starts enqueuing DMA operations as events to the eventdev. The adapter then dequeues 11266a30a29SAmit Prakash Shukla * the events and submits the DMA operations to the dmadev. After the DMA completions, the adapter 11366a30a29SAmit Prakash Shukla * enqueues events to the event device. 11466a30a29SAmit Prakash Shukla * 11566a30a29SAmit Prakash Shukla * Application can use this mode, when ingress packet ordering is needed. Events dequeued from the 11666a30a29SAmit Prakash Shukla * adapter will be treated as forwarded events. In this mode, the application needs to specify the 11766a30a29SAmit Prakash Shukla * dmadev ID and queue pair ID (request information) needed to enqueue an DMA operation in addition 11866a30a29SAmit Prakash Shukla * to the event information (response information) needed to enqueue an event after the DMA 11966a30a29SAmit Prakash Shukla * operation has completed. 12066a30a29SAmit Prakash Shukla * 12166a30a29SAmit Prakash Shukla * The event DMA adapter provides common APIs to configure the packet flow from the DMA device to 12266a30a29SAmit Prakash Shukla * event devices for both SW and HW based transfers. The DMA event adapter's functions are: 12366a30a29SAmit Prakash Shukla * 12466a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_create_ext() 12566a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_create() 12666a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_free() 12766a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_vchan_add() 12866a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_vchan_del() 12966a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_start() 13066a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_stop() 13166a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_stats_get() 13266a30a29SAmit Prakash Shukla * - rte_event_dma_adapter_stats_reset() 13366a30a29SAmit Prakash Shukla * 13466a30a29SAmit Prakash Shukla * The application creates an instance using rte_event_dma_adapter_create() or 13566a30a29SAmit Prakash Shukla * rte_event_dma_adapter_create_ext(). 13666a30a29SAmit Prakash Shukla * 13766a30a29SAmit Prakash Shukla * dmadev queue pair addition / deletion is done using the rte_event_dma_adapter_vchan_add() / 13866a30a29SAmit Prakash Shukla * rte_event_dma_adapter_vchan_del() APIs. If HW supports the capability 13966a30a29SAmit Prakash Shukla * RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND, event information must be passed to the 14066a30a29SAmit Prakash Shukla * add API. 14166a30a29SAmit Prakash Shukla * 14266a30a29SAmit Prakash Shukla */ 14366a30a29SAmit Prakash Shukla 14466a30a29SAmit Prakash Shukla #include <stdint.h> 14566a30a29SAmit Prakash Shukla 14666a30a29SAmit Prakash Shukla #include <rte_common.h> 14766a30a29SAmit Prakash Shukla #include <rte_dmadev_pmd.h> 14866a30a29SAmit Prakash Shukla #include <rte_eventdev.h> 14966a30a29SAmit Prakash Shukla 15066a30a29SAmit Prakash Shukla #ifdef __cplusplus 15166a30a29SAmit Prakash Shukla extern "C" { 15266a30a29SAmit Prakash Shukla #endif 15366a30a29SAmit Prakash Shukla 15466a30a29SAmit Prakash Shukla /** 15566a30a29SAmit Prakash Shukla * A structure used to hold event based DMA operation entry. All the information 15666a30a29SAmit Prakash Shukla * required for a DMA transfer shall be populated in "struct rte_event_dma_adapter_op" 15766a30a29SAmit Prakash Shukla * instance. 15866a30a29SAmit Prakash Shukla */ 15966a30a29SAmit Prakash Shukla struct rte_event_dma_adapter_op { 16066a30a29SAmit Prakash Shukla uint64_t flags; 16166a30a29SAmit Prakash Shukla /**< Flags related to the operation. 16266a30a29SAmit Prakash Shukla * @see RTE_DMA_OP_FLAG_* 16366a30a29SAmit Prakash Shukla */ 16466a30a29SAmit Prakash Shukla struct rte_mempool *op_mp; 16566a30a29SAmit Prakash Shukla /**< Mempool from which op is allocated. */ 166588dcac2SPavan Nikhilesh enum rte_dma_status_code status; 167588dcac2SPavan Nikhilesh /**< Status code for this operation. */ 168588dcac2SPavan Nikhilesh uint32_t rsvd; 169588dcac2SPavan Nikhilesh /**< Reserved for future use. */ 170588dcac2SPavan Nikhilesh uint64_t impl_opaque[2]; 171588dcac2SPavan Nikhilesh /**< Implementation-specific opaque data. 172588dcac2SPavan Nikhilesh * An dma device implementation use this field to hold 173588dcac2SPavan Nikhilesh * implementation specific values to share between dequeue and enqueue 174588dcac2SPavan Nikhilesh * operations. 175588dcac2SPavan Nikhilesh * The application should not modify this field. 176588dcac2SPavan Nikhilesh */ 177588dcac2SPavan Nikhilesh uint64_t user_meta; 178588dcac2SPavan Nikhilesh /**< Memory to store user specific metadata. 179588dcac2SPavan Nikhilesh * The dma device implementation should not modify this area. 180588dcac2SPavan Nikhilesh */ 181588dcac2SPavan Nikhilesh uint64_t event_meta; 182cfa81500SPavan Nikhilesh /**< Event metadata of DMA completion event. 183cfa81500SPavan Nikhilesh * Used when RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND is not 184cfa81500SPavan Nikhilesh * supported in OP_NEW mode. 185588dcac2SPavan Nikhilesh * @see rte_event_dma_adapter_mode::RTE_EVENT_DMA_ADAPTER_OP_NEW 186cfa81500SPavan Nikhilesh * @see RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND 187cfa81500SPavan Nikhilesh * 188cfa81500SPavan Nikhilesh * Used when RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD is not 189cfa81500SPavan Nikhilesh * supported in OP_FWD mode. 190cfa81500SPavan Nikhilesh * @see rte_event_dma_adapter_mode::RTE_EVENT_DMA_ADAPTER_OP_FORWARD 191cfa81500SPavan Nikhilesh * @see RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD 192cfa81500SPavan Nikhilesh * 193588dcac2SPavan Nikhilesh * @see struct rte_event::event 194588dcac2SPavan Nikhilesh */ 195588dcac2SPavan Nikhilesh int16_t dma_dev_id; 196588dcac2SPavan Nikhilesh /**< DMA device ID to be used with OP_FORWARD mode. 197588dcac2SPavan Nikhilesh * @see rte_event_dma_adapter_mode::RTE_EVENT_DMA_ADAPTER_OP_FORWARD 198588dcac2SPavan Nikhilesh */ 199588dcac2SPavan Nikhilesh uint16_t vchan; 200588dcac2SPavan Nikhilesh /**< DMA vchan ID to be used with OP_FORWARD mode 201588dcac2SPavan Nikhilesh * @see rte_event_dma_adapter_mode::RTE_EVENT_DMA_ADAPTER_OP_FORWARD 202588dcac2SPavan Nikhilesh */ 203588dcac2SPavan Nikhilesh uint16_t nb_src; 204588dcac2SPavan Nikhilesh /**< Number of source segments. */ 205588dcac2SPavan Nikhilesh uint16_t nb_dst; 206588dcac2SPavan Nikhilesh /**< Number of destination segments. */ 207*29911b32SStephen Hemminger struct rte_dma_sge src_dst_seg[]; 208588dcac2SPavan Nikhilesh /**< Source and destination segments. */ 20966a30a29SAmit Prakash Shukla }; 21066a30a29SAmit Prakash Shukla 21166a30a29SAmit Prakash Shukla /** 21266a30a29SAmit Prakash Shukla * DMA event adapter mode 21366a30a29SAmit Prakash Shukla */ 21466a30a29SAmit Prakash Shukla enum rte_event_dma_adapter_mode { 21566a30a29SAmit Prakash Shukla RTE_EVENT_DMA_ADAPTER_OP_NEW, 21666a30a29SAmit Prakash Shukla /**< Start the DMA adapter in event new mode. 21766a30a29SAmit Prakash Shukla * @see RTE_EVENT_OP_NEW. 21866a30a29SAmit Prakash Shukla * 21966a30a29SAmit Prakash Shukla * Application submits DMA operations to the dmadev. Adapter only dequeues the DMA 22066a30a29SAmit Prakash Shukla * completions from dmadev and enqueue events to the eventdev. 22166a30a29SAmit Prakash Shukla */ 22266a30a29SAmit Prakash Shukla 22366a30a29SAmit Prakash Shukla RTE_EVENT_DMA_ADAPTER_OP_FORWARD, 22466a30a29SAmit Prakash Shukla /**< Start the DMA adapter in event forward mode. 22566a30a29SAmit Prakash Shukla * @see RTE_EVENT_OP_FORWARD. 22666a30a29SAmit Prakash Shukla * 22766a30a29SAmit Prakash Shukla * Application submits DMA requests as events to the DMA adapter or DMA device based on 22866a30a29SAmit Prakash Shukla * RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability. DMA completions are enqueued 22966a30a29SAmit Prakash Shukla * back to the eventdev by DMA adapter. 23066a30a29SAmit Prakash Shukla */ 23166a30a29SAmit Prakash Shukla }; 23266a30a29SAmit Prakash Shukla 23366a30a29SAmit Prakash Shukla /** 23466a30a29SAmit Prakash Shukla * Adapter configuration structure that the adapter configuration callback function is expected to 23566a30a29SAmit Prakash Shukla * fill out. 23666a30a29SAmit Prakash Shukla * 23766a30a29SAmit Prakash Shukla * @see rte_event_dma_adapter_conf_cb 23866a30a29SAmit Prakash Shukla */ 23966a30a29SAmit Prakash Shukla struct rte_event_dma_adapter_conf { 24066a30a29SAmit Prakash Shukla uint8_t event_port_id; 24166a30a29SAmit Prakash Shukla /** < Event port identifier, the adapter enqueues events to this port and dequeues DMA 24266a30a29SAmit Prakash Shukla * request events in RTE_EVENT_DMA_ADAPTER_OP_FORWARD mode. 24366a30a29SAmit Prakash Shukla */ 24466a30a29SAmit Prakash Shukla 24566a30a29SAmit Prakash Shukla uint32_t max_nb; 24666a30a29SAmit Prakash Shukla /**< The adapter can return early if it has processed at least max_nb DMA ops. This isn't 24766a30a29SAmit Prakash Shukla * treated as a requirement; batching may cause the adapter to process more than max_nb DMA 24866a30a29SAmit Prakash Shukla * ops. 24966a30a29SAmit Prakash Shukla */ 25066a30a29SAmit Prakash Shukla }; 25166a30a29SAmit Prakash Shukla 25266a30a29SAmit Prakash Shukla /** 25366a30a29SAmit Prakash Shukla * Adapter runtime configuration parameters 25466a30a29SAmit Prakash Shukla */ 25566a30a29SAmit Prakash Shukla struct rte_event_dma_adapter_runtime_params { 25666a30a29SAmit Prakash Shukla uint32_t max_nb; 25766a30a29SAmit Prakash Shukla /**< The adapter can return early if it has processed at least max_nb DMA ops. This isn't 25866a30a29SAmit Prakash Shukla * treated as a requirement; batching may cause the adapter to process more than max_nb DMA 25966a30a29SAmit Prakash Shukla * ops. 26066a30a29SAmit Prakash Shukla * 26166a30a29SAmit Prakash Shukla * Callback function passed to rte_event_dma_adapter_create_ext() configures the adapter 26266a30a29SAmit Prakash Shukla * with default value of max_nb. 26366a30a29SAmit Prakash Shukla * rte_event_dma_adapter_runtime_params_set() allows to re-configure max_nb during runtime 26466a30a29SAmit Prakash Shukla * (after adding at least one queue pair) 26566a30a29SAmit Prakash Shukla * 26666a30a29SAmit Prakash Shukla * This is valid for the devices without RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD or 26766a30a29SAmit Prakash Shukla * RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_NEW capability. 26866a30a29SAmit Prakash Shukla */ 26966a30a29SAmit Prakash Shukla 27066a30a29SAmit Prakash Shukla uint32_t rsvd[15]; 27166a30a29SAmit Prakash Shukla /**< Reserved fields for future expansion */ 27266a30a29SAmit Prakash Shukla }; 27366a30a29SAmit Prakash Shukla 27466a30a29SAmit Prakash Shukla /** 27566a30a29SAmit Prakash Shukla * Function type used for adapter configuration callback. The callback is used to fill in members of 27666a30a29SAmit Prakash Shukla * the struct rte_event_dma_adapter_conf, this callback is invoked when creating a SW service for 27766a30a29SAmit Prakash Shukla * packet transfer from dmadev vchan to the event device. The SW service is created within the 27866a30a29SAmit Prakash Shukla * function, rte_event_dma_adapter_vchan_add(), if SW based packet transfers from dmadev vchan 27966a30a29SAmit Prakash Shukla * to the event device are required. 28066a30a29SAmit Prakash Shukla * 28166a30a29SAmit Prakash Shukla * @param id 28266a30a29SAmit Prakash Shukla * Adapter identifier. 28366a30a29SAmit Prakash Shukla * @param evdev_id 28466a30a29SAmit Prakash Shukla * Event device identifier. 28566a30a29SAmit Prakash Shukla * @param conf 28666a30a29SAmit Prakash Shukla * Structure that needs to be populated by this callback. 28766a30a29SAmit Prakash Shukla * @param arg 28866a30a29SAmit Prakash Shukla * Argument to the callback. This is the same as the conf_arg passed to the 28966a30a29SAmit Prakash Shukla * rte_event_dma_adapter_create_ext(). 29066a30a29SAmit Prakash Shukla */ 29166a30a29SAmit Prakash Shukla typedef int (*rte_event_dma_adapter_conf_cb)(uint8_t id, uint8_t evdev_id, 29266a30a29SAmit Prakash Shukla struct rte_event_dma_adapter_conf *conf, void *arg); 29366a30a29SAmit Prakash Shukla 29466a30a29SAmit Prakash Shukla /** 29566a30a29SAmit Prakash Shukla * A structure used to retrieve statistics for an event DMA adapter instance. 29666a30a29SAmit Prakash Shukla */ 29766a30a29SAmit Prakash Shukla struct rte_event_dma_adapter_stats { 29866a30a29SAmit Prakash Shukla uint64_t event_poll_count; 29966a30a29SAmit Prakash Shukla /**< Event port poll count */ 30066a30a29SAmit Prakash Shukla 30166a30a29SAmit Prakash Shukla uint64_t event_deq_count; 30266a30a29SAmit Prakash Shukla /**< Event dequeue count */ 30366a30a29SAmit Prakash Shukla 30466a30a29SAmit Prakash Shukla uint64_t dma_enq_count; 30566a30a29SAmit Prakash Shukla /**< dmadev enqueue count */ 30666a30a29SAmit Prakash Shukla 30766a30a29SAmit Prakash Shukla uint64_t dma_enq_fail_count; 30866a30a29SAmit Prakash Shukla /**< dmadev enqueue failed count */ 30966a30a29SAmit Prakash Shukla 31066a30a29SAmit Prakash Shukla uint64_t dma_deq_count; 31166a30a29SAmit Prakash Shukla /**< dmadev dequeue count */ 31266a30a29SAmit Prakash Shukla 31366a30a29SAmit Prakash Shukla uint64_t event_enq_count; 31466a30a29SAmit Prakash Shukla /**< Event enqueue count */ 31566a30a29SAmit Prakash Shukla 31666a30a29SAmit Prakash Shukla uint64_t event_enq_retry_count; 31766a30a29SAmit Prakash Shukla /**< Event enqueue retry count */ 31866a30a29SAmit Prakash Shukla 31966a30a29SAmit Prakash Shukla uint64_t event_enq_fail_count; 32066a30a29SAmit Prakash Shukla /**< Event enqueue fail count */ 32166a30a29SAmit Prakash Shukla }; 32266a30a29SAmit Prakash Shukla 32366a30a29SAmit Prakash Shukla /** 32466a30a29SAmit Prakash Shukla * Create a new event DMA adapter with the specified identifier. 32566a30a29SAmit Prakash Shukla * 32666a30a29SAmit Prakash Shukla * @param id 32766a30a29SAmit Prakash Shukla * Adapter identifier. 32866a30a29SAmit Prakash Shukla * @param evdev_id 32966a30a29SAmit Prakash Shukla * Event device identifier. 33066a30a29SAmit Prakash Shukla * @param conf_cb 33166a30a29SAmit Prakash Shukla * Callback function that fills in members of a struct rte_event_dma_adapter_conf struct passed 33266a30a29SAmit Prakash Shukla * into it. 33366a30a29SAmit Prakash Shukla * @param mode 33466a30a29SAmit Prakash Shukla * Flag to indicate the mode of the adapter. 33566a30a29SAmit Prakash Shukla * @see rte_event_dma_adapter_mode 33666a30a29SAmit Prakash Shukla * @param conf_arg 33766a30a29SAmit Prakash Shukla * Argument that is passed to the conf_cb function. 33866a30a29SAmit Prakash Shukla * 33966a30a29SAmit Prakash Shukla * @return 34066a30a29SAmit Prakash Shukla * - 0: Success 34166a30a29SAmit Prakash Shukla * - <0: Error code on failure 34266a30a29SAmit Prakash Shukla */ 34366a30a29SAmit Prakash Shukla __rte_experimental 34466a30a29SAmit Prakash Shukla int rte_event_dma_adapter_create_ext(uint8_t id, uint8_t evdev_id, 34566a30a29SAmit Prakash Shukla rte_event_dma_adapter_conf_cb conf_cb, 34666a30a29SAmit Prakash Shukla enum rte_event_dma_adapter_mode mode, void *conf_arg); 34766a30a29SAmit Prakash Shukla 34866a30a29SAmit Prakash Shukla /** 34966a30a29SAmit Prakash Shukla * Create a new event DMA adapter with the specified identifier. This function uses an internal 35066a30a29SAmit Prakash Shukla * configuration function that creates an event port. This default function reconfigures the event 35166a30a29SAmit Prakash Shukla * device with an additional event port and set up the event port using the port_config parameter 35266a30a29SAmit Prakash Shukla * passed into this function. In case the application needs more control in configuration of the 35366a30a29SAmit Prakash Shukla * service, it should use the rte_event_dma_adapter_create_ext() version. 35466a30a29SAmit Prakash Shukla * 35566a30a29SAmit Prakash Shukla * @param id 35666a30a29SAmit Prakash Shukla * Adapter identifier. 35766a30a29SAmit Prakash Shukla * @param evdev_id 35866a30a29SAmit Prakash Shukla * Event device identifier. 35966a30a29SAmit Prakash Shukla * @param port_config 36066a30a29SAmit Prakash Shukla * Argument of type *rte_event_port_conf* that is passed to the conf_cb function. 36166a30a29SAmit Prakash Shukla * @param mode 36266a30a29SAmit Prakash Shukla * Flag to indicate the mode of the adapter. 36366a30a29SAmit Prakash Shukla * @see rte_event_dma_adapter_mode 36466a30a29SAmit Prakash Shukla * 36566a30a29SAmit Prakash Shukla * @return 36666a30a29SAmit Prakash Shukla * - 0: Success 36766a30a29SAmit Prakash Shukla * - <0: Error code on failure 36866a30a29SAmit Prakash Shukla */ 36966a30a29SAmit Prakash Shukla __rte_experimental 37066a30a29SAmit Prakash Shukla int rte_event_dma_adapter_create(uint8_t id, uint8_t evdev_id, 37166a30a29SAmit Prakash Shukla struct rte_event_port_conf *port_config, 37266a30a29SAmit Prakash Shukla enum rte_event_dma_adapter_mode mode); 37366a30a29SAmit Prakash Shukla 37466a30a29SAmit Prakash Shukla /** 37566a30a29SAmit Prakash Shukla * Free an event DMA adapter 37666a30a29SAmit Prakash Shukla * 37766a30a29SAmit Prakash Shukla * @param id 37866a30a29SAmit Prakash Shukla * Adapter identifier. 37966a30a29SAmit Prakash Shukla * @return 38066a30a29SAmit Prakash Shukla * - 0: Success 38166a30a29SAmit Prakash Shukla * - <0: Error code on failure, If the adapter still has queue pairs added to it, the function 38266a30a29SAmit Prakash Shukla * returns -EBUSY. 38366a30a29SAmit Prakash Shukla */ 38466a30a29SAmit Prakash Shukla __rte_experimental 38566a30a29SAmit Prakash Shukla int rte_event_dma_adapter_free(uint8_t id); 38666a30a29SAmit Prakash Shukla 38766a30a29SAmit Prakash Shukla /** 38866a30a29SAmit Prakash Shukla * Retrieve the event port of an adapter. 38966a30a29SAmit Prakash Shukla * 39066a30a29SAmit Prakash Shukla * @param id 39166a30a29SAmit Prakash Shukla * Adapter identifier. 39266a30a29SAmit Prakash Shukla * 39366a30a29SAmit Prakash Shukla * @param [out] event_port_id 39466a30a29SAmit Prakash Shukla * Application links its event queue to this adapter port which is used in 39566a30a29SAmit Prakash Shukla * RTE_EVENT_DMA_ADAPTER_OP_FORWARD mode. 39666a30a29SAmit Prakash Shukla * 39766a30a29SAmit Prakash Shukla * @return 39866a30a29SAmit Prakash Shukla * - 0: Success 39966a30a29SAmit Prakash Shukla * - <0: Error code on failure. 40066a30a29SAmit Prakash Shukla */ 40166a30a29SAmit Prakash Shukla __rte_experimental 40266a30a29SAmit Prakash Shukla int rte_event_dma_adapter_event_port_get(uint8_t id, uint8_t *event_port_id); 40366a30a29SAmit Prakash Shukla 40466a30a29SAmit Prakash Shukla /** 40566a30a29SAmit Prakash Shukla * Add a vchan to an event DMA adapter. 40666a30a29SAmit Prakash Shukla * 40766a30a29SAmit Prakash Shukla * @param id 40866a30a29SAmit Prakash Shukla * Adapter identifier. 40966a30a29SAmit Prakash Shukla * @param dmadev_id 41066a30a29SAmit Prakash Shukla * dmadev identifier. 41166a30a29SAmit Prakash Shukla * @param vchan 41266a30a29SAmit Prakash Shukla * DMA device vchan identifier. If vchan is set -1, adapter adds all the 41366a30a29SAmit Prakash Shukla * preconfigured vchan to the instance. 41466a30a29SAmit Prakash Shukla * @param event 41566a30a29SAmit Prakash Shukla * If HW supports dmadev vchan to event queue binding, application is expected to fill in 41666a30a29SAmit Prakash Shukla * event information, else it will be NULL. 41766a30a29SAmit Prakash Shukla * @see RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_VCHAN_EV_BIND 41866a30a29SAmit Prakash Shukla * 41966a30a29SAmit Prakash Shukla * @return 42066a30a29SAmit Prakash Shukla * - 0: Success, vchan added correctly. 42166a30a29SAmit Prakash Shukla * - <0: Error code on failure. 42266a30a29SAmit Prakash Shukla */ 42366a30a29SAmit Prakash Shukla __rte_experimental 42466a30a29SAmit Prakash Shukla int rte_event_dma_adapter_vchan_add(uint8_t id, int16_t dmadev_id, uint16_t vchan, 42566a30a29SAmit Prakash Shukla const struct rte_event *event); 42666a30a29SAmit Prakash Shukla 42766a30a29SAmit Prakash Shukla /** 42866a30a29SAmit Prakash Shukla * Delete a vchan from an event DMA adapter. 42966a30a29SAmit Prakash Shukla * 43066a30a29SAmit Prakash Shukla * @param id 43166a30a29SAmit Prakash Shukla * Adapter identifier. 43266a30a29SAmit Prakash Shukla * @param dmadev_id 43366a30a29SAmit Prakash Shukla * DMA device identifier. 43466a30a29SAmit Prakash Shukla * @param vchan 43566a30a29SAmit Prakash Shukla * DMA device vchan identifier. 43666a30a29SAmit Prakash Shukla * 43766a30a29SAmit Prakash Shukla * @return 43866a30a29SAmit Prakash Shukla * - 0: Success, vchan deleted successfully. 43966a30a29SAmit Prakash Shukla * - <0: Error code on failure. 44066a30a29SAmit Prakash Shukla */ 44166a30a29SAmit Prakash Shukla __rte_experimental 44266a30a29SAmit Prakash Shukla int rte_event_dma_adapter_vchan_del(uint8_t id, int16_t dmadev_id, uint16_t vchan); 44366a30a29SAmit Prakash Shukla 44466a30a29SAmit Prakash Shukla /** 44566a30a29SAmit Prakash Shukla * Retrieve the service ID of an adapter. If the adapter doesn't use a rte_service function, this 44666a30a29SAmit Prakash Shukla * function returns -ESRCH. 44766a30a29SAmit Prakash Shukla * 44866a30a29SAmit Prakash Shukla * @param id 44966a30a29SAmit Prakash Shukla * Adapter identifier. 45066a30a29SAmit Prakash Shukla * @param [out] service_id 45166a30a29SAmit Prakash Shukla * A pointer to a uint32_t, to be filled in with the service id. 45266a30a29SAmit Prakash Shukla * 45366a30a29SAmit Prakash Shukla * @return 45466a30a29SAmit Prakash Shukla * - 0: Success 45566a30a29SAmit Prakash Shukla * - <0: Error code on failure, if the adapter doesn't use a rte_service function, this function 45666a30a29SAmit Prakash Shukla * returns -ESRCH. 45766a30a29SAmit Prakash Shukla */ 45866a30a29SAmit Prakash Shukla __rte_experimental 45966a30a29SAmit Prakash Shukla int rte_event_dma_adapter_service_id_get(uint8_t id, uint32_t *service_id); 46066a30a29SAmit Prakash Shukla 46166a30a29SAmit Prakash Shukla /** 46266a30a29SAmit Prakash Shukla * Start event DMA adapter 46366a30a29SAmit Prakash Shukla * 46466a30a29SAmit Prakash Shukla * @param id 46566a30a29SAmit Prakash Shukla * Adapter identifier. 46666a30a29SAmit Prakash Shukla * 46766a30a29SAmit Prakash Shukla * @return 46866a30a29SAmit Prakash Shukla * - 0: Success, adapter started successfully. 46966a30a29SAmit Prakash Shukla * - <0: Error code on failure. 47066a30a29SAmit Prakash Shukla * 47166a30a29SAmit Prakash Shukla * @note The eventdev and dmadev to which the event_dma_adapter is connected should be started 47266a30a29SAmit Prakash Shukla * before calling rte_event_dma_adapter_start(). 47366a30a29SAmit Prakash Shukla */ 47466a30a29SAmit Prakash Shukla __rte_experimental 47566a30a29SAmit Prakash Shukla int rte_event_dma_adapter_start(uint8_t id); 47666a30a29SAmit Prakash Shukla 47766a30a29SAmit Prakash Shukla /** 47866a30a29SAmit Prakash Shukla * Stop event DMA adapter 47966a30a29SAmit Prakash Shukla * 48066a30a29SAmit Prakash Shukla * @param id 48166a30a29SAmit Prakash Shukla * Adapter identifier. 48266a30a29SAmit Prakash Shukla * 48366a30a29SAmit Prakash Shukla * @return 48466a30a29SAmit Prakash Shukla * - 0: Success, adapter stopped successfully. 48566a30a29SAmit Prakash Shukla * - <0: Error code on failure. 48666a30a29SAmit Prakash Shukla */ 48766a30a29SAmit Prakash Shukla __rte_experimental 48866a30a29SAmit Prakash Shukla int rte_event_dma_adapter_stop(uint8_t id); 48966a30a29SAmit Prakash Shukla 49066a30a29SAmit Prakash Shukla /** 49166a30a29SAmit Prakash Shukla * Initialize the adapter runtime configuration parameters 49266a30a29SAmit Prakash Shukla * 49366a30a29SAmit Prakash Shukla * @param params 49466a30a29SAmit Prakash Shukla * A pointer to structure of type struct rte_event_dma_adapter_runtime_params 49566a30a29SAmit Prakash Shukla * 49666a30a29SAmit Prakash Shukla * @return 49766a30a29SAmit Prakash Shukla * - 0: Success 49866a30a29SAmit Prakash Shukla * - <0: Error code on failure 49966a30a29SAmit Prakash Shukla */ 50066a30a29SAmit Prakash Shukla __rte_experimental 50166a30a29SAmit Prakash Shukla int rte_event_dma_adapter_runtime_params_init(struct rte_event_dma_adapter_runtime_params *params); 50266a30a29SAmit Prakash Shukla 50366a30a29SAmit Prakash Shukla /** 50466a30a29SAmit Prakash Shukla * Set the adapter runtime configuration parameters 50566a30a29SAmit Prakash Shukla * 50666a30a29SAmit Prakash Shukla * @param id 50766a30a29SAmit Prakash Shukla * Adapter identifier 50866a30a29SAmit Prakash Shukla * 50966a30a29SAmit Prakash Shukla * @param params 51066a30a29SAmit Prakash Shukla * A pointer to structure of type struct rte_event_dma_adapter_runtime_params with configuration 51166a30a29SAmit Prakash Shukla * parameter values. The reserved fields of this structure must be initialized to zero and the valid 51266a30a29SAmit Prakash Shukla * fields need to be set appropriately. This struct can be initialized using 51366a30a29SAmit Prakash Shukla * rte_event_dma_adapter_runtime_params_init() API to default values or application may reset this 51466a30a29SAmit Prakash Shukla * struct and update required fields. 51566a30a29SAmit Prakash Shukla * 51666a30a29SAmit Prakash Shukla * @return 51766a30a29SAmit Prakash Shukla * - 0: Success 51866a30a29SAmit Prakash Shukla * - <0: Error code on failure 51966a30a29SAmit Prakash Shukla */ 52066a30a29SAmit Prakash Shukla __rte_experimental 52166a30a29SAmit Prakash Shukla int rte_event_dma_adapter_runtime_params_set(uint8_t id, 52266a30a29SAmit Prakash Shukla struct rte_event_dma_adapter_runtime_params *params); 52366a30a29SAmit Prakash Shukla 52466a30a29SAmit Prakash Shukla /** 52566a30a29SAmit Prakash Shukla * Get the adapter runtime configuration parameters 52666a30a29SAmit Prakash Shukla * 52766a30a29SAmit Prakash Shukla * @param id 52866a30a29SAmit Prakash Shukla * Adapter identifier 52966a30a29SAmit Prakash Shukla * 53066a30a29SAmit Prakash Shukla * @param[out] params 53166a30a29SAmit Prakash Shukla * A pointer to structure of type struct rte_event_dma_adapter_runtime_params containing valid 53266a30a29SAmit Prakash Shukla * adapter parameters when return value is 0. 53366a30a29SAmit Prakash Shukla * 53466a30a29SAmit Prakash Shukla * @return 53566a30a29SAmit Prakash Shukla * - 0: Success 53666a30a29SAmit Prakash Shukla * - <0: Error code on failure 53766a30a29SAmit Prakash Shukla */ 53866a30a29SAmit Prakash Shukla __rte_experimental 53966a30a29SAmit Prakash Shukla int rte_event_dma_adapter_runtime_params_get(uint8_t id, 54066a30a29SAmit Prakash Shukla struct rte_event_dma_adapter_runtime_params *params); 54166a30a29SAmit Prakash Shukla 54266a30a29SAmit Prakash Shukla /** 54366a30a29SAmit Prakash Shukla * Retrieve statistics for an adapter 54466a30a29SAmit Prakash Shukla * 54566a30a29SAmit Prakash Shukla * @param id 54666a30a29SAmit Prakash Shukla * Adapter identifier. 54766a30a29SAmit Prakash Shukla * @param [out] stats 54866a30a29SAmit Prakash Shukla * A pointer to structure used to retrieve statistics for an adapter. 54966a30a29SAmit Prakash Shukla * 55066a30a29SAmit Prakash Shukla * @return 55166a30a29SAmit Prakash Shukla * - 0: Success, retrieved successfully. 55266a30a29SAmit Prakash Shukla * - <0: Error code on failure. 55366a30a29SAmit Prakash Shukla */ 55466a30a29SAmit Prakash Shukla __rte_experimental 55566a30a29SAmit Prakash Shukla int rte_event_dma_adapter_stats_get(uint8_t id, struct rte_event_dma_adapter_stats *stats); 55666a30a29SAmit Prakash Shukla 55766a30a29SAmit Prakash Shukla /** 55866a30a29SAmit Prakash Shukla * Reset statistics for an adapter. 55966a30a29SAmit Prakash Shukla * 56066a30a29SAmit Prakash Shukla * @param id 56166a30a29SAmit Prakash Shukla * Adapter identifier. 56266a30a29SAmit Prakash Shukla * 56366a30a29SAmit Prakash Shukla * @return 56466a30a29SAmit Prakash Shukla * - 0: Success, statistics reset successfully. 56566a30a29SAmit Prakash Shukla * - <0: Error code on failure. 56666a30a29SAmit Prakash Shukla */ 56766a30a29SAmit Prakash Shukla __rte_experimental 56866a30a29SAmit Prakash Shukla int rte_event_dma_adapter_stats_reset(uint8_t id); 56966a30a29SAmit Prakash Shukla 57066a30a29SAmit Prakash Shukla /** 57166a30a29SAmit Prakash Shukla * Enqueue a burst of DMA operations as event objects supplied in *rte_event* structure on an event 57266a30a29SAmit Prakash Shukla * DMA adapter designated by its event *evdev_id* through the event port specified by *port_id*. 57366a30a29SAmit Prakash Shukla * This function is supported if the eventdev PMD has the 57466a30a29SAmit Prakash Shukla * #RTE_EVENT_DMA_ADAPTER_CAP_INTERNAL_PORT_OP_FWD capability flag set. 57566a30a29SAmit Prakash Shukla * 57666a30a29SAmit Prakash Shukla * The *nb_events* parameter is the number of event objects to enqueue that are supplied in the 57766a30a29SAmit Prakash Shukla * *ev* array of *rte_event* structure. 57866a30a29SAmit Prakash Shukla * 57966a30a29SAmit Prakash Shukla * The rte_event_dma_adapter_enqueue() function returns the number of event objects it actually 58066a30a29SAmit Prakash Shukla * enqueued. A return value equal to *nb_events* means that all event objects have been enqueued. 58166a30a29SAmit Prakash Shukla * 58266a30a29SAmit Prakash Shukla * @param evdev_id 58366a30a29SAmit Prakash Shukla * The identifier of the device. 58466a30a29SAmit Prakash Shukla * @param port_id 58566a30a29SAmit Prakash Shukla * The identifier of the event port. 58666a30a29SAmit Prakash Shukla * @param ev 58766a30a29SAmit Prakash Shukla * Points to an array of *nb_events* objects of type *rte_event* structure which contain the 58866a30a29SAmit Prakash Shukla * event object enqueue operations to be processed. 58966a30a29SAmit Prakash Shukla * @param nb_events 59066a30a29SAmit Prakash Shukla * The number of event objects to enqueue, typically number of 59166a30a29SAmit Prakash Shukla * rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...) available for this port. 59266a30a29SAmit Prakash Shukla * 59366a30a29SAmit Prakash Shukla * @return 59466a30a29SAmit Prakash Shukla * The number of event objects actually enqueued on the event device. The return value can be 59566a30a29SAmit Prakash Shukla * less than the value of the *nb_events* parameter when the event devices queue is full or if 59666a30a29SAmit Prakash Shukla * invalid parameters are specified in a *rte_event*. If the return value is less than *nb_events*, 59766a30a29SAmit Prakash Shukla * the remaining events at the end of ev[] are not consumed and the caller has to take care of them, 59866a30a29SAmit Prakash Shukla * and rte_errno is set accordingly. Possible errno values include: 59966a30a29SAmit Prakash Shukla * - EINVAL: The port ID is invalid, device ID is invalid, an event's queue ID is invalid, or an 60066a30a29SAmit Prakash Shukla * event's sched type doesn't match the capabilities of the destination queue. 60166a30a29SAmit Prakash Shukla * - ENOSPC: The event port was backpressured and unable to enqueue one or more events. This 60266a30a29SAmit Prakash Shukla * error code is only applicable to closed systems. 60366a30a29SAmit Prakash Shukla */ 60466a30a29SAmit Prakash Shukla __rte_experimental 60566a30a29SAmit Prakash Shukla uint16_t rte_event_dma_adapter_enqueue(uint8_t evdev_id, uint8_t port_id, struct rte_event ev[], 60666a30a29SAmit Prakash Shukla uint16_t nb_events); 60766a30a29SAmit Prakash Shukla 60866a30a29SAmit Prakash Shukla #ifdef __cplusplus 60966a30a29SAmit Prakash Shukla } 61066a30a29SAmit Prakash Shukla #endif 61166a30a29SAmit Prakash Shukla 61266a30a29SAmit Prakash Shukla #endif /* RTE_EVENT_DMA_ADAPTER */ 613