From 5304f36748e893fda6f568896a81d3958e6e6dbb Mon Sep 17 00:00:00 2001 From: Nicholas Mosier Date: Tue, 11 Nov 2025 13:57:52 -0800 Subject: [PATCH 001/152] i386/tcg/svm: fix comma operator typo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A comma operator inappropriately terminates an expression in svm_helper.c. Replace it with a semicolon. Signed-off-by: Nicholas Mosier Reviewed-by: Philippe Mathieu-Daudé Link: https://lore.kernel.org/r/20251111-i386-svm-vmexit-typo-fix-v1-1-49f0414472cd@stanford.edu Signed-off-by: Paolo Bonzini --- target/i386/tcg/system/svm_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/i386/tcg/system/svm_helper.c b/target/i386/tcg/system/svm_helper.c index 4b86796518..524b3620d5 100644 --- a/target/i386/tcg/system/svm_helper.c +++ b/target/i386/tcg/system/svm_helper.c @@ -742,7 +742,7 @@ void cpu_vmexit(CPUX86State *env, uint64_t exit_code, uint64_t exit_info_1, exit_code); x86_stq_phys(cs, env->vm_vmcb + offsetof(struct vmcb, - control.exit_info_1), exit_info_1), + control.exit_info_1), exit_info_1); /* remove any pending exception */ env->old_exception = -1; From e4e110594980c22fd0b4d3a5ccd6b15b64e2a8e8 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Nov 2025 19:34:34 +0100 Subject: [PATCH 002/152] include: name the MemReentrancyGuard struct Signed-off-by: Paolo Bonzini --- include/hw/qdev-core.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index 2caa0cbd26..5cf2db7ee1 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -208,7 +208,7 @@ struct NamedClockList { QLIST_ENTRY(NamedClockList) node; }; -typedef struct { +typedef struct MemReentrancyGuard { bool engaged_in_io; } MemReentrancyGuard; From c611228c0ed65d263916bd5f3e2195ee79970750 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Nov 2025 11:26:16 +0100 Subject: [PATCH 003/152] include: move memory_ldst* to include/system These partial headers are only included via system/memory.h, so keep them in the same directory. Signed-off-by: Paolo Bonzini --- include/system/memory.h | 14 +++++++------- include/{exec => system}/memory_ldst.h.inc | 0 include/{exec => system}/memory_ldst_cached.h.inc | 0 include/{exec => system}/memory_ldst_phys.h.inc | 0 4 files changed, 7 insertions(+), 7 deletions(-) rename include/{exec => system}/memory_ldst.h.inc (100%) rename include/{exec => system}/memory_ldst_cached.h.inc (100%) rename include/{exec => system}/memory_ldst_phys.h.inc (100%) diff --git a/include/system/memory.h b/include/system/memory.h index 3bd5ffa5e0..1cacc117cc 100644 --- a/include/system/memory.h +++ b/include/system/memory.h @@ -2848,7 +2848,7 @@ MemTxResult address_space_write_rom(AddressSpace *as, hwaddr addr, #define SUFFIX #define ARG1 as #define ARG1_DECL AddressSpace *as -#include "exec/memory_ldst.h.inc" +#include "system/memory_ldst.h.inc" static inline void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val) { @@ -2859,7 +2859,7 @@ static inline void stl_phys_notdirty(AddressSpace *as, hwaddr addr, uint32_t val #define SUFFIX #define ARG1 as #define ARG1_DECL AddressSpace *as -#include "exec/memory_ldst_phys.h.inc" +#include "system/memory_ldst_phys.h.inc" struct MemoryRegionCache { uint8_t *ptr; @@ -2897,7 +2897,7 @@ struct MemoryRegionCache { #define SUFFIX _cached_slow #define ARG1 cache #define ARG1_DECL MemoryRegionCache *cache -#include "exec/memory_ldst.h.inc" +#include "system/memory_ldst.h.inc" /* Inline fast path for direct RAM access. */ static inline uint8_t address_space_ldub_cached(MemoryRegionCache *cache, @@ -2923,18 +2923,18 @@ static inline void address_space_stb_cached(MemoryRegionCache *cache, } #define ENDIANNESS -#include "exec/memory_ldst_cached.h.inc" +#include "system/memory_ldst_cached.h.inc" #define ENDIANNESS _le -#include "exec/memory_ldst_cached.h.inc" +#include "system/memory_ldst_cached.h.inc" #define ENDIANNESS _be -#include "exec/memory_ldst_cached.h.inc" +#include "system/memory_ldst_cached.h.inc" #define SUFFIX _cached #define ARG1 cache #define ARG1_DECL MemoryRegionCache *cache -#include "exec/memory_ldst_phys.h.inc" +#include "system/memory_ldst_phys.h.inc" /* address_space_cache_init: prepare for repeated access to a physical * memory region diff --git a/include/exec/memory_ldst.h.inc b/include/system/memory_ldst.h.inc similarity index 100% rename from include/exec/memory_ldst.h.inc rename to include/system/memory_ldst.h.inc diff --git a/include/exec/memory_ldst_cached.h.inc b/include/system/memory_ldst_cached.h.inc similarity index 100% rename from include/exec/memory_ldst_cached.h.inc rename to include/system/memory_ldst_cached.h.inc diff --git a/include/exec/memory_ldst_phys.h.inc b/include/system/memory_ldst_phys.h.inc similarity index 100% rename from include/exec/memory_ldst_phys.h.inc rename to include/system/memory_ldst_phys.h.inc From 78476202e4fc54346ad3849c60244f6a8ade18a7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:33:06 +0100 Subject: [PATCH 004/152] include: move hw/usb.h to hw/usb/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- chardev/baum.c | 2 +- hw/arm/sbsa-ref.c | 2 +- hw/hppa/machine.c | 2 +- hw/i386/pc.c | 2 +- hw/i386/pc_piix.c | 2 +- hw/i386/pc_q35.c | 2 +- hw/mips/loongson3_virt.c | 2 +- hw/ppc/mac_newworld.c | 2 +- hw/ppc/spapr.c | 2 +- hw/sh4/r2d.c | 2 +- hw/usb/bus-stub.c | 2 +- hw/usb/bus.c | 2 +- hw/usb/canokey.c | 2 +- hw/usb/combined-packet.c | 2 +- hw/usb/core.c | 2 +- hw/usb/desc-msos.c | 2 +- hw/usb/desc.c | 2 +- hw/usb/dev-audio.c | 2 +- hw/usb/dev-hid.c | 2 +- hw/usb/dev-hub.c | 2 +- hw/usb/dev-mtp.c | 2 +- hw/usb/dev-network.c | 2 +- hw/usb/dev-serial.c | 2 +- hw/usb/dev-smartcard-reader.c | 2 +- hw/usb/dev-storage-bot.c | 2 +- hw/usb/dev-storage-classic.c | 2 +- hw/usb/dev-storage.c | 2 +- hw/usb/dev-uas.c | 2 +- hw/usb/dev-wacom.c | 2 +- hw/usb/hcd-dwc2.h | 2 +- hw/usb/hcd-ehci.h | 2 +- hw/usb/hcd-ohci-pci.c | 2 +- hw/usb/hcd-ohci-sysbus.c | 2 +- hw/usb/hcd-ohci.c | 2 +- hw/usb/hcd-ohci.h | 2 +- hw/usb/hcd-uhci.c | 2 +- hw/usb/hcd-uhci.h | 2 +- hw/usb/hcd-xhci-nec.c | 2 +- hw/usb/hcd-xhci-pci.h | 2 +- hw/usb/hcd-xhci-sysbus.h | 2 +- hw/usb/hcd-xhci.h | 2 +- hw/usb/host-libusb.c | 2 +- hw/usb/libhw.c | 2 +- hw/usb/pcap.c | 2 +- hw/usb/quirks.c | 2 +- hw/usb/redirect.c | 2 +- hw/usb/u2f-emulated.c | 2 +- hw/usb/u2f-passthru.c | 2 +- hw/usb/u2f.c | 2 +- hw/usb/xen-usb.c | 2 +- hw/vmapple/vmapple.c | 2 +- include/hw/usb/msd.h | 2 +- include/hw/{ => usb}/usb.h | 0 system/vl.c | 2 +- 55 files changed, 54 insertions(+), 54 deletions(-) rename include/hw/{ => usb}/usb.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 63e9ba521b..7128672934 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2285,7 +2285,7 @@ S: Orphan F: hw/usb/* F: tests/qtest/usb-*-test.c F: docs/system/devices/usb.rst -F: include/hw/usb.h +F: include/hw/usb/usb.h F: include/hw/usb/ USB (serial adapter) diff --git a/chardev/baum.c b/chardev/baum.c index ad68321504..157f8b9519 100644 --- a/chardev/baum.c +++ b/chardev/baum.c @@ -28,7 +28,7 @@ #include "qemu/main-loop.h" #include "qemu/module.h" #include "qemu/timer.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "ui/console.h" #include #include diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c index 2205500a8d..3ba69d37d7 100644 --- a/hw/arm/sbsa-ref.c +++ b/hw/arm/sbsa-ref.c @@ -45,7 +45,7 @@ #include "hw/loader.h" #include "hw/pci-host/gpex.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/xhci.h" #include "hw/char/pl011.h" #include "hw/watchdog/sbsa_gwdt.h" diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c index 8c66eed5a2..acd1c3f005 100644 --- a/hw/hppa/machine.c +++ b/hw/hppa/machine.c @@ -24,7 +24,7 @@ #include "hw/input/lasips2.h" #include "hw/net/lasi_82596.h" #include "hw/nmi.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/pci/pci.h" #include "hw/pci/pci_device.h" #include "hw/pci-host/astro.h" diff --git a/hw/i386/pc.c b/hw/i386/pc.c index f8b919cb6c..0f2a588902 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -52,7 +52,7 @@ #include "acpi-build.h" #include "hw/mem/nvdimm.h" #include "hw/cxl/cxl_host.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/i386/intel_iommu.h" #include "hw/net/ne2000-isa.h" #include "hw/virtio/virtio-iommu.h" diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 7b3611e973..f6b9a1bc40 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -35,7 +35,7 @@ #include "hw/display/ramfb.h" #include "hw/pci/pci.h" #include "hw/pci/pci_ids.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "net/net.h" #include "hw/ide/pci.h" #include "hw/irq.h" diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 6015e639d7..02de7453ba 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -52,7 +52,7 @@ #include "hw/ide/ahci-pci.h" #include "hw/intc/ioapic.h" #include "hw/southbridge/ich9.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/hcd-uhci.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c index 77dc895648..4df6cf13b3 100644 --- a/hw/mips/loongson3_virt.c +++ b/hw/mips/loongson3_virt.c @@ -43,7 +43,7 @@ #include "hw/pci/pci.h" #include "hw/pci/pci_host.h" #include "hw/pci-host/gpex.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "net/net.h" #include "system/kvm.h" #include "system/qtest.h" diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 951de4bae4..739f1af3e1 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -72,7 +72,7 @@ #include "system/kvm.h" #include "system/reset.h" #include "kvm_ppc.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/sysbus.h" #include "trace.h" diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 99b843ba2f..6f2d10330d 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -78,7 +78,7 @@ #include "hw/virtio/vhost-scsi-common.h" #include "system/confidential-guest-support.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "qemu/config-file.h" #include "qemu/error-report.h" #include "trace.h" diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c index 010be6d539..c29ee69069 100644 --- a/hw/sh4/r2d.c +++ b/hw/sh4/r2d.c @@ -41,7 +41,7 @@ #include "hw/ide/mmio.h" #include "hw/irq.h" #include "hw/loader.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/block/flash.h" #include "exec/tswap.h" diff --git a/hw/usb/bus-stub.c b/hw/usb/bus-stub.c index cd0c317b71..a7c3909e96 100644 --- a/hw/usb/bus-stub.c +++ b/hw/usb/bus-stub.c @@ -12,7 +12,7 @@ #include "qapi/qapi-commands-machine.h" #include "system/system.h" #include "monitor/monitor.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" USBDevice *usbdevice_create(const char *driver) { diff --git a/hw/usb/bus.c b/hw/usb/bus.c index 714e33989f..c1dd142965 100644 --- a/hw/usb/bus.c +++ b/hw/usb/bus.c @@ -1,6 +1,6 @@ #include "qemu/osdep.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "qapi/error.h" #include "qapi/qapi-commands-machine.h" #include "qapi/type-helpers.h" diff --git a/hw/usb/canokey.c b/hw/usb/canokey.c index cbefbb5daf..acd4ea30d9 100644 --- a/hw/usb/canokey.c +++ b/hw/usb/canokey.c @@ -12,7 +12,7 @@ #include "qemu/module.h" #include "qapi/error.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/qdev-properties.h" #include "trace.h" #include "desc.h" diff --git a/hw/usb/combined-packet.c b/hw/usb/combined-packet.c index e56802f89a..f18e53b788 100644 --- a/hw/usb/combined-packet.c +++ b/hw/usb/combined-packet.c @@ -21,7 +21,7 @@ */ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "qemu/iov.h" #include "trace.h" diff --git a/hw/usb/core.c b/hw/usb/core.c index 975f76250a..b3f811c513 100644 --- a/hw/usb/core.c +++ b/hw/usb/core.c @@ -24,7 +24,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "qemu/iov.h" #include "trace.h" diff --git a/hw/usb/desc-msos.c b/hw/usb/desc-msos.c index c72c65b650..3f53d4943d 100644 --- a/hw/usb/desc-msos.c +++ b/hw/usb/desc-msos.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "desc.h" /* diff --git a/hw/usb/desc.c b/hw/usb/desc.c index f2bdc05a95..268eaf0699 100644 --- a/hw/usb/desc.c +++ b/hw/usb/desc.c @@ -1,6 +1,6 @@ #include "qemu/osdep.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "desc.h" #include "trace.h" diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c index 8dd9d26599..988824ea75 100644 --- a/hw/usb/dev-audio.c +++ b/hw/usb/dev-audio.c @@ -32,7 +32,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" #include "qemu/audio.h" diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c index 96623aa322..296e9d0d85 100644 --- a/hw/usb/dev-hid.c +++ b/hw/usb/dev-hid.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "ui/console.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" #include "qapi/error.h" diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c index a19350d9c4..f418da1409 100644 --- a/hw/usb/dev-hub.c +++ b/hw/usb/dev-hub.c @@ -27,7 +27,7 @@ #include "qemu/timer.h" #include "trace.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" #include "qemu/error-report.h" diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c index afd7944b73..04e8eedbf6 100644 --- a/hw/usb/dev-mtp.c +++ b/hw/usb/dev-mtp.c @@ -23,7 +23,7 @@ #include "qemu/filemonitor.h" #include "trace.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" #include "qemu/units.h" diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c index 1df2454181..34cd906d6c 100644 --- a/hw/usb/dev-network.c +++ b/hw/usb/dev-network.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" #include "net/net.h" diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 2eb52b2e01..17bdff9e82 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -15,7 +15,7 @@ #include "qemu/module.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" #include "chardev/char-serial.h" diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c index 6ce7154fee..a1081e545a 100644 --- a/hw/usb/dev-smartcard-reader.c +++ b/hw/usb/dev-smartcard-reader.c @@ -41,7 +41,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" diff --git a/hw/usb/dev-storage-bot.c b/hw/usb/dev-storage-bot.c index df6ab7f656..a7f8d80c17 100644 --- a/hw/usb/dev-storage-bot.c +++ b/hw/usb/dev-storage-bot.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/desc.h" #include "hw/usb/msd.h" diff --git a/hw/usb/dev-storage-classic.c b/hw/usb/dev-storage-classic.c index dabe156359..977151c4a0 100644 --- a/hw/usb/dev-storage-classic.c +++ b/hw/usb/dev-storage-classic.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qapi/visitor.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/desc.h" #include "hw/usb/msd.h" #include "system/system.h" diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c index b13fe345c4..bbd97406f0 100644 --- a/hw/usb/dev-storage.c +++ b/hw/usb/dev-storage.c @@ -13,7 +13,7 @@ #include "qemu/module.h" #include "qemu/option.h" #include "qemu/config-file.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/msd.h" #include "desc.h" #include "hw/qdev-properties.h" diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c index 18ebe15d0c..75f01c7403 100644 --- a/hw/usb/dev-uas.c +++ b/hw/usb/dev-uas.c @@ -18,7 +18,7 @@ #include "qemu/module.h" #include "qemu/log.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" #include "hw/qdev-properties.h" diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c index f4b71a2147..14d07e8128 100644 --- a/hw/usb/dev-wacom.c +++ b/hw/usb/dev-wacom.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "ui/console.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/hid.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/usb/hcd-dwc2.h b/hw/usb/hcd-dwc2.h index 2d5a5690fc..0c02392ade 100644 --- a/hw/usb/hcd-dwc2.h +++ b/hw/usb/hcd-dwc2.h @@ -22,7 +22,7 @@ #include "qemu/timer.h" #include "hw/irq.h" #include "hw/sysbus.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "system/dma.h" #include "qom/object.h" diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h index ffd6c5108e..c16717294d 100644 --- a/hw/usb/hcd-ehci.h +++ b/hw/usb/hcd-ehci.h @@ -19,7 +19,7 @@ #define HW_USB_HCD_EHCI_H #include "qemu/timer.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "system/dma.h" #include "hw/pci/pci_device.h" #include "hw/sysbus.h" diff --git a/hw/usb/hcd-ohci-pci.c b/hw/usb/hcd-ohci-pci.c index 94d1077eb9..e180e96b5f 100644 --- a/hw/usb/hcd-ohci-pci.c +++ b/hw/usb/hcd-ohci-pci.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/timer.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "hw/pci/pci_device.h" #include "hw/sysbus.h" diff --git a/hw/usb/hcd-ohci-sysbus.c b/hw/usb/hcd-ohci-sysbus.c index 3fc6cce44b..2d3c770b11 100644 --- a/hw/usb/hcd-ohci-sysbus.c +++ b/hw/usb/hcd-ohci-sysbus.c @@ -23,7 +23,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "qemu/timer.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "hw/sysbus.h" #include "hw/qdev-dma.h" diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c index 72a9f9f474..c48f07f7e3 100644 --- a/hw/usb/hcd-ohci.c +++ b/hw/usb/hcd-ohci.c @@ -30,7 +30,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "qemu/timer.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "hw/sysbus.h" #include "hw/qdev-dma.h" diff --git a/hw/usb/hcd-ohci.h b/hw/usb/hcd-ohci.h index 3cc35a5cdc..75e266de90 100644 --- a/hw/usb/hcd-ohci.h +++ b/hw/usb/hcd-ohci.h @@ -23,7 +23,7 @@ #include "hw/sysbus.h" #include "system/dma.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "qom/object.h" /* Number of Downstream Ports on the root hub: */ diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c index e207d0587a..124ac4faec 100644 --- a/hw/usb/hcd-uhci.c +++ b/hw/usb/hcd-uhci.c @@ -27,7 +27,7 @@ */ #include "qemu/osdep.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/uhci-regs.h" #include "migration/vmstate.h" #include "hw/pci/pci.h" diff --git a/hw/usb/hcd-uhci.h b/hw/usb/hcd-uhci.h index e0a6525505..3154837f1d 100644 --- a/hw/usb/hcd-uhci.h +++ b/hw/usb/hcd-uhci.h @@ -31,7 +31,7 @@ #include "system/memory.h" #include "qemu/timer.h" #include "hw/pci/pci_device.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" typedef struct UHCIQueue UHCIQueue; diff --git a/hw/usb/hcd-xhci-nec.c b/hw/usb/hcd-xhci-nec.c index 9e0fea26f4..5fc853eb33 100644 --- a/hw/usb/hcd-xhci-nec.c +++ b/hw/usb/hcd-xhci-nec.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "qemu/module.h" #include "hw/pci/pci.h" #include "hw/qdev-properties.h" diff --git a/hw/usb/hcd-xhci-pci.h b/hw/usb/hcd-xhci-pci.h index 5b61ae8455..c9359f1bd9 100644 --- a/hw/usb/hcd-xhci-pci.h +++ b/hw/usb/hcd-xhci-pci.h @@ -25,7 +25,7 @@ #define HW_USB_HCD_XHCI_PCI_H #include "hw/pci/pci_device.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hcd-xhci.h" #define TYPE_XHCI_PCI "pci-xhci" diff --git a/hw/usb/hcd-xhci-sysbus.h b/hw/usb/hcd-xhci-sysbus.h index fdfcbbee3b..f8175470ba 100644 --- a/hw/usb/hcd-xhci-sysbus.h +++ b/hw/usb/hcd-xhci-sysbus.h @@ -11,7 +11,7 @@ #ifndef HW_USB_HCD_XHCI_SYSBUS_H #define HW_USB_HCD_XHCI_SYSBUS_H -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hcd-xhci.h" #include "hw/sysbus.h" diff --git a/hw/usb/hcd-xhci.h b/hw/usb/hcd-xhci.h index 9c3974f148..5cb9e06d1d 100644 --- a/hw/usb/hcd-xhci.h +++ b/hw/usb/hcd-xhci.h @@ -23,7 +23,7 @@ #define HW_USB_HCD_XHCI_H #include "qom/object.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/xhci.h" #include "system/dma.h" diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index b74670ae25..38893b5e68 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -56,7 +56,7 @@ #include "trace.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" /* ------------------------------------------------------------------------ */ diff --git a/hw/usb/libhw.c b/hw/usb/libhw.c index 4f03ef4ba9..e108be054c 100644 --- a/hw/usb/libhw.c +++ b/hw/usb/libhw.c @@ -20,7 +20,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "system/dma.h" int usb_packet_map(USBPacket *p, QEMUSGList *sgl) diff --git a/hw/usb/pcap.c b/hw/usb/pcap.c index dbff00be25..bb74d046a5 100644 --- a/hw/usb/pcap.c +++ b/hw/usb/pcap.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #define PCAP_MAGIC 0xa1b2c3d4 #define PCAP_MAJOR 2 diff --git a/hw/usb/quirks.c b/hw/usb/quirks.c index 23ea7a23ea..44007f8de7 100644 --- a/hw/usb/quirks.c +++ b/hw/usb/quirks.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "quirks.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" static bool usb_id_match(const struct usb_device_id *ids, uint16_t vendor_id, uint16_t product_id, diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index d603a4a6f9..1a73db68f2 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -43,7 +43,7 @@ #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/usb/u2f-emulated.c b/hw/usb/u2f-emulated.c index ace5eceadd..783e7f1af0 100644 --- a/hw/usb/u2f-emulated.c +++ b/hw/usb/u2f-emulated.c @@ -28,7 +28,7 @@ #include "qemu/thread.h" #include "qemu/main-loop.h" #include "qapi/error.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/qdev-properties.h" #include diff --git a/hw/usb/u2f-passthru.c b/hw/usb/u2f-passthru.c index fa8d9cdda8..b3206fb7fe 100644 --- a/hw/usb/u2f-passthru.c +++ b/hw/usb/u2f-passthru.c @@ -29,7 +29,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "hw/qdev-properties.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "migration/vmstate.h" #include "u2f.h" diff --git a/hw/usb/u2f.c b/hw/usb/u2f.c index b051a999d3..d6291852f6 100644 --- a/hw/usb/u2f.c +++ b/hw/usb/u2f.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/usb/hid.h" #include "migration/vmstate.h" #include "desc.h" diff --git a/hw/usb/xen-usb.c b/hw/usb/xen-usb.c index fa46a7da01..caf9efbb77 100644 --- a/hw/usb/xen-usb.c +++ b/hw/usb/xen-usb.c @@ -26,7 +26,7 @@ #include "qemu/config-file.h" #include "qemu/main-loop.h" #include "qemu/option.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/xen/xen-legacy-backend.h" #include "monitor/qdev.h" #include "qapi/error.h" diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c index f3cff32924..62d33525ba 100644 --- a/hw/vmapple/vmapple.c +++ b/hw/vmapple/vmapple.c @@ -30,7 +30,7 @@ #include "hw/loader.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/arm/boot.h" #include "hw/arm/primecell.h" #include "hw/char/pl011.h" diff --git a/include/hw/usb/msd.h b/include/hw/usb/msd.h index f9fd862b52..125d2c218f 100644 --- a/include/hw/usb/msd.h +++ b/include/hw/usb/msd.h @@ -7,7 +7,7 @@ * This code is licensed under the LGPL. */ -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/scsi/scsi.h" enum USBMSDMode { diff --git a/include/hw/usb.h b/include/hw/usb/usb.h similarity index 100% rename from include/hw/usb.h rename to include/hw/usb/usb.h diff --git a/system/vl.c b/system/vl.c index 5091fe52d9..cdf32c119b 100644 --- a/system/vl.c +++ b/system/vl.c @@ -54,7 +54,7 @@ #include "qemu/accel.h" #include "qemu/async-teardown.h" #include "qemu/exit-with-parent.h" -#include "hw/usb.h" +#include "hw/usb/usb.h" #include "hw/isa/isa.h" #include "hw/scsi/scsi.h" #include "hw/sd/sd.h" From 1942b61b74dfdd8bdf0e712ad7ed63721ba70cc8 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:19 +0100 Subject: [PATCH 005/152] include: move hw/boards.h to hw/core/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- accel/accel-system.c | 2 +- accel/hvf/hvf-all.c | 2 +- accel/kvm/kvm-all.c | 2 +- accel/mshv/mshv-all.c | 2 +- accel/tcg/tcg-accel-ops-mttcg.c | 2 +- accel/tcg/tcg-all.c | 2 +- accel/xen/xen-all.c | 2 +- backends/hostmem.c | 2 +- block/monitor/block-hmp-cmds.c | 2 +- docs/conf.py | 2 +- gdbstub/gdbstub.c | 2 +- gdbstub/system.c | 2 +- hw/acpi/aml-build.c | 2 +- hw/acpi/memory_hotplug.c | 2 +- hw/acpi/pci.c | 2 +- hw/alpha/alpha_sys.h | 2 +- hw/arm/allwinner-a10.c | 2 +- hw/arm/allwinner-r40.c | 2 +- hw/arm/aspeed_ast27x0-fc.c | 2 +- hw/arm/b-l475e-iot01a.c | 2 +- hw/arm/bananapi_m2u.c | 2 +- hw/arm/boot.c | 2 +- hw/arm/collie.c | 2 +- hw/arm/cubieboard.c | 2 +- hw/arm/digic_boards.c | 2 +- hw/arm/exynos4_boards.c | 2 +- hw/arm/fby35.c | 2 +- hw/arm/fsl-imx6.c | 2 +- hw/arm/fsl-imx6ul.c | 2 +- hw/arm/fsl-imx7.c | 2 +- hw/arm/fsl-imx8mp.c | 2 +- hw/arm/highbank.c | 2 +- hw/arm/imx25_pdk.c | 2 +- hw/arm/imx8mp-evk.c | 2 +- hw/arm/integratorcp.c | 2 +- hw/arm/kzm.c | 2 +- hw/arm/max78000fthr.c | 2 +- hw/arm/mcimx6ul-evk.c | 2 +- hw/arm/mcimx7d-sabre.c | 2 +- hw/arm/microbit.c | 2 +- hw/arm/mps2-tz.c | 2 +- hw/arm/mps2.c | 2 +- hw/arm/mps3r.c | 2 +- hw/arm/msf2-som.c | 2 +- hw/arm/musca.c | 2 +- hw/arm/musicpal.c | 2 +- hw/arm/netduino2.c | 2 +- hw/arm/netduinoplus2.c | 2 +- hw/arm/npcm8xx.c | 2 +- hw/arm/npcm8xx_boards.c | 2 +- hw/arm/olimex-stm32-h405.c | 2 +- hw/arm/omap_sx1.c | 2 +- hw/arm/orangepi.c | 2 +- hw/arm/raspi.c | 2 +- hw/arm/raspi4b.c | 2 +- hw/arm/realview.c | 2 +- hw/arm/sabrelite.c | 2 +- hw/arm/sbsa-ref.c | 2 +- hw/arm/stellaris.c | 2 +- hw/arm/stm32vldiscovery.c | 2 +- hw/arm/versatilepb.c | 2 +- hw/arm/vexpress.c | 2 +- hw/arm/xen-pvh.c | 2 +- hw/arm/xilinx_zynq.c | 2 +- hw/arm/xlnx-versal-virt.c | 2 +- hw/arm/xlnx-zcu102.c | 2 +- hw/arm/xlnx-zynqmp.c | 2 +- hw/avr/boot.h | 2 +- hw/core/cpu-common.c | 2 +- hw/core/generic-loader.c | 2 +- hw/core/guest-loader.c | 2 +- hw/core/loader.c | 2 +- hw/core/machine-hmp-cmds.c | 2 +- hw/core/machine-qmp-cmds.c | 2 +- hw/core/machine-smp.c | 2 +- hw/core/machine.c | 2 +- hw/core/null-machine.c | 2 +- hw/core/numa.c | 2 +- hw/core/qdev-hotplug.c | 2 +- hw/core/qdev.c | 2 +- hw/cpu/core.c | 2 +- hw/cxl/cxl-host.c | 2 +- hw/hyperv/hv-balloon.c | 2 +- hw/i2c/pm_smbus.c | 2 +- hw/i2c/smbus_eeprom.c | 2 +- hw/i386/acpi-common.h | 2 +- hw/i386/fw_cfg.h | 2 +- hw/i386/vapic.c | 2 +- hw/i386/vmport.c | 2 +- hw/i386/xen/xen-pvh.c | 2 +- hw/intc/apic_common.c | 2 +- hw/intc/loongarch_ipi.c | 2 +- hw/intc/loongarch_pic_kvm.c | 2 +- hw/intc/riscv_aplic.c | 2 +- hw/intc/riscv_imsic.c | 2 +- hw/loongarch/fw_cfg.h | 2 +- hw/loongarch/virt.c | 2 +- hw/m68k/an5206.c | 2 +- hw/m68k/mcf5206.c | 2 +- hw/m68k/mcf5208.c | 2 +- hw/m68k/next-cube.c | 2 +- hw/m68k/q800-glue.c | 2 +- hw/m68k/q800.c | 2 +- hw/m68k/virt.c | 2 +- hw/mem/memory-device.c | 2 +- hw/mem/pc-dimm.c | 2 +- hw/microblaze/boot.c | 2 +- hw/microblaze/petalogix_ml605_mmu.c | 2 +- hw/microblaze/petalogix_s3adsp1800_mmu.c | 2 +- hw/microblaze/xlnx-zynqmp-pmu.c | 2 +- hw/mips/boston.c | 2 +- hw/mips/fuloong2e.c | 2 +- hw/mips/fw_cfg.h | 2 +- hw/mips/jazz.c | 2 +- hw/mips/malta.c | 2 +- hw/nvram/fw_cfg.c | 2 +- hw/openrisc/openrisc_sim.c | 2 +- hw/openrisc/virt.c | 2 +- hw/pci-bridge/pci_expander_bridge.c | 2 +- hw/pci/pci.c | 2 +- hw/ppc/amigaone.c | 2 +- hw/ppc/e500.h | 2 +- hw/ppc/mac_newworld.c | 2 +- hw/ppc/mac_oldworld.c | 2 +- hw/ppc/pegasos.c | 2 +- hw/ppc/ppc440_bamboo.c | 2 +- hw/ppc/ppe42_machine.c | 2 +- hw/ppc/prep.c | 2 +- hw/ppc/sam460ex.c | 2 +- hw/ppc/virtex_ml507.c | 2 +- hw/remote/vfio-user-obj.c | 2 +- hw/riscv/boot.c | 2 +- hw/riscv/microblaze-v-generic.c | 2 +- hw/riscv/microchip_pfsoc.c | 2 +- hw/riscv/numa.c | 2 +- hw/riscv/opentitan.c | 2 +- hw/riscv/shakti_c.c | 2 +- hw/riscv/sifive_e.c | 2 +- hw/riscv/sifive_u.c | 2 +- hw/riscv/spike.c | 2 +- hw/riscv/virt.c | 2 +- hw/riscv/xiangshan_kmh.c | 2 +- hw/rx/rx-gdbsim.c | 2 +- hw/s390x/cpu-topology.c | 2 +- hw/s390x/ipl.c | 2 +- hw/s390x/s390-pci-bus.c | 2 +- hw/s390x/s390-pci-inst.c | 2 +- hw/s390x/s390-virtio-ccw.c | 2 +- hw/s390x/sclp.c | 2 +- hw/sh4/r2d.c | 2 +- hw/smbios/smbios.c | 2 +- hw/sparc/leon3.c | 2 +- hw/sparc/sun4m.c | 2 +- hw/sparc64/niagara.c | 2 +- hw/sparc64/sparc64.c | 2 +- hw/sparc64/sun4u.c | 2 +- hw/tricore/tricore_testboard.c | 2 +- hw/uefi/ovmf-log.c | 2 +- hw/vfio/igd.c | 2 +- hw/virtio/virtio-balloon.c | 2 +- hw/virtio/virtio-iommu-pci.c | 2 +- hw/virtio/virtio-mem.c | 2 +- hw/virtio/virtio-pci.c | 2 +- hw/vmapple/vmapple.c | 2 +- hw/xen/xen-hvm-common.c | 2 +- hw/xen/xen-legacy-backend.c | 2 +- hw/xen/xen-pvh-common.c | 2 +- hw/xenpv/xen_machine_pv.c | 2 +- hw/xtensa/sim.c | 2 +- hw/xtensa/virt.c | 2 +- hw/xtensa/xtfpga.c | 2 +- include/hw/acpi/cpu.h | 2 +- include/hw/arm/aspeed.h | 2 +- include/hw/arm/machines-qom.h | 2 +- include/hw/arm/npcm7xx.h | 2 +- include/hw/arm/raspi_platform.h | 2 +- include/hw/arm/virt.h | 2 +- include/hw/{ => core}/boards.h | 0 include/hw/cxl/cxl_host.h | 2 +- include/hw/i386/microvm.h | 2 +- include/hw/i386/pc.h | 2 +- include/hw/i386/x86.h | 2 +- include/hw/loongarch/virt.h | 2 +- include/hw/m68k/q800.h | 2 +- include/hw/misc/lasi.h | 2 +- include/hw/openrisc/boot.h | 2 +- include/hw/ppc/pnv.h | 2 +- include/hw/ppc/spapr.h | 2 +- include/hw/ppc/spapr_numa.h | 2 +- include/hw/remote/machine.h | 2 +- include/hw/riscv/microchip_pfsoc.h | 2 +- include/hw/riscv/numa.h | 2 +- include/hw/riscv/opentitan.h | 2 +- include/hw/riscv/shakti_c.h | 2 +- include/hw/riscv/sifive_e.h | 2 +- include/hw/riscv/sifive_u.h | 2 +- include/hw/riscv/spike.h | 2 +- include/hw/riscv/virt.h | 2 +- include/hw/riscv/xiangshan_kmh.h | 2 +- include/hw/s390x/cpu-topology.h | 2 +- include/hw/s390x/s390-virtio-ccw.h | 2 +- include/hw/tricore/triboard.h | 2 +- include/hw/xen/xen-pvh-common.h | 2 +- include/system/kvm_int.h | 2 +- migration/migration.c | 2 +- migration/postcopy-ram.c | 2 +- migration/ram.c | 2 +- migration/savevm.c | 2 +- monitor/qemu-config-qmp.c | 2 +- plugins/api-system.c | 2 +- plugins/system.c | 2 +- scripts/compare-machine-types.py | 2 +- semihosting/arm-compat-semi.c | 2 +- system/bootdevice.c | 2 +- system/cpus.c | 2 +- system/device_tree.c | 2 +- system/dirtylimit.c | 2 +- system/memory.c | 2 +- system/physmem.c | 2 +- system/qdev-monitor.c | 2 +- system/runstate.c | 2 +- target-info-stub.c | 2 +- target/arm/arm-qmp-cmds.c | 2 +- target/arm/cpu.c | 2 +- target/arm/hvf/hvf.c | 2 +- target/arm/kvm.c | 2 +- target/arm/tcg/cpu32.c | 2 +- target/i386/cpu.c | 2 +- target/i386/hvf/hvf-cpu.c | 2 +- target/i386/kvm/kvm-cpu.c | 2 +- target/i386/kvm/vmsr_energy.c | 2 +- target/i386/whpx/whpx-all.c | 2 +- target/loongarch/kvm/kvm.c | 2 +- target/m68k/m68k-semi.c | 2 +- target/mips/kvm.c | 2 +- target/openrisc/sys_helper.c | 2 +- target/ppc/cpu_init.c | 2 +- target/riscv/kvm/kvm-cpu.c | 2 +- target/riscv/tcg/tcg-cpu.c | 2 +- target/s390x/cpu-system.c | 2 +- target/s390x/mmu_helper.c | 2 +- target/s390x/sigp.c | 2 +- target/s390x/tcg/excp_helper.c | 2 +- target/s390x/tcg/mem_helper.c | 2 +- target/s390x/tcg/misc_helper.c | 2 +- tests/qtest/fuzz/generic_fuzz.c | 2 +- tests/unit/test-smp-parse.c | 2 +- 248 files changed, 247 insertions(+), 247 deletions(-) rename include/hw/{ => core}/boards.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 7128672934..9e9cb83989 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1994,7 +1994,7 @@ F: hw/core/numa.c F: hw/cpu/cluster.c F: qapi/machine.json F: qapi/machine-common.json -F: include/hw/boards.h +F: include/hw/core/boards.h F: include/hw/core/cpu.h F: include/hw/cpu/cluster.h F: include/system/numa.h diff --git a/accel/accel-system.c b/accel/accel-system.c index 1e97c64fdc..150af05bf5 100644 --- a/accel/accel-system.c +++ b/accel/accel-system.c @@ -27,7 +27,7 @@ #include "qemu/accel.h" #include "qapi/qapi-commands-accelerator.h" #include "monitor/monitor.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/core/cpu.h" #include "accel/accel-ops.h" #include "accel/accel-cpu-ops.h" diff --git a/accel/hvf/hvf-all.c b/accel/hvf/hvf-all.c index 0a4b498e83..77f4e4e4f3 100644 --- a/accel/hvf/hvf-all.c +++ b/accel/hvf/hvf-all.c @@ -16,7 +16,7 @@ #include "system/hvf.h" #include "system/hvf_int.h" #include "hw/core/cpu.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "trace.h" bool hvf_allowed; diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 28006d73c5..02b78717b1 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -53,7 +53,7 @@ #include "system/dirtylimit.h" #include "qemu/range.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/stats.h" /* This check must be after config-host.h is included */ diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c index 80428d130d..47c67ef8cc 100644 --- a/accel/mshv/mshv-all.c +++ b/accel/mshv/mshv-all.c @@ -19,7 +19,7 @@ #include "qemu/event_notifier.h" #include "qemu/module.h" #include "qemu/main-loop.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/hyperv/hvhdk.h" #include "hw/hyperv/hvhdk_mini.h" diff --git a/accel/tcg/tcg-accel-ops-mttcg.c b/accel/tcg/tcg-accel-ops-mttcg.c index cf1ee7ac25..89299829c3 100644 --- a/accel/tcg/tcg-accel-ops-mttcg.c +++ b/accel/tcg/tcg-accel-ops-mttcg.c @@ -30,7 +30,7 @@ #include "qemu/main-loop.h" #include "qemu/notify.h" #include "qemu/guest-random.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "tcg/startup.h" #include "tcg-accel-ops.h" #include "tcg-accel-ops-mttcg.h" diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c index 18ea0c58b0..8eb4a6b89e 100644 --- a/accel/tcg/tcg-all.c +++ b/accel/tcg/tcg-all.c @@ -37,7 +37,7 @@ #include "qemu/units.h" #include "qemu/target-info.h" #ifndef CONFIG_USER_ONLY -#include "hw/boards.h" +#include "hw/core/boards.h" #include "exec/tb-flush.h" #include "system/runstate.h" #endif diff --git a/accel/xen/xen-all.c b/accel/xen/xen-all.c index 97377d67d1..bb2d02cb22 100644 --- a/accel/xen/xen-all.c +++ b/accel/xen/xen-all.c @@ -26,7 +26,7 @@ #include "system/runstate.h" #include "migration/misc.h" #include "migration/global_state.h" -#include "hw/boards.h" +#include "hw/core/boards.h" bool xen_allowed; diff --git a/backends/hostmem.c b/backends/hostmem.c index 35734d6f4d..d583491664 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "system/hostmem.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qapi/error.h" #include "qapi/qapi-builtin-visit.h" #include "qapi/visitor.h" diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index 3640d1f3dc..3391cee4d2 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -36,7 +36,7 @@ */ #include "qemu/osdep.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/block-backend.h" #include "system/blockdev.h" #include "qapi/qapi-commands-block.h" diff --git a/docs/conf.py b/docs/conf.py index 0c9ec74097..bc4e9622dc 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -136,7 +136,7 @@ if micro >= 50: # These thresholds must match the constants # MACHINE_VER_DELETION_MAJOR & MACHINE_VER_DEPRECATION_MAJOR -# defined in include/hw/boards.h and the introductory text in +# defined in include/hw/core/boards.h and the introductory text in # docs/about/deprecated.rst ver_machine_deprecation_version = "%d.%d.0" % (major - 3, minor) ver_machine_deletion_version = "%d.%d.0" % (major - 6, minor) diff --git a/gdbstub/gdbstub.c b/gdbstub/gdbstub.c index 5b2fc06e58..1f8cd11892 100644 --- a/gdbstub/gdbstub.c +++ b/gdbstub/gdbstub.c @@ -38,7 +38,7 @@ #include "gdbstub/user.h" #else #include "hw/cpu/cluster.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #endif #include "hw/core/cpu.h" diff --git a/gdbstub/system.c b/gdbstub/system.c index e2220c1ae4..79f80256e3 100644 --- a/gdbstub/system.c +++ b/gdbstub/system.c @@ -25,7 +25,7 @@ #include "system/replay.h" #include "hw/core/cpu.h" #include "hw/cpu/cluster.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "chardev/char.h" #include "chardev/char-fe.h" #include "monitor/monitor.h" diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c index 2d5826a8f1..dad4cfcc7d 100644 --- a/hw/acpi/aml-build.c +++ b/hw/acpi/aml-build.c @@ -25,7 +25,7 @@ #include "qemu/bswap.h" #include "qemu/bitops.h" #include "system/numa.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/acpi/tpm.h" #include "hw/pci/pci_host.h" #include "hw/pci/pci_bus.h" diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c index 9b974b7274..2f17d45907 100644 --- a/hw/acpi/memory_hotplug.c +++ b/hw/acpi/memory_hotplug.c @@ -1,7 +1,7 @@ #include "qemu/osdep.h" #include "hw/acpi/memory_hotplug.h" #include "hw/mem/pc-dimm.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-core.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/acpi/pci.c b/hw/acpi/pci.c index 2228f1245e..8c7ed10479 100644 --- a/hw/acpi/pci.c +++ b/hw/acpi/pci.c @@ -27,7 +27,7 @@ #include "qemu/error-report.h" #include "qom/object_interfaces.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/acpi/aml-build.h" #include "hw/acpi/pci.h" #include "hw/pci/pci_bridge.h" diff --git a/hw/alpha/alpha_sys.h b/hw/alpha/alpha_sys.h index a303c58438..6e6691d116 100644 --- a/hw/alpha/alpha_sys.h +++ b/hw/alpha/alpha_sys.h @@ -5,7 +5,7 @@ #include "target/alpha/cpu-qom.h" #include "hw/pci/pci.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/intc/i8259.h" diff --git a/hw/arm/allwinner-a10.c b/hw/arm/allwinner-a10.c index dc910d4177..1886df0383 100644 --- a/hw/arm/allwinner-a10.c +++ b/hw/arm/allwinner-a10.c @@ -24,7 +24,7 @@ #include "hw/arm/allwinner-a10.h" #include "hw/misc/unimp.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/usb/hcd-ohci.h" #include "hw/loader.h" #include "target/arm/cpu-qom.h" diff --git a/hw/arm/allwinner-r40.c b/hw/arm/allwinner-r40.c index c8eda39957..313bd21fad 100644 --- a/hw/arm/allwinner-r40.c +++ b/hw/arm/allwinner-r40.c @@ -22,7 +22,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "qemu/units.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-core.h" #include "hw/sysbus.h" #include "hw/char/serial-mm.h" diff --git a/hw/arm/aspeed_ast27x0-fc.c b/hw/arm/aspeed_ast27x0-fc.c index b96ef3f97a..a0cbe50d78 100644 --- a/hw/arm/aspeed_ast27x0-fc.c +++ b/hw/arm/aspeed_ast27x0-fc.c @@ -15,7 +15,7 @@ #include "system/block-backend.h" #include "system/system.h" #include "hw/arm/aspeed.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-clock.h" #include "hw/arm/aspeed_soc.h" #include "hw/loader.h" diff --git a/hw/arm/b-l475e-iot01a.c b/hw/arm/b-l475e-iot01a.c index f1fbc774e5..a724b5fdb2 100644 --- a/hw/arm/b-l475e-iot01a.c +++ b/hw/arm/b-l475e-iot01a.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "qemu/error-report.h" #include "hw/arm/boot.h" diff --git a/hw/arm/bananapi_m2u.c b/hw/arm/bananapi_m2u.c index 0f6d98684b..fd347e18d2 100644 --- a/hw/arm/bananapi_m2u.c +++ b/hw/arm/bananapi_m2u.c @@ -22,7 +22,7 @@ #include "system/address-spaces.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i2c/i2c.h" #include "hw/qdev-properties.h" #include "hw/arm/allwinner-r40.h" diff --git a/hw/arm/boot.c b/hw/arm/boot.c index b91660208f..9b6eaf642e 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -22,7 +22,7 @@ #include "system/system.h" #include "system/memory.h" #include "system/numa.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/reset.h" #include "hw/loader.h" #include "hw/mem/memory-device.h" diff --git a/hw/arm/collie.c b/hw/arm/collie.c index 5a80b7a223..73c40bc57d 100644 --- a/hw/arm/collie.c +++ b/hw/arm/collie.c @@ -12,7 +12,7 @@ #include "qemu/units.h" #include "qemu/cutils.h" #include "hw/sysbus.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "strongarm.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c index aa51c0a703..9fe282342a 100644 --- a/hw/arm/cubieboard.c +++ b/hw/arm/cubieboard.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/arm/allwinner-a10.h" #include "hw/arm/boot.h" diff --git a/hw/arm/digic_boards.c b/hw/arm/digic_boards.c index 23b596d0c8..d986e8f7a2 100644 --- a/hw/arm/digic_boards.c +++ b/hw/arm/digic_boards.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/datadir.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/error-report.h" #include "hw/arm/digic.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index 89f0e94463..66af0e2376 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -33,7 +33,7 @@ #include "hw/arm/exynos4210.h" #include "hw/net/lan9118.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "target/arm/cpu-qom.h" diff --git a/hw/arm/fby35.c b/hw/arm/fby35.c index e61a6438fe..3e036cfd2b 100644 --- a/hw/arm/fby35.c +++ b/hw/arm/fby35.c @@ -10,7 +10,7 @@ #include "qapi/error.h" #include "system/system.h" #include "system/block-backend.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-clock.h" #include "hw/arm/aspeed_soc.h" #include "hw/arm/boot.h" diff --git a/hw/arm/fsl-imx6.c b/hw/arm/fsl-imx6.c index f3a60022d8..50b34139fa 100644 --- a/hw/arm/fsl-imx6.c +++ b/hw/arm/fsl-imx6.c @@ -24,7 +24,7 @@ #include "hw/arm/fsl-imx6.h" #include "hw/misc/unimp.h" #include "hw/usb/imx-usb-phy.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "system/system.h" #include "chardev/char.h" diff --git a/hw/arm/fsl-imx6ul.c b/hw/arm/fsl-imx6ul.c index 883c7fc534..225e179126 100644 --- a/hw/arm/fsl-imx6ul.c +++ b/hw/arm/fsl-imx6ul.c @@ -21,7 +21,7 @@ #include "hw/arm/fsl-imx6ul.h" #include "hw/misc/unimp.h" #include "hw/usb/imx-usb-phy.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/system.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/arm/fsl-imx7.c b/hw/arm/fsl-imx7.c index 02f7602077..9a230d222f 100644 --- a/hw/arm/fsl-imx7.c +++ b/hw/arm/fsl-imx7.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "hw/arm/fsl-imx7.h" #include "hw/misc/unimp.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/system.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/arm/fsl-imx8mp.c b/hw/arm/fsl-imx8mp.c index ee6f3e42d2..79f9142777 100644 --- a/hw/arm/fsl-imx8mp.c +++ b/hw/arm/fsl-imx8mp.c @@ -13,7 +13,7 @@ #include "hw/arm/bsa.h" #include "hw/arm/fsl-imx8mp.h" #include "hw/misc/unimp.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/kvm.h" #include "system/system.h" #include "target/arm/cpu.h" diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c index bd60ab2689..82fa964711 100644 --- a/hw/arm/highbank.c +++ b/hw/arm/highbank.c @@ -28,7 +28,7 @@ #include "net/net.h" #include "system/runstate.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/error-report.h" #include "hw/char/pl011.h" #include "hw/ide/ahci-sysbus.h" diff --git a/hw/arm/imx25_pdk.c b/hw/arm/imx25_pdk.c index 71a4606203..21860ed14d 100644 --- a/hw/arm/imx25_pdk.c +++ b/hw/arm/imx25_pdk.c @@ -29,7 +29,7 @@ #include "hw/arm/fsl-imx25.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/error-report.h" #include "system/qtest.h" #include "hw/i2c/i2c.h" diff --git a/hw/arm/imx8mp-evk.c b/hw/arm/imx8mp-evk.c index 44e0601967..ed8c52e1bd 100644 --- a/hw/arm/imx8mp-evk.c +++ b/hw/arm/imx8mp-evk.c @@ -11,7 +11,7 @@ #include "hw/arm/boot.h" #include "hw/arm/fsl-imx8mp.h" #include "hw/arm/machines-qom.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "system/kvm.h" #include "system/qtest.h" diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index b030710b29..436fcdd510 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -11,7 +11,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "hw/misc/arm_integrator_debug.h" diff --git a/hw/arm/kzm.c b/hw/arm/kzm.c index b446dc1547..168ecf35d0 100644 --- a/hw/arm/kzm.c +++ b/hw/arm/kzm.c @@ -18,7 +18,7 @@ #include "hw/arm/fsl-imx31.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/error-report.h" #include "system/address-spaces.h" #include "net/net.h" diff --git a/hw/arm/max78000fthr.c b/hw/arm/max78000fthr.c index c4f6b5b1b0..e4ceb7efcd 100644 --- a/hw/arm/max78000fthr.c +++ b/hw/arm/max78000fthr.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/qdev-clock.h" #include "qemu/error-report.h" diff --git a/hw/arm/mcimx6ul-evk.c b/hw/arm/mcimx6ul-evk.c index f47a265650..5fe6526ba0 100644 --- a/hw/arm/mcimx6ul-evk.c +++ b/hw/arm/mcimx6ul-evk.c @@ -15,7 +15,7 @@ #include "hw/arm/fsl-imx6ul.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "qemu/error-report.h" #include "system/qtest.h" diff --git a/hw/arm/mcimx7d-sabre.c b/hw/arm/mcimx7d-sabre.c index fc8f35c581..b1b56b920d 100644 --- a/hw/arm/mcimx7d-sabre.c +++ b/hw/arm/mcimx7d-sabre.c @@ -17,7 +17,7 @@ #include "hw/arm/fsl-imx7.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "qemu/error-report.h" #include "system/qtest.h" diff --git a/hw/arm/microbit.c b/hw/arm/microbit.c index 0f3161fd93..cd035fffc7 100644 --- a/hw/arm/microbit.c +++ b/hw/arm/microbit.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "system/system.h" diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index 55dd68c57e..3188caf222 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -54,7 +54,7 @@ #include "hw/arm/armv7m.h" #include "hw/arm/machines-qom.h" #include "hw/or-irq.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/address-spaces.h" #include "system/system.h" #include "system/reset.h" diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c index fa4b200577..bf5e07019f 100644 --- a/hw/arm/mps2.c +++ b/hw/arm/mps2.c @@ -33,7 +33,7 @@ #include "hw/arm/armv7m.h" #include "hw/arm/machines-qom.h" #include "hw/or-irq.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/address-spaces.h" #include "system/system.h" #include "hw/qdev-properties.h" diff --git a/hw/arm/mps3r.c b/hw/arm/mps3r.c index fcb8777caf..b63002f483 100644 --- a/hw/arm/mps3r.c +++ b/hw/arm/mps3r.c @@ -31,7 +31,7 @@ #include "system/address-spaces.h" #include "cpu.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/or-irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" diff --git a/hw/arm/msf2-som.c b/hw/arm/msf2-som.c index c26feccb15..78d98c4a40 100644 --- a/hw/arm/msf2-som.c +++ b/hw/arm/msf2-som.c @@ -29,7 +29,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/musca.c b/hw/arm/musca.c index a3494c96bf..7b30d9bd44 100644 --- a/hw/arm/musca.c +++ b/hw/arm/musca.c @@ -27,7 +27,7 @@ #include "hw/arm/boot.h" #include "hw/arm/armsse.h" #include "hw/arm/machines-qom.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/pl011.h" #include "hw/core/split-irq.h" #include "hw/misc/tz-mpc.h" diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index 675707691c..3e62454096 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -18,7 +18,7 @@ #include "hw/arm/machines-qom.h" #include "net/net.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "qemu/timer.h" #include "hw/ptimer.h" diff --git a/hw/arm/netduino2.c b/hw/arm/netduino2.c index bce0d6f87a..1657612fe7 100644 --- a/hw/arm/netduino2.c +++ b/hw/arm/netduino2.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/qdev-clock.h" #include "qemu/error-report.h" diff --git a/hw/arm/netduinoplus2.c b/hw/arm/netduinoplus2.c index 8594081fe4..746a3deef8 100644 --- a/hw/arm/netduinoplus2.c +++ b/hw/arm/netduinoplus2.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/qdev-clock.h" #include "qemu/error-report.h" diff --git a/hw/arm/npcm8xx.c b/hw/arm/npcm8xx.c index a276fea698..3ad7643b4b 100644 --- a/hw/arm/npcm8xx.c +++ b/hw/arm/npcm8xx.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/arm/boot.h" #include "hw/arm/bsa.h" #include "hw/arm/npcm8xx.h" diff --git a/hw/arm/npcm8xx_boards.c b/hw/arm/npcm8xx_boards.c index b179eadef5..f775b32402 100644 --- a/hw/arm/npcm8xx_boards.c +++ b/hw/arm/npcm8xx_boards.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "chardev/char.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/arm/npcm8xx.h" #include "hw/arm/machines-qom.h" #include "hw/core/cpu.h" diff --git a/hw/arm/olimex-stm32-h405.c b/hw/arm/olimex-stm32-h405.c index c5f6038333..d15545ff07 100644 --- a/hw/arm/olimex-stm32-h405.c +++ b/hw/arm/olimex-stm32-h405.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/qdev-clock.h" #include "qemu/error-report.h" diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c index 730525be2d..d858dab325 100644 --- a/hw/arm/omap_sx1.c +++ b/hw/arm/omap_sx1.c @@ -30,7 +30,7 @@ #include "qapi/error.h" #include "ui/console.h" #include "hw/arm/omap.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "hw/block/flash.h" diff --git a/hw/arm/orangepi.c b/hw/arm/orangepi.c index 3e237e78fa..c0dd32f13c 100644 --- a/hw/arm/orangepi.c +++ b/hw/arm/orangepi.c @@ -22,7 +22,7 @@ #include "system/address-spaces.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/arm/allwinner-h3.h" #include "hw/arm/boot.h" diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c index 81d2fa1b67..910c18213a 100644 --- a/hw/arm/raspi.c +++ b/hw/arm/raspi.c @@ -22,7 +22,7 @@ #include "hw/arm/raspi_platform.h" #include "hw/registerfields.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/raspi4b.c b/hw/arm/raspi4b.c index 0422ae0f00..058df2c4c9 100644 --- a/hw/arm/raspi4b.c +++ b/hw/arm/raspi4b.c @@ -17,7 +17,7 @@ #include "hw/registerfields.h" #include "qemu/error-report.h" #include "system/device_tree.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/arm/boot.h" #include "qom/object.h" diff --git a/hw/arm/realview.c b/hw/arm/realview.c index d8327a50d2..97008490f6 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -21,7 +21,7 @@ #include "hw/qdev-core.h" #include "net/net.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i2c/i2c.h" #include "qemu/error-report.h" #include "hw/char/pl011.h" diff --git a/hw/arm/sabrelite.c b/hw/arm/sabrelite.c index 5b4ab7d77a..99cbd5e2fe 100644 --- a/hw/arm/sabrelite.c +++ b/hw/arm/sabrelite.c @@ -15,7 +15,7 @@ #include "hw/arm/fsl-imx6.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "qemu/error-report.h" #include "system/qtest.h" diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c index 3ba69d37d7..32d4c52bf5 100644 --- a/hw/arm/sbsa-ref.c +++ b/hw/arm/sbsa-ref.c @@ -37,7 +37,7 @@ #include "hw/arm/smmuv3.h" #include "hw/arm/machines-qom.h" #include "hw/block/flash.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/ide/ide-bus.h" #include "hw/ide/ahci-sysbus.h" #include "hw/intc/arm_gicv3_common.h" diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index 8113bbd5d8..d1cbf43777 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -19,7 +19,7 @@ #include "qemu/timer.h" #include "hw/i2c/i2c.h" #include "net/net.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/log.h" #include "system/address-spaces.h" #include "system/system.h" diff --git a/hw/arm/stm32vldiscovery.c b/hw/arm/stm32vldiscovery.c index c11029f8bd..4843c5565b 100644 --- a/hw/arm/stm32vldiscovery.c +++ b/hw/arm/stm32vldiscovery.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/qdev-clock.h" #include "qemu/error-report.h" diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index c3c99a2da6..dd1047f6c6 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -20,7 +20,7 @@ #include "hw/i2c/i2c.h" #include "hw/i2c/arm_sbcon_i2c.h" #include "hw/irq.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/block/flash.h" #include "qemu/error-report.h" #include "hw/char/pl011.h" diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index 3492e03a65..2f61ad0dd6 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -32,7 +32,7 @@ #include "hw/i2c/i2c.h" #include "net/net.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/block/flash.h" #include "system/device_tree.h" diff --git a/hw/arm/xen-pvh.c b/hw/arm/xen-pvh.c index 86a0296616..10cac28a91 100644 --- a/hw/arm/xen-pvh.c +++ b/hw/arm/xen-pvh.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" #include "qapi/qapi-commands-migration.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/system.h" #include "hw/xen/xen-pvh-common.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c index c82edd3bed..a6dc644d0b 100644 --- a/hw/arm/xilinx_zynq.c +++ b/hw/arm/xilinx_zynq.c @@ -23,7 +23,7 @@ #include "hw/arm/machines-qom.h" #include "net/net.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/block/flash.h" #include "hw/loader.h" #include "hw/adc/zynq-xadc.h" diff --git a/hw/arm/xlnx-versal-virt.c b/hw/arm/xlnx-versal-virt.c index 5e05521a57..e82ac8e353 100644 --- a/hw/arm/xlnx-versal-virt.c +++ b/hw/arm/xlnx-versal-virt.c @@ -16,7 +16,7 @@ #include "system/device_tree.h" #include "system/address-spaces.h" #include "hw/block/flash.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/sysbus.h" #include "hw/arm/fdt.h" #include "hw/arm/xlnx-versal.h" diff --git a/hw/arm/xlnx-zcu102.c b/hw/arm/xlnx-zcu102.c index 06a3d7dfe7..3ba2736bab 100644 --- a/hw/arm/xlnx-zcu102.c +++ b/hw/arm/xlnx-zcu102.c @@ -20,7 +20,7 @@ #include "hw/arm/xlnx-zynqmp.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/error-report.h" #include "qemu/log.h" #include "system/device_tree.h" diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c index ffed6e5126..5f0e34ccec 100644 --- a/hw/arm/xlnx-zynqmp.c +++ b/hw/arm/xlnx-zynqmp.c @@ -21,7 +21,7 @@ #include "hw/arm/xlnx-zynqmp.h" #include "hw/intc/arm_gic_common.h" #include "hw/misc/unimp.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/system.h" #include "target/arm/cpu-qom.h" #include "target/arm/gtimer.h" diff --git a/hw/avr/boot.h b/hw/avr/boot.h index 684d553322..9eed205559 100644 --- a/hw/avr/boot.h +++ b/hw/avr/boot.h @@ -11,7 +11,7 @@ #ifndef HW_AVR_BOOT_H #define HW_AVR_BOOT_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "cpu.h" /** diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c index 8c306c89e4..fb8421184d 100644 --- a/hw/core/cpu-common.c +++ b/hw/core/cpu-common.c @@ -31,7 +31,7 @@ #include "exec/log.h" #include "exec/gdbstub.h" #include "system/tcg.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "trace.h" #ifdef CONFIG_PLUGIN diff --git a/hw/core/generic-loader.c b/hw/core/generic-loader.c index 433efb7387..be4fe867e4 100644 --- a/hw/core/generic-loader.c +++ b/hw/core/generic-loader.c @@ -33,7 +33,7 @@ #include "qemu/osdep.h" #include "system/dma.h" #include "system/reset.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/qdev-properties.h" #include "qapi/error.h" diff --git a/hw/core/guest-loader.c b/hw/core/guest-loader.c index 618455e556..07c3646404 100644 --- a/hw/core/guest-loader.c +++ b/hw/core/guest-loader.c @@ -33,7 +33,7 @@ #include "qemu/module.h" #include "guest-loader.h" #include "system/device_tree.h" -#include "hw/boards.h" +#include "hw/core/boards.h" /* * Insert some FDT nodes for the loaded blob. diff --git a/hw/core/loader.c b/hw/core/loader.c index 590c5b02aa..385730e8ef 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -61,7 +61,7 @@ #include "hw/loader.h" #include "hw/nvram/fw_cfg.h" #include "system/memory.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/cutils.h" #include "system/runstate.h" #include "tcg/debuginfo.h" diff --git a/hw/core/machine-hmp-cmds.c b/hw/core/machine-hmp-cmds.c index 74a56600be..46846f741a 100644 --- a/hw/core/machine-hmp-cmds.c +++ b/hw/core/machine-hmp-cmds.c @@ -24,7 +24,7 @@ #include "qapi/string-output-visitor.h" #include "qemu/error-report.h" #include "system/numa.h" -#include "hw/boards.h" +#include "hw/core/boards.h" void hmp_info_cpus(Monitor *mon, const QDict *qdict) { diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index 28dfd3e15b..d23466177d 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/acpi/vmgenid.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/intc/intc.h" #include "hw/mem/memory-device.h" #include "qapi/error.h" diff --git a/hw/core/machine-smp.c b/hw/core/machine-smp.c index 0be0ac044c..189c70015f 100644 --- a/hw/core/machine-smp.c +++ b/hw/core/machine-smp.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/core/machine.c b/hw/core/machine.c index 27372bb01e..1106f86bf5 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -14,7 +14,7 @@ #include "qemu/units.h" #include "qemu/accel.h" #include "system/replay.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "qemu/error-report.h" #include "qapi/error.h" diff --git a/hw/core/null-machine.c b/hw/core/null-machine.c index 67b769bd3e..c52b022d3a 100644 --- a/hw/core/null-machine.c +++ b/hw/core/null-machine.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/address-spaces.h" #include "hw/core/cpu.h" #include "hw/arm/machines-qom.h" diff --git a/hw/core/numa.c b/hw/core/numa.c index 218576f745..fa78dacb6b 100644 --- a/hw/core/numa.c +++ b/hw/core/numa.c @@ -35,7 +35,7 @@ #include "system/qtest.h" #include "hw/core/cpu.h" #include "hw/mem/pc-dimm.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/mem/memory-device.h" #include "qemu/option.h" #include "qemu/config-file.h" diff --git a/hw/core/qdev-hotplug.c b/hw/core/qdev-hotplug.c index ff176dc1bb..d2c39806c5 100644 --- a/hw/core/qdev-hotplug.c +++ b/hw/core/qdev-hotplug.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/qdev-core.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qapi/error.h" HotplugHandler *qdev_get_machine_hotplug_handler(DeviceState *dev) diff --git a/hw/core/qdev.c b/hw/core/qdev.c index fab42a7270..423a3a1d66 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -34,7 +34,7 @@ #include "qemu/option.h" #include "hw/irq.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/sysbus.h" #include "hw/qdev-clock.h" #include "migration/vmstate.h" diff --git a/hw/cpu/core.c b/hw/cpu/core.c index 5cb2e9a7f5..26e488f3d8 100644 --- a/hw/cpu/core.c +++ b/hw/cpu/core.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/cpu/core.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/cxl/cxl-host.c b/hw/cxl/cxl-host.c index 0d891c651d..f3479b1991 100644 --- a/hw/cxl/cxl-host.c +++ b/hw/cxl/cxl-host.c @@ -11,7 +11,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "system/qtest.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qapi/qapi-visit-machine.h" #include "hw/cxl/cxl.h" diff --git a/hw/hyperv/hv-balloon.c b/hw/hyperv/hv-balloon.c index 2d6d7db4ee..ac024accfc 100644 --- a/hw/hyperv/hv-balloon.c +++ b/hw/hyperv/hv-balloon.c @@ -13,7 +13,7 @@ #include "system/address-spaces.h" #include "exec/cpu-common.h" #include "system/ramblock.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/hyperv/dynmem-proto.h" #include "hw/hyperv/hv-balloon.h" #include "hw/hyperv/vmbus.h" diff --git a/hw/i2c/pm_smbus.c b/hw/i2c/pm_smbus.c index 4e685fd26e..ead53d2724 100644 --- a/hw/i2c/pm_smbus.c +++ b/hw/i2c/pm_smbus.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i2c/pm_smbus.h" #include "hw/i2c/smbus_master.h" #include "migration/vmstate.h" diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c index 26e211b31a..ce3723e148 100644 --- a/hw/i2c/smbus_eeprom.c +++ b/hw/i2c/smbus_eeprom.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i2c/i2c.h" #include "hw/i2c/smbus_slave.h" #include "hw/qdev-properties.h" diff --git a/hw/i386/acpi-common.h b/hw/i386/acpi-common.h index e305aaac15..57ef024cd3 100644 --- a/hw/i386/acpi-common.h +++ b/hw/i386/acpi-common.h @@ -1,7 +1,7 @@ #ifndef HW_I386_ACPI_COMMON_H #define HW_I386_ACPI_COMMON_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/acpi/bios-linker-loader.h" #include "hw/i386/x86.h" diff --git a/hw/i386/fw_cfg.h b/hw/i386/fw_cfg.h index e560fd7be8..e7e70ff237 100644 --- a/hw/i386/fw_cfg.h +++ b/hw/i386/fw_cfg.h @@ -9,7 +9,7 @@ #ifndef HW_I386_FW_CFG_H #define HW_I386_FW_CFG_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i386/pc.h" #include "hw/nvram/fw_cfg.h" diff --git a/hw/i386/vapic.c b/hw/i386/vapic.c index f1089f0a7c..3a4254638b 100644 --- a/hw/i386/vapic.c +++ b/hw/i386/vapic.c @@ -20,7 +20,7 @@ #include "system/address-spaces.h" #include "hw/i386/apic_internal.h" #include "hw/sysbus.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c index 6d93457c52..32e02e1eeb 100644 --- a/hw/i386/vmport.c +++ b/hw/i386/vmport.c @@ -32,7 +32,7 @@ #include "hw/isa/isa.h" #include "hw/i386/vmport.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/system.h" #include "system/hw_accel.h" #include "system/qtest.h" diff --git a/hw/i386/xen/xen-pvh.c b/hw/i386/xen/xen-pvh.c index 067f73e977..ab90c83a83 100644 --- a/hw/i386/xen/xen-pvh.c +++ b/hw/i386/xen/xen-pvh.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/system.h" #include "hw/xen/arch_hvm.h" #include diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c index ec9e978b0b..83e1bc2d75 100644 --- a/hw/intc/apic_common.c +++ b/hw/intc/apic_common.c @@ -27,7 +27,7 @@ #include "hw/i386/apic_internal.h" #include "hw/intc/kvm_irqcount.h" #include "trace.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/kvm.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" diff --git a/hw/intc/loongarch_ipi.c b/hw/intc/loongarch_ipi.c index fc8005c944..2a4557a8ba 100644 --- a/hw/intc/loongarch_ipi.c +++ b/hw/intc/loongarch_ipi.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qapi/error.h" #include "hw/intc/loongarch_ipi.h" #include "hw/qdev-properties.h" diff --git a/hw/intc/loongarch_pic_kvm.c b/hw/intc/loongarch_pic_kvm.c index 6cfddf4520..7a8b4e7b66 100644 --- a/hw/intc/loongarch_pic_kvm.c +++ b/hw/intc/loongarch_pic_kvm.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/intc/loongarch_pch_pic.h" #include "hw/loongarch/virt.h" #include "system/kvm.h" diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c index a2041e7022..a559664c40 100644 --- a/hw/intc/riscv_aplic.c +++ b/hw/intc/riscv_aplic.c @@ -25,7 +25,7 @@ #include "system/address-spaces.h" #include "hw/sysbus.h" #include "hw/pci/msi.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/intc/riscv_aplic.h" #include "hw/irq.h" diff --git a/hw/intc/riscv_imsic.c b/hw/intc/riscv_imsic.c index 6174e1a05d..513e38d9c1 100644 --- a/hw/intc/riscv_imsic.c +++ b/hw/intc/riscv_imsic.c @@ -25,7 +25,7 @@ #include "system/address-spaces.h" #include "hw/sysbus.h" #include "hw/pci/msi.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/intc/riscv_imsic.h" #include "hw/irq.h" diff --git a/hw/loongarch/fw_cfg.h b/hw/loongarch/fw_cfg.h index 27ee68286e..809b06c545 100644 --- a/hw/loongarch/fw_cfg.h +++ b/hw/loongarch/fw_cfg.h @@ -8,7 +8,7 @@ #ifndef HW_LOONGARCH_FW_CFG_H #define HW_LOONGARCH_FW_CFG_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/nvram/fw_cfg.h" FWCfgState *virt_fw_cfg_init(ram_addr_t ram_size, MachineState *ms); diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index 49434ad182..a78a9bc03d 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -9,7 +9,7 @@ #include "qemu/datadir.h" #include "qapi/error.h" #include "exec/target_page.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "system/kvm.h" #include "system/tcg.h" diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c index ff21d7779e..f67611ba0b 100644 --- a/hw/m68k/an5206.c +++ b/hw/m68k/an5206.c @@ -10,7 +10,7 @@ #include "qapi/error.h" #include "cpu.h" #include "hw/m68k/mcf.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "elf.h" #include "qemu/error-report.h" diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c index a25e782403..6359aa81d0 100644 --- a/hw/m68k/mcf5206.c +++ b/hw/m68k/mcf5206.c @@ -11,7 +11,7 @@ #include "qemu/log.h" #include "cpu.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "hw/m68k/mcf.h" #include "qemu/timer.h" diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index 4a585b231d..c1067435bf 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -29,7 +29,7 @@ #include "system/system.h" #include "system/qtest.h" #include "net/net.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/sysbus.h" #include "elf.h" diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index cfb2b319e5..d7c460bcd4 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -17,7 +17,7 @@ #include "system/qtest.h" #include "hw/irq.h" #include "hw/m68k/next-cube.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/scsi/esp.h" #include "hw/sysbus.h" diff --git a/hw/m68k/q800-glue.c b/hw/m68k/q800-glue.c index 36de67c328..d663d124fc 100644 --- a/hw/m68k/q800-glue.c +++ b/hw/m68k/q800-glue.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "cpu.h" #include "hw/m68k/q800-glue.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "hw/nmi.h" #include "hw/qdev-properties.h" diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index b8676feb41..1aaaada346 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -27,7 +27,7 @@ #include "exec/target_page.h" #include "system/system.h" #include "cpu.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/or-irq.h" #include "elf.h" #include "hw/loader.h" diff --git a/hw/m68k/virt.c b/hw/m68k/virt.c index 3f65d91556..6f2b7bb5a0 100644 --- a/hw/m68k/virt.c +++ b/hw/m68k/virt.c @@ -13,7 +13,7 @@ #include "exec/target_page.h" #include "system/system.h" #include "cpu.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "elf.h" #include "hw/loader.h" diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c index 1a432e9bd2..9cf82b84cf 100644 --- a/hw/mem/memory-device.c +++ b/hw/mem/memory-device.c @@ -13,7 +13,7 @@ #include "qemu/error-report.h" #include "hw/mem/memory-device.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/range.h" #include "hw/virtio/vhost.h" #include "system/kvm.h" diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index f701d5b5f9..33e5a376ff 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/mem/pc-dimm.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c index ec38107f50..39eb2386e8 100644 --- a/hw/microblaze/boot.c +++ b/hw/microblaze/boot.c @@ -33,7 +33,7 @@ #include "qemu/guest-random.h" #include "system/device_tree.h" #include "system/reset.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "elf.h" #include "qemu/cutils.h" diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c index 6e923c49cf..f5b9b2e890 100644 --- a/hw/microblaze/petalogix_ml605_mmu.c +++ b/hw/microblaze/petalogix_ml605_mmu.c @@ -33,7 +33,7 @@ #include "net/net.h" #include "hw/block/flash.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "hw/qdev-properties.h" #include "system/address-spaces.h" diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/petalogix_s3adsp1800_mmu.c index e8d0ddfdf8..266ecf9e8a 100644 --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c @@ -31,7 +31,7 @@ #include "net/net.h" #include "hw/block/flash.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/misc/unimp.h" #include "system/address-spaces.h" #include "hw/char/xilinx_uartlite.h" diff --git a/hw/microblaze/xlnx-zynqmp-pmu.c b/hw/microblaze/xlnx-zynqmp-pmu.c index e909802bb7..f4c55589b7 100644 --- a/hw/microblaze/xlnx-zynqmp-pmu.c +++ b/hw/microblaze/xlnx-zynqmp-pmu.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "system/address-spaces.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "cpu.h" #include "boot.h" diff --git a/hw/mips/boston.c b/hw/mips/boston.c index 6a4fcdd9ca..dc9da0b040 100644 --- a/hw/mips/boston.c +++ b/hw/mips/boston.c @@ -21,7 +21,7 @@ #include "qemu/units.h" #include "elf.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "hw/ide/pci.h" #include "hw/ide/ahci-pci.h" diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c index 5fe40eee65..e777863703 100644 --- a/hw/mips/fuloong2e.c +++ b/hw/mips/fuloong2e.c @@ -25,7 +25,7 @@ #include "cpu.h" #include "hw/clock.h" #include "net/net.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i2c/smbus_eeprom.h" #include "hw/block/flash.h" #include "hw/mips/mips.h" diff --git a/hw/mips/fw_cfg.h b/hw/mips/fw_cfg.h index e317d5b9a3..8a42d98cdf 100644 --- a/hw/mips/fw_cfg.h +++ b/hw/mips/fw_cfg.h @@ -9,7 +9,7 @@ #ifndef HW_MIPS_FW_CFG_H #define HW_MIPS_FW_CFG_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/nvram/fw_cfg.h" /* Data for BIOS to identify machine */ diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c index 1d6bdc0091..1708cec3f8 100644 --- a/hw/mips/jazz.c +++ b/hw/mips/jazz.c @@ -33,7 +33,7 @@ #include "hw/isa/isa.h" #include "hw/block/fdc.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "net/net.h" #include "hw/scsi/esp.h" #include "hw/loader.h" diff --git a/hw/mips/malta.c b/hw/mips/malta.c index a4e2ea98ad..f39e56d279 100644 --- a/hw/mips/malta.c +++ b/hw/mips/malta.c @@ -34,7 +34,7 @@ #include "hw/isa/superio.h" #include "hw/char/serial-mm.h" #include "net/net.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i2c/smbus_eeprom.h" #include "hw/block/flash.h" #include "hw/mips/mips.h" diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index aa24050493..b696bf39e1 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -28,7 +28,7 @@ #include "system/dma.h" #include "system/reset.h" #include "system/address-spaces.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/nvram/fw_cfg.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c index b7d9cdd900..769107e835 100644 --- a/hw/openrisc/openrisc_sim.c +++ b/hw/openrisc/openrisc_sim.c @@ -23,7 +23,7 @@ #include "qapi/error.h" #include "cpu.h" #include "hw/irq.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "net/net.h" #include "hw/openrisc/boot.h" diff --git a/hw/openrisc/virt.c b/hw/openrisc/virt.c index a98071c936..3cfd1c0b5c 100644 --- a/hw/openrisc/virt.c +++ b/hw/openrisc/virt.c @@ -13,7 +13,7 @@ #include "cpu.h" #include "system/address-spaces.h" #include "hw/irq.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "hw/core/split-irq.h" #include "hw/openrisc/boot.h" diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expander_bridge.c index 1bcceddbc4..b3a5f16e22 100644 --- a/hw/pci-bridge/pci_expander_bridge.c +++ b/hw/pci-bridge/pci_expander_bridge.c @@ -24,7 +24,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "system/numa.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qom/object.h" enum BusType { PCI, PCIE, CXL }; diff --git a/hw/pci/pci.c b/hw/pci/pci.c index b1eba348e0..e03953813c 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -46,7 +46,7 @@ #include "hw/pci/msi.h" #include "hw/pci/msix.h" #include "hw/hotplug.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/nvram/fw_cfg.h" #include "qapi/error.h" #include "qemu/cutils.h" diff --git a/hw/ppc/amigaone.c b/hw/ppc/amigaone.c index 74a1fa3b63..3df4724a72 100644 --- a/hw/ppc/amigaone.c +++ b/hw/ppc/amigaone.c @@ -14,7 +14,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "hw/ppc/ppc.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/pci-host/articia.h" #include "hw/isa/vt82c686.h" diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h index 00f490519c..cda539bda1 100644 --- a/hw/ppc/e500.h +++ b/hw/ppc/e500.h @@ -1,7 +1,7 @@ #ifndef PPCE500_H #define PPCE500_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/platform-bus.h" #include "qom/object.h" diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 739f1af3e1..bdc6c7ed7f 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -54,7 +54,7 @@ #include "hw/ppc/ppc.h" #include "hw/qdev-properties.h" #include "hw/nvram/mac_nvram.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/pci-host/uninorth.h" #include "hw/input/adb.h" #include "hw/ppc/mac_dbdma.h" diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index cd2bb46442..8d35080b9d 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -31,7 +31,7 @@ #include "exec/target_page.h" #include "hw/ppc/ppc.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/input/adb.h" #include "system/system.h" #include "net/net.h" diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index 8ce185de3e..3b48a54e7a 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -24,7 +24,7 @@ #include "system/reset.h" #include "system/runstate.h" #include "system/qtest.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/fw-path-provider.h" #include "elf.h" diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index 7e739a2114..824dd91ed5 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -18,7 +18,7 @@ #include "exec/page-protection.h" #include "net/net.h" #include "hw/pci/pci.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/kvm.h" #include "system/device_tree.h" #include "hw/loader.h" diff --git a/hw/ppc/ppe42_machine.c b/hw/ppc/ppe42_machine.c index f14a91b4e4..6c9bc89e2d 100644 --- a/hw/ppc/ppe42_machine.c +++ b/hw/ppc/ppe42_machine.c @@ -10,7 +10,7 @@ #include "qemu/units.h" #include "qemu/error-report.h" #include "system/address-spaces.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/ppc/ppc.h" #include "system/system.h" #include "system/reset.h" diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index 5654a60c59..0d5e1f604e 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -31,7 +31,7 @@ #include "hw/pci/pci.h" #include "hw/pci/pci_host.h" #include "hw/ppc/ppc.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/log.h" diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c index 038b98d0b8..992bfe39a3 100644 --- a/hw/ppc/sam460ex.c +++ b/hw/ppc/sam460ex.c @@ -16,7 +16,7 @@ #include "qemu/datadir.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/kvm.h" #include "kvm_ppc.h" #include "system/device_tree.h" diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index 43a6d505a8..8221a01639 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -32,7 +32,7 @@ #include "hw/block/flash.h" #include "system/system.h" #include "system/reset.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/device_tree.h" #include "hw/loader.h" #include "elf.h" diff --git a/hw/remote/vfio-user-obj.c b/hw/remote/vfio-user-obj.c index 216b4876e2..13cda2f481 100644 --- a/hw/remote/vfio-user-obj.c +++ b/hw/remote/vfio-user-obj.c @@ -44,7 +44,7 @@ #include "qemu/error-report.h" #include "trace.h" #include "system/runstate.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/remote/machine.h" #include "qapi/error.h" #include "qapi/qapi-visit-sockets.h" diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c index 75f34287ff..4f207dee28 100644 --- a/hw/riscv/boot.c +++ b/hw/riscv/boot.c @@ -22,7 +22,7 @@ #include "qemu/units.h" #include "qemu/error-report.h" #include "exec/cpu-defs.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/riscv/boot.h" #include "hw/riscv/boot_opensbi.h" diff --git a/hw/riscv/microblaze-v-generic.c b/hw/riscv/microblaze-v-generic.c index e863c50cbc..8a461a0dd5 100644 --- a/hw/riscv/microblaze-v-generic.c +++ b/hw/riscv/microblaze-v-generic.c @@ -20,7 +20,7 @@ #include "hw/sysbus.h" #include "system/system.h" #include "net/net.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "system/address-spaces.h" #include "hw/char/xilinx_uartlite.h" diff --git a/hw/riscv/microchip_pfsoc.c b/hw/riscv/microchip_pfsoc.c index a17f62cd08..4398f7b182 100644 --- a/hw/riscv/microchip_pfsoc.c +++ b/hw/riscv/microchip_pfsoc.c @@ -40,7 +40,7 @@ #include "qemu/cutils.h" #include "qapi/error.h" #include "qapi/visitor.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/sysbus.h" #include "chardev/char.h" diff --git a/hw/riscv/numa.c b/hw/riscv/numa.c index 7a7b012007..726df2daf1 100644 --- a/hw/riscv/numa.c +++ b/hw/riscv/numa.c @@ -20,7 +20,7 @@ #include "qemu/units.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/riscv/numa.h" #include "system/device_tree.h" diff --git a/hw/riscv/opentitan.c b/hw/riscv/opentitan.c index d369a8a7dc..309125e854 100644 --- a/hw/riscv/opentitan.c +++ b/hw/riscv/opentitan.c @@ -23,7 +23,7 @@ #include "hw/riscv/opentitan.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/misc/unimp.h" #include "hw/riscv/boot.h" #include "qemu/units.h" diff --git a/hw/riscv/shakti_c.c b/hw/riscv/shakti_c.c index 3e7f441172..d309ea2e39 100644 --- a/hw/riscv/shakti_c.c +++ b/hw/riscv/shakti_c.c @@ -17,7 +17,7 @@ */ #include "qemu/osdep.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/riscv/shakti_c.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c index 7baed1958e..abe411e305 100644 --- a/hw/riscv/sifive_e.c +++ b/hw/riscv/sifive_e.c @@ -32,7 +32,7 @@ #include "qemu/cutils.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/sysbus.h" #include "hw/misc/unimp.h" diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index a7492aa27a..6839a2635e 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -39,7 +39,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "qapi/visitor.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "hw/loader.h" #include "hw/sysbus.h" diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c index b0bab3fe00..6aa688acf3 100644 --- a/hw/riscv/spike.c +++ b/hw/riscv/spike.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/sysbus.h" #include "target/riscv/cpu.h" diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 17909206c7..45a845318e 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -23,7 +23,7 @@ #include "qemu/error-report.h" #include "qemu/guest-random.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/sysbus.h" #include "hw/qdev-properties.h" diff --git a/hw/riscv/xiangshan_kmh.c b/hw/riscv/xiangshan_kmh.c index a95fd6174f..e831954cb3 100644 --- a/hw/riscv/xiangshan_kmh.c +++ b/hw/riscv/xiangshan_kmh.c @@ -32,7 +32,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "system/address-spaces.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "hw/intc/riscv_aclint.h" #include "hw/intc/riscv_aplic.h" diff --git a/hw/rx/rx-gdbsim.c b/hw/rx/rx-gdbsim.c index ed91c63178..1a33082857 100644 --- a/hw/rx/rx-gdbsim.c +++ b/hw/rx/rx-gdbsim.c @@ -27,7 +27,7 @@ #include "system/qtest.h" #include "system/device_tree.h" #include "system/reset.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qom/object.h" /* Same address of GDB integrated simulator */ diff --git a/hw/s390x/cpu-topology.c b/hw/s390x/cpu-topology.c index b513f8936e..9182ddb628 100644 --- a/hw/s390x/cpu-topology.c +++ b/hw/s390x/cpu-topology.c @@ -19,7 +19,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "target/s390x/cpu.h" #include "hw/s390x/s390-virtio-ccw.h" #include "hw/s390x/cpu-topology.h" diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 3843d2a850..f1c2af15f7 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -21,7 +21,7 @@ #include "elf.h" #include "hw/loader.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/s390x/virtio-ccw.h" #include "hw/s390x/vfio-ccw.h" #include "hw/s390x/css.h" diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index 52820894fa..3eea2f0c9d 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -20,7 +20,7 @@ #include "hw/s390x/s390-pci-kvm.h" #include "hw/s390x/s390-pci-vfio.h" #include "hw/s390x/s390-virtio-ccw.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/pci/pci_bus.h" #include "hw/qdev-properties.h" #include "hw/pci/pci_bridge.h" diff --git a/hw/s390x/s390-pci-inst.c b/hw/s390x/s390-pci-inst.c index 5841dfc4fe..6b67c3c109 100644 --- a/hw/s390x/s390-pci-inst.c +++ b/hw/s390x/s390-pci-inst.c @@ -18,7 +18,7 @@ #include "qemu/error-report.h" #include "qemu/bswap.h" #include "system/hw_accel.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/pci/pci_device.h" #include "hw/s390x/s390-pci-inst.h" #include "hw/s390x/s390-pci-bus.h" diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 64b81345f1..29d95be2c6 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "system/confidential-guest-support.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/s390x/sclp.h" #include "hw/s390x/s390_flic.h" #include "virtio-ccw.h" diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c index c9a9c4bb37..b9c3983df1 100644 --- a/hw/s390x/sclp.c +++ b/hw/s390x/sclp.c @@ -15,7 +15,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/memory.h" #include "hw/s390x/sclp.h" #include "hw/s390x/event-facility.h" diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c index c29ee69069..bccd40f571 100644 --- a/hw/sh4/r2d.c +++ b/hw/sh4/r2d.c @@ -33,7 +33,7 @@ #include "system/reset.h" #include "system/runstate.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/pci/pci.h" #include "hw/qdev-properties.h" #include "net/net.h" diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c index 7558b2ad83..071c3b5e62 100644 --- a/hw/smbios/smbios.c +++ b/hw/smbios/smbios.c @@ -26,7 +26,7 @@ #include "qemu/uuid.h" #include "hw/firmware/smbios.h" #include "hw/loader.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/pci/pci_bus.h" #include "hw/pci/pci_device.h" #include "smbios_build.h" diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index 631c6113b5..367beecf19 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -37,7 +37,7 @@ #include "system/system.h" #include "system/qtest.h" #include "system/reset.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "elf.h" #include "trace.h" diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 53d7ae08ae..b0d2d6f8bc 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -40,7 +40,7 @@ #include "system/runstate.h" #include "system/system.h" #include "net/net.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/scsi/esp.h" #include "hw/nvram/sun_nvram.h" #include "hw/qdev-properties.h" diff --git a/hw/sparc64/niagara.c b/hw/sparc64/niagara.c index 1ffe92060a..334bec14ba 100644 --- a/hw/sparc64/niagara.c +++ b/hw/sparc64/niagara.c @@ -26,7 +26,7 @@ #include "block/block_int-common.h" #include "qemu/units.h" #include "cpu.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "hw/misc/unimp.h" #include "hw/loader.h" diff --git a/hw/sparc64/sparc64.c b/hw/sparc64/sparc64.c index 9cffc92aa3..ce7eded143 100644 --- a/hw/sparc64/sparc64.c +++ b/hw/sparc64/sparc64.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "cpu.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/sparc/sparc64.h" #include "qemu/timer.h" #include "system/reset.h" diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 82c3e7c855..961d599f48 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -46,7 +46,7 @@ #include "qemu/timer.h" #include "system/runstate.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/nvram/sun_nvram.h" #include "hw/nvram/chrp_nvram.h" #include "hw/sparc/sparc64.h" diff --git a/hw/tricore/tricore_testboard.c b/hw/tricore/tricore_testboard.c index 3facfdfd61..21b119712c 100644 --- a/hw/tricore/tricore_testboard.c +++ b/hw/tricore/tricore_testboard.c @@ -23,7 +23,7 @@ #include "qapi/error.h" #include "cpu.h" #include "net/net.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "elf.h" #include "hw/tricore/tricore.h" diff --git a/hw/uefi/ovmf-log.c b/hw/uefi/ovmf-log.c index 850ef21f88..3a24afd941 100644 --- a/hw/uefi/ovmf-log.c +++ b/hw/uefi/ovmf-log.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qemu/target-info-qapi.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i386/x86.h" #include "hw/arm/virt.h" #include "system/dma.h" diff --git a/hw/vfio/igd.c b/hw/vfio/igd.c index 4bfa2e0fcd..cff413c16f 100644 --- a/hw/vfio/igd.c +++ b/hw/vfio/igd.c @@ -15,7 +15,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "qapi/qmp/qerror.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/hw.h" #include "hw/nvram/fw_cfg.h" #include "pci.h" diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index 02cdd807d7..bcf6ab6443 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -21,7 +21,7 @@ #include "hw/virtio/virtio.h" #include "hw/mem/pc-dimm.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/balloon.h" #include "system/ramblock.h" #include "hw/virtio/virtio-balloon.h" diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c index 8123c6f83a..dd4100033f 100644 --- a/hw/virtio/virtio-iommu-pci.c +++ b/hw/virtio/virtio-iommu-pci.c @@ -16,7 +16,7 @@ #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/pci/pci_bus.h" #include "qom/object.h" diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c index ae7c13e33c..5d1d90edc5 100644 --- a/hw/virtio/virtio-mem.c +++ b/hw/virtio/virtio-mem.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "qapi/visitor.h" #include "migration/misc.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/acpi/acpi.h" #include "trace.h" diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 99cb30fe59..263e112a5c 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -20,7 +20,7 @@ #include "exec/memop.h" #include "standard-headers/linux/virtio_pci.h" #include "standard-headers/linux/virtio_ids.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/virtio/virtio.h" #include "migration/qemu-file-types.h" #include "hw/pci/pci.h" diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c index 62d33525ba..5da28cf72b 100644 --- a/hw/vmapple/vmapple.c +++ b/hw/vmapple/vmapple.c @@ -25,7 +25,7 @@ #include "qemu/option.h" #include "qemu/units.h" #include "monitor/qdev.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "hw/loader.h" #include "hw/qdev-properties.h" diff --git a/hw/xen/xen-hvm-common.c b/hw/xen/xen-hvm-common.c index b40ae0b3af..5d11b50db9 100644 --- a/hw/xen/xen-hvm-common.c +++ b/hw/xen/xen-hvm-common.c @@ -11,7 +11,7 @@ #include "hw/pci/pci_host.h" #include "hw/xen/xen-hvm-common.h" #include "hw/xen/xen-bus.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/xen/arch_hvm.h" #include "system/memory.h" #include "system/runstate.h" diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c index 5ed53f8943..da9a8e5213 100644 --- a/hw/xen/xen-legacy-backend.c +++ b/hw/xen/xen-legacy-backend.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "qemu/main-loop.h" #include "qapi/error.h" diff --git a/hw/xen/xen-pvh-common.c b/hw/xen/xen-pvh-common.c index b93ff80c85..c3fc501fe6 100644 --- a/hw/xen/xen-pvh-common.c +++ b/hw/xen/xen-pvh-common.c @@ -10,7 +10,7 @@ #include "qemu/error-report.h" #include "qemu/units.h" #include "qapi/visitor.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "system/tpm.h" #include "system/tpm_backend.h" diff --git a/hw/xenpv/xen_machine_pv.c b/hw/xenpv/xen_machine_pv.c index 99c02492ef..c406821c34 100644 --- a/hw/xenpv/xen_machine_pv.c +++ b/hw/xenpv/xen_machine_pv.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/xen/xen-legacy-backend.h" #include "hw/xen/xen-bus.h" #include "system/block-backend.h" diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c index 49d17e7bb2..37acc562d2 100644 --- a/hw/xtensa/sim.c +++ b/hw/xtensa/sim.c @@ -29,7 +29,7 @@ #include "qapi/error.h" #include "system/reset.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "elf.h" #include "system/memory.h" diff --git a/hw/xtensa/virt.c b/hw/xtensa/virt.c index b10866ccd8..b9e324c285 100644 --- a/hw/xtensa/virt.c +++ b/hw/xtensa/virt.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "system/reset.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/pci-host/gpex.h" #include "net/net.h" diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c index db3b015549..694456aa0a 100644 --- a/hw/xtensa/xtfpga.c +++ b/hw/xtensa/xtfpga.c @@ -30,7 +30,7 @@ #include "qapi/error.h" #include "cpu.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/loader.h" #include "hw/qdev-properties.h" #include "elf.h" diff --git a/include/hw/acpi/cpu.h b/include/hw/acpi/cpu.h index 32654dc274..95dc58b5ad 100644 --- a/include/hw/acpi/cpu.h +++ b/include/hw/acpi/cpu.h @@ -16,7 +16,7 @@ #include "hw/qdev-core.h" #include "hw/acpi/acpi.h" #include "hw/acpi/aml-build.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/hotplug.h" #define ACPI_CPU_HOTPLUG_REG_LEN 12 diff --git a/include/hw/arm/aspeed.h b/include/hw/arm/aspeed.h index 714bbd326c..a00238ed74 100644 --- a/include/hw/arm/aspeed.h +++ b/include/hw/arm/aspeed.h @@ -9,7 +9,7 @@ #ifndef ARM_ASPEED_H #define ARM_ASPEED_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qom/object.h" #include "hw/arm/aspeed_soc.h" diff --git a/include/hw/arm/machines-qom.h b/include/hw/arm/machines-qom.h index 3f64d5eb02..3ed39384e5 100644 --- a/include/hw/arm/machines-qom.h +++ b/include/hw/arm/machines-qom.h @@ -9,7 +9,7 @@ #ifndef HW_ARM_MACHINES_QOM_H #define HW_ARM_MACHINES_QOM_H -#include "hw/boards.h" +#include "hw/core/boards.h" #define TYPE_TARGET_ARM_MACHINE \ "target-info-arm-machine" diff --git a/include/hw/arm/npcm7xx.h b/include/hw/arm/npcm7xx.h index 56536565b7..eef7cc5332 100644 --- a/include/hw/arm/npcm7xx.h +++ b/include/hw/arm/npcm7xx.h @@ -16,7 +16,7 @@ #ifndef NPCM7XX_H #define NPCM7XX_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/adc/npcm7xx_adc.h" #include "hw/core/split-irq.h" #include "hw/cpu/a9mpcore.h" diff --git a/include/hw/arm/raspi_platform.h b/include/hw/arm/raspi_platform.h index 7bc4807fa5..c52b9e298d 100644 --- a/include/hw/arm/raspi_platform.h +++ b/include/hw/arm/raspi_platform.h @@ -28,7 +28,7 @@ #ifndef HW_ARM_RASPI_PLATFORM_H #define HW_ARM_RASPI_PLATFORM_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/arm/boot.h" /* Registered machine type (matches RPi Foundation bootloader and U-Boot) */ diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index c77a33f6df..8694aaa4e2 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -32,7 +32,7 @@ #include "exec/hwaddr.h" #include "qemu/notify.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/acpi/ghes.h" #include "hw/arm/boot.h" #include "hw/arm/bsa.h" diff --git a/include/hw/boards.h b/include/hw/core/boards.h similarity index 100% rename from include/hw/boards.h rename to include/hw/core/boards.h diff --git a/include/hw/cxl/cxl_host.h b/include/hw/cxl/cxl_host.h index cd3c368c86..21619bb748 100644 --- a/include/hw/cxl/cxl_host.h +++ b/include/hw/cxl/cxl_host.h @@ -8,7 +8,7 @@ */ #include "hw/cxl/cxl.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #ifndef CXL_HOST_H #define CXL_HOST_H diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h index e73d1e65de..6b9a506527 100644 --- a/include/hw/i386/microvm.h +++ b/include/hw/i386/microvm.h @@ -21,7 +21,7 @@ #include "exec/hwaddr.h" #include "qemu/notify.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i386/x86.h" #include "hw/acpi/acpi_dev_interface.h" #include "hw/pci-host/gpex.h" diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index e83157ab35..ade2da92ba 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -4,7 +4,7 @@ #include "qemu/notify.h" #include "qapi/qapi-types-common.h" #include "qemu/uuid.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/block/fdc.h" #include "hw/block/flash.h" #include "hw/i386/x86.h" diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h index 8755cad50a..0dffba95f9 100644 --- a/include/hw/i386/x86.h +++ b/include/hw/i386/x86.h @@ -20,7 +20,7 @@ #include "exec/hwaddr.h" #include "system/memory.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i386/topology.h" #include "hw/intc/ioapic.h" #include "hw/isa/isa.h" diff --git a/include/hw/loongarch/virt.h b/include/hw/loongarch/virt.h index 27b1755802..8a04dd8314 100644 --- a/include/hw/loongarch/virt.h +++ b/include/hw/loongarch/virt.h @@ -8,7 +8,7 @@ #ifndef HW_LOONGARCH_H #define HW_LOONGARCH_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/queue.h" #include "hw/block/flash.h" #include "hw/loongarch/boot.h" diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 9caaed9692..c92da2e2ac 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -23,7 +23,7 @@ #ifndef HW_Q800_H #define HW_Q800_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qom/object.h" #include "target/m68k/cpu-qom.h" #include "system/memory.h" diff --git a/include/hw/misc/lasi.h b/include/hw/misc/lasi.h index 0e95be1c32..5e40c6aebd 100644 --- a/include/hw/misc/lasi.h +++ b/include/hw/misc/lasi.h @@ -13,7 +13,7 @@ #define LASI_H #include "system/address-spaces.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/sysbus.h" #define TYPE_LASI_CHIP "lasi-chip" diff --git a/include/hw/openrisc/boot.h b/include/hw/openrisc/boot.h index 9b4d88072c..3c481bdea6 100644 --- a/include/hw/openrisc/boot.h +++ b/include/hw/openrisc/boot.h @@ -20,7 +20,7 @@ #define OPENRISC_BOOT_H #include "exec/cpu-defs.h" -#include "hw/boards.h" +#include "hw/core/boards.h" hwaddr openrisc_load_kernel(ram_addr_t ram_size, const char *kernel_filename, diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h index cbdddfc73c..a8c1968f28 100644 --- a/include/hw/ppc/pnv.h +++ b/include/hw/ppc/pnv.h @@ -21,7 +21,7 @@ #define PPC_PNV_H #include "cpu.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/sysbus.h" #include "hw/ipmi/ipmi.h" #include "hw/ppc/pnv_pnor.h" diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 28cf2723d8..5476ac7ce7 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -3,7 +3,7 @@ #include "qemu/units.h" #include "system/dma.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/ppc/spapr_drc.h" #include "hw/mem/pc-dimm.h" #include "hw/ppc/spapr_ovec.h" diff --git a/include/hw/ppc/spapr_numa.h b/include/hw/ppc/spapr_numa.h index 7cb3367400..e07edf2ee6 100644 --- a/include/hw/ppc/spapr_numa.h +++ b/include/hw/ppc/spapr_numa.h @@ -13,7 +13,7 @@ #ifndef HW_SPAPR_NUMA_H #define HW_SPAPR_NUMA_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/ppc/spapr.h" /* diff --git a/include/hw/remote/machine.h b/include/hw/remote/machine.h index ac32fda387..748b69c6fc 100644 --- a/include/hw/remote/machine.h +++ b/include/hw/remote/machine.h @@ -12,7 +12,7 @@ #define REMOTE_MACHINE_H #include "qom/object.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/pci-host/remote.h" #include "io/channel.h" #include "hw/remote/iohub.h" diff --git a/include/hw/riscv/microchip_pfsoc.h b/include/hw/riscv/microchip_pfsoc.h index 7ca9b976c1..a30b944afa 100644 --- a/include/hw/riscv/microchip_pfsoc.h +++ b/include/hw/riscv/microchip_pfsoc.h @@ -22,7 +22,7 @@ #ifndef HW_MICROCHIP_PFSOC_H #define HW_MICROCHIP_PFSOC_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/mchp_pfsoc_mmuart.h" #include "hw/cpu/cluster.h" #include "hw/dma/sifive_pdma.h" diff --git a/include/hw/riscv/numa.h b/include/hw/riscv/numa.h index 147f01619b..2d9c41ba81 100644 --- a/include/hw/riscv/numa.h +++ b/include/hw/riscv/numa.h @@ -19,7 +19,7 @@ #ifndef RISCV_NUMA_H #define RISCV_NUMA_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/sysbus.h" #include "system/numa.h" diff --git a/include/hw/riscv/opentitan.h b/include/hw/riscv/opentitan.h index 609473d07b..5b9016e1d8 100644 --- a/include/hw/riscv/opentitan.h +++ b/include/hw/riscv/opentitan.h @@ -24,7 +24,7 @@ #include "hw/char/ibex_uart.h" #include "hw/timer/ibex_timer.h" #include "hw/ssi/ibex_spi_host.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qom/object.h" #define TYPE_RISCV_IBEX_SOC "riscv.lowrisc.ibex.soc" diff --git a/include/hw/riscv/shakti_c.h b/include/hw/riscv/shakti_c.h index 539fe1156d..f90a3bca8d 100644 --- a/include/hw/riscv/shakti_c.h +++ b/include/hw/riscv/shakti_c.h @@ -20,7 +20,7 @@ #define HW_SHAKTI_C_H #include "hw/riscv/riscv_hart.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/char/shakti_uart.h" #define TYPE_RISCV_SHAKTI_SOC "riscv.shakti.cclass.soc" diff --git a/include/hw/riscv/sifive_e.h b/include/hw/riscv/sifive_e.h index 31180a680e..4cf902ebc0 100644 --- a/include/hw/riscv/sifive_e.h +++ b/include/hw/riscv/sifive_e.h @@ -23,7 +23,7 @@ #include "hw/riscv/sifive_cpu.h" #include "hw/gpio/sifive_gpio.h" #include "hw/misc/sifive_e_aon.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #define TYPE_RISCV_E_SOC "riscv.sifive.e.soc" #define RISCV_E_SOC(obj) \ diff --git a/include/hw/riscv/sifive_u.h b/include/hw/riscv/sifive_u.h index 0696f85942..e4c9860d50 100644 --- a/include/hw/riscv/sifive_u.h +++ b/include/hw/riscv/sifive_u.h @@ -19,7 +19,7 @@ #ifndef HW_SIFIVE_U_H #define HW_SIFIVE_U_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/cpu/cluster.h" #include "hw/dma/sifive_pdma.h" #include "hw/net/cadence_gem.h" diff --git a/include/hw/riscv/spike.h b/include/hw/riscv/spike.h index 0c2a223763..acd41e9058 100644 --- a/include/hw/riscv/spike.h +++ b/include/hw/riscv/spike.h @@ -19,7 +19,7 @@ #ifndef HW_RISCV_SPIKE_H #define HW_RISCV_SPIKE_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/riscv/riscv_hart.h" #include "hw/sysbus.h" diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 7b4c2c8b7d..806b78cc63 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -19,7 +19,7 @@ #ifndef HW_RISCV_VIRT_H #define HW_RISCV_VIRT_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/riscv/riscv_hart.h" #include "hw/sysbus.h" #include "hw/block/flash.h" diff --git a/include/hw/riscv/xiangshan_kmh.h b/include/hw/riscv/xiangshan_kmh.h index c5dc6b1a9a..5a5af93dff 100644 --- a/include/hw/riscv/xiangshan_kmh.h +++ b/include/hw/riscv/xiangshan_kmh.h @@ -10,7 +10,7 @@ #ifndef HW_XIANGSHAN_KMH_H #define HW_XIANGSHAN_KMH_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/riscv/riscv_hart.h" #define XIANGSHAN_KMH_MAX_CPUS 16 diff --git a/include/hw/s390x/cpu-topology.h b/include/hw/s390x/cpu-topology.h index d5e9aa43f8..2d5a5fa364 100644 --- a/include/hw/s390x/cpu-topology.h +++ b/include/hw/s390x/cpu-topology.h @@ -12,7 +12,7 @@ #ifndef CONFIG_USER_ONLY #include "qemu/queue.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qapi/qapi-types-machine-s390x.h" #define S390_TOPOLOGY_CPU_IFL 0x03 diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h index 526078a4e2..f1f06119d6 100644 --- a/include/hw/s390x/s390-virtio-ccw.h +++ b/include/hw/s390x/s390-virtio-ccw.h @@ -11,7 +11,7 @@ #ifndef HW_S390X_S390_VIRTIO_CCW_H #define HW_S390X_S390_VIRTIO_CCW_H -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qom/object.h" #include "hw/s390x/sclp.h" diff --git a/include/hw/tricore/triboard.h b/include/hw/tricore/triboard.h index ca49a0c752..c6be4dc3f3 100644 --- a/include/hw/tricore/triboard.h +++ b/include/hw/tricore/triboard.h @@ -19,7 +19,7 @@ */ #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/system.h" #include "system/address-spaces.h" #include "qom/object.h" diff --git a/include/hw/xen/xen-pvh-common.h b/include/hw/xen/xen-pvh-common.h index 5db83d88ec..0ed07c5694 100644 --- a/include/hw/xen/xen-pvh-common.h +++ b/include/hw/xen/xen-pvh-common.h @@ -11,7 +11,7 @@ #include "system/memory.h" #include "qom/object.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/pci-host/gpex.h" #include "hw/xen/xen-hvm-common.h" diff --git a/include/system/kvm_int.h b/include/system/kvm_int.h index 9247493b02..baeb166d39 100644 --- a/include/system/kvm_int.h +++ b/include/system/kvm_int.h @@ -15,7 +15,7 @@ #include "qemu/queue.h" #include "system/kvm.h" #include "accel/accel-ops.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i386/topology.h" #include "io/channel-socket.h" diff --git a/migration/migration.c b/migration/migration.c index b316ee01ab..697f460c4a 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -54,7 +54,7 @@ #include "io/channel-buffer.h" #include "io/channel-tls.h" #include "migration/colo.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "monitor/monitor.h" #include "net/announce.h" #include "qemu/queue.h" diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index 715ef021a9..15997f7151 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -30,7 +30,7 @@ #include "system/system.h" #include "qemu/error-report.h" #include "trace.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/ramblock.h" #include "socket.h" #include "yank_functions.h" diff --git a/migration/ram.c b/migration/ram.c index 29f016cb25..6b469238ad 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -64,7 +64,7 @@ #include "system/dirtylimit.h" #include "system/kvm.h" -#include "hw/boards.h" /* for machine_dump_guest_core() */ +#include "hw/core/boards.h" /* for machine_dump_guest_core() */ #if defined(__linux__) #include "qemu/userfaultfd.h" diff --git a/migration/savevm.c b/migration/savevm.c index 62cc2ce25c..73e185caf5 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -27,7 +27,7 @@ */ #include "qemu/osdep.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "net/net.h" #include "migration.h" #include "migration/snapshot.h" diff --git a/monitor/qemu-config-qmp.c b/monitor/qemu-config-qmp.c index 8bd28fc232..2980102356 100644 --- a/monitor/qemu-config-qmp.c +++ b/monitor/qemu-config-qmp.c @@ -6,7 +6,7 @@ #include "qobject/qlist.h" #include "qemu/option.h" #include "qemu/config-file.h" -#include "hw/boards.h" +#include "hw/core/boards.h" static CommandLineParameterInfoList *query_option_descs(const QemuOptDesc *desc) { diff --git a/plugins/api-system.c b/plugins/api-system.c index cc190b167e..9a70b9caa6 100644 --- a/plugins/api-system.c +++ b/plugins/api-system.c @@ -14,7 +14,7 @@ #include "qemu/main-loop.h" #include "qapi/error.h" #include "migration/blocker.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/plugin-memory.h" #include "qemu/plugin.h" diff --git a/plugins/system.c b/plugins/system.c index b3ecc33ba5..88ff60ee2b 100644 --- a/plugins/system.c +++ b/plugins/system.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qemu/plugin.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "plugin.h" diff --git a/scripts/compare-machine-types.py b/scripts/compare-machine-types.py index 2af3995eb8..b4f899082a 100755 --- a/scripts/compare-machine-types.py +++ b/scripts/compare-machine-types.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Script to compare machine type compatible properties (include/hw/boards.h). +# Script to compare machine type compatible properties (include/hw/core/boards.h). # compat_props are applied to the driver during initialization to change # default values, for instance, to maintain compatibility. # This script constructs table with machines and values of their compat_props diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index c5a07cb947..2e9fa5842f 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -48,7 +48,7 @@ #else #include "qemu/cutils.h" #include "hw/loader.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #endif #define TARGET_SYS_OPEN 0x01 diff --git a/system/bootdevice.c b/system/bootdevice.c index 1845be4507..8acdbfb0a5 100644 --- a/system/bootdevice.c +++ b/system/bootdevice.c @@ -29,7 +29,7 @@ #include "qemu/error-report.h" #include "system/reset.h" #include "hw/qdev-core.h" -#include "hw/boards.h" +#include "hw/core/boards.h" typedef struct FWBootEntry FWBootEntry; diff --git a/system/cpus.c b/system/cpus.c index ef2d2f241f..0b1eabd3c4 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -44,7 +44,7 @@ #include "system/runstate.h" #include "system/cpu-timers.h" #include "system/whpx.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/hw.h" #include "trace.h" diff --git a/system/device_tree.c b/system/device_tree.c index 7850b90fa7..3ccdf33374 100644 --- a/system/device_tree.c +++ b/system/device_tree.c @@ -25,7 +25,7 @@ #include "qemu/guest-random.h" #include "system/device_tree.h" #include "hw/loader.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/config-file.h" #include "qapi/qapi-commands-machine.h" #include "qobject/qdict.h" diff --git a/system/dirtylimit.c b/system/dirtylimit.c index b48c0d4b3d..a0c327533c 100644 --- a/system/dirtylimit.c +++ b/system/dirtylimit.c @@ -21,7 +21,7 @@ #include "monitor/monitor.h" #include "system/memory.h" #include "exec/target_page.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/kvm.h" #include "trace.h" #include "migration/misc.h" diff --git a/system/memory.c b/system/memory.c index 8b84661ae3..b65219c2e4 100644 --- a/system/memory.c +++ b/system/memory.c @@ -32,7 +32,7 @@ #include "system/tcg.h" #include "qemu/accel.h" #include "accel/accel-ops.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "migration/vmstate.h" #include "system/address-spaces.h" diff --git a/system/physmem.c b/system/physmem.c index c9869e4049..edc384f4fa 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -38,7 +38,7 @@ #include "exec/translation-block.h" #include "hw/qdev-core.h" #include "hw/qdev-properties.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/xen.h" #include "system/kvm.h" #include "system/tcg.h" diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c index f2aa400a77..3babf81e33 100644 --- a/system/qdev-monitor.c +++ b/system/qdev-monitor.c @@ -42,7 +42,7 @@ #include "qemu/cutils.h" #include "hw/qdev-properties.h" #include "hw/clock.h" -#include "hw/boards.h" +#include "hw/core/boards.h" /* * Aliases were a bad idea from the start. Let's keep them diff --git a/system/runstate.c b/system/runstate.c index e3ec16ab74..89bbfe7fbf 100644 --- a/system/runstate.c +++ b/system/runstate.c @@ -31,7 +31,7 @@ #include "crypto/init.h" #include "exec/cpu-common.h" #include "gdbstub/syscalls.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/resettable.h" #include "migration/misc.h" #include "migration/postcopy-ram.h" diff --git a/target-info-stub.c b/target-info-stub.c index d96d8249c1..8392d81e8f 100644 --- a/target-info-stub.c +++ b/target-info-stub.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/target-info.h" #include "qemu/target-info-impl.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "cpu.h" /* Validate correct placement of CPUArchState. */ diff --git a/target/arm/arm-qmp-cmds.c b/target/arm/arm-qmp-cmds.c index d292c974c4..45df15de78 100644 --- a/target/arm/arm-qmp-cmds.c +++ b/target/arm/arm-qmp-cmds.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "qemu/target-info.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "kvm_arm.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 39292fb9bc..7720d27a3c 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -37,7 +37,7 @@ #include "hw/qdev-properties.h" #if !defined(CONFIG_USER_ONLY) #include "hw/loader.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #ifdef CONFIG_TCG #include "hw/intc/armv7m_nvic.h" #endif /* CONFIG_TCG */ diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 8288b60529..7c48f21543 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -25,7 +25,7 @@ #include "system/address-spaces.h" #include "system/memory.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "qemu/main-loop.h" #include "system/cpus.h" diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 0d57081e69..c7ea6fc2f6 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -33,7 +33,7 @@ #include "exec/memattrs.h" #include "system/address-spaces.h" #include "gdbstub/enums.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "qapi/visitor.h" #include "qemu/log.h" diff --git a/target/arm/tcg/cpu32.c b/target/arm/tcg/cpu32.c index f0761410ad..0b0bc96bac 100644 --- a/target/arm/tcg/cpu32.c +++ b/target/arm/tcg/cpu32.c @@ -14,7 +14,7 @@ #include "internals.h" #include "target/arm/idau.h" #if !defined(CONFIG_USER_ONLY) -#include "hw/boards.h" +#include "hw/core/boards.h" #endif #include "cpregs.h" diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 6417775786..4216ca9ec1 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -42,7 +42,7 @@ #include "system/reset.h" #include "qapi/qapi-commands-machine.h" #include "system/address-spaces.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i386/sgx-epc.h" #endif #include "system/qtest.h" diff --git a/target/i386/hvf/hvf-cpu.c b/target/i386/hvf/hvf-cpu.c index 94ee096ecf..316c1b0ba0 100644 --- a/target/i386/hvf/hvf-cpu.c +++ b/target/i386/hvf/hvf-cpu.c @@ -12,7 +12,7 @@ #include "host-cpu.h" #include "qapi/error.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/hvf.h" #include "accel/accel-cpu-target.h" #include "hvf-i386.h" diff --git a/target/i386/kvm/kvm-cpu.c b/target/i386/kvm/kvm-cpu.c index 9c25b55839..33a8c26bc2 100644 --- a/target/i386/kvm/kvm-cpu.c +++ b/target/i386/kvm/kvm-cpu.c @@ -12,7 +12,7 @@ #include "host-cpu.h" #include "qapi/error.h" #include "system/system.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/i386/x86.h" #include "kvm_i386.h" diff --git a/target/i386/kvm/vmsr_energy.c b/target/i386/kvm/vmsr_energy.c index 890322ae37..d24e827a21 100644 --- a/target/i386/kvm/vmsr_energy.c +++ b/target/i386/kvm/vmsr_energy.c @@ -16,7 +16,7 @@ #include "vmsr_energy.h" #include "io/channel.h" #include "io/channel-socket.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "cpu.h" #include "host-cpu.h" diff --git a/target/i386/whpx/whpx-all.c b/target/i386/whpx/whpx-all.c index 6bf8d5f4bb..db184e1b0d 100644 --- a/target/i386/whpx/whpx-all.c +++ b/target/i386/whpx/whpx-all.c @@ -19,7 +19,7 @@ #include "system/cpus.h" #include "system/runstate.h" #include "qemu/main-loop.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/intc/ioapic.h" #include "hw/i386/apic_internal.h" #include "qemu/error-report.h" diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c index 26e40c9bdc..6412584e1b 100644 --- a/target/loongarch/kvm/kvm.c +++ b/target/loongarch/kvm/kvm.c @@ -19,7 +19,7 @@ #include "hw/pci/pci.h" #include "exec/memattrs.h" #include "system/address-spaces.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "hw/loongarch/virt.h" #include "qemu/log.h" diff --git a/target/m68k/m68k-semi.c b/target/m68k/m68k-semi.c index 6fbbd140f3..578a08dfee 100644 --- a/target/m68k/m68k-semi.c +++ b/target/m68k/m68k-semi.c @@ -28,7 +28,7 @@ #include "gdbstub/helpers.h" #include "semihosting/syscalls.h" #include "semihosting/uaccess.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "qemu/log.h" #define HOSTED_EXIT 0 diff --git a/target/mips/kvm.c b/target/mips/kvm.c index 912cd5dfa0..a85e162409 100644 --- a/target/mips/kvm.c +++ b/target/mips/kvm.c @@ -22,7 +22,7 @@ #include "system/kvm_int.h" #include "system/runstate.h" #include "kvm_mips.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "fpu_helper.h" #define DEBUG_KVM 0 diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index 7ad908b632..ca627bd719 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -25,7 +25,7 @@ #include "exec/helper-proto.h" #include "exception.h" #ifndef CONFIG_USER_ONLY -#include "hw/boards.h" +#include "hw/core/boards.h" #endif #include "tcg/insn-start-words.h" diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index 86ead740ee..a3b14ccead 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -46,7 +46,7 @@ #include "spr_common.h" #include "power8-pmu.h" #ifndef CONFIG_USER_ONLY -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/intc/intc.h" #include "kvm_ppc.h" #endif diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index 47e672c7aa..301d8de67f 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -37,7 +37,7 @@ #include "exec/memattrs.h" #include "system/address-spaces.h" #include "system/memory.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/irq.h" #include "hw/intc/riscv_imsic.h" #include "qemu/log.h" diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c index d3968251fa..bb03f8dc0c 100644 --- a/target/riscv/tcg/tcg-cpu.c +++ b/target/riscv/tcg/tcg-cpu.c @@ -34,7 +34,7 @@ #include "accel/tcg/cpu-ops.h" #include "tcg/tcg.h" #ifndef CONFIG_USER_ONLY -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/tcg.h" #include "exec/icount.h" #endif diff --git a/target/s390x/cpu-system.c b/target/s390x/cpu-system.c index f3a9ffb2a2..c7a6fd7e75 100644 --- a/target/s390x/cpu-system.c +++ b/target/s390x/cpu-system.c @@ -34,7 +34,7 @@ #include "system/hw_accel.h" #include "target/s390x/kvm/pv.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/system.h" #include "system/tcg.h" #include "hw/core/sysemu-cpu-ops.h" diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c index 3b1e75f783..7a7b381059 100644 --- a/target/s390x/mmu_helper.c +++ b/target/s390x/mmu_helper.c @@ -28,7 +28,7 @@ #include "exec/target_page.h" #include "hw/hw.h" #include "hw/s390x/storage-keys.h" -#include "hw/boards.h" +#include "hw/core/boards.h" /* Fetch/store bits in the translation exception code: */ #define FS_READ 0x800 diff --git a/target/s390x/sigp.c b/target/s390x/sigp.c index f5d7bc0fa2..b6d44c5c31 100644 --- a/target/s390x/sigp.c +++ b/target/s390x/sigp.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "cpu.h" #include "s390x-internal.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "system/hw_accel.h" #include "system/memory.h" #include "system/runstate.h" diff --git a/target/s390x/tcg/excp_helper.c b/target/s390x/tcg/excp_helper.c index c6641280bc..54f051ae9e 100644 --- a/target/s390x/tcg/excp_helper.c +++ b/target/s390x/tcg/excp_helper.c @@ -33,7 +33,7 @@ #include "system/memory.h" #include "hw/s390x/ioinst.h" #include "hw/s390x/s390_flic.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #endif #include "qemu/plugin.h" diff --git a/target/s390x/tcg/mem_helper.c b/target/s390x/tcg/mem_helper.c index 24675fc818..9e5bd3ed07 100644 --- a/target/s390x/tcg/mem_helper.c +++ b/target/s390x/tcg/mem_helper.c @@ -40,7 +40,7 @@ #include "user/page-protection.h" #else #include "hw/s390x/storage-keys.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #endif #ifdef CONFIG_USER_ONLY diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c index 215b5b9d93..1fd900fbbf 100644 --- a/target/s390x/tcg/misc_helper.c +++ b/target/s390x/tcg/misc_helper.c @@ -42,7 +42,7 @@ #include "hw/s390x/s390_flic.h" #include "hw/s390x/ioinst.h" #include "hw/s390x/s390-pci-inst.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "hw/s390x/tod.h" #include CONFIG_DEVICES #endif diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuzz.c index f12080eda4..c848eec3b9 100644 --- a/tests/qtest/fuzz/generic_fuzz.c +++ b/tests/qtest/fuzz/generic_fuzz.c @@ -25,7 +25,7 @@ #include "hw/qdev-core.h" #include "hw/pci/pci.h" #include "hw/pci/pci_device.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #include "generic_fuzz_configs.h" #include "hw/mem/sparse-mem.h" diff --git a/tests/unit/test-smp-parse.c b/tests/unit/test-smp-parse.c index 326045ecbb..28ea9158e7 100644 --- a/tests/unit/test-smp-parse.c +++ b/tests/unit/test-smp-parse.c @@ -15,7 +15,7 @@ #include "qemu/module.h" #include "qapi/error.h" -#include "hw/boards.h" +#include "hw/core/boards.h" #define T true #define F false From 838861a1f9e3765dc40cd05b611c72944d21445c Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:22 +0100 Subject: [PATCH 006/152] include: move hw/clock.h to hw/core/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- docs/devel/clocks.rst | 2 +- hw/char/stm32l4x5_usart.c | 2 +- hw/core/clock-vmstate.c | 2 +- hw/core/clock.c | 2 +- hw/core/ptimer.c | 2 +- hw/gpio/stm32l4x5_gpio.c | 2 +- hw/mips/fuloong2e.c | 2 +- hw/mips/jazz.c | 2 +- hw/mips/malta.c | 2 +- hw/misc/stm32l4x5_rcc.c | 2 +- hw/misc/stm32l4x5_syscfg.c | 2 +- hw/timer/sse-counter.c | 2 +- hw/timer/sse-timer.c | 2 +- include/hw/adc/npcm7xx_adc.h | 2 +- include/hw/arm/armsse.h | 2 +- include/hw/arm/armv7m.h | 2 +- include/hw/arm/msf2-soc.h | 2 +- include/hw/arm/nrf51_soc.h | 2 +- include/hw/arm/stm32f100_soc.h | 2 +- include/hw/arm/stm32f205_soc.h | 2 +- include/hw/{ => core}/clock.h | 0 include/hw/mips/cps.h | 2 +- include/hw/misc/npcm7xx_mft.h | 2 +- include/hw/misc/npcm7xx_pwm.h | 2 +- include/hw/misc/npcm_clk.h | 2 +- include/hw/qdev-clock.h | 2 +- include/hw/timer/armv7m_systick.h | 2 +- include/hw/timer/cmsdk-apb-dualtimer.h | 2 +- include/hw/timer/cmsdk-apb-timer.h | 2 +- include/hw/timer/stellaris-gptm.h | 2 +- include/hw/watchdog/cmsdk-apb-watchdog.h | 2 +- rust/hw/core/wrapper.h | 2 +- system/qdev-monitor.c | 2 +- target/mips/cpu.h | 2 +- target/xtensa/cpu.h | 2 +- 36 files changed, 35 insertions(+), 35 deletions(-) rename include/hw/{ => core}/clock.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 9e9cb83989..f44259b305 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3951,7 +3951,7 @@ Clock framework M: Luc Michel R: Damien Hedde S: Maintained -F: include/hw/clock.h +F: include/hw/core/clock.h F: include/hw/qdev-clock.h F: hw/core/clock.c F: hw/core/clock-vmstate.c diff --git a/docs/devel/clocks.rst b/docs/devel/clocks.rst index 3f744f2be1..2dbdc66860 100644 --- a/docs/devel/clocks.rst +++ b/docs/devel/clocks.rst @@ -46,7 +46,7 @@ Here is an example of clocks:: | +-------+ | +--------------+ -Clocks are defined in the ``include/hw/clock.h`` header and device +Clocks are defined in the ``include/hw/core/clock.h`` header and device related functions are defined in the ``include/hw/qdev-clock.h`` header. diff --git a/hw/char/stm32l4x5_usart.c b/hw/char/stm32l4x5_usart.c index afbe4bab29..60d8ab5a0e 100644 --- a/hw/char/stm32l4x5_usart.c +++ b/hw/char/stm32l4x5_usart.c @@ -23,7 +23,7 @@ #include "chardev/char-serial.h" #include "migration/vmstate.h" #include "hw/char/stm32l4x5_usart.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" diff --git a/hw/core/clock-vmstate.c b/hw/core/clock-vmstate.c index e831fc596f..9566d04cc6 100644 --- a/hw/core/clock-vmstate.c +++ b/hw/core/clock-vmstate.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "migration/vmstate.h" -#include "hw/clock.h" +#include "hw/core/clock.h" static bool muldiv_needed(void *opaque) { diff --git a/hw/core/clock.c b/hw/core/clock.c index 9c906761e1..3fc98a0c65 100644 --- a/hw/core/clock.c +++ b/hw/core/clock.c @@ -15,7 +15,7 @@ #include "qemu/cutils.h" #include "qapi/visitor.h" #include "system/qtest.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "trace.h" #define CLOCK_PATH(_clk) (_clk->canonical_path) diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c index 0aeb10fb53..a7337f02b8 100644 --- a/hw/core/ptimer.c +++ b/hw/core/ptimer.c @@ -14,7 +14,7 @@ #include "exec/icount.h" #include "system/qtest.h" #include "block/aio.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #define DELTA_ADJUST 1 #define DELTA_NO_ADJUST -1 diff --git a/hw/gpio/stm32l4x5_gpio.c b/hw/gpio/stm32l4x5_gpio.c index 414ce83039..42fe984c49 100644 --- a/hw/gpio/stm32l4x5_gpio.c +++ b/hw/gpio/stm32l4x5_gpio.c @@ -20,7 +20,7 @@ #include "qemu/log.h" #include "hw/gpio/stm32l4x5_gpio.h" #include "hw/irq.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "qapi/visitor.h" diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c index e777863703..fa252c4b28 100644 --- a/hw/mips/fuloong2e.c +++ b/hw/mips/fuloong2e.c @@ -23,7 +23,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "cpu.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "net/net.h" #include "hw/core/boards.h" #include "hw/i2c/smbus_eeprom.h" diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c index 1708cec3f8..fdcae4ce90 100644 --- a/hw/mips/jazz.c +++ b/hw/mips/jazz.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/datadir.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/mips/mips.h" #include "hw/intc/i8259.h" #include "hw/dma/i8257.h" diff --git a/hw/mips/malta.c b/hw/mips/malta.c index f39e56d279..44ae8bc6c7 100644 --- a/hw/mips/malta.c +++ b/hw/mips/malta.c @@ -29,7 +29,7 @@ #include "qemu/cutils.h" #include "qemu/guest-random.h" #include "exec/tswap.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/southbridge/piix.h" #include "hw/isa/superio.h" #include "hw/char/serial-mm.h" diff --git a/hw/misc/stm32l4x5_rcc.c b/hw/misc/stm32l4x5_rcc.c index 0e1f27fbdd..514159777a 100644 --- a/hw/misc/stm32l4x5_rcc.c +++ b/hw/misc/stm32l4x5_rcc.c @@ -23,7 +23,7 @@ #include "migration/vmstate.h" #include "hw/misc/stm32l4x5_rcc.h" #include "hw/misc/stm32l4x5_rcc_internals.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" diff --git a/hw/misc/stm32l4x5_syscfg.c b/hw/misc/stm32l4x5_syscfg.c index 4e21756e0b..85be226d2f 100644 --- a/hw/misc/stm32l4x5_syscfg.c +++ b/hw/misc/stm32l4x5_syscfg.c @@ -26,7 +26,7 @@ #include "trace.h" #include "hw/irq.h" #include "migration/vmstate.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/qdev-clock.h" #include "qapi/error.h" #include "hw/misc/stm32l4x5_syscfg.h" diff --git a/hw/timer/sse-counter.c b/hw/timer/sse-counter.c index 31f77acf61..bb364e815b 100644 --- a/hw/timer/sse-counter.c +++ b/hw/timer/sse-counter.c @@ -34,7 +34,7 @@ #include "hw/timer/sse-counter.h" #include "hw/sysbus.h" #include "hw/registerfields.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/qdev-clock.h" #include "migration/vmstate.h" diff --git a/hw/timer/sse-timer.c b/hw/timer/sse-timer.c index 866d5eef8a..c5fd038162 100644 --- a/hw/timer/sse-timer.c +++ b/hw/timer/sse-timer.c @@ -43,7 +43,7 @@ #include "hw/sysbus.h" #include "hw/irq.h" #include "hw/registerfields.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/include/hw/adc/npcm7xx_adc.h b/include/hw/adc/npcm7xx_adc.h index 93330a408d..a0c56d4236 100644 --- a/include/hw/adc/npcm7xx_adc.h +++ b/include/hw/adc/npcm7xx_adc.h @@ -16,7 +16,7 @@ #ifndef NPCM7XX_ADC_H #define NPCM7XX_ADC_H -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/irq.h" #include "hw/sysbus.h" #include "qemu/timer.h" diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 88b3b759c5..04755ed1ec 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -110,7 +110,7 @@ #include "hw/misc/armsse-cpu-pwrctrl.h" #include "hw/misc/unimp.h" #include "hw/or-irq.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/core/split-irq.h" #include "hw/cpu/cluster.h" #include "qom/object.h" diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h index 5c057ab2ec..e31888cc8c 100644 --- a/include/hw/arm/armv7m.h +++ b/include/hw/arm/armv7m.h @@ -15,7 +15,7 @@ #include "hw/misc/armv7m_ras.h" #include "target/arm/idau.h" #include "qom/object.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #define TYPE_BITBAND "ARM-bitband-memory" OBJECT_DECLARE_SIMPLE_TYPE(BitBandState, BITBAND) diff --git a/include/hw/arm/msf2-soc.h b/include/hw/arm/msf2-soc.h index 9300664e8e..510a91cd77 100644 --- a/include/hw/arm/msf2-soc.h +++ b/include/hw/arm/msf2-soc.h @@ -30,7 +30,7 @@ #include "hw/misc/msf2-sysreg.h" #include "hw/ssi/mss-spi.h" #include "hw/net/msf2-emac.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "qom/object.h" #define TYPE_MSF2_SOC "msf2-soc" diff --git a/include/hw/arm/nrf51_soc.h b/include/hw/arm/nrf51_soc.h index f88ab1b7d3..94d7fc62ac 100644 --- a/include/hw/arm/nrf51_soc.h +++ b/include/hw/arm/nrf51_soc.h @@ -17,7 +17,7 @@ #include "hw/gpio/nrf51_gpio.h" #include "hw/nvram/nrf51_nvm.h" #include "hw/timer/nrf51_timer.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "qom/object.h" #define TYPE_NRF51_SOC "nrf51-soc" diff --git a/include/hw/arm/stm32f100_soc.h b/include/hw/arm/stm32f100_soc.h index a74d7b369c..4c113d6774 100644 --- a/include/hw/arm/stm32f100_soc.h +++ b/include/hw/arm/stm32f100_soc.h @@ -29,7 +29,7 @@ #include "hw/ssi/stm32f2xx_spi.h" #include "hw/arm/armv7m.h" #include "qom/object.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #define TYPE_STM32F100_SOC "stm32f100-soc" OBJECT_DECLARE_SIMPLE_TYPE(STM32F100State, STM32F100_SOC) diff --git a/include/hw/arm/stm32f205_soc.h b/include/hw/arm/stm32f205_soc.h index 46eda3403a..d3de6b94da 100644 --- a/include/hw/arm/stm32f205_soc.h +++ b/include/hw/arm/stm32f205_soc.h @@ -32,7 +32,7 @@ #include "hw/or-irq.h" #include "hw/ssi/stm32f2xx_spi.h" #include "hw/arm/armv7m.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "qom/object.h" #define TYPE_STM32F205_SOC "stm32f205-soc" diff --git a/include/hw/clock.h b/include/hw/core/clock.h similarity index 100% rename from include/hw/clock.h rename to include/hw/core/clock.h diff --git a/include/hw/mips/cps.h b/include/hw/mips/cps.h index 05ef9f76b7..e7309841d0 100644 --- a/include/hw/mips/cps.h +++ b/include/hw/mips/cps.h @@ -21,7 +21,7 @@ #define MIPS_CPS_H #include "hw/sysbus.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/misc/mips_cmgcr.h" #include "hw/intc/mips_gic.h" #include "hw/misc/mips_cpc.h" diff --git a/include/hw/misc/npcm7xx_mft.h b/include/hw/misc/npcm7xx_mft.h index e4b997a6ad..54a2c2a82e 100644 --- a/include/hw/misc/npcm7xx_mft.h +++ b/include/hw/misc/npcm7xx_mft.h @@ -17,7 +17,7 @@ #define NPCM7XX_MFT_H #include "system/memory.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/irq.h" #include "hw/sysbus.h" #include "qom/object.h" diff --git a/include/hw/misc/npcm7xx_pwm.h b/include/hw/misc/npcm7xx_pwm.h index df92726620..f697a77cdc 100644 --- a/include/hw/misc/npcm7xx_pwm.h +++ b/include/hw/misc/npcm7xx_pwm.h @@ -16,7 +16,7 @@ #ifndef NPCM7XX_PWM_H #define NPCM7XX_PWM_H -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/sysbus.h" #include "hw/irq.h" diff --git a/include/hw/misc/npcm_clk.h b/include/hw/misc/npcm_clk.h index 52e972f460..50b93a0094 100644 --- a/include/hw/misc/npcm_clk.h +++ b/include/hw/misc/npcm_clk.h @@ -17,7 +17,7 @@ #define NPCM_CLK_H #include "system/memory.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/sysbus.h" #define NPCM7XX_CLK_NR_REGS (0x70 / sizeof(uint32_t)) diff --git a/include/hw/qdev-clock.h b/include/hw/qdev-clock.h index ffa0f7ba09..af0d8499a6 100644 --- a/include/hw/qdev-clock.h +++ b/include/hw/qdev-clock.h @@ -14,7 +14,7 @@ #ifndef QDEV_CLOCK_H #define QDEV_CLOCK_H -#include "hw/clock.h" +#include "hw/core/clock.h" /** * qdev_init_clock_in: diff --git a/include/hw/timer/armv7m_systick.h b/include/hw/timer/armv7m_systick.h index ee09b13881..ac7de0a43e 100644 --- a/include/hw/timer/armv7m_systick.h +++ b/include/hw/timer/armv7m_systick.h @@ -15,7 +15,7 @@ #include "hw/sysbus.h" #include "qom/object.h" #include "hw/ptimer.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #define TYPE_SYSTICK "armv7m_systick" diff --git a/include/hw/timer/cmsdk-apb-dualtimer.h b/include/hw/timer/cmsdk-apb-dualtimer.h index f3ec86c00b..f098128a58 100644 --- a/include/hw/timer/cmsdk-apb-dualtimer.h +++ b/include/hw/timer/cmsdk-apb-dualtimer.h @@ -28,7 +28,7 @@ #include "hw/sysbus.h" #include "hw/ptimer.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "qom/object.h" #define TYPE_CMSDK_APB_DUALTIMER "cmsdk-apb-dualtimer" diff --git a/include/hw/timer/cmsdk-apb-timer.h b/include/hw/timer/cmsdk-apb-timer.h index 2dd615d1be..74eaf611ae 100644 --- a/include/hw/timer/cmsdk-apb-timer.h +++ b/include/hw/timer/cmsdk-apb-timer.h @@ -14,7 +14,7 @@ #include "hw/sysbus.h" #include "hw/ptimer.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "qom/object.h" #define TYPE_CMSDK_APB_TIMER "cmsdk-apb-timer" diff --git a/include/hw/timer/stellaris-gptm.h b/include/hw/timer/stellaris-gptm.h index fde1fc6f0c..c705508b82 100644 --- a/include/hw/timer/stellaris-gptm.h +++ b/include/hw/timer/stellaris-gptm.h @@ -13,7 +13,7 @@ #include "qom/object.h" #include "hw/sysbus.h" #include "hw/irq.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #define TYPE_STELLARIS_GPTM "stellaris-gptm" OBJECT_DECLARE_SIMPLE_TYPE(gptm_state, STELLARIS_GPTM) diff --git a/include/hw/watchdog/cmsdk-apb-watchdog.h b/include/hw/watchdog/cmsdk-apb-watchdog.h index c6b3e78731..5bbf4979c9 100644 --- a/include/hw/watchdog/cmsdk-apb-watchdog.h +++ b/include/hw/watchdog/cmsdk-apb-watchdog.h @@ -33,7 +33,7 @@ #include "hw/sysbus.h" #include "hw/ptimer.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "qom/object.h" #define TYPE_CMSDK_APB_WATCHDOG "cmsdk-apb-watchdog" diff --git a/rust/hw/core/wrapper.h b/rust/hw/core/wrapper.h index 3bdbd1249e..77b541f83f 100644 --- a/rust/hw/core/wrapper.h +++ b/rust/hw/core/wrapper.h @@ -25,7 +25,7 @@ typedef enum memory_order { #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c index 3babf81e33..c8773d864d 100644 --- a/system/qdev-monitor.c +++ b/system/qdev-monitor.c @@ -41,7 +41,7 @@ #include "migration/misc.h" #include "qemu/cutils.h" #include "hw/qdev-properties.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "hw/core/boards.h" /* diff --git a/target/mips/cpu.h b/target/mips/cpu.h index 5cd4c6c818..ed662135cb 100644 --- a/target/mips/cpu.h +++ b/target/mips/cpu.h @@ -9,7 +9,7 @@ #include "system/memory.h" #endif #include "fpu/softfloat-types.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "mips-defs.h" typedef struct CPUMIPSTLBContext CPUMIPSTLBContext; diff --git a/target/xtensa/cpu.h b/target/xtensa/cpu.h index 74122ebe15..2219292484 100644 --- a/target/xtensa/cpu.h +++ b/target/xtensa/cpu.h @@ -33,7 +33,7 @@ #include "exec/cpu-common.h" #include "exec/cpu-defs.h" #include "exec/cpu-interrupt.h" -#include "hw/clock.h" +#include "hw/core/clock.h" #include "xtensa-isa.h" enum { From d1526663f23336a8451ae8b58f437e822be57dfd Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:26 +0100 Subject: [PATCH 007/152] include: move hw/fw-path-provider.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/core/fw-path-provider.c | 2 +- hw/core/qdev-fw.c | 2 +- hw/ppc/mac_newworld.c | 2 +- hw/ppc/mac_oldworld.c | 2 +- hw/ppc/pegasos.c | 2 +- hw/ppc/spapr.c | 2 +- hw/scsi/vhost-scsi-common.c | 2 +- hw/scsi/vhost-scsi.c | 2 +- hw/scsi/vhost-user-scsi.c | 2 +- hw/sparc64/sun4u.c | 2 +- include/hw/{ => core}/fw-path-provider.h | 0 include/hw/virtio/vhost-scsi-common.h | 2 +- 12 files changed, 11 insertions(+), 11 deletions(-) rename include/hw/{ => core}/fw-path-provider.h (100%) diff --git a/hw/core/fw-path-provider.c b/hw/core/fw-path-provider.c index 4840faefd1..2a9da1aa4a 100644 --- a/hw/core/fw-path-provider.c +++ b/hw/core/fw-path-provider.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "qemu/module.h" char *fw_path_provider_get_dev_path(FWPathProvider *p, BusState *bus, diff --git a/hw/core/qdev-fw.c b/hw/core/qdev-fw.c index a31958355f..a587d2ddf9 100644 --- a/hw/core/qdev-fw.c +++ b/hw/core/qdev-fw.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "hw/qdev-core.h" const char *qdev_fw_name(DeviceState *dev) diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index bdc6c7ed7f..3a6e47eb8b 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -66,7 +66,7 @@ #include "hw/misc/macio/macio.h" #include "hw/ppc/openpic.h" #include "hw/loader.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "elf.h" #include "qemu/error-report.h" #include "system/kvm.h" diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 8d35080b9d..8f9ce68b8b 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -43,7 +43,7 @@ #include "hw/char/escc.h" #include "hw/misc/macio/macio.h" #include "hw/loader.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "elf.h" #include "qemu/error-report.h" #include "system/kvm.h" diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index 3b48a54e7a..e7396a729f 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -26,7 +26,7 @@ #include "system/qtest.h" #include "hw/core/boards.h" #include "hw/loader.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "elf.h" #include "qemu/log.h" #include "qemu/error-report.h" diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 6f2d10330d..7c695ac4ec 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -43,7 +43,7 @@ #include "system/reset.h" #include "system/runstate.h" #include "qemu/log.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "elf.h" #include "net/net.h" #include "system/device_tree.h" diff --git a/hw/scsi/vhost-scsi-common.c b/hw/scsi/vhost-scsi-common.c index 43525ba46d..0bb4305de6 100644 --- a/hw/scsi/vhost-scsi-common.c +++ b/hw/scsi/vhost-scsi-common.c @@ -24,7 +24,7 @@ #include "hw/virtio/virtio-scsi.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-access.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" int vhost_scsi_common_start(VHostSCSICommon *vsc, Error **errp) { diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index 239138c931..573a44b2b3 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -26,7 +26,7 @@ #include "hw/virtio/vhost.h" #include "hw/virtio/virtio-scsi.h" #include "hw/virtio/virtio-bus.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "hw/qdev-properties.h" #include "qemu/cutils.h" #include "system/system.h" diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 25f2d894e7..0d7bbb52ab 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "hw/qdev-core.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 961d599f48..62ceb7eef4 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -54,7 +54,7 @@ #include "hw/sysbus.h" #include "hw/ide/pci.h" #include "hw/loader.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "elf.h" #include "trace.h" #include "qom/object.h" diff --git a/include/hw/fw-path-provider.h b/include/hw/core/fw-path-provider.h similarity index 100% rename from include/hw/fw-path-provider.h rename to include/hw/core/fw-path-provider.h diff --git a/include/hw/virtio/vhost-scsi-common.h b/include/hw/virtio/vhost-scsi-common.h index d54d9c916f..7f34c7cb4f 100644 --- a/include/hw/virtio/vhost-scsi-common.h +++ b/include/hw/virtio/vhost-scsi-common.h @@ -16,7 +16,7 @@ #include "hw/virtio/virtio-scsi.h" #include "hw/virtio/vhost.h" -#include "hw/fw-path-provider.h" +#include "hw/core/fw-path-provider.h" #include "qom/object.h" #define TYPE_VHOST_SCSI_COMMON "vhost-scsi-common" From 02b7f047025a5761ce53f611f38a8c772fd7d78a Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:29 +0100 Subject: [PATCH 008/152] include: move hw/hotplug.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/acpi/acpi-nvdimm-stub.c | 2 +- hw/acpi/piix4.c | 2 +- hw/core/hotplug.c | 2 +- hw/pci-bridge/pci_bridge_dev.c | 2 +- hw/pci/pci.c | 2 +- hw/pci/pcie_port.c | 2 +- hw/s390x/css-bridge.c | 2 +- include/hw/acpi/cpu.h | 2 +- include/hw/acpi/cpu_hotplug.h | 2 +- include/hw/acpi/pcihp.h | 2 +- include/hw/{ => core}/hotplug.h | 0 include/hw/i386/pc.h | 2 +- include/hw/pci/pcie.h | 2 +- include/hw/pci/shpc.h | 2 +- include/hw/qdev-core.h | 2 +- 15 files changed, 14 insertions(+), 14 deletions(-) rename include/hw/{ => core}/hotplug.h (100%) diff --git a/hw/acpi/acpi-nvdimm-stub.c b/hw/acpi/acpi-nvdimm-stub.c index 65f491d653..22ba17f511 100644 --- a/hw/acpi/acpi-nvdimm-stub.c +++ b/hw/acpi/acpi-nvdimm-stub.c @@ -1,6 +1,6 @@ #include "qemu/osdep.h" #include "hw/mem/nvdimm.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" void nvdimm_acpi_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev) { diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 7a18f18dda..9e0892a51f 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -35,7 +35,7 @@ #include "qemu/range.h" #include "hw/acpi/cpu_hotplug.h" #include "hw/acpi/cpu.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "hw/mem/pc-dimm.h" #include "hw/mem/nvdimm.h" #include "hw/acpi/memory_hotplug.h" diff --git a/hw/core/hotplug.c b/hw/core/hotplug.c index 17ac986685..68aabad8ae 100644 --- a/hw/core/hotplug.c +++ b/hw/core/hotplug.c @@ -10,7 +10,7 @@ * See the COPYING file in the top-level directory. */ #include "qemu/osdep.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "qemu/module.h" void hotplug_handler_pre_plug(HotplugHandler *plug_handler, diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c index b328e50ab3..cb4809f38b 100644 --- a/hw/pci-bridge/pci_bridge_dev.c +++ b/hw/pci-bridge/pci_bridge_dev.c @@ -30,7 +30,7 @@ #include "hw/qdev-properties.h" #include "system/memory.h" #include "hw/pci/pci_bus.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "qom/object.h" #define TYPE_PCI_BRIDGE_DEV "pci-bridge" diff --git a/hw/pci/pci.c b/hw/pci/pci.c index e03953813c..02a59f355b 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -45,7 +45,7 @@ #include "trace.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "hw/core/boards.h" #include "hw/nvram/fw_cfg.h" #include "qapi/error.h" diff --git a/hw/pci/pcie_port.c b/hw/pci/pcie_port.c index f3841a2656..20b5e4cfb5 100644 --- a/hw/pci/pcie_port.c +++ b/hw/pci/pcie_port.c @@ -22,7 +22,7 @@ #include "hw/pci/pcie_port.h" #include "hw/qdev-properties.h" #include "qemu/module.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" void pcie_port_init_reg(PCIDevice *d) { diff --git a/hw/s390x/css-bridge.c b/hw/s390x/css-bridge.c index 0f87b8c5c4..f3b6ef5630 100644 --- a/hw/s390x/css-bridge.c +++ b/hw/s390x/css-bridge.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/bitops.h" diff --git a/include/hw/acpi/cpu.h b/include/hw/acpi/cpu.h index 95dc58b5ad..a64d19445c 100644 --- a/include/hw/acpi/cpu.h +++ b/include/hw/acpi/cpu.h @@ -17,7 +17,7 @@ #include "hw/acpi/acpi.h" #include "hw/acpi/aml-build.h" #include "hw/core/boards.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #define ACPI_CPU_HOTPLUG_REG_LEN 12 diff --git a/include/hw/acpi/cpu_hotplug.h b/include/hw/acpi/cpu_hotplug.h index 3b932abbbb..5b670b04eb 100644 --- a/include/hw/acpi/cpu_hotplug.h +++ b/include/hw/acpi/cpu_hotplug.h @@ -16,7 +16,7 @@ #include "hw/acpi/acpi.h" #include "hw/acpi/pc-hotplug.h" #include "hw/acpi/aml-build.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "hw/acpi/cpu.h" typedef struct AcpiCpuHotplug { diff --git a/include/hw/acpi/pcihp.h b/include/hw/acpi/pcihp.h index ca6a258825..efce5fd2e1 100644 --- a/include/hw/acpi/pcihp.h +++ b/include/hw/acpi/pcihp.h @@ -29,7 +29,7 @@ #include "hw/acpi/acpi.h" #include "hw/acpi/aml-build.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #define ACPI_PCIHP_IO_BASE_PROP "acpi-pcihp-io-base" #define ACPI_PCIHP_IO_LEN_PROP "acpi-pcihp-io-len" diff --git a/include/hw/hotplug.h b/include/hw/core/hotplug.h similarity index 100% rename from include/hw/hotplug.h rename to include/hw/core/hotplug.h diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index ade2da92ba..b3a45ab71a 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -9,7 +9,7 @@ #include "hw/block/flash.h" #include "hw/i386/x86.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "qom/object.h" #include "hw/i386/sgx-epc.h" #include "hw/cxl/cxl.h" diff --git a/include/hw/pci/pcie.h b/include/hw/pci/pcie.h index 42cebcd033..c880ae1e04 100644 --- a/include/hw/pci/pcie.h +++ b/include/hw/pci/pcie.h @@ -25,7 +25,7 @@ #include "hw/pci/pcie_regs.h" #include "hw/pci/pcie_aer.h" #include "hw/pci/pcie_sriov.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" typedef struct PCIEPort PCIEPort; typedef struct PCIESlot PCIESlot; diff --git a/include/hw/pci/shpc.h b/include/hw/pci/shpc.h index ad1089567a..fce5bdd3bc 100644 --- a/include/hw/pci/shpc.h +++ b/include/hw/pci/shpc.h @@ -2,7 +2,7 @@ #define SHPC_H #include "system/memory.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "hw/pci/pci_device.h" #include "migration/vmstate.h" diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h index 5cf2db7ee1..f0ef2dc3aa 100644 --- a/include/hw/qdev-core.h +++ b/include/hw/qdev-core.h @@ -7,7 +7,7 @@ #include "qemu/rcu.h" #include "qemu/rcu_queue.h" #include "qom/object.h" -#include "hw/hotplug.h" +#include "hw/core/hotplug.h" #include "hw/resettable.h" /** From 32222dc3bbd146f7dcb5868d82c20e1b86dcc713 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:32 +0100 Subject: [PATCH 009/152] include: move hw/irq.h to hw/core/ Signed-off-by: Paolo Bonzini --- accel/kvm/kvm-all.c | 2 +- hw/acpi/core.c | 2 +- hw/acpi/generic_event_device.c | 2 +- hw/acpi/piix4.c | 2 +- hw/adc/aspeed_adc.c | 2 +- hw/adc/zynq-xadc.c | 2 +- hw/alpha/typhoon.c | 2 +- hw/arm/armsse.c | 2 +- hw/arm/exynos4210.c | 2 +- hw/arm/exynos4_boards.c | 2 +- hw/arm/integratorcp.c | 2 +- hw/arm/mps2-tz.c | 2 +- hw/arm/musicpal.c | 2 +- hw/arm/omap1.c | 2 +- hw/arm/realview.c | 2 +- hw/arm/smmuv3.c | 2 +- hw/arm/stellaris.c | 2 +- hw/arm/strongarm.c | 2 +- hw/arm/versatilepb.c | 2 +- hw/arm/virt.c | 2 +- hw/audio/asc.c | 2 +- hw/audio/cs4231a.c | 2 +- hw/audio/gus.c | 2 +- hw/audio/marvell_88w8618.c | 2 +- hw/audio/pl041.c | 2 +- hw/audio/sb16.c | 2 +- hw/block/fdc-isa.c | 2 +- hw/block/fdc.c | 2 +- hw/char/avr_usart.c | 2 +- hw/char/bcm2835_aux.c | 2 +- hw/char/cadence_uart.c | 2 +- hw/char/cmsdk-apb-uart.c | 2 +- hw/char/diva-gsp.c | 2 +- hw/char/escc.c | 2 +- hw/char/exynos4210_uart.c | 2 +- hw/char/goldfish_tty.c | 2 +- hw/char/grlib_apbuart.c | 2 +- hw/char/ibex_uart.c | 2 +- hw/char/imx_serial.c | 2 +- hw/char/ipoctal232.c | 2 +- hw/char/max78000_uart.c | 2 +- hw/char/mcf_uart.c | 2 +- hw/char/nrf51_uart.c | 2 +- hw/char/pl011.c | 2 +- hw/char/renesas_sci.c | 2 +- hw/char/serial-pci-multi.c | 2 +- hw/char/serial-pci.c | 2 +- hw/char/serial.c | 2 +- hw/char/sh_serial.c | 2 +- hw/char/sifive_uart.c | 2 +- hw/char/stm32f2xx_usart.c | 2 +- hw/char/stm32l4x5_usart.c | 2 +- hw/char/xilinx_uartlite.c | 2 +- hw/core/gpio.c | 2 +- hw/core/irq.c | 2 +- hw/core/or-irq.c | 2 +- hw/core/qdev.c | 2 +- hw/core/split-irq.c | 2 +- hw/cpu/a15mpcore.c | 2 +- hw/cpu/a9mpcore.c | 2 +- hw/cpu/arm11mpcore.c | 2 +- hw/cpu/realview_mpcore.c | 2 +- hw/display/apple-gfx-mmio.m | 2 +- hw/display/bcm2835_fb.c | 2 +- hw/display/cg3.c | 2 +- hw/display/dm163.c | 2 +- hw/display/exynos4210_fimd.c | 2 +- hw/display/g364fb.c | 2 +- hw/display/omap_lcdc.c | 2 +- hw/display/pl110.c | 2 +- hw/display/xlnx_dp.c | 2 +- hw/dma/bcm2835_dma.c | 2 +- hw/dma/omap_dma.c | 2 +- hw/dma/pl080.c | 2 +- hw/dma/pl330.c | 2 +- hw/dma/rc4030.c | 2 +- hw/dma/sifive_pdma.c | 2 +- hw/dma/sparc32_dma.c | 2 +- hw/dma/xilinx_axidma.c | 2 +- hw/dma/xlnx-zdma.c | 2 +- hw/dma/xlnx-zynq-devcfg.c | 2 +- hw/dma/xlnx_csu_dma.c | 2 +- hw/dma/xlnx_dpdma.c | 2 +- hw/gpio/aspeed_gpio.c | 2 +- hw/gpio/bcm2835_gpio.c | 2 +- hw/gpio/bcm2838_gpio.c | 2 +- hw/gpio/gpio_key.c | 2 +- hw/gpio/imx_gpio.c | 2 +- hw/gpio/mpc8xxx.c | 2 +- hw/gpio/npcm7xx_gpio.c | 2 +- hw/gpio/nrf51_gpio.c | 2 +- hw/gpio/omap_gpio.c | 2 +- hw/gpio/pca9552.c | 2 +- hw/gpio/pca9554.c | 2 +- hw/gpio/pcf8574.c | 2 +- hw/gpio/pl061.c | 2 +- hw/gpio/sifive_gpio.c | 2 +- hw/gpio/stm32l4x5_gpio.c | 2 +- hw/gpio/zaurus.c | 2 +- hw/i2c/allwinner-i2c.c | 2 +- hw/i2c/aspeed_i2c.c | 2 +- hw/i2c/bcm2835_i2c.c | 2 +- hw/i2c/bitbang_i2c.c | 2 +- hw/i2c/exynos4210_i2c.c | 2 +- hw/i2c/imx_i2c.c | 2 +- hw/i2c/mpc_i2c.c | 2 +- hw/i2c/omap_i2c.c | 2 +- hw/i2c/ppc4xx_i2c.c | 2 +- hw/i386/kvm/i8259.c | 2 +- hw/i386/kvm/xen_evtchn.c | 2 +- hw/i386/microvm.c | 2 +- hw/i386/pc_piix.c | 2 +- hw/i386/port92.c | 2 +- hw/i386/x86-common.c | 2 +- hw/i386/x86-cpu.c | 2 +- hw/i386/xen/xen-hvm.c | 2 +- hw/ide/ahci.c | 2 +- hw/ide/core.c | 2 +- hw/ide/macio.c | 2 +- hw/ide/pci.c | 2 +- hw/ide/via.c | 2 +- hw/input/lasips2.c | 2 +- hw/input/pckbd.c | 2 +- hw/input/pl050.c | 2 +- hw/input/ps2.c | 2 +- hw/input/stellaris_gamepad.c | 2 +- hw/intc/allwinner-a10-pic.c | 2 +- hw/intc/arm_gic.c | 2 +- hw/intc/arm_gicv2m.c | 2 +- hw/intc/arm_gicv3_cpuif.c | 2 +- hw/intc/armv7m_nvic.c | 2 +- hw/intc/aspeed_intc.c | 2 +- hw/intc/aspeed_vic.c | 2 +- hw/intc/bcm2835_ic.c | 2 +- hw/intc/bcm2836_control.c | 2 +- hw/intc/exynos4210_combiner.c | 2 +- hw/intc/exynos4210_gic.c | 2 +- hw/intc/goldfish_pic.c | 2 +- hw/intc/grlib_irqmp.c | 2 +- hw/intc/heathrow_pic.c | 2 +- hw/intc/i8259.c | 2 +- hw/intc/imx_avic.c | 2 +- hw/intc/loongarch_dintc.c | 2 +- hw/intc/loongarch_extioi.c | 2 +- hw/intc/loongarch_pch_msi.c | 2 +- hw/intc/loongarch_pch_pic.c | 2 +- hw/intc/loongson_ipi_common.c | 2 +- hw/intc/loongson_liointc.c | 2 +- hw/intc/mips_gic.c | 2 +- hw/intc/omap_intc.c | 2 +- hw/intc/ompic.c | 2 +- hw/intc/openpic.c | 2 +- hw/intc/pl190.c | 2 +- hw/intc/ppc-uic.c | 2 +- hw/intc/realview_gic.c | 2 +- hw/intc/riscv_aclint.c | 2 +- hw/intc/riscv_aplic.c | 2 +- hw/intc/riscv_imsic.c | 2 +- hw/intc/rx_icu.c | 2 +- hw/intc/sh_intc.c | 2 +- hw/intc/sifive_plic.c | 2 +- hw/intc/slavio_intctl.c | 2 +- hw/intc/xics.c | 2 +- hw/intc/xilinx_intc.c | 2 +- hw/intc/xive.c | 2 +- hw/intc/xlnx-pmu-iomod-intc.c | 2 +- hw/intc/xlnx-zynqmp-ipi.c | 2 +- hw/ipack/ipack.c | 2 +- hw/ipack/tpci200.c | 2 +- hw/ipmi/isa_ipmi_bt.c | 2 +- hw/ipmi/isa_ipmi_kcs.c | 2 +- hw/isa/i82378.c | 2 +- hw/isa/lpc_ich9.c | 2 +- hw/isa/piix.c | 2 +- hw/isa/vt82c686.c | 2 +- hw/loongarch/virt.c | 2 +- hw/m68k/mcf5206.c | 2 +- hw/m68k/mcf5208.c | 2 +- hw/m68k/mcf_intc.c | 2 +- hw/m68k/next-cube.c | 2 +- hw/m68k/q800-glue.c | 2 +- hw/mips/malta.c | 2 +- hw/mips/mips_int.c | 2 +- hw/misc/arm_sysctl.c | 2 +- hw/misc/armsse-mhu.c | 2 +- hw/misc/aspeed_hace.c | 2 +- hw/misc/aspeed_lpc.c | 2 +- hw/misc/aspeed_peci.c | 2 +- hw/misc/aspeed_xdma.c | 2 +- hw/misc/avr_power.c | 2 +- hw/misc/bcm2835_mbox.c | 2 +- hw/misc/bcm2835_property.c | 2 +- hw/misc/eccmemctl.c | 2 +- hw/misc/imx_rngc.c | 2 +- hw/misc/iotkit-secctl.c | 2 +- hw/misc/ivshmem-flat.c | 2 +- hw/misc/lasi.c | 2 +- hw/misc/mac_via.c | 2 +- hw/misc/macio/cuda.c | 2 +- hw/misc/macio/gpio.c | 2 +- hw/misc/macio/mac_dbdma.c | 2 +- hw/misc/macio/pmu.c | 2 +- hw/misc/max78000_aes.c | 2 +- hw/misc/max78000_gcr.c | 2 +- hw/misc/max78000_icc.c | 2 +- hw/misc/max78000_trng.c | 2 +- hw/misc/mchp_pfsoc_ioscb.c | 2 +- hw/misc/mchp_pfsoc_sysreg.c | 2 +- hw/misc/mos6522.c | 2 +- hw/misc/mps2-scc.c | 2 +- hw/misc/npcm7xx_mft.c | 2 +- hw/misc/npcm7xx_pwm.c | 2 +- hw/misc/nrf51_rng.c | 2 +- hw/misc/omap_clk.c | 2 +- hw/misc/pc-testdev.c | 2 +- hw/misc/sifive_e_aon.c | 2 +- hw/misc/slavio_misc.c | 2 +- hw/misc/stm32_rcc.c | 2 +- hw/misc/stm32f4xx_exti.c | 2 +- hw/misc/stm32f4xx_syscfg.c | 2 +- hw/misc/stm32l4x5_exti.c | 2 +- hw/misc/stm32l4x5_rcc.c | 2 +- hw/misc/stm32l4x5_syscfg.c | 2 +- hw/misc/tz-mpc.c | 2 +- hw/misc/tz-msc.c | 2 +- hw/misc/tz-ppc.c | 2 +- hw/misc/xlnx-versal-cframe-reg.c | 2 +- hw/misc/xlnx-versal-cfu.c | 2 +- hw/misc/xlnx-versal-crl.c | 2 +- hw/misc/xlnx-versal-pmc-iou-slcr.c | 2 +- hw/misc/xlnx-versal-xramc.c | 2 +- hw/misc/xlnx-zynqmp-apu-ctrl.c | 2 +- hw/misc/xlnx-zynqmp-crf.c | 2 +- hw/net/allwinner-sun8i-emac.c | 2 +- hw/net/allwinner_emac.c | 2 +- hw/net/cadence_gem.c | 2 +- hw/net/can/can_kvaser_pci.c | 2 +- hw/net/can/can_mioe3680_pci.c | 2 +- hw/net/can/can_pcm3680_pci.c | 2 +- hw/net/can/can_sja1000.c | 2 +- hw/net/can/ctucan_core.c | 2 +- hw/net/can/ctucan_pci.c | 2 +- hw/net/can/xlnx-versal-canfd.c | 2 +- hw/net/can/xlnx-zynqmp-can.c | 2 +- hw/net/dp8393x.c | 2 +- hw/net/fsl_etsec/etsec.c | 2 +- hw/net/ftgmac100.c | 2 +- hw/net/i82596.c | 2 +- hw/net/imx_fec.c | 2 +- hw/net/lan9118.c | 2 +- hw/net/lan9118_phy.c | 2 +- hw/net/mcf_fec.c | 2 +- hw/net/msf2-emac.c | 2 +- hw/net/mv88w8618_eth.c | 2 +- hw/net/ne2000-pci.c | 2 +- hw/net/ne2000.c | 2 +- hw/net/npcm7xx_emc.c | 2 +- hw/net/opencores_eth.c | 2 +- hw/net/pcnet-pci.c | 2 +- hw/net/pcnet.c | 2 +- hw/net/pcnet.h | 2 +- hw/net/smc91c111.c | 2 +- hw/net/stellaris_enet.c | 2 +- hw/net/tulip.c | 2 +- hw/net/xgmac.c | 2 +- hw/net/xilinx_axienet.c | 2 +- hw/net/xilinx_ethlite.c | 2 +- hw/nubus/nubus-device.c | 2 +- hw/openrisc/openrisc_sim.c | 2 +- hw/openrisc/virt.c | 2 +- hw/pci-host/articia.c | 2 +- hw/pci-host/aspeed_pcie.c | 2 +- hw/pci-host/astro.c | 2 +- hw/pci-host/bonito.c | 2 +- hw/pci-host/designware.c | 2 +- hw/pci-host/dino.c | 2 +- hw/pci-host/gpex.c | 2 +- hw/pci-host/grackle.c | 2 +- hw/pci-host/gt64120.c | 2 +- hw/pci-host/mv64361.c | 2 +- hw/pci-host/pnv_phb3.c | 2 +- hw/pci-host/pnv_phb3_msi.c | 2 +- hw/pci-host/pnv_phb4.c | 2 +- hw/pci-host/ppc440_pcix.c | 2 +- hw/pci-host/ppc4xx_pci.c | 2 +- hw/pci-host/ppce500.c | 2 +- hw/pci-host/raven.c | 2 +- hw/pci-host/sabre.c | 2 +- hw/pci-host/sh_pci.c | 2 +- hw/pci-host/uninorth.c | 2 +- hw/pci-host/versatile.c | 2 +- hw/pci-host/xilinx-pcie.c | 2 +- hw/pci/pci.c | 2 +- hw/ppc/e500.c | 2 +- hw/ppc/pegasos.c | 2 +- hw/ppc/pnv_chiptod.c | 2 +- hw/ppc/pnv_i2c.c | 2 +- hw/ppc/pnv_lpc.c | 2 +- hw/ppc/pnv_occ.c | 2 +- hw/ppc/pnv_psi.c | 2 +- hw/ppc/pnv_sbe.c | 2 +- hw/ppc/ppc.c | 2 +- hw/ppc/ppc440_uc.c | 2 +- hw/ppc/ppc4xx_sdram.c | 2 +- hw/ppc/prep_systemio.c | 2 +- hw/ppc/spapr_events.c | 2 +- hw/ppc/spapr_irq.c | 2 +- hw/ppc/spapr_pci.c | 2 +- hw/riscv/riscv-iommu-sys.c | 2 +- hw/riscv/sifive_u.c | 2 +- hw/rtc/exynos4210_rtc.c | 2 +- hw/rtc/goldfish_rtc.c | 2 +- hw/rtc/ls7a_rtc.c | 2 +- hw/rtc/m48t59.c | 2 +- hw/rtc/mc146818rtc.c | 2 +- hw/rtc/pl031.c | 2 +- hw/rtc/xlnx-zynqmp-rtc.c | 2 +- hw/scsi/esp-pci.c | 2 +- hw/scsi/esp.c | 2 +- hw/scsi/lsi53c895a.c | 2 +- hw/scsi/ncr53c710.c | 2 +- hw/scsi/ncr53c710.h | 2 +- hw/sd/allwinner-sdhost.c | 2 +- hw/sd/aspeed_sdhci.c | 2 +- hw/sd/bcm2835_sdhost.c | 2 +- hw/sd/omap_mmc.c | 2 +- hw/sd/pl181.c | 2 +- hw/sd/sd.c | 2 +- hw/sd/sdhci-pci.c | 2 +- hw/sd/sdhci.c | 2 +- hw/sensor/adm1266.c | 2 +- hw/sensor/adm1272.c | 2 +- hw/sensor/max31785.c | 2 +- hw/sensor/max34451.c | 2 +- hw/sensor/tmp105.c | 2 +- hw/sh4/r2d.c | 2 +- hw/sh4/sh7750.c | 2 +- hw/sparc/leon3.c | 2 +- hw/sparc/sun4m.c | 2 +- hw/sparc/sun4m_iommu.c | 2 +- hw/sparc64/sun4u.c | 2 +- hw/ssi/allwinner-a10-spi.c | 2 +- hw/ssi/aspeed_smc.c | 2 +- hw/ssi/bcm2835_spi.c | 2 +- hw/ssi/ibex_spi_host.c | 2 +- hw/ssi/imx_spi.c | 2 +- hw/ssi/mss-spi.c | 2 +- hw/ssi/npcm7xx_fiu.c | 2 +- hw/ssi/npcm_pspi.c | 2 +- hw/ssi/pl022.c | 2 +- hw/ssi/pnv_spi.c | 2 +- hw/ssi/sifive_spi.c | 2 +- hw/ssi/xilinx_spi.c | 2 +- hw/ssi/xilinx_spips.c | 2 +- hw/ssi/xlnx-versal-ospi.c | 2 +- hw/timer/a9gtimer.c | 2 +- hw/timer/allwinner-a10-pit.c | 2 +- hw/timer/arm_mptimer.c | 2 +- hw/timer/arm_timer.c | 2 +- hw/timer/armv7m_systick.c | 2 +- hw/timer/aspeed_timer.c | 2 +- hw/timer/avr_timer16.c | 2 +- hw/timer/cadence_ttc.c | 2 +- hw/timer/cmsdk-apb-dualtimer.c | 2 +- hw/timer/cmsdk-apb-timer.c | 2 +- hw/timer/exynos4210_mct.c | 2 +- hw/timer/exynos4210_pwm.c | 2 +- hw/timer/grlib_gptimer.c | 2 +- hw/timer/hpet.c | 2 +- hw/timer/i8254.c | 2 +- hw/timer/ibex_timer.c | 2 +- hw/timer/imx_epit.c | 2 +- hw/timer/imx_gpt.c | 2 +- hw/timer/mss-timer.c | 2 +- hw/timer/npcm7xx_timer.c | 2 +- hw/timer/nrf51_timer.c | 2 +- hw/timer/pxa2xx_timer.c | 2 +- hw/timer/renesas_cmt.c | 2 +- hw/timer/renesas_tmr.c | 2 +- hw/timer/sh_timer.c | 2 +- hw/timer/sifive_pwm.c | 2 +- hw/timer/slavio_timer.c | 2 +- hw/timer/sse-timer.c | 2 +- hw/timer/stm32f2xx_timer.c | 2 +- hw/timer/xilinx_timer.c | 2 +- hw/tpm/tpm_tis_common.c | 2 +- hw/ufs/ufs.c | 2 +- hw/usb/hcd-dwc2.h | 2 +- hw/usb/hcd-ehci.c | 2 +- hw/usb/hcd-ohci-sysbus.c | 2 +- hw/usb/hcd-ohci.c | 2 +- hw/usb/hcd-uhci.c | 2 +- hw/usb/hcd-xhci-sysbus.c | 2 +- hw/usb/vt82c686-uhci-pci.c | 2 +- hw/usb/xlnx-versal-usb2-ctrl-regs.c | 2 +- hw/virtio/virtio-mmio.c | 2 +- hw/vmapple/aes.c | 2 +- hw/vmapple/vmapple.c | 2 +- hw/watchdog/cmsdk-apb-watchdog.c | 2 +- hw/xen/xen-pvh-common.c | 2 +- hw/xtensa/mx_pic.c | 2 +- hw/xtensa/pic_cpu.c | 2 +- include/hw/adc/npcm7xx_adc.h | 2 +- include/hw/char/parallel.h | 2 +- include/hw/{ => core}/irq.h | 0 include/hw/display/macfb.h | 2 +- include/hw/i2c/npcm7xx_smbus.h | 2 +- include/hw/ide/ahci-pci.h | 2 +- include/hw/input/pl050.h | 2 +- include/hw/ipack/ipack.h | 2 +- include/hw/misc/bcm2835_mphi.h | 2 +- include/hw/misc/npcm7xx_mft.h | 2 +- include/hw/misc/npcm7xx_pwm.h | 2 +- include/hw/misc/xlnx-versal-trng.h | 2 +- include/hw/net/imx_fec.h | 2 +- include/hw/net/npcm7xx_emc.h | 2 +- include/hw/net/npcm_gmac.h | 2 +- include/hw/nvram/xlnx-bbram.h | 2 +- include/hw/nvram/xlnx-versal-efuse.h | 2 +- include/hw/nvram/xlnx-zynqmp-efuse.h | 2 +- include/hw/ppc/spapr_vio.h | 2 +- include/hw/timer/bcm2835_systmr.h | 2 +- include/hw/timer/stellaris-gptm.h | 2 +- include/hw/watchdog/sbsa_gwdt.h | 2 +- include/hw/watchdog/wdt_imx2.h | 2 +- rust/hw/core/wrapper.h | 2 +- system/qtest.c | 2 +- target/arm/cpregs-gcs.c | 2 +- target/arm/cpregs-pmu.c | 2 +- target/arm/helper.c | 2 +- target/arm/hvf/hvf.c | 2 +- target/arm/kvm.c | 2 +- target/i386/tcg/system/fpu_helper.c | 2 +- target/loongarch/kvm/kvm.c | 2 +- target/loongarch/tcg/csr_helper.c | 2 +- target/mips/system/cp0_timer.c | 2 +- target/riscv/kvm/kvm-cpu.c | 2 +- target/rx/helper.c | 2 +- 438 files changed, 437 insertions(+), 437 deletions(-) rename include/hw/{ => core}/irq.h (100%) diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 02b78717b1..f85eb42d78 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -42,7 +42,7 @@ #include "qemu/event_notifier.h" #include "qemu/main-loop.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/visitor.h" #include "qapi/qapi-types-common.h" #include "qapi/qapi-visit-common.h" diff --git a/hw/acpi/core.c b/hw/acpi/core.c index ff16582803..2b74bed882 100644 --- a/hw/acpi/core.c +++ b/hw/acpi/core.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/acpi/acpi.h" #include "hw/nvram/fw_cfg.h" #include "qemu/config-file.h" diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index e7b773d84d..675ec43d09 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -15,7 +15,7 @@ #include "hw/acpi/pcihp.h" #include "hw/acpi/generic_event_device.h" #include "hw/pci/pci.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/mem/pc-dimm.h" #include "hw/mem/nvdimm.h" #include "hw/pci/pci_device.h" diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 9e0892a51f..1e3c634541 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/apm.h" #include "hw/i2c/pm_smbus.h" #include "hw/pci/pci.h" diff --git a/hw/adc/aspeed_adc.c b/hw/adc/aspeed_adc.c index 3e820cae1e..564979f24d 100644 --- a/hw/adc/aspeed_adc.c +++ b/hw/adc/aspeed_adc.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "hw/adc/aspeed_adc.h" diff --git a/hw/adc/zynq-xadc.c b/hw/adc/zynq-xadc.c index 748a51ba78..1934ef0b1a 100644 --- a/hw/adc/zynq-xadc.c +++ b/hw/adc/zynq-xadc.c @@ -14,7 +14,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/adc/zynq-xadc.h" #include "migration/vmstate.h" #include "qemu/timer.h" diff --git a/hw/alpha/typhoon.c b/hw/alpha/typhoon.c index 4c56f981d7..01fda4b1c8 100644 --- a/hw/alpha/typhoon.c +++ b/hw/alpha/typhoon.c @@ -13,7 +13,7 @@ #include "qapi/error.h" #include "hw/pci/pci_host.h" #include "cpu.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "alpha_sys.h" diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 50ab7f4810..c0d99182bf 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -22,7 +22,7 @@ #include "hw/arm/armsse.h" #include "hw/arm/armsse-version.h" #include "hw/arm/boot.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" /* diff --git a/hw/arm/exynos4210.c b/hw/arm/exynos4210.c index 76001ff0df..2d8e257ca2 100644 --- a/hw/arm/exynos4210.c +++ b/hw/arm/exynos4210.c @@ -26,7 +26,7 @@ #include "exec/tswap.h" #include "cpu.h" #include "hw/cpu/a9mpcore.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/blockdev.h" #include "system/system.h" #include "hw/sysbus.h" diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index 66af0e2376..f07dd452fc 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -34,7 +34,7 @@ #include "hw/net/lan9118.h" #include "hw/qdev-properties.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "target/arm/cpu-qom.h" #define SMDK_LAN9118_BASE_ADDR 0x05000000 diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index 436fcdd510..b24df11db9 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -24,7 +24,7 @@ #include "qemu/error-report.h" #include "hw/char/pl011.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sd/sd.h" #include "qom/object.h" #include "qemu/audio.h" diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index 3188caf222..a0d917f9a9 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -75,7 +75,7 @@ #include "hw/core/split-irq.h" #include "hw/qdev-clock.h" #include "qom/object.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #define MPS2TZ_NUMIRQ_MAX 96 #define MPS2TZ_RAM_MAX 5 diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index 3e62454096..9852e8f764 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -27,7 +27,7 @@ #include "ui/console.h" #include "hw/i2c/i2c.h" #include "hw/i2c/bitbang_i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/or-irq.h" #include "hw/audio/wm8750.h" #include "system/block-backend.h" diff --git a/hw/arm/omap1.c b/hw/arm/omap1.c index 74458fb7c6..994e5a919e 100644 --- a/hw/arm/omap1.c +++ b/hw/arm/omap1.c @@ -25,7 +25,7 @@ #include "cpu.h" #include "system/address-spaces.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/arm/boot.h" #include "hw/arm/omap.h" diff --git a/hw/arm/realview.c b/hw/arm/realview.c index 97008490f6..65506768e4 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -27,7 +27,7 @@ #include "hw/char/pl011.h" #include "hw/cpu/a9mpcore.h" #include "hw/intc/realview_gic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/i2c/arm_sbcon_i2c.h" #include "hw/sd/sd.h" #include "qemu/audio.h" diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index bcf8af8dc7..ae4fba1599 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qemu/bitops.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/qdev-properties.h" diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index d1cbf43777..34cbcbe32c 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -26,7 +26,7 @@ #include "hw/arm/armv7m.h" #include "hw/char/pl011.h" #include "hw/input/stellaris_gamepad.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/watchdog/cmsdk-apb-watchdog.h" #include "migration/vmstate.h" #include "hw/misc/unimp.h" diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index 059b07907d..95dda07852 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -28,7 +28,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index dd1047f6c6..94661b83d0 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -19,7 +19,7 @@ #include "hw/pci/pci.h" #include "hw/i2c/i2c.h" #include "hw/i2c/arm_sbcon_i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/core/boards.h" #include "hw/block/flash.h" #include "qemu/error-report.h" diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 25fb2bab56..6155db2b09 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -68,7 +68,7 @@ #include "hw/intc/arm_gic.h" #include "hw/intc/arm_gicv3_common.h" #include "hw/intc/arm_gicv3_its_common.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "kvm_arm.h" #include "hvf_arm.h" #include "hw/firmware/smbios.h" diff --git a/hw/audio/asc.c b/hw/audio/asc.c index 0abb106979..b6f4204500 100644 --- a/hw/audio/asc.c +++ b/hw/audio/asc.c @@ -14,7 +14,7 @@ #include "qemu/timer.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/audio.h" #include "hw/audio/asc.h" #include "hw/qdev-properties.h" diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c index 98fdbc5b72..8368172f40 100644 --- a/hw/audio/cs4231a.c +++ b/hw/audio/cs4231a.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/audio/model.h" #include "qemu/audio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/audio/gus.c b/hw/audio/gus.c index 68f89e994c..6c41b25486 100644 --- a/hw/audio/gus.c +++ b/hw/audio/gus.c @@ -27,7 +27,7 @@ #include "qemu/module.h" #include "hw/audio/model.h" #include "qemu/audio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c index a483f4e70d..ba9bd6befd 100644 --- a/hw/audio/marvell_88w8618.c +++ b/hw/audio/marvell_88w8618.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/audio/wm8750.h" #include "qemu/audio.h" diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c index fd3d09611f..7bb2c81afc 100644 --- a/hw/audio/pl041.c +++ b/hw/audio/pl041.c @@ -21,7 +21,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/log.h" diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c index 1e3c4caf5e..6ca31a0e64 100644 --- a/hw/audio/sb16.c +++ b/hw/audio/sb16.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/audio/model.h" #include "qemu/audio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/block/fdc-isa.c b/hw/block/fdc-isa.c index 6d1790e0e6..0034c3594a 100644 --- a/hw/block/fdc-isa.c +++ b/hw/block/fdc-isa.c @@ -33,7 +33,7 @@ #include "qemu/error-report.h" #include "qemu/timer.h" #include "hw/acpi/acpi_aml_interface.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/block/fdc.c b/hw/block/fdc.c index d0f08c7be5..e0e53ba038 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -33,7 +33,7 @@ #include "qemu/error-report.h" #include "qemu/timer.h" #include "qemu/memalign.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/avr_usart.c b/hw/char/avr_usart.c index fae15217e9..e98ad53e44 100644 --- a/hw/char/avr_usart.c +++ b/hw/char/avr_usart.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "hw/char/avr_usart.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c index 2b397f2ff3..03428efeea 100644 --- a/hw/char/bcm2835_aux.c +++ b/hw/char/bcm2835_aux.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "hw/char/bcm2835_aux.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c index 0dfa356b6d..738ba3114b 100644 --- a/hw/char/cadence_uart.c +++ b/hw/char/cadence_uart.c @@ -30,7 +30,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/char/cadence_uart.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties-system.h" #include "trace.h" diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c index 32090f3516..a5ec61a004 100644 --- a/hw/char/cmsdk-apb-uart.c +++ b/hw/char/cmsdk-apb-uart.c @@ -26,7 +26,7 @@ #include "chardev/char-fe.h" #include "chardev/char-serial.h" #include "hw/char/cmsdk-apb-uart.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties-system.h" REG32(DATA, 0) diff --git a/hw/char/diva-gsp.c b/hw/char/diva-gsp.c index e1f0713cb7..835594e5cb 100644 --- a/hw/char/diva-gsp.c +++ b/hw/char/diva-gsp.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "hw/char/serial.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/escc.c b/hw/char/escc.c index afe4ca483e..27269dca64 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c index 9e45d81990..8ba310fd7a 100644 --- a/hw/char/exynos4210_uart.c +++ b/hw/char/exynos4210_uart.c @@ -30,7 +30,7 @@ #include "chardev/char-serial.h" #include "hw/arm/exynos4210.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/goldfish_tty.c b/hw/char/goldfish_tty.c index a37408adae..821b321850 100644 --- a/hw/char/goldfish_tty.c +++ b/hw/char/goldfish_tty.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c index b2d5a40bb4..15925eb2e6 100644 --- a/hw/char/grlib_apbuart.c +++ b/hw/char/grlib_apbuart.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/char/grlib_uart.h" diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c index d6f0d18c77..db85251109 100644 --- a/hw/char/ibex_uart.c +++ b/hw/char/ibex_uart.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/char/ibex_uart.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c index 509b0141d0..9f13236f29 100644 --- a/hw/char/imx_serial.c +++ b/hw/char/imx_serial.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/char/imx_serial.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c index 25d7fc9574..6e38916150 100644 --- a/hw/char/ipoctal232.c +++ b/hw/char/ipoctal232.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/ipack/ipack.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/char/max78000_uart.c b/hw/char/max78000_uart.c index c76c0e759b..5fc933123e 100644 --- a/hw/char/max78000_uart.c +++ b/hw/char/max78000_uart.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/char/max78000_uart.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/log.h" diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c index f14de59530..d9d551924b 100644 --- a/hw/char/mcf_uart.c +++ b/hw/char/mcf_uart.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "qemu/module.h" #include "qapi/error.h" diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c index 41d423446f..39d144538d 100644 --- a/hw/char/nrf51_uart.c +++ b/hw/char/nrf51_uart.c @@ -16,7 +16,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/char/nrf51_uart.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 01335d9437..75fdb8158e 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/char/pl011.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" diff --git a/hw/char/renesas_sci.c b/hw/char/renesas_sci.c index b9d0ed1c89..b32e41d5b8 100644 --- a/hw/char/renesas_sci.c +++ b/hw/char/renesas_sci.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c index 34f30fb70b..3460856998 100644 --- a/hw/char/serial-pci-multi.c +++ b/hw/char/serial-pci-multi.c @@ -30,7 +30,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/char/serial.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/serial-pci.c b/hw/char/serial-pci.c index 46efabc4cb..d05d089899 100644 --- a/hw/char/serial-pci.c +++ b/hw/char/serial-pci.c @@ -29,7 +29,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/char/serial.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/char/serial.c b/hw/char/serial.c index 03fec3fe75..11685b397b 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qemu/bitops.h" #include "hw/char/serial.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "chardev/char-serial.h" #include "qapi/error.h" diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c index 83227a84a6..ee430dd3d2 100644 --- a/hw/char/sh_serial.c +++ b/hw/char/sh_serial.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-core.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/sifive_uart.c b/hw/char/sifive_uart.c index e7357d585a..473374d3de 100644 --- a/hw/char/sifive_uart.c +++ b/hw/char/sifive_uart.c @@ -22,7 +22,7 @@ #include "migration/vmstate.h" #include "chardev/char.h" #include "chardev/char-fe.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/char/sifive_uart.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c index 45c30643a7..49bbda03b8 100644 --- a/hw/char/stm32f2xx_usart.c +++ b/hw/char/stm32f2xx_usart.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/char/stm32f2xx_usart.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/log.h" diff --git a/hw/char/stm32l4x5_usart.c b/hw/char/stm32l4x5_usart.c index 60d8ab5a0e..ce4a35da8f 100644 --- a/hw/char/stm32l4x5_usart.c +++ b/hw/char/stm32l4x5_usart.c @@ -24,7 +24,7 @@ #include "migration/vmstate.h" #include "hw/char/stm32l4x5_usart.h" #include "hw/core/clock.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c index 8feb58a898..da1ecd249c 100644 --- a/hw/char/xilinx_uartlite.c +++ b/hw/char/xilinx_uartlite.c @@ -26,7 +26,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "hw/char/xilinx_uartlite.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" diff --git a/hw/core/gpio.c b/hw/core/gpio.c index c7c2936fc5..11f26a2f2d 100644 --- a/hw/core/gpio.c +++ b/hw/core/gpio.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/qdev-core.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/error.h" static NamedGPIOList *qdev_get_named_gpio_list(DeviceState *dev, diff --git a/hw/core/irq.c b/hw/core/irq.c index 0c768f7704..106805e241 100644 --- a/hw/core/irq.c +++ b/hw/core/irq.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" #include "qemu/main-loop.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qom/object.h" void qemu_set_irq(qemu_irq irq, int level) diff --git a/hw/core/or-irq.c b/hw/core/or-irq.c index 3942c70993..61006672ad 100644 --- a/hw/core/or-irq.c +++ b/hw/core/or-irq.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/or-irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 423a3a1d66..f9f56c66ae 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -32,7 +32,7 @@ #include "qapi/visitor.h" #include "qemu/error-report.h" #include "qemu/option.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/core/boards.h" #include "hw/sysbus.h" diff --git a/hw/core/split-irq.c b/hw/core/split-irq.c index f8b48750c5..d0aaa108eb 100644 --- a/hw/core/split-irq.c +++ b/hw/core/split-irq.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/core/split-irq.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/cpu/a15mpcore.c b/hw/cpu/a15mpcore.c index bd36dd94d4..1a6fb914f3 100644 --- a/hw/cpu/a15mpcore.c +++ b/hw/cpu/a15mpcore.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/cpu/a15mpcore.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "system/kvm.h" #include "kvm_arm.h" diff --git a/hw/cpu/a9mpcore.c b/hw/cpu/a9mpcore.c index 64bebbd19c..9f8e0f70c4 100644 --- a/hw/cpu/a9mpcore.c +++ b/hw/cpu/a9mpcore.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/cpu/a9mpcore.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/core/cpu.h" #include "target/arm/cpu-qom.h" diff --git a/hw/cpu/arm11mpcore.c b/hw/cpu/arm11mpcore.c index 01772e7f77..1953d12f61 100644 --- a/hw/cpu/arm11mpcore.c +++ b/hw/cpu/arm11mpcore.c @@ -12,7 +12,7 @@ #include "qemu/module.h" #include "hw/cpu/arm11mpcore.h" #include "hw/intc/realview_gic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #define ARM11MPCORE_NUM_GIC_PRIORITY_BITS 4 diff --git a/hw/cpu/realview_mpcore.c b/hw/cpu/realview_mpcore.c index 099b71a9ef..525f03e9e5 100644 --- a/hw/cpu/realview_mpcore.c +++ b/hw/cpu/realview_mpcore.c @@ -13,7 +13,7 @@ #include "qemu/module.h" #include "hw/cpu/arm11mpcore.h" #include "hw/intc/realview_gic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qom/object.h" #define TYPE_REALVIEW_MPCORE_RIRQ "realview_mpcore" diff --git a/hw/display/apple-gfx-mmio.m b/hw/display/apple-gfx-mmio.m index b0b6e2993e..b83f5f4fe6 100644 --- a/hw/display/apple-gfx-mmio.m +++ b/hw/display/apple-gfx-mmio.m @@ -16,7 +16,7 @@ #include "qemu/log.h" #include "block/aio-wait.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "apple-gfx.h" #include "trace.h" diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c index 1bb2ee45a0..f8f13b55cb 100644 --- a/hw/display/bcm2835_fb.c +++ b/hw/display/bcm2835_fb.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "hw/display/bcm2835_fb.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "ui/console.h" #include "framebuffer.h" #include "ui/pixel_ops.h" diff --git a/hw/display/cg3.c b/hw/display/cg3.c index daeef15217..8191237124 100644 --- a/hw/display/cg3.c +++ b/hw/display/cg3.c @@ -30,7 +30,7 @@ #include "ui/console.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loader.h" #include "hw/qdev-properties.h" #include "qemu/log.h" diff --git a/hw/display/dm163.c b/hw/display/dm163.c index f8340d8275..e78804693c 100644 --- a/hw/display/dm163.c +++ b/hw/display/dm163.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/display/dm163.h" #include "ui/console.h" diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c index 49c180fec0..8d8062f427 100644 --- a/hw/display/exynos4210_fimd.c +++ b/hw/display/exynos4210_fimd.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/qdev-properties.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "ui/console.h" diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c index a6ddc21d3e..10686cd676 100644 --- a/hw/display/g364fb.c +++ b/hw/display/g364fb.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/display/omap_lcdc.c b/hw/display/omap_lcdc.c index 3532a801be..90a9731454 100644 --- a/hw/display/omap_lcdc.c +++ b/hw/display/omap_lcdc.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "ui/console.h" #include "hw/arm/omap.h" #include "framebuffer.h" diff --git a/hw/display/pl110.c b/hw/display/pl110.c index 09c3c59e0e..e78a55184e 100644 --- a/hw/display/pl110.c +++ b/hw/display/pl110.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/display/xlnx_dp.c b/hw/display/xlnx_dp.c index a248b943a5..a24e95f0a7 100644 --- a/hw/display/xlnx_dp.c +++ b/hw/display/xlnx_dp.c @@ -28,7 +28,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/display/xlnx_dp.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #ifndef DEBUG_DP diff --git a/hw/dma/bcm2835_dma.c b/hw/dma/bcm2835_dma.c index a2771ddcb5..d07459de2d 100644 --- a/hw/dma/bcm2835_dma.c +++ b/hw/dma/bcm2835_dma.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/dma/bcm2835_dma.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/dma/omap_dma.c b/hw/dma/omap_dma.c index 101f91f4a3..2bf9ebad56 100644 --- a/hw/dma/omap_dma.c +++ b/hw/dma/omap_dma.c @@ -21,7 +21,7 @@ #include "qemu/log.h" #include "qemu/timer.h" #include "hw/arm/omap.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/arm/soc_dma.h" struct omap_dma_channel_s { diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c index 277d934322..28f7937164 100644 --- a/hw/dma/pl080.c +++ b/hw/dma/pl080.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "hw/dma/pl080.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qapi/error.h" diff --git a/hw/dma/pl330.c b/hw/dma/pl330.c index f9c91f924b..a9e6d2746f 100644 --- a/hw/dma/pl330.c +++ b/hw/dma/pl330.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" #include "qemu/cutils.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/dma/rc4030.c b/hw/dma/rc4030.c index b6ed1d4643..8ce74257b6 100644 --- a/hw/dma/rc4030.c +++ b/hw/dma/rc4030.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/mips/mips.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index 48de3a2478..bae77544b2 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -24,7 +24,7 @@ #include "qemu/bitops.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/dma/sparc32_dma.c b/hw/dma/sparc32_dma.c index 60c23b69e5..9f56faf9a5 100644 --- a/hw/dma/sparc32_dma.c +++ b/hw/dma/sparc32_dma.c @@ -26,7 +26,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sparc/sparc32_dma.h" #include "hw/sparc/sun4m_iommu.h" diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index 2020399fd5..9b05080ae5 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "qemu/timer.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" #include "qemu/log.h" diff --git a/hw/dma/xlnx-zdma.c b/hw/dma/xlnx-zdma.c index 0c075e7d0d..660fc21b6d 100644 --- a/hw/dma/xlnx-zdma.c +++ b/hw/dma/xlnx-zdma.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "hw/dma/xlnx-zdma.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/bitops.h" diff --git a/hw/dma/xlnx-zynq-devcfg.c b/hw/dma/xlnx-zynq-devcfg.c index 8141d46033..cf00aa863d 100644 --- a/hw/dma/xlnx-zynq-devcfg.c +++ b/hw/dma/xlnx-zynq-devcfg.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/dma/xlnx-zynq-devcfg.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qemu/bitops.h" #include "system/dma.h" diff --git a/hw/dma/xlnx_csu_dma.c b/hw/dma/xlnx_csu_dma.c index d8c7da1a50..0b1185325b 100644 --- a/hw/dma/xlnx_csu_dma.c +++ b/hw/dma/xlnx_csu_dma.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/dma/xlnx_dpdma.c b/hw/dma/xlnx_dpdma.c index 3d88ccc8da..32f56036a4 100644 --- a/hw/dma/xlnx_dpdma.c +++ b/hw/dma/xlnx_dpdma.c @@ -27,7 +27,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/dma/xlnx_dpdma.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #ifndef DEBUG_DPDMA diff --git a/hw/gpio/aspeed_gpio.c b/hw/gpio/aspeed_gpio.c index 2d78bf9515..85a5acd708 100644 --- a/hw/gpio/aspeed_gpio.c +++ b/hw/gpio/aspeed_gpio.c @@ -13,7 +13,7 @@ #include "hw/misc/aspeed_scu.h" #include "qapi/error.h" #include "qapi/visitor.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "trace.h" #include "hw/registerfields.h" diff --git a/hw/gpio/bcm2835_gpio.c b/hw/gpio/bcm2835_gpio.c index dfb5d5cb57..bd9170b893 100644 --- a/hw/gpio/bcm2835_gpio.c +++ b/hw/gpio/bcm2835_gpio.c @@ -20,7 +20,7 @@ #include "migration/vmstate.h" #include "hw/sd/sd.h" #include "hw/gpio/bcm2835_gpio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #define GPFSEL0 0x00 #define GPFSEL1 0x04 diff --git a/hw/gpio/bcm2838_gpio.c b/hw/gpio/bcm2838_gpio.c index 1069e7811b..dab50faf28 100644 --- a/hw/gpio/bcm2838_gpio.c +++ b/hw/gpio/bcm2838_gpio.c @@ -19,7 +19,7 @@ #include "migration/vmstate.h" #include "hw/sd/sd.h" #include "hw/gpio/bcm2838_gpio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #define GPFSEL0 0x00 #define GPFSEL1 0x04 diff --git a/hw/gpio/gpio_key.c b/hw/gpio/gpio_key.c index 40c028bed9..f8cf4da239 100644 --- a/hw/gpio/gpio_key.c +++ b/hw/gpio/gpio_key.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/gpio/imx_gpio.c b/hw/gpio/imx_gpio.c index 450ece4548..842c997a2a 100644 --- a/hw/gpio/imx_gpio.c +++ b/hw/gpio/imx_gpio.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/gpio/imx_gpio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/gpio/mpc8xxx.c b/hw/gpio/mpc8xxx.c index 257497af58..377832e9d2 100644 --- a/hw/gpio/mpc8xxx.c +++ b/hw/gpio/mpc8xxx.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/gpio/npcm7xx_gpio.c b/hw/gpio/npcm7xx_gpio.c index 66f8256a7a..59b95d232b 100644 --- a/hw/gpio/npcm7xx_gpio.c +++ b/hw/gpio/npcm7xx_gpio.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" #include "hw/gpio/npcm7xx_gpio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/gpio/nrf51_gpio.c b/hw/gpio/nrf51_gpio.c index d94c0c47da..567eb1fe7d 100644 --- a/hw/gpio/nrf51_gpio.c +++ b/hw/gpio/nrf51_gpio.c @@ -14,7 +14,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/gpio/nrf51_gpio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/gpio/omap_gpio.c b/hw/gpio/omap_gpio.c index f27806b774..547f0a15a2 100644 --- a/hw/gpio/omap_gpio.c +++ b/hw/gpio/omap_gpio.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/arm/omap.h" #include "hw/sysbus.h" diff --git a/hw/gpio/pca9552.c b/hw/gpio/pca9552.c index 1e10238b2e..fe1d8dbffa 100644 --- a/hw/gpio/pca9552.c +++ b/hw/gpio/pca9552.c @@ -17,7 +17,7 @@ #include "hw/qdev-properties.h" #include "hw/gpio/pca9552.h" #include "hw/gpio/pca9552_regs.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/gpio/pca9554.c b/hw/gpio/pca9554.c index eac0d23be3..c6cdd27b3f 100644 --- a/hw/gpio/pca9554.c +++ b/hw/gpio/pca9554.c @@ -13,7 +13,7 @@ #include "hw/qdev-properties.h" #include "hw/gpio/pca9554.h" #include "hw/gpio/pca9554_regs.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/gpio/pcf8574.c b/hw/gpio/pcf8574.c index 274b44bb61..f871f1e788 100644 --- a/hw/gpio/pcf8574.c +++ b/hw/gpio/pcf8574.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/i2c/i2c.h" #include "hw/gpio/pcf8574.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/gpio/pl061.c b/hw/gpio/pl061.c index a3ac038c2f..09b3224712 100644 --- a/hw/gpio/pl061.c +++ b/hw/gpio/pl061.c @@ -30,7 +30,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/gpio/sifive_gpio.c b/hw/gpio/sifive_gpio.c index 5831647b4d..63ca721fad 100644 --- a/hw/gpio/sifive_gpio.c +++ b/hw/gpio/sifive_gpio.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/gpio/sifive_gpio.h" #include "migration/vmstate.h" diff --git a/hw/gpio/stm32l4x5_gpio.c b/hw/gpio/stm32l4x5_gpio.c index 42fe984c49..a5a38da638 100644 --- a/hw/gpio/stm32l4x5_gpio.c +++ b/hw/gpio/stm32l4x5_gpio.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/gpio/stm32l4x5_gpio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/core/clock.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" diff --git a/hw/gpio/zaurus.c b/hw/gpio/zaurus.c index 590ffde89d..0a9f76e774 100644 --- a/hw/gpio/zaurus.c +++ b/hw/gpio/zaurus.c @@ -17,7 +17,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/i2c/allwinner-i2c.c b/hw/i2c/allwinner-i2c.c index fe887e1c6a..c879e5009d 100644 --- a/hw/i2c/allwinner-i2c.c +++ b/hw/i2c/allwinner-i2c.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/i2c/allwinner-i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/i2c/i2c.h" #include "qemu/log.h" diff --git a/hw/i2c/aspeed_i2c.c b/hw/i2c/aspeed_i2c.c index 83fb906bdc..3d66dd863a 100644 --- a/hw/i2c/aspeed_i2c.c +++ b/hw/i2c/aspeed_i2c.c @@ -27,7 +27,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "hw/i2c/aspeed_i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" #include "trace.h" diff --git a/hw/i2c/bcm2835_i2c.c b/hw/i2c/bcm2835_i2c.c index be11cca2a9..34de1f36e5 100644 --- a/hw/i2c/bcm2835_i2c.c +++ b/hw/i2c/bcm2835_i2c.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/i2c/bcm2835_i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" static void bcm2835_i2c_update_interrupt(BCM2835I2CState *s) diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c index e020f314e2..d379cfd775 100644 --- a/hw/i2c/bitbang_i2c.c +++ b/hw/i2c/bitbang_i2c.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/i2c/bitbang_i2c.h" #include "hw/sysbus.h" #include "qemu/module.h" diff --git a/hw/i2c/exynos4210_i2c.c b/hw/i2c/exynos4210_i2c.c index 9d0c1cdaa8..dd72dda4fd 100644 --- a/hw/i2c/exynos4210_i2c.c +++ b/hw/i2c/exynos4210_i2c.c @@ -26,7 +26,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/i2c/i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qom/object.h" #ifndef EXYNOS4_I2C_DEBUG diff --git a/hw/i2c/imx_i2c.c b/hw/i2c/imx_i2c.c index d26177c85d..88269653e2 100644 --- a/hw/i2c/imx_i2c.c +++ b/hw/i2c/imx_i2c.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/i2c/imx_i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/i2c/i2c.h" #include "qemu/log.h" diff --git a/hw/i2c/mpc_i2c.c b/hw/i2c/mpc_i2c.c index 25f91b7bc8..e2097f819c 100644 --- a/hw/i2c/mpc_i2c.c +++ b/hw/i2c/mpc_i2c.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/i2c/i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/i2c/omap_i2c.c b/hw/i2c/omap_i2c.c index 751bf748fd..6ac151d851 100644 --- a/hw/i2c/omap_i2c.c +++ b/hw/i2c/omap_i2c.c @@ -21,7 +21,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/i2c/i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/arm/omap.h" #include "hw/sysbus.h" diff --git a/hw/i2c/ppc4xx_i2c.c b/hw/i2c/ppc4xx_i2c.c index 09d4c49d65..d38efd7288 100644 --- a/hw/i2c/ppc4xx_i2c.c +++ b/hw/i2c/ppc4xx_i2c.c @@ -30,7 +30,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/i2c/ppc4xx_i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #define PPC4xx_I2C_MEM_SIZE 18 diff --git a/hw/i386/kvm/i8259.c b/hw/i386/kvm/i8259.c index 8a72d6e4dd..66f37e1303 100644 --- a/hw/i386/kvm/i8259.c +++ b/hw/i386/kvm/i8259.c @@ -15,7 +15,7 @@ #include "hw/intc/i8259.h" #include "qemu/module.h" #include "hw/intc/kvm_irqcount.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/kvm.h" #include "qom/object.h" diff --git a/hw/i386/kvm/xen_evtchn.c b/hw/i386/kvm/xen_evtchn.c index dd566c4967..a510ab871d 100644 --- a/hw/i386/kvm/xen_evtchn.c +++ b/hw/i386/kvm/xen_evtchn.c @@ -34,7 +34,7 @@ #include "hw/pci/pci.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/xen/xen_backend_ops.h" #include "xen_evtchn.h" diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index 94d22a232a..e3bafb83af 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -31,7 +31,7 @@ #include "microvm-dt.h" #include "hw/loader.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/i386/kvm/clock.h" #include "hw/i386/microvm.h" #include "hw/i386/x86.h" diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index f6b9a1bc40..3f8fd07831 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -38,7 +38,7 @@ #include "hw/usb/usb.h" #include "net/net.h" #include "hw/ide/pci.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/kvm.h" #include "hw/i386/kvm/clock.h" #include "hw/sysbus.h" diff --git a/hw/i386/port92.c b/hw/i386/port92.c index 39b6f3178f..48a174316f 100644 --- a/hw/i386/port92.c +++ b/hw/i386/port92.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "system/runstate.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/i386/pc.h" #include "trace.h" diff --git a/hw/i386/x86-common.c b/hw/i386/x86-common.c index f77e2e6304..397e856b37 100644 --- a/hw/i386/x86-common.c +++ b/hw/i386/x86-common.c @@ -37,7 +37,7 @@ #include "target/i386/sev.h" #include "hw/acpi/cpu_hotplug.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loader.h" #include "multiboot.h" #include "elf.h" diff --git a/hw/i386/x86-cpu.c b/hw/i386/x86-cpu.c index 1a86a853d5..276f2b0cdf 100644 --- a/hw/i386/x86-cpu.c +++ b/hw/i386/x86-cpu.c @@ -28,7 +28,7 @@ #include "hw/i386/x86.h" #include "target/i386/cpu.h" #include "hw/intc/i8259.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/kvm.h" /* TSC handling */ diff --git a/hw/i386/xen/xen-hvm.c b/hw/i386/xen/xen-hvm.c index ceb2242aa7..591da26d45 100644 --- a/hw/i386/xen/xen-hvm.c +++ b/hw/i386/xen/xen-hvm.c @@ -17,7 +17,7 @@ #include "hw/hw.h" #include "hw/i386/pc.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/i386/apic-msidef.h" #include "hw/xen/xen-x86.h" #include "qemu/range.h" diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 14bc66fb7f..08f51c8e36 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -22,7 +22,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qemu/error-report.h" diff --git a/hw/ide/core.c b/hw/ide/core.c index 8c380abf7c..b45abf067b 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "migration/vmstate.h" #include "qemu/error-report.h" diff --git a/hw/ide/macio.c b/hw/ide/macio.c index c23bf32d2b..07db7dc34a 100644 --- a/hw/ide/macio.c +++ b/hw/ide/macio.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ppc/mac_dbdma.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/ide/pci.c b/hw/ide/pci.c index 1e50bb9e48..7ce1ae67ab 100644 --- a/hw/ide/pci.c +++ b/hw/ide/pci.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci.h" #include "migration/vmstate.h" #include "system/dma.h" diff --git a/hw/ide/via.c b/hw/ide/via.c index dedc2674c0..3a77d744ca 100644 --- a/hw/ide/via.c +++ b/hw/ide/via.c @@ -32,7 +32,7 @@ #include "system/dma.h" #include "hw/isa/vt82c686.h" #include "hw/ide/pci.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "ide-internal.h" #include "trace.h" diff --git a/hw/input/lasips2.c b/hw/input/lasips2.c index de625723c7..70a179907c 100644 --- a/hw/input/lasips2.c +++ b/hw/input/lasips2.c @@ -31,7 +31,7 @@ #include "trace.h" #include "system/address-spaces.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/error.h" diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c index 71f5f976e9..48b457cac7 100644 --- a/hw/input/pckbd.c +++ b/hw/input/pckbd.c @@ -31,7 +31,7 @@ #include "migration/vmstate.h" #include "hw/acpi/acpi_aml_interface.h" #include "hw/input/ps2.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/input/i8042.h" #include "hw/qdev-properties.h" #include "system/reset.h" diff --git a/hw/input/pl050.c b/hw/input/pl050.c index c5f4a3fa84..cb8efc74f7 100644 --- a/hw/input/pl050.c +++ b/hw/input/pl050.c @@ -20,7 +20,7 @@ #include "migration/vmstate.h" #include "hw/input/ps2.h" #include "hw/input/pl050.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/log.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/input/ps2.c b/hw/input/ps2.c index 7f7b1fce2e..96850124a7 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/input/ps2.h" #include "migration/vmstate.h" diff --git a/hw/input/stellaris_gamepad.c b/hw/input/stellaris_gamepad.c index fec1161c9c..bd80db6fac 100644 --- a/hw/input/stellaris_gamepad.c +++ b/hw/input/stellaris_gamepad.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/input/stellaris_gamepad.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "ui/console.h" diff --git a/hw/intc/allwinner-a10-pic.c b/hw/intc/allwinner-a10-pic.c index 0409734155..0e1ec521e4 100644 --- a/hw/intc/allwinner-a10-pic.c +++ b/hw/intc/allwinner-a10-pic.c @@ -19,7 +19,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/intc/allwinner-a10-pic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c index 899f133363..e27bb20bf8 100644 --- a/hw/intc/arm_gic.c +++ b/hw/intc/arm_gic.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "gic_internal.h" #include "qapi/error.h" diff --git a/hw/intc/arm_gicv2m.c b/hw/intc/arm_gicv2m.c index cef0688221..e823fcc97f 100644 --- a/hw/intc/arm_gicv2m.c +++ b/hw/intc/arm_gicv2m.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/msi.h" #include "hw/qdev-properties.h" #include "system/kvm.h" diff --git a/hw/intc/arm_gicv3_cpuif.c b/hw/intc/arm_gicv3_cpuif.c index 2e6c1f778a..eaf1e512ed 100644 --- a/hw/intc/arm_gicv3_cpuif.c +++ b/hw/intc/arm_gicv3_cpuif.c @@ -18,7 +18,7 @@ #include "qemu/main-loop.h" #include "trace.h" #include "gicv3_internal.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "cpu.h" #include "target/arm/cpregs.h" #include "target/arm/cpu-features.h" diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c index 7c78961040..bb39a690a5 100644 --- a/hw/intc/armv7m_nvic.c +++ b/hw/intc/armv7m_nvic.c @@ -16,7 +16,7 @@ #include "migration/vmstate.h" #include "qemu/timer.h" #include "hw/intc/armv7m_nvic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "system/tcg.h" #include "system/runstate.h" diff --git a/hw/intc/aspeed_intc.c b/hw/intc/aspeed_intc.c index 5cd786dee6..d92305b9ca 100644 --- a/hw/intc/aspeed_intc.c +++ b/hw/intc/aspeed_intc.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/intc/aspeed_intc.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/log.h" #include "trace.h" #include "hw/registerfields.h" diff --git a/hw/intc/aspeed_vic.c b/hw/intc/aspeed_vic.c index 7120088454..b0a9a39705 100644 --- a/hw/intc/aspeed_vic.c +++ b/hw/intc/aspeed_vic.c @@ -29,7 +29,7 @@ #include "qemu/osdep.h" #include "hw/intc/aspeed_vic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qemu/bitops.h" #include "qemu/log.h" diff --git a/hw/intc/bcm2835_ic.c b/hw/intc/bcm2835_ic.c index 55e0a5a503..71bf671761 100644 --- a/hw/intc/bcm2835_ic.c +++ b/hw/intc/bcm2835_ic.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "hw/intc/bcm2835_ic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/intc/bcm2836_control.c b/hw/intc/bcm2836_control.c index 1c02853669..f1deafaf7a 100644 --- a/hw/intc/bcm2836_control.c +++ b/hw/intc/bcm2836_control.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/intc/bcm2836_control.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/intc/exynos4210_combiner.c b/hw/intc/exynos4210_combiner.c index ebbe23436f..b9e74d19c3 100644 --- a/hw/intc/exynos4210_combiner.c +++ b/hw/intc/exynos4210_combiner.c @@ -34,7 +34,7 @@ #include "hw/intc/exynos4210_combiner.h" #include "hw/arm/exynos4210.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qom/object.h" diff --git a/hw/intc/exynos4210_gic.c b/hw/intc/exynos4210_gic.c index 7e2d79d00c..5b156f7ef5 100644 --- a/hw/intc/exynos4210_gic.c +++ b/hw/intc/exynos4210_gic.c @@ -25,7 +25,7 @@ #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/intc/exynos4210_gic.h" #include "hw/arm/exynos4210.h" diff --git a/hw/intc/goldfish_pic.c b/hw/intc/goldfish_pic.c index 2359861785..7aaccba75a 100644 --- a/hw/intc/goldfish_pic.c +++ b/hw/intc/goldfish_pic.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/intc/grlib_irqmp.c b/hw/intc/grlib_irqmp.c index e0f26466ba..bb2ee5f801 100644 --- a/hw/intc/grlib_irqmp.c +++ b/hw/intc/grlib_irqmp.c @@ -27,7 +27,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/qdev-properties.h" diff --git a/hw/intc/heathrow_pic.c b/hw/intc/heathrow_pic.c index 447e8c25d8..b65ec04e47 100644 --- a/hw/intc/heathrow_pic.c +++ b/hw/intc/heathrow_pic.c @@ -27,7 +27,7 @@ #include "migration/vmstate.h" #include "qemu/module.h" #include "hw/intc/heathrow_pic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "trace.h" static inline int heathrow_check_irq(HeathrowPICState *pic) diff --git a/hw/intc/i8259.c b/hw/intc/i8259.c index b6f96bf208..8f2aa1f0fb 100644 --- a/hw/intc/i8259.c +++ b/hw/intc/i8259.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/intc/i8259.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "qemu/timer.h" #include "qemu/log.h" diff --git a/hw/intc/imx_avic.c b/hw/intc/imx_avic.c index 09c3bfac0b..a3d71aba8e 100644 --- a/hw/intc/imx_avic.c +++ b/hw/intc/imx_avic.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/intc/imx_avic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/intc/loongarch_dintc.c b/hw/intc/loongarch_dintc.c index 32bdd171c5..082755d28b 100644 --- a/hw/intc/loongarch_dintc.c +++ b/hw/intc/loongarch_dintc.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/intc/loongarch_pch_msi.h" #include "hw/intc/loongarch_pch_pic.h" #include "hw/intc/loongarch_dintc.h" diff --git a/hw/intc/loongarch_extioi.c b/hw/intc/loongarch_extioi.c index 3e9c88d1d9..2999740269 100644 --- a/hw/intc/loongarch_extioi.c +++ b/hw/intc/loongarch_extioi.c @@ -9,7 +9,7 @@ #include "qemu/module.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loongarch/virt.h" #include "system/address-spaces.h" #include "system/kvm.h" diff --git a/hw/intc/loongarch_pch_msi.c b/hw/intc/loongarch_pch_msi.c index f6d163158d..63090b2726 100644 --- a/hw/intc/loongarch_pch_msi.c +++ b/hw/intc/loongarch_pch_msi.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/intc/loongarch_pch_msi.h" #include "hw/intc/loongarch_pch_pic.h" #include "hw/pci/msi.h" diff --git a/hw/intc/loongarch_pch_pic.c b/hw/intc/loongarch_pch_pic.c index 32f01aabf0..82e16be391 100644 --- a/hw/intc/loongarch_pch_pic.c +++ b/hw/intc/loongarch_pch_pic.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qemu/bitops.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/intc/loongarch_pch_pic.h" #include "system/kvm.h" #include "trace.h" diff --git a/hw/intc/loongson_ipi_common.c b/hw/intc/loongson_ipi_common.c index 8cd78d4858..b3d8e781ca 100644 --- a/hw/intc/loongson_ipi_common.c +++ b/hw/intc/loongson_ipi_common.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/intc/loongson_ipi_common.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/log.h" #include "migration/vmstate.h" #include "system/kvm.h" diff --git a/hw/intc/loongson_liointc.c b/hw/intc/loongson_liointc.c index c10fb97a06..4c24f330ed 100644 --- a/hw/intc/loongson_liointc.c +++ b/hw/intc/loongson_liointc.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/intc/loongson_liointc.h" diff --git a/hw/intc/mips_gic.c b/hw/intc/mips_gic.c index 0c50ba41f6..08925fe1e4 100644 --- a/hw/intc/mips_gic.c +++ b/hw/intc/mips_gic.c @@ -19,7 +19,7 @@ #include "system/reset.h" #include "kvm_mips.h" #include "hw/intc/mips_gic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" static void mips_gic_set_vp_irq(MIPSGICState *gic, int vp, int pin) diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c index c61158bddd..7b23b6d2ce 100644 --- a/hw/intc/omap_intc.c +++ b/hw/intc/omap_intc.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/arm/omap.h" #include "hw/sysbus.h" diff --git a/hw/intc/ompic.c b/hw/intc/ompic.c index 047c367478..5a630bd51c 100644 --- a/hw/intc/ompic.c +++ b/hw/intc/ompic.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c index 87733eb7c3..edac46227f 100644 --- a/hw/intc/openpic.c +++ b/hw/intc/openpic.c @@ -31,7 +31,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci.h" #include "hw/ppc/openpic.h" #include "hw/ppc/ppc_e500.h" diff --git a/hw/intc/pl190.c b/hw/intc/pl190.c index 838c21c4a0..f1e4959e9a 100644 --- a/hw/intc/pl190.c +++ b/hw/intc/pl190.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/intc/ppc-uic.c b/hw/intc/ppc-uic.c index bc4dc90ade..bfc4a4fbce 100644 --- a/hw/intc/ppc-uic.c +++ b/hw/intc/ppc-uic.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/intc/ppc-uic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/intc/realview_gic.c b/hw/intc/realview_gic.c index 63e25c2a78..ecaf8201fd 100644 --- a/hw/intc/realview_gic.c +++ b/hw/intc/realview_gic.c @@ -11,7 +11,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/intc/realview_gic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" static void realview_gic_set_irq(void *opaque, int irq, int level) diff --git a/hw/intc/riscv_aclint.c b/hw/intc/riscv_aclint.c index c6f13f647e..f3e37df47d 100644 --- a/hw/intc/riscv_aclint.c +++ b/hw/intc/riscv_aclint.c @@ -32,7 +32,7 @@ #include "hw/qdev-properties.h" #include "hw/intc/riscv_aclint.h" #include "qemu/timer.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" typedef struct riscv_aclint_mtimer_callback { diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c index a559664c40..580622d171 100644 --- a/hw/intc/riscv_aplic.c +++ b/hw/intc/riscv_aplic.c @@ -28,7 +28,7 @@ #include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/intc/riscv_aplic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "target/riscv/cpu.h" #include "system/system.h" #include "system/kvm.h" diff --git a/hw/intc/riscv_imsic.c b/hw/intc/riscv_imsic.c index 513e38d9c1..54e72b81e7 100644 --- a/hw/intc/riscv_imsic.c +++ b/hw/intc/riscv_imsic.c @@ -28,7 +28,7 @@ #include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "hw/intc/riscv_imsic.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "target/riscv/cpu.h" #include "target/riscv/cpu_bits.h" #include "system/system.h" diff --git a/hw/intc/rx_icu.c b/hw/intc/rx_icu.c index f8615527b7..84712e2e4d 100644 --- a/hw/intc/rx_icu.c +++ b/hw/intc/rx_icu.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/error-report.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/qdev-properties.h" #include "hw/intc/rx_icu.h" diff --git a/hw/intc/sh_intc.c b/hw/intc/sh_intc.c index c9b0b0c1ec..16e4b619d6 100644 --- a/hw/intc/sh_intc.c +++ b/hw/intc/sh_intc.c @@ -12,7 +12,7 @@ #include "qemu/log.h" #include "cpu.h" #include "hw/sh4/sh_intc.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sh4/sh.h" #include "trace.h" diff --git a/hw/intc/sifive_plic.c b/hw/intc/sifive_plic.c index 3160b216fd..c578b6e36d 100644 --- a/hw/intc/sifive_plic.c +++ b/hw/intc/sifive_plic.c @@ -29,7 +29,7 @@ #include "hw/intc/sifive_plic.h" #include "target/riscv/cpu.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/kvm.h" static bool addr_between(uint32_t addr, uint32_t base, uint32_t num) diff --git a/hw/intc/slavio_intctl.c b/hw/intc/slavio_intctl.c index 00b80bb177..b12c8cbd69 100644 --- a/hw/intc/slavio_intctl.c +++ b/hw/intc/slavio_intctl.c @@ -27,7 +27,7 @@ #include "qemu/module.h" #include "hw/sysbus.h" #include "hw/intc/intc.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "trace.h" #include "qom/object.h" diff --git a/hw/intc/xics.c b/hw/intc/xics.c index 200710eb6c..e87c0ad2bc 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -36,7 +36,7 @@ #include "qapi/visitor.h" #include "migration/vmstate.h" #include "hw/intc/intc.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/kvm.h" #include "system/reset.h" #include "target/ppc/cpu.h" diff --git a/hw/intc/xilinx_intc.c b/hw/intc/xilinx_intc.c index 5257ad54b1..f5a59d8983 100644 --- a/hw/intc/xilinx_intc.c +++ b/hw/intc/xilinx_intc.c @@ -29,7 +29,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qom/object.h" diff --git a/hw/intc/xive.c b/hw/intc/xive.c index e0ffcf89eb..6f9babf601 100644 --- a/hw/intc/xive.c +++ b/hw/intc/xive.c @@ -16,7 +16,7 @@ #include "system/reset.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ppc/xive.h" #include "hw/ppc/xive2.h" #include "hw/ppc/xive_regs.h" diff --git a/hw/intc/xlnx-pmu-iomod-intc.c b/hw/intc/xlnx-pmu-iomod-intc.c index 9200585e32..098c1f327c 100644 --- a/hw/intc/xlnx-pmu-iomod-intc.c +++ b/hw/intc/xlnx-pmu-iomod-intc.c @@ -32,7 +32,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/intc/xlnx-pmu-iomod-intc.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #ifndef XLNX_PMU_IO_INTC_ERR_DEBUG diff --git a/hw/intc/xlnx-zynqmp-ipi.c b/hw/intc/xlnx-zynqmp-ipi.c index 610cd0e316..99566bc2e2 100644 --- a/hw/intc/xlnx-zynqmp-ipi.c +++ b/hw/intc/xlnx-zynqmp-ipi.c @@ -33,7 +33,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/intc/xlnx-zynqmp-ipi.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #ifndef XLNX_ZYNQMP_IPI_ERR_DEBUG #define XLNX_ZYNQMP_IPI_ERR_DEBUG 0 diff --git a/hw/ipack/ipack.c b/hw/ipack/ipack.c index ab602bff73..4a710eb187 100644 --- a/hw/ipack/ipack.c +++ b/hw/ipack/ipack.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/ipack/ipack.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/ipack/tpci200.c b/hw/ipack/tpci200.c index 40b30517c7..b074b8727d 100644 --- a/hw/ipack/tpci200.c +++ b/hw/ipack/tpci200.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "hw/ipack/ipack.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "migration/vmstate.h" #include "qemu/bitops.h" diff --git a/hw/ipmi/isa_ipmi_bt.c b/hw/ipmi/isa_ipmi_bt.c index 0ad91ccf68..2b26f9c9f0 100644 --- a/hw/ipmi/isa_ipmi_bt.c +++ b/hw/ipmi/isa_ipmi_bt.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ipmi/ipmi_bt.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" diff --git a/hw/ipmi/isa_ipmi_kcs.c b/hw/ipmi/isa_ipmi_kcs.c index 418d234e0f..14e85e6e9f 100644 --- a/hw/ipmi/isa_ipmi_kcs.c +++ b/hw/ipmi/isa_ipmi_kcs.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ipmi/ipmi_kcs.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" diff --git a/hw/isa/i82378.c b/hw/isa/i82378.c index 06e8f0ce3e..dfa8a3775c 100644 --- a/hw/isa/i82378.c +++ b/hw/isa/i82378.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/intc/i8259.h" #include "hw/timer/i8254.h" #include "migration/vmstate.h" diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c index c9cb8f7779..6e772eca57 100644 --- a/hw/isa/lpc_ich9.c +++ b/hw/isa/lpc_ich9.c @@ -37,7 +37,7 @@ #include "hw/dma/i8257.h" #include "hw/isa/isa.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/apm.h" #include "hw/pci/pci.h" #include "hw/southbridge/ich9.h" diff --git a/hw/isa/piix.c b/hw/isa/piix.c index 52c14d3cd5..bf1c79a3e6 100644 --- a/hw/isa/piix.c +++ b/hw/isa/piix.c @@ -29,7 +29,7 @@ #include "hw/dma/i8257.h" #include "hw/southbridge/piix.h" #include "hw/timer/i8254.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/ide/piix.h" #include "hw/intc/i8259.h" diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index 337958617a..1362a1f404 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -24,7 +24,7 @@ #include "hw/isa/isa.h" #include "hw/isa/superio.h" #include "hw/intc/i8259.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/dma/i8257.h" #include "hw/usb/hcd-uhci.h" #include "hw/timer/i8254.h" diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index a78a9bc03d..0e11eb340f 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -20,7 +20,7 @@ #include "system/rtc.h" #include "hw/loongarch/virt.h" #include "system/address-spaces.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "net/net.h" #include "hw/loader.h" #include "elf.h" diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c index 6359aa81d0..4cf86d510b 100644 --- a/hw/m68k/mcf5206.c +++ b/hw/m68k/mcf5206.c @@ -12,7 +12,7 @@ #include "cpu.h" #include "hw/qdev-properties.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/m68k/mcf.h" #include "qemu/timer.h" #include "hw/ptimer.h" diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index c1067435bf..b2b02f25ff 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -21,7 +21,7 @@ #include "qapi/error.h" #include "qemu/datadir.h" #include "cpu.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/m68k/mcf.h" #include "hw/m68k/mcf_fec.h" #include "qemu/timer.h" diff --git a/hw/m68k/mcf_intc.c b/hw/m68k/mcf_intc.c index e3055b841e..efac6802a9 100644 --- a/hw/m68k/mcf_intc.c +++ b/hw/m68k/mcf_intc.c @@ -11,7 +11,7 @@ #include "qemu/module.h" #include "qemu/log.h" #include "cpu.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/m68k/mcf.h" #include "hw/qdev-properties.h" diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index d7c460bcd4..1411436a46 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -15,7 +15,7 @@ #include "exec/cpu-interrupt.h" #include "system/system.h" #include "system/qtest.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/m68k/next-cube.h" #include "hw/core/boards.h" #include "hw/loader.h" diff --git a/hw/m68k/q800-glue.c b/hw/m68k/q800-glue.c index d663d124fc..94f47175ae 100644 --- a/hw/m68k/q800-glue.c +++ b/hw/m68k/q800-glue.c @@ -24,7 +24,7 @@ #include "cpu.h" #include "hw/m68k/q800-glue.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/nmi.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/mips/malta.c b/hw/mips/malta.c index 44ae8bc6c7..c63d77d4cc 100644 --- a/hw/mips/malta.c +++ b/hw/mips/malta.c @@ -43,7 +43,7 @@ #include "hw/pci/pci_bus.h" #include "qemu/log.h" #include "hw/ide/pci.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loader.h" #include "elf.h" #include "qom/object.h" diff --git a/hw/mips/mips_int.c b/hw/mips/mips_int.c index 26fdb934f5..2b740afc4d 100644 --- a/hw/mips/mips_int.c +++ b/hw/mips/mips_int.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "qemu/main-loop.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/kvm.h" #include "kvm_mips.h" diff --git a/hw/misc/arm_sysctl.c b/hw/misc/arm_sysctl.c index 0f4e37cd47..8995eaeec3 100644 --- a/hw/misc/arm_sysctl.c +++ b/hw/misc/arm_sysctl.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qemu/timer.h" #include "system/runstate.h" diff --git a/hw/misc/armsse-mhu.c b/hw/misc/armsse-mhu.c index d5d307a186..2673c2de3e 100644 --- a/hw/misc/armsse-mhu.c +++ b/hw/misc/armsse-mhu.c @@ -23,7 +23,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/registerfields.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/armsse-mhu.h" REG32(CPU0INTR_STAT, 0x0) diff --git a/hw/misc/aspeed_hace.c b/hw/misc/aspeed_hace.c index 726368fbbc..51c73ca2a5 100644 --- a/hw/misc/aspeed_hace.c +++ b/hw/misc/aspeed_hace.c @@ -19,7 +19,7 @@ #include "migration/vmstate.h" #include "crypto/hash.h" #include "hw/qdev-properties.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "trace.h" #define R_CRYPT_CMD (0x10 / 4) diff --git a/hw/misc/aspeed_lpc.c b/hw/misc/aspeed_lpc.c index 78406dae24..829955e6f1 100644 --- a/hw/misc/aspeed_lpc.c +++ b/hw/misc/aspeed_lpc.c @@ -13,7 +13,7 @@ #include "hw/misc/aspeed_lpc.h" #include "qapi/error.h" #include "qapi/visitor.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/misc/aspeed_peci.c b/hw/misc/aspeed_peci.c index a7a449a923..cf902a8ab8 100644 --- a/hw/misc/aspeed_peci.c +++ b/hw/misc/aspeed_peci.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/aspeed_peci.h" #include "hw/registerfields.h" #include "trace.h" diff --git a/hw/misc/aspeed_xdma.c b/hw/misc/aspeed_xdma.c index c448ad32ff..3e2beafced 100644 --- a/hw/misc/aspeed_xdma.c +++ b/hw/misc/aspeed_xdma.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/error-report.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/aspeed_xdma.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/misc/avr_power.c b/hw/misc/avr_power.c index 411f016c99..947304ed3b 100644 --- a/hw/misc/avr_power.c +++ b/hw/misc/avr_power.c @@ -26,7 +26,7 @@ #include "hw/misc/avr_power.h" #include "qemu/log.h" #include "hw/qdev-properties.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "trace.h" static void avr_mask_reset(DeviceState *dev) diff --git a/hw/misc/bcm2835_mbox.c b/hw/misc/bcm2835_mbox.c index 603eaaa710..ac37fe9957 100644 --- a/hw/misc/bcm2835_mbox.c +++ b/hw/misc/bcm2835_mbox.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/bcm2835_mbox.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/misc/bcm2835_property.c b/hw/misc/bcm2835_property.c index a21c6a541c..2026294ce1 100644 --- a/hw/misc/bcm2835_property.c +++ b/hw/misc/bcm2835_property.c @@ -10,7 +10,7 @@ #include "hw/misc/bcm2835_property.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/bcm2835_mbox_defs.h" #include "hw/arm/raspberrypi-fw-defs.h" #include "system/dma.h" diff --git a/hw/misc/eccmemctl.c b/hw/misc/eccmemctl.c index 81fc536131..71243ba5ba 100644 --- a/hw/misc/eccmemctl.c +++ b/hw/misc/eccmemctl.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/misc/imx_rngc.c b/hw/misc/imx_rngc.c index 630f6cb54b..9f49bbcc2e 100644 --- a/hw/misc/imx_rngc.c +++ b/hw/misc/imx_rngc.c @@ -15,7 +15,7 @@ #include "qemu/main-loop.h" #include "qemu/module.h" #include "qemu/guest-random.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/imx_rngc.h" #include "migration/vmstate.h" diff --git a/hw/misc/iotkit-secctl.c b/hw/misc/iotkit-secctl.c index afd9ab48df..f8a2946191 100644 --- a/hw/misc/iotkit-secctl.c +++ b/hw/misc/iotkit-secctl.c @@ -17,7 +17,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/registerfields.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/iotkit-secctl.h" #include "hw/arm/armsse-version.h" #include "hw/qdev-properties.h" diff --git a/hw/misc/ivshmem-flat.c b/hw/misc/ivshmem-flat.c index 27ee8c9218..790500d34d 100644 --- a/hw/misc/ivshmem-flat.c +++ b/hw/misc/ivshmem-flat.c @@ -13,7 +13,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" #include "chardev/char-fe.h" diff --git a/hw/misc/lasi.c b/hw/misc/lasi.c index 6684f16fd7..e8e1578b75 100644 --- a/hw/misc/lasi.c +++ b/hw/misc/lasi.c @@ -14,7 +14,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/system.h" #include "system/runstate.h" #include "migration/vmstate.h" diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index bc37e2a2cb..13ccd3023f 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -19,7 +19,7 @@ #include "system/address-spaces.h" #include "migration/vmstate.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/timer.h" #include "hw/misc/mac_via.h" #include "hw/misc/mos6522.h" diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c index bcd00c9bb1..3b8dd462f5 100644 --- a/hw/misc/macio/cuda.c +++ b/hw/misc/macio/cuda.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "hw/misc/macio/cuda.h" diff --git a/hw/misc/macio/gpio.c b/hw/misc/macio/gpio.c index 990551f91f..9fed426567 100644 --- a/hw/misc/macio/gpio.c +++ b/hw/misc/macio/gpio.c @@ -28,7 +28,7 @@ #include "migration/vmstate.h" #include "hw/misc/macio/macio.h" #include "hw/misc/macio/gpio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/nmi.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/macio/mac_dbdma.c b/hw/misc/macio/mac_dbdma.c index b2b42dd562..a55c9c9982 100644 --- a/hw/misc/macio/mac_dbdma.c +++ b/hw/misc/macio/mac_dbdma.c @@ -38,7 +38,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ppc/mac_dbdma.h" #include "migration/vmstate.h" #include "qemu/main-loop.h" diff --git a/hw/misc/macio/pmu.c b/hw/misc/macio/pmu.c index 3734913994..73e64306b8 100644 --- a/hw/misc/macio/pmu.c +++ b/hw/misc/macio/pmu.c @@ -31,7 +31,7 @@ #include "qemu/osdep.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/macio/pmu.h" #include "qemu/timer.h" #include "system/runstate.h" diff --git a/hw/misc/max78000_aes.c b/hw/misc/max78000_aes.c index d883ddd2b6..6584675733 100644 --- a/hw/misc/max78000_aes.c +++ b/hw/misc/max78000_aes.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/misc/max78000_aes.h" #include "crypto/aes.h" diff --git a/hw/misc/max78000_gcr.c b/hw/misc/max78000_gcr.c index fbbc92cca3..6d2e2bd617 100644 --- a/hw/misc/max78000_gcr.c +++ b/hw/misc/max78000_gcr.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/runstate.h" #include "migration/vmstate.h" #include "hw/qdev-properties.h" diff --git a/hw/misc/max78000_icc.c b/hw/misc/max78000_icc.c index 6f7d2b20bf..622baa5719 100644 --- a/hw/misc/max78000_icc.c +++ b/hw/misc/max78000_icc.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/misc/max78000_icc.h" diff --git a/hw/misc/max78000_trng.c b/hw/misc/max78000_trng.c index ecdaef53b6..1435138344 100644 --- a/hw/misc/max78000_trng.c +++ b/hw/misc/max78000_trng.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/misc/max78000_trng.h" #include "qemu/guest-random.h" diff --git a/hw/misc/mchp_pfsoc_ioscb.c b/hw/misc/mchp_pfsoc_ioscb.c index 10fc7ea2a9..84e957244e 100644 --- a/hw/misc/mchp_pfsoc_ioscb.c +++ b/hw/misc/mchp_pfsoc_ioscb.c @@ -24,7 +24,7 @@ #include "qemu/bitops.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/misc/mchp_pfsoc_ioscb.h" diff --git a/hw/misc/mchp_pfsoc_sysreg.c b/hw/misc/mchp_pfsoc_sysreg.c index f47c835f80..2a41515103 100644 --- a/hw/misc/mchp_pfsoc_sysreg.c +++ b/hw/misc/mchp_pfsoc_sysreg.c @@ -24,7 +24,7 @@ #include "qemu/bitops.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/misc/mchp_pfsoc_sysreg.h" #include "system/runstate.h" diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 8dd6b82ac5..728931883d 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/mos6522.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/misc/mps2-scc.c b/hw/misc/mps2-scc.c index a9a5d4a535..ea9cad85dc 100644 --- a/hw/misc/mps2-scc.c +++ b/hw/misc/mps2-scc.c @@ -23,7 +23,7 @@ #include "qemu/bitops.h" #include "trace.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/registerfields.h" #include "hw/misc/mps2-scc.h" diff --git a/hw/misc/npcm7xx_mft.c b/hw/misc/npcm7xx_mft.c index b35e971fe5..514d29f201 100644 --- a/hw/misc/npcm7xx_mft.c +++ b/hw/misc/npcm7xx_mft.c @@ -15,7 +15,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/misc/npcm7xx_mft.h" diff --git a/hw/misc/npcm7xx_pwm.c b/hw/misc/npcm7xx_pwm.c index 2de18d09b8..2e72d1c7d4 100644 --- a/hw/misc/npcm7xx_pwm.c +++ b/hw/misc/npcm7xx_pwm.c @@ -15,7 +15,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/misc/npcm7xx_pwm.h" diff --git a/hw/misc/nrf51_rng.c b/hw/misc/nrf51_rng.c index 8cd7ffe3f5..0254fb377a 100644 --- a/hw/misc/nrf51_rng.c +++ b/hw/misc/nrf51_rng.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "hw/arm/nrf51.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/nrf51_rng.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/misc/omap_clk.c b/hw/misc/omap_clk.c index da95c4ace5..37afef0990 100644 --- a/hw/misc/omap_clk.c +++ b/hw/misc/omap_clk.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/arm/omap.h" struct clk { diff --git a/hw/misc/pc-testdev.c b/hw/misc/pc-testdev.c index 67c486f347..4093cb3c99 100644 --- a/hw/misc/pc-testdev.c +++ b/hw/misc/pc-testdev.c @@ -37,7 +37,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "qom/object.h" diff --git a/hw/misc/sifive_e_aon.c b/hw/misc/sifive_e_aon.c index 6eef38d622..9b1e7baf95 100644 --- a/hw/misc/sifive_e_aon.c +++ b/hw/misc/sifive_e_aon.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/timer.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/misc/sifive_e_aon.h" #include "qapi/visitor.h" diff --git a/hw/misc/slavio_misc.c b/hw/misc/slavio_misc.c index a034df3592..43ce5d0bc9 100644 --- a/hw/misc/slavio_misc.c +++ b/hw/misc/slavio_misc.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/misc/stm32_rcc.c b/hw/misc/stm32_rcc.c index 5815b3efa5..74ea29b156 100644 --- a/hw/misc/stm32_rcc.c +++ b/hw/misc/stm32_rcc.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/misc/stm32_rcc.h" diff --git a/hw/misc/stm32f4xx_exti.c b/hw/misc/stm32f4xx_exti.c index 0688e6e73e..a9d396c5dc 100644 --- a/hw/misc/stm32f4xx_exti.c +++ b/hw/misc/stm32f4xx_exti.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/misc/stm32f4xx_exti.h" diff --git a/hw/misc/stm32f4xx_syscfg.c b/hw/misc/stm32f4xx_syscfg.c index addfb031e8..57e89a13aa 100644 --- a/hw/misc/stm32f4xx_syscfg.c +++ b/hw/misc/stm32f4xx_syscfg.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/misc/stm32f4xx_syscfg.h" diff --git a/hw/misc/stm32l4x5_exti.c b/hw/misc/stm32l4x5_exti.c index 9c002164c8..8de4568de7 100644 --- a/hw/misc/stm32l4x5_exti.c +++ b/hw/misc/stm32l4x5_exti.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/misc/stm32l4x5_exti.h" diff --git a/hw/misc/stm32l4x5_rcc.c b/hw/misc/stm32l4x5_rcc.c index 514159777a..d4af2cd696 100644 --- a/hw/misc/stm32l4x5_rcc.c +++ b/hw/misc/stm32l4x5_rcc.c @@ -24,7 +24,7 @@ #include "hw/misc/stm32l4x5_rcc.h" #include "hw/misc/stm32l4x5_rcc_internals.h" #include "hw/core/clock.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/misc/stm32l4x5_syscfg.c b/hw/misc/stm32l4x5_syscfg.c index 85be226d2f..de488a4678 100644 --- a/hw/misc/stm32l4x5_syscfg.c +++ b/hw/misc/stm32l4x5_syscfg.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/core/clock.h" #include "hw/qdev-clock.h" diff --git a/hw/misc/tz-mpc.c b/hw/misc/tz-mpc.c index a158d4a294..d922639da1 100644 --- a/hw/misc/tz-mpc.c +++ b/hw/misc/tz-mpc.c @@ -17,7 +17,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/registerfields.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/tz-mpc.h" #include "hw/qdev-properties.h" diff --git a/hw/misc/tz-msc.c b/hw/misc/tz-msc.c index af0cc5d471..74c31f6d7d 100644 --- a/hw/misc/tz-msc.c +++ b/hw/misc/tz-msc.c @@ -17,7 +17,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/registerfields.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/tz-msc.h" #include "hw/qdev-properties.h" diff --git a/hw/misc/tz-ppc.c b/hw/misc/tz-ppc.c index e4235a846d..2ab03fa973 100644 --- a/hw/misc/tz-ppc.c +++ b/hw/misc/tz-ppc.c @@ -17,7 +17,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/registerfields.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/tz-ppc.h" #include "hw/qdev-properties.h" diff --git a/hw/misc/xlnx-versal-cframe-reg.c b/hw/misc/xlnx-versal-cframe-reg.c index 95e167b921..616c0ecf83 100644 --- a/hw/misc/xlnx-versal-cframe-reg.c +++ b/hw/misc/xlnx-versal-cframe-reg.c @@ -18,7 +18,7 @@ #include "qapi/error.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/xlnx-versal-cframe-reg.h" #ifndef XLNX_VERSAL_CFRAME_REG_ERR_DEBUG diff --git a/hw/misc/xlnx-versal-cfu.c b/hw/misc/xlnx-versal-cfu.c index b920fc77c3..ce58404eb2 100644 --- a/hw/misc/xlnx-versal-cfu.c +++ b/hw/misc/xlnx-versal-cfu.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/register.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/bitops.h" #include "qemu/log.h" #include "qemu/units.h" diff --git a/hw/misc/xlnx-versal-crl.c b/hw/misc/xlnx-versal-crl.c index 5987f32c71..8f9a40d941 100644 --- a/hw/misc/xlnx-versal-crl.c +++ b/hw/misc/xlnx-versal-crl.c @@ -11,7 +11,7 @@ #include "migration/vmstate.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/register.h" #include "hw/resettable.h" diff --git a/hw/misc/xlnx-versal-pmc-iou-slcr.c b/hw/misc/xlnx-versal-pmc-iou-slcr.c index d76df468d4..c75800c1b3 100644 --- a/hw/misc/xlnx-versal-pmc-iou-slcr.c +++ b/hw/misc/xlnx-versal-pmc-iou-slcr.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/register.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/bitops.h" #include "qemu/log.h" #include "migration/vmstate.h" diff --git a/hw/misc/xlnx-versal-xramc.c b/hw/misc/xlnx-versal-xramc.c index d90f3e87c7..af58bc761f 100644 --- a/hw/misc/xlnx-versal-xramc.c +++ b/hw/misc/xlnx-versal-xramc.c @@ -13,7 +13,7 @@ #include "hw/sysbus.h" #include "hw/register.h" #include "hw/qdev-properties.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/xlnx-versal-xramc.h" #ifndef XLNX_XRAM_CTRL_ERR_DEBUG diff --git a/hw/misc/xlnx-zynqmp-apu-ctrl.c b/hw/misc/xlnx-zynqmp-apu-ctrl.c index 08777496d5..196e2452ae 100644 --- a/hw/misc/xlnx-zynqmp-apu-ctrl.c +++ b/hw/misc/xlnx-zynqmp-apu-ctrl.c @@ -14,7 +14,7 @@ #include "migration/vmstate.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/register.h" #include "qemu/bitops.h" diff --git a/hw/misc/xlnx-zynqmp-crf.c b/hw/misc/xlnx-zynqmp-crf.c index d9c1bd50e4..841bce2231 100644 --- a/hw/misc/xlnx-zynqmp-crf.c +++ b/hw/misc/xlnx-zynqmp-crf.c @@ -12,7 +12,7 @@ #include "qemu/bitops.h" #include "qemu/log.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/xlnx-zynqmp-crf.h" #include "target/arm/arm-powerctl.h" diff --git a/hw/net/allwinner-sun8i-emac.c b/hw/net/allwinner-sun8i-emac.c index 30a81576b4..a4824d61bd 100644 --- a/hw/net/allwinner-sun8i-emac.c +++ b/hw/net/allwinner-sun8i-emac.c @@ -23,7 +23,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qemu/log.h" #include "trace.h" diff --git a/hw/net/allwinner_emac.c b/hw/net/allwinner_emac.c index 77d089d988..9158c77cb4 100644 --- a/hw/net/allwinner_emac.c +++ b/hw/net/allwinner_emac.c @@ -22,7 +22,7 @@ #include "migration/vmstate.h" #include "net/net.h" #include "qemu/fifo8.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/allwinner_emac.h" #include "hw/qdev-properties.h" #include "qemu/log.h" diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c index 44896f1801..ef72821f8d 100644 --- a/hw/net/cadence_gem.c +++ b/hw/net/cadence_gem.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include /* for crc32 */ -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/cadence_gem.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" diff --git a/hw/net/can/can_kvaser_pci.c b/hw/net/can/can_kvaser_pci.c index be16769de2..52584c5d6f 100644 --- a/hw/net/can/can_kvaser_pci.c +++ b/hw/net/can/can_kvaser_pci.c @@ -32,7 +32,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/net/can/can_mioe3680_pci.c b/hw/net/can/can_mioe3680_pci.c index 44f3ba370d..2e9e09741b 100644 --- a/hw/net/can/can_mioe3680_pci.c +++ b/hw/net/can/can_mioe3680_pci.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/net/can/can_pcm3680_pci.c b/hw/net/can/can_pcm3680_pci.c index 7296d63be7..7dd23c905e 100644 --- a/hw/net/can/can_pcm3680_pci.c +++ b/hw/net/can/can_pcm3680_pci.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/net/can/can_sja1000.c b/hw/net/can/can_sja1000.c index 6b08e977a1..922431effb 100644 --- a/hw/net/can/can_sja1000.c +++ b/hw/net/can/can_sja1000.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/bitops.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "net/can_emu.h" diff --git a/hw/net/can/ctucan_core.c b/hw/net/can/ctucan_core.c index 6bd99c477b..b6ad7cdb40 100644 --- a/hw/net/can/ctucan_core.c +++ b/hw/net/can/ctucan_core.c @@ -29,7 +29,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/bitops.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "net/can_emu.h" diff --git a/hw/net/can/ctucan_pci.c b/hw/net/can/ctucan_pci.c index bed6785433..ad2b1e60cb 100644 --- a/hw/net/can/ctucan_pci.c +++ b/hw/net/can/ctucan_pci.c @@ -29,7 +29,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/net/can/xlnx-versal-canfd.c b/hw/net/can/xlnx-versal-canfd.c index 5735639b85..0734279557 100644 --- a/hw/net/can/xlnx-versal-canfd.c +++ b/hw/net/can/xlnx-versal-canfd.c @@ -32,7 +32,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/register.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/net/can/xlnx-zynqmp-can.c b/hw/net/can/xlnx-zynqmp-can.c index ca9edd4a5b..a98b208169 100644 --- a/hw/net/can/xlnx-zynqmp-can.c +++ b/hw/net/can/xlnx-zynqmp-can.c @@ -32,7 +32,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/register.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/error.h" #include "qemu/bitops.h" #include "qemu/log.h" diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index d49032059b..68062481c5 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/net/dp8393x.h" #include "hw/sysbus.h" diff --git a/hw/net/fsl_etsec/etsec.c b/hw/net/fsl_etsec/etsec.c index 846f6cbc5d..6ae8a1e1a3 100644 --- a/hw/net/fsl_etsec/etsec.c +++ b/hw/net/fsl_etsec/etsec.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/mii.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" diff --git a/hw/net/ftgmac100.c b/hw/net/ftgmac100.c index c41ce889cf..d5590391b7 100644 --- a/hw/net/ftgmac100.c +++ b/hw/net/ftgmac100.c @@ -12,7 +12,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/ftgmac100.h" #include "system/dma.h" #include "qapi/error.h" diff --git a/hw/net/i82596.c b/hw/net/i82596.c index af1abd4996..a94cfa2d6d 100644 --- a/hw/net/i82596.c +++ b/hw/net/i82596.c @@ -40,7 +40,7 @@ #include "qemu/timer.h" #include "net/net.h" #include "net/eth.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "system/address-spaces.h" diff --git a/hw/net/imx_fec.c b/hw/net/imx_fec.c index e5e34dd1a4..386d24421c 100644 --- a/hw/net/imx_fec.c +++ b/hw/net/imx_fec.c @@ -22,7 +22,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/imx_fec.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c index 3017e12971..1c9bb4807d 100644 --- a/hw/net/lan9118.c +++ b/hw/net/lan9118.c @@ -15,7 +15,7 @@ #include "migration/vmstate.h" #include "net/net.h" #include "net/eth.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/lan9118_phy.h" #include "hw/net/lan9118.h" #include "hw/ptimer.h" diff --git a/hw/net/lan9118_phy.c b/hw/net/lan9118_phy.c index 4c4e03df11..f0f6e55d80 100644 --- a/hw/net/lan9118_phy.c +++ b/hw/net/lan9118_phy.c @@ -15,7 +15,7 @@ #include "qemu/osdep.h" #include "hw/net/lan9118_phy.h" #include "hw/net/mii.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/resettable.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c index ae128fa311..9cd9436985 100644 --- a/hw/net/mcf_fec.c +++ b/hw/net/mcf_fec.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "net/net.h" #include "qemu/module.h" #include "hw/m68k/mcf.h" diff --git a/hw/net/msf2-emac.c b/hw/net/msf2-emac.c index 59045973ab..3e27920962 100644 --- a/hw/net/msf2-emac.c +++ b/hw/net/msf2-emac.c @@ -34,7 +34,7 @@ #include "hw/registerfields.h" #include "hw/net/msf2-emac.h" #include "hw/net/mii.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/net/mv88w8618_eth.c b/hw/net/mv88w8618_eth.c index 6f08846c81..68fda83966 100644 --- a/hw/net/mv88w8618_eth.c +++ b/hw/net/mv88w8618_eth.c @@ -9,7 +9,7 @@ #include "qapi/error.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/mv88w8618_eth.h" #include "migration/vmstate.h" #include "system/dma.h" diff --git a/hw/net/ne2000-pci.c b/hw/net/ne2000-pci.c index ce937e1b61..7b215eb1f2 100644 --- a/hw/net/ne2000-pci.c +++ b/hw/net/ne2000-pci.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/net/ne2000.c b/hw/net/ne2000.c index b1923c8c3e..fea21627f0 100644 --- a/hw/net/ne2000.c +++ b/hw/net/ne2000.c @@ -26,7 +26,7 @@ #include "net/eth.h" #include "qemu/module.h" #include "system/memory.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "ne2000.h" #include "trace.h" diff --git a/hw/net/npcm7xx_emc.c b/hw/net/npcm7xx_emc.c index 9ba35e2c81..9eb39a6b84 100644 --- a/hw/net/npcm7xx_emc.c +++ b/hw/net/npcm7xx_emc.c @@ -31,7 +31,7 @@ #include /* for crc32 */ -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/net/npcm7xx_emc.h" diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c index 7e955c0132..85419321d9 100644 --- a/hw/net/opencores_eth.c +++ b/hw/net/opencores_eth.c @@ -32,7 +32,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/mii.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" diff --git a/hw/net/pcnet-pci.c b/hw/net/pcnet-pci.c index 0ca5bc2193..dad5d2ab06 100644 --- a/hw/net/pcnet-pci.c +++ b/hw/net/pcnet-pci.c @@ -28,7 +28,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/net/pcnet.c b/hw/net/pcnet.c index ad675ab29d..fc2ce5eeb2 100644 --- a/hw/net/pcnet.c +++ b/hw/net/pcnet.c @@ -37,7 +37,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "net/net.h" diff --git a/hw/net/pcnet.h b/hw/net/pcnet.h index a94356ec30..d12e7cbf9e 100644 --- a/hw/net/pcnet.h +++ b/hw/net/pcnet.h @@ -8,7 +8,7 @@ #define PCNET_LOOPTEST_NOCRC 2 #include "system/memory.h" -#include "hw/irq.h" +#include "hw/core/irq.h" /* BUS CONFIGURATION REGISTERS */ #define BCR_MSRDA 0 diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c index 5cd78e334b..b1c675be6f 100644 --- a/hw/net/smc91c111.c +++ b/hw/net/smc91c111.c @@ -11,7 +11,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/net/smc91c111.h" #include "hw/registerfields.h" #include "hw/qdev-properties.h" diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c index 2fc51e1e16..a05aa8a024 100644 --- a/hw/net/stellaris_enet.c +++ b/hw/net/stellaris_enet.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/net/tulip.c b/hw/net/tulip.c index 319af906c8..5f9df76a74 100644 --- a/hw/net/tulip.c +++ b/hw/net/tulip.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" #include "hw/nvram/eeprom93xx.h" diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c index d45f872467..25768644f5 100644 --- a/hw/net/xgmac.c +++ b/hw/net/xgmac.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c index 1f5c748047..c7cb257e62 100644 --- a/hw/net/xilinx_axienet.c +++ b/hw/net/xilinx_axienet.c @@ -31,7 +31,7 @@ #include "net/net.h" #include "net/checksum.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/stream.h" #include "qom/object.h" diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c index 42b19d07c7..0d00e3cc0d 100644 --- a/hw/net/xilinx_ethlite.c +++ b/hw/net/xilinx_ethlite.c @@ -32,7 +32,7 @@ #include "qom/object.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/misc/unimp.h" diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c index 0d4d6c0d87..1abd948904 100644 --- a/hw/nubus/nubus-device.c +++ b/hw/nubus/nubus-device.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qemu/datadir.h" #include "exec/target_page.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loader.h" #include "hw/nubus/nubus.h" #include "qapi/error.h" diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c index 769107e835..a42e7b5e27 100644 --- a/hw/openrisc/openrisc_sim.c +++ b/hw/openrisc/openrisc_sim.c @@ -22,7 +22,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "cpu.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "net/net.h" diff --git a/hw/openrisc/virt.c b/hw/openrisc/virt.c index 3cfd1c0b5c..bc5d27dbdd 100644 --- a/hw/openrisc/virt.c +++ b/hw/openrisc/virt.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "cpu.h" #include "system/address-spaces.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "hw/core/split-irq.h" diff --git a/hw/pci-host/articia.c b/hw/pci-host/articia.c index cc65aac2a8..1881e03d58 100644 --- a/hw/pci-host/articia.c +++ b/hw/pci-host/articia.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/i2c/bitbang_i2c.h" #include "hw/intc/i8259.h" #include "hw/pci-host/articia.h" diff --git a/hw/pci-host/aspeed_pcie.c b/hw/pci-host/aspeed_pcie.c index 1fc2c61772..5d837f638c 100644 --- a/hw/pci-host/aspeed_pcie.c +++ b/hw/pci-host/aspeed_pcie.c @@ -19,7 +19,7 @@ #include "qapi/error.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_host.h" #include "hw/pci/pcie_port.h" #include "hw/pci-host/aspeed_pcie.h" diff --git a/hw/pci-host/astro.c b/hw/pci-host/astro.c index 1024ede7b6..b54f6ef2d5 100644 --- a/hw/pci-host/astro.c +++ b/hw/pci-host/astro.c @@ -25,7 +25,7 @@ #include "qemu/module.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_bus.h" #include "hw/qdev-properties.h" diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c index cbda068ef7..90040045c1 100644 --- a/hw/pci-host/bonito.c +++ b/hw/pci-host/bonito.c @@ -43,7 +43,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/pci/pci_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/mips/mips.h" #include "hw/pci-host/bonito.h" #include "hw/pci/pci_host.h" diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c index f6e49ce9b8..5a80502abb 100644 --- a/hw/pci-host/designware.c +++ b/hw/pci-host/designware.c @@ -28,7 +28,7 @@ #include "hw/pci/pcie_port.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci-host/designware.h" #define DESIGNWARE_PCIE_PORT_LINK_CONTROL 0x710 diff --git a/hw/pci-host/dino.c b/hw/pci-host/dino.c index 924053499c..e6fdb927f5 100644 --- a/hw/pci-host/dino.c +++ b/hw/pci-host/dino.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_bus.h" #include "hw/qdev-properties.h" diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c index b806a2286f..3db4c8c9f0 100644 --- a/hw/pci-host/gpex.c +++ b/hw/pci-host/gpex.c @@ -31,7 +31,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_bus.h" #include "hw/pci-host/gpex.h" #include "hw/qdev-properties.h" diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c index f9da5a908c..85a4b83228 100644 --- a/hw/pci-host/grackle.c +++ b/hw/pci-host/grackle.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/qdev-properties.h" #include "hw/pci/pci_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/error.h" #include "qemu/module.h" #include "trace.h" diff --git a/hw/pci-host/gt64120.c b/hw/pci-host/gt64120.c index b1d96f62fe..3e497b5da5 100644 --- a/hw/pci-host/gt64120.c +++ b/hw/pci-host/gt64120.c @@ -36,7 +36,7 @@ #include "hw/misc/empty_slot.h" #include "migration/vmstate.h" #include "hw/intc/i8259.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "trace.h" #include "qom/object.h" diff --git a/hw/pci-host/mv64361.c b/hw/pci-host/mv64361.c index e05b677010..9f080e4825 100644 --- a/hw/pci-host/mv64361.c +++ b/hw/pci-host/mv64361.c @@ -14,7 +14,7 @@ #include "hw/sysbus.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/intc/i8259.h" #include "hw/qdev-properties.h" #include "system/address-spaces.h" diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c index 5d8383fac3..9808d57550 100644 --- a/hw/pci-host/pnv_phb3.c +++ b/hw/pci-host/pnv_phb3.c @@ -18,7 +18,7 @@ #include "hw/pci/pcie_port.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qom/object.h" #include "system/system.h" diff --git a/hw/pci-host/pnv_phb3_msi.c b/hw/pci-host/pnv_phb3_msi.c index 3a83311faf..f6bf4e323a 100644 --- a/hw/pci-host/pnv_phb3_msi.c +++ b/hw/pci-host/pnv_phb3_msi.c @@ -13,7 +13,7 @@ #include "hw/pci-host/pnv_phb3.h" #include "hw/ppc/pnv.h" #include "hw/pci/msi.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "system/reset.h" diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index 18992054e8..9f17fc1bb4 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -18,7 +18,7 @@ #include "hw/pci/pcie_port.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_xscom.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qom/object.h" #include "trace.h" diff --git a/hw/pci-host/ppc440_pcix.c b/hw/pci-host/ppc440_pcix.c index 744b85e49c..3bd15b8c32 100644 --- a/hw/pci-host/ppc440_pcix.c +++ b/hw/pci-host/ppc440_pcix.c @@ -24,7 +24,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "qemu/units.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci-host/ppc4xx.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" diff --git a/hw/pci-host/ppc4xx_pci.c b/hw/pci-host/ppc4xx_pci.c index 2547817688..b9a00f5193 100644 --- a/hw/pci-host/ppc4xx_pci.c +++ b/hw/pci-host/ppc4xx_pci.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci-host/ppc4xx.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c index 975d191ccb..a8e172136e 100644 --- a/hw/pci-host/ppce500.c +++ b/hw/pci-host/ppce500.c @@ -15,7 +15,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "hw/pci/pci_device.h" diff --git a/hw/pci-host/raven.c b/hw/pci-host/raven.c index 22ad244eb6..3032e0d685 100644 --- a/hw/pci-host/raven.c +++ b/hw/pci-host/raven.c @@ -32,7 +32,7 @@ #include "hw/pci/pci_host.h" #include "hw/qdev-properties.h" #include "hw/intc/i8259.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/or-irq.h" #include "qom/object.h" diff --git a/hw/pci-host/sabre.c b/hw/pci-host/sabre.c index 538624c507..c2f99b76f8 100644 --- a/hw/pci-host/sabre.c +++ b/hw/pci-host/sabre.c @@ -31,7 +31,7 @@ #include "hw/qdev-properties.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_bus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci-bridge/simba.h" #include "hw/pci-host/sabre.h" #include "qapi/error.h" diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c index 62fb945075..87a71c889e 100644 --- a/hw/pci-host/sh_pci.c +++ b/hw/pci-host/sh_pci.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/sh4/sh.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" #include "qemu/module.h" diff --git a/hw/pci-host/uninorth.c b/hw/pci-host/uninorth.c index 194037d6e7..7a25f3f39f 100644 --- a/hw/pci-host/uninorth.c +++ b/hw/pci-host/uninorth.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qemu/module.h" #include "hw/pci/pci_device.h" diff --git a/hw/pci-host/versatile.c b/hw/pci-host/versatile.c index 8ea26e3ff0..40dce72e67 100644 --- a/hw/pci-host/versatile.c +++ b/hw/pci-host/versatile.c @@ -11,7 +11,7 @@ #include "qemu/units.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_bus.h" #include "hw/pci/pci_host.h" diff --git a/hw/pci-host/xilinx-pcie.c b/hw/pci-host/xilinx-pcie.c index c71492de9e..ac6e61c83b 100644 --- a/hw/pci-host/xilinx-pcie.c +++ b/hw/pci-host/xilinx-pcie.c @@ -23,7 +23,7 @@ #include "qapi/error.h" #include "hw/pci/pci_bridge.h" #include "hw/qdev-properties.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci-host/xilinx-pcie.h" enum root_cfg_reg { diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 02a59f355b..ffeb3fbf7c 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/datadir.h" #include "qemu/units.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_bus.h" diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index 8842f7f6b8..eeca31dabb 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -49,7 +49,7 @@ #include "hw/platform-bus.h" #include "hw/net/fsl_etsec/etsec.h" #include "hw/i2c/i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sd/sdhci.h" #include "hw/misc/unimp.h" diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index e7396a729f..8b5958e749 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -13,7 +13,7 @@ #include "hw/ppc/ppc.h" #include "hw/sysbus.h" #include "hw/pci/pci_host.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/or-irq.h" #include "hw/pci-host/articia.h" #include "hw/pci-host/mv64361.h" diff --git a/hw/ppc/pnv_chiptod.c b/hw/ppc/pnv_chiptod.c index f887a18cde..540d5e365f 100644 --- a/hw/ppc/pnv_chiptod.c +++ b/hw/ppc/pnv_chiptod.c @@ -28,7 +28,7 @@ #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/ppc/fdt.h" #include "hw/ppc/ppc.h" diff --git a/hw/ppc/pnv_i2c.c b/hw/ppc/pnv_i2c.c index 60de479491..213e58b455 100644 --- a/hw/ppc/pnv_i2c.c +++ b/hw/ppc/pnv_i2c.c @@ -11,7 +11,7 @@ #include "qemu/log.h" #include "system/reset.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/ppc/pnv.h" diff --git a/hw/ppc/pnv_lpc.c b/hw/ppc/pnv_lpc.c index f6beba0917..538681bdb3 100644 --- a/hw/ppc/pnv_lpc.c +++ b/hw/ppc/pnv_lpc.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "hw/ppc/pnv.h" diff --git a/hw/ppc/pnv_occ.c b/hw/ppc/pnv_occ.c index 24b789c191..7e93e6a6b1 100644 --- a/hw/ppc/pnv_occ.c +++ b/hw/ppc/pnv_occ.c @@ -21,7 +21,7 @@ #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c index 5d947d8b52..1cea9375c0 100644 --- a/hw/ppc/pnv_psi.c +++ b/hw/ppc/pnv_psi.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "system/address-spaces.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "target/ppc/cpu.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/ppc/pnv_sbe.c b/hw/ppc/pnv_sbe.c index 34dc013d47..4798e12998 100644 --- a/hw/ppc/pnv_sbe.c +++ b/hw/ppc/pnv_sbe.c @@ -21,7 +21,7 @@ #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_xscom.h" diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index 3e436c7041..a512d4fa64 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ppc/ppc.h" #include "hw/ppc/ppc_e500.h" #include "qemu/timer.h" diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index 89e3fae08d..fd9203d7e2 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -12,7 +12,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ppc/ppc4xx.h" #include "hw/pci-host/ppc4xx.h" #include "hw/qdev-properties.h" diff --git a/hw/ppc/ppc4xx_sdram.c b/hw/ppc/ppc4xx_sdram.c index 592769826b..6cc2a82ac5 100644 --- a/hw/ppc/ppc4xx_sdram.c +++ b/hw/ppc/ppc4xx_sdram.c @@ -35,7 +35,7 @@ #include "qemu/log.h" #include "qemu/error-report.h" #include "system/address-spaces.h" /* get_system_memory() */ -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/ppc/ppc4xx.h" #include "trace.h" diff --git a/hw/ppc/prep_systemio.c b/hw/ppc/prep_systemio.c index 41cd923b94..d0e42e8731 100644 --- a/hw/ppc/prep_systemio.c +++ b/hw/ppc/prep_systemio.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c index 892ddc7f8f..b1774e88f2 100644 --- a/hw/ppc/spapr_events.c +++ b/hw/ppc/spapr_events.c @@ -34,7 +34,7 @@ #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_vio.h" #include "hw/pci/pci.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci-host/spapr.h" #include "hw/ppc/spapr_drc.h" #include "qemu/help_option.h" diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index fc45a5d5d6..32a2edbe5c 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -11,7 +11,7 @@ #include "qemu/log.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_cpu_core.h" #include "hw/ppc/spapr_xive.h" diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index d596a9e38e..523edaa7b6 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/pci/pci.h" diff --git a/hw/riscv/riscv-iommu-sys.c b/hw/riscv/riscv-iommu-sys.c index e34d00aef6..7d8c6f1c7c 100644 --- a/hw/riscv/riscv-iommu-sys.c +++ b/hw/riscv/riscv-iommu-sys.c @@ -17,7 +17,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_bus.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 6839a2635e..00438d2e59 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -40,7 +40,7 @@ #include "qapi/error.h" #include "qapi/visitor.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loader.h" #include "hw/sysbus.h" #include "hw/cpu/cluster.h" diff --git a/hw/rtc/exynos4210_rtc.c b/hw/rtc/exynos4210_rtc.c index 624b4f61a8..a7e17031ca 100644 --- a/hw/rtc/exynos4210_rtc.c +++ b/hw/rtc/exynos4210_rtc.c @@ -34,7 +34,7 @@ #include "qemu/bcd.h" #include "hw/ptimer.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/arm/exynos4210.h" #include "qom/object.h" diff --git a/hw/rtc/goldfish_rtc.c b/hw/rtc/goldfish_rtc.c index 78df031cf2..67f9eacb22 100644 --- a/hw/rtc/goldfish_rtc.c +++ b/hw/rtc/goldfish_rtc.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "hw/rtc/goldfish_rtc.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/bitops.h" diff --git a/hw/rtc/ls7a_rtc.c b/hw/rtc/ls7a_rtc.c index 10097b2db7..234a7e9769 100644 --- a/hw/rtc/ls7a_rtc.c +++ b/hw/rtc/ls7a_rtc.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/register.h" #include "qemu/timer.h" #include "system/system.h" diff --git a/hw/rtc/m48t59.c b/hw/rtc/m48t59.c index 68be2dad6f..0be17b3e79 100644 --- a/hw/rtc/m48t59.c +++ b/hw/rtc/m48t59.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/rtc/m48t59.h" #include "qemu/timer.h" diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c index 8631386b9f..4c4c1c8421 100644 --- a/hw/rtc/mc146818rtc.c +++ b/hw/rtc/mc146818rtc.c @@ -28,7 +28,7 @@ #include "qemu/bcd.h" #include "hw/acpi/acpi_aml_interface.h" #include "hw/intc/kvm_irqcount.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/timer.h" diff --git a/hw/rtc/pl031.c b/hw/rtc/pl031.c index e545b9dfd6..2ec8ac8add 100644 --- a/hw/rtc/pl031.c +++ b/hw/rtc/pl031.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "hw/rtc/pl031.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/timer.h" diff --git a/hw/rtc/xlnx-zynqmp-rtc.c b/hw/rtc/xlnx-zynqmp-rtc.c index 500982a801..18849340d6 100644 --- a/hw/rtc/xlnx-zynqmp-rtc.c +++ b/hw/rtc/xlnx-zynqmp-rtc.c @@ -30,7 +30,7 @@ #include "qemu/bitops.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/cutils.h" #include "system/system.h" #include "system/rtc.h" diff --git a/hw/scsi/esp-pci.c b/hw/scsi/esp-pci.c index 12c86eb7aa..b31ccdbecc 100644 --- a/hw/scsi/esp-pci.c +++ b/hw/scsi/esp-pci.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/nvram/eeprom93xx.h" #include "hw/scsi/esp.h" #include "migration/vmstate.h" diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 2809fcdee0..9da6119be2 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/scsi/esp.h" #include "trace.h" #include "qemu/log.h" diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index 9ea4aa0a85..6f43e500b3 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -15,7 +15,7 @@ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/scsi/scsi.h" #include "migration/vmstate.h" diff --git a/hw/scsi/ncr53c710.c b/hw/scsi/ncr53c710.c index 47a6983491..9931fd4dc7 100644 --- a/hw/scsi/ncr53c710.c +++ b/hw/scsi/ncr53c710.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/timer.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/scsi/scsi.h" #include "hw/scsi/ncr53c710.h" diff --git a/hw/scsi/ncr53c710.h b/hw/scsi/ncr53c710.h index 6d30f9b663..9ae64a182d 100644 --- a/hw/scsi/ncr53c710.h +++ b/hw/scsi/ncr53c710.h @@ -21,7 +21,7 @@ #include "qemu/fifo8.h" #include "qom/object.h" #include "system/memory.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/timer.h" #define TYPE_NCR710_SCSI "ncr710-scsi" diff --git a/hw/sd/allwinner-sdhost.c b/hw/sd/allwinner-sdhost.c index 9d61b372e7..4c039b9520 100644 --- a/hw/sd/allwinner-sdhost.c +++ b/hw/sd/allwinner-sdhost.c @@ -25,7 +25,7 @@ #include "system/blockdev.h" #include "system/dma.h" #include "hw/qdev-properties.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sd/allwinner-sdhost.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/sd/aspeed_sdhci.c b/hw/sd/aspeed_sdhci.c index f5c0c4956a..330e6a19c9 100644 --- a/hw/sd/aspeed_sdhci.c +++ b/hw/sd/aspeed_sdhci.c @@ -11,7 +11,7 @@ #include "qemu/error-report.h" #include "hw/sd/aspeed_sdhci.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/qdev-properties.h" #include "trace.h" diff --git a/hw/sd/bcm2835_sdhost.c b/hw/sd/bcm2835_sdhost.c index f7cef7bb1c..2736aa14d4 100644 --- a/hw/sd/bcm2835_sdhost.c +++ b/hw/sd/bcm2835_sdhost.c @@ -15,7 +15,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "system/blockdev.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sd/bcm2835_sdhost.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/sd/omap_mmc.c b/hw/sd/omap_mmc.c index 5a1d25defa..267b723e3c 100644 --- a/hw/sd/omap_mmc.c +++ b/hw/sd/omap_mmc.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/arm/omap.h" #include "hw/sd/sd.h" diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index 5d56ead4d9..761b262d7b 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -11,7 +11,7 @@ #include "system/blockdev.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sd/sd.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 40a75a43ff..ff45c8e70c 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -35,7 +35,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qemu/cutils.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "system/block-backend.h" #include "hw/sd/sd.h" diff --git a/hw/sd/sdhci-pci.c b/hw/sd/sdhci-pci.c index c18b91fe63..0e38bed49a 100644 --- a/hw/sd/sdhci-pci.c +++ b/hw/sd/sdhci-pci.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/module.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sd/sdhci.h" #include "sdhci-internal.h" diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 89b595ce4a..39185f0a98 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -28,7 +28,7 @@ #include "qemu/units.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "system/dma.h" #include "qemu/timer.h" diff --git a/hw/sensor/adm1266.c b/hw/sensor/adm1266.c index 9017ce6116..37d1cffd57 100644 --- a/hw/sensor/adm1266.c +++ b/hw/sensor/adm1266.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/i2c/pmbus_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/sensor/adm1272.c b/hw/sensor/adm1272.c index 0c739aa0d8..0aa2a86556 100644 --- a/hw/sensor/adm1272.c +++ b/hw/sensor/adm1272.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/i2c/pmbus_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/sensor/max31785.c b/hw/sensor/max31785.c index c75581455a..468858a60e 100644 --- a/hw/sensor/max31785.c +++ b/hw/sensor/max31785.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/i2c/pmbus_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/sensor/max34451.c b/hw/sensor/max34451.c index a369d2b531..4d64434f3a 100644 --- a/hw/sensor/max34451.c +++ b/hw/sensor/max34451.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/i2c/pmbus_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/sensor/tmp105.c b/hw/sensor/tmp105.c index f5b61109e3..4e5c968bcc 100644 --- a/hw/sensor/tmp105.c +++ b/hw/sensor/tmp105.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/i2c/i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/sensor/tmp105.h" #include "qapi/error.h" diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c index bccd40f571..5352f23ae8 100644 --- a/hw/sh4/r2d.c +++ b/hw/sh4/r2d.c @@ -39,7 +39,7 @@ #include "net/net.h" #include "sh7750_regs.h" #include "hw/ide/mmio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loader.h" #include "hw/usb/usb.h" #include "hw/block/flash.h" diff --git a/hw/sh4/sh7750.c b/hw/sh4/sh7750.c index 300eabc595..6cb42e3441 100644 --- a/hw/sh4/sh7750.c +++ b/hw/sh4/sh7750.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sh4/sh.h" #include "system/system.h" #include "target/sh4/cpu.h" diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index 367beecf19..500b63bc9b 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -30,7 +30,7 @@ #include "qapi/error.h" #include "qemu/datadir.h" #include "cpu.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/timer.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index b0d2d6f8bc..fa5592f26c 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -49,7 +49,7 @@ #include "hw/char/escc.h" #include "hw/misc/empty_slot.h" #include "hw/misc/unimp.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/or-irq.h" #include "hw/loader.h" #include "elf.h" diff --git a/hw/sparc/sun4m_iommu.c b/hw/sparc/sun4m_iommu.c index a7ff36ee78..9ce2e3b7fc 100644 --- a/hw/sparc/sun4m_iommu.c +++ b/hw/sparc/sun4m_iommu.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sparc/sun4m_iommu.h" #include "hw/sysbus.h" diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 62ceb7eef4..5b25ba81cc 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -29,7 +29,7 @@ #include "qemu/datadir.h" #include "cpu.h" #include "exec/target_page.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/pci/pci.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_host.h" diff --git a/hw/ssi/allwinner-a10-spi.c b/hw/ssi/allwinner-a10-spi.c index 6b7cca8d32..69920b935a 100644 --- a/hw/ssi/allwinner-a10-spi.c +++ b/hw/ssi/allwinner-a10-spi.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ssi/allwinner-a10-spi.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/ssi/aspeed_smc.c b/hw/ssi/aspeed_smc.c index e33496f502..9819904a4a 100644 --- a/hw/ssi/aspeed_smc.c +++ b/hw/ssi/aspeed_smc.c @@ -33,7 +33,7 @@ #include "qemu/units.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/ssi/aspeed_smc.h" diff --git a/hw/ssi/bcm2835_spi.c b/hw/ssi/bcm2835_spi.c index bf8ba35e04..01763c458c 100644 --- a/hw/ssi/bcm2835_spi.c +++ b/hw/ssi/bcm2835_spi.c @@ -26,7 +26,7 @@ #include "qemu/log.h" #include "qemu/fifo8.h" #include "hw/ssi/bcm2835_spi.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "migration/vmstate.h" static void bcm2835_spi_update_int(BCM2835SPIState *s) diff --git a/hw/ssi/ibex_spi_host.c b/hw/ssi/ibex_spi_host.c index f05be68748..63f4cce512 100644 --- a/hw/ssi/ibex_spi_host.c +++ b/hw/ssi/ibex_spi_host.c @@ -28,7 +28,7 @@ #include "qemu/module.h" #include "hw/registerfields.h" #include "hw/ssi/ibex_spi_host.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/ssi/imx_spi.c b/hw/ssi/imx_spi.c index 1312f588d2..8e014b7a7b 100644 --- a/hw/ssi/imx_spi.c +++ b/hw/ssi/imx_spi.c @@ -9,7 +9,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ssi/imx_spi.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/ssi/mss-spi.c b/hw/ssi/mss-spi.c index fd7ba7eeb0..3c118fc0f8 100644 --- a/hw/ssi/mss-spi.c +++ b/hw/ssi/mss-spi.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ssi/mss-spi.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/ssi/npcm7xx_fiu.c b/hw/ssi/npcm7xx_fiu.c index 056ce13394..bc5e4e20cc 100644 --- a/hw/ssi/npcm7xx_fiu.c +++ b/hw/ssi/npcm7xx_fiu.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/ssi/npcm7xx_fiu.h" #include "migration/vmstate.h" diff --git a/hw/ssi/npcm_pspi.c b/hw/ssi/npcm_pspi.c index a31dcc050e..1f11e1f8a4 100644 --- a/hw/ssi/npcm_pspi.c +++ b/hw/ssi/npcm_pspi.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/ssi/npcm_pspi.h" #include "migration/vmstate.h" diff --git a/hw/ssi/pl022.c b/hw/ssi/pl022.c index 1dc0bcbcc0..1851118d55 100644 --- a/hw/ssi/pl022.c +++ b/hw/ssi/pl022.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ssi/pl022.h" #include "hw/ssi/ssi.h" #include "qemu/log.h" diff --git a/hw/ssi/pnv_spi.c b/hw/ssi/pnv_spi.c index f40e8836b9..e59386712b 100644 --- a/hw/ssi/pnv_spi.c +++ b/hw/ssi/pnv_spi.c @@ -14,7 +14,7 @@ #include "hw/ssi/pnv_spi_regs.h" #include "hw/ssi/ssi.h" #include -#include "hw/irq.h" +#include "hw/core/irq.h" #include "trace.h" #define PNV_SPI_OPCODE_LO_NIBBLE(x) (x & 0x0F) diff --git a/hw/ssi/sifive_spi.c b/hw/ssi/sifive_spi.c index 3e01fef61c..c66fae80a9 100644 --- a/hw/ssi/sifive_spi.c +++ b/hw/ssi/sifive_spi.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "hw/ssi/ssi.h" diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c index 4144c8a627..9e8656b556 100644 --- a/hw/ssi/xilinx_spi.c +++ b/hw/ssi/xilinx_spi.c @@ -31,7 +31,7 @@ #include "qemu/module.h" #include "qemu/fifo8.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/ssi/ssi.h" diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c index a79f3b8e49..b2f6627518 100644 --- a/hw/ssi/xilinx_spips.c +++ b/hw/ssi/xilinx_spips.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" #include "qemu/log.h" diff --git a/hw/ssi/xlnx-versal-ospi.c b/hw/ssi/xlnx-versal-ospi.c index 56d51ce0e3..88fafb5a2e 100644 --- a/hw/ssi/xlnx-versal-ospi.c +++ b/hw/ssi/xlnx-versal-ospi.c @@ -28,7 +28,7 @@ #include "hw/qdev-properties.h" #include "qemu/bitops.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ssi/xlnx-versal-ospi.h" #ifndef XILINX_VERSAL_OSPI_ERR_DEBUG diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c index 690140f5a6..a0b73fb731 100644 --- a/hw/timer/a9gtimer.c +++ b/hw/timer/a9gtimer.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/timer/a9gtimer.h" #include "migration/vmstate.h" diff --git a/hw/timer/allwinner-a10-pit.c b/hw/timer/allwinner-a10-pit.c index e4c353273a..6c0d3b556a 100644 --- a/hw/timer/allwinner-a10-pit.c +++ b/hw/timer/allwinner-a10-pit.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "hw/timer/allwinner-a10-pit.h" diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c index 7cc5915e9e..ac6313039a 100644 --- a/hw/timer/arm_mptimer.c +++ b/hw/timer/arm_mptimer.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "hw/hw.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" #include "hw/timer/arm_mptimer.h" diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c index 56638ff5cd..e5ef28de6f 100644 --- a/hw/timer/arm_timer.c +++ b/hw/timer/arm_timer.c @@ -11,7 +11,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/timer.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" #include "qemu/module.h" diff --git a/hw/timer/armv7m_systick.c b/hw/timer/armv7m_systick.c index 7e4ddcd405..c9e0f4c2e1 100644 --- a/hw/timer/armv7m_systick.c +++ b/hw/timer/armv7m_systick.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "hw/timer/armv7m_systick.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/qdev-clock.h" #include "qemu/timer.h" diff --git a/hw/timer/aspeed_timer.c b/hw/timer/aspeed_timer.c index 57db03512f..b08a737bc9 100644 --- a/hw/timer/aspeed_timer.c +++ b/hw/timer/aspeed_timer.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/timer/aspeed_timer.h" #include "migration/vmstate.h" diff --git a/hw/timer/avr_timer16.c b/hw/timer/avr_timer16.c index 012d829001..0f1fda4218 100644 --- a/hw/timer/avr_timer16.c +++ b/hw/timer/avr_timer16.c @@ -34,7 +34,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/timer/avr_timer16.h" #include "trace.h" diff --git a/hw/timer/cadence_ttc.c b/hw/timer/cadence_ttc.c index 9c7ba16876..6f02c6a02d 100644 --- a/hw/timer/cadence_ttc.c +++ b/hw/timer/cadence_ttc.c @@ -17,7 +17,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/timer/cmsdk-apb-dualtimer.c b/hw/timer/cmsdk-apb-dualtimer.c index 34c550a3f9..57fea11a85 100644 --- a/hw/timer/cmsdk-apb-dualtimer.c +++ b/hw/timer/cmsdk-apb-dualtimer.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" #include "hw/qdev-clock.h" diff --git a/hw/timer/cmsdk-apb-timer.c b/hw/timer/cmsdk-apb-timer.c index 4095267b4a..8b7595731c 100644 --- a/hw/timer/cmsdk-apb-timer.c +++ b/hw/timer/cmsdk-apb-timer.c @@ -33,7 +33,7 @@ #include "qapi/error.h" #include "trace.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/qdev-clock.h" #include "hw/timer/cmsdk-apb-timer.h" diff --git a/hw/timer/exynos4210_mct.c b/hw/timer/exynos4210_mct.c index bb0f9c8b9a..06524efca2 100644 --- a/hw/timer/exynos4210_mct.c +++ b/hw/timer/exynos4210_mct.c @@ -61,7 +61,7 @@ #include "hw/ptimer.h" #include "hw/arm/exynos4210.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qom/object.h" //#define DEBUG_MCT diff --git a/hw/timer/exynos4210_pwm.c b/hw/timer/exynos4210_pwm.c index 69f737a8e6..dc76932fdf 100644 --- a/hw/timer/exynos4210_pwm.c +++ b/hw/timer/exynos4210_pwm.c @@ -29,7 +29,7 @@ #include "hw/ptimer.h" #include "hw/arm/exynos4210.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qom/object.h" //#define DEBUG_PWM diff --git a/hw/timer/grlib_gptimer.c b/hw/timer/grlib_gptimer.c index 0e06fa09e9..6218c255d2 100644 --- a/hw/timer/grlib_gptimer.c +++ b/hw/timer/grlib_gptimer.c @@ -28,7 +28,7 @@ #include "hw/timer/grlib_gptimer.h" #include "hw/sysbus.h" #include "qemu/timer.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" #include "qemu/module.h" diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c index 1acba4fa9d..1387c417ae 100644 --- a/hw/timer/hpet.c +++ b/hw/timer/hpet.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/timer.h" diff --git a/hw/timer/i8254.c b/hw/timer/i8254.c index 7033ebf50d..1a8b6bf9ab 100644 --- a/hw/timer/i8254.c +++ b/hw/timer/i8254.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/module.h" #include "qemu/timer.h" #include "hw/timer/i8254.h" diff --git a/hw/timer/ibex_timer.c b/hw/timer/ibex_timer.c index c7320ef30f..d2c4f86e03 100644 --- a/hw/timer/ibex_timer.c +++ b/hw/timer/ibex_timer.c @@ -29,7 +29,7 @@ #include "qemu/log.h" #include "qemu/timer.h" #include "hw/timer/ibex_timer.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "target/riscv/cpu.h" #include "migration/vmstate.h" diff --git a/hw/timer/imx_epit.c b/hw/timer/imx_epit.c index 6123321c35..c67a39f10c 100644 --- a/hw/timer/imx_epit.c +++ b/hw/timer/imx_epit.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" #include "hw/timer/imx_epit.h" #include "migration/vmstate.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/misc/imx_ccm.h" #include "qemu/module.h" #include "qemu/log.h" diff --git a/hw/timer/imx_gpt.c b/hw/timer/imx_gpt.c index 8c7cbfdeac..168cadcb3f 100644 --- a/hw/timer/imx_gpt.c +++ b/hw/timer/imx_gpt.c @@ -13,7 +13,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/timer/imx_gpt.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/timer/mss-timer.c b/hw/timer/mss-timer.c index 2ce821178b..946e87c99a 100644 --- a/hw/timer/mss-timer.c +++ b/hw/timer/mss-timer.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/timer/mss-timer.h" #include "migration/vmstate.h" diff --git a/hw/timer/npcm7xx_timer.c b/hw/timer/npcm7xx_timer.c index 6a116ad54b..e09e4ee03a 100644 --- a/hw/timer/npcm7xx_timer.c +++ b/hw/timer/npcm7xx_timer.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/timer/npcm7xx_timer.h" diff --git a/hw/timer/nrf51_timer.c b/hw/timer/nrf51_timer.c index e228fdebc3..0688f49eef 100644 --- a/hw/timer/nrf51_timer.c +++ b/hw/timer/nrf51_timer.c @@ -15,7 +15,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/arm/nrf51.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/timer/nrf51_timer.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/timer/pxa2xx_timer.c b/hw/timer/pxa2xx_timer.c index 6d4ac31574..d18d98b233 100644 --- a/hw/timer/pxa2xx_timer.c +++ b/hw/timer/pxa2xx_timer.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qemu/timer.h" #include "system/runstate.h" diff --git a/hw/timer/renesas_cmt.c b/hw/timer/renesas_cmt.c index cdff7f47f1..c62dad690f 100644 --- a/hw/timer/renesas_cmt.c +++ b/hw/timer/renesas_cmt.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/qdev-properties.h" #include "hw/timer/renesas_cmt.h" diff --git a/hw/timer/renesas_tmr.c b/hw/timer/renesas_tmr.c index 95707f2b8c..1fc539e949 100644 --- a/hw/timer/renesas_tmr.c +++ b/hw/timer/renesas_tmr.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/qdev-properties.h" #include "hw/timer/renesas_tmr.h" diff --git a/hw/timer/sh_timer.c b/hw/timer/sh_timer.c index d4fa32c9d6..adc0571552 100644 --- a/hw/timer/sh_timer.c +++ b/hw/timer/sh_timer.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "system/memory.h" #include "qemu/log.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sh4/sh.h" #include "hw/timer/tmu012.h" #include "hw/ptimer.h" diff --git a/hw/timer/sifive_pwm.c b/hw/timer/sifive_pwm.c index e85e389f7a..f1882ae6bc 100644 --- a/hw/timer/sifive_pwm.c +++ b/hw/timer/sifive_pwm.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "trace.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/timer/sifive_pwm.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" diff --git a/hw/timer/slavio_timer.c b/hw/timer/slavio_timer.c index 3e071fbdb4..5bf94157ca 100644 --- a/hw/timer/slavio_timer.c +++ b/hw/timer/slavio_timer.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/timer.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" diff --git a/hw/timer/sse-timer.c b/hw/timer/sse-timer.c index c5fd038162..fc48179d25 100644 --- a/hw/timer/sse-timer.c +++ b/hw/timer/sse-timer.c @@ -41,7 +41,7 @@ #include "hw/timer/sse-timer.h" #include "hw/timer/sse-counter.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/core/clock.h" #include "hw/qdev-clock.h" diff --git a/hw/timer/stm32f2xx_timer.c b/hw/timer/stm32f2xx_timer.c index be844e7f5a..979b6ad5ba 100644 --- a/hw/timer/stm32f2xx_timer.c +++ b/hw/timer/stm32f2xx_timer.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/timer/stm32f2xx_timer.h" #include "migration/vmstate.h" diff --git a/hw/timer/xilinx_timer.c b/hw/timer/xilinx_timer.c index ff4a224d08..c1b6d2bdf2 100644 --- a/hw/timer/xilinx_timer.c +++ b/hw/timer/xilinx_timer.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ptimer.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/tpm/tpm_tis_common.c b/hw/tpm/tpm_tis_common.c index cdd0df1137..1615be2933 100644 --- a/hw/tpm/tpm_tis_common.c +++ b/hw/tpm/tpm_tis_common.c @@ -23,7 +23,7 @@ * TPM Profile (PTP) Specification, Family 2.0, Revision 00.43 */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/isa.h" #include "qapi/error.h" #include "qemu/bswap.h" diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c index 0577747f46..cab42ae7b6 100644 --- a/hw/ufs/ufs.c +++ b/hw/ufs/ufs.c @@ -25,7 +25,7 @@ #include "qapi/error.h" #include "migration/vmstate.h" #include "scsi/constants.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "trace.h" #include "ufs.h" diff --git a/hw/usb/hcd-dwc2.h b/hw/usb/hcd-dwc2.h index 0c02392ade..a99409a654 100644 --- a/hw/usb/hcd-dwc2.h +++ b/hw/usb/hcd-dwc2.h @@ -20,7 +20,7 @@ #define HW_USB_HCD_DWC2_H #include "qemu/timer.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/usb/usb.h" #include "system/dma.h" diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index b090f25365..57f930b099 100644 --- a/hw/usb/hcd-ehci.c +++ b/hw/usb/hcd-ehci.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/usb/ehci-regs.h" #include "hw/usb/hcd-ehci.h" #include "migration/vmstate.h" diff --git a/hw/usb/hcd-ohci-sysbus.c b/hw/usb/hcd-ohci-sysbus.c index 2d3c770b11..5c3434153d 100644 --- a/hw/usb/hcd-ohci-sysbus.c +++ b/hw/usb/hcd-ohci-sysbus.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/error.h" #include "qemu/module.h" #include "qemu/timer.h" diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c index c48f07f7e3..ea3d5d2bd1 100644 --- a/hw/usb/hcd-ohci.c +++ b/hw/usb/hcd-ohci.c @@ -26,7 +26,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/error.h" #include "qemu/module.h" #include "qemu/timer.h" diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c index 124ac4faec..c243a4f42c 100644 --- a/hw/usb/hcd-uhci.c +++ b/hw/usb/hcd-uhci.c @@ -31,7 +31,7 @@ #include "hw/usb/uhci-regs.h" #include "migration/vmstate.h" #include "hw/pci/pci.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/timer.h" diff --git a/hw/usb/hcd-xhci-sysbus.c b/hw/usb/hcd-xhci-sysbus.c index 244698e5f2..862673054a 100644 --- a/hw/usb/hcd-xhci-sysbus.c +++ b/hw/usb/hcd-xhci-sysbus.c @@ -14,7 +14,7 @@ #include "qapi/error.h" #include "hcd-xhci-sysbus.h" #include "hw/acpi/aml-build.h" -#include "hw/irq.h" +#include "hw/core/irq.h" static bool xhci_sysbus_intr_raise(XHCIState *xhci, int n, bool level) { diff --git a/hw/usb/vt82c686-uhci-pci.c b/hw/usb/vt82c686-uhci-pci.c index 6162806172..97c09a51cf 100644 --- a/hw/usb/vt82c686-uhci-pci.c +++ b/hw/usb/vt82c686-uhci-pci.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/isa/vt82c686.h" #include "hcd-uhci.h" diff --git a/hw/usb/xlnx-versal-usb2-ctrl-regs.c b/hw/usb/xlnx-versal-usb2-ctrl-regs.c index 4114672d4f..eb946b5dbd 100644 --- a/hw/usb/xlnx-versal-usb2-ctrl-regs.c +++ b/hw/usb/xlnx-versal-usb2-ctrl-regs.c @@ -29,7 +29,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/register.h" #include "qemu/bitops.h" #include "qom/object.h" diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c index c05c00bcd4..d54d70b4fb 100644 --- a/hw/virtio/virtio-mmio.c +++ b/hw/virtio/virtio-mmio.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "standard-headers/linux/virtio_mmio.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "hw/virtio/virtio.h" diff --git a/hw/vmapple/aes.c b/hw/vmapple/aes.c index a4853a98f8..a6e94610b8 100644 --- a/hw/vmapple/aes.c +++ b/hw/vmapple/aes.c @@ -14,7 +14,7 @@ #include "crypto/hash.h" #include "crypto/aes.h" #include "crypto/cipher.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/vmapple/vmapple.h" #include "migration/vmstate.h" diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c index 5da28cf72b..9154a4c257 100644 --- a/hw/vmapple/vmapple.c +++ b/hw/vmapple/vmapple.c @@ -26,7 +26,7 @@ #include "qemu/units.h" #include "monitor/qdev.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loader.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" diff --git a/hw/watchdog/cmsdk-apb-watchdog.c b/hw/watchdog/cmsdk-apb-watchdog.c index 6a8d07ca56..e1a2a33d73 100644 --- a/hw/watchdog/cmsdk-apb-watchdog.c +++ b/hw/watchdog/cmsdk-apb-watchdog.c @@ -27,7 +27,7 @@ #include "qemu/module.h" #include "system/watchdog.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" #include "hw/qdev-clock.h" diff --git a/hw/xen/xen-pvh-common.c b/hw/xen/xen-pvh-common.c index c3fc501fe6..f365222019 100644 --- a/hw/xen/xen-pvh-common.c +++ b/hw/xen/xen-pvh-common.c @@ -11,7 +11,7 @@ #include "qemu/units.h" #include "qapi/visitor.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/tpm.h" #include "system/tpm_backend.h" #include "system/runstate.h" diff --git a/hw/xtensa/mx_pic.c b/hw/xtensa/mx_pic.c index 8211c993eb..07c3731aef 100644 --- a/hw/xtensa/mx_pic.c +++ b/hw/xtensa/mx_pic.c @@ -26,7 +26,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/xtensa/mx_pic.h" #include "qemu/log.h" diff --git a/hw/xtensa/pic_cpu.c b/hw/xtensa/pic_cpu.c index e388531610..c00167859a 100644 --- a/hw/xtensa/pic_cpu.c +++ b/hw/xtensa/pic_cpu.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "cpu.h" #include "exec/cpu-interrupt.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/log.h" #include "qemu/timer.h" #include "qemu/atomic.h" diff --git a/include/hw/adc/npcm7xx_adc.h b/include/hw/adc/npcm7xx_adc.h index a0c56d4236..02dc1902fc 100644 --- a/include/hw/adc/npcm7xx_adc.h +++ b/include/hw/adc/npcm7xx_adc.h @@ -17,7 +17,7 @@ #define NPCM7XX_ADC_H #include "hw/core/clock.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "qemu/timer.h" diff --git a/include/hw/char/parallel.h b/include/hw/char/parallel.h index 3f8d9b59a7..f2c92eb5bc 100644 --- a/include/hw/char/parallel.h +++ b/include/hw/char/parallel.h @@ -3,7 +3,7 @@ #include "system/memory.h" #include "hw/isa/isa.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "chardev/char-fe.h" #include "chardev/char.h" diff --git a/include/hw/irq.h b/include/hw/core/irq.h similarity index 100% rename from include/hw/irq.h rename to include/hw/core/irq.h diff --git a/include/hw/display/macfb.h b/include/hw/display/macfb.h index 0fae1f33a6..356a03ce31 100644 --- a/include/hw/display/macfb.h +++ b/include/hw/display/macfb.h @@ -14,7 +14,7 @@ #define MACFB_H #include "system/memory.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/nubus/nubus.h" #include "hw/sysbus.h" #include "ui/console.h" diff --git a/include/hw/i2c/npcm7xx_smbus.h b/include/hw/i2c/npcm7xx_smbus.h index 9c544c561b..f5adb69c67 100644 --- a/include/hw/i2c/npcm7xx_smbus.h +++ b/include/hw/i2c/npcm7xx_smbus.h @@ -18,7 +18,7 @@ #include "system/memory.h" #include "hw/i2c/i2c.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" /* diff --git a/include/hw/ide/ahci-pci.h b/include/hw/ide/ahci-pci.h index face1a9a4a..85cd899abe 100644 --- a/include/hw/ide/ahci-pci.h +++ b/include/hw/ide/ahci-pci.h @@ -9,7 +9,7 @@ #include "qom/object.h" #include "hw/ide/ahci.h" #include "hw/pci/pci_device.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #define TYPE_ICH9_AHCI "ich9-ahci" OBJECT_DECLARE_SIMPLE_TYPE(AHCIPCIState, ICH9_AHCI) diff --git a/include/hw/input/pl050.h b/include/hw/input/pl050.h index 4cb8985f31..db662654c5 100644 --- a/include/hw/input/pl050.h +++ b/include/hw/input/pl050.h @@ -13,7 +13,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/input/ps2.h" -#include "hw/irq.h" +#include "hw/core/irq.h" struct PL050DeviceClass { SysBusDeviceClass parent_class; diff --git a/include/hw/ipack/ipack.h b/include/hw/ipack/ipack.h index 00f397fd02..d86ef84233 100644 --- a/include/hw/ipack/ipack.h +++ b/include/hw/ipack/ipack.h @@ -12,7 +12,7 @@ #define QEMU_IPACK_H #include "hw/qdev-core.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qom/object.h" diff --git a/include/hw/misc/bcm2835_mphi.h b/include/hw/misc/bcm2835_mphi.h index 3f1997e5f2..1a451685e8 100644 --- a/include/hw/misc/bcm2835_mphi.h +++ b/include/hw/misc/bcm2835_mphi.h @@ -17,7 +17,7 @@ #ifndef HW_MISC_BCM2835_MPHI_H #define HW_MISC_BCM2835_MPHI_H -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "qom/object.h" diff --git a/include/hw/misc/npcm7xx_mft.h b/include/hw/misc/npcm7xx_mft.h index 54a2c2a82e..79855b6f25 100644 --- a/include/hw/misc/npcm7xx_mft.h +++ b/include/hw/misc/npcm7xx_mft.h @@ -18,7 +18,7 @@ #include "system/memory.h" #include "hw/core/clock.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "qom/object.h" diff --git a/include/hw/misc/npcm7xx_pwm.h b/include/hw/misc/npcm7xx_pwm.h index f697a77cdc..6a54b40005 100644 --- a/include/hw/misc/npcm7xx_pwm.h +++ b/include/hw/misc/npcm7xx_pwm.h @@ -18,7 +18,7 @@ #include "hw/core/clock.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" /* Each PWM module holds 4 PWM channels. */ #define NPCM7XX_PWM_PER_MODULE 4 diff --git a/include/hw/misc/xlnx-versal-trng.h b/include/hw/misc/xlnx-versal-trng.h index d96f8f9eff..4e516216db 100644 --- a/include/hw/misc/xlnx-versal-trng.h +++ b/include/hw/misc/xlnx-versal-trng.h @@ -26,7 +26,7 @@ #ifndef XLNX_VERSAL_TRNG_H #define XLNX_VERSAL_TRNG_H -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/register.h" diff --git a/include/hw/net/imx_fec.h b/include/hw/net/imx_fec.h index 83b21637ee..99fc285402 100644 --- a/include/hw/net/imx_fec.h +++ b/include/hw/net/imx_fec.h @@ -32,7 +32,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(IMXFECState, IMX_FEC) #include "hw/sysbus.h" #include "hw/net/lan9118_phy.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "net/net.h" #define ENET_EIR 1 diff --git a/include/hw/net/npcm7xx_emc.h b/include/hw/net/npcm7xx_emc.h index b789007160..03c9941d82 100644 --- a/include/hw/net/npcm7xx_emc.h +++ b/include/hw/net/npcm7xx_emc.h @@ -17,7 +17,7 @@ #ifndef NPCM7XX_EMC_H #define NPCM7XX_EMC_H -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "net/net.h" diff --git a/include/hw/net/npcm_gmac.h b/include/hw/net/npcm_gmac.h index 6340ffe92c..44ee7b1bcb 100644 --- a/include/hw/net/npcm_gmac.h +++ b/include/hw/net/npcm_gmac.h @@ -20,7 +20,7 @@ #ifndef NPCM_GMAC_H #define NPCM_GMAC_H -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "net/net.h" diff --git a/include/hw/nvram/xlnx-bbram.h b/include/hw/nvram/xlnx-bbram.h index af90900bfc..ad2e4a250f 100644 --- a/include/hw/nvram/xlnx-bbram.h +++ b/include/hw/nvram/xlnx-bbram.h @@ -28,7 +28,7 @@ #include "system/block-backend.h" #include "hw/qdev-core.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/register.h" diff --git a/include/hw/nvram/xlnx-versal-efuse.h b/include/hw/nvram/xlnx-versal-efuse.h index afa4f4f996..37d09da480 100644 --- a/include/hw/nvram/xlnx-versal-efuse.h +++ b/include/hw/nvram/xlnx-versal-efuse.h @@ -22,7 +22,7 @@ #ifndef XLNX_VERSAL_EFUSE_H #define XLNX_VERSAL_EFUSE_H -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/register.h" #include "hw/nvram/xlnx-efuse.h" diff --git a/include/hw/nvram/xlnx-zynqmp-efuse.h b/include/hw/nvram/xlnx-zynqmp-efuse.h index 7fb12df3fb..6eb3fea8fa 100644 --- a/include/hw/nvram/xlnx-zynqmp-efuse.h +++ b/include/hw/nvram/xlnx-zynqmp-efuse.h @@ -22,7 +22,7 @@ #ifndef XLNX_ZYNQMP_EFUSE_H #define XLNX_ZYNQMP_EFUSE_H -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/register.h" #include "hw/nvram/xlnx-efuse.h" diff --git a/include/hw/ppc/spapr_vio.h b/include/hw/ppc/spapr_vio.h index b8de4b06fb..0ea0dbae8b 100644 --- a/include/hw/ppc/spapr_vio.h +++ b/include/hw/ppc/spapr_vio.h @@ -24,7 +24,7 @@ #include "hw/ppc/spapr.h" #include "system/dma.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qom/object.h" #define TYPE_VIO_SPAPR_DEVICE "vio-spapr-device" diff --git a/include/hw/timer/bcm2835_systmr.h b/include/hw/timer/bcm2835_systmr.h index a8f605beeb..93cb3415a6 100644 --- a/include/hw/timer/bcm2835_systmr.h +++ b/include/hw/timer/bcm2835_systmr.h @@ -10,7 +10,7 @@ #define BCM2835_SYSTMR_H #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/timer.h" #include "qom/object.h" diff --git a/include/hw/timer/stellaris-gptm.h b/include/hw/timer/stellaris-gptm.h index c705508b82..9d663b58df 100644 --- a/include/hw/timer/stellaris-gptm.h +++ b/include/hw/timer/stellaris-gptm.h @@ -12,7 +12,7 @@ #include "qom/object.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/core/clock.h" #define TYPE_STELLARIS_GPTM "stellaris-gptm" diff --git a/include/hw/watchdog/sbsa_gwdt.h b/include/hw/watchdog/sbsa_gwdt.h index 4bdc6c6fdb..ace8fe04c8 100644 --- a/include/hw/watchdog/sbsa_gwdt.h +++ b/include/hw/watchdog/sbsa_gwdt.h @@ -14,7 +14,7 @@ #include "qemu/bitops.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #define TYPE_WDT_SBSA "sbsa_gwdt" #define SBSA_GWDT(obj) \ diff --git a/include/hw/watchdog/wdt_imx2.h b/include/hw/watchdog/wdt_imx2.h index 600a552d2e..ddc49aaea4 100644 --- a/include/hw/watchdog/wdt_imx2.h +++ b/include/hw/watchdog/wdt_imx2.h @@ -14,7 +14,7 @@ #include "qemu/bitops.h" #include "hw/sysbus.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/ptimer.h" #include "qom/object.h" diff --git a/rust/hw/core/wrapper.h b/rust/hw/core/wrapper.h index 77b541f83f..e5c7e0518a 100644 --- a/rust/hw/core/wrapper.h +++ b/rust/hw/core/wrapper.h @@ -29,4 +29,4 @@ typedef enum memory_order { #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" -#include "hw/irq.h" +#include "hw/core/irq.h" diff --git a/system/qtest.c b/system/qtest.c index 67e2385f4b..b0bb9bf9d4 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -20,7 +20,7 @@ #include "system/memory.h" #include "exec/tswap.h" #include "hw/qdev-core.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/core/cpu.h" #include "qemu/accel.h" #include "system/cpu-timers.h" diff --git a/target/arm/cpregs-gcs.c b/target/arm/cpregs-gcs.c index 1ed52a211a..e31827342d 100644 --- a/target/arm/cpregs-gcs.c +++ b/target/arm/cpregs-gcs.c @@ -6,7 +6,7 @@ #include "qemu/osdep.h" #include "qemu/timer.h" #include "exec/icount.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "cpu.h" #include "cpu-features.h" #include "cpregs.h" diff --git a/target/arm/cpregs-pmu.c b/target/arm/cpregs-pmu.c index 31c01eddc8..47e1e4652b 100644 --- a/target/arm/cpregs-pmu.c +++ b/target/arm/cpregs-pmu.c @@ -6,7 +6,7 @@ #include "qemu/osdep.h" #include "qemu/timer.h" #include "exec/icount.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "cpu.h" #include "cpu-features.h" #include "cpregs.h" diff --git a/target/arm/helper.c b/target/arm/helper.c index 27ebc6f29b..263ca29d92 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -20,7 +20,7 @@ #include "qemu/qemu-print.h" #include "exec/cputlb.h" #include "exec/translation-block.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "system/cpu-timers.h" #include "exec/icount.h" #include "system/kvm.h" diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index 7c48f21543..fa26f63a61 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -26,7 +26,7 @@ #include "system/address-spaces.h" #include "system/memory.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/main-loop.h" #include "system/cpus.h" #include "arm-powerctl.h" diff --git a/target/arm/kvm.c b/target/arm/kvm.c index c7ea6fc2f6..12a63602b1 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -34,7 +34,7 @@ #include "system/address-spaces.h" #include "gdbstub/enums.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qapi/visitor.h" #include "qemu/log.h" #include "hw/acpi/acpi.h" diff --git a/target/i386/tcg/system/fpu_helper.c b/target/i386/tcg/system/fpu_helper.c index 0b4fa187df..26b24d4035 100644 --- a/target/i386/tcg/system/fpu_helper.c +++ b/target/i386/tcg/system/fpu_helper.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/main-loop.h" #include "cpu.h" -#include "hw/irq.h" +#include "hw/core/irq.h" static qemu_irq ferr_irq; diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c index 6412584e1b..8ed62acf84 100644 --- a/target/loongarch/kvm/kvm.c +++ b/target/loongarch/kvm/kvm.c @@ -20,7 +20,7 @@ #include "exec/memattrs.h" #include "system/address-spaces.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/loongarch/virt.h" #include "qemu/log.h" #include "hw/loader.h" diff --git a/target/loongarch/tcg/csr_helper.c b/target/loongarch/tcg/csr_helper.c index c1a8ba3089..cd35ca93c7 100644 --- a/target/loongarch/tcg/csr_helper.c +++ b/target/loongarch/tcg/csr_helper.c @@ -14,7 +14,7 @@ #include "exec/helper-proto.h" #include "exec/cputlb.h" #include "accel/tcg/cpu-ldst.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "cpu-csr.h" #include "cpu-mmu.h" diff --git a/target/mips/system/cp0_timer.c b/target/mips/system/cp0_timer.c index ca16945cee..afa163c319 100644 --- a/target/mips/system/cp0_timer.c +++ b/target/mips/system/cp0_timer.c @@ -21,7 +21,7 @@ */ #include "qemu/osdep.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/timer.h" #include "system/kvm.h" #include "internal.h" diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index 301d8de67f..1d99e5f490 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -38,7 +38,7 @@ #include "system/address-spaces.h" #include "system/memory.h" #include "hw/core/boards.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "hw/intc/riscv_imsic.h" #include "qemu/log.h" #include "hw/loader.h" diff --git a/target/rx/helper.c b/target/rx/helper.c index e9a7aaf610..9a78f1457f 100644 --- a/target/rx/helper.c +++ b/target/rx/helper.c @@ -21,7 +21,7 @@ #include "cpu.h" #include "exec/log.h" #include "accel/tcg/cpu-ldst.h" -#include "hw/irq.h" +#include "hw/core/irq.h" #include "qemu/plugin.h" void rx_cpu_unpack_psw(CPURXState *env, uint32_t psw, int rte) From da0fad21f48140823c8a88a74a287ab5f570f699 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:36 +0100 Subject: [PATCH 010/152] include: move hw/loader-fit.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/core/loader-fit.c | 2 +- hw/mips/boston.c | 2 +- include/hw/{ => core}/loader-fit.h | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename include/hw/{ => core}/loader-fit.h (100%) diff --git a/hw/core/loader-fit.c b/hw/core/loader-fit.c index 2dea485ae0..59a625ea57 100644 --- a/hw/core/loader-fit.c +++ b/hw/core/loader-fit.c @@ -22,7 +22,7 @@ #include "qemu/units.h" #include "system/memory.h" #include "hw/loader.h" -#include "hw/loader-fit.h" +#include "hw/core/loader-fit.h" #include "qemu/cutils.h" #include "qemu/error-report.h" #include "system/device_tree.h" diff --git a/hw/mips/boston.c b/hw/mips/boston.c index dc9da0b040..633b2a9052 100644 --- a/hw/mips/boston.c +++ b/hw/mips/boston.c @@ -26,7 +26,7 @@ #include "hw/ide/pci.h" #include "hw/ide/ahci-pci.h" #include "hw/loader.h" -#include "hw/loader-fit.h" +#include "hw/core/loader-fit.h" #include "hw/mips/bootloader.h" #include "hw/mips/cps.h" #include "hw/pci-host/xilinx-pcie.h" diff --git a/include/hw/loader-fit.h b/include/hw/core/loader-fit.h similarity index 100% rename from include/hw/loader-fit.h rename to include/hw/core/loader-fit.h From fc9ba017241406054756151095e46c301eb523f1 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:39 +0100 Subject: [PATCH 011/152] include: move hw/loader.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/acpi/utils.c | 2 +- hw/alpha/dp264.c | 2 +- hw/arm/allwinner-a10.c | 2 +- hw/arm/allwinner-h3.c | 2 +- hw/arm/allwinner-r40.c | 2 +- hw/arm/armv7m.c | 2 +- hw/arm/aspeed_ast27x0-fc.c | 2 +- hw/arm/aspeed_soc_common.c | 2 +- hw/arm/boot.c | 2 +- hw/arm/digic_boards.c | 2 +- hw/arm/exynos4210.c | 2 +- hw/arm/highbank.c | 2 +- hw/arm/npcm7xx.c | 2 +- hw/arm/npcm7xx_boards.c | 2 +- hw/arm/npcm8xx.c | 2 +- hw/arm/npcm8xx_boards.c | 2 +- hw/arm/raspi.c | 2 +- hw/arm/raspi4b.c | 2 +- hw/arm/sbsa-ref.c | 2 +- hw/arm/vexpress.c | 2 +- hw/arm/virt.c | 2 +- hw/arm/xilinx_zynq.c | 2 +- hw/avr/boot.c | 2 +- hw/core/generic-loader.c | 2 +- hw/core/guest-loader.c | 2 +- hw/core/loader-fit.c | 2 +- hw/core/loader.c | 2 +- hw/core/machine.c | 2 +- hw/display/artist.c | 2 +- hw/display/cg3.c | 2 +- hw/display/cirrus_vga_isa.c | 2 +- hw/display/next-fb.c | 2 +- hw/display/ramfb-standalone.c | 2 +- hw/display/ramfb.c | 2 +- hw/display/tcx.c | 2 +- hw/display/vga-isa.c | 2 +- hw/display/vga-pci.c | 2 +- hw/display/vmware_vga.c | 2 +- hw/hppa/machine.c | 2 +- hw/hyperv/syndbg.c | 2 +- hw/i386/microvm.c | 2 +- hw/i386/multiboot.c | 2 +- hw/i386/pc.c | 2 +- hw/i386/pc_q35.c | 2 +- hw/i386/pc_sysfw.c | 2 +- hw/i386/x86-common.c | 2 +- hw/ipmi/ipmi_bmc_sim.c | 2 +- hw/loongarch/boot.c | 2 +- hw/loongarch/virt-fdt-build.c | 2 +- hw/loongarch/virt.c | 2 +- hw/m68k/an5206.c | 2 +- hw/m68k/mcf5208.c | 2 +- hw/m68k/next-cube.c | 2 +- hw/m68k/q800.c | 2 +- hw/m68k/virt.c | 2 +- hw/microblaze/boot.c | 2 +- hw/mips/boston.c | 2 +- hw/mips/fuloong2e.c | 2 +- hw/mips/jazz.c | 2 +- hw/mips/loongson3_virt.c | 2 +- hw/mips/malta.c | 2 +- hw/nubus/nubus-device.c | 2 +- hw/nvram/fw_cfg.c | 2 +- hw/openrisc/boot.c | 2 +- hw/pci/pci.c | 2 +- hw/ppc/amigaone.c | 2 +- hw/ppc/e500.c | 2 +- hw/ppc/mac_newworld.c | 2 +- hw/ppc/mac_oldworld.c | 2 +- hw/ppc/pegasos.c | 2 +- hw/ppc/pnv.c | 2 +- hw/ppc/pnv_pnor.c | 2 +- hw/ppc/ppc440_bamboo.c | 2 +- hw/ppc/ppc_booke.c | 2 +- hw/ppc/prep.c | 2 +- hw/ppc/sam460ex.c | 2 +- hw/ppc/spapr.c | 2 +- hw/ppc/spapr_vio.c | 2 +- hw/ppc/virtex_ml507.c | 2 +- hw/riscv/boot.c | 2 +- hw/riscv/microchip_pfsoc.c | 2 +- hw/riscv/sifive_e.c | 2 +- hw/riscv/sifive_u.c | 2 +- hw/riscv/spike.c | 2 +- hw/riscv/virt.c | 2 +- hw/rx/rx-gdbsim.c | 2 +- hw/rx/rx62n.c | 2 +- hw/s390x/ipl.c | 2 +- hw/sh4/r2d.c | 2 +- hw/smbios/smbios.c | 2 +- hw/sparc/leon3.c | 2 +- hw/sparc/sun4m.c | 2 +- hw/sparc64/niagara.c | 2 +- hw/sparc64/sun4u.c | 2 +- hw/tricore/tc27x_soc.c | 2 +- hw/tricore/triboard.c | 2 +- hw/tricore/tricore_testboard.c | 2 +- hw/virtio/vhost-user-scsi-pci.c | 2 +- hw/virtio/virtio-pci.c | 2 +- hw/vmapple/vmapple.c | 2 +- hw/xen/xen_pt_load_rom.c | 2 +- hw/xtensa/sim.c | 2 +- hw/xtensa/virt.c | 2 +- hw/xtensa/xtfpga.c | 2 +- include/hw/{ => core}/loader.h | 0 include/hw/riscv/boot.h | 2 +- semihosting/arm-compat-semi.c | 2 +- system/device_tree.c | 2 +- system/globals.c | 2 +- system/vl.c | 2 +- target/arm/cpu.c | 2 +- target/loongarch/kvm/kvm.c | 2 +- target/openrisc/interrupt.c | 2 +- target/openrisc/mmu.c | 2 +- target/riscv/kvm/kvm-cpu.c | 2 +- target/rx/cpu.c | 2 +- 116 files changed, 115 insertions(+), 115 deletions(-) rename include/hw/{ => core}/loader.h (100%) diff --git a/hw/acpi/utils.c b/hw/acpi/utils.c index 0c486ea29f..b7cab6f5ca 100644 --- a/hw/acpi/utils.c +++ b/hw/acpi/utils.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/acpi/aml-build.h" #include "hw/acpi/utils.h" -#include "hw/loader.h" +#include "hw/core/loader.h" MemoryRegion *acpi_add_rom_blob(FWCfgCallback update, void *opaque, GArray *blob, const char *name) diff --git a/hw/alpha/dp264.c b/hw/alpha/dp264.c index b6155646ef..cddd94fec8 100644 --- a/hw/alpha/dp264.c +++ b/hw/alpha/dp264.c @@ -10,7 +10,7 @@ #include "cpu.h" #include "exec/target_page.h" #include "elf.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "alpha_sys.h" #include "qemu/error-report.h" #include "hw/rtc/mc146818rtc.h" diff --git a/hw/arm/allwinner-a10.c b/hw/arm/allwinner-a10.c index 1886df0383..d7508ee0ec 100644 --- a/hw/arm/allwinner-a10.c +++ b/hw/arm/allwinner-a10.c @@ -26,7 +26,7 @@ #include "system/system.h" #include "hw/core/boards.h" #include "hw/usb/hcd-ohci.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "target/arm/cpu-qom.h" #define AW_A10_SRAM_A_BASE 0x00000000 diff --git a/hw/arm/allwinner-h3.c b/hw/arm/allwinner-h3.c index edffc21dd8..6c4c369e99 100644 --- a/hw/arm/allwinner-h3.c +++ b/hw/arm/allwinner-h3.c @@ -27,7 +27,7 @@ #include "hw/char/serial-mm.h" #include "hw/misc/unimp.h" #include "hw/usb/hcd-ehci.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "system/system.h" #include "hw/arm/allwinner-h3.h" #include "target/arm/cpu-qom.h" diff --git a/hw/arm/allwinner-r40.c b/hw/arm/allwinner-r40.c index 313bd21fad..f6d4117a06 100644 --- a/hw/arm/allwinner-r40.c +++ b/hw/arm/allwinner-r40.c @@ -28,7 +28,7 @@ #include "hw/char/serial-mm.h" #include "hw/misc/unimp.h" #include "hw/usb/hcd-ehci.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "system/system.h" #include "hw/arm/allwinner-r40.h" #include "hw/misc/allwinner-r40-dramc.h" diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index 7fa1b37630..8198a83d15 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "hw/arm/boot.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/qdev-clock.h" #include "elf.h" diff --git a/hw/arm/aspeed_ast27x0-fc.c b/hw/arm/aspeed_ast27x0-fc.c index a0cbe50d78..1678cce416 100644 --- a/hw/arm/aspeed_ast27x0-fc.c +++ b/hw/arm/aspeed_ast27x0-fc.c @@ -18,7 +18,7 @@ #include "hw/core/boards.h" #include "hw/qdev-clock.h" #include "hw/arm/aspeed_soc.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/arm/boot.h" #include "hw/block/flash.h" #include "hw/arm/aspeed_coprocessor.h" diff --git a/hw/arm/aspeed_soc_common.c b/hw/arm/aspeed_soc_common.c index 78b6ae18f8..84e6458e80 100644 --- a/hw/arm/aspeed_soc_common.c +++ b/hw/arm/aspeed_soc_common.c @@ -18,7 +18,7 @@ #include "hw/char/serial-mm.h" #include "system/blockdev.h" #include "system/block-backend.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "qemu/datadir.h" diff --git a/hw/arm/boot.c b/hw/arm/boot.c index 9b6eaf642e..d87bcb5b88 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -24,7 +24,7 @@ #include "system/numa.h" #include "hw/core/boards.h" #include "system/reset.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/mem/memory-device.h" #include "elf.h" #include "system/device_tree.h" diff --git a/hw/arm/digic_boards.c b/hw/arm/digic_boards.c index d986e8f7a2..ed12f54200 100644 --- a/hw/arm/digic_boards.c +++ b/hw/arm/digic_boards.c @@ -31,7 +31,7 @@ #include "hw/arm/digic.h" #include "hw/arm/machines-qom.h" #include "hw/block/flash.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "system/qtest.h" #include "qemu/units.h" #include "qemu/cutils.h" diff --git a/hw/arm/exynos4210.c b/hw/arm/exynos4210.c index 2d8e257ca2..992edd3ba8 100644 --- a/hw/arm/exynos4210.c +++ b/hw/arm/exynos4210.c @@ -31,7 +31,7 @@ #include "system/system.h" #include "hw/sysbus.h" #include "hw/arm/boot.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/arm/exynos4210.h" #include "hw/sd/sdhci.h" diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c index 82fa964711..b8c1256328 100644 --- a/hw/arm/highbank.c +++ b/hw/arm/highbank.c @@ -24,7 +24,7 @@ #include "migration/vmstate.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "net/net.h" #include "system/runstate.h" #include "system/system.h" diff --git a/hw/arm/npcm7xx.c b/hw/arm/npcm7xx.c index ecfae328a9..6d6f674486 100644 --- a/hw/arm/npcm7xx.c +++ b/hw/arm/npcm7xx.c @@ -19,7 +19,7 @@ #include "hw/arm/boot.h" #include "hw/arm/npcm7xx.h" #include "hw/char/serial-mm.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/misc/unimp.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" diff --git a/hw/arm/npcm7xx_boards.c b/hw/arm/npcm7xx_boards.c index c1e100b1e4..fda375eb4c 100644 --- a/hw/arm/npcm7xx_boards.c +++ b/hw/arm/npcm7xx_boards.c @@ -21,7 +21,7 @@ #include "hw/core/cpu.h" #include "hw/i2c/i2c_mux_pca954x.h" #include "hw/i2c/smbus_eeprom.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/nvram/eeprom_at24c.h" #include "hw/qdev-core.h" #include "hw/qdev-properties.h" diff --git a/hw/arm/npcm8xx.c b/hw/arm/npcm8xx.c index 3ad7643b4b..2bf5e132bb 100644 --- a/hw/arm/npcm8xx.c +++ b/hw/arm/npcm8xx.c @@ -22,7 +22,7 @@ #include "hw/arm/npcm8xx.h" #include "hw/char/serial-mm.h" #include "hw/intc/arm_gic.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/misc/unimp.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" diff --git a/hw/arm/npcm8xx_boards.c b/hw/arm/npcm8xx_boards.c index f775b32402..292f44d807 100644 --- a/hw/arm/npcm8xx_boards.c +++ b/hw/arm/npcm8xx_boards.c @@ -21,7 +21,7 @@ #include "hw/arm/npcm8xx.h" #include "hw/arm/machines-qom.h" #include "hw/core/cpu.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-core.h" #include "hw/qdev-properties.h" #include "qapi/error.h" diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c index 910c18213a..637525a7e3 100644 --- a/hw/arm/raspi.c +++ b/hw/arm/raspi.c @@ -23,7 +23,7 @@ #include "hw/registerfields.h" #include "qemu/error-report.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "qom/object.h" diff --git a/hw/arm/raspi4b.c b/hw/arm/raspi4b.c index 058df2c4c9..ead28500c7 100644 --- a/hw/arm/raspi4b.c +++ b/hw/arm/raspi4b.c @@ -18,7 +18,7 @@ #include "qemu/error-report.h" #include "system/device_tree.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/arm/boot.h" #include "qom/object.h" #include "hw/arm/bcm2838.h" diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c index 32d4c52bf5..5f0fb16a54 100644 --- a/hw/arm/sbsa-ref.c +++ b/hw/arm/sbsa-ref.c @@ -42,7 +42,7 @@ #include "hw/ide/ahci-sysbus.h" #include "hw/intc/arm_gicv3_common.h" #include "hw/intc/arm_gicv3_its_common.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/pci-host/gpex.h" #include "hw/qdev-properties.h" #include "hw/usb/usb.h" diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index 2f61ad0dd6..75cb77da82 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -33,7 +33,7 @@ #include "net/net.h" #include "system/system.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/block/flash.h" #include "system/device_tree.h" #include "qemu/error-report.h" diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 6155db2b09..c005eb914c 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -51,7 +51,7 @@ #include "system/hvf.h" #include "system/qtest.h" #include "system/system.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "qapi/error.h" #include "qemu/bitops.h" #include "qemu/cutils.h" diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c index a6dc644d0b..e127b232d7 100644 --- a/hw/arm/xilinx_zynq.c +++ b/hw/arm/xilinx_zynq.c @@ -25,7 +25,7 @@ #include "system/system.h" #include "hw/core/boards.h" #include "hw/block/flash.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/adc/zynq-xadc.h" #include "hw/ssi/ssi.h" #include "hw/usb/chipidea.h" diff --git a/hw/avr/boot.c b/hw/avr/boot.c index e5a29c7218..838378fb25 100644 --- a/hw/avr/boot.c +++ b/hw/avr/boot.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qemu/datadir.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "boot.h" #include "qemu/error-report.h" diff --git a/hw/core/generic-loader.c b/hw/core/generic-loader.c index be4fe867e4..590c6a8131 100644 --- a/hw/core/generic-loader.c +++ b/hw/core/generic-loader.c @@ -34,7 +34,7 @@ #include "system/dma.h" #include "system/reset.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/core/guest-loader.c b/hw/core/guest-loader.c index 07c3646404..e46897c497 100644 --- a/hw/core/guest-loader.c +++ b/hw/core/guest-loader.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/core/cpu.h" #include "system/dma.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/core/loader-fit.c b/hw/core/loader-fit.c index 59a625ea57..233a7f78c2 100644 --- a/hw/core/loader-fit.c +++ b/hw/core/loader-fit.c @@ -21,7 +21,7 @@ #include "qapi/error.h" #include "qemu/units.h" #include "system/memory.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/loader-fit.h" #include "qemu/cutils.h" #include "qemu/error-report.h" diff --git a/hw/core/loader.c b/hw/core/loader.c index 385730e8ef..40cb187a11 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -58,7 +58,7 @@ #include "system/reset.h" #include "system/system.h" #include "uboot_image.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/nvram/fw_cfg.h" #include "system/memory.h" #include "hw/core/boards.h" diff --git a/hw/core/machine.c b/hw/core/machine.c index 1106f86bf5..51c28468ff 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -15,7 +15,7 @@ #include "qemu/accel.h" #include "system/replay.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "qemu/error-report.h" #include "qapi/error.h" #include "qapi/qapi-visit-machine.h" diff --git a/hw/display/artist.c b/hw/display/artist.c index 3c884c9243..5efa9e45ff 100644 --- a/hw/display/artist.c +++ b/hw/display/artist.c @@ -15,7 +15,7 @@ #include "qemu/bswap.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-core.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/display/cg3.c b/hw/display/cg3.c index 8191237124..5ec09b6324 100644 --- a/hw/display/cg3.c +++ b/hw/display/cg3.c @@ -31,7 +31,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/core/irq.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/display/cirrus_vga_isa.c b/hw/display/cirrus_vga_isa.c index 4b55c48eff..5cacf4fc12 100644 --- a/hw/display/cirrus_vga_isa.c +++ b/hw/display/cirrus_vga_isa.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/module.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/isa/isa.h" #include "cirrus_vga_internal.h" diff --git a/hw/display/next-fb.c b/hw/display/next-fb.c index ec81b766a7..3d97702fce 100644 --- a/hw/display/next-fb.c +++ b/hw/display/next-fb.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "ui/console.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "framebuffer.h" #include "ui/pixel_ops.h" #include "hw/m68k/next-cube.h" diff --git a/hw/display/ramfb-standalone.c b/hw/display/ramfb-standalone.c index 72b2071aed..130f4e01df 100644 --- a/hw/display/ramfb-standalone.c +++ b/hw/display/ramfb-standalone.c @@ -2,7 +2,7 @@ #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/module.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/display/ramfb.h" #include "ui/console.h" diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c index 9a17d97d07..ad12fb1782 100644 --- a/hw/display/ramfb.c +++ b/hw/display/ramfb.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/display/ramfb.h" #include "hw/display/bochs-vbe.h" /* for limits */ #include "ui/console.h" diff --git a/hw/display/tcx.c b/hw/display/tcx.c index 4853c5e142..dfe234e335 100644 --- a/hw/display/tcx.c +++ b/hw/display/tcx.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "ui/console.h" #include "ui/pixel_ops.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c index 3618913b3b..d2213b0f3e 100644 --- a/hw/display/vga-isa.c +++ b/hw/display/vga-isa.c @@ -30,7 +30,7 @@ #include "ui/pixel_ops.h" #include "qemu/module.h" #include "qemu/timer.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "ui/console.h" #include "qom/object.h" diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c index b81f7fd2d0..7a39bb9b21 100644 --- a/hw/display/vga-pci.c +++ b/hw/display/vga-pci.c @@ -33,7 +33,7 @@ #include "ui/console.h" #include "qemu/module.h" #include "qemu/timer.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/display/edid.h" #include "qom/object.h" #include "hw/acpi/acpi_aml_interface.h" diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c index bc1a8ed466..7ca5a55142 100644 --- a/hw/display/vmware_vga.c +++ b/hw/display/vmware_vga.c @@ -27,7 +27,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "qemu/log.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "trace.h" #include "hw/pci/pci_device.h" #include "hw/qdev-properties.h" diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c index acd1c3f005..e877e6c401 100644 --- a/hw/hppa/machine.c +++ b/hw/hppa/machine.c @@ -9,7 +9,7 @@ #include "qemu/datadir.h" #include "cpu.h" #include "elf.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "qemu/error-report.h" #include "exec/target_page.h" #include "system/reset.h" diff --git a/hw/hyperv/syndbg.c b/hw/hyperv/syndbg.c index bcdfdf6af7..29908e886b 100644 --- a/hw/hyperv/syndbg.c +++ b/hw/hyperv/syndbg.c @@ -14,7 +14,7 @@ #include "qapi/error.h" #include "migration/vmstate.h" #include "hw/qdev-properties.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "exec/target_page.h" #include "hw/hyperv/hyperv.h" #include "hw/hyperv/vmbus-bridge.h" diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c index e3bafb83af..8cf99ad662 100644 --- a/hw/i386/microvm.c +++ b/hw/i386/microvm.c @@ -30,7 +30,7 @@ #include "acpi-microvm.h" #include "microvm-dt.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/irq.h" #include "hw/i386/kvm/clock.h" #include "hw/i386/microvm.h" diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c index 78690781b7..8b6acfee9b 100644 --- a/hw/i386/multiboot.c +++ b/hw/i386/multiboot.c @@ -27,7 +27,7 @@ #include "cpu.h" #include "hw/nvram/fw_cfg.h" #include "multiboot.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "exec/target_page.h" #include "system/system.h" diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 0f2a588902..1478a26f11 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -34,7 +34,7 @@ #include "system/cpus.h" #include "hw/ide/ide-bus.h" #include "hw/timer/hpet.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/rtc/mc146818rtc.h" #include "hw/intc/i8259.h" #include "hw/timer/i8254.h" diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 02de7453ba..5fd2f9d1e0 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -32,7 +32,7 @@ #include "qemu/units.h" #include "hw/acpi/acpi.h" #include "hw/char/parallel-isa.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/i2c/smbus_eeprom.h" #include "hw/rtc/mc146818rtc.h" #include "system/tcg.h" diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c index 1a12b635ad..4d64aa1555 100644 --- a/hw/i386/pc_sysfw.c +++ b/hw/i386/pc_sysfw.c @@ -32,7 +32,7 @@ #include "hw/sysbus.h" #include "hw/i386/x86.h" #include "hw/i386/pc.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/block/flash.h" #include "system/kvm.h" diff --git a/hw/i386/x86-common.c b/hw/i386/x86-common.c index 397e856b37..c1c9224039 100644 --- a/hw/i386/x86-common.c +++ b/hw/i386/x86-common.c @@ -38,7 +38,7 @@ #include "hw/acpi/cpu_hotplug.h" #include "hw/core/irq.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "multiboot.h" #include "elf.h" #include "standard-headers/asm-x86/bootparam.h" diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c index 4604d632b1..9b3e3a4b7e 100644 --- a/hw/ipmi/ipmi_bmc_sim.c +++ b/hw/ipmi/ipmi_bmc_sim.c @@ -28,7 +28,7 @@ #include "hw/ipmi/ipmi.h" #include "qemu/error-report.h" #include "qemu/module.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/loongarch/boot.c b/hw/loongarch/boot.c index 8857a04998..711d5ffbbc 100644 --- a/hw/loongarch/boot.c +++ b/hw/loongarch/boot.c @@ -9,7 +9,7 @@ #include "qemu/units.h" #include "target/loongarch/cpu.h" #include "hw/loongarch/virt.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "qemu/error-report.h" #include "system/reset.h" diff --git a/hw/loongarch/virt-fdt-build.c b/hw/loongarch/virt-fdt-build.c index 1f0ba01f71..115080d80e 100644 --- a/hw/loongarch/virt-fdt-build.c +++ b/hw/loongarch/virt-fdt-build.c @@ -9,7 +9,7 @@ #include "hw/acpi/generic_event_device.h" #include "hw/core/sysbus-fdt.h" #include "hw/intc/loongarch_extioi.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/loongarch/virt.h" #include "hw/pci-host/gpex.h" #include "system/device_tree.h" diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index 0e11eb340f..ea53941aeb 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -22,7 +22,7 @@ #include "system/address-spaces.h" #include "hw/core/irq.h" #include "net/net.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "hw/intc/loongarch_ipi.h" #include "hw/intc/loongarch_extioi.h" diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c index f67611ba0b..f92a5d6a33 100644 --- a/hw/m68k/an5206.c +++ b/hw/m68k/an5206.c @@ -11,7 +11,7 @@ #include "cpu.h" #include "hw/m68k/mcf.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "qemu/error-report.h" #include "system/qtest.h" diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index b2b02f25ff..b81305ae6e 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -30,7 +30,7 @@ #include "system/qtest.h" #include "net/net.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/sysbus.h" #include "elf.h" diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index 1411436a46..e7217cbaea 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -18,7 +18,7 @@ #include "hw/core/irq.h" #include "hw/m68k/next-cube.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/scsi/esp.h" #include "hw/sysbus.h" #include "qom/object.h" diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 1aaaada346..4c03455d6b 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -30,7 +30,7 @@ #include "hw/core/boards.h" #include "hw/or-irq.h" #include "elf.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "ui/console.h" #include "hw/char/escc.h" #include "hw/sysbus.h" diff --git a/hw/m68k/virt.c b/hw/m68k/virt.c index 6f2b7bb5a0..7007d4e4e9 100644 --- a/hw/m68k/virt.c +++ b/hw/m68k/virt.c @@ -16,7 +16,7 @@ #include "hw/core/boards.h" #include "hw/qdev-properties.h" #include "elf.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "ui/console.h" #include "hw/sysbus.h" #include "standard-headers/asm-m68k/bootinfo.h" diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c index 39eb2386e8..8ff99b3339 100644 --- a/hw/microblaze/boot.c +++ b/hw/microblaze/boot.c @@ -34,7 +34,7 @@ #include "system/device_tree.h" #include "system/reset.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "qemu/cutils.h" diff --git a/hw/mips/boston.c b/hw/mips/boston.c index 633b2a9052..b4b4a86a5f 100644 --- a/hw/mips/boston.c +++ b/hw/mips/boston.c @@ -25,7 +25,7 @@ #include "hw/char/serial-mm.h" #include "hw/ide/pci.h" #include "hw/ide/ahci-pci.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/loader-fit.h" #include "hw/mips/bootloader.h" #include "hw/mips/cps.h" diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c index fa252c4b28..d4c100b69a 100644 --- a/hw/mips/fuloong2e.c +++ b/hw/mips/fuloong2e.c @@ -31,7 +31,7 @@ #include "hw/mips/mips.h" #include "hw/mips/bootloader.h" #include "hw/pci/pci.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/ide/pci.h" #include "hw/qdev-properties.h" #include "elf.h" diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c index fdcae4ce90..fb01af8ece 100644 --- a/hw/mips/jazz.c +++ b/hw/mips/jazz.c @@ -36,7 +36,7 @@ #include "hw/core/boards.h" #include "net/net.h" #include "hw/scsi/esp.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/rtc/mc146818rtc.h" #include "hw/timer/i8254.h" #include "hw/display/vga.h" diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c index 4df6cf13b3..fe51fb66f6 100644 --- a/hw/mips/loongson3_virt.c +++ b/hw/mips/loongson3_virt.c @@ -37,7 +37,7 @@ #include "hw/misc/unimp.h" #include "hw/intc/i8259.h" #include "hw/intc/loongson_ipi.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/isa/superio.h" #include "hw/pci/msi.h" #include "hw/pci/pci.h" diff --git a/hw/mips/malta.c b/hw/mips/malta.c index c63d77d4cc..2b0eb8c478 100644 --- a/hw/mips/malta.c +++ b/hw/mips/malta.c @@ -44,7 +44,7 @@ #include "qemu/log.h" #include "hw/ide/pci.h" #include "hw/core/irq.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "qom/object.h" #include "hw/sysbus.h" /* SysBusDevice */ diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c index 1abd948904..5c5894c9c5 100644 --- a/hw/nubus/nubus-device.c +++ b/hw/nubus/nubus-device.c @@ -12,7 +12,7 @@ #include "qemu/datadir.h" #include "exec/target_page.h" #include "hw/core/irq.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/nubus/nubus.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index b696bf39e1..df07424e55 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -41,7 +41,7 @@ #include "qemu/cutils.h" #include "qapi/error.h" #include "hw/acpi/aml-build.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #define FW_CFG_FILE_SLOTS_DFLT 0x20 diff --git a/hw/openrisc/boot.c b/hw/openrisc/boot.c index db6fea071e..6256babc42 100644 --- a/hw/openrisc/boot.c +++ b/hw/openrisc/boot.c @@ -11,7 +11,7 @@ #include "exec/cpu-defs.h" #include "exec/target_page.h" #include "elf.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/openrisc/boot.h" #include "system/device_tree.h" #include "system/qtest.h" diff --git a/hw/pci/pci.c b/hw/pci/pci.c index ffeb3fbf7c..a3118ac6d0 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -39,7 +39,7 @@ #include "system/numa.h" #include "system/runstate.h" #include "system/system.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "qemu/error-report.h" #include "qemu/range.h" #include "trace.h" diff --git a/hw/ppc/amigaone.c b/hw/ppc/amigaone.c index 3df4724a72..4b85844380 100644 --- a/hw/ppc/amigaone.c +++ b/hw/ppc/amigaone.c @@ -15,7 +15,7 @@ #include "qapi/error.h" #include "hw/ppc/ppc.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/pci-host/articia.h" #include "hw/isa/vt82c686.h" #include "hw/ide/pci.h" diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index eeca31dabb..769f18023d 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -39,7 +39,7 @@ #include "hw/ppc/openpic_kvm.h" #include "hw/ppc/ppc.h" #include "hw/qdev-properties.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "hw/sysbus.h" #include "qemu/host-utils.h" diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 3a6e47eb8b..909a4fe257 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -65,7 +65,7 @@ #include "hw/char/escc.h" #include "hw/misc/macio/macio.h" #include "hw/ppc/openpic.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/fw-path-provider.h" #include "elf.h" #include "qemu/error-report.h" diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 8f9ce68b8b..8400db6c35 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -42,7 +42,7 @@ #include "hw/nvram/fw_cfg.h" #include "hw/char/escc.h" #include "hw/misc/macio/macio.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/fw-path-provider.h" #include "elf.h" #include "qemu/error-report.h" diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index 8b5958e749..11bf406ef7 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -25,7 +25,7 @@ #include "system/runstate.h" #include "system/qtest.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/fw-path-provider.h" #include "elf.h" #include "qemu/log.h" diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index 895132da91..eb3197da9b 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -38,7 +38,7 @@ #include "hw/ppc/ppc.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_core.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/nmi.h" #include "qapi/visitor.h" #include "hw/intc/intc.h" diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c index af7cfd028b..c7cbc525b3 100644 --- a/hw/ppc/pnv_pnor.c +++ b/hw/ppc/pnv_pnor.c @@ -13,7 +13,7 @@ #include "qemu/units.h" #include "system/block-backend.h" #include "system/blockdev.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/ppc/pnv_pnor.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index 824dd91ed5..9e71037d84 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -21,7 +21,7 @@ #include "hw/core/boards.h" #include "system/kvm.h" #include "system/device_tree.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "hw/char/serial-mm.h" #include "hw/ppc/ppc.h" diff --git a/hw/ppc/ppc_booke.c b/hw/ppc/ppc_booke.c index 13403a56b1..7c6e5df9fd 100644 --- a/hw/ppc/ppc_booke.c +++ b/hw/ppc/ppc_booke.c @@ -29,7 +29,7 @@ #include "qemu/timer.h" #include "system/reset.h" #include "system/runstate.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "kvm_ppc.h" void booke_set_tlb(ppcemb_tlb_t *tlb, target_ulong va, hwaddr pa, diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index 0d5e1f604e..90164face1 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -36,7 +36,7 @@ #include "qemu/error-report.h" #include "qemu/log.h" #include "qemu/datadir.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/rtc/mc146818rtc.h" #include "hw/isa/pc87312.h" #include "hw/qdev-properties.h" diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c index 992bfe39a3..550aaa21fa 100644 --- a/hw/ppc/sam460ex.c +++ b/hw/ppc/sam460ex.c @@ -22,7 +22,7 @@ #include "system/device_tree.h" #include "system/block-backend.h" #include "exec/page-protection.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "system/memory.h" #include "ppc440.h" diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 7c695ac4ec..bad6918e6e 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -61,7 +61,7 @@ #include "hw/core/cpu.h" #include "hw/ppc/ppc.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/ppc/fdt.h" #include "hw/ppc/spapr.h" diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c index c21a2a3274..875c17f478 100644 --- a/hw/ppc/spapr_vio.c +++ b/hw/ppc/spapr_vio.c @@ -24,7 +24,7 @@ #include "qapi/error.h" #include "qapi/visitor.h" #include "qemu/log.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "hw/sysbus.h" #include "system/kvm.h" diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index 8221a01639..8b5f4eb57a 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -34,7 +34,7 @@ #include "system/reset.h" #include "hw/core/boards.h" #include "system/device_tree.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c index 4f207dee28..df1f3abd17 100644 --- a/hw/riscv/boot.c +++ b/hw/riscv/boot.c @@ -23,7 +23,7 @@ #include "qemu/error-report.h" #include "exec/cpu-defs.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/riscv/boot.h" #include "hw/riscv/boot_opensbi.h" #include "elf.h" diff --git a/hw/riscv/microchip_pfsoc.c b/hw/riscv/microchip_pfsoc.c index 4398f7b182..9de6456c14 100644 --- a/hw/riscv/microchip_pfsoc.c +++ b/hw/riscv/microchip_pfsoc.c @@ -41,7 +41,7 @@ #include "qapi/error.h" #include "qapi/visitor.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/sysbus.h" #include "chardev/char.h" #include "hw/cpu/cluster.h" diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c index abe411e305..c2032176c4 100644 --- a/hw/riscv/sifive_e.c +++ b/hw/riscv/sifive_e.c @@ -33,7 +33,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/sysbus.h" #include "hw/misc/unimp.h" #include "target/riscv/cpu.h" diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 00438d2e59..3e081ddf37 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -41,7 +41,7 @@ #include "qapi/visitor.h" #include "hw/core/boards.h" #include "hw/core/irq.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/sysbus.h" #include "hw/cpu/cluster.h" #include "hw/misc/unimp.h" diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c index 6aa688acf3..c9451d7e3b 100644 --- a/hw/riscv/spike.c +++ b/hw/riscv/spike.c @@ -26,7 +26,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/sysbus.h" #include "target/riscv/cpu.h" #include "hw/riscv/riscv_hart.h" diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 45a845318e..0505bffa44 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -24,7 +24,7 @@ #include "qemu/guest-random.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/sysbus.h" #include "hw/qdev-properties.h" #include "hw/char/serial-mm.h" diff --git a/hw/rx/rx-gdbsim.c b/hw/rx/rx-gdbsim.c index 1a33082857..0a0ad85a35 100644 --- a/hw/rx/rx-gdbsim.c +++ b/hw/rx/rx-gdbsim.c @@ -22,7 +22,7 @@ #include "qemu/guest-random.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/rx/rx62n.h" #include "system/qtest.h" #include "system/device_tree.h" diff --git a/hw/rx/rx62n.c b/hw/rx/rx62n.c index a2a243afa4..3fe9a4a518 100644 --- a/hw/rx/rx62n.c +++ b/hw/rx/rx62n.c @@ -25,7 +25,7 @@ #include "qemu/error-report.h" #include "qemu/units.h" #include "hw/rx/rx62n.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/sysbus.h" #include "hw/qdev-properties.h" #include "system/system.h" diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index f1c2af15f7..e0a04ab1a2 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -19,7 +19,7 @@ #include "system/runstate.h" #include "system/tcg.h" #include "elf.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/core/boards.h" #include "hw/s390x/virtio-ccw.h" diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c index 5352f23ae8..9e8c2fa8d1 100644 --- a/hw/sh4/r2d.c +++ b/hw/sh4/r2d.c @@ -40,7 +40,7 @@ #include "sh7750_regs.h" #include "hw/ide/mmio.h" #include "hw/core/irq.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/usb/usb.h" #include "hw/block/flash.h" #include "exec/tswap.h" diff --git a/hw/smbios/smbios.c b/hw/smbios/smbios.c index 071c3b5e62..be97a5effc 100644 --- a/hw/smbios/smbios.c +++ b/hw/smbios/smbios.c @@ -25,7 +25,7 @@ #include "system/system.h" #include "qemu/uuid.h" #include "hw/firmware/smbios.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/boards.h" #include "hw/pci/pci_bus.h" #include "hw/pci/pci_device.h" diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index 500b63bc9b..cd1a03a558 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -38,7 +38,7 @@ #include "system/qtest.h" #include "system/reset.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "trace.h" diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index fa5592f26c..b625686458 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -51,7 +51,7 @@ #include "hw/misc/unimp.h" #include "hw/core/irq.h" #include "hw/or-irq.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "trace.h" #include "qom/object.h" diff --git a/hw/sparc64/niagara.c b/hw/sparc64/niagara.c index 334bec14ba..209be38047 100644 --- a/hw/sparc64/niagara.c +++ b/hw/sparc64/niagara.c @@ -29,7 +29,7 @@ #include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "hw/misc/unimp.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/sparc/sparc64.h" #include "hw/rtc/sun4v-rtc.h" #include "system/block-backend.h" diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 5b25ba81cc..c0fb421d2b 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -53,7 +53,7 @@ #include "hw/nvram/fw_cfg.h" #include "hw/sysbus.h" #include "hw/ide/pci.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/fw-path-provider.h" #include "elf.h" #include "trace.h" diff --git a/hw/tricore/tc27x_soc.c b/hw/tricore/tc27x_soc.c index f3b84980e5..e1a97a4387 100644 --- a/hw/tricore/tc27x_soc.c +++ b/hw/tricore/tc27x_soc.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "qemu/units.h" #include "hw/misc/unimp.h" diff --git a/hw/tricore/triboard.c b/hw/tricore/triboard.c index cb45b01d2d..db6f2b765a 100644 --- a/hw/tricore/triboard.c +++ b/hw/tricore/triboard.c @@ -23,7 +23,7 @@ #include "qapi/error.h" #include "hw/qdev-properties.h" #include "net/net.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "hw/tricore/tricore.h" #include "qemu/error-report.h" diff --git a/hw/tricore/tricore_testboard.c b/hw/tricore/tricore_testboard.c index 21b119712c..60772d4f1d 100644 --- a/hw/tricore/tricore_testboard.c +++ b/hw/tricore/tricore_testboard.c @@ -24,7 +24,7 @@ #include "cpu.h" #include "net/net.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "hw/tricore/tricore.h" #include "hw/tricore/tricore_testdevice.h" diff --git a/hw/virtio/vhost-user-scsi-pci.c b/hw/virtio/vhost-user-scsi-pci.c index 994e51a37b..367b8f27da 100644 --- a/hw/virtio/vhost-user-scsi-pci.c +++ b/hw/virtio/vhost-user-scsi-pci.c @@ -28,7 +28,7 @@ #include "qemu/module.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "system/kvm.h" #include "hw/virtio/virtio-pci.h" #include "qom/object.h" diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 263e112a5c..7382e7db6f 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -33,7 +33,7 @@ #include "qemu/bswap.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "system/accel-irq.h" #include "system/kvm.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c index 9154a4c257..ad513d4cbc 100644 --- a/hw/vmapple/vmapple.c +++ b/hw/vmapple/vmapple.c @@ -27,7 +27,7 @@ #include "monitor/qdev.h" #include "hw/core/boards.h" #include "hw/core/irq.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "hw/usb/usb.h" diff --git a/hw/xen/xen_pt_load_rom.c b/hw/xen/xen_pt_load_rom.c index 6bc64acd33..319efcad6e 100644 --- a/hw/xen/xen_pt_load_rom.c +++ b/hw/xen/xen_pt_load_rom.c @@ -4,7 +4,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/pci/pci.h" #include "xen_pt.h" diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c index 37acc562d2..994460d041 100644 --- a/hw/xtensa/sim.c +++ b/hw/xtensa/sim.c @@ -30,7 +30,7 @@ #include "system/reset.h" #include "system/system.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "elf.h" #include "system/memory.h" #include "qemu/error-report.h" diff --git a/hw/xtensa/virt.c b/hw/xtensa/virt.c index b9e324c285..271f06e095 100644 --- a/hw/xtensa/virt.c +++ b/hw/xtensa/virt.c @@ -29,7 +29,7 @@ #include "qapi/error.h" #include "system/reset.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/pci-host/gpex.h" #include "net/net.h" #include "elf.h" diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c index 694456aa0a..a96abcd4bd 100644 --- a/hw/xtensa/xtfpga.c +++ b/hw/xtensa/xtfpga.c @@ -31,7 +31,7 @@ #include "cpu.h" #include "system/system.h" #include "hw/core/boards.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/qdev-properties.h" #include "elf.h" #include "system/memory.h" diff --git a/include/hw/loader.h b/include/hw/core/loader.h similarity index 100% rename from include/hw/loader.h rename to include/hw/core/loader.h diff --git a/include/hw/riscv/boot.h b/include/hw/riscv/boot.h index 51b0e13bd3..35964bf831 100644 --- a/include/hw/riscv/boot.h +++ b/include/hw/riscv/boot.h @@ -21,7 +21,7 @@ #define RISCV_BOOT_H #include "exec/cpu-defs.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/riscv/riscv_hart.h" #define RISCV32_BIOS_BIN "opensbi-riscv32-generic-fw_dynamic.bin" diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 2e9fa5842f..5e5f181b90 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -47,7 +47,7 @@ #define COMMON_SEMI_HEAP_SIZE (128 * 1024 * 1024) #else #include "qemu/cutils.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/boards.h" #endif diff --git a/system/device_tree.c b/system/device_tree.c index 3ccdf33374..1ea1962984 100644 --- a/system/device_tree.c +++ b/system/device_tree.c @@ -24,7 +24,7 @@ #include "qemu/cutils.h" #include "qemu/guest-random.h" #include "system/device_tree.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/boards.h" #include "qemu/config-file.h" #include "qapi/qapi-commands-machine.h" diff --git a/system/globals.c b/system/globals.c index 98f9876d5d..c33f6ed390 100644 --- a/system/globals.c +++ b/system/globals.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "exec/cpu-common.h" #include "hw/display/vga.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/xen/xen.h" #include "net/net.h" #include "system/cpus.h" diff --git a/system/vl.c b/system/vl.c index cdf32c119b..659c6506fc 100644 --- a/system/vl.c +++ b/system/vl.c @@ -62,7 +62,7 @@ #include "hw/firmware/smbios.h" #include "hw/acpi/acpi.h" #include "hw/xen/xen.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "monitor/qdev.h" #include "net/net.h" #include "net/slirp.h" diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 7720d27a3c..09e89272ed 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -36,7 +36,7 @@ #include "exec/target_page.h" #include "hw/qdev-properties.h" #if !defined(CONFIG_USER_ONLY) -#include "hw/loader.h" +#include "hw/core/loader.h" #include "hw/core/boards.h" #ifdef CONFIG_TCG #include "hw/intc/armv7m_nvic.h" diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c index 8ed62acf84..ef3359ced9 100644 --- a/target/loongarch/kvm/kvm.c +++ b/target/loongarch/kvm/kvm.c @@ -23,7 +23,7 @@ #include "hw/core/irq.h" #include "hw/loongarch/virt.h" #include "qemu/log.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "system/runstate.h" #include "cpu-csr.h" #include "kvm_loongarch.h" diff --git a/target/openrisc/interrupt.c b/target/openrisc/interrupt.c index d357aaa7da..5528b80e7b 100644 --- a/target/openrisc/interrupt.c +++ b/target/openrisc/interrupt.c @@ -23,7 +23,7 @@ #include "gdbstub/helpers.h" #include "qemu/host-utils.h" #ifndef CONFIG_USER_ONLY -#include "hw/loader.h" +#include "hw/core/loader.h" #endif #include "qemu/plugin.h" diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index ffb732e0d1..b2b2b3c4a9 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -26,7 +26,7 @@ #include "exec/target_page.h" #include "gdbstub/helpers.h" #include "qemu/host-utils.h" -#include "hw/loader.h" +#include "hw/core/loader.h" static void get_phys_nommu(hwaddr *phys_addr, int *prot, vaddr address) { diff --git a/target/riscv/kvm/kvm-cpu.c b/target/riscv/kvm/kvm-cpu.c index 1d99e5f490..5d792563b9 100644 --- a/target/riscv/kvm/kvm-cpu.c +++ b/target/riscv/kvm/kvm-cpu.c @@ -41,7 +41,7 @@ #include "hw/core/irq.h" #include "hw/intc/riscv_imsic.h" #include "qemu/log.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "kvm_riscv.h" #include "sbi_ecall_interface.h" #include "chardev/char-fe.h" diff --git a/target/rx/cpu.c b/target/rx/cpu.c index da02ae7bf8..f5f4f3ba4a 100644 --- a/target/rx/cpu.c +++ b/target/rx/cpu.c @@ -25,7 +25,7 @@ #include "exec/page-protection.h" #include "exec/translation-block.h" #include "exec/target_page.h" -#include "hw/loader.h" +#include "hw/core/loader.h" #include "fpu/softfloat.h" #include "tcg/debug-assert.h" #include "accel/tcg/cpu-ops.h" From ca07b6a94bb22e6acae8f4377c29fc0795e0dba1 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:42 +0100 Subject: [PATCH 012/152] include: move hw/nmi.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/core/nmi.c | 2 +- hw/hppa/machine.c | 2 +- hw/i386/x86.c | 2 +- hw/intc/m68k_irqc.c | 2 +- hw/ipmi/ipmi.c | 2 +- hw/m68k/q800-glue.c | 2 +- hw/misc/macio/gpio.c | 2 +- hw/ppc/pnv.c | 2 +- hw/ppc/spapr.c | 2 +- hw/s390x/s390-virtio-ccw.c | 2 +- hw/watchdog/watchdog.c | 2 +- include/hw/{ => core}/nmi.h | 0 system/cpus.c | 2 +- 13 files changed, 12 insertions(+), 12 deletions(-) rename include/hw/{ => core}/nmi.h (100%) diff --git a/hw/core/nmi.c b/hw/core/nmi.c index a7bce8a04a..4b447e126b 100644 --- a/hw/core/nmi.c +++ b/hw/core/nmi.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "qapi/error.h" #include "qemu/module.h" #include "monitor/monitor.h" diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c index e877e6c401..960aefc9e2 100644 --- a/hw/hppa/machine.c +++ b/hw/hppa/machine.c @@ -23,7 +23,7 @@ #include "hw/intc/i8259.h" #include "hw/input/lasips2.h" #include "hw/net/lasi_82596.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "hw/usb/usb.h" #include "hw/pci/pci.h" #include "hw/pci/pci_device.h" diff --git a/hw/i386/x86.c b/hw/i386/x86.c index f80533df1c..c29856c810 100644 --- a/hw/i386/x86.c +++ b/hw/i386/x86.c @@ -35,7 +35,7 @@ #include "hw/i386/x86.h" #include "hw/i386/topology.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "kvm/kvm_i386.h" diff --git a/hw/intc/m68k_irqc.c b/hw/intc/m68k_irqc.c index 2532322618..67cb9acb41 100644 --- a/hw/intc/m68k_irqc.c +++ b/hw/intc/m68k_irqc.c @@ -11,7 +11,7 @@ #include "cpu.h" #include "migration/vmstate.h" #include "hw/qdev-properties.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "hw/intc/intc.h" #include "hw/intc/m68k_irqc.h" diff --git a/hw/ipmi/ipmi.c b/hw/ipmi/ipmi.c index b91e487e1b..2a7bc667ec 100644 --- a/hw/ipmi/ipmi.c +++ b/hw/ipmi/ipmi.c @@ -29,7 +29,7 @@ #include "system/runstate.h" #include "qapi/error.h" #include "qemu/module.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" static uint32_t ipmi_current_uuid = 1; diff --git a/hw/m68k/q800-glue.c b/hw/m68k/q800-glue.c index 94f47175ae..84dd01459c 100644 --- a/hw/m68k/q800-glue.c +++ b/hw/m68k/q800-glue.c @@ -25,7 +25,7 @@ #include "hw/m68k/q800-glue.h" #include "hw/core/boards.h" #include "hw/core/irq.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/misc/macio/gpio.c b/hw/misc/macio/gpio.c index 9fed426567..77658cb6d0 100644 --- a/hw/misc/macio/gpio.c +++ b/hw/misc/macio/gpio.c @@ -29,7 +29,7 @@ #include "hw/misc/macio/macio.h" #include "hw/misc/macio/gpio.h" #include "hw/core/irq.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "qemu/log.h" #include "qemu/module.h" #include "trace.h" diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index eb3197da9b..8a50e9f0d8 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -39,7 +39,7 @@ #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_core.h" #include "hw/core/loader.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "qapi/visitor.h" #include "hw/intc/intc.h" #include "hw/ipmi/ipmi.h" diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index bad6918e6e..7363e533e1 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -82,7 +82,7 @@ #include "qemu/config-file.h" #include "qemu/error-report.h" #include "trace.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "hw/intc/intc.h" #include "hw/ppc/spapr_cpu_core.h" diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 29d95be2c6..c5e0691a26 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -35,7 +35,7 @@ #include "hw/s390x/ap-bridge.h" #include "migration/register.h" #include "target/s390x/cpu_models.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "hw/qdev-properties.h" #include "hw/s390x/tod.h" #include "system/system.h" diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c index 0721373948..0842fe373a 100644 --- a/hw/watchdog/watchdog.c +++ b/hw/watchdog/watchdog.c @@ -28,7 +28,7 @@ #include "qapi/qapi-events-run-state.h" #include "system/runstate.h" #include "system/watchdog.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "qemu/help_option.h" #include "trace.h" diff --git a/include/hw/nmi.h b/include/hw/core/nmi.h similarity index 100% rename from include/hw/nmi.h rename to include/hw/core/nmi.h diff --git a/system/cpus.c b/system/cpus.c index 0b1eabd3c4..a0e1debfea 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -39,7 +39,7 @@ #include "qemu/plugin.h" #include "system/cpus.h" #include "qemu/guest-random.h" -#include "hw/nmi.h" +#include "hw/core/nmi.h" #include "system/replay.h" #include "system/runstate.h" #include "system/cpu-timers.h" From 23bde89a9205b4023c9a70da9bd983912cd48617 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:45 +0100 Subject: [PATCH 013/152] include: move hw/or-irq.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/arm/mps2-tz.c | 2 +- hw/arm/mps2.c | 2 +- hw/arm/mps3r.c | 2 +- hw/arm/musicpal.c | 2 +- hw/arm/stm32l4x5_soc.c | 2 +- hw/arm/xlnx-versal.c | 2 +- hw/core/or-irq.c | 2 +- hw/m68k/q800.c | 2 +- hw/pci-host/raven.c | 2 +- hw/ppc/pegasos.c | 2 +- hw/sparc/sun4m.c | 2 +- include/hw/arm/armsse.h | 2 +- include/hw/arm/bcm2835_peripherals.h | 2 +- include/hw/arm/exynos4210.h | 2 +- include/hw/arm/fsl-imx6.h | 2 +- include/hw/arm/fsl-imx7.h | 2 +- include/hw/arm/fsl-imx8mp.h | 2 +- include/hw/arm/max78000_soc.h | 2 +- include/hw/arm/stm32f205_soc.h | 2 +- include/hw/arm/stm32f405_soc.h | 2 +- include/hw/arm/stm32l4x5_soc.h | 2 +- include/hw/arm/xlnx-zynqmp.h | 2 +- include/hw/{ => core}/or-irq.h | 0 include/hw/intc/aspeed_intc.h | 2 +- include/hw/m68k/q800.h | 2 +- 25 files changed, 24 insertions(+), 24 deletions(-) rename include/hw/{ => core}/or-irq.h (100%) diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index a0d917f9a9..c262a9c679 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -53,7 +53,7 @@ #include "hw/arm/boot.h" #include "hw/arm/armv7m.h" #include "hw/arm/machines-qom.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/core/boards.h" #include "system/address-spaces.h" #include "system/system.h" diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c index bf5e07019f..af3b012489 100644 --- a/hw/arm/mps2.c +++ b/hw/arm/mps2.c @@ -32,7 +32,7 @@ #include "hw/arm/boot.h" #include "hw/arm/armv7m.h" #include "hw/arm/machines-qom.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/core/boards.h" #include "system/address-spaces.h" #include "system/system.h" diff --git a/hw/arm/mps3r.c b/hw/arm/mps3r.c index b63002f483..c64e103f59 100644 --- a/hw/arm/mps3r.c +++ b/hw/arm/mps3r.c @@ -32,7 +32,7 @@ #include "cpu.h" #include "system/system.h" #include "hw/core/boards.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/arm/boot.h" diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index 9852e8f764..100a9f59b3 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -28,7 +28,7 @@ #include "hw/i2c/i2c.h" #include "hw/i2c/bitbang_i2c.h" #include "hw/core/irq.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/audio/wm8750.h" #include "system/block-backend.h" #include "system/runstate.h" diff --git a/hw/arm/stm32l4x5_soc.c b/hw/arm/stm32l4x5_soc.c index 64da5559c0..c28ce15e6b 100644 --- a/hw/arm/stm32l4x5_soc.c +++ b/hw/arm/stm32l4x5_soc.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "system/address-spaces.h" #include "system/system.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/arm/stm32l4x5_soc.h" #include "hw/char/stm32l4x5_usart.h" #include "hw/gpio/stm32l4x5_gpio.h" diff --git a/hw/arm/xlnx-versal.c b/hw/arm/xlnx-versal.c index 81cb6294cf..a0b2f18b55 100644 --- a/hw/arm/xlnx-versal.c +++ b/hw/arm/xlnx-versal.c @@ -40,7 +40,7 @@ #include "hw/rtc/xlnx-zynqmp-rtc.h" #include "hw/misc/xlnx-versal-cfu.h" #include "hw/misc/xlnx-versal-cframe-reg.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/misc/xlnx-versal-crl.h" #include "hw/intc/arm_gicv3_common.h" #include "hw/intc/arm_gicv3_its_common.h" diff --git a/hw/core/or-irq.c b/hw/core/or-irq.c index 61006672ad..bcc7ad1e44 100644 --- a/hw/core/or-irq.c +++ b/hw/core/or-irq.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 4c03455d6b..6fe030e8c5 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -28,7 +28,7 @@ #include "system/system.h" #include "cpu.h" #include "hw/core/boards.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "elf.h" #include "hw/core/loader.h" #include "ui/console.h" diff --git a/hw/pci-host/raven.c b/hw/pci-host/raven.c index 3032e0d685..a587f16131 100644 --- a/hw/pci-host/raven.c +++ b/hw/pci-host/raven.c @@ -33,7 +33,7 @@ #include "hw/qdev-properties.h" #include "hw/intc/i8259.h" #include "hw/core/irq.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "qom/object.h" #define TYPE_RAVEN_PCI_DEVICE "raven" diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index 11bf406ef7..2de80a5fae 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -14,7 +14,7 @@ #include "hw/sysbus.h" #include "hw/pci/pci_host.h" #include "hw/core/irq.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/pci-host/articia.h" #include "hw/pci-host/mv64361.h" #include "hw/isa/vt82c686.h" diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index b625686458..fa52451303 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -50,7 +50,7 @@ #include "hw/misc/empty_slot.h" #include "hw/misc/unimp.h" #include "hw/core/irq.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/core/loader.h" #include "elf.h" #include "trace.h" diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 04755ed1ec..414e553600 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -109,7 +109,7 @@ #include "hw/misc/armsse-mhu.h" #include "hw/misc/armsse-cpu-pwrctrl.h" #include "hw/misc/unimp.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/core/clock.h" #include "hw/core/split-irq.h" #include "hw/cpu/cluster.h" diff --git a/include/hw/arm/bcm2835_peripherals.h b/include/hw/arm/bcm2835_peripherals.h index 1eeaeec9e0..d46d892956 100644 --- a/include/hw/arm/bcm2835_peripherals.h +++ b/include/hw/arm/bcm2835_peripherals.h @@ -17,7 +17,7 @@ #include "hw/char/bcm2835_aux.h" #include "hw/display/bcm2835_fb.h" #include "hw/dma/bcm2835_dma.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/intc/bcm2835_ic.h" #include "hw/misc/bcm2835_property.h" #include "hw/misc/bcm2835_rng.h" diff --git a/include/hw/arm/exynos4210.h b/include/hw/arm/exynos4210.h index d33fe38586..fbe4370219 100644 --- a/include/hw/arm/exynos4210.h +++ b/include/hw/arm/exynos4210.h @@ -24,7 +24,7 @@ #ifndef EXYNOS4210_H #define EXYNOS4210_H -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/sysbus.h" #include "hw/cpu/a9mpcore.h" #include "hw/intc/exynos4210_gic.h" diff --git a/include/hw/arm/fsl-imx6.h b/include/hw/arm/fsl-imx6.h index 124bbd478f..5520473ba0 100644 --- a/include/hw/arm/fsl-imx6.h +++ b/include/hw/arm/fsl-imx6.h @@ -33,7 +33,7 @@ #include "hw/usb/chipidea.h" #include "hw/usb/imx-usb-phy.h" #include "hw/pci-host/designware.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "system/memory.h" #include "cpu.h" #include "qom/object.h" diff --git a/include/hw/arm/fsl-imx7.h b/include/hw/arm/fsl-imx7.h index aa7818c499..710831c8bf 100644 --- a/include/hw/arm/fsl-imx7.h +++ b/include/hw/arm/fsl-imx7.h @@ -36,7 +36,7 @@ #include "hw/net/imx_fec.h" #include "hw/pci-host/designware.h" #include "hw/usb/chipidea.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "cpu.h" #include "qom/object.h" #include "qemu/units.h" diff --git a/include/hw/arm/fsl-imx8mp.h b/include/hw/arm/fsl-imx8mp.h index d016f7d337..1275df22f1 100644 --- a/include/hw/arm/fsl-imx8mp.h +++ b/include/hw/arm/fsl-imx8mp.h @@ -18,7 +18,7 @@ #include "hw/misc/imx8mp_analog.h" #include "hw/misc/imx8mp_ccm.h" #include "hw/net/imx_fec.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/pci-host/designware.h" #include "hw/pci-host/fsl_imx8m_phy.h" #include "hw/sd/sdhci.h" diff --git a/include/hw/arm/max78000_soc.h b/include/hw/arm/max78000_soc.h index a203079ee9..1a6cdb3949 100644 --- a/include/hw/arm/max78000_soc.h +++ b/include/hw/arm/max78000_soc.h @@ -9,7 +9,7 @@ #ifndef HW_ARM_MAX78000_SOC_H #define HW_ARM_MAX78000_SOC_H -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/arm/armv7m.h" #include "hw/misc/max78000_aes.h" #include "hw/misc/max78000_gcr.h" diff --git a/include/hw/arm/stm32f205_soc.h b/include/hw/arm/stm32f205_soc.h index d3de6b94da..745433b56c 100644 --- a/include/hw/arm/stm32f205_soc.h +++ b/include/hw/arm/stm32f205_soc.h @@ -29,7 +29,7 @@ #include "hw/timer/stm32f2xx_timer.h" #include "hw/char/stm32f2xx_usart.h" #include "hw/adc/stm32f2xx_adc.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/ssi/stm32f2xx_spi.h" #include "hw/arm/armv7m.h" #include "hw/core/clock.h" diff --git a/include/hw/arm/stm32f405_soc.h b/include/hw/arm/stm32f405_soc.h index 2eeada64de..9fe40da968 100644 --- a/include/hw/arm/stm32f405_soc.h +++ b/include/hw/arm/stm32f405_soc.h @@ -31,7 +31,7 @@ #include "hw/char/stm32f2xx_usart.h" #include "hw/adc/stm32f2xx_adc.h" #include "hw/misc/stm32f4xx_exti.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/ssi/stm32f2xx_spi.h" #include "hw/arm/armv7m.h" #include "qom/object.h" diff --git a/include/hw/arm/stm32l4x5_soc.h b/include/hw/arm/stm32l4x5_soc.h index c2fae6e23f..9c3d662bca 100644 --- a/include/hw/arm/stm32l4x5_soc.h +++ b/include/hw/arm/stm32l4x5_soc.h @@ -26,7 +26,7 @@ #include "system/memory.h" #include "hw/arm/armv7m.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/misc/stm32l4x5_syscfg.h" #include "hw/misc/stm32l4x5_exti.h" #include "hw/misc/stm32l4x5_rcc.h" diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h index a3117bd6c5..620b20d0e2 100644 --- a/include/hw/arm/xlnx-zynqmp.h +++ b/include/hw/arm/xlnx-zynqmp.h @@ -37,7 +37,7 @@ #include "hw/dma/xlnx_csu_dma.h" #include "hw/nvram/xlnx-bbram.h" #include "hw/nvram/xlnx-zynqmp-efuse.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/misc/xlnx-zynqmp-apu-ctrl.h" #include "hw/misc/xlnx-zynqmp-crf.h" #include "hw/timer/cadence_ttc.h" diff --git a/include/hw/or-irq.h b/include/hw/core/or-irq.h similarity index 100% rename from include/hw/or-irq.h rename to include/hw/core/or-irq.h diff --git a/include/hw/intc/aspeed_intc.h b/include/hw/intc/aspeed_intc.h index 51288384a5..6dd8effcd8 100644 --- a/include/hw/intc/aspeed_intc.h +++ b/include/hw/intc/aspeed_intc.h @@ -10,7 +10,7 @@ #include "hw/sysbus.h" #include "qom/object.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #define TYPE_ASPEED_INTC "aspeed.intc" #define TYPE_ASPEED_2700_INTC TYPE_ASPEED_INTC "-ast2700" diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index c92da2e2ac..77551b9592 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -31,7 +31,7 @@ #include "hw/misc/mac_via.h" #include "hw/net/dp8393x.h" #include "hw/char/escc.h" -#include "hw/or-irq.h" +#include "hw/core/or-irq.h" #include "hw/scsi/esp.h" #include "hw/block/swim.h" #include "hw/nubus/mac-nubus-bridge.h" From c094dd45b725c407b8628cedc8a30924b0f19d2c Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:49 +0100 Subject: [PATCH 014/152] include: move hw/platform-bus.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/arm/virt-acpi-build.c | 2 +- hw/arm/virt.c | 2 +- hw/core/platform-bus.c | 2 +- hw/core/sysbus-fdt.c | 2 +- hw/loongarch/virt-acpi-build.c | 2 +- hw/loongarch/virt.c | 2 +- hw/ppc/e500.c | 2 +- hw/ppc/e500.h | 2 +- hw/riscv/virt.c | 2 +- include/hw/{ => core}/platform-bus.h | 0 10 files changed, 9 insertions(+), 9 deletions(-) rename include/hw/{ => core}/platform-bus.h (100%) diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index 200e2a1da7..03b4342574 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -54,7 +54,7 @@ #include "hw/arm/virt.h" #include "hw/intc/arm_gicv3_its_common.h" #include "hw/mem/nvdimm.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "system/numa.h" #include "system/reset.h" #include "system/tpm.h" diff --git a/hw/arm/virt.c b/hw/arm/virt.c index c005eb914c..0d2652e6db 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -62,7 +62,7 @@ #include "hw/pci-bridge/pci_expander_bridge.h" #include "hw/virtio/virtio-pci.h" #include "hw/core/sysbus-fdt.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "hw/qdev-properties.h" #include "hw/arm/fdt.h" #include "hw/intc/arm_gic.h" diff --git a/hw/core/platform-bus.c b/hw/core/platform-bus.c index 6950063de4..4b6cc5f649 100644 --- a/hw/core/platform-bus.c +++ b/hw/core/platform-bus.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/core/sysbus-fdt.c b/hw/core/sysbus-fdt.c index 59f1d17de1..89d0c46445 100644 --- a/hw/core/sysbus-fdt.c +++ b/hw/core/sysbus-fdt.c @@ -32,7 +32,7 @@ #include "system/device_tree.h" #include "system/tpm.h" #include "hw/arm/smmuv3.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "hw/display/ramfb.h" #include "hw/uefi/var-service-api.h" #include "hw/arm/fdt.h" diff --git a/hw/loongarch/virt-acpi-build.c b/hw/loongarch/virt-acpi-build.c index 3694c9827f..8ff9ebdcd9 100644 --- a/hw/loongarch/virt-acpi-build.c +++ b/hw/loongarch/virt-acpi-build.c @@ -32,7 +32,7 @@ #include "hw/pci-host/gpex.h" #include "system/system.h" #include "system/tpm.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "hw/acpi/aml-build.h" #include "hw/acpi/hmat.h" diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index ea53941aeb..6efa15da47 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -37,7 +37,7 @@ #include "qapi/qapi-visit-common.h" #include "hw/acpi/generic_event_device.h" #include "hw/mem/nvdimm.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "hw/display/ramfb.h" #include "hw/uefi/var-service-api.h" #include "hw/mem/pc-dimm.h" diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index 769f18023d..7c65757e21 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -46,7 +46,7 @@ #include "qemu/option.h" #include "hw/pci-host/ppce500.h" #include "qemu/error-report.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "hw/net/fsl_etsec/etsec.h" #include "hw/i2c/i2c.h" #include "hw/core/irq.h" diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h index cda539bda1..11f8ae5317 100644 --- a/hw/ppc/e500.h +++ b/hw/ppc/e500.h @@ -2,7 +2,7 @@ #define PPCE500_H #include "hw/core/boards.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "qom/object.h" #define PLATFORM_CLK_FREQ_HZ (400 * 1000 * 1000) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 0505bffa44..9cb4f16432 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -43,7 +43,7 @@ #include "hw/intc/riscv_aplic.h" #include "hw/intc/sifive_plic.h" #include "hw/misc/sifive_test.h" -#include "hw/platform-bus.h" +#include "hw/core/platform-bus.h" #include "chardev/char.h" #include "system/device_tree.h" #include "system/system.h" diff --git a/include/hw/platform-bus.h b/include/hw/core/platform-bus.h similarity index 100% rename from include/hw/platform-bus.h rename to include/hw/core/platform-bus.h From a5d7e646f62e9cf73f50a5dfdf08f74d1d9b39a3 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:51 +0100 Subject: [PATCH 015/152] include: move hw/ptimer.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/arm/musicpal.c | 2 +- hw/core/ptimer.c | 2 +- hw/dma/xilinx_axidma.c | 2 +- hw/dma/xlnx_csu_dma.c | 2 +- hw/m68k/mcf5206.c | 2 +- hw/m68k/mcf5208.c | 2 +- hw/net/fsl_etsec/etsec.c | 2 +- hw/net/fsl_etsec/etsec.h | 2 +- hw/net/lan9118.c | 2 +- hw/rtc/exynos4210_rtc.c | 2 +- hw/sparc/leon3.c | 2 +- hw/ssi/xilinx_spips.c | 2 +- hw/timer/arm_mptimer.c | 2 +- hw/timer/arm_timer.c | 2 +- hw/timer/digic-timer.c | 2 +- hw/timer/exynos4210_mct.c | 2 +- hw/timer/exynos4210_pwm.c | 2 +- hw/timer/grlib_gptimer.c | 2 +- hw/timer/sh_timer.c | 2 +- hw/timer/slavio_timer.c | 2 +- hw/timer/xilinx_timer.c | 2 +- include/hw/{ => core}/ptimer.h | 0 include/hw/display/xlnx_dp.h | 2 +- include/hw/dma/xlnx_csu_dma.h | 2 +- include/hw/net/xlnx-versal-canfd.h | 2 +- include/hw/net/xlnx-zynqmp-can.h | 2 +- include/hw/timer/allwinner-a10-pit.h | 2 +- include/hw/timer/armv7m_systick.h | 2 +- include/hw/timer/cmsdk-apb-dualtimer.h | 2 +- include/hw/timer/cmsdk-apb-timer.h | 2 +- include/hw/timer/digic-timer.h | 2 +- include/hw/timer/imx_epit.h | 2 +- include/hw/timer/imx_gpt.h | 2 +- include/hw/timer/mss-timer.h | 2 +- include/hw/watchdog/allwinner-wdt.h | 2 +- include/hw/watchdog/cmsdk-apb-watchdog.h | 2 +- include/hw/watchdog/wdt_imx2.h | 2 +- tests/unit/ptimer-test.c | 2 +- 38 files changed, 37 insertions(+), 37 deletions(-) rename include/hw/{ => core}/ptimer.h (100%) diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index 100a9f59b3..a4ddc0d08f 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -21,7 +21,7 @@ #include "hw/core/boards.h" #include "hw/char/serial-mm.h" #include "qemu/timer.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "hw/block/flash.h" #include "ui/console.h" diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c index a7337f02b8..e42e06fa4d 100644 --- a/hw/core/ptimer.c +++ b/hw/core/ptimer.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "migration/vmstate.h" #include "qemu/host-utils.h" #include "exec/replay-core.h" diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index 9b05080ae5..15da3fcbc2 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -28,7 +28,7 @@ #include "qemu/timer.h" #include "hw/hw.h" #include "hw/core/irq.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/dma/xlnx_csu_dma.c b/hw/dma/xlnx_csu_dma.c index 0b1185325b..92f445034e 100644 --- a/hw/dma/xlnx_csu_dma.c +++ b/hw/dma/xlnx_csu_dma.c @@ -26,7 +26,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "system/dma.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/stream.h" #include "hw/register.h" #include "hw/dma/xlnx_csu_dma.h" diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c index 4cf86d510b..e17da4fd20 100644 --- a/hw/m68k/mcf5206.c +++ b/hw/m68k/mcf5206.c @@ -15,7 +15,7 @@ #include "hw/core/irq.h" #include "hw/m68k/mcf.h" #include "qemu/timer.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "system/system.h" #include "hw/sysbus.h" diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index b81305ae6e..3a87e1f282 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -25,7 +25,7 @@ #include "hw/m68k/mcf.h" #include "hw/m68k/mcf_fec.h" #include "qemu/timer.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "system/system.h" #include "system/qtest.h" #include "net/net.h" diff --git a/hw/net/fsl_etsec/etsec.c b/hw/net/fsl_etsec/etsec.c index 6ae8a1e1a3..e6a29d9ec6 100644 --- a/hw/net/fsl_etsec/etsec.c +++ b/hw/net/fsl_etsec/etsec.c @@ -30,7 +30,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/net/mii.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "etsec.h" #include "registers.h" diff --git a/hw/net/fsl_etsec/etsec.h b/hw/net/fsl_etsec/etsec.h index bd2de3f99c..ca8ad5638a 100644 --- a/hw/net/fsl_etsec/etsec.h +++ b/hw/net/fsl_etsec/etsec.h @@ -27,7 +27,7 @@ #include "hw/sysbus.h" #include "net/net.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "qom/object.h" /* Buffer Descriptors */ diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c index 1c9bb4807d..191fd8b421 100644 --- a/hw/net/lan9118.c +++ b/hw/net/lan9118.c @@ -18,7 +18,7 @@ #include "hw/core/irq.h" #include "hw/net/lan9118_phy.h" #include "hw/net/lan9118.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/bswap.h" diff --git a/hw/rtc/exynos4210_rtc.c b/hw/rtc/exynos4210_rtc.c index a7e17031ca..a15b5274bd 100644 --- a/hw/rtc/exynos4210_rtc.c +++ b/hw/rtc/exynos4210_rtc.c @@ -32,7 +32,7 @@ #include "migration/vmstate.h" #include "qemu/timer.h" #include "qemu/bcd.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/core/irq.h" diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index cd1a03a558..50f1cf9170 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -32,7 +32,7 @@ #include "cpu.h" #include "hw/core/irq.h" #include "qemu/timer.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "system/system.h" #include "system/qtest.h" diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c index b2f6627518..5fa9bf965f 100644 --- a/hw/ssi/xilinx_spips.c +++ b/hw/ssi/xilinx_spips.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c index ac6313039a..adec87cc8d 100644 --- a/hw/timer/arm_mptimer.c +++ b/hw/timer/arm_mptimer.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "hw/hw.h" #include "hw/core/irq.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "hw/timer/arm_mptimer.h" #include "migration/vmstate.h" diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c index e5ef28de6f..8d8b250698 100644 --- a/hw/timer/arm_timer.c +++ b/hw/timer/arm_timer.c @@ -12,7 +12,7 @@ #include "migration/vmstate.h" #include "qemu/timer.h" #include "hw/core/irq.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "qemu/module.h" #include "qemu/log.h" diff --git a/hw/timer/digic-timer.c b/hw/timer/digic-timer.c index 355138d354..12b79914df 100644 --- a/hw/timer/digic-timer.c +++ b/hw/timer/digic-timer.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "qemu/module.h" #include "qemu/log.h" diff --git a/hw/timer/exynos4210_mct.c b/hw/timer/exynos4210_mct.c index 06524efca2..f6527a451b 100644 --- a/hw/timer/exynos4210_mct.c +++ b/hw/timer/exynos4210_mct.c @@ -58,7 +58,7 @@ #include "migration/vmstate.h" #include "qemu/timer.h" #include "qemu/module.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/arm/exynos4210.h" #include "hw/core/irq.h" diff --git a/hw/timer/exynos4210_pwm.c b/hw/timer/exynos4210_pwm.c index dc76932fdf..1643fa3941 100644 --- a/hw/timer/exynos4210_pwm.c +++ b/hw/timer/exynos4210_pwm.c @@ -26,7 +26,7 @@ #include "migration/vmstate.h" #include "qemu/timer.h" #include "qemu/module.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/arm/exynos4210.h" #include "hw/core/irq.h" diff --git a/hw/timer/grlib_gptimer.c b/hw/timer/grlib_gptimer.c index 6218c255d2..82d0d9d762 100644 --- a/hw/timer/grlib_gptimer.c +++ b/hw/timer/grlib_gptimer.c @@ -29,7 +29,7 @@ #include "hw/sysbus.h" #include "qemu/timer.h" #include "hw/core/irq.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "qemu/module.h" diff --git a/hw/timer/sh_timer.c b/hw/timer/sh_timer.c index adc0571552..41ece9c613 100644 --- a/hw/timer/sh_timer.c +++ b/hw/timer/sh_timer.c @@ -14,7 +14,7 @@ #include "hw/core/irq.h" #include "hw/sh4/sh.h" #include "hw/timer/tmu012.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "trace.h" #define TIMER_TCR_TPSC (7 << 0) diff --git a/hw/timer/slavio_timer.c b/hw/timer/slavio_timer.c index 5bf94157ca..f66b3aaa43 100644 --- a/hw/timer/slavio_timer.c +++ b/hw/timer/slavio_timer.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/timer.h" #include "hw/core/irq.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/timer/xilinx_timer.c b/hw/timer/xilinx_timer.c index c1b6d2bdf2..fbc1001591 100644 --- a/hw/timer/xilinx_timer.c +++ b/hw/timer/xilinx_timer.c @@ -29,7 +29,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/log.h" diff --git a/include/hw/ptimer.h b/include/hw/core/ptimer.h similarity index 100% rename from include/hw/ptimer.h rename to include/hw/core/ptimer.h diff --git a/include/hw/display/xlnx_dp.h b/include/hw/display/xlnx_dp.h index af859e477d..9ec5a90c34 100644 --- a/include/hw/display/xlnx_dp.h +++ b/include/hw/display/xlnx_dp.h @@ -35,7 +35,7 @@ #include "hw/dma/xlnx_dpdma.h" #include "qemu/audio.h" #include "qom/object.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #define AUD_CHBUF_MAX_DEPTH (32 * KiB) #define MAX_QEMU_BUFFER_SIZE (4 * KiB) diff --git a/include/hw/dma/xlnx_csu_dma.h b/include/hw/dma/xlnx_csu_dma.h index 922ab80eb6..85b6b64e0e 100644 --- a/include/hw/dma/xlnx_csu_dma.h +++ b/include/hw/dma/xlnx_csu_dma.h @@ -23,7 +23,7 @@ #include "hw/sysbus.h" #include "hw/register.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/stream.h" #define TYPE_XLNX_CSU_DMA "xlnx.csu_dma" diff --git a/include/hw/net/xlnx-versal-canfd.h b/include/hw/net/xlnx-versal-canfd.h index 396f90d6dc..d2e582918f 100644 --- a/include/hw/net/xlnx-versal-canfd.h +++ b/include/hw/net/xlnx-versal-canfd.h @@ -29,7 +29,7 @@ #define HW_CANFD_XILINX_H #include "hw/register.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "net/can_emu.h" #include "hw/qdev-clock.h" diff --git a/include/hw/net/xlnx-zynqmp-can.h b/include/hw/net/xlnx-zynqmp-can.h index fd2aa77760..8262f11d33 100644 --- a/include/hw/net/xlnx-zynqmp-can.h +++ b/include/hw/net/xlnx-zynqmp-can.h @@ -35,7 +35,7 @@ #include "net/can_emu.h" #include "net/can_host.h" #include "qemu/fifo32.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/qdev-clock.h" #define TYPE_XLNX_ZYNQMP_CAN "xlnx.zynqmp-can" diff --git a/include/hw/timer/allwinner-a10-pit.h b/include/hw/timer/allwinner-a10-pit.h index 8435758ad6..623a1fec21 100644 --- a/include/hw/timer/allwinner-a10-pit.h +++ b/include/hw/timer/allwinner-a10-pit.h @@ -1,7 +1,7 @@ #ifndef ALLWINNER_A10_PIT_H #define ALLWINNER_A10_PIT_H -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/sysbus.h" #include "qom/object.h" diff --git a/include/hw/timer/armv7m_systick.h b/include/hw/timer/armv7m_systick.h index ac7de0a43e..fb73f78a7b 100644 --- a/include/hw/timer/armv7m_systick.h +++ b/include/hw/timer/armv7m_systick.h @@ -14,7 +14,7 @@ #include "hw/sysbus.h" #include "qom/object.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/core/clock.h" #define TYPE_SYSTICK "armv7m_systick" diff --git a/include/hw/timer/cmsdk-apb-dualtimer.h b/include/hw/timer/cmsdk-apb-dualtimer.h index f098128a58..103ac22881 100644 --- a/include/hw/timer/cmsdk-apb-dualtimer.h +++ b/include/hw/timer/cmsdk-apb-dualtimer.h @@ -27,7 +27,7 @@ #define CMSDK_APB_DUALTIMER_H #include "hw/sysbus.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/core/clock.h" #include "qom/object.h" diff --git a/include/hw/timer/cmsdk-apb-timer.h b/include/hw/timer/cmsdk-apb-timer.h index 74eaf611ae..f8c8fb8ce5 100644 --- a/include/hw/timer/cmsdk-apb-timer.h +++ b/include/hw/timer/cmsdk-apb-timer.h @@ -13,7 +13,7 @@ #define CMSDK_APB_TIMER_H #include "hw/sysbus.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/core/clock.h" #include "qom/object.h" diff --git a/include/hw/timer/digic-timer.h b/include/hw/timer/digic-timer.h index da82fb4663..f62242eaad 100644 --- a/include/hw/timer/digic-timer.h +++ b/include/hw/timer/digic-timer.h @@ -19,7 +19,7 @@ #define HW_TIMER_DIGIC_TIMER_H #include "hw/sysbus.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "qom/object.h" #define TYPE_DIGIC_TIMER "digic-timer" diff --git a/include/hw/timer/imx_epit.h b/include/hw/timer/imx_epit.h index 79aff0cec2..2947fad106 100644 --- a/include/hw/timer/imx_epit.h +++ b/include/hw/timer/imx_epit.h @@ -30,7 +30,7 @@ #define IMX_EPIT_H #include "hw/sysbus.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/misc/imx_ccm.h" #include "qom/object.h" diff --git a/include/hw/timer/imx_gpt.h b/include/hw/timer/imx_gpt.h index 5488f7e4df..5c12f686e1 100644 --- a/include/hw/timer/imx_gpt.h +++ b/include/hw/timer/imx_gpt.h @@ -30,7 +30,7 @@ #define IMX_GPT_H #include "hw/sysbus.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/misc/imx_ccm.h" #include "qom/object.h" diff --git a/include/hw/timer/mss-timer.h b/include/hw/timer/mss-timer.h index da38512904..0cc376f945 100644 --- a/include/hw/timer/mss-timer.h +++ b/include/hw/timer/mss-timer.h @@ -26,7 +26,7 @@ #define HW_MSS_TIMER_H #include "hw/sysbus.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "qom/object.h" #define TYPE_MSS_TIMER "mss-timer" diff --git a/include/hw/watchdog/allwinner-wdt.h b/include/hw/watchdog/allwinner-wdt.h index 7fe41e20f2..6f84dbd1a7 100644 --- a/include/hw/watchdog/allwinner-wdt.h +++ b/include/hw/watchdog/allwinner-wdt.h @@ -24,7 +24,7 @@ #define HW_WATCHDOG_ALLWINNER_WDT_H #include "qom/object.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/sysbus.h" /* diff --git a/include/hw/watchdog/cmsdk-apb-watchdog.h b/include/hw/watchdog/cmsdk-apb-watchdog.h index 5bbf4979c9..9bf95ba06d 100644 --- a/include/hw/watchdog/cmsdk-apb-watchdog.h +++ b/include/hw/watchdog/cmsdk-apb-watchdog.h @@ -32,7 +32,7 @@ #define CMSDK_APB_WATCHDOG_H #include "hw/sysbus.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "hw/core/clock.h" #include "qom/object.h" diff --git a/include/hw/watchdog/wdt_imx2.h b/include/hw/watchdog/wdt_imx2.h index ddc49aaea4..53a8360e90 100644 --- a/include/hw/watchdog/wdt_imx2.h +++ b/include/hw/watchdog/wdt_imx2.h @@ -15,7 +15,7 @@ #include "qemu/bitops.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "qom/object.h" #define TYPE_IMX2_WDT "imx2.wdt" diff --git a/tests/unit/ptimer-test.c b/tests/unit/ptimer-test.c index 08240594bb..6de658812b 100644 --- a/tests/unit/ptimer-test.c +++ b/tests/unit/ptimer-test.c @@ -12,7 +12,7 @@ #include #include "qemu/main-loop.h" -#include "hw/ptimer.h" +#include "hw/core/ptimer.h" #include "ptimer-test.h" From 3775d199061225cc46e101a5ac3f3e88eb4704c0 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:54 +0100 Subject: [PATCH 016/152] include: move hw/qdev-clock.h to hw/core/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- docs/devel/clocks.rst | 4 ++-- hw/adc/npcm7xx_adc.c | 2 +- hw/arm/armsse.c | 2 +- hw/arm/armv7m.c | 2 +- hw/arm/aspeed.c | 2 +- hw/arm/aspeed_ast10x0.c | 2 +- hw/arm/aspeed_ast10x0_evb.c | 2 +- hw/arm/aspeed_ast27x0-fc.c | 2 +- hw/arm/aspeed_ast27x0-ssp.c | 2 +- hw/arm/aspeed_ast27x0-tsp.c | 2 +- hw/arm/fby35.c | 2 +- hw/arm/max78000_soc.c | 2 +- hw/arm/max78000fthr.c | 2 +- hw/arm/mps2-tz.c | 2 +- hw/arm/mps2.c | 2 +- hw/arm/mps3r.c | 2 +- hw/arm/msf2-soc.c | 2 +- hw/arm/msf2-som.c | 2 +- hw/arm/musca.c | 2 +- hw/arm/netduino2.c | 2 +- hw/arm/netduinoplus2.c | 2 +- hw/arm/npcm7xx.c | 2 +- hw/arm/npcm8xx.c | 2 +- hw/arm/nrf51_soc.c | 2 +- hw/arm/olimex-stm32-h405.c | 2 +- hw/arm/stellaris.c | 2 +- hw/arm/stm32f100_soc.c | 2 +- hw/arm/stm32f205_soc.c | 2 +- hw/arm/stm32f405_soc.c | 2 +- hw/arm/stm32l4x5_soc.c | 2 +- hw/arm/stm32vldiscovery.c | 2 +- hw/arm/xilinx_zynq.c | 2 +- hw/char/cadence_uart.c | 2 +- hw/char/ibex_uart.c | 2 +- hw/char/pl011.c | 2 +- hw/char/stm32l4x5_usart.c | 2 +- hw/core/qdev-clock.c | 2 +- hw/core/qdev.c | 2 +- hw/gpio/stm32l4x5_gpio.c | 2 +- hw/mips/boston.c | 2 +- hw/mips/cps.c | 2 +- hw/mips/malta.c | 2 +- hw/misc/npcm7xx_mft.c | 2 +- hw/misc/npcm7xx_pwm.c | 2 +- hw/misc/npcm_clk.c | 2 +- hw/misc/stm32l4x5_rcc.c | 2 +- hw/misc/stm32l4x5_syscfg.c | 2 +- hw/misc/zynq_slcr.c | 2 +- hw/net/npcm7xx_emc.c | 2 +- hw/timer/armv7m_systick.c | 2 +- hw/timer/cmsdk-apb-dualtimer.c | 2 +- hw/timer/cmsdk-apb-timer.c | 2 +- hw/timer/npcm7xx_timer.c | 2 +- hw/timer/sse-counter.c | 2 +- hw/timer/sse-timer.c | 2 +- hw/timer/stellaris-gptm.c | 2 +- hw/watchdog/cmsdk-apb-watchdog.c | 2 +- include/hw/{ => core}/qdev-clock.h | 0 include/hw/misc/bcm2835_cprman.h | 2 +- include/hw/net/xlnx-versal-canfd.h | 2 +- include/hw/net/xlnx-zynqmp-can.h | 2 +- rust/hw/core/wrapper.h | 2 +- target/mips/cpu.c | 2 +- target/xtensa/cpu.c | 2 +- 65 files changed, 65 insertions(+), 65 deletions(-) rename include/hw/{ => core}/qdev-clock.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index f44259b305..41b536c3a2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3952,7 +3952,7 @@ M: Luc Michel R: Damien Hedde S: Maintained F: include/hw/core/clock.h -F: include/hw/qdev-clock.h +F: include/hw/core/qdev-clock.h F: hw/core/clock.c F: hw/core/clock-vmstate.c F: hw/core/qdev-clock.c diff --git a/docs/devel/clocks.rst b/docs/devel/clocks.rst index 2dbdc66860..16de32147b 100644 --- a/docs/devel/clocks.rst +++ b/docs/devel/clocks.rst @@ -47,7 +47,7 @@ Here is an example of clocks:: +--------------+ Clocks are defined in the ``include/hw/core/clock.h`` header and device -related functions are defined in the ``include/hw/qdev-clock.h`` +related functions are defined in the ``include/hw/core/qdev-clock.h`` header. The clock state @@ -97,7 +97,7 @@ Note that it is possible to create a static array describing clock inputs and outputs. The function ``qdev_init_clocks()`` must be called with the array as parameter to initialize the clocks: it has the same behaviour as calling the ``qdev_init_clock_in/out()`` for each clock in the array. To ease the array -construction, some macros are defined in ``include/hw/qdev-clock.h``. +construction, some macros are defined in ``include/hw/core/qdev-clock.h``. As an example, the following creates 2 clocks to a device: one input and one output. diff --git a/hw/adc/npcm7xx_adc.c b/hw/adc/npcm7xx_adc.c index ddb219d456..4494d5558f 100644 --- a/hw/adc/npcm7xx_adc.c +++ b/hw/adc/npcm7xx_adc.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" #include "hw/adc/npcm7xx_adc.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" #include "migration/vmstate.h" diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index c0d99182bf..42ceb097ae 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -23,7 +23,7 @@ #include "hw/arm/armsse-version.h" #include "hw/arm/boot.h" #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" /* * The SSE-300 puts some devices in different places to the diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index 8198a83d15..d9c7bcbcd7 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -14,7 +14,7 @@ #include "hw/arm/boot.h" #include "hw/core/loader.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "elf.h" #include "system/reset.h" #include "qemu/error-report.h" diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c index 3a5071a384..6199d2d2d7 100644 --- a/hw/arm/aspeed.c +++ b/hw/arm/aspeed.c @@ -21,7 +21,7 @@ #include "system/block-backend.h" #include "qemu/error-report.h" #include "qemu/units.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "system/system.h" static struct arm_boot_info aspeed_board_binfo = { diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c index ca487774ae..f923b9505b 100644 --- a/hw/arm/aspeed_ast10x0.c +++ b/hw/arm/aspeed_ast10x0.c @@ -13,7 +13,7 @@ #include "qapi/error.h" #include "system/address-spaces.h" #include "system/system.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #include "hw/arm/aspeed_soc.h" diff --git a/hw/arm/aspeed_ast10x0_evb.c b/hw/arm/aspeed_ast10x0_evb.c index 7af2a77865..329578a542 100644 --- a/hw/arm/aspeed_ast10x0_evb.c +++ b/hw/arm/aspeed_ast10x0_evb.c @@ -12,7 +12,7 @@ #include "hw/arm/machines-qom.h" #include "hw/arm/aspeed.h" #include "hw/arm/aspeed_soc.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "system/system.h" #include "hw/i2c/smbus_eeprom.h" diff --git a/hw/arm/aspeed_ast27x0-fc.c b/hw/arm/aspeed_ast27x0-fc.c index 1678cce416..0502a137f3 100644 --- a/hw/arm/aspeed_ast27x0-fc.c +++ b/hw/arm/aspeed_ast27x0-fc.c @@ -16,7 +16,7 @@ #include "system/system.h" #include "hw/arm/aspeed.h" #include "hw/core/boards.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/arm/aspeed_soc.h" #include "hw/core/loader.h" #include "hw/arm/boot.h" diff --git a/hw/arm/aspeed_ast27x0-ssp.c b/hw/arm/aspeed_ast27x0-ssp.c index d12a9b8459..04d3705659 100644 --- a/hw/arm/aspeed_ast27x0-ssp.c +++ b/hw/arm/aspeed_ast27x0-ssp.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #include "hw/arm/aspeed_soc.h" #include "hw/arm/aspeed_coprocessor.h" diff --git a/hw/arm/aspeed_ast27x0-tsp.c b/hw/arm/aspeed_ast27x0-tsp.c index 5b75e14206..f40c70fea5 100644 --- a/hw/arm/aspeed_ast27x0-tsp.c +++ b/hw/arm/aspeed_ast27x0-tsp.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #include "hw/arm/aspeed_soc.h" #include "hw/arm/aspeed_coprocessor.h" diff --git a/hw/arm/fby35.c b/hw/arm/fby35.c index 3e036cfd2b..d3bfd2c7d2 100644 --- a/hw/arm/fby35.c +++ b/hw/arm/fby35.c @@ -11,7 +11,7 @@ #include "system/system.h" #include "system/block-backend.h" #include "hw/core/boards.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/arm/aspeed_soc.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/max78000_soc.c b/hw/arm/max78000_soc.c index 7f1856f5ba..321e63723e 100644 --- a/hw/arm/max78000_soc.c +++ b/hw/arm/max78000_soc.c @@ -14,7 +14,7 @@ #include "system/address-spaces.h" #include "system/system.h" #include "hw/arm/max78000_soc.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" static const uint32_t max78000_icc_addr[] = {0x4002a000, 0x4002a800}; diff --git a/hw/arm/max78000fthr.c b/hw/arm/max78000fthr.c index e4ceb7efcd..4b6e76e46b 100644 --- a/hw/arm/max78000fthr.c +++ b/hw/arm/max78000fthr.c @@ -10,7 +10,7 @@ #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/max78000_soc.h" #include "hw/arm/boot.h" diff --git a/hw/arm/mps2-tz.c b/hw/arm/mps2-tz.c index c262a9c679..f101c1b7c3 100644 --- a/hw/arm/mps2-tz.c +++ b/hw/arm/mps2-tz.c @@ -73,7 +73,7 @@ #include "hw/net/lan9118.h" #include "net/net.h" #include "hw/core/split-irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qom/object.h" #include "hw/core/irq.h" diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c index af3b012489..7d2efc703b 100644 --- a/hw/arm/mps2.c +++ b/hw/arm/mps2.c @@ -48,7 +48,7 @@ #include "hw/net/lan9118.h" #include "net/net.h" #include "hw/watchdog/cmsdk-apb-watchdog.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qobject/qlist.h" #include "qom/object.h" diff --git a/hw/arm/mps3r.c b/hw/arm/mps3r.c index c64e103f59..77a0c0b7af 100644 --- a/hw/arm/mps3r.c +++ b/hw/arm/mps3r.c @@ -33,7 +33,7 @@ #include "system/system.h" #include "hw/core/boards.h" #include "hw/core/or-irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/arm/boot.h" #include "hw/arm/bsa.h" diff --git a/hw/arm/msf2-soc.c b/hw/arm/msf2-soc.c index c5e9c7175a..27d77af9dc 100644 --- a/hw/arm/msf2-soc.c +++ b/hw/arm/msf2-soc.c @@ -29,7 +29,7 @@ #include "hw/char/serial-mm.h" #include "hw/arm/msf2-soc.h" #include "hw/misc/unimp.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "system/system.h" #define MSF2_TIMER_BASE 0x40004000 diff --git a/hw/arm/msf2-som.c b/hw/arm/msf2-som.c index 78d98c4a40..10382f0d3b 100644 --- a/hw/arm/msf2-som.c +++ b/hw/arm/msf2-som.c @@ -33,7 +33,7 @@ #include "hw/qdev-properties.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "system/address-spaces.h" #include "hw/arm/msf2-soc.h" diff --git a/hw/arm/musca.c b/hw/arm/musca.c index 7b30d9bd44..75d82eebca 100644 --- a/hw/arm/musca.c +++ b/hw/arm/musca.c @@ -34,7 +34,7 @@ #include "hw/misc/tz-ppc.h" #include "hw/misc/unimp.h" #include "hw/rtc/pl031.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qom/object.h" #define MUSCA_NUMIRQ_MAX 96 diff --git a/hw/arm/netduino2.c b/hw/arm/netduino2.c index 1657612fe7..c928105936 100644 --- a/hw/arm/netduino2.c +++ b/hw/arm/netduino2.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/stm32f205_soc.h" #include "hw/arm/boot.h" diff --git a/hw/arm/netduinoplus2.c b/hw/arm/netduinoplus2.c index 746a3deef8..d64d2aefe4 100644 --- a/hw/arm/netduinoplus2.c +++ b/hw/arm/netduinoplus2.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/stm32f405_soc.h" #include "hw/arm/boot.h" diff --git a/hw/arm/npcm7xx.c b/hw/arm/npcm7xx.c index 6d6f674486..6905e1d8a7 100644 --- a/hw/arm/npcm7xx.c +++ b/hw/arm/npcm7xx.c @@ -21,7 +21,7 @@ #include "hw/char/serial-mm.h" #include "hw/core/loader.h" #include "hw/misc/unimp.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "exec/tswap.h" diff --git a/hw/arm/npcm8xx.c b/hw/arm/npcm8xx.c index 2bf5e132bb..71e47dac2e 100644 --- a/hw/arm/npcm8xx.c +++ b/hw/arm/npcm8xx.c @@ -24,7 +24,7 @@ #include "hw/intc/arm_gic.h" #include "hw/core/loader.h" #include "hw/misc/unimp.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/units.h" diff --git a/hw/arm/nrf51_soc.c b/hw/arm/nrf51_soc.c index d8cc3214ed..a4ccfa373a 100644 --- a/hw/arm/nrf51_soc.c +++ b/hw/arm/nrf51_soc.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "hw/arm/boot.h" #include "hw/sysbus.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #include "qemu/log.h" diff --git a/hw/arm/olimex-stm32-h405.c b/hw/arm/olimex-stm32-h405.c index d15545ff07..1a08d74215 100644 --- a/hw/arm/olimex-stm32-h405.c +++ b/hw/arm/olimex-stm32-h405.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/stm32f405_soc.h" #include "hw/arm/boot.h" diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index 34cbcbe32c..f3e8e15de8 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -31,7 +31,7 @@ #include "migration/vmstate.h" #include "hw/misc/unimp.h" #include "hw/timer/stellaris-gptm.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qom/object.h" #include "qobject/qlist.h" #include "ui/input.h" diff --git a/hw/arm/stm32f100_soc.c b/hw/arm/stm32f100_soc.c index 0702d51cc3..8d61be72c4 100644 --- a/hw/arm/stm32f100_soc.c +++ b/hw/arm/stm32f100_soc.c @@ -30,7 +30,7 @@ #include "system/address-spaces.h" #include "hw/arm/stm32f100_soc.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #include "system/system.h" diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c index e3c7203c6e..406f614f1d 100644 --- a/hw/arm/stm32f205_soc.c +++ b/hw/arm/stm32f205_soc.c @@ -29,7 +29,7 @@ #include "system/address-spaces.h" #include "hw/arm/stm32f205_soc.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "system/system.h" /* At the moment only Timer 2 to 5 are modelled */ diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c index c8684e2b4c..c2bc460603 100644 --- a/hw/arm/stm32f405_soc.c +++ b/hw/arm/stm32f405_soc.c @@ -27,7 +27,7 @@ #include "system/address-spaces.h" #include "system/system.h" #include "hw/arm/stm32f405_soc.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #define RCC_ADDR 0x40023800 diff --git a/hw/arm/stm32l4x5_soc.c b/hw/arm/stm32l4x5_soc.c index c28ce15e6b..39b8cdf97d 100644 --- a/hw/arm/stm32l4x5_soc.c +++ b/hw/arm/stm32l4x5_soc.c @@ -30,7 +30,7 @@ #include "hw/arm/stm32l4x5_soc.h" #include "hw/char/stm32l4x5_usart.h" #include "hw/gpio/stm32l4x5_gpio.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #define FLASH_BASE_ADDRESS 0x08000000 diff --git a/hw/arm/stm32vldiscovery.c b/hw/arm/stm32vldiscovery.c index 4843c5565b..e7e1b8200e 100644 --- a/hw/arm/stm32vldiscovery.c +++ b/hw/arm/stm32vldiscovery.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/stm32f100_soc.h" #include "hw/arm/boot.h" diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c index e127b232d7..0d9c01e4b7 100644 --- a/hw/arm/xilinx_zynq.c +++ b/hw/arm/xilinx_zynq.c @@ -34,7 +34,7 @@ #include "hw/char/cadence_uart.h" #include "hw/net/cadence_gem.h" #include "hw/cpu/a9mpcore.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #include "system/reset.h" #include "qom/object.h" diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c index 738ba3114b..58c4c95fde 100644 --- a/hw/char/cadence_uart.c +++ b/hw/char/cadence_uart.c @@ -31,7 +31,7 @@ #include "qemu/module.h" #include "hw/char/cadence_uart.h" #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties-system.h" #include "trace.h" diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c index db85251109..23abeacb1b 100644 --- a/hw/char/ibex_uart.c +++ b/hw/char/ibex_uart.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "hw/char/ibex_uart.h" #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/registerfields.h" diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 75fdb8158e..030d6a2e8b 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -23,7 +23,7 @@ #include "hw/char/pl011.h" #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/char/stm32l4x5_usart.c b/hw/char/stm32l4x5_usart.c index ce4a35da8f..4533cbc93b 100644 --- a/hw/char/stm32l4x5_usart.c +++ b/hw/char/stm32l4x5_usart.c @@ -25,7 +25,7 @@ #include "hw/char/stm32l4x5_usart.h" #include "hw/core/clock.h" #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/registerfields.h" diff --git a/hw/core/qdev-clock.c b/hw/core/qdev-clock.c index dacafa4e03..b96525951c 100644 --- a/hw/core/qdev-clock.c +++ b/hw/core/qdev-clock.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-core.h" #include "qapi/error.h" diff --git a/hw/core/qdev.c b/hw/core/qdev.c index f9f56c66ae..fae9ffc759 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -36,7 +36,7 @@ #include "hw/qdev-properties.h" #include "hw/core/boards.h" #include "hw/sysbus.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/gpio/stm32l4x5_gpio.c b/hw/gpio/stm32l4x5_gpio.c index a5a38da638..5686bd53c2 100644 --- a/hw/gpio/stm32l4x5_gpio.c +++ b/hw/gpio/stm32l4x5_gpio.c @@ -21,7 +21,7 @@ #include "hw/gpio/stm32l4x5_gpio.h" #include "hw/core/irq.h" #include "hw/core/clock.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "qapi/visitor.h" #include "qapi/error.h" diff --git a/hw/mips/boston.c b/hw/mips/boston.c index b4b4a86a5f..b63b27d03f 100644 --- a/hw/mips/boston.c +++ b/hw/mips/boston.c @@ -30,7 +30,7 @@ #include "hw/mips/bootloader.h" #include "hw/mips/cps.h" #include "hw/pci-host/xilinx-pcie.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/mips/cps.c b/hw/mips/cps.c index e47695e2b0..13f048ef9c 100644 --- a/hw/mips/cps.c +++ b/hw/mips/cps.c @@ -22,7 +22,7 @@ #include "qemu/module.h" #include "hw/mips/cps.h" #include "hw/mips/mips.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "system/tcg.h" #include "system/reset.h" diff --git a/hw/mips/malta.c b/hw/mips/malta.c index 2b0eb8c478..e5ed0b5692 100644 --- a/hw/mips/malta.c +++ b/hw/mips/malta.c @@ -58,7 +58,7 @@ #include "system/kvm.h" #include "semihosting/semihost.h" #include "hw/mips/cps.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "target/mips/internal.h" #include "trace.h" #include "cpu.h" diff --git a/hw/misc/npcm7xx_mft.c b/hw/misc/npcm7xx_mft.c index 514d29f201..0bbae111cf 100644 --- a/hw/misc/npcm7xx_mft.c +++ b/hw/misc/npcm7xx_mft.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/misc/npcm7xx_mft.h" #include "hw/misc/npcm7xx_pwm.h" diff --git a/hw/misc/npcm7xx_pwm.c b/hw/misc/npcm7xx_pwm.c index 2e72d1c7d4..39ac0dbe2a 100644 --- a/hw/misc/npcm7xx_pwm.c +++ b/hw/misc/npcm7xx_pwm.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/misc/npcm7xx_pwm.h" #include "hw/registerfields.h" diff --git a/hw/misc/npcm_clk.c b/hw/misc/npcm_clk.c index e202a8a299..bc9ee975de 100644 --- a/hw/misc/npcm_clk.c +++ b/hw/misc/npcm_clk.c @@ -18,7 +18,7 @@ #include "hw/misc/npcm_clk.h" #include "hw/timer/npcm7xx_timer.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "migration/vmstate.h" #include "qemu/error-report.h" #include "qemu/log.h" diff --git a/hw/misc/stm32l4x5_rcc.c b/hw/misc/stm32l4x5_rcc.c index d4af2cd696..1b012d1cc1 100644 --- a/hw/misc/stm32l4x5_rcc.c +++ b/hw/misc/stm32l4x5_rcc.c @@ -25,7 +25,7 @@ #include "hw/misc/stm32l4x5_rcc_internals.h" #include "hw/core/clock.h" #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/registerfields.h" diff --git a/hw/misc/stm32l4x5_syscfg.c b/hw/misc/stm32l4x5_syscfg.c index de488a4678..52495610d1 100644 --- a/hw/misc/stm32l4x5_syscfg.c +++ b/hw/misc/stm32l4x5_syscfg.c @@ -27,7 +27,7 @@ #include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/core/clock.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qapi/error.h" #include "hw/misc/stm32l4x5_syscfg.h" #include "hw/gpio/stm32l4x5_gpio.h" diff --git a/hw/misc/zynq_slcr.c b/hw/misc/zynq_slcr.c index 010387beec..cc18b21b22 100644 --- a/hw/misc/zynq_slcr.c +++ b/hw/misc/zynq_slcr.c @@ -22,7 +22,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/registerfields.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qom/object.h" #include "hw/qdev-properties.h" #include "qapi/error.h" diff --git a/hw/net/npcm7xx_emc.c b/hw/net/npcm7xx_emc.c index 9eb39a6b84..704f438768 100644 --- a/hw/net/npcm7xx_emc.c +++ b/hw/net/npcm7xx_emc.c @@ -32,7 +32,7 @@ #include /* for crc32 */ #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/net/npcm7xx_emc.h" #include "net/eth.h" diff --git a/hw/timer/armv7m_systick.c b/hw/timer/armv7m_systick.c index c9e0f4c2e1..baba0817b8 100644 --- a/hw/timer/armv7m_systick.c +++ b/hw/timer/armv7m_systick.c @@ -14,7 +14,7 @@ #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "qemu/timer.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/timer/cmsdk-apb-dualtimer.c b/hw/timer/cmsdk-apb-dualtimer.c index 57fea11a85..5f4848ef61 100644 --- a/hw/timer/cmsdk-apb-dualtimer.c +++ b/hw/timer/cmsdk-apb-dualtimer.c @@ -25,7 +25,7 @@ #include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/timer/cmsdk-apb-dualtimer.h" #include "migration/vmstate.h" diff --git a/hw/timer/cmsdk-apb-timer.c b/hw/timer/cmsdk-apb-timer.c index 8b7595731c..d80bf1f96d 100644 --- a/hw/timer/cmsdk-apb-timer.c +++ b/hw/timer/cmsdk-apb-timer.c @@ -35,7 +35,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/registerfields.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/timer/cmsdk-apb-timer.h" #include "migration/vmstate.h" diff --git a/hw/timer/npcm7xx_timer.c b/hw/timer/npcm7xx_timer.c index e09e4ee03a..0e62add74d 100644 --- a/hw/timer/npcm7xx_timer.c +++ b/hw/timer/npcm7xx_timer.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/timer/npcm7xx_timer.h" #include "migration/vmstate.h" diff --git a/hw/timer/sse-counter.c b/hw/timer/sse-counter.c index bb364e815b..de9d354483 100644 --- a/hw/timer/sse-counter.c +++ b/hw/timer/sse-counter.c @@ -35,7 +35,7 @@ #include "hw/sysbus.h" #include "hw/registerfields.h" #include "hw/core/clock.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "migration/vmstate.h" /* Registers in the control frame */ diff --git a/hw/timer/sse-timer.c b/hw/timer/sse-timer.c index fc48179d25..1de882f3eb 100644 --- a/hw/timer/sse-timer.c +++ b/hw/timer/sse-timer.c @@ -44,7 +44,7 @@ #include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/core/clock.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" diff --git a/hw/timer/stellaris-gptm.c b/hw/timer/stellaris-gptm.c index d97b2f8309..37cd760318 100644 --- a/hw/timer/stellaris-gptm.c +++ b/hw/timer/stellaris-gptm.c @@ -12,7 +12,7 @@ #include "qemu/timer.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/timer/stellaris-gptm.h" static void gptm_update_irq(gptm_state *s) diff --git a/hw/watchdog/cmsdk-apb-watchdog.c b/hw/watchdog/cmsdk-apb-watchdog.c index e1a2a33d73..f1dd7d66ee 100644 --- a/hw/watchdog/cmsdk-apb-watchdog.c +++ b/hw/watchdog/cmsdk-apb-watchdog.c @@ -30,7 +30,7 @@ #include "hw/core/irq.h" #include "hw/qdev-properties.h" #include "hw/registerfields.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/watchdog/cmsdk-apb-watchdog.h" #include "migration/vmstate.h" diff --git a/include/hw/qdev-clock.h b/include/hw/core/qdev-clock.h similarity index 100% rename from include/hw/qdev-clock.h rename to include/hw/core/qdev-clock.h diff --git a/include/hw/misc/bcm2835_cprman.h b/include/hw/misc/bcm2835_cprman.h index 0d38036728..7b2c0a5464 100644 --- a/include/hw/misc/bcm2835_cprman.h +++ b/include/hw/misc/bcm2835_cprman.h @@ -10,7 +10,7 @@ #define HW_MISC_BCM2835_CPRMAN_H #include "hw/sysbus.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #define TYPE_BCM2835_CPRMAN "bcm2835-cprman" diff --git a/include/hw/net/xlnx-versal-canfd.h b/include/hw/net/xlnx-versal-canfd.h index d2e582918f..45cf0001c6 100644 --- a/include/hw/net/xlnx-versal-canfd.h +++ b/include/hw/net/xlnx-versal-canfd.h @@ -31,7 +31,7 @@ #include "hw/register.h" #include "hw/core/ptimer.h" #include "net/can_emu.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #define TYPE_XILINX_CANFD "xlnx.versal-canfd" diff --git a/include/hw/net/xlnx-zynqmp-can.h b/include/hw/net/xlnx-zynqmp-can.h index 8262f11d33..d272f40ea8 100644 --- a/include/hw/net/xlnx-zynqmp-can.h +++ b/include/hw/net/xlnx-zynqmp-can.h @@ -36,7 +36,7 @@ #include "net/can_host.h" #include "qemu/fifo32.h" #include "hw/core/ptimer.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #define TYPE_XLNX_ZYNQMP_CAN "xlnx.zynqmp-can" diff --git a/rust/hw/core/wrapper.h b/rust/hw/core/wrapper.h index e5c7e0518a..44f8583bff 100644 --- a/rust/hw/core/wrapper.h +++ b/rust/hw/core/wrapper.h @@ -26,7 +26,7 @@ typedef enum memory_order { #include "hw/sysbus.h" #include "hw/core/clock.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/core/irq.h" diff --git a/target/mips/cpu.c b/target/mips/cpu.c index 5989c3ba17..894799c02c 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -30,7 +30,7 @@ #include "system/kvm.h" #include "system/qtest.h" #include "hw/qdev-properties.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "fpu_helper.h" #ifndef CONFIG_USER_ONLY #include "semihosting/semihost.h" diff --git a/target/xtensa/cpu.c b/target/xtensa/cpu.c index 1eeed44e33..ecc5e093a4 100644 --- a/target/xtensa/cpu.c +++ b/target/xtensa/cpu.c @@ -34,7 +34,7 @@ #include "fpu/softfloat.h" #include "qemu/module.h" #include "migration/vmstate.h" -#include "hw/qdev-clock.h" +#include "hw/core/qdev-clock.h" #include "accel/tcg/cpu-ops.h" #ifndef CONFIG_USER_ONLY #include "system/memory.h" From d1000ecae29550bc52d981226190461d4548a6ea Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:37:58 +0100 Subject: [PATCH 017/152] include: move hw/qdev-core.h to hw/core/, rename Call it hw/core/qdev.h to avoid the duplication in the name. Signed-off-by: Paolo Bonzini --- backends/hostmem.c | 2 +- block/block-backend.c | 2 +- docs/devel/qdev-api.rst | 2 +- hw/acpi/erst.c | 2 +- hw/acpi/memory_hotplug.c | 2 +- hw/arm/allwinner-h3.c | 2 +- hw/arm/allwinner-r40.c | 2 +- hw/arm/npcm7xx_boards.c | 2 +- hw/arm/npcm8xx_boards.c | 2 +- hw/arm/realview.c | 2 +- hw/arm/smmuv3.c | 2 +- hw/audio/intel-hda.h | 2 +- hw/audio/model.c | 2 +- hw/block/vhost-user-blk.c | 2 +- hw/char/sh_serial.c | 2 +- hw/core/cpu-system.c | 2 +- hw/core/cpu-user.c | 2 +- hw/core/gpio.c | 2 +- hw/core/guest-loader.h | 2 +- hw/core/qdev-clock.c | 2 +- hw/core/qdev-fw.c | 2 +- hw/core/qdev-hotplug.c | 2 +- hw/core/qdev-user.c | 2 +- hw/core/vm-change-state-handler.c | 2 +- hw/display/artist.c | 2 +- hw/fsi/aspeed_apb2opb.c | 2 +- hw/hyperv/hv-balloon.c | 2 +- hw/i2c/i2c_mux_pca954x.c | 2 +- hw/ppc/pnv_homer.c | 2 +- hw/remote/machine.c | 2 +- hw/remote/remote-obj.c | 2 +- hw/remote/vfio-user-obj.c | 2 +- hw/s390x/ccw-device.h | 2 +- hw/s390x/ipl.h | 2 +- hw/scsi/vhost-user-scsi.c | 2 +- hw/sd/core.c | 2 +- hw/tpm/tpm_ppi.c | 2 +- hw/usb/canokey.h | 2 +- hw/usb/ccid.h | 2 +- hw/usb/u2f.h | 2 +- hw/vfio/iommufd.c | 2 +- hw/virtio/vdpa-dev.c | 2 +- hw/xen/xen_pvdev.c | 2 +- include/block/aio.h | 2 +- include/hw/acpi/acpi_aml_interface.h | 2 +- include/hw/acpi/acpi_dev_interface.h | 2 +- include/hw/acpi/cpu.h | 2 +- include/hw/acpi/memory_hotplug.h | 2 +- include/hw/acpi/vmclock.h | 2 +- include/hw/acpi/vmgenid.h | 2 +- include/hw/core/cpu.h | 2 +- include/hw/core/generic-loader.h | 2 +- include/hw/{qdev-core.h => core/qdev.h} | 0 include/hw/cpu/cluster.h | 2 +- include/hw/cpu/core.h | 2 +- include/hw/display/dm163.h | 2 +- include/hw/fsi/fsi-master.h | 2 +- include/hw/fsi/fsi.h | 2 +- include/hw/fsi/lbus.h | 2 +- include/hw/hyperv/vmbus.h | 2 +- include/hw/i2c/i2c.h | 2 +- include/hw/i386/sgx-epc.h | 2 +- include/hw/input/adb.h | 2 +- include/hw/ipack/ipack.h | 2 +- include/hw/ipmi/ipmi.h | 2 +- include/hw/isa/isa.h | 2 +- include/hw/mem/memory-device.h | 2 +- include/hw/mem/pc-dimm.h | 2 +- include/hw/misc/auxbus.h | 2 +- include/hw/misc/led.h | 2 +- include/hw/misc/vmcoreinfo.h | 2 +- include/hw/nvram/xlnx-bbram.h | 2 +- include/hw/nvram/xlnx-efuse.h | 2 +- include/hw/ppc/pnv_adu.h | 2 +- include/hw/ppc/pnv_lpc.h | 2 +- include/hw/ppc/pnv_occ.h | 2 +- include/hw/ppc/pnv_psi.h | 2 +- include/hw/ppc/pnv_sbe.h | 2 +- include/hw/ppc/spapr_cpu_core.h | 2 +- include/hw/ppc/spapr_drc.h | 2 +- include/hw/ppc/spapr_tpm_proxy.h | 2 +- include/hw/ppc/xics.h | 2 +- include/hw/qdev-properties.h | 2 +- include/hw/register.h | 2 +- include/hw/s390x/ap-device.h | 2 +- include/hw/s390x/event-facility.h | 2 +- include/hw/s390x/storage-attributes.h | 2 +- include/hw/s390x/storage-keys.h | 2 +- include/hw/s390x/tod.h | 2 +- include/hw/scsi/scsi.h | 2 +- include/hw/sd/sd.h | 2 +- include/hw/ssi/ssi.h | 2 +- include/hw/sysbus.h | 2 +- include/hw/usb/usb.h | 2 +- include/hw/virtio/virtio-bus.h | 2 +- include/hw/virtio/virtio.h | 2 +- include/hw/watchdog/wdt_diag288.h | 2 +- include/hw/xen/xen-bus.h | 2 +- include/monitor/qdev.h | 2 +- migration/migration.h | 2 +- monitor/hmp.c | 2 +- qom/object.c | 2 +- qom/qom-hmp-cmds.c | 2 +- qom/qom-qmp-cmds.c | 2 +- stubs/hotplug-stubs.c | 2 +- stubs/sysbus.c | 2 +- system/bootdevice.c | 2 +- system/physmem.c | 2 +- system/qtest.c | 2 +- tests/qtest/fuzz/generic_fuzz.c | 2 +- ui/console.c | 2 +- ui/vdagent.c | 2 +- ui/vnc.c | 2 +- 113 files changed, 112 insertions(+), 112 deletions(-) rename include/hw/{qdev-core.h => core/qdev.h} (100%) diff --git a/backends/hostmem.c b/backends/hostmem.c index d583491664..67827c42b8 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -21,7 +21,7 @@ #include "qemu/mmap-alloc.h" #include "qemu/madvise.h" #include "qemu/cutils.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #ifdef CONFIG_NUMA #include diff --git a/block/block-backend.c b/block/block-backend.c index 98315d4470..9944657120 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -16,7 +16,7 @@ #include "block/blockjob.h" #include "block/coroutines.h" #include "block/throttle-groups.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "system/blockdev.h" #include "system/runstate.h" #include "system/replay.h" diff --git a/docs/devel/qdev-api.rst b/docs/devel/qdev-api.rst index 3f35eea025..27b534ba12 100644 --- a/docs/devel/qdev-api.rst +++ b/docs/devel/qdev-api.rst @@ -4,4 +4,4 @@ QEMU Device (qdev) API Reference ================================ -.. kernel-doc:: include/hw/qdev-core.h +.. kernel-doc:: include/hw/core/qdev.h diff --git a/hw/acpi/erst.c b/hw/acpi/erst.c index 099cabb7ab..10bbe37c17 100644 --- a/hw/acpi/erst.c +++ b/hw/acpi/erst.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "system/memory.h" #include "qom/object.h" #include "hw/pci/pci_device.h" diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c index 2f17d45907..1ddfdd17b7 100644 --- a/hw/acpi/memory_hotplug.c +++ b/hw/acpi/memory_hotplug.c @@ -2,7 +2,7 @@ #include "hw/acpi/memory_hotplug.h" #include "hw/mem/pc-dimm.h" #include "hw/core/boards.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "migration/vmstate.h" #include "trace.h" #include "qapi/error.h" diff --git a/hw/arm/allwinner-h3.c b/hw/arm/allwinner-h3.c index 6c4c369e99..757c89ef39 100644 --- a/hw/arm/allwinner-h3.c +++ b/hw/arm/allwinner-h3.c @@ -22,7 +22,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "qemu/units.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/sysbus.h" #include "hw/char/serial-mm.h" #include "hw/misc/unimp.h" diff --git a/hw/arm/allwinner-r40.c b/hw/arm/allwinner-r40.c index f6d4117a06..396e886af4 100644 --- a/hw/arm/allwinner-r40.c +++ b/hw/arm/allwinner-r40.c @@ -23,7 +23,7 @@ #include "qemu/module.h" #include "qemu/units.h" #include "hw/core/boards.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/sysbus.h" #include "hw/char/serial-mm.h" #include "hw/misc/unimp.h" diff --git a/hw/arm/npcm7xx_boards.c b/hw/arm/npcm7xx_boards.c index fda375eb4c..729306b33c 100644 --- a/hw/arm/npcm7xx_boards.c +++ b/hw/arm/npcm7xx_boards.c @@ -23,7 +23,7 @@ #include "hw/i2c/smbus_eeprom.h" #include "hw/core/loader.h" #include "hw/nvram/eeprom_at24c.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/datadir.h" diff --git a/hw/arm/npcm8xx_boards.c b/hw/arm/npcm8xx_boards.c index 292f44d807..7252edf3dc 100644 --- a/hw/arm/npcm8xx_boards.c +++ b/hw/arm/npcm8xx_boards.c @@ -22,7 +22,7 @@ #include "hw/arm/machines-qom.h" #include "hw/core/cpu.h" #include "hw/core/loader.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/arm/realview.c b/hw/arm/realview.c index 65506768e4..d7f96b9d3e 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -18,7 +18,7 @@ #include "hw/net/lan9118.h" #include "hw/net/smc91c111.h" #include "hw/pci/pci.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "net/net.h" #include "system/system.h" #include "hw/core/boards.h" diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index ae4fba1599..e391842dc3 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -22,7 +22,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/qdev-properties.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/pci/pci.h" #include "cpu.h" #include "exec/target_page.h" diff --git a/hw/audio/intel-hda.h b/hw/audio/intel-hda.h index 8d710eee5d..174cf694f4 100644 --- a/hw/audio/intel-hda.h +++ b/hw/audio/intel-hda.h @@ -1,7 +1,7 @@ #ifndef HW_INTEL_HDA_H #define HW_INTEL_HDA_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" /* --------------------------------------------------------------------- */ diff --git a/hw/audio/model.c b/hw/audio/model.c index 40929c6e77..ff4e4b2452 100644 --- a/hw/audio/model.c +++ b/hw/audio/model.c @@ -22,7 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "monitor/qdev.h" #include "qemu/error-report.h" #include "qapi/error.h" diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index c0cc5f6942..b399eab51a 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -20,7 +20,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/cutils.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/virtio-blk-common.h" diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c index ee430dd3d2..008a2ea2f0 100644 --- a/hw/char/sh_serial.c +++ b/hw/char/sh_serial.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sh4/sh.h" diff --git a/hw/core/cpu-system.c b/hw/core/cpu-system.c index f601a083d1..5d5a435739 100644 --- a/hw/core/cpu-system.c +++ b/hw/core/cpu-system.c @@ -24,7 +24,7 @@ #include "exec/cputlb.h" #include "system/memory.h" #include "qemu/target-info.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/core/sysemu-cpu-ops.h" #include "migration/vmstate.h" diff --git a/hw/core/cpu-user.c b/hw/core/cpu-user.c index 7176791851..270afe5b9f 100644 --- a/hw/core/cpu-user.c +++ b/hw/core/cpu-user.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/core/cpu.h" #include "migration/vmstate.h" diff --git a/hw/core/gpio.c b/hw/core/gpio.c index 11f26a2f2d..37cda5ce4d 100644 --- a/hw/core/gpio.c +++ b/hw/core/gpio.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/core/irq.h" #include "qapi/error.h" diff --git a/hw/core/guest-loader.h b/hw/core/guest-loader.h index 07f4b4884b..214ccf1ba5 100644 --- a/hw/core/guest-loader.h +++ b/hw/core/guest-loader.h @@ -14,7 +14,7 @@ #ifndef GUEST_LOADER_H #define GUEST_LOADER_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" struct GuestLoaderState { diff --git a/hw/core/qdev-clock.c b/hw/core/qdev-clock.c index b96525951c..6e2967e433 100644 --- a/hw/core/qdev-clock.c +++ b/hw/core/qdev-clock.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qapi/error.h" /* diff --git a/hw/core/qdev-fw.c b/hw/core/qdev-fw.c index a587d2ddf9..f1489c02df 100644 --- a/hw/core/qdev-fw.c +++ b/hw/core/qdev-fw.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/core/fw-path-provider.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" const char *qdev_fw_name(DeviceState *dev) { diff --git a/hw/core/qdev-hotplug.c b/hw/core/qdev-hotplug.c index d2c39806c5..1d547e0dbd 100644 --- a/hw/core/qdev-hotplug.c +++ b/hw/core/qdev-hotplug.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/core/boards.h" #include "qapi/error.h" diff --git a/hw/core/qdev-user.c b/hw/core/qdev-user.c index 3d421d8f4e..051f8fbd02 100644 --- a/hw/core/qdev-user.c +++ b/hw/core/qdev-user.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" #include "qom/object.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" void qdev_create_fake_machine(void) { diff --git a/hw/core/vm-change-state-handler.c b/hw/core/vm-change-state-handler.c index 99c642b558..2c11135029 100644 --- a/hw/core/vm-change-state-handler.c +++ b/hw/core/vm-change-state-handler.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "system/runstate.h" static int qdev_get_dev_tree_depth(DeviceState *dev) diff --git a/hw/display/artist.c b/hw/display/artist.c index 5efa9e45ff..e6fed03786 100644 --- a/hw/display/artist.c +++ b/hw/display/artist.c @@ -16,7 +16,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "hw/core/loader.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" #include "ui/console.h" diff --git a/hw/fsi/aspeed_apb2opb.c b/hw/fsi/aspeed_apb2opb.c index 172ba16b0c..b9d72f3ecf 100644 --- a/hw/fsi/aspeed_apb2opb.c +++ b/hw/fsi/aspeed_apb2opb.c @@ -13,7 +13,7 @@ #include "trace.h" #include "hw/fsi/aspeed_apb2opb.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TO_REG(x) (x >> 2) diff --git a/hw/hyperv/hv-balloon.c b/hw/hyperv/hv-balloon.c index ac024accfc..deb20d7b6a 100644 --- a/hw/hyperv/hv-balloon.c +++ b/hw/hyperv/hv-balloon.c @@ -19,7 +19,7 @@ #include "hw/hyperv/vmbus.h" #include "hw/mem/memory-device.h" #include "hw/mem/pc-dimm.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "monitor/qdev.h" #include "qapi/error.h" diff --git a/hw/i2c/i2c_mux_pca954x.c b/hw/i2c/i2c_mux_pca954x.c index a8ef640cd2..fd317f5670 100644 --- a/hw/i2c/i2c_mux_pca954x.c +++ b/hw/i2c/i2c_mux_pca954x.c @@ -19,7 +19,7 @@ #include "hw/i2c/i2c.h" #include "hw/i2c/i2c_mux_pca954x.h" #include "hw/i2c/smbus_slave.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/log.h" diff --git a/hw/ppc/pnv_homer.c b/hw/ppc/pnv_homer.c index 2208ffe632..fb394cc6e0 100644 --- a/hw/ppc/pnv_homer.c +++ b/hw/ppc/pnv_homer.c @@ -22,7 +22,7 @@ #include "exec/hwaddr.h" #include "system/memory.h" #include "system/cpus.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" diff --git a/hw/remote/machine.c b/hw/remote/machine.c index e4b47838ba..ced782f6a9 100644 --- a/hw/remote/machine.c +++ b/hw/remote/machine.c @@ -21,7 +21,7 @@ #include "hw/pci/pci_host.h" #include "hw/remote/iohub.h" #include "hw/remote/iommu.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/remote/vfio-user-obj.h" #include "hw/pci/msi.h" diff --git a/hw/remote/remote-obj.c b/hw/remote/remote-obj.c index 3402068ab9..86192dc8da 100644 --- a/hw/remote/remote-obj.c +++ b/hw/remote/remote-obj.c @@ -13,7 +13,7 @@ #include "qemu/notify.h" #include "qom/object_interfaces.h" #include "io/channel.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/remote/machine.h" #include "io/channel-util.h" #include "qapi/error.h" diff --git a/hw/remote/vfio-user-obj.c b/hw/remote/vfio-user-obj.c index 13cda2f481..4eb036a546 100644 --- a/hw/remote/vfio-user-obj.c +++ b/hw/remote/vfio-user-obj.c @@ -54,7 +54,7 @@ #include "qemu/main-loop.h" #include "system/system.h" #include "libvfio-user.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/pci/pci.h" #include "qemu/timer.h" #include "system/memory.h" diff --git a/hw/s390x/ccw-device.h b/hw/s390x/ccw-device.h index 4439feb140..15f64cfb63 100644 --- a/hw/s390x/ccw-device.h +++ b/hw/s390x/ccw-device.h @@ -12,7 +12,7 @@ #ifndef HW_S390X_CCW_DEVICE_H #define HW_S390X_CCW_DEVICE_H #include "qom/object.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/s390x/css.h" #include "hw/s390x/css-bridge.h" diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index 505cded490..086e57681c 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -17,7 +17,7 @@ #include "exec/target_page.h" #include "system/address-spaces.h" #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/s390x/ipl/qipl.h" #include "qom/object.h" #include "target/s390x/kvm/pv.h" diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 0d7bbb52ab..2c79522b09 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -19,7 +19,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/core/fw-path-provider.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/vhost.h" diff --git a/hw/sd/core.c b/hw/sd/core.c index d3c9017445..3568a81e80 100644 --- a/hw/sd/core.c +++ b/hw/sd/core.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/sd/sd.h" #include "qemu/module.h" #include "qapi/error.h" diff --git a/hw/tpm/tpm_ppi.c b/hw/tpm/tpm_ppi.c index 984d3d1080..f0c34291dc 100644 --- a/hw/tpm/tpm_ppi.c +++ b/hw/tpm/tpm_ppi.c @@ -16,7 +16,7 @@ #include "qapi/error.h" #include "system/memory_mapping.h" #include "migration/vmstate.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/acpi/tpm.h" #include "tpm_ppi.h" #include "trace.h" diff --git a/hw/usb/canokey.h b/hw/usb/canokey.h index 1b60d73485..3d489a36ce 100644 --- a/hw/usb/canokey.h +++ b/hw/usb/canokey.h @@ -10,7 +10,7 @@ #ifndef CANOKEY_H #define CANOKEY_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_CANOKEY "canokey" #define CANOKEY(obj) \ diff --git a/hw/usb/ccid.h b/hw/usb/ccid.h index 6b82a55bd4..4959f7ea0c 100644 --- a/hw/usb/ccid.h +++ b/hw/usb/ccid.h @@ -10,7 +10,7 @@ #ifndef CCID_H #define CCID_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" typedef struct CCIDCardInfo CCIDCardInfo; diff --git a/hw/usb/u2f.h b/hw/usb/u2f.h index 8bff13141a..85ff7d0ffa 100644 --- a/hw/usb/u2f.h +++ b/hw/usb/u2f.h @@ -26,7 +26,7 @@ #ifndef U2F_H #define U2F_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define U2FHID_PACKET_SIZE 64 #define U2FHID_PENDING_IN_NUM 32 diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index bb5775aa71..32e8615ad3 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -20,7 +20,7 @@ #include "trace.h" #include "qapi/error.h" #include "system/iommufd.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/vfio/vfio-cpr.h" #include "system/reset.h" #include "qemu/cutils.h" diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c index 4a7b970976..57739385a9 100644 --- a/hw/virtio/vdpa-dev.c +++ b/hw/virtio/vdpa-dev.c @@ -19,7 +19,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/cutils.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/vhost.h" diff --git a/hw/xen/xen_pvdev.c b/hw/xen/xen_pvdev.c index fe95b62d13..e36370e2ee 100644 --- a/hw/xen/xen_pvdev.c +++ b/hw/xen/xen_pvdev.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/main-loop.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/xen/xen-legacy-backend.h" #include "hw/xen/xen-bus-helper.h" #include "hw/xen/xen_pvdev.h" diff --git a/include/block/aio.h b/include/block/aio.h index 6049e6a0f4..cc3d5f25a2 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -24,7 +24,7 @@ #include "qemu/thread.h" #include "qemu/timer.h" #include "block/graph-lock.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" typedef struct BlockAIOCB BlockAIOCB; diff --git a/include/hw/acpi/acpi_aml_interface.h b/include/hw/acpi/acpi_aml_interface.h index 11748a8866..4be1b4acda 100644 --- a/include/hw/acpi/acpi_aml_interface.h +++ b/include/hw/acpi/acpi_aml_interface.h @@ -3,7 +3,7 @@ #include "qom/object.h" #include "hw/acpi/aml-build.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_ACPI_DEV_AML_IF "acpi-dev-aml-interface" typedef struct AcpiDevAmlIfClass AcpiDevAmlIfClass; diff --git a/include/hw/acpi/acpi_dev_interface.h b/include/hw/acpi/acpi_dev_interface.h index 8294f8f0cc..5927e40eaf 100644 --- a/include/hw/acpi/acpi_dev_interface.h +++ b/include/hw/acpi/acpi_dev_interface.h @@ -3,7 +3,7 @@ #include "qapi/qapi-types-acpi.h" #include "qom/object.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" /* These values are part of guest ABI, and can not be changed */ typedef enum { diff --git a/include/hw/acpi/cpu.h b/include/hw/acpi/cpu.h index a64d19445c..557219d2c6 100644 --- a/include/hw/acpi/cpu.h +++ b/include/hw/acpi/cpu.h @@ -13,7 +13,7 @@ #define ACPI_CPU_H #include "qapi/qapi-types-acpi.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/acpi/acpi.h" #include "hw/acpi/aml-build.h" #include "hw/core/boards.h" diff --git a/include/hw/acpi/memory_hotplug.h b/include/hw/acpi/memory_hotplug.h index 38841d7b06..eb7f460afe 100644 --- a/include/hw/acpi/memory_hotplug.h +++ b/include/hw/acpi/memory_hotplug.h @@ -2,7 +2,7 @@ #define QEMU_HW_ACPI_MEMORY_HOTPLUG_H #include "qapi/qapi-types-acpi.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/acpi/acpi.h" #include "hw/acpi/aml-build.h" diff --git a/include/hw/acpi/vmclock.h b/include/hw/acpi/vmclock.h index 5605605812..d88176d195 100644 --- a/include/hw/acpi/vmclock.h +++ b/include/hw/acpi/vmclock.h @@ -2,7 +2,7 @@ #define ACPI_VMCLOCK_H #include "hw/acpi/bios-linker-loader.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qemu/uuid.h" #include "qom/object.h" diff --git a/include/hw/acpi/vmgenid.h b/include/hw/acpi/vmgenid.h index fb135d5bcb..1098541272 100644 --- a/include/hw/acpi/vmgenid.h +++ b/include/hw/acpi/vmgenid.h @@ -2,7 +2,7 @@ #define ACPI_VMGENID_H #include "hw/acpi/bios-linker-loader.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qemu/uuid.h" #include "qom/object.h" diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index 9615051774..f6f17df9e6 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -20,7 +20,7 @@ #ifndef QEMU_CPU_H #define QEMU_CPU_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "disas/dis-asm.h" #include "exec/breakpoint.h" #include "exec/hwaddr.h" diff --git a/include/hw/core/generic-loader.h b/include/hw/core/generic-loader.h index 19d87b39c8..ed6d3ba930 100644 --- a/include/hw/core/generic-loader.h +++ b/include/hw/core/generic-loader.h @@ -19,7 +19,7 @@ #define GENERIC_LOADER_H #include "elf.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" struct GenericLoaderState { diff --git a/include/hw/qdev-core.h b/include/hw/core/qdev.h similarity index 100% rename from include/hw/qdev-core.h rename to include/hw/core/qdev.h diff --git a/include/hw/cpu/cluster.h b/include/hw/cpu/cluster.h index 53fbf36af5..b79de065ad 100644 --- a/include/hw/cpu/cluster.h +++ b/include/hw/cpu/cluster.h @@ -20,7 +20,7 @@ #ifndef HW_CPU_CLUSTER_H #define HW_CPU_CLUSTER_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" /* diff --git a/include/hw/cpu/core.h b/include/hw/cpu/core.h index 98ab91647e..22c53ff288 100644 --- a/include/hw/cpu/core.h +++ b/include/hw/cpu/core.h @@ -9,7 +9,7 @@ #ifndef HW_CPU_CORE_H #define HW_CPU_CORE_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define TYPE_CPU_CORE "cpu-core" diff --git a/include/hw/display/dm163.h b/include/hw/display/dm163.h index 4377f77bb7..e1d2e05abc 100644 --- a/include/hw/display/dm163.h +++ b/include/hw/display/dm163.h @@ -13,7 +13,7 @@ #define HW_DISPLAY_DM163_H #include "qom/object.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_DM163 "dm163" OBJECT_DECLARE_SIMPLE_TYPE(DM163State, DM163); diff --git a/include/hw/fsi/fsi-master.h b/include/hw/fsi/fsi-master.h index b634ecd393..60ddaa994f 100644 --- a/include/hw/fsi/fsi-master.h +++ b/include/hw/fsi/fsi-master.h @@ -8,7 +8,7 @@ #define FSI_FSI_MASTER_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/fsi/fsi.h" #include "hw/fsi/cfam.h" diff --git a/include/hw/fsi/fsi.h b/include/hw/fsi/fsi.h index f34765ed80..26d7e89c22 100644 --- a/include/hw/fsi/fsi.h +++ b/include/hw/fsi/fsi.h @@ -8,7 +8,7 @@ #define FSI_FSI_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/fsi/lbus.h" #include "qemu/bitops.h" diff --git a/include/hw/fsi/lbus.h b/include/hw/fsi/lbus.h index 12519073cd..1b894509fe 100644 --- a/include/hw/fsi/lbus.h +++ b/include/hw/fsi/lbus.h @@ -7,7 +7,7 @@ #ifndef FSI_LBUS_H #define FSI_LBUS_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qemu/units.h" #include "system/memory.h" diff --git a/include/hw/hyperv/vmbus.h b/include/hw/hyperv/vmbus.h index 06b948bbb0..e0ef2f2c02 100644 --- a/include/hw/hyperv/vmbus.h +++ b/include/hw/hyperv/vmbus.h @@ -12,7 +12,7 @@ #include "system/system.h" #include "system/dma.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "migration/vmstate.h" #include "hw/hyperv/vmbus-proto.h" #include "qemu/uuid.h" diff --git a/include/hw/i2c/i2c.h b/include/hw/i2c/i2c.h index 2a3abacd1b..dd5930f4b5 100644 --- a/include/hw/i2c/i2c.h +++ b/include/hw/i2c/i2c.h @@ -1,7 +1,7 @@ #ifndef QEMU_I2C_H #define QEMU_I2C_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" /* The QEMU I2C implementation only supports simple transfers that complete diff --git a/include/hw/i386/sgx-epc.h b/include/hw/i386/sgx-epc.h index 41d55da479..ba97661162 100644 --- a/include/hw/i386/sgx-epc.h +++ b/include/hw/i386/sgx-epc.h @@ -12,7 +12,7 @@ #ifndef QEMU_SGX_EPC_H #define QEMU_SGX_EPC_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/i386/hostmem-epc.h" #define TYPE_SGX_EPC "sgx-epc" diff --git a/include/hw/input/adb.h b/include/hw/input/adb.h index 20fced15f7..1079195830 100644 --- a/include/hw/input/adb.h +++ b/include/hw/input/adb.h @@ -26,7 +26,7 @@ #ifndef ADB_H #define ADB_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define MAX_ADB_DEVICES 16 diff --git a/include/hw/ipack/ipack.h b/include/hw/ipack/ipack.h index d86ef84233..fdd6c069c5 100644 --- a/include/hw/ipack/ipack.h +++ b/include/hw/ipack/ipack.h @@ -11,7 +11,7 @@ #ifndef QEMU_IPACK_H #define QEMU_IPACK_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/core/irq.h" #include "qom/object.h" diff --git a/include/hw/ipmi/ipmi.h b/include/hw/ipmi/ipmi.h index cd581aa134..dabbb9ec5d 100644 --- a/include/hw/ipmi/ipmi.h +++ b/include/hw/ipmi/ipmi.h @@ -26,7 +26,7 @@ #define HW_IPMI_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define MAX_IPMI_MSG_SIZE 300 diff --git a/include/hw/isa/isa.h b/include/hw/isa/isa.h index a82c5f1004..94bff33fcc 100644 --- a/include/hw/isa/isa.h +++ b/include/hw/isa/isa.h @@ -5,7 +5,7 @@ #include "system/memory.h" #include "system/ioport.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define ISA_NUM_IRQS 16 diff --git a/include/hw/mem/memory-device.h b/include/hw/mem/memory-device.h index c0a58087cc..10adcd3b8c 100644 --- a/include/hw/mem/memory-device.h +++ b/include/hw/mem/memory-device.h @@ -13,7 +13,7 @@ #ifndef MEMORY_DEVICE_H #define MEMORY_DEVICE_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qapi/qapi-types-machine.h" #include "qom/object.h" diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h index e0dbdd43dc..f2df951baf 100644 --- a/include/hw/mem/pc-dimm.h +++ b/include/hw/mem/pc-dimm.h @@ -17,7 +17,7 @@ #define QEMU_PC_DIMM_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define TYPE_PC_DIMM "pc-dimm" diff --git a/include/hw/misc/auxbus.h b/include/hw/misc/auxbus.h index 0051e03947..5bfdd05e15 100644 --- a/include/hw/misc/auxbus.h +++ b/include/hw/misc/auxbus.h @@ -26,7 +26,7 @@ #define HW_MISC_AUXBUS_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" typedef enum AUXCommand AUXCommand; diff --git a/include/hw/misc/led.h b/include/hw/misc/led.h index 29c0879570..4d077a7c43 100644 --- a/include/hw/misc/led.h +++ b/include/hw/misc/led.h @@ -9,7 +9,7 @@ #define HW_MISC_LED_H #include "qom/object.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_LED "led" diff --git a/include/hw/misc/vmcoreinfo.h b/include/hw/misc/vmcoreinfo.h index 1aa4477163..3cafc7d42e 100644 --- a/include/hw/misc/vmcoreinfo.h +++ b/include/hw/misc/vmcoreinfo.h @@ -12,7 +12,7 @@ #ifndef VMCOREINFO_H #define VMCOREINFO_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "standard-headers/linux/qemu_fw_cfg.h" #include "qom/object.h" diff --git a/include/hw/nvram/xlnx-bbram.h b/include/hw/nvram/xlnx-bbram.h index ad2e4a250f..63558dbc32 100644 --- a/include/hw/nvram/xlnx-bbram.h +++ b/include/hw/nvram/xlnx-bbram.h @@ -27,7 +27,7 @@ #define XLNX_BBRAM_H #include "system/block-backend.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/register.h" diff --git a/include/hw/nvram/xlnx-efuse.h b/include/hw/nvram/xlnx-efuse.h index ef14fb0528..08a9ce790d 100644 --- a/include/hw/nvram/xlnx-efuse.h +++ b/include/hw/nvram/xlnx-efuse.h @@ -28,7 +28,7 @@ #define XLNX_EFUSE_H #include "system/block-backend.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_XLNX_EFUSE "xlnx-efuse" OBJECT_DECLARE_SIMPLE_TYPE(XlnxEFuse, XLNX_EFUSE); diff --git a/include/hw/ppc/pnv_adu.h b/include/hw/ppc/pnv_adu.h index f9dbd8c8b3..d3a935a46d 100644 --- a/include/hw/ppc/pnv_adu.h +++ b/include/hw/ppc/pnv_adu.h @@ -11,7 +11,7 @@ #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_lpc.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_PNV_ADU "pnv-adu" diff --git a/include/hw/ppc/pnv_lpc.h b/include/hw/ppc/pnv_lpc.h index 266d56214f..c219f87b16 100644 --- a/include/hw/ppc/pnv_lpc.h +++ b/include/hw/ppc/pnv_lpc.h @@ -22,7 +22,7 @@ #include "system/memory.h" #include "hw/ppc/pnv.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/isa/isa.h" /* For ISA_NUM_IRQS */ #define TYPE_PNV_LPC "pnv-lpc" diff --git a/include/hw/ppc/pnv_occ.h b/include/hw/ppc/pnv_occ.h index 013ea2e53e..84bdf5004d 100644 --- a/include/hw/ppc/pnv_occ.h +++ b/include/hw/ppc/pnv_occ.h @@ -21,7 +21,7 @@ #define PPC_PNV_OCC_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_PNV_OCC "pnv-occ" OBJECT_DECLARE_TYPE(PnvOCC, PnvOCCClass, diff --git a/include/hw/ppc/pnv_psi.h b/include/hw/ppc/pnv_psi.h index cf7f95a6b1..8a04860aa8 100644 --- a/include/hw/ppc/pnv_psi.h +++ b/include/hw/ppc/pnv_psi.h @@ -23,7 +23,7 @@ #include "hw/sysbus.h" #include "hw/ppc/xics.h" #include "hw/ppc/xive.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_PNV_PSI "pnv-psi" OBJECT_DECLARE_TYPE(PnvPsi, PnvPsiClass, diff --git a/include/hw/ppc/pnv_sbe.h b/include/hw/ppc/pnv_sbe.h index 48a8b86a80..d5d76a4de1 100644 --- a/include/hw/ppc/pnv_sbe.h +++ b/include/hw/ppc/pnv_sbe.h @@ -21,7 +21,7 @@ #define PPC_PNV_SBE_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_PNV_SBE "pnv-sbe" OBJECT_DECLARE_TYPE(PnvSBE, PnvSBEClass, PNV_SBE) diff --git a/include/hw/ppc/spapr_cpu_core.h b/include/hw/ppc/spapr_cpu_core.h index 68f7083483..273bb33202 100644 --- a/include/hw/ppc/spapr_cpu_core.h +++ b/include/hw/ppc/spapr_cpu_core.h @@ -10,7 +10,7 @@ #define HW_SPAPR_CPU_CORE_H #include "hw/cpu/core.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "target/ppc/cpu-qom.h" #include "target/ppc/cpu.h" #include "qom/object.h" diff --git a/include/hw/ppc/spapr_drc.h b/include/hw/ppc/spapr_drc.h index 9ff42909c9..bb80f95d91 100644 --- a/include/hw/ppc/spapr_drc.h +++ b/include/hw/ppc/spapr_drc.h @@ -16,7 +16,7 @@ #include #include "qom/object.h" #include "system/runstate.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qapi/error.h" #define TYPE_SPAPR_DR_CONNECTOR "spapr-dr-connector" diff --git a/include/hw/ppc/spapr_tpm_proxy.h b/include/hw/ppc/spapr_tpm_proxy.h index 96d2a9697e..831d36a02f 100644 --- a/include/hw/ppc/spapr_tpm_proxy.h +++ b/include/hw/ppc/spapr_tpm_proxy.h @@ -14,7 +14,7 @@ #define HW_SPAPR_TPM_PROXY_H #include "qom/object.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #define TYPE_SPAPR_TPM_PROXY "spapr-tpm-proxy" OBJECT_DECLARE_SIMPLE_TYPE(SpaprTpmProxy, SPAPR_TPM_PROXY) diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h index 097fcdf00f..3f78e37122 100644 --- a/include/hw/ppc/xics.h +++ b/include/hw/ppc/xics.h @@ -29,7 +29,7 @@ #define XICS_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define XICS_IPI 0x2 diff --git a/include/hw/qdev-properties.h b/include/hw/qdev-properties.h index 60b8133009..d8745d4c65 100644 --- a/include/hw/qdev-properties.h +++ b/include/hw/qdev-properties.h @@ -1,7 +1,7 @@ #ifndef QEMU_QDEV_PROPERTIES_H #define QEMU_QDEV_PROPERTIES_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" /** * Property: diff --git a/include/hw/register.h b/include/hw/register.h index 7b0f4c8b7a..b3d20fee7d 100644 --- a/include/hw/register.h +++ b/include/hw/register.h @@ -11,7 +11,7 @@ #ifndef REGISTER_H #define REGISTER_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "system/memory.h" #include "hw/registerfields.h" #include "qom/object.h" diff --git a/include/hw/s390x/ap-device.h b/include/hw/s390x/ap-device.h index e502745de5..f746addb42 100644 --- a/include/hw/s390x/ap-device.h +++ b/include/hw/s390x/ap-device.h @@ -11,7 +11,7 @@ #ifndef HW_S390X_AP_DEVICE_H #define HW_S390X_AP_DEVICE_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define TYPE_AP_DEVICE "ap-device" diff --git a/include/hw/s390x/event-facility.h b/include/hw/s390x/event-facility.h index eac7a51100..5c556f2b4d 100644 --- a/include/hw/s390x/event-facility.h +++ b/include/hw/s390x/event-facility.h @@ -16,7 +16,7 @@ #define HW_S390_SCLP_EVENT_FACILITY_H #include "qemu/thread.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/s390x/sclp.h" #include "qom/object.h" diff --git a/include/hw/s390x/storage-attributes.h b/include/hw/s390x/storage-attributes.h index b5c6d8fa55..66716a97c0 100644 --- a/include/hw/s390x/storage-attributes.h +++ b/include/hw/s390x/storage-attributes.h @@ -12,7 +12,7 @@ #ifndef S390_STORAGE_ATTRIBUTES_H #define S390_STORAGE_ATTRIBUTES_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "monitor/monitor.h" #include "qom/object.h" diff --git a/include/hw/s390x/storage-keys.h b/include/hw/s390x/storage-keys.h index ac303001f5..2d02936c31 100644 --- a/include/hw/s390x/storage-keys.h +++ b/include/hw/s390x/storage-keys.h @@ -12,7 +12,7 @@ #ifndef S390_STORAGE_KEYS_H #define S390_STORAGE_KEYS_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "monitor/monitor.h" #include "qom/object.h" diff --git a/include/hw/s390x/tod.h b/include/hw/s390x/tod.h index 0935e85089..bcb20994c8 100644 --- a/include/hw/s390x/tod.h +++ b/include/hw/s390x/tod.h @@ -11,7 +11,7 @@ #ifndef HW_S390_TOD_H #define HW_S390_TOD_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "tcg/s390-tod.h" #include "qom/object.h" diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index 044bd048b4..83782339d4 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -3,7 +3,7 @@ #include "block/aio.h" #include "hw/block/block.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "scsi/utils.h" #include "qemu/notify.h" #include "qom/object.h" diff --git a/include/hw/sd/sd.h b/include/hw/sd/sd.h index 91b5c40a5f..d12f24955a 100644 --- a/include/hw/sd/sd.h +++ b/include/hw/sd/sd.h @@ -30,7 +30,7 @@ #ifndef HW_SD_H #define HW_SD_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define OUT_OF_RANGE (1 << 31) diff --git a/include/hw/ssi/ssi.h b/include/hw/ssi/ssi.h index 2ad8033d8f..6d6d8ccb3d 100644 --- a/include/hw/ssi/ssi.h +++ b/include/hw/ssi/ssi.h @@ -13,7 +13,7 @@ #ifndef QEMU_SSI_H #define QEMU_SSI_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" typedef enum SSICSMode SSICSMode; diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h index 69eb62e29c..c0d18d9e00 100644 --- a/include/hw/sysbus.h +++ b/include/hw/sysbus.h @@ -3,7 +3,7 @@ /* Devices attached directly to the main system bus. */ -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "system/memory.h" #include "qom/object.h" diff --git a/include/hw/usb/usb.h b/include/hw/usb/usb.h index 26a9f3ecde..78e2ceedd7 100644 --- a/include/hw/usb/usb.h +++ b/include/hw/usb/usb.h @@ -26,7 +26,7 @@ */ #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qemu/iov.h" #include "qemu/queue.h" #include "qom/object.h" diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h index 7ab8c9dab0..1a2d396156 100644 --- a/include/hw/virtio/virtio-bus.h +++ b/include/hw/virtio/virtio-bus.h @@ -25,7 +25,7 @@ #ifndef VIRTIO_BUS_H #define VIRTIO_BUS_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/virtio/virtio.h" #include "qom/object.h" diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index d97529c3f1..91ff2fa21a 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -15,7 +15,7 @@ #define QEMU_VIRTIO_H #include "system/memory.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/virtio/virtio-features.h" #include "net/net.h" #include "migration/vmstate.h" diff --git a/include/hw/watchdog/wdt_diag288.h b/include/hw/watchdog/wdt_diag288.h index f72c1d3318..c76f7e5d36 100644 --- a/include/hw/watchdog/wdt_diag288.h +++ b/include/hw/watchdog/wdt_diag288.h @@ -1,7 +1,7 @@ #ifndef WDT_DIAG288_H #define WDT_DIAG288_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qom/object.h" #define TYPE_WDT_DIAG288 "diag288" diff --git a/include/hw/xen/xen-bus.h b/include/hw/xen/xen-bus.h index bdbf1ed6fd..4416123f1f 100644 --- a/include/hw/xen/xen-bus.h +++ b/include/hw/xen/xen-bus.h @@ -8,7 +8,7 @@ #ifndef HW_XEN_BUS_H #define HW_XEN_BUS_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/xen/xen_backend_ops.h" #include "qemu/notify.h" #include "qemu/queue.h" diff --git a/include/monitor/qdev.h b/include/monitor/qdev.h index de33637869..f85f25738d 100644 --- a/include/monitor/qdev.h +++ b/include/monitor/qdev.h @@ -1,7 +1,7 @@ #ifndef MONITOR_QDEV_H #define MONITOR_QDEV_H -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" /*** monitor commands ***/ diff --git a/migration/migration.h b/migration/migration.h index 213b33fe6e..fbe02d5bb1 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -15,7 +15,7 @@ #define QEMU_MIGRATION_H #include "exec/cpu-common.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qapi/qapi-types-migration.h" #include "qobject/json-writer.h" #include "qemu/thread.h" diff --git a/monitor/hmp.c b/monitor/hmp.c index a3ee02e52c..4caafbc714 100644 --- a/monitor/hmp.c +++ b/monitor/hmp.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "monitor-internal.h" #include "monitor/hmp.h" #include "qobject/qdict.h" diff --git a/qom/object.c b/qom/object.c index 4f32c1aba7..ff8ede8a32 100644 --- a/qom/object.c +++ b/qom/object.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qapi/error.h" #include "qom/object.h" #include "qom/object_interfaces.h" diff --git a/qom/qom-hmp-cmds.c b/qom/qom-hmp-cmds.c index a00a564b1e..32e40630c9 100644 --- a/qom/qom-hmp-cmds.c +++ b/qom/qom-hmp-cmds.c @@ -6,7 +6,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "monitor/hmp.h" #include "monitor/monitor.h" #include "qapi/error.h" diff --git a/qom/qom-qmp-cmds.c b/qom/qom-qmp-cmds.c index 57f1898cf6..48b38d2b7f 100644 --- a/qom/qom-qmp-cmds.c +++ b/qom/qom-qmp-cmds.c @@ -15,7 +15,7 @@ #include "qemu/osdep.h" #include "block/qdict.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qapi/error.h" #include "qapi/qapi-commands-qdev.h" #include "qapi/qapi-commands-qom.h" diff --git a/stubs/hotplug-stubs.c b/stubs/hotplug-stubs.c index 7aadaa29bd..23a1678dbb 100644 --- a/stubs/hotplug-stubs.c +++ b/stubs/hotplug-stubs.c @@ -12,7 +12,7 @@ * See the COPYING file in the top-level directory. */ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" HotplugHandler *qdev_get_hotplug_handler(DeviceState *dev) { diff --git a/stubs/sysbus.c b/stubs/sysbus.c index d8da90caae..68b771226f 100644 --- a/stubs/sysbus.c +++ b/stubs/sysbus.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" BusState *sysbus_get_default(void) { diff --git a/system/bootdevice.c b/system/bootdevice.c index 8acdbfb0a5..9538b08983 100644 --- a/system/bootdevice.c +++ b/system/bootdevice.c @@ -28,7 +28,7 @@ #include "qapi/visitor.h" #include "qemu/error-report.h" #include "system/reset.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/core/boards.h" typedef struct FWBootEntry FWBootEntry; diff --git a/system/physmem.c b/system/physmem.c index edc384f4fa..ba69be2d08 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -36,7 +36,7 @@ #include "exec/page-protection.h" #include "exec/target_page.h" #include "exec/translation-block.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/qdev-properties.h" #include "hw/core/boards.h" #include "system/xen.h" diff --git a/system/qtest.c b/system/qtest.c index b0bb9bf9d4..e42b83ce67 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -19,7 +19,7 @@ #include "system/ioport.h" #include "system/memory.h" #include "exec/tswap.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/core/irq.h" #include "hw/core/cpu.h" #include "qemu/accel.h" diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuzz.c index c848eec3b9..e8bb7bb0d5 100644 --- a/tests/qtest/fuzz/generic_fuzz.c +++ b/tests/qtest/fuzz/generic_fuzz.c @@ -22,7 +22,7 @@ #include "string.h" #include "system/memory.h" #include "system/ramblock.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "hw/pci/pci.h" #include "hw/pci/pci_device.h" #include "hw/core/boards.h" diff --git a/ui/console.c b/ui/console.c index 2d00828c53..f445db1138 100644 --- a/ui/console.c +++ b/ui/console.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "ui/console.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "qapi/error.h" #include "qapi/qapi-commands-ui.h" #include "qapi/visitor.h" diff --git a/ui/vdagent.c b/ui/vdagent.c index 660686c9c0..142a3691ac 100644 --- a/ui/vdagent.c +++ b/ui/vdagent.c @@ -5,7 +5,7 @@ #include "qemu/error-report.h" #include "qemu/option.h" #include "qemu/units.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "ui/clipboard.h" #include "ui/console.h" #include "ui/input.h" diff --git a/ui/vnc.c b/ui/vnc.c index e6bcf0e1cf..a61a4f937d 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -28,7 +28,7 @@ #include "vnc.h" #include "vnc-jobs.h" #include "trace.h" -#include "hw/qdev-core.h" +#include "hw/core/qdev.h" #include "system/system.h" #include "system/runstate.h" #include "qemu/error-report.h" From f7889f86bda23c4b22e41d8dfd9fe6298464b047 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:01 +0100 Subject: [PATCH 018/152] include: move hw/qdev-dma.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/usb/hcd-ohci-pci.c | 2 +- hw/usb/hcd-ohci-sysbus.c | 2 +- hw/usb/hcd-ohci.c | 2 +- include/hw/{ => core}/qdev-dma.h | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename include/hw/{ => core}/qdev-dma.h (100%) diff --git a/hw/usb/hcd-ohci-pci.c b/hw/usb/hcd-ohci-pci.c index e180e96b5f..25c400698e 100644 --- a/hw/usb/hcd-ohci-pci.c +++ b/hw/usb/hcd-ohci-pci.c @@ -25,7 +25,7 @@ #include "migration/vmstate.h" #include "hw/pci/pci_device.h" #include "hw/sysbus.h" -#include "hw/qdev-dma.h" +#include "hw/core/qdev-dma.h" #include "hw/qdev-properties.h" #include "trace.h" #include "hcd-ohci.h" diff --git a/hw/usb/hcd-ohci-sysbus.c b/hw/usb/hcd-ohci-sysbus.c index 5c3434153d..8224fb8862 100644 --- a/hw/usb/hcd-ohci-sysbus.c +++ b/hw/usb/hcd-ohci-sysbus.c @@ -26,7 +26,7 @@ #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "hw/sysbus.h" -#include "hw/qdev-dma.h" +#include "hw/core/qdev-dma.h" #include "hw/qdev-properties.h" #include "trace.h" #include "hcd-ohci.h" diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c index ea3d5d2bd1..588cecef14 100644 --- a/hw/usb/hcd-ohci.c +++ b/hw/usb/hcd-ohci.c @@ -33,7 +33,7 @@ #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "hw/sysbus.h" -#include "hw/qdev-dma.h" +#include "hw/core/qdev-dma.h" #include "hw/qdev-properties.h" #include "trace.h" #include "hcd-ohci.h" diff --git a/include/hw/qdev-dma.h b/include/hw/core/qdev-dma.h similarity index 100% rename from include/hw/qdev-dma.h rename to include/hw/core/qdev-dma.h From 78d45220b4e6385c6a90302fbc84fdacb415580c Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:05 +0100 Subject: [PATCH 019/152] include: move hw/qdev-properties.h to hw/core/ Signed-off-by: Paolo Bonzini --- backends/spdm-socket.c | 2 +- backends/tpm/tpm_util.c | 2 +- docs/devel/migration/compatibility.rst | 2 +- hw/9pfs/virtio-9p-device.c | 2 +- hw/acpi/erst.c | 2 +- hw/acpi/generic_event_device.c | 2 +- hw/acpi/piix4.c | 2 +- hw/acpi/vmclock.c | 2 +- hw/acpi/vmgenid.c | 2 +- hw/adc/aspeed_adc.c | 2 +- hw/adc/npcm7xx_adc.c | 2 +- hw/arm/armv7m.c | 2 +- hw/arm/aspeed_coprocessor_common.c | 2 +- hw/arm/aspeed_soc_common.c | 2 +- hw/arm/b-l475e-iot01a.c | 2 +- hw/arm/bananapi_m2u.c | 2 +- hw/arm/cubieboard.c | 2 +- hw/arm/digic.c | 2 +- hw/arm/exynos4210.c | 2 +- hw/arm/exynos4_boards.c | 2 +- hw/arm/fsl-imx25.c | 2 +- hw/arm/fsl-imx31.c | 2 +- hw/arm/fsl-imx6.c | 2 +- hw/arm/imx25_pdk.c | 2 +- hw/arm/imx8mp-evk.c | 2 +- hw/arm/max78000fthr.c | 2 +- hw/arm/mcimx6ul-evk.c | 2 +- hw/arm/mcimx7d-sabre.c | 2 +- hw/arm/microbit.c | 2 +- hw/arm/mps2.c | 2 +- hw/arm/mps3r.c | 2 +- hw/arm/msf2-som.c | 2 +- hw/arm/musicpal.c | 2 +- hw/arm/netduino2.c | 2 +- hw/arm/netduinoplus2.c | 2 +- hw/arm/npcm7xx.c | 2 +- hw/arm/npcm7xx_boards.c | 2 +- hw/arm/npcm8xx.c | 2 +- hw/arm/npcm8xx_boards.c | 2 +- hw/arm/olimex-stm32-h405.c | 2 +- hw/arm/omap1.c | 2 +- hw/arm/orangepi.c | 2 +- hw/arm/sabrelite.c | 2 +- hw/arm/sbsa-ref.c | 2 +- hw/arm/smmu-common.c | 2 +- hw/arm/smmuv3.c | 2 +- hw/arm/stm32f100_soc.c | 2 +- hw/arm/stm32f205_soc.c | 2 +- hw/arm/stm32vldiscovery.c | 2 +- hw/arm/strongarm.c | 2 +- hw/arm/virt.c | 2 +- hw/audio/ac97.c | 2 +- hw/audio/adlib.c | 2 +- hw/audio/asc.c | 2 +- hw/audio/cs4231a.c | 2 +- hw/audio/gus.c | 2 +- hw/audio/hda-codec.c | 2 +- hw/audio/intel-hda.c | 2 +- hw/audio/marvell_88w8618.c | 2 +- hw/audio/model.c | 2 +- hw/audio/pl041.c | 2 +- hw/audio/sb16.c | 2 +- hw/avr/atmega.c | 2 +- hw/block/fdc-isa.c | 2 +- hw/block/fdc.c | 2 +- hw/block/m25p80.c | 2 +- hw/block/pflash_cfi01.c | 2 +- hw/block/pflash_cfi02.c | 2 +- hw/block/swim.c | 2 +- hw/block/vhost-user-blk.c | 2 +- hw/block/virtio-blk.c | 2 +- hw/block/xen-block.c | 2 +- hw/char/avr_usart.c | 2 +- hw/char/bcm2835_aux.c | 2 +- hw/char/debugcon.c | 2 +- hw/char/digic-uart.c | 2 +- hw/char/diva-gsp.c | 2 +- hw/char/escc.c | 2 +- hw/char/exynos4210_uart.c | 2 +- hw/char/grlib_apbuart.c | 2 +- hw/char/ibex_uart.c | 2 +- hw/char/imx_serial.c | 2 +- hw/char/ipoctal232.c | 2 +- hw/char/max78000_uart.c | 2 +- hw/char/mcf_uart.c | 2 +- hw/char/mchp_pfsoc_mmuart.c | 2 +- hw/char/nrf51_uart.c | 2 +- hw/char/parallel-isa.c | 2 +- hw/char/parallel.c | 2 +- hw/char/pl011.c | 2 +- hw/char/renesas_sci.c | 2 +- hw/char/sclpconsole-lm.c | 2 +- hw/char/sclpconsole.c | 2 +- hw/char/serial-isa.c | 2 +- hw/char/serial-mm.c | 2 +- hw/char/serial-pci-multi.c | 2 +- hw/char/serial-pci.c | 2 +- hw/char/serial.c | 2 +- hw/char/sh_serial.c | 2 +- hw/char/shakti_uart.c | 2 +- hw/char/spapr_vty.c | 2 +- hw/char/stm32f2xx_usart.c | 2 +- hw/char/stm32l4x5_usart.c | 2 +- hw/char/terminal3270.c | 2 +- hw/char/virtio-console.c | 2 +- hw/char/virtio-serial-bus.c | 2 +- hw/char/xen_console.c | 2 +- hw/char/xilinx_uartlite.c | 2 +- hw/core/bus.c | 2 +- hw/core/cpu-common.c | 2 +- hw/core/cpu-system.c | 2 +- hw/core/cpu-user.c | 2 +- hw/core/generic-loader.c | 2 +- hw/core/guest-loader.c | 2 +- hw/core/or-irq.c | 2 +- hw/core/platform-bus.c | 2 +- hw/core/qdev-properties-system.c | 2 +- hw/core/qdev-properties.c | 2 +- hw/core/qdev.c | 2 +- hw/core/split-irq.c | 2 +- hw/cpu/a15mpcore.c | 2 +- hw/cpu/a9mpcore.c | 2 +- hw/cpu/arm11mpcore.c | 2 +- hw/cpu/cluster.c | 2 +- hw/cxl/switch-mailbox-cci.c | 2 +- hw/display/apple-gfx.h | 2 +- hw/display/artist.c | 2 +- hw/display/ati.c | 2 +- hw/display/bcm2835_fb.c | 2 +- hw/display/bochs-display.c | 2 +- hw/display/cg3.c | 2 +- hw/display/cirrus_vga.c | 2 +- hw/display/cirrus_vga_isa.c | 2 +- hw/display/dm163.c | 2 +- hw/display/exynos4210_fimd.c | 2 +- hw/display/g364fb.c | 2 +- hw/display/i2c-ddc.c | 2 +- hw/display/macfb.c | 2 +- hw/display/pl110.c | 2 +- hw/display/qxl.c | 2 +- hw/display/ramfb-standalone.c | 2 +- hw/display/sm501.c | 2 +- hw/display/tcx.c | 2 +- hw/display/vga-isa.c | 2 +- hw/display/vga-mmio.c | 2 +- hw/display/vga-pci.c | 2 +- hw/display/vhost-user-gpu.c | 2 +- hw/display/virtio-gpu-gl.c | 2 +- hw/display/virtio-gpu-pci-gl.c | 2 +- hw/display/virtio-gpu-pci-rutabaga.c | 2 +- hw/display/virtio-gpu-pci.c | 2 +- hw/display/virtio-gpu.c | 2 +- hw/display/virtio-vga-gl.c | 2 +- hw/display/virtio-vga-rutabaga.c | 2 +- hw/display/virtio-vga.c | 2 +- hw/display/vmware_vga.c | 2 +- hw/dma/i82374.c | 2 +- hw/dma/i8257.c | 2 +- hw/dma/pl080.c | 2 +- hw/dma/pl330.c | 2 +- hw/dma/sifive_pdma.c | 2 +- hw/dma/sparc32_dma.c | 2 +- hw/dma/xilinx_axidma.c | 2 +- hw/dma/xlnx-zdma.c | 2 +- hw/dma/xlnx_csu_dma.c | 2 +- hw/fsi/cfam.c | 2 +- hw/fsi/lbus.c | 2 +- hw/gpio/imx_gpio.c | 2 +- hw/gpio/npcm7xx_gpio.c | 2 +- hw/gpio/omap_gpio.c | 2 +- hw/gpio/pca9552.c | 2 +- hw/gpio/pca9554.c | 2 +- hw/gpio/pl061.c | 2 +- hw/gpio/sifive_gpio.c | 2 +- hw/gpio/stm32l4x5_gpio.c | 2 +- hw/hyperv/hv-balloon.c | 2 +- hw/hyperv/syndbg.c | 2 +- hw/hyperv/vmbus.c | 2 +- hw/i2c/aspeed_i2c.c | 2 +- hw/i2c/core.c | 2 +- hw/i2c/i2c_mux_pca954x.c | 2 +- hw/i2c/omap_i2c.c | 2 +- hw/i2c/smbus_eeprom.c | 2 +- hw/i386/amd_iommu.c | 2 +- hw/i386/intel_iommu.c | 2 +- hw/i386/kvm/clock.c | 2 +- hw/i386/kvm/ioapic.c | 2 +- hw/i386/pc_q35.c | 2 +- hw/i386/pc_sysfw.c | 2 +- hw/i386/sgx-epc.c | 2 +- hw/i386/vmmouse.c | 2 +- hw/i386/vmport.c | 2 +- hw/i386/x86-iommu.c | 2 +- hw/i386/xen/xen_pvdevice.c | 2 +- hw/ide/ahci-sysbus.c | 2 +- hw/ide/cmd646.c | 2 +- hw/ide/isa.c | 2 +- hw/ide/macio.c | 2 +- hw/ide/mmio.c | 2 +- hw/input/adb.c | 2 +- hw/input/lasips2.c | 2 +- hw/input/pckbd.c | 2 +- hw/input/stellaris_gamepad.c | 2 +- hw/input/virtio-input-hid.c | 2 +- hw/input/virtio-input-host.c | 2 +- hw/input/virtio-input.c | 2 +- hw/intc/apic_common.c | 2 +- hw/intc/arm_gic_common.c | 2 +- hw/intc/arm_gicv2m.c | 2 +- hw/intc/arm_gicv3_common.c | 2 +- hw/intc/arm_gicv3_its.c | 2 +- hw/intc/arm_gicv3_its_kvm.c | 2 +- hw/intc/armv7m_nvic.c | 2 +- hw/intc/exynos4210_combiner.c | 2 +- hw/intc/exynos4210_gic.c | 2 +- hw/intc/goldfish_pic.c | 2 +- hw/intc/grlib_irqmp.c | 2 +- hw/intc/i8259_common.c | 2 +- hw/intc/ioapic.c | 2 +- hw/intc/loongarch_dintc.c | 2 +- hw/intc/loongarch_extioi_common.c | 2 +- hw/intc/loongarch_ipi.c | 2 +- hw/intc/loongarch_pic_common.c | 2 +- hw/intc/loongson_ipi.c | 2 +- hw/intc/loongson_liointc.c | 2 +- hw/intc/m68k_irqc.c | 2 +- hw/intc/mips_gic.c | 2 +- hw/intc/omap_intc.c | 2 +- hw/intc/ompic.c | 2 +- hw/intc/openpic.c | 2 +- hw/intc/openpic_kvm.c | 2 +- hw/intc/pnv_xive.c | 2 +- hw/intc/pnv_xive2.c | 2 +- hw/intc/ppc-uic.c | 2 +- hw/intc/realview_gic.c | 2 +- hw/intc/riscv_aclint.c | 2 +- hw/intc/riscv_aplic.c | 2 +- hw/intc/riscv_imsic.c | 2 +- hw/intc/rx_icu.c | 2 +- hw/intc/s390_flic.c | 2 +- hw/intc/sifive_plic.c | 2 +- hw/intc/spapr_xive.c | 2 +- hw/intc/xics.c | 2 +- hw/intc/xilinx_intc.c | 2 +- hw/intc/xive.c | 2 +- hw/intc/xive2.c | 2 +- hw/intc/xlnx-pmu-iomod-intc.c | 2 +- hw/ipack/ipack.c | 2 +- hw/ipmi/ipmi.c | 2 +- hw/ipmi/ipmi_bmc_extern.c | 2 +- hw/ipmi/ipmi_bmc_sim.c | 2 +- hw/ipmi/isa_ipmi_bt.c | 2 +- hw/ipmi/isa_ipmi_kcs.c | 2 +- hw/isa/isa-superio.c | 2 +- hw/isa/lpc_ich9.c | 2 +- hw/isa/pc87312.c | 2 +- hw/isa/piix.c | 2 +- hw/isa/vt82c686.c | 2 +- hw/m68k/mcf5206.c | 2 +- hw/m68k/mcf_intc.c | 2 +- hw/m68k/next-cube.c | 2 +- hw/m68k/q800-glue.c | 2 +- hw/m68k/virt.c | 2 +- hw/mem/cxl_type3.c | 2 +- hw/mem/nvdimm.c | 2 +- hw/mem/pc-dimm.c | 2 +- hw/mem/sparse-mem.c | 2 +- hw/microblaze/petalogix_ml605_mmu.c | 2 +- hw/mips/boston.c | 2 +- hw/mips/cps.c | 2 +- hw/mips/fuloong2e.c | 2 +- hw/misc/a9scu.c | 2 +- hw/misc/allwinner-h3-dramc.c | 2 +- hw/misc/allwinner-r40-dramc.c | 2 +- hw/misc/allwinner-sid.c | 2 +- hw/misc/allwinner-sramc.c | 2 +- hw/misc/applesmc.c | 2 +- hw/misc/arm11scu.c | 2 +- hw/misc/arm_l2x0.c | 2 +- hw/misc/arm_sysctl.c | 2 +- hw/misc/armsse-cpuid.c | 2 +- hw/misc/aspeed_hace.c | 2 +- hw/misc/aspeed_i3c.c | 2 +- hw/misc/aspeed_lpc.c | 2 +- hw/misc/aspeed_sbc.c | 2 +- hw/misc/aspeed_scu.c | 2 +- hw/misc/aspeed_sdmc.c | 2 +- hw/misc/aspeed_sli.c | 2 +- hw/misc/avr_power.c | 2 +- hw/misc/bcm2835_cprman.c | 2 +- hw/misc/bcm2835_property.c | 2 +- hw/misc/debugexit.c | 2 +- hw/misc/djmemc.c | 2 +- hw/misc/eccmemctl.c | 2 +- hw/misc/empty_slot.c | 2 +- hw/misc/iotkit-secctl.c | 2 +- hw/misc/iotkit-sysctl.c | 2 +- hw/misc/iotkit-sysinfo.c | 2 +- hw/misc/ivshmem-pci.c | 2 +- hw/misc/led.c | 2 +- hw/misc/mac_via.c | 2 +- hw/misc/macio/cuda.c | 2 +- hw/misc/macio/gpio.c | 2 +- hw/misc/macio/macio.c | 2 +- hw/misc/macio/pmu.c | 2 +- hw/misc/max78000_gcr.c | 2 +- hw/misc/mips_cmgcr.c | 2 +- hw/misc/mips_cpc.c | 2 +- hw/misc/mips_itu.c | 2 +- hw/misc/mos6522.c | 2 +- hw/misc/mps2-fpgaio.c | 2 +- hw/misc/mps2-scc.c | 2 +- hw/misc/msf2-sysreg.c | 2 +- hw/misc/npcm7xx_mft.c | 2 +- hw/misc/npcm7xx_pwm.c | 2 +- hw/misc/npcm_gcr.c | 2 +- hw/misc/nrf51_rng.c | 2 +- hw/misc/pci-testdev.c | 2 +- hw/misc/pvpanic-isa.c | 2 +- hw/misc/pvpanic-mmio.c | 2 +- hw/misc/pvpanic-pci.c | 2 +- hw/misc/pvpanic.c | 2 +- hw/misc/sifive_e_aon.c | 2 +- hw/misc/sifive_u_otp.c | 2 +- hw/misc/stm32l4x5_rcc.c | 2 +- hw/misc/tz-mpc.c | 2 +- hw/misc/tz-msc.c | 2 +- hw/misc/tz-ppc.c | 2 +- hw/misc/virt_ctrl.c | 2 +- hw/misc/xlnx-versal-cframe-reg.c | 2 +- hw/misc/xlnx-versal-cfu.c | 2 +- hw/misc/xlnx-versal-crl.c | 2 +- hw/misc/xlnx-versal-pmc-iou-slcr.c | 2 +- hw/misc/xlnx-versal-trng.c | 2 +- hw/misc/xlnx-versal-xramc.c | 2 +- hw/misc/xlnx-zynqmp-apu-ctrl.c | 2 +- hw/misc/zynq_slcr.c | 2 +- hw/net/allwinner-sun8i-emac.c | 2 +- hw/net/allwinner_emac.c | 2 +- hw/net/cadence_gem.c | 2 +- hw/net/can/can_kvaser_pci.c | 2 +- hw/net/can/can_mioe3680_pci.c | 2 +- hw/net/can/can_pcm3680_pci.c | 2 +- hw/net/can/ctucan_pci.c | 2 +- hw/net/can/xlnx-versal-canfd.c | 2 +- hw/net/can/xlnx-zynqmp-can.c | 2 +- hw/net/dp8393x.c | 2 +- hw/net/e1000.c | 2 +- hw/net/e1000e.c | 2 +- hw/net/eepro100.c | 2 +- hw/net/fsl_etsec/etsec.c | 2 +- hw/net/ftgmac100.c | 2 +- hw/net/i82596.c | 2 +- hw/net/igb.c | 2 +- hw/net/imx_fec.c | 2 +- hw/net/lan9118.c | 2 +- hw/net/lance.c | 2 +- hw/net/lasi_i82596.c | 2 +- hw/net/mcf_fec.c | 2 +- hw/net/msf2-emac.c | 2 +- hw/net/mv88w8618_eth.c | 2 +- hw/net/ne2000-pci.c | 2 +- hw/net/npcm7xx_emc.c | 2 +- hw/net/opencores_eth.c | 2 +- hw/net/pcnet-pci.c | 2 +- hw/net/pcnet.c | 2 +- hw/net/rocker/rocker.c | 2 +- hw/net/rtl8139.c | 2 +- hw/net/smc91c111.c | 2 +- hw/net/spapr_llan.c | 2 +- hw/net/stellaris_enet.c | 2 +- hw/net/sungem.c | 2 +- hw/net/sunhme.c | 2 +- hw/net/tulip.c | 2 +- hw/net/virtio-net.c | 2 +- hw/net/vmxnet3.c | 2 +- hw/net/xen_nic.c | 2 +- hw/net/xgmac.c | 2 +- hw/net/xilinx_axienet.c | 2 +- hw/net/xilinx_ethlite.c | 2 +- hw/nvram/aspeed_otp.c | 2 +- hw/nvram/ds1225y.c | 2 +- hw/nvram/eeprom_at24c.c | 2 +- hw/nvram/fw_cfg.c | 2 +- hw/nvram/mac_nvram.c | 2 +- hw/nvram/nrf51_nvm.c | 2 +- hw/nvram/spapr_nvram.c | 2 +- hw/nvram/xlnx-bbram.c | 2 +- hw/nvram/xlnx-efuse.c | 2 +- hw/nvram/xlnx-versal-efuse-cache.c | 2 +- hw/nvram/xlnx-versal-efuse-ctrl.c | 2 +- hw/nvram/xlnx-zynqmp-efuse.c | 2 +- hw/openrisc/openrisc_sim.c | 2 +- hw/openrisc/virt.c | 2 +- hw/pci-bridge/cxl_downstream.c | 2 +- hw/pci-bridge/cxl_root_port.c | 2 +- hw/pci-bridge/cxl_upstream.c | 2 +- hw/pci-bridge/gen_pcie_root_port.c | 2 +- hw/pci-bridge/pci_bridge_dev.c | 2 +- hw/pci-bridge/pci_expander_bridge.c | 2 +- hw/pci-bridge/pcie_pci_bridge.c | 2 +- hw/pci-bridge/pcie_root_port.c | 2 +- hw/pci-bridge/xio3130_downstream.c | 2 +- hw/pci-host/aspeed_pcie.c | 2 +- hw/pci-host/astro.c | 2 +- hw/pci-host/designware.c | 2 +- hw/pci-host/dino.c | 2 +- hw/pci-host/gpex.c | 2 +- hw/pci-host/grackle.c | 2 +- hw/pci-host/gt64120.c | 2 +- hw/pci-host/i440fx.c | 2 +- hw/pci-host/mv64361.c | 2 +- hw/pci-host/pnv_phb.c | 2 +- hw/pci-host/pnv_phb3.c | 2 +- hw/pci-host/pnv_phb3_msi.c | 2 +- hw/pci-host/pnv_phb4.c | 2 +- hw/pci-host/pnv_phb4_pec.c | 2 +- hw/pci-host/ppce500.c | 2 +- hw/pci-host/q35.c | 2 +- hw/pci-host/raven.c | 2 +- hw/pci-host/remote.c | 2 +- hw/pci-host/sabre.c | 2 +- hw/pci-host/uninorth.c | 2 +- hw/pci-host/versatile.c | 2 +- hw/pci-host/xilinx-pcie.c | 2 +- hw/pci/pci.c | 2 +- hw/pci/pci_bridge.c | 2 +- hw/pci/pci_host.c | 2 +- hw/pci/pcie_port.c | 2 +- hw/pci/pcie_sriov.c | 2 +- hw/ppc/e500.c | 2 +- hw/ppc/mac_newworld.c | 2 +- hw/ppc/mac_oldworld.c | 2 +- hw/ppc/pegasos.c | 2 +- hw/ppc/pnv.c | 2 +- hw/ppc/pnv_adu.c | 2 +- hw/ppc/pnv_chiptod.c | 2 +- hw/ppc/pnv_core.c | 2 +- hw/ppc/pnv_homer.c | 2 +- hw/ppc/pnv_i2c.c | 2 +- hw/ppc/pnv_lpc.c | 2 +- hw/ppc/pnv_n1_chiplet.c | 2 +- hw/ppc/pnv_nest_pervasive.c | 2 +- hw/ppc/pnv_occ.c | 2 +- hw/ppc/pnv_pnor.c | 2 +- hw/ppc/pnv_psi.c | 2 +- hw/ppc/pnv_sbe.c | 2 +- hw/ppc/ppc440_bamboo.c | 2 +- hw/ppc/ppc440_uc.c | 2 +- hw/ppc/ppc4xx_devs.c | 2 +- hw/ppc/ppc4xx_sdram.c | 2 +- hw/ppc/prep.c | 2 +- hw/ppc/prep_systemio.c | 2 +- hw/ppc/rs6000_mc.c | 2 +- hw/ppc/sam460ex.c | 2 +- hw/ppc/spapr.c | 2 +- hw/ppc/spapr_cpu_core.c | 2 +- hw/ppc/spapr_irq.c | 2 +- hw/ppc/spapr_nvdimm.c | 2 +- hw/ppc/spapr_pci.c | 2 +- hw/ppc/spapr_rng.c | 2 +- hw/ppc/spapr_tpm_proxy.c | 2 +- hw/ppc/virtex_ml507.c | 2 +- hw/remote/proxy.c | 2 +- hw/riscv/numa.c | 2 +- hw/riscv/riscv-iommu-pci.c | 2 +- hw/riscv/riscv-iommu-sys.c | 2 +- hw/riscv/riscv-iommu.c | 2 +- hw/riscv/riscv-iommu.h | 2 +- hw/riscv/riscv_hart.c | 2 +- hw/riscv/shakti_c.c | 2 +- hw/riscv/virt.c | 2 +- hw/riscv/xiangshan_kmh.c | 2 +- hw/rtc/allwinner-rtc.c | 2 +- hw/rtc/goldfish_rtc.c | 2 +- hw/rtc/m48t59-isa.c | 2 +- hw/rtc/m48t59.c | 2 +- hw/rtc/mc146818rtc.c | 2 +- hw/rtc/pl031.c | 2 +- hw/rtc/rs5c372.c | 2 +- hw/rx/rx62n.c | 2 +- hw/s390x/3270-ccw.c | 2 +- hw/s390x/ccw-device.c | 2 +- hw/s390x/cpu-topology.c | 2 +- hw/s390x/css-bridge.c | 2 +- hw/s390x/css.c | 2 +- hw/s390x/ipl.c | 2 +- hw/s390x/s390-pci-bus.c | 2 +- hw/s390x/s390-skeys.c | 2 +- hw/s390x/s390-stattrib.c | 2 +- hw/s390x/s390-virtio-ccw.c | 2 +- hw/s390x/vhost-scsi-ccw.c | 2 +- hw/s390x/vhost-user-fs-ccw.c | 2 +- hw/s390x/vhost-vsock-ccw.c | 2 +- hw/s390x/virtio-ccw-9p.c | 2 +- hw/s390x/virtio-ccw-balloon.c | 2 +- hw/s390x/virtio-ccw-blk.c | 2 +- hw/s390x/virtio-ccw-crypto.c | 2 +- hw/s390x/virtio-ccw-gpu.c | 2 +- hw/s390x/virtio-ccw-input.c | 2 +- hw/s390x/virtio-ccw-mem.c | 2 +- hw/s390x/virtio-ccw-net.c | 2 +- hw/s390x/virtio-ccw-rng.c | 2 +- hw/s390x/virtio-ccw-scsi.c | 2 +- hw/s390x/virtio-ccw-serial.c | 2 +- hw/scsi/megasas.c | 2 +- hw/scsi/mptsas.c | 2 +- hw/scsi/scsi-bus.c | 2 +- hw/scsi/scsi-disk.c | 2 +- hw/scsi/scsi-generic.c | 2 +- hw/scsi/spapr_vscsi.c | 2 +- hw/scsi/vhost-scsi.c | 2 +- hw/scsi/vhost-user-scsi.c | 2 +- hw/scsi/virtio-scsi.c | 2 +- hw/scsi/vmw_pvscsi.c | 2 +- hw/sd/allwinner-sdhost.c | 2 +- hw/sd/aspeed_sdhci.c | 2 +- hw/sd/sd.c | 2 +- hw/sd/sdhci-pci.c | 2 +- hw/sd/sdhci.c | 2 +- hw/sd/ssi-sd.c | 2 +- hw/sensor/isl_pmbus_vr.c | 2 +- hw/sh4/r2d.c | 2 +- hw/sh4/sh7750.c | 2 +- hw/sparc/leon3.c | 2 +- hw/sparc/sun4m.c | 2 +- hw/sparc/sun4m_iommu.c | 2 +- hw/sparc64/sun4u.c | 2 +- hw/ssi/aspeed_smc.c | 2 +- hw/ssi/ibex_spi_host.c | 2 +- hw/ssi/npcm7xx_fiu.c | 2 +- hw/ssi/pnv_spi.c | 2 +- hw/ssi/sifive_spi.c | 2 +- hw/ssi/ssi.c | 2 +- hw/ssi/xilinx_spi.c | 2 +- hw/ssi/xilinx_spips.c | 2 +- hw/ssi/xlnx-versal-ospi.c | 2 +- hw/timer/a9gtimer.c | 2 +- hw/timer/allwinner-a10-pit.c | 2 +- hw/timer/arm_mptimer.c | 2 +- hw/timer/arm_timer.c | 2 +- hw/timer/aspeed_timer.c | 2 +- hw/timer/avr_timer16.c | 2 +- hw/timer/cmsdk-apb-dualtimer.c | 2 +- hw/timer/grlib_gptimer.c | 2 +- hw/timer/hpet.c | 2 +- hw/timer/ibex_timer.c | 2 +- hw/timer/mss-timer.c | 2 +- hw/timer/npcm7xx_timer.c | 2 +- hw/timer/nrf51_timer.c | 2 +- hw/timer/pxa2xx_timer.c | 2 +- hw/timer/renesas_cmt.c | 2 +- hw/timer/renesas_tmr.c | 2 +- hw/timer/sifive_pwm.c | 2 +- hw/timer/slavio_timer.c | 2 +- hw/timer/sse-timer.c | 2 +- hw/timer/stm32f2xx_timer.c | 2 +- hw/timer/xilinx_timer.c | 2 +- hw/tpm/tpm_crb.c | 2 +- hw/tpm/tpm_prop.h | 2 +- hw/tpm/tpm_spapr.c | 2 +- hw/tpm/tpm_tis_common.c | 2 +- hw/tpm/tpm_tis_isa.c | 2 +- hw/tpm/tpm_tis_sysbus.c | 2 +- hw/tricore/triboard.c | 2 +- hw/tricore/tricore_testdevice.c | 2 +- hw/uefi/var-service-sysbus.c | 2 +- hw/usb/bus.c | 2 +- hw/usb/canokey.c | 2 +- hw/usb/ccid-card-emulated.c | 2 +- hw/usb/ccid-card-passthru.c | 2 +- hw/usb/dev-audio.c | 2 +- hw/usb/dev-hid.c | 2 +- hw/usb/dev-hub.c | 2 +- hw/usb/dev-mtp.c | 2 +- hw/usb/dev-network.c | 2 +- hw/usb/dev-serial.c | 2 +- hw/usb/dev-smartcard-reader.c | 2 +- hw/usb/dev-storage.c | 2 +- hw/usb/dev-uas.c | 2 +- hw/usb/hcd-dwc2.c | 2 +- hw/usb/hcd-dwc3.c | 2 +- hw/usb/hcd-ehci-pci.c | 2 +- hw/usb/hcd-ehci-sysbus.c | 2 +- hw/usb/hcd-ohci-pci.c | 2 +- hw/usb/hcd-ohci-sysbus.c | 2 +- hw/usb/hcd-ohci.c | 2 +- hw/usb/hcd-uhci.c | 2 +- hw/usb/hcd-xhci-nec.c | 2 +- hw/usb/hcd-xhci-pci.c | 2 +- hw/usb/hcd-xhci-sysbus.c | 2 +- hw/usb/hcd-xhci.c | 2 +- hw/usb/host-libusb.c | 2 +- hw/usb/redirect.c | 2 +- hw/usb/u2f-emulated.c | 2 +- hw/usb/u2f-passthru.c | 2 +- hw/usb/xlnx-usb-subsystem.c | 2 +- hw/vfio-user/pci.c | 2 +- hw/vfio/ap.c | 2 +- hw/vfio/ccw.c | 2 +- hw/vfio/pci-quirks.c | 2 +- hw/vfio/pci.c | 2 +- hw/virtio/vdpa-dev-pci.c | 2 +- hw/virtio/vdpa-dev.c | 2 +- hw/virtio/vhost-scsi-pci.c | 2 +- hw/virtio/vhost-user-base.c | 2 +- hw/virtio/vhost-user-blk-pci.c | 2 +- hw/virtio/vhost-user-fs-pci.c | 2 +- hw/virtio/vhost-user-fs.c | 2 +- hw/virtio/vhost-user-gpio-pci.c | 2 +- hw/virtio/vhost-user-gpio.c | 2 +- hw/virtio/vhost-user-i2c-pci.c | 2 +- hw/virtio/vhost-user-i2c.c | 2 +- hw/virtio/vhost-user-rng-pci.c | 2 +- hw/virtio/vhost-user-rng.c | 2 +- hw/virtio/vhost-user-scmi-pci.c | 2 +- hw/virtio/vhost-user-scsi-pci.c | 2 +- hw/virtio/vhost-user-snd-pci.c | 2 +- hw/virtio/vhost-user-snd.c | 2 +- hw/virtio/vhost-user-test-device-pci.c | 2 +- hw/virtio/vhost-user-test-device.c | 2 +- hw/virtio/vhost-user-vsock-pci.c | 2 +- hw/virtio/vhost-user-vsock.c | 2 +- hw/virtio/vhost-vsock-common.c | 2 +- hw/virtio/vhost-vsock-pci.c | 2 +- hw/virtio/vhost-vsock.c | 2 +- hw/virtio/virtio-9p-pci.c | 2 +- hw/virtio/virtio-balloon-pci.c | 2 +- hw/virtio/virtio-balloon.c | 2 +- hw/virtio/virtio-blk-pci.c | 2 +- hw/virtio/virtio-crypto-pci.c | 2 +- hw/virtio/virtio-crypto.c | 2 +- hw/virtio/virtio-input-pci.c | 2 +- hw/virtio/virtio-iommu-pci.c | 2 +- hw/virtio/virtio-iommu.c | 2 +- hw/virtio/virtio-mem.c | 2 +- hw/virtio/virtio-mmio.c | 2 +- hw/virtio/virtio-net-pci.c | 2 +- hw/virtio/virtio-nsm-pci.c | 2 +- hw/virtio/virtio-pci.c | 2 +- hw/virtio/virtio-pmem.c | 2 +- hw/virtio/virtio-rng-pci.c | 2 +- hw/virtio/virtio-rng.c | 2 +- hw/virtio/virtio-scsi-pci.c | 2 +- hw/virtio/virtio-serial-pci.c | 2 +- hw/virtio/virtio.c | 2 +- hw/vmapple/vmapple.c | 2 +- hw/watchdog/cmsdk-apb-watchdog.c | 2 +- hw/watchdog/sbsa_gwdt.c | 2 +- hw/watchdog/wdt_aspeed.c | 2 +- hw/watchdog/wdt_imx2.c | 2 +- hw/xen/xen-bus.c | 2 +- hw/xen/xen-legacy-backend.c | 2 +- hw/xen/xen_pt.c | 2 +- hw/xtensa/xtfpga.c | 2 +- include/hw/char/cadence_uart.h | 2 +- include/hw/char/sifive_uart.h | 2 +- include/hw/{ => core}/qdev-properties.h | 0 include/hw/ide/ide-dev.h | 2 +- include/hw/misc/unimp.h | 2 +- include/hw/net/ne2000-isa.h | 2 +- include/hw/nubus/nubus.h | 2 +- include/hw/qdev-properties-system.h | 2 +- include/hw/timer/i8254.h | 2 +- migration/options.h | 2 +- net/net.c | 2 +- rust/hw/core/wrapper.h | 2 +- system/physmem.c | 2 +- system/qdev-monitor.c | 2 +- system/vl.c | 2 +- target/arm/cpu.c | 2 +- target/arm/cpu64.c | 2 +- target/arm/tcg/cpu64.c | 2 +- target/avr/cpu.c | 2 +- target/hexagon/cpu.c | 2 +- target/i386/cpu-apic.c | 2 +- target/i386/cpu.c | 2 +- target/loongarch/cpu.c | 2 +- target/microblaze/cpu.c | 2 +- target/mips/cpu.c | 2 +- target/ppc/cpu_init.c | 2 +- target/riscv/cpu.c | 2 +- target/riscv/cpu.h | 2 +- target/s390x/cpu.c | 2 +- target/sparc/cpu.c | 2 +- tests/unit/test-qdev-global-props.c | 2 +- 686 files changed, 685 insertions(+), 685 deletions(-) rename include/hw/{ => core}/qdev-properties.h (100%) diff --git a/backends/spdm-socket.c b/backends/spdm-socket.c index 6d8f02d3b9..07aea37516 100644 --- a/backends/spdm-socket.c +++ b/backends/spdm-socket.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "system/spdm-socket.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/core/qdev-prop-internal.h" diff --git a/backends/tpm/tpm_util.c b/backends/tpm/tpm_util.c index f2d1739e33..a64e156f45 100644 --- a/backends/tpm/tpm_util.c +++ b/backends/tpm/tpm_util.c @@ -26,7 +26,7 @@ #include "qapi/visitor.h" #include "tpm_int.h" #include "system/memory.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/tpm_backend.h" #include "system/tpm_util.h" #include "trace.h" diff --git a/docs/devel/migration/compatibility.rst b/docs/devel/migration/compatibility.rst index ecb887e318..ce3a1100de 100644 --- a/docs/devel/migration/compatibility.rst +++ b/docs/devel/migration/compatibility.rst @@ -111,7 +111,7 @@ that array to see what value it needs to get for that feature. And what are we going to put in that array, the value of a property. To create a property for a device, we need to use one of the -DEFINE_PROP_*() macros. See include/hw/qdev-properties.h to find the +DEFINE_PROP_*() macros. See include/hw/core/qdev-properties.h to find the macros that exist. With it, we set the default value for that property, and that is what it is going to get in the latest released version. But if we want a different value for a previous version, we diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c index 81b91e47c6..9f70e2338c 100644 --- a/hw/9pfs/virtio-9p-device.c +++ b/hw/9pfs/virtio-9p-device.c @@ -22,7 +22,7 @@ #include "virtio-9p.h" #include "fsdev/qemu-fsdev.h" #include "coth.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-access.h" #include "qemu/iov.h" #include "qemu/module.h" diff --git a/hw/acpi/erst.c b/hw/acpi/erst.c index 10bbe37c17..b6c1942e30 100644 --- a/hw/acpi/erst.c +++ b/hw/acpi/erst.c @@ -18,7 +18,7 @@ #include "qom/object_interfaces.h" #include "qemu/error-report.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/acpi/acpi.h" #include "hw/acpi/acpi-defs.h" #include "hw/acpi/aml-build.h" diff --git a/hw/acpi/generic_event_device.c b/hw/acpi/generic_event_device.c index 675ec43d09..6741f46723 100644 --- a/hw/acpi/generic_event_device.c +++ b/hw/acpi/generic_event_device.c @@ -19,7 +19,7 @@ #include "hw/mem/pc-dimm.h" #include "hw/mem/nvdimm.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/error-report.h" #include "system/runstate.h" diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c index 1e3c634541..19d4d4be93 100644 --- a/hw/acpi/piix4.c +++ b/hw/acpi/piix4.c @@ -24,7 +24,7 @@ #include "hw/isa/apm.h" #include "hw/i2c/pm_smbus.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/acpi/acpi.h" #include "hw/acpi/pcihp.h" #include "hw/acpi/piix4.h" diff --git a/hw/acpi/vmclock.c b/hw/acpi/vmclock.c index c582c0c1f8..55c9f95066 100644 --- a/hw/acpi/vmclock.c +++ b/hw/acpi/vmclock.c @@ -17,7 +17,7 @@ #include "hw/acpi/aml-build.h" #include "hw/acpi/vmclock.h" #include "hw/nvram/fw_cfg.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "system/reset.h" diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c index 33c35c85dd..fcf9a94daf 100644 --- a/hw/acpi/vmgenid.c +++ b/hw/acpi/vmgenid.c @@ -17,7 +17,7 @@ #include "hw/acpi/aml-build.h" #include "hw/acpi/vmgenid.h" #include "hw/nvram/fw_cfg.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "system/reset.h" diff --git a/hw/adc/aspeed_adc.c b/hw/adc/aspeed_adc.c index 564979f24d..fd3af30829 100644 --- a/hw/adc/aspeed_adc.c +++ b/hw/adc/aspeed_adc.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/adc/aspeed_adc.h" #include "trace.h" diff --git a/hw/adc/npcm7xx_adc.c b/hw/adc/npcm7xx_adc.c index 4494d5558f..44079791cb 100644 --- a/hw/adc/npcm7xx_adc.c +++ b/hw/adc/npcm7xx_adc.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/adc/npcm7xx_adc.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/registerfields.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index d9c7bcbcd7..844d620286 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -13,7 +13,7 @@ #include "hw/sysbus.h" #include "hw/arm/boot.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "elf.h" #include "system/reset.h" diff --git a/hw/arm/aspeed_coprocessor_common.c b/hw/arm/aspeed_coprocessor_common.c index f037d5b573..a0a4c73d08 100644 --- a/hw/arm/aspeed_coprocessor_common.c +++ b/hw/arm/aspeed_coprocessor_common.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "system/memory.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/aspeed_coprocessor.h" static void aspeed_coprocessor_realize(DeviceState *dev, Error **errp) diff --git a/hw/arm/aspeed_soc_common.c b/hw/arm/aspeed_soc_common.c index 84e6458e80..fd08793575 100644 --- a/hw/arm/aspeed_soc_common.c +++ b/hw/arm/aspeed_soc_common.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/unimp.h" #include "hw/arm/aspeed_soc.h" #include "hw/char/serial-mm.h" diff --git a/hw/arm/b-l475e-iot01a.c b/hw/arm/b-l475e-iot01a.c index a724b5fdb2..ee789c8df9 100644 --- a/hw/arm/b-l475e-iot01a.c +++ b/hw/arm/b-l475e-iot01a.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/error-report.h" #include "hw/arm/boot.h" #include "hw/core/split-irq.h" diff --git a/hw/arm/bananapi_m2u.c b/hw/arm/bananapi_m2u.c index fd347e18d2..9b468cd8ac 100644 --- a/hw/arm/bananapi_m2u.c +++ b/hw/arm/bananapi_m2u.c @@ -24,7 +24,7 @@ #include "qemu/error-report.h" #include "hw/core/boards.h" #include "hw/i2c/i2c.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/allwinner-r40.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/cubieboard.c b/hw/arm/cubieboard.c index 9fe282342a..a643ae4e27 100644 --- a/hw/arm/cubieboard.c +++ b/hw/arm/cubieboard.c @@ -19,7 +19,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/allwinner-a10.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/digic.c b/hw/arm/digic.c index d831bc974d..5dfa5839a6 100644 --- a/hw/arm/digic.c +++ b/hw/arm/digic.c @@ -24,7 +24,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/arm/digic.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/system.h" #define DIGIC4_TIMER_BASE(n) (0xc0210000 + (n) * 0x100) diff --git a/hw/arm/exynos4210.c b/hw/arm/exynos4210.c index 992edd3ba8..5d68579cd6 100644 --- a/hw/arm/exynos4210.c +++ b/hw/arm/exynos4210.c @@ -32,7 +32,7 @@ #include "hw/sysbus.h" #include "hw/arm/boot.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/exynos4210.h" #include "hw/sd/sdhci.h" #include "hw/usb/hcd-ehci.h" diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index f07dd452fc..e8c171f40a 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -32,7 +32,7 @@ #include "system/address-spaces.h" #include "hw/arm/exynos4210.h" #include "hw/net/lan9118.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "hw/core/irq.h" #include "target/arm/cpu-qom.h" diff --git a/hw/arm/fsl-imx25.c b/hw/arm/fsl-imx25.c index 7aad6359ea..dd670827ff 100644 --- a/hw/arm/fsl-imx25.c +++ b/hw/arm/fsl-imx25.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "hw/arm/fsl-imx25.h" #include "system/system.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "chardev/char.h" #include "target/arm/cpu-qom.h" diff --git a/hw/arm/fsl-imx31.c b/hw/arm/fsl-imx31.c index e9f70ad94b..190f863355 100644 --- a/hw/arm/fsl-imx31.c +++ b/hw/arm/fsl-imx31.c @@ -24,7 +24,7 @@ #include "hw/arm/fsl-imx31.h" #include "system/system.h" #include "system/address-spaces.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "chardev/char.h" #include "target/arm/cpu-qom.h" diff --git a/hw/arm/fsl-imx6.c b/hw/arm/fsl-imx6.c index 50b34139fa..f3aa1d8150 100644 --- a/hw/arm/fsl-imx6.c +++ b/hw/arm/fsl-imx6.c @@ -25,7 +25,7 @@ #include "hw/misc/unimp.h" #include "hw/usb/imx-usb-phy.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/system.h" #include "chardev/char.h" #include "qemu/error-report.h" diff --git a/hw/arm/imx25_pdk.c b/hw/arm/imx25_pdk.c index 21860ed14d..7ebd6c8eb9 100644 --- a/hw/arm/imx25_pdk.c +++ b/hw/arm/imx25_pdk.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/fsl-imx25.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/imx8mp-evk.c b/hw/arm/imx8mp-evk.c index ed8c52e1bd..0af5aad583 100644 --- a/hw/arm/imx8mp-evk.c +++ b/hw/arm/imx8mp-evk.c @@ -12,7 +12,7 @@ #include "hw/arm/fsl-imx8mp.h" #include "hw/arm/machines-qom.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/kvm.h" #include "system/qtest.h" #include "qemu/error-report.h" diff --git a/hw/arm/max78000fthr.c b/hw/arm/max78000fthr.c index 4b6e76e46b..ed50bb9197 100644 --- a/hw/arm/max78000fthr.c +++ b/hw/arm/max78000fthr.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/max78000_soc.h" diff --git a/hw/arm/mcimx6ul-evk.c b/hw/arm/mcimx6ul-evk.c index 5fe6526ba0..6e9d92b1f1 100644 --- a/hw/arm/mcimx6ul-evk.c +++ b/hw/arm/mcimx6ul-evk.c @@ -16,7 +16,7 @@ #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/error-report.h" #include "system/qtest.h" diff --git a/hw/arm/mcimx7d-sabre.c b/hw/arm/mcimx7d-sabre.c index b1b56b920d..a0ac647c3d 100644 --- a/hw/arm/mcimx7d-sabre.c +++ b/hw/arm/mcimx7d-sabre.c @@ -18,7 +18,7 @@ #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/error-report.h" #include "system/qtest.h" diff --git a/hw/arm/microbit.c b/hw/arm/microbit.c index cd035fffc7..9d5c489846 100644 --- a/hw/arm/microbit.c +++ b/hw/arm/microbit.c @@ -18,7 +18,7 @@ #include "hw/arm/nrf51_soc.h" #include "hw/i2c/microbit_i2c.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" struct MicrobitMachineState { diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c index 7d2efc703b..ac9366d844 100644 --- a/hw/arm/mps2.c +++ b/hw/arm/mps2.c @@ -36,7 +36,7 @@ #include "hw/core/boards.h" #include "system/address-spaces.h" #include "system/system.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/unimp.h" #include "hw/char/cmsdk-apb-uart.h" #include "hw/timer/cmsdk-apb-timer.h" diff --git a/hw/arm/mps3r.c b/hw/arm/mps3r.c index 77a0c0b7af..2d64a198c4 100644 --- a/hw/arm/mps3r.c +++ b/hw/arm/mps3r.c @@ -34,7 +34,7 @@ #include "hw/core/boards.h" #include "hw/core/or-irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/boot.h" #include "hw/arm/bsa.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/msf2-som.c b/hw/arm/msf2-som.c index 10382f0d3b..caf6e7e1ad 100644 --- a/hw/arm/msf2-som.c +++ b/hw/arm/msf2-som.c @@ -30,7 +30,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "hw/core/qdev-clock.h" diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index a4ddc0d08f..39e8f69cae 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -22,7 +22,7 @@ #include "hw/char/serial-mm.h" #include "qemu/timer.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/block/flash.h" #include "ui/console.h" #include "hw/i2c/i2c.h" diff --git a/hw/arm/netduino2.c b/hw/arm/netduino2.c index c928105936..c32deaf43b 100644 --- a/hw/arm/netduino2.c +++ b/hw/arm/netduino2.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/stm32f205_soc.h" diff --git a/hw/arm/netduinoplus2.c b/hw/arm/netduinoplus2.c index d64d2aefe4..a90dcbe8c2 100644 --- a/hw/arm/netduinoplus2.c +++ b/hw/arm/netduinoplus2.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/stm32f405_soc.h" diff --git a/hw/arm/npcm7xx.c b/hw/arm/npcm7xx.c index 6905e1d8a7..c2bbcd89db 100644 --- a/hw/arm/npcm7xx.c +++ b/hw/arm/npcm7xx.c @@ -22,7 +22,7 @@ #include "hw/core/loader.h" #include "hw/misc/unimp.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "exec/tswap.h" #include "qemu/units.h" diff --git a/hw/arm/npcm7xx_boards.c b/hw/arm/npcm7xx_boards.c index 729306b33c..57a8d3186e 100644 --- a/hw/arm/npcm7xx_boards.c +++ b/hw/arm/npcm7xx_boards.c @@ -24,7 +24,7 @@ #include "hw/core/loader.h" #include "hw/nvram/eeprom_at24c.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/datadir.h" #include "qemu/units.h" diff --git a/hw/arm/npcm8xx.c b/hw/arm/npcm8xx.c index 71e47dac2e..9ce6ea52d9 100644 --- a/hw/arm/npcm8xx.c +++ b/hw/arm/npcm8xx.c @@ -25,7 +25,7 @@ #include "hw/core/loader.h" #include "hw/misc/unimp.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/units.h" #include "system/system.h" diff --git a/hw/arm/npcm8xx_boards.c b/hw/arm/npcm8xx_boards.c index 7252edf3dc..042a928857 100644 --- a/hw/arm/npcm8xx_boards.c +++ b/hw/arm/npcm8xx_boards.c @@ -23,7 +23,7 @@ #include "hw/core/cpu.h" #include "hw/core/loader.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/datadir.h" diff --git a/hw/arm/olimex-stm32-h405.c b/hw/arm/olimex-stm32-h405.c index 1a08d74215..e801e4308e 100644 --- a/hw/arm/olimex-stm32-h405.c +++ b/hw/arm/olimex-stm32-h405.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/stm32f405_soc.h" diff --git a/hw/arm/omap1.c b/hw/arm/omap1.c index 994e5a919e..fcba6eb52d 100644 --- a/hw/arm/omap1.c +++ b/hw/arm/omap1.c @@ -26,7 +26,7 @@ #include "system/address-spaces.h" #include "hw/hw.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/boot.h" #include "hw/arm/omap.h" #include "hw/sd/sd.h" diff --git a/hw/arm/orangepi.c b/hw/arm/orangepi.c index c0dd32f13c..d84443bb7b 100644 --- a/hw/arm/orangepi.c +++ b/hw/arm/orangepi.c @@ -23,7 +23,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/allwinner-h3.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/sabrelite.c b/hw/arm/sabrelite.c index 99cbd5e2fe..db5669c5c2 100644 --- a/hw/arm/sabrelite.c +++ b/hw/arm/sabrelite.c @@ -16,7 +16,7 @@ #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/error-report.h" #include "system/qtest.h" diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c index 5f0fb16a54..d86b470686 100644 --- a/hw/arm/sbsa-ref.c +++ b/hw/arm/sbsa-ref.c @@ -44,7 +44,7 @@ #include "hw/intc/arm_gicv3_its_common.h" #include "hw/core/loader.h" #include "hw/pci-host/gpex.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" #include "hw/usb/xhci.h" #include "hw/char/pl011.h" diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c index 62a7612184..e1b77cc55f 100644 --- a/hw/arm/smmu-common.c +++ b/hw/arm/smmu-common.c @@ -21,7 +21,7 @@ #include "exec/target_page.h" #include "hw/core/cpu.h" #include "hw/pci/pci_bridge.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/jhash.h" #include "qemu/module.h" diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index e391842dc3..e12a64a20f 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -21,7 +21,7 @@ #include "hw/core/irq.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev.h" #include "hw/pci/pci.h" #include "cpu.h" diff --git a/hw/arm/stm32f100_soc.c b/hw/arm/stm32f100_soc.c index 8d61be72c4..2358368dba 100644 --- a/hw/arm/stm32f100_soc.c +++ b/hw/arm/stm32f100_soc.c @@ -29,7 +29,7 @@ #include "hw/arm/boot.h" #include "system/address-spaces.h" #include "hw/arm/stm32f100_soc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #include "system/system.h" diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c index 406f614f1d..a03c6b4002 100644 --- a/hw/arm/stm32f205_soc.c +++ b/hw/arm/stm32f205_soc.c @@ -28,7 +28,7 @@ #include "hw/arm/boot.h" #include "system/address-spaces.h" #include "hw/arm/stm32f205_soc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "system/system.h" diff --git a/hw/arm/stm32vldiscovery.c b/hw/arm/stm32vldiscovery.c index e7e1b8200e..8f93c0036a 100644 --- a/hw/arm/stm32vldiscovery.c +++ b/hw/arm/stm32vldiscovery.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "qemu/error-report.h" #include "hw/arm/stm32f100_soc.h" diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index 95dda07852..3ee73ee459 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -29,7 +29,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 0d2652e6db..d8773cb541 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -63,7 +63,7 @@ #include "hw/virtio/virtio-pci.h" #include "hw/core/sysbus-fdt.h" #include "hw/core/platform-bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/fdt.h" #include "hw/intc/arm_gic.h" #include "hw/intc/arm_gicv3_common.h" diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c index 60daa62ea3..0694f0adf9 100644 --- a/hw/audio/ac97.c +++ b/hw/audio/ac97.c @@ -21,7 +21,7 @@ #include "hw/audio/model.h" #include "qemu/audio.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "system/dma.h" diff --git a/hw/audio/adlib.c b/hw/audio/adlib.c index 19d3a5f128..8b9fe53e17 100644 --- a/hw/audio/adlib.c +++ b/hw/audio/adlib.c @@ -28,7 +28,7 @@ #include "hw/audio/model.h" #include "qemu/audio.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/error-report.h" #include "qom/object.h" diff --git a/hw/audio/asc.c b/hw/audio/asc.c index b6f4204500..77a5cc1092 100644 --- a/hw/audio/asc.c +++ b/hw/audio/asc.c @@ -17,7 +17,7 @@ #include "hw/core/irq.h" #include "qemu/audio.h" #include "hw/audio/asc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/audio/cs4231a.c b/hw/audio/cs4231a.c index 8368172f40..7489cf42b7 100644 --- a/hw/audio/cs4231a.c +++ b/hw/audio/cs4231a.c @@ -27,7 +27,7 @@ #include "qemu/audio.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "qemu/error-report.h" diff --git a/hw/audio/gus.c b/hw/audio/gus.c index 6c41b25486..69ddc41919 100644 --- a/hw/audio/gus.c +++ b/hw/audio/gus.c @@ -29,7 +29,7 @@ #include "qemu/audio.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "gusemu.h" #include "qemu/error-report.h" diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c index e90c9de046..6445d22759 100644 --- a/hw/audio/hda-codec.c +++ b/hw/audio/hda-codec.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "intel-hda.h" #include "migration/vmstate.h" #include "qemu/host-utils.h" diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c index 758e130c93..d7c2c3c2fd 100644 --- a/hw/audio/intel-hda.c +++ b/hw/audio/intel-hda.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci/msi.h" #include "monitor/qdev.h" #include "qemu/timer.h" diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c index ba9bd6befd..39f4b4514d 100644 --- a/hw/audio/marvell_88w8618.c +++ b/hw/audio/marvell_88w8618.c @@ -14,7 +14,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/audio/wm8750.h" #include "qemu/audio.h" #include "qapi/error.h" diff --git a/hw/audio/model.c b/hw/audio/model.c index ff4e4b2452..86a5419b09 100644 --- a/hw/audio/model.c +++ b/hw/audio/model.c @@ -26,7 +26,7 @@ #include "monitor/qdev.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/audio/model.h" struct audio_model { diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c index 7bb2c81afc..117b6b0ae6 100644 --- a/hw/audio/pl041.c +++ b/hw/audio/pl041.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/audio/sb16.c b/hw/audio/sb16.c index 6ca31a0e64..3c5beb9dfa 100644 --- a/hw/audio/sb16.c +++ b/hw/audio/sb16.c @@ -27,7 +27,7 @@ #include "qemu/audio.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/timer.h" #include "qemu/error-report.h" diff --git a/hw/avr/atmega.c b/hw/avr/atmega.c index 95b6da5e34..b185295d55 100644 --- a/hw/avr/atmega.c +++ b/hw/avr/atmega.c @@ -16,7 +16,7 @@ #include "system/memory.h" #include "system/address-spaces.h" #include "system/system.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qom/object.h" #include "hw/misc/unimp.h" diff --git a/hw/block/fdc-isa.c b/hw/block/fdc-isa.c index 0034c3594a..ebb3d2f7cd 100644 --- a/hw/block/fdc-isa.c +++ b/hw/block/fdc-isa.c @@ -35,7 +35,7 @@ #include "hw/acpi/acpi_aml_interface.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "hw/block/block.h" diff --git a/hw/block/fdc.c b/hw/block/fdc.c index e0e53ba038..1747f6506f 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -35,7 +35,7 @@ #include "qemu/memalign.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "hw/block/block.h" diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index a5336d92ff..648e6bdc00 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -26,7 +26,7 @@ #include "system/block-backend.h" #include "hw/block/block.h" #include "hw/block/flash.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/ssi/ssi.h" #include "migration/vmstate.h" diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c index 168101d8df..f93b812c02 100644 --- a/hw/block/pflash_cfi01.c +++ b/hw/block/pflash_cfi01.c @@ -39,7 +39,7 @@ #include "qemu/osdep.h" #include "hw/block/block.h" #include "hw/block/flash.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "system/block-backend.h" #include "qapi/error.h" diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c index 3244b699b9..6a74bcb7a1 100644 --- a/hw/block/pflash_cfi02.c +++ b/hw/block/pflash_cfi02.c @@ -35,7 +35,7 @@ #include "qemu/osdep.h" #include "hw/block/block.h" #include "hw/block/flash.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/block/swim.c b/hw/block/swim.c index ad047362f8..53ba7fa59c 100644 --- a/hw/block/swim.c +++ b/hw/block/swim.c @@ -18,7 +18,7 @@ #include "migration/vmstate.h" #include "hw/block/block.h" #include "hw/block/swim.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index b399eab51a..62295f187c 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -21,7 +21,7 @@ #include "qemu/error-report.h" #include "qemu/cutils.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/virtio-blk-common.h" #include "hw/virtio/vhost.h" diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c index 64efce4846..ddf0e9ee53 100644 --- a/hw/block/virtio-blk.c +++ b/hw/block/virtio-blk.c @@ -21,7 +21,7 @@ #include "block/block_int.h" #include "trace.h" #include "hw/block/block.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/blockdev.h" #include "system/block-ram-registrar.h" #include "system/system.h" diff --git a/hw/block/xen-block.c b/hw/block/xen-block.c index 74de897c79..5dc4ba9d07 100644 --- a/hw/block/xen-block.c +++ b/hw/block/xen-block.c @@ -20,7 +20,7 @@ #include "qobject/qstring.h" #include "qom/object_interfaces.h" #include "hw/block/xen_blkif.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/xen/xen-block.h" #include "hw/xen/xen-backend.h" #include "system/blockdev.h" diff --git a/hw/char/avr_usart.c b/hw/char/avr_usart.c index e98ad53e44..c3515b6f7d 100644 --- a/hw/char/avr_usart.c +++ b/hw/char/avr_usart.c @@ -23,7 +23,7 @@ #include "hw/char/avr_usart.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" static int avr_usart_can_receive(void *opaque) diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c index 03428efeea..47e24c5bba 100644 --- a/hw/char/bcm2835_aux.c +++ b/hw/char/bcm2835_aux.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "hw/char/bcm2835_aux.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c index bb323adda5..36607d0c1c 100644 --- a/hw/char/debugcon.c +++ b/hw/char/debugcon.c @@ -29,7 +29,7 @@ #include "qemu/module.h" #include "chardev/char-fe.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qom/object.h" diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c index 0f6af51bb7..04dec0df8a 100644 --- a/hw/char/digic-uart.c +++ b/hw/char/digic-uart.c @@ -34,7 +34,7 @@ #include "qemu/module.h" #include "hw/char/digic-uart.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" enum { diff --git a/hw/char/diva-gsp.c b/hw/char/diva-gsp.c index 835594e5cb..1dafc1e80c 100644 --- a/hw/char/diva-gsp.c +++ b/hw/char/diva-gsp.c @@ -20,7 +20,7 @@ #include "hw/char/serial.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/char/escc.c b/hw/char/escc.c index 27269dca64..496bbc56de 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c index 8ba310fd7a..387156d5e3 100644 --- a/hw/char/exynos4210_uart.c +++ b/hw/char/exynos4210_uart.c @@ -31,7 +31,7 @@ #include "hw/arm/exynos4210.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "trace.h" diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c index 15925eb2e6..9731e664c1 100644 --- a/hw/char/grlib_apbuart.c +++ b/hw/char/grlib_apbuart.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/char/grlib_uart.h" #include "hw/sysbus.h" diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c index 23abeacb1b..ac4a43af84 100644 --- a/hw/char/ibex_uart.c +++ b/hw/char/ibex_uart.c @@ -29,7 +29,7 @@ #include "hw/char/ibex_uart.h" #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/registerfields.h" #include "migration/vmstate.h" diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c index 9f13236f29..78d2c25f86 100644 --- a/hw/char/imx_serial.c +++ b/hw/char/imx_serial.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "hw/char/imx_serial.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c index 6e38916150..19f312b9d3 100644 --- a/hw/char/ipoctal232.c +++ b/hw/char/ipoctal232.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/ipack/ipack.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "qemu/bitops.h" diff --git a/hw/char/max78000_uart.c b/hw/char/max78000_uart.c index 5fc933123e..59ec24a15e 100644 --- a/hw/char/max78000_uart.c +++ b/hw/char/max78000_uart.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/char/max78000_uart.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c index d9d551924b..391674dbcc 100644 --- a/hw/char/mcf_uart.c +++ b/hw/char/mcf_uart.c @@ -12,7 +12,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "hw/m68k/mcf.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/hw/char/mchp_pfsoc_mmuart.c b/hw/char/mchp_pfsoc_mmuart.c index 6149f9d204..6673721454 100644 --- a/hw/char/mchp_pfsoc_mmuart.c +++ b/hw/char/mchp_pfsoc_mmuart.c @@ -25,7 +25,7 @@ #include "qapi/error.h" #include "migration/vmstate.h" #include "hw/char/mchp_pfsoc_mmuart.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #define REGS_OFFSET 0x20 diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c index 39d144538d..6087cabeb3 100644 --- a/hw/char/nrf51_uart.c +++ b/hw/char/nrf51_uart.c @@ -17,7 +17,7 @@ #include "qemu/module.h" #include "hw/char/nrf51_uart.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/char/parallel-isa.c b/hw/char/parallel-isa.c index b6dfb6cc31..92e94138f4 100644 --- a/hw/char/parallel-isa.c +++ b/hw/char/parallel-isa.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "system/system.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/char/parallel-isa.h" #include "hw/char/parallel.h" #include "qapi/error.h" diff --git a/hw/char/parallel.c b/hw/char/parallel.c index 8732e4e9f9..6708d7658b 100644 --- a/hw/char/parallel.c +++ b/hw/char/parallel.c @@ -28,7 +28,7 @@ #include "qemu/module.h" #include "chardev/char-parallel.h" #include "hw/acpi/acpi_aml_interface.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "hw/char/parallel-isa.h" diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 030d6a2e8b..f37ffd349f 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -24,7 +24,7 @@ #include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "chardev/char-fe.h" diff --git a/hw/char/renesas_sci.c b/hw/char/renesas_sci.c index b32e41d5b8..3c1cc43954 100644 --- a/hw/char/renesas_sci.c +++ b/hw/char/renesas_sci.c @@ -25,7 +25,7 @@ #include "qemu/log.h" #include "hw/core/irq.h" #include "hw/registerfields.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/char/renesas_sci.h" #include "migration/vmstate.h" diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c index c51308f9c5..ed08cf42da 100644 --- a/hw/char/sclpconsole-lm.c +++ b/hw/char/sclpconsole-lm.c @@ -22,7 +22,7 @@ #include "hw/s390x/sclp.h" #include "migration/vmstate.h" #include "hw/s390x/event-facility.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/s390x/ebcdic.h" #include "qom/object.h" diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c index 2abf861dbc..ab444fe1fa 100644 --- a/hw/char/sclpconsole.c +++ b/hw/char/sclpconsole.c @@ -19,7 +19,7 @@ #include "hw/s390x/sclp.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/s390x/event-facility.h" #include "chardev/char-fe.h" diff --git a/hw/char/serial-isa.c b/hw/char/serial-isa.c index 0ea59a3d5c..a4be0492c5 100644 --- a/hw/char/serial-isa.c +++ b/hw/char/serial-isa.c @@ -31,7 +31,7 @@ #include "hw/char/serial.h" #include "hw/char/serial-isa.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/char/serial-mm.c b/hw/char/serial-mm.c index 13aba780ec..6e963e581f 100644 --- a/hw/char/serial-mm.c +++ b/hw/char/serial-mm.c @@ -28,7 +28,7 @@ #include "exec/cpu-common.h" #include "migration/vmstate.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" static uint64_t serial_mm_read(void *opaque, hwaddr addr, unsigned size) { diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c index 3460856998..f0af12c14f 100644 --- a/hw/char/serial-pci-multi.c +++ b/hw/char/serial-pci-multi.c @@ -32,7 +32,7 @@ #include "hw/char/serial.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/char/serial-pci.c b/hw/char/serial-pci.c index d05d089899..d8cacc9085 100644 --- a/hw/char/serial-pci.c +++ b/hw/char/serial-pci.c @@ -31,7 +31,7 @@ #include "hw/char/serial.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/char/serial.c b/hw/char/serial.c index 11685b397b..cbff68a711 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -35,7 +35,7 @@ #include "system/runstate.h" #include "qemu/error-report.h" #include "trace.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #define UART_LCR_DLAB 0x80 /* Divisor latch access bit */ diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c index 008a2ea2f0..9cd79fce33 100644 --- a/hw/char/sh_serial.c +++ b/hw/char/sh_serial.c @@ -29,7 +29,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sh4/sh.h" #include "chardev/char-fe.h" diff --git a/hw/char/shakti_uart.c b/hw/char/shakti_uart.c index 6e216edb0f..51e45351d9 100644 --- a/hw/char/shakti_uart.c +++ b/hw/char/shakti_uart.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/char/shakti_uart.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/log.h" diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c index 766b2bfcac..17a17c47c3 100644 --- a/hw/char/spapr_vty.c +++ b/hw/char/spapr_vty.c @@ -6,7 +6,7 @@ #include "chardev/char-fe.h" #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_vio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qom/object.h" diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c index 49bbda03b8..2c19ec69cc 100644 --- a/hw/char/stm32f2xx_usart.c +++ b/hw/char/stm32f2xx_usart.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/char/stm32f2xx_usart.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/char/stm32l4x5_usart.c b/hw/char/stm32l4x5_usart.c index 4533cbc93b..8b208ba9b6 100644 --- a/hw/char/stm32l4x5_usart.c +++ b/hw/char/stm32l4x5_usart.c @@ -26,7 +26,7 @@ #include "hw/core/clock.h" #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/registerfields.h" #include "trace.h" diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c index c993f67b42..821a75c37a 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -15,7 +15,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "chardev/char-fe.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/s390x/3270-ccw.h" #include "qom/object.h" diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 1b669c9be8..8c2a6a9d1d 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -15,7 +15,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "trace.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/virtio-serial.h" #include "qapi/error.h" diff --git a/hw/char/virtio-serial-bus.c b/hw/char/virtio-serial-bus.c index 673c50f0be..5ec5f5313b 100644 --- a/hw/char/virtio-serial-bus.c +++ b/hw/char/virtio-serial-bus.c @@ -27,7 +27,7 @@ #include "monitor/monitor.h" #include "qemu/error-report.h" #include "qemu/queue.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #include "hw/virtio/virtio-serial.h" #include "hw/virtio/virtio-access.h" diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c index a639fb0b11..a0d142582e 100644 --- a/hw/char/xen_console.c +++ b/hw/char/xen_console.c @@ -29,7 +29,7 @@ #include "chardev/char-fe.h" #include "hw/xen/xen-backend.h" #include "hw/xen/xen-bus-helper.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/xen/interface/io/console.h" #include "hw/xen/interface/io/xs_wire.h" diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c index da1ecd249c..9d81cd904c 100644 --- a/hw/char/xilinx_uartlite.c +++ b/hw/char/xilinx_uartlite.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "hw/char/xilinx_uartlite.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" #include "qemu/module.h" diff --git a/hw/core/bus.c b/hw/core/bus.c index bddfc22d38..53f392fdda 100644 --- a/hw/core/bus.c +++ b/hw/core/bus.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/ctype.h" #include "qemu/module.h" #include "qapi/error.h" diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c index fb8421184d..2e925880af 100644 --- a/hw/core/cpu-common.c +++ b/hw/core/cpu-common.c @@ -32,7 +32,7 @@ #include "exec/gdbstub.h" #include "system/tcg.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #ifdef CONFIG_PLUGIN #include "qemu/plugin.h" diff --git a/hw/core/cpu-system.c b/hw/core/cpu-system.c index 5d5a435739..48c8ddf4b1 100644 --- a/hw/core/cpu-system.c +++ b/hw/core/cpu-system.c @@ -25,7 +25,7 @@ #include "system/memory.h" #include "qemu/target-info.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/sysemu-cpu-ops.h" #include "migration/vmstate.h" #include "system/tcg.h" diff --git a/hw/core/cpu-user.c b/hw/core/cpu-user.c index 270afe5b9f..25aa25ad24 100644 --- a/hw/core/cpu-user.c +++ b/hw/core/cpu-user.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/cpu.h" #include "migration/vmstate.h" diff --git a/hw/core/generic-loader.c b/hw/core/generic-loader.c index 590c6a8131..24f3908b1c 100644 --- a/hw/core/generic-loader.c +++ b/hw/core/generic-loader.c @@ -35,7 +35,7 @@ #include "system/reset.h" #include "hw/core/boards.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" #include "hw/core/generic-loader.h" diff --git a/hw/core/guest-loader.c b/hw/core/guest-loader.c index e46897c497..38cb9f992c 100644 --- a/hw/core/guest-loader.c +++ b/hw/core/guest-loader.c @@ -28,7 +28,7 @@ #include "hw/core/cpu.h" #include "system/dma.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" #include "guest-loader.h" diff --git a/hw/core/or-irq.c b/hw/core/or-irq.c index bcc7ad1e44..3dc008ea4f 100644 --- a/hw/core/or-irq.c +++ b/hw/core/or-irq.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/or-irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/core/platform-bus.c b/hw/core/platform-bus.c index 4b6cc5f649..a2217a2dee 100644 --- a/hw/core/platform-bus.c +++ b/hw/core/platform-bus.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "hw/core/platform-bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c index 7aa5cbb510..d0a66358b5 100644 --- a/hw/core/qdev-properties-system.c +++ b/hw/core/qdev-properties-system.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 0930d64252..05489c8fbb 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qapi/qapi-types-misc.h" #include "qapi/qapi-visit-common.h" diff --git a/hw/core/qdev.c b/hw/core/qdev.c index fae9ffc759..a3b41286ea 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -33,7 +33,7 @@ #include "qemu/error-report.h" #include "qemu/option.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "hw/sysbus.h" #include "hw/core/qdev-clock.h" diff --git a/hw/core/split-irq.c b/hw/core/split-irq.c index d0aaa108eb..7491d74791 100644 --- a/hw/core/split-irq.c +++ b/hw/core/split-irq.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/core/split-irq.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/cpu/a15mpcore.c b/hw/cpu/a15mpcore.c index 1a6fb914f3..28cc4b3a4b 100644 --- a/hw/cpu/a15mpcore.c +++ b/hw/cpu/a15mpcore.c @@ -23,7 +23,7 @@ #include "qemu/module.h" #include "hw/cpu/a15mpcore.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/kvm.h" #include "kvm_arm.h" #include "target/arm/gtimer.h" diff --git a/hw/cpu/a9mpcore.c b/hw/cpu/a9mpcore.c index 9f8e0f70c4..2127f95578 100644 --- a/hw/cpu/a9mpcore.c +++ b/hw/cpu/a9mpcore.c @@ -13,7 +13,7 @@ #include "qemu/module.h" #include "hw/cpu/a9mpcore.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/cpu.h" #include "target/arm/cpu-qom.h" diff --git a/hw/cpu/arm11mpcore.c b/hw/cpu/arm11mpcore.c index 1953d12f61..f3a5174c1f 100644 --- a/hw/cpu/arm11mpcore.c +++ b/hw/cpu/arm11mpcore.c @@ -13,7 +13,7 @@ #include "hw/cpu/arm11mpcore.h" #include "hw/intc/realview_gic.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #define ARM11MPCORE_NUM_GIC_PRIORITY_BITS 4 diff --git a/hw/cpu/cluster.c b/hw/cpu/cluster.c index ef3b3d1e94..628fe33367 100644 --- a/hw/cpu/cluster.c +++ b/hw/cpu/cluster.c @@ -22,7 +22,7 @@ #include "hw/core/cpu.h" #include "hw/cpu/cluster.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" static const Property cpu_cluster_properties[] = { diff --git a/hw/cxl/switch-mailbox-cci.c b/hw/cxl/switch-mailbox-cci.c index 223f220433..5ba587b4e5 100644 --- a/hw/cxl/switch-mailbox-cci.c +++ b/hw/cxl/switch-mailbox-cci.c @@ -14,7 +14,7 @@ #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/cxl/cxl.h" #define CXL_SWCCI_MSIX_MBOX 3 diff --git a/hw/display/apple-gfx.h b/hw/display/apple-gfx.h index a8b1d1efc0..3197bd853d 100644 --- a/hw/display/apple-gfx.h +++ b/hw/display/apple-gfx.h @@ -10,7 +10,7 @@ #include "qemu/queue.h" #include "system/memory.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "ui/surface.h" #define TYPE_APPLE_GFX_MMIO "apple-gfx-mmio" diff --git a/hw/display/artist.c b/hw/display/artist.c index e6fed03786..22524d9c5f 100644 --- a/hw/display/artist.c +++ b/hw/display/artist.c @@ -17,7 +17,7 @@ #include "hw/sysbus.h" #include "hw/core/loader.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "ui/console.h" #include "trace.h" diff --git a/hw/display/ati.c b/hw/display/ati.c index f7c0006a87..e9c3ad2cd1 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -20,7 +20,7 @@ #include "ati_int.h" #include "ati_regs.h" #include "vga-access.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "vga_regs.h" #include "qemu/bswap.h" #include "qemu/log.h" diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c index f8f13b55cb..8eec0dc600 100644 --- a/hw/display/bcm2835_fb.c +++ b/hw/display/bcm2835_fb.c @@ -31,7 +31,7 @@ #include "framebuffer.h" #include "ui/pixel_ops.h" #include "hw/misc/bcm2835_mbox_defs.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/display/bochs-display.c b/hw/display/bochs-display.c index ad2821c974..5fb6b733cb 100644 --- a/hw/display/bochs-display.c +++ b/hw/display/bochs-display.c @@ -9,7 +9,7 @@ #include "qemu/module.h" #include "qemu/units.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/display/bochs-vbe.h" #include "hw/display/edid.h" diff --git a/hw/display/cg3.c b/hw/display/cg3.c index 5ec09b6324..f4067d7825 100644 --- a/hw/display/cg3.c +++ b/hw/display/cg3.c @@ -32,7 +32,7 @@ #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" #include "trace.h" diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c index ef08694626..37228ff134 100644 --- a/hw/display/cirrus_vga.c +++ b/hw/display/cirrus_vga.c @@ -40,7 +40,7 @@ #include "qapi/error.h" #include "trace.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "ui/pixel_ops.h" #include "vga_regs.h" diff --git a/hw/display/cirrus_vga_isa.c b/hw/display/cirrus_vga_isa.c index 5cacf4fc12..bad9ec7599 100644 --- a/hw/display/cirrus_vga_isa.c +++ b/hw/display/cirrus_vga_isa.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/isa/isa.h" #include "cirrus_vga_internal.h" #include "qom/object.h" diff --git a/hw/display/dm163.c b/hw/display/dm163.c index e78804693c..4feae91294 100644 --- a/hw/display/dm163.c +++ b/hw/display/dm163.c @@ -18,7 +18,7 @@ #include "qapi/error.h" #include "migration/vmstate.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/display/dm163.h" #include "ui/console.h" #include "trace.h" diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c index 8d8062f427..8e3a61ed0e 100644 --- a/hw/display/exynos4210_fimd.c +++ b/hw/display/exynos4210_fimd.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/hw.h" #include "hw/core/irq.h" #include "hw/sysbus.h" diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c index 10686cd676..8ed3e6ecc3 100644 --- a/hw/display/g364fb.c +++ b/hw/display/g364fb.c @@ -21,7 +21,7 @@ #include "qemu/units.h" #include "hw/hw.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/display/i2c-ddc.c b/hw/display/i2c-ddc.c index 2adfc1a147..1fddc5807a 100644 --- a/hw/display/i2c-ddc.c +++ b/hw/display/i2c-ddc.c @@ -20,7 +20,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/i2c/i2c.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/display/i2c-ddc.h" diff --git a/hw/display/macfb.c b/hw/display/macfb.c index 574d667173..fa3572ead3 100644 --- a/hw/display/macfb.c +++ b/hw/display/macfb.c @@ -18,7 +18,7 @@ #include "hw/nubus/nubus.h" #include "hw/display/macfb.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/display/pl110.c b/hw/display/pl110.c index e78a55184e..2537c26462 100644 --- a/hw/display/pl110.c +++ b/hw/display/pl110.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "ui/console.h" #include "framebuffer.h" diff --git a/hw/display/qxl.c b/hw/display/qxl.c index 18f482ca7f..f29b736722 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -28,7 +28,7 @@ #include "qemu/atomic.h" #include "qemu/main-loop.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/runstate.h" #include "migration/cpr.h" #include "migration/vmstate.h" diff --git a/hw/display/ramfb-standalone.c b/hw/display/ramfb-standalone.c index 130f4e01df..f1958be32a 100644 --- a/hw/display/ramfb-standalone.c +++ b/hw/display/ramfb-standalone.c @@ -3,7 +3,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/display/ramfb.h" #include "ui/console.h" #include "qom/object.h" diff --git a/hw/display/sm501.c b/hw/display/sm501.c index bc091b3c9f..6ccec03fe7 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -35,7 +35,7 @@ #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/i2c/i2c.h" #include "hw/display/i2c-ddc.h" #include "qemu/range.h" diff --git a/hw/display/tcx.c b/hw/display/tcx.c index dfe234e335..b208923523 100644 --- a/hw/display/tcx.c +++ b/hw/display/tcx.c @@ -28,7 +28,7 @@ #include "ui/console.h" #include "ui/pixel_ops.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/error-report.h" diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c index d2213b0f3e..95d85ff69a 100644 --- a/hw/display/vga-isa.c +++ b/hw/display/vga-isa.c @@ -31,7 +31,7 @@ #include "qemu/module.h" #include "qemu/timer.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "ui/console.h" #include "qom/object.h" diff --git a/hw/display/vga-mmio.c b/hw/display/vga-mmio.c index 33263856b7..4c497b70f4 100644 --- a/hw/display/vga-mmio.c +++ b/hw/display/vga-mmio.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "hw/display/vga.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "ui/console.h" #include "vga_int.h" diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c index 7a39bb9b21..d0f9de1ab3 100644 --- a/hw/display/vga-pci.c +++ b/hw/display/vga-pci.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "vga_int.h" #include "ui/pixel_ops.h" diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c index 9fc6bbcd2c..3f6fb7a803 100644 --- a/hw/display/vhost-user-gpu.c +++ b/hw/display/vhost-user-gpu.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" #include "qemu/sockets.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-gpu.h" #include "chardev/char-fe.h" #include "qapi/error.h" diff --git a/hw/display/virtio-gpu-gl.c b/hw/display/virtio-gpu-gl.c index c06a078fb3..b98ef2ef98 100644 --- a/hw/display/virtio-gpu-gl.c +++ b/hw/display/virtio-gpu-gl.c @@ -21,7 +21,7 @@ #include "hw/virtio/virtio-gpu.h" #include "hw/virtio/virtio-gpu-bswap.h" #include "hw/virtio/virtio-gpu-pixman.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include diff --git a/hw/display/virtio-gpu-pci-gl.c b/hw/display/virtio-gpu-pci-gl.c index a2819e1ca9..c8923795df 100644 --- a/hw/display/virtio-gpu-pci-gl.c +++ b/hw/display/virtio-gpu-pci-gl.c @@ -15,7 +15,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-gpu-pci.h" diff --git a/hw/display/virtio-gpu-pci-rutabaga.c b/hw/display/virtio-gpu-pci-rutabaga.c index 5fdff37f2c..4db77cb868 100644 --- a/hw/display/virtio-gpu-pci-rutabaga.c +++ b/hw/display/virtio-gpu-pci-rutabaga.c @@ -4,7 +4,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-gpu-pci.h" diff --git a/hw/display/virtio-gpu-pci.c b/hw/display/virtio-gpu-pci.c index c0d71b6254..22659ca196 100644 --- a/hw/display/virtio-gpu-pci.c +++ b/hw/display/virtio-gpu-pci.c @@ -15,7 +15,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-gpu-pci.h" diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 43e88a4daf..f23eec6862 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -26,7 +26,7 @@ #include "hw/virtio/virtio-gpu-bswap.h" #include "hw/virtio/virtio-gpu-pixman.h" #include "hw/virtio/virtio-bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "qemu/memfd.h" #include "qemu/module.h" diff --git a/hw/display/virtio-vga-gl.c b/hw/display/virtio-vga-gl.c index 984faa6b39..178e4c7172 100644 --- a/hw/display/virtio-vga-gl.c +++ b/hw/display/virtio-vga-gl.c @@ -1,6 +1,6 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-gpu.h" #include "hw/display/vga.h" #include "qapi/error.h" diff --git a/hw/display/virtio-vga-rutabaga.c b/hw/display/virtio-vga-rutabaga.c index a7bef6da24..1e07ee0b0d 100644 --- a/hw/display/virtio-vga-rutabaga.c +++ b/hw/display/virtio-vga-rutabaga.c @@ -2,7 +2,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-gpu.h" #include "hw/display/vga.h" #include "qapi/error.h" diff --git a/hw/display/virtio-vga.c b/hw/display/virtio-vga.c index 40e60f70fc..5e087169f2 100644 --- a/hw/display/virtio-vga.c +++ b/hw/display/virtio-vga.c @@ -1,6 +1,6 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-gpu.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c index 7ca5a55142..ea7a9fca04 100644 --- a/hw/display/vmware_vga.c +++ b/hw/display/vmware_vga.c @@ -30,7 +30,7 @@ #include "hw/core/loader.h" #include "trace.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qom/object.h" #include "ui/console.h" diff --git a/hw/dma/i82374.c b/hw/dma/i82374.c index e226eda6d1..c909cf4640 100644 --- a/hw/dma/i82374.c +++ b/hw/dma/i82374.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/dma/i8257.h" #include "qom/object.h" diff --git a/hw/dma/i8257.c b/hw/dma/i8257.c index 2463952ada..d909d6c8fc 100644 --- a/hw/dma/i8257.c +++ b/hw/dma/i8257.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/dma/i8257.h" #include "qapi/error.h" diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c index 28f7937164..bd61d8ed48 100644 --- a/hw/dma/pl080.c +++ b/hw/dma/pl080.c @@ -15,7 +15,7 @@ #include "hw/dma/pl080.h" #include "hw/hw.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #define PL080_CONF_E 0x1 diff --git a/hw/dma/pl330.c b/hw/dma/pl330.c index a9e6d2746f..4f00092f85 100644 --- a/hw/dma/pl330.c +++ b/hw/dma/pl330.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "qemu/cutils.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index bae77544b2..2fbc37ffd1 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -25,7 +25,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "system/dma.h" diff --git a/hw/dma/sparc32_dma.c b/hw/dma/sparc32_dma.c index 9f56faf9a5..5601d221ec 100644 --- a/hw/dma/sparc32_dma.c +++ b/hw/dma/sparc32_dma.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sparc/sparc32_dma.h" #include "hw/sparc/sun4m_iommu.h" #include "hw/sysbus.h" diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index 15da3fcbc2..7cdd76330f 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -29,7 +29,7 @@ #include "hw/hw.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/dma/xlnx-zdma.c b/hw/dma/xlnx-zdma.c index 660fc21b6d..306c56c3ef 100644 --- a/hw/dma/xlnx-zdma.c +++ b/hw/dma/xlnx-zdma.c @@ -29,7 +29,7 @@ #include "qemu/osdep.h" #include "hw/dma/xlnx-zdma.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/bitops.h" #include "qemu/log.h" diff --git a/hw/dma/xlnx_csu_dma.c b/hw/dma/xlnx_csu_dma.c index 92f445034e..650401614e 100644 --- a/hw/dma/xlnx_csu_dma.c +++ b/hw/dma/xlnx_csu_dma.c @@ -22,7 +22,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "system/dma.h" diff --git a/hw/fsi/cfam.c b/hw/fsi/cfam.c index e2145c5934..54c0b05769 100644 --- a/hw/fsi/cfam.c +++ b/hw/fsi/cfam.c @@ -14,7 +14,7 @@ #include "hw/fsi/cfam.h" #include "hw/fsi/fsi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #define ENGINE_CONFIG_NEXT BIT(31) #define ENGINE_CONFIG_TYPE_PEEK (0x02 << 4) diff --git a/hw/fsi/lbus.c b/hw/fsi/lbus.c index 8ec7f5fd78..cae29e0658 100644 --- a/hw/fsi/lbus.c +++ b/hw/fsi/lbus.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/fsi/lbus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "trace.h" diff --git a/hw/gpio/imx_gpio.c b/hw/gpio/imx_gpio.c index 842c997a2a..5abf208df4 100644 --- a/hw/gpio/imx_gpio.c +++ b/hw/gpio/imx_gpio.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/gpio/imx_gpio.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/gpio/npcm7xx_gpio.c b/hw/gpio/npcm7xx_gpio.c index 59b95d232b..ad19b9fd42 100644 --- a/hw/gpio/npcm7xx_gpio.c +++ b/hw/gpio/npcm7xx_gpio.c @@ -17,7 +17,7 @@ #include "hw/gpio/npcm7xx_gpio.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/gpio/omap_gpio.c b/hw/gpio/omap_gpio.c index 547f0a15a2..0c2a0f9aa6 100644 --- a/hw/gpio/omap_gpio.c +++ b/hw/gpio/omap_gpio.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/omap.h" #include "hw/sysbus.h" #include "qemu/error-report.h" diff --git a/hw/gpio/pca9552.c b/hw/gpio/pca9552.c index fe1d8dbffa..dd3c795e49 100644 --- a/hw/gpio/pca9552.c +++ b/hw/gpio/pca9552.c @@ -14,7 +14,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "qemu/bitops.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/gpio/pca9552.h" #include "hw/gpio/pca9552_regs.h" #include "hw/core/irq.h" diff --git a/hw/gpio/pca9554.c b/hw/gpio/pca9554.c index c6cdd27b3f..8427e01e9b 100644 --- a/hw/gpio/pca9554.c +++ b/hw/gpio/pca9554.c @@ -10,7 +10,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "qemu/bitops.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/gpio/pca9554.h" #include "hw/gpio/pca9554_regs.h" #include "hw/core/irq.h" diff --git a/hw/gpio/pl061.c b/hw/gpio/pl061.c index 09b3224712..55f51b6cf2 100644 --- a/hw/gpio/pl061.c +++ b/hw/gpio/pl061.c @@ -32,7 +32,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/gpio/sifive_gpio.c b/hw/gpio/sifive_gpio.c index 63ca721fad..b7a56935c0 100644 --- a/hw/gpio/sifive_gpio.c +++ b/hw/gpio/sifive_gpio.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/gpio/sifive_gpio.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/gpio/stm32l4x5_gpio.c b/hw/gpio/stm32l4x5_gpio.c index 5686bd53c2..92fa397fba 100644 --- a/hw/gpio/stm32l4x5_gpio.c +++ b/hw/gpio/stm32l4x5_gpio.c @@ -22,7 +22,7 @@ #include "hw/core/irq.h" #include "hw/core/clock.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/visitor.h" #include "qapi/error.h" #include "migration/vmstate.h" diff --git a/hw/hyperv/hv-balloon.c b/hw/hyperv/hv-balloon.c index deb20d7b6a..9dd759f11e 100644 --- a/hw/hyperv/hv-balloon.c +++ b/hw/hyperv/hv-balloon.c @@ -20,7 +20,7 @@ #include "hw/mem/memory-device.h" #include "hw/mem/pc-dimm.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "monitor/qdev.h" #include "qapi/error.h" #include "qapi/qapi-commands-machine.h" diff --git a/hw/hyperv/syndbg.c b/hw/hyperv/syndbg.c index 29908e886b..dc6cc84b50 100644 --- a/hw/hyperv/syndbg.c +++ b/hw/hyperv/syndbg.c @@ -13,7 +13,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/loader.h" #include "exec/target_page.h" #include "hw/hyperv/hyperv.h" diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c index 961406cdd6..639d932b09 100644 --- a/hw/hyperv/vmbus.c +++ b/hw/hyperv/vmbus.c @@ -13,7 +13,7 @@ #include "exec/target_page.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/hyperv/hyperv.h" #include "hw/hyperv/vmbus.h" diff --git a/hw/i2c/aspeed_i2c.c b/hw/i2c/aspeed_i2c.c index 3d66dd863a..e3ca77865b 100644 --- a/hw/i2c/aspeed_i2c.c +++ b/hw/i2c/aspeed_i2c.c @@ -28,7 +28,7 @@ #include "qapi/error.h" #include "hw/i2c/aspeed_i2c.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/registerfields.h" #include "trace.h" diff --git a/hw/i2c/core.c b/hw/i2c/core.c index 4b6345b588..54f6bdca88 100644 --- a/hw/i2c/core.c +++ b/hw/i2c/core.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/i2c/i2c.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/i2c/i2c_mux_pca954x.c b/hw/i2c/i2c_mux_pca954x.c index fd317f5670..7802c68452 100644 --- a/hw/i2c/i2c_mux_pca954x.c +++ b/hw/i2c/i2c_mux_pca954x.c @@ -20,7 +20,7 @@ #include "hw/i2c/i2c_mux_pca954x.h" #include "hw/i2c/smbus_slave.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/i2c/omap_i2c.c b/hw/i2c/omap_i2c.c index 6ac151d851..c768f99e38 100644 --- a/hw/i2c/omap_i2c.c +++ b/hw/i2c/omap_i2c.c @@ -22,7 +22,7 @@ #include "qemu/module.h" #include "hw/i2c/i2c.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/omap.h" #include "hw/sysbus.h" #include "qemu/error-report.h" diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c index ce3723e148..d9ac556a0a 100644 --- a/hw/i2c/smbus_eeprom.c +++ b/hw/i2c/smbus_eeprom.c @@ -28,7 +28,7 @@ #include "hw/core/boards.h" #include "hw/i2c/i2c.h" #include "hw/i2c/smbus_slave.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/i2c/smbus_eeprom.h" #include "qom/object.h" diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c index d689a06eca..789e09d6f2 100644 --- a/hw/i386/amd_iommu.c +++ b/hw/i386/amd_iommu.c @@ -31,7 +31,7 @@ #include "hw/i386/apic_internal.h" #include "trace.h" #include "hw/i386/apic-msidef.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "kvm/kvm_i386.h" #include "qemu/iova-tree.h" diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 78b142ccea..f744be9f70 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -27,7 +27,7 @@ #include "intel_iommu_internal.h" #include "hw/pci/pci.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/i386/pc.h" #include "hw/i386/apic-msidef.h" #include "hw/i386/x86-iommu.h" diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c index f56382717f..310b9a8eb5 100644 --- a/hw/i386/kvm/clock.c +++ b/hw/i386/kvm/clock.c @@ -23,7 +23,7 @@ #include "migration/vmstate.h" #include "hw/sysbus.h" #include "hw/i386/kvm/clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include diff --git a/hw/i386/kvm/ioapic.c b/hw/i386/kvm/ioapic.c index 693ee978a1..ba7888e3d1 100644 --- a/hw/i386/kvm/ioapic.c +++ b/hw/i386/kvm/ioapic.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "monitor/monitor.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/ioapic_internal.h" #include "hw/intc/kvm_irqcount.h" #include "system/kvm.h" diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 5fd2f9d1e0..18158ad15e 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -40,7 +40,7 @@ #include "hw/i386/kvm/clock.h" #include "hw/pci-host/q35.h" #include "hw/pci/pcie_port.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/i386/x86.h" #include "hw/i386/pc.h" #include "hw/i386/amd_iommu.h" diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c index 4d64aa1555..906df5e788 100644 --- a/hw/i386/pc_sysfw.c +++ b/hw/i386/pc_sysfw.c @@ -33,7 +33,7 @@ #include "hw/i386/x86.h" #include "hw/i386/pc.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/block/flash.h" #include "system/kvm.h" #include "target/i386/sev.h" diff --git a/hw/i386/sgx-epc.c b/hw/i386/sgx-epc.c index 2b3b2823b5..d3fe10028c 100644 --- a/hw/i386/sgx-epc.c +++ b/hw/i386/sgx-epc.c @@ -13,7 +13,7 @@ #include "hw/i386/pc.h" #include "hw/i386/sgx-epc.h" #include "hw/mem/memory-device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qapi/visitor.h" #include "target/i386/cpu.h" diff --git a/hw/i386/vmmouse.c b/hw/i386/vmmouse.c index 3896159b05..2ae7f3a242 100644 --- a/hw/i386/vmmouse.c +++ b/hw/i386/vmmouse.c @@ -27,7 +27,7 @@ #include "ui/console.h" #include "hw/i386/vmport.h" #include "hw/input/i8042.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "cpu.h" #include "qom/object.h" diff --git a/hw/i386/vmport.c b/hw/i386/vmport.c index 32e02e1eeb..865e0e70db 100644 --- a/hw/i386/vmport.c +++ b/hw/i386/vmport.c @@ -31,7 +31,7 @@ #include "qemu/osdep.h" #include "hw/isa/isa.h" #include "hw/i386/vmport.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "system/system.h" #include "system/hw_accel.h" diff --git a/hw/i386/x86-iommu.c b/hw/i386/x86-iommu.c index c127a44bb4..21e0d40e11 100644 --- a/hw/i386/x86-iommu.c +++ b/hw/i386/x86-iommu.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/i386/x86-iommu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/i386/pc.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/i386/xen/xen_pvdevice.c b/hw/i386/xen/xen_pvdevice.c index 87a974ae5a..fab26a06af 100644 --- a/hw/i386/xen/xen_pvdevice.c +++ b/hw/i386/xen/xen_pvdevice.c @@ -33,7 +33,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "trace.h" #include "qom/object.h" diff --git a/hw/ide/ahci-sysbus.c b/hw/ide/ahci-sysbus.c index 210818d047..c722e91be1 100644 --- a/hw/ide/ahci-sysbus.c +++ b/hw/ide/ahci-sysbus.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "system/address-spaces.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/ide/ahci-sysbus.h" diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c index 2a59516a9d..d44a90a162 100644 --- a/hw/ide/cmd646.c +++ b/hw/ide/cmd646.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "hw/isa/isa.h" diff --git a/hw/ide/isa.c b/hw/ide/isa.c index 5f418413c1..c97b7a1ff4 100644 --- a/hw/ide/isa.c +++ b/hw/ide/isa.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/ide/macio.c b/hw/ide/macio.c index 07db7dc34a..a7ed41fa26 100644 --- a/hw/ide/macio.c +++ b/hw/ide/macio.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/ppc/mac_dbdma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "hw/misc/macio/macio.h" diff --git a/hw/ide/mmio.c b/hw/ide/mmio.c index 699874db78..04b56ac5d8 100644 --- a/hw/ide/mmio.c +++ b/hw/ide/mmio.c @@ -30,7 +30,7 @@ #include "system/dma.h" #include "hw/ide/mmio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "ide-internal.h" /***********************************************************/ diff --git a/hw/input/adb.c b/hw/input/adb.c index bcb11edca3..29c09c7559 100644 --- a/hw/input/adb.c +++ b/hw/input/adb.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/input/adb.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "qemu/timer.h" diff --git a/hw/input/lasips2.c b/hw/input/lasips2.c index 70a179907c..e34e9cb5c0 100644 --- a/hw/input/lasips2.c +++ b/hw/input/lasips2.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/input/ps2.h" #include "hw/input/lasips2.h" diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c index 48b457cac7..b09c3bce93 100644 --- a/hw/input/pckbd.c +++ b/hw/input/pckbd.c @@ -33,7 +33,7 @@ #include "hw/input/ps2.h" #include "hw/core/irq.h" #include "hw/input/i8042.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/reset.h" #include "system/runstate.h" diff --git a/hw/input/stellaris_gamepad.c b/hw/input/stellaris_gamepad.c index bd80db6fac..f64f5ea9ce 100644 --- a/hw/input/stellaris_gamepad.c +++ b/hw/input/stellaris_gamepad.c @@ -11,7 +11,7 @@ #include "qapi/error.h" #include "hw/input/stellaris_gamepad.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "ui/console.h" diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c index d986c3c16e..bcbfef0b90 100644 --- a/hw/input/virtio-input-hid.c +++ b/hw/input/virtio-input-hid.c @@ -9,7 +9,7 @@ #include "qemu/module.h" #include "hw/virtio/virtio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-input.h" #include "ui/console.h" diff --git a/hw/input/virtio-input-host.c b/hw/input/virtio-input-host.c index 9f62532559..633547cc4f 100644 --- a/hw/input/virtio-input-host.c +++ b/hw/input/virtio-input-host.c @@ -10,7 +10,7 @@ #include "qemu/sockets.h" #include "hw/virtio/virtio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-input.h" #include diff --git a/hw/input/virtio-input.c b/hw/input/virtio-input.c index a3f554f211..6494cfbbe8 100644 --- a/hw/input/virtio-input.c +++ b/hw/input/virtio-input.c @@ -11,7 +11,7 @@ #include "trace.h" #include "hw/virtio/virtio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-input.h" #include "standard-headers/linux/input.h" diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c index 83e1bc2d75..afac20440f 100644 --- a/hw/intc/apic_common.c +++ b/hw/intc/apic_common.c @@ -29,7 +29,7 @@ #include "trace.h" #include "hw/core/boards.h" #include "system/kvm.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c index ed5be05645..304d89cf56 100644 --- a/hw/intc/arm_gic_common.c +++ b/hw/intc/arm_gic_common.c @@ -24,7 +24,7 @@ #include "qemu/error-report.h" #include "gic_internal.h" #include "hw/arm/linux-boot-if.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "system/kvm.h" diff --git a/hw/intc/arm_gicv2m.c b/hw/intc/arm_gicv2m.c index e823fcc97f..c39d31b187 100644 --- a/hw/intc/arm_gicv2m.c +++ b/hw/intc/arm_gicv2m.c @@ -30,7 +30,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/pci/msi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/kvm.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/intc/arm_gicv3_common.c b/hw/intc/arm_gicv3_common.c index 2d0df6da86..0a2e5a3e2f 100644 --- a/hw/intc/arm_gicv3_common.c +++ b/hw/intc/arm_gicv3_common.c @@ -27,7 +27,7 @@ #include "qemu/error-report.h" #include "hw/core/cpu.h" #include "hw/intc/arm_gicv3_common.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "gicv3_internal.h" #include "hw/arm/linux-boot-if.h" diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index 577b445405..cce3486d74 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "trace.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/arm_gicv3_its_common.h" #include "gicv3_internal.h" #include "qom/object.h" diff --git a/hw/intc/arm_gicv3_its_kvm.c b/hw/intc/arm_gicv3_its_kvm.c index 9812d50859..ae12d41eee 100644 --- a/hw/intc/arm_gicv3_its_kvm.c +++ b/hw/intc/arm_gicv3_its_kvm.c @@ -23,7 +23,7 @@ #include "qemu/module.h" #include "qemu/error-report.h" #include "hw/intc/arm_gicv3_its_common.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/runstate.h" #include "system/kvm.h" #include "kvm_arm.h" diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c index bb39a690a5..5fa210c633 100644 --- a/hw/intc/armv7m_nvic.c +++ b/hw/intc/armv7m_nvic.c @@ -17,7 +17,7 @@ #include "qemu/timer.h" #include "hw/intc/armv7m_nvic.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/tcg.h" #include "system/runstate.h" #include "target/arm/cpu.h" diff --git a/hw/intc/exynos4210_combiner.c b/hw/intc/exynos4210_combiner.c index b9e74d19c3..8bea69d91b 100644 --- a/hw/intc/exynos4210_combiner.c +++ b/hw/intc/exynos4210_combiner.c @@ -35,7 +35,7 @@ #include "hw/arm/exynos4210.h" #include "hw/hw.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" //#define DEBUG_COMBINER diff --git a/hw/intc/exynos4210_gic.c b/hw/intc/exynos4210_gic.c index 5b156f7ef5..a65c9c6d28 100644 --- a/hw/intc/exynos4210_gic.c +++ b/hw/intc/exynos4210_gic.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/exynos4210_gic.h" #include "hw/arm/exynos4210.h" #include "qom/object.h" diff --git a/hw/intc/goldfish_pic.c b/hw/intc/goldfish_pic.c index 7aaccba75a..96e7d5c225 100644 --- a/hw/intc/goldfish_pic.c +++ b/hw/intc/goldfish_pic.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/intc/grlib_irqmp.c b/hw/intc/grlib_irqmp.c index bb2ee5f801..ce7cbc98c1 100644 --- a/hw/intc/grlib_irqmp.c +++ b/hw/intc/grlib_irqmp.c @@ -30,7 +30,7 @@ #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/grlib_irqmp.h" #include "trace.h" diff --git a/hw/intc/i8259_common.c b/hw/intc/i8259_common.c index 602e44c8ea..8ceb5841b9 100644 --- a/hw/intc/i8259_common.c +++ b/hw/intc/i8259_common.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/intc/i8259.h" #include "hw/isa/i8259_internal.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/intc/ioapic.c b/hw/intc/ioapic.c index 38e4384648..98de6ca810 100644 --- a/hw/intc/ioapic.c +++ b/hw/intc/ioapic.c @@ -29,7 +29,7 @@ #include "hw/intc/ioapic.h" #include "hw/intc/ioapic_internal.h" #include "hw/pci/msi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/accel-irq.h" #include "system/kvm.h" #include "system/system.h" diff --git a/hw/intc/loongarch_dintc.c b/hw/intc/loongarch_dintc.c index 082755d28b..574e4a0d27 100644 --- a/hw/intc/loongarch_dintc.c +++ b/hw/intc/loongarch_dintc.c @@ -15,7 +15,7 @@ #include "hw/misc/unimp.h" #include "migration/vmstate.h" #include "trace.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "target/loongarch/cpu.h" #include "qemu/error-report.h" #include "system/hw_accel.h" diff --git a/hw/intc/loongarch_extioi_common.c b/hw/intc/loongarch_extioi_common.c index ba03383ed1..5cb0d396c6 100644 --- a/hw/intc/loongarch_extioi_common.c +++ b/hw/intc/loongarch_extioi_common.c @@ -7,7 +7,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/loongarch_extioi_common.h" #include "migration/vmstate.h" #include "target/loongarch/cpu.h" diff --git a/hw/intc/loongarch_ipi.c b/hw/intc/loongarch_ipi.c index 2a4557a8ba..5d8b8c96df 100644 --- a/hw/intc/loongarch_ipi.c +++ b/hw/intc/loongarch_ipi.c @@ -10,7 +10,7 @@ #include "hw/core/boards.h" #include "qapi/error.h" #include "hw/intc/loongarch_ipi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/kvm.h" #include "target/loongarch/cpu.h" diff --git a/hw/intc/loongarch_pic_common.c b/hw/intc/loongarch_pic_common.c index de170501cf..309182b2fb 100644 --- a/hw/intc/loongarch_pic_common.c +++ b/hw/intc/loongarch_pic_common.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/intc/loongarch_pic_common.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" static int loongarch_pic_pre_save(void *opaque) diff --git a/hw/intc/loongson_ipi.c b/hw/intc/loongson_ipi.c index fbc73e8b00..88d22afa6a 100644 --- a/hw/intc/loongson_ipi.c +++ b/hw/intc/loongson_ipi.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "hw/intc/loongson_ipi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "target/mips/cpu.h" diff --git a/hw/intc/loongson_liointc.c b/hw/intc/loongson_liointc.c index 4c24f330ed..053d9898f8 100644 --- a/hw/intc/loongson_liointc.c +++ b/hw/intc/loongson_liointc.c @@ -23,7 +23,7 @@ #include "qemu/module.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/loongson_liointc.h" #define NUM_IRQS 32 diff --git a/hw/intc/m68k_irqc.c b/hw/intc/m68k_irqc.c index 67cb9acb41..c652bf143f 100644 --- a/hw/intc/m68k_irqc.c +++ b/hw/intc/m68k_irqc.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "cpu.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/nmi.h" #include "hw/intc/intc.h" #include "hw/intc/m68k_irqc.h" diff --git a/hw/intc/mips_gic.c b/hw/intc/mips_gic.c index 08925fe1e4..e983f3a2b5 100644 --- a/hw/intc/mips_gic.c +++ b/hw/intc/mips_gic.c @@ -20,7 +20,7 @@ #include "kvm_mips.h" #include "hw/intc/mips_gic.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" static void mips_gic_set_vp_irq(MIPSGICState *gic, int vp, int pin) { diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c index 7b23b6d2ce..deb21f9dc1 100644 --- a/hw/intc/omap_intc.c +++ b/hw/intc/omap_intc.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/omap.h" #include "hw/sysbus.h" #include "qemu/error-report.h" diff --git a/hw/intc/ompic.c b/hw/intc/ompic.c index 5a630bd51c..05f0ef8254 100644 --- a/hw/intc/ompic.c +++ b/hw/intc/ompic.c @@ -10,7 +10,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "system/memory.h" diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c index edac46227f..4cc5068ffc 100644 --- a/hw/intc/openpic.c +++ b/hw/intc/openpic.c @@ -35,7 +35,7 @@ #include "hw/pci/pci.h" #include "hw/ppc/openpic.h" #include "hw/ppc/ppc_e500.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "hw/pci/msi.h" diff --git a/hw/intc/openpic_kvm.c b/hw/intc/openpic_kvm.c index 673ea9ca05..6558135baa 100644 --- a/hw/intc/openpic_kvm.c +++ b/hw/intc/openpic_kvm.c @@ -28,7 +28,7 @@ #include "hw/ppc/openpic.h" #include "hw/ppc/openpic_kvm.h" #include "hw/pci/msi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "system/kvm.h" #include "qemu/log.h" diff --git a/hw/intc/pnv_xive.c b/hw/intc/pnv_xive.c index c2ca40b8be..13ac2c6ccb 100644 --- a/hw/intc/pnv_xive.c +++ b/hw/intc/pnv_xive.c @@ -21,7 +21,7 @@ #include "hw/ppc/pnv_xscom.h" #include "hw/ppc/pnv_xive.h" #include "hw/ppc/xive_regs.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/ppc.h" #include "trace.h" diff --git a/hw/intc/pnv_xive2.c b/hw/intc/pnv_xive2.c index 0663baab54..ae424d01c4 100644 --- a/hw/intc/pnv_xive2.c +++ b/hw/intc/pnv_xive2.c @@ -22,7 +22,7 @@ #include "hw/ppc/xive_regs.h" #include "hw/ppc/xive2_regs.h" #include "hw/ppc/ppc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/reset.h" #include "system/qtest.h" diff --git a/hw/intc/ppc-uic.c b/hw/intc/ppc-uic.c index bfc4a4fbce..5090101f07 100644 --- a/hw/intc/ppc-uic.c +++ b/hw/intc/ppc-uic.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/intc/ppc-uic.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" enum { diff --git a/hw/intc/realview_gic.c b/hw/intc/realview_gic.c index ecaf8201fd..56ece334a5 100644 --- a/hw/intc/realview_gic.c +++ b/hw/intc/realview_gic.c @@ -12,7 +12,7 @@ #include "qemu/module.h" #include "hw/intc/realview_gic.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" static void realview_gic_set_irq(void *opaque, int irq, int level) { diff --git a/hw/intc/riscv_aclint.c b/hw/intc/riscv_aclint.c index f3e37df47d..83968ad7cc 100644 --- a/hw/intc/riscv_aclint.c +++ b/hw/intc/riscv_aclint.c @@ -29,7 +29,7 @@ #include "hw/sysbus.h" #include "target/riscv/cpu.h" #include "target/riscv/time_helper.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/riscv_aclint.h" #include "qemu/timer.h" #include "hw/core/irq.h" diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c index 580622d171..cc5f30b558 100644 --- a/hw/intc/riscv_aplic.c +++ b/hw/intc/riscv_aplic.c @@ -26,7 +26,7 @@ #include "hw/sysbus.h" #include "hw/pci/msi.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/riscv_aplic.h" #include "hw/core/irq.h" #include "target/riscv/cpu.h" diff --git a/hw/intc/riscv_imsic.c b/hw/intc/riscv_imsic.c index 54e72b81e7..bc580c000e 100644 --- a/hw/intc/riscv_imsic.c +++ b/hw/intc/riscv_imsic.c @@ -26,7 +26,7 @@ #include "hw/sysbus.h" #include "hw/pci/msi.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/riscv_imsic.h" #include "hw/core/irq.h" #include "target/riscv/cpu.h" diff --git a/hw/intc/rx_icu.c b/hw/intc/rx_icu.c index 84712e2e4d..788afe6b1a 100644 --- a/hw/intc/rx_icu.c +++ b/hw/intc/rx_icu.c @@ -28,7 +28,7 @@ #include "qemu/error-report.h" #include "hw/core/irq.h" #include "hw/registerfields.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/rx_icu.h" #include "migration/vmstate.h" diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c index 1eed5125d1..508b58382e 100644 --- a/hw/intc/s390_flic.c +++ b/hw/intc/s390_flic.c @@ -17,7 +17,7 @@ #include "hw/sysbus.h" #include "hw/s390x/ioinst.h" #include "hw/s390x/s390_flic.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/s390x/css.h" #include "trace.h" #include "qapi/error.h" diff --git a/hw/intc/sifive_plic.c b/hw/intc/sifive_plic.c index c578b6e36d..5df578822f 100644 --- a/hw/intc/sifive_plic.c +++ b/hw/intc/sifive_plic.c @@ -25,7 +25,7 @@ #include "qemu/error-report.h" #include "hw/sysbus.h" #include "hw/pci/msi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/sifive_plic.h" #include "target/riscv/cpu.h" #include "migration/vmstate.h" diff --git a/hw/intc/spapr_xive.c b/hw/intc/spapr_xive.c index e393f5dcdc..76ab476f59 100644 --- a/hw/intc/spapr_xive.c +++ b/hw/intc/spapr_xive.c @@ -21,7 +21,7 @@ #include "hw/ppc/spapr_xive.h" #include "hw/ppc/xive.h" #include "hw/ppc/xive_regs.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" /* diff --git a/hw/intc/xics.c b/hw/intc/xics.c index e87c0ad2bc..1d40c4386d 100644 --- a/hw/intc/xics.c +++ b/hw/intc/xics.c @@ -30,7 +30,7 @@ #include "trace.h" #include "qemu/timer.h" #include "hw/ppc/xics.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/error-report.h" #include "qemu/module.h" #include "qapi/visitor.h" diff --git a/hw/intc/xilinx_intc.c b/hw/intc/xilinx_intc.c index f5a59d8983..465df1c3af 100644 --- a/hw/intc/xilinx_intc.c +++ b/hw/intc/xilinx_intc.c @@ -30,7 +30,7 @@ #include "hw/sysbus.h" #include "qemu/module.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qom/object.h" diff --git a/hw/intc/xive.c b/hw/intc/xive.c index 6f9babf601..d702b58bd0 100644 --- a/hw/intc/xive.c +++ b/hw/intc/xive.c @@ -14,7 +14,7 @@ #include "system/cpus.h" #include "system/dma.h" #include "system/reset.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/ppc/xive.h" diff --git a/hw/intc/xive2.c b/hw/intc/xive2.c index fbb3b7975e..495925196a 100644 --- a/hw/intc/xive2.c +++ b/hw/intc/xive2.c @@ -13,7 +13,7 @@ #include "target/ppc/cpu.h" #include "system/cpus.h" #include "system/dma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/xive.h" #include "hw/ppc/xive2.h" #include "hw/ppc/xive2_regs.h" diff --git a/hw/intc/xlnx-pmu-iomod-intc.c b/hw/intc/xlnx-pmu-iomod-intc.c index 098c1f327c..f3509efa0a 100644 --- a/hw/intc/xlnx-pmu-iomod-intc.c +++ b/hw/intc/xlnx-pmu-iomod-intc.c @@ -33,7 +33,7 @@ #include "qemu/module.h" #include "hw/intc/xlnx-pmu-iomod-intc.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #ifndef XLNX_PMU_IO_INTC_ERR_DEBUG #define XLNX_PMU_IO_INTC_ERR_DEBUG 0 diff --git a/hw/ipack/ipack.c b/hw/ipack/ipack.c index 4a710eb187..f2e5524fa8 100644 --- a/hw/ipack/ipack.c +++ b/hw/ipack/ipack.c @@ -13,7 +13,7 @@ #include "qemu/module.h" #include "hw/ipack/ipack.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" IPackDevice *ipack_device_find(IPackBus *bus, int32_t slot) diff --git a/hw/ipmi/ipmi.c b/hw/ipmi/ipmi.c index 2a7bc667ec..b49affacce 100644 --- a/hw/ipmi/ipmi.c +++ b/hw/ipmi/ipmi.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/ipmi/ipmi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object_interfaces.h" #include "system/runstate.h" #include "qapi/error.h" diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index 2c6c515579..fb90a7d7c3 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -34,7 +34,7 @@ #include "qemu/timer.h" #include "chardev/char-fe.h" #include "hw/ipmi/ipmi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c index 9b3e3a4b7e..b86943c324 100644 --- a/hw/ipmi/ipmi_bmc_sim.c +++ b/hw/ipmi/ipmi_bmc_sim.c @@ -29,7 +29,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" diff --git a/hw/ipmi/isa_ipmi_bt.c b/hw/ipmi/isa_ipmi_bt.c index 2b26f9c9f0..911e16afbe 100644 --- a/hw/ipmi/isa_ipmi_bt.c +++ b/hw/ipmi/isa_ipmi_bt.c @@ -28,7 +28,7 @@ #include "hw/core/irq.h" #include "hw/ipmi/ipmi_bt.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qom/object.h" #include "hw/acpi/ipmi.h" diff --git a/hw/ipmi/isa_ipmi_kcs.c b/hw/ipmi/isa_ipmi_kcs.c index 14e85e6e9f..927f6b7a56 100644 --- a/hw/ipmi/isa_ipmi_kcs.c +++ b/hw/ipmi/isa_ipmi_kcs.c @@ -28,7 +28,7 @@ #include "hw/core/irq.h" #include "hw/ipmi/ipmi_kcs.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qom/object.h" #include "hw/acpi/ipmi.h" diff --git a/hw/isa/isa-superio.c b/hw/isa/isa-superio.c index 941b0f91d7..dc6ae3cb10 100644 --- a/hw/isa/isa-superio.c +++ b/hw/isa/isa-superio.c @@ -20,7 +20,7 @@ #include "hw/char/parallel.h" #include "hw/block/fdc.h" #include "hw/isa/superio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/input/i8042.h" #include "hw/char/parallel-isa.h" #include "hw/char/serial-isa.h" diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c index 6e772eca57..51dc680029 100644 --- a/hw/isa/lpc_ich9.c +++ b/hw/isa/lpc_ich9.c @@ -45,7 +45,7 @@ #include "hw/acpi/ich9.h" #include "hw/acpi/ich9_timer.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/runstate.h" #include "system/system.h" #include "hw/core/cpu.h" diff --git a/hw/isa/pc87312.c b/hw/isa/pc87312.c index 388da8f590..2a2c3e7b66 100644 --- a/hw/isa/pc87312.c +++ b/hw/isa/pc87312.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/isa/pc87312.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/isa/piix.c b/hw/isa/piix.c index bf1c79a3e6..04b2be2cc3 100644 --- a/hw/isa/piix.c +++ b/hw/isa/piix.c @@ -30,7 +30,7 @@ #include "hw/southbridge/piix.h" #include "hw/timer/i8254.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ide/piix.h" #include "hw/intc/i8259.h" #include "hw/isa/isa.h" diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index 1362a1f404..99be41d0ad 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -19,7 +19,7 @@ #include "hw/char/parallel-isa.h" #include "hw/char/serial-isa.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ide/pci.h" #include "hw/isa/isa.h" #include "hw/isa/superio.h" diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c index e17da4fd20..4bc7b1d189 100644 --- a/hw/m68k/mcf5206.c +++ b/hw/m68k/mcf5206.c @@ -10,7 +10,7 @@ #include "qemu/error-report.h" #include "qemu/log.h" #include "cpu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "hw/core/irq.h" #include "hw/m68k/mcf.h" diff --git a/hw/m68k/mcf_intc.c b/hw/m68k/mcf_intc.c index efac6802a9..b8770e3a53 100644 --- a/hw/m68k/mcf_intc.c +++ b/hw/m68k/mcf_intc.c @@ -14,7 +14,7 @@ #include "hw/core/irq.h" #include "hw/sysbus.h" #include "hw/m68k/mcf.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" #define TYPE_MCF_INTC "mcf-intc" diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index e7217cbaea..75ae66c311 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -25,7 +25,7 @@ #include "hw/char/escc.h" /* ZILOG 8530 Serial Emulation */ #include "hw/block/fdc.h" #include "hw/misc/empty_slot.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "ui/console.h" diff --git a/hw/m68k/q800-glue.c b/hw/m68k/q800-glue.c index 84dd01459c..24fccab966 100644 --- a/hw/m68k/q800-glue.c +++ b/hw/m68k/q800-glue.c @@ -26,7 +26,7 @@ #include "hw/core/boards.h" #include "hw/core/irq.h" #include "hw/core/nmi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" /* diff --git a/hw/m68k/virt.c b/hw/m68k/virt.c index 7007d4e4e9..2d83919fa8 100644 --- a/hw/m68k/virt.c +++ b/hw/m68k/virt.c @@ -14,7 +14,7 @@ #include "system/system.h" #include "cpu.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "elf.h" #include "hw/core/loader.h" #include "ui/console.h" diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 4f3688a71b..26baa1c3d6 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -17,7 +17,7 @@ #include "hw/mem/memory-device.h" #include "hw/mem/pc-dimm.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c index 23ab143ef8..b703252527 100644 --- a/hw/mem/nvdimm.c +++ b/hw/mem/nvdimm.c @@ -28,7 +28,7 @@ #include "qapi/error.h" #include "qapi/visitor.h" #include "hw/mem/nvdimm.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/mem/memory-device.h" #include "system/hostmem.h" diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index 33e5a376ff..3efe47f499 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "hw/core/boards.h" #include "hw/mem/pc-dimm.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/mem/nvdimm.h" #include "hw/mem/memory-device.h" diff --git a/hw/mem/sparse-mem.c b/hw/mem/sparse-mem.c index d7b00e563a..9186da6b1a 100644 --- a/hw/mem/sparse-mem.c +++ b/hw/mem/sparse-mem.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qapi/error.h" #include "qemu/units.h" diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c index f5b9b2e890..9c2b0ff0b3 100644 --- a/hw/microblaze/petalogix_ml605_mmu.c +++ b/hw/microblaze/petalogix_ml605_mmu.c @@ -35,7 +35,7 @@ #include "system/system.h" #include "hw/core/boards.h" #include "hw/char/serial-mm.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/address-spaces.h" #include "hw/ssi/ssi.h" diff --git a/hw/mips/boston.c b/hw/mips/boston.c index b63b27d03f..4579df23eb 100644 --- a/hw/mips/boston.c +++ b/hw/mips/boston.c @@ -31,7 +31,7 @@ #include "hw/mips/cps.h" #include "hw/pci-host/xilinx-pcie.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/guest-random.h" diff --git a/hw/mips/cps.c b/hw/mips/cps.c index 13f048ef9c..620ee972f8 100644 --- a/hw/mips/cps.c +++ b/hw/mips/cps.c @@ -23,7 +23,7 @@ #include "hw/mips/cps.h" #include "hw/mips/mips.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/tcg.h" #include "system/reset.h" diff --git a/hw/mips/fuloong2e.c b/hw/mips/fuloong2e.c index d4c100b69a..d0efe36f7c 100644 --- a/hw/mips/fuloong2e.c +++ b/hw/mips/fuloong2e.c @@ -33,7 +33,7 @@ #include "hw/pci/pci.h" #include "hw/core/loader.h" #include "hw/ide/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "elf.h" #include "hw/isa/vt82c686.h" #include "system/qtest.h" diff --git a/hw/misc/a9scu.c b/hw/misc/a9scu.c index bb00ae2969..d5eb985044 100644 --- a/hw/misc/a9scu.c +++ b/hw/misc/a9scu.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/misc/a9scu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/misc/allwinner-h3-dramc.c b/hw/misc/allwinner-h3-dramc.c index 8834524c30..ef491b36ff 100644 --- a/hw/misc/allwinner-h3-dramc.c +++ b/hw/misc/allwinner-h3-dramc.c @@ -25,7 +25,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "system/address-spaces.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "hw/misc/allwinner-h3-dramc.h" #include "trace.h" diff --git a/hw/misc/allwinner-r40-dramc.c b/hw/misc/allwinner-r40-dramc.c index 1c8e17e3c0..3af8af733a 100644 --- a/hw/misc/allwinner-r40-dramc.c +++ b/hw/misc/allwinner-r40-dramc.c @@ -25,7 +25,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "system/address-spaces.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/bitops.h" #include "hw/misc/allwinner-r40-dramc.h" diff --git a/hw/misc/allwinner-sid.c b/hw/misc/allwinner-sid.c index 1e66c14567..17faf67e60 100644 --- a/hw/misc/allwinner-sid.c +++ b/hw/misc/allwinner-sid.c @@ -25,7 +25,7 @@ #include "qemu/module.h" #include "qemu/guest-random.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/misc/allwinner-sid.h" #include "trace.h" diff --git a/hw/misc/allwinner-sramc.c b/hw/misc/allwinner-sramc.c index ed299ecaae..bd7f59fec9 100644 --- a/hw/misc/allwinner-sramc.c +++ b/hw/misc/allwinner-sramc.c @@ -24,7 +24,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/misc/allwinner-sramc.h" #include "trace.h" diff --git a/hw/misc/applesmc.c b/hw/misc/applesmc.c index a015d4a9b8..fd96f5f245 100644 --- a/hw/misc/applesmc.c +++ b/hw/misc/applesmc.c @@ -32,7 +32,7 @@ #include "qemu/osdep.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "ui/console.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/misc/arm11scu.c b/hw/misc/arm11scu.c index 2ad4fd1d21..89c2c4cd73 100644 --- a/hw/misc/arm11scu.c +++ b/hw/misc/arm11scu.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/misc/arm11scu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/arm_l2x0.c b/hw/misc/arm_l2x0.c index 8b4b61eed0..a5511845c7 100644 --- a/hw/misc/arm_l2x0.c +++ b/hw/misc/arm_l2x0.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/misc/arm_sysctl.c b/hw/misc/arm_sysctl.c index 8995eaeec3..0c91ebafac 100644 --- a/hw/misc/arm_sysctl.c +++ b/hw/misc/arm_sysctl.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/timer.h" #include "system/runstate.h" #include "qemu/bitops.h" diff --git a/hw/misc/armsse-cpuid.c b/hw/misc/armsse-cpuid.c index a57764d731..3a52bb5381 100644 --- a/hw/misc/armsse-cpuid.c +++ b/hw/misc/armsse-cpuid.c @@ -26,7 +26,7 @@ #include "hw/sysbus.h" #include "hw/registerfields.h" #include "hw/misc/armsse-cpuid.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" REG32(CPUID, 0x0) REG32(PID4, 0xfd0) diff --git a/hw/misc/aspeed_hace.c b/hw/misc/aspeed_hace.c index 51c73ca2a5..23e8030cd9 100644 --- a/hw/misc/aspeed_hace.c +++ b/hw/misc/aspeed_hace.c @@ -18,7 +18,7 @@ #include "qapi/error.h" #include "migration/vmstate.h" #include "crypto/hash.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/irq.h" #include "trace.h" diff --git a/hw/misc/aspeed_i3c.c b/hw/misc/aspeed_i3c.c index 3bef1c84dd..37a05b9ce2 100644 --- a/hw/misc/aspeed_i3c.c +++ b/hw/misc/aspeed_i3c.c @@ -12,7 +12,7 @@ #include "qemu/error-report.h" #include "hw/misc/aspeed_i3c.h" #include "hw/registerfields.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/misc/aspeed_lpc.c b/hw/misc/aspeed_lpc.c index 829955e6f1..68f0f6334b 100644 --- a/hw/misc/aspeed_lpc.c +++ b/hw/misc/aspeed_lpc.c @@ -14,7 +14,7 @@ #include "qapi/error.h" #include "qapi/visitor.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #define TO_REG(offset) ((offset) >> 2) diff --git a/hw/misc/aspeed_sbc.c b/hw/misc/aspeed_sbc.c index 2fc5db749d..065e822e70 100644 --- a/hw/misc/aspeed_sbc.c +++ b/hw/misc/aspeed_sbc.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/error-report.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/aspeed_sbc.h" #include "qapi/error.h" #include "migration/vmstate.h" diff --git a/hw/misc/aspeed_scu.c b/hw/misc/aspeed_scu.c index a0ab5eed8f..d27e0c7f91 100644 --- a/hw/misc/aspeed_scu.c +++ b/hw/misc/aspeed_scu.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/misc/aspeed_scu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/misc/aspeed_sdmc.c b/hw/misc/aspeed_sdmc.c index dff7cc362d..59b4a9a426 100644 --- a/hw/misc/aspeed_sdmc.c +++ b/hw/misc/aspeed_sdmc.c @@ -12,7 +12,7 @@ #include "qemu/module.h" #include "qemu/error-report.h" #include "hw/misc/aspeed_sdmc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "trace.h" diff --git a/hw/misc/aspeed_sli.c b/hw/misc/aspeed_sli.c index c51484035e..5b4d70cdc0 100644 --- a/hw/misc/aspeed_sli.c +++ b/hw/misc/aspeed_sli.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/error-report.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/aspeed_sli.h" #include "qapi/error.h" #include "migration/vmstate.h" diff --git a/hw/misc/avr_power.c b/hw/misc/avr_power.c index 947304ed3b..f42cf4fd90 100644 --- a/hw/misc/avr_power.c +++ b/hw/misc/avr_power.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/misc/avr_power.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/irq.h" #include "trace.h" diff --git a/hw/misc/bcm2835_cprman.c b/hw/misc/bcm2835_cprman.c index efe6f900db..8220f7a6b4 100644 --- a/hw/misc/bcm2835_cprman.c +++ b/hw/misc/bcm2835_cprman.c @@ -46,7 +46,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/bcm2835_cprman.h" #include "hw/misc/bcm2835_cprman_internals.h" #include "trace.h" diff --git a/hw/misc/bcm2835_property.c b/hw/misc/bcm2835_property.c index 2026294ce1..216a746c2b 100644 --- a/hw/misc/bcm2835_property.c +++ b/hw/misc/bcm2835_property.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/misc/bcm2835_property.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/misc/bcm2835_mbox_defs.h" diff --git a/hw/misc/debugexit.c b/hw/misc/debugexit.c index 04a9fc3122..cdd19166a5 100644 --- a/hw/misc/debugexit.c +++ b/hw/misc/debugexit.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/module.h" #include "qom/object.h" #include "system/runstate.h" diff --git a/hw/misc/djmemc.c b/hw/misc/djmemc.c index c5b09f551b..5fd3a8bfb2 100644 --- a/hw/misc/djmemc.c +++ b/hw/misc/djmemc.c @@ -11,7 +11,7 @@ #include "qemu/log.h" #include "migration/vmstate.h" #include "hw/misc/djmemc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" diff --git a/hw/misc/eccmemctl.c b/hw/misc/eccmemctl.c index 71243ba5ba..f93cbd1659 100644 --- a/hw/misc/eccmemctl.c +++ b/hw/misc/eccmemctl.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/misc/empty_slot.c b/hw/misc/empty_slot.c index 239d760320..a012668214 100644 --- a/hw/misc/empty_slot.c +++ b/hw/misc/empty_slot.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/empty_slot.h" #include "qapi/error.h" #include "trace.h" diff --git a/hw/misc/iotkit-secctl.c b/hw/misc/iotkit-secctl.c index f8a2946191..64e94a7647 100644 --- a/hw/misc/iotkit-secctl.c +++ b/hw/misc/iotkit-secctl.c @@ -20,7 +20,7 @@ #include "hw/core/irq.h" #include "hw/misc/iotkit-secctl.h" #include "hw/arm/armsse-version.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" /* Registers in the secure privilege control block */ REG32(SECRESPCFG, 0x10) diff --git a/hw/misc/iotkit-sysctl.c b/hw/misc/iotkit-sysctl.c index d70e51ab2e..a9c3568c21 100644 --- a/hw/misc/iotkit-sysctl.c +++ b/hw/misc/iotkit-sysctl.c @@ -27,7 +27,7 @@ #include "migration/vmstate.h" #include "hw/registerfields.h" #include "hw/misc/iotkit-sysctl.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/armsse-version.h" #include "target/arm/arm-powerctl.h" diff --git a/hw/misc/iotkit-sysinfo.c b/hw/misc/iotkit-sysinfo.c index 57405cb7e1..a53b1f5180 100644 --- a/hw/misc/iotkit-sysinfo.c +++ b/hw/misc/iotkit-sysinfo.c @@ -25,7 +25,7 @@ #include "hw/sysbus.h" #include "hw/registerfields.h" #include "hw/misc/iotkit-sysinfo.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/arm/armsse-version.h" REG32(SYS_VERSION, 0x0) diff --git a/hw/misc/ivshmem-pci.c b/hw/misc/ivshmem-pci.c index 636d0b83de..fb69af52f6 100644 --- a/hw/misc/ivshmem-pci.c +++ b/hw/misc/ivshmem-pci.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "qemu/cutils.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" diff --git a/hw/misc/led.c b/hw/misc/led.c index f7f709072a..d9256aaaf5 100644 --- a/hw/misc/led.c +++ b/hw/misc/led.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/led.h" #include "trace.h" diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 13ccd3023f..887397ae84 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -27,7 +27,7 @@ #include "system/runstate.h" #include "qapi/error.h" #include "qemu/cutils.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "system/block-backend.h" #include "system/rtc.h" diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c index 3b8dd462f5..312dde242b 100644 --- a/hw/misc/macio/cuda.c +++ b/hw/misc/macio/cuda.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/misc/macio/cuda.h" #include "qemu/timer.h" diff --git a/hw/misc/macio/gpio.c b/hw/misc/macio/gpio.c index 77658cb6d0..1a7c534d65 100644 --- a/hw/misc/macio/gpio.c +++ b/hw/misc/macio/gpio.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/misc/macio/macio.h" #include "hw/misc/macio/gpio.h" diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c index 6710485d72..2813705c03 100644 --- a/hw/misc/macio/macio.c +++ b/hw/misc/macio/macio.c @@ -29,7 +29,7 @@ #include "hw/misc/macio/cuda.h" #include "hw/pci/pci.h" #include "hw/ppc/mac_dbdma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/char/escc.h" #include "hw/misc/macio/macio.h" diff --git a/hw/misc/macio/pmu.c b/hw/misc/macio/pmu.c index 73e64306b8..04640c20e0 100644 --- a/hw/misc/macio/pmu.c +++ b/hw/misc/macio/pmu.c @@ -29,7 +29,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/misc/macio/pmu.h" diff --git a/hw/misc/max78000_gcr.c b/hw/misc/max78000_gcr.c index 6d2e2bd617..e8dc593732 100644 --- a/hw/misc/max78000_gcr.c +++ b/hw/misc/max78000_gcr.c @@ -12,7 +12,7 @@ #include "hw/core/irq.h" #include "system/runstate.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/char/max78000_uart.h" #include "hw/misc/max78000_trng.h" #include "hw/misc/max78000_aes.h" diff --git a/hw/misc/mips_cmgcr.c b/hw/misc/mips_cmgcr.c index 5484b73967..1c6e9d1f6f 100644 --- a/hw/misc/mips_cmgcr.c +++ b/hw/misc/mips_cmgcr.c @@ -16,7 +16,7 @@ #include "migration/vmstate.h" #include "hw/misc/mips_cmgcr.h" #include "hw/misc/mips_cpc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/mips_gic.h" static inline bool is_cpc_connected(MIPSGCRState *s) diff --git a/hw/misc/mips_cpc.c b/hw/misc/mips_cpc.c index 9bfb7c9721..efc0326f6f 100644 --- a/hw/misc/mips_cpc.c +++ b/hw/misc/mips_cpc.c @@ -26,7 +26,7 @@ #include "migration/vmstate.h" #include "hw/misc/mips_cpc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" static inline uint64_t cpc_vp_run_mask(MIPSCPCState *cpc) { diff --git a/hw/misc/mips_itu.c b/hw/misc/mips_itu.c index fc17385cde..82c0a90f70 100644 --- a/hw/misc/mips_itu.c +++ b/hw/misc/mips_itu.c @@ -24,7 +24,7 @@ #include "qapi/error.h" #include "hw/core/cpu.h" #include "hw/misc/mips_itu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "target/mips/cpu.h" #define ITC_TAG_ADDRSPACE_SZ (ITC_ADDRESSMAP_NUM * 8) diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 728931883d..bae766ef17 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/misc/mos6522.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "monitor/monitor.h" #include "monitor/hmp.h" diff --git a/hw/misc/mps2-fpgaio.c b/hw/misc/mps2-fpgaio.c index bee1309f5a..f3d51fd228 100644 --- a/hw/misc/mps2-fpgaio.c +++ b/hw/misc/mps2-fpgaio.c @@ -25,7 +25,7 @@ #include "hw/registerfields.h" #include "hw/misc/mps2-fpgaio.h" #include "hw/misc/led.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/timer.h" REG32(LED0, 0) diff --git a/hw/misc/mps2-scc.c b/hw/misc/mps2-scc.c index ea9cad85dc..56aa013507 100644 --- a/hw/misc/mps2-scc.c +++ b/hw/misc/mps2-scc.c @@ -28,7 +28,7 @@ #include "hw/registerfields.h" #include "hw/misc/mps2-scc.h" #include "hw/misc/led.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" REG32(CFG0, 0) REG32(CFG1, 4) diff --git a/hw/misc/msf2-sysreg.c b/hw/misc/msf2-sysreg.c index ce0ad50c1b..90c786e95a 100644 --- a/hw/misc/msf2-sysreg.c +++ b/hw/misc/msf2-sysreg.c @@ -17,7 +17,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/misc/msf2-sysreg.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/error-report.h" #include "trace.h" diff --git a/hw/misc/npcm7xx_mft.c b/hw/misc/npcm7xx_mft.c index 0bbae111cf..21e74385c7 100644 --- a/hw/misc/npcm7xx_mft.c +++ b/hw/misc/npcm7xx_mft.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/npcm7xx_mft.h" #include "hw/misc/npcm7xx_pwm.h" #include "hw/registerfields.h" diff --git a/hw/misc/npcm7xx_pwm.c b/hw/misc/npcm7xx_pwm.c index 39ac0dbe2a..1b010e51ec 100644 --- a/hw/misc/npcm7xx_pwm.c +++ b/hw/misc/npcm7xx_pwm.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/npcm7xx_pwm.h" #include "hw/registerfields.h" #include "migration/vmstate.h" diff --git a/hw/misc/npcm_gcr.c b/hw/misc/npcm_gcr.c index 2acaa16771..2d7e5b5a01 100644 --- a/hw/misc/npcm_gcr.c +++ b/hw/misc/npcm_gcr.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/misc/npcm_gcr.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/cutils.h" diff --git a/hw/misc/nrf51_rng.c b/hw/misc/nrf51_rng.c index 0254fb377a..37c832d976 100644 --- a/hw/misc/nrf51_rng.c +++ b/hw/misc/nrf51_rng.c @@ -16,7 +16,7 @@ #include "hw/arm/nrf51.h" #include "hw/core/irq.h" #include "hw/misc/nrf51_rng.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/guest-random.h" diff --git a/hw/misc/pci-testdev.c b/hw/misc/pci-testdev.c index ba71c5069f..3c3887afe0 100644 --- a/hw/misc/pci-testdev.c +++ b/hw/misc/pci-testdev.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/event_notifier.h" #include "qemu/module.h" #include "system/kvm.h" diff --git a/hw/misc/pvpanic-isa.c b/hw/misc/pvpanic-isa.c index f7b421c713..85fb7da5e5 100644 --- a/hw/misc/pvpanic-isa.c +++ b/hw/misc/pvpanic-isa.c @@ -17,7 +17,7 @@ #include "system/runstate.h" #include "hw/nvram/fw_cfg.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/pvpanic.h" #include "qom/object.h" #include "hw/isa/isa.h" diff --git a/hw/misc/pvpanic-mmio.c b/hw/misc/pvpanic-mmio.c index 2a363106b2..2d1464435a 100644 --- a/hw/misc/pvpanic-mmio.c +++ b/hw/misc/pvpanic-mmio.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/pvpanic.h" #include "hw/sysbus.h" #include "standard-headers/misc/pvpanic.h" diff --git a/hw/misc/pvpanic-pci.c b/hw/misc/pvpanic-pci.c index 2869b6a7ff..5509f70a3e 100644 --- a/hw/misc/pvpanic-pci.c +++ b/hw/misc/pvpanic-pci.c @@ -16,7 +16,7 @@ #include "system/runstate.h" #include "hw/nvram/fw_cfg.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/misc/pvpanic.h" #include "qom/object.h" diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c index c83247c408..bbd06d9acc 100644 --- a/hw/misc/pvpanic.c +++ b/hw/misc/pvpanic.c @@ -18,7 +18,7 @@ #include "system/runstate.h" #include "hw/nvram/fw_cfg.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/pvpanic.h" #include "qom/object.h" #include "standard-headers/misc/pvpanic.h" diff --git a/hw/misc/sifive_e_aon.c b/hw/misc/sifive_e_aon.c index 9b1e7baf95..4d6e015ca3 100644 --- a/hw/misc/sifive_e_aon.c +++ b/hw/misc/sifive_e_aon.c @@ -25,7 +25,7 @@ #include "qapi/visitor.h" #include "qapi/error.h" #include "system/watchdog.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" REG32(AON_WDT_WDOGCFG, 0x0) FIELD(AON_WDT_WDOGCFG, SCALE, 0, 4) diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c index 1ebed2fd8b..1d35268046 100644 --- a/hw/misc/sifive_u_otp.c +++ b/hw/misc/sifive_u_otp.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" #include "qemu/error-report.h" diff --git a/hw/misc/stm32l4x5_rcc.c b/hw/misc/stm32l4x5_rcc.c index 1b012d1cc1..c2b25e9a4d 100644 --- a/hw/misc/stm32l4x5_rcc.c +++ b/hw/misc/stm32l4x5_rcc.c @@ -26,7 +26,7 @@ #include "hw/core/clock.h" #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/registerfields.h" #include "trace.h" diff --git a/hw/misc/tz-mpc.c b/hw/misc/tz-mpc.c index d922639da1..fb5d232bff 100644 --- a/hw/misc/tz-mpc.c +++ b/hw/misc/tz-mpc.c @@ -19,7 +19,7 @@ #include "hw/registerfields.h" #include "hw/core/irq.h" #include "hw/misc/tz-mpc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" /* Our IOMMU has two IOMMU indexes, one for secure transactions and one for * non-secure transactions. diff --git a/hw/misc/tz-msc.c b/hw/misc/tz-msc.c index 74c31f6d7d..3e33455d42 100644 --- a/hw/misc/tz-msc.c +++ b/hw/misc/tz-msc.c @@ -19,7 +19,7 @@ #include "hw/registerfields.h" #include "hw/core/irq.h" #include "hw/misc/tz-msc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" static void tz_msc_update_irq(TZMSC *s) { diff --git a/hw/misc/tz-ppc.c b/hw/misc/tz-ppc.c index 2ab03fa973..a41c6011fb 100644 --- a/hw/misc/tz-ppc.c +++ b/hw/misc/tz-ppc.c @@ -19,7 +19,7 @@ #include "hw/registerfields.h" #include "hw/core/irq.h" #include "hw/misc/tz-ppc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" static void tz_ppc_update_irq(TZPPC *s) { diff --git a/hw/misc/virt_ctrl.c b/hw/misc/virt_ctrl.c index 9f16093ca2..7cb1ea5d18 100644 --- a/hw/misc/virt_ctrl.c +++ b/hw/misc/virt_ctrl.c @@ -5,7 +5,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/misc/xlnx-versal-cframe-reg.c b/hw/misc/xlnx-versal-cframe-reg.c index 616c0ecf83..33a4ece26f 100644 --- a/hw/misc/xlnx-versal-cframe-reg.c +++ b/hw/misc/xlnx-versal-cframe-reg.c @@ -16,7 +16,7 @@ #include "qemu/log.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/misc/xlnx-versal-cframe-reg.h" diff --git a/hw/misc/xlnx-versal-cfu.c b/hw/misc/xlnx-versal-cfu.c index ce58404eb2..80f9612b2f 100644 --- a/hw/misc/xlnx-versal-cfu.c +++ b/hw/misc/xlnx-versal-cfu.c @@ -18,7 +18,7 @@ #include "qemu/log.h" #include "qemu/units.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/misc/xlnx-versal-cfu.h" diff --git a/hw/misc/xlnx-versal-crl.c b/hw/misc/xlnx-versal-crl.c index 8f9a40d941..b0baabc1ad 100644 --- a/hw/misc/xlnx-versal-crl.c +++ b/hw/misc/xlnx-versal-crl.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/register.h" diff --git a/hw/misc/xlnx-versal-pmc-iou-slcr.c b/hw/misc/xlnx-versal-pmc-iou-slcr.c index c75800c1b3..84d474c38f 100644 --- a/hw/misc/xlnx-versal-pmc-iou-slcr.c +++ b/hw/misc/xlnx-versal-pmc-iou-slcr.c @@ -30,7 +30,7 @@ #include "qemu/bitops.h" #include "qemu/log.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/misc/xlnx-versal-pmc-iou-slcr.h" #ifndef XILINX_VERSAL_PMC_IOU_SLCR_ERR_DEBUG diff --git a/hw/misc/xlnx-versal-trng.c b/hw/misc/xlnx-versal-trng.c index 2b573a45bd..aa1d65de7b 100644 --- a/hw/misc/xlnx-versal-trng.c +++ b/hw/misc/xlnx-versal-trng.c @@ -35,7 +35,7 @@ #include "qemu/timer.h" #include "qapi/visitor.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #ifndef XLNX_VERSAL_TRNG_ERR_DEBUG #define XLNX_VERSAL_TRNG_ERR_DEBUG 0 diff --git a/hw/misc/xlnx-versal-xramc.c b/hw/misc/xlnx-versal-xramc.c index af58bc761f..6a86f6b5d4 100644 --- a/hw/misc/xlnx-versal-xramc.c +++ b/hw/misc/xlnx-versal-xramc.c @@ -12,7 +12,7 @@ #include "migration/vmstate.h" #include "hw/sysbus.h" #include "hw/register.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/irq.h" #include "hw/misc/xlnx-versal-xramc.h" diff --git a/hw/misc/xlnx-zynqmp-apu-ctrl.c b/hw/misc/xlnx-zynqmp-apu-ctrl.c index 196e2452ae..93f0bedc48 100644 --- a/hw/misc/xlnx-zynqmp-apu-ctrl.c +++ b/hw/misc/xlnx-zynqmp-apu-ctrl.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "qemu/log.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/register.h" diff --git a/hw/misc/zynq_slcr.c b/hw/misc/zynq_slcr.c index cc18b21b22..d1900a2b94 100644 --- a/hw/misc/zynq_slcr.c +++ b/hw/misc/zynq_slcr.c @@ -24,7 +24,7 @@ #include "hw/registerfields.h" #include "hw/core/qdev-clock.h" #include "qom/object.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #ifndef ZYNQ_SLCR_ERR_DEBUG diff --git a/hw/net/allwinner-sun8i-emac.c b/hw/net/allwinner-sun8i-emac.c index a4824d61bd..8ff0db5ccd 100644 --- a/hw/net/allwinner-sun8i-emac.c +++ b/hw/net/allwinner-sun8i-emac.c @@ -24,7 +24,7 @@ #include "migration/vmstate.h" #include "net/net.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "trace.h" #include "net/checksum.h" diff --git a/hw/net/allwinner_emac.c b/hw/net/allwinner_emac.c index 9158c77cb4..cbe4cb80e4 100644 --- a/hw/net/allwinner_emac.c +++ b/hw/net/allwinner_emac.c @@ -24,7 +24,7 @@ #include "qemu/fifo8.h" #include "hw/core/irq.h" #include "hw/net/allwinner_emac.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" #include diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c index ef72821f8d..fe9747fdb6 100644 --- a/hw/net/cadence_gem.c +++ b/hw/net/cadence_gem.c @@ -27,7 +27,7 @@ #include "hw/core/irq.h" #include "hw/net/cadence_gem.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/registerfields.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/net/can/can_kvaser_pci.c b/hw/net/can/can_kvaser_pci.c index 52584c5d6f..f2912b206d 100644 --- a/hw/net/can/can_kvaser_pci.c +++ b/hw/net/can/can_kvaser_pci.c @@ -34,7 +34,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "net/can_emu.h" diff --git a/hw/net/can/can_mioe3680_pci.c b/hw/net/can/can_mioe3680_pci.c index 2e9e09741b..fe1a91ee0e 100644 --- a/hw/net/can/can_mioe3680_pci.c +++ b/hw/net/can/can_mioe3680_pci.c @@ -30,7 +30,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "net/can_emu.h" diff --git a/hw/net/can/can_pcm3680_pci.c b/hw/net/can/can_pcm3680_pci.c index 7dd23c905e..ea45de28a8 100644 --- a/hw/net/can/can_pcm3680_pci.c +++ b/hw/net/can/can_pcm3680_pci.c @@ -30,7 +30,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "net/can_emu.h" diff --git a/hw/net/can/ctucan_pci.c b/hw/net/can/ctucan_pci.c index ad2b1e60cb..40654778a4 100644 --- a/hw/net/can/ctucan_pci.c +++ b/hw/net/can/ctucan_pci.c @@ -31,7 +31,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "net/can_emu.h" diff --git a/hw/net/can/xlnx-versal-canfd.c b/hw/net/can/xlnx-versal-canfd.c index 0734279557..94d9178a54 100644 --- a/hw/net/can/xlnx-versal-canfd.c +++ b/hw/net/can/xlnx-versal-canfd.c @@ -36,7 +36,7 @@ #include "hw/register.h" #include "qapi/error.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/net/xlnx-versal-canfd.h" #include "trace.h" diff --git a/hw/net/can/xlnx-zynqmp-can.c b/hw/net/can/xlnx-zynqmp-can.c index a98b208169..533ac854a2 100644 --- a/hw/net/can/xlnx-zynqmp-can.c +++ b/hw/net/can/xlnx-zynqmp-can.c @@ -38,7 +38,7 @@ #include "qemu/log.h" #include "qemu/cutils.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "net/can_emu.h" #include "net/can_host.h" #include "qemu/event_notifier.h" diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 68062481c5..182f0e5f6b 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/net/dp8393x.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/net/e1000.c b/hw/net/e1000.c index a80a7b0cdb..202ad40401 100644 --- a/hw/net/e1000.c +++ b/hw/net/e1000.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "hw/net/mii.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "net/eth.h" #include "net/net.h" diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c index 89e6d52ba0..3d4683370c 100644 --- a/hw/net/e1000e.c +++ b/hw/net/e1000e.c @@ -45,7 +45,7 @@ #include "hw/net/mii.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "e1000_common.h" diff --git a/hw/net/eepro100.c b/hw/net/eepro100.c index d47df5a97f..aaa3eb60f8 100644 --- a/hw/net/eepro100.c +++ b/hw/net/eepro100.c @@ -45,7 +45,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "net/net.h" #include "net/eth.h" diff --git a/hw/net/fsl_etsec/etsec.c b/hw/net/fsl_etsec/etsec.c index e6a29d9ec6..5b77528e36 100644 --- a/hw/net/fsl_etsec/etsec.c +++ b/hw/net/fsl_etsec/etsec.c @@ -31,7 +31,7 @@ #include "hw/core/irq.h" #include "hw/net/mii.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "etsec.h" #include "registers.h" #include "qapi/error.h" diff --git a/hw/net/ftgmac100.c b/hw/net/ftgmac100.c index d5590391b7..d29f7dcd17 100644 --- a/hw/net/ftgmac100.c +++ b/hw/net/ftgmac100.c @@ -21,7 +21,7 @@ #include "net/checksum.h" #include "net/eth.h" #include "hw/net/mii.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include /* for crc32 */ diff --git a/hw/net/i82596.c b/hw/net/i82596.c index a94cfa2d6d..37ce20efb1 100644 --- a/hw/net/i82596.c +++ b/hw/net/i82596.c @@ -41,7 +41,7 @@ #include "net/net.h" #include "net/eth.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "system/address-spaces.h" #include "qemu/module.h" diff --git a/hw/net/igb.c b/hw/net/igb.c index e4c02365d6..d39eba9f64 100644 --- a/hw/net/igb.c +++ b/hw/net/igb.c @@ -52,7 +52,7 @@ #include "hw/pci/pcie_sriov.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "igb_common.h" diff --git a/hw/net/imx_fec.c b/hw/net/imx_fec.c index 386d24421c..c177b7ff2b 100644 --- a/hw/net/imx_fec.c +++ b/hw/net/imx_fec.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/net/imx_fec.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "system/dma.h" #include "qemu/log.h" diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c index 191fd8b421..381fd38764 100644 --- a/hw/net/lan9118.c +++ b/hw/net/lan9118.c @@ -19,7 +19,7 @@ #include "hw/net/lan9118_phy.h" #include "hw/net/lan9118.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/bswap.h" #include "qemu/log.h" diff --git a/hw/net/lance.c b/hw/net/lance.c index dfb855c23a..5d5bf9b961 100644 --- a/hw/net/lance.c +++ b/hw/net/lance.c @@ -41,7 +41,7 @@ #include "hw/sparc/sparc32_dma.h" #include "migration/vmstate.h" #include "hw/net/lance.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #include "system/system.h" diff --git a/hw/net/lasi_i82596.c b/hw/net/lasi_i82596.c index 2f212a7ed3..50e3c4fa86 100644 --- a/hw/net/lasi_i82596.c +++ b/hw/net/lasi_i82596.c @@ -19,7 +19,7 @@ #include "hw/net/lasi_82596.h" #include "hw/net/i82596.h" #include "trace.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #define PA_I82596_RESET 0 /* Offsets relative to LASI-LAN-Addr.*/ diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c index 9cd9436985..ecf105adf2 100644 --- a/hw/net/mcf_fec.c +++ b/hw/net/mcf_fec.c @@ -14,7 +14,7 @@ #include "hw/m68k/mcf.h" #include "hw/m68k/mcf_fec.h" #include "hw/net/mii.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include /* for crc32 */ diff --git a/hw/net/msf2-emac.c b/hw/net/msf2-emac.c index 3e27920962..ac01d1ce47 100644 --- a/hw/net/msf2-emac.c +++ b/hw/net/msf2-emac.c @@ -35,7 +35,7 @@ #include "hw/net/msf2-emac.h" #include "hw/net/mii.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" REG32(CFG1, 0x0) diff --git a/hw/net/mv88w8618_eth.c b/hw/net/mv88w8618_eth.c index 68fda83966..1a1bba8b57 100644 --- a/hw/net/mv88w8618_eth.c +++ b/hw/net/mv88w8618_eth.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/net/mv88w8618_eth.h" diff --git a/hw/net/ne2000-pci.c b/hw/net/ne2000-pci.c index 7b215eb1f2..f741478101 100644 --- a/hw/net/ne2000-pci.c +++ b/hw/net/ne2000-pci.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "ne2000.h" #include "system/system.h" diff --git a/hw/net/npcm7xx_emc.c b/hw/net/npcm7xx_emc.c index 704f438768..4105e89429 100644 --- a/hw/net/npcm7xx_emc.c +++ b/hw/net/npcm7xx_emc.c @@ -33,7 +33,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/net/npcm7xx_emc.h" #include "net/eth.h" #include "migration/vmstate.h" diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c index 85419321d9..34992f3cc9 100644 --- a/hw/net/opencores_eth.c +++ b/hw/net/opencores_eth.c @@ -34,7 +34,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/net/mii.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "net/net.h" #include "qemu/module.h" diff --git a/hw/net/pcnet-pci.c b/hw/net/pcnet-pci.c index dad5d2ab06..bef608959a 100644 --- a/hw/net/pcnet-pci.c +++ b/hw/net/pcnet-pci.c @@ -30,7 +30,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "net/net.h" #include "qemu/module.h" diff --git a/hw/net/pcnet.c b/hw/net/pcnet.c index fc2ce5eeb2..0bd7d4314e 100644 --- a/hw/net/pcnet.c +++ b/hw/net/pcnet.c @@ -38,7 +38,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "net/net.h" #include "net/eth.h" diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c index cc49701dd3..935e74fd7d 100644 --- a/hw/net/rocker/rocker.c +++ b/hw/net/rocker/rocker.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "hw/pci/msix.h" diff --git a/hw/net/rtl8139.c b/hw/net/rtl8139.c index 324fb932aa..9fd00574d2 100644 --- a/hw/net/rtl8139.c +++ b/hw/net/rtl8139.c @@ -52,7 +52,7 @@ #include /* for crc32 */ #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "system/dma.h" #include "qemu/module.h" diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c index b1c675be6f..e3bf3b0e72 100644 --- a/hw/net/smc91c111.c +++ b/hw/net/smc91c111.c @@ -14,7 +14,7 @@ #include "hw/core/irq.h" #include "hw/net/smc91c111.h" #include "hw/registerfields.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/net/spapr_llan.c b/hw/net/spapr_llan.c index f6f217d632..550848307d 100644 --- a/hw/net/spapr_llan.c +++ b/hw/net/spapr_llan.c @@ -32,7 +32,7 @@ #include "migration/vmstate.h" #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_vio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/system.h" #include "trace.h" diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c index a05aa8a024..c97d694585 100644 --- a/hw/net/stellaris_enet.c +++ b/hw/net/stellaris_enet.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" diff --git a/hw/net/sungem.c b/hw/net/sungem.c index b405eb89fa..308c2d0dbd 100644 --- a/hw/net/sungem.c +++ b/hw/net/sungem.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/net/sunhme.c b/hw/net/sunhme.c index c2f7a8483d..e2cd1b5271 100644 --- a/hw/net/sunhme.c +++ b/hw/net/sunhme.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/net/mii.h" #include "net/net.h" diff --git a/hw/net/tulip.c b/hw/net/tulip.c index 5f9df76a74..bc7b18ed36 100644 --- a/hw/net/tulip.c +++ b/hw/net/tulip.c @@ -10,7 +10,7 @@ #include "qemu/log.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/nvram/eeprom93xx.h" #include "migration/vmstate.h" #include "system/system.h" diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index ca813203d7..317f1ad23b 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -33,7 +33,7 @@ #include "hw/virtio/virtio-bus.h" #include "qapi/error.h" #include "qapi/qapi-events-net.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/qapi-types-migration.h" #include "qapi/qapi-events-migration.h" #include "hw/virtio/virtio-access.h" diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c index 03732375a7..bae3a44cb0 100644 --- a/hw/net/vmxnet3.c +++ b/hw/net/vmxnet3.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "hw/hw.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "net/tap.h" #include "net/checksum.h" #include "system/system.h" diff --git a/hw/net/xen_nic.c b/hw/net/xen_nic.c index e7bdc732de..4ef1b7dd29 100644 --- a/hw/net/xen_nic.c +++ b/hw/net/xen_nic.c @@ -37,7 +37,7 @@ #include "hw/xen/xen-backend.h" #include "hw/xen/xen-bus-helper.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/xen/interface/io/netif.h" diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c index 25768644f5..f07be72512 100644 --- a/hw/net/xgmac.c +++ b/hw/net/xgmac.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c index c7cb257e62..36047a51c0 100644 --- a/hw/net/xilinx_axienet.c +++ b/hw/net/xilinx_axienet.c @@ -32,7 +32,7 @@ #include "net/checksum.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/stream.h" #include "qom/object.h" diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c index 0d00e3cc0d..39e64a46e2 100644 --- a/hw/net/xilinx_ethlite.c +++ b/hw/net/xilinx_ethlite.c @@ -33,7 +33,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/misc/unimp.h" #include "net/net.h" diff --git a/hw/nvram/aspeed_otp.c b/hw/nvram/aspeed_otp.c index dcf8ed3917..a60289000c 100644 --- a/hw/nvram/aspeed_otp.c +++ b/hw/nvram/aspeed_otp.c @@ -10,7 +10,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "system/block-backend.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/nvram/aspeed_otp.h" #include "hw/nvram/trace.h" diff --git a/hw/nvram/ds1225y.c b/hw/nvram/ds1225y.c index 0945e36652..512e548518 100644 --- a/hw/nvram/ds1225y.c +++ b/hw/nvram/ds1225y.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c index 82ea97e552..e947cf8a3b 100644 --- a/hw/nvram/eeprom_at24c.c +++ b/hw/nvram/eeprom_at24c.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "hw/i2c/i2c.h" #include "hw/nvram/eeprom_at24c.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "system/block-backend.h" #include "qom/object.h" diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index df07424e55..e5c35b0e2e 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -30,7 +30,7 @@ #include "system/address-spaces.h" #include "hw/core/boards.h" #include "hw/nvram/fw_cfg.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" diff --git a/hw/nvram/mac_nvram.c b/hw/nvram/mac_nvram.c index 66526a2291..b048db0777 100644 --- a/hw/nvram/mac_nvram.c +++ b/hw/nvram/mac_nvram.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "hw/nvram/chrp_nvram.h" #include "hw/nvram/mac_nvram.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "system/block-backend.h" #include "migration/vmstate.h" diff --git a/hw/nvram/nrf51_nvm.c b/hw/nvram/nrf51_nvm.c index 23cc9fe9b3..b841ead579 100644 --- a/hw/nvram/nrf51_nvm.c +++ b/hw/nvram/nrf51_nvm.c @@ -23,7 +23,7 @@ #include "qemu/module.h" #include "hw/arm/nrf51.h" #include "hw/nvram/nrf51_nvm.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" /* diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c index d0ac4e5735..c9202ddfcd 100644 --- a/hw/nvram/spapr_nvram.c +++ b/hw/nvram/spapr_nvram.c @@ -36,7 +36,7 @@ #include "hw/nvram/chrp_nvram.h" #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_vio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qom/object.h" diff --git a/hw/nvram/xlnx-bbram.c b/hw/nvram/xlnx-bbram.c index 22aefbc240..aad445b901 100644 --- a/hw/nvram/xlnx-bbram.c +++ b/hw/nvram/xlnx-bbram.c @@ -31,7 +31,7 @@ #include "qapi/error.h" #include "system/blockdev.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/nvram/xlnx-efuse.h" diff --git a/hw/nvram/xlnx-efuse.c b/hw/nvram/xlnx-efuse.c index 4c23f8b931..7eb156f941 100644 --- a/hw/nvram/xlnx-efuse.c +++ b/hw/nvram/xlnx-efuse.c @@ -31,7 +31,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "system/blockdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #define TBIT0_OFFSET 28 diff --git a/hw/nvram/xlnx-versal-efuse-cache.c b/hw/nvram/xlnx-versal-efuse-cache.c index d4ec96a626..56c2def5f8 100644 --- a/hw/nvram/xlnx-versal-efuse-cache.c +++ b/hw/nvram/xlnx-versal-efuse-cache.c @@ -26,7 +26,7 @@ #include "hw/nvram/xlnx-versal-efuse.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #define MR_SIZE 0xC00 diff --git a/hw/nvram/xlnx-versal-efuse-ctrl.c b/hw/nvram/xlnx-versal-efuse-ctrl.c index 6f17f32a0c..b7dc0e49e5 100644 --- a/hw/nvram/xlnx-versal-efuse-ctrl.c +++ b/hw/nvram/xlnx-versal-efuse-ctrl.c @@ -29,7 +29,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #ifndef XLNX_VERSAL_EFUSE_CTRL_ERR_DEBUG #define XLNX_VERSAL_EFUSE_CTRL_ERR_DEBUG 0 diff --git a/hw/nvram/xlnx-zynqmp-efuse.c b/hw/nvram/xlnx-zynqmp-efuse.c index ce35bb0cc1..e6bc54fc6b 100644 --- a/hw/nvram/xlnx-zynqmp-efuse.c +++ b/hw/nvram/xlnx-zynqmp-efuse.c @@ -31,7 +31,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #ifndef ZYNQMP_EFUSE_ERR_DEBUG #define ZYNQMP_EFUSE_ERR_DEBUG 0 diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c index a42e7b5e27..bafb877cc3 100644 --- a/hw/openrisc/openrisc_sim.c +++ b/hw/openrisc/openrisc_sim.c @@ -27,7 +27,7 @@ #include "hw/char/serial-mm.h" #include "net/net.h" #include "hw/openrisc/boot.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/address-spaces.h" #include "system/device_tree.h" #include "system/system.h" diff --git a/hw/openrisc/virt.c b/hw/openrisc/virt.c index bc5d27dbdd..446a81579c 100644 --- a/hw/openrisc/virt.c +++ b/hw/openrisc/virt.c @@ -20,7 +20,7 @@ #include "hw/misc/sifive_test.h" #include "hw/pci/pci.h" #include "hw/pci-host/gpex.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/rtc/goldfish_rtc.h" #include "hw/sysbus.h" #include "hw/virtio/virtio-mmio.h" diff --git a/hw/pci-bridge/cxl_downstream.c b/hw/pci-bridge/cxl_downstream.c index 1065245a8b..1265e40c39 100644 --- a/hw/pci-bridge/cxl_downstream.c +++ b/hw/pci-bridge/cxl_downstream.c @@ -13,7 +13,7 @@ #include "hw/pci/msi.h" #include "hw/pci/pcie.h" #include "hw/pci/pcie_port.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/cxl/cxl.h" #include "qapi/error.h" diff --git a/hw/pci-bridge/cxl_root_port.c b/hw/pci-bridge/cxl_root_port.c index e6a4035d26..df359dee67 100644 --- a/hw/pci-bridge/cxl_root_port.c +++ b/hw/pci-bridge/cxl_root_port.c @@ -23,7 +23,7 @@ #include "hw/pci/pci_bridge.h" #include "hw/pci/pcie_port.h" #include "hw/pci/msi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/sysbus.h" #include "qapi/error.h" diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c index 208e0c6172..019c311bb5 100644 --- a/hw/pci-bridge/cxl_upstream.c +++ b/hw/pci-bridge/cxl_upstream.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/pci/msi.h" #include "hw/pci/pcie.h" diff --git a/hw/pci-bridge/gen_pcie_root_port.c b/hw/pci-bridge/gen_pcie_root_port.c index d9078e783b..fa1cf5e58f 100644 --- a/hw/pci-bridge/gen_pcie_root_port.c +++ b/hw/pci-bridge/gen_pcie_root_port.c @@ -15,7 +15,7 @@ #include "qemu/module.h" #include "hw/pci/msix.h" #include "hw/pci/pcie_port.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/pci-bridge/pci_bridge_dev.c b/hw/pci-bridge/pci_bridge_dev.c index cb4809f38b..0c1383562d 100644 --- a/hw/pci-bridge/pci_bridge_dev.c +++ b/hw/pci-bridge/pci_bridge_dev.c @@ -27,7 +27,7 @@ #include "hw/pci/msi.h" #include "hw/pci/shpc.h" #include "hw/pci/slotid_cap.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/memory.h" #include "hw/pci/pci_bus.h" #include "hw/core/hotplug.h" diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expander_bridge.c index b3a5f16e22..08d40aa2ea 100644 --- a/hw/pci-bridge/pci_expander_bridge.c +++ b/hw/pci-bridge/pci_expander_bridge.c @@ -16,7 +16,7 @@ #include "hw/pci/pci_bus.h" #include "hw/pci/pci_host.h" #include "hw/pci/pcie_port.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci/pci_bridge.h" #include "hw/pci-bridge/pci_expander_bridge.h" #include "hw/cxl/cxl.h" diff --git a/hw/pci-bridge/pcie_pci_bridge.c b/hw/pci-bridge/pcie_pci_bridge.c index fce292a519..e826fb2829 100644 --- a/hw/pci-bridge/pcie_pci_bridge.c +++ b/hw/pci-bridge/pcie_pci_bridge.c @@ -16,7 +16,7 @@ #include "hw/pci/msi.h" #include "hw/pci/shpc.h" #include "hw/pci/slotid_cap.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" struct PCIEPCIBridge { diff --git a/hw/pci-bridge/pcie_root_port.c b/hw/pci-bridge/pcie_root_port.c index 22c2fdb71e..fe3ced5685 100644 --- a/hw/pci-bridge/pcie_root_port.c +++ b/hw/pci-bridge/pcie_root_port.c @@ -16,7 +16,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/pci/pcie_port.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" static void rp_aer_vector_update(PCIDevice *d) { diff --git a/hw/pci-bridge/xio3130_downstream.c b/hw/pci-bridge/xio3130_downstream.c index dc7d1aa7d7..0c3fed3053 100644 --- a/hw/pci-bridge/xio3130_downstream.c +++ b/hw/pci-bridge/xio3130_downstream.c @@ -24,7 +24,7 @@ #include "hw/pci/msi.h" #include "hw/pci/pcie.h" #include "hw/pci/pcie_port.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/pci-host/aspeed_pcie.c b/hw/pci-host/aspeed_pcie.c index 5d837f638c..27f1078e3a 100644 --- a/hw/pci-host/aspeed_pcie.c +++ b/hw/pci-host/aspeed_pcie.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/registerfields.h" #include "hw/core/irq.h" #include "hw/pci/pci_host.h" diff --git a/hw/pci-host/astro.c b/hw/pci-host/astro.c index b54f6ef2d5..00a904277c 100644 --- a/hw/pci-host/astro.c +++ b/hw/pci-host/astro.c @@ -28,7 +28,7 @@ #include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci-host/astro.h" #include "hw/hppa/hppa_hardware.h" #include "migration/vmstate.h" diff --git a/hw/pci-host/designware.c b/hw/pci-host/designware.c index 5a80502abb..019e025382 100644 --- a/hw/pci-host/designware.c +++ b/hw/pci-host/designware.c @@ -26,7 +26,7 @@ #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_host.h" #include "hw/pci/pcie_port.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/pci-host/designware.h" diff --git a/hw/pci-host/dino.c b/hw/pci-host/dino.c index e6fdb927f5..4e64e0f553 100644 --- a/hw/pci-host/dino.c +++ b/hw/pci-host/dino.c @@ -17,7 +17,7 @@ #include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci-host/dino.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/pci-host/gpex.c b/hw/pci-host/gpex.c index 3db4c8c9f0..b5074c05c0 100644 --- a/hw/pci-host/gpex.c +++ b/hw/pci-host/gpex.c @@ -34,7 +34,7 @@ #include "hw/core/irq.h" #include "hw/pci/pci_bus.h" #include "hw/pci-host/gpex.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/pci-host/grackle.c b/hw/pci-host/grackle.c index 85a4b83228..9a58f0e9b5 100644 --- a/hw/pci-host/grackle.c +++ b/hw/pci-host/grackle.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci/pci_device.h" #include "hw/core/irq.h" #include "qapi/error.h" diff --git a/hw/pci-host/gt64120.c b/hw/pci-host/gt64120.c index 3e497b5da5..2339f10a30 100644 --- a/hw/pci-host/gt64120.c +++ b/hw/pci-host/gt64120.c @@ -29,7 +29,7 @@ #include "qemu/units.h" #include "qemu/log.h" #include "qemu/bswap.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/registerfields.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" diff --git a/hw/pci-host/i440fx.c b/hw/pci-host/i440fx.c index e13bb1b53e..15354abf3b 100644 --- a/hw/pci-host/i440fx.c +++ b/hw/pci-host/i440fx.c @@ -29,7 +29,7 @@ #include "hw/pci/pci.h" #include "hw/pci/pci_host.h" #include "hw/pci-host/i440fx.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qapi/error.h" #include "migration/vmstate.h" diff --git a/hw/pci-host/mv64361.c b/hw/pci-host/mv64361.c index 9f080e4825..636228c407 100644 --- a/hw/pci-host/mv64361.c +++ b/hw/pci-host/mv64361.c @@ -16,7 +16,7 @@ #include "hw/pci/pci_host.h" #include "hw/core/irq.h" #include "hw/intc/i8259.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/address-spaces.h" #include "qemu/log.h" #include "qemu/error-report.h" diff --git a/hw/pci-host/pnv_phb.c b/hw/pci-host/pnv_phb.c index 4b0ced79b0..85fcc3b686 100644 --- a/hw/pci-host/pnv_phb.c +++ b/hw/pci-host/pnv_phb.c @@ -15,7 +15,7 @@ #include "hw/pci-host/pnv_phb3.h" #include "hw/pci-host/pnv_phb4.h" #include "hw/ppc/pnv.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" #include "system/system.h" diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c index 9808d57550..d6ab515337 100644 --- a/hw/pci-host/pnv_phb3.c +++ b/hw/pci-host/pnv_phb3.c @@ -19,7 +19,7 @@ #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" #include "system/system.h" diff --git a/hw/pci-host/pnv_phb3_msi.c b/hw/pci-host/pnv_phb3_msi.c index f6bf4e323a..66ba7b7913 100644 --- a/hw/pci-host/pnv_phb3_msi.c +++ b/hw/pci-host/pnv_phb3_msi.c @@ -14,7 +14,7 @@ #include "hw/ppc/pnv.h" #include "hw/pci/msi.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/reset.h" static uint64_t phb3_msi_ive_addr(PnvPHB3 *phb, int srcno) diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c index 9f17fc1bb4..396bc47817 100644 --- a/hw/pci-host/pnv_phb4.c +++ b/hw/pci-host/pnv_phb4.c @@ -19,7 +19,7 @@ #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_xscom.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" #include "trace.h" diff --git a/hw/pci-host/pnv_phb4_pec.c b/hw/pci-host/pnv_phb4_pec.c index 5bac1c42ed..58ec14ec2f 100644 --- a/hw/pci-host/pnv_phb4_pec.c +++ b/hw/pci-host/pnv_phb4_pec.c @@ -18,7 +18,7 @@ #include "hw/pci/pci_bus.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/system.h" #include diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c index a8e172136e..76623f78c4 100644 --- a/hw/pci-host/ppce500.c +++ b/hw/pci-host/ppce500.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c index a708758d36..bf56229051 100644 --- a/hw/pci-host/q35.c +++ b/hw/pci-host/q35.c @@ -32,7 +32,7 @@ #include "qemu/log.h" #include "hw/i386/pc.h" #include "hw/pci-host/q35.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/pci-host/raven.c b/hw/pci-host/raven.c index a587f16131..c50061996c 100644 --- a/hw/pci-host/raven.c +++ b/hw/pci-host/raven.c @@ -30,7 +30,7 @@ #include "hw/pci/pci_device.h" #include "hw/pci/pci_bus.h" #include "hw/pci/pci_host.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/i8259.h" #include "hw/core/irq.h" #include "hw/core/or-irq.h" diff --git a/hw/pci-host/remote.c b/hw/pci-host/remote.c index e6d2af4502..feaaa9adaa 100644 --- a/hw/pci-host/remote.c +++ b/hw/pci-host/remote.c @@ -26,7 +26,7 @@ #include "hw/pci/pci.h" #include "hw/pci/pci_host.h" #include "hw/pci/pcie_host.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci-host/remote.h" #include "system/memory.h" diff --git a/hw/pci-host/sabre.c b/hw/pci-host/sabre.c index c2f99b76f8..87af933dc2 100644 --- a/hw/pci-host/sabre.c +++ b/hw/pci-host/sabre.c @@ -28,7 +28,7 @@ #include "hw/sysbus.h" #include "hw/pci/pci.h" #include "hw/pci/pci_host.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_bus.h" #include "hw/core/irq.h" diff --git a/hw/pci-host/uninorth.c b/hw/pci-host/uninorth.c index 7a25f3f39f..d39546b6f4 100644 --- a/hw/pci-host/uninorth.c +++ b/hw/pci-host/uninorth.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/module.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" diff --git a/hw/pci-host/versatile.c b/hw/pci-host/versatile.c index 40dce72e67..1fdae78210 100644 --- a/hw/pci-host/versatile.c +++ b/hw/pci-host/versatile.c @@ -15,7 +15,7 @@ #include "hw/pci/pci_device.h" #include "hw/pci/pci_bus.h" #include "hw/pci/pci_host.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/pci-host/xilinx-pcie.c b/hw/pci-host/xilinx-pcie.c index ac6e61c83b..86c20377d1 100644 --- a/hw/pci-host/xilinx-pcie.c +++ b/hw/pci-host/xilinx-pcie.c @@ -22,7 +22,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "hw/pci/pci_bridge.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/irq.h" #include "hw/pci-host/xilinx-pcie.h" diff --git a/hw/pci/pci.c b/hw/pci/pci.c index a3118ac6d0..2371a91680 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -30,7 +30,7 @@ #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_bus.h" #include "hw/pci/pci_host.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/cpr.h" #include "migration/qemu-file-types.h" diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c index 76255c4cd8..e85932e41a 100644 --- a/hw/pci/pci_bridge.c +++ b/hw/pci/pci_bridge.c @@ -38,7 +38,7 @@ #include "qapi/error.h" #include "hw/acpi/acpi_aml_interface.h" #include "hw/acpi/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" /* PCI bridge subsystem vendor ID helper functions */ #define PCI_SSVID_SIZEOF 8 diff --git a/hw/pci/pci_host.c b/hw/pci/pci_host.c index 7179d99178..05f1475dc7 100644 --- a/hw/pci/pci_host.c +++ b/hw/pci/pci_host.c @@ -22,7 +22,7 @@ #include "hw/pci/pci.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_host.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/module.h" #include "hw/pci/pci_bus.h" #include "migration/vmstate.h" diff --git a/hw/pci/pcie_port.c b/hw/pci/pcie_port.c index 20b5e4cfb5..dbb6032160 100644 --- a/hw/pci/pcie_port.c +++ b/hw/pci/pcie_port.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/pci/pcie_port.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/module.h" #include "hw/core/hotplug.h" diff --git a/hw/pci/pcie_sriov.c b/hw/pci/pcie_sriov.c index c4f88f0975..34e0875d21 100644 --- a/hw/pci/pcie_sriov.c +++ b/hw/pci/pcie_sriov.c @@ -14,7 +14,7 @@ #include "hw/pci/pci_device.h" #include "hw/pci/pcie.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/range.h" #include "qapi/error.h" #include "trace.h" diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index 7c65757e21..7f164331c8 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -38,7 +38,7 @@ #include "hw/ppc/openpic.h" #include "hw/ppc/openpic_kvm.h" #include "hw/ppc/ppc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/loader.h" #include "elf.h" #include "hw/sysbus.h" diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 909a4fe257..410a3ac392 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -52,7 +52,7 @@ #include "qapi/error.h" #include "exec/target_page.h" #include "hw/ppc/ppc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/nvram/mac_nvram.h" #include "hw/core/boards.h" #include "hw/pci-host/uninorth.h" diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 8400db6c35..e679d33898 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -30,7 +30,7 @@ #include "qapi/error.h" #include "exec/target_page.h" #include "hw/ppc/ppc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "hw/input/adb.h" #include "system/system.h" diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index 2de80a5fae..bf290a7dcd 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -20,7 +20,7 @@ #include "hw/isa/vt82c686.h" #include "hw/ide/pci.h" #include "hw/i2c/smbus_eeprom.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/reset.h" #include "system/runstate.h" #include "system/qtest.h" diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index 8a50e9f0d8..f891c3a797 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -50,7 +50,7 @@ #include "hw/pci-host/pnv_phb4.h" #include "hw/ppc/xics.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv_chip.h" #include "hw/ppc/pnv_xscom.h" #include "hw/ppc/pnv_pnor.h" diff --git a/hw/ppc/pnv_adu.c b/hw/ppc/pnv_adu.c index 005fbda475..d686bfa62d 100644 --- a/hw/ppc/pnv_adu.c +++ b/hw/ppc/pnv_adu.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_adu.h" #include "hw/ppc/pnv_chip.h" diff --git a/hw/ppc/pnv_chiptod.c b/hw/ppc/pnv_chiptod.c index 540d5e365f..09a5a52ac7 100644 --- a/hw/ppc/pnv_chiptod.c +++ b/hw/ppc/pnv_chiptod.c @@ -29,7 +29,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/fdt.h" #include "hw/ppc/ppc.h" #include "hw/ppc/pnv.h" diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c index fb2dfc7ba2..59a9eee597 100644 --- a/hw/ppc/pnv_core.c +++ b/hw/ppc/pnv_core.c @@ -29,7 +29,7 @@ #include "hw/ppc/pnv_core.h" #include "hw/ppc/pnv_xscom.h" #include "hw/ppc/xics.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "helper_regs.h" static const char *pnv_core_cpu_typename(PnvCore *pc) diff --git a/hw/ppc/pnv_homer.c b/hw/ppc/pnv_homer.c index fb394cc6e0..1683513dac 100644 --- a/hw/ppc/pnv_homer.c +++ b/hw/ppc/pnv_homer.c @@ -23,7 +23,7 @@ #include "system/memory.h" #include "system/cpus.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" #include "hw/ppc/pnv_homer.h" diff --git a/hw/ppc/pnv_i2c.c b/hw/ppc/pnv_i2c.c index 213e58b455..c8e90c636f 100644 --- a/hw/ppc/pnv_i2c.c +++ b/hw/ppc/pnv_i2c.c @@ -12,7 +12,7 @@ #include "system/reset.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" diff --git a/hw/ppc/pnv_lpc.c b/hw/ppc/pnv_lpc.c index 538681bdb3..3b65c12316 100644 --- a/hw/ppc/pnv_lpc.c +++ b/hw/ppc/pnv_lpc.c @@ -24,7 +24,7 @@ #include "qemu/module.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" #include "hw/ppc/pnv_lpc.h" diff --git a/hw/ppc/pnv_n1_chiplet.c b/hw/ppc/pnv_n1_chiplet.c index 053f6473f2..c75ac671d3 100644 --- a/hw/ppc/pnv_n1_chiplet.c +++ b/hw/ppc/pnv_n1_chiplet.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_xscom.h" #include "hw/ppc/pnv_n1_chiplet.h" diff --git a/hw/ppc/pnv_nest_pervasive.c b/hw/ppc/pnv_nest_pervasive.c index 1b1b14fed9..01119e667c 100644 --- a/hw/ppc/pnv_nest_pervasive.c +++ b/hw/ppc/pnv_nest_pervasive.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_xscom.h" #include "hw/ppc/pnv_nest_pervasive.h" diff --git a/hw/ppc/pnv_occ.c b/hw/ppc/pnv_occ.c index 7e93e6a6b1..64cab3e9dc 100644 --- a/hw/ppc/pnv_occ.c +++ b/hw/ppc/pnv_occ.c @@ -22,7 +22,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_chip.h" #include "hw/ppc/pnv_xscom.h" diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c index c7cbc525b3..1083e42ab5 100644 --- a/hw/ppc/pnv_pnor.c +++ b/hw/ppc/pnv_pnor.c @@ -15,7 +15,7 @@ #include "system/blockdev.h" #include "hw/core/loader.h" #include "hw/ppc/pnv_pnor.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" static uint64_t pnv_pnor_read(void *opaque, hwaddr addr, unsigned size) diff --git a/hw/ppc/pnv_psi.c b/hw/ppc/pnv_psi.c index 1cea9375c0..264568cdfb 100644 --- a/hw/ppc/pnv_psi.c +++ b/hw/ppc/pnv_psi.c @@ -30,7 +30,7 @@ #include "hw/ppc/fdt.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_xscom.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv_psi.h" #include diff --git a/hw/ppc/pnv_sbe.c b/hw/ppc/pnv_sbe.c index 4798e12998..27383ce683 100644 --- a/hw/ppc/pnv_sbe.c +++ b/hw/ppc/pnv_sbe.c @@ -22,7 +22,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv.h" #include "hw/ppc/pnv_xscom.h" #include "hw/ppc/pnv_sbe.h" diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index 9e71037d84..491560575c 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -30,7 +30,7 @@ #include "system/reset.h" #include "hw/sysbus.h" #include "hw/intc/ppc-uic.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index fd9203d7e2..fc6dd332e8 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -15,7 +15,7 @@ #include "hw/core/irq.h" #include "hw/ppc/ppc4xx.h" #include "hw/pci-host/ppc4xx.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci/pci.h" #include "system/reset.h" #include "cpu.h" diff --git a/hw/ppc/ppc4xx_devs.c b/hw/ppc/ppc4xx_devs.c index f36c519c8b..1e6b6fec5d 100644 --- a/hw/ppc/ppc4xx_devs.c +++ b/hw/ppc/ppc4xx_devs.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "cpu.h" #include "hw/ppc/ppc4xx.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" /*****************************************************************************/ diff --git a/hw/ppc/ppc4xx_sdram.c b/hw/ppc/ppc4xx_sdram.c index 6cc2a82ac5..b2c8f96d5f 100644 --- a/hw/ppc/ppc4xx_sdram.c +++ b/hw/ppc/ppc4xx_sdram.c @@ -36,7 +36,7 @@ #include "qemu/error-report.h" #include "system/address-spaces.h" /* get_system_memory() */ #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/ppc4xx.h" #include "trace.h" diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index 90164face1..c4efd1d390 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -39,7 +39,7 @@ #include "hw/core/loader.h" #include "hw/rtc/mc146818rtc.h" #include "hw/isa/pc87312.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "exec/target_page.h" #include "system/kvm.h" #include "system/reset.h" diff --git a/hw/ppc/prep_systemio.c b/hw/ppc/prep_systemio.c index d0e42e8731..bc8b0964e7 100644 --- a/hw/ppc/prep_systemio.c +++ b/hw/ppc/prep_systemio.c @@ -26,7 +26,7 @@ #include "qemu/log.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "system/address-spaces.h" #include "qom/object.h" diff --git a/hw/ppc/rs6000_mc.c b/hw/ppc/rs6000_mc.c index a0964051d1..d87afd6d5b 100644 --- a/hw/ppc/rs6000_mc.c +++ b/hw/ppc/rs6000_mc.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "system/address-spaces.h" #include "qapi/error.h" diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c index 550aaa21fa..b6e233747e 100644 --- a/hw/ppc/sam460ex.c +++ b/hw/ppc/sam460ex.c @@ -37,7 +37,7 @@ #include "hw/ide/pci.h" #include "hw/usb/hcd-ehci.h" #include "hw/ppc/fdt.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/intc/ppc-uic.h" #include diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 7363e533e1..eb626547eb 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -68,7 +68,7 @@ #include "hw/ppc/spapr_nested.h" #include "hw/ppc/spapr_vio.h" #include "hw/ppc/vof.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci-host/spapr.h" #include "hw/pci/msi.h" diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c index 4952f9bd2c..41e37103c0 100644 --- a/hw/ppc/spapr_cpu_core.c +++ b/hw/ppc/spapr_cpu_core.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/cpu/core.h" #include "hw/ppc/spapr_cpu_core.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "target/ppc/cpu.h" #include "hw/ppc/spapr.h" diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c index 32a2edbe5c..3a9c96d939 100644 --- a/hw/ppc/spapr_irq.c +++ b/hw/ppc/spapr_irq.c @@ -17,7 +17,7 @@ #include "hw/ppc/spapr_xive.h" #include "hw/ppc/xics.h" #include "hw/ppc/xics_spapr.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "cpu-models.h" #include "system/kvm.h" diff --git a/hw/ppc/spapr_nvdimm.c b/hw/ppc/spapr_nvdimm.c index 72b4a6329f..6647428391 100644 --- a/hw/ppc/spapr_nvdimm.c +++ b/hw/ppc/spapr_nvdimm.c @@ -34,7 +34,7 @@ #include "block/thread-pool.h" #include "migration/vmstate.h" #include "qemu/pmem.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" /* DIMM health bitmap bitmap indicators. Taken from kernel's papr_scm.c */ /* SCM device is unable to persist memory contents */ diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index 523edaa7b6..a7c064be33 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -43,7 +43,7 @@ #include "hw/pci/pci_bus.h" #include "hw/pci/pci_ids.h" #include "hw/ppc/spapr_drc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/device_tree.h" #include "system/kvm.h" #include "system/hostmem.h" diff --git a/hw/ppc/spapr_rng.c b/hw/ppc/spapr_rng.c index 6fec607037..846ea3e3b6 100644 --- a/hw/ppc/spapr_rng.c +++ b/hw/ppc/spapr_rng.c @@ -25,7 +25,7 @@ #include "system/device_tree.h" #include "system/rng.h" #include "hw/ppc/spapr.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "kvm_ppc.h" #include "qom/object.h" diff --git a/hw/ppc/spapr_tpm_proxy.c b/hw/ppc/spapr_tpm_proxy.c index 1297b3ad56..a48dab7e7a 100644 --- a/hw/ppc/spapr_tpm_proxy.c +++ b/hw/ppc/spapr_tpm_proxy.c @@ -15,7 +15,7 @@ #include "qemu/error-report.h" #include "system/reset.h" #include "hw/ppc/spapr.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #define TPM_SPAPR_BUFSIZE 4096 diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index 8b5f4eb57a..cf2d10ecb2 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -43,7 +43,7 @@ #include "hw/intc/ppc-uic.h" #include "hw/ppc/ppc.h" #include "hw/ppc/ppc4xx.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include diff --git a/hw/remote/proxy.c b/hw/remote/proxy.c index 18e0f7a064..5081d67e7f 100644 --- a/hw/remote/proxy.c +++ b/hw/remote/proxy.c @@ -12,7 +12,7 @@ #include "hw/pci/pci.h" #include "qapi/error.h" #include "io/channel-util.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "monitor/monitor.h" #include "migration/blocker.h" #include "qemu/sockets.h" diff --git a/hw/riscv/numa.c b/hw/riscv/numa.c index 726df2daf1..24a803f7fa 100644 --- a/hw/riscv/numa.c +++ b/hw/riscv/numa.c @@ -21,7 +21,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/riscv/numa.h" #include "system/device_tree.h" diff --git a/hw/riscv/riscv-iommu-pci.c b/hw/riscv/riscv-iommu-pci.c index cdb4a7a8f0..5f7d359204 100644 --- a/hw/riscv/riscv-iommu-pci.c +++ b/hw/riscv/riscv-iommu-pci.c @@ -21,7 +21,7 @@ #include "hw/pci/msi.h" #include "hw/pci/msix.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/riscv/riscv_hart.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/riscv/riscv-iommu-sys.c b/hw/riscv/riscv-iommu-sys.c index 7d8c6f1c7c..2a11c4dab6 100644 --- a/hw/riscv/riscv-iommu-sys.c +++ b/hw/riscv/riscv-iommu-sys.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/riscv/riscv-iommu.c b/hw/riscv/riscv-iommu.c index f8656ec04b..baaadadda1 100644 --- a/hw/riscv/riscv-iommu.c +++ b/hw/riscv/riscv-iommu.c @@ -21,7 +21,7 @@ #include "exec/target_page.h" #include "hw/pci/pci_bus.h" #include "hw/pci/pci_device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/riscv/riscv_hart.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/riscv/riscv-iommu.h b/hw/riscv/riscv-iommu.h index a31aa62144..2dabd86941 100644 --- a/hw/riscv/riscv-iommu.h +++ b/hw/riscv/riscv-iommu.h @@ -20,7 +20,7 @@ #define HW_RISCV_IOMMU_STATE_H #include "qom/object.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/dma.h" #include "hw/riscv/iommu.h" #include "hw/riscv/riscv-iommu-bits.h" diff --git a/hw/riscv/riscv_hart.c b/hw/riscv/riscv_hart.c index 33cbc9873e..3118748794 100644 --- a/hw/riscv/riscv_hart.c +++ b/hw/riscv/riscv_hart.c @@ -26,7 +26,7 @@ #include "qemu/cutils.h" #include "hw/sysbus.h" #include "target/riscv/cpu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/riscv/riscv_hart.h" #include "qemu/error-report.h" diff --git a/hw/riscv/shakti_c.c b/hw/riscv/shakti_c.c index d309ea2e39..49a39b3021 100644 --- a/hw/riscv/shakti_c.c +++ b/hw/riscv/shakti_c.c @@ -24,7 +24,7 @@ #include "hw/intc/sifive_plic.h" #include "hw/intc/riscv_aclint.h" #include "system/system.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/address-spaces.h" #include "hw/riscv/boot.h" diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 9cb4f16432..d79add5576 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -26,7 +26,7 @@ #include "hw/core/boards.h" #include "hw/core/loader.h" #include "hw/sysbus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/char/serial-mm.h" #include "target/riscv/cpu.h" #include "hw/core/sysbus-fdt.h" diff --git a/hw/riscv/xiangshan_kmh.c b/hw/riscv/xiangshan_kmh.c index e831954cb3..436e51c1c5 100644 --- a/hw/riscv/xiangshan_kmh.c +++ b/hw/riscv/xiangshan_kmh.c @@ -37,7 +37,7 @@ #include "hw/intc/riscv_aclint.h" #include "hw/intc/riscv_aplic.h" #include "hw/intc/riscv_imsic.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/riscv/boot.h" #include "hw/riscv/xiangshan_kmh.h" #include "hw/riscv/riscv_hart.h" diff --git a/hw/rtc/allwinner-rtc.c b/hw/rtc/allwinner-rtc.c index a747bff534..0ffd38cf78 100644 --- a/hw/rtc/allwinner-rtc.c +++ b/hw/rtc/allwinner-rtc.c @@ -23,7 +23,7 @@ #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/rtc/allwinner-rtc.h" #include "system/rtc.h" #include "trace.h" diff --git a/hw/rtc/goldfish_rtc.c b/hw/rtc/goldfish_rtc.c index 67f9eacb22..79d2a04c72 100644 --- a/hw/rtc/goldfish_rtc.c +++ b/hw/rtc/goldfish_rtc.c @@ -23,7 +23,7 @@ #include "hw/rtc/goldfish_rtc.h" #include "migration/vmstate.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/bitops.h" #include "qemu/timer.h" diff --git a/hw/rtc/m48t59-isa.c b/hw/rtc/m48t59-isa.c index 9e2f6563a0..ea0f307aa0 100644 --- a/hw/rtc/m48t59-isa.c +++ b/hw/rtc/m48t59-isa.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/rtc/m48t59.h" #include "m48t59-internal.h" #include "qapi/error.h" diff --git a/hw/rtc/m48t59.c b/hw/rtc/m48t59.c index 0be17b3e79..be8efb8c0a 100644 --- a/hw/rtc/m48t59.c +++ b/hw/rtc/m48t59.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/rtc/m48t59.h" #include "qemu/timer.h" #include "system/runstate.h" diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c index 4c4c1c8421..56f8c79479 100644 --- a/hw/rtc/mc146818rtc.c +++ b/hw/rtc/mc146818rtc.c @@ -29,7 +29,7 @@ #include "hw/acpi/acpi_aml_interface.h" #include "hw/intc/kvm_irqcount.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/timer.h" #include "system/system.h" diff --git a/hw/rtc/pl031.c b/hw/rtc/pl031.c index 2ec8ac8add..847349b407 100644 --- a/hw/rtc/pl031.c +++ b/hw/rtc/pl031.c @@ -15,7 +15,7 @@ #include "hw/rtc/pl031.h" #include "migration/vmstate.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/timer.h" #include "system/system.h" diff --git a/hw/rtc/rs5c372.c b/hw/rtc/rs5c372.c index bb924534a7..58f12b836d 100644 --- a/hw/rtc/rs5c372.c +++ b/hw/rtc/rs5c372.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/i2c/i2c.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/resettable.h" #include "migration/vmstate.h" #include "qemu/bcd.h" diff --git a/hw/rx/rx62n.c b/hw/rx/rx62n.c index 3fe9a4a518..e1fa3d5661 100644 --- a/hw/rx/rx62n.c +++ b/hw/rx/rx62n.c @@ -27,7 +27,7 @@ #include "hw/rx/rx62n.h" #include "hw/core/loader.h" #include "hw/sysbus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/system.h" #include "qobject/qlist.h" #include "qom/object.h" diff --git a/hw/s390x/3270-ccw.c b/hw/s390x/3270-ccw.c index 3f0d384fd8..51c6828ff1 100644 --- a/hw/s390x/3270-ccw.c +++ b/hw/s390x/3270-ccw.c @@ -15,7 +15,7 @@ #include "qemu/module.h" #include "hw/s390x/css.h" #include "hw/s390x/css-bridge.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/s390x/3270-ccw.h" /* Handle READ ccw commands from guest */ diff --git a/hw/s390x/ccw-device.c b/hw/s390x/ccw-device.c index 8be1813b9e..25c4273279 100644 --- a/hw/s390x/ccw-device.c +++ b/hw/s390x/ccw-device.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "ccw-device.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/module.h" #include "ipl.h" #include "qapi/visitor.h" diff --git a/hw/s390x/cpu-topology.c b/hw/s390x/cpu-topology.c index 9182ddb628..efe88bc967 100644 --- a/hw/s390x/cpu-topology.c +++ b/hw/s390x/cpu-topology.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "target/s390x/cpu.h" #include "hw/s390x/s390-virtio-ccw.h" diff --git a/hw/s390x/css-bridge.c b/hw/s390x/css-bridge.c index f3b6ef5630..887794beef 100644 --- a/hw/s390x/css-bridge.c +++ b/hw/s390x/css-bridge.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/hotplug.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qemu/bitops.h" #include "qemu/module.h" diff --git a/hw/s390x/css.c b/hw/s390x/css.c index 53444f6828..d2c0af6a9b 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -16,7 +16,7 @@ #include "qemu/error-report.h" #include "system/address-spaces.h" #include "hw/s390x/ioinst.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/s390x/css.h" #include "trace.h" #include "hw/s390x/s390_flic.h" diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index e0a04ab1a2..b119a87a86 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -20,7 +20,7 @@ #include "system/tcg.h" #include "elf.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "hw/s390x/virtio-ccw.h" #include "hw/s390x/vfio-ccw.h" diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index 3eea2f0c9d..ff415b6312 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -22,7 +22,7 @@ #include "hw/s390x/s390-virtio-ccw.h" #include "hw/core/boards.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/msi.h" #include "qemu/error-report.h" diff --git a/hw/s390x/s390-skeys.c b/hw/s390x/s390-skeys.c index 8eeecfd58f..d974d97b5e 100644 --- a/hw/s390x/s390-skeys.c +++ b/hw/s390x/s390-skeys.c @@ -13,7 +13,7 @@ #include "qemu/units.h" #include "exec/target_page.h" #include "hw/s390x/s390-virtio-ccw.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/s390x/storage-keys.h" #include "qapi/error.h" #include "qapi/qapi-commands-machine.h" diff --git a/hw/s390x/s390-stattrib.c b/hw/s390x/s390-stattrib.c index aa18537291..f149af16ac 100644 --- a/hw/s390x/s390-stattrib.c +++ b/hw/s390x/s390-stattrib.c @@ -14,7 +14,7 @@ #include "exec/target_page.h" #include "migration/qemu-file.h" #include "migration/register.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/s390x/storage-attributes.h" #include "qemu/error-report.h" #include "qapi/error.h" diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index c5e0691a26..8314655ec2 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -36,7 +36,7 @@ #include "migration/register.h" #include "target/s390x/cpu_models.h" #include "hw/core/nmi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/s390x/tod.h" #include "system/system.h" #include "system/cpus.h" diff --git a/hw/s390x/vhost-scsi-ccw.c b/hw/s390x/vhost-scsi-ccw.c index 8341b23a95..1e68459eb0 100644 --- a/hw/s390x/vhost-scsi-ccw.c +++ b/hw/s390x/vhost-scsi-ccw.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/vhost-user-fs-ccw.c b/hw/s390x/vhost-user-fs-ccw.c index cc1b8227fc..35a77e4cb7 100644 --- a/hw/s390x/vhost-user-fs-ccw.c +++ b/hw/s390x/vhost-user-fs-ccw.c @@ -8,7 +8,7 @@ * directory. */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "hw/virtio/vhost-user-fs.h" #include "virtio-ccw.h" diff --git a/hw/s390x/vhost-vsock-ccw.c b/hw/s390x/vhost-vsock-ccw.c index 552e9e86a4..efdfdeec84 100644 --- a/hw/s390x/vhost-vsock-ccw.c +++ b/hw/s390x/vhost-vsock-ccw.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-9p.c b/hw/s390x/virtio-ccw-9p.c index 72bf6ec80c..d8612f7cd1 100644 --- a/hw/s390x/virtio-ccw-9p.c +++ b/hw/s390x/virtio-ccw-9p.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-balloon.c b/hw/s390x/virtio-ccw-balloon.c index 399b40f366..4f67310b69 100644 --- a/hw/s390x/virtio-ccw-balloon.c +++ b/hw/s390x/virtio-ccw-balloon.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-blk.c b/hw/s390x/virtio-ccw-blk.c index 7d8c4a75ce..939dcaeed3 100644 --- a/hw/s390x/virtio-ccw-blk.c +++ b/hw/s390x/virtio-ccw-blk.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-crypto.c b/hw/s390x/virtio-ccw-crypto.c index 75e714603b..2c4ee2ca39 100644 --- a/hw/s390x/virtio-ccw-crypto.c +++ b/hw/s390x/virtio-ccw-crypto.c @@ -9,7 +9,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-gpu.c b/hw/s390x/virtio-ccw-gpu.c index edb6a47d37..4120c6bcb9 100644 --- a/hw/s390x/virtio-ccw-gpu.c +++ b/hw/s390x/virtio-ccw-gpu.c @@ -9,7 +9,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-input.c b/hw/s390x/virtio-ccw-input.c index 2250d8cf98..a9ec60428c 100644 --- a/hw/s390x/virtio-ccw-input.c +++ b/hw/s390x/virtio-ccw-input.c @@ -9,7 +9,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-mem.c b/hw/s390x/virtio-ccw-mem.c index daa485d189..dea30aacfb 100644 --- a/hw/s390x/virtio-ccw-mem.c +++ b/hw/s390x/virtio-ccw-mem.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" #include "virtio-ccw-mem.h" diff --git a/hw/s390x/virtio-ccw-net.c b/hw/s390x/virtio-ccw-net.c index a7d4afbeb9..30e7055ab2 100644 --- a/hw/s390x/virtio-ccw-net.c +++ b/hw/s390x/virtio-ccw-net.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-rng.c b/hw/s390x/virtio-ccw-rng.c index 3263287d45..0647621e33 100644 --- a/hw/s390x/virtio-ccw-rng.c +++ b/hw/s390x/virtio-ccw-rng.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-scsi.c b/hw/s390x/virtio-ccw-scsi.c index 06b4c6c4a5..c181a2b769 100644 --- a/hw/s390x/virtio-ccw-scsi.c +++ b/hw/s390x/virtio-ccw-scsi.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/s390x/virtio-ccw-serial.c b/hw/s390x/virtio-ccw-serial.c index 0dac590c08..7ff07a0841 100644 --- a/hw/s390x/virtio-ccw-serial.c +++ b/hw/s390x/virtio-ccw-serial.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "hw/virtio/virtio.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-serial.h" #include "virtio-ccw.h" diff --git a/hw/scsi/megasas.c b/hw/scsi/megasas.c index 844643d916..f62e420a91 100644 --- a/hw/scsi/megasas.c +++ b/hw/scsi/megasas.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/dma.h" #include "system/block-backend.h" #include "system/rtc.h" diff --git a/hw/scsi/mptsas.c b/hw/scsi/mptsas.c index 4ada35b7ec..e4a7b2fee4 100644 --- a/hw/scsi/mptsas.c +++ b/hw/scsi/mptsas.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/dma.h" #include "hw/pci/msi.h" #include "qemu/iov.h" diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c index b9b115deed..f310ddafb9 100644 --- a/hw/scsi/scsi-bus.c +++ b/hw/scsi/scsi-bus.c @@ -4,7 +4,7 @@ #include "qemu/module.h" #include "qemu/option.h" #include "qemu/hw-version.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/scsi/scsi.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index b4782c6248..9c78c9e18e 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -36,7 +36,7 @@ #include "system/block-backend.h" #include "system/blockdev.h" #include "hw/block/block.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "system/dma.h" #include "system/system.h" diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c index 9e380a2109..2ac4fd66c3 100644 --- a/hw/scsi/scsi-generic.c +++ b/hw/scsi/scsi-generic.c @@ -18,7 +18,7 @@ #include "qemu/module.h" #include "hw/scsi/scsi.h" #include "migration/qemu-file-types.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/scsi/emulation.h" #include "system/block-backend.h" diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c index a6591319db..b4c8f94d22 100644 --- a/hw/scsi/spapr_vscsi.c +++ b/hw/scsi/spapr_vscsi.c @@ -40,7 +40,7 @@ #include "srp.h" #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_vio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "viosrp.h" #include "trace.h" diff --git a/hw/scsi/vhost-scsi.c b/hw/scsi/vhost-scsi.c index 573a44b2b3..699863cc10 100644 --- a/hw/scsi/vhost-scsi.c +++ b/hw/scsi/vhost-scsi.c @@ -27,7 +27,7 @@ #include "hw/virtio/virtio-scsi.h" #include "hw/virtio/virtio-bus.h" #include "hw/core/fw-path-provider.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/cutils.h" #include "system/system.h" diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 2c79522b09..89f06066b7 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -20,7 +20,7 @@ #include "qemu/error-report.h" #include "hw/core/fw-path-provider.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/vhost.h" #include "hw/virtio/vhost-backend.h" diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c index 93e87c459c..774968d8c7 100644 --- a/hw/scsi/virtio-scsi.c +++ b/hw/scsi/virtio-scsi.c @@ -24,7 +24,7 @@ #include "qemu/module.h" #include "system/block-backend.h" #include "system/dma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/scsi/scsi.h" #include "scsi/constants.h" #include "hw/virtio/iothread-vq-mapping.h" diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index 7c98b1b8ea..b3cdc255b4 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -33,7 +33,7 @@ #include "migration/vmstate.h" #include "scsi/constants.h" #include "hw/pci/msi.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "vmw_pvscsi.h" #include "trace.h" #include "qom/object.h" diff --git a/hw/sd/allwinner-sdhost.c b/hw/sd/allwinner-sdhost.c index 4c039b9520..87bb7df903 100644 --- a/hw/sd/allwinner-sdhost.c +++ b/hw/sd/allwinner-sdhost.c @@ -24,7 +24,7 @@ #include "qapi/error.h" #include "system/blockdev.h" #include "system/dma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/irq.h" #include "hw/sd/allwinner-sdhost.h" #include "migration/vmstate.h" diff --git a/hw/sd/aspeed_sdhci.c b/hw/sd/aspeed_sdhci.c index 330e6a19c9..6684f8221a 100644 --- a/hw/sd/aspeed_sdhci.c +++ b/hw/sd/aspeed_sdhci.c @@ -13,7 +13,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #define ASPEED_SDHCI_INFO 0x00 diff --git a/hw/sd/sd.c b/hw/sd/sd.c index ff45c8e70c..3df331d561 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -42,7 +42,7 @@ #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/bitmap.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/error-report.h" #include "qemu/timer.h" diff --git a/hw/sd/sdhci-pci.c b/hw/sd/sdhci-pci.c index 0e38bed49a..27001e5e1e 100644 --- a/hw/sd/sdhci-pci.c +++ b/hw/sd/sdhci-pci.c @@ -19,7 +19,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sd/sdhci.h" #include "sdhci-internal.h" diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index 39185f0a98..9146e0cde0 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -29,7 +29,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/dma.h" #include "qemu/timer.h" #include "qemu/bitops.h" diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 3aacbd0387..c6e350af2d 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -19,7 +19,7 @@ #include "system/blockdev.h" #include "hw/ssi/ssi.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sd/sd.h" #include "qapi/error.h" #include "qemu/crc-ccitt.h" diff --git a/hw/sensor/isl_pmbus_vr.c b/hw/sensor/isl_pmbus_vr.c index e8d29b08ff..0fad04def7 100644 --- a/hw/sensor/isl_pmbus_vr.c +++ b/hw/sensor/isl_pmbus_vr.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/sensor/isl_pmbus_vr.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/visitor.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c index 9e8c2fa8d1..35db5cbbcd 100644 --- a/hw/sh4/r2d.c +++ b/hw/sh4/r2d.c @@ -35,7 +35,7 @@ #include "system/system.h" #include "hw/core/boards.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "net/net.h" #include "sh7750_regs.h" #include "hw/ide/mmio.h" diff --git a/hw/sh4/sh7750.c b/hw/sh4/sh7750.c index 6cb42e3441..aff45320bc 100644 --- a/hw/sh4/sh7750.c +++ b/hw/sh4/sh7750.c @@ -30,7 +30,7 @@ #include "hw/sh4/sh.h" #include "system/system.h" #include "target/sh4/cpu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "sh7750_regs.h" #include "sh7750_regnames.h" diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index 50f1cf9170..ec9a386b48 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -33,7 +33,7 @@ #include "hw/core/irq.h" #include "qemu/timer.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "system/system.h" #include "system/qtest.h" #include "system/reset.h" diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index fa52451303..2e3952c917 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -43,7 +43,7 @@ #include "hw/core/boards.h" #include "hw/scsi/esp.h" #include "hw/nvram/sun_nvram.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/nvram/chrp_nvram.h" #include "hw/nvram/fw_cfg.h" #include "hw/char/escc.h" diff --git a/hw/sparc/sun4m_iommu.c b/hw/sparc/sun4m_iommu.c index 9ce2e3b7fc..10c4786dad 100644 --- a/hw/sparc/sun4m_iommu.c +++ b/hw/sparc/sun4m_iommu.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sparc/sun4m_iommu.h" #include "hw/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index c0fb421d2b..14b47c037b 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -33,7 +33,7 @@ #include "hw/pci/pci.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_host.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci-host/sabre.h" #include "hw/char/serial-isa.h" #include "hw/char/serial-mm.h" diff --git a/hw/ssi/aspeed_smc.c b/hw/ssi/aspeed_smc.c index 9819904a4a..6bef856c62 100644 --- a/hw/ssi/aspeed_smc.c +++ b/hw/ssi/aspeed_smc.c @@ -34,7 +34,7 @@ #include "trace.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ssi/aspeed_smc.h" /* CE Type Setting Register */ diff --git a/hw/ssi/ibex_spi_host.c b/hw/ssi/ibex_spi_host.c index 63f4cce512..a7dc0c2f03 100644 --- a/hw/ssi/ibex_spi_host.c +++ b/hw/ssi/ibex_spi_host.c @@ -29,7 +29,7 @@ #include "hw/registerfields.h" #include "hw/ssi/ibex_spi_host.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/ssi/npcm7xx_fiu.c b/hw/ssi/npcm7xx_fiu.c index bc5e4e20cc..02707de350 100644 --- a/hw/ssi/npcm7xx_fiu.c +++ b/hw/ssi/npcm7xx_fiu.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ssi/npcm7xx_fiu.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/ssi/pnv_spi.c b/hw/ssi/pnv_spi.c index e59386712b..1cf3a4416d 100644 --- a/hw/ssi/pnv_spi.c +++ b/hw/ssi/pnv_spi.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/pnv_xscom.h" #include "hw/ssi/pnv_spi.h" #include "hw/ssi/pnv_spi_regs.h" diff --git a/hw/ssi/sifive_spi.c b/hw/ssi/sifive_spi.c index c66fae80a9..577cd5d2d8 100644 --- a/hw/ssi/sifive_spi.c +++ b/hw/ssi/sifive_spi.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/ssi/ssi.h" #include "qemu/fifo8.h" diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c index d0de640fe6..3a4fade2d5 100644 --- a/hw/ssi/ssi.c +++ b/hw/ssi/ssi.c @@ -13,7 +13,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ssi/ssi.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c index 9e8656b556..6dcdd63916 100644 --- a/hw/ssi/xilinx_spi.c +++ b/hw/ssi/xilinx_spi.c @@ -32,7 +32,7 @@ #include "qemu/fifo8.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/ssi/ssi.h" #include "qom/object.h" diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c index 5fa9bf965f..e3c6035c16 100644 --- a/hw/ssi/xilinx_spips.c +++ b/hw/ssi/xilinx_spips.c @@ -26,7 +26,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/log.h" #include "qemu/module.h" #include "qemu/bitops.h" diff --git a/hw/ssi/xlnx-versal-ospi.c b/hw/ssi/xlnx-versal-ospi.c index 88fafb5a2e..93cdc9d399 100644 --- a/hw/ssi/xlnx-versal-ospi.c +++ b/hw/ssi/xlnx-versal-ospi.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/bitops.h" #include "qemu/log.h" #include "hw/core/irq.h" diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c index a0b73fb731..a2363a89a5 100644 --- a/hw/timer/a9gtimer.c +++ b/hw/timer/a9gtimer.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "hw/hw.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/a9gtimer.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/timer/allwinner-a10-pit.c b/hw/timer/allwinner-a10-pit.c index 6c0d3b556a..d52669787e 100644 --- a/hw/timer/allwinner-a10-pit.c +++ b/hw/timer/allwinner-a10-pit.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/timer/allwinner-a10-pit.h" #include "migration/vmstate.h" diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c index adec87cc8d..869db913d4 100644 --- a/hw/timer/arm_mptimer.c +++ b/hw/timer/arm_mptimer.c @@ -23,7 +23,7 @@ #include "hw/hw.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/arm_mptimer.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c index 8d8b250698..c38e56f5b8 100644 --- a/hw/timer/arm_timer.c +++ b/hw/timer/arm_timer.c @@ -13,7 +13,7 @@ #include "qemu/timer.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/module.h" #include "qemu/log.h" #include "qom/object.h" diff --git a/hw/timer/aspeed_timer.c b/hw/timer/aspeed_timer.c index b08a737bc9..20adb7decb 100644 --- a/hw/timer/aspeed_timer.c +++ b/hw/timer/aspeed_timer.c @@ -19,7 +19,7 @@ #include "qemu/timer.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #define TIMER_NR_REGS 4 diff --git a/hw/timer/avr_timer16.c b/hw/timer/avr_timer16.c index 0f1fda4218..1a65a61ed2 100644 --- a/hw/timer/avr_timer16.c +++ b/hw/timer/avr_timer16.c @@ -35,7 +35,7 @@ #include "qapi/error.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/avr_timer16.h" #include "trace.h" diff --git a/hw/timer/cmsdk-apb-dualtimer.c b/hw/timer/cmsdk-apb-dualtimer.c index 5f4848ef61..bcb6f8e43d 100644 --- a/hw/timer/cmsdk-apb-dualtimer.c +++ b/hw/timer/cmsdk-apb-dualtimer.c @@ -23,7 +23,7 @@ #include "qemu/module.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/registerfields.h" #include "hw/core/qdev-clock.h" #include "hw/timer/cmsdk-apb-dualtimer.h" diff --git a/hw/timer/grlib_gptimer.c b/hw/timer/grlib_gptimer.c index 82d0d9d762..dbce6f736f 100644 --- a/hw/timer/grlib_gptimer.c +++ b/hw/timer/grlib_gptimer.c @@ -30,7 +30,7 @@ #include "qemu/timer.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/module.h" #include "trace.h" diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c index 1387c417ae..82006df0e3 100644 --- a/hw/timer/hpet.c +++ b/hw/timer/hpet.c @@ -29,7 +29,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/timer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/hpet.h" #include "hw/sysbus.h" #include "hw/rtc/mc146818rtc.h" diff --git a/hw/timer/ibex_timer.c b/hw/timer/ibex_timer.c index d2c4f86e03..ee18652189 100644 --- a/hw/timer/ibex_timer.c +++ b/hw/timer/ibex_timer.c @@ -30,7 +30,7 @@ #include "qemu/timer.h" #include "hw/timer/ibex_timer.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "target/riscv/cpu.h" #include "migration/vmstate.h" diff --git a/hw/timer/mss-timer.c b/hw/timer/mss-timer.c index 946e87c99a..bd3f3e845f 100644 --- a/hw/timer/mss-timer.c +++ b/hw/timer/mss-timer.c @@ -27,7 +27,7 @@ #include "qemu/module.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/mss-timer.h" #include "migration/vmstate.h" diff --git a/hw/timer/npcm7xx_timer.c b/hw/timer/npcm7xx_timer.c index 0e62add74d..16b62d3374 100644 --- a/hw/timer/npcm7xx_timer.c +++ b/hw/timer/npcm7xx_timer.c @@ -18,7 +18,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/npcm7xx_timer.h" #include "migration/vmstate.h" #include "qemu/bitops.h" diff --git a/hw/timer/nrf51_timer.c b/hw/timer/nrf51_timer.c index 0688f49eef..b0443b9482 100644 --- a/hw/timer/nrf51_timer.c +++ b/hw/timer/nrf51_timer.c @@ -17,7 +17,7 @@ #include "hw/arm/nrf51.h" #include "hw/core/irq.h" #include "hw/timer/nrf51_timer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/timer/pxa2xx_timer.c b/hw/timer/pxa2xx_timer.c index d18d98b233..b875c05052 100644 --- a/hw/timer/pxa2xx_timer.c +++ b/hw/timer/pxa2xx_timer.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/timer.h" #include "system/runstate.h" #include "hw/sysbus.h" diff --git a/hw/timer/renesas_cmt.c b/hw/timer/renesas_cmt.c index c62dad690f..35962e66c3 100644 --- a/hw/timer/renesas_cmt.c +++ b/hw/timer/renesas_cmt.c @@ -25,7 +25,7 @@ #include "qemu/log.h" #include "hw/core/irq.h" #include "hw/registerfields.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/renesas_cmt.h" #include "migration/vmstate.h" diff --git a/hw/timer/renesas_tmr.c b/hw/timer/renesas_tmr.c index 1fc539e949..2e7d7d4543 100644 --- a/hw/timer/renesas_tmr.c +++ b/hw/timer/renesas_tmr.c @@ -25,7 +25,7 @@ #include "qemu/log.h" #include "hw/core/irq.h" #include "hw/registerfields.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/renesas_tmr.h" #include "migration/vmstate.h" diff --git a/hw/timer/sifive_pwm.c b/hw/timer/sifive_pwm.c index f1882ae6bc..8fda5445e7 100644 --- a/hw/timer/sifive_pwm.c +++ b/hw/timer/sifive_pwm.c @@ -28,7 +28,7 @@ #include "trace.h" #include "hw/core/irq.h" #include "hw/timer/sifive_pwm.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/registerfields.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/timer/slavio_timer.c b/hw/timer/slavio_timer.c index f66b3aaa43..07359a6fe7 100644 --- a/hw/timer/slavio_timer.c +++ b/hw/timer/slavio_timer.c @@ -26,7 +26,7 @@ #include "qemu/timer.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/timer/sse-timer.c b/hw/timer/sse-timer.c index 1de882f3eb..50d1de5805 100644 --- a/hw/timer/sse-timer.c +++ b/hw/timer/sse-timer.c @@ -45,7 +45,7 @@ #include "hw/registerfields.h" #include "hw/core/clock.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" REG32(CNTPCT_LO, 0x0) diff --git a/hw/timer/stm32f2xx_timer.c b/hw/timer/stm32f2xx_timer.c index 979b6ad5ba..0442ac64ad 100644 --- a/hw/timer/stm32f2xx_timer.c +++ b/hw/timer/stm32f2xx_timer.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/timer/stm32f2xx_timer.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/timer/xilinx_timer.c b/hw/timer/xilinx_timer.c index fbc1001591..57a2c7101d 100644 --- a/hw/timer/xilinx_timer.c +++ b/hw/timer/xilinx_timer.c @@ -30,7 +30,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/tpm/tpm_crb.c b/hw/tpm/tpm_crb.c index bc7a78f898..8723536f93 100644 --- a/hw/tpm/tpm_crb.c +++ b/hw/tpm/tpm_crb.c @@ -19,7 +19,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "system/address-spaces.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/pci/pci_ids.h" #include "hw/acpi/tpm.h" #include "migration/vmstate.h" diff --git a/hw/tpm/tpm_prop.h b/hw/tpm/tpm_prop.h index c4df74805a..876f5c80fc 100644 --- a/hw/tpm/tpm_prop.h +++ b/hw/tpm/tpm_prop.h @@ -23,7 +23,7 @@ #define HW_TPM_PROP_H #include "system/tpm_backend.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" extern const PropertyInfo qdev_prop_tpm; diff --git a/hw/tpm/tpm_spapr.c b/hw/tpm/tpm_spapr.c index ea608ba4c8..19075d1f01 100644 --- a/hw/tpm/tpm_spapr.c +++ b/hw/tpm/tpm_spapr.c @@ -16,7 +16,7 @@ #include "qemu/osdep.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "system/tpm_backend.h" diff --git a/hw/tpm/tpm_tis_common.c b/hw/tpm/tpm_tis_common.c index 1615be2933..f594b15b8a 100644 --- a/hw/tpm/tpm_tis_common.c +++ b/hw/tpm/tpm_tis_common.c @@ -32,7 +32,7 @@ #include "hw/acpi/tpm.h" #include "hw/pci/pci_ids.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "system/tpm_backend.h" #include "system/tpm_util.h" diff --git a/hw/tpm/tpm_tis_isa.c b/hw/tpm/tpm_tis_isa.c index dce83057a9..61e95434f5 100644 --- a/hw/tpm/tpm_tis_isa.c +++ b/hw/tpm/tpm_tis_isa.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/acpi/tpm.h" #include "tpm_prop.h" diff --git a/hw/tpm/tpm_tis_sysbus.c b/hw/tpm/tpm_tis_sysbus.c index 2ffa85852a..07c3040130 100644 --- a/hw/tpm/tpm_tis_sysbus.c +++ b/hw/tpm/tpm_tis_sysbus.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/acpi/tpm.h" #include "tpm_prop.h" diff --git a/hw/tricore/triboard.c b/hw/tricore/triboard.c index db6f2b765a..23f11cf0a1 100644 --- a/hw/tricore/triboard.c +++ b/hw/tricore/triboard.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "net/net.h" #include "hw/core/loader.h" #include "elf.h" diff --git a/hw/tricore/tricore_testdevice.c b/hw/tricore/tricore_testdevice.c index e8daf95298..d3ffc5fe9f 100644 --- a/hw/tricore/tricore_testdevice.c +++ b/hw/tricore/tricore_testdevice.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/sysbus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/tricore/tricore_testdevice.h" static void tricore_testdevice_write(void *opaque, hwaddr offset, diff --git a/hw/uefi/var-service-sysbus.c b/hw/uefi/var-service-sysbus.c index a5aa218e26..3bf9335650 100644 --- a/hw/uefi/var-service-sysbus.c +++ b/hw/uefi/var-service-sysbus.c @@ -6,7 +6,7 @@ #include "qemu/osdep.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/uefi/hardware-info.h" diff --git a/hw/usb/bus.c b/hw/usb/bus.c index c1dd142965..3b6fbd46ac 100644 --- a/hw/usb/bus.c +++ b/hw/usb/bus.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" #include "qapi/error.h" #include "qapi/qapi-commands-machine.h" diff --git a/hw/usb/canokey.c b/hw/usb/canokey.c index acd4ea30d9..c3baedac2c 100644 --- a/hw/usb/canokey.c +++ b/hw/usb/canokey.c @@ -13,7 +13,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "hw/usb/usb.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #include "desc.h" #include "canokey.h" diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c index c21cefd82d..985f21997a 100644 --- a/hw/usb/ccid-card-emulated.c +++ b/hw/usb/ccid-card-emulated.c @@ -34,7 +34,7 @@ #include "qemu/main-loop.h" #include "qemu/module.h" #include "ccid.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qom/object.h" diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index c8aada0988..306dd7d914 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -13,7 +13,7 @@ #include "qemu/units.h" #include #include "chardev/char-fe.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/vmstate.h" #include "qemu/error-report.h" diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c index 988824ea75..dfda2dccc0 100644 --- a/hw/usb/dev-audio.c +++ b/hw/usb/dev-audio.c @@ -31,7 +31,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c index 296e9d0d85..ae19d60203 100644 --- a/hw/usb/dev-hid.c +++ b/hw/usb/dev-hid.c @@ -33,7 +33,7 @@ #include "qemu/timer.h" #include "hw/input/hid.h" #include "hw/usb/hid.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" struct USBHIDState { diff --git a/hw/usb/dev-hub.c b/hw/usb/dev-hub.c index f418da1409..b45d571fa8 100644 --- a/hw/usb/dev-hub.c +++ b/hw/usb/dev-hub.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "qemu/timer.h" #include "trace.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c index 04e8eedbf6..1d8cfd32dc 100644 --- a/hw/usb/dev-mtp.c +++ b/hw/usb/dev-mtp.c @@ -22,7 +22,7 @@ #include "qemu/module.h" #include "qemu/filemonitor.h" #include "trace.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c index 34cd906d6c..568a6ff24c 100644 --- a/hw/usb/dev-network.c +++ b/hw/usb/dev-network.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 17bdff9e82..286c7711f6 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -13,7 +13,7 @@ #include "qemu/cutils.h" #include "qemu/error-report.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c index a1081e545a..964c142d10 100644 --- a/hw/usb/dev-smartcard-reader.c +++ b/hw/usb/dev-smartcard-reader.c @@ -40,7 +40,7 @@ #include "qemu/cutils.h" #include "qemu/error-report.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c index bbd97406f0..040cf15051 100644 --- a/hw/usb/dev-storage.c +++ b/hw/usb/dev-storage.c @@ -16,7 +16,7 @@ #include "hw/usb/usb.h" #include "hw/usb/msd.h" #include "desc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/scsi/scsi.h" #include "migration/vmstate.h" #include "qemu/cutils.h" diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c index 75f01c7403..8576dfec96 100644 --- a/hw/usb/dev-uas.c +++ b/hw/usb/dev-uas.c @@ -21,7 +21,7 @@ #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/scsi/scsi.h" #include "scsi/constants.h" #include "qom/object.h" diff --git a/hw/usb/hcd-dwc2.c b/hw/usb/hcd-dwc2.c index 83864505bb..cd3b61158d 100644 --- a/hw/usb/hcd-dwc2.c +++ b/hw/usb/hcd-dwc2.c @@ -41,7 +41,7 @@ #include "qemu/log.h" #include "qemu/error-report.h" #include "qemu/main-loop.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #define USB_HZ_FS 12000000 #define USB_HZ_HS 96000000 diff --git a/hw/usb/hcd-dwc3.c b/hw/usb/hcd-dwc3.c index 98a342b8b8..74dff39fda 100644 --- a/hw/usb/hcd-dwc3.c +++ b/hw/usb/hcd-dwc3.c @@ -33,7 +33,7 @@ #include "qemu/bitops.h" #include "qom/object.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/hcd-dwc3.h" #include "qapi/error.h" diff --git a/hw/usb/hcd-ehci-pci.c b/hw/usb/hcd-ehci-pci.c index 38ad3406b3..9febcc1031 100644 --- a/hw/usb/hcd-ehci-pci.c +++ b/hw/usb/hcd-ehci-pci.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/hcd-ehci.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/usb/hcd-ehci-sysbus.c b/hw/usb/hcd-ehci-sysbus.c index 0449f5fa6d..b31032bbf3 100644 --- a/hw/usb/hcd-ehci-sysbus.c +++ b/hw/usb/hcd-ehci-sysbus.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/hcd-ehci.h" #include "migration/vmstate.h" diff --git a/hw/usb/hcd-ohci-pci.c b/hw/usb/hcd-ohci-pci.c index 25c400698e..bdbbaaa87a 100644 --- a/hw/usb/hcd-ohci-pci.c +++ b/hw/usb/hcd-ohci-pci.c @@ -26,7 +26,7 @@ #include "hw/pci/pci_device.h" #include "hw/sysbus.h" #include "hw/core/qdev-dma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #include "hcd-ohci.h" #include "qom/object.h" diff --git a/hw/usb/hcd-ohci-sysbus.c b/hw/usb/hcd-ohci-sysbus.c index 8224fb8862..350b011899 100644 --- a/hw/usb/hcd-ohci-sysbus.c +++ b/hw/usb/hcd-ohci-sysbus.c @@ -27,7 +27,7 @@ #include "migration/vmstate.h" #include "hw/sysbus.h" #include "hw/core/qdev-dma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #include "hcd-ohci.h" diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c index 588cecef14..c771aafdd0 100644 --- a/hw/usb/hcd-ohci.c +++ b/hw/usb/hcd-ohci.c @@ -34,7 +34,7 @@ #include "migration/vmstate.h" #include "hw/sysbus.h" #include "hw/core/qdev-dma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #include "hcd-ohci.h" diff --git a/hw/usb/hcd-uhci.c b/hw/usb/hcd-uhci.c index c243a4f42c..b2224c7f76 100644 --- a/hw/usb/hcd-uhci.c +++ b/hw/usb/hcd-uhci.c @@ -32,7 +32,7 @@ #include "migration/vmstate.h" #include "hw/pci/pci.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/timer.h" #include "qemu/iov.h" diff --git a/hw/usb/hcd-xhci-nec.c b/hw/usb/hcd-xhci-nec.c index 5fc853eb33..46839911f3 100644 --- a/hw/usb/hcd-xhci-nec.c +++ b/hw/usb/hcd-xhci-nec.c @@ -23,7 +23,7 @@ #include "hw/usb/usb.h" #include "qemu/module.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hcd-xhci-pci.h" diff --git a/hw/usb/hcd-xhci-pci.c b/hw/usb/hcd-xhci-pci.c index b93c80b09d..aa570506fc 100644 --- a/hw/usb/hcd-xhci-pci.c +++ b/hw/usb/hcd-xhci-pci.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" diff --git a/hw/usb/hcd-xhci-sysbus.c b/hw/usb/hcd-xhci-sysbus.c index 862673054a..19664c5985 100644 --- a/hw/usb/hcd-xhci-sysbus.c +++ b/hw/usb/hcd-xhci-sysbus.c @@ -8,7 +8,7 @@ * SPDX-License-Identifier: GPL-2.0-or-later */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "trace.h" #include "qapi/error.h" diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c index 292c378bfc..2cdab3ba0e 100644 --- a/hw/usb/hcd-xhci.c +++ b/hw/usb/hcd-xhci.c @@ -25,7 +25,7 @@ #include "qemu/module.h" #include "qemu/queue.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "trace.h" #include "qapi/error.h" diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index 38893b5e68..b9f3ad3f66 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -55,7 +55,7 @@ #include "system/system.h" #include "trace.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" /* ------------------------------------------------------------------------ */ diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index 1a73db68f2..6fd04b7b42 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -41,7 +41,7 @@ #include #include -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/usb/usb.h" #include "migration/qemu-file-types.h" diff --git a/hw/usb/u2f-emulated.c b/hw/usb/u2f-emulated.c index 783e7f1af0..196d05a83a 100644 --- a/hw/usb/u2f-emulated.c +++ b/hw/usb/u2f-emulated.c @@ -29,7 +29,7 @@ #include "qemu/main-loop.h" #include "qapi/error.h" #include "hw/usb/usb.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include diff --git a/hw/usb/u2f-passthru.c b/hw/usb/u2f-passthru.c index b3206fb7fe..59b5f9829d 100644 --- a/hw/usb/u2f-passthru.c +++ b/hw/usb/u2f-passthru.c @@ -28,7 +28,7 @@ #include "qemu/main-loop.h" #include "qemu/error-report.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" diff --git a/hw/usb/xlnx-usb-subsystem.c b/hw/usb/xlnx-usb-subsystem.c index 98967ef49f..7193dd4cd2 100644 --- a/hw/usb/xlnx-usb-subsystem.c +++ b/hw/usb/xlnx-usb-subsystem.c @@ -28,7 +28,7 @@ #include "qemu/bitops.h" #include "qom/object.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/usb/xlnx-usb-subsystem.h" static void versal_usb2_realize(DeviceState *dev, Error **errp) diff --git a/hw/vfio-user/pci.c b/hw/vfio-user/pci.c index 353d07e781..64b8b3cb8c 100644 --- a/hw/vfio-user/pci.c +++ b/hw/vfio-user/pci.c @@ -11,7 +11,7 @@ #include "qapi-visit-sockets.h" #include "qemu/error-report.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/vfio/pci.h" #include "hw/vfio-user/device.h" #include "hw/vfio-user/proxy.h" diff --git a/hw/vfio/ap.c b/hw/vfio/ap.c index 3368ac8915..e58a0169af 100644 --- a/hw/vfio/ap.c +++ b/hw/vfio/ap.c @@ -28,7 +28,7 @@ #include "qemu/config-file.h" #include "kvm/kvm_s390x.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/s390x/ap-bridge.h" #include "system/address-spaces.h" #include "qom/object.h" diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index 4d9588e7aa..2251facb35 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -25,7 +25,7 @@ #include "system/iommufd.h" #include "hw/s390x/s390-ccw.h" #include "hw/s390x/vfio-ccw.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/s390x/ccw-device.h" #include "system/address-spaces.h" #include "qemu/error-report.h" diff --git a/hw/vfio/pci-quirks.c b/hw/vfio/pci-quirks.c index b5da6afbf5..7b907b9360 100644 --- a/hw/vfio/pci-quirks.c +++ b/hw/vfio/pci-quirks.c @@ -23,7 +23,7 @@ #include "qapi/visitor.h" #include #include "hw/nvram/fw_cfg.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "pci.h" #include "pci-quirks.h" #include "trace.h" diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index b46b1305a7..6b71605dd9 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -27,7 +27,7 @@ #include "hw/pci/msi.h" #include "hw/pci/msix.h" #include "hw/pci/pci_bridge.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/vfio/vfio-cpr.h" #include "migration/vmstate.h" diff --git a/hw/virtio/vdpa-dev-pci.c b/hw/virtio/vdpa-dev-pci.c index 3068112146..c047b0400d 100644 --- a/hw/virtio/vdpa-dev-pci.c +++ b/hw/virtio/vdpa-dev-pci.c @@ -19,7 +19,7 @@ #include "hw/virtio/virtio.h" #include "hw/virtio/vdpa-dev.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c index 57739385a9..3a6de7ebb4 100644 --- a/hw/virtio/vdpa-dev.c +++ b/hw/virtio/vdpa-dev.c @@ -20,7 +20,7 @@ #include "qemu/error-report.h" #include "qemu/cutils.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/vhost.h" #include "hw/virtio/virtio.h" diff --git a/hw/virtio/vhost-scsi-pci.c b/hw/virtio/vhost-scsi-pci.c index 7399acef8e..a78e13e038 100644 --- a/hw/virtio/vhost-scsi-pci.c +++ b/hw/virtio/vhost-scsi-pci.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "standard-headers/linux/virtio_pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-scsi.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/virtio/vhost-user-base.c b/hw/virtio/vhost-user-base.c index ff67a020b4..01ab9ca56b 100644 --- a/hw/virtio/vhost-user-base.c +++ b/hw/virtio/vhost-user-base.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/vhost-user-base.h" #include "qemu/error-report.h" diff --git a/hw/virtio/vhost-user-blk-pci.c b/hw/virtio/vhost-user-blk-pci.c index 904369f5a3..20d100f665 100644 --- a/hw/virtio/vhost-user-blk-pci.c +++ b/hw/virtio/vhost-user-blk-pci.c @@ -22,7 +22,7 @@ #include "hw/virtio/virtio.h" #include "hw/virtio/vhost-user-blk.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/virtio/vhost-user-fs-pci.c b/hw/virtio/vhost-user-fs-pci.c index 1490c118bc..92ae2fc8a6 100644 --- a/hw/virtio/vhost-user-fs-pci.c +++ b/hw/virtio/vhost-user-fs-pci.c @@ -12,7 +12,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-user-fs.h" #include "hw/virtio/virtio-pci.h" #include "qom/object.h" diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c index e77c69eb12..0acd9580b1 100644 --- a/hw/virtio/vhost-user-fs.c +++ b/hw/virtio/vhost-user-fs.c @@ -15,7 +15,7 @@ #include #include "standard-headers/linux/virtio_fs.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-access.h" diff --git a/hw/virtio/vhost-user-gpio-pci.c b/hw/virtio/vhost-user-gpio-pci.c index 9b165b54f8..9bd59e7ae7 100644 --- a/hw/virtio/vhost-user-gpio-pci.c +++ b/hw/virtio/vhost-user-gpio-pci.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-user-gpio.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/vhost-user-gpio.c b/hw/virtio/vhost-user-gpio.c index a7fd49b10a..d473f87077 100644 --- a/hw/virtio/vhost-user-gpio.c +++ b/hw/virtio/vhost-user-gpio.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/vhost-user-gpio.h" #include "standard-headers/linux/virtio_ids.h" diff --git a/hw/virtio/vhost-user-i2c-pci.c b/hw/virtio/vhost-user-i2c-pci.c index 692cd66fde..5ddae8367b 100644 --- a/hw/virtio/vhost-user-i2c-pci.c +++ b/hw/virtio/vhost-user-i2c-pci.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-user-i2c.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/vhost-user-i2c.c b/hw/virtio/vhost-user-i2c.c index ae007fe97d..152b1f6740 100644 --- a/hw/virtio/vhost-user-i2c.c +++ b/hw/virtio/vhost-user-i2c.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/vhost-user-i2c.h" #include "qemu/error-report.h" diff --git a/hw/virtio/vhost-user-rng-pci.c b/hw/virtio/vhost-user-rng-pci.c index 9f45fc6f35..cc289d0cb3 100644 --- a/hw/virtio/vhost-user-rng-pci.c +++ b/hw/virtio/vhost-user-rng-pci.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-user-rng.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/vhost-user-rng.c b/hw/virtio/vhost-user-rng.c index 61dadcda05..106c8f211a 100644 --- a/hw/virtio/vhost-user-rng.c +++ b/hw/virtio/vhost-user-rng.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/vhost-user-rng.h" #include "standard-headers/linux/virtio_ids.h" diff --git a/hw/virtio/vhost-user-scmi-pci.c b/hw/virtio/vhost-user-scmi-pci.c index 0ab56a50bb..9a83e1f1ba 100644 --- a/hw/virtio/vhost-user-scmi-pci.c +++ b/hw/virtio/vhost-user-scmi-pci.c @@ -6,7 +6,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-user-scmi.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/vhost-user-scsi-pci.c b/hw/virtio/vhost-user-scsi-pci.c index 367b8f27da..174552eb71 100644 --- a/hw/virtio/vhost-user-scsi-pci.c +++ b/hw/virtio/vhost-user-scsi-pci.c @@ -22,7 +22,7 @@ #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-scsi.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/virtio/vhost-user-snd-pci.c b/hw/virtio/vhost-user-snd-pci.c index f5015fb6c4..90f47bf7a5 100644 --- a/hw/virtio/vhost-user-snd-pci.c +++ b/hw/virtio/vhost-user-snd-pci.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-user-snd.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/vhost-user-snd.c b/hw/virtio/vhost-user-snd.c index 732411c655..7129b77d9c 100644 --- a/hw/virtio/vhost-user-snd.c +++ b/hw/virtio/vhost-user-snd.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/vhost-user-snd.h" #include "standard-headers/linux/virtio_ids.h" diff --git a/hw/virtio/vhost-user-test-device-pci.c b/hw/virtio/vhost-user-test-device-pci.c index b4ed0efb50..7f6d751690 100644 --- a/hw/virtio/vhost-user-test-device-pci.c +++ b/hw/virtio/vhost-user-test-device-pci.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-user-base.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/vhost-user-test-device.c b/hw/virtio/vhost-user-test-device.c index 1b98ea3e48..a2f963fdf6 100644 --- a/hw/virtio/vhost-user-test-device.c +++ b/hw/virtio/vhost-user-test-device.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/vhost-user-base.h" #include "qemu/error-report.h" diff --git a/hw/virtio/vhost-user-vsock-pci.c b/hw/virtio/vhost-user-vsock-pci.c index adb877b6e0..bac96c96d8 100644 --- a/hw/virtio/vhost-user-vsock-pci.c +++ b/hw/virtio/vhost-user-vsock-pci.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/virtio/virtio-pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-user-vsock.h" #include "qom/object.h" diff --git a/hw/virtio/vhost-user-vsock.c b/hw/virtio/vhost-user-vsock.c index 993c287348..e20e0aee43 100644 --- a/hw/virtio/vhost-user-vsock.c +++ b/hw/virtio/vhost-user-vsock.c @@ -12,7 +12,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/virtio/vhost-user-vsock.h" diff --git a/hw/virtio/vhost-vsock-common.c b/hw/virtio/vhost-vsock-common.c index c6c44d8989..b33def900a 100644 --- a/hw/virtio/vhost-vsock-common.c +++ b/hw/virtio/vhost-vsock-common.c @@ -13,7 +13,7 @@ #include "qapi/error.h" #include "hw/virtio/virtio-bus.h" #include "qemu/error-report.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost.h" #include "hw/virtio/vhost-vsock.h" #include "qemu/iov.h" diff --git a/hw/virtio/vhost-vsock-pci.c b/hw/virtio/vhost-vsock-pci.c index 0022a713d4..3a94d06f8c 100644 --- a/hw/virtio/vhost-vsock-pci.c +++ b/hw/virtio/vhost-vsock-pci.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "hw/virtio/virtio-pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-vsock.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/virtio/vhost-vsock.c b/hw/virtio/vhost-vsock.c index 7940b60d8a..da244eb165 100644 --- a/hw/virtio/vhost-vsock.c +++ b/hw/virtio/vhost-vsock.c @@ -17,7 +17,7 @@ #include "hw/virtio/virtio-access.h" #include "qemu/error-report.h" #include "qemu/sockets.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/vhost-vsock.h" #include "monitor/monitor.h" diff --git a/hw/virtio/virtio-9p-pci.c b/hw/virtio/virtio-9p-pci.c index 594742ff65..4b501ac2a3 100644 --- a/hw/virtio/virtio-9p-pci.c +++ b/hw/virtio/virtio-9p-pci.c @@ -17,7 +17,7 @@ #include "hw/virtio/virtio-pci.h" #include "hw/9pfs/virtio-9p.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/virtio/virtio-balloon-pci.c b/hw/virtio/virtio-balloon-pci.c index 96e88b6b86..0bb5931bbc 100644 --- a/hw/virtio/virtio-balloon-pci.c +++ b/hw/virtio/virtio-balloon-pci.c @@ -15,7 +15,7 @@ #include "qemu/osdep.h" #include "hw/virtio/virtio-pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-balloon.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c index bcf6ab6443..38bf1e84a1 100644 --- a/hw/virtio/virtio-balloon.c +++ b/hw/virtio/virtio-balloon.c @@ -20,7 +20,7 @@ #include "qemu/madvise.h" #include "hw/virtio/virtio.h" #include "hw/mem/pc-dimm.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "system/balloon.h" #include "system/ramblock.h" diff --git a/hw/virtio/virtio-blk-pci.c b/hw/virtio/virtio-blk-pci.c index fd33bbd7e8..64a434c81b 100644 --- a/hw/virtio/virtio-blk-pci.c +++ b/hw/virtio/virtio-blk-pci.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-blk.h" #include "hw/virtio/virtio-pci.h" #include "qapi/error.h" diff --git a/hw/virtio/virtio-crypto-pci.c b/hw/virtio/virtio-crypto-pci.c index 868abc03a9..7b7dd05616 100644 --- a/hw/virtio/virtio-crypto-pci.c +++ b/hw/virtio/virtio-crypto-pci.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/virtio-crypto.c b/hw/virtio/virtio-crypto.c index 517f2089c5..cbd1810fbc 100644 --- a/hw/virtio/virtio-crypto.c +++ b/hw/virtio/virtio-crypto.c @@ -20,7 +20,7 @@ #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-crypto.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "standard-headers/linux/virtio_ids.h" #include "system/cryptodev-vhost.h" diff --git a/hw/virtio/virtio-input-pci.c b/hw/virtio/virtio-input-pci.c index 3be5358b4c..cd35608460 100644 --- a/hw/virtio/virtio-input-pci.c +++ b/hw/virtio/virtio-input-pci.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/virtio/virtio-pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-input.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c index dd4100033f..9d32b8a7b3 100644 --- a/hw/virtio/virtio-iommu-pci.c +++ b/hw/virtio/virtio-iommu-pci.c @@ -13,7 +13,7 @@ #include "hw/virtio/virtio-pci.h" #include "hw/virtio/virtio-iommu.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "qapi/error.h" #include "hw/core/boards.h" diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 3500f1b082..4226a676d0 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -23,7 +23,7 @@ #include "qemu/range.h" #include "qemu/reserved-region.h" #include "exec/target_page.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio.h" #include "system/kvm.h" #include "system/reset.h" diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c index 5d1d90edc5..41de2ef5a0 100644 --- a/hw/virtio/virtio-mem.c +++ b/hw/virtio/virtio-mem.c @@ -28,7 +28,7 @@ #include "qapi/visitor.h" #include "migration/misc.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/acpi/acpi.h" #include "trace.h" diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c index d54d70b4fb..54bd0c57b5 100644 --- a/hw/virtio/virtio-mmio.c +++ b/hw/virtio/virtio-mmio.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "standard-headers/linux/virtio_mmio.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/virtio/virtio.h" #include "migration/qemu-file-types.h" diff --git a/hw/virtio/virtio-net-pci.c b/hw/virtio/virtio-net-pci.c index f857a84f11..fd3e0303f5 100644 --- a/hw/virtio/virtio-net-pci.c +++ b/hw/virtio/virtio-net-pci.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-net.h" #include "hw/virtio/virtio-pci.h" #include "qapi/error.h" diff --git a/hw/virtio/virtio-nsm-pci.c b/hw/virtio/virtio-nsm-pci.c index ec243963e1..96e92be1b6 100644 --- a/hw/virtio/virtio-nsm-pci.c +++ b/hw/virtio/virtio-nsm-pci.c @@ -12,7 +12,7 @@ #include "hw/virtio/virtio-pci.h" #include "hw/virtio/virtio-nsm.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 7382e7db6f..b273eb2691 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -25,7 +25,7 @@ #include "migration/qemu-file-types.h" #include "hw/pci/pci.h" #include "hw/pci/pci_bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/log.h" diff --git a/hw/virtio/virtio-pmem.c b/hw/virtio/virtio-pmem.c index 3416ea1827..854d08abf6 100644 --- a/hw/virtio/virtio-pmem.c +++ b/hw/virtio/virtio-pmem.c @@ -17,7 +17,7 @@ #include "qemu/iov.h" #include "qemu/main-loop.h" #include "hw/virtio/virtio-pmem.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-access.h" #include "standard-headers/linux/virtio_ids.h" #include "standard-headers/linux/virtio_pmem.h" diff --git a/hw/virtio/virtio-rng-pci.c b/hw/virtio/virtio-rng-pci.c index 39b600356e..dcea260825 100644 --- a/hw/virtio/virtio-rng-pci.c +++ b/hw/virtio/virtio-rng-pci.c @@ -13,7 +13,7 @@ #include "hw/virtio/virtio-pci.h" #include "hw/virtio/virtio-rng.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/virtio/virtio-rng.c b/hw/virtio/virtio-rng.c index 3df5d2576e..66690a34dc 100644 --- a/hw/virtio/virtio-rng.c +++ b/hw/virtio/virtio-rng.c @@ -15,7 +15,7 @@ #include "qemu/module.h" #include "qemu/timer.h" #include "hw/virtio/virtio.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-rng.h" #include "system/rng.h" #include "system/runstate.h" diff --git a/hw/virtio/virtio-scsi-pci.c b/hw/virtio/virtio-scsi-pci.c index af87759207..fd5102819a 100644 --- a/hw/virtio/virtio-scsi-pci.c +++ b/hw/virtio/virtio-scsi-pci.c @@ -15,7 +15,7 @@ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-scsi.h" #include "qemu/module.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/virtio-serial-pci.c b/hw/virtio/virtio-serial-pci.c index 3f212ffe52..6d33d149df 100644 --- a/hw/virtio/virtio-serial-pci.c +++ b/hw/virtio/virtio-serial-pci.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-serial.h" #include "qemu/module.h" #include "hw/virtio/virtio-pci.h" diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 257cda506a..5b64eb4d67 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -28,7 +28,7 @@ #include "migration/qemu-file-types.h" #include "qemu/atomic.h" #include "hw/virtio/virtio-bus.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/virtio/virtio-access.h" #include "system/dma.h" #include "system/iothread.h" diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c index ad513d4cbc..2ebd0f07bd 100644 --- a/hw/vmapple/vmapple.c +++ b/hw/vmapple/vmapple.c @@ -28,7 +28,7 @@ #include "hw/core/boards.h" #include "hw/core/irq.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/usb/usb.h" #include "hw/arm/boot.h" diff --git a/hw/watchdog/cmsdk-apb-watchdog.c b/hw/watchdog/cmsdk-apb-watchdog.c index f1dd7d66ee..90d14e342b 100644 --- a/hw/watchdog/cmsdk-apb-watchdog.c +++ b/hw/watchdog/cmsdk-apb-watchdog.c @@ -28,7 +28,7 @@ #include "system/watchdog.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/registerfields.h" #include "hw/core/qdev-clock.h" #include "hw/watchdog/cmsdk-apb-watchdog.h" diff --git a/hw/watchdog/sbsa_gwdt.c b/hw/watchdog/sbsa_gwdt.c index ce84849df0..7ade5c6f18 100644 --- a/hw/watchdog/sbsa_gwdt.c +++ b/hw/watchdog/sbsa_gwdt.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "system/reset.h" #include "system/watchdog.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/watchdog/sbsa_gwdt.h" #include "qemu/timer.h" #include "migration/vmstate.h" diff --git a/hw/watchdog/wdt_aspeed.c b/hw/watchdog/wdt_aspeed.c index 30226435ef..930834bfca 100644 --- a/hw/watchdog/wdt_aspeed.c +++ b/hw/watchdog/wdt_aspeed.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "qemu/timer.h" #include "system/watchdog.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/watchdog/wdt_aspeed.h" #include "migration/vmstate.h" diff --git a/hw/watchdog/wdt_imx2.c b/hw/watchdog/wdt_imx2.c index 10151a15d0..c83d4107c1 100644 --- a/hw/watchdog/wdt_imx2.c +++ b/hw/watchdog/wdt_imx2.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "system/watchdog.h" #include "migration/vmstate.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/watchdog/wdt_imx2.h" #include "trace.h" diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c index 6bd2e546f6..e3c51030f3 100644 --- a/hw/xen/xen-bus.c +++ b/hw/xen/xen-bus.c @@ -9,7 +9,7 @@ #include "qemu/main-loop.h" #include "qemu/module.h" #include "qemu/uuid.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/xen/xen.h" #include "hw/xen/xen-backend.h" diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c index da9a8e5213..f9b0dd1513 100644 --- a/hw/xen/xen-legacy-backend.c +++ b/hw/xen/xen-legacy-backend.c @@ -26,7 +26,7 @@ #include "hw/sysbus.h" #include "hw/core/boards.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/main-loop.h" #include "qapi/error.h" #include "hw/xen/xen-legacy-backend.h" diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c index 006b5b55f2..c1b92d90cf 100644 --- a/hw/xen/xen_pt.c +++ b/hw/xen/xen_pt.c @@ -58,7 +58,7 @@ #include #include "hw/pci/pci.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/xen/xen_pt.h" #include "hw/xen/xen_igd.h" diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c index a96abcd4bd..a533f2bac3 100644 --- a/hw/xtensa/xtfpga.c +++ b/hw/xtensa/xtfpga.c @@ -32,7 +32,7 @@ #include "system/system.h" #include "hw/core/boards.h" #include "hw/core/loader.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "elf.h" #include "system/memory.h" #include "exec/tswap.h" diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h index c87c327357..ad09fbdf32 100644 --- a/include/hw/char/cadence_uart.h +++ b/include/hw/char/cadence_uart.h @@ -19,7 +19,7 @@ #ifndef CADENCE_UART_H #define CADENCE_UART_H -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "chardev/char-fe.h" #include "qapi/error.h" diff --git a/include/hw/char/sifive_uart.h b/include/hw/char/sifive_uart.h index 6486c3f4a5..dea6055f87 100644 --- a/include/hw/char/sifive_uart.h +++ b/include/hw/char/sifive_uart.h @@ -21,7 +21,7 @@ #define HW_SIFIVE_UART_H #include "chardev/char-fe.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qom/object.h" #include "qemu/fifo8.h" diff --git a/include/hw/qdev-properties.h b/include/hw/core/qdev-properties.h similarity index 100% rename from include/hw/qdev-properties.h rename to include/hw/core/qdev-properties.h diff --git a/include/hw/ide/ide-dev.h b/include/hw/ide/ide-dev.h index 92e8868780..617e8159c7 100644 --- a/include/hw/ide/ide-dev.h +++ b/include/hw/ide/ide-dev.h @@ -21,7 +21,7 @@ #define IDE_DEV_H #include "system/dma.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/block/block.h" typedef struct IDEDevice IDEDevice; diff --git a/include/hw/misc/unimp.h b/include/hw/misc/unimp.h index 518d627dc5..904f502fab 100644 --- a/include/hw/misc/unimp.h +++ b/include/hw/misc/unimp.h @@ -8,7 +8,7 @@ #ifndef HW_MISC_UNIMP_H #define HW_MISC_UNIMP_H -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "qapi/error.h" #include "qom/object.h" diff --git a/include/hw/net/ne2000-isa.h b/include/hw/net/ne2000-isa.h index 73bae10ad1..1e14d1afc0 100644 --- a/include/hw/net/ne2000-isa.h +++ b/include/hw/net/ne2000-isa.h @@ -11,7 +11,7 @@ #define HW_NET_NE2000_ISA_H #include "hw/isa/isa.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "net/net.h" #include "qapi/error.h" diff --git a/include/hw/nubus/nubus.h b/include/hw/nubus/nubus.h index 7825840dca..105ddddd0d 100644 --- a/include/hw/nubus/nubus.h +++ b/include/hw/nubus/nubus.h @@ -9,7 +9,7 @@ #ifndef HW_NUBUS_NUBUS_H #define HW_NUBUS_NUBUS_H -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "system/address-spaces.h" #include "qom/object.h" diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h index 45687be005..ec39ef3bd6 100644 --- a/include/hw/qdev-properties-system.h +++ b/include/hw/qdev-properties-system.h @@ -1,7 +1,7 @@ #ifndef HW_QDEV_PROPERTIES_SYSTEM_H #define HW_QDEV_PROPERTIES_SYSTEM_H -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" bool qdev_prop_sanitize_s390x_loadparm(uint8_t *loadparm, const char *str, Error **errp); diff --git a/include/hw/timer/i8254.h b/include/hw/timer/i8254.h index f7148d9286..65775b789d 100644 --- a/include/hw/timer/i8254.h +++ b/include/hw/timer/i8254.h @@ -25,7 +25,7 @@ #ifndef HW_I8254_H #define HW_I8254_H -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/isa/isa.h" #include "qapi/error.h" #include "qom/object.h" diff --git a/migration/options.h b/migration/options.h index a7b3262d1e..d6f1742e5b 100644 --- a/migration/options.h +++ b/migration/options.h @@ -14,7 +14,7 @@ #ifndef QEMU_MIGRATION_OPTIONS_H #define QEMU_MIGRATION_OPTIONS_H -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "migration/client-options.h" diff --git a/net/net.c b/net/net.c index 8aefdb3424..4930b573ed 100644 --- a/net/net.c +++ b/net/net.c @@ -27,7 +27,7 @@ #include "net/net.h" #include "clients.h" #include "hub.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "net/slirp.h" #include "net/eth.h" #include "util.h" diff --git a/rust/hw/core/wrapper.h b/rust/hw/core/wrapper.h index 44f8583bff..8fda78924d 100644 --- a/rust/hw/core/wrapper.h +++ b/rust/hw/core/wrapper.h @@ -27,6 +27,6 @@ typedef enum memory_order { #include "hw/sysbus.h" #include "hw/core/clock.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/core/irq.h" diff --git a/system/physmem.c b/system/physmem.c index ba69be2d08..e3221ce00d 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -37,7 +37,7 @@ #include "exec/target_page.h" #include "exec/translation-block.h" #include "hw/core/qdev.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/boards.h" #include "system/xen.h" #include "system/kvm.h" diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c index c8773d864d..8e74e24c19 100644 --- a/system/qdev-monitor.c +++ b/system/qdev-monitor.c @@ -40,7 +40,7 @@ #include "system/block-backend.h" #include "migration/misc.h" #include "qemu/cutils.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/clock.h" #include "hw/core/boards.h" diff --git a/system/vl.c b/system/vl.c index 659c6506fc..2417f82c3e 100644 --- a/system/vl.c +++ b/system/vl.c @@ -30,7 +30,7 @@ #include "qemu/target-info.h" #include "exec/cpu-common.h" #include "exec/page-vary.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/compat-policy.h" #include "qapi/error.h" #include "qobject/qdict.h" diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 09e89272ed..caf7980b1f 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -34,7 +34,7 @@ #include "internals.h" #include "cpu-features.h" #include "exec/target_page.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #if !defined(CONFIG_USER_ONLY) #include "hw/core/loader.h" #include "hw/core/boards.h" diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index ae84d8e420..bf30381370 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -31,7 +31,7 @@ #include "kvm_arm.h" #include "hvf_arm.h" #include "qapi/visitor.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "internals.h" #include "cpu-features.h" diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 6871956382..917db5bb09 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -23,7 +23,7 @@ #include "cpu.h" #include "qemu/module.h" #include "qapi/visitor.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qemu/units.h" #include "internals.h" #include "cpu-features.h" diff --git a/target/avr/cpu.c b/target/avr/cpu.c index a6df71d020..52237da3ce 100644 --- a/target/avr/cpu.c +++ b/target/avr/cpu.c @@ -26,7 +26,7 @@ #include "cpu.h" #include "disas/dis-asm.h" #include "tcg/debug-assert.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "accel/tcg/cpu-ops.h" static void avr_cpu_set_pc(CPUState *cs, vaddr value) diff --git a/target/hexagon/cpu.c b/target/hexagon/cpu.c index a5a04173ab..8ac4f49aa3 100644 --- a/target/hexagon/cpu.c +++ b/target/hexagon/cpu.c @@ -21,7 +21,7 @@ #include "internal.h" #include "exec/translation-block.h" #include "qapi/error.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "fpu/softfloat-helpers.h" #include "tcg/tcg.h" #include "exec/gdbstub.h" diff --git a/target/i386/cpu-apic.c b/target/i386/cpu-apic.c index 564c1288e4..eeee62b52a 100644 --- a/target/i386/cpu-apic.c +++ b/target/i386/cpu-apic.c @@ -15,7 +15,7 @@ #include "system/kvm.h" #include "system/xen.h" #include "system/address-spaces.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/i386/apic_internal.h" #include "cpu-internal.h" diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 4216ca9ec1..fe52538723 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -34,7 +34,7 @@ #include "qemu/error-report.h" #include "qapi/qapi-visit-machine.h" #include "standard-headers/asm-x86/kvm_para.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/i386/topology.h" #include "exec/watchpoint.h" #ifndef CONFIG_USER_ONLY diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c index d74c3c3766..e01e044239 100644 --- a/target/loongarch/cpu.c +++ b/target/loongarch/cpu.c @@ -14,7 +14,7 @@ #include "system/tcg.h" #include "system/kvm.h" #include "kvm/kvm_loongarch.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "exec/translation-block.h" #include "cpu.h" #include "cpu-mmu.h" diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c index 22231f09e6..53649ec656 100644 --- a/target/microblaze/cpu.c +++ b/target/microblaze/cpu.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "cpu.h" #include "qemu/module.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "accel/tcg/cpu-ldst.h" #include "exec/gdbstub.h" #include "exec/translation-block.h" diff --git a/target/mips/cpu.c b/target/mips/cpu.c index 894799c02c..f74a9d5f61 100644 --- a/target/mips/cpu.c +++ b/target/mips/cpu.c @@ -29,7 +29,7 @@ #include "qemu/module.h" #include "system/kvm.h" #include "system/qtest.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-clock.h" #include "fpu_helper.h" #ifndef CONFIG_USER_ONLY diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c index a3b14ccead..929254827d 100644 --- a/target/ppc/cpu_init.c +++ b/target/ppc/cpu_init.c @@ -34,7 +34,7 @@ #include "qapi/error.h" #include "qobject/qnull.h" #include "qapi/visitor.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/ppc/ppc.h" #include "mmu-book3s-v3.h" #include "qemu/cutils.h" diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 73d4280d7c..8f26d8b8b0 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "qapi/visitor.h" #include "qemu/error-report.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/core/qdev-prop-internal.h" #include "migration/vmstate.h" #include "fpu/softfloat-helpers.h" diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 36e7f10037..b54cd78f8f 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -22,7 +22,7 @@ #include "hw/core/cpu.h" #include "hw/registerfields.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "exec/cpu-common.h" #include "exec/cpu-defs.h" #include "exec/cpu-interrupt.h" diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index f05ce317da..be99b2ab94 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -30,7 +30,7 @@ #include "trace.h" #include "qapi/qapi-types-machine.h" #include "system/hw_accel.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "hw/qdev-properties-system.h" #include "hw/resettable.h" #include "fpu/softfloat-helpers.h" diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c index c9773f1540..bfc6fb9d00 100644 --- a/target/sparc/cpu.c +++ b/target/sparc/cpu.c @@ -24,7 +24,7 @@ #include "qemu/qemu-print.h" #include "accel/tcg/cpu-mmu-index.h" #include "exec/translation-block.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qapi/visitor.h" #include "tcg/tcg.h" #include "fpu/softfloat.h" diff --git a/tests/unit/test-qdev-global-props.c b/tests/unit/test-qdev-global-props.c index 33062762a6..8ea362cbb9 100644 --- a/tests/unit/test-qdev-global-props.c +++ b/tests/unit/test-qdev-global-props.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" -#include "hw/qdev-properties.h" +#include "hw/core/qdev-properties.h" #include "qom/object.h" #include "qapi/error.h" #include "qapi/visitor.h" From e1e9a725006bd699ceb0eec9afd779f7c6e95693 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:09 +0100 Subject: [PATCH 020/152] include: move hw/qdev-properties-system.h to hw/core/ Signed-off-by: Paolo Bonzini --- backends/spdm-socket.c | 2 +- hw/acpi/vmclock.c | 2 +- hw/acpi/vmgenid.c | 2 +- hw/arm/strongarm.c | 2 +- hw/block/fdc-isa.c | 2 +- hw/block/fdc.c | 2 +- hw/block/m25p80.c | 2 +- hw/block/pflash_cfi01.c | 2 +- hw/block/pflash_cfi02.c | 2 +- hw/block/vhost-user-blk.c | 2 +- hw/char/avr_usart.c | 2 +- hw/char/bcm2835_aux.c | 2 +- hw/char/cadence_uart.c | 2 +- hw/char/cmsdk-apb-uart.c | 2 +- hw/char/debugcon.c | 2 +- hw/char/digic-uart.c | 2 +- hw/char/diva-gsp.c | 2 +- hw/char/escc.c | 2 +- hw/char/exynos4210_uart.c | 2 +- hw/char/goldfish_tty.c | 2 +- hw/char/grlib_apbuart.c | 2 +- hw/char/ibex_uart.c | 2 +- hw/char/imx_serial.c | 2 +- hw/char/ipoctal232.c | 2 +- hw/char/max78000_uart.c | 2 +- hw/char/mcf_uart.c | 2 +- hw/char/nrf51_uart.c | 2 +- hw/char/parallel.c | 2 +- hw/char/pl011.c | 2 +- hw/char/renesas_sci.c | 2 +- hw/char/sclpconsole-lm.c | 2 +- hw/char/sclpconsole.c | 2 +- hw/char/serial-pci-multi.c | 2 +- hw/char/serial.c | 2 +- hw/char/sh_serial.c | 2 +- hw/char/shakti_uart.c | 2 +- hw/char/sifive_uart.c | 2 +- hw/char/spapr_vty.c | 2 +- hw/char/stm32f2xx_usart.c | 2 +- hw/char/stm32l4x5_usart.c | 2 +- hw/char/terminal3270.c | 2 +- hw/char/virtio-console.c | 2 +- hw/char/xen_console.c | 2 +- hw/char/xilinx_uartlite.c | 2 +- hw/core/qdev-properties-system.c | 2 +- hw/hyperv/vmbus.c | 2 +- hw/i386/kvm/i8254.c | 2 +- hw/intc/xilinx_intc.c | 2 +- hw/ipmi/ipmi_bmc_extern.c | 2 +- hw/ipmi/ipmi_bmc_sim.c | 2 +- hw/mem/cxl_type3.c | 2 +- hw/misc/allwinner-sid.c | 2 +- hw/misc/allwinner-sramc.c | 2 +- hw/misc/ivshmem-flat.c | 2 +- hw/misc/ivshmem-pci.c | 2 +- hw/misc/mac_via.c | 2 +- hw/misc/sifive_u_otp.c | 2 +- hw/misc/stm32l4x5_rcc.c | 2 +- hw/misc/xlnx-versal-cfu.c | 2 +- hw/net/rocker/rocker.c | 2 +- hw/net/xen_nic.c | 2 +- hw/net/xilinx_ethlite.c | 2 +- hw/nvram/eeprom_at24c.c | 2 +- hw/nvram/mac_nvram.c | 2 +- hw/nvram/spapr_nvram.c | 2 +- hw/nvram/xlnx-bbram.c | 2 +- hw/nvram/xlnx-efuse.c | 2 +- hw/pci-bridge/cxl_downstream.c | 2 +- hw/pci-bridge/cxl_root_port.c | 2 +- hw/pci-bridge/cxl_upstream.c | 2 +- hw/pci-bridge/gen_pcie_root_port.c | 2 +- hw/pci/pci.c | 2 +- hw/ppc/pnv_pnor.c | 2 +- hw/rtc/mc146818rtc.c | 2 +- hw/scsi/scsi-disk.c | 2 +- hw/scsi/scsi-generic.c | 2 +- hw/scsi/vhost-user-scsi.c | 2 +- hw/sd/sd.c | 2 +- hw/sh4/sh7750.c | 2 +- hw/ssi/ibex_spi_host.c | 2 +- hw/ssi/xilinx_spi.c | 2 +- hw/timer/xilinx_timer.c | 2 +- hw/usb/ccid-card-passthru.c | 2 +- hw/usb/dev-serial.c | 2 +- hw/usb/redirect.c | 2 +- hw/vfio/pci.c | 2 +- hw/virtio/vdpa-dev.c | 2 +- hw/virtio/vhost-user-fs.c | 2 +- hw/virtio/vhost-user-vsock.c | 2 +- hw/virtio/virtio-iommu-pci.c | 2 +- hw/xen/xen_pt.c | 2 +- include/hw/block/block.h | 2 +- include/hw/{ => core}/qdev-properties-system.h | 0 include/net/net.h | 2 +- include/qemu/audio.h | 2 +- migration/options.h | 2 +- rust/hw/core/wrapper.h | 2 +- target/s390x/cpu.c | 2 +- 98 files changed, 97 insertions(+), 97 deletions(-) rename include/hw/{ => core}/qdev-properties-system.h (100%) diff --git a/backends/spdm-socket.c b/backends/spdm-socket.c index 07aea37516..bc5c7afb3c 100644 --- a/backends/spdm-socket.c +++ b/backends/spdm-socket.c @@ -14,7 +14,7 @@ #include "system/spdm-socket.h" #include "qapi/error.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/core/qdev-prop-internal.h" static bool read_bytes(const int socket, uint8_t *buffer, diff --git a/hw/acpi/vmclock.c b/hw/acpi/vmclock.c index 55c9f95066..d51cab2e20 100644 --- a/hw/acpi/vmclock.c +++ b/hw/acpi/vmclock.c @@ -18,7 +18,7 @@ #include "hw/acpi/vmclock.h" #include "hw/nvram/fw_cfg.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "system/reset.h" diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c index fcf9a94daf..e87c025696 100644 --- a/hw/acpi/vmgenid.c +++ b/hw/acpi/vmgenid.c @@ -18,7 +18,7 @@ #include "hw/acpi/vmgenid.h" #include "hw/nvram/fw_cfg.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "system/reset.h" diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index 3ee73ee459..acc75476c3 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -30,7 +30,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "strongarm.h" diff --git a/hw/block/fdc-isa.c b/hw/block/fdc-isa.c index ebb3d2f7cd..a10f34a20f 100644 --- a/hw/block/fdc-isa.c +++ b/hw/block/fdc-isa.c @@ -36,7 +36,7 @@ #include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "hw/block/block.h" #include "system/block-backend.h" diff --git a/hw/block/fdc.c b/hw/block/fdc.c index 1747f6506f..4585640af9 100644 --- a/hw/block/fdc.c +++ b/hw/block/fdc.c @@ -36,7 +36,7 @@ #include "hw/core/irq.h" #include "hw/isa/isa.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "hw/block/block.h" #include "system/block-backend.h" diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index 648e6bdc00..4a758f83dc 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -27,7 +27,7 @@ #include "hw/block/block.h" #include "hw/block/flash.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/ssi/ssi.h" #include "migration/vmstate.h" #include "qemu/bitops.h" diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c index f93b812c02..d1673a1b41 100644 --- a/hw/block/pflash_cfi01.c +++ b/hw/block/pflash_cfi01.c @@ -40,7 +40,7 @@ #include "hw/block/block.h" #include "hw/block/flash.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "system/block-backend.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c index 6a74bcb7a1..423516cb30 100644 --- a/hw/block/pflash_cfi02.c +++ b/hw/block/pflash_cfi02.c @@ -36,7 +36,7 @@ #include "hw/block/block.h" #include "hw/block/flash.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/bitmap.h" diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c index 62295f187c..4d81d2dc34 100644 --- a/hw/block/vhost-user-blk.c +++ b/hw/block/vhost-user-blk.c @@ -22,7 +22,7 @@ #include "qemu/cutils.h" #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/virtio/virtio-blk-common.h" #include "hw/virtio/vhost.h" #include "hw/virtio/vhost-user-blk.h" diff --git a/hw/char/avr_usart.c b/hw/char/avr_usart.c index c3515b6f7d..30e135a244 100644 --- a/hw/char/avr_usart.c +++ b/hw/char/avr_usart.c @@ -24,7 +24,7 @@ #include "qemu/log.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" static int avr_usart_can_receive(void *opaque) { diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c index 47e24c5bba..d1e114f2de 100644 --- a/hw/char/bcm2835_aux.c +++ b/hw/char/bcm2835_aux.c @@ -24,7 +24,7 @@ #include "hw/char/bcm2835_aux.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c index 58c4c95fde..c24ece5fe8 100644 --- a/hw/char/cadence_uart.c +++ b/hw/char/cadence_uart.c @@ -32,7 +32,7 @@ #include "hw/char/cadence_uart.h" #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "trace.h" #ifdef CADENCE_UART_ERR_DEBUG diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c index a5ec61a004..c3645a553e 100644 --- a/hw/char/cmsdk-apb-uart.c +++ b/hw/char/cmsdk-apb-uart.c @@ -27,7 +27,7 @@ #include "chardev/char-serial.h" #include "hw/char/cmsdk-apb-uart.h" #include "hw/core/irq.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" REG32(DATA, 0) REG32(STATE, 4) diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c index 36607d0c1c..a1b370b90b 100644 --- a/hw/char/debugcon.c +++ b/hw/char/debugcon.c @@ -30,7 +30,7 @@ #include "chardev/char-fe.h" #include "hw/isa/isa.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qom/object.h" #define TYPE_ISA_DEBUGCON_DEVICE "isa-debugcon" diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c index 04dec0df8a..8a704dfcf5 100644 --- a/hw/char/digic-uart.c +++ b/hw/char/digic-uart.c @@ -35,7 +35,7 @@ #include "hw/char/digic-uart.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" enum { ST_RX_RDY = (1 << 0), diff --git a/hw/char/diva-gsp.c b/hw/char/diva-gsp.c index 1dafc1e80c..280d0413c6 100644 --- a/hw/char/diva-gsp.c +++ b/hw/char/diva-gsp.c @@ -21,7 +21,7 @@ #include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #define PCI_DEVICE_ID_HP_DIVA 0x1048 diff --git a/hw/char/escc.c b/hw/char/escc.c index 496bbc56de..a2fb682f8b 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c index 387156d5e3..d1c2f24915 100644 --- a/hw/char/exynos4210_uart.c +++ b/hw/char/exynos4210_uart.c @@ -32,7 +32,7 @@ #include "hw/arm/exynos4210.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "trace.h" #include "qom/object.h" diff --git a/hw/char/goldfish_tty.c b/hw/char/goldfish_tty.c index 821b321850..35bcb2a967 100644 --- a/hw/char/goldfish_tty.c +++ b/hw/char/goldfish_tty.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/sysbus.h" #include "migration/vmstate.h" #include "chardev/char-fe.h" diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c index 9731e664c1..7be847d093 100644 --- a/hw/char/grlib_apbuart.c +++ b/hw/char/grlib_apbuart.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/char/grlib_uart.h" #include "hw/sysbus.h" #include "qemu/module.h" diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c index ac4a43af84..3166f6d309 100644 --- a/hw/char/ibex_uart.c +++ b/hw/char/ibex_uart.c @@ -30,7 +30,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/registerfields.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c index 78d2c25f86..080b7f6331 100644 --- a/hw/char/imx_serial.c +++ b/hw/char/imx_serial.c @@ -22,7 +22,7 @@ #include "hw/char/imx_serial.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c index 19f312b9d3..b66c20f4fa 100644 --- a/hw/char/ipoctal232.c +++ b/hw/char/ipoctal232.c @@ -12,7 +12,7 @@ #include "hw/ipack/ipack.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "qemu/bitops.h" #include "qemu/module.h" diff --git a/hw/char/max78000_uart.c b/hw/char/max78000_uart.c index 59ec24a15e..85fc6eed3e 100644 --- a/hw/char/max78000_uart.c +++ b/hw/char/max78000_uart.c @@ -10,7 +10,7 @@ #include "hw/char/max78000_uart.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qemu/log.h" #include "qemu/module.h" #include "migration/vmstate.h" diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c index 391674dbcc..51edf917c9 100644 --- a/hw/char/mcf_uart.c +++ b/hw/char/mcf_uart.c @@ -13,7 +13,7 @@ #include "qapi/error.h" #include "hw/m68k/mcf.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/hw/char/nrf51_uart.c b/hw/char/nrf51_uart.c index 6087cabeb3..7306923244 100644 --- a/hw/char/nrf51_uart.c +++ b/hw/char/nrf51_uart.c @@ -18,7 +18,7 @@ #include "hw/char/nrf51_uart.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/char/parallel.c b/hw/char/parallel.c index 6708d7658b..07bbc9443f 100644 --- a/hw/char/parallel.c +++ b/hw/char/parallel.c @@ -29,7 +29,7 @@ #include "chardev/char-parallel.h" #include "hw/acpi/acpi_aml_interface.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "hw/char/parallel-isa.h" #include "hw/char/parallel.h" diff --git a/hw/char/pl011.c b/hw/char/pl011.c index f37ffd349f..0b0af67798 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -25,7 +25,7 @@ #include "hw/sysbus.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "chardev/char-fe.h" #include "chardev/char-serial.h" diff --git a/hw/char/renesas_sci.c b/hw/char/renesas_sci.c index 3c1cc43954..f1c5d5ae6b 100644 --- a/hw/char/renesas_sci.c +++ b/hw/char/renesas_sci.c @@ -26,7 +26,7 @@ #include "hw/core/irq.h" #include "hw/registerfields.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/char/renesas_sci.h" #include "migration/vmstate.h" diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c index ed08cf42da..9a16896d22 100644 --- a/hw/char/sclpconsole-lm.c +++ b/hw/char/sclpconsole-lm.c @@ -23,7 +23,7 @@ #include "migration/vmstate.h" #include "hw/s390x/event-facility.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/s390x/ebcdic.h" #include "qom/object.h" diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c index ab444fe1fa..179d12745c 100644 --- a/hw/char/sclpconsole.c +++ b/hw/char/sclpconsole.c @@ -20,7 +20,7 @@ #include "hw/s390x/sclp.h" #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/s390x/event-facility.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c index f0af12c14f..17796b93dd 100644 --- a/hw/char/serial-pci-multi.c +++ b/hw/char/serial-pci-multi.c @@ -33,7 +33,7 @@ #include "hw/core/irq.h" #include "hw/pci/pci_device.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #define PCI_SERIAL_MAX_PORTS 4 diff --git a/hw/char/serial.c b/hw/char/serial.c index cbff68a711..adbd1d1d4a 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -36,7 +36,7 @@ #include "qemu/error-report.h" #include "trace.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #define UART_LCR_DLAB 0x80 /* Divisor latch access bit */ diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c index 9cd79fce33..b3bed2bb7b 100644 --- a/hw/char/sh_serial.c +++ b/hw/char/sh_serial.c @@ -30,7 +30,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/sh4/sh.h" #include "chardev/char-fe.h" #include "qapi/error.h" diff --git a/hw/char/shakti_uart.c b/hw/char/shakti_uart.c index 51e45351d9..2d1bc9cb8e 100644 --- a/hw/char/shakti_uart.c +++ b/hw/char/shakti_uart.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/char/shakti_uart.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qemu/log.h" static uint64_t shakti_uart_read(void *opaque, hwaddr addr, unsigned size) diff --git a/hw/char/sifive_uart.c b/hw/char/sifive_uart.c index 473374d3de..af17cf9a6c 100644 --- a/hw/char/sifive_uart.c +++ b/hw/char/sifive_uart.c @@ -24,7 +24,7 @@ #include "chardev/char-fe.h" #include "hw/core/irq.h" #include "hw/char/sifive_uart.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #define TX_INTERRUPT_TRIGGER_DELAY_NS 100 diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c index 17a17c47c3..1dd9fb155c 100644 --- a/hw/char/spapr_vty.c +++ b/hw/char/spapr_vty.c @@ -7,7 +7,7 @@ #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_vio.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qom/object.h" #define VTERM_BUFSIZE 16 diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c index 2c19ec69cc..2bf0161fa5 100644 --- a/hw/char/stm32f2xx_usart.c +++ b/hw/char/stm32f2xx_usart.c @@ -26,7 +26,7 @@ #include "hw/char/stm32f2xx_usart.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/char/stm32l4x5_usart.c b/hw/char/stm32l4x5_usart.c index 8b208ba9b6..664d03d6b9 100644 --- a/hw/char/stm32l4x5_usart.c +++ b/hw/char/stm32l4x5_usart.c @@ -27,7 +27,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/registerfields.h" #include "trace.h" diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c index 821a75c37a..1d857bad9b 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -16,7 +16,7 @@ #include "qemu/module.h" #include "chardev/char-fe.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/s390x/3270-ccw.h" #include "qom/object.h" diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 8c2a6a9d1d..25db0f019b 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -16,7 +16,7 @@ #include "qemu/module.h" #include "trace.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/virtio/virtio-serial.h" #include "qapi/error.h" #include "qapi/qapi-events-char.h" diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c index a0d142582e..8ee098d9ad 100644 --- a/hw/char/xen_console.c +++ b/hw/char/xen_console.c @@ -30,7 +30,7 @@ #include "hw/xen/xen-backend.h" #include "hw/xen/xen-bus-helper.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/xen/interface/io/console.h" #include "hw/xen/interface/io/xs_wire.h" #include "hw/xen/interface/grant_table.h" diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c index 9d81cd904c..ba7e9e339b 100644 --- a/hw/char/xilinx_uartlite.c +++ b/hw/char/xilinx_uartlite.c @@ -28,7 +28,7 @@ #include "hw/char/xilinx_uartlite.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/sysbus.h" #include "qemu/module.h" #include "chardev/char-fe.h" diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c index d0a66358b5..fe5464c7da 100644 --- a/hw/core/qdev-properties-system.c +++ b/hw/core/qdev-properties-system.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qapi/error.h" #include "qapi/visitor.h" #include "qapi/qapi-types-block.h" diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c index 639d932b09..86b53a23ad 100644 --- a/hw/hyperv/vmbus.c +++ b/hw/hyperv/vmbus.c @@ -14,7 +14,7 @@ #include "qapi/error.h" #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/hyperv/hyperv.h" #include "hw/hyperv/vmbus.h" #include "hw/hyperv/vmbus-bridge.h" diff --git a/hw/i386/kvm/i8254.c b/hw/i386/kvm/i8254.c index 14b78f30a8..81e742f866 100644 --- a/hw/i386/kvm/i8254.c +++ b/hw/i386/kvm/i8254.c @@ -32,7 +32,7 @@ #include "system/runstate.h" #include "hw/timer/i8254.h" #include "hw/timer/i8254_internal.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "system/kvm.h" #include "target/i386/kvm/kvm_i386.h" #include "qom/object.h" diff --git a/hw/intc/xilinx_intc.c b/hw/intc/xilinx_intc.c index 465df1c3af..f93f0d6e7e 100644 --- a/hw/intc/xilinx_intc.c +++ b/hw/intc/xilinx_intc.c @@ -31,7 +31,7 @@ #include "qemu/module.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qom/object.h" #define D(x) diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index fb90a7d7c3..fa08ed6c21 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -35,7 +35,7 @@ #include "chardev/char-fe.h" #include "hw/ipmi/ipmi.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c index b86943c324..3d4fe1a699 100644 --- a/hw/ipmi/ipmi_bmc_sim.c +++ b/hw/ipmi/ipmi_bmc_sim.c @@ -30,7 +30,7 @@ #include "qemu/module.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #define IPMI_NETFN_CHASSIS 0x00 diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 26baa1c3d6..6eb20137a0 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -18,7 +18,7 @@ #include "hw/mem/pc-dimm.h" #include "hw/pci/pci.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-sid.c b/hw/misc/allwinner-sid.c index 17faf67e60..92a0c7918b 100644 --- a/hw/misc/allwinner-sid.c +++ b/hw/misc/allwinner-sid.c @@ -26,7 +26,7 @@ #include "qemu/guest-random.h" #include "qapi/error.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/misc/allwinner-sid.h" #include "trace.h" diff --git a/hw/misc/allwinner-sramc.c b/hw/misc/allwinner-sramc.c index bd7f59fec9..423e0a844f 100644 --- a/hw/misc/allwinner-sramc.c +++ b/hw/misc/allwinner-sramc.c @@ -25,7 +25,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/misc/allwinner-sramc.h" #include "trace.h" diff --git a/hw/misc/ivshmem-flat.c b/hw/misc/ivshmem-flat.c index 790500d34d..1248f9e81b 100644 --- a/hw/misc/ivshmem-flat.c +++ b/hw/misc/ivshmem-flat.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/sysbus.h" #include "chardev/char-fe.h" #include "system/address-spaces.h" diff --git a/hw/misc/ivshmem-pci.c b/hw/misc/ivshmem-pci.c index fb69af52f6..b9162589a0 100644 --- a/hw/misc/ivshmem-pci.c +++ b/hw/misc/ivshmem-pci.c @@ -23,7 +23,7 @@ #include "qemu/cutils.h" #include "hw/pci/pci.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" #include "system/kvm.h" diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 887397ae84..0c608c3dc6 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -28,7 +28,7 @@ #include "qapi/error.h" #include "qemu/cutils.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "system/block-backend.h" #include "system/rtc.h" #include "trace.h" diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c index 1d35268046..899bc31745 100644 --- a/hw/misc/sifive_u_otp.c +++ b/hw/misc/sifive_u_otp.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/sysbus.h" #include "qemu/error-report.h" #include "qemu/log.h" diff --git a/hw/misc/stm32l4x5_rcc.c b/hw/misc/stm32l4x5_rcc.c index c2b25e9a4d..cf7fa28cbe 100644 --- a/hw/misc/stm32l4x5_rcc.c +++ b/hw/misc/stm32l4x5_rcc.c @@ -27,7 +27,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/registerfields.h" #include "trace.h" diff --git a/hw/misc/xlnx-versal-cfu.c b/hw/misc/xlnx-versal-cfu.c index 80f9612b2f..13cd597da4 100644 --- a/hw/misc/xlnx-versal-cfu.c +++ b/hw/misc/xlnx-versal-cfu.c @@ -19,7 +19,7 @@ #include "qemu/units.h" #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/misc/xlnx-versal-cfu.h" #ifndef XLNX_VERSAL_CFU_APB_ERR_DEBUG diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c index 935e74fd7d..3eb7b44511 100644 --- a/hw/net/rocker/rocker.c +++ b/hw/net/rocker/rocker.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "hw/pci/pci_device.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "hw/pci/msix.h" #include "net/net.h" diff --git a/hw/net/xen_nic.c b/hw/net/xen_nic.c index 4ef1b7dd29..f4d0b06013 100644 --- a/hw/net/xen_nic.c +++ b/hw/net/xen_nic.c @@ -38,7 +38,7 @@ #include "hw/xen/xen-backend.h" #include "hw/xen/xen-bus-helper.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/xen/interface/io/netif.h" #include "hw/xen/interface/io/xs_wire.h" diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c index 39e64a46e2..72b14811a9 100644 --- a/hw/net/xilinx_ethlite.c +++ b/hw/net/xilinx_ethlite.c @@ -34,7 +34,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/misc/unimp.h" #include "net/net.h" #include "trace.h" diff --git a/hw/nvram/eeprom_at24c.c b/hw/nvram/eeprom_at24c.c index e947cf8a3b..8b7f2dc13f 100644 --- a/hw/nvram/eeprom_at24c.c +++ b/hw/nvram/eeprom_at24c.c @@ -15,7 +15,7 @@ #include "hw/i2c/i2c.h" #include "hw/nvram/eeprom_at24c.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "system/block-backend.h" #include "qom/object.h" diff --git a/hw/nvram/mac_nvram.c b/hw/nvram/mac_nvram.c index b048db0777..efadb3c943 100644 --- a/hw/nvram/mac_nvram.c +++ b/hw/nvram/mac_nvram.c @@ -28,7 +28,7 @@ #include "hw/nvram/chrp_nvram.h" #include "hw/nvram/mac_nvram.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "system/block-backend.h" #include "migration/vmstate.h" #include "qemu/cutils.h" diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c index c9202ddfcd..58d81f77c8 100644 --- a/hw/nvram/spapr_nvram.c +++ b/hw/nvram/spapr_nvram.c @@ -37,7 +37,7 @@ #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_vio.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qom/object.h" struct SpaprNvram { diff --git a/hw/nvram/xlnx-bbram.c b/hw/nvram/xlnx-bbram.c index aad445b901..60ede7e40f 100644 --- a/hw/nvram/xlnx-bbram.c +++ b/hw/nvram/xlnx-bbram.c @@ -32,7 +32,7 @@ #include "system/blockdev.h" #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/nvram/xlnx-efuse.h" #ifndef XLNX_BBRAM_ERR_DEBUG diff --git a/hw/nvram/xlnx-efuse.c b/hw/nvram/xlnx-efuse.c index 7eb156f941..facbef3fc4 100644 --- a/hw/nvram/xlnx-efuse.c +++ b/hw/nvram/xlnx-efuse.c @@ -32,7 +32,7 @@ #include "qapi/error.h" #include "system/blockdev.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #define TBIT0_OFFSET 28 #define TBIT1_OFFSET 29 diff --git a/hw/pci-bridge/cxl_downstream.c b/hw/pci-bridge/cxl_downstream.c index 1265e40c39..f7b131e67e 100644 --- a/hw/pci-bridge/cxl_downstream.c +++ b/hw/pci-bridge/cxl_downstream.c @@ -14,7 +14,7 @@ #include "hw/pci/pcie.h" #include "hw/pci/pcie_port.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/cxl/cxl.h" #include "qapi/error.h" diff --git a/hw/pci-bridge/cxl_root_port.c b/hw/pci-bridge/cxl_root_port.c index df359dee67..616d5d934c 100644 --- a/hw/pci-bridge/cxl_root_port.c +++ b/hw/pci-bridge/cxl_root_port.c @@ -24,7 +24,7 @@ #include "hw/pci/pcie_port.h" #include "hw/pci/msi.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/sysbus.h" #include "qapi/error.h" #include "hw/cxl/cxl.h" diff --git a/hw/pci-bridge/cxl_upstream.c b/hw/pci-bridge/cxl_upstream.c index 019c311bb5..6d708fadc2 100644 --- a/hw/pci-bridge/cxl_upstream.c +++ b/hw/pci-bridge/cxl_upstream.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/pci/msi.h" #include "hw/pci/pcie.h" #include "hw/pci/pcie_port.h" diff --git a/hw/pci-bridge/gen_pcie_root_port.c b/hw/pci-bridge/gen_pcie_root_port.c index fa1cf5e58f..2f7257d166 100644 --- a/hw/pci-bridge/gen_pcie_root_port.c +++ b/hw/pci-bridge/gen_pcie_root_port.c @@ -16,7 +16,7 @@ #include "hw/pci/msix.h" #include "hw/pci/pcie_port.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 2371a91680..5996229c81 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -31,7 +31,7 @@ #include "hw/pci/pci_bus.h" #include "hw/pci/pci_host.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/cpr.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" diff --git a/hw/ppc/pnv_pnor.c b/hw/ppc/pnv_pnor.c index 1083e42ab5..365c4d78b8 100644 --- a/hw/ppc/pnv_pnor.c +++ b/hw/ppc/pnv_pnor.c @@ -16,7 +16,7 @@ #include "hw/core/loader.h" #include "hw/ppc/pnv_pnor.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" static uint64_t pnv_pnor_read(void *opaque, hwaddr addr, unsigned size) { diff --git a/hw/rtc/mc146818rtc.c b/hw/rtc/mc146818rtc.c index 56f8c79479..ccbb279716 100644 --- a/hw/rtc/mc146818rtc.c +++ b/hw/rtc/mc146818rtc.c @@ -30,7 +30,7 @@ #include "hw/intc/kvm_irqcount.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qemu/timer.h" #include "system/system.h" #include "system/replay.h" diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c index 9c78c9e18e..0f896c27f4 100644 --- a/hw/scsi/scsi-disk.c +++ b/hw/scsi/scsi-disk.c @@ -37,7 +37,7 @@ #include "system/blockdev.h" #include "hw/block/block.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "system/dma.h" #include "system/system.h" #include "qemu/cutils.h" diff --git a/hw/scsi/scsi-generic.c b/hw/scsi/scsi-generic.c index 2ac4fd66c3..0a676a16fa 100644 --- a/hw/scsi/scsi-generic.c +++ b/hw/scsi/scsi-generic.c @@ -19,7 +19,7 @@ #include "hw/scsi/scsi.h" #include "migration/qemu-file-types.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/scsi/emulation.h" #include "system/block-backend.h" #include "trace.h" diff --git a/hw/scsi/vhost-user-scsi.c b/hw/scsi/vhost-user-scsi.c index 89f06066b7..3612897d4b 100644 --- a/hw/scsi/vhost-user-scsi.c +++ b/hw/scsi/vhost-user-scsi.c @@ -21,7 +21,7 @@ #include "hw/core/fw-path-provider.h" #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/virtio/vhost.h" #include "hw/virtio/vhost-backend.h" #include "hw/virtio/vhost-user-scsi.h" diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 3df331d561..5aa34f1d5b 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -43,7 +43,7 @@ #include "qapi/error.h" #include "qemu/bitmap.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qemu/error-report.h" #include "qemu/timer.h" #include "qemu/log.h" diff --git a/hw/sh4/sh7750.c b/hw/sh4/sh7750.c index aff45320bc..a0aa89ad31 100644 --- a/hw/sh4/sh7750.c +++ b/hw/sh4/sh7750.c @@ -31,7 +31,7 @@ #include "system/system.h" #include "target/sh4/cpu.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "sh7750_regs.h" #include "sh7750_regnames.h" #include "hw/sh4/sh_intc.h" diff --git a/hw/ssi/ibex_spi_host.c b/hw/ssi/ibex_spi_host.c index a7dc0c2f03..50cf08de9c 100644 --- a/hw/ssi/ibex_spi_host.c +++ b/hw/ssi/ibex_spi_host.c @@ -30,7 +30,7 @@ #include "hw/ssi/ibex_spi_host.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c index 6dcdd63916..cf406d0824 100644 --- a/hw/ssi/xilinx_spi.c +++ b/hw/ssi/xilinx_spi.c @@ -33,7 +33,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/ssi/ssi.h" #include "qom/object.h" diff --git a/hw/timer/xilinx_timer.c b/hw/timer/xilinx_timer.c index 57a2c7101d..9c2969a2c4 100644 --- a/hw/timer/xilinx_timer.c +++ b/hw/timer/xilinx_timer.c @@ -31,7 +31,7 @@ #include "hw/core/irq.h" #include "hw/core/ptimer.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qemu/log.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index 306dd7d914..5ab7855272 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -14,7 +14,7 @@ #include #include "chardev/char-fe.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 286c7711f6..b238cb7937 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -14,7 +14,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "desc.h" diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index 6fd04b7b42..fda5bbca67 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -42,7 +42,7 @@ #include #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/usb/usb.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 6b71605dd9..a0a66b105a 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -28,7 +28,7 @@ #include "hw/pci/msix.h" #include "hw/pci/pci_bridge.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/vfio/vfio-cpr.h" #include "migration/vmstate.h" #include "migration/cpr.h" diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c index 3a6de7ebb4..f2377d2d50 100644 --- a/hw/virtio/vdpa-dev.c +++ b/hw/virtio/vdpa-dev.c @@ -21,7 +21,7 @@ #include "qemu/cutils.h" #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/virtio/vhost.h" #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-bus.h" diff --git a/hw/virtio/vhost-user-fs.c b/hw/virtio/vhost-user-fs.c index 0acd9580b1..ad6fcacf06 100644 --- a/hw/virtio/vhost-user-fs.c +++ b/hw/virtio/vhost-user-fs.c @@ -16,7 +16,7 @@ #include "standard-headers/linux/virtio_fs.h" #include "qapi/error.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/virtio/virtio-bus.h" #include "hw/virtio/virtio-access.h" #include "qemu/error-report.h" diff --git a/hw/virtio/vhost-user-vsock.c b/hw/virtio/vhost-user-vsock.c index e20e0aee43..c2cd376e73 100644 --- a/hw/virtio/vhost-user-vsock.c +++ b/hw/virtio/vhost-user-vsock.c @@ -13,7 +13,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/virtio/vhost-user-vsock.h" static const int user_feature_bits[] = { diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c index 9d32b8a7b3..f5f6ce7359 100644 --- a/hw/virtio/virtio-iommu-pci.c +++ b/hw/virtio/virtio-iommu-pci.c @@ -14,7 +14,7 @@ #include "hw/virtio/virtio-pci.h" #include "hw/virtio/virtio-iommu.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/pci/pci_bus.h" diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c index c1b92d90cf..0fe9c0aada 100644 --- a/hw/xen/xen_pt.c +++ b/hw/xen/xen_pt.c @@ -59,7 +59,7 @@ #include "hw/pci/pci.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/xen/xen_pt.h" #include "hw/xen/xen_igd.h" #include "hw/xen/xen.h" diff --git a/include/hw/block/block.h b/include/hw/block/block.h index b4d914624e..7dc19d8a45 100644 --- a/include/hw/block/block.h +++ b/include/hw/block/block.h @@ -13,7 +13,7 @@ #include "exec/hwaddr.h" #include "qapi/qapi-types-block-core.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" /* Configuration */ diff --git a/include/hw/qdev-properties-system.h b/include/hw/core/qdev-properties-system.h similarity index 100% rename from include/hw/qdev-properties-system.h rename to include/hw/core/qdev-properties-system.h diff --git a/include/net/net.h b/include/net/net.h index 72b476ee1d..45bc86fc86 100644 --- a/include/net/net.h +++ b/include/net/net.h @@ -4,7 +4,7 @@ #include "qemu/queue.h" #include "qapi/qapi-types-net.h" #include "net/queue.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #define MAC_FMT "%02X:%02X:%02X:%02X:%02X:%02X" #define MAC_ARG(x) ((uint8_t *)(x))[0], ((uint8_t *)(x))[1], \ diff --git a/include/qemu/audio.h b/include/qemu/audio.h index c56af895d6..a92e0b70ef 100644 --- a/include/qemu/audio.h +++ b/include/qemu/audio.h @@ -27,7 +27,7 @@ #include "qemu/queue.h" #include "qapi/qapi-types-audio.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #ifdef CONFIG_GIO #include "gio/gio.h" #endif diff --git a/migration/options.h b/migration/options.h index d6f1742e5b..0c3043f1ff 100644 --- a/migration/options.h +++ b/migration/options.h @@ -15,7 +15,7 @@ #define QEMU_MIGRATION_OPTIONS_H #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "migration/client-options.h" /* migration properties */ diff --git a/rust/hw/core/wrapper.h b/rust/hw/core/wrapper.h index 8fda78924d..f6b34161a6 100644 --- a/rust/hw/core/wrapper.h +++ b/rust/hw/core/wrapper.h @@ -28,5 +28,5 @@ typedef enum memory_order { #include "hw/core/clock.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/core/irq.h" diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index be99b2ab94..da536fb30e 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -31,7 +31,7 @@ #include "qapi/qapi-types-machine.h" #include "system/hw_accel.h" #include "hw/core/qdev-properties.h" -#include "hw/qdev-properties-system.h" +#include "hw/core/qdev-properties-system.h" #include "hw/resettable.h" #include "fpu/softfloat-helpers.h" #include "disas/capstone.h" From 3e7316044d9ca084790c109354b1e65e37bae059 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:12 +0100 Subject: [PATCH 021/152] include: move hw/registerfields.h to hw/core/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- docs/devel/style.rst | 2 +- hw/adc/npcm7xx_adc.c | 2 +- hw/arm/armsse.c | 2 +- hw/arm/raspi.c | 2 +- hw/arm/raspi4b.c | 2 +- hw/arm/smmuv3-internal.h | 2 +- hw/char/cmsdk-apb-uart.c | 2 +- hw/char/ibex_uart.c | 2 +- hw/char/renesas_sci.c | 2 +- hw/char/stm32l4x5_usart.c | 2 +- hw/gpio/aspeed_gpio.c | 2 +- hw/i2c/arm_sbcon_i2c.c | 2 +- hw/i2c/aspeed_i2c.c | 2 +- hw/intc/aspeed_intc.c | 2 +- hw/intc/gic_internal.h | 2 +- hw/intc/gicv3_internal.h | 2 +- hw/intc/rx_icu.c | 2 +- hw/misc/armsse-cpu-pwrctrl.c | 2 +- hw/misc/armsse-cpuid.c | 2 +- hw/misc/armsse-mhu.c | 2 +- hw/misc/aspeed_i3c.c | 2 +- hw/misc/aspeed_peci.c | 2 +- hw/misc/bcm2835_thermal.c | 2 +- hw/misc/imx6ul_ccm.c | 2 +- hw/misc/imx7_src.c | 2 +- hw/misc/iotkit-secctl.c | 2 +- hw/misc/iotkit-sysctl.c | 2 +- hw/misc/iotkit-sysinfo.c | 2 +- hw/misc/mps2-fpgaio.c | 2 +- hw/misc/mps2-scc.c | 2 +- hw/misc/npcm7xx_mft.c | 2 +- hw/misc/npcm7xx_pwm.c | 2 +- hw/misc/sifive_e_aon.c | 2 +- hw/misc/stm32l4x5_rcc.c | 2 +- hw/misc/tz-mpc.c | 2 +- hw/misc/tz-msc.c | 2 +- hw/misc/tz-ppc.c | 2 +- hw/misc/xlnx-versal-cframe-reg.c | 2 +- hw/misc/zynq_slcr.c | 2 +- hw/net/cadence_gem.c | 2 +- hw/net/msf2-emac.c | 2 +- hw/net/npcm_gmac.c | 2 +- hw/net/npcm_pcs.c | 2 +- hw/net/smc91c111.c | 2 +- hw/pci-host/aspeed_pcie.c | 2 +- hw/pci-host/bonito.c | 2 +- hw/pci-host/gt64120.c | 2 +- hw/rtc/ls7a_rtc.c | 2 +- hw/sd/sd.c | 2 +- hw/sd/sdhci-internal.h | 2 +- hw/sensor/tmp105.c | 2 +- hw/ssi/ibex_spi_host.c | 2 +- hw/ssi/npcm_pspi.c | 2 +- hw/timer/bcm2835_systmr.c | 2 +- hw/timer/cmsdk-apb-dualtimer.c | 2 +- hw/timer/cmsdk-apb-timer.c | 2 +- hw/timer/renesas_cmt.c | 2 +- hw/timer/renesas_tmr.c | 2 +- hw/timer/sifive_pwm.c | 2 +- hw/timer/sse-counter.c | 2 +- hw/timer/sse-timer.c | 2 +- hw/watchdog/allwinner-wdt.c | 2 +- hw/watchdog/cmsdk-apb-watchdog.c | 2 +- include/block/nvme.h | 2 +- include/block/ufs.h | 2 +- include/fpu/softfloat-types.h | 2 +- include/hw/acpi/tpm.h | 2 +- include/hw/char/nrf51_uart.h | 2 +- include/hw/{ => core}/registerfields.h | 0 include/hw/i2c/aspeed_i2c.h | 2 +- include/hw/misc/bcm2835_cprman_internals.h | 2 +- include/hw/misc/stm32l4x5_rcc_internals.h | 2 +- include/hw/register.h | 2 +- target/arm/cpregs.h | 2 +- target/arm/cpu-features.h | 2 +- target/arm/cpu.h | 2 +- target/arm/internals.h | 2 +- target/arm/mmuidx-internal.h | 2 +- target/hexagon/cpu.h | 2 +- target/hppa/cpu.h | 2 +- target/loongarch/cpu-csr.h | 2 +- target/loongarch/cpu.h | 2 +- target/ppc/cpu.h | 2 +- target/ppc/internal.h | 2 +- target/riscv/cpu.h | 2 +- target/riscv/internals.h | 2 +- target/riscv/vector_internals.h | 2 +- target/rx/cpu.h | 2 +- target/tricore/cpu.h | 2 +- target/tricore/helper.c | 2 +- tests/qtest/sdhci-test.c | 2 +- tests/qtest/sifive-e-aon-watchdog-test.c | 2 +- tests/qtest/stm32l4x5_rcc-test.c | 2 +- tests/qtest/stm32l4x5_usart-test.c | 2 +- 95 files changed, 94 insertions(+), 94 deletions(-) rename include/hw/{ => core}/registerfields.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 41b536c3a2..e0904cc0cc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3560,7 +3560,7 @@ M: Alistair Francis S: Maintained F: hw/core/register.c F: include/hw/register.h -F: include/hw/registerfields.h +F: include/hw/core/registerfields.h Rust M: Manos Pitsidianakis diff --git a/docs/devel/style.rst b/docs/devel/style.rst index 941fe14bfd..12e509d10d 100644 --- a/docs/devel/style.rst +++ b/docs/devel/style.rst @@ -433,7 +433,7 @@ We also suggest avoiding bitfields even in structures where the exact layout does not matter, unless you can show that they provide a significant usability benefit. -We encourage the usage of ``include/hw/registerfields.h`` as a safe replacement +We encourage the usage of ``include/hw/core/registerfields.h`` as a safe replacement for bitfields. Reserved namespaces in C and POSIX diff --git a/hw/adc/npcm7xx_adc.c b/hw/adc/npcm7xx_adc.c index 44079791cb..3584c27c75 100644 --- a/hw/adc/npcm7xx_adc.c +++ b/hw/adc/npcm7xx_adc.c @@ -18,7 +18,7 @@ #include "hw/adc/npcm7xx_adc.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index 42ceb097ae..b6fc95df3b 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -18,7 +18,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/arm/armsse.h" #include "hw/arm/armsse-version.h" #include "hw/arm/boot.h" diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c index 637525a7e3..1276bb4df4 100644 --- a/hw/arm/raspi.c +++ b/hw/arm/raspi.c @@ -20,7 +20,7 @@ #include "hw/arm/bcm2836.h" #include "hw/arm/bcm2838.h" #include "hw/arm/raspi_platform.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qemu/error-report.h" #include "hw/core/boards.h" #include "hw/core/loader.h" diff --git a/hw/arm/raspi4b.c b/hw/arm/raspi4b.c index ead28500c7..3eeb8f447e 100644 --- a/hw/arm/raspi4b.c +++ b/hw/arm/raspi4b.c @@ -14,7 +14,7 @@ #include "hw/arm/machines-qom.h" #include "hw/arm/raspi_platform.h" #include "hw/display/bcm2835_fb.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qemu/error-report.h" #include "system/device_tree.h" #include "hw/core/boards.h" diff --git a/hw/arm/smmuv3-internal.h b/hw/arm/smmuv3-internal.h index b6b7399347..d15031f265 100644 --- a/hw/arm/smmuv3-internal.h +++ b/hw/arm/smmuv3-internal.h @@ -21,7 +21,7 @@ #ifndef HW_ARM_SMMUV3_INTERNAL_H #define HW_ARM_SMMUV3_INTERNAL_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/arm/smmu-common.h" typedef enum SMMUTranslationStatus { diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c index c3645a553e..1a83e4a9bd 100644 --- a/hw/char/cmsdk-apb-uart.c +++ b/hw/char/cmsdk-apb-uart.c @@ -22,7 +22,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "chardev/char-fe.h" #include "chardev/char-serial.h" #include "hw/char/cmsdk-apb-uart.h" diff --git a/hw/char/ibex_uart.c b/hw/char/ibex_uart.c index 3166f6d309..127d219df3 100644 --- a/hw/char/ibex_uart.c +++ b/hw/char/ibex_uart.c @@ -31,7 +31,7 @@ #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/char/renesas_sci.c b/hw/char/renesas_sci.c index f1c5d5ae6b..dc2810a9b1 100644 --- a/hw/char/renesas_sci.c +++ b/hw/char/renesas_sci.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" #include "hw/char/renesas_sci.h" diff --git a/hw/char/stm32l4x5_usart.c b/hw/char/stm32l4x5_usart.c index 664d03d6b9..736f1e764e 100644 --- a/hw/char/stm32l4x5_usart.c +++ b/hw/char/stm32l4x5_usart.c @@ -28,7 +28,7 @@ #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "trace.h" diff --git a/hw/gpio/aspeed_gpio.c b/hw/gpio/aspeed_gpio.c index 85a5acd708..d9237d4360 100644 --- a/hw/gpio/aspeed_gpio.c +++ b/hw/gpio/aspeed_gpio.c @@ -16,7 +16,7 @@ #include "hw/core/irq.h" #include "migration/vmstate.h" #include "trace.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #define GPIOS_PER_GROUP 8 diff --git a/hw/i2c/arm_sbcon_i2c.c b/hw/i2c/arm_sbcon_i2c.c index 979ccbe0ed..688f45c313 100644 --- a/hw/i2c/arm_sbcon_i2c.c +++ b/hw/i2c/arm_sbcon_i2c.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/i2c/arm_sbcon_i2c.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qemu/log.h" #include "qemu/module.h" #include "qom/object.h" diff --git a/hw/i2c/aspeed_i2c.c b/hw/i2c/aspeed_i2c.c index e3ca77865b..1f9ce131bf 100644 --- a/hw/i2c/aspeed_i2c.c +++ b/hw/i2c/aspeed_i2c.c @@ -29,7 +29,7 @@ #include "hw/i2c/aspeed_i2c.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "trace.h" /* Enable SLAVE_ADDR_RX_MATCH always */ diff --git a/hw/intc/aspeed_intc.c b/hw/intc/aspeed_intc.c index d92305b9ca..f14c340b60 100644 --- a/hw/intc/aspeed_intc.c +++ b/hw/intc/aspeed_intc.c @@ -11,7 +11,7 @@ #include "hw/core/irq.h" #include "qemu/log.h" #include "trace.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qapi/error.h" /* diff --git a/hw/intc/gic_internal.h b/hw/intc/gic_internal.h index 8ddbf554c6..b821f1feb3 100644 --- a/hw/intc/gic_internal.h +++ b/hw/intc/gic_internal.h @@ -21,7 +21,7 @@ #ifndef QEMU_ARM_GIC_INTERNAL_H #define QEMU_ARM_GIC_INTERNAL_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/intc/arm_gic.h" #define ALL_CPU_MASK ((unsigned)(((1 << GIC_NCPU) - 1))) diff --git a/hw/intc/gicv3_internal.h b/hw/intc/gicv3_internal.h index fc586524f5..880dbe52d8 100644 --- a/hw/intc/gicv3_internal.h +++ b/hw/intc/gicv3_internal.h @@ -24,7 +24,7 @@ #ifndef QEMU_ARM_GICV3_INTERNAL_H #define QEMU_ARM_GICV3_INTERNAL_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/intc/arm_gicv3_common.h" /* Distributor registers, as offsets from the distributor base address */ diff --git a/hw/intc/rx_icu.c b/hw/intc/rx_icu.c index 788afe6b1a..87cdc6cbde 100644 --- a/hw/intc/rx_icu.c +++ b/hw/intc/rx_icu.c @@ -27,7 +27,7 @@ #include "qemu/log.h" #include "qemu/error-report.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-properties.h" #include "hw/intc/rx_icu.h" #include "migration/vmstate.h" diff --git a/hw/misc/armsse-cpu-pwrctrl.c b/hw/misc/armsse-cpu-pwrctrl.c index 66e9218f27..87770facfc 100644 --- a/hw/misc/armsse-cpu-pwrctrl.c +++ b/hw/misc/armsse-cpu-pwrctrl.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "migration/vmstate.h" #include "hw/sysbus.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/armsse-cpu-pwrctrl.h" REG32(CPUPWRCFG, 0x0) diff --git a/hw/misc/armsse-cpuid.c b/hw/misc/armsse-cpuid.c index 3a52bb5381..0383312551 100644 --- a/hw/misc/armsse-cpuid.c +++ b/hw/misc/armsse-cpuid.c @@ -24,7 +24,7 @@ #include "trace.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/armsse-cpuid.h" #include "hw/core/qdev-properties.h" diff --git a/hw/misc/armsse-mhu.c b/hw/misc/armsse-mhu.c index 2673c2de3e..6fbe2cca37 100644 --- a/hw/misc/armsse-mhu.c +++ b/hw/misc/armsse-mhu.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/irq.h" #include "hw/misc/armsse-mhu.h" diff --git a/hw/misc/aspeed_i3c.c b/hw/misc/aspeed_i3c.c index 37a05b9ce2..ac6db214ee 100644 --- a/hw/misc/aspeed_i3c.c +++ b/hw/misc/aspeed_i3c.c @@ -11,7 +11,7 @@ #include "qemu/log.h" #include "qemu/error-report.h" #include "hw/misc/aspeed_i3c.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "migration/vmstate.h" diff --git a/hw/misc/aspeed_peci.c b/hw/misc/aspeed_peci.c index cf902a8ab8..0569ee57d1 100644 --- a/hw/misc/aspeed_peci.c +++ b/hw/misc/aspeed_peci.c @@ -11,7 +11,7 @@ #include "qemu/log.h" #include "hw/core/irq.h" #include "hw/misc/aspeed_peci.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "trace.h" #define ASPEED_PECI_CC_RSP_SUCCESS (0x40U) diff --git a/hw/misc/bcm2835_thermal.c b/hw/misc/bcm2835_thermal.c index 33bfc91c7a..0dc1be15b4 100644 --- a/hw/misc/bcm2835_thermal.c +++ b/hw/misc/bcm2835_thermal.c @@ -10,7 +10,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "hw/misc/bcm2835_thermal.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" REG32(CTL, 0) diff --git a/hw/misc/imx6ul_ccm.c b/hw/misc/imx6ul_ccm.c index 7f3ae61710..c4f6e372fe 100644 --- a/hw/misc/imx6ul_ccm.c +++ b/hw/misc/imx6ul_ccm.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" #include "hw/misc/imx6ul_ccm.h" #include "qemu/log.h" diff --git a/hw/misc/imx7_src.c b/hw/misc/imx7_src.c index df0b0a6905..77f13bd020 100644 --- a/hw/misc/imx7_src.c +++ b/hw/misc/imx7_src.c @@ -17,7 +17,7 @@ #include "qemu/module.h" #include "target/arm/arm-powerctl.h" #include "hw/core/cpu.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "trace.h" diff --git a/hw/misc/iotkit-secctl.c b/hw/misc/iotkit-secctl.c index 64e94a7647..832b021777 100644 --- a/hw/misc/iotkit-secctl.c +++ b/hw/misc/iotkit-secctl.c @@ -16,7 +16,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/irq.h" #include "hw/misc/iotkit-secctl.h" #include "hw/arm/armsse-version.h" diff --git a/hw/misc/iotkit-sysctl.c b/hw/misc/iotkit-sysctl.c index a9c3568c21..d673ae326b 100644 --- a/hw/misc/iotkit-sysctl.c +++ b/hw/misc/iotkit-sysctl.c @@ -25,7 +25,7 @@ #include "qapi/error.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/iotkit-sysctl.h" #include "hw/core/qdev-properties.h" #include "hw/arm/armsse-version.h" diff --git a/hw/misc/iotkit-sysinfo.c b/hw/misc/iotkit-sysinfo.c index a53b1f5180..3b4d228e3e 100644 --- a/hw/misc/iotkit-sysinfo.c +++ b/hw/misc/iotkit-sysinfo.c @@ -23,7 +23,7 @@ #include "trace.h" #include "qapi/error.h" #include "hw/sysbus.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/iotkit-sysinfo.h" #include "hw/core/qdev-properties.h" #include "hw/arm/armsse-version.h" diff --git a/hw/misc/mps2-fpgaio.c b/hw/misc/mps2-fpgaio.c index f3d51fd228..9cd5e9884c 100644 --- a/hw/misc/mps2-fpgaio.c +++ b/hw/misc/mps2-fpgaio.c @@ -22,7 +22,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/mps2-fpgaio.h" #include "hw/misc/led.h" #include "hw/core/qdev-properties.h" diff --git a/hw/misc/mps2-scc.c b/hw/misc/mps2-scc.c index 56aa013507..06d436cf58 100644 --- a/hw/misc/mps2-scc.c +++ b/hw/misc/mps2-scc.c @@ -25,7 +25,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/mps2-scc.h" #include "hw/misc/led.h" #include "hw/core/qdev-properties.h" diff --git a/hw/misc/npcm7xx_mft.c b/hw/misc/npcm7xx_mft.c index 21e74385c7..742166c4e8 100644 --- a/hw/misc/npcm7xx_mft.c +++ b/hw/misc/npcm7xx_mft.c @@ -20,7 +20,7 @@ #include "hw/core/qdev-properties.h" #include "hw/misc/npcm7xx_mft.h" #include "hw/misc/npcm7xx_pwm.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qapi/visitor.h" diff --git a/hw/misc/npcm7xx_pwm.c b/hw/misc/npcm7xx_pwm.c index 1b010e51ec..3ee34820c8 100644 --- a/hw/misc/npcm7xx_pwm.c +++ b/hw/misc/npcm7xx_pwm.c @@ -19,7 +19,7 @@ #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" #include "hw/misc/npcm7xx_pwm.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" #include "qemu/bitops.h" #include "qemu/error-report.h" diff --git a/hw/misc/sifive_e_aon.c b/hw/misc/sifive_e_aon.c index 4d6e015ca3..0e82ae3758 100644 --- a/hw/misc/sifive_e_aon.c +++ b/hw/misc/sifive_e_aon.c @@ -20,7 +20,7 @@ #include "qemu/timer.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/sifive_e_aon.h" #include "qapi/visitor.h" #include "qapi/error.h" diff --git a/hw/misc/stm32l4x5_rcc.c b/hw/misc/stm32l4x5_rcc.c index cf7fa28cbe..8509587134 100644 --- a/hw/misc/stm32l4x5_rcc.c +++ b/hw/misc/stm32l4x5_rcc.c @@ -28,7 +28,7 @@ #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "trace.h" #define HSE_DEFAULT_FRQ 48000000ULL diff --git a/hw/misc/tz-mpc.c b/hw/misc/tz-mpc.c index fb5d232bff..65517d390d 100644 --- a/hw/misc/tz-mpc.c +++ b/hw/misc/tz-mpc.c @@ -16,7 +16,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/irq.h" #include "hw/misc/tz-mpc.h" #include "hw/core/qdev-properties.h" diff --git a/hw/misc/tz-msc.c b/hw/misc/tz-msc.c index 3e33455d42..dd845193d6 100644 --- a/hw/misc/tz-msc.c +++ b/hw/misc/tz-msc.c @@ -16,7 +16,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/irq.h" #include "hw/misc/tz-msc.h" #include "hw/core/qdev-properties.h" diff --git a/hw/misc/tz-ppc.c b/hw/misc/tz-ppc.c index a41c6011fb..7b812a034b 100644 --- a/hw/misc/tz-ppc.c +++ b/hw/misc/tz-ppc.c @@ -16,7 +16,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/irq.h" #include "hw/misc/tz-ppc.h" #include "hw/core/qdev-properties.h" diff --git a/hw/misc/xlnx-versal-cframe-reg.c b/hw/misc/xlnx-versal-cframe-reg.c index 33a4ece26f..a5a5e41f3e 100644 --- a/hw/misc/xlnx-versal-cframe-reg.c +++ b/hw/misc/xlnx-versal-cframe-reg.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/register.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qemu/bitops.h" #include "qemu/log.h" #include "qemu/units.h" diff --git a/hw/misc/zynq_slcr.c b/hw/misc/zynq_slcr.c index d1900a2b94..d7d490b093 100644 --- a/hw/misc/zynq_slcr.c +++ b/hw/misc/zynq_slcr.c @@ -21,7 +21,7 @@ #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-clock.h" #include "qom/object.h" #include "hw/core/qdev-properties.h" diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c index fe9747fdb6..b568fa3392 100644 --- a/hw/net/cadence_gem.c +++ b/hw/net/cadence_gem.c @@ -28,7 +28,7 @@ #include "hw/core/irq.h" #include "hw/net/cadence_gem.h" #include "hw/core/qdev-properties.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/net/msf2-emac.c b/hw/net/msf2-emac.c index ac01d1ce47..077485c95d 100644 --- a/hw/net/msf2-emac.c +++ b/hw/net/msf2-emac.c @@ -31,7 +31,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/net/msf2-emac.h" #include "hw/net/mii.h" #include "hw/core/irq.h" diff --git a/hw/net/npcm_gmac.c b/hw/net/npcm_gmac.c index 5e32cd3edf..123fb92ca4 100644 --- a/hw/net/npcm_gmac.c +++ b/hw/net/npcm_gmac.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/net/mii.h" #include "hw/net/npcm_gmac.h" #include "migration/vmstate.h" diff --git a/hw/net/npcm_pcs.c b/hw/net/npcm_pcs.c index 6aec105271..ae078e14c3 100644 --- a/hw/net/npcm_pcs.c +++ b/hw/net/npcm_pcs.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "exec/hwaddr.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/net/npcm_pcs.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c index e3bf3b0e72..d6f57bc004 100644 --- a/hw/net/smc91c111.c +++ b/hw/net/smc91c111.c @@ -13,7 +13,7 @@ #include "net/net.h" #include "hw/core/irq.h" #include "hw/net/smc91c111.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-properties.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/pci-host/aspeed_pcie.c b/hw/pci-host/aspeed_pcie.c index 27f1078e3a..83a1c7075c 100644 --- a/hw/pci-host/aspeed_pcie.c +++ b/hw/pci-host/aspeed_pcie.c @@ -18,7 +18,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "hw/core/qdev-properties.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/irq.h" #include "hw/pci/pci_host.h" #include "hw/pci/pcie_port.h" diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c index 90040045c1..ff2f5c966e 100644 --- a/hw/pci-host/bonito.c +++ b/hw/pci-host/bonito.c @@ -50,7 +50,7 @@ #include "migration/vmstate.h" #include "system/runstate.h" #include "hw/misc/unimp.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qom/object.h" #include "trace.h" diff --git a/hw/pci-host/gt64120.c b/hw/pci-host/gt64120.c index 2339f10a30..d361c457ed 100644 --- a/hw/pci-host/gt64120.c +++ b/hw/pci-host/gt64120.c @@ -30,7 +30,7 @@ #include "qemu/log.h" #include "qemu/bswap.h" #include "hw/core/qdev-properties.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" #include "hw/misc/empty_slot.h" diff --git a/hw/rtc/ls7a_rtc.c b/hw/rtc/ls7a_rtc.c index 234a7e9769..54943f60b8 100644 --- a/hw/rtc/ls7a_rtc.c +++ b/hw/rtc/ls7a_rtc.c @@ -16,7 +16,7 @@ #include "migration/vmstate.h" #include "hw/misc/unimp.h" #include "system/rtc.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #define SYS_TOYTRIM 0x20 #define SYS_TOYWRITE0 0x24 diff --git a/hw/sd/sd.c b/hw/sd/sd.c index 5aa34f1d5b..5a1fda38a7 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -36,7 +36,7 @@ #include "qemu/units.h" #include "qemu/cutils.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "system/block-backend.h" #include "hw/sd/sd.h" #include "migration/vmstate.h" diff --git a/hw/sd/sdhci-internal.h b/hw/sd/sdhci-internal.h index 9f768c418e..3e81821dd1 100644 --- a/hw/sd/sdhci-internal.h +++ b/hw/sd/sdhci-internal.h @@ -24,7 +24,7 @@ #ifndef SDHCI_INTERNAL_H #define SDHCI_INTERNAL_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" /* R/W SDMA System Address register 0x0 */ #define SDHC_SYSAD 0x00 diff --git a/hw/sensor/tmp105.c b/hw/sensor/tmp105.c index 4e5c968bcc..c5089d74f4 100644 --- a/hw/sensor/tmp105.c +++ b/hw/sensor/tmp105.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "qapi/visitor.h" #include "qemu/module.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "trace.h" FIELD(CONFIG, SHUTDOWN_MODE, 0, 1) diff --git a/hw/ssi/ibex_spi_host.c b/hw/ssi/ibex_spi_host.c index 50cf08de9c..1e574c3fcb 100644 --- a/hw/ssi/ibex_spi_host.c +++ b/hw/ssi/ibex_spi_host.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/ssi/ibex_spi_host.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" diff --git a/hw/ssi/npcm_pspi.c b/hw/ssi/npcm_pspi.c index 1f11e1f8a4..2e05d5dacb 100644 --- a/hw/ssi/npcm_pspi.c +++ b/hw/ssi/npcm_pspi.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/ssi/npcm_pspi.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/timer/bcm2835_systmr.c b/hw/timer/bcm2835_systmr.c index 7929aaa882..00bcfcd05c 100644 --- a/hw/timer/bcm2835_systmr.c +++ b/hw/timer/bcm2835_systmr.c @@ -16,7 +16,7 @@ #include "qemu/log.h" #include "qemu/timer.h" #include "hw/timer/bcm2835_systmr.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/timer/cmsdk-apb-dualtimer.c b/hw/timer/cmsdk-apb-dualtimer.c index bcb6f8e43d..39b1fa3a14 100644 --- a/hw/timer/cmsdk-apb-dualtimer.c +++ b/hw/timer/cmsdk-apb-dualtimer.c @@ -24,7 +24,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-clock.h" #include "hw/timer/cmsdk-apb-dualtimer.h" #include "migration/vmstate.h" diff --git a/hw/timer/cmsdk-apb-timer.c b/hw/timer/cmsdk-apb-timer.c index d80bf1f96d..e8b6601097 100644 --- a/hw/timer/cmsdk-apb-timer.c +++ b/hw/timer/cmsdk-apb-timer.c @@ -34,7 +34,7 @@ #include "trace.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-clock.h" #include "hw/timer/cmsdk-apb-timer.h" #include "migration/vmstate.h" diff --git a/hw/timer/renesas_cmt.c b/hw/timer/renesas_cmt.c index 35962e66c3..a5cc7ebd27 100644 --- a/hw/timer/renesas_cmt.c +++ b/hw/timer/renesas_cmt.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-properties.h" #include "hw/timer/renesas_cmt.h" #include "migration/vmstate.h" diff --git a/hw/timer/renesas_tmr.c b/hw/timer/renesas_tmr.c index 2e7d7d4543..c917f70de2 100644 --- a/hw/timer/renesas_tmr.c +++ b/hw/timer/renesas_tmr.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-properties.h" #include "hw/timer/renesas_tmr.h" #include "migration/vmstate.h" diff --git a/hw/timer/sifive_pwm.c b/hw/timer/sifive_pwm.c index 8fda5445e7..780eaa5079 100644 --- a/hw/timer/sifive_pwm.c +++ b/hw/timer/sifive_pwm.c @@ -29,7 +29,7 @@ #include "hw/core/irq.h" #include "hw/timer/sifive_pwm.h" #include "hw/core/qdev-properties.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/timer/sse-counter.c b/hw/timer/sse-counter.c index de9d354483..39d140347e 100644 --- a/hw/timer/sse-counter.c +++ b/hw/timer/sse-counter.c @@ -33,7 +33,7 @@ #include "trace.h" #include "hw/timer/sse-counter.h" #include "hw/sysbus.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/clock.h" #include "hw/core/qdev-clock.h" #include "migration/vmstate.h" diff --git a/hw/timer/sse-timer.c b/hw/timer/sse-timer.c index 50d1de5805..62381e07e0 100644 --- a/hw/timer/sse-timer.c +++ b/hw/timer/sse-timer.c @@ -42,7 +42,7 @@ #include "hw/timer/sse-counter.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/clock.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" diff --git a/hw/watchdog/allwinner-wdt.c b/hw/watchdog/allwinner-wdt.c index 8fcd776675..68b600689a 100644 --- a/hw/watchdog/allwinner-wdt.c +++ b/hw/watchdog/allwinner-wdt.c @@ -26,7 +26,7 @@ #include "qemu/module.h" #include "trace.h" #include "hw/sysbus.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/watchdog/allwinner-wdt.h" #include "system/watchdog.h" #include "migration/vmstate.h" diff --git a/hw/watchdog/cmsdk-apb-watchdog.c b/hw/watchdog/cmsdk-apb-watchdog.c index 90d14e342b..ceae792580 100644 --- a/hw/watchdog/cmsdk-apb-watchdog.c +++ b/hw/watchdog/cmsdk-apb-watchdog.c @@ -29,7 +29,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-clock.h" #include "hw/watchdog/cmsdk-apb-watchdog.h" #include "migration/vmstate.h" diff --git a/include/block/nvme.h b/include/block/nvme.h index 8640dfa826..9d7159ed7a 100644 --- a/include/block/nvme.h +++ b/include/block/nvme.h @@ -1,7 +1,7 @@ #ifndef BLOCK_NVME_H #define BLOCK_NVME_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" typedef struct QEMU_PACKED NvmeBar { uint64_t cap; diff --git a/include/block/ufs.h b/include/block/ufs.h index a3ee62b027..ede4aff08e 100644 --- a/include/block/ufs.h +++ b/include/block/ufs.h @@ -3,7 +3,7 @@ #ifndef BLOCK_UFS_H #define BLOCK_UFS_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" typedef struct QEMU_PACKED UfsReg { uint32_t cap; diff --git a/include/fpu/softfloat-types.h b/include/fpu/softfloat-types.h index 1af2a0cb14..8f82fdfc97 100644 --- a/include/fpu/softfloat-types.h +++ b/include/fpu/softfloat-types.h @@ -80,7 +80,7 @@ this code that are retained. #ifndef SOFTFLOAT_TYPES_H #define SOFTFLOAT_TYPES_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" /* * Software IEC/IEEE floating-point types. diff --git a/include/hw/acpi/tpm.h b/include/hw/acpi/tpm.h index 9d0fe6f2f9..d2bf6637c5 100644 --- a/include/hw/acpi/tpm.h +++ b/include/hw/acpi/tpm.h @@ -17,7 +17,7 @@ #define HW_ACPI_TPM_H #include "qemu/units.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/acpi/aml-build.h" #include "system/tpm.h" diff --git a/include/hw/char/nrf51_uart.h b/include/hw/char/nrf51_uart.h index 03d8c2a20d..7a54db746b 100644 --- a/include/hw/char/nrf51_uart.h +++ b/include/hw/char/nrf51_uart.h @@ -13,7 +13,7 @@ #include "hw/sysbus.h" #include "chardev/char-fe.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qom/object.h" #define UART_FIFO_LENGTH 6 diff --git a/include/hw/registerfields.h b/include/hw/core/registerfields.h similarity index 100% rename from include/hw/registerfields.h rename to include/hw/core/registerfields.h diff --git a/include/hw/i2c/aspeed_i2c.h b/include/hw/i2c/aspeed_i2c.h index 2daacc10ce..c9c2620a8a 100644 --- a/include/hw/i2c/aspeed_i2c.h +++ b/include/hw/i2c/aspeed_i2c.h @@ -22,7 +22,7 @@ #include "hw/i2c/i2c.h" #include "hw/sysbus.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qom/object.h" #define TYPE_ASPEED_I2C "aspeed.i2c" diff --git a/include/hw/misc/bcm2835_cprman_internals.h b/include/hw/misc/bcm2835_cprman_internals.h index 7617aff96f..de75139cfd 100644 --- a/include/hw/misc/bcm2835_cprman_internals.h +++ b/include/hw/misc/bcm2835_cprman_internals.h @@ -9,7 +9,7 @@ #ifndef HW_MISC_BCM2835_CPRMAN_INTERNALS_H #define HW_MISC_BCM2835_CPRMAN_INTERNALS_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/bcm2835_cprman.h" #define TYPE_CPRMAN_PLL "bcm2835-cprman-pll" diff --git a/include/hw/misc/stm32l4x5_rcc_internals.h b/include/hw/misc/stm32l4x5_rcc_internals.h index ff1c834f69..1e044604c8 100644 --- a/include/hw/misc/stm32l4x5_rcc_internals.h +++ b/include/hw/misc/stm32l4x5_rcc_internals.h @@ -18,7 +18,7 @@ #ifndef HW_STM32L4X5_RCC_INTERNALS_H #define HW_STM32L4X5_RCC_INTERNALS_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/stm32l4x5_rcc.h" #define TYPE_RCC_CLOCK_MUX "stm32l4x5-rcc-clock-mux" diff --git a/include/hw/register.h b/include/hw/register.h index b3d20fee7d..1f265f4ed7 100644 --- a/include/hw/register.h +++ b/include/hw/register.h @@ -13,7 +13,7 @@ #include "hw/core/qdev.h" #include "system/memory.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qom/object.h" typedef struct RegisterInfo RegisterInfo; diff --git a/target/arm/cpregs.h b/target/arm/cpregs.h index 48a406a5fb..f5ec7484c1 100644 --- a/target/arm/cpregs.h +++ b/target/arm/cpregs.h @@ -21,7 +21,7 @@ #ifndef TARGET_ARM_CPREGS_H #define TARGET_ARM_CPREGS_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "exec/memop.h" #include "target/arm/kvm-consts.h" #include "cpu.h" diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 579fa8f8f4..c86a4e667d 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -20,7 +20,7 @@ #ifndef TARGET_ARM_FEATURES_H #define TARGET_ARM_FEATURES_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qemu/host-utils.h" #include "cpu.h" #include "cpu-sysregs.h" diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 39f2b2e54d..9579d43ba3 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -22,7 +22,7 @@ #include "kvm-consts.h" #include "qemu/cpu-float.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "cpu-qom.h" #include "exec/cpu-common.h" #include "exec/cpu-defs.h" diff --git a/target/arm/internals.h b/target/arm/internals.h index 75677945af..9cd4bf74ef 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -29,7 +29,7 @@ #include "exec/vaddr.h" #include "exec/breakpoint.h" #include "accel/tcg/tb-cpu-state.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "tcg/tcg-gvec-desc.h" #include "system/memory.h" #include "syndrome.h" diff --git a/target/arm/mmuidx-internal.h b/target/arm/mmuidx-internal.h index 962b053852..776e31c9ba 100644 --- a/target/arm/mmuidx-internal.h +++ b/target/arm/mmuidx-internal.h @@ -8,7 +8,7 @@ #include "mmuidx.h" #include "tcg/debug-assert.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" FIELD(MMUIDXINFO, EL, 0, 2) diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h index 43a854f517..656b7dc044 100644 --- a/target/hexagon/cpu.h +++ b/target/hexagon/cpu.h @@ -25,7 +25,7 @@ #include "exec/cpu-defs.h" #include "hex_regs.h" #include "mmvec/mmvec.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #ifndef CONFIG_USER_ONLY #error "Hexagon does not support system emulation" diff --git a/target/hppa/cpu.h b/target/hppa/cpu.h index c652ef945a..012e54f8f6 100644 --- a/target/hppa/cpu.h +++ b/target/hppa/cpu.h @@ -27,7 +27,7 @@ #include "system/memory.h" #include "qemu/cpu-float.h" #include "qemu/interval-tree.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #define MMU_KERNEL_IDX 0 #define MMU_KERNEL_P_IDX 1 diff --git a/target/loongarch/cpu-csr.h b/target/loongarch/cpu-csr.h index 6898947498..7755592926 100644 --- a/target/loongarch/cpu-csr.h +++ b/target/loongarch/cpu-csr.h @@ -8,7 +8,7 @@ #ifndef LOONGARCH_CPU_CSR_H #define LOONGARCH_CPU_CSR_H -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" /* Based on kernel definitions: arch/loongarch/include/asm/loongarch.h */ diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h index 1a14469b3b..92af68ea7f 100644 --- a/target/loongarch/cpu.h +++ b/target/loongarch/cpu.h @@ -13,7 +13,7 @@ #include "exec/cpu-defs.h" #include "exec/cpu-interrupt.h" #include "fpu/softfloat-types.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "qemu/timer.h" #ifndef CONFIG_USER_ONLY #include "system/memory.h" diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 787020f6f9..dbebae89dc 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -27,7 +27,7 @@ #include "exec/cpu-interrupt.h" #include "cpu-qom.h" #include "qom/object.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #define CPU_RESOLVING_TYPE TYPE_POWERPC_CPU diff --git a/target/ppc/internal.h b/target/ppc/internal.h index 7723350227..58f315ffcf 100644 --- a/target/ppc/internal.h +++ b/target/ppc/internal.h @@ -19,7 +19,7 @@ #define PPC_INTERNAL_H #include "exec/breakpoint.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "exec/page-protection.h" #include "accel/tcg/tb-cpu-state.h" diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index b54cd78f8f..90b3e95105 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -21,7 +21,7 @@ #define RISCV_CPU_H #include "hw/core/cpu.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/core/qdev-properties.h" #include "exec/cpu-common.h" #include "exec/cpu-defs.h" diff --git a/target/riscv/internals.h b/target/riscv/internals.h index 172296f12e..35b923c4bf 100644 --- a/target/riscv/internals.h +++ b/target/riscv/internals.h @@ -20,7 +20,7 @@ #define RISCV_CPU_INTERNALS_H #include "exec/cpu-common.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "fpu/softfloat-types.h" #include "target/riscv/cpu_bits.h" diff --git a/target/riscv/vector_internals.h b/target/riscv/vector_internals.h index 8eee7e5c31..5681b81815 100644 --- a/target/riscv/vector_internals.h +++ b/target/riscv/vector_internals.h @@ -20,7 +20,7 @@ #define TARGET_RISCV_VECTOR_INTERNALS_H #include "qemu/bitops.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "cpu.h" #include "tcg/tcg-gvec-desc.h" #include "internals.h" diff --git a/target/rx/cpu.h b/target/rx/cpu.h index ba5761b647..b3b1ecff5a 100644 --- a/target/rx/cpu.h +++ b/target/rx/cpu.h @@ -20,7 +20,7 @@ #define RX_CPU_H #include "qemu/bitops.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "cpu-qom.h" #include "exec/cpu-common.h" diff --git a/target/tricore/cpu.h b/target/tricore/cpu.h index 82085fbc32..ab46192e26 100644 --- a/target/tricore/cpu.h +++ b/target/tricore/cpu.h @@ -21,7 +21,7 @@ #define TRICORE_CPU_H #include "cpu-qom.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "exec/cpu-common.h" #include "exec/cpu-defs.h" #include "qemu/cpu-float.h" diff --git a/target/tricore/helper.c b/target/tricore/helper.c index 7574111c87..7ee8c7fd69 100644 --- a/target/tricore/helper.c +++ b/target/tricore/helper.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "cpu.h" #include "exec/cputlb.h" #include "accel/tcg/cpu-mmu-index.h" diff --git a/tests/qtest/sdhci-test.c b/tests/qtest/sdhci-test.c index 6275e7626c..7b32711c8f 100644 --- a/tests/qtest/sdhci-test.c +++ b/tests/qtest/sdhci-test.c @@ -9,7 +9,7 @@ */ #include "qemu/osdep.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "libqtest.h" #include "qemu/module.h" #include "libqos/pci-pc.h" diff --git a/tests/qtest/sifive-e-aon-watchdog-test.c b/tests/qtest/sifive-e-aon-watchdog-test.c index 1f313d16ad..277f1b8360 100644 --- a/tests/qtest/sifive-e-aon-watchdog-test.c +++ b/tests/qtest/sifive-e-aon-watchdog-test.c @@ -20,7 +20,7 @@ #include "qemu/timer.h" #include "qemu/bitops.h" #include "libqtest.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "hw/misc/sifive_e_aon.h" FIELD(AON_WDT_WDOGCFG, SCALE, 0, 4) diff --git a/tests/qtest/stm32l4x5_rcc-test.c b/tests/qtest/stm32l4x5_rcc-test.c index d927c655d1..4ab0a0ab29 100644 --- a/tests/qtest/stm32l4x5_rcc-test.c +++ b/tests/qtest/stm32l4x5_rcc-test.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "libqtest-single.h" #include "hw/misc/stm32l4x5_rcc_internals.h" diff --git a/tests/qtest/stm32l4x5_usart-test.c b/tests/qtest/stm32l4x5_usart-test.c index 98a7472307..a72c5a685d 100644 --- a/tests/qtest/stm32l4x5_usart-test.c +++ b/tests/qtest/stm32l4x5_usart-test.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "libqtest.h" #include "hw/misc/stm32l4x5_rcc_internals.h" -#include "hw/registerfields.h" +#include "hw/core/registerfields.h" #include "stm32l4x5.h" #define RCC_BASE_ADDR 0x40021000 From 8c7d406c886e2c7adf3a3bef9b9aa11a22126ccb Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:15 +0100 Subject: [PATCH 022/152] include: move hw/register.h to hw/core/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- hw/core/register.c | 2 +- hw/dma/xlnx_csu_dma.c | 2 +- hw/intc/xlnx-pmu-iomod-intc.c | 2 +- hw/intc/xlnx-zynqmp-ipi.c | 2 +- hw/misc/xlnx-versal-cframe-reg.c | 2 +- hw/misc/xlnx-versal-cfu.c | 2 +- hw/misc/xlnx-versal-crl.c | 2 +- hw/misc/xlnx-versal-pmc-iou-slcr.c | 2 +- hw/misc/xlnx-versal-xramc.c | 2 +- hw/misc/xlnx-zynqmp-apu-ctrl.c | 2 +- hw/misc/xlnx-zynqmp-crf.c | 2 +- hw/net/can/xlnx-versal-canfd.c | 2 +- hw/net/can/xlnx-zynqmp-can.c | 2 +- hw/rtc/ls7a_rtc.c | 2 +- hw/rtc/xlnx-zynqmp-rtc.c | 2 +- hw/ssi/xilinx_spips.c | 2 +- hw/usb/hcd-dwc3.c | 2 +- hw/usb/xlnx-usb-subsystem.c | 2 +- hw/usb/xlnx-versal-usb2-ctrl-regs.c | 2 +- include/hw/{ => core}/register.h | 0 include/hw/cxl/cxl_component.h | 2 +- include/hw/cxl/cxl_device.h | 2 +- include/hw/dma/xlnx-zdma.h | 2 +- include/hw/dma/xlnx-zynq-devcfg.h | 2 +- include/hw/dma/xlnx_csu_dma.h | 2 +- include/hw/intc/xlnx-pmu-iomod-intc.h | 2 +- include/hw/intc/xlnx-zynqmp-ipi.h | 2 +- include/hw/misc/allwinner-a10-dramc.h | 2 +- include/hw/misc/xlnx-versal-cframe-reg.h | 2 +- include/hw/misc/xlnx-versal-cfu.h | 2 +- include/hw/misc/xlnx-versal-crl.h | 2 +- include/hw/misc/xlnx-versal-pmc-iou-slcr.h | 2 +- include/hw/misc/xlnx-versal-trng.h | 2 +- include/hw/misc/xlnx-versal-xramc.h | 2 +- include/hw/misc/xlnx-zynqmp-apu-ctrl.h | 2 +- include/hw/misc/xlnx-zynqmp-crf.h | 2 +- include/hw/net/xlnx-versal-canfd.h | 2 +- include/hw/net/xlnx-zynqmp-can.h | 2 +- include/hw/nvram/xlnx-bbram.h | 2 +- include/hw/nvram/xlnx-versal-efuse.h | 2 +- include/hw/nvram/xlnx-zynqmp-efuse.h | 2 +- include/hw/pci/pcie_doe.h | 2 +- include/hw/rtc/xlnx-zynqmp-rtc.h | 2 +- include/hw/ssi/xlnx-versal-ospi.h | 2 +- include/hw/usb/hcd-dwc3.h | 2 +- include/hw/usb/xlnx-usb-subsystem.h | 2 +- include/hw/usb/xlnx-versal-usb2-ctrl-regs.h | 2 +- 48 files changed, 47 insertions(+), 47 deletions(-) rename include/hw/{ => core}/register.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index e0904cc0cc..b38215954a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3559,7 +3559,7 @@ Register API M: Alistair Francis S: Maintained F: hw/core/register.c -F: include/hw/register.h +F: include/hw/core/register.h F: include/hw/core/registerfields.h Rust diff --git a/hw/core/register.c b/hw/core/register.c index 81316d4859..c3f3c936e7 100644 --- a/hw/core/register.c +++ b/hw/core/register.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/dma/xlnx_csu_dma.c b/hw/dma/xlnx_csu_dma.c index 650401614e..ffe258cf31 100644 --- a/hw/dma/xlnx_csu_dma.c +++ b/hw/dma/xlnx_csu_dma.c @@ -28,7 +28,7 @@ #include "system/dma.h" #include "hw/core/ptimer.h" #include "hw/stream.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/dma/xlnx_csu_dma.h" /* diff --git a/hw/intc/xlnx-pmu-iomod-intc.c b/hw/intc/xlnx-pmu-iomod-intc.c index f3509efa0a..b8bafe2f3f 100644 --- a/hw/intc/xlnx-pmu-iomod-intc.c +++ b/hw/intc/xlnx-pmu-iomod-intc.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/bitops.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/intc/xlnx-zynqmp-ipi.c b/hw/intc/xlnx-zynqmp-ipi.c index 99566bc2e2..e69ea74ff7 100644 --- a/hw/intc/xlnx-zynqmp-ipi.c +++ b/hw/intc/xlnx-zynqmp-ipi.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "migration/vmstate.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/bitops.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/xlnx-versal-cframe-reg.c b/hw/misc/xlnx-versal-cframe-reg.c index a5a5e41f3e..efacbe83ab 100644 --- a/hw/misc/xlnx-versal-cframe-reg.c +++ b/hw/misc/xlnx-versal-cframe-reg.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/core/registerfields.h" #include "qemu/bitops.h" #include "qemu/log.h" diff --git a/hw/misc/xlnx-versal-cfu.c b/hw/misc/xlnx-versal-cfu.c index 13cd597da4..bdce0ce747 100644 --- a/hw/misc/xlnx-versal-cfu.c +++ b/hw/misc/xlnx-versal-cfu.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/core/irq.h" #include "qemu/bitops.h" #include "qemu/log.h" diff --git a/hw/misc/xlnx-versal-crl.c b/hw/misc/xlnx-versal-crl.c index b0baabc1ad..072d6d9859 100644 --- a/hw/misc/xlnx-versal-crl.c +++ b/hw/misc/xlnx-versal-crl.c @@ -12,7 +12,7 @@ #include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/resettable.h" #include "target/arm/arm-powerctl.h" diff --git a/hw/misc/xlnx-versal-pmc-iou-slcr.c b/hw/misc/xlnx-versal-pmc-iou-slcr.c index 84d474c38f..0246167a5e 100644 --- a/hw/misc/xlnx-versal-pmc-iou-slcr.c +++ b/hw/misc/xlnx-versal-pmc-iou-slcr.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/core/irq.h" #include "qemu/bitops.h" #include "qemu/log.h" diff --git a/hw/misc/xlnx-versal-xramc.c b/hw/misc/xlnx-versal-xramc.c index 6a86f6b5d4..f4f02c7680 100644 --- a/hw/misc/xlnx-versal-xramc.c +++ b/hw/misc/xlnx-versal-xramc.c @@ -11,7 +11,7 @@ #include "qapi/error.h" #include "migration/vmstate.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/core/qdev-properties.h" #include "hw/core/irq.h" #include "hw/misc/xlnx-versal-xramc.h" diff --git a/hw/misc/xlnx-zynqmp-apu-ctrl.c b/hw/misc/xlnx-zynqmp-apu-ctrl.c index 93f0bedc48..957043f01b 100644 --- a/hw/misc/xlnx-zynqmp-apu-ctrl.c +++ b/hw/misc/xlnx-zynqmp-apu-ctrl.c @@ -15,7 +15,7 @@ #include "hw/core/qdev-properties.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/bitops.h" diff --git a/hw/misc/xlnx-zynqmp-crf.c b/hw/misc/xlnx-zynqmp-crf.c index 841bce2231..a2ebf6ce5d 100644 --- a/hw/misc/xlnx-zynqmp-crf.c +++ b/hw/misc/xlnx-zynqmp-crf.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/bitops.h" #include "qemu/log.h" #include "migration/vmstate.h" diff --git a/hw/net/can/xlnx-versal-canfd.c b/hw/net/can/xlnx-versal-canfd.c index 94d9178a54..3ceb1a8b91 100644 --- a/hw/net/can/xlnx-versal-canfd.c +++ b/hw/net/can/xlnx-versal-canfd.c @@ -33,7 +33,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qapi/error.h" #include "qemu/log.h" #include "hw/core/qdev-properties.h" diff --git a/hw/net/can/xlnx-zynqmp-can.c b/hw/net/can/xlnx-zynqmp-can.c index 533ac854a2..6c583cab8f 100644 --- a/hw/net/can/xlnx-zynqmp-can.c +++ b/hw/net/can/xlnx-zynqmp-can.c @@ -31,7 +31,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/core/irq.h" #include "qapi/error.h" #include "qemu/bitops.h" diff --git a/hw/rtc/ls7a_rtc.c b/hw/rtc/ls7a_rtc.c index 54943f60b8..b0c6588e09 100644 --- a/hw/rtc/ls7a_rtc.c +++ b/hw/rtc/ls7a_rtc.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/timer.h" #include "system/system.h" #include "qemu/cutils.h" diff --git a/hw/rtc/xlnx-zynqmp-rtc.c b/hw/rtc/xlnx-zynqmp-rtc.c index 18849340d6..49d48dc678 100644 --- a/hw/rtc/xlnx-zynqmp-rtc.c +++ b/hw/rtc/xlnx-zynqmp-rtc.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/bitops.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c index e3c6035c16..a56a5e304d 100644 --- a/hw/ssi/xilinx_spips.c +++ b/hw/ssi/xilinx_spips.c @@ -32,7 +32,7 @@ #include "qemu/bitops.h" #include "hw/ssi/xilinx_spips.h" #include "qapi/error.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "system/dma.h" #include "migration/blocker.h" #include "migration/vmstate.h" diff --git a/hw/usb/hcd-dwc3.c b/hw/usb/hcd-dwc3.c index 74dff39fda..4018d70f02 100644 --- a/hw/usb/hcd-dwc3.c +++ b/hw/usb/hcd-dwc3.c @@ -29,7 +29,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/bitops.h" #include "qom/object.h" #include "migration/vmstate.h" diff --git a/hw/usb/xlnx-usb-subsystem.c b/hw/usb/xlnx-usb-subsystem.c index 7193dd4cd2..e0dfdfdcbd 100644 --- a/hw/usb/xlnx-usb-subsystem.c +++ b/hw/usb/xlnx-usb-subsystem.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/bitops.h" #include "qom/object.h" #include "qapi/error.h" diff --git a/hw/usb/xlnx-versal-usb2-ctrl-regs.c b/hw/usb/xlnx-versal-usb2-ctrl-regs.c index eb946b5dbd..33a7d7fbca 100644 --- a/hw/usb/xlnx-versal-usb2-ctrl-regs.c +++ b/hw/usb/xlnx-versal-usb2-ctrl-regs.c @@ -30,7 +30,7 @@ #include "qemu/osdep.h" #include "hw/sysbus.h" #include "hw/core/irq.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qemu/bitops.h" #include "qom/object.h" #include "migration/vmstate.h" diff --git a/include/hw/register.h b/include/hw/core/register.h similarity index 100% rename from include/hw/register.h rename to include/hw/core/register.h diff --git a/include/hw/cxl/cxl_component.h b/include/hw/cxl/cxl_component.h index 945ee6ffd0..b0f2aa7914 100644 --- a/include/hw/cxl/cxl_component.h +++ b/include/hw/cxl/cxl_component.h @@ -17,7 +17,7 @@ #include "qemu/range.h" #include "hw/cxl/cxl_cdat.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qapi/error.h" enum reg_type { diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index 89411c8093..165355baf9 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -12,7 +12,7 @@ #include "hw/cxl/cxl_component.h" #include "hw/pci/pci_device.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/cxl/cxl_events.h" /* diff --git a/include/hw/dma/xlnx-zdma.h b/include/hw/dma/xlnx-zdma.h index 9c57c49910..2d2d4aeefa 100644 --- a/include/hw/dma/xlnx-zdma.h +++ b/include/hw/dma/xlnx-zdma.h @@ -30,7 +30,7 @@ #define XLNX_ZDMA_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "system/dma.h" #include "qom/object.h" diff --git a/include/hw/dma/xlnx-zynq-devcfg.h b/include/hw/dma/xlnx-zynq-devcfg.h index e4cf085d70..8d10553c22 100644 --- a/include/hw/dma/xlnx-zynq-devcfg.h +++ b/include/hw/dma/xlnx-zynq-devcfg.h @@ -27,7 +27,7 @@ #ifndef XLNX_ZYNQ_DEVCFG_H #define XLNX_ZYNQ_DEVCFG_H -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/sysbus.h" #include "qom/object.h" diff --git a/include/hw/dma/xlnx_csu_dma.h b/include/hw/dma/xlnx_csu_dma.h index 85b6b64e0e..63af4586dd 100644 --- a/include/hw/dma/xlnx_csu_dma.h +++ b/include/hw/dma/xlnx_csu_dma.h @@ -22,7 +22,7 @@ #define XLNX_CSU_DMA_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/core/ptimer.h" #include "hw/stream.h" diff --git a/include/hw/intc/xlnx-pmu-iomod-intc.h b/include/hw/intc/xlnx-pmu-iomod-intc.h index ccc8bd272a..e36b5e1762 100644 --- a/include/hw/intc/xlnx-pmu-iomod-intc.h +++ b/include/hw/intc/xlnx-pmu-iomod-intc.h @@ -26,7 +26,7 @@ #define HW_INTC_XLNX_PMU_IOMOD_INTC_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qom/object.h" #define TYPE_XLNX_PMU_IO_INTC "xlnx.pmu_io_intc" diff --git a/include/hw/intc/xlnx-zynqmp-ipi.h b/include/hw/intc/xlnx-zynqmp-ipi.h index 33eff1d4f6..53fc89084a 100644 --- a/include/hw/intc/xlnx-zynqmp-ipi.h +++ b/include/hw/intc/xlnx-zynqmp-ipi.h @@ -26,7 +26,7 @@ #define XLNX_ZYNQMP_IPI_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "qom/object.h" #define TYPE_XLNX_ZYNQMP_IPI "xlnx.zynqmp_ipi" diff --git a/include/hw/misc/allwinner-a10-dramc.h b/include/hw/misc/allwinner-a10-dramc.h index b61fbecbe7..a1ae621e21 100644 --- a/include/hw/misc/allwinner-a10-dramc.h +++ b/include/hw/misc/allwinner-a10-dramc.h @@ -25,7 +25,7 @@ #include "qom/object.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" /** * @name Constants diff --git a/include/hw/misc/xlnx-versal-cframe-reg.h b/include/hw/misc/xlnx-versal-cframe-reg.h index 83f6a07744..fe8788a745 100644 --- a/include/hw/misc/xlnx-versal-cframe-reg.h +++ b/include/hw/misc/xlnx-versal-cframe-reg.h @@ -18,7 +18,7 @@ #define HW_MISC_XLNX_VERSAL_CFRAME_REG_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/misc/xlnx-cfi-if.h" #include "hw/misc/xlnx-versal-cfu.h" #include "qemu/fifo32.h" diff --git a/include/hw/misc/xlnx-versal-cfu.h b/include/hw/misc/xlnx-versal-cfu.h index 3de3ee4923..3d7ca506de 100644 --- a/include/hw/misc/xlnx-versal-cfu.h +++ b/include/hw/misc/xlnx-versal-cfu.h @@ -18,7 +18,7 @@ #define HW_MISC_XLNX_VERSAL_CFU_APB_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/misc/xlnx-cfi-if.h" #include "qemu/fifo32.h" diff --git a/include/hw/misc/xlnx-versal-crl.h b/include/hw/misc/xlnx-versal-crl.h index 49ed500acd..ace3d198bd 100644 --- a/include/hw/misc/xlnx-versal-crl.h +++ b/include/hw/misc/xlnx-versal-crl.h @@ -11,7 +11,7 @@ #define HW_MISC_XLNX_VERSAL_CRL_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "target/arm/cpu-qom.h" #include "hw/arm/xlnx-versal-version.h" diff --git a/include/hw/misc/xlnx-versal-pmc-iou-slcr.h b/include/hw/misc/xlnx-versal-pmc-iou-slcr.h index 0c4a4fd66d..d8f45bd94b 100644 --- a/include/hw/misc/xlnx-versal-pmc-iou-slcr.h +++ b/include/hw/misc/xlnx-versal-pmc-iou-slcr.h @@ -55,7 +55,7 @@ #define XLNX_VERSAL_PMC_IOU_SLCR_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #define TYPE_XILINX_VERSAL_PMC_IOU_SLCR "xlnx.versal-pmc-iou-slcr" diff --git a/include/hw/misc/xlnx-versal-trng.h b/include/hw/misc/xlnx-versal-trng.h index 4e516216db..8de2910404 100644 --- a/include/hw/misc/xlnx-versal-trng.h +++ b/include/hw/misc/xlnx-versal-trng.h @@ -28,7 +28,7 @@ #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #define TYPE_XLNX_VERSAL_TRNG "xlnx.versal-trng" OBJECT_DECLARE_SIMPLE_TYPE(XlnxVersalTRng, XLNX_VERSAL_TRNG); diff --git a/include/hw/misc/xlnx-versal-xramc.h b/include/hw/misc/xlnx-versal-xramc.h index 35e4e8b91d..e79941d886 100644 --- a/include/hw/misc/xlnx-versal-xramc.h +++ b/include/hw/misc/xlnx-versal-xramc.h @@ -10,7 +10,7 @@ #define XLNX_VERSAL_XRAMC_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #define TYPE_XLNX_XRAM_CTRL "xlnx.versal-xramc" diff --git a/include/hw/misc/xlnx-zynqmp-apu-ctrl.h b/include/hw/misc/xlnx-zynqmp-apu-ctrl.h index fbfe34aa7e..c031572005 100644 --- a/include/hw/misc/xlnx-zynqmp-apu-ctrl.h +++ b/include/hw/misc/xlnx-zynqmp-apu-ctrl.h @@ -12,7 +12,7 @@ #define HW_MISC_XLNX_ZYNQMP_APU_CTRL_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "target/arm/cpu-qom.h" #define TYPE_XLNX_ZYNQMP_APU_CTRL "xlnx.apu-ctrl" diff --git a/include/hw/misc/xlnx-zynqmp-crf.h b/include/hw/misc/xlnx-zynqmp-crf.h index c746ae1039..df83034a98 100644 --- a/include/hw/misc/xlnx-zynqmp-crf.h +++ b/include/hw/misc/xlnx-zynqmp-crf.h @@ -9,7 +9,7 @@ #define HW_MISC_XLNX_ZYNQMP_CRF_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #define TYPE_XLNX_ZYNQMP_CRF "xlnx.zynqmp_crf" OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPCRF, XLNX_ZYNQMP_CRF) diff --git a/include/hw/net/xlnx-versal-canfd.h b/include/hw/net/xlnx-versal-canfd.h index 45cf0001c6..7cadf3123b 100644 --- a/include/hw/net/xlnx-versal-canfd.h +++ b/include/hw/net/xlnx-versal-canfd.h @@ -28,7 +28,7 @@ #ifndef HW_CANFD_XILINX_H #define HW_CANFD_XILINX_H -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/core/ptimer.h" #include "net/can_emu.h" #include "hw/core/qdev-clock.h" diff --git a/include/hw/net/xlnx-zynqmp-can.h b/include/hw/net/xlnx-zynqmp-can.h index d272f40ea8..d23c1523ca 100644 --- a/include/hw/net/xlnx-zynqmp-can.h +++ b/include/hw/net/xlnx-zynqmp-can.h @@ -31,7 +31,7 @@ #define XLNX_ZYNQMP_CAN_H #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "net/can_emu.h" #include "net/can_host.h" #include "qemu/fifo32.h" diff --git a/include/hw/nvram/xlnx-bbram.h b/include/hw/nvram/xlnx-bbram.h index 63558dbc32..27423035d4 100644 --- a/include/hw/nvram/xlnx-bbram.h +++ b/include/hw/nvram/xlnx-bbram.h @@ -30,7 +30,7 @@ #include "hw/core/qdev.h" #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #define RMAX_XLNX_BBRAM ((0x4c / 4) + 1) diff --git a/include/hw/nvram/xlnx-versal-efuse.h b/include/hw/nvram/xlnx-versal-efuse.h index 37d09da480..07f1000a85 100644 --- a/include/hw/nvram/xlnx-versal-efuse.h +++ b/include/hw/nvram/xlnx-versal-efuse.h @@ -24,7 +24,7 @@ #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/nvram/xlnx-efuse.h" #define XLNX_VERSAL_EFUSE_CTRL_R_MAX ((0x100 / 4) + 1) diff --git a/include/hw/nvram/xlnx-zynqmp-efuse.h b/include/hw/nvram/xlnx-zynqmp-efuse.h index 6eb3fea8fa..d488694386 100644 --- a/include/hw/nvram/xlnx-zynqmp-efuse.h +++ b/include/hw/nvram/xlnx-zynqmp-efuse.h @@ -24,7 +24,7 @@ #include "hw/core/irq.h" #include "hw/sysbus.h" -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/nvram/xlnx-efuse.h" #define XLNX_ZYNQMP_EFUSE_R_MAX ((0x10fc / 4) + 1) diff --git a/include/hw/pci/pcie_doe.h b/include/hw/pci/pcie_doe.h index 9e1275db8a..4bd49bb5ae 100644 --- a/include/hw/pci/pcie_doe.h +++ b/include/hw/pci/pcie_doe.h @@ -11,7 +11,7 @@ #define PCIE_DOE_H #include "qemu/range.h" -#include "hw/register.h" +#include "hw/core/register.h" /* * Reference: diff --git a/include/hw/rtc/xlnx-zynqmp-rtc.h b/include/hw/rtc/xlnx-zynqmp-rtc.h index f0c6a2d78a..a542b87cb8 100644 --- a/include/hw/rtc/xlnx-zynqmp-rtc.h +++ b/include/hw/rtc/xlnx-zynqmp-rtc.h @@ -27,7 +27,7 @@ #ifndef HW_RTC_XLNX_ZYNQMP_RTC_H #define HW_RTC_XLNX_ZYNQMP_RTC_H -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/sysbus.h" #include "qom/object.h" diff --git a/include/hw/ssi/xlnx-versal-ospi.h b/include/hw/ssi/xlnx-versal-ospi.h index 4ac975aa2f..e8709208ca 100644 --- a/include/hw/ssi/xlnx-versal-ospi.h +++ b/include/hw/ssi/xlnx-versal-ospi.h @@ -52,7 +52,7 @@ #ifndef XLNX_VERSAL_OSPI_H #define XLNX_VERSAL_OSPI_H -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/ssi/ssi.h" #include "qemu/fifo8.h" #include "hw/dma/xlnx_csu_dma.h" diff --git a/include/hw/usb/hcd-dwc3.h b/include/hw/usb/hcd-dwc3.h index dbdf12b21d..e656532d6c 100644 --- a/include/hw/usb/hcd-dwc3.h +++ b/include/hw/usb/hcd-dwc3.h @@ -26,7 +26,7 @@ #ifndef HCD_DWC3_H #define HCD_DWC3_H -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/usb/hcd-xhci.h" #include "hw/usb/hcd-xhci-sysbus.h" diff --git a/include/hw/usb/xlnx-usb-subsystem.h b/include/hw/usb/xlnx-usb-subsystem.h index 40f9e97e09..b22e5d065b 100644 --- a/include/hw/usb/xlnx-usb-subsystem.h +++ b/include/hw/usb/xlnx-usb-subsystem.h @@ -25,7 +25,7 @@ #ifndef XLNX_USB_SUBSYSTEM_H #define XLNX_USB_SUBSYSTEM_H -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/sysbus.h" #include "hw/usb/xlnx-versal-usb2-ctrl-regs.h" #include "hw/usb/hcd-dwc3.h" diff --git a/include/hw/usb/xlnx-versal-usb2-ctrl-regs.h b/include/hw/usb/xlnx-versal-usb2-ctrl-regs.h index 6a502006b0..c1470da475 100644 --- a/include/hw/usb/xlnx-versal-usb2-ctrl-regs.h +++ b/include/hw/usb/xlnx-versal-usb2-ctrl-regs.h @@ -26,7 +26,7 @@ #ifndef XLNX_VERSAL_USB2_CTRL_REGS_H #define XLNX_VERSAL_USB2_CTRL_REGS_H -#include "hw/register.h" +#include "hw/core/register.h" #include "hw/sysbus.h" #define TYPE_XILINX_VERSAL_USB2_CTRL_REGS "xlnx.versal-usb2-ctrl-regs" From 4b64d23a7e392016c5735910916e62b20c3a42c7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:18 +0100 Subject: [PATCH 023/152] include: move hw/resettable.h to hw/core/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- docs/devel/reset.rst | 2 +- hw/core/reset.c | 2 +- hw/core/resetcontainer.c | 2 +- hw/core/resettable.c | 2 +- hw/misc/xlnx-versal-crl.c | 2 +- hw/net/lan9118_phy.c | 2 +- hw/pci-host/fsl_imx8m_phy.c | 2 +- hw/rtc/rs5c372.c | 2 +- include/hw/core/boards.h | 2 +- include/hw/core/qdev.h | 2 +- include/hw/{ => core}/resettable.h | 0 include/hw/virtio/virtio-balloon.h | 2 +- include/hw/virtio/virtio-mem.h | 2 +- include/system/reset.h | 2 +- system/runstate.c | 2 +- target/s390x/cpu.c | 2 +- 17 files changed, 16 insertions(+), 16 deletions(-) rename include/hw/{ => core}/resettable.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index b38215954a..e241690bdc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3961,7 +3961,7 @@ F: docs/devel/clocks.rst Reset framework M: Peter Maydell S: Maintained -F: include/hw/resettable.h +F: include/hw/core/resettable.h F: include/hw/core/resetcontainer.h F: include/system/reset.h F: hw/core/reset.c diff --git a/docs/devel/reset.rst b/docs/devel/reset.rst index c02fe0a405..91e8c21189 100644 --- a/docs/devel/reset.rst +++ b/docs/devel/reset.rst @@ -4,7 +4,7 @@ Reset in QEMU: the Resettable interface ======================================= The reset of qemu objects is handled using the resettable interface declared -in ``include/hw/resettable.h``. +in ``include/hw/core/resettable.h``. This interface allows objects to be grouped (on a tree basis); so that the whole group can be reset consistently. Each individual member object does not diff --git a/hw/core/reset.c b/hw/core/reset.c index 65f82fa43d..e7230b49b7 100644 --- a/hw/core/reset.c +++ b/hw/core/reset.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "system/reset.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "hw/core/resetcontainer.h" /* diff --git a/hw/core/resetcontainer.c b/hw/core/resetcontainer.c index 5ff17002e7..ef84aa2374 100644 --- a/hw/core/resetcontainer.c +++ b/hw/core/resetcontainer.c @@ -15,7 +15,7 @@ */ #include "qemu/osdep.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "hw/core/resetcontainer.h" struct ResettableContainer { diff --git a/hw/core/resettable.c b/hw/core/resettable.c index 5cdb4a4f8d..86e16c8c6e 100644 --- a/hw/core/resettable.c +++ b/hw/core/resettable.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "trace.h" /** diff --git a/hw/misc/xlnx-versal-crl.c b/hw/misc/xlnx-versal-crl.c index 072d6d9859..9bbf44def6 100644 --- a/hw/misc/xlnx-versal-crl.c +++ b/hw/misc/xlnx-versal-crl.c @@ -13,7 +13,7 @@ #include "hw/sysbus.h" #include "hw/core/irq.h" #include "hw/core/register.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "target/arm/arm-powerctl.h" #include "target/arm/multiprocessing.h" diff --git a/hw/net/lan9118_phy.c b/hw/net/lan9118_phy.c index f0f6e55d80..2fc027d112 100644 --- a/hw/net/lan9118_phy.c +++ b/hw/net/lan9118_phy.c @@ -16,7 +16,7 @@ #include "hw/net/lan9118_phy.h" #include "hw/net/mii.h" #include "hw/core/irq.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "trace.h" diff --git a/hw/pci-host/fsl_imx8m_phy.c b/hw/pci-host/fsl_imx8m_phy.c index 04da3f99a0..0afa6167e0 100644 --- a/hw/pci-host/fsl_imx8m_phy.c +++ b/hw/pci-host/fsl_imx8m_phy.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/pci-host/fsl_imx8m_phy.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "migration/vmstate.h" #define CMN_REG075 0x1d4 diff --git a/hw/rtc/rs5c372.c b/hw/rtc/rs5c372.c index 58f12b836d..20015dd6c1 100644 --- a/hw/rtc/rs5c372.c +++ b/hw/rtc/rs5c372.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/i2c/i2c.h" #include "hw/core/qdev-properties.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "migration/vmstate.h" #include "qemu/bcd.h" #include "qom/object.h" diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index a48ed4f86a..815845207b 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -10,7 +10,7 @@ #include "qemu/module.h" #include "qom/object.h" #include "hw/core/cpu.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #define TYPE_MACHINE_SUFFIX "-machine" diff --git a/include/hw/core/qdev.h b/include/hw/core/qdev.h index f0ef2dc3aa..e211d807e8 100644 --- a/include/hw/core/qdev.h +++ b/include/hw/core/qdev.h @@ -8,7 +8,7 @@ #include "qemu/rcu_queue.h" #include "qom/object.h" #include "hw/core/hotplug.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" /** * DOC: The QEMU Device API diff --git a/include/hw/resettable.h b/include/hw/core/resettable.h similarity index 100% rename from include/hw/resettable.h rename to include/hw/core/resettable.h diff --git a/include/hw/virtio/virtio-balloon.h b/include/hw/virtio/virtio-balloon.h index 0456c211c6..79ac194cce 100644 --- a/include/hw/virtio/virtio-balloon.h +++ b/include/hw/virtio/virtio-balloon.h @@ -16,7 +16,7 @@ #define QEMU_VIRTIO_BALLOON_H #include "standard-headers/linux/virtio_balloon.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "hw/virtio/virtio.h" #include "system/iothread.h" #include "qom/object.h" diff --git a/include/hw/virtio/virtio-mem.h b/include/hw/virtio/virtio-mem.h index e0ab31b45a..221cfd76bf 100644 --- a/include/hw/virtio/virtio-mem.h +++ b/include/hw/virtio/virtio-mem.h @@ -14,7 +14,7 @@ #define HW_VIRTIO_MEM_H #include "standard-headers/linux/virtio_mem.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "hw/virtio/virtio.h" #include "qapi/qapi-types-misc.h" #include "system/hostmem.h" diff --git a/include/system/reset.h b/include/system/reset.h index 97131d94cf..62e9977e3c 100644 --- a/include/system/reset.h +++ b/include/system/reset.h @@ -27,7 +27,7 @@ #ifndef QEMU_SYSTEM_RESET_H #define QEMU_SYSTEM_RESET_H -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "qapi/qapi-events-run-state.h" typedef void QEMUResetHandler(void *opaque); diff --git a/system/runstate.c b/system/runstate.c index 89bbfe7fbf..ed2db56480 100644 --- a/system/runstate.c +++ b/system/runstate.c @@ -32,7 +32,7 @@ #include "exec/cpu-common.h" #include "gdbstub/syscalls.h" #include "hw/core/boards.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "migration/misc.h" #include "migration/postcopy-ram.h" #include "monitor/monitor.h" diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index da536fb30e..6c4198eb1b 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -32,7 +32,7 @@ #include "system/hw_accel.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/resettable.h" +#include "hw/core/resettable.h" #include "fpu/softfloat-helpers.h" #include "disas/capstone.h" #include "system/tcg.h" From 5d39d7d1e9e6fa4b0a7da4eb3a1544fd1335f001 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:22 +0100 Subject: [PATCH 024/152] include: move hw/stream.h to hw/core/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- hw/core/stream.c | 2 +- hw/dma/xilinx_axidma.c | 2 +- hw/dma/xlnx_csu_dma.c | 2 +- hw/microblaze/petalogix_ml605_mmu.c | 2 +- hw/net/xilinx_axienet.c | 2 +- include/hw/{ => core}/stream.h | 0 include/hw/dma/xlnx_csu_dma.h | 2 +- include/hw/ssi/xilinx_spips.h | 2 +- 9 files changed, 8 insertions(+), 8 deletions(-) rename include/hw/{ => core}/stream.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index e241690bdc..44d84aa243 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3600,7 +3600,7 @@ Streams M: Edgar E. Iglesias S: Maintained F: hw/core/stream.c -F: include/hw/stream.h +F: include/hw/core/stream.h Stubs M: Paolo Bonzini diff --git a/hw/core/stream.c b/hw/core/stream.c index 19477d0f2d..bfcac93880 100644 --- a/hw/core/stream.c +++ b/hw/core/stream.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "hw/stream.h" +#include "hw/core/stream.h" #include "qemu/module.h" size_t diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index 7cdd76330f..90ba7bf057 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -34,7 +34,7 @@ #include "qemu/module.h" #include "system/dma.h" -#include "hw/stream.h" +#include "hw/core/stream.h" #include "qom/object.h" #include "trace.h" diff --git a/hw/dma/xlnx_csu_dma.c b/hw/dma/xlnx_csu_dma.c index ffe258cf31..b390d09269 100644 --- a/hw/dma/xlnx_csu_dma.c +++ b/hw/dma/xlnx_csu_dma.c @@ -27,7 +27,7 @@ #include "migration/vmstate.h" #include "system/dma.h" #include "hw/core/ptimer.h" -#include "hw/stream.h" +#include "hw/core/stream.h" #include "hw/core/register.h" #include "hw/dma/xlnx_csu_dma.h" diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c index 9c2b0ff0b3..51ee237d58 100644 --- a/hw/microblaze/petalogix_ml605_mmu.c +++ b/hw/microblaze/petalogix_ml605_mmu.c @@ -41,7 +41,7 @@ #include "boot.h" -#include "hw/stream.h" +#include "hw/core/stream.h" #define LMB_BRAM_SIZE (128 * KiB) #define FLASH_SIZE (32 * MiB) diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c index 36047a51c0..451f8da212 100644 --- a/hw/net/xilinx_axienet.c +++ b/hw/net/xilinx_axienet.c @@ -33,7 +33,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/stream.h" +#include "hw/core/stream.h" #include "qom/object.h" #define DPHY(x) diff --git a/include/hw/stream.h b/include/hw/core/stream.h similarity index 100% rename from include/hw/stream.h rename to include/hw/core/stream.h diff --git a/include/hw/dma/xlnx_csu_dma.h b/include/hw/dma/xlnx_csu_dma.h index 63af4586dd..4d6d18fb9b 100644 --- a/include/hw/dma/xlnx_csu_dma.h +++ b/include/hw/dma/xlnx_csu_dma.h @@ -24,7 +24,7 @@ #include "hw/sysbus.h" #include "hw/core/register.h" #include "hw/core/ptimer.h" -#include "hw/stream.h" +#include "hw/core/stream.h" #define TYPE_XLNX_CSU_DMA "xlnx.csu_dma" diff --git a/include/hw/ssi/xilinx_spips.h b/include/hw/ssi/xilinx_spips.h index 7a754bf67a..56cf69a37d 100644 --- a/include/hw/ssi/xilinx_spips.h +++ b/include/hw/ssi/xilinx_spips.h @@ -27,7 +27,7 @@ #include "hw/ssi/ssi.h" #include "qemu/fifo32.h" -#include "hw/stream.h" +#include "hw/core/stream.h" #include "hw/sysbus.h" #include "qom/object.h" From c755f3b95964f344806fa8e6a6e05ffc3ee1c4fa Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:26 +0100 Subject: [PATCH 025/152] include: move hw/sysbus.h to hw/core/ Signed-off-by: Paolo Bonzini --- hw/acpi/cxl.c | 2 +- hw/adc/stm32f2xx_adc.c | 2 +- hw/arm/allwinner-a10.c | 2 +- hw/arm/allwinner-h3.c | 2 +- hw/arm/allwinner-r40.c | 2 +- hw/arm/armsse.c | 2 +- hw/arm/armv7m.c | 2 +- hw/arm/bcm2836.c | 2 +- hw/arm/bcm2838.c | 2 +- hw/arm/collie.c | 2 +- hw/arm/exynos4210.c | 2 +- hw/arm/exynos4_boards.c | 2 +- hw/arm/highbank.c | 2 +- hw/arm/integratorcp.c | 2 +- hw/arm/musicpal.c | 2 +- hw/arm/nrf51_soc.c | 2 +- hw/arm/omap1.c | 2 +- hw/arm/realview.c | 2 +- hw/arm/smmuv3.c | 2 +- hw/arm/stellaris.c | 2 +- hw/arm/strongarm.c | 2 +- hw/arm/versatilepb.c | 2 +- hw/arm/vexpress.c | 2 +- hw/arm/virt.c | 2 +- hw/arm/xilinx_zynq.c | 2 +- hw/arm/xlnx-versal-virt.c | 2 +- hw/arm/xlnx-versal.c | 2 +- hw/audio/asc.c | 2 +- hw/audio/cs4231.c | 2 +- hw/audio/marvell_88w8618.c | 2 +- hw/audio/pl041.c | 2 +- hw/avr/atmega.c | 2 +- hw/block/fdc-sysbus.c | 2 +- hw/block/pflash_cfi01.c | 2 +- hw/block/pflash_cfi02.c | 2 +- hw/block/swim.c | 2 +- hw/char/cadence_uart.c | 2 +- hw/char/cmsdk-apb-uart.c | 2 +- hw/char/digic-uart.c | 2 +- hw/char/escc.c | 2 +- hw/char/exynos4210_uart.c | 2 +- hw/char/goldfish_tty.c | 2 +- hw/char/grlib_apbuart.c | 2 +- hw/char/mcf_uart.c | 2 +- hw/char/pl011.c | 2 +- hw/char/sh_serial.c | 2 +- hw/char/xilinx_uartlite.c | 2 +- hw/core/qdev.c | 2 +- hw/core/sysbus.c | 2 +- hw/display/apple-gfx-mmio.m | 2 +- hw/display/artist.c | 2 +- hw/display/cg3.c | 2 +- hw/display/exynos4210_fimd.c | 2 +- hw/display/g364fb.c | 2 +- hw/display/jazz_led.c | 2 +- hw/display/macfb.c | 2 +- hw/display/pl110.c | 2 +- hw/display/sm501.c | 2 +- hw/display/tcx.c | 2 +- hw/display/vga-mmio.c | 2 +- hw/dma/pl080.c | 2 +- hw/dma/pl330.c | 2 +- hw/dma/rc4030.c | 2 +- hw/dma/sifive_pdma.c | 2 +- hw/dma/sparc32_dma.c | 2 +- hw/dma/xilinx_axidma.c | 2 +- hw/dma/xlnx_csu_dma.c | 2 +- hw/gpio/bcm2835_gpio.c | 2 +- hw/gpio/bcm2838_gpio.c | 2 +- hw/gpio/gpio_key.c | 2 +- hw/gpio/gpio_pwr.c | 2 +- hw/gpio/mpc8xxx.c | 2 +- hw/gpio/omap_gpio.c | 2 +- hw/gpio/pl061.c | 2 +- hw/gpio/zaurus.c | 2 +- hw/hyperv/vmbus.c | 2 +- hw/i2c/aspeed_i2c.c | 2 +- hw/i2c/bitbang_i2c.c | 2 +- hw/i2c/exynos4210_i2c.c | 2 +- hw/i2c/i2c_mux_pca954x.c | 2 +- hw/i2c/mpc_i2c.c | 2 +- hw/i2c/omap_i2c.c | 2 +- hw/i386/intel_iommu.c | 2 +- hw/i386/kvm/clock.c | 2 +- hw/i386/kvm/xen_evtchn.c | 2 +- hw/i386/kvm/xen_evtchn.h | 2 +- hw/i386/kvm/xen_gnttab.c | 2 +- hw/i386/kvm/xen_overlay.c | 2 +- hw/i386/kvm/xen_primary_console.c | 2 +- hw/i386/kvm/xen_xenstore.c | 2 +- hw/i386/microvm-dt.c | 2 +- hw/i386/nitro_enclave.c | 2 +- hw/i386/pc_piix.c | 2 +- hw/i386/pc_sysfw.c | 2 +- hw/i386/vapic.c | 2 +- hw/i386/x86-iommu.c | 2 +- hw/ide/mmio.c | 2 +- hw/input/lasips2.c | 2 +- hw/input/pl050.c | 2 +- hw/input/ps2.c | 2 +- hw/intc/allwinner-a10-pic.c | 2 +- hw/intc/apic_common.c | 2 +- hw/intc/arm_gic.c | 2 +- hw/intc/arm_gicv2m.c | 2 +- hw/intc/armv7m_nvic.c | 2 +- hw/intc/exynos4210_combiner.c | 2 +- hw/intc/exynos4210_gic.c | 2 +- hw/intc/goldfish_pic.c | 2 +- hw/intc/grlib_irqmp.c | 2 +- hw/intc/ioapic_common.c | 2 +- hw/intc/ioapic_internal.h | 2 +- hw/intc/loongarch_dintc.c | 2 +- hw/intc/loongarch_pch_msi.c | 2 +- hw/intc/loongson_ipi_common.c | 2 +- hw/intc/mips_gic.c | 2 +- hw/intc/omap_intc.c | 2 +- hw/intc/ompic.c | 2 +- hw/intc/openpic.c | 2 +- hw/intc/openpic_kvm.c | 2 +- hw/intc/pl190.c | 2 +- hw/intc/riscv_aclint.c | 2 +- hw/intc/riscv_aplic.c | 2 +- hw/intc/riscv_imsic.c | 2 +- hw/intc/s390_flic.c | 2 +- hw/intc/sifive_plic.c | 2 +- hw/intc/slavio_intctl.c | 2 +- hw/intc/xilinx_intc.c | 2 +- hw/intc/xlnx-pmu-iomod-intc.c | 2 +- hw/intc/xlnx-zynqmp-ipi.c | 2 +- hw/isa/isa-bus.c | 2 +- hw/m68k/mcf5206.c | 2 +- hw/m68k/mcf5208.c | 2 +- hw/m68k/mcf_intc.c | 2 +- hw/m68k/next-cube.c | 2 +- hw/m68k/next-kbd.c | 2 +- hw/m68k/q800.c | 2 +- hw/m68k/virt.c | 2 +- hw/mem/sparse-mem.c | 2 +- hw/microblaze/petalogix_ml605_mmu.c | 2 +- hw/microblaze/petalogix_s3adsp1800_mmu.c | 2 +- hw/mips/jazz.c | 2 +- hw/mips/malta.c | 2 +- hw/misc/allwinner-a10-ccm.c | 2 +- hw/misc/allwinner-a10-dramc.c | 2 +- hw/misc/allwinner-cpucfg.c | 2 +- hw/misc/allwinner-h3-ccu.c | 2 +- hw/misc/allwinner-h3-dramc.c | 2 +- hw/misc/allwinner-h3-sysctrl.c | 2 +- hw/misc/allwinner-r40-ccu.c | 2 +- hw/misc/allwinner-r40-dramc.c | 2 +- hw/misc/allwinner-sid.c | 2 +- hw/misc/allwinner-sramc.c | 2 +- hw/misc/arm_integrator_debug.c | 2 +- hw/misc/arm_l2x0.c | 2 +- hw/misc/arm_sysctl.c | 2 +- hw/misc/armsse-cpu-pwrctrl.c | 2 +- hw/misc/armsse-cpuid.c | 2 +- hw/misc/armsse-mhu.c | 2 +- hw/misc/eccmemctl.c | 2 +- hw/misc/empty_slot.c | 2 +- hw/misc/exynos4210_clk.c | 2 +- hw/misc/exynos4210_pmu.c | 2 +- hw/misc/exynos4210_rng.c | 2 +- hw/misc/grlib_ahb_apb_pnp.c | 2 +- hw/misc/iosb.c | 2 +- hw/misc/iotkit-secctl.c | 2 +- hw/misc/iotkit-sysctl.c | 2 +- hw/misc/iotkit-sysinfo.c | 2 +- hw/misc/ivshmem-flat.c | 2 +- hw/misc/mac_via.c | 2 +- hw/misc/mchp_pfsoc_dmc.c | 2 +- hw/misc/mchp_pfsoc_ioscb.c | 2 +- hw/misc/mchp_pfsoc_sysreg.c | 2 +- hw/misc/mips_cmgcr.c | 2 +- hw/misc/mips_cpc.c | 2 +- hw/misc/mps2-fpgaio.c | 2 +- hw/misc/mps2-scc.c | 2 +- hw/misc/pvpanic-mmio.c | 2 +- hw/misc/sbsa_ec.c | 2 +- hw/misc/sifive_e_prci.c | 2 +- hw/misc/sifive_test.c | 2 +- hw/misc/sifive_u_otp.c | 2 +- hw/misc/sifive_u_prci.c | 2 +- hw/misc/slavio_misc.c | 2 +- hw/misc/tz-mpc.c | 2 +- hw/misc/tz-msc.c | 2 +- hw/misc/tz-ppc.c | 2 +- hw/misc/unimp.c | 2 +- hw/misc/virt_ctrl.c | 2 +- hw/misc/xlnx-versal-cframe-reg.c | 2 +- hw/misc/xlnx-versal-cfu.c | 2 +- hw/misc/xlnx-versal-crl.c | 2 +- hw/misc/xlnx-versal-pmc-iou-slcr.c | 2 +- hw/misc/xlnx-versal-xramc.c | 2 +- hw/misc/xlnx-zynqmp-apu-ctrl.c | 2 +- hw/misc/xlnx-zynqmp-crf.c | 2 +- hw/misc/zynq_slcr.c | 2 +- hw/net/allwinner-sun8i-emac.c | 2 +- hw/net/allwinner_emac.c | 2 +- hw/net/can/xlnx-versal-canfd.c | 2 +- hw/net/can/xlnx-zynqmp-can.c | 2 +- hw/net/dp8393x.c | 2 +- hw/net/fsl_etsec/etsec.c | 2 +- hw/net/fsl_etsec/etsec.h | 2 +- hw/net/lan9118.c | 2 +- hw/net/lasi_i82596.c | 2 +- hw/net/mcf_fec.c | 2 +- hw/net/mv88w8618_eth.c | 2 +- hw/net/opencores_eth.c | 2 +- hw/net/smc91c111.c | 2 +- hw/net/stellaris_enet.c | 2 +- hw/net/xgmac.c | 2 +- hw/net/xilinx_axienet.c | 2 +- hw/net/xilinx_ethlite.c | 2 +- hw/nubus/mac-nubus-bridge.c | 2 +- hw/nubus/nubus-bridge.c | 2 +- hw/nvram/ds1225y.c | 2 +- hw/nvram/fw_cfg.c | 2 +- hw/openrisc/openrisc_sim.c | 2 +- hw/openrisc/virt.c | 2 +- hw/pci-bridge/cxl_root_port.c | 2 +- hw/pci-host/i440fx.c | 2 +- hw/pci-host/mv64361.c | 2 +- hw/pci-host/sabre.c | 2 +- hw/pci-host/sh_pci.c | 2 +- hw/pci-host/versatile.c | 2 +- hw/ppc/e500-ccsr.h | 2 +- hw/ppc/e500.c | 2 +- hw/ppc/e500plat.c | 2 +- hw/ppc/mac_newworld.c | 2 +- hw/ppc/mpc8544_guts.c | 2 +- hw/ppc/pegasos.c | 2 +- hw/ppc/pnv_xscom.c | 2 +- hw/ppc/ppc440_bamboo.c | 2 +- hw/ppc/ppce500_spin.c | 2 +- hw/ppc/sam460ex.c | 2 +- hw/ppc/spapr_pci.c | 2 +- hw/ppc/spapr_vio.c | 2 +- hw/ppc/virtex_ml507.c | 2 +- hw/riscv/microblaze-v-generic.c | 2 +- hw/riscv/microchip_pfsoc.c | 2 +- hw/riscv/riscv-iommu-sys.c | 2 +- hw/riscv/riscv_hart.c | 2 +- hw/riscv/sifive_e.c | 2 +- hw/riscv/sifive_u.c | 2 +- hw/riscv/spike.c | 2 +- hw/riscv/virt.c | 2 +- hw/rtc/allwinner-rtc.c | 2 +- hw/rtc/exynos4210_rtc.c | 2 +- hw/rtc/goldfish_rtc.c | 2 +- hw/rtc/ls7a_rtc.c | 2 +- hw/rtc/m48t59.c | 2 +- hw/rtc/pl031.c | 2 +- hw/rtc/sun4v-rtc.c | 2 +- hw/rtc/xlnx-zynqmp-rtc.c | 2 +- hw/rx/rx62n.c | 2 +- hw/s390x/ap-bridge.c | 2 +- hw/s390x/css-bridge.c | 2 +- hw/scsi/esp.c | 2 +- hw/scsi/lasi_ncr710.c | 2 +- hw/scsi/lasi_ncr710.h | 2 +- hw/scsi/ncr53c710.c | 2 +- hw/scsi/ncr53c710.h | 2 +- hw/sd/omap_mmc.c | 2 +- hw/sd/pl181.c | 2 +- hw/sh4/r2d.c | 2 +- hw/sh4/sh7750.c | 2 +- hw/sparc/sun4m.c | 2 +- hw/sparc/sun4m_iommu.c | 2 +- hw/sparc64/sun4u.c | 2 +- hw/sparc64/sun4u_iommu.c | 2 +- hw/ssi/aspeed_smc.c | 2 +- hw/ssi/pl022.c | 2 +- hw/ssi/sifive_spi.c | 2 +- hw/ssi/xilinx_spi.c | 2 +- hw/ssi/xilinx_spips.c | 2 +- hw/ssi/xlnx-versal-ospi.c | 2 +- hw/timer/allwinner-a10-pit.c | 2 +- hw/timer/arm_timer.c | 2 +- hw/timer/armv7m_systick.c | 2 +- hw/timer/aspeed_timer.c | 2 +- hw/timer/cadence_ttc.c | 2 +- hw/timer/cmsdk-apb-dualtimer.c | 2 +- hw/timer/cmsdk-apb-timer.c | 2 +- hw/timer/digic-timer.c | 2 +- hw/timer/exynos4210_mct.c | 2 +- hw/timer/exynos4210_pwm.c | 2 +- hw/timer/grlib_gptimer.c | 2 +- hw/timer/hpet.c | 2 +- hw/timer/pxa2xx_timer.c | 2 +- hw/timer/slavio_timer.c | 2 +- hw/timer/sse-counter.c | 2 +- hw/timer/sse-timer.c | 2 +- hw/timer/xilinx_timer.c | 2 +- hw/tpm/tpm_tis_i2c.c | 2 +- hw/tpm/tpm_tis_sysbus.c | 2 +- hw/tricore/tc27x_soc.c | 2 +- hw/tricore/tricore_testdevice.c | 2 +- hw/uefi/var-service-sysbus.c | 2 +- hw/usb/hcd-dwc2.h | 2 +- hw/usb/hcd-dwc3.c | 2 +- hw/usb/hcd-ehci.h | 2 +- hw/usb/hcd-ohci-pci.c | 2 +- hw/usb/hcd-ohci-sysbus.c | 2 +- hw/usb/hcd-ohci.c | 2 +- hw/usb/hcd-ohci.h | 2 +- hw/usb/hcd-xhci-sysbus.h | 2 +- hw/usb/xlnx-usb-subsystem.c | 2 +- hw/usb/xlnx-versal-usb2-ctrl-regs.c | 2 +- hw/virtio/virtio-mmio.c | 2 +- hw/vmapple/aes.c | 2 +- hw/vmapple/bdif.c | 2 +- hw/vmapple/cfg.c | 2 +- hw/vmapple/vmapple.c | 2 +- hw/watchdog/allwinner-wdt.c | 2 +- hw/watchdog/cmsdk-apb-watchdog.c | 2 +- hw/watchdog/wdt_aspeed.c | 2 +- hw/xen/xen-bus.c | 2 +- hw/xen/xen-legacy-backend.c | 2 +- hw/xtensa/xtfpga.c | 2 +- include/hw/acpi/generic_event_device.h | 2 +- include/hw/adc/aspeed_adc.h | 2 +- include/hw/adc/npcm7xx_adc.h | 2 +- include/hw/adc/stm32f2xx_adc.h | 2 +- include/hw/adc/zynq-xadc.h | 2 +- include/hw/arm/armsse.h | 2 +- include/hw/arm/armv7m.h | 2 +- include/hw/arm/bcm2835_peripherals.h | 2 +- include/hw/arm/exynos4210.h | 2 +- include/hw/arm/fsl-imx8mp.h | 2 +- include/hw/arm/nrf51_soc.h | 2 +- include/hw/arm/smmu-common.h | 2 +- include/hw/arm/xlnx-versal.h | 2 +- include/hw/audio/asc.h | 2 +- include/hw/block/swim.h | 2 +- include/hw/char/avr_usart.h | 2 +- include/hw/char/bcm2835_aux.h | 2 +- include/hw/char/cadence_uart.h | 2 +- include/hw/char/cmsdk-apb-uart.h | 2 +- include/hw/char/digic-uart.h | 2 +- include/hw/char/escc.h | 2 +- include/hw/char/goldfish_tty.h | 2 +- include/hw/char/ibex_uart.h | 2 +- include/hw/char/imx_serial.h | 2 +- include/hw/char/max78000_uart.h | 2 +- include/hw/char/mchp_pfsoc_mmuart.h | 2 +- include/hw/char/nrf51_uart.h | 2 +- include/hw/char/pl011.h | 2 +- include/hw/char/renesas_sci.h | 2 +- include/hw/char/serial-mm.h | 2 +- include/hw/char/shakti_uart.h | 2 +- include/hw/char/sifive_uart.h | 2 +- include/hw/char/stm32f2xx_usart.h | 2 +- include/hw/char/stm32l4x5_usart.h | 2 +- include/hw/core/or-irq.h | 2 +- include/hw/core/platform-bus.h | 2 +- include/hw/core/split-irq.h | 2 +- include/hw/{ => core}/sysbus.h | 0 include/hw/cpu/a15mpcore.h | 2 +- include/hw/cpu/a9mpcore.h | 2 +- include/hw/cpu/arm11mpcore.h | 2 +- include/hw/display/bcm2835_fb.h | 2 +- include/hw/display/macfb.h | 2 +- include/hw/display/xlnx_dp.h | 2 +- include/hw/dma/bcm2835_dma.h | 2 +- include/hw/dma/pl080.h | 2 +- include/hw/dma/sifive_pdma.h | 2 +- include/hw/dma/xlnx-zdma.h | 2 +- include/hw/dma/xlnx-zynq-devcfg.h | 2 +- include/hw/dma/xlnx_csu_dma.h | 2 +- include/hw/dma/xlnx_dpdma.h | 2 +- include/hw/fsi/aspeed_apb2opb.h | 2 +- include/hw/gpio/aspeed_gpio.h | 2 +- include/hw/gpio/bcm2835_gpio.h | 2 +- include/hw/gpio/bcm2838_gpio.h | 2 +- include/hw/gpio/imx_gpio.h | 2 +- include/hw/gpio/npcm7xx_gpio.h | 2 +- include/hw/gpio/nrf51_gpio.h | 2 +- include/hw/gpio/sifive_gpio.h | 2 +- include/hw/gpio/stm32l4x5_gpio.h | 2 +- include/hw/hyperv/vmbus-bridge.h | 2 +- include/hw/i2c/allwinner-i2c.h | 2 +- include/hw/i2c/arm_sbcon_i2c.h | 2 +- include/hw/i2c/aspeed_i2c.h | 2 +- include/hw/i2c/bcm2835_i2c.h | 2 +- include/hw/i2c/imx_i2c.h | 2 +- include/hw/i2c/microbit_i2c.h | 2 +- include/hw/i2c/npcm7xx_smbus.h | 2 +- include/hw/i2c/ppc4xx_i2c.h | 2 +- include/hw/i386/x86-iommu.h | 2 +- include/hw/ide/ahci-sysbus.h | 2 +- include/hw/input/i8042.h | 2 +- include/hw/input/lasips2.h | 2 +- include/hw/input/pl050.h | 2 +- include/hw/input/ps2.h | 2 +- include/hw/input/stellaris_gamepad.h | 2 +- include/hw/intc/allwinner-a10-pic.h | 2 +- include/hw/intc/arm_gic_common.h | 2 +- include/hw/intc/arm_gicv3_common.h | 2 +- include/hw/intc/arm_gicv3_its_common.h | 2 +- include/hw/intc/armv7m_nvic.h | 2 +- include/hw/intc/aspeed_intc.h | 2 +- include/hw/intc/aspeed_vic.h | 2 +- include/hw/intc/bcm2835_ic.h | 2 +- include/hw/intc/bcm2836_control.h | 2 +- include/hw/intc/exynos4210_combiner.h | 2 +- include/hw/intc/exynos4210_gic.h | 2 +- include/hw/intc/goldfish_pic.h | 2 +- include/hw/intc/grlib_irqmp.h | 2 +- include/hw/intc/heathrow_pic.h | 2 +- include/hw/intc/imx_avic.h | 2 +- include/hw/intc/imx_gpcv2.h | 2 +- include/hw/intc/loongarch_dintc.h | 2 +- include/hw/intc/loongarch_extioi_common.h | 2 +- include/hw/intc/loongarch_pch_msi.h | 2 +- include/hw/intc/loongarch_pic_common.h | 2 +- include/hw/intc/loongson_ipi.h | 2 +- include/hw/intc/loongson_ipi_common.h | 2 +- include/hw/intc/loongson_liointc.h | 2 +- include/hw/intc/m68k_irqc.h | 2 +- include/hw/intc/mips_gic.h | 2 +- include/hw/intc/realview_gic.h | 2 +- include/hw/intc/riscv_aclint.h | 2 +- include/hw/intc/riscv_aplic.h | 2 +- include/hw/intc/riscv_imsic.h | 2 +- include/hw/intc/rx_icu.h | 2 +- include/hw/intc/sifive_plic.h | 2 +- include/hw/intc/xlnx-pmu-iomod-intc.h | 2 +- include/hw/intc/xlnx-zynqmp-ipi.h | 2 +- include/hw/m68k/q800-glue.h | 2 +- include/hw/mem/npcm7xx_mc.h | 2 +- include/hw/mips/cps.h | 2 +- include/hw/misc/a9scu.h | 2 +- include/hw/misc/allwinner-a10-ccm.h | 2 +- include/hw/misc/allwinner-a10-dramc.h | 2 +- include/hw/misc/allwinner-cpucfg.h | 2 +- include/hw/misc/allwinner-h3-ccu.h | 2 +- include/hw/misc/allwinner-h3-dramc.h | 2 +- include/hw/misc/allwinner-h3-sysctrl.h | 2 +- include/hw/misc/allwinner-r40-ccu.h | 2 +- include/hw/misc/allwinner-r40-dramc.h | 2 +- include/hw/misc/allwinner-sid.h | 2 +- include/hw/misc/allwinner-sramc.h | 2 +- include/hw/misc/arm11scu.h | 2 +- include/hw/misc/armsse-cpu-pwrctrl.h | 2 +- include/hw/misc/armsse-cpuid.h | 2 +- include/hw/misc/armsse-mhu.h | 2 +- include/hw/misc/armv7m_ras.h | 2 +- include/hw/misc/aspeed_hace.h | 2 +- include/hw/misc/aspeed_i3c.h | 2 +- include/hw/misc/aspeed_lpc.h | 2 +- include/hw/misc/aspeed_peci.h | 2 +- include/hw/misc/aspeed_sbc.h | 2 +- include/hw/misc/aspeed_scu.h | 2 +- include/hw/misc/aspeed_sdmc.h | 2 +- include/hw/misc/aspeed_sli.h | 2 +- include/hw/misc/aspeed_xdma.h | 2 +- include/hw/misc/avr_power.h | 2 +- include/hw/misc/bcm2835_cprman.h | 2 +- include/hw/misc/bcm2835_mbox.h | 2 +- include/hw/misc/bcm2835_mphi.h | 2 +- include/hw/misc/bcm2835_powermgt.h | 2 +- include/hw/misc/bcm2835_property.h | 2 +- include/hw/misc/bcm2835_rng.h | 2 +- include/hw/misc/bcm2835_thermal.h | 2 +- include/hw/misc/djmemc.h | 2 +- include/hw/misc/imx6_src.h | 2 +- include/hw/misc/imx7_gpr.h | 2 +- include/hw/misc/imx7_snvs.h | 2 +- include/hw/misc/imx7_src.h | 2 +- include/hw/misc/imx8mp_analog.h | 2 +- include/hw/misc/imx_ccm.h | 2 +- include/hw/misc/imx_rngc.h | 2 +- include/hw/misc/iotkit-secctl.h | 2 +- include/hw/misc/iotkit-sysctl.h | 2 +- include/hw/misc/iotkit-sysinfo.h | 2 +- include/hw/misc/ivshmem-flat.h | 2 +- include/hw/misc/lasi.h | 2 +- include/hw/misc/mac_via.h | 2 +- include/hw/misc/macio/gpio.h | 2 +- include/hw/misc/max78000_aes.h | 2 +- include/hw/misc/max78000_gcr.h | 2 +- include/hw/misc/max78000_icc.h | 2 +- include/hw/misc/max78000_trng.h | 2 +- include/hw/misc/mchp_pfsoc_dmc.h | 2 +- include/hw/misc/mchp_pfsoc_ioscb.h | 2 +- include/hw/misc/mchp_pfsoc_sysreg.h | 2 +- include/hw/misc/mips_cmgcr.h | 2 +- include/hw/misc/mips_cpc.h | 2 +- include/hw/misc/mips_itu.h | 2 +- include/hw/misc/mos6522.h | 2 +- include/hw/misc/mps2-fpgaio.h | 2 +- include/hw/misc/mps2-scc.h | 2 +- include/hw/misc/msf2-sysreg.h | 2 +- include/hw/misc/npcm7xx_mft.h | 2 +- include/hw/misc/npcm7xx_pwm.h | 2 +- include/hw/misc/npcm7xx_rng.h | 2 +- include/hw/misc/npcm_clk.h | 2 +- include/hw/misc/npcm_gcr.h | 2 +- include/hw/misc/nrf51_rng.h | 2 +- include/hw/misc/sifive_e_aon.h | 2 +- include/hw/misc/sifive_e_prci.h | 2 +- include/hw/misc/sifive_test.h | 2 +- include/hw/misc/sifive_u_otp.h | 2 +- include/hw/misc/sifive_u_prci.h | 2 +- include/hw/misc/stm32_rcc.h | 2 +- include/hw/misc/stm32f2xx_syscfg.h | 2 +- include/hw/misc/stm32f4xx_exti.h | 2 +- include/hw/misc/stm32f4xx_syscfg.h | 2 +- include/hw/misc/stm32l4x5_exti.h | 2 +- include/hw/misc/stm32l4x5_rcc.h | 2 +- include/hw/misc/stm32l4x5_syscfg.h | 2 +- include/hw/misc/tz-mpc.h | 2 +- include/hw/misc/tz-msc.h | 2 +- include/hw/misc/tz-ppc.h | 2 +- include/hw/misc/unimp.h | 2 +- include/hw/misc/virt_ctrl.h | 2 +- include/hw/misc/xlnx-versal-cframe-reg.h | 2 +- include/hw/misc/xlnx-versal-cfu.h | 2 +- include/hw/misc/xlnx-versal-crl.h | 2 +- include/hw/misc/xlnx-versal-pmc-iou-slcr.h | 2 +- include/hw/misc/xlnx-versal-trng.h | 2 +- include/hw/misc/xlnx-versal-xramc.h | 2 +- include/hw/misc/xlnx-zynqmp-apu-ctrl.h | 2 +- include/hw/misc/xlnx-zynqmp-crf.h | 2 +- include/hw/net/allwinner-sun8i-emac.h | 2 +- include/hw/net/allwinner_emac.h | 2 +- include/hw/net/cadence_gem.h | 2 +- include/hw/net/dp8393x.h | 2 +- include/hw/net/ftgmac100.h | 2 +- include/hw/net/imx_fec.h | 2 +- include/hw/net/lan9118_phy.h | 2 +- include/hw/net/lance.h | 2 +- include/hw/net/lasi_82596.h | 2 +- include/hw/net/msf2-emac.h | 2 +- include/hw/net/npcm7xx_emc.h | 2 +- include/hw/net/npcm_gmac.h | 2 +- include/hw/net/npcm_pcs.h | 2 +- include/hw/net/xlnx-zynqmp-can.h | 2 +- include/hw/nubus/nubus.h | 2 +- include/hw/nvram/bcm2835_otp.h | 2 +- include/hw/nvram/fw_cfg.h | 2 +- include/hw/nvram/mac_nvram.h | 2 +- include/hw/nvram/npcm7xx_otp.h | 2 +- include/hw/nvram/nrf51_nvm.h | 2 +- include/hw/nvram/xlnx-bbram.h | 2 +- include/hw/nvram/xlnx-versal-efuse.h | 2 +- include/hw/nvram/xlnx-zynqmp-efuse.h | 2 +- include/hw/pci-host/aspeed_pcie.h | 2 +- include/hw/pci-host/designware.h | 2 +- include/hw/pci-host/fsl_imx8m_phy.h | 2 +- include/hw/pci-host/gpex.h | 2 +- include/hw/pci-host/xilinx-pcie.h | 2 +- include/hw/pci/pci_host.h | 2 +- include/hw/ppc/mac_dbdma.h | 2 +- include/hw/ppc/openpic.h | 2 +- include/hw/ppc/pnv.h | 2 +- include/hw/ppc/pnv_chip.h | 2 +- include/hw/ppc/pnv_pnor.h | 2 +- include/hw/ppc/pnv_psi.h | 2 +- include/hw/ppc/ppc4xx.h | 2 +- include/hw/ppc/xive.h | 2 +- include/hw/ppc/xive2.h | 2 +- include/hw/riscv/numa.h | 2 +- include/hw/riscv/riscv_hart.h | 2 +- include/hw/riscv/spike.h | 2 +- include/hw/riscv/virt.h | 2 +- include/hw/rtc/allwinner-rtc.h | 2 +- include/hw/rtc/aspeed_rtc.h | 2 +- include/hw/rtc/goldfish_rtc.h | 2 +- include/hw/rtc/pl031.h | 2 +- include/hw/rtc/xlnx-zynqmp-rtc.h | 2 +- include/hw/s390x/3270-ccw.h | 2 +- include/hw/s390x/css-bridge.h | 2 +- include/hw/s390x/s390_flic.h | 2 +- include/hw/s390x/sclp.h | 2 +- include/hw/scsi/esp.h | 2 +- include/hw/sd/allwinner-sdhost.h | 2 +- include/hw/sd/bcm2835_sdhost.h | 2 +- include/hw/sd/sdhci.h | 2 +- include/hw/sparc/sparc32_dma.h | 2 +- include/hw/sparc/sun4m_iommu.h | 2 +- include/hw/sparc/sun4u_iommu.h | 2 +- include/hw/ssi/allwinner-a10-spi.h | 2 +- include/hw/ssi/aspeed_smc.h | 2 +- include/hw/ssi/bcm2835_spi.h | 2 +- include/hw/ssi/ibex_spi_host.h | 2 +- include/hw/ssi/imx_spi.h | 2 +- include/hw/ssi/mss-spi.h | 2 +- include/hw/ssi/npcm7xx_fiu.h | 2 +- include/hw/ssi/npcm_pspi.h | 2 +- include/hw/ssi/pl022.h | 2 +- include/hw/ssi/pnv_spi.h | 2 +- include/hw/ssi/sifive_spi.h | 2 +- include/hw/ssi/stm32f2xx_spi.h | 2 +- include/hw/ssi/xilinx_spips.h | 2 +- include/hw/timer/a9gtimer.h | 2 +- include/hw/timer/allwinner-a10-pit.h | 2 +- include/hw/timer/arm_mptimer.h | 2 +- include/hw/timer/armv7m_systick.h | 2 +- include/hw/timer/avr_timer16.h | 2 +- include/hw/timer/bcm2835_systmr.h | 2 +- include/hw/timer/cadence_ttc.h | 2 +- include/hw/timer/cmsdk-apb-dualtimer.h | 2 +- include/hw/timer/cmsdk-apb-timer.h | 2 +- include/hw/timer/digic-timer.h | 2 +- include/hw/timer/ibex_timer.h | 2 +- include/hw/timer/imx_epit.h | 2 +- include/hw/timer/imx_gpt.h | 2 +- include/hw/timer/mss-timer.h | 2 +- include/hw/timer/npcm7xx_timer.h | 2 +- include/hw/timer/nrf51_timer.h | 2 +- include/hw/timer/renesas_cmt.h | 2 +- include/hw/timer/renesas_tmr.h | 2 +- include/hw/timer/sifive_pwm.h | 2 +- include/hw/timer/sse-counter.h | 2 +- include/hw/timer/sse-timer.h | 2 +- include/hw/timer/stellaris-gptm.h | 2 +- include/hw/timer/stm32f2xx_timer.h | 2 +- include/hw/tricore/tc27x_soc.h | 2 +- include/hw/tricore/tricore_testdevice.h | 2 +- include/hw/usb/imx-usb-phy.h | 2 +- include/hw/usb/xlnx-usb-subsystem.h | 2 +- include/hw/usb/xlnx-versal-usb2-ctrl-regs.h | 2 +- include/hw/virtio/virtio-mmio.h | 2 +- include/hw/watchdog/allwinner-wdt.h | 2 +- include/hw/watchdog/cmsdk-apb-watchdog.h | 2 +- include/hw/watchdog/sbsa_gwdt.h | 2 +- include/hw/watchdog/wdt_aspeed.h | 2 +- include/hw/watchdog/wdt_imx2.h | 2 +- include/hw/xen/xen_pvdev.h | 2 +- rust/hw/core/wrapper.h | 2 +- system/qdev-monitor.c | 2 +- 633 files changed, 632 insertions(+), 632 deletions(-) rename include/hw/{ => core}/sysbus.h (100%) diff --git a/hw/acpi/cxl.c b/hw/acpi/cxl.c index 75d5b30bb8..75edb2c0a6 100644 --- a/hw/acpi/cxl.c +++ b/hw/acpi/cxl.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pci_host.h" #include "hw/cxl/cxl.h" diff --git a/hw/adc/stm32f2xx_adc.c b/hw/adc/stm32f2xx_adc.c index a490ae640d..50a04a0722 100644 --- a/hw/adc/stm32f2xx_adc.c +++ b/hw/adc/stm32f2xx_adc.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/arm/allwinner-a10.c b/hw/arm/allwinner-a10.c index d7508ee0ec..66f30757dd 100644 --- a/hw/arm/allwinner-a10.c +++ b/hw/arm/allwinner-a10.c @@ -20,7 +20,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "hw/char/serial-mm.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/allwinner-a10.h" #include "hw/misc/unimp.h" #include "system/system.h" diff --git a/hw/arm/allwinner-h3.c b/hw/arm/allwinner-h3.c index 757c89ef39..262e99b3f9 100644 --- a/hw/arm/allwinner-h3.c +++ b/hw/arm/allwinner-h3.c @@ -23,7 +23,7 @@ #include "qemu/module.h" #include "qemu/units.h" #include "hw/core/qdev.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/char/serial-mm.h" #include "hw/misc/unimp.h" #include "hw/usb/hcd-ehci.h" diff --git a/hw/arm/allwinner-r40.c b/hw/arm/allwinner-r40.c index 396e886af4..a1ae75deb6 100644 --- a/hw/arm/allwinner-r40.c +++ b/hw/arm/allwinner-r40.c @@ -24,7 +24,7 @@ #include "qemu/units.h" #include "hw/core/boards.h" #include "hw/core/qdev.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/char/serial-mm.h" #include "hw/misc/unimp.h" #include "hw/usb/hcd-ehci.h" diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c index b6fc95df3b..ddb210c895 100644 --- a/hw/arm/armsse.c +++ b/hw/arm/armsse.c @@ -16,7 +16,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "hw/arm/armsse.h" diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index 844d620286..a29eab6c91 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/arm/armv7m.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/boot.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c index cd61ba1505..ee2f44debd 100644 --- a/hw/arm/bcm2836.c +++ b/hw/arm/bcm2836.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "hw/arm/bcm2836.h" #include "hw/arm/raspi_platform.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "target/arm/cpu-qom.h" #include "target/arm/gtimer.h" diff --git a/hw/arm/bcm2838.c b/hw/arm/bcm2838.c index 22aa754613..c14a854046 100644 --- a/hw/arm/bcm2838.c +++ b/hw/arm/bcm2838.c @@ -10,7 +10,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "hw/arm/raspi_platform.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/bcm2838.h" #include "trace.h" diff --git a/hw/arm/collie.c b/hw/arm/collie.c index 73c40bc57d..91f0a94b6f 100644 --- a/hw/arm/collie.c +++ b/hw/arm/collie.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qemu/cutils.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/boards.h" #include "strongarm.h" #include "hw/arm/boot.h" diff --git a/hw/arm/exynos4210.c b/hw/arm/exynos4210.c index 5d68579cd6..25c385ba1f 100644 --- a/hw/arm/exynos4210.c +++ b/hw/arm/exynos4210.c @@ -29,7 +29,7 @@ #include "hw/core/irq.h" #include "system/blockdev.h" #include "system/system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/boot.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" diff --git a/hw/arm/exynos4_boards.c b/hw/arm/exynos4_boards.c index e8c171f40a..1b8c9b618f 100644 --- a/hw/arm/exynos4_boards.c +++ b/hw/arm/exynos4_boards.c @@ -25,7 +25,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "qemu/error-report.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c index b8c1256328..92d497999c 100644 --- a/hw/arm/highbank.c +++ b/hw/arm/highbank.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/datadir.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index b24df11db9..118808f2dc 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/boards.h" #include "hw/arm/boot.h" diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index 39e8f69cae..250fdb49b6 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/nrf51_soc.c b/hw/arm/nrf51_soc.c index a4ccfa373a..8d8ea71da4 100644 --- a/hw/arm/nrf51_soc.c +++ b/hw/arm/nrf51_soc.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/arm/boot.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-clock.h" #include "hw/misc/unimp.h" #include "qemu/log.h" diff --git a/hw/arm/omap1.c b/hw/arm/omap1.c index fcba6eb52d..f3d6be1e29 100644 --- a/hw/arm/omap1.c +++ b/hw/arm/omap1.c @@ -38,7 +38,7 @@ #include "system/runstate.h" #include "system/rtc.h" #include "qemu/range.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/cutils.h" #include "qemu/bcd.h" #include "target/arm/cpu-qom.h" diff --git a/hw/arm/realview.c b/hw/arm/realview.c index d7f96b9d3e..c9558be4d4 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "cpu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/boot.h" #include "hw/arm/primecell.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/smmuv3.c b/hw/arm/smmuv3.c index e12a64a20f..985dfb345f 100644 --- a/hw/arm/smmuv3.c +++ b/hw/arm/smmuv3.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/bitops.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev.h" diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index f3e8e15de8..56ecc828f4 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -11,7 +11,7 @@ #include "qemu/bitops.h" #include "qapi/error.h" #include "hw/core/split-irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/sd/sd.h" #include "hw/ssi/ssi.h" #include "hw/arm/boot.h" diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index acc75476c3..5a3242195a 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -31,7 +31,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "strongarm.h" #include "qemu/error-report.h" diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index 94661b83d0..254b1610b3 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index 75cb77da82..cc6ae7d4c4 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/datadir.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/boot.h" #include "hw/arm/primecell.h" #include "hw/arm/machines-qom.h" diff --git a/hw/arm/virt.c b/hw/arm/virt.c index d8773cb541..fd0e28f030 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -34,7 +34,7 @@ #include "qemu/option.h" #include "qemu/target-info.h" #include "monitor/qdev.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/boot.h" #include "hw/arm/primecell.h" #include "hw/arm/virt.h" diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c index 0d9c01e4b7..d43f36b718 100644 --- a/hw/arm/xilinx_zynq.c +++ b/hw/arm/xilinx_zynq.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/boot.h" #include "hw/arm/machines-qom.h" #include "net/net.h" diff --git a/hw/arm/xlnx-versal-virt.c b/hw/arm/xlnx-versal-virt.c index e82ac8e353..2b04513ba2 100644 --- a/hw/arm/xlnx-versal-virt.c +++ b/hw/arm/xlnx-versal-virt.c @@ -17,7 +17,7 @@ #include "system/address-spaces.h" #include "hw/block/flash.h" #include "hw/core/boards.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/fdt.h" #include "hw/arm/xlnx-versal.h" #include "hw/arm/boot.h" diff --git a/hw/arm/xlnx-versal.c b/hw/arm/xlnx-versal.c index a0b2f18b55..facf92b45c 100644 --- a/hw/arm/xlnx-versal.c +++ b/hw/arm/xlnx-versal.c @@ -15,7 +15,7 @@ #include "qapi/error.h" #include "qobject/qlist.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #include "system/system.h" #include "hw/misc/unimp.h" diff --git a/hw/audio/asc.c b/hw/audio/asc.c index 77a5cc1092..a934c2e82c 100644 --- a/hw/audio/asc.c +++ b/hw/audio/asc.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qemu/timer.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "qemu/audio.h" #include "hw/audio/asc.h" diff --git a/hw/audio/cs4231.c b/hw/audio/cs4231.c index 97cceb44d8..bcf98160ec 100644 --- a/hw/audio/cs4231.c +++ b/hw/audio/cs4231.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "trace.h" diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c index 39f4b4514d..6d5e99123d 100644 --- a/hw/audio/marvell_88w8618.c +++ b/hw/audio/marvell_88w8618.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" diff --git a/hw/audio/pl041.c b/hw/audio/pl041.c index 117b6b0ae6..4a9b8ad65c 100644 --- a/hw/audio/pl041.c +++ b/hw/audio/pl041.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/avr/atmega.c b/hw/avr/atmega.c index b185295d55..280f613af3 100644 --- a/hw/avr/atmega.c +++ b/hw/avr/atmega.c @@ -17,7 +17,7 @@ #include "system/address-spaces.h" #include "system/system.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "hw/misc/unimp.h" #include "migration/vmstate.h" diff --git a/hw/block/fdc-sysbus.c b/hw/block/fdc-sysbus.c index 956860ab29..ab57dfd83e 100644 --- a/hw/block/fdc-sysbus.c +++ b/hw/block/fdc-sysbus.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "qom/object.h" #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/block/fdc.h" #include "migration/vmstate.h" #include "fdc-internal.h" diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c index d1673a1b41..c0f5b9d8fa 100644 --- a/hw/block/pflash_cfi01.c +++ b/hw/block/pflash_cfi01.c @@ -48,7 +48,7 @@ #include "qemu/host-utils.h" #include "qemu/log.h" #include "qemu/option.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "system/blockdev.h" #include "system/runstate.h" diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c index 423516cb30..6f952fe7de 100644 --- a/hw/block/pflash_cfi02.c +++ b/hw/block/pflash_cfi02.c @@ -44,7 +44,7 @@ #include "system/block-backend.h" #include "qemu/host-utils.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/block/swim.c b/hw/block/swim.c index 53ba7fa59c..54b63bfbb5 100644 --- a/hw/block/swim.c +++ b/hw/block/swim.c @@ -14,7 +14,7 @@ #include "qemu/main-loop.h" #include "qapi/error.h" #include "system/block-backend.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/block/block.h" #include "hw/block/swim.h" diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c index c24ece5fe8..eff6a3c4d1 100644 --- a/hw/char/cadence_uart.c +++ b/hw/char/cadence_uart.c @@ -22,7 +22,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "chardev/char-fe.h" #include "chardev/char-serial.h" diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c index 1a83e4a9bd..bf891081dc 100644 --- a/hw/char/cmsdk-apb-uart.c +++ b/hw/char/cmsdk-apb-uart.c @@ -20,7 +20,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "chardev/char-fe.h" diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c index 8a704dfcf5..bd669173f0 100644 --- a/hw/char/digic-uart.c +++ b/hw/char/digic-uart.c @@ -27,7 +27,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "chardev/char-fe.h" #include "qemu/log.h" diff --git a/hw/char/escc.c b/hw/char/escc.c index a2fb682f8b..3b46818ecc 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -26,7 +26,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "hw/char/escc.h" diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c index d1c2f24915..46fc4e31b8 100644 --- a/hw/char/exynos4210_uart.c +++ b/hw/char/exynos4210_uart.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/char/goldfish_tty.c b/hw/char/goldfish_tty.c index 35bcb2a967..8e1e9228c7 100644 --- a/hw/char/goldfish_tty.c +++ b/hw/char/goldfish_tty.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties-system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "chardev/char-fe.h" #include "qemu/log.h" diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c index 7be847d093..92f534552e 100644 --- a/hw/char/grlib_apbuart.c +++ b/hw/char/grlib_apbuart.c @@ -29,7 +29,7 @@ #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" #include "hw/char/grlib_uart.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/module.h" #include "chardev/char-fe.h" diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c index 51edf917c9..24fd42da06 100644 --- a/hw/char/mcf_uart.c +++ b/hw/char/mcf_uart.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/module.h" #include "qapi/error.h" #include "hw/m68k/mcf.h" diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 0b0af67798..ac453c1057 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "hw/char/pl011.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c index b3bed2bb7b..10f96e3a44 100644 --- a/hw/char/sh_serial.c +++ b/hw/char/sh_serial.c @@ -26,7 +26,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c index ba7e9e339b..3ef99adadd 100644 --- a/hw/char/xilinx_uartlite.c +++ b/hw/char/xilinx_uartlite.c @@ -29,7 +29,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/module.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/hw/core/qdev.c b/hw/core/qdev.c index a3b41286ea..fc3425a8fe 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -35,7 +35,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/boards.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-clock.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c index ae447c1196..3adf2f2faf 100644 --- a/hw/core/sysbus.c +++ b/hw/core/sysbus.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "monitor/monitor.h" #include "system/address-spaces.h" diff --git a/hw/display/apple-gfx-mmio.m b/hw/display/apple-gfx-mmio.m index b83f5f4fe6..983fc1724a 100644 --- a/hw/display/apple-gfx-mmio.m +++ b/hw/display/apple-gfx-mmio.m @@ -15,7 +15,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "block/aio-wait.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "apple-gfx.h" #include "trace.h" diff --git a/hw/display/artist.c b/hw/display/artist.c index 22524d9c5f..206f77afba 100644 --- a/hw/display/artist.c +++ b/hw/display/artist.c @@ -14,7 +14,7 @@ #include "qemu/units.h" #include "qemu/bswap.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/loader.h" #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" diff --git a/hw/display/cg3.c b/hw/display/cg3.c index f4067d7825..59d66d3d4b 100644 --- a/hw/display/cg3.c +++ b/hw/display/cg3.c @@ -28,7 +28,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "ui/console.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/core/loader.h" diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c index 8e3a61ed0e..7f841b8804 100644 --- a/hw/display/exynos4210_fimd.c +++ b/hw/display/exynos4210_fimd.c @@ -26,7 +26,7 @@ #include "hw/core/qdev-properties.h" #include "hw/hw.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "ui/console.h" #include "ui/pixel_ops.h" diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c index 8ed3e6ecc3..2eefafcaf6 100644 --- a/hw/display/g364fb.c +++ b/hw/display/g364fb.c @@ -28,7 +28,7 @@ #include "ui/console.h" #include "ui/pixel_ops.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/display/jazz_led.c b/hw/display/jazz_led.c index 90e82b58be..9d62e51bed 100644 --- a/hw/display/jazz_led.c +++ b/hw/display/jazz_led.c @@ -27,7 +27,7 @@ #include "ui/console.h" #include "ui/pixel_ops.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/display/macfb.c b/hw/display/macfb.c index fa3572ead3..388f8de507 100644 --- a/hw/display/macfb.c +++ b/hw/display/macfb.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "ui/console.h" #include "ui/pixel_ops.h" #include "hw/nubus/nubus.h" diff --git a/hw/display/pl110.c b/hw/display/pl110.c index 2537c26462..4cd62a9875 100644 --- a/hw/display/pl110.c +++ b/hw/display/pl110.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "ui/console.h" diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 6ccec03fe7..a07aa9886f 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -32,7 +32,7 @@ #include "hw/usb/hcd-ohci.h" #include "hw/char/serial-mm.h" #include "ui/console.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/pci/pci_device.h" #include "hw/core/qdev-properties.h" diff --git a/hw/display/tcx.c b/hw/display/tcx.c index b208923523..7cba3e25a7 100644 --- a/hw/display/tcx.c +++ b/hw/display/tcx.c @@ -29,7 +29,7 @@ #include "ui/pixel_ops.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/error-report.h" #include "qemu/module.h" diff --git a/hw/display/vga-mmio.c b/hw/display/vga-mmio.c index 4c497b70f4..1a9608d865 100644 --- a/hw/display/vga-mmio.c +++ b/hw/display/vga-mmio.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/display/vga.h" #include "hw/core/qdev-properties.h" #include "ui/console.h" diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c index bd61d8ed48..514206b7c3 100644 --- a/hw/dma/pl080.c +++ b/hw/dma/pl080.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/dma/pl330.c b/hw/dma/pl330.c index 4f00092f85..5a8df39d8f 100644 --- a/hw/dma/pl330.c +++ b/hw/dma/pl330.c @@ -18,7 +18,7 @@ #include "qemu/cutils.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/timer.h" diff --git a/hw/dma/rc4030.c b/hw/dma/rc4030.c index 8ce74257b6..93db286e69 100644 --- a/hw/dma/rc4030.c +++ b/hw/dma/rc4030.c @@ -26,7 +26,7 @@ #include "qemu/units.h" #include "hw/core/irq.h" #include "hw/mips/mips.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/timer.h" diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index 2fbc37ffd1..2844515b2d 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "system/dma.h" #include "hw/dma/sifive_pdma.h" diff --git a/hw/dma/sparc32_dma.c b/hw/dma/sparc32_dma.c index 5601d221ec..5b77059986 100644 --- a/hw/dma/sparc32_dma.c +++ b/hw/dma/sparc32_dma.c @@ -30,7 +30,7 @@ #include "hw/core/qdev-properties.h" #include "hw/sparc/sparc32_dma.h" #include "hw/sparc/sun4m_iommu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "system/dma.h" #include "qapi/error.h" diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index 90ba7bf057..8488f125b5 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/timer.h" #include "hw/hw.h" diff --git a/hw/dma/xlnx_csu_dma.c b/hw/dma/xlnx_csu_dma.c index b390d09269..436f9915e0 100644 --- a/hw/dma/xlnx_csu_dma.c +++ b/hw/dma/xlnx_csu_dma.c @@ -23,7 +23,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "system/dma.h" #include "hw/core/ptimer.h" diff --git a/hw/gpio/bcm2835_gpio.c b/hw/gpio/bcm2835_gpio.c index bd9170b893..d7c44ea2ab 100644 --- a/hw/gpio/bcm2835_gpio.c +++ b/hw/gpio/bcm2835_gpio.c @@ -16,7 +16,7 @@ #include "qemu/module.h" #include "qemu/timer.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/sd/sd.h" #include "hw/gpio/bcm2835_gpio.h" diff --git a/hw/gpio/bcm2838_gpio.c b/hw/gpio/bcm2838_gpio.c index dab50faf28..4ae7706b9a 100644 --- a/hw/gpio/bcm2838_gpio.c +++ b/hw/gpio/bcm2838_gpio.c @@ -15,7 +15,7 @@ #include "qemu/module.h" #include "qemu/timer.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/sd/sd.h" #include "hw/gpio/bcm2838_gpio.h" diff --git a/hw/gpio/gpio_key.c b/hw/gpio/gpio_key.c index f8cf4da239..14e0fb9d4c 100644 --- a/hw/gpio/gpio_key.c +++ b/hw/gpio/gpio_key.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "qemu/timer.h" diff --git a/hw/gpio/gpio_pwr.c b/hw/gpio/gpio_pwr.c index 2d14f8b344..a60b24a553 100644 --- a/hw/gpio/gpio_pwr.c +++ b/hw/gpio/gpio_pwr.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/runstate.h" #define TYPE_GPIOPWR "gpio-pwr" diff --git a/hw/gpio/mpc8xxx.c b/hw/gpio/mpc8xxx.c index 377832e9d2..2e882329f0 100644 --- a/hw/gpio/mpc8xxx.c +++ b/hw/gpio/mpc8xxx.c @@ -21,7 +21,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/gpio/omap_gpio.c b/hw/gpio/omap_gpio.c index 0c2a0f9aa6..f7619260ca 100644 --- a/hw/gpio/omap_gpio.c +++ b/hw/gpio/omap_gpio.c @@ -23,7 +23,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/arm/omap.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/error-report.h" #include "qemu/module.h" #include "qapi/error.h" diff --git a/hw/gpio/pl061.c b/hw/gpio/pl061.c index 55f51b6cf2..d6a4fb90b9 100644 --- a/hw/gpio/pl061.c +++ b/hw/gpio/pl061.c @@ -31,7 +31,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "qapi/error.h" diff --git a/hw/gpio/zaurus.c b/hw/gpio/zaurus.c index 0a9f76e774..3cf626a550 100644 --- a/hw/gpio/zaurus.c +++ b/hw/gpio/zaurus.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "qemu/log.h" diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c index 86b53a23ad..c01f339236 100644 --- a/hw/hyperv/vmbus.c +++ b/hw/hyperv/vmbus.c @@ -18,7 +18,7 @@ #include "hw/hyperv/hyperv.h" #include "hw/hyperv/vmbus.h" #include "hw/hyperv/vmbus-bridge.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "exec/target_page.h" #include "trace.h" diff --git a/hw/i2c/aspeed_i2c.c b/hw/i2c/aspeed_i2c.c index 1f9ce131bf..faf2160c06 100644 --- a/hw/i2c/aspeed_i2c.c +++ b/hw/i2c/aspeed_i2c.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/cutils.h" #include "qemu/log.h" diff --git a/hw/i2c/bitbang_i2c.c b/hw/i2c/bitbang_i2c.c index d379cfd775..1f5d66ce33 100644 --- a/hw/i2c/bitbang_i2c.c +++ b/hw/i2c/bitbang_i2c.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/i2c/bitbang_i2c.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/module.h" #include "qom/object.h" #include "trace.h" diff --git a/hw/i2c/exynos4210_i2c.c b/hw/i2c/exynos4210_i2c.c index dd72dda4fd..9fac588e82 100644 --- a/hw/i2c/exynos4210_i2c.c +++ b/hw/i2c/exynos4210_i2c.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qemu/timer.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/i2c/i2c.h" #include "hw/core/irq.h" diff --git a/hw/i2c/i2c_mux_pca954x.c b/hw/i2c/i2c_mux_pca954x.c index 7802c68452..c603446028 100644 --- a/hw/i2c/i2c_mux_pca954x.c +++ b/hw/i2c/i2c_mux_pca954x.c @@ -21,7 +21,7 @@ #include "hw/i2c/smbus_slave.h" #include "hw/core/qdev.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/log.h" #include "qemu/module.h" #include "qemu/queue.h" diff --git a/hw/i2c/mpc_i2c.c b/hw/i2c/mpc_i2c.c index e2097f819c..abb2240f9f 100644 --- a/hw/i2c/mpc_i2c.c +++ b/hw/i2c/mpc_i2c.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/i2c/i2c.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qom/object.h" #include "trace.h" diff --git a/hw/i2c/omap_i2c.c b/hw/i2c/omap_i2c.c index c768f99e38..e0798f2c8a 100644 --- a/hw/i2c/omap_i2c.c +++ b/hw/i2c/omap_i2c.c @@ -24,7 +24,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/arm/omap.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/error-report.h" #include "qapi/error.h" diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index f744be9f70..224b7b9479 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -23,7 +23,7 @@ #include "qemu/error-report.h" #include "qemu/main-loop.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "intel_iommu_internal.h" #include "hw/pci/pci.h" #include "hw/pci/pci_bus.h" diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c index 310b9a8eb5..8ca88afae2 100644 --- a/hw/i386/kvm/clock.c +++ b/hw/i386/kvm/clock.c @@ -21,7 +21,7 @@ #include "system/hw_accel.h" #include "kvm/kvm_i386.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/i386/kvm/clock.h" #include "hw/core/qdev-properties.h" #include "qapi/error.h" diff --git a/hw/i386/kvm/xen_evtchn.c b/hw/i386/kvm/xen_evtchn.c index a510ab871d..b65871f354 100644 --- a/hw/i386/kvm/xen_evtchn.c +++ b/hw/i386/kvm/xen_evtchn.c @@ -27,7 +27,7 @@ #include "migration/vmstate.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/xen/xen.h" #include "hw/i386/x86.h" #include "hw/i386/pc.h" diff --git a/hw/i386/kvm/xen_evtchn.h b/hw/i386/kvm/xen_evtchn.h index 0521ebc092..8d339db560 100644 --- a/hw/i386/kvm/xen_evtchn.h +++ b/hw/i386/kvm/xen_evtchn.h @@ -12,7 +12,7 @@ #ifndef QEMU_XEN_EVTCHN_H #define QEMU_XEN_EVTCHN_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" typedef uint32_t evtchn_port_t; diff --git a/hw/i386/kvm/xen_gnttab.c b/hw/i386/kvm/xen_gnttab.c index 4b9e272c5e..85b324e62d 100644 --- a/hw/i386/kvm/xen_gnttab.c +++ b/hw/i386/kvm/xen_gnttab.c @@ -20,7 +20,7 @@ #include "system/address-spaces.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/xen/xen.h" #include "hw/xen/xen_backend_ops.h" #include "xen_overlay.h" diff --git a/hw/i386/kvm/xen_overlay.c b/hw/i386/kvm/xen_overlay.c index 3cb7361937..74cadffb72 100644 --- a/hw/i386/kvm/xen_overlay.c +++ b/hw/i386/kvm/xen_overlay.c @@ -19,7 +19,7 @@ #include "system/address-spaces.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/xen/xen.h" #include "xen_overlay.h" diff --git a/hw/i386/kvm/xen_primary_console.c b/hw/i386/kvm/xen_primary_console.c index 6e9d6417c3..bf61f6235b 100644 --- a/hw/i386/kvm/xen_primary_console.c +++ b/hw/i386/kvm/xen_primary_console.c @@ -13,7 +13,7 @@ #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/xen/xen.h" #include "hw/xen/xen_backend_ops.h" #include "xen_evtchn.h" diff --git a/hw/i386/kvm/xen_xenstore.c b/hw/i386/kvm/xen_xenstore.c index 42955cccd9..0dc0edf3bf 100644 --- a/hw/i386/kvm/xen_xenstore.c +++ b/hw/i386/kvm/xen_xenstore.c @@ -20,7 +20,7 @@ #include "qom/object.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/xen/xen.h" #include "hw/xen/xen_backend_ops.h" #include "xen_overlay.h" diff --git a/hw/i386/microvm-dt.c b/hw/i386/microvm-dt.c index 81eaddafc8..45fbb5bbd1 100644 --- a/hw/i386/microvm-dt.c +++ b/hw/i386/microvm-dt.c @@ -37,7 +37,7 @@ #include "hw/char/serial-isa.h" #include "hw/i386/fw_cfg.h" #include "hw/rtc/mc146818rtc.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/virtio/virtio-mmio.h" #include "hw/usb/xhci.h" diff --git a/hw/i386/nitro_enclave.c b/hw/i386/nitro_enclave.c index 5ee50f3b85..640b1d8c54 100644 --- a/hw/i386/nitro_enclave.c +++ b/hw/i386/nitro_enclave.c @@ -14,7 +14,7 @@ #include "qom/object_interfaces.h" #include "chardev/char.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/eif.h" #include "hw/i386/x86.h" #include "hw/i386/microvm.h" diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 3f8fd07831..2e2671d605 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -41,7 +41,7 @@ #include "hw/core/irq.h" #include "system/kvm.h" #include "hw/i386/kvm/clock.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/i2c/smbus_eeprom.h" #include "system/memory.h" #include "hw/acpi/acpi.h" diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c index 906df5e788..d8a86756ca 100644 --- a/hw/i386/pc_sysfw.c +++ b/hw/i386/pc_sysfw.c @@ -29,7 +29,7 @@ #include "qemu/error-report.h" #include "qemu/option.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/i386/x86.h" #include "hw/i386/pc.h" #include "hw/core/loader.h" diff --git a/hw/i386/vapic.c b/hw/i386/vapic.c index 3a4254638b..32f92a28b8 100644 --- a/hw/i386/vapic.c +++ b/hw/i386/vapic.c @@ -19,7 +19,7 @@ #include "system/runstate.h" #include "system/address-spaces.h" #include "hw/i386/apic_internal.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/boards.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/i386/x86-iommu.c b/hw/i386/x86-iommu.c index 21e0d40e11..33ac0bfc97 100644 --- a/hw/i386/x86-iommu.c +++ b/hw/i386/x86-iommu.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/i386/x86-iommu.h" #include "hw/core/qdev-properties.h" #include "hw/i386/pc.h" diff --git a/hw/ide/mmio.c b/hw/ide/mmio.c index 04b56ac5d8..0de904ac56 100644 --- a/hw/ide/mmio.c +++ b/hw/ide/mmio.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "system/dma.h" diff --git a/hw/input/lasips2.c b/hw/input/lasips2.c index e34e9cb5c0..c03a127f3d 100644 --- a/hw/input/lasips2.c +++ b/hw/input/lasips2.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/input/ps2.h" #include "hw/input/lasips2.h" #include "exec/hwaddr.h" diff --git a/hw/input/pl050.c b/hw/input/pl050.c index cb8efc74f7..48df2734e2 100644 --- a/hw/input/pl050.c +++ b/hw/input/pl050.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/input/ps2.h" #include "hw/input/pl050.h" diff --git a/hw/input/ps2.c b/hw/input/ps2.c index 96850124a7..10ac732403 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/input/ps2.h" #include "migration/vmstate.h" #include "ui/console.h" diff --git a/hw/intc/allwinner-a10-pic.c b/hw/intc/allwinner-a10-pic.c index 0e1ec521e4..8e17a77c80 100644 --- a/hw/intc/allwinner-a10-pic.c +++ b/hw/intc/allwinner-a10-pic.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/intc/allwinner-a10-pic.h" #include "hw/core/irq.h" diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c index afac20440f..4e9e308994 100644 --- a/hw/intc/apic_common.c +++ b/hw/intc/apic_common.c @@ -30,7 +30,7 @@ #include "hw/core/boards.h" #include "system/kvm.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" bool apic_report_tpr_access; diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c index e27bb20bf8..4d0cb125a6 100644 --- a/hw/intc/arm_gic.c +++ b/hw/intc/arm_gic.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "gic_internal.h" #include "qapi/error.h" #include "hw/core/cpu.h" diff --git a/hw/intc/arm_gicv2m.c b/hw/intc/arm_gicv2m.c index c39d31b187..b343e17ca5 100644 --- a/hw/intc/arm_gicv2m.c +++ b/hw/intc/arm_gicv2m.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/pci/msi.h" #include "hw/core/qdev-properties.h" diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c index 5fa210c633..3a31eb56f3 100644 --- a/hw/intc/armv7m_nvic.c +++ b/hw/intc/armv7m_nvic.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/timer.h" #include "hw/intc/armv7m_nvic.h" diff --git a/hw/intc/exynos4210_combiner.c b/hw/intc/exynos4210_combiner.c index 8bea69d91b..ec935a084d 100644 --- a/hw/intc/exynos4210_combiner.c +++ b/hw/intc/exynos4210_combiner.c @@ -28,7 +28,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "hw/intc/exynos4210_combiner.h" diff --git a/hw/intc/exynos4210_gic.c b/hw/intc/exynos4210_gic.c index a65c9c6d28..d15e41174a 100644 --- a/hw/intc/exynos4210_gic.c +++ b/hw/intc/exynos4210_gic.c @@ -21,7 +21,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/module.h" diff --git a/hw/intc/goldfish_pic.c b/hw/intc/goldfish_pic.c index 96e7d5c225..16f351a30d 100644 --- a/hw/intc/goldfish_pic.c +++ b/hw/intc/goldfish_pic.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "trace.h" diff --git a/hw/intc/grlib_irqmp.c b/hw/intc/grlib_irqmp.c index ce7cbc98c1..d860ec15d8 100644 --- a/hw/intc/grlib_irqmp.c +++ b/hw/intc/grlib_irqmp.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-properties.h" #include "hw/intc/grlib_irqmp.h" diff --git a/hw/intc/ioapic_common.c b/hw/intc/ioapic_common.c index fce3486e51..d3bcd5699f 100644 --- a/hw/intc/ioapic_common.c +++ b/hw/intc/ioapic_common.c @@ -26,7 +26,7 @@ #include "hw/intc/intc.h" #include "hw/intc/ioapic.h" #include "hw/intc/ioapic_internal.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* ioapic_no count start from 0 to MAX_IOAPICS, * remove as static variable from ioapic_common_init. diff --git a/hw/intc/ioapic_internal.h b/hw/intc/ioapic_internal.h index 51205767f4..499b997d4b 100644 --- a/hw/intc/ioapic_internal.h +++ b/hw/intc/ioapic_internal.h @@ -24,7 +24,7 @@ #include "system/memory.h" #include "hw/intc/ioapic.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/notify.h" #include "qom/object.h" diff --git a/hw/intc/loongarch_dintc.c b/hw/intc/loongarch_dintc.c index 574e4a0d27..c42a919df4 100644 --- a/hw/intc/loongarch_dintc.c +++ b/hw/intc/loongarch_dintc.c @@ -6,7 +6,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/intc/loongarch_pch_msi.h" #include "hw/intc/loongarch_pch_pic.h" diff --git a/hw/intc/loongarch_pch_msi.c b/hw/intc/loongarch_pch_msi.c index 63090b2726..3656c6cea9 100644 --- a/hw/intc/loongarch_pch_msi.c +++ b/hw/intc/loongarch_pch_msi.c @@ -6,7 +6,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/intc/loongarch_pch_msi.h" #include "hw/intc/loongarch_pch_pic.h" diff --git a/hw/intc/loongson_ipi_common.c b/hw/intc/loongson_ipi_common.c index b3d8e781ca..d9d8a374d3 100644 --- a/hw/intc/loongson_ipi_common.c +++ b/hw/intc/loongson_ipi_common.c @@ -6,7 +6,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/loongson_ipi_common.h" #include "hw/core/irq.h" #include "qemu/log.h" diff --git a/hw/intc/mips_gic.c b/hw/intc/mips_gic.c index e983f3a2b5..ad9363a4c7 100644 --- a/hw/intc/mips_gic.c +++ b/hw/intc/mips_gic.c @@ -13,7 +13,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/memory.h" #include "system/kvm.h" #include "system/reset.h" diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c index deb21f9dc1..b2438d2d5f 100644 --- a/hw/intc/omap_intc.c +++ b/hw/intc/omap_intc.c @@ -22,7 +22,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/arm/omap.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/error-report.h" #include "qemu/module.h" #include "qapi/error.h" diff --git a/hw/intc/ompic.c b/hw/intc/ompic.c index 05f0ef8254..58736cd8a0 100644 --- a/hw/intc/ompic.c +++ b/hw/intc/ompic.c @@ -11,7 +11,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "system/memory.h" #include "qom/object.h" diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c index 4cc5068ffc..cd353a04f5 100644 --- a/hw/intc/openpic.c +++ b/hw/intc/openpic.c @@ -36,7 +36,7 @@ #include "hw/ppc/openpic.h" #include "hw/ppc/ppc_e500.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/pci/msi.h" #include "qapi/error.h" diff --git a/hw/intc/openpic_kvm.c b/hw/intc/openpic_kvm.c index 6558135baa..9aafef5d9e 100644 --- a/hw/intc/openpic_kvm.c +++ b/hw/intc/openpic_kvm.c @@ -29,7 +29,7 @@ #include "hw/ppc/openpic_kvm.h" #include "hw/pci/msi.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/kvm.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/intc/pl190.c b/hw/intc/pl190.c index f1e4959e9a..d53292d15e 100644 --- a/hw/intc/pl190.c +++ b/hw/intc/pl190.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/intc/riscv_aclint.c b/hw/intc/riscv_aclint.c index 83968ad7cc..9c1491bd04 100644 --- a/hw/intc/riscv_aclint.c +++ b/hw/intc/riscv_aclint.c @@ -26,7 +26,7 @@ #include "qemu/error-report.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "target/riscv/cpu.h" #include "target/riscv/time_helper.h" #include "hw/core/qdev-properties.h" diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c index cc5f30b558..92ff0ecaa7 100644 --- a/hw/intc/riscv_aplic.c +++ b/hw/intc/riscv_aplic.c @@ -23,7 +23,7 @@ #include "qemu/error-report.h" #include "qemu/bswap.h" #include "system/address-spaces.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/msi.h" #include "hw/core/boards.h" #include "hw/core/qdev-properties.h" diff --git a/hw/intc/riscv_imsic.c b/hw/intc/riscv_imsic.c index bc580c000e..7c9a012033 100644 --- a/hw/intc/riscv_imsic.c +++ b/hw/intc/riscv_imsic.c @@ -23,7 +23,7 @@ #include "qemu/error-report.h" #include "qemu/bswap.h" #include "system/address-spaces.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/msi.h" #include "hw/core/boards.h" #include "hw/core/qdev-properties.h" diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c index 508b58382e..57fd4b2b81 100644 --- a/hw/intc/s390_flic.c +++ b/hw/intc/s390_flic.c @@ -14,7 +14,7 @@ #include "qemu/error-report.h" #include "qemu/main-loop.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/s390x/ioinst.h" #include "hw/s390x/s390_flic.h" #include "hw/core/qdev-properties.h" diff --git a/hw/intc/sifive_plic.c b/hw/intc/sifive_plic.c index 5df578822f..9c84ff06a9 100644 --- a/hw/intc/sifive_plic.c +++ b/hw/intc/sifive_plic.c @@ -23,7 +23,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "qemu/error-report.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/msi.h" #include "hw/core/qdev-properties.h" #include "hw/intc/sifive_plic.h" diff --git a/hw/intc/slavio_intctl.c b/hw/intc/slavio_intctl.c index b12c8cbd69..640d8e2baa 100644 --- a/hw/intc/slavio_intctl.c +++ b/hw/intc/slavio_intctl.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "migration/vmstate.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/intc.h" #include "hw/core/irq.h" #include "trace.h" diff --git a/hw/intc/xilinx_intc.c b/hw/intc/xilinx_intc.c index f93f0d6e7e..782a286e43 100644 --- a/hw/intc/xilinx_intc.c +++ b/hw/intc/xilinx_intc.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/module.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" diff --git a/hw/intc/xlnx-pmu-iomod-intc.c b/hw/intc/xlnx-pmu-iomod-intc.c index b8bafe2f3f..0d9e85473d 100644 --- a/hw/intc/xlnx-pmu-iomod-intc.c +++ b/hw/intc/xlnx-pmu-iomod-intc.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/register.h" #include "qemu/bitops.h" diff --git a/hw/intc/xlnx-zynqmp-ipi.c b/hw/intc/xlnx-zynqmp-ipi.c index e69ea74ff7..3538a0e5db 100644 --- a/hw/intc/xlnx-zynqmp-ipi.c +++ b/hw/intc/xlnx-zynqmp-ipi.c @@ -26,7 +26,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/register.h" #include "qemu/bitops.h" diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c index 6c9802eb7a..7e6d2ce5a9 100644 --- a/hw/isa/isa-bus.c +++ b/hw/isa/isa-bus.c @@ -21,7 +21,7 @@ #include "qemu/error-report.h" #include "qemu/module.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/system.h" #include "hw/isa/isa.h" diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c index 4bc7b1d189..c5befa02eb 100644 --- a/hw/m68k/mcf5206.c +++ b/hw/m68k/mcf5206.c @@ -17,7 +17,7 @@ #include "qemu/timer.h" #include "hw/core/ptimer.h" #include "system/system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* General purpose timer module. */ typedef struct { diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index 3a87e1f282..c6d1c5fae9 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -31,7 +31,7 @@ #include "net/net.h" #include "hw/core/boards.h" #include "hw/core/loader.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "elf.h" #define SYS_FREQ 166666666 diff --git a/hw/m68k/mcf_intc.c b/hw/m68k/mcf_intc.c index b8770e3a53..20112c94be 100644 --- a/hw/m68k/mcf_intc.c +++ b/hw/m68k/mcf_intc.c @@ -12,7 +12,7 @@ #include "qemu/log.h" #include "cpu.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/m68k/mcf.h" #include "hw/core/qdev-properties.h" #include "qom/object.h" diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index 75ae66c311..ca3df7b887 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -20,7 +20,7 @@ #include "hw/core/boards.h" #include "hw/core/loader.h" #include "hw/scsi/esp.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "hw/char/escc.h" /* ZILOG 8530 Serial Emulation */ #include "hw/block/fdc.h" diff --git a/hw/m68k/next-kbd.c b/hw/m68k/next-kbd.c index 2bec945acf..571a955504 100644 --- a/hw/m68k/next-kbd.c +++ b/hw/m68k/next-kbd.c @@ -29,7 +29,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/m68k/next-cube.h" #include "ui/console.h" #include "migration/vmstate.h" diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 6fe030e8c5..25ddddb5d9 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -33,7 +33,7 @@ #include "hw/core/loader.h" #include "ui/console.h" #include "hw/char/escc.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/scsi/esp.h" #include "standard-headers/asm-m68k/bootinfo.h" #include "standard-headers/asm-m68k/bootinfo-mac.h" diff --git a/hw/m68k/virt.c b/hw/m68k/virt.c index 2d83919fa8..7be3a24800 100644 --- a/hw/m68k/virt.c +++ b/hw/m68k/virt.c @@ -18,7 +18,7 @@ #include "elf.h" #include "hw/core/loader.h" #include "ui/console.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "standard-headers/asm-m68k/bootinfo.h" #include "standard-headers/asm-m68k/bootinfo-virt.h" #include "bootinfo.h" diff --git a/hw/mem/sparse-mem.c b/hw/mem/sparse-mem.c index 9186da6b1a..3b754de887 100644 --- a/hw/mem/sparse-mem.c +++ b/hw/mem/sparse-mem.c @@ -14,7 +14,7 @@ #include "qemu/error-report.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/units.h" #include "system/qtest.h" diff --git a/hw/microblaze/petalogix_ml605_mmu.c b/hw/microblaze/petalogix_ml605_mmu.c index 51ee237d58..b3bdc4d65f 100644 --- a/hw/microblaze/petalogix_ml605_mmu.c +++ b/hw/microblaze/petalogix_ml605_mmu.c @@ -29,7 +29,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "cpu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #include "hw/block/flash.h" #include "system/system.h" diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/petalogix_s3adsp1800_mmu.c index 266ecf9e8a..2a853a7fa5 100644 --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c @@ -27,7 +27,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "cpu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #include "hw/block/flash.h" #include "system/system.h" diff --git a/hw/mips/jazz.c b/hw/mips/jazz.c index fb01af8ece..e0adb96c54 100644 --- a/hw/mips/jazz.c +++ b/hw/mips/jazz.c @@ -43,7 +43,7 @@ #include "hw/display/bochs-vbe.h" #include "hw/audio/pcspk.h" #include "hw/input/i8042.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/qtest.h" #include "system/reset.h" #include "qapi/error.h" diff --git a/hw/mips/malta.c b/hw/mips/malta.c index e5ed0b5692..812ff64d83 100644 --- a/hw/mips/malta.c +++ b/hw/mips/malta.c @@ -47,7 +47,7 @@ #include "hw/core/loader.h" #include "elf.h" #include "qom/object.h" -#include "hw/sysbus.h" /* SysBusDevice */ +#include "hw/core/sysbus.h" /* SysBusDevice */ #include "qemu/host-utils.h" #include "system/qtest.h" #include "system/reset.h" diff --git a/hw/misc/allwinner-a10-ccm.c b/hw/misc/allwinner-a10-ccm.c index 6b188c25a5..dc7f8ff205 100644 --- a/hw/misc/allwinner-a10-ccm.c +++ b/hw/misc/allwinner-a10-ccm.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-a10-dramc.c b/hw/misc/allwinner-a10-dramc.c index c16814cc5b..757f2cad95 100644 --- a/hw/misc/allwinner-a10-dramc.c +++ b/hw/misc/allwinner-a10-dramc.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-cpucfg.c b/hw/misc/allwinner-cpucfg.c index 90dd872abf..3a1526bda0 100644 --- a/hw/misc/allwinner-cpucfg.c +++ b/hw/misc/allwinner-cpucfg.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-h3-ccu.c b/hw/misc/allwinner-h3-ccu.c index be91c0c1ca..ac5ae01acc 100644 --- a/hw/misc/allwinner-h3-ccu.c +++ b/hw/misc/allwinner-h3-ccu.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-h3-dramc.c b/hw/misc/allwinner-h3-dramc.c index ef491b36ff..10d929a303 100644 --- a/hw/misc/allwinner-h3-dramc.c +++ b/hw/misc/allwinner-h3-dramc.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qemu/error-report.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-h3-sysctrl.c b/hw/misc/allwinner-h3-sysctrl.c index 6b86524606..d37c0a6e26 100644 --- a/hw/misc/allwinner-h3-sysctrl.c +++ b/hw/misc/allwinner-h3-sysctrl.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-r40-ccu.c b/hw/misc/allwinner-r40-ccu.c index 4e21eeafdd..8ba4e7aa42 100644 --- a/hw/misc/allwinner-r40-ccu.c +++ b/hw/misc/allwinner-r40-ccu.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-r40-dramc.c b/hw/misc/allwinner-r40-dramc.c index 3af8af733a..8e6aa7c310 100644 --- a/hw/misc/allwinner-r40-dramc.c +++ b/hw/misc/allwinner-r40-dramc.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qemu/error-report.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-sid.c b/hw/misc/allwinner-sid.c index 92a0c7918b..b5f827d4bd 100644 --- a/hw/misc/allwinner-sid.c +++ b/hw/misc/allwinner-sid.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/allwinner-sramc.c b/hw/misc/allwinner-sramc.c index 423e0a844f..1d30f8cf32 100644 --- a/hw/misc/allwinner-sramc.c +++ b/hw/misc/allwinner-sramc.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/arm_integrator_debug.c b/hw/misc/arm_integrator_debug.c index 9a19727829..9ac6a50a93 100644 --- a/hw/misc/arm_integrator_debug.c +++ b/hw/misc/arm_integrator_debug.c @@ -15,7 +15,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/arm_integrator_debug.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/arm_l2x0.c b/hw/misc/arm_l2x0.c index a5511845c7..039f1b0f2c 100644 --- a/hw/misc/arm_l2x0.c +++ b/hw/misc/arm_l2x0.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/arm_sysctl.c b/hw/misc/arm_sysctl.c index 0c91ebafac..2a317ac7f5 100644 --- a/hw/misc/arm_sysctl.c +++ b/hw/misc/arm_sysctl.c @@ -13,7 +13,7 @@ #include "qemu/timer.h" #include "system/runstate.h" #include "qemu/bitops.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/arm/primecell.h" #include "qemu/log.h" diff --git a/hw/misc/armsse-cpu-pwrctrl.c b/hw/misc/armsse-cpu-pwrctrl.c index 87770facfc..86a26a8ac5 100644 --- a/hw/misc/armsse-cpu-pwrctrl.c +++ b/hw/misc/armsse-cpu-pwrctrl.c @@ -21,7 +21,7 @@ #include "trace.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/registerfields.h" #include "hw/misc/armsse-cpu-pwrctrl.h" diff --git a/hw/misc/armsse-cpuid.c b/hw/misc/armsse-cpuid.c index 0383312551..ea2a099ccb 100644 --- a/hw/misc/armsse-cpuid.c +++ b/hw/misc/armsse-cpuid.c @@ -23,7 +23,7 @@ #include "qemu/module.h" #include "trace.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/registerfields.h" #include "hw/misc/armsse-cpuid.h" #include "hw/core/qdev-properties.h" diff --git a/hw/misc/armsse-mhu.c b/hw/misc/armsse-mhu.c index 6fbe2cca37..48c4b59067 100644 --- a/hw/misc/armsse-mhu.c +++ b/hw/misc/armsse-mhu.c @@ -20,7 +20,7 @@ #include "qemu/module.h" #include "trace.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "hw/core/irq.h" diff --git a/hw/misc/eccmemctl.c b/hw/misc/eccmemctl.c index f93cbd1659..dd1be7d698 100644 --- a/hw/misc/eccmemctl.c +++ b/hw/misc/eccmemctl.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "trace.h" diff --git a/hw/misc/empty_slot.c b/hw/misc/empty_slot.c index a012668214..aab9373c09 100644 --- a/hw/misc/empty_slot.c +++ b/hw/misc/empty_slot.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-properties.h" #include "hw/misc/empty_slot.h" #include "qapi/error.h" diff --git a/hw/misc/exynos4210_clk.c b/hw/misc/exynos4210_clk.c index fdf5bdd603..e752679219 100644 --- a/hw/misc/exynos4210_clk.c +++ b/hw/misc/exynos4210_clk.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/exynos4210_pmu.c b/hw/misc/exynos4210_pmu.c index a86ec9aba8..0be793b3aa 100644 --- a/hw/misc/exynos4210_pmu.c +++ b/hw/misc/exynos4210_pmu.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "system/runstate.h" diff --git a/hw/misc/exynos4210_rng.c b/hw/misc/exynos4210_rng.c index 2d0ebc457b..3f743b4750 100644 --- a/hw/misc/exynos4210_rng.c +++ b/hw/misc/exynos4210_rng.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/misc/grlib_ahb_apb_pnp.c b/hw/misc/grlib_ahb_apb_pnp.c index cdca00ad54..0d12bcde9d 100644 --- a/hw/misc/grlib_ahb_apb_pnp.c +++ b/hw/misc/grlib_ahb_apb_pnp.c @@ -23,7 +23,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/grlib_ahb_apb_pnp.h" #include "trace.h" diff --git a/hw/misc/iosb.c b/hw/misc/iosb.c index 96221e1ee5..ea63e34b93 100644 --- a/hw/misc/iosb.c +++ b/hw/misc/iosb.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/iosb.h" #include "trace.h" diff --git a/hw/misc/iotkit-secctl.c b/hw/misc/iotkit-secctl.c index 832b021777..54bfe1ba59 100644 --- a/hw/misc/iotkit-secctl.c +++ b/hw/misc/iotkit-secctl.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "hw/core/irq.h" diff --git a/hw/misc/iotkit-sysctl.c b/hw/misc/iotkit-sysctl.c index d673ae326b..dff89c677f 100644 --- a/hw/misc/iotkit-sysctl.c +++ b/hw/misc/iotkit-sysctl.c @@ -23,7 +23,7 @@ #include "system/runstate.h" #include "trace.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "hw/misc/iotkit-sysctl.h" diff --git a/hw/misc/iotkit-sysinfo.c b/hw/misc/iotkit-sysinfo.c index 3b4d228e3e..19f089e6ee 100644 --- a/hw/misc/iotkit-sysinfo.c +++ b/hw/misc/iotkit-sysinfo.c @@ -22,7 +22,7 @@ #include "qemu/module.h" #include "trace.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/registerfields.h" #include "hw/misc/iotkit-sysinfo.h" #include "hw/core/qdev-properties.h" diff --git a/hw/misc/ivshmem-flat.c b/hw/misc/ivshmem-flat.c index 1248f9e81b..920aa4943a 100644 --- a/hw/misc/ivshmem-flat.c +++ b/hw/misc/ivshmem-flat.c @@ -15,7 +15,7 @@ #include "qapi/error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties-system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "system/address-spaces.h" #include "trace.h" diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 0c608c3dc6..26ee230dcc 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "system/address-spaces.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "qemu/timer.h" #include "hw/misc/mac_via.h" diff --git a/hw/misc/mchp_pfsoc_dmc.c b/hw/misc/mchp_pfsoc_dmc.c index 599f845f45..1fe4535464 100644 --- a/hw/misc/mchp_pfsoc_dmc.c +++ b/hw/misc/mchp_pfsoc_dmc.c @@ -24,7 +24,7 @@ #include "qemu/bitops.h" #include "qemu/log.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/mchp_pfsoc_dmc.h" /* DDR SGMII PHY module */ diff --git a/hw/misc/mchp_pfsoc_ioscb.c b/hw/misc/mchp_pfsoc_ioscb.c index 84e957244e..05538d012a 100644 --- a/hw/misc/mchp_pfsoc_ioscb.c +++ b/hw/misc/mchp_pfsoc_ioscb.c @@ -25,7 +25,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/mchp_pfsoc_ioscb.h" /* diff --git a/hw/misc/mchp_pfsoc_sysreg.c b/hw/misc/mchp_pfsoc_sysreg.c index 2a41515103..f190ecc78e 100644 --- a/hw/misc/mchp_pfsoc_sysreg.c +++ b/hw/misc/mchp_pfsoc_sysreg.c @@ -25,7 +25,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/mchp_pfsoc_sysreg.h" #include "system/runstate.h" diff --git a/hw/misc/mips_cmgcr.c b/hw/misc/mips_cmgcr.c index 1c6e9d1f6f..3e262e828b 100644 --- a/hw/misc/mips_cmgcr.c +++ b/hw/misc/mips_cmgcr.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/misc/mips_cmgcr.h" #include "hw/misc/mips_cpc.h" diff --git a/hw/misc/mips_cpc.c b/hw/misc/mips_cpc.c index efc0326f6f..924de855ee 100644 --- a/hw/misc/mips_cpc.c +++ b/hw/misc/mips_cpc.c @@ -22,7 +22,7 @@ #include "cpu.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/misc/mips_cpc.h" diff --git a/hw/misc/mps2-fpgaio.c b/hw/misc/mps2-fpgaio.c index 9cd5e9884c..da78cb6070 100644 --- a/hw/misc/mps2-fpgaio.c +++ b/hw/misc/mps2-fpgaio.c @@ -20,7 +20,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "hw/misc/mps2-fpgaio.h" diff --git a/hw/misc/mps2-scc.c b/hw/misc/mps2-scc.c index 06d436cf58..350bba3dab 100644 --- a/hw/misc/mps2-scc.c +++ b/hw/misc/mps2-scc.c @@ -22,7 +22,7 @@ #include "qemu/module.h" #include "qemu/bitops.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" diff --git a/hw/misc/pvpanic-mmio.c b/hw/misc/pvpanic-mmio.c index 2d1464435a..a173a1a9a5 100644 --- a/hw/misc/pvpanic-mmio.c +++ b/hw/misc/pvpanic-mmio.c @@ -10,7 +10,7 @@ #include "hw/core/qdev-properties.h" #include "hw/misc/pvpanic.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "standard-headers/misc/pvpanic.h" OBJECT_DECLARE_SIMPLE_TYPE(PVPanicMMIOState, PVPANIC_MMIO_DEVICE) diff --git a/hw/misc/sbsa_ec.c b/hw/misc/sbsa_ec.c index dfee1af5ad..93296d3350 100644 --- a/hw/misc/sbsa_ec.c +++ b/hw/misc/sbsa_ec.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/runstate.h" typedef struct SECUREECState { diff --git a/hw/misc/sifive_e_prci.c b/hw/misc/sifive_e_prci.c index a8702c6a5d..400664aaba 100644 --- a/hw/misc/sifive_e_prci.c +++ b/hw/misc/sifive_e_prci.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/sifive_test.c b/hw/misc/sifive_test.c index b94bb2d29d..41f102e2dc 100644 --- a/hw/misc/sifive_test.c +++ b/hw/misc/sifive_test.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/sifive_u_otp.c b/hw/misc/sifive_u_otp.c index 899bc31745..7205374bc3 100644 --- a/hw/misc/sifive_u_otp.c +++ b/hw/misc/sifive_u_otp.c @@ -22,7 +22,7 @@ #include "qapi/error.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/error-report.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/sifive_u_prci.c b/hw/misc/sifive_u_prci.c index 6e75cb6d0d..f51588623a 100644 --- a/hw/misc/sifive_u_prci.c +++ b/hw/misc/sifive_u_prci.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/log.h" #include "qemu/module.h" #include "hw/misc/sifive_u_prci.h" diff --git a/hw/misc/slavio_misc.c b/hw/misc/slavio_misc.c index 43ce5d0bc9..49be827c45 100644 --- a/hw/misc/slavio_misc.c +++ b/hw/misc/slavio_misc.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "system/runstate.h" diff --git a/hw/misc/tz-mpc.c b/hw/misc/tz-mpc.c index 65517d390d..02fe0bcb1d 100644 --- a/hw/misc/tz-mpc.c +++ b/hw/misc/tz-mpc.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "hw/core/irq.h" diff --git a/hw/misc/tz-msc.c b/hw/misc/tz-msc.c index dd845193d6..9d9fc072ff 100644 --- a/hw/misc/tz-msc.c +++ b/hw/misc/tz-msc.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "hw/core/irq.h" diff --git a/hw/misc/tz-ppc.c b/hw/misc/tz-ppc.c index 7b812a034b..159073d1e6 100644 --- a/hw/misc/tz-ppc.c +++ b/hw/misc/tz-ppc.c @@ -14,7 +14,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/registerfields.h" #include "hw/core/irq.h" diff --git a/hw/misc/unimp.c b/hw/misc/unimp.c index 4370c14ef1..521b84bf20 100644 --- a/hw/misc/unimp.c +++ b/hw/misc/unimp.c @@ -12,7 +12,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/unimp.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/misc/virt_ctrl.c b/hw/misc/virt_ctrl.c index 7cb1ea5d18..40747925a2 100644 --- a/hw/misc/virt_ctrl.c +++ b/hw/misc/virt_ctrl.c @@ -6,7 +6,7 @@ #include "qemu/osdep.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "trace.h" diff --git a/hw/misc/xlnx-versal-cframe-reg.c b/hw/misc/xlnx-versal-cframe-reg.c index efacbe83ab..47d3b9e84a 100644 --- a/hw/misc/xlnx-versal-cframe-reg.c +++ b/hw/misc/xlnx-versal-cframe-reg.c @@ -9,7 +9,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/core/registerfields.h" #include "qemu/bitops.h" diff --git a/hw/misc/xlnx-versal-cfu.c b/hw/misc/xlnx-versal-cfu.c index bdce0ce747..86df37d6e8 100644 --- a/hw/misc/xlnx-versal-cfu.c +++ b/hw/misc/xlnx-versal-cfu.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/core/irq.h" #include "qemu/bitops.h" diff --git a/hw/misc/xlnx-versal-crl.c b/hw/misc/xlnx-versal-crl.c index 9bbf44def6..1379974f81 100644 --- a/hw/misc/xlnx-versal-crl.c +++ b/hw/misc/xlnx-versal-crl.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/register.h" #include "hw/core/resettable.h" diff --git a/hw/misc/xlnx-versal-pmc-iou-slcr.c b/hw/misc/xlnx-versal-pmc-iou-slcr.c index 0246167a5e..57a24641cf 100644 --- a/hw/misc/xlnx-versal-pmc-iou-slcr.c +++ b/hw/misc/xlnx-versal-pmc-iou-slcr.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/core/irq.h" #include "qemu/bitops.h" diff --git a/hw/misc/xlnx-versal-xramc.c b/hw/misc/xlnx-versal-xramc.c index f4f02c7680..da8c98ae03 100644 --- a/hw/misc/xlnx-versal-xramc.c +++ b/hw/misc/xlnx-versal-xramc.c @@ -10,7 +10,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/core/qdev-properties.h" #include "hw/core/irq.h" diff --git a/hw/misc/xlnx-zynqmp-apu-ctrl.c b/hw/misc/xlnx-zynqmp-apu-ctrl.c index 957043f01b..c46951d552 100644 --- a/hw/misc/xlnx-zynqmp-apu-ctrl.c +++ b/hw/misc/xlnx-zynqmp-apu-ctrl.c @@ -13,7 +13,7 @@ #include "qemu/log.h" #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/register.h" diff --git a/hw/misc/xlnx-zynqmp-crf.c b/hw/misc/xlnx-zynqmp-crf.c index a2ebf6ce5d..1f7107c322 100644 --- a/hw/misc/xlnx-zynqmp-crf.c +++ b/hw/misc/xlnx-zynqmp-crf.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "qemu/bitops.h" #include "qemu/log.h" diff --git a/hw/misc/zynq_slcr.c b/hw/misc/zynq_slcr.c index d7d490b093..faae98fa02 100644 --- a/hw/misc/zynq_slcr.c +++ b/hw/misc/zynq_slcr.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "qemu/timer.h" #include "system/runstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/net/allwinner-sun8i-emac.c b/hw/net/allwinner-sun8i-emac.c index 8ff0db5ccd..9b7c67ae8e 100644 --- a/hw/net/allwinner-sun8i-emac.c +++ b/hw/net/allwinner-sun8i-emac.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" #include "hw/core/irq.h" diff --git a/hw/net/allwinner_emac.c b/hw/net/allwinner_emac.c index cbe4cb80e4..55d1b6a9a6 100644 --- a/hw/net/allwinner_emac.c +++ b/hw/net/allwinner_emac.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" #include "qemu/fifo8.h" diff --git a/hw/net/can/xlnx-versal-canfd.c b/hw/net/can/xlnx-versal-canfd.c index 3ceb1a8b91..4a7cdc31ee 100644 --- a/hw/net/can/xlnx-versal-canfd.c +++ b/hw/net/can/xlnx-versal-canfd.c @@ -31,7 +31,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/register.h" #include "qapi/error.h" diff --git a/hw/net/can/xlnx-zynqmp-can.c b/hw/net/can/xlnx-zynqmp-can.c index 6c583cab8f..bccf624016 100644 --- a/hw/net/can/xlnx-zynqmp-can.c +++ b/hw/net/can/xlnx-zynqmp-can.c @@ -30,7 +30,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/core/irq.h" #include "qapi/error.h" diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 182f0e5f6b..5b611fcbbe 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -21,7 +21,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/net/dp8393x.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" #include "qapi/error.h" diff --git a/hw/net/fsl_etsec/etsec.c b/hw/net/fsl_etsec/etsec.c index 5b77528e36..1d61d918b8 100644 --- a/hw/net/fsl_etsec/etsec.c +++ b/hw/net/fsl_etsec/etsec.c @@ -27,7 +27,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/net/mii.h" #include "hw/core/ptimer.h" diff --git a/hw/net/fsl_etsec/etsec.h b/hw/net/fsl_etsec/etsec.h index ca8ad5638a..24e1344bf1 100644 --- a/hw/net/fsl_etsec/etsec.h +++ b/hw/net/fsl_etsec/etsec.h @@ -25,7 +25,7 @@ #ifndef ETSEC_H #define ETSEC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #include "hw/core/ptimer.h" #include "qom/object.h" diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c index 381fd38764..072a741d81 100644 --- a/hw/net/lan9118.c +++ b/hw/net/lan9118.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" #include "net/eth.h" diff --git a/hw/net/lasi_i82596.c b/hw/net/lasi_i82596.c index 50e3c4fa86..423a8676a0 100644 --- a/hw/net/lasi_i82596.c +++ b/hw/net/lasi_i82596.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "qemu/timer.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/system.h" #include "net/eth.h" #include "hw/net/lasi_82596.h" diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c index ecf105adf2..5f267e5ea3 100644 --- a/hw/net/mcf_fec.c +++ b/hw/net/mcf_fec.c @@ -15,7 +15,7 @@ #include "hw/m68k/mcf_fec.h" #include "hw/net/mii.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include /* for crc32 */ //#define DEBUG_FEC 1 diff --git a/hw/net/mv88w8618_eth.c b/hw/net/mv88w8618_eth.c index 1a1bba8b57..1fcfbe912e 100644 --- a/hw/net/mv88w8618_eth.c +++ b/hw/net/mv88w8618_eth.c @@ -8,7 +8,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/net/mv88w8618_eth.h" #include "migration/vmstate.h" diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c index 34992f3cc9..ec3301414c 100644 --- a/hw/net/opencores_eth.c +++ b/hw/net/opencores_eth.c @@ -35,7 +35,7 @@ #include "hw/core/irq.h" #include "hw/net/mii.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #include "qemu/module.h" #include "net/eth.h" diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c index d6f57bc004..3420d8e28e 100644 --- a/hw/net/smc91c111.c +++ b/hw/net/smc91c111.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" #include "hw/core/irq.h" diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c index c97d694585..ac7924bdd9 100644 --- a/hw/net/stellaris_enet.c +++ b/hw/net/stellaris_enet.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "net/net.h" #include "qemu/log.h" diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c index f07be72512..8d316e94c1 100644 --- a/hw/net/xgmac.c +++ b/hw/net/xgmac.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "net/net.h" diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c index 451f8da212..29c09b88eb 100644 --- a/hw/net/xilinx_axienet.c +++ b/hw/net/xilinx_axienet.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/hw.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c index 72b14811a9..ba3acd4c77 100644 --- a/hw/net/xilinx_ethlite.c +++ b/hw/net/xilinx_ethlite.c @@ -31,7 +31,7 @@ #include "qemu/bitops.h" #include "qom/object.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" diff --git a/hw/nubus/mac-nubus-bridge.c b/hw/nubus/mac-nubus-bridge.c index 0dac8d19b3..dc9ae6d21f 100644 --- a/hw/nubus/mac-nubus-bridge.c +++ b/hw/nubus/mac-nubus-bridge.c @@ -9,7 +9,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/nubus/mac-nubus-bridge.h" diff --git a/hw/nubus/nubus-bridge.c b/hw/nubus/nubus-bridge.c index fb14402c4f..f0e1620ee0 100644 --- a/hw/nubus/nubus-bridge.c +++ b/hw/nubus/nubus-bridge.c @@ -9,7 +9,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/nubus/nubus.h" diff --git a/hw/nvram/ds1225y.c b/hw/nvram/ds1225y.c index 512e548518..4f35bfebda 100644 --- a/hw/nvram/ds1225y.c +++ b/hw/nvram/ds1225y.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "trace.h" #include "qemu/error-report.h" diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index e5c35b0e2e..437ab6e210 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -31,7 +31,7 @@ #include "hw/core/boards.h" #include "hw/nvram/fw_cfg.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/qemu-file-types.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c index bafb877cc3..603d8ca0d9 100644 --- a/hw/openrisc/openrisc_sim.c +++ b/hw/openrisc/openrisc_sim.c @@ -31,7 +31,7 @@ #include "system/address-spaces.h" #include "system/device_tree.h" #include "system/system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/qtest.h" #include "system/reset.h" #include "hw/core/split-irq.h" diff --git a/hw/openrisc/virt.c b/hw/openrisc/virt.c index 446a81579c..54ce96666e 100644 --- a/hw/openrisc/virt.c +++ b/hw/openrisc/virt.c @@ -22,7 +22,7 @@ #include "hw/pci-host/gpex.h" #include "hw/core/qdev-properties.h" #include "hw/rtc/goldfish_rtc.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/virtio/virtio-mmio.h" #include "system/device_tree.h" #include "system/system.h" diff --git a/hw/pci-bridge/cxl_root_port.c b/hw/pci-bridge/cxl_root_port.c index 616d5d934c..197d3148d2 100644 --- a/hw/pci-bridge/cxl_root_port.c +++ b/hw/pci-bridge/cxl_root_port.c @@ -25,7 +25,7 @@ #include "hw/pci/msi.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "hw/cxl/cxl.h" diff --git a/hw/pci-host/i440fx.c b/hw/pci-host/i440fx.c index 15354abf3b..e7d638b296 100644 --- a/hw/pci-host/i440fx.c +++ b/hw/pci-host/i440fx.c @@ -30,7 +30,7 @@ #include "hw/pci/pci_host.h" #include "hw/pci-host/i440fx.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "migration/vmstate.h" #include "qapi/visitor.h" diff --git a/hw/pci-host/mv64361.c b/hw/pci-host/mv64361.c index 636228c407..ef1c77563e 100644 --- a/hw/pci-host/mv64361.c +++ b/hw/pci-host/mv64361.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci_device.h" #include "hw/pci/pci_host.h" #include "hw/core/irq.h" diff --git a/hw/pci-host/sabre.c b/hw/pci-host/sabre.c index 87af933dc2..b3f57dca7d 100644 --- a/hw/pci-host/sabre.c +++ b/hw/pci-host/sabre.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci.h" #include "hw/pci/pci_host.h" #include "hw/core/qdev-properties.h" diff --git a/hw/pci-host/sh_pci.c b/hw/pci-host/sh_pci.c index 87a71c889e..3ffd2cdbd7 100644 --- a/hw/pci-host/sh_pci.c +++ b/hw/pci-host/sh_pci.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/sh4/sh.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" diff --git a/hw/pci-host/versatile.c b/hw/pci-host/versatile.c index 1fdae78210..b27531f7fb 100644 --- a/hw/pci-host/versatile.c +++ b/hw/pci-host/versatile.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/pci/pci_device.h" diff --git a/hw/ppc/e500-ccsr.h b/hw/ppc/e500-ccsr.h index 249c17be3b..4de006b443 100644 --- a/hw/ppc/e500-ccsr.h +++ b/hw/ppc/e500-ccsr.h @@ -1,7 +1,7 @@ #ifndef E500_CCSR_H #define E500_CCSR_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" struct PPCE500CCSRState { diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index 7f164331c8..113a2daca1 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -41,7 +41,7 @@ #include "hw/core/qdev-properties.h" #include "hw/core/loader.h" #include "elf.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/host-utils.h" #include "qemu/option.h" #include "hw/pci-host/ppce500.h" diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c index 4f1d659e72..ca5647284d 100644 --- a/hw/ppc/e500plat.c +++ b/hw/ppc/e500plat.c @@ -15,7 +15,7 @@ #include "hw/net/fsl_etsec/etsec.h" #include "system/device_tree.h" #include "system/kvm.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci.h" #include "hw/ppc/openpic.h" #include "kvm_ppc.h" diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 410a3ac392..7275563a15 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -73,7 +73,7 @@ #include "system/reset.h" #include "kvm_ppc.h" #include "hw/usb/usb.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "trace.h" #define MAX_IDE_BUS 2 diff --git a/hw/ppc/mpc8544_guts.c b/hw/ppc/mpc8544_guts.c index a25041e836..88ae573d1e 100644 --- a/hw/ppc/mpc8544_guts.c +++ b/hw/ppc/mpc8544_guts.c @@ -21,7 +21,7 @@ #include "qemu/log.h" #include "system/runstate.h" #include "cpu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define MPC8544_GUTS_MMIO_SIZE 0x1000 diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index bf290a7dcd..3e4d19fbe8 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -11,7 +11,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "hw/ppc/ppc.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci_host.h" #include "hw/core/irq.h" #include "hw/core/or-irq.h" diff --git a/hw/ppc/pnv_xscom.c b/hw/ppc/pnv_xscom.c index fbfec829d5..8557b560ae 100644 --- a/hw/ppc/pnv_xscom.c +++ b/hw/ppc/pnv_xscom.c @@ -22,7 +22,7 @@ #include "qemu/module.h" #include "system/hw_accel.h" #include "target/ppc/cpu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ppc/fdt.h" #include "hw/ppc/pnv.h" diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index 491560575c..2dde008b0e 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -28,7 +28,7 @@ #include "hw/pci-host/ppc4xx.h" #include "system/system.h" #include "system/reset.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/ppc-uic.h" #include "hw/core/qdev-properties.h" #include "qapi/error.h" diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c index bc70e50e92..a066ada77e 100644 --- a/hw/ppc/ppce500_spin.c +++ b/hw/ppc/ppce500_spin.c @@ -31,7 +31,7 @@ #include "qemu/module.h" #include "qemu/units.h" #include "hw/hw.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/hw_accel.h" #include "hw/ppc/ppc.h" #include "e500.h" diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c index b6e233747e..b13dd224ba 100644 --- a/hw/ppc/sam460ex.c +++ b/hw/ppc/sam460ex.c @@ -30,7 +30,7 @@ #include "hw/block/flash.h" #include "system/system.h" #include "system/reset.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/char/serial-mm.h" #include "hw/i2c/ppc4xx_i2c.h" #include "hw/i2c/smbus_eeprom.h" diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index a7c064be33..ea998bdff1 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/pci/pci.h" #include "hw/pci/msi.h" diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c index 875c17f478..501e82a766 100644 --- a/hw/ppc/spapr_vio.c +++ b/hw/ppc/spapr_vio.c @@ -26,7 +26,7 @@ #include "qemu/log.h" #include "hw/core/loader.h" #include "elf.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/kvm.h" #include "system/device_tree.h" #include "kvm_ppc.h" diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index cf2d10ecb2..8b3e67b627 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -27,7 +27,7 @@ #include "qemu/units.h" #include "exec/page-protection.h" #include "cpu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/char/serial-mm.h" #include "hw/block/flash.h" #include "system/system.h" diff --git a/hw/riscv/microblaze-v-generic.c b/hw/riscv/microblaze-v-generic.c index 8a461a0dd5..d56b64792d 100644 --- a/hw/riscv/microblaze-v-generic.c +++ b/hw/riscv/microblaze-v-generic.c @@ -17,7 +17,7 @@ #include "qemu/units.h" #include "qapi/error.h" #include "cpu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/system.h" #include "net/net.h" #include "hw/core/boards.h" diff --git a/hw/riscv/microchip_pfsoc.c b/hw/riscv/microchip_pfsoc.c index 9de6456c14..0cf849ffb6 100644 --- a/hw/riscv/microchip_pfsoc.c +++ b/hw/riscv/microchip_pfsoc.c @@ -42,7 +42,7 @@ #include "qapi/visitor.h" #include "hw/core/boards.h" #include "hw/core/loader.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char.h" #include "hw/cpu/cluster.h" #include "target/riscv/cpu.h" diff --git a/hw/riscv/riscv-iommu-sys.c b/hw/riscv/riscv-iommu-sys.c index 2a11c4dab6..bf87b0b4ea 100644 --- a/hw/riscv/riscv-iommu-sys.c +++ b/hw/riscv/riscv-iommu-sys.c @@ -20,7 +20,7 @@ #include "hw/core/irq.h" #include "hw/pci/pci_bus.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/host-utils.h" diff --git a/hw/riscv/riscv_hart.c b/hw/riscv/riscv_hart.c index 3118748794..e675358e1a 100644 --- a/hw/riscv/riscv_hart.c +++ b/hw/riscv/riscv_hart.c @@ -24,7 +24,7 @@ #include "system/reset.h" #include "system/qtest.h" #include "qemu/cutils.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "target/riscv/cpu.h" #include "hw/core/qdev-properties.h" #include "hw/riscv/riscv_hart.h" diff --git a/hw/riscv/sifive_e.c b/hw/riscv/sifive_e.c index c2032176c4..4cb9c07ffb 100644 --- a/hw/riscv/sifive_e.c +++ b/hw/riscv/sifive_e.c @@ -34,7 +34,7 @@ #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/core/loader.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/unimp.h" #include "target/riscv/cpu.h" #include "hw/riscv/riscv_hart.h" diff --git a/hw/riscv/sifive_u.c b/hw/riscv/sifive_u.c index 3e081ddf37..f1b47ab584 100644 --- a/hw/riscv/sifive_u.c +++ b/hw/riscv/sifive_u.c @@ -42,7 +42,7 @@ #include "hw/core/boards.h" #include "hw/core/irq.h" #include "hw/core/loader.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/cpu/cluster.h" #include "hw/misc/unimp.h" #include "hw/sd/sd.h" diff --git a/hw/riscv/spike.c b/hw/riscv/spike.c index c9451d7e3b..ea527c7bfc 100644 --- a/hw/riscv/spike.c +++ b/hw/riscv/spike.c @@ -27,7 +27,7 @@ #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/core/loader.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "target/riscv/cpu.h" #include "hw/riscv/riscv_hart.h" #include "hw/riscv/spike.h" diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index d79add5576..c87c169d38 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -25,7 +25,7 @@ #include "qapi/error.h" #include "hw/core/boards.h" #include "hw/core/loader.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-properties.h" #include "hw/char/serial-mm.h" #include "target/riscv/cpu.h" diff --git a/hw/rtc/allwinner-rtc.c b/hw/rtc/allwinner-rtc.c index 0ffd38cf78..52006a0e3a 100644 --- a/hw/rtc/allwinner-rtc.c +++ b/hw/rtc/allwinner-rtc.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/rtc/exynos4210_rtc.c b/hw/rtc/exynos4210_rtc.c index a15b5274bd..846839d2d8 100644 --- a/hw/rtc/exynos4210_rtc.c +++ b/hw/rtc/exynos4210_rtc.c @@ -28,7 +28,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/timer.h" #include "qemu/bcd.h" diff --git a/hw/rtc/goldfish_rtc.c b/hw/rtc/goldfish_rtc.c index 79d2a04c72..5354a6b02f 100644 --- a/hw/rtc/goldfish_rtc.c +++ b/hw/rtc/goldfish_rtc.c @@ -24,7 +24,7 @@ #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/bitops.h" #include "qemu/timer.h" #include "system/system.h" diff --git a/hw/rtc/ls7a_rtc.c b/hw/rtc/ls7a_rtc.c index b0c6588e09..158c815505 100644 --- a/hw/rtc/ls7a_rtc.c +++ b/hw/rtc/ls7a_rtc.c @@ -6,7 +6,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/register.h" #include "qemu/timer.h" diff --git a/hw/rtc/m48t59.c b/hw/rtc/m48t59.c index be8efb8c0a..be4196b21c 100644 --- a/hw/rtc/m48t59.c +++ b/hw/rtc/m48t59.c @@ -31,7 +31,7 @@ #include "system/runstate.h" #include "system/rtc.h" #include "system/system.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/bcd.h" #include "qemu/module.h" diff --git a/hw/rtc/pl031.c b/hw/rtc/pl031.c index 847349b407..b56877c3a2 100644 --- a/hw/rtc/pl031.c +++ b/hw/rtc/pl031.c @@ -16,7 +16,7 @@ #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "system/system.h" #include "system/rtc.h" diff --git a/hw/rtc/sun4v-rtc.c b/hw/rtc/sun4v-rtc.c index 29e24ef6be..675b6cd5bd 100644 --- a/hw/rtc/sun4v-rtc.c +++ b/hw/rtc/sun4v-rtc.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/module.h" #include "qemu/timer.h" diff --git a/hw/rtc/xlnx-zynqmp-rtc.c b/hw/rtc/xlnx-zynqmp-rtc.c index 49d48dc678..28ae7a24f9 100644 --- a/hw/rtc/xlnx-zynqmp-rtc.c +++ b/hw/rtc/xlnx-zynqmp-rtc.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "qemu/bitops.h" #include "qemu/log.h" diff --git a/hw/rx/rx62n.c b/hw/rx/rx62n.c index e1fa3d5661..3d137a517b 100644 --- a/hw/rx/rx62n.c +++ b/hw/rx/rx62n.c @@ -26,7 +26,7 @@ #include "qemu/units.h" #include "hw/rx/rx62n.h" #include "hw/core/loader.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-properties.h" #include "system/system.h" #include "qobject/qlist.h" diff --git a/hw/s390x/ap-bridge.c b/hw/s390x/ap-bridge.c index edeb3dbef3..5cdbf09807 100644 --- a/hw/s390x/ap-bridge.c +++ b/hw/s390x/ap-bridge.c @@ -10,7 +10,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/bitops.h" #include "qemu/module.h" #include "hw/s390x/ap-bridge.h" diff --git a/hw/s390x/css-bridge.c b/hw/s390x/css-bridge.c index 887794beef..440fefb7d0 100644 --- a/hw/s390x/css-bridge.c +++ b/hw/s390x/css-bridge.c @@ -14,7 +14,7 @@ #include "qapi/error.h" #include "hw/core/hotplug.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/bitops.h" #include "qemu/module.h" #include "hw/s390x/css.h" diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 9da6119be2..933271431b 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/scsi/esp.h" diff --git a/hw/scsi/lasi_ncr710.c b/hw/scsi/lasi_ncr710.c index 7e0076c7a3..4fde2265b5 100644 --- a/hw/scsi/lasi_ncr710.c +++ b/hw/scsi/lasi_ncr710.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "hw/scsi/lasi_ncr710.h" #include "hw/scsi/ncr53c710.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qemu/log.h" #include "trace.h" diff --git a/hw/scsi/lasi_ncr710.h b/hw/scsi/lasi_ncr710.h index 058718068e..99be001fc3 100644 --- a/hw/scsi/lasi_ncr710.h +++ b/hw/scsi/lasi_ncr710.h @@ -14,7 +14,7 @@ #ifndef HW_LASI_NCR710_H #define HW_LASI_NCR710_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/osdep.h" #include "exec/memattrs.h" #include "hw/scsi/scsi.h" diff --git a/hw/scsi/ncr53c710.c b/hw/scsi/ncr53c710.c index 9931fd4dc7..0f8914d353 100644 --- a/hw/scsi/ncr53c710.c +++ b/hw/scsi/ncr53c710.c @@ -29,7 +29,7 @@ #include "qapi/error.h" #include "qemu/timer.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/scsi/scsi.h" #include "hw/scsi/ncr53c710.h" #include "migration/vmstate.h" diff --git a/hw/scsi/ncr53c710.h b/hw/scsi/ncr53c710.h index 9ae64a182d..a8dc92f4ef 100644 --- a/hw/scsi/ncr53c710.h +++ b/hw/scsi/ncr53c710.h @@ -16,7 +16,7 @@ #define HW_NCR53C710_H #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/scsi/scsi.h" #include "qemu/fifo8.h" #include "qom/object.h" diff --git a/hw/sd/omap_mmc.c b/hw/sd/omap_mmc.c index 267b723e3c..020429aa4f 100644 --- a/hw/sd/omap_mmc.c +++ b/hw/sd/omap_mmc.c @@ -23,7 +23,7 @@ #include "qemu/log.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/omap.h" #include "hw/sd/sd.h" diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index 761b262d7b..08c34fea31 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -9,7 +9,7 @@ #include "qemu/osdep.h" #include "system/blockdev.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/sd/sd.h" diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c index 35db5cbbcd..acb3fe75a8 100644 --- a/hw/sh4/r2d.c +++ b/hw/sh4/r2d.c @@ -28,7 +28,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "cpu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/sh4/sh.h" #include "system/reset.h" #include "system/runstate.h" diff --git a/hw/sh4/sh7750.c b/hw/sh4/sh7750.c index a0aa89ad31..3ae71f99fe 100644 --- a/hw/sh4/sh7750.c +++ b/hw/sh4/sh7750.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/sh4/sh.h" #include "system/system.h" diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 2e3952c917..8ad4eb46bb 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -28,7 +28,7 @@ #include "qemu/datadir.h" #include "cpu.h" #include "exec/target_page.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/error-report.h" #include "qemu/timer.h" #include "hw/sparc/sun4m_iommu.h" diff --git a/hw/sparc/sun4m_iommu.c b/hw/sparc/sun4m_iommu.c index 10c4786dad..ab5eb67072 100644 --- a/hw/sparc/sun4m_iommu.c +++ b/hw/sparc/sun4m_iommu.c @@ -26,7 +26,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/sparc/sun4m_iommu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "system/address-spaces.h" diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 14b47c037b..d3ce32b6b0 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -51,7 +51,7 @@ #include "hw/nvram/chrp_nvram.h" #include "hw/sparc/sparc64.h" #include "hw/nvram/fw_cfg.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ide/pci.h" #include "hw/core/loader.h" #include "hw/core/fw-path-provider.h" diff --git a/hw/sparc64/sun4u_iommu.c b/hw/sparc64/sun4u_iommu.c index 14645f475a..0188ce35d2 100644 --- a/hw/sparc64/sun4u_iommu.c +++ b/hw/sparc64/sun4u_iommu.c @@ -25,7 +25,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/sparc/sun4u_iommu.h" #include "system/address-spaces.h" #include "qemu/log.h" diff --git a/hw/ssi/aspeed_smc.c b/hw/ssi/aspeed_smc.c index 6bef856c62..b9d5ecba29 100644 --- a/hw/ssi/aspeed_smc.c +++ b/hw/ssi/aspeed_smc.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/block/flash.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/ssi/pl022.c b/hw/ssi/pl022.c index 1851118d55..715a2d21f4 100644 --- a/hw/ssi/pl022.c +++ b/hw/ssi/pl022.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/ssi/pl022.h" diff --git a/hw/ssi/sifive_spi.c b/hw/ssi/sifive_spi.c index 577cd5d2d8..2ece78053b 100644 --- a/hw/ssi/sifive_spi.c +++ b/hw/ssi/sifive_spi.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ssi/ssi.h" #include "qemu/fifo8.h" #include "qemu/log.h" diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c index cf406d0824..79f3e8bfae 100644 --- a/hw/ssi/xilinx_spi.c +++ b/hw/ssi/xilinx_spi.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "qemu/fifo8.h" diff --git a/hw/ssi/xilinx_spips.c b/hw/ssi/xilinx_spips.c index a56a5e304d..a4718fb72d 100644 --- a/hw/ssi/xilinx_spips.c +++ b/hw/ssi/xilinx_spips.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" #include "hw/core/qdev-properties.h" diff --git a/hw/ssi/xlnx-versal-ospi.c b/hw/ssi/xlnx-versal-ospi.c index 93cdc9d399..467f0ce703 100644 --- a/hw/ssi/xlnx-versal-ospi.c +++ b/hw/ssi/xlnx-versal-ospi.c @@ -23,7 +23,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" #include "qemu/bitops.h" diff --git a/hw/timer/allwinner-a10-pit.c b/hw/timer/allwinner-a10-pit.c index d52669787e..bb995313ae 100644 --- a/hw/timer/allwinner-a10-pit.c +++ b/hw/timer/allwinner-a10-pit.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/timer/allwinner-a10-pit.h" #include "migration/vmstate.h" #include "qemu/log.h" diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c index c38e56f5b8..fb70333c53 100644 --- a/hw/timer/arm_timer.c +++ b/hw/timer/arm_timer.c @@ -8,7 +8,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/timer.h" #include "hw/core/irq.h" diff --git a/hw/timer/armv7m_systick.c b/hw/timer/armv7m_systick.c index baba0817b8..65cfaf4914 100644 --- a/hw/timer/armv7m_systick.c +++ b/hw/timer/armv7m_systick.c @@ -13,7 +13,7 @@ #include "hw/timer/armv7m_systick.h" #include "migration/vmstate.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-clock.h" #include "qemu/timer.h" #include "qemu/log.h" diff --git a/hw/timer/aspeed_timer.c b/hw/timer/aspeed_timer.c index 20adb7decb..1e954f7aec 100644 --- a/hw/timer/aspeed_timer.c +++ b/hw/timer/aspeed_timer.c @@ -12,7 +12,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/timer/aspeed_timer.h" #include "migration/vmstate.h" #include "qemu/bitops.h" diff --git a/hw/timer/cadence_ttc.c b/hw/timer/cadence_ttc.c index 6f02c6a02d..3d53921cfa 100644 --- a/hw/timer/cadence_ttc.c +++ b/hw/timer/cadence_ttc.c @@ -18,7 +18,7 @@ #include "qemu/osdep.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "qemu/timer.h" diff --git a/hw/timer/cmsdk-apb-dualtimer.c b/hw/timer/cmsdk-apb-dualtimer.c index 39b1fa3a14..0f57f01aad 100644 --- a/hw/timer/cmsdk-apb-dualtimer.c +++ b/hw/timer/cmsdk-apb-dualtimer.c @@ -21,7 +21,7 @@ #include "trace.h" #include "qapi/error.h" #include "qemu/module.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/registerfields.h" diff --git a/hw/timer/cmsdk-apb-timer.c b/hw/timer/cmsdk-apb-timer.c index e8b6601097..4717cec046 100644 --- a/hw/timer/cmsdk-apb-timer.c +++ b/hw/timer/cmsdk-apb-timer.c @@ -32,7 +32,7 @@ #include "qemu/module.h" #include "qapi/error.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/registerfields.h" #include "hw/core/qdev-clock.h" diff --git a/hw/timer/digic-timer.c b/hw/timer/digic-timer.c index 12b79914df..352132bf21 100644 --- a/hw/timer/digic-timer.c +++ b/hw/timer/digic-timer.c @@ -27,7 +27,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/ptimer.h" #include "qemu/module.h" #include "qemu/log.h" diff --git a/hw/timer/exynos4210_mct.c b/hw/timer/exynos4210_mct.c index f6527a451b..0424539c78 100644 --- a/hw/timer/exynos4210_mct.c +++ b/hw/timer/exynos4210_mct.c @@ -54,7 +54,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/timer.h" #include "qemu/module.h" diff --git a/hw/timer/exynos4210_pwm.c b/hw/timer/exynos4210_pwm.c index 1643fa3941..64eb4f5c8d 100644 --- a/hw/timer/exynos4210_pwm.c +++ b/hw/timer/exynos4210_pwm.c @@ -22,7 +22,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/timer.h" #include "qemu/module.h" diff --git a/hw/timer/grlib_gptimer.c b/hw/timer/grlib_gptimer.c index dbce6f736f..099ab6c586 100644 --- a/hw/timer/grlib_gptimer.c +++ b/hw/timer/grlib_gptimer.c @@ -26,7 +26,7 @@ #include "qemu/osdep.h" #include "hw/timer/grlib_gptimer.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c index 82006df0e3..070b40e7f6 100644 --- a/hw/timer/hpet.c +++ b/hw/timer/hpet.c @@ -31,7 +31,7 @@ #include "qemu/timer.h" #include "hw/core/qdev-properties.h" #include "hw/timer/hpet.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/rtc/mc146818rtc.h" #include "hw/rtc/mc146818rtc_regs.h" #include "migration/vmstate.h" diff --git a/hw/timer/pxa2xx_timer.c b/hw/timer/pxa2xx_timer.c index b875c05052..b4f501e57f 100644 --- a/hw/timer/pxa2xx_timer.c +++ b/hw/timer/pxa2xx_timer.c @@ -12,7 +12,7 @@ #include "hw/core/qdev-properties.h" #include "qemu/timer.h" #include "system/runstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "qemu/log.h" #include "qemu/module.h" diff --git a/hw/timer/slavio_timer.c b/hw/timer/slavio_timer.c index 07359a6fe7..71696a4b61 100644 --- a/hw/timer/slavio_timer.c +++ b/hw/timer/slavio_timer.c @@ -27,7 +27,7 @@ #include "hw/core/irq.h" #include "hw/core/ptimer.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "trace.h" #include "qemu/module.h" diff --git a/hw/timer/sse-counter.c b/hw/timer/sse-counter.c index 39d140347e..bec3333b0d 100644 --- a/hw/timer/sse-counter.c +++ b/hw/timer/sse-counter.c @@ -32,7 +32,7 @@ #include "qapi/error.h" #include "trace.h" #include "hw/timer/sse-counter.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/registerfields.h" #include "hw/core/clock.h" #include "hw/core/qdev-clock.h" diff --git a/hw/timer/sse-timer.c b/hw/timer/sse-timer.c index 62381e07e0..ea60711892 100644 --- a/hw/timer/sse-timer.c +++ b/hw/timer/sse-timer.c @@ -40,7 +40,7 @@ #include "trace.h" #include "hw/timer/sse-timer.h" #include "hw/timer/sse-counter.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/registerfields.h" #include "hw/core/clock.h" diff --git a/hw/timer/xilinx_timer.c b/hw/timer/xilinx_timer.c index 9c2969a2c4..8a502dae0e 100644 --- a/hw/timer/xilinx_timer.c +++ b/hw/timer/xilinx_timer.c @@ -27,7 +27,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" #include "hw/core/qdev-properties.h" diff --git a/hw/tpm/tpm_tis_i2c.c b/hw/tpm/tpm_tis_i2c.c index 5ce84dc7a4..9f13e0ec12 100644 --- a/hw/tpm/tpm_tis_i2c.c +++ b/hw/tpm/tpm_tis_i2c.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "hw/i2c/i2c.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/acpi/tpm.h" #include "migration/vmstate.h" #include "tpm_prop.h" diff --git a/hw/tpm/tpm_tis_sysbus.c b/hw/tpm/tpm_tis_sysbus.c index 07c3040130..e9372e7316 100644 --- a/hw/tpm/tpm_tis_sysbus.c +++ b/hw/tpm/tpm_tis_sysbus.c @@ -27,7 +27,7 @@ #include "migration/vmstate.h" #include "hw/acpi/tpm.h" #include "tpm_prop.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "tpm_tis.h" #include "qom/object.h" diff --git a/hw/tricore/tc27x_soc.c b/hw/tricore/tc27x_soc.c index e1a97a4387..5b1b07cee1 100644 --- a/hw/tricore/tc27x_soc.c +++ b/hw/tricore/tc27x_soc.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/loader.h" #include "qemu/units.h" #include "hw/misc/unimp.h" diff --git a/hw/tricore/tricore_testdevice.c b/hw/tricore/tricore_testdevice.c index d3ffc5fe9f..2eb16731e9 100644 --- a/hw/tricore/tricore_testdevice.c +++ b/hw/tricore/tricore_testdevice.c @@ -17,7 +17,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-properties.h" #include "hw/tricore/tricore_testdevice.h" diff --git a/hw/uefi/var-service-sysbus.c b/hw/uefi/var-service-sysbus.c index 3bf9335650..75b0790518 100644 --- a/hw/uefi/var-service-sysbus.c +++ b/hw/uefi/var-service-sysbus.c @@ -7,7 +7,7 @@ #include "migration/vmstate.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/uefi/hardware-info.h" #include "hw/uefi/var-service.h" diff --git a/hw/usb/hcd-dwc2.h b/hw/usb/hcd-dwc2.h index a99409a654..68877661ca 100644 --- a/hw/usb/hcd-dwc2.h +++ b/hw/usb/hcd-dwc2.h @@ -21,7 +21,7 @@ #include "qemu/timer.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/usb/usb.h" #include "system/dma.h" #include "qom/object.h" diff --git a/hw/usb/hcd-dwc3.c b/hw/usb/hcd-dwc3.c index 4018d70f02..785732fc97 100644 --- a/hw/usb/hcd-dwc3.c +++ b/hw/usb/hcd-dwc3.c @@ -28,7 +28,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "qemu/bitops.h" #include "qom/object.h" diff --git a/hw/usb/hcd-ehci.h b/hw/usb/hcd-ehci.h index c16717294d..0ae8c06331 100644 --- a/hw/usb/hcd-ehci.h +++ b/hw/usb/hcd-ehci.h @@ -22,7 +22,7 @@ #include "hw/usb/usb.h" #include "system/dma.h" #include "hw/pci/pci_device.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #ifndef EHCI_DEBUG #define EHCI_DEBUG 0 diff --git a/hw/usb/hcd-ohci-pci.c b/hw/usb/hcd-ohci-pci.c index bdbbaaa87a..18b58f5fcb 100644 --- a/hw/usb/hcd-ohci-pci.c +++ b/hw/usb/hcd-ohci-pci.c @@ -24,7 +24,7 @@ #include "hw/usb/usb.h" #include "migration/vmstate.h" #include "hw/pci/pci_device.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-dma.h" #include "hw/core/qdev-properties.h" #include "trace.h" diff --git a/hw/usb/hcd-ohci-sysbus.c b/hw/usb/hcd-ohci-sysbus.c index 350b011899..1a2cf29bed 100644 --- a/hw/usb/hcd-ohci-sysbus.c +++ b/hw/usb/hcd-ohci-sysbus.c @@ -25,7 +25,7 @@ #include "qemu/timer.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-dma.h" #include "hw/core/qdev-properties.h" #include "trace.h" diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c index c771aafdd0..c7e9c71903 100644 --- a/hw/usb/hcd-ohci.c +++ b/hw/usb/hcd-ohci.c @@ -32,7 +32,7 @@ #include "qemu/timer.h" #include "hw/usb/usb.h" #include "migration/vmstate.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-dma.h" #include "hw/core/qdev-properties.h" #include "trace.h" diff --git a/hw/usb/hcd-ohci.h b/hw/usb/hcd-ohci.h index 75e266de90..243cd1f46a 100644 --- a/hw/usb/hcd-ohci.h +++ b/hw/usb/hcd-ohci.h @@ -21,7 +21,7 @@ #ifndef HCD_OHCI_H #define HCD_OHCI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/dma.h" #include "hw/usb/usb.h" #include "qom/object.h" diff --git a/hw/usb/hcd-xhci-sysbus.h b/hw/usb/hcd-xhci-sysbus.h index f8175470ba..0ce6b6d989 100644 --- a/hw/usb/hcd-xhci-sysbus.h +++ b/hw/usb/hcd-xhci-sysbus.h @@ -13,7 +13,7 @@ #include "hw/usb/usb.h" #include "hcd-xhci.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define XHCI_SYSBUS(obj) \ OBJECT_CHECK(XHCISysbusState, (obj), TYPE_XHCI_SYSBUS) diff --git a/hw/usb/xlnx-usb-subsystem.c b/hw/usb/xlnx-usb-subsystem.c index e0dfdfdcbd..9bf040c917 100644 --- a/hw/usb/xlnx-usb-subsystem.c +++ b/hw/usb/xlnx-usb-subsystem.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "qemu/bitops.h" #include "qom/object.h" diff --git a/hw/usb/xlnx-versal-usb2-ctrl-regs.c b/hw/usb/xlnx-versal-usb2-ctrl-regs.c index 33a7d7fbca..15ea438448 100644 --- a/hw/usb/xlnx-versal-usb2-ctrl-regs.c +++ b/hw/usb/xlnx-versal-usb2-ctrl-regs.c @@ -28,7 +28,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/register.h" #include "qemu/bitops.h" diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c index 54bd0c57b5..0b0412b22f 100644 --- a/hw/virtio/virtio-mmio.c +++ b/hw/virtio/virtio-mmio.c @@ -23,7 +23,7 @@ #include "standard-headers/linux/virtio_mmio.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/virtio/virtio.h" #include "migration/qemu-file-types.h" #include "qemu/host-utils.h" diff --git a/hw/vmapple/aes.c b/hw/vmapple/aes.c index a6e94610b8..553e688adb 100644 --- a/hw/vmapple/aes.c +++ b/hw/vmapple/aes.c @@ -15,7 +15,7 @@ #include "crypto/aes.h" #include "crypto/cipher.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/vmapple/vmapple.h" #include "migration/vmstate.h" #include "qemu/cutils.h" diff --git a/hw/vmapple/bdif.c b/hw/vmapple/bdif.c index 5ccd374581..4dc10c151d 100644 --- a/hw/vmapple/bdif.c +++ b/hw/vmapple/bdif.c @@ -15,7 +15,7 @@ #include "qemu/module.h" #include "trace.h" #include "hw/vmapple/vmapple.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/block/block.h" #include "qapi/error.h" #include "system/block-backend.h" diff --git a/hw/vmapple/cfg.c b/hw/vmapple/cfg.c index 3d58a29f69..2a3204f0ec 100644 --- a/hw/vmapple/cfg.c +++ b/hw/vmapple/cfg.c @@ -11,7 +11,7 @@ #include "qemu/osdep.h" #include "hw/vmapple/vmapple.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/log.h" #include "qemu/module.h" #include "qapi/error.h" diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c index 2ebd0f07bd..b1379eafef 100644 --- a/hw/vmapple/vmapple.c +++ b/hw/vmapple/vmapple.c @@ -29,7 +29,7 @@ #include "hw/core/irq.h" #include "hw/core/loader.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/usb/usb.h" #include "hw/arm/boot.h" #include "hw/arm/primecell.h" diff --git a/hw/watchdog/allwinner-wdt.c b/hw/watchdog/allwinner-wdt.c index 68b600689a..156f823534 100644 --- a/hw/watchdog/allwinner-wdt.c +++ b/hw/watchdog/allwinner-wdt.c @@ -25,7 +25,7 @@ #include "qemu/units.h" #include "qemu/module.h" #include "trace.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/registerfields.h" #include "hw/watchdog/allwinner-wdt.h" #include "system/watchdog.h" diff --git a/hw/watchdog/cmsdk-apb-watchdog.c b/hw/watchdog/cmsdk-apb-watchdog.c index ceae792580..c474166cfc 100644 --- a/hw/watchdog/cmsdk-apb-watchdog.c +++ b/hw/watchdog/cmsdk-apb-watchdog.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "qemu/module.h" #include "system/watchdog.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/registerfields.h" diff --git a/hw/watchdog/wdt_aspeed.c b/hw/watchdog/wdt_aspeed.c index 930834bfca..26506f3c33 100644 --- a/hw/watchdog/wdt_aspeed.c +++ b/hw/watchdog/wdt_aspeed.c @@ -15,7 +15,7 @@ #include "qemu/timer.h" #include "system/watchdog.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/watchdog/wdt_aspeed.h" #include "migration/vmstate.h" #include "trace.h" diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c index e3c51030f3..dfad2bc508 100644 --- a/hw/xen/xen-bus.c +++ b/hw/xen/xen-bus.c @@ -10,7 +10,7 @@ #include "qemu/module.h" #include "qemu/uuid.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/xen/xen.h" #include "hw/xen/xen-backend.h" #include "hw/xen/xen-legacy-backend.h" /* xen_be_init() */ diff --git a/hw/xen/xen-legacy-backend.c b/hw/xen/xen-legacy-backend.c index f9b0dd1513..7977b52712 100644 --- a/hw/xen/xen-legacy-backend.c +++ b/hw/xen/xen-legacy-backend.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/boards.h" #include "hw/core/qdev-properties.h" #include "qemu/main-loop.h" diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c index a533f2bac3..5e6f897429 100644 --- a/hw/xtensa/xtfpga.c +++ b/hw/xtensa/xtfpga.c @@ -38,7 +38,7 @@ #include "exec/tswap.h" #include "hw/char/serial-mm.h" #include "net/net.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/block/flash.h" #include "chardev/char.h" #include "system/device_tree.h" diff --git a/include/hw/acpi/generic_event_device.h b/include/hw/acpi/generic_event_device.h index 130c014d3f..7cbfb5fe7d 100644 --- a/include/hw/acpi/generic_event_device.h +++ b/include/hw/acpi/generic_event_device.h @@ -59,7 +59,7 @@ #ifndef HW_ACPI_GENERIC_EVENT_DEVICE_H #define HW_ACPI_GENERIC_EVENT_DEVICE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/acpi/memory_hotplug.h" #include "hw/acpi/ghes.h" #include "hw/acpi/cpu.h" diff --git a/include/hw/adc/aspeed_adc.h b/include/hw/adc/aspeed_adc.h index f502f197ac..75c00b0325 100644 --- a/include/hw/adc/aspeed_adc.h +++ b/include/hw/adc/aspeed_adc.h @@ -11,7 +11,7 @@ #ifndef HW_ADC_ASPEED_ADC_H #define HW_ADC_ASPEED_ADC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_ASPEED_ADC "aspeed.adc" #define TYPE_ASPEED_2400_ADC TYPE_ASPEED_ADC "-ast2400" diff --git a/include/hw/adc/npcm7xx_adc.h b/include/hw/adc/npcm7xx_adc.h index 02dc1902fc..867e4c767c 100644 --- a/include/hw/adc/npcm7xx_adc.h +++ b/include/hw/adc/npcm7xx_adc.h @@ -18,7 +18,7 @@ #include "hw/core/clock.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #define NPCM7XX_ADC_NUM_INPUTS 8 diff --git a/include/hw/adc/stm32f2xx_adc.h b/include/hw/adc/stm32f2xx_adc.h index 42b48981f2..2af21f1852 100644 --- a/include/hw/adc/stm32f2xx_adc.h +++ b/include/hw/adc/stm32f2xx_adc.h @@ -25,7 +25,7 @@ #ifndef HW_STM32F2XX_ADC_H #define HW_STM32F2XX_ADC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define ADC_SR 0x00 diff --git a/include/hw/adc/zynq-xadc.h b/include/hw/adc/zynq-xadc.h index c10cc4c379..9b4943681b 100644 --- a/include/hw/adc/zynq-xadc.h +++ b/include/hw/adc/zynq-xadc.h @@ -15,7 +15,7 @@ #ifndef ZYNQ_XADC_H #define ZYNQ_XADC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define ZYNQ_XADC_MMIO_SIZE 0x0020 diff --git a/include/hw/arm/armsse.h b/include/hw/arm/armsse.h index 414e553600..bdf2d4db8e 100644 --- a/include/hw/arm/armsse.h +++ b/include/hw/arm/armsse.h @@ -93,7 +93,7 @@ #ifndef ARMSSE_H #define ARMSSE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/armv7m.h" #include "hw/misc/iotkit-secctl.h" #include "hw/misc/tz-ppc.h" diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h index e31888cc8c..98ad08db03 100644 --- a/include/hw/arm/armv7m.h +++ b/include/hw/arm/armv7m.h @@ -10,7 +10,7 @@ #ifndef HW_ARM_ARMV7M_H #define HW_ARM_ARMV7M_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/armv7m_nvic.h" #include "hw/misc/armv7m_ras.h" #include "target/arm/idau.h" diff --git a/include/hw/arm/bcm2835_peripherals.h b/include/hw/arm/bcm2835_peripherals.h index d46d892956..bf35bb18e5 100644 --- a/include/hw/arm/bcm2835_peripherals.h +++ b/include/hw/arm/bcm2835_peripherals.h @@ -12,7 +12,7 @@ #ifndef BCM2835_PERIPHERALS_H #define BCM2835_PERIPHERALS_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/char/pl011.h" #include "hw/char/bcm2835_aux.h" #include "hw/display/bcm2835_fb.h" diff --git a/include/hw/arm/exynos4210.h b/include/hw/arm/exynos4210.h index fbe4370219..b29e7243c7 100644 --- a/include/hw/arm/exynos4210.h +++ b/include/hw/arm/exynos4210.h @@ -25,7 +25,7 @@ #define EXYNOS4210_H #include "hw/core/or-irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/cpu/a9mpcore.h" #include "hw/intc/exynos4210_gic.h" #include "hw/intc/exynos4210_combiner.h" diff --git a/include/hw/arm/fsl-imx8mp.h b/include/hw/arm/fsl-imx8mp.h index 1275df22f1..4b367b754c 100644 --- a/include/hw/arm/fsl-imx8mp.h +++ b/include/hw/arm/fsl-imx8mp.h @@ -26,7 +26,7 @@ #include "hw/timer/imx_gpt.h" #include "hw/usb/hcd-dwc3.h" #include "hw/watchdog/wdt_imx2.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "qemu/units.h" diff --git a/include/hw/arm/nrf51_soc.h b/include/hw/arm/nrf51_soc.h index 94d7fc62ac..f759d007a1 100644 --- a/include/hw/arm/nrf51_soc.h +++ b/include/hw/arm/nrf51_soc.h @@ -10,7 +10,7 @@ #ifndef NRF51_SOC_H #define NRF51_SOC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/armv7m.h" #include "hw/char/nrf51_uart.h" #include "hw/misc/nrf51_rng.h" diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h index 80d0fecfde..48368c8e89 100644 --- a/include/hw/arm/smmu-common.h +++ b/include/hw/arm/smmu-common.h @@ -19,7 +19,7 @@ #ifndef HW_ARM_SMMU_COMMON_H #define HW_ARM_SMMU_COMMON_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci.h" #include "qom/object.h" diff --git a/include/hw/arm/xlnx-versal.h b/include/hw/arm/xlnx-versal.h index e1fb1f4cf5..4c4599add1 100644 --- a/include/hw/arm/xlnx-versal.h +++ b/include/hw/arm/xlnx-versal.h @@ -13,7 +13,7 @@ #ifndef XLNX_VERSAL_H #define XLNX_VERSAL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "net/can_emu.h" #include "hw/arm/xlnx-versal-version.h" diff --git a/include/hw/audio/asc.h b/include/hw/audio/asc.h index bb51e9a3d1..f4aefbfe5a 100644 --- a/include/hw/audio/asc.h +++ b/include/hw/audio/asc.h @@ -13,7 +13,7 @@ #ifndef HW_AUDIO_ASC_H #define HW_AUDIO_ASC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/audio.h" #define ASC_FREQ 22257 diff --git a/include/hw/block/swim.h b/include/hw/block/swim.h index 5f567e8d59..e8998f57c4 100644 --- a/include/hw/block/swim.h +++ b/include/hw/block/swim.h @@ -12,7 +12,7 @@ #define SWIM_H #include "hw/block/block.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define SWIM_MAX_FD 2 diff --git a/include/hw/char/avr_usart.h b/include/hw/char/avr_usart.h index bd2d488f9a..8af7a5d1ee 100644 --- a/include/hw/char/avr_usart.h +++ b/include/hw/char/avr_usart.h @@ -22,7 +22,7 @@ #ifndef HW_CHAR_AVR_USART_H #define HW_CHAR_AVR_USART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/include/hw/char/bcm2835_aux.h b/include/hw/char/bcm2835_aux.h index a11134f216..c5ce148bbc 100644 --- a/include/hw/char/bcm2835_aux.h +++ b/include/hw/char/bcm2835_aux.h @@ -9,7 +9,7 @@ #ifndef BCM2835_AUX_H #define BCM2835_AUX_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h index ad09fbdf32..751a751248 100644 --- a/include/hw/char/cadence_uart.h +++ b/include/hw/char/cadence_uart.h @@ -20,7 +20,7 @@ #define CADENCE_UART_H #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qapi/error.h" #include "qemu/timer.h" diff --git a/include/hw/char/cmsdk-apb-uart.h b/include/hw/char/cmsdk-apb-uart.h index 3d0af26ceb..0c62b7f2f5 100644 --- a/include/hw/char/cmsdk-apb-uart.h +++ b/include/hw/char/cmsdk-apb-uart.h @@ -12,7 +12,7 @@ #ifndef CMSDK_APB_UART_H #define CMSDK_APB_UART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/include/hw/char/digic-uart.h b/include/hw/char/digic-uart.h index 3eebdab8a0..6f67b70dfd 100644 --- a/include/hw/char/digic-uart.h +++ b/include/hw/char/digic-uart.h @@ -18,7 +18,7 @@ #ifndef HW_CHAR_DIGIC_UART_H #define HW_CHAR_DIGIC_UART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/include/hw/char/escc.h b/include/hw/char/escc.h index 857f64699e..9e60175b77 100644 --- a/include/hw/char/escc.h +++ b/include/hw/char/escc.h @@ -3,7 +3,7 @@ #include "chardev/char-fe.h" #include "chardev/char-serial.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "ui/input.h" #include "qom/object.h" diff --git a/include/hw/char/goldfish_tty.h b/include/hw/char/goldfish_tty.h index 70fdedd1d0..a696362fa5 100644 --- a/include/hw/char/goldfish_tty.h +++ b/include/hw/char/goldfish_tty.h @@ -12,7 +12,7 @@ #include "qemu/fifo8.h" #include "chardev/char-fe.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_GOLDFISH_TTY "goldfish_tty" OBJECT_DECLARE_SIMPLE_TYPE(GoldfishTTYState, GOLDFISH_TTY) diff --git a/include/hw/char/ibex_uart.h b/include/hw/char/ibex_uart.h index 1ccbb602e6..882796e0c6 100644 --- a/include/hw/char/ibex_uart.h +++ b/include/hw/char/ibex_uart.h @@ -25,7 +25,7 @@ #ifndef HW_IBEX_UART_H #define HW_IBEX_UART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qemu/timer.h" #include "qom/object.h" diff --git a/include/hw/char/imx_serial.h b/include/hw/char/imx_serial.h index 2dcd2e6bcd..855792b605 100644 --- a/include/hw/char/imx_serial.h +++ b/include/hw/char/imx_serial.h @@ -18,7 +18,7 @@ #ifndef IMX_SERIAL_H #define IMX_SERIAL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" #include "qemu/fifo32.h" diff --git a/include/hw/char/max78000_uart.h b/include/hw/char/max78000_uart.h index ac93f83389..6977c7b3f1 100644 --- a/include/hw/char/max78000_uart.h +++ b/include/hw/char/max78000_uart.h @@ -9,7 +9,7 @@ #ifndef HW_MAX78000_UART_H #define HW_MAX78000_UART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qemu/fifo8.h" #include "qom/object.h" diff --git a/include/hw/char/mchp_pfsoc_mmuart.h b/include/hw/char/mchp_pfsoc_mmuart.h index a7b8b1b08b..1e27732df1 100644 --- a/include/hw/char/mchp_pfsoc_mmuart.h +++ b/include/hw/char/mchp_pfsoc_mmuart.h @@ -28,7 +28,7 @@ #ifndef HW_MCHP_PFSOC_MMUART_H #define HW_MCHP_PFSOC_MMUART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/char/serial-mm.h" #define MCHP_PFSOC_MMUART_REG_COUNT 13 diff --git a/include/hw/char/nrf51_uart.h b/include/hw/char/nrf51_uart.h index 7a54db746b..36a6c54cde 100644 --- a/include/hw/char/nrf51_uart.h +++ b/include/hw/char/nrf51_uart.h @@ -11,7 +11,7 @@ #ifndef NRF51_UART_H #define NRF51_UART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "hw/core/registerfields.h" #include "qom/object.h" diff --git a/include/hw/char/pl011.h b/include/hw/char/pl011.h index 2d4ff01c81..ff735b5234 100644 --- a/include/hw/char/pl011.h +++ b/include/hw/char/pl011.h @@ -15,7 +15,7 @@ #ifndef HW_PL011_H #define HW_PL011_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/include/hw/char/renesas_sci.h b/include/hw/char/renesas_sci.h index 90e784f36a..372e788be4 100644 --- a/include/hw/char/renesas_sci.h +++ b/include/hw/char/renesas_sci.h @@ -10,7 +10,7 @@ #define HW_CHAR_RENESAS_SCI_H #include "chardev/char-fe.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_RENESAS_SCI "renesas-sci" diff --git a/include/hw/char/serial-mm.h b/include/hw/char/serial-mm.h index 77abd098e0..0076bdc061 100644 --- a/include/hw/char/serial-mm.h +++ b/include/hw/char/serial-mm.h @@ -29,7 +29,7 @@ #include "hw/char/serial.h" #include "system/memory.h" #include "chardev/char.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_SERIAL_MM "serial-mm" diff --git a/include/hw/char/shakti_uart.h b/include/hw/char/shakti_uart.h index e5e775d7c9..e77553f2b5 100644 --- a/include/hw/char/shakti_uart.h +++ b/include/hw/char/shakti_uart.h @@ -25,7 +25,7 @@ #ifndef HW_SHAKTI_UART_H #define HW_SHAKTI_UART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #define SHAKTI_UART_BAUD 0x00 diff --git a/include/hw/char/sifive_uart.h b/include/hw/char/sifive_uart.h index dea6055f87..414564b026 100644 --- a/include/hw/char/sifive_uart.h +++ b/include/hw/char/sifive_uart.h @@ -22,7 +22,7 @@ #include "chardev/char-fe.h" #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "qemu/fifo8.h" diff --git a/include/hw/char/stm32f2xx_usart.h b/include/hw/char/stm32f2xx_usart.h index f9018b8b8f..5bb5bb28c1 100644 --- a/include/hw/char/stm32f2xx_usart.h +++ b/include/hw/char/stm32f2xx_usart.h @@ -25,7 +25,7 @@ #ifndef HW_STM32F2XX_USART_H #define HW_STM32F2XX_USART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/include/hw/char/stm32l4x5_usart.h b/include/hw/char/stm32l4x5_usart.h index cdf7419f53..3bb59fd654 100644 --- a/include/hw/char/stm32l4x5_usart.h +++ b/include/hw/char/stm32l4x5_usart.h @@ -18,7 +18,7 @@ #ifndef HW_STM32L4X5_USART_H #define HW_STM32L4X5_USART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" diff --git a/include/hw/core/or-irq.h b/include/hw/core/or-irq.h index c0a42f3711..1123cc518f 100644 --- a/include/hw/core/or-irq.h +++ b/include/hw/core/or-irq.h @@ -25,7 +25,7 @@ #ifndef HW_OR_IRQ_H #define HW_OR_IRQ_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_OR_IRQ "or-irq" diff --git a/include/hw/core/platform-bus.h b/include/hw/core/platform-bus.h index 44f30c5353..45b9d8dbc7 100644 --- a/include/hw/core/platform-bus.h +++ b/include/hw/core/platform-bus.h @@ -22,7 +22,7 @@ * License along with this library; if not, see . */ -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" diff --git a/include/hw/core/split-irq.h b/include/hw/core/split-irq.h index ff8852f407..19e9830b76 100644 --- a/include/hw/core/split-irq.h +++ b/include/hw/core/split-irq.h @@ -35,7 +35,7 @@ #ifndef HW_SPLIT_IRQ_H #define HW_SPLIT_IRQ_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_SPLIT_IRQ "split-irq" diff --git a/include/hw/sysbus.h b/include/hw/core/sysbus.h similarity index 100% rename from include/hw/sysbus.h rename to include/hw/core/sysbus.h diff --git a/include/hw/cpu/a15mpcore.h b/include/hw/cpu/a15mpcore.h index 75d39e5458..138f491c22 100644 --- a/include/hw/cpu/a15mpcore.h +++ b/include/hw/cpu/a15mpcore.h @@ -20,7 +20,7 @@ #ifndef HW_CPU_A15MPCORE_H #define HW_CPU_A15MPCORE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/arm_gic.h" #include "qom/object.h" diff --git a/include/hw/cpu/a9mpcore.h b/include/hw/cpu/a9mpcore.h index e0396ab6af..6076599024 100644 --- a/include/hw/cpu/a9mpcore.h +++ b/include/hw/cpu/a9mpcore.h @@ -10,7 +10,7 @@ #ifndef HW_CPU_A9MPCORE_H #define HW_CPU_A9MPCORE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/arm_gic.h" #include "hw/misc/a9scu.h" #include "hw/timer/arm_mptimer.h" diff --git a/include/hw/cpu/arm11mpcore.h b/include/hw/cpu/arm11mpcore.h index 2cac8c1232..1a8fbc550a 100644 --- a/include/hw/cpu/arm11mpcore.h +++ b/include/hw/cpu/arm11mpcore.h @@ -10,7 +10,7 @@ #ifndef HW_CPU_ARM11MPCORE_H #define HW_CPU_ARM11MPCORE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/arm11scu.h" #include "hw/intc/arm_gic.h" #include "hw/timer/arm_mptimer.h" diff --git a/include/hw/display/bcm2835_fb.h b/include/hw/display/bcm2835_fb.h index acc9230b6a..f7ef076f1f 100644 --- a/include/hw/display/bcm2835_fb.h +++ b/include/hw/display/bcm2835_fb.h @@ -12,7 +12,7 @@ #ifndef BCM2835_FB_H #define BCM2835_FB_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define UPPER_RAM_BASE 0x40000000 diff --git a/include/hw/display/macfb.h b/include/hw/display/macfb.h index 356a03ce31..495dead44b 100644 --- a/include/hw/display/macfb.h +++ b/include/hw/display/macfb.h @@ -16,7 +16,7 @@ #include "system/memory.h" #include "hw/core/irq.h" #include "hw/nubus/nubus.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "ui/console.h" #include "qemu/timer.h" diff --git a/include/hw/display/xlnx_dp.h b/include/hw/display/xlnx_dp.h index 9ec5a90c34..b01c77fed6 100644 --- a/include/hw/display/xlnx_dp.h +++ b/include/hw/display/xlnx_dp.h @@ -24,7 +24,7 @@ #ifndef XLNX_DP_H #define XLNX_DP_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "ui/console.h" #include "hw/misc/auxbus.h" #include "hw/i2c/i2c.h" diff --git a/include/hw/dma/bcm2835_dma.h b/include/hw/dma/bcm2835_dma.h index 1d26b1d8d0..9c20652d4e 100644 --- a/include/hw/dma/bcm2835_dma.h +++ b/include/hw/dma/bcm2835_dma.h @@ -8,7 +8,7 @@ #ifndef BCM2835_DMA_H #define BCM2835_DMA_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" typedef struct { diff --git a/include/hw/dma/pl080.h b/include/hw/dma/pl080.h index 3c9659e438..6635cd8e93 100644 --- a/include/hw/dma/pl080.h +++ b/include/hw/dma/pl080.h @@ -29,7 +29,7 @@ #ifndef HW_DMA_PL080_H #define HW_DMA_PL080_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define PL080_MAX_CHANNELS 8 diff --git a/include/hw/dma/sifive_pdma.h b/include/hw/dma/sifive_pdma.h index 8c6cfa7f32..34494ec601 100644 --- a/include/hw/dma/sifive_pdma.h +++ b/include/hw/dma/sifive_pdma.h @@ -23,7 +23,7 @@ #ifndef SIFIVE_PDMA_H #define SIFIVE_PDMA_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" struct sifive_pdma_chan { uint32_t control; diff --git a/include/hw/dma/xlnx-zdma.h b/include/hw/dma/xlnx-zdma.h index 2d2d4aeefa..7d254c66e7 100644 --- a/include/hw/dma/xlnx-zdma.h +++ b/include/hw/dma/xlnx-zdma.h @@ -29,7 +29,7 @@ #ifndef XLNX_ZDMA_H #define XLNX_ZDMA_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "system/dma.h" #include "qom/object.h" diff --git a/include/hw/dma/xlnx-zynq-devcfg.h b/include/hw/dma/xlnx-zynq-devcfg.h index 8d10553c22..3e3cc7b98b 100644 --- a/include/hw/dma/xlnx-zynq-devcfg.h +++ b/include/hw/dma/xlnx-zynq-devcfg.h @@ -28,7 +28,7 @@ #define XLNX_ZYNQ_DEVCFG_H #include "hw/core/register.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_XLNX_ZYNQ_DEVCFG "xlnx.ps7-dev-cfg" diff --git a/include/hw/dma/xlnx_csu_dma.h b/include/hw/dma/xlnx_csu_dma.h index 4d6d18fb9b..ceb28f40ba 100644 --- a/include/hw/dma/xlnx_csu_dma.h +++ b/include/hw/dma/xlnx_csu_dma.h @@ -21,7 +21,7 @@ #ifndef XLNX_CSU_DMA_H #define XLNX_CSU_DMA_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/core/ptimer.h" #include "hw/core/stream.h" diff --git a/include/hw/dma/xlnx_dpdma.h b/include/hw/dma/xlnx_dpdma.h index 484b2e377f..7cf67aef6e 100644 --- a/include/hw/dma/xlnx_dpdma.h +++ b/include/hw/dma/xlnx_dpdma.h @@ -25,7 +25,7 @@ #ifndef XLNX_DPDMA_H #define XLNX_DPDMA_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/dma.h" #include "qom/object.h" diff --git a/include/hw/fsi/aspeed_apb2opb.h b/include/hw/fsi/aspeed_apb2opb.h index 878619eafa..e42399185a 100644 --- a/include/hw/fsi/aspeed_apb2opb.h +++ b/include/hw/fsi/aspeed_apb2opb.h @@ -10,7 +10,7 @@ #include "system/memory.h" #include "hw/fsi/fsi-master.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_FSI_OPB "fsi.opb" diff --git a/include/hw/gpio/aspeed_gpio.h b/include/hw/gpio/aspeed_gpio.h index e6b2fe71b5..0ff4539cb2 100644 --- a/include/hw/gpio/aspeed_gpio.h +++ b/include/hw/gpio/aspeed_gpio.h @@ -10,7 +10,7 @@ #ifndef ASPEED_GPIO_H #define ASPEED_GPIO_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ASPEED_GPIO "aspeed.gpio" diff --git a/include/hw/gpio/bcm2835_gpio.h b/include/hw/gpio/bcm2835_gpio.h index 1c53a05090..c1410ccbeb 100644 --- a/include/hw/gpio/bcm2835_gpio.h +++ b/include/hw/gpio/bcm2835_gpio.h @@ -15,7 +15,7 @@ #define BCM2835_GPIO_H #include "hw/sd/sd.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" struct BCM2835GpioState { diff --git a/include/hw/gpio/bcm2838_gpio.h b/include/hw/gpio/bcm2838_gpio.h index f2a57a697f..9324ebcbae 100644 --- a/include/hw/gpio/bcm2838_gpio.h +++ b/include/hw/gpio/bcm2838_gpio.h @@ -15,7 +15,7 @@ #define BCM2838_GPIO_H #include "hw/sd/sd.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_BCM2838_GPIO "bcm2838-gpio" diff --git a/include/hw/gpio/imx_gpio.h b/include/hw/gpio/imx_gpio.h index 227860b9f0..ae2afb3c0f 100644 --- a/include/hw/gpio/imx_gpio.h +++ b/include/hw/gpio/imx_gpio.h @@ -20,7 +20,7 @@ #ifndef IMX_GPIO_H #define IMX_GPIO_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_IMX_GPIO "imx.gpio" diff --git a/include/hw/gpio/npcm7xx_gpio.h b/include/hw/gpio/npcm7xx_gpio.h index 7c0bf61a96..9b2a3f27d3 100644 --- a/include/hw/gpio/npcm7xx_gpio.h +++ b/include/hw/gpio/npcm7xx_gpio.h @@ -16,7 +16,7 @@ #define NPCM7XX_GPIO_H #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* Number of pins managed by each controller. */ #define NPCM7XX_GPIO_NR_PINS (32) diff --git a/include/hw/gpio/nrf51_gpio.h b/include/hw/gpio/nrf51_gpio.h index fcfa2bac17..661e79b921 100644 --- a/include/hw/gpio/nrf51_gpio.h +++ b/include/hw/gpio/nrf51_gpio.h @@ -26,7 +26,7 @@ #ifndef NRF51_GPIO_H #define NRF51_GPIO_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_NRF51_GPIO "nrf51_soc.gpio" OBJECT_DECLARE_SIMPLE_TYPE(NRF51GPIOState, NRF51_GPIO) diff --git a/include/hw/gpio/sifive_gpio.h b/include/hw/gpio/sifive_gpio.h index fc53785c9d..e96cf33df6 100644 --- a/include/hw/gpio/sifive_gpio.h +++ b/include/hw/gpio/sifive_gpio.h @@ -14,7 +14,7 @@ #ifndef SIFIVE_GPIO_H #define SIFIVE_GPIO_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_SIFIVE_GPIO "sifive_soc.gpio" diff --git a/include/hw/gpio/stm32l4x5_gpio.h b/include/hw/gpio/stm32l4x5_gpio.h index 878bd19fc9..6219754129 100644 --- a/include/hw/gpio/stm32l4x5_gpio.h +++ b/include/hw/gpio/stm32l4x5_gpio.h @@ -19,7 +19,7 @@ #ifndef HW_STM32L4X5_GPIO_H #define HW_STM32L4X5_GPIO_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_STM32L4X5_GPIO "stm32l4x5-gpio" diff --git a/include/hw/hyperv/vmbus-bridge.h b/include/hw/hyperv/vmbus-bridge.h index 1e5419574e..2cf73075c6 100644 --- a/include/hw/hyperv/vmbus-bridge.h +++ b/include/hw/hyperv/vmbus-bridge.h @@ -10,7 +10,7 @@ #ifndef HW_HYPERV_VMBUS_BRIDGE_H #define HW_HYPERV_VMBUS_BRIDGE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/hyperv/vmbus.h" #include "qom/object.h" diff --git a/include/hw/i2c/allwinner-i2c.h b/include/hw/i2c/allwinner-i2c.h index 0e325d265e..72836cc101 100644 --- a/include/hw/i2c/allwinner-i2c.h +++ b/include/hw/i2c/allwinner-i2c.h @@ -24,7 +24,7 @@ #ifndef ALLWINNER_I2C_H #define ALLWINNER_I2C_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_AW_I2C "allwinner.i2c" diff --git a/include/hw/i2c/arm_sbcon_i2c.h b/include/hw/i2c/arm_sbcon_i2c.h index da9b5e8f83..39b99f57bf 100644 --- a/include/hw/i2c/arm_sbcon_i2c.h +++ b/include/hw/i2c/arm_sbcon_i2c.h @@ -13,7 +13,7 @@ #ifndef HW_I2C_ARM_SBCON_I2C_H #define HW_I2C_ARM_SBCON_I2C_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/i2c/bitbang_i2c.h" #include "qom/object.h" diff --git a/include/hw/i2c/aspeed_i2c.h b/include/hw/i2c/aspeed_i2c.h index c9c2620a8a..ffcff2580f 100644 --- a/include/hw/i2c/aspeed_i2c.h +++ b/include/hw/i2c/aspeed_i2c.h @@ -21,7 +21,7 @@ #define ASPEED_I2C_H #include "hw/i2c/i2c.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/registerfields.h" #include "qom/object.h" diff --git a/include/hw/i2c/bcm2835_i2c.h b/include/hw/i2c/bcm2835_i2c.h index 0a56df4720..45f876df22 100644 --- a/include/hw/i2c/bcm2835_i2c.h +++ b/include/hw/i2c/bcm2835_i2c.h @@ -24,7 +24,7 @@ * THE SOFTWARE. */ -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/i2c/i2c.h" #include "qom/object.h" diff --git a/include/hw/i2c/imx_i2c.h b/include/hw/i2c/imx_i2c.h index e4f91339f5..988a3e284f 100644 --- a/include/hw/i2c/imx_i2c.h +++ b/include/hw/i2c/imx_i2c.h @@ -21,7 +21,7 @@ #ifndef IMX_I2C_H #define IMX_I2C_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_IMX_I2C "imx.i2c" diff --git a/include/hw/i2c/microbit_i2c.h b/include/hw/i2c/microbit_i2c.h index 3c29e09bf3..a3ec27ff6c 100644 --- a/include/hw/i2c/microbit_i2c.h +++ b/include/hw/i2c/microbit_i2c.h @@ -11,7 +11,7 @@ #ifndef MICROBIT_I2C_H #define MICROBIT_I2C_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/arm/nrf51.h" #include "qom/object.h" diff --git a/include/hw/i2c/npcm7xx_smbus.h b/include/hw/i2c/npcm7xx_smbus.h index f5adb69c67..dff9bc2f6e 100644 --- a/include/hw/i2c/npcm7xx_smbus.h +++ b/include/hw/i2c/npcm7xx_smbus.h @@ -19,7 +19,7 @@ #include "system/memory.h" #include "hw/i2c/i2c.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* * Number of addresses this module contains. Do not change this without diff --git a/include/hw/i2c/ppc4xx_i2c.h b/include/hw/i2c/ppc4xx_i2c.h index 4e882fa3c8..5b875eedac 100644 --- a/include/hw/i2c/ppc4xx_i2c.h +++ b/include/hw/i2c/ppc4xx_i2c.h @@ -27,7 +27,7 @@ #ifndef PPC4XX_I2C_H #define PPC4XX_I2C_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/i2c/bitbang_i2c.h" #include "qom/object.h" diff --git a/include/hw/i386/x86-iommu.h b/include/hw/i386/x86-iommu.h index e89f55a5c2..c526a047ab 100644 --- a/include/hw/i386/x86-iommu.h +++ b/include/hw/i386/x86-iommu.h @@ -20,7 +20,7 @@ #ifndef HW_I386_X86_IOMMU_H #define HW_I386_X86_IOMMU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/msi.h" #include "qom/object.h" diff --git a/include/hw/ide/ahci-sysbus.h b/include/hw/ide/ahci-sysbus.h index 06eaac8cb6..34d0c8f55a 100644 --- a/include/hw/ide/ahci-sysbus.h +++ b/include/hw/ide/ahci-sysbus.h @@ -7,7 +7,7 @@ #define HW_IDE_AHCI_SYSBUS_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ide/ahci.h" #define TYPE_SYSBUS_AHCI "sysbus-ahci" diff --git a/include/hw/input/i8042.h b/include/hw/input/i8042.h index e90f008b66..07d749b3d0 100644 --- a/include/hw/input/i8042.h +++ b/include/hw/input/i8042.h @@ -9,7 +9,7 @@ #define HW_INPUT_I8042_H #include "hw/isa/isa.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/input/ps2.h" #include "qom/object.h" diff --git a/include/hw/input/lasips2.h b/include/hw/input/lasips2.h index fd74883073..2739f752c8 100644 --- a/include/hw/input/lasips2.h +++ b/include/hw/input/lasips2.h @@ -20,7 +20,7 @@ #define HW_INPUT_LASIPS2_H #include "exec/hwaddr.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/input/ps2.h" #define TYPE_LASIPS2_PORT "lasips2-port" diff --git a/include/hw/input/pl050.h b/include/hw/input/pl050.h index db662654c5..2cdfa74f73 100644 --- a/include/hw/input/pl050.h +++ b/include/hw/input/pl050.h @@ -10,7 +10,7 @@ #ifndef HW_PL050_H #define HW_PL050_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "migration/vmstate.h" #include "hw/input/ps2.h" #include "hw/core/irq.h" diff --git a/include/hw/input/ps2.h b/include/hw/input/ps2.h index cd61a634c3..058db3e089 100644 --- a/include/hw/input/ps2.h +++ b/include/hw/input/ps2.h @@ -25,7 +25,7 @@ #ifndef HW_PS2_H #define HW_PS2_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define PS2_MOUSE_BUTTON_LEFT 0x01 #define PS2_MOUSE_BUTTON_RIGHT 0x02 diff --git a/include/hw/input/stellaris_gamepad.h b/include/hw/input/stellaris_gamepad.h index 51085e166c..e011482646 100644 --- a/include/hw/input/stellaris_gamepad.h +++ b/include/hw/input/stellaris_gamepad.h @@ -11,7 +11,7 @@ #ifndef HW_INPUT_STELLARIS_GAMEPAD_H #define HW_INPUT_STELLARIS_GAMEPAD_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" /* diff --git a/include/hw/intc/allwinner-a10-pic.h b/include/hw/intc/allwinner-a10-pic.h index b8364d3ed4..f22059ed85 100644 --- a/include/hw/intc/allwinner-a10-pic.h +++ b/include/hw/intc/allwinner-a10-pic.h @@ -1,7 +1,7 @@ #ifndef ALLWINNER_A10_PIC_H #define ALLWINNER_A10_PIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_AW_A10_PIC "allwinner-a10-pic" diff --git a/include/hw/intc/arm_gic_common.h b/include/hw/intc/arm_gic_common.h index 93a3cc2bf8..b169394e6c 100644 --- a/include/hw/intc/arm_gic_common.h +++ b/include/hw/intc/arm_gic_common.h @@ -21,7 +21,7 @@ #ifndef HW_ARM_GIC_COMMON_H #define HW_ARM_GIC_COMMON_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" /* Maximum number of possible interrupts, determined by the GIC architecture */ diff --git a/include/hw/intc/arm_gicv3_common.h b/include/hw/intc/arm_gicv3_common.h index 61d51915e0..3d24ad22d2 100644 --- a/include/hw/intc/arm_gicv3_common.h +++ b/include/hw/intc/arm_gicv3_common.h @@ -24,7 +24,7 @@ #ifndef HW_ARM_GICV3_COMMON_H #define HW_ARM_GICV3_COMMON_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/arm_gic_common.h" #include "qom/object.h" #include "qemu/notify.h" diff --git a/include/hw/intc/arm_gicv3_its_common.h b/include/hw/intc/arm_gicv3_its_common.h index 3c7b543b01..05b438aa7a 100644 --- a/include/hw/intc/arm_gicv3_its_common.h +++ b/include/hw/intc/arm_gicv3_its_common.h @@ -21,7 +21,7 @@ #ifndef QEMU_ARM_GICV3_ITS_COMMON_H #define QEMU_ARM_GICV3_ITS_COMMON_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/arm_gicv3_common.h" #include "qom/object.h" diff --git a/include/hw/intc/armv7m_nvic.h b/include/hw/intc/armv7m_nvic.h index 7b9964fe7e..e699546f6a 100644 --- a/include/hw/intc/armv7m_nvic.h +++ b/include/hw/intc/armv7m_nvic.h @@ -11,7 +11,7 @@ #define HW_ARM_ARMV7M_NVIC_H #include "target/arm/cpu-qom.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/timer/armv7m_systick.h" #include "qom/object.h" diff --git a/include/hw/intc/aspeed_intc.h b/include/hw/intc/aspeed_intc.h index 6dd8effcd8..5d10268fff 100644 --- a/include/hw/intc/aspeed_intc.h +++ b/include/hw/intc/aspeed_intc.h @@ -8,7 +8,7 @@ #ifndef ASPEED_INTC_H #define ASPEED_INTC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "hw/core/or-irq.h" diff --git a/include/hw/intc/aspeed_vic.h b/include/hw/intc/aspeed_vic.h index 68d6ab997a..5172f5c913 100644 --- a/include/hw/intc/aspeed_vic.h +++ b/include/hw/intc/aspeed_vic.h @@ -13,7 +13,7 @@ #ifndef ASPEED_VIC_H #define ASPEED_VIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ASPEED_VIC "aspeed.vic" diff --git a/include/hw/intc/bcm2835_ic.h b/include/hw/intc/bcm2835_ic.h index 588eb76c5c..f9ebaac8f9 100644 --- a/include/hw/intc/bcm2835_ic.h +++ b/include/hw/intc/bcm2835_ic.h @@ -8,7 +8,7 @@ #ifndef BCM2835_IC_H #define BCM2835_IC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_BCM2835_IC "bcm2835-ic" diff --git a/include/hw/intc/bcm2836_control.h b/include/hw/intc/bcm2836_control.h index a410c817e8..05380f1b85 100644 --- a/include/hw/intc/bcm2836_control.h +++ b/include/hw/intc/bcm2836_control.h @@ -15,7 +15,7 @@ #ifndef BCM2836_CONTROL_H #define BCM2836_CONTROL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qom/object.h" diff --git a/include/hw/intc/exynos4210_combiner.h b/include/hw/intc/exynos4210_combiner.h index bd207a7e6e..b1db48cb88 100644 --- a/include/hw/intc/exynos4210_combiner.h +++ b/include/hw/intc/exynos4210_combiner.h @@ -23,7 +23,7 @@ #ifndef HW_INTC_EXYNOS4210_COMBINER_H #define HW_INTC_EXYNOS4210_COMBINER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* * State for each output signal of internal combiner diff --git a/include/hw/intc/exynos4210_gic.h b/include/hw/intc/exynos4210_gic.h index f64c4069c6..6ffe57c230 100644 --- a/include/hw/intc/exynos4210_gic.h +++ b/include/hw/intc/exynos4210_gic.h @@ -22,7 +22,7 @@ #ifndef HW_INTC_EXYNOS4210_GIC_H #define HW_INTC_EXYNOS4210_GIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_EXYNOS4210_GIC "exynos4210.gic" OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210GicState, EXYNOS4210_GIC) diff --git a/include/hw/intc/goldfish_pic.h b/include/hw/intc/goldfish_pic.h index 3e79580367..e61df599b0 100644 --- a/include/hw/intc/goldfish_pic.h +++ b/include/hw/intc/goldfish_pic.h @@ -10,7 +10,7 @@ #ifndef HW_INTC_GOLDFISH_PIC_H #define HW_INTC_GOLDFISH_PIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_GOLDFISH_PIC "goldfish_pic" OBJECT_DECLARE_SIMPLE_TYPE(GoldfishPICState, GOLDFISH_PIC) diff --git a/include/hw/intc/grlib_irqmp.h b/include/hw/intc/grlib_irqmp.h index a76acbf940..e39496ca5d 100644 --- a/include/hw/intc/grlib_irqmp.h +++ b/include/hw/intc/grlib_irqmp.h @@ -27,7 +27,7 @@ #ifndef GRLIB_IRQMP_H #define GRLIB_IRQMP_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* Emulation of GrLib device is base on the GRLIB IP Core User's Manual: * http://www.gaisler.com/products/grlib/grip.pdf diff --git a/include/hw/intc/heathrow_pic.h b/include/hw/intc/heathrow_pic.h index c0a7f6f546..cfd8a8df2b 100644 --- a/include/hw/intc/heathrow_pic.h +++ b/include/hw/intc/heathrow_pic.h @@ -26,7 +26,7 @@ #ifndef HW_INTC_HEATHROW_PIC_H #define HW_INTC_HEATHROW_PIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_HEATHROW "heathrow" diff --git a/include/hw/intc/imx_avic.h b/include/hw/intc/imx_avic.h index 75fbd1a89c..82ce9037ed 100644 --- a/include/hw/intc/imx_avic.h +++ b/include/hw/intc/imx_avic.h @@ -17,7 +17,7 @@ #ifndef IMX_AVIC_H #define IMX_AVIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_IMX_AVIC "imx.avic" diff --git a/include/hw/intc/imx_gpcv2.h b/include/hw/intc/imx_gpcv2.h index 7bdee7e80a..7a3441ac65 100644 --- a/include/hw/intc/imx_gpcv2.h +++ b/include/hw/intc/imx_gpcv2.h @@ -1,7 +1,7 @@ #ifndef IMX_GPCV2_H #define IMX_GPCV2_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" enum IMXGPCv2Registers { diff --git a/include/hw/intc/loongarch_dintc.h b/include/hw/intc/loongarch_dintc.h index 01bb1e465c..1f4f65705a 100644 --- a/include/hw/intc/loongarch_dintc.h +++ b/include/hw/intc/loongarch_dintc.h @@ -6,7 +6,7 @@ */ #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/loongarch/virt.h" #include "system/memory.h" diff --git a/include/hw/intc/loongarch_extioi_common.h b/include/hw/intc/loongarch_extioi_common.h index 1bd2bfa07f..2dbc2563eb 100644 --- a/include/hw/intc/loongarch_extioi_common.h +++ b/include/hw/intc/loongarch_extioi_common.h @@ -8,7 +8,7 @@ #define LOONGARCH_EXTIOI_COMMON_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/loongarch/virt.h" #include "system/memory.h" diff --git a/include/hw/intc/loongarch_pch_msi.h b/include/hw/intc/loongarch_pch_msi.h index ef4ec4fdeb..fec51187c2 100644 --- a/include/hw/intc/loongarch_pch_msi.h +++ b/include/hw/intc/loongarch_pch_msi.h @@ -5,7 +5,7 @@ * Copyright (C) 2021 Loongson Technology Corporation Limited */ -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/memory.h" #define TYPE_LOONGARCH_PCH_MSI "loongarch_pch_msi" diff --git a/include/hw/intc/loongarch_pic_common.h b/include/hw/intc/loongarch_pic_common.h index 179361eb56..1627ec0899 100644 --- a/include/hw/intc/loongarch_pic_common.h +++ b/include/hw/intc/loongarch_pic_common.h @@ -8,7 +8,7 @@ #define HW_LOONGARCH_PIC_COMMON_H #include "hw/loongarch/virt.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/memory.h" #define PCH_PIC_INT_ID 0x00 diff --git a/include/hw/intc/loongson_ipi.h b/include/hw/intc/loongson_ipi.h index 4e517cc8dc..afb8488725 100644 --- a/include/hw/intc/loongson_ipi.h +++ b/include/hw/intc/loongson_ipi.h @@ -10,7 +10,7 @@ #include "qom/object.h" #include "hw/intc/loongson_ipi_common.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_LOONGSON_IPI "loongson_ipi" OBJECT_DECLARE_TYPE(LoongsonIPIState, LoongsonIPIClass, LOONGSON_IPI) diff --git a/include/hw/intc/loongson_ipi_common.h b/include/hw/intc/loongson_ipi_common.h index 4fa03bc351..feb858780a 100644 --- a/include/hw/intc/loongson_ipi_common.h +++ b/include/hw/intc/loongson_ipi_common.h @@ -9,7 +9,7 @@ #define HW_LOONGSON_IPI_COMMON_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "exec/memattrs.h" #include "system/memory.h" diff --git a/include/hw/intc/loongson_liointc.h b/include/hw/intc/loongson_liointc.h index 848e65eb35..f400f691b0 100644 --- a/include/hw/intc/loongson_liointc.h +++ b/include/hw/intc/loongson_liointc.h @@ -12,7 +12,7 @@ #define LOONGSON_LIOINTC_H #include "qemu/units.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_LOONGSON_LIOINTC "loongson.liointc" diff --git a/include/hw/intc/m68k_irqc.h b/include/hw/intc/m68k_irqc.h index 693e33b0aa..b2b184dbc9 100644 --- a/include/hw/intc/m68k_irqc.h +++ b/include/hw/intc/m68k_irqc.h @@ -10,7 +10,7 @@ #ifndef M68K_IRQC_H #define M68K_IRQC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_M68K_IRQC "m68k-irq-controller" #define M68K_IRQC(obj) OBJECT_CHECK(M68KIRQCState, (obj), \ diff --git a/include/hw/intc/mips_gic.h b/include/hw/intc/mips_gic.h index 5e4c71edd4..e2e6f0a168 100644 --- a/include/hw/intc/mips_gic.h +++ b/include/hw/intc/mips_gic.h @@ -13,7 +13,7 @@ #include "qemu/units.h" #include "hw/timer/mips_gictimer.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "cpu.h" #include "qom/object.h" /* diff --git a/include/hw/intc/realview_gic.h b/include/hw/intc/realview_gic.h index f37339dc0b..6feaf1a605 100644 --- a/include/hw/intc/realview_gic.h +++ b/include/hw/intc/realview_gic.h @@ -10,7 +10,7 @@ #ifndef HW_INTC_REALVIEW_GIC_H #define HW_INTC_REALVIEW_GIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/intc/arm_gic.h" #include "qom/object.h" diff --git a/include/hw/intc/riscv_aclint.h b/include/hw/intc/riscv_aclint.h index 4b7406eec0..5310615cbf 100644 --- a/include/hw/intc/riscv_aclint.h +++ b/include/hw/intc/riscv_aclint.h @@ -21,7 +21,7 @@ #ifndef HW_RISCV_ACLINT_H #define HW_RISCV_ACLINT_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_RISCV_ACLINT_MTIMER "riscv.aclint.mtimer" diff --git a/include/hw/intc/riscv_aplic.h b/include/hw/intc/riscv_aplic.h index 489b9133c2..c7a4d4ad01 100644 --- a/include/hw/intc/riscv_aplic.h +++ b/include/hw/intc/riscv_aplic.h @@ -19,7 +19,7 @@ #ifndef HW_RISCV_APLIC_H #define HW_RISCV_APLIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_RISCV_APLIC "riscv.aplic" diff --git a/include/hw/intc/riscv_imsic.h b/include/hw/intc/riscv_imsic.h index 58c2aaa8dc..fae999731d 100644 --- a/include/hw/intc/riscv_imsic.h +++ b/include/hw/intc/riscv_imsic.h @@ -19,7 +19,7 @@ #ifndef HW_RISCV_IMSIC_H #define HW_RISCV_IMSIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_RISCV_IMSIC "riscv.imsic" diff --git a/include/hw/intc/rx_icu.h b/include/hw/intc/rx_icu.h index b23504f3dd..2f2746b868 100644 --- a/include/hw/intc/rx_icu.h +++ b/include/hw/intc/rx_icu.h @@ -21,7 +21,7 @@ #ifndef HW_INTC_RX_ICU_H #define HW_INTC_RX_ICU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" enum TRG_MODE { diff --git a/include/hw/intc/sifive_plic.h b/include/hw/intc/sifive_plic.h index d3f45ec248..32973dbf28 100644 --- a/include/hw/intc/sifive_plic.h +++ b/include/hw/intc/sifive_plic.h @@ -21,7 +21,7 @@ #ifndef HW_SIFIVE_PLIC_H #define HW_SIFIVE_PLIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_SIFIVE_PLIC "riscv.sifive.plic" diff --git a/include/hw/intc/xlnx-pmu-iomod-intc.h b/include/hw/intc/xlnx-pmu-iomod-intc.h index e36b5e1762..1a1b0e813d 100644 --- a/include/hw/intc/xlnx-pmu-iomod-intc.h +++ b/include/hw/intc/xlnx-pmu-iomod-intc.h @@ -25,7 +25,7 @@ #ifndef HW_INTC_XLNX_PMU_IOMOD_INTC_H #define HW_INTC_XLNX_PMU_IOMOD_INTC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "qom/object.h" diff --git a/include/hw/intc/xlnx-zynqmp-ipi.h b/include/hw/intc/xlnx-zynqmp-ipi.h index 53fc89084a..57ac6e6852 100644 --- a/include/hw/intc/xlnx-zynqmp-ipi.h +++ b/include/hw/intc/xlnx-zynqmp-ipi.h @@ -25,7 +25,7 @@ #ifndef XLNX_ZYNQMP_IPI_H #define XLNX_ZYNQMP_IPI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "qom/object.h" diff --git a/include/hw/m68k/q800-glue.h b/include/hw/m68k/q800-glue.h index 04fac25f6c..ac3404d6db 100644 --- a/include/hw/m68k/q800-glue.h +++ b/include/hw/m68k/q800-glue.h @@ -23,7 +23,7 @@ #ifndef HW_Q800_GLUE_H #define HW_Q800_GLUE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_GLUE "q800-glue" OBJECT_DECLARE_SIMPLE_TYPE(GLUEState, GLUE) diff --git a/include/hw/mem/npcm7xx_mc.h b/include/hw/mem/npcm7xx_mc.h index 568cc35fdd..9c724e83fd 100644 --- a/include/hw/mem/npcm7xx_mc.h +++ b/include/hw/mem/npcm7xx_mc.h @@ -17,7 +17,7 @@ #define NPCM7XX_MC_H #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /** * struct NPCM7xxMCState - Device state for the memory controller. diff --git a/include/hw/mips/cps.h b/include/hw/mips/cps.h index e7309841d0..878b4d819f 100644 --- a/include/hw/mips/cps.h +++ b/include/hw/mips/cps.h @@ -20,7 +20,7 @@ #ifndef MIPS_CPS_H #define MIPS_CPS_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/clock.h" #include "hw/misc/mips_cmgcr.h" #include "hw/intc/mips_gic.h" diff --git a/include/hw/misc/a9scu.h b/include/hw/misc/a9scu.h index c3759fb8c8..312fb29434 100644 --- a/include/hw/misc/a9scu.h +++ b/include/hw/misc/a9scu.h @@ -10,7 +10,7 @@ #ifndef HW_MISC_A9SCU_H #define HW_MISC_A9SCU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" /* A9MP private memory region. */ diff --git a/include/hw/misc/allwinner-a10-ccm.h b/include/hw/misc/allwinner-a10-ccm.h index 7f22532efa..109b83f4df 100644 --- a/include/hw/misc/allwinner-a10-ccm.h +++ b/include/hw/misc/allwinner-a10-ccm.h @@ -24,7 +24,7 @@ #define HW_MISC_ALLWINNER_A10_CCM_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /** * @name Constants diff --git a/include/hw/misc/allwinner-a10-dramc.h b/include/hw/misc/allwinner-a10-dramc.h index a1ae621e21..44663dee44 100644 --- a/include/hw/misc/allwinner-a10-dramc.h +++ b/include/hw/misc/allwinner-a10-dramc.h @@ -24,7 +24,7 @@ #define HW_MISC_ALLWINNER_A10_DRAMC_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" /** diff --git a/include/hw/misc/allwinner-cpucfg.h b/include/hw/misc/allwinner-cpucfg.h index a717b47299..0214f1fb77 100644 --- a/include/hw/misc/allwinner-cpucfg.h +++ b/include/hw/misc/allwinner-cpucfg.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_CPUCFG_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /** * Object model diff --git a/include/hw/misc/allwinner-h3-ccu.h b/include/hw/misc/allwinner-h3-ccu.h index a04875bfca..b8a1721686 100644 --- a/include/hw/misc/allwinner-h3-ccu.h +++ b/include/hw/misc/allwinner-h3-ccu.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_H3_CCU_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /** * @name Constants diff --git a/include/hw/misc/allwinner-h3-dramc.h b/include/hw/misc/allwinner-h3-dramc.h index 0b6c877ef7..0435120ff9 100644 --- a/include/hw/misc/allwinner-h3-dramc.h +++ b/include/hw/misc/allwinner-h3-dramc.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_H3_DRAMC_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "exec/hwaddr.h" /** diff --git a/include/hw/misc/allwinner-h3-sysctrl.h b/include/hw/misc/allwinner-h3-sysctrl.h index ec1c220535..ff886450f3 100644 --- a/include/hw/misc/allwinner-h3-sysctrl.h +++ b/include/hw/misc/allwinner-h3-sysctrl.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_H3_SYSCTRL_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /** * @name Constants diff --git a/include/hw/misc/allwinner-r40-ccu.h b/include/hw/misc/allwinner-r40-ccu.h index ceb74eff92..4f1cc4fe11 100644 --- a/include/hw/misc/allwinner-r40-ccu.h +++ b/include/hw/misc/allwinner-r40-ccu.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_R40_CCU_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /** * @name Constants diff --git a/include/hw/misc/allwinner-r40-dramc.h b/include/hw/misc/allwinner-r40-dramc.h index 6a1a3a7893..b823e9eb52 100644 --- a/include/hw/misc/allwinner-r40-dramc.h +++ b/include/hw/misc/allwinner-r40-dramc.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_R40_DRAMC_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "exec/hwaddr.h" /** diff --git a/include/hw/misc/allwinner-sid.h b/include/hw/misc/allwinner-sid.h index 3bfa887a96..cfa22a4d7f 100644 --- a/include/hw/misc/allwinner-sid.h +++ b/include/hw/misc/allwinner-sid.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_SID_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/uuid.h" /** diff --git a/include/hw/misc/allwinner-sramc.h b/include/hw/misc/allwinner-sramc.h index 66b01b8d04..43fc338a58 100644 --- a/include/hw/misc/allwinner-sramc.h +++ b/include/hw/misc/allwinner-sramc.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_SRAMC_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/uuid.h" /** diff --git a/include/hw/misc/arm11scu.h b/include/hw/misc/arm11scu.h index e5c0282aec..d7ce0446a9 100644 --- a/include/hw/misc/arm11scu.h +++ b/include/hw/misc/arm11scu.h @@ -11,7 +11,7 @@ #ifndef HW_MISC_ARM11SCU_H #define HW_MISC_ARM11SCU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ARM11_SCU "arm11-scu" diff --git a/include/hw/misc/armsse-cpu-pwrctrl.h b/include/hw/misc/armsse-cpu-pwrctrl.h index 51d45ede7d..1d9c50825b 100644 --- a/include/hw/misc/armsse-cpu-pwrctrl.h +++ b/include/hw/misc/armsse-cpu-pwrctrl.h @@ -21,7 +21,7 @@ #ifndef HW_MISC_ARMSSE_CPU_PWRCTRL_H #define HW_MISC_ARMSSE_CPU_PWRCTRL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ARMSSE_CPU_PWRCTRL "armsse-cpu-pwrctrl" diff --git a/include/hw/misc/armsse-cpuid.h b/include/hw/misc/armsse-cpuid.h index 9c0926322c..0daf466972 100644 --- a/include/hw/misc/armsse-cpuid.h +++ b/include/hw/misc/armsse-cpuid.h @@ -22,7 +22,7 @@ #ifndef HW_MISC_ARMSSE_CPUID_H #define HW_MISC_ARMSSE_CPUID_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ARMSSE_CPUID "armsse-cpuid" diff --git a/include/hw/misc/armsse-mhu.h b/include/hw/misc/armsse-mhu.h index 41925ded89..e34d6c100b 100644 --- a/include/hw/misc/armsse-mhu.h +++ b/include/hw/misc/armsse-mhu.h @@ -23,7 +23,7 @@ #ifndef HW_MISC_ARMSSE_MHU_H #define HW_MISC_ARMSSE_MHU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ARMSSE_MHU "armsse-mhu" diff --git a/include/hw/misc/armv7m_ras.h b/include/hw/misc/armv7m_ras.h index ba6daccf3f..2b692fa5f9 100644 --- a/include/hw/misc/armv7m_ras.h +++ b/include/hw/misc/armv7m_ras.h @@ -21,7 +21,7 @@ #ifndef HW_MISC_ARMV7M_RAS_H #define HW_MISC_ARMV7M_RAS_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_ARMV7M_RAS "armv7m-ras" OBJECT_DECLARE_SIMPLE_TYPE(ARMv7MRAS, ARMV7M_RAS) diff --git a/include/hw/misc/aspeed_hace.h b/include/hw/misc/aspeed_hace.h index d5d07c6c02..b5416b0cb5 100644 --- a/include/hw/misc/aspeed_hace.h +++ b/include/hw/misc/aspeed_hace.h @@ -10,7 +10,7 @@ #ifndef ASPEED_HACE_H #define ASPEED_HACE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "crypto/hash.h" #define TYPE_ASPEED_HACE "aspeed.hace" diff --git a/include/hw/misc/aspeed_i3c.h b/include/hw/misc/aspeed_i3c.h index 39679dfa1a..7a984e1f01 100644 --- a/include/hw/misc/aspeed_i3c.h +++ b/include/hw/misc/aspeed_i3c.h @@ -10,7 +10,7 @@ #ifndef ASPEED_I3C_H #define ASPEED_I3C_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_ASPEED_I3C "aspeed.i3c" #define TYPE_ASPEED_I3C_DEVICE "aspeed.i3c.device" diff --git a/include/hw/misc/aspeed_lpc.h b/include/hw/misc/aspeed_lpc.h index fa398959af..64c1039f9c 100644 --- a/include/hw/misc/aspeed_lpc.h +++ b/include/hw/misc/aspeed_lpc.h @@ -10,7 +10,7 @@ #ifndef ASPEED_LPC_H #define ASPEED_LPC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_ASPEED_LPC "aspeed.lpc" #define ASPEED_LPC(obj) OBJECT_CHECK(AspeedLPCState, (obj), TYPE_ASPEED_LPC) diff --git a/include/hw/misc/aspeed_peci.h b/include/hw/misc/aspeed_peci.h index 8382707d9f..7680e5befb 100644 --- a/include/hw/misc/aspeed_peci.h +++ b/include/hw/misc/aspeed_peci.h @@ -10,7 +10,7 @@ #ifndef ASPEED_PECI_H #define ASPEED_PECI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define ASPEED_PECI_NR_REGS ((0xFC + 4) >> 2) #define TYPE_ASPEED_PECI "aspeed.peci" diff --git a/include/hw/misc/aspeed_sbc.h b/include/hw/misc/aspeed_sbc.h index 7d640a022e..07c7c22a86 100644 --- a/include/hw/misc/aspeed_sbc.h +++ b/include/hw/misc/aspeed_sbc.h @@ -9,7 +9,7 @@ #ifndef ASPEED_SBC_H #define ASPEED_SBC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/nvram/aspeed_otp.h" #define TYPE_ASPEED_SBC "aspeed.sbc" diff --git a/include/hw/misc/aspeed_scu.h b/include/hw/misc/aspeed_scu.h index 684b48b722..35b841960a 100644 --- a/include/hw/misc/aspeed_scu.h +++ b/include/hw/misc/aspeed_scu.h @@ -11,7 +11,7 @@ #ifndef ASPEED_SCU_H #define ASPEED_SCU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ASPEED_SCU "aspeed.scu" diff --git a/include/hw/misc/aspeed_sdmc.h b/include/hw/misc/aspeed_sdmc.h index 61c979583a..806b1cbc58 100644 --- a/include/hw/misc/aspeed_sdmc.h +++ b/include/hw/misc/aspeed_sdmc.h @@ -9,7 +9,7 @@ #ifndef ASPEED_SDMC_H #define ASPEED_SDMC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ASPEED_SDMC "aspeed.sdmc" diff --git a/include/hw/misc/aspeed_sli.h b/include/hw/misc/aspeed_sli.h index 23f346ab93..fa8d9fbc53 100644 --- a/include/hw/misc/aspeed_sli.h +++ b/include/hw/misc/aspeed_sli.h @@ -8,7 +8,7 @@ #ifndef ASPEED_SLI_H #define ASPEED_SLI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_ASPEED_SLI "aspeed.sli" #define TYPE_ASPEED_2700_SLI TYPE_ASPEED_SLI "-ast2700" diff --git a/include/hw/misc/aspeed_xdma.h b/include/hw/misc/aspeed_xdma.h index b1478fd1c6..0089da9f1f 100644 --- a/include/hw/misc/aspeed_xdma.h +++ b/include/hw/misc/aspeed_xdma.h @@ -9,7 +9,7 @@ #ifndef ASPEED_XDMA_H #define ASPEED_XDMA_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ASPEED_XDMA "aspeed.xdma" diff --git a/include/hw/misc/avr_power.h b/include/hw/misc/avr_power.h index 388e421aa7..5de78c5125 100644 --- a/include/hw/misc/avr_power.h +++ b/include/hw/misc/avr_power.h @@ -25,7 +25,7 @@ #ifndef HW_MISC_AVR_POWER_H #define HW_MISC_AVR_POWER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" diff --git a/include/hw/misc/bcm2835_cprman.h b/include/hw/misc/bcm2835_cprman.h index 7b2c0a5464..8146bca3ae 100644 --- a/include/hw/misc/bcm2835_cprman.h +++ b/include/hw/misc/bcm2835_cprman.h @@ -9,7 +9,7 @@ #ifndef HW_MISC_BCM2835_CPRMAN_H #define HW_MISC_BCM2835_CPRMAN_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/qdev-clock.h" #define TYPE_BCM2835_CPRMAN "bcm2835-cprman" diff --git a/include/hw/misc/bcm2835_mbox.h b/include/hw/misc/bcm2835_mbox.h index ade27af25d..571741c06e 100644 --- a/include/hw/misc/bcm2835_mbox.h +++ b/include/hw/misc/bcm2835_mbox.h @@ -9,7 +9,7 @@ #define BCM2835_MBOX_H #include "bcm2835_mbox_defs.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_BCM2835_MBOX "bcm2835-mbox" diff --git a/include/hw/misc/bcm2835_mphi.h b/include/hw/misc/bcm2835_mphi.h index 1a451685e8..4ddf8ba652 100644 --- a/include/hw/misc/bcm2835_mphi.h +++ b/include/hw/misc/bcm2835_mphi.h @@ -18,7 +18,7 @@ #define HW_MISC_BCM2835_MPHI_H #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define MPHI_MMIO_SIZE 0x1000 diff --git a/include/hw/misc/bcm2835_powermgt.h b/include/hw/misc/bcm2835_powermgt.h index 303b9a6f68..fb0740c01e 100644 --- a/include/hw/misc/bcm2835_powermgt.h +++ b/include/hw/misc/bcm2835_powermgt.h @@ -11,7 +11,7 @@ #ifndef BCM2835_POWERMGT_H #define BCM2835_POWERMGT_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_BCM2835_POWERMGT "bcm2835-powermgt" diff --git a/include/hw/misc/bcm2835_property.h b/include/hw/misc/bcm2835_property.h index 2f93fd0c75..53d2a92d17 100644 --- a/include/hw/misc/bcm2835_property.h +++ b/include/hw/misc/bcm2835_property.h @@ -8,7 +8,7 @@ #ifndef BCM2835_PROPERTY_H #define BCM2835_PROPERTY_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #include "hw/display/bcm2835_fb.h" #include "hw/nvram/bcm2835_otp.h" diff --git a/include/hw/misc/bcm2835_rng.h b/include/hw/misc/bcm2835_rng.h index 7c1fb3ef40..eaf77f5103 100644 --- a/include/hw/misc/bcm2835_rng.h +++ b/include/hw/misc/bcm2835_rng.h @@ -10,7 +10,7 @@ #ifndef BCM2835_RNG_H #define BCM2835_RNG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_BCM2835_RNG "bcm2835-rng" diff --git a/include/hw/misc/bcm2835_thermal.h b/include/hw/misc/bcm2835_thermal.h index f90f9e487c..13ffc61c1a 100644 --- a/include/hw/misc/bcm2835_thermal.h +++ b/include/hw/misc/bcm2835_thermal.h @@ -9,7 +9,7 @@ #ifndef HW_MISC_BCM2835_THERMAL_H #define HW_MISC_BCM2835_THERMAL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_BCM2835_THERMAL "bcm2835-thermal" diff --git a/include/hw/misc/djmemc.h b/include/hw/misc/djmemc.h index 82d4e4a2fe..76d6b366ff 100644 --- a/include/hw/misc/djmemc.h +++ b/include/hw/misc/djmemc.h @@ -8,7 +8,7 @@ #ifndef HW_MISC_DJMEMC_H #define HW_MISC_DJMEMC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define DJMEMC_SIZE 0x2000 #define DJMEMC_NUM_REGS (0x38 / sizeof(uint32_t)) diff --git a/include/hw/misc/imx6_src.h b/include/hw/misc/imx6_src.h index f380da3810..801b5b6a66 100644 --- a/include/hw/misc/imx6_src.h +++ b/include/hw/misc/imx6_src.h @@ -11,7 +11,7 @@ #ifndef IMX6_SRC_H #define IMX6_SRC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/bitops.h" #include "qom/object.h" diff --git a/include/hw/misc/imx7_gpr.h b/include/hw/misc/imx7_gpr.h index df364bd8f0..5cb7d50a69 100644 --- a/include/hw/misc/imx7_gpr.h +++ b/include/hw/misc/imx7_gpr.h @@ -13,7 +13,7 @@ #define IMX7_GPR_H #include "qemu/bitops.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_IMX7_GPR "imx7.gpr" diff --git a/include/hw/misc/imx7_snvs.h b/include/hw/misc/imx7_snvs.h index 1272076086..90f69a6dd6 100644 --- a/include/hw/misc/imx7_snvs.h +++ b/include/hw/misc/imx7_snvs.h @@ -13,7 +13,7 @@ #define IMX7_SNVS_H #include "qemu/bitops.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" diff --git a/include/hw/misc/imx7_src.h b/include/hw/misc/imx7_src.h index b4b97dcb1c..55b58a03bf 100644 --- a/include/hw/misc/imx7_src.h +++ b/include/hw/misc/imx7_src.h @@ -10,7 +10,7 @@ #ifndef IMX7_SRC_H #define IMX7_SRC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/bitops.h" #include "qom/object.h" diff --git a/include/hw/misc/imx8mp_analog.h b/include/hw/misc/imx8mp_analog.h index 955f03215a..6996e53771 100644 --- a/include/hw/misc/imx8mp_analog.h +++ b/include/hw/misc/imx8mp_analog.h @@ -10,7 +10,7 @@ #define IMX8MP_ANALOG_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" enum IMX8MPAnalogRegisters { ANALOG_AUDIO_PLL1_GEN_CTRL = 0x000 / 4, diff --git a/include/hw/misc/imx_ccm.h b/include/hw/misc/imx_ccm.h index 7e5678e972..c4212d04ea 100644 --- a/include/hw/misc/imx_ccm.h +++ b/include/hw/misc/imx_ccm.h @@ -11,7 +11,7 @@ #ifndef IMX_CCM_H #define IMX_CCM_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define CKIL_FREQ 32768 /* nominal 32khz clock */ diff --git a/include/hw/misc/imx_rngc.h b/include/hw/misc/imx_rngc.h index 34ad699225..5fb17551b0 100644 --- a/include/hw/misc/imx_rngc.h +++ b/include/hw/misc/imx_rngc.h @@ -10,7 +10,7 @@ #ifndef IMX_RNGC_H #define IMX_RNGC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_IMX_RNGC "imx.rngc" diff --git a/include/hw/misc/iotkit-secctl.h b/include/hw/misc/iotkit-secctl.h index 79a3628320..1c189eb721 100644 --- a/include/hw/misc/iotkit-secctl.h +++ b/include/hw/misc/iotkit-secctl.h @@ -55,7 +55,7 @@ #ifndef IOTKIT_SECCTL_H #define IOTKIT_SECCTL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_IOTKIT_SECCTL "iotkit-secctl" diff --git a/include/hw/misc/iotkit-sysctl.h b/include/hw/misc/iotkit-sysctl.h index 481e27f4db..ce72258a84 100644 --- a/include/hw/misc/iotkit-sysctl.h +++ b/include/hw/misc/iotkit-sysctl.h @@ -26,7 +26,7 @@ #ifndef HW_MISC_IOTKIT_SYSCTL_H #define HW_MISC_IOTKIT_SYSCTL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_IOTKIT_SYSCTL "iotkit-sysctl" diff --git a/include/hw/misc/iotkit-sysinfo.h b/include/hw/misc/iotkit-sysinfo.h index 91c23f90d2..36dc702c53 100644 --- a/include/hw/misc/iotkit-sysinfo.h +++ b/include/hw/misc/iotkit-sysinfo.h @@ -22,7 +22,7 @@ #ifndef HW_MISC_IOTKIT_SYSINFO_H #define HW_MISC_IOTKIT_SYSINFO_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_IOTKIT_SYSINFO "iotkit-sysinfo" diff --git a/include/hw/misc/ivshmem-flat.h b/include/hw/misc/ivshmem-flat.h index d656e57808..4e7277f386 100644 --- a/include/hw/misc/ivshmem-flat.h +++ b/include/hw/misc/ivshmem-flat.h @@ -16,7 +16,7 @@ #include "chardev/char-fe.h" #include "system/memory.h" #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define IVSHMEM_MAX_VECTOR_NUM 64 diff --git a/include/hw/misc/lasi.h b/include/hw/misc/lasi.h index 5e40c6aebd..8bf7240403 100644 --- a/include/hw/misc/lasi.h +++ b/include/hw/misc/lasi.h @@ -14,7 +14,7 @@ #include "system/address-spaces.h" #include "hw/core/boards.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_LASI_CHIP "lasi-chip" OBJECT_DECLARE_SIMPLE_TYPE(LasiState, LASI_CHIP) diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h index 6a15228150..114f41db4c 100644 --- a/include/hw/misc/mac_via.h +++ b/include/hw/misc/mac_via.h @@ -10,7 +10,7 @@ #define HW_MISC_MAC_VIA_H #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/mos6522.h" #include "hw/input/adb.h" #include "qom/object.h" diff --git a/include/hw/misc/macio/gpio.h b/include/hw/misc/macio/gpio.h index 7d2aa886c2..157ea0659b 100644 --- a/include/hw/misc/macio/gpio.h +++ b/include/hw/misc/macio/gpio.h @@ -27,7 +27,7 @@ #define MACIO_GPIO_H #include "hw/ppc/openpic.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_MACIO_GPIO "macio-gpio" diff --git a/include/hw/misc/max78000_aes.h b/include/hw/misc/max78000_aes.h index 407c45ef61..f68ab07696 100644 --- a/include/hw/misc/max78000_aes.h +++ b/include/hw/misc/max78000_aes.h @@ -8,7 +8,7 @@ #ifndef HW_MAX78000_AES_H #define HW_MAX78000_AES_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "crypto/aes.h" #include "qom/object.h" diff --git a/include/hw/misc/max78000_gcr.h b/include/hw/misc/max78000_gcr.h index d5858a40f3..c209766fa9 100644 --- a/include/hw/misc/max78000_gcr.h +++ b/include/hw/misc/max78000_gcr.h @@ -8,7 +8,7 @@ #ifndef HW_MAX78000_GCR_H #define HW_MAX78000_GCR_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_MAX78000_GCR "max78000-gcr" diff --git a/include/hw/misc/max78000_icc.h b/include/hw/misc/max78000_icc.h index 6fe2bb7a15..a8f1d451bd 100644 --- a/include/hw/misc/max78000_icc.h +++ b/include/hw/misc/max78000_icc.h @@ -9,7 +9,7 @@ #ifndef HW_MAX78000_ICC_H #define HW_MAX78000_ICC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_MAX78000_ICC "max78000-icc" diff --git a/include/hw/misc/max78000_trng.h b/include/hw/misc/max78000_trng.h index c5a8129b6a..a027f4b62c 100644 --- a/include/hw/misc/max78000_trng.h +++ b/include/hw/misc/max78000_trng.h @@ -8,7 +8,7 @@ #ifndef HW_MAX78000_TRNG_H #define HW_MAX78000_TRNG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_MAX78000_TRNG "max78000-trng" diff --git a/include/hw/misc/mchp_pfsoc_dmc.h b/include/hw/misc/mchp_pfsoc_dmc.h index 3bc1581e0f..2ed582fb8c 100644 --- a/include/hw/misc/mchp_pfsoc_dmc.h +++ b/include/hw/misc/mchp_pfsoc_dmc.h @@ -23,7 +23,7 @@ #ifndef MCHP_PFSOC_DMC_H #define MCHP_PFSOC_DMC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* DDR SGMII PHY module */ diff --git a/include/hw/misc/mchp_pfsoc_ioscb.h b/include/hw/misc/mchp_pfsoc_ioscb.h index 3fd3e74966..eaaa2ac5d9 100644 --- a/include/hw/misc/mchp_pfsoc_ioscb.h +++ b/include/hw/misc/mchp_pfsoc_ioscb.h @@ -23,7 +23,7 @@ #ifndef MCHP_PFSOC_IOSCB_H #define MCHP_PFSOC_IOSCB_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" typedef struct MchpPfSoCIoscbState { SysBusDevice parent; diff --git a/include/hw/misc/mchp_pfsoc_sysreg.h b/include/hw/misc/mchp_pfsoc_sysreg.h index c2232bd28d..c2b3688a94 100644 --- a/include/hw/misc/mchp_pfsoc_sysreg.h +++ b/include/hw/misc/mchp_pfsoc_sysreg.h @@ -23,7 +23,7 @@ #ifndef MCHP_PFSOC_SYSREG_H #define MCHP_PFSOC_SYSREG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define MCHP_PFSOC_SYSREG_REG_SIZE 0x2000 diff --git a/include/hw/misc/mips_cmgcr.h b/include/hw/misc/mips_cmgcr.h index db4bf5f449..cec0edd620 100644 --- a/include/hw/misc/mips_cmgcr.h +++ b/include/hw/misc/mips_cmgcr.h @@ -10,7 +10,7 @@ #ifndef MIPS_CMGCR_H #define MIPS_CMGCR_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_MIPS_GCR "mips-gcr" diff --git a/include/hw/misc/mips_cpc.h b/include/hw/misc/mips_cpc.h index fcafbd5e00..73ed7597e8 100644 --- a/include/hw/misc/mips_cpc.h +++ b/include/hw/misc/mips_cpc.h @@ -20,7 +20,7 @@ #ifndef MIPS_CPC_H #define MIPS_CPC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define CPC_ADDRSPACE_SZ 0x6000 diff --git a/include/hw/misc/mips_itu.h b/include/hw/misc/mips_itu.h index 27c9a1090d..0d1c9c419c 100644 --- a/include/hw/misc/mips_itu.h +++ b/include/hw/misc/mips_itu.h @@ -20,7 +20,7 @@ #ifndef MIPS_ITU_H #define MIPS_ITU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_MIPS_ITU "mips-itu" diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index 920871a598..150e30a2c1 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -28,7 +28,7 @@ #define MOS6522_H #include "exec/hwaddr.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define MOS6522_NUM_REGS 16 diff --git a/include/hw/misc/mps2-fpgaio.h b/include/hw/misc/mps2-fpgaio.h index 7b8bd604de..edd9f23121 100644 --- a/include/hw/misc/mps2-fpgaio.h +++ b/include/hw/misc/mps2-fpgaio.h @@ -21,7 +21,7 @@ #ifndef MPS2_FPGAIO_H #define MPS2_FPGAIO_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/led.h" #include "qom/object.h" diff --git a/include/hw/misc/mps2-scc.h b/include/hw/misc/mps2-scc.h index 8ff188c06b..989b2e057d 100644 --- a/include/hw/misc/mps2-scc.h +++ b/include/hw/misc/mps2-scc.h @@ -30,7 +30,7 @@ #ifndef MPS2_SCC_H #define MPS2_SCC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/misc/led.h" #include "qom/object.h" diff --git a/include/hw/misc/msf2-sysreg.h b/include/hw/misc/msf2-sysreg.h index fc1890e710..e213aedfb7 100644 --- a/include/hw/misc/msf2-sysreg.h +++ b/include/hw/misc/msf2-sysreg.h @@ -25,7 +25,7 @@ #ifndef HW_MSF2_SYSREG_H #define HW_MSF2_SYSREG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" enum { diff --git a/include/hw/misc/npcm7xx_mft.h b/include/hw/misc/npcm7xx_mft.h index 79855b6f25..406ec94443 100644 --- a/include/hw/misc/npcm7xx_mft.h +++ b/include/hw/misc/npcm7xx_mft.h @@ -19,7 +19,7 @@ #include "system/memory.h" #include "hw/core/clock.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" /* Max Fan input number. */ diff --git a/include/hw/misc/npcm7xx_pwm.h b/include/hw/misc/npcm7xx_pwm.h index 6a54b40005..b5ae933804 100644 --- a/include/hw/misc/npcm7xx_pwm.h +++ b/include/hw/misc/npcm7xx_pwm.h @@ -17,7 +17,7 @@ #define NPCM7XX_PWM_H #include "hw/core/clock.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" /* Each PWM module holds 4 PWM channels. */ diff --git a/include/hw/misc/npcm7xx_rng.h b/include/hw/misc/npcm7xx_rng.h index 650375dc2c..90858a71f5 100644 --- a/include/hw/misc/npcm7xx_rng.h +++ b/include/hw/misc/npcm7xx_rng.h @@ -16,7 +16,7 @@ #ifndef NPCM7XX_RNG_H #define NPCM7XX_RNG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" struct NPCM7xxRNGState { SysBusDevice parent; diff --git a/include/hw/misc/npcm_clk.h b/include/hw/misc/npcm_clk.h index 50b93a0094..74c5c1634a 100644 --- a/include/hw/misc/npcm_clk.h +++ b/include/hw/misc/npcm_clk.h @@ -18,7 +18,7 @@ #include "system/memory.h" #include "hw/core/clock.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define NPCM7XX_CLK_NR_REGS (0x70 / sizeof(uint32_t)) #define NPCM8XX_CLK_NR_REGS (0xc4 / sizeof(uint32_t)) diff --git a/include/hw/misc/npcm_gcr.h b/include/hw/misc/npcm_gcr.h index 702e7fddb1..97a6e531b8 100644 --- a/include/hw/misc/npcm_gcr.h +++ b/include/hw/misc/npcm_gcr.h @@ -17,7 +17,7 @@ #define NPCM_GCR_H #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" /* diff --git a/include/hw/misc/nrf51_rng.h b/include/hw/misc/nrf51_rng.h index 9aff9a76f8..0c2f6d2257 100644 --- a/include/hw/misc/nrf51_rng.h +++ b/include/hw/misc/nrf51_rng.h @@ -34,7 +34,7 @@ #ifndef NRF51_RNG_H #define NRF51_RNG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qom/object.h" #define TYPE_NRF51_RNG "nrf51_soc.rng" diff --git a/include/hw/misc/sifive_e_aon.h b/include/hw/misc/sifive_e_aon.h index 2ae1c4139c..efa2c3023f 100644 --- a/include/hw/misc/sifive_e_aon.h +++ b/include/hw/misc/sifive_e_aon.h @@ -19,7 +19,7 @@ #ifndef HW_SIFIVE_AON_H #define HW_SIFIVE_AON_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_SIFIVE_E_AON "riscv.sifive.e.aon" diff --git a/include/hw/misc/sifive_e_prci.h b/include/hw/misc/sifive_e_prci.h index 6aa949e910..d0abd59f4b 100644 --- a/include/hw/misc/sifive_e_prci.h +++ b/include/hw/misc/sifive_e_prci.h @@ -19,7 +19,7 @@ #ifndef HW_SIFIVE_E_PRCI_H #define HW_SIFIVE_E_PRCI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" enum { SIFIVE_E_PRCI_HFROSCCFG = 0x0, diff --git a/include/hw/misc/sifive_test.h b/include/hw/misc/sifive_test.h index 88a38d00c5..85afd35263 100644 --- a/include/hw/misc/sifive_test.h +++ b/include/hw/misc/sifive_test.h @@ -19,7 +19,7 @@ #ifndef HW_SIFIVE_TEST_H #define HW_SIFIVE_TEST_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_SIFIVE_TEST "riscv.sifive.test" diff --git a/include/hw/misc/sifive_u_otp.h b/include/hw/misc/sifive_u_otp.h index 170d2148f2..b3d2091a58 100644 --- a/include/hw/misc/sifive_u_otp.h +++ b/include/hw/misc/sifive_u_otp.h @@ -19,7 +19,7 @@ #ifndef HW_SIFIVE_U_OTP_H #define HW_SIFIVE_U_OTP_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define SIFIVE_U_OTP_PA 0x00 #define SIFIVE_U_OTP_PAIO 0x04 diff --git a/include/hw/misc/sifive_u_prci.h b/include/hw/misc/sifive_u_prci.h index 4d2491ad46..c0cc755a26 100644 --- a/include/hw/misc/sifive_u_prci.h +++ b/include/hw/misc/sifive_u_prci.h @@ -19,7 +19,7 @@ #ifndef HW_SIFIVE_U_PRCI_H #define HW_SIFIVE_U_PRCI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define SIFIVE_U_PRCI_HFXOSCCFG 0x00 #define SIFIVE_U_PRCI_COREPLLCFG0 0x04 diff --git a/include/hw/misc/stm32_rcc.h b/include/hw/misc/stm32_rcc.h index ffbdf202ea..4dccacc2db 100644 --- a/include/hw/misc/stm32_rcc.h +++ b/include/hw/misc/stm32_rcc.h @@ -25,7 +25,7 @@ #ifndef HW_STM32_RCC_H #define HW_STM32_RCC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define STM32_RCC_CR 0x00 diff --git a/include/hw/misc/stm32f2xx_syscfg.h b/include/hw/misc/stm32f2xx_syscfg.h index 8595a3b31b..89e47aa091 100644 --- a/include/hw/misc/stm32f2xx_syscfg.h +++ b/include/hw/misc/stm32f2xx_syscfg.h @@ -25,7 +25,7 @@ #ifndef HW_STM32F2XX_SYSCFG_H #define HW_STM32F2XX_SYSCFG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define SYSCFG_MEMRMP 0x00 diff --git a/include/hw/misc/stm32f4xx_exti.h b/include/hw/misc/stm32f4xx_exti.h index fc11c595fa..a2d57ee345 100644 --- a/include/hw/misc/stm32f4xx_exti.h +++ b/include/hw/misc/stm32f4xx_exti.h @@ -25,7 +25,7 @@ #ifndef HW_STM32F4XX_EXTI_H #define HW_STM32F4XX_EXTI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define EXTI_IMR 0x00 diff --git a/include/hw/misc/stm32f4xx_syscfg.h b/include/hw/misc/stm32f4xx_syscfg.h index 9fce67f4b4..e6d2bc1ff3 100644 --- a/include/hw/misc/stm32f4xx_syscfg.h +++ b/include/hw/misc/stm32f4xx_syscfg.h @@ -25,7 +25,7 @@ #ifndef HW_STM32F4XX_SYSCFG_H #define HW_STM32F4XX_SYSCFG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define SYSCFG_MEMRMP 0x00 diff --git a/include/hw/misc/stm32l4x5_exti.h b/include/hw/misc/stm32l4x5_exti.h index 62f79362f2..543662c7b9 100644 --- a/include/hw/misc/stm32l4x5_exti.h +++ b/include/hw/misc/stm32l4x5_exti.h @@ -24,7 +24,7 @@ #ifndef HW_STM32L4X5_EXTI_H #define HW_STM32L4X5_EXTI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_STM32L4X5_EXTI "stm32l4x5-exti" diff --git a/include/hw/misc/stm32l4x5_rcc.h b/include/hw/misc/stm32l4x5_rcc.h index 0fbfba5c40..64ead11b3d 100644 --- a/include/hw/misc/stm32l4x5_rcc.h +++ b/include/hw/misc/stm32l4x5_rcc.h @@ -18,7 +18,7 @@ #ifndef HW_STM32L4X5_RCC_H #define HW_STM32L4X5_RCC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_STM32L4X5_RCC "stm32l4x5-rcc" diff --git a/include/hw/misc/stm32l4x5_syscfg.h b/include/hw/misc/stm32l4x5_syscfg.h index c450df2b9e..d83b4c0723 100644 --- a/include/hw/misc/stm32l4x5_syscfg.h +++ b/include/hw/misc/stm32l4x5_syscfg.h @@ -24,7 +24,7 @@ #ifndef HW_STM32L4X5_SYSCFG_H #define HW_STM32L4X5_SYSCFG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "hw/gpio/stm32l4x5_gpio.h" diff --git a/include/hw/misc/tz-mpc.h b/include/hw/misc/tz-mpc.h index 74d5d822cf..bda4bc2ae3 100644 --- a/include/hw/misc/tz-mpc.h +++ b/include/hw/misc/tz-mpc.h @@ -31,7 +31,7 @@ #ifndef TZ_MPC_H #define TZ_MPC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_TZ_MPC "tz-mpc" diff --git a/include/hw/misc/tz-msc.h b/include/hw/misc/tz-msc.h index 77cc7f2404..07112d8caa 100644 --- a/include/hw/misc/tz-msc.h +++ b/include/hw/misc/tz-msc.h @@ -50,7 +50,7 @@ #ifndef TZ_MSC_H #define TZ_MSC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "target/arm/idau.h" #include "qom/object.h" diff --git a/include/hw/misc/tz-ppc.h b/include/hw/misc/tz-ppc.h index 021d671b29..3fb9401160 100644 --- a/include/hw/misc/tz-ppc.h +++ b/include/hw/misc/tz-ppc.h @@ -65,7 +65,7 @@ #ifndef TZ_PPC_H #define TZ_PPC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_TZ_PPC "tz-ppc" diff --git a/include/hw/misc/unimp.h b/include/hw/misc/unimp.h index 904f502fab..77a5077511 100644 --- a/include/hw/misc/unimp.h +++ b/include/hw/misc/unimp.h @@ -9,7 +9,7 @@ #define HW_MISC_UNIMP_H #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qapi/error.h" #include "qom/object.h" diff --git a/include/hw/misc/virt_ctrl.h b/include/hw/misc/virt_ctrl.h index 81346cf017..ddce36f3b7 100644 --- a/include/hw/misc/virt_ctrl.h +++ b/include/hw/misc/virt_ctrl.h @@ -7,7 +7,7 @@ #ifndef VIRT_CTRL_H #define VIRT_CTRL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_VIRT_CTRL "virt-ctrl" OBJECT_DECLARE_SIMPLE_TYPE(VirtCtrlState, VIRT_CTRL) diff --git a/include/hw/misc/xlnx-versal-cframe-reg.h b/include/hw/misc/xlnx-versal-cframe-reg.h index fe8788a745..8f5c2959a8 100644 --- a/include/hw/misc/xlnx-versal-cframe-reg.h +++ b/include/hw/misc/xlnx-versal-cframe-reg.h @@ -17,7 +17,7 @@ #ifndef HW_MISC_XLNX_VERSAL_CFRAME_REG_H #define HW_MISC_XLNX_VERSAL_CFRAME_REG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/misc/xlnx-cfi-if.h" #include "hw/misc/xlnx-versal-cfu.h" diff --git a/include/hw/misc/xlnx-versal-cfu.h b/include/hw/misc/xlnx-versal-cfu.h index 3d7ca506de..e4fefe43c0 100644 --- a/include/hw/misc/xlnx-versal-cfu.h +++ b/include/hw/misc/xlnx-versal-cfu.h @@ -17,7 +17,7 @@ #ifndef HW_MISC_XLNX_VERSAL_CFU_APB_H #define HW_MISC_XLNX_VERSAL_CFU_APB_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/misc/xlnx-cfi-if.h" #include "qemu/fifo32.h" diff --git a/include/hw/misc/xlnx-versal-crl.h b/include/hw/misc/xlnx-versal-crl.h index ace3d198bd..fea7768642 100644 --- a/include/hw/misc/xlnx-versal-crl.h +++ b/include/hw/misc/xlnx-versal-crl.h @@ -10,7 +10,7 @@ #ifndef HW_MISC_XLNX_VERSAL_CRL_H #define HW_MISC_XLNX_VERSAL_CRL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "target/arm/cpu-qom.h" #include "hw/arm/xlnx-versal-version.h" diff --git a/include/hw/misc/xlnx-versal-pmc-iou-slcr.h b/include/hw/misc/xlnx-versal-pmc-iou-slcr.h index d8f45bd94b..046f3e525c 100644 --- a/include/hw/misc/xlnx-versal-pmc-iou-slcr.h +++ b/include/hw/misc/xlnx-versal-pmc-iou-slcr.h @@ -54,7 +54,7 @@ #ifndef XLNX_VERSAL_PMC_IOU_SLCR_H #define XLNX_VERSAL_PMC_IOU_SLCR_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #define TYPE_XILINX_VERSAL_PMC_IOU_SLCR "xlnx.versal-pmc-iou-slcr" diff --git a/include/hw/misc/xlnx-versal-trng.h b/include/hw/misc/xlnx-versal-trng.h index 8de2910404..ea6e4cb2e1 100644 --- a/include/hw/misc/xlnx-versal-trng.h +++ b/include/hw/misc/xlnx-versal-trng.h @@ -27,7 +27,7 @@ #define XLNX_VERSAL_TRNG_H #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #define TYPE_XLNX_VERSAL_TRNG "xlnx.versal-trng" diff --git a/include/hw/misc/xlnx-versal-xramc.h b/include/hw/misc/xlnx-versal-xramc.h index e79941d886..e888a9f03d 100644 --- a/include/hw/misc/xlnx-versal-xramc.h +++ b/include/hw/misc/xlnx-versal-xramc.h @@ -9,7 +9,7 @@ #ifndef XLNX_VERSAL_XRAMC_H #define XLNX_VERSAL_XRAMC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #define TYPE_XLNX_XRAM_CTRL "xlnx.versal-xramc" diff --git a/include/hw/misc/xlnx-zynqmp-apu-ctrl.h b/include/hw/misc/xlnx-zynqmp-apu-ctrl.h index c031572005..cc0a531c24 100644 --- a/include/hw/misc/xlnx-zynqmp-apu-ctrl.h +++ b/include/hw/misc/xlnx-zynqmp-apu-ctrl.h @@ -11,7 +11,7 @@ #ifndef HW_MISC_XLNX_ZYNQMP_APU_CTRL_H #define HW_MISC_XLNX_ZYNQMP_APU_CTRL_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "target/arm/cpu-qom.h" diff --git a/include/hw/misc/xlnx-zynqmp-crf.h b/include/hw/misc/xlnx-zynqmp-crf.h index df83034a98..933867a6e5 100644 --- a/include/hw/misc/xlnx-zynqmp-crf.h +++ b/include/hw/misc/xlnx-zynqmp-crf.h @@ -8,7 +8,7 @@ #ifndef HW_MISC_XLNX_ZYNQMP_CRF_H #define HW_MISC_XLNX_ZYNQMP_CRF_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #define TYPE_XLNX_ZYNQMP_CRF "xlnx.zynqmp_crf" diff --git a/include/hw/net/allwinner-sun8i-emac.h b/include/hw/net/allwinner-sun8i-emac.h index 185895f4e1..24662a24ac 100644 --- a/include/hw/net/allwinner-sun8i-emac.h +++ b/include/hw/net/allwinner-sun8i-emac.h @@ -22,7 +22,7 @@ #include "qom/object.h" #include "net/net.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /** * Object model diff --git a/include/hw/net/allwinner_emac.h b/include/hw/net/allwinner_emac.h index 534e748982..b3482e137e 100644 --- a/include/hw/net/allwinner_emac.h +++ b/include/hw/net/allwinner_emac.h @@ -27,7 +27,7 @@ #include "net/net.h" #include "qemu/fifo8.h" #include "hw/net/mii.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_AW_EMAC "allwinner-emac" diff --git a/include/hw/net/cadence_gem.h b/include/hw/net/cadence_gem.h index e63941f18f..f5f1fa47c1 100644 --- a/include/hw/net/cadence_gem.h +++ b/include/hw/net/cadence_gem.h @@ -30,7 +30,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(CadenceGEMState, CADENCE_GEM) #include "net/net.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define CADENCE_GEM_MAXREG (0x00000800 / 4) /* Last valid GEM address */ diff --git a/include/hw/net/dp8393x.h b/include/hw/net/dp8393x.h index 24273dc1f4..5fe02d5a3c 100644 --- a/include/hw/net/dp8393x.h +++ b/include/hw/net/dp8393x.h @@ -20,7 +20,7 @@ #ifndef HW_NET_DP8393X_H #define HW_NET_DP8393X_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #include "system/memory.h" diff --git a/include/hw/net/ftgmac100.h b/include/hw/net/ftgmac100.h index 24ccdf0260..414963c5fb 100644 --- a/include/hw/net/ftgmac100.h +++ b/include/hw/net/ftgmac100.h @@ -19,7 +19,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(FTGMAC100State, FTGMAC100) #define FTGMAC100_REG_HIGH_MEM_SIZE 0x100 #define FTGMAC100_REG_HIGH_OFFSET 0x100 -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" /* diff --git a/include/hw/net/imx_fec.h b/include/hw/net/imx_fec.h index 99fc285402..f0ac7d60e1 100644 --- a/include/hw/net/imx_fec.h +++ b/include/hw/net/imx_fec.h @@ -30,7 +30,7 @@ OBJECT_DECLARE_SIMPLE_TYPE(IMXFECState, IMX_FEC) #define TYPE_IMX_ENET "imx.enet" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/net/lan9118_phy.h" #include "hw/core/irq.h" #include "net/net.h" diff --git a/include/hw/net/lan9118_phy.h b/include/hw/net/lan9118_phy.h index af12fc33d5..1f9ad643c7 100644 --- a/include/hw/net/lan9118_phy.h +++ b/include/hw/net/lan9118_phy.h @@ -12,7 +12,7 @@ #define HW_NET_LAN9118_PHY_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_LAN9118_PHY "lan9118-phy" OBJECT_DECLARE_SIMPLE_TYPE(Lan9118PhyState, LAN9118_PHY) diff --git a/include/hw/net/lance.h b/include/hw/net/lance.h index f645d6af67..be473e2eed 100644 --- a/include/hw/net/lance.h +++ b/include/hw/net/lance.h @@ -31,7 +31,7 @@ #include "net/net.h" #include "hw/net/pcnet.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_LANCE "lance" diff --git a/include/hw/net/lasi_82596.h b/include/hw/net/lasi_82596.h index c46a4a137e..ab31874a7c 100644 --- a/include/hw/net/lasi_82596.h +++ b/include/hw/net/lasi_82596.h @@ -10,7 +10,7 @@ #include "net/net.h" #include "hw/net/i82596.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_LASI_82596 "lasi_82596" typedef struct SysBusI82596State SysBusI82596State; diff --git a/include/hw/net/msf2-emac.h b/include/hw/net/msf2-emac.h index b5d9127e46..f018ab3ff3 100644 --- a/include/hw/net/msf2-emac.h +++ b/include/hw/net/msf2-emac.h @@ -22,7 +22,7 @@ * THE SOFTWARE. */ -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/memory.h" #include "net/net.h" #include "net/eth.h" diff --git a/include/hw/net/npcm7xx_emc.h b/include/hw/net/npcm7xx_emc.h index 03c9941d82..238507cadc 100644 --- a/include/hw/net/npcm7xx_emc.h +++ b/include/hw/net/npcm7xx_emc.h @@ -18,7 +18,7 @@ #define NPCM7XX_EMC_H #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" /* 32-bit register indices. */ diff --git a/include/hw/net/npcm_gmac.h b/include/hw/net/npcm_gmac.h index 44ee7b1bcb..d4fe49ada5 100644 --- a/include/hw/net/npcm_gmac.h +++ b/include/hw/net/npcm_gmac.h @@ -21,7 +21,7 @@ #define NPCM_GMAC_H #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "net/net.h" #define NPCM_GMAC_NR_REGS (0x1060 / sizeof(uint32_t)) diff --git a/include/hw/net/npcm_pcs.h b/include/hw/net/npcm_pcs.h index d5c481ad70..7f5aa76353 100644 --- a/include/hw/net/npcm_pcs.h +++ b/include/hw/net/npcm_pcs.h @@ -17,7 +17,7 @@ #ifndef NPCM_PCS_H #define NPCM_PCS_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define NPCM_PCS_NR_SR_CTLS (0x12 / sizeof(uint16_t)) #define NPCM_PCS_NR_SR_MIIS (0x20 / sizeof(uint16_t)) diff --git a/include/hw/net/xlnx-zynqmp-can.h b/include/hw/net/xlnx-zynqmp-can.h index d23c1523ca..b43384a098 100644 --- a/include/hw/net/xlnx-zynqmp-can.h +++ b/include/hw/net/xlnx-zynqmp-can.h @@ -30,7 +30,7 @@ #ifndef XLNX_ZYNQMP_CAN_H #define XLNX_ZYNQMP_CAN_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "net/can_emu.h" #include "net/can_host.h" diff --git a/include/hw/nubus/nubus.h b/include/hw/nubus/nubus.h index 105ddddd0d..52d8797053 100644 --- a/include/hw/nubus/nubus.h +++ b/include/hw/nubus/nubus.h @@ -10,7 +10,7 @@ #define HW_NUBUS_NUBUS_H #include "hw/core/qdev-properties.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/address-spaces.h" #include "qom/object.h" #include "qemu/units.h" diff --git a/include/hw/nvram/bcm2835_otp.h b/include/hw/nvram/bcm2835_otp.h index 1df33700bd..dba92a41e8 100644 --- a/include/hw/nvram/bcm2835_otp.h +++ b/include/hw/nvram/bcm2835_otp.h @@ -9,7 +9,7 @@ #ifndef BCM2835_OTP_H #define BCM2835_OTP_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_BCM2835_OTP "bcm2835-otp" diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h index d41b9328fd..a29a5d55ea 100644 --- a/include/hw/nvram/fw_cfg.h +++ b/include/hw/nvram/fw_cfg.h @@ -3,7 +3,7 @@ #include "exec/hwaddr.h" #include "standard-headers/linux/qemu_fw_cfg.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/dma.h" #include "qom/object.h" diff --git a/include/hw/nvram/mac_nvram.h b/include/hw/nvram/mac_nvram.h index e9d8398f84..e023732822 100644 --- a/include/hw/nvram/mac_nvram.h +++ b/include/hw/nvram/mac_nvram.h @@ -27,7 +27,7 @@ #define MAC_NVRAM_H #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define MACIO_NVRAM_SIZE 0x2000 diff --git a/include/hw/nvram/npcm7xx_otp.h b/include/hw/nvram/npcm7xx_otp.h index 77b05f8b82..95118c64a7 100644 --- a/include/hw/nvram/npcm7xx_otp.h +++ b/include/hw/nvram/npcm7xx_otp.h @@ -17,7 +17,7 @@ #define NPCM7XX_OTP_H #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* Each OTP module holds 8192 bits of one-time programmable storage */ #define NPCM7XX_OTP_ARRAY_BITS (8192) diff --git a/include/hw/nvram/nrf51_nvm.h b/include/hw/nvram/nrf51_nvm.h index d85e788df5..172e344a5d 100644 --- a/include/hw/nvram/nrf51_nvm.h +++ b/include/hw/nvram/nrf51_nvm.h @@ -22,7 +22,7 @@ #ifndef NRF51_NVM_H #define NRF51_NVM_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_NRF51_NVM "nrf51_soc.nvm" OBJECT_DECLARE_SIMPLE_TYPE(NRF51NVMState, NRF51_NVM) diff --git a/include/hw/nvram/xlnx-bbram.h b/include/hw/nvram/xlnx-bbram.h index 27423035d4..7a8dd85eff 100644 --- a/include/hw/nvram/xlnx-bbram.h +++ b/include/hw/nvram/xlnx-bbram.h @@ -29,7 +29,7 @@ #include "system/block-backend.h" #include "hw/core/qdev.h" #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #define RMAX_XLNX_BBRAM ((0x4c / 4) + 1) diff --git a/include/hw/nvram/xlnx-versal-efuse.h b/include/hw/nvram/xlnx-versal-efuse.h index 07f1000a85..b10d748317 100644 --- a/include/hw/nvram/xlnx-versal-efuse.h +++ b/include/hw/nvram/xlnx-versal-efuse.h @@ -23,7 +23,7 @@ #define XLNX_VERSAL_EFUSE_H #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/nvram/xlnx-efuse.h" diff --git a/include/hw/nvram/xlnx-zynqmp-efuse.h b/include/hw/nvram/xlnx-zynqmp-efuse.h index d488694386..b62f8181fd 100644 --- a/include/hw/nvram/xlnx-zynqmp-efuse.h +++ b/include/hw/nvram/xlnx-zynqmp-efuse.h @@ -23,7 +23,7 @@ #define XLNX_ZYNQMP_EFUSE_H #include "hw/core/irq.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/register.h" #include "hw/nvram/xlnx-efuse.h" diff --git a/include/hw/pci-host/aspeed_pcie.h b/include/hw/pci-host/aspeed_pcie.h index be53ea96b9..e660119a45 100644 --- a/include/hw/pci-host/aspeed_pcie.h +++ b/include/hw/pci-host/aspeed_pcie.h @@ -17,7 +17,7 @@ #ifndef ASPEED_PCIE_H #define ASPEED_PCIE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pcie_host.h" #include "hw/pci/pcie_port.h" diff --git a/include/hw/pci-host/designware.h b/include/hw/pci-host/designware.h index a35a3bd06c..e82fdc5fe7 100644 --- a/include/hw/pci-host/designware.h +++ b/include/hw/pci-host/designware.h @@ -21,7 +21,7 @@ #ifndef DESIGNWARE_H #define DESIGNWARE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci_bridge.h" #include "qom/object.h" diff --git a/include/hw/pci-host/fsl_imx8m_phy.h b/include/hw/pci-host/fsl_imx8m_phy.h index 5f1b212fd9..5786534b0e 100644 --- a/include/hw/pci-host/fsl_imx8m_phy.h +++ b/include/hw/pci-host/fsl_imx8m_phy.h @@ -9,7 +9,7 @@ #ifndef HW_PCIHOST_FSLIMX8MPCIEPHY_H #define HW_PCIHOST_FSLIMX8MPCIEPHY_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "system/memory.h" diff --git a/include/hw/pci-host/gpex.h b/include/hw/pci-host/gpex.h index feaf827474..695886dedd 100644 --- a/include/hw/pci-host/gpex.h +++ b/include/hw/pci-host/gpex.h @@ -21,7 +21,7 @@ #define HW_GPEX_H #include "exec/hwaddr.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci_device.h" #include "hw/pci/pcie_host.h" #include "qom/object.h" diff --git a/include/hw/pci-host/xilinx-pcie.h b/include/hw/pci-host/xilinx-pcie.h index e1b3c1c280..b7bab77c24 100644 --- a/include/hw/pci-host/xilinx-pcie.h +++ b/include/hw/pci-host/xilinx-pcie.h @@ -20,7 +20,7 @@ #ifndef HW_XILINX_PCIE_H #define HW_XILINX_PCIE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/pcie_host.h" #include "qom/object.h" diff --git a/include/hw/pci/pci_host.h b/include/hw/pci/pci_host.h index 954dd446fa..d8dec0ee04 100644 --- a/include/hw/pci/pci_host.h +++ b/include/hw/pci/pci_host.h @@ -28,7 +28,7 @@ #ifndef PCI_HOST_H #define PCI_HOST_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define PCI_HOST_BYPASS_IOMMU "bypass-iommu" diff --git a/include/hw/ppc/mac_dbdma.h b/include/hw/ppc/mac_dbdma.h index 7676488245..e42805144e 100644 --- a/include/hw/ppc/mac_dbdma.h +++ b/include/hw/ppc/mac_dbdma.h @@ -26,7 +26,7 @@ #include "system/memory.h" #include "qemu/iov.h" #include "system/dma.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" typedef struct DBDMA_io DBDMA_io; diff --git a/include/hw/ppc/openpic.h b/include/hw/ppc/openpic.h index 9c6af8e207..5856955af9 100644 --- a/include/hw/ppc/openpic.h +++ b/include/hw/ppc/openpic.h @@ -1,7 +1,7 @@ #ifndef OPENPIC_H #define OPENPIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/cpu.h" #include "qom/object.h" diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h index a8c1968f28..24f8843a40 100644 --- a/include/hw/ppc/pnv.h +++ b/include/hw/ppc/pnv.h @@ -22,7 +22,7 @@ #include "cpu.h" #include "hw/core/boards.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ipmi/ipmi.h" #include "hw/ppc/pnv_pnor.h" diff --git a/include/hw/ppc/pnv_chip.h b/include/hw/ppc/pnv_chip.h index a5b8c49680..ea47c97dd3 100644 --- a/include/hw/ppc/pnv_chip.h +++ b/include/hw/ppc/pnv_chip.h @@ -14,7 +14,7 @@ #include "hw/ppc/pnv_sbe.h" #include "hw/ppc/pnv_xive.h" #include "hw/ppc/pnv_i2c.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" OBJECT_DECLARE_TYPE(PnvChip, PnvChipClass, PNV_CHIP) diff --git a/include/hw/ppc/pnv_pnor.h b/include/hw/ppc/pnv_pnor.h index b44cafe918..7bf737d33b 100644 --- a/include/hw/ppc/pnv_pnor.h +++ b/include/hw/ppc/pnv_pnor.h @@ -10,7 +10,7 @@ #ifndef PPC_PNV_PNOR_H #define PPC_PNV_PNOR_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* * PNOR offset on the LPC FW address space. For now this should be 0 because diff --git a/include/hw/ppc/pnv_psi.h b/include/hw/ppc/pnv_psi.h index 8a04860aa8..e1e1ade0ce 100644 --- a/include/hw/ppc/pnv_psi.h +++ b/include/hw/ppc/pnv_psi.h @@ -20,7 +20,7 @@ #ifndef PPC_PNV_PSI_H #define PPC_PNV_PSI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ppc/xics.h" #include "hw/ppc/xive.h" #include "hw/core/qdev.h" diff --git a/include/hw/ppc/ppc4xx.h b/include/hw/ppc/ppc4xx.h index 2e94b00673..b76bf091cf 100644 --- a/include/hw/ppc/ppc4xx.h +++ b/include/hw/ppc/ppc4xx.h @@ -27,7 +27,7 @@ #include "hw/ppc/ppc.h" #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* * Generic DCR device diff --git a/include/hw/ppc/xive.h b/include/hw/ppc/xive.h index b7ca8544e4..e98d011998 100644 --- a/include/hw/ppc/xive.h +++ b/include/hw/ppc/xive.h @@ -139,7 +139,7 @@ #define PPC_XIVE_H #include "system/kvm.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ppc/xive_regs.h" #include "qom/object.h" diff --git a/include/hw/ppc/xive2.h b/include/hw/ppc/xive2.h index f4437e2c79..9e2af8d8b1 100644 --- a/include/hw/ppc/xive2.h +++ b/include/hw/ppc/xive2.h @@ -11,7 +11,7 @@ #include "hw/ppc/xive.h" #include "hw/ppc/xive2_regs.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* * XIVE2 Router (POWER10) diff --git a/include/hw/riscv/numa.h b/include/hw/riscv/numa.h index 2d9c41ba81..e68ce8e8af 100644 --- a/include/hw/riscv/numa.h +++ b/include/hw/riscv/numa.h @@ -20,7 +20,7 @@ #define RISCV_NUMA_H #include "hw/core/boards.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "system/numa.h" /** diff --git a/include/hw/riscv/riscv_hart.h b/include/hw/riscv/riscv_hart.h index a6ed73a195..197fa16231 100644 --- a/include/hw/riscv/riscv_hart.h +++ b/include/hw/riscv/riscv_hart.h @@ -21,7 +21,7 @@ #ifndef HW_RISCV_HART_H #define HW_RISCV_HART_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "target/riscv/cpu.h" #include "qom/object.h" diff --git a/include/hw/riscv/spike.h b/include/hw/riscv/spike.h index acd41e9058..6868976884 100644 --- a/include/hw/riscv/spike.h +++ b/include/hw/riscv/spike.h @@ -21,7 +21,7 @@ #include "hw/core/boards.h" #include "hw/riscv/riscv_hart.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define SPIKE_CPUS_MAX 8 #define SPIKE_SOCKETS_MAX 8 diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 806b78cc63..18a2a323a3 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -21,7 +21,7 @@ #include "hw/core/boards.h" #include "hw/riscv/riscv_hart.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/block/flash.h" #include "hw/intc/riscv_imsic.h" diff --git a/include/hw/rtc/allwinner-rtc.h b/include/hw/rtc/allwinner-rtc.h index bf415431cd..2b5ff06566 100644 --- a/include/hw/rtc/allwinner-rtc.h +++ b/include/hw/rtc/allwinner-rtc.h @@ -21,7 +21,7 @@ #define HW_MISC_ALLWINNER_RTC_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /** * Constants diff --git a/include/hw/rtc/aspeed_rtc.h b/include/hw/rtc/aspeed_rtc.h index 596dfebb46..ef37dd3d69 100644 --- a/include/hw/rtc/aspeed_rtc.h +++ b/include/hw/rtc/aspeed_rtc.h @@ -8,7 +8,7 @@ #ifndef HW_RTC_ASPEED_RTC_H #define HW_RTC_ASPEED_RTC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" struct AspeedRtcState { diff --git a/include/hw/rtc/goldfish_rtc.h b/include/hw/rtc/goldfish_rtc.h index 162be33863..55ed9c4085 100644 --- a/include/hw/rtc/goldfish_rtc.h +++ b/include/hw/rtc/goldfish_rtc.h @@ -22,7 +22,7 @@ #ifndef HW_RTC_GOLDFISH_RTC_H #define HW_RTC_GOLDFISH_RTC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_GOLDFISH_RTC "goldfish_rtc" diff --git a/include/hw/rtc/pl031.h b/include/hw/rtc/pl031.h index 9fd4be1abb..c8b26c2f00 100644 --- a/include/hw/rtc/pl031.h +++ b/include/hw/rtc/pl031.h @@ -14,7 +14,7 @@ #ifndef HW_RTC_PL031_H #define HW_RTC_PL031_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qom/object.h" diff --git a/include/hw/rtc/xlnx-zynqmp-rtc.h b/include/hw/rtc/xlnx-zynqmp-rtc.h index a542b87cb8..7d8505ce39 100644 --- a/include/hw/rtc/xlnx-zynqmp-rtc.h +++ b/include/hw/rtc/xlnx-zynqmp-rtc.h @@ -28,7 +28,7 @@ #define HW_RTC_XLNX_ZYNQMP_RTC_H #include "hw/core/register.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_XLNX_ZYNQMP_RTC "xlnx-zynmp.rtc" diff --git a/include/hw/s390x/3270-ccw.h b/include/hw/s390x/3270-ccw.h index 1439882294..6b73c8b51f 100644 --- a/include/hw/s390x/3270-ccw.h +++ b/include/hw/s390x/3270-ccw.h @@ -13,7 +13,7 @@ #ifndef HW_S390X_3270_CCW_H #define HW_S390X_3270_CCW_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/s390x/css.h" #include "hw/s390x/ccw-device.h" #include "qom/object.h" diff --git a/include/hw/s390x/css-bridge.h b/include/hw/s390x/css-bridge.h index 4f874ed781..1a29d3a542 100644 --- a/include/hw/s390x/css-bridge.h +++ b/include/hw/s390x/css-bridge.h @@ -14,7 +14,7 @@ #define HW_S390X_CSS_BRIDGE_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* virtual css bridge */ struct VirtualCssBridge { diff --git a/include/hw/s390x/s390_flic.h b/include/hw/s390x/s390_flic.h index 91edaaca40..c9db5279e3 100644 --- a/include/hw/s390x/s390_flic.h +++ b/include/hw/s390x/s390_flic.h @@ -13,7 +13,7 @@ #ifndef HW_S390_FLIC_H #define HW_S390_FLIC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/s390x/adapter.h" #include "hw/virtio/virtio.h" #include "qemu/queue.h" diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h index 33f01f85bb..ddc61f1c21 100644 --- a/include/hw/s390x/sclp.h +++ b/include/hw/s390x/sclp.h @@ -14,7 +14,7 @@ #ifndef HW_S390_SCLP_H #define HW_S390_SCLP_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "target/s390x/cpu-qom.h" #include "qom/object.h" diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index 3526bad746..8887ba8512 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -2,7 +2,7 @@ #define QEMU_HW_ESP_H #include "hw/scsi/scsi.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/fifo8.h" #include "qom/object.h" diff --git a/include/hw/sd/allwinner-sdhost.h b/include/hw/sd/allwinner-sdhost.h index 1b951177dd..d154d81d24 100644 --- a/include/hw/sd/allwinner-sdhost.h +++ b/include/hw/sd/allwinner-sdhost.h @@ -21,7 +21,7 @@ #define HW_SD_ALLWINNER_SDHOST_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/sd/sd.h" /** diff --git a/include/hw/sd/bcm2835_sdhost.h b/include/hw/sd/bcm2835_sdhost.h index f6bca5c397..8ba220d89e 100644 --- a/include/hw/sd/bcm2835_sdhost.h +++ b/include/hw/sd/bcm2835_sdhost.h @@ -14,7 +14,7 @@ #ifndef BCM2835_SDHOST_H #define BCM2835_SDHOST_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/sd/sd.h" #include "qom/object.h" diff --git a/include/hw/sd/sdhci.h b/include/hw/sd/sdhci.h index 51fb30ea52..32962c210d 100644 --- a/include/hw/sd/sdhci.h +++ b/include/hw/sd/sdhci.h @@ -26,7 +26,7 @@ #define SDHCI_H #include "hw/pci/pci_device.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/sd/sd.h" #include "qom/object.h" diff --git a/include/hw/sparc/sparc32_dma.h b/include/hw/sparc/sparc32_dma.h index cde8ec02cb..3181c17043 100644 --- a/include/hw/sparc/sparc32_dma.h +++ b/include/hw/sparc/sparc32_dma.h @@ -1,7 +1,7 @@ #ifndef SPARC32_DMA_H #define SPARC32_DMA_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/scsi/esp.h" #include "hw/net/lance.h" #include "qom/object.h" diff --git a/include/hw/sparc/sun4m_iommu.h b/include/hw/sparc/sun4m_iommu.h index 4e2ab34cde..ccefafedbc 100644 --- a/include/hw/sparc/sun4m_iommu.h +++ b/include/hw/sparc/sun4m_iommu.h @@ -25,7 +25,7 @@ #ifndef SUN4M_IOMMU_H #define SUN4M_IOMMU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define IOMMU_NREGS (4 * 4096 / 4) diff --git a/include/hw/sparc/sun4u_iommu.h b/include/hw/sparc/sun4u_iommu.h index f94566a72c..3ae81a2406 100644 --- a/include/hw/sparc/sun4u_iommu.h +++ b/include/hw/sparc/sun4u_iommu.h @@ -27,7 +27,7 @@ #ifndef SUN4U_IOMMU_H #define SUN4U_IOMMU_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define IOMMU_NREGS 3 diff --git a/include/hw/ssi/allwinner-a10-spi.h b/include/hw/ssi/allwinner-a10-spi.h index da46e29a27..6e0e299361 100644 --- a/include/hw/ssi/allwinner-a10-spi.h +++ b/include/hw/ssi/allwinner-a10-spi.h @@ -23,7 +23,7 @@ #define ALLWINNER_A10_SPI_H #include "hw/ssi/ssi.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/fifo8.h" #include "qom/object.h" diff --git a/include/hw/ssi/aspeed_smc.h b/include/hw/ssi/aspeed_smc.h index 25b95e7406..76831422c6 100644 --- a/include/hw/ssi/aspeed_smc.h +++ b/include/hw/ssi/aspeed_smc.h @@ -26,7 +26,7 @@ #define ASPEED_SMC_H #include "hw/ssi/ssi.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" struct AspeedSMCState; diff --git a/include/hw/ssi/bcm2835_spi.h b/include/hw/ssi/bcm2835_spi.h index d3f8cec111..d5891fd925 100644 --- a/include/hw/ssi/bcm2835_spi.h +++ b/include/hw/ssi/bcm2835_spi.h @@ -22,7 +22,7 @@ * THE SOFTWARE. */ -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ssi/ssi.h" #include "qom/object.h" #include "qemu/fifo8.h" diff --git a/include/hw/ssi/ibex_spi_host.h b/include/hw/ssi/ibex_spi_host.h index 5bd5557b9a..2aac6ee920 100644 --- a/include/hw/ssi/ibex_spi_host.h +++ b/include/hw/ssi/ibex_spi_host.h @@ -27,7 +27,7 @@ #ifndef IBEX_SPI_HOST_H #define IBEX_SPI_HOST_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ssi/ssi.h" #include "qemu/fifo8.h" #include "qom/object.h" diff --git a/include/hw/ssi/imx_spi.h b/include/hw/ssi/imx_spi.h index eeaf49bbac..9a95127755 100644 --- a/include/hw/ssi/imx_spi.h +++ b/include/hw/ssi/imx_spi.h @@ -10,7 +10,7 @@ #ifndef IMX_SPI_H #define IMX_SPI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ssi/ssi.h" #include "qemu/bitops.h" #include "qemu/fifo32.h" diff --git a/include/hw/ssi/mss-spi.h b/include/hw/ssi/mss-spi.h index ce6279c431..85e11f7266 100644 --- a/include/hw/ssi/mss-spi.h +++ b/include/hw/ssi/mss-spi.h @@ -25,7 +25,7 @@ #ifndef HW_MSS_SPI_H #define HW_MSS_SPI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ssi/ssi.h" #include "qemu/fifo32.h" #include "qom/object.h" diff --git a/include/hw/ssi/npcm7xx_fiu.h b/include/hw/ssi/npcm7xx_fiu.h index 7ebd422ca6..530d8e2f44 100644 --- a/include/hw/ssi/npcm7xx_fiu.h +++ b/include/hw/ssi/npcm7xx_fiu.h @@ -17,7 +17,7 @@ #define NPCM7XX_FIU_H #include "hw/ssi/ssi.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* * Number of registers in our device state structure. Don't change this without diff --git a/include/hw/ssi/npcm_pspi.h b/include/hw/ssi/npcm_pspi.h index 37cc784d96..dbf40710f3 100644 --- a/include/hw/ssi/npcm_pspi.h +++ b/include/hw/ssi/npcm_pspi.h @@ -17,7 +17,7 @@ #define NPCM_PSPI_H #include "hw/ssi/ssi.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* * Number of registers in our device state structure. Don't change this without diff --git a/include/hw/ssi/pl022.h b/include/hw/ssi/pl022.h index 25d58db5f3..afddc314c7 100644 --- a/include/hw/ssi/pl022.h +++ b/include/hw/ssi/pl022.h @@ -22,7 +22,7 @@ #ifndef HW_SSI_PL022_H #define HW_SSI_PL022_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_PL022 "pl022" diff --git a/include/hw/ssi/pnv_spi.h b/include/hw/ssi/pnv_spi.h index c591a0663d..31a690854b 100644 --- a/include/hw/ssi/pnv_spi.h +++ b/include/hw/ssi/pnv_spi.h @@ -22,7 +22,7 @@ #define PPC_PNV_SPI_H #include "hw/ssi/ssi.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/fifo8.h" #define TYPE_PNV_SPI "pnv-spi" diff --git a/include/hw/ssi/sifive_spi.h b/include/hw/ssi/sifive_spi.h index d0c40cdb11..e45becb8c5 100644 --- a/include/hw/ssi/sifive_spi.h +++ b/include/hw/ssi/sifive_spi.h @@ -23,7 +23,7 @@ #define HW_SIFIVE_SPI_H #include "qemu/fifo8.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define SIFIVE_SPI_REG_NUM (0x78 / 4) diff --git a/include/hw/ssi/stm32f2xx_spi.h b/include/hw/ssi/stm32f2xx_spi.h index 3683b4ad32..26b02429aa 100644 --- a/include/hw/ssi/stm32f2xx_spi.h +++ b/include/hw/ssi/stm32f2xx_spi.h @@ -25,7 +25,7 @@ #ifndef HW_STM32F2XX_SPI_H #define HW_STM32F2XX_SPI_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/ssi/ssi.h" #include "qom/object.h" diff --git a/include/hw/ssi/xilinx_spips.h b/include/hw/ssi/xilinx_spips.h index 56cf69a37d..c8f6c5053c 100644 --- a/include/hw/ssi/xilinx_spips.h +++ b/include/hw/ssi/xilinx_spips.h @@ -28,7 +28,7 @@ #include "hw/ssi/ssi.h" #include "qemu/fifo32.h" #include "hw/core/stream.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" typedef struct XilinxSPIPS XilinxSPIPS; diff --git a/include/hw/timer/a9gtimer.h b/include/hw/timer/a9gtimer.h index 6ae9122e4b..5c9b048b95 100644 --- a/include/hw/timer/a9gtimer.h +++ b/include/hw/timer/a9gtimer.h @@ -23,7 +23,7 @@ #ifndef A9GTIMER_H #define A9GTIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define A9_GTIMER_MAX_CPUS 4 diff --git a/include/hw/timer/allwinner-a10-pit.h b/include/hw/timer/allwinner-a10-pit.h index 623a1fec21..fe6a408022 100644 --- a/include/hw/timer/allwinner-a10-pit.h +++ b/include/hw/timer/allwinner-a10-pit.h @@ -2,7 +2,7 @@ #define ALLWINNER_A10_PIT_H #include "hw/core/ptimer.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_AW_A10_PIT "allwinner-A10-timer" diff --git a/include/hw/timer/arm_mptimer.h b/include/hw/timer/arm_mptimer.h index 65a96e2a0d..4c6f569631 100644 --- a/include/hw/timer/arm_mptimer.h +++ b/include/hw/timer/arm_mptimer.h @@ -21,7 +21,7 @@ #ifndef HW_TIMER_ARM_MPTIMER_H #define HW_TIMER_ARM_MPTIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define ARM_MPTIMER_MAX_CPUS 4 diff --git a/include/hw/timer/armv7m_systick.h b/include/hw/timer/armv7m_systick.h index fb73f78a7b..637dbf35c5 100644 --- a/include/hw/timer/armv7m_systick.h +++ b/include/hw/timer/armv7m_systick.h @@ -12,7 +12,7 @@ #ifndef HW_TIMER_ARMV7M_SYSTICK_H #define HW_TIMER_ARMV7M_SYSTICK_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "hw/core/ptimer.h" #include "hw/core/clock.h" diff --git a/include/hw/timer/avr_timer16.h b/include/hw/timer/avr_timer16.h index a1a032a24d..5c9dca134a 100644 --- a/include/hw/timer/avr_timer16.h +++ b/include/hw/timer/avr_timer16.h @@ -28,7 +28,7 @@ #ifndef HW_TIMER_AVR_TIMER16_H #define HW_TIMER_AVR_TIMER16_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qom/object.h" diff --git a/include/hw/timer/bcm2835_systmr.h b/include/hw/timer/bcm2835_systmr.h index 93cb3415a6..0674a18f12 100644 --- a/include/hw/timer/bcm2835_systmr.h +++ b/include/hw/timer/bcm2835_systmr.h @@ -9,7 +9,7 @@ #ifndef BCM2835_SYSTMR_H #define BCM2835_SYSTMR_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "qemu/timer.h" #include "qom/object.h" diff --git a/include/hw/timer/cadence_ttc.h b/include/hw/timer/cadence_ttc.h index e1251383f2..27b555e96a 100644 --- a/include/hw/timer/cadence_ttc.h +++ b/include/hw/timer/cadence_ttc.h @@ -18,7 +18,7 @@ #ifndef HW_TIMER_CADENCE_TTC_H #define HW_TIMER_CADENCE_TTC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" typedef struct { diff --git a/include/hw/timer/cmsdk-apb-dualtimer.h b/include/hw/timer/cmsdk-apb-dualtimer.h index 103ac22881..7e238f04df 100644 --- a/include/hw/timer/cmsdk-apb-dualtimer.h +++ b/include/hw/timer/cmsdk-apb-dualtimer.h @@ -26,7 +26,7 @@ #ifndef CMSDK_APB_DUALTIMER_H #define CMSDK_APB_DUALTIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/ptimer.h" #include "hw/core/clock.h" #include "qom/object.h" diff --git a/include/hw/timer/cmsdk-apb-timer.h b/include/hw/timer/cmsdk-apb-timer.h index f8c8fb8ce5..5ecda01776 100644 --- a/include/hw/timer/cmsdk-apb-timer.h +++ b/include/hw/timer/cmsdk-apb-timer.h @@ -12,7 +12,7 @@ #ifndef CMSDK_APB_TIMER_H #define CMSDK_APB_TIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/ptimer.h" #include "hw/core/clock.h" #include "qom/object.h" diff --git a/include/hw/timer/digic-timer.h b/include/hw/timer/digic-timer.h index f62242eaad..bcd80108a2 100644 --- a/include/hw/timer/digic-timer.h +++ b/include/hw/timer/digic-timer.h @@ -18,7 +18,7 @@ #ifndef HW_TIMER_DIGIC_TIMER_H #define HW_TIMER_DIGIC_TIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/ptimer.h" #include "qom/object.h" diff --git a/include/hw/timer/ibex_timer.h b/include/hw/timer/ibex_timer.h index 41f5c82a92..53055f3351 100644 --- a/include/hw/timer/ibex_timer.h +++ b/include/hw/timer/ibex_timer.h @@ -25,7 +25,7 @@ #ifndef HW_IBEX_TIMER_H #define HW_IBEX_TIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_IBEX_TIMER "ibex-timer" OBJECT_DECLARE_SIMPLE_TYPE(IbexTimerState, IBEX_TIMER) diff --git a/include/hw/timer/imx_epit.h b/include/hw/timer/imx_epit.h index 2947fad106..18d41ec139 100644 --- a/include/hw/timer/imx_epit.h +++ b/include/hw/timer/imx_epit.h @@ -29,7 +29,7 @@ #ifndef IMX_EPIT_H #define IMX_EPIT_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/ptimer.h" #include "hw/misc/imx_ccm.h" #include "qom/object.h" diff --git a/include/hw/timer/imx_gpt.h b/include/hw/timer/imx_gpt.h index 5c12f686e1..7f0d55b349 100644 --- a/include/hw/timer/imx_gpt.h +++ b/include/hw/timer/imx_gpt.h @@ -29,7 +29,7 @@ #ifndef IMX_GPT_H #define IMX_GPT_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/ptimer.h" #include "hw/misc/imx_ccm.h" #include "qom/object.h" diff --git a/include/hw/timer/mss-timer.h b/include/hw/timer/mss-timer.h index 0cc376f945..93a73fae72 100644 --- a/include/hw/timer/mss-timer.h +++ b/include/hw/timer/mss-timer.h @@ -25,7 +25,7 @@ #ifndef HW_MSS_TIMER_H #define HW_MSS_TIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/ptimer.h" #include "qom/object.h" diff --git a/include/hw/timer/npcm7xx_timer.h b/include/hw/timer/npcm7xx_timer.h index e287375dce..9ad42c65a8 100644 --- a/include/hw/timer/npcm7xx_timer.h +++ b/include/hw/timer/npcm7xx_timer.h @@ -17,7 +17,7 @@ #define NPCM7XX_TIMER_H #include "system/memory.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" /* Each Timer Module (TIM) instance holds five 25 MHz timers. */ diff --git a/include/hw/timer/nrf51_timer.h b/include/hw/timer/nrf51_timer.h index 76827c11dc..fe282ff78f 100644 --- a/include/hw/timer/nrf51_timer.h +++ b/include/hw/timer/nrf51_timer.h @@ -13,7 +13,7 @@ #ifndef NRF51_TIMER_H #define NRF51_TIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qom/object.h" #define TYPE_NRF51_TIMER "nrf51_soc.timer" diff --git a/include/hw/timer/renesas_cmt.h b/include/hw/timer/renesas_cmt.h index 1c0b65c1d5..e2aa6d47af 100644 --- a/include/hw/timer/renesas_cmt.h +++ b/include/hw/timer/renesas_cmt.h @@ -10,7 +10,7 @@ #define HW_TIMER_RENESAS_CMT_H #include "qemu/timer.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_RENESAS_CMT "renesas-cmt" diff --git a/include/hw/timer/renesas_tmr.h b/include/hw/timer/renesas_tmr.h index caf7eec0dc..061b8f2900 100644 --- a/include/hw/timer/renesas_tmr.h +++ b/include/hw/timer/renesas_tmr.h @@ -10,7 +10,7 @@ #define HW_TIMER_RENESAS_TMR_H #include "qemu/timer.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_RENESAS_TMR "renesas-tmr" diff --git a/include/hw/timer/sifive_pwm.h b/include/hw/timer/sifive_pwm.h index 6a8cf7b29e..d3a49be6b6 100644 --- a/include/hw/timer/sifive_pwm.h +++ b/include/hw/timer/sifive_pwm.h @@ -27,7 +27,7 @@ #ifndef HW_SIFIVE_PWM_H #define HW_SIFIVE_PWM_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qom/object.h" diff --git a/include/hw/timer/sse-counter.h b/include/hw/timer/sse-counter.h index b433e58d37..15bd1a5104 100644 --- a/include/hw/timer/sse-counter.h +++ b/include/hw/timer/sse-counter.h @@ -30,7 +30,7 @@ #ifndef SSE_COUNTER_H #define SSE_COUNTER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #include "qemu/notify.h" diff --git a/include/hw/timer/sse-timer.h b/include/hw/timer/sse-timer.h index 265ad32400..c9ad2225a6 100644 --- a/include/hw/timer/sse-timer.h +++ b/include/hw/timer/sse-timer.h @@ -24,7 +24,7 @@ #ifndef SSE_TIMER_H #define SSE_TIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qom/object.h" #include "hw/timer/sse-counter.h" diff --git a/include/hw/timer/stellaris-gptm.h b/include/hw/timer/stellaris-gptm.h index 9d663b58df..824723b273 100644 --- a/include/hw/timer/stellaris-gptm.h +++ b/include/hw/timer/stellaris-gptm.h @@ -11,7 +11,7 @@ #define HW_TIMER_STELLARIS_GPTM_H #include "qom/object.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/clock.h" diff --git a/include/hw/timer/stm32f2xx_timer.h b/include/hw/timer/stm32f2xx_timer.h index 90f40f1746..040e64d499 100644 --- a/include/hw/timer/stm32f2xx_timer.h +++ b/include/hw/timer/stm32f2xx_timer.h @@ -25,7 +25,7 @@ #ifndef HW_STM32F2XX_TIMER_H #define HW_STM32F2XX_TIMER_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/timer.h" #include "qom/object.h" diff --git a/include/hw/tricore/tc27x_soc.h b/include/hw/tricore/tc27x_soc.h index dd3a7485c8..2d2bdca3fd 100644 --- a/include/hw/tricore/tc27x_soc.h +++ b/include/hw/tricore/tc27x_soc.h @@ -21,7 +21,7 @@ #ifndef TC27X_SOC_H #define TC27X_SOC_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "target/tricore/cpu.h" #include "qom/object.h" diff --git a/include/hw/tricore/tricore_testdevice.h b/include/hw/tricore/tricore_testdevice.h index 2c57b62f22..98c87ba76b 100644 --- a/include/hw/tricore/tricore_testdevice.h +++ b/include/hw/tricore/tricore_testdevice.h @@ -18,7 +18,7 @@ #ifndef HW_TRICORE_TESTDEVICE_H #define HW_TRICORE_TESTDEVICE_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_TRICORE_TESTDEVICE "tricore_testdevice" #define TRICORE_TESTDEVICE(obj) \ diff --git a/include/hw/usb/imx-usb-phy.h b/include/hw/usb/imx-usb-phy.h index d1e867b77a..1b45b6e62a 100644 --- a/include/hw/usb/imx-usb-phy.h +++ b/include/hw/usb/imx-usb-phy.h @@ -1,7 +1,7 @@ #ifndef IMX_USB_PHY_H #define IMX_USB_PHY_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qemu/bitops.h" #include "qom/object.h" diff --git a/include/hw/usb/xlnx-usb-subsystem.h b/include/hw/usb/xlnx-usb-subsystem.h index b22e5d065b..e78ca743d3 100644 --- a/include/hw/usb/xlnx-usb-subsystem.h +++ b/include/hw/usb/xlnx-usb-subsystem.h @@ -26,7 +26,7 @@ #define XLNX_USB_SUBSYSTEM_H #include "hw/core/register.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/usb/xlnx-versal-usb2-ctrl-regs.h" #include "hw/usb/hcd-dwc3.h" diff --git a/include/hw/usb/xlnx-versal-usb2-ctrl-regs.h b/include/hw/usb/xlnx-versal-usb2-ctrl-regs.h index c1470da475..a8575ad669 100644 --- a/include/hw/usb/xlnx-versal-usb2-ctrl-regs.h +++ b/include/hw/usb/xlnx-versal-usb2-ctrl-regs.h @@ -27,7 +27,7 @@ #define XLNX_VERSAL_USB2_CTRL_REGS_H #include "hw/core/register.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #define TYPE_XILINX_VERSAL_USB2_CTRL_REGS "xlnx.versal-usb2-ctrl-regs" diff --git a/include/hw/virtio/virtio-mmio.h b/include/hw/virtio/virtio-mmio.h index aa49262022..1eab3c0dec 100644 --- a/include/hw/virtio/virtio-mmio.h +++ b/include/hw/virtio/virtio-mmio.h @@ -22,7 +22,7 @@ #ifndef HW_VIRTIO_MMIO_H #define HW_VIRTIO_MMIO_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/virtio/virtio-bus.h" /* QOM macros */ diff --git a/include/hw/watchdog/allwinner-wdt.h b/include/hw/watchdog/allwinner-wdt.h index 6f84dbd1a7..e6da42a9f7 100644 --- a/include/hw/watchdog/allwinner-wdt.h +++ b/include/hw/watchdog/allwinner-wdt.h @@ -25,7 +25,7 @@ #include "qom/object.h" #include "hw/core/ptimer.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" /* * This is a model of the Allwinner watchdog. diff --git a/include/hw/watchdog/cmsdk-apb-watchdog.h b/include/hw/watchdog/cmsdk-apb-watchdog.h index 9bf95ba06d..1c7de63999 100644 --- a/include/hw/watchdog/cmsdk-apb-watchdog.h +++ b/include/hw/watchdog/cmsdk-apb-watchdog.h @@ -31,7 +31,7 @@ #ifndef CMSDK_APB_WATCHDOG_H #define CMSDK_APB_WATCHDOG_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/ptimer.h" #include "hw/core/clock.h" #include "qom/object.h" diff --git a/include/hw/watchdog/sbsa_gwdt.h b/include/hw/watchdog/sbsa_gwdt.h index ace8fe04c8..307a4f291a 100644 --- a/include/hw/watchdog/sbsa_gwdt.h +++ b/include/hw/watchdog/sbsa_gwdt.h @@ -13,7 +13,7 @@ #define WDT_SBSA_GWDT_H #include "qemu/bitops.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #define TYPE_WDT_SBSA "sbsa_gwdt" diff --git a/include/hw/watchdog/wdt_aspeed.h b/include/hw/watchdog/wdt_aspeed.h index 830b0a7936..ecf20fbb4e 100644 --- a/include/hw/watchdog/wdt_aspeed.h +++ b/include/hw/watchdog/wdt_aspeed.h @@ -11,7 +11,7 @@ #define WDT_ASPEED_H #include "hw/misc/aspeed_scu.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "qom/object.h" #define TYPE_ASPEED_WDT "aspeed.wdt" diff --git a/include/hw/watchdog/wdt_imx2.h b/include/hw/watchdog/wdt_imx2.h index 53a8360e90..ad36b8820d 100644 --- a/include/hw/watchdog/wdt_imx2.h +++ b/include/hw/watchdog/wdt_imx2.h @@ -13,7 +13,7 @@ #define WDT_IMX2_H #include "qemu/bitops.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" #include "qom/object.h" diff --git a/include/hw/xen/xen_pvdev.h b/include/hw/xen/xen_pvdev.h index 629bec90d0..232c496008 100644 --- a/include/hw/xen/xen_pvdev.h +++ b/include/hw/xen/xen_pvdev.h @@ -1,7 +1,7 @@ #ifndef QEMU_HW_XEN_PVDEV_H #define QEMU_HW_XEN_PVDEV_H -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/xen/xen_backend_ops.h" /* ------------------------------------------------------------- */ diff --git a/rust/hw/core/wrapper.h b/rust/hw/core/wrapper.h index f6b34161a6..8278738f3d 100644 --- a/rust/hw/core/wrapper.h +++ b/rust/hw/core/wrapper.h @@ -24,7 +24,7 @@ typedef enum memory_order { #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "hw/core/clock.h" #include "hw/core/qdev-clock.h" #include "hw/core/qdev-properties.h" diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c index 8e74e24c19..0bf514cb09 100644 --- a/system/qdev-monitor.c +++ b/system/qdev-monitor.c @@ -18,7 +18,7 @@ */ #include "qemu/osdep.h" -#include "hw/sysbus.h" +#include "hw/core/sysbus.h" #include "monitor/hmp.h" #include "monitor/monitor.h" #include "monitor/qdev.h" From 9f6b0553eb69f455e40077100fb73c20b116e25e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:38:30 +0100 Subject: [PATCH 026/152] include: move hw/vmstate-if.h to hw/core/ Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- hw/core/vmstate-if.c | 2 +- include/hw/{ => core}/vmstate-if.h | 0 include/migration/register.h | 2 +- include/migration/vmstate.h | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) rename include/hw/{ => core}/vmstate-if.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 44d84aa243..5d33892c34 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3656,7 +3656,7 @@ M: Peter Xu M: Fabiano Rosas S: Maintained F: hw/core/vmstate-if.c -F: include/hw/vmstate-if.h +F: include/hw/core/vmstate-if.h F: include/migration/ F: include/qemu/userfaultfd.h F: migration/ diff --git a/hw/core/vmstate-if.c b/hw/core/vmstate-if.c index bf453620fe..c39631c758 100644 --- a/hw/core/vmstate-if.c +++ b/hw/core/vmstate-if.c @@ -7,7 +7,7 @@ */ #include "qemu/osdep.h" -#include "hw/vmstate-if.h" +#include "hw/core/vmstate-if.h" static const TypeInfo vmstate_if_info = { .name = TYPE_VMSTATE_IF, diff --git a/include/hw/vmstate-if.h b/include/hw/core/vmstate-if.h similarity index 100% rename from include/hw/vmstate-if.h rename to include/hw/core/vmstate-if.h diff --git a/include/migration/register.h b/include/migration/register.h index ae79794cdd..d0f37f5f43 100644 --- a/include/migration/register.h +++ b/include/migration/register.h @@ -14,7 +14,7 @@ #ifndef MIGRATION_REGISTER_H #define MIGRATION_REGISTER_H -#include "hw/vmstate-if.h" +#include "hw/core/vmstate-if.h" /** * struct SaveVMHandlers: handler structure to finely control diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index a87a5efa42..ed9095a466 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -27,7 +27,7 @@ #ifndef QEMU_VMSTATE_H #define QEMU_VMSTATE_H -#include "hw/vmstate-if.h" +#include "hw/core/vmstate-if.h" typedef struct VMStateInfo VMStateInfo; typedef struct VMStateField VMStateField; From 048a23851cd44e39c166bb31b733e9fd38c77cb8 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 08:41:37 +0100 Subject: [PATCH 027/152] include: move hw/hw.h to hw/core/, rename Call it include/hw/core/hw-error.h since that is the only thing it contains. Signed-off-by: Paolo Bonzini --- hw/arm/integratorcp.c | 2 +- hw/arm/omap1.c | 2 +- hw/arm/xen-stubs.c | 2 +- hw/audio/lm4549.c | 2 +- hw/core/loader.c | 2 +- hw/display/bcm2835_fb.c | 2 +- hw/display/exynos4210_fimd.c | 2 +- hw/display/g364fb.c | 2 +- hw/dma/pl080.c | 2 +- hw/dma/xilinx_axidma.c | 2 +- hw/i386/xen/xen-hvm.c | 2 +- hw/intc/exynos4210_combiner.c | 2 +- hw/misc/omap_clk.c | 2 +- hw/net/e1000e.c | 2 +- hw/net/igb.c | 2 +- hw/net/igbvf.c | 2 +- hw/net/vmxnet3.c | 2 +- hw/net/xilinx_axienet.c | 2 +- hw/ppc/ppce500_spin.c | 2 +- hw/timer/a9gtimer.c | 2 +- hw/timer/arm_mptimer.c | 2 +- hw/vfio/device.c | 2 +- hw/vfio/helpers.c | 2 +- hw/vfio/igd.c | 2 +- hw/vfio/listener.c | 2 +- hw/vfio/migration.c | 2 +- hw/vfio/pci.c | 2 +- hw/vfio/region.c | 2 +- hw/vfio/spapr.c | 2 +- hw/xen/xen-hvm-common.c | 2 +- include/hw/{hw.h => core/hw-error.h} | 0 scripts/analyze-inclusions | 10 +++++----- system/cpus.c | 2 +- target/ppc/kvm.c | 2 +- target/ppc/mmu-hash64.c | 2 +- target/s390x/mmu_helper.c | 2 +- 36 files changed, 39 insertions(+), 39 deletions(-) rename include/hw/{hw.h => core/hw-error.h} (100%) diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index 118808f2dc..0bf519b6bb 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -23,7 +23,7 @@ #include "qemu/log.h" #include "qemu/error-report.h" #include "hw/char/pl011.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/sd/sd.h" #include "qom/object.h" diff --git a/hw/arm/omap1.c b/hw/arm/omap1.c index f3d6be1e29..f5ff4b107a 100644 --- a/hw/arm/omap1.c +++ b/hw/arm/omap1.c @@ -24,7 +24,7 @@ #include "qapi/error.h" #include "cpu.h" #include "system/address-spaces.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/arm/boot.h" diff --git a/hw/arm/xen-stubs.c b/hw/arm/xen-stubs.c index 6a83043553..00bc310252 100644 --- a/hw/arm/xen-stubs.c +++ b/hw/arm/xen-stubs.c @@ -7,7 +7,7 @@ #include "qemu/osdep.h" #include "qapi/qapi-commands-migration.h" #include "system/xen.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/xen/xen-hvm-common.h" #include "hw/xen/arch_hvm.h" diff --git a/hw/audio/lm4549.c b/hw/audio/lm4549.c index bf711c49c0..f85226d1ac 100644 --- a/hw/audio/lm4549.c +++ b/hw/audio/lm4549.c @@ -14,7 +14,7 @@ */ #include "qemu/osdep.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "qemu/log.h" #include "qemu/audio.h" #include "lm4549.h" diff --git a/hw/core/loader.c b/hw/core/loader.c index 40cb187a11..8252616fdd 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -50,7 +50,7 @@ #include "qapi/type-helpers.h" #include "qemu/units.h" #include "trace.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "disas/disas.h" #include "migration/cpr.h" #include "migration/vmstate.h" diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c index 8eec0dc600..75d7c0f849 100644 --- a/hw/display/bcm2835_fb.c +++ b/hw/display/bcm2835_fb.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" #include "hw/display/bcm2835_fb.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "ui/console.h" #include "framebuffer.h" diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c index 7f841b8804..a97054132f 100644 --- a/hw/display/exynos4210_fimd.c +++ b/hw/display/exynos4210_fimd.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "hw/core/qdev-properties.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/sysbus.h" #include "migration/vmstate.h" diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c index 2eefafcaf6..50952e9934 100644 --- a/hw/display/g364fb.c +++ b/hw/display/g364fb.c @@ -19,7 +19,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "qapi/error.h" diff --git a/hw/dma/pl080.c b/hw/dma/pl080.c index 514206b7c3..3f8acb03de 100644 --- a/hw/dma/pl080.c +++ b/hw/dma/pl080.c @@ -13,7 +13,7 @@ #include "qemu/log.h" #include "qemu/module.h" #include "hw/dma/pl080.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "qapi/error.h" diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index 8488f125b5..22dec8b3eb 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -26,7 +26,7 @@ #include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/timer.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" #include "hw/core/qdev-properties.h" diff --git a/hw/i386/xen/xen-hvm.c b/hw/i386/xen/xen-hvm.c index 591da26d45..a6e1683885 100644 --- a/hw/i386/xen/xen-hvm.c +++ b/hw/i386/xen/xen-hvm.c @@ -15,7 +15,7 @@ #include "qapi/qapi-commands-migration.h" #include "trace.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/i386/pc.h" #include "hw/core/irq.h" #include "hw/i386/apic-msidef.h" diff --git a/hw/intc/exynos4210_combiner.c b/hw/intc/exynos4210_combiner.c index ec935a084d..e8cac331e4 100644 --- a/hw/intc/exynos4210_combiner.c +++ b/hw/intc/exynos4210_combiner.c @@ -33,7 +33,7 @@ #include "qemu/module.h" #include "hw/intc/exynos4210_combiner.h" #include "hw/arm/exynos4210.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "qom/object.h" diff --git a/hw/misc/omap_clk.c b/hw/misc/omap_clk.c index 37afef0990..e927ef22a0 100644 --- a/hw/misc/omap_clk.c +++ b/hw/misc/omap_clk.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/arm/omap.h" diff --git a/hw/net/e1000e.c b/hw/net/e1000e.c index 3d4683370c..9faf0c74c3 100644 --- a/hw/net/e1000e.c +++ b/hw/net/e1000e.c @@ -41,7 +41,7 @@ #include "qemu/module.h" #include "qemu/range.h" #include "system/system.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/net/mii.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" diff --git a/hw/net/igb.c b/hw/net/igb.c index d39eba9f64..c076807e71 100644 --- a/hw/net/igb.c +++ b/hw/net/igb.c @@ -45,7 +45,7 @@ #include "qemu/module.h" #include "qemu/range.h" #include "system/system.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/net/mii.h" #include "hw/pci/pci.h" #include "hw/pci/pcie.h" diff --git a/hw/net/igbvf.c b/hw/net/igbvf.c index 9b0db8f841..48d56e43ac 100644 --- a/hw/net/igbvf.c +++ b/hw/net/igbvf.c @@ -38,7 +38,7 @@ */ #include "qemu/osdep.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/net/mii.h" #include "hw/pci/pci_device.h" #include "hw/pci/pcie.h" diff --git a/hw/net/vmxnet3.c b/hw/net/vmxnet3.c index bae3a44cb0..97156dd33b 100644 --- a/hw/net/vmxnet3.c +++ b/hw/net/vmxnet3.c @@ -16,7 +16,7 @@ */ #include "qemu/osdep.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/pci/pci.h" #include "hw/core/qdev-properties.h" #include "net/tap.h" diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c index 29c09b88eb..d85f8bb23f 100644 --- a/hw/net/xilinx_axienet.c +++ b/hw/net/xilinx_axienet.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/sysbus.h" #include "qapi/error.h" #include "qemu/log.h" diff --git a/hw/ppc/ppce500_spin.c b/hw/ppc/ppce500_spin.c index a066ada77e..85bdcac43a 100644 --- a/hw/ppc/ppce500_spin.c +++ b/hw/ppc/ppce500_spin.c @@ -30,7 +30,7 @@ #include "qemu/osdep.h" #include "qemu/module.h" #include "qemu/units.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/sysbus.h" #include "system/hw_accel.h" #include "hw/ppc/ppc.h" diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c index a2363a89a5..3a086915c8 100644 --- a/hw/timer/a9gtimer.c +++ b/hw/timer/a9gtimer.c @@ -21,7 +21,7 @@ */ #include "qemu/osdep.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/timer/a9gtimer.h" diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c index 869db913d4..88158144b2 100644 --- a/hw/timer/arm_mptimer.c +++ b/hw/timer/arm_mptimer.c @@ -20,7 +20,7 @@ */ #include "qemu/osdep.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/ptimer.h" #include "hw/core/qdev-properties.h" diff --git a/hw/vfio/device.c b/hw/vfio/device.c index 76869828fc..19d1236ed7 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -23,7 +23,7 @@ #include "hw/vfio/vfio-device.h" #include "hw/vfio/pci.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "trace.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/vfio/helpers.c b/hw/vfio/helpers.c index 23d13e5db5..2cbc7b4964 100644 --- a/hw/vfio/helpers.c +++ b/hw/vfio/helpers.c @@ -24,7 +24,7 @@ #include "system/kvm.h" #include "hw/vfio/vfio-device.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "qapi/error.h" #include "vfio-helpers.h" diff --git a/hw/vfio/igd.c b/hw/vfio/igd.c index cff413c16f..6aacf27284 100644 --- a/hw/vfio/igd.c +++ b/hw/vfio/igd.c @@ -16,7 +16,7 @@ #include "qapi/error.h" #include "qapi/qmp/qerror.h" #include "hw/core/boards.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/nvram/fw_cfg.h" #include "pci.h" #include "pci-quirks.h" diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 2d7d3a4645..7af0107535 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -30,7 +30,7 @@ #include "hw/vfio/pci.h" #include "system/address-spaces.h" #include "system/memory.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "qemu/error-report.h" #include "qemu/main-loop.h" #include "qemu/range.h" diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 4c06e3db93..fde343f06e 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -30,7 +30,7 @@ #include "exec/ramlist.h" #include "pci.h" #include "trace.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "vfio-migration-internal.h" /* diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index a0a66b105a..c734472721 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -23,7 +23,7 @@ #include #include -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/pci/msi.h" #include "hw/pci/msix.h" #include "hw/pci/pci_bridge.h" diff --git a/hw/vfio/region.c b/hw/vfio/region.c index b165ab0b93..ca75ab1be4 100644 --- a/hw/vfio/region.c +++ b/hw/vfio/region.c @@ -23,7 +23,7 @@ #include "hw/vfio/vfio-region.h" #include "hw/vfio/vfio-device.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "trace.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/vfio/spapr.c b/hw/vfio/spapr.c index 0f23681a3f..a9f093c357 100644 --- a/hw/vfio/spapr.c +++ b/hw/vfio/spapr.c @@ -16,7 +16,7 @@ #include "system/address-spaces.h" #include "hw/vfio/vfio-container-legacy.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "qemu/error-report.h" #include "qapi/error.h" #include "trace.h" diff --git a/hw/xen/xen-hvm-common.c b/hw/xen/xen-hvm-common.c index 5d11b50db9..59c73dfaeb 100644 --- a/hw/xen/xen-hvm-common.c +++ b/hw/xen/xen-hvm-common.c @@ -7,7 +7,7 @@ #include "exec/target_page.h" #include "trace.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/pci/pci_host.h" #include "hw/xen/xen-hvm-common.h" #include "hw/xen/xen-bus.h" diff --git a/include/hw/hw.h b/include/hw/core/hw-error.h similarity index 100% rename from include/hw/hw.h rename to include/hw/core/hw-error.h diff --git a/scripts/analyze-inclusions b/scripts/analyze-inclusions index d2c566667d..50a7d95d9e 100644 --- a/scripts/analyze-inclusions +++ b/scripts/analyze-inclusions @@ -46,7 +46,7 @@ grep_include() { } echo Found $(find . -name "*.d" | wc -l) object files -echo $(grep_include -F 'hw/hw.h') files include hw/hw.h +echo $(grep_include -F 'hw/core/hw-error.h') files include hw/core/hw-error.h echo $(grep_include 'target/[a-z0-9]*/cpu\.h') files include cpu.h echo $(grep_include -F 'qapi-types.h') files include qapi-types.h echo $(grep_include -F 'trace/generated-tracers.h') files include generated-tracers.h @@ -85,8 +85,8 @@ analyze() { echo osdep.h: analyze ../include/qemu/osdep.h -echo hw/hw.h: -analyze -include ../include/qemu/osdep.h ../include/hw/hw.h +echo hw/core/hw-error.h: +analyze -include ../include/qemu/osdep.h ../include/hw/core/hw-error.h echo trace/generated-tracers.h: analyze -include ../include/qemu/osdep.h trace/generated-tracers.h @@ -94,5 +94,5 @@ analyze -include ../include/qemu/osdep.h trace/generated-tracers.h echo target/i386/cpu.h: analyze -DCOMPILING_PER_TARGET -I../target/i386 -Ii386-softmmu -include ../include/qemu/osdep.h ../target/i386/cpu.h -echo hw/hw.h + COMPILING_PER_TARGET: -analyze -DCOMPILING_PER_TARGET -I../target/i386 -Ii386-softmmu -include ../include/qemu/osdep.h ../include/hw/hw.h +echo hw/core/hw-error.h + COMPILING_PER_TARGET: +analyze -DCOMPILING_PER_TARGET -I../target/i386 -Ii386-softmmu -include ../include/qemu/osdep.h ../include/hw/core/hw-error.h diff --git a/system/cpus.c b/system/cpus.c index a0e1debfea..49deeb9468 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -45,7 +45,7 @@ #include "system/cpu-timers.h" #include "system/whpx.h" #include "hw/core/boards.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "trace.h" #ifdef CONFIG_LINUX diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index 43124bf1c7..2c96eca584 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -34,7 +34,7 @@ #include "hw/ppc/spapr.h" #include "hw/ppc/spapr_cpu_core.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/ppc/ppc.h" #include "migration/qemu-file-types.h" #include "system/watchdog.h" diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c index dd337558aa..d026abadd1 100644 --- a/target/ppc/mmu-hash64.c +++ b/target/ppc/mmu-hash64.c @@ -28,7 +28,7 @@ #include "kvm_ppc.h" #include "mmu-hash64.h" #include "exec/log.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "internal.h" #include "mmu-book3s-v3.h" #include "mmu-books.h" diff --git a/target/s390x/mmu_helper.c b/target/s390x/mmu_helper.c index 7a7b381059..7063f1a905 100644 --- a/target/s390x/mmu_helper.c +++ b/target/s390x/mmu_helper.c @@ -26,7 +26,7 @@ #include "system/memory.h" #include "exec/page-protection.h" #include "exec/target_page.h" -#include "hw/hw.h" +#include "hw/core/hw-error.h" #include "hw/s390x/storage-keys.h" #include "hw/core/boards.h" From 7f548b8f231f228b22ecd65ff13a3c8799dd65b6 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 27 Nov 2025 09:41:14 +0100 Subject: [PATCH 028/152] include: reorganize memory API headers Move RAMBlock functions out of ram_addr.h and cpu-common.h; move memory API headers out of include/exec and into include/system. Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- accel/mshv/mshv-all.c | 1 + accel/tcg/cputlb.c | 2 +- accel/tcg/tcg-accel-ops-mttcg.c | 1 + backends/hostmem.c | 1 + block/blkio.c | 2 +- dump/dump.c | 1 + hw/acpi/ghes.c | 1 + hw/acpi/nvdimm.c | 1 + hw/acpi/vmgenid.c | 1 + hw/arm/omap1.c | 1 + hw/audio/marvell_88w8618.c | 1 + hw/char/riscv_htif.c | 1 + hw/core/cpu-common.c | 1 + hw/core/machine-qmp-cmds.c | 1 + hw/core/numa.c | 3 +- hw/display/exynos4210_fimd.c | 1 + hw/display/omap_lcdc.c | 1 + hw/display/ramfb.c | 1 + hw/display/vga.c | 1 + hw/dma/i8257.c | 1 + hw/dma/omap_dma.c | 1 + hw/dma/rc4030.c | 1 + hw/dma/sifive_pdma.c | 1 + hw/hyperv/hyperv.c | 1 + hw/hyperv/syndbg.c | 1 + hw/hyperv/vmbus.c | 1 + hw/i386/kvm/clock.c | 1 + hw/i386/vapic.c | 1 + hw/intc/apic.c | 1 + hw/intc/xive2.c | 1 + hw/m68k/next-cube.c | 1 + hw/microblaze/boot.c | 1 + hw/misc/pc-testdev.c | 1 + hw/net/fsl_etsec/rings.c | 1 + hw/net/mcf_fec.c | 1 + hw/net/opencores_eth.c | 1 + hw/net/xgmac.c | 1 + hw/nvram/spapr_nvram.c | 1 + hw/ppc/amigaone.c | 1 + hw/ppc/e500.c | 1 + hw/ppc/pegasos.c | 1 + hw/ppc/pnv.c | 1 + hw/ppc/ppc440_uc.c | 1 + hw/ppc/spapr.c | 1 + hw/ppc/spapr_drc.c | 1 + hw/ppc/spapr_events.c | 1 + hw/ppc/spapr_hcall.c | 1 + hw/ppc/spapr_rtas.c | 1 + hw/ppc/spapr_tpm_proxy.c | 1 + hw/ppc/virtex_ml507.c | 1 + hw/remote/proxy-memory-listener.c | 1 + hw/s390x/css.c | 1 + hw/s390x/ipl.c | 1 + hw/s390x/s390-pci-bus.c | 1 + hw/s390x/s390-stattrib.c | 1 + hw/s390x/virtio-ccw.c | 1 + hw/scsi/vmw_pvscsi.c | 1 + hw/sparc/leon3.c | 1 + hw/vfio-user/container.c | 1 + hw/vfio/container.c | 2 +- hw/vfio/helpers.c | 1 + hw/vfio/migration.c | 2 +- hw/virtio/vhost.c | 1 + hw/xen/xen-mapcache.c | 1 + hw/xen/xen_pt_graphics.c | 1 + hw/xtensa/xtfpga.c | 1 + include/exec/cpu-common.h | 74 ----------- include/exec/cputlb.h | 1 + include/exec/translation-block.h | 2 + include/hw/core/qdev-properties-system.h | 1 + include/hw/i2c/smbus_eeprom.h | 2 +- include/hw/xen/xen-hvm-common.h | 1 + include/system/balloon.h | 2 +- include/system/block-ram-registrar.h | 2 +- include/system/iommufd.h | 2 +- include/system/memory.h | 16 ++- include/system/memory_mapping.h | 4 +- include/system/physmem.h | 2 +- include/system/ram_addr.h | 136 +++---------------- include/system/ramblock.h | 160 ++++++++++++++++++++++- include/{exec => system}/ramlist.h | 10 +- include/system/xen-mapcache.h | 1 - include/system/xen.h | 3 +- migration/migration.h | 3 +- migration/ram.c | 2 +- migration/ram.h | 1 + rust/hw/char/pl011/src/bindings.rs | 4 +- rust/hw/core/src/bindings.rs | 2 +- rust/system/src/bindings.rs | 5 +- stubs/physmem.c | 2 +- stubs/ram-block.c | 4 +- system/ioport.c | 1 + system/memory.c | 2 +- system/physmem.c | 2 +- target/arm/kvm.c | 1 + target/i386/kvm/kvm.c | 1 + target/i386/sev.c | 1 + target/ppc/kvm.c | 2 +- target/s390x/kvm/kvm.c | 2 +- tests/qtest/fuzz/generic_fuzz.c | 2 +- util/vfio-helpers.c | 2 +- 102 files changed, 298 insertions(+), 234 deletions(-) rename include/{exec => system}/ramlist.h (94%) diff --git a/MAINTAINERS b/MAINTAINERS index 5d33892c34..a03898ccb6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3254,9 +3254,9 @@ R: Philippe Mathieu-Daudé S: Supported F: include/system/ioport.h F: include/exec/memop.h +F: include/system/ram_addr.h F: include/system/memory.h F: include/system/physmem.h -F: include/system/ram_addr.h F: include/system/ramblock.h F: include/system/memory_mapping.h F: system/dma-helpers.c diff --git a/accel/mshv/mshv-all.c b/accel/mshv/mshv-all.c index 47c67ef8cc..4675cb886f 100644 --- a/accel/mshv/mshv-all.c +++ b/accel/mshv/mshv-all.c @@ -31,6 +31,7 @@ #include "qemu/guest-random.h" #include "accel/accel-ops.h" #include "accel/accel-cpu-ops.h" +#include "exec/cpu-common.h" #include "system/cpus.h" #include "system/runstate.h" #include "system/accel-blocker.h" diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index fd1606c856..655d1e113f 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -30,7 +30,7 @@ #include "accel/tcg/cpu-mmu-index.h" #include "exec/cputlb.h" #include "exec/tb-flush.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "exec/mmu-access-type.h" #include "exec/tlb-common.h" #include "exec/vaddr.h" diff --git a/accel/tcg/tcg-accel-ops-mttcg.c b/accel/tcg/tcg-accel-ops-mttcg.c index 89299829c3..4160e2ba94 100644 --- a/accel/tcg/tcg-accel-ops-mttcg.c +++ b/accel/tcg/tcg-accel-ops-mttcg.c @@ -24,6 +24,7 @@ */ #include "qemu/osdep.h" +#include "exec/cpu-common.h" #include "system/tcg.h" #include "system/replay.h" #include "exec/icount.h" diff --git a/backends/hostmem.c b/backends/hostmem.c index 67827c42b8..15d4365b69 100644 --- a/backends/hostmem.c +++ b/backends/hostmem.c @@ -12,6 +12,7 @@ #include "qemu/osdep.h" #include "system/hostmem.h" +#include "system/ramblock.h" #include "hw/core/boards.h" #include "qapi/error.h" #include "qapi/qapi-builtin-visit.h" diff --git a/block/blkio.c b/block/blkio.c index 4142673984..20f138a38c 100644 --- a/block/blkio.c +++ b/block/blkio.c @@ -12,7 +12,7 @@ #include #include "block/block_int.h" #include "system/memory.h" -#include "exec/cpu-common.h" /* for qemu_ram_get_fd() */ +#include "system/ramblock.h" #include "qemu/defer-call.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/dump/dump.c b/dump/dump.c index 15bbcc0c61..f7a99a7af2 100644 --- a/dump/dump.c +++ b/dump/dump.c @@ -15,6 +15,7 @@ #include "qemu/cutils.h" #include "elf.h" #include "qemu/bswap.h" +#include "exec/cpu-common.h" #include "exec/target_page.h" #include "monitor/monitor.h" #include "system/dump.h" diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c index 06555905ce..365156dff9 100644 --- a/hw/acpi/ghes.c +++ b/hw/acpi/ghes.c @@ -27,6 +27,7 @@ #include "hw/acpi/generic_event_device.h" #include "hw/nvram/fw_cfg.h" #include "qemu/uuid.h" +#include "exec/cpu-common.h" #define ACPI_HW_ERROR_FW_CFG_FILE "etc/hardware_errors" #define ACPI_HW_ERROR_ADDR_FW_CFG_FILE "etc/hardware_errors_addr" diff --git a/hw/acpi/nvdimm.c b/hw/acpi/nvdimm.c index 732d613ac0..eb4b477076 100644 --- a/hw/acpi/nvdimm.c +++ b/hw/acpi/nvdimm.c @@ -36,6 +36,7 @@ #include "hw/mem/nvdimm.h" #include "qemu/nvdimm-utils.h" #include "trace.h" +#include "exec/cpu-common.h" /* * define Byte Addressable Persistent Memory (PM) Region according to diff --git a/hw/acpi/vmgenid.c b/hw/acpi/vmgenid.c index e87c025696..70ad029057 100644 --- a/hw/acpi/vmgenid.c +++ b/hw/acpi/vmgenid.c @@ -21,6 +21,7 @@ #include "hw/core/qdev-properties-system.h" #include "migration/vmstate.h" #include "system/reset.h" +#include "exec/cpu-common.h" void vmgenid_build_acpi(VmGenIdState *vms, GArray *table_data, GArray *guid, BIOSLinker *linker, const char *oem_id) diff --git a/hw/arm/omap1.c b/hw/arm/omap1.c index f5ff4b107a..9ca8eecfa0 100644 --- a/hw/arm/omap1.c +++ b/hw/arm/omap1.c @@ -24,6 +24,7 @@ #include "qapi/error.h" #include "cpu.h" #include "system/address-spaces.h" +#include "exec/cpu-common.h" #include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c index 6d5e99123d..4ad4a220a9 100644 --- a/hw/audio/marvell_88w8618.c +++ b/hw/audio/marvell_88w8618.c @@ -12,6 +12,7 @@ #include "qemu/osdep.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" diff --git a/hw/char/riscv_htif.c b/hw/char/riscv_htif.c index a78ea9b01c..e9efab16e9 100644 --- a/hw/char/riscv_htif.c +++ b/hw/char/riscv_htif.c @@ -31,6 +31,7 @@ #include "system/address-spaces.h" #include "system/dma.h" #include "system/runstate.h" +#include "exec/cpu-common.h" #include "trace.h" #define HTIF_DEV_SHIFT 56 diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c index 2e925880af..6d54c12a77 100644 --- a/hw/core/cpu-common.c +++ b/hw/core/cpu-common.c @@ -19,6 +19,7 @@ */ #include "qemu/osdep.h" +#include "exec/cpu-common.h" #include "qapi/error.h" #include "hw/core/cpu.h" #include "system/hw_accel.h" diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c index d23466177d..79cbcdd63e 100644 --- a/hw/core/machine-qmp-cmds.c +++ b/hw/core/machine-qmp-cmds.c @@ -26,6 +26,7 @@ #include "system/hostmem.h" #include "system/hw_accel.h" #include "system/numa.h" +#include "system/ramlist.h" #include "system/runstate.h" #include "system/system.h" #include "hw/s390x/storage-keys.h" diff --git a/hw/core/numa.c b/hw/core/numa.c index fa78dacb6b..f462883c87 100644 --- a/hw/core/numa.c +++ b/hw/core/numa.c @@ -27,7 +27,8 @@ #include "system/hostmem.h" #include "system/numa.h" #include "exec/cpu-common.h" -#include "exec/ramlist.h" +#include "system/ramlist.h" +#include "system/ramblock.h" #include "qemu/error-report.h" #include "qapi/error.h" #include "qapi/opts-visitor.h" diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c index a97054132f..2d8fa7ee94 100644 --- a/hw/display/exynos4210_fimd.c +++ b/hw/display/exynos4210_fimd.c @@ -27,6 +27,7 @@ #include "hw/core/hw-error.h" #include "hw/core/irq.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "ui/console.h" #include "ui/pixel_ops.h" diff --git a/hw/display/omap_lcdc.c b/hw/display/omap_lcdc.c index 90a9731454..c41c65bb2e 100644 --- a/hw/display/omap_lcdc.c +++ b/hw/display/omap_lcdc.c @@ -23,6 +23,7 @@ #include "hw/arm/omap.h" #include "framebuffer.h" #include "ui/pixel_ops.h" +#include "exec/cpu-common.h" struct omap_lcd_panel_s { MemoryRegion *sysmem; diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c index ad12fb1782..50c25706a5 100644 --- a/hw/display/ramfb.c +++ b/hw/display/ramfb.c @@ -18,6 +18,7 @@ #include "hw/display/bochs-vbe.h" /* for limits */ #include "ui/console.h" #include "system/reset.h" +#include "exec/cpu-common.h" struct QEMU_PACKED RAMFBCfg { uint64_t addr; diff --git a/hw/display/vga.c b/hw/display/vga.c index 90b89cf404..59a65cbbff 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -25,6 +25,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "system/reset.h" +#include "system/ramblock.h" #include "qapi/error.h" #include "qemu/target-info.h" #include "hw/display/vga.h" diff --git a/hw/dma/i8257.c b/hw/dma/i8257.c index d909d6c8fc..3637d8f82d 100644 --- a/hw/dma/i8257.c +++ b/hw/dma/i8257.c @@ -27,6 +27,7 @@ #include "hw/core/qdev-properties.h" #include "migration/vmstate.h" #include "hw/dma/i8257.h" +#include "exec/cpu-common.h" #include "qapi/error.h" #include "qemu/main-loop.h" #include "qemu/module.h" diff --git a/hw/dma/omap_dma.c b/hw/dma/omap_dma.c index 2bf9ebad56..963ce6fd10 100644 --- a/hw/dma/omap_dma.c +++ b/hw/dma/omap_dma.c @@ -23,6 +23,7 @@ #include "hw/arm/omap.h" #include "hw/core/irq.h" #include "hw/arm/soc_dma.h" +#include "exec/cpu-common.h" struct omap_dma_channel_s { /* transfer data */ diff --git a/hw/dma/rc4030.c b/hw/dma/rc4030.c index 93db286e69..159d017391 100644 --- a/hw/dma/rc4030.c +++ b/hw/dma/rc4030.c @@ -27,6 +27,7 @@ #include "hw/core/irq.h" #include "hw/mips/mips.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "qapi/error.h" #include "qemu/timer.h" diff --git a/hw/dma/sifive_pdma.c b/hw/dma/sifive_pdma.c index 2844515b2d..6d06ec0375 100644 --- a/hw/dma/sifive_pdma.c +++ b/hw/dma/sifive_pdma.c @@ -27,6 +27,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "system/dma.h" #include "hw/dma/sifive_pdma.h" diff --git a/hw/hyperv/hyperv.c b/hw/hyperv/hyperv.c index e4d0688dbf..27e323a819 100644 --- a/hw/hyperv/hyperv.c +++ b/hw/hyperv/hyperv.c @@ -14,6 +14,7 @@ #include "system/address-spaces.h" #include "system/memory.h" #include "exec/target_page.h" +#include "exec/cpu-common.h" #include "linux/kvm.h" #include "system/kvm.h" #include "qemu/bitops.h" diff --git a/hw/hyperv/syndbg.c b/hw/hyperv/syndbg.c index dc6cc84b50..1e177f9dd8 100644 --- a/hw/hyperv/syndbg.c +++ b/hw/hyperv/syndbg.c @@ -19,6 +19,7 @@ #include "hw/hyperv/hyperv.h" #include "hw/hyperv/vmbus-bridge.h" #include "hw/hyperv/hyperv-proto.h" +#include "exec/cpu-common.h" #include "net/net.h" #include "net/eth.h" #include "net/checksum.h" diff --git a/hw/hyperv/vmbus.c b/hw/hyperv/vmbus.c index c01f339236..c5bab5d245 100644 --- a/hw/hyperv/vmbus.c +++ b/hw/hyperv/vmbus.c @@ -19,6 +19,7 @@ #include "hw/hyperv/vmbus.h" #include "hw/hyperv/vmbus-bridge.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "exec/target_page.h" #include "trace.h" diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c index 8ca88afae2..aba6842a22 100644 --- a/hw/i386/kvm/clock.c +++ b/hw/i386/kvm/clock.c @@ -24,6 +24,7 @@ #include "hw/core/sysbus.h" #include "hw/i386/kvm/clock.h" #include "hw/core/qdev-properties.h" +#include "exec/cpu-common.h" #include "qapi/error.h" #include diff --git a/hw/i386/vapic.c b/hw/i386/vapic.c index 32f92a28b8..670a50524d 100644 --- a/hw/i386/vapic.c +++ b/hw/i386/vapic.c @@ -21,6 +21,7 @@ #include "hw/i386/apic_internal.h" #include "hw/core/sysbus.h" #include "hw/core/boards.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "qom/object.h" diff --git a/hw/intc/apic.c b/hw/intc/apic.c index aad253af15..dd8c77f818 100644 --- a/hw/intc/apic.c +++ b/hw/intc/apic.c @@ -30,6 +30,7 @@ #include "system/mshv.h" #include "trace.h" #include "hw/i386/apic-msidef.h" +#include "exec/cpu-common.h" #include "qapi/error.h" #include "qom/object.h" diff --git a/hw/intc/xive2.c b/hw/intc/xive2.c index 495925196a..d353391208 100644 --- a/hw/intc/xive2.c +++ b/hw/intc/xive2.c @@ -17,6 +17,7 @@ #include "hw/ppc/xive.h" #include "hw/ppc/xive2.h" #include "hw/ppc/xive2_regs.h" +#include "exec/cpu-common.h" #include "trace.h" static void xive2_router_end_notify(Xive2Router *xrtr, uint8_t end_blk, diff --git a/hw/m68k/next-cube.c b/hw/m68k/next-cube.c index ca3df7b887..26177c7b86 100644 --- a/hw/m68k/next-cube.c +++ b/hw/m68k/next-cube.c @@ -12,6 +12,7 @@ #include "qemu/osdep.h" #include "exec/hwaddr.h" +#include "exec/cpu-common.h" #include "exec/cpu-interrupt.h" #include "system/system.h" #include "system/qtest.h" diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c index 8ff99b3339..a6f9ebab90 100644 --- a/hw/microblaze/boot.c +++ b/hw/microblaze/boot.c @@ -33,6 +33,7 @@ #include "qemu/guest-random.h" #include "system/device_tree.h" #include "system/reset.h" +#include "exec/cpu-common.h" #include "hw/core/boards.h" #include "hw/core/loader.h" #include "elf.h" diff --git a/hw/misc/pc-testdev.c b/hw/misc/pc-testdev.c index 4093cb3c99..228012e772 100644 --- a/hw/misc/pc-testdev.c +++ b/hw/misc/pc-testdev.c @@ -39,6 +39,7 @@ #include "qemu/module.h" #include "hw/core/irq.h" #include "hw/isa/isa.h" +#include "exec/cpu-common.h" #include "qom/object.h" #define IOMEM_LEN 0x10000 diff --git a/hw/net/fsl_etsec/rings.c b/hw/net/fsl_etsec/rings.c index 42216de6c9..22660c32b8 100644 --- a/hw/net/fsl_etsec/rings.c +++ b/hw/net/fsl_etsec/rings.c @@ -26,6 +26,7 @@ #include "qemu/log.h" #include "etsec.h" #include "registers.h" +#include "exec/cpu-common.h" /* #define ETSEC_RING_DEBUG */ /* #define HEX_DUMP */ diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c index 5f267e5ea3..79a5c4385c 100644 --- a/hw/net/mcf_fec.c +++ b/hw/net/mcf_fec.c @@ -16,6 +16,7 @@ #include "hw/net/mii.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include /* for crc32 */ //#define DEBUG_FEC 1 diff --git a/hw/net/opencores_eth.c b/hw/net/opencores_eth.c index ec3301414c..6abeffcc9c 100644 --- a/hw/net/opencores_eth.c +++ b/hw/net/opencores_eth.c @@ -36,6 +36,7 @@ #include "hw/net/mii.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "net/net.h" #include "qemu/module.h" #include "net/eth.h" diff --git a/hw/net/xgmac.c b/hw/net/xgmac.c index 8d316e94c1..204c78aba3 100644 --- a/hw/net/xgmac.c +++ b/hw/net/xgmac.c @@ -28,6 +28,7 @@ #include "hw/core/irq.h" #include "hw/core/qdev-properties.h" #include "hw/core/sysbus.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" #include "qemu/module.h" #include "net/net.h" diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c index 58d81f77c8..3af7e6ecbe 100644 --- a/hw/nvram/spapr_nvram.c +++ b/hw/nvram/spapr_nvram.c @@ -38,6 +38,7 @@ #include "hw/ppc/spapr_vio.h" #include "hw/core/qdev-properties.h" #include "hw/core/qdev-properties-system.h" +#include "exec/cpu-common.h" #include "qom/object.h" struct SpaprNvram { diff --git a/hw/ppc/amigaone.c b/hw/ppc/amigaone.c index 4b85844380..8074713fbe 100644 --- a/hw/ppc/amigaone.c +++ b/hw/ppc/amigaone.c @@ -21,6 +21,7 @@ #include "hw/ide/pci.h" #include "hw/i2c/smbus_eeprom.h" #include "hw/ppc/ppc.h" +#include "exec/cpu-common.h" #include "system/block-backend.h" #include "system/qtest.h" #include "system/reset.h" diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index 113a2daca1..eb0d3a418e 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -52,6 +52,7 @@ #include "hw/core/irq.h" #include "hw/sd/sdhci.h" #include "hw/misc/unimp.h" +#include "exec/cpu-common.h" #define EPAPR_MAGIC (0x45504150) #define DTC_LOAD_PAD 0x1800000 diff --git a/hw/ppc/pegasos.c b/hw/ppc/pegasos.c index 3e4d19fbe8..ac9fc5a654 100644 --- a/hw/ppc/pegasos.c +++ b/hw/ppc/pegasos.c @@ -39,6 +39,7 @@ #include "qemu/datadir.h" #include "system/device_tree.h" #include "hw/ppc/vof.h" +#include "exec/cpu-common.h" #include diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c index f891c3a797..1513575b8f 100644 --- a/hw/ppc/pnv.c +++ b/hw/ppc/pnv.c @@ -58,6 +58,7 @@ #include "hw/isa/isa.h" #include "hw/char/serial-isa.h" #include "hw/rtc/mc146818rtc.h" +#include "exec/cpu-common.h" #include diff --git a/hw/ppc/ppc440_uc.c b/hw/ppc/ppc440_uc.c index fc6dd332e8..0f28a7937f 100644 --- a/hw/ppc/ppc440_uc.c +++ b/hw/ppc/ppc440_uc.c @@ -17,6 +17,7 @@ #include "hw/pci-host/ppc4xx.h" #include "hw/core/qdev-properties.h" #include "hw/pci/pci.h" +#include "exec/cpu-common.h" #include "system/reset.h" #include "cpu.h" #include "ppc440.h" diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index eb626547eb..bcf6aa560f 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -43,6 +43,7 @@ #include "system/reset.h" #include "system/runstate.h" #include "qemu/log.h" +#include "exec/cpu-common.h" #include "hw/core/fw-path-provider.h" #include "elf.h" #include "net/net.h" diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c index d2044b4fb5..9bc65c760e 100644 --- a/hw/ppc/spapr_drc.c +++ b/hw/ppc/spapr_drc.c @@ -23,6 +23,7 @@ #include "hw/ppc/spapr.h" /* for RTAS return codes */ #include "hw/pci-host/spapr.h" /* spapr_phb_remove_pci_device_cb callback */ #include "hw/ppc/spapr_nvdimm.h" +#include "exec/cpu-common.h" #include "system/device_tree.h" #include "system/reset.h" #include "trace.h" diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c index b1774e88f2..1a21ac7bbf 100644 --- a/hw/ppc/spapr_events.c +++ b/hw/ppc/spapr_events.c @@ -41,6 +41,7 @@ #include "qemu/bcd.h" #include "qemu/main-loop.h" #include "hw/ppc/spapr_ovec.h" +#include "exec/cpu-common.h" #include #include "migration/blocker.h" diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c index 8f03b3e776..032805a8d0 100644 --- a/hw/ppc/spapr_hcall.c +++ b/hw/ppc/spapr_hcall.c @@ -24,6 +24,7 @@ #include "hw/ppc/spapr_numa.h" #include "mmu-book3s-v3.h" #include "hw/mem/memory-device.h" +#include "exec/cpu-common.h" bool is_ram_address(SpaprMachineState *spapr, hwaddr addr) { diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c index a6715b4026..cb79ad3405 100644 --- a/hw/ppc/spapr_rtas.c +++ b/hw/ppc/spapr_rtas.c @@ -46,6 +46,7 @@ #include "qemu/cutils.h" #include "trace.h" #include "hw/ppc/fdt.h" +#include "exec/cpu-common.h" #include "target/ppc/mmu-hash64.h" #include "target/ppc/mmu-book3s-v3.h" #include "migration/blocker.h" diff --git a/hw/ppc/spapr_tpm_proxy.c b/hw/ppc/spapr_tpm_proxy.c index a48dab7e7a..361a3dc817 100644 --- a/hw/ppc/spapr_tpm_proxy.c +++ b/hw/ppc/spapr_tpm_proxy.c @@ -16,6 +16,7 @@ #include "system/reset.h" #include "hw/ppc/spapr.h" #include "hw/core/qdev-properties.h" +#include "exec/cpu-common.h" #include "trace.h" #define TPM_SPAPR_BUFSIZE 4096 diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index 8b3e67b627..51b3d7d712 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -44,6 +44,7 @@ #include "hw/ppc/ppc.h" #include "hw/ppc/ppc4xx.h" #include "hw/core/qdev-properties.h" +#include "exec/cpu-common.h" #include diff --git a/hw/remote/proxy-memory-listener.c b/hw/remote/proxy-memory-listener.c index e1a52d24f0..d0c856b093 100644 --- a/hw/remote/proxy-memory-listener.c +++ b/hw/remote/proxy-memory-listener.c @@ -11,6 +11,7 @@ #include "qemu/int128.h" #include "qemu/range.h" #include "system/memory.h" +#include "system/ramblock.h" #include "exec/cpu-common.h" #include "qapi/error.h" #include "qemu/error-report.h" diff --git a/hw/s390x/css.c b/hw/s390x/css.c index d2c0af6a9b..ccc9c1c243 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -22,6 +22,7 @@ #include "hw/s390x/s390_flic.h" #include "hw/s390x/s390-virtio-ccw.h" #include "hw/s390x/s390-ccw.h" +#include "exec/cpu-common.h" typedef struct CrwContainer { CRW crw; diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index b119a87a86..d34adb5522 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -28,6 +28,7 @@ #include "hw/s390x/ebcdic.h" #include "hw/scsi/scsi.h" #include "hw/virtio/virtio-net.h" +#include "exec/cpu-common.h" #include "ipl.h" #include "qemu/error-report.h" #include "qemu/config-file.h" diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index ff415b6312..30fdca1e8a 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -25,6 +25,7 @@ #include "hw/core/qdev-properties.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/msi.h" +#include "exec/cpu-common.h" #include "qemu/error-report.h" #include "qemu/module.h" #include "system/reset.h" diff --git a/hw/s390x/s390-stattrib.c b/hw/s390x/s390-stattrib.c index f149af16ac..d808ece3b9 100644 --- a/hw/s390x/s390-stattrib.c +++ b/hw/s390x/s390-stattrib.c @@ -12,6 +12,7 @@ #include "qemu/osdep.h" #include "qemu/units.h" #include "exec/target_page.h" +#include "system/ram_addr.h" #include "migration/qemu-file.h" #include "migration/register.h" #include "hw/core/qdev-properties.h" diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index 4a3ffb84f8..b4011c4049 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -32,6 +32,7 @@ #include "trace.h" #include "hw/s390x/css-bridge.h" #include "hw/s390x/s390-virtio-ccw.h" +#include "exec/cpu-common.h" #include "system/replay.h" #define NR_CLASSIC_INDICATOR_BITS 64 diff --git a/hw/scsi/vmw_pvscsi.c b/hw/scsi/vmw_pvscsi.c index b3cdc255b4..11ae6b9b74 100644 --- a/hw/scsi/vmw_pvscsi.c +++ b/hw/scsi/vmw_pvscsi.c @@ -34,6 +34,7 @@ #include "scsi/constants.h" #include "hw/pci/msi.h" #include "hw/core/qdev-properties.h" +#include "exec/cpu-common.h" #include "vmw_pvscsi.h" #include "trace.h" #include "qom/object.h" diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index ec9a386b48..d4e25f761a 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -29,6 +29,7 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "qemu/datadir.h" +#include "exec/cpu-common.h" #include "cpu.h" #include "hw/core/irq.h" #include "qemu/timer.h" diff --git a/hw/vfio-user/container.c b/hw/vfio-user/container.c index dab7a23224..d5275a463b 100644 --- a/hw/vfio-user/container.c +++ b/hw/vfio-user/container.c @@ -15,6 +15,7 @@ #include "hw/vfio-user/trace.h" #include "hw/vfio/vfio-device.h" #include "hw/vfio/vfio-listener.h" +#include "system/ramblock.h" #include "qapi/error.h" /* diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 013a691bc5..5993d90545 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -15,7 +15,7 @@ #include #include "system/tcg.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/vfio/vfio-container.h" diff --git a/hw/vfio/helpers.c b/hw/vfio/helpers.c index 2cbc7b4964..c595f860ce 100644 --- a/hw/vfio/helpers.c +++ b/hw/vfio/helpers.c @@ -23,6 +23,7 @@ #include #include "system/kvm.h" +#include "exec/cpu-common.h" #include "hw/vfio/vfio-device.h" #include "hw/core/hw-error.h" #include "qapi/error.h" diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index fde343f06e..58a4940b00 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -27,7 +27,7 @@ #include "migration-multifd.h" #include "qapi/error.h" #include "qapi/qapi-events-vfio.h" -#include "exec/ramlist.h" +#include "system/ramlist.h" #include "pci.h" #include "trace.h" #include "hw/core/hw-error.h" diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index e654ea468a..31e9704cdc 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -28,6 +28,7 @@ #include "migration/qemu-file-types.h" #include "system/dma.h" #include "system/memory.h" +#include "system/ramblock.h" #include "trace.h" /* enabled until disconnected backend stabilizes */ diff --git a/hw/xen/xen-mapcache.c b/hw/xen/xen-mapcache.c index e31d379702..11115f6084 100644 --- a/hw/xen/xen-mapcache.c +++ b/hw/xen/xen-mapcache.c @@ -18,6 +18,7 @@ #include "hw/xen/xen_native.h" #include "qemu/bitmap.h" +#include "system/ramlist.h" #include "system/runstate.h" #include "system/xen-mapcache.h" #include "trace.h" diff --git a/hw/xen/xen_pt_graphics.c b/hw/xen/xen_pt_graphics.c index 2c0cec9723..445f33e172 100644 --- a/hw/xen/xen_pt_graphics.c +++ b/hw/xen/xen_pt_graphics.c @@ -5,6 +5,7 @@ #include "qapi/error.h" #include "hw/xen/xen_pt.h" #include "hw/xen/xen_igd.h" +#include "exec/cpu-common.h" #include "xen-host-pci-device.h" static unsigned long igd_guest_opregion; diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c index 5e6f897429..d427d68e50 100644 --- a/hw/xtensa/xtfpga.c +++ b/hw/xtensa/xtfpga.c @@ -49,6 +49,7 @@ #include "bootparam.h" #include "xtensa_memory.h" #include "hw/xtensa/mx_pic.h" +#include "exec/cpu-common.h" #include "migration/vmstate.h" typedef struct XtfpgaFlashDesc { diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h index e0be4ee2b8..b2e02c60d4 100644 --- a/include/exec/cpu-common.h +++ b/include/exec/cpu-common.h @@ -38,69 +38,6 @@ int cpu_get_free_index(void); void tcg_iommu_init_notifier_list(CPUState *cpu); void tcg_iommu_free_notifier_list(CPUState *cpu); -enum device_endian { - DEVICE_NATIVE_ENDIAN, - DEVICE_BIG_ENDIAN, - DEVICE_LITTLE_ENDIAN, -}; - -/* address in the RAM (different from a physical address) */ -#if defined(CONFIG_XEN_BACKEND) -typedef uint64_t ram_addr_t; -# define RAM_ADDR_MAX UINT64_MAX -# define RAM_ADDR_FMT "%" PRIx64 -#else -typedef uintptr_t ram_addr_t; -# define RAM_ADDR_MAX UINTPTR_MAX -# define RAM_ADDR_FMT "%" PRIxPTR -#endif - -/* memory API */ - -void qemu_ram_remap(ram_addr_t addr); -/* This should not be used by devices. */ -ram_addr_t qemu_ram_addr_from_host(void *ptr); -ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr); -RAMBlock *qemu_ram_block_by_name(const char *name); - -/* - * Translates a host ptr back to a RAMBlock and an offset in that RAMBlock. - * - * @ptr: The host pointer to translate. - * @round_offset: Whether to round the result offset down to a target page - * @offset: Will be set to the offset within the returned RAMBlock. - * - * Returns: RAMBlock (or NULL if not found) - * - * By the time this function returns, the returned pointer is not protected - * by RCU anymore. If the caller is not within an RCU critical section and - * does not hold the BQL, it must have other means of protecting the - * pointer, such as a reference to the memory region that owns the RAMBlock. - */ -RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, - ram_addr_t *offset); -ram_addr_t qemu_ram_block_host_offset(RAMBlock *rb, void *host); -void qemu_ram_set_idstr(RAMBlock *block, const char *name, DeviceState *dev); -void qemu_ram_unset_idstr(RAMBlock *block); -const char *qemu_ram_get_idstr(RAMBlock *rb); -void *qemu_ram_get_host_addr(RAMBlock *rb); -ram_addr_t qemu_ram_get_offset(RAMBlock *rb); -ram_addr_t qemu_ram_get_fd_offset(RAMBlock *rb); -ram_addr_t qemu_ram_get_used_length(RAMBlock *rb); -ram_addr_t qemu_ram_get_max_length(RAMBlock *rb); -bool qemu_ram_is_shared(RAMBlock *rb); -bool qemu_ram_is_noreserve(RAMBlock *rb); -bool qemu_ram_is_uf_zeroable(RAMBlock *rb); -void qemu_ram_set_uf_zeroable(RAMBlock *rb); -bool qemu_ram_is_migratable(RAMBlock *rb); -void qemu_ram_set_migratable(RAMBlock *rb); -void qemu_ram_unset_migratable(RAMBlock *rb); -bool qemu_ram_is_named_file(RAMBlock *rb); -int qemu_ram_get_fd(RAMBlock *rb); - -size_t qemu_ram_pagesize(RAMBlock *block); -size_t qemu_ram_pagesize_largest(void); - /** * cpu_address_space_init: * @cpu: CPU to add this address space to @@ -139,17 +76,6 @@ void *cpu_physical_memory_map(hwaddr addr, void cpu_physical_memory_unmap(void *buffer, hwaddr len, bool is_write, hwaddr access_len); -/* Coalesced MMIO regions are areas where write operations can be reordered. - * This usually implies that write operations are side-effect free. This allows - * batching which can make a major impact on performance when using - * virtualization. - */ -void qemu_flush_coalesced_mmio_buffer(void); - -typedef int (RAMBlockIterFunc)(RAMBlock *rb, void *opaque); - -int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque); - /* vl.c */ void list_cpus(void); diff --git a/include/exec/cputlb.h b/include/exec/cputlb.h index 9bec0e7890..0d1d46429c 100644 --- a/include/exec/cputlb.h +++ b/include/exec/cputlb.h @@ -24,6 +24,7 @@ #include "exec/hwaddr.h" #include "exec/memattrs.h" #include "exec/vaddr.h" +#include "system/ram_addr.h" #if defined(CONFIG_TCG) && !defined(CONFIG_USER_ONLY) void tlb_protect_code(ram_addr_t ram_addr); diff --git a/include/exec/translation-block.h b/include/exec/translation-block.h index cdce399eba..4f83d5bec9 100644 --- a/include/exec/translation-block.h +++ b/include/exec/translation-block.h @@ -14,6 +14,8 @@ #ifdef CONFIG_USER_ONLY #include "qemu/interval-tree.h" #include "exec/target_page.h" +#else +#include "system/ram_addr.h" #endif /* diff --git a/include/hw/core/qdev-properties-system.h b/include/hw/core/qdev-properties-system.h index ec39ef3bd6..ec21732ce5 100644 --- a/include/hw/core/qdev-properties-system.h +++ b/include/hw/core/qdev-properties-system.h @@ -2,6 +2,7 @@ #define HW_QDEV_PROPERTIES_SYSTEM_H #include "hw/core/qdev-properties.h" +#include "qapi/qapi-types-common.h" bool qdev_prop_sanitize_s390x_loadparm(uint8_t *loadparm, const char *str, Error **errp); diff --git a/include/hw/i2c/smbus_eeprom.h b/include/hw/i2c/smbus_eeprom.h index 68b0063ab6..61a54cda76 100644 --- a/include/hw/i2c/smbus_eeprom.h +++ b/include/hw/i2c/smbus_eeprom.h @@ -23,7 +23,7 @@ #ifndef HW_SMBUS_EEPROM_H #define HW_SMBUS_EEPROM_H -#include "exec/cpu-common.h" +#include "system/ram_addr.h" #include "hw/i2c/i2c.h" void smbus_eeprom_init_one(I2CBus *bus, uint8_t address, uint8_t *eeprom_buf); diff --git a/include/hw/xen/xen-hvm-common.h b/include/hw/xen/xen-hvm-common.h index 19df5600a3..e1beca062f 100644 --- a/include/hw/xen/xen-hvm-common.h +++ b/include/hw/xen/xen-hvm-common.h @@ -5,6 +5,7 @@ #include "exec/hwaddr.h" #include "hw/xen/xen_native.h" #include "hw/xen/xen_backend_ops.h" +#include "system/runstate.h" #include extern MemoryRegion xen_memory; diff --git a/include/system/balloon.h b/include/system/balloon.h index 867687b73a..066c7e1ddf 100644 --- a/include/system/balloon.h +++ b/include/system/balloon.h @@ -14,7 +14,7 @@ #ifndef QEMU_BALLOON_H #define QEMU_BALLOON_H -#include "exec/cpu-common.h" +#include "system/ram_addr.h" #include "qapi/qapi-types-machine.h" typedef void (QEMUBalloonEvent)(void *opaque, ram_addr_t target); diff --git a/include/system/block-ram-registrar.h b/include/system/block-ram-registrar.h index d8b2f7942b..61b0dff340 100644 --- a/include/system/block-ram-registrar.h +++ b/include/system/block-ram-registrar.h @@ -7,7 +7,7 @@ #ifndef BLOCK_RAM_REGISTRAR_H #define BLOCK_RAM_REGISTRAR_H -#include "exec/ramlist.h" +#include "system/ramlist.h" /** * struct BlockRAMRegistrar: diff --git a/include/system/iommufd.h b/include/system/iommufd.h index a659f36a20..9f5eb87245 100644 --- a/include/system/iommufd.h +++ b/include/system/iommufd.h @@ -16,7 +16,7 @@ #include "qom/object.h" #include "exec/hwaddr.h" -#include "exec/cpu-common.h" +#include "system/ram_addr.h" #include "system/host_iommu_device.h" #define TYPE_IOMMUFD_BACKEND "iommufd" diff --git a/include/system/memory.h b/include/system/memory.h index 1cacc117cc..b3597fb2d0 100644 --- a/include/system/memory.h +++ b/include/system/memory.h @@ -14,11 +14,10 @@ #ifndef SYSTEM_MEMORY_H #define SYSTEM_MEMORY_H -#include "exec/cpu-common.h" #include "exec/hwaddr.h" +#include "system/ram_addr.h" #include "exec/memattrs.h" #include "exec/memop.h" -#include "exec/ramlist.h" #include "qemu/bswap.h" #include "qemu/queue.h" #include "qemu/int128.h" @@ -27,6 +26,12 @@ #include "qom/object.h" #include "qemu/rcu.h" +enum device_endian { + DEVICE_NATIVE_ENDIAN, + DEVICE_BIG_ENDIAN, + DEVICE_LITTLE_ENDIAN, +}; + #define RAM_ADDR_INVALID (~(ram_addr_t)0) #define MAX_PHYS_ADDR_SPACE_BITS 62 @@ -3266,6 +3271,13 @@ address_space_write_cached(MemoryRegionCache *cache, hwaddr addr, MemTxResult address_space_set(AddressSpace *as, hwaddr addr, uint8_t c, hwaddr len, MemTxAttrs attrs); +/* Coalesced MMIO regions are areas where write operations can be reordered. + * This usually implies that write operations are side-effect free. This allows + * batching which can make a major impact on performance when using + * virtualization. + */ +void qemu_flush_coalesced_mmio_buffer(void); + /* * Inhibit technologies that require discarding of pages in RAM blocks, e.g., * to manage the actual amount of memory consumed by the VM (then, the memory diff --git a/include/system/memory_mapping.h b/include/system/memory_mapping.h index 021e0a6230..4c770bf0b8 100644 --- a/include/system/memory_mapping.h +++ b/include/system/memory_mapping.h @@ -15,7 +15,9 @@ #define MEMORY_MAPPING_H #include "qemu/queue.h" -#include "exec/cpu-common.h" +#include "exec/hwaddr.h" +#include "exec/vaddr.h" +#include "system/ram_addr.h" typedef struct GuestPhysBlock { /* visible to guest, reflects PCI hole, etc */ diff --git a/include/system/physmem.h b/include/system/physmem.h index 879f6eae38..ed33713022 100644 --- a/include/system/physmem.h +++ b/include/system/physmem.h @@ -9,7 +9,7 @@ #define QEMU_SYSTEM_PHYSMEM_H #include "exec/hwaddr.h" -#include "exec/ramlist.h" +#include "system/ramlist.h" #define DIRTY_CLIENTS_ALL ((1 << DIRTY_MEMORY_NUM) - 1) #define DIRTY_CLIENTS_NOCODE (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE)) diff --git a/include/system/ram_addr.h b/include/system/ram_addr.h index 683485980c..129f6b8757 100644 --- a/include/system/ram_addr.h +++ b/include/system/ram_addr.h @@ -1,5 +1,5 @@ /* - * Declarations for cpu physical memory functions + * Declarations of basic RAMBlock-related types and macros * * Copyright 2011 Red Hat, Inc. and/or its affiliates * @@ -11,125 +11,23 @@ * */ -/* - * This header is for use by exec.c and memory.c ONLY. Do not include it. - * The functions declared here will be removed soon. - */ +#ifndef RAM_ADDR_H +#define RAM_ADDR_H -#ifndef SYSTEM_RAM_ADDR_H -#define SYSTEM_RAM_ADDR_H +/* address in the RAM (different from a physical address) */ +#if defined(CONFIG_XEN_BACKEND) +typedef uint64_t ram_addr_t; +# define RAM_ADDR_MAX UINT64_MAX +# define RAM_ADDR_FMT "%" PRIx64 +#else +typedef uintptr_t ram_addr_t; +# define RAM_ADDR_MAX UINTPTR_MAX +# define RAM_ADDR_FMT "%" PRIxPTR +#endif -#include "system/ramblock.h" -#include "exec/target_page.h" -#include "exec/hwaddr.h" - -extern uint64_t total_dirty_pages; - -/** - * clear_bmap_size: calculate clear bitmap size - * - * @pages: number of guest pages - * @shift: guest page number shift - * - * Returns: number of bits for the clear bitmap - */ -static inline long clear_bmap_size(uint64_t pages, uint8_t shift) -{ - return DIV_ROUND_UP(pages, 1UL << shift); -} - -/** - * clear_bmap_set: set clear bitmap for the page range. Must be with - * bitmap_mutex held. - * - * @rb: the ramblock to operate on - * @start: the start page number - * @size: number of pages to set in the bitmap - * - * Returns: None - */ -static inline void clear_bmap_set(RAMBlock *rb, uint64_t start, - uint64_t npages) -{ - uint8_t shift = rb->clear_bmap_shift; - - bitmap_set(rb->clear_bmap, start >> shift, clear_bmap_size(npages, shift)); -} - -/** - * clear_bmap_test_and_clear: test clear bitmap for the page, clear if set. - * Must be with bitmap_mutex held. - * - * @rb: the ramblock to operate on - * @page: the page number to check - * - * Returns: true if the bit was set, false otherwise - */ -static inline bool clear_bmap_test_and_clear(RAMBlock *rb, uint64_t page) -{ - uint8_t shift = rb->clear_bmap_shift; - - return bitmap_test_and_clear(rb->clear_bmap, page >> shift, 1); -} - -static inline unsigned long int ramblock_recv_bitmap_offset(void *host_addr, - RAMBlock *rb) -{ - uint64_t host_addr_offset = - (uint64_t)(uintptr_t)(host_addr - (void *)rb->host); - return host_addr_offset >> TARGET_PAGE_BITS; -} - -/** - * qemu_ram_alloc_from_file, - * qemu_ram_alloc_from_fd: Allocate a ram block from the specified backing - * file or device - * - * Parameters: - * @size: the size in bytes of the ram block - * @max_size: the maximum size of the block after resizing - * @mr: the memory region where the ram block is - * @resized: callback after calls to qemu_ram_resize - * @ram_flags: RamBlock flags. Supported flags: RAM_SHARED, RAM_PMEM, - * RAM_NORESERVE, RAM_PROTECTED, RAM_NAMED_FILE, RAM_READONLY, - * RAM_READONLY_FD, RAM_GUEST_MEMFD - * @mem_path or @fd: specify the backing file or device - * @offset: Offset into target file - * @grow: extend file if necessary (but an empty file is always extended). - * @errp: pointer to Error*, to store an error if it happens - * - * Return: - * On success, return a pointer to the ram block. - * On failure, return NULL. - */ -typedef void (*qemu_ram_resize_cb)(const char *, uint64_t length, void *host); - -RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr, - uint32_t ram_flags, const char *mem_path, - off_t offset, Error **errp); -RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, ram_addr_t max_size, - qemu_ram_resize_cb resized, MemoryRegion *mr, - uint32_t ram_flags, int fd, off_t offset, - bool grow, - Error **errp); - -RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, - MemoryRegion *mr, Error **errp); -RAMBlock *qemu_ram_alloc(ram_addr_t size, uint32_t ram_flags, MemoryRegion *mr, - Error **errp); -RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t max_size, - qemu_ram_resize_cb resized, - MemoryRegion *mr, Error **errp); -void qemu_ram_free(RAMBlock *block); - -int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp); - -void qemu_ram_msync(RAMBlock *block, ram_addr_t start, ram_addr_t length); - -/* Clear whole block of mem */ -static inline void qemu_ram_block_writeback(RAMBlock *block) -{ - qemu_ram_msync(block, 0, block->used_length); -} +#define DIRTY_MEMORY_VGA 0 +#define DIRTY_MEMORY_CODE 1 +#define DIRTY_MEMORY_MIGRATION 2 +#define DIRTY_MEMORY_NUM 3 /* num of dirty bits */ #endif diff --git a/include/system/ramblock.h b/include/system/ramblock.h index 76694fe1b5..e9f58ac045 100644 --- a/include/system/ramblock.h +++ b/include/system/ramblock.h @@ -14,9 +14,9 @@ #ifndef SYSTEM_RAMBLOCK_H #define SYSTEM_RAMBLOCK_H -#include "exec/cpu-common.h" #include "qemu/rcu.h" -#include "exec/ramlist.h" +#include "system/ram_addr.h" +#include "system/ramlist.h" #include "system/hostmem.h" #define TYPE_RAM_BLOCK_ATTRIBUTES "ram-block-attributes" @@ -130,4 +130,160 @@ static inline void *ramblock_ptr(RAMBlock *block, ram_addr_t offset) return (char *)block->host + offset; } +/* memory API */ + +void qemu_ram_remap(ram_addr_t addr); +/* This should not be used by devices. */ +ram_addr_t qemu_ram_addr_from_host(void *ptr); +ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr); +RAMBlock *qemu_ram_block_by_name(const char *name); + +/* + * Translates a host ptr back to a RAMBlock and an offset in that RAMBlock. + * + * @ptr: The host pointer to translate. + * @round_offset: Whether to round the result offset down to a target page + * @offset: Will be set to the offset within the returned RAMBlock. + * + * Returns: RAMBlock (or NULL if not found) + * + * By the time this function returns, the returned pointer is not protected + * by RCU anymore. If the caller is not within an RCU critical section and + * does not hold the BQL, it must have other means of protecting the + * pointer, such as a reference to the memory region that owns the RAMBlock. + */ +RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, + ram_addr_t *offset); +ram_addr_t qemu_ram_block_host_offset(RAMBlock *rb, void *host); +void qemu_ram_set_idstr(RAMBlock *block, const char *name, DeviceState *dev); +void qemu_ram_unset_idstr(RAMBlock *block); +const char *qemu_ram_get_idstr(RAMBlock *rb); +void *qemu_ram_get_host_addr(RAMBlock *rb); +ram_addr_t qemu_ram_get_offset(RAMBlock *rb); +ram_addr_t qemu_ram_get_fd_offset(RAMBlock *rb); +ram_addr_t qemu_ram_get_used_length(RAMBlock *rb); +ram_addr_t qemu_ram_get_max_length(RAMBlock *rb); +bool qemu_ram_is_shared(RAMBlock *rb); +bool qemu_ram_is_noreserve(RAMBlock *rb); +bool qemu_ram_is_uf_zeroable(RAMBlock *rb); +void qemu_ram_set_uf_zeroable(RAMBlock *rb); +bool qemu_ram_is_migratable(RAMBlock *rb); +void qemu_ram_set_migratable(RAMBlock *rb); +void qemu_ram_unset_migratable(RAMBlock *rb); +bool qemu_ram_is_named_file(RAMBlock *rb); +int qemu_ram_get_fd(RAMBlock *rb); + +size_t qemu_ram_pagesize(RAMBlock *block); +size_t qemu_ram_pagesize_largest(void); +#include "exec/target_page.h" +#include "exec/hwaddr.h" + +extern uint64_t total_dirty_pages; + +/** + * clear_bmap_size: calculate clear bitmap size + * + * @pages: number of guest pages + * @shift: guest page number shift + * + * Returns: number of bits for the clear bitmap + */ +static inline long clear_bmap_size(uint64_t pages, uint8_t shift) +{ + return DIV_ROUND_UP(pages, 1UL << shift); +} + +/** + * clear_bmap_set: set clear bitmap for the page range. Must be with + * bitmap_mutex held. + * + * @rb: the ramblock to operate on + * @start: the start page number + * @size: number of pages to set in the bitmap + * + * Returns: None + */ +static inline void clear_bmap_set(RAMBlock *rb, uint64_t start, + uint64_t npages) +{ + uint8_t shift = rb->clear_bmap_shift; + + bitmap_set(rb->clear_bmap, start >> shift, clear_bmap_size(npages, shift)); +} + +/** + * clear_bmap_test_and_clear: test clear bitmap for the page, clear if set. + * Must be with bitmap_mutex held. + * + * @rb: the ramblock to operate on + * @page: the page number to check + * + * Returns: true if the bit was set, false otherwise + */ +static inline bool clear_bmap_test_and_clear(RAMBlock *rb, uint64_t page) +{ + uint8_t shift = rb->clear_bmap_shift; + + return bitmap_test_and_clear(rb->clear_bmap, page >> shift, 1); +} + +static inline unsigned long int ramblock_recv_bitmap_offset(void *host_addr, + RAMBlock *rb) +{ + uint64_t host_addr_offset = + (uint64_t)(uintptr_t)(host_addr - (void *)rb->host); + return host_addr_offset >> TARGET_PAGE_BITS; +} + +/** + * qemu_ram_alloc_from_file, + * qemu_ram_alloc_from_fd: Allocate a ram block from the specified backing + * file or device + * + * Parameters: + * @size: the size in bytes of the ram block + * @max_size: the maximum size of the block after resizing + * @mr: the memory region where the ram block is + * @resized: callback after calls to qemu_ram_resize + * @ram_flags: RamBlock flags. Supported flags: RAM_SHARED, RAM_PMEM, + * RAM_NORESERVE, RAM_PROTECTED, RAM_NAMED_FILE, RAM_READONLY, + * RAM_READONLY_FD, RAM_GUEST_MEMFD + * @mem_path or @fd: specify the backing file or device + * @offset: Offset into target file + * @grow: extend file if necessary (but an empty file is always extended). + * @errp: pointer to Error*, to store an error if it happens + * + * Return: + * On success, return a pointer to the ram block. + * On failure, return NULL. + */ +typedef void (*qemu_ram_resize_cb)(const char *, uint64_t length, void *host); + +RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr, + uint32_t ram_flags, const char *mem_path, + off_t offset, Error **errp); +RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, ram_addr_t max_size, + qemu_ram_resize_cb resized, MemoryRegion *mr, + uint32_t ram_flags, int fd, off_t offset, + bool grow, + Error **errp); + +RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, + MemoryRegion *mr, Error **errp); +RAMBlock *qemu_ram_alloc(ram_addr_t size, uint32_t ram_flags, MemoryRegion *mr, + Error **errp); +RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t max_size, + qemu_ram_resize_cb resized, + MemoryRegion *mr, Error **errp); +void qemu_ram_free(RAMBlock *block); + +int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp); + +void qemu_ram_msync(RAMBlock *block, ram_addr_t start, ram_addr_t length); + +/* Clear whole block of mem */ +static inline void qemu_ram_block_writeback(RAMBlock *block) +{ + qemu_ram_msync(block, 0, block->used_length); +} #endif diff --git a/include/exec/ramlist.h b/include/system/ramlist.h similarity index 94% rename from include/exec/ramlist.h rename to include/system/ramlist.h index d9cfe530be..c7f388f487 100644 --- a/include/exec/ramlist.h +++ b/include/system/ramlist.h @@ -5,14 +5,10 @@ #include "qemu/thread.h" #include "qemu/rcu.h" #include "qemu/rcu_queue.h" +#include "system/ram_addr.h" typedef struct RAMBlockNotifier RAMBlockNotifier; -#define DIRTY_MEMORY_VGA 0 -#define DIRTY_MEMORY_CODE 1 -#define DIRTY_MEMORY_MIGRATION 2 -#define DIRTY_MEMORY_NUM 3 /* num of dirty bits */ - /* The dirty memory bitmap is split into fixed-size blocks to allow growth * under RCU. The bitmap for a block can be accessed as follows: * @@ -75,6 +71,10 @@ struct RAMBlockNotifier { QLIST_ENTRY(RAMBlockNotifier) next; }; +typedef int (RAMBlockIterFunc)(RAMBlock *rb, void *opaque); + +int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque); + void ram_block_notifier_add(RAMBlockNotifier *n); void ram_block_notifier_remove(RAMBlockNotifier *n); void ram_block_notify_add(void *host, size_t size, size_t max_size); diff --git a/include/system/xen-mapcache.h b/include/system/xen-mapcache.h index bb454a7c96..fa2cff38d1 100644 --- a/include/system/xen-mapcache.h +++ b/include/system/xen-mapcache.h @@ -9,7 +9,6 @@ #ifndef XEN_MAPCACHE_H #define XEN_MAPCACHE_H -#include "exec/cpu-common.h" #include "system/xen.h" typedef hwaddr (*phys_offset_to_gaddr_t)(hwaddr phys_offset, diff --git a/include/system/xen.h b/include/system/xen.h index c2f283d1c2..9a7c53f283 100644 --- a/include/system/xen.h +++ b/include/system/xen.h @@ -10,7 +10,8 @@ #ifndef SYSTEM_XEN_H #define SYSTEM_XEN_H -#include "exec/cpu-common.h" +#include "exec/hwaddr.h" +#include "system/ram_addr.h" #ifdef COMPILING_PER_TARGET # ifdef CONFIG_XEN diff --git a/migration/migration.h b/migration/migration.h index fbe02d5bb1..43fbe5488c 100644 --- a/migration/migration.h +++ b/migration/migration.h @@ -14,7 +14,8 @@ #ifndef QEMU_MIGRATION_H #define QEMU_MIGRATION_H -#include "exec/cpu-common.h" +#include "system/ram_addr.h" +#include "system/ramblock.h" #include "hw/core/qdev.h" #include "qapi/qapi-types-migration.h" #include "qobject/json-writer.h" diff --git a/migration/ram.c b/migration/ram.c index 6b469238ad..a57f4f49b3 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -48,7 +48,7 @@ #include "qapi/qapi-commands-migration.h" #include "qapi/qmp/qerror.h" #include "trace.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "exec/target_page.h" #include "qemu/rcu_queue.h" #include "migration/colo.h" diff --git a/migration/ram.h b/migration/ram.h index 24cd0bf585..41697a7599 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -31,6 +31,7 @@ #include "qapi/qapi-types-migration.h" #include "exec/cpu-common.h" +#include "system/ram_addr.h" #include "io/channel.h" /* diff --git a/rust/hw/char/pl011/src/bindings.rs b/rust/hw/char/pl011/src/bindings.rs index 654be9185b..68b9b22bbc 100644 --- a/rust/hw/char/pl011/src/bindings.rs +++ b/rust/hw/char/pl011/src/bindings.rs @@ -21,8 +21,8 @@ //! `bindgen`-generated declarations. use glib_sys::{ - gboolean, guint, GArray, GByteArray, GHashTable, GHashTableIter, GIOCondition, GList, - GMainContext, GPollFD, GPtrArray, GSList, GSource, GSourceFunc, GString, + gboolean, guint, GArray, GHashTable, GHashTableIter, GIOCondition, GList, GMainContext, + GPollFD, GPtrArray, GSList, GSource, GSourceFunc, }; #[cfg(MESON)] diff --git a/rust/hw/core/src/bindings.rs b/rust/hw/core/src/bindings.rs index 730d5b28a3..db872d38bc 100644 --- a/rust/hw/core/src/bindings.rs +++ b/rust/hw/core/src/bindings.rs @@ -20,7 +20,7 @@ use chardev::bindings::Chardev; use common::Zeroable; -use glib_sys::{GArray, GByteArray, GHashTable, GHashTableIter, GList, GPtrArray, GSList, GString}; +use glib_sys::{GHashTable, GHashTableIter, GList, GPtrArray, GSList}; use migration::bindings::VMStateDescription; use qom::bindings::ObjectClass; use system::bindings::MemoryRegion; diff --git a/rust/system/src/bindings.rs b/rust/system/src/bindings.rs index ddccfe0436..7164c5219a 100644 --- a/rust/system/src/bindings.rs +++ b/rust/system/src/bindings.rs @@ -19,10 +19,7 @@ )] use common::Zeroable; -use glib_sys::{ - guint, GArray, GByteArray, GHashTable, GHashTableIter, GList, GPollFD, GPtrArray, GSList, - GString, -}; +use glib_sys::{guint, GHashTable, GHashTableIter, GList, GPollFD, GPtrArray, GSList}; #[cfg(MESON)] include!("bindings.inc.rs"); diff --git a/stubs/physmem.c b/stubs/physmem.c index 1fc5f2df29..14667f2bd8 100644 --- a/stubs/physmem.c +++ b/stubs/physmem.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "exec/cpu-common.h" +#include "system/ramblock.h" RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, ram_addr_t *offset) diff --git a/stubs/ram-block.c b/stubs/ram-block.c index e88fab31a5..8790a59593 100644 --- a/stubs/ram-block.c +++ b/stubs/ram-block.c @@ -1,6 +1,6 @@ #include "qemu/osdep.h" -#include "exec/ramlist.h" -#include "exec/cpu-common.h" +#include "system/ramlist.h" +#include "system/ramblock.h" #include "system/memory.h" void *qemu_ram_get_host_addr(RAMBlock *rb) diff --git a/system/ioport.c b/system/ioport.c index 4f96e9119f..801e2490c3 100644 --- a/system/ioport.c +++ b/system/ioport.c @@ -29,6 +29,7 @@ #include "system/ioport.h" #include "system/memory.h" #include "system/address-spaces.h" +#include "hw/core/qdev.h" #include "trace.h" struct MemoryRegionPortioList { diff --git a/system/memory.c b/system/memory.c index b65219c2e4..2595075660 100644 --- a/system/memory.c +++ b/system/memory.c @@ -26,7 +26,7 @@ #include "qom/object.h" #include "trace.h" #include "system/physmem.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "system/kvm.h" #include "system/runstate.h" #include "system/tcg.h" diff --git a/system/physmem.c b/system/physmem.c index e3221ce00d..2547687d13 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -68,7 +68,7 @@ #include "qemu/main-loop.h" #include "system/replay.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "qemu/pmem.h" diff --git a/target/arm/kvm.c b/target/arm/kvm.c index 12a63602b1..48f853fff8 100644 --- a/target/arm/kvm.c +++ b/target/arm/kvm.c @@ -22,6 +22,7 @@ #include "qapi/error.h" #include "system/system.h" #include "system/runstate.h" +#include "system/ramblock.h" #include "system/kvm.h" #include "system/kvm_int.h" #include "kvm_arm.h" diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 60c7981138..e98da47a45 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -35,6 +35,7 @@ #include "system/hw_accel.h" #include "system/kvm_int.h" #include "system/runstate.h" +#include "system/ramblock.h" #include "kvm_i386.h" #include "../confidential-guest.h" #include "sev.h" diff --git a/target/i386/sev.c b/target/i386/sev.c index fd2dada013..fb5a3b5d77 100644 --- a/target/i386/sev.c +++ b/target/i386/sev.c @@ -41,6 +41,7 @@ #include "confidential-guest.h" #include "hw/i386/pc.h" #include "system/address-spaces.h" +#include "system/ramlist.h" #include "hw/i386/e820_memory_layout.h" #include "qemu/queue.h" #include "qemu/cutils.h" diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index 2c96eca584..3b2f1077da 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -41,7 +41,7 @@ #include "trace.h" #include "gdbstub/enums.h" #include "exec/memattrs.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "system/hostmem.h" #include "qemu/cutils.h" #include "qemu/main-loop.h" diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c index 916dac1f14..fe3bf408dd 100644 --- a/target/s390x/kvm/kvm.c +++ b/target/s390x/kvm/kvm.c @@ -41,7 +41,7 @@ #include "system/runstate.h" #include "system/device_tree.h" #include "gdbstub/enums.h" -#include "system/ram_addr.h" +#include "system/ramblock.h" #include "trace.h" #include "hw/s390x/s390-pci-inst.h" #include "hw/s390x/s390-pci-bus.h" diff --git a/tests/qtest/fuzz/generic_fuzz.c b/tests/qtest/fuzz/generic_fuzz.c index e8bb7bb0d5..440de25034 100644 --- a/tests/qtest/fuzz/generic_fuzz.c +++ b/tests/qtest/fuzz/generic_fuzz.c @@ -21,7 +21,7 @@ #include "fuzz.h" #include "string.h" #include "system/memory.h" -#include "system/ramblock.h" +#include "system/ram_addr.h" #include "hw/core/qdev.h" #include "hw/pci/pci.h" #include "hw/pci/pci_device.h" diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c index fdff042ab4..44b457c442 100644 --- a/util/vfio-helpers.c +++ b/util/vfio-helpers.c @@ -14,7 +14,7 @@ #include #include #include "qapi/error.h" -#include "exec/ramlist.h" +#include "system/ramlist.h" #include "exec/cpu-common.h" #include "system/memory.h" #include "trace.h" From cef5629f839e32875e703a92b3ece2a0827a2d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Tue, 25 Nov 2025 12:28:06 +0400 Subject: [PATCH 029/152] rust: remove leftover bindings/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Zhao Liu Signed-off-by: Marc-André Lureau --- rust/bindings/src/lib.rs | 64 ---------------------------------------- 1 file changed, 64 deletions(-) delete mode 100644 rust/bindings/src/lib.rs diff --git a/rust/bindings/src/lib.rs b/rust/bindings/src/lib.rs deleted file mode 100644 index 4c9bb794f7..0000000000 --- a/rust/bindings/src/lib.rs +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -#![allow( - dead_code, - improper_ctypes_definitions, - improper_ctypes, - non_camel_case_types, - non_snake_case, - non_upper_case_globals, - unsafe_op_in_unsafe_fn, - clippy::pedantic, - clippy::restriction, - clippy::style, - clippy::missing_const_for_fn, - clippy::ptr_offset_with_cast, - clippy::useless_transmute, - clippy::missing_safety_doc -)] - -//! `bindgen`-generated declarations. - -#[cfg(MESON)] -include!("bindings.inc.rs"); - -#[cfg(not(MESON))] -include!(concat!(env!("OUT_DIR"), "/bindings.inc.rs")); - -// SAFETY: these are implemented in C; the bindings need to assert that the -// BQL is taken, either directly or via `BqlCell` and `BqlRefCell`. -// When bindings for character devices are introduced, this can be -// moved to the Opaque<> wrapper in src/chardev.rs. -unsafe impl Send for CharFrontend {} -unsafe impl Sync for CharFrontend {} - -// SAFETY: this is a pure data struct -unsafe impl Send for CoalescedMemoryRange {} -unsafe impl Sync for CoalescedMemoryRange {} - -// SAFETY: these are constants and vtables; the Send and Sync requirements -// are deferred to the unsafe callbacks that they contain -unsafe impl Send for MemoryRegionOps {} -unsafe impl Sync for MemoryRegionOps {} - -unsafe impl Send for Property {} -unsafe impl Sync for Property {} - -unsafe impl Send for TypeInfo {} -unsafe impl Sync for TypeInfo {} - -unsafe impl Send for VMStateDescription {} -unsafe impl Sync for VMStateDescription {} - -unsafe impl Send for VMStateField {} -unsafe impl Sync for VMStateField {} - -unsafe impl Send for VMStateInfo {} -unsafe impl Sync for VMStateInfo {} - -// bindgen does not derive Default here -#[allow(clippy::derivable_impls)] -impl Default for VMStateFlags { - fn default() -> Self { - Self(0) - } -} From 06556a6b2b6fb5c20c9955437d8d71b94d1adba2 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Nov 2025 17:25:21 +0100 Subject: [PATCH 030/152] rust: remove unused --cfg arguments Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- rust/qemu-macros/meson.build | 5 ----- subprojects/packagefiles/bilge-impl-0.2-rs/meson.build | 3 --- subprojects/packagefiles/proc-macro-error-1-rs/meson.build | 1 - .../packagefiles/proc-macro-error-attr-1-rs/meson.build | 3 --- 4 files changed, 12 deletions(-) diff --git a/rust/qemu-macros/meson.build b/rust/qemu-macros/meson.build index 0f27e0df92..17b2a4e2e2 100644 --- a/rust/qemu-macros/meson.build +++ b/rust/qemu-macros/meson.build @@ -2,11 +2,6 @@ _qemu_macros_rs = rust.proc_macro( 'qemu_macros', files('src/lib.rs'), override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_args: [ - '--cfg', 'use_fallback', - '--cfg', 'feature="syn-error"', - '--cfg', 'feature="proc-macro"', - ], dependencies: [ attrs_rs_native, proc_macro2_rs_native, diff --git a/subprojects/packagefiles/bilge-impl-0.2-rs/meson.build b/subprojects/packagefiles/bilge-impl-0.2-rs/meson.build index 42b03dcd53..04617b875c 100644 --- a/subprojects/packagefiles/bilge-impl-0.2-rs/meson.build +++ b/subprojects/packagefiles/bilge-impl-0.2-rs/meson.build @@ -26,9 +26,6 @@ _bilge_impl_rs = rust.proc_macro( override_options: ['rust_std=2021', 'build.rust_std=2021'], rust_args: [ '--cap-lints', 'allow', - '--cfg', 'use_fallback', - '--cfg', 'feature="syn-error"', - '--cfg', 'feature="proc-macro"', ], dependencies: [ itertools_dep, diff --git a/subprojects/packagefiles/proc-macro-error-1-rs/meson.build b/subprojects/packagefiles/proc-macro-error-1-rs/meson.build index 10c2741085..8ba558e133 100644 --- a/subprojects/packagefiles/proc-macro-error-1-rs/meson.build +++ b/subprojects/packagefiles/proc-macro-error-1-rs/meson.build @@ -23,7 +23,6 @@ _proc_macro_error_rs = static_library( '--cap-lints', 'allow', '--cfg', 'use_fallback', '--cfg', 'feature="syn-error"', - '--cfg', 'feature="proc-macro"', '-A', 'non_fmt_panics' ], dependencies: [ diff --git a/subprojects/packagefiles/proc-macro-error-attr-1-rs/meson.build b/subprojects/packagefiles/proc-macro-error-attr-1-rs/meson.build index c4c4c5e397..a85d7c0714 100644 --- a/subprojects/packagefiles/proc-macro-error-attr-1-rs/meson.build +++ b/subprojects/packagefiles/proc-macro-error-attr-1-rs/meson.build @@ -17,9 +17,6 @@ _proc_macro_error_attr_rs = rust.proc_macro( override_options: ['rust_std=2018', 'build.rust_std=2018'], rust_args: [ '--cap-lints', 'allow', - '--cfg', 'use_fallback', - '--cfg', 'feature="syn-error"', - '--cfg', 'feature="proc-macro"' ], dependencies: [ proc_macro2_dep, From e65030ed50ee55bd1d296883cfd355e737fe68f7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Nov 2025 19:04:50 +0100 Subject: [PATCH 031/152] rust: remove unnecessary repetitive options Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- meson.build | 3 ++- rust/bits/meson.build | 2 -- rust/bql/meson.build | 2 -- rust/chardev/meson.build | 2 -- rust/common/meson.build | 2 -- rust/migration/meson.build | 2 -- rust/qemu-macros/meson.build | 1 - rust/qom/meson.build | 2 -- rust/system/meson.build | 2 -- rust/tests/meson.build | 1 - rust/trace/meson.build | 2 -- rust/util/meson.build | 2 -- 12 files changed, 2 insertions(+), 21 deletions(-) diff --git a/meson.build b/meson.build index d9293294d8..270181038b 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,7 @@ project('qemu', ['c'], meson_version: '>=1.5.0', default_options: ['warning_level=1', 'c_std=gnu11', 'cpp_std=gnu++11', 'b_colorout=auto', - 'b_staticpic=false', 'stdsplit=false', 'optimization=2', 'b_pie=true'], + 'b_staticpic=false', 'stdsplit=false', 'optimization=2', 'b_pie=true', + 'rust_std=2021', 'build.rust_std=2021'], version: files('VERSION')) meson.add_devenv({ 'MESON_BUILD_ROOT' : meson.project_build_root() }) diff --git a/rust/bits/meson.build b/rust/bits/meson.build index 359ca86f15..c0094ffcf3 100644 --- a/rust/bits/meson.build +++ b/rust/bits/meson.build @@ -1,8 +1,6 @@ _bits_rs = static_library( 'bits', 'src/lib.rs', - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'rust', dependencies: [qemu_macros], ) diff --git a/rust/bql/meson.build b/rust/bql/meson.build index 091372dd7b..e5836e3f56 100644 --- a/rust/bql/meson.build +++ b/rust/bql/meson.build @@ -34,8 +34,6 @@ _bql_rs = static_library( ], {'.': _bql_bindings_inc_rs} ), - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'rust', rust_args: _bql_cfg, dependencies: [glib_sys_rs], ) diff --git a/rust/chardev/meson.build b/rust/chardev/meson.build index 36ada7c454..6b681c609a 100644 --- a/rust/chardev/meson.build +++ b/rust/chardev/meson.build @@ -33,8 +33,6 @@ _chardev_rs = static_library( ], {'.': _chardev_bindings_inc_rs} ), - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'rust', link_with: [_bql_rs, _migration_rs, _qom_rs, _util_rs], dependencies: [glib_sys_rs, common_rs, qemu_macros], ) diff --git a/rust/common/meson.build b/rust/common/meson.build index aff601d1df..4b1cd35f63 100644 --- a/rust/common/meson.build +++ b/rust/common/meson.build @@ -16,8 +16,6 @@ _common_rs = static_library( 'src/zeroable.rs', ], ), - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'rust', rust_args: _common_cfg, dependencies: [libc_rs, qemu_macros], ) diff --git a/rust/migration/meson.build b/rust/migration/meson.build index 444494700a..94590dc1b8 100644 --- a/rust/migration/meson.build +++ b/rust/migration/meson.build @@ -36,8 +36,6 @@ _migration_rs = static_library( ], {'.' : _migration_bindings_inc_rs}, ), - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'rust', link_with: [_util_rs, _bql_rs], dependencies: [common_rs, glib_sys_rs, qemu_macros], ) diff --git a/rust/qemu-macros/meson.build b/rust/qemu-macros/meson.build index 17b2a4e2e2..cdea5bf439 100644 --- a/rust/qemu-macros/meson.build +++ b/rust/qemu-macros/meson.build @@ -1,7 +1,6 @@ _qemu_macros_rs = rust.proc_macro( 'qemu_macros', files('src/lib.rs'), - override_options: ['rust_std=2021', 'build.rust_std=2021'], dependencies: [ attrs_rs_native, proc_macro2_rs_native, diff --git a/rust/qom/meson.build b/rust/qom/meson.build index e50f41858d..551c4f0bf5 100644 --- a/rust/qom/meson.build +++ b/rust/qom/meson.build @@ -26,8 +26,6 @@ _qom_rs = static_library( ], {'.': _qom_bindings_inc_rs} ), - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'rust', link_with: [_bql_rs, _migration_rs], dependencies: [common_rs, glib_sys_rs, qemu_macros], ) diff --git a/rust/system/meson.build b/rust/system/meson.build index 73d6199114..2cd2dd3667 100644 --- a/rust/system/meson.build +++ b/rust/system/meson.build @@ -33,8 +33,6 @@ _system_rs = static_library( ], {'.': _system_bindings_inc_rs} ), - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'rust', link_with: [_bql_rs, _migration_rs, _qom_rs, _util_rs], dependencies: [glib_sys_rs, common_rs, qemu_macros], ) diff --git a/rust/tests/meson.build b/rust/tests/meson.build index 00688c66fb..3c5020490b 100644 --- a/rust/tests/meson.build +++ b/rust/tests/meson.build @@ -2,7 +2,6 @@ test('rust-integration', executable( 'rust-integration', files('tests/vmstate_tests.rs'), - override_options: ['rust_std=2021', 'build.rust_std=2021'], rust_args: ['--test'], install: false, dependencies: [bql_rs, common_rs, util_rs, migration_rs, qom_rs]), diff --git a/rust/trace/meson.build b/rust/trace/meson.build index adca57e550..1b3498f7fc 100644 --- a/rust/trace/meson.build +++ b/rust/trace/meson.build @@ -11,9 +11,7 @@ _trace_rs = static_library( 'trace', # Library name, lib_rs, trace_rs_targets, # List of generated `.rs` custom targets - override_options: ['rust_std=2021', 'build.rust_std=2021'], dependencies: [libc_rs], - rust_abi: 'rust', ) trace_rs = declare_dependency(link_with: _trace_rs) diff --git a/rust/util/meson.build b/rust/util/meson.build index 8ad344dccb..18d67a4b37 100644 --- a/rust/util/meson.build +++ b/rust/util/meson.build @@ -38,8 +38,6 @@ _util_rs = static_library( ], {'.': _util_bindings_inc_rs} ), - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'rust', dependencies: [anyhow_rs, libc_rs, foreign_rs, glib_sys_rs, common_rs, qom, qemuutil], ) From ebf3fb9a531a14ef4159ac9da874294e74560c54 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Nov 2025 13:39:08 +0100 Subject: [PATCH 032/152] rust: do not copy the SysBusDevice Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- rust/hw/core/src/sysbus.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/hw/core/src/sysbus.rs b/rust/hw/core/src/sysbus.rs index 68165e8929..ec620639be 100644 --- a/rust/hw/core/src/sysbus.rs +++ b/rust/hw/core/src/sysbus.rs @@ -78,7 +78,7 @@ where assert!(bql::is_locked()); // SAFETY: the BQL ensures that no one else writes to sbd.mmio[], and // the SysBusDevice must be initialized to get an IsA. - let sbd = unsafe { *self.upcast().as_ptr() }; + let sbd = unsafe { &*self.upcast().as_ptr() }; let id: usize = id.try_into().unwrap(); if sbd.mmio[id].memory.is_null() { None From 966eee573a6bb8cabd2560a5aabe9ab013994323 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Nov 2025 13:58:43 +0100 Subject: [PATCH 033/152] rust: fix reference to MemoryRegion Use the wrapper struct, not the C one. Signed-off-by: Paolo Bonzini --- rust/bql/src/cell.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/rust/bql/src/cell.rs b/rust/bql/src/cell.rs index 8ade7db629..f4bfa697d3 100644 --- a/rust/bql/src/cell.rs +++ b/rust/bql/src/cell.rs @@ -41,10 +41,11 @@ //! this rule is not flexible enough. Sometimes it is required to have multiple //! references to an object and yet mutate it. In particular, QEMU objects //! usually have their pointer shared with the "outside world very early in -//! their lifetime", for example when they create their -//! [`MemoryRegion`s](crate::bindings::MemoryRegion). Therefore, individual -//! parts of a device must be made mutable in a controlled manner; this module -//! provides the tools to do so. +//! their lifetime", for example when they create their [`MemoryRegion`s]. +//! Therefore, individual parts of a device must be made mutable in a +//! controlled manner; this module provides the tools to do so. +//! +//! [`MemoryRegion`s]: ../../system/memory/struct.MemoryRegion.html //! //! ## Cell types //! From 34f66fdfd285eb861cefcec2ab573dbbdf71cfc2 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 4 Dec 2025 10:19:00 +0100 Subject: [PATCH 034/152] rust: hide panicking default associated constants from rustdoc Work around rustdoc issue that panics while trying to evaluate the constants. Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- rust/hw/core/src/qdev.rs | 1 + rust/migration/src/vmstate.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/rust/hw/core/src/qdev.rs b/rust/hw/core/src/qdev.rs index 4e983da28b..c2ca17f6ce 100644 --- a/rust/hw/core/src/qdev.rs +++ b/rust/hw/core/src/qdev.rs @@ -132,6 +132,7 @@ unsafe extern "C" fn rust_resettable_exit_fn( /// [`bindings::PropertyInfo`] pointer for the trait implementation to be safe. pub unsafe trait QDevProp { const BASE_INFO: *const bindings::PropertyInfo; + #[doc(hidden)] // https://github.com/rust-lang/rust/issues/149635 const BIT_INFO: *const bindings::PropertyInfo = { panic!("invalid type for bit property"); }; diff --git a/rust/migration/src/vmstate.rs b/rust/migration/src/vmstate.rs index 267f9c8e05..f9d9f335b9 100644 --- a/rust/migration/src/vmstate.rs +++ b/rust/migration/src/vmstate.rs @@ -101,6 +101,7 @@ pub unsafe trait VMState { /// type for the length (i.e. if it is not `u8`, `u16`, `u32`), using it /// in a call to [`vmstate_of!`](crate::vmstate_of) will cause a /// compile-time error. + #[doc(hidden)] // https://github.com/rust-lang/rust/issues/149635 const VARRAY_FLAG: VMStateFlags = { panic!("invalid type for variable-sized array"); }; From f0768791b5bb49e6a4aa0255086c8701954ad3f1 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 13 Nov 2025 10:42:44 +0100 Subject: [PATCH 035/152] rust: move strict lints handling to meson.build Simplify rustc_args.py, and align its code with what Meson's own Cargo.toml translator does in v1.10. Bump unknown_lints to "forbid", so that it will certainly override Cargo.toml's "allow" level. Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- meson.build | 7 +++---- scripts/rust/rustc_args.py | 21 +++------------------ 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/meson.build b/meson.build index 270181038b..e6a11cefdb 100644 --- a/meson.build +++ b/meson.build @@ -128,14 +128,13 @@ if have_rust rustc_args = [find_program('scripts/rust/rustc_args.py'), '--rustc-version', rustc.version(), '--workspace', meson.project_source_root() / 'rust'] - if get_option('strict_rust_lints') - rustc_args += ['--strict-lints'] - endif - rustfmt = find_program('rustfmt', required: false) rustc_lint_args = run_command(rustc_args, '--lints', capture: true, check: true).stdout().strip().splitlines() + if get_option('strict_rust_lints') + rustc_lint_args += ['-Dwarnings', '-Funknown_lints'] + endif # Apart from procedural macros, our Rust executables will often link # with C code, so include all the libraries that C code needs. This diff --git a/scripts/rust/rustc_args.py b/scripts/rust/rustc_args.py index 63b0748e0d..8098053720 100644 --- a/scripts/rust/rustc_args.py +++ b/scripts/rust/rustc_args.py @@ -35,8 +35,6 @@ try: except ImportError: import tomli as tomllib -STRICT_LINTS = {"unknown_lints", "warnings"} - class CargoTOML: tomldata: Mapping[Any, Any] @@ -82,7 +80,7 @@ class LintFlag: priority: int -def generate_lint_flags(cargo_toml: CargoTOML, strict_lints: bool) -> Iterable[str]: +def generate_lint_flags(cargo_toml: CargoTOML) -> Iterable[str]: """Converts Cargo.toml lints to rustc -A/-D/-F/-W flags.""" toml_lints = cargo_toml.lints @@ -103,13 +101,7 @@ def generate_lint_flags(cargo_toml: CargoTOML, strict_lints: bool) -> Iterable[s flag = "-F" else: raise Exception(f"invalid level {level} for {prefix}{lint}") - - if not (strict_lints and lint in STRICT_LINTS): - lint_list.append(LintFlag(flags=[flag, prefix + lint], priority=priority)) - - if strict_lints: - for lint in STRICT_LINTS: - lint_list.append(LintFlag(flags=["-D", lint], priority=1000000)) + lint_list.append(LintFlag(flags=[flag, prefix + lint], priority=priority)) lint_list.sort(key=lambda x: x.priority) for lint in lint_list: @@ -187,13 +179,6 @@ def main() -> None: required=False, default="1.0.0", ) - parser.add_argument( - "--strict-lints", - action="store_true", - dest="strict_lints", - help="apply stricter checks (for nightly Rust)", - default=False, - ) args = parser.parse_args() if args.verbose: logging.basicConfig(level=logging.DEBUG) @@ -207,7 +192,7 @@ def main() -> None: cargo_toml = CargoTOML(args.cargo_toml, None) if args.lints: - for tok in generate_lint_flags(cargo_toml, args.strict_lints): + for tok in generate_lint_flags(cargo_toml): print(tok) if rustc_version >= (1, 80): From 6b4a0683aff0d907d289fff4b84e07bc40ff8ff4 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 4 Nov 2025 16:37:24 +0100 Subject: [PATCH 036/152] util: add prelude Signed-off-by: Paolo Bonzini --- rust/hw/char/pl011/src/device.rs | 2 +- rust/hw/timer/hpet/src/device.rs | 5 +---- rust/hw/timer/hpet/src/fw_cfg.rs | 2 +- rust/util/meson.build | 1 + rust/util/src/lib.rs | 5 +++++ rust/util/src/prelude.rs | 11 +++++++++++ 6 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 rust/util/src/prelude.rs diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index 04155dabe1..18f40fdc58 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -17,7 +17,7 @@ use migration::{ }; use qom::{prelude::*, ObjectImpl, Owned, ParentField, ParentInit}; use system::{hwaddr, MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilder}; -use util::{log::Log, log_mask_ln, ResultExt}; +use util::prelude::*; use crate::registers::{self, Interrupt, RegisterOffset}; diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 3564aa79c6..6e9c004eca 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -25,10 +25,7 @@ use system::{ bindings::{address_space_memory, address_space_stl_le, hwaddr}, MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilder, MEMTXATTRS_UNSPECIFIED, }; -use util::{ - ensure, - timer::{Timer, CLOCK_VIRTUAL, NANOSECONDS_PER_SECOND}, -}; +use util::prelude::*; use crate::fw_cfg::HPETFwConfig; diff --git a/rust/hw/timer/hpet/src/fw_cfg.rs b/rust/hw/timer/hpet/src/fw_cfg.rs index 777fc8ef45..ad80acd998 100644 --- a/rust/hw/timer/hpet/src/fw_cfg.rs +++ b/rust/hw/timer/hpet/src/fw_cfg.rs @@ -5,7 +5,7 @@ use std::ptr::addr_of_mut; use common::Zeroable; -use util::{self, ensure}; +use util::{self, prelude::*}; /// Each `HPETState` represents a Event Timer Block. The v1 spec supports /// up to 8 blocks. QEMU only uses 1 block (in PC machine). diff --git a/rust/util/meson.build b/rust/util/meson.build index 18d67a4b37..95b44f7c67 100644 --- a/rust/util/meson.build +++ b/rust/util/meson.build @@ -34,6 +34,7 @@ _util_rs = static_library( 'src/error.rs', 'src/log.rs', 'src/module.rs', + 'src/prelude.rs', 'src/timer.rs', ], {'.': _util_bindings_inc_rs} diff --git a/rust/util/src/lib.rs b/rust/util/src/lib.rs index d14aa14ca7..7d2de3ed81 100644 --- a/rust/util/src/lib.rs +++ b/rust/util/src/lib.rs @@ -4,6 +4,11 @@ pub mod bindings; pub mod error; pub mod log; pub mod module; + +// preserve one-item-per-"use" syntax, it is clearer +// for prelude-like modules +#[rustfmt::skip] +pub mod prelude; pub mod timer; pub use error::{Error, Result, ResultExt}; diff --git a/rust/util/src/prelude.rs b/rust/util/src/prelude.rs new file mode 100644 index 0000000000..f52e7100e9 --- /dev/null +++ b/rust/util/src/prelude.rs @@ -0,0 +1,11 @@ +//! Essential types and traits intended for blanket imports. + +pub use crate::error::ResultExt; +pub use crate::log::Log; +pub use crate::timer::Timer; +pub use crate::timer::CLOCK_VIRTUAL; +pub use crate::timer::NANOSECONDS_PER_SECOND; + +// Re-export commonly used macros +pub use crate::ensure; +pub use crate::log_mask_ln; From d30bb44c576cf9e2d8d6d5ae88dba1c02ad3422c Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 4 Nov 2025 16:37:24 +0100 Subject: [PATCH 037/152] common: add prelude Signed-off-by: Paolo Bonzini --- rust/common/meson.build | 13 +------------ rust/common/src/lib.rs | 5 +++++ rust/common/src/prelude.rs | 9 +++++++++ rust/hw/char/pl011/src/device.rs | 2 +- rust/hw/timer/hpet/src/device.rs | 2 +- 5 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 rust/common/src/prelude.rs diff --git a/rust/common/meson.build b/rust/common/meson.build index 4b1cd35f63..57091b18fc 100644 --- a/rust/common/meson.build +++ b/rust/common/meson.build @@ -4,18 +4,7 @@ _common_cfg = run_command(rustc_args, _common_rs = static_library( 'common', - structured_sources( - [ - 'src/lib.rs', - 'src/assertions.rs', - 'src/bitops.rs', - 'src/callbacks.rs', - 'src/errno.rs', - 'src/opaque.rs', - 'src/uninit.rs', - 'src/zeroable.rs', - ], - ), + 'src/lib.rs', rust_args: _common_cfg, dependencies: [libc_rs, qemu_macros], ) diff --git a/rust/common/src/lib.rs b/rust/common/src/lib.rs index 8311bf945d..6093d01a38 100644 --- a/rust/common/src/lib.rs +++ b/rust/common/src/lib.rs @@ -15,6 +15,11 @@ pub use errno::Errno; pub mod opaque; pub use opaque::{Opaque, Wrapper}; +// preserve one-item-per-"use" syntax, it is clearer +// for prelude-like modules +#[rustfmt::skip] +pub mod prelude; + pub mod uninit; pub use uninit::MaybeUninitField; diff --git a/rust/common/src/prelude.rs b/rust/common/src/prelude.rs new file mode 100644 index 0000000000..7d38ea1205 --- /dev/null +++ b/rust/common/src/prelude.rs @@ -0,0 +1,9 @@ +//! Essential types and traits intended for blanket imports. + +pub use crate::bitops::IntegerExt; +pub use crate::uninit::MaybeUninitField; + +// Re-export commonly used macros +pub use crate::static_assert; +pub use crate::uninit_field_mut; +pub use qemu_macros::TryInto; diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index 18f40fdc58..b7e8e393d2 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -6,7 +6,7 @@ use std::{ffi::CStr, mem::size_of}; use bql::BqlRefCell; use chardev::{CharFrontend, Chardev, Event}; -use common::{static_assert, uninit_field_mut}; +use common::prelude::*; use hwcore::{ Clock, ClockEvent, DeviceImpl, DeviceMethods, DeviceState, IRQState, InterruptSource, ResetType, ResettablePhasesImpl, SysBusDevice, SysBusDeviceImpl, SysBusDeviceMethods, diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 6e9c004eca..e9c7afa24d 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -11,7 +11,7 @@ use std::{ }; use bql::{BqlCell, BqlRefCell}; -use common::{bitops::IntegerExt, uninit_field_mut}; +use common::prelude::*; use hwcore::{ DeviceImpl, DeviceMethods, DeviceState, InterruptSource, ResetType, ResettablePhasesImpl, SysBusDevice, SysBusDeviceImpl, SysBusDeviceMethods, From ea9a5074b16717b3a205647a29246ad0d4f1c22e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 4 Nov 2025 16:44:52 +0100 Subject: [PATCH 038/152] hwcore: add prelude Signed-off-by: Paolo Bonzini --- rust/hw/char/pl011/src/device.rs | 5 +---- rust/hw/core/meson.build | 1 + rust/hw/core/src/lib.rs | 5 +++++ rust/hw/core/src/prelude.rs | 14 ++++++++++++++ rust/hw/core/tests/tests.rs | 2 +- rust/hw/timer/hpet/src/device.rs | 5 +---- 6 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 rust/hw/core/src/prelude.rs diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index b7e8e393d2..164f27d5bb 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -7,10 +7,7 @@ use std::{ffi::CStr, mem::size_of}; use bql::BqlRefCell; use chardev::{CharFrontend, Chardev, Event}; use common::prelude::*; -use hwcore::{ - Clock, ClockEvent, DeviceImpl, DeviceMethods, DeviceState, IRQState, InterruptSource, - ResetType, ResettablePhasesImpl, SysBusDevice, SysBusDeviceImpl, SysBusDeviceMethods, -}; +use hwcore::{prelude::*, ClockEvent, IRQState}; use migration::{ self, impl_vmstate_forward, impl_vmstate_struct, vmstate_fields, vmstate_of, vmstate_subsections, vmstate_unused, VMStateDescription, VMStateDescriptionBuilder, diff --git a/rust/hw/core/meson.build b/rust/hw/core/meson.build index 1560dd20c6..fa1765a230 100644 --- a/rust/hw/core/meson.build +++ b/rust/hw/core/meson.build @@ -51,6 +51,7 @@ _hwcore_rs = static_library( 'src/lib.rs', 'src/bindings.rs', 'src/irq.rs', + 'src/prelude.rs', 'src/qdev.rs', 'src/sysbus.rs', ], diff --git a/rust/hw/core/src/lib.rs b/rust/hw/core/src/lib.rs index b40801eb84..491743d2b9 100644 --- a/rust/hw/core/src/lib.rs +++ b/rust/hw/core/src/lib.rs @@ -8,6 +8,11 @@ pub mod bindings; mod irq; pub use irq::*; +// preserve one-item-per-"use" syntax, it is clearer +// for prelude-like modules +#[rustfmt::skip] +pub mod prelude; + mod qdev; pub use qdev::*; diff --git a/rust/hw/core/src/prelude.rs b/rust/hw/core/src/prelude.rs new file mode 100644 index 0000000000..c544c317b3 --- /dev/null +++ b/rust/hw/core/src/prelude.rs @@ -0,0 +1,14 @@ +//! Essential types and traits intended for blanket imports. + +pub use crate::qdev::Clock; +pub use crate::qdev::DeviceState; +pub use crate::qdev::DeviceImpl; +pub use crate::qdev::DeviceMethods; +pub use crate::qdev::ResettablePhasesImpl; +pub use crate::qdev::ResetType; + +pub use crate::sysbus::SysBusDevice; +pub use crate::sysbus::SysBusDeviceImpl; +pub use crate::sysbus::SysBusDeviceMethods; + +pub use crate::irq::InterruptSource; diff --git a/rust/hw/core/tests/tests.rs b/rust/hw/core/tests/tests.rs index 247d812866..b39d1501d5 100644 --- a/rust/hw/core/tests/tests.rs +++ b/rust/hw/core/tests/tests.rs @@ -5,7 +5,7 @@ use std::{ffi::CStr, ptr::addr_of}; use bql::BqlCell; -use hwcore::{DeviceImpl, DeviceState, ResettablePhasesImpl, SysBusDevice}; +use hwcore::prelude::*; use migration::{VMStateDescription, VMStateDescriptionBuilder}; use qom::{prelude::*, ObjectImpl, ParentField}; use util::bindings::{module_call_init, module_init_type}; diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index e9c7afa24d..7ab9897cdf 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -12,10 +12,7 @@ use std::{ use bql::{BqlCell, BqlRefCell}; use common::prelude::*; -use hwcore::{ - DeviceImpl, DeviceMethods, DeviceState, InterruptSource, ResetType, ResettablePhasesImpl, - SysBusDevice, SysBusDeviceImpl, SysBusDeviceMethods, -}; +use hwcore::prelude::*; use migration::{ self, impl_vmstate_struct, vmstate_fields, vmstate_of, vmstate_subsections, vmstate_validate, VMStateDescription, VMStateDescriptionBuilder, From e560f257b2a5e742e9f1056768cde096c5d7c844 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 4 Nov 2025 16:44:52 +0100 Subject: [PATCH 039/152] migration: add prelude Signed-off-by: Paolo Bonzini --- rust/chardev/src/prelude.rs | 3 +++ rust/hw/char/pl011/src/device.rs | 5 +---- rust/hw/core/tests/tests.rs | 2 +- rust/hw/timer/hpet/src/device.rs | 5 +---- rust/migration/meson.build | 1 + rust/migration/src/lib.rs | 5 +++++ rust/migration/src/prelude.rs | 19 +++++++++++++++++++ rust/tests/tests/vmstate_tests.rs | 5 ++--- 8 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 rust/chardev/src/prelude.rs create mode 100644 rust/migration/src/prelude.rs diff --git a/rust/chardev/src/prelude.rs b/rust/chardev/src/prelude.rs new file mode 100644 index 0000000000..9f0b561bfa --- /dev/null +++ b/rust/chardev/src/prelude.rs @@ -0,0 +1,3 @@ +//! Essential types and traits intended for blanket imports. + +pub use crate::chardev::{Chardev, CharFrontend, Event}; \ No newline at end of file diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index 164f27d5bb..2e4ccc9b23 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -8,10 +8,7 @@ use bql::BqlRefCell; use chardev::{CharFrontend, Chardev, Event}; use common::prelude::*; use hwcore::{prelude::*, ClockEvent, IRQState}; -use migration::{ - self, impl_vmstate_forward, impl_vmstate_struct, vmstate_fields, vmstate_of, - vmstate_subsections, vmstate_unused, VMStateDescription, VMStateDescriptionBuilder, -}; +use migration::{self, prelude::*}; use qom::{prelude::*, ObjectImpl, Owned, ParentField, ParentInit}; use system::{hwaddr, MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilder}; use util::prelude::*; diff --git a/rust/hw/core/tests/tests.rs b/rust/hw/core/tests/tests.rs index b39d1501d5..f38376d001 100644 --- a/rust/hw/core/tests/tests.rs +++ b/rust/hw/core/tests/tests.rs @@ -6,7 +6,7 @@ use std::{ffi::CStr, ptr::addr_of}; use bql::BqlCell; use hwcore::prelude::*; -use migration::{VMStateDescription, VMStateDescriptionBuilder}; +use migration::prelude::*; use qom::{prelude::*, ObjectImpl, ParentField}; use util::bindings::{module_call_init, module_init_type}; diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 7ab9897cdf..4ff1779a3d 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -13,10 +13,7 @@ use std::{ use bql::{BqlCell, BqlRefCell}; use common::prelude::*; use hwcore::prelude::*; -use migration::{ - self, impl_vmstate_struct, vmstate_fields, vmstate_of, vmstate_subsections, vmstate_validate, - VMStateDescription, VMStateDescriptionBuilder, -}; +use migration::{self, prelude::*}; use qom::{prelude::*, ObjectImpl, ParentField, ParentInit}; use system::{ bindings::{address_space_memory, address_space_stl_le, hwaddr}, diff --git a/rust/migration/meson.build b/rust/migration/meson.build index 94590dc1b8..76d86b0ac0 100644 --- a/rust/migration/meson.build +++ b/rust/migration/meson.build @@ -32,6 +32,7 @@ _migration_rs = static_library( 'src/lib.rs', 'src/bindings.rs', 'src/migratable.rs', + 'src/prelude.rs', 'src/vmstate.rs', ], {'.' : _migration_bindings_inc_rs}, diff --git a/rust/migration/src/lib.rs b/rust/migration/src/lib.rs index c9bdf0d413..32e182e716 100644 --- a/rust/migration/src/lib.rs +++ b/rust/migration/src/lib.rs @@ -7,5 +7,10 @@ pub use qemu_macros::ToMigrationState; pub mod migratable; pub use migratable::*; +// preserve one-item-per-"use" syntax, it is clearer +// for prelude-like modules +#[rustfmt::skip] +pub mod prelude; + pub mod vmstate; pub use vmstate::*; diff --git a/rust/migration/src/prelude.rs b/rust/migration/src/prelude.rs new file mode 100644 index 0000000000..797e7ec59d --- /dev/null +++ b/rust/migration/src/prelude.rs @@ -0,0 +1,19 @@ +//! Essential types and traits intended for blanket imports. + +// Core migration traits and types +pub use crate::vmstate::VMState; +pub use crate::vmstate::VMStateDescription; +pub use crate::vmstate::VMStateDescriptionBuilder; + +// Migratable wrappers +pub use crate::migratable::Migratable; +pub use crate::ToMigrationState; + +// Commonly used macros +pub use crate::impl_vmstate_forward; +pub use crate::impl_vmstate_struct; +pub use crate::vmstate_fields; +pub use crate::vmstate_of; +pub use crate::vmstate_subsections; +pub use crate::vmstate_unused; +pub use crate::vmstate_validate; diff --git a/rust/tests/tests/vmstate_tests.rs b/rust/tests/tests/vmstate_tests.rs index fa9bbd6a12..c3f9e1c743 100644 --- a/rust/tests/tests/vmstate_tests.rs +++ b/rust/tests/tests/vmstate_tests.rs @@ -16,9 +16,8 @@ use migration::{ vmstate_info_bool, vmstate_info_int32, vmstate_info_int64, vmstate_info_int8, vmstate_info_uint64, vmstate_info_uint8, vmstate_info_unused_buffer, VMStateFlags, }, - impl_vmstate_forward, impl_vmstate_struct, - vmstate::{VMStateDescription, VMStateDescriptionBuilder, VMStateField}, - vmstate_fields, vmstate_of, vmstate_unused, vmstate_validate, + prelude::*, + vmstate::VMStateField, }; const FOO_ARRAY_MAX: usize = 3; From cd6e5449dadd57bd87dd8e56d51e18431065c623 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 4 Nov 2025 16:44:52 +0100 Subject: [PATCH 040/152] chardev: add prelude Signed-off-by: Paolo Bonzini --- rust/chardev/meson.build | 1 + rust/chardev/src/lib.rs | 5 +++++ rust/chardev/src/prelude.rs | 4 +++- rust/hw/char/pl011/src/device.rs | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/rust/chardev/meson.build b/rust/chardev/meson.build index 6b681c609a..54bb296252 100644 --- a/rust/chardev/meson.build +++ b/rust/chardev/meson.build @@ -30,6 +30,7 @@ _chardev_rs = static_library( 'src/lib.rs', 'src/bindings.rs', 'src/chardev.rs', + 'src/prelude.rs', ], {'.': _chardev_bindings_inc_rs} ), diff --git a/rust/chardev/src/lib.rs b/rust/chardev/src/lib.rs index 2e549f99d9..93a2872593 100644 --- a/rust/chardev/src/lib.rs +++ b/rust/chardev/src/lib.rs @@ -4,3 +4,8 @@ pub mod bindings; mod chardev; pub use chardev::*; + +// preserve one-item-per-"use" syntax, it is clearer +// for prelude-like modules +#[rustfmt::skip] +pub mod prelude; diff --git a/rust/chardev/src/prelude.rs b/rust/chardev/src/prelude.rs index 9f0b561bfa..f949d92539 100644 --- a/rust/chardev/src/prelude.rs +++ b/rust/chardev/src/prelude.rs @@ -1,3 +1,5 @@ //! Essential types and traits intended for blanket imports. -pub use crate::chardev::{Chardev, CharFrontend, Event}; \ No newline at end of file +pub use crate::chardev::Chardev; +pub use crate::chardev::CharFrontend; +pub use crate::chardev::Event; diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index 2e4ccc9b23..ff929e6099 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -5,7 +5,7 @@ use std::{ffi::CStr, mem::size_of}; use bql::BqlRefCell; -use chardev::{CharFrontend, Chardev, Event}; +use chardev::prelude::*; use common::prelude::*; use hwcore::{prelude::*, ClockEvent, IRQState}; use migration::{self, prelude::*}; From 2ff035b7c795fc34e641d0a8e07a9a55a338fa19 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 4 Nov 2025 16:44:52 +0100 Subject: [PATCH 041/152] bql: add prelude Signed-off-by: Paolo Bonzini --- rust/bql/meson.build | 1 + rust/bql/src/lib.rs | 5 +++++ rust/bql/src/prelude.rs | 4 ++++ rust/chardev/src/chardev.rs | 2 +- rust/hw/char/pl011/src/device.rs | 2 +- rust/hw/core/tests/tests.rs | 2 +- rust/hw/timer/hpet/src/device.rs | 2 +- rust/migration/src/migratable.rs | 2 +- rust/tests/tests/vmstate_tests.rs | 2 +- 9 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 rust/bql/src/prelude.rs diff --git a/rust/bql/meson.build b/rust/bql/meson.build index e5836e3f56..728c9e4dac 100644 --- a/rust/bql/meson.build +++ b/rust/bql/meson.build @@ -31,6 +31,7 @@ _bql_rs = static_library( 'src/lib.rs', 'src/bindings.rs', 'src/cell.rs', + 'src/prelude.rs', ], {'.': _bql_bindings_inc_rs} ), diff --git a/rust/bql/src/lib.rs b/rust/bql/src/lib.rs index ef08221e9c..d2fea5db1a 100644 --- a/rust/bql/src/lib.rs +++ b/rust/bql/src/lib.rs @@ -6,6 +6,11 @@ use bindings::{bql_block_unlock, bql_locked, rust_bql_mock_lock}; mod cell; pub use cell::*; +// preserve one-item-per-"use" syntax, it is clearer +// for prelude-like modules +#[rustfmt::skip] +pub mod prelude; + /// An internal function that is used by doctests. pub fn start_test() { // SAFETY: integration tests are run with --test-threads=1, while diff --git a/rust/bql/src/prelude.rs b/rust/bql/src/prelude.rs new file mode 100644 index 0000000000..42031ec18a --- /dev/null +++ b/rust/bql/src/prelude.rs @@ -0,0 +1,4 @@ +//! Essential types and traits intended for blanket imports. + +pub use crate::cell::BqlCell; +pub use crate::cell::BqlRefCell; diff --git a/rust/chardev/src/chardev.rs b/rust/chardev/src/chardev.rs index f0b7975dbf..fb9674b3fb 100644 --- a/rust/chardev/src/chardev.rs +++ b/rust/chardev/src/chardev.rs @@ -18,7 +18,7 @@ use std::{ slice, }; -use bql::{BqlRefCell, BqlRefMut}; +use bql::{prelude::*, BqlRefMut}; use common::{callbacks::FnCall, errno, Opaque}; use qom::prelude::*; diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index ff929e6099..be1bdf5ab1 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -4,7 +4,7 @@ use std::{ffi::CStr, mem::size_of}; -use bql::BqlRefCell; +use bql::prelude::*; use chardev::prelude::*; use common::prelude::*; use hwcore::{prelude::*, ClockEvent, IRQState}; diff --git a/rust/hw/core/tests/tests.rs b/rust/hw/core/tests/tests.rs index f38376d001..e60c9d018f 100644 --- a/rust/hw/core/tests/tests.rs +++ b/rust/hw/core/tests/tests.rs @@ -4,7 +4,7 @@ use std::{ffi::CStr, ptr::addr_of}; -use bql::BqlCell; +use bql::prelude::*; use hwcore::prelude::*; use migration::prelude::*; use qom::{prelude::*, ObjectImpl, ParentField}; diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 4ff1779a3d..b7153a46e3 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -10,7 +10,7 @@ use std::{ slice::from_ref, }; -use bql::{BqlCell, BqlRefCell}; +use bql::prelude::*; use common::prelude::*; use hwcore::prelude::*; use migration::{self, prelude::*}; diff --git a/rust/migration/src/migratable.rs b/rust/migration/src/migratable.rs index ded6fe8f4a..ce60386750 100644 --- a/rust/migration/src/migratable.rs +++ b/rust/migration/src/migratable.rs @@ -9,7 +9,7 @@ use std::{ sync::{Arc, Mutex}, }; -use bql::{BqlCell, BqlRefCell}; +use bql::prelude::*; use common::Zeroable; use crate::{ diff --git a/rust/tests/tests/vmstate_tests.rs b/rust/tests/tests/vmstate_tests.rs index c3f9e1c743..87176a8099 100644 --- a/rust/tests/tests/vmstate_tests.rs +++ b/rust/tests/tests/vmstate_tests.rs @@ -9,7 +9,7 @@ use std::{ slice, }; -use bql::BqlCell; +use bql::prelude::*; use common::Opaque; use migration::{ bindings::{ From c0eb26603d2c8c2e7336d0fa03c4e2b3f069b7eb Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 4 Nov 2025 16:44:52 +0100 Subject: [PATCH 042/152] system: add prelude Signed-off-by: Paolo Bonzini --- rust/hw/char/pl011/src/device.rs | 2 +- rust/hw/timer/hpet/src/device.rs | 5 +++-- rust/system/meson.build | 1 + rust/system/src/lib.rs | 5 +++++ rust/system/src/prelude.rs | 8 ++++++++ 5 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 rust/system/src/prelude.rs diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index be1bdf5ab1..0b1bb2d5a3 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -10,7 +10,7 @@ use common::prelude::*; use hwcore::{prelude::*, ClockEvent, IRQState}; use migration::{self, prelude::*}; use qom::{prelude::*, ObjectImpl, Owned, ParentField, ParentInit}; -use system::{hwaddr, MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilder}; +use system::prelude::*; use util::prelude::*; use crate::registers::{self, Interrupt, RegisterOffset}; diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index b7153a46e3..c5cdb87b07 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -16,8 +16,9 @@ use hwcore::prelude::*; use migration::{self, prelude::*}; use qom::{prelude::*, ObjectImpl, ParentField, ParentInit}; use system::{ - bindings::{address_space_memory, address_space_stl_le, hwaddr}, - MemoryRegion, MemoryRegionOps, MemoryRegionOpsBuilder, MEMTXATTRS_UNSPECIFIED, + bindings::{address_space_memory, address_space_stl_le}, + MEMTXATTRS_UNSPECIFIED, + prelude::*, }; use util::prelude::*; diff --git a/rust/system/meson.build b/rust/system/meson.build index 2cd2dd3667..e9f36ed855 100644 --- a/rust/system/meson.build +++ b/rust/system/meson.build @@ -30,6 +30,7 @@ _system_rs = static_library( 'src/lib.rs', 'src/bindings.rs', 'src/memory.rs', + 'src/prelude.rs', ], {'.': _system_bindings_inc_rs} ), diff --git a/rust/system/src/lib.rs b/rust/system/src/lib.rs index aafe9a866c..5fb83b65d8 100644 --- a/rust/system/src/lib.rs +++ b/rust/system/src/lib.rs @@ -4,3 +4,8 @@ pub mod bindings; mod memory; pub use memory::*; + +// preserve one-item-per-"use" syntax, it is clearer +// for prelude-like modules +#[rustfmt::skip] +pub mod prelude; diff --git a/rust/system/src/prelude.rs b/rust/system/src/prelude.rs new file mode 100644 index 0000000000..2d98524c36 --- /dev/null +++ b/rust/system/src/prelude.rs @@ -0,0 +1,8 @@ +//! Essential types and traits intended for blanket imports. + +// Core memory types +pub use crate::memory::hwaddr; +pub use crate::memory::MemoryRegion; +pub use crate::memory::MemoryRegionOps; +pub use crate::memory::MemoryRegionOpsBuilder; +pub use crate::memory::MemTxAttrs; From 8218c7a7042b5d07ed851794636401811095340a Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 4 Nov 2025 16:57:30 +0100 Subject: [PATCH 043/152] qom: add more to the prelude Signed-off-by: Paolo Bonzini --- rust/hw/char/pl011/src/device.rs | 2 +- rust/hw/core/src/qdev.rs | 2 +- rust/hw/core/src/sysbus.rs | 2 +- rust/hw/core/tests/tests.rs | 2 +- rust/hw/timer/hpet/src/device.rs | 2 +- rust/qom/src/prelude.rs | 4 ++++ 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/device.rs index 0b1bb2d5a3..9f5c4a34df 100644 --- a/rust/hw/char/pl011/src/device.rs +++ b/rust/hw/char/pl011/src/device.rs @@ -9,7 +9,7 @@ use chardev::prelude::*; use common::prelude::*; use hwcore::{prelude::*, ClockEvent, IRQState}; use migration::{self, prelude::*}; -use qom::{prelude::*, ObjectImpl, Owned, ParentField, ParentInit}; +use qom::prelude::*; use system::prelude::*; use util::prelude::*; diff --git a/rust/hw/core/src/qdev.rs b/rust/hw/core/src/qdev.rs index c2ca17f6ce..87232becba 100644 --- a/rust/hw/core/src/qdev.rs +++ b/rust/hw/core/src/qdev.rs @@ -12,7 +12,7 @@ use std::{ use chardev::Chardev; use common::{callbacks::FnCall, Opaque}; use migration::{impl_vmstate_c_struct, VMStateDescription}; -use qom::{prelude::*, ObjectClass, ObjectImpl, Owned, ParentInit}; +use qom::{prelude::*, ObjectClass}; use util::{Error, Result}; pub use crate::bindings::{ClockEvent, DeviceClass, Property, ResetType}; diff --git a/rust/hw/core/src/sysbus.rs b/rust/hw/core/src/sysbus.rs index ec620639be..071fccff1e 100644 --- a/rust/hw/core/src/sysbus.rs +++ b/rust/hw/core/src/sysbus.rs @@ -8,7 +8,7 @@ use std::ffi::CStr; pub use bindings::SysBusDeviceClass; use common::Opaque; -use qom::{prelude::*, Owned}; +use qom::prelude::*; use system::MemoryRegion; use util::{Error, Result}; diff --git a/rust/hw/core/tests/tests.rs b/rust/hw/core/tests/tests.rs index e60c9d018f..115dd7a860 100644 --- a/rust/hw/core/tests/tests.rs +++ b/rust/hw/core/tests/tests.rs @@ -7,7 +7,7 @@ use std::{ffi::CStr, ptr::addr_of}; use bql::prelude::*; use hwcore::prelude::*; use migration::prelude::*; -use qom::{prelude::*, ObjectImpl, ParentField}; +use qom::prelude::*; use util::bindings::{module_call_init, module_init_type}; // Test that macros can compile. diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index c5cdb87b07..c82b27ddf1 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -14,7 +14,7 @@ use bql::prelude::*; use common::prelude::*; use hwcore::prelude::*; use migration::{self, prelude::*}; -use qom::{prelude::*, ObjectImpl, ParentField, ParentInit}; +use qom::prelude::*; use system::{ bindings::{address_space_memory, address_space_stl_le}, MEMTXATTRS_UNSPECIFIED, diff --git a/rust/qom/src/prelude.rs b/rust/qom/src/prelude.rs index 00a6095977..6a1ecaef2a 100644 --- a/rust/qom/src/prelude.rs +++ b/rust/qom/src/prelude.rs @@ -6,7 +6,11 @@ pub use crate::qom::Object; pub use crate::qom::ObjectCast; pub use crate::qom::ObjectClassMethods; pub use crate::qom::ObjectDeref; +pub use crate::qom::ObjectImpl; pub use crate::qom::ObjectMethods; pub use crate::qom::ObjectType; +pub use crate::qom::Owned; +pub use crate::qom::ParentField; +pub use crate::qom::ParentInit; pub use crate::qom_isa; From da5eacf9d148ddb837ad044eef7eecfd410cc4ee Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 6 Nov 2025 16:56:05 -0500 Subject: [PATCH 044/152] hpet: remove unused trace events Signed-off-by: Stefan Hajnoczi Reviewed-by: Manos Pitsidianakis Link: https://lore.kernel.org/r/20251106215606.36598-2-stefanha@redhat.com Signed-off-by: Paolo Bonzini --- hw/timer/trace-events | 2 -- 1 file changed, 2 deletions(-) diff --git a/hw/timer/trace-events b/hw/timer/trace-events index 2bb51f95ea..f3fca6fc9b 100644 --- a/hw/timer/trace-events +++ b/hw/timer/trace-events @@ -112,7 +112,6 @@ sh_timer_write(uint64_t offset, uint64_t value) "tmu012_write 0x%" PRIx64 " 0x%0 # hpet.c hpet_timer_id_out_of_range(uint8_t timer_id) "timer id out of range: 0x%" PRIx8 -hpet_invalid_hpet_cfg(uint8_t reg_off) "invalid HPET_CFG + %u" PRIx8 hpet_ram_read(uint64_t addr) "enter hpet_ram_readl at 0x%" PRIx64 hpet_ram_read_reading_counter(uint8_t reg_off, uint64_t cur_tick) "reading counter + %" PRIu8 " = 0x%" PRIx64 hpet_ram_read_invalid(void) "invalid hpet_ram_readl" @@ -123,4 +122,3 @@ hpet_ram_write_tn_cmp(uint8_t reg_off) "hpet_ram_writel HPET_TN_CMP + %" PRIu8 hpet_ram_write_invalid_tn_cmp(void) "invalid HPET_TN_CMP + 4 write" hpet_ram_write_invalid(void) "invalid hpet_ram_writel" hpet_ram_write_counter_write_while_enabled(void) "Writing counter while HPET enabled!" -hpet_ram_write_counter_written(uint8_t reg_off, uint64_t value, uint64_t counter) "HPET counter + %" PRIu8 "written. crt = 0x%" PRIx64 " -> 0x%" PRIx64 From 751535943e8c0e7c6a9cfac4d16dae5d169d36bc Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Thu, 6 Nov 2025 16:56:06 -0500 Subject: [PATCH 045/152] rust/hpet: add trace events Implement the same trace events as the C implementation. Notes: - Keep order of hpet_ram_write_invalid_tn_cmp and hpet_ram_write_tn_cmp the same as the C implementation. - Put hpet_ram_write_timer_id in HPETTimer::write() instead of HPETState::decode() so that reads can be excluded. Signed-off-by: Stefan Hajnoczi Reviewed-by: Manos Pitsidianakis Link: https://lore.kernel.org/r/20251106215606.36598-3-stefanha@redhat.com Signed-off-by: Paolo Bonzini --- hw/timer/trace-events | 2 +- rust/Cargo.lock | 1 + rust/hw/timer/hpet/Cargo.toml | 1 + rust/hw/timer/hpet/meson.build | 1 + rust/hw/timer/hpet/src/device.rs | 44 ++++++++++++++++++-------------- 5 files changed, 29 insertions(+), 20 deletions(-) diff --git a/hw/timer/trace-events b/hw/timer/trace-events index f3fca6fc9b..ac5afe84e8 100644 --- a/hw/timer/trace-events +++ b/hw/timer/trace-events @@ -116,7 +116,7 @@ hpet_ram_read(uint64_t addr) "enter hpet_ram_readl at 0x%" PRIx64 hpet_ram_read_reading_counter(uint8_t reg_off, uint64_t cur_tick) "reading counter + %" PRIu8 " = 0x%" PRIx64 hpet_ram_read_invalid(void) "invalid hpet_ram_readl" hpet_ram_write(uint64_t addr, uint64_t value) "enter hpet_ram_writel at 0x%" PRIx64 " = 0x%" PRIx64 -hpet_ram_write_timer_id(uint64_t timer_id) "hpet_ram_writel timer_id = 0x%" PRIx64 +hpet_ram_write_timer_id(uint8_t timer_id) "hpet_ram_writel timer_id = %" PRIu8 hpet_ram_write_tn_cfg(uint8_t reg_off) "hpet_ram_writel HPET_TN_CFG + %" PRIu8 hpet_ram_write_tn_cmp(uint8_t reg_off) "hpet_ram_writel HPET_TN_CMP + %" PRIu8 hpet_ram_write_invalid_tn_cmp(void) "invalid HPET_TN_CMP + 4 write" diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 0c1df625df..f520597f25 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -144,6 +144,7 @@ dependencies = [ "migration", "qom", "system", + "trace", "util", ] diff --git a/rust/hw/timer/hpet/Cargo.toml b/rust/hw/timer/hpet/Cargo.toml index f781b28d8b..5567eefda4 100644 --- a/rust/hw/timer/hpet/Cargo.toml +++ b/rust/hw/timer/hpet/Cargo.toml @@ -18,6 +18,7 @@ bql = { path = "../../../bql" } qom = { path = "../../../qom" } system = { path = "../../../system" } hwcore = { path = "../../../hw/core" } +trace = { path = "../../../trace" } [lints] workspace = true diff --git a/rust/hw/timer/hpet/meson.build b/rust/hw/timer/hpet/meson.build index bb64b96672..9a3dd62caa 100644 --- a/rust/hw/timer/hpet/meson.build +++ b/rust/hw/timer/hpet/meson.build @@ -11,6 +11,7 @@ _libhpet_rs = static_library( qom_rs, system_rs, hwcore_rs, + trace_rs, ], ) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index c82b27ddf1..a2c5b7d04c 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -17,13 +17,15 @@ use migration::{self, prelude::*}; use qom::prelude::*; use system::{ bindings::{address_space_memory, address_space_stl_le}, - MEMTXATTRS_UNSPECIFIED, prelude::*, + MEMTXATTRS_UNSPECIFIED, }; use util::prelude::*; use crate::fw_cfg::HPETFwConfig; +::trace::include_trace!("hw_timer"); + /// Register space for each timer block (`HPET_BASE` is defined in hpet.h). const HPET_REG_SPACE_LEN: u64 = 0x400; // 1024 bytes @@ -394,7 +396,8 @@ impl HPETTimer { /// Configuration and Capability Register fn set_tn_cfg_reg(&mut self, shift: u32, len: u32, val: u64) { - // TODO: Add trace point - trace_hpet_ram_write_tn_cfg(addr & 4) + trace::trace_hpet_ram_write_tn_cfg((shift / 8).try_into().unwrap()); + let old_val: u64 = self.config; let mut new_val: u64 = old_val.deposit(shift, len, val); new_val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK); @@ -427,17 +430,18 @@ impl HPETTimer { let mut length = len; let mut value = val; - // TODO: Add trace point - trace_hpet_ram_write_tn_cmp(addr & 4) if self.is_32bit_mod() { // High 32-bits are zero, leave them untouched. if shift != 0 { - // TODO: Add trace point - trace_hpet_ram_write_invalid_tn_cmp() + trace::trace_hpet_ram_write_invalid_tn_cmp(); return; } length = 64; value = u64::from(value as u32); // truncate! } + trace::trace_hpet_ram_write_tn_cmp((shift / 8).try_into().unwrap()); + if !self.is_periodic() || self.is_valset_enabled() { self.cmp = self.cmp.deposit(shift, length, value); } @@ -504,6 +508,9 @@ impl HPETTimer { fn write(&mut self, reg: TimerRegister, value: u64, shift: u32, len: u32) { use TimerRegister::*; + + trace::trace_hpet_ram_write_timer_id(self.index); + match reg { CFG => self.set_tn_cfg_reg(shift, len, value), CMP => self.set_tn_cmp_reg(shift, len, value), @@ -681,15 +688,13 @@ impl HPETState { /// Main Counter Value Register fn set_counter_reg(&self, shift: u32, len: u32, val: u64) { if self.is_hpet_enabled() { - // TODO: Add trace point - - // trace_hpet_ram_write_counter_write_while_enabled() - // // HPET spec says that writes to this register should only be // done while the counter is halted. So this is an undefined // behavior. There's no need to forbid it, but when HPET is // enabled, the changed counter value will not affect the // tick count (i.e., the previously calculated offset will // not be changed as well). + trace::trace_hpet_ram_write_counter_write_while_enabled(); } self.counter .set(self.counter.get().deposit(shift, len, val)); @@ -779,11 +784,10 @@ impl HPETState { } else { let timer_id: usize = ((addr - 0x100) / 0x20) as usize; if timer_id < self.num_timers { - // TODO: Add trace point - trace_hpet_ram_[read|write]_timer_id(timer_id) TimerRegister::try_from(addr & 0x18) .map(|reg| HPETRegister::Timer(&self.timers[timer_id], reg)) } else { - // TODO: Add trace point - trace_hpet_timer_id_out_of_range(timer_id) + trace::trace_hpet_timer_id_out_of_range(timer_id.try_into().unwrap()); Err(addr) } }; @@ -795,7 +799,8 @@ impl HPETState { } fn read(&self, addr: hwaddr, size: u32) -> u64 { - // TODO: Add trace point - trace_hpet_ram_read(addr) + trace::trace_hpet_ram_read(addr); + let HPETAddrDecode { shift, reg, .. } = self.decode(addr, size); use GlobalRegister::*; @@ -806,16 +811,18 @@ impl HPETState { Global(CFG) => self.config.get(), Global(INT_STATUS) => self.int_status.get(), Global(COUNTER) => { - // TODO: Add trace point - // trace_hpet_ram_read_reading_counter(addr & 4, cur_tick) - if self.is_hpet_enabled() { + let cur_tick = if self.is_hpet_enabled() { self.get_ticks() } else { self.counter.get() - } + }; + + trace::trace_hpet_ram_read_reading_counter((addr & 4) as u8, cur_tick); + + cur_tick } Unknown(_) => { - // TODO: Add trace point- trace_hpet_ram_read_invalid() + trace::trace_hpet_ram_read_invalid(); 0 } }) >> shift @@ -824,7 +831,8 @@ impl HPETState { fn write(&self, addr: hwaddr, value: u64, size: u32) { let HPETAddrDecode { shift, len, reg } = self.decode(addr, size); - // TODO: Add trace point - trace_hpet_ram_write(addr, value) + trace::trace_hpet_ram_write(addr, value); + use GlobalRegister::*; use HPETRegister::*; match reg { @@ -833,9 +841,7 @@ impl HPETState { Global(CFG) => self.set_cfg_reg(shift, len, value), Global(INT_STATUS) => self.set_int_status_reg(shift, len, value), Global(COUNTER) => self.set_counter_reg(shift, len, value), - Unknown(_) => { - // TODO: Add trace point - trace_hpet_ram_write_invalid() - } + Unknown(_) => trace::trace_hpet_ram_write_invalid(), } } From 4ace4aa13315591cadb0f0399ae7fccdaae71a6a Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:16 +0800 Subject: [PATCH 046/152] rust/migration: Add Sync implementation for Migratable<> It's common to define MemoryRegionOps and VMStateDescription as static variables, and this requires T to implement Sync. Migratable is usually embedded in device state, so it's necessary to implement Sync for Migratable. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-2-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/migration/src/migratable.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rust/migration/src/migratable.rs b/rust/migration/src/migratable.rs index ce60386750..5700554f7e 100644 --- a/rust/migration/src/migratable.rs +++ b/rust/migration/src/migratable.rs @@ -340,6 +340,9 @@ pub struct Migratable { runtime_state: T, } +// SAFETY: the migration_state asserts via `BqlCell` that the BQL is taken. +unsafe impl Sync for Migratable {} + impl std::ops::Deref for Migratable { type Target = T; From bb6e3e743a49642b9e06fdd5ca048ec6b449d9f7 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:17 +0800 Subject: [PATCH 047/152] rust/migration: Fix missing name in the VMSD of Migratable<> The VMStateDescription of Migratable missed the name field, and this casused segmentation fault in vmstate_save_state_v() when it tries to write name field by json_writer_str(). Due to the limitation of const, a custom name based on type would be more difficult. Instead, a straightforward and simple approach is to have all Migratable instances use the same VMSD name - "migratable-wrapper". This is availiable because Migratable is always a field within a VMSD, and its parent VMSD should have a distinct name. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-3-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/migration/src/migratable.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rust/migration/src/migratable.rs b/rust/migration/src/migratable.rs index 5700554f7e..02efe31d72 100644 --- a/rust/migration/src/migratable.rs +++ b/rust/migration/src/migratable.rs @@ -421,7 +421,11 @@ impl Migratable { Migratable::::FIELD }; + // All Migratable instances share the same name. This is fine because + // Migratable is always a field within a VMSD. The parent VMSD has the + // different name to distinguish child Migratable. const VMSD: &'static bindings::VMStateDescription = VMStateDescriptionBuilder::::new() + .name(c"migratable-wrapper") .version_id(1) .minimum_version_id(1) .pre_save(&Self::pre_save) From febdab3d5de155fb526d4237493ee4234f6005e1 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:18 +0800 Subject: [PATCH 048/152] rust/migration: Check name field in VMStateDescriptionBuilder The name field is necessary for VMStateDescription, so that it's necessary to check if it is set when build VMStateDescription. Since is_null()/as_ref() become rustc v1.84 and pointer cannot cast to integer in const, use Option<> to check name with a new field in VMStateDescriptionBuilder instead. This can be simplified in future when QEMU bumps up rustc version. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-4-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/migration/src/vmstate.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/rust/migration/src/vmstate.rs b/rust/migration/src/vmstate.rs index f9d9f335b9..595e7e9cd7 100644 --- a/rust/migration/src/vmstate.rs +++ b/rust/migration/src/vmstate.rs @@ -531,7 +531,11 @@ pub struct VMStateDescription(bindings::VMStateDescription, PhantomData Sync for VMStateDescription {} #[derive(Clone)] -pub struct VMStateDescriptionBuilder(bindings::VMStateDescription, PhantomData); +pub struct VMStateDescriptionBuilder( + bindings::VMStateDescription, + Option<*const std::os::raw::c_char>, // the name of VMStateDescription + PhantomData, +); #[derive(Debug)] pub struct InvalidError; @@ -592,7 +596,7 @@ unsafe extern "C" fn vmstate_dev_unplug_pending_cb FnCall<(&'a T,) impl VMStateDescriptionBuilder { #[must_use] pub const fn name(mut self, name_str: &CStr) -> Self { - self.0.name = ::std::ffi::CStr::as_ptr(name_str); + self.1 = Some(::std::ffi::CStr::as_ptr(name_str)); self } @@ -718,13 +722,16 @@ impl VMStateDescriptionBuilder { } #[must_use] - pub const fn build(self) -> VMStateDescription { + pub const fn build(mut self) -> VMStateDescription { + // FIXME: is_null()/as_ref() become const since v1.84. + assert!(self.1.is_some(), "VMStateDescription requires name field!"); + self.0.name = self.1.unwrap(); VMStateDescription::(self.0, PhantomData) } #[must_use] pub const fn new() -> Self { - Self(bindings::VMStateDescription::ZERO, PhantomData) + Self(bindings::VMStateDescription::ZERO, None, PhantomData) } } From 0118c2d7e85536c6878aeca12765bd03f09f21ef Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:20 +0800 Subject: [PATCH 049/152] rust/bql: Ensure BQL locked early at BqlRefCell borrowing At present, BqlRefCell checks whether BQL is locked when it blocks BQL unlock (in bql_block_unlock). But the such check should be done earlier - at the beginning of BqlRefCell borrowing. So convert BqlRefCell::borrow field from Cell<> to BqlCell<>, to guarantee BQL is locked from the beginning when someone is trying to borrow BqlRefCell. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-6-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/bql/src/cell.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/rust/bql/src/cell.rs b/rust/bql/src/cell.rs index f4bfa697d3..b25906a650 100644 --- a/rust/bql/src/cell.rs +++ b/rust/bql/src/cell.rs @@ -142,8 +142,10 @@ //! Multiple immutable borrows are allowed via [`borrow`](BqlRefCell::borrow), //! or a single mutable borrow via [`borrow_mut`](BqlRefCell::borrow_mut). The //! thread will panic if these rules are violated or if the BQL is not held. +#[cfg(feature = "debug_cell")] +use std::cell::Cell; use std::{ - cell::{Cell, UnsafeCell}, + cell::UnsafeCell, cmp::Ordering, fmt, marker::PhantomData, @@ -378,7 +380,7 @@ pub struct BqlRefCell { // for std::cell::BqlRefCell), so that we can use offset_of! on it. // UnsafeCell and repr(C) both prevent usage of niches. value: UnsafeCell, - borrow: Cell, + borrow: BqlCell, // Stores the location of the earliest currently active borrow. // This gets updated whenever we go from having zero borrows // to having a single borrow. When a borrow occurs, this gets included @@ -427,7 +429,7 @@ impl BqlRefCell { pub const fn new(value: T) -> BqlRefCell { BqlRefCell { value: UnsafeCell::new(value), - borrow: Cell::new(UNUSED), + borrow: BqlCell::new(UNUSED), #[cfg(feature = "debug_cell")] borrowed_at: Cell::new(None), } @@ -689,12 +691,12 @@ impl From for BqlRefCell { } struct BorrowRef<'b> { - borrow: &'b Cell, + borrow: &'b BqlCell, } impl<'b> BorrowRef<'b> { #[inline] - fn new(borrow: &'b Cell) -> Option> { + fn new(borrow: &'b BqlCell) -> Option> { let b = borrow.get().wrapping_add(1); if !is_reading(b) { // Incrementing borrow can result in a non-reading value (<= 0) in these cases: @@ -790,12 +792,12 @@ impl fmt::Display for BqlRef<'_, T> { } struct BorrowRefMut<'b> { - borrow: &'b Cell, + borrow: &'b BqlCell, } impl<'b> BorrowRefMut<'b> { #[inline] - fn new(borrow: &'b Cell) -> Option> { + fn new(borrow: &'b BqlCell) -> Option> { // There must currently be no existing references when borrow_mut() is // called, so we explicitly only allow going from UNUSED to UNUSED - 1. match borrow.get() { From f5839d27743b6826cbeb74de6b31401b9ee6917a Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:22 +0800 Subject: [PATCH 050/152] rust/hpet: Reduce unnecessary mutable self argument Methods of Timer and InterruptSource have been made as safe, so make the related methods of HPETTimer to accept immutable self reference. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-8-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index a2c5b7d04c..ddfdf5185a 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -318,7 +318,7 @@ impl HPETTimer { } } - fn set_irq(&mut self, set: bool) { + fn set_irq(&self, set: bool) { let route = self.get_int_route(); if set && self.is_int_enabled() && self.get_state().is_hpet_enabled() { @@ -344,7 +344,7 @@ impl HPETTimer { } } - fn update_irq(&mut self, set: bool) { + fn update_irq(&self, set: bool) { // If Timer N Interrupt Enable bit is 0, "the timer will // still operate and generate appropriate status bits, but // will not cause an interrupt" @@ -382,7 +382,7 @@ impl HPETTimer { self.arm_timer(self.cmp64); } - fn del_timer(&mut self) { + fn del_timer(&self) { // Just remove the timer from the timer_list without destroying // this timer instance. self.qemu_timer.delete(); @@ -656,7 +656,7 @@ impl HPETState { self.counter.set(self.get_ticks()); for timer in self.timers.iter().take(self.num_timers) { - timer.borrow_mut().del_timer(); + timer.borrow().del_timer(); } } @@ -680,7 +680,7 @@ impl HPETState { for (index, timer) in self.timers.iter().take(self.num_timers).enumerate() { if cleared & (1 << index) != 0 { - timer.borrow_mut().update_irq(false); + timer.borrow().update_irq(false); } } } From 4a104f9451df9d5c4be2031025ecfe45028487da Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:23 +0800 Subject: [PATCH 051/152] rust/hpet: Rename HPETRegister to DecodedRegister HPETRegister represents the layout of register spaces of HPET timer block and timer N, and is used to decode register address into register enumeration. To avoid confusion with the subsequently introduced HPETRegisters (that is used to maintain values of HPET registers), rename HPETRegister to DecodedRegister. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-9-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index ddfdf5185a..3e8f5397fb 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -96,7 +96,7 @@ const HPET_TN_CFG_INT_ROUTE_CAP_SHIFT: usize = 32; #[derive(common::TryInto)] #[repr(u64)] #[allow(non_camel_case_types)] -/// Timer registers, masked by 0x18 +/// Timer register enumerations, masked by 0x18 enum TimerRegister { /// Timer N Configuration and Capability Register CFG = 0, @@ -109,7 +109,7 @@ enum TimerRegister { #[derive(common::TryInto)] #[repr(u64)] #[allow(non_camel_case_types)] -/// Global registers +/// Global register enumerations enum GlobalRegister { /// General Capabilities and ID Register CAP = 0, @@ -121,7 +121,7 @@ enum GlobalRegister { COUNTER = 0xF0, } -enum HPETRegister<'a> { +enum DecodedRegister<'a> { /// Global register in the range from `0` to `0xff` Global(GlobalRegister), @@ -136,7 +136,7 @@ enum HPETRegister<'a> { struct HPETAddrDecode<'a> { shift: u32, len: u32, - reg: HPETRegister<'a>, + reg: DecodedRegister<'a>, } const fn hpet_next_wrap(cur_tick: u64) -> u64 { @@ -780,21 +780,21 @@ impl HPETState { addr &= !4; let reg = if (0..=0xff).contains(&addr) { - GlobalRegister::try_from(addr).map(HPETRegister::Global) + GlobalRegister::try_from(addr).map(DecodedRegister::Global) } else { let timer_id: usize = ((addr - 0x100) / 0x20) as usize; if timer_id < self.num_timers { TimerRegister::try_from(addr & 0x18) - .map(|reg| HPETRegister::Timer(&self.timers[timer_id], reg)) + .map(|reg| DecodedRegister::Timer(&self.timers[timer_id], reg)) } else { trace::trace_hpet_timer_id_out_of_range(timer_id.try_into().unwrap()); Err(addr) } }; - // reg is now a Result - // convert the Err case into HPETRegister as well - let reg = reg.unwrap_or_else(HPETRegister::Unknown); + // reg is now a Result + // convert the Err case into DecodedRegister as well + let reg = reg.unwrap_or_else(DecodedRegister::Unknown); HPETAddrDecode { shift, len, reg } } @@ -804,7 +804,7 @@ impl HPETState { let HPETAddrDecode { shift, reg, .. } = self.decode(addr, size); use GlobalRegister::*; - use HPETRegister::*; + use DecodedRegister::*; (match reg { Timer(timer, tn_reg) => timer.borrow_mut().read(tn_reg), Global(CAP) => self.capability.get(), /* including HPET_PERIOD 0x004 */ @@ -834,7 +834,7 @@ impl HPETState { trace::trace_hpet_ram_write(addr, value); use GlobalRegister::*; - use HPETRegister::*; + use DecodedRegister::*; match reg { Timer(timer, tn_reg) => timer.borrow_mut().write(tn_reg, value, shift, len), Global(CAP) => {} // General Capabilities and ID Register: Read Only From 335395270f25fc6e061e3f25d3c72222119c6bdd Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:24 +0800 Subject: [PATCH 052/152] rust/hpet: Rename decoded "reg" enumeration to "target" HPETAddrDecode has a `reg` field so that there're many variables named "reg" in MMIO read/write/decode functions. In the future, there'll be other HPETRegisters/HPETTimerRegisters structs containing values of HPET registers, and related variables or arguments will be named as "regs". To avoid potential confusion between many "reg" and "regs", rename HPETAddrDecode::reg to HPETAddrDecode::target, and rename decoding related variables from "reg" to "target". "target" is picked as the name since this clearly reflects the field or variable is the target decoded register. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-10-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 33 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 3e8f5397fb..c5b58f8dee 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -136,7 +136,7 @@ enum DecodedRegister<'a> { struct HPETAddrDecode<'a> { shift: u32, len: u32, - reg: DecodedRegister<'a>, + target: DecodedRegister<'a>, } const fn hpet_next_wrap(cur_tick: u64) -> u64 { @@ -497,21 +497,20 @@ impl HPETTimer { self.update_irq(true); } - const fn read(&self, reg: TimerRegister) -> u64 { + const fn read(&self, target: TimerRegister) -> u64 { use TimerRegister::*; - match reg { + match target { CFG => self.config, // including interrupt capabilities CMP => self.cmp, // comparator register ROUTE => self.fsb, } } - fn write(&mut self, reg: TimerRegister, value: u64, shift: u32, len: u32) { + fn write(&mut self, target: TimerRegister, value: u64, shift: u32, len: u32) { use TimerRegister::*; trace::trace_hpet_ram_write_timer_id(self.index); - - match reg { + match target { CFG => self.set_tn_cfg_reg(shift, len, value), CMP => self.set_tn_cmp_reg(shift, len, value), ROUTE => self.set_tn_fsb_route_reg(shift, len, value), @@ -779,34 +778,34 @@ impl HPETState { let len = std::cmp::min(size * 8, 64 - shift); addr &= !4; - let reg = if (0..=0xff).contains(&addr) { + let target = if (0..=0xff).contains(&addr) { GlobalRegister::try_from(addr).map(DecodedRegister::Global) } else { let timer_id: usize = ((addr - 0x100) / 0x20) as usize; if timer_id < self.num_timers { TimerRegister::try_from(addr & 0x18) - .map(|reg| DecodedRegister::Timer(&self.timers[timer_id], reg)) + .map(|target| DecodedRegister::Timer(&self.timers[timer_id], target)) } else { trace::trace_hpet_timer_id_out_of_range(timer_id.try_into().unwrap()); Err(addr) } }; - // reg is now a Result + // `target` is now a Result // convert the Err case into DecodedRegister as well - let reg = reg.unwrap_or_else(DecodedRegister::Unknown); - HPETAddrDecode { shift, len, reg } + let target = target.unwrap_or_else(DecodedRegister::Unknown); + HPETAddrDecode { shift, len, target } } fn read(&self, addr: hwaddr, size: u32) -> u64 { trace::trace_hpet_ram_read(addr); - let HPETAddrDecode { shift, reg, .. } = self.decode(addr, size); + let HPETAddrDecode { shift, target, .. } = self.decode(addr, size); use GlobalRegister::*; use DecodedRegister::*; - (match reg { - Timer(timer, tn_reg) => timer.borrow_mut().read(tn_reg), + (match target { + Timer(timer, tn_target) => timer.borrow_mut().read(tn_target), Global(CAP) => self.capability.get(), /* including HPET_PERIOD 0x004 */ Global(CFG) => self.config.get(), Global(INT_STATUS) => self.int_status.get(), @@ -829,14 +828,14 @@ impl HPETState { } fn write(&self, addr: hwaddr, value: u64, size: u32) { - let HPETAddrDecode { shift, len, reg } = self.decode(addr, size); + let HPETAddrDecode { shift, len, target } = self.decode(addr, size); trace::trace_hpet_ram_write(addr, value); use GlobalRegister::*; use DecodedRegister::*; - match reg { - Timer(timer, tn_reg) => timer.borrow_mut().write(tn_reg, value, shift, len), + match target { + Timer(timer, tn_target) => timer.borrow_mut().write(tn_target, value, shift, len), Global(CAP) => {} // General Capabilities and ID Register: Read Only Global(CFG) => self.set_cfg_reg(shift, len, value), Global(INT_STATUS) => self.set_int_status_reg(shift, len, value), From 349b931e61ed2468a58d8b00bc8ff36b4cf4a126 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:25 +0800 Subject: [PATCH 053/152] rust/hpet: Abstract HPETTimerRegisters struct Place all timer N's registers in a HPETTimerRegisters struct. This allows all Timer N registers to be grouped together with global registers and managed using a single lock (BqlRefCell or Mutex) in future. And this makes it easier to apply ToMigrationState macro. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-11-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 101 ++++++++++++++++++------------- 1 file changed, 60 insertions(+), 41 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index c5b58f8dee..1bdee064d4 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -174,6 +174,18 @@ fn timer_handler(timer_cell: &BqlRefCell) { timer_cell.borrow_mut().callback() } +#[repr(C)] +#[derive(Debug, Default)] +pub struct HPETTimerRegisters { + // Memory-mapped, software visible timer registers + /// Timer N Configuration and Capability Register + config: u64, + /// Timer N Comparator Value Register + cmp: u64, + /// Timer N FSB Interrupt Route Register + fsb: u64, +} + /// HPET Timer Abstraction #[repr(C)] #[derive(Debug)] @@ -185,14 +197,7 @@ pub struct HPETTimer { /// timer block abstraction containing this timer state: NonNull, - // Memory-mapped, software visible timer registers - /// Timer N Configuration and Capability Register - config: u64, - /// Timer N Comparator Value Register - cmp: u64, - /// Timer N FSB Interrupt Route Register - fsb: u64, - + regs: HPETTimerRegisters, // Hidden register state /// comparator (extended to counter width) cmp64: u64, @@ -217,9 +222,7 @@ impl HPETTimer { // is initialized below. qemu_timer: unsafe { Timer::new() }, state: NonNull::new(state.cast_mut()).unwrap(), - config: 0, - cmp: 0, - fsb: 0, + regs: Default::default(), cmp64: 0, period: 0, wrap_flag: 0, @@ -246,32 +249,32 @@ impl HPETTimer { } const fn is_fsb_route_enabled(&self) -> bool { - self.config & (1 << HPET_TN_CFG_FSB_ENABLE_SHIFT) != 0 + self.regs.config & (1 << HPET_TN_CFG_FSB_ENABLE_SHIFT) != 0 } const fn is_periodic(&self) -> bool { - self.config & (1 << HPET_TN_CFG_PERIODIC_SHIFT) != 0 + self.regs.config & (1 << HPET_TN_CFG_PERIODIC_SHIFT) != 0 } const fn is_int_enabled(&self) -> bool { - self.config & (1 << HPET_TN_CFG_INT_ENABLE_SHIFT) != 0 + self.regs.config & (1 << HPET_TN_CFG_INT_ENABLE_SHIFT) != 0 } const fn is_32bit_mod(&self) -> bool { - self.config & (1 << HPET_TN_CFG_32BIT_SHIFT) != 0 + self.regs.config & (1 << HPET_TN_CFG_32BIT_SHIFT) != 0 } const fn is_valset_enabled(&self) -> bool { - self.config & (1 << HPET_TN_CFG_SETVAL_SHIFT) != 0 + self.regs.config & (1 << HPET_TN_CFG_SETVAL_SHIFT) != 0 } fn clear_valset(&mut self) { - self.config &= !(1 << HPET_TN_CFG_SETVAL_SHIFT); + self.regs.config &= !(1 << HPET_TN_CFG_SETVAL_SHIFT); } /// True if timer interrupt is level triggered; otherwise, edge triggered. const fn is_int_level_triggered(&self) -> bool { - self.config & (1 << HPET_TN_CFG_INT_TYPE_SHIFT) != 0 + self.regs.config & (1 << HPET_TN_CFG_INT_TYPE_SHIFT) != 0 } /// calculate next value of the general counter that matches the @@ -290,7 +293,7 @@ impl HPETTimer { } const fn get_individual_route(&self) -> usize { - ((self.config & HPET_TN_CFG_INT_ROUTE_MASK) >> HPET_TN_CFG_INT_ROUTE_SHIFT) as usize + ((self.regs.config & HPET_TN_CFG_INT_ROUTE_MASK) >> HPET_TN_CFG_INT_ROUTE_SHIFT) as usize } fn get_int_route(&self) -> usize { @@ -328,8 +331,8 @@ impl HPETTimer { unsafe { address_space_stl_le( addr_of_mut!(address_space_memory), - self.fsb >> 32, // Timer N FSB int addr - self.fsb as u32, // Timer N FSB int value, truncate! + self.regs.fsb >> 32, // Timer N FSB int addr + self.regs.fsb as u32, // Timer N FSB int value, truncate! MEMTXATTRS_UNSPECIFIED, null_mut(), ); @@ -369,7 +372,7 @@ impl HPETTimer { let cur_tick: u64 = self.get_state().get_ticks(); self.wrap_flag = 0; - self.cmp64 = self.calculate_cmp64(cur_tick, self.cmp); + self.cmp64 = self.calculate_cmp64(cur_tick, self.regs.cmp); if self.is_32bit_mod() { // HPET spec says in one-shot 32-bit mode, generate an interrupt when // counter wraps in addition to an interrupt with comparator match. @@ -398,25 +401,25 @@ impl HPETTimer { fn set_tn_cfg_reg(&mut self, shift: u32, len: u32, val: u64) { trace::trace_hpet_ram_write_tn_cfg((shift / 8).try_into().unwrap()); - let old_val: u64 = self.config; + let old_val: u64 = self.regs.config; let mut new_val: u64 = old_val.deposit(shift, len, val); new_val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK); // Switch level-type interrupt to edge-type. if deactivating_bit(old_val, new_val, HPET_TN_CFG_INT_TYPE_SHIFT) { - // Do this before changing timer.config; otherwise, if + // Do this before changing timer.regs.config; otherwise, if // HPET_TN_FSB is set, update_irq will not lower the qemu_irq. self.update_irq(false); } - self.config = new_val; + self.regs.config = new_val; if activating_bit(old_val, new_val, HPET_TN_CFG_INT_ENABLE_SHIFT) && self.is_int_active() { self.update_irq(true); } if self.is_32bit_mod() { - self.cmp = u64::from(self.cmp as u32); // truncate! + self.regs.cmp = u64::from(self.regs.cmp as u32); // truncate! self.period = u64::from(self.period as u32); // truncate! } @@ -443,7 +446,7 @@ impl HPETTimer { trace::trace_hpet_ram_write_tn_cmp((shift / 8).try_into().unwrap()); if !self.is_periodic() || self.is_valset_enabled() { - self.cmp = self.cmp.deposit(shift, length, value); + self.regs.cmp = self.regs.cmp.deposit(shift, length, value); } if self.is_periodic() { @@ -458,18 +461,19 @@ impl HPETTimer { /// FSB Interrupt Route Register fn set_tn_fsb_route_reg(&mut self, shift: u32, len: u32, val: u64) { - self.fsb = self.fsb.deposit(shift, len, val); + self.regs.fsb = self.regs.fsb.deposit(shift, len, val); } fn reset(&mut self) { self.del_timer(); - self.cmp = u64::MAX; // Comparator Match Registers reset to all 1's. - self.config = (1 << HPET_TN_CFG_PERIODIC_CAP_SHIFT) | (1 << HPET_TN_CFG_SIZE_CAP_SHIFT); + self.regs.cmp = u64::MAX; // Comparator Match Registers reset to all 1's. + self.regs.config = + (1 << HPET_TN_CFG_PERIODIC_CAP_SHIFT) | (1 << HPET_TN_CFG_SIZE_CAP_SHIFT); if self.get_state().has_msi_flag() { - self.config |= 1 << HPET_TN_CFG_FSB_CAP_SHIFT; + self.regs.config |= 1 << HPET_TN_CFG_FSB_CAP_SHIFT; } // advertise availability of ioapic int - self.config |= + self.regs.config |= (u64::from(self.get_state().int_route_cap)) << HPET_TN_CFG_INT_ROUTE_CAP_SHIFT; self.period = 0; self.wrap_flag = 0; @@ -485,9 +489,9 @@ impl HPETTimer { self.cmp64 += period; } if self.is_32bit_mod() { - self.cmp = u64::from(self.cmp64 as u32); // truncate! + self.regs.cmp = u64::from(self.cmp64 as u32); // truncate! } else { - self.cmp = self.cmp64; + self.regs.cmp = self.cmp64; } self.arm_timer(self.cmp64); } else if self.wrap_flag != 0 { @@ -500,9 +504,9 @@ impl HPETTimer { const fn read(&self, target: TimerRegister) -> u64 { use TimerRegister::*; match target { - CFG => self.config, // including interrupt capabilities - CMP => self.cmp, // comparator register - ROUTE => self.fsb, + CFG => self.regs.config, // including interrupt capabilities + CMP => self.regs.cmp, // comparator register + ROUTE => self.regs.fsb, } } @@ -862,7 +866,7 @@ impl HPETState { for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); - t.cmp64 = t.calculate_cmp64(t.get_state().counter.get(), t.cmp); + t.cmp64 = t.calculate_cmp64(t.get_state().counter.get(), t.regs.cmp); t.last = CLOCK_VIRTUAL.get_ns() - NANOSECONDS_PER_SECOND; } @@ -926,6 +930,22 @@ static VMSTATE_HPET_OFFSET: VMStateDescription = }) .build(); +// In fact, version_id and minimum_version_id for HPETTimerRegisters are +// unrelated to HPETTimer's version IDs. Does not affect compatibility. +impl_vmstate_struct!( + HPETTimerRegisters, + VMStateDescriptionBuilder::::new() + .name(c"hpet_timer/regs") + .version_id(1) + .minimum_version_id(1) + .fields(vmstate_fields! { + vmstate_of!(HPETTimerRegisters, config), + vmstate_of!(HPETTimerRegisters, cmp), + vmstate_of!(HPETTimerRegisters, fsb), + }) + .build() +); + const VMSTATE_HPET_TIMER: VMStateDescription = VMStateDescriptionBuilder::::new() .name(c"hpet_timer") @@ -933,14 +953,13 @@ const VMSTATE_HPET_TIMER: VMStateDescription = .minimum_version_id(1) .fields(vmstate_fields! { vmstate_of!(HPETTimer, index), - vmstate_of!(HPETTimer, config), - vmstate_of!(HPETTimer, cmp), - vmstate_of!(HPETTimer, fsb), + vmstate_of!(HPETTimer, regs), vmstate_of!(HPETTimer, period), vmstate_of!(HPETTimer, wrap_flag), vmstate_of!(HPETTimer, qemu_timer), }) .build(); + impl_vmstate_struct!(HPETTimer, VMSTATE_HPET_TIMER); const VALIDATE_TIMERS_NAME: &CStr = c"num_timers must match"; From 9259f47dc9a2ea5866181fb03f86657ebb58210a Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:26 +0800 Subject: [PATCH 054/152] rust/hpet: Make timer register accessors as methods of HPETTimerRegisters Implement helper accessors as methods of HPETTimerRegisters. Then HPETTimerRegisters can be accessed without going through HPETTimer or HPETState. In subsequent refactoring, HPETTimerRegisters will be maintained at the HPETState level. However, accessing it through HPETState requires the lock (lock BQL or mutex), which would cause troublesome nested locks or reentrancy issues. Therefore, refactor the accessors of HPETTimerRegisters to bypass HPETTimer or HPETState. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-12-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 108 ++++++++++++++++--------------- 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 1bdee064d4..8dc3cc59c9 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -186,6 +186,41 @@ pub struct HPETTimerRegisters { fsb: u64, } +impl HPETTimerRegisters { + const fn is_fsb_route_enabled(&self) -> bool { + self.config & (1 << HPET_TN_CFG_FSB_ENABLE_SHIFT) != 0 + } + + const fn is_periodic(&self) -> bool { + self.config & (1 << HPET_TN_CFG_PERIODIC_SHIFT) != 0 + } + + const fn is_int_enabled(&self) -> bool { + self.config & (1 << HPET_TN_CFG_INT_ENABLE_SHIFT) != 0 + } + + const fn is_32bit_mod(&self) -> bool { + self.config & (1 << HPET_TN_CFG_32BIT_SHIFT) != 0 + } + + const fn is_valset_enabled(&self) -> bool { + self.config & (1 << HPET_TN_CFG_SETVAL_SHIFT) != 0 + } + + /// True if timer interrupt is level triggered; otherwise, edge triggered. + const fn is_int_level_triggered(&self) -> bool { + self.config & (1 << HPET_TN_CFG_INT_TYPE_SHIFT) != 0 + } + + const fn clear_valset(&mut self) { + self.config &= !(1 << HPET_TN_CFG_SETVAL_SHIFT); + } + + const fn get_individual_route(&self) -> usize { + ((self.config & HPET_TN_CFG_INT_ROUTE_MASK) >> HPET_TN_CFG_INT_ROUTE_SHIFT) as usize + } +} + /// HPET Timer Abstraction #[repr(C)] #[derive(Debug)] @@ -248,40 +283,11 @@ impl HPETTimer { self.get_state().is_timer_int_active(self.index.into()) } - const fn is_fsb_route_enabled(&self) -> bool { - self.regs.config & (1 << HPET_TN_CFG_FSB_ENABLE_SHIFT) != 0 - } - - const fn is_periodic(&self) -> bool { - self.regs.config & (1 << HPET_TN_CFG_PERIODIC_SHIFT) != 0 - } - - const fn is_int_enabled(&self) -> bool { - self.regs.config & (1 << HPET_TN_CFG_INT_ENABLE_SHIFT) != 0 - } - - const fn is_32bit_mod(&self) -> bool { - self.regs.config & (1 << HPET_TN_CFG_32BIT_SHIFT) != 0 - } - - const fn is_valset_enabled(&self) -> bool { - self.regs.config & (1 << HPET_TN_CFG_SETVAL_SHIFT) != 0 - } - - fn clear_valset(&mut self) { - self.regs.config &= !(1 << HPET_TN_CFG_SETVAL_SHIFT); - } - - /// True if timer interrupt is level triggered; otherwise, edge triggered. - const fn is_int_level_triggered(&self) -> bool { - self.regs.config & (1 << HPET_TN_CFG_INT_TYPE_SHIFT) != 0 - } - /// calculate next value of the general counter that matches the /// target (either entirely, or the low 32-bit only depending on /// the timer mode). fn calculate_cmp64(&self, cur_tick: u64, target: u64) -> u64 { - if self.is_32bit_mod() { + if self.regs.is_32bit_mod() { let mut result: u64 = cur_tick.deposit(0, 32, target); if result < cur_tick { result += 0x100000000; @@ -292,10 +298,6 @@ impl HPETTimer { } } - const fn get_individual_route(&self) -> usize { - ((self.regs.config & HPET_TN_CFG_INT_ROUTE_MASK) >> HPET_TN_CFG_INT_ROUTE_SHIFT) as usize - } - fn get_int_route(&self) -> usize { if self.index <= 1 && self.get_state().is_legacy_mode() { // If LegacyReplacement Route bit is set, HPET specification requires @@ -317,15 +319,15 @@ impl HPETTimer { // ... // If the LegacyReplacement Route bit is not set, the individual // routing bits for each of the timers are used. - self.get_individual_route() + self.regs.get_individual_route() } } fn set_irq(&self, set: bool) { let route = self.get_int_route(); - if set && self.is_int_enabled() && self.get_state().is_hpet_enabled() { - if self.is_fsb_route_enabled() { + if set && self.regs.is_int_enabled() && self.get_state().is_hpet_enabled() { + if self.regs.is_fsb_route_enabled() { // SAFETY: // the parameters are valid. unsafe { @@ -337,12 +339,12 @@ impl HPETTimer { null_mut(), ); } - } else if self.is_int_level_triggered() { + } else if self.regs.is_int_level_triggered() { self.get_state().irqs[route].raise(); } else { self.get_state().irqs[route].pulse(); } - } else if !self.is_fsb_route_enabled() { + } else if !self.regs.is_fsb_route_enabled() { self.get_state().irqs[route].lower(); } } @@ -352,7 +354,7 @@ impl HPETTimer { // still operate and generate appropriate status bits, but // will not cause an interrupt" self.get_state() - .update_int_status(self.index.into(), set && self.is_int_level_triggered()); + .update_int_status(self.index.into(), set && self.regs.is_int_level_triggered()); self.set_irq(set); } @@ -360,7 +362,7 @@ impl HPETTimer { let mut ns = self.get_state().get_ns(tick); // Clamp period to reasonable min value (1 us) - if self.is_periodic() && ns - self.last < 1000 { + if self.regs.is_periodic() && ns - self.last < 1000 { ns = self.last + 1000; } @@ -373,10 +375,10 @@ impl HPETTimer { self.wrap_flag = 0; self.cmp64 = self.calculate_cmp64(cur_tick, self.regs.cmp); - if self.is_32bit_mod() { + if self.regs.is_32bit_mod() { // HPET spec says in one-shot 32-bit mode, generate an interrupt when // counter wraps in addition to an interrupt with comparator match. - if !self.is_periodic() && self.cmp64 > hpet_next_wrap(cur_tick) { + if !self.regs.is_periodic() && self.cmp64 > hpet_next_wrap(cur_tick) { self.wrap_flag = 1; self.arm_timer(hpet_next_wrap(cur_tick)); return; @@ -418,7 +420,7 @@ impl HPETTimer { self.update_irq(true); } - if self.is_32bit_mod() { + if self.regs.is_32bit_mod() { self.regs.cmp = u64::from(self.regs.cmp as u32); // truncate! self.period = u64::from(self.period as u32); // truncate! } @@ -433,7 +435,7 @@ impl HPETTimer { let mut length = len; let mut value = val; - if self.is_32bit_mod() { + if self.regs.is_32bit_mod() { // High 32-bits are zero, leave them untouched. if shift != 0 { trace::trace_hpet_ram_write_invalid_tn_cmp(); @@ -445,15 +447,15 @@ impl HPETTimer { trace::trace_hpet_ram_write_tn_cmp((shift / 8).try_into().unwrap()); - if !self.is_periodic() || self.is_valset_enabled() { + if !self.regs.is_periodic() || self.regs.is_valset_enabled() { self.regs.cmp = self.regs.cmp.deposit(shift, length, value); } - if self.is_periodic() { + if self.regs.is_periodic() { self.period = self.period.deposit(shift, length, value); } - self.clear_valset(); + self.regs.clear_valset(); if self.get_state().is_hpet_enabled() { self.set_timer(); } @@ -484,11 +486,11 @@ impl HPETTimer { let period: u64 = self.period; let cur_tick: u64 = self.get_state().get_ticks(); - if self.is_periodic() && period != 0 { + if self.regs.is_periodic() && period != 0 { while hpet_time_after(cur_tick, self.cmp64) { self.cmp64 += period; } - if self.is_32bit_mod() { + if self.regs.is_32bit_mod() { self.regs.cmp = u64::from(self.cmp64 as u32); // truncate! } else { self.regs.cmp = self.cmp64; @@ -649,7 +651,7 @@ impl HPETState { for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); - if t.is_int_enabled() && t.is_int_active() { + if t.regs.is_int_enabled() && t.is_int_active() { t.update_irq(true); } t.set_timer(); @@ -806,8 +808,8 @@ impl HPETState { let HPETAddrDecode { shift, target, .. } = self.decode(addr, size); - use GlobalRegister::*; use DecodedRegister::*; + use GlobalRegister::*; (match target { Timer(timer, tn_target) => timer.borrow_mut().read(tn_target), Global(CAP) => self.capability.get(), /* including HPET_PERIOD 0x004 */ @@ -836,8 +838,8 @@ impl HPETState { trace::trace_hpet_ram_write(addr, value); - use GlobalRegister::*; use DecodedRegister::*; + use GlobalRegister::*; match target { Timer(timer, tn_target) => timer.borrow_mut().write(tn_target, value, shift, len), Global(CAP) => {} // General Capabilities and ID Register: Read Only From 8375fbaf48c191a84f95742e4ebf20d30982413b Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:27 +0800 Subject: [PATCH 055/152] rust/hpet: Abstract HPETRegisters struct Place all HPET (global) timer block registers in a HPETRegisters struct, and wrap the whole register struct with a BqlRefCell<>. This allows to elevate the Bql check from individual register access to register structure access, making the Bql check more coarse-grained. But in current step, just treat BqlRefCell as BqlCell while maintaining fine-grained BQL protection. This approach helps to use HPETRegisters struct clearly without introducing the "already borrowed" around BqlRefCell. HPETRegisters struct makes it possible to take a Mutex<> to replace BqlRefCell<>, like C side did. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-13-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 116 +++++++++++++++++++------------ 1 file changed, 70 insertions(+), 46 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 8dc3cc59c9..bf9f493671 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -524,24 +524,29 @@ impl HPETTimer { } } +#[repr(C)] +#[derive(Default)] +pub struct HPETRegisters { + // HPET block Registers: Memory-mapped, software visible registers + /// General Capabilities and ID Register + capability: u64, + /// General Configuration Register + config: u64, + /// General Interrupt Status Register + #[doc(alias = "isr")] + int_status: u64, + /// Main Counter Value Register + #[doc(alias = "hpet_counter")] + counter: u64, +} + /// HPET Event Timer Block Abstraction #[repr(C)] #[derive(qom::Object, hwcore::Device)] pub struct HPETState { parent_obj: ParentField, iomem: MemoryRegion, - - // HPET block Registers: Memory-mapped, software visible registers - /// General Capabilities and ID Register - capability: BqlCell, - /// General Configuration Register - config: BqlCell, - /// General Interrupt Status Register - #[doc(alias = "isr")] - int_status: BqlCell, - /// Main Counter Value Register - #[doc(alias = "hpet_counter")] - counter: BqlCell, + regs: BqlRefCell, // Internal state /// Capabilities that QEMU HPET supports. @@ -583,15 +588,15 @@ impl HPETState { } fn is_legacy_mode(&self) -> bool { - self.config.get() & (1 << HPET_CFG_LEG_RT_SHIFT) != 0 + self.regs.borrow().config & (1 << HPET_CFG_LEG_RT_SHIFT) != 0 } fn is_hpet_enabled(&self) -> bool { - self.config.get() & (1 << HPET_CFG_ENABLE_SHIFT) != 0 + self.regs.borrow().config & (1 << HPET_CFG_ENABLE_SHIFT) != 0 } fn is_timer_int_active(&self, index: usize) -> bool { - self.int_status.get() & (1 << index) != 0 + self.regs.borrow().int_status & (1 << index) != 0 } fn get_ticks(&self) -> u64 { @@ -631,22 +636,22 @@ impl HPETState { } fn update_int_status(&self, index: u32, level: bool) { - self.int_status - .set(self.int_status.get().deposit(index, 1, u64::from(level))); + let mut regs = self.regs.borrow_mut(); + regs.int_status = regs.int_status.deposit(index, 1, u64::from(level)); } /// General Configuration Register fn set_cfg_reg(&self, shift: u32, len: u32, val: u64) { - let old_val = self.config.get(); + let old_val = self.regs.borrow().config; let mut new_val = old_val.deposit(shift, len, val); new_val = hpet_fixup_reg(new_val, old_val, HPET_CFG_WRITE_MASK); - self.config.set(new_val); + self.regs.borrow_mut().config = new_val; if activating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Enable main counter and interrupt generation. self.hpet_offset - .set(ticks_to_ns(self.counter.get()) - CLOCK_VIRTUAL.get_ns()); + .set(ticks_to_ns(self.regs.borrow().counter) - CLOCK_VIRTUAL.get_ns()); for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); @@ -658,7 +663,7 @@ impl HPETState { } } else if deactivating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Halt main counter and disable interrupt generation. - self.counter.set(self.get_ticks()); + self.regs.borrow_mut().counter = self.get_ticks(); for timer in self.timers.iter().take(self.num_timers) { timer.borrow().del_timer(); @@ -681,7 +686,7 @@ impl HPETState { /// General Interrupt Status Register: Read/Write Clear fn set_int_status_reg(&self, shift: u32, _len: u32, val: u64) { let new_val = val << shift; - let cleared = new_val & self.int_status.get(); + let cleared = new_val & self.regs.borrow().int_status; for (index, timer) in self.timers.iter().take(self.num_timers).enumerate() { if cleared & (1 << index) != 0 { @@ -701,8 +706,8 @@ impl HPETState { // not be changed as well). trace::trace_hpet_ram_write_counter_write_while_enabled(); } - self.counter - .set(self.counter.get().deposit(shift, len, val)); + let mut regs = self.regs.borrow_mut(); + regs.counter = regs.counter.deposit(shift, len, val); } unsafe fn init(mut this: ParentInit) { @@ -745,14 +750,12 @@ impl HPETState { self.hpet_id.set(HPETFwConfig::assign_hpet_id()?); // 64-bit General Capabilities and ID Register; LegacyReplacementRoute. - self.capability.set( - HPET_CAP_REV_ID_VALUE << HPET_CAP_REV_ID_SHIFT | + self.regs.borrow_mut().capability = HPET_CAP_REV_ID_VALUE << HPET_CAP_REV_ID_SHIFT | 1 << HPET_CAP_COUNT_SIZE_CAP_SHIFT | 1 << HPET_CAP_LEG_RT_CAP_SHIFT | HPET_CAP_VENDER_ID_VALUE << HPET_CAP_VENDER_ID_SHIFT | ((self.num_timers - 1) as u64) << HPET_CAP_NUM_TIM_SHIFT | // indicate the last timer - (HPET_CLK_PERIOD * FS_PER_NS) << HPET_CAP_CNT_CLK_PERIOD_SHIFT, // 10 ns - ); + (HPET_CLK_PERIOD * FS_PER_NS) << HPET_CAP_CNT_CLK_PERIOD_SHIFT; // 10 ns self.init_gpio_in(2, HPETState::handle_legacy_irq); self.init_gpio_out(from_ref(&self.pit_enabled)); @@ -764,17 +767,23 @@ impl HPETState { timer.borrow_mut().reset(); } - self.counter.set(0); - self.config.set(0); + // pit_enabled.set(true) will call irq handler and access regs + // again. We cannot borrow BqlRefCell twice at once. Minimize the + // scope of regs to ensure it will be dropped before irq callback. + { + let mut regs = self.regs.borrow_mut(); + regs.counter = 0; + regs.config = 0; + HPETFwConfig::update_hpet_cfg( + self.hpet_id.get(), + regs.capability as u32, + self.mmio_addr(0).unwrap(), + ); + } + self.pit_enabled.set(true); self.hpet_offset.set(0); - HPETFwConfig::update_hpet_cfg( - self.hpet_id.get(), - self.capability.get() as u32, - self.mmio_addr(0).unwrap(), - ); - // to document that the RTC lowers its output on reset as well self.rtc_irq_level.set(0); } @@ -812,14 +821,14 @@ impl HPETState { use GlobalRegister::*; (match target { Timer(timer, tn_target) => timer.borrow_mut().read(tn_target), - Global(CAP) => self.capability.get(), /* including HPET_PERIOD 0x004 */ - Global(CFG) => self.config.get(), - Global(INT_STATUS) => self.int_status.get(), + Global(CAP) => self.regs.borrow().capability, /* including HPET_PERIOD 0x004 */ + Global(CFG) => self.regs.borrow().config, + Global(INT_STATUS) => self.regs.borrow().int_status, Global(COUNTER) => { let cur_tick = if self.is_hpet_enabled() { self.get_ticks() } else { - self.counter.get() + self.regs.borrow().counter }; trace::trace_hpet_ram_read_reading_counter((addr & 4) as u8, cur_tick); @@ -852,7 +861,7 @@ impl HPETState { fn pre_save(&self) -> Result<(), migration::Infallible> { if self.is_hpet_enabled() { - self.counter.set(self.get_ticks()); + self.regs.borrow_mut().counter = self.get_ticks(); } /* @@ -867,15 +876,16 @@ impl HPETState { fn post_load(&self, _version_id: u8) -> Result<(), migration::Infallible> { for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); + let cnt = t.get_state().regs.borrow().counter; - t.cmp64 = t.calculate_cmp64(t.get_state().counter.get(), t.regs.cmp); + t.cmp64 = t.calculate_cmp64(cnt, t.regs.cmp); t.last = CLOCK_VIRTUAL.get_ns() - NANOSECONDS_PER_SECOND; } // Recalculate the offset between the main counter and guest time if !self.hpet_offset_saved { self.hpet_offset - .set(ticks_to_ns(self.counter.get()) - CLOCK_VIRTUAL.get_ns()); + .set(ticks_to_ns(self.regs.borrow().counter) - CLOCK_VIRTUAL.get_ns()); } Ok(()) @@ -966,6 +976,22 @@ impl_vmstate_struct!(HPETTimer, VMSTATE_HPET_TIMER); const VALIDATE_TIMERS_NAME: &CStr = c"num_timers must match"; +// In fact, version_id and minimum_version_id for HPETRegisters are +// unrelated to HPETState's version IDs. Does not affect compatibility. +impl_vmstate_struct!( + HPETRegisters, + VMStateDescriptionBuilder::::new() + .name(c"hpet/regs") + .version_id(1) + .minimum_version_id(1) + .fields(vmstate_fields! { + vmstate_of!(HPETRegisters, config), + vmstate_of!(HPETRegisters, int_status), + vmstate_of!(HPETRegisters, counter), + }) + .build() +); + const VMSTATE_HPET: VMStateDescription = VMStateDescriptionBuilder::::new() .name(c"hpet") @@ -974,9 +1000,7 @@ const VMSTATE_HPET: VMStateDescription = .pre_save(&HPETState::pre_save) .post_load(&HPETState::post_load) .fields(vmstate_fields! { - vmstate_of!(HPETState, config), - vmstate_of!(HPETState, int_status), - vmstate_of!(HPETState, counter), + vmstate_of!(HPETState, regs), vmstate_of!(HPETState, num_timers_save), vmstate_validate!(HPETState, VALIDATE_TIMERS_NAME, HPETState::validate_num_timers), vmstate_of!(HPETState, timers[0 .. num_timers_save], HPETState::validate_num_timers).with_version_id(0), From 2abee243d6abc114aadfbdf97f18f653d3de2464 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:28 +0800 Subject: [PATCH 056/152] rust/hpet: Make global register accessors as methods of HPETRegisters Implement helper accessors as methods of HPETRegisters. Then HPETRegisters can be accessed without going through HPETState. In subsequent refactoring, coarser-grained BQL lock protection will be implemented. Specifically, BqlRefCell will be borrowed only once during MMIO accesses, and the scope of borrowed `regs` will be extended to cover the entire MMIO access. Consequently, repeated borrow() attempts within function calls will no longer be allowed. Therefore, refactor the accessors of HPETRegisters to bypass HPETState, which help to reduce borrow() in deep function calls. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-14-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 60 ++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index bf9f493671..da938f356e 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -280,7 +280,10 @@ impl HPETTimer { } fn is_int_active(&self) -> bool { - self.get_state().is_timer_int_active(self.index.into()) + self.get_state() + .regs + .borrow() + .is_timer_int_active(self.index.into()) } /// calculate next value of the general counter that matches the @@ -299,7 +302,7 @@ impl HPETTimer { } fn get_int_route(&self) -> usize { - if self.index <= 1 && self.get_state().is_legacy_mode() { + if self.index <= 1 && self.get_state().regs.borrow().is_legacy_mode() { // If LegacyReplacement Route bit is set, HPET specification requires // timer0 be routed to IRQ0 in NON-APIC or IRQ2 in the I/O APIC, // timer1 be routed to IRQ8 in NON-APIC or IRQ8 in the I/O APIC. @@ -326,7 +329,7 @@ impl HPETTimer { fn set_irq(&self, set: bool) { let route = self.get_int_route(); - if set && self.regs.is_int_enabled() && self.get_state().is_hpet_enabled() { + if set && self.regs.is_int_enabled() && self.get_state().regs.borrow().is_hpet_enabled() { if self.regs.is_fsb_route_enabled() { // SAFETY: // the parameters are valid. @@ -425,7 +428,7 @@ impl HPETTimer { self.period = u64::from(self.period as u32); // truncate! } - if self.get_state().is_hpet_enabled() { + if self.get_state().regs.borrow().is_hpet_enabled() { self.set_timer(); } } @@ -456,7 +459,7 @@ impl HPETTimer { } self.regs.clear_valset(); - if self.get_state().is_hpet_enabled() { + if self.get_state().regs.borrow().is_hpet_enabled() { self.set_timer(); } } @@ -540,6 +543,20 @@ pub struct HPETRegisters { counter: u64, } +impl HPETRegisters { + fn is_legacy_mode(&self) -> bool { + self.config & (1 << HPET_CFG_LEG_RT_SHIFT) != 0 + } + + fn is_hpet_enabled(&self) -> bool { + self.config & (1 << HPET_CFG_ENABLE_SHIFT) != 0 + } + + fn is_timer_int_active(&self, index: usize) -> bool { + self.int_status & (1 << index) != 0 + } +} + /// HPET Event Timer Block Abstraction #[repr(C)] #[derive(qom::Object, hwcore::Device)] @@ -587,18 +604,6 @@ impl HPETState { self.flags & (1 << HPET_FLAG_MSI_SUPPORT_SHIFT) != 0 } - fn is_legacy_mode(&self) -> bool { - self.regs.borrow().config & (1 << HPET_CFG_LEG_RT_SHIFT) != 0 - } - - fn is_hpet_enabled(&self) -> bool { - self.regs.borrow().config & (1 << HPET_CFG_ENABLE_SHIFT) != 0 - } - - fn is_timer_int_active(&self, index: usize) -> bool { - self.regs.borrow().int_status & (1 << index) != 0 - } - fn get_ticks(&self) -> u64 { ns_to_ticks(CLOCK_VIRTUAL.get_ns() + self.hpet_offset.get()) } @@ -608,13 +613,14 @@ impl HPETState { } fn handle_legacy_irq(&self, irq: u32, level: u32) { + let regs = self.regs.borrow(); if irq == HPET_LEGACY_PIT_INT { - if !self.is_legacy_mode() { + if !regs.is_legacy_mode() { self.irqs[0].set(level != 0); } } else { self.rtc_irq_level.set(level); - if !self.is_legacy_mode() { + if !regs.is_legacy_mode() { self.irqs[RTC_ISA_IRQ].set(level != 0); } } @@ -697,7 +703,8 @@ impl HPETState { /// Main Counter Value Register fn set_counter_reg(&self, shift: u32, len: u32, val: u64) { - if self.is_hpet_enabled() { + let mut regs = self.regs.borrow_mut(); + if regs.is_hpet_enabled() { // HPET spec says that writes to this register should only be // done while the counter is halted. So this is an undefined // behavior. There's no need to forbid it, but when HPET is @@ -706,7 +713,6 @@ impl HPETState { // not be changed as well). trace::trace_hpet_ram_write_counter_write_while_enabled(); } - let mut regs = self.regs.borrow_mut(); regs.counter = regs.counter.deposit(shift, len, val); } @@ -825,10 +831,11 @@ impl HPETState { Global(CFG) => self.regs.borrow().config, Global(INT_STATUS) => self.regs.borrow().int_status, Global(COUNTER) => { - let cur_tick = if self.is_hpet_enabled() { + let regs = self.regs.borrow(); + let cur_tick = if regs.is_hpet_enabled() { self.get_ticks() } else { - self.regs.borrow().counter + regs.counter }; trace::trace_hpet_ram_read_reading_counter((addr & 4) as u8, cur_tick); @@ -860,8 +867,9 @@ impl HPETState { } fn pre_save(&self) -> Result<(), migration::Infallible> { - if self.is_hpet_enabled() { - self.regs.borrow_mut().counter = self.get_ticks(); + let mut regs = self.regs.borrow_mut(); + if regs.is_hpet_enabled() { + regs.counter = self.get_ticks(); } /* @@ -896,7 +904,7 @@ impl HPETState { } fn is_offset_needed(&self) -> bool { - self.is_hpet_enabled() && self.hpet_offset_saved + self.regs.borrow().is_hpet_enabled() && self.hpet_offset_saved } fn validate_num_timers(&self, _version_id: u8) -> bool { From e3b5a1190a184586f66d8dc27949b212f3abbab1 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:29 +0800 Subject: [PATCH 057/152] rust/hpet: Borrow HPETState.regs once in HPETState::post_load() Timers in post_load() access the same HPETState, which is the "self" HPETState. So there's no need to access HPETState from child HPETTimer again and again. Instead, just cache and borrow HPETState.regs at the beginning, and this could save some CPU cycles and reduce borrow() calls. It's safe, because post_load() is called with BQL protection, so that there's no other chance to modify the regs. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-15-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index da938f356e..abbaebc405 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -882,9 +882,11 @@ impl HPETState { } fn post_load(&self, _version_id: u8) -> Result<(), migration::Infallible> { + let regs = self.regs.borrow(); + for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); - let cnt = t.get_state().regs.borrow().counter; + let cnt = regs.counter; t.cmp64 = t.calculate_cmp64(cnt, t.regs.cmp); t.last = CLOCK_VIRTUAL.get_ns() - NANOSECONDS_PER_SECOND; @@ -893,7 +895,7 @@ impl HPETState { // Recalculate the offset between the main counter and guest time if !self.hpet_offset_saved { self.hpet_offset - .set(ticks_to_ns(self.regs.borrow().counter) - CLOCK_VIRTUAL.get_ns()); + .set(ticks_to_ns(regs.counter) - CLOCK_VIRTUAL.get_ns()); } Ok(()) From b7d1deefc33066f8be8c436c0005b15a4c8cb954 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:30 +0800 Subject: [PATCH 058/152] rust/hpet: Explicitly initialize complex fields in init() Explicitly initialize more fields which are complex structures. For simple types (bool/u32/usize), they can be omitted since C has already initialized memory to all zeros and this is the valid initialization for those simple types. Previously such complex fields (InterruptSource/BqlCell/BqlRefCell) were not explicitly initialized in init() and it's fine, because simply setting all memory to zero aligns with their default initialization behavior. However, this behavior is not robust. When adding new complex struct or modifying the initial values of existing structs, this default behavior can easily be broken. Thus, do explicit initialization for HPET to become a good example. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-16-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index abbaebc405..d622a6920a 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -733,6 +733,18 @@ impl HPETState { HPET_REG_SPACE_LEN, ); + // Only consider members with more complex structures. C has already + // initialized memory to all zeros - simple types (bool/u32/usize) can + // rely on this without explicit initialization. + uninit_field_mut!(*this, regs).write(Default::default()); + uninit_field_mut!(*this, hpet_offset).write(Default::default()); + // Set null_mut for now and post_init() will fill it. + uninit_field_mut!(*this, irqs).write(Default::default()); + uninit_field_mut!(*this, rtc_irq_level).write(Default::default()); + uninit_field_mut!(*this, pit_enabled).write(Default::default()); + uninit_field_mut!(*this, num_timers_save).write(Default::default()); + uninit_field_mut!(*this, hpet_id).write(Default::default()); + Self::init_timers(&mut this); } From d25964880fc3092c558735caeca260f2f7c31d21 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:31 +0800 Subject: [PATCH 059/152] rust/hpet: Pass &BqlRefCell as argument during MMIO access Currently in HPETTimer context, the global registers are accessed by dereferring a HPETState raw pointer stored in NonNull<>, and then borrowing the BqlRefCel<>. This blocks borrowing HPETRegisters once during MMIO access, and furthermore prevents replacing BqlRefCell<> with Mutex<>. Therefore, do not access global registers through NonNull and instead passing &BqlRefCell as argument in function calls within MMIO access. But there's one special case that is timer handler, which still needs to access HPETRegistsers through NonNull. It's okay for now since this case doesn't have any repeated borrow() or lock reentrancy issues. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-17-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 161 +++++++++++++++++++------------ 1 file changed, 97 insertions(+), 64 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index d622a6920a..0e076a7f1d 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -171,7 +171,10 @@ const fn deactivating_bit(old: u64, new: u64, shift: usize) -> bool { } fn timer_handler(timer_cell: &BqlRefCell) { - timer_cell.borrow_mut().callback() + let mut t = timer_cell.borrow_mut(); + // SFAETY: state field is valid after timer initialization. + let hpet_regs = &mut unsafe { t.state.as_mut() }.regs; + t.callback(hpet_regs) } #[repr(C)] @@ -279,11 +282,8 @@ impl HPETTimer { unsafe { self.state.as_ref() } } - fn is_int_active(&self) -> bool { - self.get_state() - .regs - .borrow() - .is_timer_int_active(self.index.into()) + fn is_int_active(&self, hpet_regs: &BqlRefCell) -> bool { + hpet_regs.borrow().is_timer_int_active(self.index.into()) } /// calculate next value of the general counter that matches the @@ -301,8 +301,8 @@ impl HPETTimer { } } - fn get_int_route(&self) -> usize { - if self.index <= 1 && self.get_state().regs.borrow().is_legacy_mode() { + fn get_int_route(&self, regs: &HPETRegisters) -> usize { + if self.index <= 1 && regs.is_legacy_mode() { // If LegacyReplacement Route bit is set, HPET specification requires // timer0 be routed to IRQ0 in NON-APIC or IRQ2 in the I/O APIC, // timer1 be routed to IRQ8 in NON-APIC or IRQ8 in the I/O APIC. @@ -326,10 +326,10 @@ impl HPETTimer { } } - fn set_irq(&self, set: bool) { - let route = self.get_int_route(); + fn set_irq(&self, regs: &HPETRegisters, set: bool) { + let route = self.get_int_route(regs); - if set && self.regs.is_int_enabled() && self.get_state().regs.borrow().is_hpet_enabled() { + if set && self.regs.is_int_enabled() && regs.is_hpet_enabled() { if self.regs.is_fsb_route_enabled() { // SAFETY: // the parameters are valid. @@ -352,13 +352,17 @@ impl HPETTimer { } } - fn update_irq(&self, set: bool) { + fn update_irq(&self, hpet_regs: &BqlRefCell, set: bool) { + let mut regs = hpet_regs.borrow_mut(); // If Timer N Interrupt Enable bit is 0, "the timer will // still operate and generate appropriate status bits, but // will not cause an interrupt" - self.get_state() - .update_int_status(self.index.into(), set && self.regs.is_int_level_triggered()); - self.set_irq(set); + regs.int_status = regs.int_status.deposit( + self.index.into(), + 1, + u64::from(set && self.regs.is_int_level_triggered()), + ); + self.set_irq(®s, set); } fn arm_timer(&mut self, tick: u64) { @@ -390,22 +394,27 @@ impl HPETTimer { self.arm_timer(self.cmp64); } - fn del_timer(&self) { + fn del_timer(&self, hpet_regs: &BqlRefCell) { // Just remove the timer from the timer_list without destroying // this timer instance. self.qemu_timer.delete(); - if self.is_int_active() { + if self.is_int_active(hpet_regs) { // For level-triggered interrupt, this leaves interrupt status // register set but lowers irq. - self.update_irq(true); + self.update_irq(hpet_regs, true); } } /// Configuration and Capability Register - fn set_tn_cfg_reg(&mut self, shift: u32, len: u32, val: u64) { + fn set_tn_cfg_reg( + &mut self, + hpet_regs: &BqlRefCell, + shift: u32, + len: u32, + val: u64, + ) { trace::trace_hpet_ram_write_tn_cfg((shift / 8).try_into().unwrap()); - let old_val: u64 = self.regs.config; let mut new_val: u64 = old_val.deposit(shift, len, val); new_val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK); @@ -414,13 +423,15 @@ impl HPETTimer { if deactivating_bit(old_val, new_val, HPET_TN_CFG_INT_TYPE_SHIFT) { // Do this before changing timer.regs.config; otherwise, if // HPET_TN_FSB is set, update_irq will not lower the qemu_irq. - self.update_irq(false); + self.update_irq(hpet_regs, false); } self.regs.config = new_val; - if activating_bit(old_val, new_val, HPET_TN_CFG_INT_ENABLE_SHIFT) && self.is_int_active() { - self.update_irq(true); + if activating_bit(old_val, new_val, HPET_TN_CFG_INT_ENABLE_SHIFT) + && self.is_int_active(hpet_regs) + { + self.update_irq(hpet_regs, true); } if self.regs.is_32bit_mod() { @@ -428,13 +439,19 @@ impl HPETTimer { self.period = u64::from(self.period as u32); // truncate! } - if self.get_state().regs.borrow().is_hpet_enabled() { + if hpet_regs.borrow().is_hpet_enabled() { self.set_timer(); } } /// Comparator Value Register - fn set_tn_cmp_reg(&mut self, shift: u32, len: u32, val: u64) { + fn set_tn_cmp_reg( + &mut self, + hpet_regs: &BqlRefCell, + shift: u32, + len: u32, + val: u64, + ) { let mut length = len; let mut value = val; @@ -459,18 +476,24 @@ impl HPETTimer { } self.regs.clear_valset(); - if self.get_state().regs.borrow().is_hpet_enabled() { + if hpet_regs.borrow().is_hpet_enabled() { self.set_timer(); } } /// FSB Interrupt Route Register - fn set_tn_fsb_route_reg(&mut self, shift: u32, len: u32, val: u64) { + fn set_tn_fsb_route_reg( + &mut self, + _hpet_regs: &BqlRefCell, + shift: u32, + len: u32, + val: u64, + ) { self.regs.fsb = self.regs.fsb.deposit(shift, len, val); } - fn reset(&mut self) { - self.del_timer(); + fn reset(&mut self, hpet_regs: &BqlRefCell) { + self.del_timer(hpet_regs); self.regs.cmp = u64::MAX; // Comparator Match Registers reset to all 1's. self.regs.config = (1 << HPET_TN_CFG_PERIODIC_CAP_SHIFT) | (1 << HPET_TN_CFG_SIZE_CAP_SHIFT); @@ -485,7 +508,7 @@ impl HPETTimer { } /// timer expiration callback - fn callback(&mut self) { + fn callback(&mut self, hpet_regs: &BqlRefCell) { let period: u64 = self.period; let cur_tick: u64 = self.get_state().get_ticks(); @@ -503,10 +526,10 @@ impl HPETTimer { self.wrap_flag = 0; self.arm_timer(self.cmp64); } - self.update_irq(true); + self.update_irq(hpet_regs, true); } - const fn read(&self, target: TimerRegister) -> u64 { + const fn read(&self, target: TimerRegister, _hpet_regs: &BqlRefCell) -> u64 { use TimerRegister::*; match target { CFG => self.regs.config, // including interrupt capabilities @@ -515,14 +538,21 @@ impl HPETTimer { } } - fn write(&mut self, target: TimerRegister, value: u64, shift: u32, len: u32) { + fn write( + &mut self, + target: TimerRegister, + hpet_regs: &BqlRefCell, + value: u64, + shift: u32, + len: u32, + ) { use TimerRegister::*; trace::trace_hpet_ram_write_timer_id(self.index); match target { - CFG => self.set_tn_cfg_reg(shift, len, value), - CMP => self.set_tn_cmp_reg(shift, len, value), - ROUTE => self.set_tn_fsb_route_reg(shift, len, value), + CFG => self.set_tn_cfg_reg(hpet_regs, shift, len, value), + CMP => self.set_tn_cmp_reg(hpet_regs, shift, len, value), + ROUTE => self.set_tn_fsb_route_reg(hpet_regs, shift, len, value), } } } @@ -641,38 +671,33 @@ impl HPETState { } } - fn update_int_status(&self, index: u32, level: bool) { - let mut regs = self.regs.borrow_mut(); - regs.int_status = regs.int_status.deposit(index, 1, u64::from(level)); - } - /// General Configuration Register - fn set_cfg_reg(&self, shift: u32, len: u32, val: u64) { - let old_val = self.regs.borrow().config; + fn set_cfg_reg(&self, regs: &BqlRefCell, shift: u32, len: u32, val: u64) { + let old_val = regs.borrow().config; let mut new_val = old_val.deposit(shift, len, val); new_val = hpet_fixup_reg(new_val, old_val, HPET_CFG_WRITE_MASK); - self.regs.borrow_mut().config = new_val; + regs.borrow_mut().config = new_val; if activating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Enable main counter and interrupt generation. self.hpet_offset - .set(ticks_to_ns(self.regs.borrow().counter) - CLOCK_VIRTUAL.get_ns()); + .set(ticks_to_ns(regs.borrow().counter) - CLOCK_VIRTUAL.get_ns()); for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); - if t.regs.is_int_enabled() && t.is_int_active() { - t.update_irq(true); + if t.regs.is_int_enabled() && t.is_int_active(regs) { + t.update_irq(regs, true); } t.set_timer(); } } else if deactivating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Halt main counter and disable interrupt generation. - self.regs.borrow_mut().counter = self.get_ticks(); + regs.borrow_mut().counter = self.get_ticks(); for timer in self.timers.iter().take(self.num_timers) { - timer.borrow().del_timer(); + timer.borrow().del_timer(regs); } } @@ -690,20 +715,26 @@ impl HPETState { } /// General Interrupt Status Register: Read/Write Clear - fn set_int_status_reg(&self, shift: u32, _len: u32, val: u64) { + fn set_int_status_reg( + &self, + regs: &BqlRefCell, + shift: u32, + _len: u32, + val: u64, + ) { let new_val = val << shift; - let cleared = new_val & self.regs.borrow().int_status; + let cleared = new_val & regs.borrow().int_status; for (index, timer) in self.timers.iter().take(self.num_timers).enumerate() { if cleared & (1 << index) != 0 { - timer.borrow().update_irq(false); + timer.borrow().update_irq(regs, false); } } } /// Main Counter Value Register - fn set_counter_reg(&self, shift: u32, len: u32, val: u64) { - let mut regs = self.regs.borrow_mut(); + fn set_counter_reg(&self, regs: &BqlRefCell, shift: u32, len: u32, val: u64) { + let mut regs = regs.borrow_mut(); if regs.is_hpet_enabled() { // HPET spec says that writes to this register should only be // done while the counter is halted. So this is an undefined @@ -782,7 +813,7 @@ impl HPETState { fn reset_hold(&self, _type: ResetType) { for timer in self.timers.iter().take(self.num_timers) { - timer.borrow_mut().reset(); + timer.borrow_mut().reset(&self.regs); } // pit_enabled.set(true) will call irq handler and access regs @@ -834,16 +865,17 @@ impl HPETState { trace::trace_hpet_ram_read(addr); let HPETAddrDecode { shift, target, .. } = self.decode(addr, size); + let regs = &self.regs; use DecodedRegister::*; use GlobalRegister::*; (match target { - Timer(timer, tn_target) => timer.borrow_mut().read(tn_target), - Global(CAP) => self.regs.borrow().capability, /* including HPET_PERIOD 0x004 */ - Global(CFG) => self.regs.borrow().config, - Global(INT_STATUS) => self.regs.borrow().int_status, + Timer(timer, tn_target) => timer.borrow_mut().read(tn_target, regs), + Global(CAP) => regs.borrow().capability, /* including HPET_PERIOD 0x004 */ + Global(CFG) => regs.borrow().config, + Global(INT_STATUS) => regs.borrow().int_status, Global(COUNTER) => { - let regs = self.regs.borrow(); + let regs = regs.borrow(); let cur_tick = if regs.is_hpet_enabled() { self.get_ticks() } else { @@ -863,17 +895,18 @@ impl HPETState { fn write(&self, addr: hwaddr, value: u64, size: u32) { let HPETAddrDecode { shift, len, target } = self.decode(addr, size); + let regs = &self.regs; trace::trace_hpet_ram_write(addr, value); use DecodedRegister::*; use GlobalRegister::*; match target { - Timer(timer, tn_target) => timer.borrow_mut().write(tn_target, value, shift, len), + Timer(timer, tn_target) => timer.borrow_mut().write(tn_target, regs, value, shift, len), Global(CAP) => {} // General Capabilities and ID Register: Read Only - Global(CFG) => self.set_cfg_reg(shift, len, value), - Global(INT_STATUS) => self.set_int_status_reg(shift, len, value), - Global(COUNTER) => self.set_counter_reg(shift, len, value), + Global(CFG) => self.set_cfg_reg(regs, shift, len, value), + Global(INT_STATUS) => self.set_int_status_reg(regs, shift, len, value), + Global(COUNTER) => self.set_counter_reg(regs, shift, len, value), Unknown(_) => trace::trace_hpet_ram_write_invalid(), } } From 4e6223c7278f608ab796f7954207df4ad9cc2aa1 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Fri, 21 Nov 2025 18:11:34 +0100 Subject: [PATCH 060/152] rust/hpet: Maintain HPETTimerRegisters in HPETRegisters Lockless IO requires holding a single lock during MMIO access, so that it's necessary to maintain timer N's registers (HPETTimerRegisters) with global register in one place. Therefore, move HPETTimerRegisters to HPETRegisters from HPETTimer, and access timer registers from HPETRegisters struct for the whole HPET code. This changes HPETTimer and HPETRegisters, and the layout of VMState has changed, which makes it incompatible to migrate with previous versions. Thus, bump up the version IDs in VMStates of HPETState and HPETTimer. The VMState version IDs of HPETRegisters doesn't need to change since it's a newly added struct and its version IDs doesn't affect the compatibility of HPETState's VMState. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-18-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 163 ++++++++++++++++++------------- 1 file changed, 96 insertions(+), 67 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 0e076a7f1d..f9cdced540 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -235,7 +235,6 @@ pub struct HPETTimer { /// timer block abstraction containing this timer state: NonNull, - regs: HPETTimerRegisters, // Hidden register state /// comparator (extended to counter width) cmp64: u64, @@ -260,7 +259,6 @@ impl HPETTimer { // is initialized below. qemu_timer: unsafe { Timer::new() }, state: NonNull::new(state.cast_mut()).unwrap(), - regs: Default::default(), cmp64: 0, period: 0, wrap_flag: 0, @@ -289,8 +287,14 @@ impl HPETTimer { /// calculate next value of the general counter that matches the /// target (either entirely, or the low 32-bit only depending on /// the timer mode). - fn calculate_cmp64(&self, cur_tick: u64, target: u64) -> u64 { - if self.regs.is_32bit_mod() { + fn calculate_cmp64( + &self, + hpet_regs: &BqlRefCell, + cur_tick: u64, + target: u64, + ) -> u64 { + let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; + if tn_regs.is_32bit_mod() { let mut result: u64 = cur_tick.deposit(0, 32, target); if result < cur_tick { result += 0x100000000; @@ -322,32 +326,33 @@ impl HPETTimer { // ... // If the LegacyReplacement Route bit is not set, the individual // routing bits for each of the timers are used. - self.regs.get_individual_route() + regs.tn_regs[self.index as usize].get_individual_route() } } fn set_irq(&self, regs: &HPETRegisters, set: bool) { + let tn_regs = ®s.tn_regs[self.index as usize]; let route = self.get_int_route(regs); - if set && self.regs.is_int_enabled() && regs.is_hpet_enabled() { - if self.regs.is_fsb_route_enabled() { + if set && tn_regs.is_int_enabled() && regs.is_hpet_enabled() { + if tn_regs.is_fsb_route_enabled() { // SAFETY: // the parameters are valid. unsafe { address_space_stl_le( addr_of_mut!(address_space_memory), - self.regs.fsb >> 32, // Timer N FSB int addr - self.regs.fsb as u32, // Timer N FSB int value, truncate! + tn_regs.fsb >> 32, // Timer N FSB int addr + tn_regs.fsb as u32, // Timer N FSB int value, truncate! MEMTXATTRS_UNSPECIFIED, null_mut(), ); } - } else if self.regs.is_int_level_triggered() { + } else if tn_regs.is_int_level_triggered() { self.get_state().irqs[route].raise(); } else { self.get_state().irqs[route].pulse(); } - } else if !self.regs.is_fsb_route_enabled() { + } else if !tn_regs.is_fsb_route_enabled() { self.get_state().irqs[route].lower(); } } @@ -360,16 +365,17 @@ impl HPETTimer { regs.int_status = regs.int_status.deposit( self.index.into(), 1, - u64::from(set && self.regs.is_int_level_triggered()), + u64::from(set && regs.tn_regs[self.index as usize].is_int_level_triggered()), ); self.set_irq(®s, set); } - fn arm_timer(&mut self, tick: u64) { + fn arm_timer(&mut self, hpet_regs: &BqlRefCell, tick: u64) { + let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; let mut ns = self.get_state().get_ns(tick); // Clamp period to reasonable min value (1 us) - if self.regs.is_periodic() && ns - self.last < 1000 { + if tn_regs.is_periodic() && ns - self.last < 1000 { ns = self.last + 1000; } @@ -377,21 +383,22 @@ impl HPETTimer { self.qemu_timer.modify(self.last); } - fn set_timer(&mut self) { + fn set_timer(&mut self, hpet_regs: &BqlRefCell) { + let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; let cur_tick: u64 = self.get_state().get_ticks(); self.wrap_flag = 0; - self.cmp64 = self.calculate_cmp64(cur_tick, self.regs.cmp); - if self.regs.is_32bit_mod() { + self.cmp64 = self.calculate_cmp64(hpet_regs, cur_tick, tn_regs.cmp); + if tn_regs.is_32bit_mod() { // HPET spec says in one-shot 32-bit mode, generate an interrupt when // counter wraps in addition to an interrupt with comparator match. - if !self.regs.is_periodic() && self.cmp64 > hpet_next_wrap(cur_tick) { + if !tn_regs.is_periodic() && self.cmp64 > hpet_next_wrap(cur_tick) { self.wrap_flag = 1; - self.arm_timer(hpet_next_wrap(cur_tick)); + self.arm_timer(hpet_regs, hpet_next_wrap(cur_tick)); return; } } - self.arm_timer(self.cmp64); + self.arm_timer(hpet_regs, self.cmp64); } fn del_timer(&self, hpet_regs: &BqlRefCell) { @@ -406,16 +413,16 @@ impl HPETTimer { } } - /// Configuration and Capability Register - fn set_tn_cfg_reg( - &mut self, + fn prepare_tn_cfg_reg_new( + &self, hpet_regs: &BqlRefCell, shift: u32, len: u32, val: u64, - ) { + ) -> (u64, u64) { trace::trace_hpet_ram_write_tn_cfg((shift / 8).try_into().unwrap()); - let old_val: u64 = self.regs.config; + let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; + let old_val: u64 = tn_regs.config; let mut new_val: u64 = old_val.deposit(shift, len, val); new_val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK); @@ -426,7 +433,21 @@ impl HPETTimer { self.update_irq(hpet_regs, false); } - self.regs.config = new_val; + (new_val, old_val) + } + + /// Configuration and Capability Register + fn set_tn_cfg_reg( + &mut self, + hpet_regs: &BqlRefCell, + shift: u32, + len: u32, + val: u64, + ) { + // Factor out a prepare_tn_cfg_reg_new() to better handle immutable scope. + let (new_val, old_val) = self.prepare_tn_cfg_reg_new(hpet_regs, shift, len, val); + let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; + tn_regs.config = new_val; if activating_bit(old_val, new_val, HPET_TN_CFG_INT_ENABLE_SHIFT) && self.is_int_active(hpet_regs) @@ -434,13 +455,13 @@ impl HPETTimer { self.update_irq(hpet_regs, true); } - if self.regs.is_32bit_mod() { - self.regs.cmp = u64::from(self.regs.cmp as u32); // truncate! + if tn_regs.is_32bit_mod() { + tn_regs.cmp = u64::from(tn_regs.cmp as u32); // truncate! self.period = u64::from(self.period as u32); // truncate! } if hpet_regs.borrow().is_hpet_enabled() { - self.set_timer(); + self.set_timer(hpet_regs); } } @@ -452,10 +473,11 @@ impl HPETTimer { len: u32, val: u64, ) { + let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; let mut length = len; let mut value = val; - if self.regs.is_32bit_mod() { + if tn_regs.is_32bit_mod() { // High 32-bits are zero, leave them untouched. if shift != 0 { trace::trace_hpet_ram_write_invalid_tn_cmp(); @@ -467,41 +489,43 @@ impl HPETTimer { trace::trace_hpet_ram_write_tn_cmp((shift / 8).try_into().unwrap()); - if !self.regs.is_periodic() || self.regs.is_valset_enabled() { - self.regs.cmp = self.regs.cmp.deposit(shift, length, value); + if !tn_regs.is_periodic() || tn_regs.is_valset_enabled() { + tn_regs.cmp = tn_regs.cmp.deposit(shift, length, value); } - if self.regs.is_periodic() { + if tn_regs.is_periodic() { self.period = self.period.deposit(shift, length, value); } - self.regs.clear_valset(); + tn_regs.clear_valset(); if hpet_regs.borrow().is_hpet_enabled() { - self.set_timer(); + self.set_timer(hpet_regs); } } /// FSB Interrupt Route Register fn set_tn_fsb_route_reg( - &mut self, - _hpet_regs: &BqlRefCell, + &self, + hpet_regs: &BqlRefCell, shift: u32, len: u32, val: u64, ) { - self.regs.fsb = self.regs.fsb.deposit(shift, len, val); + let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; + tn_regs.fsb = tn_regs.fsb.deposit(shift, len, val); } fn reset(&mut self, hpet_regs: &BqlRefCell) { self.del_timer(hpet_regs); - self.regs.cmp = u64::MAX; // Comparator Match Registers reset to all 1's. - self.regs.config = - (1 << HPET_TN_CFG_PERIODIC_CAP_SHIFT) | (1 << HPET_TN_CFG_SIZE_CAP_SHIFT); + + let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; + tn_regs.cmp = u64::MAX; // Comparator Match Registers reset to all 1's. + tn_regs.config = (1 << HPET_TN_CFG_PERIODIC_CAP_SHIFT) | (1 << HPET_TN_CFG_SIZE_CAP_SHIFT); if self.get_state().has_msi_flag() { - self.regs.config |= 1 << HPET_TN_CFG_FSB_CAP_SHIFT; + tn_regs.config |= 1 << HPET_TN_CFG_FSB_CAP_SHIFT; } // advertise availability of ioapic int - self.regs.config |= + tn_regs.config |= (u64::from(self.get_state().int_route_cap)) << HPET_TN_CFG_INT_ROUTE_CAP_SHIFT; self.period = 0; self.wrap_flag = 0; @@ -509,32 +533,35 @@ impl HPETTimer { /// timer expiration callback fn callback(&mut self, hpet_regs: &BqlRefCell) { + let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; let period: u64 = self.period; let cur_tick: u64 = self.get_state().get_ticks(); - if self.regs.is_periodic() && period != 0 { + if tn_regs.is_periodic() && period != 0 { while hpet_time_after(cur_tick, self.cmp64) { self.cmp64 += period; } - if self.regs.is_32bit_mod() { - self.regs.cmp = u64::from(self.cmp64 as u32); // truncate! + if tn_regs.is_32bit_mod() { + tn_regs.cmp = u64::from(self.cmp64 as u32); // truncate! } else { - self.regs.cmp = self.cmp64; + tn_regs.cmp = self.cmp64; } - self.arm_timer(self.cmp64); + self.arm_timer(hpet_regs, self.cmp64); } else if self.wrap_flag != 0 { self.wrap_flag = 0; - self.arm_timer(self.cmp64); + self.arm_timer(hpet_regs, self.cmp64); } self.update_irq(hpet_regs, true); } - const fn read(&self, target: TimerRegister, _hpet_regs: &BqlRefCell) -> u64 { + fn read(&self, target: TimerRegister, hpet_regs: &BqlRefCell) -> u64 { + let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; + use TimerRegister::*; match target { - CFG => self.regs.config, // including interrupt capabilities - CMP => self.regs.cmp, // comparator register - ROUTE => self.regs.fsb, + CFG => tn_regs.config, // including interrupt capabilities + CMP => tn_regs.cmp, // comparator register + ROUTE => tn_regs.fsb, } } @@ -571,6 +598,9 @@ pub struct HPETRegisters { /// Main Counter Value Register #[doc(alias = "hpet_counter")] counter: u64, + + /// HPET Timer N Registers + tn_regs: [HPETTimerRegisters; HPET_MAX_TIMERS], } impl HPETRegisters { @@ -686,11 +716,13 @@ impl HPETState { for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); + let id = t.index as usize; + let tn_regs = ®s.borrow().tn_regs[id]; - if t.regs.is_int_enabled() && t.is_int_active(regs) { + if tn_regs.is_int_enabled() && t.is_int_active(regs) { t.update_irq(regs, true); } - t.set_timer(); + t.set_timer(regs); } } else if deactivating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Halt main counter and disable interrupt generation. @@ -932,8 +964,9 @@ impl HPETState { for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); let cnt = regs.counter; + let cmp = regs.tn_regs[t.index as usize].cmp; - t.cmp64 = t.calculate_cmp64(cnt, t.regs.cmp); + t.cmp64 = t.calculate_cmp64(&self.regs, cnt, cmp); t.last = CLOCK_VIRTUAL.get_ns() - NANOSECONDS_PER_SECOND; } @@ -997,8 +1030,6 @@ static VMSTATE_HPET_OFFSET: VMStateDescription = }) .build(); -// In fact, version_id and minimum_version_id for HPETTimerRegisters are -// unrelated to HPETTimer's version IDs. Does not affect compatibility. impl_vmstate_struct!( HPETTimerRegisters, VMStateDescriptionBuilder::::new() @@ -1016,11 +1047,10 @@ impl_vmstate_struct!( const VMSTATE_HPET_TIMER: VMStateDescription = VMStateDescriptionBuilder::::new() .name(c"hpet_timer") - .version_id(1) - .minimum_version_id(1) + .version_id(2) + .minimum_version_id(2) .fields(vmstate_fields! { vmstate_of!(HPETTimer, index), - vmstate_of!(HPETTimer, regs), vmstate_of!(HPETTimer, period), vmstate_of!(HPETTimer, wrap_flag), vmstate_of!(HPETTimer, qemu_timer), @@ -1031,18 +1061,17 @@ impl_vmstate_struct!(HPETTimer, VMSTATE_HPET_TIMER); const VALIDATE_TIMERS_NAME: &CStr = c"num_timers must match"; -// In fact, version_id and minimum_version_id for HPETRegisters are -// unrelated to HPETState's version IDs. Does not affect compatibility. impl_vmstate_struct!( HPETRegisters, VMStateDescriptionBuilder::::new() .name(c"hpet/regs") - .version_id(1) - .minimum_version_id(1) + .version_id(2) + .minimum_version_id(2) .fields(vmstate_fields! { vmstate_of!(HPETRegisters, config), vmstate_of!(HPETRegisters, int_status), vmstate_of!(HPETRegisters, counter), + vmstate_of!(HPETRegisters, tn_regs), }) .build() ); @@ -1050,8 +1079,8 @@ impl_vmstate_struct!( const VMSTATE_HPET: VMStateDescription = VMStateDescriptionBuilder::::new() .name(c"hpet") - .version_id(2) - .minimum_version_id(2) + .version_id(3) + .minimum_version_id(3) .pre_save(&HPETState::pre_save) .post_load(&HPETState::post_load) .fields(vmstate_fields! { From aef4e4637d0aaf74a3d10d23a80bf4373aaebc0d Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Fri, 21 Nov 2025 18:40:19 +0100 Subject: [PATCH 061/152] rust/hpet: Borrow BqlRefCell at top level Lockless IO requires to lock the registers during MMIO access. So it's necessary to get (or borrow) registers data at top level, and not to borrow again in child function calls. Change the argument types from BqlRefCell to &HPETRegisters/&mut HPETRegisters in child methods, and do borrow the data once at top level. This allows BqlRefCell to be directly replaced with Mutex in subsequent steps without causing lock reentrancy issues. Note, passing reference instead of BqlRef/BqlRefMut because BqlRefMut cannot be re-borrowed as BqlRef, though BqlRef/BqlRefMut themselves play as the "guard". Passing reference is directly and the extra bql::is_locked check could help to consolidate safety guarantee. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-19-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 190 +++++++++++++------------------ 1 file changed, 80 insertions(+), 110 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index f9cdced540..916ae587b0 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -174,7 +174,7 @@ fn timer_handler(timer_cell: &BqlRefCell) { let mut t = timer_cell.borrow_mut(); // SFAETY: state field is valid after timer initialization. let hpet_regs = &mut unsafe { t.state.as_mut() }.regs; - t.callback(hpet_regs) + t.callback(&mut hpet_regs.borrow_mut()) } #[repr(C)] @@ -280,20 +280,15 @@ impl HPETTimer { unsafe { self.state.as_ref() } } - fn is_int_active(&self, hpet_regs: &BqlRefCell) -> bool { - hpet_regs.borrow().is_timer_int_active(self.index.into()) + fn is_int_active(&self, regs: &HPETRegisters) -> bool { + regs.is_timer_int_active(self.index.into()) } /// calculate next value of the general counter that matches the /// target (either entirely, or the low 32-bit only depending on /// the timer mode). - fn calculate_cmp64( - &self, - hpet_regs: &BqlRefCell, - cur_tick: u64, - target: u64, - ) -> u64 { - let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; + fn calculate_cmp64(&self, regs: &HPETRegisters, cur_tick: u64, target: u64) -> u64 { + let tn_regs = ®s.tn_regs[self.index as usize]; if tn_regs.is_32bit_mod() { let mut result: u64 = cur_tick.deposit(0, 32, target); if result < cur_tick { @@ -357,8 +352,7 @@ impl HPETTimer { } } - fn update_irq(&self, hpet_regs: &BqlRefCell, set: bool) { - let mut regs = hpet_regs.borrow_mut(); + fn update_irq(&self, regs: &mut HPETRegisters, set: bool) { // If Timer N Interrupt Enable bit is 0, "the timer will // still operate and generate appropriate status bits, but // will not cause an interrupt" @@ -367,11 +361,11 @@ impl HPETTimer { 1, u64::from(set && regs.tn_regs[self.index as usize].is_int_level_triggered()), ); - self.set_irq(®s, set); + self.set_irq(regs, set); } - fn arm_timer(&mut self, hpet_regs: &BqlRefCell, tick: u64) { - let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; + fn arm_timer(&mut self, regs: &HPETRegisters, tick: u64) { + let tn_regs = ®s.tn_regs[self.index as usize]; let mut ns = self.get_state().get_ns(tick); // Clamp period to reasonable min value (1 us) @@ -383,45 +377,45 @@ impl HPETTimer { self.qemu_timer.modify(self.last); } - fn set_timer(&mut self, hpet_regs: &BqlRefCell) { - let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; + fn set_timer(&mut self, regs: &HPETRegisters) { + let tn_regs = ®s.tn_regs[self.index as usize]; let cur_tick: u64 = self.get_state().get_ticks(); self.wrap_flag = 0; - self.cmp64 = self.calculate_cmp64(hpet_regs, cur_tick, tn_regs.cmp); + self.cmp64 = self.calculate_cmp64(regs, cur_tick, tn_regs.cmp); if tn_regs.is_32bit_mod() { // HPET spec says in one-shot 32-bit mode, generate an interrupt when // counter wraps in addition to an interrupt with comparator match. if !tn_regs.is_periodic() && self.cmp64 > hpet_next_wrap(cur_tick) { self.wrap_flag = 1; - self.arm_timer(hpet_regs, hpet_next_wrap(cur_tick)); + self.arm_timer(regs, hpet_next_wrap(cur_tick)); return; } } - self.arm_timer(hpet_regs, self.cmp64); + self.arm_timer(regs, self.cmp64); } - fn del_timer(&self, hpet_regs: &BqlRefCell) { + fn del_timer(&self, regs: &mut HPETRegisters) { // Just remove the timer from the timer_list without destroying // this timer instance. self.qemu_timer.delete(); - if self.is_int_active(hpet_regs) { + if self.is_int_active(regs) { // For level-triggered interrupt, this leaves interrupt status // register set but lowers irq. - self.update_irq(hpet_regs, true); + self.update_irq(regs, true); } } fn prepare_tn_cfg_reg_new( &self, - hpet_regs: &BqlRefCell, + regs: &mut HPETRegisters, shift: u32, len: u32, val: u64, ) -> (u64, u64) { trace::trace_hpet_ram_write_tn_cfg((shift / 8).try_into().unwrap()); - let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; + let tn_regs = ®s.tn_regs[self.index as usize]; let old_val: u64 = tn_regs.config; let mut new_val: u64 = old_val.deposit(shift, len, val); new_val = hpet_fixup_reg(new_val, old_val, HPET_TN_CFG_WRITE_MASK); @@ -430,50 +424,38 @@ impl HPETTimer { if deactivating_bit(old_val, new_val, HPET_TN_CFG_INT_TYPE_SHIFT) { // Do this before changing timer.regs.config; otherwise, if // HPET_TN_FSB is set, update_irq will not lower the qemu_irq. - self.update_irq(hpet_regs, false); + self.update_irq(regs, false); } (new_val, old_val) } /// Configuration and Capability Register - fn set_tn_cfg_reg( - &mut self, - hpet_regs: &BqlRefCell, - shift: u32, - len: u32, - val: u64, - ) { + fn set_tn_cfg_reg(&mut self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { // Factor out a prepare_tn_cfg_reg_new() to better handle immutable scope. - let (new_val, old_val) = self.prepare_tn_cfg_reg_new(hpet_regs, shift, len, val); - let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; - tn_regs.config = new_val; + let (new_val, old_val) = self.prepare_tn_cfg_reg_new(regs, shift, len, val); + regs.tn_regs[self.index as usize].config = new_val; if activating_bit(old_val, new_val, HPET_TN_CFG_INT_ENABLE_SHIFT) - && self.is_int_active(hpet_regs) + && self.is_int_active(regs) { - self.update_irq(hpet_regs, true); + self.update_irq(regs, true); } + let tn_regs = &mut regs.tn_regs[self.index as usize]; if tn_regs.is_32bit_mod() { tn_regs.cmp = u64::from(tn_regs.cmp as u32); // truncate! self.period = u64::from(self.period as u32); // truncate! } - if hpet_regs.borrow().is_hpet_enabled() { - self.set_timer(hpet_regs); + if regs.is_hpet_enabled() { + self.set_timer(regs); } } /// Comparator Value Register - fn set_tn_cmp_reg( - &mut self, - hpet_regs: &BqlRefCell, - shift: u32, - len: u32, - val: u64, - ) { - let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; + fn set_tn_cmp_reg(&mut self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { + let tn_regs = &mut regs.tn_regs[self.index as usize]; let mut length = len; let mut value = val; @@ -498,27 +480,21 @@ impl HPETTimer { } tn_regs.clear_valset(); - if hpet_regs.borrow().is_hpet_enabled() { - self.set_timer(hpet_regs); + if regs.is_hpet_enabled() { + self.set_timer(regs); } } /// FSB Interrupt Route Register - fn set_tn_fsb_route_reg( - &self, - hpet_regs: &BqlRefCell, - shift: u32, - len: u32, - val: u64, - ) { - let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; + fn set_tn_fsb_route_reg(&self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { + let tn_regs = &mut regs.tn_regs[self.index as usize]; tn_regs.fsb = tn_regs.fsb.deposit(shift, len, val); } - fn reset(&mut self, hpet_regs: &BqlRefCell) { - self.del_timer(hpet_regs); + fn reset(&mut self, regs: &mut HPETRegisters) { + self.del_timer(regs); - let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; + let tn_regs = &mut regs.tn_regs[self.index as usize]; tn_regs.cmp = u64::MAX; // Comparator Match Registers reset to all 1's. tn_regs.config = (1 << HPET_TN_CFG_PERIODIC_CAP_SHIFT) | (1 << HPET_TN_CFG_SIZE_CAP_SHIFT); if self.get_state().has_msi_flag() { @@ -532,8 +508,8 @@ impl HPETTimer { } /// timer expiration callback - fn callback(&mut self, hpet_regs: &BqlRefCell) { - let tn_regs = &mut hpet_regs.borrow_mut().tn_regs[self.index as usize]; + fn callback(&mut self, regs: &mut HPETRegisters) { + let tn_regs = &mut regs.tn_regs[self.index as usize]; let period: u64 = self.period; let cur_tick: u64 = self.get_state().get_ticks(); @@ -546,16 +522,16 @@ impl HPETTimer { } else { tn_regs.cmp = self.cmp64; } - self.arm_timer(hpet_regs, self.cmp64); + self.arm_timer(regs, self.cmp64); } else if self.wrap_flag != 0 { self.wrap_flag = 0; - self.arm_timer(hpet_regs, self.cmp64); + self.arm_timer(regs, self.cmp64); } - self.update_irq(hpet_regs, true); + self.update_irq(regs, true); } - fn read(&self, target: TimerRegister, hpet_regs: &BqlRefCell) -> u64 { - let tn_regs = &hpet_regs.borrow().tn_regs[self.index as usize]; + fn read(&self, target: TimerRegister, regs: &HPETRegisters) -> u64 { + let tn_regs = ®s.tn_regs[self.index as usize]; use TimerRegister::*; match target { @@ -568,7 +544,7 @@ impl HPETTimer { fn write( &mut self, target: TimerRegister, - hpet_regs: &BqlRefCell, + regs: &mut HPETRegisters, value: u64, shift: u32, len: u32, @@ -577,9 +553,9 @@ impl HPETTimer { trace::trace_hpet_ram_write_timer_id(self.index); match target { - CFG => self.set_tn_cfg_reg(hpet_regs, shift, len, value), - CMP => self.set_tn_cmp_reg(hpet_regs, shift, len, value), - ROUTE => self.set_tn_fsb_route_reg(hpet_regs, shift, len, value), + CFG => self.set_tn_cfg_reg(regs, shift, len, value), + CMP => self.set_tn_cmp_reg(regs, shift, len, value), + ROUTE => self.set_tn_fsb_route_reg(regs, shift, len, value), } } } @@ -702,22 +678,22 @@ impl HPETState { } /// General Configuration Register - fn set_cfg_reg(&self, regs: &BqlRefCell, shift: u32, len: u32, val: u64) { - let old_val = regs.borrow().config; + fn set_cfg_reg(&self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { + let old_val = regs.config; let mut new_val = old_val.deposit(shift, len, val); new_val = hpet_fixup_reg(new_val, old_val, HPET_CFG_WRITE_MASK); - regs.borrow_mut().config = new_val; + regs.config = new_val; if activating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Enable main counter and interrupt generation. self.hpet_offset - .set(ticks_to_ns(regs.borrow().counter) - CLOCK_VIRTUAL.get_ns()); + .set(ticks_to_ns(regs.counter) - CLOCK_VIRTUAL.get_ns()); for timer in self.timers.iter().take(self.num_timers) { let mut t = timer.borrow_mut(); let id = t.index as usize; - let tn_regs = ®s.borrow().tn_regs[id]; + let tn_regs = ®s.tn_regs[id]; if tn_regs.is_int_enabled() && t.is_int_active(regs) { t.update_irq(regs, true); @@ -726,7 +702,7 @@ impl HPETState { } } else if deactivating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Halt main counter and disable interrupt generation. - regs.borrow_mut().counter = self.get_ticks(); + regs.counter = self.get_ticks(); for timer in self.timers.iter().take(self.num_timers) { timer.borrow().del_timer(regs); @@ -747,15 +723,9 @@ impl HPETState { } /// General Interrupt Status Register: Read/Write Clear - fn set_int_status_reg( - &self, - regs: &BqlRefCell, - shift: u32, - _len: u32, - val: u64, - ) { + fn set_int_status_reg(&self, regs: &mut HPETRegisters, shift: u32, _len: u32, val: u64) { let new_val = val << shift; - let cleared = new_val & regs.borrow().int_status; + let cleared = new_val & regs.int_status; for (index, timer) in self.timers.iter().take(self.num_timers).enumerate() { if cleared & (1 << index) != 0 { @@ -765,8 +735,7 @@ impl HPETState { } /// Main Counter Value Register - fn set_counter_reg(&self, regs: &BqlRefCell, shift: u32, len: u32, val: u64) { - let mut regs = regs.borrow_mut(); + fn set_counter_reg(&self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { if regs.is_hpet_enabled() { // HPET spec says that writes to this register should only be // done while the counter is halted. So this is an undefined @@ -844,23 +813,23 @@ impl HPETState { } fn reset_hold(&self, _type: ResetType) { + let mut regs = self.regs.borrow_mut(); for timer in self.timers.iter().take(self.num_timers) { - timer.borrow_mut().reset(&self.regs); + timer.borrow_mut().reset(&mut regs); } + regs.counter = 0; + regs.config = 0; + HPETFwConfig::update_hpet_cfg( + self.hpet_id.get(), + regs.capability as u32, + self.mmio_addr(0).unwrap(), + ); + // pit_enabled.set(true) will call irq handler and access regs // again. We cannot borrow BqlRefCell twice at once. Minimize the // scope of regs to ensure it will be dropped before irq callback. - { - let mut regs = self.regs.borrow_mut(); - regs.counter = 0; - regs.config = 0; - HPETFwConfig::update_hpet_cfg( - self.hpet_id.get(), - regs.capability as u32, - self.mmio_addr(0).unwrap(), - ); - } + drop(regs); self.pit_enabled.set(true); self.hpet_offset.set(0); @@ -897,17 +866,16 @@ impl HPETState { trace::trace_hpet_ram_read(addr); let HPETAddrDecode { shift, target, .. } = self.decode(addr, size); - let regs = &self.regs; + let regs = &self.regs.borrow(); use DecodedRegister::*; use GlobalRegister::*; (match target { Timer(timer, tn_target) => timer.borrow_mut().read(tn_target, regs), - Global(CAP) => regs.borrow().capability, /* including HPET_PERIOD 0x004 */ - Global(CFG) => regs.borrow().config, - Global(INT_STATUS) => regs.borrow().int_status, + Global(CAP) => regs.capability, /* including HPET_PERIOD 0x004 */ + Global(CFG) => regs.config, + Global(INT_STATUS) => regs.int_status, Global(COUNTER) => { - let regs = regs.borrow(); let cur_tick = if regs.is_hpet_enabled() { self.get_ticks() } else { @@ -927,18 +895,20 @@ impl HPETState { fn write(&self, addr: hwaddr, value: u64, size: u32) { let HPETAddrDecode { shift, len, target } = self.decode(addr, size); - let regs = &self.regs; + let mut regs = self.regs.borrow_mut(); trace::trace_hpet_ram_write(addr, value); use DecodedRegister::*; use GlobalRegister::*; match target { - Timer(timer, tn_target) => timer.borrow_mut().write(tn_target, regs, value, shift, len), + Timer(timer, tn_target) => timer + .borrow_mut() + .write(tn_target, &mut regs, value, shift, len), Global(CAP) => {} // General Capabilities and ID Register: Read Only - Global(CFG) => self.set_cfg_reg(regs, shift, len, value), - Global(INT_STATUS) => self.set_int_status_reg(regs, shift, len, value), - Global(COUNTER) => self.set_counter_reg(regs, shift, len, value), + Global(CFG) => self.set_cfg_reg(&mut regs, shift, len, value), + Global(INT_STATUS) => self.set_int_status_reg(&mut regs, shift, len, value), + Global(COUNTER) => self.set_counter_reg(&mut regs, shift, len, value), Unknown(_) => trace::trace_hpet_ram_write_invalid(), } } @@ -966,7 +936,7 @@ impl HPETState { let cnt = regs.counter; let cmp = regs.tn_regs[t.index as usize].cmp; - t.cmp64 = t.calculate_cmp64(&self.regs, cnt, cmp); + t.cmp64 = t.calculate_cmp64(®s, cnt, cmp); t.last = CLOCK_VIRTUAL.get_ns() - NANOSECONDS_PER_SECOND; } From ef4321631738f5d0069f921b7ca800b9e7daef49 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 21 Nov 2025 19:55:41 +0100 Subject: [PATCH 062/152] rust/hpet: move hidden registers to HPETTimerRegisters Do not separate visible and hidden state; both of them are used in the same circumstances and it's easiest to place both of them under the same BqlRefCell. Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 151 +++++++++++++++---------------- 1 file changed, 71 insertions(+), 80 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 916ae587b0..005e41aec4 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -171,9 +171,9 @@ const fn deactivating_bit(old: u64, new: u64, shift: usize) -> bool { } fn timer_handler(timer_cell: &BqlRefCell) { - let mut t = timer_cell.borrow_mut(); + let t = timer_cell.borrow(); // SFAETY: state field is valid after timer initialization. - let hpet_regs = &mut unsafe { t.state.as_mut() }.regs; + let hpet_regs = &unsafe { t.state.as_ref() }.regs; t.callback(&mut hpet_regs.borrow_mut()) } @@ -187,9 +187,35 @@ pub struct HPETTimerRegisters { cmp: u64, /// Timer N FSB Interrupt Route Register fsb: u64, + + // Hidden register state + /// comparator (extended to counter width) + cmp64: u64, + /// Last value written to comparator + period: u64, + /// timer pop will indicate wrap for one-shot 32-bit + /// mode. Next pop will be actual timer expiration. + wrap_flag: u8, + /// last value armed, to avoid timer storms + last: u64, } impl HPETTimerRegisters { + /// calculate next value of the general counter that matches the + /// target (either entirely, or the low 32-bit only depending on + /// the timer mode). + fn update_cmp64(&mut self, cur_tick: u64) { + self.cmp64 = if self.is_32bit_mod() { + let mut result: u64 = cur_tick.deposit(0, 32, self.cmp); + if result < cur_tick { + result += 0x100000000; + } + result + } else { + self.cmp + } + } + const fn is_fsb_route_enabled(&self) -> bool { self.config & (1 << HPET_TN_CFG_FSB_ENABLE_SHIFT) != 0 } @@ -234,17 +260,6 @@ pub struct HPETTimer { qemu_timer: Timer, /// timer block abstraction containing this timer state: NonNull, - - // Hidden register state - /// comparator (extended to counter width) - cmp64: u64, - /// Last value written to comparator - period: u64, - /// timer pop will indicate wrap for one-shot 32-bit - /// mode. Next pop will be actual timer expiration. - wrap_flag: u8, - /// last value armed, to avoid timer storms - last: u64, } // SAFETY: Sync is not automatically derived due to the `state` field, @@ -259,10 +274,6 @@ impl HPETTimer { // is initialized below. qemu_timer: unsafe { Timer::new() }, state: NonNull::new(state.cast_mut()).unwrap(), - cmp64: 0, - period: 0, - wrap_flag: 0, - last: 0, } } @@ -284,22 +295,6 @@ impl HPETTimer { regs.is_timer_int_active(self.index.into()) } - /// calculate next value of the general counter that matches the - /// target (either entirely, or the low 32-bit only depending on - /// the timer mode). - fn calculate_cmp64(&self, regs: &HPETRegisters, cur_tick: u64, target: u64) -> u64 { - let tn_regs = ®s.tn_regs[self.index as usize]; - if tn_regs.is_32bit_mod() { - let mut result: u64 = cur_tick.deposit(0, 32, target); - if result < cur_tick { - result += 0x100000000; - } - result - } else { - target - } - } - fn get_int_route(&self, regs: &HPETRegisters) -> usize { if self.index <= 1 && regs.is_legacy_mode() { // If LegacyReplacement Route bit is set, HPET specification requires @@ -364,35 +359,34 @@ impl HPETTimer { self.set_irq(regs, set); } - fn arm_timer(&mut self, regs: &HPETRegisters, tick: u64) { - let tn_regs = ®s.tn_regs[self.index as usize]; + fn arm_timer(&self, tn_regs: &mut HPETTimerRegisters, tick: u64) { let mut ns = self.get_state().get_ns(tick); // Clamp period to reasonable min value (1 us) - if tn_regs.is_periodic() && ns - self.last < 1000 { - ns = self.last + 1000; + if tn_regs.is_periodic() && ns - tn_regs.last < 1000 { + ns = tn_regs.last + 1000; } - self.last = ns; - self.qemu_timer.modify(self.last); + tn_regs.last = ns; + self.qemu_timer.modify(tn_regs.last); } - fn set_timer(&mut self, regs: &HPETRegisters) { - let tn_regs = ®s.tn_regs[self.index as usize]; + fn set_timer(&self, regs: &mut HPETRegisters) { + let tn_regs = &mut regs.tn_regs[self.index as usize]; let cur_tick: u64 = self.get_state().get_ticks(); - self.wrap_flag = 0; - self.cmp64 = self.calculate_cmp64(regs, cur_tick, tn_regs.cmp); + tn_regs.wrap_flag = 0; + tn_regs.update_cmp64(cur_tick); if tn_regs.is_32bit_mod() { // HPET spec says in one-shot 32-bit mode, generate an interrupt when // counter wraps in addition to an interrupt with comparator match. - if !tn_regs.is_periodic() && self.cmp64 > hpet_next_wrap(cur_tick) { - self.wrap_flag = 1; - self.arm_timer(regs, hpet_next_wrap(cur_tick)); + if !tn_regs.is_periodic() && tn_regs.cmp64 > hpet_next_wrap(cur_tick) { + tn_regs.wrap_flag = 1; + self.arm_timer(tn_regs, hpet_next_wrap(cur_tick)); return; } } - self.arm_timer(regs, self.cmp64); + self.arm_timer(tn_regs, tn_regs.cmp64); } fn del_timer(&self, regs: &mut HPETRegisters) { @@ -431,7 +425,7 @@ impl HPETTimer { } /// Configuration and Capability Register - fn set_tn_cfg_reg(&mut self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { + fn set_tn_cfg_reg(&self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { // Factor out a prepare_tn_cfg_reg_new() to better handle immutable scope. let (new_val, old_val) = self.prepare_tn_cfg_reg_new(regs, shift, len, val); regs.tn_regs[self.index as usize].config = new_val; @@ -445,7 +439,7 @@ impl HPETTimer { let tn_regs = &mut regs.tn_regs[self.index as usize]; if tn_regs.is_32bit_mod() { tn_regs.cmp = u64::from(tn_regs.cmp as u32); // truncate! - self.period = u64::from(self.period as u32); // truncate! + tn_regs.period = u64::from(tn_regs.period as u32); // truncate! } if regs.is_hpet_enabled() { @@ -454,7 +448,7 @@ impl HPETTimer { } /// Comparator Value Register - fn set_tn_cmp_reg(&mut self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { + fn set_tn_cmp_reg(&self, regs: &mut HPETRegisters, shift: u32, len: u32, val: u64) { let tn_regs = &mut regs.tn_regs[self.index as usize]; let mut length = len; let mut value = val; @@ -476,7 +470,7 @@ impl HPETTimer { } if tn_regs.is_periodic() { - self.period = self.period.deposit(shift, length, value); + tn_regs.period = tn_regs.period.deposit(shift, length, value); } tn_regs.clear_valset(); @@ -491,7 +485,7 @@ impl HPETTimer { tn_regs.fsb = tn_regs.fsb.deposit(shift, len, val); } - fn reset(&mut self, regs: &mut HPETRegisters) { + fn reset(&self, regs: &mut HPETRegisters) { self.del_timer(regs); let tn_regs = &mut regs.tn_regs[self.index as usize]; @@ -503,29 +497,28 @@ impl HPETTimer { // advertise availability of ioapic int tn_regs.config |= (u64::from(self.get_state().int_route_cap)) << HPET_TN_CFG_INT_ROUTE_CAP_SHIFT; - self.period = 0; - self.wrap_flag = 0; + tn_regs.period = 0; + tn_regs.wrap_flag = 0; } /// timer expiration callback - fn callback(&mut self, regs: &mut HPETRegisters) { + fn callback(&self, regs: &mut HPETRegisters) { let tn_regs = &mut regs.tn_regs[self.index as usize]; - let period: u64 = self.period; let cur_tick: u64 = self.get_state().get_ticks(); - if tn_regs.is_periodic() && period != 0 { - while hpet_time_after(cur_tick, self.cmp64) { - self.cmp64 += period; + if tn_regs.is_periodic() && tn_regs.period != 0 { + while hpet_time_after(cur_tick, tn_regs.cmp64) { + tn_regs.cmp64 += tn_regs.period; } if tn_regs.is_32bit_mod() { - tn_regs.cmp = u64::from(self.cmp64 as u32); // truncate! + tn_regs.cmp = u64::from(tn_regs.cmp64 as u32); // truncate! } else { - tn_regs.cmp = self.cmp64; + tn_regs.cmp = tn_regs.cmp64; } - self.arm_timer(regs, self.cmp64); - } else if self.wrap_flag != 0 { - self.wrap_flag = 0; - self.arm_timer(regs, self.cmp64); + self.arm_timer(tn_regs, tn_regs.cmp64); + } else if tn_regs.wrap_flag != 0 { + tn_regs.wrap_flag = 0; + self.arm_timer(tn_regs, tn_regs.cmp64); } self.update_irq(regs, true); } @@ -542,7 +535,7 @@ impl HPETTimer { } fn write( - &mut self, + &self, target: TimerRegister, regs: &mut HPETRegisters, value: u64, @@ -691,7 +684,7 @@ impl HPETState { .set(ticks_to_ns(regs.counter) - CLOCK_VIRTUAL.get_ns()); for timer in self.timers.iter().take(self.num_timers) { - let mut t = timer.borrow_mut(); + let t = timer.borrow(); let id = t.index as usize; let tn_regs = ®s.tn_regs[id]; @@ -815,7 +808,7 @@ impl HPETState { fn reset_hold(&self, _type: ResetType) { let mut regs = self.regs.borrow_mut(); for timer in self.timers.iter().take(self.num_timers) { - timer.borrow_mut().reset(&mut regs); + timer.borrow().reset(&mut regs); } regs.counter = 0; @@ -871,7 +864,7 @@ impl HPETState { use DecodedRegister::*; use GlobalRegister::*; (match target { - Timer(timer, tn_target) => timer.borrow_mut().read(tn_target, regs), + Timer(timer, tn_target) => timer.borrow().read(tn_target, regs), Global(CAP) => regs.capability, /* including HPET_PERIOD 0x004 */ Global(CFG) => regs.config, Global(INT_STATUS) => regs.int_status, @@ -903,7 +896,7 @@ impl HPETState { use GlobalRegister::*; match target { Timer(timer, tn_target) => timer - .borrow_mut() + .borrow() .write(tn_target, &mut regs, value, shift, len), Global(CAP) => {} // General Capabilities and ID Register: Read Only Global(CFG) => self.set_cfg_reg(&mut regs, shift, len, value), @@ -929,15 +922,14 @@ impl HPETState { } fn post_load(&self, _version_id: u8) -> Result<(), migration::Infallible> { - let regs = self.regs.borrow(); + let mut regs = self.regs.borrow_mut(); + let cnt = regs.counter; - for timer in self.timers.iter().take(self.num_timers) { - let mut t = timer.borrow_mut(); - let cnt = regs.counter; - let cmp = regs.tn_regs[t.index as usize].cmp; + for index in 0..self.num_timers { + let tn_regs = &mut regs.tn_regs[index]; - t.cmp64 = t.calculate_cmp64(®s, cnt, cmp); - t.last = CLOCK_VIRTUAL.get_ns() - NANOSECONDS_PER_SECOND; + tn_regs.update_cmp64(cnt); + tn_regs.last = CLOCK_VIRTUAL.get_ns() - NANOSECONDS_PER_SECOND; } // Recalculate the offset between the main counter and guest time @@ -1010,6 +1002,8 @@ impl_vmstate_struct!( vmstate_of!(HPETTimerRegisters, config), vmstate_of!(HPETTimerRegisters, cmp), vmstate_of!(HPETTimerRegisters, fsb), + vmstate_of!(HPETTimerRegisters, period), + vmstate_of!(HPETTimerRegisters, wrap_flag), }) .build() ); @@ -1020,9 +1014,6 @@ const VMSTATE_HPET_TIMER: VMStateDescription = .version_id(2) .minimum_version_id(2) .fields(vmstate_fields! { - vmstate_of!(HPETTimer, index), - vmstate_of!(HPETTimer, period), - vmstate_of!(HPETTimer, wrap_flag), vmstate_of!(HPETTimer, qemu_timer), }) .build(); From 56dbc824a25ad50e9ffc8d20b792508999e37710 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 21 Nov 2025 19:56:07 +0100 Subject: [PATCH 063/152] rust/hpet: remove BqlRefCell around HPETTimer HPETTimer now has all of its state stored in HPETRegisters, so it does not need its own BqlRefCell anymore. Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 55 ++++++++++++++++---------------- rust/util/src/timer.rs | 12 ++++--- 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 005e41aec4..0dbfc5b3ba 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -126,7 +126,7 @@ enum DecodedRegister<'a> { Global(GlobalRegister), /// Register in the timer block `0x100`...`0x3ff` - Timer(&'a BqlRefCell, TimerRegister), + Timer(&'a HPETTimer, TimerRegister), /// Invalid address #[allow(dead_code)] @@ -170,8 +170,7 @@ const fn deactivating_bit(old: u64, new: u64, shift: usize) -> bool { (old & mask != 0) && (new & mask == 0) } -fn timer_handler(timer_cell: &BqlRefCell) { - let t = timer_cell.borrow(); +fn timer_handler(t: &HPETTimer) { // SFAETY: state field is valid after timer initialization. let hpet_regs = &unsafe { t.state.as_ref() }.regs; t.callback(&mut hpet_regs.borrow_mut()) @@ -277,12 +276,16 @@ impl HPETTimer { } } - fn init_timer_with_cell(cell: &BqlRefCell) { - let mut timer = cell.borrow_mut(); - // SAFETY: HPETTimer is only used as part of HPETState, which is - // always pinned. - let qemu_timer = unsafe { Pin::new_unchecked(&mut timer.qemu_timer) }; - qemu_timer.init_full(None, CLOCK_VIRTUAL, Timer::NS, 0, timer_handler, cell); + fn init_timer(timer: Pin<&mut Self>) { + Timer::init_full( + timer, + None, + CLOCK_VIRTUAL, + Timer::NS, + 0, + timer_handler, + |t| &mut t.qemu_timer, + ); } fn get_state(&self) -> &HPETState { @@ -619,7 +622,7 @@ pub struct HPETState { /// HPET timer array managed by this timer block. #[doc(alias = "timer")] - timers: [BqlRefCell; HPET_MAX_TIMERS], + timers: [HPETTimer; HPET_MAX_TIMERS], #[property(rename = "timers", default = HPET_MIN_TIMERS)] num_timers: usize, num_timers_save: BqlCell, @@ -662,11 +665,10 @@ impl HPETState { // Initialize in two steps, to avoid calling Timer::init_full on a // temporary that can be moved. - let timer = timer.write(BqlRefCell::new(HPETTimer::new( - index.try_into().unwrap(), - state, - ))); - HPETTimer::init_timer_with_cell(timer); + let timer = timer.write(HPETTimer::new(index.try_into().unwrap(), state)); + // SAFETY: HPETState is pinned + let timer = unsafe { Pin::new_unchecked(timer) }; + HPETTimer::init_timer(timer); } } @@ -683,8 +685,7 @@ impl HPETState { self.hpet_offset .set(ticks_to_ns(regs.counter) - CLOCK_VIRTUAL.get_ns()); - for timer in self.timers.iter().take(self.num_timers) { - let t = timer.borrow(); + for t in self.timers.iter().take(self.num_timers) { let id = t.index as usize; let tn_regs = ®s.tn_regs[id]; @@ -697,8 +698,8 @@ impl HPETState { // Halt main counter and disable interrupt generation. regs.counter = self.get_ticks(); - for timer in self.timers.iter().take(self.num_timers) { - timer.borrow().del_timer(regs); + for t in self.timers.iter().take(self.num_timers) { + t.del_timer(regs); } } @@ -720,9 +721,9 @@ impl HPETState { let new_val = val << shift; let cleared = new_val & regs.int_status; - for (index, timer) in self.timers.iter().take(self.num_timers).enumerate() { - if cleared & (1 << index) != 0 { - timer.borrow().update_irq(regs, false); + for t in self.timers.iter().take(self.num_timers) { + if cleared & (1 << t.index) != 0 { + t.update_irq(regs, false); } } } @@ -807,8 +808,8 @@ impl HPETState { fn reset_hold(&self, _type: ResetType) { let mut regs = self.regs.borrow_mut(); - for timer in self.timers.iter().take(self.num_timers) { - timer.borrow().reset(&mut regs); + for t in self.timers.iter().take(self.num_timers) { + t.reset(&mut regs); } regs.counter = 0; @@ -864,7 +865,7 @@ impl HPETState { use DecodedRegister::*; use GlobalRegister::*; (match target { - Timer(timer, tn_target) => timer.borrow().read(tn_target, regs), + Timer(t, tn_target) => t.read(tn_target, regs), Global(CAP) => regs.capability, /* including HPET_PERIOD 0x004 */ Global(CFG) => regs.config, Global(INT_STATUS) => regs.int_status, @@ -895,9 +896,7 @@ impl HPETState { use DecodedRegister::*; use GlobalRegister::*; match target { - Timer(timer, tn_target) => timer - .borrow() - .write(tn_target, &mut regs, value, shift, len), + Timer(t, tn_target) => t.write(tn_target, &mut regs, value, shift, len), Global(CAP) => {} // General Capabilities and ID Register: Read Only Global(CFG) => self.set_cfg_reg(&mut regs, shift, len, value), Global(INT_STATUS) => self.set_int_status_reg(&mut regs, shift, len, value), diff --git a/rust/util/src/timer.rs b/rust/util/src/timer.rs index c6b3e4088e..829f52d111 100644 --- a/rust/util/src/timer.rs +++ b/rust/util/src/timer.rs @@ -45,14 +45,14 @@ impl Timer { } /// Create a new timer with the given attributes. - pub fn init_full<'timer, 'opaque: 'timer, T, F>( - self: Pin<&'timer mut Self>, + pub fn init_full( + opaque: Pin<&mut T>, timer_list_group: Option<&TimerListGroup>, clk_type: ClockType, scale: u32, attributes: u32, _cb: F, - opaque: &'opaque T, + field: impl FnOnce(&mut T) -> &mut Self, ) where F: for<'a> FnCall<(&'a T,)>, { @@ -70,8 +70,10 @@ impl Timer { // SAFETY: the opaque outlives the timer unsafe { + let opaque = Pin::into_inner_unchecked(opaque); + let timer = field(opaque).as_mut_ptr(); timer_init_full( - self.as_mut_ptr(), + timer, if let Some(g) = timer_list_group { g as *const TimerListGroup as *mut _ } else { @@ -81,7 +83,7 @@ impl Timer { scale as c_int, attributes as c_int, Some(timer_cb), - (opaque as *const T).cast::().cast_mut(), + (opaque as *mut T).cast::(), ) } } From 6660b5a1a8ddb874e5658aaaf3d869942dd20e30 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 21 Nov 2025 18:48:10 +0100 Subject: [PATCH 064/152] rust/hpet: move hpet_offset to HPETRegisters Likewise, do not separate hpet_offset from the other registers. However, because it is migrated in a subsection it is necessary to copy it out of HPETRegisters and into a BqlCell<>. Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 69 ++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 0dbfc5b3ba..41d5c8fea0 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -362,8 +362,9 @@ impl HPETTimer { self.set_irq(regs, set); } - fn arm_timer(&self, tn_regs: &mut HPETTimerRegisters, tick: u64) { - let mut ns = self.get_state().get_ns(tick); + fn arm_timer(&self, regs: &mut HPETRegisters, tick: u64) { + let mut ns = regs.get_ns(tick); + let tn_regs = &mut regs.tn_regs[self.index as usize]; // Clamp period to reasonable min value (1 us) if tn_regs.is_periodic() && ns - tn_regs.last < 1000 { @@ -375,21 +376,22 @@ impl HPETTimer { } fn set_timer(&self, regs: &mut HPETRegisters) { + let cur_tick: u64 = regs.get_ticks(); let tn_regs = &mut regs.tn_regs[self.index as usize]; - let cur_tick: u64 = self.get_state().get_ticks(); tn_regs.wrap_flag = 0; tn_regs.update_cmp64(cur_tick); + + let mut next_tick: u64 = tn_regs.cmp64; if tn_regs.is_32bit_mod() { // HPET spec says in one-shot 32-bit mode, generate an interrupt when // counter wraps in addition to an interrupt with comparator match. if !tn_regs.is_periodic() && tn_regs.cmp64 > hpet_next_wrap(cur_tick) { tn_regs.wrap_flag = 1; - self.arm_timer(tn_regs, hpet_next_wrap(cur_tick)); - return; + next_tick = hpet_next_wrap(cur_tick); } } - self.arm_timer(tn_regs, tn_regs.cmp64); + self.arm_timer(regs, next_tick); } fn del_timer(&self, regs: &mut HPETRegisters) { @@ -506,10 +508,10 @@ impl HPETTimer { /// timer expiration callback fn callback(&self, regs: &mut HPETRegisters) { + let cur_tick: u64 = regs.get_ticks(); let tn_regs = &mut regs.tn_regs[self.index as usize]; - let cur_tick: u64 = self.get_state().get_ticks(); - if tn_regs.is_periodic() && tn_regs.period != 0 { + let next_tick = if tn_regs.is_periodic() && tn_regs.period != 0 { while hpet_time_after(cur_tick, tn_regs.cmp64) { tn_regs.cmp64 += tn_regs.period; } @@ -518,10 +520,16 @@ impl HPETTimer { } else { tn_regs.cmp = tn_regs.cmp64; } - self.arm_timer(tn_regs, tn_regs.cmp64); + Some(tn_regs.cmp64) } else if tn_regs.wrap_flag != 0 { tn_regs.wrap_flag = 0; - self.arm_timer(tn_regs, tn_regs.cmp64); + Some(tn_regs.cmp64) + } else { + None + }; + + if let Some(tick) = next_tick { + self.arm_timer(regs, tick); } self.update_irq(regs, true); } @@ -573,9 +581,20 @@ pub struct HPETRegisters { /// HPET Timer N Registers tn_regs: [HPETTimerRegisters; HPET_MAX_TIMERS], + + /// Offset of main counter relative to qemu clock. + pub hpet_offset: u64, } impl HPETRegisters { + fn get_ticks(&self) -> u64 { + ns_to_ticks(CLOCK_VIRTUAL.get_ns() + self.hpet_offset) + } + + fn get_ns(&self, tick: u64) -> u64 { + ticks_to_ns(tick) - self.hpet_offset + } + fn is_legacy_mode(&self) -> bool { self.config & (1 << HPET_CFG_LEG_RT_SHIFT) != 0 } @@ -603,8 +622,7 @@ pub struct HPETState { #[property(rename = "msi", bit = HPET_FLAG_MSI_SUPPORT_SHIFT, default = false)] flags: u32, - /// Offset of main counter relative to qemu clock. - hpet_offset: BqlCell, + hpet_offset_migration: BqlCell, #[property(rename = "hpet-offset-saved", default = true)] hpet_offset_saved: bool, @@ -636,14 +654,6 @@ impl HPETState { self.flags & (1 << HPET_FLAG_MSI_SUPPORT_SHIFT) != 0 } - fn get_ticks(&self) -> u64 { - ns_to_ticks(CLOCK_VIRTUAL.get_ns() + self.hpet_offset.get()) - } - - fn get_ns(&self, tick: u64) -> u64 { - ticks_to_ns(tick) - self.hpet_offset.get() - } - fn handle_legacy_irq(&self, irq: u32, level: u32) { let regs = self.regs.borrow(); if irq == HPET_LEGACY_PIT_INT { @@ -682,8 +692,7 @@ impl HPETState { if activating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Enable main counter and interrupt generation. - self.hpet_offset - .set(ticks_to_ns(regs.counter) - CLOCK_VIRTUAL.get_ns()); + regs.hpet_offset = ticks_to_ns(regs.counter) - CLOCK_VIRTUAL.get_ns(); for t in self.timers.iter().take(self.num_timers) { let id = t.index as usize; @@ -696,7 +705,7 @@ impl HPETState { } } else if deactivating_bit(old_val, new_val, HPET_CFG_ENABLE_SHIFT) { // Halt main counter and disable interrupt generation. - regs.counter = self.get_ticks(); + regs.counter = regs.get_ticks(); for t in self.timers.iter().take(self.num_timers) { t.del_timer(regs); @@ -763,7 +772,7 @@ impl HPETState { // initialized memory to all zeros - simple types (bool/u32/usize) can // rely on this without explicit initialization. uninit_field_mut!(*this, regs).write(Default::default()); - uninit_field_mut!(*this, hpet_offset).write(Default::default()); + uninit_field_mut!(*this, hpet_offset_migration).write(Default::default()); // Set null_mut for now and post_init() will fill it. uninit_field_mut!(*this, irqs).write(Default::default()); uninit_field_mut!(*this, rtc_irq_level).write(Default::default()); @@ -814,6 +823,7 @@ impl HPETState { regs.counter = 0; regs.config = 0; + regs.hpet_offset = 0; HPETFwConfig::update_hpet_cfg( self.hpet_id.get(), regs.capability as u32, @@ -826,7 +836,6 @@ impl HPETState { drop(regs); self.pit_enabled.set(true); - self.hpet_offset.set(0); // to document that the RTC lowers its output on reset as well self.rtc_irq_level.set(0); @@ -871,7 +880,7 @@ impl HPETState { Global(INT_STATUS) => regs.int_status, Global(COUNTER) => { let cur_tick = if regs.is_hpet_enabled() { - self.get_ticks() + regs.get_ticks() } else { regs.counter }; @@ -907,8 +916,9 @@ impl HPETState { fn pre_save(&self) -> Result<(), migration::Infallible> { let mut regs = self.regs.borrow_mut(); + self.hpet_offset_migration.set(regs.hpet_offset); if regs.is_hpet_enabled() { - regs.counter = self.get_ticks(); + regs.counter = regs.get_ticks(); } /* @@ -933,9 +943,10 @@ impl HPETState { // Recalculate the offset between the main counter and guest time if !self.hpet_offset_saved { - self.hpet_offset + self.hpet_offset_migration .set(ticks_to_ns(regs.counter) - CLOCK_VIRTUAL.get_ns()); } + regs.hpet_offset = self.hpet_offset_migration.get(); Ok(()) } @@ -987,7 +998,7 @@ static VMSTATE_HPET_OFFSET: VMStateDescription = .minimum_version_id(1) .needed(&HPETState::is_offset_needed) .fields(vmstate_fields! { - vmstate_of!(HPETState, hpet_offset), + vmstate_of!(HPETState, hpet_offset_migration), }) .build(); From 709beed426b36e9b1ec524a9d50832023e81e9c4 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 20 Nov 2025 17:20:52 +0100 Subject: [PATCH 065/152] rust: timer: add bindings to timer_mod_ns and timer_expire_time_ns These are needed to implement ToMigrationStateShared for timers, and thus allow including them in Migratable<> structs. Signed-off-by: Paolo Bonzini --- rust/util/src/timer.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/rust/util/src/timer.rs b/rust/util/src/timer.rs index 829f52d111..f8e65c9a0a 100644 --- a/rust/util/src/timer.rs +++ b/rust/util/src/timer.rs @@ -10,7 +10,8 @@ use std::{ use common::{callbacks::FnCall, Opaque}; use crate::bindings::{ - self, qemu_clock_get_ns, timer_del, timer_init_full, timer_mod, QEMUClockType, + self, qemu_clock_get_ns, timer_del, timer_expire_time_ns, timer_init_full, timer_mod, + timer_mod_ns, QEMUClockType, }; /// A safe wrapper around [`bindings::QEMUTimer`]. @@ -88,6 +89,19 @@ impl Timer { } } + pub fn expire_time_ns(&self) -> Option { + // SAFETY: the only way to obtain a Timer safely is via methods that + // take a Pin<&mut Self>, therefore the timer is pinned + let ret = unsafe { timer_expire_time_ns(self.as_ptr()) }; + i64::try_from(ret).ok() + } + + pub fn modify_ns(&self, expire_time: u64) { + // SAFETY: the only way to obtain a Timer safely is via methods that + // take a Pin<&mut Self>, therefore the timer is pinned + unsafe { timer_mod_ns(self.as_mut_ptr(), expire_time.try_into().unwrap()) } + } + pub fn modify(&self, expire_time: u64) { // SAFETY: the only way to obtain a Timer safely is via methods that // take a Pin<&mut Self>, therefore the timer is pinned From 9947bf93515a7818091f02545a4ab370b1cc0d16 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 20 Nov 2025 17:23:29 +0100 Subject: [PATCH 066/152] rust: migration: implement ToMigrationState for Timer Timer is a complex struct, allow adding it to a struct that uses #[derive(ToMigrationState)]; similar to vmstate_timer, only the expiration time has to be preserved. In fact, because it is thread-safe, ToMigrationStateShared can also be implemented without needing a cell or mutex that wraps the timer. Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 1 - rust/migration/src/migratable.rs | 31 +++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 41d5c8fea0..375bea4c96 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -250,7 +250,6 @@ impl HPETTimerRegisters { } /// HPET Timer Abstraction -#[repr(C)] #[derive(Debug)] pub struct HPETTimer { /// timer N index within the timer block (`HPETState`) diff --git a/rust/migration/src/migratable.rs b/rust/migration/src/migratable.rs index 02efe31d72..7748aac2f2 100644 --- a/rust/migration/src/migratable.rs +++ b/rust/migration/src/migratable.rs @@ -140,6 +140,26 @@ macro_rules! impl_for_primitive { impl_for_primitive!(u8, u16, u32, u64, i8, i16, i32, i64, bool); +impl ToMigrationState for util::timer::Timer { + type Migrated = i64; + + fn snapshot_migration_state(&self, target: &mut i64) -> Result<(), InvalidError> { + // SAFETY: as_ptr() is unsafe to ensure that the caller reasons about + // the pinning of the data inside the Opaque<>. Here all we do is + // access a field. + *target = self.expire_time_ns().unwrap_or(-1); + Ok(()) + } + + fn restore_migrated_state_mut( + &mut self, + source: Self::Migrated, + version_id: u8, + ) -> Result<(), InvalidError> { + self.restore_migrated_state(source, version_id) + } +} + impl ToMigrationState for [T; N] where [T::Migrated; N]: Default, @@ -237,6 +257,17 @@ pub trait ToMigrationStateShared: ToMigrationState { ) -> Result<(), InvalidError>; } +impl ToMigrationStateShared for util::timer::Timer { + fn restore_migrated_state(&self, source: i64, _version_id: u8) -> Result<(), InvalidError> { + if source >= 0 { + self.modify_ns(source as u64); + } else { + self.delete(); + } + Ok(()) + } +} + impl ToMigrationStateShared for [T; N] where [T::Migrated; N]: Default, From 0448840adb9280f5c8c35bf01349ac79fcc5c3d0 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 13 Nov 2025 13:19:35 +0800 Subject: [PATCH 067/152] rust/hpet: Apply Migratable<> wrapper and ToMigrationState Before using Mutex<> to protect HPETRegisters, it's necessary to apply Migratable<> wrapper and ToMigrationState first since there's no pre-defined VMState for Mutex<>. In addition, this allows to move data from HPETRegisters' vmstate to HPETTimer's, so as to preserve the original migration format of the C implementation. To do that, HPETTimer is wrapped with Migratable<> as well but the implementation of ToMigrationStateShared is hand-written. Note that even though the HPETRegistersMigration struct is generated by ToMigrationState macro, its VMState still needs to be implemented by hand. Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251113051937.4017675-21-zhao1.liu@intel.com [Added HPETTimer implementation and restored compatible migration format. - Paolo] Reviewed-by: Zhao Liu Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 139 +++++++++++++++++++++++-------- 1 file changed, 102 insertions(+), 37 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index 375bea4c96..a0c122d42b 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -13,7 +13,7 @@ use std::{ use bql::prelude::*; use common::prelude::*; use hwcore::prelude::*; -use migration::{self, prelude::*}; +use migration::{self, prelude::*, ToMigrationStateShared}; use qom::prelude::*; use system::{ bindings::{address_space_memory, address_space_stl_le}, @@ -176,7 +176,6 @@ fn timer_handler(t: &HPETTimer) { t.callback(&mut hpet_regs.borrow_mut()) } -#[repr(C)] #[derive(Debug, Default)] pub struct HPETTimerRegisters { // Memory-mapped, software visible timer registers @@ -563,11 +562,13 @@ impl HPETTimer { } } -#[repr(C)] -#[derive(Default)] +#[derive(Default, ToMigrationState)] pub struct HPETRegisters { // HPET block Registers: Memory-mapped, software visible registers /// General Capabilities and ID Register + /// + /// Constant and therefore not migrated. + #[migration_state(omit)] capability: u64, /// General Configuration Register config: u64, @@ -579,9 +580,15 @@ pub struct HPETRegisters { counter: u64, /// HPET Timer N Registers + /// + /// Migrated as part of `Migratable` + #[migration_state(omit)] tn_regs: [HPETTimerRegisters; HPET_MAX_TIMERS], /// Offset of main counter relative to qemu clock. + /// + /// Migrated as a subsection and therefore snapshotted into [`HPETState`] + #[migration_state(omit)] pub hpet_offset: u64, } @@ -613,7 +620,7 @@ impl HPETRegisters { pub struct HPETState { parent_obj: ParentField, iomem: MemoryRegion, - regs: BqlRefCell, + regs: Migratable>, // Internal state /// Capabilities that QEMU HPET supports. @@ -639,7 +646,7 @@ pub struct HPETState { /// HPET timer array managed by this timer block. #[doc(alias = "timer")] - timers: [HPETTimer; HPET_MAX_TIMERS], + timers: [Migratable; HPET_MAX_TIMERS], #[property(rename = "timers", default = HPET_MIN_TIMERS)] num_timers: usize, num_timers_save: BqlCell, @@ -674,9 +681,12 @@ impl HPETState { // Initialize in two steps, to avoid calling Timer::init_full on a // temporary that can be moved. - let timer = timer.write(HPETTimer::new(index.try_into().unwrap(), state)); + let timer = timer.write(Migratable::new(HPETTimer::new( + index.try_into().unwrap(), + state, + ))); // SAFETY: HPETState is pinned - let timer = unsafe { Pin::new_unchecked(timer) }; + let timer = unsafe { Pin::new_unchecked(&mut **timer) }; HPETTimer::init_timer(timer); } } @@ -1001,47 +1011,102 @@ static VMSTATE_HPET_OFFSET: VMStateDescription = }) .build(); -impl_vmstate_struct!( - HPETTimerRegisters, - VMStateDescriptionBuilder::::new() - .name(c"hpet_timer/regs") +#[derive(Default)] +pub struct HPETTimerMigration { + index: u8, + config: u64, + cmp: u64, + fsb: u64, + period: u64, + wrap_flag: u8, + qemu_timer: i64, +} + +impl ToMigrationState for HPETTimer { + type Migrated = HPETTimerMigration; + + fn snapshot_migration_state( + &self, + target: &mut Self::Migrated, + ) -> Result<(), migration::InvalidError> { + let state = self.get_state(); + let regs = state.regs.borrow_mut(); + let tn_regs = ®s.tn_regs[self.index as usize]; + + target.index = self.index; + target.config = tn_regs.config; + target.cmp = tn_regs.cmp; + target.fsb = tn_regs.fsb; + target.period = tn_regs.period; + target.wrap_flag = tn_regs.wrap_flag; + self.qemu_timer + .snapshot_migration_state(&mut target.qemu_timer)?; + + Ok(()) + } + + fn restore_migrated_state_mut( + &mut self, + source: Self::Migrated, + version_id: u8, + ) -> Result<(), migration::InvalidError> { + self.restore_migrated_state(source, version_id) + } +} + +impl ToMigrationStateShared for HPETTimer { + fn restore_migrated_state( + &self, + source: Self::Migrated, + version_id: u8, + ) -> Result<(), migration::InvalidError> { + let state = self.get_state(); + let mut regs = state.regs.borrow_mut(); + let tn_regs = &mut regs.tn_regs[self.index as usize]; + + tn_regs.config = source.config; + tn_regs.cmp = source.cmp; + tn_regs.fsb = source.fsb; + tn_regs.period = source.period; + tn_regs.wrap_flag = source.wrap_flag; + self.qemu_timer + .restore_migrated_state(source.qemu_timer, version_id)?; + + Ok(()) + } +} + +const VMSTATE_HPET_TIMER: VMStateDescription = + VMStateDescriptionBuilder::::new() + .name(c"hpet_timer") .version_id(1) .minimum_version_id(1) .fields(vmstate_fields! { - vmstate_of!(HPETTimerRegisters, config), - vmstate_of!(HPETTimerRegisters, cmp), - vmstate_of!(HPETTimerRegisters, fsb), - vmstate_of!(HPETTimerRegisters, period), - vmstate_of!(HPETTimerRegisters, wrap_flag), - }) - .build() -); - -const VMSTATE_HPET_TIMER: VMStateDescription = - VMStateDescriptionBuilder::::new() - .name(c"hpet_timer") - .version_id(2) - .minimum_version_id(2) - .fields(vmstate_fields! { - vmstate_of!(HPETTimer, qemu_timer), + vmstate_of!(HPETTimerMigration, index), + vmstate_of!(HPETTimerMigration, config), + vmstate_of!(HPETTimerMigration, cmp), + vmstate_of!(HPETTimerMigration, fsb), + vmstate_of!(HPETTimerMigration, period), + vmstate_of!(HPETTimerMigration, wrap_flag), + vmstate_of!(HPETTimerMigration, qemu_timer), }) .build(); -impl_vmstate_struct!(HPETTimer, VMSTATE_HPET_TIMER); +impl_vmstate_struct!(HPETTimerMigration, VMSTATE_HPET_TIMER); const VALIDATE_TIMERS_NAME: &CStr = c"num_timers must match"; +// HPETRegistersMigration is generated by ToMigrationState macro. impl_vmstate_struct!( - HPETRegisters, - VMStateDescriptionBuilder::::new() + HPETRegistersMigration, + VMStateDescriptionBuilder::::new() .name(c"hpet/regs") .version_id(2) .minimum_version_id(2) .fields(vmstate_fields! { - vmstate_of!(HPETRegisters, config), - vmstate_of!(HPETRegisters, int_status), - vmstate_of!(HPETRegisters, counter), - vmstate_of!(HPETRegisters, tn_regs), + vmstate_of!(HPETRegistersMigration, config), + vmstate_of!(HPETRegistersMigration, int_status), + vmstate_of!(HPETRegistersMigration, counter), }) .build() ); @@ -1049,8 +1114,8 @@ impl_vmstate_struct!( const VMSTATE_HPET: VMStateDescription = VMStateDescriptionBuilder::::new() .name(c"hpet") - .version_id(3) - .minimum_version_id(3) + .version_id(2) + .minimum_version_id(2) .pre_save(&HPETState::pre_save) .post_load(&HPETState::post_load) .fields(vmstate_fields! { From 4536693a722b4a977f696d9d389c9d4f0f6a0653 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 21 Nov 2025 19:40:36 +0100 Subject: [PATCH 068/152] rust/hpet: change wrap_flag to a bool This is more precise, and makes it possible to use bool::then_some(). Signed-off-by: Paolo Bonzini --- rust/hw/timer/hpet/src/device.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/rust/hw/timer/hpet/src/device.rs b/rust/hw/timer/hpet/src/device.rs index a0c122d42b..3166688e4e 100644 --- a/rust/hw/timer/hpet/src/device.rs +++ b/rust/hw/timer/hpet/src/device.rs @@ -193,7 +193,7 @@ pub struct HPETTimerRegisters { period: u64, /// timer pop will indicate wrap for one-shot 32-bit /// mode. Next pop will be actual timer expiration. - wrap_flag: u8, + wrap_flag: bool, /// last value armed, to avoid timer storms last: u64, } @@ -377,7 +377,7 @@ impl HPETTimer { let cur_tick: u64 = regs.get_ticks(); let tn_regs = &mut regs.tn_regs[self.index as usize]; - tn_regs.wrap_flag = 0; + tn_regs.wrap_flag = false; tn_regs.update_cmp64(cur_tick); let mut next_tick: u64 = tn_regs.cmp64; @@ -385,7 +385,7 @@ impl HPETTimer { // HPET spec says in one-shot 32-bit mode, generate an interrupt when // counter wraps in addition to an interrupt with comparator match. if !tn_regs.is_periodic() && tn_regs.cmp64 > hpet_next_wrap(cur_tick) { - tn_regs.wrap_flag = 1; + tn_regs.wrap_flag = true; next_tick = hpet_next_wrap(cur_tick); } } @@ -501,7 +501,7 @@ impl HPETTimer { tn_regs.config |= (u64::from(self.get_state().int_route_cap)) << HPET_TN_CFG_INT_ROUTE_CAP_SHIFT; tn_regs.period = 0; - tn_regs.wrap_flag = 0; + tn_regs.wrap_flag = false; } /// timer expiration callback @@ -519,13 +519,11 @@ impl HPETTimer { tn_regs.cmp = tn_regs.cmp64; } Some(tn_regs.cmp64) - } else if tn_regs.wrap_flag != 0 { - tn_regs.wrap_flag = 0; - Some(tn_regs.cmp64) } else { - None + tn_regs.wrap_flag.then_some(tn_regs.cmp64) }; + tn_regs.wrap_flag = false; if let Some(tick) = next_tick { self.arm_timer(regs, tick); } @@ -1038,7 +1036,7 @@ impl ToMigrationState for HPETTimer { target.cmp = tn_regs.cmp; target.fsb = tn_regs.fsb; target.period = tn_regs.period; - target.wrap_flag = tn_regs.wrap_flag; + target.wrap_flag = u8::from(tn_regs.wrap_flag); self.qemu_timer .snapshot_migration_state(&mut target.qemu_timer)?; @@ -1068,7 +1066,7 @@ impl ToMigrationStateShared for HPETTimer { tn_regs.cmp = source.cmp; tn_regs.fsb = source.fsb; tn_regs.period = source.period; - tn_regs.wrap_flag = source.wrap_flag; + tn_regs.wrap_flag = source.wrap_flag != 0; self.qemu_timer .restore_migrated_state(source.qemu_timer, version_id)?; From cd9fe9265c469f1ad247046e54113f2ede3d6c7c Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Wed, 19 Nov 2025 15:51:59 -0500 Subject: [PATCH 069/152] subprojects: add probe crate The probe crate (https://crates.io/crates/probe) provides a probe!() macro that defines SystemTap SDT probes on Linux hosts or does nothing on other host OSes. This crate will be used to implement DTrace support for Rust. Signed-off-by: Stefan Hajnoczi Link: https://lore.kernel.org/r/20251119205200.173170-4-stefanha@redhat.com Signed-off-by: Paolo Bonzini --- rust/meson.build | 2 ++ scripts/archive-source.sh | 1 + scripts/make-release | 2 +- subprojects/.gitignore | 1 + .../packagefiles/probe-0.5-rs/meson.build | 22 +++++++++++++++++++ subprojects/probe-0.5-rs.wrap | 7 ++++++ 6 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 subprojects/packagefiles/probe-0.5-rs/meson.build create mode 100644 subprojects/probe-0.5-rs.wrap diff --git a/rust/meson.build b/rust/meson.build index 76e10699b3..afbeeeb47a 100644 --- a/rust/meson.build +++ b/rust/meson.build @@ -4,6 +4,7 @@ subproject('bilge-impl-0.2-rs', required: true) subproject('foreign-0.3-rs', required: true) subproject('glib-sys-0.21-rs', required: true) subproject('libc-0.2-rs', required: true) +subproject('probe-0.5-rs', required: true) anyhow_rs = dependency('anyhow-1-rs') bilge_rs = dependency('bilge-0.2-rs') @@ -11,6 +12,7 @@ bilge_impl_rs = dependency('bilge-impl-0.2-rs') foreign_rs = dependency('foreign-0.3-rs') glib_sys_rs = dependency('glib-sys-0.21-rs') libc_rs = dependency('libc-0.2-rs') +probe_rs = dependency('probe-0.5-rs') subproject('proc-macro2-1-rs', required: true) subproject('quote-1-rs', required: true) diff --git a/scripts/archive-source.sh b/scripts/archive-source.sh index 8f97b19a08..a37acab524 100755 --- a/scripts/archive-source.sh +++ b/scripts/archive-source.sh @@ -41,6 +41,7 @@ subprojects=( keycodemapdb libc-0.2-rs libvfio-user + probe-0.5-rs proc-macro-error-1-rs proc-macro-error-attr-1-rs proc-macro2-1-rs diff --git a/scripts/make-release b/scripts/make-release index bc1b43caa2..5f54b0e793 100755 --- a/scripts/make-release +++ b/scripts/make-release @@ -42,7 +42,7 @@ fi SUBPROJECTS="libvfio-user keycodemapdb berkeley-softfloat-3 berkeley-testfloat-3 anyhow-1-rs arbitrary-int-1-rs attrs-0.2-rs bilge-0.2-rs bilge-impl-0.2-rs either-1-rs foreign-0.3-rs itertools-0.11-rs - libc-0.2-rs proc-macro2-1-rs + libc-0.2-rs probe-0.5-rs proc-macro2-1-rs proc-macro-error-1-rs proc-macro-error-attr-1-rs quote-1-rs syn-2-rs unicode-ident-1-rs" diff --git a/subprojects/.gitignore b/subprojects/.gitignore index c00c847837..011ce4dc3b 100644 --- a/subprojects/.gitignore +++ b/subprojects/.gitignore @@ -16,6 +16,7 @@ /glib-sys-* /itertools-* /libc-* +/probe-* /proc-macro-error-* /proc-macro-error-attr-* /proc-macro* diff --git a/subprojects/packagefiles/probe-0.5-rs/meson.build b/subprojects/packagefiles/probe-0.5-rs/meson.build new file mode 100644 index 0000000000..e6ea69533b --- /dev/null +++ b/subprojects/packagefiles/probe-0.5-rs/meson.build @@ -0,0 +1,22 @@ +project('probe-0.5-rs', 'rust', + meson_version: '>=1.5.0', + version: '0.5.2', + license: 'Apache-2.0 OR MIT', + default_options: []) + +_probe_rs = static_library( + 'probe', + files('src/lib.rs'), + gnu_symbol_visibility: 'hidden', + override_options: ['rust_std=2021', 'build.rust_std=2021'], + rust_abi: 'rust', + rust_args: [ + '--cap-lints', 'allow', + ], +) + +probe_deps = declare_dependency( + link_with: _probe_rs, +) + +meson.override_dependency('probe-0.5-rs', probe_deps) diff --git a/subprojects/probe-0.5-rs.wrap b/subprojects/probe-0.5-rs.wrap new file mode 100644 index 0000000000..73229ee1c2 --- /dev/null +++ b/subprojects/probe-0.5-rs.wrap @@ -0,0 +1,7 @@ +[wrap-file] +directory = probe-0.5.2 +source_url = https://crates.io/api/v1/crates/probe/0.5.2/download +source_filename = probe-0.5.2.tar.gz +source_hash = 136558b6e1ebaecc92755d0ffaf9421f519531bed30cc2ad23b22cb00965cc5e +#method = cargo +patch_directory = probe-0.5-rs From 3d508e096b3f3bb230395e2079381a9e5c5d3a0e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 20 Nov 2025 16:00:49 +0100 Subject: [PATCH 070/152] tracetool: add Rust DTrace/SystemTap SDT support Implement DTrace/SystemTap SDT by emitting the following: - The probe crate's probe!() macro is used to emit a DTrace/SystemTap SDT probe. - Every trace event gets a corresponding trace__enabled() -> bool generated function that Rust code can use to avoid expensive computation when a trace event is disabled. This API works for other trace backends too. `#[allow(dead_code)]` additions are necessary for QEMU's dstate in generated trace-.rs files since they are unused by the dtrace backend. `./configure --enable-trace-backends=` can enable multiple backends, so keep it simple and just silence the warning instead of trying to detect the condition when generating the dstate code can be skipped. The tracetool tests are updated. Take a look at tests/tracetool/dtrace.rs to see what the new generated code looks like. Signed-off-by: Stefan Hajnoczi Link: https://lore.kernel.org/r/20251119205200.173170-5-stefanha@redhat.com Signed-off-by: Paolo Bonzini --- rust/Cargo.lock | 6 +++ rust/trace/Cargo.toml | 1 + rust/trace/meson.build | 2 +- rust/trace/src/lib.rs | 4 ++ scripts/tracetool/__init__.py | 1 + scripts/tracetool/backend/dtrace.py | 31 ++++++++++++++ scripts/tracetool/format/rs.py | 27 ++++++++++-- tests/tracetool/dtrace.rs | 64 +++++++++++++++++++++++++++++ tests/tracetool/ftrace.rs | 21 ++++++++++ tests/tracetool/log.rs | 21 ++++++++++ tests/tracetool/simple.rs | 21 ++++++++++ tests/tracetool/syslog.rs | 21 ++++++++++ tests/tracetool/tracetool-test.py | 2 +- 13 files changed, 216 insertions(+), 6 deletions(-) create mode 100644 tests/tracetool/dtrace.rs diff --git a/rust/Cargo.lock b/rust/Cargo.lock index f520597f25..42ae857fe5 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -230,6 +230,10 @@ dependencies = [ "util", ] +[[package]] +name = "probe" +version = "0.5.2" + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -388,6 +392,7 @@ dependencies = [ "migration", "qom", "system", + "trace", "util", ] @@ -430,6 +435,7 @@ name = "trace" version = "0.1.0" dependencies = [ "libc", + "probe", ] [[package]] diff --git a/rust/trace/Cargo.toml b/rust/trace/Cargo.toml index fc81bce580..11e27f8d28 100644 --- a/rust/trace/Cargo.toml +++ b/rust/trace/Cargo.toml @@ -14,6 +14,7 @@ rust-version.workspace = true [dependencies] libc = { workspace = true } +probe = "0.5" [lints] workspace = true diff --git a/rust/trace/meson.build b/rust/trace/meson.build index 1b3498f7fc..0071a49cf7 100644 --- a/rust/trace/meson.build +++ b/rust/trace/meson.build @@ -11,7 +11,7 @@ _trace_rs = static_library( 'trace', # Library name, lib_rs, trace_rs_targets, # List of generated `.rs` custom targets - dependencies: [libc_rs], + dependencies: [libc_rs, probe_rs], ) trace_rs = declare_dependency(link_with: _trace_rs) diff --git a/rust/trace/src/lib.rs b/rust/trace/src/lib.rs index e03bce43c4..c2abe430a5 100644 --- a/rust/trace/src/lib.rs +++ b/rust/trace/src/lib.rs @@ -6,6 +6,9 @@ #[doc(hidden)] /// Re-exported item to avoid adding libc as a dependency everywhere. pub use libc::{syslog, LOG_INFO}; +#[doc(hidden)] +/// Re-exported item to avoid adding probe as a dependency everywhere. +pub use probe::probe; #[macro_export] /// Define the trace-points from the named directory (which should have slashes @@ -21,6 +24,7 @@ macro_rules! include_trace { #[allow( clippy::ptr_as_ptr, clippy::cast_lossless, + clippy::nonminimal_bool, clippy::used_underscore_binding )] mod trace { diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py index 74062d21a7..61ba6f1ba8 100644 --- a/scripts/tracetool/__init__.py +++ b/scripts/tracetool/__init__.py @@ -461,6 +461,7 @@ class Event(object): QEMU_TRACE = "trace_%(name)s" QEMU_TRACE_TCG = QEMU_TRACE + "_tcg" + QEMU_RUST_DSTATE = "trace_%(name)s_enabled" QEMU_DSTATE = "_TRACE_%(NAME)s_DSTATE" QEMU_BACKEND_DSTATE = "TRACE_%(NAME)s_BACKEND_DSTATE" QEMU_EVENT = "_TRACE_%(NAME)s_EVENT" diff --git a/scripts/tracetool/backend/dtrace.py b/scripts/tracetool/backend/dtrace.py index b4af403025..f0b58cc158 100644 --- a/scripts/tracetool/backend/dtrace.py +++ b/scripts/tracetool/backend/dtrace.py @@ -70,3 +70,34 @@ def generate_h(event, group): def generate_h_backend_dstate(event, group): out(' QEMU_%(uppername)s_ENABLED() || \\', uppername=event.name.upper()) + + +def generate_rs_begin(events, group): + out('use std::cell::UnsafeCell;', + '', + 'extern "C" {') + # These are the Rust declarations of the .probes section semaphores + # generated by dtrace(1) in its .o file output. + for e in events: + if 'disable' in e.properties: + continue + out(' #[allow(dead_code)]', + f' static qemu_{e.name}_semaphore: UnsafeCell;') + out('}', + '') + + +def generate_rs(event, group): + args = event.args.rust_call_extern() + if args: + args = ', ' + args + + out(f' ::trace::probe!(qemu, {event.name}{args});') + + +def generate_rs_backend_dstate(event, group): + # Rust does not have access to the __ENABLED() macro from + # the dtrace(1) generated .h file. Use the matching semaphore declarations + # generated by generate_rs_begin() instead. + out(' (unsafe {qemu_%(n)s_semaphore.get().read_volatile()}) != 0 ||', + n=event.name) diff --git a/scripts/tracetool/format/rs.py b/scripts/tracetool/format/rs.py index 32ac4e5977..7d9af7edfe 100644 --- a/scripts/tracetool/format/rs.py +++ b/scripts/tracetool/format/rs.py @@ -24,25 +24,43 @@ def generate(events, backend, group): '#[allow(unused_imports)]', 'use util::bindings;', '', + '#[allow(dead_code)]', '#[inline(always)]', 'fn trace_event_state_is_enabled(dstate: u16) -> bool {', ' (unsafe { trace_events_enabled_count }) != 0 && dstate != 0', '}', '', 'extern "C" {', + ' #[allow(dead_code)]', ' static mut trace_events_enabled_count: u32;', '}',) out('extern "C" {') for e in events: - out(' static mut %s: u16;' % e.api(e.QEMU_DSTATE)) - out('}') + out(' #[allow(dead_code)]', + ' static mut %s: u16;' % e.api(e.QEMU_DSTATE)) + out('}', + '') backend.generate_begin(events, group) for e in events: - out('', + out('#[inline(always)]', + '#[allow(dead_code)]', + 'pub fn %(api)s() -> bool', + '{', + api=e.api(e.QEMU_RUST_DSTATE)) + + if "disable" not in e.properties: + backend.generate_backend_dstate(e, group) + if backend.check_trace_event_get_state: + out(' trace_event_state_is_enabled(unsafe { _%(event_id)s_DSTATE}) ||', + event_id = 'TRACE_' + e.name.upper()) + + out(' false', + '}', + '', '#[inline(always)]', '#[allow(dead_code)]', 'pub fn %(api)s(%(args)s)', @@ -59,6 +77,7 @@ def generate(events, backend, group): api=e.api()) backend.generate(e, group, check_trace_event_get_state=True) out(' }') - out('}') + out('}', + '') backend.generate_end(events, group) diff --git a/tests/tracetool/dtrace.rs b/tests/tracetool/dtrace.rs new file mode 100644 index 0000000000..3490fcb271 --- /dev/null +++ b/tests/tracetool/dtrace.rs @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +// This file is @generated by tracetool, do not edit. + +#[allow(unused_imports)] +use std::ffi::c_char; +#[allow(unused_imports)] +use util::bindings; + +#[allow(dead_code)] +#[inline(always)] +fn trace_event_state_is_enabled(dstate: u16) -> bool { + (unsafe { trace_events_enabled_count }) != 0 && dstate != 0 +} + +extern "C" { + #[allow(dead_code)] + static mut trace_events_enabled_count: u32; +} +extern "C" { + #[allow(dead_code)] + static mut _TRACE_TEST_BLAH_DSTATE: u16; + #[allow(dead_code)] + static mut _TRACE_TEST_WIBBLE_DSTATE: u16; +} + +use std::cell::UnsafeCell; + +extern "C" { + #[allow(dead_code)] + static qemu_test_blah_semaphore: UnsafeCell; + #[allow(dead_code)] + static qemu_test_wibble_semaphore: UnsafeCell; +} + +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_blah_enabled() -> bool +{ + (unsafe {qemu_test_blah_semaphore.get().read_volatile()}) != 0 || + false +} + +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) +{ + ::trace::probe!(qemu, test_blah, _context, _filename.as_ptr()); +} + +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_wibble_enabled() -> bool +{ + (unsafe {qemu_test_wibble_semaphore.get().read_volatile()}) != 0 || + false +} + +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) +{ + ::trace::probe!(qemu, test_wibble, _context, _value); +} + diff --git a/tests/tracetool/ftrace.rs b/tests/tracetool/ftrace.rs index 07b9259cf2..34f6600490 100644 --- a/tests/tracetool/ftrace.rs +++ b/tests/tracetool/ftrace.rs @@ -6,19 +6,31 @@ use std::ffi::c_char; #[allow(unused_imports)] use util::bindings; +#[allow(dead_code)] #[inline(always)] fn trace_event_state_is_enabled(dstate: u16) -> bool { (unsafe { trace_events_enabled_count }) != 0 && dstate != 0 } extern "C" { + #[allow(dead_code)] static mut trace_events_enabled_count: u32; } extern "C" { + #[allow(dead_code)] static mut _TRACE_TEST_BLAH_DSTATE: u16; + #[allow(dead_code)] static mut _TRACE_TEST_WIBBLE_DSTATE: u16; } +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_blah_enabled() -> bool +{ + trace_event_state_is_enabled(unsafe { _TRACE_TEST_BLAH_DSTATE}) || + false +} + #[inline(always)] #[allow(dead_code)] pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) @@ -29,6 +41,14 @@ pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) } } +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_wibble_enabled() -> bool +{ + trace_event_state_is_enabled(unsafe { _TRACE_TEST_WIBBLE_DSTATE}) || + false +} + #[inline(always)] #[allow(dead_code)] pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) @@ -38,3 +58,4 @@ pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) unsafe {bindings::ftrace_write(format_string.as_ptr() as *const c_char, _context /* as *mut () */, _value /* as std::ffi::c_int */);} } } + diff --git a/tests/tracetool/log.rs b/tests/tracetool/log.rs index c191895c8f..770758611d 100644 --- a/tests/tracetool/log.rs +++ b/tests/tracetool/log.rs @@ -6,19 +6,31 @@ use std::ffi::c_char; #[allow(unused_imports)] use util::bindings; +#[allow(dead_code)] #[inline(always)] fn trace_event_state_is_enabled(dstate: u16) -> bool { (unsafe { trace_events_enabled_count }) != 0 && dstate != 0 } extern "C" { + #[allow(dead_code)] static mut trace_events_enabled_count: u32; } extern "C" { + #[allow(dead_code)] static mut _TRACE_TEST_BLAH_DSTATE: u16; + #[allow(dead_code)] static mut _TRACE_TEST_WIBBLE_DSTATE: u16; } +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_blah_enabled() -> bool +{ + trace_event_state_is_enabled(unsafe { _TRACE_TEST_BLAH_DSTATE}) || + false +} + #[inline(always)] #[allow(dead_code)] pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) @@ -31,6 +43,14 @@ pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) } } +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_wibble_enabled() -> bool +{ + trace_event_state_is_enabled(unsafe { _TRACE_TEST_WIBBLE_DSTATE}) || + false +} + #[inline(always)] #[allow(dead_code)] pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) @@ -42,3 +62,4 @@ pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) } } } + diff --git a/tests/tracetool/simple.rs b/tests/tracetool/simple.rs index 9ee39495e3..92f896ef17 100644 --- a/tests/tracetool/simple.rs +++ b/tests/tracetool/simple.rs @@ -6,19 +6,31 @@ use std::ffi::c_char; #[allow(unused_imports)] use util::bindings; +#[allow(dead_code)] #[inline(always)] fn trace_event_state_is_enabled(dstate: u16) -> bool { (unsafe { trace_events_enabled_count }) != 0 && dstate != 0 } extern "C" { + #[allow(dead_code)] static mut trace_events_enabled_count: u32; } extern "C" { + #[allow(dead_code)] static mut _TRACE_TEST_BLAH_DSTATE: u16; + #[allow(dead_code)] static mut _TRACE_TEST_WIBBLE_DSTATE: u16; } +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_blah_enabled() -> bool +{ + trace_event_state_is_enabled(unsafe { _TRACE_TEST_BLAH_DSTATE}) || + false +} + #[inline(always)] #[allow(dead_code)] pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) @@ -29,6 +41,14 @@ pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) } } +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_wibble_enabled() -> bool +{ + trace_event_state_is_enabled(unsafe { _TRACE_TEST_WIBBLE_DSTATE}) || + false +} + #[inline(always)] #[allow(dead_code)] pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) @@ -38,3 +58,4 @@ pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) unsafe { _simple_trace_test_wibble(_context, _value); } } } + diff --git a/tests/tracetool/syslog.rs b/tests/tracetool/syslog.rs index 9d3675a0b5..378d03d34b 100644 --- a/tests/tracetool/syslog.rs +++ b/tests/tracetool/syslog.rs @@ -6,19 +6,31 @@ use std::ffi::c_char; #[allow(unused_imports)] use util::bindings; +#[allow(dead_code)] #[inline(always)] fn trace_event_state_is_enabled(dstate: u16) -> bool { (unsafe { trace_events_enabled_count }) != 0 && dstate != 0 } extern "C" { + #[allow(dead_code)] static mut trace_events_enabled_count: u32; } extern "C" { + #[allow(dead_code)] static mut _TRACE_TEST_BLAH_DSTATE: u16; + #[allow(dead_code)] static mut _TRACE_TEST_WIBBLE_DSTATE: u16; } +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_blah_enabled() -> bool +{ + trace_event_state_is_enabled(unsafe { _TRACE_TEST_BLAH_DSTATE}) || + false +} + #[inline(always)] #[allow(dead_code)] pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) @@ -29,6 +41,14 @@ pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr) } } +#[inline(always)] +#[allow(dead_code)] +pub fn trace_test_wibble_enabled() -> bool +{ + trace_event_state_is_enabled(unsafe { _TRACE_TEST_WIBBLE_DSTATE}) || + false +} + #[inline(always)] #[allow(dead_code)] pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) @@ -38,3 +58,4 @@ pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int) unsafe {::trace::syslog(::trace::LOG_INFO, format_string.as_ptr() as *const c_char, _context /* as *mut () */, _value /* as std::ffi::c_int */);} } } + diff --git a/tests/tracetool/tracetool-test.py b/tests/tracetool/tracetool-test.py index 786083ad7f..30006a9919 100755 --- a/tests/tracetool/tracetool-test.py +++ b/tests/tracetool/tracetool-test.py @@ -14,7 +14,7 @@ def get_formats(backend): "c", "h", ] - if backend in {"ftrace", "log", "simple", "syslog"}: + if backend in {"dtrace", "ftrace", "log", "simple", "syslog"}: formats += ["rs"] if backend == "dtrace": formats += [ From 806108519c3bc215116abe118babf6c8b4894dc1 Mon Sep 17 00:00:00 2001 From: "Dr. David Alan Gilbert" Date: Wed, 3 Dec 2025 13:15:11 +0000 Subject: [PATCH 071/152] qemu-options.hx: Document -M as -machine alias -M is used heavily in documentation and scripts, but isn't actually documented anywhere. Document it as equivalent to -machine, also moving to -machine the sole suboption that was documented under -M. Reported-by: Julian Andres Klode Signed-off-by: Dr. David Alan Gilbert Link: https://lore.kernel.org/r/20251203131511.153460-1-dave@treblig.org Signed-off-by: Paolo Bonzini --- qemu-options.hx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/qemu-options.hx b/qemu-options.hx index fca2b7bc74..ec92723f10 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -44,6 +44,7 @@ DEF("machine", HAS_ARG, QEMU_OPTION_machine, \ #endif " memory-backend='backend-id' specifies explicitly provided backend for main RAM (default=none)\n" " cxl-fmw.0.targets.0=firsttarget,cxl-fmw.0.targets.1=secondtarget,cxl-fmw.0.size=size[,cxl-fmw.0.interleave-granularity=granularity]\n" + " sgx-epc.0.memdev=memid,sgx-epc.0.node=numaid\n" " smp-cache.0.cache=cachename,smp-cache.0.topology=topologylevel\n", QEMU_ARCH_ALL) SRST @@ -179,6 +180,9 @@ SRST -machine cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=128G,cxl-fmw.0.interleave-granularity=512 + ``sgx-epc.0.memdev=@var{memid},sgx-epc.0.node=@var{numaid}`` + Define an SGX EPC section. + ``smp-cache.0.cache=cachename,smp-cache.0.topology=topologylevel`` Define cache properties for SMP system. @@ -208,12 +212,10 @@ SRST ERST DEF("M", HAS_ARG, QEMU_OPTION_M, - " sgx-epc.0.memdev=memid,sgx-epc.0.node=numaid\n", - QEMU_ARCH_ALL) - + "-M as -machine\n", QEMU_ARCH_ALL) SRST -``sgx-epc.0.memdev=@var{memid},sgx-epc.0.node=@var{numaid}`` - Define an SGX EPC section. +``-M`` + as -machine. ERST DEF("cpu", HAS_ARG, QEMU_OPTION_cpu, From d14e7ab95078060529d00dd7551a6709bdf2172b Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:40 +0800 Subject: [PATCH 072/152] i386/cpu: Clean up indent style of x86_ext_save_areas[] The indentation style in `x86_ext_save_areas[]` is extremely inconsistent. Clean it up to ensure a uniform style. Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-2-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 58 +++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index fe52538723..a1de82b92c 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2028,38 +2028,46 @@ ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT] = { .feature = FEAT_1_ECX, .bits = CPUID_EXT_XSAVE, .size = sizeof(X86LegacyXSaveArea) + sizeof(X86XSaveHeader), }, - [XSTATE_YMM_BIT] = - { .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX, - .size = sizeof(XSaveAVX) }, - [XSTATE_BNDREGS_BIT] = - { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, - .size = sizeof(XSaveBNDREG) }, - [XSTATE_BNDCSR_BIT] = - { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, - .size = sizeof(XSaveBNDCSR) }, - [XSTATE_OPMASK_BIT] = - { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, - .size = sizeof(XSaveOpmask) }, - [XSTATE_ZMM_Hi256_BIT] = - { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, - .size = sizeof(XSaveZMM_Hi256) }, - [XSTATE_Hi16_ZMM_BIT] = - { .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, - .size = sizeof(XSaveHi16_ZMM) }, - [XSTATE_PKRU_BIT] = - { .feature = FEAT_7_0_ECX, .bits = CPUID_7_0_ECX_PKU, - .size = sizeof(XSavePKRU) }, + [XSTATE_YMM_BIT] = { + .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX, + .size = sizeof(XSaveAVX), + }, + [XSTATE_BNDREGS_BIT] = { + .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, + .size = sizeof(XSaveBNDREG), + }, + [XSTATE_BNDCSR_BIT] = { + .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, + .size = sizeof(XSaveBNDCSR), + }, + [XSTATE_OPMASK_BIT] = { + .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, + .size = sizeof(XSaveOpmask), + }, + [XSTATE_ZMM_Hi256_BIT] = { + .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, + .size = sizeof(XSaveZMM_Hi256), + }, + [XSTATE_Hi16_ZMM_BIT] = { + .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, + .size = sizeof(XSaveHi16_ZMM), + }, + [XSTATE_PKRU_BIT] = { + .feature = FEAT_7_0_ECX, .bits = CPUID_7_0_ECX_PKU, + .size = sizeof(XSavePKRU), + }, [XSTATE_ARCH_LBR_BIT] = { - .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_ARCH_LBR, - .offset = 0 /*supervisor mode component, offset = 0 */, - .size = sizeof(XSavesArchLBR) }, + .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_ARCH_LBR, + .offset = 0 /*supervisor mode component, offset = 0 */, + .size = sizeof(XSavesArchLBR), + }, [XSTATE_XTILE_CFG_BIT] = { .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_AMX_TILE, .size = sizeof(XSaveXTILECFG), }, [XSTATE_XTILE_DATA_BIT] = { .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_AMX_TILE, - .size = sizeof(XSaveXTILEDATA) + .size = sizeof(XSaveXTILEDATA), }, }; From 44d536df3fed7dce0606b2b8e43ac4fad7f14618 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:41 +0800 Subject: [PATCH 073/152] i386/cpu: Clean up arch lbr xsave struct and comment Arch LBR state is area 15, not 19. Fix this comment. And considerring other areas don't mention user or supervisor state, for consistent style, remove "Supervisor mode" from its comment. Moreover, rename XSavesArchLBR to XSaveArchLBR since there's no need to emphasize XSAVES in naming; the XSAVE related structure is mainly used to represent memory layout. In addition, arch lbr specifies its offset of xsave component as 0. But this cannot help on anything. The offset of ExtSaveArea is initialized by accelerators (e.g., hvf_cpu_xsave_init(), kvm_cpu_xsave_init() and x86_tcg_cpu_xsave_init()), so explicitly setting the offset doesn't work and CPUID 0xD encoding has already ensure supervisor states won't have non-zero offsets. Drop the offset initialization and its comment from the xsave area of arch lbr. Tested-by: Farrah Chen Reviewed-by: Zide Chen Reviewed-by: Xiaoyao Li Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-3-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 3 +-- target/i386/cpu.h | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index a1de82b92c..de4e5c5774 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2058,8 +2058,7 @@ ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT] = { }, [XSTATE_ARCH_LBR_BIT] = { .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_ARCH_LBR, - .offset = 0 /*supervisor mode component, offset = 0 */, - .size = sizeof(XSavesArchLBR), + .size = sizeof(XSaveArchLBR), }, [XSTATE_XTILE_CFG_BIT] = { .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_AMX_TILE, diff --git a/target/i386/cpu.h b/target/i386/cpu.h index cee1f692a1..c95b772719 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1747,15 +1747,15 @@ typedef struct { #define ARCH_LBR_NR_ENTRIES 32 -/* Ext. save area 19: Supervisor mode Arch LBR state */ -typedef struct XSavesArchLBR { +/* Ext. save area 15: Arch LBR state */ +typedef struct XSaveArchLBR { uint64_t lbr_ctl; uint64_t lbr_depth; uint64_t ler_from; uint64_t ler_to; uint64_t ler_info; LBREntry lbr_records[ARCH_LBR_NR_ENTRIES]; -} XSavesArchLBR; +} XSaveArchLBR; QEMU_BUILD_BUG_ON(sizeof(XSaveAVX) != 0x100); QEMU_BUILD_BUG_ON(sizeof(XSaveBNDREG) != 0x40); @@ -1766,7 +1766,7 @@ QEMU_BUILD_BUG_ON(sizeof(XSaveHi16_ZMM) != 0x400); QEMU_BUILD_BUG_ON(sizeof(XSavePKRU) != 0x8); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILECFG) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILEDATA) != 0x2000); -QEMU_BUILD_BUG_ON(sizeof(XSavesArchLBR) != 0x328); +QEMU_BUILD_BUG_ON(sizeof(XSaveArchLBR) != 0x328); typedef struct ExtSaveArea { uint32_t feature, bits; From d625b216a6fad88757234d658ddd0fc4fad72a77 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:42 +0800 Subject: [PATCH 074/152] i386/cpu: Reorganize arch lbr structure definitions - Move ARCH_LBR_NR_ENTRIES macro and LBREntry definition before XSAVE areas definitions. - Reorder XSavesArchLBR (area 15) between XSavePKRU (area 9) and XSaveXTILECFG (area 17), and reorder the related QEMU_BUILD_BUG_ON check to keep the same ordering. This makes xsave structures to be organized together and makes them clearer. Tested-by: Farrah Chen Reviewed-by: Zide Chen Reviewed-by: Xiaoyao Li Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-4-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index c95b772719..a183394eca 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1652,6 +1652,14 @@ typedef struct { #define NB_OPMASK_REGS 8 +typedef struct { + uint64_t from; + uint64_t to; + uint64_t info; +} LBREntry; + +#define ARCH_LBR_NR_ENTRIES 32 + /* CPU can't have 0xFFFFFFFF APIC ID, use that value to distinguish * that APIC ID hasn't been set yet */ @@ -1729,24 +1737,6 @@ typedef struct XSavePKRU { uint32_t padding; } XSavePKRU; -/* Ext. save area 17: AMX XTILECFG state */ -typedef struct XSaveXTILECFG { - uint8_t xtilecfg[64]; -} XSaveXTILECFG; - -/* Ext. save area 18: AMX XTILEDATA state */ -typedef struct XSaveXTILEDATA { - uint8_t xtiledata[8][1024]; -} XSaveXTILEDATA; - -typedef struct { - uint64_t from; - uint64_t to; - uint64_t info; -} LBREntry; - -#define ARCH_LBR_NR_ENTRIES 32 - /* Ext. save area 15: Arch LBR state */ typedef struct XSaveArchLBR { uint64_t lbr_ctl; @@ -1757,6 +1747,16 @@ typedef struct XSaveArchLBR { LBREntry lbr_records[ARCH_LBR_NR_ENTRIES]; } XSaveArchLBR; +/* Ext. save area 17: AMX XTILECFG state */ +typedef struct XSaveXTILECFG { + uint8_t xtilecfg[64]; +} XSaveXTILECFG; + +/* Ext. save area 18: AMX XTILEDATA state */ +typedef struct XSaveXTILEDATA { + uint8_t xtiledata[8][1024]; +} XSaveXTILEDATA; + QEMU_BUILD_BUG_ON(sizeof(XSaveAVX) != 0x100); QEMU_BUILD_BUG_ON(sizeof(XSaveBNDREG) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveBNDCSR) != 0x40); @@ -1764,9 +1764,9 @@ QEMU_BUILD_BUG_ON(sizeof(XSaveOpmask) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveZMM_Hi256) != 0x200); QEMU_BUILD_BUG_ON(sizeof(XSaveHi16_ZMM) != 0x400); QEMU_BUILD_BUG_ON(sizeof(XSavePKRU) != 0x8); +QEMU_BUILD_BUG_ON(sizeof(XSaveArchLBR) != 0x328); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILECFG) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILEDATA) != 0x2000); -QEMU_BUILD_BUG_ON(sizeof(XSaveArchLBR) != 0x328); typedef struct ExtSaveArea { uint32_t feature, bits; From bf9a8bdbc1dbf9e53cb2e04732f2b7b3426916c6 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:43 +0800 Subject: [PATCH 075/152] i386/cpu: Make ExtSaveArea store an array of dependencies Some XSAVE components depend on multiple features. For example, Opmask/ ZMM_Hi256/Hi16_ZMM depend on avx512f OR avx10, and for CET (which will be supported later), cet_u/cet_s will depend on shstk OR ibt. Although previously there's the special check for the dependencies of AVX512F OR AVX10 on their respective XSAVE components (in cpuid_has_xsave_feature()), to make the code more general and avoid adding more special cases, make ExtSaveArea store a features array instead of a single feature, so that it can describe multiple dependencies. Tested-by: Farrah Chen Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-5-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 78 ++++++++++++++++++++++++++++++++++------------- target/i386/cpu.h | 9 +++++- 2 files changed, 65 insertions(+), 22 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index de4e5c5774..367396a216 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2020,53 +2020,77 @@ static const X86RegisterInfo32 x86_reg_info_32[CPU_NB_REGS32] = { ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT] = { [XSTATE_FP_BIT] = { /* x87 FP state component is always enabled if XSAVE is supported */ - .feature = FEAT_1_ECX, .bits = CPUID_EXT_XSAVE, .size = sizeof(X86LegacyXSaveArea) + sizeof(X86XSaveHeader), + .features = { + { FEAT_1_ECX, CPUID_EXT_XSAVE }, + }, }, [XSTATE_SSE_BIT] = { /* SSE state component is always enabled if XSAVE is supported */ - .feature = FEAT_1_ECX, .bits = CPUID_EXT_XSAVE, .size = sizeof(X86LegacyXSaveArea) + sizeof(X86XSaveHeader), + .features = { + { FEAT_1_ECX, CPUID_EXT_XSAVE }, + }, }, [XSTATE_YMM_BIT] = { - .feature = FEAT_1_ECX, .bits = CPUID_EXT_AVX, .size = sizeof(XSaveAVX), + .features = { + { FEAT_1_ECX, CPUID_EXT_AVX }, + }, }, [XSTATE_BNDREGS_BIT] = { - .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, .size = sizeof(XSaveBNDREG), + .features = { + { FEAT_7_0_EBX, CPUID_7_0_EBX_MPX }, + }, }, [XSTATE_BNDCSR_BIT] = { - .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_MPX, .size = sizeof(XSaveBNDCSR), + .features = { + { FEAT_7_0_EBX, CPUID_7_0_EBX_MPX }, + }, }, [XSTATE_OPMASK_BIT] = { - .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, .size = sizeof(XSaveOpmask), + .features = { + { FEAT_7_0_EBX, CPUID_7_0_EBX_AVX512F }, + }, }, [XSTATE_ZMM_Hi256_BIT] = { - .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, .size = sizeof(XSaveZMM_Hi256), + .features = { + { FEAT_7_0_EBX, CPUID_7_0_EBX_AVX512F }, + }, }, [XSTATE_Hi16_ZMM_BIT] = { - .feature = FEAT_7_0_EBX, .bits = CPUID_7_0_EBX_AVX512F, .size = sizeof(XSaveHi16_ZMM), + .features = { + { FEAT_7_0_EBX, CPUID_7_0_EBX_AVX512F }, + }, }, [XSTATE_PKRU_BIT] = { - .feature = FEAT_7_0_ECX, .bits = CPUID_7_0_ECX_PKU, .size = sizeof(XSavePKRU), + .features = { + { FEAT_7_0_ECX, CPUID_7_0_ECX_PKU }, + }, }, [XSTATE_ARCH_LBR_BIT] = { - .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_ARCH_LBR, .size = sizeof(XSaveArchLBR), + .features = { + { FEAT_7_0_EDX, CPUID_7_0_EDX_ARCH_LBR }, + }, }, [XSTATE_XTILE_CFG_BIT] = { - .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_AMX_TILE, .size = sizeof(XSaveXTILECFG), + .features = { + { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_TILE }, + }, }, [XSTATE_XTILE_DATA_BIT] = { - .feature = FEAT_7_0_EDX, .bits = CPUID_7_0_EDX_AMX_TILE, .size = sizeof(XSaveXTILEDATA), + .features = { + { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_TILE }, + }, }, }; @@ -7131,16 +7155,24 @@ static inline void feat2prop(char *s) static const char *x86_cpu_feature_name(FeatureWord w, int bitnr) { const char *name; - /* XSAVE components are automatically enabled by other features, + /* + * XSAVE components are automatically enabled by other features, * so return the original feature name instead */ if (w == FEAT_XSAVE_XCR0_LO || w == FEAT_XSAVE_XCR0_HI) { int comp = (w == FEAT_XSAVE_XCR0_HI) ? bitnr + 32 : bitnr; - if (comp < ARRAY_SIZE(x86_ext_save_areas) && - x86_ext_save_areas[comp].bits) { - w = x86_ext_save_areas[comp].feature; - bitnr = ctz32(x86_ext_save_areas[comp].bits); + if (comp < ARRAY_SIZE(x86_ext_save_areas)) { + /* + * Present the first feature as the default. + * FIXME: select and present the one which is actually enabled + * among multiple dependencies. + */ + const FeatureMask *fm = &x86_ext_save_areas[comp].features[0]; + if (fm->mask) { + w = fm->index; + bitnr = ctz32(fm->mask); + } } } @@ -8610,11 +8642,15 @@ static bool cpuid_has_xsave_feature(CPUX86State *env, const ExtSaveArea *esa) return false; } - if (env->features[esa->feature] & esa->bits) { - return true; + for (int i = 0; i < ARRAY_SIZE(esa->features); i++) { + if (env->features[esa->features[i].index] & esa->features[i].mask) { + return true; + } } - if (esa->feature == FEAT_7_0_EBX && esa->bits == CPUID_7_0_EBX_AVX512F - && (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10)) { + + if (esa->features[0].index == FEAT_7_0_EBX && + esa->features[0].mask == CPUID_7_0_EBX_AVX512F && + (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10)) { return true; } diff --git a/target/i386/cpu.h b/target/i386/cpu.h index a183394eca..3d74afc5a8 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1769,9 +1769,16 @@ QEMU_BUILD_BUG_ON(sizeof(XSaveXTILECFG) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILEDATA) != 0x2000); typedef struct ExtSaveArea { - uint32_t feature, bits; uint32_t offset, size; uint32_t ecx; + /* + * The dependencies in the array work as OR relationships, which + * means having just one of those features is enough. + * + * At most two features are sharing the same xsave area. + * Number of features can be adjusted if necessary. + */ + const FeatureMask features[2]; } ExtSaveArea; #define XSAVE_STATE_AREA_COUNT (XSTATE_XTILE_DATA_BIT + 1) From 9a15846f5632903070d9488d6edcf30bbe39fb25 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:44 +0800 Subject: [PATCH 076/152] i386/cpu: Add avx10 dependency for Opmask/ZMM_Hi256/Hi16_ZMM With feature array in ExtSaveArea, add avx10 as the second dependency for Opmask/ZMM_Hi256/Hi16_ZMM xsave components, and drop the special check in cpuid_has_xsave_feature(). Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-6-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 367396a216..812a215147 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2054,18 +2054,21 @@ ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT] = { .size = sizeof(XSaveOpmask), .features = { { FEAT_7_0_EBX, CPUID_7_0_EBX_AVX512F }, + { FEAT_7_1_EDX, CPUID_7_1_EDX_AVX10 }, }, }, [XSTATE_ZMM_Hi256_BIT] = { .size = sizeof(XSaveZMM_Hi256), .features = { { FEAT_7_0_EBX, CPUID_7_0_EBX_AVX512F }, + { FEAT_7_1_EDX, CPUID_7_1_EDX_AVX10 }, }, }, [XSTATE_Hi16_ZMM_BIT] = { .size = sizeof(XSaveHi16_ZMM), .features = { { FEAT_7_0_EBX, CPUID_7_0_EBX_AVX512F }, + { FEAT_7_1_EDX, CPUID_7_1_EDX_AVX10 }, }, }, [XSTATE_PKRU_BIT] = { @@ -8648,12 +8651,6 @@ static bool cpuid_has_xsave_feature(CPUX86State *env, const ExtSaveArea *esa) } } - if (esa->features[0].index == FEAT_7_0_EBX && - esa->features[0].mask == CPUID_7_0_EBX_AVX512F && - (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10)) { - return true; - } - return false; } From d88caf0954dfc7598a7db27c2cc98937c7ad6ead Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:45 +0800 Subject: [PATCH 077/152] i386/cpu: Use x86_ext_save_areas[] for CPUID.0XD subleaves The x86_ext_save_areas[] is expected to be well initialized by accelerators and its xstate detail information cannot be changed by user. So use x86_ext_save_areas[] to encode CPUID.0XD subleaves directly without other hardcoding & masking. And for arch LBR, KVM fills its xstate in x86_ext_save_areas[] via host_cpuid(). The info obtained this way matches what would be retrieved from x86_cpu_get_supported_cpuid() (since KVM just fills CPUID with the host xstate info directly anyway). So just use the initialized x86_ext_save_areas[] instead of calling x86_cpu_get_supported_cpuid(). Tested-by: Farrah Chen Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-7-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 812a215147..f4c0ae533d 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -8188,20 +8188,17 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, } } else if (count == 0xf && cpu->enable_pmu && (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) { - x86_cpu_get_supported_cpuid(0xD, count, eax, ebx, ecx, edx); + const ExtSaveArea *esa = &x86_ext_save_areas[count]; + + *eax = esa->size; + *ebx = esa->offset; + *ecx = esa->ecx; } else if (count < ARRAY_SIZE(x86_ext_save_areas)) { const ExtSaveArea *esa = &x86_ext_save_areas[count]; - if (x86_cpu_xsave_xcr0_components(cpu) & (1ULL << count)) { - *eax = esa->size; - *ebx = esa->offset; - *ecx = esa->ecx & - (ESA_FEATURE_ALIGN64_MASK | ESA_FEATURE_XFD_MASK); - } else if (x86_cpu_xsave_xss_components(cpu) & (1ULL << count)) { - *eax = esa->size; - *ebx = 0; - *ecx = 1; - } + *eax = esa->size; + *ebx = esa->offset; + *ecx = esa->ecx; } break; } From 7fa483031711b1e977cb7294ce8e8755f5ac761c Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:46 +0800 Subject: [PATCH 078/152] i386/cpu: Reorganize dependency check for arch lbr state The arch lbr state has 2 dependencies: * Arch lbr feature bit (CPUID 0x7.0x0:EDX[bit 19]): This bit also depends on pmu property. Mask it off if pmu is disabled in x86_cpu_expand_features(), so that it is not needed to repeatedly check whether this bit is set as well as pmu is enabled. Note this doesn't need compat option, since even KVM hasn't support arch lbr yet. The supported xstate is constructed based such dependency in cpuid_has_xsave_feature(), so if pmu is disabled and arch lbr bit is masked off, then arch lbr state won't be included in supported xstates. Thus it's safe to drop the check on arch lbr bit in CPUID 0xD encoding. * XSAVES feature bit (CPUID 0xD.0x1.EAX[bit 3]): Arch lbr state is a supervisor state, which requires the XSAVES feature support. Enumerate supported supervisor state based on XSAVES feature bit in x86_cpu_enable_xsave_components(). Then it's safe to drop the check on XSAVES feature support during CPUID 0XD encoding. Suggested-by: Zide Chen Tested-by: Farrah Chen Reviewed-by: Zide Chen Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-8-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index f4c0ae533d..b53467eb99 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -8179,20 +8179,6 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, *ebx = xsave_area_size(xstate, true); *ecx = env->features[FEAT_XSAVE_XSS_LO]; *edx = env->features[FEAT_XSAVE_XSS_HI]; - if (kvm_enabled() && cpu->enable_pmu && - (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR) && - (*eax & CPUID_XSAVE_XSAVES)) { - *ecx |= XSTATE_ARCH_LBR_MASK; - } else { - *ecx &= ~XSTATE_ARCH_LBR_MASK; - } - } else if (count == 0xf && cpu->enable_pmu - && (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) { - const ExtSaveArea *esa = &x86_ext_save_areas[count]; - - *eax = esa->size; - *ebx = esa->offset; - *ecx = esa->ecx; } else if (count < ARRAY_SIZE(x86_ext_save_areas)) { const ExtSaveArea *esa = &x86_ext_save_areas[count]; @@ -8910,6 +8896,12 @@ static void x86_cpu_enable_xsave_components(X86CPU *cpu) mask = 0; for (i = 0; i < ARRAY_SIZE(x86_ext_save_areas); i++) { + /* Skip supervisor states if XSAVES is not supported. */ + if (CPUID_XSTATE_XSS_MASK & (1 << i) && + !(env->features[FEAT_XSAVE] & CPUID_XSAVE_XSAVES)) { + continue; + } + const ExtSaveArea *esa = &x86_ext_save_areas[i]; if (cpuid_has_xsave_feature(env, esa)) { mask |= (1ULL << i); @@ -9027,11 +9019,13 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp) } } - if (!cpu->pdcm_on_even_without_pmu) { + if (!cpu->enable_pmu) { /* PDCM is fixed1 bit for TDX */ - if (!cpu->enable_pmu && !is_tdx_vm()) { + if (!cpu->pdcm_on_even_without_pmu && !is_tdx_vm()) { env->features[FEAT_1_ECX] &= ~CPUID_EXT_PDCM; } + + env->features[FEAT_7_0_EDX] &= ~CPUID_7_0_EDX_ARCH_LBR; } for (i = 0; i < ARRAY_SIZE(feature_dependencies); i++) { From 6f2f0f76d04fe26c549384efd97740ac73455a66 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:47 +0800 Subject: [PATCH 079/152] i386/cpu: Drop pmu check in CPUID 0x1C encoding Since CPUID_7_0_EDX_ARCH_LBR will be masked off if pmu is disabled, there's no need to check CPUID_7_0_EDX_ARCH_LBR feature with pmu. Tested-by: Farrah Chen Reviewed-by: Zide Chen Reviewed-by: Xiaoyao Li Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-9-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index b53467eb99..5ba4d49dc3 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -8273,11 +8273,16 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, } break; } - case 0x1C: - if (cpu->enable_pmu && (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) { - x86_cpu_get_supported_cpuid(0x1C, 0, eax, ebx, ecx, edx); - *edx = 0; + case 0x1C: /* Last Branch Records Information Leaf */ + *eax = 0; + *ebx = 0; + *ecx = 0; + *edx = 0; + if (!(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_ARCH_LBR)) { + break; } + x86_cpu_get_supported_cpuid(0x1C, 0, eax, ebx, ecx, edx); + *edx = 0; /* EDX is reserved. */ break; case 0x1D: { /* AMX TILE, for now hardcoded for Sapphire Rapids*/ From 95a945c61d3d880da643c19a3163628f6b0aafa6 Mon Sep 17 00:00:00 2001 From: Chao Gao Date: Thu, 11 Dec 2025 14:07:48 +0800 Subject: [PATCH 080/152] i386/cpu: Fix supervisor xstate initialization Arch lbr is a supervisor xstate, but its area is not covered in x86_cpu_init_xsave(). Fix it by checking supported xss bitmap. In addition, drop the (uint64_t) type casts for supported_xcr0 since x86_cpu_get_supported_feature_word() returns uint64_t so that the cast is not needed. Then ensure line length is within 90 characters. Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Chao Gao Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-10-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 5ba4d49dc3..e9ef8b992f 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -9711,20 +9711,23 @@ static void x86_cpu_post_initfn(Object *obj) static void x86_cpu_init_xsave(void) { static bool first = true; - uint64_t supported_xcr0; + uint64_t supported_xcr0, supported_xss; int i; if (first) { first = false; supported_xcr0 = - ((uint64_t) x86_cpu_get_supported_feature_word(NULL, FEAT_XSAVE_XCR0_HI) << 32) | + x86_cpu_get_supported_feature_word(NULL, FEAT_XSAVE_XCR0_HI) << 32 | x86_cpu_get_supported_feature_word(NULL, FEAT_XSAVE_XCR0_LO); + supported_xss = + x86_cpu_get_supported_feature_word(NULL, FEAT_XSAVE_XSS_HI) << 32 | + x86_cpu_get_supported_feature_word(NULL, FEAT_XSAVE_XSS_LO); for (i = XSTATE_SSE_BIT + 1; i < XSAVE_STATE_AREA_COUNT; i++) { ExtSaveArea *esa = &x86_ext_save_areas[i]; - if (!(supported_xcr0 & (1 << i))) { + if (!((supported_xcr0 | supported_xss) & (1 << i))) { esa->size = 0; } } From 54fed32ec1a02b9001d72377202702bce0bc8ac5 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:49 +0800 Subject: [PATCH 081/152] i386/cpu: Add missing migratable xsave features Xtile-cfg & xtile-data are both user xstates. Their xstates are cached in X86CPUState, and there's a related vmsd "vmstate_amx_xtile", so that it's safe to mark them as migratable. Arch lbr xstate is a supervisor xstate, and it is save & load by saving & loading related arch lbr MSRs, which are cached in X86CPUState, and there's a related vmsd "vmstate_arch_lbr". So it should be migratable. PT is still unmigratable since KVM disabled it and there's no vmsd and no other emulation/simulation support. Note, though the migratable_flags get fixed, x86_cpu_enable_xsave_components() still overrides supported xstates bitmaps regardless the masking of migratable_flags. This is another issue, and would be fixed in follow-up refactoring. Tested-by: Farrah Chen Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-11-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index e9ef8b992f..8c00a3ad4d 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1484,6 +1484,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { .ecx = 1, .reg = R_ECX, }, + .migratable_flags = XSTATE_ARCH_LBR_MASK, }, [FEAT_XSAVE_XSS_HI] = { .type = CPUID_FEATURE_WORD, @@ -1522,7 +1523,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { .migratable_flags = XSTATE_FP_MASK | XSTATE_SSE_MASK | XSTATE_YMM_MASK | XSTATE_BNDREGS_MASK | XSTATE_BNDCSR_MASK | XSTATE_OPMASK_MASK | XSTATE_ZMM_Hi256_MASK | XSTATE_Hi16_ZMM_MASK | - XSTATE_PKRU_MASK, + XSTATE_PKRU_MASK | XSTATE_XTILE_CFG_MASK | XSTATE_XTILE_DATA_MASK, }, [FEAT_XSAVE_XCR0_HI] = { .type = CPUID_FEATURE_WORD, @@ -2154,8 +2155,13 @@ static uint64_t x86_cpu_get_migratable_flags(X86CPU *cpu, FeatureWord w) for (i = 0; i < 64; i++) { uint64_t f = 1ULL << i; - /* If the feature name is known, it is implicitly considered migratable, - * unless it is explicitly set in unmigratable_flags */ + /* + * If the feature name is known, it is implicitly considered migratable, + * unless it is explicitly set in unmigratable_flags. + * + * TODO: Make the behavior of x86_cpu_enable_xsave_components() align + * with migratable_flags masking. + */ if ((wi->migratable_flags & f) || (wi->feat_names[i] && !(wi->unmigratable_flags & f))) { r |= f; From e46dcef1d06357773a44c5c4c0729e127cbce828 Mon Sep 17 00:00:00 2001 From: Yang Weijiang Date: Thu, 11 Dec 2025 14:07:50 +0800 Subject: [PATCH 082/152] i386/cpu: Enable xsave support for CET states Add CET_U/S bits in xstate area and report support in xstate feature mask. MSR_XSS[bit 11] corresponds to CET user mode states. MSR_XSS[bit 12] corresponds to CET supervisor mode states. CET Shadow Stack(SHSTK) and Indirect Branch Tracking(IBT) features are enumerated via CPUID.(EAX=07H,ECX=0H):ECX[7] and EDX[20] respectively, two features share the same state bits in XSS, so if either of the features is enabled, set CET_U and CET_S bits together. Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Yang Weijiang Co-developed-by: Chao Gao Signed-off-by: Chao Gao Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-12-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 14 ++++++++++++++ target/i386/cpu.h | 26 +++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 8c00a3ad4d..b1bbb099f3 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2078,6 +2078,20 @@ ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT] = { { FEAT_7_0_ECX, CPUID_7_0_ECX_PKU }, }, }, + [XSTATE_CET_U_BIT] = { + .size = sizeof(XSaveCETU), + .features = { + { FEAT_7_0_ECX, CPUID_7_0_ECX_CET_SHSTK }, + { FEAT_7_0_EDX, CPUID_7_0_EDX_CET_IBT }, + }, + }, + [XSTATE_CET_S_BIT] = { + .size = sizeof(XSaveCETS), + .features = { + { FEAT_7_0_ECX, CPUID_7_0_ECX_CET_SHSTK }, + { FEAT_7_0_EDX, CPUID_7_0_EDX_CET_IBT }, + }, + }, [XSTATE_ARCH_LBR_BIT] = { .size = sizeof(XSaveArchLBR), .features = { diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 3d74afc5a8..bc3296a3c6 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -589,6 +589,8 @@ typedef enum X86Seg { #define XSTATE_Hi16_ZMM_BIT 7 #define XSTATE_PT_BIT 8 #define XSTATE_PKRU_BIT 9 +#define XSTATE_CET_U_BIT 11 +#define XSTATE_CET_S_BIT 12 #define XSTATE_ARCH_LBR_BIT 15 #define XSTATE_XTILE_CFG_BIT 17 #define XSTATE_XTILE_DATA_BIT 18 @@ -603,6 +605,8 @@ typedef enum X86Seg { #define XSTATE_Hi16_ZMM_MASK (1ULL << XSTATE_Hi16_ZMM_BIT) #define XSTATE_PT_MASK (1ULL << XSTATE_PT_BIT) #define XSTATE_PKRU_MASK (1ULL << XSTATE_PKRU_BIT) +#define XSTATE_CET_U_MASK (1ULL << XSTATE_CET_U_BIT) +#define XSTATE_CET_S_MASK (1ULL << XSTATE_CET_S_BIT) #define XSTATE_ARCH_LBR_MASK (1ULL << XSTATE_ARCH_LBR_BIT) #define XSTATE_XTILE_CFG_MASK (1ULL << XSTATE_XTILE_CFG_BIT) #define XSTATE_XTILE_DATA_MASK (1ULL << XSTATE_XTILE_DATA_BIT) @@ -625,7 +629,8 @@ typedef enum X86Seg { XSTATE_XTILE_CFG_MASK | XSTATE_XTILE_DATA_MASK) /* CPUID feature bits available in XSS */ -#define CPUID_XSTATE_XSS_MASK (XSTATE_ARCH_LBR_MASK) +#define CPUID_XSTATE_XSS_MASK (XSTATE_ARCH_LBR_MASK | XSTATE_CET_U_MASK | \ + XSTATE_CET_S_MASK) #define CPUID_XSTATE_MASK (CPUID_XSTATE_XCR0_MASK | CPUID_XSTATE_XSS_MASK) @@ -904,6 +909,8 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); #define CPUID_7_0_ECX_WAITPKG (1U << 5) /* Additional AVX-512 Vector Byte Manipulation Instruction */ #define CPUID_7_0_ECX_AVX512_VBMI2 (1U << 6) +/* Control-flow enforcement technology: shadow stack */ +#define CPUID_7_0_ECX_CET_SHSTK (1U << 7) /* Galois Field New Instructions */ #define CPUID_7_0_ECX_GFNI (1U << 8) /* Vector AES Instructions */ @@ -951,6 +958,8 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); #define CPUID_7_0_EDX_TSX_LDTRK (1U << 16) /* Architectural LBRs */ #define CPUID_7_0_EDX_ARCH_LBR (1U << 19) +/* Control-flow enforcement technology: indirect branch tracking */ +#define CPUID_7_0_EDX_CET_IBT (1U << 20) /* AMX_BF16 instruction */ #define CPUID_7_0_EDX_AMX_BF16 (1U << 22) /* AVX512_FP16 instruction */ @@ -1737,6 +1746,19 @@ typedef struct XSavePKRU { uint32_t padding; } XSavePKRU; +/* Ext. save area 11: CET_U state */ +typedef struct XSaveCETU { + uint64_t u_cet; + uint64_t pl3_ssp; +} XSaveCETU; + +/* Ext. save area 12: CET_S state */ +typedef struct XSaveCETS { + uint64_t pl0_ssp; + uint64_t pl1_ssp; + uint64_t pl2_ssp; +} XSaveCETS; + /* Ext. save area 15: Arch LBR state */ typedef struct XSaveArchLBR { uint64_t lbr_ctl; @@ -1764,6 +1786,8 @@ QEMU_BUILD_BUG_ON(sizeof(XSaveOpmask) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveZMM_Hi256) != 0x200); QEMU_BUILD_BUG_ON(sizeof(XSaveHi16_ZMM) != 0x400); QEMU_BUILD_BUG_ON(sizeof(XSavePKRU) != 0x8); +QEMU_BUILD_BUG_ON(sizeof(XSaveCETU) != 0x10); +QEMU_BUILD_BUG_ON(sizeof(XSaveCETS) != 0x18); QEMU_BUILD_BUG_ON(sizeof(XSaveArchLBR) != 0x328); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILECFG) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILEDATA) != 0x2000); From ad88fb1bd5ffb59d6ef4f0c8919760759665386c Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:51 +0800 Subject: [PATCH 083/152] i386/cpu: Add CET support in CR4 CR4.CET bit (bit 23) is as master enable for CET. Check and adjust CR4.CET bit based on CET CPUIDs. Tested-by: Farrah Chen Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-13-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 9 +++++++-- target/i386/helper.c | 12 ++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index bc3296a3c6..a1ff2ceb0c 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -257,6 +257,7 @@ typedef enum X86Seg { #define CR4_SMEP_MASK (1U << 20) #define CR4_SMAP_MASK (1U << 21) #define CR4_PKE_MASK (1U << 22) +#define CR4_CET_MASK (1U << 23) #define CR4_PKS_MASK (1U << 24) #define CR4_LAM_SUP_MASK (1U << 28) @@ -273,8 +274,8 @@ typedef enum X86Seg { | CR4_OSFXSR_MASK | CR4_OSXMMEXCPT_MASK | CR4_UMIP_MASK \ | CR4_LA57_MASK \ | CR4_FSGSBASE_MASK | CR4_PCIDE_MASK | CR4_OSXSAVE_MASK \ - | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_MASK \ - | CR4_LAM_SUP_MASK | CR4_FRED_MASK)) + | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_CET_MASK \ + | CR4_PKS_MASK | CR4_LAM_SUP_MASK | CR4_FRED_MASK)) #define DR6_BD (1 << 13) #define DR6_BS (1 << 14) @@ -2948,6 +2949,10 @@ static inline uint64_t cr4_reserved_bits(CPUX86State *env) if (!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED)) { reserved_bits |= CR4_FRED_MASK; } + if (!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK) && + !(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_CET_IBT)) { + reserved_bits |= CR4_CET_MASK; + } return reserved_bits; } diff --git a/target/i386/helper.c b/target/i386/helper.c index 72b2e195a3..3f179c6c11 100644 --- a/target/i386/helper.c +++ b/target/i386/helper.c @@ -232,6 +232,18 @@ void cpu_x86_update_cr4(CPUX86State *env, uint32_t new_cr4) new_cr4 &= ~CR4_LAM_SUP_MASK; } + /* + * In fact, "CR4.CET can be set only if CR0.WP is set, and it must be + * clear before CR0.WP can be cleared". However, here we only check + * CR4.CET based on the supported CPUID CET bit, without checking the + * dependency on CR4.WP - the latter need to be determined by the + * underlying accelerators. + */ + if (!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK) && + !(env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_CET_IBT)) { + new_cr4 &= ~CR4_CET_MASK; + } + env->cr[4] = new_cr4; env->hflags = hflags; From 0fa1025904fd1c4e5eac345ddeb8285d78b0a01d Mon Sep 17 00:00:00 2001 From: "Xin Li (Intel)" Date: Thu, 11 Dec 2025 14:07:52 +0800 Subject: [PATCH 084/152] i386/cpu: Save/restore SSP0 MSR for FRED Both FRED and CET shadow stack define the MSR MSR_IA32_PL0_SSP (aka MSR_IA32_FRED_SSP0 in FRED spec). MSR_IA32_PL0_SSP is a FRED SSP MSR, so that if a processor doesn't support CET shadow stack, FRED transitions won't use MSR_IA32_PL0_SSP, but this MSR would still be accessible using MSR-access instructions (e.g., RDMSR, WRMSR). Therefore, save/restore SSP0 MSR for FRED. Tested-by: Farrah Chen Signed-off-by: Xin Li (Intel) Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-14-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 6 ++++++ target/i386/kvm/kvm.c | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index a1ff2ceb0c..84e5cf0ab0 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -554,6 +554,9 @@ typedef enum X86Seg { #define MSR_IA32_FRED_SSP3 0x000001d3 /* Stack level 3 shadow stack pointer in ring 0 */ #define MSR_IA32_FRED_CONFIG 0x000001d4 /* FRED Entrypoint and interrupt stack level */ +/* FRED and CET MSR */ +#define MSR_IA32_PL0_SSP 0x000006a4 /* ring-0 shadow stack pointer (aka MSR_IA32_FRED_SSP0 for FRED) */ + #define MSR_IA32_BNDCFGS 0x00000d90 #define MSR_IA32_XSS 0x00000da0 #define MSR_IA32_UMWAIT_CONTROL 0xe1 @@ -1970,6 +1973,9 @@ typedef struct CPUArchState { uint64_t fred_config; #endif + /* MSR used for both FRED and CET (SHSTK) */ + uint64_t pl0_ssp; + uint64_t tsc_adjust; uint64_t tsc_deadline; uint64_t tsc_aux; diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index e98da47a45..5b8c7550a1 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -4009,6 +4009,11 @@ static int kvm_put_msrs(X86CPU *cpu, KvmPutState level) kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP2, env->fred_ssp2); kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP3, env->fred_ssp3); kvm_msr_entry_add(cpu, MSR_IA32_FRED_CONFIG, env->fred_config); + /* + * Aka MSR_IA32_FRED_SSP0. This MSR is accessible even if + * CET shadow stack is not supported. + */ + kvm_msr_entry_add(cpu, MSR_IA32_PL0_SSP, env->pl0_ssp); } } #endif @@ -4496,6 +4501,11 @@ static int kvm_get_msrs(X86CPU *cpu) kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP2, 0); kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP3, 0); kvm_msr_entry_add(cpu, MSR_IA32_FRED_CONFIG, 0); + /* + * Aka MSR_IA32_FRED_SSP0. This MSR is accessible even if + * CET shadow stack is not supported. + */ + kvm_msr_entry_add(cpu, MSR_IA32_PL0_SSP, 0); } } #endif @@ -4747,6 +4757,9 @@ static int kvm_get_msrs(X86CPU *cpu) case MSR_IA32_FRED_CONFIG: env->fred_config = msrs[i].data; break; + case MSR_IA32_PL0_SSP: /* aka MSR_IA32_FRED_SSP0 */ + env->pl0_ssp = msrs[i].data; + break; #endif case MSR_IA32_TSC: env->tsc = msrs[i].data; From b6f85c5e4527a2b2973f27001dcb659eea1d6574 Mon Sep 17 00:00:00 2001 From: Yang Weijiang Date: Thu, 11 Dec 2025 14:07:53 +0800 Subject: [PATCH 085/152] i386/kvm: Add save/restore support for CET MSRs CET (architectural) MSRs include: MSR_IA32_U_CET - user mode CET control bits. MSR_IA32_S_CET - supervisor mode CET control bits. MSR_IA32_PL{0,1,2,3}_SSP - linear addresses of SSPs for user/kernel modes. MSR_IA32_INT_SSP_TAB - linear address of interrupt SSP table Since FRED also needs to save/restore MSR_IA32_PL0_SSP, to avoid duplicate operations, make FRED only save/restore MSR_IA32_PL0_SSP when CET-SHSTK is not enumerated. And considerring MSR_IA32_SSP_TBL_ADDR is only presented on 64 bit processor, wrap it with TARGET_X86_64 macro. For other MSRs, add save/restore support directly. Tested-by: Farrah Chen Suggested-by: Xin Li (Intel) Signed-off-by: Yang Weijiang Co-developed-by: Chao Gao Signed-off-by: Chao Gao Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-15-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 26 ++++++++++--- target/i386/kvm/kvm.c | 91 ++++++++++++++++++++++++++++++++++++------- 2 files changed, 98 insertions(+), 19 deletions(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 84e5cf0ab0..37cc218bf3 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -543,7 +543,7 @@ typedef enum X86Seg { #define MSR_IA32_XFD 0x000001c4 #define MSR_IA32_XFD_ERR 0x000001c5 -/* FRED MSRs */ +/* FRED MSRs (MSR_IA32_FRED_SSP0 is defined as MSR_IA32_PL0_SSP in CET MSRs) */ #define MSR_IA32_FRED_RSP0 0x000001cc /* Stack level 0 regular stack pointer */ #define MSR_IA32_FRED_RSP1 0x000001cd /* Stack level 1 regular stack pointer */ #define MSR_IA32_FRED_RSP2 0x000001ce /* Stack level 2 regular stack pointer */ @@ -554,9 +554,6 @@ typedef enum X86Seg { #define MSR_IA32_FRED_SSP3 0x000001d3 /* Stack level 3 shadow stack pointer in ring 0 */ #define MSR_IA32_FRED_CONFIG 0x000001d4 /* FRED Entrypoint and interrupt stack level */ -/* FRED and CET MSR */ -#define MSR_IA32_PL0_SSP 0x000006a4 /* ring-0 shadow stack pointer (aka MSR_IA32_FRED_SSP0 for FRED) */ - #define MSR_IA32_BNDCFGS 0x00000d90 #define MSR_IA32_XSS 0x00000da0 #define MSR_IA32_UMWAIT_CONTROL 0xe1 @@ -583,6 +580,15 @@ typedef enum X86Seg { #define MSR_APIC_START 0x00000800 #define MSR_APIC_END 0x000008ff +/* CET MSRs */ +#define MSR_IA32_U_CET 0x000006a0 /* user mode cet */ +#define MSR_IA32_S_CET 0x000006a2 /* kernel mode cet */ +#define MSR_IA32_PL0_SSP 0x000006a4 /* ring-0 shadow stack pointer */ +#define MSR_IA32_PL1_SSP 0x000006a5 /* ring-1 shadow stack pointer */ +#define MSR_IA32_PL2_SSP 0x000006a6 /* ring-2 shadow stack pointer */ +#define MSR_IA32_PL3_SSP 0x000006a7 /* ring-3 shadow stack pointer */ +#define MSR_IA32_INT_SSP_TAB 0x000006a8 /* exception shadow stack table */ + #define XSTATE_FP_BIT 0 #define XSTATE_SSE_BIT 1 #define XSTATE_YMM_BIT 2 @@ -1973,8 +1979,16 @@ typedef struct CPUArchState { uint64_t fred_config; #endif - /* MSR used for both FRED and CET (SHSTK) */ - uint64_t pl0_ssp; + /* CET MSRs */ + uint64_t u_cet; + uint64_t s_cet; + uint64_t pl0_ssp; /* also used for FRED */ + uint64_t pl1_ssp; + uint64_t pl2_ssp; + uint64_t pl3_ssp; +#ifdef TARGET_X86_64 + uint64_t int_ssp_table; +#endif uint64_t tsc_adjust; uint64_t tsc_deadline; diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 5b8c7550a1..e1a1f0ce9e 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -4009,11 +4009,14 @@ static int kvm_put_msrs(X86CPU *cpu, KvmPutState level) kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP2, env->fred_ssp2); kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP3, env->fred_ssp3); kvm_msr_entry_add(cpu, MSR_IA32_FRED_CONFIG, env->fred_config); - /* - * Aka MSR_IA32_FRED_SSP0. This MSR is accessible even if - * CET shadow stack is not supported. - */ - kvm_msr_entry_add(cpu, MSR_IA32_PL0_SSP, env->pl0_ssp); + + if (!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK)) { + /* + * Aka MSR_IA32_FRED_SSP0. This MSR is accessible even if + * CET shadow stack is not supported. + */ + kvm_msr_entry_add(cpu, MSR_IA32_PL0_SSP, env->pl0_ssp); + } } } #endif @@ -4267,6 +4270,26 @@ static int kvm_put_msrs(X86CPU *cpu, KvmPutState level) } } + if (env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK || + env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_CET_IBT) { + kvm_msr_entry_add(cpu, MSR_IA32_U_CET, env->u_cet); + kvm_msr_entry_add(cpu, MSR_IA32_S_CET, env->s_cet); + + if (env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK) { + kvm_msr_entry_add(cpu, MSR_IA32_PL0_SSP, env->pl0_ssp); + kvm_msr_entry_add(cpu, MSR_IA32_PL1_SSP, env->pl1_ssp); + kvm_msr_entry_add(cpu, MSR_IA32_PL2_SSP, env->pl2_ssp); + kvm_msr_entry_add(cpu, MSR_IA32_PL3_SSP, env->pl3_ssp); + +#ifdef TARGET_X86_64 + if (lm_capable_kernel) { + kvm_msr_entry_add(cpu, MSR_IA32_INT_SSP_TAB, + env->int_ssp_table); + } +#endif + } + } + return kvm_buf_set_msrs(cpu); } @@ -4501,11 +4524,14 @@ static int kvm_get_msrs(X86CPU *cpu) kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP2, 0); kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP3, 0); kvm_msr_entry_add(cpu, MSR_IA32_FRED_CONFIG, 0); - /* - * Aka MSR_IA32_FRED_SSP0. This MSR is accessible even if - * CET shadow stack is not supported. - */ - kvm_msr_entry_add(cpu, MSR_IA32_PL0_SSP, 0); + + if (!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK)) { + /* + * Aka MSR_IA32_FRED_SSP0. This MSR is accessible even if + * CET shadow stack is not supported. + */ + kvm_msr_entry_add(cpu, MSR_IA32_PL0_SSP, 0); + } } } #endif @@ -4663,6 +4689,25 @@ static int kvm_get_msrs(X86CPU *cpu) } } + if (env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK || + env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_CET_IBT) { + kvm_msr_entry_add(cpu, MSR_IA32_U_CET, 0); + kvm_msr_entry_add(cpu, MSR_IA32_S_CET, 0); + + if (env->features[FEAT_7_0_EDX] & CPUID_7_0_ECX_CET_SHSTK) { + kvm_msr_entry_add(cpu, MSR_IA32_PL0_SSP, 0); + kvm_msr_entry_add(cpu, MSR_IA32_PL1_SSP, 0); + kvm_msr_entry_add(cpu, MSR_IA32_PL2_SSP, 0); + kvm_msr_entry_add(cpu, MSR_IA32_PL3_SSP, 0); + +#ifdef TARGET_X86_64 + if (lm_capable_kernel) { + kvm_msr_entry_add(cpu, MSR_IA32_INT_SSP_TAB, 0); + } +#endif + } + } + ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_MSRS, cpu->kvm_msr_buf); if (ret < 0) { return ret; @@ -4757,9 +4802,6 @@ static int kvm_get_msrs(X86CPU *cpu) case MSR_IA32_FRED_CONFIG: env->fred_config = msrs[i].data; break; - case MSR_IA32_PL0_SSP: /* aka MSR_IA32_FRED_SSP0 */ - env->pl0_ssp = msrs[i].data; - break; #endif case MSR_IA32_TSC: env->tsc = msrs[i].data; @@ -5013,6 +5055,29 @@ static int kvm_get_msrs(X86CPU *cpu) case MSR_ARCH_LBR_INFO_0 ... MSR_ARCH_LBR_INFO_0 + 31: env->lbr_records[index - MSR_ARCH_LBR_INFO_0].info = msrs[i].data; break; + case MSR_IA32_U_CET: + env->u_cet = msrs[i].data; + break; + case MSR_IA32_S_CET: + env->s_cet = msrs[i].data; + break; + case MSR_IA32_PL0_SSP: /* aka MSR_IA32_FRED_SSP0 */ + env->pl0_ssp = msrs[i].data; + break; + case MSR_IA32_PL1_SSP: + env->pl1_ssp = msrs[i].data; + break; + case MSR_IA32_PL2_SSP: + env->pl2_ssp = msrs[i].data; + break; + case MSR_IA32_PL3_SSP: + env->pl3_ssp = msrs[i].data; + break; +#ifdef TARGET_X86_64 + case MSR_IA32_INT_SSP_TAB: + env->int_ssp_table = msrs[i].data; + break; +#endif case MSR_K7_HWCR: env->msr_hwcr = msrs[i].data; break; From b775eff300f4f942d95b3455508ef170a5badd30 Mon Sep 17 00:00:00 2001 From: Yang Weijiang Date: Thu, 11 Dec 2025 14:07:54 +0800 Subject: [PATCH 086/152] i386/kvm: Add save/restore support for KVM_REG_GUEST_SSP CET provides a new architectural register, shadow stack pointer (SSP), which cannot be directly encoded as a source, destination or memory operand in instructions. But Intel VMCS & VMCB provide fields to save/load guest & host's ssp. It's necessary to save & restore Guest's ssp before & after migration. To support this, KVM implements Guest's SSP as a special KVM internal register - KVM_REG_GUEST_SSP, and allows QEMU to save & load it via KVM_GET_ONE_REG/KVM_SET_ONE_REG. Cache KVM_REG_GUEST_SSP in X86CPUState. Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Yang Weijiang Co-developed-by: Chao Gao Signed-off-by: Chao Gao Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-16-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 3 ++- target/i386/kvm/kvm.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 37cc218bf3..458775daaa 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1979,7 +1979,7 @@ typedef struct CPUArchState { uint64_t fred_config; #endif - /* CET MSRs */ + /* CET MSRs and register */ uint64_t u_cet; uint64_t s_cet; uint64_t pl0_ssp; /* also used for FRED */ @@ -1989,6 +1989,7 @@ typedef struct CPUArchState { #ifdef TARGET_X86_64 uint64_t int_ssp_table; #endif + uint64_t guest_ssp; uint64_t tsc_adjust; uint64_t tsc_deadline; diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index e1a1f0ce9e..7b9b740a8e 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -4293,6 +4293,35 @@ static int kvm_put_msrs(X86CPU *cpu, KvmPutState level) return kvm_buf_set_msrs(cpu); } +static int kvm_put_kvm_regs(X86CPU *cpu) +{ + CPUX86State *env = &cpu->env; + int ret; + + if ((env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK)) { + ret = kvm_set_one_reg(CPU(cpu), KVM_X86_REG_KVM(KVM_REG_GUEST_SSP), + &env->guest_ssp); + if (ret) { + return ret; + } + } + return 0; +} + +static int kvm_get_kvm_regs(X86CPU *cpu) +{ + CPUX86State *env = &cpu->env; + int ret; + + if ((env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK)) { + ret = kvm_get_one_reg(CPU(cpu), KVM_X86_REG_KVM(KVM_REG_GUEST_SSP), + &env->guest_ssp); + if (ret) { + return ret; + } + } + return 0; +} static int kvm_get_xsave(X86CPU *cpu) { @@ -5446,6 +5475,11 @@ int kvm_arch_put_registers(CPUState *cpu, KvmPutState level, Error **errp) error_setg_errno(errp, -ret, "Failed to set MSRs"); return ret; } + ret = kvm_put_kvm_regs(x86_cpu); + if (ret < 0) { + error_setg_errno(errp, -ret, "Failed to set KVM type registers"); + return ret; + } ret = kvm_put_vcpu_events(x86_cpu, level); if (ret < 0) { error_setg_errno(errp, -ret, "Failed to set vCPU events"); @@ -5518,6 +5552,11 @@ int kvm_arch_get_registers(CPUState *cs, Error **errp) error_setg_errno(errp, -ret, "Failed to get MSRs"); goto out; } + ret = kvm_get_kvm_regs(cpu); + if (ret < 0) { + error_setg_errno(errp, -ret, "Failed to get KVM type registers"); + goto out; + } ret = kvm_get_apic(cpu); if (ret < 0) { error_setg_errno(errp, -ret, "Failed to get APIC"); From a5b163fa221df678168f0a065f178cc79b63971d Mon Sep 17 00:00:00 2001 From: "Xin Li (Intel)" Date: Thu, 11 Dec 2025 14:07:55 +0800 Subject: [PATCH 087/152] i386/cpu: Migrate MSR_IA32_PL0_SSP for FRED and CET-SHSTK Both FRED and CET-SHSTK need MSR_IA32_PL0_SSP, so add the vmstate for this MSR. When CET-SHSTK is not supported, MSR_IA32_PL0_SSP keeps accessible, but its value doesn't take effect. Therefore, treat this vmstate as a subsection rather than a fix for the previous FRED vmstate. Tested-by: Farrah Chen Signed-off-by: Xin Li (Intel) Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-17-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/machine.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/target/i386/machine.c b/target/i386/machine.c index 45b7cea80a..bf13f7f0f6 100644 --- a/target/i386/machine.c +++ b/target/i386/machine.c @@ -1668,6 +1668,28 @@ static const VMStateDescription vmstate_triple_fault = { } }; +static bool pl0_ssp_needed(void *opaque) +{ + X86CPU *cpu = opaque; + + /* + * CPUID_7_1_EAX_FRED and CPUID_7_0_ECX_CET_SHSTK are checked because + * if all of these bits are zero and the MSR will not be settable. + */ + return !!(cpu->env.pl0_ssp); +} + +static const VMStateDescription vmstate_pl0_ssp = { + .name = "cpu/msr_pl0_ssp", + .version_id = 1, + .minimum_version_id = 1, + .needed = pl0_ssp_needed, + .fields = (const VMStateField[]) { + VMSTATE_UINT64(env.pl0_ssp, X86CPU), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_x86_cpu = { .name = "cpu", .version_id = 12, @@ -1817,6 +1839,7 @@ const VMStateDescription vmstate_x86_cpu = { #endif &vmstate_arch_lbr, &vmstate_triple_fault, + &vmstate_pl0_ssp, NULL } }; From 93608c99bdeb31cee47a7c499cc491873bd3cbbc Mon Sep 17 00:00:00 2001 From: Yang Weijiang Date: Thu, 11 Dec 2025 14:07:56 +0800 Subject: [PATCH 088/152] i386/machine: Add vmstate for cet-shstk and cet-ibt Add vmstates for cet-shstk and cet-ibt Tested-by: Farrah Chen Signed-off-by: Yang Weijiang Co-developed-by: Chao Gao Signed-off-by: Chao Gao Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-18-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/machine.c | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/target/i386/machine.c b/target/i386/machine.c index bf13f7f0f6..57a968c30d 100644 --- a/target/i386/machine.c +++ b/target/i386/machine.c @@ -1690,6 +1690,57 @@ static const VMStateDescription vmstate_pl0_ssp = { } }; +static bool shstk_needed(void *opaque) +{ + X86CPU *cpu = opaque; + CPUX86State *env = &cpu->env; + + return !!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK); +} + +static const VMStateDescription vmstate_shstk = { + .name = "cpu/cet_shstk", + .version_id = 1, + .minimum_version_id = 1, + .needed = shstk_needed, + .fields = (VMStateField[]) { + /* pl0_ssp has been covered by vmstate_pl0_ssp. */ + VMSTATE_UINT64(env.pl1_ssp, X86CPU), + VMSTATE_UINT64(env.pl2_ssp, X86CPU), + VMSTATE_UINT64(env.pl3_ssp, X86CPU), +#ifdef TARGET_X86_64 + VMSTATE_UINT64(env.int_ssp_table, X86CPU), +#endif + VMSTATE_UINT64(env.guest_ssp, X86CPU), + VMSTATE_END_OF_LIST() + } +}; + +static bool cet_needed(void *opaque) +{ + X86CPU *cpu = opaque; + CPUX86State *env = &cpu->env; + + return !!((env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_CET_SHSTK) || + (env->features[FEAT_7_0_EDX] & CPUID_7_0_EDX_CET_IBT)); +} + +static const VMStateDescription vmstate_cet = { + .name = "cpu/cet", + .version_id = 1, + .minimum_version_id = 1, + .needed = cet_needed, + .fields = (VMStateField[]) { + VMSTATE_UINT64(env.u_cet, X86CPU), + VMSTATE_UINT64(env.s_cet, X86CPU), + VMSTATE_END_OF_LIST() + }, + .subsections = (const VMStateDescription * const []) { + &vmstate_shstk, + NULL, + }, +}; + const VMStateDescription vmstate_x86_cpu = { .name = "cpu", .version_id = 12, @@ -1840,6 +1891,7 @@ const VMStateDescription vmstate_x86_cpu = { &vmstate_arch_lbr, &vmstate_triple_fault, &vmstate_pl0_ssp, + &vmstate_cet, NULL } }; From 54db912495d76b344aa15e3b4c359d68f417859b Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:57 +0800 Subject: [PATCH 089/152] i386/cpu: Mark cet-u & cet-s xstates as migratable Cet-u and cet-s are supervisor xstates. Their states are saved/loaded by saving/loading related CET MSRs. And there're the "vmstate_cet" and "vmstate_pl0_ssp" to migrate these MSRs. Thus, it's safe to mark them as migratable. Tested-by: Farrah Chen Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-19-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index b1bbb099f3..6774f66234 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1484,7 +1484,8 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { .ecx = 1, .reg = R_ECX, }, - .migratable_flags = XSTATE_ARCH_LBR_MASK, + .migratable_flags = XSTATE_CET_U_MASK | XSTATE_CET_S_MASK | + XSTATE_ARCH_LBR_MASK, }, [FEAT_XSAVE_XSS_HI] = { .type = CPUID_FEATURE_WORD, From 2f25476ae7f3b4c28fde64584a04734b14c8fd37 Mon Sep 17 00:00:00 2001 From: Yang Weijiang Date: Thu, 11 Dec 2025 14:07:58 +0800 Subject: [PATCH 090/152] i386/cpu: Advertise CET related flags in feature words Add SHSTK and IBT flags in feature words with entry/exit control flags. CET SHSTK and IBT feature are enumerated via CPUID(EAX=7,ECX=0) ECX[bit 7] and EDX[bit 20]. CET states load/restore at vmentry/ vmexit are controlled by VMX_ENTRY_CTLS[bit 20] and VMX_EXIT_CTLS[bit 28]. Enable these flags so that KVM can enumerate the features properly. Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Yang Weijiang Co-developed-by: Chao Gao Signed-off-by: Chao Gao Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-20-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 8 ++++---- target/i386/cpu.h | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 6774f66234..4e0c5cf999 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1221,7 +1221,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { .type = CPUID_FEATURE_WORD, .feat_names = { NULL, "avx512vbmi", "umip", "pku", - NULL /* ospke */, "waitpkg", "avx512vbmi2", NULL, + NULL /* ospke */, "waitpkg", "avx512vbmi2", "cet-ss", "gfni", "vaes", "vpclmulqdq", "avx512vnni", "avx512bitalg", NULL, "avx512-vpopcntdq", NULL, "la57", NULL, NULL, NULL, @@ -1244,7 +1244,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { "avx512-vp2intersect", NULL, "md-clear", NULL, NULL, NULL, "serialize", NULL, "tsx-ldtrk", NULL, NULL /* pconfig */, "arch-lbr", - NULL, NULL, "amx-bf16", "avx512-fp16", + "cet-ibt", NULL, "amx-bf16", "avx512-fp16", "amx-tile", "amx-int8", "spec-ctrl", "stibp", "flush-l1d", "arch-capabilities", "core-capability", "ssbd", }, @@ -1666,7 +1666,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { "vmx-exit-save-efer", "vmx-exit-load-efer", "vmx-exit-save-preemption-timer", "vmx-exit-clear-bndcfgs", NULL, "vmx-exit-clear-rtit-ctl", NULL, NULL, - NULL, "vmx-exit-load-pkrs", NULL, "vmx-exit-secondary-ctls", + "vmx-exit-save-cet", "vmx-exit-load-pkrs", NULL, "vmx-exit-secondary-ctls", }, .msr = { .index = MSR_IA32_VMX_TRUE_EXIT_CTLS, @@ -1681,7 +1681,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { NULL, "vmx-entry-ia32e-mode", NULL, NULL, NULL, "vmx-entry-load-perf-global-ctrl", "vmx-entry-load-pat", "vmx-entry-load-efer", "vmx-entry-load-bndcfgs", NULL, "vmx-entry-load-rtit-ctl", NULL, - NULL, NULL, "vmx-entry-load-pkrs", "vmx-entry-load-fred", + "vmx-entry-load-cet", NULL, "vmx-entry-load-pkrs", "vmx-entry-load-fred", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 458775daaa..33350602ed 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1370,6 +1370,7 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); #define VMX_VM_EXIT_CLEAR_BNDCFGS 0x00800000 #define VMX_VM_EXIT_PT_CONCEAL_PIP 0x01000000 #define VMX_VM_EXIT_CLEAR_IA32_RTIT_CTL 0x02000000 +#define VMX_VM_EXIT_SAVE_CET 0x10000000 #define VMX_VM_EXIT_LOAD_IA32_PKRS 0x20000000 #define VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS 0x80000000 @@ -1383,6 +1384,7 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); #define VMX_VM_ENTRY_LOAD_BNDCFGS 0x00010000 #define VMX_VM_ENTRY_PT_CONCEAL_PIP 0x00020000 #define VMX_VM_ENTRY_LOAD_IA32_RTIT_CTL 0x00040000 +#define VMX_VM_ENTRY_LOAD_CET 0x00100000 #define VMX_VM_ENTRY_LOAD_IA32_PKRS 0x00400000 /* Supported Hyper-V Enlightenments */ From 5cb89cad7f30be3175dd5abbb79ae5e634476cfa Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:07:59 +0800 Subject: [PATCH 091/152] i386/cpu: Enable cet-ss & cet-ibt for supported CPU models Add new versioned CPU models for Sapphire Rapids, Sierra Forest, Granite Rapids and Clearwater Forest, to enable shadow stack and indirect branch tracking. Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-21-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 4e0c5cf999..a9f38f4020 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5166,6 +5166,17 @@ static const X86CPUDefinition builtin_x86_defs[] = { { /* end of list */ }, } }, + { + .version = 5, + .note = "with cet-ss and cet-ibt", + .props = (PropValue[]) { + { "cet-ss", "on" }, + { "cet-ibt", "on" }, + { "vmx-exit-save-cet", "on" }, + { "vmx-entry-load-cet", "on" }, + { /* end of list */ }, + } + }, { /* end of list */ } } }, @@ -5328,6 +5339,17 @@ static const X86CPUDefinition builtin_x86_defs[] = { { /* end of list */ }, } }, + { + .version = 4, + .note = "with cet-ss and cet-ibt", + .props = (PropValue[]) { + { "cet-ss", "on" }, + { "cet-ibt", "on" }, + { "vmx-exit-save-cet", "on" }, + { "vmx-entry-load-cet", "on" }, + { /* end of list */ }, + } + }, { /* end of list */ }, }, }, @@ -5482,6 +5504,17 @@ static const X86CPUDefinition builtin_x86_defs[] = { { /* end of list */ }, } }, + { + .version = 4, + .note = "with cet-ss and cet-ibt", + .props = (PropValue[]) { + { "cet-ss", "on" }, + { "cet-ibt", "on" }, + { "vmx-exit-save-cet", "on" }, + { "vmx-entry-load-cet", "on" }, + { /* end of list */ }, + } + }, { /* end of list */ }, }, }, @@ -5617,6 +5650,17 @@ static const X86CPUDefinition builtin_x86_defs[] = { .model_id = "Intel Xeon Processor (ClearwaterForest)", .versions = (X86CPUVersionDefinition[]) { { .version = 1 }, + { + .version = 2, + .note = "with cet-ss and cet-ibt", + .props = (PropValue[]) { + { "cet-ss", "on" }, + { "cet-ibt", "on" }, + { "vmx-exit-save-cet", "on" }, + { "vmx-entry-load-cet", "on" }, + { /* end of list */ }, + } + }, { /* end of list */ }, }, }, From 133e89cca39484894d874a55914b570cdbd4571a Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 14:08:00 +0800 Subject: [PATCH 092/152] i386/tdx: Fix missing spaces in tdx_xfam_deps[] The checkpatch.pl always complains: "ERROR: space required after that close brace '}'". Fix this issue. Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-22-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/kvm/tdx.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c index dbf0fa2c91..a344462365 100644 --- a/target/i386/kvm/tdx.c +++ b/target/i386/kvm/tdx.c @@ -520,15 +520,15 @@ typedef struct TdxXFAMDep { * supported. */ TdxXFAMDep tdx_xfam_deps[] = { - { XSTATE_YMM_BIT, { FEAT_1_ECX, CPUID_EXT_FMA }}, - { XSTATE_YMM_BIT, { FEAT_7_0_EBX, CPUID_7_0_EBX_AVX2 }}, - { XSTATE_OPMASK_BIT, { FEAT_7_0_ECX, CPUID_7_0_ECX_AVX512_VBMI}}, - { XSTATE_OPMASK_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AVX512_FP16}}, - { XSTATE_PT_BIT, { FEAT_7_0_EBX, CPUID_7_0_EBX_INTEL_PT}}, - { XSTATE_PKRU_BIT, { FEAT_7_0_ECX, CPUID_7_0_ECX_PKU}}, - { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_BF16 }}, - { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_TILE }}, - { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_INT8 }}, + { XSTATE_YMM_BIT, { FEAT_1_ECX, CPUID_EXT_FMA } }, + { XSTATE_YMM_BIT, { FEAT_7_0_EBX, CPUID_7_0_EBX_AVX2 } }, + { XSTATE_OPMASK_BIT, { FEAT_7_0_ECX, CPUID_7_0_ECX_AVX512_VBMI } }, + { XSTATE_OPMASK_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AVX512_FP16 } }, + { XSTATE_PT_BIT, { FEAT_7_0_EBX, CPUID_7_0_EBX_INTEL_PT } }, + { XSTATE_PKRU_BIT, { FEAT_7_0_ECX, CPUID_7_0_ECX_PKU } }, + { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_BF16 } }, + { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_TILE } }, + { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_INT8 } }, }; static struct kvm_cpuid_entry2 *find_in_supported_entry(uint32_t function, From 12ef9d4ed3fd265f56066681097bce6ea12b8dc7 Mon Sep 17 00:00:00 2001 From: Chenyi Qiang Date: Thu, 11 Dec 2025 14:08:01 +0800 Subject: [PATCH 093/152] i386/tdx: Add CET SHSTK/IBT into the supported CPUID by XFAM So that it can be configured in TD guest. And considerring CET_U and CET_S bits are always same in supported XFAM reported by TDX module, i.e., either 00 or 11. So, only need to choose one of them. Tested-by: Farrah Chen Reviewed-by: Xiaoyao Li Signed-off-by: Chenyi Qiang Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211060801.3600039-23-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/kvm/tdx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c index a344462365..0161985768 100644 --- a/target/i386/kvm/tdx.c +++ b/target/i386/kvm/tdx.c @@ -526,6 +526,8 @@ TdxXFAMDep tdx_xfam_deps[] = { { XSTATE_OPMASK_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AVX512_FP16 } }, { XSTATE_PT_BIT, { FEAT_7_0_EBX, CPUID_7_0_EBX_INTEL_PT } }, { XSTATE_PKRU_BIT, { FEAT_7_0_ECX, CPUID_7_0_ECX_PKU } }, + { XSTATE_CET_U_BIT, { FEAT_7_0_ECX, CPUID_7_0_ECX_CET_SHSTK } }, + { XSTATE_CET_U_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_CET_IBT } }, { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_BF16 } }, { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_TILE } }, { XSTATE_XTILE_CFG_BIT, { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_INT8 } }, From 91bc4d81078ada320f6dd095e187c171d70cdc98 Mon Sep 17 00:00:00 2001 From: Zide Chen Date: Thu, 11 Dec 2025 15:09:34 +0800 Subject: [PATCH 094/152] i386/cpu: Add APX EGPRs into xsave area APX feature bit is in CPUID_7_1_EDX[21], and APX has EGPR component with index 19 in xstate area, EGPR component has 16 64bit regs. Add EGRP component into xstate area. Note, APX re-uses the 128-byte XSAVE area that had been previously allocated by MPX which has been deprecated on Intel processors, so check whether APX and MPX are set at the same for Guest, if this case happens, mask off them both to avoid conflict for xsave area. Tested-by: Xudong Hao Signed-off-by: Zide Chen Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-2-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 25 +++++++++++++++++++++++++ target/i386/cpu.h | 17 +++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index a9f38f4020..3c9ed7cd5f 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2111,6 +2111,12 @@ ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT] = { { FEAT_7_0_EDX, CPUID_7_0_EDX_AMX_TILE }, }, }, + [XSTATE_APX_BIT] = { + .size = sizeof(XSaveAPX), + .features = { + { FEAT_7_1_EDX, CPUID_7_1_EDX_APXF }, + }, + }, }; uint32_t xsave_area_size(uint64_t mask, bool compacted) @@ -9116,6 +9122,25 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp) env->features[FEAT_KVM] = 0; } + /* + * Since Intel MPX had been previously deprecated, APX re-purposes the + * 128-byte XSAVE area that had been previously allocated by MPX (state + * component indices 3 and 4, making up a 128-byte area located at an + * offset of 960 bytes into an un-compacted XSAVE buffer), as a single + * state component housing 128-bytes of storage for EGPRs (8-bytes * 16 + * registers). + * + * Check the conflict between MPX and APX before initializing xsave + * components. + */ + if ((env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_MPX) && + (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF)) { + mark_unavailable_features(cpu, FEAT_7_0_EBX, CPUID_7_0_EBX_MPX, + "this feature is conflict with APX"); + mark_unavailable_features(cpu, FEAT_7_1_EDX, CPUID_7_1_EDX_APXF, + "this feature is conflict with MPX"); + } + x86_cpu_enable_xsave_components(cpu); /* CPUID[EAX=7,ECX=0].EBX always increased level automatically: */ diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 33350602ed..05e297e6bb 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -604,6 +604,7 @@ typedef enum X86Seg { #define XSTATE_ARCH_LBR_BIT 15 #define XSTATE_XTILE_CFG_BIT 17 #define XSTATE_XTILE_DATA_BIT 18 +#define XSTATE_APX_BIT 19 #define XSTATE_FP_MASK (1ULL << XSTATE_FP_BIT) #define XSTATE_SSE_MASK (1ULL << XSTATE_SSE_BIT) @@ -620,6 +621,7 @@ typedef enum X86Seg { #define XSTATE_ARCH_LBR_MASK (1ULL << XSTATE_ARCH_LBR_BIT) #define XSTATE_XTILE_CFG_MASK (1ULL << XSTATE_XTILE_CFG_BIT) #define XSTATE_XTILE_DATA_MASK (1ULL << XSTATE_XTILE_DATA_BIT) +#define XSTATE_APX_MASK (1ULL << XSTATE_APX_BIT) #define XSTATE_DYNAMIC_MASK (XSTATE_XTILE_DATA_MASK) @@ -636,7 +638,8 @@ typedef enum X86Seg { XSTATE_BNDCSR_MASK | XSTATE_OPMASK_MASK | \ XSTATE_ZMM_Hi256_MASK | \ XSTATE_Hi16_ZMM_MASK | XSTATE_PKRU_MASK | \ - XSTATE_XTILE_CFG_MASK | XSTATE_XTILE_DATA_MASK) + XSTATE_XTILE_CFG_MASK | \ + XSTATE_XTILE_DATA_MASK | XSTATE_APX_MASK) /* CPUID feature bits available in XSS */ #define CPUID_XSTATE_XSS_MASK (XSTATE_ARCH_LBR_MASK | XSTATE_CET_U_MASK | \ @@ -1039,6 +1042,8 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); #define CPUID_7_1_EDX_PREFETCHITI (1U << 14) /* Support for Advanced Vector Extensions 10 */ #define CPUID_7_1_EDX_AVX10 (1U << 19) +/* Support for Advanced Performance Extensions */ +#define CPUID_7_1_EDX_APXF (1U << 21) /* Indicate bit 7 of the IA32_SPEC_CTRL MSR is supported */ #define CPUID_7_2_EDX_PSFD (1U << 0) @@ -1681,6 +1686,8 @@ typedef struct { #define ARCH_LBR_NR_ENTRIES 32 +#define EGPR_NUM 16 + /* CPU can't have 0xFFFFFFFF APIC ID, use that value to distinguish * that APIC ID hasn't been set yet */ @@ -1791,6 +1798,11 @@ typedef struct XSaveXTILEDATA { uint8_t xtiledata[8][1024]; } XSaveXTILEDATA; +/* Ext. save area 19: APX state */ +typedef struct XSaveAPX { + uint64_t egprs[EGPR_NUM]; +} XSaveAPX; + QEMU_BUILD_BUG_ON(sizeof(XSaveAVX) != 0x100); QEMU_BUILD_BUG_ON(sizeof(XSaveBNDREG) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveBNDCSR) != 0x40); @@ -1803,6 +1815,7 @@ QEMU_BUILD_BUG_ON(sizeof(XSaveCETS) != 0x18); QEMU_BUILD_BUG_ON(sizeof(XSaveArchLBR) != 0x328); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILECFG) != 0x40); QEMU_BUILD_BUG_ON(sizeof(XSaveXTILEDATA) != 0x2000); +QEMU_BUILD_BUG_ON(sizeof(XSaveAPX) != 0x80); typedef struct ExtSaveArea { uint32_t offset, size; @@ -1817,7 +1830,7 @@ typedef struct ExtSaveArea { const FeatureMask features[2]; } ExtSaveArea; -#define XSAVE_STATE_AREA_COUNT (XSTATE_XTILE_DATA_BIT + 1) +#define XSAVE_STATE_AREA_COUNT (XSTATE_APX_BIT + 1) extern ExtSaveArea x86_ext_save_areas[XSAVE_STATE_AREA_COUNT]; From bb9f99e9baffb050fcddd324b31b20dd0a61adbc Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 15:09:35 +0800 Subject: [PATCH 095/152] i386/machine: Use VMSTATE_UINTTL_SUB_ARRAY for vmstate of CPUX86State.regs Before expanding the number of elements in the CPUX86State.regs array, first use VMSTATE_UINTTL_SUB_ARRAY for the regs' vmstate to avoid the type_check_array failure. VMSTATE_UINTTL_SUB_ARRAY will also be used for subsequently added elements in regs array. Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-3-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- include/migration/cpu.h | 4 ++++ target/i386/machine.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/migration/cpu.h b/include/migration/cpu.h index ca7cc0479e..1335abe223 100644 --- a/include/migration/cpu.h +++ b/include/migration/cpu.h @@ -21,6 +21,8 @@ VMSTATE_UINT64_V(_f, _s, _v) #define VMSTATE_UINTTL_ARRAY_V(_f, _s, _n, _v) \ VMSTATE_UINT64_ARRAY_V(_f, _s, _n, _v) +#define VMSTATE_UINTTL_SUB_ARRAY(_f, _s, _start, _num) \ + VMSTATE_UINT64_SUB_ARRAY(_f, _s, _start, _num) #define VMSTATE_UINTTL_2DARRAY_V(_f, _s, _n1, _n2, _v) \ VMSTATE_UINT64_2DARRAY_V(_f, _s, _n1, _n2, _v) #define VMSTATE_UINTTL_TEST(_f, _s, _t) \ @@ -40,6 +42,8 @@ VMSTATE_UINT32_V(_f, _s, _v) #define VMSTATE_UINTTL_ARRAY_V(_f, _s, _n, _v) \ VMSTATE_UINT32_ARRAY_V(_f, _s, _n, _v) +#define VMSTATE_UINTTL_SUB_ARRAY(_f, _s, _start, _num) \ + VMSTATE_UINT32_SUB_ARRAY(_f, _s, _start, _num) #define VMSTATE_UINTTL_2DARRAY_V(_f, _s, _n1, _n2, _v) \ VMSTATE_UINT32_2DARRAY_V(_f, _s, _n1, _n2, _v) #define VMSTATE_UINTTL_TEST(_f, _s, _t) \ diff --git a/target/i386/machine.c b/target/i386/machine.c index 57a968c30d..0882dc3eb0 100644 --- a/target/i386/machine.c +++ b/target/i386/machine.c @@ -1748,7 +1748,7 @@ const VMStateDescription vmstate_x86_cpu = { .pre_save = cpu_pre_save, .post_load = cpu_post_load, .fields = (const VMStateField[]) { - VMSTATE_UINTTL_ARRAY(env.regs, X86CPU, CPU_NB_REGS), + VMSTATE_UINTTL_SUB_ARRAY(env.regs, X86CPU, 0, CPU_NB_REGS), VMSTATE_UINTTL(env.eip, X86CPU), VMSTATE_UINTTL(env.eflags, X86CPU), VMSTATE_UINT32(env.hflags, X86CPU), From 1b1cf889370e5aca3b1838264dd1014a03093dac Mon Sep 17 00:00:00 2001 From: Zide Chen Date: Thu, 11 Dec 2025 15:09:36 +0800 Subject: [PATCH 096/152] i386/cpu: Cache EGPRs in CPUX86State Expend general registers array "regs" of CPUX86State to cache entended GPRs. Tested-by: Xudong Hao Signed-off-by: Zide Chen Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-4-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 7 +++++-- target/i386/xsave_helper.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 05e297e6bb..471d393105 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1664,12 +1664,15 @@ typedef struct { uint64_t mask; } MTRRVar; +#define CPU_NB_EREGS64 32 #define CPU_NB_REGS64 16 #define CPU_NB_REGS32 8 #ifdef TARGET_X86_64 +#define CPU_NB_EREGS CPU_NB_EREGS64 #define CPU_NB_REGS CPU_NB_REGS64 #else +#define CPU_NB_EREGS CPU_NB_REGS32 #define CPU_NB_REGS CPU_NB_REGS32 #endif @@ -1901,7 +1904,7 @@ typedef struct CPUCaches { typedef struct CPUArchState { /* standard registers */ - target_ulong regs[CPU_NB_REGS]; + target_ulong regs[CPU_NB_EREGS]; target_ulong eip; target_ulong eflags; /* eflags register. During CPU emulation, CC flags and DF are set to zero because they are @@ -1958,7 +1961,7 @@ typedef struct CPUArchState { float_status mmx_status; /* for 3DNow! float ops */ float_status sse_status; uint32_t mxcsr; - ZMMReg xmm_regs[CPU_NB_REGS == 8 ? 8 : 32] QEMU_ALIGNED(16); + ZMMReg xmm_regs[CPU_NB_EREGS] QEMU_ALIGNED(16); ZMMReg xmm_t0 QEMU_ALIGNED(16); MMXReg mmx_t0; diff --git a/target/i386/xsave_helper.c b/target/i386/xsave_helper.c index 996e9f3bfe..bab2258732 100644 --- a/target/i386/xsave_helper.c +++ b/target/i386/xsave_helper.c @@ -140,6 +140,14 @@ void x86_cpu_xsave_all_areas(X86CPU *cpu, void *buf, uint32_t buflen) memcpy(tiledata, &env->xtiledata, sizeof(env->xtiledata)); } + + e = &x86_ext_save_areas[XSTATE_APX_BIT]; + if (e->size && e->offset && buflen) { + XSaveAPX *apx = buf + e->offset; + + memcpy(apx, &env->regs[CPU_NB_REGS], + sizeof(env->regs[CPU_NB_REGS]) * (CPU_NB_EREGS - CPU_NB_REGS)); + } #endif } @@ -275,5 +283,13 @@ void x86_cpu_xrstor_all_areas(X86CPU *cpu, const void *buf, uint32_t buflen) memcpy(&env->xtiledata, tiledata, sizeof(env->xtiledata)); } + + e = &x86_ext_save_areas[XSTATE_APX_BIT]; + if (e->size && e->offset) { + const XSaveAPX *apx = buf + e->offset; + + memcpy(&env->regs[CPU_NB_REGS], apx, + sizeof(env->regs[CPU_NB_REGS]) * (CPU_NB_EREGS - CPU_NB_REGS)); + } #endif } From f46e5073a8abfbaa97a9de4d8b0d703fe34bbb42 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 15:09:37 +0800 Subject: [PATCH 097/152] i386/gdbstub: Add APX support for gdbstub Add i386-64bit-apx.xml from gdb to allow QEMU gdbstub parse APX EGPRs, and implement the callbacks to allow gdbstub access EGPRs of guest. Suggested-by: Paolo Bonzini Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-5-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- configs/targets/x86_64-softmmu.mak | 2 +- gdb-xml/i386-64bit-apx.xml | 26 +++++++++++ target/i386/cpu.h | 16 +++++++ target/i386/gdbstub.c | 69 +++++++++++++++++++++++++++++- 4 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 gdb-xml/i386-64bit-apx.xml diff --git a/configs/targets/x86_64-softmmu.mak b/configs/targets/x86_64-softmmu.mak index 5619b2bc68..5180560d4d 100644 --- a/configs/targets/x86_64-softmmu.mak +++ b/configs/targets/x86_64-softmmu.mak @@ -2,5 +2,5 @@ TARGET_ARCH=x86_64 TARGET_BASE_ARCH=i386 TARGET_KVM_HAVE_GUEST_DEBUG=y TARGET_KVM_HAVE_RESET_PARKED_VCPU=y -TARGET_XML_FILES= gdb-xml/i386-64bit.xml +TARGET_XML_FILES= gdb-xml/i386-64bit.xml gdb-xml/i386-64bit-apx.xml TARGET_LONG_BITS=64 diff --git a/gdb-xml/i386-64bit-apx.xml b/gdb-xml/i386-64bit-apx.xml new file mode 100644 index 0000000000..11a4ec67ca --- /dev/null +++ b/gdb-xml/i386-64bit-apx.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 471d393105..691ed97468 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -61,6 +61,22 @@ enum { R_R13 = 13, R_R14 = 14, R_R15 = 15, + R_R16 = 16, + R_R17 = 17, + R_R18 = 18, + R_R19 = 19, + R_R20 = 20, + R_R21 = 21, + R_R22 = 22, + R_R23 = 23, + R_R24 = 24, + R_R25 = 25, + R_R26 = 26, + R_R27 = 27, + R_R28 = 28, + R_R29 = 29, + R_R30 = 30, + R_R31 = 31, R_AL = 0, R_CL = 1, diff --git a/target/i386/gdbstub.c b/target/i386/gdbstub.c index 04c49e802d..be41601cff 100644 --- a/target/i386/gdbstub.c +++ b/target/i386/gdbstub.c @@ -27,9 +27,11 @@ #endif #ifdef TARGET_X86_64 -static const int gpr_map[16] = { +static const int gpr_map[CPU_NB_EREGS] = { R_EAX, R_EBX, R_ECX, R_EDX, R_ESI, R_EDI, R_EBP, R_ESP, - 8, 9, 10, 11, 12, 13, 14, 15 + R_R8, R_R9, R_R10, R_R11, R_R12, R_R13, R_R14, R_R15, + R_R16, R_R17, R_R18, R_R19, R_R20, R_R21, R_R22, R_R23, + R_R24, R_R25, R_R26, R_R27, R_R28, R_R29, R_R30, R_R31, }; #else #define gpr_map gpr_map32 @@ -444,8 +446,71 @@ static int x86_cpu_gdb_write_linux_register(CPUState *cs, uint8_t *mem_buf, #endif +#ifdef TARGET_X86_64 +static int i386_cpu_gdb_get_egprs(CPUState *cs, GByteArray *mem_buf, int n) +{ + CPUX86State *env = &X86_CPU(cs)->env; + + if (n >= 0 && n < EGPR_NUM) { + /* EGPRs can be only directly accessible in 64-bit mode. */ + if (env->hflags & HF_CS64_MASK) { + return gdb_get_reg64(mem_buf, env->regs[gpr_map[n + CPU_NB_REGS]]); + } else { + return gdb_get_regl(mem_buf, 0); + } + } + + return 0; +} + +static int i386_cpu_gdb_set_egprs(CPUState *cs, uint8_t *mem_buf, int n) +{ + CPUX86State *env = &X86_CPU(cs)->env; + + if (n >= 0 && n < EGPR_NUM) { + /* + * EGPRs can be only directly accessible in 64-bit mode, and require + * XCR0[APX_F] (at least for modification in gdbstub) to be enabled. + */ + if (env->hflags & HF_CS64_MASK && env->xcr0 & XSTATE_APX_MASK) { + env->regs[gpr_map[n + CPU_NB_REGS]] = ldtul_p(mem_buf); + + /* + * Per SDM Vol 1, "Processor Tracking of XSAVE-Managed State", + * XSTATE_BV[i] *may* be either 0 or 1 if the state component is + * in its initial configuration. + * + * However, it is observed on Diamond Rapids (DMR) that + * XSTATE_BV[APX_F] is set whenever EGPRs are modified, regardless + * of the value written (even if zero). + * + * Since GDB modifies the software register cache directly, + * manually force the bit set to emulate this behavior observed + * on hardware. + */ + if (!(env->xstate_bv & XSTATE_APX_MASK)) { + env->xstate_bv |= XSTATE_APX_MASK; + } + } + return sizeof(target_ulong); + } + return 0; +} +#endif + void x86_cpu_gdb_init(CPUState *cs) { +#ifdef TARGET_X86_64 + CPUX86State *env = &X86_CPU(cs)->env; + + if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF) { + gdb_register_coprocessor(cs, i386_cpu_gdb_get_egprs, + i386_cpu_gdb_set_egprs, + gdb_find_static_feature("i386-64bit-apx.xml"), + 0); + } +#endif + #ifdef CONFIG_LINUX_USER gdb_register_coprocessor(cs, x86_cpu_gdb_read_linux_register, x86_cpu_gdb_write_linux_register, From 1d5d97583d2ea877264b65b04722caeaeeaa8021 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 15:09:38 +0800 Subject: [PATCH 098/152] i386/cpu-dump: Dump entended GPRs for APX supported guest Dump EGPRs when guest supports APX. Suggested-by: Paolo Bonzini Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-6-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu-dump.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/target/i386/cpu-dump.c b/target/i386/cpu-dump.c index 67bf31e0ca..ed8fd363c6 100644 --- a/target/i386/cpu-dump.c +++ b/target/i386/cpu-dump.c @@ -354,8 +354,7 @@ void x86_cpu_dump_state(CPUState *cs, FILE *f, int flags) qemu_fprintf(f, "RAX=%016" PRIx64 " RBX=%016" PRIx64 " RCX=%016" PRIx64 " RDX=%016" PRIx64 "\n" "RSI=%016" PRIx64 " RDI=%016" PRIx64 " RBP=%016" PRIx64 " RSP=%016" PRIx64 "\n" "R8 =%016" PRIx64 " R9 =%016" PRIx64 " R10=%016" PRIx64 " R11=%016" PRIx64 "\n" - "R12=%016" PRIx64 " R13=%016" PRIx64 " R14=%016" PRIx64 " R15=%016" PRIx64 "\n" - "RIP=%016" PRIx64 " RFL=%08x [%c%c%c%c%c%c%c] CPL=%d II=%d A20=%d SMM=%d HLT=%d\n", + "R12=%016" PRIx64 " R13=%016" PRIx64 " R14=%016" PRIx64 " R15=%016" PRIx64 "\n", env->regs[R_EAX], env->regs[R_EBX], env->regs[R_ECX], @@ -371,7 +370,32 @@ void x86_cpu_dump_state(CPUState *cs, FILE *f, int flags) env->regs[12], env->regs[13], env->regs[14], - env->regs[15], + env->regs[15]); + + if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF) { + qemu_fprintf(f, "R16=%016" PRIx64 " R17=%016" PRIx64 " R18=%016" PRIx64 " R19=%016" PRIx64 "\n" + "R20=%016" PRIx64 " R21=%016" PRIx64 " R22=%016" PRIx64 " R23=%016" PRIx64 "\n" + "R24=%016" PRIx64 " R25=%016" PRIx64 " R26=%016" PRIx64 " R27=%016" PRIx64 "\n" + "R28=%016" PRIx64 " R29=%016" PRIx64 " R30=%016" PRIx64 " R31=%016" PRIx64 "\n", + env->regs[16], + env->regs[17], + env->regs[18], + env->regs[19], + env->regs[20], + env->regs[21], + env->regs[22], + env->regs[23], + env->regs[24], + env->regs[25], + env->regs[26], + env->regs[27], + env->regs[28], + env->regs[29], + env->regs[30], + env->regs[31]); + } + + qemu_fprintf(f, "RIP=%016" PRIx64 " RFL=%08x [%c%c%c%c%c%c%c] CPL=%d II=%d A20=%d SMM=%d HLT=%d\n", env->eip, eflags, eflags & DF_MASK ? 'D' : '-', eflags & CC_O ? 'O' : '-', From 103b49bc6400e35805b7de777b6f026666f28e28 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 15:09:39 +0800 Subject: [PATCH 099/152] i386/monitor: Support EGPRs in hmp_print Add EGPRs in monitor_defs[] to allow HMP to access EGPRs. For example, (qemu) print $r16 Since monitor_defs[] is used for read-only case, no need to consider xstate synchronization issues that might be caused by modifying EGPRs (like what gdbstub did). Suggested-by: Paolo Bonzini Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-7-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/monitor.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/target/i386/monitor.c b/target/i386/monitor.c index d2bb873d49..99b32cb7b0 100644 --- a/target/i386/monitor.c +++ b/target/i386/monitor.c @@ -623,6 +623,22 @@ const MonitorDef monitor_defs[] = { { "r13", offsetof(CPUX86State, regs[13]) }, { "r14", offsetof(CPUX86State, regs[14]) }, { "r15", offsetof(CPUX86State, regs[15]) }, + { "r16", offsetof(CPUX86State, regs[16]) }, + { "r17", offsetof(CPUX86State, regs[17]) }, + { "r18", offsetof(CPUX86State, regs[18]) }, + { "r19", offsetof(CPUX86State, regs[19]) }, + { "r20", offsetof(CPUX86State, regs[20]) }, + { "r21", offsetof(CPUX86State, regs[21]) }, + { "r22", offsetof(CPUX86State, regs[22]) }, + { "r23", offsetof(CPUX86State, regs[23]) }, + { "r24", offsetof(CPUX86State, regs[24]) }, + { "r25", offsetof(CPUX86State, regs[25]) }, + { "r26", offsetof(CPUX86State, regs[26]) }, + { "r27", offsetof(CPUX86State, regs[27]) }, + { "r28", offsetof(CPUX86State, regs[28]) }, + { "r29", offsetof(CPUX86State, regs[29]) }, + { "r30", offsetof(CPUX86State, regs[30]) }, + { "r31", offsetof(CPUX86State, regs[31]) }, #endif { "eflags", offsetof(CPUX86State, eflags) }, { "eip", offsetof(CPUX86State, eip) }, From e105745d2086b5f67959510910a7d6f613385c52 Mon Sep 17 00:00:00 2001 From: Zide Chen Date: Thu, 11 Dec 2025 15:09:40 +0800 Subject: [PATCH 100/152] i386/cpu: Add APX migration support Add a VMStateDescription to migrate APX EGPRs. Tested-by: Xudong Hao Signed-off-by: Zide Chen Co-developed-by: Zhao Liu Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-8-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/machine.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/target/i386/machine.c b/target/i386/machine.c index 0882dc3eb0..c913961281 100644 --- a/target/i386/machine.c +++ b/target/i386/machine.c @@ -1741,6 +1741,28 @@ static const VMStateDescription vmstate_cet = { }, }; +#ifdef TARGET_X86_64 +static bool apx_needed(void *opaque) +{ + X86CPU *cpu = opaque; + CPUX86State *env = &cpu->env; + + return !!(env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF); +} + +static const VMStateDescription vmstate_apx = { + .name = "cpu/apx", + .version_id = 1, + .minimum_version_id = 1, + .needed = apx_needed, + .fields = (VMStateField[]) { + VMSTATE_UINTTL_SUB_ARRAY(env.regs, X86CPU, CPU_NB_REGS, + CPU_NB_EREGS - CPU_NB_REGS), + VMSTATE_END_OF_LIST() + } +}; +#endif + const VMStateDescription vmstate_x86_cpu = { .name = "cpu", .version_id = 12, @@ -1892,6 +1914,9 @@ const VMStateDescription vmstate_x86_cpu = { &vmstate_triple_fault, &vmstate_pl0_ssp, &vmstate_cet, +#ifdef TARGET_X86_64 + &vmstate_apx, +#endif NULL } }; From 60caf14339262b10423e21b1d7d39ad7edec82b7 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 15:09:41 +0800 Subject: [PATCH 101/152] i386/cpu: Support APX CPUIDs APX is enumerated by CPUID.(EAX=0x7, ECX=1).EDX[21]. And this feature bit also indicates the existence of dedicated CPUID leaf 0x29, called the Intel APX Advanced Performance Extensions Leaf. This new CPUID leaf now is populated with enumerations for a select set of Intel APX sub-features. CPUID.(EAX=0x29, ECX=0) - EAX * Maximum Subleaf CPUID.(EAX=0x29, ECX=0).EAX[31:0] = 0 - EBX * Reserved CPUID.(EAX=0x29, ECX=0).EBX[31:1] = 0 * APX_NCI_NDD_NF CPUID.(EAX=0x29, ECX=0).EBX[0:0] = 1, which enumerates the presence of New Conditional Instructions (NCIs), explicit New Data Destination (NDD) controls, and explicit Flags Suppression (NF) controls for select sets of EVEX-encoded Intel APX instructions (present in EVEX map=4, and EVEX map=2 0x0F38). - ECX * Reserved CPUID.(EAX=0x29, ECX=0).ECX[31:0] = 0 - EDX * Reserved CPUID.(EAX=0x29, ECX=0).EDX[31:0] = 0 Note, APX_NCI_NDD_NF is documented as always enabled for Intel processors since APX spec (revision v7.0). Now any Intel processor that enumerates support for APX_F (CPUID.(EAX=0x7, ECX=1).EDX[21]) will also enumerate support for APX_NCI_NDD_NF. Tested-by: Xudong Hao Co-developed-by: Zide Chen Signed-off-by: Zide Chen Co-developed-by: Peter Fang Signed-off-by: Peter Fang Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-9-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 40 +++++++++++++++++++++++++++++++++++++++- target/i386/cpu.h | 8 ++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 3c9ed7cd5f..c9efd3a9d4 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1036,6 +1036,7 @@ void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1, #define TCG_SGX_12_0_EBX_FEATURES 0 #define TCG_SGX_12_1_EAX_FEATURES 0 #define TCG_24_0_EBX_FEATURES 0 +#define TCG_29_0_EBX_FEATURES 0 #if defined CONFIG_USER_ONLY #define CPUID_8000_0008_EBX_KERNEL_FEATURES (CPUID_8000_0008_EBX_IBPB | \ @@ -1301,7 +1302,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { "amx-complex", NULL, "avx-vnni-int16", NULL, NULL, NULL, "prefetchiti", NULL, NULL, NULL, NULL, "avx10", - NULL, NULL, NULL, NULL, + NULL, "apxf", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, }, @@ -1345,6 +1346,25 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, .tcg_features = TCG_24_0_EBX_FEATURES, }, + [FEAT_29_0_EBX] = { + .type = CPUID_FEATURE_WORD, + .feat_names = { + "apx-nci-ndd-nf", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid = { + .eax = 0x29, + .needs_ecx = true, .ecx = 0, + .reg = R_EBX, + }, + .tcg_features = TCG_29_0_EBX_FEATURES, + }, [FEAT_8000_0007_EDX] = { .type = CPUID_FEATURE_WORD, .feat_names = { @@ -1996,6 +2016,10 @@ static FeatureDep feature_dependencies[] = { .from = { FEAT_7_1_EDX, CPUID_7_1_EDX_AVX10 }, .to = { FEAT_24_0_EBX, ~0ull }, }, + { + .from = { FEAT_7_1_EDX, CPUID_7_1_EDX_APXF }, + .to = { FEAT_29_0_EBX, ~0ull }, + }, }; typedef struct X86RegisterInfo32 { @@ -8411,6 +8435,15 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, } break; } + case 0x29: + *eax = 0; + *ebx = 0; + *ecx = 0; + *edx = 0; + if ((env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF) && count == 0) { + *ebx = env->features[FEAT_29_0_EBX]; + } + break; case 0x40000000: /* * CPUID code in kvm_arch_init_vcpu() ignores stuff @@ -9190,6 +9223,11 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp) x86_cpu_adjust_level(cpu, &env->cpuid_min_level, 0x24); } + /* Advanced Performance Extensions (APX) requires CPUID[0x29] */ + if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_APXF) { + x86_cpu_adjust_level(cpu, &env->cpuid_min_level, 0x29); + } + /* SVM requires CPUID[0x8000000A] */ if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) { x86_cpu_adjust_level(cpu, &env->cpuid_min_xlevel, 0x8000000A); diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 691ed97468..fc63488364 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -710,6 +710,7 @@ typedef enum FeatureWord { FEAT_7_1_EDX, /* CPUID[EAX=7,ECX=1].EDX */ FEAT_7_2_EDX, /* CPUID[EAX=7,ECX=2].EDX */ FEAT_24_0_EBX, /* CPUID[EAX=0x24,ECX=0].EBX */ + FEAT_29_0_EBX, /* CPUID[EAX=0x29,ECX=0].EBX */ FEATURE_WORDS, } FeatureWord; @@ -1092,6 +1093,13 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); CPUID_24_0_EBX_AVX10_256 | \ CPUID_24_0_EBX_AVX10_512) +/* + * New Conditional Instructions (NCIs), explicit New Data Destination (NDD) + * controls, and explicit Flags Suppression (NF) controls for select sets of + * EVEX-encoded Intel APX instructions + */ +#define CPUID_29_0_EBX_APX_NCI_NDD_NF (1U << 0) + /* RAS Features */ #define CPUID_8000_0007_EBX_OVERFLOW_RECOV (1U << 0) #define CPUID_8000_0007_EBX_SUCCOR (1U << 1) From 016dddf24062a8b8a663300f074ff504e0467f2e Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Thu, 11 Dec 2025 15:09:42 +0800 Subject: [PATCH 102/152] i386/cpu: Mark APX xstate as migratable APX xstate is user xstate. The related registers are cached in X86CPUState. And there's a vmsd "vmstate_apx" to migrate these registers. Thus, it's safe to mark it as migratable. Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251211070942.3612547-10-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index c9efd3a9d4..0f618ffb03 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1544,7 +1544,8 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { .migratable_flags = XSTATE_FP_MASK | XSTATE_SSE_MASK | XSTATE_YMM_MASK | XSTATE_BNDREGS_MASK | XSTATE_BNDCSR_MASK | XSTATE_OPMASK_MASK | XSTATE_ZMM_Hi256_MASK | XSTATE_Hi16_ZMM_MASK | - XSTATE_PKRU_MASK | XSTATE_XTILE_CFG_MASK | XSTATE_XTILE_DATA_MASK, + XSTATE_PKRU_MASK | XSTATE_XTILE_CFG_MASK | XSTATE_XTILE_DATA_MASK | + XSTATE_APX_MASK, }, [FEAT_XSAVE_XCR0_HI] = { .type = CPUID_FEATURE_WORD, From 9103b40f4f5abf19a12e4192177b3ebe442c2b4d Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 4 Dec 2025 17:57:17 +0100 Subject: [PATCH 103/152] build: do not include @block.syms/@qemu.sys with modules disabled Including specific symbols used by modules is not necessary for monolithic executables. This avoids a failure where emcc does not support @file syntax inside a response file---which in turn breaks the WebAssembly build if the command line is long enough that meson decides to use a response file. Signed-off-by: Paolo Bonzini --- meson.build | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/meson.build b/meson.build index e6a11cefdb..02738c9765 100644 --- a/meson.build +++ b/meson.build @@ -4270,7 +4270,7 @@ foreach target : target_dirs c_args += ['-DCONFIG_DEVICES="@0@-config-devices.h"'.format(target)] arch_srcs += config_devices_h[target] - link_args += ['@block.syms', '@qemu.syms'] + link_args += enable_modules ? ['@block.syms', '@qemu.syms'] : [] else abi = config_target['TARGET_ABI_DIR'] target_type='user' @@ -4499,14 +4499,15 @@ if xkbcommon.found() endif if have_tools + link_args = enable_modules ? ['@block.syms'] : [] qemu_img = executable('qemu-img', [files('qemu-img.c'), hxdep], - link_args: '@block.syms', link_depends: block_syms, + link_args: link_args, link_depends: block_syms, dependencies: [authz, block, crypto, io, qom, qemuutil], install: true) qemu_io = executable('qemu-io', files('qemu-io.c'), - link_args: '@block.syms', link_depends: block_syms, + link_args: link_args, link_depends: block_syms, dependencies: [block, qemuutil], install: true) qemu_nbd = executable('qemu-nbd', files('qemu-nbd.c'), - link_args: '@block.syms', link_depends: block_syms, + link_args: link_args, link_depends: block_syms, dependencies: [blockdev, qemuutil, selinux], install: true) From a7ab886b6e51013e33d3801d6dad9184eccd8fcd Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 4 Dec 2025 13:46:34 +0100 Subject: [PATCH 104/152] tests/meson: do not reuse migration_files variable The variable is defined in migration/meson.build, reusing it is confusing. Signed-off-by: Paolo Bonzini --- tests/qtest/meson.build | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 669d07c06b..08fba9695b 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -343,7 +343,7 @@ endif tpmemu_files = ['tpm-emu.c', 'tpm-util.c', 'tpm-tests.c'] -migration_files = [files( +test_migration_files = [files( 'migration/bootfile.c', 'migration/framework.c', 'migration/migration-qmp.c', @@ -377,7 +377,7 @@ qtests = { 'migration/migration-util.c') + dbus_vmstate1, 'erst-test': files('erst-test.c'), 'ivshmem-test': [rt, '../../contrib/ivshmem-server/ivshmem-server.c'], - 'migration-test': migration_files + migration_tls_files, + 'migration-test': test_migration_files + migration_tls_files, 'pxe-test': files('boot-sector.c'), 'pnv-xive2-test': files('pnv-xive2-common.c', 'pnv-xive2-flush-sync.c', 'pnv-xive2-nvpg_bar.c'), @@ -389,7 +389,7 @@ qtests = { 'tpm-tis-i2c-test': [io, tpmemu_files, 'qtest_aspeed.c'], 'tpm-tis-device-swtpm-test': [io, tpmemu_files, 'tpm-tis-util.c'], 'tpm-tis-device-test': [io, tpmemu_files, 'tpm-tis-util.c'], - 'virtio-net-failover': migration_files, + 'virtio-net-failover': test_migration_files, 'vmgenid-test': files('boot-sector.c', 'acpi-utils.c'), 'netdev-socket': files('netdev-socket.c', '../unit/socket-helpers.c'), } From 8c04b6a48b15a478ff3f9d152592a0ba503a31e4 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 4 Dec 2025 11:58:23 +0100 Subject: [PATCH 105/152] bump meson wheel to 1.10.0 This version includes several improvements and bugfixes for Rust. Signed-off-by: Paolo Bonzini --- configure | 4 ++-- python/scripts/vendor.py | 4 ++-- python/wheels/meson-1.10.0-py3-none-any.whl | Bin 0 -> 1057029 bytes pythondeps.toml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 python/wheels/meson-1.10.0-py3-none-any.whl diff --git a/configure b/configure index 82cace1bc9..55e0bd3425 100755 --- a/configure +++ b/configure @@ -1180,12 +1180,12 @@ fi # detect rust triple meson_version=$($meson --version) -if test "$rust" != disabled && ! version_ge "$meson_version" 1.9.0; then +if test "$rust" != disabled && ! version_ge "$meson_version" 1.10.0; then if test "$rust" = enabled; then $mkvenv ensuregroup --dir "${source_path}/python/wheels" \ ${source_path}/pythondeps.toml meson-rust || exit 1 else - echo "Rust needs Meson 1.9.0, disabling" 2>&1 + echo "Rust needs Meson 1.10.0, disabling" 2>&1 rust=disabled fi fi diff --git a/python/scripts/vendor.py b/python/scripts/vendor.py index 33ac7a45de..33b9b0b92b 100755 --- a/python/scripts/vendor.py +++ b/python/scripts/vendor.py @@ -41,8 +41,8 @@ def main() -> int: parser.parse_args() packages = { - "meson==1.9.0": - "45e51ddc41e37d961582d06e78c48e0f9039011587f3495c4d6b0781dad92357", + "meson==1.10.0": + "4b27aafce281e652dcb437b28007457411245d975c48b5db3a797d3e93ae1585", } vendor_dir = Path(__file__, "..", "..", "wheels").resolve() diff --git a/python/wheels/meson-1.10.0-py3-none-any.whl b/python/wheels/meson-1.10.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..2b4a73a5ffa758584f36275f2d62f19625b7900e GIT binary patch literal 1057029 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�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 z z_{@?z)!!F8Y;UKO#j^Gr#okldy5gkwvSs$_r&)|&1v#dzx;xuE#ya+P)#Qw(%}Ksp zy#3niCLcHwS$THjMFWyME_Ap!YX?tMHCR>jWZ+qYVC~w>_JEvE z)A|;1YPED280>v0V>PKV=s{gedWPMcgT$~LzodA3-ti^|R~9yZMF zc(jOT!lHHjfkC#`Nv4UPOs5)5zuUS}+VArQZg!KohZpg)Ej+xm^3Lo%bK*bgo%ve0 z{=M;`R<7V%Z*)6ZxBa_ix_MT4zf0s9RsA`S*DN`6Xw}({$sseDwN7)+ZCx2PL+C*~A09?5T44X1M5-Tf^5 zs_pc7a|@@M`_!lC9_g^!zk1=qWJSmJ&30O~ae|DTUdm;kTYWYKLSEVXy*-Ui}R!{W2qVIX`#@YOL zUM9OMkt{3dPXPs7`x6m=2=xOGY50p4*B=g5k-0QGkKO{GArJK8!$@$kT z97#J@I#+KJIAqh>Y!9z5KmTz5{{EzP z!;SV5cXu#2Xv8Tr8ZZ3Qw&0J{Nmuip2-QLv!JCpFezZ^4Jh}JsN|#`+m=`ls+;zG3 zA8GiyUaDfo-E77A8>;H6E#67|lQ|kOx#3;5m1et?ZD3tDTS3j*m}|LP+D>x%-+XH3 zdoS(43e!s(VxJNe<*tNXE$yDY-$41+BQEASJhGc(#0<|rJ7YS}M@iuHh9Ato97QFM z2`TrhC2Ir}dW1^&#AO_qV-{o-BmK|qw3B%Mk`~5wcf6I=ja}Qlj&^fLl!wy&$BF(%~3Y-QYQO0*DMQ_uQ2wBY`y1vH#H_!z3Jh_ z>DO~k|BYHaW7!s_XYX!hZ}tDZU)WD;y#eQ`)}&9`M|71tW7KD?;h&iwH*wNWwS}z* zb*9W>jMuvwHffET;E_3BtlQYD4doUm^Xv46{Rvt5W99zoQ#03X5asDv`DTLh3mKu3 z&LH8C-IdpO&T0-Z*HSPOJZS3vZPFp@k}ZoX=Z8A1NOawKZAyf(UG1KaW;X1*R+M;s zNcoi}Q6uy*W@-5%p|(Yg)2`eM5vhN9U{-2o)6r=S{!XEjohC0|Q^J(uSahmyLB)B# z)@`fQ)=p+VBhz^6V1~l)fM%t~-nqrE`Btz!>7FQbo26Q3!Sk)BpB`TELcHpo!=b6V z+>@S!w5*Zi)UnS#@xH|ILzqW~wE(fZ*&v>~xv`NOQZpK@^u3sOt!jE1l4`lJ``8Z{Y@~p4yYtzpykNnhp z@<{oG_2+K9&Z|oMwn**k2Zv6vq-EdoyDV35eVZzUnQX&88+ZP3?pg-}UYVF7XwtlH9A+>>3{j zn(9orxwmxvbG?@K(j~gac{c1d;{Udv4%`2yGFh*gtH$G&v#61-)9Q#->buzwGpc`T z?X$hUW=iSS?WUo3f;Mb@Rw?&N(P=}iKku)ZvZkj}Bd6x($@_&qsaSUFwx#bm!*7qz zAKA$GT1~~@`T_G!R?o{@E7h&MpM{uPnQzrut)rQhq)>4AgoNv^%U)MPu1m`Ftd@A~ zqpVvRYV`ZSyj-sAnU;z!q&2F-*YAUmgt-prPI!AKDF2X=<1e=JBx1LDZYC>WwFlt zI{rrO<1@szH%7+({w&zM>|cVcx$C_X7Td)hZIl1Y%AsgBpRMg?wypYix{qDaUSsj)l?3M- z@pZG)V&&~>t5`SRO7QsiN^@mtCd;3%nQ_-=uc`a>ru_ex-3lVbTMh57k0`8P*=+La z*7j91GnV-ri=DCU_L__t!t(7|912VB{M_f#_jmJ>sHmbvh7(JL|8V%XfO1 zDeTle9U>#@#~K@G>gUsuemQ^R>C-+luZLE7e@Xc5{H159!TXy>jW3lX*{tbjd-zP( zviC^jroCL{eXlET@0e$w6LVg_`s1k?$$}W>~qf*{=Jf)KdXMhmgyd@I+^z`@H!kk()MKO>)#$( zx90>YF-vByJR=Zh)bZ=lWchpD59e$zlr`zQeYGg%Rn}W3+n{J&leW9hJ!XzgUSg~G{w5zNJP~L4CfJ-`@%8B@p~VwlUAwVcOZZ;u=A6c3lg}&8i*cS9 zIwxdpMMOcNHgmDPJFgg*fVjQM{BxVHN@?fByWLD`wEH{XSU|SKb9u(5#5(0G{kPW2 zzibk=V`_3pI_Cf6P~%tSel($y?Z?MxPs+8phQ$j+yg0K* z&#kRYT|{ONE8~I(OsoEX?%CWm^NM8hQ;&&H=3aPETDDyH%9QysG7AF3)>|#VIMr@N zf6?zxdy?eX-E_7w9yW}&(ml+0?u*90Euy)yW&xf>KU}Re7u6MC63SRAeQxv3XRGG# z>Ya6rF(|#^aCz9z`<;$&*ssu`x>QU-Bcj9a}uF&M9|F&8dUT4v8n-SEam4abM|`Zg%*Oz_(=Q z+Bve~tdBX;{w1(}OkPyJp(AtZJ^yzJn$D71yViYwu=n--pW=Vk9=*CtyRW@$_0zij z3c&}~=uMYC!?-f&OUdk)Ws*1BbT#d(KCpaa+7iF<6Z4*5x5e}M-{#oeuRNR6v_@&s z&MQ0fSuS^I&1Pf2@aS;nU1#yXi*D;#n)yDqSiNVN*4LK$h%LPhx4W`G?^?6jj6dM{ zkuRSauTJdPUE^STu_VQM=~m0QB8dlw`(tIN_*vgkVU|6a>G?QSIz&bJ?+cE)eG{gY z2no-7%*@H<`@hk}b?;}6LrwF!=eReBNC?01=KJ!Yd@{?QFSZ9iU7p&@q}!K2tPp`INtOak|`W z3Q;fmqN>F#ki@U1Z8A6X=6T-UNnYZ;710wyaxC9iWtE1^U}K8h;Ha8(r2K=+EP1X1 z=Puz_r)pD5(liySRy73tne5Wel`9cyr^ivIQMky7CF`R4RL-|~;Zg2^D;MY-t?N_z zdPZPT>q{qFOJRwt-Y<`6F7h;G30LAeAkTFpN9@Sbpr(H_eAK3UIBJ@#&u_i6LVNw9 z(0`XNMCyE6mDcn|l=G;p4)64YoiAb+Sbs- z)vycJM}8gd$l&Ykk}@(~ARifAt~8?~Ipoc|C9ay&8}F=B6;M=tv9GL2AujNBXT!T` zPm5Z9P7Mw@5%RQTAFEl5p6UK?AN@Xv30Ct5*G*jOY&y|!XN}qU*#WJollLzzl@EC_ zDLnl%e9dwkOXw{$hoVn88{hp-r>D%bz>9Tt9x!y!rcTi`xv-&+o7N zmaB8qGub6Z>CO+wXQ~#D_OP_&l@(rHo6CA~=^?S@yw}wytu>f`_<&f7hHt5>UHd23 zaPQXseuLjHB&_;szqG|a)zrQ4Ipl!kE-Oy9r#iAtJWES17(ATIZE|t-vFT}r3_<7Q zU3a`x|8aMk(MQ|BVAgYtrt9Y34iD-}TXlPbjOX``yEp8DzZuv1yt&_dImuq&cFunf z_WNzScWkO>IQMti8oR5nSuFO3w%t6@FED+M^RvB6{BH+-crcUC;M?hg&k_}Wxtc$p zvyoMN(-)z?C*S@%kz;pk*OcPPjo;0WEw!(UTU+bYA+nic0duizucbk;RcFS{tSy(% zcnfBBP4)|rIs0r=!GemwCk+R~%~@A%+Hh<2OP%VTd)wI4<@f#n_htQ#y3eav*037L zX!LtNNj;;xYem6w&#j5+_wkRXZgkjgopk?Fys)8>1>Xxs)86)9(@*?P zRjMm|FTootG?O{wCy(sm-*4LzlTEj&B&?H`e0Ib6%X!;&W}y=;%iK*^g;u=v%gbNg za><TA8TXD_|{MQV!snRe zN*88IIRD8Kd_3JmX<^p~!(+j7Q;WZ>K08?>J~6TAacXFD&)wx=Cqw6Dy$_jQd`rw+p+f+#0tE+_DgBL%iqdAESnV|J}i0ouyOS(#@X?;ZR0>3y=AqyFk1 z!H;S;l`2BMOz<*NSGEtGxb*q7?Vshi9IF`%UT-=lSvy7go`-snVte`8^H+YJcKY;s zAK$YN^CoH@HCVFc^h@zVcP{PA0hcseyT65peQZkDmhky;;)kow#>-Ch&zAnPYJQ-* z-c{3^eZRVPCT+UTKRc)35dZc)G22hC_>}zo$)@QmeeeCBzf~x_@8g4RHQ6PWyNfp( z9#D9@HC5+lpw{GX#?uQPuG^+s8WL~qFVpAh<<@QYm07M)2bk*_ayq=ZXV`SB|460vc8*o^ zY8$_EY zJufz9$ZD5X{q|nFMo7JJueZa52R@A-Y$r|nvirxw;B$3KWhXB2yjdf!9{MY{@0NAX zj7tGRCc;0~or;a(zSMM4aYCH%hxLgiiCbrG$v;x>+0;s!gH=lJnKKM zwbH`&jZyql-q(7X;b*mf_83o{{oui}xqV8u%-V{rF{-oACG<B?mCA?p>THt3z9CP?T%hhQNd7?=bH4W^WD(|?rFPPr=+xe}9Bu8VR za{8MOO&x}(w#%1@}^f>;}&tr=If|NULOL&f&pVrx^K z=N8c#J@2IbiFX}# zhF0}$+MMk-KXX>`I&F!C0ZXqW7AKYuJn_P*Jzs}!Ne}| zS)=5W;GvF5i`A#B*IBo;OY}qYmZBN8Q_jzwec}2Xo?RU3th_}+uE&)Q9+CR6P;tJ! zS4fwY8GBnGr|4nvsqPCnI(=HQ&Rm$~&U|T;WkJ}_tEJ6qlFiR#3$uc~N~SI_-_+1L z&0q`1*7d$CS4ObsPR?Ur`(s%}VDra-KQC%tOf)p^+{bl5?bQvrhTO*sA8O-wgh+5X@r z#yj#=x1M$9eld@m^Ww?hk3Ubpoc;K^e*e8Xi~8>m=fvFlx2$PpW{hI)TEkPjp1iof zC5CCHkY`B3oHHIz)_5#?EYa>%^g7o!&aB4Hg=y+lo&C3-^seWb7wvRTZ@27*&36x8 z*~4>U@jXV#ec>y!o;OM7i7sU*tzA3wWdBKKg&T&_i!zPo70;T-dGa{p)@iqVpHJC$ zXtr*rA4fLJ9tSlA_^Y)-j<&4GO6N?<%N`8t{bOcC|kMy z&SKk@T`rSFS_73ovWkeA7f#jP&Uawbgj#Pe@74{SeJ5L1nJe{ku{WH)r?gYhFUmBt8?Ba zHPNMR?(+FJ<~iP!{Ze6gonO@QM)Q1^a=pf*6FZill#}+hQ~xOxes=DK$Z0EO>^~c+ zUXe^zkx)2uHTYK7awYv&62go7rk=6gnHP4tR&i>-sJGFy>>G0hJ{|wWcDJR)L*-}T z##rV(Pk7FW{*yX&u6#@`qIkGe!>PP^!L{)@P^ z6Q6Kv)6@_8jnT;$1E#IhjoEeJt6AkHlZKPpoj2SMUihrbzu`02w0b|Ls}G($XwVRh znKy$a;Rt(U{>2U3c06v8S|qot-FK(BcW1hfq^OvZ{Uia=L^Iu`Ti&?%)V+*pzvzD9 z4eOJG$D2aB{_-!$;;cz|sTZEx%eRE_Z^-H8xo2v>KK3%~v+GL!6j(C#@$WgB!mSoh zGB;)EtPc$3>?`P2;X5mG&p`e~(=M+9^&NSw48c*GR_7>ZzB_TGP6xotk2itI|@fuy}1k)YCW1Z6B;u>3Xqb&THNWlRetS zR23t)`nUPCeEM>8^Yim{zGr5?5xse5!t=`uVi@XYO}^P38If`@kYR4|+o;7{${ra7 z5$ji_q&}N6b^eC%8QrsHMXoc?p0d7%rP=hG5!*eL)+5?{lA@bV-O-ThnZHgsHE3DD z?rA*1hdw1IyVSgNGPZW5*(WS|)Qx0|H_RG#{TmNv^m;b(_ zwutQ@1LK_Ona!G;WYd>z=sJ(%p=otqLJbxlGlHioloUv0@0o>@EVz9d;y z{{D6M#;(7nL@8R|*U5757cE7c7ZK+2Q$HG|3wAlw7xlgermp(_yv|Iu2OApk9Sfs&S5rk zJ`Y4^`fxLx3fjpS+t*qzr*)%??{kUlRymu!1wT|`woYB1U-9sqihMJP@s9hqK0Xw!Tbd-1a{oc#^4F$Cnh^WFGBrhW94N`8n`? zY7)N0u$r%V#+NtVzgi6SGS5y7Vz|`Txx`Jm)k^tL!^EAdosYNNv1jYgJfq?pB9^Dn zxX`;K(%$5VU)=;V$*2oVYImJ4FAe>mq{Q1U@PRQwOZ}v|DOaDv_JjMG=4ph@^O(rA zIaPDr{shf+^)r|5$kSY|)v?>~xn+3LhV$3;OQ%CbM$;Sd^>;D$hgo;{EgdL=Fdr5-<2!{dd`|GWtz8o zuVeT3sy%1y(!I5`mb?v`!MyUE_NOS-^>Srt6V7mpD<8_vYK^2Y+UriZCTXP@Pa z126OU_^q;%R^O__s>bu)VuBL0ReZ2~$dxa~T3ZCG4jV3>d6)Ix5rZxMk!`GoEw8k8 zA7z?a`FQ75rBmn5PF<9G?wQdh0Spqx4<;^~aW=wOi+FZ>(5%E$Hrit=V%WBTnRrg)pBiUV7!~rsBY^)t|Ik zwD{M@Fr`G?4P8D@? zL*wtY(?p`)FTBIAW|5VkENHnyT2`lZ>F+J72_Yxuy)u2eDzpD=Pg?DnRV^$vjvw0> zp1aMt@0)6^%GLL;TqgXvX4k~9+V|j(%g(h+_5b#+T_BXdJ)_vhz2#7ju!iNc)th1j zP9$(jDD7D*$|9Tfz4qfehg%IyPo{||l<9xdEOnIGBHteUUPNQ=)SVyJS!tVOem?3@ zH`y;{pX{rZnik)-*v9`9lf7ZoV|-(x^P?4$RL$F^l?wDV64t4&ZG9#FBEt5U>W|Vz z8CBObR%BegsWFRB)U5o~bEnyhgA;3SK8tX^gIpY0jfNLUY!xzh;=WJj(XQ*%czD-*`5i`R=p*cFUCN9$njHnG5$?BDV?cn81-9 z^fK2|+R2h-rg_M-pfBh5Xnj3quh714qm;5~=foSw9KO}~&B?#d&i;)tqw@5Gjm)|_ z=UIbWgnL-oV!7&se{H_W>#tSL_r1~kcl7W2{}0c0U;h5l)Y9kN3CwLz1GZ{Q=oIB^?Wv4@#3v(nr2IEG+m>&gQNCC-t#Ppj*5pocb#04 zEv=$7?N%@CZJon*JXuL=T9C_fIb{J}*#s6w`wc%2ovVuq+&Th0hRT1{#z4#k5{kjP+TQ+=IsdMy@gN5e#-aaCPc@-`(yN7kA#2MGKPs^8^GBTB%IvN(6J4s7Z>S2v^wk3bz;im7kX{wC;pXsXq#m+R^?yv`1q@}>iR~DS?4pm z?DM_0@R~>Gbc@BjIT_7x{ff?kmNjQ)-4awjRxM{>C_ejYN$*P)l~S{t^=FRuz1*aB zLGY>N!e+mtFEwk-<`rh;ELgbx%Ji9YC8jC<)BHK-NXVsSqFc-sC+z#Cx80NFSb5vp z8siR&veZf!%MWL)6|A!M%jvZ13O9Lis5Wj%6X0Sy`6z4wPi0wMO99*A}Nzo|CKMicC6Z6<78md0UP5PEYf~TtnGJ0Dj&1o>*jy@+kIxQk?x(YJ0>Zs zAH4Xz|H;ukdseE?C^&HS+V{={r(Rc0zUn`}_V=6l`=7jh{{Kndo=EpIM;Zf5V)mZ0 zPxX=QCZLF3x*1Jr|mSn zbbiKW=Iwi#ZuCDd@Veuxo$%bmmt)!e*((o=21~g9=Q|>MtuiQrRiq;E{7pp#$N2S2 zoc^%?`ua^r>cG522O+imRj1BgHBFN_ILGYb=I0DST<6xMX4;8sGC!*PV!5)Y=;VYx z_OE58+S3I;TWntYru>O($h&NLPOlZrx0$~O@tzTRWE{6c;u>f9+AWh4=k>G%Cs;Oo zIKl8)iRp-|MUuMb+$Y6BhXR*-iuPpLh9~adJSWGUbI$xP!bJ~SUU5FSul4w#xzJzD zpIljUnHUUX#o~`Xn=R?>Ecu)p_MRb>+_7BN7kqXX$L3cHqU4y22e>_n+m-VvO$mZoxNI$;e%=I!T=H0g+*M0B1UABDh+ao)-8SgE=W5=Z$ zXl6ZWh2qK^_vZZh-d)8Qz~I=mY3|FLd&8ffDbW#R70?h_#TDxRcm03SX6fGBcFfz~ zN?eJ#vtgd;(k-tGCtj>w`RG)#--^`F4Yi^-Efe5^ zdPVu+uGM@tHCul9JyGQ_l4z0{@I+m z7g4#J4pyvvb9Y^bJ5T&0qso#qyGqY6HVGxOiJ#Q@mUC*x8@4whT*^Q9uitC>?Zmose zz4jH)9aEd0PgQmKU!_@>7vU+FJindg-_L#TqV;7b^S$zX@$AyS_$9vYqLjBVhlYo5 zHVxlU+IhdgXtwgqXA@%o$t|yr&bxnQ#t(keGTv>CS?Av?ihi>H=6BtH_IAdEOD^UI zXG%@a{k&x{TbR`HZ}&5={W-hir^q{ZfsMO(UQ2wRCYP;${zl+l>5{0@taraRmY?Oh z`sc>Mt1PY8BF}%?p7`gh_ZM-~AXyQf)vpdLRLS$4dMrx(n}DT74SU4#jc+2I58jBE zEM+{Ie5iMFAAfn4!OIIzvTX7yZaw$=>yofK|5#DMUUv(Y>C&HM_rKEnzdc&@RqWqg zujSP%wOK17rYyL7Vtni)J-c$v|#=E zdi|N+gNF*j*s`Xswv?N7YH8K<0)%~BVtZ@te?EIjk9Tx0y#)w}Iu+3sKF`F1mEV%Byx(|zatEGAcGoeSHc@4fwW ze`x2v@Rn#s?^zS)uK6t5WcKFM(ZWCT@`c4-@^U`Qn57mVH;K!esmE?lNAq`+NX7CMyi**2c2zxMNo!D@-^)+{0J^SHzpE$k~hDt&{|ZcU?ZoYxOF zj>^KWkAK&AuN4pz+oO9){Z4G`j=oczA6ERDBdNOLz;y%t2ysW>DYLvZuC+W#unb$O zSGq^%(@8F#^(sU>$%fQd-5XdC-BX0e>)9*9a=-l~y zdGB`TrIx()cW(cGX3Ci^RVKO^Ugdrn+0)*`t22k$A~hg1KaGk;bUZ@WQ-|D7|)}A{xyKKb~_AKFpUdLZQna^uJw{{l)<|OC)UC)HL9?h1} zy6{V>(6H7as#xBvfSXuJ6IPhz3kM_xvaW4*p-_pNuI(+ip+6~zu`nPYK zR`yB~K78rek^H_sUX?x15=spIZ!0o;&@X&Q@UT_J-clVVWyP|nI!Q-HX#r-9YsVz5 zy_|mRyJLOxZ{4w_*S&AMuKML}8dfC{ee6%E{)uKr9^>>s|F)jk>(>8JHFvW}!S(yA zm3!hdUu!)0wkzCS@ksmr>yuh+T)ro3b-mA=y?%lA?%?!{9Uh*V`VVg(eVBGp?O*i9 zqgQ`LnR4^Hziz)A_c7UQbIH~@4t`3_-43SaUVmG6F$!4z(ml`|6qFe+Vv(4vbXhgR z`RWG-iyU3T&lZ{S97V2$I}D4FPh(J zO8@j=e{=iKK{mHVb04wYyIOhF=Bq~e)S@dN|FErpBVP9BrplF{N4rlme$p1%aVc%@ zYwjpjbb9$&3lnr6=1y3ppDO;?=L=9{U%Tq2h1v1j@V&YbW6 zT`s9_|GzzEyUeAwUv4|86>k}wnmemYIeatc=}U$axSxEOxif43JkHx|*V=B);6t;f{!WsZ#N_Ky>99osID*--xKO96=hK84b#W=e1q_UG(o3aH zrmbeUz`eck`5DD4!rceNTVKiSIxtV}pxJL*mwWuy57M1HCc0Xk4i8=6E4^ol-RwMe zo6URG>+P&7>vz>#*jQNo{XCf=;^njo5pI^3>X{4=*ZL{+x2`die^vGW@5`4DZ+~8B z&QhPW&1~VxEq?xf=dAbj*O|z%6jfP&m-+vRo6Ye^@8YK`CNJR-^WlBN{iyt(qqtuw zi<5Wg)wau$$B(M8FUe#%H6h|+!EOGpyRTKtRLqXvy}wjidEV8KSB9J)r+OzO-U@i+ z$X`6s>AR12?g>sVubDx|*9YQKkuVei%0{%@lmL>}_9o>#>{L zYJWF&TW#X#38<>GeN`u$qrKr}Y#f`0n{4Mxze&G@*2Y?k@ZT*A%`}O$%vdS%m-};yv{K&BzsdPAJy7v-m$h+lqK0B+ zmCWAS?{fUiAJZ1ip8Wm!2kQf}QD!Up1?+g+8(z%#!@1_6!S!z^{9bRfol(C1nvnWe zPc6UF*puNA50XC>O#KwSXs_3{B+DZ&9FCkjoGzB>|97|cy~Mwdd%_+}xE!#xV6Xk( z!c8p+4`TCo@18wHe$!3G@9+I3H}8&$SXE!GZKBn#sPlWP=Ss(r7Ynvb-|AdazV(s9 zygN5o60Z0xVkylLV<s?3$di_DE)#iuwu-xkH|l3wYDnEt(bfxV_!NBXTA6SHX%a zUmMmM*ff3aY7FDI-Xy@weO^kjv`+nTX(o^2$^TQh3m%vn9%4v5*{`~Q?Ir78&&82` zQ;jW-$vakksGFkIE~5D<@$-pgu6F%V?d=6m6!ofZ5t;5X0V--~V^{~9V#rPr~(L1=Hhs*5tFx=Kyh`zow3IThX!*sm@0#d7!#4^~ypK)`;Ll(3_*TF2 z(Q`zL+`M>ybT4mMsmRJGF6Y)I#d zCEHavZcLt^^_-jMc7;=F?ygO%<9#z;JarJ)bBNVn7Vn4pa z;PNk#hu@xCw;wqFA@EE)V^P+j2}dZ-g23N^piF5z^Hi8GHsbaIJO@0DY5 z8$GToM%1q8+a}Cd_37872Y0Xfc15yoy}xRv%ioV7KI)tyvhipBzCSbZ=GDbfC%J-U zuN~1#GE_T#|66ANQ(gCVW3NjW0>2x6Yrn=Rd(dOU`uofLow;L=eiD&5rN^#Qw4%-6 zwA-drGmGyZQ<#%`J@dNf%#hHFmlZB=A);?N$yzTba-_IAvpIm>#gt4WEM|9r3Ie$~-pVUh3wf+$o z{=YH%!N)Ga|Cev4#H@5qoOpjhV%)PP9*wENs=Gc(x3p;U%9zEu_FpPV)Z+8KRJe_$ z`bF?G4z8H%ftkVKS-*l#6mL&I9sKdZ!dVHjkGlLs_Izq%Y>?}m_x;qq)_woPSf((} zJ-D^bw1eYO#7C_a)tSdKza*&ZO_IFC5Mgt4)5+NQfEmwzGMstpp;@p>mp{!?^5Nqj zn}6kH3&{Fbrgd4aJH6F-g2+9WBO$J-Q}q@{+WkB6elf=*YlgtK>gOgUKdokT%?qD; z$^G(2cdc`o%a<=%ETzRzsKMuA|8&6vE~Sb~i}%``Ty|NcFD&<}LiY+rr&ZP>6E0mn za)+f#)%;XW%Yk#5SDFnK*!RSzY|r?dqnKf`v!viivduDOQ`e?bvHQBTR!!n+d}sEr z=ulyss-f1i7mKIy>M1%pw4Yf0bH}xLiV|mpjJ~TYr^Y_b*f7&zd(VBXm`EZjd`mN?}zPDbKBW;mF?fj zhfeJGS&wv2;@MGlt94PB)2X(rNj)*%?<}ISXU)_4IisjSFx97uo!` zL0am;_jF^;!l##%Eqwa6&8w?CY?meWgj++a`NiBv=dQ-co-EfWmSqt&<*Sf2otc&L z)Fx18g5Cm)rkLQZj-UQ0A2|DfPk)oPjnTnq&n7qZ1K$`l>Rs7m?rSbvuwseo75_!b z%R)BEr3uzJ@mMb|x81~cO@*n{Nod2#VBsjP1nxDv7%wbHTkq<;bmqsN&Swpxhn!@% z->`nO@_T7Ijd5Y3-zVuS@^^$I`b^eYFyt$)j$L{1V(^L-RU3u?^}4Kgvs>MuHdx2b6*r~O*qc?fGdBO;MM<2 zN>sKOX^C5q;rvFTp;ndzFgt^eW=v##bYzVQ00e%8*ptgbmT zWD}KaZ@pp3S$RJx?ZZ{6^k+&f51+6$RErt^@?=PUwZvle0k+5AZR1zY^%q@#XS>*U z&!&YJS021qT^C!}-kPf7)x$SosjcOQ`<{WuUu=H=Sn0Wb@e9G8*v&T-7543!d^?~% z?d0@hFB8j@-sa5X%?|us&gHw+>f%Ah&*A&$1luzjh!%t}tc(3?B_i|0Epo*)k=ISe zW;5ED#F`r8^#U)4d1!WMJlnTPs6|Pqv;3^M+^mnHm0u&X9S?7HoH2ju9AiE8$(Lv7 zd~!8AW|dKP+C$0D!EnmmJ>h$%z1i*eQF59B`}`u|0>=~2oder48eg>hW2m-Yy?Duw z=w0tlJ#4hKy3ZJ^u}bz)U)r&v=(W86V&bi~JhPa8?9bHB_dBAOSzk5TPzg1i3Jusa%jbSeCN<;zbY`LoZL=pFv~Yu$;}F`17l&N(fpI=#NnznK5+>7uPZ z-7j;du0N$wx6aIX^`Qm3w34})c}|8LJmbFg?$dj-UL1K7Clfqp@9Ax)%*q}=Tu`AL zmtwuBBi+gOY}jozgDXEOU)HSeGI@I`RN=|26J8x#RVFZo)4c&oR|+osdO&vks?Et+=aqPAv;===$$J-Jp!R%e@L zB{>-99kIJm|HkoKu*Yp>gV}9)?P?;smQC9_XKnA52-OJZ^S81*%Kkp-2+T9^mAg`_ zldd&QC|CYFSCz=K)346$)4wjW$m^CX>rzceMn4}>*MbyIr+~FWEQ|QelI9yKK3ipf zLpCkufz^|!A6wq7TtENe4}-e4?t?W!zfOB-zPWl=VaJ3rcAYTiEaNS?PlVd$PuTn3 zSM6Fz=5~oIR@$|OPX*c~#LW8cL|j_V*4fD&@{F5r^`VQ*uVmQ7v;V)ia7|>@G3M|Y z(`ww=-YSMM)_l+E?b>>I)3J(`FLPq;VtM90xEHb7z2w$}?^6xVb{+K7=2v*ZD4)25 z|G}*31zZ}L=Vw2O|7tYt6W;_s%Saur%Wq`&ultUe3K+ZLQT_c)6aV_o?%jk8XjNcW-`ns{N@u7w=lb&eM9?C(Yy5ZudB{ z@}0)%*EOtr7NxHA4zYW6itW=uArZ@a=eqV9M2PKtbhfBt{fmyMm)z@or`;~EO}Y2^ zT<(M%&f<3UBQ}95lcyE47{VeSSQX`MD1CKhpb%a}QA=_e+qEs_&-sL<|g3pyYwnZ#Spk{2T9 zGvRZ9{^erfIbyqSMyNh_3ELGp?X;8Ag!*eSOVXCCx_DWS*T|{zU%=-zp3b?Mw+?3{ z`FLF|5x7wORlUH^seSGF&W$bUx{r^x z*8|<|TT~B8alB;Xh}ST_e`KBTeXGw2fv-|Lk1oIHn8K%cA>rk-#)w!shqh^)$D2~x zJ@3@Kve;W(%bUJM_;0SH*Pj2!qGhrdEn+a4rWdo~*@JJJ+cp2Zlijdxsn!<0@T+-G z7?w{|XlvT*$T;y+T+P~kJ4e?NX*>RA^)u%smKuj1ie!KBAu!%4ogOIECV zeXikQo&QG`JkB?0KD|5r*b2^HtZC=UR#`==v9h?Garhh6)Vp|Vi&Es2ncY*rW_V5M zJ@96gt!>nGH>B>=QdN)pYX2 zJ{87q$0v*XpDsO?c2@b?Q?o|>Ow*?edcT-h9bNC;v+3}IB})Q!{j`bHGxXxvzOk2+ z#XrQ*?RfbWZ}#x!6G<+UQa83=znV-9E^cH)`Zz_ie&<>5MG(Th4Qp3AIH&)m08lx?A! ztLozQ7TZt%;R(FueQG}g+k>OWr7Q(*Jb3W$0Q=n;vs4spZtpS3-dOMR{*`Lx8{Sp_ z|Fo)9NZy;pUpT*V)zWQZ_ul?rktnNpf@`bYt%QWcuzT+gJy^oJ;>8DP?PYSQUM+_L zey;v#acf1@+0)|s|9+fb|0h~^ug!+rkAM2Ex%)Lu{`ZY}y`Oj*4$k3yAHT2i^OuNy zZuwpJmV`2{)ROo9?6cDB)%`Gm_ng{`T$Mhpy7fKz!_4F+`JBBQl@zU?E4>#mDWlt_OQn0E2s=fCOae_cHJ;`-m`AL>7_FMmBjsb+y~t)o>^ zL4UZ1(5LkbtSb-v6#o}d$UFD{(F%qc!Vj!o9Bt12 zzipD<&F@}IgAQBCI6bM!m#Y8&?`z*qt^{#*)t{5R-B*A4c5QFj+qS7rsXBe6Z;maxYT4xH$U>_ za`?+o+ZC`@vwf+01;dFI1x^VHuO(g|xfdwH{?l|7kJ9(XV$hVPX-m_qt z@ToPy7Uys1vHgF|w4ps`@r%eWMebsPAIjXnZ|>hb?ae-|x34Z7$$KC5f6A6I|xlAKZU!R)f;3>n|p}U$aA^=G}`o zoz`2w9iJ-F`kSNgRb0#~i?<7^d+t36-(6Ao(sA#KdF(Sz8ox}9=5-D~?-5!gHTV78 zza?M3Z4Iqheo|(Gp+exsBPM=FZ!CH+|5x1GSr>gQ&j0D)@#(y5;s=Xe<4MPY zO~k%hx$c)L{0^}X<6>R znBc8C5n<05pO{oF5YKqAdG_AF*^HXOUWTu<7~9Q#4jb5KbN((~X z+&pP}g>l1C33Er|g`JigN}U$$dZ1u+w8`D;T<>d*{tfb)i|m;{|1~oaOj`Fo((~@} z6RGkVM)7AG+77?#ntdr|FSA|Or&__b>sH5)9M7?4yWn^=@NLp$|HJt^t~PYL{Icy8 z@m-Y0u;g0Nw9_Y+NH(w9U6oW)H)E64$rli3a_ ztaJW!aLX5?t@EOHSc-cUv#j;wS?3tuV5)H4iDg}Dyw-lB6~EcqZ7yDKnLQ;*>4ZmS zZ{TfGG!O`cxzFpEfteqt3$C&ni1L0&Kb(0`h54Lcu}qu)g|?Q6Z(iM( z&&ZtfTl)D!@v~c@6_JNIw>4^cE1mTF#nAfevg#_%CUzMP=Mt+|(vJTxnQ~|}hP&Hw z%C$?iDPH68n5TcW`Bi`3li4pL{3os1z2y2WX|dhB4OMp*CjS#Eh_={Lx4 zI?y{SkU{v8K=bC^j$eXj>6zXOuyel6l)oUXTWhu<+cX8kbK${zaP*uj#sD zW7NIxck>KR9T=0MDf0;wy`X6}AKg+jCX&=k<%rlp} zbf(+^$w#4|)uD*FvaqV;26ARvNTGI9QR%Dy_yjSh>SOs@iR8}e`XP$69rCZOw zRNQu>-pg6_*ST6hO!@NWa&GzRUrHa0oUTmQ^F8onXU=@af-FHETUoYaFQ5HsIO?J-luGSB+igrR;e77kB@>F7)?Is<-tH=UVBLh0B8`?va=g-kbMf z^{u6bEi7AYjA#Cs9q?;?Y=`5X4r#X9n-72Oe=$R>|1bY{AM4M-pZ&R=!+6@#B(|3@ z?7R3?qCivY*MHd~TVkgQ9BrxW?)fbhIw98l(IoNJtVeX^?Z1sg7J+^Csh6}~*Qpsby*F`UJ1?57q;1GkdC|gS z-ptM!q7~`KK3qE4{5+!kqJxWwCaab2B`w**mj5)pA1sghGQYFdG~K$F;ji#gn}6Qi zD*r_;Rj98vRO@EC^J|CE5zWs6iHD3CJZCLy*!ymOY1ppUeJekFxwhq5*Z#>I3BPte z;Qk=Tq~~z!X;ataBni%A%WpI~9?y7H{CZ8`DQU|)+gyTofnes zEYZ7F&er)}N=hNAaa|Z&umX$i(JL&%XYC}vW>|(PF*!Y8h_QOpYp6JBzc8bH!I}H( zh5G*YevVlEgtgO}In#P^2d^;aL)Y1fzGfwLOxM`eD*2CH_nPq{g3aZ@()#IDJ71ih z{rb)lXAW6=mP6d%jM#KG#ow`3TKj6{yqksnHT*LpwH$N8-Z^PUO2+(Md3q~5v)anJ z9G{P_xOkS|=$-l;dBre&fwQ{>1tvW)sR-q`%e_-%4b1TDPCx%Jf(!-8awj>(rF^{t+^ zU(Vy>h2XCf7%wMvvbGp|w#!^AXszAG5>dju-LGxS=}X-U|1C`C_+I&>_Q5NIgavt5 z&dl$f(DC|k=sWR^=ki~<+-v^VwT^{Jt?XJD`$OpqiI)Xbg!qBU-Zv#}wdnlT zn-47ht*sJT#Gcb|Ou#Sq{!7pERSsWbd(9`*6kOhBnUZ47)uv=)uyB90_-*}{*M3>K znXalUO5D?IWL|r-=!Dj-H|J9H9Ujd*H`B+fW5FSzfZq|*#Z6uxUH(V;p{ZlZRI9&? zY8y7Cian5GXNumtE?~Aw{&c=*t>9y|EzI0PLXA9E>=t^7wH!K-I%QMV1q~&=M{lEj zVk*An%x=@GIsM&+qscDt-<7hRvo^0a2xgw1(YEiu--`n~#itvbTyJ@+#VCRI!Ll`{ zO(I2OY&|p9H(&T!_jz{FPy2VfuEqo^Ox@Y`JXudor@=sKhsinSaM4Mn*Ro#LnbrH+ zS0||LoO*s<*wXIK=8~NoZhFMsVtOjuJx3|y(OtEfJPZ3m=e}<93{~weu&N7guJinDz1Y z{*CL^Y|n9fKU~OH|KirxE#Y~*(lZ%Za&K>H$Z)cbw|BblbuWH}<&HPA`}QX2{dln= zw_@qFqHE8r_+pms>h#XettfTQ+3H;9>)Li;v)_{3!yU8o{+&5v$+_U>lcEh#P9i@3 zekpHTM7ZC@*}X9N`}$L!-l;Vmm)FYau730Krf*Srkcj?{ZZ?)(u|=}JEm;W-+bypc zB~M5xn*C}=+?9}td{!59*n{>f?f=g>U7~H;=HRv0*+u!}YWIjXF*eOy>ECg>%75`> z*OH=de?(tA`c)P$UUWJoOX_T|pOEjO=EslsMLUVl?R}L!JF=^;BJG@2ZshCyM-}(Y zR!2^rdU#Jw=;|wOm*3r=+qqs-Ha76l^i{gvvAfEYrI;Kt&;37QRJHKWd6nIvlPWnr zI^A5pr7UyHM-|ltjn|g;>B*cuI>(a5>BF5FS!H)uhMzv>TqVPuU-a=sTx?7CH68ux z6)Nvf1tt7RayCreD(1W7tB{FF^yRFzi?3F&xLOM?tTxYIG5MM2Vk_rTyVxE4OPS~Y zt@w7`yzp?qi&IYdT02%c=A`BJJq`_eDw4G3ZPC)!zjJiee)>v&-C(d#X+_ya>#RaC znZ1?eHDC7jZGN$1`L?L-+mp@}PMoefU$Jhfl)l%~FHhd^G{4-o@#44AxUk)`r|D~pzWUUO?(s{36JvzI>vC$TV< zg-lLRtdcr)aY{F1w&gYRh;=86BA>h}VLLo4hRd_s zq|)}CTYv0r#IlN?v;OT{d6K1^=k%KF{a&k2%?iI8^e5z2_o>XAKbPJ~<9oI3cX0a( z9!l-J(@as!eGfz1z^=Lta$>!hltTxTr^homl zx&79+-f#Ll{pOCuznmQlPEU!Pz-ys;K;qnC>4pgn+v?|i-TqQAaJ9$VQ;%~t?t1Hf zThjH#rMm%qR%Ku2&sEo3&b9x8m*ezh_cUCs&gPvx==h82zoXpo4elZKOdMBK!?r%l zSMw~KthsOb`qTf#Zg*aDxh{3EnN3Th@nln?-VGn;)RJla{{tQs_8uu}UC^V$&F)pR#V@YO`ng`KPyfFoj1>%!;zNIP=vab@_xuV}DM5 z-Malhb~NzRZMt!DeaC?Zg=a5ZJN#xr6z_De-CG2A26Ua@%eC-2Pkg;iOly;ZgsJ+| zESFbWVO#PqGVfYxYIo;!HABvtFov_sxA6<9?Aa@L?3O}}$77zaz40vF3g-piQWTg~`?^)TmHZ5~+EPGM^`2ADM8`5{; z`C0AjjQ8yhieI<7OKHcgND22jmitSd*aDVBuRdze64w2< zeR{pro(jW?ukH4G|D1CdUUzne@5U!}Z`S8|m$@2sDSE|Ccy+D9ieoHc>3BU|TL)?|mh(hI`ArQJQ5 zQ6b1A7R2Q7cWJjf^Jj-Q7C#GO9-b{LWWM_Kp82-`&!r7@7nC{^wbRd~W%3pZKmL?` zHJDpE<$R&FoBD!>7KLiBvxU|#_%QP#o5T?j=JvU@{QqS?u4Q`0oAhv*-GaGJfihj@ z?J|af`Fs;sFgHfpUi&w%Hutx+_&Q;)$!14hH^_S*3R)`nx+YSz;q&(FlZR{fTPZ)t zj*HE^6P=`}Q@7M%n#9Z3H;m>?6Wha`Bgyhq^?<+x`PW_S+p4cjd?BUDG{u@Bl0p8N z`I{%w{iY?lDoF<$zCHZ3twr(L*GVlWg0qgOxc>AqytINRz+*e7?v%izV*6$;>d-u! z-y+&Ohp8fC>?dv^ujGM*v?Bv#t~AESlts+7A(U*=q( zSfcOg&Sus7PCx&O4G%n4t88Z6zl3Xp zPS5A02R*Ot6@qG~g-JyFK4$;xapwCG&Ge()8>3zvsFn+OBo;4pJLKapPL z^0Mgq-gdud&cpVUh&y{Hteh`2`FVoJf!XIi)pU9(taz%Lwrl+Z`K!KiiYsJ%wLWVt zGSv-Q{iy)^wjIxR-FErEq`Nb7F zP>Q&~nklS7o)b;f47FnQ;^jhRIxqTMWX!4fbZb%gq?C)Vxt$V!-$?R(wQ0h%#Don0 zS&UB(by(=ki9JyCBi&igc>n(Bt8vA~^OiO)klc9nf!~7g`mUZ&w|<>}xBp*ObY1IH z^;P@NzB*j8W$pfbO-!{3$#xE+BG=shDsM2+tG{sN^p6`tId*alKW>^G{!{Tskt06K zb!B79x--3kH6K*`)z7_rE5+=;`19mu;XMbHODBJE-0#jds9cCXOPiv9Yjn?LXUylA(q zFzs=c_!$lTAI*RE&ldb!`2Nd>1-&bZ`NAedT@t?Un88vj`J(&v(Q8{`u6ZfXSrO=P zzLtwiKqfQuBjMA(7U=%X!22(IPI;g zIG04RS}pC4Zn-G7OFHIL(A87Bo*c6K*`Y3<+`aYTZOPv14Y!YP46oyt%mlpU-X6zZ+k?m)zggoq3`E zo7Prt_bkB+XS-&!e+`(jW8Z9DmhjLoPUb-`4zGQh%F_DGIQ(84(`-(yyTxajN?0W7 z&PKMC_G~e`zbo_D-JhNIcZJU$>E%6Am}`8{@!gc?FZx=P*hP-m8wP*u{V!y6ZRWAl z@!YQUHtk0WK6ksZ?i7gXdbdD+WA!mR-4#Xerb(=onf2z~&AhcnLCmgCD#Yih#w@s0 zD3cqo`1F_P-LDH2B5s}JO26pVQa;x{I?LF!Ve^L=E0>f?$Nb)psuDl=kFN8GpHux} zQ{s~u)0S&I6l3kKDw5j2_&a;*^UY5V@KhAvf%ntTK2n*zi-93&_Vv876~Q63-e)Y`uO4L3O1x*xJl|-^U7008PbWrN zhMO-4O^IQ8ZzWs5MYK3jw(<8&&$`7ab6*wYt@5Z=aa26`ZsB>y5~h_`t5hER4>xhY z>B5=b(B<-_`b%WbA01s;VRqk-PSOXyOj3&1Rg2Tpqknwkv&L4<0zSotdwbucM~bIBHv8_geP`6?ve^PRSLJ$G-#QQ(YrUem zI&g08yN?0)=WV<iO4H46c^THhfjv@ioeCvb44Kf2X5? ze{MP*nPPfAye{iX?fd_h5#r}e9Oft&>*gg^ZExH%U#HG&iu3-tyDK=qccm8zyJ^JP zij;ow5PUc-*_`izm^aHpsk$%u&MfW+S}#W~6}HuUXIJ(4-IFhK4&^l$9ym9}Om_PB zbtMO58cpYw$;t(udi~+Yi?{ym%a_e+Dad~_yX0uezBTXOxLRd*r6_5$#`Mnk zd}!r?Xq^?cO;N8`U%FDAx*(iIyvhDV$T6?x2uaaHv%7L834P+3mLq;;LvrxexWbny z)pPtW7~1=W8NZPG8xmqT^|M1jx#mxU-X;0}Rx0$Wt0kV2njC9>w7GQ3GVU+c%O~&S zytQm*L;lqjET)1&+h<5jmwc6GQg(dh+WfvRIyVKoc8J`&zK&1x?=SlUM@8>m(f<5i zIQ)~4gVTX|Sqqf4vX`V=*~kj$rz;0|m2IDJuYDFX`|A~{AyzM2;S`E4sa4`&>yTjTvY%KX~Sn|CfVhiJ+@X4Wv-AIqE16f;9LhKo(@bnRx{ z{+rvxE$8m62%oSlEByaz-i)NQ&|lfb_YJDM=LpA0iJyKyy|DEFzl3dlby3ZyUr*u} zhk7p5js5-o5r0B?(z?jn$xhQxbP4pUmfz?ru9rA_$^Ye<+f2N+r^@P%%(GD6d#Q3` zj#&QB$hYemrP@y!U!~ z#M19LMc}m=XGF{nKi(3)uHbRck#D8lbJ^ZHEWdW^ z_Mc;E@_uTsr-u2@oWAAUmD!>qxA*$$`fwKfu-kMpap}(BwqUuhCuJI1SvEdqPMu#< zzpMP$^@qFnewGhhlc}k^T-EAfe!XkR;mvnS#6+$lz4G$g>e#v8=7~;M@?)8I zBK7L&4UQ(OR79`UnT8%;6e9IRDL&`3wsOd7%dY|)!5x=b|EunJ$3idldDcW zKN)J)Czw~P{>!fYcm9j-Uw0ZUVY?{DPRp`A=G7d5 zDHop{Y1jNAuVuVyrR$Tc{J%qD{~k8)edOn%l`naSGgsh8-u58RK4y)y2~))0J9g~i|RzDm5;cf|EcUqbIqXP(t&i`IHvJj{5BS2NE)%=?C#_fnOmt(y|; zbL8D`Z{}C{@yhg)+3Kgi_4QwWP5JtzXvg;nzgxX77{~BSrYSCX{q~5nOoi>Eq(^6a zb{}tY4AJxZR#nHVb9BjVtrz~yy!U_1>TS8Qi7O^1d-(<_wH-eolq$X0K*W3dgzK(%rp`?} zK7CqqhJCz-?XpKVA}-||iFP;@WE7gka#VTimxiTk3O9r{tk;~rK5^Ns<&Cf0FI}~g zDLmXX!Njm92zh5EtfmAgA7Pn>+crYy1d{KM@EUJF}p zZC{sOu3*5eAy92NS#5bxuJ_eHYS9ns4pun1y8gdAqu^A*gMxt5Q3+Z9+@wlR1Tx9` zuM_1@JvXtAyYJORtA)uQ76o=oefF5WYk?WB&mx`IT^30@HRrqCpLPA=RTQ@-lgWrE!FJ571wsIT)yme?%_YTM13QV%!_-xHLOkk?%QPd3gh)@ za(~6=gqZtFgr5w}@;$J?eM0EF$Df5w^JM)xj=MWCd}E7Xp1!wx-;tvouYOI+BCx+L+jTH zt-S4Jkn((D>csk{E#bd&d>>8`&exyTY;Rs7FE;H_-A~PyRXS>(iM@H*$77$axPD6^ zWRG_AlKGdMGB%xj#3y^RdE3*y6OLwV(Mox5zg^=)%etgDRooWKt1sl(x0Kc!-R^&J zBG3Hb_sfDDkG=)BDO=>-j(xt~fo00NrHj9x-@Ht9ZzS*-({P$mJ^x5rjhIh}g<@Grn@=9rC(t)JH*O`|mCce73$I`y*TYPQ#>!)s080YuIChN?w zt^4}uD7VXjzv=(nr~bUUd9TGmhiMyUm<(Pb-}8Me3lbYfM_K)`i0Y z4u&}`kEbk^ZSi;J^`1M?mG4)_X4$VZqn01J7Wx~~0Na!PlI&ZPC)UQd+FUGG5=xaO z&baf-uORf)M;%|WDtnR4S4>{lR5!$L%cz{I|E^@=MTwQU{n`N%j{@Ah|GYasd3(L+ zOr{C@Ht?@Kx9~GxPhYdh+u0Wrvy(WF*sAt3DoW{0lGd>GeD;B*SS6}$*~LqW?H`ry z-Mf}n@a7AX#htpqJ6jAdDjkbtEGx>1JsK16K$l&6f$Bpiwt_!7r+zg zk3Zh^{W3cnAbMWZ{A)?<{U2!}$!d{&_0=7zH-9|Vk@X4ttoq|eae4CQ17$mvBNnUw zSCKGMn6UmBx7O0zjoc4!=GkPdV7q>I&h`!Wwp_n;t$NbAgm)Tt;`<~H{C}9BcYF7j zYyTbo_S~zin0AWWOn=8h_28MuColP(;yY>Gy-Tgr=Po!{EPU0s zka_8m8&}e{wWfKlmhM=t7skyK>hQerb;|QeGhDqKnkBaR)Xi&r@urPMGVW1V>4t3?*K zkGHKbc32`4dMsM)asSDwhu`+j-u#)fZSkI*B|FX(TiyE9x{38tX=Od5Xv#F*>E*tY zIaZ$h;*w)F>BGl^suNc9uIZ5wzAMrk`kZ}wQElGN+}jU}p2YllG-1{Jw-%=koROOP zbdzlYHxM+5gTrt}@>5 zdz_=%wPyCNhU9a_Vv;--&L@{$jaXY`m3TY2iKq05XT?KLyS!wtx+n5;wZ9t3ck1fy z{C|G>e#UsG*p#Y8GmQ;Tg!n3j?vcAt?{eDUz2~*I^z9!XDwJ>ER_}7n)S1t4eW~`= z!m|7P0^6=jru>Y(=63OCjLy|={m0(1Ta;E9U&~uNt9;swFZYv*OYPQ7RbYOXq|fM- z;T|D!E2jP3kFN`Naz)51i?v1M6)o||m~opyx_d9H=lUD3%~q`V&|7Oc^ULdHw{9KW z!Kdl?{brs??{@py>ic(;YUvcNHCerU?(wHBtlUwOFrmf3nmzCNSOt0wVrc+}HZGJ$8pk^TnU)m%^_mEwrE4Q+@jGt_WTh?=`}mNsH>aJ2kGYS~w%{Z%_NL z3Y*sHv**9NF~K0j-0ptr?J}{l^`2`T`d4nPSKDI4d6}&-;NY#&FBN8)o8Lsmu}0tf z?7AQ~$6uPiZr$E^)z|6#Z!OgRPrY7W+qLS5)2$WXYWldgE#GveapmG2S3XsRrW*f0 z`riZco+u<#5A6|Jdu6+|(c84ST|u z)EBRkT(v$iJTghw#O-BLjjexIe=NsBjr+TJB1L7YL^~c{a-8DmamiNio0G%mISVHG zbAD`D|MN!}-*dnEtFsgjMKa~ zN7|+@4i?~RzquvUS@cWR?Q=}5rMexf?AazB*6pdfKWjzWL36F{TRWAs+^%ihxO3k# zm6-bLp4C&W%s8ekT`Rpf!sz3Cy;aIJvs_zW-!-|RJ~COzJX!Yq1mE60LPrF$vo-|Yd%QYa|IJ5P zfn#n0)p7@aRR-(Z3J4VZwz&Izp@BygEAJdv?e%Im^n#w~1+6vYF?IJV{$B1ZJNfKW zw|8QnRk?KC)-Auvn$*^DWEywt!=LNyRz3^QOurv`_GYpD^;z$>@^1G#GRvfe<*?3) z7ae;2x}W@{#A*T(C#}fSY&mggn#=z~dnd^!C523xtnkv0KVE*Ht<7C)dzrfb|6WM2 zXqNn5aZ9Ntpz6|8`%@xXQa+VMFLhg2GR_cs*Y6phzTtxLfuo)aC&zof-=Q_>sj1TZ zxaa0V|Ja^h;7yT!FvZ_tQszYG1IyDhrG%6$)KhXV?%yg>`Sq25{Un(?BGKXZwPVFw zOZc)ltlTzaU zrn^26eBRug(<2!8m!p_7r|T%6TDI0JwQLg!r>{>=3jfjXai2T$PMeRg-{0*VKQBgm z97>(Y^icC=QcU3`9Y4lNN+Hw!u-(?Si%;}eXH~PnPxBdX-2RKK!OM#{FK{#V_Heui`@fHycmL$|Ibve}8y|=7 zcAk6bjPzc4Kfm+--|zAD-+L#&-`;|yME<~HIhnn6)kRf1_LrA=>}GM7&HMFl&CZ!} z**l)z{Qds^92pkr-JZbHVIU)c>0H+DG|Kj^q?p?N%V zSxYFFv`YD2SX>WpSE{;>FuwXU%oy0Q{ZkEESqR48nhv;R?9vj zs)L2rTXc6+ zZYw=_HMnN~y7}hWYo4o{OkQ>~Pvmgn5}(C6GVdqMU2XMeMw6a5M}yZSSJez--VDiJ zRS8%7nC2y1zt3kJIuNwX^YZ#N!8;w#I5()XdnoZQ=)LXWX*z!mgY$xwt2Ml~@i-_> zsE)g<`}ujMXNshJX8%O+Z1ZQHg;=oN>J`nNp^^Y+U4%(W2xdr`dPip-tq5ewE>c8A$_ zNv-2bm?cNIM z?AU{ow)&U74HwvT9`t(Q&3o-TCj5Pj7$y_D)NS zQOyf=-Pv2uUDTNOkhxejYO7b~j|(fKq&_7k+Gv)=q2TL+1mu0(92)NNf5e=gkziUZZp%ZTYFSEV-X&9{-|x zZ`Ec7zWJOy$FDySVTf2UV^7Sl+*xH4uNVDoWSXzgbx_z^c>aEufOl%TocYaF9dG(s z_DsHT>5(?yJf4yq_gvBVnW1m04_{qv)lxI-iP-;JwI|p8yKtbhVsS^&N^?)Gd6uWT zMZR1+sgw77TP4d&*77r_C(d zUVdIGl&x1#xi;80`;LLY-rwOiCl1DS_}+Nz#N~T=n$v8tT^F2!dUX181tX0vRqVbU zAAd4CKc?#CLZ;;GefO%3A8XhAE&6Z!e}#&q|IhYWJgeO%-hTL1A;taYwjG}9J{;py zUw*4^3+*-ropzp5>D5zGjX%9up|kMUL8~@{W1A9Ed;Qad z=d-0oarFP46BgoRH+kjXNu}lc&fiNi{C;a&_u77&Evv-tA9xME5W2h z#>40;w^B>CVHH=ozueEIEm?X?^tM&Z37GdU&vjaz@)fZ}5sT!8!y1dT&a7p>-JSC% zE^X71!st-K*Wbq99yO#nJ!p}`T6}3TQ_5oG4 ze{86!WO2*+YugJM7=+(5GALtDC1u4%28ITRbn<5J@2cC!wp#qEpT{(Hmi&pfrkv-O z!fs}*KCx->`fXFsPntYO_hqu8&=i4*EZhx~La*=tZn?g2-kUYIV+3-!3-|AxTXu5C4Aspw^A7L-c0MvTEwaeqY{3fk54K*bUp#OzjnwRtMkH7kC_$6EG!zD4g7&OE!#|Fb6MPS}rTrr@+c-&V}<+brno?s!9g zT0?J;!Gsm_^)Fp4HIonjwE1W4O#kEm`Zs45zWi^dmDXJ|Ybq~?ag5H4reCpt*UtNH z*ZJTx&pp`>hw3)(v8k{=C1#QH^W?AHXT&a-OyT`}vS5zCS|q21tc&>tLmRnA8kd9= z51O5Ne)C@_Z}wJv{PJPzXQ2e1zIosE`kC!hXNAw)E?H%m^X%n} zdyg~SZMJkA-FlAL<_r%bV78#oI;J_Q;+hKh*~IG5KraxAlDe-ncPoxAE1PzYpD% zERn2AKl}5qoyq?DS;g!eq{X2y?67oKmR0V-Iw3}?ECSr&%Xcu@Mm7j zxuab_S?@>Y*ZDg=|L1vqXZ@yUJO4YM{+|RD54&6J z?+d&c{V0&(iSs(|9SR?UxbJvbU)+6v%6q~7Z+{Q&FN>f3vHY@5>%@@moGJeAUd%dk zZ<+Gh0yooGAI~{HT}9Kb*>1kXod50bKlL-uLb@~K_`4sb%!&(hez0_v+&}inIpPOG z6;~h0>HTWHI4?Q5`Jb&DhiJj?@{8XBTlC#49F4=YWuEGE&O2o5bz;@!*E&*+(UPK* zJFI%SB$8+LGsd&z2d0@#JaVeb@#{aC;^*ee23EgG?DX-NYEWG+l`p@S^&9)Y zofR_kU-#|3?|Xaxi{sPpx8DAz;(PTAi|K*Nxu2L1==L#|izIsK&nSrfkjzw}_xhFD z`t?-|M(^HRthUl}aG9-dT&%Z*{YkRm-{t;g=YIcsnYJZ7)F9PCwLs--sNV`k6{X}N z#`tBYZz@T<-;mAiV)_>xcIf+)p3kS4rk^tvdRREsSN)sJBW^2Q6SeX?Oua}u|McL;?!AATAI`q6pD?$RBlm7dw1o~Y z-@fD4Ke(F?#Q*+Vx2fgkw7quy-YQLzc3R!5W?VUZ`eP}7%L*y~JAC_&8!?>NdTz!k zoknKMU9YBo{48?h*6GblzMHIG_d4n0d3pV=?VSIfXUzL3f4sn9S!C?@^OLs6*E0SN z`r4orUG(G6)r+s2|L%RvEGg0vpwOE3I5D)Z?Q#hpd*p}kDSKB%Oj~@$`hshz@i4AR6i;Pa*|Hd$3```DUcr?;q zJbi3_exB?<3mZ$ReK)GV{t<~|P0TT_%Jt~vF*y{eclor=tEZmRTrx}M-u?Jh=&|xk zo7Io(E=krDhBfq9Xl~xGUwHd>0t4%f7e@O}KD(gIIpxEm1*(nn>l&KNLPbKw8kQYg z5-Os9s%F}>azmN3fn7yTeMQw;kC%(H>P!@{n5)WBa+`Z%(8CDle9@Su%hnOO0;eXf zdA$0PQrqNORu&OGuaKh$0s=oWTNg7a=}e5X_$Npr%x*E-P`e&oC57joSwbqoH(-Xpck_sNm#&W>|$Id)u=Tb%wPKlw`G z9R5WYH?3+kV==e99~Bi~ZZ7_Ig5ayX2`{>YmY453*0kmMa7@k zYrEA0b%%8Y-To+~Arn|J`k-WBXp6okuRObl1-R&VEU@z{LE7#=%m5 zhQ#(Xh3oe(a>|^rYudM3J863Ydw-%!v{@#v-`6h}E&uR`EA?>hS?7_Mba}do)bk|| znr$V%>b+Bn$q!LZd%ot`!}qnvIPN{l^jm**Md+csK?X8&Q6vo54`9$&t@z)`<^-qD9;J6nq?A%+n06l!X8*#M zd0!xZqx9bD_3L9l8|$nLDqWPs&u_Nj6@ziCU-oCK+}ra?C-+@qU3GgY`=dJxxtp&C z|9$myrQ7w&mfd@qP89t-a(vU_%+)8|RQ8!IE4_I4=IX4fB|Eijl)CR6*7w@lt^3O) z_J8=S(qbmgp4zalzbf)LALW-xuWk*tn05HB#d)Ji6`y`u>_2(jq2$2kw-x=3rj;GBv`=0gP%*=WH^`5oq zic8h+77DD1WjP=tXer55AI9`k{#?33!ivdjCtls&`K9V_-KUcov%;q8cU5zhTClK4 ztz|PNN{`H@mKw z8pTqvWd9*g`+d!y%gnV!>J@reHu01sKb*@ZuAb*`vmR@`Wh~7x%?{c2AAOmHiy>FT_Onwetbz;#9Y6KJzWgqWR*|I=v@F+TDx7^4B=2T|SyJU(EAu&$ImY&xPN%$vYJ1ExxH!aP_tM#J!&1 zqE)4|*YrC>tT{3?5vapT!gXN+bYu7%zqd4!7##BeTECF|qIP_9U&cXj{<`z48p!UX>lMb+%4Szk4t( z|Ebr5&@Ug|k#SIu70oW4ExWmXv&_bzr1XPIBVzM7M`~d&C3$pWXducPekSc;2B)GMN=~)}5DbIQ-pCYwMNj-f$Mq z<@v%NyxUT;}d+;skN<6hHQn?vMlr)MuQXV+USaOm{E zz%HE!n=hP`usD(NO@7wRj~8cO|IL1QdHedpsw;D!8cda_RTBJk;9jsi_cQZ+zIdBZ z1!n0A(P_)1lkx5Gxj!jYUUugX(wCj+$)UUktn<^PpwEhN8 zXZ|E0m9D#c<^64KGx;xfpHiQ-x}cPQ8MFQ3n-v1QS08$e$VAj%`JJ9R z&+l`6%I*sBmT0D3<)V`9?|aSGP8V44q2%?)bCq8t|6aN?U;Ju;;DbcFPfE-=Q;tnk zf3s4LeM5@|x9IiV54{Uqs?VpkxA-ex~$YS!}nSN<&}3jbej$>Za1> zk2SU#eE6OkczN!D_9g5uc+Tjt{OHJM=l*b=DdO#{uMgg2b{}}ShgCr@$77NBzB@6y zl;`C7Eh}dft_Aw9IS7DN?Pf1^G>1OF5CNMTK;FP za@>B0-+VD^+D3JwZ(r8Q>ps63ZQ|RgvQ9(!*Qp1pW=!)|3tg72yWpjjT;`U!Gy3Me z*L#1kn}|=oa;kR1>5IOp)%Kby8#jH>2}{1A`s}yPwiL}~+~ejMDG;fByNb9y=kE^U@ZX*pF6Ap03%+V`Lj~aqG0Z?i>I9T30f$_mSy^MYHT! zmf8rHzxttUS#;CFW7$#NSw>7OSKGFK|Fx9&ti1CL#ZPDVMCn~97CyJ{HFxHp#TT}p zlIy>d`XjL~d9LztsiPle7B8%MuyFGhrn}NNq<`0z6$sa4$g?l|I?-&C+q3q!Po9~) z+dV&8VawYrc4gVyyEwn4-@S8g!Am-0UB}NvizWC@a7tT@-tdRcwRT^8=#)A2%18g*3d; zGmd)55hXJvHL$Eazi|DjBI!#e>oom89t;jkX8Iz@p~7%8Dd@w-6)R)cg-e?1x=ZDE zUg(NS5AD^hZcKl~bMM=ZGY|Ib@>g<%8pd9FxM8B<1?Rl#UIyp)lMgk$u@bv-w5UXt zSJPy*UwZe{im8{sP3KDXbKksXpVl$4?=jpCOl^nXzAW!$o{(+Kb2DzPy-7=>tnBm~ zTILGpujD)ZJvO(Q=X~{3gU;)^VmJ3ZU$n9KoW+Ld9X6YOu5f7np2xH4)iwE=@UP2W z&U*ZKO2bLD{Lkk?yBt{zxUE_=J|Dd=|9*ds)t&0UH5H%!u>8CGe;S8{LXg(`t(>$#ec zT2U4Emal0!clh5#6#@M)m57GvZ$_%&|55W@XTzb`!_icw8`P2SYm(|t~Se5#(os;)OTTtcSlW9%E2tCn&}d1j{FUH|^a{qKeM=Pry8y&JoITA-jk@Ahlc-frjO{j+Sd#Ghb?RT10I zuhV^BF7sgJ9QE%4c{b&~rfbdeeP3^VST%3<+8xKYwJl`PTYId<`L#?{<<0r_|HNt{ zmtiV4>l&-on;mh z?-jQYdUIp~+sQKli|4ZM&scUp`0wU93)AvX%O|RzU$y*JR8x!cMAg$rC3?TDigk`@ zu4nouaUx8os(hNf`8uoZ+Uur@CdjewnfJ{L^n0LFl5`aO`effi#U0Qk}jipDwU@+o|~U4&2w>{5oP3a}JkK z*OIckr1*H$7*fPkPl<`ho~_!^)%ghe&eXZuYW&&C+E4bA*qlbLTZb+9Rr$zm#25a%cI185PqO7n(oV zz3D5RJc>ZC||zTS0( zYevL#p@Y4xa`|UoyqCVxX7c^YqN{y2_4h0KL;Ghb^ZZVJeOyb$>O?}>%sCo`ZA%aG z{SGUS4XKM3Y7Jm8t;#8%;r098s=W_cC#bNWn|pEJeyQ!;UrN?(y|S*Q-#oOydhJQ` z6NT9~?Rx$H{5re(;mLy^PZ~;n_#)rgGWl3`Q>MJkS$6j8ejC0{vCgPEzDp}8>yk{4 z+j{L_G?l`MkZ>fBK zWY+m$-C3on6Bxp5%4FPUsr1ej{BSeiY2F5_7diHvdlrZ%%9;kR$Ubmz*IcK|1?6}C zOus$hpATCv<9hBDwKY5&tAl4%+82a->79xfC@z|HbhqQ&^q-&isqYeQ%qqI8u_f?> zfr{1JdH&tqCAaQATk|aJ_?#2_mP?$e^_sfzNz1=esSBOz*4fHu?$I#*TDLg-)B(dM zJTh@Y$~>V__74M_Yc_7EdSw-|>rbfi!Jy+Avz8okz7hF1^Xqy4k9EuHJ44^yQL?>z z@W9tKax)y)-bgu@{rBA0mb(viUjDrnZ+7kQwEZhyUHcjy-g7GJ#^WhEe<$7z{#v|F z>XaO(ZsaESm6yJ$PyZfqq;$pOU))lzZ=)9$Z~drz>+~_zf6S_97DrFt>+o3DnxAd` z83&Z;G<8&>2dXhkg_X4!Vnjzm2z@>{r6XJ&Y0XQBD!nkkE4O%r~$ zVeP!n`&-rSZq-Wh@RM7+U(NpfE}NQMv&FRn6{C+m0hZtBKy1GZXd8gDYG;CmlKV zr)2iI$cy6HI)+cC)j9GVT5Q91sw~o=No`3|2{$zbuH(AU%NKT<+`#-zg$l#YTLHwbKVHudyH57 z=M|yQ%KnJ=qGm-0(l0Kmeo@!0<8v%b>e8cyeEG7+b-w<5AueBMH|N`f^xR*}HghhO z3;ff`d}%*%{pDFR*gw7e{^(`h&di&eUYxhx+^;oT<0eze6xXn8m2OO)(=Xg~c(vVO zPRQ%Y~B2N2=&Yu#mTR#-fZMwZcX>pu{ zv)f^wJ#wbE7u@~z?(XmJ?*rBS;?F&kUiE}yvc~mGS-(`8vn&4GxwZYvc8kE^|f=;7Dm;?Wz5a5;E|kFnxG&(>#xo2ygK&d=W?FzPPKD6 zSmp5~RmW4ZO>T`tPV(UgZ(F0d8ftiC9KM_|O#1$bv4F2ddTReM(G|18cN!&_?EUmN z^6}K`2ac?J8?wTN+iCY@*|K-<+EUN<$(MYYwSFC!0`LCB=suq&x#hXayhAqUpj2lNIMcZ@kOn5-fQc^rVmeeCmOgc39wI^KR?2Gi`h3n=KUrP4=f(+duMB8 zr+acy#FsVVZy$EZ&&kU2kP2TG^lsN9^WZ+4za6KZzq`=0T1Pg$E=}oUVp)BNC?C_! zP7Ud`B{vkr{6hKPt((q%qM^qn-TmvN*?zSFHYXG`B>&%9AYtqnuxgF3#FRtbw;rXG zD6(66?scDdq;Y!4wYrZtF7M#If9BUlDYkzbvVt!ES>$ti_k%T3a$gdCucehR2>p`f z*q~CD{KA0!;}=A{ z7&tVGf(>u~+@m8Sq3zkRW0H8!^Z$=pxr3HZvtI0(Wx#%Jh3Vf7i|z%fa@||G$u;@j zALHX^<{$GEn(w}Uam?1R{<397_Ttk1R=TItlD-6Y9d`M?^v;~9jLN(POCN9Cb)el! z&N)HJ?{3S}NwudxoeB}e0UIy*iGN)#B7|xrsxBY{J#pW*}O#a+=U5ZLi=gvqF%<}u}wsQO2 z4c0nKZ4TG4M=VnQ=xk@d+FyU z%Lav0aSr{=394Sdz-7{#g#u^DBNo<&1lWC{=QseR{Qdd zfJP_Y<#igK9dqU_&7A;ASHd<0dHdd^j+!0I4_#pGI2WLbWcfi@>G^zSw7d= zVU9!HcBlEx`$VU#Sh8DEvvb$%1^4(&9e00}-X^>5(~Jp)hYsG%J>UOodl=WU(l|#k znQ!5CCs*xK-ni=DnM+x2Pv!Qqbm$uhFz!2ggW;}oTBc|G`Mp~@Vt7v3U3<2>)TtnG z<}&S1i!whdREgWC%9^g8w7Nq5mcr2w$9C~)eB^A?TFIhp9oS>K@p|3Qw>ehF{T{F0 z75645KYa0O9<|voo;19W-(?%tDYGqI)KKxZzntwao4Wju@0T2Romus@w0(2k#JH5; zH|9^O0u)nNBUs<=kXD-UWX)BjmD2xD{|Q|1lPz`Et$>`5w_d&PYwJ21;<;tc>xYS_ zzPbJs-j=myQQUpUinG`56unP+81+atyTPISf96vCz}MgQ-LG`N?4Y@Ly)9p@+09HTo3BczRPR8zlkCKzSe}iX(!HCs7(7JVD~5FwDdCF!}oL_ z-~YDnzWAbcuZ90+_SJcO6Yq98p_Jwp9kOxp_8a`W!Y-&7A*#%b6oh@89nf zK6P-pz>>UUZ2`~1pWb?TV@6(nR`I+K-OJW1#7Ku9nR50*4PS{(_qTa-W%i^s|ERaT zArO;e@%h#dVYS{xjJ2|!wq;Ka=o`K0yZPnVg$J#-Udd0N&UM1Ck$=gfrlRJ6180Sl zt55kHyt^r`XHlf+b4Ni{;>H=a-xy1{*taoU1hyQqSr zB^w(J1-OegJxu2L*IxM~@s-A;GaH-UrdX;5CQS>s5SP)nHVOE8`gr`F(qp^6|8gju z-aEO!*5b;-fP};~&JN5<8>Ql=t##?B{X8f)9f2d`rh7J@b_QG ztnJP7${u&R9bVGO{;1cYDr!8=wN`Xxzo@$zNPUPeVn zHI1*`_|T{pE>Xtv#pQ#1{U5_$ic3Z8L_*bDn5#XXFRF6Z7xJ!_+ZgXTRZ+WBwfO&= z19QxOdW&bTPh75iYL%HXZR;rKbN`Tv@px532bZXWarB1zFyvYqI{#MmWyh7dYsVS zpIj^2KQn~XdCMza3{=SP{1EG@?_t4PW5+Ic_KN;Gn}2E#O-*7-1^&i8RLb?>|Iog_ zKS9`idx0;5cA)wUS=H=kGWSBxUwFBGkFs!U==7PFrcYccCTmf0f5=*{2TxBNrFLVgeE61;_sWhG~vza)TKf~L2p>5sS8?omc00F zlkawOPefc0=jEJf*M*iZyxiJ(+eZDuMZeEec0J_Mo4xD9g4hjbLh_xj-&XiNVe_`M z4|hJ#4$D}WfBxh4_F`*JjjK;xjqXO?P+?wNcsBD^>{HwG7q>0GJYkyt?E5!XXURHO z2z@D+m2>?zSAzs zj%C$etByBGc#2jbdJ2_YUVjWxVgM@g@b673?vOp9nXwOTRyGWmR{jW0Jiy}_(^VkT|USap1%S7Teqr8l!z z$%Iat-aEzC<=yY>`^I&y4}Ndfw`=K-a4VVnX`y}b%>ca@m5Mh5*AzSLTwnZ&VZyAl zVy!0c>pz_R`yg8Sdg7`)#Ye2n)*lobu4_l_dX)UI^!l%V3K6^PR@t!xDTXGN?ESPt z+fG=4ZFj}3m!n{)_dL6pLl#y`=;bB(aW<7`&`%lZrnY&+;+0%mkr-9cNf-* zToTJjWz=NjaSY|_{kDu{V*TnFIf;k7!s859ceC!fc`f%~TKk2oDhs3bXiJ-W)~kI_Q!bxeYZdb2vC*26t~KT%oN;&7#&m`Y=dKd!iz~gB8ObX5&Bbo# z7qH=hWqY(sW*API(lN$`6SaVb?a8j z|D5W5t@)RD(MkUI&iZfl>VC7XV2x^eefrnKw3n0FJT5AfOD{* zSr!WW_-%!P#KR_)MD8h;_cEw>YTtkAU#f}k>QmZf;(c0@zS>=%HpWalx+Antf~b+HH4obvvA8IrB;W-v`2?UlXpX^6uLgv4&|wL`n04pPCYnf~(}(T+jDN zD#ZvU?vH4C(WZ0YsnKdJS%X81T4mRL;w$)SxAC&Tj6{#4$uEd#WA*L zSw*uxKeAk5IJ3q0rpDuZO`#LtK1;-Az7~Bh-Zi^jZ29r7hSCj-4Sv4g@JF6iKR@TR z!ttQYk9DzcA`04tJTBX9NY_y7JK8*TmFrPQj;t1=W#Q~;C zj?&23clpRFq1PoFHk(?UJMvm3Fg$qYaV2}@$a7);7rI}a{rGVB`Ni+Q?Qfl0UHRv4 zUCC_!9y@(_(8rpV>-ga3ZQ&zlyk>l7x1MflHaRA2jvk*} zl*1Cqvj(S6%2iHWsi5<+Hsd&-n6UTi1V*hl;+k_OMQW~m-FEm;=^|U_JrS2~M7>ii zmRo%J&@but9Y+fDe{)J)<^0tBX7{E4x#ulre%XHS;l29#4#msWo@rlyTgHw%PrJhVZv@uz0drPOq+ua&%j%5!w?9jP<^YRwI{ftcwJ3jvvkvwwi zhjhG2tU*euY3~{Bweutw<(~?u>72+Yd#L~ETmipdc^~^`UwoYtb|=NH`s}%$kTuFj zz2pSLKmGXll)FySLNlDb&RwfuiFHZY>*y($)~bd4U|VVNE%4#1O}>{_mU=A+oI58# zq^5Q9i=)E9lWa~%SY2b2=9;IN@cSQQQBc@-zsLX21+M&hfB*9Ta>t%$H%z{Nh`IWu zasP+^bM&VsI&SaYwepA1L@9;ONppBR*pEKlv|3p(OG@zD2ko;idkt;Y((|zyFl{z#Xe*ClsvFVq&*0l4@x__clDjJgWDS z>opf0#+=?4TR-l(DDk@OV|5UhUle=X>9a2+GKB81@m%KRoTi@lNYii<(=rXD1 zgVR|%>SufqN^$(b9P8axlo0O_)9$%*^~WA1P1Zhby`}Rt&b}y_m0V?E=~K7ho6Ova zhFq(i?s19L*tzj!@|`@!a>9C1!{To#YZf1K4mmYRp>6%^9SVM}#ut7WhTXgw@>sIB zbX&veBEHQsFHD5DhqGDv_Kqr>A8h=bQ5@CLI5Hw5TV- zF>rcDNo<13(Yd9$4~6m{b8K%FDqQ92<8^YTG^6<^t#>b1I=xP@Y~}XJ(Ybab#d3`= z*II2;@2Sm#nO3p;#Ccxw9cBtTHN{&jtdHT~)ca+|2cj}Q==aXmu!_?YV>MjDRq3(l zl1y5w6$f9Uyx_4LIzH|f6`a@lGi#dUePNj!*23rFQzY6cyXepag&8Ji&)!Q|n)YIa z5<{6vU=x;?Vxsq{og#WKN<{CiJNTfZ)&R{zZ*`zyi^=Ba0Y z{`Bw6KN(m3m1c}ZJ{Hyu%oa~fCYP*E2yffE_W)n8&z-`FSGP+R`0%AwzF_zw(Emii zY6{Du&}pvW7Ogz~lS~zY_xddloF<6$lX;E)@?UquW@dG0A3UKkJN&%i z<4qdQ$=;8Zt*!hf9Z{Ox_NFlGQpv$2Cf2+q$rTCnFPVv)4k%E6a57-d>pe4`7FBGOeE~#PBax`m{ae-f?~z?q}W|zwMd--S5Y3IF1HqBbG@(4)047{$+-awOf*$xTwy5|7-fk+AvGw6A>owu)=+UcbzC z%GroV`wzJ{#J@E-y=HqzTm9eM{)*mdZGYG8XsFf+Uu>UQJZI_C7hP+d`Codjoyu#c z5b;B@>r6=do1R@>CnkkmVcyY~rw=05cUFhq^D50D*eGk9P7jusHe68-PID1!m z7Gs&7nfW!vOAbXqm{?b}GxdDSzWHvPP|>DII_Ik&~d=l_5B z+1}<~@}#it?bEJ)ZW1}nVCBf{N z5pPwmi9-D4?D_T0_y3={KmXzP`-U&}UVR|LA95_Rh0}L+W>jou`Kdj9A5XEFmF+v) zdn|Y5_1GISeJigV*d&y5cu~o}71vI0oRAmUS+nwL`09oA&2bVM#=JAS4y!Uc@lW`^ zf9_x2<)622-n_r{@`h;np8dBE{y(%o%!n^g>SLH^#?NIl(x!SBuiyA_)+@e$&+CtG zbKc5RTc4sFn({jK=Ovfbt-PnK4;;$ds^jfbvOq_T*&IO zVQ!LKno-fg_gHdYI^*th$1RL+9{ylIfOcIldLoGab#%eD-xF=WsD~XmvY1 zoW=H3!Fy2`JGWs1_i4L-yFJRRPo$q%S`o9fGN;C@IwUWg0Ju_m}PO^W_dX?kILaU(|9x^_?v~hG*(_r@eMFPSk!lPvLriW z!nuGAxAtx-(`=PaU-DSX(&pD5&zGVy7OhiWO!C*}5mt_>R(<8NE#Tpe?Y|$-+2>o; zKWWRV{dT+}@#PodR9p6}aj$2cbhJo$>andiJ3j5GI?emKSENw;TX5myc7vO%lI}0b zIJIKOvnrDrGnWdTdFtif)@0iz*>|}pM`dPL5&I8K4gU+LoR7TT6rk?Ebo!hscNI?m zGXmmgEF`}x-~0XTeP%}V>Rjn41siLvsd{s^Ph)LT|Gvd_i*opjyCEjb9MMTHc>Haa zI80kvG*h?PZ_|??^^J3^`5Y7ORf?=}mRX~l{j%oXQRO>EFRH%Ug*=+fmaokpFM9Fc zw}0vLZ<_JV5qu^+RcGOCiCI>=XWa9Y{wBKPsB~Z6<{qPes|@*KJ})SlY1DdQtxRpG zS@^mQmy+#&1%KiA-u~6&O5>Lkb7!`1{^l}8s&~1s`Qy*uHto$`Y~Jx`!TMQGSGjq$ zo7_77@{!dFN3}P{43v_$u2NIaUi#YarrU|I@6I=CRX=sE(_Zv=w(JL&N6Ukj%=`c0 z)Me!m&07gl=3IN3&s}(Dan9}Xl+YL3KUrw?b(P!R_yuule6s4L2bEoGzUO8M zu825zmshDeAgQj#cQ^Z47AWOLtMKD{rZ?}`4;udkCLrY=_eee%}+32!e;Jd{a(G;f!64fpIz*EHVh&#riq zB+ppiuO@fC``Dp5r*n7C;I<2vD3D)g=x}DuxkCnXp8rvkU(7yHYHhClqBuIXg*=kcSCyon3g3Qwlxf*_*7lM^HyswPNKvzX6!pzO$<%F%&l}NV_qHas znR`!|yDf9xb|)q#tu__fD?&_aj65<*!Zj6+M=m?|q>xVfNa$s}hx-OL?C@UY>VUcO^@x zD8K!Y)eAnZH{9a*(&r63yiC?~9(=54)BX=&%<}g)xU3O%K z-MfQ_YJc4MKKt{vgQsQ`vf3t|TC|GeoZpuJZ;syk{P^u(`T8aL2mG!qX1Tg_)uUyP zV;H|gK4#6g@cZCj=Cx9J<)ROQ*+Oku>s=lx`B{Y8E?rQ2{j>UE%ikZLEvgA&Z}c^) zKl`p~@{GSiH>aivaDFSF&3&ode0NlU@s@&5waGR6RFC^E=TYZg7-N5Y-%Iv;Z|y!f z9Fo#-7j@qLbK8=wEHCH450z$%ZLihW6*$MpTywaupxLkZ!hzEH*|)TR zecWlDV^t<{Kc)5PWbUOgPvTy3+%uf><2>`x_t|ZS9wrN2QF1^0OA#+yc<+g`f-Y4$&JTm&p+fd>c5`5-}U;f}oODxrG$&yy^b#jeZMK8t;DZqb%GT%iU`1?ifCLN|+@XB9n7 zt^DF%cEe$jb>B0Mz2E+QEb8Nb%9J)wLp@$MY`?jMR*}p%g_Hlz9P|95JL@9*EypD; z?3RxLBSZ5K99X){37x5Bvfd)} zhkLng*xqer9r6=4T4XPsyu0E4)ASi@R03Xd*_T#ck1LwwzqzR5@ug`oacAQaR$e^Y zf3w4U?S99qnn_soJ>YlDJ{_MeEb$3pX$7RPAHQ9GzOV1m=lz1O)i!GJJvTdlDX8MW#*^iG zPnITazq;}8{nTZvq+ZRnJ$H7)9xZP!#hDvE7#D8ScoFw>dU%F>>TMMBXrv@=WB0*h{Bx(?{{z2NK^cxU-anh)}8$2FJ5KL`TJn=1|vD^(o45aGVZ#h zKlk@)h1aci6Mkxxd+dCsA|)FwtoTf$Q~HngNqdsnveXX?YeOEX1zlSxP=06E-LsR}x9?0>vAxSV_z z@=iPY^54H(SJc1e(KL>Kb$cRD)4WN=Tb^1Nc%OdVaPczF@5IB0`iq>MH6CWGX58c2 zTlY&P!DyOf>)U)IMnuPpDf_JpcPf5b_;zN#P{M_L<1Ueey28hmjsEk+ zloxqRKVq4@I^*Pq?1*B&dAbW~z2XiZ>yb*iadClXQkdx3gzkV{^A@o_Y?Zi~d(_x{ zLkG*+J9AD*>01WKOuDUAwPKyBZGyA>X8W1TrbqNXdw+V*lNn;+4`v7M;5;g_x3cud z;y|Md-TU;GE!wcyYO>AQl;txxtp2Pn^?5mQ(ftD_9i#8&2o|j>H8~#k!)4Q)=lM6! zq$;Vk{@hY}R`<`k7%ROWAMzp!|JNvRrfn&mZI0udhX%# z!*6rfj^v1KN)u;KOTFG~mk{+WX4l)A!mXltJ5T*RYG$zbTIA9hQbBii@`ZS>Wi`!tOa~&gl~p z$r8K6lC>n}@SU)a?qdjXwbkxwPrJ5#x!CNu{d^@qN_Bj5CB146X-sV4)#_Qe-uXn~ z13!a#1y$~$LJeBW6$B4RtzIkg(&Cz1d&fPF0%^%3ZVjPFG`4c>ezqydoqgKpe=k@c zEiccQej%~=)ZR;uq5n6YTd2yn`VNQ2ZflmFcZ}bszdfcOU0E95*uimn@5;%yWBS}A z0)5)_3xm|=voClTdE{;An$=M&7DO9-_be!z)AwTe+KVQy&aRprDAK=d)i3dKt(CsN z!`{EJOXR&?b!h#BMeDxoIw!d2_TozZru*w>1$*8d3H3d(;r|DxFNGJf zy1XdZ@|qQ4i&YZ9Y>e@ zFVB0xpgQHdp-x+p@DaiNrwlGcrY~-^ee$-VDpdX40;UOdYgPRkmYTb!49W16(5L~%8KE+gvMdfQ1TgYS^{?4|b zZy&kZ3R?Ou%$VM{tH`_flbT}A=PyUf)pmJ3RN1K;@OZ;ho&}}*6ZQm`Y-{{gmOtM{ z?G#u4o$N#Rx6Kdyurf6}`{v&M^R?HF7EXV0#j!LrU53Z)$Ke>~lscoCF)xJf-?yAB zTXO8r!RP+_%=RC((&oFjr!b}Rwd>y5HeWw|l6?`}efH|RrfRQ;6L@~gOcnm@7@oxZ z^!kH_!gI1`Ueq+6V%#fzVf$R6sxM0(Y`oNZQ)PwRbJrr*KL#hvEDLICKQX!2Y|!N0 z_UQif%C=~x^&18Mo_L{E{Ha?|`-*E@X556Thfe)dqd9i+E%@5!sc*UG)-l~)ee2MZ z+B(YJ&dV}vw;cC(Z18#AvuR#HWVFo-Q+|`Kn`h-^?F~(HWn!NuCj_3IP?4NuT6IWy z+4TqeHMttN)F;nxGHr48EcTXt@hN@t7rmf1jZ-HY8)b^+7QZ_??28;G z<}TLpyZPzVqol}0uBSZTq~EgoRkwI9?wt4BDSMGzWvxQK=i;~8&%bZnvDNYa^$wQf zvsyB4KFgeO^`fYR>qC#qock)vO~*(XfyirifIz3=g~ zeqHHg+7vg_^(qThnOp*8|z_V%$DYS9jmG zXL$5mboN2r`gP#~>VJ%mR^CdR^E<%ohQWPi{SQAbn!i~**T!LU61VF5&6@WeWz5fq zt6zBN;;|&Dv}azBi(l%jX+D!?Ov|tEVw;@%YkfrgrjKS~YuXmhJ$~rlht$P;Pv|Vq zaFt9uQTf`Xd6DoDliVq)8V_o3sAw|F1itYJeeX0uPHdCiMO8h4O4i+yI*aG|ooAc$ zsWI@l@fwX^`stl(|D;II-Fg4f-MbM2pU!WOuNBPyb24K~!L^{&6Q|SNkFDEUeBbg{ zsCr|ZyLgZY_nVEgOp}r1|A!(?4xL{^houzRUl)p&f7jS|8Tj zS8mN65zEk*$g{R*`toVTf?~>_A6FcToT+(N!)Urk*=cJY-RJ-#<-QAt=G@UbtDmmu zx;Femk}j*XN}#e9-yD-QHXY_ygH#!r3$?_yGP&7%+jLA#nR$-$6<-KjNQnEZIcIPE zoPD6+UC+*l8>Mv-s{R#=4V2V%h41wAZC*ERGSjx|pe3umY}IOsancA`6gH!6`m39- z@B2NSv*69Fv+OFBGkZ?$T+zSJzHF(TicsO&tD1G^E!~aJmCmww%KpArVSV#F&J^Jj zmkd*x$}gYRDswUldR`peIl<;j%btI!eg#{$x@v8E@&C{K7xDgL-wHMMUzw7e|Mahy z!p7BweOn!!=PHINy=-2@wYT%6Yi8gLj-%~xM+!+smrY_da8@ zYMK72nH6tW)_A!0ZrQbryLUeOq4y_t-9GYN{hzAk{6$6o%ogPA7k2(y5_KoY<8lt8 z(WOI1qMmD2a%GMkc&fF3PVga(pw-N|^OuY6S>|+4_3Z9DvQz8BC%p4NVHde{`yRFr zJNw^v^50|WNWK?z+iS_BvlEui;+a3~txoIe%qiY+C1+Ny$D@1?Q-8u0iw_TQT#gijbUQ9?is#a_BvwAW!f3bG? zijQu^X6I_8&DSqb2>AD;ZuY&Xr#}>pPBm6I*J{kUt|j}US#i&Uns)hL|M>aY3Vf!m zo~tJJSPVmRgc ziLCV2vd2bJ+H-CTcv6L!5k{!iw`yiNZYIco}wjxZifeLLl(qf+_FY2oVor&VuQvzF)h z%l6ew6@g~#@{t+agI@YyS{eJd*tm+(nDrsAachod-0!a^?ZnHXSBHDe{99$&{%_OY z)j1`(%iqKy5C5@KdI)!kuaYV@qP0X-RzHh-Q4_X?!o`D z2Jhc2JNqJ{RXS8}<<(Nt@{O7L?6Ro#?Z+`PM!(~m&Zsi8U%0Cl0%Qk83@t(glRJXq-#(Dke z{(G-yTNbju6!E?N#P`E8Fa4dd87$u|TVMA+*x~1X{d~gY)H3dB&61$3bJ}e^w?bD* zgd|R!7++(pY`eHu)*v$>M zuj^%)tM4%N)?cz;+xYCMg=_VapZ9u&OGGpNxLM>^_DEdg(7puD&CQHI9W{EjKXUzj zSdm}xRz>n4@5S!bQj4dAcj}+Jy|MIL?S?M*S$?S!9?#Y5j5E?dH6JbEaA;AzG2_P? zz3Tpl_hlwL*mEQ5vF~CptJDA~S3ZH?CTr%DwY_}#$4geXcK(7QSGEn|vL9xzU7hmU z*rK$fE`rCB{p7k3fl2!#*+q@MU6@<-WttvG=ALB+GFMjGMEfo8)&BkB=&H7V;J+KPy(hh^z{pa^r5`$={cD**^@g4p`qMC0w}Saq*M=8ai{hGTc8joQqQW zn(*FLOUUQd+9s94&IW_ksdi1?@mY0el230wd~4^VBTtik&)K$Qm93C=*8C}vymWeZ z{-vLDE}zTWZ&g+J)>b6;5Slf#{RCd=nXfC&MYh54d{P4&$M{nn7MV9}f z_JXH>UE?&K`FxYiqIm~WGh$lilrKx{GV(qtnV@sDkiU96+dij`W7irKO~vA;UXr7k$p{O{znx9?1|R)$=#d~t3Q zhi)kQ_1SB#S0}8K6|R2hdrGf#gYe!8Emz(n%BMx_E~xU^RJ@sbA@tdTwWk>S?lVub zV&&hp;iA@?Y~fBv|K!Q$8%+wzcYeC?DfoD9QO~X^*P1`Ow|m{>uzWs$Z|<{C;Res+ zPk%`%_+_5Yz@C?8XISPJ{44y>ciy_SiyB^RIQCdz{`5$N>YrNO!5X=iuI|01S1M)( z1|@2lbPB9gOO1UY^6ujOZE-Hqm-j3B3$FSo!Esb|zr?Noe@d;_uSyNewg30`vAu~x zz@k0NJay-MeA4WbRwWoMe4z65>;TDQ8&&w!PRqYF+Z(+1?Xt~QQQS%SOQ#i;iM^Fy zUmR<3_amRg`t3jX5B+pMy7yQ~x{zJg#}8XStY4*Ze$XD~JifRoi%ntIamgu|7O>S>w^_!EdF5_Wi zI#n*n`t^#1%vy6_74`W%`l43+$?(ouJ%gU`JXW7eiiuxh9!%_Nk19>L+3&-p9$iqk zeEH%{vkFS*G;Qpdr=)r{z)i}kx$|D#*H+2JbJfyJ<6jiCWKWs!D)MC4g41bi$}Me` z*YE86?REamb&GH2(@whH%AYcM(Gu=7-6bnnitavkm=yBq*WTklzyGi+{q}w3A)fSP zo0jtXY$q*Z-mA2|oF#rrJMg2o;wr{qqJh#2j_jP6WJqsp{36>`FXWX69fAd$b z=e-v%66NATzwwyuPP-&j$*|_Uht~TU%ctk^8WMw^5rQfLgnXcb?%Z+obxVcq3@AboBdDr73_R8?dUcG+oKCk zy(_IWD4V@hR%G7wRZJV}7(1r^+(9_F|H@#hI_F?O6& zPUZGUuzrx?)=L*{RngtJBTjIRR@&8tQ#;OHv6(1izg6ZqgXj^4jX_47Jg*lmpSkgw z*Hx~_d#>vi9G*RkRe?$M?PCUwJ@wWh%v~<}p9`&%8|9f2vzM7j9Z?S9t!k*{>yQkb z-Zy1$-lMOnQE}aVE<3hcpXr_9cX9P=zv(s2x=Wl+F*%e>SQRNTS3zLs!hn-jw#qM^ z^o2M|dNtx)ea`sLlhX5GGFza#d8g5E@rm*Wip@}FP&`oPSa&-Tv4#?af@JFQJ}wp%=HkPw?ywmJ0BSI6r9 zJzcXG-7R>vcFjD8JFE&1P6|ksJ-?DLea)=tTPMzuy!rguyyA`Vv8LQI3k{F@JDF)T zp3h{Pw{w|#)net34Z5vge}&y*?Awv~n!C>O8O!b3_qM(I-7+0 zd|3+Sdzar1nOLM6nf(3ltoi#Y0z0{8@XVWXHgM7$uY`gl4qJBUOl1g6zjS3uaEsi% z@Mw|K?GH+SdWoG2ox}M$?Ojckyo<{6nyd=3a^Ek?idT+{uXebQbL6Pc4K~j`ml_^V zoyld+QY`n%cWIBGME~tQB0RxD7r0px6;57z=;pDoSIUWND{I6O*^g3!;lavHi6~VjN}vkM}#h2Ghf{wSEOt{ZE2>T zRd03QKhv7WH2Lkx z79B&+c56YcxIM0$LU!E#oD>x!b#mp?dt4QhOLiR1{T&!qV7~eJpCYjd>!lLIv|O~7 zoq784MsMm#b+bLDF`|9Og^S|PNj3j#ao5pUBhl)$W{QrUCR@^`kVVExBEpls!z6W% zS+UG5YM$YeI3>nvt>MqNo2IQOF)B8AqUveOt?*{6r^j;dCuJ&gm7A6Mj;b6nRbKKY zdPbASC-LH#x=^3#PnHGllzeEQ_kYIa(8Z4?H?dfnOeo%!J>^7hZmR8+kk_Z8s%)39 z2z_ZBDw$Xe-Etn;t5G>Vl_G#y*X*8{j0)#%v0+W<~N(1sl2n)x+>PF zcY*KhO@={EVuwx^`5jH1o+>hb7568Z$x~M?;$0 z%>F6wFE!uX*q!?`b?>)lr3d&c(#OzHdPTnv2oQu)=!-e2E?D}L8J&A2{ulPTNM)rWe| zmR{fBA>WfTr+l(se7~3RlXI^iim9{B-%5SsFD_=IqM!(oowjx^8xv4wYQ zLioJw6&@SPBsS#s^1RR1ZVtR!@ot6Y)MTBf{`nSiC047Wc5wcZlL>BfeUNqPj7q0G z^VHo(jxJB}J*DWjLfuF-MDpOWTC31cYu}z0*mOvwYVFx|N#)!(MYaS>u-!_~I4B*y zO?=v-6#ov_ut_e5Z>7k&FL0iEsxR0eEN5+aZDO128B58VeNs0Lzkd41<&5(IlUtnA zSG}%DeEWC7Le0&|CWaeDb9f?Tcp_Bu&PR!uPFeQRLFnCN`G(H|FV_pa`mt2y=f{?P z*WM?n(Be5Y$*)Vz0zt?8wQEgVem7@y2v{etVK{p5@Q8y%I+#sx3#{pMEXKXW`L zGqdFBxjS~wMFtJt@~`H%PVHnj+$55HZr5qn^YeCG&WoL5wQ2|71ON9833sG-?KQN0 zFiUI4HxXCO>~;ks-IA-Jn+{(n+4d~s%f<|8ubp%L3q78o&?A~L@lCaSrcL%sYqgKF zE#-Kgo;e~JJ#o)Xt;$%%wg2y(bXb4(SWsB4LZ15vS8KQ5_XOSWAV3zRN}D;vo#uY2oIH~Zg3h2m*peSGZym;Et2 zyC!VwrG3AJgm?X8(bfF6s5AH0lXn-mMSL2TS~Gw8S}1QfZDONo9eq?on}|iIV@BCxn@%6*LC;OzOBz% zZo7wnZ)W+&*;`-7=rXr$vn*$*c3qJk_jqBb)z->KtP}pkPSG;mD1K&P2jjcC(+9(C zZbz&xG}YT#UQ*~J<)))^VWXMUGu|sr+KZJge44xPwEU&UKUc51TQB-$R<=>QsO6HZ zwg1NA*M|Qx#hxd6GKC(QchBotxNnuNxS9RGyo8xspHwe+wlgFy*IY-6&G5v17Ryx$ z4bk-iM=Rc+eJ57FZPK%36}>+WcfGzVxZGHAny2{OdV7hGH75hYv{GhmJIBt;we4Tk2Y98SQp)LD%|)^A0|Z+v9T2AoW|zr1_Z>Uv?h9 z#;a5Hp+vwQ0o2uj~N{7+?9&#|hKyPcWRYo?eo*+xy)x#lPE zTBY@?@IkXl`=g|}oZNBy_c=e-Wn|8Q` zeEYS$=f0JriDtl#Z&|Xv({)ZS-phI{R`ud$8Q$nQhPw)0&5OI^dOgyu)zLui;jEta zM;a&HoKL@Kln*)g(BJt=d61Fbm+sdanO~ZGzq)kS)f>T6ldiprb1v7i3Xo>X+-)LI z7}?Utv{85Gx7SAbCbC{mi{dJ{qt`~NCTqNT;Z-P}aj0@uf0o|VcUOGBuX@D0=)(Hv zEB;h}-{)A6^8Zk60Pn)x8+hE;P1AhZ-0SyPP)zB#OWgCbl?)t<;~MS#4qs()+0Max zC~krB$#3FSh7xmy*_!XU8?+sN?x7#MdfNY+J>RBnWBa)KZ~p8q!p{KeN=^#h?3bu(TXd+Ee~?mC)6@$M*}@mG4MBK1cRL|M~ZZzmEM) z-9BaR`DhNQ?-gH!QWgrPIqr#XIlS;iQ{d`FymApY-In*b>Dz`~*i<$*biEqSGFAiC zBkKAcBJcLRXgZy6r+!|CtZCpTjfg1=&usXxDa~Fh?Ct8~k2YzYlKZkb{Gg+T|BC%j zXKb=IKnW;>ZEpd~}RNfak;Y!oFI?sig^@xf8ZI^i8 z+i?4Wy5P6Qs|t!A<$PG`CUi{x8d!Gp*1Bnmm&(2>sGqi}So!+Egk#I{ICYAbul>+i zxig+aJmsS^(_U8bx4X@3uFcP$lKVJY?&ANir;qKPekYq}s@IMKJ{nG2xXph(6IxMW zxz6(M{K9uOAJx{Hull04^7@rq6RKj)uwVQv!0G;9s^r8*?ugb?p@BXtdnO-You<5I zf>m&A#%r0zX?YU2;MuI6=EemJriK~&H8-d}mr?X{WS#SLdU^bKj)*zb(vs{EzL<$@JCY3yq&T zT+X=cbTCSPu0i9RQTk)s7ug8S>?o|^n99(!H*v?$+^~q-z zcP{^*tSPj3xod;6w3ETlyE%==13WYOn{TCLwR}-_xborVt&+En$K|Ry)_1REsypEM z!}2BD;-}LUWdA=)-??yVo<^#_eg65gN6gr`4|K_dI`L~XetM)QnSPUL|Ceh^#LRfs z8rqe*7x=ldzcE|;AZ&TW7PdD$ADcZMzpBi0v;X(wvEP?18)E-W)!(qhXYmrYC$a8E z8L=W^uI|F-u4wIpUk|}ZECo3UdwUmpm_(wrmeK`IjJD~Us_vIB3U?0PuYv?Feb_|1~(UJ1d8U6a{74g>^mD^iT!%l6zb z)30R(hp@;;u{G!JCECAd-h9d2dFDf}S$iUFuU`-Lt7CuOd^M}kXNqrmWYG$#-A8Zl z46#fVb(s9+B8#WIuIhU7i7ohRkY$yuaeZ?8!{c>}3fL4Abr>=OLqh8ezn)r~Z4*(~Mb{zmBa561n`UnlHbr ze9@2YCxLs`C71J@Hd+5c*JtCt&3j{e*BM#Vclrf7oxFBD!jS9nvTf<2?tASkzr6VT zWAD+@3q1+B%T(sveQY$@+_P@?`Rdh8ilTkejuWMtT#m0^({kvg@?+0CCCb4Qy9D*; zX5^V=EWErr(&g>LZQQ)k-G{$*;(B^753$C$(%by_Yam$T;Zp( z+T>SDYMoe;(7hSi>I)VhxtC=qXxig*ot3AU$$yE@w%0tXJ}W$Bif6?;@C37>J+ zNUaN;`DF9WMf)D}eB7MlbJEHqZu8!oD!FVXg@z}ZolUm!T$?-dppbcqq~+G5Z#*Be zzdN0ItxrpIQ`*O!R$abvTp6LCJKqUZ=R`7^s<3Xjxaze18{V+bxBEOl{P}IPb{)&r zDZPxJFBa*QPFOwRy~pAoJSQxzt{tCm_w&=~KpC@AvtumnYsKf!J$kL~RfK@1(GJi=d=cKoNdM=e*q zsopYO)cNgO?Pimw=kD%Ey>puTbn8X_lHFS0yJQ(Z?W>$H{dCP9u5C7Q0j&@A>u+{W z;LSdBJ%~-{`YndiZA;5nsj1lcez1@K@~bv=?SYUT@7Fe87TqApXMd^XLJ#}oCu>Fb zKZ;p-!ZNMwVL@M7=)NzE_Y;(kys8Ya*v+rItZ(ib>#j4^MfZc$joXoJ;y2D$W$yCtwdN?!y2iRfSZLjj=Q4BW+>8A9?~2AH z>BjwW-j9`+#zY;~-MVGnlG@h}wh@;W>RfgDAo6?V6V6E~rN0E+iw?9r_1+_Usc=`q zvCm%*er^uGsLLgImsF4*d}CdrqQ|*yJGW^uyFHEabPu_eRM&2w@%8_-bBkE^-11*JT`>9bS3xB^|I;VD zY)@3qbURwoH7nXPitW1U)C~s&gcqMtpUpD;Lg2%`B;AJOoUdN0D|6~ip1pm$Cc*0R z?8mE?1>9_3dZ6V^>bLKyab8YRXBGuc|H+$nrD6Li)vnaA^^1ZUtY>VVl9T)Lk_tiH}R+HYEIvv z_jYmTn!gpR%&%0IaIpy0_b9XPZhL$7&E99J2X1Y-S5fxk@#$t+pMy=NodxO%OD1yu zTH=yjrT;MADmgCYlkdc^-8&RQ71ds=mvxvgFF#NcWVwocF~4Yj#hT;CX1*>lp4>Nq ztMAtDfVWvsu5gDO%@>`l`{vW@6R)R)b(&{~zP{r2Vct6N$7>swXD`8B7A z6YE7M8qGfQ%1m{QuW{i=@gpyH&SZVLEjVkk%KaA~UpN0<9Dbf}{{G6^2WgFhRj*@r z@IIZynJBh+2k*wE^Bl^vr02a;)VWfV6PUI2cIYejC3oVJueN&5^3S{*&|W^*bdzdc z_a)nc8U4O*h*?NI@t6MtX&kqY;PVsoWChCdT9`CCguT(SjshzxbwW#E1w&i2n z4)%Xs>lv)}l=Mv8=(VRV?(^^4YW|azHb@zNcwb>T$)qDB)yCwzil-$Xf)zXP;?#A5}JR7jYIB4VY=+Ij8 zvoTI5kHl|idEQ%-aduO1S;$tKs8vVqhJEx6OkEMp-5I^x?Kuu?IcO1j}CF_9@F#gYx8Ji?^N$lU=ZPRxC{ApRV%SPhTt->$1WnGSEPft)@X{y<(Y_(?77MWPy zrCF`-?|2ll>As)5y@&tM>bAB|mg~z~vv9H(v-3y02?lU#U%_&Qr{hE{wU+PH-?O*=m`r)OYsu$m!F?Dg7@}4U`2HZVMk`-so z>S}*_%~ZF?Q)PmI`L&VkCsnT_TQwk7|yUL@oMZCX$&>F4`*;sp7NI`ZasLnSrB3>ufuHEsJ)y8OZ9 z6}Q$@d4|1J-`y9uIdOlszqfl#j>q1T^n=&lomjo_$o)xT8(v=KVXj$LG+QM+o8i!$ z=aaHmF$dZ1jbOf}c&b>TEpi(ps}fK74E4pP516z+d|Ow&?rR*6M0q8C%cadyi|Z4=WQzXPtor)wsJit0Fo&-X>?y1N>=?CX<)ixS7uEo0(pA$NL_s4ykWLDRRNBO&| zo@h0S@(MZr@KO5b^4}VAdGe1=KhgN=7_{Em>Tes*uV+_3JbCcr$&H*(?WYzTD8F&x zKKqi3Q#Yyc-4-UeEM< zJyW&$9d^z)w7WcrrVo{`^HdK_YV~?DE9p|V%X~Lm@76^AlZ8+I z-&A>5n!M3&R)FrLd%KFhK3x5H@?LTMf3_;wlE2p<`U*kq+}Ahh*H2ylKlw?vtHO1G zjZ^clx=-Bn|9j^Iv1R|0mwNo37V_Ekk>=GyHkEJezb^Y5`sPpQn?FB~`uY05(+^#h zy(fA@jHX0ng43dj<_G>eyj;;Jc{%xrJAQ_f|@=oVvmo{x8P7;o`kRWzBB`7fk)v>{sd@zDco|D0~A4^?4H_AocPh*4Qv!R;-6aYuVthiw z*!y;G{1kJR%j<$|@YjBgC4NHLF5=~4Dic5YFfbJDySAwCk+Q5#!XjZU>xkOPi%loJ zD6Ok(-FhzHa>-&pZJsk?>Gut%`LShnT3#)k#X2QQ*J8WsufNkdS;McSo?;CA{AQX> z=f}t>Ex8MtH~k!a#S{d@9xTs!b>+k|bHgmf%!L=;C2`khiUpro z6!o~I8FgKW)g^hIyU)(77L61QUimy(Gfh9TX-$H5__iRj~}x#j6a>KwYivsIaVfne!%SY*)LfbPksG1y=#@_xlO-T zNxbG>-*}nzs_K&N9zCuf*LSHid{h2A{X%`6^Z!$tYBo%A3im#h{mK0La)tzNn{mgQ zFLIMMu+FxU^3hB3I%NGpN5im)Rej%DL;IPv(d>FQDms^IbXfU4*mgULUYQ;-*Q-M+ zVMp6*q5rjAwzl4@rC1KU-jVunV|2#qO(GYq+tUiJy%LC+{xZYB+(z_CaG2lInSI(v ze;bG#kKtA6(mQUEJYkc&L|wu0%+d)HQlDPSbrU&Tbm=;ytBA$a@UZEhnKVoVihIJB zUWv7u<#?WSk2wTDFHtbI&pB^)@mr zu1nY+q!#YuVd;0;@NHCN^4yH8Yqiw{e?FD7v1I2f?qd4dwReMu_DS9?l6#kJcHSu+ z?3#5o!Jy9fs(xR_caLQ%pQGlS)!Ss4>U1zRNonWT>J8IZoVAcvzgDvM)rqn&{r1SE zqFygvrB*(;qa?6NHOl*N^!l%V*FIV*efa#|?5{yx&YD+Oci&m5AG3D*!Oh$Fu4yiQ z&3nD%%S_oLlM0qza57rpHG7`t%Qcf+boIA5ZHt_{cYj&<^vjQw=9Yae;oorZuwv`J zle2HWTAnGGQ<82JDJ)>)?wwFkdp$8-hROAR+VaOtvqFP@9ueAkSxfqRiE)16hP!(I z!c*Hm@-Du@!13$b>Am6Y=lS~l%i?5Ni{4s@s?Jsrx?!4nHZoK_(NT(>AZ) zcfxJ{*$3WHXBWwxiawB|@aucr{v|PcH+R2`jeihyVQt;<>W6Rt+ZzkFuw_)T7W1#+ zVmURv>D&y)SP>4p9SlWb;v1&uTnoOyVEVK%@3e=`X_i(`!#6R^C-zKM^U`G7KUH=u z$Kh~>z?hsy{X`ctzA9PfFG3+1o7&>5JmyHwh~%2$P^0McyywrECn2^U9A{_Tu1Wm8 zE3oYPL6?cgdOEipIxIiq)`wdSM{~Y>%!sLLk!IytnpK)`iOKZ#0Zq7gk7muV zGAUgpyiHt4HijX)Wj$d`3=FSX7#Q%~`)Gu?_pvr4Hv6`LNbUFaJ0`H- z-XiEJ(adHQad|^)X>MYo{FEe--@C*nt16%L`~ALL)jD%>+e<}@PdlH_sb2R)@XwC@ z|7`aOT55Ga4sATu8MI*L;pc77Mf=iognAPe&K6gmr^UYcg*2fa{AF1rmeBT zdFAX`T?ZA{FJ57?t4&8c`nuE^BZ1Pzz0B*Tl-=Q6n);+=;{9jD;-`1#ufDDSnInVu z>Flr*dk;+gFYLPW$+d4;n;ms6FZewVd=Rk5ZAXj6j=4wwrZuX5)tyohIW1z!Q%jbK zmOpoJFWXVW;nkm+e^mdrS;nL(Z?&C$fBl-*p)qxhb8_dQ)!$~ZGiZl~adqY=2G6?x zge9*bW#_uXH@@}!*5fLfvHMJ>uI{c2-dvCU3s#Hnvs&K3tiH-mVlC734Gzh6OutN< zzTW+MS7w{X<88V}!!x~aO|Nxhk1)Cxv8nXTxuV<+5BiMz7v%M(&U?CGM$Ff*bI$Qk zH##{}V~?NC6lcqGsXR-~CNu}wPAZMrmND7Hc8koK3A~zXy!$5bPd;8AvHnb3!OYS- z7Q02)c|CgRTGLczKiRFwz3)}*y*dT$_o8Cy=_P-Eg(X%UyysKAeS(%>asLBxr-h+! z7Ce&u)hu>ySAJbVrsL_R6|qOB?!PO3A--hk_BSfaA0B#i(bqfamz2bp#pk1wGyFca zO7MLN>z2NuV5_*bkdL?gOYO!I36-Z^I)44`6;=|HD(W}=o1JVvHz?yjTCzOP*!~2R zEME~wmd1FJr4<`*$%bW#+^=sPI%KDDRO4Hzu9~;oq`TklzxOJ;q{e&Mx!_6hdCTuH zCzXE`mVd3T(JcxQJHDD}s_;?=o}=}a*fdu?h`c<&t9v4H|^%5*F_(5OFyT|F|KVa zyv()p@}4jCi!`R+xpnWr%>;#;no8#mqIpLC7m#%+zadAwQmGTye+j{*DbHvI`K^~x!41TD& z7ci@wE|p!jE%{Dq;DW<eYKfB?ZE^^BrwY2nSX-e^C zVqiE)AX%CsC(HNQw+#gTzT5vuLH^B!D3ztMDi;pUnx?xZn~VFmqo&)&^IK==NP3pt z`d_Dh^W`iPA9*LGdwajXo2RGzqptq1_Fhp-t?rkb9G<#pUO4kG`0!`0%f@D%ZW}I~ z?H2T(+PwMX7n`O1{2SH@>|1!1i|b9mt7XfQ3QoM%(CS^Mc>2_}t!$flT<&H(ZqQyT zTkfPS?Rt1_b!JNyQ(mI&m5t{n9Y{I+*?vV=?A!i=%B%5w4q?@`nr7AkABsQENq+3= zvAD%F`v1QDC&l9P#Nwxy&wnm>LGqOO+6n8K!vDF8Je?GMdvz>N*2#I_D&$!Cj%K%b zcQoJb-mzb2!;*ciLVBl#x;NRhDj2EDuTJPX-M-+9#k;jX9yeYoy|!>8%f~gg&*cty zO`YoWDEh{fPcvl>@=nmXUfOZg`TYF~oePQYjFxZR@}lXo;S%|We%gPYcOMg%0H?(n zEv#H08D5;{xVHNBRhexbiMOV;1!sDnn*NvN+lG|Y8&h6QnEUir!a><|Imf+Hr)^Hh z8SZ@b+Hx2vM8tq1BQH#ir759raIGHWkpl9h|=OcGNaj%iI+vzorkKJ5b z5Gv%K{!#GNbr-3VvX-mLKYuIK*&7})XU>J9uWJvL9J`mY)7nGy_)hl^!V52Gl?8m{ zJGjla;^e-c2bZ$yaxW?q4X-Otzp#GerRcILmkSaRs!Z}a44d1-f z72m$W@mJfGW11#+F79t%dR!rM-HAsZ6I+h6I}5#!zgGYJhVS{zjCw}Yv{J_+9tHBrV)p)@qfsPMpP4XqwM&skzySMx5> z6ii*(s|+nFHL}icxx0Vobgvbn52xvTbKf0gRKV77R^`Vp?wap{n_amNnTg%(nPyYX zHuZhuzP7{sXA`AQc=?BQJ+;%AF#oO53L9mWkO{2Oe}1M;^Q)ifYk$_hevS*ve6!j} z?n;Iq5A0n6r+DV&GJjv!+HL*dqzad-h<@W9b(0IV?z0ceaFuv!JiKJGO`)5SQ$twg zQ*^@7r^yXfUQ&AhHkPug`Q1=7exh>x{YHUXlkyHk=sXORKI7LgRZF*} z8FnoXO<58Gq!YJrH5?LpGiP(vKS#Hzu6EBQbuP0Ny|ef%sBt;s*+Z+79U`B0tNQOh z*mst5y3x5ACu~Ez#Mgx#_6Z8ga5hp35k6@ab1mVq%FA%;ib&6Q25awFKkc1T6nrU; z>%?i1mLi4!tgSo`mu%3p>#mcr-7EE8a>KV*kg7jV_VP#Fy$m0>dp)0LKJ(t42UeNy zT6*$tuF&6Sc;HZK&jqiYVIs3T@(=X8NOK z=IFM~c(ly;LAAl^-hpE)-goaLTb}-Y zTYK^J*&lCb%=4QTu=C!n_TB#Rw+pvr$3ET{wa9YDrkanoLBHZw70eBN_oDIaeE+hB zZNCkZv}ICnY5TA@riWkLctrcpcHd4BYYy*a?3V5qCfB5`F<#X5a(n)ZTZxC)I5a-w zyCgI1E0_5E^#XOCxAtnbR{8mr^KLUg=Y9E!Z+y$y*R{)7-Q@#0N|*8de_wNT{?5|x z5zi_DyemyAw_7aO|t>-OBPGq!uz^ea~Vhv5_ZpI*DqWz?s~+MUeH z%lK5XPwV!izYE_;UEbiD{Vp)-Z1{%@tE{6gg&o>^m?yzHMIiod<9fCyT=5g{gZ-o$Bf{pCi@{HszNwxu#NF!XTX&-|81nLh-U`3pVlJe-oQ@pUm7 zUSM4NxYTj;Hiw=(XDN;?C7U_}mN*3UeSTlQB<1v`+lfaF>NaHldbjiW&h5oJ{uh0I z{=)Cc3Z1?@?hwBzOlL*zUA2jS{GzLOaq*0ozm9fXy>;+v#iuG4`Rf}Zl>hXFX=@ZT z2VEDnY<7-w4a_WIjSMqeXE-BOVO12om89|N-j=&}?|AE8;o8x9^j&7OXWKc2O*>us z_b=GJeTM!ng`DKhvlS;ltA`xbyKw!(kA1aE0#tQwJX){+Ip^E$nr|P!U2e~0DT!j) zmeX=)_rCA;i!@HDZr{eb>s`Yn#vH3&rjAFVhoU=}C%)cMtFuAnuM_9=)K1sPIHwLH zRi*ja^BMKzomL#*^7K)EZkCDXsc-WRs=xiOu8_9$l$WC6?FAcIo+SIP@Ok{>$~xnd zMX{}~CcM0UF8kB7hO9=u;^~%am%55`EI0VYYM0q+YwMNl;I>uJZFPf&PJnMe&)kM*l>vom_#bqrKdr9Zsp z>C^jF_C>u&`RkpB-aKkrw%ymnXWdN;J4efQdjYPsN$lDC9PhU#3hg=4*UhTS%~X)R zPQj;sH}90XwBxOx-+qVL^=ey%mBY2N>l<=hFAL0PI6i&h!^;O#z6e|nes*5h#Z6W9 zM9%u1{8bOm_msL_@%-~Pdd@fJT~4iS)@Qh4%(SBfhu)|@F}l9Whkdukxz|?Tly_{GR*SoC zce{?=HmCX5+XFuof7n+od7E%8E;8Kbb9c8zt79 zgD)vw6iQ%QDO==ouB`FA-ou`CF7I_@x&GxB)$4q#pD^p}zup^jLxg^rqvler_j7ux zm>C$hJD_#FXt&sS~Z_|CS?1sXddbMeLhIk5{pgUTFuB4QtX{ipmksAF;@sCRQ_TZT?y)y(8qFEs4> zvz<4^qOY1@CmeeH%|A5s1jE4CfV5EW=;&HC@T z;J;vMYUc-&W=J#AuBk@i^tD^N;*1PUf6lpeeyLB98rKfBpI02WN(Z6BIFhj*DH7-1#J1 zr`0zO&dR^YpB5pNzwv64 zpv&j zKQ3FFZN=pM$z{iB@%w9f^Rryd7ZuGdiMEkd%-$^@v29Uq$N7fGjuJn%Y?qWh@+IbH zG4sSgZ%!lYigzCUpJr}6*P+$9zpnRkp65%s1rPZ)Gfn^6wXV&bqkX%rThNN-i#2z$ z%rcd_llEv1KL=EtQlv8khd4ejIqe@bx>6Wz{Q|zUi`w-|)NY=DfE@J_p|U z9TwiP|82-o&Eg&0e{Gtqwm+V3usAWC)!cQ%)nA<9eOzhm6HdphHhOz^k;VE|H`YH; zTo+#v`!nme^p_3X@5=W+XrJ)^#l*6`vA<95N}3fPd-UbwmpR)fJfD0=-)HeOuVVLW zS^EzCz7`ukNvyMv!Pw*Rgyf=)>iZ-Pu+~o6)4e7C$Nrmt_uc$|Fw5+>dD{1|lP~V0 zW?g}4@6{`q85lMZ$hv086>N0=Z8MR&>+2OJv3qr#z3FDXhRrCU^p0M}HPMcXxgN}o z)B19hOf)Awgd8+NyYGQt0F}M(!c*uzWm0RttxA_Z9ZAD z>Df);6?>F_$;jO|>-PwqAR7JmYvxS7x>!BCJ9Rbo{T%wic~nqk)8 z8%#%;Z=}ev3LGtWSjV~6StD1jSmVO}fI~|&a~#E#g(9A5Jo$bpyy0}a!&eI>>423Y ze9uzWZgp8x9uwsu)%!1fwUE!84a`XgUJ0+?-M_@&(JyVO7q_C~+Jg~Kz8EdPafZ{j zKim0|&wD3jLr}*3`|?C6AD_{5tB|aNtofXh|9$MTSobEasc>KmATllCw?ETg zeogQ0mgVqf^ozq0+pb>YoiuUf$>%rf^it;-PMn-QrC&B=cA=W4<`zXs!Bw3prqe}l zSa`M>@jca0EuXRJwa>389h)1E`uL0->So7kuz#|?X`C|Y(5@dUpAtV+h`pW}dD|pS z*8H3u_x9eGUwHp=eX*al`)kz6N3Xcb_h_2T+?Oa^)mG&Bk6}`_tL)8BQhyTKmVOkA z)}59yQ@P=G(Nq4TJtpSPFVo9zS=jT%i++{uUAcUH9Di%ug$RNvx_R&Z zpBK*VxciE$|A3UO;=5l*&9k4+j(XIq5vzaqnZNsqTV>3r&35p9;hE8Q=zx0j*%yk> zo}Zd8-60a)HR0vKV*jcsph|a&;oncKYJVp^vSm0dyTo$MYTh{BegVGx>YgP5{_ep= zo(0zm3TAg^-;z8xGd?QnM{$eW3gb{%#uZprzhcRo?maOZe`npD_x8r;L}^jWPWc}Hp1RMoHA6&=!IantwR`p0Jb zrup|@g&&Gf?5mdiO}JjSL2rI~c(_TW&D^(QpK2zxw`N{R%6xYr>Zp0a{avrUFDX3~ zOkgXJG3wB_dekkr^ML=9@`*gW|IK&bH~VcL;Vb_CSWdcV?>}DDj4QL(Rh8MDfq}D? zkwJ-pfgv}wI6p6`G&3hfADUJ5E0Xh5QlT8Zg37nGZ_94GO?pvp&+2wg@5GEnDaTKy zZFzk2gwWdpC2y-qb2f%wd&uY+a7aSMf+53m@#5llo9|5D@&EneJL)?_uika2f7Be5 zrgrn7XA0+wRqLRj?$unm_w_eyI@BI2ahtbaE|}=PS;MD%&)rmmom}SeU$)P;`TA|r z(_E?8xTp8J-#*tjkI&g(@osKx>%H9u-eUJm{sB7N*z~vwmFat$_8qY1Q=5PIsLA8?r@yb(nDww*D{GPe5tnyh~K@ZW)U-DQ>E~yO&y();KUTkSTYa7g>zargeLqe))THXB<<8u@ zVrufYMQ(2+E=8F{&G?(IJ0sS8bBy+>dy!oJ`H2k)iF(s6|C8BrHtkZnypBNUT9Xas zZ1vG6FM4op+8LTK(uRWOr1nHAv`HA7_8>|FPa%a8i**@t0rzW;`+LDjT_M zT0`ditNigS=gDiELPo=kKME?Ht_2NawY~FuuXDz+M6-EAAFubeCZ?ZVNpRd2>#kz+N{dceD zXIp%*ee=PGFF(APP+DW(IH}Hl!TbXmzs!^MZ+_U3?)B^WK~K)Fe{SbK@j3p#VbLSo z|J(TIeAsvUUDT7K_5Xr&|4ibl|2=o_2lK3l`4JEE-?qlDXpP@+NdIkXBj3&spZ|I5 z{OMi%VO!V?gZ&%C?}c&aZ$5N>ZEOAi-k5LS|K@L4F}Lu(cE*17HTwIvi~aRG_)9ji z_NV-{Mfdki=&rk5-{|^w?#HvmTVE9G{K~zqQ~CeNNs~F12esOpDlJaBn{ycbVp3z6 zAv$;6_Mh%1T4ARxY|a;L*s{pA?%pHDZ??XQ^dIhDy0au8?$>t=Eri zEM;z6d|c{L;O*b{3T4;=Y@$*Yv?S{@EzWs%S55o9)v0xRY(9p4FlASs`myVFNA3JT z=G5tv>!g|*cP)6ozxrwJ^$A9w%f;h5OsY?&Z1TEX@G3UmvDzXvV_s0I^*!0-tG4TV zH#1qV$GrPd_g~+0%Znuj&TSb+r9uBMe|ha+`|G3WpD(QEcmF+Y5~*u_`)=K~9_5Bs zwi3xp%kLGq@rv9KU;Wdb2QCAx5Hf@x*_hqx&|f?sR?a=D2Z>otnTAMj{TtL*Z7G&8Ub^y!`|Q|u`=EW{%m>jK2i~1s;V(9MgRtP1p4F?rm3kK0 zM>KKG6!KVk+-Z(RwnEC6J#K!QJQEgey{=jF$k+Em)RArTTFrlc;3$<_SK)4`mrx#H zr>m>Hz|Q$`xt;ExNnVn7s@WDV`q9L!d?--yYwsnQC*ko1*8=Vr%`H-m|Gf2H1RX_sov`Z#Zdo*XY)NlCq$0#}PS$)(U z(X02eKQ&kF2&%Db-yT!3L*eDDb?O(s>^a1jrI6Vme($h`ar$na186&ag>< zNAdkl{`kKS`=jf&%cow}aK5ekT=wZg#+Lna^ADSVZcU30%$8jmy27LQbLIb)(LoVFCb*a>Hz&s`VgWg53cP^+!n zKd4IFlwF*nDkXItth@@ zi`PDN*||_=D_caT`fgU~fZSaHk9D8TTd^T~Rj22s2G&U?n#Ca;r>AIU1`AK<7u8wb zFaKuFB*}2cXDP=lJRix*-g(fZ6u4)x#Wp7^FUykC?MI~e)KBM!{ujISk^AQQ^8U>I zUQ7$NoPTq;P_gjmSLuyJkx1kpu6d5?JQk{KoTi_T?85ag*fuwMMW!zNm&iZs!>q~x>!j^_&&QYSl+G1AQ|No> z&VhZ0w_Z!0{mG(pBkwzfX|hS;pNz7%@?7@Y9)BR%GWT1|vXk)_cJJ+4mSicax6dVW z(}9nSk5zb=JIZ}|oKR@Ft0m~>PJS2G)fV6Ne`W6IVU{@kPpxXr-*-RHbx#-1Vhzcx z+kIr&+^_16Y}`yUVlFtpUZWHFERwJO%SAioi82RUZfTZ%v94>}`r(m-++eWrM zk<%Y0iTIYDu9RzNS=e0>Vss$RsN=C)YKO_1J=;nycJS~PeVuyjsLh#AQ8ghPrqX(L zQlfc&*;1Rn`+AwGHcrj+K5XLRtsmo)_xkn>otp>b9yYCw33>69Vb;;pJ(EKB#XOyP zl)Lvg&muFk2Pqei@|H&YOZ~fAh1oG~-4)jYM*hRr2k!5yeiTb`Vl5VnT-=AG>;*#58ut@Tu{(rt=)bFrm6rL^)Y^Ohg^_oW*Y zivC2q*l$RX(Ussnaq+;el_~oVJ>7IS(}Fu#B2`hq#PP+x?@>Ek)@A&>m;P>YrG(Cg zzYf6tQl@mL zc~oEihK_<~T3HFpzr?9D{eJ2c9{c<0XVv*ryBB3ReR)`GX|sOuA1>v0VzO~E%MNAF zxbJjFqE)Z{>H1GMpM9?rPkw(x=t{0xPHyG?->+VOPtV`?|JUmKlG%b=RaZUS5i91q zDJf0QLrZGG4ttMmv3G_?rB8_e{IIUMv9jUP<8yybY{E&HMm+rps_zIpt;c0^Eeda86-1!FzBvt3fC;spb ze=ij0SDNe_=I|kA!=$sx{Lfdkc5a&T_ii*-u-v%3O|aEK0R|b z_|i|8$7087V)73DJ}rMp`s1e#sad&tlS<@{M4R8QH~;nSsTkktx}b!|J3=Y4M}D(#1i56#{qu(WVO zp#0}myY7B|%iY<(`^ksTW-An>?^(=QxVCYwfX^qnqPvZvv+uMS@E2S!*33@#F=&m@`w4CkqX4#+0pMP{Sy_nmRsgzbL>)w4{Suky3 z$wGk-N@{F5JD(IWX5BelDK+hL`~?x_szzZ?sf9Z^%#M|wXikq131kVj;odZjD~QEQ z!soYFYfst3bGa+Sb{MYr(b%|Vu4@NR=%O>tDM4KEr5ldy_$~XXiut+5n+?xvPX;)- zPyXW;D4;XV^`hV}v&;8FEq?mMybri>S*bsNcfykvbMFUiH(d6(ZK%=jOf>LhY&Ltk zQN1H*XQM)P&DCI~t^W-> zCED+$eo-%F(7WKq{X>H55{y$TH@BCuT|HEF<8fA{TvMe@ z>vR>}H?a+R?)&CB&KG7qkb2;m1oINzYda(qR&CQwolt-6`m|Gfau~z*TZb)EJX`TO zVdbmjTG1cu?{DXx-n7Z#(5(6QU#-wt>gGM;@}a<5%b1<+(^pRklgK^2xPFX)6~8`w$Kfg z+Zz=)a-*%%w04)&GzZ71O5Z55^jY{jf7Qm1yE0euJiWu*vGGJCA1m*3?po1{1(ytc z^`q1$Z92St-`$+BRb^6#Q#GSz-qz45{4uA)?nC7InK!i$NiOT(QXqD>M5oT!x@q5@ zWq+sUst?k>b$w9&vFmWyw4OkPhKloLPpqPYj2bwXNy@&J za&wcowfpR>5U+d6Cd)RxGo4kqDeF4V6~q3kJmGh1}JaD0o<8M%DGOnJrlnYkmLGw5ZK(8=0l}^E)=5Dw`rdDe-FB zsUV+??in7ktZ#1>pQ&}}opmU;-95v_b?e&~_ItS=|0tQ{c6!g-2`2?Y;?CJP?UtH+ zdDGOC?CoJ(XI#$9?e6vM$h>Z+cJ}vCu7#1Gds>ewo2=th)xGsCvH!*v_4Tr^rOS;s zu5FXQwQJdyEm`xLc>i|xMwwq+D0gq0DaXmM&9_W>YfZ{|w|=tC6@0d8V!NkKnx{Lr z@v@}~RTFnkE?oA`TI)8~Lti<)AN%a4PUh2}mv5&pyEEagS8Dvj!qTgorW#({`Snq@ zBY(}r;;;uy+k+dvK7Jx){#&G3%C?GiN7VeDP`j%AQ8jTY*SQbN#!WGwyRr53X~Dhm zIV{eSw^+W-tFphywr3AFujo;e`HNN?daK9HQrWq0_M9V^4Ma1pE}a{^POgx_%DJ2`ojo`I!Zic_DS`@5oQ|&$HV=WGZM<#k1G7ESn_ zb?(vPY4-YpaTdxOa{NmJ)>a(Ll&D$vE=Mu`&GgT*k(yd1()Wz&ICiQZ>zJDmxpPkX z)!ri?=WO_RX8Gn_ALraSx3yETBU_MP0I zV4HL1?S{A|cal=v8mEZZ?8!UbQ_#28XyKWgK6k5E&bmBhlEvc{(%-DJLcg!urE+}l zVzVi&HNBi~GIthA_|E*X{=xt3jq~@ceDnG7-L?_ z)l-dFHqJ8Ts|@);HtaGUMC)4F!pyi}Nf=0rqF(u2TFddhE|JlhMe90*+Z=*Y2MWo4an_^fiJ=W??~n8n7N z|+Bad1CqVf=W7=4s}1e(qWE3vzDF*>^JIjFFz! z)13yFe@;4~B-Li$F*(A;^0Putm;346wsE~Tzq%@4>sjZw%XE%eU*N71)&FNK;wFSn zxfZ(eOrfjv?OjT&#p-Vklw8*ocx|a8@~27C>v;C(jL1yim#Zurw}w?-O*oeraEW_+ z=Gvn(%p$m^2uxdf_QfJmQ#+f*4kayz1H5Hv_Wj`tiRW`t=rJJ^C3^%%jw>ti> zSGvh*+V$-8j%1-*U#>K=tS|Eyp5&ddkZlv&Y}5ZU1e!~~1)n_{7`FBQ%aA3TcAYts zwI=ImUY_RMEW=By)XTG7H?^j%J+|Rx)?d$XN3kcBUFTHh|2F@#%x=lnZ%b~5SRcqu zw3&LMf4kMLmn*|XuI$w}Y`g7nS331u#fIufFWYPb4&Hpo*66EpB|=a2>9@+(mVZUN zKX1BW)wM=(*N-*o`_6H#cG)-dd!c0sOn;?H}=UXBxAWN)h9 zX2G^tX*vF<_2+JL^TpTS4>#97 zXH7U2{6OFA+3ag2br;u2TunHcQO+nl&zEg}=$D%9UCXu3S127!^Rce1x3H3)GcPhv zZL@7E>)V}Sho;?RmOpWFp0jJrmW1gZ)i)-@H*aq~eDLJEn+sSEpV8@9JNxdeR3q*? z=WMgUP<`+}B? zf3eGdpSP{zOWc{Lbw_uuJeJ;8q;Sf1=E=T-Mc1A(nQtg$-d|-9vdQo8jZ(f3UHj6s zoLJWe++X6+Rr@h$rKV$9%ckW47d~&9xpl>dmE~RH|GCnS{}B5e{Ao{eMT1UM%(P>g zcW0Yzin4eUef*DGx!xY3a`VZHTCZ2mDBD(A>s$0@m2>o?m}l?4Z2!@*C;#~^Nv=w- zMep@>?t34dGrvA~<*d)2r;CRj`gQcLa@~}RTj!=-;){P@&RmisQ|t2e(f287U-r!O zpLH=<$Qh+2t9W9&AuFyYsz!kS7uF%-Yc3}6Ls)>gptt1 zo!hiFFr1jSOwZ~1k)-G;iuOt$A3n~JSr~h#b~OXWzp;UCFmAZ~js+@Xo$t_b=>ff%3&z z|83VYE-gG|ctrB1_K7VmXCg&eO5^(zxAAO>ue#q`dp+ofHhX*XnbTpDSMU4&JV568 zJnIRKqSdb9{}u^u`O%a4W&dgadftM4YSl+#4|Y9_&l8!YygN;K%4^c{YW+FSo2rU*ZR;v?ovvS-CF?m4XQbnJ}h{KZd& z^k2>_to>EJXQ8Epy2Qn!LEnO#zR2C0krj41yJB)%v4-W>Nvyj+w=a)*8(!%jG3n~J zcf!{Wo|zV8qoGvV_P9g6E_QKz%SHVIxqM3>E#5u3BRon!HL>s9<26yCw*lN8VtAw$p85Q{{;nC_)y{sx$F)A% z&cC@_b>6xqX&R0V;Ac2FJHaR z(dtI7c(&Q|w-uN6&EIrLV_RUx>BBQ#yYyaa(CXL_?ve9EHmYpx_fr;n@$=%%@80l` zG+TAaPSb0ryJ*^^Z4$g@9*);v8qHDQ`mx*J?&73Jc1IU{H=eC6E5E0=dAe@d$X4>;Pum0AAaEsUnKYbi>pBZcXzIsTJ=RwNqy65wn zH)jiqNw;vVb-5Cv$97qR|5%Ug?QNx!k*&NLlexS^O`a57ns9iH(8Z{gUc!G?Zl7P# z?w)R=D|_bHX$IT<6&0~Ak->*{aK;^Ix<2!aOV|GI&c-@VR_hr4mgWC3lL#N*-L zxU>J4%jqwc+bh8y+49r%<`3z_nUB`YsK|B>3tPRm@QWmOcZ6S@?b_G&3z_aO_`l|b z&!M#7IXl)IzIJkQ(($_uOiVrHu0LDM72m~0No0fuudjG-+t8a0c|tg7n6c-Fk-UC6(L>FI&n3A3kIR4kEZdwTrs^0?+#r)rm~`Coj+ zp1kVmt>)|%PkuFT?2cppBU|`+!D8JN*+)NmgiEfUe}Lz^M9am4O>eI5{D1Z0&HiTL zl{Xigv+vILuRVPxJy__@ga>|HvG+M1ZhkT6)Krha$(igod4pe{<6?<6j?eKkAz-B6fJ+6e+6|@s-MD^Zv~<-NYGHb+T9Y zf2A--OwRL%w=E>uKNifto3t{Qce>;*smIcKX`THuV`YPu+}-eT{RVc?1->_$52&k# zt+;!=JgGbFRmUzaqjv$9Ru^swwej1(q(Y`nd#{vbQ_@}q&ZqCDhBXQmPIzknFmRLk zQ?6tC{VsY=nD+Mumuh)=#zBR(0T06X7h3E+`r2_j-=adPCEKHeR$cl!(b)WJq*PF} z|M&Vs)qbWt{~tR!=&0Cuv2<)|&i-tjKJD*q_r5j{^{=bk{Eo-Z37(XvWT3cZ_LkG$ z6=xUi(S7E$;8x?Qm+Nj7iKbq=#3lCNLz<-fWR2-t91pg*act;j|6^6I@_6Z8?GX8j zDJsQ`aOoPGjA^#`?$HU2#UAd-h1H+U@%k|KX|q zfsK2wz7&~O@w3#VaLJVI0q0AjT=VjU-9kf4w6aq!hW*%aJ?C}7CExwAe9{-|tG@h8 z$ybota82y7eS-Y_KU<@f1!sJwE^`Q}#WLna+S8C$!)^aIRUS4?n zWj(L6Fl$cp>QGKAhU@H2tIsw_X|vR5EsFi{v)V;q-l9D$f6fU-ToL{KzP>-f<|fZ8 z_QyJ%;XAgtROTjeUUgYvWtFp*!QuLq%XaK19S$_1)Rt+Xy5>E9R|m(l1uT7Ma zJ(UpA>l^#j=ax@xX=s15@<5-##5+RjN_<`4Sg-1MFAd^w6A%wA-TL^1fzb|5b?sa0 zx2sApxlPeac0_A+(F*6d*8LyzZ??Vv8(qro`RPJc$*n})!;`l!;@nca=Vo_v z%}1*pOH3J!Wckt;Kc2k!@AvBTo^v!bkzDx1~-~Ey~I}Ja~++cXLCdW)Kp6}e-WeUD(0Utx&NLbf=IQ6k5 z{sV{W(uRmI%l}W9F3m{NQ&=Y36L;Ark-PZovxcme{}!C9EUg!LPBMz!a>g=(Wy6c> zkHso>T?>)f@;OekYid$N(t3xxQBrds__ki`Y&gB>L720K-o#w#*Hf(3U4l1euh?>` zW`gZnzjOsRNjV3Gt?FgBj()b#%a>TcRcz&+fX(U?nB?bniXID9%Vzwt>%@j2Zanrl5j&uxo+{LsiZ?DVux{swN( zs_fVw$ZV?%t8Uz-wQ+ys&Brm!AAXd6ez8sFN^Iz&{ULYCqC-2DKV7M#thv1_=(9r9 zj;n#K&s-gngmO=dX6VdV%k^Bh=~vXtlcL9x+qid6+n^{SQ0IU2fkTYbs=bP>(vPIY zV?ULp-1KIMi3_~5Bd^+~Yk@Z98w|dm;70pST|i zpP9@!x|$zK=nFo%S6XoU@M6J=Sd;G5;{qI;?oKG*5aJV@kfI|iC;m{};NG6X7rw$i z*#|f63;fY?q$)5yEJLj_2=BLUk-uo7uR{lHs z!_Ug^HJ^XBPE5VmwxQ$k?Hz~Xd#@CftvGgD*MINbmmnjC#rewySTW=@XK$p1$PrpY&i5t_TT(?^;@NU8kp*M7B{sHYRT&F;Z<#DD6PxsG`?NpT(%g6_X0N)^W%_6rOYqrp^P))p z**A7wn$r0*z~Lw4m>+czgvXI?i54O9MUx5ZT~e^tGfWUJIkh5cKu9^AV7_bb-bDF>8d z+V*|_cmMyd`*M30nQV*l?ejgM^@S(!ckcF}Cn+B53Oc#7E2q7=V|pRX_>RWCh+Qft z*p$LT`&BZ`mi)hUC0M@vmkRgiS?|PB&+hhK@z8YXs)L8h${S}2C(dKGj?>vws_qqC z>>PREw8fj#l{;M)D=IRqYHwm*Yr<4wqo*J7RWO9LweC$k=e~uXmsaYwF1kE>^Qukr zFSdJ56Dp4DI=j4J;_|8L#S=r6>;2Ac+9K}$H&i`+^6H5(i;i43RXVdj?v&T{Syl^A z&pdg{?`iL{k6)L6xFz}Z-tYbY+ov0?%(DDwI{VA3lA7$l|E@@%^QsqL`uP*nz1=xC z<)6;jE!u71A10-j=qs{l+0#0$uv`4h%&#b$?AahYxXU{>e=zTNdS5)k*dq3~} z0_9~{t!E>bamaV>&E2Sbi+%MQz39X#soobK%wMzB>Eu(X%ZuC!p31l+v#vVm+3{~{ z(qZ8#@2)9+KE3c&+_Dh453O1n+;Xp)BH@~(5ZE~ znJQb}oIj@KSN!={-mM7Db&2Z~J$LB_moH2C`&nhml#WmS$@kK&Zk}#Wo%tp5`=r^Y z4&Qolt=;>U+@}rY4xbOp=2oj7jPtw_w~~8xzHHEavpI3%InR$SJ*)h>-ti#c#MZ>4 zF1PMD#2>d1-(X|Dz@XSG*{}Rs*sX$9@23f^jM}#1;>&$)Q`f)Y7qh6kcZ~B--|^RoJSnJ8@@g*@rJB$)DU;`i6AOe3!T0rq)P` z!)3;|`n_8M()A`~?sy#NA^OMiKq-^j&XkUiU2`9lEq}qp6Y2f1)-H+ps%m0NdQhie zJlAJ?gQYU7)B}y>Kk%6=w6FT|@PiSrjOv<%vvZsJWa}7jPtFWd44oI5u=dH8&peTd zDf<1Vdekl`HEe&gRxP0SPr+0sUC$QB?PC8{o|@yedRtezbaq$E&cl%^kp+4)w;s8X zlfO1_f4A0>uQg4b{EHQqWvgn>esOupnHs^m>r>0uaCW71e$2SpJfX*8Qe7SMs=%|0 zt(X1n*_1hJW1=Njd-l?E5?3b84Cd!$KW+2=K|xCI?MYj;!+c+PUd*4=+`Me_Q662B zr5$q0Tiu#gCas=&I(VMJtS&3j_X6|(clWPiT(B@9YVN5=Us6`&S0u;X%*@KXcyr0r z_^Cg<8jtcm(b;okh2^gN{?*x;g6X@&L=;|EibaR)IUIBTNUD<2+N4VxSg+4sdTw)f z*S)PD4mKV+WwtQZWm86a#@b1?xqn5{UuD{xs?Lt(5%>LeY1aH3t8FB91k@HkOWCxd z_@Zo3_Zo2%tAx4JO~USr3yY@oPg=TI=XT21k85YQ zA4{0J?MimhTK!Xw7unwX{j1o2boZT!VoQE;#g)BQTV1s0Npcu>WVyQI`V1*W zbDdew5}V9(OJD6Od;G^JVUyEWA80AGRkua1xEJTWvBdJ8)scKjr*Mm3TMd|&a_}w{ zT&k$8D^9vF!><&wY;Y`|muc@Ahy>&ZFaX^Hes@Dn2|nOu0QXr zjfOE--{bnz8vgFli4WXEK0aW~XIWeLraR(Ybmq<)QMs9=exaJ07gAk9IWImfx)!R| zKE=z3En3=!lzqkGNH1Deck-OLa z^x_hj^G;v5!lyX#?CX0XuYBY?j2L89lHMsk_;1m*_|LcWW6T$eOZLqByi`nZjiA5! z!6ZSy`zk9v*r%^dKPS7O!mKaX=tI|2;hwD*{(P;QBKNsR?(F41p^J~)b(#M*gOg!j zO@VhavvRw38H;f!-;(LGZZ%Fk;V1e|PNqj=_J+AqwhRJa)a@C5{wpXkv#__S!H%&+NM`>F2s(H_Ql4dVu z)#{mbz~1kx^oLVQ*H%U`ZAwep&}8m?B!N}bQ_M>>*j+0wrNwH4sE9Y)WvMlpR?S{2 zUnXVe&X0H2ESwUX63N24P-T;^!$cmQ^M><&-?-k9P+UAQXPM&dl}Gk}kD1&!CFr}; zx?bsXkDi_R%qyRBlh+_k`I5I_?*B8(#eHX$YQ1w!s>pVn^!nhV)8`$z*lsvJI>Y+# z5^w$b!lSSLUqA3m-f)ANc_w$7<9COjSH4bOUGVAVERoeoJ)LKNpG}pjWz_supSyTn zSy-<5pDn%m+mc-)DsQp1ZS{Enz)}6oVpq@rUY1yEe5Iay#Of}Qmw)1#!z+~gw%K*% z-S~RcHeY1|o22-S4{AsJ3%77se|Z1%+tFF(j}GrWsB zGL*BfcKS?sdgJp7FAGfv?>oB71#Pb`Qa+n>TJlQo$~38??EQ;3@80w3MEHT2?+3Z# zF3tVW`ph_T=eMUHu0#}{o10tn>&gAQcMhNDReHe2sgb=i|}$`mJSp`>HwV5bI9M+qor$E6fx%Up2|4+D(%@D#p90 z({}v|$GpZ<>$h!G&z`ORcE*hl4L{a*wJz(h&U$`vdWn+YiPIF1QXA+o`#nskhxMtCg$Fq-4u52uynjqo5h2v7R*n>%J^|7v+%XFeE5?s4p z<#=A|l5&)>Z1&hG{$BNI--@`Y0*}Osx3ZMWOJ}hj&T@3#)ccT6L}%f(8R-^&`(8+S zUU-x>M`_}^$Ssq*e|Ic-|E4xP?Mzf$OB!P#Q}yW!J2D#8IQ%oU%EcpNXZk$UDi?XW zdSc(rD_h_Aa~BvNzRVPnT6n8tjj^e&!O?>s#A5XGX0jJQt4TJx`+{@g-W>-@_)|`* z8TY$LPwSX+Q9yVHt6Xp%6Y~Mr4Fbo$GU%AAEA(-PI4sb4^kkRJd^b^`v!-e`*v@JGE}jO$?eF>Ld1XjX~!`fzo*!BMuvj&ashSYO(r(QgL!grR&E^ ziIvBat{zijO`cbg`u+Rf#CMw&%1(W%kPfQJY3XC&{g`Fgd064=y7f+%c7(8LIlQ(! zu;O2K$by3^@qxekv^O~z>+E}wx_rvEqE!!%9toN3|i}B|#I#prZO{}R5T7Qj<)z~UJWp8V~-m+$u z8%O`7guno0jf$$-xiEQU)R=NWeQ&AReEVQro4k|~Rt*X16`Pf@w?KIh2noh{;m zt(V{b5Z`b~blO$pYj!1x{{>T7)LyR3=h|Rh5OR3^qpcOLH?OE$g|w}k<8;ePOGhKi zM&v0|ob-_=$usmdUangZ|MY0Qwu~@GW^Cb4xm3@YH*WsA-sJpmxxaMz!fj_d=CP(=CC%z0@Xj9kWfx9~&*-h&l|s?5D#1U5|y`Q_%RwIrk{_kG)$ zEtMPY9lw0b{o1n`M}9?zP3KehQ~qDhyL;{QFCw)K*S~DJ@u+e^x~#k{+s$*2Rw|iTVb7MW!Y@~(zFWG@s(kYepXtFNkM|s(vFg{>a$n)|YCKxg_MeE5h<4xeYI^2N zwy+t|UzF7soE6wuGV69g0^@7-)vj`94?E5}q_vVGe7UNj>+1InvLAT*oh4Kb}42i{5pB|DDD^{i}JGI-W1Q zaqd9)KTc-tCXN^xoW5MrG#T--L-%4tjWCAw)|e^Br(Y= z$F|=q*#BeN!RZ@bh^fqv`@nO;z`mX@KVH>)-!qq+P1h}FnB2bB7q%fY@$hRF(fcCNmN!Z zl5P*^soj>jWj5#hrBj?`)-o@==aPAhPdYtuU(_bOmi?bnPUd}k@bOF54dJUk&wHl? z`W|nSd+cWZ_>R{_hq~#q*Hq%)hV6NCE6e=ofwBcRPedN!TNiTq{f=M0R$muASh>Q< zX=C-K?~gMVZoYgn)Of?8zt8yR? z+r6e;(%{`{{N>2Q8%>cjR{yO(utI4HqveUZ)rVhMd5D+3ls{z@Br6?Xy69+V2j_uh zv3HH1O`2i%S; z|4P^1P;vhJuNT`b+plXdc?!i(Npkm0ce{MsLMmBmr^2~Y4mEBEZ)`e!_>-;S+qdT$ z7N<&2;C!mdeoysssLUqr*H3B;dX4l=PBhAHFVuUqt|oYW(j9RwhvQ52y5)Y~xT^>wixtCrU4%sGF= zy&H9e!x%oN%$E&x_GjC&_IGY^ereY8q9$R(ReEP%+_;*Pm(~^breczu>GzGRMKtYl zw)0HRoweby$*edg{vXq%L~h&&Xw{HTy?$}c4F}PB?zEdz1l1NAub(gYcD|RCO_a~0 zt5d#R)wx%ED|5-CV4Y0;mh&mA_#bFS*lOO6m@|uMMUgAdrER+#Ca+YMNt3(M zMs3pQI=v?NsvKj$wgW<~dJ`Y}Wc|8wd#>M1#uiJTqg@VncD4Wb=-yGizrtX(-q+mQ zTUM03N@Ur3D>rkg?c@Cmgd`5O#IMovVr)|rnB^BFnsg*^LosJ=bJed|Y1281+|?PY zpG5s^Wl7z9_sFU@j_%>^hn}nxl+V=j`RgyeqAyizUgeiC(MN43<63LBpZ#%5A7U-14H>aC6OFF@AwX1vb|s9C+;oB!(V@^ zw$?y`*KQ6kU*Y!eTcp(O%+j`pF!gYizkl%gfzM&FbEdtE{`hVta zQ@w6Fr3r3WTEgchc(C^wONI_d9I?IfS*)JYK{@;#HAeN4D7ezyE4cr^RvO1BS=oSQ=r3al(!bs$UPrD(?d zn;*O0=N1@oPfJc-e&R-8)U*D>e;qe&Xz1786>%ylRqtu3p!94R9py|5BM#+cC%JIhyByV(57-B~fQD?e@R zx0snBZz!`wvyZDY#qhFqV_wVM(7hf`zuXR7ZJKcU>P!U&?`D6&R{+*z5yVN0^@BYaPVwSJUU%!g6IjYyf^>|+R+Q&g}Vgua$s&gJ6 zUGl}ah6!&}dRM(UzWm;V8r!FxKNeW* zw%R#wlk)p1YPY?^yVvl?Ue(`i&VAUjB#O1{MZ%%h^1B}of7p?ITKvqJ`QF!WeBFDw z#f!aLDP68sVS0>2#I;MQx;lXl1*dCnl)SgCI=-mzjQ@l53La@GVaHryn_Rvb>fwss zJ{7XZ4g{R;jhtpzm{W3j?c$>M+*5U`yu4UCdN-vo>O>z7Qc7C&amk7IlUh$V1kE*U z(OLLMhfi;&bZ);&qb2_${fBbM{-IsPyEA7`j-7UFR@oiS(t`~1T_FEftM8|!@=G&IM^V@%3+x=I> z=S;@RIMvScRTJY5;uJR*CY1!xO%hsVg93MS!AZJUX)|HIo#!a;LQtly+Kv7tNiZoPYf{>IeX;O z+k5vsVxkOg$?vKA|4sMU@p*MM-+#SeVEyv-;>CmA{MGIsc&^ELHLuFBdBzE5(RDxtJo_9LjF8_@t}m$|XBErgd~Z?|f{jWm`5e<5{Ujmy_4^GfZ+f zxYH^X-gaDeVsDMDSe_u$7yua@sEyKrt5cUXcMqgTQH3(;N24o&J~Zwe^8@POOf z@MxHfWS;P*)#9JOT${aqf#HJqiOLeHNl|JSvWymg%!#fn@mq7_!E4J1Me(Ik3&ayV zVm5p^yeVg98N(EZKYrJXWb~{e7QFs@vHG1^!n4Ano6q^$&Yh{>eexurMAE0QF}QvA^QUJw!H^mzP!kp z@!kCJVZ~L;gHN}_wzi#T^S$yp>)_rw5mSk_2RP7}24 zo}c&k)D?sMzi#pDv#VBRy=VH$vpe2(j@E$(`WyEB7c2UrY^k?u@%6hOG#-8U@P+66 zsbt?ef6kW7HU^zNlkZOMw>rA($v>uVMS-7h9&ct0`}ynd!+!@Cv~K;AC$3>9HMiDA z?Z;2i4)Jxnd5wQ6?iTJndH+90_JxP@44-^-;B*Mw!TUYNTcY|X*XD{+%auTlIJO-ixm%KeUs))%xuEhN!tUR}wEBt*)%g13CH8^`7M1cw&?ED1*?P)Dmla) zTfHS=$F7|=2V;2FgKtB0OdB6T_ z{n4YdcjPhOid^t|qm5&@ha$(Xn$pfsG8c`aRjlpywbqMY$VxHs`jjfwb9_mD@$a-I zFJG_ewM+h~S8Ms!c&+4{U@85N?Qh)1N_NwZ33D7=u19!#UkXgwoSPGRZpYjb^_H*u zHbic@GACt=<)jNfU$Wb8FJA!KU2tRJ9LFV6UWyKP@}5^6zGC<$sDtV1$k4VRZ0KhSFK6=PkwrG?q8U`UtZ>> zgi`Ly&Z#G-p5CJOzDLtrY*Tbckn@WwPb=-<4I=rPhNrBITpCshi0-&HQK|6o79AJX zL&v8oN#EMPTH3+2J@g|k2EOzTO zB0v7ye0tK<7h;F5NbK{QwME3LH?L)VU$Dc)4J`bRvuzt9?mBJt(l{KpEN6}RF22lU zr`!BSYu9d4%{{s?PG#+m*qE&Vt7 z^pb^2|5c~$*V-6T><}Eo8$VC)xcReFQ~t+wY3Qp4Hk`8!2(~w#Z~5(A@k;%(pC((J zFe;3fnEYYYBcB5AH?#Wh<%vhM_j8-aPFs4XbA|QUC+oMdn27L)9Ca&g%ol3ns}S3w z8KrS;rnZ-|?zH<1_OzOXB18 z3M#w%{m-22><`}%+VL!ifvNQTo=I00H7yEJShDdsf?1=j565 zpU>*(ojc>ruGR7Mk(c(V^Pv|`ySxZKaYpxqzE+@v5!b2}EEz&RV#`;epHu%r`O%_% z>UEB{}$grZ_hJL;jXzc zX+9bIo~^M_ea`A@{^m*KCzC24y_CZ6PqTZ~>i>Gqv#tI1hUH(4w_a!gXNk=Zwhd>&1&I)7qXtQ9k?KA!_9mow`W933-L#2BMQEzrQ6|Q!Bb;_qM3V z>xZRG_ZFkbw-W$I*!tF_%dZ6-4k+enD zt2H-CeC0fU!sqQ}UMB8e%ttw|Iqll$gIb zw@07c^GUx)>VK8op9GD2r+Vh{WnP>l;pi!9a(Shor1fXVJC12vFYk2xGDoY;s9-^k z)5XhA?`(L#AWP=TarMnsAD3M_qxG?{HL~~MmmDdF6K&n=3;C6tAFpQdGv;LT%WbbN zv=UJ$yB5%5amek6yZ77bW2fd{d*&pzVv5+CH=<{!X7BYCx?iQYCH-%-vvEePwau+6 z>+BO%?l(AIM`zuy(w1MtE|Dh2Xzmey=`6>U4SFj%`6`duw~KFB!4vhqr{AnTwbJR^ z?niD64<`KPcp%dI{q7$f@2cmw_j$w>FI~SYvg)n6+9%!yhs4aIiA5YO#TxItl$o3! zMe${uJUE+R*<3K0O>A*A!xS$YukC%CR_{pNc{5ouz;Q!D$VB7gY~FX=PoLo_@co{& zKEkXw+28Gw5A&rS+ve7lVI|MP=V`C8(O4BdY2EU5Z?E6@3d`h-`ghpXxd##3CHN{z(c0DS4Q4xx?~Yy zxcAPzLyv<_sBT&LvMg-#ap!&OdSCDOb$P;S`|5RN(^fZopHDT5sCsi@e?aM*Bm49# z#I($hz_hrV0-?LyshmBI@`N* z2XD*V8G#xTUgl}CXHBoHuI69AQsBgomA4D?9tVHA7$$pyX^qA0+q>@6$ayU`n~?V4 zRo+gIWu^aLoe|E-PInen|E6`WO25ax`sR(^Z|oj>+P(MsecHRKN5XIatuy*w2WGwe zpY!W{+GJ_Ty|NDtD-Zv>ak*;ug#3^U`{=f~>cVQpkDaTTCu+a(iE(ZaS!4JA)sabo z361WmIcrb0b@ga$*xZ+_yzq4LmcxP7kILkOZ;LJIy|j#3=Cag}vP08;=VS%E&OLfI zPR6A8`=TKI{c<;AWca^7xp?!5_r-6Oaw2csnG@`}8qOa5wEBR}!=xgX0|)*dWvI5{ z=Q0paY$ry6hbGqEntc`w6o@i&ux2ysecboUuJ*wfGGR7x7}&?`Dzy= zm>&?`wtZIW70Z=8U+NZcl+|61i*I3WZ2lCgcR5$qa6{FqiSF&FpQ3 zbE)a(_J?n>&Dk#5U4Ie1O8sEA*1mPx0a~r4^&Ba}pO-&e^69+jb#cqP(c2hz{H%KP zYy$I=#Y|3DYTjN7y|u?I@>J_fnUWa?Tkl-e!+ z=IIujwguO(ue~VRyNB!E4)y6zyGmc*JRQ66ZKy-7_v_dP-}+kw#N%^PDvqqtttf~yd1uK{npM2l7YN3bmEw<)0=@kZ-E_CsP&sd%J>(dR1 z18=`Jnf~9!%d_+L#cAt1SNyz^sJ(JWqZ-S!9Z?KB+G>R3`9r79J2!WC`zgR$#IQ3kOciHf5XV;SC#R+B6;!T`fK~a9 zOXPJD`zDn-8%mroFfWZ>eD1VNX?7wDSMp^;!N^Md;`I#0d0pIYYDSnot&)|_w;QJIXSEKp^@=S zp~MqUq#orTnEb%0tF7$QLRRw{xkBEB`fV#E%B^tgOZ1y~wAG33>!HdeWB%@y< zZ0YiD%gY?u-p&8o^d#)ajvd$A4{o+eGUj=is#+%K<9=9plC(5q<-8S_Ol<(sI0sDGhK6;< zR=mgZk1x(V{-nU@rIhX8JBC$NVkJFt^XJatu|DR$zfPtsQ90ejT{c~DnvT$Sr=4B* zc{l8`+4jHq?nARL6J`h(p0`jgY83LGdO>RD!Kz$_lq1)B9GEnMe{9@(MK6Tuk`)_M zPvcsJw(AoQ95R;>jD4{vpEos`%^`v9jNKB&mCgo&ld2A^o2=6Gal6f>re_WBXS^}) z?P;HVa>8O;ar<9C3R~o>_pYC+Vi#|b#d2h( zsc)RwvP=Onk8iTS_Zc>4-MlF1IDQyo_BJTd&k83 z^rOfXK9116&mX?>V=5QV*5S3yn&A4W%yHJcrYrYPI(t~0XOMl%wQ>WuHGgXg{Jbdqiu#8aefcK4#RB@)WLciNYTa@zD1FkMPg5Uoi|@?2U~#y~ zd(owJi?uT30vTm|RnP7dZj+i@xom-|@e19|JeFRl%rOr(z{DP*w0+!;xFztZQlZc zO?Tvf+_)PNes8Tx1?%Otmx3&gONmc=%=>%(jl-XRui#FeYq9pu8QmAp*{=9oXtT*V z>{NTSRp^gc(f8?5&tFX6|M^*l&Dm(hj{Di`Sa}+bi#7S(NZ#X}p#3m-{V$VCtfH%} z=ZT#aRTbVUd0r||?5TNY|GyIzA(MN;ssau#F>Fn~cI5ekwu0`J2M(}GT`pJJI$US6C|7 zKR8?D7qoQCC5>|vHCBI~x=nB4-xqPul$;#Dw~Ebj7mZbkez?Ftt(O<=z3hIu+3JOxc#JoH#ts9|{#{p^9xN7oUv~K1LblC}3!Z)X?|X5}N{w={ zAe|Rq3_N~L(|nq^ruml0bc5|*?;VN#W_L{c#2F8rPsx*bBy28R5C7)iR{vJ?Y_fT= zd4}}48^tlMXT=VluxGSw+O(MMT-3ofamUT?l`mZ5wO)~T7* zyr4OI&)e|z%+j*5585}?K5)=jRkx$Z{oNz284Gn}1h_tUbgbuGa!7e?|9YN|@OvkA z9u#-2tzz`hJNWzG0t=fZ(+o>~8{T=Os370H)>7=4akP#0awpr&S3Jz~{$6KpAUQTRSwPwwlHG8zQ z3lG`V*L;0`dHYeN)wkY!$(k7&J5fB+I92?0N#XRlb@KJ)C5QB0e_f}U_ulH8{r|K3 z{=fVE-v8lz`5U2EQ&somTq~Vi<{B$2D=RPm_;T9aln?r+U$^PLdZn1XYtgRM>6yjR zn_pLjZc3dd9@;oJ>e|&evDdDN?*36zTT)Ux-Bi;1;r?xLscTm4{<7>$MC6*Tb*Vp$ z(&|s$*tBj@Un+m((Oqfn21gvOtlfS1<2Kjw@+q5U`v&SgUN(0V-)?tZlf=qxQwC|3zowd^%BzCWTt$KTz^{nU1OeZ!>3^NSi zsAD|Qz2)o%ac}XvYPvVMmRGZ+ykOPJiXNwk~@4-Pp)GC+x*bBh$FK?=90@ z=(xvkw%O$KyY5Q8oVo4ItYozV9$V~~CdogXc))tv`OcO|<3xwaVv;TU6Yo2( zLGkOf@_T7_BYZluqh_7G-n`ONxZ#`9tC<;lnZC`wD0X23KXcr&)w5HrOs^K{+|pru z!ND%ieQmc3Gw;tC9W8e<1^gy#S-S0m%|w2Yx}>Rf=NvwD-?wj0ohaL;kz{NqbfLIx zc4-&Wk%WfKnZoL^$Md_VU3S=Pqw~x^QvLd*Z)?)HUhH>Vduf&FarqW2(}j%lHt($J zouhJ4RP^w}RwzBS@H}3Y{xZO72S!Vqu zQ(u`YdoFAaPF>28lyQ$Eh$WSMrBkvlqgG_Rh3f>{wYT)eZt5i6wD8?q*jU!@FZR}> z!|TvZ>m!TgY#PrMRc(}7apIQbp&7f^PX3+4Zfml8rd0Z&mR*w7cdvclexdh*;m>k4 zhhL8u)QHZy73Rk@Yg28KN&d&PEtTt!7$i>dSaI6W;$YFg|Mk}C$JXpHTfKx6Yp3lre$Zo@1t_`G@L)QcS>d7T-&@kb+1D4uPr{SZ|}&-@W{;C(iNo_+91r z7|XtH8r%1W(_cTidR09pZi<(|^PUv@TcHXmqI%mSr%v2DS)7Bl_FmQHg6Y>8!b<`r z1ZFNy|B~T^&!Y1?7%BtkGo8~-*)w0wC(;MC4Tk93{m!$-X~R!dp(_9s-m5r zhgQu$c)Co*;n1#n#=n!Ue1CrZtlH(=rS;RzdZ&2JJ0p<$s4Q0Ou1445g74xBwkvI@ z_&>L|E@3&(U5>|JBQiphr`ty{DGR+8@>P{p`}X^Ex4(U@$GzA+`+t4>ntpXle}L|q zt4hY2rgClHKR)_(_A>+1%ahvb&+WLH|Nr>xe^Nfa{#VV{hqeszOWyDM*YHZ-?!g@1 zRp<82e*eDg>%G_Cit5c59Dgdk{PuVDlHXr$z5F8ocdlOD&brSJFQ>l{@Ky5rWYBrZ zw>;cD*S`0D{GRH&-U*jF!_EtTdwg~N{k`*=rsRnGItGcBm9>7_?tL(3#ircI5J{`( zqmTOTnnYIJ-^4X{`Hi*|g^#bkK0oarF2BBA?6!=6O1#Kdzn5p*%h%h-{kdYlc6Zg( zwSk#Dhkt(g^|<|f_;q=^ze~l1ED}qjC%lnr`}*zGr?0=y|J9gk^QcN<%9G=(w^uu= zYAAm{`$7E1{@-PiS$!^5w|;Aseavc@+aNw|wc;E-``DQM({v=ee7|g7dGMkCHaYgP zH(R)k6tk-gwmYZFeAiZ<~$M0aK6>nIV6{zevdLn;?0Q-D4LHGaM zhKl+*d$w1~Iqse)k@ac9wApK9CHZbwykYnlBW*f!+M>CgFAw~9VaFUQ?`!Kc`_5AS zNTHtng68&$_kPFvZV7CU{9W0W{hyEH=9+VT59Z|LwXQjo){;8=qwfj}yAOFLW;2bh zNN$sndi8A=$EyQ!#%#~F?KU~9Q*HM-(_mW_myNf=F^z_!H*U@QF8rl8v5rMv)q5pDgnOd4eAv_34XI<wTnZjI_4KhvIFIyPwRRb|F~u%6;*qfb?9q364jZm;Ex`Yhdwp!iMG! z!v)tH|75!vtJzG5nYL&m$9v|(d20ptDrn?RTHjk&v?WEvWuB8nhMo9Y7Ly%)O%;N> zpFd1}aPgCKhRuTs6K#)tX|w(~S5`!P#V+fI4L3};wB@Q<96Z4^Lo0BaO2xXFDp4K0 zocceK&-U}&J`xnO&2Is3@~hRwEIIqj93KALK3}4-tNi6G$$wee6P&sV-(9)rUoG(S zhBfn#rA*OP%lcPeHJf4G7-45&z{#2;l0C8aK->d88D*&%n-@68W&KHS{joRjt4{8- zkOxW25xBhPSbMH5nYA}?lR_xgncSriz{PW@QjQ3j%wmtW&X-HmF z+w@Z4i^4&5Wy_U}5*1pxjT=Qbw#z+JQh8*tvNJrAxr7$dus>TfbyGX* zs&kzaFISzPIq^cl!a|c9EG~R%2@T)g%!=LA7CJ%jZmxA{g{gwiweKn1=Q5_aa2$2n zxNkz=;#}@+S7#jg&9(Mm?&|IBHX9~Sx?;EZP%`g}hQ};o&I|P;Dp=k!rTDeX)Z*dF zF})Z!-7$4)k77o`$?${5p262+<8RFMP`Tvs=ycW0zjD|A+x}U!F<$fFwgbv1mu^`n z^eEzI*^^oK*z-^A6?A2t)ZTwS^;Y1Y>VNgk|9j>p`rhxXnm9?%fU}3+Vv{)IRfVS< zqM|1rW=-rh;k{BBeZ9FGyXrtt6e`dymE!&N| z(z=6xwj|h#ZNKXA=c38WJd?-u3}&vS)~9x^aocw|F;pd+Pbxz0&-Qm0S=t?TPEind zuc*7iBzxfJmck3UM>8&F3!V3#yZTYnwOFpH#n!J}Q}X`g79Zkn7d?|P?I8c-gMK!0 zsw{Ie@;SYp3*4S2`ln=;x>==f^51K(SOOM5<&$#Rq9ny4m*dubLEGNq`V!aKmYp+| z19)aAX@?y2 zi$z5h`=+v!wZ;6sTW4ZsSlGj~*WFX1SMpPU{+W)z`hd3|JD+nAr!q{cdAebagQdIR(}K6I zy(+VMrnPEpkUGDYbGvPu>wgJ@dj5S1?cDcnn@;*~*)J#iwJ#&`MpcDg?w*IPTK19G z|AhY*@O__rqdV@&O(#no^_=EwU)wD%x+iJgwM-W1+q8K}Vb8?Si9b8+f5)m`5{mO# z5%0L}*O6OVTS~*Hb?Y7W*4iP>p)K*~m+k_!6Vh8x&A!IWWqkkYEQ5xSImbS1sy0gW z^bc@nniHXD!0lDPL50)R`-jF$BZtJr^85!RvxVLy92XHXUh!c~>8GF>q8{#fKhEne zG?WqE(D-m(%*;6r9w&6#49p|Ca`nP}Y(H&U#?Mu>N^W1yr(?!b_w9{p@;%4v7A*C$ zCbf0tg3f=ZV;SHC;bb*I@a>f?ors`Hn~|5g-yB(-dV%k2l> zT8>N2YDrYNXdG137_i96^N!?ieeNAq)`vKzgsghLYxjim=f(nM#Ua1LB4*jk-Tu6# z)4<5AL}6aWx=Efasf%Y-v@-P^w3U8$u6)nb;ML9VSGfl?OC)8>ckfoTvwLZIvu9o1 zjake2Dkfaj`ObQtZ=%lqlqnpVjUW3HJs)zjU1kypekI7wTy<{a!@u0@KQ8BQ*|n>7 z|IT%}0fx`_eruUhd9A8)xelYjCAp%BB5x9e_0R7*I`=f+-|qqJE1nv6Ft#b|__FER zG!@YU8~p9w87c$*V?;&wapP& z?&}pf`B~v24&T*_^}g@gF_-(Ra-6jryKSvU_oSi+S6G8~O$~Zfz(BJRZDz=$? zGHUv6-sik`FFIRZF}XXhBa27VOtT}bB(Lb|1#_Z&{#zDQ?rqc!O8Ag&7=(ln#REMseeY78GPui-xBw)3QhpzA&3vIlo_G+Zt=ZrpZwT57a&@kz1O zi(;2<*t9?OP1jOwr>#d*ro~=6y0MmVk#3lRlT?@R!()eR7gQz~Y|DPa`{w?=;{4p6 z#=oKy^TTyt_1*C(PHZxEXs~-Uw^%UVbV2X@M=u&awA!{<9@=y+s*Xc<-Q*9Y7t5b7 zb}oB+y@-FFTSm&i$+l7*b{n(XT`O9p9<`UwOibn8!`sxCD?a<=?Mnf63H)90Zdvtz zwcU5-etf{r`74=a-Qp#G*y@hB9_+H?^pb!xi@(YC^3D;qvcl^VgzRU9x~jYCM}%fZ>hPX*Un|3%A8)Yy{f1L3H4Jt9ogH3ia9w}A ztzZ+Yp_QFs-qz;zKFjxUZt*emwG`U>qv)PV=GGn3Zh1GNH=IsCk@$Ug>9;Sr^|!Q7 zD!yA$Xnp;$9jigbJ+&phZ+OLS{apO~yRGZ_1&;nF1+Kq6EY7qie2Yp;Nd8xT=Htr3 z2h*n+3BEeHDqd)Nq`J~ZWyYYXiXW$>a5QK&G#y{JXz}WwPm`aY@QO~UGulw-eVn8J z#cVDm`3Na#m9mhVTRd7q*O@0soo~~#@zHpY=Ms5EvoShsq4|k*{l!j(I*+d~2Cw`Q zwcto)-LjAWN>b}Cs?X`KiSXMq%W+qzcS=l6^YM);sy804(puD(Fi|~7+tbrtE#SM< zyk&c$7R*?}TOu`6R^7$UUBazNdA?!KoMRU>*tDb0n5jIdk~!?YugyQbs&LEcPV=If zTlPGE!F_JqtlQCXwWnjfkIp%Ev0>JN-Q2ukPrl#yQdXifOELQ>-`^Y4DlLLrwO27u z4w)nT#P+Aw7IkMuCB?eCHosQ;?Y^*u|J<~jhi7g$WXhQIja}=11$S6r8{b!fu6r#> z3zqdySsmc>Iv{GoyOo06J$fOj1K*ino-FhHc2yP zk)NupZ868$eSVAMzKQbAJG;+~mB~1|dP4Epwj+X%_%EN|c|r8~1~GlM&l=m33zGPy z_F6A`A9ML@IMa<9rSn>c=h&=Tx8l-K%@q%KEK5-JF1a>)lgTPY+vOi7D+yeyvU>S$ zQ}E9xAs#mKC$3qk&7i@NBFko0ESwf-J7;3jiR$1@J8n)+z7jai$BOyyw@c?YUSi5E z`!(s!ycgSTx2k?=ochMFRWI&x!GfX+R$I=;i^~&&7C3x)EyV2lJpF`OeO2x3IbuiN z-|$~6ET=Ygj%IdbHv?Be*-qzA0V%GRH?xZ{Xa(ym=ely->c+w_b`R5)e0OF}xX85T z+QMLO)=K3o5rGHH~yQdfo$ z%ijOjmUWGobU9EkiKq6uweq*l_n(cfDxP`J5K{Pv`;Fb5h>$WTo;5)hwGEz(3LCe4 z_ORW=JFzK-`R<)yAy&@fxaO<(oh{^F>V-DkIl=IB`o4gp(vMrNaOSQ|S|hk{#mWT3 zx|2-%g#+|W&0p4qxCh0jKJLqHD8HsDdu~C5kkuQR^Ii>+AJ-Q<&kWqCB=Yk@^0%UO zkMkd-Y`VW;y3JATE}v~rYA;AFxSw{v@M-y*3tmmndgG#`{O7SgSaHAcw{I@f^?z#? zXFTSZwZ>}y0=4t6-|zli_<+?xhu!yZuv3dm;+d2>!^8P{FF4MKC@j@(yf{~DVPE*p z5?-$Yox6NY?r)m5+pwGu{??KmBIZy^_eQr+qWy zrFzyZNHN*UIm3NFqmV}BwM*g7Lb4}~xsRQ^-}2=B>GoHEk@NRyjE?}^Mh-*2Q2b6waee*=&4_8#M@ZJ zl;rHI`OVzIq@T}@pYhe>`%h=fo>*2K&mSS)F~5@ik9_sp+kP(AcOL%Ia)14kPpq72 zZ`1vQr)~aT-&Q_NUu@T2+X7wpn40C$=4o#oe?4d}W_B0pySdf##TT;x>5bn7!Vd_r z{;Sw%ywdK_^^CnQcOQQ1CRQaU=@cIJJF!xYSC(MzczCs4)1u_+rZY?a z`D6*S`zGEJ{vPcgT>Z&3(sfVo#6x=arLVSeG34KAxE^tImF}Mg4h5Md+Rdb0->>DFy%O?GL%4#JB3X{IYBE zo0pv^FL~>r=pftpBa|&7p-bw2pTYypz{juCTO-e|*S|3JzwW$A%gq0*ZuYp`)mXLY z_l}U8ZQ`O0GtH-1^467V+j%nQi7wc9jAzTMYb>X^w=k<0=Wx7vxmrJd-yE~IAq(nv z-F|y+cN%lG|BkBFQ{o>!_hHD;$?h)EER>jLImNNjqECI_ca!cax2|W&zIPVHStedE zeRyo4qNzZ_l64a|Xf`( zS|gJ?#q84R6N|%w&&W;OxY_edO%%7Nz#Gl`V?-Ud- zH$7pd)isHEyM^uCX@72n#j%wXe7a?%_ixUlx*u#}>rTvF{=rA#()q>lk&S0&hWINQ z+5N~6dwS6(fs1Xyn~j`Xf1a#o-lW<(rzLcT&tW6^-P!+Sv_sg{GkBX^ufCC+q`vi~ z*s4`xZ;BVN*a}3MBrN-)o7nKixy43A*d(Ul=6v%za%Ge4i~pcV)`wcno>?=03SVDzOTF%|Fk@$a?koS8 zsb6z9cAVYh`zv@>9%s_ug+AYX`}`}8irff#Ry$W%C|Y-(h0?-3`k`}AWV%Y`0mTId>$xe?ibT?>+Q~dpY~i9eBHRiPWQamlkIA6KCTUJ*=Xfp`KjZVed6k{$Kjv;oS*pc{I0zHs;LM5b>*HH&-twv^XmNicG1F&Adaa)Z*6Du z)$h~eRWuU6!x=Se{T^YS7`Et+o9)NG?M^7arSomVtDUzGKGmo;_?}y__h_Kfjop?V zTDv5Ke|*^O@x?NiM?G@++J91^T*h`6GT@i>-^Ly^Luzq@zBayd<=Gd zcWSmY{h1hH(Ko58KIP!#_Fr?(=W+eFiO)S9*QE9Ol7o(e`C--vdksISZP>KV?zF=5 zMMrk?x^1|ebL6k`(dP%le%EqK$er=lv9L+`Tc3O7%3KG3i+6R^|0HT06HYDK<$obO z-1^RwOAN2V^1p6PQEy(ly?x$1`D?|=rJruEo3_)W;p}CFW%uW7S=?r+!;~?XgSQZE zyw=Y9wsK|@*Cx({NXxed$GDA`%id!)`5|t6{iWvJSI^GxIL3Y@=|^*&Y5IG0_QF+}O}zd6{Wnu%Z6C}{UA)IXFfpVr{pvN# z$E?u?3#VCqJl~h8^wNoE{U(|H!pF5u8C%+SMQl>dX=1wUb$iC%+f!m0s}KFVbe&UH z^-`wM+~12FkLG{b6mPe8uE8q(DP><$t89FhPSZSmC!E2xwDH5<2G!N_8>h;gv5<5x z>ePr>A;&!X;om}f>y29nq)-`|KR97^8wdG$cr@<4su>L}s>`tqb-kT@$9=Y`G zn$+dO*qQ%U*u8OPzj%Rjr;z{5($KKTHy4|?9qW&o#b0r1c`x^^GrncqF&Ey%ortbf zaDQiJUa|PGPwYAC#Zuw9F;|wePI&75;uCXRSEjkPP)Uu*&lB0*s*)+6=+sckxaK|6l$y{m;7ff4ejP*u?tq-qSm5CM^lrY}Y*1uDU`~ZqCicb1N6m zJ-H;^KKq2o>B#H8;8(@@ctm%o<+y2o_~0&Zs(W#mL+^gQo`;7 z$*E=u8&(}WFeP|De`?f6B{qlZ7Y(Zt@`E*dK4`zWxLE2jr?>FY?e+2&U#AJYyCn8D z^Q0ZK?2f8Cp{cJ-0ey!KHBkr_GJiVwNx;yf5p>V~QTQ zR!ot8n0YGZqZn(+It@qmsv_xP<}B~3qSa#NVylx?5@#Is7VOB}5%_cGe^%7xxcf_t ztyRPr7(%0Q>+er5 zf9Z?AUo7cgR99&I+*43jX&&#*t7dc7{y3WbKlC|k_3XUwky~O!-~9hKeQ({@Utd}O z{PZuIEn?Hwe$(viAtkTLe#>vaz4vzeoU=cbyp(cI-&8t#L+8vi&D$-WTOL#%6bn34 zEN@kA)va@PgF?g<*O?y`5-zeW5Y_RSv_)Y-<#OfQX_+#gXJ$Q0!81tpS zqBq`mJ2|PKoi(iW$2ZFuimmO_J^1Sn=70MtXMEK4Gfyb|(O?Pgv zU4I*DOWjuo&bEkU+Qwb>{Qlpsmwi8ctIxal@8!40_59X6c2^=Fhg^6+~yG1)#f zbK)T`_BY)9;mqd-?YLbut^a&tLy8k7-WTfqVDs_Hf_3U$eI| zpZC-I%>~}|U$#8Vk=6UT_1W|pGb`ji?sS{=T-)yZO?^XyNusL-R_uOMZRRh$KH*Q| z>}N7ji{`iqyWiOQ=xpvJ@kFD?wp)+wQ{bp;a@cIZaI*V(r2tQ3UH-u^JDwxfDPp8;@%9>G8D^c`$`tI}L z2j}Pg`=$Eh?W@o34}=?D2&Ub&j^OHeJ@2cRK(}fC_gb^33R8R1B~KJjdGJd+$u{8w z3wxsfw$4v7N7rjBFzrp=$H=O@(2YSQ*=~2Nz(a`=eZi!r!^V7v%=FU_H2z)@aWSPZ zV!=C)ilBzbT>=ekJP+Crw2Jm`UvuVW$$5tu;Y$rJPW)d#ga+n(e)#mM(1Pi~_0#h7 zJlU6}ikv@s-CJt%?>CbfWK=irm{Yv5AfQ6!_?|AlPPR2^Cx!dm6eGK?-ffp$$aIQv z(I1)6e$tv z-l?miWto`GufLgx<-thHowR zj9$jw=b67YFX*b|iP2=Ro^n%m60?nv@7W5TKSv)%@z{OHIqAt!wavxD`TB-kt~1Y^ zILEj%%P6$ z)}I3|mP$^iSlAMzo0Lr7ZD8lMINe^*t=RmbaTdd73wf`4bGCSP-Ptvs&x#g&EU@R0 zKkK$&EhE#9sZ4VWI?VO>}31Dq2*&=gF*YNC-p!=Cex2ikJA(H9duH!{`ULm`$NzF z$^BXP=g+M7#aAPB4eo8$<=W8_w`S9p7%u-_AMuU)J>uTd53ZZc{>-y+?s8dGt%M_= zGmh&r&y?O`mXLAs^rGJ>3D$yw50fvJG+%d{pH;)@Vzaa&MD4Z8UiLRveKKbTh8!#w zZPswQ+xdc7pk+qMxs!GJf~p4pXBJo;N_8&`d1Ls1p}#MsT_E+?Pnp0S@gG}SS@a%$ z?@)8%c`kG(+T|R(y#V)<_d9!JzVAuUjz~De`s#wY{vwNItil#E>J~Hk%_?>7Zpxg3 zw=GjdXRcHTRsR~HQ~2o1x`*cb6rI6a@K@0)PVkZzWWOCXdwt*n4$imjF*Cdpk7t)$T*O}UJ@m=q#g>Op&XH#>w27GZ;)=?{*0QTF z8crU+x;Ely@fxQIVg>ST{oA61>|4{qB%^|_6kFVCTYdlN&1rXXpKLgrdbIBsk9)f* zr~BO9rHq0n7i%m3Sb5r0cGkpB@i(z9f>#-8TV}U=xw<}MihsIi5tH(T%q@Fny}PBl zaO0K5rMogXUm0#($9rW{PDR?WWXTKDS^MQ$xR{@=ho4ubY__yxA!-qQo$0p@@EmM48SFInv>TANTkH^Y3{n~xzdWvJg zjlg+-Hw&92{Sfb}@GDLIpmTT&M{}Czd>QXOhHFf`YUVz9-NpBJ(nUQ}hR)sVcNu*= zl^*G0xNWjuf?VQn(F2;jz5b*Zx++qS zq8q!{Y&ul%{_E=b|6XwFoZ7?j#j7vD$UlAQx_@&cA}sEISR5NB;GZ|q^Y}xDD{>FB z`pUXpKkoOP&v5#iyLD4c^TN6IoezvTwoOm?{bTY16ZM^;H7jpbCcQjqWq+&LJ|Oao z=803MUIjbkoYwpk!F$uhH(94O{n91pXM#!!EOl$MUoKj3DT^=Bv?Z%cJ+d;U$?^3i zi&@tS53&b$B+s7zp1*Rh-1FSgDtkPZwyzE&sNEI4b+ zdaGZX9HXw8yBG$(z2cyGrlErQ^HfGwx!a~Goin68oGmRBrtV)E=IVNgdwZkK5e7L6 zABN6(!R*G-nN0_UXF7B$>8UeJKb^J4P|;_VI`54`#XeTQ)#UqkXYATN**!l&vFOs& znw!rb%v%3b>@?TOoctOt>o*}qQYD7ZZ^tAo6koVa=fIR_b<^UbZ1s=c>&W5SaB{7_ ze5vic4Nq4-X`iO-wZ!GiLFY49`n~>gmwkWzb^T$lUp`mme8suL7G%As3^hJm9%`Mv zddcyWxMN$Bp1S?g?M`mttq$Cmr*i-N_QDp$uIuiJo8>txrTuj>Pp>q49c8?lnXOo4 zo-&L1yF)rT&ks+?xV^gd?(UDPJGtKMng2ig$yH|`nf)K?`Jthk8aC^j3Ur?KTzs8xX=5Qg>8<$54~M$#nPI&bC{(R%IB%caDx z!4DM9ef4o)T3+UVHBC!Ds!ZkQnsb{@GW~42dmyGduvq!yky$IQSp=?|(^%IcCcdIS zWq17C^DDH4(rj5ACu@3cWqPti{=P`=o2}8^mv`9Pg|%`#E|akdm?D$mm02ls<)U@w z)Y)%7CKl&ZZI<40Ol{WmbIZg zZthmm6>W;!YJbcVc(+rhT(xdv`G!@7XLc?Wd~wBjBIC6X|K=<2UR_=rR-|=(g}i}w z56e}pHCoaPWnKqdOrNrI*r(6k>Lh8^YM@z>=a z@%-wiHhx)swd)m&977)W_vLOo7zA?}N>HJCaKDGG$*Is9x?Fwh^Omw~_ z5~^+@W%jg}`^HQ53@({D&t;mnD@|swjaZg?!g6g>tYdpdl-M6O^N2eiqeUaOHoiM? zqx_6=$n$gV#nQ_cez=@pv}N|@uII-zO587+-T(Gs_X*Z}j5A9Q__wUy$~W`<@AC#z zH{Ol^>N4%?_Owjy(4*3(Q`oO^s$X*3`X=5yvFt5|kSK$}UU2RP*X3C2eMQBSa!EUo{@mWacn@*brD75Ozn(=1`-~ z?#$Uj3KuQA_RVFwulJ(GZv$s~WLIj3^{r3+T(`a+e{5ZI?BbjbWjBFY&&7^!ENDHf zpRt22+i^>PvFvNk--e%;`Oa2alYQM!TDUyA)MT6C%qt?l9U6P6j8yswzG=J^VJYHn+N@=-qOO!13isb4pkCpA2pzwKP$ zCtEGf!}AvPT`Nh~SfbT2U;Rl^Yx?OQjGnh0n*Qc2Dw||o{vh?-GhV)5fis+U*v&QN z?l)Vd$J$fBR8yhp3D*;Pkt zjz3QPy6cHq_az;zZ_YNN`b7&x=dW$PnN;~GTr*BC)33-=Z20J!mrFcnKM&SvlYDxm-eCIg zH~rE6A;u=T?W_8a9hwj^QRu~wv&xa5+IHPfKK#&E)$OYBC9yE3YK4iG|J#*6wY|;z zvnN5$=Iz3J-)xKDGWj3N*|5etTwqyspnXnDg0kth2H%E~EM29Gi|2`7V7_KO@5*%d z8p+2@0cjHqrUdkMbmv~;QF`d%Yc)+Jck(I8rLsFMR;M}q43+jyxtP3Uf82uBI`#^W=N!d57bnhC z)oGBqCmGUi*0De%HrC_s_t@|yVuc+>7xwNjV@6^PaWYI3BTAs~WX?*LiuI|0SeD}(cS3KS2g^5=-uInlb{}DIYpr-EB&bkTa-K+V+ zwp#m5+g0PSaO%1aN1x@Z7S1j>eQNEleGi)izVCap`EXH)`z670z3q{^x}R0(G)F!4 z+*ri*w!(L!p4w%`a+~vo{oh$SE0?N5C;f^$kN@<>@QeI2I%|mgrCG zWYUdoZO(65_nC{qc!N;Ri(nz6cT;xdm?g*LXTR;3TWe7){>S*iCBd8ZTq#ycSx195 zvAvM{(;*ZqE%tPB@#({hZ1fxxCe`aPM0$pMtT6fTrud1{qU#MQ+Y0m~b|>Yrm!FHh zUA#lV%!F^gPXNBHja^pMU$!v@Id$&FaVP=M*&-{S=Tm zak6UOA0=ivscVo^L~!D@|UH&AFl@H z30{jh9&h-g=FRGYA0Pji+>}V(D}1#||M!8o3g;$WK7DWJjIdtL?dsQG_^zp3JHuN} zGk=Ff=gqZMU43D>r#`VyShQz(-KDKk8?9eod8s{d-%R%?A@}R7-V8)EfWl3_E)@ZK0 zx};R`?FAW$PMb=$z?D&-`1%gpgSX5_zI;;2&lGRNW@IeAZ2D}FC5=xkr} z@a3jOmObH~wO^VKv$_?V23j2cwp?Y;b)$*G$NpxDi_fpq_qDB5GBcXAdF{S+OCCDT zG?m*c(rT-=?hs!`zG|Gz@gp0at-f>RRF~hH+hOm%o^Jl>{Z!`B_qHAC+-uXB>Xv0! zPx=x*t^a6LPY2A0vUffi3bVBW+IeLHA z2MGuShE7v-TG#OK^@$s$T7F^YpL4x!JRHw0r=MmQaWXRE(reD2^TOt<8SY)|&&;YN zAo%fbg`)PN-mky7MY}DpomT#`;!-!O@}I;rw?7}b&-?MS?X@{lkGE|U{?wsx?((!# z#ePd)2Sl%$BVBdx`M$GtGXfqyV|l|AXtTV%{Mud47gud|#+%Ar&D1)-^2?iUW0g>q zC)z4CH@BXe{d;n$j?vxsmv8PW+x_>{z5+cn`LA*?Q*BccbUNXUHAM?yUagE@B+bIDI^A{ZQzjn7Q-GJ{pgTdjIMz<^uuRUS7 z&FJ*Y@_+KEqswoO>~CjbV_@hMVZeUaLs4Qm_^^lfdAH33{;ylEaEt#W+v$vEUI`u% z*IP>*7}o1rt-me6qNh7IS8vLSiBp6VZ!o_#{g$$Ou}0^n6m`v6{1cD-cK-D5&%1Ny zZ|ckI*Y!VFYP{o6Gu0{YXjH?zjh~y;qdU$o(_i%b%~~xjU9;%Z|9(%OyVt_H`{RB7 zH(J{jCa&OKx>HoEe^L7RdAh5ZBDk_Aaz`2GtTpl8aZh8~$Cxz-BesbNoe`P2IAd+- zv1zAEGrf6Fs|rhIZSHx#bCci7&OejZa!t&aFwc2-^wm_=JJB}#Z=c?Lu9fxd)0T^g zm$)b1;QY-}Kh?=u%5}PUc=u}l_cvF!z5n&(&C%2H{%Sq*?602RJYC)V;%)!u-KU>E z>hGVf_}S~p5#^&@a+y!#dFGmbl=s}d=I`bUTAjx8GFrQyhrbs;{qyPb)0Hb`c&~gn z$M1x8)uNYSN=vs}uPdI?y~w2~`G)nLfB9bbrAmb7Y}@`PPt29)|AkG@EuHgUbuIkL ztCHfGw*8J#V#FdYM$Of^J6OxEXRL~KlDf52GFnr$@NvJ*&Zp7`K5x4{*Xo+Ezvavw z=l9>OcRx|droQ>wr|ZXF&GvM^*QmC>Ri^vpdP}|7@9)eLRV2JVUCNtkrcvpTU^tgM zdHwgN3Z;gX5$D?7G!}a&KYq8u-A{sJX@Zb$*W=l5Pi8z=x%v9z8>w@*`akX0{4S?k z!Y%6N^sB^M{mvn`Oh$k4yQ_G(x|Sc8UKijNv2^wE-|niZZ9fmrf3na_Gl0pHF*THH zCSTan6ZvNoLZ5W%TvonrEwbl(yn6T)ZOt>^Hpr+}XiR8)s=57+XTZG4r##=+*7F~! zj`Na!Z6tq3d~&ED+cl3(?hZPpk41Jok5qifa5YKN(jm&RZ|Q3PKg;VD$V^{nZv?8wap`R!{%G`x(t3*;rs z6jocX)@X#h;bO}(+jPcPhiC7BTE?gy8q-QIYM2Dvv)mT*w1Ktx+v`tgPWhff6q*|I+Ia6;QF3X`sexlEj5RE_b56y@i=ITCsVA3TP{bpHk>&d>$T%TL-O7^eu_sr5Xn&~LCR-3u! z^(^LS?Z@1HQ_Nc13J#aPY*o^ZJbFUs@``ggRs08=_c`Avm}bi+(WltZWu@20FVx<1 zk(bx>b!cC=b&1o-RP&b?ebetek_=ngdUHC@CedpX^iA3dDvw`ei!=SEsCsik;c`CV z|Nbl&!Y;G8JF!J3uFgwW3Cm$UvRhbliLlWA+g&N$%*zYY-til6(eCTG!NskuE#<6w z&QW8_svCW$h1TBZb8TseILK?%qWC_4cfJ1oIj!HbPK6|&h`J!XK)ko_fhiB?z7=O@ zZF|zF!*iK8_DrBz~EfUU@IM$ja0-ZM}JkZQy>zH|NY>D9g8X&RZ7y=k1oA zZhxg;t(LwmHtX5X^s$~(0z9IwhJ!VTe{z4>&=Z} zR*!2VN@R+s-uWeC!CU7ewQ_s%VV3+!+gGmidmgeV=(}`8ess_!(cE93?v`y&2w6F~ z;b5qFaN1w1`*MG@{r=2w-geyS`xn7gFPDGQDSte1y`1*%gHICP)uUD%@u{1qzh+`! z5MyItkid2*K}mjYj$T1!X-I7T90P%x@9S@9@i({xUf$>GwN%T}G;nHvd-cjo!iF1I z)a|5iK0ERE_qyB%?^b;g(Y&!HJw5%{7PtI`I=2tvhDgY#&9p|cP(MlHfHMo zo4jb2d5*b-;`6JkuV&Si{f=89{y^+n&(?jefjJYoUVORp=-m47_omM4FIVMRem%j-bT!62 zH%{Pvy8-`nfA&1-9WB*s4W`t7b($*@l|GG2iM{bluu-C#WsCd7oJCwN>UJ$hO+G$7 zI8VuLYT<$_sosUD6ZW@?vfX`X7P7AA;xmSu#o3Zx-G#4tuJK>z7mr&L$iGRE_2qd> zlej4dm0DTD-be8Fg{vgAvlUBN2bKq%XJ2wH|AtS6^Luucp9{=xMP;zcF5X$axO|b~ z$JMqojim007c6$av+(5N#KjYYtoAwI-*t%dyzsK%md^Js-6~Um%d817t@#aSBzQuo$CIGOj)p^qJqoTDlzgX|dmf9>?KD}F*=;l7MdRVp-NMs4_Agn!UAa4qC0!zWgQ{a?aMh73 ztC#-}({Cu6a`5?kk+s=@*7B=mO1^e&oju9OMFSZM0yL4Rrcf5+@!Jq$soDB8gt8LMceIn`VGe@K;kKa77 z(z)+y>>?i~9zAxGwhsAy1}`rM%{y%KUCml#@k6fxUy8ad*M^1 zI=2M}860hX9sC>UnNWPhu;)XT3o2d_2mnDVCc@asqIxAGTA#Z2%Hjyr3g zbW`GN#Vo!ncXpZlR8Vv2dy(=+A2owKO=4ZF#>&7jMF7X?nPsU(#hLkedIgnR!(;Ov zn+eoi*IZ_}VbeAsK`D^a|e#AxFh!W+`z6J79hs(01w;zHh#gJ(YP zQSEMgwkKX{R>LKuhKDnM+J9uQx80!}{pskMyHmLp52|i%;QuOQcUyIL!h?jUo&F*7 z3hsXIl#kHt_qDn9%w`YAgLci9b2EN=v>9?}EG?U_ZaH(eDD>{1+an z^LTe!mw(^&2|pIbACuoX<-79aPe*TES%2zKPt6mr^BtA=gy~?p@?%$tB z?IykKtPDwvXckmk&H3Ic^#QxMUSQ-x^|MA2EkP+)daHdIwtimNuKAQpIGH#3{EWVt z^JYECiI`;aZS9tGSD*Z-nCa@0q}IkMdR=Am_2XjSBR0+OR8uN@b86#JW|Npra}vv3 zTaGGf&sDRH&NylK-ua}Rc+4gdNyn>gJJyQ1`7aHVUKjp%U;Q)w1NNr%%jyK)%+YsN zH!%%CRdqp)8PBX1`gq zRrbP{Y0Yt>Qv6Fcc^&Fv*?oEHo~1wCes29&zWmzFn;Tx~EOwW4i_Ct9d}Y>G&L(S-mcxD)$mfp?^}0KLn+ty>?J$di}FvN zF}m4rP^FN_U3$Dxto)DH9p;du^W2LB9`Ysa7ybKvpJhum&jYQXas|`$xV!Jl&8Gb6-jQz>zwCIo9AtB9eR|n8q|9kC_p`|lUo48f_tjYQ_cXT3%}(zY_Wg?w zyzP6jc)RT7-P(SQo{wfN^0mpE`IKRgZ|1~|;@Y6I>$cxt-ZQcA$xErSg2(rB^R{f= zW*%MnZtt|!@=3x1-&Buj8vTg5aHOw{d9x0Wci5ax=?`+NBm)$F*C!fPH*ux6CC@IA zw&wT~*LR|$W%~4`oxO}H-aC$@6$w>*=hO3NZ1?(e@z7rtUXfR8Ud%d}njva6;gDL8 z$1#1!D&;vF4lfSod8>MHPt@nHVkbSz@3;jVmz^~KmPh`TC;lAmX&2<(o>e54znyKj zWBtaJW;6GMP7ph>XJ}znXSN$B@a`T6xFj%V`X`TMMVTZs=k=ki!yUiUF^X0A(XeryI~ne6tv(I??w2QV#N!mGE=we_dAN{Ua(MclqB9m9jI> zGb%4mohSB^LE8C;R7BU5p7r5xXFC|)HTS!9{c!b>+8?iuX5_zPpPz6uDC_spyAQ>b zEOs2#wfglp=*#82f@Xo5$1!aYi?uwT-WK!1I25T(qtmaDk%1wL8FN`wZen(-KGK27 zwUZ394;u)ymjCZ+=81eWAuW5Mv!^wSl$1xClcv+e^V>RfIX(H#?tg!CqtNLoRTn;d zy!Z0uyz~wC_tvGo4_Z((Bey6dPE6>n@E!?0tutZWsYcCP&BV1&pE{iN^8-gaS7NuH z_KA-@Tg`ZX9#GB~5|Y2T%F#g$W^2U&i2Vo{{dDza86F6(IaOZ^1`#b*v?Z&=H; zPETQ~d$!Ic&&^v@Ez%@?U-IsXQ{hbBvre)({fAe>zMoa6{eOIGUi9_Wxyzh)xN{4f zSZC?^xtM?dtyK45n~S_Mmy%XhvX8F#j>p&Tvd8R||C_3JVAkqQPgOUy%|77b%pB3z z8uDVs^`0Jc=1?WSH(H$){!5haZ`5VpdL^*-nB)810cXBjT0JhGBob!6L10(r3h$c| zxwc2DJr%j;9h(0!NMe7B%j6jc#hCcS9|v4{@=9CAWbr%Yn=2MOzH}Cy_%1Af>tnq@ z%-t}b_|P}6=iAP3tL@7@tk?X0eyRF?)S9p-H7BZ%hk+r=n1MkGt*Ho(s^t9KTyRBr zH7Y*;wwqA>_2m&q_@@L!`d)r5dUYL z%$rGfRHsjxW5w#nZ?^Swd3t)Cu}bL?wfAlEedk-xAD$xLFK%<@NYIBR=lzn;?|*oF zeU*N+dyc?S{?3TIDQ~Wxmaj{^EPd|YCljulP4_=4bX`|CZuD+#^x9ORwKHGqncq}< zxbE~3tG-D+m5CCmacYYULT&cmlL}=?n)i9asf&BhCqFs8Q|Z^VXFk)veC7W);d1dI ztB$ZD-EW(uecxLDxD|B$rnAl=(a%9=oaKC~n1RD0a6V^=SqjQ-B_PoygN zlGVA#O2`sS~tIQQ+;TyA?~r4uLE1a3Jj znfZGC-spFFKa5%r#CeN0Z(m;DbLZvLr#~NTzx=Va+RRS==_}Q@cdtHuzxd!4*?69F z_xZUW-M;wb6H~|H&!;ahR9vPZ9Da)bUVLn?-m-VEKOTK~)xF$e->t(IJ8SAqB_bu; z7k|Fozj&dwg{}SkD=S`{%*fE2->cvD?&{O0S8B_x{+?apxp{KG@RIN?jK&%={>#h+ zkJ@K%RhZ$^7P>^>=FhaNZHL;KFJ|3+x#4mAO`9$zP5}m)b9eT7|5YiT!6C`<<&VZg zZvD>!>w`|z=|y(NYPK0~F8UT`!#sz>>`v>XZ0pax9AXV2GH>S1F=%g@8+7-RgXyWm ze7kB8{PdjCZ3Www=8OJccCt;}gkg)XkXTC8bH`P0-*oUUzHst}lggd*P3#QU zLe@Aj_tvZ1sE7?W`Qn`BXpOP{tddeo1qV%^_=>q<%*A&x^m_;ude@u;fbA zZoenZC^~gx#>%kE)9&yceA2V;$843x{Ju5H^M1wkDB65hSeP2vzAk9xdZ$~4jjSzw zQmP(OXPm5(9;=>Cuy9JYF#B;K>7j_k8M_CM>&*j??LP9Lrl`QyZ_!Tk_FWT&o0lKs zI@_ZVxuO2;o`z4g5BJQNY1X~BmVNf`FDEl^avX}-nlo=2^QLm8uV3COu{mgPHiDLLLbr|f449;oUyGTyyR$@NW?Pj+do)^j1R zIW0o$VF~Pv{I@4O-M?wNrSes&fUj~b72$jVahtqm?+RQS_UR`#_g4oS-L%XMv7lQo zJ&vqlUcGLgx9DnPsbh(kuO$ZD|Gu^O51ZfZQ{`*3XG_{jty}Po(@w*JMP5tf^1Xl` zA`|lrtInszihWMeU7&wgli{53eK|La3H$bG38t`%J$R*C|H7z4TgcU);la|ke!88F z-AT!k&tI+V+HSm8KaQ#R^QyN#71Iu~y7XLo9=IW+c^BW6?xyJ_!pbclT>E`3)F(uq zj^1*@|D>mV=Yo31mSai_tT)CiTVEQoyYg7y&EKm(+wDHN$>MGOf7_MIELkVz{IxYb z`nYt<4VFFSlh-yY8FnH7a6$hJFN<)5 zg>^As31jJ%yBi+OQV)vTS)XSeETMR_`}kY#oSrZHXK7a`_pE$)a%0=cPf0BTe*7BQ z`q__Fx^BM}33d<j%5u+}(}$z;oaSG8)6KzT_Iv`*9M{h#To2r4x(c|Q zx@4a!nqc|=WS*jI*o$XMosVYdr@Xvh@c)|b&09Z?Yg}4B#VAOuDL`t`+YRq;*dBeb zZ>3qf)rEyBUw#J8$P@Z~buW8;xxoB2w@%pc{Y}`MA$Q~B!a&On{&GPKAHDXk@Oh!Z zX!0jq_P|mL-v^&QX}c91&NeMwyjGW`D^pF5ceY7-_U&V{r6A9_V`iGxdCjJJ z`NP9&ULJGVnlS6uL7TJU24N4*N(vUVUGDR_r~BXx|Cy-|_fMG`dFcEE9nq3ihG)}R z_G$Djog)5n_8hK9pLY1L{#4$v>%JxHTfSBEmS0r+_|&I;XX3T2g-(TyZLcHUeYt;F zCZ#``*A;N0Ii&p5gvT~(a{`Q}bS#~}pDmVcTL$BVo)?S1EV6T&zSsM}%EOuE3|(Sp z4lY@ATw>9^h%X`Mly$>jC7!eYdedgnh`uIbI>bZYjY&^wq=ai87>5c~emwjuvzgikP$Zp>F-BKuV_nHNLVWLZg zLd)4T0_T*O9(`A~(y_rH>j1}@HIAFZc88voyyJhVC1iDxslKk^NtxC6_7v#KNvr0I zhN-SL-@9ndms94&jK8;rFcq?>uMXaq==^2RmEOf6ceWQsTnebOxiD8u165B@?=|cJYc9*+zVv$;P}=puRE?j8`-U%R(S{iIkEInEN_Lvp=j~RS1wI%I5N3- zt#N3%a_do>j~k}HdA0ULyAa|yCX^8cL=J!7YTR1_MrHZm%qN7 z(cha*jrLJ?&-bicyL!6Vsc9h@?R8(Sl!ZL%_?P*H^}E!*P%Ec}D;KIhi8x#qammrs zJ!tkmp}KD`v?ac0E>Vx%+V84t6lE%6u+`uB;EfB@Io->wf^rvorR1}l8opgGvt!}P zhZndzZir84Dr}#{^z)lVF5_w0dy>pI6SK;F(n5V~Zd`U+lDr_v)!6Z|;zAd<)y*B9 zYrbt<;dqQKe9er?7c-W3o1|zjeDr9a_QHwnvrW&ozZLqE!|!up>(XMk8$UQ6-F|hs z*ICWdG3(4l-VgtbeT>eV?f!e;Csy+8nyGPW>^GUEW=_g`lhhUW&2Z&U?O72wqvkE1 zYva#-^S)VG+Dn3?U+AHCZ$_!5 z^UN}@@8M78*1Z3AozLp~@}Enl)}JrCA}qL$DKzI(X~M07Yrg7T@5RpY1f0Jmzx}Iv zLEgU?ap$K$V%!_bB^~j$aew8PV;71KJ-AbOYO?jaDefHK(|)YxpSrcc)zd@&?Wz0n zCU4$J{afJrKv%S?uxGu-%i5NZs5>W1XZ~evT`6~;^Rdp7d+)=YLe5`pD(em3#t~wv zu<~Q{+2=}2PJMLVV|sqkI;qF2{Twn)^R~}6$!ZVl;n?9pe~u>yng2dF zYfXnR)Y$)&A^B zs9vl7U+4Iv{Y{5fE6l2Pj1!nJM=T*fT76f{F_+Zt9Zu^i5+&>cFM~j_l=HL zXTwd6{w{N0<)m{3yq`Aj{TqZ*d*oWJgT>Yj&W*+sv^N72V#39R;aT$exHbLrCkiaORkZ@bz!*G-EsIq>G+ z-RHCZx9v5bwd&0uv;ps})spKnxEUB$Y2xT`rdFgTmzLy%uEV(-6`gv`nCW29OESx&Ou#sm;4S; z67QU2S*&+|XVC9AZ@#>^-aJ25%S)HtbEdE=&8q z+jqO2Vz+-6J5i*#{#N?(MgJI_P6hegSh>n&X2!h3&#eQq6HGj>E_!5oXM$DaNuyxx zyOWsqt!}Qq|dcdJv(&Lz1gP6@9LJP#=mfTbXc0ztz7(@ ztCT@ccIW-57paLicz(u*weFa(bmoESleylW?&i*Y_4C28J<1c5woHoNSe9{MQs;lw zzT^d$?$k%GuJ8WjGlM&yS8(3@w@X>sMP%z9Y=874Zi)Betkq|0nY3;BOuQM7`#fbZ zN)(^GDEZqnzmq8i9#CM{wLTUsX1oVXxF&0A^l&qbwdk@r?k zF_60~W@YLrUT|)z&T_tcdNOyve6g9|9JFhyqJxLP1eYu7T^4uUriy${@w%oIeBtv% zpTMK}r@kIBHJembu|?v93m>1JcjhFOD~nF3pJ{wNg_TdJx!2rxt*YbVlZT8&mvP`qQ|0i|rPqlO5 zHe%l*j9&Z<>)g`5WN)C<j4`6vFs%Lc*1qZ0n;M z7?y75cB-?V(Y8-aoq4sJU1-n!k6qVQEz(}t9@KVtp7)TU&ex82#^TuURVSSKKmLf4 z2=bS3ovdiMa(m8E;YFO>>!wLpwrR&ox^*_U)y1ERN^yK*`>oVk`RcnXI=3X3W+=W$ z(Df6QIl$W=nrheT!`V z0q@;q4buG6oiF|lNYQ7kJ9zNo!*+9fS@q@nW%k$p&o27)?9bgd4-Fl*#}){))$=~8 z*Nkjy7G9Kb@94_H_jhDBxE&U-{&8E)+A`7Xh3oqSmG`Ae?>A506tVl{Q8mRg$~)I= zU3i6QYtXS1WnUJY+~&J$;exjUEQ*FgyB!6tyom~rCjrZ?8jN3C8LU46DvBjwyYbzZqncHZWz(~ae= zdAJ?g{I`Ex@O-o9qB_%VjWwy8mxtX6(rkWedu4g7g8p&s>xoNL3-`{sW-Wh6c_J%2 z*DQlSmP!h-=NNBKo6q^!bzzuiwQ%P0t(U5<>9gEg?W=3#erf%x5(EI_boOn|EKH+WkqP=7UQ`Pt(FR z=UblUuo(F-?|joE^!10#h22eg=l5HG*_6MiJDDZiL2V^7uaD$bPNCUj8N8%w_4wCD9_v;F11*A<-2SKc{&G1$B^NFXrCH)WrOQ@9njm|Hxb~z5TAg_%HvOC0B%=hihNl z5$oR;w6@{%=>yLKR%}^Nl=l9?vQwMHty!vO8CbJ4vehb@N@e=+)bdV~y^JhE+B@bo5V8o>Z&#^sl30qx9ak3p*N&^B4ST zu-9sDVN^X46}G{b)g*=H}Xs^igyc{^Ivkk+|#@_XAbXc z1(p3j`TzcQE?K!h{|-Ffx{7P_J|V*g7REhmyX0n;S=^5)dVF~D z-IndVF>ddzh1Z|Guqp6XLRJ&oRM%-KLR*Twe2qnR&ug0XGs=9|mXjxDcb4fq-yrKA zZ1Rg`ck2h+X)p2v1Qz}HaYt~PmTG!sJBxGe*B;3?@y>sY98O;IJbC0@*^=&^ep*YP z+S<9ODf|1nCh}fg@u7aP-fdC;xfT<0tr{*a;p7yIENIivYL!hleCo^7Q{l!|bN<1- z-nZ;J)cPvqNU*Wy@yjK9BHPlo{mb~t?;az& z{wnX2j9JNi!d{8X*JZTa23W#67Li=BK|; z$H(u}3nv?#-P^h7w85T=(htf{PMpr@;?@iQAUN&s%JAb((JIChFJuc^El)ip@B8?x zrG|<^Gc$X@Vc~}j(({=+*~;Hu%UvL0y=nPriC0=0W*?q;9DH*7=~COmlB;35+mwzi zI%Bd+C!|ntQHevFTJqzPeN#4noF}cn{*2;38}?U|rnhj!eVOo1YDcN&_njLWVLk^Nw;Q^4 zIT4jhq6%Jhcq)6vxCrIcD;~VT`1_rsU7dJ^tx0c6_1oJS;=bK6=C8j>ESVRZA9ZVb z_v6@?+X5#QuerYXja}`WX4#bO7hbbX+wdt`DfRN=^q|KvOaIy){~-EIV%9FdqKG56 z#X??wQ!VbXUsxzycscTx`1Z&8C3l-^*zB8midM+3I+8tq?^5&SCd|tW`S$*wm7})P zVMS&CDQ@e4)SsJt_J%Lp!oK8&RpYildDm{w*V{U0TXExE1*Wxu{=V{Cz0AV-g$=vcD&O9-)+6ZG#9;Sxzu#WAaQtrWiM~_5 zzEpb4DP9JKW+TiQcknzzT4qjaVnL=}LFHMg?EJ?&KJKn(-KeRs^Ld8+{96o`3e$bp z?L3_;HhasBL#3r#TyEYuF=>^%Q2E6F_hu?;1`54RDGuMlR;Ju(eE8uW%O{Mx|NZ#) z`Qg$Ym$1&m-4Q8UeU@nS-|#%Rc&kN?_@0?E8!qp;F|BCpx|_Sr^Z%d8yVmqqX_Za# z#vQ_$aXAeASDW(HCNDW-uER5VS)P|*n@?WXo;8x^H|=@0^~`3k!z_XOZZdH47X0Gg zFPhFjQ9~eO*}eLV6sh^ALtcEpY~%f8m1gG!m*i`=ozk?AX_qb5WN&++b~gM~^ugDq zTGP`WDDRQ_qaW(NT4eIcuVc+NXl=@~a>8?F~|-F38GwLkCmB=<$% zKP8{+Hm%z!oXYy9viqcpS7oT?wL(#KdHp^$p1O@54sJ%1OC^3y^_VOf{V3>gMAM6j zJ6AFtk?&)FYw+QU-FL?d#lx!WTiT=+>`jYXFs-Sd!Mpzby{cNJr9Z-zSKV56aWS_A zLqHyzpK>pzL~wkf35v}2j9CPp|QI%`3$UzL>WXEZu{PMq1{H<-MUuk#+^g|?L6dp z_FL`Kl;-e##26;|Z2K3hxm!*=(MZ<5_#|NZ=X)Ig_Elx18>C2177gxWNI1OziK@-s z=J(PwFMghV{P<0~sFaNT%yZ8PlnYev?!S?gv1IL(Lo6M$0uqla2G!QwNz7P(yYOkKwywsw1;R-Y&Td0ylEmpV0>M|UJ@E;{YE zMObI*J?87h2J0nl=BM0lRc4!&`sK5+F2~BA2OFMjYui1?tF>hvZ(+tdNAY6+-pbfT z8(!aI)ZtB>dUvI;xmxaw05jfS9tZAgc}ONC^=w|cW;X-RoTfWETwIz7;w!?oo%B|i zQFJ3^O=Vi5#3LCck!MFvDQy({lXv<6cVyqiD;CuU{xSJ`FuUzK&*R0(9l6>_?UcxJ zm#a%mT_sC00|JE~UgNqsc}skEMV4U0j+?DMN!Qk7CRxTY#Vliu=-I?|hUJ4kOVQJ^ z<(79?%mrQ?k@>D}d}}GspM_e=YqezFXs`wB`subkK!N4nmiLOM!;b5@EX@#)GhbNQ zl(Jaf(E78g$L5uaFAOF&-O#;Uo%^87AZcF1g1QpHEr%Z!ZO|+>dco0ru2OeL-MK4E z*Df;4R)704O!MlMKN0FJtBvxxrl+N^iM#5*Dkl8XlFyRG`%bQj<9U;)y6In-cX!I4 zz+?Qc9(z=2Uc08czdbSG$~KiXj?cUI$=p70SNE3N&I1K`0>?#pUqo$s-yf-!ke+zf zHq~JoQ@{Jto-{ulAXS z^02Zm-WlKQp8L72V#@z_Kbk{krynr6;?y(gQiFno)Ha2S1q!O!d9b4v_yfVhB?be6uZC)&4&(_`B z_>ybR-03x~zPI--EO&5a-Cdud@{rn%_r5QBRwWls-H^HO{OQ~IGe7^CS=@K^%;^l> z_ecImTxLGMV`o*ptLo478#P$+9w`NUTz{&2L*3aUwrdZqy4B3c`z!ZHndXI=N*aeY z-Z8ss`cos|L7|S}gqN?byE^9;^z%(z@idjY-!$j-2JH;xhJeg&+gEoU@~gz2ZgF2# z>t6VK;c1n1tv$_y-v9QEqTlkKJnkA z^wn+atN!ph$7Cfm+`fE%{#+jAbE)DbGuUT$>+d}C$Lx|%`jucorp;gGo|(;+?Pc{M zYFT9oH)nFUT4zMc!6`HE7|+%2mpbE=*K&Eo{d6@Sr)@DWWK#;h{e1Ify}7!5%)FhU zeDl65i=9fj$b7iw&F_-HX94BmN_-bhZZEpa=6Jb3%=Y&6UN75|eFh~5{5C|IF233{ z`?6BHmhNgD9>&EhrL+`wwanoXnbIt^EPjQqbXV<;lWk`Wt~5tPZLW@7ulTv>&Q$h; z9F^|(Ojig0?heh*U4EWto9xf!ht&Tqy86zc#eT&@p_vmI&zFh>#ZOsWmUyBd`$73p z1*KKfO^l*)*XJ$SQtV?Kd7eLZnR~~#Y0o>X{BC_*kk-;4aOUBj6@R##WHtC->xyb= zX6{%yOZL%?MY}sgCkH%zJ}vWaXm>`>FNl7D6wAx=POezb7|p}gd`tYw_Qanh zbCaJneCl{OZQ8Htb6KX6fM*691NZ#VOn#VdL>zx1;FcUhh0zWy2OU&-vw45<&-b58AF zs-Jwa&?WUo;SF)CZxV0&o?Plbv*m{D!Y$p~!gOTX&jq$W>16m29l7lC&*c{H+}|vp zaV=N(@XXbVm+H&>`0)LxuI`&f4cW<;TVCpQzFK}{*^~B9t}Yd!-7y>gu92RzuJ?xJ zyqgyi8AL*7W%Ny*YV{;YU2xYGCjK|qYZqQUkyrhKdBW3q++Iu06}`@AY|Z_BZrOvZ z2WM?J`>eSsUMx`X{p1>%efuMMqEegqrqA?ONKc)4IK{qO*VgjR_6MP+TGij*aC~Ls zZkV_6pj7@RD^8o_+1F2pGV;0{;2S4Eh2_(Z=bE)otS%Jx8tn~DV>(bO;YRM^ITEXcc{FT zc5B<0xY-v4pU#}cnxXaccHj1c_ZEg6ezB){i)vcy=7lH9?%h=S@^P*HeV-gUopd7r0;b9&x0*&_ui2_9bM{PE2fBdr~xtFYNZomHPPZM9x(v^uBTh_*}X)G*!d`aYzljoa1JYK$f{yD$=L;L5}?%KEG*Mp4scRQYO9(h-Bi{pIU%F^@8 z_6J1F@q6&$%5J%|SSH5@l5?l?+*zxele&M6>U@b}pCX1It)Kt(r}nSK|3fPKjyEslyVE@T-TLULZ3i#jb#E5A5c}|=*IaW&VSd&VakaS{ z<>NP6vuwboUM^J$ESmh!>N zJ;zEv?-g}AdNDiGR;)WmS75bh$7!=B(Z6TX0;&5zkzGyH0< z|9^aQc4^%wEBo(k{cEKf?RnLOr8b!Q22Fc1W3KvvFNJ?2*P3q@ouxBl%~dBe^{&Ki z33F6Kx>Amny>3~mc`GFR!OwW7?YfgrEy-M~wNUqwjCWDaruT2=H$Is3_KA;P3b&8c zx{K{5^DNq`&P};9sqw*@gxm?ItwS86-&*udTAHiGF5HpmsaL8(-GdAB99A|g(-6|)3 zWHG15qV*Co9ctoJvjqPz-CRDS;mpr(#~7m$9%}Khx2y071+C3wOj16Wso-aL=(_ga zzDBmz%oz6Tt2Az{yJFaxo;{IC_`;6Q9qpydUz+g!Uf}Lm;-Au7Rc~C>iN2Q+azigP^vt!+h|MnV&bxeS`qTFFxGbmEB?%$D zyKBB?Zt4j-ku7JiDOE+pW7CrS372Z-i!XgC{~>%{xyHFoaXa4!9AjzN7?CS=+1qdF z`?``l_O3@>vrU;jQ^N6Y!_kb4$vy`(w=y&7JT3HH=(bcg;>q#cQnQ`6@?Wx4s)b+9 zWUaBPw0Qyup%fBx{qce%8=4;S37u94jO_g;ZP*_5qe8*+<_ z|ID>YEKmJ((({ET*FE3v;-$v`K;EFk~X0n^i z+7ZyZy3CR5Z)y4^&Wp zrS0QN@H%`63oxM1>^wx$%&B>;Eg)#S&4>#?0qiLLeW;5Eq zXz(BVcjEWcrM){B>uv|ftawy;ZT93nGnYNT`M&7ertRTMErAvReEJuDAHL79x!JsBu99JoZ9rL@ zlK%PgSC>S#MmgR7IPG2HF|W&Ky|$}=*WYU=bC7w%!rSjEZkRfK7iwL1@Tzpr-?IJr z!GXM@g|6$CuRE(PlU%=vq00D_Gqd6(mDny{8K!70j_}3OtgM+$PnSM-ePQwZVpBr( zG_%4KV?hD?lxz!a3H}FDOisOs*nRnCeaf4eQ7;^Rd7nznnrGKv`~K653p%sYPik%qVDbG zVQj`3_LZCCwsYl`i>+aLU1`!%^W{Iol*K<+_;kw_IJOsFHD^=8EJs4J_4+OXN)N zi9c!doVG@3-RXCsE!9fTUR5uA+*q@lCA~qEywfdeaEkbX&*v(ANnd) z9LW2da(GsXpK5RZ?t(`3=BfAFfTg>*Wjp^9lx#pTYme*#0T$xX>WMEm)&TY#%<%7DyOpaHmRKd;5O}x zisiYM)y@iwG!H5<>M=wmZTWS7`>J2RnH5s~zkR#QeZR+*>F(9LSFc_Ty&8H|e^K}5 z!~1jOp9_aw$*G>QanZ@;maEGa|8=$6nR+|FZT+@57xt$~p-;`X`+j+L^|igr^zAxT z=U;8=F#0z0?5U$NuUvV(pGOD$_+++z@kyPv5AScvxU^@*Vz#W9<)wC=%T6a9oj= zDxIHxE?OhCB5;atSMQbRJv^pdp;?hBVY-t!`6lewzsem}b8hvf2mRui#nz|SKizHo zW2frA=NH7AG~`2k>axSS_w4ArWVK7=EWi5G8onDstbF&Dm%n+Dcu4HVamN3(GsDc+ zNV;s^vLkYtxz5bx-Hs+R53gp4JMf=%^`&KNgft=!&yF_R>HVX+Mk#96GvjG`MXOhq zf5`ctqvExJ-7JzxX1V#Fg&NJuv+o=_6WOZw^m6065<^XKpKGgvB!Z)^o?)x&Jb(Vh z&d5y*1+~wFI|OV#@59sSrLw4Fh3OR6=bJyJ37nnClvs6V`_m@>y%jp$C$GOxy!E+B z_Rchiugx#EoQgQQiTjA{x$;TZJ>yhDBM&uqoo(n_5bQhi$>o&5Yo&FzlOM}=O;dRi z{OhN2bfj;3=HydC?H^>*oy8b-MI1Q4>e_t~!Rw~8oufm8^p{`$(|C1`S zfBIE@b4gw9pQgl*pEkX94ZRogGRCyx3xf*p=}$fO*JD}UNH|xNSN$t1si-KK6!UKW z|B8~CbKdN?-xZ*|ZTbG~q6eRE+LL^=Vc)*itJOhiJ^!s5^7GT5KJl}!Qoqq$w<$jK z<*7fFn_bG1Z5lmyYQ9O&Zw!gda@d)n6*1-4cMaox;*!-D?C)=Ww#_7NzRvUOYm6M$ zKD++3=l{F>+}x*^UldjRJbg2;=)>iU2hT5_EMLAd=Jh3ejqc34&1-`8{rP#yUNmHN z_BP$+@~Y|&M0=$UyL^xftTCCdKU<{Zg~fX58P}K1nPR;8PpMVo%9BsxUAgmr=5Jn+ z&~xOa>d_bO(KU+%Ig1x;*SW8Lgp&Rqit#roqjyW20&nm45W_b2WgVoHU zedf#qmql~fBb2(|eST(k>)tZW#=ok}Yo2r%G!z|-D7kIYT~(gmUU7ZHn!F#|=SG`F zzhU4`EZzLsa%~aIw&D+U|DP{@^5#oL$p`OGh5!GsXsB6M)R!^Mf0%1LKUcO-@7sO3 z-KlzIi7xC;~Kd_^5rpwFpgkqlWe|lo|^Ya+qI!JpftX5hj zUdj5@BPQb6W*+n4Fn0sR$+y>Tmv=kfZZh%x_wxdh?=Q1XvYwyV*ynzapGo$;+egJ( zNeTan+2=p+-^>#~fAdZE8POW1TFX*xI+Sj{l={AG^5MnX5Cszf%$;+`um4DR{#g3o^XPxi zt^c`i+5Y*X{ulS_R!_J3Rj$39{ZIXIecq4xbN;XVIlt|H<%9aLMf0NWSwEl7E~8d6 z^MwA^Kbu0H{`+NJ^(~z5?|S8ZU8Z*Z?&|jW4X5W?if=5F-}gK@bbtN-yrTbw)n`S0ZJ@(t_w`p@+>xXzR5 z>C>B3{(SlS+tZfsT*BBO@Tt4x+@!9%8`w2M3^iH4ud4V{Ke^=h``@?gYq$PwU%g}h z)Qy=_u4GO$KM>P<%l1#Ycx96Pt$&RFi*9nuGyANco49w+yQ7?Er0re@M^3oE!Xn2$ z@uAq(03AaXxiC}HQ%rkjr2O8Yf4?_AmiM#O>HJU2u0O9e_$BE7%u{CXlKEfwN^Yix zez+eU6K)r4)}4Ad)hgkKjGL+dE2D$F!sT4-o_p)%`vmRvf9wAjEpQR#2wZUBiSMK@ zS!T2Oez?s_vDEmgQ7yUm@b|;dmN~{2Ul*I+@{EbHZDb+RW+J<_dx zYs$Qw8>=!amhXGrw=7ca7suQiet2W$fO1!_&Cu&Nsv-QGO!+p-H8s(2MJw7eIEA*=GC(F4{ zCBODvE>dR{Iw-}zKV{+DsOB@#>@z1Xb9%pa>O0=>0_E&0JKdI6^scyM@!+*P&&_9t z_TTz&rf%!QJMrgg1f~B3bT5Cs>vien7d#4VFB%?q^vC8aGCho7dBG*<`rGNI&E)zS zGqyb}iVkXOI}>OBYr3uXi#UE4o6RdCj9Tj7$gE2}KI@#C!@A10TSj)r|MA?3EzHR6 zs4<^D`{&gCIzGZPw%Zg`WkkEX&dY!0d}qn$efym*OqeU~owirwMy--rg%D%e_VhI` zo;K`%@ijF1Brm&)))!p^wx$W8evjQF-(~)oVSkj7=Y>{w<&Le@3zjfAzbvlit&#rp zGvjt{N@ag`iC)~B){Oz8hqrr7YMFMeHA{HjN$aegG1oWrP5aw@A)j~0+6zv2aj67LS3^xCwI+gUL<3xzlh)0@3`ux4@=x$cfRp6(N=%ilXm6K!ZglVn_1PC zzg=-8U2XR2Fvl_{fwn^)_h0k#UamMl?dul@iMfR?^?vEzWi6{V^Hwt6cy%wuXWKfK zqf1<$nOjS%b55(7a&-PAm3x~u3ePyZb%)ckrP9uSq)gNV?6zKCdr?_~saLH(B4@_6 zia8VPzx=vk{=}W7?`+mHrG>pe4&BW?%x-!%eIu*#wWfc^A2ZGR?G%%9;i8#Nz+yeI z9Zb)1@^|O{5?OvS_VjaMfxB7VRC2id|2D_ImXC3bR6 znS1V%w76OQw@Z2a{>(31c~ds-nKyB1=(XtUS;xdQm{dcn_9q59FL=CZ;pVcaZ5Emz zA~&rybv$Aw6L@s4c79mp(vRBA2FI6KcrAYyXJEQQD&_mW%?hVdO%tnPCb8W4sI9lB z@??rqk95c#m*bYRH*xiEcKZ4`$tXHax@2YC!^W>|t(_VH*Z!W8+|n@Z`g{q4fC+V|&CESGiHUnh=xyWgD?i}_c&bKMTD z|4LS?yq4V@jK}uSz$1+VcC-@yt zujwpcR^jN*bScs=pJfowCRusm$||le+i!W?eWJj|`75h4<-I}uxvcv+7lUqZNY{L- z7ji@EuacCg%Iwox*P`FtP=6D#E~0TcGuPCQmnS%X;C`UKLSxrn*+mb74@vI7xA)Vp zs*Zhr#dqEp>it~edFIQjeZjvt{MV?}+*93o^3tC_a`!j1v+B%_sStFzJm;(t|JO@@ zm-$pI-teoTpl$P~d7*p%>19dY*>Wt5Sw-{GCf?~w6Yp)Pkq?WNLh+ky6!YlqU zkU95jba!01&fem}!gF~ETQ_zci`h`kESmE7a4C=W|Mznyv7C32V|jmZ^RdI+*UZyR z8$_$iLyKR1mnm>~a6%}Inz)UIOof%4^8f0l9kkft9dPz8$EEYC2D@@Puk^L? zuWl>gJ=wnP!IHSb-KV}ie0(@~jqh1Y4!ht5=EpPs%9OAkYtFTO;kKgozzt{ZT@|+c z?Dhv;&VTsR)zZM>qH?3$%UdY)?u1E9`86I@(+qvSO8q`~f7aZ<^%J*zIC|J%y?&TO z{b%j{y1_<2H+|FLxUuYJT!RqH`(wQPE9dTB^DCuqTOq@e(pS?gH=CKsG~SY3^J&HM zZ4MJ;H@&h-5|Gkd`g^{1S;qDQwo4VYrrW$Vu_(Lhl74=wi&dXv7;`1F@AgOhb_ezc z@R&_(x;LZDq*0&qpx~Olfz{6zpWFC~Q6QCFyJ+2WJJDrJ=ik&yh?pdAWFVPUb5v|< zz+>wkmjB;Qtd-!L$vTN;-$llvPg|sIwG>~xWKXnXyr^5#c2_z--gckdp2{Yn>i;{L z|G%sIcmIE;&7HU3+xEYlt-if`Q=V8Tr%MobGPC{lNo59B%S&}mG;`F33NJkPp6mav zs><9yL0v&d1BwLwPtMN0{`n%Wg!+$Z+(K*|VZ86Q@7Tqc;VQSMMsi`UvG?j8xfIoT zub;(Ogc+aNd0XblsiQ@1b^iMTEc(LHoCWA0gkOydSFn3%Dctv{uk| zU)3Qym-{yR>VC0#7L)`}d9lU1M{o61*GlenQMt$OPDq!Sv*5uYi5=dGmW5XXEobVi zPW)nQx{qyAL!*+g&Wz*c{vRj&e*d+o*2kpNYl}!fP9jS5#M-St;~yd+D@e+ri1oKUPoyLtXZ~3!7(1o-+LHxV9#JbgZ@v~*(fl{Lt#hNqB*Co=Duo3e zPAmZtXE$_l_dMYWyK1xxQ0bd&oJWZiS^=b@e{+RrigXeR}WJtk}8jh-m69HTD}`NB<>r9@=_s zmZkD?rbC(wHj}p z{7EXQV#==WvHl+_zjmcuMe6^mI%e_Z2i4Y?Y4x4!b5Ic9$ZTmDWG3e_tz+kN@42=0 z5!3pdw9l3pABsDv)VVO4^+WQkSKljK|7tkYtXmj&_0zpAVP?~(Mc=Ktekrnc+Cu9$ zdg~Q>Pd##~dbmEqkTcAr-@z(-)v6=g{3sRN zYfkFDMXU#I+}jc}N%rUyHfO;nGsIrp^8eVqEJsjUO#4yKv;`}l+&y4&!?s>f_Hf-n z-oouMC-XPl-O@Bo(&MuE&m&VOKR#I2TJ=Rijknr4TrBbSlznmwq?cdcz%`whd*=2l znoa>-p>?i|i9)8Hr7RcsF}`9e@LU!D@a_88Tgz`%zTh}wb-4K3qVk_SZ!;y<99+tN z>$T%2WsywIUsbNNTSD4OwcC1nH@ex{PgyU&_sRM>0(M{T^gMaJJObQxG4dPyPj;z4cVJ; zKq1BBI`5b2%3h^2e7Y`C&;Pvki@WX}_I^*@-@mKxOMb1_dT&^ea^UU9(?4reE8Mrv z@$3|_{_uQHTvJ!gMV-xiSWK17`BuaSWSAI=sa;^SZ&aK3b%SWe%?|Z%4Ht`SnOTG6 z`rci>#lkja_0dS7*v9?^EO*ssYhIhO@bLEw{Oip{A8$OnJ%?|W_ZLI`O`rD3W-HwC ze-{unOn03 z6MMRBk&cp~vE} zTe947`9z+_A0%>aT-=r`{!+;4mO|T|=A(ZKw^s=jJV{&_!Oy51%|2(t(RAfk52QP0 z^nPGavD|ihDwFO^vml;Zm40{gCUKT;dYXBl?T70T=FfeG%O#)xyb*ZxN8{Y+(7=w~ zm3`|NO!T_iS3J4CbSIxxrQN!pGnYNOl-v84%iHdbZFi4Z&b?KeMYZ;&=6btEa;%QE zdi|8OZR>)YRV+#jQ7*^cJyTBh+H&3XLSy+Jg@5}Lwl*xdByrY3;(Ft$yR+BMdwI9` zfNVBfiu=p*-1~jy-9dX~FKF#NHQ`e4mo?igelHj6-Bu#iKaX`+zFxq8pN+{rv$rNY zeU1t$`eb!v=h_)pe=qYWKDXWb_M#Q6wk!>G`!r6qrXNu2<@HlivB)p=v2hlwYl+yj zu+n@(!?FsUj&F=_xc=n4bl9P*!SCA|^Ty(N!*}OT&98o5V2Z0=V(%my{r-)`yQ@lO z*QVHhZw=a1lC*_W>+|N{C83wkRo|}d;P+4uV-x*-F!|?#`%AKKAG#IR|7^-4$BHwH zB(!Euw{e^P{>RIO>1C#|#)2o`9o93nIFNex)w`Fe4R6_OT=x3Skh#g2p})a$h3>_# zJYU2^<^{eKQrECB`%<`NhN=JI7PDP){}vw>3JCvjtjl#t{^Z=r*Ehb9Flc(ZE9aYT zDpTXz+~_H9xiZVn^Az2)?73ZTDc@3&IQ#NpH*x>7#av&AT^|&yVeJ+5h%u-?eA!a*lfygp~eV^T=JY+9D%g z?7}LIH>HZPJcZjX%$m>P9#c`ZS;{$MnX7-S^{k(nwp~-cKFYm&gu&{8HTTYse&0%F zg*<+28?f%aqi`(43Lkq1j=sk!vr=zm?Pa=?v`V3x|C*cCDjIPm#OB(B|7j1YMcPQ3d=x}26u9*#o^sO3V{3kAx7qC`f)>|#)5+Aj&@Qy*x zjy&axBLB|16V)u{!uPgW9F6|^YTvgTS9YtPTt4x2wyN*TwPK6RHY@kP&M_^J@L`#? zK&->7H=sBpa(WVfZ=ddwS{IGALJJgQ7}z#kcCF;!aJuX2vTUtWY&R}iX)RaFJK^-= z@?>lGZ)xXuAL#8iVJdoR7V~zBwp2~HM0Rm~BjazEZ%S6J;i?U>2jaT;1WK>07SEaF z@49PEWaPcTcZb!Yrg~?pKDoKs?s|Tl?HZ+tS!?vggrgjpctv9to}DHvtt}%GseSUl z(y!ZFblN8$Woj1qcg&Ubig)71Yvn%|@kPHVwXQjpk^P?~X>rcxZPIg}UI@dk6SeRc_nKzyjy&WgVz)EY)!V5mr`zwRi{h62 zANs{xGw<=qd4_1uVw`YYreTJAci*H7_uIOSx3C8t+L7t9aaC~M!@19vxyIDJ`SGS< zbK{M&0?xXk@cETXy0}-QZr_;8zxbsLxGR(?q{&wl^hCYk3tnib&A4=>Fp8nur#o_4ZW!GMnDlyH; zu-sd@=62*Qp6A)+;#>c3^AWz^r0I3$cK&T8*Rz~PG9q^@{NL8~v|dwim=eT)tH&|O zbQ{;@%VD3-En|6j!?)?`lGr8p?Is?qTIG;^*5!utuGPUS_o-_1bw#&Ta{K0o%S{qs zygu{8Vb6dq;T5yg_jYu|oe<*eIeF{d#6tdxp0*Rk$-9bL4*SiM&$=j?w$am3y{_?l z`Qsn0_A6!1?5+IO@KgBvgmb@-WpQ?dohrBHQ!`hMJyr0<=<(sG65TiUo+WV==hM$b zKTwR?yUbVp^~JPhUMJRw8@+lV>3lVA#~j56`MLf#a`w#oZM(o$!m8nNBa`OLn;8q7 zv|p^$Ic9s~>jwTOhF$JlHd_+TccsV&1^Klv{oQ7nktguAMK$#YV_dw+&6OwWbM5Rj zo?ln3cVw5fu>O2CDb@M~myYw%hb_AT7dKg(xqj*Uz>q1h|C6cmDU*3DF_TRm?$kP0 zy+!=v3G2%T8O&ux4&5q#>iIcp@#P509ewWM zTwYYDkxO8$kJQ-g!9XeiH14t>z@?85i1Uqy?4Z7^#q|Jj!744 z_vx?x$}3ydRJn9|H*e=-2Cs14D~hs@PV9XlXC@%F@U7wE?enI7^)7tPb5W&=IVIhr zXY$0b>K(K8RkC$CwB#S===}b}F0c52@VfHLJHEfLcw+mt_p&RmM%T9Op?ca0U%qU7 zXeQde)@x?F6Q9b|LM4vQLu*nx%M?0h#3l>XC`2sUyU!rtJ=^Q!yeo7!X4gHx8T3d~ zD)sT!36(1XHl#1R7$a}RzV`2)lYQ4@o*$c*S$L*A`@qLHtg@Tec$GSA3KHAmWaPE> z_0$dj*S!=qH!N$obnt!bf|Qkf9#+aO;wq1)Y~h_SH*OK{gj$|kd_K!=zIZcL=tJ~F z3A;$y0-nZtTa}5+l6h4We{XM!esXQs`Y?d~BugRGB^(YI^g2#;PLhmbMnRnb!p1DP{yI;CROZrONdBYRp3vOvBl$CsX{`c|4#F9FeO&lDG?)DOqM}KU%a^bCVpt1b} zmy~l;`ZS(d8a?{jzW2pcHto01?gn{3-?4X2yqao3zznOrAiY4vjt!MHY!lX`=a!@` zpnM?r84(tXL;fWtS8khH%g{_>K=d;n+TBv)ok9zHfD~v}Pjs|a^r1g64CYHvk z%>J&II`dg3<(-}_JMRwH=gO!Qw_|GBg~Fkwmvvb`n=G`n)X#e(6LswHf+!W`OBI>s zpL}#QUoIAV5n*uus=eOU8NHV2sc*LG%q-B=_ni0n(7LasD}M`|KJ;e6t>5+2Z@!eD zpzBy8?)~WG9o4$MOW0RT?-0{zzF!)+BYUIO6l<}$Y5!j zUp)Emr~b)@FaDfN>AyEiSTd1$&ZW4SinmNV9e<{OyutR+@>#j4^R$-ond1LHJd$J% zthx6hZF=zaHfN{f(aV=S)d)}fIi)?qvro$N+HC)wuCneL?PfjS@;~J5Ds!2+)Lho? zDgW{b`L=i1mCtL`edPI=t!zK#@%oqdW&;Gu7}CJOGNtc%hPLP?S(9W216$`smOAHZ z47q=MEL!e1fxYBt!l_U5E>6B=Bwrqe`ONZd6Lyr#mcb`Z;G0C4Z?fth`>({1t z+li^p2s$QF)%o~*uJT^F@DtCnm5egXuBxPoZ8g*Vq9>4TDiqYSgS+Sc+f?a&uARSD zv&hbgh*8_HH#MuS_im_Xa5kTgN)IDv%fZLIktu&(bqRfH7Wsd+PLR=PmgppwpP>aO zquyP#O8;*z=F)IU$!_OiUKPjSIO|Q$Z&z~9pSd}JQ)OTGtit6^3Ws}7y}mVV|KrEH z&Hutub%l#Rct2?1ow$5{$(o&MOsSu^_KEz}izteJ=vgKDHAA-BvRR0A`qAeMZ|i>l z`~Cjb=9?#&4TYlu7>_zx&1{^X(am>ZhtAeDkx2)#y?Hw1=Ra_=mD(}As4S&r=H-*V z99-`e)qgkK-yK+eM*Z!~zIj$hJEjURQVrzrfBxY4S&pB=57|9EuL)Mp|Gwt;^NdxG zF8of1J9%bB(g~JfGr?Ii=@I zranvX`LOJ##Ewg{MeqGq8#w2k-u1yoK3QPPwIj@dBGZ%A=OoI7b2;7l{P<6kB;#8v zhT_8=J59~Kwv-&#YVJ!4y<2eK{o!B6-+FpFvu-AqM4j= zG*1aTsGIBaR7Ch{k$T1?E~b(r50`GeRQTiQlZP^_dp1;le#4f@weSDG+vbY1T;4?g z;<{L+pTT|e;H4?@EY~Xa$t7mEXU|LoYylT5`k01%Xr8FC45EwNG!2J=HIgm^yU=>keM) zO_%KNrhj=p|DCb)uJazNp0w@jd!2fyE%~l_<&FjGiY|&g$g?=cI)5MQJ^3{jW*@d> z{MR~e6Rc^&a{bwH?{jAheh8+`d9Z@Th~d_;aCO#v?^`F{w|!q=`v2U z($^8q%D?~AzkRviM#pt;N{dciU?SVUYsqESKMP*$2zFsS_<8%E=r?iRrxPE1TBLu@ zyVS&4sYs*p#DUYV985!>vF~a0a%8Vm@e`7gKhG<;{Yp`EiLhsd?~Q^t2a-A86j^vS z79VT)HRHn7m&>?&?tZw~Yq{da`Qi;18>hTI{rmFEqpEFd=E}|cwBmznSK}n!V*R#9 z#cKW$N6#PV^|R?qZT?-J@@}QAU&{Lj&;Q*#u{+}21nF~*&O(t}BlgbOX&w_>%vt)k z*J83!a`BJ)X$rw7Dh1XTeplUpmQC7f!S~Z$o5JH;^E)2C*_4;Szs78*N}Bw=wE;N? zZfrNNmIla^s!5sZ5 z23udYvglqEStK1%ctSZ^^Aqphg(ohw?|;1Et>dx9nCvRUjt!z5RRWy$h_a-CF;7BEl;! z?>#Q#I%T0pX`J1KSaa(ae%Bn%pE>gmtj-@Db{tmZk9 zk``3+K(p=pA>*e;aW_j|#ok`~_~Pxu7k}PUUZ3^t$T}&9<-5ZS{Y1N>&%~Iyub#cg z@>|k7Zimg$5^F8If3xQ7o@%q@sPYUM`C?fx(BiPO0O38q;cN3cN9Q;M3GZ+OWXsq=>W;`YPl`%BI1OV}05{{4G&o?UQmq9gwfXQNXK4n~@> z9lLz+2D5cV{kK$5wS_s?>nD34=egq~2(?9|fa;w_(3AHLb{b@l3wrHhlR z;tYIVUU^rems(SKnPYk7+o0A7IrHl_E@r&M!u0g@NiAKc7o{D+TXPSzI41sMUU)y? z0QXjf_Y#I;uc{IjeAs>Xf+E+(?F(mhs+l+GelqxRKs0CJT6^hD_u?iB^z7hj$;q!d z-=xrdNmY<}A^a3Yl z168~HrLE>$E+srDV)2zYf96p1wN4|)2X+j5YBs)VJ=OF0aWjkA0g0=Ne;g=lnKdbU z)`M=fY_prMy}M6K7)>ZU_u!3KTwip?C0mwoZSfua|K_S>sJ&=3iBRwf@MGoMac7>- zCD-P@vY4OujeqRr__6+|_Vfv>PAUWyO1J%W=oPna{8?HhCBCnMqvFov7cw4E4;7!U z(~+5xbLO#sf4K$EOE3N6wR)8{ZRkS$6s9BqwWu zcU>Ac+0Om@8FONihj0JJ74q-dx_hqvUcKC`g8NEH)xA5G%dcIjFJYTvcTwr2k?L95 z{QYbj9q%V4@0lbx?X~FI%s+Z((`}OX1ZDPm=ad|~@6MF_v$x|ii)(I_^|b5l*Uks^ z@6~wW(7t4`hT3z%G>NILcDL-MS&N;j+=Coo?3QT0E+cDA{&wf;=@ zn-+2YpEQkjS-JP`c$Wxu@j#P`1+u4rw}UoLyr zm~XrP7T#sg?@fF=JKNU6Z{obdtXW0Ig|}bMOOdTBZ&qYa^zN8in@nqhw!G9^bbVJt>D{;=5sa~UldjJZyI@`qU7Yklqt9Z?!Y>@0-+ZT>e4hJ# z4%=Ka%bQ-o2J>&Zug~f^+n}If{qVk!)MU}@>o2zMx}_5^maduWc|G^8r%wOBnZck==XvfPFwdr!ujJ=#?k55-6 z?pV#^lqdI)?_qm&s8a^R@r?$6(ugtGb2_lu={+` z|Lhqz*)Hh*voSs96CMzf^x}ogmr!HjGZErO9LJ`m9{bK~8ro6!I(p&0MWMgU*4o}b zB&l7MR{!#p_s=tK+4GGYW^G(la&XF}E>C}5qb+$cn_K#Jq%bk2&RmqW{E&;wI_U*< zd*@D_yj%E3(#i|c86oGd%xTTaS$X!x$7Oq(1)pc9D zc{9rQzi(Q$@T-TPdBf$)We;9$W#GH|or9&P?ds%`gWrBE^(;%SoF)=+GBbC|)@?`P zE7w{SbU*zwD^zHWmw>B(wBzgRY!wp^am_Bc-O%*2L{<8ti-Q%XDaRt|&$Bl_=3Ze{ zIeV+RoWb)W!k#q|Pv-9z+;Hu(5m)p_#mh$p*G{;9DEdLHuJ9Jdia9I7UObzV$I`oO zp=eB0=*w4<7oNmyb6(QK_^)`M&WC4VT-+~?8f8sca-v9z^HXI_S5?1%ZK+1bde`@7 zQWDo*@o41Hd94`wZq>Oe%S&!QHrE!O+|H7waMQ=;n6tO%dzOvsNgh}sJ4!ySs{j733du~Of!XkYoG!0FS%sjkU$DRZGrUzgu1!38E_Pybb1zkl^NZ+j*CZu6$6 zt*O)8avp5H*-$Ig)#5tCZ22DbXu+mMOHR*Ixw_;6|L={}GI~bdf+@3mp0C-dYaF8O z)A!}R^X2y|-_{3x`Tt%-_k_Q{`J~xu*A*{)*!=SLy|W%`n{&5&@mvzUz3q_x+su$4 zzw(0it=(U?{E1fed;e`ixs#2d$$5F-&FZaQj}=2pdbNaPXU>S6J7qrWuEiP(B0Ft& zx}Dy>GUn$KO|C^Jo#NIgn=gyVo}28?xtmG$;zKHPNTzk*f1by%gT-4^&J3%dF4O*xJ8};f{Wvf7xUf| z+%5J)YDqFsAE5ExHd8U-fTP!N@{qarLu3EIMFAR{Gays_P^LtTD)0B#5 z3si`8rEHpY=En2@rxSLyr{wE8K=83$CaC7aGi0SXY@?vuF^vdw{x;)(Lr@B1zJP_SkemhTf*@E)E z`h7iYQJK3wO&3uYDmG*;$p7zNEfrUqlV-oHVAb`tyOuG$TQjGxr6tH-M3lW`yHWVl zoDvW36$a~tPgZgYG^sqDv}$s>+q|sKlBSf*P|kKIvEV-v;T#;-&Rmq+@vXz>>Z7iP z($vtT-`_HV|43B6o|}{Z?@4*6|COr~v-Kwa?XvK-W0vZDJ@LW(hXRYt1uU5@4V~Hz zc0S#`u>8V|F7w?)Zr_yOsYP@ADOY|CvqQn0d?G#;rU#&5zez zb6%q_yT|pmqD;ga+ZNXLxe<#taAYf#3*0%vI{o5IkGrS8eAxVK-(Cm7+MDyt)vYZ3 z1$SiW&-t%@EBI>LHC0x&O;ZIvhyGaBZLsIlwbZ8MeDx{uzxHhoY1kflv#m|*b^U@( z5>sUYuD_gfXxe)hqlJ%4+BE`BxZ59yo|d*@zeKp#qhK%3^ryR4S4tVMbNL_Aephv< zt4!9*w}(B}x8!WXJ59%V%uYgnn!;}a-E?<8RAdmWoy)m3H`0CCv||e+4j=HkWPRov zr?!Nj%>)dWG4*Jh%F!Rvm#)WQKYL?2{Ud%!~RsSzf-J-O&z;}ln zTlh(};&q#sNI3=0FcDepZLzIt{)>Mlt7LCAH9K@1Q#s8&?MA}d6)JI0H2#0baytL!uC12vter`JXqjS@RsM_G52uuD&2@iGl{y3XTI)!*duVOiEAlx>spUoH9}UTe!uMiR*dr5uO>?m1 zdAarG&sBU=n~(eL)ViT(Q+6x0J7IT@V0G|;)0$JSNUE1R3cZv+%G>SX_lP%B-)i?| zhdWB%?`^)knmh5l#{s8K*&w&j>yx_JIP*XKJXu$?x9MWwvD%WZD|h)S^d=o>`>(Vr^|F*?;ZZxUEg&T5-5{XJgT$Q>%}haOrCnh}yYeYXEc7oNV_u_g+5X zxl=1Ev%g$FWQFXcOu;`95;x`90(G9MdWq_JNj!_vO^&nlTdemt!0oIQhx@Gu4aRqj zKQZ=yI`&lZMrNQv&cufUTFVkvsjp3T`Z?8q(TyriH{YbW zahLyv8s{&0rX@N}>2uTGcl)GRL-Tvn^XgkKSXxVP!O&%Wu3CEzoWFcqIJg z)WcOOTOI^W^{qbRUQ$zCRc5frWp(3E(c2g0F0JwLk^3;;Jq)LsW-(~2W_S-I% ze)H0lm6-IDJ#Va<}5M|VZ~0>;w5xq$gw%?OydjI@ zydt~hb}pKvFqgfv@R=~rN6z@U2a3-56i&QyWaasTNtH|XEtlq+Bl!B^qAI1^pQ;xg zeVX8vr2DsO{o&KB4=twz`Q8bf7}Rq!{mI|O2g`B|PW@SX;6$b5glfC`l`9qqtug%7 z8Ixh0)n#CS+k32ku z1H$k1ioEU)Y`@!krK&41{BEzvvlm~A%!9HO-9oz9e_SowKcW3raC zj}mL?+p$%5MR?Lr`?+;HY&@CMzY=j=BAPQ6+k`{?B9ixpP7*^bWqCFYG4r|CHtS z)q4L;j`f5aD7vjsTz)z}p-lC;_?9oFCMT!rIpv**@~9A3W0owF-lG5D!-6?K#59!8 z%{G70r*Shk>x(T<^wTdl9tj$XU*9<++53rEWvRF8ot+UKE|1u!w;$;jOFZ%NO!x^G z{RK;_t!Knayw!c~Yu#7y_{OnxIr;pel0AVki(kfWtK1wVQF8fX#mxP_*R6N2n0{5d z>(u&HOYXQ@{Cp|kD)^(*(`fGMhp8E}rsmu$du-w&C7`)_>Ww8!TGW?aEpo3B3_KQ| z;ytBxdfx0=uVzPIe(`m6_G4OJuRmESknVAC_G0Pd3svW@ zk}9(MtMd9=m+8ChU%UEPH)tm}2tN+H*!7X8#lql~-I$WzVt9bqQ->sN$a9(2DZLbfz#2uqw^(j00os!PEzII){^QU8`dy-d6#cuu29pKH( zBErDHz`-EZ))Bom=W$~sF9SoW7LEe|O7in_k~0!B^YjWTw@QIefvc`#-L0wc^O45x z+s@S<51sdJ+dMrkiG5@F`s$kw6I899xvm#hRbTh;|2@f|MIN4h+jR8~RH+tO9IiY+ z!AkA(?2r5X*3a-y_Vd?gmU^CZG^5O~ZRPXzFJD$ae|ynTQuU=-GXLv2d+LAx(~VrC zxpSFKr>BFtiO(gDYZK>GUA%Zv%UkKuuGLEVMz40YxMogzdZhcY%J-saNA|RM?yZsC zl*(GbyuRqrN#pa&S57aS6}owG_WOx?1%KRnrcdDOHLnv|f1{bvqCVxNMrV-Nr5wk~ zIH%v9A_wPrpSaL1&-K1>*Tm`HI^_>qeQ$jBL4VoI>FP6Ir}FPn3R&BA=*hzuD{4G< zG{=OjuZex4v*zBX+*6O(9~Ewz;E@sIB07uH=JdrmcF+B1P7gC?bX8^O6pgg#);AX} z|8hCy%jc(G9{&_% zrfXxHCvKS0ca3w#g^LsAtL9vvJ@dDxSMHOo>gM+UzdU?a_U-)13`e#jkB%ChopgW2 z{OF`Io1HU#j!%C1g8Lks$x_1;hwewQJ#wAY^6ysiMiZTmEp>m8U`s z9jPadzG~((Gg#%xa4c-WE00fwc}6TBHe7jn;#g(#TDwRw9iBT4jhh#I{N_2UQNN;b zH`B_w&EL{AZ|xSp_wbAD2NU0ur! z=Vo_>AMl&Vq?$E*PsdiSWADCZMIBG^DW2t;@y9=V)_TQc4p!j`m8mxrjurKs^Au!D z@#Jj(GU3vKdn|i)pD16rEjrsTVEP*F9b7BBJ!a4G=rH{%FF3KU?84lca~@vRKdfKe z%DU*Exo&g7%X7=Z;}zDk<+970Bux!=zh?ESB)@8+Xvlrul(*t4LD^qS_lU=x$XsjD z@yz7(?mzbu?|hvmpwK0w+|u>YUs7Aw*(HEy<@34HxeJ=Dm=4)=w0~s&{U%Pp*6F~8 zr`+-jBI0<$`)JWd(H(C5)rQZto|N+CCeAi{?X%jwWPF|dV_93 zEt}*;{_X`|mL7|tG9Zb4vLj;412vG%x0R~RwJ=|)tZ7cF0Wm*r6iSKR_4^EYuj{QuXcR;WA?vU-W-y3 zQD@e*cb~rafosu&<0ngstYdtRv6$*O{1exDCY4cq;7H3#TSw9Ojglv#BGe>uY`c8E zm};a;EbcSI+Mz-8`(5LZ*_j-*i*sxL zavj}Qn)a2YHT|jh_h0{>nS_@*YyY_-xwd)Rn%Gl6R;*$P^t-v&@4S^>wrJ?`6Suq# z7h1=uO1z2st)!xH@Ji}!Zn-)iKmU{Ip;JRwY+zKguDNBtGV?U+%(N-l(OyTxg(utH z6DW;UzvdU3GNX9vY7cemEG6q}I}dI>WO^pz>fXxBK~=hEdUN@j9p0=y@R(yolNnEv zWT0oa#9cwA(A?t>H=R6FF{`v;;Z+H~XWNSwmwM!8KAI8Zm?V5#?{s4F?v~|Oju*>m zv~Ta)d3fG_XLIvqjVqK7cds>DGhI~bhqvZpovdBL?QvIRKkX6PnJO!pm6LkqM)!i` z`z1em?p@n6BQ^XQ-^MrR%ca%tFDtRXvG?b1>F3*9j($5PIC07LdfV`<+zDa!rPH~; z+O0Be_vU_3x!v4qG0V~I$BZ>5EZOuxVd159^9-~rUFRkAeGqN^zyF8+&oGXywzUV` zde((Ks?lK-_uu;G_;#5i`XQ~8H)YJJpQ*2Q{as0g?MvtG;CRzGfYfJON zFgAY0{}YA#TND%~t#LW@(6y^QEb4jron=93%I*iJ6kk6q9sEP1RAkpn@eBQ_oZM@Q zlXy=b-^VGqX-CDepV}WU%&1K&oM2Np=l{~09EUYVUejX&b~GI4|6C}n^ufrXnIZXS z$a!foqwd4HFU;L#3npgRK1%0&{^`gOMdO?m^Ci}|{5s;$rSNu&h-TCA1WV~vi6XCe zWOyxo%GjiP<@}Z-+1$KB_nCvAq!j)>y7#Zi*6J1SQr-5tD+{d>=6Jzzv?zQ5yNt=S zeusms(NZS<%2I5Rk&otHy|hiWt0n4a#=WvyktZIr-%P$X;hO3mheyxK%x0Z=zB$^{ z{qUpZt-C)diREqmw7B)@r|T!*9QtdsTV}VpQ0v#`r76mWjV1qn?cJU7AmT!j@at-C z`<|Oc=H3U~cU=xN&0V%2>r1HSy>n^ZlQtK1p5&Rh_tB)=UuMo*e0G-K1)^w@o!#Ys-anGZ|XDQ+M(6 zss?^*7ub7pQu~?iV{z|vZT3l?nXXKl2>sE2B7VYJ2 z$lj?WYu+Pxtnfx&q+;IosFI4^x_Zu1x36xJ`&sC4k9&LIQJ!U!H5yEO?z-H$aN}y( zudX|HcmM9Yv6yGUlYcBb=EvT5kgs_i$7}EFZtr`_V?DcF=ZCko%BdzULBV$W-%pcX zz_7#b%-zOad%ZXA%t{Q-yIXkFJ$K%(gt#ypaJbTcL0RUCaZtemiStGO zjwtX(Y`D;Fw%7QEWJ6N%HSbwXt75wn>kCc)Sm^KlRPtum=c5%*b~Tsp@-CaU?rwYC z-LMwF?(2O|m05~8R7;;lJ4u(_<9WlOaf3Oakbx!B^4#9%ha30WO*dImxJ;HcS@(k1 zrl+-An*#+-=iFA{|J8WT_rf3Z>J2SF8d=zu&V8z=Kka?@{mH_A^f{b!v_BfAc>mG= z{OA*>>5L`OhA*OjH^02LBd?-yYq0lju8NmST)&2-O>1|Gk8v@$$$8~CU&QPx#Vhj; zPV0~}xN!CI8`0G#*a~Mlx3nGxAudJ;Ny)rE3u7xdI!xHya5dseB2ok8;g|FX{s2b#Zke*P17tnwP) zm8>HQw#h69Uo%9!)I0Zah5OvpHM80!h4{E)#Y890zIdN|+QkF^Yn zWhvPIbCFy_{GK)M4=mf9SoiMZCCPi*Hhrgxt9tqWOzGf>x-Xg;e%@PQCu9173->PX z`}Sh>u`Q*&;p-k5&G?l!h2_e$-QN~3Il=x&Or*%^#}miHPpVh`@aTHZcy?3cjmg2c zEcD$=_1CPwcY%NQxsbb6o+gjN!+y-=@MB}QuiSL|&rEK`m2x{S-!9GEVkdSd*{)#A zFYC|0RX)#~5H8SPvo0k0)Rp#(^y{}Td@;OWB5csdrs)6K>-nX}mCq*I^PY${HtW{- z{Up_JhQIrqy&oDlZ9cRrgw|#!%)9+LtR^%g^+Q}_#jm(!W*dTEw3g4@pRXhEmm!IL z`Rdk3A52m%NY(Z3elh0C1 zTh9m?7{3vE&}eLI`S>c=>R!>5liDX6+Mm|%U-c?)<^CKyqm%m{?>%`VsJyhaw6wPT zH>;8c7UxC<<_uh7#-!L(!=%jI+i)fEV^w~v= zo+SRYc(T30DN-on;?mW#{4W0qvYoAzce_AYtdKh#`TX_C-SJptP0OGL)LE96siG>hLBev8H+}ouk`!G|A3tuaOd+{#5Ki$&4vi8Rqfa&Uq|reM&Uuk8?q6 z%du^1H||cH+U~J#n$()yZ-*QgivK&$#IA9G`%k?2+5C!&o2rzOE-?Jx?w0>ANJ+bQ z*`8TXHdX{p-f!BQclwF>zTS@Q(oHvRTwIdbwqwOvp2o$`UETP%&dg}h{jp|3%hGoo zs}G8Q;OQ_}Q@?BT?b}J^>)&sGXZHT)-Pymd-IafLyU{l2rtI^hCaa=MbFFy~TJd&T z@fzMb_UZkjE!B~sI#GY$1)4l9the*7j7}((U0R%{qixIP_uPeP@?-|9^)@*n%4_v~ zj#th)_#(PgI6-TYaP$%gm@wUB!P}9DU`&oh9$yKKttMw7d=J3WaCSCZFR=xO;bY zPv4W~<3H>_vrgiU%Q#|uUpip6ewwl?U&bQ4sKqCAqjpxCJTsnmbXi5iwC063b4>KP zCip#cozz+wl=E`Q5!t5#7hZ&lExx*U-e&G{zxp>{x1TdUW@c9MZ_n=O=UKF8oi{nR za{kMj%JTAgckc$z|1H&*uyFV9wD#oboBwGhUAB=~Y{vXBd;Of#>NmbVHH#MaXKL8v z`eKcC=fsj6h31qSak>c;Smw5^wo=P4xpF|ZSJmVrdx~FLqH)}22DR1u6Vh)?%Her4 zxsjz^^Km$T^`U)?uM%H;#@!{4E^oSOmU!a`6T^|C+hb>iul7yI z7nEy|m8x}gE83ELX^ZF|e}^AVn{O{`=ii~ZqCO<8TVS)U?~`rQSLGet|wJkp9&#e1&qOwIOPRA+aTlA{M2MVW7+kB9t^ubYg_Qe}# z@^eM{{dRiy%K(Xo2905geTHYY!z?qq!mdC zOhsZxU$op&xyoYSwzx9#>E(b=Qda7hI3J|knYPVs;Wg7n71i3^0h?BsPJAOJcXIioO#ObY3f&uHn0YM%KOcK_pCi@?y-Y;Ne5H-p77^niMq!9$YFMty%5y6p{G(x zHzD(C(5Gm-S&MmIY}%W;{=zgZiyh0CrfuFc;m*M$S=@Z8c>+084(oKOu&vW7-mrSg zazE&AHA{4R`-cy`1yd``iY{)5kKVg{kIrK6>gp5A=bA1y z^av3M;gs0l8?*Q;^TPn?TQ+AG&zP#bA$Rq#sGAThmwKbPX;yTZdZH#%nd|kL8Y|{RYHqhJnkTYIVVTsTwRz8k{7u9* z^Ibevq?oBc{cHbZp{D^dTDNut%u(ajIjiz1BmBApgXnKD)12?636|Ot`(5@+|Cl!= zz`K?2q2jTY=*J2i=jM8}MVPMC^muq`qL&-=WB0z+nN`6TJ)x^ixL;RBPPuvEzQC^N8xKBGf%~pY0laC8qI;Pm(I$X+q!eh zS}Fd$vzdZf7xKJN+MsiPM`u?~^1QPLx80Ul>S=JLJU~`lyvKav-$ zwcreR`BccO?Xpg`Fj0IDp#~}N!TCV zDK{bM3qzXgj)_0_<>`wx{#&;vetF^X4ZM#RWD1qY&b`(0Ri^h5l~A0=$d7Cz*e z|1pqHX|mX!$hEs1xuQ1Q*uuP`Vd?SXx7U5&*;v8r^uqXu)}6Bxq_)2(c4nBT#~R1o za=h{QGrcdL3{%$Le9WM#zhRHSrXPQ${v3=5ihNY|d_nd7)V z)4wZ)Yah#n{W_ZWyk9qH11Q!qTH_yWyw=BTw`)yw&cZftE{tnv+G$<&MKz&+Dh~Ke2s2b zan!tNQtfM0+sxO^%X7tGRd-segvQN-UM}4)c6TjnP`(f^v?-VMe{RPC;q$?ZJ8&%3f!*gmd*JK=PM!J!k*>dsd}r-$BkWD8;C@~dKvvODoK&Ei+1 zFQ?e~&EHbnU1VPT76`btPHwmFQ<)H{va1JH%`D$@dez$lQzY-SCzxsObU$EHe3H+e zAw5(3(yn(8!i(c)2FUm+=CX#POtF#|xFC8=KEaCObtsJ69_U812kmvU#@X zF>|*AZCZ0(TXJ1;y6?Tz)afous7Xwai}s9t*%W4&5wP&rx67^T@8!LCV3Mw|4#R-Vf)q4JxA_-T$SZah9W3YY*cmTZt2AT58IC z3??_v;(Q&VmS_DYZBma~)mOJ+S}c}x0i04Cc@HX@5OWb zuhhyOmMx9HBE!u8f7-+(CVx=iym)=Ay8XJ!A_;4i^mw*!4IdKirmd5$6ZE>Lci_{m z@A@}Z7HFM3r=s4!M@jT@Kz3J{R+km)y%|wTLU)T2Zo7E%tbO(ISxRYRmZ3*XdsL)w z)~~NeW=ERueA}+>RkA!MF?aqo<5vDnMu7(UzS7PGA8gL;jHs(yec54OtetOq*N5}3 zJe5pW%eeN{x3xXqx0OryRM1RidnU^p#e8*PFL`=;G?F@;9(7oA|9qFswqxhYbblA; zU&pRoY!?ZQe7SbA(aBR8gR8(90 zS3O~#$P3p~OQ$7=NG+_qEy=n&a95$xSt+Ha+ykkGp$8p*EWcQ~j$5zgi0#oW{uWLKg>U`-hWUs^N+-CZTc9v}(uNd}moX>pP`QUtN=&lz+Q)K=z z-n#pQDeS20n|*x#B`%2!sej!sn)a96E^NN5ai(RKpLmXw_n}jPcFN7m&qywvabcez zH}fU!&c?r{Y^$$xu`@?cei?EsZ$ps86VFY7aS0q!Y+CApbM8M-F>$yczO1=9dn>Cn zFQa;;T4d`Sjs;U9)C}C7MH~%zb!Tbrt-X)$>YA-w6}j{4D^bH7bA7#|%fp4|or_!Q zvHR83EoSkI=k9u%`kKZ$vl~v?*S&G#5$OksUAx$h$T1eGzGGPxwC;A3fA-CHS1dd8 zLpN$}eXkaICO?|-?73T~*_3>zJ2Jmiy?x~i>)YIGza)2VYX80CFrR=`?Y1v`Y=26; z3pTGwVLKTU^d#J|QtP7mvK2;Byj)uwuO__aU8F7|ux!ODyQl|JF{cleReM@?bwzN8 zZp!GHU zRz_HLt@3f$ysCw{TdVEn=B|Yc*IC$1V7k`9CwI|pQPIW+yH5UWJRak6_MU>F*V$P! zvQHfsU8P+sz3)QKvtLJebt`i#$|TyPOq{WhT-x(F;%f7c~!b)fU}N}cA<3)>XigF0C!_8n*3^~Pn1%+c8v>I`@Dl>N3?b~cOL zjkL?&n`buj0Pl{*lO0_)=@%3}dQS|A33WPoi=iuHVe0Y45$SDdyKi0mINxK2Z;QZ` z1doaZl8l?3_qpz0TT-!gW}}JmmIYF~ZudGw3CS)OYi2taFgNj{Q@#tEZp@X7%aT4> zD=D4}i!io1{30;KXjOBRVfWR0p=W~cZq1qymnd9)`>@Je&!5&;3xge`bLM2s3)5BH zePrg8-M_y%7v%o#@c7`u{Zg{3yG?MGx3VeM61Q)5fjXUswms)iGwG84`=x3}(%iGA zW>vhhQL{pe;^(h;R-sn9bepsMIfakhZoe&)j6N|Hs(>krK@`EdF8{1YwifA78g*Jn}{%V%&2a&i~4WOXwr>5;F+R$d7Y*I^=0gb-m5TdI4$#b?fR>;^`o@QmG@@~ z{IwP9w9DZO*PWoDYdk&W`GV28^q@>X`Ve|uNS{8D5?3C`22#XRh?;y*pKy>++Iz%EBxx!yrrvsdiH2}PpIRWtF2&v zwenWfn%>9nR|(AzoU+in+mOc~?!emvhdWi>)4A44zKOA_JAFC)o|WInl3*6IGgGbj zwO-wM^&^tg+V;?Gr4o~=Uwat23fs(o1of~=gz0V4+U0sw@4RgDhN=@MX1h&4sj=q~ zci^_FKO5^mZR|HF@3*hHVR`FtzkC^A-=V$tJl|)mFW>T;Q@%5QM``o-`F?)=-|gOg zdpKKp%@O%mI}SJBZLVAK_4m^sBJ0~YzVrDd?w6fk7qs|W->;&Mzsy^1Ok@1}`s42p zPku;j_x(`({>xv#{|x?ZY}V=)Y<0gXu32+CuB)-ISaf%(n&`JW+k^jQ<>oM6i;DBi ziP-Ait$Q8JXtDaQOk>*JecXK%O_%|CVL!0bBp?&j?BI zc;SDB!>8mK=d{S?@W9E8hp)tTpZDgFaI%Yomy6L#-jX^i75$so_(Pc8U^WNPJXpvaLuzM!{K?)p-{kk++s}Eg zZK-_T-n7&=F62qZkqUundpMW0T|E z$0z)n{O826`Wzt^U9UDS?UpmVT$dAmFt=Us{<`0U=gmCky0~?(7I1ml^hbtro6YT4 zJH$7wv*{PZZryKT@{xI-_4hiYtFuL3eLfanANlp7oap4sJ7k3)gq5v&>1*j;T0eQ~ z)iq~cpJnMj6Z^O4P^#xQ?=#=7$JgIYI;6*U{@3yaY!la~yy4+y5_?k}z;vHG+%cx| zxEt&8LlWH6G~$n`DDOKSp{(oB-Jx5>*PJSXAZMfZC7~5CB9PWi%k1he?Fi3xlkzZG`H8@q)t^V8RtOC{Y<5CMb9LX?`i2Zw3mASc(iPPNB#y;Ihj7aQ#NzM?;SqOHAUjj)F1Dn_I#6E zqbK2~o0YwaBQsa0ThHuj^ywv`%KwCZpUB~j(&^)sl5G&>bA2gyOUY+NuQ>nCiNgCo zKEEUOId_di`VIA2&HI;UKHpfRk@<eFeN(zg;v+1A|sgty4@_2^CjyofY%4fv53G zTi~Q$cc$4y96QGPT*LImE>n?!84G4Rs_Rs0-E3szUCI^Z65deQ9@|i=GNGgU1>5Nd zTfSB-EKSbYe7bDK3SW_jnc@z5ud?n3ns{p&bk{TQ+QMcn{a>2zwruN0#@>mt)xEDY z&c6tfDs1EAuSj@0yX5QyCAajW>R*P%lr%aGk&;a{S*CSEc{XAhS-79Y>+?;oG-v{BmS^Pqz{ zNqb$>Vf#6W5g)w!QZKN+Kh?cC%JoC}M$Wi@?hjryosh4YW}J~w#`yQ*64A<#l{wlI zzwEolu~KFJu9y%@l|{SXO{!SKIXCRybfzwEnLp8Theh{_q)k+QJKguK_p&ER$_o`g zt&R2yyw7LWUiJRi|3jDOi!8o*t15VU`h(}+F8JtiOljF7uKjl2x#}BM3m5!eyhra( z^@-0#`b#gzZg`R?&hwv#T}SfOy)G{Qthz4IxmWUif14fjtUaPWOK2 zKg8`?ef;{eD=Q-(?^zY*_V8Z5uxa={dwEyEuGoXDZufXB?pvLCu}pVzXzS6_`g(tU zo!MBEGufBr>k-YgkHO+xxhpqCt=7vD$^0SwW#jj%-|X(}f14jGuj0taYWTxDZOV}! z`RRY2J(={lPIKiI)?TTZeg0t+R#fhsWi#)!+J4DSn`HaxKKovqcIxeJm;YW>S|mPK zp*iLs+p2;IT%WeFAH2DIb6tOz$Gz|0UOMEouVdDDd;8V2`?G(Z?O4VCD<(@Syy?)I zmEX>t&bv1I>YlWFZohIhgZO{Dnq;nv4h_lF5{ljR;{CJ$w|k|(zGf=2|1vuIuf=82 zu3J~HKG$CTY?hNnX~*7wOPhXO`1Q}P{<*=Mx%1@aEB!F`5$epp$IZN_ygWGSribZ* zuDsXF1Hueli!a4o<2>8-M2f>tY;jFU`105M)2AeJc_xdbM15zu$iI(c;pWsoTe{nA zFNle4J#z1s(oa6l1xIe)GEd+vw7hkB^2x2O>XOdKT{a&MyY-iU(bA{kEBYBGFkDRhp>pwoJ%0@g;)|%h!?5B#eS^8qyD>l^J$~rimubGkS z)~06%q<-&k{P=6_%O~b%o|a8~Kdo@Zx7oU9iyhuxJH0C^`)kM+Q;YA$Cm&7I`<|tF z&th1Ub$WT-8&h%d6M%!f4Y5oe#dpAxfvTbNH1PuqAe-2)*<%3mhhrSaw#*# z{`S57F-7rM?f;E6V*eLpmp+YMe{XfdH6E9cec~l^t8c&jH8*7a_t#UFgf70=n|{60 zDTZ;A&Q6aP=EjpZ9WhXw%dqJ8h23m#-_9;mJ(&7x$3EFr>sH9!5SzH6{KayslHJ?m z@4wV}e3f&C^TBA5=J!$gg}L{(ZkMR;{@ldArAS(O%Grtb%%{$6E?-kS@1?zWh2*OE zCgVkyoHM z+jQ5RKI(hn>y#&7QX1y$DiLVgUgq%r?Zj>2Cv{XTgp7QjFrJY5vTVP-0k@ROYL*3z z2X00cEu8n?=~eCO0O8yVC3>Izn)46$99`VB@(kG4D8^8UY^qtQBT`NMik-r%V>Cz|na@9|}u_;GWgmf_^6S)~&{ zm~2~;OX7_eSzcOvO;r5h_1uS^Gi6g| zd3(xE%v(|_WWLhixA?lO=6SoK&E;J}StK4T*`@K%dv8aRhfZCt|86tB-8@W7q}yiC zv9_IFdf?zj<_W(FW!-}R{AK?3LvTXy2KKud&mUXvojLi~&pkGCpY#2=X zW};8<=d{j;J(Js;?kc@M&!oR|%}1V{o^!0G2yb4uLMv>UYxtaXj`BClbY_)5IqxL= z*U09qvVieUjZfM$Zcko!)8>;{QJ;(ARcV#|#KW)iG)kjiEyHs!Ki{sPrMSdW4~*>@87IfyI*ZGw=&%Hid{c$!(8q?zxc$s>vPq+uWaqKnpUzj$?3V+ zjE}c#^;$K3mj9}H_x1m!nF~FGj3;bKdev!{UKPnV&9RL0c1y#@Ai3xJpKSksEYnME zy0Fh4>Ha=V*5yjoEnq zy-7H;>vI{V#2Y3bi$duXpZ~=xUq!71KUk zE}I(b_v^ruC4HH<*8Y`8UBDo)EJ)}ZI|IW_X$A%bY`4mR7ci707Nw__6zdgK?u~ez zciTbeSGXs5Ii2#XU)xaf(5pntWg2gEWJ!3z3q{K*9G}}}F4Q$WyZg=NFDI*> z9h&VC=`~TWQQ_K$n0>|ehmA|hjsISqVUBNjI(II2|N1L0u@llBuRccn*)#EY%aGhnvKw?9l6)WV2Z2p~+c` zXMxi;H7?rtSI5(#N$rF1ACEg7I~hNAZB^TNdb{VG(Dcp#8TYuK@9wu4O;~;O*^GQC z{rm^d9sc`z{uICeG;o*OjD=4V1X?pP_5T+?-Z43T&dK99A04h}co6u?;;7w8!_<~( zM(W`VrJCpRpHw#AQhOQfvN`0J^JMF(}?pC|Aw&Siu@u3~Rm(0oIy0`JmCxJ+N#bYar=GC1)rqL%6|5D=a;_n%y z>v_&-C{0Mz@KR-{mQA0Rnc-wsmC7?!<>Q=%EWfXpYp^um>?@qa5a$(ekjtQ^y@uzc zv?JScoktgiS4t>ubLyPSRAYT^9;a#hi@((=KUkLv2rRy)C}-dN#lL&jev`w;c5<|= zd^mIJg@*+Tz8+CA^)6cZcu%W+vW(`7t*vJ!)EbrFE-VH zKux1MMGFR_tteMQ0R&%evJ2*PDoi@qe zSz0@{`^lk?T#stjpLuL@$gp|GEYVHoyf(s5p9lVZS7Dbq-^|!0bET|SeRGgwpWCE0 zlEpu7iJetxYS^BU1 zSROlhqQ#VVf-zgQ3Uj94(^%b6ZuO3&Ne`88u=rpMITv8HS(mrF&hjkih!<|SWDytn1i z&F>!n42`~7Z!Mf7DrI3{R`re3W_{n}9}o6jx*KBgFqrG*KBI55cCMKFD*vJU#E|1l zo%st7ukm31E_qqx2`8^`M(>U8lU~1m^@^yv9JBby)Uz$QQYm=5{z*k8hdXtPPrI4!}Mb}27rDr`I1WzjIHbyW~6<6P-wLhY$ePu9(=nX=}n zltS8%>K}pUJSR)d_tlO|e7&9f_5SDA?C<`*zCZfo{-S*gFGRQfH)!+y#`50gQI&y8 zmFm_b9AQ_Fe*MPy)O7NQYvT{M*Jo5!!e5}6aF7~GGO%e_cYvXTK zPMiHas`b;OyUA0OWw;-gZM`;W;mx;8Gz{IWFZ^ncZV&HKxS6sr;7whe!enDch3?9P zuI9vU6)x$8n-f3$n3Z+MGu~tEuDJ`YKQMNzxW7nwqnrBGuDCv1kE2b(Gagv*O1(cJ zcIW)J-+PX=T%NnLb*oOodBF#5DIGqZ=)8qBYYR5aXeq&4ACEALb()US9UT5ux#@48p6;dz0#A3Dl)+*p_)8>S-1&-HZU z^hJ|*ueUnz>*E#gu4j3XaqB*}?`*M;j!F9c`l%r6MdL}SnJxAa)8lUi?E7~?{&8Mx ztK0O*Gc&AqJ_wgC3^(bNd|CeQWb2*VQ)l}+O)bgxC^MP&(kfW0d_}3{r^2p1X@5C& zMOPa1ls?bUytp`Eg;Y}Z6 z&WpTyZr8fmTJGnpZqB=Nx~hM^ZO^`zx3hqWy)96-LtlJbl#;`}4W>1{HaHxz+AcwbQR}&n!+qF>}u|vol}k1n6yhzIQgy>)nYbtnOUBeP-Xy zC4S4z)~sxd>-L>2Ixn-PZT^LxHY8(uq5-ZNJL>BKY}pe|eRFgV%FacI^?3 zEI%W;{oI|MJBs_fH8|N#|JObKmHlZ}S=-kA5Bh(;N&n70q25;0_g3=X0uR2IH~Kq1 zotJxC?s`e^9{0k=@;cjzFN+t2pNf8e^52cg^+%Ldzm^}msJvr)MCxSL{JU{;Oo~&& z*D8N9YO%dp>w3#zneML1Y_{@~;~u=48C5@dBKy`q_GfGZ-U^+(va?VuIDO+9!@s#R z|83frJhQ&x_wVpSimr1{y{PfZjLEwazRv!idFcIjN1vB25u3oMPIxASvbjK$%4(> zKm4)CsN2`}Me+|PYMX(9fq{VuL@+QgC}L|fq$HLk>c_`t=4F<|$LkeTGBcnWpy#Oj z+k=^bL6C!iK^dn31x2Yj`H3ld$)LOOdP4*A7h4F_onJ3;(Tm$^<;%Hw@n!Ri8s9DQ zZfq_o*PffQ^8w3!#=e}(c_B~t-%n^4n3VJVlY_zMv(IOqH%{JH^uAfA&tuX=SDVkw z_h&PBEQ`Lm<6es?Yy89iE{3&SEf!ABahK~QZ+3J&k2bG7VORawKXOCM&)TBu-~Y-x zn%2w3IIjHaRy)Iw_nq5`t+lhKt-0l+y=vyA;McZytM5(OwN7oa_J`ZM?m77uYl^&> zl%?^~n3*fRwmfG~n)smVKuG`lrSgzGd z724+D^Y)1ICa()kHo-s5);;L53-#EUH9MyGVoBGc(2J(U`_Em{=&@_ueB?zH!=BxB zbC=HFcjw(b#_$WmUp${Iy7*={+eRnVK#hR6m)*MRBi3C#d%w5&%X0fA?nqtMxUeqaE`D)#4J?Ejo5QEHg}=FZdw$b=9s#TUPkKT=p{?}+=T#4*uCEb6+c!@rX1{*z>bs!5atlq_ zj(qu_zWvAc6CV>erfE#;x%aQ-yF}H@P1lcZ(7JeP&P37mGhY3*uok%*yMtp>o#3I| z|Ff193N1Npa6)0#(fN7G&7a>MpMIdb|M4REUNifMGjh!H z&!l&|vOTZ;_i>G-eV_G*ORCT2-Mv@%$QOP2vVCf|tsfHu!%}w4)_;C(L1s>BQ898x zE}asXecM3b`2D|{EVU=td|&=Dl6a$-Jze0$u1h8X63!>S-3(OrcAGT$>23dQIgv$+ z_T2qnzufxepVPdz_Sx(`Z*Ic8E@9uf#_Xto3HL87QoAYljKBQ*N!}`vuaTFE)?YmQ zcl!Dlx%@B0H4X;yxhE`I=OcT`Vbu|p{U(}=C4-)8iTW&b@|e=OY8lTGr&XTMpFLsL zWSsl$K;U8x{flcREOILE2-`ZL>dbsq3E^V~Zuc+FXPJ5b&BpI(+s*27e`v30%T$h7 zs+-U4k$3@1*XQ*b(5n|mTFDx7xH|y@pea@n4UXD{Y zZB~EV_~dbFPr|b)F26K;WVL<%%1o?tSZ3?!=&N!uPvyQ)@0ps1%`%l^doG70w$yv#LgO%A<&#CSKZAU<2Z`bN}Ktu4Z*6|+m-mvifS>*Y*; z(bSl${^iE58&1}@rWK3-mg(bFkBL@3aM?@HVy)$(%*O&}Za*pBulqZ&W%Vw<)wa*M zRyPVxkeaq*QNXtbPTu(!4{!?XDM)(myOZxs!`T9!(pdf-JaZaO9XPrEwBp3KdFW~J zZ`m*AXif$OO+5w%X|zfKo)!~}bM*=;-%4fY-?sR)yT0|pUj^x}%Cp6e9y%bWH+{+W zgKD|!JlAg*XJOI}G>h)MGATqR{=xr!#v)&*$(r9@68(jTWn%jr_UE=+oHUb;e?Anl zd{WiC!;f4%-U^&+Rhz}RuF95MSgZch>Xwf?ou?GveBJ7iXw$b+$R=s?oI{5D6N5g? zD5|Y_eVHYbcdq5tc{gAFRO;j8FDgkiTOsp%?ayD@u{TR^%-zs&D(Ub-)+av%AJ0#) z{69bcw|TH;r(TJaLE$O8i@}>~j^#;ipJ8aHEfDX$amlCP#;P!fqBv*uI3ZDC$?Aqh zsjn7KnAc=1Xc=BMQ?2v<&bagyk>_4~T4LeT-+J!pk5Ah_C%^wN{qf;=|9gLmZxuh- z{CA4GwqMe-^!C;7@}-{k{NO(J@}ZN#{4n!Nm!f3Z-h8!?IpZvS^iBOS-7}rb6y6Aa z{wgX{#&LeR&&=nqv!ACwKX;*ga)-e?zqzYlC$il*tpD!C+j+B{pXr|H7yFdVcys%N z+f1Jpu?B{o*meE&Pr<-bmOCs?i{3de&vtp&^YV5azUlde5ZySNxvGrCCoaN8VnW(=5+ne#L>T=e1k)4dCu zy`;9A@a)tyNI6zFsY;PUa;?mXFoxR=hHE`_Ihno7moBe+5$5~uj%1NegmvSBQy&5{ zlbVvJZPGX()3LAU`h>K%GV}JAZ+gDbT4M*Z(T)cRF%^z!{|`NBo!TB+Eyc{YwzJK& zHr&QrP+{k%hB^OFR$UJ|;U9Nk$;X+E#=mB7bY02gsrbB@Stsc!?~zJDov8;liuG{J zU!LN3ut{$j%XNpyfI9OA`8loEI%oN*393$VKJ|HNfYOy2$JM9w2bq4HobsqY<&@&` z3xZEHJfCDe@}6to@8q>XL(^GEtjyO^O}xM&RQ0t)gv<;ULrbf=+7JJ}eERZ4{<6pm zC$qUbotLxi|F||KwtM5QlNVn-+5M6|TC!wanoN@!_uWSf(Ppwt4$(!h0T*#o@Dt%K8SUlYiKz~^MghH zu`SNZ8ba^7Yqy6^_|)rtjCo_o-$rKD1=}92f41R9{t8wp#a^GplWTPwek908aNXrs z&wuBzt#l`&&aDU10y|r+qM~yayq_m4^Y7C(ujq?;S_krldmmrE{#0m{RKtamRsr>e z)$J_TZVG<*{o;k*;h5cTPsLrYh!s$=QS)@FyuhwCZ@Mb;`PEZ`U$ZaUy6z{V$y*_r zdUpE_Dh~hn+1Qt?2^3oC7Ze*LWhKeNG<#a=SGh}v)-DRQSTg6X)UA19a_r~#FP!Eb z_mXSZ?4JxzujQF|uFSuD?v&*>_q251iwQit%bxc=is(HcqPRG4fdOm3(B27CSl(6L z@`~Qq&~rXGDtg1EC(D|jPuu%uTHB)8i(S{f)3RA)ZgR`_?cL9(LTASue!w_)>E~4p z5(ONyXQ^zNx&Gvwvh2Ngb^av8bvDY}N}AttA+J)4*SRd(O8-Na>_y%?Vn#3K6xBaH ztC?@1`)basHUA!#r)=KLK3{ext5DU^oBQu@T|6c!U=?r9vA-I;8KJ*gUbKqJ zgschkx?I6toUl7D;I$;5!i;0b@{U{j$2{M8GfGcMQs-HGxsr#O~GZg;*R`2@gV5wc)zc5+- z)ti?+o$EVkbPdoxVBe{@oc~295_a zH~8LFJIC%R#O@zcYNO2eL+OXgR0B?n3;LT~n%_ItZ%cWQ?|sswG-t1d>Xtxnjp>+{#P4ahlEu&I8+C`QZ4;F^_wfFo5X~cQnbzNK z$R4ri3DnIxyKWb=euR+ZyZ2WFY=V5{BkyZ!TW`4c^-Frq22PEcNHzf>%Ux z3tn07XX*bjjKNBH-O1eg;=^s*t=?UisyuC6DA>6(qtA+8VwRfxzt0lPm!Et+*7?%V zt+nig?JW+2pZdG)pZvdXU*G)K_*;c)!l%C`S57F;kNUXH@b$9K6Xw+BTw8MM?z3h0 zmF)KO2ueP_zoOwzd^_L0xwacb7#A~LitSBc4^wtpvVX<&#p|bhagWz}Y5$V-run>g zU0v<}Kl*9>&(Qv^u;X)Y z{Sew8F)eM)=O0=2x_KN6m-AenTW@<}_rgcM+p`)<_Ws{?T3XRxhOz!@{OkEDT(`Ep z>S6mcqk5fc$<_Ivt$6D;iGP=xYFQn;p7YLorhPA%obIcIOP$NS$G9i%`q3|(`b}!Z zS+n-~JkTot@a5yz8*5)2u0GhlY)399!?VS8&z;_`v#VGBwl6c|ZcfbY_s5_8Ew5d< z*?xsp*6WPu_)ABBf2d1NoN@F`S*gr%V<{FBi{n#2AC3)e&S%cQ%&TX=HP39{!acs0 z^=KXSrEYzd=LH!URyHs&NaAXfC4*XIwr`7WZ`<_$uZYDrey^1--bH>nt3%UcRC8@h zh2}?iRv$ZlI7mfhzMFhEmO;gF!lb1~3Uk8ed1^EqV7kHjjhnlm zea_r{{}xw1in!9B@%hHGx;H&CQe`JEUfH6y<>tlcXzL~NKF=2#&pWc@a#s1Qxnav) z*@V6BUDEi_>AQY~w2$oypQNm+R<8fw_XjNhEcE)%WSQTFr4Lgrc%6*PnCi2$McCvF zdjf^j6-{{_ReaD>TlSvaP+KTBw{wrerR8Zho|8Y;y!w%x8$=oV@b!DD`-)9?{*{^vnm*=d>U#ELY%lw2Wukw$?h(>c$XRTF{2154_3AITc zUuf);G;8Z^^SXaO*5%9avdQ<=|FWnkR@16HxAn36F3Y*QOmwSTI_(aW#YpWt%EUXd zTBTIS~pcJ*CA{D;w2lR zy}SbsEDA8s<-Jtv5x!l*I&Zu-{gy{a{bq^uT?eF3n*r-WqavcBI%DG3I;65)VyJc1d<*sPSGN zy!z8tBh9lfE}i^n{=jpo^fZsOv)8wA{85~n&bMj8ii1XbUYyc;ma^o=D(30Z6C3S* ze19pu`2XwK|MHK&uY0-4>8j0}T%p;{)0u=9n>|loFRLwgW_ifEl*^i58&^mBookI- zURk_T# znsB}OqJCvpjr5JyMqc6LTQ4`+CnhmmS^P1KaeYqJ-xRkgUpDR0edV@g_l5|AKiyFb z&t5z^Vj;c9u6a%ISu2YxQZAeM*8g05RNiLuS>xNe|86|*Xa4r$L-}0We>1YhEg!sR z_~g+XStNY)TjlQR!qpQ41%x~VkE>@|E^T|}a`557hl$&3PwZA)8o!Ni>KrGjl=5iL z_u4O+Up%-b_Mt~ZNwR&-*X}#&e?y-~YA*OXrMNwK7{zCE;Y)Fm9aR8rG@k~5BJ`4*R#GKEQM^Rs>JA8aj1UHU*tIBMqStxCu2xes|C zE<04SQbDt*LCnBm&V&WB0_RKq+zNegqqNA`pgC~y^J z8Z>n8+PbCo0s9}->hzal1spliPHX{pXE2=2%y22rm)McSF*#?YIY+&s(B%nzbFwE^ zZ0xD~V#Vj%7C&c>eC>iema|VD{c3XI_p;ZE{#e^z4>4RAE8-Qe6UlpXzK%NgX(xtD zMGIG^GO&JS=gfHe{IEiSG|T_#X$LvnnU?08^f9f~E?|s!Ceb3(X69n;ESd5_e!Jyt zmtEPnc-PN*{{Fz4BH^Qb}PfOn+Xdy&eG(F|K2_teZ0GS8ZSdHiPrrR#OC9okYO=3qL9CD4d9 zGU|G&ho$_kCB-_;hYuS{t~6s&<*f+6+|ZrzmC46;=B+fJY}Z>(5A(AAzmiv$YN|WG zJM40S;qqH9w(h5LV_l7#&WkdpsXe*nkY;M)#n!q+%0_$R$?%R-QWLH{pL17n@lNxV zxA(IvMoua3Jvu2+sMW~u>M~ZgPnRYns^y*GiFE#8DNw$jIoWOLrk}eX$Io1sY`*-O z%jr^cv%^oV%%iv~?)^Nv$#m7$g&r#pE;Y3ZH9b+jrn|>5<8<_$-J9*CpG>*6Oy2sM z>;(;lYB}c8V-{g76Vqev*vU+1l%6bj;G=uvJC}^!TL*c(7Q}^DB%eM0VN=-qRcBHy zrwct>dt~LMeRB_2&w1^7O@xW9@6d%g++v|lO4+B4^;b&tHeTAqw&7K3OLqFkm$%b0 zCg1$ym!~|xvH?iE{pUJf0p3o^(*IS}Hzt)5txH>al&naZaKG*Dk_QH*i zLK>I-W8BrwAA6-snDKWjpSQqN)3uze)lxcq71IKa&(R89;an8*&~NgD<+YOE_Lb~9 zEWoh5e1Y}cPp1Rpddu!H7`^t;>{j4@Bv5tGyZM*#-0NLSFXlg3biE-|+xKnJ;dM^A zoe3O^QjR~#Yg~N6y7R5qT!*Ru_|Ao#<*_y2Hd8+6^g@I1GQksEdhgj*=4Dn_{|=A% zrKkF_Md*UAy9tXZ-?hIJjv0H^@^xHS3z$^Hq|ENaF>i6PhWw4bR{1jwUBVOhPtssZ zW{qW3I={)|^DBQN<~tKIgwC+o$fzEV-Du~O zUUs<0sr8mYXRv~A;0OOC_9-(ZOJfwYPS_xDpl{J7hr0=Gjh_@eFYe}eJbA-RzWM#qnRl1eP3Tc~{qkX<)ZcIW zKE6ELzWMR@_Y(r_zuo$EuW{dZf8E;J4PQ#1_rJP+Bk<$w@|NwjE4F_Liz;0oQR<)n zT7RS3wWpjrvwk;Rz5C*gkaw(qI(uOAGLxRh&dCNHO3julvxWFVJ_bEqb!ExTXB zhojb?=J+?WZLOE@)w8pw-JY?<|H6{k%Y|)h(t94YX_$LWpY0m4EAVZ=YUX`2f{f;$ zGu_H6TRtVYbxB#=Ez_LE^QCgm-Ba*+aqK~j99#O$m_rs5eby{-RPIgE@$_78-gm#& z%F41Xch0x^sb6;FUU?k%YVF(Ss`3BC&V_b9h<_5bcf$4VRd+YK&MKXq|25P{)%D@( z37mWO_U<^nQ1nP_uI`Q}yRE0*c+;s$px%mg*Zeu;YCA`ES!%))l zvC5J=zd4V-yDk2&XU@Y&jPTVo`lxFMGX>%pcyEfN+lH=<1S}I}Uc(pvd@9m8J z^S|%8;mm($oh9dsT?}@r&AobhmS14x28pwak~VC9wO*smTwI1_llN1- z@H5RnqPrgNx_og`-qDYX`F@(kJbZEZ^V9kMras+p1(~Z@tBtPhp4C~gI4}a z@_$(WS?K5;d9j&~bIrq$gx_v+r`^k1`P;4XbyK9n_Y0?Y>b)^*K5O>!y~aQ0DerXN zcP1pg<%wUrCH?x+#e&)2OWsRw`}>NI>%{SZX>vaVVsH7^pP2JE^T)Nq8{RpOWjF5e zw7>7~n=EwV$eu+hPO=d$c9L;vwTp386*`BK-4H9C;aM2J+1G zh>@1Kaivs8osC0T_&a-YUU1}s&95b`4_f^CV$t=WVaAk2FT%Oz=pQ??dgANy4SDyb zuNV5mCu}Lp_p(vx)W$Uu_nM;YXXml>%(o5kT4uAkVVy{kGWUx0e1GDkZtE_wv-X|I z{r8pf^z)%#>??1^x~_AT-qSPrq2C6J{fGQ2Opki@Ox@m?ULAj2`dsaagf+bn_j8nX z<$2f|@7Z(Mw08Sqnd-fEcdp93czsxR$EEilKG-i1-?gT8?OKVwhcs3_t-2U2vaY{$ zepD%^-A~`_NQJp`YN~ceHR$d(SnzUJc${2(^e&kN0^!lxb8DtCWu8|v*qQt2VujER zrDdY)mnA$u_~BWL+U`uH>&ukpwr))l?$P~6_SSFDjxT#1zIJNOQPKAtk^APYaJ{aDn@+@= z8qC;Vld~$-YP&$#&Oi5~KTc8axTV>*J^z(ely~LBg-VyE#0IuUN`Cmq)u0`7+CR|! zk@=s7m6AcHdshDC5MBQJ@>C-Q>n9pY2RrusExD$?fJ5HogkH$&Lp6!(Y$o1FPdE55 zh4u6L4L_7#F7a{W3O&eFR)6@}y|+TV+PML<1P=&vF>JEj#x$okcjv5W_oTNzN!jwd zQb=X47+3gBgPJ3UejYVX_{L><{lWM6T1WdmD>wHpJ6E<;`F+ijx0@n<>lv4S$XXoT zIe+@&cXEm|6)6Xud*6GfB8S>+q z*7eI5e7U3&t3Es^%vA0_-rIazq+^{@_Tgy9(jVc@e22F68HD-WdVG+3ipFkBeyzpl zq>oo*Dr8yCOcG{4-qgGkYC#F*NZi~mj3v|#9vXYDt0ta^<1yk z%f3gv*_BpnT$e?w=HFC&zcA>%8fqXZ?C^5Ou2iFK<<-yp-)#PZRHPNSzEE=gtKaLY|k}^_S@nD{AvuB&KLh{ zziYbjo{@-Y=K9d6E>9cZN2`8rxRlu`cpy!n>fnd<_juP=uQoGEUKsVd^yVyvzLgIz zY8V~ga$I3W!O@jHhfeYv&*P|kEo7D>|>JKmL%E{XBC+0h|g`N4obJe%@-IQqO-_5GBWt-pX zt6Bw)t>52H;Qyl*RVV!J!WO;sH;Zz`TBSBu=XFSMr?iPM8=jod_u(=C1vtdDtla`GX_sJo2#~KiaNq z2R=~k(hK!kZD*<3wqVbssVXO5o#y{K?Z>%I>*JJ|S7_=>$?WErSaPoE;Lq^xo-f+f zC&U*^UCZC#{CRceD(QKv-mvKw?znq2SG(e>biT*OY}Vy7>TktQ&VP73)VwGA@Q!PV zG2Heic0Y_cKc{$NsL7!(r%&&c3i~7SS*c9L?!lgiZvAtlHJ^k;Ui^=C$kj~M6IqK` z85sVEF)--j90iI`E6qzT$;{7-Pb?`Z%1kOPNd+w!T^o^`f7?vp-@JH73kTh$>n@v| zwYzb8+m#n_4Y?Y(L^KR|Sabu00=q;sPW6R9+5g_-q|w)BCvN^ZYF2r^`1oVl_a}-= z=3khzXoWyyTF{dYjjn4d%M~Xvy<}OY^1SG@OAnLerK2}3y|$eDbo6QJnJ+f#(n>6z z&o*j23p$!s;C+3%ecJXV7mOw-Rk?;t*uXpY@Rdn-*6oaW+#{?u?PBh)Z_&eNDjJ?~Y0*fj%oN$dev+f4*;epz zN!vCbbq}rIy4<}%lAAhMk93^tQP+)RduF)yV1-&kVSA9&CZ)B3Uhg=rTTjv4nW)$? z^D66Cqn0ZhDo&@I+4$rOpYyNll$qII~A-RYUKS^$~Wfw>C0P%l4k4 z^bZpk~H}2X!xV zRk&-v@M^B&R=x0AwJPVtn$A@z9}=?-zu9=d@@+_d^!uOCj`XeDA}$o{T2Z;oH#JsC z`F-sEjW(v-(;3g*w7;Ti#PZ@$fTY)@!&}`e!+p2u-h4WP^BhZVRGQl^lfE7A<%`4C zI%W!+_k0livh|I{JBLpn-zGR`lqIfr zPI8^YBeVSXhf-#p_F`$T1>bMwAB|-&m5SB9rDhRzr(l&}zF5Xuji0alY_0acwk=fp zD9|9to*L3q=Art&%5l|{FY`3b+)tP6bhycL_W5VM`L5LkY#g#@FI?p@-LzxQF_)w3 znz}ZvPHwpOV74g3G3Kt^wT6=|CNG%3Dy?VR%wGbJ`*Jdtx`oefeq-^@rO*C?&Uoq>MRMnybx1Ps399H_-CRb1=9XDy4Mc=Hf-p^`$r86(rrP?f4 zvDy@yRyF5;&~4Q%u@#0H5t{FJ1fFO({q3AwWTfi-gcoe?>?K}49GWf%EAxZ+mU^{j zKI@#I`kS*`n~|5VxF*+s!G=$I%r{!k&TZff{=OmezUv)3(O>;@_5LbE7QZyQtdnax zM|aiUj`Fwtx2N~8#Lr&3@0C;3k)<*Px89}Puhc(#a&NlUl^-3(ht8eyI$UHUpn7=W zeI~0ZmRqNv4U@D<7v#!3;$z?c@oqc+{{6>qxa-GREUv$^wyyP{Tdel#clQ?NYHP*b zV|iR&E}t&ZoUPUy_Il2zId<)Z_ncK9uvM&>ZYe6I^WI-q{X@fw{SV%9$~+fcbizM_ z!MjkrUT9b6-GJLp+w;S8Cn$%;o;l{S`|S*g?Q3h}t66*#uH-*qeCg}ZArj*svzD*u z$GWU1LSlAn8C#sRW^wTyc+B zuPG%9_4My(9y4w%;9i|^#jARGdd;h~Ck5~F*jk2q{gRv8Fv%dgcb6!S+Nz|#32$m` ztfOmx8vTeW>w9~2zH0nt`t9U4Jq9U<#g!AM_@sS*Y`N`3-hu!PhE}J$9|Gp= zuln`*U!>WzO4aZF!85PlRGIv=(IQIa@ya{(Mm2lB2grzbht7=k%l`P}<8=RT^KI%r zxy1M^t5oBnCnK(*4aC)L%H zH_hm_n5XkPRr7H~N^wPax61kMSzRI3)xU0Ltl8hk-SB1Oywt^w8mk^Etz6C===C@1 z+3B7C=3U*iraLL@CHvQ`iBG31tvtfIeV$sW(LB{qRqeZbDoq3&`XW!Us-Ld$Sx~Yu za%azR5B0144+HkkJl}Qtn(-2`1#j&2#qRijjS#=QzPg&p?!NeD6UnnrPG8h7is658 z)3a{sRM);1`=1umSkewOU;49b()zB}Gmo`qo{$jOJ>{jtoYckLSDpBdv>qv&RP@zE zo3SKtUEQfq;i-W>Y}K{BQw{|_{xYfVpF;Sr+Mu{|n^s+W-{1XHY4*uaEA|}uIJ=|! z;nDkXbB`RqKVRm5!LLWVnGc;>e0Yb3s?fbU^Qg4VA>u#8>SG*&H_3G@KcCW6ylhi< zb%tI1H4ozh!OMC+UCxO~-u~9hXn)gBlaqSBrV^KQrZ4}wP0xi_&aL5@^7*uV?9-Dr((^9{@7`l?DzfPKWu~wVu?ABO?roTLJkogi z{8#C#ZM9Y%=QydzSJ?94bie1#?l1ASbKW*^LM3)58lq^Q4c^PDmgUS8dB)SuA2nw=-CwNve}BY<`Tg=A&wu|Bf2{x6QHlRCs@**Q zmwoyFDEUjbfuDZpmPalrga^1aT3R9cB zn0C)=xtd}|bq>LKLQ0!w{xV*2{H5346)S$m@3{H=WYY{qo>Mv}^{1a)Dq<=W@7VhM zPLZu|R-kXU>Y8IIWpmePEwH*YG492#8-jBfif0};5Pw+3;}eINx7|G5#y5voCRl}k z5Z@Jakh}A5oMXPAQG<6RmtOd$vu0Ksu`+2;;qUJl_O1Er9DR=fo?Em?HF@I%fn=bd!;P8CQ zzp|h8f6Y%n{Nti>^`eN&s>Nw%r<_i;?%kg>L~q z`|5ahU%LLE@xSdquK&M{&vHlbZTPkH&hgU5{jZEpF4Pn0Psnb0X>$DO{BNc+7{!|Y zXWcMX>vm;k>6pH4feTZd>jwn}ouH>2;W_+Oj2xHdACLby-~O`vFaCrF^R1TKJ1F11 zKZRjQmh8*r8-glIo}GR1z}VEG_;umVHCa^=VP_AoPB|8`ME_dU-ZfHQ;XdiBqe|!c zN=Vcj>(_a%laQ;;R6Db3o|sS5QLf`*`%g^H^6UTj-r=v=)n~un-l^oVZu0T^yY5k0 z-nWM0V^xnH&nj2@^PxE=bnm}=7HqeEta+1mzB=OMuIC~3-o<}o*K=(!dbg{+P4I2oW6d1Xz2{?#4piu? z3b2^4ExlAd?*mD#dx|1GZ}2z@=`H;K zb16$?dTNA$4y#V^!AmZM>nHuOm0P^w;%olz$9B{!%)7C1UR=@0@%UQ4Y z<=;gw$~?4Vz2vR6ZgUma-37Vks*J*g@rK;#jL#Ro>rlw#|MsNWHL@o)^r)NHi?5vt z%NRNu3Qr{kok^(rJ9pQ-`VGJQYM6KOeHGuC7jGlP+xYFiusOZaf_(wU1U+eLi*cs&!SvdbUSg^LJbpYdE)X|A(8-O1qDQMjHtD z%(1O4EBkWS^26KHs$2^;JoIzSJFxB`i_|;CMfrXEtS$TR&uKm(`}&hg(;C?v+Y@}Q zdDoPff8WTvF@vk)oJB*Y(?_7F?`rsOvs3Yr)I?=V zm*e*T-`G7nYhzXS*d}au^p{V!{}ty- z>R-u|+*?;%_i)jw?VDcw$QQrAzvkh-H7}0ttkSr$NV`b$S;?dJX6v>4q{MQ9mO0

G@GRY|t%z+-QrH%*zVC%?4>C-0p6G8$x*y&B#dgl$Zf(mux0&^_)~D7~H#lDs z|NXyn%>@2wfg%_07i)B$nZox@Z)svf7fzcTEQ?cN;mPA+SGfu!;{!O^5PYc7++i%kCYH<@-`F`HCr5oY4OX(BU1G9yBo6^rcX0S{qnH1BmLp@ zrT|2!6Q0-0Q=3oN10t^2t#4Lo09QZ&-AFgV@XW6aFnP@4EgBTy)&Q9(R{pMf!gGtPHe$=Ap znRiSqqKeecV*@0q-|#VF+Iw>o}pyDOjnT`PI~`Er)=Ln9%%fLSun@^1aM zv%5(1d!Fr|X;JHD9_V@WzVVu4mZ^8Ii^N{{KliRhv-fZHds*My@*jXNT_Fy?Q!>V*sM9H5|KUZJgEL^kHLfYQmy7nWp zoy$Y@rfYhiQ+d?OUMS5|z3=wh*rMlI(YLF@Hb>u_e-IG(>izW0W&53`W-%^#9Dg-}=3OAD{k1`BweU)Ftz60{!RBP>)}! z9zRokYE{s~$qTJER4#XV!xWFzdn)28MaI6iZB&|mnOVUn1d^tPm#j{`N|_D)&I zeQ^HiUu!oW-`6>_N~ZMKJ2-B6_0Z#yxZBf% z&FuF*?d*bQr<^_ADi>t2_mMVl)9DF~Yfan2t^1wsFAMOWoT1Q{b)(nqbkwEy-_q7? zOk8$fZr^IgT`ULMmY({WD4~AQ^7Xc5C#Q?mRCA_V!q*FaJqr*2p%c_L_4(?f zUQ1fnT==r}%*8vcs|4&WDpz_;Unn@Svehl8uG+PWam(>z;@`r`m$unxrk?q_%Hpin zGgjHhx8^b3Th)>nI9H`?sesbwpB$xIdFHJwYcTqE$7i8St@GPM66O&hF*jIO7GA5{ z!S;#y-9^SM_J_5d0wKX>Oa>DZGP6x`gT9o_FuAC4Ze{+3ug*6%Wj|PxalB~9kywVb z$$x_m`Gqq^NF+@Ue#au-&c`mtz-<3pBy$7v-uAl-tacO&30%msWa4ad`Snb@^I-Iu zHvXcg2KSe(KCqH^OWpSXhxeH@-fonJBDS=+gv^T@X+@7heJgdct5^(|nR&6bz@ zW`5wvW_ka`bGq4&bx)U@wyn^<+9y2sa6%`mjZ{>LL4RP`<6+W1UFnhUb~#N!rHz1LhJ%%1{PV(-BC}> z8d+pc^=~~R{Zu!Q`L)&K>q7ZEPC8#L`fXbN`hrsMZh@ro6}xWcm&(=P;D@*s5|H|iwl)CEz+kPB9 za3y;}g+`sy_LW-Rg~=|B3?EjV3}x$8t4!3II&E(6PD3fHg&BE{oA;*lI4t_R>cP_* ziC6aW(R2C^M~iInJ-^IT^nBvk)QtxhJr8-mzxK^VKKs;3p_hvN-}v%Wi_G_7J~8KU z*A$+;|9BtzNn|{6PWka9pQ~pL9J` zu2jng%;ng^wL9vH+j?$SQ7xlCOHX{7H`AXv_5O|cDK|y)4t#L9dXIl%a6QAVKg{Qj zhXv>Ty#K^O^#3$*_k7*4tWFz3T_*Dq&RUtex7 z7dz*Ozkhr^^W=w&2c*RKx2d&r?|c4lkG|z9!N&Tl%|Sb#EeXl9)0+BlbI?kD@2;Y= z#r4%$=RBXjf4d;0Z2pvx?X!v}y_;4Zp;d0LTNp6m$C6n)E_<%L^J_)Ozu$AGu5qor zufCMw#r^-5C!KE1nKbKanf02;p4CY<%MW-iEtLt(U1#5;A{rjP_-^I4n_M%hH&tq! zTYf+w=#JC07onERb_8w7fAB7TbNMd22R+j&t(wh?=IBf<`nvGO_j_qCZgd9K2Bl|g zQQ-KU@oZ*_<-BX3L|z5lv^DM9<^F>!I(<&N#{bR2M-*>e(zQ|k{^q5x^>dqL%ccDi zj0M=m@^AmoG`r!Sn5?R|u|tz@4Oh9dW88HM`P!Y5;gf1L`oy{=+mg=)U38x2<+tyJ z_?dH$&P>$0>$N{IEW>zv#)<=`JgYU1+F57lEs+2GB-!Wpl^i!dol}=%f+ee#rS&Yc z@3q*!^^ZT($E7xr^DaxQQFdzXKJT$$tK7{cv*(7K50I|dpSw@sQP}5Nw~+2%jjrz% z=ZbG!xMA;yT)l{sYiGnYIcmjT_~)&Dq2%_|qAh+46t7#gI;8h+T&6$uk{ZgT^#RbI!Hq7Zr7;zIfPXplMuE^|n}I({*O~bl*P9DpB6uDW%h5v zm!8Gvt{m=GlxLYdGwfi%q2_s3ER*&>WjK)XRZ*MSX-d)R0L$%t-a9TWmaO8`;*wWe z{PDw!+mD}raF{Hle72+^Cbr{^Q9EnzwWtSnD?hGzbNk_u3ND6=Z?wEMvzivYl$dhu zLT3EbWYOB~QeBTzBM;R%&ldaR?wBbt;p3k_$CK?C3ohSCnf~b1LDB7dTLRXma*E_h zwezN{6&8Do#2;Vju+CX$o<@YhId86St5brMj*3cg#fdA0aQqeVk2}6T?l8~)ogc3} z`pC2MjAZHMm)-L5{|buaj9GHmED8TL<%-WTo!ou#>QB|K+h{Eh5uI4Hu}0Rg;7af@ zL%-P;??Q{rBs&a!O_q0W_+C5Z#NR#3C007yW!^}Oj&J6vKlf6I@6H}h=G&f65A=y} zH(bmL$iC^~x2w%#vQf)nAs4ac^y;S*^Ea0sVHe^FO~1IoV~aq4$^Yi3NjIK_9z0y& zXtgdvaqYTtd(n%F|D0RPd1&*+^y-N_a!=H5U-yW2W8wSU>kYvhqTK_zxK`)Kx$9&p z@o%cDVx7J4c+pw??K5;Uw*J)$b>Ex!vBV&HkGV?NnTLs|g-?l`)|$YTz+8HI#_=`Z z-$iCrTRh0h+R>1<(Mqmd>e>X)|n_*?LVrhwT&o{o(=3WxteO9*-3ZqD7m0 z)Kw>5J+M+kY3G#RLRb3=PWUCJG0v8XV3>F^F^Hqc>hOY{Pn-DVINi8|&P_OaN~=Gy zfqjdv%%0;{9G^06v$)}yJmI-UZTm6~j(P8WZQshh<2@KKz4o<#S9!HqY{Sn77ajat z+B|kxNWVIeSKGB}Vv5@-(Ze@{byGFJ#hCDXf#?bnB{>}F@-!A;VGpYKD z%m$X*lLg~8o%!@&e|=R=vBEmL+Dhen^;Jcm|Jlp`u)V&teU4(Qc)EBX&m2?bb6y` zl*4(`{};95xeOYV`I_GB|NCj~-33~IBy&O!C;Q7^F);e|$mLFCa^u_!6U$8g|NMPh zpZ{Lqlmzkk++}R@q&96SPBJOB^}g$MM0{42T|Ec$LN7fTiC4N&;lfNacf`*=Z)K;{ zE4zVPYV6yvuIMvU7QiU=I2JTcq+qK%JX?!t7@XPp~%`WtR< zn&cX_AZ&)hiwWinKbt)~V5WHJk%)3V_vx21N6xWq?p_(U=+4cKre385r7c@lF5;UQ z_EDFw?Dezus2@?)GHRM1ZmP@`pG#V8NkZnoDi$y&Q8nw+1XtOsH(J%gHtnyK3gTyecuANiZ z@Oabs8D zrk=@xp=W-$+OEBFW2RH#Z<(E*JfG~3buZ{N=glwJ{^rLozO_p^XUbn}UwuXPx*EIb z%pa;RFYG=1Wq-!GQu(>%^QwMXeO5N0@}At z{$YLOaKZZiqNzbI7St|tzPXr-{b;K6+P4N9-iYohx__eFD$fm}ZLzxCxvLWD z$wxHxR=bKHzPPdLM`hRSZ!)5OzH1hrtaP6_S7Ki3^SCgr&+~td?EX} z%`vPcxnj{fpPn#bv4#TS84QQh&)hw3aJqcm%I6H{lDD0oeMa<}mb0^$*{!67H;+^| zPm_H*SE26Ir!70yS*Xv?-ktdU_nnmAVQosx?IKH(lT9D3*>2VN*4Xdjwz3~@I?ep; zGQJu=fBJy0Zi2S9&F;z5Ccl_mylQW!ec}dXrd^$P0<$vB7QZvO8Mu0(zqw+@y7{{& zl{fu+dWg^WtwH0PO?J96tE_mpzE9!(|1~Oq&9D7s-=lv|>36vMYE5mBlV;%awB(TG zvPqfKpZuTQ{cr!YHC*141Rgy-XX5zw;Up1(!^d3zn+EPX6fx&D(|VB^-BJe^CDyxe zI%w{_-|{JB@{#G5IrkYJW&F(ItdWXcaY9s-tt95j%5c}+dW|KhdZ$%Vz7Iez27p~vF84Sv-hO}e7}a(lRcj_2~vZ0~=0U-536LRR}*v6z?~vxxIQ&J^oB5tWoxpRl^#V=q)ipCzG3Uf32yx7EzFpXPnM)5->Lbk&R;%BF`PfW_0Z!9p`iy@#MeHU zc639bk<0EMkIU|G-K#NKa>h{PcK__QsWuJPzOyecKf2+g-yX{Y_jy0e-v7LDh4t3+ zrvDaA^L{j|F-O^Q-ttqcSD9`LvlZ2Gd^gSZ49EX6!!2{v@9)gs`qcKV*_L&Ar$2Pd ze=^X!aEEIv@AizmqF0(Xp6oAMaZP^1^w(bkbXV>>?&EPcK~1@@fZ=i9N9G9zE~`#T zUsTp)oOfdOKR@TK;u-2yp<>f#n0f8oXT`9#C{(Z}C*0lt=DAm!p3b|tpnbBOnQP`* zN8dW(2L(Ppk0(`FF69o|Zn$9aC7If4uE4ab?V`sR4s=B=+|Ix3GK-?~(tl9~%edt9 z{m;z3Cm-NusLFZvMV!hiOZV{bU7{z~#c!Oh{i`u4X`|CY<~?n%UK^iUP}=LqzkdPy z^h>6NGG4BH;XCdxIL+)iJMgH7*}7FdtxU^J6t!Pm37F$2pi{)t*_(Z1%Jw-&wXcOI zPx)l(ub`=G^0n0Av(@a=3zudt=2`mBZRcanhu3e&U48yd$TQ*hB2_P?P2aBN6e_L-sbATlO(~oE~%K z>eT4%-oR6N(>~SkW{x25njiN+NEChF%>LoxZ|f?9i)Hr3Dx2R-lG-J@H(KTU$_u)e z{_CyGSW&q9@Ya3KE*FLB@A>BL(zblxx+u14d9mlL#Y=W-EnQmj>wl(FGefXP-D>%EQod&GBfx=*c-JOqNZ} zU3Nt}pDX*Qbg4#L&M$}i=efHhYNeAjuAhAU*Y z>Z(0n%Nn3*T-o|?-V9L%!FPt)r(;vvPYO!3?LOc4F30%0*@07)PyauBm>Ye=*}ILu z{p_}NUs|3p9`xGRAS|Jsz#rBAew%+g*YEk-s@dMDw_{?A1TJRw9eTcR*KU?43oYm0 zG-PCt*XI&h8Sv)l>Gv;6JXM-cn)rF0*`0LrpP#{XX4a5NoqWrZeZNnd{8vf+uDEB) z)p(bdS(i8(qObZM@m%^?_3 zd@q;lQR?k~64sXcuUI@hs_J4a@JWud*m0IzdiIRSqfVJB0;Q&Rve_(7ER4>+csk1*zt!tMtFXU||0R3(?mmwx??YDKs9@d9x}~x9 z-c~l3G|hhH15-nsc<$znC`>a6>dJC3b02$3%m*>c(T%0ef9;jQR3Pt%Uh&-`){A zyZ=upx{@8%z$cV8MS5@CcFosYt%6oaZaCNVJvi`@>8FZ$k7_ws<}_~IS#m8WqGdYM z4ySz1duCJ4hH8Jjb@ZNF`tgq!Z%RJ>*4d|AKZA#p>9sGTg`J(%KRIKr`SP{ZWrrH} zl`!hEZTa@HKBcC2xjWC_oloBUOAART4BK!}Cc0QB={bKjyW~#pGqtA=Pq9^ARW_}|)mz0ae&)@JPRWLj<24g}y?{# z4;UTZ&Kj9wbHjO>+0LfNdkPeKzPHFpDrwC;U!U-tZQZjan?Dvk;&}Q$;r6jg|1H&C z&vbO>Uc8gMbc&z3jR5OBlXZc`96nRF1|0KUX4swkh1oDV^@QY-kH=qpIJCq6ez$JK zw~d;a5+a7VlMf{uhP*d;UgK@Hx0nC;#^#tx>+@W@ze#=P`eRU@bw~ErqMXO8SMIzR zwV(Ubg(uAO-%eO5r1k1)-nm#sbzkGjx9&;U-I^D7dfx%>&ps8$u1(##v2<4bj87?! z%#7tzdNh0`vb>(uSiU#%wGny#4LFBcRYR-+BFO9fn|QVg0VPQ;dCHtUvqbapr{$TjqXk z{h098#^KWU_2sVXt;6@-;t+0Ni`I^spuGPF%N9!x3mLy>jCl@hi);^@a3^o9b(qb* zMVOiA$KxY6MXX=BJ$Nfu{MLz^bw`w|Mez5s!1{7W*R9EdN+vwlFDD%fkGXf!;62M@ zs|4Hby{qh;#3C0R9kN=YFy7V^e=EpS8mHB2n14@|- zdFIc1ub}o<9GK88UKsZk3M>M;>DeYZ@Ep+WgVnk zZkM^LTUpF`{phMl#oad7B`(pck0wmoxqa=PT)V!xZ=)+d={kH&nRZ7lx_OoFn?!a2 zvqgMNVo4QJ>>IPSS8Ojet>(D)lZAPVpr>$n}RL%bDviH-&&NtY2hOKgKj^+-kut8s_s#HUDFA# z7_lST+{u|CI@g;fPDx#KE`Ck<6v;}(AL3juTZGwSZ#TtFIlCsHe9h`lv&F(2n67+p zkj~E8bVW<)=TGB2ar>7Bt+#hKO4grNo1S-CG-qP(_M88nuSko2-MLv~6_51o?Q{OV zm?D{b`SH%lN#)+`>vC4Ntk~|dw{XXgQ0oHs$nzH*Ztu|cX|d-^>AJKj=*-E2s<(eH z%y_JQT+-7gf%Wi1;m9sk8`;^)&sc0{Y?7H~GWEz3{Wnjy94fGxbn;m*)9J8e6KQ2O zZ{JCVmL{r}nU%A&9W>dz>wFBZ{%2VG|A50LFKPCD)^=eUQUx{jj?0?2UN8x{dh6sW zC)rG8%R>j{6?l%m{5bQ)TqYgump@I7d-h$Gic4IexoM*$^NGxLJ6RnA@5(>v`1M|O zHfQ|a(${Yt*k7k^ob!;|K*FQ2pK`VX7b zQ{sxvORp9;ZwUCy<6q#Ho;&-7vxS6WZ-n#O7F>xV<~`n<`%uVs}Ag_bvPishu09*i#+GkckLvFy<5^Rq9nDK**3x9ynT zlJ~Y(r;FR(d$82#`os+yA~Rk`<~MI!zy8$hL_V{^E4bltRh*YC{QsiqsnzVmEns`%5ni&OaSEdBL*YmV^oy*gV;f9=SLm94P0 zU0D5lLFul-{HM1ichs+*zx3v(%9DNtcYjOW-ud|1P5a3SY?j}b?wPbX`k5iG`6agZ z*}J)SX&gCpqO(Zls&CHD?VD%M`4^b8V}fVxr6oruuhx1K-IBj_*S3#kw^G04o-w^7 zwl6MCM%=dFY0si}Cpi|ZV>LbS$K=1&CgUR^4|Gk^UF-95c(W|l-CuY!bL-3UkKcHA zP55y!?BHY#_17xPBIYXn`%)WY68%PUyP5Eda-kH-YtzJqU(aA}xBJ8t92a>^q$jU( z6JJ$U?ul2Gnep3q+x~ySQh2<1dw19L)UT^9T~n(F+PTzw(TN|lufrFzPk;Wtu);50=Tzb0@_&>5_LSVLxvbn*{_u!O`I>9d~epX9wG6O|Su^9Ua9v18J|bokFH-V8h0XxY_AnDbsbdT;H%tgzv5ZVaP! zbduhir8mPaW|-RQNIl7zRB}l%XKXlK(f+j*Bq^CBoZEG)j1mo{o`uni-k$@&I#Y|1MiYhRRuM z!#&+Nr-ba2RB7HkBu{~eO+Yr<5BnNHS_c?I#>U5J>*fd&|Ob1 z@MgQs{cn>4xA9xgS+91rLF3Q!O&WUXlNRXm>{+ua;q}j^{HEX8)8ziW?63dzNn6~< zqnq1SW~$N8fI_dNvJ*!f95^5xHktC}AsZ;I#FywUjd)RId_g-)CN{`dDcE62QP-p6emU;cCuezGxk z%ft&8eb*kCef8rtw#JM6>*ie&U=uE9>sY+Wx?1w2%p_h9-t4C*mUYCQ3YU9yeV*2R zJH@@nc$T#^Prv6LZ^C|@?Od~;Q-1pDb74ulSG}9CVXmQ-Ux1(V>jJ$gl) zyL#x3VsD{_Lftu4Yo4X9+;gN>#2G^E?dI{&t!Y6lNtv2^trGWMvhx-xO?@O+ zD69F`vUzjRuWgqm6kBcmYPiyhv$7w9VshHhB9)cJLkfzH%9pr9JAO;}ETeg5q{a`^T{8W;%dJ;iTJPgwOZ{>>uP|{Hlfk?d zo}EeGJv!@i7ccz#t**uSmhwr~m3Le8zdT_*w@~N)DQAgoN0o1<9kHG7(_?Mn%eVBi z!}|3$zNfbA)G(NGe&y5I^QN3Dx_NNQeJ0oIdUu@acYkyXyDj-Z&yM5m@5rfd`8hbP z9l1;O|NP#!%wu<8{j3#22Ug2$+4h-d7yq3#({k@ziN2*WCGED=tBCyfFOOV)aP4AI zyQ-u6!ssctP5;i_|KrBDJn4IhJ8K=k7YVt$*Dm!sl*4_0Q{^2Hr~jUXY{y*=I72#m_Jo=UhQ;!Z{;O-Yz%%cdKsnpf8!aiZHA9b=jX{k zbw3l_*|&s~$7A1r|Hve<1xw;~c^!DY^2zQ?KVCFc>Ls@5o8RYOJtL{QbGu~v4Bj^f z>}=O_9`@6WU17{2Es_4fuA6t(f#{{1ZhutzTDtcAvfI(zS-<}%XzhRetEBaz>$3of zWxsjO%iLQS7F)oa9=E0a#S!@z+|7%uJuW`oCsus%O?O)R<*50MvtQ2c$PBD`pj{SP z*ks!JHTMjUkEPYynNyb)om%X=bK9zS z(JXiE<@17jKU9}!T$-?Yc5Fdx*X1&{TWrcfuPk09*aWuyl-OO6_4w+Xk~_w)@;qZD z7cM`4u5X`pe$bf{f3!R%PJ47vW#&VZ_!{mhrqix1t<>`Di#vIHSy%4miGg;z)92W- zAI=rXUp~>)kxf zxUV1n+`9dE*_QC{L@pE6w?c&}pq`(tmSHkjA=&(=1ynz70>v#wN2)vv=mZvDzFF*CL=43jpDz2tUV)%WksECnNzgk(v*B!-VHN@XW6&umP} zI?V5u#>}S@GUYM*54n5ybC&JDyf%65-m{8&zj{iZ_1sqK589;HJZW?ez&%;=l3Jg-Nl^@ zdgXhrNc+lmO7V$BU7b1Y>enZ+e%JLU8b#f;Tbx^+VsXethwah+mv_0!cWp0wz;|fj zXYDEMzVWu{tAFwvW}Q{pv$-f%VE693S{Fa9HFj6ttF&m{%%AI{BEN51^KOgWCN;zQ zhWuGCem;$EcL~!W-Od4)BVNE+CK9+@Ahx&LcWUp zSjSWUn(yyJN2{Fmt?R7k+!a0aeF>|m6Wi_5lN{Fb?=`rup0?dhd^iv#y`M zoPMg%SAF`b?j2gkXCJP+7ox*pn|f7t?&IEHPSuAkyEJoSqQZ1GKjaOrSZRzs zQB$|=uUC*&N)0&udeaQk*%QJzCU~sk{k)+($br4Du(@dg_r%u?*DiW*hzR2@Qx9h| zZ}$80>yPNBuHq^=%NZBtyxHvLdN6Z+Hhs?MF7#ABS$mPc`lG#*B#VWgy8X0Fa#(S_ zK3{LuC(wu>mQ{@v!t<#Je+dM zQT5vr(>|jP(q)^QT51nAH3~h+Tl-NXL9cegFDs{zmAk@J#8~Sl zOylp6;`n^*K~jcD{iTMy3#VJY>a_2BwDfROi$w0zC*Ja>UcIR}EVbua_T`70HNVt4 zf6cOF`nAY#uXf@=HU^gj*^cr>SFS(pQvBPYvOar zZQreH7rkB6*gA>%;^oOqDZ&=18Y1k6>Ud<*LOyiY&A)VTO47clHFIvr^f_LUjNg%d zuHeJN_W^sJPI`Ytxh^HyPR74G$7dTu-S>LN0B__SY@xcYH`o;z7#8orbC7UyK>=v* znr(LZ?QN6p|JB~`k=;wWb6bvj=G9f@vPXSuU)lJ*+46Fi-7XQ<$Q+Fz@1Sj=^8dfj zm9*iQaOHHR$;qkbGnFSDV36Q>)_O2u_S}7S-_}(M{jl+>{9JKhv5o|rP3GpqozMF# ziqGG@dn@g3g^_pD>A+*(%A%`%f7}-?Gkf%g)&Fq^?+;P_$0sGUHuqFNUb{9?s6TSO z`JA-NE#IqjB>W$#B*%#yojIMga7te8$@0UQPtprzmc4SFvrAZCdgbvPGtNcc&z8RN zIaC_Usy~k-qV@V?gMA_IkKH(I@M3lTmB)*v=LcV9+x^Is%f714W?ltnxbK5xfkWn@ z>$e?!@ZMT_Ud>y{WE#I zYwNq+<$LGf-}mMl-}!U*WbA9J%Svt~+;*uYcVYt_b+b{q)ZhH}U5CSC?*bm}+UgPVb>=^4;4hYc96&*S&C^ zes$}*rjl2!nP##q8|PiVe1BKvU%gPi)vFJ)tcp6nI5Un@o+VAn;X0$M zQ%YR?uYORUUNtGse!j7H&75DJ1}7_)D84cmbuoDsDHQ+tN$o6si?7ReH5T=L-1?rm z@XLejX+B4VJS)}I8TWrWd1U>c7zWuNo^Se_I-CBSyMO<5pohOubM(Opb9biK@3DJT zT5tL4U)7&am9xb*q$p3i{KC=Kc)k3m_@6!eaTk}TH_o4XR_)FjlLx|bjNV_HYf|ll z->0Q{%EhvJ$_TQDW}J(ksd`wUia*Em@9Kl+l=$1Ko$}9qQvJssW82Z7c=W*MvrT_9 z1^7Z%F8@)$Ch>IU(JL9p=2vN^&t>X3Z?otm9LJk`?c`F8{0CyPi68>hn?BQ zKIP8hJs179+q#|iamztrZlz_XM6)cycm349`)}&I15@)P>RaUuKKX3Zlh@m}Z5vz7 z38e+0LXtICCaZ)#UTkK<|D}WF4x5$@=cP9?_hPO@epdfx)Tffv=<>6p)aneQ!5u;U zkNnz7zu6D1vOJq8V!l(TU}f;~BpZ>fi9Or>yyh0aE8@^Fj6HcR%em#g%d%5Nh87(Q zKTCQq7gm}OZMQ3Vm#EpNMT`MYmY$a3z5J{AU&r#CH)n5bZTE6IlW;Vt{=xP6d*(kMOqZt|)Cvs=eSPaq$lq1n2Nfo5wRrneqs;T%wIDe@ zX&y07^&H`>hxcVzBaO17YyB-W^aH1AlqE)95eRAZu{-`VI zaVe9T&ZjJg=M8$7)_e$C3yUCX6rDCuk$nkZE+6)Uz(s-v@u@uhv^w7wt96M45J+dXMX zxw!YPrYHA*=VaDOt1k9gJPje$%?fi{?yXtgvGiGcW+kIXRrxM{d8w3^uZwrE|1s>S znY3|{=bF3#U(Pc-FZUz`azBU-VPsi(#hK*}vsTE~h0Ej?B&&(-nX}@xMJ2zp|EI6> zHV6Ir>?pfD)mh{c`=g5WTTjS4Ok^$-b=kVwLgLEJwXY7mV*U{QapJy%POQ386|!Xu^A@`m#&EhWW)qRuxT7a2@;PwZ*;$7<{f{}$Vhfi! zVc)Ypc#4CseP2V^@r*D*p$5*=X*a)Wd~oz~uzdH~+01tOfJV#FYtjdUnjM#HF0|)!jcmv|z%-fvIqMd+GFgVBevVo_3t|OS zE?mvdpVp+pap;Qf!YZ!jRafs;o{$m_l2ckKao9X_=@t9V2NS39@v7OKX!ktSez3RZ z$9vb)v+k#KUJq{ilgpz0V@}2Fvx(>L==rc`O?dwNDCgb{r{Z)T^!+-2#aP!&lhJbL zrI#5ElM2o)OAwj&{UAfW!JqxE4zY&$&JQN=`S89rJLx8J;^Nb`k0w$KhRX3W3?-({ zsW$yB7exHI)_1#YlQ}>4&+}S_nJZq;;J19-`tUM`_SWXjDW|Sp5LfW~AQ53FciO^$ z?E;tYkDn3+FK_0YlGD>VC%*F>Q@``^!aP>B_n+h#Zu2hRu%&*F>YV$3m)QFT$9&(O z#P_c5#O}Zc6=J7%H@j(7&WmZx)Xlz=9VGU^{(4G4tJ+~{3wx%}NfG;Yemb;r;Z;S^ z*)BC~TN~FmMm*vCsD9K`!bi*FCQk(4xj^BB(tCd!Z+!`gj{U(NeBANr)>*|1qb4mq zvCHAw zKmPkRwAI@l<_t#H2zf`#SUWLu7pqHy!?{Rp>A7$Omjs_E+ zx~^st+f>V7pvJDqF`efGhu4vokA-szb~AH!h$)yIiduP}$%7+@`KZtu8U3$~tvnu5 zKEm_9^KRKKr*S7;vMwKF7r)O z?ndq1k-hlrx8oOA2J0U*jF@=Vbc^S|#I^fsO!o(Fy1eAqO52@zGkmI#2xot-5#?{r zxbRxq`)1s+;xn6aKN&CHBwexa($>a6-efYX8Z)GtVvh3Hp0Cf((tGh( z;C0B2_YsQq^DGmlFIzJC%VdSqPVY9&PYhhteX`rfJ3YE0uyN&NWX+5NRjr1_ue14(f+d7t11#_y%pHb&lC zoBTpZhtFV*MTZ#kmH5jdYbE_Yb$w<$RD193q6>nttitYmHyu~2A7)xHe;IGcE*=lY zUz!Dh>c+1mABlWid41Jhwt71o%gU-7e?{k7Z5NyCvD`Phy5i0H=@&z4m(PDHl(g>F zE%}hp{|?vnrwho<+E%6(qwh_~gizM3M_yhOa@ppw(DGm3m#OWR^blFY>uuW;R>mnEgM^>Il7= z?W=C?(e7B!P#rLNzEoNK6os8DZtvYxq0^;**Cjwi`OpR(O$V`-s+lKG?~6YAsqTEC z^}^8QtW9D3Q;zrlT5;s?++c&~sm8(4AJ5f@?|itkC-7N`&TK!&Q?BQ#?G77taGFGK zy~?gy{bB7hhjt#$R)f1QQy8qu&OUPw*s=B-&)w|~CzsEB6V*E>o%ikkwbI<0?K&H~ zcylzbr|>5nSTdib_EY(FuY373WSKrZIM|$iFzt1S~&23zJ_+~E*^GNjRnyF_GD+w&yp$|VKC zyw3S6=WESRoib;~A{L29_Lt7{Mtl&u5Xt5^=~?%u2_cnB&J}*xu5Py6Q&pVLHX!bB zfW$18S<_0IOHxd3NaWtvh*e^p>_3G;uDoc~tbUZgOdg-2f?Zu=c zdY72?XK=@_mYM5s{d0$SuwHK zV(kQtaJ!&8ZUzS&XA6sXUy3_nYMA?M;;sBT$NBj-A(s;m1nvE>Nif6prAVE#dct0} zOF3e*L{6TRofC89wW>|iTY-n!wJ8?my0@79{k+g- z$-rAi{CwQj!fgp%HVPL`*BpKk-<>LWL-lgNiSmU4#&QCu*F2bN;cR>* zxA$n<&uP*vy``(TBG~VudZYmo8KkQpng3N`ei}f8wzhf#~ zE=vErxGjsvc(i!^7wa~k0+fg+ZZq8Sebd!UPH#k`uUt^?-v9udXV)`&gDRJ zvt#k2{yE&u{0DX!zrJIY;XEf^M{06&TF}aat)|~rWpNz;@&3u%0XmbDer(xyMb&%+y_BQk_nzd-e?$iCDo+ zZ{>EyXEQ8}+i-6}>{Rm$C;1Ayr_Gzwb|`zkh4U>-@sA9=i)Cg+{;Ym?*lk`G4zHau85+x*{U9Y!Z>AEErP z*5=X=3I&aPCHj&E56XRBYpv+z-23*Dv-zyxb(t)|=QeKq(0W$n%7e4L7keH}xpl^H z(KMNm`@a@&EYz|NmpdE!*n6Qx(tXwUs%r#I)t4P>3wEm79^CTC*6R#%h6<Bsfw2QSwuQ|J&62#+Te@ zd6#^5{nC1{G{`|LQtasbu#Gw|w`gzDZjP=MN?U5TczKCovcvzIN%w-{&Odp(<(f^G zWyY)hr#^PNns6;oJ6acDwqm-KRxZGMHvcQX1|HIRe1$S7s?h5X7nzZzJsopZ}V|<5xE;{0R{(9O| zd--|uM45RGK6=-vV&0jiBolV&vXafYpYuM)9E&p0&^;iuq$zFVp{Iv7go?CTvb8bn z)V$^|Rw0?cYQe%QI~lm=L?kVomN5C!>CzcJ{+k?6UJtEV7!$$B#gUz?*Y1+u*3}SZ z6?;X)^7fO8i?OSvPxw!s!7FlZMo5#DpV0ZTKCp7mG7jatmKC2W{69>#c&O8-qLTIMxLUx5{4%{#&zsD; zRxUq_EtBqeA7a?Gnk(UFLQh!Kd@~Uho9qtF?6*62zth{fGur>f@*ZoU*+&oA>dUM@ z#NngKQlhr-;=fHCx`Go~b~HEb5s;rSulL`Vo!2z04K7yy&JyNO|FN8}Y{}NwPwva# zzW@F1wB7&znv4DaS6RC$h_%gdg4^UHnYWaKm!>^faALF8-S5X9UH)|G_+8y4>@7!k^TPIB&_m4{81G#USJ{(I##AJdBc zO`D_6)wuuLeW7~qMoYWivlF?4_p2~)r-yV~J9Buqp80pGSwNwS>(^=Xqs#Yoo}K?_ zj@bDdD~e|4&Of{Dy!no|$?Sm(|1|g~{a_O9mNcH07s4KXb)or^o#)hym)~gWcHcf# zC_-C?>sor_YQKMR7aITc-OvmQn4T-2^F&E|mr3XwMXy71;@<6_ZLoj-(%dG|+W+wl z>K6*8cx-h@>6sz#o|HCaLy+$j)7E@f-Wx3w42oBoGpfw@nY>~x>vY?ggA9}FTViB| z<{w^v_9R#E|B3_LGgDuE?XCO5`qF*&h8g-sI&A;me_Cy^=h2jjiyvPw`o+eSbnUiJ z#gl22}3!StmOKA#r$D4lC@pzCQ%`E55>dn7P9N6%g)Eh~DuOK?q#t^!ln zn>CD%N1V59-~C;~-zbQo{fR(|0eS<-yH_MJGGulPTBl>(kGKYpLX4jE}X=yyrlu^L z_`Eyw$;x;WgVR-p<$lxO?x>rV8!El9TR7@O%fmE-WmBF0M5o=K&8rjUA@Toa<$*Nk zq^lq6PwuOIso>db^WJiCv}b48_p-Zp?=DhX`_OJmgX!<x+i~%l zpZk;tt@nKn9pE==Xn1K`Di$Pv#w)yA>Wui(poiW+JNn(WJ)0_Ia(m}Y-kUPCk<~Le>CIJ>sm?K=l!#i_dI+k#6R`c z*_t^woCGJDbL=_2?AD1xPd1N1!|TJbx-x~eJHiqkO{zHQ>vCT_#UWqm zm))kT{8mcqSihNZ<#BD->5#pqxvcL=a#!o*<4vJ_-|p5L>s!6`PMSKW;E|&ByRuTI zk{Y(D-?;R3rbhZNH%L46C68ej&*OdVoL369g;R7?KQ6g;f#)F0TurIA8Pd^9j*0!O z*>L9j{ipAG78yJLo>zRXa_01v1zPJfr`jFbd`)%nmIPmEzI^Lr4=-t~h`E_v_TZzI zY{c!Z`XJV=cW!T$mA=1w?b5wlW0ciE+7zYQ_JRJKp(RjGndp>HoE>H}!vsli9cJgyST>)t##ka(G*6 zu9%(j^?TUrFJBM*s0#S?>&TB^OMXnvQ=Si8YK-(N_unP;_TS5Q zE7!9hUGINpy+2pH>-Q(&yX(Wgr*t~~*Xmt<-tqKprNq5Fol9p#O#FLn$HjuLDr;X^ zxZPXqCwll$hp(YXx8@3K=dOp%>*UpCN<_~auvfo0DBzIQWxl9y{^{F6TOJgBSaB`o zgTvc^!klGk2Sd$+c2)?6pEaDoWvuv4=irVzca&3SYufBb$J=b<|o#W4h8{$%#Dr*;(>h5S}F8_Zq&T{(YOP+UR(vrFP zH?LHRZ;$--u)0t_?M9uA^QJ>KA#=(a=WZ+h!o49b*kyfQY|`Cj_e;b$e35T_qMuDV2}I8E7kKq?s=?#ve_}~=})FfEGV-&V!bcq zn1@YnLf+HP?5W=7Ew9&Zd0M;vb#-Ih{=BVxhHti(ZdfI$nYAdvBsZu_NjNRHqsaE* z4-?na{ z#r#%@H}B=t7QgtQv~Uy8KbhGZIU;`DPk5F$b-v5-l6yCGFXSRyTi1MgwEZolbM!GUYs#{RcZY{Hh9k zvc+tNm-yVLZ?uhW9t+BkYmT_jwY=+s+pkaOgf;8BH=KHEE@<%ViP&z{g7jQ{`?)I_ zxE;kyYHlX~RjE6#JfpZ?$S?Sh|GXy?&Pc8h{W32^ZMWL{nyXJ&G~e)#Jy0vO{G-9* zo;x;KewSqpvX0KxwdP!|^2qM~&)fO0uKg<&{qUMEC}H#0it7!3q{5rMYJAy~TVEea zPMDLbe4z79M)SI!en-{j^Vbv~EnQ}O`0jb;^7kJP#=U%?Df;bDcK)=iwBVZ7kDAv1 zUvKAqBf9zJePf@aRxAtV_|94zFPi*yyQ*eroQ)ZEEcn zUo}s9+U!4z_N~bFe|Oh(`<$Qq@9bXv$xRJcCr|X8Zssd|JAAtD zme&5vcT@kSZwjvGDPF%ra>uQg6W-sw8(aQ9VSOl<`vw!S_K>>AF4l#cCw*I_XZ8Kc z-R*vkOEp?HH`M*M{G#s`G-|8R_`L{MVdC<~&`+kvcK&*Tb69l*N@CHgn?tG+*D-rmZPA z-ptszo?5vo^5p9NV;k2h6lXuxiB}6*8Ip5x(akme`nk0_a}N9OjM~dhH{(O@Z=<1EybzS9bdG*=@=!*&h{$mdI?n^>woJ>4GEAdHerbRjjd$ zoa$3Hd+#L1{cEy2ix1moO`P@7?)eGtPcK{xCE|~jY!O&{j!$oO7T3Flr*`vwSTwzC zmhZB#Wq}{vo_j{{6}~WWo$Gh!|LWq|*Y~e33l zrSa}*5=(P(OV;r3v{=0||E!k6#x<&I^)2_Y)M-y$u=noWyG-sn9}nh!JGMt+2Y=cR z(>Qh?LyI`IJ?5MIKNvlf`&AOc;d|kW{^wZ!I^hM!kAGQ_EG~0*;c@K}kFc7Yu$qIL zRrWnQS#7-c;ltVDrjHLZ#pyHiu4_E3`dDB8TEgM~r!Vga;8T$HShg=A|IVd3T=RXt zdL|$9kqM2mo8+Z+dx6F5L+q6SZ;Ye5A3o@dAN_2f#IJZ1A`O;14C|VaeiJ>X=YA}elqObTm59v+2%*X zqw{Z@iPU{x|3E-wOMs`hF^e=yMa1)Exf_;nPg`&!L4wKmqL_52h=*36`Ir6gC+zxt z>4h(w@tzqgruI3UET1!LrrD|X`{6OW z?|-(OwV+<+$3A{NqeHBH7joXot69}{C43b*DDB3SQ^JMcExA9_)GbgTQ#|9xxt9<7@hB=9JC4gWP4&PB41 zw{dg%^&hTD{97y~8TmwD z;r1(h@>~2mH%^)2a7o|mGIR8&GY);uB>@GQH@%{>Zn4Yx1zRxGG;TQ~sr4?Laca`Z z@M+w~SOh)!IXzh0UcPc^vg+nNwUV#=j#JJ}#iYc8FD~p#d%(|sa77bmug41BK)3Zf zJ&#-LI1+b$@wBBTI(i*VJDNGIwv`x0X3Pu~SIeDqTj=O+*;fgVZ9YU!vGHDTThmd4ZFo9?{;6dHT$Sy=j^!>*W7lm={G#KduEWHkze4}>N{4(d^rWT z@*ZzVte9Zac$cAzE$U!h+j{HeyVVy2>F?)${VZ=gf4)}w4bAxVtP}RWd;d-1+k+&w zb1ke*>n3|XeqdL!L+wt_Zea}-i#0+lHK#9>3zt}xEK`cvy!U*I;kl0f>-977$u_Sl)t?pSleNLW? z{*p6gT2~Zv`X9OOeDz&$-RjLJ9BtBl3!YTGo0WFfe{Mt3Mme2ub_0$@Qhuwp{IN z?<()6a>?23{@6F2{rbc9ms?7or?2y#ba$4~!%g28Sv`qZrCGP|$?K)J!i;ZDpSteb zj)+qeZeR6KDaxH4Id!pVYRdelDH9F^0FJFwlYHWsUcfPDP1H-=M z3=A?jOa0Q6M7@H_v$e0wZkt_u@!y8^nBC{VER~;=mU!MRyzZH6{&m(JDQn;TPt!6r zxF+2QSaPac)?AyvB<``z&70y4EFKf4%syxCo~=5~qaZmsIr%>0yRPo*%lG%pZ*S}| zwzQjn+Jawvp-=yj%f0ezp8P1-RG%L{M`iYHlbCfyg*)mCEZY9db)TLpqMtJDNRr{hF^397>)}_vJe4ROAjd`8cd)`q0AJ#n&mc4uF5-agCUtL?Wrefk5Re?lB zJ@x7T|NhFU`tUk!0?)#6&m;9$2ncrTq@pYJf*PZ#UpXPrG zI~RX(?PY@#f~lVu?rafcN@iK8GvDUw^}MswHZ7Wvmm%QW5i6*^|F`?2_V(ZG&x!*j z>KT+?>`ztSzHvWa^YfCcIq~!7iyv5-$g{<(q5u8e-Qps}^-GDNsyDsQRkH8dt6cbXUi#(R$K~(+n7LeE=jWl-e?OgS+*K41 zXBiUCw|C-)V+LB1$GVs7`Rj1EE+FpYD(&xf+JBxGh3VuTN%s`mn((h#K6TTf-$uGB zjWI??svV!C&#c({$=LEhs)=Ru|2FsUE54pwEx!Kz{P}wsGv=jv_P?{Sum9=4?_BZY zsSErV+|RCM{_D#8%DrecFbJ^7`EMnk$_do_tK+{pjg=b@e2{ zpQnAE{9}(fT&UE*#%dH`wlM6n{5< z{IQ)e`43h8APk2juPnc2^v+mICLciBms}EE>7GEFT5H*2c z=R%!`s`+E3b6vdalq}_^7sns`R5fer0{K}B3ODT*xb^Dr0>&M@mDl)hyv|&v82yAn zmF?1E_R@Tt_c;p`?F$_EtOVIl%;hzC($06nymo@MbjFE(pA%cOesjG2YI1qP{%s1z z-%FUkSFKp8Xm6&d|EGrS(r)SO^~-0r{W-GC%|2m~TevarPif&#YX5ie+LxPaho9QV zYBhDX31`Z*Qkz%3=eH?+Iq0}Ogz5GIKK3P-$`;&Z(r0siYQ|jo@&$`S`5`?=`xi&6 zYJ{I@H)}F}c^S4q{vKntyLw-o*M)0dKHYKWUjLu6VE;BtmB^fpBIc*-nrt>4HIdZ+ z%e`!OXWJX0%XeiL9Nfm6(rx?XxXhdd0z8jCp4Dpn-)M9CN__N$JsbCA20u_sF)v@B zX`vRqf%Bk&$lM2}DczPH(!B>SOwBm39m5ISh_dreD@_u*pyh|2rY~ z<;1lI*k^q|_3~Ys>Wjlt*H){XHl5y5IHSEz+4(#IJcm47jmfXS< zzYab$TeW(3bF^gBNnPCV&%vG-5!_ubRaEuJ-T*1d1pQlPlW(Vde$^W3C0 z;iqHr6*tP?T=s-rb9c(dyz6&;oVQK$eHQQi>FKWA`LW{2|DxZO4aS&!(*olH*~rz3SO0gLh9Bxm&0e&PoMOEY!J80^7iYGA(CH&qZg%lPMoCm zzNjfdbD5*NH1EwtC0d4AGFxW)?urGOuJpw^O8-Fvt6kBnqF{@#J=ZV$IM>}^tki2h z@!VsVDF3UxWs1>Bzhbo}m*~x1s4e{bT$% z)KR{n)@y7>*MUK_x$*Hb@u6(yFZ_nmu4*HNfiIN?8Nbu5V@^q=bOJP zQ1v~x-4CD!hTt;?cLiB?G%fMU9fuJw`P+}*7v>E z%C4#@*|MS^#Ww8yczdlv^l1-4fw!%p?B||GJ8oN>*q2f2uXILX`|Ftp)%zsh9RB$; z%%cABgXfhqCf$6RCiLL>w3J@nn_>^#wA!i*4}LqQUw1=Gz4(E_ze^u=dIXKtJsm{Y z{x&{qp7pWaNN-Qtg|*#mt`EZ&NS|!F;>jwVop)`e4u94z#`%oFTcmfTn`DPiV>dm{ zT;b0ye0wI#lH+AENgGY03-_K0H_hH2$++e0b+@S5&YgbGn$vO{j|qKYj;_-+~1*icu|h9V%*|L?qJ> ze_f*Iw%6*RP>OcPHMXA@6u<0pWKOxdE_GDr5nbnor+jhlncV6SHD|SxCC?hx`b@!%7_PO#m#hjv!BY8` z-IAky+dz$5(Upx+xm0l1G@BWwpZ~R-UmPWH+(7Ww!|KOB%NAre-tw#QzA(2hf%8`) z_cbrmqyKj4c^}xY^A6XS#j_l9e|%f(6Pq3Oy3MgZmz)3X-B!yNQ6Jt!9|@YyoWZj7 z)r6C(Z`1bbt>4=8#;>Tn@%x5I_5$9UkNQH~JRbx{#z&T4dci!+JAGqkTaF?7j`f;q z52{<-%Wp(F*QLB()1Rp|-7)CM+q8M<=Gna!b-AvI-oY>c!w)!Epx&~!q|b=y6G zX0HXj`?EzAe|UVWo_{pjG&_8Af417$q_^Lt<>bs?$7@}Ss&sGM6esRr`nq#^aak#C8dh&4&`NyFY4lyr%*U4E%B`C^hv6T|73{byd?oj5^WmF<64c<73+9svuD6ihetDik8gOzw=5y)B3r+fni~eO^f!U{0PCgNvEaxbZ7ivIVk%w{n0I+ zDL-D6M%ewoY53H9iKxlH@V54_&~ysd+!=of6<&a+xKs_ z{4*gR{TIu(J#AicU`a~W``wS551%x@H{t2g|I23m+IlAZ!sr=o8&viB0o2K?G zI=T0g;i;)9Ld*E3GmCk)7Dr6dIGS&1t>o6V*;sJ3P1hMF`3Sbee_Ba1HcgPzZv54B zTJG3>an7{R3U`5+We#zMGpqK>1>fC|Y8-QB z=vd@$o9NiFsQl@2gZ>>4ISLQtY3<37yZFF4R@10CTdj{TPO<%7%LcKAuYs4&KlqsD zd_c65A%ahROOVmCZH>z=ZRoVE6A4(LW5dOgXEJHW&*iTJRUWUi_-q^zZca2&&>%cmCGa&ogPca{7LD^5e^Dl!yX=PP?vJ|`_;u4f3IHrk#R<1`1|%F zHWq;szpQt>z`5q}GWJbuKCYSPXa8YalqL}BwbJuM?8lIkmJ!EPrz>tOFiGL)kd_a# z$b9el_GY=m-?M7FM4P3jaF_?_aGMx8EnqPEkuW*wip)G2t-$E66Wb#E^JThUcrZ z>GelS{$|g2KAAMPY{TY|U-Iu1czKepRCwKFnNi9T+A(cq)MVvHKbNd{qQ5FFVsY2~ z!j(ajr5x6->pZ(VtnB`(bvbjAA01t|Gep;eYw?xer6Ib9_UUS1k1W8m#am` zPE0bY+a3|JLp17Yoywjk8#=nxg3ks1xyu#G>g^MMM50}NYen;tGm}|rt_L}<)qc&~ zsuRen;kjwKQJnfC)<^!&Ci8H`ygPRHqi@&gw7A@PYrbUjcr;n3&1QajmsR5a#|AfJ zk^dHA?CyF>m;ZiZ`?o5E$v*ntpA%CWBkSS|W&Ipx_}XXHWJ)bdoR%;x&rjjRp{1M- zm$!*>$4pMUwsL)cYRH|n&72lqne!BXvQPVL@aARKZNI7)1}>+UWXqV^Tu5DcEADq- z>v4~>BA+a}r>m^}ap#kShT`TDBv@~EdPntX+(v_HJS9^LKF zde)>Rap5x0jhPy@MTrwHPZ5s}&vsC|Bzx{>xxmV`@_!$)F1{*veuJ<190|5dE$95R z9pCrvnJ1Q4c5%+5S3BEdceC}}dpY;`?VQWapTj)LKYbKWdh_hf6?guJ>GD=~hdT}> zERT{sldxjq1&PQX1-W)YS=Am-mosax`@b!?blHv>A75T54a-RD5?o`}Yc4cfw34GF zj6tB`pWhcjM&*S;CBdR4v(6nh*{oEz^)si&r|YZSbaiJnE${9*!nnmiz&hd#$G=(s z6WwzbDIIQbmSb~$vOJ0X>zaL;+VS&bt?xZ(obJ9b@oq({*k2vrnlAy@6dPD3M+ym; zESkUY?wsar--2g!NZzpj;lNqMxoIiK=OqkEZJIW(CfC~Xi@&O9II}j+H+98&%dO9^ zU22yx`n{s*vWi04$Da?FD?U7YlF)SVf$1!Hn_#B%KTn*Ht6b?9C3%%$^71_jixw<) z+%i}F!{jD4k>85#Q4>7{#n$XiU-i&sj`H12QZWVAteZ?XFrE4KsjS6ie6RL5e|KmtNKL=O_)}_n>eY2$j;{IQD4uoy zcI?X=LK|laX8qpACA{*$v}HyMWTg$~a&3|mJz8QZv4}a+>{e220*}9xLhTo|LWx4# z_yZeWKW4H1BBr=RNGz;RaLwj^JGSW^`!4Z^o$@$avfigw{Dnvi>xW!(ndZK{ewUq+ zK0FuZF(nv${3SH&$Ki<^ye7&fu-jM|Oj{}0da&Ilv5Yt8YEZ0bMd=Ou$$pp2I9s)w4k(Wy^sN%K|OgLX}eq2BscU4^f#wHf>)Rz5CXP_g91_dASMOH_`{nPcZG#GRia@xn&% zVHNK=K31!<3yX}!Q{*<3>8A^^W`v6Jw-~seO*Uz-*jco({oz5OZAZ52@oldPiqmS- zz2(Zn#;$Q7OE973$JG~!Itv6B*T0Ut9?|XXKebzHzo&-Fb>+giqmz!LudzLFpF47q zn38rvn?QQMOL=6cmvFB)+s=mkYYNO;?yx&)OyW7vB*WxZAtT z+a;}Y82AtL3s@}B{E{5PeYmrNi`Vm=<%R1%+C+Z!KM`6cxa-gp>!PVoON=6pp4i)6 zC6l}3Pwtdwiz`i-+AWLBgrm1vzsnA<=Hkph;s5Zw&=gt04@RF3Y+W+LPC$ue-_prf zgaT*T-{$AvcTh^+{WHhE*Rm>gOP@8}>b`gJQFzsZ8FCiyWWR;KH^^yZ*6SD6Fg4Y+ z(B<1N6?#~8ar<><-Pr3#l9^mSoU=)2ic~A!%iEsVu+HDWtc!Wiw>@f&m7iU zb8(5(e6CZkSDsZk#o>JP+%?gx>pWJGr$sxg_%1Kt2zEZa`IOYRDSd~3H8r$Zs+R5h zt~^D%c*{x#gFfl+zm}-{eWm!tO14Hq%EZyA$V1YXJEl8wV?>Li$HLSt@#(w7t$()6 z0n zOD8Q5(yEkb=aezpu`q|@J zmHfK?1yc7rD|+3pF)o~{knwEVI~S(UO0MEwTMWf+_HN|2s*h~AFEO=E?!(pY`TBk# zPmj&p)N}LI$Mi_1q&d0a>=A1EJtazY2R2xEC@0KRU85lIWb(4-+{!o53vz)o;>~ceymxxLt^Kq=E(NNGF3lc3Eg$p=?YZ+_NJM2osNPM z*E{>DRgAi-xm^;jYn!^GSjDz>9juUhlc@W;urHL~H$*haKy%)+b)09`cRls1*^pxp zqAYgr$8>*@?=u97>+JH}&KfK@S6Rry8aA=)gk;Ngv2^XqQ@@YAsQK5jz^?w#?pM2& zH(x!MV`XD6a$mOF+3dxH|KDc*Jr-BWX(1$j@#o9i&oBPEdc0I`cV)2lERSbX_a7+J zec7?*Q#+fv*Lv#*k+bUN@N|m4U|`=Sb5LyRjCBpm4{zbh6LblE_psqqW#yVb7Hl@t z4LxqTPAXbfspO|B?!TZUe46d)@=4PU^nH^0Rq*UdXGps{|BSk_%13$`mQkS!4`nkQ z|CFfxYnXeau>8y{wQqiz_9mIL7QSC$I3+n-$70IkcMA=+u{=2#Xq@Ypc-Cx5iFow) zf)_6ug{{2i$?Yru{$SevZRd*LRd9^d-bD?`{#`QyiO*L~qu)Qx8e7Z2sMP}x* zM;b+0Gkyk&v{x33l~3(o>-@^MEjM+$+UlDn-c~;<4)_v9wbn>tOE^O@nRqSqguHqOyeSMD)Mt1M+Q?znFG zY>KDdxubpe+V_U1yqw2X`_|&qfvqQvC(o%;->z(&r1L=C{k{5&hFmt^g=xA^)Neoe z>tmYY$01Rw@htGc>IKb*RSKmwwOG0>MSQjhGf!BWXECcIoo}0+72DHQ#SNFg%_B{SSZAoHZ+trv!+gZ2$-4JQC_p})6!{Aj8C6P&i{@fdblE2MK zez0e%K$O@d#SI6Xdykc@m{_fQo6YO5g39(~tL&4Xl)vA7_L-NHaaf_zKJBFLKmCtc zpLuO}@yg$=xch_N`3G&YcH5MEzv!&5D0ljmd%2>6<$~P-5B+`5ia+`;etF&62`jn7 zs&xgwK62}Gwv(C6yjgrN|C&{vhBNjiiGP<=6+Hgl;M2!*$N!rx{&n-ov*T|KlYfZx zyvpXQSn%Qii{|u%!0k^W7ls@?Iw!cKG3Alf86&Ra8IB>}kLWvgHJ+a~?c>XAd)|W= zLktaT^Jbl!y2w{%al@sr8%)l)iLMZOGPg=*^^;znKO0QdKAyCBcGSk8rC;@7v)zXS z)6VO*F1M<3mt%c?%+lwSq8``R31!EE%%)BJabxWb70Z3MnC47~W`81bc-=~q!w!n_ z2bg<$>zLVhpMF&q`Zl(8--hJrOC6rZ&ftA|BVeY$oX2z0PhOjKX1||Pi0U1~56y0Y ztqTo!9DIXLHoEROI$P+5q)!ar)gQT)^Daz3vLHr~iNW`5sY?($n^WD+=2y+ZOkTqL zHC;(e`^5?+RWh5xF0V@7Q)j|_norL0*)pN5Y6KE}&SQ}A%O@2`oTEi0e7=hl(E zMQxrTD=ynKwwh}d9%SxX%oFM{(fXC@oE*<%CM6x;E=-&C?P{~`)z{*Z#nD@rt2S*Z zS(k5GfQ^kmlt^PH4#O2Q(RbTNSP_mD4YeQIhxn)52 z#(NVFFdMRjF1q?X?uPB-K!e*~S?(=;mwS3%jL5EPPdUN$Ig4Li%HW)pdQJZ9D>bb{ z+st`C#oe?HUs^gP(^zTC?{k4H?(w1@0&oAbpKc<@)9biEa;mT8IoqeXD@}ylZ>~So z&Ta3_FeiGcJFioYxfVNXc5;T3e4hy8PgmPx0Y>(0_e;HInwm<_Fg#!wKK0Csby_JO z&PMLxFM1Gr;jz+m$w>7b`zHw~8GV{KEBNoH`3D8wRV}?`afnqlsVZzgk~QpV%~nq^ zY-2E45dEzzS|U=gVHqonpCM@h?{)M&d@=G6G&g_e6nPwYP zsaD)p-o(%QuX~>CwFEu39|!LL=0R(-hZ<{><>TXR{Y<$Sig0;DT@kcMMT0ao`2k$%qj}2*Gp%! ze_L>z^LM8d1Jmq)68C!k$0}=im&=4bUR8Va-_{5h*KI*6s~y+8V|3bD?Zx*dJY0K+ z+WT{dA~xD?{I3!^@kA%zTC=F6mlpbR{o8e=POqH!;nC-u<*T^ArrE`vh^pw>@qFRU ziSzG$vk6XOE@E8Ln8-8XW#{^P(h_r<84fZpdwE4h!2WpLMEzs_dlaiON@Dh{eevSb z6E)sq%LAhM9-Msa8kuF9#;f)`Q@Z`>ZmM~r2xDT625_Fg}sW_oS7#T8s*Gfxz>pWH1haQ zc;93evN(Qy*76OzgjmEMB_CMHcQa`BI?Yh`ukAC|EdI9TvA}C1frD}Z`isPLc+f>GQ>veNM zqw%smcQsixovUkk^#gJ*yFWVh(}Y7qI_93~sg1lWem_l$7y28^XR01{PWSEK$YQrE zPj8CZf`<(e9M_NDVwm0}_xOUhkv{9oe8m#a#LRx#@{;;lOnb*UsUu* zz=cg3f-e{JD@z1^3O>Vq>*b1wDJJtp-x+>0>=y`iGZv0{i1aqYW<}6;uzy6kMbSn9*&yV z@!yZDcSTOiqO!z?%;C&_+b{UADo#9p+;B#5an1duw>Z~3SsnNhGAp*3$@u%LN8+&p z$1+)_ZHtNPyuuiEv_i71UIC}Y^RTpC$C=~ zZ$GD_+vQJK2xC)P&BjLzNep>rM;exUwJIx zV2GRg3Ypz6E+jrJ`Wfk|yxHf!$Bb)hUL7(>F=y1txbWhO{ZHek*(s&j6D-X?C$Htc zYqo(~@ZdD2ga#^5U=wo0yk;6!`E>ZN`SHPG)8ilYeiuow&vG z)Yo-)4<5SwQTJo#GcNV2Q@^LMA3nd!Bl7W@xcjVjjYoO%9b9JgIA}SytF*6ObZ~3& z=Qw-e*s1vi(G}M7dD#B$Nq)04|H&8KdkPa6QnD=5RcD(-x}<)Nb=kwb@x0xmZAnwE zzsU5A)jGfAdf0{MUH|76FX|3t{5!*?-gn094y%((L(*2bf3cLEs+sy~#qyaBK8)@< z2adL!^;r6LqrA}9X_9VDeP$XzGD>EKMehEYx|(Aan-=dT^_7{C5B7wfGtuf5-Eq%o zZrb+OkwTjNRjn>T(nUYpejQ{@dUZU!FL~Q3{=JdQYOFupmJryVRGR7PtEaBMAbrAz z@bItZUi-JltKKQx5&qL~wO~y3zdft84zAAsw_C>{bY-~2I3~oGL z`*!Z-<3W{AJ6HT+J)%EZZrz$G#Rs;uasPR`d8Lwv$OE@P9g7dF`<)$4*Id(->`zsk zfB5tNBXjH4En?bcuWxsA-}8In85aVUpV&92XyKuvsb!K23mndNPh*Hpn{y<*dfP2t z@gHf75v^M{zU<$ZSUq94LF~gt=U4v8v6{@i#+?0a3;VXSTPuQs6r`UB-&y=B`9`Jj zf}4_kJvXh_?d#JivofoXNSg7hIB(AJy*s5Q_U(Kk9u|DF-;VuHciNT(HaU~$-8H`J z9%j7kdwB3G{p9H(n9V zYa?H$wm&IKWas}M!`{FB-Gh(wUoBWv8PDGSd)`CQLoO*LM+E0@$~f1%u+IKO^xm3@ zr%yE)n#?`4x3N94eIe@?u62uJuJ2Ad_|wO6{TZQocN~N5AK7tTwY+J|+z_z3?b8R7 z!$xa@-l>Hd_1ol?*zLU)d`8nOGUIx5*_xBZ(+^I%-iw&=uq}yg z+UNWRr`MMA)>d*Z?U{Sdrab+S`GtIm17U2*S%-3;rN=mzd|j5P{aK<#$o0_n7dH$n zRxw{SntNwOYQijmwsV?{Y^A>KhSKq7k~=&@_At-$%QML+P|(13$?wt3B2qqzA0??;cG3)eo3=JQSb_i4srepZQ!(-xk(y}lnW z%1qt7Zg-%orbu#V9%JsgP{Eyx&jtI)%gWf<-TD74;r++M&3_LcU-lrBed`^A$XAIn z4#6hMf-1@@R&}^8nx}1Ee$ncI(t3l-(ho1V%LV>BlXd(Y>)dv)OKZM5%+;>T=8%ox zs=xn#tM>9IN9wtiI3wiSb&uUFb|1`?6;eUf&Hf%TI+|Z%) z@p?zwzd!VAmAzx#t>F1MA&K$vBdzrYCLi}(^P6^FSGm1mW1Z&u`xReS{e1B|YA?&a z_%zXzb=)(vd{P2KX>+vQzrBZ7A)nPcPv+d zf7QHoA3YuRRtU0(IIR2fc;&ZYM+_Fu5~kwOsC9WKZT9ySJ9-6 z`E>>^{qDak7Hz1Bt(fel@pRRi1FE|@rT2xWORdTZ(@NQK=uvU){k3u(oMKzA&OMbe z>rCC{g|`zz=N(*kPV?{Uk|b_9F6LKz_K9R1wfOi<)a9wb?em|?Dt1||-Ss-`=z$Mk z1Xh2^ioN;##%kwj&-+dUt1iwKdUHDTRsWl8_N1eqvv0O>&x}8tS3GmC`3cJvY^_9b(w2ANHL&C z2L+BD+ns+bq%n4{xPIHSKbJDgqgKfNKKyp0{U86N_>XtF?}a(!hw4aXEs0lH8?nmh z`z+Sqy4*~Qts*w1tUkQ|N@)I<3+wKQIb2*>b$9zVlfyFwXC+Kr>p$6a3zx}ZWwrhz zp9|V%DhG(Yy8Yzq?9KA$?)m7~)%<$)W{c~CgbfYO?3axyGWKYvFF7>vlu8JP1&`(O zO(ntSmrXG(GEFPq@sz`zFDCZI)ntjxcSUv|jVwI7cB#b7?5W@Q^74zg(wr}m+kH2> z-u3uh{NmlJ7mVtG8YKr=C#THwzN4MQviJJU(tv4MNoOMW{$MYDujauub;|MCY9i-7 zKC(I{{#*OAxj495KYs4KzaPH5{e1fQ^ZU~iIs&RD1pf`t)j4%#jo=2`nBBZ9eRUrn z-~MAA=RM~w-yexMU;i=vf6TeP=SBJgednCuku8inzCwdHQ}7YTzqxyM%wh00uf2NB zVgq-HxT%(2(S${p?7g@ZCU*6ThlzIUC-NC=Na^nuk(559=}D|8`w_2>x+HKW+UEk zJV|}O=$uU)7d7Jf3?4pvzHesf0dZ}kIYukmI$!ZQC$E+>V4ZuI|5ewbk{g!~F!?&p zFfw0uu&AkrrTFIM`?DD3bKe=Fk_X%4* z?q|6gbLPam`k$YFzWjOF_Dw;4u*=1J51ZB7O^~tK>;C`A`Ss<| zqc>-t{#-p>{5X5sRNvhv!_|AFxbrGZc5UKzed(f=bIx7$%MpI7Rhnycmg$CB?tXP> z{~C+WuR?P|AI|#mCh};yjP62nI(6%ii3*4<|Rjc)KJ-y1hTw^ozY?+?(u*_vo7`iq45l_hw;WxXaDJAcu2V zZDmPDex6=I<=(K{dAHpJYM+PuykYn1aM@w@D}b4Af>vJkle7g|mkt?ph+2wlk9#My z+gsab0{^T0C#Q{es~qiqYf-mSjwLhw*_k;z-^v}DKYjhbxP1>fy_!#Vi!6OA>0ZmF z?>+6w4x7HdCg+Hio37Q&j{fmWUPfN_|CS}|=Rb6c5>dIb^wOCk)n=d7Oph#9=PWhs zYZO=6bYMxywd@%R78Vv2I}O7&ACYxfX0j%0_GSNrPqrmRx44L^im&i>Ipug^(T!bC zinz}lu*$G;4Seo6mA9%oWDyzpBL((~Z# z*WY61QfV&T^6&X4o4CJ)`>JX`zWaWe;l<^u+~yZ=?uAXuW!ZO3>hkxvFJ0fTb|5IWeCIr%cH;p@6H{>=Q&l3ACpd(K*7dDCuTx`0}o=9lL- zvh#i{7BQaCv9hywb%+qRUjB)>juX!&{$w)q>TFy4Tjmfu%c_MY=Tr+aMc0TWh`bR9 za@s1_s}=9uyv6*g$63XP=4w3O_H`DXInsAkP3_mR@4Nf%6(p};k+{x(xkUKGqM3%t zFT1-xRP}6gUOTl;>K1#xv1`y&UG3Y-x(h5Pt~n5_utvTy?BRu+SBADZSCcrtsG+Hs+%=y9bQ}O6-&ZtK zoRrkbqBhy;-l926&ip#|jpxt*o(J*|orTS32Jwq;ZRh5QpCjvfe7}pj`olfu(#!wp zihlXHBi3Z&%1u4>Z+^Ef+8KOi!W8!4$eJLH>c0u5j*Etu4~%4ns?t4EYo~WYAsgtc>nOGq)e}= z4fiqLd%FeGBX5+Q-}i0)-uiiVm*W*aX78EoxbkY)=0h!?3$?tXY4>q*0Q(A znCh)ib!L{F{$p>J<@c#aXH+#lI}s#*L@&_rwuGuw>*Yz^!dbb z{a1yd?^V?b&5K-G_r3akKDK<$x2Gms0!>&1H(v6+)U*AjY)bQz^6l(*t!ob*ZeKrd z!*`dowkG3H&+0lk-id5}`5Vf-*70h5Ta@kOyUOrnTB3E=6*lJw+LJ6_=_Y-d?&vFi z#m)5L8MhkSs)KnOcooXDi`+Oq7fwBNdYNtXbcgAFn}ZK^-aGk3;iTx^!ZSBRD}1tN z9J%hFcq4Z4f9|8-|MfM9?kK;0wF1`Eq zRlx@p#f;$GjCcQ!9^nsmp3=GQ{M~8Q6$UcD%GDNYXGL>~-`gOx-6!Nmd9?ULgC+ZH zzT`Po`4t{kwM|cH+WfcmVOqIJka=e0jz4#@YB||Y7GJGbSy9_;W2%*I!Pz;j;_=5d zD<4-F^Dr+v?jO{3is#lQ-7S~7_Mz?RQZGH*lPt%;kkrb+Ac?CON&%k;`?vV^j*a_& zuXlL+GGLd7&zmQg!esB7q+43s#d%mA%mV5rt0?7~@zW}2XNn*9eD^d_D4m`CQ{<$b-um-buh$H(Pd%D4Q_b$Y(N~pt{lgW<_Vm zoGTJ>bw%-k2gPFd+cJe7x14`hv+s!H*BiPF&GyIadY&%bbNo=w90enbk&!Tv!{NPSv~)^e7om?>ZdEZKj`%s zmy3yWy_&rvU~cs71M@AWv-)H{U1~UCUR&GL*_-;`9pAs#UV8q&g0f%FKbPmTwKOm+ z*)`qx;=P@dm3o-2KC1rnNigBlp5t!ocedY2GU5L*>G**ubtk-=dai8VdT-M4?R7%_ zhi7Je6T4yF^Rv>%H|y<{ODm_{%6g@%T7Bha%9g&pt}o&*1n;e#8>+&z{4>jv*9Rij zZ})ipes9m_#Gh{(+$H6=n0c$&7u(xga2yMERFCRr)H$N@<@0MD|LSA+KkT0^{i57o zVD8NK*34@AFHTnC`#dMz(x&X!o_TFImyZ0ie*g>^NIgaVVM!OdmeJCgpVErfY^{~<(aZS(H zLh%h@yVtFKXY|QQ=EEWhzD z-YjodxbIDM;Fb9*j2=lhzwUhVtLFc@nQwmS*Dw{goBlZZ?A{EkgFLoV1>|Axs<$30$O&4zq?qFctEirf3BEdgLpCz2P6%+5~^p7-J8kX@^B4DG# z(m7vOgxm2ObMpM)?9n>-<=_Ru6*=#gzL52)*!Re$?O9FZxb4d| zo`-!KZG9wjeim`HFsD_#ZG5I59hT-$+ZQ3P&M2E8x7y(QbDf^gCY)UJn{|67e`M7E zn5L;xCbjw5>XMwzFE$>2-^Oygw(N$eNw)FdACW0`8r$CP`CkxFwosMfv;Db~+zsdc z%~7~eRTBB%dhd6JHEWXQd@irI`)yG7|KXdjKjRr!T;4BXb#;@{nk6TuyT&=bHvGtP z#$0|uZBB#!MK8;U8xpAsGx=n{xxB7S=2M!}9G|wv;M-!Q2fs94SPIt^nQbne_W5Xo z?L~X+! zoBfVb7mu*>emV2+x&h0lZ7;sMu$t!0S;GBi@nX3@a~jU+6tb^bH=jRmSM2E*`cGbn z|Lv}AtKazigML)o|1e(rJNbX|zsvl;J?&%ssgLztRlgNK6#28n2{Dz{nID{8)Nycv zUW;JcerxZaS|wRUdmm-aS|WXA9ccEQyLI>CB}zZd;=H)da9dRGfwK)MmR2`D_X)H5ZGYFAe5m;8TE$Htib{ST)oA2D#*`!! zB|l9)=h^QU|JfgwoC@~pJhyko+6DPRE{?ou6C4gt`CYl?o#DI2?DdP}u89k{zBqhy zt+=Sn!^@B5x-BjKe<(eatzew6P)50><>_h`wa#ri*AHoa;Ahl(@qA@FBa7b*H-_l< zQX8gd$LpySG^l<4@iHXmrtl0!?zG1?lFMrtmo4G0-IR3lvfuSwgH2PXn!H{U5mmVP zrN)Bn>5Ia{9dmwhZaCw2eqq?z=_Z~NR1O%HcIL@u+-aWiv2P!5|L$*g22)<^UgRs; z^VYZH{F#oYoU=`Sn>yP|Z`qP9+Q;jC;X__o^n_k+N8SG}4=sLpepXrGlyyO+P>k`k zpwAIyzekZVC4V@ae_91Mim`r_f5933VdVvnmV;tzxr|mGOHvA6TWI;=zsaXG$&cTT zzWAc4CU$1YmWGGT6=De&g98`}AH2G-aCyVV1!wzrmY;TfV8J8IqF^=IG`eoq*VIRn zzJ=E=?^^uAsi2pmVT0-iafuwCLIpS1W5MdoEe2EiR|PWHci)iRcy*4l#}&o``s*9Vy?@vAGIxK|aU=Ks-m;vzj+bKzB@i2?Et zZX}+WwaX!W>S^tONq6{{FI@lev`CAZxoEI8COHXPwYyJ`OqBZh z;B|$-@q{hg&pg-s&g8u(obTG3EQxpjME3oh|4X3y$$<@?QQIF^GfG>=PD+}fcxeOE z>4}F~R=@1sSn9CHYL?aAb*WdB#m*&NVTuz;+?+47GREr3`~#Ce9+$V9vsbEjecWEV z;#n;AOs1?_Z6>#7nRuU?c1OQ*leH=dh!tB(of-_}^RKFjy^jcX$IH++gz{}lHs zGfw|(ZL%@epy7D)>{HLo)VnXqRBD{znsC>|D{ktsiJux6Y(6DKW$t)WV*X+6zX>dB zcP_CglV39{+{Lou*_M4t|DMjTE!bMYb*^ZO-h9=K=YLzW=gV4 zRayJQb(!GgXWkR~nPI57z9tlY35kty#;R$t`{XHV}fmX;g0 zifT%^o!fshU5(k~%AGiEzSAks|HVA6bChyve^Sov)TL}MzA+%BeEY)Xw+w&w`$z@f zyLPHtVATViCGC?{ADlfnDRsxYrIU-J&ix9>SabWrW`@-@3!iDpZY-ZJf1XXWZbjJd z=SRM+i0z+m`&;+%e;uce;)ZU+Il?Cn*4vBE>^*JMu_EXK52r=`61@qU;-1sAcR#L{ zJU?qi&VqLr+~RJ}nz!0?@4v$j(&YX3F?t;QxtI5x-5~RU3Ffm_3d%cfef(J8W!vNQ`JUUm#fsTQBsJ%1$7ZUsNFIM8D5w)W z&-lZArr2t)8TP7CWgm7j2eXO!r8q6kp2+k1g~qg^WU)1S&L58MyS=3Q1E2fKDSO2i z9^P`SVBV!kXO~(F3D*5zG-YB@oFi94u#l^u$`#+;zI_vouKsZGzVbFppl6xdv{0L* zHTjDbUI+L)@cuu_aPlyRisRRU#LtZ%E~g88f8e3;GDhSoK0)v;}eGW#qC4E{F zi%t4YhzSZV$#0W3P%3TK3M^paUz70LSDELI!^3k6B`2?xoF*8}uC!`Nl#A=xyX`-P zc|U)7_wL;W&l6b^50-_WRt;dY6@GH_u6sq**T>((>v#XE_*Pa>_4D1UPmg*^CoHZL z+Ssi!n>CJ`-}NNVBYmaQCW6wx9&9Z9RLL|?c^6-J|cEcYI>63rJ|c^ z3`R4T2wYIs@C;U9TceyOKP4$aG+k-WF?)9Fm4~{+L^aAJm+=3oDcIb8&Un{6p1d_H zt~3=}FHt^uX3MnDs6dx{qQRHAMYunlec^lRqVicsPnYcKPd_*&3vh2ZpK@d`#~Q}2 zH1(35-kNSYj58&rI`(+aeesRu7GIuh-8NPAFa5R&Q(LB7nfB35cYdOJcJZ73mu@fA zE<1>@JlU}4XRx%f>{LC$plIcX&jU8h)pFmZ#o}UUJ$GSiwUyQHf5**}?rQ$zO{@+& zGb`gpk+M>*-lu92|6nx_gOtf){^g%_Pm+Np2OL)+lxH&$H<8)Tcwzr?1WRV8x(B=ug^C+n-tL5!9H>GZ8^)&J9btr+*vfq_-yNMF5}Ibh1}iOj6W_q z*_Kn4y(&QU^7bVswyPMF`!K$p`R`}XmGgR;@*;xgkL=|C=NJEG-nLnfl*{zAHcy?g zxOelmHO7Z8f8PFH|J;80jx(3Oek?w+e_q_CcJUCA^ut+;zXk18VKh8Zc+mNf@9Ziz z{vQmyhmIbNztSd|tmTW~TPOXw`}D<|udC(t?UWv-UVj^%du`qJIxV3IX4~R-RGURskc4% zNx|osRGO2z*_M-Hu}SwOepGd_Oy+!Ws6Vqlo%wh4*SCGaT8}=gyOsXsLU`>PJLPE; zt)jgxW?Ad}5?g+wmACZ9-Kw7xtPU^E@-X_C6MZ)=;A_r=eJzO>c3eAbV^yT9rQb9= zyK=_EXUh)ye+_oOo+YzpI7g-fBI6{gf{?@X*P>Jw+<7 zVy3EgYijc_F75jhet1>1cC3)$q`+eDz}`8&X6&9a(^(yCU&gM~_l$JzyMJ5O^wy2w z*|U#qThy`4=G0|B^{t#{q$mR;P|8okXr zm6PM;`nz2YEYqaD9L})q7HQC!wzO|q@W#S@`tfh<6L(ABJF-c4`NrC!uP*@KV?TwsXd>IbN6Me(U|MTqemp{pa-X zoTIXmn-*{@1;xEuvZ5!(@ANHEp{-IXA~r0FbBnJ|S8~@8ab7OBJ>)>!vCYdP7Jbt^ z)^nTdsIh<61&3{+p*IetKIfBLaIv{>Az%s!fODm_=Ft1+SUP zJYmY7-y%tyBxO`1vgc%Ptz7jZ>}}1Vo~#Y4lw=#(mdc%x6WY2eH8SqHPOkIbM>{p+ z-R7Nd6>gH=TL1O$!j8t2U0&BFo2==6U{q@1WuJKG;{Fq%(<@JGyl`B`eR(a9%qOR+ zZ4b)DPYZib&MTf%#KXDYsQBqmqdyi8W)u|8Tg~OV<*^vw+}bPmz4EW-BIq8}W7*q1V*4MTU957(VAqb0$E_cJvOQZE)9v`| z<68%Nfu6c0>-%ohB)?Q(Ik#eFX^--uzE!igmdq1-AiG`Gc=BD7r3-y(JXv%)rmAS9 z=lbku7k=fb(tasu`z}Q`JLkXNOK*9s54>0Cv1H{mwa-awZhiXrV`q%qo%yEcU(8tk zXwwppT0cKdxx#DbGghoqkYm~)o$+wKP5#!U$qviQR>vhR&g{IoH7g-wd(i~HI-v$9 zDJxc&>ix%CLfEQS1-AS5-wBm^w!lc{xfv((h13;yZrWBisLy)7girTJcf&iS31u$p zB$hpzV!vv>{N-oYLUW_Iu0Q;`)oiNt-AwEGO^@fMM8+pL?y7E;)?6X4D5thq$>Vg! z*{Y;+7p1dKYsJ=WNxwNGAxzS9mcOc=-n{sRpS|Ilw?1vj`}9hr(r8V_1)E0;Cltfs$m0td|F*;o$qeA10#XN>vwzQNA%yWN8>(}dV#Z8EXhcM5_z zr-%hFsyu&8iB+p#In0jNZAvf4wp&Yn1i2^u%lDuDB5-Yp&HON>E)D&u0moGpg3brk zzfSD+W$f6+=aBbvi`&(wTN&NnG|gG$T%mKBm2>)ThoeC;eN9hybA3{r?6K8oVcR5y zX?+E?wqECBj>jaYOym@JUeLCtKBjtOYk<+;faO6qzjsgM_5_NQ|HH0hgV_5G=nJYQD4{nJ1zy8psr%##sQ=_;W*lw>fla~A* zmL4Ft+jI9s#|xxrKbEZ6Hv8xIu*dgr`~KN|IN-$L?fnlDbKf@p%zGV^)3>L$ zKl{L!eQFOrY0b>FSsiP2IU!p3)by?HO^R20J(NWJ3m#{dGnXE*i|f;4FM6LR!gP7D z;PSE(i`|z+Z!#3*XcRm~mwT0rmslOlJ{}?dK!l-vbyQ$5$9T(j$du`$6 zpB8>Kn2TY`|EbIGe|R8uhznrkioe!3I}qW&IOI*_Gq0=6 zQ(EMc1y1}@{2Tm1$kS~7>vGR~Gp<{F^~mCVd3RUsCf}t8W@T$!n|XHniqchPV!^?C zTLMkFt}K5%FK%CLeO=+TJ(bIfv{%2I;gEYraLKaeex6wsxnIIcH|#i|8?e-MqhoG} z+k;!nUDw>;d}f}|x2x~cQEy-U%i2XVWQ>3Q{u*&e#(n>>%Vm38g73b3dFO^>LR!zH z&u;IZ)lUC5@1Iu2+4ahwryW0Zm*4eIV|s$is#3!ltCCW?7vx6hPThUH^pNPKryJ7+ zRxE#ZD|kirGF9&XM<=h0$-E*I^|CQ=#)UhpH|UxLcH5Snj4n5m+j_6fldtgg(zJ=Z ztcm-R&PQnJrnm3>zVdNM+?rj<7RTRyQSiCZ5a?&$^*>_UPH~pn6+$dkoBrREh$wqk z^6u&)o08a#5qG&BIkS4Zt36ds|5@>}$iPkSB(J#hW3koUIqLrc{wJ-7D!F~JcxsGH zMC`$Th3muo_-!{{=bQOC=>Lty$Adowb95_B%Q#B9ATUt;;qI~uLF$^y-M2jQb{KI{r@7nLc6tx=B?R3@%et9@b|}OWH~QS(R}1T z*Kq$NlNroWEKO1gWe2Bl$m-vG68OT$wC00K*e;IbxjYIhuO{t&qvgqH`)&J@3GE%> za*O6&FywmH=x)8)!?nb#r;7PbU`0NzXjLX8O&gI&Sg%q};yq zhZ}RNG_G7rpPtRG)w2zbkxCB0srbIGTTr zA>$E`oVjO}?e5>2|7^z-MvuT3`HjaKPrR<_3w+&B`mO2oyqu2{xAF^y=S4L(giPyX(s8O-qk0`4SNt^J;7P56$`qizjzf9b(!1^x4yhGcyl(1WsxaJigM$g_q;U zkx$a1% z7Jnx%Q(JuOM{A#`zvbP|lYxl|>n5(V70xP}q&DB;h{#jEi>D5IZ+~}0_F2B4|IPPz z9;-{e=(AY7=RwY+pYxCW+OW!DuchP~pPT7=2J?cg=PsOf@WlCtoA3JRY!SFta`1~+ zZSkI>CA#60>W+G6ye`?2FPLGxAu;Gt0N?&nr}>2|H?5Rgzw-Gq?hN~McUQj5zen3& zt8Mu|VfH2eE50vF3}<~ySU-EW|F=Cmf2X{ky<5JT>p)TU`?g?)V-r5HGwsQEx^{D| zpG<~QTI0pKYYD}Ha|;`ss@2x4+@Zv?UMu<%Z`@ZeYn!0ld2c73`^vZ9azWI#Hy3<@ zT{IM%aDTu3gG=gdmC)`xZ6ipl+OOO-&(Aqa+pV6^bRuD? zqI2~2O%VkijHT7j^}llShz1yRbowt_-v4u5MhD}A>w4-JCbgZq5Pi-g+~Y>y{d~Qh zH_f*3F1n)|p69o|OljNisdN77$Jw=BZ+|0WdF8>odlRdo^1T_{7nZ1HW-eY6ev2_l z{4PUo`lXe-c*-mE|JANAezE@4->vs&{N}bg__x<@gOk$PX~~5#?RBfRDXsX(y{#(q zrhmy{#oz8b-v$f5k}s+Cf9dw6FVC@3DS=wC1O@g!?16+Bd5!^;B)%F5@dbyG-j!!D|+yXYYavXYUYSysMn& zwRiU0dvoT!vd{nF;m==h|Hc01#otqZXMZzZ_g{XlUY3o?xpiAAv?Jv%Se}bDRrjwpM(y%Apg5UEwz0vnIS~%GjgP=;v^1 z^(jWB|cS2M=;`S|=J)=x3J~pM!Xl`En&p$3(wm7WY zx@PN*4O0$HdYJF~cF&?u%^z&+1Ai`@u5WPs^C#DOp=YTVcgV~*^6)3; z-d8dEYVTgHzxu3n(yy5HyzSeBdg==GIC#^JKH@P5wC~kpsCXn`p}O}}{LUb8uJnFA z)&F~v-n)CtinX5(`(O6-@qgaq`-&{m{@(l;duZcb>o9AFxR_%`cGseM4^F;c6c!&6 z|F6nf%U94#Sm~?s4yRv-Y97zOl6JKtR*_fL{=(m zp1!r_|L;=sIF1PmTz;yaJlD5M$Xn$CgVf#LcW#R}p6l!XR(I2)#Sy`Up%@ZA$s=tZD!ldwr{&}QX{23ah{qE$NEDSb9)vV zX*=crd2!Le`*@ClgkN{27$2LCl>enQ32~E_w1&H6PU<#VXYD3XSfY2jM9%Psz=QDX zbruIN*?!a7*|o{!pxTz@?H7(}aQU@<1TX>=l7|{v8B2kJ*eV+`JsaJce&E13=b~4 zKI<*EYzV*ZIzu(C=E(fhNr^>Im!CA)HQ{MpkC6WC`4!I%5AYvS`qJHKKa;QRo<-O5 zR~KjW7Ye8z4mmVQ;n;=v))N+9dJAuVx_i{*Oy&XRe~Z-Tsa)Jz@#)1xjamNZ69w${ zO!ZgW7|wG!N2fl0p_cV5u|S=A(T5dAJxO29LIt{hs(9(mn7&y!BmIQmoyqb2alF6m z_rCgH`~U6i+*ykEid~EjXzacx&cDSd&Td+Mc|X4{Yfb3QZ$(Cd>-+n3SQFN`K2zOv zA^YFuAcNV@T6Mn4?ThX@(YeC!gkjLWdIh!Q{CNj#y60ED-LRy@HSphHwvQkgv{9jk<}AO!5BU12g5*TE$f_9N=N#QuthQDlIPP!^V@D7Ns@phIOwP z9F`xK`MAITfBXmgx;LuguTHb+8y=jV&h(8_iFfy7|IIwRn03`Po0SZhJ8W7%iCDM# z2UJ}OXkc4@eXE_X+O;^_N~gPz>Q|WG3V$=>jeyd(IW98Nmv*bnX_V+K>ec|ag;l_*IZ(-&;lq^_uERWco%Hg}2CqvR zPtO$2i?!ObX6_;$rLNK_tIb!n*b{w!+nQDJi1oDNc8QKz5)nb7$_k<< z?5}I{`p-6GII&;gaY2GGV@Xnbmhy~A9=8O&I@|RRo1gxvvhz}xgir8eOKxG!LvCGe zJkLA&Kh-M49dF$4$|CmR<!9voNCwI z_DQ$aJU+g1V@r3ucJI0FK&^?Ibq@?)-Y%}#ckUi<`^0{3H9v`ysZ}SZ@7epohAG$i zTw2J3mabdt?zsm^w(L@y_1VZt^pBxiaLPm#osY5dK6V=#nbzKx5j*$qK>yp;$E!cO ztz}ENA7!=k(0sSZ1g`ABihY5Syzf1d^|h8B{#a@y7uEeaeCj7ojmev4{}8=kx!k?q z!#s%VG=u3T#{helXwIahP`3J;UaYAT4}6<< zq(iG|f6me+9U-honWH21szW?~Wy&gw>pskWCn&o<8`H!bOKaW1>(tBlGba7H@=EL;-%PLRysI#w%FgTlcz9K<6#!Yy` zo5?F?@c#*X5udmDvx)2DMxT5B7sMPR4=uVO`(SO_!2{MQeBrAKLL|i)WKvc>;+XT$ zyXx6f%NaahZeLxnVA}G(Pj&?rv6>Z&vBf>yd8k0&aM~q_PkiqM?5?@5u9~`}mDPGx z^%efVqJ5Y4ax_N#J)`~SqC$rQ=i6)6OL&f4eid=fB9X(zZdDTF+q3fz^cd$v_=z&- zL@@4Sc3kl>Q(j>6%bWtc-bV}8w1qIq*1lz|24-{_5Jq?Yu;@ve?I@$pZY(l zF=8Ly&3L-Nhk2CE1Sd>c$PcFnv@sLit|%vURTP;F#qPB#flS^!vp!& zbN+P|GU}WaJp29P=K=}Ya(d;DQY$qQgj?3F+IsF@vC)GG?s0vu1TuEV@%k$WWhxaP z&zQVeK&<3XqOk_c!N&3g$GS>k{0sh5-eOJ}4$ z{=;;NcP{_Q)Jf-rzC}9hc=_aR?l0G~_beu*ZV8;C{J3DAL-T%B^_0Vkr3){Ih_YAY zwAIZu_;@*!DM^)QoA;&TGe1@9966~qyI`@BjCOs@-kpkDzSqrCxpC?J{J*pB-)t=x z-L&=m!?RNDdmH{)%y_5#PR7M|_S4B1`VZV#X)V{QdN<(wTBVprwb7YdOc;0F4=I=S zexH%>aqp?}OX{np3cOydb8z~f{q4o;x<4zLcDvqmzdoTqV~XZajf4nRm58(rixifB z4C0<6&ul4@a(c$*)SL~eS8Z%AAD#PZMM&_8_#>jF%?79Rbj@C$yD>TIx>r=+SFykk zl{b%yEH9mKe)6H+V((TJ);-;xu`h4kw;M&;U(dYh(|hfod%5hH+fRkF+ZW`&U^Sg0 zp)hGrgS?4Y)HDy_&?A=$7d&c+p6<7Oca2Ax^j2HH#SH=-eX5%`mVRTbn0oud7MIvc z!I{1F$(|By8^jbI%FNjleap4Gc3;u|9qebWIVbMe{$44J!Klej?<04J6!Tkc=e?Y! z8XJ3$AG@cX!T5!vX2mt%0Hb9Wj04PVE=*`Y{NfhFQTfcQ{n`h1{#5Df>U(T;_ww1S z&+d^HE(<-TCT0}fIjnKITdqtY@v_U_W%qArTb^jkv^v^4Kbhs$o|`|;DBe-X?s)!I z{j>n5WA3ge0vu<9S~iKet*>La$5dvQUj1}d+|{YCqMc83d??GgZ_LVH&$G*=V^{L> z>~sB^nb~tAJFh9@LEPLrtKG-sEtLwlGJl6rT$n~lUKpXWpO;YMS_9HS1yjRKE3h# z8_i}>>kgZ5mj!RgZIGyR6jarxgqw`bI@5Y16!57#VLyy~a1Y+(r3&py3CY@i&wRYu}8?NPk8CSku zX1O)5&8l(D#hg6n!wc<~&J&DWGx6!9)U?N!=4u?$@KCGk`Lt48Ui`9x*G|m~6BBh) zBAZ`)?@|i>W%+Jdktx3#cj(>cXO}oQ9y&ap#u4 zb5zP(s`wk<_j&n^_Y{0>EZJMCD}H`zeVW=@yJNMOE)fyduXyd8xAz2kp)j zx^1(rWACn*lolt*R(9#Zr><#NLwDag9`$wuWB1#&Q582=vCj4kXe`;ZU+L`vXa1jy z_G4f=MZ2dK zoh+)*Hd|x%si%6m)~AA5&7GXaofFlL@7H;AEJdiD|JHQ=)cCUR;@?yMPrsWg<+R&u zZ;tde-H5Fo_O4eu${$$t?$tT9|JI%r4U>=B{O{^odrSDVn`da?d(Q4Y9=%OkyHCgb zI@hkkz0j9SZt=xZ5gU`&$M2<{IQIGEoZbTx^UG!5{e7=}y#LvEaX}Mi(K4pT7n5z? zZJPdnhr8Vh9WE!<{OJ2z*1H%?PV1HC*tERH?b@|#eeQ8>vs02E@VsH3>!F}rETPI6 zrM}|D*T7j)jA!m7z9_mZ-hJhl@{5V>ticjSM_*msw{Y8KGild<9EqA9Tn^8D=bQUX z6bjy=^QcnX*F-}sRp)u_^ev5z4Hwc`-FJ2$va}43wM;vGtnY(63%7l5*R!g)yT>=GduhP$K2?VBD{{=qB^n2oEOu1)4~Q(A;kPkl`tdn)=AGo7 z{Y%FzFK>14r6^gxv;CZgGLq`=PSyy`TgA*NqH#ceYPzMh|6w&+*Wm20wPWEyUr zS{eK;?slf>wgYRqY~1$G*yP11B>n2?hcDZE?UW)DO!X)77)`Gevn`9NTVK_j;yv}> z`pxtAGTmcjU%i>((p;@aKmJNAn`Rw)Trfe{KVX9i-;ux`p-FcfJ=)vOhjQkW`79Tx zX#UZ3c>NlO*P``l{b!xJ_A#=#7Yd7Z%#YOg=CyMBpNK~JFovg^r}|xvum=gJZ56XNf2dzBs34N6XLQ0vV*k;MS>5~EUZ@?mQri}=^-tyZCI9_2PVBT< z5PUto@af_SD__VbrYGt6YVfQ!O#88hkHy|8a>AZTOK#p^uM0f$c<%Eb+l^mNI$_-O zV%3JUmSv6SZLh4V783dO)#~X2zo!w7_blw+?XRs?>Z>c+eeH(k+v4a8N3QTQ{(IWZ z{$@9eUR8Zqc7vF-gLOiznd49ROub79a zmGADue~(zg3j#!V8lQ{a_VYiu-n?)AtlwhxzItU}gnsQ?%$?kw8TV`V=OtVRzHffL z?d$qgQ!nyg-uH3U=GZcZSKHn-ini@k>3ZsuXZj)k=_a*pQZKrnt9No;2NdOW?|(!`Z_6$EOzgr9UlTJfvLkgXxMvfXXt3MTPzo z!Z@<~!)}Xemi84cczgKt-uBz?XEE%#71r5QS0Al<;mo4Hf`@A_w(%Em-aY6zHT2_| z#WoLnPDxnRSCkyeuTXh9Q*dFxG~<4^@&&V&t@>DeNP>?^s^ZP>ty6s@!rlH~+{<$9 z`-T~fwTI#scPMW5`u;wAZp!teZdd)*Z9D67q5GoPyei|E8yhD$ntq?k8xzCo-X(iO zQrMbjBQM|i!0ZEie{NlN@KT+aRzB0l)4!7RZeEx!^@^9nW|#5wu*n_O{@oPEWgbt!|%{5q0+8wal+yd^R5SD}DMls@(Veq3kQikN(-za9L~3mf5|L z|1V*AvvzA9>`s&-TsK+bt)1OnLg&W|JDZUvgERC))p7$S=KYQPJ};uH(dw zZlQM{zjE!n@cV~cytEZxotNbM9empb{nvY!Pr0c0UCDd-%YF6dsQse_d$e( z3y1cM&SoWr?FIW2V~rdhdY)EGP&i*wz{~X3PE1Jl-t>iUvvkhRIId#8qD+0)``B~q zXXs44;XHTaagMkgZI}HL;q29-1ux=xZLKcGrm;CPRC3G`*!lKj$f8S)Gn;3yFY-8G zw0_4+hl6i8U1NXk*&vaBm z6A+oZ_@R4?&YXKU--K=W>X##^@NE5}l3AZW=TWP00#LxfY(wr{2_0Wre@awa_+~QXYnq_*?_0qC>hlhv%mbbg_R{w4P zPX5jOKetpW7b(W)6&w}(EuHh`>3?fpV|{^@n+?uRyd^Y&zoA5X!HPQX<>GZ&|AhXS z{PeL3-R_t|RZsabUzU9QM|CWp^5;vZ;diPjJ*DV1qDpT zU%rLBLXSVHQQKa=p9^dd|wJ5jVaWcoVt^NC&B1o$%#&(EuCBBXB_=o#Ja@L z%pojjb<-owi*)dt+fyX7i3v{mSi2H>X&|T$=2Cws^-Qp}zU9MU5XyrXQW5 zw)JaM&aSJaPv<9{`F-|TgOhu$_SQ#LqUsgXEaSCbe_6fS;Nk1K75%e{>?hRy~`E|=!nHS6b_-M0#!3AwOS%>E?H(iakHk|6N zl-XqQ;GId=k%fXy$2LuCjoYI(`FK*d%rsUnj%y1n5wa%txW5X=h~Tu`ktY-0>-0?e*4j?!D7Y_qSWLT}!!B+dVI5cT3d4 z$$JB0E=Ddt_gn9%>?!$g7SG()N_fpO4$Yc>{r=-J%Wa!?f2{F7^wg(ApItxxMrhD0 zFX^cvVtdTxcTSbNlG)C&Uw5;8>G##8jK71t)|M`7{8Zlm?dCl}tH{#YZkJB>OXi;{ zPrb=+<@>-Ak{u<``hQ8g>X!gF@mHt1er_@Q{`$=UZ6|~NCG32*lmA#KJ$^2D^jKf6 zeO2tPTiqhpHZX89h#M#@k}$m|a&@lj){`^E9?Y{#w(oytzoFTLyP_&_OX25L)|>k? zkKCw?>ShC=KQKZUKY>#Tux`~1nrP(W{uK6r})?~V# z@NcU!KJQ<&{ zMA`mL-+?KDOh(_FFMv&EPLrT*GU7J8gd>?}2&$KFn5r`;TMd%J2V{ zy_mL8Gbs&QxDp>36R^8eb@53Gop zd12+1NoQ`nHGKYmv-rEySx@?BW%gvusg!(os#GR;M(2iOMU!J>I2j5w^xQ8VpZ?NX=mH|ZU5_zv;NZ))a73G`0eq(d;i`oa_h+S z`>^EEqn(xBoZ)p=ulT3=PYnBZ`b@~p2lDxctPTj@Jz9Kt?c8Z@fs<$a7r&8^pLkYp zOI}pM#5XOXK3(w7KM|;(L!Wzm|mWG`y4L|AX68DC4Ey?-TrL zih0|G|NImGHtStsl+UjjQx~=7i+I=0%sjAc-#42(rSALk!p+&slPAXiI>eszb>@2G zn)s+2aW=v%ORQ`(5qbIU6LSIIh;#v=-*=-zo7Xjk`rK zHpgK3hv2Ba+&Nl*ZoJj{vnFkoklCwcTIV`m@t8+^^>o_3wXmCE@-&_2Oj=hDu>RPY zU9#uJ#OlCf)3^6OtGjU4^5tD7mOJ}reGQ1Nytb>H@3)>{u<&k{`iEg6%kFPH?q_$S z$F_RsCX?C~oIAho4LzdrbbI8UBb`CKj;p`#sp&lSFT#69&=;2jEunXf@2{Ql$lWjO z=9F1_JS>?)C!;0Vhr}m(TQHwBy7$Iw^^p{9%_EDnEmocP2n$?r|J=h(i!Ht| z+$nLIzVXcE%w>1aUOc%wZ|aAz==xQEeiU3hn`^wr(@{5Q^-b}*;8k6VVwTLhq48t& zvtZY`!FQ%8=?UI9`q}#Tgrw`A5{+FqwLD(0H7W24zArYRlK0#G4wEa1nu!_WEpw93 zSSajS?Z#fi9B|P{Bt6?9D(z#;{*B8HNri5UXnd;uxk&u$I;K~QSN4QO-VNFC>QYJG z)2$|_JpQlAnk>2Q{^o5K#ZQVAosUzk{+1Y>2c3{L`C4l9?AiBob8_u|&s#ayXP#6{i50dHcfI>-)i{a5ZwtJWSkdA9w=s4l$PXn>W`={?2f828Lm;AS~ z%=7RH$PARFNm+%FLK~?dN0Gj$JXVqm$E%bcopyVanJFM zKLtMsJhySySa#!Z;`vCwO4C3`zMr8sQME-gvgbXTl;ADu<)1L8(_>lxREK4}Zy&Vi zUA*ac+3V5*^}^WD=?7H(???UI#q*pYWVcS&G=V8+S=x^|g_ffYcb=|++L5zMWf{(zUQ$|mk*95AIb*~Do(h)9VIB`} zU%RBP@pnVaS23#-Up?cWXzCyA^wv2&LGkLgWx?CN3P^>^o3knFgnapx(sViS83+Gn z-^ERneh9UD-?*Lg_Vca#H)fp(-=Ma?(PR16s}UjRcbR94iWWxfJoaOsiNeaoFRruJ zwwi45^*R@Dw<7*}amA$YQ^&M6C7od0b}jPS%=f+;8Jo{+>%6LV;Dg|~hXP_<#pm^% zeY1C+S>RsEzT^VWv{l9n51F?pZ-03rrWl3=3SL7 z-)`QWbs(s1yVjkfE3baoe2Z<efZ3<^V)}G-?)nnjjWp2KLp=oj<6wCeH-nbvSEvJ6Uox`E~OhaSz!$v*$* z^tYW2|8qx;Gfeih&FxFsCUVmfe|x7~SX8zzOicGrgv_(@^GjOiw=cN7^rQIprRQ0T z8m3*{Uw3`lz6CFgcKw=u=#1=)uNAW-PI=^3bJ_Q1h2+++=*!M{;2#ryXwT}RjZbf0 zy}JAnUwXuAp!^X}6x_ z-0~u2?%(V0@69)nS(xeYcmAZ%qz}8g?30u}{+WJtLzmGz|1(|56XOi6mNlFVudi>n zw>r8*@o1YFOQ&Dx?xu74rgpa*rp^DnWS>L|O@zs;!qEp^-0J@fvvOS!rl>bCz&wqJM~v~WwCmvBu(L;Y*U%Rfp2 zk8D|bP5gblvrjoU!}i_t@7&5ZzQlR^mEk?5z5f>9TiNS-J#X`|!rkxB*+;HB{7hrv z^kYYF$h7A&AL#vD_Udk|(*eeJ;(XJZ?&lubf7_LD>&|H(`-=}Q`1irDQ0Rs*&kU!k z+Q~kplT7)rBEBUSN$T?i3ktv8y{L81&<47o3rba&G}xrZ&z<$_<7m=aQEZqUY0Q4ou~4d@zTxHrZZSmF0C#&9Dg~T zEB=7+EX}*?iJ2m=c+} z_0Q+1+pEoXuQ{5pCcF1j&((x`&UHVgC3P%IIO_7jtm)a_9o}L;rpZn_QzL#c)A)#% z(B^3`mi^|H5}Lnf^>6z-9S%z`{f_@|_krRCsgD63w-=w}V-oHXlj{-Onw@v7wCq#f z``DdIA%~xzPV-OvanD5WQ!w9eo@;6gv!#4C`vguA&^!{WIWJelEjUsqI>zMe(@6e| z>+{7F6T_^Ze*EdSbcZhMz8A^cR||L~f8#wL^Yh4uTAi*#D;$CX#X|oI|JHuEn zwfE&*{|{|08C8+Vmu3fvY81{W;c%P&SG{_h#*r4Um*O84ynb%A{;h?6POhob{}~qNE!Whuu}N*c&{BEIvVMcGU0vSxFzNH+&$k7epKYJM zwDm@U?7dS=Yo6u*3@S^|%|FAGUEo?AaNqw+@%H)J-nTDg@n2SnopDjSe51!)%@4nB znhO5E8Xq6cbI7A%UUWlf=&o5@Rn_O0*F~%kOcglujaTpHzdaI5zgNoT=jOhh@uJN= z*XW+Z%!6$AvSW1bo#J8sa(ae+?|JrK9lxs!7Q5ZQBX9pk{tf36{jxsIoOyTS_;{jD zH}=OzG1SELex5$>N>uv!yS~k5e;&Chxp%HjWO}Ad2x|l1_i5o*Gp-kzsNFZZmch-t z%I@xEuip8;vU(NOy;V5^Z<(t)tlRVBUuhkSR_h`6ANv-a%b&=speFFb`Q<;B>W%OA z$Gpv7t1u@ouUlH?z57phk@YM7=s(YT63-Gdor`V%)n(u9EZ;_7>fD?ecc(M(9&>~1 zEJL#ew)_4bEWcfJBTe=g-<5ACS8Q6p^isq$59L#pMcn&-FIn2~p*H-N)020b*8Pxm znXY(0*{)}u^2VRD<2ti1-?rk&n0D$*@Atj&S5(-;ZmC~-ds=^U=n~H3*Q>Jf3bi+# zXx}_Bp>BS~zP4*WZyl?QsK{1uZ$JD(s+{56@~@}&Uz4=|ecZ0IdS-oLed+(`z3W`O zbb=Jbj=5V%e|3Jfi*@m4u|vSI(MMSVfUJm2t--ns(L?LtvBGaRb1k%-~XZS_)K&6kc{tlw>B(|U2k!C^UWk<)&~m5 zly@~vWZ5}|dx4n0^By;$x{!oS-NziukKB>#v|dxm_xFse@1X@5Yi=!_e<`xUb)~7N zT4Icop|XjpxWs|8lO{aB&dRLrI9Kr5`upNr!kj}_Jem8(zrSjF`+)+7iH;7flLWq7 zIJP?Q&0X|uTDarVJ(rnGrJaA&EAwSVhsGJbuh7%5h@7}s=8Z+t_2VzO{&y}bi7@-! z^ZRX9e&-a|V+jjny{2*%Z@)Ob+B97lpo#2QL}bb}Ztwy3|*ZadO)&7PYf1 zNzUK?9scN9U$CLQYUY*3#<)!!Z!gT-CQuZX!{8CKbc)R@SGi*=OdC~JKdT9CzN2}x zW4_{a2s)nckLI>ZkeIW7X~EjW3Q@&N@~l zGwt8Q>xVTs*e~$DoM^fBc(v1flczWLC9Y!Qt7SIy&hwigB>D18xWdYe;16OAi>k%u z=G890Ci7(F;eI}g8}@sC7Gzc~EDvto6#8*X-??KUYD<0NoHTv2i*2O*tiK69yz}hc z5p6fUXPt|+wOCCe_;-7}pZ_#>YQv0}n!TBJ&jeZwwH0ruvt6%@JHq;Q!RDJ2@|T|d z(|L0flfbQr8Ba7$c|JMkbj#g6@ksh|k!+0v6NDcbz0dyIoTR13FZ;gMSZq}-``k7C z-;_@7;ms(1UR;xWHn0DtL1E=drT;>korg-8Sj-hn5dfWb73}-eQHz9?LIMBqchfY+sQL(!3!4l z${RixJC#0*zsE?jGkaZ8f@Yie)ak*FRfk!giRb?;UMmp#=2$29F@_f_4pmLQ$FOJr z^#f-m1H=P650!4eT{CHwT-CbHu4k8dn%IrVAf#T6RLubwytScz!ywOljY)Ay+VRluTT1C3AKTmQY7KJl@Y@8)U# zL0%4XZ!L?Mp?#@h<#zXZH$*4D`YvL-y2<*}$tGckF5leKKX)rW`*Ny?;heK*A>$qo z&yUa4gte5n6fEFn^Z2E*_qLjX(fdVC38^2B)=8)^gllwe#-VkZXsyweo~7#&UYcOpAGR`_@_>IX%6V$6G4* zpWE?xUPs^)VJH8X7XFv>N+&AJ{jDdubDFBeL!C$Im+GG#Ix4y$@Z`m9Dn-IGgx+in ze;_tbV*96)zp9Fg4U*=(HT!L3UX+|RC;sPDU&+w7A`2dhZIkR(4qWz)<>b-hika3; zZrk%L%L zT@D4ajAkf&+2&gFnN^hGp7WMz4*VX;i9VXwEa!Xs`f)2}aYUGGH<3Cdu*HG-&z;ou z8&|egThHGX)s|Jamu+6redm_=Q@I`s)>?j0d1un%X|-2kqLtCfLi0SHH&;8q?Damf zk3GN0&UQ!f#D&GRT+5`dFyA(x>uDuqchu0D{nv#AkFRrYuv=*MJ6})8kLYxBH9Wa} zzTMu2O_z&p)V`XqF0pehVLuV!->mU{xn-Yi{ja;;bEnIkG702jQ;wK@Pf<*VHD}|r z#%|MZYwRYLPGYT;=-avM=yX+uyb_LZuTOXVo)}G0%x^r}JXzp+p#JRrZvP8chJ4TX zZsbuL^z6_Arj-x!-b$WRe9Pi@^5~r1Z!F#xE@yf=bFWKtvD0hjLcMnACe`=a+_N!ioRyPJ!ycDuac-LWH{@7DVZ zHzgi#)hXQZdFC;W*T2uU*|1%GuzQa=^W5*9)tO;yj&03--11-clK<7Y3>hNkPaj3r zb_l(-_WdWQb?t@gBO6~nzY>1qx_cAzKXRPkV9(lX{7|ODsPDVQ*=J?)a&7)CFDhC0 z&AHLNMJ3Hz^M16KkW){|le_PiWM5`F6Sgx$agq1jSC4s`~uz8Ogl*Tkl^l zSl1bK2*% z+T#41GVX77$&1MI^}HKgoV-(OK_&0s?@{NZCVn{{e`Cvr&%Zh4+ym}U`)xAc_3&=i zjkjY~u!Q~!?EiRt?zsx#9qm>x4mRpryfng)d|6 z=DTykcD?`57wi`C`DSvZ@r&ezRv!-Rxv>8VlbM&o9a+ur$Gg-nKHT`!x=(wVjQG8U zzFSucPyKVJyCHU+>$dhKCxgVrIeEhUE*}1A!m)mynnIn7?Fj+?_y8pT{Pq1i|AgFRlDT)uA@cIA8)@H zu;j_X6Ln5UB>AUYGmWV{qbTp&tx=Y~_=J4mA8xmgp@+A9J=tQ`U*=zTsqFrR?RsL2 zi|19CDcoLk<--d;tsjcp{QTxF*4cYvkD=FE8P@%u%fA2EkQCA}Z{dNhB|F@|o$kA* z@bbf>(#`wh=Pci`{0>XGb@da2Li_8@De5yMIJvIOwBNd)O=Eky=7N&~(>^XqlX<;d zv@|oB>(2UGvmN1VF(G$Zil6j{9sd0_zOZ7c&UH4=dHiR>XFUEZ)w_84mgM)d)$bp< zkYK~iQh8G%;OdrbS9tqbR|GSxwFt?NR&!bxzQ;7pvTU}|!k24XCU@R%>3h|*%PLFY z7t@^wuWu`|XRqs-n}0z``u_T=uc9I>2isECZMhpS)F{ct{-v(L-`Zxy(eL>!e^UfL zUTWam-B+2BHT46x#N7##bHk)xwrVR!>I7=VtZr;Al(FWGT*8;@6ji}9|KEd-MDy)! zd@k9|AO0xLVzErg=9im%@7kRt(UVb&r5C66E-Ffp*T}EK;{$LF(pOgYAz*?CUDu&edmngktdD_zE-#^UgHw?Z|Toty_cs%1=SVGhj}Lbh*LFN zyg%P%hULzp%Zi6{E?qlw+)ejfO|p%|#N9Kp!#^l|oAe^%jjzSY%M2fm&HN%$oPFhZ zfHkkz+&2BETe>%Ye}0)eqV}HuWEY7~6*1+rYxQc&LU99Cv z5XbgDaqds&xCI(!%I&WB)FRKkQy_f*1x1^kXBGV(Nj|?;=qz-7wxi&))-L8^v$()b zJr5@Q>u5bNVSS2T!vm&>M;e;HyrggP|IJS5JD%8J{l9M>`%5Q-uOAu<%nfq+d^%#-Ph%{b4lO;A= zF9xWvO}PETS->kH?vn2`MLw~t z+x*a9E$8v92NqMB6*Z5mDM#xwL^*vvYw#e3xs#={$MZ+njr3 zj|;pyWb=BP-^NQu9<4%h35RACc3Lgv*AdyUd=IX6nQ zx3(=ZI`a9!iQtec*X>1>W?i_(HSvDW_xj?gFBDCrt?kz?xh=5xPTcN?HQ(5;=lcYH zNRaBQyYY-AMBq~45+x-QX(g?vOCF!(POB*LcI;1Fs3RpC@K|H8*SZ29-s&;~`@?Bd(oHr@ZLUGR9O^GlaWsy|g%7v=@u_N~oU-`9EjN#Em#3q1my zoF`h<+z7M%_r6?Q!J}b`T%GE>m8O#3Dvd{z?sMzR2>tXi<$v+#j+?@y0iTxn zui24kptkI#TA@(TWtAKo&O;>V>lak)=e_j1%wV2Df7`^GxM;->8*RT$oy8}s;(VE_J+S%yU2o~^ z@M`6(dRso3TM;XlI~;%0^)s-Wd1Ar$z6VZB7jEKL<%VhXMY9S* zzU({Gzf!$g{t;_KKzmll?){rJHty*!e6%6KOl?~_<5JaQ6@hpAs+tW>dXyblzbe|V z&Bx5TvUAXx1XEq+#x8C2m zAow?f<8LiaX%_(=cLAQwdyJhI&no0wv5)(YRzcpQ%CxpVCMH4O-B*7{+Ix0~CC*BJ zelukA%}n8Jg-4=~!<9Czjyu8mu4{c&U-v0B*@ac-`X`Fcyko|+LL_nz%cl!d{!E^* z>y6glAJ2JYUW$I0DJ|XW#TEWsAo9Va)jpye%Gc$Un?u#lUSF~I*#pH}$OrN{NQ_J8;Of(G%JxzP)zE&F1>)o1ssI~p#g$q!h+ zU6*&5BD3hvoR)(ITaLNO9q*Fc+kIEr z{$WK+mB`d}sTx9QN|%_mlgiqx#HWPZI`)A5x9a&7g<+d{S9v_G*(Rvu!Fnj9SF7Un z1go%|!b^=)E(x?~$?sqKQenUH+wgUs_ue)r8|PU%c_^;>v{ zdYOpGUrtoK?&YT)(mqEfa6*fjX<+w79&Qd9h6j_oXYo!s_WaSSCx?G;m%k@7`LTKX z`+Yw?-Fvt@_(IhurOC3@9niHnrhDc-&r zN=_d4f1Q(z3c)5n>ZH&7z|A$K-BURpg-T5-oBFE6jX7XR| z#|>9m_ioJ;nfc(@@}C{t?iR+gzNIkvy;bd;#CfB$DqHOUQ?H}AaDUVC4UMWx6rYi)oxA@T}R=@0iJ!q^Qe*gP|o2H@;{p)b+lxT(gd>~H<@lNsfw0d z|IItksH?eCE+}-jlYF}`wvRQHHB%U>r#)A^eePUWrL&^rjHlQ0r{@+0IvzaZnlzPR zy~6HpXSPg!t4gj(oQcYM)=CGH(}cB|>W+EM4}LID|5~hDp-tzn>}=F9 zyys)QYwH*3H;x9JN*hA5b-IM4*5+Wi%a(A{dTsOcN?Nt9M&07OJS(4GRbZ2B zdeJa*RcX{$x6PMV#6JJCYvuLVUK?C~)jo>i$xT~6wR&32=^rN=JeFQs)+BiKQQM*W zcmJe2Cm&l^6=0dnQrxV|KWE{8_g!C@wy`FsTv!>!t*~u@edfFOD+29uUgJ{63rS!LbQU3%IuE z9sOD~M{Tno%ffRHE~wTq98>)$tKj2tazbptennyFm{LjQxdmU3HeZ=?S?ojf`!t7R z*F^6y*lk(TZje-Ei^s6zQu8I}|>MdhWEkA2e;%RMu0r zCZ%Uf+*;O8pYWimP0#IlmdL_7mWd6IP5*rLzvP-Ct?Bes?}WeMO4Um}dkjwn&1CU5 zdUUl`a^ZuEbIx+!dljnn=l(>|Yg1EPm0g$Ju@Tm_&AfbT?WF#ir#iCpZZ~>Fa2W}R zZCEi$lkzV17YtbxWY?gVXuq%lO#tB;Kh>j#yMIo1@;eTk+65 zao@wH2lg0t89RIq7F&@sV|V1k)UjM|K-UgP% zzhJ!dVt<+Ik%hvYr&;alI;U+p)~n@VbZ6yc(@SgPPRv*xxchtH%IKR6cR9os+g3!y zO{+emkUR55&b7L$=BG{MG{l%aPXrzl@QQzTeK||OxpP<7C1q*}F>bl%eR}>M;JNb6cfK=zl%I0xG8Ar@va&bW zGw`UplX#Av+=s0y8+hM3tzQ}wIH96X!tP_Jtnlq#=DdkfZkf@XmYotV8=1q_#(Aw& z`lil%CnT`Y@YS~6`|m4W{`s$KYrwLDy39uoZ1H{2bNJ80q|W`*uIxX!#+plkQGTWD zbfNOA<$8YmpXb+{IeS)|^B>dWq#Hq>)&=Zu-Ls;ewY5O?S9iS9Gx7Tk>XYJbaCnxb zo-uZx`QX0uqx}n4+~2R(l*s6l==t?yO{dAGU6B)?to=2lDYx|F>yX zn;vh}d{meIKQ)&ly zPIggXgI~gIAAxskdl|bw$1>Hv+`i|MLHU*z%3=oi?3Sl${4M7>e%bMz1Q4U=Zb_0ZCM!iD1u{Gx%Y*=Vbz`& z=EemEoK1NYArN*-*Z9fA&tEJ=EHXD< zUL7nyF(*=(M=;AxSn6HU8Q%M*@%_ zsLt2;sQL6L!-1&$Q_W%i&C+7scSZ7ghFq+*`O|>VOl_ME z_4I?OXQic|SB0MKh~kr|R&-i?d+qrj)bnVp%EvLEz_HHW4_Io=) zD)jy339$`5UCu6l7F?9lKbq^i?C+cd49rgDA`vnF?lVs||Eh69F6<)9&vmO#dQY5@ zU(K0fFTUS?2JK3=~@o0*h zy+PR2^B%dCe(C>yz3e&nc4qo?IqQ}3{+*Hd z^01kGr_YAXkyqA8YBRgHzpu0Xk&q<%?qRx4U2fecsY7cFczk;m&-{5`wB~(g*2(*Z z6VGpY&F*`vc!hcY!VbNLo4VSMj~}VmNbM2&+VeJfN&Kmt4+RtLW;~6Jy8OZ{eF_(Y z(X|tgnNQDuJZoab-M>7SKPt~lYGs!WT`S$Sq>OEnZ~hE8%~} zEWRF-Ei^yp+}XdpFkW@RtK;mopNtT5P!51gK-sk9eH05V#9P7UChG`*xnkOe6DD*sRpi%vO=Y=J! zKCGMgu|a#)^7r5GfB(5COJ!}-t|^{6#~1psy2%xP$Lv!LP0+}SsNMqhj%qkJN+^n~f_ zub#%q`l=nz>XKQEkDO)7%k} zHU@`Tr{$gR;{1>*BlLok=i|j~HoKnOn$d7{d(Xz}pEn&1j+uPyn9aXBCB5h0v@d>- z$lJH`xzqe@$I3r_+pt37RJ76ju!YYz+pWkqSbOJ~Pi62@dW5F&|2O)bzC~cExa8{ftK$}!Jqpb` zFZJ2h)a`M&;PThATLWLzcipn_(fJkQUbEfmQRt_ipP$?PJbV0d#+A&2?t)8}$0Y0I zL`bFdG+KCNd{mQ>KYC8b*z$DCE3->n$K&33c+X_AYx?u=-nHraLN>D>?BB;(=XEsm z{^<`~t>2prJd#QS`|b;`caAL(V(UNZcksv3QbiGQEzPxB`tC;`*3Wv`wQ7z2`?p`J z_O6<%D|))!{_y9u2K&#SdcNva(z3do*v@3;Z5x_fZYu@}r~bd`a$^6b=^_7DpL@Qf zVfWcL+qRW$D_bSjXz@nv%(6d1IW%1F*f;TG z2gd~!_TIN`CyxF0DOtXIW8}OS%o zooiXKR+2`?grGME9~sxYe^esVG9@B!&ED)n&AJ134ZE+G%~^Zz*S5_&H}AZA^JZp# zPWkPU%ca|^uDshJyL$K5t(FCE)~(hy7JXm+B>m$NZ&}$SUP1LA>PJ>?KCHamdePNl zv+LE-3q-HnjJkj4h2^x{k^#Fe-n?_?=B+oSb9K{qKhLqY*ZA;pYU-3eNv*#^7XdZHEx{-?A?)5X?=V;d6|2?TwlimJ7<}t&kiWybe z^Ka$kRK^@TA`-_aI{kpsrkg3V{`nq%UuL#_*Xln^nq0=YW#wkOtY7avTehyQ`~35L zuil&yOer+k{_W_P%%2-DZ}zm09G2-uZ_QKY#1L_Sn<4?)&|J zmEWJeUAyJbc7wIG*Sg-voc`;%=R*9RhvpCT-}*d#!hUJb6n16hpl0@nMaDdbRvN9{ zv?*f;*IC0^(|3zLHHb;?$~t;=QAzRMSIgq;7u)Ejm~6LWp2X_s+q7#||GL%v)^B(2m7m(?-jQcoZf@7^u(7I0h|t>M2W)F>zVZ~E$|JJ+7_{5x-%p*7>@|EPz)738G2PG)6bc*e)TAcJdA zH7l_!QLmtKYItPvZ8L$o=j(4+@rx`Mdb@-F?S|0wpyRo7tyZdkQ+cT&#pmLrlp~Z- z7*S;W?|p28x$5%=&AK{byYI{0h_z{cy?VNQ+H{?TF&A&TdhJZhc1vZ^_nMSaQYJO8 z;`{@jDg2Xijd+)^d={` zYA#_rwDW?C@xiIjubM2}6`$x?a!n^R&E)j$sgYBIR6@4Cnf2~V*rZLd_EUQD8#H#T zWNb-H{P;BIDuc!I?>=046X(4bii*-O%~$H0^fY8u+xInUSAMhJHeBbltmxSL6*)WV zl)F@?_mwQ1rMzBOKWazY><`c8um1ew&H2xp_v_vJBUsrG&)Zj)!1v&Fao^dB-i3*C z=A|+*Kd-!}yHmZ;D?CkDcxRyCs@ju6dm}g}`WF_SoD!#@JKcN6VRiMN<&(6f4j!7H ztE6Y~b$YP-{)x-fetW;a_<7PC4c7Gmj>&hPWKLeb_HxsS;zvb?%-eD_UVYW|x*r&s zb-nF=;l`(RMYm2q!t4phAC zc=9vhbIBe{)|jPAmM8umzFuS>wrxpC@6GcTmkVtIP2&9<-(~cvxzq+PE9n2(rYX_5 zxkxu9CS+l6o8h|+TjbOHubdaR$@^rJr+TlYe)ku(otInVs+$w}7KKeRQe`vdh+fd0 z%DvgujKOrPS9{g7zpfWfy3KZ$&d;*S+7_##I^$gZWs7dnQdewVwN$ z;zO}Q-HI0ufA*^%c(2;G_OjdM9V$ZSGtca)I9(z(d8$z5)`gqJiVustkKgxK`|HpA z)QEZ8@kRVP!^nUz~Y`naDb=DT%L_AhglBr6uz1NCo*W)r$=1tw;o+P#X#uy z)L6SDY2USMKjh{e*00F^@jUhR`FSPPGvb|}x$0(0t};rm3Mx-@J^f&FkeF%miB_FA z{m)V=v?b<*EvTFyzj(lqP(!3)eynUt6Juc2Yg{yd4OEMR8i0y2baG&*L zonPPD3FU_?ZgJhzo?x_b`^Q^zZ8ozXUe|ile@&h{&)qoD4LkN-V!m!twLHxEdCKgg z3SK>F?{$vVy}rF`c8AFF**o*URDGK)f5Xsy&Bn`puR2s)qfZ*#pY>D2XQk|Gwd#N0 zYWKf-XUkl*cB{C==2MYPafdGIHdZ&j-K~&uV(YYy%#AG3s!h%AhMV7(eE!_H_PFgW zJ61)ux$R!k{dodB>$UQ4h6Q}r^_jtHB`O`c$@h8h;@?7tbPuZV|5_^98Tx5Kzh;ej z`{aees)=24GP3H~_x;>1oay^;vT^UMVU^O$6LTiVsvZ(gzR z>?u2)zPk+Xy^_9uo}rn#!s=Pc>s33KWwcZ>%``4hozr}1@p|90N-w(Re|Ctudw)mO z{*vUzT9r4YG2+)R{%J1a{x-jQAMdgSc7LVac6OV7TVJ^48@PQ3014FVXp29poDJxm8pz>`*eEw}Sf%@;uA53ERT%oh%%RZ*`(n8BPsO+6 z1&5LzFtz0iKbUk@a*ASQ=!FW-!LemKO|(*z^Qq1BkWF*C4=%Vld3MuB)`d+z()$!n zaQi0TuzT^;`o@nZ=8R95`n-~LmX|&hKH0Ox(ssAW@5-e_qDPi`jy@;%6Q0e#?B{cJW}b5%044I-CAu`R9(mzqhYmmXD)ON}V}=v(a;_ ztlkHo^G+}Gk&Is`es=ppyW0h`HdZVu&;8|->Ut`z?E{l>XQ70C@fqXU1z{Ua3`6#> zIw}&{KJUZYm>nxr<}PhG$>1wCXJdq)IV%qvb5Fm(lf!R5-}rIFaC`AXU6`*y{N2cKEH z!gIy14xV^9kCo>HPpDk5U8H5Oe9wVnFH0g0x?NPrYsfpHbh&|8xhOH9O~^_j$?l=9W&SrL#{g z*}q!0(NZ99v1Np>fcLhxhc~qN953#l%`sUa&eXDS@^oz$z0zCRHdB3M6XvMzI@9;s z>!0M@MvsG^o~plzoRl)9uzc?3Bg*A&KTi5T`6pbyt@M&yUyi8K5uez_jsA0f1=E zU3%#7{m zZTl~q9KCY1ULyYT6xG8@aaPxLXP--*{rsF|p;J+5?Fp6VmXqFa*qkWb)!%G$S?kbR zot4EAkGkD|Zk@=gBBFovqjE+CtDd=#@^*)a@2d+=Zgx+~t=&?*QE~+zmuLHXy8_EE z`y_vyW4-+O-FMz=9KRFJhAy9a#eCO=efJWVhHYMS=4wLahG`+!w^n(FM{(`GUKSEn z_A;FR;kxHZr$gu7oM!pz-``1MJ-z!37d`iKF}-|mm)GOPi;tY}%DOA4#2W3qW79{5 zRX05wLJnMST&<{IxNvELXxM_59kwAdEDh#qY9A^UHTw^`hTK)H-liF7|KQJ~7hl&h zE{j<^&;5Y#bxEa%Cl0zCdq4MQ$bO4g4;RNf{q?T+ZT4yVeBb--7yjq6d=+}|Tj1C6 zwh3)7%+|f1|K-)~Z4dM7o|?L)mar~+xN7k+g}>9XzTT*PzChPQ$R^J_`Ji*wyN>I7 zf2?GCB7W}3@#aKcrPL-_cH6QkGmo)Fzg;fx{8hiwdUM8WcDwrWn3?z6`uh6r1YNagN*aJf5oiR`vg zaJk!G{{61(e&t%9b$aLP<^3XfVh((WWs2Fv+H9n-X1iwXn|DdC#ST_9HH)o0ES4hW^M6N;Z14Sj za{KGQKlFVe@WD_2@-|bh;>C9t~I_GVDY8)!7Ia~T5 z_Zp33iF;0Myq9yZ^5~@_9)B0H1@rKH>3M(Uh^y*L8&(~zj8zZk94*?Vd!SIJXQ9B8 z$A65EojQ_up}XsTSd+Nbtsbsi*Xa&!M?y8VxVFc6Bs4BPV=+0` zIE6n&ohW)HyrWgb-FmY$kBF7Hkj$@?iPHna+!f!nAHKe=O5VpOWBH>7kGY(woB9}i z*WZn^x+D4M=Y-GBzr;glxvj0A#`Uyv^I7iOwQ30m4<>B+5q-jT%RZ;#1MSV{dfqhN zZ;-hfANRa}?)iPeanmioD0cJkCh)pu-!SVtzmkDR^u?WulpmXvXYrZJ$tkG2EhF2NwtWScPN2TUi*Qi_3rQSk^aRK-Z7aXh%-u;k>+q>d= zmKWzHp4Cp4DNlo3mnClBRVCWe{&OvJ+iVslW6h0UOIX_~1C4wc--%CO$GCpE@rte% zFNr%}wVbbqt^fbZ%iU(#%c{GK`|qzVSh{0rTFx}KE4ooBI2Q+a9_myxn)=cabwnZFpLEsyVb z9}^R@;i@xVg;7DfhDFiFDIcrX3%@iEzufVqJL~(xguR>o+*Q93XZ`D5|3CS^E5h0D zTVJxjHgQW=UedR>D}Hz1{FNECO(Upr!}|xb1VkmJM7BM?KS@ElZB0F&wZr7<{gZ#T z-?(D%*;N!xOHA-MI|+l=E=;Rv*EO8 z`uZIwg2X;b&rA6!Wwm({d-m$X|NrrSv8-&X-Iw${^Q3S^9D2r;a->ZCCvtk=Lbg{X6UW`#GO2 zVmCQ#@HSoa{N=<=F@1~V)=ylbGVk^E^q0OdDVjp%-wdBzsnFpxe|JC4(!W+vXUF`M z)2jW)-n5A`-TRri?Hsd%>p}lVU!?B6_+K?+esUn|$={p09=%c8_e}iDuh2h+ex?4c zE8cx<%d3A9{Z;OGr!e!Al~o4U_WOm~?5UgTT65+Q%drp2cI&6r1?U`|ar6-Ts_q3h znD&dmxwQMw`t9leUh=0ex1YEFUtQ6G2d~_pgod(xZedolndGszmM z>uyZBE0m$`-(*p$mQ!Xrjlb{AY}I=f?^YV8@imkS$0S`=cHeLRuC_jAzx~VF`k?*w z*M9$t{2TXWpZJe|?;a>T;%58u+oN{sVS5GZ-i|Md|4#@jlqXHHO?o%~VH}tHgfk91 zR@po>Ufg+hnYLzr^T7wdf3z)M!xGEVKL4JGY}0|hT8986d^#ZDk|N*>!H>E?!m zJ+t8#*O_^_cTEYh+aMkgw@`vREKSI?f8%G?z1kKT+e8dGCv_=jEx38(wa(LIUY+JL zR^_Y5+C1d{ORQ;h+~M=N=CvDZ!NPDW}aGqN%62-`f3M7N`Adg0E;OWn*aX;vGh9>2DD?qWv$ zV3$4O$xkFprrhy-pXlqnSSs=Q-d9VOWtw>=YChDz+ctS(()-go_U%7aR82F#Pjh~> zN$ug+z?-L@uDKdnt$Y2ukl2ORAm6pO4}4U#oxH(Xps{ze_R9RiOmXjs-MJp6{`w~Z zUHJped*4;=FPOk4F6W#7@ci7YH33<-~>e|Z;w3a9VK+U^sqvCBll7VT{#ucZ5Mydoh2*H)-E?^ zi@b*RNA7R;SzNoiFEKHOExa);A%6PzEqf*(5n!t8@=M$_cZ1~%m9w!1*Av4E)?N|u zS8iK9@#BmwiyiU}Tx2CYFQ50jAKMpL@4nH2dqKik$C+AFx24H9%+&Bze4*YiwWsR8 z@t4o@_y3-E<0sb<)`HrO#hPpS&5Ey0+%$3P0$bmM+oM=QgP0tJRkC80oX@DaHE-R) z*?nnaq8-+CONigL`C$+eHsSs1TaGdDMf!bScRX|!Tkd>U^oT3dH?G70 zzHGDgr`oF)-P72qVH+Uk_PjuL;j0Ue7Mpa6r~NF;`0@HlQo^USj0c^5J7S2}~DS z%rTc~Wh{TT#q+E$krEX@j_RCE2z3kJtNSE7Ote7FfaRjw&huA%%4bXY{LnsfAwAP7q59ek^VGWz zui0lf^(u#P=DB<^^O;-B)WPWy9B!j&dF+Rk{`R@=Hhs=pbR=v_jqco&rWJ1s`LdoR zUYfPdqjia5#FRY&WxO&^^}io{YB#e><1C*l8uV@7s)bXE5d-oY;L^WU@1xz+^6# zpoCQ=hbOnhF2AW}8kV|~%d6t>qBVYnXDcNh%xO^HZJMw!TS#Sgf_BO_o9GRfmoN99 zXRvpv^N*Gl$DcjelQ%OWHB>3KIBH5+P^oR&&##wwHc+svI8Qq2ZJX-dsvaJ94 zq2fuWP3OhBJ?k_Na^$`wGWL8)t4z6I{T%1v?)5y4YDu^N?W>3hHKI1PO(Lk zj~v&_nl|^pAES{_)=f%#M3z>C_)&UbATi--6|vc$?KsR#lp9n!fRr(hAizTiYi- zGTwG%ebs~jx#m|H(I!Xx{JIwBm7d*R)#jkPZmq}#(`V;Pm`>bKe67~s^N5*0d9sEE z^P=!&(KSAkz5cX)x-Y^0@Ba+nAes7i)Sdd-!fv+fGn0 zZ~77aG@^kqCGX%yXX%wc#2Oc$h|}J;BJ7gCAw$rY2miLJC0M0>=K9;C^CU2og;TAd z%O|5e>Zfrw!(Z7gk0V+I^m!V-KG=19j`SxXNdFIzVhx>mr8kccO)b3h#aEktq@Zt+%uVbs&uDM$a`xsqW()^!! z&z<%A50(_HXPc0DtWEU({(qf~+AGq8V^^QN{d~H;#j_4;A?sci^ZtM%3%{xfy#8nV z{q!QE_V$PKGG=93PgfCmY+=Uo^7m%P4;kGGX>+_IM?fPM>+ac5W-`@HRY zJ+rT`o%!Zq!iQif&p$tt4mwBve59r`Ia~PPX_1L8jGRr+mu-1rBrnOb^6o1e0VlV( zJR>*915cYj-F&rXh8lPA6ub4MQL*KVQ)ch^y-O*7#fdlZ)?u2xS)J95ODCGB$1`iY zo2YC~dg^p^f>%l^VhNKjlG_l-hRa^F1!oF8^_~ zbdGUnMAu8^@QIIS>f|1(NO%>1iZzjDWfsBwKNocwNy@407T)$VQHCFlKY z&eRM3uyCo?zPrkQW7_&+%~#dt_wRo$GP^%5CMMEPJa5H|uj`$nLb4qt(n7Uj^+NmI zcR%u6^lGyyOQZ*n)UF4w->|8A{#KP;7g=%rO!kjuk!ER|t;{wm-@F)leC6BKvC@(p zrkgwbyh4lQx$Up-VbMQ&eCs3j;)$xCSPkOO=H5N=UTngfXZ8P6PoK==Tq+XqrBLUy zgAMEEX3IAVd%eS}k8VDBQdE=w`y%&Jg&X{v^cHyv1_pFrn5|;*FY1BEi?S8344<#! z=GTAlRHo?$$26{M$%pPgWapVR|LeAC7PD$O?y^3p{{1lTR`ce4IhWE8$i}e9CirK~ zp6;}#!@lj>xs8fBAJ4q8+9_4K{qw6z?TUih3t|@1s!t<>Z53@|Qv-GLA26(ZTc$ZP zQR!IeUH(jt%>tS8x7^5_E7TnEEbQNU;Uq1qm9p1E3!1CX>FQ+V3wnzsPfXr4F_^Wu zL3)i|Rx0beEuH4#Zme=l%;uRrjw@Ci5^b|_%T2j_T97M1n)RgmC3TyQJ?r*u?{X=d zZ;}zgGPh-6rH@71<f`-A@PpZedw@9Ka3!ueJ8 zr>;Kv^}FzawZR7)k9u+by2!#%2K{EuN1Zk$ilzI6PPx5#)-i|IRqeH1Zy}yUeXCU%onUo3nVm2^{K65@=sonzdtv> z{$ZcgRY_wW{XNeX@U`-@hA&*+r7}rPwQYC%jJM45uP{s#zv(MuDrp=Vxyhqx>5G;{ zo8`L*ZuUOvbnP^N=qJ3*s8Ji z&@m&a$yYZvEj79os+JP|aJN^vuk40B7gj%>a#E>!a{Y{L? zfxkg-mN-}0STld*Su^vqh->2$S!0m~);ph0oOzTJdT5#5!{u*_E~mY(y^{XFtmIE= z`eSBK^Q;fj@8b;1SNxOyBfE9E+ttre!OiEt&F6@$+NJ5wz`^(Rz^YfzQr^j`oV}HDSfZBeoj?D(NiU3OFK;aQZgavbAm6#=R9kpBn~rxTNO2`T6`sSF^{}L5 z+nj!>pz|hMLVw7cuaM63;zy=9F}(_Y(h;kM?b1 zRPkHsLu`8=P-#>Mw5dPqOz`nuFYv zA1t-Y#S1q3KfiX|(aO!ual7h^a=~lNm({es=C|-~3Q?WG7t3+`ZCuA+?b5Qv7wy~H z?xh*6V7OJ*SU07iie4V<^t+$W>+_`^CG zy^2Y#TUI|<S6kjCYta}gkyQK zb?UYlwK+}RcW#z^2xiKROz~6-=8&Fwz(|-!=zY(=a}GD`TUPO$(e2eYcI2--=IF8W zu%`5qn+$)|ulig0F<%gCmaSsVwonWzd3r(OgKxg-7VFAK)As#iEZWQPvh<}#!;8Z5 zlbuIW*MGRTcu#Qt@o%znTV;K3F0i|?YLe1!tLR#O!+Y1a+I({1P@9qQK5jmLN1>LZ zm(uFxb=JAP{SW(Vg%(I_o76`8X0GG;5_)jqx1F!bUM)8MRnq?N9nZAV-yW`v`xdXi zXEs-1#*y@rs?F=4ZireRvv@%s>H1sD^KuwuW8X* z^X92^2@9LzrB9dr(u8+%Zl3+sHn8(=DbEahYuVPVzS#$KzrB`OBJ?Qs{@w|{R~qFU z-5#Q#&oK1DU^1``&vw zJ3Rlq{yDc=lMLn>aBFSfV8puV9@wY};_^U)1q&1HqL>5A_+Cs_YV znD2MZoaxDiXYEYi7#D8SSu3OADP?Q)Br31>N5dlhikpUy_l64cR?8l@bXMGCe^w>Y z=sN2PJ%_d2JjqY}&E$?+&teMY2r}5c>eupU*X|zwP@e2$m&4^zD=Nq{DH-3-&{80PWg^MwVau=}$8f`X8cPeh&+jb|q%16#p(NQ*0 z{jPo7vIwhpTQh>a<#s8uowI+-?jiU6so+)%^);r-QZCP}Rle6Zr)+OK&_8*@zVm%w zYVuXCTzkoH@jqEgZ>7)~yZ+5)zvmo$DZf4R^B4EI%`fHmyf--Ue(l%ncH8)A&4i$3+O zwox|xe`@j`55^f8=Pq5$(EU86<>9U?OP?fqxI{e(5}ua2GcD@LOsU>grYB#khpywA z=^nF^^Q5TmjCu(R=Jkq_x%69-F*80 zOKX3Ad-m7=vS6cs``J*gK==_z2BX5N#R$>`FneTZHkWQ#kG;8=gUif^YOT*{3)8< zEZOUprGCxI*v_~M&x!NC`VytV{LeX&@+-D&3Yr<2Z{SkJaUT*W8l-V~i_!n;3Q zs=c{GfBlD}+;$aT54n~<^uNpcROgSGlq+X&*B#~UU;qC4dbq;M$Y8tq`}=YAJn!w| z_V4`3Qp5B^eYIMCCZCGV?I}5j6VDqrRi{NB*)c&SKKQ&+*H5WGjww#<3)fd{nkTUD zIp>RnSFaXrJfUfr74_W6XKmH;T-)fGQSv)JuB<-J5U1vOBVkT(cDRn=mWIRME6rL? zc->(75OwXr)dP<+nb)3T60um;JEb6WYfo>4Zl~Ibj|@M5Jub2@j#m?HH~wvG_lcov z=~cxC8>+Il9SlCpIdN^VR)~c0PT`sFIU414`7g@_v-ut6S9DW#sO-^DaJ8YuOdGBgOO3W9#2#x~Y1GQJ?pz z8O8+nvHwZWm#~QTDe*Ilne2Z+Sp9o=KIf}!uXz)V53LM+v!mVJXkmr=g5UFwPP|d$ zrf^$8?4eqKWr6R><3`H+R~Vf;Dd#_Hflt$`Kl)dsMLzQu{It8C|H-JkH{<@4Q&9~I z_quU-}7tT@= z%COaONqMxn(<@o%&)r^kcSqIska>=O-a380&pEeHZgoJSr9kVoiTxg7mGizVxcKDu zm2$Vo{)q>;%Y4!jerhFX89X@k`oxtdH=K7oyeVicBDwV1hf}4Z^B&gnzB0{Ue&N~5 z3yrf6?RVU@%WAsK8^5_Z|1Dfw8WmWdYbNC`w7PY(xM==z8Gp@5vmW`S&arLa6m;9> zb1XxDW1-s?)oBxL8WkKBYU+2m+s~bFH_RnkXyX}2sf|K!E?hEsIX}WQxajoOuMR#t#K6;zZlH9?VQ-U%+6h z?(ZPAm-Xe^I};8Z_+578tk#QO^^|F+1bpsBtZ)1<%lk~&r0cEA^=*GW`ux*+$@k2U z^Ups&Ej~Xm_}}y5UythRWvn+c?GzMt>AZeyv(eK@neUW)`AQ!Mhbhi6UMZS&`+Jjg zzKy`?8GQ!FL)Qd;?vwbf$W<`wuHB?tJmO5*tV>uf?wRX)UPtHdi9I@h!XK|YeB;-y zGJb>LFIxq;J8HhND#gE@vRXe@J?E;Wt^1lP?p0kb8T+o+wI=SV*vYcY=GKO&ol6$3 zKJ_)~&ELZFiFfa+aWFoVi`D;j>wwwTopSG7rUyUre0No0uEnOOJT|6VSa*3J$aByv zuez|wgDD_LB%i%g%t85faOvWlS;teY zHyt`Pxg^Puh2yd5g<7q*e+rGBi&an0p6Kc+x&6kr(n+4K0wq@%o5HP3Pkt7OI;JY< z+8!`hZ^21xo8I3mP8VN&EGKAl@2T8J#tBBM+j2ExY^HvH_`Fg6gTOA$mX?T;3)3=J;f$ZL29Pf%zwiBpQmL8h5nOhm4B_hKX&exU2!>U zrn~DkcK=F~EjAJVJylh8dwBHb=bwu9Vb@L}%&rylFc6D1z_T`T~L0O-Srucn}lV(^^elTjvO!b6_ zqupJr8l8?#pW5rB%37DprWF|Iz;R(kdtU6tqv0ZKi+@%I=34!^C2En|mQ+{D;AH9@ zZm9fQ^JcPP;KmC)hmYyii}Gn4-0q&*Ipc^?}F2VfQA3Ozr9X0dHG3PH51b-hR;Fwyypi&1+Xe{nOXI z*xk&zW7htK-F)KhD^AJnzp*WXt+~xH-$-Kj_usd?76`;}t|;Jh)_cow@$@4D4r*`Fl&Yx2w= zp;2!8bF`Pq@=WcSb@=l4BzlsZLi~NiRFuSz6_5(GfQ>X zsi&3i5?#MJwLjofWncTJ1W8)i1xN%uc^GO<@F>-^I9I^J$M)@{ctSFN71FpQJ^ z`i(HFu(UV%oHt9v&u4KLpS&b1eCxf>!&J_nw@RnCHWyZYnH^^z`+sxTPjSBBg11Mu zE&Kid&Z0K?44dvo!puj(A**3FGZjs~zn@{XG>2q-lr_}o-v2}_UgmO1ur#r({g?&CKMi}*PlNZ&;RhewNb3`r_PfqYK+whiIdzm%uMNVQ&;z%=yK%qw90AR z&njEoGnI^-9$TEuI5s(A-kd4tg*x3RlNdOr`Ln#(sS;fNYyNHT{7=W9K6%`Jet*9oM~terR+!@S z$nHry1hj9)9Lut;3dvrV6a7GVj&i@_HWt5~I}H*vyB{8@J*VY*?{)g@XQy1x9d^+F z$(z4S!R)l3-=7Iyp8tHESFvvY%Aa1cD5J$B?rF)<6Eh^_3O}*6lI;yQb|wbDdjj=JL6@KJ&EQH?L*2NT1Q6 za$e{8?w#Bfzt3=2*6>%a%g~tl^Imjt7L9Rm+1$=aZjq^gdTq6ED5im3vs&>P~v`6-&%j)dbME1vW9B~98QYbtCOtk9e88d(|5*vTK1Ziu|3#S zVHWg!$Nf!S1rhmYFLG6xCsy3at#n*(az5%=o4R4|x5yov4ji-#+4oi9X>QiEdS>>8 zE2_2LDIT6a>*4u8^}qS){U$vnY!fYKo7?heHZ@wC+z7yP$FQDyn|c2}(k zEus0IH%~8Jxv#Km?{B`6sbZ=gZTdIQ#_fObv2A^JXPx_)P ztR#5+q;brpo;K$xOa~U_crWKp4|e*>bKohXWt}(g-B}l}uG;7tch#rtSxL_%n`Ai= zffF5)BK+?srf2u-r3i`XZ`wL-chr;8i2>sG-|Q3V`OKvE?FK^;_k+#qD}*KpGTwP2 zC~T6vP1Aezk;KRuy>*Q(Y&-HSVhS01j$K=!yu>q=t;c{*@0eR!H4|O_CKb5 zxUtTJ;bz+Yo@afRl@I@%DfXyw*`El_g71MzbLQtxe%w2)`FPz7_BR=U_hhtB&CXr4 z=jtK`WhsX*GPE*Bf&K>4^zZNqo>|gXE*^qH* zmz>MiMde*xTG}Ztd1Cix%%7P4>F%o27lPGRZ0C7-&gxD?Xy|;l6YXpP23rmESH8J^c#Q$OW;5rSisz4SC|oGI zweM9Mx8;NemwS1wDmJLVuH8%0`NY`GTbevJ5P;teL7fdI` zMgLrV#&CVw+G}FdL`_%Cac>ZNs_)_vK0SWVZhO6bG5hXM`ju$SB>O^W&n7dmA95#r zT=||K2p8D7;GbKXjuxwi_=;<5*KoQ@dmWB+w%F`;O-jS#lxqJ%|DM{k>-lV2dB0_X z-ZnR^e*fx%b?9Z5`63prEuKaF2j-+?w;fwrIYaQwYnP{zGX;8B3T(ChnCb~J7) z7r=Pw_ta3!l>Ita#U8(XXxLX@r?BJnWCNy}JJJs-rm`;8eyw?>lgGhFj{QH&{`&$M zuMAYCa%)~c$T#zY& *^BfrG>BcSC*4G*Msp-_D09jq}=@E08)|3}?_TF7%ek&9l;08yyJPyO>3z;Pm1J znWv=Yp75)Qt+wv^uwFuChT`K!!-KLjUe>Uoc&sy)8?8yx7ltt{?yJLHlEPuy`f5&|q&3d1GiD^eo%bbHGvwNZO;=X!bSPHmlUts>?vBy)qnhg~ zn&fYB^a>diG-)h59#T=N_|NWMVfem`n4$L(wZCKIC@Qf{i&UmD9cXgDj}Ir4yE%E~`-%uyQ+Kb?L&>*y=P zWBpBmT4}%fZuZ!=$FDn1_!x@I$fBzS}c=t2^`wgy%>;EUs ztY5IzHdkzx#&k(fxfud7CXG?yKgwejLcE(KjRQOllr9*h%=N7CE&TpO>gZba84)XV z|5je#%fx)I!}{t;CbeHXW1p7(H2l!GlzaQqi9yx3%My|uW}2O{l(~`fuv%uxO}7?r zkwd|}UisP9XM+WV;(4yTW;1$I7kzZuO$PH@OYZLT*k5GJ>^p65VDQeu&uI)1w%6vL zId;O|)NRr1Lz9l0U)|Qz`H)f1&CS*-jJK`ew12^jO}nRt7;fz}nYxF|$+KRGw z7ZN}7h5nXy;`!THS=6d%CG)-Z&pOeNg&{9)a%_m(x}9eQ-=&}W7q9LpE~{9)a?Q#o z=wo*b3=9lRAcBE`K^@oFU2bMYW?r#=e0*kJW=VX!UO^=@+7O^xq~PTO76yhGE(Qh_ z0>&g36y&7p6;vJ#%LVNP`L`~<(8KP8Th7y5Z*FGY2|F{hbuxQyX$Y}2I(VyhbGxom znR-OxTk|*bZ>P&dRHMs+7Ra-mVVu-)y!zd{ozMO5wcq@5`0R&C>KeR!>Y84sjr*!t zo~wEn$;@+cKWNtzy7N-a%;+D_^DQi`ex`ctuWRkxqH$t{_tKe9z1R-kyLT^Swfnq9 zjZOB&nF_(PE_gLgSh45{)7H)xQ35GZq5{VwQ?+{wdG;vCaQk?rW?KlGxR-?%?PN(y zxVOVKFl0es&G}%8l?#Scw;*amE$J_NXE%1LWZ@!}U_Yw`Q z(_&2eJ2!?jhjt1@^J&Nns~Ybs+o{yG<4EV3knfLno%wcehb2dV#23#uhi#sh9As!_ z-9CY%#>IBUNv*J_T=N9Hdc{(?%+g&P``DtrI`1Bdj5)xzuGf%Z@tn^>ot}ygspmww zw(RuMl&Un$HjNJvlMQfVT~d1E6i>By|F;7J|Su0_bH!M z)<0Hll5{>1^s;GQIB(3VUla8!Ps*Q+nfl@3Yu&8tQ9^EgCz-z{G5Ftk_GCAoFVChU z&##1Wyq~qfQQ*qOJ-eblPhGs?y4_cI$G1LBzkRk&<_Mmbx*||*%2B4b!i!q+eToz% zdRU8%R$Cr_cJj#{oz6v8n`dwIy14rK!ebxvpKtE|@heNJevi$66Y0I{7Fj2MwOv{( z&X>Pp<wA8|iC+da{+v7Byk28|aOI2scTyRD;tG9xBCh&v zQGY(`z`A7%mgIYgtf_r|WLZ4pyvwE9!L7%Z&fDy+^06>+Crj|uuQx0>tIjZf@U?VJ z)hX>ew)md0ri6~PQeb3ZCj?UD})Bq^+A7-K20V#y-mAvTEMtE*_cF6SF<1ObMN{u_^f8F{9kx z@OW(WeuAS;>|1dH2%fbLo;fJ^O-PF|2TYX9H*{TDr$CmdtpTGHhqjrKt z!)_fJzkekX^;a3TB(98Zk5OCXwQ*{uyG_&S_W3~<{zv}#)pvT@n^L7Mzk|H$7tW0P z>a=PS+oV(Vkv4xh-~Ybr^g=Y$`7KNOoM~Uab+6cN9yZnEZ^Nauj}xl@&VSq9z3Jhc zYgIm4>nzn*R-R(NAmi^c>be&@%Z$~ul4=H z-rtv%cl{!~?b>$hYme7`eez87^~+mTyOL`+Kdt_~t919fmtXd;{PW zE$D7;ytmNfQuc*qoVzUF==C@((2RQKrnFT>^my!-{r7n^wKh#QJA3b*?7O4!IuqxJ zpF3@AT*YV~Gw+W{rT)%8t?9w?nS zQD;r#T2}XqGIQ9r3mx!b^$t5(#9YN06TVfab))7aJ~mzd+{cq|UkMUDpcAuIYDuP) zYxt5(P4T;Knpb&0X8nJ>^ZGI?y_s5mW?ZbFzt?S7zEm2p#kS^Q{QXW}n+q!?{67TU z>(CMJUUp)JW={2l$sNCqe@rTj%@RJx^F(OfrPcHG{Wm|}zWn(6b9R49%^3c;n!eNh z=6)iHXKM$^pyK`x+ifZZ^-N_=4{3n?CK$XVd;H7`K%$I{2qlC zCtALp@Mc=<6hpSvojU|x+}flfKk>TO!!RrNOpl{;jEgQ>IQC2n>b%pP`$nQ*>r;2_ zWd~QRX4$y(rCq8bt&Bw6&Ez`3B+wpVrT9-+H)uVq`zI%-qmR@mJ6S} zd&g?avCv;}QU7add#CKL4D*aNS~*Gb%=+Vr4;$hpojmF&6yCKVsD!)y?Zm@*sZthS z*7&of`o7djJ^ds}>YVJ>DefmFKJ@Ed`?%rmz3UQ@Tbd+lzM1na{K+2oJG+U0UOG?A z%rb5Fy{mKMzXcchPM7?V@bTqcFZpBb7jqtX3WVM>>AI{Nsd-mTg}F^oEwa_1-7DzI z-hUNxj+yKeJ37x?WZ|5p$N9d(mBnf0lGB?Oiasr3nQVWUeeJC$UrfAtoY}X`_L^O| zc!LKvwQ33>VK5`{QBLR@O9Q6d3}6$gGzoskNxg&DqM3}f8c>~e@?4kwJ9tu(%YRZ zeklEY-uI7nkK2xwV!9Vf!XEmh=BlJ@i`08McZ25X&x*$$yqMj8@8M0oB!R%qQAO*I z)?WEC$M|*T*Jp2*e-75UR>}9r+3T=bVkWmmpXH=UZfjyT_wt&qTA!K!mov3o#g%R63c+Wsk7lnCcs1{$M9E{B zeO%_u{iZ+mxzzr-eK~2;NtF%fm?kedKH@Y%*AXwBxxq&1e4EhiZ|7=v?6Bf>HF#oi$}GU-#X`I7d*z*8 z{jRFYbdk=m-1GI;fe)X4yybW?YoFwal|LVy>D;zYXkF=vKSs6{H z@$SM2ruUz1P&&TU+fL7nyV)Q28Vme?>!M$~#+8<&*~#jJ_MTeVg;Q zf3~LM?k`@w(UN;yx9LRooJm(#zP^G@`-uI7^ZZh6GtT}kedTmI-}{Ms_4=RAdHe~g z+wQKd(OFlQ%f`L-wEEF^X74|H+@I`xvH5LonDOBaA6*;Hu2_HO#-Ue6IXgnxg+2-_ z>MD)CI_+0t6DCUzRJBeP zabhxDXlVM;_>QjgBv;K7zf(TO_Nt2My`J&tQ2biig5&-E+ZI2M&z$+kw^V_(k@wFv z;i+BLj&^@-+E#7k6RVr>U0mX=*6mKGGaIKIPZ3Isx_aAn&8hWqsuCr&if`||-{D}Q zzD1`X;fu3M)?t~xX?1!%Yin(`+&-x*aqa&PO9ejLkJoF(C0&KFpyeekpGc2UntT@qdY@5w@hmRXh zG8KkTpX7ag^9k|SNgLAlFZf~lYt4t;(wy(!=l3k$Kkxj!+wYICEx3`z@bAR8FYdW{ z5^<5O{bq8u8+=4J6s?>0_Wksyxl^-(-#ngmcf0o9b00LHw*Kip6EC~Z#^%?)<7bu4 zOx2zwt`zuLct-6#%Rc8R4Q~TAC7jq;9oFsqF1V|^E&tbsBOD*OF1mYluWapnz2Ezj zsF9GwvI+s?gF^Pp3i_r`^^lk3TkoO|$=(g`M=)IBdb#^AmVdi;?&-JV?7NguGI!AyCE*q7A2uf09M6!M&!%n= zdNry$H7~KI%B=6jbD4KVE$1_)w1~)W3<&i+l`wItocvH{|Zh2 ze*Sg({bYt0F9QPXid2m^zDckP?rJ%bJ#*!~W9Nc5*S-!}_SUJP^&s27mLScHW=1yd z#76Nc{gH%l05g`yw%eX7HzYAQFfABC*Qgh{ud3W=H&)-=bzB! znOAhMIKN-~jD*uPujya*<~Id#ict| zO#iz<%uCe$(XU?1wu5U-3zuhqF|+Y%miobUaLR$*J$$>SKUDcpb$r&L(>{l`Dz$L) z-`865MbfJMa9U%B>t+X!#K|cM8&0$d{AG%tazu7Xk5=wM&&PbF+NJ$zO&vcHJG$kkSf=bjH>*zWb-{srC zFP8OvUw|Mb6v%49|II7*Y2HQ*4Do2$qh3}N^ zFFC{a@Y|mo=U!f8oRv|R%aj+l|Li-llxr)ur`3H8-fekwJM*?_Nl&+{hpA4QQ+&(r4GlNX3^0w_}eSI(VSf zSUfb!Ls~Lr)^owHrgNX#H(x4$cKQ6z2gjbuF_{XnKFTj|TDK;1vmHnBvv(qforfP@ zyi=Jvefz(guRR4euTt96DDh5s+r<3Y2j(s;S?;5?O!DKDw30`2JZ>CXu}JVnjWO?T z-z)!)y)!Hg>{hzVbNaE#R~?`5#cf?0nTN8|3NNtB%Y7;~vz%{UdgsD31M}J`l9ENf z7hddJ{$Flmw|d$2nD0g}#P(?_vd`u?vHj-H6gwHV-!ESuW=FpiWZC6;@5}fZ7`7M_ z9(GC2Nz6;vE2w-Lm0NuKm>_7_WvX36kH-X&RL^Hq@?>uo-tm~0wQ{5Jsy5a}C<97V^t9km}z5njX?TiT!3Y>RDWx;k6pGzEK!j5}0 zva_eD3eNON+j+v+YNmkLQctxG@#CEzSiF<=ZQZ(e@87CZuFrlJHJq8$!?B>U=+o!S z_ZD9sS$>?Xk*aw1#F_4h9VLk;uT5Jvwczs+@tp|^f2vN?Y+fp-K0S)>dTB31(7g%1 z()yD^JX4Q3i`~D_Gkbs9t=A^JFK4InJo=&jDYV@qu>bHajdzR8zMR)(`oFjP^ZWXW z;A+<9_md1(^v*MDuS>J}eu#S_yN+d|c}Va4P1R!Jn_lmgn0fxm`S~v{`4~j$rpc^s ze9Zba-*0lmtIp3B=Ee?oPnM~tCA3KHEYYvGthcuO_wnsV|M&KLq)*;mJMp23_&t*) z3M{-+Z1QL5>rK~OyM`;nEBS-t{EJC1rH!|#q_iJ7x&B_qpAGlrL&W@w#n{r0e*f|K z(&=X*Hzr@pl`d=Ed`5re>G!sNCwI(oboO)4Uaops|B85Yv|ZJqBmRd}W;0aVG08r( zTYuoR^@o~6J8JgrYjfqFH0SYCr9!tSr(T|8dUp143-`0n>r{-U>94o0N~?IT`}5b% zS6gSwI{Tz$tFPW}@cp7kFI)GGd?O2UF*{ycF=gSyTi096`^s(ktSTk0hv&Q&fH_f@MH$z-VAaPEG)qc;puX$YF ziJgfT@MBf4yXfZxU7sJd&3j%nb_8#9dVww!Tb@^ewDKOga?m8DqRbF<2cT2YSU z^7`ueYU}Oy?Y?nf$Eof~GorptO%7aech#=Ng#vAUrT2byPEN2|?B%{ni zsdH8qN0PKQw|KpXt4Pg{eYewAE8>$)Ye(j8)|q8Lxj1&slFK-0!zfcxvBqzf)4sVc zEc{X01B zg-O^OmI`e+lWD(gdl#$qlTUBX-sF(s-NUmcXgLJolKi^R6up3|58!YT`$)(m`-~dmMzb;F!bi&VTTeWzx^8XWQ?bZ#i4lzK73w>N-c+f4nMwel`+ReJfRmVbctT!%2GAyk*5LYF@W0D=l_-B;>Fp+97uky_J#Vz|ii0LGUg^7fP!Np9y zvz4l%4+Ngn$ue@UFf*x6W43-0Jn3%51D6Kt4T{$!b>>fQ6?nPgI``q*CwwfCST@z>??#j0XN5wt6XdSUcw@ zOZzi3MTlqzuvi*@eRjof?F2_gCf83k2jUqNx!T$~ZzL$#>cS=U+qsQ8vW+#)%$&aQ!m{W3LVl0=qAEId59xAm$llRj`>Dom`JO73#ZS~vtC(B3 zrkGi#hA>=OdbE7a_1I6Hnm?_NuCx7O?zJc6n@Qu#m`gqPnoB>hEPoTF8`P3>S;t$U zPr*qeL&;fI{CL=H|ButFCReLXY740oa#q)w!f;`N?A{WI_y?ShCu%OVT}*LhIU2Dw zH)6Siwd~y;iboiDmjC9>FqlyIJ$O!usP~rm-dRS^=bwDQU?VTt?7HCkl0BE?u1WX( zk~^<3|8h0|v|yJ0d1}$yHQ!0D{iR><|HAhp`?ow0Q=MoyV{T#Qs;g&GqIP~3*z?G< ztLXFIe-8rQ@&D2EV$EUx82n(;{-+aS^CBAfKB;$erJ3+)=JHvcT3%tNym|JY<=ieC z*xwtTD?U|y_~Ge)-ATDyOw>hOHJl@lm$_wC=A5~1`s{U-TCtZ0Lk6=jtJczaT6Z3A zzWn*Sdj9GaPKISK_cE-{oyzk$!YwZR`{Y>G5XFO$#s;T$Z}9Y(!uVyi;aeu%nYnXc zm$hsGe3FE1-DgpyQYR_g1_=pVlvUc}Dx(;x&GoFGbWh zwPU&0l&%P;1cfNyxm0xKc+(84TDsbBnht8X2svfoztf^Vn5g-3~9 zlW#u!Y`E)zAd8Z!VdzW_;Rdg%ADACqHD9~H^{JS{rzwdG4|tvwG5UFv_2-@BbaC54 z?ta0NTY++dZ*^TxCfFB@zEQ zM6+gH+Ulys!U{rDn#J^AYvzlHbNZ>x{^VcmF9W3GbR6V(^7*Js!I zMnx@LEyQ+CBwkzm^x>xU3+s0<{x!Vdm6cPW>!&EUwEp48ld=o)D-SSr@K@EnESmB9 z!0i`%S7|=z_i=n|oKRSmCwqFAcI(9%U)O(Pv0Riik)`$9#^iu|D>to_XG#fXwlaKW zYk%8Z@$I!wV`%r@{?xOtbD~?YltN368q?nQA7@xN9Eg0aqflecbIjuSxy$>1 znXXHC)wAl!XBFd^A3EliFROT4HEuRE%_-TNIysRj%l#wf&DW@`>bY#B z<^S>F+r9p&g1KvboQ$7G>|&2|k}#df{`LFC(p%c!O|;EZmqo2wsd}dB!i+ELoR^mE zNVxR+h;T!W;+B_7&McOiDYD|pPYz~Rou^wFT`rh3x-48MFBhJj;mYMFaOTdH{PS*q zg}T;e^_zNVYg&9&?&`Vbf9uSI*0qyfiU$aai+02~nqI5;I&V>-*!D_4xi{uQpCTWZ#`A&M@nR_C _o)xOHNsMF2bR1&$}yUS8lG$){fqmrr&mx|God5s;O;R z!t-P1O`X?dDsh@`%kJV6Eeqm*`WI}_m*4&ApYS1}%PNvPn(tQ0#k31Y_wwuC(k^=J zwPg0w9E%(86;I2F@v2q*X4jA3H{+Lay+?cV!2$yrxi?>zZ$5bN-#_mEM{^9mG#_Tp zFSwGhA@Gmp%+-l6_`<$6U)npb=XmZOkw&BI7fKc$e4F)a+Kjg=KmWRBUTd)V<8q_b zXFh)kOaHoe)gHbN{$JfwteE3B-Sx7bQfTltTz2PQ_S+&l6>CDogPGD0+)U(b#=l3x?pPcN_GuQHD@N&&2yKNhyf4N-> z*qOBEpNMASn*ZCRHFw_n`g&80(AhU3S57eaf0NpOUv`2O!~B!Y1=Ev1pS^f&RbX=u z>$aSIMinggPM26u-Yj46XtDD73nGzAo0d!UOr2$PYQ6YpdyUxjXRdxS*;W;3yDI)= zh`-CVC8fXp-fG)=$zJV$YIx~al)~*VZ5wu_MihSAm;Bm-96rw(i}l zd%Pp6De2d*)69ErYTDaO*=`zgV)OpwrjxoKHZ|<->d9PwwsgXtFM)q}vonKZ?a$8m zSJwH+Qc@#+lGE(s0|%F>KXUUsnptFHG3U>pZ;y}u-poHkAg-5xN#mK*i(j2q{{8gc z^H-;*Pn~}F)oI7lm-<_`SLLc|zRI`p3fcGX_Qgwc6DImNg{2yota;yapySglhWyF{ zx__s?I-d~m@)z%_=CY=yzdNF1c6zCPWnrkeH<|4nYv=iD`Kw3xIk#lLb8>mem1I)( z{symi<^dZ|?)tBG%CqiUeoR<6BgALv;+(@AllSK=zP5kC!MX2Gt>x#-{w^PX{9y(& zpZono3rp62mHGB=f9K%>X1>Guk3O7clbI&gF3k}a>!j%F!dk&3Kkv>1alZ{0R$3VC zGOw%TsjFu-_6m|Rx%I&F?7JEHckb37;PJ@Nns!ToamKVosk=&E$;5bswZ;Ac`oV$BBJy`vjy|U9s!R^m7f*$;=RE~ao^Cs6l`78J2|Al`F zJ=*#q`q^}Mqx`q;zP0~i44P4Q!<@hU*+cWc8=hOvWm~y-pXm=?y?pKB*307I$|s6m zY}wy=@!+x^J{`CJ){5WqQ70ddieKEBVb8#@=PNP&_RMV1a*4OK+2yz0CcP;C&*gG! zw?eMarnx?5i+d)Orrdlid-K!QH-(!vO=Ig^)?&y}@L|G{t1tH7ulgdKVW)C?=G|gF zf2GM4A?4xW*H^DzwY~ZAb^m%J5e$YEmv~ofR_e9apl6z#XD9yXO+g!Ih(m=|0_Abq% z86rzIR|Z~lob%jO_Il>T@bB;L-oACKYG&NhN`sS+Rtbd$h#!n#xmp?1#j@|}bf+f= z?ezijdlY3bgQ^=Qqi*($nM7S}J$K3>9mTq#~Rv2FRm z+b`bcujhCBU2k{e|LN}V^X2bZKLqaeJtA`={K@2y7j5%bWph8jIB|~g&nw+G*Q`ud zcxT?*bAhQD()0hsPedN!?cy`XV=A=L75v7j) zdZiiux?lHbq<^SZJgDkw|44EEQt<-m8D}q>@9z`}7yQ7kA~0hHWATDL7kru79&>*8 z>@~PC`Ru*j-~XJwxcmCz^mhMw@`tYmXhGV;4}ZV8K;GrMy-UN?d*^q{ zFPhwb*nXbfi~oCGUEk00e}UNaI)*QLjsGfVtgZg$Eb^cGOIpL--&^b7%PDHy*q-^v zvoh?fN^-}W?pif51s0X(f`6=i*E3XCJL=2qW0>*qgTb52#+@FsekQ+H&fK~p%W!i4 zf;Xcz? zS89^5(3Q&A^Q-U9oohVfWLl5$Cg(pXca}sRiZ6fWJMC@F_jdcb-M#m{K7Mx#Db>^q zDzvQm!rXE4y?ov8X31-duWc}TW%uCzuP~+WvODbCPpGk*HOcj^O3PAUl$U+19XLr) zWr5JYodM=a-*acE+-&DGE%mAAfAQXCF84pCOI}Ah-<=MKQIwWYJCh@NE%9yR1L>y< zm-SuN3*9Vn_>^ic(VWl}HjlAiTrNFhn=T9rYCAX}{nT`JRE7|9r!)XGdbyGA%P5ELhE$w=d9CUFNhl zo#}{$p5r9W2SF!}bl7)#28T7+1_)~jPM=(y@~&ce)R|)%cX&kHGzrwY33A{~FtU|W=>z1^oF*-9G$V<#Q z@V2_aT_V%o;tLJQk}h|&Z*e?}N8Sd5oF1LUjw>JX zG~JtiG51%k_;i;xWhL(eFF#CtuEw?VoUY2c5&@12?-MN+n42319^3lj;FB%0CMdfs z%R0HTgL7-UfQ|lx^dN@KXQeOh%>1tXb!%$>EB}Me_CMY}h>TK7o`2w#Cac!B1CNtE zFL1xN*4uSw+xBMVE0+rwUQQPMw#4n3LwDA-lv1nnE%^s6?j9@r`((?P%k%PiZXZmn z>3(JtAgMjVjbIlJXK0Mc@-TL>de(>=xtG}%N{Hg4N+nEGcHl6bFhKt7=SQbq8 zyr$Chrp0TW@TKx8E!PB|NH1nlJGFs*r%}V#zAMZ^Dz+~+NlCYKJ5TVvx#H>}PE*5K z3vSNp`M~)mMgOhwLFJXV^XFJG94|ETn!H+Y758qhu%(r?T@C*G4}3a!T=`IG>yKBG zQ`7EpeG=%OBmKmWi)W+To`&XWSG4ypu3PtvfBlbL9*b|@-fW^y&?P7Lw?-LdA}o}bZ~=RH0!q%jtpn_#uR!>8{+_k+Eu5^dA}%ykP; zufOw`DK_rXbeFLed(HPP+A9?pX4cboPiNn%OaH~H*LTHel$J`B6tL*N zYx)*E$&2&^X0gzlGwNPqvp&+-nheW21TM z$EG|{s~Zh6SN{j;FVe7*W!dEX@Aai>V};F+MCM!1TD(~2oZlP66OJ$Zd`?%WUC8_K zCokuY0S9m3q1q!1U8Ve`x_;m7x4VA)ehZrloI*mCE>EC=z23LafHYo4xOz>w^m zB0g>6p%&@q%AR{}?doyZ_5Dz>yQW3Y|7yVm{(}?Ru6C&z&kEcTv1Iy2jkT=K8{Ss$ zHe(XyRsK{kg^fE)R`8_P=Agj!t^dUvGD~VRnbe*&dc4-T(09_a%Kk;1@BsnK)&H(B zu={caDsGe7@YL(m(?h|BllqwCEatr3omzIqL&;#;paD^Sm#pKQz$) zvG&6ic0K{u7yFofzAWC7kX5IpE@?Y|rl8O18rfsd)|@-}!XCD zO%=cWDa}Dv;j8@AU(<}vUvDlED{PkW z2IOy^@LXa4i3`f}ZMB?_T~!Zy1ACegiABsi8ttQU>x@ze(Ew3K$ zEYoWi56*YAtXH11*fA4V8VhHb-O?e|-B}{v)@+KmOPb`YOS+%pcL*mI=6NxRSbtWvEzCvz}=!?vw2VGXoVzjuhlwpt5 z64vEfX-sc-tvbQ}Vt-!RqE-ge_Jhm!>}c_H=bUpbk+oylT-94YXZal2llM^joVdbb z<=I>GALU$+3tOkm{M-3f^z|(%<%Tx4OP4SE5z=^jt47@ExJ$=R&UaJtU$U^*n(qyB zz_IWs#R>C%{WO13%U@vo_IvE>lG%He?>uqfJ?m;vY1OsoZNBq-uD#bx6DvOm2C#n- z{B^tX!276+&9O|=QgkJD+ib3OEH9ZG{;KGq`Rz>0=BSz9WmYJJo;G|W6c)JY&iMkq zU$$=*{e-s^PrfI=%Xc;Z!WkY0YdJDEgz@vuzqpi9`1(>0@16IP(h^J$h?K`MUCUp3 zzf=6b&bmaEb1{0YECm%R>iuQ=t$Fv|Gf&~01t+j~~!SIxP_*%>c>++X)9NiO7oT~XJ` z8P^s~;bDor8*1#B%lkOWtD5=Hzn+KZmajYgvTNC+7e5%T_NMZEO@6oVN%+d6r#4s~ z==;9clIO#`vtf{+_a|*({UQF># zyp?!mL4eNWITM{)ZT%Q|76?wfyCB^8eHLp~NbOeXZ5zuJzlt_5j$XmHE$MUAD_h6l zk8TTeqZd8!Y^2x#Ghu?SX^|_{yKUJ8y zdgin9_ucR5ZPDE~t!$CW<_-6^dDTcnEOnb5S#Ym(;`)Qjw{Ov0zCQlV_OG9RKB-~p zDE(5rgXOH3=-i*zj-|C;`F?T71ff)!aHgxtCmDawg2x4WQe+P1`WC&?s`gzZwq%{UqI}_-NpbV9^&FJl zv1{kgbn`dOSr2ZWd!}{na@E02veuJNUOTCp$+7Ix-vb+3kGz`n`p;p5T^fRqpREy> z6MnJ4O;vJ9t8u?)RO8;rs#BpTceM`}XVIT!M+;}2e*V%e2JIGxa6W}!>Wz!3H+b`Uf8K0>g(3WIlKGZW3G(I z9zE|6(^K=(wNs^?MGRDY9`P)0f0aqFs zuFwC5HE&lF-$XSAf1ijt@AnhS7H7RYZP>dZEqjOQYAbEVPT}ck8CyT>^AX%?lbtj9 zL(=B^ZvVDay*;UR=0k60(%M)9AHBq{oiaCs1-``HxN`X+f6hvg6$ZPm_)lNt{U$O0 zkwQ3oCEFS4ozJi3_C4DCJfV$cVRMm1k4W?0#Sc1S&#l}|3WxxNFFou%?j23946H4 z>8c<3!^rtjvtg%dljF9B(>dcdTzS9j9`D}u4}9&{DAw6MIqlH3DTXg-4a3V{2cAvt zSZXy%ZPwh}>EUydW^8h55!I=6m?k2@t-w{Pq0j9w=cHgqZiMXKf4rNDQjV_r>~+8Q z(6wg~H=p!PyI{RB?Cr{nB06giRo+?bUm?=YS$tL?M|(qZ;@^0Y%uD?1E}ls{T>JiE zzt`1;_wCut<%{-Py}y{nW6k+f?e1(BiG)+HjRR9=KVc9 zOZG~ZU3y;K_nA8{@A;v)RJ6>)m8;^>^!GOX!S`;uKRIP-D%-I8p!vDI_omHxuY0?4 zt8caI!E5txeiuKL?j))dd&R1+_H+|pvj5tEXr2>WZ|4Qyu>F4YywZ-TdApuou~3lB zU%&X_-n!xszs_F#cktuK19Ml~KA%2)hP#aS+l86?3ZvAyh^T1T~z z{Bw;x61kp}vX|es{$8lxBD2b4hL$sXbMOP*4Q*^Mq})rncqMk75f;32ztEiHQf6Op z<=O4|Rwn|@>q_E_Ps-U(s*#_?o}YJZQu*K3%-i31b&TC+xTQZ~%edTQJYCnzcuC4e zRo8{yWsRFmzc-psJjm*{@cOZ`ugh``?x!&Y&(pH5Zel*Jv6u0(wB>}iXQNGjzwu-- zwaa3(KGkZJxRH6f#DAuc=5HoZGg#XkGj+rAHJMW5MEn|rolh^(^gCO6NnPuX*^;;h zy`v9hlXty-%&71$fwCgQ@J+=RK*1R(GX#FRCSuV!OnP<2p z-)${gR5<0pIg5ac75^EoD?d2@T+_?wTZM=CqGX4gocfzg=joL%3G?^6@;$iv%4f@W zM;9la{oQH!Zoj~ps-BqWaNbYud!l%S8leIyzh&#@~%kz{X$v0%l~YRif_P< zAiZmXY*o|TBQGWKTu{B+cc;8eH|YPP!?~g_lau$)YAO8mA;hfP@y&wIU*2z(Fj}Wz z`Tt+)LJlE^dwHchtVN`C1>arTw>9bNCtGce(}En4+$w#BQxoUz;a;DddTwov6dPB5 z@D47kxsQcpcV6mTJ=dZjS4nBA(j=45Wt%3s{X8jJskA;|%FPvxCwDK>oP53VZkgt$ z-8_?nAt9b2{HcP(XKduj8u*AMoYJUM^iO!&7)WmZ4E0_x`G zw{D+(#qoYZt>f|?o98ZEr?Q=|AzgLmgnvHwTpr05grrYVzw*qG?Y>r7&URJyueI)- zZ`2xB`9&HgdMaiYJP8Y*-hBO><*Q#M7mdqr_x(xDpX0%_bWWHjx9yM4ySyn6#GjUD zYAmm9f4<99x<;aKUdBV0ciNGQu9!BhO;QN7nfD^%`@g7=u02^^^CBL!6!-=_Xzwd? zx5Yd(x?D;!I;nVT+5ZoR16yBg@C@oX{7C%DGmBLnwq222sYlj)-gMHfJb0p?rAq4_(`hI)4S)WfzK^nLO{=7r&gM zQ?s|5>HU&5eIPcgbEegl-gkShvZj8~nQ!B3mB!Tj%oFqHE`|KnRNA960vyEd)d|8#Ha;pMlj6B0V~ONsh12Gr_**^SE??3wc*m#{P_ic?srxd zZ}&~QvoL>xw}8>r153G*UvkQJZFD)pyt-4&eBmsXeUh_8EH#!`I9C>CCiZ`b?^@); zvhJ#wh0oWtV<+sG1FDSr{H5hiv0Y(X(&E?|R(i3?xvX=Im|=HQvZBdh*^LwAPp;CI z`|F>1XP(KqZ+Y8l;@-C0wwPQsrz*(xuH~+|X-gz7YbyU=w;)+m>yzC1*W$N7?_3;L zZryus^7gHb_FGpa#`-S)EXo)9bjcyQ)E6#eO)Fe zaIkduyRS!z(hWURQq*sK$a6dYrQUWCTao<6+buF*J+`Vwx`*p;igb^q8 zyUGVJn6-Ri{;##5b6-MhWr^|ZTPa)eA{89^vUfhdbzw*1okU}{W!IPQF=9*I8~u}2 z^?FaC|BOrXR^-K=Te`8KxLDUFvoQUoj%umEuCH&Cc~ivV6nVOo|I(N4(#}|&Tv)Fuhw9nl={kcflmTf;D zNGa5?dCrKl;gHi^98mK@-BMaxBfI&;(gOLV-vc6#8{OxDk^BuX&}<5zce3Y0!>&mQlXw*2TCg-yDqGym3RzB!Ty@3Q>=wcc^Iehl-0*-t;-;WK?{_HNnt9HTe;FV%76@iEU& z<(aPV$>oIwN8Q5-aqBiNTmM2s6#<%=$KI4(VT{@1$Dd;c%Cw}~dYr+G`1 z+>2(HS<7L%=^3Y`+?FMxDeprfCy9T}s`#^c@sh)}vU57BcDXW4*`Z=A@@7Fsw0WDH z#@!uns}BSv9t|mC__F=JS<8?44}^X^Uw=dY@r%}X| zKYb{Xy}15i#N_~?xspZlDax07{+8Q*zI5e}WXd1wOYfhz&%HFyMf=s4*Pe2FcRv2W z)f#u7CD$+U^@}s^$xBQA|LGTsicR{*b8+b^lY6dBxqX+;vPMcjjQ5;p$d|8vitSFl zQ-u4Pqmfl^zIA;m+_%mgjNVwV_y4c|r?r3nl-FASu0?jnZ?@zO>7UKg)Seeg`qag= zt(9t1&XU%&*SnqhiR1i+8GhPY^+N+O$7ypOc!3;xX6p#S>WZ>Eb!XFuC| zsUv!lhG3-CW%sm}Xnp>^{0geIhGyon$90*d)G)mEW%tx{N{>ou7> z=R|oJ=fzHc+4YL;+4tLjH_j{B%(GrM=kAH=>rI7Z*z(*HDxL06ZxhVXsJota;hVDX z+th1DVH(a`UOJ^pD9$(*d48J7q^$*U`;`lK?9ZOPEwbHv_PH0=N}hFpbqe3~KG1M- zWp;FH_rbTU#YZjQ?2hnG+S+mGeC|($F4lII{hIlAWR=#mdLOTTA$4w5!d$z8u2aoi zx4aJ@=DoVxV@|~{=H8B@VJ(GQZM(~KEvKo!ZTEhix#R7bwDS(fYh!Lbf1fGwY|`Hu zd+x?-TD_QZF@Bb@w~y`Bup(YWs2P8dK>usVB{VN?nw2?MKcTE+i54+S@Enc{b)F2%1$5lt4R^-KXS8*i!OSe zK6}HC!c(#fEOVy5n|IDb=>Pn%shd1~zP2BdlQQ}Kd!cJQpHD^!=K&q>=?yORi4OG_ zdN{);=;_~9pK^uULhY(}#BKfe^WL+)FItm1XZ6M4{&g#p&)h57EFJ2ybF#3>i`>}5 z1^EY*b|1Ugn4$h?@5|a}>+Z&$UKers-_K{E(Jdzo4f-8yqk6ZdrmkIP9(yq~(sFk2 zH1lPbUWP5uho1gMHj7nS4>vjYp6H$} z9?`l*Pe6NdR6^#Gb$xeNrmWt7S|QS_WZ@UxkUE1`PlM)_$+An?r0+boO3dV`sjnf= zi4x2&#jd1cprRE zuAK37%c|s}hxQfef*}g4Hs5e*I$@M0Q@|3X|1>>#8h2Viv&`dDkNv;>R9Sp+bNTvj z{eQPsY;Rt^Ml0~5(>g__2V3)}Tc3FRQcf?Deeg=dKE#-YE~@Dv7B7*tX36R zru}N)Q|3uxu^BZ|o4Sg5+|I}Em6ny?TfMnnf&0SB5TU!ejQTh3K5AI=B4)1Zy4{wd zhV$0(ZO=Ja(#JS2$6}|3;=BoJB9BhW&EVmAcScL9e@TnX{iKrHUV^Scdmc_T3yRtu zBHs0~BY*v-ts;-Z7H^a(zjITJW4Z7_!3lz2WIf9TZSLQ{-mbHCg_YoBp2sn!PcKhe zplVWj&fauIXH)sq1p5aOK9AZ?SRXrO>Z`Zc;L_?zk2fx=U=jOlz%5lQw(3>J+Q?bD ze#h37#J+OsZ4oWGy7!ujO~%=#RSKpv(|ue2N3TC&Zo1>21G!UL7^s~aU zwOQexi1sy;3q1@b{Z)(jBcAh}3~ta)FPrIpcdBvZf*J02yNosOEs8kYe&?`o&ijjH zAL33_yo%|d(miXH*Tk6ZU%&l7V0d+osk?fI3a4A1qR5jD z!vTP``GnNmHNS=Jjupz-g!rF9;qXbQx+UIzD#-ny?0Pk(ma7bU-JY&`Lq^Yr-_V()yp2&XNyFaMaG~&Ad*7DounZ9f;+3>O9 zt?OSAu{6Wu4qglAX_@oOzg@LDGBe;?g5X;#QhyRTH46r#`bA!FOb?8j?w2*m|u^7I=z zD$7+?1O}dMn3vOK{=)j>6ON43rSj&U6S=b%WrW z`&OAFy=H$`2rHdazJ7Go>Z}6OGQBkQv+F%4o?JR3O7CZGw9bV{i{qu9%S#`;vl5#Y zzUJR5 z&NH+N=YG?8wVAI`B_;NN(-Ws>me;oBuPfLZT57!R*73@RlTufIdT{mP$Nb|5ihkrw zbZ|)zoZx#d-L%CS{! z>9L6!XH^9XXD*#ln>5uo(J=bs$@j5O+xV}!EA2+<+~)kXKVgA zZhy<%Ew{Mq!A$#gDHBR+!aR!Qybbk@SvR;}^QaJyl6$bt;MMHYyH}^#oe#Rs@l7s1 z?e%<%-l=P9Z-n%f=7l7i=4Gv4QM0Y$h-FXAMWt|8XW?)18tDf&tP;1X<;pzABvQUd zewr`G6%}3A{scFSKtoIPvy))Y7IERc`9ro9<=pZr$eiUCZ9nb7fdb z%IWTam(Ld7335DpI`M#8`{mpGb-Qy~x8Gns{M_C+PWcaS|EAWQ^;_AenRU*e#HF!v zt#xe7l2?KpIuFgdU*G%t`$*95^8V6WXSPOfJ1rdf{MWACIyTlJvTd(SA0ArvbfxI_ ziym4gixZ#v%v^b4@|PEXe!MOSi%s}j`sGYlj>XAC()s2~CQoi%^ElkuE?a`vFfvPa zi}?C0hhMFq_QK&k=iIHPorU>V4T4!x`(!5yXqzd$T^jv}>7-8j+-T$Uh5kN{-U9EJ zFEx6>mSZ1zA;dK5%95!{w#Lt=q;OmLDfz1(GJ2K4A?)KVzvDu|;dcI>Fn4DSz2i&w zJk>e4W96Mf@2>eR4llZnwrZ?fE2_Tw+J{xf!D|vv`4(RKmC+tF?@)%v;h=vh#m{oH z&i=`<&tP1b*ZL_T;;LC?@Z05QUZr$iFZ^4|8(5qDyzaxiRUeh^Mx-zN64!L-Lj`-q zo105(C-~l9$mo3f`_|pfB6}B2bbp(%=n_{?$TOMZgX{W=!?=7 z+}atj;1ON-1c;_*LA=1g+@o+~(U3Fo%C zoI8(a{C4g*z1noy`P34&<+YR7+>ux>GPgiNdrMz@`mWy||)OXg4B{a#3K215u( zLzd@Jp@x)uD+oQB^=H9yUCY*ck?KE@g=&v^}+shu_a8)XKca8lvnJorS_grHA zmt4Kz)$?4hMczMuvZg#=c0AzBksO^bkrUS*$lKQ`ekZ8${}z?IQ}dRte-iqu$KvDL z1o;X@x!Ex)m!5ULtO$JKCb9j%3G;QX|9oxc`A?YDHfizqhJx-Fv*z#M{AFKv!a1s~ zhE;s7X|#08yGg}GGSjn#Ef(Ajd$R4#veOzWGS6SG4^cb4G+`C(nok(!%pc_zZL!KFV`h@J&>r_eZ)4f{a~;2 zy;Hew49l1@9{%m!CdX_%S69&aGhf1mIAhrkp+?;g8>bWm2ev*xGbeAe_v8HOtT*&l zpV_%()uuM5-I~(EZJBe=&rs;T*7@!&8`s*du&H+?Cm6fR$!u?TTdW`O)okI4{8=)l zm%=Kt*Mh`}Rq0mOUiDb+y7020bXC>E_3OP$FMpizJGDLeHLLHb-I2#v@U7g- zy;VDSqGRz*&Gk78JZ(efvc0r@5u{Wu(-+mvet+5FU(;SiT>Dra{ocx^{cg${fzPT3 zHWaEqo3t{g^lP|n^|AVmDGlsTf@a+CINe>7Au!$G*@=Ett=&`B{#7jfuFWg^`*Y;s z@^aN_!CPF{W$fFys{e`ZOV?vRUrjq4&7rDY?8=p{dm?($&%R49-}g>vOq#}MA+^`q zuEN-==F{ne4_|zp-JGspC)*ox!s_LuDTh<;XuN%EzqL~6WCYKf?vK*CFM0PocJaF` zr|`ke%<;Kv=+a5enfz}XWG!wr-!7ER(2rJCe)UvgiOtmg=PaizIC=DHjL)lg4?ma{ zX_nkM75Ve?ccrPE;>tP)+HF0a^_J8x3$lVfYjet5nx`SqTAO<>OK ziQ6{U^0t`1{auuhH|@YDrJUXkG4&F2bmdZ`E?=M0uXZ@$@Y9#40<`3Bu2b`u@w>Eh zYL26({+5ZJ8E@zF$j^04Rj-n_Kc{*3zj&DLyBjl#XErWadqc&{?$2q7h)>tHUS6EP zYWCW7SMp1xM3)w1?#Oo!xiRN1(?%Jma{e3fUOskybCQzHR(ZdymsPW3T&Jd7msGLF zX9CmNq9slbD!R&gu9;g)>9e}qUbTulQS|-(yv#?NdD$QQ-g&L;gNdI0#|J6*3@;tb zmz}`;X!_fk5uiD=?-`n1Q zT=Sa1*|o-(Zu`a??T~vaZCS3?z4_@}BY(eVXEUVEU&?VT;p8pv@t=MqEcnLS9Jlnv z&Z{(n7&7N1*yM-xJl44p?yEmDT-5J~^>UT-cg3#owVB%8@(igin!Qrtt*rj7?iew? zq)A*446Dy~es#MUzBA{I>E$@>JzhEtA9rYNVmmzR>b|n+lipbbBnic*&G5hQbbewT z?;YlwXPncVjTT%!z4hf`tA%|V)6Jeb=r~aZh!5v%{>NDS)Qd|X^*LHSKy@7z&kttTX0Rg|0itko1Ncf z_rBQqk$vC92*w*VuO(d&lxJYLLUY;!6`ZkmYO-Cy@_oVoKR`PZz2{j;udgzmF>dG?}mNo}*5{x>F` z`23>+UuPu;uF1%2cGQ3ADY9#>!xV#s3%t)QHLu8zQH`BteQk=Wzcg!L84LgaqCZp4 zi?h78nD+KS??f6gjTfBxx{(Ij72*UD|iz5n+$bJcBizBs)wO#E|6 zkn8iWI=7!K<8Sne$aOIV6KiG#&FNe% zX4BBHEhuiO_>PaAH$|qarVBhO+|ccylHN4aVt&Q+Q;P#uOcgVD;HtB*P0CxS--7jd zLwBaLVpWC7ybTk*t@(5_WYik$rk^_WUHiq5XHhcB| zzr4nJ*Pm^u zIE7ow&xmFHA@_F65ed(&UvLm8JQzjemz13auUCBl8tdu%i zSInn3lUBD+&U>-sNWX!n{K|6q%42q)-fh$V^?cER$xS!+_J>Tk7WhGBbr&PM#EIV$ z%NdoI*#~s01>4w|dXSpXnGf-FJ>6BZ3#BTDX_~4e(7<11k znPu}^tY)rVA0MgiY`XJ7i&Oks&9}2s=C(VQSeO)ObOv0G&ABt_+{+WqI$!HL$@|0LfiiJ8i{tU02; zO5!c^<~rfej^8Kb9+B6bx>4aQ+q)f~mq#3Bme1U(elGvy*4StWY& zeXz6NjJjP8|IWXPeR5oIbFd}v^6bJ5X`&U^c3u`*QC+m_;cVOAxqGZ~CvRJEFZ;6Z z9aXt_Lmn>U`;3`!y7|W?WnM(DxmA8dNN(}LNg|S~r!0NpRnzvh``@1@XAfQ$`#wqO zmZffhv~5=u+b(0~qUYpWHt_9@Qgb{798_tjr+r_3Qq z>1&N1zn^)8FoU+xi*uO^W_8+I+DFQ*&n& z8cF-DOK#ixyKi~UlEyYyzd znZ}}rZyOJ7-;|wjM)uR1jOdliP zn_;(bnpb{PWc{c1o;gYRsf<4+w%2ahnQ(b^`>u^0bGQN*yfEc;I~+c-S7<@&v9}L) zZt4+yeQC#*rCt^GTV{mK{tzd-m(?~X`g+Qvrbi2RE#SFX7+G_OVgAvcB;9C-h~p~r z)zl9paH+CJ7nHEvv}TmZTzk3d%F5S~qLq;>W!i`A_h#-lKB#{A@>Co4=e)ZQYOaC~QB z&739GC)~BbVa3b?G76c`f(k^R**462cVE-cj!`PSdh2%PM2D5HbS!#qpV3z;-JqBr z5f#Qezdgg=QF`%dUU_G={8=(*ukGA2eedCE(uek(cbYZn%I~b({j;^&B5xLKb>2C(;k8Gb*1<1z|LxgG@r0v+McV-xB(37*29^_Z;Eb>Bk`XHe#a8 z_d|6XzA+f|xK^(**na58>NN@BeC3B9pN+O=*s(PE#*WtyqpV~Z^Jes2y>}!vCh6qj z*r|WJG>ei{`cPta{~=eiw42TqsK^*G%uRm(OowZ( z=hAIv8eWQy_002)&em&M7z_YW>P=!?GO7o38^E zd40J*-S~W!q2T{EXUK4GXOYwW!-;M4YJRR;Ju&TVMqs6on%0!+Ezs?o%cEz5u1H(-SSga;m;Kq|7ff| zV7X`Z@_(A4GLEdwwqGN-Pbjg)mT6|c*Dx^EnLqvNM5$#z!*|V4H%Wimy!gCI*cSW1 zme0kzQ)az(Te{TCN=V&grs(Bu7i`v*-)vdSzUoWzxt$X0X&aB9iC3N(<$JU9 z+V4L~nd)0qI=6<*zhtQ?Jm=s#|D-h=esCvUW=bd*7N4jSv1I;>8@yd*x0H@8b~uo% zye^ud>=c`yFy2b5* z?Lo<>O#5Gk|D2|s@a39Edtpv)>AVH8IyGHs)vn6_EXt~qk9wYqyBt}2=Z-d0tKYLV zr%TuR)nxkZX9@jM{PJ+}g{O9vZ^dlGg|5t!{OmAc%7Z0(i`{qVpAM3`@lCm_ZpyU_ z*Z%Lht6=SD$2hHN?b>haRFCAJnr#<)bX}^zH?cc6l6={{Gbgl4`m1F&9TyA;R1z(S zxfUX@#ryK9Dz(E0lMJeyru`|F^roMz30#lzXrFfr#eK zuTjOSqRmGVPG`Q?61y{bUDQH>_eWSFcc+@|cB!AJA3iBUZB6*+(+R-my4WttX4QRr!M@!Xg*!oOCq(*rp%7t0#SMGvCR}rFSFQwVr4G!$Cew6A7ElKg>|0iX3oUsd2+j(B_=9^_F#ADViiI!ILEnrq!viq&n z{dt$g-Uv57ig~W{@@GxRaeAuM6}#qHZJZi#>L>WH@W8;N}lwKI7P=bv5_z3WBB z-APBksjYc+BJ=};?=S8zKD_)d)^BBAv(VXSyF@r-BlNy z3p96d7=0{atKM-rZ9^N$=f z$>^TCm3^(X%%?wPi|s01hF{yJ|%GGY% zKQ9oG#d;(5y~dxuP5A-a{qBCZeV27ETO?oq{|l|^fBPP%mzrCZ9k?Fwr1bE7|CHEI zlV<%)3rSmDps}X1|0)OLT3e~*DvxJ1+gJMcd$nD3+In7R!S)MWW~}EexB91>&rS<^ z9kAx=ucbUuS0DbtQ?nP;SRJn+>d88=y`$xM2OZBFl8?3-V^ z;7ZYIhu+pnJ0q`(g{+!mqddF*Dh!c7M_R8f0#ypg-L zf4aMAWS?#6B8@#46Wt;{bLN?>_^r>HyZhO+f`yW{7tU42$Jd^W7R?MjDfuV)`Io?( zre{L-T{XB?t|LBu_KNxs9PagVN}IlGG&{Qo^6%*Q^7-%IMjJ)OSUw|n=j+xSOXQO@ zOy`JsL}|yUhrFtK;d3BC%kRpu-!b+{*+1;`+Zg_?S&==F|MjDwlxSx2LmiDq|5cPf zzW3$QVcL7FDVts3z%C7eIOz!WWAYOo>^QNKJ6F5?c1`D1|BpRZshfnAUbOCD(`FKh z4tyK9^4-Jg=UnezZNIZttd4<0ZmV$c&XcS9m}dGqtBN$rKX|!t7XzQKz(SD|0&RRN zdTbpczisAsK7GJ(f}7GI$pF`=$m?u6qSfo0jHVroHMZK`%X2+rvd&XJ?91cpSlfpbyG5%r$o0+>|Rhk=U~IMhGRX? zjrMwclwq*jf7)&uC--TQ`7Na)tYH(Mr^f%x*3yhy;*%$#B{iww@n1*K5PslC8aZ(vz-e{-!*ob)Pv6WzLBOFR8fn zQvTJ1Z4J#fsT19DI`#7A{(F45eMSBL{a+VWZBTu0n|D{)!8P>%7SX%!cT3)}IDX8% z-*tA16eH`@;6v^E&bl8sYqhN>)VEx0?o?Of_YYUzFzRwF*4O{UrG0#m&|bdNuy4v^jPpe5&i)Imb^} zw|XX+7+*T$xO>iqyzY$&6Rp^d9=_0BuE>2uXRp`W;K-iTAM+mEXiF5A_72#PH1S08 z(~^~6B95`OZF*%R`{2~q-WO?;QjOYYoLh6osIYavPQ|4a8~ckU9yH$@ea-UKyY3YM zU9SVaJEtWTnb&09JGEG8Pn!B)BavgN;er>RXuMi~(O$PWH2=ZcWzjP?KMt^Z{^n+h zuCC+p!Z!dWsn!3pBF#UE;n>>r7`~HQe(F;>0(xI6#AF(~huN(BwBt;MG5d^(D_50& zIabfNC3u^+Z%y;nU%w_A_Z3~5#dCS{A`>~SsVn#0URL~S#$P{e%bm5-%xk)THq{!j z)P4PYDser({bc*K1%96`x<0J@7P_w4W^#2hpV{vB50ay5Upst!&HhdJ`#<>rZ)O$| z1_lNW2C24==$3iKOgyX%43~Hb-;a=-pIeZeS_Hb~bZI#JZi51@6K<&o3%@Tt7N%3M zNjKuQXl&bB1DnQ08nbm>xl}~mrGMQozp^@2b;a$M&JObL=ULx7?fi_XuD<;5^*^S| zeWc9x`_9;6^VDbk11pd8-FsV~J}R<2Zm<6^@B9N^V=t#e?`8&6 zwjE25JZYnURjXOUi#s|)%=N(Lm`rXLuhh<`UQ*|0`>4H-TsPBka}=9ey2#z&4O}{h z)`w18FDbRI@zEsiWs0hj;;9|i=3PIab$OjhcKEh4JMSYa}*hK47 zt{nQZ;dx2?&&5p=%_o9h^3+e~jaihISo=hF|M9m9qV?uOlj4fA%#S76y*qUMPRQ%GV!8j< z9{3X@p!ZiaXPcvL#18p?f3~;Y_bO99nX0_=jml}aO>b26rA~JHB}sLD+Jay~_t%r#-VO*OkvKYgp$V>XQ_B z$V7S59LHrQt8c9+es#<3;i`hZM?yt@Qy&=SetKXe5Gg9lwb9DXTCO&D?$z3=Pv32P zO_Pr$F(=oYS38&xY(Kjq+GlO{zIQ)z5BuCcn)5U?%*L@~|EKrYh2}6nQPJDkyJ%&i z(%gf8ME8VllDxjFbG<=i!f*F*By3$=U+0d|K)+thBvy4MP=4F45SJh6x zx%Ze@SCHer%6TSsH$+m8xp;Mb%2vBP|Nam43|-GUTM=1j#hnvmf6K=xhNkGmS*IJi z$#;cpy_)G_Ds!)K;_k%#jKaSDhVJWD+@`hzT(~ee#WNILpjpbPKkvFT`vi~ zynN8I@4-ptdB--gO#U(9(h2{|ia$8H9~}5}_LZuU$Ud`Y+y5mySLf_=#Ni8bY&xKq#lbVxMR9Xx=vo!o+-fc61fA5z+n8mmy+&d$P zM}ns!;@Ps?fc3l^a^5~jW6}*Yi=HLoq174vrSY3o^`_b-D&Ad}Q&`*H9%nhS@WkW0 z$9KQ)Th9FH^UcZT7h{&hM9R%gi?N)@ou~F>N5acl?(QEKA7q^QGAa8=*4q>F>nALB zckfsJQ{(M7^|4U*vI}jN3$G?jklw54IcfSj6C2Nt8wqCxmrW^iJi^DuFK1&B7nL3% zrRK4Yw=mn!@5!Yp6{*sS+g+ZkT%GOYk(bk>+w8bjTR-&GmTB8&Uf4bHwwTjej?GW@ z%-r;JlY!OKGWC=SUgNlxn;3uiOfCL6?|fGGZzc(~T?I+Xb}hv!XV&ECiXE5E+d3)f zrpNr3O{m$*m{|roiCSB!4i_18zAE|D($&9g9 zl`qeeeHExMP0eW{YpmK)ugiu96|OoQ58G1}EEzv-bykk8>t&}US6Az7oDrU!Ci-0R z{EMT@Wf^of1?_s$HM5J4VZ(xp*=nkLUmSkZRkNi3MT?H!G3$wc+vS{6{Qu9j?#sLF zD97gVN9v~A`)xmd-1}SL@@3ZpN#}_k?=K#E_;_u!vh@Ctx62*RZePAUzs_prgiA$} zT0}h7@n}1+KQi%rm?FX(a3kwaI-g9~`;F7Q+5Re)*7!brwJEH-n-bhhv)7 zn4Za*>?0u^VWIZJ(<#k&!VJ;HGh#TN>IvALKksnmbA{fT=misEx71uUYxL~MlulOY z2`lV+b@O4a>ZS#sBa3Y22d|%eF5|TL^h}?vqACqtwjp(AReks_U%CG5Ww4s=0+x8U zR>plNl;&S9eR95u;pb(4?c&8p6TLm>ix-H0U-|ItQL(&2=U-tLFD?-eouZ~Mp={i< zIsDMt_ANy-9+VXY?ar(iPdZfO_6h(8-m;S3Y+&o+%Y|XUtn(2&e9x<$#n)gtFi(sCQLo& zCh7O`?u9oT6*^C%pY~qrcI=PXQ5M#g8B`Yxd;aqUbM4vg8z>|3dHabX*>y)>sQig*yKfhLY@V2tul23@ zbN>ALH2tT|8ika*OE+KMJlWuU?@mkmSD&O_H^dyddZAsz*?Gdpkn|c4@9FOM8F{8{ z*%+Kvp%{58bM>Ncc^c2G`+u$ewfV}ow0El8TciRRJf}YmOxeDz^LegM{(&R^)Piqb zXjt;JDC0%+@3XhJ$5*d^lyCmqdRevA$GFoK0*f!cP!pAA{u{OB`p#?SvH5Y2E=?1* zI8ZaMe(Tie-4BoM+qQSoiNB_IT`%}(ZhLsp%t80Q>b#b{4Ob_eJMHwzHNEbR=q>hL zFJ849ROB#~PF=V8e0sU9u+q%M=IhjI_TRYOXOpqvu0{ARznq!RAMNsue~@`mX2Rnu zQ(r`G+wm}C{qARx3+7)65B=V26R}B^Wj#yO9M$(H8s}bZzj`(}h+)BRL3fb@&(>{^ z{ZTNZWWUm}Qqzj#!Pj4xzcSgm`~JsW?>*Lhuj%gGrg{G5@qjFq;MGF5Kh*grlqve$ zemEm1pvB>H<_%_j)vqqJ4jWugDR=bJK%I@~I^a?dxdXGEZgKcQIla6+-R zqQCvP@Y-EusCC9GVwzY)qHXC@&DpCGqZ6jG={OzBIcIpL7Q&{c72ymKw>RKeBTi$!CVeY_QlRqGjyLi%cq zx9)1cvgxFmc;>r5OIgj?biJ2)*W~Zn>El{h{iL_z$lF~>>f!Q^!c`4RLj+kaPRVUO z8@Ro^*YZiGba1&-*_*p;jtw6-uYDF;lrN-sdC{>KYBBj|WL{UP_3SkbyYHIw?evGc z*CRaQRL-|t{PQ+eyFpWcr~25*9ja9V#!AO{B)Uq4j(u0_iHY0zx!`!jy0!Obw_fzi ze=}Kj(fk6l-R8zDTc7RXT<&w{>m}bm1m;^W4>>#So+k8ixbguKnjzh<;Djnwgzf;{uB{TW#fw*NdHru@H6RZ>GTP&Ddx`uf@_vr_m z``lxUgV$fTQ1`K6nREKZM{Y@5YukGBw$97-P9p6bXVxFcR9{|}B8xi_ zWntm8nEC&<+WdR6#jgEg-KX1X?>>34f7x6(J#fFk{`I=?q7CeAYixgadg%5ZjWwB~ zbt*Nsah}V^3-k2lZTT-OxbT1C{)vyHw|Mv5V*SHtT&1O(Mov`fR(-Tq^Rc2pzG3|fS9JeTgXVt$|m$vwN8_E83Hcfx{?w-)U?-~1EaEiAJ zKK!Hfsi66Sdt-jHAd7$4XO^8AbJW${$~!8{6G@miSL{=r9cm&B#o!Vj^Zj+3OAk1(jEA-WJ_eo|9%{>zu|CLda2@zJGuJsY&ey51Moj zA2$%onU?Zqxq1G~`8t;k9?fi!WZZTmu;TpcH1=oj-exWcj<261x^cd`r%H))P@UJ_ z8o}1!zow6WP1abJIqgTx6z9*SQpbv)ah5GEdt}jfk4cc7ajVs$lsGdr&D@~xv6rsL z|EM}}k857+^TwQsk2#-g;aGfNWm&{Thl4Xtw4H4F{axJiK;nPnvd4G+l$E~ntFxQ? zr|8?W<&$mM?5hOV-RfW}*cKzU)4cabrAE<$nt4AwQ+yVfzIbT=Xu7oi?9X>3uH3lQ z+QM1=I4gL)ll}h4<$LV1FXwHtmE+W#{+DHjehXv4iyWzEXZjnMH!~U@Etn~ip3~DNW=T%fJ-+JcjvT>Nt|8fKUJT67A|GDf#CpCw?pM)I4Mn|=!JV!J zSG(qCtzEpTG9=%A-L33wQ>!y_|4Jf!D_`;St_$3|`p{$B7h4}Kk9xf#Yn|J1o6gYR zI=aWcY_&??80R<^iwUd0Kn_#p9|BQ<{t0T)=BL(@lludf;W3c{&aH}!L z-pV;0HeXtO9gbazluO<6=~~j~h?}vp1{%+Mn^V`vd=~z8?sQT>DicqIh+yuLRW7=J zE~hZP+Ihm^<^m-?q5Tfin?o87YfTnlmRb4OA<{^|DCF^qSiuus$}?Q${;0ivuv9Z+ zs}18;`Ojy%9aPmUVi(+c%%R)%kHzE6q|_OY7wzE@ty0?2GT~#rh@wel)hgYfcg^Zg zH?!+&{b*=(Y_Md|emt>VfFX9yk!>du_2a}IG<2M|tv{=zKTrIg%(S>A8H``=EvtFB z@Z0%GN&6UXe`uMwZtHzT*6RxvTx>X=;rz(*jHV}Nm;x8$;}YKFMn2{_pJt@Xt>apt zbHM-c%w98-RWBa9E_mB)`q)tFZNotUzuRuE^2h2zST1n=Sd!b@u&`kc=YieNZKhu1 z`=hi`;kfsLy$o%=7Hi(5OUzEmHuFy~4?e%&J?X(qIcxWG7aKxj&hJT;2>l{v@F{4n zzFhA!HrvlEza%FWNcDX^{?n$}`SecSdu|ht?y~F>x-a(7JX z{YxM}`Mb{NX|vVyv)I!C@i$JLDEsztM}(Pq97n{f zOP@C{*|~dp?C#6Y7fzWZ+Y(uQZ-ednj#hJKMej*h6nsAK@mMist=}fGCxOyNa=bSh zSS$p7>Akyd0<`#6E+aq?zqmR+qsBiXA} zSPR(m3TJMybQUST(A(g`ZkK%J@Y%~byiEdaA&<5dYPS4+He*&&*4lr+zrB)w5z$~0 zb7~Qby!c$C zz~wdei%$9rNl(@ntk03*n=!lfuF(qB8-e0CG9_BfqF4;|{-eshCw?AY__kjz^LpGm>3Er&|GLG` zx@8==`1RPVzuWgpy0pJI(>$Nm(DP{$tKzrnz}-vT0tXi!Y7#jK=L=?>%BU+-`-tt(A!}Dm5^YW*j#BQ4vzNdWs}YXW@kOMw#i-3p2EPf zosHS$=avn*jTT*nb_qYYWTj;-e zUXgVFOeSl&73U=8)H2FNyzFEaUn-%ts@eat{mF1QXUPZaMO1jcrC*wPK5fINWuaYf z+YL@1j9)gB*HiEOy0acDiW<8QHeX?oI>S^I^h-w8?_NQ(w`-X116|iMi?8kByRYW= zWAXXR+f3hoP`U8$#=Hq0ms*VMmh!xNo9eGw-;mewM?| z{d7A`ssCUfr zLFTco>!+==PFcw%HQnL&+#K^`7dNydY5mdhx!qOMxthJ_z+`FVD`oecnO3RyM0rc( z-4t&t`gDESgWZ-pwiL}>T*~HnkGZs^4e(X zEcLuswwo+{&(6M!m9xb+wd&fp*Re%4YlYL4HtnCfeXHM;M%yE^U*5Y^eT3)s4_~3r z|Kxt~`P|>QqNaJZ5R;x7OVzJ9!Tu*~f2#G)A1R!(n{g?Fzl6z`nSYr#TfMh`c}J&` zQSw|y*QwS`R)&6FR;PYUzk4r`yH{S?Isaqxo2MU{@15afw`++MvRQK^L#hnp4lXCulVA8NpOMJe)$*MRX6TrzM<{%_h-XS z2B-KC>+lydch3-g$ygx8;+7C|x7zx;`Fg$k_jn3?lYi)obJXp5pl7+C;jPEkr`$>Z zCp}&0J&|dt$l+?0xiRg^3J*?IUu(bdDx77BVe+rX3hv8nyK6h_Q{;-S0Tpa>?)S_SeQX2()@^ z^0wsER*_liQGIQ;OT2}FK;$C?HCv?je82IZh39wWd`A7Hu6dS5#tktx_u3Et zlbvJv=hA!cHU2leqc}cCOf5^)DBh7A#dFW|!d~0DO+3=wmmba-~4*(s?D30F78)TMFlI9D~>i5yr_D6Hu~jhVTKKJyj(;@ zLK_zFIW4#=yMc3+WK+YmZ#hPVH(JtnvP)lAT-F{wCFj&<(dQfYh%p&BS}fiZ;wOCd z>&$@ciLBCRK3~*65-l&EZMor(+a;fCu@7b#B%jn;_f7ddlef^t_RpKm_s{wFD(-L9 zuU~I$SNZ>rHQA6NAH{q9=#NXK)e?!5{<(JteN-~D4(4xhyS_Q2czOM)S##r*{N;X5 zy&Dy5{#ATM`SQFe>Ytpg!sTm9Htet&E+k*2lUq8tbVyDUcQfw=b9f^&nosA(;ok-IXy3SuJ3`) z%r`UNZ%SuAv6AhRdC0nZB5h5(CJJt5+!LDa62W#RWBKaOr|RFh%x99H@p@g?A`zb@ zTHEFt==9y%H90Nw>e_kxA768@)T~>j!QO1HJ2S>4JRx(*Z1udZy6&hSJi-xQ|6Z4Q zb8cz&WX@+Y%fE3r#4{SLyb@}#^kr(}Dqw+VuwL{MMv)0p9_yAxes{4tcw+|N7P~+nOO3@x&o7&&={W6bq^!#Q4S%9d zBf0xcHp(V3H?Mrh@u1=G#~azFdk>|at-YVMVwKL!g;LWi+y7*Loi;1)^-Epf6$iv0 zMJtLQV(3a+-jMppmv;hFjk|cZPwazLDwAX%oLMzlpMB?vm2Pj^w{A=nQAp2Ec>4CmlXdG^*0}`>?@3y@PRDKkC+CkWsT;0dP-H6(yfx8JoH^_Cv5>l+l~Qv& zw(@J8I4-Znq2^iibWymZTSDY{CdE|>y{r4JD;6^zztDNS?gVRUyh4~KlU?4lxz>|U zcdy?3`Le9TI-3dVlDm61-r4RinmpIf<<*HPj%OREPs==3yg+7}M)(uy6B*j~kCpo0 zu)bgzGwrEp$kpXc_6I*|6tDU)&9vmkQfJMia4QB`PtS}^QtNnBtA8)xiZ~wl_Pgx2 z$Fnq<1DH2FdSNaWad@tBnqs&}rKQ_8oo^wzi=*ZQU%u8bVY$)FCHvl7We6@^(2_AX zBE@N^d*QyX;S;3a&f(m4;&aFx8M(ASicho?ZoWu-sdDqrhpU?(7MQGQoTB=9R+Z!$ z&O=68_k}k(U7R(iW`^oX&ObA&W`>$GJuN!kao?t(v}D879&3R=UyWWbDgPbcE^l|| zYh$hP>-F+&VU>se{?fauETh9-*3kUmv`A7wrPzUpX~}^L?KAesbiY{HXRKK?xkDpv zrOgAQ3FnQct_*tp?y}swSC8}`D40Ll`{8&?dR~OuX4U!JTRD^z#O|B7%ZVvjx7f-t zWy{*x)jzYV=KAO!V{J&C<+qcf@oV*2wZVk_mWG*?=(9qhxFeGf%$t9P>v-Y?ZKIT8>RLQkdy8A<{>*;`Qx3}qzBOsq|8sJ4>2AULhWN=Z8k3b~I;?na8+52oJ*Mi+ z;_L6{@Kl`sdCD>P&;G#2r|agjUDSkKUe`N! z?uc(=j$YY&KhgM^+p3*^XK5)^tFq6kn`I_n>U@=Fq1BoxsiC_*s|z^KiJf}>b!>;m zjqoC#g2zXWwcF%GHm+agutu!=q0Z!!OMYiP=~$73*@dh9YOa*EeDljy z6Ir)q$L&u^TX!$nrrtT}g~Yye*6qfTnKu`{abt7lD3^`4Ty2%w<8Cg}yN0pt@r(X~ zpE_aZ`yD2vHs4yLrF3JS$;8d8N=}rBJvjNXWy;nS*wKj#D?-l>?a7vHP zgST6^+&ohi9lBC;4f9VKkp(Qm!Uy$T%qN_`@A7HlilS2u(|&mR{du$HDSQ6PbO#A* zu47dZlXbs{p1fW-J@($3Et`~MVw02q6{W4%s=H9}*z#9Wx{({X1mbL!6cm+nuUw6g zkbIoz)Did~dGE3~KbiZS$?bEGep+-Z@qA_0hA(@W zbPudF?wo0L_yX4(MwTBNubzCF+PBedf!B)FlV7h$SfH}9k#C2;ZcqBRF0S^=TWbGA z7nq%rc=zi1(x;)Bk3Vg$HI0hvR^samZT?ZRU|+b4H|t`OZBbX zmjy02Zm6GgRrztXhraQP$HI9MnlIKke)jtIv|spmL`28G3|;dVetPHi>r4MX{&M~G z=F{dkz8{{!#k_P=(f!!D`>K9EdzN!a=F=XTqPpUj`)auN_Xr+VPCoGD>67P|k9EAC zvry{ew_jKG?y#x9Dq(Oa>WuI7rOc(m+J0wxszX1zWPYEuoc$Lg-@5lx5~RXox#SeC z&p$Bn=a-u@DR(Z2YT7kl{GD>=(#6S36Sl7T*D&+?B!wTRrZ(?;Td7%W)|UOmE9u!f z*4r;!^RK?D&&xR<>%gHTe=2m=rnuV0Jq(gz0n38cg)H{^GJDS@*4n8>ICDMl95UQYId9fu`$c@g z%$)^dKaH{~e{O&Bs@3Br-UUttNzs{#7JFoua=u}x+WD$F{Z8NOqfsk_{%+IZDB`~7(coLUbd|Y| z*U@_~K5pM*6UrcRtnI47(KPiJrkk%$dY`8<+g8K$LD;|CPSa*!f6_rf!h0QVECMP0G&&yaYJmagu_2SaYTYnd>H`bcHW}DAWllKdH zs#t!WlKhjq;?(tsgOhZ!w_B}Z@LRU?)KT7&nK5f8<%zll@`}VKxkZalOgkkJ-vs2-IM|`RbW@s%lD*qYRw5y(fm+0k+sp+=54mY1I)Oy;zL9Oo)-@lGl$yWdT zWtSMt;{GbCs&=xk*|qoezCz`la+|MAbnggWd1%{8&odp1UoVP_VoKgT`S9tN?}d#x zOIEU%+*%QR?9)<*-4Cut>@Jj(5xCaeoPRib#b(Ac>int(s$7v$@2l>9>h#&ZE8(u~ zUG4SF8qeI?m{wb`=Ck(vtnG2_uQ+adeEFK!@0U#a9@San?lsrYu<~ALz}LR2W1=m6 zD|X9uF8F-!zx36C`s+J?J5Sy=_rui; zVXw(CCX+w8IIe$}v3*CF(d&ri$)X=N{)*POUf60@!RyQY>v@{xW|eo=UvF6ibrlpC zvUpqVjQI8La!XT-U+1LC{jX#zy=~Vvay*}?22-Q6@t2O|CzlGI_s+^Rni%OQ9a3K?c&V<@^ovmsqibHow+02xs^*+W-oKwL z<~8`ms4w&~b=D=u1LYqt{BTORmsNU#p*DKDw%n2H3sN>o*h$qNIy<%UYJFgllyIN- z8JEj$=4_IwHH;E-!~SJDvldP@QRC6okM0gG4!3Gv+dO02&J3xY^^?~Am@eI=?{z&q zYffKj-|i)as}1U+7beAqZ&L_3wDr-1CO*s9wl<`>J^f?pswKSazTfh=#oYyWPJY-qQ>E@*NawSYFZSO2dFX{r z-jeC_rS|UMy6N(j+g!6I?w{ADSym+5S`HIc}X`@y}VJ?l$A$U2PBNtuH;w zbdn?(D%tWc z{jSk3|7nM&Nk~2KKR;oAg))5wHHw@_z3qA-WpD1KdykqN7A&23hTCZ|2=1ab^-1+Cjx8#y@K>|{XHuJP3S~71{ zP#5*RE+Bh!^8-uEsaKnmj^3KE_~swpol(r1j^2(&HyEaec2*r>&}~)--=yL>>H4y; z2`Vj9r-rlzC@xvp=DD!>!OhL->e{&?zH=L%1PM0JNI%5jo}7BrLSxe9Nrh}yd`-`M zmp*ArU2xKCmg&MJlV;uZ?>6bR*v&d=Ti4>vmoIO0-n-!CC!yZ-Cv!S~)d}4(yt1cY z-}E>0I*&cG4xF#-lx@jZ=W=(y;lz{Hwl8;vy*kSn{rs_A(t#4=U*^lQPwD&4HQd?V z_nDtbUSj2K>(2p(fdZ>ePUTOQIiC9`W`||;R{f~oyJR0+^uIpgUfcwLBvKCH!?}x8eS_`P1?eTrc02GYe|J ztGF@b=#@Nu#+g1_Mg6Dy7CBx~+1_`3*%L>B9ZPIZNG(42xk6Cj&&{)W>%$lDrmzH0 zjn*pq*=pnZO#gA@pCqSe>p%RGTEG6|FQN7KAC>l9H}^Owc0hIU`N|VwDq1@J79<+o>V`Ro6FjV=0gdiQD8on7}gU5Q!0$?Msk>brurPHhPk^z+!kn_Ka?ttQJy*FI)$?3-CmU;Za(uCYi} zy0caEoKt$1CHL=3j~0}?Tl!h{<;3Z7Z$08GUUti_{1$ZA%YNto6KTg)N;DMV=a z6#E!VR#E1)k)Qmc`coWNL`lZ3V>vRtkMr*AsQx-|@mK@HV;{LL+hm^Rf94ln z<+f?%k4w`gz4kk~_NCU!OIy!g2|bj(#<{ZCe=EZYh3t8&oXpHu-f39G+A>+Os~~!V z^}3@oq@;xPHoCHRPr97bYO(QszijXM zLm!jWoo*ZazbEm{C$m1`<=2T9?>?9tuvJvwGk5#-^9@4Q`;W%y|M+p`f!xm9j0tUg zWxi7kqg)nD*>Y0gT>9pl*?SJYJ;S9q_3odoJ48SEO-OUDbF2OLX}8Dhwnty^DjY|)NQs=e&J@L*lorJ|ak1_tZ7xwGs#djqVU zt|o6j_Gm)ptoOog<{O-w{ExY6|?c*Wbga8 z`sUn@`<8jo33a`+x2Y%kuxdb>+Lx@O|0s{PK=B z|JU7@oBzK1lCa+swTxe{AKNpl|E1G<$AS50iJnv?J};9(~^Y-TrM@2)9u3 zq~;TDyHn4xCjR|;r_3EuvEpnHn zY>;1Fl@M@EX7S_w4y|*dx0ijn+iuyOx4$%OTDk6&H+CwBlOOMOv?4NZb$#xgtY|Hk&9Qn_LH(Ab_uwSKC zl{X}@`<|P);_;2^ER2ZTzTXnqRfbrt9GSU5KFW!5#GigRi@r`Kf`oGESjq4uy z*4y2g@qd4bz&DSlevkGt-~O=U=Mv@U#U_0Jcv0H{8CgdQ5?C1+)(Q~b50+V+lbM&D zTBKJ{xi>s8@3EP{-|L!e_xP>3kKb4pZ+e00u1apR+U*5~xAdAE7O0*|Ql7}4xoGy4XCv*13DmWma>qpi}QF7OoQdeWECgFX#VX_Gj+#muGI- zb70rHDQRIElCCquRF4*h-H!Tfp%(aPuBzJ7P4|wtT+A@pCGg!z>eQ5FE>ov!>@Z6y zPJ3y3`H!in)4iljG1vXiD?C*v`<^dKdZnVCmN8Z3fS;!3j2KygZ$Y^gUZ>l<=C_AV z;R-gK{Unf~)S$t;_x_5UzNMauc@uwL%|Fh_e9*5m@Ywa}aCLF@ikUZNiMk3~u2wZu z&ba3$&6Js}qUh;)gX3h0G4tj_0V^*_oeYV(+d1X&&5Z(zWyuu^ho7A)@RFF9-nU#M zi*t*w>XTDPH)eRwJDX;A)JeyBn*Y5V8)cS0yW4R;W_28PTNs-a-8jKVbHJ)!X3qF+9{XDFsH#xM3J={ox z!{O-x^OaBM+iWz6e17O8$G=@g-b=mpmoiLW)f}d(UD$rT)Kz`|zV-lm3T*7s8HYPLAmZuOaSAwn^S znL%aR*0hV3iwOK|$#-$5!M9rxwZ#tY z_rK0>o^zKyYwgx0uV=3{PdL&VYP~Nm|E_M@!-fryc0K>e=33Xz#=JYGc-kyWtG=U; zX1_dk{~bFo$3Z16iN1&PueQosb124&bk61})cSH@wfCa0-`3m_QhTg0X@=^$-$!nR z*xB=M4q0{M=Ki<7lbhLfSXJuyZKZa%{){l$cjPUf$%a*xEFo97t;(JMe}ht_@pC4{0Hu*LODM_iXULk}^MD?Lx!%SW~r|7H1@Wopx8f zwBPXBpB0-Ygg;&W_uAhdjtLTNS+dtR$?o)D{_8W-r@YL^-x5QnKKLK5GS%pir2Hc0 zPh8;~=2tH4n{;c_Q@wcogslAsLPyuZXg)+_4vN?P5bv9m$IM!$&NSi=6&uOlXq#itM8cm$?b3X zP`x_xP0Wmg3tpyP<9h z%bDB#x>V<51;bl0yv++vEZt(b)4O2$wkyv6zMs>J|D7Q7lh3vLRkPx`KhJFE#P-K6 zIxl~}PIAAx;xd_jePtikPR?`ZFUD_Dxbt|U`OI%|i@2xB7H_)E{lxeD9>YJ8i)Y)q zh0ieVQu@;%JZ-5$4-4O=IQ?^xT{ZT4E)$dQyQ`dy&WS|6jcO4EdW`7W?ix8rY&-^6~P~)!`Z`nQlUJ7F&3D z7R_n66}NuV@ru8`GR98j8V_D9`;=!ibIGOOEjiiW&Av1~={aR#)-I5KX(ij4O_z>y zRj-x1|4>Vp)UQ*Gdu~h zT>1O2Dv66GhScxA@%Y2PF4rCH!hPP&`U}-qTr9XQOydwy3y=`#jO@FVT;|d*;dqF3 zncxz00i)wGi>JtNu!uR+nw5;Y(~?%|@xI#_GDT{e;O)Aj3muw|+j4$C6*q%rPIKC+Pa^aB zr|#j z2%NN{d5_+N^u}kg3wE*|ijU>FU~*#D<&Rt6{@8VT`PQeGZ++h7Fpu+9QBAJpzIO#R zxt8yAcRO@t&4_-)SL~hBFfDe$QckPcRl(w+LB2DtbAHZ=nEqdMC!5>tF9m5$UX%Dd zVjM0p?5mlUeBUKxi_|1pru>ZtilV;lI_G0fd^*!oAuDjc<&2fW=6|v8qb;oqrnUaR z`Ot8FRHKK}={YygL>`XuS*zpebUNntnbOl+KJUITY4;Y{s4PC+<@3&dF?n_-?Ocgk z*^Y?h^SSS0(ycaq4ikIUb8>1++s+L$yQl5klpLG6ah=WVmoLxEJe!jod($j@*V(0K zWBk4b+=(dJCVVy~{O!$|0aK>Eo$<}&c17atuqm_l9{&FQ%)3-iriQ9$rg{G+E*48! zD;6M<>v1zZ)AJHz`xRG)vllM53aVv1R1jnPeeCIdiH5^dyBTIJT+CgZ+-xR0qnFjP z<_!~LXtS=YM|HeKLAhG^mfg!X)n^F&JAZb^(NEn+Sq}Yw%`m5aw*2h{uksfwckbH6z3&p&zN%c~`0O)N&&F&$b9APyk?7LIYQEdE?UHZoo_g8) z`q4diPTDdsyEWFY9G#=L}6}&w6vAm~mmc zQ=06AnVd7r9d4Bi>C4(r3*H;f&%QgdvFK5vw!GXM4X-HPpX$rh;)QO#++K3*e$f2- z^=lu9Je{(5ACpb(=Cyg}_ubjN=L6iK>i&3$I>V6EN{G24@u zow`>#d*iAn*FOhpAJ>-3fB&bhW&6={CFQ3hKFQYCb3Qq@?Bh2z{S84owN1ZW+2?$_ z?rLy&4Y|t>2d#>(<}uyt87e-)?&@=B}myk)qrtj@pE$r&v{6?wvk*Zd*Y1 z0%fl6la6LAUH+thc5loa7Hd1l`I1VD&R-NOR@`3F=O!{yrhU<^i!pUSet+G4HvRwK zr|spl{U5C9+VjQqkm09?bq+1>`7Qh&DN6nCu``Iu-5knZ81xvo5ccT4C{44w>?wDY7|CW`zMfXDaT8|m=?{0=1buW6U zCi$G>Q25vVGp9)M2~C~2?S}qEwG+ZjvTWOSuJYa4W^&6mDfRFa)AeGf+zWg!3oqF4 zplN9bn`W3PPZqm-)^yGLl2>)IY*?8V|C`Tomg}MSne&rZ+|M|@QKQJ=v!__c-m37BzX!?PE_L za5y_9_RN~~YRiu-(OX$E3#YhFD6XFRC)xWhTg}Wh&n@5lxW#wjlxxLZ(YG=u9e+8` zy(Y46?NM1{$+qv4+uY^5R^Lu;75LE6`pWfdPI+4U*XbUq{$&e({cOIlE>6B|I?sep zt&;J3OE)K$cuWp8c;|Aj|JO2u5~m=S2!21abWw4YHu;?gUiJ$`pN&(^+Vgjk()qca zpQRikrf<5edZ??z=zEI&&S-~Ck~Mu%dP*HXD!DYZm+rc%n)3SetFoJr`+51D#xBn(S63vPYx4C+UI{a822oIb7i z>`%GR)U(33Sb{JAuH>?};yS!HzTop+CZU+BRoAoon>n7VKNps15to^CONK9K?wPj> zu9&3Xrqs8+Tc{#hF7F}r{H5cRL%b(Ma@W~R-F-fz`17ff z+gC3Zn4e2LVYhlw|Ev2-n&H#Goqx40_TRLdaX#E$d|sP#WVrILGRw7awsSj`HfFCm z;IY)u`g;A<+EapYDu*Vt2XZ~n;+=3^P^n)q_4th41`|%U99C4_@yE6Jg8crs{JtGc zCvWoTXz1}%jnDd)HMmuuxO`*m+WS_^B(#Q&Y% z>gr|!2H{00(IZlD@92H-{1c0`N{(= zNq;j>v^*0`zd2)%Pv(ZCzYELnSg8olTxYy5Cez49j_3D>?{m(C_3TOX;u6}FEq2<3 zF?EroZ`4|i$($emYFw{8Rx|&D%G8-^Asj1LJ_}kA_WHqt2eRJA%N)+0>hOwWc*eX) z^&-dlW*;`~d6WEwjee#UmAEj?Tw;?Z*_m&dmQ)X!f)C*SD`bTpxrV&?}N_XMLt!GxK83$&y?l;p>ee zg7IR)_Z=qeNC*}@Ic;X-j^ABcZhl_xBiGC@t>BpWc!Q0rMr46+lfPdMsCx2%OWJmkidOUGmSct!Cvqko`r_4=z`JF| zHOcrVvlIhZ`r41>@GWFmdDz)=nzND`&qJYKQxyY(Hv2w##LaE;^3Ixy4MyLZW@xdV za7yFcvtBkvWB0t+Pm|&g7tEVff;cMTYdp<$;Q|jHDty4bA<<~Et zVJ#h>9+`JfU~THRIWW8dDZewCZ5w`T6MjoR@@kK{qkV(bZMXiCt6A?`n%&+XkEyAZSjNhFH}`_u_JYI}CpRh{|IU5rotR1f zq1>N=Wem?5L?V@?h2OAz-yGd^hPyQVnfYb$oag%4b$UP6&U}~slDpvDtkNcls`|wO zP4)*ej)hhgPxt2PPhDH~Nb)H|(!%Vo9DQ2fr!2c5wc%;`t-qJc%I|1I%Ip^7addt3 z`QeXO>=Kv%N?iV(RMS)aS7&Ke=_YQTj``1&(zh~-Df3u5TK_e9?DSo9apZfL6g$8lH>YRMW9IFa?P1#+ww`Wa-}3d0bY-)0_ot7a-h6p_`({ayyHth0z$?8e z>T(Y(rhLBH`u`L2pHK%szhBMF)_)%Uo%#RSqd!|L|NJ+&%e=Wu-tca7-rgUFZT-?K z6J|9#HHBs}e_i-$=Pm=aOq=y_LQ=hq;@>w{G`2KNTEc%(udn%fNUezKownRnd57&< z4&)r%^moI|o)1YIQx1u&bH9C~fAj5xULCu0VX})%7Hi0G|KnX1U6{LS$wIUFcE_%+ zSzRO4c&gqvc~5KDo}J}sZ=a~WP`zYRaC}E%MyIGn)*G**hj)JTPugy%XS?d{<-__; z0fpHy+uXS(HiSJ6(-M!Lb@tlLSx+<1Jlm>PlWuv#tJC`I^l8#JUwq*?objytBX4H* z;XOY~0#8~-YeYuGS7wr_trb+EI#Y5zVvDBnYB(fAEGmt|7eIxmN}qv=GB7Sj6XlP z!ZUqcJvIkS{k!#6sdw8$f41|pc<=M_+P}@*H~C@4`xDP)Wp{4k`h9kLaNWPX)vE69 z{E?@hKCL^R@FuhPO+4zj^ok#%E#)i>3>&!#?|m&u&(tfZoEvrwt;%iY9JPk(c4tz1r~Me(_UXBjJs ze-zh!F0arJ($nRCZ=^T(1gp8>p6fcg6&0efRnHBAcNr$dTI|?W^PSs9L`ExbYDby#=NXl+y9JGD{6#^UCS#zF%~1<31)?9fJtYQzG3t%W|i#ax>rXZ~)evoQxkX>&nR|VlXaX^Lwr)Y zZf@^W$LxN0vEao)T7Cth)lXPL-WE1T)jnO>oDkfxCFAF%Ns-+rf@X5fpDm{sJbA_K zPf<1xi`G7T)~|mjV727}j?3@51gg7rSoyX{fYk|JXLw>A`xT zxnlpG9KG$Pptah2dd`fOEUkjv_J4dm)+CqS{rmHDZQI)7o>RL7S4Ka0ZFKZ^b>i*c zPbYP3cP#liy^g2*Y03Q`e7)|PGCyMGKKT5Z({9P-W1=_KUZ1mlpMLVrz%I|Fn|3{k z_--P+?5j+7|N79i-uK>BHlxv;**!riQhkb*4@$UEE=gn2itc<$9zgSAA?<1d(Wd9V$!fl(6ZU|asGqJ)Y zlINqfO-av#34SKV8Y%71J)JHaCTg!fm3L5-`TsRe(X`k--hRQcQzD!6?@5O)oTEs!wW~Zh|W82_h`b4<*aj$*K^KX+57g~J_D8S@9tRo99y3J++zN%PqCVl zGGBZZ;W}sZFYNK|CAn)e7u+&)K2=gySZHvrtEVsi*9)$yS)M5$lsDEqI>@p+<%RUe z<@3H|a7^=Am%Z)TTBD$~f8X~yu4=Tmy~G=PSIO{k$AMUu8A1Lwm9|Rmp>@)Gxg)6cQude?5!5DVQ`SRjVZ$uCN*G&w7K=dG=k=*Vh(u z7f3f92*|O#nC9K4vi@w>zwgRVzgz6yX3fl)<5lA^vBu-6Y0bZqpGWtL2~KbO9d0;1 zOr`0y<({*VTOR+@v5?){#y$1@)*J71&iI{A`}d}#jPJB;JO3RGPQ(8PgQupi;F-2L zXG+FYM+vo7T@!w1fyi}RSk;zpI>V)UHsi~ytE;2uW#dN`uFSV z>c4)}e{i$yxMBapNB!NCg*!r~bx+Cmh)}y!+u*S{Fx6@1ue0xp6}KPY(Q#ku>?n}( zBwx#Ht2_5k=M2@8pO4laDgLzh=9*8J)@Hr${athZdxlP9>V`kRG6m!Q?A@Ut|6KXN z@@s2sP2NWL76o#;*_iIRQq{XqWXC~<=H3kgOC|hmTU|0weETW)&LUxf&UC}J*2u2j zhZ8!h8}A*xr5suZJS9in6#B2vrOOkeon)tdAR|z^KCX6?7Q8W@%)XerZL;ZrI#e@-fQoO@NN2Z zBKjlqbZ+M9+v5%A&oJVPD7jdE=8nj_mb(k{lBJYSEV{J(SIdWGM%Gf1X&$g;1$=HNApSxyicx~bVllArK)AV%Cbok>&xq& zpM3B@dg-P3Ie%o8@0mQ0d(~w9;B6)6n=HO*sx`4{kAI~G8J+vQM`+CiLDzXp554ow zOJsTR=f>3yoPmPZeOKg|T?pFkSfqbFT>id(-eLdk-R0r&7oyMqS6@4ALc|T8RuMCv z<88}Nviz}sxOkH2|Ca~*n)V82mCq;)4^vk(MgB< zd8v12-{jo4j~{4nQR(^};_=$fWB+Yyjae~M3-~&|s(kr)a$}Yqzt1+^)kf_#rJF1R z?pJNwDV83pEEBQH*|VlDas^vqSEZkBtlRH`)2Y|1LnFH9-`SP0Gyl}D&raLD40Jo* zPChle-Rt|uj;~ABc77A-uxvQuIlH>HbmfN0N1XO;iCgl?d#`i-yB*iO_6zi8v{f40 z8SlGn-o9b!{EEFi!HWC$-?`a!!A>b-8LPa+fgjIWZBNK~shplS+u;21xVwSY8yXIJ zb?-R7Y|hQtQ0a)}Y56+m=V_J7q%UF1FA%8uYZ-RxAom{SeX*4{4rd&Hc#wa+=hu(B zi^_W|C7-hISgrWT;NC}U%6PMRq zo%nrs?Q6Ds@uv={sF*v>Ry|bCBdfRb;{Km*hxdP6G(F&qsUFLXIG(#Vj>k2$?eVO? ze4wr&+%`mV@v9}lQd`9*chz>+V(C-o-Y)m@@K1de(P8&%Nu!MB%uB8clHY`M zF5U~Qn;7ui@$%u{sZMVsudv@ujn)Y|@;^24oXM02|a{~cNKfbDyo zv~yyN!}Q&^S@-Y` z)dfkLlX9$g+&b2vkvJv1;o*5Br6B2>GGC%pGI+PHxHd`Go0m=F=w_8`IV;&%mhzqV zNa=iY;^2X&Uj%sq?rrov@`?M%tS@HSV(ZuLwOH(>Xe4fQ{QKNyZx{PDeS4Dpcf^Q2 zd3QPejP^1<4k7)zBRqU3+FqKzGFxWYWU{VimA^;coXGQ+b%bUdpYu1JQ#5dAQ1Y4Q zvfW>0JWUQfXJ7W_b5dhhyzZptd$UMORD9G+oM$-M+sf(f9FdpJ@q<;iB`>mHpB#TiNaX zwb1_C8a8i%)7Q_GuTPhVSAFF?Eumv#_o*B@#mk)_*I0+}wW zG$w6q<>d$EUaf*=?U;Em0 z3FD|Vt6Kp#H|>7Nv8;68i(Qv){_v5!vcKzZUtI5n34c%gIXLg)O4}!A4R3s1D(x$N zM{)m;S8I-KpXPVt$)cvCWowsSxtI8T=HEiA%pV7)Je4fib;jVs>Db)UK~?kJn{8QA z)Sq$g+`2IB6X$2Q8FDj@?NF8x;B1{yal1(MPqa~|(U)_+#y7+yyJy~07WnofsA%%> zcPk%lT^v-cXLI34!1?37|2Aq_U1Lji=+Q{Dc%mzL%|UoY+_~egTjHyFQ|Gy4y3OzX zHZ%Ar(`E1Q0?$L|90~+A=Ni-nUfSQ?7~ZUr{O2QkLtk5ece#6>T6J0E7XP!Ge;VFs z6n|?`_-tcwROHoK{f)Pr&SXDbd?obn*)3P)x&OXgVA~(U|F~IX$}Wvk^&eq}GWo=V zY`!)hIJl(Z$n5pHhqgNxOHT+oF@2}3!?{&zZMnX#A+BOBvPsG-Hygba)4Q4-zIBH9 z)?lem&o_0&o?0c|};!qxOHC=F83PzJ+f-`t$4Ry^$g2$IF_g&&gfeJyA^X zxQ?Bp{<#nDDoo~GNZ+H<|2_ZAeeUUpzWtv2F-^+YSozYemonV`XPlO#ny0ACwP(%ui2nu;uU2_G1mFMRDIgl6^xo8O=ZPCVFM>MP zL|u42ZCakNS-?{MN&9pnrcKj+oYAFtjXa^1de zrk3OJjW3(dUYxgZYI8;N{0R#$@|?ZiRr%s-lYZ03xMHC%g>_%c_PqG+Z(&@t&nG^q z?u*lFMrCQt*EWfqqv<`kEdrex;p6;vLzxm|SI zZPWW-U7cSUikzFK=va$oPu*;$YrX14*t8_ez?B;m3`7!}K}UQ&+V#irxAgPVe&y$R z40Z$t`AsSfbt=-cy=!b+E1$c$`}6ksZO0prD<5okx9i`OAoroDx`|6pu5IHs z`kC(Oo&ujlqQvvsE<5{q>=3lx`NLu(cA9Dt~3`eA%8e zm*t{vG3)LSk6YVf6QW4P^h%sq1SrxeEZL(%oP$Y@d8_Z=`ghCm00uMU#DCyS#kUdr?g@E^lwksKW{(x zW%=Qk=iQgTSC8iT_cD}o3EM}u`j|svAJ!P1c+T11kiVxv{Pf$K7AQ#rRpLXXG%?XJrUBn0~gYr&7@%+A86*Me6C&O=;TaCQV7-Fy%>8&Oug# zv;z49VLxLkZZvmm7gY5!3LE;d1e^=Z53N{iQ8S^iW}WcmA=6xANv3{-eP9=&)%L6Z2c9L-+icU2bl_eewCdyXD`n zs7?LhX4ALey-DAXgx9yPiRFq`?^Lghlou(OKD%Ag)0~qf;Z{MG{`Y?^!K(xB+`YV2 zbZz^B-DY3^nwQsUzO!L>ePQ&&Tyy%hxjNg|-`T5D!pu^-*0KNTtn|8#H`cykbF*Rn zJEegC%W`!~`M!{~T;eU~Ki!VrwSVz_CbsK|Uv3M=q>8X>mK&Qkv0ju}%9QEZw0_&$ zoaGUL7i+_W{_M$+G|2u^7y2&OaOax_-kVCCN9@>?$`5zzd~d!n<@ny9fF_@k%nyt! zynlb4{gTt z{1L4A7Vt*apB&e|IQ>#H%jP@Vo8%e;rgOx;WqMJ4fJbU_1c!-T z&fdUDCKG?2JLRj&%ryJp%^2J5d0lo1;)}WcBi>!mUBUIPp|jEU6wk(bOWR*xRvX(| zTiRRM{dpiWH%_k3qPF&pjQrl63HO;9>iF+){8_T_fnD@k{Ea zOvJC>Wa5h}ZH`!FcpwU*=U>eaMuRGL=`*SFG8#KH97R(4E+1x=-O%&q zKIfgQTkJK(79E~&OywTa_UvaaDxaQyw`Mdyzw0O4 z@lWqwTt2B-Tsyxt(k9_#t`8G;s_3i>S5sBpHY9}2dghw0AhW@oFXH^J`km<)KVDj4 z_ld(~U)9Ty+ubiSdYOuu=U3~+d^}L>ywv(+)UJ;}zO}h^U=35Q@TZty zKbhsyjjnYzH*Rh(kH5M5_iyXu)%Fvoy+7w&eP51wotHqBqH&w4q2bOeY+|pc=5YCF z#3Yn$2wPKklJmu?C0+|W*H2oa+rhVG{i;7|zj=#%Uu}J2$2{xOf#*4^wyv%1K9;MQ z*>yWSd%5n*%@6yRNz9b6sjmF?EvHGSUsiW|<+CQHV};K%=Nyfb@rrf-$2IHPov+nq}}A~woUhU zv5bo?>w^J#U>?z_8qVWW8akGZVQ!fV8uG8>m4bic)5Ad|0bz?S!5 zuJp4#NipTgOqb-Ju9y=v@hX@5t4syE?QX@rPYzyBZ%&_NnNjdRy0-n1jrXTBOB}a_ zr23231vMO3Sj+F=GN<0c=6`{i?VcSLzZ145_1MS?+!yPyBX-R+-Jk_uzUzG9-xQuAwUFVu z7|REzk1qSfDranM$@#*N^1)$q`PW%_n;#Zwwry6J&2IBWGc2e@^B{vY=c4c7hreIW ztPN8#XF9%kkz1qe^!Uaa&2ABmR!4fQS1Lb63$I+ZI=(^Fjkob-%6~g z`SR?~*QfrIcQGuwn6b03OYlJJ!LR?GEHmn>*=2R+IMeO5jLg4HOO*waj(q$3Qs1cO zWZOfVKF7YZLFTcOBm1Mfg&dyl4!Pc3(VAPaGW(8;+gtIkhyO80-*j8Cfzv~%pj9zg z(st@}1{FJI=l6Oayic0y8b?pr&gH^xB6Ls0N-H^Gt#h=0^gHL+OtCGDS6yVhG!;%( z75rz~$aXyM=CXks?RRDa&8*`&M4bb(RLZ z$arvy2cFR4sakZ+maT1f{!Ob*Y1|jTc%0nAE6(G4)#&ESw!}R_m!=2_Y_^CFD2rsP zoXOL9YQd{jd}qIY+_$q*EP3DY!#*2&4is@6xFoK?a)w>h@Zb!?$%!uua?MY^3hiGZ z7R>hZ=B}$NtX6$C$e*zIG6* z%tKyZyPh+d`RdN8p1RMM<$f1+KUNW?@ZeSOUFLvQ3xu4QqNZB%*)5#1sQ-h!=bA^d zD?24`_9dDto3-V|XvT@XlMM@OFi_go|2!(tGgxM|Ov_!BbdMzAhte(!)2F82Vf@Z# z!q}1f@WDf?f|5cF>rJkntE8SJEZTTz6Z6bi?WWATTPFLyy3fBP_r&6wlfe@N_G*2o zYd+ij`sBM_kqZtSOqx;-iY7OgaJ`qBwns6UQ+?`3<273k>hJY(Si2xqVeRU=)3FR5 zzq5Wm>au0*{;Qs}(LchZX}#!&TkBV<{oj)KzRgUP`=pSFQ8#nVoYOs~D+JCaaCylw z8aE~!+@$^^U-tQoFB>;3(B~<%nX##4rNM!wC{dTi=lJu2f0Yh0B^8 z>A%{~n?CU@o-4jv|6BbH*?zH)SsV-64+>;2ZCmi5?eqcfWWn>B7n)zW_ut@fS4W~; zZRev<6P2rWB}XSr5O995h?P&PqWWRbmN=msqNWlDL_ch`-@9b}*P`8B>Am9B4%cr# z$UKwPG_U+Z_p#Hv&F>u!xjg5kK&0%F-cHv^`Dbp)_m`hO?bpgJl3w`a=lY;2C7Jve zWg1qU4w`=CJmWwAMKv2#bT;l=P?#$ey@|{3_=#gXd>07m2X+bT?R=Zqntt_Kuyeq# zFIq~(YLOuF-gY7T2JJ)9DAHDQ!>x!&X&g%1O^_pda*1amp+1}&%XXfmr zt+Sgh%oGh|-hW)itj1g^C^hT%-291)7k*MG^7`L+V`_-lSu0)Hj5TF5l{RlJS}j?# zR3@*wWXEbZp3VGwqmDORD&^(96)C%e)6H=Yv)k(Fi}iWJ0%ab>h?;~vSsgFD#&+f8 zyBDTp8T_`sUAfOVPxa=ngL2m=Z9TSTZ{hPbvfM7A>*I6`>+Zd0`L>8#qRlC~aqkPZ zZ=1Mp)QN8hzk8tW1=BX;cMaQ&-?e>PC49?Ie9PUujNfxFlRR2+-n@+S(F@<^S+$Daz3?q+L1pEvq>nX|KJ9K; zA0hZNK1g=|D&bk|1-YkPH}1F_R<*!<`!W%aqYDkrrF+Ru5M5#TJ8PNfKJWdJyoD~R ztfDt>sfC+)3u(P}`m4A}aK^dM56YJCc3+g8`1WSpq!U%|SbC*PVh*nN+wf&S!{vf7 zQ&Dz}GgZ?r38{H5`zG1^Gc#f`f5kerpIgl`l}fmyzTRA)zDGkK{D~?i4RX- zeEH?a^zH3pbCp+=8U$CCh%Zq%bo;~JJdNW;he{dWxV`P(RLSa}bt36(qW3z{+3)WJ zM6#x+B&z;l&TF5Qs`e-}*uPe4gA|WPaS88}t+Nt#1ZHHN`+TCfi=AohQW@#q6S+T~ zSl1S8*>v)Bu~$Q%b86hCsHr-iz6Z+83YM`@Z!0p#|yLB8NM^ z7O~a5QTW(b;$YJg-ORG;%GC$grXJ8)9r79Rwk4UZNzSaH;P40b;>Ok>`L}iR7nXaJUe>cSh%9W= zn_?Kc`}e~rSMfz^@3wYK-RF7knX&TmE!WMDcFxM5(!JG7(6~!^V@ozR7%3;Vo(CB^T@d=D5bnkc9>h zS1H|&Vz|M!Mq9u&&n1yrl#Sm=I(lVUWckHx%>?@i7KsloPM(pXE1xF0;mM(h)9hMN z?~FFpwmAf7g?9PN$DdL=o;6er{0ZQa*ggXL?$obUi_b_ zKSFWY`I^H{S)5IIV*lcF9e&;U#Id+^iOY?jx6OH;pPX^@=a=P;KMyqDv)eJlHEOA2 zn%umkY%kkP3A5jw?sD=AatM3S7DFY6*u#L)Ei_67VO{#5;l<4Ye zJjb=vN&MB8~#*ZaZ*j=DxG{K3J|)tXe(mVN9@^@Oguh$zP*emVQv)&CwfZ z(d&LVrYA(M@`=0tvEBL%yR;`&f96y9afS89FV57X(pl9yHwv{DYo03NJs8gBBo})n zT9EHY*TOw@75!%33s*h;_+rz8zDxJ^8?;=0CU>Ia(>d>MjWuf>YrlM3Tcj28@$GRr z&zQ&_{Rzca9)~A*)$wPX5MQ%u6KikJr?Xj{CpnmJe=!JrCepIa(SZ3CQ~LgYKREx+ z6*1tk31nV0Pj!u9+?qKqKFLMy;V$K|u1-P@^~1dq1Lz0`_Kp7J~Ybn>Z-dc_wnY57R(EX$O- zeDGwJ`VxP=OQ}NIO?sE-WE;EKe*3p~T1TB~xVf!O*7rm9_x@z;^En~>l$2>r0qVzQ@1i z4<84~eC!tt@KU={a;08TJ@?AJ$A9OGh=y4mU6ZvWG;NkqtghyZZw!x4S(V$WPW%jA12i6>K&A~xRte>=l=oMi9BMR+~WEH z2bEvm2s|cKyl$ClKaaoKn-5x3)?ahH-pu#-;M_HmSB@kXO;A{nJE15fcF)fvdEb38wz{bIMBIDd4$+U*TLa!|$uLMH`BY8qZ&RxcEHyLly|A**{Epa^ zmV2C=PuUkFrdR{`Hw~6wNSKCasGrbp53P}CFVUNGs{QqwcZufJr{M*VKYM`%i zlDqe@qqe%p|7o{09DNsm5|PdebiNjv-yB$-xUem6htKip=`$V_@@|$r5~?V2x+}0o zH_K}im(14?Z2?Bs`8Ii{Ryn@DAD*?kE!*Qz#{5_xkFzlb~ zhPGmZmA7YPZDmg`pS>e`=bf!fcR9bAs%-G1HRmyxM5RFKiCSZ$h!;O5-di91#pRU3 z{T}@oo^==FzbH+UuIo#G^kB-VEzb9scsC~4U(=q-)6JTkqsediG-$<*m~V#WM^4T- z{NZKO>JuhQPc*r$V16T0?&qlx{_ic{rz3_fD|z%CHHG)C;wxr;z-zwhM)Uet-riQT ze|-7RfI5ZnqPtHfnumd*Nr8bu8FdOFCAAh3%xJq#_S$gx8A6K&cawg!l?}U0+`33zK z+)q#bVr_g__4}l4j=xv0NQ}N^yuJAExm5q3Z+~B}x2s-VbTgu|EcC>&l|i1x=i;|2 z#h=_Pelq>dl=v5A$ybV={^&kG?|Em>9kCZ zxw_V@Z~wHlIR&NrW`16M%=2*Me3(yvo&m+36^*48`~ za_sq~Me(7R&MCFGmKc@W_AkxqQvUro_s5)7YbBq_gjI-mXFj)iTkq@Y$FyW>#xz-u zo~0{StTK73|8wv2dZP~(oI<{QU+=A#$=V-(bNcq>@++3bTbSJXr+iVy_Gd>R-}FV9 zzglhe87wc;G`IQQ$G2LFz&H$F68zo@!ObL&di55afN7sy1rWbgK} zIC*SINkU*G!hmV4KViavz{+zX8V zbIde&r#DG5S#ec|WRT1>O{<@aqN8@DvF=+K5i7Fegh`zKG!_}22e#H3Rhk=_t8Rbb zmo0G;|MzG5{_~#fcZ*!#xXVwf)wtaf|9XMldpE%Y5BzwxKj$#@*cX;}^!P`yE1?-h zcUP_uP$)aLcoCEKkt@czH#*J=1vt3vYl(Pp1_D5Cv=lp)g zIa0=l9y~kI?aCv`@$R9GHOrYCzqaGMxwKmDoGaPMJtrqZchQRF=qw$?B;kk0+PQZ_{~qwywCccye8Jaq;wtucFpUy>~w#bs|f)tZ?zx+05z! zsSZkiGZfDzH}n)wOP%@qiA1dP_6_s@|1y_3vwGcx^MBgCbmv{vD_h>V_`qGa@_TU~ zW%t{@iVqf3-<$JYV8NtcbJ8U5w$*n$V$qoAsCz#-dfo0-9cAZBH@cpkcfHt6W{dQX zg2SJ@BD{0nJm33r;nDQximydBJ;_`p_4HDSmxj%A-h@|k4zoW?W}UCh&NpAJ_}>mS z@A;p1KiPWf?%wDEc8dvp6uyk|TrT42fkE3m6#_3w2?b?F(GUQ$+zFAPNx@f;b zg6t_J$LYa>LP3$t9b(*fcTTu&vm)a8QR7J#&Z~q%4{^?X*mc0;q?1#0H^X9Xp}>kl zUJJ)4OSWSbs&)@QPM;+5ig&|XRoA}~Lfm@J>o^)_Je)T{c=C6)EMq=Rl&;FkLuQVh0q5PYz>P)Y^I!{HY9PV@UzW2!G z=)whkzdaTFJO>CwqK80Km6JI|4*+A)6K&5hF91mDo$>1 zzcBmWLT=Bz_i=Y)V+EL%`ThpCNB{rv>bCj%`c%K$7gKx+tk-??-*k7*y#;YEQy;wj ze=}eG_rzii6R{~Tj?M7(WqA-GnH9t2(E5O>>KR+_+km=grtJQop-ZnbhG^dJ{iM8f zdTZIf=N~IXFXXuH_3QC}&7I5S80LNPh>YXgxnI`@_veRP{C>Umvw(klnOey1RXm>W zE9y=#ZuI`6W97Wl<;XwLuba*@&V9*Vnmxa+$7Zq4fhn`!mwY=G7^k!|W7EQJy>RYO z&FzXyO%J92tKd)FSz#=s5WQZdv`!`0$D4cS*(Z@}POLq*;{F?ZE|p0aWIt{b>SGf; zv&|@6m1)v~OXoDMwwiR8ub8y(wZN%!xj%xkiynNPqb4`y`@-{qTq$;UzZ^C)sXUOm z=I{*b%*FR7l<01KcUk_XnauhA)XA2=GsSG)%G&N#t3G6QL%t~XO~Bg~mG87Cd&XC; z5s8_V#`MSk$+EI@HH`tezrxx-8GnB)A8{ets)r#*!^Z9J%V+$x%a-0dseY;Py7$A| zOM8Cb*`aLKST8wE(2m`GS+m%of;ayX_@?jq|Lk@5?DFa1@$xh0t8Kr3|K8r6bsX)^ z^XFFS#mQZLnPXnT8h?^2@#N`sCu^-f7CxS+aN@J@o0ERY>ZSlOmf%q^g4_?pYStQvdzLpF`#=Onj3w+H>4v~x7@yHS-aXdb++EkK*@i#)8%XpcYF$cxjWNd@y<+%3dt$F`#f$$ ztdt2C`MSzFlxHEsW}m>FvH9tXjO&Ya&2GopZh0sz#qg^1aJBv$Ut2k6u4^S< znd%s}_qW!#oJ{O#VY01VKG#R^j;il(hBu}KSNCtN->JGFg1i5->CVs@mK-66-H%x+ z<}G^Px~|Dht~dBeeXCYr;E#Npj113hH|L)J5hIZEhCQHbf#}aHcPBfK2#Jkx4jR%I zx*siIoueSmqMsMQc>3$Q$*vo8w_Nvh`kZ;p@27x=+_ztn>y~V~-6tSbs(tYF9{s}; zgS1TSHY`)!pt7xSw%+-V|0V0M%KYqO3w?L!wPudx5utVB@)=iTre&^kvDD`I!?Hc= zCdc#39w(RQANzW~^hA@mHtz(M6FJ+JTzBx+NgwMreHs}bs*>D&+%V?0|NrAV6FUCH?Th8G zcsjkLRB`^f$L4Z;zIqOcOqaezPl$TnU%h2j)vE6v0_B_+yKF!4hs=LB$<8Eee$X5H z0FA`sM;u}^WN&cqKeD$noI~l?{KD6o?%OOD7iqq`ct~R7$J>Y2-+td4=K53h;@|Tg z&S%|KehF%d)oFRmb&2Cj0 zZLKSO>oST9H<-S^)m*#b*e<&Yt}Cf|W@~T9M{GMC^-lP$m%{g_zf)Q(Dywld%H1RFN>>^vGzPDGyXI@PE_j}31*D6+5-b?WPO5o`< zm19oWes42VX|~Y+m!FflxsROu{M=eQd7IVM_Qlhe-L`tTiE+k>vgsM!ua4@a{>@y= zwPk{Ut;?<=!x5;|CL>zJ~(If zzxY^HD;RgKf}h#=-E4lfhMThN?iwzucTEiR&h_N|;`hPfyVUoT=`+8^s+t;nt5U9U zuPE3aGIi?Isqs^1hURR({JmYi{GLc~+}4`(NuO6~r?KXj-TY@XJMQD$^~d9Lb2m3v z?ab@?8G3x*zgPbC_Zs8xZ`!PV?%tmttOS48TIUzk~H6Kx^;@A>|P=da&)n7{si zukWh9=^r*lUh};sTDp}r_x!r9X=l48ZO)7>jSSqnhWUo&`yV2=H*A_G9&EN+`q+D` zdm)jW`qTF?C(X=7!G z-pp3D{AJG7wNmqzt%+c0lRdp^)jN)hW!`qP4xPF3{8m-eG^XgkD;Pp{@6!9)oVQnJ zmF4NEvSo5>!(8=_J-eE<(9O2#ywK8*5wX_fU_aqk&Umsh0)SInFi zX__A@eARVpMR3f#wbN}9^Aj7pyX0f8Zurv~aeDD?&G<(qLf?{OpWRG7*{@&UHdB@7 z#mz(ABJC_j%evP@tv1YhwRob%vi0kKR%J(hsld-aTsn?K(4f8T$pS-zhy&i~%tTX&N_I6JUf2B&nc+Uj24JmvhUmWL*v z4>L_X-v2vw;?`)k2G_k4`q)1;-klR}?iw6^u{SyVPbgy*=u5cyjojM;fx02bBUAH{R?`6s@p2%Bh&|{pEiAdHz>f zVQ2V%@>uX3l)&r&--&zAY#p0%@Oz8tJ+?QYjnf9>&JVn$BU zp{%CUn>0_cW^u8$Y!Ul2U3{}-zQ@T3E_D(<49 zN!|7*JH#5ScC)lbd|D%QyF;2~8F#~+LlL?YivBFi*!_81w%(ra-B$5aZDP~zUR{_!kMRo>jJG%{8glVk;(uG06Yse#(&j_CQ3#z5A)t7wDf= zz88D-=en&5`7b@Qqb@vQ+pwzPV}62*``MSnrRe#h1wHKvhwCFn z6};{}p5}6Hrq(|50Mm(Y6~ErjEsL3&y(Q>`;b~K!okrjC*53YjbgA5}_j_0#GN>sz zwtn=UP-BqtL8AAX&xW5brMLaBOIpSyW8}d4;Cg7VZ+66^*=u4LeYsb@%h?!Y9#iKj z-EK^D3=J_2?Dt*opc0^d=2hraZq*APQfK-KuKc?$yX$o5@%~wCcjn$+wENZU&DSJe zq#fMwgdud!^CPku&WDw9!X-k{m8YPV!EzgjUd?V*M?UlXT|A?eL zXTOCX*vM@#S$ESrE`i;w-hKD>FE!DXd)^Qox}{s}XS_LUJVV{&)jU11A=guG>sQ|9 zJb3$mK^c#i+Np#s9rO0o|9$n~$KBH>wQKh5nfKo31VDf{3;jWos|uWs$ofP&mc%@5?W5 zUg+}a+M3!1Ka{ze(R1sn&|aqlvK`emzXU~MPj61Ea{Z9TdqQZF{jQ)5+%K|bm`z}I z_2DV{^6^c||EDMa-Cn$3e*T_g2R+`t=*zm`e9M4|dqpRMUsB+b#S03}xR=k?P*^@G zhRN&Lyn|1k8(cEpxzFLS=`6O?H!Lf@y!r8icdfbUt%KLOlp>lnYi<5~U^Y7$K0U*l zCwlSnFMQ9K^v@sL@c!WYLXmy!<`PSHxf>*vuU}Sk*WtL@k`KWP_a0&tDy!B0b5d^q zE_cn7rELEf?PGnmW3BK0rtPO%MQ^)qP&ZGwvq`c-<%2{gxAn`W=gI6c7B;KXA|Frd zWDv-S@^Oi3WZ|6mI8M+v__k>3$#t8gH{_mJd0%hFA`h!_w|J?-SzYS z-~8ds8hbvpCFPHh$CLc}#P^apvle&T?V1?orMYNHdx69E(oNs}K16XmkjSZ$xw(Fh z?gtGCbJjG|W~rBNr49Ylm3SOw6WZskJ;nF^w8zdP7uf!=%~~dUOX~TeQogm1g=SUG z@Hmi?!)rBB{#(bd3zKStZ;4jFuG$tgEoOoFo?R|kHx`(%W*xHA+df6dW2!rvhKAaXZMg9(t7Y^P0vI+eW6kje&bk-O|1t z%H%6r;lQ-GDn^U>qhmM34m5@8`Z-1^)j?mXPrB`O{Jawj`^8-#fJGj0otr5mx7FDr;_=Ro1)n$Fth{X3 zcRO&_$Hsl9uH+QyzhV1TyW(u>>x|IY@UOX|J2Nz*r-}P|oIK%`;3j_XOpg5Bw$`$b zf+ibh|6YAM_v-RZdw1&uUHqOAkk@Yy zD?^_$2MfIO*16E|Rv_cjou}4H47YC{TrfdFIMsFw*Zo(scV^{pT-sw8bR+4LQ>C3j zMdU66m8l#qTc^bft4(U;+%>Cs>F~2=izuAdTnT{@yPBsl+?L$)U_pQGxsRXN)Rml7CUISC=la2w^Hg=}|0f}Hg}uad`O1qq4HCG@ET`C4 zG;EXjJBu?+lp$k7EIUJ^-Mn}ezUlEXUm`pmq&s?#xjhZYwVJ$s!o;KQw{%`_(=A}i z3!QZI&4bX69J5_c92+OO@m*$~@#}eH^Z};CBf{-hU$04g5|?7S+9h@JT>lF<`Z_-R?Iev;);+xZj)$Lw z{p)yA+@`;UUFe;-%=ff8x`Iz7?E0Ig1=-I($RpojJ7MM&MkVja$4Wfa2T#A=+3||s z?B(@Ci-fJ34{x|S$yRX7g^0rmsWbdiU(aWW_7~^qKWe?Z_NtAL%lg?5dHyYU{eH_g z6W92*Lb1K8L)9nSDf5}c_!`dFpY@wX_~&Kq)|Qi(PP(eg<}J;U5X*l0_{2?1PTu)k zv)XT^ZTOMeY{|NHF4x8bS%(VG{S>n25I>&(w7o-C|M=o%ZyvqvzZEiNiAT>thII#w z5^{O8Y!6*t@bbk0{bk8Rh7X>#b;KmVgYbFtK`r)eqB|d-u9XZI9m>ow%oL>l0rasqATd!uw}r3l%jQ zKJxz_7v*j_srt-)nO`S8kF!}<8$B&w{Cm@Kl@qzIcAT#66WPhzyL!*@Lmd-ylq~1Z zI&nTv*xzNr!tY0N*O@U_D_v0D-?q}?=%!T*zh)@pv+G`U?|;`7Jn_@3&9_~O`qtGO zufHh7zUOsb{+*l$l}ly?*6F=?s{u|! zpR$LKQ^m^i-dEEVy0V{}cODjDlwb2C>#vWnz$dBMbzLUP$)9dKe*0qI`NzwgjC#M6 zD%}w-^38Kw_xP^-6M3eEwsWL6`Yl!{R#jgsUZLPDuJ-gz(Uixo7jH)2H%yjT5X{JV zr|eOhx2X7^p09x-D>JgRw&wwaQ`c zCG(PLM=xf)>db%q`_AiqzJfVVAJ?q;D8Zxo|KQ0CQ?jEYv!H~m7Ac*u<+uWaS9({20yZar{=_qXHAjEDCYTu(Z9dF}5;&)Ic)pUiEGj3rd=Y~HVuX8Qe$x~BM- z1*Mh|iCdT3W$e2jeC|}klHXJR)$U$$K`&eM{ND)X$T8uT!(s=swo;%`}JkD}VI{{dIti+42%PPKSFb@?GH(_ntf zZ9KGjHd7e;*HvdYMS9+~Oc9L}sa((YC`xO_Rq3fhnF2y0=MDJXf`6Tpo);AHY~#ZQ z^`t!LzheEp0GceJmY3+?O|3Kkv{xy|x{foj-DLpHxi3T0nyM3NF9{l@e$6Gc1E0fRh3Z}7J_N)o~yHUbs z6Pp+x%UspO{8eRn|5;D+ z^Z8cnsh;%My?nl?bo~R5&eDv!>8{r*e`Y)`oZSBUvd+RJ7Q~cG#v9k8xs#YAo(E8&b zck-po*!A5N9I{8gUHhWY`9+$0>w_KMn-cSPZev?yV(gVLCF56f3FEfN=?`^<7PL#- ziJde2k>YSw?b>$FBNZ%3$7Y8tH29>xyiG{HX~Kpx3r-$6`QuB@|D2)(CA~%FxvxSd ze^+1{>nU-@Ap5y=jEkX`Bl?6l~fzIul8BuapE7kaUc*HA}dG!C4)IBUWpTha;*2QHT7SGDPaMq>d zkl(BlKYg3~z3Tt_`1@}vMaKt4W~iV4p!w$iuS$+DH>?jAruN?U`cQwmtT;1KWar$j ztT6j^$Ll$Im9*+*BxG;=wW$+0V7AyecvFO%rqtBF=z@D&cO`I#>|5ESZ0vh{!=X(9 z;m)_+{eN{AviL=p^&iOCX}hg(vi53c(`^yA!!Jg@7VEfl?pjDtTH?F+tmgAO4$eQj zEd1|<+a(vzmAgj#dz1fic9q@nTJv`ThnhwF)C=z&^b$V#*m!#BOlj6`^=y`xi`o+o zRvmw5xInP_+#*A*^Za^ek1&R>>Ae^F?UGuRh0wv)`j6AAe6lY;)nBl0-;(f`x-SIY zD7bw}n9+M){OsQy_41Z7vXK=(zAm4dl)m((p77U+|IC?U{;w{7vd??-`vZcXZ+eGX}#3mCATG1B-yKVW*G zKL5z^QE5hn?13dr{^D!)K66)$Rq%NTPt_H8Ha>bm4o_i$t_2YNB*Ahk#pOX z|3%Y(tb5lndEO51E9T2`ZV7(7vD`g${ehOUC#lM|Pqq7RKW?ufEG-O@hA9d}7L>z6}^ z#nnauewAA#4v)FI=TDrlt>@@GA%=V=_TG+Pzdnk;GL-Erzw@MG!FulN3=+HUo~d3W zvPfIDahkH@jpq9LFJ8)tk+#n1Gq2{xZ@KPNv_9eNTBFWwX-8#b%Jshg*|p&;lgrAd zk!D-{Ui}F>xNNz5w@mi>tE%VIR_;1}bB&=#sZGe{+|}-{Hy&_Ka<9$p3VXY1;;zTj zn&oz#y|#8;gYqJc(&vx8+523!^6xELU3KKk5!Q+C7EGNxXJc1W$l2a?(Z_c^NZPjS zXWP};_fm~_7GLD)+7P?je2UDw+gvl=YOD${5(xUq5}s8pnd{70E0F!fu+eITYDwgr z=+u@~6IFblide7a&iukLDKu)009(?z;K?6gcqx*Y2Ear~D4^^RBp6 zrMO;BB(pd-YGG;Qh2F~K)_sr4KCDb?eZwL8J>2on1g`T}U3A}8oxT1tC)D?<_3v38 zg~x@i`aVu%V-^m1*OYg8%`>x=8v{?g5Hg%KFG{98cvqV2r!_K8i(8()c`LEM@2K`4 ziTU1ZzV3>zSSMF#^-E8?a97D=haKO`%&)w25nZmlb8X(V>YXRvr6f17#wUq4+}^O@ zQHO24K$VQNM_H_im8OmV+{8CW?XMS1e6CwkQ`S*>cnSZT6JkfE>FN?jC>e z)SVOA3ejBeI%d6ZOTVt9e?3Xmr}_C!#}(2>TW9u#KCVnp?P|Rd`pU`EbV)&>@#|mt zS0kTT{rUFk&02=`?Jri%l9_gPBb&R(-Wk>PF6yDj-@RaXQ2fQVLE7%@qPgbtr+pVZ zDVO?ZZR&>ivohB_6%y^eHmm1dE}wq;i4&Fcynk1k%OCb;9pL$;UVf3^AoN+^ z+8?KU?-Dk7z`pYLTJHH@|DJuf$ba6p7k-+rKO7Q&#-~}$yTV|7{oCojz3#_@CqD98 zpPyVRcF(dle~(~g>-(dJ!+Y8O&3mO47Av>BJox#e#3?Q1Z2cdZ?oT|mYVIlRhBNae z1Z|I3$gA!%X#X1RH>vCUKedwG25D0RvFCt!YZf5e*Uuf<(&udDd| z$iM#QH~sq(#;OY6D;{)xdF3-ZDkaf!#l66@yDx25eDkZ}Vzhv~eu}-diSe85R&G|m z0%rbhsXg>I$fEZIcmCB46;FRI|Lwtg=y1XW1uM}xEz>J``u_XlXJT5qR&i-Y zsoss^{uuFJv(!rcJpMT{3#sj|Im|oL-nI4HyEyj8LH_Gr9`N46wd?G47s(4!x9a6v z^UiF~3(xj&d}TfJ%>C$vC-$slyrh3_?a$aBO{*IpN&RTGIC{p7M>UW`;k+ly*=!y=z|{W1>i*ZqKYbKY>tQ<*SR`?tirvH>$Comv(y5=~Iv7 zZI<1c>(#LM`^T57tMA6EL@l1TCavXcO6IN-<1e-Xn2TGi7w->`V|LbmezWeUGmEO znx-i7d3O6FJEl1+8WjF5Xe#FI+4g{6?dZG^xt*Goh5`CNXU^m@xe|qq(T<*Qoi!)zpmb|}v{Bfo4A{O!E z-)`|uc>B1%-gvS6w3MTUd#C5wIVknJExwpxVk~v?^_wS;|K&F?t~hde5R3Kq^mg5*t;RR%HvMgx8&~vg-t@>*$NtPxkF;w( zwdT>qoZQ@?6l1Zr$(5%16%v~&rlq?cU1V~0)rzjoTVkRor?Q6MKNcw3J86YZ<;pI# z&m|$Lk&C!jxymgM7MuDe#AK5D)l{MQ6=HUW{BQm#SizOMa^?{PIaAs<-Y0OjPRO}m9q|9UY)`9SD63v z>X#bc>K{WU*PGUQv+~+(-XWv8;?<@H7kBWe3mPnE5PHmMEj#bukoGozht}4XP&ADBi_#vS2dX4|69lJ zw3e3;_ z>!bWOmps@Ocd6sv@|V>nGsJ5O4Eq=E?6&CTlHfXcr^v{s@@aNvD!2Zkq>`USACjh= z{bcd*sP{#c-8-Kg$gA10ee>R*Z!~=l8wNX6Z~jzea-+)XPE<7e7WqwG%{8u~yBh^} zoq2Y0hO6hyja+W)PhDA{SZh3^!@ODg!1j}MQV%eu>&$Y~5Ngur zFk)WWS-fJ|6pw?;0}b6=OK0A7uytrPZGY2JY<80CSpH(k5P?bck)c1|J$rWc?AZxb z=4ZNIKC_TkG(L59?T4H3hjc&geWbwnhL(dF?C^iL&+m?!i9 z+H~@s-m(js_4_j>>C6oMx02H+^Z~=K^yJO0C%Da{d~$aPxIEUJRP68N;Qg(4-@m^p z;Z9au539Z~EnyKod^5qyPTpfF$J&1x+q1TPC@UAPU#Z!8;GuBNyIPY)&-6A+?$`Ly zo8NJaJ7iP;bPe^Y7pc0Y8j@>n&2&``S^rf23f~Lm)v_5cH*k4Hywx)EstDl-m0!v| z?cfp3h!VlgTC=9DIo^I*k(uvX=32IwGKZ~h%$W3a!h}OhL=WjqJ5#iH-dxp;6WMwp zOEyGj#C4^%d^FkB&?@>M@!(!YhM0;%F6a3Z1RDSGDl&^Y{fha*r_+_gW`A5&pk1TT z(fdd4-By)-kKVL9D$QWknt7jZ+2V`mf)ChAG`qa9`OWxYvz*q`sjuEd{zxgFCR$T` zYBkp_ZpX+)A2(UD=bCOXdA}_|=Wp_^)0fs+x95)gRQ9x>NKwNArr+u% z5;|5pd^kuU zzBsOXaQW@$=O={wU!3wIvANNy>yu21(%MO^feR$`jJP4?JUQ|NfIaG ze+rrMcKaP&&b_FH$#g@2-jf|}``$HQQnR*V|IHF3GQr{EMdR=^*7kyr}u}OOERKN zF1xs`QH=y*RP|S;BFK zhecPeU;CG~quKfI-sAtbe&=%&Ut+JFkZ`2`pOkG&X35kvbIpQ|?DK1u@Bi8w+#>gQ zU5Uv5WwK`yS?6U62?Z_iQc^ivtl{(L?~WIqA`dhh%DLyPKeQqIQ_7~qgu4N0Tnr6` z4D~6xe-u6lBs$tYw*TE2C^%1gzsU`qUrdj7wntR=YR%4h%~|)$v|>)y2h|U?-{M2o zuAB1sgidyI!|%9F3s0&1@DjPlyFcjihxr@svi|FPv?%ooSL)h?vkAoqKRa#O*?&wx zqkGnT*7eU=Gxj`aH4fSRX7$ZWveG;$oSXi>TYA+cs9$+)^KKpG^l7)49sOUi9lYA- z{fXnU;CsO@ZQ5$bDx^)!Ds~2XJI~*nz%-Lrp^M|tTce7s_7xWk!#)?f2igf~3;PME zo__u2G1IlXS7yw5GWYo$v8tzXjYoThLwD^?jto69UFv^?mh404h4W2gR{L(5GmG=2 z+KuG&#z?6ggP+!O&wp|)*r!%y6}punJ>r>X&*w!CoL}z!*5&Zx=?5LDKfk{|*neLB zdv&@$TfJ@l75-n@Qk*)0idkCA-~FGqe%X4l^~ctK3V*rUp1qcrU-r`>oW{tNioDzEkFfGd*gi_l)QMASTJZ3LI|o}}=qf{%gX)QISq~q$ICY23X~y;0 z^K324U(9b_SbN%AIxGA89!rNr!MhJ?cBvkIDyF`$m&xSXTLZo0A4ND`>F2KyWxloM z^u{IEnZ%Z+Nbu}WDZI5g;LF7M^Di14RCDnOS^KwZ^;Mxy=LD4*0cKn;p10{rrbj=ooqVA7Y?c0P(c&)+O*%Ea zr+B^^SDgQJ-ykS{Li`WWz2_gCbN(%)dO*0|yQM-^FUZPt)g97liU& zwUu6;dEgyK>?&2E>1HYdCz(9AU77hRE=G#G?EFk&HP!|fN2Nt_cCTl@2q;ZhcwWQk z_pj9@|1Zjm{Yz;*%(#tv$F>J6VzlI~ybeBRdDeeI%TXh-JmPP}@`5G@mRI|h`0^Hf z4|qTQ(C&$++V8qNFb&j*b5&qi-V;zU%_e$M;QXU5j*Gi9v@UHpua$l!w`H2e#+t3rnT7*?L=nCG)&a&(z307V5KQ>dx*vp{cu~a(5rS z|3F$+c3fgaOXR1*0nQ2`$f0s+@Ewq zwQJgEZ>1?b!uxj>_&9idyK!~Rp|WL~pH#1lT++)C-XOPcZPCJy69p>%t$(lhq3!$j z^nkl_&zxSd$7H!Z+nhVMI4)n-_1yhD|5ANSMv9ZZ&PA0+3*R!I+H^diLMUUi<2v3I zCnat?w|nv3)I_H~cfy(IsB2&6imv3nz9rIojZ*GZu~OCS+N{;a>t3&6JLh|@^Xe*I z8`HvSv9)Dsn~oc?xjtjOp?h$3_)!5~$6BSmxKE4qdF^V`!&~0oSaLqrWOnWimfi)^9UHTa zxqY3*RIFv?j;5BfIam3mNbb*mb?xT)1Yxy3_f|~!G2=#Y(&mggO^*$>)C6xl8~QFU zuSvMxa{qw~*VJ+aFFf1#W0z#}!Lz5&F1NR<_q(fY91yU@e5&LP4LgfQPj%@fvIeK> zR@_#ZDrUB;btBvD>}3b!%2G}A3(`F+Raaavy6Em>xkzbC>qZx^S#HMM3yl_hlS4W>$`?%I5D~a(|V+oXW8cE26$Otod+7$KEb} zN20=?8E^W}Z!16l_THp?f$gQ2oF1&ysoghy>-q0b_8e31-ZtAc`uUS|KHI#s?8$cJ zi|1`war^wEV)Z@QEr-6?RNfIWSZSY~v-MlBgww2+JyTx!|5l1xAl)|2`9NIk@$|UJ zx~(EduWsaxyvcd=PvfmrF}I^%=B>!m$!ljxRJiqseZjj+vMX}3&Au(S4UC>%;3*>4}5r9Hi?sQB7y ztz%AW&qziG@hYd!+^}x5^OAF1JC9lkZC&`wt5752w_0InmFv}w%QxJ~sa<+w_PjRH zsvE{1ugJPxzVK34%(ldQs;ky9;aj`IkGt&1?$44+4)5zaC2Oe@eN&QU(Yh^Pn;Vzz z{8=X-Zu`Sr?7#oh{e=bZz6G1yb@lK3rg=$STH?Td>-@W_8+oF{rOuy_zZj8mbmMKQ z)5nh8zi?}Bl$9v&T)oWY&$C^++8?HU+rM`9@=ddspWaou{+X@s^;LE!mmQwH;(*B9 zdnyXO`%gbhN!QNKKK+kDp~af!o|HT>G%BpA@%Xna z+0%2D1w5C$v8O#rCHZ`-)#eLxqD$YbaK1dvQR-rs;11OYcIgvq-B$+Po0fj{)U7GM ze(?4l%24C2ZFl%KBQdFR`o~Ee=U$mKbDUYQrYFD9`nr$M%Knlscbs)kf1clSSb6ue zjT3pxN|jxX76%=9ylu+oIpTZ&1uPbqt4Y|pU_#yo6|d!=GfsVP3Y;f>kKJ<1j;)+b zsUa-=;%-K(lx*GyhkZ!yu-Vf$$&&w|ksEtc zw+1e3)X{IAXZCHwTc4Y@H$#_f7JpH6C4oiq%TY1m+H#-LnHOfJiu#3I+^S)D_=(7z zwI?ceGwo-cUCfemJ=!Mi@gf1K9#=l?tL9D?D;MEN|0+b4M;tU2y+P zzW}4hWgFS;8XnvgV$&_|-#)DJTT&=|hsBvUcu+IZHO(3sI`v{%2ZwVIWhu z&{Wf&sH+7b1qw=Px7+F@Z^;~fU&St)A%E>>jPI(mj>jre<}Td4Y8jvZu07#5%eCg} z>%EFt=~J=cR6sk+^L=L|CZ1M4w0+fGf#0_l+uaguf7Y?T+fiAyn@#xX&l7?h*NWWa zDzWLCY;od>VwH#Yl+|UO8cTM)k$fjp!L(T0>TF2S*9e{XFR}jimnKNhu#o5avipfv z#Wd|z#|tj%t)6EUY-MxoinpB|<4?tgeQVF{d%(~oru*%VHTPek%NKlkQVK3@VtV#0 z`i<_UQ?pI}f9+0WxU;iycZo<7Lx$i~p3tLv^-mvs>5=X~l_A|QbMX|l6(=$u3eVg> z@00Yp%kI4aa}$m^hNy7c9A@BtcUCpr@?+6g#k-G!b5~{hR~RtsElE41RF`m|rWRz- zGKDX*jSpNXJ|)iKd4WewBc=Dliq^zVrM1fyOg=7UEN0~Ty=vOWr@}!VR=%fW#jd0` zF!#s&|8SW9(~;H$E7i*rW`?{niFe+(usmhegIR}{>n(9%8CW*2JxU-gdNak}VFLaAn~n5rf_PZgOr} z5I6bBx7uQdMh>07Tc^Ejb&`&q5^1!)V*UC($(_gRD)hDAD6jmVS#$QNrCNE;is^dF zfhxL+!PjOhDHZ%mdU2AWhcC+C$f`2s#P7Tdi()?hDQ(_n`z>_S@z53CucTrdc1@}- z*V~%5#@jESi*K@DK$M%d?CJJ0)-1CLgeYGP`@xF`4-3=J}XFcgY>?mm@Ti%`M zAa--l2KS}yM!Hwc{Wt&ovMIkzw0d*Oxe0$Snm_xWsOrD`v5vcOY}ySa&Vc@l6U$S# zJmy>0qr6&yMX5x6e$IUbja{6rmYbHp@0RG|wTgNF_~at>*AeaM9P@HGvfCq)H}hCA z`m3)vuq8P2+OsQ{I5@8Kp4OMQOTM{aF?*8V-SlM>4*bkfTXZBw?5d&8UaqU%3nEIt zEL!8E^Zdk_%Dry4!e*%ZW&6d=@!DFsxM&uul(P4)H`ffxvier3o#$oFwJfvb+;d}Y zgV)`bR~BZ0+ZlcM3y-akykaAeTv_+_IghA}n&gc?re)J*-UnA-o%Q-%)q{=gF4gbM zl-@-ro#xfOf1&b_kI~8H3z_1Mt=lK^x9m7mztxH^3+7l}-K{p{O{all-_l@Z%N-mjgtp;WWMvX zw-mA2$g?P9m}hk-8(U;gE=Sa%Su4+85UBIY>hE_JJ^IpOW9a#X zQZK9Gc{~nmX-yMwzI4p`&x0fKW@euk9!UPE`&#U&gvxX8hoUokWhy@>`};QAyjB0j znbpG?$UJ54ZlwYXMseqP{1-iru4N6(I>%gjUT}Zw!lIzy>sR%Xbk3Q2ET7jHx$xaw z$zQH%tt+miZ91@MTl6fY>vxI;ru9ePmiGB-c;k9ba$)qrKZ#Qof4x*(XexcA|Jy_9 zD;;-E%lD&GRyzEmde>i^fk$m&W;l(oN3i-AB z3u~|3`JNf{?d|2m2fv<8e%fKRB5b9I_lFO+r&?}(eM0=5OPlsKiI0oR_gkHrs9zMi zD@Hl*I?ax%Y&`h-?GCjS$DiG(-T3!QU)9F%U;C=|rr%P0_ON}`i_UGo z9YF`#;m|Q7cfNaKd23fx|4Z3* z?7G`xyW`oMT7^GlA2yy3pKT^T&uw1kuQiK#`VE>{k8rs1_dK)mXwG)m**5XxHOF0f z>q}XG7Sz0ocja;3;i^zu$8cqnP2)2Dv?I5^Zu8hXU1fcP!6w5y4eq|}``S)$)>?3y zUg)^Pyr6!z&V*^r8{ft+RtgSd>=NnvoSGoDl|6(-;N?f5(=P2oSv$IPxaM;%ZaN_~ zy-VhJud{5^l*WAV`M)-t5h$_V-o*IrDEl$y%KRpU;>yqic{#^f?LzKfSXZEMrflsW zSDs%z%j|uBni#8RYR9};-=)21#iDOL8VMFD z$6vg9v1IEjBW>3SVQ(}fU%0FZI_WT+U%0YHiZm@bw(^GH4pHWtUFAPFg*5NH z#_%run*a2<4-FE}C_HOFqb<6DMdZ{0iG~(mjU$o^Wm0p*mKLAkU+{%t&*>Fz=7Q2v zR`*tayJG5LJnfCjg9-buaxDsto*gy0-EN81VrEI-*k?Ngngt zOqZ|R_nvQu&}E-X;iW+~Oe;e7o9EBB=bmpXt5RY9IAPYg*|OPuOTJBcBwF>S`|eBq zMVBj-7r!XF`^HFA&%Ht7!_lOM!unPLp;LRqjnRwa! zMF8W402!f-jd5x`)~jl#tKHTK(M>5=x*1Trg}v*|Z@b*ve*&cfD`LZpYh_FV^^Tvi zQh4QZ^5~~K`wlB_yYR-i@pQu3t-t@CynjE*Ws=^3bB`}xb-Fh=^nHA&=t=(#jpN2guGt&EzyzKA2#dobPm%E-mJ*n1roz6z< z2^ptruk5|x@%x!==$x{m$oJy=EHt{-+(>ADIphAR_v^I_Lv@zl@2fjHCp37r*<(MW z#Cbc#Jx@0C{=If;ORc_fYwe6Jc_o)R!xzjA^{sl7@u4M+T z%LtayFv<$*4D`NRp0PqiONl$+Y2^FJ?dmh!eP!h4l^^c@&b4y&DIGDhKGm0zmnNBV zzpk0~`O6}i-OC)b1>Zfiv=x)JzG%^{#xv^zs`-Vza@Nq-rUCzCVzG^ z6xd+8=Jde=;d>K=m_(%J#5NRqr88(W2C|*aICQ#XN>le@o6R|A+AB=|-Z6>I+Rgvk z^|RLOg(4F?=LE~8DsDPxIJ0e<@Tob+oVS}7X1-CMx!9MbRL*_kB&Sjx;kPEc9=-aP zZgbe>sf!D06%XUx*JJM?Q#Zn@?1wZ-`>PVA4;=4P-l zeeY+$R%V;7?&7U0*TZ+pr)PEI*?#joNf8r$=Py6KR7Uo88 z;h7Ns{(*U0%7xA=yKhu^KK{CO%ilDgEB3Bmrt1AIKEBX%g8jZrZgzt; z7rn0VVM)(Yy{z}d@YbG=bcMKMf%8l69CXrsBvV{cRL}YSwoY%5pjyQL)0gKyKW!^J zb6flJr#9=~uR5=<<(=JJ%loAF&*Ow}o|Cc4OZ^gMFFELlud*tRzAkXjSMc#_)2d&h z$<>V!EH=MQ)>W)K^2B#)zQB5q)yCWQ8m+RsKV|aUm3wT=XEW^*Q|)cm*Zy$x=Pfq7 zsnvHq21u%bvEiY%i~C^S!|%&hYb*Sor4#O}Cw2 zlf1gJi&?*)6idFiLP)Us=QW!LjdTAkE;r0HXxhGe_LAP&=I&ebtZpq*b&!s%R$KZ_ zy2$H`LQ-j4L+p+0q_~vJ0TC0}X38(z(vg;N>O;^T%~OiE@&wcRKR4M62;Y8vX!p*R znJH#2N7u={+~%nh8D74iwf3CdOXbazJ_$?B;GOio@z$!)$J=-XZD;A;UX;>(SjaD& z#pGMp)4jL%#ok`#wI;1{^-o2%Da$zD9y=kfU-7&rh41X_LY8&quO4%4;n=m{(4U>g z>-UKWIpn_$(wDi-lVE${ib8zc^B>C&PPXWD^nKiYxX=IAgsbbNoVQH!mFBvc81*rQ z)#&*&;}@=L&o%!NO>R`y;hVE8*)--s*DE3ho>iptljkA_+6%{{0nd1D2|}Y^mW0JGvXABbp6zC3Qc<{ z{d4*ZOYEjlH9ES<)#fB`ERM_1$xux^h7G;%tecJcgRf=yI&W~+*dgb@QR}NiwTow5;qgSL^?%nHR zb3~#vqOt2uqu`9hmJva{Y^@L1lxb>84DhT7)@^u-T%nrh|3Gp>WptSs+VHTowz0`v)W$t zP1Ku~9{s@1K9l4AE2|%I>t^m-zCM42c>J`a-)kLSUs_pLTO#uA|6}Khk{=JnQ$+)F z8dq;W-uv3uQP5JT=eYQbrXJHKr-KRmkNtTlA+TRC@yp*GF7}K0(t>?t%imnT;;ni< zWZ$%1suwGyzs;(h`1X>x*}ols&+6xt%vur5q~ZKP*zNAer^3x#zZDI8KK*Ra6FXQi zt+tn=s_V!+g+q(d{SUt6SNgGC(Ysr4YJyyY)=W#)LX}lVOSeYOnI2)Xdf^6-181{# z*rxcvHZb8Vmoi-4W?{qJvnD}3>{dHUm+hw9`C*R3_>t1EUF?^|G=;k|wD zJ;@`#P3!I~-2UuQ-{Lc=(_X9D{5c(ebaK^gN4x4>o44(IRyjH9v^3+_*k#f_F$!t2 zfj2H#FE3NP`|GL5C9!$6##;&##r(f$A6awz@zFk|tv&Y^*0#^wd3VS0Io%hJI4@$6 zza>8L>g=uxty%BPjDLQbS8=OXH@rr1e{ZGbq?omxE~syPE3RyhnxGr#dxl zd$E=O_I+taU*Ut8pzOJzsGK_t_ zX!iCCYrgJ1$>VfAB&RZR0 zVNHqt&VRrBex1O9`WX^>MRK2%4n2;$Yn2?9@%pm8om>n1{J8lw|4KeMv|W}dH^_AJ zIk4f$jGW6Wx%XB5Uzu4V99#a_n$d1U+1{P|-Hc5sw5MyC zB!VZreUg{Ib>V9f&$5t>s?%N6x2vw+pkOg2p^-t1zca@5|KDBJax)m&rc8NKv^(^4 z$Wal4%OJ4+Wu{$vx;+2C^xw5YpVvIP?Or_Z>Pe-CPxWqVFZ$7yzn?G8uKL`!&q=Xr z)5A@x|9-l9{r39!eRW5dh0m#d5IS$8<^G46aXJf)S66PS`IZy-%v-Fjds&{BT$@g$ zSY_m9jnkj3R!z29oiaN?EHq}XUCh-zXBK^F5Vv6tdGvM0*8BY7hWZ=U|18+0_oHyj z6QQULE-jZ*mN}?}R?JTM{AZgKcM7kDeC1EZXERb{?se+_4!4}(#MnLk;#Rl3|IB|1 zcRVT#e*QG#kEQP78TCDl>RRa{g$fBA=&*QP@52Ri4tC4^Q;$G4lfNlcyIkif~Y z%sj?!wO~cWVePoX-X8^?89(3rENJ114bjVfJ~cK?|Ha-Rpm1PWPo?TC@xa>D3(u7Q zto)@jOJ^P9buU|uoxi5NPQMx&tiJNs>SwEeZR_Fs`+b+kCU3FOoL_GuHziz7_;tO% z{o%jw?Z541WcS~$J@&xZ%Q=TP&t7uI_>tC8g}00SPFtK8JGnGVJ^Zsq^pmvR zD$M`1y!ig}Gej$x=rJm-)hMdn>EFQjgXx!YvE*Ohuw2UzDc@R;f91DlbU&UM5}IUX zvBjQug6Z?i%RGL1oT;CAe)g319YR<2CcLN(y81jcHts_7#$&1TuJ7iNyR>;l&s^Wn zPmRvUH29cAnf(3tY?6lU^0_{9_i#NB%bunm!F!&ArO@}lx4cg&aT`~^V0#(*e9fZ{ z$>=Al-dUU(HSBnHrJvV6k zp7yEqL$7*cSKM@)$Ehs4_aFLs{pqZqHIY}crBqJe{=Qf)Ve#vhxz+b(R37*Irg}(! z{-%_p1r4r~K5@{C#}*?0O~!jkIzlm(kv7HX_)7FKWJ;B{DTzQ$d#A=&77DGWJeW>(@5*A7 zoV|$s!=FP=OF5n%^I6!wh}SmLT>OObof91SXVMh3_4SVJ;N?~*4$IF;U-Y=*Zqj!d ziG>PnzMB@URORE@xX5<8er0WI&DqOc(tDSMd#a{bY?x&2Jm&DMUZ^YPQ1xkVzs?i`rN*giqkxIOVk&fUrU8t-{I zZg}k}HJ;y?*1;{d~>4TK<;cGWj=OsRCu-dWD^>xAZ)S{k9snqGdB`4dT{Fj)> zYP@Ns1LxA8JRU79ERE4j9x3h_Kg^iUDLqOMpKSHs;d`?|2a9=AqyXdOm4=?YVZM!Q z6W=*Mir=bG6nTwv)qd`~5^G$pis+O|$xf>mKDA4`Zh`C?-bf~f@C%v@+Lyi?Z7|H+ zaed?K=J)>RmML?$wDB6}z8sn@P*~^!=->?w-XV}58Q%8nxGgpk;jlMwN>Pb>e`6iK{zPIHk z7%$i>^2}+$?R@veWdaG2alaNj{jxeGph7u2d)3|>dAmD*8ErB=yq1^aq5U`R z5BCo+ukNi)_xqx27FIlu9_q@vniJmJ3ct@Ns*0w$?VDvHPQ7j0pD#aNra z*t8&|)#;v?!2MdQs`>{D-sw0lKfuNKLoB&u&)NeILwiJJw@NgsZ>Zl~<)nY)`^23G zFEnhMAh7yD|C_a}+e{O-3%D6Irv+-x5mJ?Tze`zqTjha!s!uMPx;}_ZU}Su?eA_-- zjk;4Bj8|WN;$%>bzL34?4*7M>w}th|oW=)At&?9aY0B>@)3_!1vxmp! z;G?U%R{fl$c%sPjAxr*~8(W3S|L%>wsnoST&~yu5eSNESZa}&8VhJ;y4*Po3w9A_q zmA$lcxEJK_hNbcCl%vXg+9Tqip95rS1VQtH1JlmH(an-y#?V!NfL%+jT%rp==q}Y;gQ6O<| zcHqL;pX?D%OX{z9cZ&9W{r>7-Z#wHb9ZS_Y>Yd9{J3O}E7BtJ*XnJCAX~)9F5}c>f z0;eAFXZ!i4{3VwY2 z@Z-UUivR1GXILEL&pW;3*}j8CA~Eh}fh;m&vcbAWJu^Ps-7C%!_f5EHTjeu#*lP-{tOSo;xY#K*ZbbcP9R`*9bEo$mI` zX--yCd$ir)xRF_Jd!|N~hRt2&7j?mt&SaF|$_XDxn9op z=;^PU0{oinP8rfByYyUtEYHsqOy8D#SM~cFGse@5FIel3{gkQUn{#-t`3qK^J(K+} z-#vd*Ht5&C;?^X5GgUSehYQRm}s|6Kwrgj2JV3l=HOzrB!C>4AI|%amQKY$Xr! zcLeU9dh+U*{(gzA#)52F&uxARGA}gKJ|%NKMv8Z(cYWjM%a&UvOwQupyjyO8ioo3U z&1_x=r?$C%Dzp9bT>WDE*$Nrcik8UNi+5JeywmXS!B$D`Ybg<8DO_wU7p9lRALTy0 z%KL5Xoql`HGwWXMT2WSBrq}2>OOows*^4FfSQh=*H8~{o@anntd;fhlcV00i=21}9 zZu|d7H}jt1)9N;9ihTI9g>OmdS)Z24MocTJPdyi3Cwin{5?kuV#arY$`f`uREEWo# zqWU%JR^ErIo433qmMChqF-RC}zIiZZPgoXH!TsL_6=g*-`)sZ3IQ;$nmZiL^Y7^V2 z$nM*?(dmEZgI2@ZZ`X}wm=^3lu-Jk{d&>FR>JyFI(s(XcBvy*A5D2%O|Lpn&&XvVt z`|Pb|mt`J#-e+8VdyiAieuaI{HLlc7K7LCw=8MzCH3i>ao_lsk(A`iVcpvYBr}c@} zYd8*QE+{CAcwQ&y5?M2K`mg_Kt?qs}e|`Pa>Hq(@)kSu?UlpC9`DEtp)9!AQPt1AI_WQQs zg(+L-L|P^p87-QrYWY0ZuYK(~o=ZMw?2qx?X4AB}+X2FbT?ziGDkImuGCsQCcy`Jwskq*!{!HRIx0?|8h7qw%5h((MxI)xm3}R2Cnt(HCyTK(D#}&0b-HXimS^Wy9pJIX z&2iTKN1bhoB@OG(9(1>T{Pf8if!wXUAKdpVDz>cIaI&Gjpa1;TX=WzVm-`&GNK&j} zW3t=J9NGL_*Vi!3?ZWcUZois#pE3S)-sX5raHUPl>h}1rOyAbr?W*l&-Ya>!zC1(t z<^G)Ktm+=cLMQT7%_oCRpf%|4CqTm}L4V z^8H$)KPTgSy#zQdf9x_;eVi(Keih5q+1O>HLSms3fwqz#H_hEd)((qd|ff`z$Csp<6bT6 z6ZxHA?{~_Y2fOB6nVVm@^nT6O#~ooOHb-U8^W6P7rnumN{)3zuN7{51e%oCL)o2dw zKdZsZxWka)Z@@LtUH|Pkw@s8*`nKQf*Y3b+#->MSxGFY&o)O!eYa%sc+pifi?<0<} zixm{Sl)D@3(pjgbX<4-4z-87e`MWgwqbK-wPqf*?*PLyjQWh0?KjDb@pMA4a`21{s zURB~#y}Tu3^Y^uN&c(?KE;{YdHr?XN_4{43jqvMLoB0@Hm=0T>e7KT>JBg$I^1c^J zmqeHQyRrRE`WrC8_{q()%;yS}biFF~sh<0w!Qhy_=lP|FbfZ$gKd?_Xx5{Si9QUWX zJTD|x@Ji_Jv7Ys;c7ftyxy<=)t`9BWOg=vGki%=Kvj^;bZcINb6%cJG?O>~NH?e#E zs%)2g9c4F^cb&+VxTk;V;xj+ve8z_kYd=rFyCSExFN3K_cusT}W>{Te5mtJlL^4}{OKeETTmc?(-is&f5;=W^vioI1;Ynx9-CZ~Xmbow?)B zh6yQx3)ZY(aKUp*gz&`2?b=Us^B*_md!Mm&xwdC>gUrQev!D9*zWia=VIL=@wrOU} zkISOxf5lGX+QHM$^i1pNMjr!Dj>%S`>*`!Jq!x5>EOkA5^sJJhM%)tS7ulzNhj{*F zv|g;j%=qi|gV_(3GA^@i{jmLC#rMbeUjDt-vFq@uXB*DAa&^3F@e+P(R(r`N_}?7G zO7A_^tuH?uQ=M-=<-6KU)~YG1p6=YXyIt1i^6$55SGNdc$p2b=alf&?RmY!qGsWLN z6?uHFwW_oKLz0Uld(NS(f|#|1OCKl#k%Jf z>dKv%)_J7mep?-W`->MFU?J=__Z_nS`%TT>j^V{pZs!da+HZQziaO#Y6^VfXG zyjPdb@B5j4c5PtM(S2IC?wkGZ`f2)CL~4uUle)yD$N#ibujY8Hc$wS58);f5$-1S< zifiJ2Gou@8wa=EmESEjwelKwYdx6?U4o8i3F)MBUf3BMo7h~(S>2>?96@S8O`A^*R zicqas{`_l$;r*TVE}YRN@oq*!aXiZkUre%+T=9v?r+WXh$M^p6SHI^wyj^{MpY`>4 z9+T?T9N*F+o-0PZk>EE1O*+Zp!bQKPW1eUJ-t+!baq7CZ#_2_SmoNMN*0xiwcCXu;gq)2hE}QIk zbq>_gdgHl#W6yIh+320^c5XJu6g*yO%^}eC-RV|YT&cS0 ziCwj*abH|&)|6?6ji&d{iQOx(J@Ux%QOT0l>&3DMRtnu)<8jSsmHh+u|9q!keB;bf zKPz3Vax#-^M)SclCgl>|TU)lu3Kj1<4s*nDN@+Wc!0A6!2Pt`q$$ebP#5!P?gr5|Vj~_HDm3>t7mYYj2tT zt$j(hKkn>`c)LTW^K|*m11c-G^_XmN4U|!gG7>7(+Ho(Iuk-kcg>T*#tW90lIm`O5 zY)G<(`o-m6?_OV7__lb1VB4J#n}YK2x{m_(4SX7&3O~{nV$1H|zAL)0tlZ%2rT_1x z0#gqzx{}WSru+Q7#}OCf&J^=Jyr{Zl-?gfQr&a8yUtKorI?$T;xmz$iBDC}Aw{OyK zBcH#l*}dv|h3x*bHWR;8CnP%ZyQLn>ORZUU-kH(*4mK(Xlmc^RicZYq?SH1{3vbH)eF|y&uzEv`;Hr=ep8F^tO}ngfmWz|`ZK*7iGZJCWPG=&&%iyQu%BKVkC43p_GYbo;~VP8@Fd?tXvn zySZ|*^DOTKea&QE!O$uF^X{>jv(W-c6F0>KU-C6wxmHVz+dTBL^}+7fd+jzz%N+lj zcH$-Tz4gm)ugzkQ;91>rYn}7G;P%tE4zA#TCHCT4B>#+mjzML@ZSvVJva;{@|1T-% zIBt@DucMDA_n^`9?s%@>4?euT`0=7hj*0mTlbM>c-%oG2er8EyIkS+;#0_;pN4AOi zZaezTPOdjl{otvidzPF&bG@c^_VnU4OG1vO8a3a&&ZvCp^sJyOJ|R=5JYoBD>Otn& zos8Cx_pIjMKEH_Z@%i=t{w(+XdpSc)$7{>&)vvAeoA&Iv!&sE|!1!hTcF_&t_xH%O zxRxw^rxf|BYxz;XF3a4nd|plh$<|Gior_j5R&ZW!v5dQV`irGl-44$my2<%_F3=QW4oBhhKr{j;ie zOYux=VJuIZ`KS5(!;J+OziJCk@O;SnsPMg6f~c{z|M{&uy$pkUPdgl&VfuC3*PU&T zwsEub&-$oT&VAWdW6}Cey1U-b+q~DJ%~q+KPwJFi|H0iISLB4Ao-^{wn|Phs^m4t!6t}tz5Ckq0n&Q zj;LIhzP_R>4*eN#A9j^0Sh63IJ|}VQ&~3Y2(T&`TmM#!^E%Crr@K1MAjFozm*_`6L z-dCI_`-b}e)qgzC!;HT<=?rIJ>I4^2(bp4i-+j4&e@^=hmZ&{E<(oXdAM&(jVrB7} zZ8_C(LCMo2Q!iR`Omz^cP}dDJ7F7I}mw)=bu>0M$Hm35n~0y4zrMJqmN?6|bR_QMA;&rQ-v`YYeQdpCcd z_J_~^HyLL_xldaSjV zOsK9?DnFspJ8g62k+9jDh1u=S?Y$-^8NEC0Yxed_ZT`$26S zKfGV}U(NpjTgt3|Yp?p`mKj~|h@7T8X8C~!xjV`(2vB%fQ zc;AI-yN;zU{^Bt0i<*^->1~-(rqZjXCUYf#? zl`Y?GyqxL(#8qA~Wq%`{MeM)E-_)@8zIEOA%=dR6O3Fp`NT>-wioF+Tb*Onh#_)>!7qscmMzBSJ+l-rCS!kn3n`qslEeUq*hG>nz{2_i|5j zb8{^poQ%KEF_ruA=|7y`j_NtSx!PT`D&KcL`p2#XMF3>2IaZePnNuO zFV>ksl=xbEFTMIN&S+TmbJX^ zDqB!P)n&7^o@Jd}Mqb4)wO1Z(tDn4J$37AD=w{zL>n6Nt$-H!U!^`Ws4_*p8c1O=V zoRGLqFd{%vOi+H_OzCa&@-*sf27CZm9VXoG4WSBCkx6W!cQt|1|Eu z|D9|q+Y}{qdCugs+)RgyWBp^VAAbMuRcp$uckf?pO*zt1)phMsWXkvDj%L2kuHTZq zYpvxbo?x!EC%Jt?n^$Uior3PlmvP)4cKiQoGAJ^Yr6yj={J{B|V^(?D$tka=80{8F zSsS{6Nk#mP#FyjdQ~op=PBg!`jLoOY-1*$AJr=8WdbDkLY)M}`25B7eoLKNS;lxO`}r9;bL%M9NkL^NBfFR$ zbxvzs_Dgl``D0V;svp%TXFor@M7Fs7bm7@kF;R!eX>7!2n&&$58nZd%qu!sl$jd#iUiA6<;mBo4mm1o0Z z^H;kG)IJaInZ&-KD|6PqEz^QbpQ`0ed94zvvo$=h<(k2Ry=}3l^gP$D`oDMchJ>7& z;>C7T*`p8C%r!Pnw`@J$&R_3i|4E|t&`aMYr_WQ8O`A_oI+{Ia9((#Z&6Z7f!fc|m zE$n~4`>px+565ZKLrhaeCOqJNwn^uNq{*g3g_pd<1Y9%MzUErYQ4x5`i&@wyYuQeb zQ-yCfZxP!#%_#gX^IqMZCmJ*(ZaEz6(tMLtb3lmos${I`^ z-M{+o;)SV+zovc;P2aXauDJ1G)Fl=ko_^uF{l9#k-1+DC)!JU(;nP1kQ?-g6bKAd{ zUpFtVzq3^#Cgxt8Z1u+IO=+3jTMr$Xl<3v+dYi$9xDThkNSaY>=w=HIG{IBFzq}aOUqi?e9_6eSI7Z<4~SFF7moPX)d71^>J zGvzcT=S!dGeXmz~=3v~b`Xea7|DMyR>LZ}|uR zzndh5_(R&C=$)GxWN_+{>^zfg-sAQg3*3Ot7?!lyx{aH~VxY)%w;&S>y6Z3e6 z+S83|MIQE?b@VUuoe{GyYW2~>yrl}upS=xCy<*q35ZrMa^v`#u{~gZ0-6bQQUOac!k)K`5B(|`)%KPoK+_CbL?Pj%!zCtrENiChRY+7sg zwT})eQp?4qq%XUjvg_fC%lhnhXQOa4w%Ygkj#DKjI|=VtV`jZte^qz?Gocn#J9l0BSIEi0 zP%F#8pvr*z`kUnZytK^plKlJ}y@JZQk-5dU&4m7~i*Gz8?_nl%yzrg3>Ed%wWtP9( zQfkwi_s(cl-!hE}ZazXf4!5pV{<)touHezI?M?=KMk^z+r<{o?yK zwM?6&S9kC7rZmmPNuKvY3yYk^(;vQk(=zAtD}{)%;K`dWo9BzCFHg@u@vCjp{S{AC zZ(g>Z^?6mp(Iv|Y4QDTH5?ATEv@DOMSLsk!SNE(VsV86WNZT{z?VJK}@2oa`xh$&aA2;X!r_WFQPfIo~cU|;UR(MZ{ zmievM@i&blIX8tg9r~~M#zA>QR#CU~*4OLuHW$Y&)2a4%tmu;3dhPbNmskH~exIuL zRsTPe@wrJh(Vdbidicxk}}!DdO}A2Gea%UQ?rZwrB;?W z3AOrX-B7q9@cM^X+SLPxraZUYf4p)*h2Z4qDu(JQPrk|Vas?*^1n~xl#Ai?Z)O_u^ zkf7>M(TYtIx87j-D4NOPe>H6hOBo~E@uyX-3z-{)BQ}N1V~Ce}%P=RT!r({uCQY6n za{{M0O6g^)RGwb7qW1IK03Gd}3zSW2Y8IURx>fbTS5wdAY0Rt3dxM+=5i?mr{oa1|<)i%3fAsI{`^Hoo{Tk6-PS$&^-TY(td8~TQ_B_|;y>i~qA=#W?b{#R zTPBEG95*QXuC(q<`@DlI+6AsM+iV82j7BlJCx+OuIdw)AhB`vWekOU2@&;GtIHCIGn(E zVEMs@Xzk~>51hzti_nz3qo}4l*EgzB;iZF}u~O-yh)urHCm;A^Y`wj=_;Xxqg+cg& zI7hXFZ*n@x1#I8qvs^M`cXsPM@L`Pnv*MF$JD1`6@+gL8MGZNJ2StHSe1bYNSL=(m zU${Nf)hzRr+zKAUAgPu^8tDR6hm_V$mag~GZ(ZFktl_A#gnw?q!FB^r`8OH!vL zulwj!(yq4ipq0AY@l{efm-AjSy#D1|A-0d#I86WEoV|Z7uu zxyC^HjMVCgsSbim`Z-pZUohUpo*W^*<5^fzR1#P4t@cN2Ru=8Lsd;Gq;reL|8v`eb zNp84nwaxN4@5#Tsu4`9hEz>ZlHtbxv!8f&8=%AUOsk+RSEt|Z;B zHm{SLkHt^inz15xkJg)h*L~49+e<=tgRk=WRTZaYR6DBNeR;xDKI77rk9y1h{#@X! zA;{&`YrDKlMBr~|=u0u)Z^5?33DGhZ8%25k_Z#z-UVWbUIiSKY&e*nI;O{X$-eo+d zvCW2&f<<=E*2p@~ZBUr6uI*9y>k^OezXHFkjek!Z`nkcR;O75{&nCR^WPJ0yT2@x2 zm$gDM?B}6%Z%_73-I%Z{Kt25ZHTjFiY*v?C?KxI0EDK4BjMlc0IVmyeYy@Ld)nS&S zO^$8bLhh!!TP|omE4K6TK31j0St9&*7V@z@?U*8SdirbbZC^_bm+D+-TvVkMmt4>C zRz-vTtI^HmU&>`#-yHW|nI<2RA$H-i@tvc(I?pa=|1MnpuEI>Uzp+nbw>E1TH|yDVf1zXj$Nt4x1kwc@+0`21C? zc^=g_Wc{0TUH*fPxKn|LTzH6xk5XIJ$F=M^rAtz3(oQNIuX}fE)lRR2OS~RsUEHeI_`tZri{?z4Vk=dfx58wJ4Ya;u6;=YPGyEtB*c4s!6+3UC9eXGJE z3H|8CFK64>%$K{|OuB~Tw)y{b(`d;mD`O=j4nTK3sis#NXd-b>PdG-CX zycZT%&f+V(pRwxLv?IB{O19qN6gnpQ?eD%@Of#NWPoKZ%!HjMtiAw=blVwHz*~HE0 zGxOZK<;lj_Pjf4Rp6F|~P8Sp7sc>Gj;mgt8e_7wnsF7u>%)K&?)64t*@1l>A>m6+V zf7EGP7~w|6AoD;2Lg9-39=yZ7j$i;+K4Y`(k~s&Dly`SHSxeX9F~sSVeTf9KX+Q7mn) zTc-W-d+{WZk8h2)w_VL$cCpWICeQ2KIFsC8CfjyCtykP)b7Gd*@kHOHt2+KWy?M7I z;=L2^zB#`hE`5EV?H9XR^z*VZ13i(QcQ?JZe06(9tnD+4J68L)O8peGW8*2?R(0#5 ziD<>QlItlCLhT#vBXwRG%2g-MJ29!`ifq+XS9jy1VUv@Uty^@L*Ib@?ck^HA#fK(N zP6*Q4d9dxynfEv3HaUo!mT>)$M{TnyxK8>YF2ukv*#`fWg~_EUiFyT3rbgOfw8By%pZpA6Smhg)5T%#HEbka6f$NzuR(&Be`2d%p- zcaB45=AF4S=gys;o)+%@=Go)h_22DPg6DDGtG9m~IrEHg9M6r}r8cpj{+<5t= zoZIc)ug8RBTCTaKnf`nS-yajHw(upZEMz-3NqmoZeNg56<&Ossn)J3Nh+oxNH}i+@ zS2pI8ej(XY+RraCIVUEnC0^0D=VjH~uQSY-#ygyn-mI)*!MbenCXZSNYpzm`;67^Tk5Z-Ww&;0B2d+fd+uibw2a(8sUYEy;8 zt(;AXsz-EgJync&78}&|=GdNfXLa=~Zod=G5wE(|mB66?N5RBQDfjY5p zSA3svYA{n8|pqR+kSG3i@($PUlTZf*~m2?+iqPRcd&l_4hO@lZ`v$ZE?2mg zA#-DQBUjhv-uMuK@8NfHJZ39MFm871&6w-Da_>eB<;ID%uX>rwU-#YEF1>8e=Hqe} z(c(4dxWk_5_-?YkC1e@;t|#eIveLw8)9qIjEFY ztCqqabzD+heRd($CR@T`kKF&+r>Ki46jnNT6x#gn5SryBo|E>;^I$O7 zy^IGIGiS7{+keW_W!p;o*HhOwtvejD)8XLbn{9Vfe=_f4)9<(|^Jcr~BL(hoRjrSW z)doJdY*Vbe)6RsQRCYPgJ-PewW8qnQ^oq_zKiROz=hBo^88?Q>p*6=lId`N-owd-D zohBfDIn~B<=iXeSWiLPc*qrq;}FSmU72cKUQ;OyKh87tA)+3SMQ6`gYF2wsC=fu+w}kB3Gce5pRNfzd|b@Pi;+v>ak=o` z{1@?YJ!3s-kEuFhcazF3>Hdj`vA7r(t(iE2HIX$&+eOa-odf^~g7NRi$^! zFU)zH{#*Ix&c2j&dWI&iTW2plz^0ZR!?9!AS`m|*9@%0HORAo`=~OQi`EgaFywU8w zLWWes-X-7e$)BvyTi}y!#;$f?`VpC&*`22Ill&9X?k!|@_~4kM9VJp*G}Gfr$3ule zZ}C@#%;G+ti&dR<84ff_F;7^rcg8&BnhQy)6CK6d47fzNA6R_f5N^1(i|KTB`poFr z_x%oe9a7&?6KQaTtKfk1bh8`Rrb&3U`mLN&?8&TY@ylSw9ye`4{jNP99KXnYHthR4 zeRE%yna$aP8t7pVZYX<;%?HFl>6bbF~n6(kC&8+z6YlNbhzzPm@~h z`zH+oy*zuI1=?O`8psDM2;O|gICj>RMmDF5H_9&ko%T*+PScKSJz}jpIIlmbI`>Ow zulCG0M_)Q_dvUDmt*OV_hApoaZf5e`5nL6&zx4z6f1b!+zjDO0CmSQF$@Q;2 z-O`*HI_^}hKY!lu@aAZJ4uQVB+|;)hny)e3^!n4l6ByUx*x_MT87jdk;(Gf0fAM|3 znOkrBq;hxlWGvXtl$RyD+s$S}HTybO{#m@c)rG$b?tWae_DlTp7{*t#8Eu$zk4ETo zyt;Wvfnmy(2Z7RNth@;-i!PeA%<+3DxG!**-rc`j4sm7_#ia&|{AMapymf8G-ilY2 zO;4A6%xe02v*A&tWtC;#&-|9Ff~Pp;-yCUKGbxBo?P$nLn-^V-ER%F*Icl@aI(U4E zyxnKf>v9^U#c|zPE+?l=7S_ije=Dhqr_qo~qITgJf z`>Y>i{7~)E-1R^)@AS2{z}x1TTibGR&tF~dJMvLn{{^edV5?Vp%x z3nw03b$I(-!}{Ia8k5tv$7vQTM249&+?c2&x8ca#f>5rrPWneO1ZLN|#(wd!WoOh~ z%5|6bq@!{2jfb0*i?4B)7(d@!)ZzVJf6=;h2ED6ol}rUI1*_%&6UBP5aqUoXS z?b{#DJJ-y6*5uMWv(J9(&OcbTbIao5-Oo18HZ?L@J?-oPyMj#dB6pAN{}oTJa^H4_ z^@n^`-pWM_RNhV5xgy+EYV{?N^j~M!O&7V-oRVU`@{!JYp$}G9S4tVYm*x>!|NB0N zRbyrE*({%#_a29@Ulbnyt#e2C=J{D%Sv#jp-5xdT<*u%0AGJKqckipz(0u=9&5T!h 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 z z(PLEb$di?tx@&4^<^2_@y3e*OJ zEA=lnM&ZBsc8mC1Z>fk@-*kr~i@)0>Y&EMzhC*a*`2q(wVF!8cCl%Kv99pF(JD&P- zz__Gpt%>kiyjJI`hJ9c8!>x}#o9;cmFaC6q=b~%xzi(fD{9uF; z-}I|J{NEr~DNaj(~HX2I$27x^yk z4tn#vEy?OnO-gR#oYOnXrf{DtlfP7WntAv8U5k`Va}6VJvY*mkYMgI(>E!dgKQ5+S z!f%!R^gn%yQA^@~ko@fBvp#zjNBEFKb_$)kUn`?cn7X{_ePbOu*B-1}4kz@HzXj-A>#p!?N~^Y@e9* zhU3?tev_zvtg!u1Ry*gf4H1DyHFwNCD|f}qCZX=IfpuGl^U=q}o4CrDu9#kqNZb@K zxpeUh7qz(+HhkGK{p$@+oP6?iYs39z%)2+dy?T7hiN?30>4EMQ3q7A-P`*Fcrt$xw z*^~2kSsr38(XVWC-)?wL`bCwrwAAe22@&m1lCIC2dc7`nNxYpA{pN?yyenlt(vO{) zJL#KONcGGvl|8}6i|YzjGVZL6yCPG-o`3PlYbUpprKfLi-1qPvTW#LHEted4ZNKd; z4-@*rU!1R6muHn;U3WutT4Q+gq|6t>=MH@=-_R#_bVm8++O-Ms8Og^kw*FR{Bfj3X zI8x_C?s=Ul8e7jwN=|9p5j$-fOMAI^e$-Lno7>Hu)$1E(baqWX(AsLhhxhNhAUET8k%$ z_b3>})W2iu{=pTyMmd_JJwdkn)T0k<3wP~cRIRUnv3JAA?~~T#^(7qW(=9U+H7+;W z6Y)9rgRQXj`GOyhMECwr3%^p<@2|F_GGAR#cX@@#y++5CPmVfOM@1;}@nqb&nTdAk55i;TmD*b#?7D!yIm@aZMl5(Zrxh1;~K~D(eB9em)^T?Pv9{9%VHfD zoWq&Exju&X>~5}-SRUSI2k*~XRaLh;`s+K6;|I*|#douB{r-q&lo`FGZ?6u(-jwzg{Hx{0Yv**BKzv7bNs z{yO)p61U$E%r_j@FPTu9pEf0-OG;YeA0QUIrryA(LAB}rFVnw^xb~_PcnZ+rsb=?*XG~b z+K=74Z?k*-2d3Ler>0Mu^)tz*Z~CeO_DnYn@0jp=c3DOGK3=7WWL3t|MteG8Yg~}cX#FQ zPAsV}Ncqa9k!=0$rQW03*4K*m%uP=&Z*vYYGXO$d59btDuk<&5FS=l#GXMGmjtj~hXGxSx>KVpPTlSBY^qE-oGc$wt@ii_mub9DRs`l>U{S9U|dwS=6-5!|i8&h~(BsAxrvzPPN?dQCN z*0`B7^Jd(;nrFnwyV*Oa&Z@7}b}GxvxqSm>?Xq~vCi&^(3x^E~u8~*NZmXaA%{l4m=E(DkiU0Y$C+BM$m>+q; z_>@I$efw^``+HYUd2P7*GbgLitxlDMu#kw?leb?E{J!;2c6s$>*T>qiYuD9Ym5kkW z;d|TE+m4Y1b2cn)ynBA_?{0r}1*^}GV*U5uTDw?x^^7C3Grm2HbvUQbdd2bA!o4MI zb_Z5nIJf`q%PCX7{xLdyc4plE!=(;N|9$h_i+1=pO68@bD=ccypKG^otVZBIt z?#DM1_!sNd-Q1jez_)Qlvf-;gO|zKKJL)k7=$kE{TCD54L*wT5O#S?a?y|4mxrnXy z+tgxz;f^=+oeIO(t6WVlcka47uRLY%y`;3ny_f7t9zVV-_dGzpCS*$U!?MIbmH$%a z-WA&WIc-J0!IPvPvEOCvm$rxpyqDe+D8IQ;?}2{P{O)9X>sjl*Hq`gTPgNE>!n0~~ zx3in6Q0woD-_Hf8PkVe*a8-TBh8I76{Adr-?YgAq_{7iqPJa%!*3TmjO?72`Nv8Yl z1eV>txx+~7w)1ZJ4`&KP{=}Tq-uklivXxb%^7V~{zuKIH^KQ)07JIKcWywS9!t(~v zTIq{FWyYFLiSzlAr(M1E`;zC8&lyjFXu|CM0JvsH_T&ISc`>c<@Q>}Mzm%2G?dU%W^sS2_ zd5hO^>0UEx{$Doj-Fa57uIl&A#8*${+|C6zF4I4JaB6N{&*{_Zs`ksTzkT}c`4p#Z zrg18Zug{#b`}T#4Ham~GNTdcuy_Bw>_wy>pZ~Zb#)lZ{>~OB%j1(Dr5X2(sB38 z>KTSS`bvLma+Nx#ZNHnSpZV8zme-=m4;$`!7S-!HgulKln#i%bdbv<}r>1vI%=|Mv z_D_Z5q;q?}?knQ^_UY9AMD4Vx7Zud^Dh1E{9>y>0ePgF})O>?aB2WL?#F$UX{d0EB z$!=4nLin?1|y#Bc|-1^V5RiCowzudoe)}Nj$2_Y9HdY@{F{VPVKp^pCd6D}gswgolGckMj{ zyKbxB_IdGaPo(+RN3Xo5rMAdK2xcU_IitA8yx=+42lNFatES}zE@fn3xWY_uD^N;i zabi*qcoW0YiH_N~9Ryn6|JG(J>R_E#aA&qcYr^uinYY*$Id^j=>7KoHd0pAnxl_CU z*MwO(#_vL`k7P5e3S1X_a@VTM{--&t~TJ2OI2+t+SX(f-kUG;%rYP}`njW2^4>2g zyxbpyKDW<0Bc|f~&1ia#%Hq3!jvV@2xXCz5vVUEf#Ju~v?mN0TPD`&5StTzk{4SUMEy>YZN4-g3^;;NHHyU~NwFsn_+oZ#g@9 zjXyYMxfO=lxOTN<94vlhWAQ9CUSIv;;?_OJ?R-heYu{aMwltLdc1h&MHedgwz^c5- zJK5rAUsC*^;1tQul5*>}u!qp@CN3z}+r?YSUzt3%I zROl;q^E;pH&cFQP_hLi5{q*SD2i>PgGtYl>(n)L!&#u>jW}$1x!e}#6o0mG9+{YFnvT{>{SNi5I(7HaLAjH=4otH9(0-jyG4h*NX>;F1Gdss7 zh4<&z{OI!&@A}lzQy&>_8*zD)Qd*X@RQaD# z)H&N=0` z{lk|Z*T0`!z3)iS!zX%&gFeq$?DHV`=(OxPF~_IhtKK1ab@h|gTiafrUd=!G_378z zGu8?Ib5->^QPADG!YqYH>gKV}MVe+4mQ}9J?#$$>3FchcICbd-pW?t(Zt8u}H;*}p z)(9S4mK3xwN903l=Ty^7)AwGznvMEn10P&kbu?#VPXE{Jqo+j;Sc8MkCQAALuioREZ+HLRpW^Qy${#V>o;%&7Dbg*^ za>;Vju4pyo@8AA(pPbtDU}c<*SE7ln{$ZI!&%M6) zJ^L)6RzJt0TrhA+%*UY2Fg?S9xY?7A`9}qL@hcs^pgFr;Q|M*#;u)tRlUck@ZwOwx z==!FXn{kQvel0o2_g5~|tnSc!(@8s?@8y4aKxNgg3nx2S9+uCroEzhjaKL**>FWc1 zMg0pDTIOwLixUnA|M4Nh>zwDkJ%7@^T8rwi>A7X^ZtsZvW{!c+)Y*&@>X2q zc9Lq>U1qqk;dlM{ZyxK;m7Kh|sJWgq_j3HKW#^B7FxqF+yuI4*n_#}|lVXhd*EPqibiaA(|D4rzx0WA_UFf$ms;6rDE>}UGWnEu>&9$4oYf)a$(}z`C z{ErqbExlLtOfsJNm#5XQf1cWBCSCv1+h%8Jd?RJc^FOg=N6Js`I5b(>>cec_yGPQU z?itAbX8)pAVlJb^{Ku495*f9;82(M=(GEV zik0mFBI`ukmD}7uUu84g9Z)Q<*I;K<_s98z(Tus8KfL!J`{KFiMZcxxv;P@#zQ$?) z-th|E*!y#%vQxpaub(-uUpzR2cfN7JZQ+1s(F?riY68~ZW&QepLEO=ZYrj{!>6e$s zpU5coSl0Sx9ryeRGk0HN{`V^6ySt&|dM=;r*2esVgLkuhPUu}vo8^-d{;~bXrT5FN zZkQ-1i-xOQ%5l8+MuzR7z)IOqhq=Qa)El!Ye3`{`CHva1!ZSxjYp33^xiJ4(*s~Rm z`94J!A;-Y5q>X_A_vyu;9bEcoTVwSKD&N{>mOtJx z@&51dgg5+CHW_WN-eh?#e~z#GyPo@BwqAaB^Nm$qPE?alpJveM!+A%~|F2!mWzN_& zW%=Z@?Jv&mP!-Y;;VNAiz`%F&IRE;8HDA4Eviqy-ju*yclvYD=C)I79=`m=dBq|=)pYjr zOy2s_i##_kO5?qNQ`2YG_zlZaLZdfqxv^Kdz#AWZJFBhRCJ>APpxW{a=p3ahR0u*DV@n*`^2|LhKhB3 z=vix?8Ty%PUqbq)H(sL0-A=8Z|8vjE(4!}X+2$KJpRBI3Uwqu9XJ2{lgr7f1)YR$8hFR9v*an@>NxLU-n6eJ(OtLVXymD9ne&qE9VY5Na2GUv^IU8NkA7}x;YIU? z>0&qIyduQ+E=||j6z4j9^TghcFukKc_D+l1oBpGrWwSz15c6^U2HX1!-!*K{Z&)MV zby+W+OXAQ4o{GxM+VBn=LAT>UuJ60&pUN@ZIM1h__0R%=14SvW*Hlg}dG@pD*ePEo zrepnrw>7PQF;}yndVS-|Le`b@e3E0cCHJa$AAaz2)0%5<;+%dgt4eUvXKbbcY=$<1~Zw$=qIVuM7D!y?@dDTd3XeX5^s_ z{Td4OUqro3R9-hm-$=67;M{-b`U9p9uD6yvimf?2+r{=(883_dVZrs^lhs$v_EP3M zyg4&0;6WyP@3vJRO6Q60(RldxqH(u;eAo6h45dvj>D}9uHm|9TzVu*YNlT-(W8wA} zTbugMpSE1d%6;!{mv|1df)pcbPHyA<2JNhZ?>s+D^TVDxG4Lzm3?ddY-OKE#OSFCfA{rTpvn@{YN z6AN1nzNN5!vwEJlmc=xL$!=26lMDG*F1^TGuy9S3+y>M3oIs{}#YxuSJ+uf+3KRNe8fwhd<5wEyfYsmMqcUJlgUAH3vVZ20Vu%g!@v zPM`O=FB7v-Pa!h@lI8q2PJEKdN;?>1xElou?pIyTN#+(WP^f6_QrC9)D#}pe=cm=> zxBmo(bg;SD^STA~DY?znKI_$k_y5X^edIa$a^JiS%Kq!EmA0}q3g|4nSa6S7bRmby zBkwPYWumNUj8YsmOc&L<6wlo{DXRTLcJ+4G$#sbbW-7#mN2?t&X3XfzYP+fGSDvxx z@&}vc69T(GEIe4otj8cOYU5zGlk;;y=SC6JJ)5?bSbsI0Sm!(cfV_;%i}xl%38zzf zHNW!J{^I%Ze*FhE|L)gfZ>-P$xh^fiuAr3v%&(PQ{B_ag%=@d7ohVNTKSG^kgv`$9*cw7J)}xrf#vQOv~J7#rkCX$(p0j z&2KGW?QqyUea*EkPGOh+bQXPQl6Erno9Y_yXvgX16{R{Gm3t03Fikr?y=2oo(;!vh ze#2>plD{ovIaWOBTMShtx%{Htsp2l@!nW z>(R@lr~400i(*-*)uxj5O!Y+98aLLAq-hJh`U_V$zVeSyVOOiVboJA>6`FQ0CX_Qr zoLV6AVpiJInUgYgnloiPqaLwvX_wCn^T;XEILO|2^gBZ;&=y4%N6yM_9pfi`{z|_ zbjjP!bGdvkDO@7=+r3YFo+VybwC8iz8SX72oSKHg6Snqrb~Z>_7J1!ti#;g%qK^4T z-^5$09l6RTjdT8W9XM_K@Y9FskMxgf2PodǏWZ)eOtfp0x;6t1xz=UX-H0Q;K< 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.9#${E6!CWc@`dLo_z{2~0?pGwb~GHu`7OEGq4 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 OhD)GTZCCgi7#IM literal 0 HcmV?d00001 diff --git a/pythondeps.toml b/pythondeps.toml index 98e99e7900..9a096160e6 100644 --- a/pythondeps.toml +++ b/pythondeps.toml @@ -19,12 +19,12 @@ [meson] # The install key should match the version in python/wheels/ -meson = { accepted = ">=1.5.0", installed = "1.9.0", canary = "meson" } +meson = { accepted = ">=1.5.0", installed = "1.10.0", canary = "meson" } pycotap = { accepted = ">=1.1.0", installed = "1.3.1" } [meson-rust] # The install key should match the version in python/wheels/ -meson = { accepted = ">=1.9.0", installed = "1.9.0", canary = "meson" } +meson = { accepted = ">=1.10.0", installed = "1.10.0", canary = "meson" } [docs] # Please keep the installed versions in sync with docs/requirements.txt From 9be696201541673b911e1cfd4f58fe4cf731cf94 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Thu, 16 Oct 2025 14:17:13 +0200 Subject: [PATCH 106/152] rust: Do not link qemuutil into Rust rlibs Commit de037ab8d83d removed qemuutil dependency from chardev and util rust crates. However it stayed in the _util_rs static library. The dependency is also defined as `link_with`, which is fine for C targets, where the resulting archive gets linked as another parameter on the command line when it is a static library. However, when a C library is linked into a Rust rlib, rustc remembers the dependency into the metadata and adds the library to the linker command line. Unfortunately, static libraries are sensitive to their position on the command line and rustc does not always get it right. Fortunately, simply removing it from dependencies of any rust libraries and instead adding them into the dependencies of executables and doctests fixes the behaviour. Without this patch the error I get is: FAILED: [code=1] rust/tests/rust-integration ... = note: rust-lld: error: unable to find library -l:libqemuutil.a rust-lld: error: unable to find library -l:libvhost-user-glib.a rust-lld: error: unable to find library -l:libvhost-user.a rust-lld: error: unable to find library -l:libqemuutil.a rust-lld: error: unable to find library -l:libvhost-user-glib.a rust-lld: error: unable to find library -l:libvhost-user.a rust-lld: error: unable to find library -l:libqemuutil.a rust-lld: error: unable to find library -l:libvhost-user-glib.a rust-lld: error: unable to find library -l:libvhost-user.a rust-lld: error: unable to find library -l:libqemuutil.a rust-lld: error: unable to find library -l:libvhost-user-glib.a rust-lld: error: unable to find library -l:libvhost-user.a rust-lld: error: unable to find library -l:libqemuutil.a rust-lld: error: unable to find library -l:libvhost-user-glib.a rust-lld: error: unable to find library -l:libvhost-user.a rust-lld: error: unable to find library -l:libqemuutil.a rust-lld: error: unable to find library -l:libvhost-user-glib.a rust-lld: error: unable to find library -l:libvhost-user.a collect2: error: ld returned 1 exit status Meson could work around it itself by never adding these static libraries to the rlibs (after all, Meson tracks the transitive dependencies already and knows how to add them to dependents of those rlibs); at least for now, do it in QEMU: never link C libraries into Rust rlibs, and add them to the final build products only. Signed-off-by: Martin Kletzander Signed-off-by: Paolo Bonzini --- rust/chardev/meson.build | 2 +- rust/qom/meson.build | 2 +- rust/util/meson.build | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/chardev/meson.build b/rust/chardev/meson.build index 54bb296252..2e4f4670bd 100644 --- a/rust/chardev/meson.build +++ b/rust/chardev/meson.build @@ -38,4 +38,4 @@ _chardev_rs = static_library( dependencies: [glib_sys_rs, common_rs, qemu_macros], ) -chardev_rs = declare_dependency(link_with: [_chardev_rs], dependencies: [chardev]) +chardev_rs = declare_dependency(link_with: [_chardev_rs], dependencies: [chardev, qemuutil]) diff --git a/rust/qom/meson.build b/rust/qom/meson.build index 551c4f0bf5..dda26c3f98 100644 --- a/rust/qom/meson.build +++ b/rust/qom/meson.build @@ -30,7 +30,7 @@ _qom_rs = static_library( dependencies: [common_rs, glib_sys_rs, qemu_macros], ) -qom_rs = declare_dependency(link_with: [_qom_rs], dependencies: [qemu_macros, qom]) +qom_rs = declare_dependency(link_with: [_qom_rs], dependencies: [qemu_macros, qom, qemuutil]) # Doctests are essentially integration tests, so they need the same dependencies. # Note that running them requires the object files for C code, so place them diff --git a/rust/util/meson.build b/rust/util/meson.build index 95b44f7c67..98629394af 100644 --- a/rust/util/meson.build +++ b/rust/util/meson.build @@ -39,10 +39,10 @@ _util_rs = static_library( ], {'.': _util_bindings_inc_rs} ), - dependencies: [anyhow_rs, libc_rs, foreign_rs, glib_sys_rs, common_rs, qom, qemuutil], + dependencies: [anyhow_rs, libc_rs, foreign_rs, glib_sys_rs, common_rs], ) -util_rs = declare_dependency(link_with: [_util_rs]) +util_rs = declare_dependency(link_with: [_util_rs], dependencies: [qemuutil, qom]) rust.test('rust-util-tests', _util_rs, dependencies: [qemuutil, qom], From 4d06424c3dea82da46491ed568f1f9e6e8f426a7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 20 Nov 2025 17:11:28 +0100 Subject: [PATCH 107/152] rust: only link the Rust part of the code into devices Do not include libqemuutil in the device crates for the same reason as in the previous commit. Static libraries like qemuutil are sensitive to their position on the command line and rustc does not always get it right. If rustc places the library too early on the command line, the stubs are included in the final link product, which results in duplicate symbols. Signed-off-by: Paolo Bonzini --- rust/hw/char/pl011/meson.build | 18 ++++++++++-------- rust/hw/timer/hpet/meson.build | 18 +++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/rust/hw/char/pl011/meson.build b/rust/hw/char/pl011/meson.build index 33b91f2191..9c0e8290e9 100644 --- a/rust/hw/char/pl011/meson.build +++ b/rust/hw/char/pl011/meson.build @@ -28,20 +28,22 @@ _libpl011_rs = static_library( ), override_options: ['rust_std=2021', 'build.rust_std=2021'], rust_abi: 'rust', + link_with: [ + _util_rs, + _migration_rs, + _bql_rs, + _qom_rs, + _chardev_rs, + _system_rs, + _hwcore_rs, + _trace_rs + ], dependencies: [ bilge_rs, bilge_impl_rs, bits_rs, common_rs, glib_sys_rs, - util_rs, - migration_rs, - bql_rs, - qom_rs, - chardev_rs, - system_rs, - hwcore_rs, - trace_rs ], ) diff --git a/rust/hw/timer/hpet/meson.build b/rust/hw/timer/hpet/meson.build index 9a3dd62caa..3bb7ce2a6c 100644 --- a/rust/hw/timer/hpet/meson.build +++ b/rust/hw/timer/hpet/meson.build @@ -3,16 +3,16 @@ _libhpet_rs = static_library( files('src/lib.rs'), override_options: ['rust_std=2021', 'build.rust_std=2021'], rust_abi: 'rust', - dependencies: [ - common_rs, - util_rs, - migration_rs, - bql_rs, - qom_rs, - system_rs, - hwcore_rs, - trace_rs, + link_with: [ + _util_rs, + _migration_rs, + _bql_rs, + _qom_rs, + _system_rs, + _hwcore_rs, + _trace_rs, ], + dependencies: [common_rs], ) rust_devices_ss.add(when: 'CONFIG_X_HPET_RUST', if_true: [declare_dependency( From d8779cb5d6bd8457457a3b6e3d07c28f02dd16a8 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 19 Nov 2025 23:15:46 +0100 Subject: [PATCH 108/152] lcitool: enable Rust for Windows cross targets The issue that is mentioned in the comment has been fixed. Signed-off-by: Paolo Bonzini --- tests/docker/dockerfiles/fedora-win64-cross.docker | 2 ++ tests/lcitool/refresh | 5 +---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/docker/dockerfiles/fedora-win64-cross.docker b/tests/docker/dockerfiles/fedora-win64-cross.docker index 4f743c0043..c5e1fcebf5 100644 --- a/tests/docker/dockerfiles/fedora-win64-cross.docker +++ b/tests/docker/dockerfiles/fedora-win64-cross.docker @@ -120,3 +120,5 @@ ARG USER ARG UID RUN if [ "${USER}" ]; then \ id ${USER} 2>/dev/null || useradd -u ${UID} -U ${USER}; fi + +ENV ENABLE_RUST 1 diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh index 9df607a55f..01a7192954 100755 --- a/tests/lcitool/refresh +++ b/tests/lcitool/refresh @@ -291,10 +291,7 @@ try: project='qemu,qemu-win-installer', cross="mingw64", trailer=cross_build("x86_64-w64-mingw32-", - "x86_64-softmmu"), - # linking with rust is buggy: - # https://github.com/mesonbuild/meson/pull/14991 - enable_rust=False) + "x86_64-softmmu")) # We also generate some docker files with minimal dependencies and # as many cross-compilers as Debian will package for building TCG From dce54713667611bd2c5bceceec97b6f7920c9fc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Wed, 24 Sep 2025 16:04:21 +0400 Subject: [PATCH 109/152] cirrus/macos: enable Rust MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marc-André Lureau Link: https://lore.kernel.org/r/20250924120426.2158655-25-marcandre.lureau@redhat.com Signed-off-by: Paolo Bonzini --- .gitlab-ci.d/cirrus.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.d/cirrus.yml b/.gitlab-ci.d/cirrus.yml index 0d66a14186..177bd684ef 100644 --- a/.gitlab-ci.d/cirrus.yml +++ b/.gitlab-ci.d/cirrus.yml @@ -56,5 +56,5 @@ aarch64-macos-build: INSTALL_COMMAND: brew install PATH_EXTRA: /opt/homebrew/ccache/libexec:/opt/homebrew/gettext/bin PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig - CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblazeel-softmmu,mips64-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,sh4-softmmu,xtensaeb-softmmu + CONFIGURE_ARGS: --target-list-exclude=arm-softmmu,i386-softmmu,microblazeel-softmmu,mips64-softmmu,mipsel-softmmu,mips-softmmu,ppc-softmmu,sh4-softmmu,xtensaeb-softmmu --enable-rust TEST_TARGETS: check-unit check-block check-qapi-schema check-softfloat check-qtest-x86_64 From e12d608b5990b1986190b85351de62551740e846 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 13 Nov 2025 10:31:52 +0100 Subject: [PATCH 110/152] rust: Meson now adds -Cdefault-linker-libraries Signed-off-by: Paolo Bonzini --- meson.build | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/meson.build b/meson.build index 02738c9765..e2de3832ac 100644 --- a/meson.build +++ b/meson.build @@ -136,13 +136,7 @@ if have_rust rustc_lint_args += ['-Dwarnings', '-Funknown_lints'] endif - # Apart from procedural macros, our Rust executables will often link - # with C code, so include all the libraries that C code needs. This - # is safe; https://github.com/rust-lang/rust/pull/54675 says that - # passing -nodefaultlibs to the linker "was more ideological to - # start with than anything". - add_project_arguments(rustc_lint_args + - ['--cfg', 'MESON', '-C', 'default-linker-libraries'], + add_project_arguments(rustc_lint_args + ['--cfg', 'MESON'], native: false, language: 'rust') add_project_arguments(rustc_lint_args + ['--cfg', 'MESON'], native: true, language: 'rust') From e8bb12c3507d2f4df2174957c9d288892ebd80c6 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 21 Jul 2025 12:50:27 +0200 Subject: [PATCH 111/152] meson: let Meson handle mixed-language linking of Rust and C objects With the bump to Meson 1.10.0, C objects can be passed to rust targets. This way, the Rust libstd will be added by rustc itself in its final linker invocation. Use that to eliminate the staticlib and allow dynamic linking with libstd (also introduced by Meson 1.9.0, but not for staticlib crates due to lack of support in rustc). The main() function is still provided by C, which is possible by declaring the main source file of the Rust executable (which is still created by scripts/rust/rust_root_crate.sh) as #![no_main]. Signed-off-by: Paolo Bonzini --- meson.build | 19 ++++++++----------- scripts/rust/rust_root_crate.sh | 1 + 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/meson.build b/meson.build index e2de3832ac..3790cf15f5 100644 --- a/meson.build +++ b/meson.build @@ -4352,25 +4352,22 @@ foreach target : target_dirs arch_srcs += target_specific.sources() arch_deps += target_specific.dependencies() + main_rs = [] + crates = [] if have_rust and target_type == 'system' target_rust = rust_devices_ss.apply(config_target, strict: false) - crates = [] + arch_deps += target_rust.dependencies() foreach dep : target_rust.dependencies() crates += dep.get_variable('crate') endforeach if crates.length() > 0 - rlib_rs = custom_target('rust_' + target.underscorify() + '.rs', + main_rs = custom_target('rust_' + target.underscorify() + '.rs', output: 'rust_' + target.underscorify() + '.rs', command: [rust_root_crate, crates], capture: true, build_by_default: true, build_always_stale: true) - rlib = static_library('rust_' + target.underscorify(), - structured_sources([], {'.': rlib_rs}), - dependencies: target_rust.dependencies(), - override_options: ['rust_std=2021', 'build.rust_std=2021'], - rust_abi: 'c') - arch_deps += declare_dependency(link_whole: [rlib]) + main_rs = structured_sources(main_rs) endif endif @@ -4394,14 +4391,14 @@ foreach target : target_dirs execs = [{ 'name': 'qemu-system-' + target_name, 'win_subsystem': 'console', - 'sources': files('system/main.c'), + 'sources': [main_rs, files('system/main.c')], 'dependencies': [sdl] }] if host_os == 'windows' and (sdl.found() or gtk.found()) execs += [{ 'name': 'qemu-system-' + target_name + 'w', 'win_subsystem': 'windows', - 'sources': files('system/main.c'), + 'sources': [main_rs, files('system/main.c')], 'dependencies': [sdl] }] endif @@ -4410,7 +4407,7 @@ foreach target : target_dirs execs += [{ 'name': 'qemu-fuzz-' + target_name, 'win_subsystem': 'console', - 'sources': specific_fuzz.sources(), + 'sources': [main_rs, specific_fuzz.sources()], 'dependencies': specific_fuzz.dependencies(), }] endif diff --git a/scripts/rust/rust_root_crate.sh b/scripts/rust/rust_root_crate.sh index f05b8d0210..13ef7c1be5 100755 --- a/scripts/rust/rust_root_crate.sh +++ b/scripts/rust/rust_root_crate.sh @@ -6,6 +6,7 @@ cat < Date: Tue, 18 Nov 2025 16:08:36 +0800 Subject: [PATCH 112/152] i386/cpu: Drop incorrect comment for CPUID 0x1D The information in CPUID 0x1D.0x1 is for tile palette 1, and is not SPR-specific. This is to say, these "hardcoded" values won't change in future. If the palette needs to be extended, a new tile palette (maybe in a new subleaf) will be introduced instead of changing current information of tile palette 1. Furthermore, the previous attempt [*] to make the 0x1D.0x1 fields user-configurable is incorrect and unnecessary. Therefore, drop the incorrect and misleading comment. [*]: https://lore.kernel.org/qemu-devel/20230106083826.5384-2-lei4.wang@intel.com/ Signed-off-by: Zhao Liu Reviewed-by: Xiaoyao Li Link: https://lore.kernel.org/r/20251118080837.837505-2-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 0f618ffb03..4421c45849 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -8381,7 +8381,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, *edx = 0; /* EDX is reserved. */ break; case 0x1D: { - /* AMX TILE, for now hardcoded for Sapphire Rapids*/ + /* AMX TILE */ *eax = 0; *ebx = 0; *ecx = 0; @@ -8394,6 +8394,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, /* Highest numbered palette subleaf */ *eax = INTEL_AMX_TILE_MAX_SUBLEAF; } else if (count == 1) { + /* Tile palette 1 */ *eax = INTEL_AMX_TOTAL_TILE_BYTES | (INTEL_AMX_BYTES_PER_TILE << 16); *ebx = INTEL_AMX_BYTES_PER_ROW | (INTEL_AMX_TILE_MAX_NAMES << 16); From 5839e9a1ccc956e75b19ee67821f8816907bbbd9 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Tue, 18 Nov 2025 16:08:37 +0800 Subject: [PATCH 113/152] i386/cpu: Drop incorrect comment for CPUID 0x1E The information (tmul_maxk and tmul_maxn) in CPUID 0x1E.0x0.EBX is defined for architecture, not for SPR. This is to say, these "hardcoded" values won't change in future. If the TMUL component needs to be extended for new palettes, there'll likely be the new TMUL instructions, or new types of AMX instructions that are _parallel_ to TMUL that operate in particular palettes, instead of changing current tmul_maxk and tmul_maxn fields in CPUID 0x1E.0x0.EBX. Furthermore, the previous attempt [*] to make the 0x1E.0x0.EBX fields user-configurable is incorrect and unnecessary. Therefore, drop the incorrect and misleading comment. [*]: https://lore.kernel.org/qemu-devel/20230106083826.5384-2-lei4.wang@intel.com/ Signed-off-by: Zhao Liu Reviewed-by: Xiaoyao Li Link: https://lore.kernel.org/r/20251118080837.837505-3-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 4421c45849..67769200d0 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -8403,7 +8403,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, break; } case 0x1E: { - /* AMX TMUL, for now hardcoded for Sapphire Rapids */ + /* AMX TMUL */ *eax = 0; *ebx = 0; *ecx = 0; From 60efba3c1bff0d78632d45c2dc927c5bc7a17ba8 Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Wed, 12 Mar 2025 00:06:03 +0000 Subject: [PATCH 114/152] target/i386: Fix #GP error code for INT instructions While the (intno << shift) expression is correct for indexing the IDT based on whether Long Mode is active, the error code itself was unchanged with AMD64, and is still the index with 3 bits of metadata in the bottom. Found when running a Xen unit test, all under QEMU. The unit test objected to being told there was an error with IDT index 256 when INT $0x80 (128) was the problem instruction: ... Error: Unexpected fault 0x800d0802, #GP[IDT[256]] ... Fixes: d2fd1af76777 ("x86_64 linux user emulation") Signed-off-by: Andrew Cooper Link: https://lore.kernel.org/r/20250312000603.3666083-1-andrew.cooper3@citrix.com Cc: qemu-stable@nongnu.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3160 Signed-off-by: Paolo Bonzini --- target/i386/tcg/user/seg_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/i386/tcg/user/seg_helper.c b/target/i386/tcg/user/seg_helper.c index 263f59937f..28bbef1bba 100644 --- a/target/i386/tcg/user/seg_helper.c +++ b/target/i386/tcg/user/seg_helper.c @@ -63,7 +63,7 @@ static void do_interrupt_user(CPUX86State *env, int intno, int is_int, cpl = env->hflags & HF_CPL_MASK; /* check privilege if software int */ if (dpl < cpl) { - raise_exception_err(env, EXCP0D_GPF, (intno << shift) + 2); + raise_exception_err(env, EXCP0D_GPF, intno * 8 + 2); } } From 0db1b556e4bcd7a51f222cda9e14850f88fe3f88 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 24 Nov 2025 14:12:49 +0100 Subject: [PATCH 115/152] target/i386/tcg: ignore V3 in 32-bit mode From the manual: "In 64-bit mode all 4 bits may be used. [...] In 32-bit and 16-bit modes bit 6 must be 1 (if bit 6 is not 1, the 2-byte VEX version will generate LDS instruction and the 3-byte VEX version will ignore this bit)." Cc: qemu-stable@nongnu.org Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/decode-new.c.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc index 0f8c5d1693..dfaffec599 100644 --- a/target/i386/tcg/decode-new.c.inc +++ b/target/i386/tcg/decode-new.c.inc @@ -2665,7 +2665,7 @@ static void disas_insn(DisasContext *s, CPUState *cpu) goto unknown_op; } } - s->vex_v = (~vex3 >> 3) & 0xf; + s->vex_v = (~vex3 >> 3) & (CODE64(s) ? 15 : 7); s->vex_l = (vex3 >> 2) & 1; s->prefix |= pp_prefix[vex3 & 3] | PREFIX_VEX; } From e661e2d7a37bf8db3b1aea2a25a945d31401eb09 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Sat, 22 Nov 2025 22:59:01 +0100 Subject: [PATCH 116/152] target/i386/tcg: update cc_op after PUSHF PUSHF already needs to compute the full eflags; set the cc_op to CC_OP_EFLAGS to avoid duplicate computation in subsequent code. Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/emit.c.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 1a7fab9333..22e53f5b00 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -3250,6 +3250,8 @@ static void gen_PUSHF(DisasContext *s, X86DecodedInsn *decode) gen_update_cc_op(s); gen_helper_read_eflags(s->T0, tcg_env); gen_push_v(s, s->T0); + decode->cc_src = s->T0; + decode->cc_op = CC_OP_EFLAGS; } static MemOp gen_shift_count(DisasContext *s, X86DecodedInsn *decode, From a71706fc116d263c6661b5c7176150dfe0298d29 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 10 Dec 2025 09:42:01 +0100 Subject: [PATCH 117/152] target/i386/tcg: mark more instructions that are invalid in 64-bit mode Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/decode-new.c.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc index dfaffec599..8a1fb2855d 100644 --- a/target/i386/tcg/decode-new.c.inc +++ b/target/i386/tcg/decode-new.c.inc @@ -1698,9 +1698,9 @@ static const X86OpEntry opcodes_root[256] = { [0xD1] = X86_OP_GROUP1(group2, E,v), [0xD2] = X86_OP_GROUP2(group2, E,b, 1,b), /* CL */ [0xD3] = X86_OP_GROUP2(group2, E,v, 1,b), /* CL */ - [0xD4] = X86_OP_ENTRY2(AAM, 0,w, I,b), - [0xD5] = X86_OP_ENTRY2(AAD, 0,w, I,b), - [0xD6] = X86_OP_ENTRYw(SALC, 0,b), + [0xD4] = X86_OP_ENTRY2(AAM, 0,w, I,b, chk(i64)), + [0xD5] = X86_OP_ENTRY2(AAD, 0,w, I,b, chk(i64)), + [0xD6] = X86_OP_ENTRYw(SALC, 0,b, chk(i64)), [0xD7] = X86_OP_ENTRY1(XLAT, 0,b, zextT0), /* AL read/written */ [0xE0] = X86_OP_ENTRYr(LOOPNE, J,b), /* implicit: CX with aflag size */ @@ -1834,7 +1834,7 @@ static const X86OpEntry opcodes_root[256] = { [0xCB] = X86_OP_ENTRY0(RETF), [0xCC] = X86_OP_ENTRY0(INT3), [0xCD] = X86_OP_ENTRYr(INT, I,b, chk(vm86_iopl)), - [0xCE] = X86_OP_ENTRY0(INTO), + [0xCE] = X86_OP_ENTRY0(INTO, chk(i64)), [0xCF] = X86_OP_ENTRY0(IRET, chk(vm86_iopl) svm(IRET)), /* From da7649c6aeef22a8c005ef678cb9cf3a7c2d4253 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Sat, 22 Nov 2025 23:02:10 +0100 Subject: [PATCH 118/152] target/i386/tcg: do not compute all flags for SAHF Only OF is needed, the others are overwritten. Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/emit.c.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 22e53f5b00..131aefce53 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -3778,7 +3778,7 @@ static void gen_SAHF(DisasContext *s, X86DecodedInsn *decode) return gen_illegal_opcode(s); } tcg_gen_shri_tl(s->T0, cpu_regs[R_EAX], 8); - gen_compute_eflags(s); + gen_neg_setcc(s, JCC_O << 1, cpu_cc_src); tcg_gen_andi_tl(cpu_cc_src, cpu_cc_src, CC_O); tcg_gen_andi_tl(s->T0, s->T0, CC_S | CC_Z | CC_A | CC_P | CC_C); tcg_gen_or_tl(cpu_cc_src, cpu_cc_src, s->T0); From 73c2d6207971c65a210922d49ddb4ca0354022fb Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 24 Nov 2025 13:38:53 +0100 Subject: [PATCH 119/152] target/i386/tcg: remove do_decode_0F It is not needed anymore since all prefixes are handled by the new decoder. Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/decode-new.c.inc | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc index 8a1fb2855d..d2c024ea34 100644 --- a/target/i386/tcg/decode-new.c.inc +++ b/target/i386/tcg/decode-new.c.inc @@ -1430,15 +1430,10 @@ static const X86OpEntry opcodes_0F[256] = { [0xff] = X86_OP_ENTRYr(UD, nop,v), /* UD0 */ }; -static void do_decode_0F(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b) -{ - *entry = opcodes_0F[*b]; -} - static void decode_0F(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b) { *b = x86_ldub_code(env, s); - do_decode_0F(s, env, entry, b); + *entry = opcodes_0F[*b]; } static void decode_63(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b) From 2b230c49898af33d51bc845a3a2d655b48821b8e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Sun, 23 Nov 2025 18:00:55 +0100 Subject: [PATCH 120/152] target/i386/tcg: move and expand misplaced comment Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/decode-new.c.inc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc index d2c024ea34..e7ffd3a984 100644 --- a/target/i386/tcg/decode-new.c.inc +++ b/target/i386/tcg/decode-new.c.inc @@ -1878,16 +1878,11 @@ static const X86OpEntry opcodes_root[256] = { #undef vex12 #undef vex13 -/* - * Decode the fixed part of the opcode and place the last - * in b. - */ static void decode_root(DisasContext *s, CPUX86State *env, X86OpEntry *entry, uint8_t *b) { *entry = opcodes_root[*b]; } - static int decode_modrm(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode, X86DecodedOp *op) { @@ -2222,6 +2217,10 @@ static bool decode_insn(DisasContext *s, CPUX86State *env, X86DecodeFunc decode_ { X86OpEntry *e = &decode->e; + /* + * Each step decodes part of the opcode and leaves the last not-fully-decoded + * byte in decode->b. If the modrm byte is read, it is placed in s->modrm. + */ decode_func(s, env, e, &decode->b); while (e->is_decode) { e->is_decode = false; From 55a15eb3504ddce30a77a6c09151da6536ef3fe7 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Thu, 8 May 2025 10:54:32 +0200 Subject: [PATCH 121/152] target/i386/tcg: simplify effective address calculation Split gen_lea_v_seg_dest into three simple phases (extend from 16 bits, add, final extend), with optimization for known-zero bases to avoid back-to-back extensions. Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/translate.c | 64 ++++++++++++------------------------- 1 file changed, 20 insertions(+), 44 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 0cb87d0201..20cc49a974 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -627,54 +627,30 @@ static TCGv eip_cur_tl(DisasContext *s) static void gen_lea_v_seg_dest(DisasContext *s, MemOp aflag, TCGv dest, TCGv a0, int def_seg, int ovr_seg) { - switch (aflag) { -#ifdef TARGET_X86_64 - case MO_64: - if (ovr_seg < 0) { - tcg_gen_mov_tl(dest, a0); - return; + int easize; + bool has_base; + + if (ovr_seg < 0) { + ovr_seg = def_seg; + } + + has_base = ovr_seg >= R_FS || (ovr_seg >= 0 && ADDSEG(s)); + easize = CODE64(s) ? MO_64 : MO_32; + + if (has_base) { + if (aflag < easize) { + /* Truncate before summing base. */ + tcg_gen_ext_tl(dest, a0, aflag); + a0 = dest; } - break; -#endif - case MO_32: - /* 32 bit address */ - if (ovr_seg < 0 && ADDSEG(s)) { - ovr_seg = def_seg; - } - if (ovr_seg < 0) { - tcg_gen_ext32u_tl(dest, a0); - return; - } - break; - case MO_16: - /* 16 bit address */ - tcg_gen_ext16u_tl(dest, a0); + tcg_gen_add_tl(dest, a0, cpu_seg_base[ovr_seg]); a0 = dest; - if (ovr_seg < 0) { - if (ADDSEG(s)) { - ovr_seg = def_seg; - } else { - return; - } - } - break; - default: - g_assert_not_reached(); + } else { + /* Possibly one extension, but that's it. */ + easize = aflag; } - if (ovr_seg >= 0) { - TCGv seg = cpu_seg_base[ovr_seg]; - - if (aflag == MO_64) { - tcg_gen_add_tl(dest, a0, seg); - } else if (CODE64(s)) { - tcg_gen_ext32u_tl(dest, a0); - tcg_gen_add_tl(dest, dest, seg); - } else { - tcg_gen_add_tl(dest, a0, seg); - tcg_gen_ext32u_tl(dest, dest); - } - } + tcg_gen_ext_tl(dest, a0, easize); } static void gen_lea_v_seg(DisasContext *s, TCGv a0, From e8a1d23f24bbb518285db9f5fd5e6c3ae55f5010 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 10 May 2024 10:33:23 +0200 Subject: [PATCH 122/152] target/i386/tcg: unnest switch statements in disas_insn_x87 Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/translate.c | 290 +++++++++++++++++------------------- 1 file changed, 134 insertions(+), 156 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 20cc49a974..68f41b3742 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -2457,36 +2457,32 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) switch (op) { case 0x00 ... 0x07: /* fxxxs */ - case 0x10 ... 0x17: /* fixxxl */ - case 0x20 ... 0x27: /* fxxxl */ - case 0x30 ... 0x37: /* fixxx */ - { - int op1; - op1 = op & 7; + tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUL); + gen_helper_flds_FT0(tcg_env, s->tmp2_i32); + goto fp_arith_ST0_FT0; - switch (op >> 4) { - case 0: - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUL); - gen_helper_flds_FT0(tcg_env, s->tmp2_i32); - break; - case 1: - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUL); - gen_helper_fildl_FT0(tcg_env, s->tmp2_i32); - break; - case 2: - tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, - s->mem_index, MO_LEUQ); - gen_helper_fldl_FT0(tcg_env, s->tmp1_i64); - break; - case 3: - default: - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LESW); - gen_helper_fildl_FT0(tcg_env, s->tmp2_i32); - break; - } + case 0x10 ... 0x17: /* fixxxl */ + tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUL); + gen_helper_fildl_FT0(tcg_env, s->tmp2_i32); + goto fp_arith_ST0_FT0; + + case 0x20 ... 0x27: /* fxxxl */ + tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, + s->mem_index, MO_LEUQ); + gen_helper_fldl_FT0(tcg_env, s->tmp1_i64); + goto fp_arith_ST0_FT0; + + case 0x30 ... 0x37: /* fixxx */ + tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LESW); + gen_helper_fildl_FT0(tcg_env, s->tmp2_i32); + goto fp_arith_ST0_FT0; + +fp_arith_ST0_FT0: + { + int op1 = op & 7; gen_helper_fp_arith_ST0_FT0(op1); if (op1 == 3) { @@ -2495,88 +2491,78 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) } } break; + case 0x08: /* flds */ - case 0x0a: /* fsts */ - case 0x0b: /* fstps */ - case 0x18 ... 0x1b: /* fildl, fisttpl, fistl, fistpl */ - case 0x28 ... 0x2b: /* fldl, fisttpll, fstl, fstpl */ - case 0x38 ... 0x3b: /* filds, fisttps, fists, fistps */ - switch (op & 7) { - case 0: - switch (op >> 4) { - case 0: - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUL); - gen_helper_flds_ST0(tcg_env, s->tmp2_i32); - break; - case 1: - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUL); - gen_helper_fildl_ST0(tcg_env, s->tmp2_i32); - break; - case 2: - tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, - s->mem_index, MO_LEUQ); - gen_helper_fldl_ST0(tcg_env, s->tmp1_i64); - break; - case 3: - default: - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LESW); - gen_helper_fildl_ST0(tcg_env, s->tmp2_i32); - break; - } - break; - case 1: - /* XXX: the corresponding CPUID bit must be tested ! */ - switch (op >> 4) { - case 1: - gen_helper_fisttl_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUL); - break; - case 2: - gen_helper_fisttll_ST0(s->tmp1_i64, tcg_env); - tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, - s->mem_index, MO_LEUQ); - break; - case 3: - default: - gen_helper_fistt_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUW); - break; - } + tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUL); + gen_helper_flds_ST0(tcg_env, s->tmp2_i32); + break; + case 0x18: /* fildl */ + tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUL); + gen_helper_fildl_ST0(tcg_env, s->tmp2_i32); + break; + case 0x28: /* fldl */ + tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, + s->mem_index, MO_LEUQ); + gen_helper_fldl_ST0(tcg_env, s->tmp1_i64); + break; + case 0x38: /* filds */ + tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LESW); + gen_helper_fildl_ST0(tcg_env, s->tmp2_i32); + break; + + case 0x19: /* fisttpl */ + gen_helper_fisttl_ST0(s->tmp2_i32, tcg_env); + tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUL); + gen_helper_fpop(tcg_env); + break; + case 0x29: /* fisttpll */ + gen_helper_fisttll_ST0(s->tmp1_i64, tcg_env); + tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, + s->mem_index, MO_LEUQ); + gen_helper_fpop(tcg_env); + break; + case 0x39: /* fisttps */ + gen_helper_fistt_ST0(s->tmp2_i32, tcg_env); + tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUW); + gen_helper_fpop(tcg_env); + break; + + case 0x0a: case 0x0b: /* fsts, fstps */ + gen_helper_fsts_ST0(s->tmp2_i32, tcg_env); + tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUL); + if ((op & 7) == 3) { + gen_helper_fpop(tcg_env); + } + break; + case 0x1a: case 0x1b: /* fistl, fistpl */ + gen_helper_fistl_ST0(s->tmp2_i32, tcg_env); + tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUL); + if ((op & 7) == 3) { + gen_helper_fpop(tcg_env); + } + break; + case 0x2a: case 0x2b: /* fstl, fstpl */ + gen_helper_fstl_ST0(s->tmp1_i64, tcg_env); + tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, + s->mem_index, MO_LEUQ); + if ((op & 7) == 3) { + gen_helper_fpop(tcg_env); + } + break; + + case 0x3a: case 0x3b: /* fists, fistps */ + gen_helper_fist_ST0(s->tmp2_i32, tcg_env); + tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + s->mem_index, MO_LEUW); + if ((op & 7) == 3) { gen_helper_fpop(tcg_env); - break; - default: - switch (op >> 4) { - case 0: - gen_helper_fsts_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUL); - break; - case 1: - gen_helper_fistl_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUL); - break; - case 2: - gen_helper_fstl_ST0(s->tmp1_i64, tcg_env); - tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, - s->mem_index, MO_LEUQ); - break; - case 3: - default: - gen_helper_fist_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, - s->mem_index, MO_LEUW); - break; - } - if ((op & 7) == 3) { - gen_helper_fpop(tcg_env); - } - break; } break; case 0x0c: /* fldenv mem */ @@ -2707,39 +2693,37 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) } break; case 0x0d: /* grp d9/5 */ - { - switch (rm) { - case 0: - gen_helper_fpush(tcg_env); - gen_helper_fld1_ST0(tcg_env); - break; - case 1: - gen_helper_fpush(tcg_env); - gen_helper_fldl2t_ST0(tcg_env); - break; - case 2: - gen_helper_fpush(tcg_env); - gen_helper_fldl2e_ST0(tcg_env); - break; - case 3: - gen_helper_fpush(tcg_env); - gen_helper_fldpi_ST0(tcg_env); - break; - case 4: - gen_helper_fpush(tcg_env); - gen_helper_fldlg2_ST0(tcg_env); - break; - case 5: - gen_helper_fpush(tcg_env); - gen_helper_fldln2_ST0(tcg_env); - break; - case 6: - gen_helper_fpush(tcg_env); - gen_helper_fldz_ST0(tcg_env); - break; - default: - goto illegal_op; - } + switch (rm) { + case 0: + gen_helper_fpush(tcg_env); + gen_helper_fld1_ST0(tcg_env); + break; + case 1: + gen_helper_fpush(tcg_env); + gen_helper_fldl2t_ST0(tcg_env); + break; + case 2: + gen_helper_fpush(tcg_env); + gen_helper_fldl2e_ST0(tcg_env); + break; + case 3: + gen_helper_fpush(tcg_env); + gen_helper_fldpi_ST0(tcg_env); + break; + case 4: + gen_helper_fpush(tcg_env); + gen_helper_fldlg2_ST0(tcg_env); + break; + case 5: + gen_helper_fpush(tcg_env); + gen_helper_fldln2_ST0(tcg_env); + break; + case 6: + gen_helper_fpush(tcg_env); + gen_helper_fldz_ST0(tcg_env); + break; + default: + goto illegal_op; } break; case 0x0e: /* grp d9/6 */ @@ -2801,22 +2785,16 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) } break; case 0x00: case 0x01: case 0x04 ... 0x07: /* fxxx st, sti */ + gen_helper_fmov_FT0_STN(tcg_env, + tcg_constant_i32(opreg)); + gen_helper_fp_arith_ST0_FT0(op & 7); + break; + case 0x20: case 0x21: case 0x24 ... 0x27: /* fxxx sti, st */ case 0x30: case 0x31: case 0x34 ... 0x37: /* fxxxp sti, st */ - { - int op1; - - op1 = op & 7; - if (op >= 0x20) { - gen_helper_fp_arith_STN_ST0(op1, opreg); - if (op >= 0x30) { - gen_helper_fpop(tcg_env); - } - } else { - gen_helper_fmov_FT0_STN(tcg_env, - tcg_constant_i32(opreg)); - gen_helper_fp_arith_ST0_FT0(op1); - } + gen_helper_fp_arith_STN_ST0(op & 7, opreg); + if (op >= 0x30) { + gen_helper_fpop(tcg_env); } break; case 0x02: /* fcom */ From 7a1ec17e3fa652f3d24e4bdac48bc53dde4c967b Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 24 Apr 2024 12:20:17 +0200 Subject: [PATCH 123/152] target/i386/tcg: move fcom/fcomp differentiation to gen_helper_fp_arith_ST0_FT0 There is only one call site for gen_helper_fp_arith_ST0_FT0(), therefore there is no need to check the op1 == 3 in the caller. Once this is done, eliminate the goto to that call site. Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/translate.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 68f41b3742..4b77cff8ee 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -1485,6 +1485,7 @@ static void gen_helper_fp_arith_ST0_FT0(int op) break; case 3: gen_helper_fcom_ST0_FT0(tcg_env); + gen_helper_fpop(tcg_env); break; case 4: gen_helper_fsub_ST0_FT0(tcg_env); @@ -2460,36 +2461,28 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, s->mem_index, MO_LEUL); gen_helper_flds_FT0(tcg_env, s->tmp2_i32); - goto fp_arith_ST0_FT0; + gen_helper_fp_arith_ST0_FT0(op & 7); + break; case 0x10 ... 0x17: /* fixxxl */ tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, s->mem_index, MO_LEUL); gen_helper_fildl_FT0(tcg_env, s->tmp2_i32); - goto fp_arith_ST0_FT0; + gen_helper_fp_arith_ST0_FT0(op & 7); + break; case 0x20 ... 0x27: /* fxxxl */ tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ); gen_helper_fldl_FT0(tcg_env, s->tmp1_i64); - goto fp_arith_ST0_FT0; + gen_helper_fp_arith_ST0_FT0(op & 7); + break; case 0x30 ... 0x37: /* fixxx */ tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, s->mem_index, MO_LESW); gen_helper_fildl_FT0(tcg_env, s->tmp2_i32); - goto fp_arith_ST0_FT0; - -fp_arith_ST0_FT0: - { - int op1 = op & 7; - - gen_helper_fp_arith_ST0_FT0(op1); - if (op1 == 3) { - /* fcomp needs pop */ - gen_helper_fpop(tcg_env); - } - } + gen_helper_fp_arith_ST0_FT0(op & 7); break; case 0x08: /* flds */ From 2326789c91fb77e40c0bf5468cc339d722846b3f Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 24 Apr 2024 12:20:17 +0200 Subject: [PATCH 124/152] target/i386/tcg: reuse gen_helper_fp_arith_ST0_FT0 for fcom STn and fcomp STn Treat specially the undocumented ops, instead of treating specially the two d8/0 opcodes that have undocumented variants: just call gen_helper_fp_arith_ST0_FT0 for all opcodes in the d8/0 encoding. Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/translate.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 4b77cff8ee..32a371e2d9 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -2777,7 +2777,7 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) break; } break; - case 0x00: case 0x01: case 0x04 ... 0x07: /* fxxx st, sti */ + case 0x00 ... 0x07: /* fxxx st, sti */ gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); gen_helper_fp_arith_ST0_FT0(op & 7); @@ -2790,12 +2790,10 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) gen_helper_fpop(tcg_env); } break; - case 0x02: /* fcom */ case 0x22: /* fcom2, undocumented op */ gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); gen_helper_fcom_ST0_FT0(tcg_env); break; - case 0x03: /* fcomp */ case 0x23: /* fcomp3, undocumented op */ case 0x32: /* fcomp5, undocumented op */ gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); From dcc2b436c1f94a28760e20fad4eb050e79d187cc Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 24 Apr 2024 12:20:17 +0200 Subject: [PATCH 125/152] target/i386/tcg: reuse gen_helper_fp_arith_ST0_FT0 for undocumented fcom/fcomp variants For 0x32 hack the op to be fcomp; for the others there isn't even anything special to do. Signed-off-by: Paolo Bonzini --- target/i386/tcg/translate.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 32a371e2d9..cf5e2c158c 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -2777,10 +2777,18 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) break; } break; + /* map to fcomp; op & 7 == 2 would not pop */ + op = 0x03; + /* fallthrough */ case 0x00 ... 0x07: /* fxxx st, sti */ + case 0x22 ... 0x23: /* fcom2 and fcomp3, undocumented ops */ + case 0x32: /* fcomp5, undocumented op */ gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); gen_helper_fp_arith_ST0_FT0(op & 7); + if (op >= 0x30) { + gen_helper_fpop(tcg_env); + } break; case 0x20: case 0x21: case 0x24 ... 0x27: /* fxxx sti, st */ @@ -2790,16 +2798,6 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) gen_helper_fpop(tcg_env); } break; - case 0x22: /* fcom2, undocumented op */ - gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fcom_ST0_FT0(tcg_env); - break; - case 0x23: /* fcomp3, undocumented op */ - case 0x32: /* fcomp5, undocumented op */ - gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fcom_ST0_FT0(tcg_env); - gen_helper_fpop(tcg_env); - break; case 0x15: /* da/5 */ switch (rm) { case 1: /* fucompp */ From fb2efb066749b240e4b1696981377a2af5f7aa85 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 24 Apr 2024 12:28:45 +0200 Subject: [PATCH 126/152] target/i386/tcg: unify more pop/no-pop x87 instructions Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/translate.c | 54 ++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index cf5e2c158c..bdaa436fea 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -2831,46 +2831,62 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) } break; case 0x1d: /* fucomi */ + case 0x3d: /* fucomip */ if (!(s->cpuid_features & CPUID_CMOV)) { goto illegal_op; } gen_update_cc_op(s); gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); gen_helper_fucomi_ST0_FT0(tcg_env); + if (op >= 0x30) { + gen_helper_fpop(tcg_env); + } assume_cc_op(s, CC_OP_EFLAGS); break; case 0x1e: /* fcomi */ + case 0x3e: /* fcomip */ if (!(s->cpuid_features & CPUID_CMOV)) { goto illegal_op; } gen_update_cc_op(s); gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); gen_helper_fcomi_ST0_FT0(tcg_env); + if (op >= 0x30) { + gen_helper_fpop(tcg_env); + } assume_cc_op(s, CC_OP_EFLAGS); break; case 0x28: /* ffree sti */ + case 0x38: /* ffreep sti, undocumented op */ gen_helper_ffree_STN(tcg_env, tcg_constant_i32(opreg)); + if (op >= 0x30) { + gen_helper_fpop(tcg_env); + } break; case 0x2a: /* fst sti */ - gen_helper_fmov_STN_ST0(tcg_env, tcg_constant_i32(opreg)); - break; case 0x2b: /* fstp sti */ case 0x0b: /* fstp1 sti, undocumented op */ case 0x3a: /* fstp8 sti, undocumented op */ case 0x3b: /* fstp9 sti, undocumented op */ gen_helper_fmov_STN_ST0(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fpop(tcg_env); + if (op != 0x2a) { + gen_helper_fpop(tcg_env); + } break; case 0x2c: /* fucom st(i) */ - gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fucom_ST0_FT0(tcg_env); - break; case 0x2d: /* fucomp st(i) */ gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); gen_helper_fucom_ST0_FT0(tcg_env); - gen_helper_fpop(tcg_env); + if (op == 0x2d) { + gen_helper_fpop(tcg_env); + } break; case 0x33: /* de/3 */ + /* + * TODO: does 0x32 also have the same limitation of requiring + * rm == 1? If so, worth bundling it here and switch the fcom + * helper to gen_helper_fp_arith_ST0_FT0(op & 7). + */ switch (rm) { case 1: /* fcompp */ gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(1)); @@ -2882,10 +2898,6 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) goto illegal_op; } break; - case 0x38: /* ffreep sti, undocumented op */ - gen_helper_ffree_STN(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fpop(tcg_env); - break; case 0x3c: /* df/4 */ switch (rm) { case 0: @@ -2897,26 +2909,6 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) goto illegal_op; } break; - case 0x3d: /* fucomip */ - if (!(s->cpuid_features & CPUID_CMOV)) { - goto illegal_op; - } - gen_update_cc_op(s); - gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fucomi_ST0_FT0(tcg_env); - gen_helper_fpop(tcg_env); - assume_cc_op(s, CC_OP_EFLAGS); - break; - case 0x3e: /* fcomip */ - if (!(s->cpuid_features & CPUID_CMOV)) { - goto illegal_op; - } - gen_update_cc_op(s); - gen_helper_fmov_FT0_STN(tcg_env, tcg_constant_i32(opreg)); - gen_helper_fcomi_ST0_FT0(tcg_env); - gen_helper_fpop(tcg_env); - assume_cc_op(s, CC_OP_EFLAGS); - break; case 0x10 ... 0x13: /* fcmovxx */ case 0x18 ... 0x1b: { From b4e9c687f31a12ebffb8f7547436c0ecc429a197 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 25 Jul 2025 10:11:12 +0200 Subject: [PATCH 127/152] target/i386/tcg: kill tmp1_i64 Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/emit.c.inc | 72 ++++++++++++++++++++++--------------- target/i386/tcg/translate.c | 66 ++++++++++++++++++++-------------- 2 files changed, 84 insertions(+), 54 deletions(-) diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 131aefce53..8dac4d09da 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -521,10 +521,12 @@ static void gen_3dnow(DisasContext *s, X86DecodedInsn *decode) gen_helper_enter_mmx(tcg_env); if (fn == FN_3DNOW_MOVE) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[1].offset); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset); + TCGv_i64 t = tcg_temp_new_i64(); + + tcg_gen_ld_i64(t, tcg_env, decode->op[1].offset); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset); } else { - fn(tcg_env, OP_PTR0, OP_PTR1); + fn(tcg_env, OP_PTR0, OP_PTR1); } } @@ -2596,10 +2598,11 @@ static void gen_MOVQ(DisasContext *s, X86DecodedInsn *decode) { int vec_len = vector_len(s, decode); int lo_ofs = vector_elem_offset(&decode->op[0], MO_64, 0); + TCGv_i64 t = tcg_temp_new_i64(); - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[2].offset); + tcg_gen_ld_i64(t, tcg_env, decode->op[2].offset); if (decode->op[0].has_ea) { - tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ); + tcg_gen_qemu_st_i64(t, s->A0, s->mem_index, MO_LEUQ); } else { /* * tcg_gen_gvec_dup_i64(MO_64, op0.offset, 8, vec_len, s->tmp1_64) would @@ -2610,7 +2613,7 @@ static void gen_MOVQ(DisasContext *s, X86DecodedInsn *decode) * it disqualifies using oprsz < maxsz to emulate VEX128. */ tcg_gen_gvec_dup_imm(MO_64, decode->op[0].offset, vec_len, vec_len, 0); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, lo_ofs); + tcg_gen_st_i64(t, tcg_env, lo_ofs); } } @@ -4505,10 +4508,12 @@ static void gen_VMASKMOVPS_st(DisasContext *s, X86DecodedInsn *decode) static void gen_VMOVHPx_ld(DisasContext *s, X86DecodedInsn *decode) { + TCGv_i64 t = tcg_temp_new_i64(); + gen_ldq_env_A0(s, decode->op[0].offset + offsetof(XMMReg, XMM_Q(1))); if (decode->op[0].offset != decode->op[1].offset) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[1].offset + offsetof(XMMReg, XMM_Q(0))); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); + tcg_gen_ld_i64(t, tcg_env, decode->op[1].offset + offsetof(XMMReg, XMM_Q(0))); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); } } @@ -4519,33 +4524,39 @@ static void gen_VMOVHPx_st(DisasContext *s, X86DecodedInsn *decode) static void gen_VMOVHPx(DisasContext *s, X86DecodedInsn *decode) { + TCGv_i64 t = tcg_temp_new_i64(); + if (decode->op[0].offset != decode->op[2].offset) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[2].offset + offsetof(XMMReg, XMM_Q(1))); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(1))); + tcg_gen_ld_i64(t, tcg_env, decode->op[2].offset + offsetof(XMMReg, XMM_Q(1))); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(1))); } if (decode->op[0].offset != decode->op[1].offset) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[1].offset + offsetof(XMMReg, XMM_Q(0))); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); + tcg_gen_ld_i64(t, tcg_env, decode->op[1].offset + offsetof(XMMReg, XMM_Q(0))); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); } } static void gen_VMOVHLPS(DisasContext *s, X86DecodedInsn *decode) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[2].offset + offsetof(XMMReg, XMM_Q(1))); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); + TCGv_i64 t = tcg_temp_new_i64(); + + tcg_gen_ld_i64(t, tcg_env, decode->op[2].offset + offsetof(XMMReg, XMM_Q(1))); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); if (decode->op[0].offset != decode->op[1].offset) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[1].offset + offsetof(XMMReg, XMM_Q(1))); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(1))); + tcg_gen_ld_i64(t, tcg_env, decode->op[1].offset + offsetof(XMMReg, XMM_Q(1))); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(1))); } } static void gen_VMOVLHPS(DisasContext *s, X86DecodedInsn *decode) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[2].offset); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(1))); + TCGv_i64 t = tcg_temp_new_i64(); + + tcg_gen_ld_i64(t, tcg_env, decode->op[2].offset); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(1))); if (decode->op[0].offset != decode->op[1].offset) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[1].offset + offsetof(XMMReg, XMM_Q(0))); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); + tcg_gen_ld_i64(t, tcg_env, decode->op[1].offset + offsetof(XMMReg, XMM_Q(0))); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); } } @@ -4557,34 +4568,39 @@ static void gen_VMOVLHPS(DisasContext *s, X86DecodedInsn *decode) static void gen_VMOVLPx(DisasContext *s, X86DecodedInsn *decode) { int vec_len = vector_len(s, decode); + TCGv_i64 t = tcg_temp_new_i64(); - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, decode->op[2].offset + offsetof(XMMReg, XMM_Q(0))); + tcg_gen_ld_i64(t, tcg_env, decode->op[2].offset + offsetof(XMMReg, XMM_Q(0))); tcg_gen_gvec_mov(MO_64, decode->op[0].offset, decode->op[1].offset, vec_len, vec_len); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); + tcg_gen_st_i64(t, tcg_env, decode->op[0].offset + offsetof(XMMReg, XMM_Q(0))); } static void gen_VMOVLPx_ld(DisasContext *s, X86DecodedInsn *decode) { int vec_len = vector_len(s, decode); + TCGv_i64 t = tcg_temp_new_i64(); - tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ); + tcg_gen_qemu_ld_i64(t, s->A0, s->mem_index, MO_LEUQ); tcg_gen_gvec_mov(MO_64, decode->op[0].offset, decode->op[1].offset, vec_len, vec_len); - tcg_gen_st_i64(s->tmp1_i64, OP_PTR0, offsetof(ZMMReg, ZMM_Q(0))); + tcg_gen_st_i64(t, OP_PTR0, offsetof(ZMMReg, ZMM_Q(0))); } static void gen_VMOVLPx_st(DisasContext *s, X86DecodedInsn *decode) { - tcg_gen_ld_i64(s->tmp1_i64, OP_PTR2, offsetof(ZMMReg, ZMM_Q(0))); - tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ); + TCGv_i64 t = tcg_temp_new_i64(); + + tcg_gen_ld_i64(t, OP_PTR2, offsetof(ZMMReg, ZMM_Q(0))); + tcg_gen_qemu_st_i64(t, s->A0, s->mem_index, MO_LEUQ); } static void gen_VMOVSD_ld(DisasContext *s, X86DecodedInsn *decode) { TCGv_i64 zero = tcg_constant_i64(0); + TCGv_i64 t = tcg_temp_new_i64(); - tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ); + tcg_gen_qemu_ld_i64(t, s->A0, s->mem_index, MO_LEUQ); tcg_gen_st_i64(zero, OP_PTR0, offsetof(ZMMReg, ZMM_Q(1))); - tcg_gen_st_i64(s->tmp1_i64, OP_PTR0, offsetof(ZMMReg, ZMM_Q(0))); + tcg_gen_st_i64(t, OP_PTR0, offsetof(ZMMReg, ZMM_Q(0))); } static void gen_VMOVSS(DisasContext *s, X86DecodedInsn *decode) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index bdaa436fea..dff7b615ef 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -136,7 +136,6 @@ typedef struct DisasContext { /* TCG local register indexes (only used inside old micro ops) */ TCGv_i32 tmp2_i32; - TCGv_i64 tmp1_i64; sigjmp_buf jmpbuf; TCGOp *prev_insn_start; @@ -2365,14 +2364,18 @@ static void gen_jmp_rel_csize(DisasContext *s, int diff, int tb_num) static inline void gen_ldq_env_A0(DisasContext *s, int offset) { - tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ); - tcg_gen_st_i64(s->tmp1_i64, tcg_env, offset); + TCGv_i64 t = tcg_temp_new_i64(); + + tcg_gen_qemu_ld_i64(t, s->A0, s->mem_index, MO_LEUQ); + tcg_gen_st_i64(t, tcg_env, offset); } static inline void gen_stq_env_A0(DisasContext *s, int offset) { - tcg_gen_ld_i64(s->tmp1_i64, tcg_env, offset); - tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, s->mem_index, MO_LEUQ); + TCGv_i64 t = tcg_temp_new_i64(); + + tcg_gen_ld_i64(t, tcg_env, offset); + tcg_gen_qemu_st_i64(t, s->A0, s->mem_index, MO_LEUQ); } static inline void gen_ldo_env_A0(DisasContext *s, int offset, bool align) @@ -2452,6 +2455,7 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) TCGv ea = gen_lea_modrm_1(s, decode->mem, false); TCGv last_addr = tcg_temp_new(); bool update_fdp = true; + TCGv_i64 t64; tcg_gen_mov_tl(last_addr, ea); gen_lea_v_seg(s, ea, decode->mem.def_seg, s->override); @@ -2472,9 +2476,10 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) break; case 0x20 ... 0x27: /* fxxxl */ - tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, + t64 = tcg_temp_new_i64(); + tcg_gen_qemu_ld_i64(t64, s->A0, s->mem_index, MO_LEUQ); - gen_helper_fldl_FT0(tcg_env, s->tmp1_i64); + gen_helper_fldl_FT0(tcg_env, t64); gen_helper_fp_arith_ST0_FT0(op & 7); break; @@ -2496,9 +2501,10 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) gen_helper_fildl_ST0(tcg_env, s->tmp2_i32); break; case 0x28: /* fldl */ - tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, + t64 = tcg_temp_new_i64(); + tcg_gen_qemu_ld_i64(t64, s->A0, s->mem_index, MO_LEUQ); - gen_helper_fldl_ST0(tcg_env, s->tmp1_i64); + gen_helper_fldl_ST0(tcg_env, t64); break; case 0x38: /* filds */ tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, @@ -2513,8 +2519,9 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) gen_helper_fpop(tcg_env); break; case 0x29: /* fisttpll */ - gen_helper_fisttll_ST0(s->tmp1_i64, tcg_env); - tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, + t64 = tcg_temp_new_i64(); + gen_helper_fisttll_ST0(t64, tcg_env); + tcg_gen_qemu_st_i64(t64, s->A0, s->mem_index, MO_LEUQ); gen_helper_fpop(tcg_env); break; @@ -2542,8 +2549,9 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) } break; case 0x2a: case 0x2b: /* fstl, fstpl */ - gen_helper_fstl_ST0(s->tmp1_i64, tcg_env); - tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, + t64 = tcg_temp_new_i64(); + gen_helper_fstl_ST0(t64, tcg_env); + tcg_gen_qemu_st_i64(t64, s->A0, s->mem_index, MO_LEUQ); if ((op & 7) == 3) { gen_helper_fpop(tcg_env); @@ -2611,13 +2619,15 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) gen_helper_fpop(tcg_env); break; case 0x3d: /* fildll */ - tcg_gen_qemu_ld_i64(s->tmp1_i64, s->A0, + t64 = tcg_temp_new_i64(); + tcg_gen_qemu_ld_i64(t64, s->A0, s->mem_index, MO_LEUQ); - gen_helper_fildll_ST0(tcg_env, s->tmp1_i64); + gen_helper_fildll_ST0(tcg_env, t64); break; case 0x3f: /* fistpll */ - gen_helper_fistll_ST0(s->tmp1_i64, tcg_env); - tcg_gen_qemu_st_i64(s->tmp1_i64, s->A0, + t64 = tcg_temp_new_i64(); + gen_helper_fistll_ST0(t64, tcg_env); + tcg_gen_qemu_st_i64(t64, s->A0, s->mem_index, MO_LEUQ); gen_helper_fpop(tcg_env); break; @@ -2959,6 +2969,7 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) int modrm = s->modrm; MemOp ot; int reg, rm, mod, op; + TCGv_i64 t64; /* now check op code */ switch (b) { @@ -3150,9 +3161,10 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) || (s->prefix & (PREFIX_DATA | PREFIX_REPZ | PREFIX_REPNZ))) { goto illegal_op; } + t64 = tcg_temp_new_i64(); tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); - gen_helper_xgetbv(s->tmp1_i64, tcg_env, s->tmp2_i32); - tcg_gen_extr_i64_tl(cpu_regs[R_EAX], cpu_regs[R_EDX], s->tmp1_i64); + gen_helper_xgetbv(t64, tcg_env, s->tmp2_i32); + tcg_gen_extr_i64_tl(cpu_regs[R_EAX], cpu_regs[R_EDX], t64); break; case 0xd1: /* xsetbv */ @@ -3164,10 +3176,11 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) if (!check_cpl0(s)) { break; } - tcg_gen_concat_tl_i64(s->tmp1_i64, cpu_regs[R_EAX], + t64 = tcg_temp_new_i64(); + tcg_gen_concat_tl_i64(t64, cpu_regs[R_EAX], cpu_regs[R_EDX]); tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); - gen_helper_xsetbv(tcg_env, s->tmp2_i32, s->tmp1_i64); + gen_helper_xsetbv(tcg_env, s->tmp2_i32, t64); /* End TB because translation flags may change. */ s->base.is_jmp = DISAS_EOB_NEXT; break; @@ -3327,18 +3340,20 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) if (s->prefix & (PREFIX_DATA | PREFIX_REPZ | PREFIX_REPNZ)) { goto illegal_op; } + t64 = tcg_temp_new_i64(); tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); - gen_helper_rdpkru(s->tmp1_i64, tcg_env, s->tmp2_i32); - tcg_gen_extr_i64_tl(cpu_regs[R_EAX], cpu_regs[R_EDX], s->tmp1_i64); + gen_helper_rdpkru(t64, tcg_env, s->tmp2_i32); + tcg_gen_extr_i64_tl(cpu_regs[R_EAX], cpu_regs[R_EDX], t64); break; case 0xef: /* wrpkru */ if (s->prefix & (PREFIX_DATA | PREFIX_REPZ | PREFIX_REPNZ)) { goto illegal_op; } - tcg_gen_concat_tl_i64(s->tmp1_i64, cpu_regs[R_EAX], + t64 = tcg_temp_new_i64(); + tcg_gen_concat_tl_i64(t64, cpu_regs[R_EAX], cpu_regs[R_EDX]); tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); - gen_helper_wrpkru(tcg_env, s->tmp2_i32, s->tmp1_i64); + gen_helper_wrpkru(tcg_env, s->tmp2_i32, t64); break; CASE_MODRM_OP(6): /* lmsw */ @@ -3730,7 +3745,6 @@ static void i386_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cpu) dc->T1 = tcg_temp_new(); dc->A0 = tcg_temp_new(); - dc->tmp1_i64 = tcg_temp_new_i64(); dc->tmp2_i32 = tcg_temp_new_i32(); dc->cc_srcT = tcg_temp_new(); } From bffe7ed95fdf2284e03284e034940557e86a6dc8 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 25 Jul 2025 10:11:12 +0200 Subject: [PATCH 128/152] target/i386/tcg: kill tmp2_i32 Reviewed-by: Richard Henderson Signed-off-by: Paolo Bonzini --- target/i386/tcg/translate.c | 122 +++++++++++++++++++++--------------- 1 file changed, 72 insertions(+), 50 deletions(-) diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index dff7b615ef..d3e5e4d8ed 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -134,9 +134,6 @@ typedef struct DisasContext { TCGv T0; TCGv T1; - /* TCG local register indexes (only used inside old micro ops) */ - TCGv_i32 tmp2_i32; - sigjmp_buf jmpbuf; TCGOp *prev_insn_start; TCGOp *prev_insn_end; @@ -2455,6 +2452,7 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) TCGv ea = gen_lea_modrm_1(s, decode->mem, false); TCGv last_addr = tcg_temp_new(); bool update_fdp = true; + TCGv_i32 t32; TCGv_i64 t64; tcg_gen_mov_tl(last_addr, ea); @@ -2462,16 +2460,18 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) switch (op) { case 0x00 ... 0x07: /* fxxxs */ - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + tcg_gen_qemu_ld_i32(t32, s->A0, s->mem_index, MO_LEUL); - gen_helper_flds_FT0(tcg_env, s->tmp2_i32); + gen_helper_flds_FT0(tcg_env, t32); gen_helper_fp_arith_ST0_FT0(op & 7); break; case 0x10 ... 0x17: /* fixxxl */ - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + tcg_gen_qemu_ld_i32(t32, s->A0, s->mem_index, MO_LEUL); - gen_helper_fildl_FT0(tcg_env, s->tmp2_i32); + gen_helper_fildl_FT0(tcg_env, t32); gen_helper_fp_arith_ST0_FT0(op & 7); break; @@ -2484,21 +2484,24 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) break; case 0x30 ... 0x37: /* fixxx */ - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + tcg_gen_qemu_ld_i32(t32, s->A0, s->mem_index, MO_LESW); - gen_helper_fildl_FT0(tcg_env, s->tmp2_i32); + gen_helper_fildl_FT0(tcg_env, t32); gen_helper_fp_arith_ST0_FT0(op & 7); break; case 0x08: /* flds */ - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + tcg_gen_qemu_ld_i32(t32, s->A0, s->mem_index, MO_LEUL); - gen_helper_flds_ST0(tcg_env, s->tmp2_i32); + gen_helper_flds_ST0(tcg_env, t32); break; case 0x18: /* fildl */ - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + tcg_gen_qemu_ld_i32(t32, s->A0, s->mem_index, MO_LEUL); - gen_helper_fildl_ST0(tcg_env, s->tmp2_i32); + gen_helper_fildl_ST0(tcg_env, t32); break; case 0x28: /* fldl */ t64 = tcg_temp_new_i64(); @@ -2507,14 +2510,16 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) gen_helper_fldl_ST0(tcg_env, t64); break; case 0x38: /* filds */ - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + tcg_gen_qemu_ld_i32(t32, s->A0, s->mem_index, MO_LESW); - gen_helper_fildl_ST0(tcg_env, s->tmp2_i32); + gen_helper_fildl_ST0(tcg_env, t32); break; case 0x19: /* fisttpl */ - gen_helper_fisttl_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + gen_helper_fisttl_ST0(t32, tcg_env); + tcg_gen_qemu_st_i32(t32, s->A0, s->mem_index, MO_LEUL); gen_helper_fpop(tcg_env); break; @@ -2526,23 +2531,26 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) gen_helper_fpop(tcg_env); break; case 0x39: /* fisttps */ - gen_helper_fistt_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + gen_helper_fistt_ST0(t32, tcg_env); + tcg_gen_qemu_st_i32(t32, s->A0, s->mem_index, MO_LEUW); gen_helper_fpop(tcg_env); break; case 0x0a: case 0x0b: /* fsts, fstps */ - gen_helper_fsts_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + gen_helper_fsts_ST0(t32, tcg_env); + tcg_gen_qemu_st_i32(t32, s->A0, s->mem_index, MO_LEUL); if ((op & 7) == 3) { gen_helper_fpop(tcg_env); } break; case 0x1a: case 0x1b: /* fistl, fistpl */ - gen_helper_fistl_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + gen_helper_fistl_ST0(t32, tcg_env); + tcg_gen_qemu_st_i32(t32, s->A0, s->mem_index, MO_LEUL); if ((op & 7) == 3) { gen_helper_fpop(tcg_env); @@ -2559,8 +2567,9 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) break; case 0x3a: case 0x3b: /* fists, fistps */ - gen_helper_fist_ST0(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + gen_helper_fist_ST0(t32, tcg_env); + tcg_gen_qemu_st_i32(t32, s->A0, s->mem_index, MO_LEUW); if ((op & 7) == 3) { gen_helper_fpop(tcg_env); @@ -2572,9 +2581,10 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) update_fip = update_fdp = false; break; case 0x0d: /* fldcw mem */ - tcg_gen_qemu_ld_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + tcg_gen_qemu_ld_i32(t32, s->A0, s->mem_index, MO_LEUW); - gen_helper_fldcw(tcg_env, s->tmp2_i32); + gen_helper_fldcw(tcg_env, t32); update_fip = update_fdp = false; break; case 0x0e: /* fnstenv mem */ @@ -2583,8 +2593,9 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) update_fip = update_fdp = false; break; case 0x0f: /* fnstcw mem */ - gen_helper_fnstcw(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + gen_helper_fnstcw(t32, tcg_env); + tcg_gen_qemu_st_i32(t32, s->A0, s->mem_index, MO_LEUW); update_fip = update_fdp = false; break; @@ -2606,8 +2617,9 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) update_fip = update_fdp = false; break; case 0x2f: /* fnstsw mem */ - gen_helper_fnstsw(s->tmp2_i32, tcg_env); - tcg_gen_qemu_st_i32(s->tmp2_i32, s->A0, + t32 = tcg_temp_new_i32(); + gen_helper_fnstsw(t32, tcg_env); + tcg_gen_qemu_st_i32(t32, s->A0, s->mem_index, MO_LEUW); update_fip = update_fdp = false; break; @@ -2638,10 +2650,11 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) if (update_fdp) { int last_seg = s->override >= 0 ? s->override : decode->mem.def_seg; - tcg_gen_ld_i32(s->tmp2_i32, tcg_env, + t32 = tcg_temp_new_i32(); + tcg_gen_ld_i32(t32, tcg_env, offsetof(CPUX86State, segs[last_seg].selector)); - tcg_gen_st16_i32(s->tmp2_i32, tcg_env, + tcg_gen_st16_i32(t32, tcg_env, offsetof(CPUX86State, fpds)); tcg_gen_st_tl(last_addr, tcg_env, offsetof(CPUX86State, fpdp)); @@ -2649,6 +2662,7 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) } else { /* register float ops */ int opreg = rm; + TCGv_i32 t32; switch (op) { case 0x08: /* fld sti */ @@ -2911,8 +2925,9 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) case 0x3c: /* df/4 */ switch (rm) { case 0: - gen_helper_fnstsw(s->tmp2_i32, tcg_env); - tcg_gen_extu_i32_tl(s->T0, s->tmp2_i32); + t32 = tcg_temp_new_i32(); + gen_helper_fnstsw(t32, tcg_env); + tcg_gen_extu_i32_tl(s->T0, t32); gen_op_mov_reg_v(s, MO_16, R_EAX, s->T0); break; default: @@ -2948,9 +2963,10 @@ static void gen_x87(DisasContext *s, X86DecodedInsn *decode) } if (update_fip) { - tcg_gen_ld_i32(s->tmp2_i32, tcg_env, + TCGv_i32 t32 = tcg_temp_new_i32(); + tcg_gen_ld_i32(t32, tcg_env, offsetof(CPUX86State, segs[R_CS].selector)); - tcg_gen_st16_i32(s->tmp2_i32, tcg_env, + tcg_gen_st16_i32(t32, tcg_env, offsetof(CPUX86State, fpcs)); tcg_gen_st_tl(eip_cur_tl(s), tcg_env, offsetof(CPUX86State, fpip)); @@ -2969,6 +2985,7 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) int modrm = s->modrm; MemOp ot; int reg, rm, mod, op; + TCGv_i32 t32; TCGv_i64 t64; /* now check op code */ @@ -3035,10 +3052,11 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) if (!PE(s) || VM86(s)) goto illegal_op; if (check_cpl0(s)) { + t32 = tcg_temp_new_i32(); gen_svm_check_intercept(s, SVM_EXIT_LDTR_WRITE); gen_ld_modrm(s, decode, MO_16); - tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0); - gen_helper_lldt(tcg_env, s->tmp2_i32); + tcg_gen_trunc_tl_i32(t32, s->T0); + gen_helper_lldt(tcg_env, t32); } break; case 1: /* str */ @@ -3057,10 +3075,11 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) if (!PE(s) || VM86(s)) goto illegal_op; if (check_cpl0(s)) { + t32 = tcg_temp_new_i32(); gen_svm_check_intercept(s, SVM_EXIT_TR_WRITE); gen_ld_modrm(s, decode, MO_16); - tcg_gen_trunc_tl_i32(s->tmp2_i32, s->T0); - gen_helper_ltr(tcg_env, s->tmp2_i32); + tcg_gen_trunc_tl_i32(t32, s->T0); + gen_helper_ltr(tcg_env, t32); } break; case 4: /* verr */ @@ -3161,9 +3180,10 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) || (s->prefix & (PREFIX_DATA | PREFIX_REPZ | PREFIX_REPNZ))) { goto illegal_op; } + t32 = tcg_temp_new_i32(); t64 = tcg_temp_new_i64(); - tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); - gen_helper_xgetbv(t64, tcg_env, s->tmp2_i32); + tcg_gen_trunc_tl_i32(t32, cpu_regs[R_ECX]); + gen_helper_xgetbv(t64, tcg_env, t32); tcg_gen_extr_i64_tl(cpu_regs[R_EAX], cpu_regs[R_EDX], t64); break; @@ -3176,11 +3196,12 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) if (!check_cpl0(s)) { break; } + t32 = tcg_temp_new_i32(); t64 = tcg_temp_new_i64(); tcg_gen_concat_tl_i64(t64, cpu_regs[R_EAX], cpu_regs[R_EDX]); - tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); - gen_helper_xsetbv(tcg_env, s->tmp2_i32, t64); + tcg_gen_trunc_tl_i32(t32, cpu_regs[R_ECX]); + gen_helper_xsetbv(tcg_env, t32, t64); /* End TB because translation flags may change. */ s->base.is_jmp = DISAS_EOB_NEXT; break; @@ -3340,20 +3361,22 @@ static void gen_multi0F(DisasContext *s, X86DecodedInsn *decode) if (s->prefix & (PREFIX_DATA | PREFIX_REPZ | PREFIX_REPNZ)) { goto illegal_op; } + t32 = tcg_temp_new_i32(); t64 = tcg_temp_new_i64(); - tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); - gen_helper_rdpkru(t64, tcg_env, s->tmp2_i32); + tcg_gen_trunc_tl_i32(t32, cpu_regs[R_ECX]); + gen_helper_rdpkru(t64, tcg_env, t32); tcg_gen_extr_i64_tl(cpu_regs[R_EAX], cpu_regs[R_EDX], t64); break; case 0xef: /* wrpkru */ if (s->prefix & (PREFIX_DATA | PREFIX_REPZ | PREFIX_REPNZ)) { goto illegal_op; } + t32 = tcg_temp_new_i32(); t64 = tcg_temp_new_i64(); tcg_gen_concat_tl_i64(t64, cpu_regs[R_EAX], cpu_regs[R_EDX]); - tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]); - gen_helper_wrpkru(tcg_env, s->tmp2_i32, t64); + tcg_gen_trunc_tl_i32(t32, cpu_regs[R_ECX]); + gen_helper_wrpkru(tcg_env, t32, t64); break; CASE_MODRM_OP(6): /* lmsw */ @@ -3745,7 +3768,6 @@ static void i386_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cpu) dc->T1 = tcg_temp_new(); dc->A0 = tcg_temp_new(); - dc->tmp2_i32 = tcg_temp_new_i32(); dc->cc_srcT = tcg_temp_new(); } From 14b0bc53a17ba78d02166fd0b4deefd01e9488ee Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 25 Jul 2025 12:03:24 +0200 Subject: [PATCH 129/152] target/i386/tcg: add a CCOp for SBB x,x This is more efficient both when generating code and when testing flags. Signed-off-by: Paolo Bonzini --- target/i386/cpu-dump.c | 2 ++ target/i386/cpu.h | 13 ++++++++++++- target/i386/tcg/cc_helper.c | 6 ++++++ target/i386/tcg/emit.c.inc | 33 ++++++--------------------------- target/i386/tcg/translate.c | 13 +++++++++++++ 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/target/i386/cpu-dump.c b/target/i386/cpu-dump.c index ed8fd363c6..9e290c0b9b 100644 --- a/target/i386/cpu-dump.c +++ b/target/i386/cpu-dump.c @@ -91,6 +91,8 @@ static const char * const cc_op_str[] = { [CC_OP_BMILGQ] = "BMILGQ", [CC_OP_POPCNT] = "POPCNT", + + [CC_OP_SBB_SELF] = "SBBx,x", }; static void diff --git a/target/i386/cpu.h b/target/i386/cpu.h index fc63488364..697dde375c 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1565,7 +1565,18 @@ typedef enum { CC_OP_POPCNTL__, CC_OP_POPCNTQ__, CC_OP_POPCNT = sizeof(target_ulong) == 8 ? CC_OP_POPCNTQ__ : CC_OP_POPCNTL__, -#define CC_OP_LAST_BWLQ CC_OP_POPCNTQ__ + + /* + * Note that only CC_OP_SBB_SELF (i.e. the one with MO_TL size) + * is used or implemented, because the translator sign-extends + * the -1 or 0 value that is written in CC_DST. + */ + CC_OP_SBB_SELFB__, /* S/Z/C/A via CC_DST, O clear, P set. */ + CC_OP_SBB_SELFW__, + CC_OP_SBB_SELFL__, + CC_OP_SBB_SELFQ__, + CC_OP_SBB_SELF = sizeof(target_ulong) == 8 ? CC_OP_SBB_SELFQ__ : CC_OP_SBB_SELFL__, +#define CC_OP_LAST_BWLQ CC_OP_SBB_SELFQ__ CC_OP_DYNAMIC, /* must use dynamic code to get cc_op */ } CCOp; diff --git a/target/i386/tcg/cc_helper.c b/target/i386/tcg/cc_helper.c index f1940b4092..1e022da7b0 100644 --- a/target/i386/tcg/cc_helper.c +++ b/target/i386/tcg/cc_helper.c @@ -84,6 +84,9 @@ target_ulong helper_cc_compute_all(target_ulong dst, target_ulong src1, return src1; case CC_OP_POPCNT: return dst ? 0 : CC_Z; + case CC_OP_SBB_SELF: + /* dst is either all zeros (--Z-P-) or all ones (-S-APC) */ + return (dst & (CC_Z|CC_A|CC_C|CC_S)) ^ (CC_P | CC_Z); case CC_OP_MULB: return compute_all_mulb(dst, src1); @@ -246,6 +249,9 @@ target_ulong helper_cc_compute_c(target_ulong dst, target_ulong src1, case CC_OP_MULQ: return src1 != 0; + case CC_OP_SBB_SELF: + return dst & 1; + case CC_OP_ADCX: case CC_OP_ADCOX: return dst; diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc index 8dac4d09da..0fde3d669d 100644 --- a/target/i386/tcg/emit.c.inc +++ b/target/i386/tcg/emit.c.inc @@ -3876,37 +3876,16 @@ static void gen_SBB(DisasContext *s, X86DecodedInsn *decode) return; } - c_in = tcg_temp_new(); - gen_compute_eflags_c(s, c_in); - - /* - * Here the change is as follows: - * CC_SBB: src1 = T0, src2 = T0, src3 = c_in - * CC_SUB: src1 = 0, src2 = c_in (no src3) - * - * The difference also does not matter: - * - AF is bit 4 of dst^src1^src2, but bit 4 of src1^src2 is zero in both cases - * therefore AF comes straight from dst (in fact it is c_in) - * - for OF, src1 and src2 have the same sign in both cases, meaning there - * can be no overflow - */ + /* SBB x,x has its own CCOp so that's even easier. */ if (decode->e.op2 != X86_TYPE_I && !decode->op[0].has_ea && decode->op[0].n == decode->op[2].n) { - if (s->cc_op == CC_OP_DYNAMIC) { - tcg_gen_neg_tl(s->T0, c_in); - } else { - /* - * Do not negate c_in because it will often be dead and only the - * instruction generated by negsetcond will survive. - */ - gen_neg_setcc(s, JCC_B << 1, s->T0); - } - tcg_gen_movi_tl(s->cc_srcT, 0); - decode->cc_src = c_in; - decode->cc_dst = s->T0; - decode->cc_op = CC_OP_SUBB + ot; + gen_neg_setcc(s, JCC_B << 1, s->T0); + prepare_update1_cc(decode, s, CC_OP_SBB_SELF); return; } + c_in = tcg_temp_new(); + gen_compute_eflags_c(s, c_in); + if (s->prefix & PREFIX_LOCK) { tcg_gen_add_tl(s->T0, s->T1, c_in); tcg_gen_neg_tl(s->T0, s->T0); diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index d3e5e4d8ed..5aa38a912b 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -304,6 +304,7 @@ static const uint8_t cc_op_live_[] = { [CC_OP_ADOX] = USES_CC_SRC | USES_CC_SRC2, [CC_OP_ADCOX] = USES_CC_DST | USES_CC_SRC | USES_CC_SRC2, [CC_OP_POPCNT] = USES_CC_DST, + [CC_OP_SBB_SELF] = USES_CC_DST, }; static uint8_t cc_op_live(CCOp op) @@ -938,6 +939,9 @@ static CCPrepare gen_prepare_eflags_c(DisasContext *s, TCGv reg) size = cc_op_size(s->cc_op); return gen_prepare_val_nz(cpu_cc_src, size, false); + case CC_OP_SBB_SELF: + return (CCPrepare) { .cond = TCG_COND_NE, .reg = cpu_cc_dst }; + case CC_OP_ADCX: case CC_OP_ADCOX: return (CCPrepare) { .cond = TCG_COND_NE, .reg = cpu_cc_dst, @@ -999,6 +1003,7 @@ static CCPrepare gen_prepare_eflags_o(DisasContext *s, TCGv reg) case CC_OP_ADCOX: return (CCPrepare) { .cond = TCG_COND_NE, .reg = cpu_cc_src2, .no_setcond = true }; + case CC_OP_SBB_SELF: case CC_OP_LOGICB ... CC_OP_LOGICQ: case CC_OP_POPCNT: return (CCPrepare) { .cond = TCG_COND_NEVER }; @@ -1078,6 +1083,14 @@ static CCPrepare gen_prepare_cc(DisasContext *s, int b, TCGv reg) } break; + case CC_OP_SBB_SELF: + /* checking for nonzero is usually the most efficient */ + if (jcc_op == JCC_L || jcc_op == JCC_B || jcc_op == JCC_S) { + jcc_op = JCC_Z; + inv = !inv; + } + goto slow_jcc; + case CC_OP_LOGICB ... CC_OP_LOGICQ: /* Mostly used for test+jump */ size = s->cc_op - CC_OP_LOGICB; From 7e7d54fc60b86f3d153573ef5cdc16d1de00e670 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 13 Aug 2024 11:36:38 +0200 Subject: [PATCH 130/152] target/i386/tcg: move fetch code out of translate.c Let translate.c only concern itself with TCG code generation. Move everything that uses CPUX86State*, as well as gen_lea_modrm_0 now that it is only used to fill decode->mem, to decode-new.c.inc. While at it also rename gen_lea_modrm_0. Signed-off-by: Paolo Bonzini --- target/i386/tcg/decode-new.c.inc | 277 ++++++++++++++++++++++++++++++- target/i386/tcg/translate.c | 271 ------------------------------ 2 files changed, 274 insertions(+), 274 deletions(-) diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc index e7ffd3a984..9d3a7c0d42 100644 --- a/target/i386/tcg/decode-new.c.inc +++ b/target/i386/tcg/decode-new.c.inc @@ -279,6 +279,130 @@ #define UNKNOWN_OPCODE ((X86OpEntry) {}) +#define X86_MAX_INSN_LENGTH 15 + +static uint64_t advance_pc(CPUX86State *env, DisasContext *s, int num_bytes) +{ + uint64_t pc = s->pc; + + /* This is a subsequent insn that crosses a page boundary. */ + if (s->base.num_insns > 1 && + !translator_is_same_page(&s->base, s->pc + num_bytes - 1)) { + siglongjmp(s->jmpbuf, 2); + } + + s->pc += num_bytes; + if (unlikely(cur_insn_len(s) > X86_MAX_INSN_LENGTH)) { + /* If the instruction's 16th byte is on a different page than the 1st, a + * page fault on the second page wins over the general protection fault + * caused by the instruction being too long. + * This can happen even if the operand is only one byte long! + */ + if (((s->pc - 1) ^ (pc - 1)) & TARGET_PAGE_MASK) { + (void)translator_ldub(env, &s->base, + (s->pc - 1) & TARGET_PAGE_MASK); + } + siglongjmp(s->jmpbuf, 1); + } + + return pc; +} + +static inline uint8_t x86_ldub_code(CPUX86State *env, DisasContext *s) +{ + return translator_ldub(env, &s->base, advance_pc(env, s, 1)); +} + +static inline uint16_t x86_lduw_code(CPUX86State *env, DisasContext *s) +{ + return translator_lduw(env, &s->base, advance_pc(env, s, 2)); +} + +static inline uint32_t x86_ldl_code(CPUX86State *env, DisasContext *s) +{ + return translator_ldl(env, &s->base, advance_pc(env, s, 4)); +} + +#ifdef TARGET_X86_64 +static inline uint64_t x86_ldq_code(CPUX86State *env, DisasContext *s) +{ + return translator_ldq(env, &s->base, advance_pc(env, s, 8)); +} +#endif + +static target_ulong insn_get_addr(CPUX86State *env, DisasContext *s, MemOp ot) +{ + target_ulong ret; + + switch (ot) { + case MO_8: + ret = x86_ldub_code(env, s); + break; + case MO_16: + ret = x86_lduw_code(env, s); + break; + case MO_32: + ret = x86_ldl_code(env, s); + break; +#ifdef TARGET_X86_64 + case MO_64: + ret = x86_ldq_code(env, s); + break; +#endif + default: + g_assert_not_reached(); + } + return ret; +} + +static inline uint32_t insn_get(CPUX86State *env, DisasContext *s, MemOp ot) +{ + uint32_t ret; + + switch (ot) { + case MO_8: + ret = x86_ldub_code(env, s); + break; + case MO_16: + ret = x86_lduw_code(env, s); + break; + case MO_32: +#ifdef TARGET_X86_64 + case MO_64: +#endif + ret = x86_ldl_code(env, s); + break; + default: + g_assert_not_reached(); + } + return ret; +} + +static target_long insn_get_signed(CPUX86State *env, DisasContext *s, MemOp ot) +{ + target_long ret; + + switch (ot) { + case MO_8: + ret = (int8_t) x86_ldub_code(env, s); + break; + case MO_16: + ret = (int16_t) x86_lduw_code(env, s); + break; + case MO_32: + ret = (int32_t) x86_ldl_code(env, s); + break; +#ifdef TARGET_X86_64 + case MO_64: + ret = x86_ldq_code(env, s); + break; +#endif + default: + g_assert_not_reached(); + } + return ret; +} + static uint8_t get_modrm(DisasContext *s, CPUX86State *env) { if (!s->has_modrm) { @@ -1883,6 +2007,130 @@ static void decode_root(DisasContext *s, CPUX86State *env, X86OpEntry *entry, ui *entry = opcodes_root[*b]; } +/* Decompose an address. */ +static AddressParts decode_modrm_address(CPUX86State *env, DisasContext *s, + int modrm, bool is_vsib) +{ + int def_seg, base, index, scale, mod, rm; + target_long disp; + bool havesib; + + def_seg = R_DS; + index = -1; + scale = 0; + disp = 0; + + mod = (modrm >> 6) & 3; + rm = modrm & 7; + base = rm | REX_B(s); + + if (mod == 3) { + /* Normally filtered out earlier, but including this path + simplifies multi-byte nop, as well as bndcl, bndcu, bndcn. */ + goto done; + } + + switch (s->aflag) { + case MO_64: + case MO_32: + havesib = 0; + if (rm == 4) { + int code = x86_ldub_code(env, s); + scale = (code >> 6) & 3; + index = ((code >> 3) & 7) | REX_X(s); + if (index == 4 && !is_vsib) { + index = -1; /* no index */ + } + base = (code & 7) | REX_B(s); + havesib = 1; + } + + switch (mod) { + case 0: + if ((base & 7) == 5) { + base = -1; + disp = (int32_t)x86_ldl_code(env, s); + if (CODE64(s) && !havesib) { + base = -2; + disp += s->pc + s->rip_offset; + } + } + break; + case 1: + disp = (int8_t)x86_ldub_code(env, s); + break; + default: + case 2: + disp = (int32_t)x86_ldl_code(env, s); + break; + } + + /* For correct popl handling with esp. */ + if (base == R_ESP && s->popl_esp_hack) { + disp += s->popl_esp_hack; + } + if (base == R_EBP || base == R_ESP) { + def_seg = R_SS; + } + break; + + case MO_16: + if (mod == 0) { + if (rm == 6) { + base = -1; + disp = x86_lduw_code(env, s); + break; + } + } else if (mod == 1) { + disp = (int8_t)x86_ldub_code(env, s); + } else { + disp = (int16_t)x86_lduw_code(env, s); + } + + switch (rm) { + case 0: + base = R_EBX; + index = R_ESI; + break; + case 1: + base = R_EBX; + index = R_EDI; + break; + case 2: + base = R_EBP; + index = R_ESI; + def_seg = R_SS; + break; + case 3: + base = R_EBP; + index = R_EDI; + def_seg = R_SS; + break; + case 4: + base = R_ESI; + break; + case 5: + base = R_EDI; + break; + case 6: + base = R_EBP; + def_seg = R_SS; + break; + default: + case 7: + base = R_EBX; + break; + } + break; + + default: + g_assert_not_reached(); + } + + done: + return (AddressParts){ def_seg, base, index, scale, disp }; +} + static int decode_modrm(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode, X86DecodedOp *op) { @@ -1895,8 +2143,8 @@ static int decode_modrm(DisasContext *s, CPUX86State *env, } else { op->has_ea = true; op->n = -1; - decode->mem = gen_lea_modrm_0(env, s, modrm, - decode->e.vex_class == 12); + decode->mem = decode_modrm_address(env, s, get_modrm(s, env), + decode->e.vex_class == 12); } return modrm; } @@ -2516,6 +2764,23 @@ illegal: return false; } +static void dump_unknown_opcode(CPUX86State *env, DisasContext *s) +{ + if (qemu_loglevel_mask(LOG_UNIMP)) { + FILE *logfile = qemu_log_trylock(); + if (logfile) { + target_ulong pc = s->base.pc_next, end = s->pc; + + fprintf(logfile, "ILLOPC: " TARGET_FMT_lx ":", pc); + for (; pc < end; ++pc) { + fprintf(logfile, " %02x", translator_ldub(env, &s->base, pc)); + } + fprintf(logfile, "\n"); + qemu_log_unlock(logfile); + } + } +} + /* * Convert one instruction. s->base.is_jmp is set if the translation must * be stopped. @@ -2903,5 +3168,11 @@ static void disas_insn(DisasContext *s, CPUState *cpu) gen_illegal_opcode(s); return; unknown_op: - gen_unknown_opcode(env, s); + /* + * Similarly, except that the assumption here is that we don't decode + * the instruction at all -- either a missing opcode, an unimplemented + * feature, or just a bogus instruction stream. + */ + gen_illegal_opcode(s); + dump_unknown_opcode(env, s); } diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c index 5aa38a912b..7c444d5006 100644 --- a/target/i386/tcg/translate.c +++ b/target/i386/tcg/translate.c @@ -1644,182 +1644,6 @@ static TCGv gen_shiftd_rm_T1(DisasContext *s, MemOp ot, return cc_src; } -#define X86_MAX_INSN_LENGTH 15 - -static uint64_t advance_pc(CPUX86State *env, DisasContext *s, int num_bytes) -{ - uint64_t pc = s->pc; - - /* This is a subsequent insn that crosses a page boundary. */ - if (s->base.num_insns > 1 && - !translator_is_same_page(&s->base, s->pc + num_bytes - 1)) { - siglongjmp(s->jmpbuf, 2); - } - - s->pc += num_bytes; - if (unlikely(cur_insn_len(s) > X86_MAX_INSN_LENGTH)) { - /* If the instruction's 16th byte is on a different page than the 1st, a - * page fault on the second page wins over the general protection fault - * caused by the instruction being too long. - * This can happen even if the operand is only one byte long! - */ - if (((s->pc - 1) ^ (pc - 1)) & TARGET_PAGE_MASK) { - (void)translator_ldub(env, &s->base, - (s->pc - 1) & TARGET_PAGE_MASK); - } - siglongjmp(s->jmpbuf, 1); - } - - return pc; -} - -static inline uint8_t x86_ldub_code(CPUX86State *env, DisasContext *s) -{ - return translator_ldub(env, &s->base, advance_pc(env, s, 1)); -} - -static inline uint16_t x86_lduw_code(CPUX86State *env, DisasContext *s) -{ - return translator_lduw(env, &s->base, advance_pc(env, s, 2)); -} - -static inline uint32_t x86_ldl_code(CPUX86State *env, DisasContext *s) -{ - return translator_ldl(env, &s->base, advance_pc(env, s, 4)); -} - -#ifdef TARGET_X86_64 -static inline uint64_t x86_ldq_code(CPUX86State *env, DisasContext *s) -{ - return translator_ldq(env, &s->base, advance_pc(env, s, 8)); -} -#endif - -/* Decompose an address. */ - -static AddressParts gen_lea_modrm_0(CPUX86State *env, DisasContext *s, - int modrm, bool is_vsib) -{ - int def_seg, base, index, scale, mod, rm; - target_long disp; - bool havesib; - - def_seg = R_DS; - index = -1; - scale = 0; - disp = 0; - - mod = (modrm >> 6) & 3; - rm = modrm & 7; - base = rm | REX_B(s); - - if (mod == 3) { - /* Normally filtered out earlier, but including this path - simplifies multi-byte nop, as well as bndcl, bndcu, bndcn. */ - goto done; - } - - switch (s->aflag) { - case MO_64: - case MO_32: - havesib = 0; - if (rm == 4) { - int code = x86_ldub_code(env, s); - scale = (code >> 6) & 3; - index = ((code >> 3) & 7) | REX_X(s); - if (index == 4 && !is_vsib) { - index = -1; /* no index */ - } - base = (code & 7) | REX_B(s); - havesib = 1; - } - - switch (mod) { - case 0: - if ((base & 7) == 5) { - base = -1; - disp = (int32_t)x86_ldl_code(env, s); - if (CODE64(s) && !havesib) { - base = -2; - disp += s->pc + s->rip_offset; - } - } - break; - case 1: - disp = (int8_t)x86_ldub_code(env, s); - break; - default: - case 2: - disp = (int32_t)x86_ldl_code(env, s); - break; - } - - /* For correct popl handling with esp. */ - if (base == R_ESP && s->popl_esp_hack) { - disp += s->popl_esp_hack; - } - if (base == R_EBP || base == R_ESP) { - def_seg = R_SS; - } - break; - - case MO_16: - if (mod == 0) { - if (rm == 6) { - base = -1; - disp = x86_lduw_code(env, s); - break; - } - } else if (mod == 1) { - disp = (int8_t)x86_ldub_code(env, s); - } else { - disp = (int16_t)x86_lduw_code(env, s); - } - - switch (rm) { - case 0: - base = R_EBX; - index = R_ESI; - break; - case 1: - base = R_EBX; - index = R_EDI; - break; - case 2: - base = R_EBP; - index = R_ESI; - def_seg = R_SS; - break; - case 3: - base = R_EBP; - index = R_EDI; - def_seg = R_SS; - break; - case 4: - base = R_ESI; - break; - case 5: - base = R_EDI; - break; - case 6: - base = R_EBP; - def_seg = R_SS; - break; - default: - case 7: - base = R_EBX; - break; - } - break; - - default: - g_assert_not_reached(); - } - - done: - return (AddressParts){ def_seg, base, index, scale, disp }; -} - /* Compute the address, with a minimum number of TCG ops. */ static TCGv gen_lea_modrm_1(DisasContext *s, AddressParts a, bool is_vsib) { @@ -1904,79 +1728,6 @@ static void gen_st_modrm(DisasContext *s, X86DecodedInsn *decode, MemOp ot) } } -static target_ulong insn_get_addr(CPUX86State *env, DisasContext *s, MemOp ot) -{ - target_ulong ret; - - switch (ot) { - case MO_8: - ret = x86_ldub_code(env, s); - break; - case MO_16: - ret = x86_lduw_code(env, s); - break; - case MO_32: - ret = x86_ldl_code(env, s); - break; -#ifdef TARGET_X86_64 - case MO_64: - ret = x86_ldq_code(env, s); - break; -#endif - default: - g_assert_not_reached(); - } - return ret; -} - -static inline uint32_t insn_get(CPUX86State *env, DisasContext *s, MemOp ot) -{ - uint32_t ret; - - switch (ot) { - case MO_8: - ret = x86_ldub_code(env, s); - break; - case MO_16: - ret = x86_lduw_code(env, s); - break; - case MO_32: -#ifdef TARGET_X86_64 - case MO_64: -#endif - ret = x86_ldl_code(env, s); - break; - default: - g_assert_not_reached(); - } - return ret; -} - -static target_long insn_get_signed(CPUX86State *env, DisasContext *s, MemOp ot) -{ - target_long ret; - - switch (ot) { - case MO_8: - ret = (int8_t) x86_ldub_code(env, s); - break; - case MO_16: - ret = (int16_t) x86_lduw_code(env, s); - break; - case MO_32: - ret = (int32_t) x86_ldl_code(env, s); - break; -#ifdef TARGET_X86_64 - case MO_64: - ret = x86_ldq_code(env, s); - break; -#endif - default: - g_assert_not_reached(); - } - return ret; -} - static void gen_conditional_jump_labels(DisasContext *s, target_long diff, TCGLabel *not_taken, TCGLabel *taken) { @@ -2221,28 +1972,6 @@ static void gen_leave(DisasContext *s) gen_op_mov_reg_v(s, a_ot, R_ESP, s->T1); } -/* Similarly, except that the assumption here is that we don't decode - the instruction at all -- either a missing opcode, an unimplemented - feature, or just a bogus instruction stream. */ -static void gen_unknown_opcode(CPUX86State *env, DisasContext *s) -{ - gen_illegal_opcode(s); - - if (qemu_loglevel_mask(LOG_UNIMP)) { - FILE *logfile = qemu_log_trylock(); - if (logfile) { - target_ulong pc = s->base.pc_next, end = s->pc; - - fprintf(logfile, "ILLOPC: " TARGET_FMT_lx ":", pc); - for (; pc < end; ++pc) { - fprintf(logfile, " %02x", translator_ldub(env, &s->base, pc)); - } - fprintf(logfile, "\n"); - qemu_log_unlock(logfile); - } - } -} - /* an interrupt is different from an exception because of the privilege checks */ static void gen_interrupt(DisasContext *s, uint8_t intno) From e12799fc615ef3903e7cf0acc1b113505e129f53 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 25 Jul 2025 12:04:33 +0200 Subject: [PATCH 131/152] target/i386/tcg: commonize code to compute SF/ZF/PF PF/ZF/SF are computed the same way for almost all CC_OP values (depending only on the operand size in the case of ZF and SF). The only exception is PF for CC_OP_BLSI* and CC_OP_BMILG*; but AMD documents that PF should be computed normally (rather than being undefined) so that is a kind of bug fix. Put the common code at the end of helper_cc_compute_all, shaving another kB from its text. Signed-off-by: Paolo Bonzini --- target/i386/cpu.h | 4 +- target/i386/tcg/cc_helper.c | 274 +++++++++++++++-------- target/i386/tcg/cc_helper_template.h.inc | 112 +++------ 3 files changed, 209 insertions(+), 181 deletions(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 697dde375c..c0bf51448e 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1545,12 +1545,12 @@ typedef enum { CC_OP_SARL, CC_OP_SARQ, - CC_OP_BMILGB, /* Z,S via CC_DST, C = SRC==0; O=0; P,A undefined */ + CC_OP_BMILGB, /* P,Z,S via CC_DST, C = SRC==0; A=O=0 */ CC_OP_BMILGW, CC_OP_BMILGL, CC_OP_BMILGQ, - CC_OP_BLSIB, /* Z,S via CC_DST, C = SRC!=0; O=0; P,A undefined */ + CC_OP_BLSIB, /* P,Z,S via CC_DST, C = SRC!=0; A=O=0 */ CC_OP_BLSIW, CC_OP_BLSIL, CC_OP_BLSIQ, diff --git a/target/i386/tcg/cc_helper.c b/target/i386/tcg/cc_helper.c index 1e022da7b0..91e492196a 100644 --- a/target/i386/tcg/cc_helper.c +++ b/target/i386/tcg/cc_helper.c @@ -73,9 +73,25 @@ target_ulong helper_cc_compute_nz(target_ulong dst, target_ulong src1, } } +/* NOTE: we compute the flags like the P4. On olders CPUs, only OF and + CF are modified and it is slower to do that. Note as well that we + don't truncate SRC1 for computing carry to DATA_TYPE. */ +static inline uint32_t compute_aco_mul(target_long src1) +{ + uint32_t cf, af, of; + + cf = (src1 != 0); + af = 0; /* undefined */ + of = cf * CC_O; + return cf + af + of; +} + target_ulong helper_cc_compute_all(target_ulong dst, target_ulong src1, target_ulong src2, int op) { + uint32_t flags = 0; + int shift = 0; + switch (op) { default: /* should never happen */ return 0; @@ -88,90 +104,6 @@ target_ulong helper_cc_compute_all(target_ulong dst, target_ulong src1, /* dst is either all zeros (--Z-P-) or all ones (-S-APC) */ return (dst & (CC_Z|CC_A|CC_C|CC_S)) ^ (CC_P | CC_Z); - case CC_OP_MULB: - return compute_all_mulb(dst, src1); - case CC_OP_MULW: - return compute_all_mulw(dst, src1); - case CC_OP_MULL: - return compute_all_mull(dst, src1); - - case CC_OP_ADDB: - return compute_all_addb(dst, src1); - case CC_OP_ADDW: - return compute_all_addw(dst, src1); - case CC_OP_ADDL: - return compute_all_addl(dst, src1); - - case CC_OP_ADCB: - return compute_all_adcb(dst, src1, src2); - case CC_OP_ADCW: - return compute_all_adcw(dst, src1, src2); - case CC_OP_ADCL: - return compute_all_adcl(dst, src1, src2); - - case CC_OP_SUBB: - return compute_all_subb(dst, src1); - case CC_OP_SUBW: - return compute_all_subw(dst, src1); - case CC_OP_SUBL: - return compute_all_subl(dst, src1); - - case CC_OP_SBBB: - return compute_all_sbbb(dst, src1, src2); - case CC_OP_SBBW: - return compute_all_sbbw(dst, src1, src2); - case CC_OP_SBBL: - return compute_all_sbbl(dst, src1, src2); - - case CC_OP_LOGICB: - return compute_all_logicb(dst, src1); - case CC_OP_LOGICW: - return compute_all_logicw(dst, src1); - case CC_OP_LOGICL: - return compute_all_logicl(dst, src1); - - case CC_OP_INCB: - return compute_all_incb(dst, src1); - case CC_OP_INCW: - return compute_all_incw(dst, src1); - case CC_OP_INCL: - return compute_all_incl(dst, src1); - - case CC_OP_DECB: - return compute_all_decb(dst, src1); - case CC_OP_DECW: - return compute_all_decw(dst, src1); - case CC_OP_DECL: - return compute_all_decl(dst, src1); - - case CC_OP_SHLB: - return compute_all_shlb(dst, src1); - case CC_OP_SHLW: - return compute_all_shlw(dst, src1); - case CC_OP_SHLL: - return compute_all_shll(dst, src1); - - case CC_OP_SARB: - return compute_all_sarb(dst, src1); - case CC_OP_SARW: - return compute_all_sarw(dst, src1); - case CC_OP_SARL: - return compute_all_sarl(dst, src1); - - case CC_OP_BMILGB: - return compute_all_bmilgb(dst, src1); - case CC_OP_BMILGW: - return compute_all_bmilgw(dst, src1); - case CC_OP_BMILGL: - return compute_all_bmilgl(dst, src1); - - case CC_OP_BLSIB: - return compute_all_blsib(dst, src1); - case CC_OP_BLSIW: - return compute_all_blsiw(dst, src1); - case CC_OP_BLSIL: - return compute_all_blsil(dst, src1); - case CC_OP_ADCX: return compute_all_adcx(dst, src1, src2); case CC_OP_ADOX: @@ -179,33 +111,181 @@ target_ulong helper_cc_compute_all(target_ulong dst, target_ulong src1, case CC_OP_ADCOX: return compute_all_adcox(dst, src1, src2); + case CC_OP_MULB: + flags = compute_aco_mul(src1); + goto psz_b; + case CC_OP_MULW: + flags = compute_aco_mul(src1); + goto psz_w; + case CC_OP_MULL: + flags = compute_aco_mul(src1); + goto psz_l; + + case CC_OP_ADDB: + flags = compute_aco_addb(dst, src1); + goto psz_b; + case CC_OP_ADDW: + flags = compute_aco_addw(dst, src1); + goto psz_w; + case CC_OP_ADDL: + flags = compute_aco_addl(dst, src1); + goto psz_l; + + case CC_OP_ADCB: + flags = compute_aco_adcb(dst, src1, src2); + goto psz_b; + case CC_OP_ADCW: + flags = compute_aco_adcw(dst, src1, src2); + goto psz_w; + case CC_OP_ADCL: + flags = compute_aco_adcl(dst, src1, src2); + goto psz_l; + + case CC_OP_SUBB: + flags = compute_aco_subb(dst, src1); + goto psz_b; + case CC_OP_SUBW: + flags = compute_aco_subw(dst, src1); + goto psz_w; + case CC_OP_SUBL: + flags = compute_aco_subl(dst, src1); + goto psz_l; + + case CC_OP_SBBB: + flags = compute_aco_sbbb(dst, src1, src2); + goto psz_b; + case CC_OP_SBBW: + flags = compute_aco_sbbw(dst, src1, src2); + goto psz_w; + case CC_OP_SBBL: + flags = compute_aco_sbbl(dst, src1, src2); + goto psz_l; + + case CC_OP_LOGICB: + flags = 0; + goto psz_b; + case CC_OP_LOGICW: + flags = 0; + goto psz_w; + case CC_OP_LOGICL: + flags = 0; + goto psz_l; + + case CC_OP_INCB: + flags = compute_aco_incb(dst, src1); + goto psz_b; + case CC_OP_INCW: + flags = compute_aco_incw(dst, src1); + goto psz_w; + case CC_OP_INCL: + flags = compute_aco_incl(dst, src1); + goto psz_l; + + case CC_OP_DECB: + flags = compute_aco_decb(dst, src1); + goto psz_b; + case CC_OP_DECW: + flags = compute_aco_decw(dst, src1); + goto psz_w; + case CC_OP_DECL: + flags = compute_aco_decl(dst, src1); + goto psz_l; + + case CC_OP_SHLB: + flags = compute_aco_shlb(dst, src1); + goto psz_b; + case CC_OP_SHLW: + flags = compute_aco_shlw(dst, src1); + goto psz_w; + case CC_OP_SHLL: + flags = compute_aco_shll(dst, src1); + goto psz_l; + + case CC_OP_SARB: + flags = compute_aco_sarb(dst, src1); + goto psz_b; + case CC_OP_SARW: + flags = compute_aco_sarw(dst, src1); + goto psz_w; + case CC_OP_SARL: + flags = compute_aco_sarl(dst, src1); + goto psz_l; + + case CC_OP_BMILGB: + flags = compute_aco_bmilgb(dst, src1); + goto psz_b; + case CC_OP_BMILGW: + flags = compute_aco_bmilgw(dst, src1); + goto psz_w; + case CC_OP_BMILGL: + flags = compute_aco_bmilgl(dst, src1); + goto psz_l; + + case CC_OP_BLSIB: + flags = compute_aco_blsib(dst, src1); + goto psz_b; + case CC_OP_BLSIW: + flags = compute_aco_blsiw(dst, src1); + goto psz_w; + case CC_OP_BLSIL: + flags = compute_aco_blsil(dst, src1); + goto psz_l; + #ifdef TARGET_X86_64 case CC_OP_MULQ: - return compute_all_mulq(dst, src1); + flags = compute_aco_mul(src1); + goto psz_q; case CC_OP_ADDQ: - return compute_all_addq(dst, src1); + flags = compute_aco_addq(dst, src1); + goto psz_q; case CC_OP_ADCQ: - return compute_all_adcq(dst, src1, src2); + flags = compute_aco_adcq(dst, src1, src2); + goto psz_q; case CC_OP_SUBQ: - return compute_all_subq(dst, src1); + flags = compute_aco_subq(dst, src1); + goto psz_q; case CC_OP_SBBQ: - return compute_all_sbbq(dst, src1, src2); - case CC_OP_LOGICQ: - return compute_all_logicq(dst, src1); + flags = compute_aco_sbbq(dst, src1, src2); + goto psz_q; case CC_OP_INCQ: - return compute_all_incq(dst, src1); + flags = compute_aco_incq(dst, src1); + goto psz_q; case CC_OP_DECQ: - return compute_all_decq(dst, src1); + flags = compute_aco_decq(dst, src1); + goto psz_q; + case CC_OP_LOGICQ: + flags = 0; + goto psz_q; case CC_OP_SHLQ: - return compute_all_shlq(dst, src1); + flags = compute_aco_shlq(dst, src1); + goto psz_q; case CC_OP_SARQ: - return compute_all_sarq(dst, src1); + flags = compute_aco_sarq(dst, src1); + goto psz_q; case CC_OP_BMILGQ: - return compute_all_bmilgq(dst, src1); + flags = compute_aco_bmilgq(dst, src1); + goto psz_q; case CC_OP_BLSIQ: - return compute_all_blsiq(dst, src1); + flags = compute_aco_blsiq(dst, src1); + goto psz_q; #endif } + +psz_b: + shift += 8; +psz_w: + shift += 16; +psz_l: +#ifdef TARGET_X86_64 + shift += 32; +psz_q: +#endif + + flags += compute_pf(dst); + dst <<= shift; + flags += dst == 0 ? CC_Z : 0; + flags += (target_long)dst < 0 ? CC_S : 0; + return flags; } uint32_t cpu_cc_compute_all(CPUX86State *env) diff --git a/target/i386/tcg/cc_helper_template.h.inc b/target/i386/tcg/cc_helper_template.h.inc index d8fd976ca1..af58c2409f 100644 --- a/target/i386/tcg/cc_helper_template.h.inc +++ b/target/i386/tcg/cc_helper_template.h.inc @@ -1,5 +1,5 @@ /* - * x86 condition code helpers + * x86 condition code helpers for AF/CF/OF * * Copyright (c) 2008 Fabrice Bellard * @@ -44,14 +44,9 @@ /* dynamic flags computation */ -static uint32_t glue(compute_all_cout, SUFFIX)(DATA_TYPE dst, DATA_TYPE carries) +static uint32_t glue(compute_aco_cout, SUFFIX)(DATA_TYPE carries) { - uint32_t af_cf, pf, zf, sf, of; - - /* PF, ZF, SF computed from result. */ - pf = compute_pf(dst); - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; + uint32_t af_cf, of; /* * AF, CF, OF computed from carry out vector. To compute AF and CF, rotate it @@ -62,14 +57,14 @@ static uint32_t glue(compute_all_cout, SUFFIX)(DATA_TYPE dst, DATA_TYPE carries) */ af_cf = ((carries << 1) | (carries >> (DATA_BITS - 1))) & (CC_A | CC_C); of = (lshift(carries, 12 - DATA_BITS) + CC_O / 2) & CC_O; - return pf + zf + sf + af_cf + of; + return af_cf + of; } -static uint32_t glue(compute_all_add, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) +static uint32_t glue(compute_aco_add, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) { DATA_TYPE src2 = dst - src1; DATA_TYPE carries = ADD_COUT_VEC(src1, src2, dst); - return glue(compute_all_cout, SUFFIX)(dst, carries); + return glue(compute_aco_cout, SUFFIX)(carries); } static int glue(compute_c_add, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) @@ -77,12 +72,12 @@ static int glue(compute_c_add, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) return dst < src1; } -static uint32_t glue(compute_all_adc, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1, +static uint32_t glue(compute_aco_adc, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1, DATA_TYPE src3) { DATA_TYPE src2 = dst - src1 - src3; DATA_TYPE carries = ADD_COUT_VEC(src1, src2, dst); - return glue(compute_all_cout, SUFFIX)(dst, carries); + return glue(compute_aco_cout, SUFFIX)(carries); } static int glue(compute_c_adc, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1, @@ -97,11 +92,11 @@ static int glue(compute_c_adc, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1, #endif } -static uint32_t glue(compute_all_sub, SUFFIX)(DATA_TYPE dst, DATA_TYPE src2) +static uint32_t glue(compute_aco_sub, SUFFIX)(DATA_TYPE dst, DATA_TYPE src2) { DATA_TYPE src1 = dst + src2; DATA_TYPE carries = SUB_COUT_VEC(src1, src2, dst); - return glue(compute_all_cout, SUFFIX)(dst, carries); + return glue(compute_aco_cout, SUFFIX)(carries); } static int glue(compute_c_sub, SUFFIX)(DATA_TYPE dst, DATA_TYPE src2) @@ -111,12 +106,12 @@ static int glue(compute_c_sub, SUFFIX)(DATA_TYPE dst, DATA_TYPE src2) return src1 < src2; } -static uint32_t glue(compute_all_sbb, SUFFIX)(DATA_TYPE dst, DATA_TYPE src2, +static uint32_t glue(compute_aco_sbb, SUFFIX)(DATA_TYPE dst, DATA_TYPE src2, DATA_TYPE src3) { DATA_TYPE src1 = dst + src2 + src3; DATA_TYPE carries = SUB_COUT_VEC(src1, src2, dst); - return glue(compute_all_cout, SUFFIX)(dst, carries); + return glue(compute_aco_cout, SUFFIX)(carries); } static int glue(compute_c_sbb, SUFFIX)(DATA_TYPE dst, DATA_TYPE src2, @@ -134,57 +129,35 @@ static int glue(compute_c_sbb, SUFFIX)(DATA_TYPE dst, DATA_TYPE src2, #endif } -static uint32_t glue(compute_all_logic, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) +static uint32_t glue(compute_aco_inc, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) { - uint32_t cf, pf, af, zf, sf, of; - - cf = 0; - pf = compute_pf(dst); - af = 0; - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; - of = 0; - return cf + pf + af + zf + sf + of; -} - -static uint32_t glue(compute_all_inc, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) -{ - uint32_t cf, pf, af, zf, sf, of; + uint32_t cf, af, of; cf = src1; - pf = compute_pf(dst); af = (dst ^ (dst - 1)) & CC_A; /* bits 0..3 are all clear */ - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; of = (dst == SIGN_MASK) * CC_O; - return cf + pf + af + zf + sf + of; + return cf + af + of; } -static uint32_t glue(compute_all_dec, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) +static uint32_t glue(compute_aco_dec, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) { - uint32_t cf, pf, af, zf, sf, of; + uint32_t cf, af, of; cf = src1; - pf = compute_pf(dst); af = (dst ^ (dst + 1)) & CC_A; /* bits 0..3 are all set */ - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; of = (dst == SIGN_MASK - 1) * CC_O; - return cf + pf + af + zf + sf + of; + return cf + af + of; } -static uint32_t glue(compute_all_shl, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) +static uint32_t glue(compute_aco_shl, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) { - uint32_t cf, pf, af, zf, sf, of; + uint32_t cf, af, of; cf = (src1 >> (DATA_BITS - 1)) & CC_C; - pf = compute_pf(dst); af = 0; /* undefined */ - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; /* of is defined iff shift count == 1 */ of = lshift(src1 ^ dst, 12 - DATA_BITS) & CC_O; - return cf + pf + af + zf + sf + of; + return cf + af + of; } static int glue(compute_c_shl, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) @@ -192,47 +165,25 @@ static int glue(compute_c_shl, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) return (src1 >> (DATA_BITS - 1)) & CC_C; } -static uint32_t glue(compute_all_sar, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) +static uint32_t glue(compute_aco_sar, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) { - uint32_t cf, pf, af, zf, sf, of; + uint32_t cf, af, of; cf = src1 & 1; - pf = compute_pf(dst); af = 0; /* undefined */ - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; /* of is defined iff shift count == 1 */ of = lshift(src1 ^ dst, 12 - DATA_BITS) & CC_O; - return cf + pf + af + zf + sf + of; + return cf + af + of; } -/* NOTE: we compute the flags like the P4. On olders CPUs, only OF and - CF are modified and it is slower to do that. Note as well that we - don't truncate SRC1 for computing carry to DATA_TYPE. */ -static uint32_t glue(compute_all_mul, SUFFIX)(DATA_TYPE dst, target_long src1) +static uint32_t glue(compute_aco_bmilg, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) { - uint32_t cf, pf, af, zf, sf, of; - - cf = (src1 != 0); - pf = compute_pf(dst); - af = 0; /* undefined */ - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; - of = cf * CC_O; - return cf + pf + af + zf + sf + of; -} - -static uint32_t glue(compute_all_bmilg, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) -{ - uint32_t cf, pf, af, zf, sf, of; + uint32_t cf, af, of; cf = (src1 == 0); - pf = 0; /* undefined */ af = 0; /* undefined */ - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; of = 0; - return cf + pf + af + zf + sf + of; + return cf + af + of; } static int glue(compute_c_bmilg, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) @@ -240,17 +191,14 @@ static int glue(compute_c_bmilg, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) return src1 == 0; } -static int glue(compute_all_blsi, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) +static int glue(compute_aco_blsi, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) { - uint32_t cf, pf, af, zf, sf, of; + uint32_t cf, af, of; cf = (src1 != 0); - pf = 0; /* undefined */ af = 0; /* undefined */ - zf = (dst == 0) * CC_Z; - sf = lshift(dst, 8 - DATA_BITS) & CC_S; of = 0; - return cf + pf + af + zf + sf + of; + return cf + af + of; } static int glue(compute_c_blsi, SUFFIX)(DATA_TYPE dst, DATA_TYPE src1) From 1dc162f5a3d6866d6888d5bce1b8f7d458e828cf Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 12 Dec 2025 12:40:15 +0100 Subject: [PATCH 132/152] rust: skip compilation if there are no system emulators Otherwise, the Rust crates require the corresponding C code (e.g. migration/ for rust/migration/) but the dependencies of that C code, for example the trace files, have not been built. Signed-off-by: Paolo Bonzini --- rust/meson.build | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rust/meson.build b/rust/meson.build index afbeeeb47a..bacb787910 100644 --- a/rust/meson.build +++ b/rust/meson.build @@ -1,3 +1,9 @@ +if not have_system + subdir_done() +else + message('Rust enabled but it is only used by system emulators.') +endif + subproject('anyhow-1-rs', required: true) subproject('bilge-0.2-rs', required: true) subproject('bilge-impl-0.2-rs', required: true) @@ -30,6 +36,7 @@ subdir('qemu-macros') subdir('common') subdir('bits') + subdir('util') subdir('bql') subdir('migration') From 1a69483616521db86befc7122be1f0d0a3e558b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Wed, 24 Sep 2025 16:04:20 +0400 Subject: [PATCH 133/152] gitlab-ci: enable rust for msys2-64bit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marc-André Lureau Link: https://lore.kernel.org/r/20250924120426.2158655-24-marcandre.lureau@redhat.com Signed-off-by: Paolo Bonzini --- .gitlab-ci.d/windows.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.d/windows.yml b/.gitlab-ci.d/windows.yml index 5dbdabfbec..5ef4d34d1e 100644 --- a/.gitlab-ci.d/windows.yml +++ b/.gitlab-ci.d/windows.yml @@ -17,7 +17,7 @@ msys2-64bit: # This feature doesn't (currently) work with PowerShell, it stops # the echo'ing of commands being run and doesn't show any timing FF_SCRIPT_SECTIONS: 0 - CONFIGURE_ARGS: --disable-system --enable-tools -Ddebug=false -Doptimization=0 + CONFIGURE_ARGS: --disable-system --enable-tools -Ddebug=false -Doptimization=0 --enable-rust # The Windows git is a bit older so override the default GIT_FETCH_EXTRA_FLAGS: --no-tags --prune --quiet artifacts: @@ -77,6 +77,7 @@ msys2-64bit: bison diffutils flex git grep make sed mingw-w64-x86_64-binutils + mingw-w64-x86_64-ca-certificates mingw-w64-x86_64-ccache mingw-w64-x86_64-curl-winssl mingw-w64-x86_64-gcc @@ -87,6 +88,9 @@ msys2-64bit: mingw-w64-x86_64-pixman mingw-w64-x86_64-pkgconf mingw-w64-x86_64-python + mingw-w64-x86_64-python-certifi + mingw-w64-x86_64-rust + mingw-w64-x86_64-rust-bindgen mingw-w64-x86_64-zstd" - .\msys64\usr\bin\bash -lc "pacman -Sc --noconfirm" - Write-Output "Running build at $(Get-Date -Format u)" @@ -98,6 +102,7 @@ msys2-64bit: - $env:CCACHE_MAXSIZE = "180M" - $env:CCACHE_DEPEND = 1 # cache misses are too expensive with preprocessor mode - $env:CC = "ccache gcc" + - $env:LIBCLANG_PATH = Join-Path -Path $PWD.Path -ChildPath "msys64/mingw64/bin" - mkdir build - cd build - ..\msys64\usr\bin\bash -lc "ccache --zero-stats" From 757a9c91a631f0e83695d39597213568d4664332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Mon, 22 Dec 2025 11:38:59 +0000 Subject: [PATCH 134/152] run: introduce a script for running devel commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Various aspects of the development workflow are complicated by the need to set env variables ahead of time, or use specific paths. Meson provides a 'devenv' command that can be used to launch a command with a number of appropriate project specific environment variables preset. By default it will modify $PATH to point to any build directory that contains a binary built by the project. This further augments that to replicate the venv 'activate' script: * Add $BUILD_DIR/pyvenv/bin to $PATH * Set VIRTUAL_ENV to $BUILD_DIR/pyvenv And then makes functional tests more easily executable * Add $SRC_DIR/tests/functional and $SRC_DIR/python to $PYTHONPATH To see the benefits of this consider this command: $ source ./build/pyvenv/bin/activate $ ./scripts/qmp/qmp-shell-wrap ./build/qemu-system-x86_64 which is now simplified to $ ./build/run ./scripts/qmp/qmp-shell-wrap qemu-system-x86_64 [args..] This avoids the need repeat './build' several times and avoids polluting the current terminal's environment and/or avoids errors from forgetting to source the venv settings. As another example running functional tests $ export PYTHONPATH=./python:./tests/functional $ export QEMU_TEST_QEMU_BINARY=./build/qemu-system-x86_64 $ build/pyvenv/bin/python3 ./tests/functional/x86_64/test_virtio_version.py which is now simplified to $ export QEMU_TEST_QEMU_BINARY=qemu-system-x86_64 $ ./build/run ./tests/functional/x86_64/test_virtio_version.py This usefulness of this will be further enhanced with the pending removal of the QEMU python APIs from git, as that will require the use of the python venv in even more scenarios that today. The 'run' script does not let 'meson devenv' directly launch the command to be run because it always requires $BUILD_DIR as the current working directory. It is desired that 'run' script always honour the current working directory of the terminal that invokes is. Thus the '--dump' flag is used to export the devenv variables into the 'run' script's shell. This takes the liberty to assign 'run.in' to the "Build system" section in the MAINTAINERS file, given that it leverages meson's 'devenv' feature. Signed-off-by: Daniel P. Berrangé Link: https://lore.kernel.org/r/20251222113859.182395-1-berrange@redhat.com Signed-off-by: Paolo Bonzini --- MAINTAINERS | 1 + docs/devel/build-system.rst | 12 ++++++++++++ docs/devel/testing/functional.rst | 15 +++++++-------- meson.build | 16 ++++++++++++++-- run.in | 4 ++++ 5 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 run.in diff --git a/MAINTAINERS b/MAINTAINERS index a03898ccb6..81f48f0709 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4479,6 +4479,7 @@ R: Philippe Mathieu-Daudé S: Maintained F: meson.build F: meson_options.txt +F: run.in F: scripts/check_sparse.py F: scripts/symlink-install-tree.py diff --git a/docs/devel/build-system.rst b/docs/devel/build-system.rst index 6204aa6a72..b9797a374c 100644 --- a/docs/devel/build-system.rst +++ b/docs/devel/build-system.rst @@ -515,6 +515,18 @@ generates ``Makefile`` from ``Makefile.in``. Built by configure: +``run`` + Used to run commands / scripts from the git checkout. Sets ``$PATH`` + to point to locally built binaries, and activates the python venv + before running the requested command. Pass the command to run as + args, for example:: + + $ ./build/run ./script/qmp/qmp-shell-wrap qemu-system-x86_64 + + will use the ``python3`` binary and site-packages from the local + venv to run ``qmp-shell-wrap`` and spawn the QEMU emulator from + the build directory. + ``config-host.mak`` When configure has determined the characteristics of the build host it will write the paths to various tools to this file, for use in ``Makefile`` diff --git a/docs/devel/testing/functional.rst b/docs/devel/testing/functional.rst index fdeaebaadc..1978f96eba 100644 --- a/docs/devel/testing/functional.rst +++ b/docs/devel/testing/functional.rst @@ -53,15 +53,14 @@ the following line will only run the tests for the x86_64 target: make check-functional-x86_64 To run a single test file without the meson test runner, you can also -execute the file directly by specifying two environment variables first, -the PYTHONPATH that has to include the python folder and the tests/functional -folder of the source tree, and QEMU_TEST_QEMU_BINARY that has to point -to the QEMU binary that should be used for the test. The current working -directory should be your build folder. For example:: +execute the file directly by specifying the name of the emulator target +binary as an env variable. - $ export PYTHONPATH=../python:../tests/functional - $ export QEMU_TEST_QEMU_BINARY=$PWD/qemu-system-x86_64 - $ pyvenv/bin/python3 ../tests/functional/test_file.py +Assuming the current working directory is the top level source checkout +and the build directory is './build':: + + $ export QEMU_TEST_QEMU_BINARY=qemu-system-x86_64 + $ ./build/run tests/functional/x86_64/test_virtio_version.py The test framework will automatically purge any scratch files created during the tests. If needing to debug a failed test, it is possible to keep these diff --git a/meson.build b/meson.build index 3790cf15f5..14b1160c15 100644 --- a/meson.build +++ b/meson.build @@ -4,8 +4,6 @@ project('qemu', ['c'], meson_version: '>=1.5.0', 'rust_std=2021', 'build.rust_std=2021'], version: files('VERSION')) -meson.add_devenv({ 'MESON_BUILD_ROOT' : meson.project_build_root() }) - add_test_setup('quick', exclude_suites: ['slow', 'thorough'], is_default: true, env: ['RUST_BACKTRACE=1']) add_test_setup('slow', exclude_suites: ['thorough'], @@ -3501,6 +3499,20 @@ endif config_host_h = configure_file(output: 'config-host.h', configuration: config_host_data) genh += config_host_h +devenv = environment() +devenv.set('MESON_BUILD_ROOT', meson.project_build_root()) +devenv.set('VIRTUAL_ENV', meson.project_build_root() / 'pyvenv') +devenv.prepend('PATH', meson.project_build_root() / 'pyvenv'/ 'bin') +devenv.prepend('PYTHONPATH', meson.current_source_dir() / 'tests' / 'functional') +devenv.prepend('PYTHONPATH', meson.current_source_dir() / 'python') +meson.add_devenv(devenv) + +run_config = configuration_data({'build_dir': meson.current_build_dir()}) +run = configure_file(input: 'run.in', + output: 'run', + configuration: run_config) +run_command('chmod', 'a+x', meson.current_build_dir() / 'run', check: true) + hxtool = find_program('scripts/hxtool') shaderinclude = find_program('scripts/shaderinclude.py') qapi_gen = find_program('scripts/qapi-gen.py') diff --git a/run.in b/run.in new file mode 100644 index 0000000000..1bb12272a7 --- /dev/null +++ b/run.in @@ -0,0 +1,4 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0-or-later + +exec @build_dir@/pyvenv/bin/meson devenv -C @build_dir@ -w "$PWD" "$@" From f8e830300c9edeaa142fe4cc244d63770a3be4f5 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:33 +0800 Subject: [PATCH 135/152] i386/cpu: Add support for MOVRS in CPUID enumeration MOVRS is a new set of instructions introduced in the Intel platform Diamond Rapids, to load instructions that carry a read-shared hint. Functionally, MOVRS family is equivalent to existing load instructions, but its read-shared hint indicates the source memory location is likely to become read-shared by multiple processors, i.e., read in the future by at least one other processor before it is written (assuming it is ever written in the future). It could optimize the behavior of the caches, especially shared caches, for this data for future reads by multiple processors. Additionally, MOVRS family also includes a software prefetch instruction, PREFETCHRST2, that carries the same read-shared hint. [*] MOVRS family is enumerated by CPUID single-bit (0x7.0x1.EAX[bit 31]). Add its enumeration support. [*]: Intel Architecture Instruction Set Extensions and Future Features (rev.059). Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-2-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 2 +- target/i386/cpu.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 67769200d0..817f78a0c2 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1266,7 +1266,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { NULL, "fred", "lkgs", "wrmsrns", NULL, "amx-fp16", NULL, "avx-ifma", NULL, NULL, "lam", NULL, - NULL, NULL, NULL, NULL, + NULL, NULL, NULL, "movrs", }, .cpuid = { .eax = 7, diff --git a/target/i386/cpu.h b/target/i386/cpu.h index c0bf51448e..be430a73bd 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1043,6 +1043,8 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); #define CPUID_7_1_EAX_AVX_IFMA (1U << 23) /* Linear Address Masking */ #define CPUID_7_1_EAX_LAM (1U << 26) +/* MOVRS Instructions */ +#define CPUID_7_1_EAX_MOVRS (1U << 31) /* The immediate form of MSR access instructions */ #define CPUID_7_1_ECX_MSR_IMM (1U << 5) From 956b8f0fc38a5ead18d9bf5ceba0861627738835 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:34 +0800 Subject: [PATCH 136/152] i386/cpu: Add CPUID.0x1E.0x1 subleaf for AMX instructions Intel Diamond Rapids adds new AMX instructions to support new formats and memory operations [*]. And it introduces the CPUID subleaf 0x1E.0x1 to centralize the discrete AMX feature bits within EAX. For new feature bits (CPUID 0x1E.0x1.EAX[bits 4,6-8]), it's straightforward to add their enurmeration support. In addition to the new features, CPUID 0x1E.0x1.EAX[bits 0-3] are mirrored positions of existing AMX feature bits distributing across the 0x7 leaves. It's not flexible to make these mirror bits have the same names as existing ones, because QEMU would try to set both original bit and mirror bit which would cause warning if host doesn't support 0x1E.0x1 subleaf. Thus, name these mirror bits with "*-mirror" suffix. [*]: Intel Architecture Instruction Set Extensions and Future Features (rev.059). Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-3-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 25 +++++++++++++++++++++++++ target/i386/cpu.h | 18 ++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 817f78a0c2..1246a9af4a 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1037,6 +1037,7 @@ void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1, #define TCG_SGX_12_1_EAX_FEATURES 0 #define TCG_24_0_EBX_FEATURES 0 #define TCG_29_0_EBX_FEATURES 0 +#define TCG_1E_1_EAX_FEATURES 0 #if defined CONFIG_USER_ONLY #define CPUID_8000_0008_EBX_KERNEL_FEATURES (CPUID_8000_0008_EBX_IBPB | \ @@ -1332,6 +1333,25 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, .tcg_features = TCG_7_2_EDX_FEATURES, }, + [FEAT_1E_1_EAX] = { + .type = CPUID_FEATURE_WORD, + .feat_names = { + "amx-int8-mirror", "amx-bf16-mirror", "amx-complex-mirror", "amx-fp16-mirror", + "amx-fp8", NULL, "amx-tf32", "amx-avx512", + "amx-movrs", NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + }, + .cpuid = { + .eax = 0x1e, + .needs_ecx = true, .ecx = 1, + .reg = R_EAX, + }, + .tcg_features = TCG_1E_1_EAX_FEATURES, + }, [FEAT_24_0_EBX] = { .type = CPUID_FEATURE_WORD, .feat_names = { @@ -8413,8 +8433,13 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, } if (count == 0) { + uint32_t unused; + x86_cpu_get_supported_cpuid(0x1E, 0, eax, &unused, + &unused, &unused); /* Highest numbered palette subleaf */ *ebx = INTEL_AMX_TMUL_MAX_K | (INTEL_AMX_TMUL_MAX_N << 8); + } else if (count == 1) { + *eax = env->features[FEAT_1E_1_EAX]; } break; } diff --git a/target/i386/cpu.h b/target/i386/cpu.h index be430a73bd..7b002962e2 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -711,6 +711,7 @@ typedef enum FeatureWord { FEAT_7_2_EDX, /* CPUID[EAX=7,ECX=2].EDX */ FEAT_24_0_EBX, /* CPUID[EAX=0x24,ECX=0].EBX */ FEAT_29_0_EBX, /* CPUID[EAX=0x29,ECX=0].EBX */ + FEAT_1E_1_EAX, /* CPUID[EAX=0x1E,ECX=1].EAX */ FEATURE_WORDS, } FeatureWord; @@ -1084,6 +1085,23 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); /* Packets which contain IP payload have LIP values */ #define CPUID_14_0_ECX_LIP (1U << 31) +/* AMX_INT8 instruction (mirror of CPUID_7_0_EDX_AMX_INT8) */ +#define CPUID_1E_1_EAX_AMX_INT8_MIRROR (1U << 0) +/* AMX_BF16 instruction (mirror of CPUID_7_0_EDX_AMX_BF16) */ +#define CPUID_1E_1_EAX_AMX_BF16_MIRROR (1U << 1) +/* AMX_COMPLEX instruction (mirror of CPUID_7_1_EDX_AMX_COMPLEX) */ +#define CPUID_1E_1_EAX_AMX_COMPLEX_MIRROR (1U << 2) +/* AMX_FP16 instruction (mirror of CPUID_7_1_EAX_AMX_FP16) */ +#define CPUID_1E_1_EAX_AMX_FP16_MIRROR (1U << 3) +/* AMX_FP8 instruction */ +#define CPUID_1E_1_EAX_AMX_FP8 (1U << 4) +/* AMX_TF32 instruction */ +#define CPUID_1E_1_EAX_AMX_TF32 (1U << 6) +/* AMX_AVX512 instruction */ +#define CPUID_1E_1_EAX_AMX_AVX512 (1U << 7) +/* AMX_MOVRS instruction */ +#define CPUID_1E_1_EAX_AMX_MOVRS (1U << 8) + /* AVX10 128-bit vector support is present */ #define CPUID_24_0_EBX_AVX10_128 (1U << 16) /* AVX10 256-bit vector support is present */ From 24a9bc108840812dfb94edc65962c1998120f77b Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:35 +0800 Subject: [PATCH 137/152] i386/cpu: Add support for AVX10_VNNI_INT in CPUID enumeration AVX10_VNNI_INT (0x24.0x1.ECX[bit 2]) is a discrete feature bit introduced on Intel Diamond Rapids, which enumerates the support for EVEX VPDP* instructions for INT8/INT16 [*]. Although Intel AVX10.2 has already included new VPDP* INT8/INT16 VNNI instructions, a bit - AVX10_VNNI_INT - is still be separated. Relevant new instructions can be checked by either CPUID AVX10.2 OR AVX10_VNNI_INT (e.g., VPDPBSSD). Support CPUID 0x24.0x1 subleaf with AVX10_VNNI_INT enumeration for Guest. [*]: Intel Advanced Vector Extensions 10.2 Architecture Specification (rev 5.0). Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-4-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 29 ++++++++++++++++++++++++++++- target/i386/cpu.h | 4 ++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 1246a9af4a..e0d75d170f 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1038,6 +1038,7 @@ void x86_cpu_vendor_words2str(char *dst, uint32_t vendor1, #define TCG_24_0_EBX_FEATURES 0 #define TCG_29_0_EBX_FEATURES 0 #define TCG_1E_1_EAX_FEATURES 0 +#define TCG_24_1_ECX_FEATURES 0 #if defined CONFIG_USER_ONLY #define CPUID_8000_0008_EBX_KERNEL_FEATURES (CPUID_8000_0008_EBX_IBPB | \ @@ -1385,6 +1386,18 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = { }, .tcg_features = TCG_29_0_EBX_FEATURES, }, + [FEAT_24_1_ECX] = { + .type = CPUID_FEATURE_WORD, + .feat_names = { + [2] = "avx10-vnni-int", + }, + .cpuid = { + .eax = 0x24, + .needs_ecx = true, .ecx = 1, + .reg = R_ECX, + }, + .tcg_features = TCG_24_1_ECX_FEATURES, + }, [FEAT_8000_0007_EDX] = { .type = CPUID_FEATURE_WORD, .feat_names = { @@ -2041,6 +2054,11 @@ static FeatureDep feature_dependencies[] = { .from = { FEAT_7_1_EDX, CPUID_7_1_EDX_APXF }, .to = { FEAT_29_0_EBX, ~0ull }, }, + + { + .from = { FEAT_7_1_EDX, CPUID_7_1_EDX_AVX10 }, + .to = { FEAT_24_1_ECX, ~0ull }, + }, }; typedef struct X86RegisterInfo32 { @@ -8457,8 +8475,17 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, *ebx = 0; *ecx = 0; *edx = 0; - if ((env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10) && count == 0) { + + if (!(env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10)) { + break; + } + if (count == 0) { + uint32_t unused; + x86_cpu_get_supported_cpuid(0x1E, 0, eax, &unused, + &unused, &unused); *ebx = env->features[FEAT_24_0_EBX] | env->avx10_version; + } else if (count == 1) { + *ecx = env->features[FEAT_24_1_ECX]; } break; } diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 7b002962e2..653f14e516 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -712,6 +712,7 @@ typedef enum FeatureWord { FEAT_24_0_EBX, /* CPUID[EAX=0x24,ECX=0].EBX */ FEAT_29_0_EBX, /* CPUID[EAX=0x29,ECX=0].EBX */ FEAT_1E_1_EAX, /* CPUID[EAX=0x1E,ECX=1].EAX */ + FEAT_24_1_ECX, /* CPUID[EAX=0x24,ECX=0].ECX */ FEATURE_WORDS, } FeatureWord; @@ -1113,6 +1114,9 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); CPUID_24_0_EBX_AVX10_256 | \ CPUID_24_0_EBX_AVX10_512) +/* AVX10_VNNI_INT instruction */ +#define CPUID_24_1_ECX_AVX10_VNNI_INT (1U << 2) + /* * New Conditional Instructions (NCIs), explicit New Data Destination (NDD) * controls, and explicit Flags Suppression (NF) controls for select sets of From 7c90fa647b5ef70ded2baa8da3c1c1d6cd9b9e28 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:36 +0800 Subject: [PATCH 138/152] i386/cpu: Support AVX10.2 with AVX10 feature models Intel AVX10 Version 2 (Intel AVX10.2) includes a suite of new instructions delivering new AI features and performance, accelerated media processing, expanded Web Assembly, and Cryptography support, along with enhancements to existing legacy instructions for completeness and efficiency, and it is enumerated as version 2 in CPUID 0x24.0x0.EBX[bits 0-7] [*]. Considerring "Intel CPUs which support Intel AVX10.2 will include an enumeration for AVX10_VNNI_INT (CPUID.24H.01H:ECX.AVX10_VNNI_INT[2])" [*] and EVEX VPDP* instructions for INT8/INT16 (AVX10_VNNI_INT) are detected by either AVX10.2 OR AVX10_VNNI_INT, AVX10_VNNI_INT is part of AVX10.2, so any Intel AVX10.2 implementation lacking the AVX10_VNNI_INT enumeration should be considered buggy hardware. Therefore, it's necessary to set AVX10_VNNI_INT enumeration for Guest when the user specifies AVX10 version 2. For this, introduce AVX10 models to explicitly define the feature bits included in different AVX10 versions. [*]: Intel Advanced Vector Extensions 10.2 Architecture Specification (rev 5.0). Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-5-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 120 +++++++++++++++++++++++++++++++++++++++++++--- target/i386/cpu.h | 2 + 2 files changed, 115 insertions(+), 7 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index e0d75d170f..9c81e4e1f5 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2382,6 +2382,40 @@ x86_cpu_def_get_versions(const X86CPUDefinition *def) return def->versions ?: default_version_list; } +/* CPUID 0x24.0x0 (EAX, EBX, ECX, EDX) and 0x24.0x1 (EAX, EBX, ECX, EDX) */ +#define AVX10_FEATURE_WORDS 8 + +typedef struct AVX10VersionDefinition { + const char *name; + /* AVX10 version */ + uint8_t version; + /* AVX10 (CPUID 0x24) maximum supported sub-leaf. */ + uint8_t max_subleaf; + FeatureMask *features; +} AVX10VersionDefinition; + +static const AVX10VersionDefinition builtin_avx10_defs[] = { + { + .name = "avx10.1", + .version = 1, + .max_subleaf = 0, + .features = (FeatureMask[]) { + { FEAT_7_1_EDX, CPUID_7_1_EDX_AVX10 }, + { FEAT_24_0_EBX, CPUID_24_0_EBX_AVX10_VL_MASK }, + { /* end of list */ } + } + }, + { + .name = "avx10.2", + .version = 2, + .max_subleaf = 1, + .features = (FeatureMask[]) { + { FEAT_24_1_ECX, CPUID_24_1_ECX_AVX10_VNNI_INT }, + { /* end of list */ } + } + }, +}; + static const CPUCaches epyc_cache_info = { .l1d_cache = &(CPUCacheInfo) { .type = DATA_CACHE, @@ -7242,6 +7276,65 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, const char *name, cpu->env.tsc_khz = cpu->env.user_tsc_khz = value / 1000; } +static void x86_cpuid_get_avx10_version(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + X86CPU *cpu = X86_CPU(obj); + uint8_t value; + + value = cpu->env.avx10_version; + visit_type_uint8(v, name, &value, errp); +} + +static bool x86_cpu_apply_avx10_features(X86CPU *cpu, uint8_t version, + Error **errp) +{ + const AVX10VersionDefinition *def; + CPUX86State *env = &cpu->env; + + if (!version) { + env->avx10_version = 0; + env->avx10_max_subleaf = 0; + return true; + } + + for (int i = 0; i < ARRAY_SIZE(builtin_avx10_defs); i++) { + FeatureMask *f; + + def = &builtin_avx10_defs[i]; + for (f = def->features; f && f->mask; f++) { + env->features[f->index] |= f->mask; + } + + if (def->version == version) { + env->avx10_version = version; + env->avx10_max_subleaf = def->max_subleaf; + break; + } + } + + if (def->version < version) { + error_setg(errp, "avx10-version can be at most %d", def->version); + return false; + } + return true; +} + +static void x86_cpuid_set_avx10_version(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + X86CPU *cpu = X86_CPU(obj); + uint8_t value; + + if (!visit_type_uint8(v, name, &value, errp)) { + return; + } + + x86_cpu_apply_avx10_features(cpu, value, errp); +} + /* Generic getter for "feature-words" and "filtered-features" properties */ static void x86_cpu_get_feature_words(Object *obj, Visitor *v, const char *name, void *opaque, @@ -7932,8 +8025,10 @@ static void x86_cpu_load_model(X86CPU *cpu, const X86CPUModel *model) */ object_property_set_str(OBJECT(cpu), "vendor", def->vendor, &error_abort); - object_property_set_uint(OBJECT(cpu), "avx10-version", def->avx10_version, - &error_abort); + if (def->avx10_version) { + object_property_set_uint(OBJECT(cpu), "avx10-version", + def->avx10_version, &error_abort); + } x86_cpu_apply_version_props(cpu, model); @@ -8480,9 +8575,7 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, break; } if (count == 0) { - uint32_t unused; - x86_cpu_get_supported_cpuid(0x1E, 0, eax, &unused, - &unused, &unused); + *eax = env->avx10_max_subleaf; *ebx = env->features[FEAT_24_0_EBX] | env->avx10_version; } else if (count == 1) { *ecx = env->features[FEAT_24_1_ECX]; @@ -9164,7 +9257,11 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp) if ((env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10) && !env->avx10_version) { uint32_t eax, ebx, ecx, edx; x86_cpu_get_supported_cpuid(0x24, 0, &eax, &ebx, &ecx, &edx); - env->avx10_version = ebx & 0xff; + + if (!object_property_set_uint(OBJECT(cpu), "avx10-version", + ebx & 0xff, errp)) { + return; + } } } @@ -9393,6 +9490,11 @@ static bool x86_cpu_filter_features(X86CPU *cpu, bool verbose) warn_report("%s: avx10.%d. Adjust to avx10.%d", prefix, env->avx10_version, version); } + /* + * Discrete feature bits have been checked and filtered based on + * host support. So it's safe to change version without reverting + * other feature bits. + */ env->avx10_version = version; have_filtered_features = true; } @@ -10229,7 +10331,6 @@ static const Property x86_cpu_properties[] = { DEFINE_PROP_UINT32("min-level", X86CPU, env.cpuid_min_level, 0), DEFINE_PROP_UINT32("min-xlevel", X86CPU, env.cpuid_min_xlevel, 0), DEFINE_PROP_UINT32("min-xlevel2", X86CPU, env.cpuid_min_xlevel2, 0), - DEFINE_PROP_UINT8("avx10-version", X86CPU, env.avx10_version, 0), DEFINE_PROP_UINT64("ucode-rev", X86CPU, ucode_rev, 0), DEFINE_PROP_BOOL("full-cpuid-auto-level", X86CPU, full_cpuid_auto_level, true), DEFINE_PROP_STRING("hv-vendor-id", X86CPU, hyperv_vendor), @@ -10371,6 +10472,11 @@ static void x86_cpu_common_class_init(ObjectClass *oc, const void *data) x86_cpu_get_unavailable_features, NULL, NULL, NULL); + object_class_property_add(oc, "avx10-version", "uint8", + x86_cpuid_get_avx10_version, + x86_cpuid_set_avx10_version, + NULL, NULL); + #if !defined(CONFIG_USER_ONLY) object_class_property_add(oc, "crash-information", "GuestPanicInformation", x86_cpu_get_crash_info_qom, NULL, NULL, NULL); diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 653f14e516..a4a8bc61a9 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -2211,6 +2211,8 @@ typedef struct CPUArchState { FeatureWordArray features; /* AVX10 version */ uint8_t avx10_version; + /* AVX10 (CPUID 0x24) maximum supported sub-leaf. */ + uint8_t avx10_max_subleaf; /* Features that were explicitly enabled/disabled */ FeatureWordArray user_features; uint32_t cpuid_model[12]; From 61181166d0a2637c6edb6332c94e9d2b015559e4 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:37 +0800 Subject: [PATCH 139/152] i386/cpu: Add a helper to get host avx10 version Factor out a helper to get host avx10 version, to reduce duplicate codes. Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-6-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 9c81e4e1f5..c460e3bec7 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -7757,6 +7757,13 @@ CpuDefinitionInfoList *qmp_query_cpu_definitions(Error **errp) #endif /* !CONFIG_USER_ONLY */ +static uint8_t x86_cpu_get_host_avx10_version(void) +{ + uint32_t eax, ebx, ecx, edx; + x86_cpu_get_supported_cpuid(0x24, 0, &eax, &ebx, &ecx, &edx); + return ebx & 0xff; +} + uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w) { FeatureWordInfo *wi = &feature_word_info[w]; @@ -9255,11 +9262,10 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp) } if ((env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10) && !env->avx10_version) { - uint32_t eax, ebx, ecx, edx; - x86_cpu_get_supported_cpuid(0x24, 0, &eax, &ebx, &ecx, &edx); + uint8_t version = x86_cpu_get_host_avx10_version(); if (!object_property_set_uint(OBJECT(cpu), "avx10-version", - ebx & 0xff, errp)) { + version, errp)) { return; } } @@ -9481,9 +9487,7 @@ static bool x86_cpu_filter_features(X86CPU *cpu, bool verbose) have_filtered_features = x86_cpu_have_filtered_features(cpu); if (env->features[FEAT_7_1_EDX] & CPUID_7_1_EDX_AVX10) { - x86_cpu_get_supported_cpuid(0x24, 0, - &eax_0, &ebx_0, &ecx_0, &edx_0); - uint8_t version = ebx_0 & 0xff; + uint8_t version = x86_cpu_get_host_avx10_version(); if (version < env->avx10_version) { if (prefix) { From 86efa9340fc5fa621239ab45d969540e66b17ead Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:38 +0800 Subject: [PATCH 140/152] i386/cpu: Allow unsupported avx10_version with x-force-features The "force_features" ("x-force-features" property) forces setting feature even if host doesn't support, but also reports the warning. Given its function, it's useful for debug, so even if the AVX10 version is unsupported by host, force to set this AVX10 version if x-force-features=on. Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-7-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index c460e3bec7..f62bd48d4b 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -9490,16 +9490,27 @@ static bool x86_cpu_filter_features(X86CPU *cpu, bool verbose) uint8_t version = x86_cpu_get_host_avx10_version(); if (version < env->avx10_version) { - if (prefix) { - warn_report("%s: avx10.%d. Adjust to avx10.%d", - prefix, env->avx10_version, version); - } /* - * Discrete feature bits have been checked and filtered based on - * host support. So it's safe to change version without reverting - * other feature bits. + * With x-force-features=on, CPUID_7_1_EDX_AVX10 will not be masked + * off, so there's no need to zero avx10 version. */ - env->avx10_version = version; + if (!cpu->force_features) { + if (prefix) { + warn_report("%s: avx10.%d. Adjust to avx10.%d", + prefix, env->avx10_version, version); + } + /* + * Discrete feature bits have been checked and filtered based + * on host support. So it's safe to change version without + * reverting other feature bits. + */ + env->avx10_version = version; + } else { + if (prefix) { + warn_report("%s: avx10.%d.", + prefix, env->avx10_version); + } + } have_filtered_features = true; } } else if (env->avx10_version) { From 87ae7ab84ffffde98b74918f6738b647fdb858af Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:39 +0800 Subject: [PATCH 141/152] i386/cpu: Allow cache to be shared at thread level In CPUID 0x4 leaf, it's possible to make the cache privated at thread level when there's no HT within the core. In this case, while cache per thread and cache per core are essentially identical, their topology information differs in CPUID 0x4. Diamond Rapids assigns the L1 i/d cache at the thread level. To allow accurate emulation of DMR cache topology, remove the cache-per-thread restriction in max_thread_ids_for_cache(), which enables CPUID 0x4 to support cache per thread topology. Given that after adding thread-level support, the topology offset information required by max_thread_ids_for_cache() can be sufficiently provided by apicid_offset_by_topo_level(), so it's straightforward to re-implement max_thread_ids_for_cache() based on apicid_offset_by_topo_level() to reduce redundant duplicate codes. Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-8-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 65 +++++++++++++++-------------------------------- 1 file changed, 21 insertions(+), 44 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index f62bd48d4b..4ed7f4f1c9 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -304,33 +304,30 @@ static void encode_cache_cpuid2(X86CPU *cpu, ((t) == UNIFIED_CACHE) ? CACHE_TYPE_UNIFIED : \ 0 /* Invalid value */) +static uint32_t apicid_offset_by_topo_level(X86CPUTopoInfo *topo_info, + enum CpuTopologyLevel topo_level) +{ + switch (topo_level) { + case CPU_TOPOLOGY_LEVEL_THREAD: + return 0; + case CPU_TOPOLOGY_LEVEL_CORE: + return apicid_core_offset(topo_info); + case CPU_TOPOLOGY_LEVEL_MODULE: + return apicid_module_offset(topo_info); + case CPU_TOPOLOGY_LEVEL_DIE: + return apicid_die_offset(topo_info); + case CPU_TOPOLOGY_LEVEL_SOCKET: + return apicid_pkg_offset(topo_info); + default: + g_assert_not_reached(); + } + return 0; +} + static uint32_t max_thread_ids_for_cache(X86CPUTopoInfo *topo_info, enum CpuTopologyLevel share_level) { - uint32_t num_ids = 0; - - switch (share_level) { - case CPU_TOPOLOGY_LEVEL_CORE: - num_ids = 1 << apicid_core_offset(topo_info); - break; - case CPU_TOPOLOGY_LEVEL_MODULE: - num_ids = 1 << apicid_module_offset(topo_info); - break; - case CPU_TOPOLOGY_LEVEL_DIE: - num_ids = 1 << apicid_die_offset(topo_info); - break; - case CPU_TOPOLOGY_LEVEL_SOCKET: - num_ids = 1 << apicid_pkg_offset(topo_info); - break; - default: - /* - * Currently there is no use case for THREAD, so use - * assert directly to facilitate debugging. - */ - g_assert_not_reached(); - } - - return num_ids - 1; + return (1 << apicid_offset_by_topo_level(topo_info, share_level)) - 1; } static uint32_t max_core_ids_in_package(X86CPUTopoInfo *topo_info) @@ -398,26 +395,6 @@ static uint32_t num_threads_by_topo_level(X86CPUTopoInfo *topo_info, return 0; } -static uint32_t apicid_offset_by_topo_level(X86CPUTopoInfo *topo_info, - enum CpuTopologyLevel topo_level) -{ - switch (topo_level) { - case CPU_TOPOLOGY_LEVEL_THREAD: - return 0; - case CPU_TOPOLOGY_LEVEL_CORE: - return apicid_core_offset(topo_info); - case CPU_TOPOLOGY_LEVEL_MODULE: - return apicid_module_offset(topo_info); - case CPU_TOPOLOGY_LEVEL_DIE: - return apicid_die_offset(topo_info); - case CPU_TOPOLOGY_LEVEL_SOCKET: - return apicid_pkg_offset(topo_info); - default: - g_assert_not_reached(); - } - return 0; -} - static uint32_t cpuid1f_topo_type(enum CpuTopologyLevel topo_level) { switch (topo_level) { From 3d497826c3c16a19ba52c00dff7d71a1cda07cbc Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:40 +0800 Subject: [PATCH 142/152] i386/cpu: Add an option in X86CPUDefinition to control CPUID 0x1f Many Intel CPUs enable CPUID 0x1f by default to encode CPU topology information. Add the "cpuid_0x1f" option to X86CPUDefinition to allow named CPU models to configure CPUID 0x1f from the start, thereby forcing 0x1f to be present for guest. With this option, there's no need to explicitly add v1 model to an unversioned CPU model for explicitly enabling the x-force-cpuid-0x1f property. Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-9-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 4ed7f4f1c9..49a8f30feb 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2313,6 +2313,12 @@ typedef struct X86CPUDefinition { int model; int stepping; uint8_t avx10_version; + /* + * Whether to present CPUID 0x1f by default. + * If true, encode CPU topology in 0x1f leaf even if there's no + * extended topology levels. + */ + bool cpuid_0x1f; FeatureWordArray features; const char *model_id; const CPUCaches *const cache_info; @@ -8014,6 +8020,10 @@ static void x86_cpu_load_model(X86CPU *cpu, const X86CPUModel *model) def->avx10_version, &error_abort); } + if (def->cpuid_0x1f) { + object_property_set_bool(OBJECT(cpu), "x-force-cpuid-0x1f", + def->cpuid_0x1f, &error_abort); + } x86_cpu_apply_version_props(cpu, model); /* From 2580c66147721d7724613bf240ead8ca95072996 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:41 +0800 Subject: [PATCH 143/152] i386/cpu: Define dependency for VMX_VM_ENTRY_LOAD_IA32_FRED VMX_VM_ENTRY_LOAD_IA32_FRED depends on FRED. Define this dependency relationship. Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-10-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 4 ++++ target/i386/cpu.h | 1 + 2 files changed, 5 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 49a8f30feb..3440a70852 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2036,6 +2036,10 @@ static FeatureDep feature_dependencies[] = { .from = { FEAT_7_1_EDX, CPUID_7_1_EDX_AVX10 }, .to = { FEAT_24_1_ECX, ~0ull }, }, + { + .from = { FEAT_7_1_EAX, CPUID_7_1_EAX_FRED }, + .to = { FEAT_VMX_ENTRY_CTLS, VMX_VM_ENTRY_LOAD_IA32_FRED }, + }, }; typedef struct X86RegisterInfo32 { diff --git a/target/i386/cpu.h b/target/i386/cpu.h index a4a8bc61a9..41ea04099b 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1439,6 +1439,7 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w); #define VMX_VM_ENTRY_LOAD_IA32_RTIT_CTL 0x00040000 #define VMX_VM_ENTRY_LOAD_CET 0x00100000 #define VMX_VM_ENTRY_LOAD_IA32_PKRS 0x00400000 +#define VMX_VM_ENTRY_LOAD_IA32_FRED 0x00800000 /* Supported Hyper-V Enlightenments */ #define HYPERV_FEAT_RELAXED 0 From 7a6dd8bde159b90a07442ec0fe43b4c0e92c2bf1 Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:42 +0800 Subject: [PATCH 144/152] i386/cpu: Add CPU model for Diamond Rapids According to table 1-2 in Intel Architecture Instruction Set Extensions and Future Features (rev 059), Diamond Rapids has the following new features which have already been supported for guest: * SM4 (EVEX) * Intel Advanced Vector Extensions 10 Version 2 (Intel AVX10.2) * MOVRS and the PREFETCHRST2 instruction * AMX-MOVRS, AMX-AVX512, AMX-FP8, AMX-TF32 * Intel Advanced Performance Extensions And FRED - Flexible Return and Event Delivery (FRED) and the LKGS instruction (introduced since Clearwater Forest & Diamond Rapids) - is included in Diamond Rapids CPU model. In addition, the following features are added into Diamond Rapids CPU model: * CET: Control-flow Enforcement Technology (introduced since Sapphire Rapids & Sierra Forest). Tested-by: Xudong Hao Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-11-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- target/i386/cpu.c | 192 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 3440a70852..37803cd724 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5443,6 +5443,198 @@ static const X86CPUDefinition builtin_x86_defs[] = { { /* end of list */ }, }, }, + { + .name = "DiamondRapids", + .level = 0x29, + .vendor = CPUID_VENDOR_INTEL, + .family = 0x13, /* family: 0xf, extended famil: 0x4 */ + .model = 0x1, /* model: 0x1, extended model: 0x0 */ + .stepping = 0, + .avx10_version = 2, /* avx10.2 */ + .cpuid_0x1f = true, + /* + * Please keep the ascending order so that we can have a clear view of + * bit position of each feature. + * + * Missing: CPUID_EXT_DTES64, CPUID_EXT_MONITOR, CPUID_EXT_DSCPL, + * CPUID_EXT_VMX, CPUID_EXT_SMX, CPUID_EXT_EST, CPUID_EXT_TM2, + * CPUID_EXT_XTPR, CPUID_EXT_PDCM, CPUID_EXT_DCA, CPUID_EXT_OSXSAVE + */ + .features[FEAT_1_ECX] = + CPUID_EXT_SSE3 | CPUID_EXT_PCLMULQDQ | CPUID_EXT_SSSE3 | + CPUID_EXT_FMA | CPUID_EXT_CX16 | CPUID_EXT_PCID | CPUID_EXT_SSE41 | + CPUID_EXT_SSE42 | CPUID_EXT_X2APIC | CPUID_EXT_MOVBE | + CPUID_EXT_POPCNT | CPUID_EXT_TSC_DEADLINE_TIMER | CPUID_EXT_AES | + CPUID_EXT_XSAVE | CPUID_EXT_AVX | CPUID_EXT_F16C | CPUID_EXT_RDRAND, + /* Missing: CPUID_DTS, CPUID_ACPI, CPUID_HT, CPUID_TM, CPUID_PBE */ + .features[FEAT_1_EDX] = + CPUID_FP87 | CPUID_VME | CPUID_DE | CPUID_PSE | CPUID_TSC | + CPUID_MSR | CPUID_PAE | CPUID_MCE | CPUID_CX8 | CPUID_APIC | + CPUID_SEP | CPUID_MTRR | CPUID_PGE | CPUID_MCA | CPUID_CMOV | + CPUID_PAT | CPUID_PSE36 | CPUID_CLFLUSH | CPUID_MMX | CPUID_FXSR | + CPUID_SSE | CPUID_SSE2 | CPUID_SS, + .features[FEAT_6_EAX] = CPUID_6_EAX_ARAT, + /* + * Missing: CPUID_7_0_EBX_SGX, "cqm" Cache QoS Monitoring, + * "rdt_a" Resource Director Technology Allocation, + * CPUID_7_0_EBX_INTEL_PT, + */ + .features[FEAT_7_0_EBX] = + CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_TSC_ADJUST | + CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_HLE | CPUID_7_0_EBX_AVX2 | + CPUID_7_0_EBX_FDP_EXCPTN_ONLY | CPUID_7_0_EBX_SMEP | + CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS | CPUID_7_0_EBX_INVPCID | + CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_ZERO_FCS_FDS | + CPUID_7_0_EBX_AVX512F | CPUID_7_0_EBX_AVX512DQ | + CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX | CPUID_7_0_EBX_SMAP | + CPUID_7_0_EBX_AVX512IFMA | CPUID_7_0_EBX_CLFLUSHOPT | + CPUID_7_0_EBX_CLWB | CPUID_7_0_EBX_AVX512CD | + CPUID_7_0_EBX_SHA_NI | CPUID_7_0_EBX_AVX512BW | + CPUID_7_0_EBX_AVX512VL, + /* + * Missing: CPUID_7_0_ECX_OSPKE, CPUID_7_0_ECX_WAITPKG, TME, ENQCMD, + * CPUID_7_0_ECX_SGX_LC, CPUID_7_0_ECX_PKS + */ + .features[FEAT_7_0_ECX] = + CPUID_7_0_ECX_AVX512_VBMI | CPUID_7_0_ECX_UMIP | + CPUID_7_0_ECX_PKU | CPUID_7_0_ECX_AVX512_VBMI2 | + CPUID_7_0_ECX_CET_SHSTK | CPUID_7_0_ECX_GFNI | CPUID_7_0_ECX_VAES | + CPUID_7_0_ECX_VPCLMULQDQ | CPUID_7_0_ECX_AVX512VNNI | + CPUID_7_0_ECX_AVX512BITALG | CPUID_7_0_ECX_AVX512_VPOPCNTDQ | + CPUID_7_0_ECX_LA57 | CPUID_7_0_ECX_RDPID | + CPUID_7_0_ECX_BUS_LOCK_DETECT | CPUID_7_0_ECX_CLDEMOTE | + CPUID_7_0_ECX_MOVDIRI | CPUID_7_0_ECX_MOVDIR64B, + /* + * Missing: SGX-KEYS, UINTR, PCONFIG, ARCH LBR, + * CPUID_7_0_EDX_CORE_CAPABILITY + */ + .features[FEAT_7_0_EDX] = + CPUID_7_0_EDX_FSRM | CPUID_7_0_EDX_MD_CLEAR | + CPUID_7_0_EDX_SERIALIZE | CPUID_7_0_EDX_TSX_LDTRK | + CPUID_7_0_EDX_CET_IBT | CPUID_7_0_EDX_AMX_BF16 | + CPUID_7_0_EDX_AVX512_FP16 | CPUID_7_0_EDX_AMX_TILE | + CPUID_7_0_EDX_AMX_INT8 | CPUID_7_0_EDX_SPEC_CTRL | + CPUID_7_0_EDX_STIBP | CPUID_7_0_EDX_FLUSH_L1D | + CPUID_7_0_EDX_ARCH_CAPABILITIES | CPUID_7_0_EDX_SPEC_CTRL_SSBD, + /* Missing: CPUID_7_1_EAX_LASS, ArchPerfmonExt (0x23 leaf), MSRLIST */ + .features[FEAT_7_1_EAX] = + CPUID_7_1_EAX_AVX_VNNI | CPUID_7_1_EAX_AVX512_BF16 | + CPUID_7_1_EAX_CMPCCXADD | CPUID_7_1_EAX_FZRM | + CPUID_7_1_EAX_FSRS | CPUID_7_1_EAX_FSRC | CPUID_7_1_EAX_FRED | + CPUID_7_1_EAX_LKGS | CPUID_7_1_EAX_WRMSRNS | + CPUID_7_1_EAX_AMX_FP16 | CPUID_7_1_EAX_AVX_IFMA | + CPUID_7_1_EAX_LAM | CPUID_7_1_EAX_MOVRS, + /* Missing: CET_SSS */ + .features[FEAT_7_1_EDX] = + CPUID_7_1_EDX_AVX_VNNI_INT8 | CPUID_7_1_EDX_AVX_NE_CONVERT | + CPUID_7_1_EDX_AMX_COMPLEX | CPUID_7_1_EDX_PREFETCHITI | + CPUID_7_1_EDX_AVX10 | CPUID_7_1_EDX_APXF, + /* Missing: UC-lock disable */ + .features[FEAT_7_2_EDX] = + CPUID_7_2_EDX_PSFD | CPUID_7_2_EDX_IPRED_CTRL | + CPUID_7_2_EDX_RRSBA_CTRL | CPUID_7_2_EDX_DDPD_U | + CPUID_7_2_EDX_BHI_CTRL | CPUID_7_2_EDX_MCDT_NO, + .features[FEAT_XSAVE] = + CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC | + CPUID_XSAVE_XGETBV1 | CPUID_XSAVE_XSAVES | CPUID_D_1_EAX_XFD, + .features[FEAT_1E_1_EAX] = + CPUID_1E_1_EAX_AMX_INT8_MIRROR | CPUID_1E_1_EAX_AMX_BF16_MIRROR | + CPUID_1E_1_EAX_AMX_COMPLEX_MIRROR | + CPUID_1E_1_EAX_AMX_FP16_MIRROR | CPUID_1E_1_EAX_AMX_FP8 | + CPUID_1E_1_EAX_AMX_TF32 | CPUID_1E_1_EAX_AMX_AVX512 | + CPUID_1E_1_EAX_AMX_MOVRS, + .features[FEAT_29_0_EBX] = CPUID_29_0_EBX_APX_NCI_NDD_NF, + /* + * Though this bit will be set by avx_version=2, it's better to + * explicitly enumerate this feature here. + */ + .features[FEAT_24_1_ECX] = CPUID_24_1_ECX_AVX10_VNNI_INT, + .features[FEAT_8000_0001_ECX] = + CPUID_EXT3_LAHF_LM | CPUID_EXT3_ABM | CPUID_EXT3_3DNOWPREFETCH, + .features[FEAT_8000_0001_EDX] = + CPUID_EXT2_SYSCALL | CPUID_EXT2_NX | CPUID_EXT2_PDPE1GB | + CPUID_EXT2_RDTSCP | CPUID_EXT2_LM, + .features[FEAT_8000_0008_EBX] = CPUID_8000_0008_EBX_WBNOINVD, + /* + * Missing: ARCH_CAP_RRSBA (KVM bit 19), ARCH_CAP_RFDS_CLEAR (KVM bit + * 28), MCU_CONTROL (bit 9), MISC_PACKAGE_CTLS (bit 10), + * ENERGY_FILTERING_CTL (bit 11), DOITM (bit 12), MCU_ENUMERATION (bit + * 16), RRSBA (bit 19), XAPIC_DISABLE_STATUS (bit 21), + * OVERCLOCKING_STATUS (bit 23). + */ + .features[FEAT_ARCH_CAPABILITIES] = + MSR_ARCH_CAP_RDCL_NO | MSR_ARCH_CAP_IBRS_ALL | + MSR_ARCH_CAP_SKIP_L1DFL_VMENTRY | MSR_ARCH_CAP_MDS_NO | + MSR_ARCH_CAP_PSCHANGE_MC_NO | MSR_ARCH_CAP_TAA_NO | + MSR_ARCH_CAP_SBDR_SSDP_NO | MSR_ARCH_CAP_FBSDP_NO | + MSR_ARCH_CAP_PSDP_NO | MSR_ARCH_CAP_BHI_NO | + MSR_ARCH_CAP_PBRSB_NO | MSR_ARCH_CAP_GDS_NO | + MSR_ARCH_CAP_RFDS_NO, + .features[FEAT_VMX_BASIC] = + MSR_VMX_BASIC_INS_OUTS | MSR_VMX_BASIC_TRUE_CTLS | + MSR_VMX_BASIC_NESTED_EXCEPTION, + .features[FEAT_VMX_ENTRY_CTLS] = + VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS | VMX_VM_ENTRY_IA32E_MODE | + VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | + VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER | + VMX_VM_ENTRY_LOAD_CET | VMX_VM_ENTRY_LOAD_IA32_FRED, + .features[FEAT_VMX_EPT_VPID_CAPS] = + MSR_VMX_EPT_EXECONLY | + MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_PAGE_WALK_LENGTH_5 | + MSR_VMX_EPT_WB | MSR_VMX_EPT_2MB | MSR_VMX_EPT_1GB | + MSR_VMX_EPT_INVEPT | MSR_VMX_EPT_AD_BITS | + MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | MSR_VMX_EPT_INVEPT_ALL_CONTEXT | + MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR | + MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | + MSR_VMX_EPT_INVVPID_ALL_CONTEXT | + MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS, + .features[FEAT_VMX_EXIT_CTLS] = + VMX_VM_EXIT_SAVE_DEBUG_CONTROLS | VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE, + VMX_VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL | + VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_IA32_PAT | + VMX_VM_EXIT_LOAD_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER | + VMX_VM_EXIT_LOAD_IA32_EFER | VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER | + VMX_VM_EXIT_SAVE_CET | VMX_VM_EXIT_ACTIVATE_SECONDARY_CONTROLS, + .features[FEAT_VMX_MISC] = + MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_ACTIVITY_HLT | + MSR_VMX_MISC_ACTIVITY_SHUTDOWN | MSR_VMX_MISC_ACTIVITY_WAIT_SIPI | + MSR_VMX_MISC_VMWRITE_VMEXIT, + .features[FEAT_VMX_PINBASED_CTLS] = + VMX_PIN_BASED_EXT_INTR_MASK | VMX_PIN_BASED_NMI_EXITING | + VMX_PIN_BASED_VIRTUAL_NMIS | VMX_PIN_BASED_VMX_PREEMPTION_TIMER | + VMX_PIN_BASED_POSTED_INTR, + .features[FEAT_VMX_PROCBASED_CTLS] = + VMX_CPU_BASED_VIRTUAL_INTR_PENDING | + VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING | + VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING | + VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING | + VMX_CPU_BASED_CR3_LOAD_EXITING | VMX_CPU_BASED_CR3_STORE_EXITING | + VMX_CPU_BASED_CR8_LOAD_EXITING | VMX_CPU_BASED_CR8_STORE_EXITING | + VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_VIRTUAL_NMI_PENDING | + VMX_CPU_BASED_MOV_DR_EXITING | VMX_CPU_BASED_UNCOND_IO_EXITING | + VMX_CPU_BASED_USE_IO_BITMAPS | VMX_CPU_BASED_MONITOR_TRAP_FLAG | + VMX_CPU_BASED_USE_MSR_BITMAPS | VMX_CPU_BASED_MONITOR_EXITING | + VMX_CPU_BASED_PAUSE_EXITING | + VMX_CPU_BASED_ACTIVATE_SECONDARY_CONTROLS, + .features[FEAT_VMX_SECONDARY_CTLS] = + VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES | + VMX_SECONDARY_EXEC_ENABLE_EPT | VMX_SECONDARY_EXEC_DESC | + VMX_SECONDARY_EXEC_RDTSCP | + VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE | + VMX_SECONDARY_EXEC_ENABLE_VPID | VMX_SECONDARY_EXEC_WBINVD_EXITING | + VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST | + VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT | + VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | + VMX_SECONDARY_EXEC_RDRAND_EXITING | + VMX_SECONDARY_EXEC_ENABLE_INVPCID | + VMX_SECONDARY_EXEC_ENABLE_VMFUNC | VMX_SECONDARY_EXEC_SHADOW_VMCS | + VMX_SECONDARY_EXEC_RDSEED_EXITING | VMX_SECONDARY_EXEC_ENABLE_PML | + VMX_SECONDARY_EXEC_XSAVES | VMX_SECONDARY_EXEC_TSC_SCALING | + VMX_SECONDARY_EXEC_ENABLE_USER_WAIT_PAUSE, + .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING, + .xlevel = 0x80000008, + .model_id = "Intel Xeon Processor (DiamondRapids)", + }, { .name = "SierraForest", .level = 0x23, From b3104e721b8f163a005e8420faff8ac9f2fc36ca Mon Sep 17 00:00:00 2001 From: Zhao Liu Date: Mon, 15 Dec 2025 15:37:43 +0800 Subject: [PATCH 145/152] dosc/cpu-models-x86: Add documentation for DiamondRapids Current DiamondRapids hasn't supported cache model. Instead, document its special CPU & cache topology to allow user emulate with "-smp" & "-machine smp-cache". Reviewed-by: Yu Chen Signed-off-by: Zhao Liu Link: https://lore.kernel.org/r/20251215073743.4055227-12-zhao1.liu@intel.com Signed-off-by: Paolo Bonzini --- docs/system/cpu-models-x86.rst.inc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/system/cpu-models-x86.rst.inc b/docs/system/cpu-models-x86.rst.inc index 6a770ca835..3605d05a8c 100644 --- a/docs/system/cpu-models-x86.rst.inc +++ b/docs/system/cpu-models-x86.rst.inc @@ -71,6 +71,26 @@ mixture of host CPU models between machines, if live migration compatibility is required, use the newest CPU model that is compatible across all desired hosts. +``DiamondRapids`` + Intel Xeon Processor. + + Diamond Rapids product has a topology which differs from previous Xeon + products. It does not support SMT, but instead features a dual core + module (DCM) architecture. It also has core building blocks (CBB - die + level in CPU topology). The cache hierarchy is organized as follows: + L1 i/d cache is per thread, L2 cache is per DCM, and L3 cache is per + CBB. This cache topology can be emulated for DiamondRapids CPU model + using the smp-cache configuration as shown below: + + Example: + + :: + + -machine smp-cache.0.cache=l1d,smp-cache.0.topology=thread,\ + smp-cache.1.cache=l1i,smp-cache.1.topology=thread,\ + smp-cache.2.cache=l2,smp-cache.2.topology=module,\ + smp-cache.3.cache=l3,smp-cache.3.topology=die + ``ClearwaterForest`` Intel Xeon Processor (ClearwaterForest, 2025) From e77508292c8374ce5ce792e7a2fe9c2f3f6ea0ae Mon Sep 17 00:00:00 2001 From: Marc Morcos Date: Sat, 13 Dec 2025 00:14:41 +0000 Subject: [PATCH 146/152] thread-pool: Fix thread race Fix a data race occurred between `worker_thread()` writing and `thread_pool_completion_bh()` reading shared data in `util/thread-pool.c`. Signed-off-by: Marc Morcos Link: https://lore.kernel.org/r/20251213001443.2041258-3-marcmorcos@google.com [Use qatomic_set for writes to ret->ret. - Paolo] Signed-off-by: Paolo Bonzini --- util/thread-pool.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/util/thread-pool.c b/util/thread-pool.c index d2ead6b728..8f8cb38d5c 100644 --- a/util/thread-pool.c +++ b/util/thread-pool.c @@ -18,6 +18,7 @@ #include "qemu/defer-call.h" #include "qemu/queue.h" #include "qemu/thread.h" +#include "qemu/atomic.h" #include "qemu/coroutine.h" #include "trace.h" #include "block/thread-pool.h" @@ -39,9 +40,13 @@ struct ThreadPoolElementAio { ThreadPoolFunc *func; void *arg; - /* Moving state out of THREAD_QUEUED is protected by lock. After - * that, only the worker thread can write to it. Reads and writes - * of state and ret are ordered with memory barriers. + /* + * Accessed with atomics. Moving state out of THREAD_QUEUED is + * protected by pool->lock and only the worker thread can move + * the state from THREAD_ACTIVE to THREAD_DONE. + * + * When state is THREAD_DONE, ret must have been written already. + * Use acquire/release ordering when reading/writing ret as well. */ enum ThreadState state; int ret; @@ -105,15 +110,14 @@ static void *worker_thread(void *opaque) req = QTAILQ_FIRST(&pool->request_list); QTAILQ_REMOVE(&pool->request_list, req, reqs); - req->state = THREAD_ACTIVE; + qatomic_set(&req->state, THREAD_ACTIVE); qemu_mutex_unlock(&pool->lock); ret = req->func(req->arg); - req->ret = ret; - /* Write ret before state. */ - smp_wmb(); - req->state = THREAD_DONE; + qatomic_set(&req->ret, ret); + /* _release to write ret before state. */ + qatomic_store_release(&req->state, THREAD_DONE); qemu_bh_schedule(pool->completion_bh); qemu_mutex_lock(&pool->lock); @@ -180,7 +184,8 @@ static void thread_pool_completion_bh(void *opaque) restart: QLIST_FOREACH_SAFE(elem, &pool->head, all, next) { - if (elem->state != THREAD_DONE) { + /* _acquire to read state before ret. */ + if (qatomic_load_acquire(&elem->state) != THREAD_DONE) { continue; } @@ -189,9 +194,6 @@ restart: QLIST_REMOVE(elem, all); if (elem->common.cb) { - /* Read state before ret. */ - smp_rmb(); - /* Schedule ourselves in case elem->common.cb() calls aio_poll() to * wait for another request that completed at the same time. */ @@ -223,12 +225,12 @@ static void thread_pool_cancel(BlockAIOCB *acb) trace_thread_pool_cancel_aio(elem, elem->common.opaque); QEMU_LOCK_GUARD(&pool->lock); - if (elem->state == THREAD_QUEUED) { + if (qatomic_read(&elem->state) == THREAD_QUEUED) { QTAILQ_REMOVE(&pool->request_list, elem, reqs); qemu_bh_schedule(pool->completion_bh); - elem->state = THREAD_DONE; - elem->ret = -ECANCELED; + qatomic_set(&elem->ret, -ECANCELED); + qatomic_store_release(&elem->state, THREAD_DONE); } } From f3375b3945609cd5b14259ad7d7175b33f853d61 Mon Sep 17 00:00:00 2001 From: Marc Morcos Date: Sat, 13 Dec 2025 00:14:42 +0000 Subject: [PATCH 147/152] qmp: Fix thread race This fixes a thread race involving the monitor in monitor_qmp_event and monitor_qapi_event_emit . Signed-off-by: Marc Morcos Link: https://lore.kernel.org/r/20251213001443.2041258-4-marcmorcos@google.com [Use QEMU_LOCK_GUARD and "continue". - Paolo] Signed-off-by: Paolo Bonzini --- monitor/monitor.c | 8 ++++++-- monitor/qmp.c | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/monitor/monitor.c b/monitor/monitor.c index c5a5d30877..1273eb7260 100644 --- a/monitor/monitor.c +++ b/monitor/monitor.c @@ -346,9 +346,13 @@ static void monitor_qapi_event_emit(QAPIEvent event, QDict *qdict) } qmp_mon = container_of(mon, MonitorQMP, common); - if (qmp_mon->commands != &qmp_cap_negotiation_commands) { - qmp_send_response(qmp_mon, qdict); + { + QEMU_LOCK_GUARD(&mon->mon_lock); + if (qmp_mon->commands == &qmp_cap_negotiation_commands) { + continue; + } } + qmp_send_response(qmp_mon, qdict); } } diff --git a/monitor/qmp.c b/monitor/qmp.c index cb99a12d94..e1419a9efa 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -462,8 +462,10 @@ static void monitor_qmp_event(void *opaque, QEMUChrEvent event) switch (event) { case CHR_EVENT_OPENED: - mon->commands = &qmp_cap_negotiation_commands; - monitor_qmp_caps_reset(mon); + WITH_QEMU_LOCK_GUARD(&mon->common.mon_lock) { + mon->commands = &qmp_cap_negotiation_commands; + monitor_qmp_caps_reset(mon); + } data = qmp_greeting(mon); qmp_send_response(mon, data); qobject_unref(data); From e47deb1de5b93d1f93b6c7c642b736581a7fbce4 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 3 Dec 2025 12:39:24 +0100 Subject: [PATCH 148/152] hw: add missing includes hidden by block/aio.h hw/qdev/core.h being included by core headers means that it was quite easy to forget including it, or anything that hw/qdev/core.h included. Add the missing inclusions. Signed-off-by: Paolo Bonzini --- hw/virtio/iothread-vq-mapping.c | 1 + include/hw/char/serial.h | 1 + 2 files changed, 2 insertions(+) diff --git a/hw/virtio/iothread-vq-mapping.c b/hw/virtio/iothread-vq-mapping.c index 15909eb933..55ce62986c 100644 --- a/hw/virtio/iothread-vq-mapping.c +++ b/hw/virtio/iothread-vq-mapping.c @@ -8,6 +8,7 @@ #include "qemu/osdep.h" #include "system/iothread.h" +#include "qemu/bitmap.h" #include "hw/virtio/iothread-vq-mapping.h" static bool diff --git a/include/hw/char/serial.h b/include/hw/char/serial.h index b804e22588..ea82ffac47 100644 --- a/include/hw/char/serial.h +++ b/include/hw/char/serial.h @@ -26,6 +26,7 @@ #ifndef HW_SERIAL_H #define HW_SERIAL_H +#include "hw/core/qdev.h" #include "chardev/char-fe.h" #include "system/memory.h" #include "qemu/fifo8.h" From ddab0ef12470fe706c6afa2e4479762d786daab4 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 3 Dec 2025 12:08:25 +0100 Subject: [PATCH 149/152] block: extract include/qemu/aiocb.h out of include/block/aio.h Create a new header corresponding to functions defined in util/aiocb.c, and include it whenever AIOCBs are used but AioContext is not. Signed-off-by: Paolo Bonzini --- block/win32-aio.c | 1 + fsdev/qemu-fsdev-throttle.h | 1 - hw/core/ptimer.c | 1 - hw/misc/i2c-echo.c | 1 - hw/virtio/virtio-pmem.c | 1 - include/block/aio.h | 21 ----------------- include/block/block-global-state.h | 1 + include/block/block-io.h | 1 + include/block/block_int-common.h | 2 +- include/block/raw-aio.h | 1 + include/block/thread-pool.h | 1 + include/hw/ide/ide-dma.h | 2 +- include/hw/scsi/scsi.h | 1 + include/qemu/aiocb.h | 38 ++++++++++++++++++++++++++++++ include/qemu/job.h | 1 + include/qemu/throttle.h | 1 + scsi/qemu-pr-helper.c | 1 - tests/unit/test-thread-pool.c | 1 + ui/input-linux.c | 1 - ui/vnc-jobs.c | 1 - util/aiocb.c | 2 +- 21 files changed, 50 insertions(+), 31 deletions(-) create mode 100644 include/qemu/aiocb.h diff --git a/block/win32-aio.c b/block/win32-aio.c index f0689f3ee9..539f1c81c6 100644 --- a/block/win32-aio.c +++ b/block/win32-aio.c @@ -28,6 +28,7 @@ #include "block/block_int.h" #include "block/aio.h" #include "block/raw-aio.h" +#include "qemu/aiocb.h" #include "qemu/event_notifier.h" #include "qemu/iov.h" #include "qemu/memalign.h" diff --git a/fsdev/qemu-fsdev-throttle.h b/fsdev/qemu-fsdev-throttle.h index daa8ca2494..a1dc030790 100644 --- a/fsdev/qemu-fsdev-throttle.h +++ b/fsdev/qemu-fsdev-throttle.h @@ -15,7 +15,6 @@ #ifndef QEMU_FSDEV_THROTTLE_H #define QEMU_FSDEV_THROTTLE_H -#include "block/aio.h" #include "qemu/coroutine.h" #include "qemu/throttle.h" diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c index e42e06fa4d..0cbe1ed578 100644 --- a/hw/core/ptimer.c +++ b/hw/core/ptimer.c @@ -13,7 +13,6 @@ #include "exec/replay-core.h" #include "exec/icount.h" #include "system/qtest.h" -#include "block/aio.h" #include "hw/core/clock.h" #define DELTA_ADJUST 1 diff --git a/hw/misc/i2c-echo.c b/hw/misc/i2c-echo.c index 2bb99ec0db..54d07db6fa 100644 --- a/hw/misc/i2c-echo.c +++ b/hw/misc/i2c-echo.c @@ -11,7 +11,6 @@ #include "qemu/osdep.h" #include "qemu/timer.h" #include "qemu/main-loop.h" -#include "block/aio.h" #include "hw/i2c/i2c.h" #include "trace.h" diff --git a/hw/virtio/virtio-pmem.c b/hw/virtio/virtio-pmem.c index 854d08abf6..5381d59282 100644 --- a/hw/virtio/virtio-pmem.c +++ b/hw/virtio/virtio-pmem.c @@ -22,7 +22,6 @@ #include "standard-headers/linux/virtio_ids.h" #include "standard-headers/linux/virtio_pmem.h" #include "system/hostmem.h" -#include "block/aio.h" #include "block/thread-pool.h" #include "trace.h" diff --git a/include/block/aio.h b/include/block/aio.h index cc3d5f25a2..59c56d695e 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -27,27 +27,6 @@ #include "hw/core/qdev.h" -typedef struct BlockAIOCB BlockAIOCB; -typedef void BlockCompletionFunc(void *opaque, int ret); - -typedef struct AIOCBInfo { - void (*cancel_async)(BlockAIOCB *acb); - size_t aiocb_size; -} AIOCBInfo; - -struct BlockAIOCB { - const AIOCBInfo *aiocb_info; - BlockDriverState *bs; - BlockCompletionFunc *cb; - void *opaque; - int refcnt; -}; - -void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs, - BlockCompletionFunc *cb, void *opaque); -void qemu_aio_unref(void *p); -void qemu_aio_ref(void *p); - typedef struct AioHandler AioHandler; typedef QLIST_HEAD(, AioHandler) AioHandlerList; typedef void QEMUBHFunc(void *opaque); diff --git a/include/block/block-global-state.h b/include/block/block-global-state.h index 479ca2858e..c2127f1724 100644 --- a/include/block/block-global-state.h +++ b/include/block/block-global-state.h @@ -24,6 +24,7 @@ #ifndef BLOCK_GLOBAL_STATE_H #define BLOCK_GLOBAL_STATE_H +#include "qemu/aiocb.h" #include "block/block-common.h" #include "qemu/coroutine.h" #include "qemu/transactions.h" diff --git a/include/block/block-io.h b/include/block/block-io.h index 4cf83fb367..e5efe0efb2 100644 --- a/include/block/block-io.h +++ b/include/block/block-io.h @@ -24,6 +24,7 @@ #ifndef BLOCK_IO_H #define BLOCK_IO_H +#include "qemu/aiocb.h" #include "block/aio-wait.h" #include "block/block-common.h" #include "qemu/coroutine.h" diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h index cb0143ea77..6d0898e53d 100644 --- a/include/block/block_int-common.h +++ b/include/block/block_int-common.h @@ -24,10 +24,10 @@ #ifndef BLOCK_INT_COMMON_H #define BLOCK_INT_COMMON_H -#include "block/aio.h" #include "block/block-common.h" #include "block/block-global-state.h" #include "block/snapshot.h" +#include "qemu/aiocb.h" #include "qemu/iov.h" #include "qemu/rcu.h" #include "qemu/stats64.h" diff --git a/include/block/raw-aio.h b/include/block/raw-aio.h index 30e5fc9a9f..d568b887f1 100644 --- a/include/block/raw-aio.h +++ b/include/block/raw-aio.h @@ -16,6 +16,7 @@ #ifndef QEMU_RAW_AIO_H #define QEMU_RAW_AIO_H +#include "qemu/aiocb.h" #include "block/aio.h" #include "block/block-common.h" #include "qemu/iov.h" diff --git a/include/block/thread-pool.h b/include/block/thread-pool.h index dd48cf07e8..65cabfc138 100644 --- a/include/block/thread-pool.h +++ b/include/block/thread-pool.h @@ -18,6 +18,7 @@ #ifndef QEMU_THREAD_POOL_H #define QEMU_THREAD_POOL_H +#include "qemu/aiocb.h" #include "block/aio.h" #define THREAD_POOL_MAX_THREADS_DEFAULT 64 diff --git a/include/hw/ide/ide-dma.h b/include/hw/ide/ide-dma.h index d0b19ac9c5..296010a4e0 100644 --- a/include/hw/ide/ide-dma.h +++ b/include/hw/ide/ide-dma.h @@ -1,7 +1,7 @@ #ifndef HW_IDE_DMA_H #define HW_IDE_DMA_H -#include "block/aio.h" +#include "qemu/aiocb.h" #include "qemu/iov.h" typedef struct IDEState IDEState; diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index 83782339d4..75b4d781a5 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -1,6 +1,7 @@ #ifndef QEMU_HW_SCSI_H #define QEMU_HW_SCSI_H +#include "qemu/aiocb.h" #include "block/aio.h" #include "hw/block/block.h" #include "hw/core/qdev.h" diff --git a/include/qemu/aiocb.h b/include/qemu/aiocb.h new file mode 100644 index 0000000000..0622646f31 --- /dev/null +++ b/include/qemu/aiocb.h @@ -0,0 +1,38 @@ +/* + * Data structures representing asynchronous I/O operations + * + * Copyright IBM, Corp. 2008 + * + * Authors: + * Anthony Liguori + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + * + */ + +#ifndef QEMU_AIOCB_H +#define QEMU_AIOCB_H + +typedef struct BlockAIOCB BlockAIOCB; +typedef void BlockCompletionFunc(void *opaque, int ret); + +typedef struct AIOCBInfo { + void (*cancel_async)(BlockAIOCB *acb); + size_t aiocb_size; +} AIOCBInfo; + +struct BlockAIOCB { + const AIOCBInfo *aiocb_info; + BlockDriverState *bs; + BlockCompletionFunc *cb; + void *opaque; + int refcnt; +}; + +void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs, + BlockCompletionFunc *cb, void *opaque); +void qemu_aio_unref(void *p); +void qemu_aio_ref(void *p); + +#endif diff --git a/include/qemu/job.h b/include/qemu/job.h index ead31578d3..af29b8c653 100644 --- a/include/qemu/job.h +++ b/include/qemu/job.h @@ -27,6 +27,7 @@ #define JOB_H #include "qapi/qapi-types-job.h" +#include "qemu/aiocb.h" #include "qemu/queue.h" #include "qemu/progress_meter.h" #include "qemu/coroutine.h" diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h index 181245d29b..8fa2b29452 100644 --- a/include/qemu/throttle.h +++ b/include/qemu/throttle.h @@ -25,6 +25,7 @@ #ifndef THROTTLE_H #define THROTTLE_H +#include "block/aio.h" #include "qapi/qapi-types-block-core.h" #include "qemu/timer.h" diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c index 074b4db472..9dcd3ec711 100644 --- a/scsi/qemu-pr-helper.c +++ b/scsi/qemu-pr-helper.c @@ -52,7 +52,6 @@ #include "trace/control.h" #include "qemu-version.h" -#include "block/aio.h" #include "block/thread-pool.h" #include "scsi/constants.h" diff --git a/tests/unit/test-thread-pool.c b/tests/unit/test-thread-pool.c index 33407b595d..ea5234f9f4 100644 --- a/tests/unit/test-thread-pool.c +++ b/tests/unit/test-thread-pool.c @@ -3,6 +3,7 @@ #include "block/thread-pool.h" #include "block/block.h" #include "qapi/error.h" +#include "qemu/aiocb.h" #include "qemu/timer.h" #include "qemu/error-report.h" #include "qemu/main-loop.h" diff --git a/ui/input-linux.c b/ui/input-linux.c index 44d0c15a9b..c16726a3b7 100644 --- a/ui/input-linux.c +++ b/ui/input-linux.c @@ -13,7 +13,6 @@ #include "ui/input.h" #include "qom/object_interfaces.h" #include "system/iothread.h" -#include "block/aio.h" #include #include "standard-headers/linux/input.h" diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c index bed33950a8..b296d19e08 100644 --- a/ui/vnc-jobs.c +++ b/ui/vnc-jobs.c @@ -31,7 +31,6 @@ #include "vnc-jobs.h" #include "qemu/sockets.h" #include "qemu/main-loop.h" -#include "block/aio.h" #include "trace.h" /* diff --git a/util/aiocb.c b/util/aiocb.c index 5aef3a069c..d1a581080d 100644 --- a/util/aiocb.c +++ b/util/aiocb.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aiocb.h" void *qemu_aio_get(const AIOCBInfo *aiocb_info, BlockDriverState *bs, BlockCompletionFunc *cb, void *opaque) From 238449947d54e321133385d7bbe8e98916aa4147 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 3 Dec 2025 12:09:49 +0100 Subject: [PATCH 150/152] block: reduce files included by block/aio.h Avoid including all of qdev everywhere (the hw/core/qdev.h header in fact brings in a lot more headers too), instead declare a couple structs for which only a pointer type is needed. Signed-off-by: Paolo Bonzini --- include/block/aio.h | 7 +++---- include/block/block-copy.h | 1 + include/block/block-global-state.h | 1 + include/block/block-io.h | 1 + include/block/dirty-bitmap.h | 1 + include/hw/core/qdev.h | 6 +----- include/qemu/job.h | 1 + include/qemu/main-loop.h | 2 +- include/qemu/mem-reentrancy.h | 10 ++++++++++ net/net.c | 1 + tests/unit/ptimer-test-stubs.c | 2 +- util/async.c | 1 + 12 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 include/qemu/mem-reentrancy.h diff --git a/include/block/aio.h b/include/block/aio.h index 59c56d695e..8cca2360d1 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -23,9 +23,8 @@ #include "qemu/lockcnt.h" #include "qemu/thread.h" #include "qemu/timer.h" -#include "block/graph-lock.h" -#include "hw/core/qdev.h" +struct MemReentrancyGuard; typedef struct AioHandler AioHandler; typedef QLIST_HEAD(, AioHandler) AioHandlerList; @@ -211,7 +210,7 @@ struct AioContext { * of nodes and edges from block graph while some * other thread is traversing it. */ - BdrvGraphRWlock *bdrv_graph; + struct BdrvGraphRWlock *bdrv_graph; /* The list of registered AIO handlers. Protected by ctx->list_lock. */ AioHandlerList aio_handlers; @@ -393,7 +392,7 @@ void aio_bh_schedule_oneshot_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque, * device-reentrancy issues */ QEMUBH *aio_bh_new_full(AioContext *ctx, QEMUBHFunc *cb, void *opaque, - const char *name, MemReentrancyGuard *reentrancy_guard); + const char *name, struct MemReentrancyGuard *reentrancy_guard); /** * aio_bh_new: Allocate a new bottom half structure diff --git a/include/block/block-copy.h b/include/block/block-copy.h index dd5cc82f3b..0df2771181 100644 --- a/include/block/block-copy.h +++ b/include/block/block-copy.h @@ -16,6 +16,7 @@ #define BLOCK_COPY_H #include "block/block-common.h" +#include "block/graph-lock.h" #include "qemu/progress_meter.h" /* All APIs are thread-safe */ diff --git a/include/block/block-global-state.h b/include/block/block-global-state.h index c2127f1724..ed89999f0f 100644 --- a/include/block/block-global-state.h +++ b/include/block/block-global-state.h @@ -25,6 +25,7 @@ #define BLOCK_GLOBAL_STATE_H #include "qemu/aiocb.h" +#include "block/graph-lock.h" #include "block/block-common.h" #include "qemu/coroutine.h" #include "qemu/transactions.h" diff --git a/include/block/block-io.h b/include/block/block-io.h index e5efe0efb2..7925e2241e 100644 --- a/include/block/block-io.h +++ b/include/block/block-io.h @@ -27,6 +27,7 @@ #include "qemu/aiocb.h" #include "block/aio-wait.h" #include "block/block-common.h" +#include "block/graph-lock.h" #include "qemu/coroutine.h" #include "qemu/iov.h" diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h index fa956debfb..28029bbc2b 100644 --- a/include/block/dirty-bitmap.h +++ b/include/block/dirty-bitmap.h @@ -2,6 +2,7 @@ #define BLOCK_DIRTY_BITMAP_H #include "block/block-common.h" +#include "block/graph-lock.h" #include "qapi/qapi-types-block-core.h" #include "qemu/hbitmap.h" diff --git a/include/hw/core/qdev.h b/include/hw/core/qdev.h index e211d807e8..4b2730e9d8 100644 --- a/include/hw/core/qdev.h +++ b/include/hw/core/qdev.h @@ -4,6 +4,7 @@ #include "qemu/atomic.h" #include "qemu/queue.h" #include "qemu/bitmap.h" +#include "qemu/mem-reentrancy.h" #include "qemu/rcu.h" #include "qemu/rcu_queue.h" #include "qom/object.h" @@ -208,11 +209,6 @@ struct NamedClockList { QLIST_ENTRY(NamedClockList) node; }; -typedef struct MemReentrancyGuard { - bool engaged_in_io; -} MemReentrancyGuard; - - typedef QLIST_HEAD(, NamedGPIOList) NamedGPIOListHead; typedef QLIST_HEAD(, NamedClockList) NamedClockListHead; typedef QLIST_HEAD(, BusState) BusStateHead; diff --git a/include/qemu/job.h b/include/qemu/job.h index af29b8c653..2b163602c5 100644 --- a/include/qemu/job.h +++ b/include/qemu/job.h @@ -32,6 +32,7 @@ #include "qemu/progress_meter.h" #include "qemu/coroutine.h" #include "block/aio.h" +#include "block/graph-lock.h" typedef struct JobDriver JobDriver; typedef struct JobTxn JobTxn; diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h index 0d55c636b2..241dc87be5 100644 --- a/include/qemu/main-loop.h +++ b/include/qemu/main-loop.h @@ -431,7 +431,7 @@ void qemu_cond_timedwait_bql(QemuCond *cond, int ms); #define qemu_bh_new(cb, opaque) \ qemu_bh_new_full((cb), (opaque), (stringify(cb)), NULL) QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name, - MemReentrancyGuard *reentrancy_guard); + struct MemReentrancyGuard *reentrancy_guard); void qemu_bh_schedule_idle(QEMUBH *bh); enum { diff --git a/include/qemu/mem-reentrancy.h b/include/qemu/mem-reentrancy.h new file mode 100644 index 0000000000..07cafd4717 --- /dev/null +++ b/include/qemu/mem-reentrancy.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef QEMU_MEM_REENTRANCY_H +#define QEMU_MEM_REENTRANCY_H 1 + +typedef struct MemReentrancyGuard { + bool engaged_in_io; +} MemReentrancyGuard; + +#endif diff --git a/net/net.c b/net/net.c index 4930b573ed..a176936f9b 100644 --- a/net/net.c +++ b/net/net.c @@ -39,6 +39,7 @@ #include "qobject/qdict.h" #include "qapi/qmp/qerror.h" #include "qemu/error-report.h" +#include "qemu/mem-reentrancy.h" #include "qemu/sockets.h" #include "qemu/cutils.h" #include "qemu/config-file.h" diff --git a/tests/unit/ptimer-test-stubs.c b/tests/unit/ptimer-test-stubs.c index 8c9407c560..da46dda32d 100644 --- a/tests/unit/ptimer-test-stubs.c +++ b/tests/unit/ptimer-test-stubs.c @@ -108,7 +108,7 @@ int64_t qemu_clock_deadline_ns_all(QEMUClockType type, int attr_mask) } QEMUBH *qemu_bh_new_full(QEMUBHFunc *cb, void *opaque, const char *name, - MemReentrancyGuard *reentrancy_guard) + struct MemReentrancyGuard *reentrancy_guard) { QEMUBH *bh = g_new(QEMUBH, 1); diff --git a/util/async.c b/util/async.c index 48f8828636..39f391fb71 100644 --- a/util/async.c +++ b/util/async.c @@ -29,6 +29,7 @@ #include "block/thread-pool.h" #include "block/graph-lock.h" #include "qemu/main-loop.h" +#include "qemu/mem-reentrancy.h" #include "qemu/atomic.h" #include "qemu/lockcnt.h" #include "qemu/rcu_queue.h" From ba773aded3e5fcc096fa4db415c248e8f992a615 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 3 Dec 2025 12:33:13 +0100 Subject: [PATCH 151/152] block: rename block/aio.h to qemu/aio.h AioContexts are used as a generic event loop even outside the block layer; move the header file out of block/ just like the implementation is in util/. Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- block/aio_task.c | 2 +- block/export/fuse.c | 2 +- block/io_uring.c | 2 +- block/linux-aio.c | 2 +- block/win32-aio.c | 2 +- docs/devel/multiple-iothreads.rst | 4 ++-- include/block/aio-wait.h | 2 +- include/block/raw-aio.h | 2 +- include/block/thread-pool.h | 2 +- include/hw/scsi/scsi.h | 2 +- include/hw/virtio/virtio.h | 2 +- include/io/channel.h | 2 +- include/{block => qemu}/aio.h | 0 include/qemu/job.h | 2 +- include/qemu/main-loop.h | 2 +- include/qemu/throttle.h | 2 +- include/scsi/pr-manager.h | 2 +- include/system/event-loop-base.h | 2 +- include/system/iothread.h | 2 +- include/system/replay.h | 2 +- iothread.c | 2 +- qapi/qmp-dispatch.c | 2 +- replay/replay-events.c | 2 +- scripts/analyze-inclusions | 2 +- scsi/pr-manager.c | 2 +- stubs/linux-aio.c | 2 +- stubs/replay-tools.c | 2 +- tests/unit/iothread.c | 2 +- tests/unit/iothread.h | 2 +- tests/unit/test-aio-multithread.c | 2 +- tests/unit/test-aio.c | 2 +- tests/unit/test-nested-aio-poll.c | 2 +- tests/unit/test-thread-pool.c | 2 +- tests/unit/test-throttle.c | 2 +- util/aio-posix.h | 2 +- util/async.c | 2 +- util/main-loop.c | 2 +- util/qemu-co-timeout.c | 2 +- util/qemu-coroutine-lock.c | 2 +- util/qemu-coroutine-sleep.c | 2 +- util/qemu-coroutine.c | 2 +- util/throttle.c | 2 +- 43 files changed, 43 insertions(+), 43 deletions(-) rename include/{block => qemu}/aio.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 81f48f0709..efceed9fe5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3071,7 +3071,7 @@ F: util/aio-*.h F: util/defer-call.c F: util/fdmon-*.c F: block/io.c -F: include/block/aio.h +F: include/qemu/aio.h F: include/block/aio-wait.h F: include/qemu/defer-call.h F: scripts/qemugdb/aio.py diff --git a/block/aio_task.c b/block/aio_task.c index bb5c05f455..21b68a9fc0 100644 --- a/block/aio_task.c +++ b/block/aio_task.c @@ -23,7 +23,7 @@ */ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/aio_task.h" struct AioTaskPool { diff --git a/block/export/fuse.c b/block/export/fuse.c index 465cc9891d..8cf4572f78 100644 --- a/block/export/fuse.c +++ b/block/export/fuse.c @@ -20,7 +20,7 @@ #include "qemu/osdep.h" #include "qemu/memalign.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/block_int-common.h" #include "block/export.h" #include "block/fuse.h" diff --git a/block/io_uring.c b/block/io_uring.c index f1514cf024..cb131d3b8b 100644 --- a/block/io_uring.c +++ b/block/io_uring.c @@ -10,7 +10,7 @@ */ #include "qemu/osdep.h" #include -#include "block/aio.h" +#include "qemu/aio.h" #include "block/block.h" #include "block/raw-aio.h" #include "qemu/coroutine.h" diff --git a/block/linux-aio.c b/block/linux-aio.c index c200e7ad20..53c3e9af8a 100644 --- a/block/linux-aio.c +++ b/block/linux-aio.c @@ -8,7 +8,7 @@ * See the COPYING file in the top-level directory. */ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "qemu/queue.h" #include "block/block.h" #include "block/raw-aio.h" diff --git a/block/win32-aio.c b/block/win32-aio.c index 539f1c81c6..6e1b34fb95 100644 --- a/block/win32-aio.c +++ b/block/win32-aio.c @@ -26,7 +26,7 @@ #include "qemu/timer.h" #include "block/block-io.h" #include "block/block_int.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/raw-aio.h" #include "qemu/aiocb.h" #include "qemu/event_notifier.h" diff --git a/docs/devel/multiple-iothreads.rst b/docs/devel/multiple-iothreads.rst index d1f3fc4510..a6eb046267 100644 --- a/docs/devel/multiple-iothreads.rst +++ b/docs/devel/multiple-iothreads.rst @@ -52,7 +52,7 @@ How to program for ``IOThread``\ s ---------------------------------- The main difference between legacy code and new code that can run in an ``IOThread`` is dealing explicitly with the event loop object, ``AioContext`` -(see ``include/block/aio.h``). Code that only works in the main loop +(see ``include/qemu/aio.h``). Code that only works in the main loop implicitly uses the main loop's ``AioContext``. Code that supports running in ``IOThread``\ s must be aware of its ``AioContext``. @@ -74,7 +74,7 @@ Since they implicitly work on the main loop they cannot be used in code that runs in an ``IOThread``. They might cause a crash or deadlock if called from an ``IOThread`` since the BQL is not held. -Instead, use the ``AioContext`` functions directly (see ``include/block/aio.h``): +Instead, use the ``AioContext`` functions directly (see ``include/qemu/aio.h``): * ``aio_set_fd_handler()`` - monitor a file descriptor * ``aio_set_event_notifier()`` - monitor an event notifier * ``aio_timer_new()`` - create a timer diff --git a/include/block/aio-wait.h b/include/block/aio-wait.h index cf5e8bde1c..57ebe21b31 100644 --- a/include/block/aio-wait.h +++ b/include/block/aio-wait.h @@ -25,7 +25,7 @@ #ifndef QEMU_AIO_WAIT_H #define QEMU_AIO_WAIT_H -#include "block/aio.h" +#include "qemu/aio.h" #include "qemu/main-loop.h" /** diff --git a/include/block/raw-aio.h b/include/block/raw-aio.h index d568b887f1..256d0468a8 100644 --- a/include/block/raw-aio.h +++ b/include/block/raw-aio.h @@ -17,7 +17,7 @@ #define QEMU_RAW_AIO_H #include "qemu/aiocb.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/block-common.h" #include "qemu/iov.h" diff --git a/include/block/thread-pool.h b/include/block/thread-pool.h index 65cabfc138..e9ddb2b6d3 100644 --- a/include/block/thread-pool.h +++ b/include/block/thread-pool.h @@ -19,7 +19,7 @@ #define QEMU_THREAD_POOL_H #include "qemu/aiocb.h" -#include "block/aio.h" +#include "qemu/aio.h" #define THREAD_POOL_MAX_THREADS_DEFAULT 64 diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index 75b4d781a5..d26f1127bb 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -2,7 +2,7 @@ #define QEMU_HW_SCSI_H #include "qemu/aiocb.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "hw/block/block.h" #include "hw/core/qdev.h" #include "scsi/utils.h" diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 91ff2fa21a..27cd98d2fe 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -23,7 +23,7 @@ #include "standard-headers/linux/virtio_config.h" #include "standard-headers/linux/virtio_ring.h" #include "qom/object.h" -#include "block/aio.h" +#include "qemu/aio.h" /* * A guest should never accept this. It implies negotiation is broken diff --git a/include/io/channel.h b/include/io/channel.h index f42be760f9..1b02350437 100644 --- a/include/io/channel.h +++ b/include/io/channel.h @@ -23,7 +23,7 @@ #include "qom/object.h" #include "qemu/coroutine-core.h" -#include "block/aio.h" +#include "qemu/aio.h" #define TYPE_QIO_CHANNEL "qio-channel" OBJECT_DECLARE_TYPE(QIOChannel, QIOChannelClass, diff --git a/include/block/aio.h b/include/qemu/aio.h similarity index 100% rename from include/block/aio.h rename to include/qemu/aio.h diff --git a/include/qemu/job.h b/include/qemu/job.h index 2b163602c5..0e40e8b457 100644 --- a/include/qemu/job.h +++ b/include/qemu/job.h @@ -31,7 +31,7 @@ #include "qemu/queue.h" #include "qemu/progress_meter.h" #include "qemu/coroutine.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/graph-lock.h" typedef struct JobDriver JobDriver; diff --git a/include/qemu/main-loop.h b/include/qemu/main-loop.h index 241dc87be5..8c1241a2c1 100644 --- a/include/qemu/main-loop.h +++ b/include/qemu/main-loop.h @@ -25,7 +25,7 @@ #ifndef QEMU_MAIN_LOOP_H #define QEMU_MAIN_LOOP_H -#include "block/aio.h" +#include "qemu/aio.h" #include "qom/object.h" #include "system/event-loop-base.h" diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h index 8fa2b29452..06b6589c94 100644 --- a/include/qemu/throttle.h +++ b/include/qemu/throttle.h @@ -25,7 +25,7 @@ #ifndef THROTTLE_H #define THROTTLE_H -#include "block/aio.h" +#include "qemu/aio.h" #include "qapi/qapi-types-block-core.h" #include "qemu/timer.h" diff --git a/include/scsi/pr-manager.h b/include/scsi/pr-manager.h index 45de28d354..5045d115c4 100644 --- a/include/scsi/pr-manager.h +++ b/include/scsi/pr-manager.h @@ -4,7 +4,7 @@ #include "qom/object.h" #include "qapi/visitor.h" #include "qom/object_interfaces.h" -#include "block/aio.h" +#include "qemu/aio.h" #define TYPE_PR_MANAGER "pr-manager" diff --git a/include/system/event-loop-base.h b/include/system/event-loop-base.h index a6c24f1351..130629e7f3 100644 --- a/include/system/event-loop-base.h +++ b/include/system/event-loop-base.h @@ -13,7 +13,7 @@ #define QEMU_EVENT_LOOP_BASE_H #include "qom/object.h" -#include "block/aio.h" +#include "qemu/aio.h" #define TYPE_EVENT_LOOP_BASE "event-loop-base" OBJECT_DECLARE_TYPE(EventLoopBase, EventLoopBaseClass, diff --git a/include/system/iothread.h b/include/system/iothread.h index d95c17a645..e26d13c6c7 100644 --- a/include/system/iothread.h +++ b/include/system/iothread.h @@ -14,7 +14,7 @@ #ifndef IOTHREAD_H #define IOTHREAD_H -#include "block/aio.h" +#include "qemu/aio.h" #include "qemu/thread.h" #include "qom/object.h" #include "system/event-loop-base.h" diff --git a/include/system/replay.h b/include/system/replay.h index 68f91bdfbf..f8715ca9fe 100644 --- a/include/system/replay.h +++ b/include/system/replay.h @@ -15,7 +15,7 @@ #include "qapi/qapi-types-misc.h" #include "qapi/qapi-types-run-state.h" #include "qapi/qapi-types-ui.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "qemu/audio.h" /* replay clock kinds */ diff --git a/iothread.c b/iothread.c index 8810376dce..caf68e0764 100644 --- a/iothread.c +++ b/iothread.c @@ -15,7 +15,7 @@ #include "qom/object.h" #include "qom/object_interfaces.h" #include "qemu/module.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/block.h" #include "system/event-loop-base.h" #include "system/iothread.h" diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c index e569224eae..9bb1e6a9f4 100644 --- a/qapi/qmp-dispatch.c +++ b/qapi/qmp-dispatch.c @@ -13,7 +13,7 @@ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "qapi/compat-policy.h" #include "qapi/error.h" #include "qapi/qmp-registry.h" diff --git a/replay/replay-events.c b/replay/replay-events.c index a96e47e774..9e5af5e849 100644 --- a/replay/replay-events.c +++ b/replay/replay-events.c @@ -13,7 +13,7 @@ #include "qemu/error-report.h" #include "system/replay.h" #include "replay-internal.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "ui/input.h" #include "hw/core/cpu.h" diff --git a/scripts/analyze-inclusions b/scripts/analyze-inclusions index 50a7d95d9e..c30e44f02e 100644 --- a/scripts/analyze-inclusions +++ b/scripts/analyze-inclusions @@ -52,7 +52,7 @@ echo $(grep_include -F 'qapi-types.h') files include qapi-types.h echo $(grep_include -F 'trace/generated-tracers.h') files include generated-tracers.h echo $(grep_include -F 'qapi/error.h') files include qapi/error.h echo $(grep_include -F 'qom/object.h') files include qom/object.h -echo $(grep_include -F 'block/aio.h') files include block/aio.h +echo $(grep_include -F 'qemu/aio.h') files include block/aio.h echo $(grep_include -F 'system/memory.h') files include system/memory.h echo $(grep_include -F 'fpu/softfloat.h') files include fpu/softfloat.h echo $(grep_include -F 'qemu/bswap.h') files include qemu/bswap.h diff --git a/scsi/pr-manager.c b/scsi/pr-manager.c index 40e1210eb2..fec0d68c4c 100644 --- a/scsi/pr-manager.c +++ b/scsi/pr-manager.c @@ -13,7 +13,7 @@ #include #include "qapi/error.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/thread-pool.h" #include "scsi/pr-manager.h" #include "trace.h" diff --git a/stubs/linux-aio.c b/stubs/linux-aio.c index 84d1f784ae..b1a27e926e 100644 --- a/stubs/linux-aio.c +++ b/stubs/linux-aio.c @@ -8,7 +8,7 @@ * See the COPYING file in the top-level directory. */ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/raw-aio.h" void laio_detach_aio_context(LinuxAioState *s, AioContext *old_context) diff --git a/stubs/replay-tools.c b/stubs/replay-tools.c index c537485f40..17dc3babd9 100644 --- a/stubs/replay-tools.c +++ b/stubs/replay-tools.c @@ -1,6 +1,6 @@ #include "qemu/osdep.h" #include "system/replay.h" -#include "block/aio.h" +#include "qemu/aio.h" bool replay_events_enabled(void) { diff --git a/tests/unit/iothread.c b/tests/unit/iothread.c index f9b0791084..a363bf8f70 100644 --- a/tests/unit/iothread.c +++ b/tests/unit/iothread.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "qemu/main-loop.h" #include "qemu/rcu.h" #include "iothread.h" diff --git a/tests/unit/iothread.h b/tests/unit/iothread.h index 4877cea6a3..eb4d0c77f8 100644 --- a/tests/unit/iothread.h +++ b/tests/unit/iothread.h @@ -13,7 +13,7 @@ #ifndef TEST_IOTHREAD_H #define TEST_IOTHREAD_H -#include "block/aio.h" +#include "qemu/aio.h" #include "qemu/thread.h" typedef struct IOThread IOThread; diff --git a/tests/unit/test-aio-multithread.c b/tests/unit/test-aio-multithread.c index c24200a712..9179cdc6a3 100644 --- a/tests/unit/test-aio-multithread.c +++ b/tests/unit/test-aio-multithread.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "qemu/coroutine.h" #include "qemu/thread.h" #include "qemu/error-report.h" diff --git a/tests/unit/test-aio.c b/tests/unit/test-aio.c index 010d65b79a..b3ca4d8a59 100644 --- a/tests/unit/test-aio.c +++ b/tests/unit/test-aio.c @@ -11,7 +11,7 @@ */ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "qapi/error.h" #include "qemu/timer.h" #include "qemu/sockets.h" diff --git a/tests/unit/test-nested-aio-poll.c b/tests/unit/test-nested-aio-poll.c index d13ecccd8c..9ab1ad08a7 100644 --- a/tests/unit/test-nested-aio-poll.c +++ b/tests/unit/test-nested-aio-poll.c @@ -13,7 +13,7 @@ * aio_poll() calls. This test case checks that this is indeed what happens. */ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "qapi/error.h" #include "util/aio-posix.h" diff --git a/tests/unit/test-thread-pool.c b/tests/unit/test-thread-pool.c index ea5234f9f4..1e2f05f841 100644 --- a/tests/unit/test-thread-pool.c +++ b/tests/unit/test-thread-pool.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/thread-pool.h" #include "block/block.h" #include "qapi/error.h" diff --git a/tests/unit/test-throttle.c b/tests/unit/test-throttle.c index dfa61c75ea..52eb8966b3 100644 --- a/tests/unit/test-throttle.c +++ b/tests/unit/test-throttle.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include -#include "block/aio.h" +#include "qemu/aio.h" #include "qapi/error.h" #include "qemu/throttle.h" #include "qemu/error-report.h" diff --git a/util/aio-posix.h b/util/aio-posix.h index babbfa8314..0cedb8d189 100644 --- a/util/aio-posix.h +++ b/util/aio-posix.h @@ -17,7 +17,7 @@ #ifndef AIO_POSIX_H #define AIO_POSIX_H -#include "block/aio.h" +#include "qemu/aio.h" #include "qapi/error.h" struct AioHandler { diff --git a/util/async.c b/util/async.c index 39f391fb71..80d6b01a8a 100644 --- a/util/async.c +++ b/util/async.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/thread-pool.h" #include "block/graph-lock.h" #include "qemu/main-loop.h" diff --git a/util/main-loop.c b/util/main-loop.c index b462598f76..ad8645c30a 100644 --- a/util/main-loop.c +++ b/util/main-loop.c @@ -30,7 +30,7 @@ #include "exec/icount.h" #include "system/replay.h" #include "qemu/main-loop.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "block/thread-pool.h" #include "qemu/error-report.h" #include "qemu/queue.h" diff --git a/util/qemu-co-timeout.c b/util/qemu-co-timeout.c index 00cd335649..6774440b28 100644 --- a/util/qemu-co-timeout.c +++ b/util/qemu-co-timeout.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "qemu/coroutine.h" -#include "block/aio.h" +#include "qemu/aio.h" typedef struct QemuCoTimeoutState { CoroutineEntry *entry; diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c index 2534435388..fac91582b5 100644 --- a/util/qemu-coroutine-lock.c +++ b/util/qemu-coroutine-lock.c @@ -30,7 +30,7 @@ #include "qemu/coroutine_int.h" #include "qemu/processor.h" #include "qemu/queue.h" -#include "block/aio.h" +#include "qemu/aio.h" #include "trace.h" void qemu_co_queue_init(CoQueue *queue) diff --git a/util/qemu-coroutine-sleep.c b/util/qemu-coroutine-sleep.c index af59f9af98..edef117284 100644 --- a/util/qemu-coroutine-sleep.c +++ b/util/qemu-coroutine-sleep.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qemu/coroutine_int.h" #include "qemu/timer.h" -#include "block/aio.h" +#include "qemu/aio.h" static const char *qemu_co_sleep_ns__scheduled = "qemu_co_sleep_ns"; diff --git a/util/qemu-coroutine.c b/util/qemu-coroutine.c index 64d6264fc7..d17135f585 100644 --- a/util/qemu-coroutine.c +++ b/util/qemu-coroutine.c @@ -19,7 +19,7 @@ #include "qemu/coroutine_int.h" #include "qemu/coroutine-tls.h" #include "qemu/cutils.h" -#include "block/aio.h" +#include "qemu/aio.h" enum { COROUTINE_POOL_BATCH_MAX_SIZE = 128, diff --git a/util/throttle.c b/util/throttle.c index 9582899da3..8044f04ffc 100644 --- a/util/throttle.c +++ b/util/throttle.c @@ -26,7 +26,7 @@ #include "qapi/error.h" #include "qemu/throttle.h" #include "qemu/timer.h" -#include "block/aio.h" +#include "qemu/aio.h" /* This function make a bucket leak * From 12e50722e444d8b69c93f90be3f555c9b2ffc699 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 3 Dec 2025 12:34:25 +0100 Subject: [PATCH 152/152] block: rename block/aio-wait.h to qemu/aio-wait.h AIO_WAIT_WHILE is used even outside the block layer; move the header file out of block/ just like the implementation is in util/. Signed-off-by: Paolo Bonzini --- MAINTAINERS | 2 +- block/io.c | 2 +- blockjob.c | 2 +- hw/display/apple-gfx-mmio.m | 2 +- hw/display/apple-gfx.m | 2 +- include/block/block-io.h | 2 +- include/{block => qemu}/aio-wait.h | 0 io/channel.c | 2 +- job.c | 2 +- net/colo-compare.c | 2 +- net/filter-mirror.c | 2 +- util/aio-wait.c | 2 +- util/vhost-user-server.c | 2 +- 13 files changed, 12 insertions(+), 12 deletions(-) rename include/{block => qemu}/aio-wait.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index efceed9fe5..2f34b92178 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3072,7 +3072,7 @@ F: util/defer-call.c F: util/fdmon-*.c F: block/io.c F: include/qemu/aio.h -F: include/block/aio-wait.h +F: include/qemu/aio-wait.h F: include/qemu/defer-call.h F: scripts/qemugdb/aio.py F: tests/unit/test-fdmon-epoll.c diff --git a/block/io.c b/block/io.c index c4a4301321..cace297f22 100644 --- a/block/io.c +++ b/block/io.c @@ -25,7 +25,7 @@ #include "qemu/osdep.h" #include "trace.h" #include "system/block-backend.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #include "block/blockjob.h" #include "block/blockjob_int.h" #include "block/block_int.h" diff --git a/blockjob.c b/blockjob.c index db7c3a69a0..f3b11cc7a1 100644 --- a/blockjob.c +++ b/blockjob.c @@ -24,7 +24,7 @@ */ #include "qemu/osdep.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #include "block/block.h" #include "block/blockjob_int.h" #include "block/block_int.h" diff --git a/hw/display/apple-gfx-mmio.m b/hw/display/apple-gfx-mmio.m index 983fc1724a..58beaadd1f 100644 --- a/hw/display/apple-gfx-mmio.m +++ b/hw/display/apple-gfx-mmio.m @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #include "hw/core/sysbus.h" #include "hw/core/irq.h" #include "apple-gfx.h" diff --git a/hw/display/apple-gfx.m b/hw/display/apple-gfx.m index 174d56ae05..e0a765fcb1 100644 --- a/hw/display/apple-gfx.m +++ b/hw/display/apple-gfx.m @@ -17,7 +17,7 @@ #include "qemu/log.h" #include "qapi/visitor.h" #include "qapi/error.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #include "system/address-spaces.h" #include "system/dma.h" #include "migration/blocker.h" diff --git a/include/block/block-io.h b/include/block/block-io.h index 7925e2241e..d34d846bb2 100644 --- a/include/block/block-io.h +++ b/include/block/block-io.h @@ -25,7 +25,7 @@ #define BLOCK_IO_H #include "qemu/aiocb.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #include "block/block-common.h" #include "block/graph-lock.h" #include "qemu/coroutine.h" diff --git a/include/block/aio-wait.h b/include/qemu/aio-wait.h similarity index 100% rename from include/block/aio-wait.h rename to include/qemu/aio-wait.h diff --git a/io/channel.c b/io/channel.c index b7966abc4f..cc02d997a4 100644 --- a/io/channel.c +++ b/io/channel.c @@ -19,7 +19,7 @@ */ #include "qemu/osdep.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #include "io/channel.h" #include "qapi/error.h" #include "qemu/main-loop.h" diff --git a/job.c b/job.c index 0653bc2ba6..e747908472 100644 --- a/job.c +++ b/job.c @@ -28,7 +28,7 @@ #include "qemu/job.h" #include "qemu/id.h" #include "qemu/main-loop.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #include "trace/trace-root.h" #include "qapi/qapi-events-job.h" diff --git a/net/colo-compare.c b/net/colo-compare.c index 95018b4704..c356419d6a 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -30,7 +30,7 @@ #include "migration/colo.h" #include "util.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #include "qemu/coroutine.h" #define TYPE_COLO_COMPARE "colo-compare" diff --git a/net/filter-mirror.c b/net/filter-mirror.c index 8e01e98f40..d2bfde42e8 100644 --- a/net/filter-mirror.c +++ b/net/filter-mirror.c @@ -20,7 +20,7 @@ #include "chardev/char-fe.h" #include "qemu/iov.h" #include "qemu/sockets.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" #define TYPE_FILTER_MIRROR "filter-mirror" typedef struct MirrorState MirrorState; diff --git a/util/aio-wait.c b/util/aio-wait.c index b5336cf5fd..53913c4bd1 100644 --- a/util/aio-wait.c +++ b/util/aio-wait.c @@ -24,7 +24,7 @@ #include "qemu/osdep.h" #include "qemu/main-loop.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" AioWait global_aio_wait; diff --git a/util/vhost-user-server.c b/util/vhost-user-server.c index 1dbe409f82..1536d97baf 100644 --- a/util/vhost-user-server.c +++ b/util/vhost-user-server.c @@ -11,7 +11,7 @@ #include "qemu/error-report.h" #include "qemu/main-loop.h" #include "qemu/vhost-user-server.h" -#include "block/aio-wait.h" +#include "qemu/aio-wait.h" /* * Theory of operation: