diff options
Diffstat (limited to 'drivers/net/e1000/e1000_main.c')
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 70 |
1 files changed, 8 insertions, 62 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 619c89218b4b..a71023741c3a 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -1417,10 +1417,6 @@ e1000_open(struct net_device *netdev) | |||
1417 | if ((err = e1000_setup_all_rx_resources(adapter))) | 1417 | if ((err = e1000_setup_all_rx_resources(adapter))) |
1418 | goto err_setup_rx; | 1418 | goto err_setup_rx; |
1419 | 1419 | ||
1420 | err = e1000_request_irq(adapter); | ||
1421 | if (err) | ||
1422 | goto err_req_irq; | ||
1423 | |||
1424 | e1000_power_up_phy(adapter); | 1420 | e1000_power_up_phy(adapter); |
1425 | 1421 | ||
1426 | if ((err = e1000_up(adapter))) | 1422 | if ((err = e1000_up(adapter))) |
@@ -1431,6 +1427,10 @@ e1000_open(struct net_device *netdev) | |||
1431 | e1000_update_mng_vlan(adapter); | 1427 | e1000_update_mng_vlan(adapter); |
1432 | } | 1428 | } |
1433 | 1429 | ||
1430 | err = e1000_request_irq(adapter); | ||
1431 | if (err) | ||
1432 | goto err_req_irq; | ||
1433 | |||
1434 | /* If AMT is enabled, let the firmware know that the network | 1434 | /* If AMT is enabled, let the firmware know that the network |
1435 | * interface is now open */ | 1435 | * interface is now open */ |
1436 | if (adapter->hw.mac_type == e1000_82573 && | 1436 | if (adapter->hw.mac_type == e1000_82573 && |
@@ -1439,10 +1439,10 @@ e1000_open(struct net_device *netdev) | |||
1439 | 1439 | ||
1440 | return E1000_SUCCESS; | 1440 | return E1000_SUCCESS; |
1441 | 1441 | ||
1442 | err_req_irq: | ||
1443 | e1000_down(adapter); | ||
1442 | err_up: | 1444 | err_up: |
1443 | e1000_power_down_phy(adapter); | 1445 | e1000_power_down_phy(adapter); |
1444 | e1000_free_irq(adapter); | ||
1445 | err_req_irq: | ||
1446 | e1000_free_all_rx_resources(adapter); | 1446 | e1000_free_all_rx_resources(adapter); |
1447 | err_setup_rx: | 1447 | err_setup_rx: |
1448 | e1000_free_all_tx_resources(adapter); | 1448 | e1000_free_all_tx_resources(adapter); |
@@ -5071,58 +5071,6 @@ e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx) | |||
5071 | return 0; | 5071 | return 0; |
5072 | } | 5072 | } |
5073 | 5073 | ||
5074 | #ifdef CONFIG_PM | ||
5075 | /* Save/restore 16 or 64 dwords of PCI config space depending on which | ||
5076 | * bus we're on (PCI(X) vs. PCI-E) | ||
5077 | */ | ||
5078 | #define PCIE_CONFIG_SPACE_LEN 256 | ||
5079 | #define PCI_CONFIG_SPACE_LEN 64 | ||
5080 | static int | ||
5081 | e1000_pci_save_state(struct e1000_adapter *adapter) | ||
5082 | { | ||
5083 | struct pci_dev *dev = adapter->pdev; | ||
5084 | int size; | ||
5085 | int i; | ||
5086 | |||
5087 | if (adapter->hw.mac_type >= e1000_82571) | ||
5088 | size = PCIE_CONFIG_SPACE_LEN; | ||
5089 | else | ||
5090 | size = PCI_CONFIG_SPACE_LEN; | ||
5091 | |||
5092 | WARN_ON(adapter->config_space != NULL); | ||
5093 | |||
5094 | adapter->config_space = kmalloc(size, GFP_KERNEL); | ||
5095 | if (!adapter->config_space) { | ||
5096 | DPRINTK(PROBE, ERR, "unable to allocate %d bytes\n", size); | ||
5097 | return -ENOMEM; | ||
5098 | } | ||
5099 | for (i = 0; i < (size / 4); i++) | ||
5100 | pci_read_config_dword(dev, i * 4, &adapter->config_space[i]); | ||
5101 | return 0; | ||
5102 | } | ||
5103 | |||
5104 | static void | ||
5105 | e1000_pci_restore_state(struct e1000_adapter *adapter) | ||
5106 | { | ||
5107 | struct pci_dev *dev = adapter->pdev; | ||
5108 | int size; | ||
5109 | int i; | ||
5110 | |||
5111 | if (adapter->config_space == NULL) | ||
5112 | return; | ||
5113 | |||
5114 | if (adapter->hw.mac_type >= e1000_82571) | ||
5115 | size = PCIE_CONFIG_SPACE_LEN; | ||
5116 | else | ||
5117 | size = PCI_CONFIG_SPACE_LEN; | ||
5118 | for (i = 0; i < (size / 4); i++) | ||
5119 | pci_write_config_dword(dev, i * 4, adapter->config_space[i]); | ||
5120 | kfree(adapter->config_space); | ||
5121 | adapter->config_space = NULL; | ||
5122 | return; | ||
5123 | } | ||
5124 | #endif /* CONFIG_PM */ | ||
5125 | |||
5126 | static int | 5074 | static int |
5127 | e1000_suspend(struct pci_dev *pdev, pm_message_t state) | 5075 | e1000_suspend(struct pci_dev *pdev, pm_message_t state) |
5128 | { | 5076 | { |
@@ -5142,9 +5090,7 @@ e1000_suspend(struct pci_dev *pdev, pm_message_t state) | |||
5142 | } | 5090 | } |
5143 | 5091 | ||
5144 | #ifdef CONFIG_PM | 5092 | #ifdef CONFIG_PM |
5145 | /* Implement our own version of pci_save_state(pdev) because pci- | 5093 | retval = pci_save_state(pdev); |
5146 | * express adapters have 256-byte config spaces. */ | ||
5147 | retval = e1000_pci_save_state(adapter); | ||
5148 | if (retval) | 5094 | if (retval) |
5149 | return retval; | 5095 | return retval; |
5150 | #endif | 5096 | #endif |
@@ -5231,7 +5177,7 @@ e1000_resume(struct pci_dev *pdev) | |||
5231 | uint32_t err; | 5177 | uint32_t err; |
5232 | 5178 | ||
5233 | pci_set_power_state(pdev, PCI_D0); | 5179 | pci_set_power_state(pdev, PCI_D0); |
5234 | e1000_pci_restore_state(adapter); | 5180 | pci_restore_state(pdev); |
5235 | if ((err = pci_enable_device(pdev))) { | 5181 | if ((err = pci_enable_device(pdev))) { |
5236 | printk(KERN_ERR "e1000: Cannot enable PCI device from suspend\n"); | 5182 | printk(KERN_ERR "e1000: Cannot enable PCI device from suspend\n"); |
5237 | return err; | 5183 | return err; |