| /* orinoco_pci.h |
| * |
| * Common code for all Orinoco drivers for PCI devices, including |
| * both native PCI and PCMCIA-to-PCI bridges. |
| * |
| * Copyright (C) 2005, Pavel Roskin. |
| * See main.c for license. |
| */ |
| |
| #ifndef _ORINOCO_PCI_H |
| #define _ORINOCO_PCI_H |
| |
| #include <linux/netdevice.h> |
| |
| /* Driver specific data */ |
| struct orinoco_pci_card { |
| void __iomem *bridge_io; |
| void __iomem *attr_io; |
| }; |
| |
| #ifdef CONFIG_PM |
| static int orinoco_pci_suspend(struct pci_dev *pdev, pm_message_t state) |
| { |
| struct orinoco_private *priv = pci_get_drvdata(pdev); |
| |
| orinoco_down(priv); |
| free_irq(pdev->irq, priv); |
| pci_save_state(pdev); |
| pci_disable_device(pdev); |
| pci_set_power_state(pdev, PCI_D3hot); |
| |
| return 0; |
| } |
| |
| static int orinoco_pci_resume(struct pci_dev *pdev) |
| { |
| struct orinoco_private *priv = pci_get_drvdata(pdev); |
| struct net_device *dev = priv->ndev; |
| int err; |
| |
| pci_set_power_state(pdev, 0); |
| err = pci_enable_device(pdev); |
| if (err) { |
| printk(KERN_ERR "%s: pci_enable_device failed on resume\n", |
| dev->name); |
| return err; |
| } |
| pci_restore_state(pdev); |
| |
| err = request_irq(pdev->irq, orinoco_interrupt, IRQF_SHARED, |
| dev->name, priv); |
| if (err) { |
| printk(KERN_ERR "%s: cannot re-allocate IRQ on resume\n", |
| dev->name); |
| pci_disable_device(pdev); |
| return -EBUSY; |
| } |
| |
| err = orinoco_up(priv); |
| |
| return err; |
| } |
| #else |
| #define orinoco_pci_suspend NULL |
| #define orinoco_pci_resume NULL |
| #endif |
| |
| #endif /* _ORINOCO_PCI_H */ |