1 /* orinoco_pci.h 2 * 3 * Common code for all Orinoco drivers for PCI devices, including 4 * both native PCI and PCMCIA-to-PCI bridges. 5 * 6 * Copyright (C) 2005, Pavel Roskin. 7 * See main.c for license. 8 */ 9 10 #ifndef _ORINOCO_PCI_H 11 #define _ORINOCO_PCI_H 12 13 #include <linux/netdevice.h> 14 15 /* Driver specific data */ 16 struct orinoco_pci_card { 17 void __iomem *bridge_io; 18 void __iomem *attr_io; 19 }; 20 21 #ifdef CONFIG_PM 22 static int orinoco_pci_suspend(struct pci_dev *pdev, pm_message_t state) 23 { 24 struct orinoco_private *priv = pci_get_drvdata(pdev); 25 26 orinoco_down(priv); 27 free_irq(pdev->irq, priv); 28 pci_save_state(pdev); 29 pci_disable_device(pdev); 30 pci_set_power_state(pdev, PCI_D3hot); 31 32 return 0; 33 } 34 35 static int orinoco_pci_resume(struct pci_dev *pdev) 36 { 37 struct orinoco_private *priv = pci_get_drvdata(pdev); 38 struct net_device *dev = priv->ndev; 39 int err; 40 41 pci_set_power_state(pdev, PCI_D0); 42 err = pci_enable_device(pdev); 43 if (err) { 44 printk(KERN_ERR "%s: pci_enable_device failed on resume\n", 45 dev->name); 46 return err; 47 } 48 pci_restore_state(pdev); 49 50 err = request_irq(pdev->irq, orinoco_interrupt, IRQF_SHARED, 51 dev->name, priv); 52 if (err) { 53 printk(KERN_ERR "%s: cannot re-allocate IRQ on resume\n", 54 dev->name); 55 pci_disable_device(pdev); 56 return -EBUSY; 57 } 58 59 err = orinoco_up(priv); 60 61 return err; 62 } 63 #else 64 #define orinoco_pci_suspend NULL 65 #define orinoco_pci_resume NULL 66 #endif 67 68 #endif /* _ORINOCO_PCI_H */ 69