aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/e100.c51
1 files changed, 20 insertions, 31 deletions
diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index 3909829d5199..e9e712471b13 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -2715,68 +2715,56 @@ static void __devexit e100_remove(struct pci_dev *pdev)
2715 } 2715 }
2716} 2716}
2717 2717
2718#ifdef CONFIG_PM
2719static int e100_suspend(struct pci_dev *pdev, pm_message_t state) 2718static int e100_suspend(struct pci_dev *pdev, pm_message_t state)
2720{ 2719{
2721 struct net_device *netdev = pci_get_drvdata(pdev); 2720 struct net_device *netdev = pci_get_drvdata(pdev);
2722 struct nic *nic = netdev_priv(netdev); 2721 struct nic *nic = netdev_priv(netdev);
2723 int retval;
2724 2722
2725 if(netif_running(netdev)) 2723 if (netif_running(netdev))
2726 e100_down(nic); 2724 e100_down(nic);
2727 e100_hw_reset(nic); 2725 e100_hw_reset(nic);
2728 netif_device_detach(netdev); 2726 netif_device_detach(netdev);
2729 2727
2728#ifdef CONFIG_PM
2730 pci_save_state(pdev); 2729 pci_save_state(pdev);
2731 retval = pci_enable_wake(pdev, pci_choose_state(pdev, state), 2730 if (nic->flags & (wol_magic | e100_asf(nic)))
2732 nic->flags & (wol_magic | e100_asf(nic))); 2731#else
2733 if (retval) 2732 if (nic->flags & (wol_magic))
2734 DPRINTK(PROBE,ERR, "Error enabling wake\n"); 2733#endif
2734 pci_enable_wake(pdev, pci_choose_state(pdev, state), 1);
2735 else
2736 /* disable PME */
2737 pci_enable_wake(pdev, 0, 0);
2738
2735 pci_disable_device(pdev); 2739 pci_disable_device(pdev);
2736 retval = pci_set_power_state(pdev, pci_choose_state(pdev, state)); 2740 pci_set_power_state(pdev, pci_choose_state(pdev, state));
2737 if (retval)
2738 DPRINTK(PROBE,ERR, "Error %d setting power state\n", retval);
2739 2741
2740 return 0; 2742 return 0;
2741} 2743}
2742 2744
2745#ifdef CONFIG_PM
2743static int e100_resume(struct pci_dev *pdev) 2746static int e100_resume(struct pci_dev *pdev)
2744{ 2747{
2745 struct net_device *netdev = pci_get_drvdata(pdev); 2748 struct net_device *netdev = pci_get_drvdata(pdev);
2746 struct nic *nic = netdev_priv(netdev); 2749 struct nic *nic = netdev_priv(netdev);
2747 int retval;
2748 2750
2749 retval = pci_set_power_state(pdev, PCI_D0); 2751 pci_set_power_state(pdev, PCI_D0);
2750 if (retval)
2751 DPRINTK(PROBE,ERR, "Error waking adapter\n");
2752 pci_restore_state(pdev); 2752 pci_restore_state(pdev);
2753 /* ack any pending wake events, disable PME */ 2753 /* ack any pending wake events, disable PME */
2754 retval = pci_enable_wake(pdev, 0, 0); 2754 pci_enable_wake(pdev, 0, 0);
2755 if (retval)
2756 DPRINTK(PROBE,ERR, "Error clearing wake events\n");
2757 2755
2758 netif_device_attach(netdev); 2756 netif_device_attach(netdev);
2759 if(netif_running(netdev)) 2757 if (netif_running(netdev))
2760 e100_up(nic); 2758 e100_up(nic);
2761 2759
2762 return 0; 2760 return 0;
2763} 2761}
2764#endif 2762#endif /* CONFIG_PM */
2765 2763
2766 2764
2767static void e100_shutdown(struct pci_dev *pdev) 2765static void e100_shutdown(struct pci_dev *pdev)
2768{ 2766{
2769 struct net_device *netdev = pci_get_drvdata(pdev); 2767 e100_suspend(pdev, PMSG_SUSPEND);
2770 struct nic *nic = netdev_priv(netdev);
2771 int retval;
2772
2773#ifdef CONFIG_PM
2774 retval = pci_enable_wake(pdev, 0, nic->flags & (wol_magic | e100_asf(nic)));
2775#else
2776 retval = pci_enable_wake(pdev, 0, nic->flags & (wol_magic));
2777#endif
2778 if (retval)
2779 DPRINTK(PROBE,ERR, "Error enabling wake\n");
2780} 2768}
2781 2769
2782/* ------------------ PCI Error Recovery infrastructure -------------- */ 2770/* ------------------ PCI Error Recovery infrastructure -------------- */
@@ -2860,8 +2848,9 @@ static struct pci_driver e100_driver = {
2860 .id_table = e100_id_table, 2848 .id_table = e100_id_table,
2861 .probe = e100_probe, 2849 .probe = e100_probe,
2862 .remove = __devexit_p(e100_remove), 2850 .remove = __devexit_p(e100_remove),
2863#ifdef CONFIG_PM 2851 /* Power Management hooks */
2864 .suspend = e100_suspend, 2852 .suspend = e100_suspend,
2853#ifdef CONFIG_PM
2865 .resume = e100_resume, 2854 .resume = e100_resume,
2866#endif 2855#endif
2867 .shutdown = e100_shutdown, 2856 .shutdown = e100_shutdown,