numam-dpdk/lib/dmadev/rte_dmadev_core.h
Kevin Laatz ea8cf0f853 dmadev: add burst capacity API
Add a burst capacity check API to the dmadev library. This API is useful to
applications which need to how many descriptors can be enqueued in the
current batch. For example, it could be used to determine whether all
segments of a multi-segment packet can be enqueued in the same batch or not
(to avoid half-offload of the packet).

Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
Reviewed-by: Conor Walsh <conor.walsh@intel.com>
2021-10-18 11:17:30 +02:00

81 lines
2.6 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2021 HiSilicon Limited
* Copyright(c) 2021 Intel Corporation
*/
#ifndef RTE_DMADEV_CORE_H
#define RTE_DMADEV_CORE_H
/**
* @file
*
* DMA Device internal header.
*
* This header contains internal data types which are used by dataplane inline
* function.
*
* Applications should not use these functions directly.
*/
/** @internal Used to enqueue a copy operation. */
typedef int (*rte_dma_copy_t)(void *dev_private, uint16_t vchan,
rte_iova_t src, rte_iova_t dst,
uint32_t length, uint64_t flags);
/** @internal Used to enqueue a scatter-gather list copy operation. */
typedef int (*rte_dma_copy_sg_t)(void *dev_private, uint16_t vchan,
const struct rte_dma_sge *src,
const struct rte_dma_sge *dst,
uint16_t nb_src, uint16_t nb_dst,
uint64_t flags);
/** @internal Used to enqueue a fill operation. */
typedef int (*rte_dma_fill_t)(void *dev_private, uint16_t vchan,
uint64_t pattern, rte_iova_t dst,
uint32_t length, uint64_t flags);
/** @internal Used to trigger hardware to begin working. */
typedef int (*rte_dma_submit_t)(void *dev_private, uint16_t vchan);
/** @internal Used to return number of successful completed operations. */
typedef uint16_t (*rte_dma_completed_t)(void *dev_private,
uint16_t vchan, const uint16_t nb_cpls,
uint16_t *last_idx, bool *has_error);
/** @internal Used to return number of completed operations. */
typedef uint16_t (*rte_dma_completed_status_t)(void *dev_private,
uint16_t vchan, const uint16_t nb_cpls,
uint16_t *last_idx, enum rte_dma_status_code *status);
/** @internal Used to check the remaining space in descriptor ring. */
typedef uint16_t (*rte_dma_burst_capacity_t)(const void *dev_private, uint16_t vchan);
/**
* @internal
* Fast-path dmadev functions and related data are hold in a flat array.
* One entry per dmadev.
*
* This structure occupy exactly 128B which reserve space for future IO
* functions.
*
* The 'dev_private' field was placed in the first cache line to optimize
* performance because the PMD driver mainly depends on this field.
*/
struct rte_dma_fp_object {
/** PMD-specific private data. The driver should copy
* rte_dma_dev.data->dev_private to this field during initialization.
*/
void *dev_private;
rte_dma_copy_t copy;
rte_dma_copy_sg_t copy_sg;
rte_dma_fill_t fill;
rte_dma_submit_t submit;
rte_dma_completed_t completed;
rte_dma_completed_status_t completed_status;
rte_dma_burst_capacity_t burst_capacity;
} __rte_aligned(128);
extern struct rte_dma_fp_object *rte_dma_fp_objs;
#endif /* RTE_DMADEV_CORE_H */