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