#define RTE_BBDEV_MAX_DEVS 128 /**< Max number of devices */
#endif
-/** Flags indiciate current state of BBDEV device */
+/** Flags indicate current state of BBDEV device */
enum rte_bbdev_state {
RTE_BBDEV_UNUSED,
RTE_BBDEV_INITIALIZED
* @return
* The total number of usable devices.
*/
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
rte_bbdev_count(void);
/**
* @return
* true if device ID is valid and device is attached, false otherwise.
*/
-bool __rte_experimental
+__rte_experimental
+bool
rte_bbdev_is_valid(uint16_t dev_id);
/**
* - The next device, or
* - RTE_BBDEV_MAX_DEVS if none found
*/
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
rte_bbdev_find_next(uint16_t dev_id);
/** Iterate through all enabled devices */
* - -EBUSY if the identified device has already started
* - -ENOMEM if unable to allocate memory
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id);
/**
* - -EBUSY if the identified device has already started
* - -ENOTSUP if the interrupts are not supported by the device
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_intr_enable(uint16_t dev_id);
/** Device queue configuration structure */
* - EINVAL if the identified queue size or priority are invalid
* - EBUSY if the identified queue or its device have already started
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
const struct rte_bbdev_queue_conf *conf);
/**
* Start a device.
- * This is the last step needed before enqueueing operations is possible.
+ * This is the last step needed before enqueuing operations is possible.
*
* @param dev_id
* The identifier of the device.
* - 0 on success
* - negative value on failure - as returned from PMD driver
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_start(uint16_t dev_id);
/**
* @return
* - 0 on success
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_stop(uint16_t dev_id);
/**
* @return
* - 0 on success
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_close(uint16_t dev_id);
/**
* - 0 on success
* - negative value on failure - as returned from PMD driver
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id);
/**
* - 0 on success
* - negative value on failure - as returned from PMD driver
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id);
/** Device statistics. */
uint64_t enqueue_err_count;
/** Total error count on operations dequeued */
uint64_t dequeue_err_count;
+ /** CPU cycles consumed by the (HW/SW) accelerator device to offload
+ * the enqueue request to its internal queues.
+ * - For a HW device this is the cycles consumed in MMIO write
+ * - For a SW (vdev) device, this is the processing time of the
+ * bbdev operation
+ */
+ uint64_t acc_offload_cycles;
};
/**
* - 0 on success
* - EINVAL if invalid parameter pointer is provided
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats);
/**
* @return
* - 0 on success
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_stats_reset(uint16_t dev_id);
/** Device information supplied by the device's driver */
uint32_t queue_size_lim;
/** Set if device off-loads operation to hardware */
bool hardware_accelerated;
- /** Max value supported by queue priority */
- uint8_t max_queue_priority;
+ /** Max value supported by queue priority for DL */
+ uint8_t max_dl_queue_priority;
+ /** Max value supported by queue priority for UL */
+ uint8_t max_ul_queue_priority;
/** Set if device supports per-queue interrupts */
bool queue_intr_supported;
/** Minimum alignment of buffers, in bytes */
* - 0 on success
* - EINVAL if invalid parameter pointer is provided
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info);
/** Queue information */
* - 0 on success
* - EINVAL if invalid parameter pointer is provided
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
struct rte_bbdev_queue_info *queue_info);
* The number of operations actually enqueued (this is the number of processed
* entries in the @p ops array).
*/
+__rte_experimental
static inline uint16_t
rte_bbdev_enqueue_enc_ops(uint16_t dev_id, uint16_t queue_id,
struct rte_bbdev_enc_op **ops, uint16_t num_ops)
{
struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
- uint16_t n = dev->enqueue_enc_ops(q_data, ops, num_ops);
-
- rte_bbdev_log_verbose("%u encode ops enqueued to dev%u,q%u.\n",
- num_ops, dev_id, queue_id);
-
- return n;
+ return dev->enqueue_enc_ops(q_data, ops, num_ops);
}
/**
* The number of operations actually enqueued (this is the number of processed
* entries in the @p ops array).
*/
+__rte_experimental
static inline uint16_t
rte_bbdev_enqueue_dec_ops(uint16_t dev_id, uint16_t queue_id,
struct rte_bbdev_dec_op **ops, uint16_t num_ops)
{
struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
- uint16_t n = dev->enqueue_dec_ops(q_data, ops, num_ops);
-
- rte_bbdev_log_verbose("%u decode ops enqueued to dev%u,q%u.\n",
- num_ops, dev_id, queue_id);
-
- return n;
+ return dev->enqueue_dec_ops(q_data, ops, num_ops);
}
/**
* The number of operations actually dequeued (this is the number of entries
* copied into the @p ops array).
*/
+__rte_experimental
static inline uint16_t
rte_bbdev_dequeue_enc_ops(uint16_t dev_id, uint16_t queue_id,
struct rte_bbdev_enc_op **ops, uint16_t num_ops)
{
struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
- uint16_t n = dev->dequeue_enc_ops(q_data, ops, num_ops);
-
- rte_bbdev_log_verbose("%u encode ops dequeued to dev%u,q%u\n",
- n, dev_id, queue_id);
-
- return n;
+ return dev->dequeue_enc_ops(q_data, ops, num_ops);
}
/**
* copied into the @p ops array).
*/
+__rte_experimental
static inline uint16_t
rte_bbdev_dequeue_dec_ops(uint16_t dev_id, uint16_t queue_id,
struct rte_bbdev_dec_op **ops, uint16_t num_ops)
{
struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
- uint16_t n = dev->dequeue_dec_ops(q_data, ops, num_ops);
-
- rte_bbdev_log_verbose("%u decode ops dequeued to dev%u,q%u\n",
- n, dev_id, queue_id);
-
- return n;
+ return dev->dequeue_dec_ops(q_data, ops, num_ops);
}
/** Definitions of device event types */
* @return
* Zero on success, negative value on failure.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event,
rte_bbdev_cb_fn cb_fn, void *cb_arg);
* - EINVAL if invalid parameter pointer is provided
* - EAGAIN if the provided callback pointer does not exist
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event,
rte_bbdev_cb_fn cb_fn, void *cb_arg);
* - 0 on success
* - negative value on failure - as returned from PMD driver
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id);
/**
* - 0 on success
* - negative value on failure - as returned from PMD driver
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id);
/**
* - ENOTSUP if interrupts are not supported by the identified device
* - negative value on failure - as returned from PMD driver
*/
-int __rte_experimental
+__rte_experimental
+int
rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
void *data);