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))
364 #define RTE_BBDEV_END_OF_CAPABILITIES_LIST() \
365 { RTE_BBDEV_OP_NONE }
427 struct rte_bbdev_queue_data {
436 typedef uint16_t (*rte_bbdev_enqueue_enc_ops_t)(
437 struct rte_bbdev_queue_data *q_data,
442 typedef uint16_t (*rte_bbdev_enqueue_dec_ops_t)(
443 struct rte_bbdev_queue_data *q_data,
448 typedef uint16_t (*rte_bbdev_enqueue_fft_ops_t)(
449 struct rte_bbdev_queue_data *q_data,
454 typedef uint16_t (*rte_bbdev_enqueue_mldts_ops_t)(
455 struct rte_bbdev_queue_data *q_data,
460 typedef uint16_t (*rte_bbdev_dequeue_enc_ops_t)(
461 struct rte_bbdev_queue_data *q_data,
465 typedef uint16_t (*rte_bbdev_dequeue_dec_ops_t)(
466 struct rte_bbdev_queue_data *q_data,
470 typedef uint16_t (*rte_bbdev_dequeue_fft_ops_t)(
471 struct rte_bbdev_queue_data *q_data,
475 typedef uint16_t (*rte_bbdev_dequeue_mldts_ops_t)(
476 struct rte_bbdev_queue_data *q_data,
479 #define RTE_BBDEV_NAME_MAX_LEN 64
487 struct rte_bbdev_data {
491 struct rte_bbdev_queue_data *queues;
495 RTE_ATOMIC(uint16_t) process_cnt;
500 struct rte_bbdev_callback;
501 struct rte_intr_handle;
512 rte_bbdev_enqueue_enc_ops_t enqueue_enc_ops;
514 rte_bbdev_enqueue_dec_ops_t enqueue_dec_ops;
516 rte_bbdev_dequeue_enc_ops_t dequeue_enc_ops;
518 rte_bbdev_dequeue_dec_ops_t dequeue_dec_ops;
520 rte_bbdev_enqueue_enc_ops_t enqueue_ldpc_enc_ops;
522 rte_bbdev_enqueue_dec_ops_t enqueue_ldpc_dec_ops;
524 rte_bbdev_dequeue_enc_ops_t dequeue_ldpc_enc_ops;
526 rte_bbdev_dequeue_dec_ops_t dequeue_ldpc_dec_ops;
528 rte_bbdev_enqueue_fft_ops_t enqueue_fft_ops;
530 rte_bbdev_dequeue_fft_ops_t dequeue_fft_ops;
531 const struct rte_bbdev_ops *dev_ops;
532 struct rte_bbdev_data *data;
534 struct rte_device *device;
536 struct rte_bbdev_cb_list list_cbs;
537 struct rte_intr_handle *intr_handle;
539 rte_bbdev_enqueue_mldts_ops_t enqueue_mldts_ops;
541 rte_bbdev_dequeue_mldts_ops_t dequeue_mldts_ops;
545 extern struct rte_bbdev rte_bbdev_devices[];
568 static inline uint16_t
572 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
573 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
574 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
576 return dev->enqueue_enc_ops(q_data, ops, num_ops);
600 static inline uint16_t
604 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
605 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
606 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
608 return dev->enqueue_dec_ops(q_data, ops, num_ops);
632 static inline uint16_t
636 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
637 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
638 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
640 return dev->enqueue_ldpc_enc_ops(q_data, ops, num_ops);
664 static inline uint16_t
668 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
669 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
670 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
672 return dev->enqueue_ldpc_dec_ops(q_data, ops, num_ops);
696 static inline uint16_t
700 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
701 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
702 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
704 return dev->enqueue_fft_ops(q_data, ops, num_ops);
728 static inline uint16_t
732 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
733 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
734 rte_bbdev_trace_enqueue(dev_id, queue_id, (
void **)ops, num_ops,
736 return dev->enqueue_mldts_ops(q_data, ops, num_ops);
761 static inline uint16_t
765 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
766 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
767 uint16_t num_ops_dequeued = dev->dequeue_enc_ops(q_data, ops, num_ops);
768 if (num_ops_dequeued > 0)
769 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
771 return num_ops_dequeued;
797 static inline uint16_t
801 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
802 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
803 uint16_t num_ops_dequeued = dev->dequeue_dec_ops(q_data, ops, num_ops);
804 if (num_ops_dequeued > 0)
805 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
807 return num_ops_dequeued;
832 static inline uint16_t
836 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
837 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
838 uint16_t num_ops_dequeued = dev->dequeue_ldpc_enc_ops(q_data, ops, num_ops);
839 if (num_ops_dequeued > 0)
840 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
842 return num_ops_dequeued;
866 static inline uint16_t
870 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
871 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
872 uint16_t num_ops_dequeued = dev->dequeue_ldpc_dec_ops(q_data, ops, num_ops);
873 if (num_ops_dequeued > 0)
874 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
876 return num_ops_dequeued;
900 static inline uint16_t
904 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
905 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
906 uint16_t num_ops_dequeued = dev->dequeue_fft_ops(q_data, ops, num_ops);
907 if (num_ops_dequeued > 0)
908 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
910 return num_ops_dequeued;
934 static inline uint16_t
938 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
939 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
940 uint16_t num_ops_dequeued = dev->dequeue_mldts_ops(q_data, ops, num_ops);
941 if (num_ops_dequeued > 0)
942 rte_bbdev_trace_dequeue(dev_id, queue_id, (
void **)ops, num_ops,
944 return num_ops_dequeued;
__rte_experimental int rte_bbdev_queue_ops_dump(uint16_t dev_id, uint16_t queue_index, FILE *file)
bool hardware_accelerated
uint64_t acc_offload_cycles
int rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id, const struct rte_bbdev_queue_conf *conf)
int rte_bbdev_intr_enable(uint16_t dev_id)
enum rte_bbdev_device_status device_status
int rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op, void *data)
int rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id)
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)
RTE_TAILQ_HEAD(rte_bbdev_cb_list, rte_bbdev_callback)
uint64_t dequeue_err_count
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)
uint32_t harq_buffer_size
uint8_t max_dl_queue_priority
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_fft_ops(uint16_t dev_id, uint16_t queue_id, struct rte_bbdev_fft_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)
struct rte_bbdev_driver_info drv
#define __rte_cache_aligned
uint16_t rte_bbdev_find_next(uint16_t dev_id)
uint64_t enqueue_status_count[RTE_BBDEV_ENQ_STATUS_SIZE_MAX]
int rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats)
int rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info)
unsigned int num_queues[RTE_BBDEV_OP_TYPE_SIZE_MAX]
unsigned int max_num_queues
enum rte_bbdev_op_type op_type
int rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id)
int rte_bbdev_start(uint16_t dev_id)
unsigned int queue_priority[RTE_BBDEV_OP_TYPE_SIZE_MAX]
uint16_t rte_bbdev_count(void)
const char * rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status)
uint16_t enqueue_depth_avail
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)
__rte_experimental char * rte_bbdev_ops_param_string(void *op, enum rte_bbdev_op_type op_type, char *str, uint32_t len)
bool rte_bbdev_is_valid(uint16_t dev_id)
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)
uint64_t enqueue_warn_count
#define RTE_BBDEV_NAME_MAX_LEN
int rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id)
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)
uint64_t dequeue_warn_count
struct rte_bbdev_queue_conf conf
int rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id)
bool queue_intr_supported
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)
int rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event, rte_bbdev_cb_fn cb_fn, void *cb_arg)
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)
uint16_t * fft_window_width
int rte_bbdev_stats_reset(uint16_t dev_id)
const char * rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
const struct rte_device * device
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)
const struct rte_bbdev_op_cap * capabilities
int rte_bbdev_stop(uint16_t dev_id)
int rte_bbdev_close(uint16_t dev_id)
struct rte_bbdev_queue_conf default_queue_conf
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_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event, rte_bbdev_cb_fn cb_fn, void *cb_arg)
uint8_t max_ul_queue_priority
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)
enum rte_cpu_flag_t * cpu_flag_reqs
uint64_t enqueue_err_count
const char * rte_bbdev_device_status_str(enum rte_bbdev_device_status status)
void(* rte_bbdev_cb_fn)(uint16_t dev_id, enum rte_bbdev_event_type event, void *cb_arg, void *ret_param)
int rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id)