Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 1 | /* orinoco_pci.h |
Andrey Borzenkov | d14c7c1 | 2009-01-25 23:08:43 +0300 | [diff] [blame] | 2 | * |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 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. |
David Kilroy | 47445cb | 2009-02-04 23:05:48 +0000 | [diff] [blame] | 7 | * See main.c for license. |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 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 | |
Pavel Roskin | 95047dd | 2006-05-01 02:13:30 -0400 | [diff] [blame] | 21 | #ifdef CONFIG_PM |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 22 | static int orinoco_pci_suspend(struct pci_dev *pdev, pm_message_t state) |
| 23 | { |
David Kilroy | a260836 | 2009-06-18 23:21:23 +0100 | [diff] [blame] | 24 | struct orinoco_private *priv = pci_get_drvdata(pdev); |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 25 | |
David Kilroy | 6415f7d | 2009-06-18 23:21:30 +0100 | [diff] [blame] | 26 | orinoco_down(priv); |
David Kilroy | a260836 | 2009-06-18 23:21:23 +0100 | [diff] [blame] | 27 | free_irq(pdev->irq, priv); |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 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 | { |
David Kilroy | a260836 | 2009-06-18 23:21:23 +0100 | [diff] [blame] | 37 | struct orinoco_private *priv = pci_get_drvdata(pdev); |
| 38 | struct net_device *dev = priv->ndev; |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 39 | int err; |
| 40 | |
Yijing Wang | 1ca0151 | 2013-06-27 20:53:42 +0800 | [diff] [blame] | 41 | pci_set_power_state(pdev, PCI_D0); |
John W. Linville | 02e0e5e | 2006-11-07 20:53:48 -0500 | [diff] [blame] | 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 | } |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 48 | pci_restore_state(pdev); |
| 49 | |
Thomas Gleixner | 1fb9df5 | 2006-07-01 19:29:39 -0700 | [diff] [blame] | 50 | err = request_irq(pdev->irq, orinoco_interrupt, IRQF_SHARED, |
David Kilroy | a260836 | 2009-06-18 23:21:23 +0100 | [diff] [blame] | 51 | dev->name, priv); |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 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 | |
David Kilroy | 6415f7d | 2009-06-18 23:21:30 +0100 | [diff] [blame] | 59 | err = orinoco_up(priv); |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 60 | |
David Kilroy | 6415f7d | 2009-06-18 23:21:30 +0100 | [diff] [blame] | 61 | return err; |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 62 | } |
Pavel Roskin | 95047dd | 2006-05-01 02:13:30 -0400 | [diff] [blame] | 63 | #else |
| 64 | #define orinoco_pci_suspend NULL |
| 65 | #define orinoco_pci_resume NULL |
| 66 | #endif |
Pavel Roskin | b884c87 | 2006-04-07 04:10:57 -0400 | [diff] [blame] | 67 | |
| 68 | #endif /* _ORINOCO_PCI_H */ |