26#include <rte_compat.h>
35#include "rte_bbdev_trace_fp.h"
37#ifndef RTE_BBDEV_MAX_DEVS
38#define RTE_BBDEV_MAX_DEVS 128
46#define RTE_BBDEV_ENQ_STATUS_SIZE_MAX 6
89#define RTE_BBDEV_FOREACH(i) for (i = rte_bbdev_find_next(-1); \
90 i < RTE_BBDEV_MAX_DEVS; \
91 i = rte_bbdev_find_next(i))
384#define RTE_BBDEV_END_OF_CAPABILITIES_LIST() \
385 { RTE_BBDEV_OP_NONE }
447struct rte_bbdev_queue_data {
456typedef uint16_t (*rte_bbdev_enqueue_enc_ops_t)(
457 struct rte_bbdev_queue_data *q_data,
462typedef uint16_t (*rte_bbdev_enqueue_dec_ops_t)(
463 struct rte_bbdev_queue_data *q_data,
468typedef uint16_t (*rte_bbdev_enqueue_fft_ops_t)(
469 struct rte_bbdev_queue_data *q_data,
474typedef uint16_t (*rte_bbdev_enqueue_mldts_ops_t)(
475 struct rte_bbdev_queue_data *q_data,
480typedef uint16_t (*rte_bbdev_dequeue_enc_ops_t)(
481 struct rte_bbdev_queue_data *q_data,
485typedef uint16_t (*rte_bbdev_dequeue_dec_ops_t)(
486 struct rte_bbdev_queue_data *q_data,
490typedef uint16_t (*rte_bbdev_dequeue_fft_ops_t)(
491 struct rte_bbdev_queue_data *q_data,
495typedef uint16_t (*rte_bbdev_dequeue_mldts_ops_t)(
496 struct rte_bbdev_queue_data *q_data,
499#define RTE_BBDEV_NAME_MAX_LEN 64
507struct rte_bbdev_data {
511 struct rte_bbdev_queue_data *queues;
515 RTE_ATOMIC(uint16_t) process_cnt;
520struct rte_bbdev_callback;
521struct rte_intr_handle;
532 rte_bbdev_enqueue_enc_ops_t enqueue_enc_ops;
534 rte_bbdev_enqueue_dec_ops_t enqueue_dec_ops;
536 rte_bbdev_dequeue_enc_ops_t dequeue_enc_ops;
538 rte_bbdev_dequeue_dec_ops_t dequeue_dec_ops;
540 rte_bbdev_enqueue_enc_ops_t enqueue_ldpc_enc_ops;
542 rte_bbdev_enqueue_dec_ops_t enqueue_ldpc_dec_ops;
544 rte_bbdev_dequeue_enc_ops_t dequeue_ldpc_enc_ops;
546 rte_bbdev_dequeue_dec_ops_t dequeue_ldpc_dec_ops;
548 rte_bbdev_enqueue_fft_ops_t enqueue_fft_ops;
550 rte_bbdev_dequeue_fft_ops_t dequeue_fft_ops;
552 struct rte_bbdev_data *data;
554 struct rte_device *device;
556 struct rte_bbdev_cb_list list_cbs;
557 struct rte_intr_handle *intr_handle;
559 rte_bbdev_enqueue_mldts_ops_t enqueue_mldts_ops;
561 rte_bbdev_dequeue_mldts_ops_t dequeue_mldts_ops;
565extern struct rte_bbdev rte_bbdev_devices[];
588static inline uint16_t
592 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
593 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
594 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
596 return dev->enqueue_enc_ops(q_data, ops, num_ops);
620static inline uint16_t
624 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
625 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
626 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
628 return dev->enqueue_dec_ops(q_data, ops, num_ops);
652static inline uint16_t
656 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
657 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
658 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
660 return dev->enqueue_ldpc_enc_ops(q_data, ops, num_ops);
684static inline uint16_t
688 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
689 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
690 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
692 return dev->enqueue_ldpc_dec_ops(q_data, ops, num_ops);
716static inline uint16_t
720 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
721 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
722 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
724 return dev->enqueue_fft_ops(q_data, ops, num_ops);
748static inline uint16_t
752 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
753 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
754 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
756 return dev->enqueue_mldts_ops(q_data, ops, num_ops);
781static inline uint16_t
785 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
786 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
787 uint16_t num_ops_dequeued = dev->dequeue_enc_ops(q_data, ops, num_ops);
788 if (num_ops_dequeued > 0)
789 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
791 return num_ops_dequeued;
817static inline uint16_t
821 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
822 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
823 uint16_t num_ops_dequeued = dev->dequeue_dec_ops(q_data, ops, num_ops);
824 if (num_ops_dequeued > 0)
825 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
827 return num_ops_dequeued;
852static inline uint16_t
856 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
857 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
858 uint16_t num_ops_dequeued = dev->dequeue_ldpc_enc_ops(q_data, ops, num_ops);
859 if (num_ops_dequeued > 0)
860 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
862 return num_ops_dequeued;
886static inline uint16_t
890 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
891 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
892 uint16_t num_ops_dequeued = dev->dequeue_ldpc_dec_ops(q_data, ops, num_ops);
893 if (num_ops_dequeued > 0)
894 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
896 return num_ops_dequeued;
920static inline uint16_t
924 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
925 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
926 uint16_t num_ops_dequeued = dev->dequeue_fft_ops(q_data, ops, num_ops);
927 if (num_ops_dequeued > 0)
928 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
930 return num_ops_dequeued;
954static inline uint16_t
958 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
959 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
960 uint16_t num_ops_dequeued = dev->dequeue_mldts_ops(q_data, ops, num_ops);
961 if (num_ops_dequeued > 0)
962 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
964 return num_ops_dequeued;
int rte_bbdev_start(uint16_t dev_id)
@ RTE_BBDEV_DEV_FATAL_ERR
@ RTE_BBDEV_DEV_CORRECT_ERR
@ RTE_BBDEV_DEV_NOT_SUPPORTED
@ RTE_BBDEV_DEV_RECONFIG_REQ
@ RTE_BBDEV_DEV_CONFIGURED
@ RTE_BBDEV_DEV_RESTART_REQ
int rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id)
@ RTE_BBDEV_ENQ_STATUS_INVALID_OP
@ RTE_BBDEV_ENQ_STATUS_RING_FULL
@ RTE_BBDEV_ENQ_STATUS_QUEUE_FULL
@ RTE_BBDEV_ENQ_STATUS_NONE
int rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id)
__rte_experimental int rte_bbdev_queue_ops_dump(uint16_t dev_id, uint16_t queue_index, FILE *file)
RTE_TAILQ_HEAD(rte_bbdev_cb_list, rte_bbdev_callback)
__rte_experimental int rte_bbdev_queue_stats_get(uint16_t dev_id, uint16_t queue_id, struct rte_bbdev_stats *stats)
static uint16_t rte_bbdev_dequeue_fft_ops(uint16_t dev_id, uint16_t queue_id, struct rte_bbdev_fft_op **ops, uint16_t num_ops)
int rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event, rte_bbdev_cb_fn cb_fn, void *cb_arg)
static uint16_t rte_bbdev_dequeue_mldts_ops(uint16_t dev_id, uint16_t queue_id, struct rte_bbdev_mldts_op **ops, uint16_t num_ops)
int rte_bbdev_stop(uint16_t dev_id)
__rte_experimental void rte_bbdev_ops_trace(void *op, enum rte_bbdev_op_type op_type)
int rte_bbdev_close(uint16_t dev_id)
uint16_t rte_bbdev_find_next(uint16_t dev_id)
__rte_experimental char * rte_bbdev_ops_param_string(void *op, enum rte_bbdev_op_type op_type, char *str, uint32_t len)
static 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)
static uint16_t rte_bbdev_enqueue_mldts_ops(uint16_t dev_id, uint16_t queue_id, struct rte_bbdev_mldts_op **ops, uint16_t num_ops)
int rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info)
uint16_t rte_bbdev_count(void)
int rte_bbdev_stats_reset(uint16_t dev_id)
static 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)
@ RTE_BBDEV_EVENT_DEQUEUE
@ RTE_BBDEV_EVENT_UNKNOWN
int rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id, const struct rte_bbdev_queue_conf *conf)
const char * rte_bbdev_device_status_str(enum rte_bbdev_device_status status)
static uint16_t rte_bbdev_enqueue_fft_ops(uint16_t dev_id, uint16_t queue_id, struct rte_bbdev_fft_op **ops, uint16_t num_ops)
void(* rte_bbdev_cb_fn)(uint16_t dev_id, enum rte_bbdev_event_type event, void *cb_arg, void *ret_param)
static 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)
int rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id, struct rte_bbdev_queue_info *queue_info)
static 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)
static 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)
static 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)
bool rte_bbdev_is_valid(uint16_t dev_id)
int rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id)
const char * rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status)
static 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)
int rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats)
int rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event, rte_bbdev_cb_fn cb_fn, void *cb_arg)
int rte_bbdev_intr_enable(uint16_t dev_id)
int rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id)
int rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op, void *data)
static 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)
int rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id)
#define RTE_BBDEV_NAME_MAX_LEN
const char * rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
#define __rte_cache_aligned
unsigned int max_num_queues
uint8_t max_dl_queue_priority
struct rte_bbdev_queue_conf default_queue_conf
unsigned int num_queues[RTE_BBDEV_OP_TYPE_SIZE_MAX]
unsigned int queue_priority[RTE_BBDEV_OP_TYPE_SIZE_MAX]
enum rte_cpu_flag_t * cpu_flag_reqs
uint32_t harq_buffer_size
const struct rte_bbdev_op_cap * capabilities
bool queue_intr_supported
enum rte_bbdev_device_status device_status
uint8_t max_ul_queue_priority
uint16_t * fft_window_width
bool hardware_accelerated
struct rte_bbdev_driver_info drv
const struct rte_device * device
enum rte_bbdev_op_type op_type
struct rte_bbdev_queue_conf conf
uint64_t enqueue_status_count[RTE_BBDEV_ENQ_STATUS_SIZE_MAX]
uint64_t acc_offload_cycles
uint64_t enqueue_err_count
uint64_t enqueue_warn_count
uint64_t dequeue_err_count
uint16_t enqueue_depth_avail
uint64_t dequeue_warn_count