Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 149736
b: refs/heads/master
c: 861ab44
h: refs/heads/master
v: v3
  • Loading branch information
Rafael J. Wysocki authored and David S. Miller committed Apr 13, 2009
1 parent d2d6e75 commit 83fdf16
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0ee904c35cc3fdd26a9c76077d9692d458309186
refs/heads/master: 861ab44059350e5cab350238606cf8814abab93b
61 changes: 39 additions & 22 deletions trunk/drivers/net/r8169.c
Original file line number Diff line number Diff line change
Expand Up @@ -3791,16 +3791,13 @@ static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)
return &dev->stats;
}

#ifdef CONFIG_PM

static int rtl8169_suspend(struct pci_dev *pdev, pm_message_t state)
static void rtl8169_net_suspend(struct net_device *dev)
{
struct net_device *dev = pci_get_drvdata(pdev);
struct rtl8169_private *tp = netdev_priv(dev);
void __iomem *ioaddr = tp->mmio_addr;

if (!netif_running(dev))
goto out_pci_suspend;
return;

netif_device_detach(dev);
netif_stop_queue(dev);
Expand All @@ -3812,24 +3809,25 @@ static int rtl8169_suspend(struct pci_dev *pdev, pm_message_t state)
rtl8169_rx_missed(dev, ioaddr);

spin_unlock_irq(&tp->lock);
}

#ifdef CONFIG_PM

static int rtl8169_suspend(struct device *device)
{
struct pci_dev *pdev = to_pci_dev(device);
struct net_device *dev = pci_get_drvdata(pdev);

out_pci_suspend:
pci_save_state(pdev);
pci_enable_wake(pdev, pci_choose_state(pdev, state),
(tp->features & RTL_FEATURE_WOL) ? 1 : 0);
pci_set_power_state(pdev, pci_choose_state(pdev, state));
rtl8169_net_suspend(dev);

return 0;
}

static int rtl8169_resume(struct pci_dev *pdev)
static int rtl8169_resume(struct device *device)
{
struct pci_dev *pdev = to_pci_dev(device);
struct net_device *dev = pci_get_drvdata(pdev);

pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev);
pci_enable_wake(pdev, PCI_D0, 0);

if (!netif_running(dev))
goto out;

Expand All @@ -3840,23 +3838,42 @@ static int rtl8169_resume(struct pci_dev *pdev)
return 0;
}

static struct dev_pm_ops rtl8169_pm_ops = {
.suspend = rtl8169_suspend,
.resume = rtl8169_resume,
.freeze = rtl8169_suspend,
.thaw = rtl8169_resume,
.poweroff = rtl8169_suspend,
.restore = rtl8169_resume,
};

#define RTL8169_PM_OPS (&rtl8169_pm_ops)

#else /* !CONFIG_PM */

#define RTL8169_PM_OPS NULL

#endif /* !CONFIG_PM */

static void rtl_shutdown(struct pci_dev *pdev)
{
rtl8169_suspend(pdev, PMSG_SUSPEND);
}
struct net_device *dev = pci_get_drvdata(pdev);

rtl8169_net_suspend(dev);

#endif /* CONFIG_PM */
if (system_state == SYSTEM_POWER_OFF) {
pci_wake_from_d3(pdev, true);
pci_set_power_state(pdev, PCI_D3hot);
}
}

static struct pci_driver rtl8169_pci_driver = {
.name = MODULENAME,
.id_table = rtl8169_pci_tbl,
.probe = rtl8169_init_one,
.remove = __devexit_p(rtl8169_remove_one),
#ifdef CONFIG_PM
.suspend = rtl8169_suspend,
.resume = rtl8169_resume,
.shutdown = rtl_shutdown,
#endif
.driver.pm = RTL8169_PM_OPS,
};

static int __init rtl8169_init_module(void)
Expand Down

0 comments on commit 83fdf16

Please sign in to comment.