diff options
author | David Shaohua Li <shaohua.li@intel.com> | 2005-07-27 23:02:00 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2005-07-29 22:49:38 -0400 |
commit | 87bec66b9691522414862dd8d41e430b063735ef (patch) | |
tree | f9976d7f6bb92fe3ebeda3b5d3644ac048147e62 /arch | |
parent | 68ac767686fd72f37a25bb4895fb4ab0080ba755 (diff) |
[ACPI] suspend/resume ACPI PCI Interrupt Links
Add reference count and disable ACPI PCI Interrupt Link
when no device still uses it.
Warn when drivers have not released Link at suspend time.
http://bugzilla.kernel.org/show_bug.cgi?id=3469
Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/i386/pci/acpi.c | 1 | ||||
-rw-r--r-- | arch/i386/pci/common.c | 6 | ||||
-rw-r--r-- | arch/i386/pci/irq.c | 1 | ||||
-rw-r--r-- | arch/i386/pci/pci.h | 1 |
4 files changed, 9 insertions, 0 deletions
diff --git a/arch/i386/pci/acpi.c b/arch/i386/pci/acpi.c index 2db65ec45dc3..42913f43feb0 100644 --- a/arch/i386/pci/acpi.c +++ b/arch/i386/pci/acpi.c | |||
@@ -30,6 +30,7 @@ static int __init pci_acpi_init(void) | |||
30 | acpi_irq_penalty_init(); | 30 | acpi_irq_penalty_init(); |
31 | pcibios_scanned++; | 31 | pcibios_scanned++; |
32 | pcibios_enable_irq = acpi_pci_irq_enable; | 32 | pcibios_enable_irq = acpi_pci_irq_enable; |
33 | pcibios_disable_irq = acpi_pci_irq_disable; | ||
33 | 34 | ||
34 | if (pci_routeirq) { | 35 | if (pci_routeirq) { |
35 | /* | 36 | /* |
diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c index 720975e1af50..751e49bda180 100644 --- a/arch/i386/pci/common.c +++ b/arch/i386/pci/common.c | |||
@@ -249,3 +249,9 @@ int pcibios_enable_device(struct pci_dev *dev, int mask) | |||
249 | 249 | ||
250 | return pcibios_enable_irq(dev); | 250 | return pcibios_enable_irq(dev); |
251 | } | 251 | } |
252 | |||
253 | void pcibios_disable_device (struct pci_dev *dev) | ||
254 | { | ||
255 | if (pcibios_disable_irq) | ||
256 | pcibios_disable_irq(dev); | ||
257 | } | ||
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c index d21b3a2dc978..66e4149ef189 100644 --- a/arch/i386/pci/irq.c +++ b/arch/i386/pci/irq.c | |||
@@ -56,6 +56,7 @@ struct irq_router_handler { | |||
56 | }; | 56 | }; |
57 | 57 | ||
58 | int (*pcibios_enable_irq)(struct pci_dev *dev) = NULL; | 58 | int (*pcibios_enable_irq)(struct pci_dev *dev) = NULL; |
59 | void (*pcibios_disable_irq)(struct pci_dev *dev) = NULL; | ||
59 | 60 | ||
60 | /* | 61 | /* |
61 | * Search 0xf0000 -- 0xfffff for the PCI IRQ Routing Table. | 62 | * Search 0xf0000 -- 0xfffff for the PCI IRQ Routing Table. |
diff --git a/arch/i386/pci/pci.h b/arch/i386/pci/pci.h index a8fc80ca69f3..dc442dfcab9e 100644 --- a/arch/i386/pci/pci.h +++ b/arch/i386/pci/pci.h | |||
@@ -72,3 +72,4 @@ extern int pcibios_scanned; | |||
72 | extern spinlock_t pci_config_lock; | 72 | extern spinlock_t pci_config_lock; |
73 | 73 | ||
74 | extern int (*pcibios_enable_irq)(struct pci_dev *dev); | 74 | extern int (*pcibios_enable_irq)(struct pci_dev *dev); |
75 | extern void (*pcibios_disable_irq)(struct pci_dev *dev); | ||