2cd503b202e70b3b017ef51e721d406859bf2e35
[dpdk.git] / drivers / net / enetfec / enet_ethdev.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2020-2021 NXP
3  */
4
5 #include <ethdev_vdev.h>
6 #include <ethdev_driver.h>
7 #include "enet_pmd_logs.h"
8 #include "enet_ethdev.h"
9
10 #define ENETFEC_NAME_PMD                net_enetfec
11
12 static int
13 enetfec_eth_init(struct rte_eth_dev *dev)
14 {
15         rte_eth_dev_probing_finish(dev);
16         return 0;
17 }
18
19 static int
20 pmd_enetfec_probe(struct rte_vdev_device *vdev)
21 {
22         struct rte_eth_dev *dev = NULL;
23         struct enetfec_private *fep;
24         const char *name;
25         int rc;
26
27         name = rte_vdev_device_name(vdev);
28         ENETFEC_PMD_LOG(INFO, "Initializing pmd_fec for %s", name);
29
30         dev = rte_eth_vdev_allocate(vdev, sizeof(*fep));
31         if (dev == NULL)
32                 return -ENOMEM;
33
34         /* setup board info structure */
35         fep = dev->data->dev_private;
36         fep->dev = dev;
37         rc = enetfec_eth_init(dev);
38         if (rc)
39                 goto failed_init;
40
41         return 0;
42
43 failed_init:
44         ENETFEC_PMD_ERR("Failed to init");
45         return rc;
46 }
47
48 static int
49 pmd_enetfec_remove(struct rte_vdev_device *vdev)
50 {
51         struct rte_eth_dev *eth_dev = NULL;
52         int ret;
53
54         /* find the ethdev entry */
55         eth_dev = rte_eth_dev_allocated(rte_vdev_device_name(vdev));
56         if (eth_dev == NULL)
57                 return -ENODEV;
58
59         ret = rte_eth_dev_release_port(eth_dev);
60         if (ret != 0)
61                 return -EINVAL;
62
63         ENETFEC_PMD_INFO("Release enetfec sw device");
64         return 0;
65 }
66
67 static struct rte_vdev_driver pmd_enetfec_drv = {
68         .probe = pmd_enetfec_probe,
69         .remove = pmd_enetfec_remove,
70 };
71
72 RTE_PMD_REGISTER_VDEV(ENETFEC_NAME_PMD, pmd_enetfec_drv);
73 RTE_LOG_REGISTER_DEFAULT(enetfec_logtype_pmd, NOTICE);