|
@@ -71,64 +71,46 @@ static void stmmac_default_data(void)
|
|
|
static int stmmac_pci_probe(struct pci_dev *pdev,
|
|
|
const struct pci_device_id *id)
|
|
|
{
|
|
|
- int ret = 0;
|
|
|
- void __iomem *addr = NULL;
|
|
|
- struct stmmac_priv *priv = NULL;
|
|
|
+ struct stmmac_priv *priv;
|
|
|
int i;
|
|
|
+ int ret;
|
|
|
|
|
|
/* Enable pci device */
|
|
|
- ret = pci_enable_device(pdev);
|
|
|
+ ret = pcim_enable_device(pdev);
|
|
|
if (ret) {
|
|
|
- pr_err("%s : ERROR: failed to enable %s device\n", __func__,
|
|
|
- pci_name(pdev));
|
|
|
+ dev_err(&pdev->dev, "%s: ERROR: failed to enable device\n",
|
|
|
+ __func__);
|
|
|
return ret;
|
|
|
}
|
|
|
- if (pci_request_regions(pdev, STMMAC_RESOURCE_NAME)) {
|
|
|
- pr_err("%s: ERROR: failed to get PCI region\n", __func__);
|
|
|
- ret = -ENODEV;
|
|
|
- goto err_out_req_reg_failed;
|
|
|
- }
|
|
|
|
|
|
/* Get the base address of device */
|
|
|
- for (i = 0; i <= 5; i++) {
|
|
|
+ for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
|
|
|
if (pci_resource_len(pdev, i) == 0)
|
|
|
continue;
|
|
|
- addr = pci_iomap(pdev, i, 0);
|
|
|
- if (addr == NULL) {
|
|
|
- pr_err("%s: ERROR: cannot map register memory aborting",
|
|
|
- __func__);
|
|
|
- ret = -EIO;
|
|
|
- goto err_out_map_failed;
|
|
|
- }
|
|
|
+ ret = pcim_iomap_regions(pdev, BIT(i), pci_name(pdev));
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
pci_set_master(pdev);
|
|
|
|
|
|
stmmac_default_data();
|
|
|
|
|
|
- priv = stmmac_dvr_probe(&(pdev->dev), &plat_dat, addr);
|
|
|
+ priv = stmmac_dvr_probe(&pdev->dev, &plat_dat,
|
|
|
+ pcim_iomap_table(pdev)[i]);
|
|
|
if (IS_ERR(priv)) {
|
|
|
- pr_err("%s: main driver probe failed", __func__);
|
|
|
- ret = PTR_ERR(priv);
|
|
|
- goto err_out;
|
|
|
+ dev_err(&pdev->dev, "%s: main driver probe failed\n", __func__);
|
|
|
+ return PTR_ERR(priv);
|
|
|
}
|
|
|
priv->dev->irq = pdev->irq;
|
|
|
priv->wol_irq = pdev->irq;
|
|
|
|
|
|
pci_set_drvdata(pdev, priv->dev);
|
|
|
|
|
|
- pr_debug("STMMAC platform driver registration completed");
|
|
|
+ dev_dbg(&pdev->dev, "STMMAC PCI driver registration completed\n");
|
|
|
|
|
|
return 0;
|
|
|
-
|
|
|
-err_out:
|
|
|
- pci_clear_master(pdev);
|
|
|
-err_out_map_failed:
|
|
|
- pci_release_regions(pdev);
|
|
|
-err_out_req_reg_failed:
|
|
|
- pci_disable_device(pdev);
|
|
|
-
|
|
|
- return ret;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -141,39 +123,30 @@ err_out_req_reg_failed:
|
|
|
static void stmmac_pci_remove(struct pci_dev *pdev)
|
|
|
{
|
|
|
struct net_device *ndev = pci_get_drvdata(pdev);
|
|
|
- struct stmmac_priv *priv = netdev_priv(ndev);
|
|
|
|
|
|
stmmac_dvr_remove(ndev);
|
|
|
-
|
|
|
- pci_iounmap(pdev, priv->ioaddr);
|
|
|
- pci_release_regions(pdev);
|
|
|
- pci_disable_device(pdev);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_PM
|
|
|
-static int stmmac_pci_suspend(struct pci_dev *pdev, pm_message_t state)
|
|
|
+#ifdef CONFIG_PM_SLEEP
|
|
|
+static int stmmac_pci_suspend(struct device *dev)
|
|
|
{
|
|
|
+ struct pci_dev *pdev = to_pci_dev(dev);
|
|
|
struct net_device *ndev = pci_get_drvdata(pdev);
|
|
|
- int ret;
|
|
|
-
|
|
|
- ret = stmmac_suspend(ndev);
|
|
|
- pci_save_state(pdev);
|
|
|
- pci_set_power_state(pdev, pci_choose_state(pdev, state));
|
|
|
|
|
|
- return ret;
|
|
|
+ return stmmac_suspend(ndev);
|
|
|
}
|
|
|
|
|
|
-static int stmmac_pci_resume(struct pci_dev *pdev)
|
|
|
+static int stmmac_pci_resume(struct device *dev)
|
|
|
{
|
|
|
+ struct pci_dev *pdev = to_pci_dev(dev);
|
|
|
struct net_device *ndev = pci_get_drvdata(pdev);
|
|
|
|
|
|
- pci_set_power_state(pdev, PCI_D0);
|
|
|
- pci_restore_state(pdev);
|
|
|
-
|
|
|
return stmmac_resume(ndev);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+static SIMPLE_DEV_PM_OPS(stmmac_pm_ops, stmmac_pci_suspend, stmmac_pci_resume);
|
|
|
+
|
|
|
#define STMMAC_VENDOR_ID 0x700
|
|
|
#define STMMAC_DEVICE_ID 0x1108
|
|
|
|
|
@@ -190,10 +163,9 @@ struct pci_driver stmmac_pci_driver = {
|
|
|
.id_table = stmmac_id_table,
|
|
|
.probe = stmmac_pci_probe,
|
|
|
.remove = stmmac_pci_remove,
|
|
|
-#ifdef CONFIG_PM
|
|
|
- .suspend = stmmac_pci_suspend,
|
|
|
- .resume = stmmac_pci_resume,
|
|
|
-#endif
|
|
|
+ .driver = {
|
|
|
+ .pm = &stmmac_pm_ops,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet PCI driver");
|