|
@@ -3811,22 +3811,11 @@ static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)
|
|
|
|
|
|
static void rtl8169_net_suspend(struct net_device *dev)
|
|
|
{
|
|
|
- struct rtl8169_private *tp = netdev_priv(dev);
|
|
|
- void __iomem *ioaddr = tp->mmio_addr;
|
|
|
-
|
|
|
if (!netif_running(dev))
|
|
|
return;
|
|
|
|
|
|
netif_device_detach(dev);
|
|
|
netif_stop_queue(dev);
|
|
|
-
|
|
|
- spin_lock_irq(&tp->lock);
|
|
|
-
|
|
|
- rtl8169_asic_down(ioaddr);
|
|
|
-
|
|
|
- rtl8169_rx_missed(dev, ioaddr);
|
|
|
-
|
|
|
- spin_unlock_irq(&tp->lock);
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_PM
|
|
@@ -3876,9 +3865,17 @@ static struct dev_pm_ops rtl8169_pm_ops = {
|
|
|
static void rtl_shutdown(struct pci_dev *pdev)
|
|
|
{
|
|
|
struct net_device *dev = pci_get_drvdata(pdev);
|
|
|
+ struct rtl8169_private *tp = netdev_priv(dev);
|
|
|
+ void __iomem *ioaddr = tp->mmio_addr;
|
|
|
|
|
|
rtl8169_net_suspend(dev);
|
|
|
|
|
|
+ spin_lock_irq(&tp->lock);
|
|
|
+
|
|
|
+ rtl8169_asic_down(ioaddr);
|
|
|
+
|
|
|
+ spin_unlock_irq(&tp->lock);
|
|
|
+
|
|
|
if (system_state == SYSTEM_POWER_OFF) {
|
|
|
pci_wake_from_d3(pdev, true);
|
|
|
pci_set_power_state(pdev, PCI_D3hot);
|