diff options
Diffstat (limited to 'drivers/net/e100.c')
| -rw-r--r-- | drivers/net/e100.c | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/drivers/net/e100.c b/drivers/net/e100.c index 27d5d2f02533..19ab3441269c 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c | |||
| @@ -2039,7 +2039,6 @@ static int e100_change_mtu(struct net_device *netdev, int new_mtu) | |||
| 2039 | return 0; | 2039 | return 0; |
| 2040 | } | 2040 | } |
| 2041 | 2041 | ||
| 2042 | #ifdef CONFIG_PM | ||
| 2043 | static int e100_asf(struct nic *nic) | 2042 | static int e100_asf(struct nic *nic) |
| 2044 | { | 2043 | { |
| 2045 | /* ASF can be enabled from eeprom */ | 2044 | /* ASF can be enabled from eeprom */ |
| @@ -2048,7 +2047,6 @@ static int e100_asf(struct nic *nic) | |||
| 2048 | !(nic->eeprom[eeprom_config_asf] & eeprom_gcl) && | 2047 | !(nic->eeprom[eeprom_config_asf] & eeprom_gcl) && |
| 2049 | ((nic->eeprom[eeprom_smbus_addr] & 0xFF) != 0xFE)); | 2048 | ((nic->eeprom[eeprom_smbus_addr] & 0xFF) != 0xFE)); |
| 2050 | } | 2049 | } |
| 2051 | #endif | ||
| 2052 | 2050 | ||
| 2053 | static int e100_up(struct nic *nic) | 2051 | static int e100_up(struct nic *nic) |
| 2054 | { | 2052 | { |
| @@ -2715,34 +2713,35 @@ static void __devexit e100_remove(struct pci_dev *pdev) | |||
| 2715 | } | 2713 | } |
| 2716 | } | 2714 | } |
| 2717 | 2715 | ||
| 2716 | #ifdef CONFIG_PM | ||
| 2718 | static int e100_suspend(struct pci_dev *pdev, pm_message_t state) | 2717 | static int e100_suspend(struct pci_dev *pdev, pm_message_t state) |
| 2719 | { | 2718 | { |
| 2720 | struct net_device *netdev = pci_get_drvdata(pdev); | 2719 | struct net_device *netdev = pci_get_drvdata(pdev); |
| 2721 | struct nic *nic = netdev_priv(netdev); | 2720 | struct nic *nic = netdev_priv(netdev); |
| 2722 | 2721 | ||
| 2722 | #ifdef CONFIG_E100_NAPI | ||
| 2723 | if (netif_running(netdev)) | 2723 | if (netif_running(netdev)) |
| 2724 | e100_down(nic); | 2724 | netif_poll_disable(nic->netdev); |
| 2725 | e100_hw_reset(nic); | 2725 | #endif |
| 2726 | netif_device_detach(netdev); | 2726 | del_timer_sync(&nic->watchdog); |
| 2727 | netif_carrier_off(nic->netdev); | ||
| 2727 | 2728 | ||
| 2728 | #ifdef CONFIG_PM | ||
| 2729 | pci_save_state(pdev); | 2729 | pci_save_state(pdev); |
| 2730 | if (nic->flags & (wol_magic | e100_asf(nic))) | 2730 | |
| 2731 | #else | 2731 | if ((nic->flags & wol_magic) | e100_asf(nic)) { |
| 2732 | if (nic->flags & (wol_magic)) | 2732 | pci_enable_wake(pdev, PCI_D3hot, 1); |
| 2733 | #endif | 2733 | pci_enable_wake(pdev, PCI_D3cold, 1); |
| 2734 | pci_enable_wake(pdev, pci_choose_state(pdev, state), 1); | 2734 | } else { |
| 2735 | else | 2735 | pci_enable_wake(pdev, PCI_D3hot, 0); |
| 2736 | /* disable PME */ | 2736 | pci_enable_wake(pdev, PCI_D3cold, 0); |
| 2737 | pci_enable_wake(pdev, 0, 0); | 2737 | } |
| 2738 | 2738 | ||
| 2739 | pci_disable_device(pdev); | 2739 | pci_disable_device(pdev); |
| 2740 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | 2740 | pci_set_power_state(pdev, PCI_D3hot); |
| 2741 | 2741 | ||
| 2742 | return 0; | 2742 | return 0; |
| 2743 | } | 2743 | } |
| 2744 | 2744 | ||
| 2745 | #ifdef CONFIG_PM | ||
| 2746 | static int e100_resume(struct pci_dev *pdev) | 2745 | static int e100_resume(struct pci_dev *pdev) |
| 2747 | { | 2746 | { |
| 2748 | struct net_device *netdev = pci_get_drvdata(pdev); | 2747 | struct net_device *netdev = pci_get_drvdata(pdev); |
| @@ -2764,7 +2763,26 @@ static int e100_resume(struct pci_dev *pdev) | |||
| 2764 | 2763 | ||
| 2765 | static void e100_shutdown(struct pci_dev *pdev) | 2764 | static void e100_shutdown(struct pci_dev *pdev) |
| 2766 | { | 2765 | { |
| 2767 | e100_suspend(pdev, PMSG_SUSPEND); | 2766 | struct net_device *netdev = pci_get_drvdata(pdev); |
| 2767 | struct nic *nic = netdev_priv(netdev); | ||
| 2768 | |||
| 2769 | #ifdef CONFIG_E100_NAPI | ||
| 2770 | if (netif_running(netdev)) | ||
| 2771 | netif_poll_disable(nic->netdev); | ||
| 2772 | #endif | ||
| 2773 | del_timer_sync(&nic->watchdog); | ||
| 2774 | netif_carrier_off(nic->netdev); | ||
| 2775 | |||
| 2776 | if ((nic->flags & wol_magic) | e100_asf(nic)) { | ||
| 2777 | pci_enable_wake(pdev, PCI_D3hot, 1); | ||
| 2778 | pci_enable_wake(pdev, PCI_D3cold, 1); | ||
| 2779 | } else { | ||
| 2780 | pci_enable_wake(pdev, PCI_D3hot, 0); | ||
| 2781 | pci_enable_wake(pdev, PCI_D3cold, 0); | ||
| 2782 | } | ||
| 2783 | |||
| 2784 | pci_disable_device(pdev); | ||
| 2785 | pci_set_power_state(pdev, PCI_D3hot); | ||
| 2768 | } | 2786 | } |
| 2769 | 2787 | ||
| 2770 | /* ------------------ PCI Error Recovery infrastructure -------------- */ | 2788 | /* ------------------ PCI Error Recovery infrastructure -------------- */ |
| @@ -2848,9 +2866,9 @@ static struct pci_driver e100_driver = { | |||
| 2848 | .id_table = e100_id_table, | 2866 | .id_table = e100_id_table, |
| 2849 | .probe = e100_probe, | 2867 | .probe = e100_probe, |
| 2850 | .remove = __devexit_p(e100_remove), | 2868 | .remove = __devexit_p(e100_remove), |
| 2869 | #ifdef CONFIG_PM | ||
| 2851 | /* Power Management hooks */ | 2870 | /* Power Management hooks */ |
| 2852 | .suspend = e100_suspend, | 2871 | .suspend = e100_suspend, |
| 2853 | #ifdef CONFIG_PM | ||
| 2854 | .resume = e100_resume, | 2872 | .resume = e100_resume, |
| 2855 | #endif | 2873 | #endif |
| 2856 | .shutdown = e100_shutdown, | 2874 | .shutdown = e100_shutdown, |
