return count;
}
+static uint16_t
+skeldma_burst_capacity(const void *dev_private, uint16_t vchan)
+{
+ const struct skeldma_hw *hw = dev_private;
+
+ RTE_SET_USED(vchan);
+ return rte_ring_count(hw->desc_empty);
+}
+
static const struct rte_dma_dev_ops skeldma_ops = {
.dev_info_get = skeldma_info_get,
.dev_configure = skeldma_configure,
dev->fp_obj->submit = skeldma_submit;
dev->fp_obj->completed = skeldma_completed;
dev->fp_obj->completed_status = skeldma_completed_status;
+ dev->fp_obj->burst_capacity = skeldma_burst_capacity;
hw = dev->data->dev_private;
hw->lcore_id = lcore_id;
return 0;
}
+static uint16_t
+dummy_burst_capacity(__rte_unused const void *dev_private,
+ __rte_unused uint16_t vchan)
+{
+ RTE_DMA_LOG(ERR, "burst_capacity is not configured or not supported.");
+ return 0;
+}
+
static void
dma_fp_object_dummy(struct rte_dma_fp_object *obj)
{
obj->submit = dummy_submit;
obj->completed = dummy_completed;
obj->completed_status = dummy_completed_status;
+ obj->burst_capacity = dummy_burst_capacity;
}
last_idx, status);
}
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * Check remaining capacity in descriptor ring for the current burst.
+ *
+ * @param dev_id
+ * The identifier of the device.
+ * @param vchan
+ * The identifier of virtual DMA channel.
+ *
+ * @return
+ * - Remaining space in the descriptor ring for the current burst.
+ * - 0 on error
+ */
+__rte_experimental
+static inline uint16_t
+rte_dma_burst_capacity(int16_t dev_id, uint16_t vchan)
+{
+ struct rte_dma_fp_object *obj = &rte_dma_fp_objs[dev_id];
+
+#ifdef RTE_DMADEV_DEBUG
+ if (!rte_dma_is_valid(dev_id))
+ return 0;
+ RTE_FUNC_PTR_OR_ERR_RET(*obbj->burst_capacity, 0);
+#endif
+ return (*obj->burst_capacity)(obj->dev_private, vchan);
+}
+
#ifdef __cplusplus
}
#endif
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.
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;
EXPERIMENTAL {
global:
+ rte_dma_burst_capacity;
rte_dma_close;
rte_dma_completed;
rte_dma_completed_status;