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