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