xref: /dpdk/lib/mldev/rte_mldev_core.h (revision c32be5aa19fb78c42c3a37b481c8868d4d28b55c)
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  *
24269707febSSrikanth Yalavarthi  * Function used to get names of extended stats.
24369707febSSrikanth Yalavarthi  *
24469707febSSrikanth Yalavarthi  * @param dev
24569707febSSrikanth Yalavarthi  *	ML device pointer.
24669707febSSrikanth Yalavarthi  * @param xstats_map
24769707febSSrikanth Yalavarthi  *	Array to insert id and names into.
24869707febSSrikanth Yalavarthi  * @param size
24969707febSSrikanth Yalavarthi  *	Size of xstats_map array.
25069707febSSrikanth Yalavarthi  *
25169707febSSrikanth Yalavarthi  * @return
25269707febSSrikanth Yalavarthi  *	- >= 0 and <= size on success.
25369707febSSrikanth Yalavarthi  *	- > size, error. Returns the size of xstats_map array required.
25469707febSSrikanth Yalavarthi  *	- < 0, error code on failure.
25569707febSSrikanth Yalavarthi  */
25669707febSSrikanth Yalavarthi typedef int (*mldev_xstats_names_get_t)(struct rte_ml_dev *dev,
25769707febSSrikanth Yalavarthi 					struct rte_ml_dev_xstats_map *xstats_map, uint32_t size);
25869707febSSrikanth Yalavarthi 
25969707febSSrikanth Yalavarthi /**
26069707febSSrikanth Yalavarthi  * @internal
26169707febSSrikanth Yalavarthi  *
26269707febSSrikanth Yalavarthi  * Function used to get a single extended stat by name.
26369707febSSrikanth Yalavarthi  *
26469707febSSrikanth Yalavarthi  * @param dev
26569707febSSrikanth Yalavarthi  *	ML device pointer.
26669707febSSrikanth Yalavarthi  * @param name
26769707febSSrikanth Yalavarthi  *	Name of the stat to retrieve.
26869707febSSrikanth Yalavarthi  * @param stat_id
26969707febSSrikanth Yalavarthi  *	ID of the stat to be returned.
27069707febSSrikanth Yalavarthi  * @param value
27169707febSSrikanth Yalavarthi  *	Value of the stat to be returned.
27269707febSSrikanth Yalavarthi  *
27369707febSSrikanth Yalavarthi  * @return
27469707febSSrikanth Yalavarthi  *	- >= 0 stat value.
27569707febSSrikanth Yalavarthi  *	- < 0, error code on failure.
27669707febSSrikanth Yalavarthi  */
27769707febSSrikanth Yalavarthi typedef int (*mldev_xstats_by_name_get_t)(struct rte_ml_dev *dev, const char *name,
27869707febSSrikanth Yalavarthi 					  uint16_t *stat_id, uint64_t *value);
27969707febSSrikanth Yalavarthi 
28069707febSSrikanth Yalavarthi /**
28169707febSSrikanth Yalavarthi  * @internal
28269707febSSrikanth Yalavarthi  *
28369707febSSrikanth Yalavarthi  * Function used to retrieve extended stats of a device.
28469707febSSrikanth Yalavarthi  *
28569707febSSrikanth Yalavarthi  * @param dev
28669707febSSrikanth Yalavarthi  *	ML device pointer.
28769707febSSrikanth Yalavarthi  * @param stat_ids
28869707febSSrikanth Yalavarthi  *	Array of ID numbers of the stats to be retrieved.
28969707febSSrikanth Yalavarthi  * @param values
29069707febSSrikanth Yalavarthi  *	Values of the stats requested by the ID.
29169707febSSrikanth Yalavarthi  * @param nb_ids
29269707febSSrikanth Yalavarthi  *	Number of stats requested.
29369707febSSrikanth Yalavarthi  *
29469707febSSrikanth Yalavarthi  * @return
29569707febSSrikanth Yalavarthi  *	- >= 0, number of entries filled into the values array.
29669707febSSrikanth Yalavarthi  *	- < 0, error code on failure.
29769707febSSrikanth Yalavarthi  */
29869707febSSrikanth Yalavarthi typedef int (*mldev_xstats_get_t)(struct rte_ml_dev *dev, const uint16_t *stat_ids,
29969707febSSrikanth Yalavarthi 				  uint64_t *values, uint16_t nb_ids);
30069707febSSrikanth Yalavarthi 
30169707febSSrikanth Yalavarthi /**
30269707febSSrikanth Yalavarthi  * @internal
30369707febSSrikanth Yalavarthi  *
30469707febSSrikanth Yalavarthi  * Function used to reset extended stats.
30569707febSSrikanth Yalavarthi  *
30669707febSSrikanth Yalavarthi  * @param dev
30769707febSSrikanth Yalavarthi  *	ML device pointer.
30869707febSSrikanth Yalavarthi  * @param stat_ids
30969707febSSrikanth Yalavarthi  *	Array of stats IDs to be reset.
31069707febSSrikanth Yalavarthi  * @param nb_ids
31169707febSSrikanth Yalavarthi  *	Number of IDs in the stat_ids array.
31269707febSSrikanth Yalavarthi  *
31369707febSSrikanth Yalavarthi  * @return
31469707febSSrikanth Yalavarthi  *	- 0 on success.
31569707febSSrikanth Yalavarthi  *	- < 0, error code on failure.
31669707febSSrikanth Yalavarthi  */
31769707febSSrikanth Yalavarthi typedef int (*mldev_xstats_reset_t)(struct rte_ml_dev *dev, const uint16_t *stat_ids,
31869707febSSrikanth Yalavarthi 				    uint16_t nb_ids);
31969707febSSrikanth Yalavarthi 
32069707febSSrikanth Yalavarthi /**
32169707febSSrikanth Yalavarthi  * @internal
32269707febSSrikanth Yalavarthi  *
323*c32be5aaSSrikanth Yalavarthi  * Function used to dump ML device debug info.
324*c32be5aaSSrikanth Yalavarthi  *
325*c32be5aaSSrikanth Yalavarthi  * @param dev
326*c32be5aaSSrikanth Yalavarthi  *	ML device pointer.
327*c32be5aaSSrikanth Yalavarthi  * @param fd
328*c32be5aaSSrikanth Yalavarthi  *	File descriptor to dump the debug info.
329*c32be5aaSSrikanth Yalavarthi  *
330*c32be5aaSSrikanth Yalavarthi  * @return
331*c32be5aaSSrikanth Yalavarthi  *	- 0 on success.
332*c32be5aaSSrikanth Yalavarthi  *	- < 0, error code on failure.
333*c32be5aaSSrikanth Yalavarthi  */
334*c32be5aaSSrikanth Yalavarthi 
335*c32be5aaSSrikanth Yalavarthi typedef int (*mldev_dump_t)(struct rte_ml_dev *dev, FILE *fd);
336*c32be5aaSSrikanth Yalavarthi 
337*c32be5aaSSrikanth Yalavarthi /**
338*c32be5aaSSrikanth Yalavarthi  * @internal
339*c32be5aaSSrikanth Yalavarthi  *
340*c32be5aaSSrikanth Yalavarthi  * Function used for selftest of ML device.
341*c32be5aaSSrikanth Yalavarthi  *
342*c32be5aaSSrikanth Yalavarthi  * @param dev
343*c32be5aaSSrikanth Yalavarthi  *	ML device pointer.
344*c32be5aaSSrikanth Yalavarthi  *
345*c32be5aaSSrikanth Yalavarthi  * @return
346*c32be5aaSSrikanth Yalavarthi  *	- 0 on success.
347*c32be5aaSSrikanth Yalavarthi  *	- < 0, error on failure.
348*c32be5aaSSrikanth Yalavarthi  */
349*c32be5aaSSrikanth Yalavarthi typedef int (*mldev_selftest_t)(struct rte_ml_dev *dev);
350*c32be5aaSSrikanth Yalavarthi 
351*c32be5aaSSrikanth Yalavarthi /**
352*c32be5aaSSrikanth Yalavarthi  * @internal
353*c32be5aaSSrikanth Yalavarthi  *
3544a662f54SSrikanth Yalavarthi  * Function used to load an ML model.
3554a662f54SSrikanth Yalavarthi  *
3564a662f54SSrikanth Yalavarthi  * @param dev
3574a662f54SSrikanth Yalavarthi  *	ML device pointer.
3584a662f54SSrikanth Yalavarthi  * @param params
3594a662f54SSrikanth Yalavarthi  *	Model load params.
3604a662f54SSrikanth Yalavarthi  * @param model_id
3614a662f54SSrikanth Yalavarthi  *	Model ID returned by the library.
3624a662f54SSrikanth Yalavarthi  *
3634a662f54SSrikanth Yalavarthi  * @return
3644a662f54SSrikanth Yalavarthi  *	- 0 on success.
3654a662f54SSrikanth Yalavarthi  *	- < 0, error on failure.
3664a662f54SSrikanth Yalavarthi  */
3674a662f54SSrikanth Yalavarthi typedef int (*mldev_model_load_t)(struct rte_ml_dev *dev, struct rte_ml_model_params *params,
3684a662f54SSrikanth Yalavarthi 				  uint16_t *model_id);
3694a662f54SSrikanth Yalavarthi 
3704a662f54SSrikanth Yalavarthi /**
3714a662f54SSrikanth Yalavarthi  * @internal
3724a662f54SSrikanth Yalavarthi  *
3734a662f54SSrikanth Yalavarthi  * Function used to unload an ML model.
3744a662f54SSrikanth Yalavarthi  *
3754a662f54SSrikanth Yalavarthi  * @param dev
3764a662f54SSrikanth Yalavarthi  *	ML device pointer.
3774a662f54SSrikanth Yalavarthi  * @param model_id
3784a662f54SSrikanth Yalavarthi  *	Model ID to use.
3794a662f54SSrikanth Yalavarthi  *
3804a662f54SSrikanth Yalavarthi  * @return
3814a662f54SSrikanth Yalavarthi  *	- 0 on success.
3824a662f54SSrikanth Yalavarthi  *	- < 0, error on failure.
3834a662f54SSrikanth Yalavarthi  */
3844a662f54SSrikanth Yalavarthi typedef int (*mldev_model_unload_t)(struct rte_ml_dev *dev, uint16_t model_id);
3854a662f54SSrikanth Yalavarthi 
3864a662f54SSrikanth Yalavarthi /**
3874a662f54SSrikanth Yalavarthi  * @internal
3884a662f54SSrikanth Yalavarthi  *
3894a662f54SSrikanth Yalavarthi  * Function used to start an ML model.
3904a662f54SSrikanth Yalavarthi  *
3914a662f54SSrikanth Yalavarthi  * @param dev
3924a662f54SSrikanth Yalavarthi  *	ML device pointer.
3934a662f54SSrikanth Yalavarthi  * @param model_id
3944a662f54SSrikanth Yalavarthi  *	Model ID to use.
3954a662f54SSrikanth Yalavarthi  *
3964a662f54SSrikanth Yalavarthi  * @return
3974a662f54SSrikanth Yalavarthi  *	- 0 on success.
3984a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
3994a662f54SSrikanth Yalavarthi  */
4004a662f54SSrikanth Yalavarthi typedef int (*mldev_model_start_t)(struct rte_ml_dev *dev, uint16_t model_id);
4014a662f54SSrikanth Yalavarthi 
4024a662f54SSrikanth Yalavarthi /**
4034a662f54SSrikanth Yalavarthi  * @internal
4044a662f54SSrikanth Yalavarthi  *
4054a662f54SSrikanth Yalavarthi  * Function used to stop an ML model.
4064a662f54SSrikanth Yalavarthi  *
4074a662f54SSrikanth Yalavarthi  * @param dev
4084a662f54SSrikanth Yalavarthi  *	ML device pointer.
4094a662f54SSrikanth Yalavarthi  * @param model_id
4104a662f54SSrikanth Yalavarthi  *	Model ID to use.
4114a662f54SSrikanth Yalavarthi  *
4124a662f54SSrikanth Yalavarthi  * @return
4134a662f54SSrikanth Yalavarthi  *	- 0 on success.
4144a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
4154a662f54SSrikanth Yalavarthi  */
4164a662f54SSrikanth Yalavarthi typedef int (*mldev_model_stop_t)(struct rte_ml_dev *dev, uint16_t model_id);
4174a662f54SSrikanth Yalavarthi 
4184a662f54SSrikanth Yalavarthi /**
4194a662f54SSrikanth Yalavarthi  * @internal
4204a662f54SSrikanth Yalavarthi  *
4214a662f54SSrikanth Yalavarthi  * Get info about a model.
4224a662f54SSrikanth Yalavarthi  *
4234a662f54SSrikanth Yalavarthi  * @param dev
4244a662f54SSrikanth Yalavarthi  *	ML device pointer.
4254a662f54SSrikanth Yalavarthi  * @param model_id
4264a662f54SSrikanth Yalavarthi  *	Model ID to use.
4274a662f54SSrikanth Yalavarthi  * @param model_info
4284a662f54SSrikanth Yalavarthi  *	Pointer to model info structure.
4294a662f54SSrikanth Yalavarthi  *
4304a662f54SSrikanth Yalavarthi  * @return
4314a662f54SSrikanth Yalavarthi  *	- 0 on success.
4324a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
4334a662f54SSrikanth Yalavarthi  */
4344a662f54SSrikanth Yalavarthi typedef int (*mldev_model_info_get_t)(struct rte_ml_dev *dev, uint16_t model_id,
4354a662f54SSrikanth Yalavarthi 				      struct rte_ml_model_info *model_info);
4364a662f54SSrikanth Yalavarthi 
4374a662f54SSrikanth Yalavarthi /**
4384a662f54SSrikanth Yalavarthi  * @internal
4394a662f54SSrikanth Yalavarthi  *
4404a662f54SSrikanth Yalavarthi  * Update model params.
4414a662f54SSrikanth Yalavarthi  *
4424a662f54SSrikanth Yalavarthi  * @param dev
4434a662f54SSrikanth Yalavarthi  *	ML device pointer.
4444a662f54SSrikanth Yalavarthi  * @param model_id
4454a662f54SSrikanth Yalavarthi  *	Model ID to use.
4464a662f54SSrikanth Yalavarthi  * @param buffer
4474a662f54SSrikanth Yalavarthi  *	Pointer to model params.
4484a662f54SSrikanth Yalavarthi  *
4494a662f54SSrikanth Yalavarthi  * @return
4504a662f54SSrikanth Yalavarthi  *	- 0 on success.
4514a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
4524a662f54SSrikanth Yalavarthi  */
4534a662f54SSrikanth Yalavarthi typedef int (*mldev_model_params_update_t)(struct rte_ml_dev *dev, uint16_t model_id, void *buffer);
4544a662f54SSrikanth Yalavarthi 
4554a662f54SSrikanth Yalavarthi /**
4564a662f54SSrikanth Yalavarthi  * @internal
4574a662f54SSrikanth Yalavarthi  *
45850818b0aSSrikanth Yalavarthi  * Get size of input buffers.
45950818b0aSSrikanth Yalavarthi  *
46050818b0aSSrikanth Yalavarthi  * @param dev
46150818b0aSSrikanth Yalavarthi  *	ML device pointer.
46250818b0aSSrikanth Yalavarthi  * @param model_id
46350818b0aSSrikanth Yalavarthi  *	Model ID to use.
46450818b0aSSrikanth Yalavarthi  * @param nb_batches
46550818b0aSSrikanth Yalavarthi  *	Number of batches.
46650818b0aSSrikanth Yalavarthi  * @param input_qsize
46750818b0aSSrikanth Yalavarthi  *	Size of quantized input.
46850818b0aSSrikanth Yalavarthi  * @param input_dsize
46950818b0aSSrikanth Yalavarthi  *	Size of dequantized input.
47050818b0aSSrikanth Yalavarthi  *
47150818b0aSSrikanth Yalavarthi  * @return
47250818b0aSSrikanth Yalavarthi  *	- 0 on success.
47350818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
47450818b0aSSrikanth Yalavarthi  */
47550818b0aSSrikanth Yalavarthi typedef int (*mldev_io_input_size_get_t)(struct rte_ml_dev *dev, uint16_t model_id,
47650818b0aSSrikanth Yalavarthi 					 uint32_t nb_batches, uint64_t *input_qsize,
47750818b0aSSrikanth Yalavarthi 					 uint64_t *input_dsize);
47850818b0aSSrikanth Yalavarthi 
47950818b0aSSrikanth Yalavarthi /**
48050818b0aSSrikanth Yalavarthi  * @internal
48150818b0aSSrikanth Yalavarthi  *
48250818b0aSSrikanth Yalavarthi  * Get size of output buffers.
48350818b0aSSrikanth Yalavarthi  *
48450818b0aSSrikanth Yalavarthi  * @param dev
48550818b0aSSrikanth Yalavarthi  *	ML device pointer.
48650818b0aSSrikanth Yalavarthi  * @param model_id
48750818b0aSSrikanth Yalavarthi  *	Model ID to use.
48850818b0aSSrikanth Yalavarthi  * @param nb_batches
48950818b0aSSrikanth Yalavarthi  *	Number of batches.
49050818b0aSSrikanth Yalavarthi  * @param output_qsize
49150818b0aSSrikanth Yalavarthi  *	Size of quantized output.
49250818b0aSSrikanth Yalavarthi  * @param output_dsize
49350818b0aSSrikanth Yalavarthi  *	Size of dequantized output.
49450818b0aSSrikanth Yalavarthi  *
49550818b0aSSrikanth Yalavarthi  * @return
49650818b0aSSrikanth Yalavarthi  *	- 0 on success.
49750818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
49850818b0aSSrikanth Yalavarthi  */
49950818b0aSSrikanth Yalavarthi typedef int (*mldev_io_output_size_get_t)(struct rte_ml_dev *dev, uint16_t model_id,
50050818b0aSSrikanth Yalavarthi 					  uint32_t nb_batches, uint64_t *output_qsize,
50150818b0aSSrikanth Yalavarthi 					  uint64_t *output_dsize);
50250818b0aSSrikanth Yalavarthi 
50350818b0aSSrikanth Yalavarthi /**
50450818b0aSSrikanth Yalavarthi  * @internal
50550818b0aSSrikanth Yalavarthi  *
50650818b0aSSrikanth Yalavarthi  * Quantize model data.
50750818b0aSSrikanth Yalavarthi  *
50850818b0aSSrikanth Yalavarthi  * @param dev
50950818b0aSSrikanth Yalavarthi  *	ML device pointer.
51050818b0aSSrikanth Yalavarthi  * @param model_id
51150818b0aSSrikanth Yalavarthi  *	Model ID to use.
51250818b0aSSrikanth Yalavarthi  * @param nb_batches
51350818b0aSSrikanth Yalavarthi  *	Number of batches.
51450818b0aSSrikanth Yalavarthi  * @param dbuffer
51550818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
51650818b0aSSrikanth Yalavarthi  * @param qbuffer
51750818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
51850818b0aSSrikanth Yalavarthi  *
51950818b0aSSrikanth Yalavarthi  * @return
52050818b0aSSrikanth Yalavarthi  *	- 0 on success.
52150818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
52250818b0aSSrikanth Yalavarthi  */
52350818b0aSSrikanth Yalavarthi typedef int (*mldev_io_quantize_t)(struct rte_ml_dev *dev, uint16_t model_id, uint16_t nb_batches,
52450818b0aSSrikanth Yalavarthi 				   void *dbuffer, void *qbuffer);
52550818b0aSSrikanth Yalavarthi 
52650818b0aSSrikanth Yalavarthi /**
52750818b0aSSrikanth Yalavarthi  * @internal
52850818b0aSSrikanth Yalavarthi  *
52950818b0aSSrikanth Yalavarthi  * Quantize model data.
53050818b0aSSrikanth Yalavarthi  *
53150818b0aSSrikanth Yalavarthi  * @param dev
53250818b0aSSrikanth Yalavarthi  *	ML device pointer.
53350818b0aSSrikanth Yalavarthi  * @param model_id
53450818b0aSSrikanth Yalavarthi  *	Model ID to use.
53550818b0aSSrikanth Yalavarthi  * @param nb_batches
53650818b0aSSrikanth Yalavarthi  *	Number of batches.
53750818b0aSSrikanth Yalavarthi  * @param qbuffer
53850818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
53950818b0aSSrikanth Yalavarthi  * @param dbuffer
54050818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
54150818b0aSSrikanth Yalavarthi  *
54250818b0aSSrikanth Yalavarthi  * @return
54350818b0aSSrikanth Yalavarthi  *	- 0 on success.
54450818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
54550818b0aSSrikanth Yalavarthi  */
54650818b0aSSrikanth Yalavarthi typedef int (*mldev_io_dequantize_t)(struct rte_ml_dev *dev, uint16_t model_id, uint16_t nb_batches,
54750818b0aSSrikanth Yalavarthi 				     void *qbuffer, void *dbuffer);
54850818b0aSSrikanth Yalavarthi 
54950818b0aSSrikanth Yalavarthi /**
55050818b0aSSrikanth Yalavarthi  * @internal
55150818b0aSSrikanth Yalavarthi  *
55236d0b09eSSrikanth Yalavarthi  * ML device operations function pointer table.
55336d0b09eSSrikanth Yalavarthi  */
55436d0b09eSSrikanth Yalavarthi struct rte_ml_dev_ops {
55536d0b09eSSrikanth Yalavarthi 	/** Get device information. */
55636d0b09eSSrikanth Yalavarthi 	mldev_info_get_t dev_info_get;
55736d0b09eSSrikanth Yalavarthi 
55836d0b09eSSrikanth Yalavarthi 	/** Configure device. */
55936d0b09eSSrikanth Yalavarthi 	mldev_configure_t dev_configure;
56036d0b09eSSrikanth Yalavarthi 
56136d0b09eSSrikanth Yalavarthi 	/** Close device. */
56236d0b09eSSrikanth Yalavarthi 	mldev_close_t dev_close;
56336d0b09eSSrikanth Yalavarthi 
56436d0b09eSSrikanth Yalavarthi 	/** Start device. */
56536d0b09eSSrikanth Yalavarthi 	mldev_start_t dev_start;
56636d0b09eSSrikanth Yalavarthi 
56736d0b09eSSrikanth Yalavarthi 	/** Stop device. */
56836d0b09eSSrikanth Yalavarthi 	mldev_stop_t dev_stop;
569b5f0df64SSrikanth Yalavarthi 
570b5f0df64SSrikanth Yalavarthi 	/** Set up a device queue pair. */
571b5f0df64SSrikanth Yalavarthi 	mldev_queue_pair_setup_t dev_queue_pair_setup;
572b5f0df64SSrikanth Yalavarthi 
573b5f0df64SSrikanth Yalavarthi 	/** Release a device queue pair. */
574b5f0df64SSrikanth Yalavarthi 	mldev_queue_pair_release_t dev_queue_pair_release;
5754a662f54SSrikanth Yalavarthi 
576b3caa0f8SSrikanth Yalavarthi 	/** Get device statistics. */
577b3caa0f8SSrikanth Yalavarthi 	mldev_stats_get_t dev_stats_get;
578b3caa0f8SSrikanth Yalavarthi 
579b3caa0f8SSrikanth Yalavarthi 	/** Reset device statistics. */
580b3caa0f8SSrikanth Yalavarthi 	mldev_stats_reset_t dev_stats_reset;
581b3caa0f8SSrikanth Yalavarthi 
58269707febSSrikanth Yalavarthi 	/** Get names of extended stats. */
58369707febSSrikanth Yalavarthi 	mldev_xstats_names_get_t dev_xstats_names_get;
58469707febSSrikanth Yalavarthi 
58569707febSSrikanth Yalavarthi 	/** Get value of a single extended stat. */
58669707febSSrikanth Yalavarthi 	mldev_xstats_by_name_get_t dev_xstats_by_name_get;
58769707febSSrikanth Yalavarthi 
58869707febSSrikanth Yalavarthi 	/** Get extended stats of a device. */
58969707febSSrikanth Yalavarthi 	mldev_xstats_get_t dev_xstats_get;
59069707febSSrikanth Yalavarthi 
59169707febSSrikanth Yalavarthi 	/** Reset extended stats of the device. */
59269707febSSrikanth Yalavarthi 	mldev_xstats_reset_t dev_xstats_reset;
59369707febSSrikanth Yalavarthi 
594*c32be5aaSSrikanth Yalavarthi 	/** Dump ML device debug info. */
595*c32be5aaSSrikanth Yalavarthi 	mldev_dump_t dev_dump;
596*c32be5aaSSrikanth Yalavarthi 
597*c32be5aaSSrikanth Yalavarthi 	/** Dump ML device debug info. */
598*c32be5aaSSrikanth Yalavarthi 	mldev_selftest_t dev_selftest;
599*c32be5aaSSrikanth Yalavarthi 
6004a662f54SSrikanth Yalavarthi 	/** Load an ML model. */
6014a662f54SSrikanth Yalavarthi 	mldev_model_load_t model_load;
6024a662f54SSrikanth Yalavarthi 
6034a662f54SSrikanth Yalavarthi 	/** Unload an ML model. */
6044a662f54SSrikanth Yalavarthi 	mldev_model_unload_t model_unload;
6054a662f54SSrikanth Yalavarthi 
6064a662f54SSrikanth Yalavarthi 	/** Start an ML model. */
6074a662f54SSrikanth Yalavarthi 	mldev_model_start_t model_start;
6084a662f54SSrikanth Yalavarthi 
6094a662f54SSrikanth Yalavarthi 	/** Stop an ML model. */
6104a662f54SSrikanth Yalavarthi 	mldev_model_stop_t model_stop;
6114a662f54SSrikanth Yalavarthi 
6124a662f54SSrikanth Yalavarthi 	/** Get model information. */
6134a662f54SSrikanth Yalavarthi 	mldev_model_info_get_t model_info_get;
6144a662f54SSrikanth Yalavarthi 
6154a662f54SSrikanth Yalavarthi 	/** Update model params. */
6164a662f54SSrikanth Yalavarthi 	mldev_model_params_update_t model_params_update;
61750818b0aSSrikanth Yalavarthi 
61850818b0aSSrikanth Yalavarthi 	/** Get input buffer size. */
61950818b0aSSrikanth Yalavarthi 	mldev_io_input_size_get_t io_input_size_get;
62050818b0aSSrikanth Yalavarthi 
62150818b0aSSrikanth Yalavarthi 	/** Get output buffer size. */
62250818b0aSSrikanth Yalavarthi 	mldev_io_output_size_get_t io_output_size_get;
62350818b0aSSrikanth Yalavarthi 
62450818b0aSSrikanth Yalavarthi 	/** Quantize data */
62550818b0aSSrikanth Yalavarthi 	mldev_io_quantize_t io_quantize;
62650818b0aSSrikanth Yalavarthi 
62750818b0aSSrikanth Yalavarthi 	/** De-quantize data */
62850818b0aSSrikanth Yalavarthi 	mldev_io_dequantize_t io_dequantize;
62936d0b09eSSrikanth Yalavarthi };
63036d0b09eSSrikanth Yalavarthi 
631ea80eafbSSrikanth Yalavarthi /**
632ea80eafbSSrikanth Yalavarthi  * @internal
633ea80eafbSSrikanth Yalavarthi  *
634ea80eafbSSrikanth Yalavarthi  * The data part, with no function pointers, associated with each device. This structure is safe to
635ea80eafbSSrikanth Yalavarthi  * place in shared memory to be common among different processes in a multi-process configuration.
636ea80eafbSSrikanth Yalavarthi  */
637ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_data {
638ea80eafbSSrikanth Yalavarthi 	/** Device ID for this instance. */
639ea80eafbSSrikanth Yalavarthi 	int16_t dev_id;
640ea80eafbSSrikanth Yalavarthi 
641ea80eafbSSrikanth Yalavarthi 	/** Socket ID where memory is allocated. */
642ea80eafbSSrikanth Yalavarthi 	int16_t socket_id;
643ea80eafbSSrikanth Yalavarthi 
644ea80eafbSSrikanth Yalavarthi 	/** Device state: STOPPED(0) / STARTED(1) */
645ea80eafbSSrikanth Yalavarthi 	__extension__ uint8_t dev_started : 1;
646ea80eafbSSrikanth Yalavarthi 
647ea80eafbSSrikanth Yalavarthi 	/** Number of device queue pairs. */
648ea80eafbSSrikanth Yalavarthi 	uint16_t nb_queue_pairs;
649ea80eafbSSrikanth Yalavarthi 
650ea80eafbSSrikanth Yalavarthi 	/** Number of ML models. */
651ea80eafbSSrikanth Yalavarthi 	uint16_t nb_models;
652ea80eafbSSrikanth Yalavarthi 
653ea80eafbSSrikanth Yalavarthi 	/** Array of pointers to queue pairs. */
654ea80eafbSSrikanth Yalavarthi 	void **queue_pairs;
655ea80eafbSSrikanth Yalavarthi 
656ea80eafbSSrikanth Yalavarthi 	/** Array of pointers to ML models. */
657ea80eafbSSrikanth Yalavarthi 	void **models;
658ea80eafbSSrikanth Yalavarthi 
659ea80eafbSSrikanth Yalavarthi 	/** PMD-specific private data. */
660ea80eafbSSrikanth Yalavarthi 	void *dev_private;
661ea80eafbSSrikanth Yalavarthi 
662ea80eafbSSrikanth Yalavarthi 	/** Unique identifier name. */
663ea80eafbSSrikanth Yalavarthi 	char name[RTE_ML_STR_MAX];
664ea80eafbSSrikanth Yalavarthi };
665ea80eafbSSrikanth Yalavarthi 
666ea80eafbSSrikanth Yalavarthi /**
667ea80eafbSSrikanth Yalavarthi  * @internal
668ea80eafbSSrikanth Yalavarthi  *
669ea80eafbSSrikanth Yalavarthi  * The data structure associated with each ML device.
670ea80eafbSSrikanth Yalavarthi  */
671ea80eafbSSrikanth Yalavarthi struct rte_ml_dev {
672c775df1cSSrikanth Yalavarthi 	/** Pointer to PMD enqueue function. */
673c775df1cSSrikanth Yalavarthi 	mldev_enqueue_t enqueue_burst;
674c775df1cSSrikanth Yalavarthi 
675c775df1cSSrikanth Yalavarthi 	/** Pointer to PMD dequeue function. */
676c775df1cSSrikanth Yalavarthi 	mldev_dequeue_t dequeue_burst;
677c775df1cSSrikanth Yalavarthi 
678698d9061SSrikanth Yalavarthi 	/** Pointer to PMD Op error get function. */
679698d9061SSrikanth Yalavarthi 	mldev_op_error_get_t op_error_get;
680698d9061SSrikanth Yalavarthi 
681ea80eafbSSrikanth Yalavarthi 	/** Pointer to device data. */
682ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev_data *data;
683ea80eafbSSrikanth Yalavarthi 
68436d0b09eSSrikanth Yalavarthi 	/** Functions exported by PMD. */
68536d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev_ops *dev_ops;
68636d0b09eSSrikanth Yalavarthi 
687ea80eafbSSrikanth Yalavarthi 	/** Backing RTE device. */
688ea80eafbSSrikanth Yalavarthi 	struct rte_device *device;
689ea80eafbSSrikanth Yalavarthi 
690ea80eafbSSrikanth Yalavarthi 	/** Flag indicating the device is attached. */
691ea80eafbSSrikanth Yalavarthi 	__extension__ uint8_t attached : 1;
692ea80eafbSSrikanth Yalavarthi } __rte_cache_aligned;
693ea80eafbSSrikanth Yalavarthi 
694ea80eafbSSrikanth Yalavarthi /**
695ea80eafbSSrikanth Yalavarthi  * @internal
696ea80eafbSSrikanth Yalavarthi  *
697ea80eafbSSrikanth Yalavarthi  * Global structure used for maintaining state of allocated ML devices.
698ea80eafbSSrikanth Yalavarthi  */
699ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_global {
700ea80eafbSSrikanth Yalavarthi 	/** Device information array. */
701ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev *devs;
702ea80eafbSSrikanth Yalavarthi 
703ea80eafbSSrikanth Yalavarthi 	/** Device private data array. */
704ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev_data **data;
705ea80eafbSSrikanth Yalavarthi 
706ea80eafbSSrikanth Yalavarthi 	/** Number of devices found. */
707ea80eafbSSrikanth Yalavarthi 	uint8_t nb_devs;
708ea80eafbSSrikanth Yalavarthi 
709ea80eafbSSrikanth Yalavarthi 	/** Maximum number of devices. */
710ea80eafbSSrikanth Yalavarthi 	uint8_t max_devs;
711ea80eafbSSrikanth Yalavarthi };
712ea80eafbSSrikanth Yalavarthi 
713ea80eafbSSrikanth Yalavarthi #ifdef __cplusplus
714ea80eafbSSrikanth Yalavarthi }
715ea80eafbSSrikanth Yalavarthi #endif
716ea80eafbSSrikanth Yalavarthi 
717ea80eafbSSrikanth Yalavarthi #endif /* RTE_MLDEV_INTERNAL_H */
718