Module Name: src Committed By: jmcneill Date: Fri Nov 16 23:03:55 UTC 2018
Modified Files: src/sys/arch/arm/acpi: acpi_machdep.c src/sys/arch/arm/include: acpi_machdep.h src/sys/arch/ia64/acpi: acpi_machdep.c src/sys/arch/ia64/include: acpi_machdep.h src/sys/arch/x86/acpi: acpi_machdep.c src/sys/arch/x86/include: acpi_machdep.h Log Message: Add MD functions for establishing and disestablishing interrupt handlers. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/acpi/acpi_machdep.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/include/acpi_machdep.h cvs rdiff -u -r1.7 -r1.8 src/sys/arch/ia64/acpi/acpi_machdep.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/ia64/include/acpi_machdep.h cvs rdiff -u -r1.19 -r1.20 src/sys/arch/x86/acpi/acpi_machdep.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/x86/include/acpi_machdep.h 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/arm/acpi/acpi_machdep.c diff -u src/sys/arch/arm/acpi/acpi_machdep.c:1.5 src/sys/arch/arm/acpi/acpi_machdep.c:1.6 --- src/sys/arch/arm/acpi/acpi_machdep.c:1.5 Mon Nov 12 12:56:05 2018 +++ src/sys/arch/arm/acpi/acpi_machdep.c Fri Nov 16 23:03:55 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_machdep.c,v 1.5 2018/11/12 12:56:05 jmcneill Exp $ */ +/* $NetBSD: acpi_machdep.c,v 1.6 2018/11/16 23:03:55 jmcneill Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ #include "pci.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.5 2018/11/12 12:56:05 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.6 2018/11/16 23:03:55 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -83,12 +83,7 @@ ACPI_STATUS acpi_md_OsInstallInterruptHandler(UINT32 irq, ACPI_OSD_HANDLER handler, void *context, void **cookiep, const char *xname) { - const int ipl = IPL_TTY; - const int type = IST_LEVEL; /* TODO: MADT */ - - *cookiep = intr_establish(irq, ipl, type, (int (*)(void *))handler, context); - - return *cookiep == NULL ? AE_NO_MEMORY : AE_OK; + return AE_NOT_IMPLEMENTED; } void @@ -200,6 +195,18 @@ acpi_md_OsDisableInterrupt(void) cpsid(I32_bit); } +void * +acpi_md_intr_establish(uint32_t irq, int ipl, int type, int (*handler)(void *), void *arg, bool mpsafe, const char *xname) +{ + return intr_establish_xname(irq, ipl, type | (mpsafe ? IST_MPSAFE : 0), handler, arg, xname); +} + +void +acpi_md_intr_disestablish(void *ih) +{ + intr_disestablish(ih); +} + int acpi_md_sleep(int state) { Index: src/sys/arch/arm/include/acpi_machdep.h diff -u src/sys/arch/arm/include/acpi_machdep.h:1.1 src/sys/arch/arm/include/acpi_machdep.h:1.2 --- src/sys/arch/arm/include/acpi_machdep.h:1.1 Fri Oct 12 22:12:12 2018 +++ src/sys/arch/arm/include/acpi_machdep.h Fri Nov 16 23:03:55 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_machdep.h,v 1.1 2018/10/12 22:12:12 jmcneill Exp $ */ +/* $NetBSD: acpi_machdep.h,v 1.2 2018/11/16 23:03:55 jmcneill Exp $ */ /*- * Copyright (c) 2018 The NetBSD Foundation, Inc. @@ -46,6 +46,9 @@ BOOLEAN acpi_md_OsReadable(void *, UIN BOOLEAN acpi_md_OsWritable(void *, UINT32); void acpi_md_OsEnableInterrupt(void); void acpi_md_OsDisableInterrupt(void); +void * acpi_md_intr_establish(uint32_t, int, int, int (*)(void *), + void *, bool, const char *); +void acpi_md_intr_disestablish(void *); int acpi_md_sleep(int); uint32_t acpi_md_pdc(void); uint32_t acpi_md_ncpus(void); Index: src/sys/arch/ia64/acpi/acpi_machdep.c diff -u src/sys/arch/ia64/acpi/acpi_machdep.c:1.7 src/sys/arch/ia64/acpi/acpi_machdep.c:1.8 --- src/sys/arch/ia64/acpi/acpi_machdep.c:1.7 Tue Mar 20 12:14:52 2018 +++ src/sys/arch/ia64/acpi/acpi_machdep.c Fri Nov 16 23:03:55 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_machdep.c,v 1.7 2018/03/20 12:14:52 bouyer Exp $ */ +/* $NetBSD: acpi_machdep.c,v 1.8 2018/11/16 23:03:55 jmcneill Exp $ */ /* * Copyright (c) 2009 KIYOHARA Takashi * All rights reserved. @@ -28,7 +28,7 @@ * Machine-dependent routines for ACPICA. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.7 2018/03/20 12:14:52 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.8 2018/11/16 23:03:55 jmcneill Exp $"); #include <sys/param.h> @@ -74,29 +74,34 @@ acpi_md_OsGetRootPointer(void) return acpi_root_phys; } -ACPI_STATUS -acpi_md_OsInstallInterruptHandler(UINT32 InterruptNumber, - ACPI_OSD_HANDLER ServiceRoutine, - void *Context, void **cookiep, - const char *xname) +static int +acpi_isa_irq_to_vector(UINT32 irq) { static int isa_irq_to_vector_map[16] = { /* i8259 IRQ translation, first 16 entries */ 0x2f, 0x20, 0x2e, 0x2d, 0x2c, 0x2b, 0x2a, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, }; - int irq; - void *ih; - if (has_i8259 && InterruptNumber < 16) - irq = isa_irq_to_vector_map[InterruptNumber]; - else - irq = InterruptNumber; + if (has_i8259 && irq < 16) + return isa_irq_to_vector_map[InterruptNumber]; + + return irq; +} + +ACPI_STATUS +acpi_md_OsInstallInterruptHandler(UINT32 InterruptNumber, + ACPI_OSD_HANDLER ServiceRoutine, + void *Context, void **cookiep, + const char *xname) +{ + const int vec = acpi_isa_irq_to_vector(irq); + void *ih; /* * XXX probably, IPL_BIO is enough. */ - ih = intr_establish(irq, IST_LEVEL, IPL_TTY, + ih = intr_establish(vec, IST_LEVEL, IPL_TTY, (int (*)(void *)) ServiceRoutine, Context); if (ih == NULL) return AE_NO_MEMORY; @@ -111,6 +116,21 @@ acpi_md_OsRemoveInterruptHandler(void *c 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) +{ + const int vec = acpi_isa_irq_to_vector(irq); + + return intr_establish(vec, type, ipl, handler, arg); +} + +void +acpi_md_intr_disestablish(void *ih) +{ + intr_disestablish(ih); +} + ACPI_STATUS acpi_md_OsMapMemory(ACPI_PHYSICAL_ADDRESS PhysicalAddress, UINT32 Length, void **LogicalAddress) Index: src/sys/arch/ia64/include/acpi_machdep.h diff -u src/sys/arch/ia64/include/acpi_machdep.h:1.7 src/sys/arch/ia64/include/acpi_machdep.h:1.8 --- src/sys/arch/ia64/include/acpi_machdep.h:1.7 Tue Mar 20 12:14:52 2018 +++ src/sys/arch/ia64/include/acpi_machdep.h Fri Nov 16 23:03:55 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_machdep.h,v 1.7 2018/03/20 12:14:52 bouyer Exp $ */ +/* $NetBSD: acpi_machdep.h,v 1.8 2018/11/16 23:03:55 jmcneill Exp $ */ ACPI_STATUS acpi_md_OsInitialize(void); ACPI_PHYSICAL_ADDRESS acpi_md_OsGetRootPointer(void); @@ -25,6 +25,10 @@ BOOLEAN acpi_md_OsWritable(void *, UINT void acpi_md_OsEnableInterrupt(void); void acpi_md_OsDisableInterrupt(void); +void * acpi_md_intr_establish(uint32_t, int, int, int (*)(void *), + void *, bool, const char *); +void acpi_md_intr_disestablish(void *); + int acpi_md_sleep(int); uint32_t acpi_md_pdc(void); uint32_t acpi_md_ncpus(void); Index: src/sys/arch/x86/acpi/acpi_machdep.c diff -u src/sys/arch/x86/acpi/acpi_machdep.c:1.19 src/sys/arch/x86/acpi/acpi_machdep.c:1.20 --- src/sys/arch/x86/acpi/acpi_machdep.c:1.19 Tue Mar 20 12:14:52 2018 +++ src/sys/arch/x86/acpi/acpi_machdep.c Fri Nov 16 23:03:55 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_machdep.c,v 1.19 2018/03/20 12:14:52 bouyer Exp $ */ +/* $NetBSD: acpi_machdep.c,v 1.20 2018/11/16 23:03:55 jmcneill Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -40,7 +40,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.19 2018/03/20 12:14:52 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_machdep.c,v 1.20 2018/11/16 23:03:55 jmcneill Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -265,6 +265,27 @@ acpi_md_OsRemoveInterruptHandler(void *c 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); +} + +void +acpi_md_intr_disestablish(void *ih) +{ + intr_disestablish(ih); +} + ACPI_STATUS acpi_md_OsMapMemory(ACPI_PHYSICAL_ADDRESS PhysicalAddress, uint32_t Length, void **LogicalAddress) Index: src/sys/arch/x86/include/acpi_machdep.h diff -u src/sys/arch/x86/include/acpi_machdep.h:1.12 src/sys/arch/x86/include/acpi_machdep.h:1.13 --- src/sys/arch/x86/include/acpi_machdep.h:1.12 Tue Mar 20 12:14:52 2018 +++ src/sys/arch/x86/include/acpi_machdep.h Fri Nov 16 23:03:55 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_machdep.h,v 1.12 2018/03/20 12:14:52 bouyer Exp $ */ +/* $NetBSD: acpi_machdep.h,v 1.13 2018/11/16 23:03:55 jmcneill Exp $ */ /* * Copyright 2001 Wasabi Systems, Inc. @@ -70,6 +70,10 @@ BOOLEAN acpi_md_OsWritable(void *, UINT void acpi_md_OsDisableInterrupt(void); void acpi_md_OsEnableInterrupt(void); +void * acpi_md_intr_establish(uint32_t, int, int, int (*)(void *), + void *, bool, const char *); +void acpi_md_intr_disestablish(void *); + int acpi_md_sleep(int); void acpi_md_sleep_init(void);