This code can also be found here: git://git.kernel.org/pub/scm/virt/kvm/mst/qemu.git acpi
Please review, and consider for 1.6. Changes from v2 repost: - address comment by Anthony - convert to use APIs implemented using QOM - address comment by Anthony - avoid tricky pointer path, use GArray from glib instead - Address lots of comments by Hu Tao and Laszlo Ersek - rebase to latest bits Changes from v2: - added missing patches to make it actually build Changes from v1 RFC: - added code to address cross version compatibility - rebased to latest bits - updated seabios code to latest bits (added pvpanic device) This patchset moves all generation of ACPI tables from guest BIOS to the hypervisor. Although ACPI tables come from a system BIOS on real hw, it makes sense that the ACPI tables are coupled with the virtual machine, since they have to abstract the x86 machine to the OS's. This is widely desired as a way to avoid the churn and proliferation of QEMU-specific interfaces associated with ACPI tables in bios code. There's a bit of code duplication where we already declare similar acpi structures in qemu. I think it's best to do it in this order: port code directly, and apply cleanups and reduce duplication that results, on top. This way it's much easier to see that we don't introduce regressions. In particular, I booted a guest on qemu with and without the change, and verified that ACPI tables are unchanged except for trivial pointer address changes. Such binary compatibility makes it easier to be confident that this change won't break things. Michael S. Tsirkin (14): hw/i386/pc.c: move IO_APIC_DEFAULT_ADDRESS to include/hw/i386/apic.h i386: add ACPI table files from seabios acpi: add rules to compile ASL source acpi: pre-compiled ASL files loader: use file path size from fw_cfg.h i386: add bios linker/loader loader: support for unmapped ROM blobs loader: allow adding ROMs in done callbacks i386: define pc guest info ich9: APIs for pc guest info piix: APIs for pc guest info pvpanic: add API to access io port hpet: add API to find it i386: ACPI table generation code from seabios configure | 9 +- hw/acpi/ich9.c | 6 + hw/acpi/piix4.c | 29 +- hw/core/loader.c | 40 +- hw/i386/Makefile.objs | 27 + hw/i386/acpi-build.c | 907 +++++ hw/i386/acpi-defs.h | 327 ++ hw/i386/acpi-dsdt-cpu-hotplug.dsl | 93 + hw/i386/acpi-dsdt-dbug.dsl | 41 + hw/i386/acpi-dsdt-hpet.dsl | 51 + hw/i386/acpi-dsdt-isa.dsl | 117 + hw/i386/acpi-dsdt-pci-crs.dsl | 105 + hw/i386/acpi-dsdt.dsl | 343 ++ hw/i386/acpi-dsdt.hex.generated | 4409 ++++++++++++++++++++ hw/i386/bios-linker-loader.c | 156 + hw/i386/pc.c | 37 +- hw/i386/pc_piix.c | 5 + hw/i386/pc_q35.c | 3 + hw/i386/q35-acpi-dsdt.dsl | 452 +++ hw/i386/q35-acpi-dsdt.hex.generated | 7346 ++++++++++++++++++++++++++++++++++ hw/i386/ssdt-misc.dsl | 119 + hw/i386/ssdt-misc.hex.generated | 190 + hw/i386/ssdt-pcihp.dsl | 51 + hw/i386/ssdt-pcihp.hex.generated | 108 + hw/i386/ssdt-proc.dsl | 63 + hw/i386/ssdt-proc.hex.generated | 134 + hw/isa/lpc_ich9.c | 19 + hw/lm32/lm32_hwsetup.h | 2 +- hw/mips/mips_malta.c | 2 +- hw/misc/pvpanic.c | 11 + hw/pci-host/piix.c | 8 + hw/pci-host/q35.c | 10 + hw/timer/hpet.c | 5 + include/hw/acpi/ich9.h | 2 + include/hw/i386/acpi-build.h | 9 + include/hw/i386/apic.h | 2 + include/hw/i386/bios-linker-loader.h | 26 + include/hw/i386/ich9.h | 3 + include/hw/i386/pc.h | 34 + include/hw/loader.h | 5 +- include/hw/nvram/fw_cfg.h | 4 +- include/hw/pci-host/q35.h | 2 + include/hw/timer/hpet.h | 2 + include/qemu/typedefs.h | 2 + scripts/acpi_extract.py | 362 ++ scripts/acpi_extract_preprocess.py | 51 + scripts/update-acpi.sh | 4 + vl.c | 3 + 48 files changed, 15721 insertions(+), 15 deletions(-) create mode 100644 hw/i386/acpi-build.c create mode 100644 hw/i386/acpi-defs.h create mode 100644 hw/i386/acpi-dsdt-cpu-hotplug.dsl create mode 100644 hw/i386/acpi-dsdt-dbug.dsl create mode 100644 hw/i386/acpi-dsdt-hpet.dsl create mode 100644 hw/i386/acpi-dsdt-isa.dsl create mode 100644 hw/i386/acpi-dsdt-pci-crs.dsl create mode 100644 hw/i386/acpi-dsdt.dsl create mode 100644 hw/i386/acpi-dsdt.hex.generated create mode 100644 hw/i386/bios-linker-loader.c create mode 100644 hw/i386/q35-acpi-dsdt.dsl create mode 100644 hw/i386/q35-acpi-dsdt.hex.generated create mode 100644 hw/i386/ssdt-misc.dsl create mode 100644 hw/i386/ssdt-misc.hex.generated create mode 100644 hw/i386/ssdt-pcihp.dsl create mode 100644 hw/i386/ssdt-pcihp.hex.generated create mode 100644 hw/i386/ssdt-proc.dsl create mode 100644 hw/i386/ssdt-proc.hex.generated create mode 100644 include/hw/i386/acpi-build.h create mode 100644 include/hw/i386/bios-linker-loader.h create mode 100755 scripts/acpi_extract.py create mode 100755 scripts/acpi_extract_preprocess.py create mode 100644 scripts/update-acpi.sh -- MST