From 1b2802c49f60f9de2c24afb5883dafa60d3f3345 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 16 Oct 2020 13:38:31 +0200 Subject: [PATCH] x86: make pci irqs runtime configurable Add a variable to x86 machine state instead of hard-coding the PCI interrupts. Signed-off-by: Gerd Hoffmann Message-id: 20201016113835.17465-4-kraxel@redhat.com --- hw/i386/acpi-common.c | 3 +-- hw/i386/x86.c | 1 + include/hw/i386/x86.h | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/i386/acpi-common.c b/hw/i386/acpi-common.c index ab9b00581a..1584abb3e6 100644 --- a/hw/i386/acpi-common.c +++ b/hw/i386/acpi-common.c @@ -115,8 +115,7 @@ void acpi_build_madt(GArray *table_data, BIOSLinker *linker, if (has_pci) { for (i = 1; i < 16; i++) { -#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11)) - if (!(ACPI_BUILD_PCI_IRQS & (1 << i))) { + if (!(x86ms->pci_irq_mask & (1 << i))) { /* No need for a INT source override structure. */ continue; } diff --git a/hw/i386/x86.c b/hw/i386/x86.c index 3137a20085..5944fc44ed 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -1178,6 +1178,7 @@ static void x86_machine_initfn(Object *obj) x86ms->smm = ON_OFF_AUTO_AUTO; x86ms->acpi = ON_OFF_AUTO_AUTO; x86ms->smp_dies = 1; + x86ms->pci_irq_mask = ACPI_BUILD_PCI_IRQS; } static void x86_machine_class_init(ObjectClass *oc, void *data) diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index d5dcf7a07f..bfa9cb2a25 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -58,6 +58,7 @@ struct X86MachineState { /* CPU and apic information: */ bool apic_xrupt_override; + unsigned pci_irq_mask; unsigned apic_id_limit; uint16_t boot_cpus; unsigned smp_dies; @@ -114,6 +115,7 @@ bool x86_machine_is_acpi_enabled(const X86MachineState *x86ms); /* Global System Interrupts */ #define GSI_NUM_PINS IOAPIC_NUM_PINS +#define ACPI_BUILD_PCI_IRQS ((1<<5) | (1<<9) | (1<<10) | (1<<11)) typedef struct GSIState { qemu_irq i8259_irq[ISA_NUM_IRQS];