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