Recognize MADT type 9 (x2APIC) and type 4 (Local APIC NMI) explicitly
instead of reporting them as unhandled. The x2APIC entry is ignored
because this xAPIC port cannot map its 32-bit IDs, and the NMI entry does
not describe a processor.
---
 i386/i386at/acpi_parse_apic.c | 14 +++++++++++---
 i386/i386at/acpi_parse_apic.h |  3 ++-
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/i386/i386at/acpi_parse_apic.c b/i386/i386at/acpi_parse_apic.c
index d7a55dbf..0180dfd1 100644
--- a/i386/i386at/acpi_parse_apic.c
+++ b/i386/i386at/acpi_parse_apic.c
@@ -511,10 +511,18 @@ acpi_apic_parse_table(struct acpi_apic *apic)
             acpi_apic_add_irq_override(irq_override_entry);
             break;
 
+        case ACPI_APIC_ENTRY_X2APIC:
+            printf("APIC: x2APIC entry (type %d) unsupported, ignored\n",
+                   apic_entry->type);
+            break;
+
+        case ACPI_APIC_ENTRY_NONMASK_IRQ:
+            break;
+
         /* FIXME: There is another unhandled case */
-       default:
-           printf("Unhandled APIC entry type 0x%x\n", apic_entry->type);
-           break;
+        default:
+            printf("Unhandled APIC entry type 0x%x\n", apic_entry->type);
+            break;
         }
 
         /* Get next APIC entry. */
diff --git a/i386/i386at/acpi_parse_apic.h b/i386/i386at/acpi_parse_apic.h
index 64819213..c8cf833b 100644
--- a/i386/i386at/acpi_parse_apic.h
+++ b/i386/i386at/acpi_parse_apic.h
@@ -107,7 +107,8 @@ enum ACPI_APIC_ENTRY_TYPE {
     ACPI_APIC_ENTRY_LAPIC = 0,
     ACPI_APIC_ENTRY_IOAPIC = 1,
     ACPI_APIC_ENTRY_IRQ_OVERRIDE  = 2,
-    ACPI_APIC_ENTRY_NONMASK_IRQ = 4
+    ACPI_APIC_ENTRY_NONMASK_IRQ = 4,
+    ACPI_APIC_ENTRY_X2APIC = 9
 };
 
 /*

Reply via email to