|
@@ -553,6 +553,13 @@ static int acpi_pci_link_allocate(struct acpi_pci_link *link)
|
|
irq = link->irq.possible[i];
|
|
irq = link->irq.possible[i];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ if (acpi_irq_penalty[irq] >= PIRQ_PENALTY_ISA_ALWAYS) {
|
|
|
|
+ printk(KERN_ERR PREFIX "No IRQ available for %s [%s]. "
|
|
|
|
+ "Try pci=noacpi or acpi=off\n",
|
|
|
|
+ acpi_device_name(link->device),
|
|
|
|
+ acpi_device_bid(link->device));
|
|
|
|
+ return -ENODEV;
|
|
|
|
+ }
|
|
|
|
|
|
/* Attempt to enable the link device at this IRQ. */
|
|
/* Attempt to enable the link device at this IRQ. */
|
|
if (acpi_pci_link_set(link, irq)) {
|
|
if (acpi_pci_link_set(link, irq)) {
|
|
@@ -821,6 +828,12 @@ void acpi_penalize_isa_irq(int irq, int active)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+bool acpi_isa_irq_available(int irq)
|
|
|
|
+{
|
|
|
|
+ return irq >= 0 && (irq >= ARRAY_SIZE(acpi_irq_penalty) ||
|
|
|
|
+ acpi_irq_penalty[irq] < PIRQ_PENALTY_ISA_ALWAYS);
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Penalize IRQ used by ACPI SCI. If ACPI SCI pin attributes conflict with
|
|
* Penalize IRQ used by ACPI SCI. If ACPI SCI pin attributes conflict with
|
|
* PCI IRQ attributes, mark ACPI SCI as ISA_ALWAYS so it won't be use for
|
|
* PCI IRQ attributes, mark ACPI SCI as ISA_ALWAYS so it won't be use for
|