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