DPDK 23.11.0
Loading...
Searching...
No Matches
rte_bbdev.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Intel Corporation
3 */
4
5#ifndef _RTE_BBDEV_H_
6#define _RTE_BBDEV_H_
7
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#include <stdint.h>
28#include <stdbool.h>
29
30#include <rte_compat.h>
31#include <rte_cpuflags.h>
32
33#include "rte_bbdev_op.h"
34
35#ifndef RTE_BBDEV_MAX_DEVS
36#define RTE_BBDEV_MAX_DEVS 128
37#endif
38
39/*
40 * Maximum size to be used to manage the enum rte_bbdev_enqueue_status
41 * including padding for future enum insertion.
42 * The enum values must be explicitly kept smaller or equal to this padded maximum size.
43 */
44#define RTE_BBDEV_ENQ_STATUS_SIZE_MAX 6
45
48 RTE_BBDEV_UNUSED,
49 RTE_BBDEV_INITIALIZED
50};
51
58uint16_t
60
70bool
71rte_bbdev_is_valid(uint16_t dev_id);
72
83uint16_t
84rte_bbdev_find_next(uint16_t dev_id);
85
87#define RTE_BBDEV_FOREACH(i) for (i = rte_bbdev_find_next(-1); \
88 i < RTE_BBDEV_MAX_DEVS; \
89 i = rte_bbdev_find_next(i))
90
112int
113rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id);
114
129int
130rte_bbdev_intr_enable(uint16_t dev_id);
131
140
158int
159rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
160 const struct rte_bbdev_queue_conf *conf);
161
173int
174rte_bbdev_start(uint16_t dev_id);
175
186int
187rte_bbdev_stop(uint16_t dev_id);
188
199int
200rte_bbdev_close(uint16_t dev_id);
201
216int
217rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id);
218
231int
232rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id);
233
247 /* Note: RTE_BBDEV_ENQ_STATUS_SIZE_MAX must be larger or equal to maximum enum value. */
248};
249
264
267 uint64_t enqueued_count;
268 uint64_t dequeued_count;
278 uint64_t enqueue_status_count[RTE_BBDEV_ENQ_STATUS_SIZE_MAX];
286};
287
301int
302rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats);
303
312int
313rte_bbdev_stats_reset(uint16_t dev_id);
314
317/* Structure rte_bbdev_driver_info 8< */
320 const char *driver_name;
321
323 unsigned int max_num_queues;
325 unsigned int num_queues[RTE_BBDEV_OP_TYPE_SIZE_MAX];
327 unsigned int queue_priority[RTE_BBDEV_OP_TYPE_SIZE_MAX];
353 const enum rte_cpu_flag_t *cpu_flag_reqs;
356};
357/* >8 End of structure rte_bbdev_driver_info. */
358
360#define RTE_BBDEV_END_OF_CAPABILITIES_LIST() \
361 { RTE_BBDEV_OP_NONE }
362
368/* Structure rte_bbdev_info 8< */
371 const char *dev_name;
372 const struct rte_device *device;
373 uint16_t num_queues;
374 bool started;
376};
377/* >8 End of structure rte_bbdev_info. */
378
392int
393rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info);
394
402
418int
419rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
420 struct rte_bbdev_queue_info *queue_info);
421
423struct rte_bbdev_queue_data {
424 void *queue_private;
425 struct rte_bbdev_queue_conf conf;
426 struct rte_bbdev_stats queue_stats;
427 enum rte_bbdev_enqueue_status enqueue_status;
428 bool started;
429};
430
432typedef uint16_t (*rte_bbdev_enqueue_enc_ops_t)(
433 struct rte_bbdev_queue_data *q_data,
434 struct rte_bbdev_enc_op **ops,
435 uint16_t num);
436
438typedef uint16_t (*rte_bbdev_enqueue_dec_ops_t)(
439 struct rte_bbdev_queue_data *q_data,
440 struct rte_bbdev_dec_op **ops,
441 uint16_t num);
442
444typedef uint16_t (*rte_bbdev_enqueue_fft_ops_t)(
445 struct rte_bbdev_queue_data *q_data,
446 struct rte_bbdev_fft_op **ops,
447 uint16_t num);
448
450typedef uint16_t (*rte_bbdev_enqueue_mldts_ops_t)(
451 struct rte_bbdev_queue_data *q_data,
452 struct rte_bbdev_mldts_op **ops,
453 uint16_t num);
454
456typedef uint16_t (*rte_bbdev_dequeue_enc_ops_t)(
457 struct rte_bbdev_queue_data *q_data,
458 struct rte_bbdev_enc_op **ops, uint16_t num);
459
461typedef uint16_t (*rte_bbdev_dequeue_dec_ops_t)(
462 struct rte_bbdev_queue_data *q_data,
463 struct rte_bbdev_dec_op **ops, uint16_t num);
464
466typedef uint16_t (*rte_bbdev_dequeue_fft_ops_t)(
467 struct rte_bbdev_queue_data *q_data,
468 struct rte_bbdev_fft_op **ops, uint16_t num);
469
471typedef uint16_t (*rte_bbdev_dequeue_mldts_ops_t)(
472 struct rte_bbdev_queue_data *q_data,
473 struct rte_bbdev_mldts_op **ops, uint16_t num);
474
475#define RTE_BBDEV_NAME_MAX_LEN 64
483struct rte_bbdev_data {
484 char name[RTE_BBDEV_NAME_MAX_LEN];
485 void *dev_private;
486 uint16_t num_queues;
487 struct rte_bbdev_queue_data *queues;
488 uint16_t dev_id;
489 int socket_id;
490 bool started;
491 RTE_ATOMIC(uint16_t) process_cnt;
492};
493
494/* Forward declarations */
495struct rte_bbdev_ops;
496struct rte_bbdev_callback;
497struct rte_intr_handle;
498
500RTE_TAILQ_HEAD(rte_bbdev_cb_list, rte_bbdev_callback);
501
506struct __rte_cache_aligned rte_bbdev {
508 rte_bbdev_enqueue_enc_ops_t enqueue_enc_ops;
510 rte_bbdev_enqueue_dec_ops_t enqueue_dec_ops;
512 rte_bbdev_dequeue_enc_ops_t dequeue_enc_ops;
514 rte_bbdev_dequeue_dec_ops_t dequeue_dec_ops;
516 rte_bbdev_enqueue_enc_ops_t enqueue_ldpc_enc_ops;
518 rte_bbdev_enqueue_dec_ops_t enqueue_ldpc_dec_ops;
520 rte_bbdev_dequeue_enc_ops_t dequeue_ldpc_enc_ops;
522 rte_bbdev_dequeue_dec_ops_t dequeue_ldpc_dec_ops;
524 rte_bbdev_enqueue_fft_ops_t enqueue_fft_ops;
526 rte_bbdev_dequeue_fft_ops_t dequeue_fft_ops;
527 const struct rte_bbdev_ops *dev_ops;
528 struct rte_bbdev_data *data;
529 enum rte_bbdev_state state;
530 struct rte_device *device;
532 struct rte_bbdev_cb_list list_cbs;
533 struct rte_intr_handle *intr_handle;
535 rte_bbdev_enqueue_mldts_ops_t enqueue_mldts_ops;
537 rte_bbdev_dequeue_mldts_ops_t dequeue_mldts_ops;
538};
539
541extern struct rte_bbdev rte_bbdev_devices[];
542
564static inline uint16_t
565rte_bbdev_enqueue_enc_ops(uint16_t dev_id, uint16_t queue_id,
566 struct rte_bbdev_enc_op **ops, uint16_t num_ops)
567{
568 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
569 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
570 return dev->enqueue_enc_ops(q_data, ops, num_ops);
571}
572
594static inline uint16_t
595rte_bbdev_enqueue_dec_ops(uint16_t dev_id, uint16_t queue_id,
596 struct rte_bbdev_dec_op **ops, uint16_t num_ops)
597{
598 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
599 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
600 return dev->enqueue_dec_ops(q_data, ops, num_ops);
601}
602
624static inline uint16_t
625rte_bbdev_enqueue_ldpc_enc_ops(uint16_t dev_id, uint16_t queue_id,
626 struct rte_bbdev_enc_op **ops, uint16_t num_ops)
627{
628 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
629 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
630 return dev->enqueue_ldpc_enc_ops(q_data, ops, num_ops);
631}
632
654static inline uint16_t
655rte_bbdev_enqueue_ldpc_dec_ops(uint16_t dev_id, uint16_t queue_id,
656 struct rte_bbdev_dec_op **ops, uint16_t num_ops)
657{
658 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
659 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
660 return dev->enqueue_ldpc_dec_ops(q_data, ops, num_ops);
661}
662
684static inline uint16_t
685rte_bbdev_enqueue_fft_ops(uint16_t dev_id, uint16_t queue_id,
686 struct rte_bbdev_fft_op **ops, uint16_t num_ops)
687{
688 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
689 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
690 return dev->enqueue_fft_ops(q_data, ops, num_ops);
691}
692
714static inline uint16_t
715rte_bbdev_enqueue_mldts_ops(uint16_t dev_id, uint16_t queue_id,
716 struct rte_bbdev_mldts_op **ops, uint16_t num_ops)
717{
718 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
719 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
720 return dev->enqueue_mldts_ops(q_data, ops, num_ops);
721}
722
745static inline uint16_t
746rte_bbdev_dequeue_enc_ops(uint16_t dev_id, uint16_t queue_id,
747 struct rte_bbdev_enc_op **ops, uint16_t num_ops)
748{
749 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
750 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
751 return dev->dequeue_enc_ops(q_data, ops, num_ops);
752}
753
777static inline uint16_t
778rte_bbdev_dequeue_dec_ops(uint16_t dev_id, uint16_t queue_id,
779 struct rte_bbdev_dec_op **ops, uint16_t num_ops)
780{
781 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
782 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
783 return dev->dequeue_dec_ops(q_data, ops, num_ops);
784}
785
786
808static inline uint16_t
809rte_bbdev_dequeue_ldpc_enc_ops(uint16_t dev_id, uint16_t queue_id,
810 struct rte_bbdev_enc_op **ops, uint16_t num_ops)
811{
812 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
813 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
814 return dev->dequeue_ldpc_enc_ops(q_data, ops, num_ops);
815}
816
838static inline uint16_t
839rte_bbdev_dequeue_ldpc_dec_ops(uint16_t dev_id, uint16_t queue_id,
840 struct rte_bbdev_dec_op **ops, uint16_t num_ops)
841{
842 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
843 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
844 return dev->dequeue_ldpc_dec_ops(q_data, ops, num_ops);
845}
846
868static inline uint16_t
869rte_bbdev_dequeue_fft_ops(uint16_t dev_id, uint16_t queue_id,
870 struct rte_bbdev_fft_op **ops, uint16_t num_ops)
871{
872 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
873 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
874 return dev->dequeue_fft_ops(q_data, ops, num_ops);
875}
876
898__rte_experimental
899static inline uint16_t
900rte_bbdev_dequeue_mldts_ops(uint16_t dev_id, uint16_t queue_id,
901 struct rte_bbdev_mldts_op **ops, uint16_t num_ops)
902{
903 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
904 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
905 return dev->dequeue_mldts_ops(q_data, ops, num_ops);
906}
907
915
929typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
930 enum rte_bbdev_event_type event, void *cb_arg,
931 void *ret_param);
932
950int
952 rte_bbdev_cb_fn cb_fn, void *cb_arg);
953
973int
975 rte_bbdev_cb_fn cb_fn, void *cb_arg);
976
993int
994rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id);
995
1009int
1010rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id);
1011
1036int
1037rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
1038 void *data);
1039
1049const char*
1051
1061const char*
1063
1064#ifdef __cplusplus
1065}
1066#endif
1067
1068#endif /* _RTE_BBDEV_H_ */
int rte_bbdev_start(uint16_t dev_id)
rte_bbdev_device_status
Definition rte_bbdev.h:253
@ RTE_BBDEV_DEV_FATAL_ERR
Definition rte_bbdev.h:259
@ RTE_BBDEV_DEV_CORRECT_ERR
Definition rte_bbdev.h:262
@ RTE_BBDEV_DEV_NOT_SUPPORTED
Definition rte_bbdev.h:255
@ RTE_BBDEV_DEV_RECONFIG_REQ
Definition rte_bbdev.h:261
@ RTE_BBDEV_DEV_CONFIGURED
Definition rte_bbdev.h:257
@ RTE_BBDEV_DEV_RESTART_REQ
Definition rte_bbdev.h:260
@ RTE_BBDEV_DEV_RESET
Definition rte_bbdev.h:256
@ RTE_BBDEV_DEV_ACTIVE
Definition rte_bbdev.h:258
@ RTE_BBDEV_DEV_NOSTATUS
Definition rte_bbdev.h:254
int rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id)
rte_bbdev_enqueue_status
Definition rte_bbdev.h:242
@ RTE_BBDEV_ENQ_STATUS_INVALID_OP
Definition rte_bbdev.h:246
@ RTE_BBDEV_ENQ_STATUS_RING_FULL
Definition rte_bbdev.h:245
@ RTE_BBDEV_ENQ_STATUS_QUEUE_FULL
Definition rte_bbdev.h:244
@ RTE_BBDEV_ENQ_STATUS_NONE
Definition rte_bbdev.h:243
int rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id)
RTE_TAILQ_HEAD(rte_bbdev_cb_list, rte_bbdev_callback)
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)
Definition rte_bbdev.h:869
int rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event, rte_bbdev_cb_fn cb_fn, void *cb_arg)
int rte_bbdev_stop(uint16_t dev_id)
int rte_bbdev_close(uint16_t dev_id)
rte_bbdev_state
Definition rte_bbdev.h:47
uint16_t rte_bbdev_find_next(uint16_t dev_id)
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)
Definition rte_bbdev.h:839
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)
Definition rte_bbdev.h:715
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)
Definition rte_bbdev.h:565
rte_bbdev_event_type
Definition rte_bbdev.h:909
@ RTE_BBDEV_EVENT_ERROR
Definition rte_bbdev.h:911
@ RTE_BBDEV_EVENT_DEQUEUE
Definition rte_bbdev.h:912
@ RTE_BBDEV_EVENT_UNKNOWN
Definition rte_bbdev.h:910
@ RTE_BBDEV_EVENT_MAX
Definition rte_bbdev.h:913
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)
Definition rte_bbdev.h:685
void(* rte_bbdev_cb_fn)(uint16_t dev_id, enum rte_bbdev_event_type event, void *cb_arg, void *ret_param)
Definition rte_bbdev.h:929
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)
Definition rte_bbdev.h:809
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)
Definition rte_bbdev.h:778
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)
Definition rte_bbdev.h:746
static __rte_experimental 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)
Definition rte_bbdev.h:900
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)
Definition rte_bbdev.h:625
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)
Definition rte_bbdev.h:655
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)
Definition rte_bbdev.h:595
int rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id)
#define RTE_BBDEV_NAME_MAX_LEN
Definition rte_bbdev.h:475
rte_bbdev_op_type
#define __rte_cache_aligned
Definition rte_common.h:524
void * dev_private
unsigned int max_num_queues
Definition rte_bbdev.h:323
uint8_t max_dl_queue_priority
Definition rte_bbdev.h:333
struct rte_bbdev_queue_conf default_queue_conf
Definition rte_bbdev.h:349
unsigned int num_queues[RTE_BBDEV_OP_TYPE_SIZE_MAX]
Definition rte_bbdev.h:325
unsigned int queue_priority[RTE_BBDEV_OP_TYPE_SIZE_MAX]
Definition rte_bbdev.h:327
enum rte_cpu_flag_t * cpu_flag_reqs
Definition rte_bbdev.h:353
uint32_t harq_buffer_size
Definition rte_bbdev.h:341
const struct rte_bbdev_op_cap * capabilities
Definition rte_bbdev.h:351
const char * driver_name
Definition rte_bbdev.h:320
enum rte_bbdev_device_status device_status
Definition rte_bbdev.h:339
uint8_t max_ul_queue_priority
Definition rte_bbdev.h:335
uint16_t * fft_window_width
Definition rte_bbdev.h:355
struct rte_bbdev_driver_info drv
Definition rte_bbdev.h:375
const char * dev_name
Definition rte_bbdev.h:371
uint16_t num_queues
Definition rte_bbdev.h:373
const struct rte_device * device
Definition rte_bbdev.h:372
enum rte_bbdev_op_type op_type
Definition rte_bbdev.h:138
struct rte_bbdev_queue_conf conf
Definition rte_bbdev.h:398
uint64_t enqueue_status_count[RTE_BBDEV_ENQ_STATUS_SIZE_MAX]
Definition rte_bbdev.h:278
uint64_t acc_offload_cycles
Definition rte_bbdev.h:285
uint64_t enqueue_err_count
Definition rte_bbdev.h:270
uint64_t enqueued_count
Definition rte_bbdev.h:267
uint64_t enqueue_warn_count
Definition rte_bbdev.h:274
uint64_t dequeue_err_count
Definition rte_bbdev.h:272
uint64_t dequeued_count
Definition rte_bbdev.h:268
uint64_t dequeue_warn_count
Definition rte_bbdev.h:276