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