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