xref: /dpdk/drivers/net/axgbe/axgbe_ethdev.c (revision 8691632f92c2e46e6b8e8fa687b148cc7613252e)
1 /*   SPDX-License-Identifier: BSD-3-Clause
2  *   Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved.
3  *   Copyright(c) 2018 Synopsys, Inc. All rights reserved.
4  */
5 
6 #include "axgbe_ethdev.h"
7 
8 static int eth_axgbe_dev_init(struct rte_eth_dev *eth_dev);
9 static int eth_axgbe_dev_uninit(struct rte_eth_dev *eth_dev);
10 
11 /* The set of PCI devices this driver supports */
12 #define AMD_PCI_VENDOR_ID       0x1022
13 #define AMD_PCI_AXGBE_DEVICE_V2A 0x1458
14 #define AMD_PCI_AXGBE_DEVICE_V2B 0x1459
15 
16 int axgbe_logtype_init;
17 int axgbe_logtype_driver;
18 
19 static const struct rte_pci_id pci_id_axgbe_map[] = {
20 	{RTE_PCI_DEVICE(AMD_PCI_VENDOR_ID, AMD_PCI_AXGBE_DEVICE_V2A)},
21 	{RTE_PCI_DEVICE(AMD_PCI_VENDOR_ID, AMD_PCI_AXGBE_DEVICE_V2B)},
22 	{ .vendor_id = 0, },
23 };
24 
25 /*
26  * It returns 0 on success.
27  */
28 static int
29 eth_axgbe_dev_init(struct rte_eth_dev *eth_dev)
30 {
31 	PMD_INIT_FUNC_TRACE();
32 	struct axgbe_port *pdata;
33 	struct rte_pci_device *pci_dev;
34 
35 	/*
36 	 * For secondary processes, we don't initialise any further as primary
37 	 * has already done this work.
38 	 */
39 	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
40 		return 0;
41 
42 	pdata = (struct axgbe_port *)eth_dev->data->dev_private;
43 	pdata->eth_dev = eth_dev;
44 
45 	pci_dev = RTE_DEV_TO_PCI(eth_dev->device);
46 	pdata->pci_dev = pci_dev;
47 
48 	PMD_INIT_LOG(DEBUG, "port %d vendorID=0x%x deviceID=0x%x",
49 		     eth_dev->data->port_id, pci_dev->id.vendor_id,
50 		     pci_dev->id.device_id);
51 
52 	return 0;
53 }
54 
55 static int
56 eth_axgbe_dev_uninit(struct rte_eth_dev *eth_dev __rte_unused)
57 {
58 	/* stub function */
59 	PMD_INIT_FUNC_TRACE();
60 
61 	return 0;
62 }
63 
64 static int eth_axgbe_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
65 	struct rte_pci_device *pci_dev)
66 {
67 	return rte_eth_dev_pci_generic_probe(pci_dev,
68 		sizeof(struct axgbe_port), eth_axgbe_dev_init);
69 }
70 
71 static int eth_axgbe_pci_remove(struct rte_pci_device *pci_dev)
72 {
73 	return rte_eth_dev_pci_generic_remove(pci_dev, eth_axgbe_dev_uninit);
74 }
75 
76 static struct rte_pci_driver rte_axgbe_pmd = {
77 	.id_table = pci_id_axgbe_map,
78 	.drv_flags = RTE_PCI_DRV_NEED_MAPPING,
79 	.probe = eth_axgbe_pci_probe,
80 	.remove = eth_axgbe_pci_remove,
81 };
82 
83 RTE_PMD_REGISTER_PCI(net_axgbe, rte_axgbe_pmd);
84 RTE_PMD_REGISTER_PCI_TABLE(net_axgbe, pci_id_axgbe_map);
85 RTE_PMD_REGISTER_KMOD_DEP(net_axgbe, "* igb_uio | uio_pci_generic | vfio-pci");
86 
87 RTE_INIT(axgbe_init_log);
88 static void
89 axgbe_init_log(void)
90 {
91 	axgbe_logtype_init = rte_log_register("pmd.net.axgbe.init");
92 	if (axgbe_logtype_init >= 0)
93 		rte_log_set_level(axgbe_logtype_init, RTE_LOG_NOTICE);
94 	axgbe_logtype_driver = rte_log_register("pmd.net.axgbe.driver");
95 	if (axgbe_logtype_driver >= 0)
96 		rte_log_set_level(axgbe_logtype_driver, RTE_LOG_NOTICE);
97 }
98