Some motherboards like to remap the SCI (normally IRQ 9) up to a PCI

interrupt such as IRQ 22 or 19.  However, the ACPI BIOS still routes
interrupts from some PCI devices to the same intpin calling the pin
IRQ 22.  Thus, ACPI expects to address a single interrupt source via two
different names.  To work around this, if the SCI is remapped to a non-ISA
interrupt (i.e., greater than 15), then we use
acpi_OverrideInterruptLevel() function to tell ACPI to use IRQ 22 or 19
rather than IRQ 9 for the SCI.

Previously we would change IRQ 22 or 19's name to IRQ 9 when we encountered
such an Interrupt Source Override entry in the MADT which routed the SCI
properly but left PCI devices mapped to IRQ 22 or 19 w/o a routable
interrupt.

Tested by:	sos
This commit is contained in:
John Baldwin 2003-11-11 18:20:10 +00:00
parent a0bf1601a7
commit d3c01334ce
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=122502
2 changed files with 12 additions and 2 deletions

View File

@ -536,7 +536,12 @@ madt_parse_interrupt_override(INTERRUPT_SOURCE_OVERRIDE *intr)
}
if (intr->Source != intr->GlobalSystemInterrupt) {
ioapic_remap_vector(new_ioapic, new_pin, intr->Source);
/* XXX: This assumes that the SCI uses IRQ 9. */
if (intr->GlobalSystemInterrupt > 15 && intr->Source == 9)
acpi_OverrideInterruptLevel(
intr->GlobalSystemInterrupt);
else
ioapic_remap_vector(new_ioapic, new_pin, intr->Source);
if (madt_find_interrupt(intr->Source, &old_ioapic,
&old_pin) != 0)
printf("MADT: Could not find APIC for source IRQ %d\n",

View File

@ -536,7 +536,12 @@ madt_parse_interrupt_override(INTERRUPT_SOURCE_OVERRIDE *intr)
}
if (intr->Source != intr->GlobalSystemInterrupt) {
ioapic_remap_vector(new_ioapic, new_pin, intr->Source);
/* XXX: This assumes that the SCI uses IRQ 9. */
if (intr->GlobalSystemInterrupt > 15 && intr->Source == 9)
acpi_OverrideInterruptLevel(
intr->GlobalSystemInterrupt);
else
ioapic_remap_vector(new_ioapic, new_pin, intr->Source);
if (madt_find_interrupt(intr->Source, &old_ioapic,
&old_pin) != 0)
printf("MADT: Could not find APIC for source IRQ %d\n",