162306a36Sopenharmony_ci/* Synopsys DesignWare Core Enterprise Ethernet (XLGMAC) Driver 262306a36Sopenharmony_ci * 362306a36Sopenharmony_ci * Copyright (c) 2017 Synopsys, Inc. (www.synopsys.com) 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * This program is dual-licensed; you may select either version 2 of 662306a36Sopenharmony_ci * the GNU General Public License ("GPL") or BSD license ("BSD"). 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * This Synopsys DWC XLGMAC software driver and associated documentation 962306a36Sopenharmony_ci * (hereinafter the "Software") is an unsupported proprietary work of 1062306a36Sopenharmony_ci * Synopsys, Inc. unless otherwise expressly agreed to in writing between 1162306a36Sopenharmony_ci * Synopsys and you. The Software IS NOT an item of Licensed Software or a 1262306a36Sopenharmony_ci * Licensed Product under any End User Software License Agreement or 1362306a36Sopenharmony_ci * Agreement for Licensed Products with Synopsys or any supplement thereto. 1462306a36Sopenharmony_ci * Synopsys is a registered trademark of Synopsys, Inc. Other names included 1562306a36Sopenharmony_ci * in the SOFTWARE may be the trademarks of their respective owners. 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#include <linux/kernel.h> 1962306a36Sopenharmony_ci#include <linux/module.h> 2062306a36Sopenharmony_ci#include <linux/pci.h> 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#include "dwc-xlgmac.h" 2362306a36Sopenharmony_ci#include "dwc-xlgmac-reg.h" 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_cistatic int xlgmac_probe(struct pci_dev *pcidev, const struct pci_device_id *id) 2662306a36Sopenharmony_ci{ 2762306a36Sopenharmony_ci struct device *dev = &pcidev->dev; 2862306a36Sopenharmony_ci struct xlgmac_resources res; 2962306a36Sopenharmony_ci int i, ret; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci ret = pcim_enable_device(pcidev); 3262306a36Sopenharmony_ci if (ret) { 3362306a36Sopenharmony_ci dev_err(dev, "ERROR: failed to enable device\n"); 3462306a36Sopenharmony_ci return ret; 3562306a36Sopenharmony_ci } 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci for (i = 0; i < PCI_STD_NUM_BARS; i++) { 3862306a36Sopenharmony_ci if (pci_resource_len(pcidev, i) == 0) 3962306a36Sopenharmony_ci continue; 4062306a36Sopenharmony_ci ret = pcim_iomap_regions(pcidev, BIT(i), XLGMAC_DRV_NAME); 4162306a36Sopenharmony_ci if (ret) 4262306a36Sopenharmony_ci return ret; 4362306a36Sopenharmony_ci break; 4462306a36Sopenharmony_ci } 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci pci_set_master(pcidev); 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci memset(&res, 0, sizeof(res)); 4962306a36Sopenharmony_ci res.irq = pcidev->irq; 5062306a36Sopenharmony_ci res.addr = pcim_iomap_table(pcidev)[i]; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci return xlgmac_drv_probe(&pcidev->dev, &res); 5362306a36Sopenharmony_ci} 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistatic void xlgmac_remove(struct pci_dev *pcidev) 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci xlgmac_drv_remove(&pcidev->dev); 5862306a36Sopenharmony_ci} 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistatic const struct pci_device_id xlgmac_pci_tbl[] = { 6162306a36Sopenharmony_ci { PCI_DEVICE(PCI_VENDOR_ID_SYNOPSYS, 0x7302) }, 6262306a36Sopenharmony_ci { 0 } 6362306a36Sopenharmony_ci}; 6462306a36Sopenharmony_ciMODULE_DEVICE_TABLE(pci, xlgmac_pci_tbl); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cistatic struct pci_driver xlgmac_pci_driver = { 6762306a36Sopenharmony_ci .name = XLGMAC_DRV_NAME, 6862306a36Sopenharmony_ci .id_table = xlgmac_pci_tbl, 6962306a36Sopenharmony_ci .probe = xlgmac_probe, 7062306a36Sopenharmony_ci .remove = xlgmac_remove, 7162306a36Sopenharmony_ci}; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_cimodule_pci_driver(xlgmac_pci_driver); 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciMODULE_DESCRIPTION(XLGMAC_DRV_DESC); 7662306a36Sopenharmony_ciMODULE_VERSION(XLGMAC_DRV_VERSION); 7762306a36Sopenharmony_ciMODULE_AUTHOR("Jie Deng <jiedeng@synopsys.com>"); 7862306a36Sopenharmony_ciMODULE_LICENSE("Dual BSD/GPL"); 79