linux/drivers/net/wireless/orinoco/orinoco_pci.h
<<
>>
Prefs
   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 */
  16struct orinoco_pci_card {
  17        void __iomem *bridge_io;
  18        void __iomem *attr_io;
  19};
  20
  21#ifdef CONFIG_PM
  22static 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
  35static 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