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