1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Intel Corporation
5 #ifndef _RTE_BBDEV_PMD_H_
6 #define _RTE_BBDEV_PMD_H_
9 * @file rte_bbdev_pmd.h
11 * Wireless base band driver-facing APIs.
14 * @b EXPERIMENTAL: this API may change without prior notice
16 * This API provides the mechanism for device drivers to register with the
17 * bbdev interface. User applications should not use this API.
27 #include "rte_bbdev.h"
29 /** Suggested value for SW based devices */
30 #define RTE_BBDEV_DEFAULT_MAX_NB_QUEUES RTE_MAX_LCORE
32 /** Suggested value for SW based devices */
33 #define RTE_BBDEV_QUEUE_SIZE_LIMIT 16384
37 * Allocates a new slot for a bbdev and returns the pointer to that slot
38 * for the driver to use.
41 * Unique identifier name for each bbdev device
44 * - Slot in the rte_bbdev array for a new device;
48 rte_bbdev_allocate(const char *name);
52 * Release the specified bbdev.
55 * The *bbdev* pointer is the address of the *rte_bbdev* structure.
57 * - 0 on success, negative on error
61 rte_bbdev_release(struct rte_bbdev *bbdev);
64 * Get the device structure for a named device.
70 * - The device structure pointer, or
76 rte_bbdev_get_named_dev(const char *name);
79 * Definitions of all functions exported by a driver through the the generic
80 * structure of type *rte_bbdev_ops* supplied in the *rte_bbdev* structure
81 * associated with a device.
84 /** @internal Function used to configure device memory. */
85 typedef int (*rte_bbdev_setup_queues_t)(struct rte_bbdev *dev,
86 uint16_t num_queues, int socket_id);
88 /** @internal Function used to configure interrupts for a device. */
89 typedef int (*rte_bbdev_intr_enable_t)(struct rte_bbdev *dev);
91 /** @internal Function to allocate and configure a device queue. */
92 typedef int (*rte_bbdev_queue_setup_t)(struct rte_bbdev *dev,
93 uint16_t queue_id, const struct rte_bbdev_queue_conf *conf);
97 * Function to release memory resources allocated for a device queue.
99 typedef int (*rte_bbdev_queue_release_t)(struct rte_bbdev *dev,
102 /** @internal Function to start a configured device. */
103 typedef int (*rte_bbdev_start_t)(struct rte_bbdev *dev);
105 /** @internal Function to stop a device. */
106 typedef void (*rte_bbdev_stop_t)(struct rte_bbdev *dev);
108 /** @internal Function to close a device. */
109 typedef int (*rte_bbdev_close_t)(struct rte_bbdev *dev);
111 /** @internal Function to start a device queue. */
112 typedef int (*rte_bbdev_queue_start_t)(struct rte_bbdev *dev,
115 /** @internal Function to stop a device queue. */
116 typedef int (*rte_bbdev_queue_stop_t)(struct rte_bbdev *dev, uint16_t queue_id);
118 /** @internal Function to read stats from a device. */
119 typedef void (*rte_bbdev_stats_get_t)(struct rte_bbdev *dev,
120 struct rte_bbdev_stats *stats);
122 /** @internal Function to reset stats on a device. */
123 typedef void (*rte_bbdev_stats_reset_t)(struct rte_bbdev *dev);
125 /** @internal Function to retrieve specific information of a device. */
126 typedef void (*rte_bbdev_info_get_t)(struct rte_bbdev *dev,
127 struct rte_bbdev_driver_info *dev_info);
131 * Function to enable interrupt for next op on a queue of a device.
133 typedef int (*rte_bbdev_queue_intr_enable_t)(struct rte_bbdev *dev,
138 * Function to disable interrupt for next op on a queue of a device.
140 typedef int (*rte_bbdev_queue_intr_disable_t)(struct rte_bbdev *dev,
144 * Operations implemented by drivers. Fields marked as "Required" must be
145 * provided by a driver for a device to have basic functionality. "Optional"
146 * fields are for non-vital operations
148 struct rte_bbdev_ops {
149 /**< Allocate and configure device memory. Optional. */
150 rte_bbdev_setup_queues_t setup_queues;
151 /**< Configure interrupts. Optional. */
152 rte_bbdev_intr_enable_t intr_enable;
153 /**< Start device. Optional. */
154 rte_bbdev_start_t start;
155 /**< Stop device. Optional. */
156 rte_bbdev_stop_t stop;
157 /**< Close device. Optional. */
158 rte_bbdev_close_t close;
160 /**< Get device info. Required. */
161 rte_bbdev_info_get_t info_get;
162 /** Get device statistics. Optional. */
163 rte_bbdev_stats_get_t stats_get;
164 /** Reset device statistics. Optional. */
165 rte_bbdev_stats_reset_t stats_reset;
167 /** Set up a device queue. Required. */
168 rte_bbdev_queue_setup_t queue_setup;
169 /** Release a queue. Required. */
170 rte_bbdev_queue_release_t queue_release;
171 /** Start a queue. Optional. */
172 rte_bbdev_queue_start_t queue_start;
173 /**< Stop a queue pair. Optional. */
174 rte_bbdev_queue_stop_t queue_stop;
176 /** Enable queue interrupt. Optional */
177 rte_bbdev_queue_intr_enable_t queue_intr_enable;
178 /** Disable queue interrupt. Optional */
179 rte_bbdev_queue_intr_disable_t queue_intr_disable;
183 * Executes all the user application registered callbacks for the specific
184 * device and event type.
187 * Pointer to the device structure.
191 * To pass data back to user application.
195 rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
196 enum rte_bbdev_event_type event, void *ret_param);
202 #endif /* _RTE_BBDEV_PMD_H_ */