X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fraw%2Fdpaa2_qdma%2Frte_pmd_dpaa2_qdma.h;h=cc1ac25451a742be5bb4a9caa2d73c5a0e7353b7;hb=eb63ec0e56cd519eaaf160041c266de4f13ae413;hp=a1f9050358b9eafe966482d9cad2f3c2e04d1429;hpb=da6cab76468bd7f510bd8e39007a47ac5c4b532d;p=dpdk.git diff --git a/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h b/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h index a1f9050358..cc1ac25451 100644 --- a/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h +++ b/drivers/raw/dpaa2_qdma/rte_pmd_dpaa2_qdma.h @@ -1,10 +1,12 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright 2018-2019 NXP + * Copyright 2018-2020 NXP */ #ifndef __RTE_PMD_DPAA2_QDMA_H__ #define __RTE_PMD_DPAA2_QDMA_H__ +#include + /** * @file * @@ -33,6 +35,12 @@ enum { RTE_QDMA_MODE_VIRTUAL }; +/** Determines the format of FD */ +enum { + RTE_QDMA_LONG_FORMAT, + RTE_QDMA_ULTRASHORT_FORMAT, +}; + /** * If user has configured a Virtual Queue mode, but for some particular VQ * user needs an exclusive H/W queue associated (for better performance @@ -42,6 +50,12 @@ enum { */ #define RTE_QDMA_VQ_EXCLUSIVE_PQ (1ULL) +#define RTE_QDMA_VQ_FD_LONG_FORMAT (1ULL << 1) + +#define RTE_QDMA_VQ_FD_SG_FORMAT (1ULL << 2) + +#define RTE_QDMA_VQ_NO_RESPONSE (1ULL << 3) + /** States if the source addresses is physical. */ #define RTE_QDMA_JOB_SRC_PHY (1ULL) @@ -60,8 +74,6 @@ struct rte_qdma_config { uint16_t max_hw_queues_per_core; /** Maximum number of VQ's to be used. */ uint16_t max_vqs; - /** mode of operation - physical(h/w) or virtual */ - uint8_t mode; /** * User provides this as input to the driver as a size of the FLE pool. * FLE's (and corresponding source/destination descriptors) are @@ -70,7 +82,7 @@ struct rte_qdma_config { * maximum number of inflight jobs on the QDMA device. This should * be power of 2. */ - int fle_pool_count; + int fle_queue_pool_cnt; }; struct rte_qdma_rbp { @@ -143,204 +155,50 @@ struct rte_qdma_job { * lower 8bits fd error */ uint16_t status; + uint16_t vq_id; + /** + * FLE pool element maintained by user, in case no qDMA response. + * Note: the address must be allocated from DPDK memory pool. + */ + void *usr_elem; }; -/** - * Initialize the QDMA device. - * - * @returns - * - 0: Success. - * - <0: Error code. - */ -int -rte_qdma_init(void); - -/** - * Get the QDMA attributes. - * - * @param qdma_attr - * QDMA attributes providing total number of hw queues etc. - */ -void -rte_qdma_attr_get(struct rte_qdma_attr *qdma_attr); - -/** - * Reset the QDMA device. This API will completely reset the QDMA - * device, bringing it to original state as if only rte_qdma_init() API - * has been called. - * - * @returns - * - 0: Success. - * - <0: Error code. - */ -int -rte_qdma_reset(void); - -/** - * Configure the QDMA device. - * - * @returns - * - 0: Success. - * - <0: Error code. - */ -int -rte_qdma_configure(struct rte_qdma_config *qdma_config); - -/** - * Start the QDMA device. - * - * @returns - * - 0: Success. - * - <0: Error code. - */ -int -rte_qdma_start(void); - -/** - * Create a Virtual Queue on a particular lcore id. - * This API can be called from any thread/core. User can create/destroy - * VQ's at runtime. - * - * @param lcore_id - * LCORE ID on which this particular queue would be associated with. - * @param flags - * RTE_QDMA_VQ_ flags. See macro definitions. - * - * @returns - * - >= 0: Virtual queue ID. - * - <0: Error code. - */ -int -rte_qdma_vq_create(uint32_t lcore_id, uint32_t flags); - -/*create vq for route-by-port*/ -int -rte_qdma_vq_create_rbp(uint32_t lcore_id, uint32_t flags, - struct rte_qdma_rbp *rbp); - -/** - * Enqueue multiple jobs to a Virtual Queue. - * If the enqueue is successful, the H/W will perform DMA operations - * on the basis of the QDMA jobs provided. - * - * @param vq_id - * Virtual Queue ID. - * @param job - * List of QDMA Jobs containing relevant information related to DMA. - * @param nb_jobs - * Number of QDMA jobs provided by the user. - * - * @returns - * - >=0: Number of jobs successfully submitted - * - <0: Error code. - */ -int -rte_qdma_vq_enqueue_multi(uint16_t vq_id, - struct rte_qdma_job **job, - uint16_t nb_jobs); - -/** - * Enqueue a single job to a Virtual Queue. - * If the enqueue is successful, the H/W will perform DMA operations - * on the basis of the QDMA job provided. - * - * @param vq_id - * Virtual Queue ID. - * @param job - * A QDMA Job containing relevant information related to DMA. - * - * @returns - * - >=0: Number of jobs successfully submitted - * - <0: Error code. - */ -int -rte_qdma_vq_enqueue(uint16_t vq_id, - struct rte_qdma_job *job); +struct rte_qdma_enqdeq { + uint16_t vq_id; + struct rte_qdma_job **job; +}; -/** - * Dequeue multiple completed jobs from a Virtual Queue. - * Provides the list of completed jobs capped by nb_jobs. - * - * @param vq_id - * Virtual Queue ID. - * @param job - * List of QDMA Jobs returned from the API. - * @param nb_jobs - * Number of QDMA jobs requested for dequeue by the user. - * - * @returns - * - >=0: Number of jobs successfully received - * - <0: Error code. - */ -int -rte_qdma_vq_dequeue_multi(uint16_t vq_id, - struct rte_qdma_job **job, - uint16_t nb_jobs); +struct rte_qdma_queue_config { + uint32_t lcore_id; + uint32_t flags; + struct rte_qdma_rbp *rbp; +}; -/** - * Dequeue a single completed jobs from a Virtual Queue. - * - * @param vq_id - * Virtual Queue ID. - * - * @returns - * - A completed job or NULL if no job is there. - */ -struct rte_qdma_job * -rte_qdma_vq_dequeue(uint16_t vq_id); +#define rte_qdma_info rte_rawdev_info +#define rte_qdma_start(id) rte_rawdev_start(id) +#define rte_qdma_reset(id) rte_rawdev_reset(id) +#define rte_qdma_configure(id, cf) rte_rawdev_configure(id, cf) +#define rte_qdma_dequeue_buffers(id, buf, num, ctxt) \ + rte_rawdev_dequeue_buffers(id, buf, num, ctxt) +#define rte_qdma_enqueue_buffers(id, buf, num, ctxt) \ + rte_rawdev_enqueue_buffers(id, buf, num, ctxt) +#define rte_qdma_queue_setup(id, qid, cfg) \ + rte_rawdev_queue_setup(id, qid, cfg) +/*TODO introduce per queue stats API in rawdew */ /** * Get a Virtual Queue statistics. * + * @param rawdev + * Raw Device. * @param vq_id * Virtual Queue ID. * @param vq_stats * VQ statistics structure which will be filled in by the driver. */ void -rte_qdma_vq_stats(uint16_t vq_id, - struct rte_qdma_vq_stats *vq_stats); - -/** - * Destroy the Virtual Queue specified by vq_id. - * This API can be called from any thread/core. User can create/destroy - * VQ's at runtime. - * - * @param vq_id - * Virtual Queue ID which needs to be uninitialized. - * - * @returns - * - 0: Success. - * - <0: Error code. - */ -int -rte_qdma_vq_destroy(uint16_t vq_id); - -/** - * Destroy the RBP specific Virtual Queue specified by vq_id. - * This API can be called from any thread/core. User can create/destroy - * VQ's at runtime. - * - * @param vq_id - * RBP based Virtual Queue ID which needs to be uninitialized. - * - * @returns - * - 0: Success. - * - <0: Error code. - */ - -int -rte_qdma_vq_destroy_rbp(uint16_t vq_id); -/** - * Stop QDMA device. - */ -void -rte_qdma_stop(void); - -/** - * Destroy the QDMA device. - */ -void -rte_qdma_destroy(void); +rte_qdma_vq_stats(struct rte_rawdev *rawdev, + uint16_t vq_id, + struct rte_qdma_vq_stats *vq_stats); #endif /* __RTE_PMD_DPAA2_QDMA_H__*/