baseband/la12xx: introduce NXP LA12xx driver
[dpdk.git] / drivers / baseband / la12xx / bbdev_la12xx.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2020-2021 NXP
3  */
4
5 #include <string.h>
6
7 #include <rte_common.h>
8 #include <rte_bus_vdev.h>
9 #include <rte_malloc.h>
10 #include <rte_ring.h>
11 #include <rte_kvargs.h>
12
13 #include <rte_bbdev.h>
14 #include <rte_bbdev_pmd.h>
15
16 #include <bbdev_la12xx_pmd_logs.h>
17
18 #define DRIVER_NAME baseband_la12xx
19
20 /* private data structure */
21 struct bbdev_la12xx_private {
22         unsigned int max_nb_queues;  /**< Max number of queues */
23 };
24 /* Create device */
25 static int
26 la12xx_bbdev_create(struct rte_vdev_device *vdev)
27 {
28         struct rte_bbdev *bbdev;
29         const char *name = rte_vdev_device_name(vdev);
30
31         PMD_INIT_FUNC_TRACE();
32
33         bbdev = rte_bbdev_allocate(name);
34         if (bbdev == NULL)
35                 return -ENODEV;
36
37         bbdev->data->dev_private = rte_zmalloc(name,
38                         sizeof(struct bbdev_la12xx_private),
39                         RTE_CACHE_LINE_SIZE);
40         if (bbdev->data->dev_private == NULL) {
41                 rte_bbdev_release(bbdev);
42                 return -ENOMEM;
43         }
44
45         bbdev->dev_ops = NULL;
46         bbdev->device = &vdev->device;
47         bbdev->data->socket_id = 0;
48         bbdev->intr_handle = NULL;
49
50         /* register rx/tx burst functions for data path */
51         bbdev->dequeue_enc_ops = NULL;
52         bbdev->dequeue_dec_ops = NULL;
53         bbdev->enqueue_enc_ops = NULL;
54         bbdev->enqueue_dec_ops = NULL;
55
56         return 0;
57 }
58
59 /* Initialise device */
60 static int
61 la12xx_bbdev_probe(struct rte_vdev_device *vdev)
62 {
63         const char *name;
64
65         PMD_INIT_FUNC_TRACE();
66
67         if (vdev == NULL)
68                 return -EINVAL;
69
70         name = rte_vdev_device_name(vdev);
71         if (name == NULL)
72                 return -EINVAL;
73
74         return la12xx_bbdev_create(vdev);
75 }
76
77 /* Uninitialise device */
78 static int
79 la12xx_bbdev_remove(struct rte_vdev_device *vdev)
80 {
81         struct rte_bbdev *bbdev;
82         const char *name;
83
84         PMD_INIT_FUNC_TRACE();
85
86         if (vdev == NULL)
87                 return -EINVAL;
88
89         name = rte_vdev_device_name(vdev);
90         if (name == NULL)
91                 return -EINVAL;
92
93         bbdev = rte_bbdev_get_named_dev(name);
94         if (bbdev == NULL)
95                 return -EINVAL;
96
97         rte_free(bbdev->data->dev_private);
98
99         return rte_bbdev_release(bbdev);
100 }
101
102 static struct rte_vdev_driver bbdev_la12xx_pmd_drv = {
103         .probe = la12xx_bbdev_probe,
104         .remove = la12xx_bbdev_remove
105 };
106
107 RTE_PMD_REGISTER_VDEV(DRIVER_NAME, bbdev_la12xx_pmd_drv);
108 RTE_LOG_REGISTER_DEFAULT(bbdev_la12xx_logtype, NOTICE);