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