|
DPDK 25.11.0-rc1
|
#include <stdint.h>#include <rte_bitops.h>#include <rte_common.h>#include <rte_uuid.h>#include "rte_dmadev_core.h"#include "rte_dmadev_trace_fp.h"Go to the source code of this file.
Data Structures | |
| struct | rte_dma_info |
| struct | rte_dma_conf |
| struct | rte_dma_port_param |
| struct | rte_dma_auto_free_param |
| struct | rte_dma_inter_domain_param |
| struct | rte_dma_vchan_conf |
| struct | rte_dma_stats |
| struct | rte_dma_sge |
| struct | rte_dma_op |
Typedefs | |
| typedef void(* | rte_dma_access_pair_group_event_cb_t) (int16_t dev_id, int16_t group_id, rte_uuid_t domain_id, enum rte_dma_access_pair_group_event_type event) |
Functions | |
| int | rte_dma_dev_max (size_t dev_max) |
| int | rte_dma_get_dev_id_by_name (const char *name) |
| bool | rte_dma_is_valid (int16_t dev_id) |
| uint16_t | rte_dma_count_avail (void) |
| int16_t | rte_dma_next_dev (int16_t start_dev_id) |
| int | rte_dma_info_get (int16_t dev_id, struct rte_dma_info *dev_info) |
| int | rte_dma_configure (int16_t dev_id, const struct rte_dma_conf *dev_conf) |
| int | rte_dma_start (int16_t dev_id) |
| int | rte_dma_stop (int16_t dev_id) |
| int | rte_dma_close (int16_t dev_id) |
| int | rte_dma_vchan_setup (int16_t dev_id, uint16_t vchan, const struct rte_dma_vchan_conf *conf) |
| int | rte_dma_stats_get (int16_t dev_id, uint16_t vchan, struct rte_dma_stats *stats) |
| int | rte_dma_stats_reset (int16_t dev_id, uint16_t vchan) |
| int | rte_dma_vchan_status (int16_t dev_id, uint16_t vchan, enum rte_dma_vchan_status *status) |
| int | rte_dma_dump (int16_t dev_id, FILE *f) |
| __rte_experimental int | rte_dma_access_pair_group_create (int16_t dev_id, rte_uuid_t domain_id, rte_uuid_t token, int16_t *group_id, rte_dma_access_pair_group_event_cb_t cb) |
| __rte_experimental int | rte_dma_access_pair_group_destroy (int16_t dev_id, int16_t group_id) |
| __rte_experimental int | rte_dma_access_pair_group_join (int16_t dev_id, int16_t group_id, rte_uuid_t token, rte_dma_access_pair_group_event_cb_t cb) |
| __rte_experimental int | rte_dma_access_pair_group_leave (int16_t dev_id, int16_t group_id) |
| __rte_experimental int | rte_dma_access_pair_group_handler_get (int16_t dev_id, int16_t group_id, rte_uuid_t domain_id, uint16_t *handler) |
| static int | rte_dma_copy (int16_t dev_id, uint16_t vchan, rte_iova_t src, rte_iova_t dst, uint32_t length, uint64_t flags) |
| static int | rte_dma_copy_sg (int16_t dev_id, uint16_t vchan, struct rte_dma_sge *src, struct rte_dma_sge *dst, uint16_t nb_src, uint16_t nb_dst, uint64_t flags) |
| static int | rte_dma_fill (int16_t dev_id, uint16_t vchan, uint64_t pattern, rte_iova_t dst, uint32_t length, uint64_t flags) |
| static int | rte_dma_submit (int16_t dev_id, uint16_t vchan) |
| static uint16_t | rte_dma_completed (int16_t dev_id, uint16_t vchan, const uint16_t nb_cpls, uint16_t *last_idx, bool *has_error) |
| static uint16_t | rte_dma_completed_status (int16_t dev_id, uint16_t vchan, const uint16_t nb_cpls, uint16_t *last_idx, enum rte_dma_status_code *status) |
| static uint16_t | rte_dma_burst_capacity (int16_t dev_id, uint16_t vchan) |
| static uint16_t | rte_dma_enqueue_ops (int16_t dev_id, uint16_t vchan, struct rte_dma_op **ops, uint16_t nb_ops) |
| static uint16_t | rte_dma_dequeue_ops (int16_t dev_id, uint16_t vchan, struct rte_dma_op **ops, uint16_t nb_ops) |
DMA (Direct Memory Access) device API.
The DMA framework is built on the following model:
--------------- --------------- ---------------
| virtual DMA | | virtual DMA | | virtual DMA |
| channel | | channel | | channel |
--------------- --------------- ---------------
| | |
------------------ |
| |
------------ ------------
| dmadev | | dmadev |
------------ ------------
| |
------------------ ------------------
| HW DMA channel | | HW DMA channel |
------------------ ------------------
| |
--------------------------------
|
---------------------
| HW DMA Controller |
---------------------
The DMA controller could have multiple HW-DMA-channels (aka. HW-DMA-queues), each HW-DMA-channel should be represented by a dmadev.
The dmadev could create multiple virtual DMA channels, each virtual DMA channel represents a different transfer context. The DMA operation request must be submitted to the virtual DMA channel. e.g. Application could create virtual DMA channel 0 for memory-to-memory transfer scenario, and create virtual DMA channel 1 for memory-to-device transfer scenario.
This framework uses 'int16_t dev_id' as the device identifier of a dmadev, and 'uint16_t vchan' as the virtual DMA channel identifier in one dmadev.
The functions exported by the dmadev API to setup a device designated by its device identifier must be invoked in the following order:
Then, the application can invoke dataplane functions to process jobs.
If the application wants to change the configuration (i.e. invoke rte_dma_configure() or rte_dma_vchan_setup()), it must invoke rte_dma_stop() first to stop the device and then do the reconfiguration before invoking rte_dma_start() again. The dataplane functions should not be invoked when the device is stopped.
Finally, an application can close a dmadev by invoking the rte_dma_close() function.
The dataplane APIs include two parts: The first part is the submission of operation requests:
These APIs could work with different virtual DMA channels which have different contexts.
The first three APIs are used to submit the operation request to the virtual DMA channel, if the submission is successful, a positive ring_idx <= UINT16_MAX is returned, otherwise a negative number is returned.
The last API is used to issue doorbell to hardware, and also there are flags (
The second part is to obtain the result of requests:
About the ring_idx which enqueue APIs (e.g. rte_dma_copy(), rte_dma_fill()) return, the rules are as follows:
One example:
The DMA operation address used in enqueue APIs (i.e. rte_dma_copy(), rte_dma_copy_sg(), rte_dma_fill()) is defined as rte_iova_t type.
The dmadev supports two types of address: memory address and device address.
About MT-safe, all the functions of the dmadev API implemented by a PMD are lock-free functions which assume to not be invoked in parallel on different logical cores to work on the same target dmadev object.
Definition in file rte_dmadev.h.
| #define RTE_DMADEV_DEFAULT_MAX 64 |
Maximum number of devices if rte_dma_dev_max() is not called.
Definition at line 158 of file rte_dmadev.h.
| #define RTE_DMA_FOREACH_DEV | ( | p | ) |
Utility macro to iterate over all available dmadevs
Definition at line 217 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_MEM_TO_MEM RTE_BIT64(0) |
Support memory-to-memory transfer
Definition at line 227 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_MEM_TO_DEV RTE_BIT64(1) |
Support memory-to-device transfer.
Definition at line 229 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_DEV_TO_MEM RTE_BIT64(2) |
Support device-to-memory transfer.
Definition at line 231 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_DEV_TO_DEV RTE_BIT64(3) |
Support device-to-device transfer.
Definition at line 233 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_SVA RTE_BIT64(4) |
Support SVA which could use VA as DMA address. If device support SVA then application could pass any VA address like memory from rte_malloc(), rte_memzone(), malloc, stack memory. If device don't support SVA, then application should pass IOVA address which from rte_malloc(), rte_memzone().
Definition at line 240 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_SILENT RTE_BIT64(5) |
Support work in silent mode. In this mode, application don't required to invoke rte_dma_completed*() API.
Definition at line 246 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_HANDLES_ERRORS RTE_BIT64(6) |
Supports error handling
With this bit set, invalid input addresses will be reported as operation failures to the user but other operations can continue. Without this bit set, invalid data is not handled by either HW or driver, so user must ensure that all memory addresses are valid and accessible by HW.
Definition at line 254 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_M2D_AUTO_FREE RTE_BIT64(7) |
Support auto free for source buffer once mem to dev transfer is completed.
Definition at line 261 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_PRI_POLICY_SP RTE_BIT64(8) |
Support strict priority scheduling.
Application could assign fixed priority to the DMA device using 'priority' field in struct rte_dma_conf. Number of supported priority levels will be known from 'nb_priorities' field in struct rte_dma_info.
Definition at line 268 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_INTER_PROCESS_DOMAIN RTE_BIT64(9) |
Support inter-process DMA transfers.
When this bit is set, the DMA device can perform memory transfers between different process memory spaces.
Definition at line 274 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_INTER_OS_DOMAIN RTE_BIT64(10) |
Support inter-OS domain DMA transfers.
The DMA device can perform memory transfers across different operating system domains.
Definition at line 280 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_OPS_COPY RTE_BIT64(32) |
Support copy operation. This capability start with index of 32, so that it could leave gap between normal capability and ops capability.
Definition at line 286 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_OPS_COPY_SG RTE_BIT64(33) |
Support scatter-gather list copy operation.
Definition at line 288 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_OPS_FILL RTE_BIT64(34) |
Support fill operation.
Definition at line 290 of file rte_dmadev.h.
| #define RTE_DMA_CAPA_OPS_ENQ_DEQ RTE_BIT64(35) |
Support enqueue and dequeue operations.
Definition at line 292 of file rte_dmadev.h.
| #define RTE_DMA_CFG_FLAG_SILENT RTE_BIT64(0) |
DMA device configuration flags.
Definition at line 301 of file rte_dmadev.h.
| #define RTE_DMA_CFG_FLAG_ENQ_DEQ RTE_BIT64(1) |
Enable enqueue and dequeue operations
Definition at line 305 of file rte_dmadev.h.
| #define RTE_DMA_ALL_VCHAN 0xFFFFu |
Special ID, which is used to represent all virtual DMA channels.
Definition at line 732 of file rte_dmadev.h.
| #define RTE_DMA_OP_FLAG_FENCE RTE_BIT64(0) |
Fence flag. It means the operation with this flag must be processed only after all previous operations are completed. If the specify DMA HW works in-order (it means it has default fence between operations), this flag could be NOP.
Definition at line 1128 of file rte_dmadev.h.
| #define RTE_DMA_OP_FLAG_SUBMIT RTE_BIT64(1) |
Submit flag. It means the operation with this flag must issue doorbell to hardware after enqueued jobs.
Definition at line 1133 of file rte_dmadev.h.
| #define RTE_DMA_OP_FLAG_LLC RTE_BIT64(2) |
Write data to low level cache hint. Used for performance optimization, this is just a hint, and there is no capability bit for this, driver should not return error if this flag was set.
Definition at line 1138 of file rte_dmadev.h.
| #define RTE_DMA_OP_FLAG_AUTO_FREE RTE_BIT64(3) |
Auto free buffer flag. Operation with this flag must issue command to hardware to free the DMA buffer after DMA transfer is completed.
Definition at line 1145 of file rte_dmadev.h.
| typedef void(* rte_dma_access_pair_group_event_cb_t) (int16_t dev_id, int16_t group_id, rte_uuid_t domain_id, enum rte_dma_access_pair_group_event_type event) |
This callback is used to notify interested parties (either the group creator or group joiners) about significant events related to the lifecycle of a DMA access pair group.
It can be registered by:
| dev_id | Identifier of the DMA device. |
| group_id | Identifier of the access pair group where the event occurred. |
| domain_id | UUID of the domain_id associated with the event. For member leave events, this is the domain_id of the member that left. For group destruction events, this may refer to the domain_id of the respective member. |
| event | Type of event that occurred. |
Definition at line 855 of file rte_dmadev.h.
| enum rte_dma_direction |
DMA transfer direction defines.
| Enumerator | |
|---|---|
| RTE_DMA_DIR_MEM_TO_MEM | DMA transfer direction - from memory to memory. When the device supports inter-process or inter-OS domain transfers, the field
|
| RTE_DMA_DIR_MEM_TO_DEV | DMA transfer direction - from memory to device. In a typical scenario, the SoCs are installed on host servers as iNICs through the PCIe interface. In this case, the SoCs works in EP(endpoint) mode, it could initiate a DMA move request from memory (which is SoCs memory) to device (which is host memory).
|
| RTE_DMA_DIR_DEV_TO_MEM | DMA transfer direction - from device to memory. In a typical scenario, the SoCs are installed on host servers as iNICs through the PCIe interface. In this case, the SoCs works in EP(endpoint) mode, it could initiate a DMA move request from device (which is host memory) to memory (which is SoCs memory).
|
| RTE_DMA_DIR_DEV_TO_DEV | DMA transfer direction - from device to device. In a typical scenario, the SoCs are installed on host servers as iNICs through the PCIe interface. In this case, the SoCs works in EP(endpoint) mode, it could initiate a DMA move request from device (which is host memory) to the device (which is another host memory).
|
Definition at line 440 of file rte_dmadev.h.
| enum rte_dma_port_type |
DMA access port type defines.
| Enumerator | |
|---|---|
| RTE_DMA_PORT_PCIE | The DMA access port is PCIe. |
Definition at line 486 of file rte_dmadev.h.
Inter-DMA transfer domain type.
This enum defines the types of transfer domains applicable to DMA operations. It helps categorize whether a DMA transfer is occurring within the same domain, across different processes, or between distinct operating system domains.
Definition at line 606 of file rte_dmadev.h.
| enum rte_dma_vchan_status |
device vchannel status
Enum with the options for the channel status, either idle, active or halted due to error
| Enumerator | |
|---|---|
| RTE_DMA_VCHAN_IDLE | not processing, awaiting ops |
| RTE_DMA_VCHAN_ACTIVE | currently processing jobs |
| RTE_DMA_VCHAN_HALTED_ERROR | not processing due to error, cannot accept new ops |
Definition at line 772 of file rte_dmadev.h.
Event types for DMA access pair group notifications.
When the event type is RTE_DMA_GROUP_EVENT_MEMBER_LEFT, the handler associated with the departing member's domain is no longer valid. Inter-domain DMA operations targeting that domain should be avoided.
When the event type is RTE_DMA_GROUP_EVENT_GROUP_DESTROYED, all handlers associated with the group become invalid. No further inter-domain DMA operations should be initiated using those handlers.
| Enumerator | |
|---|---|
| RTE_DMA_GROUP_EVENT_MEMBER_LEFT | A member left the group (notifies creator and joiners). |
| RTE_DMA_GROUP_EVENT_GROUP_DESTROYED | Group was destroyed (notifies joiners). |
Definition at line 823 of file rte_dmadev.h.
| enum rte_dma_status_code |
DMA transfer result status code defines.
Definition at line 980 of file rte_dmadev.h.
| int rte_dma_dev_max | ( | size_t | dev_max | ) |
Configure the maximum number of dmadevs.
| dev_max | maximum number of dmadevs. |
| int rte_dma_get_dev_id_by_name | ( | const char * | name | ) |
Get the device identifier for the named DMA device.
| name | DMA device name. |
| bool rte_dma_is_valid | ( | int16_t | dev_id | ) |
Check whether the dev_id is valid.
| dev_id | DMA device index. |
| uint16_t rte_dma_count_avail | ( | void | ) |
Get the total number of DMA devices that have been successfully initialised.
| int16_t rte_dma_next_dev | ( | int16_t | start_dev_id | ) |
Iterates over valid dmadev instances.
| start_dev_id | The id of the next possible dmadev. |
| int rte_dma_info_get | ( | int16_t | dev_id, |
| struct rte_dma_info * | dev_info | ||
| ) |
Retrieve information of a DMA device.
| dev_id | The identifier of the device. | |
| [out] | dev_info | A pointer to a structure of type rte_dma_info to be filled with the information of the device. |
| int rte_dma_configure | ( | int16_t | dev_id, |
| const struct rte_dma_conf * | dev_conf | ||
| ) |
Configure a DMA device.
This function must be invoked first before any other function in the API. This function can also be re-invoked when a device is in the stopped state.
| dev_id | The identifier of the device to configure. |
| dev_conf | The DMA device configuration structure encapsulated into rte_dma_conf object. |
| int rte_dma_start | ( | int16_t | dev_id | ) |
Start a DMA device.
The device start step is the last one and consists of setting the DMA to start accepting jobs.
| dev_id | The identifier of the device. |
| int rte_dma_stop | ( | int16_t | dev_id | ) |
Stop a DMA device.
The device can be restarted with a call to rte_dma_start().
| dev_id | The identifier of the device. |
| int rte_dma_close | ( | int16_t | dev_id | ) |
Close a DMA device.
The device cannot be restarted after this call.
| dev_id | The identifier of the device. |
| int rte_dma_vchan_setup | ( | int16_t | dev_id, |
| uint16_t | vchan, | ||
| const struct rte_dma_vchan_conf * | conf | ||
| ) |
Allocate and set up a virtual DMA channel.
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. The value must be in the range [0, nb_vchans - 1] previously supplied to rte_dma_configure(). |
| conf | The virtual DMA channel configuration structure encapsulated into rte_dma_vchan_conf object. |
| int rte_dma_stats_get | ( | int16_t | dev_id, |
| uint16_t | vchan, | ||
| struct rte_dma_stats * | stats | ||
| ) |
Retrieve basic statistics of a or all virtual DMA channel(s).
| dev_id | The identifier of the device. | |
| vchan | The identifier of virtual DMA channel. If equal RTE_DMA_ALL_VCHAN means all channels. | |
| [out] | stats | The basic statistics structure encapsulated into rte_dma_stats object. |
| int rte_dma_stats_reset | ( | int16_t | dev_id, |
| uint16_t | vchan | ||
| ) |
Reset basic statistics of a or all virtual DMA channel(s).
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. If equal RTE_DMA_ALL_VCHAN means all channels. |
| int rte_dma_vchan_status | ( | int16_t | dev_id, |
| uint16_t | vchan, | ||
| enum rte_dma_vchan_status * | status | ||
| ) |
Determine if all jobs have completed on a device channel. This function is primarily designed for testing use, as it allows a process to check if all jobs are completed, without actually gathering completions from those jobs.
| dev_id | The identifier of the device. | |
| vchan | The identifier of virtual DMA channel. | |
| [out] | status | The vchan status |
| int rte_dma_dump | ( | int16_t | dev_id, |
| FILE * | f | ||
| ) |
Dump DMA device info.
| dev_id | The identifier of the device. |
| f | The file to write the output to. |
| __rte_experimental int rte_dma_access_pair_group_create | ( | int16_t | dev_id, |
| rte_uuid_t | domain_id, | ||
| rte_uuid_t | token, | ||
| int16_t * | group_id, | ||
| rte_dma_access_pair_group_event_cb_t | cb | ||
| ) |
Create an access pair group to enable secure DMA transfers between devices across different processes or operating system domains.
| dev_id | Identifier of the DMA device initiating the group. | |
| domain_id | Unique identifier representing the process or OS domain. | |
| token | Authentication token used to establish the access group. | |
| [out] | group_id | Pointer to store the ID of the newly created access group. |
| cb | Callback function to be invoked when a member leaves the group. |
| __rte_experimental int rte_dma_access_pair_group_destroy | ( | int16_t | dev_id, |
| int16_t | group_id | ||
| ) |
Destroy an access pair group if all participating devices have exited.
This operation is only permitted by the device that originally created the group; attempts by other devices will result in failure.
| dev_id | Identifier of the device requesting group destruction. |
| group_id | ID of the access group to be destroyed. |
| __rte_experimental int rte_dma_access_pair_group_join | ( | int16_t | dev_id, |
| int16_t | group_id, | ||
| rte_uuid_t | token, | ||
| rte_dma_access_pair_group_event_cb_t | cb | ||
| ) |
Join an existing access group to enable secure DMA transfers between devices across different processes or OS domains.
| dev_id | Identifier of the DMA device attempting to join the group. |
| group_id | ID of the access group to join. |
| token | Authentication token used to validate group membership. |
| cb | Callback function to be invoked when the device leaves the group or when the group is destroyed due to some exception or failure. |
| __rte_experimental int rte_dma_access_pair_group_leave | ( | int16_t | dev_id, |
| int16_t | group_id | ||
| ) |
Leave an access group, removing the device's entry from the group table and disabling inter-domain DMA transfers to and from this device.
This operation is not permitted for the device that originally created the group.
| dev_id | Identifier of the device requesting to leave the group. |
| group_id | ID of the access group to leave. |
| __rte_experimental int rte_dma_access_pair_group_handler_get | ( | int16_t | dev_id, |
| int16_t | group_id, | ||
| rte_uuid_t | domain_id, | ||
| uint16_t * | handler | ||
| ) |
Retrieve the handler associated with a specific domain ID, which is used by the application to query source or destinationin handler to initiate inter-process or inter-OS DMA transfers.
| dev_id | Identifier of the DMA device requesting the handler. | |
| group_id | ID of the access group to query. | |
| domain_id | Unique identifier of the target process or OS domain. | |
| [out] | handler | Pointer to store the retrieved handler value. |
|
inlinestatic |
Enqueue a copy operation onto the virtual DMA channel.
This queues up a copy operation to be performed by hardware, if the 'flags' parameter contains RTE_DMA_OP_FLAG_SUBMIT then trigger doorbell to begin this operation, otherwise do not trigger doorbell.
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. |
| src | The address of the source buffer. |
| dst | The address of the destination buffer. |
| length | The length of the data to be copied. |
| flags | An flags for this operation. |
Definition at line 1175 of file rte_dmadev.h.
|
inlinestatic |
Enqueue a scatter-gather list copy operation onto the virtual DMA channel.
This queues up a scatter-gather list copy operation to be performed by hardware, if the 'flags' parameter contains RTE_DMA_OP_FLAG_SUBMIT then trigger doorbell to begin this operation, otherwise do not trigger doorbell.
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. |
| src | The pointer of source scatter-gather entry array. |
| dst | The pointer of destination scatter-gather entry array. |
| nb_src | The number of source scatter-gather entry. |
| nb_dst | The number of destination scatter-gather entry. |
| flags | An flags for this operation. |
Definition at line 1225 of file rte_dmadev.h.
|
inlinestatic |
Enqueue a fill operation onto the virtual DMA channel.
This queues up a fill operation to be performed by hardware, if the 'flags' parameter contains RTE_DMA_OP_FLAG_SUBMIT then trigger doorbell to begin this operation, otherwise do not trigger doorbell.
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. |
| pattern | The pattern to populate the destination buffer with. |
| dst | The address of the destination buffer. |
| length | The length of the destination buffer. |
| flags | An flags for this operation. |
Definition at line 1274 of file rte_dmadev.h.
|
inlinestatic |
Trigger hardware to begin performing enqueued operations.
Writes the "doorbell" to the hardware to trigger it to begin the operations previously enqueued by rte_dma_copy/fill().
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. |
Definition at line 1308 of file rte_dmadev.h.
|
inlinestatic |
Return the number of operations that have been successfully completed. Once an operation has been reported as completed, the results of that operation will be visible to all cores on the system.
| dev_id | The identifier of the device. | |
| vchan | The identifier of virtual DMA channel. | |
| nb_cpls | The maximum number of completed operations that can be processed. | |
| [out] | last_idx | The last completed operation's ring_idx. If not required, NULL can be passed in. |
| [out] | has_error | Indicates if there are transfer error. If not required, NULL can be passed in. |
Definition at line 1349 of file rte_dmadev.h.
|
inlinestatic |
Return the number of operations that have been completed, and the operations result may succeed or fail. Once an operation has been reported as completed successfully, the results of that operation will be visible to all cores on the system.
| dev_id | The identifier of the device. | |
| vchan | The identifier of virtual DMA channel. | |
| nb_cpls | Indicates the size of status array. | |
| [out] | last_idx | The last completed operation's ring_idx. If not required, NULL can be passed in. |
| [out] | status | This is a pointer to an array of length 'nb_cpls' that holds the completion status code of each operation. |
Definition at line 1411 of file rte_dmadev.h.
|
inlinestatic |
Check remaining capacity in descriptor ring for the current burst.
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. |
Definition at line 1448 of file rte_dmadev.h.
|
inlinestatic |
Enqueue rte_dma_ops to DMA device, can only be used underlying supports RTE_DMA_CAPA_OPS_ENQ_DEQ and rte_dma_conf::enable_enq_deq is enabled in rte_dma_configure(). The ops enqueued will be immediately submitted to the DMA device. The enqueue should be coupled with dequeue to retrieve completed ops, calls to rte_dma_submit(), rte_dma_completed() and rte_dma_completed_status() are not valid.
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. |
| ops | Pointer to rte_dma_op array. |
| nb_ops | Number of rte_dma_op in the ops array |
Definition at line 1486 of file rte_dmadev.h.
|
inlinestatic |
Dequeue completed rte_dma_ops submitted to the DMA device, can only be used underlying supports RTE_DMA_CAPA_OPS_ENQ_DEQ and rte_dma_conf::enable_enq_deq is enabled in rte_dma_configure().
| dev_id | The identifier of the device. |
| vchan | The identifier of virtual DMA channel. |
| ops | Pointer to rte_dma_op array. |
| nb_ops | Size of rte_dma_op array. |
Definition at line 1521 of file rte_dmadev.h.