summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/acpi/acpimadt.c14
-rw-r--r--sys/dev/acpi/acpireg.h24
2 files changed, 36 insertions, 2 deletions
diff --git a/sys/dev/acpi/acpimadt.c b/sys/dev/acpi/acpimadt.c
index 8f435c624b2..f012cf37365 100644
--- a/sys/dev/acpi/acpimadt.c
+++ b/sys/dev/acpi/acpimadt.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: acpimadt.c,v 1.25 2011/10/21 20:49:39 kettenis Exp $ */
+/* $OpenBSD: acpimadt.c,v 1.26 2012/01/07 20:13:16 kettenis Exp $ */
/*
* Copyright (c) 2006 Mark Kettenis <kettenis@openbsd.org>
*
@@ -131,6 +131,14 @@ acpimadt_validate(struct acpi_madt *madt)
if (length != sizeof(entry->madt_platform_int))
return (0);
break;
+ case ACPI_MADT_X2APIC:
+ if (length != sizeof(entry->madt_x2apic))
+ return (0);
+ break;
+ case ACPI_MADT_X2APIC_NMI:
+ if (length != sizeof(entry->madt_x2apic_nmi))
+ return (0);
+ break;
}
addr += length;
@@ -349,6 +357,10 @@ acpimadt_attach(struct device *parent, struct device *self, void *aux)
map->redir |= (IOAPIC_REDLO_DEL_NMI << IOAPIC_REDLO_DEL_SHIFT);
break;
+ case ACPI_MADT_X2APIC:
+ case ACPI_MADT_X2APIC_NMI:
+ break;
+
default:
printf("%s: unknown apic structure type %x\n",
self->dv_xname, entry->madt_lapic.apic_type);
diff --git a/sys/dev/acpi/acpireg.h b/sys/dev/acpi/acpireg.h
index 473ffda2db8..e70ea37d5d2 100644
--- a/sys/dev/acpi/acpireg.h
+++ b/sys/dev/acpi/acpireg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: acpireg.h,v 1.26 2011/06/16 23:02:11 pirofti Exp $ */
+/* $OpenBSD: acpireg.h,v 1.27 2012/01/07 20:13:17 kettenis Exp $ */
/*
* Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
* Copyright (c) 2005 Marco Peereboom <marco@openbsd.org>
@@ -327,6 +327,26 @@ struct acpi_madt_platform_int {
#define ACPI_MADT_PLATFORM_CPEI 0x00000001
} __packed;
+struct acpi_madt_x2apic {
+ u_int8_t apic_type;
+#define ACPI_MADT_X2APIC 9
+ u_int8_t length;
+ u_int8_t reserved[2];
+ u_int32_t apic_id;
+ u_int32_t flags; /* Same flags as acpi_madt_lapic */
+ u_int32_t apic_proc_uid;
+} __packed;
+
+struct acpi_madt_x2apic_nmi {
+ u_int8_t apic_type;
+#define ACPI_MADT_X2APIC_NMI 10
+ u_int8_t length;
+ u_int16_t flags; /* Same flags as acpi_madt_override */
+ u_int32_t apic_proc_uid;
+ u_int8_t local_x2apic_lint;
+ u_int8_t reserved[3];
+} __packed;
+
union acpi_madt_entry {
struct acpi_madt_lapic madt_lapic;
struct acpi_madt_ioapic madt_ioapic;
@@ -337,6 +357,8 @@ union acpi_madt_entry {
struct acpi_madt_io_sapic madt_io_sapic;
struct acpi_madt_local_sapic madt_local_sapic;
struct acpi_madt_platform_int madt_platform_int;
+ struct acpi_madt_x2apic madt_x2apic;
+ struct acpi_madt_x2apic_nmi madt_x2apic_nmi;
} __packed;
struct acpi_sbst {