|  | /* 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 */ |