aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/netxen/netxen_nic_main.c38
1 files changed, 30 insertions, 8 deletions
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index f618e7c8eeb1..794c19b2254f 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -922,6 +922,8 @@ netxen_nic_down(struct netxen_adapter *adapter, struct net_device *netdev)
922 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) 922 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
923 netxen_p3_free_mac_list(adapter); 923 netxen_p3_free_mac_list(adapter);
924 924
925 adapter->set_promisc(adapter, NETXEN_NIU_NON_PROMISC_MODE);
926
925 netxen_napi_disable(adapter); 927 netxen_napi_disable(adapter);
926 928
927 netxen_release_tx_buffers(adapter); 929 netxen_release_tx_buffers(adapter);
@@ -1288,14 +1290,11 @@ static void __devexit netxen_nic_remove(struct pci_dev *pdev)
1288 1290
1289 free_netdev(netdev); 1291 free_netdev(netdev);
1290} 1292}
1291 1293static int __netxen_nic_shutdown(struct pci_dev *pdev)
1292#ifdef CONFIG_PM
1293static int
1294netxen_nic_suspend(struct pci_dev *pdev, pm_message_t state)
1295{ 1294{
1296
1297 struct netxen_adapter *adapter = pci_get_drvdata(pdev); 1295 struct netxen_adapter *adapter = pci_get_drvdata(pdev);
1298 struct net_device *netdev = adapter->netdev; 1296 struct net_device *netdev = adapter->netdev;
1297 int retval;
1299 1298
1300 netif_device_detach(netdev); 1299 netif_device_detach(netdev);
1301 1300
@@ -1307,7 +1306,12 @@ netxen_nic_suspend(struct pci_dev *pdev, pm_message_t state)
1307 1306
1308 netxen_nic_detach(adapter); 1307 netxen_nic_detach(adapter);
1309 1308
1310 pci_save_state(pdev); 1309 if (adapter->portnum == 0)
1310 netxen_free_dummy_dma(adapter);
1311
1312 retval = pci_save_state(pdev);
1313 if (retval)
1314 return retval;
1311 1315
1312 if (netxen_nic_wol_supported(adapter)) { 1316 if (netxen_nic_wol_supported(adapter)) {
1313 pci_enable_wake(pdev, PCI_D3cold, 1); 1317 pci_enable_wake(pdev, PCI_D3cold, 1);
@@ -1315,10 +1319,27 @@ netxen_nic_suspend(struct pci_dev *pdev, pm_message_t state)
1315 } 1319 }
1316 1320
1317 pci_disable_device(pdev); 1321 pci_disable_device(pdev);
1318 pci_set_power_state(pdev, pci_choose_state(pdev, state));
1319 1322
1320 return 0; 1323 return 0;
1321} 1324}
1325static void netxen_nic_shutdown(struct pci_dev *pdev)
1326{
1327 if (__netxen_nic_shutdown(pdev))
1328 return;
1329}
1330#ifdef CONFIG_PM
1331static int
1332netxen_nic_suspend(struct pci_dev *pdev, pm_message_t state)
1333{
1334 int retval;
1335
1336 retval = __netxen_nic_shutdown(pdev);
1337 if (retval)
1338 return retval;
1339
1340 pci_set_power_state(pdev, pci_choose_state(pdev, state));
1341 return 0;
1342}
1322 1343
1323static int 1344static int
1324netxen_nic_resume(struct pci_dev *pdev) 1345netxen_nic_resume(struct pci_dev *pdev)
@@ -2068,8 +2089,9 @@ static struct pci_driver netxen_driver = {
2068 .remove = __devexit_p(netxen_nic_remove), 2089 .remove = __devexit_p(netxen_nic_remove),
2069#ifdef CONFIG_PM 2090#ifdef CONFIG_PM
2070 .suspend = netxen_nic_suspend, 2091 .suspend = netxen_nic_suspend,
2071 .resume = netxen_nic_resume 2092 .resume = netxen_nic_resume,
2072#endif 2093#endif
2094 .shutdown = netxen_nic_shutdown
2073}; 2095};
2074 2096
2075static int __init netxen_init_module(void) 2097static int __init netxen_init_module(void)