1*ea80eafbSSrikanth Yalavarthi /* SPDX-License-Identifier: BSD-3-Clause 2*ea80eafbSSrikanth Yalavarthi * Copyright (c) 2022 Marvell. 3*ea80eafbSSrikanth Yalavarthi */ 4*ea80eafbSSrikanth Yalavarthi 5*ea80eafbSSrikanth Yalavarthi #ifndef RTE_MLDEV_INTERNAL_H 6*ea80eafbSSrikanth Yalavarthi #define RTE_MLDEV_INTERNAL_H 7*ea80eafbSSrikanth Yalavarthi 8*ea80eafbSSrikanth Yalavarthi /** 9*ea80eafbSSrikanth Yalavarthi * @file 10*ea80eafbSSrikanth Yalavarthi * 11*ea80eafbSSrikanth Yalavarthi * MLDEV internal header 12*ea80eafbSSrikanth Yalavarthi * 13*ea80eafbSSrikanth Yalavarthi * This file contains MLDEV private data structures and macros. 14*ea80eafbSSrikanth Yalavarthi * 15*ea80eafbSSrikanth Yalavarthi * @note 16*ea80eafbSSrikanth Yalavarthi * These APIs are for MLDEV PMDs and library only. 17*ea80eafbSSrikanth Yalavarthi */ 18*ea80eafbSSrikanth Yalavarthi 19*ea80eafbSSrikanth Yalavarthi #ifdef __cplusplus 20*ea80eafbSSrikanth Yalavarthi extern "C" { 21*ea80eafbSSrikanth Yalavarthi #endif 22*ea80eafbSSrikanth Yalavarthi 23*ea80eafbSSrikanth Yalavarthi #include <stdint.h> 24*ea80eafbSSrikanth Yalavarthi 25*ea80eafbSSrikanth Yalavarthi #include <dev_driver.h> 26*ea80eafbSSrikanth Yalavarthi #include <rte_common.h> 27*ea80eafbSSrikanth Yalavarthi #include <rte_log.h> 28*ea80eafbSSrikanth Yalavarthi #include <rte_mldev.h> 29*ea80eafbSSrikanth Yalavarthi 30*ea80eafbSSrikanth Yalavarthi /* Device state */ 31*ea80eafbSSrikanth Yalavarthi #define ML_DEV_DETACHED (0) 32*ea80eafbSSrikanth Yalavarthi #define ML_DEV_ATTACHED (1) 33*ea80eafbSSrikanth Yalavarthi 34*ea80eafbSSrikanth Yalavarthi /** 35*ea80eafbSSrikanth Yalavarthi * @internal 36*ea80eafbSSrikanth Yalavarthi * 37*ea80eafbSSrikanth Yalavarthi * The data part, with no function pointers, associated with each device. This structure is safe to 38*ea80eafbSSrikanth Yalavarthi * place in shared memory to be common among different processes in a multi-process configuration. 39*ea80eafbSSrikanth Yalavarthi */ 40*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_data { 41*ea80eafbSSrikanth Yalavarthi /** Device ID for this instance. */ 42*ea80eafbSSrikanth Yalavarthi int16_t dev_id; 43*ea80eafbSSrikanth Yalavarthi 44*ea80eafbSSrikanth Yalavarthi /** Socket ID where memory is allocated. */ 45*ea80eafbSSrikanth Yalavarthi int16_t socket_id; 46*ea80eafbSSrikanth Yalavarthi 47*ea80eafbSSrikanth Yalavarthi /** Device state: STOPPED(0) / STARTED(1) */ 48*ea80eafbSSrikanth Yalavarthi __extension__ uint8_t dev_started : 1; 49*ea80eafbSSrikanth Yalavarthi 50*ea80eafbSSrikanth Yalavarthi /** Number of device queue pairs. */ 51*ea80eafbSSrikanth Yalavarthi uint16_t nb_queue_pairs; 52*ea80eafbSSrikanth Yalavarthi 53*ea80eafbSSrikanth Yalavarthi /** Number of ML models. */ 54*ea80eafbSSrikanth Yalavarthi uint16_t nb_models; 55*ea80eafbSSrikanth Yalavarthi 56*ea80eafbSSrikanth Yalavarthi /** Array of pointers to queue pairs. */ 57*ea80eafbSSrikanth Yalavarthi void **queue_pairs; 58*ea80eafbSSrikanth Yalavarthi 59*ea80eafbSSrikanth Yalavarthi /** Array of pointers to ML models. */ 60*ea80eafbSSrikanth Yalavarthi void **models; 61*ea80eafbSSrikanth Yalavarthi 62*ea80eafbSSrikanth Yalavarthi /** PMD-specific private data. */ 63*ea80eafbSSrikanth Yalavarthi void *dev_private; 64*ea80eafbSSrikanth Yalavarthi 65*ea80eafbSSrikanth Yalavarthi /** Unique identifier name. */ 66*ea80eafbSSrikanth Yalavarthi char name[RTE_ML_STR_MAX]; 67*ea80eafbSSrikanth Yalavarthi }; 68*ea80eafbSSrikanth Yalavarthi 69*ea80eafbSSrikanth Yalavarthi /** 70*ea80eafbSSrikanth Yalavarthi * @internal 71*ea80eafbSSrikanth Yalavarthi * 72*ea80eafbSSrikanth Yalavarthi * The data structure associated with each ML device. 73*ea80eafbSSrikanth Yalavarthi */ 74*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev { 75*ea80eafbSSrikanth Yalavarthi /** Pointer to device data. */ 76*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_data *data; 77*ea80eafbSSrikanth Yalavarthi 78*ea80eafbSSrikanth Yalavarthi /** Backing RTE device. */ 79*ea80eafbSSrikanth Yalavarthi struct rte_device *device; 80*ea80eafbSSrikanth Yalavarthi 81*ea80eafbSSrikanth Yalavarthi /** Flag indicating the device is attached. */ 82*ea80eafbSSrikanth Yalavarthi __extension__ uint8_t attached : 1; 83*ea80eafbSSrikanth Yalavarthi } __rte_cache_aligned; 84*ea80eafbSSrikanth Yalavarthi 85*ea80eafbSSrikanth Yalavarthi /** 86*ea80eafbSSrikanth Yalavarthi * @internal 87*ea80eafbSSrikanth Yalavarthi * 88*ea80eafbSSrikanth Yalavarthi * Global structure used for maintaining state of allocated ML devices. 89*ea80eafbSSrikanth Yalavarthi */ 90*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_global { 91*ea80eafbSSrikanth Yalavarthi /** Device information array. */ 92*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev *devs; 93*ea80eafbSSrikanth Yalavarthi 94*ea80eafbSSrikanth Yalavarthi /** Device private data array. */ 95*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_data **data; 96*ea80eafbSSrikanth Yalavarthi 97*ea80eafbSSrikanth Yalavarthi /** Number of devices found. */ 98*ea80eafbSSrikanth Yalavarthi uint8_t nb_devs; 99*ea80eafbSSrikanth Yalavarthi 100*ea80eafbSSrikanth Yalavarthi /** Maximum number of devices. */ 101*ea80eafbSSrikanth Yalavarthi uint8_t max_devs; 102*ea80eafbSSrikanth Yalavarthi }; 103*ea80eafbSSrikanth Yalavarthi 104*ea80eafbSSrikanth Yalavarthi #ifdef __cplusplus 105*ea80eafbSSrikanth Yalavarthi } 106*ea80eafbSSrikanth Yalavarthi #endif 107*ea80eafbSSrikanth Yalavarthi 108*ea80eafbSSrikanth Yalavarthi #endif /* RTE_MLDEV_INTERNAL_H */ 109