xref: /dpdk/lib/mldev/rte_mldev.c (revision 698d9061eb38ff5dbbc13ea45c4a5f17e5df185a)
1d82cac58SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause
2d82cac58SJerin Jacob  * Copyright (c) 2022 Marvell.
3d82cac58SJerin Jacob  */
4d82cac58SJerin Jacob 
5ea80eafbSSrikanth Yalavarthi #include <rte_errno.h>
6d82cac58SJerin Jacob #include <rte_log.h>
7d82cac58SJerin Jacob #include <rte_mldev.h>
8ea80eafbSSrikanth Yalavarthi #include <rte_mldev_pmd.h>
9ea80eafbSSrikanth Yalavarthi 
10ea80eafbSSrikanth Yalavarthi #include <stdlib.h>
11ea80eafbSSrikanth Yalavarthi 
12ea80eafbSSrikanth Yalavarthi static struct rte_ml_dev_global ml_dev_globals = {
13ea80eafbSSrikanth Yalavarthi 	.devs = NULL, .data = NULL, .nb_devs = 0, .max_devs = RTE_MLDEV_DEFAULT_MAX};
14ea80eafbSSrikanth Yalavarthi 
151b365349SSrikanth Yalavarthi /*
161b365349SSrikanth Yalavarthi  * Private data structure of an operation pool.
171b365349SSrikanth Yalavarthi  *
181b365349SSrikanth Yalavarthi  * A structure that contains ml op_pool specific data that is
191b365349SSrikanth Yalavarthi  * appended after the mempool structure (in private data).
201b365349SSrikanth Yalavarthi  */
211b365349SSrikanth Yalavarthi struct rte_ml_op_pool_private {
221b365349SSrikanth Yalavarthi 	uint16_t user_size;
231b365349SSrikanth Yalavarthi 	/*< Size of private user data with each operation. */
241b365349SSrikanth Yalavarthi };
251b365349SSrikanth Yalavarthi 
26ea80eafbSSrikanth Yalavarthi struct rte_ml_dev *
27ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_get_dev(int16_t dev_id)
28ea80eafbSSrikanth Yalavarthi {
29ea80eafbSSrikanth Yalavarthi 	return &ml_dev_globals.devs[dev_id];
30ea80eafbSSrikanth Yalavarthi }
31ea80eafbSSrikanth Yalavarthi 
32ea80eafbSSrikanth Yalavarthi struct rte_ml_dev *
33ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_get_named_dev(const char *name)
34ea80eafbSSrikanth Yalavarthi {
35ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
36ea80eafbSSrikanth Yalavarthi 	int16_t dev_id;
37ea80eafbSSrikanth Yalavarthi 
38ea80eafbSSrikanth Yalavarthi 	if (name == NULL)
39ea80eafbSSrikanth Yalavarthi 		return NULL;
40ea80eafbSSrikanth Yalavarthi 
41ea80eafbSSrikanth Yalavarthi 	for (dev_id = 0; dev_id < ml_dev_globals.max_devs; dev_id++) {
42ea80eafbSSrikanth Yalavarthi 		dev = rte_ml_dev_pmd_get_dev(dev_id);
43ea80eafbSSrikanth Yalavarthi 		if ((dev->attached == ML_DEV_ATTACHED) && (strcmp(dev->data->name, name) == 0))
44ea80eafbSSrikanth Yalavarthi 			return dev;
45ea80eafbSSrikanth Yalavarthi 	}
46ea80eafbSSrikanth Yalavarthi 
47ea80eafbSSrikanth Yalavarthi 	return NULL;
48ea80eafbSSrikanth Yalavarthi }
49ea80eafbSSrikanth Yalavarthi 
50ea80eafbSSrikanth Yalavarthi struct rte_ml_dev *
51ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_allocate(const char *name, uint8_t socket_id)
52ea80eafbSSrikanth Yalavarthi {
53ea80eafbSSrikanth Yalavarthi 	char mz_name[RTE_MEMZONE_NAMESIZE];
54ea80eafbSSrikanth Yalavarthi 	const struct rte_memzone *mz;
55ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
56ea80eafbSSrikanth Yalavarthi 	int16_t dev_id;
57ea80eafbSSrikanth Yalavarthi 
58ea80eafbSSrikanth Yalavarthi 	/* implicit initialization of library before adding first device */
59ea80eafbSSrikanth Yalavarthi 	if (ml_dev_globals.devs == NULL) {
60ea80eafbSSrikanth Yalavarthi 		if (rte_ml_dev_init(RTE_MLDEV_DEFAULT_MAX) != 0)
61ea80eafbSSrikanth Yalavarthi 			return NULL;
62ea80eafbSSrikanth Yalavarthi 	}
63ea80eafbSSrikanth Yalavarthi 
64ea80eafbSSrikanth Yalavarthi 	if (rte_ml_dev_pmd_get_named_dev(name) != NULL) {
65ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "ML device with name %s already allocated!", name);
66ea80eafbSSrikanth Yalavarthi 		return NULL;
67ea80eafbSSrikanth Yalavarthi 	}
68ea80eafbSSrikanth Yalavarthi 
69ea80eafbSSrikanth Yalavarthi 	/* Get a free device ID */
70ea80eafbSSrikanth Yalavarthi 	for (dev_id = 0; dev_id < ml_dev_globals.max_devs; dev_id++) {
71ea80eafbSSrikanth Yalavarthi 		dev = rte_ml_dev_pmd_get_dev(dev_id);
72ea80eafbSSrikanth Yalavarthi 		if (dev->attached == ML_DEV_DETACHED)
73ea80eafbSSrikanth Yalavarthi 			break;
74ea80eafbSSrikanth Yalavarthi 	}
75ea80eafbSSrikanth Yalavarthi 
76ea80eafbSSrikanth Yalavarthi 	if (dev_id == ml_dev_globals.max_devs) {
77ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Reached maximum number of ML devices");
78ea80eafbSSrikanth Yalavarthi 		return NULL;
79ea80eafbSSrikanth Yalavarthi 	}
80ea80eafbSSrikanth Yalavarthi 
81ea80eafbSSrikanth Yalavarthi 	if (dev->data == NULL) {
82ea80eafbSSrikanth Yalavarthi 		/* Reserve memzone name */
83ea80eafbSSrikanth Yalavarthi 		sprintf(mz_name, "rte_ml_dev_data_%d", dev_id);
84ea80eafbSSrikanth Yalavarthi 		if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
85ea80eafbSSrikanth Yalavarthi 			mz = rte_memzone_reserve(mz_name, sizeof(struct rte_ml_dev_data), socket_id,
86ea80eafbSSrikanth Yalavarthi 						 0);
87ea80eafbSSrikanth Yalavarthi 			RTE_MLDEV_LOG(DEBUG, "PRIMARY: reserved memzone for %s (%p)", mz_name, mz);
88ea80eafbSSrikanth Yalavarthi 		} else {
89ea80eafbSSrikanth Yalavarthi 			mz = rte_memzone_lookup(mz_name);
90ea80eafbSSrikanth Yalavarthi 			RTE_MLDEV_LOG(DEBUG, "SECONDARY: looked up memzone for %s (%p)", mz_name,
91ea80eafbSSrikanth Yalavarthi 				      mz);
92ea80eafbSSrikanth Yalavarthi 		}
93ea80eafbSSrikanth Yalavarthi 
94ea80eafbSSrikanth Yalavarthi 		if (mz == NULL)
95ea80eafbSSrikanth Yalavarthi 			return NULL;
96ea80eafbSSrikanth Yalavarthi 
97ea80eafbSSrikanth Yalavarthi 		ml_dev_globals.data[dev_id] = mz->addr;
98ea80eafbSSrikanth Yalavarthi 		if (rte_eal_process_type() == RTE_PROC_PRIMARY)
99ea80eafbSSrikanth Yalavarthi 			memset(ml_dev_globals.data[dev_id], 0, sizeof(struct rte_ml_dev_data));
100ea80eafbSSrikanth Yalavarthi 
101ea80eafbSSrikanth Yalavarthi 		dev->data = ml_dev_globals.data[dev_id];
102ea80eafbSSrikanth Yalavarthi 		if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
103ea80eafbSSrikanth Yalavarthi 			strlcpy(dev->data->name, name, RTE_ML_STR_MAX);
104ea80eafbSSrikanth Yalavarthi 			dev->data->dev_id = dev_id;
105ea80eafbSSrikanth Yalavarthi 			dev->data->socket_id = socket_id;
106ea80eafbSSrikanth Yalavarthi 			dev->data->dev_started = 0;
107ea80eafbSSrikanth Yalavarthi 			RTE_MLDEV_LOG(DEBUG, "PRIMARY: init mldev data");
108ea80eafbSSrikanth Yalavarthi 		}
109ea80eafbSSrikanth Yalavarthi 
110ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(DEBUG, "Data for %s: dev_id %d, socket %u", dev->data->name,
111ea80eafbSSrikanth Yalavarthi 			      dev->data->dev_id, dev->data->socket_id);
112ea80eafbSSrikanth Yalavarthi 
113ea80eafbSSrikanth Yalavarthi 		dev->attached = ML_DEV_ATTACHED;
114ea80eafbSSrikanth Yalavarthi 		ml_dev_globals.nb_devs++;
115ea80eafbSSrikanth Yalavarthi 	}
116ea80eafbSSrikanth Yalavarthi 
117c775df1cSSrikanth Yalavarthi 	dev->enqueue_burst = NULL;
118c775df1cSSrikanth Yalavarthi 	dev->dequeue_burst = NULL;
119c775df1cSSrikanth Yalavarthi 
120ea80eafbSSrikanth Yalavarthi 	return dev;
121ea80eafbSSrikanth Yalavarthi }
122ea80eafbSSrikanth Yalavarthi 
123ea80eafbSSrikanth Yalavarthi int
124ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_release(struct rte_ml_dev *dev)
125ea80eafbSSrikanth Yalavarthi {
126ea80eafbSSrikanth Yalavarthi 	char mz_name[RTE_MEMZONE_NAMESIZE];
127ea80eafbSSrikanth Yalavarthi 	const struct rte_memzone *mz;
128ea80eafbSSrikanth Yalavarthi 	int16_t dev_id;
129ea80eafbSSrikanth Yalavarthi 	int ret = 0;
130ea80eafbSSrikanth Yalavarthi 
131ea80eafbSSrikanth Yalavarthi 	if (dev == NULL)
132ea80eafbSSrikanth Yalavarthi 		return -EINVAL;
133ea80eafbSSrikanth Yalavarthi 
134ea80eafbSSrikanth Yalavarthi 	dev_id = dev->data->dev_id;
135ea80eafbSSrikanth Yalavarthi 
136ea80eafbSSrikanth Yalavarthi 	/* Memzone lookup */
137ea80eafbSSrikanth Yalavarthi 	sprintf(mz_name, "rte_ml_dev_data_%d", dev_id);
138ea80eafbSSrikanth Yalavarthi 	mz = rte_memzone_lookup(mz_name);
139ea80eafbSSrikanth Yalavarthi 	if (mz == NULL)
140ea80eafbSSrikanth Yalavarthi 		return -ENOMEM;
141ea80eafbSSrikanth Yalavarthi 
142ea80eafbSSrikanth Yalavarthi 	RTE_ASSERT(ml_dev_globals.data[dev_id] == mz->addr);
143ea80eafbSSrikanth Yalavarthi 	ml_dev_globals.data[dev_id] = NULL;
144ea80eafbSSrikanth Yalavarthi 
145ea80eafbSSrikanth Yalavarthi 	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
146ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(DEBUG, "PRIMARY: free memzone of %s (%p)", mz_name, mz);
147ea80eafbSSrikanth Yalavarthi 		ret = rte_memzone_free(mz);
148ea80eafbSSrikanth Yalavarthi 	} else {
149ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(DEBUG, "SECONDARY: don't free memzone of %s (%p)", mz_name, mz);
150ea80eafbSSrikanth Yalavarthi 	}
151ea80eafbSSrikanth Yalavarthi 
152ea80eafbSSrikanth Yalavarthi 	dev->attached = ML_DEV_DETACHED;
153ea80eafbSSrikanth Yalavarthi 	ml_dev_globals.nb_devs--;
154ea80eafbSSrikanth Yalavarthi 
155ea80eafbSSrikanth Yalavarthi 	return ret;
156ea80eafbSSrikanth Yalavarthi }
157ea80eafbSSrikanth Yalavarthi 
158ea80eafbSSrikanth Yalavarthi int
159ea80eafbSSrikanth Yalavarthi rte_ml_dev_init(size_t dev_max)
160ea80eafbSSrikanth Yalavarthi {
161ea80eafbSSrikanth Yalavarthi 	if (dev_max == 0 || dev_max > INT16_MAX) {
162ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_max = %zu (> %d)\n", dev_max, INT16_MAX);
163ea80eafbSSrikanth Yalavarthi 		rte_errno = EINVAL;
164ea80eafbSSrikanth Yalavarthi 		return -rte_errno;
165ea80eafbSSrikanth Yalavarthi 	}
166ea80eafbSSrikanth Yalavarthi 
167ea80eafbSSrikanth Yalavarthi 	/* No lock, it must be called before or during first probing. */
168ea80eafbSSrikanth Yalavarthi 	if (ml_dev_globals.devs != NULL) {
169ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Device array already initialized");
170ea80eafbSSrikanth Yalavarthi 		rte_errno = EBUSY;
171ea80eafbSSrikanth Yalavarthi 		return -rte_errno;
172ea80eafbSSrikanth Yalavarthi 	}
173ea80eafbSSrikanth Yalavarthi 
174ea80eafbSSrikanth Yalavarthi 	ml_dev_globals.devs = calloc(dev_max, sizeof(struct rte_ml_dev));
175ea80eafbSSrikanth Yalavarthi 	if (ml_dev_globals.devs == NULL) {
176ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Cannot initialize MLDEV library");
177ea80eafbSSrikanth Yalavarthi 		rte_errno = ENOMEM;
178ea80eafbSSrikanth Yalavarthi 		return -rte_errno;
179ea80eafbSSrikanth Yalavarthi 	}
180ea80eafbSSrikanth Yalavarthi 
181ea80eafbSSrikanth Yalavarthi 	ml_dev_globals.data = calloc(dev_max, sizeof(struct rte_ml_dev_data *));
182ea80eafbSSrikanth Yalavarthi 	if (ml_dev_globals.data == NULL) {
183ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Cannot initialize MLDEV library");
184ea80eafbSSrikanth Yalavarthi 		rte_errno = ENOMEM;
185ea80eafbSSrikanth Yalavarthi 		return -rte_errno;
186ea80eafbSSrikanth Yalavarthi 	}
187ea80eafbSSrikanth Yalavarthi 
188ea80eafbSSrikanth Yalavarthi 	ml_dev_globals.max_devs = dev_max;
189ea80eafbSSrikanth Yalavarthi 	ml_dev_globals.devs = ml_dev_globals.devs;
190ea80eafbSSrikanth Yalavarthi 
191ea80eafbSSrikanth Yalavarthi 	return 0;
192ea80eafbSSrikanth Yalavarthi }
193d82cac58SJerin Jacob 
19436d0b09eSSrikanth Yalavarthi uint16_t
19536d0b09eSSrikanth Yalavarthi rte_ml_dev_count(void)
19636d0b09eSSrikanth Yalavarthi {
19736d0b09eSSrikanth Yalavarthi 	return ml_dev_globals.nb_devs;
19836d0b09eSSrikanth Yalavarthi }
19936d0b09eSSrikanth Yalavarthi 
20036d0b09eSSrikanth Yalavarthi int
20136d0b09eSSrikanth Yalavarthi rte_ml_dev_is_valid_dev(int16_t dev_id)
20236d0b09eSSrikanth Yalavarthi {
20336d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev *dev = NULL;
20436d0b09eSSrikanth Yalavarthi 
20536d0b09eSSrikanth Yalavarthi 	if (dev_id >= ml_dev_globals.max_devs || ml_dev_globals.devs[dev_id].data == NULL)
20636d0b09eSSrikanth Yalavarthi 		return 0;
20736d0b09eSSrikanth Yalavarthi 
20836d0b09eSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
20936d0b09eSSrikanth Yalavarthi 	if (dev->attached != ML_DEV_ATTACHED)
21036d0b09eSSrikanth Yalavarthi 		return 0;
21136d0b09eSSrikanth Yalavarthi 	else
21236d0b09eSSrikanth Yalavarthi 		return 1;
21336d0b09eSSrikanth Yalavarthi }
21436d0b09eSSrikanth Yalavarthi 
21536d0b09eSSrikanth Yalavarthi int
21636d0b09eSSrikanth Yalavarthi rte_ml_dev_socket_id(int16_t dev_id)
21736d0b09eSSrikanth Yalavarthi {
21836d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
21936d0b09eSSrikanth Yalavarthi 
22036d0b09eSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
22136d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
22236d0b09eSSrikanth Yalavarthi 		return -EINVAL;
22336d0b09eSSrikanth Yalavarthi 	}
22436d0b09eSSrikanth Yalavarthi 
22536d0b09eSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
22636d0b09eSSrikanth Yalavarthi 
22736d0b09eSSrikanth Yalavarthi 	return dev->data->socket_id;
22836d0b09eSSrikanth Yalavarthi }
22936d0b09eSSrikanth Yalavarthi 
23036d0b09eSSrikanth Yalavarthi int
23136d0b09eSSrikanth Yalavarthi rte_ml_dev_info_get(int16_t dev_id, struct rte_ml_dev_info *dev_info)
23236d0b09eSSrikanth Yalavarthi {
23336d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
23436d0b09eSSrikanth Yalavarthi 
23536d0b09eSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
23636d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
23736d0b09eSSrikanth Yalavarthi 		return -EINVAL;
23836d0b09eSSrikanth Yalavarthi 	}
23936d0b09eSSrikanth Yalavarthi 
24036d0b09eSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
24136d0b09eSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_info_get == NULL)
24236d0b09eSSrikanth Yalavarthi 		return -ENOTSUP;
24336d0b09eSSrikanth Yalavarthi 
24436d0b09eSSrikanth Yalavarthi 	if (dev_info == NULL) {
24536d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, dev_info cannot be NULL\n", dev_id);
24636d0b09eSSrikanth Yalavarthi 		return -EINVAL;
24736d0b09eSSrikanth Yalavarthi 	}
24836d0b09eSSrikanth Yalavarthi 	memset(dev_info, 0, sizeof(struct rte_ml_dev_info));
24936d0b09eSSrikanth Yalavarthi 
25036d0b09eSSrikanth Yalavarthi 	return (*dev->dev_ops->dev_info_get)(dev, dev_info);
25136d0b09eSSrikanth Yalavarthi }
25236d0b09eSSrikanth Yalavarthi 
25336d0b09eSSrikanth Yalavarthi int
25436d0b09eSSrikanth Yalavarthi rte_ml_dev_configure(int16_t dev_id, const struct rte_ml_dev_config *config)
25536d0b09eSSrikanth Yalavarthi {
25636d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev_info dev_info;
25736d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
25836d0b09eSSrikanth Yalavarthi 	int ret;
25936d0b09eSSrikanth Yalavarthi 
26036d0b09eSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
26136d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
26236d0b09eSSrikanth Yalavarthi 		return -EINVAL;
26336d0b09eSSrikanth Yalavarthi 	}
26436d0b09eSSrikanth Yalavarthi 
26536d0b09eSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
26636d0b09eSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_configure == NULL)
26736d0b09eSSrikanth Yalavarthi 		return -ENOTSUP;
26836d0b09eSSrikanth Yalavarthi 
26936d0b09eSSrikanth Yalavarthi 	if (dev->data->dev_started) {
27036d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Device %d must be stopped to allow configuration", dev_id);
27136d0b09eSSrikanth Yalavarthi 		return -EBUSY;
27236d0b09eSSrikanth Yalavarthi 	}
27336d0b09eSSrikanth Yalavarthi 
27436d0b09eSSrikanth Yalavarthi 	if (config == NULL) {
27536d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, config cannot be NULL\n", dev_id);
27636d0b09eSSrikanth Yalavarthi 		return -EINVAL;
27736d0b09eSSrikanth Yalavarthi 	}
27836d0b09eSSrikanth Yalavarthi 
27936d0b09eSSrikanth Yalavarthi 	ret = rte_ml_dev_info_get(dev_id, &dev_info);
28036d0b09eSSrikanth Yalavarthi 	if (ret < 0)
28136d0b09eSSrikanth Yalavarthi 		return ret;
28236d0b09eSSrikanth Yalavarthi 
28336d0b09eSSrikanth Yalavarthi 	if (config->nb_queue_pairs > dev_info.max_queue_pairs) {
28436d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Device %d num of queues %u > %u\n", dev_id,
28536d0b09eSSrikanth Yalavarthi 			      config->nb_queue_pairs, dev_info.max_queue_pairs);
28636d0b09eSSrikanth Yalavarthi 		return -EINVAL;
28736d0b09eSSrikanth Yalavarthi 	}
28836d0b09eSSrikanth Yalavarthi 
28936d0b09eSSrikanth Yalavarthi 	return (*dev->dev_ops->dev_configure)(dev, config);
29036d0b09eSSrikanth Yalavarthi }
29136d0b09eSSrikanth Yalavarthi 
29236d0b09eSSrikanth Yalavarthi int
29336d0b09eSSrikanth Yalavarthi rte_ml_dev_close(int16_t dev_id)
29436d0b09eSSrikanth Yalavarthi {
29536d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
29636d0b09eSSrikanth Yalavarthi 
29736d0b09eSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
29836d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
29936d0b09eSSrikanth Yalavarthi 		return -EINVAL;
30036d0b09eSSrikanth Yalavarthi 	}
30136d0b09eSSrikanth Yalavarthi 
30236d0b09eSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
30336d0b09eSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_close == NULL)
30436d0b09eSSrikanth Yalavarthi 		return -ENOTSUP;
30536d0b09eSSrikanth Yalavarthi 
30636d0b09eSSrikanth Yalavarthi 	/* Device must be stopped before it can be closed */
30736d0b09eSSrikanth Yalavarthi 	if (dev->data->dev_started == 1) {
30836d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Device %d must be stopped before closing", dev_id);
30936d0b09eSSrikanth Yalavarthi 		return -EBUSY;
31036d0b09eSSrikanth Yalavarthi 	}
31136d0b09eSSrikanth Yalavarthi 
31236d0b09eSSrikanth Yalavarthi 	return (*dev->dev_ops->dev_close)(dev);
31336d0b09eSSrikanth Yalavarthi }
31436d0b09eSSrikanth Yalavarthi 
31536d0b09eSSrikanth Yalavarthi int
31636d0b09eSSrikanth Yalavarthi rte_ml_dev_start(int16_t dev_id)
31736d0b09eSSrikanth Yalavarthi {
31836d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
31936d0b09eSSrikanth Yalavarthi 	int ret;
32036d0b09eSSrikanth Yalavarthi 
32136d0b09eSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
32236d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
32336d0b09eSSrikanth Yalavarthi 		return -EINVAL;
32436d0b09eSSrikanth Yalavarthi 	}
32536d0b09eSSrikanth Yalavarthi 
32636d0b09eSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
32736d0b09eSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_start == NULL)
32836d0b09eSSrikanth Yalavarthi 		return -ENOTSUP;
32936d0b09eSSrikanth Yalavarthi 
33036d0b09eSSrikanth Yalavarthi 	if (dev->data->dev_started != 0) {
33136d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Device %d is already started", dev_id);
33236d0b09eSSrikanth Yalavarthi 		return -EBUSY;
33336d0b09eSSrikanth Yalavarthi 	}
33436d0b09eSSrikanth Yalavarthi 
33536d0b09eSSrikanth Yalavarthi 	ret = (*dev->dev_ops->dev_start)(dev);
33636d0b09eSSrikanth Yalavarthi 	if (ret == 0)
33736d0b09eSSrikanth Yalavarthi 		dev->data->dev_started = 1;
33836d0b09eSSrikanth Yalavarthi 
33936d0b09eSSrikanth Yalavarthi 	return ret;
34036d0b09eSSrikanth Yalavarthi }
34136d0b09eSSrikanth Yalavarthi 
34236d0b09eSSrikanth Yalavarthi int
34336d0b09eSSrikanth Yalavarthi rte_ml_dev_stop(int16_t dev_id)
34436d0b09eSSrikanth Yalavarthi {
34536d0b09eSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
34636d0b09eSSrikanth Yalavarthi 	int ret;
34736d0b09eSSrikanth Yalavarthi 
34836d0b09eSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
34936d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
35036d0b09eSSrikanth Yalavarthi 		return -EINVAL;
35136d0b09eSSrikanth Yalavarthi 	}
35236d0b09eSSrikanth Yalavarthi 
35336d0b09eSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
35436d0b09eSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_stop == NULL)
35536d0b09eSSrikanth Yalavarthi 		return -ENOTSUP;
35636d0b09eSSrikanth Yalavarthi 
35736d0b09eSSrikanth Yalavarthi 	if (dev->data->dev_started == 0) {
35836d0b09eSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Device %d is not started", dev_id);
35936d0b09eSSrikanth Yalavarthi 		return -EBUSY;
36036d0b09eSSrikanth Yalavarthi 	}
36136d0b09eSSrikanth Yalavarthi 
36236d0b09eSSrikanth Yalavarthi 	ret = (*dev->dev_ops->dev_stop)(dev);
36336d0b09eSSrikanth Yalavarthi 	if (ret == 0)
36436d0b09eSSrikanth Yalavarthi 		dev->data->dev_started = 0;
36536d0b09eSSrikanth Yalavarthi 
36636d0b09eSSrikanth Yalavarthi 	return ret;
36736d0b09eSSrikanth Yalavarthi }
36836d0b09eSSrikanth Yalavarthi 
369b5f0df64SSrikanth Yalavarthi int
370b5f0df64SSrikanth Yalavarthi rte_ml_dev_queue_pair_setup(int16_t dev_id, uint16_t queue_pair_id,
371b5f0df64SSrikanth Yalavarthi 			    const struct rte_ml_dev_qp_conf *qp_conf, int socket_id)
372b5f0df64SSrikanth Yalavarthi {
373b5f0df64SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
374b5f0df64SSrikanth Yalavarthi 
375b5f0df64SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
376b5f0df64SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
377b5f0df64SSrikanth Yalavarthi 		return -EINVAL;
378b5f0df64SSrikanth Yalavarthi 	}
379b5f0df64SSrikanth Yalavarthi 
380b5f0df64SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
381b5f0df64SSrikanth Yalavarthi 	if (*dev->dev_ops->dev_queue_pair_setup == NULL)
382b5f0df64SSrikanth Yalavarthi 		return -ENOTSUP;
383b5f0df64SSrikanth Yalavarthi 
384b5f0df64SSrikanth Yalavarthi 	if (queue_pair_id >= dev->data->nb_queue_pairs) {
385b5f0df64SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid queue_pair_id = %d", queue_pair_id);
386b5f0df64SSrikanth Yalavarthi 		return -EINVAL;
387b5f0df64SSrikanth Yalavarthi 	}
388b5f0df64SSrikanth Yalavarthi 
389b5f0df64SSrikanth Yalavarthi 	if (qp_conf == NULL) {
390b5f0df64SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, qp_conf cannot be NULL\n", dev_id);
391b5f0df64SSrikanth Yalavarthi 		return -EINVAL;
392b5f0df64SSrikanth Yalavarthi 	}
393b5f0df64SSrikanth Yalavarthi 
394b5f0df64SSrikanth Yalavarthi 	if (dev->data->dev_started) {
395b5f0df64SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Device %d must be stopped to allow configuration", dev_id);
396b5f0df64SSrikanth Yalavarthi 		return -EBUSY;
397b5f0df64SSrikanth Yalavarthi 	}
398b5f0df64SSrikanth Yalavarthi 
399b5f0df64SSrikanth Yalavarthi 	return (*dev->dev_ops->dev_queue_pair_setup)(dev, queue_pair_id, qp_conf, socket_id);
400b5f0df64SSrikanth Yalavarthi }
401b5f0df64SSrikanth Yalavarthi 
4024a662f54SSrikanth Yalavarthi int
403b3caa0f8SSrikanth Yalavarthi rte_ml_dev_stats_get(int16_t dev_id, struct rte_ml_dev_stats *stats)
404b3caa0f8SSrikanth Yalavarthi {
405b3caa0f8SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
406b3caa0f8SSrikanth Yalavarthi 
407b3caa0f8SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
408b3caa0f8SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
409b3caa0f8SSrikanth Yalavarthi 		return -EINVAL;
410b3caa0f8SSrikanth Yalavarthi 	}
411b3caa0f8SSrikanth Yalavarthi 
412b3caa0f8SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
413b3caa0f8SSrikanth Yalavarthi 	if (*dev->dev_ops->dev_stats_get == NULL)
414b3caa0f8SSrikanth Yalavarthi 		return -ENOTSUP;
415b3caa0f8SSrikanth Yalavarthi 
416b3caa0f8SSrikanth Yalavarthi 	if (stats == NULL) {
417b3caa0f8SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, stats cannot be NULL\n", dev_id);
418b3caa0f8SSrikanth Yalavarthi 		return -EINVAL;
419b3caa0f8SSrikanth Yalavarthi 	}
420b3caa0f8SSrikanth Yalavarthi 	memset(stats, 0, sizeof(struct rte_ml_dev_stats));
421b3caa0f8SSrikanth Yalavarthi 
422b3caa0f8SSrikanth Yalavarthi 	return (*dev->dev_ops->dev_stats_get)(dev, stats);
423b3caa0f8SSrikanth Yalavarthi }
424b3caa0f8SSrikanth Yalavarthi 
425b3caa0f8SSrikanth Yalavarthi void
426b3caa0f8SSrikanth Yalavarthi rte_ml_dev_stats_reset(int16_t dev_id)
427b3caa0f8SSrikanth Yalavarthi {
428b3caa0f8SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
429b3caa0f8SSrikanth Yalavarthi 
430b3caa0f8SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
431b3caa0f8SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
432b3caa0f8SSrikanth Yalavarthi 		return;
433b3caa0f8SSrikanth Yalavarthi 	}
434b3caa0f8SSrikanth Yalavarthi 
435b3caa0f8SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
436b3caa0f8SSrikanth Yalavarthi 	if (*dev->dev_ops->dev_stats_reset == NULL)
437b3caa0f8SSrikanth Yalavarthi 		return;
438b3caa0f8SSrikanth Yalavarthi 
439b3caa0f8SSrikanth Yalavarthi 	(*dev->dev_ops->dev_stats_reset)(dev);
440b3caa0f8SSrikanth Yalavarthi }
441b3caa0f8SSrikanth Yalavarthi 
442b3caa0f8SSrikanth Yalavarthi int
44369707febSSrikanth Yalavarthi rte_ml_dev_xstats_names_get(int16_t dev_id, struct rte_ml_dev_xstats_map *xstats_map, uint32_t size)
44469707febSSrikanth Yalavarthi {
44569707febSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
44669707febSSrikanth Yalavarthi 
44769707febSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
44869707febSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
44969707febSSrikanth Yalavarthi 		return -EINVAL;
45069707febSSrikanth Yalavarthi 	}
45169707febSSrikanth Yalavarthi 
45269707febSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
45369707febSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_xstats_names_get == NULL)
45469707febSSrikanth Yalavarthi 		return -ENOTSUP;
45569707febSSrikanth Yalavarthi 
45669707febSSrikanth Yalavarthi 	return (*dev->dev_ops->dev_xstats_names_get)(dev, xstats_map, size);
45769707febSSrikanth Yalavarthi }
45869707febSSrikanth Yalavarthi 
45969707febSSrikanth Yalavarthi int
46069707febSSrikanth Yalavarthi rte_ml_dev_xstats_by_name_get(int16_t dev_id, const char *name, uint16_t *stat_id, uint64_t *value)
46169707febSSrikanth Yalavarthi {
46269707febSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
46369707febSSrikanth Yalavarthi 
46469707febSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
46569707febSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
46669707febSSrikanth Yalavarthi 		return -EINVAL;
46769707febSSrikanth Yalavarthi 	}
46869707febSSrikanth Yalavarthi 
46969707febSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
47069707febSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_xstats_by_name_get == NULL)
47169707febSSrikanth Yalavarthi 		return -ENOTSUP;
47269707febSSrikanth Yalavarthi 
47369707febSSrikanth Yalavarthi 	if (name == NULL) {
47469707febSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, name cannot be NULL\n", dev_id);
47569707febSSrikanth Yalavarthi 		return -EINVAL;
47669707febSSrikanth Yalavarthi 	}
47769707febSSrikanth Yalavarthi 
47869707febSSrikanth Yalavarthi 	if (value == NULL) {
47969707febSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, value cannot be NULL\n", dev_id);
48069707febSSrikanth Yalavarthi 		return -EINVAL;
48169707febSSrikanth Yalavarthi 	}
48269707febSSrikanth Yalavarthi 
48369707febSSrikanth Yalavarthi 	return (*dev->dev_ops->dev_xstats_by_name_get)(dev, name, stat_id, value);
48469707febSSrikanth Yalavarthi }
48569707febSSrikanth Yalavarthi 
48669707febSSrikanth Yalavarthi int
48769707febSSrikanth Yalavarthi rte_ml_dev_xstats_get(int16_t dev_id, const uint16_t *stat_ids, uint64_t *values, uint16_t nb_ids)
48869707febSSrikanth Yalavarthi {
48969707febSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
49069707febSSrikanth Yalavarthi 
49169707febSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
49269707febSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
49369707febSSrikanth Yalavarthi 		return -EINVAL;
49469707febSSrikanth Yalavarthi 	}
49569707febSSrikanth Yalavarthi 
49669707febSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
49769707febSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_xstats_get == NULL)
49869707febSSrikanth Yalavarthi 		return -ENOTSUP;
49969707febSSrikanth Yalavarthi 
50069707febSSrikanth Yalavarthi 	if (stat_ids == NULL) {
50169707febSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, stat_ids cannot be NULL\n", dev_id);
50269707febSSrikanth Yalavarthi 		return -EINVAL;
50369707febSSrikanth Yalavarthi 	}
50469707febSSrikanth Yalavarthi 
50569707febSSrikanth Yalavarthi 	if (values == NULL) {
50669707febSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, values cannot be NULL\n", dev_id);
50769707febSSrikanth Yalavarthi 		return -EINVAL;
50869707febSSrikanth Yalavarthi 	}
50969707febSSrikanth Yalavarthi 
51069707febSSrikanth Yalavarthi 	return (*dev->dev_ops->dev_xstats_get)(dev, stat_ids, values, nb_ids);
51169707febSSrikanth Yalavarthi }
51269707febSSrikanth Yalavarthi 
51369707febSSrikanth Yalavarthi int
51469707febSSrikanth Yalavarthi rte_ml_dev_xstats_reset(int16_t dev_id, const uint16_t *stat_ids, uint16_t nb_ids)
51569707febSSrikanth Yalavarthi {
51669707febSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
51769707febSSrikanth Yalavarthi 
51869707febSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
51969707febSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
52069707febSSrikanth Yalavarthi 		return -EINVAL;
52169707febSSrikanth Yalavarthi 	}
52269707febSSrikanth Yalavarthi 
52369707febSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
52469707febSSrikanth Yalavarthi 	if (*dev->dev_ops->dev_xstats_reset == NULL)
52569707febSSrikanth Yalavarthi 		return -ENOTSUP;
52669707febSSrikanth Yalavarthi 
52769707febSSrikanth Yalavarthi 	return (*dev->dev_ops->dev_xstats_reset)(dev, stat_ids, nb_ids);
52869707febSSrikanth Yalavarthi }
52969707febSSrikanth Yalavarthi 
53069707febSSrikanth Yalavarthi int
5314a662f54SSrikanth Yalavarthi rte_ml_model_load(int16_t dev_id, struct rte_ml_model_params *params, uint16_t *model_id)
5324a662f54SSrikanth Yalavarthi {
5334a662f54SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
5344a662f54SSrikanth Yalavarthi 
5354a662f54SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
5364a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
5374a662f54SSrikanth Yalavarthi 		return -EINVAL;
5384a662f54SSrikanth Yalavarthi 	}
5394a662f54SSrikanth Yalavarthi 
5404a662f54SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
5414a662f54SSrikanth Yalavarthi 	if (*dev->dev_ops->model_load == NULL)
5424a662f54SSrikanth Yalavarthi 		return -ENOTSUP;
5434a662f54SSrikanth Yalavarthi 
5444a662f54SSrikanth Yalavarthi 	if (params == NULL) {
5454a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, params cannot be NULL\n", dev_id);
5464a662f54SSrikanth Yalavarthi 		return -EINVAL;
5474a662f54SSrikanth Yalavarthi 	}
5484a662f54SSrikanth Yalavarthi 
5494a662f54SSrikanth Yalavarthi 	if (model_id == NULL) {
5504a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, model_id cannot be NULL\n", dev_id);
5514a662f54SSrikanth Yalavarthi 		return -EINVAL;
5524a662f54SSrikanth Yalavarthi 	}
5534a662f54SSrikanth Yalavarthi 
5544a662f54SSrikanth Yalavarthi 	return (*dev->dev_ops->model_load)(dev, params, model_id);
5554a662f54SSrikanth Yalavarthi }
5564a662f54SSrikanth Yalavarthi 
5574a662f54SSrikanth Yalavarthi int
5584a662f54SSrikanth Yalavarthi rte_ml_model_unload(int16_t dev_id, uint16_t model_id)
5594a662f54SSrikanth Yalavarthi {
5604a662f54SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
5614a662f54SSrikanth Yalavarthi 
5624a662f54SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
5634a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
5644a662f54SSrikanth Yalavarthi 		return -EINVAL;
5654a662f54SSrikanth Yalavarthi 	}
5664a662f54SSrikanth Yalavarthi 
5674a662f54SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
5684a662f54SSrikanth Yalavarthi 	if (*dev->dev_ops->model_unload == NULL)
5694a662f54SSrikanth Yalavarthi 		return -ENOTSUP;
5704a662f54SSrikanth Yalavarthi 
5714a662f54SSrikanth Yalavarthi 	return (*dev->dev_ops->model_unload)(dev, model_id);
5724a662f54SSrikanth Yalavarthi }
5734a662f54SSrikanth Yalavarthi 
5744a662f54SSrikanth Yalavarthi int
5754a662f54SSrikanth Yalavarthi rte_ml_model_start(int16_t dev_id, uint16_t model_id)
5764a662f54SSrikanth Yalavarthi {
5774a662f54SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
5784a662f54SSrikanth Yalavarthi 
5794a662f54SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
5804a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
5814a662f54SSrikanth Yalavarthi 		return -EINVAL;
5824a662f54SSrikanth Yalavarthi 	}
5834a662f54SSrikanth Yalavarthi 
5844a662f54SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
5854a662f54SSrikanth Yalavarthi 	if (*dev->dev_ops->model_start == NULL)
5864a662f54SSrikanth Yalavarthi 		return -ENOTSUP;
5874a662f54SSrikanth Yalavarthi 
5884a662f54SSrikanth Yalavarthi 	return (*dev->dev_ops->model_start)(dev, model_id);
5894a662f54SSrikanth Yalavarthi }
5904a662f54SSrikanth Yalavarthi 
5914a662f54SSrikanth Yalavarthi int
5924a662f54SSrikanth Yalavarthi rte_ml_model_stop(int16_t dev_id, uint16_t model_id)
5934a662f54SSrikanth Yalavarthi {
5944a662f54SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
5954a662f54SSrikanth Yalavarthi 
5964a662f54SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
5974a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
5984a662f54SSrikanth Yalavarthi 		return -EINVAL;
5994a662f54SSrikanth Yalavarthi 	}
6004a662f54SSrikanth Yalavarthi 
6014a662f54SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
6024a662f54SSrikanth Yalavarthi 	if (*dev->dev_ops->model_stop == NULL)
6034a662f54SSrikanth Yalavarthi 		return -ENOTSUP;
6044a662f54SSrikanth Yalavarthi 
6054a662f54SSrikanth Yalavarthi 	return (*dev->dev_ops->model_stop)(dev, model_id);
6064a662f54SSrikanth Yalavarthi }
6074a662f54SSrikanth Yalavarthi 
6084a662f54SSrikanth Yalavarthi int
6094a662f54SSrikanth Yalavarthi rte_ml_model_info_get(int16_t dev_id, uint16_t model_id, struct rte_ml_model_info *model_info)
6104a662f54SSrikanth Yalavarthi {
6114a662f54SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
6124a662f54SSrikanth Yalavarthi 
6134a662f54SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
6144a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
6154a662f54SSrikanth Yalavarthi 		return -EINVAL;
6164a662f54SSrikanth Yalavarthi 	}
6174a662f54SSrikanth Yalavarthi 
6184a662f54SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
6194a662f54SSrikanth Yalavarthi 	if (*dev->dev_ops->model_info_get == NULL)
6204a662f54SSrikanth Yalavarthi 		return -ENOTSUP;
6214a662f54SSrikanth Yalavarthi 
6224a662f54SSrikanth Yalavarthi 	if (model_info == NULL) {
6234a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, model_id %u, model_info cannot be NULL\n", dev_id,
6244a662f54SSrikanth Yalavarthi 			      model_id);
6254a662f54SSrikanth Yalavarthi 		return -EINVAL;
6264a662f54SSrikanth Yalavarthi 	}
6274a662f54SSrikanth Yalavarthi 
6284a662f54SSrikanth Yalavarthi 	return (*dev->dev_ops->model_info_get)(dev, model_id, model_info);
6294a662f54SSrikanth Yalavarthi }
6304a662f54SSrikanth Yalavarthi 
6314a662f54SSrikanth Yalavarthi int
6324a662f54SSrikanth Yalavarthi rte_ml_model_params_update(int16_t dev_id, uint16_t model_id, void *buffer)
6334a662f54SSrikanth Yalavarthi {
6344a662f54SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
6354a662f54SSrikanth Yalavarthi 
6364a662f54SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
6374a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
6384a662f54SSrikanth Yalavarthi 		return -EINVAL;
6394a662f54SSrikanth Yalavarthi 	}
6404a662f54SSrikanth Yalavarthi 
6414a662f54SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
6424a662f54SSrikanth Yalavarthi 	if (*dev->dev_ops->model_params_update == NULL)
6434a662f54SSrikanth Yalavarthi 		return -ENOTSUP;
6444a662f54SSrikanth Yalavarthi 
6454a662f54SSrikanth Yalavarthi 	if (buffer == NULL) {
6464a662f54SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, buffer cannot be NULL\n", dev_id);
6474a662f54SSrikanth Yalavarthi 		return -EINVAL;
6484a662f54SSrikanth Yalavarthi 	}
6494a662f54SSrikanth Yalavarthi 
6504a662f54SSrikanth Yalavarthi 	return (*dev->dev_ops->model_params_update)(dev, model_id, buffer);
6514a662f54SSrikanth Yalavarthi }
6524a662f54SSrikanth Yalavarthi 
65350818b0aSSrikanth Yalavarthi int
65450818b0aSSrikanth Yalavarthi rte_ml_io_input_size_get(int16_t dev_id, uint16_t model_id, uint32_t nb_batches,
65550818b0aSSrikanth Yalavarthi 			 uint64_t *input_qsize, uint64_t *input_dsize)
65650818b0aSSrikanth Yalavarthi {
65750818b0aSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
65850818b0aSSrikanth Yalavarthi 
65950818b0aSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
66050818b0aSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
66150818b0aSSrikanth Yalavarthi 		return -EINVAL;
66250818b0aSSrikanth Yalavarthi 	}
66350818b0aSSrikanth Yalavarthi 
66450818b0aSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
66550818b0aSSrikanth Yalavarthi 	if (*dev->dev_ops->io_input_size_get == NULL)
66650818b0aSSrikanth Yalavarthi 		return -ENOTSUP;
66750818b0aSSrikanth Yalavarthi 
66850818b0aSSrikanth Yalavarthi 	return (*dev->dev_ops->io_input_size_get)(dev, model_id, nb_batches, input_qsize,
66950818b0aSSrikanth Yalavarthi 						  input_dsize);
67050818b0aSSrikanth Yalavarthi }
67150818b0aSSrikanth Yalavarthi 
67250818b0aSSrikanth Yalavarthi int
67350818b0aSSrikanth Yalavarthi rte_ml_io_output_size_get(int16_t dev_id, uint16_t model_id, uint32_t nb_batches,
67450818b0aSSrikanth Yalavarthi 			  uint64_t *output_qsize, uint64_t *output_dsize)
67550818b0aSSrikanth Yalavarthi {
67650818b0aSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
67750818b0aSSrikanth Yalavarthi 
67850818b0aSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
67950818b0aSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
68050818b0aSSrikanth Yalavarthi 		return -EINVAL;
68150818b0aSSrikanth Yalavarthi 	}
68250818b0aSSrikanth Yalavarthi 
68350818b0aSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
68450818b0aSSrikanth Yalavarthi 	if (*dev->dev_ops->io_output_size_get == NULL)
68550818b0aSSrikanth Yalavarthi 		return -ENOTSUP;
68650818b0aSSrikanth Yalavarthi 
68750818b0aSSrikanth Yalavarthi 	return (*dev->dev_ops->io_output_size_get)(dev, model_id, nb_batches, output_qsize,
68850818b0aSSrikanth Yalavarthi 						   output_dsize);
68950818b0aSSrikanth Yalavarthi }
69050818b0aSSrikanth Yalavarthi 
69150818b0aSSrikanth Yalavarthi int
69250818b0aSSrikanth Yalavarthi rte_ml_io_quantize(int16_t dev_id, uint16_t model_id, uint16_t nb_batches, void *dbuffer,
69350818b0aSSrikanth Yalavarthi 		   void *qbuffer)
69450818b0aSSrikanth Yalavarthi {
69550818b0aSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
69650818b0aSSrikanth Yalavarthi 
69750818b0aSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
69850818b0aSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
69950818b0aSSrikanth Yalavarthi 		return -EINVAL;
70050818b0aSSrikanth Yalavarthi 	}
70150818b0aSSrikanth Yalavarthi 
70250818b0aSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
70350818b0aSSrikanth Yalavarthi 	if (*dev->dev_ops->io_quantize == NULL)
70450818b0aSSrikanth Yalavarthi 		return -ENOTSUP;
70550818b0aSSrikanth Yalavarthi 
70650818b0aSSrikanth Yalavarthi 	if (dbuffer == NULL) {
70750818b0aSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, dbuffer cannot be NULL\n", dev_id);
70850818b0aSSrikanth Yalavarthi 		return -EINVAL;
70950818b0aSSrikanth Yalavarthi 	}
71050818b0aSSrikanth Yalavarthi 
71150818b0aSSrikanth Yalavarthi 	if (qbuffer == NULL) {
71250818b0aSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, qbuffer cannot be NULL\n", dev_id);
71350818b0aSSrikanth Yalavarthi 		return -EINVAL;
71450818b0aSSrikanth Yalavarthi 	}
71550818b0aSSrikanth Yalavarthi 
71650818b0aSSrikanth Yalavarthi 	return (*dev->dev_ops->io_quantize)(dev, model_id, nb_batches, dbuffer, qbuffer);
71750818b0aSSrikanth Yalavarthi }
71850818b0aSSrikanth Yalavarthi 
71950818b0aSSrikanth Yalavarthi int
72050818b0aSSrikanth Yalavarthi rte_ml_io_dequantize(int16_t dev_id, uint16_t model_id, uint16_t nb_batches, void *qbuffer,
72150818b0aSSrikanth Yalavarthi 		     void *dbuffer)
72250818b0aSSrikanth Yalavarthi {
72350818b0aSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
72450818b0aSSrikanth Yalavarthi 
72550818b0aSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
72650818b0aSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
72750818b0aSSrikanth Yalavarthi 		return -EINVAL;
72850818b0aSSrikanth Yalavarthi 	}
72950818b0aSSrikanth Yalavarthi 
73050818b0aSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
73150818b0aSSrikanth Yalavarthi 	if (*dev->dev_ops->io_dequantize == NULL)
73250818b0aSSrikanth Yalavarthi 		return -ENOTSUP;
73350818b0aSSrikanth Yalavarthi 
73450818b0aSSrikanth Yalavarthi 	if (qbuffer == NULL) {
73550818b0aSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, qbuffer cannot be NULL\n", dev_id);
73650818b0aSSrikanth Yalavarthi 		return -EINVAL;
73750818b0aSSrikanth Yalavarthi 	}
73850818b0aSSrikanth Yalavarthi 
73950818b0aSSrikanth Yalavarthi 	if (dbuffer == NULL) {
74050818b0aSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, dbuffer cannot be NULL\n", dev_id);
74150818b0aSSrikanth Yalavarthi 		return -EINVAL;
74250818b0aSSrikanth Yalavarthi 	}
74350818b0aSSrikanth Yalavarthi 
74450818b0aSSrikanth Yalavarthi 	return (*dev->dev_ops->io_dequantize)(dev, model_id, nb_batches, qbuffer, dbuffer);
74550818b0aSSrikanth Yalavarthi }
74650818b0aSSrikanth Yalavarthi 
7471b365349SSrikanth Yalavarthi /** Initialise rte_ml_op mempool element */
7481b365349SSrikanth Yalavarthi static void
7491b365349SSrikanth Yalavarthi ml_op_init(struct rte_mempool *mempool, __rte_unused void *opaque_arg, void *_op_data,
7501b365349SSrikanth Yalavarthi 	   __rte_unused unsigned int i)
7511b365349SSrikanth Yalavarthi {
7521b365349SSrikanth Yalavarthi 	struct rte_ml_op *op = _op_data;
7531b365349SSrikanth Yalavarthi 
7541b365349SSrikanth Yalavarthi 	memset(_op_data, 0, mempool->elt_size);
7551b365349SSrikanth Yalavarthi 	op->status = RTE_ML_OP_STATUS_NOT_PROCESSED;
7561b365349SSrikanth Yalavarthi 	op->mempool = mempool;
7571b365349SSrikanth Yalavarthi }
7581b365349SSrikanth Yalavarthi 
7591b365349SSrikanth Yalavarthi struct rte_mempool *
7601b365349SSrikanth Yalavarthi rte_ml_op_pool_create(const char *name, unsigned int nb_elts, unsigned int cache_size,
7611b365349SSrikanth Yalavarthi 		      uint16_t user_size, int socket_id)
7621b365349SSrikanth Yalavarthi {
7631b365349SSrikanth Yalavarthi 	struct rte_ml_op_pool_private *priv;
7641b365349SSrikanth Yalavarthi 	struct rte_mempool *mp;
7651b365349SSrikanth Yalavarthi 	unsigned int elt_size;
7661b365349SSrikanth Yalavarthi 
7671b365349SSrikanth Yalavarthi 	/* lookup mempool in case already allocated */
7681b365349SSrikanth Yalavarthi 	mp = rte_mempool_lookup(name);
7691b365349SSrikanth Yalavarthi 	elt_size = sizeof(struct rte_ml_op) + user_size;
7701b365349SSrikanth Yalavarthi 
7711b365349SSrikanth Yalavarthi 	if (mp != NULL) {
7721b365349SSrikanth Yalavarthi 		priv = (struct rte_ml_op_pool_private *)rte_mempool_get_priv(mp);
7731b365349SSrikanth Yalavarthi 		if (mp->elt_size != elt_size || mp->cache_size < cache_size || mp->size < nb_elts ||
7741b365349SSrikanth Yalavarthi 		    priv->user_size < user_size) {
7751b365349SSrikanth Yalavarthi 			mp = NULL;
7761b365349SSrikanth Yalavarthi 			RTE_MLDEV_LOG(ERR,
7771b365349SSrikanth Yalavarthi 				      "Mempool %s already exists but with incompatible parameters",
7781b365349SSrikanth Yalavarthi 				      name);
7791b365349SSrikanth Yalavarthi 			return NULL;
7801b365349SSrikanth Yalavarthi 		}
7811b365349SSrikanth Yalavarthi 		return mp;
7821b365349SSrikanth Yalavarthi 	}
7831b365349SSrikanth Yalavarthi 
7841b365349SSrikanth Yalavarthi 	mp = rte_mempool_create(name, nb_elts, elt_size, cache_size,
7851b365349SSrikanth Yalavarthi 				sizeof(struct rte_ml_op_pool_private), NULL, NULL, ml_op_init, NULL,
7861b365349SSrikanth Yalavarthi 				socket_id, 0);
7871b365349SSrikanth Yalavarthi 	if (mp == NULL) {
7881b365349SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Failed to create mempool %s", name);
7891b365349SSrikanth Yalavarthi 		return NULL;
7901b365349SSrikanth Yalavarthi 	}
7911b365349SSrikanth Yalavarthi 
7921b365349SSrikanth Yalavarthi 	priv = (struct rte_ml_op_pool_private *)rte_mempool_get_priv(mp);
7931b365349SSrikanth Yalavarthi 	priv->user_size = user_size;
7941b365349SSrikanth Yalavarthi 
7951b365349SSrikanth Yalavarthi 	return mp;
7961b365349SSrikanth Yalavarthi }
7971b365349SSrikanth Yalavarthi 
7981b365349SSrikanth Yalavarthi void
7991b365349SSrikanth Yalavarthi rte_ml_op_pool_free(struct rte_mempool *mempool)
8001b365349SSrikanth Yalavarthi {
8011b365349SSrikanth Yalavarthi 	if (mempool != NULL)
8021b365349SSrikanth Yalavarthi 		rte_mempool_free(mempool);
8031b365349SSrikanth Yalavarthi }
8041b365349SSrikanth Yalavarthi 
805c775df1cSSrikanth Yalavarthi uint16_t
806c775df1cSSrikanth Yalavarthi rte_ml_enqueue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uint16_t nb_ops)
807c775df1cSSrikanth Yalavarthi {
808c775df1cSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
809c775df1cSSrikanth Yalavarthi 
810c775df1cSSrikanth Yalavarthi #ifdef RTE_LIBRTE_ML_DEV_DEBUG
811c775df1cSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
812c775df1cSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
813c775df1cSSrikanth Yalavarthi 		rte_errno = -EINVAL;
814c775df1cSSrikanth Yalavarthi 		return 0;
815c775df1cSSrikanth Yalavarthi 	}
816c775df1cSSrikanth Yalavarthi 
817c775df1cSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
818c775df1cSSrikanth Yalavarthi 	if (*dev->enqueue_burst == NULL) {
819c775df1cSSrikanth Yalavarthi 		rte_errno = -ENOTSUP;
820c775df1cSSrikanth Yalavarthi 		return 0;
821c775df1cSSrikanth Yalavarthi 	}
822c775df1cSSrikanth Yalavarthi 
823c775df1cSSrikanth Yalavarthi 	if (ops == NULL) {
824c775df1cSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, ops cannot be NULL\n", dev_id);
825c775df1cSSrikanth Yalavarthi 		rte_errno = -EINVAL;
826c775df1cSSrikanth Yalavarthi 		return 0;
827c775df1cSSrikanth Yalavarthi 	}
828c775df1cSSrikanth Yalavarthi 
829c775df1cSSrikanth Yalavarthi 	if (qp_id >= dev->data->nb_queue_pairs) {
830c775df1cSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid qp_id %u\n", qp_id);
831c775df1cSSrikanth Yalavarthi 		rte_errno = -EINVAL;
832c775df1cSSrikanth Yalavarthi 		return 0;
833c775df1cSSrikanth Yalavarthi 	}
834c775df1cSSrikanth Yalavarthi #else
835c775df1cSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
836c775df1cSSrikanth Yalavarthi #endif
837c775df1cSSrikanth Yalavarthi 
838c775df1cSSrikanth Yalavarthi 	return (*dev->enqueue_burst)(dev, qp_id, ops, nb_ops);
839c775df1cSSrikanth Yalavarthi }
840c775df1cSSrikanth Yalavarthi 
841c775df1cSSrikanth Yalavarthi uint16_t
842c775df1cSSrikanth Yalavarthi rte_ml_dequeue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uint16_t nb_ops)
843c775df1cSSrikanth Yalavarthi {
844c775df1cSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
845c775df1cSSrikanth Yalavarthi 
846c775df1cSSrikanth Yalavarthi #ifdef RTE_LIBRTE_ML_DEV_DEBUG
847c775df1cSSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
848c775df1cSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
849c775df1cSSrikanth Yalavarthi 		rte_errno = -EINVAL;
850c775df1cSSrikanth Yalavarthi 		return 0;
851c775df1cSSrikanth Yalavarthi 	}
852c775df1cSSrikanth Yalavarthi 
853c775df1cSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
854c775df1cSSrikanth Yalavarthi 	if (*dev->dequeue_burst == NULL) {
855c775df1cSSrikanth Yalavarthi 		rte_errno = -ENOTSUP;
856c775df1cSSrikanth Yalavarthi 		return 0;
857c775df1cSSrikanth Yalavarthi 	}
858c775df1cSSrikanth Yalavarthi 
859c775df1cSSrikanth Yalavarthi 	if (ops == NULL) {
860c775df1cSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, ops cannot be NULL\n", dev_id);
861c775df1cSSrikanth Yalavarthi 		rte_errno = -EINVAL;
862c775df1cSSrikanth Yalavarthi 		return 0;
863c775df1cSSrikanth Yalavarthi 	}
864c775df1cSSrikanth Yalavarthi 
865c775df1cSSrikanth Yalavarthi 	if (qp_id >= dev->data->nb_queue_pairs) {
866c775df1cSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid qp_id %u\n", qp_id);
867c775df1cSSrikanth Yalavarthi 		rte_errno = -EINVAL;
868c775df1cSSrikanth Yalavarthi 		return 0;
869c775df1cSSrikanth Yalavarthi 	}
870c775df1cSSrikanth Yalavarthi #else
871c775df1cSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
872c775df1cSSrikanth Yalavarthi #endif
873c775df1cSSrikanth Yalavarthi 
874c775df1cSSrikanth Yalavarthi 	return (*dev->dequeue_burst)(dev, qp_id, ops, nb_ops);
875c775df1cSSrikanth Yalavarthi }
876c775df1cSSrikanth Yalavarthi 
877*698d9061SSrikanth Yalavarthi int
878*698d9061SSrikanth Yalavarthi rte_ml_op_error_get(int16_t dev_id, struct rte_ml_op *op, struct rte_ml_op_error *error)
879*698d9061SSrikanth Yalavarthi {
880*698d9061SSrikanth Yalavarthi 	struct rte_ml_dev *dev;
881*698d9061SSrikanth Yalavarthi 
882*698d9061SSrikanth Yalavarthi #ifdef RTE_LIBRTE_ML_DEV_DEBUG
883*698d9061SSrikanth Yalavarthi 	if (!rte_ml_dev_is_valid_dev(dev_id)) {
884*698d9061SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Invalid dev_id = %d\n", dev_id);
885*698d9061SSrikanth Yalavarthi 		return -EINVAL;
886*698d9061SSrikanth Yalavarthi 	}
887*698d9061SSrikanth Yalavarthi 
888*698d9061SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
889*698d9061SSrikanth Yalavarthi 	if (*dev->op_error_get == NULL)
890*698d9061SSrikanth Yalavarthi 		return -ENOTSUP;
891*698d9061SSrikanth Yalavarthi 
892*698d9061SSrikanth Yalavarthi 	if (op == NULL) {
893*698d9061SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, op cannot be NULL\n", dev_id);
894*698d9061SSrikanth Yalavarthi 		return -EINVAL;
895*698d9061SSrikanth Yalavarthi 	}
896*698d9061SSrikanth Yalavarthi 
897*698d9061SSrikanth Yalavarthi 	if (error == NULL) {
898*698d9061SSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Dev %d, error cannot be NULL\n", dev_id);
899*698d9061SSrikanth Yalavarthi 		return -EINVAL;
900*698d9061SSrikanth Yalavarthi 	}
901*698d9061SSrikanth Yalavarthi #else
902*698d9061SSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_get_dev(dev_id);
903*698d9061SSrikanth Yalavarthi #endif
904*698d9061SSrikanth Yalavarthi 
905*698d9061SSrikanth Yalavarthi 	return (*dev->op_error_get)(dev, op, error);
906*698d9061SSrikanth Yalavarthi }
907*698d9061SSrikanth Yalavarthi 
908d82cac58SJerin Jacob RTE_LOG_REGISTER_DEFAULT(rte_ml_dev_logtype, INFO);
909