1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2021 HiSilicon Limited
3 * Copyright(c) 2021 Intel Corporation
6 #ifndef RTE_DMADEV_CORE_H
7 #define RTE_DMADEV_CORE_H
12 * DMA Device internal header.
14 * This header contains internal data types which are used by dataplane inline
17 * Applications should not use these functions directly.
20 /** @internal Used to enqueue a copy operation. */
21 typedef int (*rte_dma_copy_t)(void *dev_private, uint16_t vchan,
22 rte_iova_t src, rte_iova_t dst,
23 uint32_t length, uint64_t flags);
25 /** @internal Used to enqueue a scatter-gather list copy operation. */
26 typedef int (*rte_dma_copy_sg_t)(void *dev_private, uint16_t vchan,
27 const struct rte_dma_sge *src,
28 const struct rte_dma_sge *dst,
29 uint16_t nb_src, uint16_t nb_dst,
32 /** @internal Used to enqueue a fill operation. */
33 typedef int (*rte_dma_fill_t)(void *dev_private, uint16_t vchan,
34 uint64_t pattern, rte_iova_t dst,
35 uint32_t length, uint64_t flags);
37 /** @internal Used to trigger hardware to begin working. */
38 typedef int (*rte_dma_submit_t)(void *dev_private, uint16_t vchan);
40 /** @internal Used to return number of successful completed operations. */
41 typedef uint16_t (*rte_dma_completed_t)(void *dev_private,
42 uint16_t vchan, const uint16_t nb_cpls,
43 uint16_t *last_idx, bool *has_error);
45 /** @internal Used to return number of completed operations. */
46 typedef uint16_t (*rte_dma_completed_status_t)(void *dev_private,
47 uint16_t vchan, const uint16_t nb_cpls,
48 uint16_t *last_idx, enum rte_dma_status_code *status);
50 /** @internal Used to check the remaining space in descriptor ring. */
51 typedef uint16_t (*rte_dma_burst_capacity_t)(const void *dev_private, uint16_t vchan);
55 * Fast-path dmadev functions and related data are hold in a flat array.
56 * One entry per dmadev.
58 * This structure occupy exactly 128B which reserve space for future IO
61 * The 'dev_private' field was placed in the first cache line to optimize
62 * performance because the PMD mainly depends on this field.
64 struct rte_dma_fp_object {
65 /** PMD-specific private data. The driver should copy
66 * rte_dma_dev.data->dev_private to this field during initialization.
70 rte_dma_copy_sg_t copy_sg;
72 rte_dma_submit_t submit;
73 rte_dma_completed_t completed;
74 rte_dma_completed_status_t completed_status;
75 rte_dma_burst_capacity_t burst_capacity;
78 extern struct rte_dma_fp_object *rte_dma_fp_objs;
80 #endif /* RTE_DMADEV_CORE_H */