From 2dfd6f170deeef32569fa7ce018b3ce68f45cb78 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Tue, 6 Sep 2005 15:16:22 -0700 Subject: [PATCH] --- yaml --- r: 7325 b: refs/heads/master c: 5b039e681b8c5f30aac9cc04385cc94be45d0823 h: refs/heads/master i: 7323: f0e42acdcadaf59dcbced2f26223d49f3b9805ed v: v3 --- [refs] | 2 +- trunk/drivers/net/3c59x.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 39eea68d28e5..5b06fea7311a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d7ae79c72d072e3208c18ff2dc402a69229b7b1b +refs/heads/master: 5b039e681b8c5f30aac9cc04385cc94be45d0823 diff --git a/trunk/drivers/net/3c59x.c b/trunk/drivers/net/3c59x.c index 07746b95fd83..de0dc4ab6e54 100644 --- a/trunk/drivers/net/3c59x.c +++ b/trunk/drivers/net/3c59x.c @@ -973,6 +973,11 @@ static int vortex_suspend (struct pci_dev *pdev, pm_message_t state) netif_device_detach(dev); vortex_down(dev, 1); } + pci_save_state(pdev); + pci_enable_wake(pdev, pci_choose_state(pdev, state), 0); + free_irq(dev->irq, dev); + pci_disable_device(pdev); + pci_set_power_state(pdev, pci_choose_state(pdev, state)); } return 0; } @@ -980,8 +985,19 @@ static int vortex_suspend (struct pci_dev *pdev, pm_message_t state) static int vortex_resume (struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); + struct vortex_private *vp = netdev_priv(dev); - if (dev && dev->priv) { + if (dev && vp) { + pci_set_power_state(pdev, PCI_D0); + pci_restore_state(pdev); + pci_enable_device(pdev); + pci_set_master(pdev); + if (request_irq(dev->irq, vp->full_bus_master_rx ? + &boomerang_interrupt : &vortex_interrupt, SA_SHIRQ, dev->name, dev)) { + printk(KERN_WARNING "%s: Could not reserve IRQ %d\n", dev->name, dev->irq); + pci_disable_device(pdev); + return -EBUSY; + } if (netif_running(dev)) { vortex_up(dev); netif_device_attach(dev);