DPDK 22.11.0-rc2
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_cpuflags.h>
31
32#include "rte_bbdev_op.h"
33
34#ifndef RTE_BBDEV_MAX_DEVS
35#define RTE_BBDEV_MAX_DEVS 128
36#endif
37
38/*
39 * Maximum size to be used to manage the enum rte_bbdev_enqueue_status
40 * including padding for future enum insertion.
41 * The enum values must be explicitly kept smaller or equal to this padded maximum size.
42 */
43#define RTE_BBDEV_ENQ_STATUS_SIZE_MAX 6
44
47 RTE_BBDEV_UNUSED,
48 RTE_BBDEV_INITIALIZED
49};
50
57uint16_t
59
69bool
70rte_bbdev_is_valid(uint16_t dev_id);
71
82uint16_t
83rte_bbdev_find_next(uint16_t dev_id);
84
86#define RTE_BBDEV_FOREACH(i) for (i = rte_bbdev_find_next(-1); \
87 i < RTE_BBDEV_MAX_DEVS; \
88 i = rte_bbdev_find_next(i))
89
111int
112rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id);
113
128int
129rte_bbdev_intr_enable(uint16_t dev_id);
130
133 int socket;
134 uint32_t queue_size;
135 uint8_t priority;
138};
139
157int
158rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
159 const struct rte_bbdev_queue_conf *conf);
160
172int
173rte_bbdev_start(uint16_t dev_id);
174
185int
186rte_bbdev_stop(uint16_t dev_id);
187
198int
199rte_bbdev_close(uint16_t dev_id);
200
215int
216rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id);
217
230int
231rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id);
232
246 /* Note: RTE_BBDEV_ENQ_STATUS_SIZE_MAX must be larger or equal to maximum enum value. */
247};
248
262};
263
266 uint64_t enqueued_count;
267 uint64_t dequeued_count;
277 uint64_t enqueue_status_count[RTE_BBDEV_ENQ_STATUS_SIZE_MAX];
285};
286
300int
301rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats);
302
311int
312rte_bbdev_stats_reset(uint16_t dev_id);
313
317 const char *driver_name;
318
320 unsigned int max_num_queues;
322 unsigned int num_queues[RTE_BBDEV_OP_TYPE_SIZE_MAX];
324 unsigned int queue_priority[RTE_BBDEV_OP_TYPE_SIZE_MAX];
350 const enum rte_cpu_flag_t *cpu_flag_reqs;
351};
352
354#define RTE_BBDEV_END_OF_CAPABILITIES_LIST() \
355 { RTE_BBDEV_OP_NONE }
356
363 const char *dev_name;
364 const struct rte_device *device;
365 uint16_t num_queues;
366 bool started;
368};
369
383int
384rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info);
385
392};
393
409int
410rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
411 struct rte_bbdev_queue_info *queue_info);
412
414struct rte_bbdev_queue_data {
415 void *queue_private;
416 struct rte_bbdev_queue_conf conf;
417 struct rte_bbdev_stats queue_stats;
418 enum rte_bbdev_enqueue_status enqueue_status;
419 bool started;
420};
421
423typedef uint16_t (*rte_bbdev_enqueue_enc_ops_t)(
424 struct rte_bbdev_queue_data *q_data,
425 struct rte_bbdev_enc_op **ops,
426 uint16_t num);
427
429typedef uint16_t (*rte_bbdev_enqueue_dec_ops_t)(
430 struct rte_bbdev_queue_data *q_data,
431 struct rte_bbdev_dec_op **ops,
432 uint16_t num);
433
435typedef uint16_t (*rte_bbdev_enqueue_fft_ops_t)(
436 struct rte_bbdev_queue_data *q_data,
437 struct rte_bbdev_fft_op **ops,
438 uint16_t num);
439
441typedef uint16_t (*rte_bbdev_dequeue_enc_ops_t)(
442 struct rte_bbdev_queue_data *q_data,
443 struct rte_bbdev_enc_op **ops, uint16_t num);
444
446typedef uint16_t (*rte_bbdev_dequeue_dec_ops_t)(
447 struct rte_bbdev_queue_data *q_data,
448 struct rte_bbdev_dec_op **ops, uint16_t num);
449
451typedef uint16_t (*rte_bbdev_dequeue_fft_ops_t)(
452 struct rte_bbdev_queue_data *q_data,
453 struct rte_bbdev_fft_op **ops, uint16_t num);
454
455#define RTE_BBDEV_NAME_MAX_LEN 64
463struct rte_bbdev_data {
464 char name[RTE_BBDEV_NAME_MAX_LEN];
465 void *dev_private;
466 uint16_t num_queues;
467 struct rte_bbdev_queue_data *queues;
468 uint16_t dev_id;
469 int socket_id;
470 bool started;
471 uint16_t process_cnt;
472};
473
474/* Forward declarations */
475struct rte_bbdev_ops;
476struct rte_bbdev_callback;
477struct rte_intr_handle;
478
480RTE_TAILQ_HEAD(rte_bbdev_cb_list, rte_bbdev_callback);
481
486struct __rte_cache_aligned rte_bbdev {
488 rte_bbdev_enqueue_enc_ops_t enqueue_enc_ops;
490 rte_bbdev_enqueue_dec_ops_t enqueue_dec_ops;
492 rte_bbdev_dequeue_enc_ops_t dequeue_enc_ops;
494 rte_bbdev_dequeue_dec_ops_t dequeue_dec_ops;
496 rte_bbdev_enqueue_enc_ops_t enqueue_ldpc_enc_ops;
498 rte_bbdev_enqueue_dec_ops_t enqueue_ldpc_dec_ops;
500 rte_bbdev_dequeue_enc_ops_t dequeue_ldpc_enc_ops;
502 rte_bbdev_dequeue_dec_ops_t dequeue_ldpc_dec_ops;
504 rte_bbdev_enqueue_fft_ops_t enqueue_fft_ops;
506 rte_bbdev_dequeue_fft_ops_t dequeue_fft_ops;
507 const struct rte_bbdev_ops *dev_ops;
508 struct rte_bbdev_data *data;
509 enum rte_bbdev_state state;
510 struct rte_device *device;
512 struct rte_bbdev_cb_list list_cbs;
513 struct rte_intr_handle *intr_handle;
514};
515
517extern struct rte_bbdev rte_bbdev_devices[];
518
540static inline uint16_t
541rte_bbdev_enqueue_enc_ops(uint16_t dev_id, uint16_t queue_id,
542 struct rte_bbdev_enc_op **ops, uint16_t num_ops)
543{
544 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
545 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
546 return dev->enqueue_enc_ops(q_data, ops, num_ops);
547}
548
570static inline uint16_t
571rte_bbdev_enqueue_dec_ops(uint16_t dev_id, uint16_t queue_id,
572 struct rte_bbdev_dec_op **ops, uint16_t num_ops)
573{
574 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
575 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
576 return dev->enqueue_dec_ops(q_data, ops, num_ops);
577}
578
600static inline uint16_t
601rte_bbdev_enqueue_ldpc_enc_ops(uint16_t dev_id, uint16_t queue_id,
602 struct rte_bbdev_enc_op **ops, uint16_t num_ops)
603{
604 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
605 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
606 return dev->enqueue_ldpc_enc_ops(q_data, ops, num_ops);
607}
608
630static inline uint16_t
631rte_bbdev_enqueue_ldpc_dec_ops(uint16_t dev_id, uint16_t queue_id,
632 struct rte_bbdev_dec_op **ops, uint16_t num_ops)
633{
634 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
635 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
636 return dev->enqueue_ldpc_dec_ops(q_data, ops, num_ops);
637}
638
660__rte_experimental
661static inline uint16_t
662rte_bbdev_enqueue_fft_ops(uint16_t dev_id, uint16_t queue_id,
663 struct rte_bbdev_fft_op **ops, uint16_t num_ops)
664{
665 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
666 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
667 return dev->enqueue_fft_ops(q_data, ops, num_ops);
668}
669
692static inline uint16_t
693rte_bbdev_dequeue_enc_ops(uint16_t dev_id, uint16_t queue_id,
694 struct rte_bbdev_enc_op **ops, uint16_t num_ops)
695{
696 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
697 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
698 return dev->dequeue_enc_ops(q_data, ops, num_ops);
699}
700
724static inline uint16_t
725rte_bbdev_dequeue_dec_ops(uint16_t dev_id, uint16_t queue_id,
726 struct rte_bbdev_dec_op **ops, uint16_t num_ops)
727{
728 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
729 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
730 return dev->dequeue_dec_ops(q_data, ops, num_ops);
731}
732
733
755static inline uint16_t
756rte_bbdev_dequeue_ldpc_enc_ops(uint16_t dev_id, uint16_t queue_id,
757 struct rte_bbdev_enc_op **ops, uint16_t num_ops)
758{
759 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
760 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
761 return dev->dequeue_ldpc_enc_ops(q_data, ops, num_ops);
762}
763
785static inline uint16_t
786rte_bbdev_dequeue_ldpc_dec_ops(uint16_t dev_id, uint16_t queue_id,
787 struct rte_bbdev_dec_op **ops, uint16_t num_ops)
788{
789 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
790 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
791 return dev->dequeue_ldpc_dec_ops(q_data, ops, num_ops);
792}
793
815__rte_experimental
816static inline uint16_t
817rte_bbdev_dequeue_fft_ops(uint16_t dev_id, uint16_t queue_id,
818 struct rte_bbdev_fft_op **ops, uint16_t num_ops)
819{
820 struct rte_bbdev *dev = &rte_bbdev_devices[dev_id];
821 struct rte_bbdev_queue_data *q_data = &dev->data->queues[queue_id];
822 return dev->dequeue_fft_ops(q_data, ops, num_ops);
823}
824
832
846typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
847 enum rte_bbdev_event_type event, void *cb_arg,
848 void *ret_param);
849
867int
869 rte_bbdev_cb_fn cb_fn, void *cb_arg);
870
890int
892 rte_bbdev_cb_fn cb_fn, void *cb_arg);
893
910int
911rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id);
912
926int
927rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id);
928
953int
954rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
955 void *data);
956
967__rte_experimental
968const char*
970
981__rte_experimental
982const char*
984
985#ifdef __cplusplus
986}
987#endif
988
989#endif /* _RTE_BBDEV_H_ */
int rte_bbdev_start(uint16_t dev_id)
rte_bbdev_device_status
Definition: rte_bbdev.h:252
@ RTE_BBDEV_DEV_FATAL_ERR
Definition: rte_bbdev.h:258
@ RTE_BBDEV_DEV_CORRECT_ERR
Definition: rte_bbdev.h:261
@ RTE_BBDEV_DEV_NOT_SUPPORTED
Definition: rte_bbdev.h:254
@ RTE_BBDEV_DEV_RECONFIG_REQ
Definition: rte_bbdev.h:260
@ RTE_BBDEV_DEV_CONFIGURED
Definition: rte_bbdev.h:256
@ RTE_BBDEV_DEV_RESTART_REQ
Definition: rte_bbdev.h:259
@ RTE_BBDEV_DEV_RESET
Definition: rte_bbdev.h:255
@ RTE_BBDEV_DEV_ACTIVE
Definition: rte_bbdev.h:257
@ RTE_BBDEV_DEV_NOSTATUS
Definition: rte_bbdev.h:253
int rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id)
rte_bbdev_enqueue_status
Definition: rte_bbdev.h:241
@ RTE_BBDEV_ENQ_STATUS_INVALID_OP
Definition: rte_bbdev.h:245
@ RTE_BBDEV_ENQ_STATUS_RING_FULL
Definition: rte_bbdev.h:244
@ RTE_BBDEV_ENQ_STATUS_QUEUE_FULL
Definition: rte_bbdev.h:243
@ RTE_BBDEV_ENQ_STATUS_NONE
Definition: rte_bbdev.h:242
static __rte_experimental 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:817
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)
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:46
uint16_t rte_bbdev_find_next(uint16_t dev_id)
__rte_experimental const char * rte_bbdev_device_status_str(enum rte_bbdev_device_status status)
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:786
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:541
rte_bbdev_event_type
Definition: rte_bbdev.h:826
@ RTE_BBDEV_EVENT_ERROR
Definition: rte_bbdev.h:828
@ RTE_BBDEV_EVENT_DEQUEUE
Definition: rte_bbdev.h:829
@ RTE_BBDEV_EVENT_UNKNOWN
Definition: rte_bbdev.h:827
@ RTE_BBDEV_EVENT_MAX
Definition: rte_bbdev.h:830
int rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id, const struct rte_bbdev_queue_conf *conf)
__rte_experimental const char * rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status)
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:846
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:756
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:725
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:693
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:601
bool rte_bbdev_is_valid(uint16_t dev_id)
int rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id)
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:631
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)
static __rte_experimental 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:662
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:571
int rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id)
#define RTE_BBDEV_NAME_MAX_LEN
Definition: rte_bbdev.h:455
rte_bbdev_op_type
Definition: rte_bbdev_op.h:851
#define __rte_cache_aligned
Definition: rte_common.h:440
void * dev_private
unsigned int max_num_queues
Definition: rte_bbdev.h:320
uint8_t max_dl_queue_priority
Definition: rte_bbdev.h:330
struct rte_bbdev_queue_conf default_queue_conf
Definition: rte_bbdev.h:346
unsigned int num_queues[RTE_BBDEV_OP_TYPE_SIZE_MAX]
Definition: rte_bbdev.h:322
uint16_t min_alignment
Definition: rte_bbdev.h:340
unsigned int queue_priority[RTE_BBDEV_OP_TYPE_SIZE_MAX]
Definition: rte_bbdev.h:324
enum rte_cpu_flag_t * cpu_flag_reqs
Definition: rte_bbdev.h:350
uint32_t harq_buffer_size
Definition: rte_bbdev.h:338
const struct rte_bbdev_op_cap * capabilities
Definition: rte_bbdev.h:348
const char * driver_name
Definition: rte_bbdev.h:317
uint32_t queue_size_lim
Definition: rte_bbdev.h:326
enum rte_bbdev_device_status device_status
Definition: rte_bbdev.h:336
uint8_t max_ul_queue_priority
Definition: rte_bbdev.h:332
struct rte_bbdev_driver_info drv
Definition: rte_bbdev.h:367
const char * dev_name
Definition: rte_bbdev.h:363
uint16_t num_queues
Definition: rte_bbdev.h:365
const struct rte_device * device
Definition: rte_bbdev.h:364
enum rte_bbdev_op_type op_type
Definition: rte_bbdev.h:137
struct rte_bbdev_queue_conf conf
Definition: rte_bbdev.h:389
uint64_t enqueue_status_count[RTE_BBDEV_ENQ_STATUS_SIZE_MAX]
Definition: rte_bbdev.h:277
uint64_t acc_offload_cycles
Definition: rte_bbdev.h:284
uint64_t enqueue_err_count
Definition: rte_bbdev.h:269
uint64_t enqueued_count
Definition: rte_bbdev.h:266
uint64_t enqueue_warn_count
Definition: rte_bbdev.h:273
uint64_t dequeue_err_count
Definition: rte_bbdev.h:271
uint64_t dequeued_count
Definition: rte_bbdev.h:267
uint64_t dequeue_warn_count
Definition: rte_bbdev.h:275