Module Name: src Committed By: jmcneill Date: Thu Nov 22 15:06:00 UTC 2018
Modified Files: src/sys/arch/x86/acpi: acpi_machdep.c Log Message: Apply MADT interrupt source overrides to interrupts established via acpi_md_intr_establish. To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/sys/arch/x86/acpi/acpi_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/x86/acpi/acpi_machdep.c diff -u src/sys/arch/x86/acpi/acpi_machdep.c:1.20 src/sys/arch/x86/acpi/acpi_machdep.c:1.21 --- src/sys/arch/x86/acpi/acpi_machdep.c:1.20 Fri Nov 16 23:03:55 2018 +++ src/sys/arch/x86/acpi/acpi_machdep.c Thu Nov 22 15:06:00 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_machdep.c,v 1.20 2018/11/16 23:03:55 jmcneill Exp $ */ +/* $NetBSD: acpi_machdep.c,v 1.21 2018/11/22 15:06:00 jmcneill Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.20 2018/11/16 23:03:55 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.21 2018/11/22 15:06:00 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -151,19 +151,40 @@ acpi_md_OsInstallInterruptHandler(uint32 const char *xname) { void *ih; + + ih = acpi_md_intr_establish(InterruptNumber, IPL_TTY, IST_LEVEL, + (int (*)(void *))ServiceRoutine, Context, false, xname); + if (ih == NULL) + return AE_NO_MEMORY; + + *cookiep = ih; + + return AE_OK; +} + +void +acpi_md_OsRemoveInterruptHandler(void *cookie) +{ + intr_disestablish(cookie); +} + +void * +acpi_md_intr_establish(uint32_t InterruptNumber, int ipl, int type, + int (*handler)(void *), void *arg, bool mpsafe, const char *xname) +{ + void *ih; struct pic *pic; #if NIOAPIC > 0 struct ioapic_softc *sc; struct acpi_md_override ovr; struct mp_intr_map tmpmap, *mip, **mipp = NULL; #endif - int irq, pin, type, redir, mpflags; + int irq, pin, redir, mpflags; /* * ACPI interrupts default to level-triggered active-low. */ - type = IST_LEVEL; mpflags = (MPS_INTTR_LEVEL << 2) | MPS_INTPO_ACTLO; redir = IOAPIC_REDLO_LEVEL | IOAPIC_REDLO_ACTLO; @@ -239,11 +260,8 @@ acpi_md_OsInstallInterruptHandler(uint32 irq = pin = (int)InterruptNumber; } - /* - * XXX probably, IPL_BIO is enough. - */ - ih = intr_establish_xname(irq, pic, pin, type, IPL_TTY, - (int (*)(void *)) ServiceRoutine, Context, false, xname); + ih = intr_establish_xname(irq, pic, pin, type, ipl, + handler, arg, mpsafe, xname); #if NIOAPIC > 0 if (mipp) { @@ -251,33 +269,7 @@ acpi_md_OsInstallInterruptHandler(uint32 } #endif - if (ih == NULL) - return AE_NO_MEMORY; - - *cookiep = ih; - - return AE_OK; -} - -void -acpi_md_OsRemoveInterruptHandler(void *cookie) -{ - intr_disestablish(cookie); -} - -void * -acpi_md_intr_establish(uint32_t irq, int ipl, int type, int (*handler)(void *), - void *arg, bool mpsafe, const char *xname) -{ - struct pic *pic; - int pin; - - pic = intr_findpic(irq); - if (pic == NULL) - return NULL; - pin = irq - pic->pic_vecbase; - - return intr_establish_xname(irq, pic, pin, type, ipl, handler, arg, mpsafe, xname); + return ih; } void