Module Name: src Committed By: jruoho Date: Sat Aug 7 14:17:22 UTC 2010
Modified Files: src/sys/dev/acpi: acpi_verbose.c Log Message: Dump MADT in ACPIVERBOSE. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/dev/acpi/acpi_verbose.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/dev/acpi/acpi_verbose.c diff -u src/sys/dev/acpi/acpi_verbose.c:1.7 src/sys/dev/acpi/acpi_verbose.c:1.8 --- src/sys/dev/acpi/acpi_verbose.c:1.7 Sat Aug 7 08:59:51 2010 +++ src/sys/dev/acpi/acpi_verbose.c Sat Aug 7 14:17:21 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_verbose.c,v 1.7 2010/08/07 08:59:51 jruoho Exp $ */ +/* $NetBSD: acpi_verbose.c,v 1.8 2010/08/07 14:17:21 jruoho Exp $ */ /*- * Copyright (c) 2003, 2007, 2010 The NetBSD Foundation, Inc. @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_verbose.c,v 1.7 2010/08/07 08:59:51 jruoho Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_verbose.c,v 1.8 2010/08/07 14:17:21 jruoho Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -77,11 +77,15 @@ #include <dev/acpi/acpivar.h> #include <dev/acpi/acpidevs_data.h> -void acpi_print_verbose_real(struct acpi_softc *); -void acpi_print_dev_real(const char *); -static void acpi_print_fadt(struct acpi_softc *); -static void acpi_print_devnodes(struct acpi_softc *); -static void acpi_print_tree(struct acpi_devnode *, uint32_t); +void acpi_print_verbose_real(struct acpi_softc *); +void acpi_print_dev_real(const char *); +static void acpi_print_madt(struct acpi_softc *); +static ACPI_STATUS acpi_print_madt_callback(ACPI_SUBTABLE_HEADER *, void *); +static void acpi_print_fadt(struct acpi_softc *); +static void acpi_print_devnodes(struct acpi_softc *); +static void acpi_print_tree(struct acpi_devnode *, uint32_t); + +extern ACPI_TABLE_HEADER *madt_header; MODULE(MODULE_CLASS_MISC, acpiverbose, NULL); @@ -116,6 +120,7 @@ acpi_print_verbose_real(struct acpi_softc *sc) { + acpi_print_madt(sc); acpi_print_fadt(sc); acpi_print_devnodes(sc); acpi_print_tree(sc->sc_root, 0); @@ -134,6 +139,158 @@ } static void +acpi_print_madt(struct acpi_softc *sc) +{ + ACPI_TABLE_MADT *madt; + ACPI_STATUS rv; + + rv = acpi_madt_map(); + + if (ACPI_FAILURE(rv) && rv != AE_ALREADY_EXISTS) + return; + + if (madt_header == NULL) + return; + + madt = (ACPI_TABLE_MADT *)madt_header; + acpi_madt_walk(acpi_print_madt_callback, sc); +} + +static ACPI_STATUS +acpi_print_madt_callback(ACPI_SUBTABLE_HEADER *hdr, void *aux) +{ + struct acpi_softc *sc = aux; + device_t self = sc->sc_dev; + + /* + * See ACPI 4.0, section 5.2.12. + */ + switch (hdr->Type) { + + case ACPI_MADT_TYPE_LOCAL_APIC: + + aprint_normal_dev(self, "[MADT] %-15s: " + "CPU ID %u, LAPIC ID %u, FLAGS 0x%02X", "LAPIC", + ((ACPI_MADT_LOCAL_APIC *)hdr)->ProcessorId, + ((ACPI_MADT_LOCAL_APIC *)hdr)->Id, + ((ACPI_MADT_LOCAL_APIC *)hdr)->LapicFlags); + + break; + + case ACPI_MADT_TYPE_IO_APIC: + + aprint_normal_dev(self, "[MADT] %-15s: " + "ID %u, GSI %u, ADDR 0x%04X", "I/O APIC", + ((ACPI_MADT_IO_APIC *)hdr)->Id, + ((ACPI_MADT_IO_APIC *)hdr)->GlobalIrqBase, + ((ACPI_MADT_IO_APIC *)hdr)->Address); + + break; + + case ACPI_MADT_TYPE_INTERRUPT_OVERRIDE: + + aprint_normal_dev(self, "[MADT] %-15s: " + "BUS %u, IRQ %u, GSI %u, FLAGS 0x%02X", "INTR OVERRIDE", + ((ACPI_MADT_INTERRUPT_OVERRIDE *)hdr)->Bus, + ((ACPI_MADT_INTERRUPT_OVERRIDE *)hdr)->SourceIrq, + ((ACPI_MADT_INTERRUPT_OVERRIDE *)hdr)->GlobalIrq, + ((ACPI_MADT_INTERRUPT_OVERRIDE *)hdr)->IntiFlags); + + break; + + case ACPI_MADT_TYPE_NMI_SOURCE: + + aprint_normal_dev(self, "[MADT] %-15s: " + "GSI %u, FLAGS 0x%02X", "NMI SOURCE", + ((ACPI_MADT_NMI_SOURCE *)hdr)->GlobalIrq, + ((ACPI_MADT_NMI_SOURCE *)hdr)->IntiFlags); + + break; + + case ACPI_MADT_TYPE_LOCAL_APIC_NMI: + + aprint_normal_dev(self, "[MADT] %-15s: " + "CPU ID %u, LINT %u, FLAGS 0x%02X", "LAPIC NMI", + ((ACPI_MADT_LOCAL_APIC_NMI *)hdr)->ProcessorId, + ((ACPI_MADT_LOCAL_APIC_NMI *)hdr)->Lint, + ((ACPI_MADT_LOCAL_APIC_NMI *)hdr)->IntiFlags); + + break; + + case ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE: + + aprint_normal_dev(self, "[MADT] %-15s: " + "ADDR 0x%016" PRIX64"", "APIC OVERRIDE", + ((ACPI_MADT_LOCAL_APIC_OVERRIDE *)hdr)->Address); + + break; + + case ACPI_MADT_TYPE_IO_SAPIC: + + aprint_normal_dev(self, "[MADT] %-15s: " + "ID %u, GSI %u, ADDR 0x%016" PRIX64"", "I/O SAPIC", + ((ACPI_MADT_IO_SAPIC *)hdr)->Id, + ((ACPI_MADT_IO_SAPIC *)hdr)->GlobalIrqBase, + ((ACPI_MADT_IO_SAPIC *)hdr)->Address); + + break; + + case ACPI_MADT_TYPE_LOCAL_SAPIC: + + aprint_normal_dev(self, "[MADT] %-15s: " + "CPU ID %u, ID %u, EID %u, UID %u, FLAGS 0x%02X", "LSAPIC", + ((ACPI_MADT_LOCAL_SAPIC*)hdr)->ProcessorId, + ((ACPI_MADT_LOCAL_SAPIC*)hdr)->Id, + ((ACPI_MADT_LOCAL_SAPIC*)hdr)->Eid, + ((ACPI_MADT_LOCAL_SAPIC*)hdr)->Uid, + ((ACPI_MADT_LOCAL_SAPIC*)hdr)->LapicFlags); + + break; + + case ACPI_MADT_TYPE_INTERRUPT_SOURCE: + + aprint_normal_dev(self, "[MADT] %-15s: ID %u, EID %u, " + "TYPE %u, PMI %u, GSI %u, FLAGS 0x%02X", "INTR SOURCE", + ((ACPI_MADT_INTERRUPT_SOURCE *)hdr)->Id, + ((ACPI_MADT_INTERRUPT_SOURCE *)hdr)->Eid, + ((ACPI_MADT_INTERRUPT_SOURCE *)hdr)->Type, + ((ACPI_MADT_INTERRUPT_SOURCE *)hdr)->IoSapicVector, + ((ACPI_MADT_INTERRUPT_SOURCE *)hdr)->GlobalIrq, + ((ACPI_MADT_INTERRUPT_SOURCE *)hdr)->Flags); + + break; + + case ACPI_MADT_TYPE_LOCAL_X2APIC: + + aprint_normal_dev(self, "[MADT] %-15s: " + "ID %u, UID %u, FLAGS 0x%02X", "X2APIC", + ((ACPI_MADT_LOCAL_X2APIC *)hdr)->LocalApicId, + ((ACPI_MADT_LOCAL_X2APIC *)hdr)->Uid, + ((ACPI_MADT_LOCAL_X2APIC *)hdr)->LapicFlags); + + break; + + case ACPI_MADT_TYPE_LOCAL_X2APIC_NMI: + + aprint_normal_dev(self, "[MADT] %-15s: " + "UID %u, LINT %u, FLAGS 0x%02X", "X2APIC NMI", + ((ACPI_MADT_LOCAL_X2APIC_NMI *)hdr)->Uid, + ((ACPI_MADT_LOCAL_X2APIC_NMI *)hdr)->Lint, + ((ACPI_MADT_LOCAL_X2APIC_NMI *)hdr)->IntiFlags); + + break; + + default: + aprint_normal_dev(self, "[MADT] %-15s", "UNKNOWN"); + break; + } + + aprint_normal("\n"); + + return AE_OK; +} + +static void acpi_print_fadt(struct acpi_softc *sc) { uint32_t i;