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