xref: /dpdk/lib/mldev/rte_mldev_core.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
1ea80eafbSSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause
2ea80eafbSSrikanth Yalavarthi  * Copyright (c) 2022 Marvell.
3ea80eafbSSrikanth Yalavarthi  */
4ea80eafbSSrikanth Yalavarthi 
5ea80eafbSSrikanth Yalavarthi #ifndef RTE_MLDEV_INTERNAL_H
6ea80eafbSSrikanth Yalavarthi #define RTE_MLDEV_INTERNAL_H
7ea80eafbSSrikanth Yalavarthi 
8ea80eafbSSrikanth Yalavarthi /**
9ea80eafbSSrikanth Yalavarthi  * @file
10ea80eafbSSrikanth Yalavarthi  *
11ea80eafbSSrikanth Yalavarthi  * MLDEV internal header
12ea80eafbSSrikanth Yalavarthi  *
13ea80eafbSSrikanth Yalavarthi  * This file contains MLDEV private data structures and macros.
14ea80eafbSSrikanth Yalavarthi  *
15ea80eafbSSrikanth Yalavarthi  * @note
16ea80eafbSSrikanth Yalavarthi  * These APIs are for MLDEV PMDs and library only.
17ea80eafbSSrikanth Yalavarthi  */
18ea80eafbSSrikanth Yalavarthi 
19ea80eafbSSrikanth Yalavarthi #include <stdint.h>
20ea80eafbSSrikanth Yalavarthi 
21ea80eafbSSrikanth Yalavarthi #include <dev_driver.h>
22ea80eafbSSrikanth Yalavarthi #include <rte_common.h>
23ea80eafbSSrikanth Yalavarthi #include <rte_log.h>
24ea80eafbSSrikanth Yalavarthi #include <rte_mldev.h>
25ea80eafbSSrikanth Yalavarthi 
26ea80eafbSSrikanth Yalavarthi /* Device state */
27ea80eafbSSrikanth Yalavarthi #define ML_DEV_DETACHED (0)
28ea80eafbSSrikanth Yalavarthi #define ML_DEV_ATTACHED (1)
29ea80eafbSSrikanth Yalavarthi 
3036d0b09eSSrikanth Yalavarthi struct rte_ml_dev;
3136d0b09eSSrikanth Yalavarthi 
3236d0b09eSSrikanth Yalavarthi /**
33c775df1cSSrikanth Yalavarthi  * @internal
34c775df1cSSrikanth Yalavarthi  *
35c775df1cSSrikanth Yalavarthi  * Enqueue a burst of inference requests to a queue on ML device.
36c775df1cSSrikanth Yalavarthi  *
37c775df1cSSrikanth Yalavarthi  * @param dev
38c775df1cSSrikanth Yalavarthi  *	ML device pointer.
39c775df1cSSrikanth Yalavarthi  * @param qp_id
40c775df1cSSrikanth Yalavarthi  *	Queue-pair ID.
41c775df1cSSrikanth Yalavarthi  * @param ops
42c775df1cSSrikanth Yalavarthi  *	Array of ML ops to be enqueued.
43c775df1cSSrikanth Yalavarthi  * @param nb_ops
44c775df1cSSrikanth Yalavarthi  *	Number of ops to enqueue.
45c775df1cSSrikanth Yalavarthi  *
46c775df1cSSrikanth Yalavarthi  * @return
47c775df1cSSrikanth Yalavarthi  *	- Number of ops enqueued.
48c775df1cSSrikanth Yalavarthi  */
49c775df1cSSrikanth Yalavarthi typedef uint16_t (*mldev_enqueue_t)(struct rte_ml_dev *dev, uint16_t qp_id, struct rte_ml_op **ops,
50c775df1cSSrikanth Yalavarthi 				    uint16_t nb_ops);
51c775df1cSSrikanth Yalavarthi 
52c775df1cSSrikanth Yalavarthi /**
53c775df1cSSrikanth Yalavarthi  * @internal
54c775df1cSSrikanth Yalavarthi  *
55c775df1cSSrikanth Yalavarthi  * Dequeue a burst of inference requests from a queue on ML device.
56c775df1cSSrikanth Yalavarthi  *
57c775df1cSSrikanth Yalavarthi  * @param dev
58c775df1cSSrikanth Yalavarthi  *	ML device pointer.
59c775df1cSSrikanth Yalavarthi  * @param qp_id
60c775df1cSSrikanth Yalavarthi  *	Queue-pair ID.
61c775df1cSSrikanth Yalavarthi  * @param ops
62c775df1cSSrikanth Yalavarthi  *	Array of ML ops to dequeued.
63c775df1cSSrikanth Yalavarthi  * @param nb_ops
64c775df1cSSrikanth Yalavarthi  *	Number of ops to dequeue.
65c775df1cSSrikanth Yalavarthi  *
66c775df1cSSrikanth Yalavarthi  * @return
67c775df1cSSrikanth Yalavarthi  *	- Number of ops dequeued.
68c775df1cSSrikanth Yalavarthi  */
69c775df1cSSrikanth Yalavarthi typedef uint16_t (*mldev_dequeue_t)(struct rte_ml_dev *dev, uint16_t qp_id, struct rte_ml_op **ops,
70c775df1cSSrikanth Yalavarthi 				    uint16_t nb_ops);
71c775df1cSSrikanth Yalavarthi 
72c775df1cSSrikanth Yalavarthi /**
73698d9061SSrikanth Yalavarthi  * @internal
74698d9061SSrikanth Yalavarthi  *
75698d9061SSrikanth Yalavarthi  * Get error information for an Op.
76698d9061SSrikanth Yalavarthi  *
77698d9061SSrikanth Yalavarthi  * @param dev
78698d9061SSrikanth Yalavarthi  *	ML device pointer.
79698d9061SSrikanth Yalavarthi  * @param op
80698d9061SSrikanth Yalavarthi  *	ML Op handle.
81698d9061SSrikanth Yalavarthi  * @param error
82698d9061SSrikanth Yalavarthi  *	Pointer to error structure.
83698d9061SSrikanth Yalavarthi  *
84698d9061SSrikanth Yalavarthi  * @return
85698d9061SSrikanth Yalavarthi  *	- 0 on success.
86698d9061SSrikanth Yalavarthi  *	- <0, error on failure.
87698d9061SSrikanth Yalavarthi  */
88698d9061SSrikanth Yalavarthi typedef int (*mldev_op_error_get_t)(struct rte_ml_dev *dev, struct rte_ml_op *op,
89698d9061SSrikanth Yalavarthi 				    struct rte_ml_op_error *error);
90698d9061SSrikanth Yalavarthi 
91698d9061SSrikanth Yalavarthi /**
9236d0b09eSSrikanth Yalavarthi  * Definitions of all functions exported by a driver through the generic structure of type
9336d0b09eSSrikanth Yalavarthi  * *ml_dev_ops* supplied in the *rte_ml_dev* structure associated with a device.
9436d0b09eSSrikanth Yalavarthi  */
9536d0b09eSSrikanth Yalavarthi 
9636d0b09eSSrikanth Yalavarthi /**
9736d0b09eSSrikanth Yalavarthi  * @internal
9836d0b09eSSrikanth Yalavarthi  *
9936d0b09eSSrikanth Yalavarthi  * Function used to get device information.
10036d0b09eSSrikanth Yalavarthi  *
10136d0b09eSSrikanth Yalavarthi  * @param dev
10236d0b09eSSrikanth Yalavarthi  *	ML device pointer.
10336d0b09eSSrikanth Yalavarthi  * @param dev_info
10436d0b09eSSrikanth Yalavarthi  *	Pointer to info structure.
10536d0b09eSSrikanth Yalavarthi  *
10636d0b09eSSrikanth Yalavarthi  * @return
10736d0b09eSSrikanth Yalavarthi  *	- 0 on success.
10836d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure.
10936d0b09eSSrikanth Yalavarthi  */
11036d0b09eSSrikanth Yalavarthi typedef int (*mldev_info_get_t)(struct rte_ml_dev *dev, struct rte_ml_dev_info *dev_info);
11136d0b09eSSrikanth Yalavarthi 
11236d0b09eSSrikanth Yalavarthi /**
11336d0b09eSSrikanth Yalavarthi  * @internal
11436d0b09eSSrikanth Yalavarthi  *
11536d0b09eSSrikanth Yalavarthi  * Function used to configure device.
11636d0b09eSSrikanth Yalavarthi  *
11736d0b09eSSrikanth Yalavarthi  * @param dev
11836d0b09eSSrikanth Yalavarthi  *	ML device pointer.
11936d0b09eSSrikanth Yalavarthi  * @param config
12036d0b09eSSrikanth Yalavarthi  *	ML device configurations.
12136d0b09eSSrikanth Yalavarthi  *
12236d0b09eSSrikanth Yalavarthi  * @return
12336d0b09eSSrikanth Yalavarthi  *	- 0 on success
12436d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure.
12536d0b09eSSrikanth Yalavarthi  */
12636d0b09eSSrikanth Yalavarthi typedef int (*mldev_configure_t)(struct rte_ml_dev *dev, const struct rte_ml_dev_config *config);
12736d0b09eSSrikanth Yalavarthi 
12836d0b09eSSrikanth Yalavarthi /**
12936d0b09eSSrikanth Yalavarthi  * @internal
13036d0b09eSSrikanth Yalavarthi  *
13136d0b09eSSrikanth Yalavarthi  * Function used to close a configured device.
13236d0b09eSSrikanth Yalavarthi  *
13336d0b09eSSrikanth Yalavarthi  * @param dev
13436d0b09eSSrikanth Yalavarthi  *	ML device pointer.
13536d0b09eSSrikanth Yalavarthi  *
13636d0b09eSSrikanth Yalavarthi  * @return
13736d0b09eSSrikanth Yalavarthi  *	- 0 on success.
13836d0b09eSSrikanth Yalavarthi  *	- -EAGAIN if can't close as device is busy.
13936d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure, other than busy.
14036d0b09eSSrikanth Yalavarthi  */
14136d0b09eSSrikanth Yalavarthi typedef int (*mldev_close_t)(struct rte_ml_dev *dev);
14236d0b09eSSrikanth Yalavarthi 
14336d0b09eSSrikanth Yalavarthi /**
14436d0b09eSSrikanth Yalavarthi  * @internal
14536d0b09eSSrikanth Yalavarthi  *
14636d0b09eSSrikanth Yalavarthi  * Function used to start a configured device.
14736d0b09eSSrikanth Yalavarthi  *
14836d0b09eSSrikanth Yalavarthi  * @param dev
14936d0b09eSSrikanth Yalavarthi  *	ML device pointer.
15036d0b09eSSrikanth Yalavarthi  *
15136d0b09eSSrikanth Yalavarthi  * @return
15236d0b09eSSrikanth Yalavarthi  *	- 0 on success.
15336d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure.
15436d0b09eSSrikanth Yalavarthi  */
15536d0b09eSSrikanth Yalavarthi typedef int (*mldev_start_t)(struct rte_ml_dev *dev);
15636d0b09eSSrikanth Yalavarthi 
15736d0b09eSSrikanth Yalavarthi /**
15836d0b09eSSrikanth Yalavarthi  * @internal
15936d0b09eSSrikanth Yalavarthi  *
16036d0b09eSSrikanth Yalavarthi  * Function used to stop a configured device.
16136d0b09eSSrikanth Yalavarthi  *
16236d0b09eSSrikanth Yalavarthi  * @param dev
16336d0b09eSSrikanth Yalavarthi  *	ML device pointer.
16436d0b09eSSrikanth Yalavarthi  *
16536d0b09eSSrikanth Yalavarthi  * @return
16636d0b09eSSrikanth Yalavarthi  *	- 0 on success.
16736d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure.
16836d0b09eSSrikanth Yalavarthi  */
16936d0b09eSSrikanth Yalavarthi typedef int (*mldev_stop_t)(struct rte_ml_dev *dev);
17036d0b09eSSrikanth Yalavarthi 
17136d0b09eSSrikanth Yalavarthi /**
17236d0b09eSSrikanth Yalavarthi  * @internal
17336d0b09eSSrikanth Yalavarthi  *
174b5f0df64SSrikanth Yalavarthi  * Setup a queue pair for a device.
175b5f0df64SSrikanth Yalavarthi  *
176b5f0df64SSrikanth Yalavarthi  * @param dev
177b5f0df64SSrikanth Yalavarthi  *	ML device pointer.
178b5f0df64SSrikanth Yalavarthi  * @param queue_pair_id
179b5f0df64SSrikanth Yalavarthi  *	Queue pair index.
180b5f0df64SSrikanth Yalavarthi  * @param queue_pair_conf
181b5f0df64SSrikanth Yalavarthi  *	Queue pair configuration structure.
182b5f0df64SSrikanth Yalavarthi  * @param socket_id
183b5f0df64SSrikanth Yalavarthi  *	Socket index.
184b5f0df64SSrikanth Yalavarthi  *
185b5f0df64SSrikanth Yalavarthi  * @return
186b5f0df64SSrikanth Yalavarthi  *	- 0 on success.
187b5f0df64SSrikanth Yalavarthi  *	- < 0, error on failure.
188b5f0df64SSrikanth Yalavarthi  */
189b5f0df64SSrikanth Yalavarthi typedef int (*mldev_queue_pair_setup_t)(struct rte_ml_dev *dev, uint16_t queue_pair_id,
190b5f0df64SSrikanth Yalavarthi 					const struct rte_ml_dev_qp_conf *queue_pair_conf,
191b5f0df64SSrikanth Yalavarthi 					int socket_id);
192b5f0df64SSrikanth Yalavarthi 
193b5f0df64SSrikanth Yalavarthi /**
194b5f0df64SSrikanth Yalavarthi  * @internal
195b5f0df64SSrikanth Yalavarthi  *
196b5f0df64SSrikanth Yalavarthi  * Release memory resources allocated by given queue pair.
197b5f0df64SSrikanth Yalavarthi  *
198b5f0df64SSrikanth Yalavarthi  * @param dev
199b5f0df64SSrikanth Yalavarthi  *	ML device pointer.
200b5f0df64SSrikanth Yalavarthi  * @param queue_pair_id
201b5f0df64SSrikanth Yalavarthi  *	Queue pair index.
202b5f0df64SSrikanth Yalavarthi  *
203b5f0df64SSrikanth Yalavarthi  * @return
204b5f0df64SSrikanth Yalavarthi  *	- 0 on success.
205b5f0df64SSrikanth Yalavarthi  *	- -EAGAIN, if can't close as device is busy.
206b5f0df64SSrikanth Yalavarthi  */
207b5f0df64SSrikanth Yalavarthi typedef int (*mldev_queue_pair_release_t)(struct rte_ml_dev *dev, uint16_t queue_pair_id);
208b5f0df64SSrikanth Yalavarthi 
209b5f0df64SSrikanth Yalavarthi /**
210b5f0df64SSrikanth Yalavarthi  * @internal
211b5f0df64SSrikanth Yalavarthi  *
212b3caa0f8SSrikanth Yalavarthi  * Function used to get device statistics.
213b3caa0f8SSrikanth Yalavarthi  *
214b3caa0f8SSrikanth Yalavarthi  * @param dev
215b3caa0f8SSrikanth Yalavarthi  *	ML device pointer.
216b3caa0f8SSrikanth Yalavarthi  * @param stats
217b3caa0f8SSrikanth Yalavarthi  *	Pointer to ML device stats structure to update.
218b3caa0f8SSrikanth Yalavarthi  *
219b3caa0f8SSrikanth Yalavarthi  * @return
220b3caa0f8SSrikanth Yalavarthi  *	- 0 on success.
221b3caa0f8SSrikanth Yalavarthi  *	- < 0, error on failure.
222b3caa0f8SSrikanth Yalavarthi  */
223b3caa0f8SSrikanth Yalavarthi typedef int (*mldev_stats_get_t)(struct rte_ml_dev *dev, struct rte_ml_dev_stats *stats);
224b3caa0f8SSrikanth Yalavarthi 
225b3caa0f8SSrikanth Yalavarthi /**
226b3caa0f8SSrikanth Yalavarthi  * @internal
227b3caa0f8SSrikanth Yalavarthi  *
228b3caa0f8SSrikanth Yalavarthi  * Function used to reset device statistics.
229b3caa0f8SSrikanth Yalavarthi  *
230b3caa0f8SSrikanth Yalavarthi  * @param dev
231b3caa0f8SSrikanth Yalavarthi  *	ML device pointer.
232b3caa0f8SSrikanth Yalavarthi  */
233b3caa0f8SSrikanth Yalavarthi typedef void (*mldev_stats_reset_t)(struct rte_ml_dev *dev);
234b3caa0f8SSrikanth Yalavarthi 
235b3caa0f8SSrikanth Yalavarthi /**
236b3caa0f8SSrikanth Yalavarthi  * @internal
237b3caa0f8SSrikanth Yalavarthi  *
238f06968e9SSrikanth Yalavarthi  * Function used to get names of extended stats.
239f06968e9SSrikanth Yalavarthi  *
240f06968e9SSrikanth Yalavarthi  * @param dev
241f06968e9SSrikanth Yalavarthi  *	ML device pointer.
242f06968e9SSrikanth Yalavarthi  * @param mode
243f06968e9SSrikanth Yalavarthi  *	Mode of stats to retrieve.
244f06968e9SSrikanth Yalavarthi  * @param model_id
245f06968e9SSrikanth Yalavarthi  *	Used to specify model id in model mode. Ignored in device mode.
246f06968e9SSrikanth Yalavarthi  * @param xstats_map
247f06968e9SSrikanth Yalavarthi  *	Array to insert id and names into.
248f06968e9SSrikanth Yalavarthi  * @param size
249f06968e9SSrikanth Yalavarthi  *	Size of xstats_map array.
250f06968e9SSrikanth Yalavarthi  *
251f06968e9SSrikanth Yalavarthi  * @return
252f06968e9SSrikanth Yalavarthi  *	- >= 0 and <= size on success.
253f06968e9SSrikanth Yalavarthi  *	- > size, error. Returns the size of xstats_map array required.
254f06968e9SSrikanth Yalavarthi  *	- < 0, error code on failure.
255f06968e9SSrikanth Yalavarthi  */
256f06968e9SSrikanth Yalavarthi typedef int (*mldev_xstats_names_get_t)(struct rte_ml_dev *dev, enum rte_ml_dev_xstats_mode mode,
257f06968e9SSrikanth Yalavarthi 					int32_t model_id, struct rte_ml_dev_xstats_map *xstats_map,
258f06968e9SSrikanth Yalavarthi 					uint32_t size);
259f06968e9SSrikanth Yalavarthi 
260f06968e9SSrikanth Yalavarthi /**
261f06968e9SSrikanth Yalavarthi  * @internal
262f06968e9SSrikanth Yalavarthi  *
263f06968e9SSrikanth Yalavarthi  * Function used to get a single extended stat by name.
264f06968e9SSrikanth Yalavarthi  *
265f06968e9SSrikanth Yalavarthi  * @param dev
266f06968e9SSrikanth Yalavarthi  *	ML device pointer.
267f06968e9SSrikanth Yalavarthi  * @param name
268f06968e9SSrikanth Yalavarthi  *	Name of the stat to retrieve.
269f06968e9SSrikanth Yalavarthi  * @param stat_id
270f06968e9SSrikanth Yalavarthi  *	ID of the stat to be returned.
271f06968e9SSrikanth Yalavarthi  * @param value
272f06968e9SSrikanth Yalavarthi  *	Value of the stat to be returned.
273f06968e9SSrikanth Yalavarthi  *
274f06968e9SSrikanth Yalavarthi  * @return
275f06968e9SSrikanth Yalavarthi  *	- = 0 success.
276f06968e9SSrikanth Yalavarthi  *	- < 0, error code on failure.
277f06968e9SSrikanth Yalavarthi  */
278f06968e9SSrikanth Yalavarthi typedef int (*mldev_xstats_by_name_get_t)(struct rte_ml_dev *dev, const char *name,
279f06968e9SSrikanth Yalavarthi 					  uint16_t *stat_id, uint64_t *value);
280f06968e9SSrikanth Yalavarthi 
281f06968e9SSrikanth Yalavarthi /**
282f06968e9SSrikanth Yalavarthi  * @internal
283f06968e9SSrikanth Yalavarthi  *
284f06968e9SSrikanth Yalavarthi  * Function used to retrieve extended stats of a device.
285f06968e9SSrikanth Yalavarthi  *
286f06968e9SSrikanth Yalavarthi  * @param dev
287f06968e9SSrikanth Yalavarthi  *	ML device pointer.
288f06968e9SSrikanth Yalavarthi  * @param mode
289f06968e9SSrikanth Yalavarthi  *	Mode of stats to retrieve.
290f06968e9SSrikanth Yalavarthi  * @param model_id
291f06968e9SSrikanth Yalavarthi  *	Used to specify model id in model mode. Ignored in device mode.
292f06968e9SSrikanth Yalavarthi  * @param stat_ids
293f06968e9SSrikanth Yalavarthi  *	Array of ID numbers of the stats to be retrieved.
294f06968e9SSrikanth Yalavarthi  * @param values
295f06968e9SSrikanth Yalavarthi  *	Values of the stats requested by the ID.
296f06968e9SSrikanth Yalavarthi  * @param nb_ids
297f06968e9SSrikanth Yalavarthi  *	Number of stats requested.
298f06968e9SSrikanth Yalavarthi  *
299f06968e9SSrikanth Yalavarthi  * @return
300f06968e9SSrikanth Yalavarthi  *	- >= 0, number of entries filled into the values array.
301f06968e9SSrikanth Yalavarthi  *	- < 0, error code on failure.
302f06968e9SSrikanth Yalavarthi  */
303f06968e9SSrikanth Yalavarthi typedef int (*mldev_xstats_get_t)(struct rte_ml_dev *dev, enum rte_ml_dev_xstats_mode mode,
304f06968e9SSrikanth Yalavarthi 				  int32_t model_id, const uint16_t stat_ids[], uint64_t values[],
305f06968e9SSrikanth Yalavarthi 				  uint16_t nb_ids);
306f06968e9SSrikanth Yalavarthi 
307f06968e9SSrikanth Yalavarthi /**
308f06968e9SSrikanth Yalavarthi  * @internal
309f06968e9SSrikanth Yalavarthi  *
310f06968e9SSrikanth Yalavarthi  * Function used to reset extended stats.
311f06968e9SSrikanth Yalavarthi  *
312f06968e9SSrikanth Yalavarthi  * @param dev
313f06968e9SSrikanth Yalavarthi  *	ML device pointer.
314f06968e9SSrikanth Yalavarthi  * @param mode
315f06968e9SSrikanth Yalavarthi  *	Mode of stats to retrieve.
316f06968e9SSrikanth Yalavarthi  * @param model_id
317f06968e9SSrikanth Yalavarthi  *	Used to specify model id in model mode. Ignored in device mode.
318f06968e9SSrikanth Yalavarthi  * @param stat_ids
319f06968e9SSrikanth Yalavarthi  *	Array of stats IDs to be reset.
320f06968e9SSrikanth Yalavarthi  * @param nb_ids
321f06968e9SSrikanth Yalavarthi  *	Number of IDs in the stat_ids array.
322f06968e9SSrikanth Yalavarthi  *
323f06968e9SSrikanth Yalavarthi  * @return
324f06968e9SSrikanth Yalavarthi  *	- 0 on success.
325f06968e9SSrikanth Yalavarthi  *	- < 0, error code on failure.
326f06968e9SSrikanth Yalavarthi  */
327f06968e9SSrikanth Yalavarthi typedef int (*mldev_xstats_reset_t)(struct rte_ml_dev *dev, enum rte_ml_dev_xstats_mode mode,
328f06968e9SSrikanth Yalavarthi 				    int32_t model_id, const uint16_t stat_ids[], uint16_t nb_ids);
329f06968e9SSrikanth Yalavarthi 
330f06968e9SSrikanth Yalavarthi /**
331f06968e9SSrikanth Yalavarthi  * @internal
332f06968e9SSrikanth Yalavarthi  *
333c32be5aaSSrikanth Yalavarthi  * Function used to dump ML device debug info.
334c32be5aaSSrikanth Yalavarthi  *
335c32be5aaSSrikanth Yalavarthi  * @param dev
336c32be5aaSSrikanth Yalavarthi  *	ML device pointer.
337c32be5aaSSrikanth Yalavarthi  * @param fd
338c32be5aaSSrikanth Yalavarthi  *	File descriptor to dump the debug info.
339c32be5aaSSrikanth Yalavarthi  *
340c32be5aaSSrikanth Yalavarthi  * @return
341c32be5aaSSrikanth Yalavarthi  *	- 0 on success.
342c32be5aaSSrikanth Yalavarthi  *	- < 0, error code on failure.
343c32be5aaSSrikanth Yalavarthi  */
344c32be5aaSSrikanth Yalavarthi 
345c32be5aaSSrikanth Yalavarthi typedef int (*mldev_dump_t)(struct rte_ml_dev *dev, FILE *fd);
346c32be5aaSSrikanth Yalavarthi 
347c32be5aaSSrikanth Yalavarthi /**
348c32be5aaSSrikanth Yalavarthi  * @internal
349c32be5aaSSrikanth Yalavarthi  *
350c32be5aaSSrikanth Yalavarthi  * Function used for selftest of ML device.
351c32be5aaSSrikanth Yalavarthi  *
352c32be5aaSSrikanth Yalavarthi  * @param dev
353c32be5aaSSrikanth Yalavarthi  *	ML device pointer.
354c32be5aaSSrikanth Yalavarthi  *
355c32be5aaSSrikanth Yalavarthi  * @return
356c32be5aaSSrikanth Yalavarthi  *	- 0 on success.
357c32be5aaSSrikanth Yalavarthi  *	- < 0, error on failure.
358c32be5aaSSrikanth Yalavarthi  */
359c32be5aaSSrikanth Yalavarthi typedef int (*mldev_selftest_t)(struct rte_ml_dev *dev);
360c32be5aaSSrikanth Yalavarthi 
361c32be5aaSSrikanth Yalavarthi /**
362c32be5aaSSrikanth Yalavarthi  * @internal
363c32be5aaSSrikanth Yalavarthi  *
3644a662f54SSrikanth Yalavarthi  * Function used to load an ML model.
3654a662f54SSrikanth Yalavarthi  *
3664a662f54SSrikanth Yalavarthi  * @param dev
3674a662f54SSrikanth Yalavarthi  *	ML device pointer.
3684a662f54SSrikanth Yalavarthi  * @param params
3694a662f54SSrikanth Yalavarthi  *	Model load params.
3704a662f54SSrikanth Yalavarthi  * @param model_id
3714a662f54SSrikanth Yalavarthi  *	Model ID returned by the library.
3724a662f54SSrikanth Yalavarthi  *
3734a662f54SSrikanth Yalavarthi  * @return
3744a662f54SSrikanth Yalavarthi  *	- 0 on success.
3754a662f54SSrikanth Yalavarthi  *	- < 0, error on failure.
3764a662f54SSrikanth Yalavarthi  */
3774a662f54SSrikanth Yalavarthi typedef int (*mldev_model_load_t)(struct rte_ml_dev *dev, struct rte_ml_model_params *params,
3784a662f54SSrikanth Yalavarthi 				  uint16_t *model_id);
3794a662f54SSrikanth Yalavarthi 
3804a662f54SSrikanth Yalavarthi /**
3814a662f54SSrikanth Yalavarthi  * @internal
3824a662f54SSrikanth Yalavarthi  *
3834a662f54SSrikanth Yalavarthi  * Function used to unload an ML model.
3844a662f54SSrikanth Yalavarthi  *
3854a662f54SSrikanth Yalavarthi  * @param dev
3864a662f54SSrikanth Yalavarthi  *	ML device pointer.
3874a662f54SSrikanth Yalavarthi  * @param model_id
3884a662f54SSrikanth Yalavarthi  *	Model ID to use.
3894a662f54SSrikanth Yalavarthi  *
3904a662f54SSrikanth Yalavarthi  * @return
3914a662f54SSrikanth Yalavarthi  *	- 0 on success.
3924a662f54SSrikanth Yalavarthi  *	- < 0, error on failure.
3934a662f54SSrikanth Yalavarthi  */
3944a662f54SSrikanth Yalavarthi typedef int (*mldev_model_unload_t)(struct rte_ml_dev *dev, uint16_t model_id);
3954a662f54SSrikanth Yalavarthi 
3964a662f54SSrikanth Yalavarthi /**
3974a662f54SSrikanth Yalavarthi  * @internal
3984a662f54SSrikanth Yalavarthi  *
3994a662f54SSrikanth Yalavarthi  * Function used to start an ML model.
4004a662f54SSrikanth Yalavarthi  *
4014a662f54SSrikanth Yalavarthi  * @param dev
4024a662f54SSrikanth Yalavarthi  *	ML device pointer.
4034a662f54SSrikanth Yalavarthi  * @param model_id
4044a662f54SSrikanth Yalavarthi  *	Model ID to use.
4054a662f54SSrikanth Yalavarthi  *
4064a662f54SSrikanth Yalavarthi  * @return
4074a662f54SSrikanth Yalavarthi  *	- 0 on success.
4084a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
4094a662f54SSrikanth Yalavarthi  */
4104a662f54SSrikanth Yalavarthi typedef int (*mldev_model_start_t)(struct rte_ml_dev *dev, uint16_t model_id);
4114a662f54SSrikanth Yalavarthi 
4124a662f54SSrikanth Yalavarthi /**
4134a662f54SSrikanth Yalavarthi  * @internal
4144a662f54SSrikanth Yalavarthi  *
4154a662f54SSrikanth Yalavarthi  * Function used to stop an ML model.
4164a662f54SSrikanth Yalavarthi  *
4174a662f54SSrikanth Yalavarthi  * @param dev
4184a662f54SSrikanth Yalavarthi  *	ML device pointer.
4194a662f54SSrikanth Yalavarthi  * @param model_id
4204a662f54SSrikanth Yalavarthi  *	Model ID to use.
4214a662f54SSrikanth Yalavarthi  *
4224a662f54SSrikanth Yalavarthi  * @return
4234a662f54SSrikanth Yalavarthi  *	- 0 on success.
4244a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
4254a662f54SSrikanth Yalavarthi  */
4264a662f54SSrikanth Yalavarthi typedef int (*mldev_model_stop_t)(struct rte_ml_dev *dev, uint16_t model_id);
4274a662f54SSrikanth Yalavarthi 
4284a662f54SSrikanth Yalavarthi /**
4294a662f54SSrikanth Yalavarthi  * @internal
4304a662f54SSrikanth Yalavarthi  *
4314a662f54SSrikanth Yalavarthi  * Get info about a model.
4324a662f54SSrikanth Yalavarthi  *
4334a662f54SSrikanth Yalavarthi  * @param dev
4344a662f54SSrikanth Yalavarthi  *	ML device pointer.
4354a662f54SSrikanth Yalavarthi  * @param model_id
4364a662f54SSrikanth Yalavarthi  *	Model ID to use.
4374a662f54SSrikanth Yalavarthi  * @param model_info
4384a662f54SSrikanth Yalavarthi  *	Pointer to model info structure.
4394a662f54SSrikanth Yalavarthi  *
4404a662f54SSrikanth Yalavarthi  * @return
4414a662f54SSrikanth Yalavarthi  *	- 0 on success.
4424a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
4434a662f54SSrikanth Yalavarthi  */
4444a662f54SSrikanth Yalavarthi typedef int (*mldev_model_info_get_t)(struct rte_ml_dev *dev, uint16_t model_id,
4454a662f54SSrikanth Yalavarthi 				      struct rte_ml_model_info *model_info);
4464a662f54SSrikanth Yalavarthi 
4474a662f54SSrikanth Yalavarthi /**
4484a662f54SSrikanth Yalavarthi  * @internal
4494a662f54SSrikanth Yalavarthi  *
4504a662f54SSrikanth Yalavarthi  * Update model params.
4514a662f54SSrikanth Yalavarthi  *
4524a662f54SSrikanth Yalavarthi  * @param dev
4534a662f54SSrikanth Yalavarthi  *	ML device pointer.
4544a662f54SSrikanth Yalavarthi  * @param model_id
4554a662f54SSrikanth Yalavarthi  *	Model ID to use.
4564a662f54SSrikanth Yalavarthi  * @param buffer
4574a662f54SSrikanth Yalavarthi  *	Pointer to model params.
4584a662f54SSrikanth Yalavarthi  *
4594a662f54SSrikanth Yalavarthi  * @return
4604a662f54SSrikanth Yalavarthi  *	- 0 on success.
4614a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
4624a662f54SSrikanth Yalavarthi  */
4634a662f54SSrikanth Yalavarthi typedef int (*mldev_model_params_update_t)(struct rte_ml_dev *dev, uint16_t model_id, void *buffer);
4644a662f54SSrikanth Yalavarthi 
4654a662f54SSrikanth Yalavarthi /**
4664a662f54SSrikanth Yalavarthi  * @internal
4674a662f54SSrikanth Yalavarthi  *
46850818b0aSSrikanth Yalavarthi  * Quantize model data.
46950818b0aSSrikanth Yalavarthi  *
47050818b0aSSrikanth Yalavarthi  * @param dev
47150818b0aSSrikanth Yalavarthi  *	ML device pointer.
47250818b0aSSrikanth Yalavarthi  * @param model_id
47350818b0aSSrikanth Yalavarthi  *	Model ID to use.
47450818b0aSSrikanth Yalavarthi  * @param dbuffer
47550818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
47650818b0aSSrikanth Yalavarthi  * @param qbuffer
47750818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
47850818b0aSSrikanth Yalavarthi  *
47950818b0aSSrikanth Yalavarthi  * @return
48050818b0aSSrikanth Yalavarthi  *	- 0 on success.
48150818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
48250818b0aSSrikanth Yalavarthi  */
48324364292SSrikanth Yalavarthi typedef int (*mldev_io_quantize_t)(struct rte_ml_dev *dev, uint16_t model_id,
48424364292SSrikanth Yalavarthi 				   struct rte_ml_buff_seg **dbuffer,
48524364292SSrikanth Yalavarthi 				   struct rte_ml_buff_seg **qbuffer);
48650818b0aSSrikanth Yalavarthi 
48750818b0aSSrikanth Yalavarthi /**
48850818b0aSSrikanth Yalavarthi  * @internal
48950818b0aSSrikanth Yalavarthi  *
49050818b0aSSrikanth Yalavarthi  * Quantize model data.
49150818b0aSSrikanth Yalavarthi  *
49250818b0aSSrikanth Yalavarthi  * @param dev
49350818b0aSSrikanth Yalavarthi  *	ML device pointer.
49450818b0aSSrikanth Yalavarthi  * @param model_id
49550818b0aSSrikanth Yalavarthi  *	Model ID to use.
49650818b0aSSrikanth Yalavarthi  * @param qbuffer
49750818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
49850818b0aSSrikanth Yalavarthi  * @param dbuffer
49950818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
50050818b0aSSrikanth Yalavarthi  *
50150818b0aSSrikanth Yalavarthi  * @return
50250818b0aSSrikanth Yalavarthi  *	- 0 on success.
50350818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
50450818b0aSSrikanth Yalavarthi  */
50524364292SSrikanth Yalavarthi typedef int (*mldev_io_dequantize_t)(struct rte_ml_dev *dev, uint16_t model_id,
50624364292SSrikanth Yalavarthi 				     struct rte_ml_buff_seg **qbuffer,
50724364292SSrikanth Yalavarthi 				     struct rte_ml_buff_seg **dbuffer);
50850818b0aSSrikanth Yalavarthi 
50950818b0aSSrikanth Yalavarthi /**
51050818b0aSSrikanth Yalavarthi  * @internal
51150818b0aSSrikanth Yalavarthi  *
51236d0b09eSSrikanth Yalavarthi  * ML device operations function pointer table.
51336d0b09eSSrikanth Yalavarthi  */
51436d0b09eSSrikanth Yalavarthi struct rte_ml_dev_ops {
51536d0b09eSSrikanth Yalavarthi 	/** Get device information. */
51636d0b09eSSrikanth Yalavarthi 	mldev_info_get_t dev_info_get;
51736d0b09eSSrikanth Yalavarthi 
51836d0b09eSSrikanth Yalavarthi 	/** Configure device. */
51936d0b09eSSrikanth Yalavarthi 	mldev_configure_t dev_configure;
52036d0b09eSSrikanth Yalavarthi 
52136d0b09eSSrikanth Yalavarthi 	/** Close device. */
52236d0b09eSSrikanth Yalavarthi 	mldev_close_t dev_close;
52336d0b09eSSrikanth Yalavarthi 
52436d0b09eSSrikanth Yalavarthi 	/** Start device. */
52536d0b09eSSrikanth Yalavarthi 	mldev_start_t dev_start;
52636d0b09eSSrikanth Yalavarthi 
52736d0b09eSSrikanth Yalavarthi 	/** Stop device. */
52836d0b09eSSrikanth Yalavarthi 	mldev_stop_t dev_stop;
529b5f0df64SSrikanth Yalavarthi 
530b5f0df64SSrikanth Yalavarthi 	/** Set up a device queue pair. */
531b5f0df64SSrikanth Yalavarthi 	mldev_queue_pair_setup_t dev_queue_pair_setup;
532b5f0df64SSrikanth Yalavarthi 
533b5f0df64SSrikanth Yalavarthi 	/** Release a device queue pair. */
534b5f0df64SSrikanth Yalavarthi 	mldev_queue_pair_release_t dev_queue_pair_release;
5354a662f54SSrikanth Yalavarthi 
536b3caa0f8SSrikanth Yalavarthi 	/** Get device statistics. */
537b3caa0f8SSrikanth Yalavarthi 	mldev_stats_get_t dev_stats_get;
538b3caa0f8SSrikanth Yalavarthi 
539b3caa0f8SSrikanth Yalavarthi 	/** Reset device statistics. */
540b3caa0f8SSrikanth Yalavarthi 	mldev_stats_reset_t dev_stats_reset;
541b3caa0f8SSrikanth Yalavarthi 
542f06968e9SSrikanth Yalavarthi 	/** Get names of extended stats. */
543f06968e9SSrikanth Yalavarthi 	mldev_xstats_names_get_t dev_xstats_names_get;
544f06968e9SSrikanth Yalavarthi 
545f06968e9SSrikanth Yalavarthi 	/** Get value of a single extended stat. */
546f06968e9SSrikanth Yalavarthi 	mldev_xstats_by_name_get_t dev_xstats_by_name_get;
547f06968e9SSrikanth Yalavarthi 
548f06968e9SSrikanth Yalavarthi 	/** Get extended stats of a device. */
549f06968e9SSrikanth Yalavarthi 	mldev_xstats_get_t dev_xstats_get;
550f06968e9SSrikanth Yalavarthi 
551f06968e9SSrikanth Yalavarthi 	/** Reset extended stats of the device. */
552f06968e9SSrikanth Yalavarthi 	mldev_xstats_reset_t dev_xstats_reset;
553f06968e9SSrikanth Yalavarthi 
554c32be5aaSSrikanth Yalavarthi 	/** Dump ML device debug info. */
555c32be5aaSSrikanth Yalavarthi 	mldev_dump_t dev_dump;
556c32be5aaSSrikanth Yalavarthi 
557c32be5aaSSrikanth Yalavarthi 	/** Dump ML device debug info. */
558c32be5aaSSrikanth Yalavarthi 	mldev_selftest_t dev_selftest;
559c32be5aaSSrikanth Yalavarthi 
5604a662f54SSrikanth Yalavarthi 	/** Load an ML model. */
5614a662f54SSrikanth Yalavarthi 	mldev_model_load_t model_load;
5624a662f54SSrikanth Yalavarthi 
5634a662f54SSrikanth Yalavarthi 	/** Unload an ML model. */
5644a662f54SSrikanth Yalavarthi 	mldev_model_unload_t model_unload;
5654a662f54SSrikanth Yalavarthi 
5664a662f54SSrikanth Yalavarthi 	/** Start an ML model. */
5674a662f54SSrikanth Yalavarthi 	mldev_model_start_t model_start;
5684a662f54SSrikanth Yalavarthi 
5694a662f54SSrikanth Yalavarthi 	/** Stop an ML model. */
5704a662f54SSrikanth Yalavarthi 	mldev_model_stop_t model_stop;
5714a662f54SSrikanth Yalavarthi 
5724a662f54SSrikanth Yalavarthi 	/** Get model information. */
5734a662f54SSrikanth Yalavarthi 	mldev_model_info_get_t model_info_get;
5744a662f54SSrikanth Yalavarthi 
5754a662f54SSrikanth Yalavarthi 	/** Update model params. */
5764a662f54SSrikanth Yalavarthi 	mldev_model_params_update_t model_params_update;
57750818b0aSSrikanth Yalavarthi 
57850818b0aSSrikanth Yalavarthi 	/** Quantize data */
57950818b0aSSrikanth Yalavarthi 	mldev_io_quantize_t io_quantize;
58050818b0aSSrikanth Yalavarthi 
58150818b0aSSrikanth Yalavarthi 	/** De-quantize data */
58250818b0aSSrikanth Yalavarthi 	mldev_io_dequantize_t io_dequantize;
58336d0b09eSSrikanth Yalavarthi };
58436d0b09eSSrikanth Yalavarthi 
585ea80eafbSSrikanth Yalavarthi /**
586ea80eafbSSrikanth Yalavarthi  * @internal
587ea80eafbSSrikanth Yalavarthi  *
588ea80eafbSSrikanth Yalavarthi  * The data part, with no function pointers, associated with each device. This structure is safe to
589ea80eafbSSrikanth Yalavarthi  * place in shared memory to be common among different processes in a multi-process configuration.
590ea80eafbSSrikanth Yalavarthi  */
591ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_data {
592ea80eafbSSrikanth Yalavarthi 	/** Device ID for this instance. */
593ea80eafbSSrikanth Yalavarthi 	int16_t dev_id;
594ea80eafbSSrikanth Yalavarthi 
595ea80eafbSSrikanth Yalavarthi 	/** Socket ID where memory is allocated. */
596ea80eafbSSrikanth Yalavarthi 	int16_t socket_id;
597ea80eafbSSrikanth Yalavarthi 
598ea80eafbSSrikanth Yalavarthi 	/** Device state: STOPPED(0) / STARTED(1) */
599ea80eafbSSrikanth Yalavarthi 	__extension__ uint8_t dev_started : 1;
600ea80eafbSSrikanth Yalavarthi 
601ea80eafbSSrikanth Yalavarthi 	/** Number of device queue pairs. */
602ea80eafbSSrikanth Yalavarthi 	uint16_t nb_queue_pairs;
603ea80eafbSSrikanth Yalavarthi 
604ea80eafbSSrikanth Yalavarthi 	/** Number of ML models. */
605ea80eafbSSrikanth Yalavarthi 	uint16_t nb_models;
606ea80eafbSSrikanth Yalavarthi 
607ea80eafbSSrikanth Yalavarthi 	/** Array of pointers to queue pairs. */
608ea80eafbSSrikanth Yalavarthi 	void **queue_pairs;
609ea80eafbSSrikanth Yalavarthi 
610ea80eafbSSrikanth Yalavarthi 	/** Array of pointers to ML models. */
611ea80eafbSSrikanth Yalavarthi 	void **models;
612ea80eafbSSrikanth Yalavarthi 
613ea80eafbSSrikanth Yalavarthi 	/** PMD-specific private data. */
614ea80eafbSSrikanth Yalavarthi 	void *dev_private;
615ea80eafbSSrikanth Yalavarthi 
616ea80eafbSSrikanth Yalavarthi 	/** Unique identifier name. */
617ea80eafbSSrikanth Yalavarthi 	char name[RTE_ML_STR_MAX];
618ea80eafbSSrikanth Yalavarthi };
619ea80eafbSSrikanth Yalavarthi 
620ea80eafbSSrikanth Yalavarthi /**
621ea80eafbSSrikanth Yalavarthi  * @internal
622ea80eafbSSrikanth Yalavarthi  *
623ea80eafbSSrikanth Yalavarthi  * The data structure associated with each ML device.
624ea80eafbSSrikanth Yalavarthi  */
625*c6552d9aSTyler Retzlaff struct __rte_cache_aligned rte_ml_dev {
626c775df1cSSrikanth Yalavarthi 	/** Pointer to PMD enqueue function. */
627c775df1cSSrikanth Yalavarthi 	mldev_enqueue_t enqueue_burst;
628c775df1cSSrikanth Yalavarthi 
629c775df1cSSrikanth Yalavarthi 	/** Pointer to PMD dequeue function. */
630c775df1cSSrikanth Yalavarthi 	mldev_dequeue_t dequeue_burst;
631c775df1cSSrikanth Yalavarthi 
632698d9061SSrikanth Yalavarthi 	/** Pointer to PMD Op error get function. */
633698d9061SSrikanth Yalavarthi 	mldev_op_error_get_t op_error_get;
634698d9061SSrikanth Yalavarthi 
635ea80eafbSSrikanth Yalavarthi 	/** Pointer to device data. */
636ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev_data *data;
637ea80eafbSSrikanth Yalavarthi 
63836d0b09eSSrikanth Yalavarthi 	/** Functions exported by PMD. */
63936d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev_ops *dev_ops;
64036d0b09eSSrikanth Yalavarthi 
641ea80eafbSSrikanth Yalavarthi 	/** Backing RTE device. */
642ea80eafbSSrikanth Yalavarthi 	struct rte_device *device;
643ea80eafbSSrikanth Yalavarthi 
644ea80eafbSSrikanth Yalavarthi 	/** Flag indicating the device is attached. */
645ea80eafbSSrikanth Yalavarthi 	__extension__ uint8_t attached : 1;
646*c6552d9aSTyler Retzlaff };
647ea80eafbSSrikanth Yalavarthi 
648ea80eafbSSrikanth Yalavarthi /**
649ea80eafbSSrikanth Yalavarthi  * @internal
650ea80eafbSSrikanth Yalavarthi  *
651ea80eafbSSrikanth Yalavarthi  * Global structure used for maintaining state of allocated ML devices.
652ea80eafbSSrikanth Yalavarthi  */
653ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_global {
654ea80eafbSSrikanth Yalavarthi 	/** Device information array. */
655ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev *devs;
656ea80eafbSSrikanth Yalavarthi 
657ea80eafbSSrikanth Yalavarthi 	/** Device private data array. */
658ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev_data **data;
659ea80eafbSSrikanth Yalavarthi 
660ea80eafbSSrikanth Yalavarthi 	/** Number of devices found. */
661ea80eafbSSrikanth Yalavarthi 	uint8_t nb_devs;
662ea80eafbSSrikanth Yalavarthi 
663ea80eafbSSrikanth Yalavarthi 	/** Maximum number of devices. */
664ea80eafbSSrikanth Yalavarthi 	uint8_t max_devs;
665ea80eafbSSrikanth Yalavarthi };
666ea80eafbSSrikanth Yalavarthi 
667ea80eafbSSrikanth Yalavarthi #endif /* RTE_MLDEV_INTERNAL_H */
668