xref: /dpdk/lib/mldev/rte_mldev_pmd.c (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 #include <dev_driver.h>
6*ea80eafbSSrikanth Yalavarthi #include <rte_eal.h>
7*ea80eafbSSrikanth Yalavarthi #include <rte_malloc.h>
8*ea80eafbSSrikanth Yalavarthi 
9*ea80eafbSSrikanth Yalavarthi #include "rte_mldev_pmd.h"
10*ea80eafbSSrikanth Yalavarthi 
11*ea80eafbSSrikanth Yalavarthi struct rte_ml_dev *
rte_ml_dev_pmd_create(const char * name,struct rte_device * device,struct rte_ml_dev_pmd_init_params * params)12*ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_create(const char *name, struct rte_device *device,
13*ea80eafbSSrikanth Yalavarthi 		      struct rte_ml_dev_pmd_init_params *params)
14*ea80eafbSSrikanth Yalavarthi {
15*ea80eafbSSrikanth Yalavarthi 	struct rte_ml_dev *dev;
16*ea80eafbSSrikanth Yalavarthi 
17*ea80eafbSSrikanth Yalavarthi 	RTE_MLDEV_LOG(INFO, "ML device initialisation - name: %s, socket_id: %u", name,
18*ea80eafbSSrikanth Yalavarthi 		      params->socket_id);
19*ea80eafbSSrikanth Yalavarthi 
20*ea80eafbSSrikanth Yalavarthi 	/* Allocate device structure */
21*ea80eafbSSrikanth Yalavarthi 	dev = rte_ml_dev_pmd_allocate(name, params->socket_id);
22*ea80eafbSSrikanth Yalavarthi 	if (dev == NULL) {
23*ea80eafbSSrikanth Yalavarthi 		RTE_MLDEV_LOG(ERR, "Failed to allocate ML device for %s", name);
24*ea80eafbSSrikanth Yalavarthi 		return NULL;
25*ea80eafbSSrikanth Yalavarthi 	}
26*ea80eafbSSrikanth Yalavarthi 
27*ea80eafbSSrikanth Yalavarthi 	/* Allocate private device structure */
28*ea80eafbSSrikanth Yalavarthi 	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
29*ea80eafbSSrikanth Yalavarthi 		dev->data->dev_private =
30*ea80eafbSSrikanth Yalavarthi 			rte_zmalloc_socket("ml_dev_private", params->private_data_size,
31*ea80eafbSSrikanth Yalavarthi 					   RTE_CACHE_LINE_SIZE, params->socket_id);
32*ea80eafbSSrikanth Yalavarthi 
33*ea80eafbSSrikanth Yalavarthi 		if (dev->data->dev_private == NULL) {
34*ea80eafbSSrikanth Yalavarthi 			RTE_MLDEV_LOG(ERR, "Cannot allocate memory for mldev %s private data",
35*ea80eafbSSrikanth Yalavarthi 				      name);
36*ea80eafbSSrikanth Yalavarthi 			rte_ml_dev_pmd_release(dev);
37*ea80eafbSSrikanth Yalavarthi 			return NULL;
38*ea80eafbSSrikanth Yalavarthi 		}
39*ea80eafbSSrikanth Yalavarthi 	}
40*ea80eafbSSrikanth Yalavarthi 	dev->device = device;
41*ea80eafbSSrikanth Yalavarthi 
42*ea80eafbSSrikanth Yalavarthi 	return dev;
43*ea80eafbSSrikanth Yalavarthi }
44*ea80eafbSSrikanth Yalavarthi 
45*ea80eafbSSrikanth Yalavarthi int
rte_ml_dev_pmd_destroy(struct rte_ml_dev * dev)46*ea80eafbSSrikanth Yalavarthi rte_ml_dev_pmd_destroy(struct rte_ml_dev *dev)
47*ea80eafbSSrikanth Yalavarthi {
48*ea80eafbSSrikanth Yalavarthi 	int ret;
49*ea80eafbSSrikanth Yalavarthi 
50*ea80eafbSSrikanth Yalavarthi 	RTE_MLDEV_LOG(INFO, "Releasing ML device - name: %s", dev->device->name);
51*ea80eafbSSrikanth Yalavarthi 	ret = rte_ml_dev_pmd_release(dev);
52*ea80eafbSSrikanth Yalavarthi 	if (ret)
53*ea80eafbSSrikanth Yalavarthi 		return ret;
54*ea80eafbSSrikanth Yalavarthi 
55*ea80eafbSSrikanth Yalavarthi 	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
56*ea80eafbSSrikanth Yalavarthi 		rte_free(dev->data->dev_private);
57*ea80eafbSSrikanth Yalavarthi 
58*ea80eafbSSrikanth Yalavarthi 	dev->data = NULL;
59*ea80eafbSSrikanth Yalavarthi 	dev->device = NULL;
60*ea80eafbSSrikanth Yalavarthi 
61*ea80eafbSSrikanth Yalavarthi 	return 0;
62*ea80eafbSSrikanth Yalavarthi }
63