xref: /dpdk/lib/mldev/rte_mldev_core.h (revision ea80eafbd4d821c13a8caa0ef06879c44a398d53)
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