From owner-cvs-src@FreeBSD.ORG Tue Nov 11 10:59:21 2003 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D132216A4CF for ; Tue, 11 Nov 2003 10:59:21 -0800 (PST) Received: from rootlabs.com (root.org [67.118.192.226]) by mx1.FreeBSD.org (Postfix) with SMTP id 3373443FCB for ; Tue, 11 Nov 2003 10:59:19 -0800 (PST) (envelope-from nate@rootlabs.com) Received: (qmail 37820 invoked by uid 1000); 11 Nov 2003 18:59:20 -0000 Date: Tue, 11 Nov 2003 10:59:20 -0800 (PST) From: Nate Lawson To: John Baldwin In-Reply-To: <20031111182044.3374816A528@hub.freebsd.org> Message-ID: <20031111105725.A37789@root.org> References: <20031111182044.3374816A528@hub.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: cvs-src@FreeBSD.org cc: src-committers@FreeBSD.org cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/i386/acpica madt.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Nov 2003 18:59:21 -0000 On Tue, 11 Nov 2003, John Baldwin wrote: > Modified files: > sys/i386/acpica madt.c > Log: > 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 > > Revision Changes Path > 1.6 +6 -1 src/sys/i386/acpica/madt.c > > --- src/sys/i386/acpica/madt.c:1.5 Mon Nov 10 11:52:57 2003 > +++ src/sys/i386/acpica/madt.c Tue Nov 11 10:20:10 2003 > @@ -536,7 +536,12 @@ > } > > 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", Yikes, couldn't that be done by using devclass to get the acpi driver and find which interrupt it is using? Or maybe better, move this into acpi itself which can call the override if it finds itself on a different pin? I'm certain there are non-9 acpi sci implementations although not common. -Nate