xref: /dpdk/lib/mldev/rte_mldev_core.h (revision c775df1ca36effd7dcb3909dc870e8614b7ec764)
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 /**
37*c775df1cSSrikanth Yalavarthi  * @internal
38*c775df1cSSrikanth Yalavarthi  *
39*c775df1cSSrikanth Yalavarthi  * Enqueue a burst of inference requests to a queue on ML device.
40*c775df1cSSrikanth Yalavarthi  *
41*c775df1cSSrikanth Yalavarthi  * @param dev
42*c775df1cSSrikanth Yalavarthi  *	ML device pointer.
43*c775df1cSSrikanth Yalavarthi  * @param qp_id
44*c775df1cSSrikanth Yalavarthi  *	Queue-pair ID.
45*c775df1cSSrikanth Yalavarthi  * @param ops
46*c775df1cSSrikanth Yalavarthi  *	Array of ML ops to be enqueued.
47*c775df1cSSrikanth Yalavarthi  * @param nb_ops
48*c775df1cSSrikanth Yalavarthi  *	Number of ops to enqueue.
49*c775df1cSSrikanth Yalavarthi  *
50*c775df1cSSrikanth Yalavarthi  * @return
51*c775df1cSSrikanth Yalavarthi  *	- Number of ops enqueued.
52*c775df1cSSrikanth Yalavarthi  */
53*c775df1cSSrikanth Yalavarthi typedef uint16_t (*mldev_enqueue_t)(struct rte_ml_dev *dev, uint16_t qp_id, struct rte_ml_op **ops,
54*c775df1cSSrikanth Yalavarthi 				    uint16_t nb_ops);
55*c775df1cSSrikanth Yalavarthi 
56*c775df1cSSrikanth Yalavarthi /**
57*c775df1cSSrikanth Yalavarthi  * @internal
58*c775df1cSSrikanth Yalavarthi  *
59*c775df1cSSrikanth Yalavarthi  * Dequeue a burst of inference requests from a queue on ML device.
60*c775df1cSSrikanth Yalavarthi  *
61*c775df1cSSrikanth Yalavarthi  * @param dev
62*c775df1cSSrikanth Yalavarthi  *	ML device pointer.
63*c775df1cSSrikanth Yalavarthi  * @param qp_id
64*c775df1cSSrikanth Yalavarthi  *	Queue-pair ID.
65*c775df1cSSrikanth Yalavarthi  * @param ops
66*c775df1cSSrikanth Yalavarthi  *	Array of ML ops to dequeued.
67*c775df1cSSrikanth Yalavarthi  * @param nb_ops
68*c775df1cSSrikanth Yalavarthi  *	Number of ops to dequeue.
69*c775df1cSSrikanth Yalavarthi  *
70*c775df1cSSrikanth Yalavarthi  * @return
71*c775df1cSSrikanth Yalavarthi  *	- Number of ops dequeued.
72*c775df1cSSrikanth Yalavarthi  */
73*c775df1cSSrikanth Yalavarthi typedef uint16_t (*mldev_dequeue_t)(struct rte_ml_dev *dev, uint16_t qp_id, struct rte_ml_op **ops,
74*c775df1cSSrikanth Yalavarthi 				    uint16_t nb_ops);
75*c775df1cSSrikanth Yalavarthi 
76*c775df1cSSrikanth Yalavarthi /**
7736d0b09eSSrikanth Yalavarthi  * Definitions of all functions exported by a driver through the generic structure of type
7836d0b09eSSrikanth Yalavarthi  * *ml_dev_ops* supplied in the *rte_ml_dev* structure associated with a device.
7936d0b09eSSrikanth Yalavarthi  */
8036d0b09eSSrikanth Yalavarthi 
8136d0b09eSSrikanth Yalavarthi /**
8236d0b09eSSrikanth Yalavarthi  * @internal
8336d0b09eSSrikanth Yalavarthi  *
8436d0b09eSSrikanth Yalavarthi  * Function used to get device information.
8536d0b09eSSrikanth Yalavarthi  *
8636d0b09eSSrikanth Yalavarthi  * @param dev
8736d0b09eSSrikanth Yalavarthi  *	ML device pointer.
8836d0b09eSSrikanth Yalavarthi  * @param dev_info
8936d0b09eSSrikanth Yalavarthi  *	Pointer to info structure.
9036d0b09eSSrikanth Yalavarthi  *
9136d0b09eSSrikanth Yalavarthi  * @return
9236d0b09eSSrikanth Yalavarthi  *	- 0 on success.
9336d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure.
9436d0b09eSSrikanth Yalavarthi  */
9536d0b09eSSrikanth Yalavarthi typedef int (*mldev_info_get_t)(struct rte_ml_dev *dev, struct rte_ml_dev_info *dev_info);
9636d0b09eSSrikanth Yalavarthi 
9736d0b09eSSrikanth Yalavarthi /**
9836d0b09eSSrikanth Yalavarthi  * @internal
9936d0b09eSSrikanth Yalavarthi  *
10036d0b09eSSrikanth Yalavarthi  * Function used to configure device.
10136d0b09eSSrikanth Yalavarthi  *
10236d0b09eSSrikanth Yalavarthi  * @param dev
10336d0b09eSSrikanth Yalavarthi  *	ML device pointer.
10436d0b09eSSrikanth Yalavarthi  * @param config
10536d0b09eSSrikanth Yalavarthi  *	ML device configurations.
10636d0b09eSSrikanth Yalavarthi  *
10736d0b09eSSrikanth Yalavarthi  * @return
10836d0b09eSSrikanth Yalavarthi  *	- 0 on success
10936d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure.
11036d0b09eSSrikanth Yalavarthi  */
11136d0b09eSSrikanth Yalavarthi typedef int (*mldev_configure_t)(struct rte_ml_dev *dev, const struct rte_ml_dev_config *config);
11236d0b09eSSrikanth Yalavarthi 
11336d0b09eSSrikanth Yalavarthi /**
11436d0b09eSSrikanth Yalavarthi  * @internal
11536d0b09eSSrikanth Yalavarthi  *
11636d0b09eSSrikanth Yalavarthi  * Function used to close a configured device.
11736d0b09eSSrikanth Yalavarthi  *
11836d0b09eSSrikanth Yalavarthi  * @param dev
11936d0b09eSSrikanth Yalavarthi  *	ML device pointer.
12036d0b09eSSrikanth Yalavarthi  *
12136d0b09eSSrikanth Yalavarthi  * @return
12236d0b09eSSrikanth Yalavarthi  *	- 0 on success.
12336d0b09eSSrikanth Yalavarthi  *	- -EAGAIN if can't close as device is busy.
12436d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure, other than busy.
12536d0b09eSSrikanth Yalavarthi  */
12636d0b09eSSrikanth Yalavarthi typedef int (*mldev_close_t)(struct rte_ml_dev *dev);
12736d0b09eSSrikanth Yalavarthi 
12836d0b09eSSrikanth Yalavarthi /**
12936d0b09eSSrikanth Yalavarthi  * @internal
13036d0b09eSSrikanth Yalavarthi  *
13136d0b09eSSrikanth Yalavarthi  * Function used to start 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  *	- < 0, error code on failure.
13936d0b09eSSrikanth Yalavarthi  */
14036d0b09eSSrikanth Yalavarthi typedef int (*mldev_start_t)(struct rte_ml_dev *dev);
14136d0b09eSSrikanth Yalavarthi 
14236d0b09eSSrikanth Yalavarthi /**
14336d0b09eSSrikanth Yalavarthi  * @internal
14436d0b09eSSrikanth Yalavarthi  *
14536d0b09eSSrikanth Yalavarthi  * Function used to stop a configured device.
14636d0b09eSSrikanth Yalavarthi  *
14736d0b09eSSrikanth Yalavarthi  * @param dev
14836d0b09eSSrikanth Yalavarthi  *	ML device pointer.
14936d0b09eSSrikanth Yalavarthi  *
15036d0b09eSSrikanth Yalavarthi  * @return
15136d0b09eSSrikanth Yalavarthi  *	- 0 on success.
15236d0b09eSSrikanth Yalavarthi  *	- < 0, error code on failure.
15336d0b09eSSrikanth Yalavarthi  */
15436d0b09eSSrikanth Yalavarthi typedef int (*mldev_stop_t)(struct rte_ml_dev *dev);
15536d0b09eSSrikanth Yalavarthi 
15636d0b09eSSrikanth Yalavarthi /**
15736d0b09eSSrikanth Yalavarthi  * @internal
15836d0b09eSSrikanth Yalavarthi  *
159b5f0df64SSrikanth Yalavarthi  * Setup a queue pair for a device.
160b5f0df64SSrikanth Yalavarthi  *
161b5f0df64SSrikanth Yalavarthi  * @param dev
162b5f0df64SSrikanth Yalavarthi  *	ML device pointer.
163b5f0df64SSrikanth Yalavarthi  * @param queue_pair_id
164b5f0df64SSrikanth Yalavarthi  *	Queue pair index.
165b5f0df64SSrikanth Yalavarthi  * @param queue_pair_conf
166b5f0df64SSrikanth Yalavarthi  *	Queue pair configuration structure.
167b5f0df64SSrikanth Yalavarthi  * @param socket_id
168b5f0df64SSrikanth Yalavarthi  *	Socket index.
169b5f0df64SSrikanth Yalavarthi  *
170b5f0df64SSrikanth Yalavarthi  * @return
171b5f0df64SSrikanth Yalavarthi  *	- 0 on success.
172b5f0df64SSrikanth Yalavarthi  *	- < 0, error on failure.
173b5f0df64SSrikanth Yalavarthi  */
174b5f0df64SSrikanth Yalavarthi typedef int (*mldev_queue_pair_setup_t)(struct rte_ml_dev *dev, uint16_t queue_pair_id,
175b5f0df64SSrikanth Yalavarthi 					const struct rte_ml_dev_qp_conf *queue_pair_conf,
176b5f0df64SSrikanth Yalavarthi 					int socket_id);
177b5f0df64SSrikanth Yalavarthi 
178b5f0df64SSrikanth Yalavarthi /**
179b5f0df64SSrikanth Yalavarthi  * @internal
180b5f0df64SSrikanth Yalavarthi  *
181b5f0df64SSrikanth Yalavarthi  * Release memory resources allocated by given queue pair.
182b5f0df64SSrikanth Yalavarthi  *
183b5f0df64SSrikanth Yalavarthi  * @param dev
184b5f0df64SSrikanth Yalavarthi  *	ML device pointer.
185b5f0df64SSrikanth Yalavarthi  * @param queue_pair_id
186b5f0df64SSrikanth Yalavarthi  *	Queue pair index.
187b5f0df64SSrikanth Yalavarthi  *
188b5f0df64SSrikanth Yalavarthi  * @return
189b5f0df64SSrikanth Yalavarthi  *	- 0 on success.
190b5f0df64SSrikanth Yalavarthi  *	- -EAGAIN, if can't close as device is busy.
191b5f0df64SSrikanth Yalavarthi  */
192b5f0df64SSrikanth Yalavarthi typedef int (*mldev_queue_pair_release_t)(struct rte_ml_dev *dev, uint16_t queue_pair_id);
193b5f0df64SSrikanth Yalavarthi 
194b5f0df64SSrikanth Yalavarthi /**
195b5f0df64SSrikanth Yalavarthi  * @internal
196b5f0df64SSrikanth Yalavarthi  *
1974a662f54SSrikanth Yalavarthi  * Function used to load an ML model.
1984a662f54SSrikanth Yalavarthi  *
1994a662f54SSrikanth Yalavarthi  * @param dev
2004a662f54SSrikanth Yalavarthi  *	ML device pointer.
2014a662f54SSrikanth Yalavarthi  * @param params
2024a662f54SSrikanth Yalavarthi  *	Model load params.
2034a662f54SSrikanth Yalavarthi  * @param model_id
2044a662f54SSrikanth Yalavarthi  *	Model ID returned by the library.
2054a662f54SSrikanth Yalavarthi  *
2064a662f54SSrikanth Yalavarthi  * @return
2074a662f54SSrikanth Yalavarthi  *	- 0 on success.
2084a662f54SSrikanth Yalavarthi  *	- < 0, error on failure.
2094a662f54SSrikanth Yalavarthi  */
2104a662f54SSrikanth Yalavarthi typedef int (*mldev_model_load_t)(struct rte_ml_dev *dev, struct rte_ml_model_params *params,
2114a662f54SSrikanth Yalavarthi 				  uint16_t *model_id);
2124a662f54SSrikanth Yalavarthi 
2134a662f54SSrikanth Yalavarthi /**
2144a662f54SSrikanth Yalavarthi  * @internal
2154a662f54SSrikanth Yalavarthi  *
2164a662f54SSrikanth Yalavarthi  * Function used to unload an ML model.
2174a662f54SSrikanth Yalavarthi  *
2184a662f54SSrikanth Yalavarthi  * @param dev
2194a662f54SSrikanth Yalavarthi  *	ML device pointer.
2204a662f54SSrikanth Yalavarthi  * @param model_id
2214a662f54SSrikanth Yalavarthi  *	Model ID to use.
2224a662f54SSrikanth Yalavarthi  *
2234a662f54SSrikanth Yalavarthi  * @return
2244a662f54SSrikanth Yalavarthi  *	- 0 on success.
2254a662f54SSrikanth Yalavarthi  *	- < 0, error on failure.
2264a662f54SSrikanth Yalavarthi  */
2274a662f54SSrikanth Yalavarthi typedef int (*mldev_model_unload_t)(struct rte_ml_dev *dev, uint16_t model_id);
2284a662f54SSrikanth Yalavarthi 
2294a662f54SSrikanth Yalavarthi /**
2304a662f54SSrikanth Yalavarthi  * @internal
2314a662f54SSrikanth Yalavarthi  *
2324a662f54SSrikanth Yalavarthi  * Function used to start an ML model.
2334a662f54SSrikanth Yalavarthi  *
2344a662f54SSrikanth Yalavarthi  * @param dev
2354a662f54SSrikanth Yalavarthi  *	ML device pointer.
2364a662f54SSrikanth Yalavarthi  * @param model_id
2374a662f54SSrikanth Yalavarthi  *	Model ID to use.
2384a662f54SSrikanth Yalavarthi  *
2394a662f54SSrikanth Yalavarthi  * @return
2404a662f54SSrikanth Yalavarthi  *	- 0 on success.
2414a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
2424a662f54SSrikanth Yalavarthi  */
2434a662f54SSrikanth Yalavarthi typedef int (*mldev_model_start_t)(struct rte_ml_dev *dev, uint16_t model_id);
2444a662f54SSrikanth Yalavarthi 
2454a662f54SSrikanth Yalavarthi /**
2464a662f54SSrikanth Yalavarthi  * @internal
2474a662f54SSrikanth Yalavarthi  *
2484a662f54SSrikanth Yalavarthi  * Function used to stop an ML model.
2494a662f54SSrikanth Yalavarthi  *
2504a662f54SSrikanth Yalavarthi  * @param dev
2514a662f54SSrikanth Yalavarthi  *	ML device pointer.
2524a662f54SSrikanth Yalavarthi  * @param model_id
2534a662f54SSrikanth Yalavarthi  *	Model ID to use.
2544a662f54SSrikanth Yalavarthi  *
2554a662f54SSrikanth Yalavarthi  * @return
2564a662f54SSrikanth Yalavarthi  *	- 0 on success.
2574a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
2584a662f54SSrikanth Yalavarthi  */
2594a662f54SSrikanth Yalavarthi typedef int (*mldev_model_stop_t)(struct rte_ml_dev *dev, uint16_t model_id);
2604a662f54SSrikanth Yalavarthi 
2614a662f54SSrikanth Yalavarthi /**
2624a662f54SSrikanth Yalavarthi  * @internal
2634a662f54SSrikanth Yalavarthi  *
2644a662f54SSrikanth Yalavarthi  * Get info about a model.
2654a662f54SSrikanth Yalavarthi  *
2664a662f54SSrikanth Yalavarthi  * @param dev
2674a662f54SSrikanth Yalavarthi  *	ML device pointer.
2684a662f54SSrikanth Yalavarthi  * @param model_id
2694a662f54SSrikanth Yalavarthi  *	Model ID to use.
2704a662f54SSrikanth Yalavarthi  * @param model_info
2714a662f54SSrikanth Yalavarthi  *	Pointer to model info structure.
2724a662f54SSrikanth Yalavarthi  *
2734a662f54SSrikanth Yalavarthi  * @return
2744a662f54SSrikanth Yalavarthi  *	- 0 on success.
2754a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
2764a662f54SSrikanth Yalavarthi  */
2774a662f54SSrikanth Yalavarthi typedef int (*mldev_model_info_get_t)(struct rte_ml_dev *dev, uint16_t model_id,
2784a662f54SSrikanth Yalavarthi 				      struct rte_ml_model_info *model_info);
2794a662f54SSrikanth Yalavarthi 
2804a662f54SSrikanth Yalavarthi /**
2814a662f54SSrikanth Yalavarthi  * @internal
2824a662f54SSrikanth Yalavarthi  *
2834a662f54SSrikanth Yalavarthi  * Update model params.
2844a662f54SSrikanth Yalavarthi  *
2854a662f54SSrikanth Yalavarthi  * @param dev
2864a662f54SSrikanth Yalavarthi  *	ML device pointer.
2874a662f54SSrikanth Yalavarthi  * @param model_id
2884a662f54SSrikanth Yalavarthi  *	Model ID to use.
2894a662f54SSrikanth Yalavarthi  * @param buffer
2904a662f54SSrikanth Yalavarthi  *	Pointer to model params.
2914a662f54SSrikanth Yalavarthi  *
2924a662f54SSrikanth Yalavarthi  * @return
2934a662f54SSrikanth Yalavarthi  *	- 0 on success.
2944a662f54SSrikanth Yalavarthi  *	- <0, error on failure.
2954a662f54SSrikanth Yalavarthi  */
2964a662f54SSrikanth Yalavarthi typedef int (*mldev_model_params_update_t)(struct rte_ml_dev *dev, uint16_t model_id, void *buffer);
2974a662f54SSrikanth Yalavarthi 
2984a662f54SSrikanth Yalavarthi /**
2994a662f54SSrikanth Yalavarthi  * @internal
3004a662f54SSrikanth Yalavarthi  *
30150818b0aSSrikanth Yalavarthi  * Get size of input buffers.
30250818b0aSSrikanth Yalavarthi  *
30350818b0aSSrikanth Yalavarthi  * @param dev
30450818b0aSSrikanth Yalavarthi  *	ML device pointer.
30550818b0aSSrikanth Yalavarthi  * @param model_id
30650818b0aSSrikanth Yalavarthi  *	Model ID to use.
30750818b0aSSrikanth Yalavarthi  * @param nb_batches
30850818b0aSSrikanth Yalavarthi  *	Number of batches.
30950818b0aSSrikanth Yalavarthi  * @param input_qsize
31050818b0aSSrikanth Yalavarthi  *	Size of quantized input.
31150818b0aSSrikanth Yalavarthi  * @param input_dsize
31250818b0aSSrikanth Yalavarthi  *	Size of dequantized input.
31350818b0aSSrikanth Yalavarthi  *
31450818b0aSSrikanth Yalavarthi  * @return
31550818b0aSSrikanth Yalavarthi  *	- 0 on success.
31650818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
31750818b0aSSrikanth Yalavarthi  */
31850818b0aSSrikanth Yalavarthi typedef int (*mldev_io_input_size_get_t)(struct rte_ml_dev *dev, uint16_t model_id,
31950818b0aSSrikanth Yalavarthi 					 uint32_t nb_batches, uint64_t *input_qsize,
32050818b0aSSrikanth Yalavarthi 					 uint64_t *input_dsize);
32150818b0aSSrikanth Yalavarthi 
32250818b0aSSrikanth Yalavarthi /**
32350818b0aSSrikanth Yalavarthi  * @internal
32450818b0aSSrikanth Yalavarthi  *
32550818b0aSSrikanth Yalavarthi  * Get size of output buffers.
32650818b0aSSrikanth Yalavarthi  *
32750818b0aSSrikanth Yalavarthi  * @param dev
32850818b0aSSrikanth Yalavarthi  *	ML device pointer.
32950818b0aSSrikanth Yalavarthi  * @param model_id
33050818b0aSSrikanth Yalavarthi  *	Model ID to use.
33150818b0aSSrikanth Yalavarthi  * @param nb_batches
33250818b0aSSrikanth Yalavarthi  *	Number of batches.
33350818b0aSSrikanth Yalavarthi  * @param output_qsize
33450818b0aSSrikanth Yalavarthi  *	Size of quantized output.
33550818b0aSSrikanth Yalavarthi  * @param output_dsize
33650818b0aSSrikanth Yalavarthi  *	Size of dequantized output.
33750818b0aSSrikanth Yalavarthi  *
33850818b0aSSrikanth Yalavarthi  * @return
33950818b0aSSrikanth Yalavarthi  *	- 0 on success.
34050818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
34150818b0aSSrikanth Yalavarthi  */
34250818b0aSSrikanth Yalavarthi typedef int (*mldev_io_output_size_get_t)(struct rte_ml_dev *dev, uint16_t model_id,
34350818b0aSSrikanth Yalavarthi 					  uint32_t nb_batches, uint64_t *output_qsize,
34450818b0aSSrikanth Yalavarthi 					  uint64_t *output_dsize);
34550818b0aSSrikanth Yalavarthi 
34650818b0aSSrikanth Yalavarthi /**
34750818b0aSSrikanth Yalavarthi  * @internal
34850818b0aSSrikanth Yalavarthi  *
34950818b0aSSrikanth Yalavarthi  * Quantize model data.
35050818b0aSSrikanth Yalavarthi  *
35150818b0aSSrikanth Yalavarthi  * @param dev
35250818b0aSSrikanth Yalavarthi  *	ML device pointer.
35350818b0aSSrikanth Yalavarthi  * @param model_id
35450818b0aSSrikanth Yalavarthi  *	Model ID to use.
35550818b0aSSrikanth Yalavarthi  * @param nb_batches
35650818b0aSSrikanth Yalavarthi  *	Number of batches.
35750818b0aSSrikanth Yalavarthi  * @param dbuffer
35850818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
35950818b0aSSrikanth Yalavarthi  * @param qbuffer
36050818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
36150818b0aSSrikanth Yalavarthi  *
36250818b0aSSrikanth Yalavarthi  * @return
36350818b0aSSrikanth Yalavarthi  *	- 0 on success.
36450818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
36550818b0aSSrikanth Yalavarthi  */
36650818b0aSSrikanth Yalavarthi typedef int (*mldev_io_quantize_t)(struct rte_ml_dev *dev, uint16_t model_id, uint16_t nb_batches,
36750818b0aSSrikanth Yalavarthi 				   void *dbuffer, void *qbuffer);
36850818b0aSSrikanth Yalavarthi 
36950818b0aSSrikanth Yalavarthi /**
37050818b0aSSrikanth Yalavarthi  * @internal
37150818b0aSSrikanth Yalavarthi  *
37250818b0aSSrikanth Yalavarthi  * Quantize model data.
37350818b0aSSrikanth Yalavarthi  *
37450818b0aSSrikanth Yalavarthi  * @param dev
37550818b0aSSrikanth Yalavarthi  *	ML device pointer.
37650818b0aSSrikanth Yalavarthi  * @param model_id
37750818b0aSSrikanth Yalavarthi  *	Model ID to use.
37850818b0aSSrikanth Yalavarthi  * @param nb_batches
37950818b0aSSrikanth Yalavarthi  *	Number of batches.
38050818b0aSSrikanth Yalavarthi  * @param qbuffer
38150818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
38250818b0aSSrikanth Yalavarthi  * @param dbuffer
38350818b0aSSrikanth Yalavarthi  *	Pointer t de-quantized data buffer.
38450818b0aSSrikanth Yalavarthi  *
38550818b0aSSrikanth Yalavarthi  * @return
38650818b0aSSrikanth Yalavarthi  *	- 0 on success.
38750818b0aSSrikanth Yalavarthi  *	- <0, error on failure.
38850818b0aSSrikanth Yalavarthi  */
38950818b0aSSrikanth Yalavarthi typedef int (*mldev_io_dequantize_t)(struct rte_ml_dev *dev, uint16_t model_id, uint16_t nb_batches,
39050818b0aSSrikanth Yalavarthi 				     void *qbuffer, void *dbuffer);
39150818b0aSSrikanth Yalavarthi 
39250818b0aSSrikanth Yalavarthi /**
39350818b0aSSrikanth Yalavarthi  * @internal
39450818b0aSSrikanth Yalavarthi  *
39536d0b09eSSrikanth Yalavarthi  * ML device operations function pointer table.
39636d0b09eSSrikanth Yalavarthi  */
39736d0b09eSSrikanth Yalavarthi struct rte_ml_dev_ops {
39836d0b09eSSrikanth Yalavarthi 	/** Get device information. */
39936d0b09eSSrikanth Yalavarthi 	mldev_info_get_t dev_info_get;
40036d0b09eSSrikanth Yalavarthi 
40136d0b09eSSrikanth Yalavarthi 	/** Configure device. */
40236d0b09eSSrikanth Yalavarthi 	mldev_configure_t dev_configure;
40336d0b09eSSrikanth Yalavarthi 
40436d0b09eSSrikanth Yalavarthi 	/** Close device. */
40536d0b09eSSrikanth Yalavarthi 	mldev_close_t dev_close;
40636d0b09eSSrikanth Yalavarthi 
40736d0b09eSSrikanth Yalavarthi 	/** Start device. */
40836d0b09eSSrikanth Yalavarthi 	mldev_start_t dev_start;
40936d0b09eSSrikanth Yalavarthi 
41036d0b09eSSrikanth Yalavarthi 	/** Stop device. */
41136d0b09eSSrikanth Yalavarthi 	mldev_stop_t dev_stop;
412b5f0df64SSrikanth Yalavarthi 
413b5f0df64SSrikanth Yalavarthi 	/** Set up a device queue pair. */
414b5f0df64SSrikanth Yalavarthi 	mldev_queue_pair_setup_t dev_queue_pair_setup;
415b5f0df64SSrikanth Yalavarthi 
416b5f0df64SSrikanth Yalavarthi 	/** Release a device queue pair. */
417b5f0df64SSrikanth Yalavarthi 	mldev_queue_pair_release_t dev_queue_pair_release;
4184a662f54SSrikanth Yalavarthi 
4194a662f54SSrikanth Yalavarthi 	/** Load an ML model. */
4204a662f54SSrikanth Yalavarthi 	mldev_model_load_t model_load;
4214a662f54SSrikanth Yalavarthi 
4224a662f54SSrikanth Yalavarthi 	/** Unload an ML model. */
4234a662f54SSrikanth Yalavarthi 	mldev_model_unload_t model_unload;
4244a662f54SSrikanth Yalavarthi 
4254a662f54SSrikanth Yalavarthi 	/** Start an ML model. */
4264a662f54SSrikanth Yalavarthi 	mldev_model_start_t model_start;
4274a662f54SSrikanth Yalavarthi 
4284a662f54SSrikanth Yalavarthi 	/** Stop an ML model. */
4294a662f54SSrikanth Yalavarthi 	mldev_model_stop_t model_stop;
4304a662f54SSrikanth Yalavarthi 
4314a662f54SSrikanth Yalavarthi 	/** Get model information. */
4324a662f54SSrikanth Yalavarthi 	mldev_model_info_get_t model_info_get;
4334a662f54SSrikanth Yalavarthi 
4344a662f54SSrikanth Yalavarthi 	/** Update model params. */
4354a662f54SSrikanth Yalavarthi 	mldev_model_params_update_t model_params_update;
43650818b0aSSrikanth Yalavarthi 
43750818b0aSSrikanth Yalavarthi 	/** Get input buffer size. */
43850818b0aSSrikanth Yalavarthi 	mldev_io_input_size_get_t io_input_size_get;
43950818b0aSSrikanth Yalavarthi 
44050818b0aSSrikanth Yalavarthi 	/** Get output buffer size. */
44150818b0aSSrikanth Yalavarthi 	mldev_io_output_size_get_t io_output_size_get;
44250818b0aSSrikanth Yalavarthi 
44350818b0aSSrikanth Yalavarthi 	/** Quantize data */
44450818b0aSSrikanth Yalavarthi 	mldev_io_quantize_t io_quantize;
44550818b0aSSrikanth Yalavarthi 
44650818b0aSSrikanth Yalavarthi 	/** De-quantize data */
44750818b0aSSrikanth Yalavarthi 	mldev_io_dequantize_t io_dequantize;
44836d0b09eSSrikanth Yalavarthi };
44936d0b09eSSrikanth Yalavarthi 
450ea80eafbSSrikanth Yalavarthi /**
451ea80eafbSSrikanth Yalavarthi  * @internal
452ea80eafbSSrikanth Yalavarthi  *
453ea80eafbSSrikanth Yalavarthi  * The data part, with no function pointers, associated with each device. This structure is safe to
454ea80eafbSSrikanth Yalavarthi  * place in shared memory to be common among different processes in a multi-process configuration.
455ea80eafbSSrikanth Yalavarthi  */
456ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_data {
457ea80eafbSSrikanth Yalavarthi 	/** Device ID for this instance. */
458ea80eafbSSrikanth Yalavarthi 	int16_t dev_id;
459ea80eafbSSrikanth Yalavarthi 
460ea80eafbSSrikanth Yalavarthi 	/** Socket ID where memory is allocated. */
461ea80eafbSSrikanth Yalavarthi 	int16_t socket_id;
462ea80eafbSSrikanth Yalavarthi 
463ea80eafbSSrikanth Yalavarthi 	/** Device state: STOPPED(0) / STARTED(1) */
464ea80eafbSSrikanth Yalavarthi 	__extension__ uint8_t dev_started : 1;
465ea80eafbSSrikanth Yalavarthi 
466ea80eafbSSrikanth Yalavarthi 	/** Number of device queue pairs. */
467ea80eafbSSrikanth Yalavarthi 	uint16_t nb_queue_pairs;
468ea80eafbSSrikanth Yalavarthi 
469ea80eafbSSrikanth Yalavarthi 	/** Number of ML models. */
470ea80eafbSSrikanth Yalavarthi 	uint16_t nb_models;
471ea80eafbSSrikanth Yalavarthi 
472ea80eafbSSrikanth Yalavarthi 	/** Array of pointers to queue pairs. */
473ea80eafbSSrikanth Yalavarthi 	void **queue_pairs;
474ea80eafbSSrikanth Yalavarthi 
475ea80eafbSSrikanth Yalavarthi 	/** Array of pointers to ML models. */
476ea80eafbSSrikanth Yalavarthi 	void **models;
477ea80eafbSSrikanth Yalavarthi 
478ea80eafbSSrikanth Yalavarthi 	/** PMD-specific private data. */
479ea80eafbSSrikanth Yalavarthi 	void *dev_private;
480ea80eafbSSrikanth Yalavarthi 
481ea80eafbSSrikanth Yalavarthi 	/** Unique identifier name. */
482ea80eafbSSrikanth Yalavarthi 	char name[RTE_ML_STR_MAX];
483ea80eafbSSrikanth Yalavarthi };
484ea80eafbSSrikanth Yalavarthi 
485ea80eafbSSrikanth Yalavarthi /**
486ea80eafbSSrikanth Yalavarthi  * @internal
487ea80eafbSSrikanth Yalavarthi  *
488ea80eafbSSrikanth Yalavarthi  * The data structure associated with each ML device.
489ea80eafbSSrikanth Yalavarthi  */
490ea80eafbSSrikanth Yalavarthi struct rte_ml_dev {
491*c775df1cSSrikanth Yalavarthi 	/** Pointer to PMD enqueue function. */
492*c775df1cSSrikanth Yalavarthi 	mldev_enqueue_t enqueue_burst;
493*c775df1cSSrikanth Yalavarthi 
494*c775df1cSSrikanth Yalavarthi 	/** Pointer to PMD dequeue function. */
495*c775df1cSSrikanth Yalavarthi 	mldev_dequeue_t dequeue_burst;
496*c775df1cSSrikanth Yalavarthi 
497ea80eafbSSrikanth Yalavarthi 	/** Pointer to device data. */
498ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev_data *data;
499ea80eafbSSrikanth Yalavarthi 
50036d0b09eSSrikanth Yalavarthi 	/** Functions exported by PMD. */
50136d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev_ops *dev_ops;
50236d0b09eSSrikanth Yalavarthi 
503ea80eafbSSrikanth Yalavarthi 	/** Backing RTE device. */
504ea80eafbSSrikanth Yalavarthi 	struct rte_device *device;
505ea80eafbSSrikanth Yalavarthi 
506ea80eafbSSrikanth Yalavarthi 	/** Flag indicating the device is attached. */
507ea80eafbSSrikanth Yalavarthi 	__extension__ uint8_t attached : 1;
508ea80eafbSSrikanth Yalavarthi } __rte_cache_aligned;
509ea80eafbSSrikanth Yalavarthi 
510ea80eafbSSrikanth Yalavarthi /**
511ea80eafbSSrikanth Yalavarthi  * @internal
512ea80eafbSSrikanth Yalavarthi  *
513ea80eafbSSrikanth Yalavarthi  * Global structure used for maintaining state of allocated ML devices.
514ea80eafbSSrikanth Yalavarthi  */
515ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_global {
516ea80eafbSSrikanth Yalavarthi 	/** Device information array. */
517ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev *devs;
518ea80eafbSSrikanth Yalavarthi 
519ea80eafbSSrikanth Yalavarthi 	/** Device private data array. */
520ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev_data **data;
521ea80eafbSSrikanth Yalavarthi 
522ea80eafbSSrikanth Yalavarthi 	/** Number of devices found. */
523ea80eafbSSrikanth Yalavarthi 	uint8_t nb_devs;
524ea80eafbSSrikanth Yalavarthi 
525ea80eafbSSrikanth Yalavarthi 	/** Maximum number of devices. */
526ea80eafbSSrikanth Yalavarthi 	uint8_t max_devs;
527ea80eafbSSrikanth Yalavarthi };
528ea80eafbSSrikanth Yalavarthi 
529ea80eafbSSrikanth Yalavarthi #ifdef __cplusplus
530ea80eafbSSrikanth Yalavarthi }
531ea80eafbSSrikanth Yalavarthi #endif
532ea80eafbSSrikanth Yalavarthi 
533ea80eafbSSrikanth Yalavarthi #endif /* RTE_MLDEV_INTERNAL_H */
534