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