diff options
-rw-r--r-- | sys/dev/acpi/acpimadt.c | 14 | ||||
-rw-r--r-- | sys/dev/acpi/acpireg.h | 24 |
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 { |