X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2F3c509.c;h=830528dce0ca72daf59744ce49d1f5cf6a74fcdb;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=dc845f36fe49e001ceb5e8580916f7aa89d64b12;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c index dc845f36f..830528dce 100644 --- a/drivers/net/3c509.c +++ b/drivers/net/3c509.c @@ -100,10 +100,6 @@ static int max_interrupt_work = 10; static char versionA[] __initdata = DRV_NAME ".c:" DRV_VERSION " " DRV_RELDATE " becker@scyld.com\n"; static char versionB[] __initdata = "http://www.scyld.com/network/3c509.html\n"; -#if defined(CONFIG_PM) && (defined(CONFIG_MCA) || defined(CONFIG_EISA)) -#define EL3_SUSPEND -#endif - #ifdef EL3_DEBUG static int el3_debug = EL3_DEBUG; #else @@ -178,6 +174,9 @@ struct el3_private { /* skb send-queue */ int head, size; struct sk_buff *queue[SKB_QUEUE_SIZE]; +#ifdef CONFIG_PM_LEGACY + struct pm_dev *pmdev; +#endif enum { EL3_MCA, EL3_PNP, @@ -202,15 +201,11 @@ static void el3_tx_timeout (struct net_device *dev); static void el3_down(struct net_device *dev); static void el3_up(struct net_device *dev); static struct ethtool_ops ethtool_ops; -#ifdef EL3_SUSPEND -static int el3_suspend(struct device *, pm_message_t); -static int el3_resume(struct device *); -#else -#define el3_suspend NULL -#define el3_resume NULL +#ifdef CONFIG_PM_LEGACY +static int el3_suspend(struct pm_dev *pdev); +static int el3_resume(struct pm_dev *pdev); +static int el3_pm_callback(struct pm_dev *pdev, pm_request_t rqst, void *data); #endif - - /* generic device remove for all device types */ #if defined(CONFIG_EISA) || defined(CONFIG_MCA) static int el3_device_remove (struct device *device); @@ -234,9 +229,7 @@ static struct eisa_driver el3_eisa_driver = { .driver = { .name = "3c509", .probe = el3_eisa_probe, - .remove = __devexit_p (el3_device_remove), - .suspend = el3_suspend, - .resume = el3_resume, + .remove = __devexit_p (el3_device_remove) } }; #endif @@ -269,8 +262,6 @@ static struct mca_driver el3_mca_driver = { .bus = &mca_bus_type, .probe = el3_mca_probe, .remove = __devexit_p(el3_device_remove), - .suspend = el3_suspend, - .resume = el3_resume, }, }; #endif /* CONFIG_MCA */ @@ -371,6 +362,10 @@ static void el3_common_remove (struct net_device *dev) struct el3_private *lp = netdev_priv(dev); (void) lp; /* Keep gcc quiet... */ +#ifdef CONFIG_PM_LEGACY + if (lp->pmdev) + pm_unregister(lp->pmdev); +#endif #if defined(__ISAPNP__) if (lp->type == EL3_PNP) pnp_device_detach(to_pnp_dev(lp->dev)); @@ -577,6 +572,16 @@ no_pnp: if (err) goto out1; +#ifdef CONFIG_PM_LEGACY + /* register power management */ + lp->pmdev = pm_register(PM_ISA_DEV, card_idx, el3_pm_callback); + if (lp->pmdev) { + struct pm_dev *p; + p = lp->pmdev; + p->data = (struct net_device *)dev; + } +#endif + el3_cards++; lp->next_dev = el3_root_dev; el3_root_dev = dev; @@ -1475,17 +1480,20 @@ el3_up(struct net_device *dev) } /* Power Management support functions */ -#ifdef EL3_SUSPEND +#ifdef CONFIG_PM_LEGACY static int -el3_suspend(struct device *pdev, pm_message_t state) +el3_suspend(struct pm_dev *pdev) { unsigned long flags; struct net_device *dev; struct el3_private *lp; int ioaddr; - dev = pdev->driver_data; + if (!pdev && !pdev->data) + return -EINVAL; + + dev = (struct net_device *)pdev->data; lp = netdev_priv(dev); ioaddr = dev->base_addr; @@ -1502,14 +1510,17 @@ el3_suspend(struct device *pdev, pm_message_t state) } static int -el3_resume(struct device *pdev) +el3_resume(struct pm_dev *pdev) { unsigned long flags; struct net_device *dev; struct el3_private *lp; int ioaddr; - dev = pdev->driver_data; + if (!pdev && !pdev->data) + return -EINVAL; + + dev = (struct net_device *)pdev->data; lp = netdev_priv(dev); ioaddr = dev->base_addr; @@ -1525,7 +1536,20 @@ el3_resume(struct device *pdev) return 0; } -#endif /* EL3_SUSPEND */ +static int +el3_pm_callback(struct pm_dev *pdev, pm_request_t rqst, void *data) +{ + switch (rqst) { + case PM_SUSPEND: + return el3_suspend(pdev); + + case PM_RESUME: + return el3_resume(pdev); + } + return 0; +} + +#endif /* CONFIG_PM_LEGACY */ /* Parameters that may be passed into the module. */ static int debug = -1;