event/octeontx2: support xstats
[dpdk.git] / lib / librte_bbdev / rte_bbdev.h
index 37a0d05..c5175cc 100644 (file)
@@ -31,6 +31,7 @@ extern "C" {
 #include <stdbool.h>
 #include <string.h>
 
+#include <rte_compat.h>
 #include <rte_atomic.h>
 #include <rte_bus.h>
 #include <rte_cpuflags.h>
@@ -42,7 +43,7 @@ extern "C" {
 #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
@@ -54,6 +55,7 @@ enum rte_bbdev_state {
  * @return
  *   The total number of usable devices.
  */
+__rte_experimental
 uint16_t
 rte_bbdev_count(void);
 
@@ -66,6 +68,7 @@ rte_bbdev_count(void);
  * @return
  *   true if device ID is valid and device is attached, false otherwise.
  */
+__rte_experimental
 bool
 rte_bbdev_is_valid(uint16_t dev_id);
 
@@ -79,6 +82,7 @@ rte_bbdev_is_valid(uint16_t dev_id);
  *   - The next device, or
  *   - RTE_BBDEV_MAX_DEVS if none found
  */
+__rte_experimental
 uint16_t
 rte_bbdev_find_next(uint16_t dev_id);
 
@@ -108,6 +112,7 @@ rte_bbdev_find_next(uint16_t dev_id);
  *   - -EBUSY if the identified device has already started
  *   - -ENOMEM if unable to allocate memory
  */
+__rte_experimental
 int
 rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id);
 
@@ -125,6 +130,7 @@ 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
  */
+__rte_experimental
 int
 rte_bbdev_intr_enable(uint16_t dev_id);
 
@@ -154,13 +160,14 @@ struct rte_bbdev_queue_conf {
  *   - EINVAL if the identified queue size or priority are invalid
  *   - EBUSY if the identified queue or its device have already started
  */
+__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.
@@ -169,6 +176,7 @@ rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
+__rte_experimental
 int
 rte_bbdev_start(uint16_t dev_id);
 
@@ -182,6 +190,7 @@ rte_bbdev_start(uint16_t dev_id);
  * @return
  *   - 0 on success
  */
+__rte_experimental
 int
 rte_bbdev_stop(uint16_t dev_id);
 
@@ -195,6 +204,7 @@ rte_bbdev_stop(uint16_t dev_id);
  * @return
  *   - 0 on success
  */
+__rte_experimental
 int
 rte_bbdev_close(uint16_t dev_id);
 
@@ -212,6 +222,7 @@ rte_bbdev_close(uint16_t dev_id);
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
+__rte_experimental
 int
 rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id);
 
@@ -227,6 +238,7 @@ rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id);
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
+__rte_experimental
 int
 rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id);
 
@@ -238,6 +250,13 @@ struct rte_bbdev_stats {
        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;
 };
 
 /**
@@ -253,6 +272,7 @@ struct rte_bbdev_stats {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
+__rte_experimental
 int
 rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats);
 
@@ -264,6 +284,7 @@ rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats);
  * @return
  *   - 0 on success
  */
+__rte_experimental
 int
 rte_bbdev_stats_reset(uint16_t dev_id);
 
@@ -278,8 +299,10 @@ struct rte_bbdev_driver_info {
        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 */
@@ -322,6 +345,7 @@ struct rte_bbdev_info {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
+__rte_experimental
 int
 rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info);
 
@@ -348,6 +372,7 @@ struct rte_bbdev_queue_info {
  *   - 0 on success
  *   - EINVAL if invalid parameter pointer is provided
  */
+__rte_experimental
 int
 rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
                struct rte_bbdev_queue_info *queue_info);
@@ -456,18 +481,14 @@ extern struct rte_bbdev rte_bbdev_devices[];
  *   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);
 }
 
 /**
@@ -491,18 +512,14 @@ rte_bbdev_enqueue_enc_ops(uint16_t dev_id, uint16_t queue_id,
  *   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);
 }
 
 /**
@@ -526,18 +543,14 @@ rte_bbdev_enqueue_dec_ops(uint16_t dev_id, uint16_t queue_id,
  *   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);
 }
 
 /**
@@ -562,18 +575,14 @@ rte_bbdev_dequeue_enc_ops(uint16_t dev_id, uint16_t queue_id,
  *   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 */
@@ -618,6 +627,7 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  * @return
  *   Zero on success, negative value on failure.
  */
+__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);
@@ -641,6 +651,7 @@ rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event,
  *   - EINVAL if invalid parameter pointer is provided
  *   - EAGAIN if the provided callback pointer does not exist
  */
+__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);
@@ -661,6 +672,7 @@ rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event,
  *   - 0 on success
  *   - negative value on failure - as returned from PMD driver
  */
+__rte_experimental
 int
 rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id);
 
@@ -677,6 +689,7 @@ 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
  */
+__rte_experimental
 int
 rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id);
 
@@ -704,6 +717,7 @@ 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
  */
+__rte_experimental
 int
 rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
                void *data);