net/ngbe: add log and error types
[dpdk.git] / drivers / net / ngbe / ngbe_ethdev.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018-2021 Beijing WangXun Technology Co., Ltd.
3  * Copyright(c) 2010-2017 Intel Corporation
4  */
5
6 #include <errno.h>
7 #include <rte_common.h>
8 #include <ethdev_pci.h>
9
10 #include "ngbe_logs.h"
11 #include "ngbe_devids.h"
12
13 /*
14  * The set of PCI devices this driver supports
15  */
16 static const struct rte_pci_id pci_id_ngbe_map[] = {
17         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A2) },
18         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A2S) },
19         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A4) },
20         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A4S) },
21         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL2) },
22         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL2S) },
23         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL4) },
24         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL4S) },
25         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860NCSI) },
26         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A1) },
27         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A1L) },
28         { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL_W) },
29         { .vendor_id = 0, /* sentinel */ },
30 };
31
32 static int
33 eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
34 {
35         struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
36
37         PMD_INIT_FUNC_TRACE();
38
39         if (rte_eal_process_type() != RTE_PROC_PRIMARY)
40                 return 0;
41
42         rte_eth_copy_pci_info(eth_dev, pci_dev);
43
44         return -EINVAL;
45 }
46
47 static int
48 eth_ngbe_dev_uninit(struct rte_eth_dev *eth_dev)
49 {
50         PMD_INIT_FUNC_TRACE();
51
52         if (rte_eal_process_type() != RTE_PROC_PRIMARY)
53                 return 0;
54
55         RTE_SET_USED(eth_dev);
56
57         return -EINVAL;
58 }
59
60 static int
61 eth_ngbe_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
62                 struct rte_pci_device *pci_dev)
63 {
64         return rte_eth_dev_create(&pci_dev->device, pci_dev->device.name,
65                         0, eth_dev_pci_specific_init, pci_dev,
66                         eth_ngbe_dev_init, NULL);
67 }
68
69 static int eth_ngbe_pci_remove(struct rte_pci_device *pci_dev)
70 {
71         struct rte_eth_dev *ethdev;
72
73         ethdev = rte_eth_dev_allocated(pci_dev->device.name);
74         if (ethdev == NULL)
75                 return 0;
76
77         return rte_eth_dev_destroy(ethdev, eth_ngbe_dev_uninit);
78 }
79
80 static struct rte_pci_driver rte_ngbe_pmd = {
81         .id_table = pci_id_ngbe_map,
82         .drv_flags = RTE_PCI_DRV_NEED_MAPPING,
83         .probe = eth_ngbe_pci_probe,
84         .remove = eth_ngbe_pci_remove,
85 };
86
87 RTE_PMD_REGISTER_PCI(net_ngbe, rte_ngbe_pmd);
88 RTE_PMD_REGISTER_PCI_TABLE(net_ngbe, pci_id_ngbe_map);
89 RTE_PMD_REGISTER_KMOD_DEP(net_ngbe, "* igb_uio | uio_pci_generic | vfio-pci");
90
91 RTE_LOG_REGISTER_SUFFIX(ngbe_logtype_init, init, NOTICE);
92 RTE_LOG_REGISTER_SUFFIX(ngbe_logtype_driver, driver, NOTICE);
93
94 #ifdef RTE_ETHDEV_DEBUG_RX
95         RTE_LOG_REGISTER_SUFFIX(ngbe_logtype_rx, rx, DEBUG);
96 #endif
97 #ifdef RTE_ETHDEV_DEBUG_TX
98         RTE_LOG_REGISTER_SUFFIX(ngbe_logtype_tx, tx, DEBUG);
99 #endif