@@ -371,11 +371,24 @@ static void pc_madt_xrupt_override_entry(GArray *entry, void *opaque)
}
}
+static void pc_madt_x2apic_nmi_entry(GArray *entry, void *opaque)
+{
+ AcpiMadtLocalX2ApicNmi *local_nmi;
+
+ local_nmi = acpi_data_push(entry, sizeof *local_nmi);
+ local_nmi->type = ACPI_APIC_LOCAL_X2APIC_NMI;
+ local_nmi->length = sizeof(*local_nmi);
+ local_nmi->uid = 0xFFFFFFFF; /* all processors */
+ local_nmi->flags = cpu_to_le16(0);
+ local_nmi->lint = 1; /* ACPI_LINT1 */
+}
+
madt_operations i386_madt_sub = {
[ACPI_APIC_PROCESSOR] = pc_madt_apic_entry,
[ACPI_APIC_LOCAL_X2APIC] = pc_madt_x2apic_entry,
[ACPI_APIC_IO] = pc_madt_io_entry,
[ACPI_APIC_XRUPT_OVERRIDE] = pc_madt_xrupt_override_entry,
+ [ACPI_APIC_LOCAL_X2APIC_NMI] = pc_madt_x2apic_nmi_entry,
};
static void
@@ -424,14 +437,7 @@ build_madt(GArray *table_data, BIOSLinker *linker, PCMachineState *pcms)
}
if (x2apic_mode) {
- AcpiMadtLocalX2ApicNmi *local_nmi;
-
- local_nmi = acpi_data_push(table_data, sizeof *local_nmi);
- local_nmi->type = ACPI_APIC_LOCAL_X2APIC_NMI;
- local_nmi->length = sizeof(*local_nmi);
- local_nmi->uid = 0xFFFFFFFF; /* all processors */
- local_nmi->flags = cpu_to_le16(0);
- local_nmi->lint = 1; /* ACPI_LINT1 */
+ adevc->madt_sub[ACPI_APIC_LOCAL_X2APIC_NMI](table_data, NULL);
} else {
AcpiMadtLocalNmi *local_nmi;
Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> --- hw/i386/acpi-build.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-)