xref: /dpdk/lib/bbdev/rte_bbdev_pmd.h (revision 353e3639d458f5cdaf3d938aade25579fa490b1b)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2017 Intel Corporation
3  */
4 
5 #ifndef _RTE_BBDEV_PMD_H_
6 #define _RTE_BBDEV_PMD_H_
7 
8 /**
9  * @file rte_bbdev_pmd.h
10  *
11  * Wireless base band driver-facing APIs.
12  *
13  * This API provides the mechanism for device drivers to register with the
14  * bbdev interface. User applications should not use this API.
15  */
16 
17 #include <stdint.h>
18 #include <rte_log.h>
19 
20 #include "rte_bbdev.h"
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 /** Suggested value for SW based devices */
27 #define RTE_BBDEV_DEFAULT_MAX_NB_QUEUES RTE_MAX_LCORE
28 
29 /** Suggested value for SW based devices */
30 #define RTE_BBDEV_QUEUE_SIZE_LIMIT 16384
31 
32 /**
33  * @internal
34  * Allocates a new slot for a bbdev and returns the pointer to that slot
35  * for the driver to use.
36  *
37  * @param name
38  *   Unique identifier name for each bbdev device
39  *
40  * @return
41  *   - Slot in the rte_bbdev array for a new device;
42  */
43 struct rte_bbdev *
44 rte_bbdev_allocate(const char *name);
45 
46 /**
47  * @internal
48  * Release the specified bbdev.
49  *
50  * @param bbdev
51  *   The *bbdev* pointer is the address of the *rte_bbdev* structure.
52  * @return
53  *   - 0 on success, negative on error
54  */
55 int
56 rte_bbdev_release(struct rte_bbdev *bbdev);
57 
58 /**
59  * Get the device structure for a named device.
60  *
61  * @param name
62  *   Name of the device
63  *
64  * @return
65  *   - The device structure pointer, or
66  *   - NULL otherwise
67  */
68 struct rte_bbdev *
69 rte_bbdev_get_named_dev(const char *name);
70 
71 /**
72  * Definitions of all functions exported by a driver through the generic
73  * structure of type *rte_bbdev_ops* supplied in the *rte_bbdev* structure
74  * associated with a device.
75  */
76 
77 /** @internal Function used to configure device memory. */
78 typedef int (*rte_bbdev_setup_queues_t)(struct rte_bbdev *dev,
79 		uint16_t num_queues, int socket_id);
80 
81 /** @internal Function used to configure interrupts for a device. */
82 typedef int (*rte_bbdev_intr_enable_t)(struct rte_bbdev *dev);
83 
84 /** @internal Function to allocate and configure a device queue. */
85 typedef int (*rte_bbdev_queue_setup_t)(struct rte_bbdev *dev,
86 		uint16_t queue_id, const struct rte_bbdev_queue_conf *conf);
87 
88 /*
89  * @internal
90  * Function to release memory resources allocated for a device queue.
91  */
92 typedef int (*rte_bbdev_queue_release_t)(struct rte_bbdev *dev,
93 		uint16_t queue_id);
94 
95 /** @internal Function to start a configured device. */
96 typedef int (*rte_bbdev_start_t)(struct rte_bbdev *dev);
97 
98 /** @internal Function to stop a device. */
99 typedef void (*rte_bbdev_stop_t)(struct rte_bbdev *dev);
100 
101 /** @internal Function to close a device. */
102 typedef int (*rte_bbdev_close_t)(struct rte_bbdev *dev);
103 
104 /** @internal Function to start a device queue. */
105 typedef int (*rte_bbdev_queue_start_t)(struct rte_bbdev *dev,
106 		uint16_t queue_id);
107 
108 /** @internal Function to stop a device queue. */
109 typedef int (*rte_bbdev_queue_stop_t)(struct rte_bbdev *dev, uint16_t queue_id);
110 
111 /** @internal Function to read stats from a device. */
112 typedef void (*rte_bbdev_stats_get_t)(struct rte_bbdev *dev,
113 		struct rte_bbdev_stats *stats);
114 
115 /** @internal Function to reset stats on a device. */
116 typedef void (*rte_bbdev_stats_reset_t)(struct rte_bbdev *dev);
117 
118 /** @internal Function to retrieve specific information of a device. */
119 typedef void (*rte_bbdev_info_get_t)(struct rte_bbdev *dev,
120 		struct rte_bbdev_driver_info *dev_info);
121 
122 /*
123  * @internal
124  * Function to enable interrupt for next op on a queue of a device.
125  */
126 typedef int (*rte_bbdev_queue_intr_enable_t)(struct rte_bbdev *dev,
127 				    uint16_t queue_id);
128 
129 /*
130  * @internal
131  * Function to disable interrupt for next op on a queue of a device.
132  */
133 typedef int (*rte_bbdev_queue_intr_disable_t)(struct rte_bbdev *dev,
134 				    uint16_t queue_id);
135 
136 /*
137  * @internal
138  * Function to dump previous operations on a queue of a device.
139  */
140 typedef int (*rte_bbdev_queue_ops_dump_t)(struct rte_bbdev *dev,
141 		uint16_t queue_id, FILE *file);
142 
143 /**
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
147  */
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;
159 
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;
166 
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;
175 
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;
180 	/** Dump operations on the queue. Optional */
181 	rte_bbdev_queue_ops_dump_t queue_ops_dump;
182 };
183 
184 /**
185  * Executes all the user application registered callbacks for the specific
186  * device and event type.
187  *
188  * @param dev
189  *   Pointer to the device structure.
190  * @param event
191  *   Event type.
192  * @param ret_param
193  *   To pass data back to user application.
194  */
195 void
196 rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
197 	enum rte_bbdev_event_type event, void *ret_param);
198 
199 #ifdef __cplusplus
200 }
201 #endif
202 
203 #endif /* _RTE_BBDEV_PMD_H_ */
204