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_PMD_H 6*ea80eafbSSrikanth Yalavarthi #define RTE_MLDEV_PMD_H 7*ea80eafbSSrikanth Yalavarthi 8*ea80eafbSSrikanth Yalavarthi /** 9*ea80eafbSSrikanth Yalavarthi * @file 10*ea80eafbSSrikanth Yalavarthi * 11*ea80eafbSSrikanth Yalavarthi * ML Device PMD interface 12*ea80eafbSSrikanth Yalavarthi * 13*ea80eafbSSrikanth Yalavarthi * @note 14*ea80eafbSSrikanth Yalavarthi * These APIs are for MLDEV PMDs only and user applications should not call them directly. 15*ea80eafbSSrikanth Yalavarthi */ 16*ea80eafbSSrikanth Yalavarthi 17*ea80eafbSSrikanth Yalavarthi #ifdef __cplusplus 18*ea80eafbSSrikanth Yalavarthi extern "C" { 19*ea80eafbSSrikanth Yalavarthi #endif 20*ea80eafbSSrikanth Yalavarthi 21*ea80eafbSSrikanth Yalavarthi #include <stdint.h> 22*ea80eafbSSrikanth Yalavarthi 23*ea80eafbSSrikanth Yalavarthi #include <rte_common.h> 24*ea80eafbSSrikanth Yalavarthi #include <rte_compat.h> 25*ea80eafbSSrikanth Yalavarthi #include <rte_mldev.h> 26*ea80eafbSSrikanth Yalavarthi #include <rte_mldev_core.h> 27*ea80eafbSSrikanth Yalavarthi 28*ea80eafbSSrikanth Yalavarthi /** 29*ea80eafbSSrikanth Yalavarthi * @internal 30*ea80eafbSSrikanth Yalavarthi * 31*ea80eafbSSrikanth Yalavarthi * Initialisation parameters for ML devices. 32*ea80eafbSSrikanth Yalavarthi */ 33*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_pmd_init_params { 34*ea80eafbSSrikanth Yalavarthi /** Socket to use for memory allocation. */ 35*ea80eafbSSrikanth Yalavarthi uint8_t socket_id; 36*ea80eafbSSrikanth Yalavarthi 37*ea80eafbSSrikanth Yalavarthi /** Size of device private data. */ 38*ea80eafbSSrikanth Yalavarthi uint64_t private_data_size; 39*ea80eafbSSrikanth Yalavarthi }; 40*ea80eafbSSrikanth Yalavarthi 41*ea80eafbSSrikanth Yalavarthi /** 42*ea80eafbSSrikanth Yalavarthi * @internal 43*ea80eafbSSrikanth Yalavarthi * 44*ea80eafbSSrikanth Yalavarthi * Get the ML device pointer for the device. Assumes a valid device index. 45*ea80eafbSSrikanth Yalavarthi * 46*ea80eafbSSrikanth Yalavarthi * @param dev_id 47*ea80eafbSSrikanth Yalavarthi * Device ID value to select the device structure. 48*ea80eafbSSrikanth Yalavarthi * 49*ea80eafbSSrikanth Yalavarthi * @return 50*ea80eafbSSrikanth Yalavarthi * The rte_ml_dev pointer for the given device ID. 51*ea80eafbSSrikanth Yalavarthi */ 52*ea80eafbSSrikanth Yalavarthi __rte_internal 53*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev * 54*ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_get_dev(int16_t dev_id); 55*ea80eafbSSrikanth Yalavarthi 56*ea80eafbSSrikanth Yalavarthi /** 57*ea80eafbSSrikanth Yalavarthi * @internal 58*ea80eafbSSrikanth Yalavarthi * 59*ea80eafbSSrikanth Yalavarthi * Get the rte_ml_dev structure device pointer for the named device. 60*ea80eafbSSrikanth Yalavarthi * 61*ea80eafbSSrikanth Yalavarthi * @param name 62*ea80eafbSSrikanth Yalavarthi * Device name to select the device structure. 63*ea80eafbSSrikanth Yalavarthi * 64*ea80eafbSSrikanth Yalavarthi * @return 65*ea80eafbSSrikanth Yalavarthi * The rte_ml_dev pointer for the given device ID. 66*ea80eafbSSrikanth Yalavarthi */ 67*ea80eafbSSrikanth Yalavarthi __rte_internal 68*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev * 69*ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_get_named_dev(const char *name); 70*ea80eafbSSrikanth Yalavarthi 71*ea80eafbSSrikanth Yalavarthi /** 72*ea80eafbSSrikanth Yalavarthi * @internal 73*ea80eafbSSrikanth Yalavarthi * 74*ea80eafbSSrikanth Yalavarthi * Allocates a new mldev slot for an ML device and returns the pointer to that slot for use. 75*ea80eafbSSrikanth Yalavarthi * Function for internal use by dummy drivers. 76*ea80eafbSSrikanth Yalavarthi * 77*ea80eafbSSrikanth Yalavarthi * @param name 78*ea80eafbSSrikanth Yalavarthi * Unique identifier name for each device. 79*ea80eafbSSrikanth Yalavarthi * @param socket_id 80*ea80eafbSSrikanth Yalavarthi * Socket to allocate resources. 81*ea80eafbSSrikanth Yalavarthi * 82*ea80eafbSSrikanth Yalavarthi * @return 83*ea80eafbSSrikanth Yalavarthi * Slot in the rte_ml_dev_devices array for a new device. 84*ea80eafbSSrikanth Yalavarthi */ 85*ea80eafbSSrikanth Yalavarthi __rte_internal 86*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev * 87*ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_allocate(const char *name, uint8_t socket_id); 88*ea80eafbSSrikanth Yalavarthi 89*ea80eafbSSrikanth Yalavarthi /** 90*ea80eafbSSrikanth Yalavarthi * @internal 91*ea80eafbSSrikanth Yalavarthi * 92*ea80eafbSSrikanth Yalavarthi * Release the specified mldev device. 93*ea80eafbSSrikanth Yalavarthi * 94*ea80eafbSSrikanth Yalavarthi * @param dev 95*ea80eafbSSrikanth Yalavarthi * ML device. 96*ea80eafbSSrikanth Yalavarthi * @return 97*ea80eafbSSrikanth Yalavarthi * - 0 on success. 98*ea80eafbSSrikanth Yalavarthi * - < 0, error code on failure. 99*ea80eafbSSrikanth Yalavarthi */ 100*ea80eafbSSrikanth Yalavarthi __rte_internal 101*ea80eafbSSrikanth Yalavarthi int 102*ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_release(struct rte_ml_dev *dev); 103*ea80eafbSSrikanth Yalavarthi 104*ea80eafbSSrikanth Yalavarthi /** 105*ea80eafbSSrikanth Yalavarthi * @internal 106*ea80eafbSSrikanth Yalavarthi * 107*ea80eafbSSrikanth Yalavarthi * PMD assist function to provide boiler plate code for ML driver to create and allocate resources 108*ea80eafbSSrikanth Yalavarthi * for a new ML PMD device instance. 109*ea80eafbSSrikanth Yalavarthi * 110*ea80eafbSSrikanth Yalavarthi * @param name 111*ea80eafbSSrikanth Yalavarthi * ML device name. 112*ea80eafbSSrikanth Yalavarthi * @param device 113*ea80eafbSSrikanth Yalavarthi * Base device handle. 114*ea80eafbSSrikanth Yalavarthi * @param params 115*ea80eafbSSrikanth Yalavarthi * PMD initialisation parameters. 116*ea80eafbSSrikanth Yalavarthi * 117*ea80eafbSSrikanth Yalavarthi * @return 118*ea80eafbSSrikanth Yalavarthi * - ML device instance on success. 119*ea80eafbSSrikanth Yalavarthi * - NULL on failure. 120*ea80eafbSSrikanth Yalavarthi */ 121*ea80eafbSSrikanth Yalavarthi __rte_internal 122*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev * 123*ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_create(const char *name, struct rte_device *device, 124*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev_pmd_init_params *params); 125*ea80eafbSSrikanth Yalavarthi 126*ea80eafbSSrikanth Yalavarthi /** 127*ea80eafbSSrikanth Yalavarthi * @internal 128*ea80eafbSSrikanth Yalavarthi * 129*ea80eafbSSrikanth Yalavarthi * PMD assist function to provide boiler plate code for ML driver to destroy and free resources 130*ea80eafbSSrikanth Yalavarthi * associated with a ML PMD device instance. 131*ea80eafbSSrikanth Yalavarthi * 132*ea80eafbSSrikanth Yalavarthi * @param mldev 133*ea80eafbSSrikanth Yalavarthi * ML device instance. 134*ea80eafbSSrikanth Yalavarthi * 135*ea80eafbSSrikanth Yalavarthi * @return 136*ea80eafbSSrikanth Yalavarthi * - 0 on success. 137*ea80eafbSSrikanth Yalavarthi * - < 0, error code on failure. 138*ea80eafbSSrikanth Yalavarthi */ 139*ea80eafbSSrikanth Yalavarthi __rte_internal 140*ea80eafbSSrikanth Yalavarthi int 141*ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_destroy(struct rte_ml_dev *mldev); 142*ea80eafbSSrikanth Yalavarthi 143*ea80eafbSSrikanth Yalavarthi #ifdef __cplusplus 144*ea80eafbSSrikanth Yalavarthi } 145*ea80eafbSSrikanth Yalavarthi #endif 146*ea80eafbSSrikanth Yalavarthi 147*ea80eafbSSrikanth Yalavarthi #endif /* RTE_MLDEV_PMD_H */ 148