net/iavf: add GTPU in default hash
[dpdk.git] / lib / librte_bbdev / rte_bbdev.h
index 767a1e1..5729137 100644 (file)
@@ -11,7 +11,8 @@
  * Wireless base band device abstraction APIs.
  *
  * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
+ * @b EXPERIMENTAL:
+ * All functions in this file may be changed or removed without prior notice.
  *
  * This API allows an application to discover, configure and use a device to
  * process operations. An asynchronous API (enqueue, followed by later dequeue)
@@ -43,7 +44,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
@@ -55,7 +56,8 @@ enum rte_bbdev_state {
  * @return
  *   The total number of usable devices.
  */
-uint16_t __rte_experimental
+__rte_experimental
+uint16_t
 rte_bbdev_count(void);
 
 /**
@@ -67,7 +69,8 @@ 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);
 
 /**
@@ -80,7 +83,8 @@ 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 */
@@ -109,7 +113,8 @@ rte_bbdev_find_next(uint16_t dev_id);
  *   - -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);
 
 /**
@@ -126,7 +131,8 @@ 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 */
@@ -155,7 +161,8 @@ 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
  */
-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);
 
@@ -170,7 +177,8 @@ rte_bbdev_queue_configure(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_start(uint16_t dev_id);
 
 /**
@@ -183,7 +191,8 @@ rte_bbdev_start(uint16_t dev_id);
  * @return
  *   - 0 on success
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_stop(uint16_t dev_id);
 
 /**
@@ -196,7 +205,8 @@ rte_bbdev_stop(uint16_t dev_id);
  * @return
  *   - 0 on success
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_close(uint16_t dev_id);
 
 /**
@@ -213,7 +223,8 @@ 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);
 
 /**
@@ -228,7 +239,8 @@ 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. */
@@ -239,6 +251,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;
 };
 
 /**
@@ -254,7 +273,8 @@ struct rte_bbdev_stats {
  *   - 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);
 
 /**
@@ -265,7 +285,8 @@ 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 */
@@ -279,12 +300,16 @@ 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 */
        uint16_t min_alignment;
+       /** HARQ memory available in kB */
+       uint32_t harq_buffer_size;
        /** Default queue configuration used if none is supplied  */
        struct rte_bbdev_queue_conf default_queue_conf;
        /** Device operation capabilities */
@@ -304,7 +329,7 @@ struct rte_bbdev_driver_info {
 struct rte_bbdev_info {
        int socket_id;  /**< NUMA socket that device is on */
        const char *dev_name;  /**< Unique device name */
-       const struct rte_bus *bus;  /**< Bus information */
+       const struct rte_device *device; /**< Device Information */
        uint16_t num_queues;  /**< Number of queues currently configured */
        bool started;  /**< Set if device is currently started */
        struct rte_bbdev_driver_info drv;  /**< Info from device driver */
@@ -323,7 +348,8 @@ struct rte_bbdev_info {
  *   - 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 */
@@ -349,7 +375,8 @@ struct rte_bbdev_queue_info {
  *   - 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);
 
@@ -416,14 +443,22 @@ TAILQ_HEAD(rte_bbdev_cb_list, rte_bbdev_callback);
  * these fields, but should only write to the *_ops fields.
  */
 struct __rte_cache_aligned rte_bbdev {
-       /**< Enqueue encode function */
+       /** Enqueue encode function */
        rte_bbdev_enqueue_enc_ops_t enqueue_enc_ops;
-       /**< Enqueue decode function */
+       /** Enqueue decode function */
        rte_bbdev_enqueue_dec_ops_t enqueue_dec_ops;
-       /**< Dequeue encode function */
+       /** Dequeue encode function */
        rte_bbdev_dequeue_enc_ops_t dequeue_enc_ops;
-       /**< Dequeue decode function */
+       /** Dequeue decode function */
        rte_bbdev_dequeue_dec_ops_t dequeue_dec_ops;
+       /** Enqueue encode function */
+       rte_bbdev_enqueue_enc_ops_t enqueue_ldpc_enc_ops;
+       /** Enqueue decode function */
+       rte_bbdev_enqueue_dec_ops_t enqueue_ldpc_dec_ops;
+       /** Dequeue encode function */
+       rte_bbdev_dequeue_enc_ops_t dequeue_ldpc_enc_ops;
+       /** Dequeue decode function */
+       rte_bbdev_dequeue_dec_ops_t dequeue_ldpc_dec_ops;
        const struct rte_bbdev_ops *dev_ops;  /**< Functions exported by PMD */
        struct rte_bbdev_data *data;  /**< Pointer to device data */
        enum rte_bbdev_state state;  /**< If device is currently used or not */
@@ -457,18 +492,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);
 }
 
 /**
@@ -492,20 +523,79 @@ 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);
+       return 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);
+/**
+ * Enqueue a burst of processed encode operations to a queue of the device.
+ * This functions only enqueues as many operations as currently possible and
+ * does not block until @p num_ops entries in the queue are available.
+ * This function does not provide any error notification to avoid the
+ * corresponding overhead.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param queue_id
+ *   The index of the queue.
+ * @param ops
+ *   Pointer array containing operations to be enqueued Must have at least
+ *   @p num_ops entries
+ * @param num_ops
+ *   The maximum number of operations to enqueue.
+ *
+ * @return
+ *   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_ldpc_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];
+       return dev->enqueue_ldpc_enc_ops(q_data, ops, num_ops);
+}
 
-       return n;
+/**
+ * Enqueue a burst of processed decode operations to a queue of the device.
+ * This functions only enqueues as many operations as currently possible and
+ * does not block until @p num_ops entries in the queue are available.
+ * This function does not provide any error notification to avoid the
+ * corresponding overhead.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param queue_id
+ *   The index of the queue.
+ * @param ops
+ *   Pointer array containing operations to be enqueued Must have at least
+ *   @p num_ops entries
+ * @param num_ops
+ *   The maximum number of operations to enqueue.
+ *
+ * @return
+ *   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_ldpc_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];
+       return dev->enqueue_ldpc_dec_ops(q_data, ops, num_ops);
 }
 
+
 /**
  * Dequeue a burst of processed encode operations from a queue of the device.
  * This functions returns only the current contents of the queue, and does not
@@ -520,6 +610,7 @@ rte_bbdev_enqueue_dec_ops(uint16_t dev_id, uint16_t queue_id,
  * @param ops
  *   Pointer array where operations will be dequeued to. Must have at least
  *   @p num_ops entries
+ *   ie. A pointer to a table of void * pointers (ops) that will be filled.
  * @param num_ops
  *   The maximum number of operations to dequeue.
  *
@@ -527,18 +618,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);
 }
 
 /**
@@ -555,6 +642,7 @@ rte_bbdev_dequeue_enc_ops(uint16_t dev_id, uint16_t queue_id,
  * @param ops
  *   Pointer array where operations will be dequeued to. Must have at least
  *   @p num_ops entries
+ *   ie. A pointer to a table of void * pointers (ops) that will be filled.
  * @param num_ops
  *   The maximum number of operations to dequeue.
  *
@@ -563,18 +651,77 @@ 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);
+       return 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;
+/**
+ * Dequeue a burst of processed encode operations from a queue of the device.
+ * This functions returns only the current contents of the queue, and does not
+ * block until @ num_ops is available.
+ * This function does not provide any error notification to avoid the
+ * corresponding overhead.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param queue_id
+ *   The index of the queue.
+ * @param ops
+ *   Pointer array where operations will be dequeued to. Must have at least
+ *   @p num_ops entries
+ * @param num_ops
+ *   The maximum number of operations to dequeue.
+ *
+ * @return
+ *   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_ldpc_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];
+       return dev->dequeue_ldpc_enc_ops(q_data, ops, num_ops);
+}
+
+/**
+ * Dequeue a burst of processed decode operations from a queue of the device.
+ * This functions returns only the current contents of the queue, and does not
+ * block until @ num_ops is available.
+ * This function does not provide any error notification to avoid the
+ * corresponding overhead.
+ *
+ * @param dev_id
+ *   The identifier of the device.
+ * @param queue_id
+ *   The index of the queue.
+ * @param ops
+ *   Pointer array where operations will be dequeued to. Must have at least
+ *   @p num_ops entries
+ * @param num_ops
+ *   The maximum number of operations to dequeue.
+ *
+ * @return
+ *   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_ldpc_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];
+       return dev->dequeue_ldpc_dec_ops(q_data, ops, num_ops);
 }
 
 /** Definitions of device event types */
@@ -619,7 +766,8 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
  * @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);
 
@@ -642,7 +790,8 @@ 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
  */
-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);
 
@@ -662,7 +811,8 @@ 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
  */
-int __rte_experimental
+__rte_experimental
+int
 rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id);
 
 /**
@@ -678,7 +828,8 @@ 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);
 
 /**
@@ -705,7 +856,8 @@ 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);