pcnet32: add suspend and resume capability
Add suspend and resume capability to the driver. Tested both to ram and to disk on x86_64 platform. Signed-off-by: Don Fry <pcnet32@verizon.net> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
a11a6544c0
commit
917270c6ed
1 changed files with 32 additions and 3 deletions
|
@ -23,11 +23,11 @@
|
||||||
|
|
||||||
#define DRV_NAME "pcnet32"
|
#define DRV_NAME "pcnet32"
|
||||||
#ifdef CONFIG_PCNET32_NAPI
|
#ifdef CONFIG_PCNET32_NAPI
|
||||||
#define DRV_VERSION "1.33-NAPI"
|
#define DRV_VERSION "1.34-NAPI"
|
||||||
#else
|
#else
|
||||||
#define DRV_VERSION "1.33"
|
#define DRV_VERSION "1.34"
|
||||||
#endif
|
#endif
|
||||||
#define DRV_RELDATE "27.Jun.2006"
|
#define DRV_RELDATE "14.Aug.2007"
|
||||||
#define PFX DRV_NAME ": "
|
#define PFX DRV_NAME ": "
|
||||||
|
|
||||||
static const char *const version =
|
static const char *const version =
|
||||||
|
@ -2955,6 +2955,33 @@ static void pcnet32_watchdog(struct net_device *dev)
|
||||||
mod_timer(&(lp->watchdog_timer), PCNET32_WATCHDOG_TIMEOUT);
|
mod_timer(&(lp->watchdog_timer), PCNET32_WATCHDOG_TIMEOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int pcnet32_pm_suspend(struct pci_dev *pdev, pm_message_t state)
|
||||||
|
{
|
||||||
|
struct net_device *dev = pci_get_drvdata(pdev);
|
||||||
|
|
||||||
|
if (netif_running(dev)) {
|
||||||
|
netif_device_detach(dev);
|
||||||
|
pcnet32_close(dev);
|
||||||
|
}
|
||||||
|
pci_save_state(pdev);
|
||||||
|
pci_set_power_state(pdev, pci_choose_state(pdev, state));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pcnet32_pm_resume(struct pci_dev *pdev)
|
||||||
|
{
|
||||||
|
struct net_device *dev = pci_get_drvdata(pdev);
|
||||||
|
|
||||||
|
pci_set_power_state(pdev, PCI_D0);
|
||||||
|
pci_restore_state(pdev);
|
||||||
|
|
||||||
|
if (netif_running(dev)) {
|
||||||
|
pcnet32_open(dev);
|
||||||
|
netif_device_attach(dev);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void __devexit pcnet32_remove_one(struct pci_dev *pdev)
|
static void __devexit pcnet32_remove_one(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
struct net_device *dev = pci_get_drvdata(pdev);
|
struct net_device *dev = pci_get_drvdata(pdev);
|
||||||
|
@ -2978,6 +3005,8 @@ static struct pci_driver pcnet32_driver = {
|
||||||
.probe = pcnet32_probe_pci,
|
.probe = pcnet32_probe_pci,
|
||||||
.remove = __devexit_p(pcnet32_remove_one),
|
.remove = __devexit_p(pcnet32_remove_one),
|
||||||
.id_table = pcnet32_pci_tbl,
|
.id_table = pcnet32_pci_tbl,
|
||||||
|
.suspend = pcnet32_pm_suspend,
|
||||||
|
.resume = pcnet32_pm_resume,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* An additional parameter that may be passed in... */
|
/* An additional parameter that may be passed in... */
|
||||||
|
|
Loading…
Add table
Reference in a new issue